Функция _N() в WordPress
Функция _n() используется для перевода слов в зависимости от количества: единственное число (1 комментарий) или множественное (2 комментария). Эта функция помогает отобразить корректную форму фразы в зависи��ости от числа.
Как работает функция _n()
Когда вы используете эту функцию, вам нужно передать следующие параметры:
- $single: строка, используемая, если число единичное (например, "1 комментарий").
- $plural: строка, используемая, если число множественное (например, "2 комментария").
- $number: число, с которым будет производиться сравнение.
- $domain: текстовый домен — уникальный идентификатор для получения переведенных строк (по умолчанию: 'default').
Логика работы функции
- Если передано число 1, функция возвращает первый параметр:
$single. - Если передано любое другое число (например, 2, 3, 4), функция возвращает второй параметр:
$plural. - Если не удается получить перевод, функция вернет исходное значение.
При указании текстового домена ($domain), функция передает параметры в метод Translations::translate_plural(), а затем результат передается в фильтр ngettext.
Синтаксис
_n( $single, $plural, $number, $domain );
Параметры
- $single (string): текст, который будет использован, если число единичное. (обязательный)
- $plural (string): текст, который будет использован, если число множественное. (обязательный)
- $number (int): число для сравнения, что определяет, использовать ли единственное или множественное число. (обязательный)
- $domain (string): текстовый домен. Уникальный идентификатор для получения переведенных строк. (по умолчанию: 'default')
Примеры использования функции _n()
Пример 1: Простое использование
echo _n( '%s звезда', '%s звезды', 1 );
// вывод: 1 звезда
echo _n( '%s звезда', '%s звезды', 3 );
// вывод: 3 звезды
Пример 2: Замена %s на нужное значение
Чтобы заменить %s на нужное значение, используйте функцию sprintf():
$rating = 1;
echo sprintf( _n( '%s звезда', '%s звезды', $rating, 'your_textdomain' ), $rating );
// Возвращает: 1 звезда
$rating = 4;
echo sprintf( _n( '%s звезда', '%s звезды', $rating, 'your_textdomain' ), $rating );
// Возвращает: 4 звезды
Пример 3: Использование в админке WordPress
if ( $approved > 0 ) {
$messages[] = sprintf( _n( '%s комментарий подтвержден', '%s комментария подтверждено', $approved ), $approved );
}
Пример 4: Правильное использование с обработкой значений
Важно не производить вычисления внутри sprintf():
$rating = 2 <= $rating ? $rating - 1 : $rating; // Сначала обработаем значение
$text = sprintf(
_n( '%s звезда', '%s звезды', $rating, 'your-text-domain' ),
$rating
);
Пример 5: Работа с файлами перевода
Предполагается, что есть файл перевода, зарегистрированный с помощью load_plugin_textdomain(), и его идентификатор - 'my_textdomain'.
echo _n( '%s звезда', '%s звезды', 1, 'textdomain' );
// Возвращает: 1 звезда
echo _n( '%s звезда', '%s звезды', 4, 'textdomain' );
// Возвращает: 4 звезды
Пример 6: Перевод фразы о количестве товаров в WooCommerce
// Получаем количество товаров в корзине
$count = WC()->cart->get_cart_contents_count();
// Переводим строку для отображения количества товаров
$translation = _n( '%s имеет %d товар', '%s имеет %d товаров', $count, 'woocommerce' );
// Убираем запятую, если она не нужна
$translation = str_replace( ',', '', $translation );
// Подставляем данные вместо заполнителей
$translation = sprintf( $translation, 'Всего', $count );
// Очищаем и отображаем
echo wp_kses_data( $translation );
Заключение
Функция _n() в WordPress — это полезный инструмент для правильного отображения текста в зависимости от чисел. Используя ее, вы можете облегчить работу с переводами и сделать ваш сайт более понятным для пользователей.