# pytils demo

## pytils.numeral

### pytils.numeral.choose_plural и pytils.numera.get_plural

Выбор нужной формы множественного числа. Классический пример с количеством комментариев: ${comment_number} ${pytils.numeral.choose_plural(comment_number, comment_variants)}, а можно передавать только окончания: ${comment_number} комментари${pytils.numeral.choose_plural(comment_number, u"й,я,ев")}

Код примера: ``

    <p>Выбор нужной формы множественного числа. Классический пример с количеством
    комментариев: $${comment_number}
    <em>$${pytils.numeral.choose_plural(comment_number, comment_variants)}</em>,
    а можно передавать только окончания: $${comment_number}
    комментари<em>$${pytils.numeral.choose_plural(comment_number, u"й,я,ев")}</em>
    </p>

Зачастую нужно показывать и число, и название объекта в правильной форме, а не только название объекта. В этом случае следует воспользоваться фильтром `get_plural`. Пример с теми же комментариями можно записать проще: ${pytils.numeral.get_plural(comment_number, u"комментарий,комментария,комментариев")}. `get_plural` удобен еще и тем, что можно указать вариант, когда значение равно нулю. Например, гораздо симпатичней "без комментариев", чем "0 комментариев". В этом случае третим параметром передается нуль-вариант. Пример: ${pytils.numeral.get_plural(zero, u"пример,примера,примеров", u"без примеров")}.

Сделано это так: ``

    <p>Зачастую нужно показывать и число, и название объекта в правильной форме, а не только название
    объекта. В этом случае следует воспользоваться фильтром <code>get_plural</code>. Пример с теми же
    комментариями можно записать проще:
    <em>$${pytils.numeral.get_plural(comment_number, u"комментарий,комментария,комментариев")}</em>.
    <code>get_plural</code> удобен еще и тем, что можно указать вариант, когда значение равно нулю.
    Например, гораздо симпатичней "без комментариев", чем "0 комментариев". В этом случае третим
    параметром передается нуль-вариант. Пример:
    <em>$${pytils.numeral.get_plural(zero, u"пример,примера,примеров", u"без примеров")}</em>.</p>

### pytils.numeral.rubles

Рубли словами. К примеру, ${rubles_value} р. словами будет ${pytils.numeral.rubles(rubles_value)}. У этой функции есть один дополнительный параметр `zero_for_kopeck`, определяющий, нужно ли нулевые копейки "проговаривать". Если нужно - то True, по умолчанию `rubles` этого не делает. Пример: ${rubles_value2} р. словами будет ${pytils.numeral.rubles(rubles_value2)}, а с копейками - ${pytils.numeral.rubles(rubles_value2, zero_for_kopeck=True)}.

Данный пример в шаблоне записан так: ``

    <p>Рубли словами. К примеру, $${rubles_value} р. словами будет
    <em>$${pytils.numeral.rubles(rubles_value)}</em>. У этой функции есть один
    дополнительный параметр <code>zero_for_kopeck</code>, определяющий, нужно ли
    нулевые копейки "проговаривать". Если нужно - то True, по умолчанию
    <code>rubles</code> этого не делает.
    Пример: $${rubles_value2} р. словами будет <em>$${pytils.numeral.rubles(rubles_value2)}</em>,
    а с копейками - <em>$${pytils.numeral.rubles(rubles_value2, zero_for_kopeck=True)}</em>.</p>

### pytils.numeral.in_words

Число словами. Можно целые, можно дробные. Примеры: ${int_value} - ${pytils.numeral.in_words(int_value)}. У целых можно менять пол (по умолчанию - мужской, pytils.numeral.MALE): ${pytils.numeral.in_words(int_value, gender=pytils.numeral.FEMALE)} (женский), ${pytils.numeral.in_words(int_value, gender=pytils.numeral.NEUTER)} (средний).

У дробных почти то же самое, только пол женский и не меняется (т.е. параметр передавать можно, но он не будет влиять). ${float_value} словами будет ${pytils.numeral.in_words(float_value)}.

В шаблоне этот текст выглядит следующим образом: ``

    <p>Число словами. Можно целые, можно дробные. Примеры: $${int_value} -
    <em>$${pytils.numeral.in_words(int_value)}</em>. У целых можно менять пол
    (по умолчанию - мужской, pytils.numeral.MALE):
    <em>$${pytils.numeral.in_words(int_value, gender=pytils.numeral.FEMALE)}</em> (женский),
    <em>$${pytils.numeral.in_words(int_value, gender=pytils.numeral.NEUTER)}</em> (средний).</p>

    <p>У дробных почти то же самое, только пол женский и не меняется (т.е. параметр
    передавать можно, но он не будет влиять). $${float_value} словами будет
    <em>$${pytils.numeral.in_words(float_value)}</em>.</p>

### pytils.numeral.sum_string

Наиболее общая функция работы с числами. Умеет "проговаривать" числа и одновременно представлять название объекта в нужной форме. Например, вместо ${comment_number} комментарий(ев) можно смело писать ${pytils.numeral.sum_string(comment_number, comment_gender, comment_variants)}.

В коде рализовано так: ``

    <p>Наиболее общая функция работы с числами. Умеет "проговаривать" числа и
    одновременно представлять название объекта в нужной форме. Например, вместо
    $${comment_number} комментарий(ев) можно смело писать
    <em>$${pytils.numeral.sum_string(comment_number, comment_gender, comment_variants)}</em>.
    </p>