#794 closed defect (wontfix)
A template filter that lets the user choose pluralization method
Reported by: | Owned by: | Adrian Holovaty | |
---|---|---|---|
Component: | Template system | Version: | |
Severity: | minor | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
The current pluralization in the default filter adds an s if it should pluralize. While this is often good for english, it is not always, and it is generally not usefull for any other language. Therefore, I wrote a custom pluralization filter that lets the template author specify what the filter should return if it should return anything at all.
Here is the diff:
Index: django/core/template/defaultfilters.py =================================================================== --- django/core/template/defaultfilters.py (revision 1124) +++ django/core/template/defaultfilters.py (arbetskopia) @@ -408,6 +408,22 @@ pass return '' +def custompluralize(value, arg): + """Returns the arg if the value is not 1. Like above, but with + customizable pluralization. Good for i18n""" + try: + if int(value) != 1: + return arg + except ValueError: # invalid string that's not a number + pass + except TypeError: # value isn't a string or a number, maybe it is a list? + try: + if len(value) != 1: + return arg + except TypeError: # len() of unsized object + pass + return '' + def phone2numeric(value, _): "Takes a phone number and converts it in to its numerical equivalent" from django.utils.text import phone2numeric @@ -447,6 +463,7 @@ register_filter('make_list', make_list, False) register_filter('phone2numeric', phone2numeric, False) register_filter('pluralize', pluralize, False) +register_filter('custompluralize', custompluralize, True) register_filter('pprint', pprint, False) register_filter('removetags', removetags, True) register_filter('random', random, False)
Change History (2)
comment:1 by , 19 years ago
comment:2 by , 19 years ago
Resolution: | → wontfix |
---|---|
Status: | new → closed |
Feel free to use this in your own projects, but it's not going into the Django distribution. See Hugo's comment above.
Note:
See TracTickets
for help on using tickets.
Actually this is not really usefull for i18n - languages have different handling of pluralization that goes far beyoned simple "attach string" situations. The pluralization is handled by the {% blocktrasn %} {% plural %} {% endblocktrans %} tag and by the power of gettext, which handles the actual different plural algorithms.