--- createdAt: 2026-09-09 updatedAt: 2026-09-10 title: "JavaScript 国际化 (i18n) 发展史:从 2011 到 2026 年" description: "深入了解 2011 至 2026 年前端国际化的演进历程。探究 React、Vue、Next.js、Angular、Svelte 与 Solid 生态中的发布节点、架构痛点及关键创新。" keywords: - i18n 发展史 - JavaScript 国际化 - React i18n - Next.js i18n - Vue i18n - Angular i18n - Svelte i18n - Solid i18n - i18next - intlayer slugs: - blog - history-of-js-internationalization author: aymericzip --- # JavaScript 国际化 (i18n) 的演进历史 国际化并不是新鲜概念。早在 JavaScript 和现代 Web 兴起之前,软件系统就必须处理多种语言、货币、日期格式以及区域规范。早在 1980 年代,GEM 和 Mac OS 等早期图形化操作系统就已在着手解决此类问题。 这些设计思路后来被后端框架广泛采纳。Ruby on Rails、Django、Java 企业级框架以及 PHP 应用均建立了自己的国际化机制。当时的核心问题界定得非常清晰: - 翻译文件应该存放在哪里? - 如何格式化日期、数字和货币? - 如何处理复数与语法结构差异? - 如何为不同用户匹配合适的语言? 当整个页面都由服务端渲染时,流程相对直接。应用只需读取对应的翻译文件,生成 HTML,并将结果输出给浏览器。 > PHP 和 GNU gettext 是后来在 JavaScript 与 JSX 中广泛普及的 `t()` 辅助函数的早期雏形。 随后,JavaScript 开始接管浏览器端的大量交互。 随着 Web 应用从服务端模板渲染演进为复杂的单页应用 (SPA),国际化逐渐转变为前端的核心职责。浏览器需要负责加载语言包、动态切换语言、格式化数据、计算复数规则并更新界面,且不能刷新页面。 这一转变引出了一个根本性的难题: **如何在不向每位终端用户分发海量翻译数据和庞大运行时代码的前提下,构建一个高效的多语言应用?** 过去十多年间,这个问题深刻塑造了 JavaScript i18n 方案的演变方向。 解决思路经历了多次跨越:从全局变量与 `t('key')` 查表,到面向特定框架的生态库、编译期文本提取、基于 TypeScript 的强类型推导、Server Components 服务端渲染、Tree-shaking 剪枝,再到如今在构建阶段直接将内容转换为优化代码的编译型方案。 本文梳理了 2011 至 2026 年间的技术变迁:剖析每一代工具所试图攻克的问题、各自的得失,以及前端整体架构演进对当今国际化实现的深远影响。 ![JavaScript 国际化库生态演进](https://github.com/aymericzip/intlayer/blob/main/docs/assets/cloud_i18n_logo.webp?raw=true) ## 目录 ## 早期 Web:2016 年之前的 JavaScript 国际化 为了理解当下的现代工具,我们需要回顾 2011 至 2015 年间的前端工程背景。 ### 业务逻辑向客户端的转移 在 2010 年代初,国际化依然主要由服务端承担。JavaScript 大多仅作为 jQuery 动画、表单验证或小型 DOM 插件的辅助增强手段。 随着 Backbone.js、Knockout.js 以及早期 AngularJS 带动 SPA 的流行,界面渲染逻辑整体迁移至浏览器。客户端代码不仅需要实时输出本地化日期、处理货币转换,还要在不刷新页面的情况下无缝替换文本。 然而,2011 年前后的浏览器运行时缺乏原生支持: ECMAScript 国际化 API 规范 (ECMA-402) 直至 2012 年 12 月才正式确立并引入全局 `Intl` 对象。在各大浏览器广泛支持之前,哪怕是常规的日期与数字格式化,也必须依赖自定义逻辑或体积庞大的 Polyfill。 Webpack 尚处早期,浏览器端原生 ES 模块更是无从谈起。开发者通常通过 `