4

我有一个带有几个翻译页面的 Hugo 网站。并非所有页面都被翻译,因为我并不总是有志愿者为每种语言的每一页提供服务。

在菜单中,我有一些页面的链接,如果没有本地翻译,我想重定向到英语(所以总是有一个链接,但它可能没有被翻译)。

# Force to have /en/my-page and /fr/my-page routes, even for default language.
defaultContentLanguageInSubdir= true

# English is the default language
defaultContentLanguage = "en"

# This page exists in en and fr, but not de
[[menu.shortcuts]]
name = "Licence"
url = "/licence"

[Languages]
[Languages.en]
languageName = "English"

[Languages.fr]
languageName = "Français"

[Languages.de]
languageName = "Deutsch"

在英文和法文页面上,这工作正常,菜单链接转到/en/licence/fr/licence。但是在德语页面上,它转到/de/licence404。

有没有办法将丢失的页面重定向到默认语言的相应页面?

4

1 回答 1

1

实际上没有默认的 hugo 解决方案。我花了很多时间来弄清楚如何达到目标并且不要一直复制所有语言的数据内容,因为这是一种难以控制不同版本的方法。

所以我只是检查它是否是一个内部链接,并且当前语言下的页面是否存在,如果存在,那么我为这种语言创建一个链接,如果不是,那么我只需分配一个默认链接。

{{ $link := .link }}
{{ if and ( $.Site.GetPage ( substr ( $link ) 0 -1 ) ) ( ne ( $.Site.BaseURL | relLangURL ) "/" ) ( not ( in $link "://" ) ) }}
    {{ $link = ( print ( $.Site.BaseURL | relLangURL ) $link ) }}
{{ end }}

我所有的链接最后都有/符号,所以如果你的链接看起来像/blog而不是那样,/blog/那么只需更改( substr ( $link ) 0 -1 )为 just $link

我是一个雨果新手,对不起,如果它不是优雅的解决方案,但到目前为止它对我有用。

于 2021-04-14T20:51:07.250 回答