调用Locale.getAvailableLocales()会按特定顺序列出语言环境(例如:“ en_US”是第一个英语语言环境)。
这对我来说效果很好,但我想知道:
该订购设置在哪里?我尝试遵循源代码,但是从检索原始数据的角度出发:String
中的HashMap
。具体来说:“ sun.text.resources.FormatData”,到列表为returned的地步,我找不到排序的位置。
(请注意,在原始String数据中,“ en_US”不是第一个英语语言环境)。
谢谢。
最佳答案
这是Locale#getAvailableLocales
的源代码:
public static Locale[] getAvailableLocales() {
return LocaleServiceProviderPool.getAllAvailableLocales();
}
这是
LocaleServiceProviderPool.getAllAvailableLocales
的源代码:public synchronized Locale[] getAvailableLocales() {
if (availableLocales == null) {
availableLocales = new HashSet<Locale>(getJRELocales());
if (hasProviders()) {
availableLocales.addAll(getProviderLocales());
}
}
Locale[] tmp = new Locale[availableLocales.size()];
availableLocales.toArray(tmp);
return tmp;
}
我们可以清楚地看到,语言环境存储在没有排序的哈希集中。该方法最终返回一个语言环境数组可能会产生误导,因为它可能暗示存在某种顺序。
正如@JBNizet所评论的那样,您最好只对自己的代码中的语言环境列表进行排序。
关于java - Locale.getAvailableLocales()的顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46986770/