Câu trả lời:
Khi bạn xem tài liệu về Văn bản, bạn có thể thấy rằng nó đưa LocalizedStringKey chứ không phải là Chuỗi vào trình khởi tạo của nó:
init(_ key: LocalizedStringKey, tableName: String? = nil, bundle: Bundle? = nil, comment: StaticString? = nil)
Nó làm cho nội địa hóa rất đơn giản. Tât cả nhưng điêu bạn phải lam la:
Khi bạn chọn Localizable.strings, bạn sẽ thấy rằng nó chứa các tệp cho ngôn ngữ gốc và ngôn ngữ bạn vừa thêm. Đó là nơi bạn đặt bản dịch của mình, tức là khóa - cặp văn bản được bản địa hóa.
Nếu bạn có một văn bản như thế này là ứng dụng của bạn:
Text("Hello World!")
Bây giờ bạn phải thêm vào Localizable.strings bản dịch của bạn:
cho ngôn ngữ cơ sở của bạn:
"Hello World!" = "Hello World!";
và cho ngôn ngữ thứ hai của bạn (trong trường hợp này là tiếng Đức):
"Hello World!" = "Hallo Welt!";
Để xem bản xem trước của bạn được bản địa hóa, bạn có thể định nghĩa chúng như thế này:
struct ContentViewView_Previews: PreviewProvider {
static var previews: some View {
ForEach(["en", "de"], id: \.self) { id in
ContentView()
.environment(\.locale, .init(identifier: id))
}
}
}
Đối với tệp UI nhanh, bạn chỉ cần chèn khóa chuỗi từ tệp .strings bản địa hóa
nhập SwiftUI
struct ContentView: View {
var body: some View {
VStack {
Text("selectLanguage")
Text("languagesList")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
.environment(\.locale, .init(identifier: "en"))
}
}
và đây là một ví dụ từ tập tin .strings
"selectLanguage" = "Select language";
"languagesList" = "Languages list";
kết quả là đây
Để bản địa hóa ứng dụng của bạn, bạn cần:
Để sử dụng Localazable trong SwiftUI, bạn có thể thực hiện theo cách này:
nhập SwiftUI để sử dụng LocalizedStringKey trong tệp của bạn
//MARK: - File where you enum your keys to your Localized file
enum ButtonName: LocalizedStringKey {
case submit
case cancel
}
//MARK: - Your Localized file where are your translation
"submit" = "Submit is pressed";
"cancel" = "Cancel";
//MARK: - In your code
let submitButtonName = ButtonName.submit.rawValue
let cancelButtonName = ButtonName.cancel.rawValue
VStack {
Text(submitButtonName)
Text(cancelButtonName)
}