Como implementar a localização na interface do usuário Swift

10

Alguém pode me ajudar? Não consigo encontrar nenhuma descrição da localização na interface do usuário do Swift. Alguém pode dar conselhos ou melhor, um exemplo de como localizar, por exemplo Text()?

Oleh H
fonte

Respostas:

15

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 é:

  • crie um novo arquivo do tipo Strings File, chame-o de Localizable
  • selecione o novo arquivo e navegue para o File Inspector no painel do lado direito e clique em Localizar ...
  • vá para o arquivo do seu projeto na seção Localizações e adicione outro idioma à lista - o Xcode criará arquivos de localização para você

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))
        }
    }
}
LuLuGaGa
fonte
Obrigado, foi útil! Mas tive alguns problemas porque já havia vários idiomas adicionados.
precisa
Eu segui estas instruções à risca e não funcionou. Estou executando o iOS 10.15.1 Beta e o Xcode 11.1. Qualquer conselho aceito com prazer. Por enquanto, vou assumir uma falha no software beta e não perder mais tempo com isso.
Joseph Beuys 'Mum'
Qual foi exatamente o problema?
LuLuGaGa 29/10/19
11
Encontrei o problema @LuLuGaGa. Parece que eu não estava seguindo as instruções da carta, como eu disse que tinha. Meu arquivo de sequência de localizações estava em uma subpasta. Coloque-o no nível do projeto e funcione bem
mãe de Joseph Beuys '
11
Ter também descoberto (eu acho) que chamar a qualquer arquivo de cordas que não localizáveis meios não vai funcionar
Joseph Beuys' Mamãe
3

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

Oleh H
fonte
0

Para localizar seu aplicativo, você precisa:

  1. Use elementos SwiftUI como: Texto ("Agradável") . Nice se torna a chave em Localizable.strings.
  2. Nos casos em que o texto não está no elemento SwiftUI, é necessário usar o NSLocalizedString .
  3. Selecione o destino do seu aplicativo.
  4. Exportar localização: Editar -> Exportar para localização ...
  5. Dê arquivos exportados para o tradutor.
  6. Importar traduções: Editar -> Importar localizações ...
Ramis
fonte
0

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