Intl · 浏览器内置的本地化引擎
把数字、日期、列表、复数、排序「显示给某个地区的人看」,不应自行实现。每个浏览器都内置了一整套 ECMA-402 的本地化数据(基于 Unicode CLDR),入口就是全局对象 Intl。它的子 API 形状高度统一:new Intl.X(locales, options) 造一个可复用的格式化器,再 .format(value)。每页都能改 locale / options、看真实运行结果(底层跑你浏览器的原生 Intl)。除了这些 new 出来的格式化器,Intl 上还挂着两个直接调用的顶层静态方法(getCanonicalLocales / supportedValuesOf)。
NumberFormat;日期时间 → DateTimeFormat;「3 天前 / 下周」→ RelativeTimeFormat;「2 小时 5 分」→ DurationFormat;把数组拼成「甲、乙和丙」→ ListFormat;决定用 1 item 还是 2 items → PluralRules;把文本切成字 / 词 / 句 → Segmenter;按语言习惯排序/查找字符串 → Collator;把语言 / 地区 / 货币 / 书写体代码显示成名字 → DisplayNames。共同形态:new Intl.X(locales, options)
九个格式化类 API 共用一套骨架:locale 加 options 造对象、反复取值。本页讲 BCP-47 串的分段、-u- 扩展、locale 协商与缓存。
Intl.Locale:把 locale 串变成可读可改的对象
Intl.Locale 不格式化任何东西,只把 BCP-47 串解析、规范化成可逐字段读写的对象,并能 maximize 与 minimize。
Intl 顶层静态方法 + localeMatcher
挂在 Intl 上的两个静态方法:getCanonicalLocales 规范化并去重 locale 串,supportedValuesOf 列出运行时支持的标识符。
Intl.DisplayNames:把代码翻成人类可读的名字
把语言、地区、书写体、货币等代码翻成当前 locale 下的名称,并可控制查不到时的回退行为。
Intl.NumberFormat:数字、货币、百分比、单位
数字的本地化写法:分组与小数、货币与单位、紧凑记数、区间,以及 formatToParts 拆出的各段。
Intl.DateTimeFormat:日期与时间
从 dateStyle 预设到逐字段指定,配时区把同一时刻投影到各城市;formatToParts 拆件,formatRange 拼区间。
RelativeTimeFormat + DurationFormat:相对时间 & 时长
RelativeTimeFormat 把相对时间说成「昨天」这类词,DurationFormat 把各单位的时长拼成本地化串。
ListFormat + PluralRules:列表拼接 & 复数
ListFormat 按语言习惯连接列表,PluralRules 把数值映射到复数类别,两者常与 NumberFormat 串用。
Segmenter + Collator:切分文本 & 本地化排序
Segmenter 按字素、词、句三档切分文本;Collator 给出符合语言习惯的排序与等值判定。
Intl 而非自行拼接的原因:本地化数据(分组符、月份名、复数规则、排序权重、紧凑写法…)按地区有成千上万条,而且会随版本更新。Intl 直接复用引擎自带、随版本更新的那份 CLDR 数据,零依赖、零网络开销、性能好(格式化器可缓存复用)。调用方只需说明「给谁看(locale)、想要什么形式(options)」。相关链接
-
ICU · International Components for Unicode
icu.unicode.org
CLDR 数据的参考实现(C/C++/Java 库)。浏览器引擎(V8 / JSC / SpiderMonkey)的
Intl底层大多直接绑定 ICU,本系列看到的分组符、月份名、Collator排序权重、Segmenter分词边界,最终都落到 ICU 的算法与数据上。 -
ECMA-402 · Internationalization API Specification
tc39.es
Intl的规范本体:九个 API 的构造签名、options 取值、locale 协商(lookup/best fit)与resolvedOptions()的语义定义都在这里。 - Unicode CLDR · Common Locale Data Repository cldr.unicode.org 所有本地化数据的来源:各 locale 的分组符 / 货币位置 / 月份名 / 复数类别 / 排序权重,以及它们随版本的更新都在此维护,再经 ICU 进入浏览器。
-
MDN · Intl
developer.mozilla.org
每个子 API 的逐参数文档与可运行示例,以及浏览器兼容性表(
DurationFormat等较新成员尤其需要核对支持度)。 -
Can I use · Internationalization API
caniuse.com
Intl的实时浏览器支持矩阵;子 API(DurationFormat/Segmenter等)在 caniuse 另有独立条目,可按需查对各成员的逐浏览器覆盖。