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 }}