使用您最喜欢的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
从 @nuxtjs/i18n 迁移到 Intlayer
为什么从 @nuxtjs/i18n 迁移到 Intlayer?
不再需要将庞大的 JSON 文件加载到页面中,只加载必要的内容。Intlayer 帮助您将 bundle 和页面大小减少高达 50%。
对应用程序的内容进行作用域划分便于大规模应用的维护。您可以复制或删除单个功能文件夹,无需审查整个内容代码库的心理负担。此外,Intlayer 完全类型化,确保内容的准确性。
Intlayer 也是 i18n 生态系统中开发最活跃的解决方案 — 问题修复快速、新框架适配器定期发布,核心 API 根据真实生产反馈不断优化。
将内容并置减少了大语言模型 (LLM) 所需的上下文。Intlayer 还提供了一套工具,如用于测试缺失翻译的 CLI、LSP、MCP 和 agent skills,使 AI agents 的开发体验 (DX) 更加顺畅。
在 CI/CD 管道中使用自动化翻译,使用您选择的 LLM,按 AI 提供商的费用计费。Intlayer 还提供了编译器来自动提取内容,以及 web 平台 来帮助后台翻译。
将庞大的 JSON 文件连接到组件可能会导致性能和响应性问题。Intlayer 在构建时优化您的内容加载。
迁移策略
由于 @nuxtjs/i18n 在底层由 vue-i18n 驱动,迁移到 Intlayer 有两种互补的策略:
兼容适配器(推荐用于现有应用) — 安装
@intlayer/vue-i18n和nuxt-intlayer。这暴露了与vue-i18n完全相同的 API,但在底层将所有翻译工作委托给 Intlayer。您保持现有的$t、useI18n()和 Nuxt 路由不变 — 唯一的变化是初始化。完整迁移 — 逐步用本地 Intlayer hooks(
useIntlayer)替换@nuxtjs/i18nAPI,并在组件旁边的.content.ts文件中共同放置内容。
本指南首先介绍策略 1(即插即用兼容适配器),然后讲解可选的完整迁移。
目录
快速迁移
以下步骤是使现有 Nuxt 应用在 Intlayer 上运行所需的最低要求,组件中无需任何代码更改。
安装依赖
安装 Intlayer 核心包和兼容性适配器:
bash复制代码复制代码到剪贴板
npx intlayer-cli init --interactive--interactive标志是可选的。如果你是 AI 代理,使用intlayer-cli init。此命令将检测你的环境并安装所需的包。例如:
bash复制代码复制代码到剪贴板
npm install intlayer vue-intlayer nuxt-intlayer @intlayer/vue-i18n @intlayer/sync-json-plugin你可以在迁移期间安全地保持
@nuxtjs/i18n已安装状态,尽管稍后你将从 Nuxt 配置中删除它。配置 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({ // 匹配 vue-i18n 占位符语法:{name} format: "icu", source: ({ locale }) => `./locales/${locale}.json`, location: "locales", }), ], }; export default config;source将语言环境映射到其 JSON 文件路径。location告诉 Intlayer 观察器监控哪个文件夹以查找更改。format: 'icu'选项确保占位符被正确解析以供vue-i18n使用。更新 Nuxt 配置
在
nuxt.config.ts中用nuxt-intlayer替换@nuxtjs/i18n模块。Intlayer 插件自动注入模块别名,这意味着你现有的import { useI18n } from 'vue-i18n'调用被透明地重定向到@intlayer/vue-i18n。nuxt.config.ts复制代码复制代码到剪贴板
export default defineNuxtConfig({ // 移除 '@nuxtjs/i18n' modules: ["nuxt-intlayer"], });你不再需要定义 Nuxt i18n 配置对象。 Intlayer 在构建时编译所有字典,无缝处理语言环境检测、路由和字典加载。
快速迁移就这样。你的 Nuxt 应用现在在 Intlayer 上运行,同时保持所有 $t 和 useI18n() 完好无损。
完整迁移
以下步骤是可选的,可以逐步完成。它们可以解锁 Intlayer 的完整功能集:可视编辑器、CMS、类型化内容文件、AI 驱动的翻译等。
显式导入重命名(可选)
可选Intlayer 插件已在 bundler 级别处理别名。如果你更希望在源文件中明确表示依赖关系,可以手动重命名导入:
显示表格的所有内容在弹窗中打开表格以清晰地查看所有数据
之前 之后 import { useI18n } from 'vue-i18n'import { useI18n } from '@intlayer/vue-i18n'这些是即插即用的替代品 — 不需要对调用签名、参数或返回类型进行任何更改。
启用 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: "icu", source: ({ locale }) => `./locales/${locale}.json`, location: "locales", }), ], ai: { apiKey: process.env.OPENAI_API_KEY, // provider: "openai", // 默认值 // model: "gpt-4o-mini", // 默认值 }, }; export default config;查看 Intlayer CLI 文档 了解所有可用选项。
迁移后可以删除的内容
兼容适配器就位后,可以移除以下样板代码:
在弹窗中打开表格以清晰地查看所有数据
| 文件 / 模式 | 为什么不再需要 |
|---|---|
nuxt.config.ts 中的 i18n 配置 | Intlayer 在内部处理路由、字典加载和默认语言环境。 |
package.json 中的 @nuxtjs/i18n | 完全被 nuxt-intlayer 取代。 |
JSON 语言包(locales/*.json) | JSON 包仅在仍使用 syncJSON 插件时才需要。迁移到 .content.ts 文件后,可以删除 JSON 文件夹。 |
当你准备继续深入时,Intlayer 会自动发现代码库中任何位置的所有 .content.ts 和 .content.json 文件(默认情况下,在 ./src 内的任何位置)。你可以将 my-component.content.ts 文件放在你的 MyComponent.vue 旁边,Intlayer 会在构建时自动获取它,无需任何额外配置 — 无需导入、无需注册、无需中央索引文件。这使得将翻译与页面和组件共置变得完全无摩擦。
配置 TypeScript
Intlayer 使用模块增强来为你的翻译键提供完整的 TypeScript 智能感知。确保你的 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
- Intlayer with Nuxt — Nuxt 完整设置指南:intlayerwithnuxt.md
- Intlayer with Vue — Vue 完整设置指南:intlayerwithvite+vue.md