[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Грамотность как показатель уровня качества
дед_мажор
Когда у меня 22 новых письма, то вверху написано: "22 новых писем".

Ара, по-русски писать надо, да.
Или вообще ничего не писать, чтобы безграмотность не показывать свою.
Klepa
Нда, а ещё очень популярно и "захватывает" молодёжь "Албанский".Скоро эти "медведы", "креведко" и тд. и тп. "съедят" мозг всех - это меня тоже гнетёт
RoDen
дед_мажор
ну что ты предпочтешь:

22 новых писем
или
новых писем: 22 (как вариант: новые письма (22))

?


первое информативнее, второе правильнее.
есть конечно готовые библиотеки для склонения русских слов, но это геморрой..
digital_fox
RoDen

А что сложного?
если на конце 1 кроме 11 - "Новое письмо"
на конце от 2 до 4, кроме 12-14 - "Новых письма"
в остальных случаях - "Новых писем"
digital_fox
Код
$mcount="0".$mcount;
if ((substr($mcount,length($mcount),1)=="1") and (substr($mcount,length($mcount)-1,1)!="1")
{$str="Новое письмо";}
else
  {if ((substr($mcount,length($mcount),1)>="2") and (substr($mcount,length($mcount),1)<="4") and (substr($mcount,length($mcount)-1,1)!="1")
{$str="Новых письма";}
   else {$str="Новых писем";}
   }



Где $mcount - переменная количества писем, $str - то,что выводить на страницу;
дед_мажор
RoDen
да как угодно, лишь бы по-русски =)
дед_мажор
digital_fox
substr($mcount,length($mcount),1)
всегда будет false.

и никто не говорит 0 новых писем, говорят: новых писем нет.
digital_fox
дед_мажор
простите мой ПХП - давно это было ))
Ну а насчет нуля - просто еще одно условие ))
дед_мажор
раз такая тривиальная задача вызывает столько вопросов, то придется провести внеочередной урок программирования от деда_мажора.

Код

 /**
  * Selects russian case for number.
  * for example:
  *  1 результат
  *  2 результата
  *  5 результатов
  * @param $number integer
  * @param $cases words to select from array('результат', 'результата', 'результатов')
 **/
 public static function selectCaseForNumber($number, $cases)
 {
  if (($number % 10) == 1 && ($number % 100) != 11) {
   
   return $cases[0];
   
  } elseif (
   ($number % 10) > 1
   && ($number % 10) < 5
   && ($number < 10 || $number > 20)
  ) {
   
   return $cases[1];
   
  } else {
   return $cases[2];
  }
 }


пользуйтесь на здоровье.
whisk
дед_мажор
Цитата

112 результата
113 результата
114 результата

и не работает с отрицательными числами.
дед_мажор
whisk
авторство — не мое, поэтому отправил багрепорт всем разработчикам.

спасибо за тестирование, почти два года никто не замечал =)
дед_мажор
Цитата (whisk)
и не работает с отрицательными числами.

а с иррациональными и комплексными работает?
дед_мажор
whisk
вот мой патч:
Код

                       } elseif (
                               ($number % 10) > 1
                               && ($number % 10) < 5
-                               && ($number < 10 || $number > 20)
+                               && ($number % 100 < 10 || $number % 100 > 20)
                       ) {

                               return $cases[1];


теперь должно все работать.
Fast Reply:

 Enable Smilies |  Enable Signature
Здесь расположена полная версия этой страницы.
Студенческий клуб ostudent.ru и его создатели не несут ответственности за достоверность самостоятельно размещаемой посетителями сайта информации и не могут подтвердить или опровергнуть её.
Рейтинг@Mail.ru
Invision Power Board © 2001-2025 Invision Power Services, Inc.