Создание плагина wordpress – часть 2
Ну что же, настало время приступить к продолжению урока по созданию плагина для wordpress.
В прошлом уроке мы рассматривали с вами основы создания плагина. Сегодня мы с вами рассмотрим такую непростую вещь, как локализация плагина.
Сама система WordPress использует для локализации формат GNU gettext. Файлы имеют формат .PO и .MO, которые создаются программой Poedit. Саму программу можно скачать здесь.
Вообще, файл .PO можно отредактировать с помощью того же блокнота, но вот чтобы получить файл .MO, нужно открывать файл .PO в программе Poedit, и просто сохранить. После этого у вас в той же директории появится файл .MO, который и используется WordPress.
Я буду рассматривать пример локализации, с помощью обычного редактора php кода.
И так, приступим.
Возьмем любой файл .PO из шаблона вашей темы, или любой другой. Откроем его редактором php кода PHP Expert Edition, и в начале файла увидим вот примерно такие строки.
msgid "" msgstr "" "Project-Id-Version: So so def 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-12-15 21:57+0800\n" "PO-Revision-Date: \n" "Last-Translator: Andrey <macarou.com@gmail.com>\n" "Language-Team: Andrey <http://www.makarou.com/>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Chinese\n" "X-Poedit-Country: CHINA\n" "X-Poedit-SourceCharset: utf-8\n" "X-Poedit-KeywordsList: _e;__\n" "X-Poedit-Basepath: C:\\php\\n" "X-Poedit-SearchPath-0: .\n"
Это просто базовая информация о файле локализации, которую вы вводите, когда создаете .PO файл в программе Poedit.
Если захотите, можете как раз создать новый файл, а не открывать с шаблона.
И так, идем далее.
А вот дальше мы видим вот такие строки.
#: test-plugin.php:35 msgid "Test Plugin" msgstr "Тестовый плагин"
Название файлов и строк, понятное дело отличается.
#: test-plugin.php:35 – название файла, в котором переводится надпись и соответственно номер строки переводимой надписи.
msgid » Test Plugin » – фраза на английском языке (то есть стандартный язык с которого будем переводить).
msgstr » Тестовый плагин « – нужный перевод.
Теперь не закрывая этот файл, открываем наш главный файл плагина.
И перед вот этой строкой:
add_action('admin_menu', 'tp_add_tools_menu');
[/ccN_php]
Добавляем следующий код.
1
add_action('init', 'tp_init_locale',98);
add_action(‘init’, ‘tp_init_locale’,98); – с помощью этой функции выполняется установка нашей локализации.
tp_init_locale – это название нашей с вами функции которую мы напишем далее, для установки локализации по определению установленной локали в нашем движке.
Приступим к написанию самой функции. После функции:
add_action('init', 'tp_init_locale',98);
Пишем следующий код:
function tp_init_locale() {
$locale = get_locale();
$mo_file = dirname(__FILE__) . "/locale/".$locale.".mo";
load_textdomain('tesp_plugin', $mo_file);
}
$locale – определяет установленную локаль в вашем движке.
$mo_file – здесь вы указываете путь до .MO файла вашего плагина, с названием .MO файла на конце.
load_textdomain – функция WordPress, которая устанавливает локализацию плагина в ваш движок. Первое значение – это название локализации (должно быть уникальное в вашем движке), которое будет использоваться в движке. Второе значение – это путь до .MO файла.
В итоге у нас получится вот такой файл.
/*
Plugin Name: Test Plugin
Plugin URI: http://makarou.com/
Description: Let's go!
Version: 1.0
Author: So so Def
Author URI: http://makarou.com/
*/
/*
Copyright 2010 So so Def (email : makarou.com@gmail.com)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
add_action('init', 'tp_init_locale',98);
function tp_init_locale() {
$locale = get_locale();
$mo_file = dirname(__FILE__) . "/locale/".$locale.".mo";
load_textdomain('tesp_plugin', $mo_file);
}
add_action('admin_menu', 'tp_add_tools_menu');
function tp_add_tools_menu() {
add_submenu_page('tools.php', 'Test Plugin', 'Test Plugin', 10, <a href="http://www.php.net/basename">basename</a>(__FILE__), 'tp_manage_menu');
}
function tp_manage_menu(){
echo'Hello World';
}
Теперь я покажу, как использовать gettext функции WordPress , которые осуществляют перевод нужных нам строк.
__($message, $domain) – функция, переводит $message с использованием текущей локали $domain. С помощью этой функции вы можете переводить значения которые используются в функцияx для расчета, или для чего-нибудь другого, но не для перевода строк которые выдаются пользователю, то есть на экран монитора.
Пример использования:
__(' Test Plugin ', 'tesp_plugin');
_e($message, $domain) – функция аналогична предыдущей, но только она используется для перевода строк, которые выдаются пользователю, или если проще, то на экран монитора.
Пример использования:
_e(' Test Plugin ', 'tesp_plugin');
Теперь вы можете перевести название вашего плагина в пункте меню. Для этого отредактируем вот эту строку.
add_submenu_page('tools.php', __('Test Plugin', 'tesp_plugin'), __('Test Plugin', 'tesp_plugin'), 10, basename(__FILE__), 'tp_manage_menu');
Это все что могу сказать о локализации плагина. Теперь вы можете редактировать файл .PO под свой перевод.
Так же эти функции используются для локализации темы для wordpress, но мы это рассмотрим в других уроках.
Честно говоря, вроде ничего сложного тут и нет, но с другой стороны кто незнаком с азами программирования на php, для него это будет не очень легко. Если будут вопросы, задавайте, всегда рад на них ответить.

На локальном сервере перевод работает, а на удалённом нет… это при одинаковых движках WP.
В чем может быть причина? файлы wp-config.php эдентичны
Как вариант, это то что на сервере не работает модуль gettext для apache
На удалённом сервере перевод сделал плагином CodeStyling Localization, всё
прекрасно заработало.Это может значить что модуль gettext работает?
Думаю да, тогда другой причины почему не работает незнаю.
решил помочь и разослал пост в соц. закладки. надеюсь поднимется популярность.