Автоматический перевод сообщений о статусах заказов WooCommerce в WordPress

Диагностика проблемы с переводом статусов заказов WooCommerce

Часто при использовании мультиязычных сайтов на WordPress с WooCommerce возникает проблема: статусы заказов (например, "В обработке", "Завершён", "Отменён") не переводятся автоматически или переводятся некорректно. Это приводит к тому, что пользователь видит статусы на языке по умолчанию, что снижает удобство и доверие к магазину.

Проверить проблему можно так:

  • Создать заказ в WooCommerce на языке по умолчанию;
  • Переключить сайт на второй язык;
  • Открыть страницу заказа в личном кабинете или в уведомлениях по почте;
  • Если статус отображается на исходном языке, значит перевод не работает.

Почему WooCommerce не переводит статусы заказов автоматически

Причина в том, что WooCommerce использует свои внутренние строки для статусов заказов, которые не всегда корректно интегрируются с плагинами мультиязычности. Кроме того, статусы — это пользовательские таксономии или метаполя, требующие отдельной обработки для перевода.

Пошаговое решение: автоматический перевод статусов заказов WooCommerce

1. Использование фильтра для локализации статусов

Добавим в functions.php или в кастомный плагин следующий код, который позволит перевести стандартные статусы заказов WooCommerce с помощью gettext-фильтра WordPress:

add_filter('gettext', 'wptranslate_translate_order_statuses', 20, 3); function wptranslate_translate_order_statuses($translated, $text, $domain) { if ($domain === 'woocommerce') { $translations = array( 'Pending payment' => 'Ожидает оплаты', 'Processing' => 'В обработке', 'Completed' => 'Завершён', 'Cancelled' => 'Отменён', 'On hold' => 'На удержании', 'Refunded' => 'Возвращён', 'Failed' => 'Ошибка' ); if (isset($translations[$text])) { return $translations[$text]; } } return $translated; }

Этот код перехватывает стандартные статусы и заменяет их на нужные переводы. Для мультиязычности можно расширить логику, проверяя текущий язык сайта.

2. Перевод через WPML или Polylang

Если вы используете WPML или Polylang, убедитесь, что в настройках плагина включен перевод пользовательских таксономий и статусов WooCommerce. Для WPML это настройка "Переводить пользовательские типы записей и таксономии". Для Polylang — аналогичные параметры.

Также можно зарегистрировать статусы для перевода, добавив в functions.php:

function wptranslate_register_order_statuses_for_translation() { $statuses = wc_get_order_statuses(); foreach ($statuses as $slug => $label) { pll_register_string('WooCommerce order status: ' . $slug, $label, 'WooCommerce'); } } add_action('init', 'wptranslate_register_order_statuses_for_translation');

После этого переведите строки через интерфейс Polylang.

3. Автоматический перевод через API (DeepL, Google Translate)

Для автоматизации перевода при новых статусах можно использовать API автоперевода. Пример на основе Google Translate API:

function wptranslate_autotranslate_status_label($label, $target_lang) { $api_key = 'ВАШ_GOOGLE_API_КЛЮЧ'; $url = 'https://translation.googleapis.com/language/translate/v2?key=' . $api_key; $response = wp_remote_post($url, array( 'body' => json_encode(array( 'q' => $label, 'target' => $target_lang )), 'headers' => array('Content-Type' => 'application/json') )); if (is_wp_error($response)) { return $label; } $body = json_decode(wp_remote_retrieve_body($response), true); if (isset($body['data']['translations'][0]['translatedText'])) { return $body['data']['translations'][0]['translatedText']; } return $label; }

Этот код можно использовать внутри фильтра gettext или при регистрации статусов для динамического перевода.

Проверка результата после внедрения

  • Создайте тестовый заказ и перейдите на страницу с его статусом на разных языках;
  • Проверьте, что статусы отображаются на нужном языке;
  • Отправьте письмо с уведомлением о смене статуса и убедитесь, что там тоже корректный перевод;
  • Проверьте консоль браузера на предмет ошибок JavaScript или PHP-логов на ошибки.

Частые ошибки и способы их исправления

  • Статусы не переводятся вообще — проверьте, подключен ли фильтр gettext и корректно ли указан домен 'woocommerce'.
  • Неправильный язык перевода — убедитесь, что функция получает правильный текущий язык сайта (get_locale() или pll_current_language() для Polylang).
  • Автоперевод не работает — проверьте правильность API-ключа, формат запроса и лимиты API.
  • Статусы кастомных плагинов не переводятся — добавьте их в список переводимых строк или вручную реализуйте фильтры.

Практические советы по безопасности и производительности

  • Не храните ключи API в открытом виде в коде — используйте константы в wp-config.php или переменные окружения.
  • Кэшируйте результаты автоперевода, чтобы не делать повторные запросы к API на одно и то же значение.
  • Используйте локализацию WordPress для статусов, чтобы приоритет был у перевода из файлов .mo, а не только у автоперевода.
  • Тестируйте изменения на тестовом сервере до внедрения в продакшн.

Сравнение вариантов перевода статусов заказов WooCommerce

МетодПлюсыМинусыПример кода
Фильтр gettextПростая реализация, работает сразуТолько статичные переводы, сложно масштабироватьadd_filter('gettext', ...)
Регистрация строк для Polylang/WPMLИнтеграция с интерфейсом перевода, удобно для администраторовТребует ручного перевода, не автоматизированоpll_register_string(...)
Автоматический перевод через APIАвтоматизация, поддержка множества языковЗависимость от внешних сервисов, возможные задержки и расходыВызов Google Translate API
Как сделать автоперевод контента в WordPress без плагинов
23.02.2026
Как правильно перевести статусы заказов WooCommerce в WordPress
13.06.2026
Как сделать автоперевод контента WordPress на основе open source решений
23.01.2026
Как создать многоязычный сайт на WordPress с помощью Polylang
09.11.2025
Как добавить поддержку мультиязычности в собственном плагине WordPress
23.12.2025