Мультиязычность — важный аспект современных сайтов, особенно если аудитория расположена в разных странах или региона. Однако стандартные решения не всегда подходят, если требуется гибкое управление переводами, включая возможность добавлять свои переводы прямо из админки, без правки файлов .po/.mo. В этой статье разберём, как создать мультиязычный сайт на WordPress с поддержкой пользовательских переводов, используя популярные плагины и кастомный код.
Выбор плагина для мультиязычности: WPML, Polylang и TranslatePress
Для начала нужно определиться с базовым решением. Среди популярных плагинов есть WPML, Polylang и TranslatePress. Все они позволяют создавать мультиязычные сайты, но имеют разные подходы к управлению переводами.
WPML — мощный и функциональный, но платный, с поддержкой перевода почти всего контента, включая виджеты, меню и пользовательские типы записей.
Polylang — бесплатная версия ограничена, но с расширениями позволяет гибко работать с переводами и интегрируется с Gutenberg.
TranslatePress — уникален тем, что перевод можно делать прямо на фронтенде визуально, что отлично подходит для пользователей без технических навыков.
Пользовательские переводы: зачем они нужны и как реализовать
Стандартно переводы в WordPress хранятся в файлах .po и .mo, которые создаются и редактируются в специальных редакторах (Poedit, Loco Translate). Но что если нужно дать возможность клиенту или редактору сайта добавлять свои переводы прямо из админки, без FTP и специальных знаний?
В этом случае пригодится кастомный подход или расширения плагинов. Например, Clearfy Pro помогает оптимизировать работу плагинов и может облегчить управление переводами, но для полноценной поддержки пользовательских переводов нужен свой механизм.
Создание своего интерфейса для пользовательских переводов
Ниже пример, как реализовать в админке WordPress простую таблицу с переводами, которые сохраняются в отдельной опции и подключаются через фильтр gettext.
function wpturbo_get_user_translations() {
return get_option('wpturbo_user_translations', []);
}
function wpturbo_save_user_translations() {
if (!current_user_can('manage_options')) return;
if (!isset($_POST['wpturbo_translations_nonce']) || !wp_verify_nonce($_POST['wpturbo_translations_nonce'], 'wpturbo_save_translations')) return;
if (!empty($_POST['translations']) && is_array($_POST['translations'])) {
update_option('wpturbo_user_translations', array_map('sanitize_text_field', $_POST['translations']));
}
}
add_action('admin_post_wpturbo_save_translations', 'wpturbo_save_user_translations');
function wpturbo_override_gettext($translated, $text, $domain) {
$translations = wpturbo_get_user_translations();
if (isset($translations[$text])) {
return $translations[$text];
}
return $translated;
}
add_filter('gettext', 'wpturbo_override_gettext', 10, 3);
Этот код позволяет хранить пары оригинальный текст — перевод в опции и автоматически заменять переводы по фильтру gettext. Далее можно создать страницу в админке с формой для ввода таких переводов.
Интеграция пользовательских переводов с TranslatePress
Если вы используете TranslatePress, то для расширения возможностей можно использовать его API и добавить поддержку своих строк. TranslatePress позволяет импортировать/экспортировать переводы, но не имеет встроенного интерфейса для прямого редактирования всех строк в админке.
Пример расширения на основе API TranslatePress для добавления своих строк:
function wpturbo_add_custom_translatepress_strings() {
if (!function_exists('trp_add_string')) return;
trp_add_string('wpturbo_custom_hello', 'Hello from WPTurbo');
}
add_action('init', 'wpturbo_add_custom_translatepress_strings');
Затем эти строки можно будет переводить через стандартный интерфейс TranslatePress.
Практические советы по работе с мультиязычностью и пользовательскими переводами
- Используйте кеширование — при большом количестве пользовательских переводов фильтр gettext может замедлить сайт, поэтому разумно кешировать массив переводов, например через Transient API.
- Ограничьте доступ — редактировать переводы должны лишь доверенные пользователи с правами администратора или редактора.
- Тестируйте на локали — при добавлении своих строк используйте уникальные префиксы, чтобы не конфликтовать с другими плагинами.
- Автоматизируйте импорт/экспорт — если клиент часто обновляет переводы, сделайте инструменты для загрузки CSV или JSON.
Заключение по теме мультиязычности с пользовательскими переводами
Создание мультиязычного сайта с поддержкой пользовательских переводов — задача вполне решаемая, но требует продуманного подхода. Комбинируя мощные плагины с собственными решениями, вы получите гибкий инструмент, который понравится и вам, и клиенту.
Для быстрого старта рекомендуем ознакомиться с TranslatePress и добавить к нему кастомные решения из примера выше.