1. 国际化
鸿蒙应用开发的国际化主要是指让应用支持多种语言和适应不同地区的用户习惯。这包括对不同语言环境的支持,如文本和布局的本地化设置。要实现国际化,开发者需要准备应用程序支持的每种语言环境的一些资源,比如翻译后的文本、特定区域的图像等。
在鸿蒙OS中,国际化的实现主要依赖于两套API:Intl
和 I18n
。
-
Intl模块:这个模块提供符合ECMA 402标准的基础国际化功能,如日期时间格式化、数字格式化等。这些功能可以帮助应用根据用户的语言和地区设置来显示相应的格式。
-
I18n模块:这个模块提供鸿蒙OS特有的国际化功能,以及对ECMA 402标准的补充,例如区域管理、电话号码处理等。这些功能与Intl模块结合使用,可以提供更完整的国际化支持能力。
在具体操作上,开发者需要在应用的资源目录下为每种语言创建相应的文件夹和资源文件。例如,对于中文,可以在resources
目录下创建zh
文件夹,并在该文件夹中添加对应的类别文件,如string.json
。然后,在代码中通过特定的方法来引用这些资源,以实现多语言支持。
例如,在ArkUI开发框架中,可以通过在index.ets
文件中使用$r("app.string.calculator")
的方式来引用多语言资源。在i18n
和intl
模块中,可以使用如i18n.getSystemLanguage()
来获取设备系统语言,或者使用intl.DateTimeFormat
来进行日期时间的格式化。
总的来说,鸿蒙应用开发的国际化是一个涉及多方面技术和步骤的过程,包括资源文件的配置、API的使用,以及代码中对这些资源的正确引用。通过这些步骤,开发者可以为不同语言环境的用户提供更好的用户体验。
1.1. @ohos.i18n (国际化-I18n)
本模块提供系统相关的或者增强的国际化能力,包括区域管理、电话号码处理、日历等,相关接口为ECMA 402标准中未定义的补充接口。Intl模块提供了ECMA 402标准定义的基础国际化接口,与本模块共同使用可提供完整地国际化支持能力。
导入模块
import I18n from '@ohos.i18n';
System9+
getDisplayCountry9+
static getDisplayCountry(country: string, locale: string, sentenceCase?: boolean): string
获取指定国家的本地化显示文本。
系统能力:SystemCapability.Global.I18n
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
country | string | 是 | 指定国家。 |
locale | string | 是 | 显示指定国家的区域ID。 |
sentenceCase | boolean | 否 | 本地化显示文本是否要首字母大写。默认值:true。 |
示例:
import { BusinessError } from '@ohos.base';try {let displayCountry: string = I18n.System.getDisplayCountry("zh-CN", "en-GB"); // displayCountry = "China"
} catch (error) {let err: BusinessError = error as BusinessError;console.error(`call System.getDisplayCountry failed, error code: ${err.code}, message: ${err.message}.`);
}
1.2. @ohos.intl (国际化-Intl)
本模块提供基础的应用国际化能力,包括时间日期格式化、数字格式化、排序等,相关接口在ECMA 402标准中定义。
I18N模块提供其他非ECMA 402定义的国际化接口,与本模块共同使用可提供完整地国际化支持能力。
说明
-
本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
-
Intl模块包含国际化能力基础接口(在ECMA 402中定义),包括时间日期格式化、数字格式化、排序等,国际化增强能力请参考I18N模块。
-
从API version 11开始,本模块部分接口支持在ArkTS卡片中使用。
导入模块
import Intl from '@ohos.intl';
Locale
属性
卡片能力:从API version 11开始,该接口支持在ArkTS卡片中使用。
系统能力:SystemCapability.Global.I18n
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
language | string | 是 | 与区域设置相关的语言,如:zh。 |
script | string | 是 | 语言的书写方式,如:Hans。 |
region | string | 是 | 与区域设置相关的地区,如:CN。 |
baseName | string | 是 | Locale的基本核心信息(由语言脚本与地区组成),如:zh-Hans-CN。 |
caseFirst | string | 是 | 区域的整理规则是否考虑大小写,取值包括:"upper", "lower", "false"。 |
calendar | string | 是 | 区域的日历信息,取值包括:"buddhist", "chinese", "coptic","dangi", "ethioaa", "ethiopic", "gregory", "hebrew", "indian", "islamic", "islamic-umalqura", "islamic-tbla", "islamic-civil", "islamic-rgsa", "iso8601", "japanese", "persian", "roc", "islamicc"。 |
collation | string | 是 | 区域的排序规则,取值包括:"big5han", "compat", "dict", "direct", "ducet", "eor", "gb2312", "phonebk", "phonetic", "pinyin", "reformed", "searchjl", "stroke", "trad", "unihan", "zhuyin"。 |
hourCycle | string | 是 | 区域的时制信息,取值包括:"h12", "h23", "h11", "h24"。 |
numberingSystem | string | 是 | 区域使用的数字系统,取值包括:"adlm", "ahom", "arab", "arabext", "bali", "beng", "bhks", "brah", "cakm", "cham", "deva", "diak", "fullwide", "gong", "gonm", "gujr", "guru", "hanidec", "hmng", "hmnp", "java", "kali", "khmr", "knda", "lana", "lanatham", "laoo", "latn", "lepc", "limb", "mathbold", "mathdbl", "mathmono", "mathsanb", "mathsans", "mlym", "modi", "mong", "mroo", "mtei", "mymr", "mymrshan", "mymrtlng", "newa", "nkoo", "olck", "orya", "osma", "rohg", "saur", "segment", "shrd", "sind", "sinh", "sora", "sund", "takr", "talu", "tamldec", "telu", "thai", "tibt", "tirh", "vaii", "wara", "wcho"。 |
numeric | boolean | 是 | 是否对数字字符具有特殊的排序规则处理。默认值:false。 |
constructor8+
constructor()
创建区域对象
示例:
// 默认构造函数使用系统当前locale创建Locale对象
let locale = new Intl.Locale();
// 返回系统当前locale
let localeID = locale.toString();
constructor
constructor(locale: string, options?: LocaleOptions)
创建区域对象
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
locale | string | 是 | 区域信息的字符串,由语言、脚本、国家或地区组成。 |
options | LocaleOptions | 否 | 用于创建区域对象的选项。 |
示例:
// 创建 "zh-CN" Locale对象
let locale = new Intl.Locale("zh-CN");
let localeID = locale.toString(); // localeID = "zh-CN"