La localisation des chaînes dans iOS: par défaut (de secours) de la langue?
Est-il un moyen de définir une langue par défaut à utiliser lorsque l'appareil langue de l'INTERFACE utilisateur n'est pas pris en charge par une application?
Exemple:
Mon application est localisée en anglais et en allemand:
//en.lproj:
"POWER_TO_THE_PEOPLE_BTN" = "Power";
"POWER_PLUG_BTN" = "Power";
//de.lproj:
"POWER_TO_THE_PEOPLE_BTN" = "Macht";
"POWER_PLUG_BTN" = "Spannung";
Maintenant, si je lance l'application sur un appareil avec la langue de l'INTERFACE utilisateur définie à Italian
l'application va utiliser la clé des chaînes POWER_TO_THE_PEOPLE_BTN
et POWER_PLUG_BTN
.
Il doit y avoir un moyen de spécifier une valeur par défaut (de secours) langue utilisée par l'application dans un tel cas.
À partir de l'exemple ci-dessus, il devrait être clair que l'utilisation de la chaîne en anglais comme une clé ne fonctionnera pas.
La seule option que je vois est d'utiliser NSLocalizedStringWithDefaultValue
au lieu de NSLocalizedString
.
Vous devez vous connecter pour publier un commentaire.
Peut-être cela devrait aider? -- iPhone: localisation /l'internationalisation des chaînes par défaut du fichier
Il devrait secours de l'anglais par défaut. J'ai juste changé mon téléphone à une langue dans laquelle mon application n'est pas localisé, et le texte est tout en anglais, comme prévu.
Important: comme @hyperspasm a commenté : développer/reformuler ce, la langue de secours est la langue qui a été récemment choisi par l'utilisateur dans les Paramètres de l'appareil, qui est également représenté dans l'app bundle.
[NSLocale preferredLanguages]
qui est pris en charge par l'application. Il n'est pas toujours l'anglais. Si vous changez la langue dans les réglages, il se déplacera vers le haut de la liste.Pour éviter tous ces longues syntaxe et plus ayant plus descriptif var nom pour les traducteurs, j'ai tiré de ma propre méthode d'assistance
L()
de la traduction et de revenir à l'anglaisMon
Localizable.strings
ressemblerait à ceciDonc dans mon code, je voudrais utiliser
L(@"SOME_ACTION_BUTTON")
pour obtenir la bonne chaîneBien que, parfois, la clé est plus longue que la traduction elle-même
HELP_BUTTON_IN_NAV_BAR = 'Help'
mais il me permet de gagner beaucoup de temps à expliquer ce que c'est à celui qui m'aide à faire la traductionVous devez vous assurer que la valeur de CFBundleDevelopmentRegion dans votre Info.plist est la langue de la région que vous voulez de secours. (par exemple, "fr")
en
est défini dans l'Info.plist pour la cléCFBundleDevelopmentRegion
encore les clés qui n'existe pas dans les finlandais.string
fichiers n'ont pas de secours à la version anglaise.Ma solution grâce à https://stackoverflow.com/a/25928309/3664461
Mondiale.h
Mondiale.m
Utilisation:
Cette solution ne prend pas les utilisateurs ordre de préférence en considération. Au lieu de cela, il sera toujours de secours à ce que vous avez sous la Base si les utilisateurs de la langue première n'est pas localisé.
Aussi, si la clé n'est pas localisée dans le langage courant, mais il existe dans la base de localication, vous obtiendrez la base de la localisation.
Mise à jour:
Depuis iOS 9, de la région est inclus dans les paramètres régionaux de langue. J'ai mis à jour le code pour gérer cela.
@Faux réponse rapide 4, fonctionne comme un charme sur iOS 11.1:
Un moyen rapide de le faire sans en remplacement de toutes les méthodes est "primordial" la NSLocalizedString de définir et d'utiliser les méthodes qui Apple utilise pour cela définir le remplacer et ajouter la logique de repli dans le "remplacé" la méthode.
J'ai créé la catégorie
NSBundle+FallbackLanguage
à l'appui de langue de secours, vous pouvez vérifier sur le github dossier. Vous avez seulement besoin de spécifier le groupe de langues prises en charge dans la mise en œuvre.NSBundle+FallbackLanguage.h
NSBundle+FallbackLanguage.m
Basé sur Bodus solution (thx btw.) J'ai créé cette catégorie car vous avez besoin de la "fallbackString" trop. J'ai donc vérifier la sélection de la langue de l'appareil et de le comparer avec mes langues, je souhaite soutenir. Il suffit d'importer l'en-tête et vous pouvez utiliser des pommes de la macro par défaut
Fonctionne très bien sur iOS 9.x et 11.1.
NSString+Helper.h
NSString+Helper.m