Localization

Une application peut être dans la langue de l'utilisateur, ou plus exactement dans la langue sélectionnée dans les réglages de l'iphone.

Quand vous créez un nouveau projet, dans les paramètres "Localization", vous avez par défaut un fichier "Base", et un "English - Development Language".

Vous pouvez ajouter une autre langue avec le +

Vous avez alors le choix d'ajouter un nouveau fichier pour le storyboard et/ou le launchScreen, et de choisir le type "Localizable Strings" ou "Interface Builder Storyboard".

"Localizable Strings" sera un fichier de Strings et "Interface Builder Storyboard" sera un nouveau storyboard pour la nouvelle langue.

Exemple pour une application en Français et Anglais

Si vous voulez que votre application soit en Français et en Anglais. N'ajoutez aucune langue et développez votre application en anglais (label, bouton, texte etc..).

Puis ajouter la langue "French".

Traduisez les titres de bouton, les labels etc...dans le nouveau fichier storyboard (french). Idem pour le launchscreen.

Dans le "edit scheme" vous pouvez choisir "App Language" pour tester en français ou en anglais.

A ce niveau, quand vous tester votre application dans une des deux langues, les titres de boutons et autres sont dans la langue correspondante.

Pour un test sur son iphone, il suffit de changer la langue de l'appareil dans les réglages.

Traduire la valeur des propriétés String

Dans votre application vous pouvez traduire toutes les propriétés en String.

cell.infoLabel.text = "opening hours are unknown"
case KEY_ME:
            annotationView.markerTintColor = .systemBlue

Nous allons utiliser une extension au type String

extension String {
    func localized() -> String {
        return NSLocalizedString(self, tableName: "Localizable", bundle: .main, value: self, comment: self)
    }
}

Cette extension est ajoutée en fin de fichier ou dans un fichier à part pour être appelée de toute l'application.

Puis ajouter un nouveau fichier String pour stocker les traductions

Add New File/Strings File

que nous appellerons "Localizable"

Le nom du fichier doit correspondre au "tableName" de la "func localized()"

Nous sélectionnons ce fichier, et dans "Identity and Type Attribute", nous cliquons sur "Localization" .

Dans la popup, nous choisissons la langue "French" pour ce fichier.

Voilà, maintenant tout String en Anglais peut être traduit en Français dans ce fichier.

"opening hours are unknown" = "horaires d'ouvertures inconnues";

Une ligne pour chaque String. Ajouter un point virgule à la fin de chaque ligne.

Attribuer la propriété ".Localized()" à chaque String traduit

cell.infoLabel.text = "opening hours are unknown".localized()
case KEY_ME.localized():
            annotationView.markerTintColor = .systemBlue

Supprimer un fichier langue

Si vous avez coché une langue qui n'est plus nécessaire, vous pouvez la décochez. Mais pensez dans la popup à cocher "Delete Localized Resource files"

Capture d’écran 2021-05-08 à 20.26.06.png

bon code