Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Хитрости при работе с GNU gettext


Автор: Владимир Царьков
Дата публикации: 06.06.2011

В статье приведены рекомендации по решению некоторых затруднений, возникающих при работе с GNU gettext --- набором инструментов для перевода интерфейса программ на разные языки мира.

Подразумевается, что читатель уже имеет некоторый опыт использования GNU gettext в целях перевода текстовых сообщений интерфейсов программного обеспечения на различные естественные языки. Абсолютным новичкам для начала рекомендуется почитать то, что написано про GNU gettext в Wikipedia, и ознакомиться с базовыми приёмами работы с текстовым редактором vim.

Теперь представим, что после длительной правки исходного кода программы появилась необходимость сгенерировать обновлённый вариант po файла локализации. Для того, чтобы решить данную задачу за минимальный промежуток времени, можно воспользоваться приведенными ниже приемами.

В первую очередь, следует составить список файлов, которые нужно проверить на наличие сообщений для перевода. Это удобно сделать следующим образом:

find /var/www/program_name -type f -print > list

Обозначенный запрос к программе find приводит к генерации списка абсолютных имён всех файлов (кроме каталогов), находящихся в /var/www/program_name и записи этого списка в файл под названием list.

Далее можно вручную просмотреть содержимое list и удалить упоминания о файлах, которые гарантированно не содержат сообщений для перевода. При этом следует помнить, что xgettext в состоянии корректно "обойти" вниманием файлы графических изображений, не имеющих отношения к делу.

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

:%s/^#:.*\n//g

Далее --- самое время обновить po файл локализации с помощью программы xgettext.

xgettext --files-from=list --language=PHP --join-existing

Опция --files-from служит для указания списка файлов, нуждающихся в проверке на наличие сообщений для перевода. С помощью --language определяется язык программирования, на котором написана локализуемая программа. По результатам проверки в файл messages.po (имя по-умолчанию) будут внесены сообщения, которые ещё не были переведены.

Если требуется, чтобы messages.po содержал комментарии без указания абсолютного пути к файлам программы --- воспользуйтесь следующей командой текстового редактора vim:

:%s/\/var\/www\/program_name\///g

В данном случае убирается лишняя часть адреса из рассмотренного ранее примера.

Теперь po файл полностью готов к переводу в формат mo.

msgfmt messages.po

Рекомендации Интернет-программистам

Файлы локализации кэшируются веб-сервером, поэтому нельзя "просто так" начать использовать новый mo файл, например, в связке с Apache2 и PHP. Нужно обновить значение поля "PO-Revision-Date" в po файле перед тем как его переводить в формат mo.

Также не забудьте, что маска прав доступа для mo файла должна быть 0755. Иными словами, сделайте: chmod 0755 messages.mo.

Если вы напутали при обновлении поля "PO-Revision-Date", можно сделать рестарт веб-сервера, на крайний случай.

Литература для самообразования

  1. man find
  2. man xgettext
  3. GNU `gettext' utilities manual. URL: http://www.gnu.org/software/gettext/manual/gettext.html (дата обращения: 04.06.2011).