Django 多语言与一种语言禁用开关的页面

Django multilingual with pages in one language disabling switch

我正在使用 Django Mezzanine 开发一个网站。

我有一些页面使用派生自具有可翻译字段(使用 i18n)的夹层页面模型的模型,这很有效。

但是我有一些页面与给定国家/地区的某些事件相关,因此它们只使用一种语言,并且它们使用派生自 Mezzanine Displayable 模型的模型,没有可翻译字段,但有语言属性。

在列表中,我尝试放置包含页面语言的链接(如 /en/events/event/eventslug )。 我尝试将 translation.activate(lang_code) 添加到视图中。

这样我就得到了所需语言的页面(我使用 {% trans %} 模板标签)。

当我从另一种语言访问页面时出现问题(例如,如果我在西班牙语的过滤器页面上并去参加英语活动)。然后语言切换(夹层形式向 /i18n/ 发送 POST 请求)不再起作用(我被锁定在英语中) 例如,只要我不从另一种语言访问其中一个页面,该开关仍然可以在私人导航中使用。

我该如何解决这个问题? 我不知道为什么...

更新:我更改了 urlpattern,因此它不再是 i18n(我认为它更有意义)但是因为我仍然需要 translation.activate(lang_code) 作为 {% trans %} 标签,所以我的问题仍然是一样的。

问题是因为如果您使用 translation.activate(language),那么您需要使用 translation.deactivate()。 所以这将需要使用中间件才能使其正常工作。

但是我发现 i18next module 允许覆盖模板中的语言环境,所以我在我的视图中定义了上下文 'lang_code' 并在我的模板中使用了 {% overridelocale lang_code %}