Нужны только строки для перевода, генерируемые xgettext, а не все строки в исходных файлах - PullRequest
3 голосов
/ 06 апреля 2011

действительно борется с этим.

Недавно я установил скрипт оболочки bash для извлечения, конкататации и дедупликации строк для перевода из страниц просмотра всего веб-сайта (используется среда MVC), он выглядит примерно так:

for x in *.php; do xgettext --no-wrap --language=PHP -e --flag=_:1:pass-c-format -a "$x" -o "${x%.php}.pot"; done
msgcat -u -s --output-file=$WEBSITENAME-concat.pot *.pot
msguniq -u --output-file=$WEBSITENAME-unique.pot $WEBSITENAME-concat.pot
msgmerge -s -v -U $WEBSITENAME.po $WEBSITENAME-unique.pot

Вышесказанное работает абсолютно отлично, за исключением этих двух вещей в порядке трудности преодоления:

  1. Во всем исходном коде веб-сайта я старался, чтобы все строки, которые необходимо перевести, были окружены функцией _ ('строка для перевода здесь') , но * 1012 Команда * xgettext извлекает практически все строки в файле из того, что я могу сказать, а не только те, которые окружены функцией _ ('') . Это означает, что мой результирующий файл .pot содержит имена переменных, URL-адреса, строки формата, параметры функций, данные конфигурации и другие неподходящие строки, которые не должны передаваться нашим переводчикам. Из-за размера сайта удалить их вручную нецелесообразно - мы рассматриваем почти 80 000 строковых записей, и это только первый веб-сайт из числа, который мне нужно будет обработать аналогичным образом в течение следующих 6 недель! Как настроить xgettext на извлечение только строк, предназначенных для перевода?

  2. У многих извлеченных строк есть разрывы строк, которые вставляются как \ n в строках. Есть ли способ настроить xgettext , чтобы не делать этого, или простой способ удалить их?

Я часами и днями перебирал документацию и искал в интернете, пытаясь найти решение, особенно проблемы нет. 1, и был бы очень признателен за помощь от gettext гуру! Заранее спасибо ..

Ответы [ 2 ]

4 голосов
/ 18 мая 2011

Просто угадайте здесь, но первая проблема, с которой вы столкнулись, может быть вызвана опцией -a. Из руководства xgettext :

-a, --extract-all           extract all strings

Как примечание, ваш вызов xgettext кажется довольно сложным. Я, конечно, точно не знаю, что вы хотите сделать, но для меня достаточно следующей команды:

xgettext -L PHP --from-code=utf-8 *.php -o messages.pot

Это сохранит все _() вложенные строки в messages.pot.

0 голосов
/ 09 июня 2011

Возможный ответ на пункт 1.

Я не знаю, какую версию вы используете, но в Delphi вы можете добавить файл ggexclude.cfg, чтобы исключить некоторые компоненты.

# exclude all occurences of the specified class
# and property in all DFM files in or below the
# path where "ggexclude.cfg" is in
[exclude-form-class-property]
TField.FieldName
...
...