Respuestas:
Cuando mira la documentación para Texto, puede ver que toma LocalizedStringKey no una Cadena en su inicializador:
init(_ key: LocalizedStringKey, tableName: String? = nil, bundle: Bundle? = nil, comment: StaticString? = nil)
Hace que la localización sea muy directa. Todo lo que tienes que hacer es:
Cuando seleccione Localizable.strings, verá que contiene archivos para el idioma original y el idioma que acaba de agregar. Ahí es donde coloca sus traducciones, es decir, pares de texto localizados en clave.
Si tiene un texto como este, es su aplicación:
Text("Hello World!")
Ahora debe agregar a su Localizable.strings sus traducciones:
para su idioma base:
"Hello World!" = "Hello World!";
y para su segundo idioma (en este caso, alemán):
"Hello World!" = "Hallo Welt!";
Para ver sus vistas previas localizadas, puede definirlas así:
struct ContentViewView_Previews: PreviewProvider {
static var previews: some View {
ForEach(["en", "de"], id: \.self) { id in
ContentView()
.environment(\.locale, .init(identifier: id))
}
}
}
Para un archivo de interfaz de usuario rápido, solo necesita insertar la clave de cadena del archivo .strings de localización
importar 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"))
}
}
y este es un ejemplo del archivo .strings
"selectLanguage" = "Select language";
"languagesList" = "Languages list";
el resultado está aquí
Para localizar su aplicación necesita:
Para usar Localazable en SwiftUI, puede realizar lo siguiente:
importa SwiftUI para usar LocalizedStringKey en tus archivos
//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)
}