Je suis familier avec l'utilisation de NSLocalizedString() pour localiser des chaînes, mais le problème que j'ai aujourd'hui nécessite un peu plus de finesse. Ma situation est comme ceci:Localisation de chaînes concaténées ou dynamiques
NSString *userName; //the users name, entered by the user. Does not need localized
NSString *favoriteFood; //the users favorite food, also entered by user, and not needing localized
NSString *summary = [NSString stringWithFormat:@"%@'s favorite food is %@", userName, favoriteFood];
Cela fonctionne bien pour l'anglais, mais pas toutes les langues utilise le même ordre des mots que l'anglais, par exemple, un mot par mot traduction du même Sentance du japonais en anglais serait lire: pizza nourriture préférée
UserName est
Sans oublier que l » est ne fait pas un possessif dans toutes les langues. Quelles techniques sont disponibles pour localiser ce type de phrase concaténée?
Quelles sont les techniques disponibles pour localiser ce type de phrase concaténée?
MISE À JOUR AU BÉNÉFICE D'AUTRES: @Jon Reed a raison, les spécificateurs de position sont très importants pour la localisation. Le document qu'il lie ne contient qu'une référence au fait qu'ils peuvent être utilisés avec NSString, NSLog, un autre, le lien ne dit pas vraiment comment les utiliser.
J'ai trouvé this link, ça l'explique bien. Cela explique aussi ma question mieux que moi. À partir du lien:
Les chaînes de format pour printf et sprintf (voir Printf) présentent un problème particulier pour la traduction. Tenir compte de la suivante: 1
printf(_"String `%s' has %d characters\n", string, length(string))) A possible German
traduction pour ce pourrait être:
"%d Zeichen lang ist die Zeichenkette `%s'\n" The problem
devrait être évident: l'ordre des spécifications de format est différent de l'original! Même si gettext peut renvoyer la chaîne traduite à runtime, il ne peut pas modifier l'argument dans l'appel à printf.
Pour résoudre ce problème, le format printf spécificateurs peuvent avoir un supplémentaire élément facultatif, que nous appelons un spécificateur de position . Par exemple:
"%2$d Zeichen lang ist die Zeichenkette `%1$s'\n" Here, the
spécificateur de position se compose d'un nombre entier , ce qui indique que l'argument à utiliser , et un « $ ». Les chiffres sont basés sur un seul et la chaîne de format elle-même n'est pas incluse. Ainsi, dans le exemple suivant, 'string' est le premier argument et 'longueur (string)' est la seconde:
$ gawk 'BEGIN { > string = "Dont Panic" > printf _"%2$d characters live in \"%1$s\"\n", > string, length(string) > }' -| 10 characters live in "Dont Panic"
J'ai suivi votre lien, et lisez Localizing String Resources (http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPInternational/Articles/StringsFiles.html) aussi. Je n'ai vu aucune référence aux spécificateurs de format que vous mentionnez (% 2 $ @) Pouvez-vous expliquer cela un peu s'il vous plaît? – SooDesuNe
Suivez le lien et recherchez "spécificateurs de position". Aussi, essayez-le. C'est un outil essentiel pour la localisation. –
Le '% $ 1 @' devrait être '% 1 $ @' à la fin de votre exemple. – bovine