Диагностика проблемы: почему нужен автоперевод через REST API
Многие сайты на WordPress сталкиваются с необходимостью переводить динамический контент, который часто обновляется. Традиционные плагины для мультиязычности заточены под статический перевод страниц и записей, но не всегда могут оперативно обрабатывать пользовательские запросы или автоматизировать перевод новых элементов. Использование REST API позволяет интегрировать автоперевод непосредственно в процесс создания и вывода контента, что упрощает рабочие процессы и снижает нагрузку на администраторов.
Как подготовить WordPress к использованию REST API для автоперевода
1. Проверка доступности REST API
По умолчанию REST API включен в WordPress. Чтобы проверить, работает ли он на вашем сайте, откройте в браузере URL https://ваш-сайт.ru/wp-json/. Вы должны увидеть JSON-ответ с информацией о доступных эндпоинтах.
2. Получение доступа к API стороннего сервиса автоперевода
Для автоперевода понадобится API ключ от сервиса, например Google Translate API или DeepL API. Зарегистрируйтесь в сервисе, получите ключ и ознакомьтесь с документацией по отправке запросов.
Пошаговое решение: интеграция автоперевода через REST API
1. Создание пользовательского эндпоинта в WordPress для автоперевода
Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:
add_action('rest_api_init', function () {
register_rest_route('autotranslate/v1', '/translate', [
'methods' => 'POST',
'callback' => 'wp_autotranslate_callback',
'permission_callback' => '__return_true',
]);
});
function wp_autotranslate_callback(WP_REST_Request $request) {
$text = $request->get_param('text');
$target_lang = $request->get_param('target_lang');
if (empty($text) || empty($target_lang)) {
return new WP_Error('missing_params', 'Параметры text и target_lang обязательны', ['status' => 400]);
}
// Здесь вызов API автоперевода
$translated = wp_call_external_translate_api($text, $target_lang);
if (!$translated) {
return new WP_Error('translate_error', 'Ошибка при переводе', ['status' => 500]);
}
return [
'original' => $text,
'translated' => $translated,
'target_lang' => $target_lang
];
}
function wp_call_external_translate_api($text, $lang) {
$api_key = 'ВАШ_API_КЛЮЧ';
$url = 'https://translation.googleapis.com/language/translate/v2';
$response = wp_remote_post($url, [
'body' => json_encode([
'q' => $text,
'target' => $lang,
'format' => 'text'
]),
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $api_key
],
]);
if (is_wp_error($response)) {
return false;
}
$body = json_decode(wp_remote_retrieve_body($response), true);
if (isset($body['data']['translations'][0]['translatedText'])) {
return $body['data']['translations'][0]['translatedText'];
}
return false;
}2. Вызов автоперевода из фронтенда через AJAX
Пример JavaScript кода, использующего REST API для перевода текста пользователя:
function translateText(text, targetLang) {
return fetch('/wp-json/autotranslate/v1/translate', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
text: text,
target_lang: targetLang
})
})
.then(response => response.json())
.then(data => {
if (data.translated) {
return data.translated;
} else {
throw new Error('Ошибка перевода');
}
});
}
// Использование
translateText('Привет, мир!', 'en').then(console.log).catch(console.error);Проверка результата после внедрения
- Отправьте POST-запрос на эндпоинт
/wp-json/autotranslate/v1/translateс параметрамиtextиtarget_langчерез curl или Postman. - Убедитесь, что в ответе приходит корректный переведённый текст.
- В браузере проверьте, что вызов функции
translateTextкорректно выводит перевод в консоль.
Частые ошибки и как их исправить
- Ошибка 400: отсутствуют параметры — проверьте, что параметры
textиtarget_langпередаются в теле запроса и не пустые. - Ошибка 500: проблема с API перевода — убедитесь, что API ключ верный и не истёк, а также что вы используете правильную авторизацию.
- Неверный формат запроса — REST API ожидает JSON, убедитесь, что заголовок
Content-Typeустановлен вapplication/json. - Проблемы с CORS — при вызове из браузера настройте заголовки сервера или используйте proxy.
Практические советы по безопасности и производительности
- Ограничьте доступ к REST API эндпоинту, если перевод требуется только авторизованным пользователям. Например, замените
permission_callbackна проверку прав. - Кэшируйте результаты перевода в transient или отдельной кастомной таблице, чтобы не делать повторные запросы к внешнему API для одинаковых фраз.
- Обрабатывайте ошибки API аккуратно и не отдавайте внутренние сообщения пользователям.
- Для больших объёмов текста разбивайте запросы на части, чтобы не превысить лимиты API.
Сравнение подходов к автопереводу в WordPress
| Метод | Плюсы | Минусы | Пример |
|---|---|---|---|
| Плагины (WPML, Polylang) | Готовая интеграция, поддержка UI | Могут быть тяжелыми, не всегда подходят для динамического контента | WPML, Polylang |
| REST API + кастомный код | Гибкость, автоматизация, подходит для динамики | Требует программирования, настройка безопасности | Код из статьи |
| Встроенные API автоперевода плагинов | Простота внедрения | Ограниченная функциональность, зависимость от плагина | Poliglot, WPRemark |