Cómo implementar la localización en Swift UI

10

Alguien puede ayudarme? No puedo encontrar ninguna descripción de la localización en Swift UI. ¿Alguien puede dar consejos o mejor un ejemplo de cómo localizar, por ejemplo Text()?

Oleh H
fuente

Respuestas:

15

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:

  • cree un nuevo archivo de tipo Strings File, llámelo Localizable
  • seleccione el nuevo archivo y navegue al Inspector de archivos en el panel lateral derecho y haga clic en Localizar ...
  • vaya a su archivo de proyecto a la sección Localizaciones y agregue otro idioma a la lista: Xcode creará archivos de localización para usted

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))
        }
    }
}
LuLuGaGa
fuente
Gracias, fue útil! Pero tuve algunos problemas porque ya se agregaron varios idiomas.
Oleh H
Seguí estas instrucciones al pie de la letra y no funcionó. Estoy ejecutando iOS 10.15.1 Beta y Xcode 11.1. Cualquier consejo gustosamente aceptado. Por ahora voy a asumir una falla en el software beta y no perderé más tiempo en esto
la mamá de Joseph Beuys el
¿Cuál fue exactamente el problema?
LuLuGaGa
1
Encontré el problema @LuLuGaGa. Resulta que no estaba siguiendo las instrucciones al pie de la letra, como dije que sí. Mi archivo de cadena de localizaciones estaba en una subcarpeta. Póngalo en el nivel del proyecto y funciona bien
Joseph Beuys 'Mum
1
También descubrí (creo) que llamar al archivo de cadenas de texto de otra manera que no sea Localizable significa que no funcionará
la mamá de Joseph Beuys el
3

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í

Oleh H
fuente
0

Para localizar su aplicación necesita:

  1. Utilice elementos SwiftUI como: Texto ("Agradable") . Nice se convierte en la clave en Localizable.strings.
  2. En los casos en que el texto no está en el elemento SwiftUI, debe usar NSLocalizedString .
  3. Seleccione su objetivo de aplicación.
  4. Exportar localización: Editar -> Exportar para localización ...
  5. Dar archivos exportados al traductor.
  6. Importar traducciones: Editar -> Importar ubicaciones ...
Ramis
fuente
0

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)
}
Roland Lariotte
fuente