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

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

Часто при создании мультиязычного WooCommerce-магазина перевод статусов заказов и системных сообщений не происходит автоматически. Это связано с тем, что WooCommerce использует собственные константы и gettext-функции для вывода текста, который не всегда корректно локализуется при стандартных настройках.

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

  • Статусы заказов (например, "processing", "completed") отображаются только на основном языке.
  • Системные сообщения WooCommerce (уведомления, ошибки) не переведены или выводятся на языке по умолчанию.
  • Плагины мультиязычности не переводят кастомные статусы и сообщения.

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

WooCommerce использует перевод через __() и _e() с доменом 'woocommerce'. Статусы заказов зарегистрированы в коде как slug и отображаются через функции, которые не всегда вызывают стандартные gettext-функции вне контекста перевода. Также WooCommerce хранит некоторые сообщения в массиве или в базе в виде строк, которые не всегда проходят через перевод.

Вторая причина — кеширование перевода и отсутствие актуальных файлов .mo для нужного языка.

Пошаговое решение: как перевести статусы и сообщения WooCommerce

1. Убедитесь, что у вас установлены корректные языковые файлы WooCommerce

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

2. Перевод кастомных статусов заказов

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

function register_custom_order_status() {
    register_post_status( 'wc-awaiting-payment', array(
        'label'                     => _x( 'Awaiting Payment', 'Order status', 'woocommerce' ),
        'public'                    => true,
        'exclude_from_search'       => false,
        'show_in_admin_all_list'    => true,
        'show_in_admin_status_list' => true,
        'label_count'               => _n_noop( 'Awaiting Payment (%s)', 'Awaiting Payment (%s)', 'woocommerce' )
    ) );
}
add_action( 'init', 'register_custom_order_status' );

Обратите внимание на использование _x() и _n_noop() с доменом 'woocommerce'.

3. Перевод системных сообщений WooCommerce через фильтр

Для перевода сообщений, которые не подхватываются автоматически, используйте фильтр gettext. Например, чтобы перевести текст "Your order has been received.":

add_filter( 'gettext', function ( $translated_text, $text, $domain ) {
    if ( 'woocommerce' === $domain ) {
        if ( 'Your order has been received.' === $text ) {
            $translated_text = __( 'Ваш заказ получен.', 'woocommerce' );
        }
    }
    return $translated_text;
}, 20, 3 );

Так можно добавить переводы для любых строк, которые не переводятся стандартно.

4. Использование плагина для поддержки мультиязычности WooCommerce

Если вы используете WPML или Polylang, убедитесь, что включена поддержка перевода WooCommerce. В WPML, например, активируйте модуль WooCommerce Multilingual. Это позволит автоматически синхронизировать статусы и сообщения.

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

  • Создайте новый заказ и проверьте, что статус отображается на нужном языке.
  • Проверьте системные сообщения в процессе оформления заказа и на странице «Мои заказы».
  • Если используете кастомные статусы, убедитесь, что они отображаются и переводятся в админке и на фронтенде.

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

Частые ошибки и как их исправить

  • Отсутствие языковых файлов WooCommerce: Проверьте наличие актуальных .mo и .po файлов. Исправление — обновить переводы через админку WordPress или вручную.
  • Неправильный домен перевода: Всегда используйте домен 'woocommerce' для перевода стандартных строк WooCommerce. Кастомные строки должны иметь свой домен, либо тоже 'woocommerce', если они относятся к плагину.
  • Статусы не зарегистрированы с переводом: При добавлении кастомных статусов используйте _x() и _n_noop() с доменом 'woocommerce'.
  • Кеш переводов: Очистите кеш сайта и браузера после внесения изменений.

Практические советы по оптимизации и безопасности

  • Не добавляйте слишком много фильтров gettext без необходимости — они влияют на производительность.
  • Используйте готовые языковые файлы и официальные плагины мультиязычности для корректного и быстрого перевода.
  • Для WooCommerce важно регулярно обновлять переводы и плагин, чтобы не потерять совместимость.
  • Если работаете с пользовательскими статусами, придерживайтесь стандартов WordPress и WooCommerce для регистрации и локализации.

Сравнение способов перевода статусов и сообщений WooCommerce

МетодПреимуществаНедостатки
Использование языковых файлов (.po/.mo)Официальный и быстрый способ, поддержка всеми плагинамиНе всегда покрывает кастомные строки и статусы
Фильтр gettextГибкость для любых строк, быстрое исправлениеНагрузка на производительность при большом количестве замен
Плагины мультиязычности (WPML, Polylang)Автоматизация, синхронизация переводов, поддержка WooCommerceМожет требовать платных модулей, настройка
Регистрация кастомных статусов с переводомПолный контроль, интеграция с WooCommerceТребует знаний PHP и WordPress API
Автоматический перевод метаданных WooCommerce без потери качества
11.07.2026
Как автоматически перевести атрибуты товаров WooCommerce в WordPress
29.04.2026
Оптимизация автоперевода описаний товаров WooCommerce в WordPress
14.05.2026
Как прописать автоперевод в WordPress через хуки и функции
20.12.2025
Как создать функционал для автоперевода метаданных в WordPress
03.04.2026