Форумы / National / Russian / Зоопарк с окончаниями

dervan
#7444 10.02.2009 01:15
Можно так:
$last = count($expr) - 1;
$res = $digit . (($last >= 0 && $plural <= $last) ? " {$expr[$plural]}" : '');
Здесь предполагается, что $plural не может быть меньше 0.

Глянул сейчас в getPlural() ветку для английского языка - неправильно будет работать. Параметр $plural на входе getPlural() - это остаток от деления на 100, т.е. для 1, 101, 201 и т.д. будут выводиться слова как для 1. Надо поправить эту строку
$i=preg_replace('/[^0-9]+/s','',$digit)%100; //intval не всегда корректно работает
на такую
$i=preg_replace('/[^0-9]+/s','',$digit);

А в функцище getPlural() в ветке для русского языка перед return добавить
$plural %= 100;

Ratibor, если хочешь - давай я перепишу всё это дело покомпактнее и без замеченных ошибок, а ты потом посмотришь.