views:

222

answers:

3

Hi, i want to change the language when the user introduce in the url the locale, something like this http://mysite.com/es/, http://mysite.com/es/article-name, http://mysite.com/en/.

how can i do that?

Thanks

A: 

A number of ways to do this that come to mind. Arguably the most "standards compliant" way would be to use the HTTP Accept-Language header, which is available to views as request.META['HTTP_ACCEPT_LANGUAGE'] to determine the language in which the user prefers to receive resources and simply return a translated HttpResponse in the appropriate language.

Another common way, more along the lines of what you are describing, is to ask the user to select a language on their first arrival and store the selection in the session. Once the user makes a choice, redirect the browser to the appropriate language subdirectory and use relative links in your views so as not to have to worry about crossing languages. You can adjust your URLconf to pass a language keyword to your view like so:

urlpatterns = patterns('',
    (r'^(?P<lang>[a-zA-Z]{2})/ ...

There is an Internationalization/Localization page on the Django documentation site about i18n that might help you get started.

AdmiralNemo
+2  A: 

Checkout django-locale-url: http://code.google.com/p/django-localeurl/

It provides a middleware that does exactly what you are asking for, so you don't need to check for the language in urls.py

DanJ
+1  A: 

there is a great middleware that do this transparent to you, is http://bitbucket.org/carljm/django-localeurl/overview

Mordi