UNPKG

@modern-js/doc-tools-doc

Version:

Website for @modern-js/doc-tools

207 lines (165 loc) 5.98 kB
# 国际化 在 Modern.js Doc 中实现文档的国际化,你需要做如下的操作: - 1. 定义 I18n 文本数据。 - 2. 配置默认语言。 - 3. 配置 `doc.locales` 和 `doc.themeConfig.locales`。 - 4. 新建不同的语言版本的文档。 - 5. 配置侧边栏和导航栏。 - 6. 自定义组件中使用 `useI18n`。 ## 定义 I18n 文本数据 在当前工作区新建 `i18n.json`,目录结构如下: ```bash {15} . ├── docs ├── i18n.json ├── package.json ├── tsconfig.json └── modern.config.ts ``` 在这个 JSON 文件中,你可以定义国际化所需的文本,类型定义如下: ```ts export interface I18n { // key 为文本 id [key: string]: { // key 为语言 [key: string]: string; }; } ``` 举个例子: ```json title="i18n.json" { "getting-started": { "zh": "开始", "en": "Getting Started" }, "features": { "zh": "基础功能", "en": "Features" }, "guide": { "zh": "指南", "en": "Guide" } } ``` 这些文本数据在**配置文件**和**自定义组件**中都会用到,后文会详细介绍。 ## 配置默认语言 在 `modern.config.ts`中,你可以通过 `doc.lang` 配置文档的默认语言,如下例子所示: ```ts title="modern.config.ts" import { docTools, defineConfig } from '@modern-js/doc-tools'; export default defineConfig({ doc: { lang: 'zh', }, plugins: [docTools()], }); ``` 这很重要,因为**对于默认语言下的路由,框架会去掉语言前缀**,比如 `/zh/guide/getting-started` 会被转换为 `/guide/getting-started`。 ## 配置 `locales` 数据 在 `modern.config.ts`中,你可以通过两个地方来配置 `locales` 数据: - `doc.locales`,用于配置站点的`语言`、`标题`、`描述`等信息,主要围绕站点本身的信息来配置。 - `doc.themeConfig.locales`,用于配置主题的`语言`、`大纲栏标题`、`上一页/下一页文本`等信息,主要进行主题相关的配置。 ```ts title="modern.config.ts" import { docTools, defineConfig } from '@modern-js/doc-tools'; export default defineConfig({ doc: { // locales 为一个对象数组 locales: [ { lang: 'en', // 导航栏切换语言的标签 label: 'English', title: 'Modern.js', description: 'Modern.js 文档框架', }, { lang: 'zh', // 导航栏切换语言的标签 label: '简体中文', title: 'Modern.js', description: 'Modern.js Doc', }, ], themeConfig: { locales: [ { lang: 'en', outlineTitle: 'ON THIS Page', }, { lang: 'zh', outlineTitle: '大纲', }, ], }, }, plugins: [docTools()], }); ``` :::tip 注意 默认主题中, `doc.themeConfig.locales` 也包含 `doc.locales` 中的所有字段,前者优先级更高。 ::: 对于其它的国际化主题参数配置,请参考[API 类型](/api/config/config-theme#locales)。 ## 新建不同的语言版本的文档 在做好上面的配置后,我们就可以开始新建不同语言版本的文档了,非常简单,我们只需要在文档根目录下新建如下的结构即可: ```bash docs ├── en │ ├── api │ │ └── index.md │ └── guide │ └── getting-started.md │ └── features.md └── zh ├── api │ └── index.md └── guide └── getting-started.md └── features.md ``` 可以看到,我们把不同语言的文档放在了 `docs` 目录下的 `en` 和 `zh` 目录中,这样就可以方便地区分不同语言的文档了。 ## 配置侧边栏和导航栏 > 如果你使用了[自动化导航栏/侧边栏](/guide/basic/auto-nav-sidebar)写法,可以跳过这个部分。 我们在[约定式路由](/guide/basic/conventional-route)中提到过,针对不同的文件路径,我们会自动生成对应的路由。那么,在国际化文档的场景中,每份文档的路由是不一样的,那么针对 N 种语言的文档,我们需要写 N 份侧边栏和导航栏的配置吗? 答案是**不用**。在 Modern.js Doc 框架中,你只需要写一份配置即可。如何完成呢? 我们来这样配置侧边栏和导航栏: ```ts title="modern.config.ts" import { docTools, defineConfig } from '@modern-js/doc-tools'; // 工具函数,用于获取类型提示 const getI18nKey = (key: keyof typeof import('./i18n.json')) => key; export default defineConfig({ doc: { // 前面的配置省略 themeConfig: { nav: [ { text: getI18nKey('guide'), link: '/guide/', }, ], sidebar: { '/guide/': [ { text: getI18nKey('getting-started'), link: '/guide/getting-started', }, { text: getI18nKey('features'), link: '/guide/features', }, ], }, }, }, plugins: [docTools()], }); ``` 可以看到,在 nav 和 sidebar 的配置中,我们主要涉及到两种元素的配置: - `文本`。在国际化场景中,你只需要传入 `i18n.json` 中的文案 key 即可,框架会自动根据当前语言来获取对应的文本。 - `链接`。你无需添加语言前缀,框架会自动根据当前语言来添加对应的语言前缀。比如默认语言为中文的情况下,在英文文档中 `/guide/features` 会被转换为 `/en/guide/features`。 最后你只需要写一份 `nav` 和 `sidebar` 的配置,框架会自动根据当前语言来获取对应的文本和链接。 ## 自定义组件中使用 `useI18n` 在 MDX 开发或者自定义主题开发的过程中,你可能会写一些自定义组件,这些组件中也需要使用到国际化文本,那么如何获取呢? import UseI18n from '../../fragments/useI18n'; <UseI18n />