Вопрос или проблема
Я изменяю локаль с помощью фильтра локали. Я пробовал различные методы: создание плагина и подключение к фильтру, объявление фильтра локали в файле functions.php, и даже просто определение моей константы WPLANG; в всех случаях переводится только мой .mo файл темы, а не любые плагины.
Мой .mo файл пользовательской темы загружает правильные переводы, но не плагины. Я задаюсь вопросом, почему плагины не отображают соответствующие переводы .mo при изменении локали?
Вот что у меня есть:
<?php
/**
* Название плагина: WM10 Изменение локали
* Описание: Пользовательская функция для изменения локали.
**/
function wm10_change_locale($locale="") {
return "fr_FR";
}
add_filter('locale', 'wm10_change_locale', 10);
?>
Как мне сделать так, чтобы плагины распознавали изменение локали и использовали соответствующий файл перевода .mo? Разве это не должно быть так же просто, как установка константы WPLANG? Я попробовал всё, и не могу заставить плагины выводить переводы .mo на моём заданном языке.
Файлы .mo присутствуют, я даже пробовал добавлять их в директорию /wp-content/languages/plugins/
с соответствующим именем {PLUGIN_NAME}-{LANGUAGE_CODE}.mo
, но всё равно не повезло.
Спасибо @toscho — Проблемный плагин в частности это wp-pagenavi. Строки на бэкенде переводятся, однако; фронтенд остаётся на дефолтной локали en_US. Я нашёл это: https://wordpress.org/support/topic/translation-91
Чтобы быть более конкретным, значения текстовых полей на странице настроек плагина не переводятся, поэтому я предполагаю, что переводы искажены где-то в кодовой базе.
Ответ или решение
Проблема, с которой вы сталкиваетесь, может быть связана с несколькими факторами, которые мешают корректной загрузке языковых файлов плагина после изменения локали. Давайте рассмотрим все возможные причины и решения этой ситуации.
1. Проверка версии плагина
Убедитесь, что используемая версия плагина "wp-pagenavi" поддерживает многоязычность. Некоторые устаревшие плагины могут не корректно обрабатывать загруженные языковые файлы, поэтому важно использовать актуальную версию.
2. Правильное имя файлов языковых файлов
Проверьте, что файлы перевода в директории /wp-content/languages/plugins/
названы правильно:
- Формат файлов должен быть:
{PLUGIN_NAME}-{LANGUAGE_CODE}.mo
и{PLUGIN_NAME}-{LANGUAGE_CODE}.po
. - Например, для плагина "wp-pagenavi", если язык французский, файл должен называться
wp-pagenavi-fr_FR.mo
.
3. Кеширование
Если вы используете какой-либо плагин кеширования, он может мешать отображению актуальных данных. Попробуйте очистить кэш и деактивировать его временно, чтобы проверить, не влияет ли это на загрузку языковых файлов.
4. Правильная настройка локали
Ваш код для изменения локали в плагине выглядит корректно. Однако, стоит убедиться, что фильтр применяется вовремя. Попробуйте выполнить следующее:
add_filter('locale', 'wm10_change_locale', 10);
Хорошей практикой будет вызвать этот фильтр в init
или plugins_loaded
:
add_action('init', 'wm10_change_locale');
function wm10_change_locale() {
return 'fr_FR';
}
5. Убедитесь, что локаль действительно меняется
Для проверки, изменяется ли локаль, вы можете использовать функцию для логирования текущей локали после применения фильтра:
add_action('init', function() {
error_log(get_locale()); // поможет понять, меняется ли локаль
});
6. Выгрузка текстов
Зачастую выполнение load_plugin_textdomain
является обязательным для правильной работы с переводами:
add_action('plugins_loaded', 'wm10_load_textdomain');
function wm10_load_textdomain() {
load_plugin_textdomain('wp-pagenavi', false, dirname(plugin_basename(__FILE__)) . '/languages/');
}
7. Проверка строк перевода
Если некоторые строки не переводятся, возможно, они действительно не зарегистрированы для перевода. Убедитесь, что они обернуты в функции для локализации, такие как __()
или _e()
.
8. Конфликты с другими плагинами и темами
Попробуйте отключить другие плагины и переключиться на стандартную тему. Это поможет выявить возможные конфликты, которые могут мешать загрузке переводов.
Заключение
Изменение локали в WordPress может быть сложным процессом, особенно когда дело касается плагинов, которые не всегда корректно обрабатывают многоязычность. Однако, следуя предложенным шагам и рекомендациям, вы сможете убедиться, что все файлы перевода загружаются правильно, и ваш плагин будет справляться с локальными языковыми настройками. Если, несмотря на все попытки, проблема не решится, рассмотрите возможность обращения в службу поддержки плагина или к сообществу WordPress для получения дополнительной помощи.