Домашняя страница Мищенко Михаила
In english

Главная / Заметки / Улучшаем сайт — выбор правильных окончаний

Также известно, что

эта заметка находится в категории кодинг.


И она была просмотрена 430 раз ;-)


Но пока остается без комментариев.

Популярные заметки о программировании:

Добавление сообщений в Twitter на PHP

Добавление сообщений в Twitter на PHP

Улучшаем сайт — выбор правильных окончаний

7 июня 2009

Улучшаем сайт — выбор правильных окончаний

Безграмотность раздражает

Как часто вам приходилось видеть на сайтах безграмотные фразы "3 комментариев" или "Сайт посетили 122 человек"? Я сталкиваюсь с этим регулярно. Числительные употребляется очень часто, а вот позаботиться о правописании некоторые забывают. И это касается не только домашних страниче, а затрагивает сайты газет, муниципальные сайты и также сайты министерств образования.


Безграмотные окончания на сайте министерства образования

Казалось бы мелочь, а отношение уже не то. Можно перестроить предложение, чтобы при любом числе было одно и то же окончание. Напрмер: "Мы рады 133 555-му посетителю". Но я считаю, что это не выход, ведь буквально на следующей странице придется отобразить еще что-нибудь и придется опять перестраивать все предложения.

Некоторые выбирают совсем ужасное решение — оформлять фразу на все случаи жизни: "Сайт посетили 123 человек (а)". Данное решение также является показателем ленивости создателей.

Универсальное решение — как же все просто

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

Принцип работы


Принцип основан на том, что лучше всего подберет окончание человек. На него и перекладывается вся работа. Нужно указать слово в трех вариантах: как оно употребляется с единицей, с двойкой и пятеркой. Например, возьмем слово "рубль". Вызываем функцию SelectCase($Count,"рубль","рубля","рублей"). Все. К любому переданному числу она возвратит правильное окончание.

Функция выбора окончаний

function SelectCase ($Numeral,$ForOne,$ForTwo,$ForOther) {
 $Numeral           = (string) $Numeral;
 $Lenght            = strlen($Numeral);
 $LastCharPosition  = $Lenght - 1; // номер последнего символа в числе

 // форматируем вывод
 if($Numeral[$LastCharPosition]==2||$Numeral[$LastCharPosition]==3||
$Numeral  [$LastCharPosition]==4) {

   // если заканчивается на 2, 3 или 4
   if ($Lenght>1 AND $Numeral[$LastCharPosition-1]==1)
    //если это 12, 113 или в таком духе, т.е. перед числом стоит 1 тогда
    $CorrectCase = $ForOther;
   else
    $CorrectCase = $ForTwo;
 }
 elseif ($Numeral[$LastCharPosition]==1) {
  // для цифр оканчивающихся на 1

  if ($Lenght>1 AND $Numeral[$LastCharPosition-1]==1)
   //если это 11, 111 или в таком духе, т.е. перед числом стоит 1 тогда
   $CorrectCase = $ForOther;
  else
   $CorrectCase = $ForOne;
  }
 else {
  // для 5, 6, 7, 8, 9 10 - все просто
  $CorrectCase = $ForOther;
 }
 return $CorrectCase;
}

Остается только вынести функцию в общий для всех страниц файл и вызывать по мере необходимости.

Мищенко Михаил, 7 июня 2009


Комментарии

Оставить комментарий

Добавление комментария

Имя или псевдоним

Сайт

Почтовый ящик


Текст сообщения

Строка вида http://mysite.com станет ссылкой автоматически


Вы ведь не бот? Сколько будет 6 плюс 9 минус 3?


 

Сделано мной, права тоже мои.
Copyright © 2008–2010

Что-то скопировал?
Ставь ссылку!