多语言写作

#i18n #tutorial 共 505 字 约 2 分钟

Inkstone 用的是 Hugo 的内容语言回落模型。默认语言走根 URL(/posts/foo/),其他语言走子目录(/zh-cn/posts/foo/)。

文件名约定

标记内容语言有两种方式:

content/posts/foo.md          # 默认语言
content/posts/foo.zh-cn.md    # 中文版本
content/posts/foo.en.md       # 默认是 zh-cn 时显式标注英文

或者用目录划分:

content/en/posts/foo.md
content/zh-cn/posts/foo.md

主题对两种都兼容,按你的写作流程选一个即可。

语言切换

页眉有一个语言切换按钮。当前页有翻译时,按钮指向对应语言的同一篇;没有翻译时回退到目标语言的首页——不会出现死链或占位页。

i18n 字符串

UI 字符串放在 i18n/<lang>.toml。主题自带 en.tomlzh-cn.toml。要新增一种语言:

cp themes/inkstone/i18n/en.toml i18n/ja.toml
# 然后翻译里面的值

在站点配置里加上这一语言:

[languages.ja]
  label = "日本語"
  locale = "ja"
  weight = 3
  [languages.ja.params]
    description = "..."

阅读时间

阅读时间按页面的实际语言计算,用 Hugo 的 WordCountReadingTime。设了 hasCJKLanguage = true 之后,CJK 页面按 501 字符/分钟报,非 CJK 页面按 213 词/分钟报。主题读取页面真实语言并自动选公式。

不要按页/按语言覆盖
不要在单篇或某语言下覆盖 hasCJKLanguage——它是站点级开关。hugo.toml 顶部设一次就够了,剩下的由 Hugo 按内容自动处理。

这就是多语言模型的全部要点。底层模式见 Hugo 的 language management 文档