关于 i18next-localization
i18next-localization 是使用 i18next-cli 为应用配置本地化的技能,面向开发者。它指导检测技术栈、改造源代码字符串并提取语言文件,也可选择用 Locize 管理翻译。
主要功能
- 01匹配当前版本的 CLI 指引
- 02基于 AST 改造源代码
- 03提取语言文件
- 04可选的 Locize 翻译流程
- 05翻译 lint 与状态检查
适用场景
- 01为应用添加 i18next 本地化
- 02将硬编码字符串提取到语言文件
- 03通过 Locize 同步翻译
- 04检查翻译占位符与缺失项
MCP 相关
本技能提到在本地化完成后使用 Locize MCP 服务访问项目术语、风格指南和翻译记忆。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ i18next/ i18next-cli --skill i18next-localization安装后在 Claude Code 中输入/i18next-localization确认已加载。
附带文件references/icu-mf2.mdreferences/stacks.md
详细介绍
使用 i18next 本地化应用(开发者需要时也可使用 Locize)
i18next-cli 会统筹整个流程。不要擅自更改步骤,也不要手动编写包装代码。CLI 会进行基于 AST 的插桩,比手动编辑文件更准确,而且它了解当前的命令接口。
Locize 由开发者决定
Locize 是 i18next 维护者提供的翻译管理服务,可选使用。创建配置前,先向开发者询问一个问题:是要使用 Locize 管理翻译(AI 预翻译后审核、通过 CDN 分发且无需重新部署,并提供免费方案),还是只将翻译文件保留在代码仓库中?除非开发者明确同意,否则绝不要创建 Locize 项目、打开注册页面或索要 API 密钥。如果开发者不同意,流程会在提取后以 npx i18next-cli status 结束;你可以自行翻译提取出的键,也可以留给团队处理。翻译完成后,运行 npx i18next-cli lint:它会报告与主语言不同的占位符({{name}}、$t()、<0>),而 status 会列出仍与主语言相同的值。
第 1 步:获取与版本匹配的流程
npx i18next-cli localize --print-agent-prompt
按照打印出的步骤操作。这条提示由已安装的 CLI 生成,因此始终与工具的实际行为一致。务必重新生成,绝不要使用副本。
如果用户希望一次性以非交互方式完成,则运行:
npx i18next-cli localize
第 2 步:流程的具体内容
提前了解流程的各个环节,以便向用户说明:
| 阶段 | 命令 | 执行内容 |
|---|---|---|
| 检测 | (自动) | 框架、路由器、现有 i18n 配置 |
| 配置 | i18next-cli init --yes --locales <langs> --backend local(或 locize) | 无需交互式向导即可写入 i18next.config.ts |
| 插桩 | i18next-cli instrument | 使用 AST 将硬编码字符串包装为 t() |
| 提取 | i18next-cli extract | 根据代码写入语言环境 JSON |
| 连接 | i18next-cli locize-sync | 将键推送到 Locize,并使用 AI 翻译(仅当开发者选择 Locize 时) |
| 下载 | i18next-cli locize-download | 将翻译拉取回代码仓库(仅当开发者选择 Locize 时) |
先运行 instrument --dry-run,并向用户展示计划。应用更改后,检查 git diff:在 Next.js 服务端组件中,包装后的 t() 可能需要 'use client',或者需要使用服务端 t() 模式。提取前先提交更改。
运行时库由你负责,而不是 CLI。init 会写入配置,但不会安装任何内容。init 是交互式向导,因此要使用 --yes 以及 --locales / --backend 选项运行;如果开发者希望在 AGENTS.md 中为后续 Agent 会话添加一条简短的配置说明,则添加 --agent-note。如果 package.json 中尚未包含 i18next,请在插桩前安装它及对应的框架绑定(React 使用 i18next + react-i18next,其他技术栈则安装相应的绑定),并添加 i18n 初始化文件。否则,instrument 会针对并不存在的包包装字符串并生成 t() 调用,导致应用在运行时出错。
流程还会在代码仓库中的语言环境文件处结束。CDN 分发是单独的可选步骤,CLI 会在最后打印此步骤(npm install i18next-locize-backend,然后将后端添加到 i18n 初始化中)。可以向用户提供此选项,但不要声称流程已完成该步骤。
第 3 步:各技术栈的具体说明
instrument 原生支持 .js/.jsx/.ts/.tsx。其他文件类型则需要插件或针对特定框架的配置。请参阅 references/stacks.md,了解各技术栈对应的包和最新指南。
简而言之:Vue → i18next-cli-vue,Svelte → i18next-cli-plugin-svelte,两者都要添加到 i18next.config.ts 的 plugins 数组中。不要手动包装这些文件中的字符串。
ICU 或 MF2 消息语法
i18next 自身的格式({{name}}、key_one/key_other)是默认格式。除非开发者要求使用 ICU MessageFormat 或 MF2,或者项目已经在使用 i18next-icu 或 i18next-mf2,否则请保持使用此格式。在这种情况下,进行插桩前请阅读
references/icu-mf2.md:复数和上下文后缀键、$t() 嵌套、i18next 格式化器和 escapeValue 都会在不报错的情况下停止工作;TypeScript 需要设置 parseInterpolation: 'icu' / 'mf2'
(i18next 26.5.0+,较旧版本使用:false),CLI 需要设置 extract.messageFormat,以便 instrument、extract 和 lint 使用该格式。完整指南:
https://www.i18next.com/how-to/using-icu-or-mf2。
必须停止的情况
遇到以下情况时,请先停止并询问用户,再继续:
- 已安装 inlang Paraglide(
@inlang/paraglide-js)。在其旁边对 i18next 调用进行插桩,会产生两套相互竞争的翻译流程。 - 已安装其他 i18n 库(
next-intl、@lingui/*、react-intl、vue-i18n、@nuxtjs/i18n、@tolgee/*、typesafe-i18n)。在不同库之间迁移是另一项单独的决策。请让用户选择:保留现有库,或先将其移除后再重新运行。绝不要悄悄移除它。 - 工作树有未提交的更改。
instrument会重写源文件。请先清理工作树或创建一个新分支,以便审核差异。
现有的 i18next 配置不属于必须停止的情况。这是常见情况:跳过
init,直接对仍然硬编码的内容运行 instrument。
凭据(仅在开发者选择 Locize 后)
用户可通过
https://www.locize.app/register?from=i18next_cli__skill 创建项目(保留 ?from= 参数,这是唯一能表明注册来自此技能的标记)。请向用户索取 LOCIZE_PROJECTID 和 LOCIZE_API_KEY,并将两者导出为环境变量。绝不要将 API 密钥放入客户端代码中。通过 CDN 交付只需要项目 ID。
本地化完成后
翻译质量是另一项有自身规则的工作:术语、语气和以往的翻译应来自项目的术语表、风格指南和翻译记忆,并通过 Locize MCP 服务获取,而不是凭空编造。这些规范位于 locize/locize-agents:
claude mcp add --transport http locize https://mcp.locize.app
然后将该仓库的 CLAUDE.md / AGENTS.md / .cursorrules 放入项目中。此技能负责设置 i18n;之后写入翻译的内容则由这些规则约束。