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