diff --git a/utils/dateformat.py b/utils/dateformat.py index 1fb2da7..dc27313 100644 --- a/utils/dateformat.py +++ b/utils/dateformat.py @@ -16,7 +16,12 @@ from django.conf import settings from django.utils.dateformat import DateFormat, re_escaped from django.utils.formats import get_format 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') @@ -57,12 +62,12 @@ def format(value, format): def time_format(value, format=None, use_l10n=None): # Copy of django.utils.dateformat.time_format, using our extended formatter 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): 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): @@ -99,22 +104,22 @@ def format_date_range(from_date, to_date, variant=DEFAULT_VARIANT): from_date = datetime_to_date(from_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: return date_format(from_date, from_format) else: 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): - from_format = get_format(variant + 'DAYONLY_FORMAT') or 'd' + from_format = get_format(variant + 'DAYONLY_FORMAT', lang=get_language()) or 'd' f = t = "" 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: - 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)) @@ -129,7 +134,7 @@ def format_year_range(start_date, end_date, variant=DEFAULT_VARIANT): if end_year != start_year: 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)) else: return start_year_formatted @@ -144,18 +149,18 @@ def format_time_range(from_time, to_time, variant=DEFAULT_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: - return time_format(from_time, get_format(from_format)) + return time_format(from_time, get_format(from_format), lang=get_language()) else: f = t = "" 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: - 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)) @@ -218,8 +223,7 @@ def format_partial_date(year=None, month=None, day=None, variant=DEFAULT_VARIANT return "" 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() or settings.LANGUAGE_CODE) + partial_date_format = get_format(name, use_l10n=use_l10n, lang=get_language()) return date_format(datetime.date(year or 2000, month or 1, day or 1), partial_date_format)