JavaScript国际化核心是抽离语言内容并动态加载:用JSON管理多语言资源,fetch加载对应语言包,t()函数实现翻译、参数替换与复数处理,所有文本须经t()输出以避免中英混杂。

JavaScript 实现国际化(i18n)核心是把语言内容从代码中抽离,按用户语言环境动态加载对应文本。不依赖框架的话,用轻量方案就能搞定,关键是结构清晰、切换顺畅、扩展方便。
用 JSON 文件管理多语言资源
把每种语言的文本单独存为 JSON 文件,比如:
locales/zh.json:{"welcome": "欢迎使用", "save": "保存"}
locales/en.json:{"welcome": "Welcome", "save": "Save"}
这样维护直观,前端可按需加载,也方便后端或翻译平台对接。
运行时动态加载并切换语言
用 fetch 加载对应语言包,配合一个简单 i18n 对象管理当前语言和翻译函数:
- 初始化时检测
navigator.language或读取用户偏好 - 调用
loadLocale('en')获取并缓存 en.json 内容 - 提供
t('welcome')方法,查表返回对应文案;缺失时可回退到英文或显示 key - 语言切换后,触发事件通知组件更新(如结合 Vue 的 $forceUpdate 或 React 的 useState)
支持带参数的翻译和复数形式
纯字符串替换不够用,得处理变量和语法规则。例如:
- 用模板字符串或正则替换:
t('hello_name', { name: 'Alice' }) → 'Hello, Alice!' - 中文无复数,但英语需区分:
t('item_count', { count: 1 }) → '1 item',{ count: 3 } → '3 items' - JSON 中可定义对象字段,如
"search_result": {"one": "找到 1 个结果", "other": "找到 {{count}} 个结果"},再根据count选合适字段
避免硬编码,统一走 t() 函数
所有界面文本——按钮、提示、表单占位符、错误信息——都必须通过翻译函数输出。哪怕只有一处漏掉,上线后就会出现中英混杂。开发时可加一层 lint 规则或单元测试,检查 JSX/HTML 中是否出现未包裹的字符串字面量。
立即学习“Java免费学习笔记(深入)”;
基本上就这些。不复杂但容易忽略细节,比如没设默认语言、没处理加载失败、没考虑 RTL 布局适配。从小项目开始实践,后续集成 i18next 或 FormatJS 也会更顺手。











