区域语言区域设置可用但未在日志中显示

时间:2014-09-05 12:48:46

标签: android localization

我正在尝试列出可用的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种语言在语言设置中以各自的语言列出。我的意思是,印地语列为हिन्दी,卡纳达列为ಕನ್ನಡ

即使我尝试按照以下区域名称(हिन्दी和ಕನ್ನಡ原样)获取Locales,但无法成功。

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

任何人都可以帮帮我吗?

TIA。

2 个答案:

答案 0 :(得分:1)

根据评论和其他答案,我知道您无法看到语言和#34;印地语&#34;和&#34;卡纳达&#34;在您的日志中,您的列表中都没有,但您可以在手机设置中看到它们。 我认为你应该尝试改变你的getAvaiableLocales,因为正如Android's Documentation所述:

  

大多数区分设置敏感的类都提供自己的getAvailableLocales   方法,应优先于这种通用方法。

您还应该将listLocales[i].getDisplayLanguage();更改为listLocales[i].getDisplayLanguage(Locale.US);,以确保获得英文语言名称

答案 1 :(得分:0)

根据评论,我理解/假设以下内容:

  1. 代码Log.i(TAG, "Language : "+language);将印地语打印为हिन्दी,将卡纳达语打印为ಕನ್ನಡ。
  2. listInstalledLanguages不包含这两种语言。
  3. 上述问题仅发生在三星Tab3中,它将语言列为UNICODE,而非其他型号。
  4. 这可能是由于以下原因:String Comparison with unicode

    您可能需要使用collator来比较字符串,如下所示:

      

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

    因此,尝试使用带有语言环境HINDI和KANNADA的collat​​or并比较字符串,以及常规字符串比较,以便它可以在所有模型中使用。

    <强>代码

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