Использование склонений в числительных

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Использование склонений в числительных

Сообщение girmate »

В некоторых местах проекта хотелось бы видеть количество и описание сущности с учетом склонения, например:
- 1 монета, 5 монет, нет монет
или
- 2 пользователя, 7 пользователей и так далее.

Что посоветуете сделать для реализации? Вроде как подключать для этого Yii::t() нецелесообразно? Проект на русском языке, мультиязычность не предусмотрена. Или это как раз тот случай, когда этим можно воспользоваться? То есть даже если перевод не нужен.
Либо написать виджет в который передавать число и некоторый флаг [склоняемое слово]?

Как принято делать?
Последний раз редактировалось girmate 2016.10.06, 22:24, всего редактировалось 1 раз.
Осторожно! Вы общаетесь с новичком ;)
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Использование склонений в числительных

Сообщение samdark »

Yii::t() использовать не обязательно. Можно просто вызвать соответствующий метод форматтера.
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Использование склонений в числительных

Сообщение girmate »

Sam Dark писал(а):Yii::t() использовать не обязательно. Можно просто вызвать соответствующий метод форматтера.
Если Вы имели в виду число прописью, то значит меня неправильно поняли.
Мне нужно изменять окончания сущностей в зависимости от количества (числа).
Осторожно! Вы общаетесь с новичком ;)
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Использование склонений в числительных

Сообщение girmate »

Так ведь Sam Dark говорит, что можно без Yii::t() как-то.
Осторожно! Вы общаетесь с новичком ;)
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Использование склонений в числительных

Сообщение Onotole »

girmate писал(а):
Так ведь Sam Dark говорит, что можно без Yii::t() как-то.
http://php.net/manual/ru/book.intl.php
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Использование склонений в числительных

Сообщение samdark »

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

echo Yii::$app->i18n->format('На диване {n, plural, =0{нет кошек} =1{лежит одна кошка} one{лежит # кошка} few{лежит # кошки} many{лежит # кошек} other{лежит # кошки}}!', ['n' => 0], 'ru_RU');
 
Для краткости можете завернуть в функцию:

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

function f($message, $params)
{
    return Yii::$app->i18n->format($message, $params, 'ru_RU');
}
 
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Использование склонений в числительных

Сообщение girmate »

Отлично. Спасибо. Только в примере из документации не хватает связки =11. Если ее нет, то все попадает в other, и получается неправильное склонение.
Осторожно! Вы общаетесь с новичком ;)
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Использование склонений в числительных

Сообщение Onotole »

=11 попадает под many
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Использование склонений в числительных

Сообщение girmate »

Onotole писал(а):=11 попадает под many
Да что ж со мной не так. Действительно. А ведь читал как от 0 до 5, от 20 до 25. И даже не щелкнуло ничего не в голове, заработался.
Осторожно! Вы общаетесь с новичком ;)
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Использование склонений в числительных

Сообщение girmate »

Из документации: В ICU версии 52.1 было испорчено форматирование множественных чисел (plural) в русском языке. Проблема решается обновлением ICU до версии 53.1 или старше.
А если установлена версия 51.2 (идет по умолчанию с OpenServer) то стоит волноваться?
Осторожно! Вы общаетесь с новичком ;)
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Использование склонений в числительных

Сообщение girmate »

Хотя чуть выше написано:
Чтобы иметь доступ ко всем возможностям, описанным в документации, мы рекомендуем использовать ICU версии 49 или новее.
Так что лишь одна версия испорчена, остальные нормальные (кроме одной).
Осторожно! Вы общаетесь с новичком ;)
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Использование склонений в числительных

Сообщение Onotole »

girmate писал(а):Из документации: В ICU версии 52.1 было испорчено форматирование множественных чисел (plural) в русском языке. Проблема решается обновлением ICU до версии 53.1 или старше.
А если установлена версия 51.2 (идет по умолчанию с OpenServer) то стоит волноваться?
Актуальная версия 57.1. Надо обновляться
Аватара пользователя
Cacatuidae
Сообщения: 65
Зарегистрирован: 2017.01.08, 17:39

Re: Использование склонений в числительных

Сообщение Cacatuidae »

Не могу понять почему так выходит, для всех условий используется только "other"

ICU 58.2
INTL 1.1.0
Yii.language: ru-RU

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

$i = 0;
do {
    print_r(Yii::t('app', 'Здесь {n,plural,=0{котов нет} =1{есть один кот} one{# кот} few{# кота} many{# котов} other{# барсика}}!', ['n' => $i]). PHP_EOL);
} while ($i++ < 21);

Результат:

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

Здесь котов нет!
Здесь есть один кот!
Здесь 2 барсика!
Здесь 3 барсика!
Здесь 4 барсика!
Здесь 5 барсика!
Здесь 6 барсика!
Здесь 7 барсика!
Здесь 8 барсика!
Здесь 9 барсика!
Здесь 10 барсика!
Здесь 11 барсика!
Здесь 12 барсика!
Здесь 13 барсика!
Здесь 14 барсика!
Здесь 15 барсика!
Здесь 16 барсика!
Здесь 17 барсика!
Здесь 18 барсика!
Здесь 19 барсика!
Здесь 20 барсика!
Здесь 21 барсика!
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Использование склонений в числительных

Сообщение samdark »

Версию ICU получили из PHP?
Аватара пользователя
Cacatuidae
Сообщения: 65
Зарегистрирован: 2017.01.08, 17:39

Re: Использование склонений в числительных

Сообщение Cacatuidae »

samdark писал(а): 2017.03.13, 16:18 Версию ICU получили из PHP?
Да.
Компилировал по своей же инструкции
http://www.yiiframework.ru/forum/viewto ... 10#p212223
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Использование склонений в числительных

Сообщение rak »

странно, попробовал у себя и локально и на сервере - та же история
Аватара пользователя
Cacatuidae
Сообщения: 65
Зарегистрирован: 2017.01.08, 17:39

Re: Использование склонений в числительных

Сообщение Cacatuidae »

rak писал(а): 2017.03.13, 16:34 странно, попробовал у себя и локально и на сервере - та же история
А ICU и INTL какой версии? (может это только на 58.x так)
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Использование склонений в числительных

Сообщение rak »

на сервере 55.1
Изображение

локально 57.1
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Использование склонений в числительных

Сообщение Onotole »

На 55.1 так и есть. Надо обновлять до 58.2
Ответить