如題:
看了下,android2.2系統有越南語的字型檔,所以支援越南語,但setting中語言列表裡沒有越南語選項,起初我在LocalePicker.java的onCreate方法的133行做了如下修改:
- mLocales = new Loc[finalSize+1];
- for (int i = 0; i < finalSize ; i++) {
- mLocales[i] = preprocess[i];
- }
- Locale temp = new Locale("vi", "VN");//vi是越南語
- mLocales[finalSize] = new Loc(toTitleCase(getDisplayName(temp)), temp);
- Arrays.sort(mLocales);
複製代碼
重新編譯後,語言列表裡有了越南語,但點擊後系統語言還是預設的英文,也就是說系統語言沒有更改成功,我再看了下/data/property/目錄下關於語言和國家的兩個屬性檔案都是修改成功了的,再繼續往下跟代碼,但沒有所獲,google了一下,搜到了一篇關於android2.1 架構解析 之語言定製的文章(http://hi.baidu.com/gigatron/blo ... c8ab20843bd0e24445d,有興趣的朋友可以看下) ,裡面說語言挑選清單在external/icu4c/stubdata/Android.mk中配置,我在這裡面添加了越南語,最後返回上一級,查看readme.txt,官方已經給出說明,改動後需要將語言配置的txt轉成dat,可是在run icu_dat_generator.py 4.2這個命令時 一直報錯,到現在還沒弄好,希望有涉及過這方面的朋友分享下經驗,謝謝!
問題已經解決,解決步驟開始寫在回複裡,現在直接寫到該位置吧:
第一種:修改設定檔
位置:build/target/product/languages_full.mk| languages_small.mk,這兩個檔案裡頭,有PRODUCT_LOCALES := en_US en_GB fr_FR it_IT es_ES es_US 這樣的片段,其實setting中語言挑選清單的資料來源頭就來源於此,既然找到了源頭,那隻要在之後加上我們想要的語言即可,比如要加越南語 只要在後面加上 “vi_VN”即可,但細心的同學開啟這兩個檔案比較的時候會發現一個問題:
裡面都有PRODUCT_LOCALES :=這樣的片段,只是languages_small.mk的語言要比前者少些,聰明,這就是答案,從命名上也可發現一個full一個small,當我們不需要更多的語言時候,那languages_small.mk裡面的語言就可以滿足,而且語言少,產生的image所佔用的空間也會相對小些,沒驗證過哈,只是根據同目錄下full.mk裡的注釋“Get a list of languages. We use the small list to save space on smaller devices.”推測的。
好了,接下來,會有一個問題就是在哪個地方去設定full還是small呢?剛提到一個full.mk的檔案,這裡面有這樣的片段:$(call inherit-product, build/target/product/languages_small.mk),後者路徑就是我們要設定的地方。好了,改好後,得整個make下,這個得花些時間,好多模組都是重新編譯。
第二種:編碼方式修改
Android裡一個listview會對應一個資料數組,那我們只需在這個數組裡按格式添加我們所需要的資料就行了,我們的目標是com.android.settings.LocalePicker.java,在該檔案133行位置做如下修改:
mLocales = new Loc[finalSize+1];
for (int i = 0; i < finalSize ; i++) {
mLocales = preprocess;
}
Locale temp = new Locale("vi", "VN");
mLocales[finalSize] =new Loc(toTitleCase(temp.getDisplayLanguage(temp)), temp);
這步做完後setting的語言列表裡就有了越南語了,但點擊越南語後,介面沒發現有什麼變化,那是因為android系統沒有對越南語寫響應的國際化資源檔,你可以自己寫應用測試