使用您最喜欢的AI助手总结文档,并引用此页面和AI提供商
版本历史
- "更新 Solid useIntlayer API 用法以直接访问属性"v8.9.02026/5/4
- "添加 init 命令"v7.5.92025/12/30
- "更新布局和处理404"v7.5.62025/12/27
- "更新文档"v6.1.52025/10/3
- "添加 React Router v7 支持"v5.8.22025/9/4
此页面的内容已使用 AI 翻译。
查看英文原文的最新版本如果您有改善此文档的想法,请随时通过在GitHub上提交拉取请求来贡献。
文档的 GitHub 链接复制文档 Markdown 到剪贴板
使用Intlayer翻译您的React Router v7 | 国际化(i18n)
本指南演示了如何在 React Router v7 项目中集成 Intlayer,实现无缝国际化,支持基于区域的路由、TypeScript 支持以及现代开发实践。
本指南重点关注前端路由。对于 fs-routes 路由,请参考 Intlayer with React Router v7 File-System Routes 指南。
目录
为什么选择 Inlayer 而不是替代品?
与 react-i18next 或 i18next 等主要解决方案相比,Intlayer 是一个具有集成优化的解决方案,例如:
Intlayer 经过优化,可与 React Router 完美配合,提供区域设置感知路由、用于区域设置检测的中间件以及扩展国际化 (i18n) 所需的所有功能。
不要将大量 JSON 文件加载到页面中,而只需加载必要的内容。Intlayer 有助于将捆绑包和页面大小减少多达 50%。
确定应用程序内容的范围有利于大型应用程序的维护。您可以复制或删除单个功能文件夹,而无需承担检查整个内容代码库的精神负担。此外,Intlayer 具有完全类型化 (fully typed),以确保您的内容的准确性。
共置内容减少大型语言模型 (LLM) 所需的上下文。Intlayer 还附带了一套工具,例如用于测试缺失翻译的 CLI、LSP、MCP 和 agent skills,使 AI 代理的开发者体验 (DX) 更加流畅。
使用您选择的 LLM,通过自动化在 CI/CD 管道中进行翻译,而费用由您的 AI 提供商承担。Intlayer 还提供了一个编译器来自动提取内容,以及一个网络平台来帮助在后台翻译。
将大量 JSON 文件连接到组件可能会导致性能和反应性问题。Intlayer 可在构建时 (build time) 优化您的内容加载。
在 React Router v7 应用中设置 Intlayer 的分步指南
See the Config-Based Routing Template or File-System Routes Template on GitHub.
安装依赖
使用您首选的包管理器安装必要的包:
bash复制代码复制代码到剪贴板
--interactive标志是可选的。如果您是 AI agent,请使用intlayer-cli init。此命令将检测您的环境并安装所需的包。例如:
bash复制代码复制代码到剪贴板
intlayer
react-intlayer 将 Intlayer 与 React 应用集成的包。它为 React 国际化提供了上下文提供者和钩子。
vite-intlayer 包括用于将 Intlayer 与 Vite bundler 集成的 Vite 插件,以及用于检测用户首选区域设置、管理 cookie 和处理 URL 重定向的中间件。
配置您的项目
创建一个配置文件来配置您的应用程序语言:
intlayer.config.ts复制代码复制代码到剪贴板
import { type IntlayerConfig, Locales } from "intlayer"; const config: IntlayerConfig = { internationalization: { defaultLocale: Locales.ENGLISH, // 默认语言 locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], // 支持的语言列表 }, }; export default config;通过此配置文件,您可以设置本地化的 URL、中间件重定向、cookie 名称、内容声明的位置和扩展名,禁用控制台中的 Intlayer 日志等。有关可用参数的完整列表,请参阅配置文档。
在您的 Vite 配置中集成 Intlayer
将 intlayer 插件添加到您的配置中:
vite.config.ts复制代码复制代码到剪贴板
intlayer()Vite 插件用于将 Intlayer 与 Vite 集成。它确保构建内容声明文件并在开发模式下监控它们。它在 Vite 应用程序中定义 Intlayer 环境变量。此外,它提供别名以优化性能。配置 React Router v7 Routes
使用本地化感知路由设置您的路由配置:
app/routes.ts复制代码复制代码到剪贴板
Set up your routing configuration to use file-system based routes with
flatRoutes:app/routes.ts复制代码复制代码到剪贴板
The
flatRoutesfunction from@react-router/fs-routesenables file-system based routing, where the file structure in theroutes/directory determines your application's routes. TheignoredRouteFilesoption ensures that Intlayer content declaration files (.content.ts, etc.) are not treated as route files.创建根布局
设置您的根布局和特定于语言的布局:
根布局
app/root.tsx复制代码复制代码到剪贴板
声明您的内容
创建并管理您的内容声明以存储翻译:
app/routes/[lang]/page.content.ts复制代码复制代码到剪贴板
您的内容声明可以在应用程序的任何地方定义,只要它们被包含在
contentDir目录中(默认为./app)。并且匹配内容声明文件扩展名(默认为.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml})。如果使用基于文件系统的路由,可以放置在
app/routes/($locale)._index.content.ts。有关更多详细信息,请参阅content 声明文档。
创建本地化感知的组件
为区域感知导航创建一个
LocalizedLink组件:app/components/localized-link.tsx复制代码复制代码到剪贴板
如果您想导航到本地化的路由,您可以使用
useLocalizedNavigatehook:app/hooks/useLocalizedNavigate.ts复制代码复制代码到剪贴板
在你的页面中使用 Intlayer
在整个应用程序中访问您的内容字典:
本地化主页
app/routes/page.tsx复制代码复制代码到剪贴板
app/routes/($locale)._index.tsx复制代码复制代码到剪贴板
了解更多关于
useIntlayerhook 的信息,请参考文档。如果你的应用已经存在,你可以使用 Intlayer 编译器以及提取命令,在一秒内转换数千个组件。
创建语言切换器组件
创建一个组件以允许用户更改语言:
app/components/locale-switcher.tsx复制代码复制代码到剪贴板
app/components/locale-switcher.tsx复制代码复制代码到剪贴板
了解更多关于
useLocalehook 的信息,请参考文档。添加 HTML 属性管理
创建一个 hook 来管理 HTML lang 和 dir 属性:
app/hooks/useI18nHTMLAttributes.tsx复制代码复制代码到剪贴板
然后在你的根组件中使用它:
app/routes/layout.tsx复制代码复制代码到剪贴板
添加中间件
你也可以使用
intlayerProxy来为你的应用添加服务器端路由。这个插件将自动根据 URL 检测当前语言环境并设置适当的语言 cookie。如果未指定语言环境,该插件将根据用户的浏览器语言偏好确定最合适的语言环境。如果未检测到语言环境,它将重定向到默认语言环境。注意,要在生产环境中使用
intlayerProxy,你需要将vite-intlayer包从devDependencies切换到dependencies。自 Intlayer v9 起,
intlayerProxy()直接捆绑在intlayer()插件中,并通过routing.enableProxy选项(默认为true)默认启用。如下所示单独注册它现在是可选的 — 它保留用于向后兼容性和需要控制插件顺序的设置。设置routing.enableProxy: false以选择退出。查看 v9 发布说明。vite.config.ts复制代码复制代码到剪贴板
提取组件的内容
可选如果你有一个现有的代码库,转换数千个文件可能很耗时。
为了简化这个过程,Intlayer 提供了一个编译器 / 提取器来转换你的组件并提取内容。
要进行设置,你可以在
intlayer.config.ts文件中添加一个compiler部分:intlayer.config.ts复制代码复制代码到剪贴板
import { type IntlayerConfig } from "intlayer"; const config: IntlayerConfig = { // ... 其余配置 compiler: { /** * 指示编译器是否应该被启用。 */ enabled: true, /** * 定义输出文件路径 */ output: ({ fileName, extension }) => `./${fileName}${extension}`, /** * 指示组件在转换后是否应该被保存。 * * - 如果为 `true`,编译器将重新将组件文件写入磁盘。因此转换将是永久的,编译器将跳过下一个过程的转换。这样,编译器可以转换应用,然后可以删除它。 * * - 如果为 `false`,编译器仅在构建输出中注入 `useIntlayer()` 函数调用,并保持基础代码库完整。转换仅在内存中完成。 */ saveComponents: false, /** * 词典键前缀 */ dictionaryKeyPrefix: "", }, }; export default config;运行提取器来转换你的组件并提取内容
bash复制代码复制代码到剪贴板
自 v9 起,
intlayerCompiler已包含在intlayer插件中。因此你不需要手动添加它。更新你的
vite.config.ts以包含intlayerCompiler插件:vite.config.ts复制代码复制代码到剪贴板
bash复制代码复制代码到剪贴板
Configure TypeScript
Intlayer uses module augmentation to get benefits of TypeScript and make your codebase stronger.
Ensure your TypeScript configuration includes the autogenerated types:
复制代码到剪贴板
Git Configuration
It is recommended to ignore the files generated by Intlayer. This allows you to avoid committing them to your Git repository.
To do this, you can add the following instructions to your .gitignore file:
复制代码到剪贴板
VS Code Extension
To improve your development experience with Intlayer, you can install the official Intlayer VS Code Extension.
Install from the VS Code Marketplace
This extension provides:
- 翻译键的自动补全。
- 缺失翻译的实时错误检测。
- 翻译内容的内联预览。
- 轻松创建和更新翻译的快速操作。
有关如何使用该扩展的更多详细信息,请参阅 Intlayer VS Code 扩展文档。
深入了解
要深入了解,您可以实现 可视化编辑器 或使用 CMS 将内容外部化。
文档参考
本综合指南提供了将 Intlayer 与 React Router v7 集成所需的全部内容,帮助您构建具备支持语言环境的路由与 TypeScript 支持的完整国际化应用。
常见问题
React Router v7 本身不包含消息管理层,因此需要将其与 i18n 库搭配使用:
react-i18next/i18next:在运行时加载 JSON 命名空间,需要单独编写语言检测器接入路由。react-intl和Lingui:基于提取步骤的 ICU 消息方案。Intlayer:最先进的解决方案。内容可以在代码库中的任何位置声明(靠近每个组件或集中管理),在构建时编译,全链路类型安全,提供支持语言环境的路由辅助函数、AI 翻译、可视化编辑器和 CMS。
请参阅 为什么选择 Intlayer 和 性能基准。
远少于基于命名空间的方案,因为页面永远不会下载它不渲染的语言目录。服务端渲染的标记在服务端直接解析内容,构建时编译器将 useIntlayer 调用替换为组件使用的确切字典条目,因此未使用的键和未使用的语言都会被自动丢弃,并且 动态字典 会按语言环境拆分剩余内容。与常规替代方案相比,Intlayer 可将 bundle 和页面体积减少高达 50%。请参阅 Bundle 体积优化 和 性能基准。
可以,有两条迁移路径。您可以使用 react-i18next 迁移指南 或 i18next 迁移指南 逐步迁移内容。或者,您可以完全保留当前的 API:兼容性适配器 公开与 react-i18next、react-intl 和 i18next 完全相同的 API,但底层由 Intlayer 字典驱动,因此只需更改导入语句,组件代码完全无需修改。
可以。JSON 同步插件 将您的 /messages/{locale}/{namespace}.json 文件作为单一真实来源(source of truth),并双向生成 Intlayer 字典。PO 同步插件 对 gettext 目录执行相同的操作,而 按语言环境组织的文件 允许您按语言拆分内容,而不是将所有语言打包到一个文件中。
不需要。运行 npx intlayer extract,Intlayer 会读取您的组件,提取面向用户的字符串,并在每个组件旁边生成 .content 文件,这样您只需审查 diff,而无需手动逐一复制字符串到语言目录中。本指南的第 12 步详细介绍了此过程。
如需全自动流程,Intlayer Compiler 可在构建时执行相同操作:它在每次更改时扫描您的 JSX、TSX、Vue 和 Svelte 源代码,生成字典并通过热模块替换 (HMR) 保持同步,因此完全无需手动维护键名。
开启编译器前有两个限制值得了解:它通过静态分析工作,因此仅在运行时存在的字符串(如 API 错误代码或 CMS 字段)无法被捕获;此外它需要区分用户文本和应用程序逻辑(如 className="active" 或状态代码),在大型代码库中需要少量注解。而 extract 命令 则通过让您参与审查避免了这两个问题。
共有 5 个工具,均为可选:
- VS Code 扩展:从
useIntlayer键跳转到声明它的内容文件,从组件中提取内容,并从命令面板或专属的 Intlayer 选项卡运行 build、fill、test、push 和 pull。 - LSP 服务器:在任何支持 LSP 的编辑器中提供相同的感知能力,支持跳转到定义、查找所有引用、悬停预览翻译值、键和字段的自动补全,以及在键未声明时发出警告。它还可以解析
i18next、react-i18next、next-intl和use-intl调用,助力平滑迁移。 - MCP 服务器:向 Cursor、VS Code、Claude Desktop、Claude Code 和 ChatGPT 公开 Intlayer 文档与 CLI,使 AI 助手能够基于最新文档进行准确回答,并能自行运行
intlayer fill等命令。 - Agent Skills:针对特定领域的技能(如
intlayer-config、intlayer-cli和intlayer-content,以及每个框架对应的专属技能),教导 AI 代理您的路由配置和内容节点类型。 - ESLint 插件:
no-raw-text规则标记硬编码字符串,并提供针对静态字典键和未使用内容的额外规则。
