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:
| Categorías:
internacionalización,
snippets,
traducciones,
trucos
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 ...
En ocasiones nos interesa trabajar con subdominios en nuestros proyectos Django. Para ello podemos utilizar un sencillo middleware para subdominios que podemos encontrar en ...
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 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 ...
me dice que HTTP_REFERER no existe, tengo que agregar algun procesador de contexto o algun middleware
No use ningún procesador de contexto o middleware aparte de los normales si quieres escribeme a diegueus9 en gmail com
Suscríbete a nuestro feed RSS y al feed de la comunidad para estar al tanto de todo lo que ocurre entorno a Django.
Tú también puedes escribir en éste blog. Para hacerlo basta con que nos digas sobre qué quieres escribir un artículo relacionado con Django.
Utilizar un formulario para modificar 2 modelos
Descubriendo objetos similares por sus etiquetas