应用国际化(i18n)后期改造的挑战

4 阅读2分钟

国际化最核心的问题在于它往往被视为“事后才考虑”的工作。

通常,我们先开发应用、验证产品与市场的匹配度(PMF),几个月甚至几年后才决定:“是时候走向全球了。”

然而,i18n 方案是架构级的,对团队开发流程影响极大。从第一天起就将其纳入技术规范方案,效果要好上无数倍。

那么,该如何处理?难道要冻结一周的开发进度,重构每一个组件吗?

最近,我看到了一些基于**编译器驱动(compiler-driven)**的解决方案。其承诺很诱人:只需添加几行代码,应用便能瞬间支持多语言。

但这类方案存在明显的弊端:

  • 显著降低开发效率:编译器增加了额外的处理步骤,在开发模式(热重载)下影响尤为明显。
  • 无法 100% 覆盖场景:虽然 i18n 在 98% 的情况下运行良好,但剩下的 2% 才是真正的头痛点。如何翻译组件外部的 getDescription 函数?如何处理复数形式、字符串变量注入、日期格式等?
  • 包体积(Bundle Size) :内容加载策略往往被忽视。结果可能导致用户为了查看单个页面,被迫加载了所有页面及所有语言的内容。
  • 供应商锁定(Vendor Locking) :某些方案具有排他性,导致你最终为翻译生成支付高昂费用。
  • Next.js 服务端组件(RSC) :如何实现服务端渲染内容的国际化?

Intlayer 的解决方案

通过 Intlayer,我们尝试通过混合方案来解决这些问题。

Intlayer 提供了一个编译器来处理你的组件。正如 React Compiler 自动为组件包裹 useMemo / useCallback 一样,Intlayer 会提取组件内容并自动注入 getIntlayer / useIntlayer 函数,从而实现内容的多语言化。

无需 <T> 标签或 t 函数——Intlayer 会直接转换你现有的组件。

此外,Intlayer 本质上是一个声明式国际化方案。这意味着你可以将其用于页面元数据(Metadata),或将手动管理的内容与编译器自动处理的内容相结合。

核心优势:

  • 100% 免费:不按翻译条目(Key)计费;翻译成本仅取决于你选择的 AI 服务商。
  • 广泛兼容:支持 Vite / Next.js (Webpack / Turbopack) / React / Svelte / Vue,兼容客户端和服务端。
  • 高度灵活:可有选择性地在开发或生产构建中启用。
  • 极致优化:专为优化包体积而设计。

相关文档:

我很想听听大家的反馈。你们在使用 i18n 编译器时的体验如何?