使用您最喜欢的AI助手总结文档,并引用此页面和AI提供商
版本历史
- "更新 Solid useIntlayer API 用法以直接访问属性"v8.9.02026/5/4
- "添加 init 命令"v7.5.92025/12/30
- "引入 validatePrefix 并添加步骤 14: 处理带有本地化路由的 404 页面。"v7.4.02025/12/11
- "添加步骤 13: 在您的 server actions 中获取 locale (可选)"v7.3.92025/12/5
- "添加步骤 13: 适配 Nitro"v7.2.32025/11/18
- "通过添加 getPrefix 函数修复 useLocalizedNavigate、LocaleSwitcher 和 LocalizedLink 的前缀默认值。"v7.1.02025/11/17
- "更新文档"v6.5.22025/10/3
- "为 Tanstack Start 添加支持"v5.8.12025/9/9
此页面的内容已使用 AI 翻译。
查看英文原文的最新版本如果您有改善此文档的想法,请随时通过在GitHub上提交拉取请求来贡献。
文档的 GitHub 链接复制文档 Markdown 到剪贴板
使用Intlayer翻译您的Tanstack Start | 国际化(i18n)
目录
本指南演示如何在 Tanstack Start 项目中集成 Intlayer,实现无缝国际化,支持基于区域设置的路由、TypeScript 支持以及现代开发实践。
为什么选择 Inlayer 而不是替代品?
与“react-i18next”或“use-intl”或“paraglide”等主要解决方案相比,Intlayer是一个具有集成优化的解决方案,例如:
完整的 TanStack Start 覆盖
Intlayer 针对 TanStack Start 进行了全面优化,提供多语言路由、cookie 管理、站点地图生成、动态内容加载以及扩展国际化 (i18n) 工作所需的所有功能。
捆绑尺寸
不要将大量 JSON 文件加载到页面中,而只需加载必要的内容。 Intlayer 有助于将捆绑包和页面大小减少多达 50%。
可维护性
确定应用程序内容的范围有利于大型应用程序的维护。您可以复制或删除单个功能文件夹,而无需承担检查整个内容代码库的精神负担。此外,Intlayer 具有完全类型化 (fully typed),以确保您的内容的准确性。
人工智能代理
共置内容减少大型语言模型 (LLM) 所需的上下文。 Intlayer 还附带了一套工具,例如用于测试缺失翻译的 CLI、LSP、MCP 和 agent技能,使 AI 代理的开发者体验 (DX) 更加流畅。
自动化
使用您选择的法学硕士,通过自动化在 CI/CD 管道中进行翻译,而费用由您的 AI 提供商承担。 Intlayer 还提供了一个编译器来自动提取内容,以及一个网络平台来帮助在后台翻译。
表现
将大量 JSON 文件连接到组件可能会导致性能和反应性问题。 Intlayer 可在构建时 (build time)优化您的内容加载。
无需开发即可扩展
Intlayer 不仅仅是一个 i18n 解决方案,还提供了一个自托管的可视化编辑器和一个完整的 CMS 来帮助您管理多语言内容实时,与译员、文案人员和其他团队成员无缝协作。内容可以本地和/或远程存储。
在 Tanstack Start 应用中设置 Intlayer 的分步指南
在 GitHub 上查看应用程序模板。
第一步:创建项目
首先,按照 TanStack Start 网站上的新建项目指南创建一个新的 TanStack Start 项目。
第二步:安装 Intlayer 包
使用您喜欢的包管理器安装所需的包:
复制代码到剪贴板
intlayer
react-intlayer
将 Intlayer 集成到 React 应用中的包。它为 React 国际化提供上下文提供者和钩子。vite-intlayer
包含用于将 Intlayer 集成到Vite 打包器的 Vite 插件,以及用于检测用户首选语言、管理 Cookie 和处理 URL 重定向的中间件。
第三步:项目配置
创建一个配置文件来配置您的应用程序语言:
复制代码到剪贴板
通过此配置文件,您可以设置本地化 URL、中间件重定向、cookie 名称、内容声明的位置和扩展名、禁用控制台中的 Intlayer 日志等。有关可用参数的完整列表,请参阅配置文档。
第四步:在您的 Vite 配置中集成 Intlayer
将 intlayer 插件添加到您的配置中:
复制代码到剪贴板
intlayer() Vite 插件用于将 Intlayer 集成到 Vite 中。它确保构建内容声明文件并在开发模式下监视它们。它在 Vite 应用中定义了 Intlayer 环境变量。此外,它还提供别名以优化性能。
第五步:创建根布局
配置您的根布局以支持国际化,使用 useParams 检测当前 locale 并在 html 标签上设置 lang 和 dir 属性。
复制代码到剪贴板
如果您想在字符串属性中使用内容,比如alt、title、href、aria-label等,可以使用函数的值,例如:
html复制代码复制代码到剪贴板
第六步:创建 Locale 布局
创建一个处理 locale 前缀并执行验证的布局。
复制代码到剪贴板
这里,{-$locale}是一个动态路由参数,会被当前 locale 替换。此表示法使插槽可选,允许它与'prefix-no-default'等路由模式一起工作。
请注意,如果您在同一路由中使用多个动态段(例如,
/{-$locale}/other-path/$anotherDynamicPath/...),此插槽可能会导致问题。 对于'prefix-all'模式,您可能更喜欢将插槽切换为$locale。 对于'no-prefix'或'search-params'模式,您可以完全删除插槽。
第七步:声明您的内容
创建并管理您的内容声明以存储翻译:
复制代码到剪贴板
您的内容声明可以在应用程序中的任何位置定义,只要它们被包含在contentDir目录中(默认是./app)。并且文件扩展名需匹配内容声明文件扩展名(默认是.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml})。
更多详情,请参阅内容声明文档。
第八步:创建支持多语言的组件和钩子
创建一个用于多语言导航的 LocalizedLink 组件:
复制代码到剪贴板
该组件有两个目标:
- 移除 URL 中不必要的
{-$locale}前缀。 - 将 locale 参数注入 URL,确保用户被直接重定向到本地化路由。
接下来我们可以创建一个用于编程导航的 useLocalizedNavigate 钩子:
复制代码到剪贴板
第九步:在您的页面中使用 Intlayer
在整个应用程序中访问您的内容字典:
本地化首页
复制代码到剪贴板
要了解更多关于 useIntlayer 钩子的内容,请参阅文档。
第十步:创建语言切换组件
创建一个组件,允许用户切换语言:
复制代码到剪贴板
要了解有关 useLocale 钩子的更多信息,请参阅文档。
第十一步:HTML 属性管理
如第5步所示,您可以在根组件中使用 useParams 管理 html 标签的 lang 和 dir 属性。这确保在服务器和客户端上正确设置属性。
复制代码到剪贴板
第十二步:添加中间件(可选)
您还可以使用 intlayerProxy 为您的应用程序添加服务器端路由。该插件将根据 URL 自动检测当前语言环境,并设置相应的语言环境 Cookie。如果未指定语言环境,插件将根据用户浏览器的语言偏好确定最合适的语言环境。如果未检测到语言环境,它将重定向到默认语言环境。
注意,要在生产环境中使用intlayerProxy,您需要将vite-intlayer包从devDependencies切换到dependencies。
复制代码到剪贴板
第十二步:国际化您的元数据(可选)
您还可以使用 getIntlayer 钩子在整个应用程序中访问您的内容字典:
复制代码到剪贴板
第十三步:在您的 server actions 中获取 locale(可选)
您可能希望从 server actions 或 API 端点内部访问当前 locale。
您可以使用 intlayer 中的 getLocale 辅助函数来实现这一点。
以下是使用 TanStack Start 的 server functions 的示例:
复制代码到剪贴板
第十四步:管理未找到的页面(可选)
当用户访问不存在的页面时,您可以显示自定义的未找到页面,并且区域设置前缀可能会影响未找到页面的触发方式。
了解 TanStack Router 使用区域设置前缀的 404 处理
在 TanStack Router 中,使用本地化路由处理 404 页面需要采用多层方法:
- 专用 404 路由:用于显示 404 UI 的特定路由
- 路由级验证:验证区域设置前缀并将无效的前缀重定向到 404
- 捕获所有路由:捕获区域设置段内任何不匹配的路径
复制代码到剪贴板
复制代码到剪贴板
复制代码到剪贴板
第十五步:提取组件中的内容(可选)
如果您有现有的代码库,转换数千个文件可能会非常耗时。
为了简化此过程,Intlayer 提供了 编译器 / 提取器 来转换您的组件并提取内容。
要进行设置,您可以在 intlayer.config.ts 文件中添加 compiler 部分:
复制代码到剪贴板
运行提取器以转换组件并提取内容
复制代码到剪贴板
第十六步:生成站点地图 (Sitemap)(可选)
Intlayer 附带一个内置的站点地图生成器,可帮助您轻松为应用程序创建站点地图。它能够处理本地化路由,并为搜索引擎添加必要的元数据。
Intlayer 生成的站点地图支持xhtml:link命名空间(Hreflang XML 扩展)。与仅列出原始 URL 的默认站点地图生成器不同,Intlayer 会自动在页面的所有语言版本(例如/about、/about?lang=fr和/about?lang=es)之间创建所需的双向链接。这确保了搜索引擎能够正确索引并向合适的受众提供正确的语言版本。
要使用它,您首先需要配置 vite.config.ts 文件,以启用本地化路由的预渲染,并禁用默认的 TanStack Start 站点地图生成。
复制代码到剪贴板
然后,创建一个使用 generateSitemap 函数的路由 src/routes/sitemap[.]xml.ts:
复制代码到剪贴板
第十七步:TypeScript 配置 (可选)
Intlayer 通过模块扩充来利用 TypeScript 的优势,增强您的代码库。
确保自动生成的类型已包含在您的 TypeScript 配置中。
复制代码到剪贴板
Git 配置
建议忽略 Intlayer 生成的文件。这样可以避免将它们提交到您的 Git 仓库中。
要做到这一点,您可以将以下指令添加到您的 .gitignore 文件中:
复制代码到剪贴板
VS Code 扩展
为了提升您使用 Intlayer 的开发体验,您可以安装官方的 Intlayer VS Code 扩展。
该扩展提供:
- 翻译键的自动补全。
- 缺失翻译的实时错误检测。
- 翻译内容的内联预览。
- 轻松创建和更新翻译的快速操作。
有关如何使用该扩展的更多详细信息,请参阅Intlayer VS Code 扩展文档。
深入探索
要进一步使用,您可以实现可视化编辑器或使用内容管理系统(CMS)将内容外部化。