Comment implémenter la localisation dans Swift UI

10

Quelqu'un peut-il m'aider? Je ne trouve aucune description de la localisation dans Swift UI. Quelqu'un peut-il donner des conseils ou mieux un exemple de localisation par exemple Text()?

Oleh H
la source

Réponses:

15

Lorsque vous regardez la documentation de Text, vous pouvez voir qu'il prend LocalizedStringKey et non une chaîne dans son initialiseur:

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

Cela rend la localisation très simple. Tout ce que tu dois faire est:

  • créer un nouveau fichier de type Strings File, appelez-le Localizable
  • sélectionnez le nouveau fichier et niez à l'inspecteur de fichiers dans le panneau de droite et cliquez sur Localiser ...
  • accédez à votre fichier de projet dans la section Localisations et ajoutez une autre langue à la liste - Xcode créera des fichiers de localisation pour vous

Lorsque vous sélectionnez Localizable.strings, vous verrez qu'il contient des fichiers pour la langue d'origine et la langue que vous venez d'ajouter. C'est là que vous placez vos traductions, c'est-à-dire les paires de textes localisés.

Si vous avez un texte comme celui-ci, c'est votre application:

Text("Hello World!")

Vous devez maintenant ajouter à vos localisations.strings vos traductions:

pour votre langue de base:

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

et pour votre deuxième langue (en l'occurrence l'allemand):

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

Pour voir vos aperçus localisés, vous pouvez les définir comme ceci:

struct ContentViewView_Previews: PreviewProvider {

    static var previews: some View {
        ForEach(["en", "de"], id: \.self) { id in
            ContentView()
                .environment(\.locale, .init(identifier: id))
        }
    }
}
LuLuGaGa
la source
Merci, c'était utile! Mais j'ai eu quelques problèmes car plusieurs langues étaient déjà ajoutées.
Oleh H
J'ai suivi ces instructions à la lettre et cela n'a pas fonctionné. J'utilise iOS 10.15.1 Beta et Xcode 11.1. Tout conseil accepté avec plaisir. Pour l'instant, je vais supposer un problème dans le logiciel bêta et ne pas perdre plus de temps à ce sujet
Maman de Joseph Beuys
Quel était exactement le problème?
LuLuGaGa
1
J'ai trouvé le problème @LuLuGaGa. Il s'avère que je ne suivais pas les instructions à la lettre, comme je l'ai dit. Mon fichier de chaîne de localisations était dans un sous-dossier. Mettez-le au niveau du projet et cela fonctionne bien
Maman de Joseph Beuys
1
J'ai également découvert (je pense) qu'appeler le fichier de chaînes autre que Localisable signifie que cela ne fonctionnera pas
Maman de Joseph Beuys
3

Pour le fichier d'interface utilisateur rapide, il vous suffit d'insérer la clé de chaîne du fichier de localisation .strings

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

et ceci est un exemple du fichier .strings

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

le résultat est ici

Oleh H
la source
0

Pour localiser votre application, vous avez besoin de:

  1. Utilisez des éléments SwiftUI comme: Text ("Nice") . Nice devient la clé de Localizable.strings.
  2. Dans les cas où le texte n'est pas dans l'élément SwiftUI, il faut utiliser NSLocalizedString .
  3. Sélectionnez votre cible d'application.
  4. Exporter la localisation: Edition -> Exporter pour la localisation ...
  5. Donnez les fichiers exportés au traducteur.
  6. Importer des traductions: Edition -> Importer des localisations ...
Ramis
la source
0

Pour utiliser Localazable dans SwiftUI, vous pouvez procéder comme suit:

importer SwiftUI pour utiliser LocalizedStringKey dans vos fichiers

//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
la source