Хук 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 — отличный инструмент для управления переводами числовых значений, который помогает точно настроить отображение строк. С помощью этого фильтра можно создавать более естественные и подходящие переводы для различных частей сайта.