國(guó)際化
如今越來(lái)的越多的應(yīng)用都走向了海外,應(yīng)用走向海外需要支持不同國(guó)家的語(yǔ)言,這就意味著應(yīng)用資源文件需要支持不同語(yǔ)言環(huán)境下的顯示。本節(jié)就介紹一下設(shè)備語(yǔ)言環(huán)境變更后,如何讓應(yīng)用支持多語(yǔ)言。
應(yīng)用支持多語(yǔ)言
ArkUI開發(fā)框架對(duì)多語(yǔ)言的支持比較友好,只需要在 resources
目錄下創(chuàng)建對(duì)應(yīng)國(guó)家的文件夾,名稱對(duì)國(guó)家簡(jiǎn)碼,例如中國(guó)為 zh
,則在 resources
下創(chuàng)建 zh
文件夾,然后在 zh
文件下創(chuàng)建對(duì)應(yīng)的類別文件,筆者以文本資源支持多語(yǔ)言為例。
添加多語(yǔ)言數(shù)據(jù)
- 在resources目錄下創(chuàng)建
zh
/element
文件夾目錄后,添加 string.json 文件:
筆者分別在zh
目錄下的 string.json 和base
目錄下的 string.json 中添加了一個(gè) json 數(shù)據(jù),name
都是 calculator , value 一個(gè)是英文一個(gè)中文。
使用多語(yǔ)言數(shù)據(jù)
|
使用 resources
目錄下的資源,ArkUI開發(fā)框架給我們提供了快捷方法: () ,比如要訪問 string.json 中的資源,可以簡(jiǎn)寫 ('app.string.name') ,筆者在第 3 節(jié)有介紹 [$()] 的使用,讀者請(qǐng)自行查看。
- 在
index.ets
里使用添加的多語(yǔ)言,代碼如下:@Entry @Component struct Index { build() { Column({space: 10}) { Text('多語(yǔ)言測(cè)試:') .fontSize(22) Text($r("app.string.calculator")) // 使用多語(yǔ)言 .fontSize(22) } .padding(10) .width('100%') .height('100%') } }
i18n和intl簡(jiǎn)介
讓APP支持多語(yǔ)言可以采取資源本地化的操作,當(dāng)設(shè)備語(yǔ)言環(huán)境變更后系統(tǒng)會(huì)自動(dòng)讀取對(duì)應(yīng)的資源,當(dāng)需要手動(dòng)獲取語(yǔ)言環(huán)境相關(guān)信息時(shí),可以使用 @ohos.i18n
和 @ohos.intl
模塊提供的相關(guān) API 實(shí)現(xiàn)。
i18n模塊
declare namespace i18n { // 獲取設(shè)備系統(tǒng)語(yǔ)言 export function getSystemLanguage(): string; // 設(shè)置設(shè)備系統(tǒng)語(yǔ)言 export function setSystemLanguage(language: string): boolean; // 獲取設(shè)備系統(tǒng)地區(qū) export function getSystemRegion(): string; // 獲取時(shí)區(qū)ID對(duì)應(yīng)的時(shí)區(qū)對(duì)象 export function getTimeZone(zoneID?: string): TimeZone; // 省略部分API } export default i18n;
i18n
主要提供的是獲取系統(tǒng)信息,比如當(dāng)前系統(tǒng)語(yǔ)言,系統(tǒng)區(qū)域等,預(yù)了解更多信息讀者可參考官方文檔或者源碼,aboutToAppear() { let language = i18n.getSystemLanguage(); console.log(language);// 輸出:zh-Hans-CN }
intl模塊
declare namespace intl { // 區(qū)域初始化選項(xiàng)。 export interface LocaleOptions { } // 區(qū)域信息設(shè)置對(duì)象 export class Locale { } // 時(shí)間日期格式化選項(xiàng)。 export interface DateTimeOptions { } // 日期格式化對(duì)象 export class DateTimeFormat { } // 數(shù)字格式化選項(xiàng) export interface NumberOptions { } // 數(shù)字格式化對(duì)象 export class NumberFormat { } // 省略相關(guān) API } export default intl;
@ohos.intl
模塊提供了信息在不同區(qū)域的差異化能力,比如日期顯示,在不同的國(guó)家顯示格式是不一樣的,可以采用DateTimeFormat
獲取不同的顯示方式:aboutToAppear() { let date = new Date(2022, 5, 1, 17, 45, 30); // 創(chuàng)建日期 var datefmt= new intl.DateTimeFormat("en-GB"); // 格式化對(duì)象 console.log(datefmt.format(date)); // 輸出01/06/2022 }
審核編輯 黃宇
-
鴻蒙
+關(guān)注
關(guān)注
57文章
2358瀏覽量
42876 -
HarmonyOS
+關(guān)注
關(guān)注
79文章
1977瀏覽量
30234 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3723瀏覽量
16340
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論