如何用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
相关产品推荐
相关产品推荐

