Ответы:
Когда вы посмотрите на документацию по Text, вы увидите, что он берет LocalizedStringKey, а не String, в свой инициализатор:
init(_ key: LocalizedStringKey, tableName: String? = nil, bundle: Bundle? = nil, comment: StaticString? = nil)
Это делает локализацию очень простой. Все, что вам нужно сделать, это:
Когда вы выберете Localizable.strings, вы увидите, что он содержит файлы для исходного языка и языка, который вы только что добавили. Вот где вы размещаете свои переводы, т.е. ключевые - локализованные текстовые пары.
Если у вас есть текст, как это ваше приложение:
Text("Hello World!")
Теперь вы должны добавить в ваши Localizable.strings ваши переводы:
для вашего базового языка:
"Hello World!" = "Hello World!";
и для вашего второго языка (в данном случае немецкого):
"Hello World!" = "Hallo Welt!";
Чтобы увидеть ваши превью локализованными, вы можете определить их следующим образом:
struct ContentViewView_Previews: PreviewProvider {
static var previews: some View {
ForEach(["en", "de"], id: \.self) { id in
ContentView()
.environment(\.locale, .init(identifier: id))
}
}
}
Для быстрого UI-файла вам просто нужно вставить строковый ключ из файла .strings локализации
импорт 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"))
}
}
и это пример из файла .strings
"selectLanguage" = "Select language";
"languagesList" = "Languages list";
результат здесь
Для локализации вашего приложения вам необходимо:
Чтобы использовать Localazable в SwiftUI, вы можете выполнить это:
импортируйте SwiftUI для использования LocalizedStringKey в ваших файлах
//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)
}