Django es el entorno de desarrollo web para perfeccionistas con límites de tiempo

Snippet de vista para i18n

Una de las cosas que nos ofrece Django es vistas genéricas y soporte para localización (aka i10n) e internacionalización (aka i18n). Entonces una vez tenemos nuestro sitio con i18n o i10n pues lo que sigue es que le demos a nuestros usuarios la manera de escoger su idioma, Django tiene un algoritmo par esto, sin embargo en algún punto nuestros usuarios querrán poder escoger su idioma preferido, para esto este framework nos da la opcion de una vista generica, sobre la cual encontraréis información en http://docs.djangoproject.com/en/dev/topics/i18n/#the-set-language-redirect-view.

Lo único es que esta vista espera que haya un formulario para que el usuario escoja su idioma y además que tengamos predefinida una página a la cual el usuario será redirigido después de seleccionar el idioma a lo cual le veo particularmente un inconveniente, pues si el usuario ha llegado a un punto importante para él y es llevado a la página inicial no le agradará (en mi caso me molestaría). Además, ¿y si queremos tener la posibilidad de hacerlo desde una url y no una variable por post?

Para resolver este conflicto se modifica un poco la vista que nos trae Django y la dejamos así:

def set_lang(request,lang):
   response = HttpResponseRedirect(request.META['HTTP_REFERER'])
   lang_code = u'%s' % lang
   if lang_code and check_for_language(lang_code):
      if hasattr(request, 'session'):
         request.session['django_language'] = lang_code
      else:
         response.set_cookie(settings.LANGUAGE_COOKIE_NAME, lang_code)
return response

Esta vista espera que se escoja el idioma por una url y además redireccionará al usuario a la página en la que se encontraba, podemos hacerlo incluso en el urls.py y finalmente escogemos la url:

urlpatterns = patterns('',
   ...
   (r'^set_lang/(?P<lang>\w{2})/$',set_lang),
   ...
)

De esta manera si se va a /set_lang/es/ Django cargará todo nuestro sitio en español y volvera a la vista en la que lo hayamos hecho.

Publicado por Diego Andrés el Friday 20 de March de 2009 Compártelo: Facebook: Twitter: | Categorías: internacionalización, snippets, traducciones, trucos

Entradas similares

Templatetag {% if %} con más comparaciones

Este snippet reemplaza la funcionalidad del templatetag {% if %} permitiendo realizar comparaciones con operadores >, <, >=, <=, != además de las comparaciones que permite hacer {% if %} por defecto. Por ...


Subdominios con Django

En ocasiones nos interesa trabajar con subdominios en nuestros proyectos Django. Para ello podemos utilizar un sencillo middleware para subdominios que podemos encontrar en ...


 
Templatetags globales en nuestros proyectos Django

Los templatetags de Django son a nivel de aplicación. Sin embargo a veces nos gustaría que distintas aplicaciones compartieran templatetags ó evitarnos tener que ...


Slughifi: slugs a prueba de caracteres internacionales

Slughifi es un código que mejora las características de la función slugify de django.template.defaultfilters. Soporta muchos más caracteres internacionales con todo tipo ...


 
 

2 comentarios:

El Friday 22 de May de 2009 bruno dijo:

me dice que HTTP_REFERER no existe, tengo que agregar algun procesador de contexto o algun middleware

El Saturday 23 de May de 2009 diegueus9 dijo:

No use ningún procesador de contexto o middleware aparte de los normales si quieres escribeme a diegueus9 en gmail com

Escribe un comentario: