Локализация плагинов в WordPress — важный аспект, позволяющий расширить аудиторию вашего продукта за счет поддержки разных языков. Сегодня разберем, как создавать плагины, полностью готовые к переводу, используя собственную обертку _wpcat_gettext, что позволит удобно интегрировать переводы и избегать конфликтов с другими плагинами.
Почему локализация плагинов важна и что такое gettext
WordPress изначально поддерживает мультиязычность благодаря системе gettext — стандарту для международной локализации программного обеспечения. Для плагинов это значит, что текстовые строки нужно оборачивать в функции, которые потом заменяются на переводы из .po/.mo файлов.
Если плагин не локализован, пользователи из других стран видят интерфейс исключительно на исходном языке, что снижает его популярность. К тому же, грамотно организованная локализация облегчает поддержку и развитие продукта.
Стандартные функции для локализации — это __(), _e(), _n() и другие, но мы создадим свою обертку, чтобы повысить уникальность и избежать возможных конфликтов с другими плагинами.
Создаем собственную функцию _wpcat_gettext для локализации
Для начала определим функцию _wpcat_gettext, которая будет принимать строку и возвращать переведенный вариант с использованием стандартной функции __(), но с уникальным текстовым доменом wpcat-plugin. Это важно для правильной загрузки переводов.
function _wpcat_gettext($text) {
return __($text, 'wpcat-plugin');
}Теперь вместо __('Hello, world!', 'text-domain') используем _wpcat_gettext('Hello, world!'). Это упрощает вызов и гарантирует использование правильного домена.
Также можно добавить функцию для вывода перевода напрямую:
function _wpcat_e($text) {
echo _wpcat_gettext($text);
}Добавляем поддержку загрузки переводов в плагин
Чтобы WordPress понимал, где искать файлы перевода, необходимо зарегистрировать текстовый домен и указать путь к папке с .mo
function wpcat_plugin_load_textdomain() {
load_plugin_textdomain('wpcat-plugin', false, dirname(plugin_basename(__FILE__)) . '/languages');
}
add_action('plugins_loaded', 'wpcat_plugin_load_textdomain');Рекомендуется складывать файлы с переводами в папку /languages внутри директории плагина. Формат файлов — wpcat-plugin-ru_RU.mo, wpcat-plugin-en_US.mo и т.д.
Пример использования локализации в плагине
Допустим, у нас есть функция, выводящая приветственное сообщение в админке:
function wpcat_plugin_admin_notice() {
echo '<div class="notice notice-success is-dismissible">';
echo '<p>' . _wpcat_gettext('Плагин успешно активирован!') . '</p>';
echo '</div>';
}
add_action('admin_notices', 'wpcat_plugin_admin_notice');Если мы сделаем перевод строки «Плагин успешно активирован!» в файл wpcat-plugin-ru_RU.po, то при активации плагина пользователь увидит сообщение на русском языке, а при переключении языка интерфейса на английский — на английском (если есть соответствующий перевод).
Создаем .pot файл и переводим плагин
Для создания шаблона перевода (.pot) используйте инструменты, например, Poedit или WP-CLI:
wp i18n make-pot ./ ./languages/wpcat-plugin.pot --exclude=vendor,node_modulesПосле этого сгенерируйте .po/.mo файлы с переводами на нужные языки.
Советы по организации текстов для локализации
1. Всегда используйте уникальный текстовый домен, чтобы избежать конфликтов.
2. Избегайте конкатенации строк с переводами — используйте sprintf или printf для вставки переменных.
3. Группируйте текстовые строки логически, чтобы было проще искать и обновлять переводы.
4. Проверяйте корректность перевода на нескольких языках, особенно если используются сложные конструкции.
Пример с переменными и форматированием текста
Если нужно вставить динамические данные в перевод, используйте sprintf:
function wpcat_plugin_show_message($username) {
$message = sprintf(_wpcat_gettext('Привет, %s! Добро пожаловать в наш плагин.'), $username);
echo '<p>' . $message . '</p>';
}Так переводчики увидят, что в строку вставляется имя пользователя, и смогут правильно адаптировать фразу для разных языков.
Подключение плагина WPCommunity для управления локализацией
Если вы хотите автоматизировать работу с переводами, обратите внимание на плагин WPCommunity. Он предоставляет удобный интерфейс для организации переводов прямо из админки и интегрируется с системой gettext.
Итоги и рекомендации
Локализация — это не просто добавление переводов, а грамотная архитектура плагина, которая делает его удобным и понятным для пользователей по всему миру. Создание собственной обертки для gettext, например, _wpcat_gettext, поможет структурировать код и избежать проблем с конфликтами.
Не забывайте, что перевод — это живой процесс, требующий поддержки и обновления при добавлении новых функций. Используйте профессиональные инструменты и подходы, чтобы обеспечить качественный мультиязычный опыт.