我知道这听起来很傻但我找不到什么错。 我使用用户身份验证的内置视图,登录和登出分别将语言切换为当前会话的非默认语言。
我有两种语言,根据Djangoproject网站上的文档设置,即在locale文件夹中,有.mo文件和所有内容。细
我有一个基于表单的语言切换,可以为发布到/ i18n / setlang的任何用户启用语言切换
所以,我的问题是,当我进行注销或登录时,我怎么会“POST”切换语言(我猜这两者都是POST)。
感谢您对此有所了解。
编辑:我应该补充一点,它永远不会切换回来。它只在一个方向上切换语言,即非默认语言。
EDIT2:不是我认为它会吸引更多的答案,但这里是我的语言切换器的代码(它通过jQuery即时切换。问题仍然是它用于Deutch语言并且每当我退出时都会保持在那里(注销)由Django中的注销视图处理。
<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>
答案 0 :(得分:2)
我猜你会在会话中保持语言设置,当用户退出时,会话就会消失,你又回到了默认语言。
答案 1 :(得分:0)
行。所以这就是答案。我以为我会写下来,因为其他人可能会在这种情况下结束。
问题是我已经在django locale中间件和中间件拥有我自己的中间件之间切换了顺序,它取消了brwoser选择的语言。需要在Django接管之前保留自己的拦截,并将语言设置为浏览器告诉它的语言(在任何情况下这都是一个非常奇怪的默认行为)。
希望它有所帮助。
'myapp.middleware.ForceDefaultLanguageMiddleware', # <-- BEFORE django locale!!
'django.middleware.locale.LocaleMiddleware',