1# I18n开发指导 2 3本模块提供系统相关的或者增强的国际化能力,包括区域管理、电话号码处理、日历等,相关接口为ECMA 402标准中未定义的补充接口。更多接口和使用方式请见[I18N](../reference/apis/js-apis-i18n.md)。 4 5[Intl](intl-guidelines.md)模块提供了ECMA 402标准定义的基础国际化接口,与本模块共同使用可提供完整地国际化支持能力。 6 7## 获取和设置系统国际化相关信息 8 9调用接口访问和设置系统语言、偏好语言、地区、24小时制、本地数字等国际化信息。 10 11### 接口说明 12 13| 类名 | 接口名称 | 描述 | 14| --------- | ---------------------------------------- | --------------------- | 15| System | getDisplayCountry(country:string,locale:string,sentenceCase?:boolean):string<sup>9+</sup> | 获取国家的本地化表示。 | 16| System | getDisplayLanguage(language:string,locale:string,sentenceCase?:boolean):string<sup>9+</sup> | 获取语言的本地化表示。 | 17| System | getSystemLanguages():Array<string><sup>9+</sup> | 获取系统语言列表。 | 18| System | getSystemCountries(language: string):Array<string><sup>9+</sup> | 获取针对输入语言系统支持的国家或地区列表。 | 19| System | isSuggested(language: string, region?: string): boolean<sup>9+</sup> | 判断当前语言和地区是否匹配 | 20| System | getSystemLanguage():string<sup>9+</sup> | 获取系统语言。 | 21| System | setSystemLanguage(language: string)<sup>9+</sup> | 设置系统语言。 | 22| System | getSystemRegion():string<sup>9+</sup> | 获取系统地区。 | 23| System | setSystemRegion(region: string)<sup>9+</sup> | 设置系统地区。 | 24| System | getSystemLocale():string<sup>9+</sup> | 获取系统Locale。 | 25| System | setSystemLocale(locale: string)<sup>9+</sup> | 设置系统Locale。 | 26| System | is24HourClock():boolean<sup>9+</sup> | 判断系统时间是否为24小时制。 | 27| System | set24HourClock():boolean<sup>9+</sup> | 修改系统时间的24小时制设置。 | 28| System | addPreferredLanguage(language: string, index?: number)<sup>9+</sup> | 在系统偏好语言列表的指定位置添加偏好语言。 | 29| System | removePreferredLanguage(index: number)<sup>9+</sup> | 删除系统偏好语言列表中指定位置的偏好语言。 | 30| System | getPreferredLanguageList()<sup>9+</sup> | 获取系统偏好语言列表。 | 31| System | getFirstPreferredLanguage()<sup>9+</sup> | 获取系统偏好语言列表中的第一个偏好语言。 | 32| System | getAppPreferredLanguage()<sup>9+</sup> | 获取应用偏好语言。 | 33| System | setUsingLocalDigit(flag: boolean)<sup>9+</sup> | 设置系统是否使用本地数字。 | 34| System | getUsingLocalDigit()<sup>9+</sup> | 判断系统是否使用本地数字。 | 35| | isRTL(locale:string):boolean<sup>9+</sup> | locale对应的语言是否为从右到左语言。 | 36 37### 开发步骤 381. 导入I18n模块。 39 40 ```js 41 import I18n from '@ohos.i18n'; 42 ``` 43 442. 获取和设置系统语言。 45 46 调用setSystemLanguage接口设置系统语言(该接口为系统接口,只有具有UPDATE_CONFIGURATION权限的系统应用可以调用)。 47 调用getSystemLanguage接口获取系统语言。 48 49 ```js 50 try { 51 I18n.System.setSystemLanguage("en"); // 将系统语言设置为 "en" 52 let language = I18n.System.getSystemLanguage(); // language = "en" 53 } catch(error) { 54 console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`); 55 } 56 ``` 57 583. 获取和设置系统区域。 59 60 调用setSystemRegion接口设置系统国家(该接口为系统接口,只有具有UPDATE_CONFIGURATION权限的系统应用可以调用)。 61 调用getSystemRegion接口获取系统国家。 62 63 ```js 64 try { 65 I18n.System.setSystemRegion("CN"); // 将系统国家设置为 "CN" 66 let region = I18n.System.getSystemRegion(); // region = "CN" 67 } catch(error) { 68 console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`); 69 } 70 ``` 71 724. 获取和设置系统Locale。 73 74 调用setSystemLocale接口设置系统Locale(该接口为系统接口,只有具有UPDATE_CONFIGURATION权限的系统应用可以调用)。Locale的定义请见[Locale](../internationalization/intl-guidelines.md#设置区域信息) 75 调用getSystemLocale接口获取系统Locale。 76 77 ```js 78 try { 79 I18n.System.setSystemLocale("zh-Hans-CN"); // 将系统Locale设置为 "zh-Hans-CN" 80 let locale = I18n.System.getSystemLocale(); // locale = "zh-Hans-CN" 81 } catch(error) { 82 console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`); 83 } 84 ``` 85 865. 判断Locale的语言是否为从右到左语言。 87 88 调用isRTL接口获取Locale的语言是否为从右到左语言。 89 90 ```js 91 try { 92 let rtl = I18n.isRTL("zh-CN"); // rtl = false 93 rtl = I18n.isRTL("ar"); // rtl = true 94 } catch(error) { 95 console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`); 96 } 97 ``` 98 996. 获取和设置系统24小时制设置。 100 101 调用set24HourClock接口打开系统24小时制设置。 102 调用is24HourClock接口来判断当前是否打开系统24小时制设置。 103 104 ```js 105 try { 106 I18n.System.set24HourClock(true); 107 let hourClock = I18n.System.is24HourClock(); // hourClock = true 108 } catch(error) { 109 console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`); 110 } 111 ``` 112 1137. 获取语言的本地化表示。 114 115 调用getDisplayLanguage接口获取某一语言的本地化表示。其中,language表示待本地化显示的语言,locale表示本地化的Locale,sentenceCase结果是否需要首字母大写。 116 117 ```js 118 try { 119 let language = "en"; 120 let locale = "zh-CN"; 121 let sentenceCase = false; 122 let localizedLanguage = I18n.System.getDisplayLanguage(language, locale, sentenceCase); // localizedLanguage = "英语" 123 } catch(error) { 124 console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`); 125 } 126 ``` 127 1288. 获取国家的本地化表示。 129 130 调用getDisplayCountry接口获取某一国家的本地化表示。其中,country表示待本地化显示的国家,locale表示本地化的Locale,sentenceCase结果是否需要首字母大写。 131 132 ```js 133 try { 134 let country = "US"; 135 let locale = "zh-CN"; 136 let sentenceCase = false; 137 let localizedCountry = I18n.System.getDisplayCountry(country, locale, sentenceCase); // localizedCountry = "美国" 138 } catch(error) { 139 console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`); 140 } 141 ``` 142 1439. 获取系统语言列表和某个语言系统支持的国家列表。 144 145 调用getSystemLanguages接口获取系统支持的语言列表。 146 调用getSystemCountries接口获取某一语言系统支持的地区列表。 147 ```js 148 149 try { 150 let languageList = I18n.System.getSystemLanguages(); // languageList = ["en-Latn-US", "zh-Hans"] 151 let countryList = I18n.System.getSystemCountries("zh"); // countryList = ["ZW", "YT", ..., "CN", "DE"], 共240个国家和地区 152 } catch(error) { 153 console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`); 154 } 155 ``` 156 15710. 判断语言和国家是否匹配。 158 159 调用isSuggested接口判断语言和地区是否匹配。 160 161 ```js 162 try { 163 let isSuggest = I18n.System.isSuggested("zh", "CN"); // isSuggest = true 164 } catch(error) { 165 console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`); 166 } 167 ``` 168 16911. 获取与设置偏好语言。 170 171 调用addPreferredLanguage接口在当前系统偏好语言列表中插入偏好语言。 172 调用removePreferredLanguage接口移除系统偏好语言列表中的某个语言。(addPreferredLanguage接口和removePreferredLanguage接口为系统接口,只有具有UPDATE_CONFIGURATION权限的系统应用可以调用。) 173 调用getPreferredLanguageList接口获取系统当前偏好语言列表。 174 调用getFirstPreferredLanguage接口获取系统偏好语言列表中的第一个偏好语言。 175 调用getAppPreferredLanguageList接口获取应用偏好语言,应用偏好语言为系统偏好语言列表中第一个与应用的资源匹配的语言。 176 177 ```js 178 try { 179 I18n.System.addPreferredLanguage("en-GB", 0); // 将"en-GB"设置为系统偏好语言列表的第一个语言 180 let list = I18n.System.getPreferredLanguageList(); // 获取当前系统偏好语言列表 list = ["en-GB", ...] 181 I18n.System.removePreferredLanguage(list.length - 1); // 移除当前系统偏好语言列表中的最后一个偏好语言 182 let firstPreferredLanguage = I18n.System.getFirstPreferredLanguage(); // firstPreferredLanguage = "en-GB" 183 let appPreferredLanguage = I18n.System.getAppPreferredLanguage(); // 当应用中包含 "en-GB"资源时,应用偏好语言为"en-GB" 184 } catch(error) { 185 console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`); 186 } 187 ``` 188 18912. 获取和设置系统本地化数字开关。 190 191 调用setUsingLocalDigit接口打开本地化数字开关。(此接口为系统接口,只有具有UPDATE_CONFIGURATION权限的系统应用可以调用。) 192 调用getUsingLocalDigit接口访问本地化数字开关状态。 193 当前只有 "ar", "as", "bn", "fa", "mr", "my", "ne", "ur" 8个语言支持使用本地数字。 194 195```js 196try { 197 I18n.System.setUsingLocalDigit(true); // 打开本地化数字开关 198 let status = I18n.System.getUsingLocalDigit(); // status = true 199} catch(error) { 200 console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`); 201} 202``` 203 204## 获取日历信息 205 206调用日历[Calendar](../reference/apis/js-apis-i18n.md#calendar8)相关接口来获取日历的相关信息,例如获取日历的本地化显示、一周起始日、一年中第一周的最小天数等。 207 208### 接口说明 209 210| 类名 | 接口名称 | 描述 | 211| --------- | ---------------------------------------- | --------------------- | 212| | getCalendar(locale:string,type?:string):Calendar<sup>8+</sup> | 获取指定locale和type的日历对象。 | 213| Calendar | setTime(date:Date): void<sup>8+</sup> | 设置日历对象内部的时间日期。 | 214| Calendar | setTime(time:number): void<sup>8+</sup> | 设置日历对象内部的时间日期。 | 215| Calendar | set(year:number,month:number,date:number,hour?:number,minute?:number,second?:number): void<sup>8+</sup> | 设置日历对象的年、月、日、时、分、秒。 | 216| Calendar | setTimeZone(timezone:string): void<sup>8+</sup> | 设置日历对象的时区。 | 217| Calendar | getTimeZone():string<sup>8+</sup> | 获取日历对象的时区。 | 218| Calendar | getFirstDayOfWeek():number<sup>8+</sup> | 获取日历对象的一周起始日。 | 219| Calendar | setFirstDayOfWeek(value:number): void<sup>8+</sup> | 设置日历对象的一周起始日。 | 220| Calendar | getMinimalDaysInFirstWeek():number<sup>8+</sup> | 获取一年中第一周的最小天数。 | 221| Calendar | setMinimalDaysInFirstWeek(value:number): void<sup>8+</sup> | 设置一年中第一周的最小天数。 | 222| Calendar | getDisplayName(locale:string):string<sup>8+</sup> | 获取日历对象的本地化表示。 | 223| Calendar | isWeekend(date?:Date):boolean<sup>8+</sup> | 判断给定的日期在日历中是否是周末。 | 224 225### 开发步骤 226 2271. 导入I18n模块。 228 229 ```js 230 import I18n from '@ohos.i18n'; 231 ``` 232 2332. 实例化日历对象。 234 235 调用getCalendar接口获取指定locale和type的时区对象(i18n为导入的模块)。其中,type表示合法的日历类型,目前合法的日历类型包括:"buddhist", "chinese", "coptic", "ethiopic", "hebrew", "gregory", "indian", "islamic_civil", "islamic_tbla", "islamic_umalqura", "japanese", "persian"。当type没有给出时,采用区域默认的日历类型。 236 237 ```js 238 let calendar = I18n.getCalendar("zh-CN", "chinese"); // 创建中文农历日历 239 ``` 240 2413. 设置日历对象的时间。 242 243 调用setTime接口设置日历对象的时间。setTime接口接收两种类型的参数。一种是传入一个Date对象,另一种是传入一个数值表示从1970.1.1 00:00:00 GMT逝去的毫秒数。 244 245 ```js 246 let date1 = new Date(); 247 calendar.setTime(date1); 248 let date2 = 1000; 249 calendar.setTime(date2); 250 ``` 251 2524. 设置日历对象的年、月、日、时、分、秒。 253 254 调用set接口设置日历对象的年、月、日、时、分、秒。 255 256 ```js 257 calendar.set(2021, 12, 21, 6, 0, 0); 258 ``` 259 2605. 设置、获取日历对象的时区。 261 262 调用setTimeZone接口和getTimeZone接口来设置、获取日历对象的时区。其中,setTimeZone接口需要传入一个字符串表示需要设置的时区。 263 264 ```js 265 calendar.setTimeZone("Asia/Shanghai"); 266 let timezone = calendar.getTimeZone(); // timezone = "China Standard Time" 267 ``` 268 2696. 设置、获取日历对象的一周起始日。 270 271 调用setFirstDayOfWeek接口和getFirstDayOfWeek接口设置、获取日历对象的一周起始日。其中,setFirstDayOfWeek需要传入一个数值表示一周的起始日,1代表周日,7代表周六。 272 273 ```js 274 calendar.setFirstDayOfWeek(1); 275 let firstDayOfWeek = calendar.getFirstDayOfWeek(); // firstDayOfWeek = 1 276 ``` 277 2787. 设置、获取日历对象第一周的最小天数。 279 调用setMinimalDaysInFirstWeek接口和getMinimalDaysInFirstWeek接口来设置、获取日历对象第一周的最小天数。 280 281 ```js 282 calendar.setMinimalDaysInFirstWeek(3); 283 let minimalDaysInFirstWeek = calendar.getMinimalDaysInFirstWeek(); // minimalDaysInFirstWeek = 3 284 ``` 285 2868. 获取日历对象的本地化显示。 287 调用getDisplayName来获取日历对象的本地化显示。 288 289 ```js 290 let localizedName = calendar.getDisplayName("zh-CN"); // localizedName = "农历" 291 ``` 292 2939. 判断某一个日期是否为周末。 294 295 调用isWeekend接口来判断输入的Date是否为周末。 296 297 ```js 298 let date = new Date(2022, 12, 12, 12, 12, 12); 299 let weekend = calendar.isWeekend(date); // weekend = false 300 ``` 301 302## 电话号码格式化 303 304调用电话号码格式化[PhoneNumberFormat](../reference/apis/js-apis-i18n.md#phonenumberformat8)的接口,实现对针对不同国家电话号码的格式化以及判断电话号码格式是否正确的功能。 305 306### 接口说明 307 308| 类名 | 接口名称 | 描述 | 309| --------- | ---------------------------------------- | ----------------------- | 310| PhoneNumberFormat | constructor(country:string,options?:PhoneNumberFormatOptions)<sup>8+</sup> | 实例化PhoneNumberFormat对象。 | 311| PhoneNumberFormat | isValidNumber(number:string):boolean<sup>8+</sup> | 判断number是否是一个格式正确的电话号码。 | 312| PhoneNumberFormat | format(number:string):string<sup>8+</sup> | 对number按照指定国家及风格进行格式化。 | 313| PhoneNumberFormat | getLocationName(number: string, locale: string): string<sup>9+</sup> | 获取电话号码归属地。 | 314 315### 开发步骤 316 3171. 导入I18n模块。 318 319 ```js 320 import I18n from '@ohos.i18n'; 321 ``` 322 3232. 实例化电话号码格式化对象。 324 325 调用PhoneNumberFormat的构造函数来实例化电话号码格式化对象,需要传入电话号码的国家代码及格式化选项。其中,格式化选项是可选的,包括style选项,该选项的取值包括:"E164", "INTERNATIONAL", "NATIONAL", "RFC3966"。 326 327 ```js 328 let phoneNumberFormat = new I18n.PhoneNumberFormat("CN", {type: "E164"}); 329 ``` 330 3313. 判断电话号码格式是否正确。 332 333 调用isValidNumber接口来判断输入的电话号码的格式是否正确。 334 335 ```js 336 let validNumber = phoneNumberFormat.isValidNumber("15812341234"); // validNumber = true 337 ``` 338 3394. 电话号码格式化。 340 341 调用电话号码格式化对象的format接口来对输入的电话号码进行格式化。 342 343 ```js 344 let formattedNumber = phoneNumberFormat.format("15812341234"); // formattedNumber = "+8615812341234" 345 ``` 346 347## 度量衡转换 348 349度量衡转换接口可以实现度量衡转换的相关功能。 350 351### 接口说明 352 353| 类名 | 接口名称 | 描述 | 354| --------- | ---------------------------------------- | --------------------------------------- | 355| I18NUtil | unitConvert(fromUnit:UnitInfo,toUnit:UnitInfo,value:number,locale:string,style?:string):string<sup>9+</sup> | 将fromUnit的单位转换为toUnit的单位,并根据区域与风格进行格式化。 | 356 357### 开发步骤 358 3591. 导入I18n模块。 360 361 ```js 362 import I18n from '@ohos.i18n'; 363 ``` 364 3652. 度量衡单位转换。 366 367 调用[unitConvert](../reference/apis/js-apis-i18n.md#unitconvert9)接口实现度量衡单位转换,并进行格式化显示的功能。 368 369 ```js 370 let fromUnit = {unit: "cup", measureSystem: "US"}; 371 let toUnit = {unit: "liter", measureSystem: "SI"}; 372 let number = 1000; 373 let locale = "en-US"; 374 let style = "long"; 375 let converttedUnit = I18n.I18NUtil.unitConvert(fromUnit, toUnit, number, locale, style); // converttedUnit = "236.588 liters" 376 ``` 377 378## 字母表索引 379 380调用字母表索引[IndexUtil](../reference/apis/js-apis-i18n.md#indexutil8)的接口可以获取不同Locale的字母表索引,以及实现计算字符串所属索引的功能。 381 382### 接口说明 383 384| 类名 | 接口名称 | 描述 | 385| --------- | ---------------------------------------- | ----------------------- | 386| | getInstance(locale?:string):IndexUtil<sup>8+</sup> | 实例化字母表索引对象。 | 387| IndexUtil | getIndexList():Array<string><sup>8+</sup> | 获取当前Locale的索引列表。 | 388| IndexUtil | addLocale(locale:string): void<sup>8+</sup> | 将新的Locale对应的索引加入当前索引列表。 | 389| IndexUtil | getIndex(text:string):string<sup>8+</sup> | 获取text对应的索引。 | 390 391### 开发步骤 392 3931. 导入I18n模块。 394 395 ```js 396 import I18n from '@ohos.i18n'; 397 ``` 398 3992. 实例化字母表索引对象。 400 401 调用getInstance接口来实例化特定locale对应的字母表索引对象。当locale参数为空时,实例化系统默认Locale的字母表索引对象。 402 403 404 ```js 405 let indexUtil = I18n.getInstance("zh-CN"); 406 ``` 407 4083. 获取索引列表。 409 410 调用getIndexList接口来获取当前Locale对应的字母表索引列表。 411 412 ```js 413 let indexList = indexUtil.getIndexList(); // indexList = ["...", "A", "B", "C", ..., "X", "Y", "Z", "..."] 414 ``` 415 4164. 增加新的索引。 417 418 调用addLocale接口,将新的Locale对应的字母表索引添加到当前字母表索引列表中。 419 420 ```js 421 indexUtil.addLocale("ar"); 422 ``` 423 4245. 获取字符串对应的索引。 425 426 调用getIndex接口来获取某一字符串对应的字母表索引。 427 428 ```js 429 let text = "access index"; 430 let index = indexUtil.getIndex(text); // index = "A" 431 ``` 432 433## 获取文本断点位置 434 435当文本比较长无法在一行进行显示时,调用文本断点[BreakIterator8](../reference/apis/js-apis-i18n.md#breakiterator8)的接口,来获取文本可以断行的位置。 436 437### 接口说明 438 439| 类名 | 接口名称 | 描述 | 440| --------- | ---------------------------------------- | ------------------------------ | 441| | getLineInstance(locale:string):BreakIterator<sup>8+</sup> | 实例化断行对象。 | 442| BreakIterator | setLineBreakText(text:string): void<sup>8+</sup> | 设置要处理的文本。 | 443| BreakIterator | getLineBreakText():string<sup>8+</sup> | 获取要处理的文本。 | 444| BreakIterator | current():number<sup>8+</sup> | 获取当前断行对象在处理文本的位置。 | 445| BreakIterator | first():number<sup>8+</sup> | 将断行对象设置到第一个可断句的分割点。 | 446| BreakIterator | last():number<sup>8+</sup> | 将断行对象设置到最后一个可断句的分割点。 | 447| BreakIterator | next(index?:number):number<sup>8+</sup> | 将断行对象移动index个分割点的位置。 | 448| BreakIterator | previous():number<sup>8+</sup> | 将断行对象移动到前一个分割点的位置。 | 449| BreakIterator | following(offset:number):number<sup>8+</sup> | 将断行对象移动到offset指定位置的后面一个分割点的位置。 | 450| BreakIterator | isBoundary(offset:number):boolean<sup>8+</sup> | 判断某个位置是否是分割点。 | 451 452### 开发步骤 453 4541. 导入I18n模块。 455 456 ```js 457 import I18n from '@ohos.i18n'; 458 ``` 459 4602. 实例化断行对象。 461 462 调用getLineInstance接口来实例化断行对象。 463 464 ```js 465 let locale = "en-US"; 466 let breakIterator = I18n.getLineInstance(locale); 467 ``` 468 4693. 设置、访问要断行处理的文本。 470 471 调用setLineBreakText接口和getLineBreakText接口来设置、访问要断行处理的文本。 472 473 ```js 474 let text = "Apple is my favorite fruit"; 475 breakIterator.setLineBreakText(text); 476 let breakText = breakIterator.getLineBreakText(); // breakText = "Apple is my favorite fruit" 477 ``` 478 4794. 获取断行对象当前的位置。 480 481 调用current接口来获取断行对象在当前处理文本中的位置。 482 483 ```js 484 let pos = breakIterator.current(); // pos = 0 485 ``` 486 4875. 设置断行对象的位置。 488 489 系统提供了很多接口可以用于调整断行对象在处理文本中的位置,包括first, last, next, previous, following。 490 491 ```js 492 let firstPos = breakIterator.first(); // 将断行对象设置到第一个分割点的位置,即文本的起始位置;firstPos = 0 493 let lastPos = breakIterator.last(); // 将断行对象设置到最后一个分割点的位置,即文本末尾的下一个位置;lastPos = 26 494 // 将断行对象向前或向后移动一定数量的分割点。 495 // 当传入正数时,向后移动;当传入负数时,向前移动;当未传入数值时,则向后移动一个位置; 496 // 当移动超出了文本的长度范围,则返回-1; 497 let nextPos = breakIterator.next(-2); // nextPos = 12 498 let previousPos = breakIterator.previous(); // 将断行对象向前移动向前移动一个分割点,当超出文本长度范围时返回-1; previousPos = 9 499 // 将断行对象移动到offset指定位置的后面一个分割点。如果offset所指定的位置的下一个分割点超出了文本的长度范围,则返回-1; 500 let followingPos = breakIterator.following(10); // followingPos = 12 501 ``` 502 5036. 判断某个位置是否为分割点。 504 505 调用isBoundary接口来判断一个接口是否为分割点;如果该位置是分割点,则返回true,并且将断行对象移动到该位置;如果该位置不是分割点,则返回false,并且将断行对象移动到该位置后的一个分割点。 506 507 ```js 508 let isboundary = breakIterator.isBoundary(5); // isboundary = false 509 ``` 510 511## 获取时区 512 513调用时区[TimeZone](../reference/apis/js-apis-i18n.md#timezone)相关接口来获取时区的相关信息,例如获取时区的ID、本地化显示、时区偏移量等。 514 515### 接口说明 516 517| 类名 | 接口名称 | 描述 | 518| --------- | ---------------------------------------- | ------------------------------ | 519| | getTimeZone(zoneID?: string): TimeZone<sup>7+</sup> | 获取时区对象。 | 520| TimeZone | getID(): string<sup>7+</sup> | 获取时区ID。 | 521| TimeZone | getDisplayName(locale?: string, isDST?: boolean): string<sup>7+</sup> | 获取时区的本地化显示。 | 522| TimeZone | getRawOffset(): number<sup>7+</sup> | 获取时区对象与UTC时区的偏移量。 | 523| TimeZone | getOffset(date?: number): number<sup>7+</sup> | 获取某一时间点时区对象与UTC时区的偏移量。 | 524| TimeZone | getAvailableIDs(): Array<string><sup>9+</sup> | 获取系统支持的时区ID列表。 | 525| TimeZone | getAvailableZoneCityIDs(): Array<string><sup>9+</sup> | 获取系统支持的时区城市ID列表。 | 526| TimeZone | getCityDisplayName(cityID: string, locale: string): string<sup>9+</sup> | 获取时区城市ID的本地化显示。 | 527| TimeZone | getTimezoneFromCity(cityID: string): TimeZone<sup>9+</sup> | 获取时区城市ID对应的时区对象。 | 528 529### 开发步骤 530 5311. 导入I18n模块。 532 533 ```js 534 import I18n from '@ohos.i18n'; 535 ``` 536 5372. 实例化时区对象,并获取相关时区信息。 538 539 调用getTimeZone接口来获取时区对象。 540 541 ```js 542 let timezone = I18n.getTimeZone(); // 使用默认参数可以获取系统时区对象。 543 ``` 544 545 获取时区ID、本地化显示、时区偏移量、某一时刻的时区偏移量信息。 546 547 ```js 548 let timezoneID = timezone.getID(); // timezoneID = "Asia/Shanghai" 549 let timezoneDisplayName = timezone.getDisplayName(); // timezoneDisplayName = "中国标准时间" 550 let rawOffset = timezone.getRawOffset(); // rawOffset = 28800000 551 let offset = timezone.getOffset(new Date().getTime()); // offset = 28800000 552 ``` 553 5543. 获取系统支持的时区ID。 555 556 调用getAvailableIDs接口获取系统支持的时区ID列表。 557 时区ID列表中的时区ID可以作为getTimeZone接口的参数,来创建TimeZone对象。 558 559 ```js 560 let timezoneIDs = I18n.TimeZone.getAvailableIDs(); // timezoneIDs = ["America/Adak", ...],共包含24个时区ID 561 let timezone = I18n.getTimeZone(timezoneIDs[0]); 562 let timezoneDisplayName = timezone.getDisplayName(); // timezoneDisplayName = "夏威夷-阿留申时间" 563 ``` 564 5654. 获取系统支持的时区城市ID。 566 567 调用getAvailableZoneCityIDs接口获取系统支持的时区城市ID列表。 568 调用getCityDisplayName接口获取时区城市ID的本地化显示。 569 调用getTimezoneFromCity接口基于时区城市ID创建时区对象。 570 571 ```js 572 let zoneCityIDs = I18n.TimeZone.getAvailableZoneCityIDs(); // ["Auckland", "Magadan", ...] 573 let cityDisplayName = I18n.TimeZone.getCityDisplayName(zoneCityIDs[0], "zh-Hans"); // cityDisplayName = "奥克兰(新西兰)" 574 let timezone = I18n.TimeZone.getTimezoneFromCity(zoneCityIDs[0]); 575 let timezoneDisplayName = timezone.getDisplayName(); // timezoneDisplayName = "新西兰时间" 576 ``` 577 578## 获取音译对象 579 580调用音译[Transliterator](../reference/apis/js-apis-i18n.md#transliterator9)相关接口来创建音译对象,获取音译字符串。 581 582### 接口说明 583 584| 类名 | 接口名称 | 描述 | 585| --------- | ---------------------------------------- | ------------------------------ | 586| Transliterator | getAvailableIDs():Array<string><sup>9+</sup> | 获取音译支持的ID列表。 | 587| Transliterator | getInstance(): Transliterator<sup>9+</sup> | 创建音译对象。 | 588| Transliterator | transform(text: string): string<sup>9+</sup> | 获取音译字符串。 | 589 590### 开发步骤 591 5921. 导入I18n模块。 593 594 ```js 595 import I18n from '@ohos.i18n'; 596 ``` 597 5982. 获取支持音译的ID列表。 599 600 调用getAvailableIDs接口来获取支持音译的ID列表。 601 每个ID的格式为 source-destination,例如 ASCII-Latin,表示将ASCII转换为Latin的音译ID。 602 603 ```js 604 let ids = I18n.Transliterator.getAvailableIDs(); // ids = ["ASCII-Latin", "Accents-Any", ... ],共支持671个语言 605 ``` 606 6073. 创建音译对象,获取音译字符串。 608 609 支持音译的ID列表中的ID可以作为getInstance接口的参数,创建音译对象。 610 调用transform接口,获取音译字符串。 611 612 ```js 613 let transliterator = I18n.Transliterator.getInstance("Any-Latn"); // Any-Latn表示将任意文本转换为Latn文本 614 let transformText = transliterator.transform("你好"); // transformText = "nǐ hǎo " 615 ``` 616 617## 字符类型判断 618 619调用字符[Unicode](../reference/apis/js-apis-i18n.md#unicode9)相关接口来获取字符的相关信息,例如字符是否是数字、字符是否是空格符等。 620 621### 接口说明 622 623| 类名 | 接口名称 | 描述 | 624| --------- | ---------------------------------------- | ------------------------------ | 625| Unicode | isDigit(char: string): boolean<sup>9+</sup> | 判断字符是否是数字。 | 626| Unicode | isSpaceChar(char: string): boolean<sup>9+</sup> | 判断字符是否是空格符。 | 627| Unicode | isWhitespace(char: string): boolean<sup>9+</sup> | 判断字符是否是空白符。 | 628| Unicode | isRTL(char: string): boolean<sup>9+</sup> | 判断字符是否是从左到右显示的字符。 | 629| Unicode | isIdeograph(char: string): boolean<sup>9+</sup> | 判断字符是否是表意文字。 | 630| Unicode | isLetter(char: string): boolean<string><sup>9+</sup> | 判断字符是否是字母。 | 631| Unicode | isLowerCase(char: string): boolean<string><sup>9+</sup> | 判断字符是否是小写字母。 | 632| Unicode | isUpperCase(char: string): boolean<sup>9+</sup> | 判断字符是否是大写字母。 | 633| Unicode | getType(char: string): string<sup>9+</sup> | 获取字符的类型。 | 634 635### 开发步骤 636 6371. 导入I18n模块。 638 639 ```js 640 import I18n from '@ohos.i18n'; 641 ``` 642 6432. 判断字符是否具有某种性质。 644 645 判断字符是否是数字。 646 647 ```js 648 let isDigit = I18n.Unicode.isDigit("1"); // isDigit = true 649 isDigit = I18n.Unicode.isDigit("a"); // isDigit = false 650 ``` 651 652 判断字符是否是空格符。 653 654 ```js 655 let isSpaceChar = I18n.Unicode.isSpaceChar(" "); // isSpaceChar = true 656 isSpaceChar = I18n.Unicode.isSpaceChar("\n"); // isSpaceChar = false 657 ``` 658 659 判断字符是否是空白符。 660 661 ```js 662 let isWhitespace = I18n.Unicode.isWhitespace(" "); // isWhitespace = true 663 isWhitespace = I18n.Unicode.isWhitespace("\n"); // isWhitespace = true 664 ``` 665 666 判断字符是否是从左到右书写的文字。 667 668 ```js 669 let isRTL = I18n.Unicode.isRTL("مرحبًا"); // isRTL = true,阿拉伯语的文字是从左到右书写的文字 670 isRTL = I18n.Unicode.isRTL("a"); // isRTL = false 671 ``` 672 673 判断字符是否是表意文字。 674 675 ```js 676 let isIdeograph = I18n.Unicode.isIdeograph("你好"); // isIdeograph = true 677 isIdeograph = I18n.Unicode.isIdeograph("a"); // isIdeograph = false 678 ``` 679 680 判断字符是否是字母。 681 682 ```js 683 let isLetter = I18n.Unicode.isLetter("a"); // isLetter = true 684 isLetter = I18n.Unicode.isLetter("."); // isLetter = false 685 ``` 686 687 判断字符是否是小写字母。 688 689 ```js 690 let isLowerCase = I18n.Unicode.isLowerCase("a"); // isLetter = true 691 isLowerCase = I18n.Unicode.isLowerCase("A"); // isLetter = false 692 ``` 693 694 判断字符是否是大写字母。 695 696 ```js 697 let isUpperCase = I18n.Unicode.isUpperCase("a"); // isUpperCase = false 698 isUpperCase = I18n.Unicode.isUpperCase("A"); // isUpperCase = true 699 ``` 700 7013. 获取字符的类型。 702 703 调用getType接口获取字符的类型。 704 705 ```js 706 let type = I18n.Unicode.getType("a"); // type = U_LOWER_CASE_LETTER 707 ``` 708 709## 获取日期中年月日的排列顺序 710 711### 接口说明 712 713| 类名 | 接口名称 | 描述 | 714| --------- | ---------------------------------------- | ------------------------------ | 715| I18NUtil | getDateOrder(locale: string): string<sup>9+</sup> | 判断日期中年月日的排列顺序。 | 716 717### 开发步骤 718 7191. 导入I18n模块。 720 721 ```js 722 import I18n from '@ohos.i18n'; 723 ``` 724 7252. 判断日期的年月日的排序顺序。 726 727 调用getDateOrder接口判断某一Locale的日期中,年月日的排列顺序。 728 接口返回一个字符串,由"y","L","d"三部分组成,分别表示年、月、日,使用中划线进行拼接。例如,"y-L-d"。 729 730 ```js 731 let order = I18n.I18NUtil.getDateOrder("zh-CN"); // order = "y-L-d",表示中文中年月日的顺序为年-月-日。 732 ```