JS中如何通过代码获取地区及大洲名称?Intl.DisplayNames使用疑问
解决Intl.DisplayNames处理UN M49地区代码的问题
问题原因
Intl.DisplayNames对UN M49地区代码的支持依赖于JS引擎(如Chrome的V8、Firefox的SpiderMonkey)的具体实现,不同环境支持的代码范围不一致——部分代码(如419)被广泛支持,而像150这类代码可能未被当前环境纳入支持列表,因此调用of()会直接返回原代码而非预期的本地化名称。
查看当前环境支持的所有地区代码
可以使用ES2022新增的Intl.DisplayNames.supportedValuesOf('region')方法,获取当前环境支持的所有地区代码,再遍历获取对应的本地化名称:
// 获取所有支持的地区代码 const supportedRegions = Intl.DisplayNames.supportedValuesOf('region'); const regions = new Intl.DisplayNames(['en'], { type: 'region' }); // 输出所有支持的代码及对应名称 supportedRegions.forEach(code => { console.log(`${code}: ${regions.of(code)}`); });
注意:该方法存在兼容性限制,旧版浏览器或Node.js版本可能不支持,此时可以通过手动枚举常用代码测试,或使用替代方案。
替代方案:手动维护地区名称映射表
由于Intl的支持不稳定,最可靠的方式是自行维护UN M49代码与本地化名称的映射表,完全控制支持范围和多语言适配:
单语言映射示例
// UN M49代码与英文名称的映射表 const unM49EnNames = { '150': 'Europe', '419': 'Latin America and the Caribbean', '030': 'Eastern Asia', '034': 'Southern Asia', '015': 'Northern Africa', // 可根据需求扩展更多代码 }; // 获取本地化名称的函数 function getRegionName(code, lang = 'en') { // 如需多语言,可扩展为按语言加载不同映射表 return unM49EnNames[code] || code; } // 测试 console.log(getRegionName('150')); // 输出 Europe console.log(getRegionName('419')); // 输出 Latin America and the Caribbean
多语言适配扩展
可以按语言拆分映射文件(如en.json、zh-CN.json),根据当前用户语言动态加载对应的映射表,确保不同语言环境下都能返回正确的本地化名称。
内容的提问来源于stack exchange,提问作者tasha_x
相关产品推荐
相关产品推荐

