И так, для того чтобы, например, писать: 1 минута, 2 минуты, 5 минут на прочтение статьи, вместо 1 мин., 2. мин. и 5 мин. на прочтение, нужно написать свою функцию для склонения существительных после числительных.
Для русского языка есть уже выведенное правил, которое поможет в написании такой функции и выглядит оно так:
one => n mod 10 is 1 and n mod 100 is not 11; few => n mod 10 in 2...4 and n mod 100 not in 12...14; many => n mod 10 is 0 or n mod 10 in 5...9 or n mod 100 in 11...14; other => everything else
Реализуем его в виде функции на PHP:
function myPluralsFunc($count, $plurals = []) { $mod10 = $count % 10; $mod100 = $count % 100; if (is_int($count) && $mod10 == 1 && $mod100 != 11) { //one return $plurals[0]; } else if (($mod10 > 1 && $mod10 < 5) && ($mod100 < 12 || $mod100 > 14)) { //few return $plurals[1]; } else if ($mod10 == 0 || ($mod10 > 4 && $mod10 < 10) || ($mod100 > 10 && $mod100 < 15)) { //many return $plurals[2]; } else { //other return $plurals[3]; } }
Пример вызова:
$min = 10; echo 'На прочтение статьи ' . $min . ' ' . myPluralsFunc($min, ['минута', 'минуты', 'минут', 'минуты']); for ($i = 1; $i < 150; $i++) { echo $i . ' ' . myPluralsFunc($i, ['комментарий', 'комментария', 'комментариев', 'коментария']) . '<br />'; } for ($i = 1; $i < 500; $i++) { echo $i . ' ' . myPluralsFunc($i, ['огурец', 'огурца', 'огурцов', 'огурца']) . '<br />'; }
Для украинского языка правило сохраняется:
$min = 7; echo 'На прочитання статті ' . $min . ' ' . myPluralsFunc($min, ['хвилина', 'хвилини', 'хвилин', 'хвилини']);
Комментарии
Комментарии отсутствуют, Вы можете быть первым