2016-11-03 232 views
0

我想轉換語言環境標記(請參閱圖片)以顯示名稱。例如,而不是en-us,我想顯示英語(美國)。到目前爲止,我已經設法顯示名稱和語言標籤的混合物作爲在圖片:java語言環境標記語言環境顯示名稱

device system languages screen picture

我已經嘗試了許多事情,如使用forLanguageTag,getDisplayLanguage + getDisplayCountry但沒有任何工程。

這是我的代碼片段:

public void getAvailableLocales() { 
    systemLanguages = Resources.getSystem().getAssets().getLocales(); 
    Arrays.sort(systemLanguages); 
    for (int i = 0; i < systemLanguages.length; i++) { 
     String sL = systemLanguages[i]; 
     Locale loc = new Locale(sL); 
     String locDisplayResults = loc.getDisplayLanguage(); 
     languagesList.add(new Languages(locDisplayResults)); 
     recyclerAdapter.notifyDataSetChanged(); 
    } 
} 

的想法是顯示給定設備上可用的所有語言。 任何幫助將感激地收到。

編輯:測試顯示Resources.getSystem()。getAssets()。getLocales()確實爲提供了可用於每個給定設備的語言。但是,getDisplayLanguage僅適用於兩個字母標記,而不適用於兩個字母 - 短劃線 - 兩個字母(例如ar-eg)。還有什麼想法?

+0

所以答案爲:。除了使用新的語言環境(SL),請使用Locale.forLanguageTag(SL)(http://stackoverflow.com/questions/40427876/convert- da-dk-to-danish-denmark-etc)它完美運作。 –

回答

0

嘗試

Locale[] availableLocales = Locale.getAvailableLocales(); 

for(Locale locale : availableLocales){ 
    Log.d("Locale", locale.getDisplayName()); 
} 
+0

謝謝,但這給了我所有支持Java 8的區域設置,而不是我的系統區域設置。 –

+0

我認爲你調用getLocales()的問題是他的API級別,它是24.所以也許你的設備有一個較低的API。 –

+0

在這種情況下,是否有另一種獲取設備上可用語言的方法?因爲我希望我的應用程序可供更多的用戶使用,而不僅僅是牛軋糖... –