sj-next-pc.jpeg
隨著HarmonyOS NEXT公測時間的逼近,公司即將迎來對純血鴻蒙的適配,在搭建基礎(chǔ)框架時遇到了很多的問題,第一個就是資料太少,第二個是資料過時,以下是實戰(zhàn)中沉淀的多語言國際化精華,實現(xiàn)起來不難,難的是不管文檔還是網(wǎng)上的資料都不全。本文包含單復(fù)數(shù)以及多參數(shù)的解決方案。最基本的國際化resources相關(guān)的在此不做多余的闡述!
相關(guān)功能如下:
- 切換App語言
/**
*切換語言
*
* @param language語言類型
*/
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)前語言
/**
*獲取當(dāng)前應(yīng)用語言
*
* @returns當(dāng)前應(yīng)用語言
*/
public getLanguage(): string {
return i18n.System.getAppPreferredLanguage();
}
示例
// 返回語言字符串zh-CN/en-US/...
let language = I18nManager.getInstance().getLanguage()
- 設(shè)置國際化文字
/*
* 設(shè)置國際化文字
* key 國際化key
* values 國際化需要替換的參數(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 ?? []));
}
示例
// 無參數(shù)的key
tr('language')
// 有參數(shù)的key 如"this is %s"
// 多參數(shù)時使用多個%s 按順序放在數(shù)組里面即可
tr('language', ["apple"])
- 國際化單復(fù)數(shù)
/*
* 單復(fù)數(shù)
* key 單復(fù)數(shù)key
* nums 單復(fù)數(shù)數(shù)字 一行如果多個單復(fù)數(shù)需要拆分多個 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])
注意
同一字符串中如有多個需要根據(jù)單復(fù)數(shù)展示的,需要拆分字符串,目前單復(fù)數(shù)只會根據(jù)第一個參數(shù)來確定是否使用復(fù)數(shù);通俗易懂的例子:如 2筐梨子一共4個會使用復(fù)數(shù).1筐梨子一共4個只會使用單數(shù)
具體效果如下:
image.png
如對您有幫助,幫忙點個“贊 、關(guān)注” 讓更多的人受益~!
技術(shù)交流群可加wx“LB-9191” 備注NEXT