我有一个包含两种语言(英语和德语)的多语言 Wagtail 网站,在我的页面模型中使用重复的字段,例如一个文本块有两个字段,text_de并且text_en,我text按照翻译内容文档中的示例定义为翻译字段。(即我没有复制整个页面树。)这是我的代码中的一个示例:
[models.py]
class MyPage(Page):
...
text_de = models.CharField(max_length=1024)
text_en = models.CharField(max_length=1024)
text = TranslatedField('text_en', 'text_de')
Run Code Online (Sandbox Code Playgroud)
一切正常,在我可以使用的模板中{{ text }},根据活动语言(使用 i18n 模式和 LocaleMiddleware)显示正确的版本。
但是:我在获取两种语言的页面预览时遇到问题。
当编辑者在 Wagtail 管理中创建草稿页面并单击“预览”时,页面预览将以Wagtail 管理中使用的语言显示,即以当前编辑者在其帐户设置中的语言首选项定义的语言。
编辑者如何还可以用另一种语言预览页面(无需在他或她的帐户设置中来回切换语言)?
在创建页面预览之前,有没有办法构建一个设置不同语言的视图?或者有其他方法可以解决这个问题吗?
我试图找出Wagtail /Django 何时决定它应该提供哪种语言,并找到了wagtail /admin/core/models, Page 类的get_url_parts方法。在page_path从这个函数返回的后缀有“/去”或“/ EN”,这取决于编辑的帐户设置。我可以使用 永久更改页面显示的语言translation.activate()。例如,如果我添加translation.activate('en')到类的get_context方法中MyPage,则 MyPage 页面及其预览始终以英文显示。这不是很有帮助。
我试图构建一个视图,它首先设置语言,然后像这样重定向到预览:
[views.py]
from django.http import …Run Code Online (Sandbox Code Playgroud)