Как стать автором
Поиск
Написать публикацию
Обновить

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

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

на сайте 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

Публикации

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