summaryrefslogtreecommitdiff
path: root/django/contrib/humanize
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2020-05-22 20:39:47 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-06-01 07:27:08 +0200
commitbd4e409695f8d6deebb1b3f70ffb9bc670477c2a (patch)
tree4c4c044b026c252459eae70792efcb5649c61980 /django/contrib/humanize
parent7514852767c4723322f5799a2bd25b7ca263e3b0 (diff)
Made intword/intcomma template filters independent of USE_L10N.
Diffstat (limited to 'django/contrib/humanize')
-rw-r--r--django/contrib/humanize/templatetags/humanize.py77
1 files changed, 17 insertions, 60 deletions
diff --git a/django/contrib/humanize/templatetags/humanize.py b/django/contrib/humanize/templatetags/humanize.py
index 18a53adbe4..753a0d9fe1 100644
--- a/django/contrib/humanize/templatetags/humanize.py
+++ b/django/contrib/humanize/templatetags/humanize.py
@@ -3,7 +3,6 @@ from datetime import date, datetime
from decimal import Decimal
from django import template
-from django.conf import settings
from django.template import defaultfilters
from django.utils.formats import number_format
from django.utils.safestring import mark_safe
@@ -63,14 +62,14 @@ def intcomma(value, use_l10n=True):
Convert an integer to a string containing commas every three digits.
For example, 3000 becomes '3,000' and 45000 becomes '45,000'.
"""
- if settings.USE_L10N and use_l10n:
+ if use_l10n:
try:
if not isinstance(value, (float, Decimal)):
value = int(value)
except (TypeError, ValueError):
return intcomma(value, False)
else:
- return number_format(value, force_grouping=True)
+ return number_format(value, use_l10n=True, force_grouping=True)
orig = str(value)
new = re.sub(r"^(-?\d+)(\d{3})", r'\g<1>,\g<2>', orig)
if orig == new:
@@ -81,50 +80,17 @@ def intcomma(value, use_l10n=True):
# A tuple of standard large number to their converters
intword_converters = (
- (6, lambda number: (
- ngettext('%(value).1f million', '%(value).1f million', number),
- ngettext('%(value)s million', '%(value)s million', number),
- )),
- (9, lambda number: (
- ngettext('%(value).1f billion', '%(value).1f billion', number),
- ngettext('%(value)s billion', '%(value)s billion', number),
- )),
- (12, lambda number: (
- ngettext('%(value).1f trillion', '%(value).1f trillion', number),
- ngettext('%(value)s trillion', '%(value)s trillion', number),
- )),
- (15, lambda number: (
- ngettext('%(value).1f quadrillion', '%(value).1f quadrillion', number),
- ngettext('%(value)s quadrillion', '%(value)s quadrillion', number),
- )),
- (18, lambda number: (
- ngettext('%(value).1f quintillion', '%(value).1f quintillion', number),
- ngettext('%(value)s quintillion', '%(value)s quintillion', number),
- )),
- (21, lambda number: (
- ngettext('%(value).1f sextillion', '%(value).1f sextillion', number),
- ngettext('%(value)s sextillion', '%(value)s sextillion', number),
- )),
- (24, lambda number: (
- ngettext('%(value).1f septillion', '%(value).1f septillion', number),
- ngettext('%(value)s septillion', '%(value)s septillion', number),
- )),
- (27, lambda number: (
- ngettext('%(value).1f octillion', '%(value).1f octillion', number),
- ngettext('%(value)s octillion', '%(value)s octillion', number),
- )),
- (30, lambda number: (
- ngettext('%(value).1f nonillion', '%(value).1f nonillion', number),
- ngettext('%(value)s nonillion', '%(value)s nonillion', number),
- )),
- (33, lambda number: (
- ngettext('%(value).1f decillion', '%(value).1f decillion', number),
- ngettext('%(value)s decillion', '%(value)s decillion', number),
- )),
- (100, lambda number: (
- ngettext('%(value).1f googol', '%(value).1f googol', number),
- ngettext('%(value)s googol', '%(value)s googol', number),
- )),
+ (6, lambda number: ngettext('%(value)s million', '%(value)s million', number)),
+ (9, lambda number: ngettext('%(value)s billion', '%(value)s billion', number)),
+ (12, lambda number: ngettext('%(value)s trillion', '%(value)s trillion', number)),
+ (15, lambda number: ngettext('%(value)s quadrillion', '%(value)s quadrillion', number)),
+ (18, lambda number: ngettext('%(value)s quintillion', '%(value)s quintillion', number)),
+ (21, lambda number: ngettext('%(value)s sextillion', '%(value)s sextillion', number)),
+ (24, lambda number: ngettext('%(value)s septillion', '%(value)s septillion', number)),
+ (27, lambda number: ngettext('%(value)s octillion', '%(value)s octillion', number)),
+ (30, lambda number: ngettext('%(value)s nonillion', '%(value)s nonillion', number)),
+ (33, lambda number: ngettext('%(value)s decillion', '%(value)s decillion', number)),
+ (100, lambda number: ngettext('%(value)s googol', '%(value)s googol', number)),
)
@@ -144,23 +110,14 @@ def intword(value):
if abs_value < 1000000:
return value
- def _check_for_i18n(value, float_formatted, string_formatted):
- """
- Use the i18n enabled defaultfilters.floatformat if possible
- """
- if settings.USE_L10N:
- value = defaultfilters.floatformat(value, 1)
- template = string_formatted
- else:
- template = float_formatted
- return template % {'value': value}
-
- for exponent, converters in intword_converters:
+ for exponent, converter in intword_converters:
large_number = 10 ** exponent
if abs_value < large_number * 1000:
new_value = value / large_number
rounded_value = round_away_from_one(new_value)
- return _check_for_i18n(new_value, *converters(abs(rounded_value)))
+ return converter(abs(rounded_value)) % {
+ 'value': defaultfilters.floatformat(new_value, 1),
+ }
return value