Когда-то я делал правки прямо в коде шаблона, но этот подход не является правильным. Легко представить ситуацию, когда подобную работу придётся делать заново, например, при обновлении темы.
Механизм 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 (если это не было сделано ранее):\
1 |
define( 'WPLANG', 'ru_RU' ); |
Дополнение
Перевод слов зависит от регистра, т.е. если в файле переводов указан перевод для слова Comment, а в соответствующей функции шаблона пытаться перевести comment, то перевод не будет выполнен.
Функции для локализации
Доступны тут
Перевод во множественном числе
Как создать перевод для множественного числа? Например: хх комментарий/комментария/комментариев. Множественное число в gettext обрабатываются с помощью функций _n(), _nx(), и _n_noop(). Но для их корректной работы — в файлах .mo .po должна быть указана формула, для русского языка она выглядит так:
1 |
nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); |
После этого в строках с множественном числом, программы и интерфейсы для редактирования .po .mo файлов позволят указывать не два поля для ввода единственного и множественного числа, а три: 1 комментарий, 2 комментария, 6 комментариев.
PO-файл будет выглядеть так:
1 2 3 4 5 6 7 |
#: archive-faq.php:101 #, php-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d комментарий" msgstr[1] "%d комментария" msgstr[2] "%d комментариев" |
Использование множественного перевода в шаблоне будет выглядеть следующим образом:
1 2 3 |
<?php echo esc_html( sprintf( _n( '%d question', '%d questions', 'Число вопросов', 'домен' ), 'Число вопросов' ) ); ?> |
Свежие комментарии