JavaScript 无法修改操作系统语言偏好,只能读取只读的浏览器语言设置:navigator.language 获取主语言(如"zh-CN"),navigator.languages?.[0] || navigator.language 获取首选语言,Intl.DateTimeFormat().resolvedOptions().locale 辅助验证,最终应以服务端 Accept-Language 头为准。

JavaScript 中无法“操作”操作系统的语言偏好,只能读取浏览器提供的语言设置信息。这些信息来自用户在操作系统或浏览器中配置的语言列表,属于只读属性,JS 不能修改它。
用 navigator.language 获取主语言
这是最常用、兼容性最好的方式,返回浏览器 UI 的首选语言(如 "zh-CN" 或 "en-US"),格式符合 IETF BCP 47 标准:
- 直接访问:
navigator.language(现代浏览器支持) - 兼容旧版 IE 可加回退:
navigator.language || navigator.userLanguage - 注意:该值由系统/浏览器设置决定,与网页当前语言无关
用 navigator.languages 获取完整偏好列表
navigator.languages 返回一个字符串数组,按用户设置的优先级排序(如 ["zh-CN", "zh", "en-US", "en"]),比 language 更全面:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 推荐写法:
navigator.languages?.[0] || navigator.language - IE 不支持该属性,需做存在性判断
- 可用于精细化国际化匹配,比如优先加载
zh-CN, fallback 到zh
用 Intl API 辅助验证
借助 Intl.DateTimeFormat().resolvedOptions().locale 可获得运行时实际生效的本地化语言,受操作系统区域设置影响更大:
立即学习“Java免费学习笔记(深入)”;
- 执行:
Intl.DateTimeFormat().resolvedOptions().locale - 结果更贴近系统级语言环境,但依赖 JS 国际化支持
- 可作为
navigator属性的补充参考,不建议单独依赖
服务端配合 Accept-Language 头
前端语言检测有局限,真正可靠的判断需结合 HTTP 请求头 Accept-Language:
- 该字段由浏览器自动发送,顺序反映用户真实偏好
- 服务端解析后可动态返回对应语言版本页面或资源
- 当 JS 被禁用、或用户手动切换语言时,这是兜底方案

















