我正在尝试列出可用的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
中,我可以看到语言设置中列出了Hindi
和Kannada
种语言,但是当我运行上面的代码时,我看不到它们在列表中其他语言(在日志中)。
Hindi
和Kannada
种语言在语言设置中以各自的语言列出。我的意思是,印地语列为हिन्दी
,卡纳达列为ಕನ್ನಡ
。
即使我尝试按照以下区域名称(हिन्दी和ಕನ್ನಡ原样)获取Locales,但无法成功。
if (language.equals("हिन्दी"))
listInstalledLanguages.add(language);
任何人都可以帮帮我吗?
TIA。
答案 0 :(得分:1)
根据评论和其他答案,我知道您无法看到语言和#34;印地语&#34;和&#34;卡纳达&#34;在您的日志中,您的列表中都没有,但您可以在手机设置中看到它们。 我认为你应该尝试改变你的getAvaiableLocales,因为正如Android's Documentation所述:
大多数区分设置敏感的类都提供自己的getAvailableLocales 方法,应优先于这种通用方法。
您还应该将listLocales[i].getDisplayLanguage();
更改为listLocales[i].getDisplayLanguage(Locale.US);
,以确保获得英文语言名称
答案 1 :(得分:0)
根据评论,我理解/假设以下内容:
Log.i(TAG, "Language : "+language);
将印地语打印为हिन्दी,将卡纳达语打印为ಕನ್ನಡ。listInstalledLanguages
不包含这两种语言。这可能是由于以下原因:String Comparison with unicode
您可能需要使用collator来比较字符串,如下所示:
java.text.Collator 类提供语言比较。不是 与String的compareTo一样快,但它应该是正确的 语言比较。如果在这种情况下的正确性很重要 对你来说,你必须使用这个课程。
因此,尝试使用带有语言环境HINDI和KANNADA的collator并比较字符串,以及常规字符串比较,以便它可以在所有模型中使用。
<强>代码强>:
if (language.equals("Hindi") || collator.compare(language, "हिन्दी"))
{
listInstalledLanguages.add(language);
}