9
votes

Comment créer une chaîne localisée formatée?

J'ai une chaîne localisée qui doit prendre quelques variables. Cependant, dans la localisation, il est important que l'ordre des variables puisse changer de langue à la langue.

Ce n'est donc pas une bonne idée: xxx

dans certaines langues Les mots viennent avant les autres, tandis que dans d'autres, il est inverse. Je manque d'un bon exemple pour le moment.

Comment pourrais-je fournir des variables nommées dans une chaîne formatée? Y a-t-il un moyen de le faire sans des remplaçants de chaîne lourde auto-fabriqués? Même certaines variables numérotées comme {% @ 1}, {% @ 2}, et ainsi de suite serait suffisant ... y a-t-il une solution?


0 commentaires

3 Réponses :


3
votes

J'ai résolu cela dans un projet quelques semaines en construisant mon propre système de modèles simple avec NSScanner code>. La méthode utilise un système de modèle qui trouve des variables avec la syntaxe $ {nom} code>. Les variables sont fournies à la méthode via un NSDictionary code>. xxx pré>

avec un fichier de localisation ressemblant à ceci: p> xxx pré>

Nous pouvons accomplir les résultats suivants ... P>

NSDictionary *variables = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:1986], @"birthYear", @"monday", @"birthWeekDay", nil];
NSString *finalString [self localizedStringFromTemplateString:@"born message" variables:variables];
NSLog(@"%@", finalString); // "I was born in 1986 on a monday. Cheers!"


0 commentaires

14
votes

C'est pourquoi nslocalistring prend deux paramètres. Utilisez le deuxième paramètre pour inclure un commentaire décrivant le sens de la langue maternelle des variables. Ensuite, les traducteurs peuvent les réorganiser à l'aide de la construction $ +. Voir Apple's Notes pour localizers . < / p>

Cependant, vous ne pouvez pas sauter des paramètres dans une langue. Par exemple, si vous avez 3 paramètres en anglais et 4 en français et que vous n'avez pas besoin du troisième en anglais, vous ne pouvez pas formater comme % 1 $ @% 2 $ @ et% 4 $ @ . Vous ne pouvez sauter que le dernier.


0 commentaires

10
votes

Exemple de chaîne localisée formaté: xxx

Genstrings générera cette ligne dans votre fichier localizable.strings: xxx


1 commentaires

@ user2159978 Avez-vous vraiment juste copié la dernière ligne? Bien sûr, il retournera la même chaîne ...