django - 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 有关,我很抱歉)。
解决方案
要查找位于区域设置语言树中但未翻译的页面,有一个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 中找到了这个
推荐阅读
- dart - 如何比较相同类型的两个对象的值?
- javascript - 如何返回不同的数组?
- java - 如何使用 JUnit 测试适用于 excel 的 java 方法
- c - 用c制作计算器,如何计算2个以上的数字
- javascript - HighCharts 是否可以将对象传递给仪表图的指针配置?
- r - 对子集执行任务而不是过滤掉
- c# - Xamarin Forms:从饼图中删除或隐藏 LinearAxis
- excel - Excel:在矩阵中搜索具有两个维度范围的值
- android - 如何在 android 中刷新位置变化地图(如 Swiggy/uber App)
- python - 测试功能的正确方法