• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Intl开发指导
2
3本模块提供基础的应用国际化能力,包括时间日期格式化、数字格式化、排序等,相关接口在ECMA 402标准中定义。更多接口和使用方式请见[Intl](../reference/apis/js-apis-intl.md)。
4
5[I18N](i18n-guidelines.md)模块提供其他非ECMA 402定义的国际化接口,与本模块共同使用可提供完整地国际化支持能力。
6
7## 设置区域信息
8
9调用[Locale](../reference/apis/js-apis-intl.md#locale)的相关接口实现最大化区域信息或最小化区域信息。
10
11### 接口说明
12
13| 类名 | 接口名称 | 描述 |
14| -------- | -------- | -------- |
15| Locale | constructor()<sup>8+</sup> | 实例化Locale对象。 |
16| Locale | constructor(locale:string,options?:LocaleOptions) | 基于locale参数及其选项实例化Locale对象。 |
17| Locale | toString():string | 将Locale信息转换为字符串。 |
18| Locale | maximize():Locale | 最大化区域信息。 |
19| Locale | minimize():Locale | 最小化区域信息。 |
20
21### 开发步骤
22
231. 导入Intl模块。
24
25   未正确导入包可能会产生不明确的接口行为。
26
27   ```js
28   import Intl from '@ohos.intl';
29   ```
30
312. 实例化Locale对象。
32
33   使用Locale的构造函数创建Locale对象,该方法接收一个表示Locale的字符串及可选的[属性](../reference/apis/js-apis-intl.md#localeoptions)列表(intl为导入的模块名)。
34
35   表示Locale的字符串参数可以分为以下四部分:语言、脚本、地区、扩展参数。各个部分按照顺序使用中划线“-”进行连接。
36   -  语言:必选,使用2个或3个小写英文字母表示(可参考ISO-639标准),例如英文使用“en”表示,中文使用“zh”表示。
37   -  脚本:可选,使用4个英文字母表示,其中首字母需要大写,后面3个使用小写字母(可参考ISO-15924)。例如,中文繁体使用脚本“Hant”表示,中文简体使用脚本“Hans”表示。
38   -  国家或地区:可选,使用两个大写字母表示(可参考ISO-3166),例如中国使用“CN”表示,美国使用“US”表示;
39   -  扩展参数:可选,由key和value两部分组成,目前支持以下扩展参数(可参考BCP 47扩展)。各个扩展参数之间没有严格的顺序,使用“-key-value”的格式书写。扩展参数整体使用“-u”连接到语言、脚本、地区后面。例如“zh-u-nu-latn-ca-chinese”表示使用“latn”数字系统,“chinese”日历系统。扩展参数也可以通过第二个参数传入。
40      | 扩展参数ID | 扩展参数说明 |
41      | -------- | -------- |
42      | ca | 表示日历系统 |
43      | co | 表示排序规则 |
44      | hc | 表示守时惯例 |
45      | nu | 表示数字系统 |
46      | kn | 表示字符串排序、比较时是否考虑数字的实际值 |
47      | kf | 表示字符串排序、比较时是否考虑大小写 |
48
49
50   ```js
51   let locale = "zh-CN";
52   let options = {caseFirst: "false", calendar: "chinese", collation: "pinyin"};
53   let localeObj = new Intl.Locale(locale, options);
54   ```
55
563. 获取Locale的字符串表示。
57
58     调用toString方法来获取Locale对象的字符串表示,其中包括了语言、区域及其他选项信息。
59
60   ```js
61   let localeStr = localeObj.toString(); // localeStr = "zh-CN-u-ca-chinese-co-pinyin-kf-false
62   ```
63
644. 最大化区域信息。
65
66     调用maximize方法来最大化区域信息,即当缺少脚本与地区信息时,对其进行补全。
67
68   ```js
69   let maximizedLocale = localeObj.maximize();
70   let maximizedLocaleStr = maximizedLocale.toString(); // localeStr = "zh-Hans-CN-u-ca-chinese-co-pinyin-kf-false
71   ```
72
735. 最小化区域信息。
74
75     调用minimize方法来最小化区域信息,即当存在脚本与地区信息时,对其进行删除。
76
77   ```js
78   let minimizedLocale = localeObj.minimize();
79   let minimizedLocaleStr = minimizedLocale.toString(); // zh-u-ca-chinese-co-pinyin-kf-false
80   ```
81
82## 格式化日期时间
83
84调用日期时间格式化[DateTimeFormat](../reference/apis/js-apis-intl.md#datetimeformat)的接口,实现针对特定Locale的日期格式化以及时间段格式化功能。
85
86### 接口说明
87
88| 类名 | 接口名称 | 描述 |
89| -------- | -------- | -------- |
90| DateTimeFormat | constructor()<sup>8+</sup> | 创建日期时间格式化对象。 |
91| DateTimeFormat | constructor(locale:string\|Array&lt;string&gt;,options?:DateTimeOptions) | 创建日期时间格式化对象,并设置提供的Locale和格式化相关属性。 |
92| DateTimeFormat | format(date:Date):string | 依据DateTimeFormat对象的Locale及其他格式化属性,计算日期时间的格式化表示。 |
93| DateTimeFormat | formatRange(startDate:Date,endDate:Date):string | 依据DateTimeFormat对象的Locale及其他格式化属性,计算时间段的格式化表示。 |
94| DateTimeFormat | resolvedOptions():DateTimeOptions | 获取DateTimeFormat对象的相关属性。 |
95
96### 开发步骤
97
981. 导入Intl模块。
99
100   未正确导入包可能会产生不明确的接口行为。
101
102   ```js
103   import Intl from '@ohos.intl';
104   ```
105
1062. 实例化日期时间格式化对象。
107
108   一种方法是使用DateTimeFormat提供的默认构造函数,通过访问系统语言和地区设置,获取系统默认Locale,并将其作为DateTimeFormat对象内部的Locale。
109
110   ```js
111   let dateTimeFormat = new Intl.DateTimeFormat();
112   ```
113
114     另一种方法是使用开发者提供的Locale和格式化参数来创建日期时间格式化对象。其中,格式化参数是可选的,完整的格式化参数列表见[DateTimeOptions](../reference/apis/js-apis-intl.md#datetimeoptions9)。
115
116   ```js
117   let options = {dateStyle: "full", timeStyle: "full"};
118   let dateTimeFormat = new Intl.DateTimeFormat("zh-CN", options);
119   ```
120
1213. 格式化日期时间。
122
123     使用DateTimeFormat的format方法对一个Date对象进行格式化,该方法会返回一个字符串作为格式化的结果。
124
125   ```js
126   let options = {dateStyle: "full", timeStyle: "full"};
127   let dateTimeFormat = new Intl.DateTimeFormat("zh-CN", options);
128   let date = new Date(2022, 12, 12, 12, 12, 12);
129   let formatResult = dateTimeFormat.format(date); // formatResult = "2023年1月12日星期四 中国标准时间 下午12:12:12"
130   ```
131
1324. 格式化时间段。
133
134     使用DateTimeFormat的formatRange方法对一个时间段进行格式化。该方法需要传入两个Date对象,分别表示时间段的起止日期,返回一个字符串作为格式化的结果。
135
136   ```js
137   let startDate = new Date(2021, 11, 17, 3, 24, 0);
138   let endDate = new Date(2021, 11, 18, 3, 24, 0);
139   let datefmt = new Intl.DateTimeFormat("en-GB");
140   let formatRangeResult = datefmt.formatRange(startDate, endDate); // formatRangeResult = "17/12/2021-18/12/2021"
141   ```
142
1435. 访问日期时间格式化对象的相关属性。
144
145     DateTimeFormat的resolvedOptions方法会返回一个对象,该对象包含了DateTimeFormat对象的所有相关属性及其值。
146
147   ```js
148   let options = {dateStyle: "full", timeStyle: "full"};
149   let dateTimeFormat = new Intl.DateTimeFormat("zh-CN", options);
150   let resolvedOptions = dateTimeFormat.resolvedOptions(); // resolvedOptions = {"locale": "zh-CN", "calendar": "gregorian", "dateStyle":"full", "timeStyle":"full", "timeZone": "CST"}
151   ```
152
153## 数字格式化
154
155调用数字格式化[NumberFormat](../reference/apis/js-apis-intl.md#numberformat)的接口,实现针对特定Locale的数字格式化功能。
156
157### 接口说明
158
159| 类名 | 接口名称 | 描述 |
160| -------- | -------- | -------- |
161| NumberFormat | constructor()<SUP>8+</SUP> | 创建数字格式化对象。 |
162| NumberFormat | constructor(locale:string\|Array&lt;string&gt;,options?:NumberOptions) | 创建数字格式化对象,并设置提供的locale和格式化相关属性。 |
163| NumberFormat | format(number:number):string | 依据NumberFormat对象的Locale及其他格式化属性,计算数字的格式化表示。 |
164| NumberFormat | resolvedOptions():NumberOptions | 获取NumberFormat对象的相关属性。 |
165
166### 开发步骤
167
1681. 导入Intl模块。
169
170   未正确导入包可能会产生不明确的接口行为。
171
172   ```js
173   import Intl from '@ohos.intl';
174   ```
175
1762. 实例化数字格式化对象。
177
178   一种方法是使用NumberFormat提供的默认构造函数,通过访问系统的语言和地区以获取系统默认Locale并进行设置(intl为导入的模块名)。
179
180   ```js
181   let numberFormat = new Intl.NumberFormat();
182   ```
183
184     另一种方法是使用开发者提供的Locale和格式化参数来创建数字格式化对象。其中,格式化参数是可选的,完整的格式化参数列表参见[NumberOptions](../reference/apis/js-apis-intl.md#numberoptions9)。
185
186   ```js
187   let options = {compactDisplay: "short", notation: "compact"};
188   let numberFormat = new Intl.NumberFormat("zh-CN", options);
189   ```
190
1913. 数字格式化。
192
193     使用NumberFormat的format方法对传入的数字进行格式化。该方法返回一个字符串作为格式化的结果。
194
195   ```js
196   let options = {compactDisplay: "short", notation: "compact"};
197   let numberFormat = new Intl.NumberFormat("zh-CN", options);
198   let number = 1234.5678;
199   let formatResult = numberFormat.format(number); // formatResult = "1235"
200   ```
201
2024. 访问数字格式化对象的相关属性。
203
204     NumberFormat的resolvedOptions方法会返回一个对象,该对象包含了NumberFormat对象的所有相关属性及其值。
205
206   ```js
207   let options = {compactDisplay: "short", notation: "compact"};
208   let numberFormat = new Intl.NumberFormat("zh-CN", options);
209   let resolvedOptions = numberFormat.resolvedOptions();  // resolvedOptions = {"locale": "zh-CN", "compactDisplay": "short", "notation": "compact", "numberingSystem": "Latn"}
210   ```
211
212## 字符串排序
213
214不同区域的用户对于字符串排序具有不同的需求。调用字符串排序[Collator](../reference/apis/js-apis-intl.md#collator8)的接口,实现针对特定Locale的字符串排序功能。
215
216### 接口说明
217
218| 类名 | 接口名称 | 描述 |
219| -------- | -------- | -------- |
220| Collator | constructor()<sup>8+</sup> | 创建排序对象。 |
221| Collator | constructor(locale:string\|Array&lt;string&gt;,options?:CollatorOptions)<sup>8+</sup> | 创建排序对象,并设置提供的locale和其他相关属性。 |
222| Collator | compare(first:string,second:string):number<sup>8+</sup> | 依据排序对象的Locale及其属性,计算两个字符串的比较结果。 |
223| Collator | resolvedOptions():CollatorOptions<sup>8+</sup> | 获取排序对象的相关属性。 |
224
225### 开发步骤
226
2271. 导入Intl模块。
228
229   未正确导入包可能会产生不明确的接口行为。
230
231   ```js
232   import Intl from '@ohos.intl';
233   ```
234
2352. 实例化排序对象。
236
237   一种方法是使用Collator提供的默认构造函数,通过访问系统的语言和地区以获取系统默认Locale并进行设置(intl为导入的模块名)。
238
239   ```js
240   let collator = new Intl.Collator();
241   ```
242
243     另一种方法是使用开发者提供的Locale和其他相关参数来创建Collator对象,完整的参数列表参见[CollatorOptions](../reference/apis/js-apis-intl.md#collatoroptions9)。
244     其中,sensitivity参数用于控制哪些级别的差异会被用于比较两个字符串。取值"base"表示,仅比较字符本身,不考虑重音符号、大小写差异。例如,'a' != 'b','a' == 'á','a' == 'A'。取值"accent"表示考虑重音符号,不考虑大小写的差异。例如,'a' != 'b','a' != 'á','a' == 'A'。取值"case"表示考虑大小写的差异,不考虑重音符号的差异。例如,'a' != 'b','a' == 'á','a' != 'A'。取值"variant"表示考虑重音符号、大小写等方面差异。例如'a' != 'b','a' != 'á','a' != 'A'。
245
246   ```js
247   let collator= new Intl.Collator("zh-CN", {localeMatcher: "best fit", usage: "sort", sensitivity: "case"});
248   ```
249
2503. 比较字符串。
251
252     使用Collator的compare方法对传入的两个字符串进行比较。该方法返回一个数值作为比较的结果,返回-1表示第一个字符串小于第二个字符串,返回1表示第一个字符大于第二个字符串,返回0表示两个字符串相同。基于两个字符串的比较结果,开发者可以字符串集合进行排序。
253
254   ```js
255   let collator= new Intl.Collator("zh-CN", {localeMatcher: "best fit", usage: "sort", sensitivity: "case"});
256   let str1 = "first string";
257   let str2 = "second string";
258   let compareResult = collator.compare(str1, str2); // compareResult = -1
259   str1 = "first";
260   str2 = "First";
261   compareResult = collator.compare(str1, str2); // compareResult = -1
262   ```
263
2644. 访问排序对象的相关属性。
265
266     Collator的resolvedOptions方法会返回一个对象,该对象包含了Collator对象的所有相关属性及其值。
267
268   ```js
269   let collator= new Intl.Collator("zh-CN", {localeMatcher: "best fit", usage: "sort"});
270   let options = collator.resolvedOptions(); // options = {"localeMatcher": "best fit", "locale": "zh-CN", "usage": "sort", "sensitivity": "variant", "ignorePunctuation": "false", "numeric": false, "caseFirst": "false", "collation": "default"}
271   ```
272
273## 判定单复数类别
274
275在一些语言的语法中,当数字后面存在名词时,名词需要根据数字的值采用不同的形式。调用单复数[PluralRules](../reference/apis/js-apis-intl.md#pluralrules8)的接口,可以实现针对特定Locale计算数字单复数类别的功能,从而选择合适的名词单复数表示。
276
277### 接口说明
278
279| 类名 | 接口名称 | 描述 |
280| -------- | -------- | -------- |
281| PluralRules | constructor()<sup>8+</sup> | 创建单复数对象。 |
282| PluralRules | constructor(locale:string\|Array&lt;string&gt;,options?:PluralRulesOptions)<sup>8+</sup> | 创建单复数对象,并设置提供的locale和其他相关属性。 |
283| PluralRules | select(n:number):string<sup>8+</sup> | 依据单复数对象的Locale及其他格式化属性,计算数字的单复数类别。 |
284
285
286### 开发步骤
287
2881. 导入Intl模块。
289
290   未正确导入包可能会产生不明确的接口行为。
291
292   ```js
293   import Intl from '@ohos.intl';
294   ```
295
2962. 实例化单复数对象。
297
298   一种方法是使用PluralRules提供的默认构造函数,通过访问系统的语言和地区以获取系统默认Locale并进行设置(intl为导入的模块名)。
299
300   ```js
301   let pluralRules = new Intl.PluralRules();
302   ```
303
304     另一种方法是使用开发者提供的Locale和其他相关参数来创建单复数对象。完整的参数列表参见[PluralRulesOptions](../reference/apis/js-apis-intl.md#pluralrulesoptions9)。
305
306   ```js
307   let pluralRules = new Intl.PluralRules("zh-CN", {localeMatcher: "best fit", type: "cardinal"});
308   ```
309
3103. 计算数字单复数类别。
311
312     使用PluralRules的select方法计算传入数字的单复数类别。该方法返回一个字符串作为传入数字的类别,包括:"zero", "one", "two", "few", "many", "other"六个类别。
313
314   ```js
315   let pluralRules = new Intl.PluralRules("zh-CN", {localeMatcher: "best fit", type: "cardinal"});
316   let number = 1234.5678;
317   let categoryResult = pluralRules.select(number); // categoryResult = "other"
318   ```
319
320## 相对时间格式化
321
322调用相对时间格式化[RelativeTimeFormat](../reference/apis/js-apis-intl.md#relativetimeformat8)的接口,实现针对特定Locale的相对时间格式化功能。
323
324### 接口说明
325
326| 类名 | 接口名称 | 描述 |
327| -------- | -------- | -------- |
328| RelativeTimeFormat | constructor()<sup>8+</sup> | 创建相对时间格式化对象。 |
329| RelativeTimeFormat | constructor(locale:string\|Array&lt;string&gt;,options?:RelativeTimeFormatInputOptions)<sup>8+</sup> | 创建相对时间格式化对象,并设置提供的locale和格式化相关属性。 |
330| RelativeTimeFormat | format(value:number,unit:string):string<sup>8+</sup> | 依据相对时间格式化对象的Locale及其他格式化属性,计算相对时间的格式化表示。 |
331| RelativeTimeFormat | formatToParts(value:number,unit:string):Array&lt;object&gt;<sup>8+</sup> | 依据相对时间格式化对象的Locale及其他格式化属性,返回相对时间格式化表示的各个部分。 |
332| RelativeTimeFormat | resolvedOptions():RelativeTimeFormatResolvedOptions<sup>8+</sup> | 获取相对时间格式化对象的相关属性。 |
333
334### 开发步骤
335
3361. 导入Intl模块。
337
338   未正确导入包可能会产生不明确的接口行为。
339
340   ```js
341   import Intl from '@ohos.intl';
342   ```
343
3442. 实例化相对时间格式化对象。
345
346   一种方法是使用RelativeTimeFormat提供的默认构造函数,通过访问系统的语言和地区以获取系统默认Locale并进行设置(intl为导入的模块名)。
347
348   ```js
349   let relativeTimeFormat = new Intl.RelativeTimeFormat();
350   ```
351
352     另一种方法是使用开发者提供的Locale和格式化参数来创建相对时间格式化对象。其中,格式化参数是可选的,完整的参数列表参见[ RelativeTimeFormatInputOptions](../reference/apis/js-apis-intl.md#relativetimeformatinputoptions9)。
353
354   ```js
355   let relativeTimeFormat = new Intl.RelativeTimeFormat("zh-CN", {numeric: "always", style: "long"});
356   ```
357
3583. 相对时间格式化。
359
360     使用RelativeTimeFormat的format方法对相对时间进行格式化。方法接收一个表示相对时间长度的数值和表示单位的字符串,其中单位包括:"year", "quarter", "month", "week", "day", "hour", "minute", "second"。方法返回一个字符串作为格式化的结果。
361
362   ```js
363   let relativeTimeFormat = new Intl.RelativeTimeFormat("zh-CN", {numeric: "always", style: "long"});
364   let number = 2;
365   let unit = "year";
366   let formatResult = relativeTimeFormat.format(number, unit); // 2年后
367   ```
368
3694. 获取相对时间格式化结果的各个部分。
370
371     获取相对时间格式化结果的各个部分,从而自定义格式化结果。
372
373   ```js
374   let relativeTimeFormat = new Intl.RelativeTimeFormat("zh-CN", {numeric: "always", style: "long"});
375   let number = 2;
376   let unit = "year";
377   let formatPartsResult = relativeTimeFormat.formatToParts(number, unit); // formatPartsResult = [{"type": "integer", "value": "2", "unit": "year"}, {"type":"literal", "value": "年后"}]
378   ```
379
3805. 访问相对时间格式化对象的相关属性。
381
382     RelativeTimeFormat的resolvedOptions方法会返回一个对象,该对象包含了RelativeTimeFormat对象的所有相关属性及其值,完整的属性列表参见[ RelativeTimeFormatResolvedOptions](../reference/apis/js-apis-intl.md#relativetimeformatresolvedoptions8)。
383
384   ```js
385   let relativeTimeFormat = new Intl.RelativeTimeFormat("zh-CN", {numeric: "always", style: "long"});
386   let options = relativeTimeFormat.resolvedOptions(); // options = {"locale": "zh-CN", "style": "long", "numeric": "always", "numberingSystem": "latn"}
387   ```
388
389## 相关实例
390
391针对Intl开发,有以下相关实例可供参考:
392
393-[`International`:国际化(ArkTS)(API9)(Full SDK)](https://gitee.com/openharmony/applications_app_samples/tree/OpenHarmony-3.2-Release/code/SystemFeature/Internationalnation/International)
394