Как добавить поддержку мультиязычности в тему WordPress без плагинов

Если вы хотите сделать свою тему 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 или онлайн-сервисы. Последовательность действий:

  1. Соберите все строки, обёрнутые в __() и _e(), в .pot файл (шаблон перевода).
  2. Создайте переводы для нужных языков, например, ru_RU.po и ru_RU.mo.
  3. Положите файлы в папку /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, которые помогут автоматизировать задачи и улучшить производительность.

Как оптимизировать перевод тем и плагинов WordPress для быстродействия
09.01.2026
Как использовать плагин Poliglot для автоперевода WordPress
09.03.2026
Как создать собственный шорткод для перевода в WordPress
30.11.2025
Как добавить автоперевод для сообщений об ошибках WordPress
12.01.2026
Как сделать перевод административной панели WordPress на русский язык
06.01.2026