iOS: как локализовать строки с несколькими интерполированными параметрами?
Как я могу использовать NSLocalizedString для построения строки с несколькими параметрами, предоставляя транслятору управление для изменения порядка, если они хотят?
Пример в моем Локализуемом.строка:
"score_out_of"="Your score is %i out of %i";
И будет вызываться как
[NSString stringWithFormat:NSLocalizedString(@"score_out_of", nil), correct, total];
Но на некоторых языках правила грамматики могут диктовать, что общее идет перед правильным. В объективе с порядок интерполяции, по-видимому, жестко задан.
В других языках это достигается путем именования параметров, например: пример в ruby это будет определено следующим образом:
out_of: "Your score is %{correct} out of %{total}"
И вызывается следующим образом:
I18n('out_of', {total: total, correct: correct})
Каков рекомендуемый способ сделать то же самое на iOS / Objective C?
1 ответ:
Согласно документации
Обратите внимание, что вы также можете использовать позиционные спецификаторы "n$", такие как %1$@ %2$s
Таким образом, вы можете просто создать свою строку как
"score_out_of" = "ваш счет равен %1$i из %2$i"
И на другом языке это может быть
"score_out_of" = " из %2$i, ваш оценка - %1$i "