Как перевести wordpress плагин
Если вы написали какой-то более-менее стоящий плагин, то не стоит ограничивать себя мыслью, что его никто не будет использовать кроме вас. Скорее всего, найдется кто-то, кто будет использовать его как в вашей стране, так и за рубежом. Заставить это сделать кого-то не в ваших силах, однако, предоставить такую возможность труда не составит. Когда я говорю про доступность, я подразумеваю две вещи. |
Первая – выложить плагин в каком-нибудь хранилище wordpress плагинов, например, здесь MyWordpress.ru.
Второе – это дать возможность пользователям переводить ваш плагин на их родной язык.
Вот про перевод плагинов я сегодня и расскажу. Делается это довольно просто, надо заметить.
Сперва немного теории…
Теория
Интернационализация плагинов в wordpress делается через pot, mo-файлы + использование пары специальных функций: _e(), __().
Вот такие вот смешные функции, но что поделаешь Зато короткие.
Все текстовые записи в вашем плагине будем называть текстовыми метками. То есть любой текст, который будет выводиться (сообщения об ошибках, подписи полей, значения по-умолчанию и т.д.) в браузер.
Каждая текстовая метка определяется своим пространством имен (домены их называют) и именем. Имя метки это то же, что и ее текст.
Чтобы вытащить текст метки нужно вызвать функцию
__(‘имя_метки’, ‘имя_домена’).
Если вы хотите вытащить текст и сразу его вывести, то используйте
_e(‘имя_метки’, ‘имя_домена’);
Ок. С использованием меток все понятно. Остался вопрос их создания и хранения.
Метки хрянятся в файле двух видов.
- POT-файл хранит все информацию и метках, которые можно переводить
- MO-файл содержит переводы этих меток.
POT-файлы нужно создавать вручную (или я просто не знаю какие программы есть для этого), а MO создаются с помощью специальных программ (позже скажу каких и дам линки).
POT-файл.
POT-файл должен начинаться с такого заголовка:
# Copyright (C) YEAR WordPress contributors.
# This file is distributed under the same license as the WordPress package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: WordPress VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: -02-27 17:11-0600\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
В нем все слова, написанные большими буквами нужно заменить на свои значения.
После этого пишете ваши метки в виде:
msgid "Sorry, comments are closed for this item."
msgstr ""
#: wp-comments-post.php:29
msgid "Sorry, you must be logged in to post a comment."
msgstr ""
#: wp-comments-post.php:35
msgid "Error: please fill the required fields (name, email)."
msgstr ""
Здесь видно три сообщения (метки). Для каждой метки нужно создать такой блок, в котором указывается:
- файл в котором, метка находится
- строка в этом файле
- имя метки
- пустая строка для перевода
Имя метки – это что будет подставляться в функции _e() и __().
Пример POT-файла от wordpress`а можно скачать здесь POT-файл wordpress`а.
После создания POT-файла уже можно создавать переводы на другой язык текстовых меток.
Создание переводов.
Все переводы для POT-файлов хранятся в MO-файлах. Сделать такой файл легко. Для этого нужно скачать программу poEdit.
После запуска ей нужно указать POT-файл (в ней он называется каталогом). Интерфейс программы доступен на русском языке, поэтому разобраться можно с ней легко.
После открытия POT-файла, вы увидите примерно такое окно.
В поле, помеченным цифрой 1 выбираете текст который нужно перевести. После выбора строки для перевода в поле, помеченным цифрой 2 нужно ввести перевод. Вот и все.
После этого заходите в меню Файл->Сохранить как. После сохранения файла POT автоматически создастся файл mo в том же каталоге, что и POT. Если mo-файл не создался, то залезьте в настройки poEdit и поставьте там галку (автоматически создавать mo-файл при сохранении).
Теперь у нас есть плагин с метками _e() и __(), вместо текстовых надписей, файлы с текстами для переводов (POT) и, возможно, файлы с переводами (MO).
Последнее, что осталось сделать – это уведомить wordpress о том, что наш плагин может быть интернационализирован.
Интеграция переводов.
Чтобы интегрировать переводы плагина с самим плагинов, нужно положить POT-файл и все MO-файлы в одну папку (подкаталог вашего плагина, например или прям в его корень).
При этом, имя каждого MO-файла должно иметь вид domain-xx_XX.mo, где domain – имя домена для всех его меток, а xx_XX – имя локали для языка. Для русского например будет ru_RU, а для французского fr_FR.
После всех этих приготовлений нужно написать небольшую функцию, которая будет указывает wordpress`у, что для меток нужно использовать языковые MO-файлы, а также укажет путь к ним.
if (function_exists('load_plugin_textdomain')) {
load_plugin_textdomain(‘my_first_plugin’, 'wp-content/plugins/my_first_plugin');
}
}
// Вызываем ее до начала выполнения плагина
add_action('init', ‘textdomain’);
После добавления этого кода в ваш wordpress плагин любой человек сможет перевести его на свой родной язык.
Другие пишут:
Читайте также:
А для своих тем можно делать отдельную локаль или это в принципе не возможно?
Вопрос, а если у меня в строке несколько значений нужно перевести, то как писать?
Вот к примеру будет для первого значения, а для второго или третьего в этой строке, как делать?
#: wp-comments-post.php:13
Насколько я помню для каждого языка создается отдельный файл перевода с базового языка. То есть для каждой локали свой файл. Второе значение будет во втором файле, а третье - в третьем и т.д. Точнее сказать уже не могу - давно этим занимался
Если несколько записей в одной строке, то для каждой записи, скорее всего нужно указать один номер строки
#: wp-comments-post.php:13
…..
#: wp-comments-post.php:13
Я подозреваю что номер строки нужен только для человека, который будет переводить потом с твоего перевода на другой язык. Никакой функциональной нагрузки он не несет, поэтому в дублировании ничего страшного быть не должно
спасибо огромное! очень хороший пост. перевела плагин - работает!
Слишком кустарный способ, лучше переводить в блокноте.
сорри за комент не по теме, а как вы сделали такой виз редактор? указал свой сайт в имени.. ответьте в коментах плз
Я вот такой код нашёл в переведённом плагине, почему он отличается от вашего?
load_plugin_textdomain(‘alexking.org’);
if (!function_exists(‘is_admin_page’)) {
function is_admin_page() {
if (function_exists(‘is_admin’)) {
return is_admin();
}
if (function_exists(‘check_admin_referer’)) {
return true;
}
else {
return false;
}
}
}
У меня программа работает не корректно.
При сохранении переведенного файла выдает ошибку.
Проверила на родном файле с сайта вордпресс, та же ошибка.
кажется пост просто переведен с английского и даже не отредактирован!
Поставил на сайте, получается всякая хр@нь…
Спасибо. Перевел таким способом плагин WP e-Commerce для украинского языка.
Объясните нубу, пожалуйста, мой плагин называется subscribe-to-comments, а сайт toonart.ru. как мне нужно эту функцию записать? так:
function init_textdomain() {
if (function_exists(‘toonart.ru’)) {
load_plugin_textdomain(‘subscribe-to-comments’, ‘wp-content/plugins/subscribe-to-comments’);
}
}
// Вызываем ее до начала выполнения плагина
add_action(‘init_textdomain’, ‘toonart.ru’);
так??
Спасибо за полезную статью.
заказ такси из шереметьево
ñàéò - òàêñè Äâèæîê Ñàìàÿ ëó÷øàÿ óñëóãà äëÿ Âàñ ýòî заказ ÑакÑи из ÑеÑемеÑÑево