调用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/

10-11 18:42