Я начал делать свой собственный плагин, не обращая особого внимания на то, чтобы перевести интейфейс на другие языки. Первая версия делалась просто для удовольствия. Но после того, как я, спустя какое-то время выложил его на всеобщее обозрение, первым появился вопрос: “А почему только на английском языке”?
По правде говоря, мне лень было отвлекаться на изучение стандартных средств перевода, которые предлставляет Wordpress, потому я просто в настройках сделал переключатель языка с русского на английский, сделал двумерный массив, который состоял из наименования языка и метки на этом языке, и везде, где требовалось выводить сообщение – выводить элемент массива $lang[i][g], где i – язык и j – метка. Выглядело это так:
[sourcecode language='php']
$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' => 'Слать копии сообщений администратору? '
)
);
[/sourcecode]
Вызовы осуществлялись так:
[sourcecode language='php']
echo _t( $xlang, 'language' );
[/sourcecode]
Согласитесь, нелепо немного? Но зато быстро и не отвлекало от основной задачи.
Пришло время все сделать по человечески. В первую очередь это коснулось мультиязычности.
Для того, чтобы приложение работало на многих языках, в Wordpress (и не только) используется механизм текстовых доменов.
Смысл этого в том, что в тексте программы для вывода меток на экран используются специальные функции:
- __('String', 'domain')
- _e('String', 'domain')
- __ngettext('String', 'Strings', $c, 'domain')
В чем отличия?
Первая используется для того, чтобы пометить текстовыю переменную для перевода.
Например, $d = __('String', 'domain');
Вторая действует практически аналогично, но еще и выводит эту строку на устройство вывода (экран монитора). Это аналог функции echo.
Третья нужна для того, чтобы система понимала, какие строки использовать в случае, если переменная $c в единственном или множественном числе (как вы понимаете, не совсем удачное решение для русского языка).
Во всех функциях используется еще один параметр: 'domain'. Это нужно для того, чтобы система могла найти необходимый файл перевода. Особенно это критично в больших проектах, где множество файлов и много различных файлов перевода, над которыми работают различные люди.
Итак, код плагина переработан с учетом всего вышеизложенного. Осталось добавить в начале вызов еще одной функции :
[sourcecode language='php']
load_plugin_textdomain('xmpp-sender', false, dirname( plugin_basename(__FILE__) ) . '/lang');[/sourcecode]
Это нужно как раз для того, чтобы присоединить к файлу программы необходимый файл перевода.
Готово? Почти.
Теперь необходимо сгенерировать для файла программы .pot файл. Это файл, который используется в программах перевода для создания файла перевода. Я так и не нашел хорошего генератора таких файлов в интернет, единственный генератор, который нормально отработал – на сайте wordpress.org (для моего плагина ссылка выглядит так: http://wordpress.org/extend/plugins/xmpp-sender/admin/). Для того, чтобы им воспользоваться, надо залить плагин на сайт.
Ничего сложного в этом нет. Регистрируетесь. Переходите в директорию плагинов и делаете заявку на публикацию нового плагина. Спустя какое-то время ее удовлетворяют (так, во всяком случае, было у меня). После этого, можно залить необходимые файлы в svn репозиторий. Этот процесс я описывать не буду, увольте. Тема для отдельной статьи.
После того, как файлы залиты на сайт, спустя какое-то время, ваш плагине становится доступным для скачивания. Одновременно с этим, вы можете зайти по приведенной выше ссылке (с вашим названием плагина) и сгенерировать .pot файл. Для этого надо нажать на кнопку Get Pot и сохранить файл.

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

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

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

Перевели все строки? Сохраняем полученный труд. Файлы с расширениями .po и .mo копируем в папку плагина (в моем случае, это /xmpp-sender/lang/), которая была определена в функции load_plugin_textdomain.
Вуаля. Все должно работать на русском языке.
Пример, приведенный в статье, плагин XMPP-sender, который служит для отправки XMPP-уведомлений в Wordpress, можно скачать и посмотреть здесь
Еще про переводы в Wordpress можно почитать здесь
Если честно, я вообще не вижу смысла в переводе. Стандартные английские слова и выражения. Не на языке племени тумба-юмба же (:
ОтветитьУдалить@Конкере, не поверишь, в мире еще столько народу, для которых что выучить английский, что полететь на луну - недостижимые мечты ;-)
ОтветитьУдалитьТем более, сделав плагин готовым к переводу, ты позволяешь его быстро и безболезненно перевести не только на русский, а еще на сотню языков по всему миру...
blog.laptev.info поздравляю вас с праздниками почаще обновляйте и я всегда буду вашим читателем
ОтветитьУдалить