Najważniejszą rzeczą, jaką powinniście wiedzieć na temat filtra pluralize jest ta, żeby go nigdy nie używać. Nigdy. Jego istnienie wynika z lenistwa ludzi, którzy nigdy w życiu nie przygotowywali aplikacji do tłumaczenia. Jeśli nie wyraziłem się dość jasno, używanie filtra pluralize wywoła u ciebie raka, stereoporoże i zatwardzenie rozsiane.
Jakkolwiek sprytnie by nie wyglądał, ten kod nie nadaje się do niczego:
<p>
There {{ item_count|pluralize:"is,are" }}
{{ item_count }} thing{{ item_count|pluralize:"s" }}.
</p>
Dlaczego się nie nadaje? Spróbujcie go przetłumaczyć na kilka języków. Niektórzy chwytają się brzydkich obejść, inni wolą zrobić to zgodnie ze sztuką. Jeśli kiedykolwiek pracowaliście przy lokalizacji oprogramowania, doskonale wiecie, że tłumaczenie jednego słowa jest tak samo sensowne, jak tłumaczenie każdej litery z osobna.
Poprawna wersja jest przy okazji czytelna:
<p>
{% blocktrans count item_count as items %}
There is {{ items }} thing.
{% plural %}
There are {{ items }} things.
{% endblocktrans %}
</p>
{% blocktrans %} z {% plural %} używają ungettext, dzięki czemu bez konieczności odprawiania czarów radzą sobie z polskimi liczebnikami (jeden tysiąc, dwa tysiące, pięć tysięcy
).


by zwierzak
04 mar 2010 at 17:09
Bardzo dobra informacja, nie wiedziałem, że można tak wykorzystać blocktrans’a.
Odnośnie pytania kto to stosuje. Nie zawsze robi się międzynarodowe aplikację, czasami jest potrzeba na szybko napisania jakiegoś serwisu, który ma tylko działać i nie będzie rozwijany. Wtedy można stosować takie nie do końca poprawne znaczki.
by DeeJay1
05 mar 2010 at 10:43
IMHO duża część serwisów, która ma „tylko” działać, zazwyczaj po jakimś czase musi zostać przepisana od zera, bo wychodzi szybciej niż rozwinięcie istniejącej, szczególnie jeśli chodzi o i18n (debugowanie działania gettextu w wielowątkowych aplikacjach nie jest fajne…)