使用您最喜欢的AI助手总结文档,并引用此页面和AI提供商
版本历史
- "Init history"v9.0.02026/6/5
此页面的内容已使用 AI 翻译。
查看英文原文的最新版本If you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
从 i18next 迁移到 Intlayer
为什么从 i18next 迁移到 Intlayer?
与其将庞大的 JSON 文件加载到页面中,不如仅加载必要的内容。Intlayer 帮助将 bundle 和页面大小减少高达 50%。
限定应用内容的范围便于大规模应用的维护。您可以复制或删除单个功能文件夹,而无需费力审查整个内容 codebase。此外,Intlayer 完全类型化以确保内容的准确性。
Intlayer 也是 i18n 生态系统中开发最活跃的解决方案——问题得到快速修复,新的框架适配器定期发布,核心 API 根据真实生产反馈不断改进。
内容共定位减少了大型语言模型 (LLM) 所需的上下文。Intlayer 还提供一套工具,如CLI 来测试缺失的翻译、LSP、MCP 和agent skills,使 AI agents 的开发者体验 (DX) 更加顺利。
使用自动化在您的 CI/CD pipeline 中进行翻译,使用您选择的 LLM,费用由您的 AI 提供商承担。Intlayer 还提供编译器来自动化内容提取,以及一个 web platform 来帮助在后台翻译。
将庞大的 JSON 文件连接到组件可能导致性能和响应性问题。Intlayer 在构建时优化您的内容加载。
迁移策略
从 i18next 迁移到 Intlayer 有两种互补策略:
兼容性适配器(推荐用于现有应用) — 安装
@intlayer/i18next。这个包暴露了与i18next完全相同的 API,但在底层将所有翻译工作委托给 Intlayer。你可以保留现有的i18next.t()、i18next.changeLanguage()和createInstance()调用 — 唯一的改变是导入路径和初始化方式。完整迁移 — 逐步用原生 Intlayer 工具替换
i18nextAPI,并在.content.ts文件中并置内容。
本指南首先涵盖策略 1(即插即用的兼容性适配器),然后演示可选的完整迁移。
目录
快速迁移
以下步骤是使现有 i18next 应用以零代码更改运行在 Intlayer 上所需的最少要求。
安装依赖
安装 Intlayer 核心包和兼容性适配器:
bash复制代码复制代码到剪贴板
npx intlayer-cli init --interactive--interactive标志是可选的。如果你是 AI 代理,请使用intlayer-cli init。此命令将检测你的环境并安装所需的包。例如:
bash复制代码复制代码到剪贴板
npm install intlayer @intlayer/i18next @intlayer/sync-json-plugin你可以保持
i18next的安装 — 兼容性适配器将其用作devDependency/peerDependency来获取 TypeScript 类型。配置 Intlayer
intlayer init命令创建一个起始的intlayer.config.ts。更新它以匹配你现有的语言环境并将syncJSON插件指向你的消息文件:intlayer.config.ts复制代码复制代码到剪贴板
import { Locales, type IntlayerConfig } from "intlayer"; import { syncJSON } from "@intlayer/sync-json-plugin"; const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, // 在此处添加所有现有语言环境 ], defaultLocale: Locales.ENGLISH, }, plugins: [ syncJSON({ // 匹配 i18next 占位符语法:{{name}} format: "i18next", source: ({ locale }) => `./src/locales/${locale}.json`, location: "src/locales", }), ], }; export default config;source将语言环境映射到其 JSON 文件路径。location告诉 Intlayer 监听器应监控哪个文件夹以获取更改。format: 'i18next'选项确保正确解析占位符,如{{name}}。更新 Bundler 别名(可选)
如果你使用 bundler(Vite、Webpack、esbuild),可以注入模块别名,使得
import ... from 'i18next'自动解析为@intlayer/i18next。这消除了手动更改代码库中任何导入的需要。对于 Vite:
vite.config.ts复制代码复制代码到剪贴板
import { defineConfig } from "vite"; import i18nextVitePlugin from "@intlayer/i18next/plugin"; export default defineConfig({ plugins: [i18nextVitePlugin()], });i18nextVitePlugin()包装vite-intlayer的intlayer()插件,并为你添加i18next→@intlayer/i18next别名。使用来自vite-intlayer的普通intlayer()插件会编译字典,但 不会 添加该别名 — 你需要手动将导入重命名为@intlayer/i18next(见下一步)。
这就是快速迁移的全部内容。你的应用现在运行在 Intlayer 上,同时保持每个 i18next 导入和 API 完整。
完整迁移
下面的步骤是可选的,可以逐步完成。它们解锁了完整的 Intlayer 功能集:可视化编辑器、CMS、类型化内容文件、AI 驱动的翻译等。
显式导入重命名(可选)
可选如果您想在源文件中明确声明依赖关系,或者您没有使用 bundler 插件来别名导入,您可以手动重命名导入:
显示表格的所有内容在弹窗中打开表格以清晰地查看所有数据
之前 之后 import i18next from 'i18next'import i18next from '@intlayer/i18next'import { createInstance } from 'i18next'import { createInstance } from '@intlayer/i18next'import { t } from 'i18next'import { t } from '@intlayer/i18next'这些是直接替换 — 不需要对调用签名、参数或返回类型进行任何更改。
启用 AI 驱动的翻译自动化
可选Intlayer 配置完成后,使用其 CLI 自动填充缺失的翻译:
bash复制代码复制代码到剪贴板
# 测试缺失的翻译(添加到 CI)npx intlayer test# 使用 AI 填充缺失的翻译npx intlayer fill将 AI 配置添加到
intlayer.config.ts:intlayer.config.ts复制代码复制代码到剪贴板
import { Locales, type IntlayerConfig } from "intlayer"; import { syncJSON } from "@intlayer/sync-json-plugin"; const config: IntlayerConfig = { internationalization: { locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], defaultLocale: Locales.ENGLISH, }, plugins: [ syncJSON({ format: "i18next", source: ({ locale }) => `./src/locales/${locale}.json`, location: "src/locales", }), ], ai: { apiKey: process.env.OPENAI_API_KEY, // provider: "openai", // 默认值 // model: "gpt-4o-mini", // 默认值 }, }; export default config;查看 Intlayer CLI 文档 了解所有可用选项。
迁移后可以删除的内容
一旦 compat adapter 就位,以下 i18next 样板代码可以删除:
在弹窗中打开表格以清晰地查看所有数据
| 文件 / 模式 | 为什么不再需要 |
|---|---|
i18next.init() 调用 | Intlayer 自动初始化所有内容;没有运行时加载步骤。 |
i18next.use(...) | Intlayer 不使用 i18next 插件、后端或语言检测器。 |
JSON 语言包 (locales/*.json) | JSON 包仅在您仍然使用 syncJSON 插件时才需要。迁移到 .content.ts 文件后,您可以删除 JSON 文件夹。 |
当您准备进一步操作时,Intlayer 自动发现您的 codebase 中任何地方的所有 .content.ts 和 .content.json 文件(默认情况下,在 ./src 内的任何地方)。您可以将 my-component.content.ts 文件放在逻辑代码的旁边,Intlayer 将在构建时自动发现它,无需任何额外配置——无需导入、无需注册、无需集中索引文件。这使得共置翻译完全无摩擦。
配置 TypeScript
Intlayer 使用模块增强来为您的翻译键提供完整的 TypeScript intellisense。确保您的 tsconfig.json 包含自动生成的类型:
复制代码到剪贴板
{ // ... 您现有的 TypeScript 配置 "include": [ // ... 您现有的 TypeScript 配置 ".intlayer/**/*.ts", // 包含自动生成的类型 ],}Git 配置
将 Intlayer 生成的目录添加到你的 .gitignore:
复制代码到剪贴板
# Ignore the files generated by Intlayer.intlayer深入了解
- Visual Editor — 在浏览器中直观管理翻译: Intlayer Visual Editor
- CMS — 外部化和远程管理内容: Intlayer CMS
- VS Code Extension — 获得自动完成和实时翻译错误检测: Intlayer VS Code Extension
- CLI Reference — CLI 命令完整列表: Intlayer CLI