I have a django 1.6 site with i18n working. I can change the frontend language with a select box in the top of the template, but I don\'t know if there is a django app or trick
In your settings.py just add 'django.middleware.locale.LocaleMiddleware'
to your MIDDLEWARE_CLASSES
setting, making sure it appears after 'django.contrib.sessions.middleware.SessionMiddleware'
.
Here is a slightly modified version of a code snippet from the Django docs for admin/base.html
that adds a language selection dropdown:
{% block userlinks %}
{{ block.super }}
/ <form action="{% url 'set_language' %}" method="post" style="display:inline">{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}">
<select name="language" onchange="this.form.submit()">
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
<option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected{% endif %}>
{{ language.name_local }} ({{ language.code }})
</option>
{% endfor %}
</select>
</form>
{% endblock %}
For this to work you also need to add the following to your urlpatterns
:
path('i18n/', include('django.conf.urls.i18n')),
You can create /en/admin
, /fr/admin/
and so on using i18n_patterns:
urlpatterns += i18n_patterns(
url(r'^admin/', include(admin.site.urls)),
)
(For Django <= 1.7, you must specify a prefix, use i18n_patterns('', ... )
)