2012-05-03 2 views
5

У меня есть веб-приложение, где у меня есть несколько трансляций с использованием gettext. Но теперь я сделал большой передел приложения, и хотя большинство строк одинаковы, есть также немало, которые были значительно изменены или удалены.Как автоматически удалить неиспользуемые строки gettext?

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

Есть ли автоматический способ удаления строк из файлов .po, которые больше не находятся в коде?

+1

Это не автоматизировано, но моя работа - запустить xgettext дважды. В первом запуске я использую параметр --no-location. Второй запуск помещает местоположение обратно в файлы. Теперь текстовые строки, которые больше не используются, не имеют места и могут быть легко идентифицированы для удаления. – getSurreal

ответ

0

силам ли так

find . -name '*.po' -print0 | while read -d '' -r file; do msgattrib --output-file="$file" --no-obsolete "$file"; done 
3

Предположив у вас есть свежий шаблон PO-файл, содержащий только строки, которые должны быть в конечном каталоге ПО в файле с именем messages.pot и целевой каталог ПО в message.po, вы можете сделайте это:

msgattrib --set-obsolete --ignore-file=messages.pot -o messages.po messages.po 

Это отмечает любые устаревшие строки. Переключатель --set-obsolete сообщает msgattrib применять устаревший флаг ко всем строкам целевого файла, а --ignore-file сообщает ему игнорировать строки, которые отображаются в указанном файле (шаблон PO в нашем случае).

Если вы хотите, чтобы полностью удалить их, это еще один шаг:

msgattrib --no-obsolete -o messages.po messages.po 

Вы можете прочитать больше о msgattrib команды here.

Смежные вопросы