Если вы хотите сделать свою тему WordPress доступной для пользователей на разных языках, не прибегая к сложным плагинам, то добавление поддержки мультиязычности вручную — отличный вариант. В этой статье мы подробно разберём, как реализовать локализацию темы с помощью стандартных функций WordPress и создать удобный переключатель языков без плагинов.
Почему стоит добавить мультиязычность в тему самостоятельно
Большинство готовых решений для мультиязычности используют плагины, которые добавляют сложность и могут замедлять сайт. Если вам нужно базовое переключение языков с минимальными зависимостями, то самостоятельная реализация — оптимальный путь. Кроме того, это поможет глубже понять механизм локализации в WordPress и при необходимости гибко адаптировать функционал под себя.
Основы локализации темы WordPress
WordPress использует систему gettext для локализации. Для того чтобы тема была мультиязычной, необходимо:
- Подготовить все строки в теме к переводу с помощью функций
__()и_e(). - Зарегистрировать файлы перевода (.po и .mo) в теме.
- Создать и подключить файлы локализации для нужных языков.
Использование функций __() и _e()
Вместо простого вывода текста, например:
<h1>Привет, мир!</h1>
нужно обернуть строку функцией __() для возвращения строки с переводом, или _e() для её вывода сразу:
<h1><?php _e('Привет, мир!', 'wptranslate'); ?></h1>
Здесь 'wptranslate' — это текстовый домен вашей темы, он должен совпадать с названием папки темы или быть определён в functions.php.
Регистрация текстового домена
В файле functions.php вашей темы добавьте функцию для загрузки файлов перевода:
function wptranslate_load_textdomain() {
load_theme_textdomain('wptranslate', get_template_directory() . '/languages');
}
add_action('after_setup_theme', 'wptranslate_load_textdomain');
Это позволит WordPress загружать переводы из папки /languages вашей темы.
Создание файлов перевода (.po и .mo)
Для создания файлов перевода можно использовать программы Poedit или онлайн-сервисы. Последовательность действий:
- Соберите все строки, обёрнутые в
__()и_e(), в .pot файл (шаблон перевода). - Создайте переводы для нужных языков, например,
ru_RU.poиru_RU.mo. - Положите файлы в папку
/languagesвашей темы.
Пример создания .pot файла с помощью WP-CLI
Если у вас установлен WP-CLI, можно создать .pot файл командой:
wp i18n make-pot . languages/wptranslate.pot --exclude=vendor,node_modules
Затем открывайте этот файл в Poedit для создания переводов.
Добавление переключателя языков без плагинов
Поскольку мы не используем плагин, переключатель языков можно реализовать через пользовательские URL и cookie. Например, создадим простой переключатель, который меняет параметр ?lang=ru или ?lang=en.
Пример кода переключателя
function wptranslate_language_switcher() {
$current_lang = isset($_GET['lang']) ? sanitize_text_field($_GET['lang']) : 'ru';
$url_ru = add_query_arg('lang', 'ru');
$url_en = add_query_arg('lang', 'en');
echo '<div class="wptranslate-lang-switcher">';
echo '<a href="' . esc_url($url_ru) . '"' . ($current_lang === 'ru' ? ' class="active"' : '') . '>Русский</a> | ';
echo '<a href="' . esc_url($url_en) . '"' . ($current_lang === 'en' ? ' class="active"' : '') . '>English</a>';
echo '</div>';
}
add_action('wp_footer', 'wptranslate_language_switcher');
Этот переключатель выводит ссылки на разные языки. Для хранения выбранного языка можно использовать cookie или сессию.
Переключение языка для локализации
Чтобы WordPress использовал выбранный язык, добавьте следующий код в functions.php:
function wptranslate_set_locale($locale) {
if (isset($_GET['lang'])) {
$lang = sanitize_text_field($_GET['lang']);
switch ($lang) {
case 'en':
return 'en_US';
case 'ru':
default:
return 'ru_RU';
}
}
return $locale;
}
add_filter('locale', 'wptranslate_set_locale');
Теперь при добавлении ?lang=en в URL будет переключаться язык интерфейса.
Советы по переводу динамического контента и виджетов
Если в теме есть динамический контент или виджеты, которые выводят текст, их тоже нужно оборачивать в функции локализации. Для сложных случаев можно создать свои шорткоды, которые будут возвращать перевод в зависимости от выбранного языка.
Пример шорткода для перевода
function wptranslate_lang_shortcode($atts, $content = null) {
$lang = isset($_GET['lang']) ? sanitize_text_field($_GET['lang']) : 'ru';
$translations = array(
'en' => 'Hello',
'ru' => 'Привет'
);
return $translations[$lang] ?? $content;
}
add_shortcode('wptranslate_lang', 'wptranslate_lang_shortcode');
Используйте в контенте: [wptranslate_lang]Привет[/wptranslate_lang], чтобы выводить текст на нужном языке.
Заключение
Добавление мультиязычности в тему WordPress без плагинов — задача вполне решаемая с помощью стандартных средств локализации. Такой подход облегчает поддержку темы и минимизирует зависимость от сторонних решений. При необходимости можно расширять функционал переключения языков, интегрируя с AJAX или создавая более сложные правила маршрутизации.
Если хотите дополнительно оптимизировать и улучшить работу темы, обратите внимание на полезные плагины с сайта WPSHOP, которые помогут автоматизировать задачи и улучшить производительность.