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"