JavaScript Intl API 详解¶
Intl 是 JavaScript 的国际化 API,提供了格式化数字、日期、时间、相对时间、复数规则和文本分段等功能,支持多语言环境。
相对时间格式化¶
使用 Intl.RelativeTimeFormat 可以格式化相对时间,如“昨天”、“明天”、“7天后”等。
// 相对时间格式化
const rtf = new Intl.RelativeTimeFormat('zh', { numeric: 'auto' });
console.log(rtf.format(-1, 'day')); // "昨天"
console.log(rtf.format(7, 'day')); // "7天后"
复数规则¶
使用 Intl.PluralRules 可以根据语言环境确定数字的复数形式,这对于多语言应用的文本显示非常重要。
// 复数规则
const pr = new Intl.PluralRules('en-US');
console.log(pr.select(0)); // "other"
console.log(pr.select(1)); // "one"
console.log(pr.select(2)); // "other"
文本分段器¶
使用 Intl.Segmenter 可以将文本按语言和粒度进行分段,支持字符、词和句子级别的分段。
// 分段器
const segmenter = new Intl.Segmenter('zh', { granularity: 'word' });
const segments = segmenter.segment('你好,世界!');
console.log([...segments].map(s => s.segment)); // ["你好", ",", "世界", "!"]
其他 Intl 功能¶
除了上述功能外,Intl API 还包括:
Intl.DateTimeFormat:格式化日期和时间Intl.NumberFormat:格式化数字、货币和百分比Intl.Collator:字符串比较和排序Intl.ListFormat:格式化列表Intl.DisplayNames:获取语言、地区、货币等的本地化名称
浏览器兼容性¶
现代浏览器对 Intl API 的支持较好,但在一些旧版浏览器中可能需要使用 polyfill。
注意事项¶
- 语言代码使用标准的 BCP 47 语言标签,如 'zh' 表示中文,'en-US' 表示美式英语
- 某些功能可能在特定浏览器或环境中不可用,使用前建议检查兼容性
- 在国际化应用中,应根据用户的语言环境动态选择合适的格式化选项