Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Translate URL patterns and prefix URLs with language-code.
Tree: 1c829b107c

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.


Django URL internationalization

This Django app makes it possible to prefix URL patterns with the active language and to make URL patterns translatable by using gettext. As well this package contains a patch for the LocaleMiddleware so it is able to activate the right language (based on the language-prefix in the requested URL).


During the DjangoCon EU 2011 sprints, I wrote a patch for including this functionality into the Django core. This patch was accepted and will be included in Django 1.4 (thanks to Jannis Leidel and Russell Keith-Magee for their feedback and reviewing the patch).

In the 0.6 version of this package, I rewrote the API so that it will match with the upcoming Django 1.4 version. You can read more about this in the Django documentation (dev).

Translating URL patterns

After installing this package, URL patterns can also be marked translatable using the ugettext_lazy() function. Example:

from django.conf.urls.defaults import patterns, include, url
from django.conf.urls.i18n import i18n_patterns
from django.utils.translation import ugettext_lazy as _

urlpatterns = patterns(''
    url(r'^sitemap\.xml$', 'sitemap.view', name='sitemap_xml'),

news_patterns = patterns(''
    url(r'^$', 'news.views.index', name='index'),
    url(_(r'^category/(?P<slug>[\w-]+)/$'), 'news.views.category', name='category'),
    url(r'^(?P<slug>[\w-]+)/$', 'news.views.details', name='detail'),

urlpatterns += i18n_patterns('',
    url(_(r'^about/$'), 'about.view', name='about'),
    url(_(r'^news/$'), include(news_patterns, namespace='news')),

After you've created the translations, the reverse() function will return the URL in the active language. Example:

from django.core.urlresolvers import reverse
from django.utils.translation import activate

>>> activate('en')
>>> reverse('news:category', kwargs={'slug': 'recent'})

>>> activate('nl')
>>> reverse('news:category', kwargs={'slug': 'recent'})


  • Install the django-i18nurls package (eg: pip install django-i18nurls).
  • Add i18nurls to your settings.INSTALLED_APPS.
  • Add django.middleware.locale.LocaleMiddleware to your settings.MIDDLEWARE_CLASSES (if it is not already there, make sure it comes before the CommonMiddleware).
Something went wrong with that request. Please try again.