如何预览带有不同语言翻译字段的 Wagtail 页面?
How to preview a Wagtail page with translated fields in different languages?
我有一个多语言 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 管理中创建草稿页面并单击 'preview' 时,页面预览将以 Wagtail 管理 中使用的语言显示,即使用当前编辑在其帐户设置中的语言首选项定义的语言。
编辑怎么能用另一种语言预览页面(而不用在他或她的帐户设置中来回切换语言)?
有没有办法在创建页面预览之前构建一个设置不同语言的视图?或者有其他方法可以解决这个问题吗?
我试图找出 Wagtail/Django 何时决定应该使用哪种语言,并找到了 wagtail/admin/core/models 的方法 get_url_parts,第 class 页。此函数返回的 page_path
后缀为“/de”或“/en”,具体取决于编辑器的帐户设置。
我可以使用 translation.activate()
永久更改页面显示的语言。例如。如果我将 translation.activate('en')
添加到 MyPage
class 的 get_context
方法,则 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。
非常感谢任何帮助! :-)
Wagtail 的 "preview modes" 功能可能会在这里有所帮助:https://docs.wagtail.io/en/stable/reference/pages/model_reference.html#wagtail.core.models.Page.preview_modes
您可以在页面模型上将英语和德语定义为两种预览模式,并覆盖 serve_preview
方法以根据接收到的 mode_name
参数激活适当的翻译。
我有一个多语言 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 管理中创建草稿页面并单击 'preview' 时,页面预览将以 Wagtail 管理 中使用的语言显示,即使用当前编辑在其帐户设置中的语言首选项定义的语言。
编辑怎么能用另一种语言预览页面(而不用在他或她的帐户设置中来回切换语言)?
有没有办法在创建页面预览之前构建一个设置不同语言的视图?或者有其他方法可以解决这个问题吗?
我试图找出 Wagtail/Django 何时决定应该使用哪种语言,并找到了 wagtail/admin/core/models 的方法 get_url_parts,第 class 页。此函数返回的 page_path
后缀为“/de”或“/en”,具体取决于编辑器的帐户设置。
我可以使用 translation.activate()
永久更改页面显示的语言。例如。如果我将 translation.activate('en')
添加到 MyPage
class 的 get_context
方法,则 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。
非常感谢任何帮助! :-)
Wagtail 的 "preview modes" 功能可能会在这里有所帮助:https://docs.wagtail.io/en/stable/reference/pages/model_reference.html#wagtail.core.models.Page.preview_modes
您可以在页面模型上将英语和德语定义为两种预览模式,并覆盖 serve_preview
方法以根据接收到的 mode_name
参数激活适当的翻译。