You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 01:48:23