Довольно часто на сайтах встречаются нелепые словесные конструкции, которыми
программист обезличено хотел показать какой либо количественный параметр,
например:
на сайте 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
Источник:
http://animal.habrahabr.ru/
С тех пор, как появилась Альтависта, большинство посетителей стали приходить
на сайты из поисковых машин. И головной боли стало больше. Теперь мало написать
сайт, нужно сделать его совместимым с поисковыми ботами. Одна из тех задач,
которую приходится решать — быстрая переиндексация обновлений на сайте.
Поисковые роботы чаще посещают те сайты, которые чаще меняются.
Наконец-то я могу поделиться тем, чему уже давно радуюсь сам: Google
открывает исходники Protocol Buffers! Что это и почему надо радоваться? Это
простой и удобный способ обмена данными. Можно сказать, альтернатива XML, но
гораздо менее амбициозная и (поэтому) более быстрая и компактная. Далее -
перевод отрывка
анонса в блоге Open Source at Google и пример использования.
В данной статье рассмотрена программа VivaVisualCode, демонстрирующая
использование библиотеки VivaCore. Программа VivaVisualCode графически
отображает дерево разбора для вводимого исходного кода на языке Си++.