← Intl · 浏览器内置的本地化引擎 / Intl.DisplayNames:把代码翻成人类可读的名字 待审核 4 / 9
DisplayNames · 代码→名称

Intl.DisplayNames:把代码翻成人类可读的名字

程序里到处是机器代码:locale 串 en-US、地区 HK、货币 JPY、书写体 Hant。要把它们显示成某个 locale 下的人类可读名称(「美式英语」「香港」「日元」),既不该自建翻译表,也不该硬编码。Intl.DisplayNames 就是这张「代码 → 名称」的本地化字典:new Intl.DisplayNames(locale, { type }) 造一个查询器,再 .of(code) 查名字。

它和 Intl.Locale 互补:Localeen-US 拆成字段(language='en'region='US'),DisplayNames 把这些代码翻成名字(language →「英语」、region →「美国」)。前者解析结构,后者负责展示。两者常配合:先 Locale 拆段,再对每段用 DisplayNames 取名。

1 · 主面板:of(code) 按 type 查名字

构造时必须指定 type——它决定 .of() 接收哪种代码。选 type、选 locale、点代码示例(或自己输),看查出来的名字。注意:of() 接收的是代码,不是名字,它只做单向的「代码 → 当前 locale 名称」。

六种 type,各收一类代码: language 收 BCP-47 语言串(en-US → 美式英语)、region 收 ISO 3166 地区码(HK → 中国香港特别行政区)、script 收 ISO 15924 书写体(Hant → 繁体)、currency 收 ISO 4217 货币码(JPY → 日元)、calendar 收历法标识(chinese → 农历)、dateTimeField 收日期字段名(month → 月)。style 给货币、语言等提供 long / short / narrow 几档长度,具体差异随 type 和 locale 而定。

2 · languageDisplay:「美式英语」还是「英语(美国)」

type:'language' 适用。dialect(默认)把带地区的语言串当成一个方言整体命名(en-US →「美式英语」);standard 则按语言 + 括注地区的形式拼(en-US →「英语(美国)」)。同一批代码,两种取值的对照:

3 · fallback:查不到时给代码还是给 undefined

代码格式合法但当前 locale 没有对应名称时,行为由 fallback 决定:code(默认)原样回传你传入的代码,noneundefined。渲染 UI 时若希望「查不到就别显示」,用 none 自行处理默认/回退,而不是把代码当名字显示出去。

fallback 只兜「合法但未知」的代码。 若代码连结构都不合法(地区给单个字母、货币给两位),of() 直接抛 RangeError,与 fallback 无关——上面输入框输个 region: Q 就能看到。所以传给 of() 的代码应先确保格式正确(必要时配合 Intl.Locale 规范化)。