intlayer: NPM包用于管理多语言内容声明(i18n)

    Intlayer 是一套专为JavaScript开发者设计的包。它与React、Next.js和Express.js等框架兼容。

    intlayer 允许您在代码中的任何地方声明内容。它将多语言内容声明转换为结构化的字典,无缝集成到您的应用程序中。通过TypeScript,Intlayer通过提供更强大、更高效的工具增强您的开发。

    为什么集成Intlayer?

    • 基于JavaScript的内容管理:利用JavaScript的灵活性高效地定义和管理您的内容。
    • 类型安全的环境:利用TypeScript确保您所有的内容定义都是精确的且无错误的。
    • 集成内容文件:将您的翻译与相应的组件紧密结合,提高可维护性和清晰性。

    安装

    使用您的首选包管理器安装必要的包:

    bash
    npm install intlayer

    配置Intlayer

    Intlayer提供一个配置文件以设置您的项目。将此文件放在项目根目录中。

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],    defaultLocale: Locales.ENGLISH,  },};export default config;

    有关可用参数的完整列表,请参考配置文档

    使用示例

    使用Intlayer,您可以在代码库中的任何地方以结构化的方式声明您的内容。

    默认情况下,Intlayer扫描扩展名为 .content.{ts,tsx,js,jsx,mjs,cjs} 的文件。

    您可以通过在配置文件中设置 contentDir 属性来修改默认扩展名。

    bash
    .├── intlayer.config.ts└── src    ├── ClientComponent    │   ├── index.content.ts    │   └── index.tsx    └── ServerComponent        ├── index.content.ts        └── index.tsx

    声明您的内容

    这是一个内容声明的示例:

    tsx
    import { type DeclarationContent, t } from "intlayer";const clientComponentContent = {  key: "client-component",  content: {    myTranslatedContent: t({      en: "Hello World",      fr: "Bonjour le monde",      es: "Hola Mundo",    }),    numberOfCar: enu({      "<-1": "少于一辆车",      "-1": "减去一辆车",      "0": "没有车",      "1": "一辆车",      ">5": "几辆车",      ">19": "很多车",    }),  },} satisfies DeclarationContent;export default clientComponentContent;

    构建您的字典

    您可以使用intlayer-cli构建您的字典。

    bash
    npx intlayer build

    该命令扫描所有 *.content.* 文件,编译它们,并将结果写入您 intlayer.config.ts 中指定的目录(默认是 ./.intlayer)。

    典型的输出可能如下所示:

    bash
    .├── .intlayer│   ├── dictionary  # 包含您内容的字典│   │   ├── client-component.json│   │   └── server-component.json│   ├── main  # 包含您字典的入口点,可用于您的应用程序│   │   ├── dictionary.cjs│   │   └── dictionary.mjs│   └── types  # 包含您字典的自动生成的类型定义│       ├── client-component.d.ts│       └── server-component.d.ts└── types    └── intlayer.d.ts  # 包含Intlayer的自动生成类型定义

    构建i18next资源

    Intlayer可以配置为为i18next构建字典。为此,您需要将以下配置添加到您的 intlayer.config.ts 文件中:

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";const config: IntlayerConfig = {  /* ... */  content: {    // 告诉Intlayer为i18next生成消息文件    dictionaryOutput: ["i18next"],    // Intlayer将写入您的消息JSON文件的目录    i18nextResourcesDir: "./i18next/resources",  },};

    有关可用参数的完整列表,请参考配置文档

    输出:

    bash
    .└── i18next    └── resources        ├── en        │   ├── client-component.json        │   └── server-component.json        ├── es        │   ├── client-component.json        │   └── server-component.json        └── fr            ├── client-component.json            └── server-component.json

    例如,en/client-component.json 可能如下所示:

    json
    {  "myTranslatedContent": "Hello World",  "zero_numberOfCar": "没有车",  "one_numberOfCar": "一辆车",  "two_numberOfCar": "两辆车",  "other_numberOfCar": "几辆车"}

    构建i18next或next-intl字典

    Intlayer可以配置为为i18nextnext-intl构建字典。为此,您需要将以下配置添加到您的 intlayer.config.ts 文件中:

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";const config: IntlayerConfig = {  /* ... */  content: {    // 告诉Intlayer为next-intl生成消息文件    dictionaryOutput: ["next-intl"],    // Intlayer将写入您的消息JSON文件的目录    nextIntlMessagesDir: "./i18next/messages",  },};

    有关可用参数的完整列表,请参考配置文档

    输出:

    bash
    .└── intl    └── messages        ├── en        │   ├── client-component.json        │   └── server-component.json        ├── es        │   ├── client-component.json        │   └── server-component.json        └── fr            ├── client-component.json            └── server-component.json

    例如,en/client-component.json 可能如下所示:

    json
    {  "myTranslatedContent": "Hello World",  "zero_numberOfCar": "没有车",  "one_numberOfCar": "一辆车",  "two_numberOfCar": "两辆车",  "other_numberOfCar": "几辆车"}

    CLI工具

    Intlayer提供一个CLI工具,用于:

    • 审核您的内容声明并完成缺失的翻译
    • 从您的内容声明构建字典
    • 从您的CMS推送和拉取远程字典到您的本地项目

    请参考intlayer-cli以获取更多信息。

    在您的应用程序中使用Intlayer

    在声明您的内容后,您可以在应用程序中使用您的Intlayer字典。

    Intlayer作为您应用程序的一个包可用。

    React应用程序

    要在您的React应用程序中使用Intlayer,您可以使用react-intlayer

    Next.js应用程序

    要在您的Next.js应用程序中使用Intlayer,您可以使用next-intlayer

    Express应用程序

    要在您的Express应用程序中使用Intlayer,您可以使用express-intlayer

    intlayer包提供的函数

    intlayer包还提供一些函数来帮助您国际化您的应用程序。

    如果您有改善此文档的想法,请随时通过在GitHub上提交拉取请求来贡献。

    文档的 GitHub 链接