Come implementare la localizzazione nell'interfaccia utente di Swift


10

Qualcuno può aiutarmi? Non riesco a trovare alcuna descrizione della localizzazione nell'interfaccia utente di Swift. Qualcuno può dare consigli o meglio un esempio di come localizzare ad esempio Text()?

Risposte:


15

Quando guardi la documentazione di Text puoi vedere che prende LocalizedStringKey non una stringa nel suo inizializzatore:

init(_ key: LocalizedStringKey, tableName: String? = nil, bundle: Bundle? = nil, comment: StaticString? = nil)

Rende la localizzazione molto semplice. Tutto quello che devi fare è:

  • crea un nuovo file di tipo Strings File, chiamalo Localizable
  • seleziona il nuovo file e naigate in File Inspector nel pannello di destra e fai clic su Localizza ...
  • vai al tuo file di progetto nella sezione Localizzazioni e aggiungi un'altra lingua all'elenco - Xcode creerà i file di localizzazione per te

Quando selezioni Localizable.strings noterai che contiene file per la lingua originale e la lingua che hai appena aggiunto. È qui che metti le tue traduzioni, ovvero le coppie di testo localizzate chiave.

Se hai un testo come questo è la tua app:

Text("Hello World!")

Ora devi aggiungere a Localizable.strings le tue traduzioni:

per la tua lingua di base:

"Hello World!" = "Hello World!";

e per la tua seconda lingua (in questo caso il tedesco):

"Hello World!" = "Hallo Welt!";

Per vedere le tue anteprime localizzate puoi definirle in questo modo:

struct ContentViewView_Previews: PreviewProvider {

    static var previews: some View {
        ForEach(["en", "de"], id: \.self) { id in
            ContentView()
                .environment(\.locale, .init(identifier: id))
        }
    }
}

Grazie, è stato utile! Ma ho avuto alcuni problemi perché c'erano già diverse lingue aggiunte.
Oleh H,

Ho seguito queste istruzioni alla lettera e non ha funzionato. Sto eseguendo iOS 10.15.1 Beta e Xcode 11.1. Qualche consiglio accettato volentieri. Per ora assumerò un problema tecnico nel software beta e non perderò altro tempo su questo
Mamma di Joseph Beuys,

Qual era esattamente il problema?
LuLuGaGa,

1
Ho trovato il problema @LuLuGaGa. Sembra che non stavo seguendo le istruzioni alla lettera, come ho detto che avevo. Il file di stringhe delle localizzazioni era in una sottocartella. Mettilo a livello di progetto e funziona benissimo
Mamma di Joseph Beuys,

1
Ho anche scoperto (penso) che chiamare il file di stringhe in modo diverso da Localizable significa che non funzionerà
Joseph Beuys 'Mum

3

Per un file UI rapido, è sufficiente inserire la chiave stringa dal file .strings di localizzazione

importare 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"))
    }
}

e questo è un esempio dal file .strings

"selectLanguage" = "Select language";
"languagesList" = "Languages list";

il risultato è qui


0

Per localizzare la tua app devi:

  1. Usa gli elementi SwiftUI come: Testo ("Bello") . Nice diventa la chiave in Localizable.strings.
  2. Nei casi in cui il testo non si trova nell'elemento SwiftUI deve essere utilizzato NSLocalizedString .
  3. Seleziona il target dell'app.
  4. Esporta localizzazione: Modifica -> Esporta per localizzazione ...
  5. Dai i file esportati al traduttore.
  6. Importa traduzioni: Modifica -> Importa localizzazioni ...

0

Per utilizzare Localazable in SwiftUI, puoi eseguire in questo modo:

importa SwiftUI per usare LocalizedStringKey nei tuoi file

//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)
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.