
sj-next-pc.jpeg
隨著HarmonyOS NEXT公測(cè)時(shí)間的逼近,公司即將迎來(lái)對(duì)純血鴻蒙的適配,在搭建基礎(chǔ)框架時(shí)遇到了很多的問(wèn)題,第一個(gè)就是資料太少,第二個(gè)是資料過(guò)時(shí),以下是實(shí)戰(zhàn)中沉淀的多語(yǔ)言國(guó)際化精華,實(shí)現(xiàn)起來(lái)不難,難的是不管文檔還是網(wǎng)上的資料都不全。本文包含單復(fù)數(shù)以及多參數(shù)的解決方案。最基本的國(guó)際化resources相關(guān)的在此不做多余的闡述!
相關(guān)功能如下:
- 切換App語(yǔ)言
/**
*切換語(yǔ)言
*
* @param language語(yǔ)言類型
*/
public setLanguage(language: string): void {
i18n.System.setAppPreferredLanguage(language);
}
示例
let language = I18nManager.getInstance().getLanguage()
if (language == 'en-US') {
// 切換成中文
I18nManager.getInstance().setLanguage('zh-CN')
} else {
// 切換成英文
I18nManager.getInstance().setLanguage('en-US')
}
- 獲取當(dāng)前語(yǔ)言
/**
*獲取當(dāng)前應(yīng)用語(yǔ)言
*
* @returns當(dāng)前應(yīng)用語(yǔ)言
*/
public getLanguage(): string {
return i18n.System.getAppPreferredLanguage();
}
示例
// 返回語(yǔ)言字符串zh-CN/en-US/...
let language = I18nManager.getInstance().getLanguage()
- 設(shè)置國(guó)際化文字
/*
* 設(shè)置國(guó)際化文字
* key 國(guó)際化key
* values 國(guó)際化需要替換的參數(shù),value 參數(shù)統(tǒng)一用%s
* */
export function tr(key: string, values?: string[]): Resource {
let key_one = `app.string.${key}`;
return $r(key_one, ...(values ?? []));
}
示例
// 無(wú)參數(shù)的key
tr('language')
// 有參數(shù)的key 如"this is %s"
// 多參數(shù)時(shí)使用多個(gè)%s 按順序放在數(shù)組里面即可
tr('language', ["apple"])
- 國(guó)際化單復(fù)數(shù)
/*
* 單復(fù)數(shù)
* key 單復(fù)數(shù)key
* nums 單復(fù)數(shù)數(shù)字 一行如果多個(gè)單復(fù)數(shù)需要拆分多個(gè) key value用%d
* */
export function trPlural(key: string, nums: number[]): Resource {
let key_one = `app.plural.${key}`
let resource = $r(key_one, nums[0], ...nums);
return resource;
}
json資源示例
單參數(shù)
{
"plural": [
{
"name": "eat_apple",
"value": [
{
"quantity": "one",
"value": "%d apple"
},
{
"quantity": "other",
"value": "%d apples"
}
]
}
]
}
多單參數(shù)
{
"plural": [
{
"name": "eat_apple",
"value": [
{
"quantity": "one",
"value": "%d apple %d xxxxs"
},
{
"quantity": "other",
"value": "%d apples %d xxxxs"
}
]
}
]
}
使用示例
// 單參數(shù)
trPlural('eat_apple', [2])
// 多參數(shù)
trPlural('eat_apple', [2, 3])
注意
同一字符串中如有多個(gè)需要根據(jù)單復(fù)數(shù)展示的,需要拆分字符串,目前單復(fù)數(shù)只會(huì)根據(jù)第一個(gè)參數(shù)來(lái)確定是否使用復(fù)數(shù);通俗易懂的例子:如 2筐梨子一共4個(gè)會(huì)使用復(fù)數(shù).1筐梨子一共4個(gè)只會(huì)使用單數(shù)
具體效果如下:

image.png
如對(duì)您有幫助,幫忙點(diǎn)個(gè)“贊 、關(guān)注” 讓更多的人受益~!
技術(shù)交流群可加wx“LB-9191” 備注NEXT