Как локализовывать плагины для WordPress – инструкция к применению
плагинов
Итак, начну с небольшого введения… Возможность использовать локализованные версии плагинов реализована на базе использования свободной и широко распространённой библиотеки gettext
, которая обычно установлена практически на всех хост-компьютерах. Простота использования этой библиотеки налицо. Вместо использования каких-либо индентификаторов, вы, как программист продолжаете использовать обычный текст на английском языке, просто код немного модифицируется из:
print ( 'view(s) per day' )
в
print ( __( 'view(s) per day' ) )
или
print ( gettext( 'view(s) per day' ) )
Но обычно используется первый вариант. И это очевидно. Первый вариант более легок в чтении, чем второй, и не загромождает код программы. Идем дальше… Как вы сами понимаете, чтобы перевести все вышеуказанные «стринги» (нет-нет, это не женские трусики , а переменные или константы типа string
, т.е. текстовые константы), их нужно выбрать и сохранить где-нибудь (чтобы потом переводить). Но порой код плагинов содержит в себе тысячи строк и выбрать из него нужные тексты будет очень трудно. Но разработчики gettext
позаботились об этом и создали полезную утилиту xgettext
, которая производит сбор всех текстовых констант в указанных файлах или директориях. Пример вызова этой утилиты (я рассматриваю версию утилиты для Win32):
xgettext.exe wordpress-popular-posts.php --output=wordpress-popular-posts.po --add-location --extract-all
Результатом этой команды будет созданный файл wordpress-popular-posts.po
, который будет иметь следующее содержание:
...
#: wordpress-popular-posts.php:72
#: wordpress-popular-posts.php:361
msgid "Sorry. No data so far."
msgstr ""
...
#: wordpress-popular-posts.php:89
#: wordpress-popular-posts.php:378
msgid " comment(s)"
msgstr ""
За символом #
начинается комментарий, который показывает в каких строках обрабатываемого файла находятся данный текст. msgid
представляет собой текст-идентификатор на английском языке, а msgstr
собственно локализованный вариант msgid
. Хочу заметить, что стоит предварительно вручную обработать полученный .po
-файл, чтобы оставить в нем именно нужные текстовые константы (например, текст может быть частью переменной-массива, $options['sortby']
).
Потихоньку подходим к основной трудоемкой части локализации. Собственно, это сам перевод и формирование специального .mo
-файла, который нам необходим для локализации плагина. Не очень понятно, что за .mo
-файл? Немного терпения… Идём сюда и скачиваем отличную программу под название POEdit. Это приложение позволяет визульно редактировать msgstr
.
Скачали, установили. Дальше, переименовываем файл в wordpress-popular-posts.po
в wordpress-popular-posts-ru_RU.po
. Последние символы определяют стандартный код для требуемого языка (в нашем случае это русский, Россия). Именно эти 5 символов вы должны присвоить define
-переменной WP_LANG
в файле wp-config.php
, т.е. должно быть так:
define ( 'WPLANG', 'ru_RU' );
Запускаем POEdit и открываем наш .po
-файл (тот который с ru_RU).
использоваться WordPress
Все, переводная часть завершена. Приступаем к адаптации самого плагина, ведь мы должны «сказать» ему, где лежит «словарь». Открываем wordpress-popular-posts.php
в каком-нибудь текстовом редакторе и вносим следующий PHP-код:
// Create Text Domain For Translations
add_action('init', 'wordpress_popular_posts_textdomain');
function wordpress_popular_posts_textdomain() {
load_plugin_textdomain('wordpress-popular-posts', 'wp-content/plugins/wordpress-popular-posts/lang/' . WPLANG);
}
Данный код указывает плагину, где будет находится файл с переводом, а именно в директории самого плагина (в поддиректории lang/ru_RU). Именно туда вы должны скопировать файл wordpress-popular-posts.mo
. После этого ищем строки в файле wordpress-popular-posts.php,
номера, которых вы сможете найти в .po
-файле, и производим следующую замену в коде (в качестве примера):
$post_stats .= '$comment_count comment(s)';
на
$post_stats .= $comment_count . __( ' comment(s)', 'wordpress-popular-posts' );
Скачать архив плагина популярных постов (wordpress popular posts) и локализацию.