Django国际化 - 语言不变

时间:2017-08-01 09:41:21

标签: python django internationalization

我已经搜过很多帖子,但没有人可以解决我的问题。

我的settings.py:

from os import path
PROJECT_ROOT = path.abspath(path.dirname(__file__))
LOCALE_PATHS = (path.join(PROJECT_ROOT, '/conf/locale/'),)

TIME_ZONE = 'UTC'
LANGUAGE_CODE = 'fr-fr'
USE_I18N = True
USE_L10N = True
gettext = lambda x: x
LANGUAGES = (
    ('fr', gettext('French')),
    ('en', gettext('English')),
)

TEMPLATE_CONTEXT_PROCESSOR = (
    "django.core.context_processors.i18n",
)

MIDDLEWARE_CLASSES = (
    "django.middleware.locale.LocaleMiddleware",
)

urls.py:

from django.conf.urls import *
urlpatterns = patterns ('',
    ...
    url(r'^i18n/', include('django.conf.urls.i18n')),
)

template.html(简化版):

<div id="header">
    ...
    {% include 'i18n.html' %}
</div>

i18n.html:

{% load i18n %}

{% trans "Une ligne de test" %}
<form action="/i18n/setlang/" method="post">
    {% csrf_token %}
    <input name="next" type="hidden" value="{{ request.get_full_path|slice:'3:' }} />
    <select name="language">
        {% 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="selected"{% endif %}>
                {{ language.name_local }} ({{ language.code }})
            </option>
        {% endfor %}
    </select>
    <input type="submit" value="Go" />
</form>

我知道这个代码已经出现在很多其他帖子中,但没有任何解决方案对我有帮助。 我的问题是,当我提交表单时,页面重新加载,但下拉菜单返回&#34;法语&#34;。

此外,当我在/locale/fr/LC_MESSAGES/django.po中尝试使用过时的翻译来进行&#34; Une ligne de test&#34;时,我没有翻译,所以我相信它没有&# 39;访问,但我不知道为什么

有人会为我提供一些东西吗?

|更新|

当我运行python manage.py runserver时,翻译不起作用,但我在终端"POST /i18n/setlang/ HTTP/1.1" 302 0中,所以我认为这需要函数set_language()但我真的不喜欢理解为什么语言不会改变以及为什么过时的翻译不会以初始语言显示。

当我尝试LANGUAGE_CODE = "en"时,下拉列表的值为英语,但所有页面都保留为法语。

有关信息,我使用Django 1.4.11,但我不认为这是我的问题。

|更新|

我也试过这个模板,只有一个选择尝试更改语言,但结果总是一样。

<form action="/i18n/setlang/" method="post">
    {% csrf_token %}
    <input type="hidden" name="language" value="en" />
    <input type="hidden" name="next" value "{{ request.get_full_path|slice:'3:' }}" />
    <input type="submit" value="English" />
</form>

它缺少什么?

0 个答案:

没有答案