Автоматический перевод содержимого сообщений WooCommerce с помощью хуков

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

WooCommerce отправляет пользователям и администраторам множество уведомлений — о новых заказах, изменениях статусов, ошибках оплаты и т.д. Эти сообщения часто содержат фиксированный текст, который не всегда корректно переводится при использовании стандартных инструментов мультиязычности. Особенно это заметно, если применяются кастомные статусы заказов или добавлены свои уведомления.

Типичные признаки проблемы:

  • Сообщения WooCommerce приходят только на одном языке, несмотря на мультиязычность сайта.
  • Автоматический перевод через плагины не затрагивает системные уведомления.
  • Невозможно быстро заменить или дополнить тексты уведомлений для разных языков без глубоких правок.

Почему стандартные методы не всегда работают

WooCommerce использует функцию wc_get_email_classes() для загрузки классов уведомлений, а сами тексты сообщений хранятся внутри этих классов. Перевод осуществляется через gettext-подобные функции (__(), _e()), но если задействовать сторонние автопереводчики или кастомные решения, они часто не охватывают эти тексты напрямую.

Кроме того, сообщения могут формироваться динамически, например, включать названия товаров, статусов или пользовательские поля, которые должны быть переведены отдельно.

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

1. Перехват текста сообщения через хук woocommerce_email_heading

Этот хук позволяет изменить заголовок письма. Для автоматического перевода можно использовать сторонний API, например, DeepL или Google Translate (через официальные SDK или REST API).

add_filter('woocommerce_email_heading', 'auto_translate_wc_email_heading', 10, 2);
function auto_translate_wc_email_heading($heading, $email) {
    $target_lang = determine_user_language($email->object); // ваша функция определения языка
    return auto_translate_text($heading, $target_lang);
}

2. Перевод тела письма через woocommerce_mail_content

Этот фильтр позволяет вмешаться в полный HTML-содержимое письма перед отправкой.

add_filter('woocommerce_mail_content', 'auto_translate_wc_email_content', 10, 2);
function auto_translate_wc_email_content($content, $email) {
    $target_lang = determine_user_language($email->object);
    return auto_translate_text($content, $target_lang);
}

3. Пример функции автоперевода на базе Google Translate API

function auto_translate_text($text, $target_lang) {
    $api_key = 'ВАШ_GOOGLE_API_KEY';
    $url = 'https://translation.googleapis.com/language/translate/v2?key=' . $api_key;
    $data = [
        'q' => $text,
        'target' => $target_lang,
        'format' => 'html'
    ];
    $response = wp_remote_post($url, [
        'body' => json_encode($data),
        'headers' => ['Content-Type' => 'application/json']
    ]);
    if (is_wp_error($response)) {
        return $text; // В случае ошибки возвращаем оригинал
    }
    $body = json_decode(wp_remote_retrieve_body($response), true);
    return $body['data']['translations'][0]['translatedText'] ?? $text;
}

4. Определение языка пользователя

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

function determine_user_language($order) {
    if (!$order) return 'en';
    $lang = get_post_meta($order->get_id(), '_user_language', true);
    return $lang ? $lang : 'en';
}

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

Чтобы убедиться, что перевод работает:

  • Создайте тестовый заказ с языком пользователя, отличным от основного.
  • Вызовите отправку уведомления вручную в WooCommerce или измените статус заказа для триггера письма.
  • Проверьте письмо — заголовок и тело должны быть переведены на нужный язык.
  • При ошибках смотрите логи сервера и WP_DEBUG для отладки вызова API.

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

  • API переводчика не отвечает или возвращает ошибку. Проверьте ключ API, лимиты запросов, подключение к интернету.
  • Письма приходят на исходном языке. Убедитесь, что функция определения языка возвращает корректное значение, и фильтры применяются к правильным хукам.
  • HTML-содержимое письма ломается после перевода. Используйте параметр format => html в API-запросе и тестируйте на небольших фрагментах.
  • Высокая задержка при отправке писем. Перевод через API — затратная операция. Рассмотрите асинхронную обработку через очереди или кэширование результатов.

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

  • Храните API-ключи в wp-config.php или в настройках плагина с правильным доступом.
  • Кэшируйте переводы в базе данных, чтобы не делать запросы к API повторно при одинаковом тексте.
  • Используйте транзиенты или метаполя заказа для хранения переведённых текстов.
  • Ограничьте длину текста для перевода, разбивая длинные письма на части.

Сравнение подходов для перевода сообщений WooCommerce

ПодходПлюсыМинусыРекомендуется для
Статический перевод через .po/.moПростота, нативная поддержка WordPressНе переводит динамические данные, сложность с кастомамиСтандартные уведомления, малые сайты
Плагины мультиязычности (WPML, Polylang)Интеграция с интерфейсом, удобствоНе всегда переводят кастомные сообщения, платныеСайты с фиксированной мультиязычностью
Автоперевод через хуки + APIГибкость, перевод любых текстов, динамичностьЗадержки, расходы на API, требуется кодингКастомные проекты, масштабируемость
Как автоматически перевести атрибуты товаров WooCommerce в WordPress
29.04.2026
Как правильно перевести статусы заказов WooCommerce без потери качества
16.06.2026
Как использовать WPML для одновременного перевода страниц в WordPress
30.12.2025
Как настроить автоперевод контента WordPress с использованием GPT-4
17.12.2025
Как автоматически переводить контент WordPress с помощью API DeepL
25.03.2026