javascript bom 不直接实现多语言切换,但通过读取 url 参数、浏览器语言偏好(navigator.language)、持久化选择(localstorage/cookie)及控制跳转/刷新等,支撑 dom 翻译逻辑落地。

JavaScript BOM 操作本身不直接实现多语言切换,但它为多语言功能提供了关键支撑——比如读取 URL 参数、访问浏览器语言偏好、控制页面刷新或跳转、持久化用户选择等。真正的翻译逻辑靠 DOM 操作 + 语言包管理,而 BOM 是让这个流程“感知用户意图”和“保持状态”的桥梁。
用 BOM 获取用户首选语言
浏览器语言是默认 fallback,BOM 提供了标准接口:
-
navigator.language 或 navigator.languages[0] 可获取系统/浏览器设置的语言(如
"zh-CN"、"en-US") - 结合 URL 参数(如
?lang=ja)优先级更高,可用new URLSearchParams(window.location.search)解析 - 若已存 cookie 或 localStorage,BOM 中的
document.cookie或localStorage.getItem('lang')可读取历史选择
用 BOM 控制语言切换后的响应行为
用户点选语言后,BOM 帮你完成“落地动作”:
- 更新 URL:用
history.replaceState()替换当前地址中的 lang 参数,避免重复刷新;也可用location.href = '?lang=fr'强制跳转 - 持久化选择:调用
localStorage.setItem('lang', 'fr')或设置带路径的 cookie,确保下次打开仍生效 - 触发重载(可选):调用
location.reload()可强制重新执行初始化逻辑,适合简单场景;更推荐无刷新切换(纯 DOM 替换)
用 BOM 辅助动态加载语言包
语言包常按需加载,BOM 中的 window 和网络能力配合使用:
- 用
fetch(`./locales/${lang}.json`)加载对应 JSON 文件,失败时可 fallback 到navigator.language对应包 - 加载成功后,把数据存入内存对象(如
window.i18nData = {...}),供后续 DOM 翻译函数调用 - 利用
addEventListener('languagechange', ...)(需手动 dispatch)或监听storage事件,实现跨 tab 同步语言变更
注意兼容性与实际边界
BOM 的部分能力在不同环境受限:
-
navigator.language在某些隐私模式或 iOS Safari 中可能返回"en"或空值,需设安全 fallback(如默认 en) - cookie 操作受第三方 Cookie 政策影响,现代方案更倾向用
localStorage或 URL 参数 -
window.open()、window.close()等窗口控制方法在非用户主动触发场景下基本被浏览器拦截,多语言切换中无需使用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











