Как просмотреть страницу Wagtail с переведенными полями на разных языках? - PullRequest
2 голосов
/ 07 марта 2019

У меня есть многоязычный веб-сайт 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')

Все отлично работает, в шаблонах я могу просто использовать {{ text }} и в зависимости от активногоязык (с использованием шаблонов i18n и LocaleMiddleware) отображается правильная версия.

НО: У меня проблемы с получением предварительного просмотра страницы на обоих языках .

Когда редактор создает черновик страницы в администраторе Wagtail и нажимает кнопку «Предварительный просмотр», тогда предварительный просмотр страницы отображается на языке , используемом в администраторе Wagtail , то есть на языке, определяемом языком текущего редактора.настройки в настройках своей учетной записи.

Как редактор может также просмотреть страницу на другом языке (не переключая язык в настройках своей учетной записи назад или вперед)?

Возможно, естьспособ построить представление, которое устанавливает другой язык перед созданием предварительного просмотра страницы?Или есть другой способ решить эту проблему?

Я пытался выяснить, когда Wagtail / Django решает, на каком языке ему следует работать, и нашел метод get_url_parts wagtail / admin / core /модели, класс Пейдж.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 Ответ

2 голосов
/ 07 марта 2019

Wagtail's "режимы предварительного просмотра", вероятно, поможет здесь: https://docs.wagtail.io/en/stable/reference/pages/model_reference.html#wagtail.core.models.Page.preview_modes

Вы можете определить английский и немецкий как два режима предварительного просмотра в модели страницы и переопределить метод serve_preview, чтобы активировать соответствующий перевод на основе полученного аргумента mode_name.

...