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