Как сделать мультиязычный плагин для WordPress

Задача мультиязычности – одна из важнейших при работе над плагином (или темой) для WordPress. Особенно в том случае, когда вы собираетесь сделать свой труд публичным. Только мультиязычность позволит множеству почитателей этой системы в полной мере насладиться вашим гениальным творением.

Я начал делать свой собственный плагин, не обращая особого внимания на то, чтобы перевести интейфейс на другие языки. Первая версия делалась просто для удовольствия. Но после того, как я, спустя какое-то время выложил его на всеобщее обозрение, первым появился вопрос: “А почему только на английском языке”?

По правде говоря, мне лень было отвлекаться на изучение стандартных средств перевода, которые предлставляет WordPress, потому я просто в настройках сделал переключатель языка с русского на английский, сделал двумерный массив, который состоял из наименования языка и метки на этом языке, и везде, где требовалось выводить сообщение – выводить элемент массива $lang[i][g], где i – язык и  j – метка. Выглядело это так:

	$lang = array(
	'en_EN' =>
		array('Options' => 'XMPP sender options',
			'server' => 'Enter a jabber server which you will use to send messages from site. You should have a jabber account on it (talk.google.com for example).:',
			'language' => 'language/язык:',
			'port' => 'Enter a jabber server port (5222 for example): ',
			'login' => 'Enter login to your account on server entered previously: ',
			'password' => 'Enter password to your account on server entered previously: ',
			'admincopy' => 'Send copy to special admin jabber account? '
			),
	'ru_RU' =>
		array('Options' => 'Настройки XMPP sender',
			'server' => 'Введите сервер jabber, который вы будете использовать для отправления сообщений с сайта. У вас должен быть зарегистрирован jabber аккаунт на нем (например, talk.google.com).:',
			'language' => 'language/язык:',
			'port' => 'Введите порт сервера jabber (например, 5222): ',
			'login' => 'Введите логин на сервер jabber, который вы выбрали выше: ',
			'password' => 'Введите пароль для вашего аккаунта на сервере Jabber, который вы выбрали выше: ',
			'admincopy' => 'Слать копии сообщений администратору? '
			)
	);

Вызовы осуществлялись так:

echo _t( $xlang, 'language' );

Согласитесь, нелепо немного? Но зато быстро и не отвлекало от основной задачи.

Пришло время все сделать по человечески. В первую очередь это коснулось мультиязычности.

Для того, чтобы приложение работало на многих языках, в WordPress (и не только) используется механизм текстовых доменов.

Смысл этого в том, что в тексте программы для вывода меток на экран используются специальные функции:

  • __(‘String’, ‘domain’)
  • _e(‘String’, ‘domain’)
  • __ngettext(‘String’, ‘Strings’, $c, ‘domain’)

В чем отличия?

Первая используется для  того, чтобы пометить текстовыю переменную для перевода.

Например, $d = __(‘String’, ‘domain’);

Вторая действует практически аналогично, но еще и выводит  эту строку на устройство вывода (экран монитора). Это аналог функции echo.

Третья нужна для того, чтобы система понимала, какие строки использовать в случае, если переменная $c в единственном или множественном числе (как вы понимаете, не совсем удачное решение для русского языка).

Во всех функциях используется еще один параметр: ‘domain’. Это нужно для того, чтобы система могла найти необходимый файл перевода. Особенно это критично в больших проектах, где множество файлов и много различных файлов перевода, над которыми работают различные люди.

Итак, код плагина переработан с учетом всего вышеизложенного. Осталось добавить в начале вызов еще одной функции :

load_plugin_textdomain('xmpp-sender', false, dirname( plugin_basename(__FILE__) ) . '/lang');

Это нужно как раз для того, чтобы присоединить к файлу программы необходимый файл перевода.

Готово? Почти.

Теперь необходимо сгенерировать для файла программы .pot файл. Это файл, который используется в программах перевода для создания файла перевода. Я так и не нашел хорошего генератора таких файлов в интернет, единственный генератор, который нормально отработал – на сайте wordpress.org (для моего плагина ссылка выглядит так: http://wordpress.org/extend/plugins/xmpp-sender/admin/). Для того, чтобы им воспользоваться, надо залить плагин на сайт.

Ничего сложного в этом нет. Регистрируетесь. Переходите в директорию плагинов и делаете заявку на публикацию нового плагина. Спустя какое-то время ее удовлетворяют (так, во всяком случае, было  у меня). После этого, можно залить необходимые файлы в svn репозиторий. Этот процесс я описывать не буду, увольте. Тема для отдельной статьи.

После того, как файлы залиты на сайт, спустя какое-то время, ваш плагине становится доступным для скачивания. Одновременно с этим, вы можете зайти по приведенной выше ссылке (с вашим названием плагина) и  сгенерировать .pot файл. Для этого надо нажать на кнопку Get Pot и сохранить файл.

GetPot

Сохраняем файл локально. Осталось дело за малым – создать перевод. Это делается в программе poedit. Скачать ее можно здесь. Обладатели linux-систем так же могут установить его из репозитария.

Выбираем в меню – Создать каталог из POT-файла

create

Вводим необходимые данные:

opt

После нажатия “Ок” сохраняем .PO файл в атком виде: xmpp-sender-ru_RU.po. Обратите внимание, в конце, после имени домена, который вы использовали при формировании меток в программе, стоят символы “-ru_RU”. Это обязательное условие того, что программа найдет ваш файл перевода на русском языке. После чего вводим переводы строк:

po

Перевели все строки? Сохраняем полученный труд. Файлы с расширениями .po и .mo копируем в папку плагина (в моем случае, это /xmpp-sender/lang/), которая была определена в функции load_plugin_textdomain.

Вуаля. Все должно работать на русском языке.

Пример, приведенный в статье, плагин XMPP-sender, который служит для отправки  XMPP-уведомлений в WordPress, можно скачать и посмотреть здесь

Еще про переводы в WordPress можно почитать здесь

Как сделать мультиязычный плагин для WordPress: 3 комментария

  1. Если честно, я вообще не вижу смысла в переводе. Стандартные английские слова и выражения. Не на языке племени тумба-юмба же (:

    Ответить

    admin Reply:

    @Конкере, не поверишь, в мире еще столько народу, для которых что выучить английский, что полететь на луну — недостижимые мечты 😉
    Тем более, сделав плагин готовым к переводу, ты позволяешь его быстро и безболезненно перевести не только на русский, а еще на сотню языков по всему миру…

    Ответить

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

CAPTCHA
Reload the CAPTCHA codeSpeak the CAPTCHA code