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

Hugo v0.127.0多语言切换器开发遇两类错误求助

Hugo多语言切换器短代码问题解决方案

问题1:模板字段错误(.Page不存在于*langs.Language类型)

错误原因

遍历.Site.Languages得到的是语言配置对象(类型为*langs.Language),并非页面对象,因此该对象不存在.Page属性,调用.Page.Permalink会触发字段不存在的错误。

正确写法

需要获取当前页面在对应语言下的关联页面,推荐使用Page.AllTranslations直接获取当前页面的所有语言版本:

<ul>
  {{ range .Page.AllTranslations }}
    <li>
      <a href="{{ .Permalink }}" {{ if eq .Lang $.Page.Lang }}class="active"{{ end }}>
        {{ .Language.LanguageName }}
      </a>
    </li>
  {{ end }}
</ul>
  • .Page.AllTranslations返回当前页面的全语言版本(含当前语言),每个项为页面对象,可直接调用.Permalink
  • 通过.Language.LanguageName获取语言显示名称
  • 可通过eq .Lang $.Page.Lang给当前语言添加激活样式

如果需要遍历所有站点语言并兼容无对应翻译的页面:

<ul>
  {{ range .Site.Languages }}
    {{ $lang := .Lang }}
    {{ $translatedPage := $.Page.Translations | where "Lang" $lang | first }}
    <li>
      <a href="{{ if $translatedPage }}{{ $translatedPage.Permalink }}{{ else }}{{ .Lang | relURL }}{{ end }}">
        {{ .LanguageName }}
      </a>
    </li>
  {{ end }}
</ul>
  • 若当前页面无对应语言翻译,自动跳转到该语言的首页

问题2:语言切换路径错误(路径嵌套)

错误原因

relLangURL过滤器的作用是将相对路径转换为对应语言的URL,但直接传入.Lang(如en)时,Hugo会将其视为相对路径,在当前页面路径后拼接,导致example.com/en/de这类错误嵌套路径。

正确写法

直接调用语言对象的.Permalink属性,该属性对应语言的首页URL:

<ul>
  {{ range .Site.Languages }}
    <li>
      <a href="{{ .Permalink }}">{{ .LanguageName }}</a>
    </li>
  {{ end }}
</ul>
  • .Permalink对于语言配置对象来说,就是对应语言的根路径(如example.com/de/、example.com/en/),避免路径嵌套问题

配置检查

你的hugo.toml配置无问题:

  • defaultContentLanguage = "de"配合defaultContentLanguageInSubdir = true确保默认语言也生成子目录路径
  • 各语言的contentDir、menu配置符合Hugo多语言规范,未使用废弃语法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:54:58