NounPluralization::pluralize('цвет', 7, false, 'prepositional'); // -> цветах
Я экспериментировал с этим методом, но не уверен в правильности для всех падежей:
// @file morphos/src/Russian/NounPluralization.php
public static function pluralize($word, $count = 2, $animateness = false, $case = NULL)
{
$case = isset($case) ? self::canonizeCase($case) : self::RODIT;
// меняем местами аргументы, если они переданы в старом формате
if (is_string($count) && is_numeric($word)) {
list($count, $word) = [$word, $count];
}
// для адъективных существительных правила склонения проще:
// только две формы
if (self::isAdjectiveNoun($word)) {
if (self::getNumeralForm($count) == self::ONE)
return $case == self::RODIT ? $word : NounDeclension::getCase($word, $case, $animateness);
else
return NounPluralization::getCase($word, $case, $animateness);
}
switch (self::getNumeralForm($count)) {
case self::ONE:
return $case == self::RODIT ? $word : NounDeclension::getCase($word, $case, $animateness);
case self::TWO_FOUR:
if ( $case != self::PREPOSITIONAL ) {
return NounDeclension::getCase($word, $case, $animateness);
}
case self::FIVE_OTHER:
// special case for YEAR >= 5
if ($word === 'год') {
return 'лет';
}
return NounPluralization::getCase($word, $case, $animateness);
}
}