在JavaScript中如何反向获取ES6 API Intl.DisplayNames()的地区编码
Intl.DisplayNames 本身没有提供内置的反向查询接口,你可以通过构建本地化地区名到编码的映射表来实现需求,方案如下:
实现思路
遍历所有符合ISO 3166-1标准的两位地区编码,通过Intl.DisplayNames正向生成本地化地区名称,将名称和编码的对应关系存入映射表,后续就可以直接通过地区名称查询对应编码。
代码示例
// 生成指定语言下地区名到编码的反向映射表 const createRegionReverseMap = (locale = 'en') => { const regionNames = new Intl.DisplayNames([locale], { type: 'region' }); const reverseMap = new Map(); // 遍历所有环境支持的地区编码 for (const regionCode of Intl.supportedValuesOf('region')) { const regionName = regionNames.of(regionCode); if (regionName) { // 统一转小写避免大小写匹配问题 reverseMap.set(regionName.toLowerCase(), regionCode); } } return reverseMap; } // 用法示例 const enRegionMap = createRegionReverseMap('en'); console.log(enRegionMap.get('united states'.toLowerCase())); // 输出 US console.log(enRegionMap.get('japan'.toLowerCase())); // 输出 JP
注意事项
- 映射表和指定语言强绑定,不同语言的地区名称需要单独构建对应映射表
- 该方案默认仅匹配
Intl.DisplayNames返回的官方标准名称,如需支持别名可以自行在映射表中补充规则 - 若运行环境不支持
Intl.supportedValuesOf,可以自行引入ISO 3166-1 alpha-2的两位编码全量列表替换遍历逻辑 - 极少场景下可能存在不同地区对应同一个本地化名称的情况,可以根据业务需要调整冲突处理逻辑
内容的提问来源于stack exchange,提问作者mrhrifat
相关产品推荐
相关产品推荐

