Как локализовать строку с помощью заполнителей форматирования?
Как я могу локализовать строку, которая имеет в ней заполнители с NSLocalizedString?
Например:
[NSString stringWithFormat:@"You can afford %i at %@%li.",[kCash integerValue]/self.price, kYen, self.price]
Как мне локализовать это? Я могу разбить строки на несколько локализованных строк? Как же я имею дело с различной структурой предложения и грамматикой?
Ответы
Ответ 1
Пусть локализованные строки включают заполнители. Это в значительной степени единственный правильный способ сделать это, как и в противном случае, как вы упомянули, вы не могли принять во внимание различный порядок слов.
Что-то в этом роде:
[NSString stringWithFormat:NSLocalizedString(@"Foo %i", @"Foo %i"), 123]
Ответ 2
NSLocalizedString не будет изменять ваши заполнители, поэтому stringWithFormat может использовать их как обычно. В вашем примере использование пронумерованных заполнителей, вероятно, хорошая идея -
[NSString stringWithFormat:@"You can afford %1$i at %[email protected]%3$li.",
[kCash integerValue]/self.price, kYen, self.price]
Подробнее здесь:
Есть ли способ указать позицию/индекс аргумента в NSString stringWithFormat?
Ответ 3
Другой подход к этому в вашем локализованном файле:
key = "String with %@ placeholder";
и в вашей реализации:
[NSString stringWithFormat: NSLocalizedString(@"key", ""), @"string replacing placeholder"];
Вы можете сделать это с любым количеством аргументов, они просто должны быть согласованными в ваших файлах локализации.
Ответ 4
Этот способ кажется более эффективным:
[NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"Key", @"Comment for localised string"), value];