是否可以在 RoutablePageMixin-Pages 中翻译路径(i18n、gettext_lazy)?

问题描述 投票:0回答:1

我使用 RoutablePageMixin 创建了一个页面并定义了一个子路径。我想使用 gettext_lazy 根据活动语言翻译这个子路径,就像它在 Django 中的 urlpatterns 中一样。我总是得到 404。这可能吗还是我错过了什么?

这是我的页面定义:

class StudyBrowserPage(RoutablePageMixin, TranslatedPage):
    page_description = "Weiterleitung zum Studienbrowser"

    @path('')
    def list_studies(self, request):
        studies = Study.objects.all()
        return self.render(request, context_overrides={
            'studies': studies
        })

    # here I actually want another parameter, but i tried to keep it simple. So don't mind the uselessness of the function.
    @path(_('studie') + '/') 
    def study_detail_view(self, request):
        return self.render(request, template='wagtail_home/study_detail.html')

我已经在 django.po 中翻译了该字符串:

msgid "studie"
msgstr "study"

拨打

.../studie/
有效。
.../study/
没有。

编辑: 我想我的配置中有所有必要的设置:

“上下文处理器”: 'django.template.context_processors.i18n',

USE_I18N = 真 WAGTAIL_I18N_ENABLED = True

我还安装了 wagtail-localize。

django internationalization wagtail
1个回答
0
投票

这很可能是因为

_('studie')
仍然是代理,在解释时未解析为惰性字符串,或者当您使用
/study/
时未激活英语区域设置。

如果是第一个,也许尝试将路径分配给变量然后强制它:

from django.utils.encoding import force_str
from django.utils.translation import gettext_lazy as _

STUDY_PATH = _('studie')

class StudyBrowserPage(RoutablePageMixin, TranslatedPage):
   ....
    @path(force_str(STUDY_PATH) + '/') 
    def study_detail_view(self, request):
        return self.render(request, template='wagtail_home/study_detail.html')

不过声明多个路径可能更简单:

    @path('studie/') 
    @path('study/') 
    def study_detail_view(self, request):
        return self.render(request, template='wagtail_home/study_detail.html')
© www.soinside.com 2019 - 2024. All rights reserved.