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

如何用Intl.DisplayNames获取基础语言前置的易排序语言名称?

如何用Intl.DisplayNames获取基础语言前置的易排序语言名称?

默认的Intl.DisplayNames会返回区域前置的格式(如Australian English),无法直接输出你需要的English (Australia)样式。你可以通过以下方式处理:

1. 手动拆分Locale并拼接格式

解析Locale字符串分离语言和区域代码,分别获取对应名称后拼接成目标格式,这是目前最可靠的方案:

const getLanguageMenuName = (locale, displayLocale = 'en') => {
  const langNames = new Intl.DisplayNames(displayLocale, { type: 'language' });
  const regionNames = new Intl.DisplayNames(displayLocale, { type: 'region' });
  
  const [langCode, regionCode] = locale.split('-');
  if (!regionCode) return langNames.of(locale);
  
  const langName = langNames.of(langCode);
  const regionName = regionNames.of(regionCode);
  return `${langName} (${regionName})`;
};

// 测试输出
console.log(getLanguageMenuName('en'));       // English
console.log(getLanguageMenuName('en-AU'));    // English (Australia)
console.log(getLanguageMenuName('fr'));       // French
console.log(getLanguageMenuName('fr-CA'));    // French (Canada)

2. 关于CLDR alt="menu"变体的支持

CLDR 36起部分语言新增了alt="menu"变体(如yue对应Chinese, Cantonese而非默认的Cantonese),但目前JavaScript的Intl.DisplayNames API尚未支持该选项。相关功能在ICU工单「ICU-21549: 修复API以支持语言菜单」中被追踪,暂未纳入ECMAScript标准或主流浏览器/Node.js实现,因此无法直接通过API调用获取这类格式。

内容的提问来源于stack exchange,提问作者Quppa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 09:01:06