iOS: как локализовать строки с несколькими интерполированными параметрами?

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

Пример в моем Localizable.string:

"score_out_of"="Your score is %i out of %i";

И будет вызываться как

[NSString stringWithFormat:NSLocalizedString(@"score_out_of", nil), correct, total];

Но в некоторых локалях правила грамматики могут предписывать, что общее число предшествует правильному. В Objective C кажется, что порядок интерполяции жестко запрограммирован.

В других языках это достигается путем именования параметров, например, в ruby ​​это будет определено так:

out_of: "Your score is %{correct} out of %{total}"

И вызывается так:

I18n('out_of', {total: total, correct: correct})

Каков рекомендуемый способ сделать то же самое на iOS/Objective C?


person Chris    schedule 11.06.2014    source источник


Ответы (1)


Согласно документации

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265-SW2

Обратите внимание, что вы также можете использовать спецификаторы позиции «n$», такие как %1$@ %2$s

Таким образом, вы можете просто создать свою строку как

"score_out_of"="Your score is %1$i out of %2$i"

И на другом языке это может быть

"score_out_of"="Out of %2$i, your score is %1$i"

person Jose Servet    schedule 16.07.2014