Intl.Locale

Baseline 广泛可用 *

此功能已成熟,并可在许多设备和浏览器版本上使用。自 2020 年 9 月起,所有浏览器均已提供此功能。

* 此特性的某些部分可能存在不同级别的支持。

Intl.Locale 对象是 Intl 对象的一个标准内置属性,用于表示一个 Unicode 区域设置标识符。

试一试

const korean = new Intl.Locale("ko", {
  script: "Kore",
  region: "KR",
  hourCycle: "h23",
  calendar: "gregory",
});

const japanese = new Intl.Locale("ja-Jpan-JP-u-ca-japanese-hc-h12");

console.log(korean.baseName, japanese.baseName);
// Expected output: "ko-Kore-KR" "ja-Jpan-JP"

console.log(korean.hourCycle, japanese.hourCycle);
// Expected output: "h23" "h12"

描述

创建 Intl.Locale 对象是为了更方便地处理 Unicode 区域设置。Unicode 使用字符串表示区域设置,称为区域设置标识符。区域设置标识符由语言标识符扩展标签组成。语言标识符是区域设置的核心,由语言脚本地区变体子标签组成。关于区域设置的附加信息存储在可选的扩展标签中。扩展标签包含有关区域设置方面的信息,例如日历类型、时钟类型和数字系统类型。

传统上,Intl API 与 Unicode 一样,使用字符串来表示区域设置。这是一个简单、轻量且效果良好的解决方案。然而,添加 Locale 类可以更轻松地解析和操作语言、脚本、地区以及扩展标签。Intl.Locale 的以下属性对应于 Unicode 区域设置标识符子标签:

属性 对应的子标签
language 语言 ID,第一部分
script language 后的语言 ID 部分
region script 后的语言 ID 部分
variants region 后的语言 ID 部分
calendar ca (扩展)
caseFirst kf (扩展)
collation co (扩展)
hourCycle hc (扩展)
numberingSystem nu (扩展)
numeric kn (扩展)

以上信息在构造 Locale 对象时完全按原样提供,不会查询任何外部数据库。Intl.Locale 对象还提供了一些方法,用于返回有关区域设置的真实世界信息,例如可用的日历、排序规则和数字系统。

构造函数

Intl.Locale()

创建一个新的 Locale 对象。

实例属性

这些属性定义在 Intl.Locale.prototype 上,并被所有 Intl.Locale 实例共享。

Intl.Locale.prototype.baseName

以完整数据字符串的子字符串形式返回 Locale 的基本、核心信息。

Intl.Locale.prototype.calendar

返回 Locale 中指示区域设置日历时代的那个部分。

Intl.Locale.prototype.caseFirst

返回区域设置的排序规则是否考虑了大小写。

Intl.Locale.prototype.collation

返回 Locale 的排序类型,用于根据区域设置的规则对字符串进行排序。

Intl.Locale.prototype.constructor

创建实例对象的构造函数。对于 Intl.Locale 实例,初始值是 Intl.Locale 构造函数。

Intl.Locale.prototype.hourCycle

返回区域设置使用的计时格式约定。

Intl.Locale.prototype.language

返回与区域设置关联的语言。

Intl.Locale.prototype.numberingSystem

返回区域设置使用的数字系统。

Intl.Locale.prototype.numeric

返回区域设置是否对数字字符有特殊的排序处理。

Intl.Locale.prototype.region

返回与区域设置关联的世界地区(通常是国家)。

Intl.Locale.prototype.script

返回用于书写区域设置中使用到的特定语言的脚本。

Intl.Locale.prototype.variants

返回与区域设置关联的变体子标签(例如不同的正字法)。

Intl.Locale.prototype[Symbol.toStringTag]

[Symbol.toStringTag] 属性的初始值是字符串 "Intl.Locale"。此属性用于 Object.prototype.toString()

实例方法

Intl.Locale.prototype.getCalendars()

根据区域设置的规则,返回一个可用日历标识符的 Array

Intl.Locale.prototype.getCollations()

返回 Locale 的排序类型的 Array

Intl.Locale.prototype.getHourCycles()

返回小时周期标识符的 Array,表示 12 小时制("h12")、日文 12 小时制("h11")、24 小时制("h23")或未使用格式 "h24"。

Intl.Locale.prototype.getNumberingSystems()

根据区域设置的规则,返回可用数字系统标识符的 Array

Intl.Locale.prototype.getTextInfo()

返回指示字符排序方向的 `ltr`(从左到右)或 `rtl`(从右到左)的部分。

Intl.Locale.prototype.getTimeZones()

返回与 Locale 关联的时区标识符的 Array

Intl.Locale.prototype.getWeekInfo()

根据区域设置规则,返回 UTS 35 的周元素

Intl.Locale.prototype.maximize()

根据现有值获取区域设置最可能的语言、脚本和地区值。

Intl.Locale.prototype.minimize()

尝试移除调用 maximize() 时会添加的区域设置信息。

Intl.Locale.prototype.toString()

返回区域设置的完整区域设置标识符字符串。

示例

基本用法

最简单的情况下,Intl.Locale() 构造函数将区域设置标识符字符串作为其参数。

js
const us = new Intl.Locale("en-US");

使用带有选项对象的 Locale 构造函数

构造函数还接受一个可选的配置对象参数,该参数可以包含任何几种扩展类型。例如,将配置对象的 hourCycle 属性设置为所需的时钟周期类型,然后将其传递给构造函数。

js
const us12hour = new Intl.Locale("en-US", { hourCycle: "h12" });
console.log(us12hour.hourCycle); // Prints "h12"

规范

规范
ECMAScript® 2026 国际化 API 规范
# locale-objects

浏览器兼容性

另见