Browse Source

Make sure get_format has an active language, because self-defined

formats won't be fetched without it.
backports/m1-live
Erik Stein 8 years ago
parent
commit
490d17bd7b
  1. 38
      utils/dateformat.py

38
utils/dateformat.py

@ -16,7 +16,12 @@ from django.conf import settings
from django.utils.dateformat import DateFormat, re_escaped from django.utils.dateformat import DateFormat, re_escaped
from django.utils.formats import get_format from django.utils.formats import get_format
from django.utils.encoding import force_text from django.utils.encoding import force_text
from django.utils.translation import get_language, ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
# All get_format call make sure that there is a language code returned
# (our get_language at least returns FALLBACK_LANGUAGE_CODE), because self-defined
# translation does not work without it
from .translation import get_language
DEFAULT_VARIANT = getattr(settings, 'DEFAULT_DATE_VARIANT', 'SHORT') DEFAULT_VARIANT = getattr(settings, 'DEFAULT_DATE_VARIANT', 'SHORT')
@ -57,12 +62,12 @@ def format(value, format):
def time_format(value, format=None, use_l10n=None): def time_format(value, format=None, use_l10n=None):
# Copy of django.utils.dateformat.time_format, using our extended formatter # Copy of django.utils.dateformat.time_format, using our extended formatter
tf = ExtendedFormat(value) tf = ExtendedFormat(value)
return tf.format(get_format(format or 'DATE_FORMAT', use_l10n=use_l10n)) return tf.format(get_format(format or 'DATE_FORMAT', use_l10n=use_l10n, lang=get_language()))
def date_format(value, format=None, use_l10n=None): def date_format(value, format=None, use_l10n=None):
df = ExtendedFormat(value) df = ExtendedFormat(value)
return df.format(get_format(format or 'DATE_FORMAT', use_l10n=use_l10n)) return df.format(get_format(format or 'DATE_FORMAT', use_l10n=use_l10n, lang=get_language()))
def _normalize_variant(variant): def _normalize_variant(variant):
@ -99,22 +104,22 @@ def format_date_range(from_date, to_date, variant=DEFAULT_VARIANT):
from_date = datetime_to_date(from_date) from_date = datetime_to_date(from_date)
to_date = datetime_to_date(to_date) to_date = datetime_to_date(to_date)
from_format = to_format = get_format(variant + 'DATE_FORMAT') from_format = to_format = get_format(variant + 'DATE_FORMAT', lang=get_language())
if from_date == to_date or not to_date: if from_date == to_date or not to_date:
return date_format(from_date, from_format) return date_format(from_date, from_format)
else: else:
if (from_date.year == to_date.year): if (from_date.year == to_date.year):
from_format = get_format(variant + 'DAYMONTH_FORMAT') or 'd/m/' from_format = get_format(variant + 'DAYMONTH_FORMAT', lang=get_language()) or 'd/m/'
if (from_date.month == to_date.month): if (from_date.month == to_date.month):
from_format = get_format(variant + 'DAYONLY_FORMAT') or 'd' from_format = get_format(variant + 'DAYONLY_FORMAT', lang=get_language()) or 'd'
f = t = "" f = t = ""
if from_date: if from_date:
f = date_format(from_date, get_format(from_format)) f = date_format(from_date, get_format(from_format), lang=get_language())
if to_date: if to_date:
t = date_format(to_date, get_format(to_format)) t = date_format(to_date, get_format(to_format), lang=get_language())
separator = get_format('DATE_RANGE_SEPARATOR') or " - " separator = get_format('DATE_RANGE_SEPARATOR', lang=get_language()) or " - "
return separator.join((f, t)) return separator.join((f, t))
@ -129,7 +134,7 @@ def format_year_range(start_date, end_date, variant=DEFAULT_VARIANT):
if end_year != start_year: if end_year != start_year:
end_year_formatted = format_partial_date(year=end_year, variant=variant) end_year_formatted = format_partial_date(year=end_year, variant=variant)
separator = get_format('DATE_RANGE_SEPARATOR') or " - " separator = get_format('DATE_RANGE_SEPARATOR', lang=get_language()) or " - "
return separator.join((start_year_formatted, end_year_formatted)) return separator.join((start_year_formatted, end_year_formatted))
else: else:
return start_year_formatted return start_year_formatted
@ -144,18 +149,18 @@ def format_time_range(from_time, to_time, variant=DEFAULT_VARIANT):
variant = _normalize_variant(variant) variant = _normalize_variant(variant)
from_format = to_format = "q" # get_format(variant + 'TIME_FORMAT') from_format = to_format = "q" # get_format(variant + 'TIME_FORMAT', lang=get_language())
if from_time == to_time or not to_time: if from_time == to_time or not to_time:
return time_format(from_time, get_format(from_format)) return time_format(from_time, get_format(from_format), lang=get_language())
else: else:
f = t = "" f = t = ""
if from_time: if from_time:
f = time_format(from_time, get_format(from_format)) f = time_format(from_time, get_format(from_format), lang=get_language())
if to_time: if to_time:
t = time_format(to_time, get_format(to_format)) t = time_format(to_time, get_format(to_format), lang=get_language())
separator = get_format('DATE_RANGE_SEPARATOR') or "" separator = get_format('DATE_RANGE_SEPARATOR', lang=get_language()) or ""
return separator.join((f, t)) return separator.join((f, t))
@ -218,8 +223,7 @@ def format_partial_date(year=None, month=None, day=None, variant=DEFAULT_VARIANT
return "" return ""
name = _normalize_variant(variant) + format_name name = _normalize_variant(variant) + format_name
# TODO Django bug or what? Sometimes get_language returns None, therefore force a language here partial_date_format = get_format(name, use_l10n=use_l10n, lang=get_language())
partial_date_format = get_format(name, use_l10n=use_l10n) # , lang=get_language() or settings.LANGUAGE_CODE)
return date_format(datetime.date(year or 2000, month or 1, day or 1), partial_date_format) return date_format(datetime.date(year or 2000, month or 1, day or 1), partial_date_format)

Loading…
Cancel
Save