Используйте переведенные метки таксономии в плагине


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

Вопрос в следующем: Как мне форматировать сообщения плагина, чтобы использовать переведенные метки для таксономий?

Мне нужно выводить такие сообщения, как:

  • "Создано 1 категория".
  • "Совпадают 2 тега".
  • "Обновлено 5 фильмов". (Предположим, что "фильмы" - это пользовательская таксономия.)

В моем понимании (переведенные) метки единственного и множественного числа для таксономии доступны как $term_object->labels->singular_name и $term_object->labels->name.

Правильно ли предполагать, что эти свойства содержат переведенные строки? Или необходимо обернуть их какой-нибудь функцией i18n?

Функции _n() и _nx() обеспечивают формы единственного и множественного числа, но это не делает имеет смысл использовать их. Я использовал:

$message = sprintf( 
    'Created %d %s', 
    count($created), 
    count($created) == 1 ?
        $term_object->labels->singular_name
        : $term_object->labels->name 
);

Какова здесь наилучшая практика?

Author: P_Enrique, 2014-02-04

2 answers

Вы должны использовать функцию, учитывающую множественное число, такую как _n() или _nx(), потому что слова вокруг числа могут изменяться на некоторых языках в зависимости от количества элементов.
Для видимых чисел используйте number_format_i18n() и %s, а не %d.

Вы не можете повторно использовать метки, потому что формы множественного числа в некоторых языках меняются в зависимости от контекста.

Вот как я бы написал ваш пример:

// bare number, needed for _n()
$num  = count( $created );

// Singular or plural, we use %s, because we don't know what 
// number_format_i18n() will return.
$text = _n(
    'Created %s category',
    'Created %s categories',
    $num,
    'unique_plugin_textdomain'
);
// thousands separator etc.
$display_number = number_format_i18n( $num );
// Finally, the result:
$message        = sprintf( $text, $display_number );
 1
Author: fuxia, 2014-02-04 20:16:44

Да, register_taxonomy() ожидает массив переведенных меток и get_taxonomy_labels() предоставляет переведенные резервные варианты по умолчанию.

Вам не нужно дополнительно передавать метки через функцию перевода, так как предполагается, что они уже прошли через нее.

Обратите внимание, что вам действительно нужно перевести свою собственную пользовательскую строку (Created...).

 0
Author: Rarst, 2014-02-04 20:17:01