Почему Polylang подставляет некорректный перевод?

Ссылка скопирована
1 ответ

Мультиязычный сайт.
Polylang подставляет перевод не языка который выбран а тот который в приоритете т.е. отмечен звёздочкой.
Реализация блока через шорткод [woocommerce_cart]
За чекаут отвечает Checkout Field Editor and Manager for WooCommerce
К Polylang+Locotranslate.

Почему Polylang подставляет некорректный перевод?

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Ирина WP Ответ

Polylang обычно подставляет язык по текущему URL, текущей записи и языковому контексту. Если в блоке WooCommerce или checkout выводится язык со звёздочкой, чаще всего проблема не в самой звёздочке, а в том, что нужная строка не зарегистрирована как строка Polylang, кэшируется не в том языке или перевод берётся из другого слоя: Loco Translate, плагин полей checkout, WooCommerce templates.

Что проверить по порядку:

  1. Страница корзины/checkout существует для каждого языка и связана переводами Polylang.
  2. В настройках WooCommerce выбраны корректные страницы корзины и оформления заказа.
  3. Шорткод [woocommerce_cart] или [woocommerce_checkout] стоит на переведённой странице, а не на одной общей странице для всех языков.
  4. Поля из Checkout Field Editor имеют отдельные переводы или регистрируются через string translations.
  5. Очищен кэш сайта, object cache и кэш фрагментов WooCommerce.

Если текст задаётся плагином как опция, его часто нужно зарегистрировать в Polylang:

add_action('init', function () {
    if (function_exists('pll_register_string')) {
        pll_register_string('checkout_placeholder_phone', 'Phone', 'Checkout fields');
        pll_register_string('checkout_placeholder_name', 'Name', 'Checkout fields');
    }
});

add_action('init', function () { if (function_exists('pll_register_string')) { pll_register_string('checkout_placeholder_phone', 'Phone', 'Checkout fields'); pll_register_string('checkout_placeholder_name', 'Name', 'Checkout fields'); } });

А в месте вывода получать перевод так:

$placeholder = function_exists('pll__') ? pll__('Phone') : 'Phone';

$placeholder = function_exists('pll__') ? pll__('Phone') : 'Phone';

Если текст идёт из gettext-перевода WooCommerce или стороннего плагина, Loco Translate должен иметь перевод именно для нужного text domain. Частая ошибка — перевести одинаковую английскую строку не в том домене, из-за чего на фронте продолжает использоваться дефолт.

Отдельно проверьте AJAX-фрагменты WooCommerce. Некоторые элементы корзины обновляются AJAX-запросом, и если запрос уходит без языкового параметра, сервер может вернуть дефолтный язык. Для Polylang важно, чтобы URL, cookie и AJAX-запросы сохраняли текущий язык.

Без доступа к конкретной странице уверенность жёлтая: причин несколько. Но начинать нужно не с правки переводов вслепую, а с проверки языковых копий страниц WooCommerce и источника конкретной строки.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно