BOM本身不实现多语言切换,而是通过navigator.language获取用户语言偏好、localStorage持久化用户选择、location解析URL参数来支撑切换流程,最终由DOM操作完成实际翻译。

JavaScript 中 BOM 本身不直接“实现”多语言切换,而是提供关键能力(如 localStorage、navigator.language、location)支撑整个切换流程。真正执行翻译的是 DOM 操作,BOM 负责语言偏好获取、存储与上下文管理。
用 BOM 获取用户初始语言
浏览器提供了标准化接口来读取用户系统或浏览器设置的语言,这是最合理的默认依据:
-
navigator.language返回主语言标签(如"zh-CN"或"en-US") -
navigator.languages是数组,包含所有首选语言(按优先级排序),更全面 - 注意:需做兼容处理,比如截取主语言码
"zh"或"en",避免区域后缀导致匹配失败
用 BOM 的 localStorage 持久化选择
用户手动切换语言后,应保存其偏好,下次访问自动生效:
- 使用
localStorage.setItem('lang', 'zh')写入选择 - 读取时用
localStorage.getItem('lang'),若为空则 fallback 到navigator.language - 不建议用 cookie —— BOM 提供的
localStorage更简洁、容量更大、无需服务端参与
用 BOM 的 location 控制 URL 语言上下文
URL 参数(如 ?lang=ja)是显式、可分享、易调试的语言标识方式:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
- 解析参数:
new URLSearchParams(window.location.search).get('lang') - 优先级建议:URL 参数 > localStorage > navigator.language
- 切换时可同步更新 URL(用
history.replaceState),避免整页刷新
结合 DOM 完成实际翻译
BOM 不负责渲染,但为 DOM 翻译提供数据和时机:
- 语言确定后,加载对应 JSON 语言包(可用
fetch或预置对象) - 遍历带
data-translate属性的元素,用textContent或innerHTML替换文本 - 切换时触发一次完整翻译,并再次写入
localStorage
不复杂但容易忽略

















