Поддержка Проблемы и решения Не работает __() при возврате ответа через AJAX

  • Доброго времени суток!

    Ребята, может кто знает почему при при возврате ответа из AJAX не работают функции перевода?
    Ответ в AJAX обработчике формируется так:

    echo wp_json_encode(array('result'=>'success', 'text' => __('Item successfully deleted', $this->plugin_name)));
    где соответственно $this->plugin_name — имя плагина.

    остается основной язык, хоть тресни.

    Заранее признателен за любые подсказки ))

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Модератор Юрий

    (@yube)

    где соответственно $this->plugin_name — имя плагина.

    Второй параметр функции __() — Text domain, а он может не совпадать с именем плагина.
    https://developer.wordpress.org/reference/functions/__/

    Юрий, спасибо. ))

    Но это я проверил в первую очередь — все ок.

    Даже если в качестве текста вставить что-нибудь стандартное, что WP должен перевести без указания плагина, тоже возвращает исходный текст, например:

    echo wp_json_encode(array('result'=>'success', 'text' => __('Update')));

    Хотя если в конструкторе класса пишу
    var_dump( __('Update') );
    То выводит нормально — «Обновить»

    В общем решение пока не нашел (

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    1. Какой язык указан в настройках сайта, а какой — в профиле пользователя?
    2. Используются ли мультиязычные плагины? Они могут влиять на проблему.

    Сергей, огромное спасибо!

    Да, действительно, AJAX отправляется через профиль авторизованного пользователя и у именно у этого пользователя в locale установлен английский. Смена на ru_RU решило проблему. Еще раз спасибо! )

    Сергей, если можно то еще один вопрос по теме:

    Как можно на лету сменить локаль всего сайта, так чтобы ВП и плагины подтянули нужные pot файлы?

    Пробовал использовать switch_to_locale, но во-первых эта функция по идее должна работать только для авторизованных пользователей и то если у него установлена локаль в мета данных. Но даже для авторизованных пользователей мне это не удалось реализовать. Вызов switch_to_locale делал в функции на add_action( ‘init’, ‘run_plugin’ ). Может есть решение как програмно изменить локаль всего сайта на лету для любого пользователя, даже если он не авторизован?

    Заранее спасибо! ))

    Решено с переводом.

    Установку локали надо было повесить на хук plugins_loaded, а в исполняемой функции локаль установить через фильтр locale.

    Всем спасибо за помощь! ))

Просмотр 5 ответов — с 1 по 5 (всего 5)