Как перевести wordpress плагин

Если вы написали какой-то более-менее стоящий плагин, то не стоит ограничивать себя мыслью, что его никто не будет использовать кроме вас. Скорее всего, найдется кто-то, кто будет использовать его как в вашей стране, так и за рубежом. Заставить это сделать кого-то не в ваших силах, однако, предоставить такую возможность труда не составит. Когда я говорю про доступность, я подразумеваю две вещи.

Первая – выложить плагин в каком-нибудь хранилище wordpress плагинов, например, здесь MyWordpress.ru.
Второе – это дать возможность пользователям переводить ваш плагин на их родной язык.

Вот про перевод плагинов я сегодня и расскажу. Делается это довольно просто, надо заметить.
Сперва немного теории…

Теория

Интернационализация плагинов в wordpress делается через pot, mo-файлы + использование пары специальных функций: _e(), __().
Вот такие вот смешные функции, но что поделаешь :) Зато короткие.
Все текстовые записи в вашем плагине будем называть текстовыми метками. То есть любой текст, который будет выводиться (сообщения об ошибках, подписи полей, значения по-умолчанию и т.д.) в браузер.
Каждая текстовая метка определяется своим пространством имен (домены их называют) и именем. Имя метки это то же, что и ее текст.
Чтобы вытащить текст метки нужно вызвать функцию

    __(‘имя_метки’, ‘имя_домена’).

Если вы хотите вытащить текст и сразу его вывести, то используйте

    _e(‘имя_метки’, ‘имя_домена’);

Ок. С использованием меток все понятно. Остался вопрос их создания и хранения.
Метки хрянятся в файле двух видов.

  • POT-файл хранит все информацию и метках, которые можно переводить
  • MO-файл содержит переводы этих меток.

POT-файлы нужно создавать вручную (или я просто не знаю какие программы есть для этого), а MO создаются с помощью специальных программ (позже скажу каких и дам линки).

POT-файл.

POT-файл должен начинаться с такого заголовка:

# LANGUAGE (LOCALE) translation for WordPress.
# 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"

В нем все слова, написанные большими буквами нужно заменить на свои значения.
После этого пишете ваши метки в виде:

#: wp-comments-post.php:13
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-файлы, а также укажет путь к ним.

function init_textdomain() {
    if (function_exists('load_plugin_textdomain')) {
        load_plugin_textdomain(‘my_first_plugin’, 'wp-content/plugins/my_first_plugin');
    }
}

// Вызываем ее до начала выполнения плагина
add_action('init',textdomain);

После добавления этого кода в ваш wordpress плагин любой человек сможет перевести его на свой родной язык.

Другие пишут:





Читайте также:



15 Ответов на “Как перевести wordpress плагин”

  1. А для своих тем можно делать отдельную локаль или это в принципе не возможно?

  2. Вопрос, а если у меня в строке несколько значений нужно перевести, то как писать?

    Вот к примеру будет для первого значения, а для второго или третьего в этой строке, как делать?
    #: wp-comments-post.php:13

  3. Насколько я помню для каждого языка создается отдельный файл перевода с базового языка. То есть для каждой локали свой файл. Второе значение будет во втором файле, а третье - в третьем и т.д. Точнее сказать уже не могу - давно этим занимался :)

  4. Если несколько записей в одной строке, то для каждой записи, скорее всего нужно указать один номер строки :)

    #: wp-comments-post.php:13
    …..
    #: wp-comments-post.php:13

    Я подозреваю что номер строки нужен только для человека, который будет переводить потом с твоего перевода на другой язык. Никакой функциональной нагрузки он не несет, поэтому в дублировании ничего страшного быть не должно :)

  5. katyaskvo

    спасибо огромное! очень хороший пост. перевела плагин - работает!

  6. DEF

    Слишком кустарный способ, лучше переводить в блокноте.

  7. сорри за комент не по теме, а как вы сделали такой виз редактор? указал свой сайт в имени.. ответьте в коментах плз

  8. Я вот такой код нашёл в переведённом плагине, почему он отличается от вашего?

    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;
    }
    }
    }

  9. У меня программа работает не корректно.
    При сохранении переведенного файла выдает ошибку.

    Проверила на родном файле с сайта вордпресс, та же ошибка.

  10. кажется пост просто переведен с английского и даже не отредактирован!

  11. Поставил на сайте, получается всякая хр@нь…

  12. Спасибо. Перевел таким способом плагин WP e-Commerce для украинского языка.

  13. Объясните нубу, пожалуйста, мой плагин называется 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’);

    так??

  14. Спасибо за полезную статью.

  15. заказ такси из шереметьево

    ñàéò - òàêñè Äâèæîê Ñàìàÿ ëó÷øàÿ óñëóãà äëÿ Âàñ ýòî заказ такси из шереметьево


© Copyright. . I-Novice. All Rights Reserved. Terms | Site Map