Вход в аккаунт

Забыли пароль? Воспользуйтесь восстановлением пароля.

Нет аккаунта? Пожалуйста, зарегистрируйтесь.

PROzavr
  • Парсеры
    • Парсер заголовков, описаний и ключевиков сайтов
    • Парсер картинок с сайтов
    • Подбор ключевых слов (тегов) для Ютуба
    • Скачивание превью картинок Ютуб видео и каналов
  • Чекеры
    • Массовая проверка наличия ссылок
    • Массовая проверка ответа сервера
    • Массовая проверка доменов на занятость
    • Проверка посещаемости сайтов
    • Проверить Яндекс ИКС сайтов
    • Массовое определение ip сайтов
  • Разное
    • Онлайн обработка текстовых строк
    • Расшифровка коротких ссылок
    • Генератор паролей
    • Генератор случайных чисел
    • Калькулятор IP подсетей
    • Информация об IP адресе
    • Список всех сервисов
  • PRO-аккаунты
  • Статьи
  • Новости
  • Контакты
  • Вход для PRO

Как на PHP сделать правильные окончания слов, зависимых от чисел?

Частенько приходится сталкиваться с необходимостью правильно склонять числительные и связанные с ними слова, например, чтобы на сайте было по-человечески написано "1 комментарий", "2 комментария" или "10 комментариев". Даже в самом распространенном в мире движке - Wordpress - до сих пор никто особо не запаривался на эту тему, поэтому в русской версии там есть только 2 варианта: "1 комментарий", либо "N комментариев", и когда N равно, например, 21, то читается по-идиотски - "21 комментариев".

Да что там Wordpress, даже один из самых популярных сервисов в мире - Instagram - который оценивается в сколько-то там миллиардов долларов и давно имеет локализованную на русский язык версию, но и он забил на правильные окончания слов, вот вам первый попавшийся пример:

Даже сам 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. Саму функцию придумал не я, когда-то давно нашел ее где-то.

© 2013 - 2025 Prozavr.ru