mcpField
I
i18next-localization

i18next-localization

github.com/i18next开发24789 次安装1 天前更新
代码仓库

关于 i18next-localization

i18next-localization 是使用 i18next-cli 为应用配置本地化的技能,面向开发者。它指导检测技术栈、改造源代码字符串并提取语言文件,也可选择用 Locize 管理翻译。

主要功能

  1. 01匹配当前版本的 CLI 指引
  2. 02基于 AST 改造源代码
  3. 03提取语言文件
  4. 04可选的 Locize 翻译流程
  5. 05翻译 lint 与状态检查

适用场景

  1. 01为应用添加 i18next 本地化
  2. 02将硬编码字符串提取到语言文件
  3. 03通过 Locize 同步翻译
  4. 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;之后写入翻译的内容则由这些规则约束。

评论

支持 Markdown