Plural и sourceLanguage

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
bot4343
Сообщения: 28
Зарегистрирован: 2013.07.20, 19:49

Plural и sourceLanguage

Сообщение bot4343 »

Вопрос о множественном склонении.

В большинстве случаев в конфигурации указывается:

Код: Выделить всё

'language' => 'ru-RU',    // пользовательский язык русский
'sourceLanguage' => 'en-US',  // по умолчанию   
Если при этом использовать пример из документации:

Код: Выделить всё

echo \Yii::t('app',
                'На диване {n, plural, =0{нет кошек} =1{лежит одна кошка} one{лежит # кошка} few{лежит # кошки} many{лежит # кошек} other{лежит # кошки}}!',
                ['n' => 17], 
            );
Выведенный результат будет не верный: 17 кошки

В документации упоминается что:
Note: The above example Russian message is mainly used as a translated message, not an original message, unless you set the source language of your application as ru-RU and translating from Russian.

When a translation is not found for an original message specified in Yii::t() call, the plural rules for the source language will be applied to the original message.
На сколько я понял из перевода: правила склонения будут применены только если sourceLanguage и language совпадают. И действительно, если указать оба параметра "ru-RU", это срабатывает: 17 кошек

Вопрос, насколько правильно задавать так, а если я хочу в одном шаблоне на разных языках вывести? Можно как-то по параметру $language в функции Yii::t передать?

Спасибо
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Plural и sourceLanguage

Сообщение samdark »

Переводится всегда с sourceLanguage на language. В примере у нас исходный язык русский, а у вас указано, что английский, поэтому и применяются правила как к английскому.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Plural и sourceLanguage

Сообщение samdark »

У метода t() есть параметр $language.

А ещё можно не переводя сразу расформатировать: Yii::$app->getI18n()->translate(...).
mkramer
Сообщения: 531
Зарегистрирован: 2014.12.14, 13:02

Re: Plural и sourceLanguage

Сообщение mkramer »

Sam Dark, я почему то понял из документации, что такие вещи (подстановка правильных окончаний) работают, только если исходный язык - английский. Это неверно?
bot4343
Сообщения: 28
Зарегистрирован: 2013.07.20, 19:49

Re: Plural и sourceLanguage

Сообщение bot4343 »

Sam Dark писал(а):У метода t() есть параметр $language.

А ещё можно не переводя сразу расформатировать: Yii::$app->getI18n()->translate(...).
Передача параметра $language в t() ни как не влияла на результат:

Код: Выделить всё

echo \Yii::t('app',
                'На диване {n, plural, =0{нет кошек} =1{лежит одна кошка} one{лежит # кошка} few{лежит # кошки} many{лежит # кошек} other{лежит # кошки}}!',
                ['n' => 17], 'ru-RU'
            ); 
Нашел такое решение:

Код: Выделить всё

$n = 17;
echo \Yii::$app->i18n->messageFormatter->format(
    '{n, plural, one{У нас # статья} few{У нас # статьи} many{У нас # статей} other{У нас # статьи}}!',
    ['n' => $n],
    \Yii::$app->language
); 
Ответить