Перевод плагина с помощью файлов .po и .mo
Я хочу перевести этот плагин.
Плагин уже переведен на другие языки и имеет файлы .pot
для добавления новых языков (насколько я понял из описания).
Как мне создать файлы .po
и .mo
для моего нового языка и сделать их доступными для использования плагином? Я попытался определить русский язык в моем файле wp-config.php
, вставив следующее определение:
define ('WPLANG', 'ru_RU');

Редактор
Существуют другие варианты, но чаще всего используется: Poedit — кроссплатформенный редактор gettext-каталогов (файлов .po).
Форматы
.mo
означает Machine Object (Машинный Объект)
-- скомпилированный экспорт файла.po
, который используется WordPress.po
означает Portable Object (Переносимый Объект)
-- редактируемый текстовый файл с переводимыми строками
-- основан на основном файле.pot
, используя функцию PoEdit Обновить из POT-файла
-- некоторые распространяют его как основной файл, но он должен использоваться только для переводов.pot
означает Portable Object Template (Шаблон Переносимого Объекта)
-- редактируемый текстовый файл, используемый для извлечения всех переводимых строк из WordPress, тем и плагинов с помощью функции PoEdit Обновить из исходников
Процедура
- Дублируйте файл .pot и переименуйте его в
plugin-basename-lang_COUNTRY.po
- Пример для упомянутого плагина:
subscribe-reloaded-pt_BR.po
-- pt_BR означает португальский (Бразилия), но многие языки не имеют вариаций по странам...
-- вам нужно указать свой собственный язык - Параметр
WPLANG
в файлеwp-config.php
должен быть установлен в соответствии с вашим языком, например,pt_BR
- Каждый раз при сохранении файла
.po
, PoEdit автоматически генерирует файл.mo
, который используется WordPress и, по сути, единственный, который нужно загружать
Замечания
- Если вы выполнили полный или значительный частичный перевод, отправьте его автору плагина, чтобы он мог включить его в Репозиторий, и вы получите признание за это
- Не забудьте сделать резервную копию вашего перевода, потому что при обновлении плагина ваш файл будет утерян
- Предложение плагина от @user17078 довольно интересное, но я сам им мало пользовался

В каждом плагине в заголовке указано уникальное имя. (например:
/*
Plugin Name: my-pluginname
.......
*/
Затем в папке этого плагина создайте папку "languages";
После этого в .php файл вашего плагина (где-нибудь в начале) вставьте код инициализации:
class load_language
{
public function __construct()
{
add_action('init', array($this, 'load_my_transl'));
}
public function load_my_transl()
{
load_plugin_textdomain('my-pluginname', FALSE, dirname(plugin_basename(__FILE__)).'/languages/');
}
}
$zzzz = new load_language;
Затем откройте любой текстовый редактор и вставьте следующий код (ОБРАТИТЕ ВНИМАНИЕ, что мы добавляем только два примерных сообщения - "hello" и "bye", вы можете ДОБАВИТЬ СКОЛЬКО УГОДНО сообщений по аналогии).
# English translations for PACKAGE package.
# Copyright (C) 2012 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Automatically generated, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: my-pluginname 1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-08-06 13:46-0400\n"
"PO-Revision-Date: 2013-03-21 11:20+0400\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"X-Poedit-SourceCharset: iso-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.5.4\n"
#: mypluginindex.php:87 (это просто строка-напоминание, где появляется наш код)
msgid "mymessage1"
msgstr "Привет"
#: mypluginindex.php:88
msgid "mymessage2"
msgstr "Пока"
Сохраните этот файл как "my-pluginname-ru_RU.po" (обратите внимание, что .po - это расширение файла, убедитесь, что ваш текстовый редактор не сохранил его как "my-pluginname-ru_RU.po.TXT").
Затем скачайте программу POEDIT, откройте этот файл, отредактируйте поле "translation" и сохраните как "my-pluginname-ru_RU". Будет сгенерировано два файла (Если poEdit не генерирует второй .mo файл автоматически, перейдите в Файл -> Настройки -> Редактор и отметьте галочку "Автоматически компилировать .mo файл при сохранении").
Поместите эти два файла в папку "languages".
После этого откройте wp-config.php и найдите строку:
define ('WPLANG', '');
и измените на:
define ('WPLANG', 'ru_RU');
Вот и все. При загрузке WordPress будет читать языковой файл вашего плагина с префиксом -ru_RU.
Поэтому в .php файле плагина вместо:
echo "Какой-то текст";
используйте:
echo __("mymessage1", 'my-pluginname');
Готово. Теперь можете протестировать ваш плагин.
P.S. Использованные ссылки:

Я попробовал это со своей темой. В header.php у меня есть echo __("thanks-for-visiting", 'transparent');
. В theme\languages\transparent-en_US.po у меня msgid "thanks-for-visiting"
msgstr "Привет! Спасибо, что зашли. Посмотрите вокруг и подпишитесь на "
. На фронтенде это выводит "thanks-for-visiting".

Вы можете попробовать этот плагин codestyling-localization. С его помощью можно переводить ваши плагины и темы.

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

Похоже, это хорошая альтернатива: https://wordpress.org/plugins/say-what/

Также рекомендую http://poeditor.com/. Это веб-инструмент для перевода, который отлично работает с файлами .po, .mo, .pot и другими подобными форматами.

Посетитель предложил правку, указав на новый плагин для этого сервиса: http://wordpress.org/extend/plugins/poeditor/

poeditor.com больше не существует...
