【发布时间】:2017-01-02 19:52:12
【问题描述】:
我遇到了一个从未见过的非常奇怪的问题。我正在使用 Django 1.10。
我有几个字典文件:
/locale/fr/LC_MESSAGES/django.po
/locale/de/LC_MESSAGES/django.po
/locale/zh/LC_MESSAGES/django.po
应用程序字符串是用英文编写的。字典文件完整,编译成mo文件。
我将每个用户的语言偏好存储在UserProfile 的language 字段中。在更新他们的个人资料时,我将语言翻译应用于会话。
# 'up' is a UserProfile object pertaining to the user
up.update(language=form.cleaned_data['language'])
translation.activate(up.language)
self.request.session[translation.LANGUAGE_SESSION_KEY] = up.language
return super(self, UpdateUserProfile).form_valid(form)
这适用于法语和德语。 return super 以法语/德语呈现表单模板,然后我可以导航到其他页面并查看法语/德语文本。
它不适用于中文(语言代码'zh')。 return super 页面以中文呈现表单模板(我已经在保存后验证了 shell 中的语言设置),但与法语和德语不同的是,当我离开时,所有其他页面都会恢复为英语。
我已经重新启动了开发服务器,以防万一它是由于旧设置造成的。我已经在一个新的、隔离的开发虚拟机上对该分支进行了干净的拉取尝试。在这两种情况下,我对中文都有同样的问题。什么可能导致此错误?
编辑 - 附加信息:
来自 settings.py
LANGUAGE_CODE = 'en-us'
LOCALE_PATHS = [
BASE_DIR + '/locale/',
]
USE_I18N = True
USE_L10N = True
如前所述,在更新语言FormView 的 POST 上,request.session[translation.LANGUAGE_SESSION_KEY] 代码设置为zh,页面显示为中文。在对同一视图的 GET 请求中,页面以英文显示(但检查 request.session[translation.LANGUAGE_SESSION_KEY] 显示它已设置为 zh,尽管显示的是英文文本)。
我没有在网址中使用语言前缀。
【问题讨论】:
-
您在 Django 设置中设置了哪些语言设置?您是否在您的网址中使用语言前缀?您是否跟踪了会话中存储的值?在后续请求中,
request.session[translation.LANGUAGE_SESSION_KEY]的值是否正确?使用此信息编辑问题。 -
@Louis 感谢您的建议,我已经更新了信息。
标签: python django gettext django-i18n