Как правильно перевести статусы заказов WooCommerce в WordPress

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

Стандартные статусы заказов WooCommerce (например, pending, processing, completed) часто остаются на английском языке после установки мультиязычности или автоперевода. Это связано с тем, что WooCommerce выводит их через gettext функцию, но переводы могут отсутствовать или не поддерживаются выбранным плагином перевода. В итоге клиенты видят непереведённые статусы в личном кабинете и в уведомлениях.

Основные признаки проблемы:

  • Статусы заказов в админке и на фронте не меняются при смене языка.
  • Переводы отсутствуют в письмах с уведомлениями.
  • Попытки добавить переводы через .po/.mo или плагин перевода не дают результата.

Как перевести статусы заказов WooCommerce: пошаговое решение

1. Проверка текущих переводов WooCommerce

Убедитесь, что у вас установлены актуальные языковые файлы WooCommerce для нужных языков. Они хранятся в wp-content/languages/plugins/woocommerce-<язык>.mo. При отсутствии — скачайте с официального репозитория.

2. Добавление пользовательских переводов через фильтр gettext

Если стандартные переводы не работают, можно добавить свой хук для корректного перевода статусов:

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

Этот способ подходит для точечного перевода статусов без изменения исходных языковых файлов.

3. Перевод статусов в уведомлениях и шаблонах

Для корректного перевода статусов в шаблонах писем и кастомных функциях используйте функцию wc_get_order_status_name(), которая учитывает локализацию:

$status_name = wc_get_order_status_name($order->get_status());

Если перевод не отображается, замените прямое обращение к статусу на эту функцию.

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

  • Перейдите в личный кабинет пользователя, выберите язык и проверьте, что статусы заказов отображаются на нужном языке.
  • Создайте тестовый заказ и посмотрите, чтобы статус письма с уведомлением был переведён.
  • В админке WooCommerce переключите язык интерфейса и убедитесь, что статусы сменились.

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

  • Использование устаревших .mo файлов. Обновите языковые файлы WooCommerce через админку или вручную.
  • Плагины перевода конфликтуют с кастомными фильтрами. Отключите другие плагины перевода, чтобы проверить конфликт.
  • Переводы добавлены в неправильный текстовый домен. Проверьте, что $domain === 'woocommerce' в фильтре.
  • Статусы переводятся не через gettext, а жестко прописаны в шаблонах. Используйте wc_get_order_status_name() для вывода статусов.

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

  • Добавляйте кастомные переводы через фильтр gettext только для точечных задач, чтобы не перегружать систему избыточными проверками.
  • Храните кастомный код в отдельном плагине или в functions.php дочерней темы, чтобы не потерять при обновлении.
  • Проверяйте языковые файлы на актуальность после обновления WooCommerce.

Сравнительная таблица способов перевода статусов WooCommerce

МетодПлюсыМинусыКогда использовать
Обновление .mo файловНативный способ, поддерживается WooCommerceЗависит от наличия и актуальности файловДля стандартных языков с поддержкой
Фильтр gettextГибкий, не требует правок исходниковНужно поддерживать вручную при добавлении новых статусовКогда нет официальных переводов или нужны кастомные
Использование wc_get_order_status_name() в шаблонахАвтоматический перевод через ядро WooCommerceТребует правок шаблоновПри кастомизации писем и фронтенда
Как использовать хук doretranslate для дополнительного перевода в WordPress
12.02.2026
Как автоматизировать перевод динамического контента WordPress с помощью хуков и AJAX
17.04.2026
Как создать автоперевод шорткодов в WordPress
07.04.2026
Как добавить автоперевод форм в WordPress
16.01.2026
Как правильно перевести статусы заказов WooCommerce в WordPress
27.05.2026