I18n类通过单例封装多语言状态管理:构造设默认语言,load异步加载JS/JSON资源,t方法支持嵌套键、安全插值与fallback,EventTarget派发languageChanged事件,配合data-i18n自动更新DOM。

JavaScript 中用 class 语法实现多语言国际化,关键不是语法本身,而是用 class 封装语言状态管理、资源加载和翻译逻辑,让调用简洁、切换可控、更新可感知。
设计一个单例 I18n 类
避免全局变量污染,用 class 实现带状态的翻译服务:
- 构造时设定默认语言(如
zh-CN),并初始化空资源对象 - 提供
load(locale)异步加载对应 JSON 文件(如./locales/zh-CN.json) - 提供
t(key, params?)方法:查 key → fallback 到 key 本身 → 替换插值(如{{name}}) - 切换后自动设置
document.documentElement.lang,便于 CSS RTL 或字体适配
支持嵌套键与安全插值
语言包常含层级结构(如 {"form": {"submit": "提交"}}),class 应能解析点号路径:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
t('form.submit')能递归查找messages[locale].form?.submit - 插值不依赖
eval或innerHTML,用正则安全替换:text.replace(/{{(\w+)}}/g, (_, k) => params[k] ?? '') - 对 HTML 内容需额外标记(如
t('welcome_html', { name }, { raw: true })),默认只处理纯文本
触发 UI 更新机制
class 本身不操作 DOM,但要提供事件或回调让 UI 响应变化:
立即学习“Java免费学习笔记(深入)”;
- 内部用
EventTarget派发languageChanged事件 - 暴露
on('languageChanged', handler)让外部监听 - 在纯 JS 场景中,配合
data-i18n属性批量刷新:document.querySelectorAll('[data-i18n]').forEach(el => el.textContent = i18n.t(el.dataset.i18n))
配合模块系统按需加载
避免首屏加载全部语言包,利用 ES 动态 import 提升性能:
-
load(locale)内部使用import(`./locales/${locale}.js`)(导出 default 对象) - 若用 JSON,注意同源限制;可转为
.js模块绕过 CORS(export default { ... }) - 加载失败时降级到 fallback 语言(如
en-US),并记录 warn

















