我知道这听起来很傻,但我找不到哪里不对劲。我对用户身份验证和登录使用内置视图,登录和注销分别将当前会话的语言切换为非默认语言。
我有两种语言,根据Djangoproject网站上的文档设置,即在locale文件夹中,有.mo文件和所有东西。很好。
我有一个基于表单的语言开关,它可以为任何发布到/i18n/setlang的用户启用语言开关
所以,我的问题是,当我注销或登录(我猜这两个都是POST)时,为什么它看起来像是"POST“切换语言。
感谢你在这件事上尽最大的努力。
编辑:我应该补充说,它永远不会切换回来。它只在一个方向上切换语言,即切换到非默认语言。
EDIT2:我不认为它会吸引更多的答案,但这是我的语言切换器的代码(它通过jQuery即时切换。问题仍然是它转到了Deutch语言,并在我注销时停留在那里(注销是由Django中的logout视图处理的)。
<ul>
<li>
<form name="setLangen" action="/i18n/setlang/" method="POST"><div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='871Y71JyfG9WcieiKr8jjwe4j37IkIfq' /></div>
<input name="next" type="hidden" value="/" />
<input type="hidden" name="language" value="en" />
<a href="#" onclick="document.setLangen.submit();return false;">English</a>
</form>
</li>
<li>
<form name="setLangde" action="/i18n/setlang/" method="POST"><div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='871Y71JyfG9WcieiKr8jjwe4j37IkIfq' /></div>
<input name="next" type="hidden" value="/" />
<input type="hidden" name="language" value="de" />
<a href="#" onclick="document.setLangde.submit();return false;">Deutch</a>
</form>
</li>
</ul>发布于 2012-05-12 21:07:00
好的。所以这就是答案。我想我应该把它写下来,因为其他人可能会在这种情况下结束。
问题是我在django locale中间件和我自己的中间件之间交换了顺序,去掉了brwoser选择的语言。在Django接管它并将语言设置为浏览器告诉它的任何内容之前,需要保留您自己的拦截(这在任何情况下都是一个非常奇怪的默认行为)。
希望这能帮助到别人。
'myapp.middleware.ForceDefaultLanguageMiddleware', # <-- BEFORE django locale!!
'django.middleware.locale.LocaleMiddleware',发布于 2012-05-11 07:08:36
我猜你在会话中保留了语言设置,当用户注销时,会话就消失了,你又回到了默认的语言。
https://stackoverflow.com/questions/10542741
复制相似问题