Диагностика задачи: зачем нужен автоперевод через REST API в WordPress
В условиях многоязычных сайтов, автоматический перевод контента становится важным элементом оптимизации рабочих процессов. REST API WordPress позволяет интегрировать внешние сервисы перевода для динамического и точного перевода страниц, записей и произвольных типов записей без ручного копирования текстов.
Основные симптомы необходимости внедрения REST API автоперевода:
- Ручной перевод контента занимает слишком много времени;
- Необходима интеграция с внешними сервисами, например DeepL или Google Translate API;
- Требуется перевод динамического контента (например, пользовательских форм, AJAX-запросов);
- Хотите автоматизировать перевод при публикации новых записей.
Пошаговое решение: настройка автоперевода через REST API WordPress
1. Регистрация кастомного REST API эндпоинта для автоперевода
Создадим собственный endpoint, который будет принимать ID записи, язык перевода и возвращать переведенный текст.
add_action('rest_api_init', function () {
register_rest_route('autotranslate/v1', '/post/(?P<id>\d+)', [
'methods' => 'POST',
'callback' => 'auto_translate_post',
'permission_callback' => function () {
return current_user_can('edit_posts');
}
]);
});
function auto_translate_post($request) {
$post_id = $request['id'];
$target_lang = $request->get_param('lang');
$post = get_post($post_id);
if (!$post) {
return new WP_Error('no_post', 'Запись не найдена', ['status' => 404]);
}
$content = $post->post_content;
// Вызов функции для перевода текста (пример с Google Translate API)
$translated_text = translate_text_google_api($content, $target_lang);
return ['translated_content' => $translated_text];
}2. Пример функции вызова Google Translate API
Реализуем простой вызов Google Translate через CURL. Для реального проекта лучше использовать официальную библиотеку Google.
function translate_text_google_api($text, $target_lang) {
$api_key = 'ВАШ_GOOGLE_API_KEY';
$url = 'https://translation.googleapis.com/language/translate/v2?key=' . $api_key;
$post_fields = [
'q' => $text,
'target' => $target_lang,
'format' => 'text'
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_fields));
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
if (isset($data['data']['translations'][0]['translatedText'])) {
return $data['data']['translations'][0]['translatedText'];
}
return false;
}3. Вызов автоперевода из фронтенда с помощью AJAX
Отправим AJAX-запрос на созданный endpoint для перевода содержимого поста.
jQuery(document).ready(function($) {
$('#translate-button').on('click', function() {
var postId = $(this).data('postid');
var targetLang = $('#language-select').val();
$.ajax({
url: '/wp-json/autotranslate/v1/post/' + postId,
method: 'POST',
data: { lang: targetLang },
success: function(response) {
$('#translated-content').text(response.translated_content);
},
error: function(xhr) {
alert('Ошибка перевода: ' + xhr.responseJSON.message);
}
});
});
});Проверка результата после внедрения
- Убедитесь, что REST API endpoint доступен по адресу
/wp-json/autotranslate/v1/post/{post_id}и возвращает переведенный текст. - Проверьте в консоли браузера успешный ответ AJAX-запроса с переведенным содержимым.
- Создайте тестовую запись с текстом на исходном языке и запросите перевод в другой язык, например с английского на русский.
- При ошибках проверьте логи сервера и корректность API ключа внешнего сервиса перевода.
Частые ошибки и как их исправить
- Ошибка 403 или 401 при вызове REST API: Проверьте
permission_callbackи права пользователя. Для публичного API используйте специальные ключи или nonce. - Пустой или некорректный результат перевода: Проверьте формат запроса к API перевода и корректность API ключа.
- Задержки или таймауты: Ограничьте объем текста для перевода, разбивайте на части, используйте кэширование переведенного контента.
- Проблемы с кодировкой: Убедитесь, что контент передается и принимается в UTF-8.
Практические советы по безопасности и производительности
- Используйте
permission_callbackдля защиты REST API от неавторизованных вызовов. - Кэшируйте результаты перевода, чтобы не обращаться к API при каждом запросе.
- Ограничьте максимальную длину текста для перевода, чтобы избежать превышения лимитов API.
- Логируйте ошибки и время ответа API для мониторинга производительности.
- Обрабатывайте исключения и ошибки API, чтобы не ломать работу сайта.
Сравнение вариантов реализации автоперевода через REST API
| Вариант | Плюсы | Минусы | Рекомендуемые сценарии |
|---|---|---|---|
| Использование Google Translate API напрямую | Простота, быстрота интеграции, поддержка множества языков | Платный сервис, лимиты по количеству символов, необходимость обработки ошибок | Сайты с небольшим объемом контента и бюджетом на API |
| Использование DeepL API | Качественный перевод, поддержка профессиональных языков | Ограниченный список языков, выше стоимость | Сайты с высокими требованиями к качеству перевода |
| Собственная реализация с open source движками | Бесплатно, полный контроль над процессом | Сложность настройки, ограниченное качество перевода | Экспериментальные проекты, внутренние сайты |