aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/javascript/reference/global_objects/intl/index.html
blob: 165a332206e51c0a918196c3e6f3308a967e7119 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
---
title: Intl
slug: Web/JavaScript/Reference/Global_Objects/Intl
tags:
  - JavaScript
  - 国际化
translation_of: Web/JavaScript/Reference/Global_Objects/Intl
---
<div>{{JSRef}}</div>

<p class="summary"><strong><code>Intl</code></strong> 对象是 ECMAScript 国际化 API 的一个命名空间,它提供了精确的字符串对比、数字格式化,和日期时间格式化。{{jsxref("Collator")}}{{jsxref("NumberFormat")}}{{jsxref("DateTimeFormat")}} 对象的构造函数是 <code>Intl</code> 对象的属性。本页文档内容包括了这些属性,以及国际化使用的构造器和其他语言的方法等常见的功能。</p>

<h2 id="属性">属性</h2>

<dl>
 <dt>{{jsxref("Global_Objects/Collator", "Intl.Collator")}}</dt>
 <dd>collators的构造函数,用于启用对语言敏感的字符串比较的对象。</dd>
 <dt>{{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}}</dt>
 <dd>用于启用语言敏感的日期和时间格式的对象的构造函数。</dd>
 <dt>{{jsxref("Global_Objects/ListFormat", "Intl.ListFormat")}}</dt>
 <dd>Constructor for objects that enable language-sensitive list formatting.</dd>
 <dt>{{jsxref("Global_Objects/NumberFormat", "Intl.NumberFormat")}}</dt>
 <dd>用于启用语言敏感数字格式的对象的构造函数。</dd>
 <dt>{{jsxref("Global_Objects/PluralRules", "Intl.PluralRules")}}</dt>
 <dd>用于启用多种敏感格式和多种语言语言规则的对象的构造函数。</dd>
 <dt>{{jsxref("Global_Objects/RelativeTimeFormat", "Intl.RelativeTimeFormat")}}</dt>
 <dd>Constructor for objects that enable language-sensitive relative time formatting.</dd>
</dl>

<h2 id="方法">方法</h2>

<dl>
 <dt>{{jsxref("Intl.getCanonicalLocales()")}}</dt>
 <dd>返回规范区域名称(canonical locale name)。</dd>
</dl>

<h2 id="语言区域识别和判定">语言区域识别和判定</h2>

<p>国际化的构造函数和其他构造函数的几个语言敏感的方法(可参考下方的{{anch("See_also", "参见")}})一样,使用同样的模式来识别语言区域和确定使用哪一种语言格式:他们都接收 <code>locales</code><code>options</code> 参数,使用 <code>options.localeMatcher</code> 属性指定的一个算法来对比应用请求的和支持的语言区域,来确定使用哪一个语言区域。</p>

<h3 id="locales_参数"><code>locales</code> 参数</h3>

<p><code>locales</code> 参数必须是一个 <a href="http://tools.ietf.org/html/rfc5646">BCP 47 语言标记</a>的字符串,或者是一个包括多个语言标记的数组。如果 <code>locales</code> 参数未提供或者是 undefined,便会使用运行时默认的 locale。</p>

<p>一个 BCP 47 语言标记代表了一种语言或者区域(两者没有很大的区别)。在其最常见的格式中,它以这样的顺序囊括了这些内容:语言代码,脚本代码,和国家代码,全部由连字符分隔开。例如:</p>

<ul>
 <li><code>"hi"</code>:印地语 (primary language)。</li>
 <li><code>"de-AT"</code><code>在奥地利使用的德语 (primary language with country code)。</code></li>
 <li><code>"zh-Hans-CN"</code>:在中国使用的简体中文 (primary language with script and country codes)。</li>
</ul>

<p>在 BCP 47 中表示语言,脚本,国家(区域)和变体(少用)的语言子标记含义可以在<a href="http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry"> IANA 语言子标记注册</a>中找到。</p>

<p>BCP 47 也支持扩展,其中一个和 JavaScript 国际化方法相关的是:"u"(Unicode)扩展。它可以用于请求一个自定义区域特定行为的 {{jsxref("Collator")}}{{jsxref("NumberFormat")}},或者 {{jsxref("DateTimeFormat")}} 对象。例如:</p>

