2016-11-03 46 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

在这种情况下,是否有另一种获取设备上可用语言的方法?因为我希望我的应用程序可供更多的用户使用,而不仅仅是牛轧糖... –