Вопрос или проблема
Я успешно перевёл дочернюю тему, но не добился такого же результата в папке 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
, чтобы убедиться в правильной загрузке вашего перевода.
Рекомендации по устранению проблем
-
Проверьте хук: Убедитесь, что вы используете
muplugins_loaded
, а неplugins_loaded
. -
Проверьте путь: Поддерживайте корректную структуру папок на диске, удостоверившись, что указан правильный путь к языковым файлам.
-
Проверьте файлы локализации: Убедитесь, что они следуют стандартному соглашению именования.
-
Тестирование: Попробуйте временно изменить язык системы на ваш целевой язык, чтобы удостовериться, что перевод действительно отображается.
Итог
Успешный перевод MU-плагина требует точной настройки в соответствии с особенностями их загрузки в WordPress. Правильное применение хуков и настройка структуры каталога являются критическими факторами. Внимательно следуйте перечисленным рекомендациям, чтобы оптимизировать работу вашего MU-плагина, и ваш проект будет готов к использованию.