<ul>
 <li><code>"de-DE-u-co-phonebk"</code>:使用德语的电话簿排序变体,这会把元音变音扩展成字符对:ä → ae, ö → oe, ü → ue。</li>
 <li><code>"th-TH-u-nu-thai"</code>:在数字格式中使用泰语的数值表示(๐, ๑, ๒, ๓, ๔, ๕, ๖, ๗, ๘, ๙)</li>
 <li><code>"ja-JP-u-ca-japanese":在日期和时间格式化中使用日本的日历表示方式,所以 2013 会表示为平成 25。</code></li>
 <li><code>"en-GB-u-ca-islamic"</code>: use British English with the Islamic (Hijri) calendar, where the Gregorian date 14 October, 2017 is the Hijri date 24 Muharram, 1439.</li>
</ul>

<h3 id="语言区域判定">语言区域判定</h3>

<p><code>locales</code> 参数,在除去所有的 Unicode 扩展之后,会被转化成来自应用的优先请求。运行时拿它和可用的语言区域做对比然后选择出最合适的一个。有两种匹配算法:“查找” 匹配遵循 <a href="http://tools.ietf.org/html/rfc5646">BCP 47</a> 中指定的查找算法;“最佳命中” 匹配器会让运行时至少提供一个语言区域,但合适请求的结果可能会比查找算法的要多。如果应用没有提供一个 locales 参数,或者运行时没有一个匹配请求的语言区域,那么会使用运行时默认的语言区域。匹配器可以使用 <code>options</code> 参数的一个属性来进行选择(见下方)。</p>

<p>如果选中的语言标记有一个 Unicode 扩展子字符串,这个扩展会用于自定义构造对象或者方法的行为。每一个构造函数或者方法仅支持 Unicode 扩展定义的 key 的一个子集,和依赖于语言标记的支持的值。例如,<code>“co”</code>这个 key(collation)只在 {{jsxref("Collator")}} 中支持,它的值 “phonebk” 只在德语中支持。</p>

<h3 id="options_参数"><code>options</code> 参数</h3>

<p><code>options</code> 参数必须是一个对象,其属性值在不同的构造函数和方法中会有所变化。如果 <code>options</code> 参数未提供或者为 undefined,所有的属性值则使用默认的。</p>

<p>所有语言敏感的构造函数和方法都支持的一个属性是:<code>localeMatcher</code> 属性,它的值必须是字符串 “lookup” 或者 “best fit”,用于选择上边描述的语言区域匹配算法。</p>

<h2 id="规范">规范</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Specification</th>
   <th scope="col">Status</th>
   <th scope="col">Comment</th>
  </tr>
  <tr>
   <td>{{SpecName('ES Int 1.0', '#sec-8', 'Intl')}}</td>
   <td>{{Spec2('ES Int 1.0')}}</td>
   <td>Initial definition.</td>
  </tr>
  <tr>
   <td>{{SpecName('ES Int 2.0', '#sec-8', 'Intl')}}</td>
   <td>{{Spec2('ES Int 2.0')}}</td>
   <td> </td>
  </tr>
  <tr>
   <td>{{SpecName('ES Int Draft', '#intl-object', 'Intl')}}</td>
   <td>{{Spec2('ES Int Draft')}}</td>
   <td> </td>
  </tr>
 </tbody>
</table>

<h2 id="浏览器兼容性">浏览器兼容性</h2>

<div class="hidden">The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</div>

<p>{{Compat("javascript.builtins.Intl")}}</p>

<h2 id="参见">参见</h2>

<ul>
 <li>介绍:<a href="http://norbertlindenberg.com/2012/12/ecmascript-internationalization-api/index.html">The ECMAScript Internationalization API</a></li>
 <li>构造函数
  <ul>
   <li>{{jsxref("Collator", "Intl.Collator")}}</li>
   <li>{{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}}</li>
   <li>{{jsxref("ListFormat", "Intl.ListFormat")}}</li>
   <li>{{jsxref("NumberFormat", "Intl.NumberFormat")}}</li>
   <li>{{jsxref("PluralRules", "Intl.PluralRules")}}</li>
   <li>{{jsxref("RelativeTimeFormat", "Intl.RelativeTimeFormat")}}</li>
  </ul>
 </li>
 <li>方法
  <ul>
   <li>{{jsxref("String.prototype.localeCompare()")}}</li>
   <li>{{jsxref("Number.prototype.toLocaleString()")}}</li>
   <li>{{jsxref("Date.prototype.toLocaleString()")}}</li>
   <li>{{jsxref("Date.prototype.toLocaleDateString()")}}</li>
   <li>{{jsxref("Date.prototype.toLocaleTimeString()")}}</li>
  </ul>
 </li>
</ul>