Почему стоит использовать DeepL для автоперевода в WordPress
DeepL — один из самых качественных сервисов машинного перевода на рынке. Его API позволяет интегрировать автоперевод прямо в WordPress, что значительно упрощает работу с многоязычными сайтами. В отличие от Google Translate, DeepL часто дает более естественные и точные переводы, особенно для европейских языков.
Использование DeepL API позволяет автоматизировать перевод записей, страниц, пользовательских типов записей и даже метаданных. Это снижает ручную работу и ускоряет запуск многоязычного сайта.
Однако важно учитывать лимиты API, стоимость и необходимость правильной обработки ошибок при интеграции.
Настройка доступа к API DeepL
Для начала работы нужно зарегистрироваться на DeepL Developer и получить API ключ. Обычно это платная опция, но есть пробные тарифы с ограниченным количеством запросов.
После получения ключа нужно сохранить его в файле wp-config.php или в настройках плагина для безопасного доступа.
Пример сохранения ключа в wp-config.php:
define('WPTRANSLATE_DEEPL_API_KEY', 'ваш_ключ_здесь');Создание функции автоперевода для WordPress с использованием API DeepL
Рассмотрим минимальный пример функции для отправки текста на перевод и получения результата.
function wptranslate_deepl_translate_text($text, $target_lang = 'EN') {
$api_key = defined('WPTRANSLATE_DEEPL_API_KEY') ? WPTRANSLATE_DEEPL_API_KEY : '';
if (empty($api_key) || empty($text)) {
return $text;
}
$url = 'https://api-free.deepl.com/v2/translate';
$args = [
'body' => http_build_query([
'auth_key' => $api_key,
'text' => $text,
'target_lang' => strtoupper($target_lang),
]),
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
],
'timeout' => 15,
];
$response = wp_remote_post($url, $args);
if (is_wp_error($response)) {
return $text; // возвращаем исходный текст при ошибке
}
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
if (isset($data['translations'][0]['text'])) {
return $data['translations'][0]['text'];
}
return $text;
}Эта функция принимает исходный текст и целевой язык (например, EN, DE, FR) и возвращает переведённый текст или исходный при ошибке.
Автоматический перевод записей WordPress при сохранении
Добавим хук, который будет при сохранении записи автоматически переводить заголовок и содержимое на заданный язык и сохранять их в произвольных полях.
function wptranslate_deepl_auto_translate_post($post_id) {
// Проверяем, что это не автосохранение
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
// Проверяем права пользователя
if (!current_user_can('edit_post', $post_id)) {
return;
}
$post = get_post($post_id);
if (!$post || $post->post_type !== 'post') {
return;
}
$target_lang = 'DE'; // Целевой язык перевода — немецкий
$translated_title = wptranslate_deepl_translate_text($post->post_title, $target_lang);
$translated_content = wptranslate_deepl_translate_text($post->post_content, $target_lang);
// Сохраняем переводы в метаполях
update_post_meta($post_id, '_wptranslate_deepl_title_de', $translated_title);
update_post_meta($post_id, '_wptranslate_deepl_content_de', $translated_content);
}
add_action('save_post', 'wptranslate_deepl_auto_translate_post');Такой подход позволяет хранить переводы вместе с оригиналом. Далее вы можете вывести их в шаблоне или использовать для создания многоязычного сайта.
Вывод переведенного контента в шаблонах
Чтобы показывать переведённый текст на сайте, можно создать функцию для вывода перевода, если он есть, или оригинала.
function wptranslate_deepl_get_translated_post_content($post_id, $lang = 'DE') {
$title = get_post_meta($post_id, '_wptranslate_deepl_title_' . strtolower($lang), true);
$content = get_post_meta($post_id, '_wptranslate_deepl_content_' . strtolower($lang), true);
if ($title && $content) {
return ['title' => $title, 'content' => $content];
}
// Если перевода нет, возвращаем оригинал
$post = get_post($post_id);
return ['title' => $post->post_title, 'content' => $post->post_content];
}В шаблоне можно использовать так:
$translated = wptranslate_deepl_get_translated_post_content(get_the_ID(), 'DE');
echo '<h1>' . esc_html($translated['title']) . '</h1>';
echo apply_filters('the_content', $translated['content']);Рекомендации и оптимизация использования DeepL API в WordPress
Для снижения количества запросов и экономии денег рекомендуется кешировать результаты перевода. В примере выше мы сохраняем переводы в метаполях, чтобы не делать повторных запросов к API.
Также полезно предусмотреть обработку ошибок, логирование и возможность ручного редактирования переведённого текста через админку.
Если у вас большой сайт, можно реализовать очередь переводов с wp_cron и обрабатывать посты партиями, чтобы не блокировать сохранение записи.
Альтернативные плагины для интеграции DeepL в WordPress
Если вы предпочитаете готовые решения, можно рассмотреть плагины, которые уже интегрируют DeepL, например:
- WP Translate — удобный плагин с поддержкой DeepL и других сервисов.
- Polylang Pro с аддоном для DeepL — позволяет настроить автоматический перевод контента.
Эти плагины имеют удобный интерфейс и дополнительные опции, но если нужна гибкая автоматизация, лучше реализовать собственные функции, как показано выше.