根据Java参考,Locale.getLanguage()
应该返回该语言的2个字母的小写ISO代码(例如en
),而getDisplayLanguage()
是获取可读的方法名称(例如English
)。
那么Android中的以下代码如何:
Locale.getDefault().getLanguage()
返回English
或Español
而不是en
和es
????
我完全不解......
答案 0 :(得分:13)
使用
getResources()。getConfiguration()。locale.getLanguage()
即使我认为您观察到的行为是值得报告的错误,它也会正常工作。
答案 1 :(得分:6)
我已经弄清楚了。之所以发生这种情况,是因为我之前调用了Locale.setDefault()并将其传递给Locale,而Locale又是通过错误地传递整个语言名称而创建的(我从偏好设置中选择了语言而错误地选择了条目的标签而不是的价值)。
就是这样,我做了:
String lang= //... here I assigned "English" while I thought
// I was assigning it "en"
Locale locale=new Locale(lang);
Locale.setDefault(locale); // (*)
// and later
Locale.getLocale().getLanguage(); //returns "english"
因此,当我查询默认语言环境时,它实际上是我创建的语言环境,其语言代码错误地设置为“英语”。
但有一些有趣的事情:
答案 2 :(得分:4)
我不知道为什么会出现这个问题,但语言的另一个标准是ISO3代码。
您可以致电Locale.getDefault().getISO3Language()
,它应该返回“eng”或“esp”。
答案 3 :(得分:1)
Android返回可读名称而不是代码。
Locale.getDefault()包含字符串。因此,如果你打电话给任何打印或日志,它将工作... 意思是Locale.getDefault()。toString()有你的语言环境代码。
答案 4 :(得分:0)
现在看起来已经修复了,在 Android Version 10 Emulated device Pixel XL API 29 上试过:
以下为我返回两个字母的语言代码。尝试使用英语、德语和阿拉伯语系统语言,分别返回“en”、“de”和“ar”。
Locale.getDefault().getLanguage();
此外,如问题 Locale.getDefault().getDisplayLanguage()
中所述,返回可读名称,例如德语
答案 5 :(得分:0)
在 kotlin 中试试这个
Locale.getDefault().toLanguageTag()
给予
en-US