android多國語言
A. 安卓手機如何添加多國語言
添加方法是有的,網上可以找到很多。不過很麻煩,以下以添加波斯語為例給你簡單的說下:
1、在sdkDemo.mk 中添加語言和國家的國際化的縮寫代碼,如伊朗:IR表示,波斯語用fa表示,這是國際化的標准,不可以隨便寫的。如果不知道國家與地區的縮寫,可以去網上找找。
PRODUCT_LOCALES:= fa_IR en_US zh_CN en_GB fr_FR it_IT es_ES ……..
sdkDemo.mk的路徑為:gingerbread\device\rockchip\sdkDemo\sdkDemo.mk.
2、在framework/base/data/font目錄下添加波斯語的字型檔,如DroidSansArabic.ttf
3、字型檔加完後,就要去調用字型檔了,調用字型檔的文件是在external/skia/src/ports/SKFontHost-android.app下,
static constFontInitRec gSystemFonts[] = {
{ "DroidSans.ttf", gSansNames },
………
{
"DroidSansArabic.ttf",
gFBNames },
4、字型檔准備好了,還有一些makefile需要修改了。在external/icu4c/studata/ Android.mk下:
config := $(word1, \
$(if $(findstringar,$(PRODUCT_LOCALES)),large) \
$(if
$(findstring fa,$(PRODUCT_LOCALES)),large) \
5、 在frameworks/base/core/res/res/下新增加一個values-fa-rIR的文件夾,並新建一個strings.xml文件。
6、上面五步加完後,在settingsàLanguage&keyboardàSelect language列表下就會出現波斯語這個選項了,但是選了波斯語後,並沒有出現波斯語文字。這時就需要在相應的APP下的res/下新建values-fa-rIR的文件夾,並翻譯strings.xml文件即可。如主app的strings.xml路徑為:gingerbread\packages\apps\Desktop2D_mbx_new\res\values-fa-rIR\strings.xml
最後,以上所有內容都加好後,一定要記得:
Make clean
Make prebuild
Make
建議你還是刷新ROM來解決吧!
B. Android國際化之多語言(配置及應用內設置)✈️
Android系統通過判斷當前系統的Local配置,來使用對應的strings.xml文件
values-->strings.xml 默認語言(簡體中文)
values-zh-rHK-->strings.xml 繁體中文
values-en-->strings.xml 英語
在Android系統中,系統的配置大都通過 Configuration 來管理,包括strings等等。
onCreate() 中注冊
onDestroy() 中取消注冊
setLanguage() 方法
通過上面的設置,可以實現不重啟APP修改語言的效果
以上只是對Android多語言設置的一些小小的總結,可能有理解不周的情況,歡迎給我留言指出😄
C. Android國際化多語言切換
關於App國際化,之前有講到國際化資源、字元換、布局相關,想要了解的猛戳 用力抱一下APP國際化 。借著本次重構多語言想跟大家聊一下多語言切換,多語言切換對於一款國際化App來講是重中之重,並非難事,但是若要做好也是一件不容易的事情。
當我們做了系統的配置更改,比如說切換了系統導航或者說更改了深色模鄭山式,那麼我們一般的處理是也是要對Application作出處理。
如果項目中有用到ApplicationContext去getString(@StringRes int id)實現載入的提示語,那麼如果只是單純的重啟界面則無法讓當前的提示語跟隨當前切換的語言,所以我們要麼重啟整個應用,要麼對ApplicationContext中的Local也作出相應的更新方可,這里有一點問題,雖然Android N之後updateConfiguration是過時方法,官方給出使用createConfigurationContext代替,但是更新ApplicationContext的Local發現無效使用老版本updateConfiguration正常。
如果你發現你的應用廣播通知欄適配無效,那就是context中的Local在切換語言是並未及時更新Local,這里調試一下便知,如果是Applicaiton注冊的廣播,那麼喊高中多半情況下是沒有更新ApplicationContext的Local所導致的。
多語言適配基本步驟大概就是如此了,下面看一下適配的細節問題。
[圖片上傳失敗...(image-b42d06-1640685147639)]
還有一點Android N之後,手機系統的語言配置選項已經不是單選了,改為一個列表了,具體可以參考手機設置中的語言和輸入法,所以 setLocal(@Nullable Locale loc) 方法建議不要再使用了,我相信很多人還在用,正確念謹的用法應該是 setLocals(@Nullable LocaleList locales) ,需要傳遞一個集合。
當你的應用使用的是androidx.appcompat:appcompat:1.2.0及以上時,BaseActivity中需要實現下面方法。
這套方案目前不在推薦,直接去替換attatchBaseContext()中的context則可,經過測試是完全正常的。
以下則是多語言操作的工具類,現在提供出來,需要的朋友可以自行進行改造。
D. Android:應用多語言切換,國際化實現
生成多種語言的string.xml,裡面放置對應的語言,修改配置(Configuration),重啟之後就會載入對應語言的string.xml。
1:在res目錄下,生成對應的語言包,比如英語:
在res目錄下生成了可看到生成了:
<string name="hello">你好</string>
英語:
<string name="hello">hello</string>
之後就可以使用getResource.getString(R.string.hello),這個字元串會載入相對應的配置的語言。
3:修改語言配置
修改語言配置後,需要重新啟動進程,並且殺死進程。
1:有些手機是可以在設置里直接切換語言的,這個也就是Configuration改變。用戶重新設置系統語言導致應用的語言也會重新設置。Configuration改變,如果在Manifest中不設置android:configChanges忽略掉配置改變,Activity會重新創建,那麼我們就可以在Activity的onCreate中,重新修改語言配置。
2:切換語言後,退出應用,重新進來,你會發現又是系統設置的語言。所以需要在Application開啟時,需要再次切換語言配置。
E. Android的國際化語言適配(系統語言適配+APP內部適配)
Android國際化語言適配分為兩種
1.更改手機系統語言後,APP的語言也會跟著變化
2.只改變自己APP的語言,不受手機系統語言的影響,不影響其他APP的語言,可以參考微信的切換語言的效果。
只需要創建不同語言的values即可
具體操作參考 簡單的Android客戶端國際化(語言適配)方案
操作的時候要注意: 當選擇所要切換的語言後,則進行修改Config以及重啟APP,一定要將選擇的語言保存到SP中,且在activity中的oncreate中將SP中存儲的語言取出來重新設置Config,否則當重啟APP後,還是會跟系統語言一樣。
具體操作參考 Android應脊敬明用稿轎程序內部切換語櫻告言及自定義語言
F. Android中的多國語言是怎麼實現的
雖然Android 從 2.3 開始已經支持50種以上的語言,但是不是每種語言都有字體可以顯示。遇到一個新需求,
有客戶要求對 hindi 語言的支持。於是上 網找了一些資料,發現網上介紹的大部分是如何替換默認字體,就
是替換./frameworks/base/data/fonts /DroidSansFallback.ttf,但是替換完之後,中文就無法正常顯示。其實
只要有下面幾個步驟,就可以實現新曾加一種語言的顯示支持:
1. 需要有可以顯示 hindi 語言的字體,我在網上下載了一個:DroidHindi.ttf
2. 需要修改的地方主要有
1) 將下載的字體文件拷貝到:./frameworks/base/data/fonts/
2) 修改./frameworks/base/data/fonts/Android.mk,將 DroidHindi.ttf 添加到 _from:
3) Hindi 的語言代碼是 hi_IN,修改./device/qcom/common/common.mk,將 hindi 的語言代碼加進去,
這樣在你的設置->語言和鍵盤->選擇語言裡面就可以看見 hindi 語言了:
4) 修改./external/skia/src/ports/SkFontHost_android.cpp,將 DroidHindi.ttf 加進去。網上 介紹的很多
方法都沒有提到這一步,如果沒有這一步的話,添加的語言是不生效的,顯示的是亂碼,因為 android 無法
找到 hindi 語言可以顯示的字體, 還是會選擇默認字體去顯示。修改的地方為:
5) 去./build/target/proct/full.mk 看看系統選擇的是哪個語言列表,我的是:
$(call inherit-proct, build/target/proct/languages_small.mk)
那我就去修改./build/target/proct/languages_small.mk,若這里顯示的是 languages_full.mk,那麼
就修改./build/target/proct/languages_full.mk 文件,修改如下:
PRODUCT_LOCALES := en_US en_GB fr_FR hi_IN it_IT de_DE es_ES
6)在 external/icu4c/studata 下的 Android.mk 下添加
$(if $(findingstringhi,$(PRODUCT_LOCALS)),large)\
3. 剩下的就是重新編譯一下,然後 flash 到手機或模擬器上就可以了。
G. Android-添加新的語言支持(比如繁體)
這幾天突然要發一個中國台灣版本,做法比較硬:復制一個工程,改包名,改圖標,改api介面。語言全部都是繁體就行:
Android studio添加新語言資源文件(res/values/....)如下:
然後回車即可:
把對應的字元串翻譯成繁體就行。至於翻譯,有一些工具可以借鑒。同時網上也有很多多語言切換的方式,就是一個工程,一個app進行內部切換多語言支持的方式(像微信就是。不過微信繁體有些不一定都支持了...)。具體看情況啦。。。
因為我們是整個app就是中國台灣台北版本,所以就都是繁體,不管系統是簡體還是繁體還是別的,就是繁體!!!
簡單記錄下。好多東西沒怎麼關注或者使用,至於是否要深入,可能要看情況....
參考o: android--實現多語言支持 - snow_flower - 博客園