Переводим (русифицируем) плагин для wordpress

Допустим вы написали плагин для wordpress. Что дальше? Можно ли как то расширить аудиторию пользователей, чтобы стяжать ещё большую славу :)? Ответ, конечно же, — да, можно. Иначе этой статьи  бы не было. Расскажу, как сделать и подключить файлы переводов для некого абстрактного плагина.

Сначала разберемся как же устроена «многоязычность» в wordpress. Достаточно поковырять любой многоязычный проект и будут ясны составляющие этого коктейля, а именно:

  • Использование специальных функций движка:

где $text — строка подлежащая переводу, а $domain — это префикс файла-словаря, откуда следует брать перевод. Весьма разумная задумка с префиксом файла, позволяет получать уникальный перевод одной и той же фразы в контексте данного модуля.

  • Наличие специальных языковых файлов с переводами и расширениями .po и .mo. Файл PO — это по сути файл-проект, для системы он не нужен, а нужен он тем, кто тоже хочет по-переводить ваш плагин на свой язык. Тогда они берут его за основу для своего языка. Вообще, по правилам хорошего тона, следует выкладывать ещё файл с расширением .pot, но об этом чуть чуть позже. Файл .mo, как раз содержит скомпилированные для сайта переводы и загружается системой, если мы скажем, где его можно взять.
  • Системе нужно сказать, что у нас есть файлы переводов, и указать где они лежат, но сделать это нужно до того, как сами фразы будут пытаться переводиться — т.е. на стадии инициализации.

Пойдем прямо по пунктам.

С функциями __($text, $domain) и _e($text, $domain), думаю, все понятно. Разве что, пока не ясно, где мы задаём значение $domain. Узнаем это позже.

Второй пункт — нужно подготовить словари. Где взять редактор и как вообще готовить эти словари. Такой редактор есть, называется PoEdit, в вот домашняя страничка PoEdit. Скачайте его от туда. Редактор позволит создать как новый файл .po, так и нужный нам .mo. Можно также сделать .po вручную, т.к. это обычный текстовый файл. Наиболее простой способ — взять какой то готовый .po (.pot) файл, поменять значения в шапке на подходящие вашему проекту и добавить после шапки строки с вашими ключевыми константами, переводом которых вы озадачены. Давайте взглянем на такой пример:

После шапки (в которой принципиальное значение, наверное, имеет только указание на кодировку) идут однотипные пары значений — msgid и msgstr. Сначала в msgid вы указываете что переводить, а потом в msgstr — на что переводить. Файл, в котором указаны только значения msgid (как в нашем примере) — записывается с расширением .pot — им будет удобно пользоваться другим разработчикам-локализаторам, которые захотят перевести ваш плагин на свой, к примеру, родной язык.

Копия .pot записывается с расширением .po и открывается PoEdit. Там мы видим довольно простую картину — два окошечка, в одном надо выбирать фразы, а во втором вводить переводы этих фраз. Все довольно просто, думаю, вы разберетесь. Перед выходом из программы,  сохранитесь. Автоматически будет сгенерирован файл .mo.

У нас практически все готово. Осталось правильно назвать наши файлы и куда то их сложить. Имена языковых файлов состоят из двух частей: [domain]-[xx_XX].mo, [domain]-[xx_XX].po и файл [domain].pot. Вместо [domain] рекомендую использовать имя вашего плагина. [xx_XX] — это язык локализации. Он, к примеру, устанавливается в файле wp-config.php. Для русского языка выглядит как «ru_RU».

Куда сложить файлы. Рекомендую (это не обязательно) сделать для них отдельную папку внутри папки вашего плагина, например «languages».

Тогда нам останется выполнить последний шаг. А именно, сообщить wordpress, что у нас есть файлы перевода. Типично это выполняется так:

Теперь посмотрим пример кода (до и после), где мы выполняем вывод текстовой константы:

Если остались ещё вопросы — пишите.

Мало букафф? Читайте есчо !

JOIN vs UNION — в чём разница?

Июль 4, 2025 г.

Эти два оператора в SQL на первый взгляд делают похожее — они "объединяют" таблицы. Но делают это по-разному и для разных целей. Вкратце: JOIN объединяет по горизонтали (добавляются столбцы из разных таблиц), тогда как UNION объединяет по вертикали ...

Читать

Дефолтовый admin пароль в jenkins

Март 1, 2022 г.

При использовании CLI клиента jenkins, нужно указывать ключ -auth с реквизитами пользователя. Но сразу после установки реквизиты неизвестны. Где их взять? Пароль типично находится в файле /var/lib/jenkins/secrets/initialAdminPassword. Введите [crayon-69bcaa8d44303744984982/] ...

Читать

CSS media query - ошибка в округлениях

Март 26, 2025 г.

Я замечал, что медиа запросы могут не срабатывать на границе т.н. брек-поинтов. К примеру, следующее правило может не срабатывать при значении 767 пикс: [crayon-69bcaa8d443f4792639728/] Источниками проблем являются фича масштабирования и ...

Читать

Использование модального диалога в Drupal

Январь 13, 2026 г.

В комплекте Drupal включает в себя jquery dialog, который можно подключить и использовать для ваших целей на фронт-енд. Эта статья о том, как это быстро сделать и начать собственно использовать в своей теме оформления. Типичная тема представляет ...

Читать
 

Комментарии к «Переводим (русифицируем) плагин для wordpress»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий:

Много комментариев в “Переводим (русифицируем) плагин для wordpress”

  1. Adward:

    Не получается по Вашей схеме русифицировать плагин eSop :(

  2. Юрий:

    Ой спасибо! Перевел FancyBox и подключил, до этого какие то продвинутые способы подключения насмотрелся, а так как в функциях несилен, то неполучалось, а по вашему способу, в легкую!

  3. summ3r:

    Если Вы заинтересованы в инструменте, который обеспечивает быстрый и эффективный перевод тем и плагинов WordPress, я рекомендую Вам использовать этот инструмент на базе web: http://poeditor.com/ Особенностью данного инструмента является наличие плагина, который Вы можете использовать для интеграции его API в Ваш WordPress. Это позволяет Вам сэкономить значительное время на процессе организации файлов.