Хук ngettext
в WordPress позволяет изменять переводы строк, которые зависят от числа. Это особенно полезно для надписей, которые имеют разные формы в зависимости от числового значения. Например, можно использовать этот хук, чтобы изменить текст «1 элемент» и «2 элемента» на более подходящие переводы, когда один и тот же шаблон используется для разных языков.
apply_filters( ‘ngettext’, string $translation, string $single, string $plural, int $number, string $domain )
Параметры хука ngettext
$translation
— строка переведенного текста.$single
— текст, используемый для единственного числа.$plural
— текст, используемый для множественного числа.$number
— число, которое определяет выбор между единственной или множественной формой.$domain
— текстовый домен, уникальный идентификатор для нахождения нужного перевода.
Пример 1: Кастомизация Элементов в Пагинации Таблицы WP_List_Table
В WordPress админке можно изменить слово «items» на «elements» в блоке пагинации таблицы WP_List_Table
, которая используется для управления записями и пользователями.
add_filter( 'ngettext', 'customize_pagination_item_name', 10, 5 );
function customize_pagination_item_name( $translation, $single, $plural, $number, $domain ) {
if ( $domain === 'default' && in_array( $translation, [ '%s item', '%s items' ] ) ) {
$translation = $number === 1 ? '%s element' : '%s elements';
}
return $translation;
}
Здесь ngettext
проверяет домен default
и меняет перевод, основываясь на числе $number
. Так, вместо «items» будут отображаться «elements».
Пример 2: Изменение Формы Множественного Числа для Комментариев
Допустим, вы хотите изменить фразу, отображаемую для комментариев на сайте, чтобы вместо «1 comment» и «2 comments» отображались формы «отзыв» и «отзыва».
add_filter( 'ngettext', 'customize_comment_count', 10, 5 );
function customize_comment_count( $translation, $single, $plural, $number, $domain ) {
if ( 'comments' === $domain && '%s comment' === $single && '%s comments' === $plural ) {
$translation = $number === 1 ? '%s отзыв' : '%s отзыва';
}
return $translation;
}
В этом примере при использовании домена comments
, хук изменяет текст для единичного и множественного числа в зависимости от числа $number
.
Пример 3: Изменение Переводов для Корзины Интернет-Магазина
Для магазина на WooCommerce может быть полезно менять форму текста «1 товар» и «3 товара» в корзине, чтобы сделать текст более разговорным.
add_filter( 'ngettext', 'customize_cart_item_text', 10, 5 );
function customize_cart_item_text( $translation, $single, $plural, $number, $domain ) {
if ( 'woocommerce' === $domain && '%s item' === $single && '%s items' === $plural ) {
$translation = $number === 1 ? '%s товар' : '%s товара';
}
return $translation;
}
Этот код проверяет, что домен равен woocommerce
, и заменяет текст для товаров в корзине на более подходящий вариант.
Полезные Советы по Работе с ngettext
- Проверка Текстового Домена. Включение проверки домена помогает избежать изменения строк, не относящихся к вашему плагину или теме.
- Использование Условий. Поскольку
ngettext
обрабатывает большое количество переводов, важно использовать условия, чтобы избежать ненужных изменений. - Локальная Проверка Переводов. При разработке полезно проверять результаты перевода на тестовом сайте, чтобы убедиться, что фильтр работает корректно для всех числовых форм.
Заключение
Хук ngettext
— отличный инструмент для управления переводами числовых значений, который помогает точно настроить отображение строк. С помощью этого фильтра можно создавать более естественные и подходящие переводы для различных частей сайта.