Автоматический перевод в wordpress

Когда-то я делал правки прямо в коде шаблона, но этот подход не является правильным. Легко представить ситуацию, когда подобную работу придётся делать заново, например, при обновлении темы.

Механизм GNU gettext

В WordPress используется универсальный механизм GNU gettext, его и следует использовать. Все сообщения шаблона должны быть написаны на английском, а перевод должен содержаться в специальном формате в файлах .mo и .po. Перевод стандартных выражений находится в директории: wp-content/languages/ В директории languages соответствующей темы могут находится файлы в упомянутом формате каких-то уникальных выражений (используемых в данной теме). Данный подход позволяет переводить темы WordPress на любой язык. Названия файлов для каждого языка соответствуют названию локали, для русского языка — это ru_RU.

Файлы перевода имеют расширение .po и .mo. Файлы .po содержат переведённые строки в текстовом формате. Файлы .mo содержат те же данные, но в скомпилированном виде — эти файлы использует ядро WordPress.

Poedit

Файлы .po можно просмотреть с помощью любого текстового редактора. Но для того, чтобы WordPress смог использовать перевод — его необходимо скомпилировать в файл .mo. Для работы с данными файлами (создания переводов слов или целых предложений) следует использовать программу Poedit, она позволяет создать компиляцию. Также можно установить один из многочисленных плагинов для работы с файлами переводов из панели управления.

Локаль

Для отображения переводов в необходимой локали необходимо задать локаль в файле wp-config.php (если это не было сделано ранее):\

Дополнение

Перевод слов зависит от регистра, т.е. если в файле переводов указан перевод для слова Comment, а в соответствующей функции шаблона пытаться перевести comment, то перевод не будет выполнен.

Функции для локализации

Доступны тут

Перевод во множественном числе

Как создать перевод для множественного числа? Например: хх комментарий/комментария/комментариев. Множественное число в gettext обрабатываются с помощью функций _n(), _nx(), и _n_noop(). Но для их корректной работы — в файлах .mo .po должна быть указана формула, для русского языка она выглядит так:

После  этого в строках с множественном числом, программы и интерфейсы для редактирования .po .mo файлов позволят указывать не два поля для ввода единственного и множественного числа, а три: 1 комментарий, 2 комментария, 6 комментариев.

PO-файл будет выглядеть так:

Использование множественного перевода в шаблоне будет выглядеть следующим образом: