UPDATE! This is going to be redundant in Django 1.2, in which you can add DATE_FORMAT to your django.po files.
I’ve often been frustrated that using settings.DATE_FORMAT does not give a localized date. Granted that the name of a month may be localized, but the format string does not change. So let’s start out by modifying settings.py. We wrap our default date format in a ugettext so the makemessages command will detect it, and we need to make it a dummy function, because the i18n library cannot be imported in settings.py due to circularity (it depends on settings.py).
ugettext = lambda s: s DATE_FORMAT = ugettext('N j, Y')
Run compilemessages and type in your localized date formats. Now we need a template filter that uses a localized format for calling the Django date format function. This is really simple:
from django.template.defaultfilters import stringfilter from django.utils import dateformat from django.utils.translation import ugettext from django.conf import settings @register.filter() def localdate(value): """Format date with localized date format""" format = ugettext(settings.DATE_FORMAT) return dateformat.format(value, format)
And done. Using the filter is straight forward:
Date: {{ my_date|localdate }}
