Проблема с переводом сообщений WooCommerce в письмах отчёта о заказе
По умолчанию WooCommerce использует языковые файлы для перевода стандартных сообщений в письмах, но если вы добавляете кастомные тексты или используете сторонние расширения, эти сообщения могут остаться на исходном языке. Автоматический перевод таких сообщений часто требуется для мультиязычных магазинов, чтобы улучшить пользовательский опыт и избежать путаницы.
Диагностика проблемы
Чтобы понять, почему сообщения в отчётах о заказах не переводятся, выполните следующие шаги:
- Проверьте, используются ли кастомные тексты в хуках или фильтрах WooCommerce для писем.
- Убедитесь, что для вашего сайта активирован нужный язык WordPress и установлены языковые файлы WooCommerce.
- Посмотрите, не выводятся ли сообщения напрямую в коде без функций локализации (
__(),_e()и т.д.). - Проверьте, не блокирует ли кэширование или оптимизация загрузку обновлённых переводов.
Пошаговое решение: автоматический перевод сообщений в письмах WooCommerce
1. Добавление поддержки перевода кастомных сообщений
Если сообщения добавляются вручную, оберните их в функцию __() с указанием текстового домена WooCommerce:
echo __('Ваш заказ успешно принят', 'woocommerce');2. Использование фильтра woocommerce_email_order_meta_fields для добавления автоперевода
Если вы добавляете собственные поля в письма, используйте фильтр с вызовом функций перевода:
add_filter('woocommerce_email_order_meta_fields', function($fields, $sent_to_admin, $order) {
$fields['custom_message'] = array(
'label' => __('Статус заказа', 'woocommerce'),
'value' => __('Обработка завершена', 'woocommerce'),
);
return $fields;
}, 10, 3);3. Интеграция с автопереводчиками (пример с DeepL API)
Для автоматического перевода динамических сообщений можно подключить API DeepL. Ниже пример функции для перевода текста через DeepL:
function deepl_translate_text($text, $target_lang = 'RU') {
$api_key = 'ваш_api_ключ';
$url = 'https://api-free.deepl.com/v2/translate';
$data = http_build_query(array(
'auth_key' => $api_key,
'text' => $text,
'target_lang' => strtoupper($target_lang)
));
$options = array(
'http' => array(
'method' => 'POST',
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'content' => $data,
'timeout' => 10
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result === FALSE) return $text;
$json = json_decode($result, true);
return $json['translations'][0]['text'] ?? $text;
}Вызовите эту функцию в хуках, где формируются сообщения для писем.
4. Пример интеграции автоперевода в фильтр WooCommerce письма
add_filter('woocommerce_email_subject_customer_processing_order', function($subject, $order) {
$translated = deepl_translate_text($subject, 'RU');
return $translated;
}, 10, 2);Проверка результата после внедрения
- Создайте тестовый заказ в магазине и дождитесь отправки почтового уведомления.
- Проверьте, что все сообщения и кастомные поля в письме отображаются на нужном языке.
- Используйте инструменты разработчика браузера для проверки исходного кода письма.
- При интеграции с API DeepL проверьте логи запросов и ответы сервера для отладки.
Частые ошибки и как их исправить
- Кэширование старых переводов: Очистите кэш сайта и кеш почтовых шаблонов.
- Отсутствие текстового домена: Все пользовательские строки должны быть обёрнуты в функции локализации с правильным доменом 'woocommerce'.
- Неправильная обработка API: Проверяйте ошибки API, ограничение по количеству запросов, таймауты.
- Вывод текста напрямую: Не выводите текст без локализации, чтобы избежать проблем с переводом.
Практические советы по безопасности и производительности
- Храните API ключи для автоперевода в
wp-config.phpили в защищённых настройках, не в открытом коде. - Используйте transient API для кэширования результатов перевода, чтобы снизить количество запросов к API и ускорить генерацию писем.
- Ограничьте длину и количество текстов для перевода, чтобы не превысить квоты и не задерживать отправку писем.
- Проводите тестирование на staging-сервере перед применением на живом сайте.
Сравнение способов перевода сообщений WooCommerce в письмах
| Метод | Преимущества | Недостатки | Пример |
|---|---|---|---|
| Текстовые домены и локализация | Простота, поддержка сообществом | Не работает с кастомными динамическими текстами | __() и _e() |
| Хуки и фильтры WooCommerce | Гибкость, локализация кастомных полей | Нужны знания API WooCommerce | woocommerce_email_order_meta_fields |
| Автоперевод через API (DeepL, Google) | Автоматизация, поддержка любых текстов | Зависимость от внешних сервисов, стоимость | Пример кода с DeepL выше |