Comment localiser une chaîne dans le fichier info.plist iOS?

260

Comme vous le savez peut-être, iOS 8 nécessite la clé NSLocationWhenInUseUsageDescription pour utiliser l'emplacement de l'utilisateur. J'ai ajouté cette clé et quelques informations générales dans ma liste d'informations. entrez la description de l'image ici

Comment utiliser la chaîne de traduction dans le fichier plist?

-- Mettre à jour --

J'ai déjà une chaîne localisable. Je me demande simplement si je peux utiliser quelque chose comme NSLocalizedString (MYSTRING, nil) à l'intérieur de la chaîne plist. Je sais que je peux créer plusieurs fichiers info.plist pour la localisation, mais je me demandais s'il pourrait y avoir un moyen plus simple.

Soheil
la source
Avez-vous déjà réglé cela, j'ai du mal à localiser NSLocationWhenInUseUsageDescription aussi?
Oliver Pearmain

Réponses:

491

Vous devez utiliser le InfoPlist.stringsfichier pour localiser les valeurs de Info.plist. Pour ce faire, accédez à File->New->File, choisissez Strings Filesous l' Resourceonglet de iOS, nommez InfoPlist-le et créez. Ouvrez et insérez les Info.plistvaleurs que vous souhaitez localiser comme:

NSLocationWhenInUseUsageDescription = "Description of this";

Vous pouvez maintenant localiser le InfoPlist.stringsfichier avec les traductions. Bonne chance!

ÉDITER:

sélectionnez les options de localisation ou activez la localisation si nécessaire,

éditeur à droite

vous devriez pouvoir voir le fichier également dans l'éditeur de gauche.

éditeur de gauche

ÉDITER:

Voici la documentation officielle pour la Info.plistlocalisation des clés.

Remerciements à Marco , merci d'avoir inclus les photos dans cette réponse!

Fahri Azimov
la source
15
Après avoir créé le fichier de chaînes, devez-vous également inclure la clé dans le fichier Info.plist, ou est-il sûr de le supprimer?
rounak
11
Astuce: utilisez exactement le nom "InfoPlist.strings" et rien d'autre. Par exemple, mon fichier infoplist d'origine s'appelait autre chose, mais je devais utiliser ce nom exactement pour le faire fonctionner.
Sjoerd Perfors du
22
Lors du test des localisations sur le simulateur. J'ai dû changer la langue sur le simulateur lui-même et pas seulement la langue dans la cible xcode. Juste un avertissement pour quelqu'un d'autre.
John Webb
10
l'utilisation correcte est keyname = "votre texte"; par exemple: NSLocationWhenInUseUsageDescription = "votre texte"
Magurizio
10
Attention: la clé de ce fichier ne doit pas avoir de guillemets, ce qui est différent avec la localisation normale. par exemple: NSMicrophoneUsageDescription = "votre description";
Yuchao Zhou
33

Tout ce qui précède n'a pas fonctionné pour moi (XCode 7.3), j'ai donc lu la référence Apple sur la façon de le faire, et c'est beaucoup plus simple que décrit ci-dessus. Selon Apple:

Les valeurs localisées ne sont pas stockées dans le fichier Info.plist lui-même. Au lieu de cela, vous stockez les valeurs d'une localisation particulière dans un fichier de chaînes avec le nom InfoPlist.strings. Vous placez ce fichier dans le même répertoire de projet spécifique à la langue que vous utilisez pour stocker d'autres ressources pour la même localisation.

