### Middleware from django.conf import settings from django.utils import translation from django.http import Http404 class I18nUrlsMiddleware(object): """ This is a very simple middleware that checks if the view being requested is about to receive a "dj_culture" parameter. If this is the case, this middleware removes this argument and uses it to initialize Django's i18n system with the requested culture if it is one of the supported cultures. """ def handle_culture(self,request,culture): translation.activate(culture) request.LANGUAGE_CODE = translation.get_language() def process_view(self, request, view_func, view_args, view_kwargs): culture = view_kwargs.get('dj_culture',None) if culture: ret = None if culture in settings.CULTURES: ret = self.handle_culture(request,culture) else: # Fallback for the lazy of us who prefer to keep things simple. pcult = culture.split('-')[0] if pcult in settings.CULTURES: ret = self.handle_culture(request,pcult) else: raise Http404 # Remove the culture parameter again so that we can use all our # old views. del(view_kwargs['dj_culture']) return ret ### URLs from django.conf.urls.defaults import * urlpatterns = patterns('', (r'(?P[\w-]+)/','views.index'), )