赞
踩
According to the Java reference, Locale.getLanguage() is supposed to return the 2-letters lowercase ISO code of the language (e.g. "en"), while getDisplayLanguage() is the method for obtaining the readable name (e.g. "English").
So how comes that the following code in Android:
Locale.getDefault().getLanguage()
returns "English" or "Español" instead of "en" and "es"????
I'm completely puzzled...
解决方案
I've figured it out. This happened because I had previously called Locale.setDefault() and passed it a Locale which in turn I had created by erroneously passing it the whole language name (I took the language from a preference setting and I mistakenly picked the label of the entry instead of the value).
That is, I did:
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"
So when I queried for the default locale, it actually was the locale I had created whose language code I had erroneously set to "english".
There are a couple of funny things, though:
The line (*) actually works and actually does change the locale to English (or to Spanish when I used "Spanish"), that is, setDefault() seems to accept a "malformed" locale and even understands it. But it doesn't fix it.
Note I used uppercase English when wrongly setting the locale, but at the end it returns "english" all lowercase.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。