Требуются только строки для перевода, которые должны быть сгенерированы xgettext, а не все строки в исходных файлах

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

Я недавно установил сценарий оболочки 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. На протяжении всего исходного кода веб-сайта я тщательно следил за тем, чтобы все строки, которые необходимо перевести, были окружены функцией _ ('строка для перевода здесь'), но xgettext команда извлекает практически все строки в файле из того, что я могу сказать, а не только те, которые окружены функцией _ (''). Это означает, что полученный в результате файл .pot содержит имена переменных, URL-адреса, строки формата, параметры функций, данные конфигурации и другие несоответствующие строки, которые не следует передавать нашим переводчикам. Из-за размера веб-сайта удалять их вручную нецелесообразно - мы рассматриваем почти 80 000 строковых записей, и это только первый веб-сайт из числа, которое мне нужно будет обработать таким же образом в течение следующих 6. недели! Как можно настроить xgettext на извлечение только строк, предназначенных для перевода?

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

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


person richhallstoke    schedule 06.04.2011    source источник


Ответы (2)


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

-a, --extract-all           extract all strings

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

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

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

person Kris    schedule 18.05.2011
comment
Удаление -a из вашей команды устранит проблему номер 1. Что касается интервала, я добавил --no-wrap в свою команду, и она перестала переносить длинные строки. - person Lane; 22.11.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
...
person Duilio Juan Isola    schedule 09.06.2011