Intl 顶层静态方法 + localeMatcher
除了 new Intl.X(locales, options) 那一批格式化器,Intl 命名空间上还直接挂着两个静态函数——不 new、不格式化任何值,只做两件元信息层面的事:getCanonicalLocales() 把 locale 串规范化,supportedValuesOf()
告诉你当前运行时支持哪些时区 / 货币 / 历法等标识。它们常用于在调用真正的格式化器之前清洗输入、构建可选项列表。
1 · Intl.getCanonicalLocales:规范化 locale 串
接收一个字符串或数组,返回规范化、去重后的 BCP-47 标签数组:大小写按约定归位(language 小写、script 首字母大写、region 全大写)、-u- 扩展内部排序、过时/祖父级标签替换 (i-klingon → tlh)。结构非法的串(如用下划线的 en_US)直接抛
RangeError。
它和 Intl.Locale 都做规范化,但定位不同:getCanonicalLocales 吃一串、返回规范化字符串数组(还去重),适合清洗一组待协商的 locale;new Intl.Locale(tag)
吃单个、返回可逐字段读写的对象。要把语言偏好列表整理干净再交给格式化器,用前者。
2 · Intl.supportedValuesOf:运行时支持哪些标识
传入一个 key,返回该运行时支持的标识符有序数组。可选 key 共六个:calendar / collation / currency / numberingSystem / timeZone / unit;传别的会抛 RangeError。典型用途:动态生成「选时区 /
选货币」下拉框,或在用某标识前先确认它被支持。
返回的标识可直接喂回对应的格式化器:supportedValuesOf('timeZone') 的值用于 DateTimeFormat 的 timeZone、supportedValuesOf('currency') 用于 NumberFormat 的 currency。再配
DisplayNames 把这些代码翻成名字,就能拼出一个完全本地化的选择器。