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

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

на сайте 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:
Спасибо

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

khim за предоставление других вариантов решения вопроса:
1. pluralforms
2. gettext


habrahabr.ru

  • Web-разработка: Наследование в JavaScript (хабрасеминар)
  • Недавно в Хабре я хотел прочитать небольшой доклад об объектной ориентации и наследовании классов в JavaScript.Объектно-ориентированный Java ScriptДело в том, что в свое время я был в полном восторге, научившись создавать свои собственные объекты и выстраивать цепочки наследования, и решил, что называется, поделиться с другими своими находками и наблюдениями. (=Признаюсь, что в процессе подготовки текстов семинара некоторые вещи я открыл для себя заново и был вновь удивлен теми возможностями, к
  • JavaScript: JavaScript. Создание объектов
  • JavaScript предоставляет разработчикам возможность создавать объекты и работать с ними. Для этого существуют следующие приёмы: Оператор newЛитеральная нотацияКонструкторы объектовАссоциативные массивыИспользуем оператор new Это, наверное, самый легкий способ создания объекта. Вы просто создаете имя объекта и приравниваете его к новому объекту Javascript. //Создаем наш объект var MyObject = new Object(); //Переменные MyObject.id = 5; //Число MyObject.name = "Sample"; //Строка //Функции MyObject
  • JavaScript: Объекты в JavaScript
  • Очередная статья для новичков, наставляющая на верный путь в разработке своих приложений на Javascript. Javascript, помимо стандартных возможностей, предоставляет массу способов использовать объектно-ориентированное программирование. Для этого существуют следующие способы: Оператор newЛитеральная нотацияКонструкторы объектовПрототипыАссоциативные массивыИспользуем оператор new Это, наверное, самый легкий способ создания объекта. Вы просто создаете имя объекта и приравниваете его к новому объект
  • Web-разработка: Практический JS: ускоряем обработку событий
  • Примечание: ниже перевод статьи "Event delegation without a JavaScript library", посвященной обзору методов по назначению обработчиков событий в JavaScript и их возможной оптимизации, она дополнена моими комментариями и практической частью.Большинство статей и примеров, которые я видел в последнее время по переопределению событий, основывались на какой-либо распространенной библиотеке. Например, в своей хорошо известной статье Chris Heilmann применяет YUI-библиотеку, а в прошлом месяце Dan Webb
  • Ruby: 10 причин для перехода на Ruby
  • Я познакомился с Ruby сравнительно недавно, благодаря чудесному фреймворку Ruby on Rails. Я не считаю себя экспертом в Ruby, но я прочитал PickAxe, написал несколько утилит на Ruby для личного пользования, а также разрабатываю на Rails в свободное время. Ruby на данный момент, мой основной язык. Начинал же я с TurboPascal в школе, изучал C и C++ в университете, дисертацию писал на Java, а еще я изучал PHP с нуля, так как хотел научиться делать веб-сайты быстро и легко. Думаю, что написание код

Leave a Reply

You must be logged in to post a comment.