В этой статье рассмотрим, как организовать уникальные переводы именно для пользовательских сообщений (custom messages) на сайте WordPress. Такая задача часто возникает, когда стандартные переводы не подходят, или требуется уникальный перевод для динамического контента, например, сообщений формы, уведомлений или ошибок, которые генерируются в процессе работы сайта.
Почему стандартные методы перевода в WordPress не всегда подходят для пользовательских сообщений
WordPress по умолчанию использует gettext-функции для перевода – __(), _e(), _x() и т.д. Однако, когда сообщения генерируются динамически или приходят из пользовательских настроек, они не всегда попадают в файлы перевода .po/.mo, и поэтому не переводятся автоматически.
Кроме того, если сообщения формируются на лету, использовать gettext не получится, так как строка может не быть захвачена при генерации файлов перевода.
Поэтому нужна кастомная логика, которая позволит создавать и управлять уникальными переводами для таких сообщений.
Основные подходы для реализации уникального перевода пользовательских сообщений
1. Использование пользовательских функций с параметрами перевода
Один из самых простых способов – создать свою функцию перевода, которая будет проверять наличие перевода в базе или в пользовательском массиве и возвращать нужный текст.
function wplang_custom_translate($text, $lang = null) {
if (!$lang) {
$lang = get_locale(); // получаем текущий язык
}
$translations = [
'en_US' => [
'Ваше сообщение успешно отправлено' => 'Your message has been sent successfully',
'Ошибка валидации' => 'Validation error',
],
'ru_RU' => [
// Можно переопределить или добавить свои переводы
],
];
if (isset($translations[$lang][$text])) {
return $translations[$lang][$text];
}
return $text; // если перевод не найден, возвращаем оригинал
}Такую функцию можно использовать в любом месте, где нужно вывести сообщение:
echo wplang_custom_translate('Ваше сообщение успешно отправлено');2. Хранение переводов в базе данных
Для более масштабных проектов желательно хранить переводы в базе данных, чтобы можно было редактировать их через админку, без правки кода.
Можно создать отдельную таблицу для пользовательских переводов или использовать опции WordPress. Например, хранить массив переводов в опции:
add_option('wplang_custom_translations', []);Функция для получения перевода:
function wplang_custom_translate_db($text, $lang = null) {
if (!$lang) {
$lang = get_locale();
}
$all_translations = get_option('wplang_custom_translations', []);
if (isset($all_translations[$lang][$text])) {
return $all_translations[$lang][$text];
}
return $text;
}Редактировать такие переводы можно вручную через админ-панель или создать отдельный интерфейс.
3. Использование плагинов для управления переводами
Если хочется упростить работу с переводами, можно использовать плагины, которые позволяют добавлять пользовательские переводы:
- Clearfy Pro (https://wpshop.ru/plugins/clearfy/?utm_source=wplang.ru&utm_medium=article&utm_campaign=kak-sozdat-unikalnye-perevody-dlya-polzovateljskih-soobshhenij-v-wordpress) – содержит инструменты для оптимизации и управления переводами, включая возможность добавления своих строк и подмены перевода.
- WPGPT – можно использовать для генерации уникальных переводов с помощью ИИ, если сообщения сложные и требуют адаптации.
Практические примеры: как использовать уникальные переводы в коде
Пример 1. Перевод сообщений формы обратной связи
Предположим, у вас есть форма, и после отправки нужно вывести сообщение, переведённое на нужный язык.
function wplang_custom_feedback_message($status) {
$messages = [
'success' => 'Ваше сообщение успешно отправлено',
'error' => 'Ошибка при отправке сообщения',
];
$text = isset($messages[$status]) ? $messages[$status] : '';
return wplang_custom_translate($text);
}
// Использование
$status = 'success'; // или 'error'
echo wplang_custom_feedback_message($status);Пример 2. Перевод динамических сообщений ошибок в AJAX-запросах
Если в AJAX-обработчике нужно возвращать сообщения на языке пользователя, можно сделать так:
add_action('wp_ajax_wplang_ajax_action', 'wplang_ajax_action_handler');
add_action('wp_ajax_nopriv_wplang_ajax_action', 'wplang_ajax_action_handler');
function wplang_ajax_action_handler() {
$error = false;
// какая-то логика
if ($error) {
wp_send_json_error([ 'message' => wplang_custom_translate('Ошибка валидации') ]);
} else {
wp_send_json_success([ 'message' => wplang_custom_translate('Ваше сообщение успешно отправлено') ]);
}
wp_die();
}Дополнительные советы и рекомендации по работе с переводами пользовательских сообщений
Используйте уникальные ключи для переводимых строк
Если сообщения похожи, лучше использовать ключи вместо самой строки, чтобы избежать путаницы и дублирования. Например:
$translations = [
'en_US' => [
'feedback_success' => 'Your message has been sent successfully',
'validation_error' => 'Validation error',
],
];
function wplang_custom_translate_key($key, $lang = null) {
if (!$lang) {
$lang = get_locale();
}
$translations = get_option('wplang_custom_translations', []);
if (isset($translations[$lang][$key])) {
return $translations[$lang][$key];
}
return $key;
}Интеграция с существующими плагинами перевода
Если вы используете WPML, Polylang или другие популярные плагины, можно комбинировать их возможности с кастомными функциями, чтобы обеспечить полный контроль над переводами.
Например, для WPML можно использовать фильтры для подмены текста при необходимости.
Кеширование результатов перевода
Для повышения производительности стоит кешировать результаты перевода, особенно если работаете с базой данных или большими массивами.
Можно использовать transient API WordPress:
function wplang_custom_translate_cached($key, $lang = null) {
if (!$lang) {
$lang = get_locale();
}
$cache_key = 'wplang_translate_' . md5($lang . '_' . $key);
$cached = get_transient($cache_key);
if ($cached !== false) {
return $cached;
}
$translation = wplang_custom_translate_key($key, $lang);
set_transient($cache_key, $translation, DAY_IN_SECONDS);
return $translation;
}Выводы
Создание уникальных переводов для пользовательских сообщений в WordPress требует дополнительной работы, но это решаемая задача. Используйте кастомные функции, храните переводы в базе или файлах, комбинируйте с плагинами, и не забывайте оптимизировать производительность.
Для расширенного управления переводами рекомендуем обратить внимание на Clearfy Pro, который предоставляет удобные инструменты для работы с переводами и оптимизации сайта.