_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 лично, у себя в блогах и на курсах в Санкт-Петербурге. Умеет просто объяснять сложные вещи, делает это красиво. Организовывает неплохие WordCamp's, но совсем не умеет слушать чужие доклады.

Добавить комментарий

%d такие блоггеры, как: