intl-guidelines.md 13.9 KB
Newer Older
H
HelloCrease 已提交
1 2
# Internationalization Development (intl)

S
shawn_he 已提交
3
This development guide describes how to use i18n APIs that are defined in ECMA 402.
H
HelloCrease 已提交
4

5 6 7
> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE**<br>
> In the code snippets in this document, **intl** refers to the name of the imported module.

H
HelloCrease 已提交
8 9
## Setting Locale Information

10
Use [Locale](../reference/apis/js-apis-intl.md) APIs to maximize or minimize locale information.
H
HelloCrease 已提交
11 12 13 14


### Available APIs

15
| Module | API | Description | 
H
HelloCrease 已提交
16 17 18 19 20 21 22 23 24 25
| -------- | -------- | -------- |
| ohos.intl | constructor()<sup>8+</sup> | Instantiates a **Locale** object. | 
| ohos.intl | constructor(locale?: string, options?: options) | Instantiates a **Locale** object based on the locale parameter and options. | 
| ohos.intl | toString(): string | Converts locale information into a string. | 
| ohos.intl | maximize(): Locale | Maximizes locale information. | 
| ohos.intl | minimize(): Locale | Minimizes locale information. | 


### How to Develop

26
1. Instantiate a **Locale** object.<br>
27
   Create a **Locale** object by using the **Locale** constructor. This method receives a string representing the locale and an optional [Attributes](../reference/apis/js-apis-intl.md) list. 
H
HelloCrease 已提交
28 29 30 31 32 33 34 35

   
   ```
   var locale = "zh-CN";
   var options = {caseFirst: false, calendar: "chinese", collation: pinyin};
   var localeObj = new intl.Locale(locale, options);
   ```

36
2. Obtain the string representing a **Locale** object.<br>
37
   Call the **toString** method to obtain the string representing a **Locale** object, which includes the language, region, and other options.
H
HelloCrease 已提交
38 39 40 41 42
     
   ```
   var localeStr = localeObj.toString();
   ```

43 44
3. Maximize locale information.<br>
   Call the **maximize** method to maximize locale information; that is, supplement the missing script and region information.
H
HelloCrease 已提交
45 46 47 48 49
     
   ```
   var maximizedLocale = localeObj.maximize();
   ```

50 51
4. Minimize locale information.<br>
   Call the **minimize** method to minimize locale information; that is, delete the unnecessary script and region information.
H
HelloCrease 已提交
52 53 54 55 56 57 58 59
     
   ```
   var minimizedLocale = localeObj.minimize();
   ```


## Formatting the Date and Time

60
Use [DateTimeFormat](../reference/apis/js-apis-intl.md) APIs to format the date and time for a specific locale.
H
HelloCrease 已提交
61 62 63 64


### Available APIs

65
| Module | API | Description | 
H
HelloCrease 已提交
66 67 68 69 70 71 72 73 74 75
| -------- | -------- | -------- |
| ohos.intl | constructor()<sup>8+</sup> | Creates a **DateTimeFormat** object. | 
| ohos.intl | constructor(locale: string \| Array&lt;string&gt;, options?: DateTimeOptions) | Creates a **DateTimeFormat** object and sets the locale and other formatting-related attributes. | 
| ohos.intl | format(date: Date): string | Calculates the date and time based on the locale and other formatting-related attributes of the **DateTimeFormat** object. | 
| ohos.intl | formatRange(startDate: Date, endDate: Date): string | Calculates the period based on the locale and other formatting-related attributes of the **DateTimeFormat** object. | 
| ohos.intl | resolvedOptions(): DateTimeOptions | Obtains the related attributes of the **DateTimeFormat** object. | 


### How to Develop

76
1. Instantiate a **DateTimeFormat** object.<br>
77
   Use the default constructor of **DateTimeFormat** to obtain the system default locale by accessing the system language and region settings, and set it as the locale in the **DateTimeFormat** object.
H
HelloCrease 已提交
78 79 80 81 82 83

   
   ```
   var dateTimeFormat = new intl.DateTimeFormat();
   ```

84
   Alternatively, use your own locale and formatting parameters to create a **DateTimeFormat** object. Formatting parameters are optional. For a full list of formatting parameters, see [DateTimeOptions](../reference/apis/js-apis-intl.md).
H
HelloCrease 已提交
85 86 87 88 89 90
   
   ```
   var options = {dateStyle: "full", timeStyle: "full"};
   var dateTimeFormat = new intl.DateTimeFormat("zh-CN", options);
   ```

91
2. Format the date and time.<br>
92
   Call the **format** method to format a **Date** object. This method returns a string representing the formatting result.
H
HelloCrease 已提交
93 94 95 96 97 98
     
   ```
   Date date = new Date();
   var formatResult = dateTimeFormat.format(date);
   ```

99
3. Format a period.<br>
100
   Call the **formatRange** method to format a period. This method requires input of two **Date** objects, which respectively indicate the start date and end date of a period. This method returns a string representing the formatting result.
H
HelloCrease 已提交
101 102 103 104 105 106 107
     
   ```
   Date startDate = new Date();
   Date endDate = new Date();
   var formatResult = dateTimeFormat.formatRange(startDate, endDate);
   ```

108
4. Obtain attributes of the **DateTimeFormat** object.<br>
109
   Call the **resolvedOptions** method to obtain attributes of the **DateTimeFormat** object. This method will return an array that contains all attributes and values of the object.
H
HelloCrease 已提交
110 111 112 113 114 115 116 117
     
   ```
   var options = dateTimeFormat.resolvedOptions();
   ```


## Number Formatting

118
Use [NumberFormat](../reference/apis/js-apis-intl.md) APIs to format a number for a specific locale.
H
HelloCrease 已提交
119 120 121 122


### Available APIs

123
| Module | API | Description | 
H
HelloCrease 已提交
124 125 126 127
| -------- | -------- | -------- |
| ohos.intl | constructor()<sup>8+</sup> | Creates a **NumberFormat** object. | 
| ohos.intl | constructor(locale: string \| Array&lt;string&gt;, options?: NumberOptions) | Creates a **NumberFormat** object and sets the locale and other formatting-related attributes. | 
| ohos.intl | format(number: number): string | Calculates the number based on the locale and other formatting-related attributes of the **NumberFormat** object. | 
128
| ohos.intl | resolvedOptions(): NumberOptions | Obtains attributes of the **NumberFormat** object. | 
H
HelloCrease 已提交
129 130 131 132


### How to Develop

133
1. Instantiate a **NumberFormat** object.<br>
134
   Use the default constructor of **NumberFormat** to obtain the system default locale by accessing the system language and region settings, and set it as the locale in the **NumberFormat** object.
H
HelloCrease 已提交
135 136 137 138 139 140

   
   ```
   var numberFormat = new intl.NumberFormat();
   ```

141
   Alternatively, use your own locale and formatting parameters to create a **NumberFormat** object. Formatting parameters are optional. For a full list of formatting parameters, see [NumberOptions](../reference/apis/js-apis-intl.md).
H
HelloCrease 已提交
142 143 144 145 146 147
   
   ```
   var options = {compactDisplay: "short", notation: "compact"};
   var numberFormat = new intl.NumberFormat("zh-CN", options);
   ```

148
2. Format a number.<br>
149
   Call the **format** method to format a number. A string is returned as the formatting result.
H
HelloCrease 已提交
150 151 152 153 154 155
     
   ```
   var number = 1234.5678
   var formatResult = numberFormat.format(number);
   ```

156
3. Obtain attributes of the **NumberFormat** object.<br>
157
   Call the **resolvedOptions** method to obtain attributes of the **NumberFormat** object. This method will return an array that contains all attributes and values of the object.
H
HelloCrease 已提交
158 159 160 161 162 163 164 165
     
   ```
   var options = numberFormat.resolvedOptions();
   ```


## String Sorting

166
Use [Collator](../reference/apis/js-apis-intl.md) APIs to sort strings based on a specific locale. Users in different regions have different preferences for string sorting.
H
HelloCrease 已提交
167 168 169 170


### Available APIs

171
| Module | API | Description | 
H
HelloCrease 已提交
172 173 174 175
| -------- | -------- | -------- |
| ohos.intl | constructor()<sup>8+</sup> | Creates a **Collator** object. | 
| ohos.intl | constructor(locale: string \| Array&lt;string&gt;, options?: CollatorOptions)<sup>8+</sup> | Creates a **Collator** object and sets the locale and other related attributes. | 
| ohos.intl | compare(first: string, second: string): number<sup>8+</sup> | Calculates the comparison result of two strings based on the locale and other attributes of the **Collator** object. | 
176
| ohos.intl | resolvedOptions(): CollatorOptions<sup>8+</sup> | Obtains attributes of the **Collator** object. | 
H
HelloCrease 已提交
177 178 179 180


### How to Develop

181
1. Instantiate a **Collator** object.<br>
182
   Use the default constructor of **Collator** to obtain the system default locale by accessing the system language and region settings, and set it as the locale in the **Collator** object.
H
HelloCrease 已提交
183 184 185 186 187 188

   
   ```
   var collator = new intl.Collator();
   ```

189
   Alternatively, use your own locale and formatting parameters to create a **Collator** object. For a full list of parameters, see [CollatorOptions](../reference/apis/js-apis-intl.md).
H
HelloCrease 已提交
190 191 192 193 194
   
   ```
   var collator= new intl.Collator("zh-CN", {localeMatcher: "best fit", usage: "sort"};
   ```

195
2. Compare two strings.<br>
196
   Call the **compare** method to compare two input strings. This method returns a value as the comparison result. The return value **-1** indicates that the first string is shorter than the second string, the return value **1** indicates that the first string is longer than the second string, and the return value **0** indicates that the two strings are of equal lengths.
H
HelloCrease 已提交
197 198 199 200 201 202 203
     
   ```
   var str1 = "first string";
   var str2 = "second string";
   var compareResult = collator.compare(str1, str2);
   ```

204
3. Obtain attributes of the **Collator** object.<br>
205
   Call the **resolvedOptions** method to obtain attributes of the **Collator** object. This method will return an array that contains all attributes and values of the object.
H
HelloCrease 已提交
206 207 208 209 210 211 212 213
     
   ```
   var options = collator.resolvedOptions();
   ```


## Determining the Singular-Plural Type

214
Use [PluralRules](../reference/apis/js-apis-intl.md) APIs to determine the singular-plural type for a specific locale. According to the grammar of certain languages, the singular or plural form of a noun depends on its preceding number.
H
HelloCrease 已提交
215 216 217 218


### Available APIs

219
| Module | API | Description | 
H
HelloCrease 已提交
220 221 222 223 224 225 226 227
| -------- | -------- | -------- |
| ohos.intl | constructor()<sup>8+</sup> | Creates a **PluralRules** object. | 
| ohos.intl | constructor(locale: string \| Array&lt;string&gt;, options?: PluralRulesOptions)<sup>8+</sup> | Creates a **PluralRules** object and sets the locale and other related attributes. | 
| ohos.intl | select(n: number): string<sup>8+</sup> | Determines the singular-plural type based on the locale and other formatting-related attributes of the **PluralRules** object. | 


### How to Develop

228
1. Instantiate a **PluralRules** object.<br>
229
   Use the default constructor of **PluralRules** to obtain the system default locale by accessing the system language and region settings, and set it as the locale in the **PluralRules** object.
H
HelloCrease 已提交
230 231 232 233 234 235

   
   ```
   var pluralRules = new intl.PluralRules();
   ```

236
   Alternatively, use your own locale and formatting parameters to create a **PluralRules** object. For a full list of parameters, see [PluralRulesOptions](../reference/apis/js-apis-intl.md).
H
HelloCrease 已提交
237 238 239 240 241
   
   ```
   var plurals = new intl.PluralRules("zh-CN", {localeMatcher: "best fit", type: "cardinal"};
   ```

242 243
2. Determine the singular-plural type.<br>
   Call the **select** method to determine the singular-plural type of an input number. This method will return a string representing the singular-plural type, which can be any of the following: **zero**, **one**, **two**, **few**, **many**, and **other**.
H
HelloCrease 已提交
244 245 246 247 248 249 250 251 252
     
   ```
   var number = 1234.5678
   var categoryResult = plurals.select(number);
   ```


## Formatting Relative Time

253
Use [RelativeTimeFormat](../reference/apis/js-apis-intl.md) APIs to format the relative time for a specific locale.
H
HelloCrease 已提交
254 255 256 257


### Available APIs

258
| Module | API | Description | 
H
HelloCrease 已提交
259 260 261 262 263
| -------- | -------- | -------- |
| ohos.intl | constructor()<sup>8+</sup> | Creates a **RelativeTimeFormat** object. | 
| ohos.intl | constructor(locale: string \| Array&lt;string&gt;, options?: RelativeTimeFormatInputOptions)<sup>8+</sup> | Creates a **RelativeTimeFormat** object and sets the locale and other formatting-related attributes. | 
| ohos.intl | format(value: number, unit: string): string<sup>8+</sup> | Calculates the relative time format based on the locale and other formatting-related attributes of the **RelativeTimeFormat** object. | 
| ohos.intl | formatToParts(value: number, unit: string): Array&lt;object&gt;<sup>8+</sup> | Returns each part of the relative time format based on the locale and other formatting-related attributes of the **RelativeTimeFormat** object. | 
264
| ohos.intl | resolvedOptions(): RelativeTimeFormatResolvedOptions<sup>8+</sup> | Obtains attributes of the **RelativeTimeFormat** object. | 
H
HelloCrease 已提交
265 266 267 268


### How to Develop

269
1. Instantiate a **RelativeTimeFormat** object.<br>
270
   Use the default constructor of **RelativeTimeFormat** to obtain the system default locale by accessing the system language and region settings, and set it as the locale in the **RelativeTimeFormat** object.
H
HelloCrease 已提交
271 272 273 274 275 276

   
   ```
   var relativeTimeFormat = new intl.RelativeTimeFormat();
   ```

277
   Alternatively, use your own locale and formatting parameters to create a **RelativeTimeFormat** object. Formatting parameters are optional. For a full list of formatting parameters, see [ RelativeTimeFormatInputOptions](../reference/apis/js-apis-intl.md).
H
HelloCrease 已提交
278 279 280 281 282
   
   ```
   var relativeTimeFormat = new intl.RelativeTimeFormat("zh-CN", {numeric: "always", style: "long"};
   ```

283
2. Format the relative time.<br>
284
   Call the **format** method to format the relative time. This method receives a numeric value representing the time length and a string-form unit, like **year**, **quarter**, **month**, **week**, **day**, **hour**, **minute**, and **second**. This method returns a string representing the formatting result.
H
HelloCrease 已提交
285 286 287 288 289 290 291
     
   ```
   var number = 2;
   var unit = "year"
   var formatResult = relativeTimeFormat.format(number, unit);
   ```

292
3. Obtain each part of the relative time format.<br>
293
   Upon obtaining each part of the relative time format, customize the relative time formatting result.
H
HelloCrease 已提交
294 295 296 297 298 299 300
     
   ```
   var number = 2;
   var unit = "year"
   var formatResult = relativeTimeFormat.formatToParts(number, unit);
   ```

301
4. Obtain attributes of the **RelativeTimeFormat** object.<br>
302
   Call the **resolvedOptions** method to obtain attributes of the **RelativeTimeFormat** object. This method will return an array that contains all attributes and values of the object. For a full list of attributes, see [ RelativeTimeFormatResolvedOptions](../reference/apis/js-apis-intl.md).
H
HelloCrease 已提交
303 304 305 306
     
   ```
   var options = numberFormat.resolvedOptions();
   ```
S
shawn_he 已提交
307 308 309 310 311

## Samples

The following sample is provided to help you better understand how to develop internationalization capabilities:

312
-[`International`: Internationalization (JS) (API8)](https://gitee.com/openharmony/app_samples/tree/master/UI/International)