android多語(yǔ)言實(shí)現(xiàn)必須是將strings.xml放在不同的文件夾目錄下,由安卓系統(tǒng)自動(dòng)去加載文字資源。
目前創(chuàng)新互聯(lián)公司已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、順德網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
1.Android
中要實(shí)現(xiàn)國(guó)際化比較簡(jiǎn)單,字符串國(guó)際化:只要在
res
文件夾下新建對(duì)應(yīng)語(yǔ)言的
values
文件夾就好了。
例如:
英語(yǔ)環(huán)境下的,文件夾命名為:values-en
美國(guó)英文環(huán)境:values-en-rUS
中文環(huán)境為:values-zh
大陸地區(qū)中文環(huán)境: values-zh-cn
2.eclipse
下新建
Android
項(xiàng)目時(shí),會(huì)在
res
目錄下自動(dòng)創(chuàng)建一個(gè)默認(rèn)語(yǔ)言環(huán)境的文件夾
:
values
。
3.當(dāng)某一個(gè)資源沒(méi)有在語(yǔ)言環(huán)境的對(duì)應(yīng)的資源集合中找到時(shí),就會(huì)使用
values
下的資源。 若某一個(gè)語(yǔ)言環(huán)境沒(méi)有在項(xiàng)目中定義語(yǔ)言環(huán)境,那么也會(huì)使用
values
下的資源。
這篇文章只針對(duì)后臺(tái)返回的數(shù)據(jù), 本地?cái)?shù)據(jù)除外
我們發(fā)送網(wǎng)絡(luò)請(qǐng)求的時(shí)候, 帶一個(gè)語(yǔ)言類型參數(shù), 例如 map.put("language", "ZH"), 我們需要什么語(yǔ)言就傳什么語(yǔ)言類型, 正常接收返回值就可以了.
這樣做的好處:
①. 對(duì)于android端, 新增、修改、刪除語(yǔ)言 時(shí)也只需改變一個(gè)字段的值即可, 這個(gè)字段可以使用接口來(lái)控制值, App完全可以不用任何修改, 靈活性較高.
②. 對(duì)于整個(gè)項(xiàng)目而言: 前端("android", "IOS", "小程序", "公眾號(hào)") 等多個(gè)端, 完全無(wú)需做任何判斷, 只需后臺(tái)處理好即可, 總體可以節(jié)約不少時(shí)間.
后臺(tái)把所有的語(yǔ)言數(shù)據(jù)一起返回 , 可能出現(xiàn)如下格式:
同行的人看到了肯定會(huì)說(shuō): 叫后臺(tái)改成第一種方式啊.
如果是項(xiàng)目剛剛開始開發(fā), 可能比較好改.
我碰到的情況是: 一開始項(xiàng)目沒(méi)有做android端, 后臺(tái)和web端已經(jīng)上線了不知道多少個(gè)版本了, 反正就是后臺(tái)架構(gòu)已經(jīng)確定了, 這個(gè)時(shí)候改成本會(huì)比較大. 只能自己處理了.
這個(gè)時(shí)候處理方式:
① 如果按照原來(lái)的方式: GsonFormat.如下圖:
這樣是可以解析出來(lái)的, 看起來(lái)項(xiàng)目也能正常運(yùn)行, 但是每個(gè)接口都這么做的話, 維護(hù)起來(lái)難度太大了, 項(xiàng)目越大越難維護(hù) , 例如:新增一種語(yǔ)言, 竟然要全局大改. 有100個(gè)接口就要改100個(gè)實(shí)體類, 等等.
②. 特殊處理
思考: 有什么辦法可以和第一種方式一樣, 修改一個(gè)參數(shù)就可以全局改變語(yǔ)言?
觀察: 共同點(diǎn): 多語(yǔ)言的實(shí)體類里面都會(huì)有 變量名為"ZH" "EN" 的對(duì)象 , 對(duì)象不確定類型, 這個(gè)時(shí)候想到用泛型. 于是有下面的寫法:
我們的實(shí)體類都有這個(gè)特性, 所以直接繼承即可.
解析
解析數(shù)據(jù)類型2
特殊處理步驟:
①. 封裝好多語(yǔ)言基類LanguageBeanT
②. 多語(yǔ)言實(shí)體類繼承LanguageBeanT
③. 獲取多語(yǔ)言實(shí)體數(shù)據(jù)時(shí), 要用bean.get()獲取對(duì)象.
好處
①. 增刪改語(yǔ)言, 只需在基類LanguageBeanT修改即可, 其它地方完全不需要修改.
②. 切換語(yǔ)言時(shí): 只需賦值給languageType即可.
③.可切換回方式1 (網(wǎng)絡(luò)請(qǐng)求的時(shí)候, 帶一個(gè)語(yǔ)言類型參數(shù)) , 只需languageType = "" 即可.
封裝好以后, 即使后臺(tái)要重構(gòu), 使用方式1處理多語(yǔ)言, 我們也只需修改一個(gè)字段即可.
Android系統(tǒng)通過(guò)判斷當(dāng)前系統(tǒng)的Local配置,來(lái)使用對(duì)應(yīng)的strings.xml文件
values--strings.xml 默認(rèn)語(yǔ)言(簡(jiǎn)體中文)
values-zh-rHK--strings.xml 繁體中文
values-en--strings.xml 英語(yǔ)
在Android系統(tǒng)中,系統(tǒng)的配置大都通過(guò) Configuration 來(lái)管理,包括strings等等。
onCreate() 中注冊(cè)
onDestroy() 中取消注冊(cè)
setLanguage() 方法
通過(guò)上面的設(shè)置,可以實(shí)現(xiàn)不重啟APP修改語(yǔ)言的效果
以上只是對(duì)Android多語(yǔ)言設(shè)置的一些小小的總結(jié),可能有理解不周的情況,歡迎給我留言指出????