Не часто меня посещает желание писать собственные статьи, но сегодня наверное день такой :) Речь пойдет о нашем родном и русском… о языке, а точнее о локализации, а если еще точнее, то о локализации плагинов для блог-движка WordPress. Возможно кое-кто еще не знает, но плагинов этих видимо-невидимо и живут они здесь. И как, вы возможно, уже догадались подавляющая часть плагинов создана нашими зарубежными собратьями, по сему «говорят» они, как минимум, на английском языке. Так вот я бы хотел предложить вам самую настоящую инструкцию к применению – как локализовывать плагины для WordPress. Инструкция будет предложена на примере локализации плагина WordPress Popular Posts.

Итак, начну с небольшого введения… Возможность использовать локализованные версии плагинов реализована на базе использования свободной и широко распространённой библиотеки 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).

PO Edit

PO Edit

Окно разделено на 3 части. Верхние 2 без возможности редактирования, а нижняя как раз будет использоваться для перевода. Перемещаясь по верхнему списку, вы будете видеть выбранные тексты, а в нижней будете вносить локализованный текст (картинка кликабельна). По завершению перевода нажимаем Файл->Сохранить. В результате чего будет создан файл wordpress-popular-posts.mo, который представляет собой скомпилированную версию .po-файла (я думаю его даже можно назвать индексом) и которая будет непосредственно использоваться 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) и локализацию.


Вы прочитали статью и она Вам понравилась?
Подпишитесь на обновления!

Pаспечатать эту статью Pаспечатать эту статью