дед_мажор
13.03.2008 - 11:43
Когда у меня 22 новых письма, то вверху написано: "22 новых писем".
Ара, по-русски писать надо, да.
Или вообще ничего не писать, чтобы безграмотность не показывать свою.
Нда, а ещё очень популярно и "захватывает" молодёжь "Албанский".Скоро эти "медведы", "креведко" и тд. и тп. "съедят" мозг всех - это меня тоже гнетёт
дед_мажор
ну что ты предпочтешь:
22 новых писем
или
новых писем: 22 (как вариант: новые письма (22))
?
первое информативнее, второе правильнее.
есть конечно готовые библиотеки для склонения русских слов, но это геморрой..
digital_fox
13.03.2008 - 23:22
RoDen
А что сложного?
если на конце 1 кроме 11 - "Новое письмо"
на конце от 2 до 4, кроме 12-14 - "Новых письма"
в остальных случаях - "Новых писем"
digital_fox
13.03.2008 - 23:38
Код |
$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 - то,что выводить на страницу;
дед_мажор
14.03.2008 - 00:29
RoDen
да как угодно, лишь бы по-русски =)
дед_мажор
14.03.2008 - 00:34
digital_fox
substr($mcount,length($mcount),1)
всегда будет false.
и никто не говорит 0 новых писем, говорят: новых писем нет.
digital_fox
14.03.2008 - 00:43
дед_мажор
простите мой ПХП - давно это было ))
Ну а насчет нуля - просто еще одно условие ))
дед_мажор
14.03.2008 - 00:46
раз такая тривиальная задача вызывает столько вопросов, то придется провести внеочередной урок программирования от деда_мажора.
Код |
/** * 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]; } }
|
пользуйтесь на здоровье.
дед_мажор
Цитата |
112 результата 113 результата 114 результата
|
и не работает с отрицательными числами.
дед_мажор
15.03.2008 - 17:49
whisk
авторство — не мое, поэтому отправил багрепорт всем разработчикам.
спасибо за тестирование, почти два года никто не замечал =)
дед_мажор
15.03.2008 - 17:51
Цитата (whisk) |
и не работает с отрицательными числами. |
а с иррациональными и комплексными работает?
дед_мажор
15.03.2008 - 18:01
whisk
вот мой патч:
Код |
} elseif ( ($number % 10) > 1 && ($number % 10) < 5 - && ($number < 10 || $number > 20) + && ($number % 100 < 10 || $number % 100 > 20) ) {
return $cases[1];
|
теперь должно все работать.
Fast Reply:
Powered by dgreen
Здесь расположена полная версия этой страницы.