2

我知道这听起来很愚蠢,但我找不到问题所在。我正在为用户身份验证使用内置视图,登录和注销分别将语言切换为当前会话的非默认语言。

我有两种语言,根据 Djangoproject 站点上的文档进行设置,即在语言环境文件夹中,并且有 .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>
4

2 回答 2

2

我猜你在会话中保留语言设置,当用户注销时,会话消失了,你又回到了默认语言。

于 2012-05-10T23:08:35.987 回答
0

好的。所以这就是答案。我想我会把它写下来,因为其他人可能会遇到这种情况。

问题是我已经在 django 语言环境中间件和我自己的中间件之间切换了顺序,这带走了浏览器选择的语言。需要在 Django 接管它并将语言设置为浏览器告诉它的任何内容之前保持自己的拦截(无论如何这都是一个非常奇怪的默认行为)。

希望它可以帮助某人。

'myapp.middleware.ForceDefaultLanguageMiddleware',   # <-- BEFORE django locale!!
'django.middleware.locale.LocaleMiddleware',
于 2012-05-12T13:06:59.573 回答