Chrome浏览器locale存储位置及Number.toLocaleString语言不匹配问题
问题解答
1. JavaScript默认locale的获取来源
ECMAScript国际化API规范明确,当toLocaleString这类方法的locale参数传入undefined时,会直接使用宿主环境的默认区域设置。Chrome中这个默认值对应的是浏览器自身的UI界面语言,和你在语言设置页调整的网页内容语言优先级列表(即navigator.languages返回的内容)不是同一个配置。后者仅用于告知网页你偏好的内容展示语言,不会影响JS国际化API的默认行为。
2. Chrome的locale存储位置
不同操作系统存储路径不同,你使用的Ubuntu系统中,Chrome的默认locale存储在~/.config/google-chrome/Default/Preferences文件里,对应的字段是international.locale。如果通过命令行启动Chrome,系统的LANG环境变量优先级会高于配置文件里的设置。
3. 修改默认生效locale的操作方法
你之前只调整了网页内容的语言优先级,没有修改Chrome的UI界面语言,这就是默认locale不生效的核心原因。按以下步骤操作即可:
- 打开
chrome://settings/languages设置页 - 找到你已经添加的荷兰语选项,点击右侧的三个点按钮
- 选择「以这种语言显示Chrome」选项
- 重启浏览器后配置就会生效,此时再运行
num.toLocaleString(undefined, ...)就会输出荷兰语格式的30.000,65
补充说明:你主动传入navigator.languages时输出符合预期,是因为此时API会直接遍历你传入的语言列表,优先选择列表中支持的最高优先级语言,不会再读取默认的UI界面语言配置。
内容的提问来源于stack exchange,提问作者paul23
相关产品推荐
相关产品推荐

