Игорь Пашев - Числовое склонение

Nov. 8th, 2008

08:54 pm - Числовое склонение

Previous Entry Add to Memories Tell A Friend Next Entry

Раздражает, когда на сайте или в программе
написано «21 страниц» или ещё хуже «17 страниц(а, ы)»
(ещё бывают извращения — «Число страниц: 13»)
Склонение делается достаточно просто
по двум последним цифрам числа.



Пример на PHP:

<?php
function make_papers_count_words($n)
{
    global $papers_count_ru, $papers_count_en;

    $d  = substr  ($n, -1);
    $dd = substr  ($n, -2);

    if ($d == 0)
        $words = 'печатных работ';
    else
        if ($dd > 10)
            if ($dd < 20)
                $words = 'печатных работ';
            else
                if ($d == 1)
                    $words = 'печатная работа';
                else
                    if ($d < 5)
                        $words = 'печатные работы';
                    else
                        $words = 'печатных работ';
        else
            if ($d == 1)
                $words = 'печатная работа';
            else
                if ($d < 5)
                    $words = 'печатные работы';
                else
                    $words = 'печатных работ';

    $papers_count_ru = "$n $words";
    $papers_count_en = ($n > 1) ? "$n papers" : "$n paper";
}
?>


Пример на языке шаблона Многосёрча:
<!SET NAME="d" CONTENT="$(PerSite:-1)">
<!SET NAME="dd" CONTENT="$(PerSite:-2)">

<!SET NAME="wfound" CONTENT="найдены">
<!IF NAME="d" CONTENT="0">
  <!SET NAME="npages" CONTENT="страниц">
<!ELSE>
  <!IFGT NAME="dd" CONTENT="10">
    <!IFLT NAME="dd" CONTENT="20">
      <!SET NAME="npages" CONTENT="страниц">
    <!ELSE>
      <!IF NAME="d" CONTENT="1">
        <!SET NAME="npages" CONTENT="страница">
        <!SET NAME="wfound" CONTENT="найдена">
      <!ELSE>
        <!IFLT NAME="d" CONTENT="5">
          <!SET NAME="npages" CONTENT="страницы">
        <!ELSE>
          <!SET NAME="npages" CONTENT="страниц">
        <!ENDIF>
      <!ENDIF>
    <!ENDIF>
  <!ELSE>
    <!IF NAME="d" CONTENT="1">
      <!SET NAME="npages" CONTENT="страница">
      <!SET NAME="wfound" CONTENT="найдена">
    <!ELSE>
      <!IFLT NAME="d" CONTENT="5">
        <!SET NAME="npages" CONTENT="страницы">
      <!ELSE>
        <!SET NAME="npages" CONTENT="страниц">
      <!ENDIF>
    <!ENDIF>
  <!ENDIF>
<!ENDIF>

Tags: , , ,
(Оставить комментарий)