Как на PHP сделать правильные окончания слов, зависимых от чисел?
Частенько приходится сталкиваться с необходимостью правильно склонять числительные и связанные с ними слова, например, чтобы на сайте было по-человечески написано "1 комментарий", "2 комментария" или "10 комментариев". Даже в самом распространенном в мире движке - Wordpress - до сих пор никто особо не запаривался на эту тему, поэтому в русской версии там есть только 2 варианта: "1 комментарий", либо "N комментариев", и когда N равно, например, 21, то читается по-идиотски - "21 комментариев".
Да что там Wordpress, даже один из самых популярных сервисов в мире - Instagram - который оценивается в сколько-то там миллиардов долларов и давно имеет локализованную на русский язык версию, но и он забил на правильные окончания слов, вот вам первый попавшийся пример:
Сразу 2 неправильных склонения: "2 публикаций" и "82 подписчиков"
Для правильного склонения достаточно всего лишь одной короткой, простой и от того гениальной PHP-функции, просто укажите 3 варианта склонения для вариантов 1, 2, 5 и готово, передавайте в функцию число, она будет возвращать искомое число + связанный текст с правильными окончаниями:
function ru_plural ($number, $titles = array(/*1*/'комментарий', /*2*/'комментария', /*5*/'комментариев')) { $cases = array (2, 0, 1, 1, 1, 2); return $number.' '.$titles[($number % 100 > 4 && $number % 100 < 20) ? 2 : $cases[min($number % 10, 5)]]; }
P.S. Саму функцию придумал не я, когда-то давно нашел ее где-то.