Django:/ logout切换语言

时间:2012-05-10 21:57:47

标签: django django-authentication

我知道这听起来很傻但我找不到什么错。 我使用用户身份验证的内置视图,登录和登出分别将语言切换为当前会话的非默认语言。

我有两种语言,根据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>

2 个答案:

答案 0 :(得分:2)

我猜你会在会话中保持语言设置,当用户退出时,会话就会消失,你又回到了默认语言。

答案 1 :(得分:0)

行。所以这就是答案。我以为我会写下来,因为其他人可能会在这种情况下结束。

问题是我已经在django locale中间件和中间件拥有我自己的中间件之间切换了顺序,它取消了brwoser选择的语言。需要在Django接管之前保留自己的拦截,并将语言设置为浏览器告诉它的语言(在任何情况下这都是一个非常奇怪的默认行为)。

希望它有所帮助。

'myapp.middleware.ForceDefaultLanguageMiddleware',   # <-- BEFORE django locale!!
'django.middleware.locale.LocaleMiddleware',