一段时间以来,我一直在使用类似的方法来获取用户所在的国家/地区(ISO-3166):
const region = navigator.language.split('-')[1]; // 'US'
我一直认为该字符串类似于en-US
-- 国家将在数组的第二个位置。
我认为这个假设是不正确的。根据 MDN 文档,navigator.language
返回:“表示 BCP 47 中定义的语言版本的字符串。” 阅读 BCP 47,保证主要语言子标签是第一个(例如,'en'),但不保证区域代码是第二个子标签。在区域子标签之前和之后可以有子标签。
例如"sr-Latn-RS"
是一个有效的 BCP 47 语言标签:
sr | Latn | RS
primary language | script subtag | region subtag
navigator.language
从BCP 47 的子集返回的值是否仅包含语言和区域?或者是否有一个库或正则表达式通常用于从语言标签中提取区域子标签?