Docusaurus国际化(i18n)
修改
docusaurus.config.js加入zh-CNlocale(这里以我要支持的中文为例)
docusaurus.config.js locale i18n: {
defaultLocale: 'en',
locales: ['en', 'zh-CN'],
},
备注
文件复制到 i18n/zh-CN 对应目录目录进行翻译,每个locale和plugin有自己的 i18n 子目录,其目录格式是:
i18n 子目录website/i18n/[locale]/[pluginName]/...
对于 Docusaurus多文档 使用了插件 plugin-content-docs ,以及 plugin-content-blog (BLOG),那么需要具备如下目录结构:
i18n 目录结构website/i18n
└── zh-CN
├── code.json # Any text label present in the React code
│ # Includes text labels from the themes' code
├── docusaurus-plugin-content-blog # translation data the blog plugin needs
│ └── 2020-01-01-hello.md
│
├── docusaurus-plugin-content-docs # translation data the docs plugin needs
│ ├── current
│ │ ├── doc1.md
│ │ └── doc2.mdx
│ └── current.json
│
└── docusaurus-theme-classic # translation data the classic theme needs
├── footer.json # Text labels in your footer theme config
└── navbar.json # Text labels in your navbar theme config
备注
这里的 i18n/zh-CN 以及目录下的 .json 文件可以通过 docusaurus write-translations [siteDir]
创建
i18n/en和i18n/zh-CN目录结构以及对应.json文件
i18n/en 和 i18n/zh-CN 目录结构以及对应 .json 文件docs_dir="/home/admin/docs/github/huataihuang/docs.cloud-atlas.dev"
#npm run docusaurus write-translations /Users/admin/docs/github/huataihuang/docs.cloud-atlas.dev
npm run docusaurus write-translations $docs_dir -- --locale zh-CN
此时显示信息(以 zh-CN 为例:
i18n/zh-CN 目录结构以及对应 .json 文件
> docs-cloud-atlas-dev@0.0.0 docusaurus
> docusaurus write-translations /Users/admin/docs/github/huataihuang/docs.cloud-atlas.dev --locale zh-CN
[INFO] 81 translations will be written at "i18n/zh-CN/code.json".
[INFO] 6 translations will be written at "i18n/zh-CN/docusaurus-theme-classic/navbar.json".
[INFO] 10 translations will be written at "i18n/zh-CN/docusaurus-theme-classic/footer.json".
[INFO] 1 translations will be written at "i18n/zh-CN/docusaurus-plugin-content-docs-discovery/current.json".
[INFO] 3 translations will be written at "i18n/zh-CN/docusaurus-plugin-content-blog/options.json".
[INFO] 4 translations will be written at "i18n/zh-CN/docusaurus-plugin-content-docs/current.json".
这里实际完成后的目录结构(因为 Docusaurus多文档 ),注意 docusaurus-plugin-content-docs 下有一个 current 子目录
i18n 目录.
└── zh-CN
├── code.json
├── docusaurus-plugin-content-blog
│ ├── 2019-05-28-first-blog-post.md
│ └── options.json
├── docusaurus-plugin-content-docs
│ ├── current
│ │ └── intro.md
│ └── current.json
├── docusaurus-plugin-content-docs-discovery
│ ├── current
│ │ └── intro.md
│ └── current.json
└── docusaurus-theme-classic
├── footer.json
└── navbar.json
备注
这里使用了参数 --locale zh-CN 则会创建和输出 zh-CN 对应locale目录结构和json文件,如果没有参数则会生成 en 对应的locale目录结构。
实践发现,需要同时为所有语言创建好目录结构(并且对应复制好文件进行后续翻译修改),否则切换语言会显示文件找不到
启动(开发环境每次只能启动一个locale):
zh-CN locale 服务测试npm run start -- --locale zh-CN --host 0.0.0.0
添加locale下拉菜单: 为了能够在不同语言间切换,修订
docusaurus.config.js:
docusaurus.config.js 添加语言切换下拉菜单export default {
themeConfig: {
navbar: {
items: [
{
type: 'localeDropdown',
position: 'left',
},
],
},
},
};
备注
i18n 实际上是采用 优先覆盖 模式,也就是:
如果
i18n/zh-CN/docusaurus-plugin-content-docs/current目录下有对应翻译文件intro.md,就会显示覆盖默认的intro.md但是如果没有翻译文件,则会继续显示
docs目录的对应默认文件
注意项
在开发环境中,每次只能测试一种
locale,也就是如果运行了--locale zh-CN,则全程只能测试该locale的页面点击,当使用locale下拉菜单点击English,会出现找不到页面报错。这是正常的,当需要测试Englishlocale,需要在运行启动时去除--locale zh-CN以默认en运行我最初在配置
docusaurus.config.js只设置了routeBasePath为arch,但是依然保留了默认的path(也就是docs),现在我统一为architecture(架构),同时设置path和routeBasePath
备注
我的实践配置见 multi docs, i18n (commit) (包含 Docusaurus多文档 )