En conséquence, j'ai créé un fichier de chaîne nommé InfoPlist.strings et l' ai placé dans le dossier xx.lproj de la langue "xx" (et l'ai ajouté au projet en utilisant Fichier-> Ajouter des fichiers à ...). C'est tout. Pas besoin de la clé "Les ressources localisées peuvent être mélangées" = OUI, et pas besoin d'InfoPlist.strings dans base.lproj ou en.lproj.

L'application utilise la valeur-clé Info.plist comme valeur par défaut si elle ne trouve pas de clé dans le fichier spécifique à la langue. Ainsi, j'ai mis ma valeur en anglais dans le fichier Info.plist et la traduction dans le fichier spécifique à la langue, testé et tout fonctionne.

En particulier, il n'est pas nécessaire de localiser InfoPlist.strings (ce qui crée une version du fichier dans base.lproj, en.lroj et xx.lproj), et dans mon cas, cela n'a pas fonctionné dans mon cas.

Zvi
la source
2
Pourquoi n'a pas inclus le lien vers le document approprié?
Jurasic
3
Voici le lien vers la page pertinente d'Apple doc au cas où quelqu'un serait intéressé: developer.apple.com/library/archive/documentation/General/…
plier le
et comment nous décidons que xx? par exemple pour l'anglais, cela peut être en, En, Eng, English etc? Désolé si c'est une question stupide parce que je suis un débutant
Awais Nasir
Votre réponse a fonctionné pour moi, sauf le scénario de langue de secours, l'application obtient la langue de secours toujours la langue précédemment utilisée et non l'anglais, ma valeur en anglais est cependant présente dans le fichier Info.plist, j'ai également essayé base.lproj également
Awais Nasir
19

Si quelque chose ne fonctionne pas, assurez-vous d'avoir ajouté:

"Les ressources localisées peuvent être mélangées" = OUI

dans l'info.plist. Dans mon cas, les fichiers InfoPlist.strings ont été simplement ignorés.

tuvok
la source
15

Conseils

  1. N'oubliez pas que le simulateur iOS exploite par défaut la langue de votre système. Veuillez également modifier la langue (et la région) dans les paramètres du simulateur iOS afin de tester vos traductions.

  2. La chaîne de localisation (voir la documentation Apple ici ) doit être

    NSLocationWhenInUseUsageDescription = "Description of this";

    et non (avec la citation "...")

    "NSLocationWhenInUseUsageDescription" = "Description of this";
Giuseppe Beccari
la source
Des ajouts précieux, mais je pense que cela devrait être un commentaire sous la réponse respective, pas une nouvelle réponse. Notez également que "363" n'est pas un identifiant de publication mais le nombre de votes dont dispose la réponse (le nombre a depuis changé).
John J.Camilleri
7
Je n'ai pas 50 points de réputation pour y ajouter un commentaire.
Giuseppe Beccari
Peu importe que vous utilisiez des guillemets "..." autour de la clé, par exemple: ( "NSLocationWhenInUseUsageDescription"="description"est valide). Cela peut être avec ou sans.
mluisbrown
12

Je recommande fortement de lire les guides d'Apple et de consulter les ressources de la WWDC répertoriées ici: Sujets d'internationalisation et de localisation

Pour répondre spécifiquement à votre question, lorsque vous ajoutez une nouvelle langue à votre projet entrez la description de l'image ici, vous avez la possibilité de choisir les fichiers InfoPlist à inclure (si vous avez plusieurs cibles, vous aurez plusieurs fichiers Info plist). Tout ce que vous devez faire pour obtenir l'écran suivant est d'appuyer sur le + sous Localisations et choisissez une nouvelle langue pour ajouter le support. entrez la description de l'image ici

Une fois que vous avez ajouté, il créera les fichiers de chaîne nécessaires dans les répertoires lproj appropriés pour la langue donnée.

--ÉDITER--

Juste pour être clair, iOS remplacera la chaîne de votre fichier Plist en fonction de la langue actuellement sélectionnée par l'utilisateur en utilisant la clé de l'entrée plist comme clé dans le fichier de chaînes localisé.

Matt S.
la source
3
Traduire la liste entière pour une seule clé est une exagération. Trouvez plus d'informations ici: bit.ly/1yBUTru
RGML
2
Cela n'est tout simplement pas vrai pour XCode 9. Il ne demande jamais de localisation plist lors de l'ajout d'une nouvelle langue.
Tom
Je vais devoir examiner cela pour Xcode 9 - je n'ai pas encore eu l'occasion de tester dans le nouveau Xcode.
Matt S.
11

Étape par étape, localisez Info.plist:

  1. Trouvez dans le Xcode le dossier Resources (est placé en root)
  2. Sélectionnez le dossier Ressources
  3. Appuyez ensuite sur le menu principal Fichier-> Nouveau-> Fichier ...
  4. Sélectionnez dans la section "Ressource" le fichier de chaînes et appuyez sur Suivant
  5. Dans le Save Aschamp, écrivez UNIQUEMENT InfoPlist (majuscule "I" et majuscule "P")
  6. Appuyez ensuite sur Créer
  7. Sélectionnez ensuite le fichier InfoPlist.strings créé dans le dossier Resources et appuyez dans le menu de droite sur le bouton "Localiser"
  8. Ensuite, vous sélectionnez le projet dans le navigateur de projet et sélectionnez la liste Le projet à partir du projet
  9. Dans l'onglet info en bas, vous pouvez autant de langues que vous le souhaitez (il y en a dans la section Localisations)
  10. La langue que vous pouvez voir dans le dossier Ressources
  11. Pour localiser les valeurs ("clé") du fichier info.plist, vous pouvez ouvrir avec un éditeur de texte et obtenir toutes les clés que vous souhaitez localiser
  12. Vous écrivez n'importe quelle clé comme exemple dans n'importe quel InfoPlist.strings comme l'exemple ci-dessus

"NSLocationAlwaysAndWhenInUseUsageDescription" = "blabla";

"NSLocationAlwaysUsageDescription" = "blabla2";

C'est tout le travail et vous avez localisé votre fichier info.plist!

Costas Bakoulias
la source
4

Pour toute personne rencontrant le problème de l'info.plist non inclus lors de la tentative d'ajout de localisations, comme dans Xcode 9.

Vous devez rendre localiazble info.plist en y accédant et en cliquant sur le bouton localiser dans l'inspecteur de fichiers, comme indiqué ci-dessous.

Le fichier info.plist sera alors inclus dans les ressources du fichier lorsque vous allez ajouter de nouvelles localisations.

entrez la description de l'image ici

Edward
la source
3
Avez-vous rencontré des problèmes? Je ne peux pas construire de projet lorsque j'ajoute deux langues à la localisation car xcode dit "Le fichier info.plist n'a pas pu être ouvert car il n'y en a pas.
mkkrolik
2
@mkkrolik J'ai le même problème maintenant. Avez-vous trouvé une solution?
Todanley
@Todanley ignore cette solution, cela ne fonctionne pas pour moi. Utilisez plutôt InfoPlist.strings.
mkkrolik
@mkkrolik Merci qui fonctionne. Et aussi lors des tests avec le simulateur, j'ai dû changer le paramètre de langue du simulateur plutôt que celui de ma cible pour que cela fonctionne.
Todanley
3

Comme le dit RGML, vous pouvez créer un InfoPlist.strings, le localiser puis ajouter votre clé et la valeur comme ceci: "NSLocationWhenInUseUsageDescription" = "Aide pour me localiser!";

Il ajoutera la clé à votre info.plist pour la langue spécifiée.

Casquette
la source
0

Dans mon cas, tout a été correctement configuré mais le fichier InfoPlist.strings est toujours introuvable.

La seule chose qui a vraiment fonctionné a été de supprimer et d'ajouter à nouveau les fichiers InfoPlist.strings au projet.

d.ennis
la source
0

Dans mon cas, la localisation n'a pas fonctionné à cause du symbole «-» dans le nom. Exemple: "aero-Info.plist" Et fichiers localisés: "aero-InfoPlist.strings" et "aeroInfoPlist.strings" ne fonctionnaient pas.

Mike Glukhov
la source
0

Lorsque vous utilisez un InfoPlist.stringsfichier (dans XCode, il doit être placé à côté du Info.plistfichier - l'emplacement réel du fichier peut être n'importe où dans le projet probablement

Afficher dans XCode

) veillez à utiliser le nom abrégé de la clé pour la traduction.

J'essayais d'utiliser Privacy - Camera Usage Description, mais la clé de travail estNSCameraUsageDescription

Hourglasser
la source