2014-09-05 78 views
3

我想列出可用的Locales,如下所示。区域语言区域设置可用但未显示在日志中

private List<String> getInstalledLanguages() { 
    Locale[] listLocales = Locale.getAvailableLocales(); 
    List<String> listInstalledLanguages = new ArrayList<String>(); 
    for(int i=0; i<listLocales.length; i++) { 
     String language = listLocales[i].getDisplayLanguage(); 
     Log.i(TAG, "Language : "+language); 
     if (language.equals("English") && !listInstalledLanguages.contains("English")) 
      listInstalledLanguages.add(language); 

     if (language.equals("Hindi") && !listInstalledLanguages.contains("Hindi")) 
      listInstalledLanguages.add(language); 

     if (language.equals("Kannada") && !listInstalledLanguages.contains("Kannada")) 
      listInstalledLanguages.add(language); 
    } 

    return listInstalledLanguages; 
} 

Samsung Tab3,我可以看到HindiKannada语言在语言设置中列出的,但是当我运行上面的代码,我没有看到他们在与其他语言(在日志)列表。

HindiKannada语言在各自语言的语言设置中列出。我的意思是,北印度语列为हिन्दी,卡纳达语列为ಕನ್ನಡ

即使我试图让它们各自的区域名称(हिन्दी和ಕನ್ನಡ,因为它是)如下,但不能成功。

if (language.equals("हिन्दी")) 
     listInstalledLanguages.add(language); 

任何人都可以请我帮忙吗?

TIA。

+0

当您打印SOP(语言),您能得到什么?你有空间吗? – 2014-09-08 12:29:27

+0

nope我什么也没得到。除了那两种语言之外,我得到了其他所有人。 – Braj 2014-09-08 12:32:02

+0

你的log.I打印这些值吗? – 2014-09-08 13:16:06

回答

1

基于注释和其他答案,我明白,你看不到语言“印地文”和“卡纳达语”在你的日志,并没有在列表中,但你可以在手机设置中查看它们。 我thinkthat你应该尝试昌河你getAvaiableLocales因为Android's Documentation状态:

大多数语言环境敏感类提供自己的getAvailableLocales 方法,应优先于该通用方法。

你也应该改变你的listLocales[i].getDisplayLanguage();listLocales[i].getDisplayLanguage(Locale.US);,以确保用英语获取语言名称

+0

'Locale.US'解决了这个问题。现在我能够获得所需的语言。对不起@Matteo,你错过了赏金,因为我迟到回复:( – Braj 2014-09-18 05:35:17

0

根据意见,我明白了/假设如下:

  1. 代码Log.i(TAG, "Language : "+language);版画印地文作为हिन्दी和埃纳德语作为ಕನ್ನಡ。
  2. listInstalledLanguages不包含这两种语言。
  3. 上述问题仅在三星Tab3中出现,它将语言列为UNICODE而不是其他型号。

这可能是由于以下原因:String Comparison with unicode

你可能需要比较使用collator被记录如下字符串:

java.text.Collat​​or中类提供语言比较。它不是 与String的compareTo一样快,但它应该是 语言比较的正确值。如果在这种情况下的正确性对你来说很重要,你必须使用这个类。

因此,除了常规字符串比较以外,尝试使用区域设置为HINDI和KANNADA的比较字符串,以便它可以在所有模型中使用。

代码

if (language.equals("Hindi") || collator.compare(language, "हिन्दी")) 
{ 
    listInstalledLanguages.add(language); 
} 
+0

谢谢你的回复。日志不能打印这2种语言。除了印地语和卡纳达语,我可以看到所有其他语言。无论如何,我会尝试你的答案一次。 – Braj 2014-09-09 06:49:01

+0

@Braj:我问日志是否打印,你说是吗?所以我发布了这个答案。无论如何,让这个在这里,因为它可以帮助一个人想要做Unicode比较 – 2014-09-09 06:50:05

+0

对不起。我很困惑:D – Braj 2014-09-09 06:51:58