You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hugo多语言列表排序与切换URL实现问题求助

解决Hugo 0.40.1多语言切换控件的三个问题

我来帮你逐个搞定这些Hugo老版本的多语言问题——0.40.1确实有点年头,但咱们还是能找到适配的解决方案:

问题1:.LanguageName显示异常或为空

这大概率是你的config.yaml格式出了问题!YAML对缩进要求极其严格,你原来的配置里weight和LanguageName没有缩进在对应语言代码的下方,导致Hugo根本读不到这些字段。另外,旧版本Hugo的上下文变量有时候需要注意根上下文的引用,但核心问题还是配置格式。

修复步骤:

  1. 先修正config.yaml的缩进,确保每个语言的子键(weight、LanguageName)都缩进2个空格:
languages:
  en:
    weight: 1
    LanguageName: English
  es:
    weight: 2
    LanguageName: Español
  fr:
    weight: 3
    LanguageName: Français
  1. 调整模板代码,确保正确遍历语言列表:
{{ range $.Site.Languages }}
  <span>{{ .Lang }} - {{ .LanguageName }}</span>
{{ end }}

如果是在partial模板里调用,记得把根上下文传进去(比如{{ partial "lang-switcher.html" . }}),避免上下文丢失导致变量读取失败。

问题2:语言列表不按weight排序

Hugo 0.40.1版本默认不会自动对.Site.Languages按weight排序,得手动用sort函数指定排序规则。

修复代码:

在遍历的时候加上排序逻辑,按Weight字段升序排列:

{{ range sort $.Site.Languages "Weight" }}
  <span>{{ .Lang }} - {{ .LanguageName }}</span>
{{ end }}

这样就会严格按照你配置的weight顺序(1→2→3)展示语言选项了。

问题3:构建当前页面的多语言版本URL

旧版本Hugo里,单纯遍历语言列表拿不到当前页面的对应语言URL,得用.Site.Sites——这个集合包含了每个语言的完整站点实例,每个实例里直接带着当前页面的对应语言版本链接。

最终完整的语言切换控件代码:

{{ range sort .Site.Sites "Language.Weight" }}
  <a href="{{ .RelPermalink }}">{{ .Language.Lang }} - {{ .Language.LanguageName }}</a>
{{ end }}
  • .Site.Sites:所有语言站点的集合
  • .Language.Lang/.Language.LanguageName:当前站点对应的语言代码和名称
  • .RelPermalink:当前页面在该语言站点下的相对URL(用.Permalink可以获取绝对URL)

如果只想显示当前页面存在的语言版本,可以加上判断:

{{ range sort .Site.Sites "Language.Weight" }}
  {{ if .IsTranslated }}
    <a href="{{ .RelPermalink }}">{{ .Language.Lang }} - {{ .Language.LanguageName }}</a>
  {{ end }}
{{ end }}

内容的提问来源于stack exchange,提问作者Andrew Schetinin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:01:22