跳转至

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。

注意事项

  1. 语言代码使用标准的 BCP 47 语言标签,如 'zh' 表示中文,'en-US' 表示美式英语
  2. 某些功能可能在特定浏览器或环境中不可用,使用前建议检查兼容性
  3. 在国际化应用中,应根据用户的语言环境动态选择合适的格式化选项