i18n国际化 - sofastack/sofastack.tech GitHub Wiki

SOFAStack 官网的国际化使用 Hugo Multilingual Mode 实现。

多语言配置

SOFAStack 官网支持中文和英文,网站所支持的语言是在根目录的 config.toml 中配置的,如下:

[languages]
  [languages.en]
    contentDir = "content/en"
    languageName = "English"
    weight = 20
  [languages.zh]
    contentDir = "content/zh"
    languageName = "中文"
    weight = 10

语言的代码是可以自定义的,文档的存储目录 contentDir 也是可以自定义的,weight 值小的将作为网站的默认语言,且 URL 上不会显示语言代码。对于非默认语言将会在所有文档的 URL 前增加语言代码部分,例如英文文档路径为 /projects/sofa-rpc/intro/,访问 /en/projects/sofa-rpc/intro/ 将会重定向后前面的路径,,对应的中文文档路径为 /zh/projects/sofa-rpc/intro/

国际化的内容包括以下两部分:

  • 非文档页面:主页及其他导航页面
  • 文档页面:项目文档、博客、教程等直接使用 Markdown 文件渲染而成的页面

下面将就以上两部分分别说明。

非文档页面

非文档页面主要通过 Hugo i18n 基于 String ID 来管理,在网站代码仓库的根目录的 i18n 目录下,分别创建网站支持的语言代码的配置文件 zh.yamlen.yaml

假如现在网站中有一个字符串需要做多语言设置,需要在源码中这样设置:

{{ i18n "subscribeBoxTitle" }}

然后在 i18n/zh.yamli18n/en.yaml中,分别给出该字符串的多语言的值。

- id: subscribeBoxTitle
  translation: "All about SOFAStack"

文档页面

在网站代码根目录下 config.toml 中配置了英文和中文文档的路径分别为 content/en/content/zh/,只要分别在以上两个目录里创建对应语言的文档即可。

另外还可以在文档的 front matter 中加上 translationKey 配置,将不同语言的文档对应起来,详见:https://gohugo.io/content-management/multilingual