Wagtail i18n:仅显示指向已翻译页面的链接

Wagtail i18n: only show links to pages that are translated

我正在使用 Wagtail 2.11.3 构建一个 i18n 网站,并遵循 https://docs.wagtail.io/en/stable/advanced_topics/i18n.html?highlight=i18n 上的文档和四种语言。我还使用 django.middleware.locale.LocaleMiddleware 来确定用户的首选语言,哪种“类型”有效(请阅读下文)。

所以我有四种语言:

WAGTAIL_CONTENT_LANGUAGES = LANGUAGES = [
    ('de', "Deutsch"),
    ('fr', "Français"),
    ('it', "Italiano"),
    ('en', "English"),
]

只有部分网站应该是多语言的,有些页面只提供一种语言。我最终得到了四个页面树,每种语言一个,而且我能够创建翻译。

然而,正如所指出的,我有一些页面根本没有翻译,但仍然有本地化版本(在我创建页面时自动创建)。所以这里 https://docs.wagtail.io/en/stable/advanced_topics/i18n.html?highlight=i18n#basic-example 是一个如何在模板中实现语言链接的示例,但我只想显示指向已翻译页面的链接。使用 django_debug_toolbar 我找不到模板变量来检查页面是否已翻译。

我怎样才能做到这一点?

也相关:使用 django.middleware.locale.LocaleMiddleware 检测到首选语言,我在 /about_us。但是,如果我没有在 url 之前明确设置语言代码(如 /de/about_us),则当我浏览该站点时,以下页面将变回我浏览器的语言。因此,一旦 Locale 中间件检测到该语言,我想要像重定向到 /de/... 这样的东西。这可能吗(很抱歉,可能不仅与鹡鸰有关)。

要查找位于语言环境语言树中但未翻译的页面,可以使用 alias_of 属性。

template.html

{% if self.alias_of %}
   not translated
{% else %}
   translated
{% endif %}

views.py

    if self.alias_of:
        is_translated = self.alias_of.locale is self.locale

如需更多隐藏内容,请查看 wagtail-localize 存储库。我在 wagtail_hooks.py

中找到了这个