用Docusaurus搭建网站实现国际化

1,657 阅读2分钟

因为觉得官网的汉化做的很差很差,有中文的地方都是英文直译过来的,国际化教程看的很懵。摸索了半天搞出来决定写个简单易懂的教程。

官网链接docusaurus.io/zh-CN/docs/…

1.你需要在docusaurus.config.ts文件里面配置你想要的语言:

   i18n: {
    defaultLocale: 'en',
    locales: ['en', 'zh-Hans'],
    localeConfigs: {
      'zh-Hans': {
        htmlLang: 'zh-Hans',
      },
    },
  },
  
//这是官网的示例:
export default {
  i18n: {
    defaultLocale: 'en',
    locales: ['en', 'fr', 'fa'],
    localeConfigs: {
      en: {
        htmlLang: 'en-GB',
      },
      // 如果不需要重写默认值,可以忽略 locale (例如 fr)
      fa: {
        direction: 'rtl',
      },
    },
  },
};

语言名称会被用于翻译文件的位置以及你的本地化网站的 base URL。 构建所有语言时,只有默认语言才会在 base URL 中省略它的名字。

Docusaurus 使用语言环境名称来提供合理的默认值<html lang="...">属性、语言环境标签、日历格式等。您可以使用 自定义这些默认值localeConfigs

2.添加类型的导航栏项localeDropdown,以便用户可以选择他们想要的语言环境:

 export default {
        {
          type: 'localeDropdown',
          position: 'right',
        },
  }

3.运行指令

npm run start -- --locale zh-Hans

这一步已经可以浏览你要国际化的那个语言页面了,您的网站可以通过访问[http://localhost:3000/zh-Hans/]但是这时候还没有进行翻译配置。

注意:每个地区都是一个独立的单页应用程序:不可能同时在所有地区启动 Docusaurus 站点。意思就是你点切换语言会出现Page No Found这是正常的

4.翻译docusaurus.config.js中的文件 执行指令(我这里是中文)

npm run write-translations -- --locale zh-Hans

会自动集成一个i18n的文件夹,里面是你的中文翻译配置。此时如果你在docusaurus.config.js中写了navbarfooter的话就会被集成到docusaurus-theme-classic.json里面去,然后你就可以去docusaurus-theme-classic.json找到你想改的内容找翻译软件将它翻译成你想要的语言。

5.翻译React中的内容

import React from "react";
import Layout from "@theme/Layout";
import Link from "@docusaurus/Link";
import Translate, { translate } from "@docusaurus/Translate"; //引入Translate Api

export default function Home() {
  return (
    <Layout>
      <h1>
        <Translate>Welcome to my website</Translate>//把需要翻译的地方都用Translate组件包裹
      </h1>
      <main>
        <Translate
          id="homepage.visitMyBlog"
          description="The homepage message to ask the user to visit my blog"
          values={{
            blogLink: (
              <Link to="https://docusaurus.io/blog">
                <Translate
                  id="homepage.visitMyBlog.linkLabel"
                  description="The label for the link to my blog"
                >
                  blog
                </Translate>
              </Link>
            ),
          }}
        >
          {"You can also visit my {blogLink}"}
        </Translate>
        <img
          src="/img/home.png"
          alt={translate({
            message: "Home icon",
            description: "The homepage icon alt message",
          })}
        />
      </main>
    </Layout>
  );
}

然后再执行指令(我这里是中文)

npm run write-translations -- --locale zh-Hans

这时候你的react文件里面被Translate组件包裹的部分就会被集成到i18ncode.json里面去。找到你想改的内容找翻译软件将它翻译成你想要的语言就完成了。