#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 , 20 years ago
comment:2 by , 20 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.