我该如何更改Django管理界面的语言?

22

我有一个使用django 1.6的网站,其中i18n已经启用。我可以通过模板顶部的下拉框更改前端语言,但我不知道是否有django应用程序或技巧可以更改管理界面的语言,因为它似乎存储在会话变量中,并且保留了我在前端使用的第一种语言。

4个回答

33

在你的settings.py文件中,只需将'django.middleware.locale.LocaleMiddleware'添加到你的MIDDLEWARE_CLASSES设置中,并确保它出现在'django.contrib.sessions.middleware.SessionMiddleware'之后。


1
我想知道为什么被踩了。那正是我缺少的东西。 - x-yuri
很好的答案,简单易行,但是用户如何更改语言呢?根据浏览器设置的语言并不总是一个好的解决方案。 - Smit Johnth
添加.locale.LocaleMiddleware是唯一必要的事情。然后管理员将使用用户浏览器设置中最喜欢的语言。 - mirek
当然,在管理界面中为模型条目提供更多信息,您需要在model.py中使用gettext_lazy()(或在dj2.0之前使用ugettext_lazy),然后创建.po文件(./manage.py makemessages -l de_DE),使用poedit进行翻译,最后编译.po文件(./manage.py compilemessages)。 - mirek

20

您可以使用i18n_patterns创建/en/admin/fr/admin/等:

urlpatterns += i18n_patterns(
    url(r'^admin/', include(admin.site.urls)),
)

(对于Django <= 1.7,您必须指定前缀,使用)

1
它可以正确地更改我的应用程序语言,但它没有更改我提供的语言文件。我该如何加载那种语言?你能帮我吗?[我的问题](http://stackoverflow.com/questions/39102538/language-file-dosent-load-automaticaly-in-django)@Udi - Mehrdad Pedramfar

14
这是一个稍微修改过的代码片段,来自Django docs中的admin/base.html,它添加了一个语言选择下拉菜单:
{% extends "admin/base.html" %}
{% load i18n %}
{% 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 %}

为了使其正常工作,您还需要将以下内容添加到您的urlpatterns中:

path('i18n/', include('django.conf.urls.i18n')),

1
如果您想查看不同语言和翻译结果的变化,这个解决方案非常有用。我需要在SessionMiddleware后面添加django.middleware.locale.LocaleMiddleware,并在(本地创建的应用程序,并且该应用程序在admin之前)templates/admin/base_site.html中添加了上述代码。 - WBAR
1
代码片段顶部缺少以下内容:{% extends "admin/base.html" %} {% load i18n %} - Vlax

1

更改您的浏览器默认语言。

不要破坏代码。例如,
Chrome -> 设置 -> 语言 -> 首选语言:将所需的语言移动到上方。

刷新浏览器,管理员面板将更改显示的语言。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接