为什么Android中的Locale.getDefault().getLanguage()返回显示名称而不是语言代码?

mat*_*teo 10 java android locale

根据Java参考,Locale.getLanguage()应该返回语言的2字母小写ISO代码(例如en),而getDisplayLanguage()获取可读名称的方法(例如English).

那么Android中的以下代码怎么样:

Locale.getDefault().getLanguage()
Run Code Online (Sandbox Code Playgroud)

返回EnglishEspañol代替enes????

我完全不解......

Man*_*ser 15

使用

getResources().getConfiguration().locale.getLanguage()

即使我认为您观察到的行为是值得报告的错误,它也会正常工作.


mat*_*teo 8

我已经明白了.之所以发生这种情况,是因为我之前调用了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"
Run Code Online (Sandbox Code Playgroud)

因此,当我查询默认语言环境时,它实际上是我创建的语言环境,其语言代码错误地设置为"英语".

但是有一些有趣的事情:

  1. 行(*)实际上有效并且实际上确实将语言环境更改为英语(或者当我使用"西班牙语"时将其更改为西班牙语),也就是说,setDefault()似乎接受"格式错误"的语言环境甚至理解它.但它没有解决它.
  2. 注意我在错误地设置语言环境时使用了大写英语,但最后它返回"english"全部小写.