_n_noop()

Владислав Белецкий
Владислав Белецкий .
Категория:
Комментариев: 0

Функция позволяет зарегистрировать строки в их единственном и множественном числе для дальнейшего перевода. Отличается от функции _n() тем, что позволяет работать с неизвестным числовым значением.

_n_noop( $singular, $plural, $domain = null )

Параметры

$singular строка Обязательный
Значение строки в единственном числе (для английского языка).
$plural строка Обязательный
Значение строки во множественном числе (для английского языка).
$domain строка
Идентификатор перевода. Задаётся в виде строки, не передавайте в этот параметр переменных.

Подробный пример и объяснение функции

Предположим, вы регистрируете какой-то статус записи функцией register_post_status(). И этот статус записей появляется в фильтре над постами в админке:

И прикол в том, что сам WordPress позволяет учитывать число в скобочках и в зависимости от его значения по-разному переводить слово перед ним.

Факт в том, что в реальности это не особо используется (обратите внимание на «Черновики (1)», но такая возможность есть.

Происходит это таким образом, что при регистрации статуса мы передаём параметр label_count в следующем формате:

register_post_status( 
	'idea', 
	array(
		'label_count' => _n_noop( 'Idea (%s)', 'Ideas (%s)', 'true-domain' ),
 
		/* другие параметры регистрируемого статуса */
	)
);

Теперь ответьте мне на вопрос – при регистрация статуса записи можем ли мы каким-то чудесным образом узнать количество постов этого статуса, чтобы использовать функцию _n() типо вот так?

		'label_count' => _n( 'Idea (%s)', 'Ideas (%s)', $post_count, 'true-domain' ),

Нет конечно! Откуда? Сама функция нам это значение никак не передаёт.

И ещё момент – как же будет происходить процесс перевода? Да уже знакомыми нам функциями _n() и _nx(). Правда это будет скорее всего внутри функции-обёртки translate_nooped_plural().

Функция _n_noop() будет возвращать нам ассоциативный массив вида:

print_r( $label_count );
 
/* Array
(
    [singular] => Idea (%s)
    [plural] => Ideas (%s)
    [domain] => true-domain
) */

После чего этот массив можно отправить в функцию translate_nooped_plural(), когда уже станет известно количество постов!

printf( translate_nooped_plural( $label_count, $post_count, 'true-domain' ), $post_count );

Либо можно чуть усложнить себе жизнь и воспользоваться _n().

printf( _n( $label_count[ 'singular' ], $label_count[ 'plural' ], $post_count, 'true-domain' ), $post_count );
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии