web-dev-qa-db-fra.com

Plusieurs fichiers Localizable.strings dans une application iOS

Est-il possible d'avoir plusieurs composants ayant leurs localisations distinctes dans une application?

Par exemple, je veux localiser les chaînes dans mon application, mais aussi utiliser ShareKit, qui est lui-même localisé (donc mon bundle contiendra 2 Localizable.strings à différents endroits) . Donc, ShareKit contient des dossiers comme en.lproj et de.lproj contient des fichiers Localizable.strings et je souhaite créer la même chose pour le reste de mon projet, tout en les séparant.

J'ai simplement essayé de les séparer, ce qui a empêché l'utilisation des chaînes de mon application. Des idées?

34
Dimitris

Il y a un moyen de faire cela qui est assez simple.

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

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

Si vous utilisez un nom de table, vous pouvez avoir un autre fichier de chaînes, c’est-à-dire que si je fais NSLocalizedStringFromTable(@"name", @"MyStrings", @"whatever");, puis mets mes chaînes dans MyStrings.strings, il les utilisera.

Voir Matt/Gallagher post à ce sujet.

81
Scott Little

chaque fichier/ressource peut être localisable, ainsi que les fichiers .xib ou les images jpg/png, .__ de l'IB. make file localizable "... vous pouvez ensuite ajouter la langue de votre choix, xCode créera un nouveau fichier dupliquant le premier et le placera dans le bon dossier ...

luca

0
meronix

Il n'est pas possible de faire ce que vous demandez. Vous pouvez avoir plusieurs fichiers Localizable.strings, mais un seul par langue dans leurs dossiers .lproj respectifs.

Je comprends que vous ne voulez pas éditer les fichiers ShareKit Localizable.strings, car cela poserait un problème lors de la mise à jour, mais je pense que vous devez regarder combien de travail cela prendrait en réalité. Selon le nombre de langues que vous devez prendre en charge, localiser vos propres chaînes et les ajouter au bas des fichiers ShareKit Localizable.strings peut s'avérer moins fastidieux que de mettre en œuvre votre propre schéma de localisation.

BTW, pour détecter la langue actuellement définie pour l'appareil, vous pouvez utiliser:

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

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

0
jj0b

oh ok, je ne connais pas ShareKit, mais je suppose que vous ne pouvez pas éditer ses fichiers texte et simplement ajouter vos nouveaux mots à ces fichiers, n'est-ce pas?

alors vous pouvez envisager de créer votre propre fichier "dictionnaire" et d'essayer de le localiser, puis de le lire et de le placer dans un NSDictionary où vous pouvez lire les mots/la valeur uniques .... vous pouvez insérer un enregistrement dans votre fichier "myDict.plist" avec la clé "greeting" de type String avec la valeur "ciao" pour l'italien et "hallo" en anglais

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

pslire les commentaires aussi ...

0
meronix