Иногда приходится заниматься локализацией, это может касаться и документов в компании, и вариантов языков для сайтов, в общем где угодно. На данный момент это реализуется посредством внесения языковых оборотов в специальный .po-файл, с указанием конкретного места, которое переводится (т.е. контекст), фраза на оригинале, и фраза в переводе, например:

#: archive.php:10
#@ Автор
msgid "Date"
msgstr "Дата"

Сами файлы имеют формат имени — xx_XX.po, где xx — международное сокращение названия языка, например для русского это будет:

ru_RU.po

После перевода всех фраз (или части), этот файлик компилируется в бинарный файл ru_RU.mo (или любой другой, соответствующий кодировки вашего языка).

Далее. Для редактирования/создания .po файлов есть специальная gui-программа — poedit, прелесть в том, что работает она и под linux, и под windows, и конечно же mac. Разбирать её не буду, там все предельно просто, разберетесь.

Кто не хочет париться с гуями, или их вообще нет, можно обойтись и vim-ом (как я сам и делаю).

Для компиляции .po файла можно (и нужно! 🙂 ) использовать консольную утилиту — msgfmt, в debian/centos-подобных дистрах она живет в пакете — gettext.

Пример команды и результата работы:

msgfmt -o ru_RU.mo -v ru_RU.po 
82 переведенных сообщения.

Вот в целом и все.

Добавлю еще немного интересных приемов в работе.

Есть тулза для проверки корректности .po/.po/.pot-файлов (забыл упомянуть, .pot — po template, т.е. шаблон для создания нового .po файла, там помещаются всякие служебные заголовки — Автор, Дата, email-автора, Страна и т.д.) — i18nspector, поставиться она должна из репозиториев. А вот тут документация для неё — тыц.

 

Создание нескольких копий-заготовок для следующих переводов, одной командой:

for i in ru_RU en_EN sv_SE; do cp -a xx_XX.po $i; done

А для еще большего ускорения (или усложнения), можно вообще заморочиться, и создавать пачки готовых .po-файлов на основе подготовленного шаблона, и словаря, используя простой скрипт, но это уже совсем другая история 🙂 .