При использовании printf-подобных строк формата в переведенном тексте msgfmt --check
проверяет, что перевод все еще содержит заполнители. Например, бег xgettext
по следующему коду
printf( gettext( "string: %s, int: %d" ), str, i )
производит .po
файл с msgid
помечены как c-format
и чья ценность "string: %s, int: %d"
, Если переводчик забывает либо %s
или же %d
в переводе тогда msgfmt
жалуется:
количество спецификаций формата в msgid и msgstr не совпадает
К сожалению, эта проверка не применяется к форматным строкам с использованием позиционной нотации, например
boost::format( gettext( "string: %1%, int %2%" ) ) % str % i
Как я могу проверить наличие местозаполнителей позиционной нотации в моих переводах?
Не прямой ответ, но, возможно, следующее решение может решить вашу проблему:
boost::format( gettext( "string: %1$s, int %2$d" ) ) % str % i;
Других решений пока нет …