42 votes

Plusieurs fichiers Localizable.strings dans une seule application iOS

Est-il possible d'avoir plusieurs composants qui ont leurs localisations dans une application?

Par exemple je veux localiser les chaînes de mon application, mais également utiliser ShareKit qui est localisée lui-même (donc mon bundle contiendra 2 Localizable.des chaînes dans des endroits différents). Donc, ShareKit contient des dossiers comme fr.lproj et de.lproj qui contiennent Localizable.les chaînes de fichiers et je veux créer la même pour le reste de mon projet, mais les garder séparés.

J'ai essayé tout simplement de les garder séparées, ce qui a entraîné dans les cordes de mon application n'est pas utilisée. Des idées?

90voto

Scott Little Points 1112

Il y a une manière de le faire c'est très simple.

Il y a plusieurs macros pour la localisation, dont l'un est NSLocalizedStringFromTable(). Cela prend trois paramètres:

  1. La chaîne de localiser
  2. Le nom de la table, qui est juste un nom de fichier
  3. Le commentaire, tout comme en NSLocalizedString()

Si vous utilisez un nom de table, alors vous pouvez avoir un autre fichier de chaînes, c'est à dire si je n' NSLocalizedStringFromTable(@"name", @"MyStrings", @"whatever"); puis de mettre mes cordes en MyStrings.strings il sera utilisé.

Voir Matt Gallagher post récent sur ce sujet.

0voto

meronix Points 5124

chaque fichier / ressource peut être localisable, également les fichiers IB .xib ou les images jpg / png, il vous suffit de sélectionner un fichier dans votre projet, d'ouvrir les informations, d'aller dans l'onglet / section "général" et d'appuyer sur "rendre le fichier localisable" "... alors vous pouvez ajouter la langue de votre choix, xCode créera un nouveau fichier dupliquant le premier et le placera dans le bon dossier ...

luca

0voto

meronix Points 5124

ah ok, je ne sais pas ShareKit, mais je suppose que vous ne pouvez pas modifier les fichiers de texte et ajoutez simplement vos nouveaux mots pour que les fichiers, n'est-ce pas?

alors vous pouvez envisager de créer votre propre "dictionnaire" de fichiers et d'essayer de la localiser, puis de le lire et de le mettre dans un NSDictionary où vous pouvez lire les mots/valeur... vous pouvez insérer un enregistrement dans votre fichier "myDict.plist" avec la clé "salut" de type Chaîne de valeur "ciao" pour l'italien et de "bonjour" dans la version anglaise

NSString *bundle = [[ NSBundle mainBundle] pathForResource:@"myDict" ofType:@"plist"];
NSMutableDictionary *savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile:bundle];
NSString *greetingsTranslatedInTheGoodLanguage = [savedStock objectForKey:@"greeting"];
// just to try what you have read:
NSLog (@"translated by your own dictionary: %@", greetingsTranslatedInTheGoodLanguage);
[savedStock release];

luca

ps lire les commentaires de trop...

0voto

jj0b Points 658

Il n'est pas possible de faire ce que vous demandez. Vous pouvez avoir plusieurs Localizable.les chaînes de fichiers, mais seulement un par langue, dans leurs activités respectives .lproj dossiers.

Je comprends que vous ne souhaitez pas modifier la ShareKit Localizable.les chaînes de fichiers parce que ce serait une douleur lors de la mise à jour mais je pense que vous devez regarder combien de travail il serait effectivement prendre. En fonction du nombre de langues que vous avez besoin de soutien, il peut être moins de travail pour localiser vos propres chaînes et les ajouter au bas de la ShareKit Localizable.les chaînes de fichiers que de mettre en œuvre votre propre schéma de localisation.

BTW, pour détecter la langue de l'appareil est actuellement fixé à vous pouvez utiliser:

NSArray *preferedLocalizations = [[NSBundle mainBundle] preferredLocalizations];

Cela vous donne un tableau de deux lettres de la langue chaînes de code. L'élément à l'indice 0 est la langue actuellement sélectionnée. Ceci peut être utile si vous avez besoin de prendre des décisions logiques fondées sur la langue.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X