Web 平台 API / Intl · 浏览器内置的本地化引擎 待审核 9 页

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 itemsPluralRules;把文本切成字 / 词 / 句 → Segmenter;按语言习惯排序/查找字符串 → Collator;把语言 / 地区 / 货币 / 书写体代码显示成名字DisplayNames shape · 共同形态

共同形态:new Intl.X(locales, options)

九个格式化类 API 共用一套骨架:locale 加 options 造对象、反复取值。本页讲 BCP-47 串的分段、-u- 扩展、locale 协商与缓存。

Locale · locale 对象本身

Intl.Locale:把 locale 串变成可读可改的对象

Intl.Locale 不格式化任何东西,只把 BCP-47 串解析、规范化成可逐字段读写的对象,并能 maximize 与 minimize。

statics · 顶层静态方法

Intl 顶层静态方法 + localeMatcher

挂在 Intl 上的两个静态方法:getCanonicalLocales 规范化并去重 locale 串,supportedValuesOf 列出运行时支持的标识符。

DisplayNames · 代码→名称

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

把语言、地区、书写体、货币等代码翻成当前 locale 下的名称,并可控制查不到时的回退行为。

NumberFormat · 数字/货币/单位

Intl.NumberFormat:数字、货币、百分比、单位

数字的本地化写法:分组与小数、货币与单位、紧凑记数、区间,以及 formatToParts 拆出的各段。

DateTimeFormat · 日期时间

Intl.DateTimeFormat:日期与时间

从 dateStyle 预设到逐字段指定,配时区把同一时刻投影到各城市;formatToParts 拆件,formatRange 拼区间。

RelativeTime + Duration · 时间跨度

RelativeTimeFormat + DurationFormat:相对时间 & 时长

RelativeTimeFormat 把相对时间说成「昨天」这类词,DurationFormat 把各单位的时长拼成本地化串。

ListFormat + PluralRules · 列表与复数

ListFormat + PluralRules:列表拼接 & 复数

ListFormat 按语言习惯连接列表,PluralRules 把数值映射到复数类别,两者常与 NumberFormat 串用。

Segmenter + Collator · 切分 & 排序

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 另有独立条目,可按需查对各成员的逐浏览器覆盖。