Диагностика проблемы с языковыми файлами WooCommerce
Если у вас в магазине WooCommerce на WordPress возникают проблемы с отображением переводов, например, часть текста остается на английском или не обновляется после смены языка, скорее всего, дело в конфликте или неправильной загрузке языковых файлов (.mo/.po). Часто это связано с тем, что WooCommerce загружает переводы из устаревших или дополнительных директорий, а также с кешированием.
Для диагностики выполните следующие шаги:
- Проверьте, какие языковые файлы присутствуют в
wp-content/languages/plugins/иwp-content/plugins/woocommerce/i18n/languages/. - Включите логирование ошибок PHP и посмотрите, нет ли предупреждений, связанных с загрузкой переводов.
- Очистите кеш сайта и браузера.
- Используйте отладчик перевода, например, плагин Say What?, чтобы увидеть, применяется ли нужный текстовый домен и строка.
Пошаговое решение проблемы с языковыми файлами WooCommerce
1. Удаление устаревших языковых файлов
Удалите или переместите все файлы woocommerce-*.mo и woocommerce-*.po из папки wp-content/plugins/woocommerce/i18n/languages/, чтобы WooCommerce использовал только переводы из wp-content/languages/plugins/. Это позволит избежать конфликтов при обновлениях.
2. Принудительная загрузка нужного языка
Добавьте в файл functions.php вашей темы или в отдельный плагин следующий код, чтобы явно указать загрузку нужного перевода WooCommerce:
add_action('init', function() {
load_textdomain('woocommerce', WP_LANG_DIR . '/plugins/woocommerce-' . get_locale() . '.mo');
});Здесь WP_LANG_DIR — константа, указывающая на wp-content/languages, а get_locale() возвращает текущую локаль сайта.
3. Очистка кеша и обновление языков
После внесения изменений обязательно очистите кеш сайта, если используете плагины кеширования (WP Super Cache, W3 Total Cache и т.д.). Также обновите языковые файлы через админку WordPress в раздел Обновления → Языковые файлы.
Как проверить, что проблема решена
- Перейдите на страницу магазина и проверьте, что все элементы WooCommerce отображаются на нужном языке.
- Измените язык сайта (если используется мультиязычность) и убедитесь, что переводы обновляются корректно.
- Используйте плагин String Locator или Say What? для поиска и контроля строк.
Частые ошибки при работе с языковыми файлами WooCommerce
- Дублирование файлов перевода в разных папках. WooCommerce загружает переводы из
wp-content/languages/pluginsи из своей папки плагина, при этом файлы в плагине имеют приоритет. Это приводит к конфликтам. Решение — удалить или переименовать лишние файлы. - Неочищенный кеш сайта и браузера. После обновления переводов старые строки могут сохраняться в кеше.
- Неправильный текстовый домен. Если в кастомном коде используется неправильный домен (например,
'woocommerce'заменен на что-то другое), переводы не выйдут. - Неправильная локаль сайта. Проверьте, что в
Settings → General → Site Languageустановлен нужный язык.
Практические советы по безопасности и производительности
- Не размещайте языковые файлы WooCommerce в корневых папках плагина, чтобы избежать их перезаписи при обновлении.
- Используйте кеширование на уровне сервера или плагина, но обязательно настраивайте исключения для динамического контента WooCommerce.
- Регулярно обновляйте языковые файлы через WordPress, чтобы получать актуальные переводы и исправления.
Сравнение вариантов загрузки языковых файлов WooCommerce
| Метод | Путь файлов | Плюсы | Минусы |
|---|---|---|---|
| Стандартная загрузка WooCommerce | wp-content/plugins/woocommerce/i18n/languages/ | Автоматическое обновление с плагином | Файлы могут быть перезаписаны при обновлениях, конфликты с кастомными переводами |
Загрузка из wp-content/languages/plugins/ | wp-content/languages/plugins/woocommerce-*.mo | Безопасно для кастомизации, не перезаписывается | Не всегда автоматически обновляется |
Принудительная загрузка через load_textdomain | Любая папка, указанная в коде | Полный контроль, можно хранить в кастомных папках | Требует дополнительного контроля и обновлений вручную |
Пример кода для удаления лишних языковых файлов при активации плагина
register_activation_hook(__FILE__, function() {
$lang_path = WP_PLUGIN_DIR . '/woocommerce/i18n/languages/';
$files = glob($lang_path . 'woocommerce-*.mo');
foreach ($files as $file) {
// Удаляем лишние файлы, чтобы избежать конфликтов
unlink($file);
}
});Проверка загрузки перевода в рантайме
add_action('wp_loaded', function() {
$translated = __('Add to cart', 'woocommerce');
error_log('Перевод строки "Add to cart": ' . $translated);
});Если в логе отображается перевод на нужном языке, значит загрузка прошла успешно.