Respostas:
Quando você olha para a documentação do Text, pode ver que ele leva LocalizedStringKey e não uma String ao inicializador:
init(_ key: LocalizedStringKey, tableName: String? = nil, bundle: Bundle? = nil, comment: StaticString? = nil)
Torna a localização muito simples. Tudo o que tem a fazer é:
Quando você selecionar Localizable.strings, verá que ele contém arquivos para o idioma original e para o idioma que você acabou de adicionar. É aí que você coloca suas traduções, ou seja, pares de texto localizados com chave.
Se você tiver um texto como este, é seu aplicativo:
Text("Hello World!")
Agora você precisa adicionar ao seu Localizable.strings suas traduções:
para o seu idioma base:
"Hello World!" = "Hello World!";
e para o seu segundo idioma (neste caso, alemão):
"Hello World!" = "Hallo Welt!";
Para ver suas visualizações localizadas, você pode defini-las assim:
struct ContentViewView_Previews: PreviewProvider {
static var previews: some View {
ForEach(["en", "de"], id: \.self) { id in
ContentView()
.environment(\.locale, .init(identifier: id))
}
}
}
Para um arquivo de interface do usuário rápido, basta inserir a chave da string do arquivo .strings da localização
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"))
}
}
e este é um exemplo do arquivo .strings
"selectLanguage" = "Select language";
"languagesList" = "Languages list";
resultado está aqui
Para localizar seu aplicativo, você precisa:
Para usar o Localazable no SwiftUI, você pode executar desta maneira:
importe o SwiftUI para usar LocalizedStringKey em seus arquivos
//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)
}