Задача: выводить количество чего-либо во множественном склонении, например “1 статья”, “2 статьи”, “17 статей” и т.д.
Решение #1
$n = 17;
Yii::t('app', '{n, plural, one{У нас # статья} few{У нас # статьи} many{У нас # статей} other{У нас # статьи}}!', ['n' => $n]);
Для того, что бы код заработал:
1. Убедитесь что установлено и подключено PHP расширениеintl
. При необходимости установите его sudo apt-get install php5-intl
.
2. Убедитесь что версия установленной библиотеки ICU
(International Components for Unicode) 4.9 и выше. Если это не так, рекомендуется обновиться.
3. Обратите внимание, что функция перевода Yii::t()
используется для перевода сообщений, а не для вывода оригинальных сообщений. Поэтому она не сработает еслиsourceLanguage
и language
отличаются, а перевод отсутствует. В коде приложения у вас все должно быть на английском, а все английские фразы должны быть переведены в файлах переводов.
Когда вы установите язык исходного кода sourceLanguage
какru-RU
, а язык перевода language
в ru-RU
— тогда перевод для оригинального сообщения не будет найден и функция Yii::t() применит правила множественной формы к исходному сообщению.
Для того что бы корректно сработала множественная форма
plural
может потребоваться поменять параметрsourceLanguage
в конфигурации наru-RU
Решение #2
Т.к. это не всегда верный путь, например если в остальной части шаблона содержится вывод на других языках. Тогда можно воспользоваться примером:
$n = 17;
echo \Yii::$app->i18n->messageFormatter->format(
'{n, plural, one{У нас # статья} few{У нас # статьи} many{У нас # статей} other{У нас # статьи}}!',
['n' => $n],
\Yii::$app->language
);