6月1日 02:21

i18next 翻译资源怎么管理?自动化工作流搭建指南

i18next 翻译资源管理的核心是「提取 → 翻译 → 校验 → 部署」的自动化流水线。提取阶段,用 i18next-scanner 扫描代码中的 t() 调用自动提取键名,或通过 Babel 插件 i18next-extract 在编译时完成,避免手动维护键的遗漏。翻译阶段对接管理平台:i18next-locize-backend 可直接从 locize 云端拉取翻译,实现运行时按需加载;Crowdin 则提供翻译记忆和术语库,适合大规模多语言团队。校验阶段写验证函数检查占位符一致性(如 {{name}} 在各语言是否齐全)、HTML 标签闭合、译文长度溢出,配合 i18next 的 missingKeyHandler 捕获缺失键。部署阶段将翻译文件纳入 Git 版本控制,CI 中执行键提取和覆盖率检查,增量更新只同步变更的键。整个流程串起来:开发者提交含新键的代码 → CI 提取键并推送至翻译平台 → 译者完成翻译 → CI 拉取翻译合并到仓库 → 自动发布。

追问

i18next-scanner 和 Babel 插件怎么选?

i18next-scanner 基于 AST 解析,支持 JSX/TSX/Vue,配置灵活可过滤特定目录,适合已有构建流的项目。Babel 插件在编译时提取,零额外构建步骤,但只处理 Babel 管辖的文件。项目若已用 Babel,插件更省事;需要扫描非 JS 文件或精细控制时选 scanner。

翻译缺失键如何在线上兜底?

注册 missingKeyHandler,线上遇到缺失键时上报到日志或翻译平台,同时用 fallback 语言返回兜底译文:

js
i18next.init({ saveMissing: true, missingKeyHandler: (lngs, ns, key) => { reportMissingKey({ lngs, ns, key }); }, fallbackLng: 'en', });

如何保证占位符和 HTML 标签在各语言间一致?

写校验函数在 CI 中运行,提取每种语言的占位符和标签集合做差集比对:

js
function validatePlaceholders(base, translations) { const baseVars = (base.match(/\{\{.*?\}\}/g) || []).sort(); for (const [lang, text] of Object.entries(translations)) { const vars = (text.match(/\{\{.*?\}\}/g) || []).sort(); if (JSON.stringify(vars) !== JSON.stringify(baseVars)) { throw new Error(`${lang} 占位符不匹配: ${vars} vs ${baseVars}`); } } }

增量更新和全量更新怎么取舍?

翻译文件小时全量更新简单可靠。文件超过 50 个语言或单文件上千条时,增量更新只同步变更键,减少冲突和传输量。实现上用 Git diff 检出本次变更的键名,只推送对应条目到翻译平台,拉取时也只覆盖变更部分。

locize 和 Crowdin 何时分别使用?

locize 与 i18next 深度集成,支持运行时按需加载语言包,适合中小项目快速接入。Crowdin 提供翻译记忆、术语表、审核流程和供应商管理,适合专业翻译团队协作的大规模项目。团队无专职译者选 locize,有专业本地化流程选 Crowdin。

标签:i18next