Как стать автором
Обновить

Множественные числа

Время на прочтение1 мин
Количество просмотров2.8K
Довольно часто на сайтах встречаются нелепые словесные конструкции, которыми программист обезличено хотел показать какой либо количественный параметр, например:

на сайте 22 человек ( а должно быть 22 человека )
1 комментариев ( понятно, что расчёт шёл на 10+ комментариев, но это не выход )

Но на самом деле это не проблема!
Для того, что бы всё делать красиво, достаточно совсем чуть-чуть кода

class datext{
   public static function proceedTextual( $numeric, $many, $one, $two )
   {
		$numeric = (int) abs($numeric);
		if ( (numeric % 100 == 1 || ($numeric % 100 > 20) && ( $numeric % 10 == 1 ) ) return $one;
		if ( $numeric % 100 == 2 || ($numeric % 100 > 20) && ( $numeric % 10 == 2 ) ) return $two;
		if ( $numeric % 100 == 3 || ($numeric % 100 > 20) && ( $numeric % 10 == 3 ) ) return $two;
		if ( $numeric % 100 == 4 || ($numeric % 100 > 20) && ( $numeric % 10 == 4 ) ) return $two;
		
		return $many;
	}
}


В класс функция внесена, что бы не дай бог не пересечья названием с уже используемой.
Статической сделана для того, что бы не требовалось создавать экземпляр класса.

Ну а теперь примеры:
 echo "21 ".datext::proceedTextual( 21, 'комментариев', 'комментарий', 'комментария' );

на выходе получаем "21 комментарий"
 echo "онлайн 152 ".datext::proceedTextual( 152, 'человек', 'человек', 'человека' );

на выходе получаем "онлайн 152 человека"

update:
Спасибо khim за предоставление других вариантов решения вопроса:
1. pluralforms
2. gettext
Теги:
Хабы:
Всего голосов 44: ↑39 и ↓5+34
Комментарии92

Публикации

Истории

Работа

PHP программист
106 вакансий

Ближайшие события

15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань