wplang.ru wordpress WP Lang

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

В WordPress gettext — это функция, отвечающая за интернационализацию и локализацию (i18n и l10n). Она позволяет разработчикам создавать темы и плагины с поддержкой переводов, а администраторам — изменять или корректировать переводы без правки исходных файлов .po/.mo. В этой статье подробно разберём, как работать с gettext, чтобы кастомизировать переводы на вашем сайте, используя фильтр gettext, а также приведём примеры кода и проверенные практики.

Что такое gettext и зачем он нужен в WordPress

Функция __() и похожие ей (_e(), _x(), esc_html__()) используют gettext для получения переведённой строки по ключу. Внутри WordPress gettext работает с .mo-файлами, которые содержат переводы для разных языков. Но иногда нужно не просто использовать стандартные переводы, а изменить их динамически или добавить свои правки без создания новых языковых файлов.

Вот здесь и приходит на помощь фильтр gettext, который позволяет перехватывать и изменять перевод строки прямо во время вывода. Это особенно полезно для быстрой кастомизации, исправления ошибок в переводах или добавления специфичных формулировок под бизнес-задачи.

Пример использования фильтра gettext для изменения перевода

Допустим, стандартный перевод слова «Read More» в теме вам не подходит, и вы хотите заменить его на «Читать далее». Чтобы реализовать это, добавьте следующий код в файл functions.php вашей темы или в собственный плагин:

function wplang_replace_read_more_text( $translated_text, $text, $domain ) {
    if ( $text === 'Read More' ) {
        $translated_text = 'Читать далее';
    }
    return $translated_text;
}
add_filter( 'gettext', 'wplang_replace_read_more_text', 20, 3 );

Здесь мы проверяем исходный текст $text, и если он совпадает с «Read More», возвращаем желаемую строку. Такой подход прост и работает для любых текстов, используемых функциями перевода.

Особенности и подводные камни

  • Фильтр gettext вызывается очень часто, поэтому старайтесь делать условия максимально узкими для оптимизации.
  • Обращайте внимание на домен перевода $domain, если хотите менять строки только из конкретного плагина или темы.
  • Изменения через этот фильтр не затрагивают файлы с переводами, поэтому после обновления плагина или темы ваши правки останутся в силе.

Как создавать свои переводы и использовать их вместе с фильтром gettext

Для полноценной локализации рекомендуется создавать свои .po/.mo файлы с помощью инструментов, например Poedit, или плагинов типа Loco Translate. Но чтобы быстро внести изменения без генерации файлов, фильтр gettext — отличный вариант.

Если же вы хотите расширить переводы, можно объединить оба подхода: добавить свои языковые файлы и при необходимости подправить отдельные фразы через фильтр.

Пример кода с учётом домена

function wplang_customize_plugin_texts( $translated_text, $text, $domain ) {
    if ( $domain === 'woocommerce' ) {
        if ( $text === 'Cart' ) {
            $translated_text = 'Корзина покупок';
        }
    }
    return $translated_text;
}
add_filter( 'gettext', 'wplang_customize_plugin_texts', 20, 3 );

Так можно точечно влиять на переводы, например, для WooCommerce или другого плагина, не затрагивая другие части сайта.

Инструменты и плагины для облегчения работы с gettext и переводами

Для работы с переводами в WordPress существуют полезные плагины, которые помогут создавать, редактировать и управлять языковыми файлами:

  • Loco Translate — мощный плагин для редактирования переводов прямо из админки, поддерживает создание .po/.mo файлов.
  • Clearfy Pro — облегчает оптимизацию сайта, в том числе помогает управлять переводами и отключать ненужные строки.

Сочетание этих инструментов и фильтра gettext даёт гибкий и быстрый способ кастомизации переводов без глубоких знаний локализации.

Советы по отладке и проверке изменений перевода с помощью gettext

Чтобы убедиться, что ваши изменения работают правильно, используйте следующие рекомендации:

  • Очистите кэш сайта и браузера после внесения правок.
  • Проверьте, что исходный текст точно совпадает с тем, что переводится (учитывайте регистр и пробелы).
  • Используйте error_log() для отладки, например:
function wplang_debug_gettext( $translated_text, $text, $domain ) {
    error_log("Gettext: domain=$domain, original='$text', translated='$translated_text'");
    return $translated_text;
}
add_filter( 'gettext', 'wplang_debug_gettext', 10, 3 );

Это поможет увидеть, какие строки передаются в фильтр и убедиться, что ваша логика отрабатывает.

Заключение

Использование фильтра gettext — мощный способ гибко управлять переводами в WordPress без необходимости создавать и поддерживать отдельные языковые файлы. Это удобно для быстрого исправления, кастомизации и адаптации текста под нужды конкретного сайта. В сочетании с инструментами типа Loco Translate и Clearfy Pro вы получите полный контроль над переводами и сможете поддерживать мультиязычный сайт на высоком уровне.

×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