Диагностика проблемы с переводом статусов заказов WooCommerce
Статусы заказов WooCommerce — «pending», «processing», «completed» и другие — отображаются в административной панели и на сайте. Часто при мультиязычных сайтах эти статусы остаются на английском, даже если остальной контент переведен. Это вызывает путаницу для пользователей и администраторов.
Основные причины:
- Отсутствие перевода в языковых файлах WooCommerce или темы;
- Статусы зарегистрированы как строки без поддержки локализации;
- Кастомные статусы заказов не переведены;
- Плагины мультиязычности не обрабатывают системные статусы WooCommerce.
Как перевести стандартные статусы заказов WooCommerce с помощью gettext-перехвата
WooCommerce использует функцию __() и _e() для вывода статусов, но иногда их перевод отсутствует в .po/.mo файлах или плагинах. Можно использовать фильтр gettext для замены строк статусов на нужные переводы на лету.
Пример кода для перевода стандартных статусов:
add_filter('gettext', 'wptranslate_woocommerce_order_statuses_translate', 20, 3);
function wptranslate_woocommerce_order_statuses_translate($translated, $text, $domain) {
if ($domain === 'woocommerce') {
switch ($text) {
case 'Pending payment':
$translated = 'Ожидает оплаты';
break;
case 'Processing':
$translated = 'В обработке';
break;
case 'Completed':
$translated = 'Завершён';
break;
case 'Cancelled':
$translated = 'Отменён';
break;
case 'Refunded':
$translated = 'Возвращён';
break;
case 'Failed':
$translated = 'Неудача';
break;
}
}
return $translated;
}Где добавить этот код
Лучше всего в файл functions.php дочерней темы или в собственный плагин, чтобы при обновлении WooCommerce изменения не сбивались.
Перевод кастомных статусов заказов WooCommerce
Если у вас есть кастомные статусы, зарегистрированные через register_post_status(), их нужно отдельно локализовать. Для этого используйте функцию register_post_status() с параметром label, переведённым через __() и загрузите переводы в .po/.mo файлах вашей темы или плагина.
register_post_status('wc-custom-status', array(
'label' => __('Custom Status', 'your-textdomain'),
'public' => true,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop('Custom Status <span class="count">(%s)</span>', 'Custom Status <span class="count">(%s)</span>', 'your-textdomain'),
));Обязательно создайте переводы для your-textdomain.
Проверка результата после внедрения
1. Создайте новый заказ и измените его статус в административной панели, проверьте, что статусы отображаются на русском.
2. Откройте страницу с историей заказов пользователя и убедитесь, что там тоже отображаются переводы статусов.
3. Используйте инструмент просмотра исходного кода и убедитесь, что строки переведены именно функцией gettext, а не жёстко в шаблонах.
Частые ошибки и способы исправления
- Переводы не применяются: Проверьте, что хук
gettextдобавлен с достаточным приоритетом (рекомендуется 20 или выше), чтобы перехватить строку после WooCommerce. - Статусы кастомных заказов не переводятся: Убедитесь, что вы используете локализацию с правильным текстовым доменом и что .mo файл загружен.
- Перевод затирается при обновлении: Не вносите изменения в файлы плагинов WooCommerce напрямую, используйте дочернюю тему или собственный плагин.
- Некорректные переводы в e-mail уведомлениях: Проверьте, что переводы доступны в контексте локализации e-mail шаблонов WooCommerce.
Практические советы по безопасности и производительности
- Используйте фильтр
gettextаккуратно, чтобы не замедлять загрузку страниц. Ограничьте обработку только нужным текстовым доменом. - Для крупных проектов лучше создавать полноценные языковые файлы .po/.mo и подключать их, вместо перехвата в коде.
- Резервное копирование
functions.phpперед внесением изменений поможет быстро восстановить сайт в случае ошибок.
Сравнение способов перевода статусов WooCommerce
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
Фильтр gettext | Быстро, не требует создания файлов перевода | Может влиять на производительность, не масштабируется | Маленькие сайты, быстрые исправления |
| Языковые файлы (.po/.mo) | Чистое решение, масштабируемое, поддерживается WP | Требует знания работы с переводчиками (Poedit и т.п.) | Крупные проекты, многократные переводы |
| Локализация кастомных статусов | Корректно работает с кастомным функционалом | Нужно создавать переводы и правильно регистрировать статусы | Плагины и кастомные темы |