Программирование, веб-кодинг

Множественные формы слова в Yii2 (plural)

Как менять окончания слов в зависимости от цифры количества? В Yii это делает Yii::t с помощью 'plural' и перечисления возможных форм слова

Множественные формы слова в Yii2 (plural)

Множественные формы задаются просто, как пишет Александр Макаров в заметке о переводе сообщений

echo \Yii::t('app', 'There {n, plural, =0{are no cats} =1{is one cat} other{are # cats}}!', array(
    'n' => 0,
));

Всё работает. Но может возникнуть ошибка с версией ICU. ICU - это International Components for Unicode, библиотека, устанавливается в php. Если вставить код

<span><?php
echo "PHP: " . PHP_VERSION . "\n";
echo "ICU: " . INTL_ICU_VERSION . "\n";</span>
?>

то получим версию ICU. У меня оказалось: PHP: 5.4.30 ICU: 4.2.1

Кусок из рекомендации касательно библиотеки ICU для работы с цифрами рекомендуется ICU выше версии 4.9 (cм коммит - https://github.com/yiisoft/yii2/commit/a1d10b2cea9...)

We recommend an ICU version greater or equal to version ICU 49 to be able to use all the features described in this document. +One major feature that is missing in Versions below 49 is the `#` placeholder in plural rules....

echo \Yii::t('app', 'There {n, plural, one{is one cat} other{are # cats}}!', ['n' => 0]);
instead of

echo \Yii::t('app', 'There {n, plural, =0{are no cats} =1{is one cat} other{are # cats}}!', ['n' => 0]);

Так я сделал, оставил код для изменения формы слова "cтатья" без =0, =1:

  if($count) echo '<span class="first-lesson">'.\Yii::t('app', '{n, plural, one{У нас уже # статья} few{У нас уже # статьи} many{У нас уже # статей} other{Уже # статьи}}!', ['n' => $count]).'</span>';