web-dev-qa-db-fra.com

Comment localiser une chaîne avec des espaces réservés de mise en forme?

Comment localiser une chaîne contenant des espaces réservés avec NSLocalizedString?

Par exemple:

[NSString stringWithFormat:@"You can afford %i at %@%li.",[kCash integerValue]/self.price, kYen,  self.price]

Comment est-ce que je localise ceci? Est-ce que je divise les chaînes en plusieurs chaînes localisées? Comment puis-je gérer la structure de phrase et la grammaire?

37
Moshe

Avoir les chaînes localisées inclure les espaces réservés. C’est à peu près la seule façon de procéder. Sinon, comme vous l’avez mentionné, vous ne pouvez pas tenir compte de l’ordre varié de Word.

Quelque chose dans ce sens:

[NSString stringWithFormat:NSLocalizedString(@"Foo %i", @"Foo %i"), 123]
20
Matti Virkkunen

NSLocalizedString ne modifiera pas vos espaces réservés, donc stringWithFormat peut les utiliser normalement. Dans votre exemple, utiliser des espaces réservés numérotés est probablement une bonne idée - 

    [NSString stringWithFormat:@"You can afford %1$i at %2$@%3$li.",
                              [kCash integerValue]/self.price, kYen,  self.price]

Plus d'infos ici: Est-il possible de spécifier l'argument position/index dans NSString stringWithFormat?

45
Alan Rowarth

Une autre approche à cela est dans votre fichier localisé, vous pouvez avoir:

key = "String with %@ placeholder"; 

et dans votre implémentation:

[NSString stringWithFormat: NSLocalizedString(@"key", ""), @"string replacing placeholder"];

Vous pouvez le faire avec n'importe quel nombre d'arguments. Ils doivent simplement être cohérents dans tous vos fichiers de localisation. 

6
Chris

Cette voie semble plus efficace:

[NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"Key", @"Comment for localised string"), value];
0
Umitk