【问题标题】:django 1.3 internationalization... switching language requires server restart?django 1.3 国际化...切换语言需要重启服务器?
【发布时间】:2011-05-15 00:19:58
【问题描述】:

我之前使用过 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 作为数据库...这有关系吗?
  • 您的视图如何看待语言变化的哪个过程?你能提供一些关于你的 MIDDLEWARE_CLASSES 设置的信息吗?谢谢
  • 我必须说它很奇怪。我假设您根据您的示例使用 django 的内部 set_language 视图。此外,LocaleMiddleware 应该在会话/cookie 中更改后激活语言。奇怪的是(刚刚意识到)您的LANGUAGE_CODE 设置与LANGUAGES 中的任何语言都不匹配(它应该是enLANGUAGES 应该是en-us)。这个'Please select' 部分可能也不是一个好主意(它不是一种语言)。也许您在前端找到了更好的方法来实现此行为。
  • 尝试使用 ugettext_lazy 而不是 ugettext 来获取您的翻译字符串,看看是否有帮助。如果您即在方法之外执行 ugettext("string") - 它可能仅在服务器重新加载时进行评估(即模型字段标签)。 ugettext_lazy 将评估字符串,简单地说,显示。

标签: django internationalization


【解决方案1】:

我想通了。

要动态更改语言,使用 ugettext_lazy() 解决了这个问题。 (在我使用 ugettext 之前)。

参考:https://docs.djangoproject.com/en/1.3/topics/i18n/internationalization/#lazy-translation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2013-07-26
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多