NSLocalizedString: Почему genstrings добавляет 1 $ и 2 $ к моим спецификаторам формата? - PullRequest
9 голосов
/ 06 января 2011

Я локализую свое приложение для iPad / iPhone с помощью genstrings Classes/*.m для создания файла Localizable.strings. Большинство строк работают нормально, и я получаю ожидаемый результат, но с некоторыми строками genstrings добавляет 1$ или 1$ в середине моих спецификаторов формата, например:

/* No comment provided by engineer. */
"%@%i" = "%1$@%2$i";

/* No comment provided by engineer. */
"%@: %i" = "%1$@: %2$i";

/* No comment provided by engineer. */
"%@" = "%@";

У меня не было этой проблемы с другими приложениями, и, как вы видите, она не соответствует. Но это не кажется случайным, так как когда я снова запускаю genstrings для тех же файлов классов, 1$ и т. Д. Всегда находятся в одном месте.

Я могу оставить их, и строки будут работать с правильным форматированием, но я удалил их вручную, потому что я не уверен, что будет делать $. Раздражает необходимость проходить и обновлять строки вручную (плюс я, вероятно, в конце концов пропущу одну).

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

Ответы [ 3 ]

15 голосов
/ 06 января 2011

Эти числа относятся к позиции аргумента замещающего значения. Например, %2$i означает «заменить это вторым аргументом, который должен быть целым числом». Это полезно при локализации на языки, которые используют разные словосочетания, потому что вещи можно заменить в порядке, отличном от английского.

Другими словами, их можно безопасно оставлять или удалять, и они пригодятся для естественных переводов на другие языки.

6 голосов
/ 06 января 2011

N$ сообщает функциям и методам стиля printf строгий порядок полей строки формата.Таким образом, при локализации на язык, где порядок отличается, вам не нужно изменять код - просто строка формата:

printf("%s %s\n", "foo", "bar");
printf("%1$s %2$s\n", "foo", "bar");
printf("%2$s %1$s\n", "foo", "bar");

Вывод:

foo bar
foo bar
bar foo
3 голосов
/ 07 июля 2011

Вы можете отключить генерацию позиционных параметров, если вам это не нравится, передав

-noPositionalParameters

в строки genstrings.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...