我有一个多语言的Wagtail网站,其中两种语言(英语和德语)在我的页面模型中使用重复的字段,例如文本块具有两个字段text_de
和text_en
,并且按照translating content documentation中的示例,我将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')
一切正常,在模板中,我只能使用{{ text }}
,并根据活动语言(使用i18n模式和LocaleMiddleware)显示正确的版本。
但是::我无法同时获得两种语言的页面预览。
当编辑者在Wagtail管理员中创建草稿页并单击“预览”时,页面预览将以Wagtail管理员中使用的语言显示,即以当前语言定义的语言显示编辑者在其帐户设置中的语言首选项。
编辑者还可以如何以另一种语言预览页面(而无需在其帐户设置中来回切换语言)?
在创建页面预览之前,是否可能有一种方法来构建设置不同语言的视图?还是有另一种方法可以解决这个问题?
我试图找出Wagtail / Django决定何时使用哪种语言,并找到了wagtail / admin / core / models,Page类的方法get_url_parts。从此函数返回的page_path
的后缀为'/ de'或'/ en',具体取决于编辑者的帐户设置。
我可以使用translation.activate()
永久更改页面显示的语言。例如。如果将translation.activate('en')
添加到get_context
类的MyPage
方法中,则MyPage页及其预览始终以英语显示。真的没有帮助。
我试图构建一个视图,该视图首先设置语言,然后像这样重定向到预览:
[views.py]
from django.http import HttpResponseRedirect
from django.urls import reverse
from django.utils import translation
def preview_language(request, pk=None, language='en'):
if language == 'de':
translation.activate(language)
else:
translation.activate('en')
return HttpResponseRedirect(reverse('wagtailadmin_pages:preview_on_edit', args=(pk,)))
但是在执行重定向时,该语言会从帐户设置中重新设置为编辑者的语言。而且我不确定这实际上是要走的路...
有人有(不同的?)想法如何使编辑者能够轻松预览带有不同语言翻译字段的页面?
我目前正在使用Wagtail 2.4,Django 2.1,Python 3.5。
任何帮助将不胜感激! :-)
答案 0 :(得分:1)
Wagtail的“预览模式”功能可能会在以下方面有所帮助:https://docs.wagtail.io/en/stable/reference/pages/model_reference.html#wagtail.core.models.Page.preview_modes
您可以在页面模型上将英语和德语定义为两种预览模式,并覆盖serve_preview
方法以根据收到的mode_name
参数激活适当的翻译。