Відповіді:
Переглянувши документацію для тексту, ви побачите, що 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))
}
}
}
Для швидкого користувальницького інтерфейсу потрібно просто вставити рядовий ключ з локалізації .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)
}