Kri*_*tin 5 django translation wagtail
我有一个包含两种语言(英语和德语)的多语言 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 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,)))
Run Code Online (Sandbox Code Playgroud)
但是在执行重定向时,语言会从帐户设置中重新设置为编辑器的语言。而且我不确定这实际上是要走的路......
有没有人有(不同的?)想法如何让编辑器轻松预览包含不同语言翻译字段的页面?
我目前正在使用 Wagtail 2.4、Django 2.1、Python 3.5。
任何帮助是极大的赞赏!:-)
Wagtail 的“预览模式”功能可能会在这里有所帮助:https://docs.wagtail.io/en/stable/reference/pages/model_reference.html#wagtail.core.models.Page.preview_modes
您可以将英语和德语定义为页面模型上的两种预览模式,并重写该serve_preview方法以根据收到的mode_name参数激活适当的翻译。
| 归档时间: |
|
| 查看次数: |
571 次 |
| 最近记录: |