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: p> 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. P> 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? P> P>
3 Réponses :
J'ai résolu cela dans un projet quelques semaines en construisant mon propre système de modèles simple avec avec un fichier de localisation ressemblant à ceci: p> Nous pouvons accomplir les résultats suivants ... P> 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>.
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!"
C'est pourquoi 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 nslocalistring code> 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
$ code> +. Voir Apple's Notes pour localizers . < / p>
% 1 $ @% 2 $ @ et% 4 $ @ code>. Vous ne pouvez sauter que le dernier. P>
Exemple de chaîne localisée formaté: Genstrings générera cette ligne dans votre fichier localizable.strings: p>
@ user2159978 Avez-vous vraiment juste copié la dernière ligne? Bien sûr, il retournera la même chaîne ...