К основному контенту

Локализация создаваемых плагинов WordPress

Очередная тема на предмет локализации (перевода) компонентов WordPress. Здесь хочется затронуть тему локализации в целом и разработки плагинов в частности.
Начну с того, что локализация важна и локализация нужна. В сети множество тем и плагинов к WordPress, которые не локализованы. Иногда, очень трудно понять, что автор плагина написал в тексте какого ни будь сообщения. Благо, в основном и общепринятом это сообщение на английском. Но, согласитесь, гораздо приятнее, когда тексты сайта или админки на одном языке, а не скачут, кто во что горазд.

Локализация текстов в WordPress

Тексты в WordPress выводятся специальными функциями, которые включают в себя процесс локализации. Если соответствующего перевода нет, тогда текст будет выведен так, как он был передан в функцию. Чаще всего используются функции __() и _e(). Вторым аргументом этих функций является, так называемый, текстовый домен - уникальный идентификатор перевода для Вашего плагина. Обычно это имя плагина латиницей и без пробелов.

Файлы переводов

Файлы переводов это два файла на один язык. Маска имени файла для тем: <язык>_<ДИАЛЕКТ>.<расширение>, например ru_RU.po или en_CA.po. Для плагтнов несколько иное: <текстовый домен>-<язык>_<ДИАЛЕКТ>.<расширение>, например my_plugin-en_GB.po.

Что же это за файлы?

Файл PO - это файл-карта. Он содержит текст оригинального сообщения и текст перевода.
Файл MO - сгенерированный файл перевода на основе .PO файла. Текст перевода берется именно из .MO файла, а файл .PO является только картой для перевода.

Чем переводить?

Для локализации тем и плагинов есть программа Poedit.Но, я ее не использую. Почему? Не вижу смысла устанавливать на компьютер еще одну мелкую программу, которая умеет делать только одну узконаправленную вещь - переводить тексты для WordPress. Вместо нее я использую плагин Codestyling Localization (официальный сайт). Он делает ровным счетом то же самое, что и PoEdit, но из админки WordPress. На мой взгляд, это самый простой способ локализации компонентов WordPress.

Как родилась эта статья

На днях я решил сделать локализацию своего проекта. Почитал, как это делают другие и сделал ровно так, как сказано и.... не работает! Через пару часов и много минут, наконец, ответ был найден. Примеров, как сделать локализацию плагина, много, но, почему-то почти нигде нет одной важной детали.

Программирование "важной детали"

Главным камнем преткновения было то, что подключение пакета перевода должна происходить раньше всего. В моем случае это был конструктор класса плагина, но и там он не работал. Пришлось вынести в главный файл плагина, вот тогда все заработало!

/**
 * Подключаем локализацию
 * 
 * Файлы локад=лизации будут искаться в <Папка плагина>/languages/
 */
function plugin_name_load_plugin_textdomain()
{
    $domain = 'lswp';
 
    // wp-content/plugins/plugin-name/languages/plugin-name-de_DE.mo
    load_plugin_textdomain($domain, FALSE, basename(dirname(__FILE__)) . '/languages/');
}
add_action('init', 'plugin_name_load_plugin_textdomain');

Комментарии

Популярные сообщения из этого блога

Прямые ссылки на файлы Google диска

В предыдущей статье я рассказал, как подключить свой JavaScript файл к блогу BLOGSPOT . Но для того, что бы их подключить нужны прямые ссылки на файл, а Google диск при предоставлении общего доступа к файлу выдает ссылку на предварительный просмотр, которая никак напрямую не ссылается на файл. Для Google диска прямая ссылка на файл - это ссылка на скачивание. Ниже описаны два способа создания ссылки на скачивание на примере файла prism.js.

События для ведения таблиц

Как и всегда, в пылу проекта внезапно родилась Z табличка. Главный нюанс был в том, что она должна была хранить пароли для авторизации на стороннем сервере. Естественно, никто не хотел хранить пароли в открытом виде, а двустороннее шифрование SAP не умеет без сторонних пакетов и надстроек. Далее, все как обычно - придумали алгоритм, сделали табличку. Дело осталось за малым - нужно шифровать пароли, которые вводит пользователь. Делать отдельную программу нет смысла, поскольку ее функционал мало чем будет отличаться от сгенерированного. Вот здесь на помощь приходят события! С их помощью можно, наверное, все. По крайней мере, я не нашел чего-либо, что нельзя сделать с данными через события.

OOP ALV GRID с HTML шапкой

В этой статье хочу постараться подробно описать и привести пример, как можно создать ALV отчет с таблицей на весь экран и с HTML шапкой вверху. Я не буду описывать начальный этап, где пишется селекционный экран или делается выборка данных. Будем считать, что основа у нас есть и нам нужно просто вывести данные. Главной изюминкой является то, что нужно вывести ALV GRID на экран без использования каких-либо дополнительных элементов на экране. Step-By-Step Шаг 1. Создание окна Создаем самое простое окно с номером 100. На него не нужно кидать никаких контейнеров. Оно нам нужно только для модулей PAI и PBO и вывода на него ALV GRID.