Функция позволяет зарегистрировать строки в их единственном и множественном числе для дальнейшего перевода. Отличается от функции _n() тем, что позволяет работать с неизвестным числовым значением.
Также рекомендую вам видеоурок про перевод тем и видеоурок про перевод плагинов.
_n_noop( $singular, $plural, $domain = null )
Предположим, вы регистрируете какой-то статус записи функцией 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_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 );
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
класс!
хотелось бы больше подобного контента!
Спасибо!