天天看點

Android 擷取系統語言(相容7.0)

擷取系統目前語言是一個比較常用的功能,在 Android 7.0 系統上舊函數擷取到的目前系統語言并不正确,或者說從 Android 7.0 起,Android 系統語言的規則變了。

下面是未适配 Android 7.0 的代碼:

由于僅僅根據 getLanguage() 無法全面的了解目前的系統語言資訊,比如簡體中文和繁體中文的 Language 都是 zh,是以還需要 getCountry() 方法擷取地區資訊,我們就能得到 zh-CN 和 zh-HK/zh-TW 。

總結一下就是:

但是,在 Android 7.0 上:getResources().getConfiguration().locale 被标記為 deprecated 了,是以初步适配後是:

從 Android 7.0 起使用的getResources().getConfiguration().getLocales() 傳回的是一個 LocaleList 對象,它包含 >=1 個 Locale,内容項可由使用者增删,順序可由使用者調整。但是,此接口傳回的語言順序和使用者定義的順序不一定一緻!

測試語言順序

測試核心代碼:

第一次測試

測試手機:Nubia Z9 mini,Android 7.1,Mokee Rom

手機系統語言順序:hi-IN,zh-CN,en-US,zh-HK

App 國際化:values,values-zh (values 裡的 string 為英文,values-zh 裡的 string 為中文)

結果是:

并且 App 目前顯示的文字是中文。

第二次測試

手機系統語言順序:hi-IN,en-US,zh-CN,zh-HK

App 國際化:values,values-zh

并且 App 目前顯示的文字是英文。

從 Android 7.0 開始,系統語言支援多個,可手動排序,系統根據 App 本身支援的語言和手機出廠設定的語言等因素來調整 App 本身的預設語言。

要擷取系統為 App 調整後的預設語言:

要擷取系統真實首選語言:

繼續閱讀