Функция _n() в WordPress: использование и примеры

Функция _N() в WordPress

Функция _n() используется для перевода слов в зависимости от количества: единственное число (1 комментарий) или множественное (2 комментария). Эта функция помогает отобразить корректную форму фразы в зависи��ости от числа.

Как работает функция _n()

Когда вы используете эту функцию, вам нужно передать следующие параметры:

  • $single: строка, используемая, если число единичное (например, "1 комментарий").
  • $plural: строка, используемая, если число множественное (например, "2 комментария").
  • $number: число, с которым будет производиться сравнение.
  • $domain: текстовый домен — уникальный идентификатор для получения переведенных строк (по умолчанию: 'default').

Логика работы функции

  1. Если передано число 1, функция возвращает первый параметр: $single.
  2. Если передано любое другое число (например, 2, 3, 4), функция возвращает второй параметр: $plural.
  3. Если не удается получить перевод, функция вернет исходное значение.

При указании текстового домена ($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 — это полезный инструмент для правильного отображения текста в зависимости от чисел. Используя ее, вы можете облегчить работу с переводами и сделать ваш сайт более понятным для пользователей.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *