我已经想通了。发生这种情况是因为我以前调用了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"
因此,当我查询默认区域设置时,它实际上是我创建的区域设置,其语言代码被错误地设置为“english”。
不过,有几件有趣的事情:
- 行(*)实际上有效,并且实际上确实将区域设置更改为英语(或当我使用“西班牙语”时更改为西班牙语),也就是说,setDefault()似乎接受“格式不正确”的区域设置,甚至可以理解它。但它不能解决它。
- 注意:我在错误地设置区域设置时使用了大写英语,但最后它返回全小写的“english”。