Risposte:
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 è:
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))
}
}
}
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
Per localizzare la tua app devi:
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)
}