Подтвердить что ты не робот

Как локализовать строку с помощью заполнителей форматирования?

Как я могу локализовать строку, которая имеет в ней заполнители с NSLocalizedString?

Например:

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

Как мне локализовать это? Я могу разбить строки на несколько локализованных строк? Как же я имею дело с различной структурой предложения и грамматикой?

4b9b3361

Ответ 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];