2016-11-03 4 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は、2文字のアルファベットではなく、2文字のアルファベット(アルファベットなど)でしか動作しません。これ以上のアイデアは?

+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

その場合、デバイスで使用できる言語を取得する別の方法はありますか?私のアプリがノーガットだけでなく、より多くのユーザーに利用できるようにしたいからです... –