Переводы, как правильно работать с наименованием количества в Yii2?

Сделал тестовый вывод:
for($i=0; $i<100; $i++) {
                echo \Yii::t('app', 'Тут {n, plural, =0{нет собак} =1{одна собака} few{# собаки1} many{# собак2} other{# собак3} }!', ['n' => $i]);
                echo '<br/>';
            }


Вышло как-то так:
Тут нет собак!
Тут одна собака!
Тут 2 собак3!
Тут 3 собак3!
Тут 4 собак3!
Тут 5 собак3!
Тут 6 собак3!
Тут 7 собак3!
Тут 8 собак3!
Тут 9 собак3!
Тут 10 собак3!
Тут 11 собак3!
Тут 12 собак3!
Тут 13 собак3!
Тут 14 собак3!
Тут 15 собак3!
Тут 16 собак3!
Тут 17 собак3!
Тут 18 собак3!
Тут 19 собак3!
Тут 20 собак3!
Тут 21 собак3!
Тут 22 собак3!
Тут 23 собак3!
Тут 24 собак3!
Тут 25 собак3!
Тут 26 собак3!
Тут 27 собак3!
Тут 28 собак3!
Тут 29 собак3!
Тут 30 собак3!
Тут 31 собак3!
Тут 32 собак3!
Тут 33 собак3!
Тут 34 собак3!
Тут 35 собак3!
Тут 36 собак3!
Тут 37 собак3!
Тут 38 собак3!
Тут 39 собак3!
Тут 40 собак3!


Подскажите, пожалуйста, почему мы попадаем постоянно в other{# собак3} ?

Брал это из доков
https://github.com/yiisoft/yii2/blob/master/docs/g...

Как правильно сделать так:

Тут нет собак!
Тут одна собака!
Тут 2 собаки!
Тут 10 собак!
Тут 21 собака!
  • Вопрос задан
  • 3514 просмотров
Решения вопроса 1
как я понял, few и many даны в качестве примера того, что в языках отличных от английского, могут быть сложные правила, неподпадающие под однозначную трактовку.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
morozovdenis
@morozovdenis
function getLabel($count)
{
if ($count == 0)
return "Нет собак";
if ($count == 1)
return "Одна собака";
if ($count % 100 > 10 && $count % 100 < 20)
return $count . " собак";
switch ($count % 10)
{
case 0: return $count . " собак";
case 1: return $count . " собака";
case 2: return $count . " собаки";
case 3: return $count . " собаки";
case 4: return $count . " собаки";
case 5: return $count . " собак";
case 6: return $count . " собак";
case 7: return $count . " собак";
case 8: return $count . " собак";
case 9: return $count . " собак";
}
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы