wplangs.ru wordpress WP Langs

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

Для сайтов на WordPress часто требуется реализовать многоязычность, но стандартные решения, такие как плагины Polylang или WPML, не всегда подходят или вызывают сложности с производительностью и совместимостью. В этой статье мы рассмотрим, как можно создать собственный языковой переводчик для WordPress, который позволит гибко управлять переводами и интегрировать их напрямую в темы и плагины.

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

Готовые плагины имеют много функций, но они могут быть избыточными для небольших проектов. Собственный переводчик даст полный контроль над процессом, минимизирует нагрузку и позволит оптимизировать работу под конкретные задачи. Кроме того, это отличный способ глубже понять внутренние механизмы локализации в WordPress.

Основные преимущества собственного решения:

  • Минимум лишнего кода и зависимостей.
  • Гибкая структура хранения переводов (например, в базе данных или JSON-файлах).
  • Возможность интегрировать перевод непосредственно в шаблоны.
  • Легкость расширения функционала под свои нужды.

Далее мы опишем основные этапы создания такого переводчика.

Как хранить переводы: базы данных, файлы или API?

Самый простой вариант — хранить переводы в JSON-файлах, где ключ — уникальный идентификатор текста, а значение — перевод на нужном языке. Это удобно для небольших сайтов и простых фраз.

Для более масштабных проектов лучше использовать собственные таблицы в базе данных с полями: key, language, translation. Это позволит быстро обновлять переводы и делать их динамическими.

Также можно интегрировать сторонние API переводов, например, Google Translate, для автоматического получения перевода. Но в этом случае важно предусмотреть кеширование и проверку качества перевода.

Создаем базовую функцию перевода для WordPress — wplangs_translate()

Начнем с создания простой функции, которая будет получать ключ и язык, а возвращать нужный перевод. Для примера используем JSON-файл с переводами, хранящийся в папке темы.

function wplangs_translate($key, $lang = 'ru') {
    static $translations = null;
    if ($translations === null) {
        $file = get_template_directory() . '/languages/' . $lang . '.json';
        if (file_exists($file)) {
            $content = file_get_contents($file);
            $translations = json_decode($content, true);
        } else {
            $translations = [];
        }
    }
    return isset($translations[$key]) ? $translations[$key] : $key;
}

Эта функция загружает перевод один раз и кеширует его в статической переменной. Если перевод для ключа не найден, возвращается сам ключ, что удобно для отладки.

Пример структуры JSON-файла перевода

Файл ru.json в папке /languages/ может выглядеть так:

{
    "welcome_message": "Добро пожаловать на сайт!",
    "contact_us": "Свяжитесь с нами",
    "read_more": "Читать далее"
}

Интеграция собственного переводчика в темы и плагины WordPress

Для применения перевода в теме достаточно заменить статичные строки вызовом wplangs_translate(). Например, вместо:

<h1>Добро пожаловать на сайт!</h1>

пишем:

<h1><?php echo wplangs_translate('welcome_message', 'ru'); ?></h1>

Для переключения языка можно добавить параметр lang в URL или настроить выбор языка через пользовательский интерфейс, сохраняя выбор в сессии или cookie.

Создаем простой переключатель языка

Добавим в тему следующий код для смены языка через параметр URL:

function wplangs_get_current_lang() {
    if (isset($_GET['lang']) && in_array($_GET['lang'], ['ru', 'en'])) {
        setcookie('wplangs_lang', $_GET['lang'], time() + 3600 * 24 * 30, '/');
        return $_GET['lang'];
    } elseif (isset($_COOKIE['wplangs_lang'])) {
        return $_COOKIE['wplangs_lang'];
    } else {
        return 'ru';
    }
}

Теперь функцию перевода можно вызывать с текущим языком:

$lang = wplangs_get_current_lang();
echo wplangs_translate('welcome_message', $lang);

Расширяем функционал: поддержка плейсхолдеров и параметров в переводах

Часто в переводах нужны динамические данные, например, имя пользователя. Добавим поддержку шаблонов с плейсхолдерами через функцию sprintf.

function wplangs_translate($key, $lang = 'ru', ...$args) {
    static $translations = null;
    if ($translations === null) {
        $file = get_template_directory() . '/languages/' . $lang . '.json';
        if (file_exists($file)) {
            $content = file_get_contents($file);
            $translations = json_decode($content, true);
        } else {
            $translations = [];
        }
    }
    $text = isset($translations[$key]) ? $translations[$key] : $key;
    if (!empty($args)) {
        $text = sprintf($text, ...$args);
    }
    return $text;
}

В JSON-файле можно писать такие строки:

{
    "greeting_user": "Привет, %s! Добро пожаловать на сайт."
}

И использовать их так:

echo wplangs_translate('greeting_user', 'ru', 'Анна'); // Выведет: Привет, Анна! Добро пожаловать на сайт.

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

Если вы разрабатываете собственный плагин и хотите использовать этот переводчик, просто подключите функции в начале плагина и используйте wplangs_translate() для всех текстов. Можно сделать универсальный класс для управления переводами и подключать его как зависимость.

Вот базовый пример класса для плагина:

class WPLangs_Translator {
    private $lang;
    private $translations = [];

    public function __construct($lang = 'ru') {
        $this->lang = $lang;
        $this->load_translations();
    }

    private function load_translations() {
        $file = plugin_dir_path(__FILE__) . 'languages/' . $this->lang . '.json';
        if (file_exists($file)) {
            $content = file_get_contents($file);
            $this->translations = json_decode($content, true);
        }
    }

    public function translate($key, ...$args) {
        $text = isset($this->translations[$key]) ? $this->translations[$key] : $key;
        if (!empty($args)) {
            $text = sprintf($text, ...$args);
        }
        return $text;
    }
}

Использование:

$translator = new WPLangs_Translator('ru');
echo $translator->translate('welcome_message');

Выводы и рекомендации по созданию собственного переводчика

Создание собственного переводчика — отличный способ получить полный контроль над многоязычностью на сайте WordPress. Это позволяет избежать сложностей с совместимостью плагинов и оптимизировать работу под свои задачи.

Рекомендации:

  • Используйте кеширование переводов для повышения производительности.
  • Выбирайте способ хранения переводов в зависимости от размера сайта и количества языков.
  • Добавьте удобный интерфейс для управления переводами, если планируете масштабировать проект.
  • Обязательно тестируйте вывод на разных языках, чтобы избежать ошибок форматирования.

Таким образом, вы сможете создавать гибкие и легкие решения для многоязычных WordPress-сайтов без лишних зависимостей.

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше