1# 区域ID与文化习惯划分 2 3 4## 功能介绍 5 6广义地讲,区域ID是指通过数字、字母、符号或其组合,作为唯一标识识别特定地理区域。 7 8在国际化中,区域ID是对用户群体的抽象,包括用户语言、脚本(使用的文字系统,如中文可用简体字或繁体字)、所在国家或地区以及其他一些文化习惯(如历法、数字系统)等。区域ID是应用实现国际化能力的基础,开发过程中需通过区域ID对象控制和实现国际化行为。 9 10 11## 实现原理 12 13区域ID由语言、脚本、国家地区和扩展参数四部分组成。其中,语言是必填内容,详细说明可参考表1;支持的扩展参数参考表2;不同语言对应的数字系统参考表3,表中未列出的语言均使用阿拉伯数字系统。 14 15**表1** 区域ID组成 16 17| 组成成分 | 说明 | 18| -------- | -------- | 19| 语言 | 表示用户使用的语言,由2~3个小写英文字母组成。例如,中文使用“zh”表示。<br/>更多语言代码列表请参考ISO-639标准。 | 20| 脚本 | 表示用户使用的字符集,由首字母大写的4个英文字母组成。例如,简体使用“Hans”表示。<br/>更多脚本代码列表请参考ISO-15924标准。 | 21| 国家地区 | 表示用户所在的国家或地区,使用2个大写英文字母表示。例如,中国使用“CN”表示。<br/>更多的国家地区代码列表请参考ISO-3166标准。 | 22| 扩展参数 | 表示用户其他的特征,包括历法、字符串排序、数字系统、小时周期,由小写字母u开头,每一个扩展参数由key和value组成,使用中划线拼接。例如,农历拼音排序使用“u-ca-chinese-co-pinyin”。<br/>支持的扩展参数请参考表2,更多的扩展参数取值请参考BCP 47扩展。 | 23 24**表2** 扩展参数 25 26| 参数 | 说明 | 27| -------- | -------- | 28| ca | 表示用户使用的历法系统。例如,农历使用“chinese”表示。 | 29| co | 表示用户使用的字符串排序规则,包括。例如,按照拼音排序使用“pinyin”表示。 | 30| hc | 表示用户使用的小时周期。例如,0~11小时周期使用“h11”表示。 | 31| nu | 表示用户使用的数字系统。例如,阿拉伯数字系统使用“arab”表示。具体请参考表3。 | 32| kn | 表示用户排序时对数字的处理方式。<br/>- “true”表示将数字作为整体进行数值比较。<br/>- “false”表示将数字作为普通字符比较。 | 33| kf | 表示用户排序时是否考虑字符的大小写。<br/>- “upper”表示将大写字母排序在前。<br/>- “lower”表示将小写字母排序在前。<br/>- “false”表示使用当前区域的默认值。 | 34 35**表3** 语言和本地数字系统 36 37| 语言 | 本地数字系统 | 38| -------- | -------- | 39| ar | arab | 40| as | beng | 41| bn | beng | 42| fa | arabext | 43| mr | deva | 44| my | mymr | 45| ne | deva | 46| ur | latn | 47| 其他语言 | arab | 48 49 50## 开发步骤 51 52以时间日期格式化为例,[DateTimeFormat](../reference/apis-localization-kit/js-apis-intl.md#datetimeformat)类的详细说明请参考API文档。 53 541. 导入模块。 55 ```ts 56 import { intl } from '@kit.LocalizationKit'; 57 ``` 58 592. 创建区域对象,下面介绍三种方法: 60 - 按照实现原理中给出的格式,通过区域ID构造区域对象。 61 - 在LocaleOptions中配置区域特性,然后使用区域ID字符串和LocaleOptions创建区域对象。通过LocaleOptions对象设置的属性会自动覆盖字符串中对应的属性值。 62 - 使用默认的区域对象构造函数创建区域对象。通过默认区域对象构造函数创建的区域对象表示当前系统区域。 63 64 ```ts 65 let zhLocale: intl.Locale = new intl.Locale('zh-Hans-CN-u-nu-latn'); 66 67 // 方法二:通过区域ID字符串和LocaleOptions对象创建区域对象 68 let enLocale: intl.Locale = new intl.Locale('en', { numberingSystem: 'latn' }); 69 70 // 方法三:通过默认Locale函数创建系统区域对象 71 let systemLocale: intl.Locale = new intl.Locale(); 72 ``` 73 743. 格式化时间日期。 75 创建区域对象后,将其传入时间日期格式类的构造函数,创建指定区域ID的时间日期格式化类并实现格式化。与步骤2对应,步骤3呈现了三种实现时间日期格式化的方法。 76 77 ```ts 78 let date: Date = new Date(2023, 9, 15); 79 80 // 方法一 81 let zhDateTimeFmt: intl.DateTimeFormat = new intl.DateTimeFormat(zhLocale.toString()); 82 let formattedResult: string = zhDateTimeFmt.format(date); // formattedResult = '2023/10/15' 83 84 // 方法二 85 let enDateTimeFmt: intl.DateTimeFormat = new intl.DateTimeFormat(enLocale.toString()); 86 formattedResult = enDateTimeFmt.format(date); // formattedResult = '10/15/23' 87 88 // 方法三 89 let systemDateTimeFmt: intl.DateTimeFormat = new intl.DateTimeFormat(systemLocale.toString()); 90 formattedResult = systemDateTimeFmt.format(date); // formattedResult = '2023/10/15' (具体显示效果依赖于当前系统环境) 91 ``` 92