Django 1.3国际化...切换语言需要重新启动服务器吗?

4
我之前使用过Django 1.2,并且在切换语言时没有遇到任何问题...在我的模板中,我有这个代码...
<form action="/i18n/setlang/" method="post" class="forms">
{% csrf_token %}
<input name="next" type="hidden" value="/next/page/" />
<select name="language" id="select_langauge" class="m_show hide">
{% for lang in LANGUAGES %}
    {% if lang.0 != '' %}
        <option value="{{lang.0}}">{{lang.1}}</option>
    {% endif %}
{% endfor %}
</select>

这个在Django 1.2中是正常工作的,但自从升级到Django 1.3之后就不行了。我可以看到LANGUAGE_CODE已经改变了,但实际输出的语言与我的预期不符。

然而,当我重新启动Django服务器后,它就会显示正确的语言。我错过了什么吗?

我在我的settings.py文件中有以下设置:

LANGUAGE_CODE = 'en-us'
SITE_ID = 1

USE_I18N = True

gettext = lambda s: s

LANGUAGES = (
    ('', gettext('Please select')),
    ('en', gettext('English')),
    ('ko', gettext('Korean')),
)

USE_L10N = True


MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.locale.LocaleMiddleware',
)

顺便说一下,我正在使用MongoDB作为数据库...这会有影响吗? - CIF
你的视图是如何处理语言变化的?你能提供一些关于MIDDLEWARE_CLASSES设置的信息吗?谢谢。 - Torsten Engelbrecht
我必须说这很奇怪。根据你的示例,我假设你正在使用django的内部set_language视图。此外,LocaleMiddleware应在会话/cookie中更改后激活语言。然而奇怪的是(刚意识到),你的LANGUAGE_CODE设置与LANGUAGES中的任何语言都不匹配(应该是enLANGUAGES中应该是en-us)。这个'Please select'部分可能也不是一个好主意(它不是一种语言)。也许你可以在前端找到更好的方法来实现这种行为。 - Torsten Engelbrecht
3
尝试使用ugettext_lazy代替ugettext获取翻译字符串,看看是否有帮助。如果您在方法之外使用ugettext("string"),它可能仅在服务器重新加载时(例如模型字段标签)进行评估。简单来说,ugettext_lazy将在显示时对字符串进行评估。 - Tomek Kopczuk
1个回答

1

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