Как мне сохранить флаги / ширину в NSString в формате printf, используемом в качестве ключа для NSLocalizedString? - PullRequest
1 голос
/ 21 декабря 2010

Я использую genstrings для генерации .strings файлов из файлов исходного кода в моем проекте. Хотя проект технически является приложением Cappuccino , этот вопрос должен в равной степени применяться к любому проекту, в котором используются файлы .strings.

У меня есть строка формата, которую я хотел бы локализовать: @"%d:%02d %@". Это для отображения значений времени. Если бы это было приложение для OSX / iOS, я бы использовал встроенное форматирование даты и времени, но, поскольку это капучино, я должен свернуть свое собственное. Когда я запускаю genstrings, он выдает это значение для этого ключа: "%1$d:%2$d %3$@".

Это как в файле Localizable.strings:

/* ShortLocalTimeFormat */
"%d:%02d %@" = "%1$d:%2$d %3$@";

с помощью этой команды: genstrings -o Resources/en.lproj -s CPLocalizedString *.j */*.j

Опять же, не обращайте внимания на то, что я использую CPLocalizedString вместо NSLocalizedStrings и *.j вместо *.m, поскольку эти значения подходят для капучино. Обратите внимание, что 02 в %02d отбрасывается в результирующей строке формата. Если я запускаю его снова с параметром -noPositionalParameters, он просто оставляет строку как: genstrings -o Resources/en.lproj -noPositionalParameters -s CPLocalizedString *.j */*.j.

/* ShortLocalTimeFormat */
"%d:%02d %@" = "%d:%02d %@";

Это ошибка в genstrings, или невозможно использовать flags / width в строках формата при сохранении позиционных параметров?

Ответы [ 2 ]

0 голосов
/ 31 декабря 2010

Я только что заметил эту ошибку; это не только ты. Тем не менее, это, кажется, происходит только для %d спецификаторов - я использую %02d и он превращается в %1$d, но %.02f превращается в %1$.02f.

Я подал ошибку .

0 голосов
/ 21 декабря 2010

Если бы это был проект Objective-C, я бы сократил строки формата до "%1$@ %2$@" и использовал бы NSDateFormatter для генерации строки времени. Если класс недоступен, я бы сам сгенерировал промежуточную строку времени и использовал ее в качестве параметра для строки локализованного формата, а не передавал часы / минуты непосредственно в строку локализованного формата.

...