如何预览带有不同语言翻译字段的Wagtail页面?

时间:2019-03-07 10:01:53

标签: django translation wagtail

我有一个多语言的Wagtail网站,其中两种语言(英语和德语)在我的页面模型中使用重复的字段,例如文本块具有两个字段text_detext_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。

任何帮助将不胜感激! :-)

1 个答案:

答案 0 :(得分:1)

Wagtail的“预览模式”功能可能会在以下方面有所帮助:https://docs.wagtail.io/en/stable/reference/pages/model_reference.html#wagtail.core.models.Page.preview_modes

您可以在页面模型上将英语和德语定义为两种预览模式,并覆盖serve_preview方法以根据收到的mode_name参数激活适当的翻译。