Django cambiar de lenguaje desde el view


Para cambiar el LANG en el servidor, asumiendo que tenemos todo el sistema de traducción correctamente configurado, llamamos via POST a la ficha setlang y le pasamos el campo language con la lengua seleccionada:

En settings definimos los lenguajes con los que trabajamos:

LANGUAGES = (
    ('es', ugettext(u'Español')),
    ('de', ugettext(u'German')),
    ('en', ugettext(u'English')),
);


En urls, incluimos las url de i18n:

(r'^i18n/', include('django.conf.urls.i18n')),


Y ya en el template podemos llamar a la ficha /i18n/setlang para setear el lenguaje:

<li class="gbt">
<form name="setLangSpanish" action="/i18n/setlang/" method="POST">{% csrf_token %}
<input name="next" type="hidden" value="/" />
<input type="hidden" name="language" value="es" />
<a href="#" class="language_off" onclick="document.setLangSpanish.submit();return false;">
<span class="language_off sprachwahl">Español</span></a>
</form>
</li>
<li class="gbt">
<form name="setLangEnglish" action="/i18n/setlang/" method="POST">{% csrf_token %}
<input name="next" type="hidden" value="/" />
<input type="hidden" name="language" value="en" />
<a href="#" class="language_off" onclick="document.setLangEnglish.submit();return false;">
<span class="language_off sprachwahl">English</span></a>
</form>
</li>
<li class="gbt">
<form name="setLangDeusch" action="/i18n/setlang/" method="POST">{% csrf_token %}
<input name="next" type="hidden" value="/" />
<input type="hidden" name="language" value="de" />
<a href="#" class="language_off" onclick="document.setLangDeusch.submit();return false;">
<span class="language_off sprachwahl">Deusch</span></a>
</form>
</li>


Fuente: oscarcp http://blog.oscarcp.com/?p=163