Автоматизация перевода различных сообщений WordPress — важная задача для разработчиков многоязычных сайтов. В этой статье мы подробно разберём, как можно использовать хуки и плагины для автоматического перевода уведомлений, ошибок и системных сообщений в WordPress. Это позволит сделать сайт более удобным для пользователей без необходимости ручного перевода каждого текста.
Что такое автоматизация перевода сообщений в WordPress
В WordPress много сообщений, которые выводятся системой: ошибки, уведомления, подтверждения и прочее. Обычно их перевод осуществляется через .po/.mo-файлы или плагины, например, Polylang или WPML. Но иногда нужно перевести динамические или нестандартные сообщения, которые не попадают в стандартные файлы локализации. Здесь на помощь приходят хуки — фильтры и действия, которые позволяют перехватывать и изменять текст в рантайме.
Автоматизация переводов с помощью хуков помогает:
- Обрабатывать нестандартные сообщения, созданные плагинами или темами.
- Автоматически заменять текст без правки исходного кода.
- Интегрировать сторонние сервисы машинного перевода для динамического перевода.
Использование фильтра gettext для перевода сообщений
Один из самых мощных хуков для перевода — gettext. Он вызывается для каждого переведённого текста. Вы можете создать функцию, которая будет перехватывать нужные строки и заменять их на перевод.
Пример функции, которая изменяет стандартное сообщение об ошибке:
function wptranslate_gettext_translation($translated, $text, $domain) {
if ($text === 'Invalid username.') {
return 'Неверное имя пользователя.'; // Ваш перевод
}
return $translated;
}
add_filter('gettext', 'wptranslate_gettext_translation', 20, 3);
В этом примере мы проверяем исходный текст и заменяем его на русский вариант. Такой подход можно масштабировать, добавив массив соответствий и даже интеграцию с API перевода.
Массовая замена сообщений через массив
Для удобства можно создать массив с ключами — оригинальными строками, и значениями — переводами. Например:
function wptranslate_mass_gettext($translated, $text, $domain) {
$translations = [
'Invalid username.' => 'Неверное имя пользователя.',
'Password is incorrect.' => 'Неправильный пароль.',
'Username is required.' => 'Требуется имя пользователя.',
];
if (isset($translations[$text])) {
return $translations[$text];
}
return $translated;
}
add_filter('gettext', 'wptranslate_mass_gettext', 20, 3);
Такой метод особенно полезен, если вы хотите быстро адаптировать отдельные сообщения без создания полноценного файла локализации.
Автоматический перевод с использованием API машинного перевода
Если нужно перевести произвольные сообщения, можно подключить API Google Translate, Yandex Translate или другого сервиса. Например, с помощью хуков WordPress можно динамически переводить строки.
Пример упрощённой интеграции с Google Translate (нужно добавить ваши ключи и обработку ошибок):
function wptranslate_auto_translate($translated, $text, $domain) {
// Проверяем, нужно ли переводить
if ($domain !== 'default') return $translated;
// Кэшируем переводы, чтобы не делать слишком много запросов
static $cache = [];
if (isset($cache[$text])) return $cache[$text];
// Отправляем запрос к API (пример, не рабочий без ключа и доп. настроек)
$apiKey = 'ВАШ_API_КЛЮЧ';
$url = 'https://translation.googleapis.com/language/translate/v2?key=' . $apiKey;
$args = [
'body' => json_encode([
'q' => $text,
'target' => 'ru',
'format' => 'text'
]),
'headers' => ['Content-Type' => 'application/json'],
'method' => 'POST',
'timeout' => 5
];
$response = wp_remote_post($url, $args);
if (is_wp_error($response)) {
return $translated;
}
$body = json_decode(wp_remote_retrieve_body($response), true);
if (!empty($body['data']['translations'][0]['translatedText'])) {
$cache[$text] = $body['data']['translations'][0]['translatedText'];
return $cache[$text];
}
return $translated;
}
add_filter('gettext', 'wptranslate_auto_translate', 10, 3);
Этот метод требует настройки и учёта ограничений API, но позволяет сделать перевод максимально гибким и автоматическим.
Плагины для автоматизации перевода сообщений WordPress
Если не хочется писать код, можно использовать готовые плагины для автоматизации перевода системных сообщений:
- TranslatePress — поддерживает автоматический машинный перевод с возможностью правки вручную.
- Weglot — облачный сервис с интеграцией через плагин, умеет переводить динамический контент.
- Automatic Translate Addon for WPML — расширение для WPML, которое добавляет автоматический перевод.
Эти решения позволяют быстро запускать мультиязычность без глубокого погружения в код, но обычно платные и требуют подключения внешних сервисов.
Практические советы по автоматизации перевода сообщений
Для успешной автоматизации перевода сообщений WordPress рекомендуется:
- Определить приоритеты — какие сообщения критичны для перевода, а какие можно оставить на оригинальном языке.
- Использовать кеширование — чтобы уменьшить количество запросов к API и ускорить работу сайта.
- Проверять качество перевода — машинный перевод часто требует доработки, поэтому лучше предусмотреть возможность ручного редактирования.
- Использовать фильтр
gettextс умом — не стоит перехватывать слишком много текста, это может замедлить сайт. - Интегрировать с плагинами — например, можно использовать Clearfy Pro для оптимизации и WPGPT для помощи с генерацией переводов.
Пример объединения хуков с WPRemark для отзывов
Если на сайте используется плагин WPRemark для отзывов, можно автоматически переводить сообщения об ошибках при добавлении отзывов:
function wptranslate_wpremark_translate_errors($translated, $text, $domain) {
if ($domain === 'wpremark') {
$errors = [
'Please enter your name.' => 'Пожалуйста, введите ваше имя.',
'Please enter your comment.' => 'Пожалуйста, введите комментарий.',
];
if (isset($errors[$text])) {
return $errors[$text];
}
}
return $translated;
}
add_filter('gettext', 'wptranslate_wpremark_translate_errors', 20, 3);
Этот подход помогает быстро адаптировать пользовательский интерфейс под разные языки без правки плагина.