首页 > 解决方案 > Wagtail i18n:仅显示已翻译页面的链接

问题描述

我正在使用 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),那么当我在网站上导航时,以下页面将变回我浏览器的语言。/de/...因此,一旦 Locale 中间件检测到该语言,我就想要重定向到。这可能吗(可能不仅与 Wagtail 有关,我很抱歉)。

标签: djangowagtail

解决方案


要查找位于区域设置语言树中但未翻译的页面,有一个alias_of属性。

模板.html

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

视图.py

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

有关更多隐藏的好东西,请查看wagtail-localize存储库。我在 wagtail_hooks.py 中找到了这个


推荐阅读