В современных многоязычных сайтах на WordPress часто возникает задача не только перевода статического контента, но и динамических данных. К таким данным относятся пользовательские поля, метаданные, данные форм, а также любые данные, которые выводятся на сайте в зависимости от действий пользователя или администраторов.
Что такое динамические данные и почему их важно переводить
Динамические данные — это контент, который меняется и не хранится в виде статичных постов или страниц. Например, это могут быть:
- Поля пользовательских форм (например, в WPForms или Contact Form 7);
- Метаданные постов и пользователей;
- Тексты уведомлений и сообщений об ошибках;
- Контент, созданный через пользовательские типы записей и таксономии;
- Данные, выводимые через AJAX-запросы и REST API.
Перевод динамических данных важен для полного охвата сайта многоязычностью и повышения качества пользовательского опыта для посетителей на разных языках.
Основные подходы к автоматическому переводу динамических данных в WordPress
Существует несколько способов автоматизировать перевод динамических данных:
- Использование специализированных плагинов с поддержкой API машинного перевода (например, WPGPT от WPShop);
- Интеграция собственного кода с внешними сервисами перевода через API (Google Translate, DeepL, Yandex Translate и др.);
- Создание собственного многоязычного решения с пользовательскими функциями, которые обрабатывают динамические данные и подменяют их переведёнными версиями.
Перевод пользовательских полей и метаданных с помощью WPLangs и WPGPT
Плагин WPGPT идеально подходит для автоматического перевода динамических данных, так как интегрируется с WordPress и позволяет переводить пользовательские поля, метаданные и другие элементы сайта автоматически через API GPT.
Для работы с метаданными можно использовать следующий пример кода, который автоматически переводит определённое мета-поле при сохранении поста:
function wplangs_translate_meta_on_save($post_id) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
$meta_key = 'wplangs_custom_field';
$original_text = get_post_meta($post_id, $meta_key, true);
if (!$original_text) return;
// Функция wplangs_translate_text вызывает API перевода (например, WPGPT)
$translated_text = wplangs_translate_text($original_text, 'en');
update_post_meta($post_id, $meta_key . '_en', $translated_text);
}
add_action('save_post', 'wplangs_translate_meta_on_save');
Здесь wplangs_translate_text — это обёртка над вызовом API перевода, которую нужно реализовать, например, через WPGPT.
Перевод форм и уведомлений с помощью WPGPT и WPForms
Динамический контент форм — отдельный вызов в многоязычном сайте. Если у вас установлен WPForms, можно автоматически переводить поля формы и сообщения об ошибках.
Пример интеграции автоматического перевода для WPForms с использованием WPGPT API:
function wplangs_translate_wpforms_fields($form_data) {
foreach ($form_data['fields'] as &$field) {
if (!empty($field['label'])) {
$field['label'] = wplangs_translate_text($field['label'], 'en');
}
if (!empty($field['description'])) {
$field['description'] = wplangs_translate_text($field['description'], 'en');
}
}
return $form_data;
}
add_filter('wpforms_frontend_form_data', 'wplangs_translate_wpforms_fields');
Этот код проходит по всем полям формы и переводит их ярлыки и описания. Аналогично можно обрабатывать сообщения об ошибках и уведомления.
Перевод AJAX-запросов и REST API ответов
Если ваш сайт использует AJAX или REST API для динамического вывода данных, необходимо переводить ответы сервера до отправки клиенту. В WordPress это делается через фильтры и хуки.
Пример перевода AJAX-ответа с использованием WPGPT:
add_action('wp_ajax_wplangs_translate_ajax', 'wplangs_translate_ajax_callback');
add_action('wp_ajax_nopriv_wplangs_translate_ajax', 'wplangs_translate_ajax_callback');
function wplangs_translate_ajax_callback() {
$text = isset($_POST['text']) ? sanitize_text_field($_POST['text']) : '';
$target_lang = isset($_POST['lang']) ? sanitize_text_field($_POST['lang']) : 'en';
$translated = wplangs_translate_text($text, $target_lang);
wp_send_json_success(['translated' => $translated]);
}
Клиентский JavaScript может отправлять текст на перевод и получать готовый результат для вывода на странице.
Создание функции обёртки для перевода с WPGPT
Для удобства создайте универсальную функцию wplangs_translate_text, которая принимает текст и язык перевода, и возвращает переведённый текст. Пример:
function wplangs_translate_text($text, $target_lang = 'en') {
// Здесь подключаем API WPGPT или другого сервиса
// Пример запроса к API:
$api_url = 'https://api.wpgpt.ru/translate';
$response = wp_remote_post($api_url, [
'body' => json_encode([
'text' => $text,
'target_lang' => $target_lang
]),
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer YOUR_API_KEY'
]
]);
if (is_wp_error($response)) {
return $text; // Возвращаем оригинал при ошибке
}
$body = json_decode(wp_remote_retrieve_body($response), true);
return $body['translated_text'] ?? $text;
}
Такой подход позволит централизованно управлять всеми переводами на сайте.
Рекомендации по оптимизации и кешированию переводов
Перевод динамических данных через API — затратная по времени операция. Чтобы не замедлять сайт, рекомендуем:
- Кешировать переводы в базе данных (например, в пользовательских мета или опциях) после первого запроса;
- Использовать транзиенты WordPress для временного хранения результатов перевода;
- Переводить наиболее часто используемые фрагменты заранее, а остальные — по требованию;
- Обрабатывать переводы в очередь (через WP-Cron или сторонние очереди), чтобы не блокировать пользовательские запросы.
Заключение
Автоматический перевод динамических данных в WordPress — сложная, но решаемая задача. Использование мощных плагинов, таких как WPGPT, и грамотное программирование с кешированием помогут создать удобный многоязычный сайт с полным охватом контента.