В 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 вы получите полный контроль над переводами и сможете поддерживать мультиязычный сайт на высоком уровне.