Перевод плагина в директории MU-PLUGINS не работает.

Вопрос или проблема

Я успешно перевёл дочернюю тему, но не добился такого же результата в папке mu-plugins.

Имя плагина – “mu-functions.php”. В этом файле я добавил “Text Domain: mu-functions” в заголовок и затем загрузил textdomain:

add_action( 'plugins_loaded', 'myplugin_muload_textdomain' );
function myplugin_muload_textdomain() {
load_muplugin_textdomain( 'mu-functions', basename( dirname(__FILE__) ) . '/inc/languages' );
}

Структура плагина, который я создал в директории mu-plugins, следующая:

В той же директории у меня есть папка “inc” (include), где я разместил все файлы, вызываемые через функцию “include_once()” в файле “mu-functions.php”. В этой же директории “inc” находится папка “languages”, где я создал файл “mu-functions.pot”, который был переведен на португальский, а затем сгенерирован в файлы “.mo” и “.po”.

В моей дочерней теме были проблемы с этими файлами “.mo” и “.po”. Я обнаружил на другом форуме, что их надо называть только по локали (в этом случае “pt_PT”), а не “Text-Domain-pt_PT”. Эта проблема была успешно решена. Так что, для тестирования я сгенерировал еще два файла “.mo” и “.po”. Эти файлы находятся в моей папке языков:

  • mu-functions-pt_PT.mo
  • mu-functions-pt_PT.po
  • mu-functions.pot
  • pt_PT.mo
  • pt_PT.po

Может ли кто-нибудь, пожалуйста, помочь мне? Чего мне не хватает?

Вам нужно использовать другое действие в mu-plugins.

add_action('muplugins_loaded', 'myplugin_muload_textdomain');

Действие plugins_loaded работает только после загрузки активных плагинов и функций.

mu-plugins являются особыми плагинами и не загружаются как обычные.

Как видно по следующей ссылке, mu-plugins загружается перед всем остальным. Actions Run During a Typical Request

Проблема заключалась в строке:

load_muplugin_textdomain( 'mu-functions', basename( dirname(__FILE__) ) . '/inc/languages' );

и более конкретно в функции:

basename( dirname(__FILE__) ) 

Поскольку моя папка с плагинами и языковыми файлами находится в корневой директории mu-plugins, правильный код такой:

load_muplugin_textdomain( 'mu-functions', 'lang' );

Я нашёл больше информации об этом по следующим ссылкам:
https://codex.wordpress.org/Function_Reference/plugins_url
http://thedaneshproject.com/posts/what-does-dirname__file__-and-basenamedirname__file__-do/

Я думаю, мне нужно больше поэкспериментировать, чтобы это понять, если я хочу поместить мой плагин как поддиректорию в папке mu-plugins.

Извините за задержку, Беноти, и спасибо за поддержку!

Ответ или решение

Когда вы работаете с директориями MU-плагинов в WordPress и пытаетесь настроить перевод с помощью файлов локализации, необходимо учитывать, что они загружаются совсем по другому принципу, чем обычные плагины. Давайте рассмотрим вашу ситуацию более подробно и решим, какие шаги необходимо предпринять для успешного перевода вашего MU-плагина «mu-functions.php».

Проблема с переводом MU-плагинов

Вы правильно отметили, что MU-плагины (Must-Use плагины) загружаются до всех остальных в WordPress. Это означает, что стандартные хуки, такие как plugins_loaded, не подходят для загрузки текстового домена MU-плагина. Вместо этого, вам необходимо использовать хук muplugins_loaded.

Корректная загрузка текстового домена

Для корректной загрузки текстового домена, необходимо изменить ваш код следующим образом:

add_action('muplugins_loaded', 'myplugin_muload_textdomain');

function myplugin_muload_textdomain() {
    load_muplugin_textdomain('mu-functions', 'inc/languages');
}

Проблемы с путём к языковым файлам

Обратите внимание на использование функции load_muplugin_textdomain. Она требует корректного пути к файлу локализации. В вашем случае, если папка «languages» находится в папке «inc» в корневой директории MU-плагинов, то путь следует написать так, как указано выше.

Форматирование файлов локализации

Также убедитесь, что ваши файлы локализации названы правильно. В WordPress для MU-плагинов рекомендуется использовать стандартный формат <locale>.mo и <locale>.po, например, pt_PT.mo и pt_PT.po, чтобы убедиться в правильной загрузке вашего перевода.

Рекомендации по устранению проблем

  1. Проверьте хук: Убедитесь, что вы используете muplugins_loaded, а не plugins_loaded.

  2. Проверьте путь: Поддерживайте корректную структуру папок на диске, удостоверившись, что указан правильный путь к языковым файлам.

  3. Проверьте файлы локализации: Убедитесь, что они следуют стандартному соглашению именования.

  4. Тестирование: Попробуйте временно изменить язык системы на ваш целевой язык, чтобы удостовериться, что перевод действительно отображается.

Итог

Успешный перевод MU-плагина требует точной настройки в соответствии с особенностями их загрузки в WordPress. Правильное применение хуков и настройка структуры каталога являются критическими факторами. Внимательно следуйте перечисленным рекомендациям, чтобы оптимизировать работу вашего MU-плагина, и ваш проект будет готов к использованию.

Оцените материал
Добавить комментарий

Капча загружается...