_n_noop()

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

Также рекомендую вам видеоурок про перевод тем и видеоурок про перевод плагинов.

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

Параметры

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

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

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

зарегистрированный статус записи в WordPress

И прикол в том, что сам 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_noop(). Строки, зарегистрированные ей, у вас также появляются в Poedit (ключевое слово _n_noop:1,2), вы также их переводите и они сохраняются в языковые файлы. Но сам процесс перевода в коде происходит чуть позже и в другом месте. Как например со статусами постов. Мы регистрируем строки и передаём их в функцию register_post_status(), но сам процесс перевода будет происходит именно во время вывода страницы постов в админке! То есть вообще где-то в файлах папки wp-admin.

И ещё момент – как же будет происходить процесс перевода? Да уже знакомыми нам функциями _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 );

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Комментарии — 3

Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.