Odpowiedzi:
Gdy spojrzysz na dokumentację dotyczącą tekstu, zobaczysz, że do inicjatora zabiera on LocalizedStringKey, a nie ciąg znaków:
init(_ key: LocalizedStringKey, tableName: String? = nil, bundle: Bundle? = nil, comment: StaticString? = nil)
To sprawia, że lokalizacja jest bardzo prosta. Wszystko co musisz zrobić to:
Po wybraniu opcji Localizable.strings zobaczysz, że zawiera pliki dla języka oryginalnego i języka, który właśnie dodałeś. Tam umieszczasz swoje tłumaczenia, tj. Zlokalizowane pary tekstowe.
Jeśli masz taki tekst, to Twoja aplikacja:
Text("Hello World!")
Musisz teraz dodać do swoich Localizable.strings swoje tłumaczenia:
dla twojego podstawowego języka:
"Hello World!" = "Hello World!";
i dla drugiego języka (w tym przypadku niemieckiego):
"Hello World!" = "Hallo Welt!";
Aby zobaczyć swoje podglądy, możesz je zdefiniować w następujący sposób:
struct ContentViewView_Previews: PreviewProvider {
static var previews: some View {
ForEach(["en", "de"], id: \.self) { id in
ContentView()
.environment(\.locale, .init(identifier: id))
}
}
}
Aby uzyskać szybki plik interfejsu użytkownika, wystarczy wstawić klucz ciągu z pliku .strings lokalizacji
importuj 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"))
}
}
i to jest przykład z pliku .strings
"selectLanguage" = "Select language";
"languagesList" = "Languages list";
wynik jest tutaj
Aby zlokalizować aplikację, potrzebujesz:
Aby użyć Localazable w SwiftUI, możesz wykonać następujące czynności:
zaimportuj SwiftUI, aby użyć LocalizedStringKey w swoich plikach
//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)
}