Сlocale изменён, но плагин по-прежнему отображает язык по умолчанию.

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

Я изменяю локаль с помощью фильтра локали. Я пробовал различные методы: создание плагина и подключение к фильтру, объявление фильтра локали в файле 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 для получения дополнительной помощи.

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

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