У меня есть многоязычный веб-сайт 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.
Любая помощь очень ценится!: -)