如何使用区域设置的显示名称检索区域设置对象

时间:2011-11-21 11:08:20

标签: java

我想使用区域设置的显示名称创建java.util.Locale对象。例如,我希望泰国的语言环境具有值

  

th_TH

如果显示名称是

  

泰国(泰国)

怎么做?

我能想到的一种方法是迭代所有可用的语言环境,并将每个语言环境的显示名称与我的显示名称进行比较,并找到语言环境对象。但我想知道是否有更聪明的方法可供选择。

2 个答案:

答案 0 :(得分:1)

我很惊讶没有现有设施...我会创建一个hashmap:

Map<String,Locale> myLocales = new HashMap<String,Locale>(){ {
        for (Locale locale : Locale.getAvailableLocales()) {
              put(locale.getDisplayName(),locale);
        }   
    }};

然后你可以这样做:

Locale currentLocale = myLocales.get(currentDisplayname);

如果您使用的是java 7,则会有static inner Builder class,尽管即使这样也无法使用displayname,这很奇怪。

答案 1 :(得分:1)

如果只需要显示名称字符串,那么就可以与可用语言环境的显示名称进行比较。

如果您将多次执行该操作,那么按显示名称构建一次区域设置地图然后使用它来回答您的查询是有意义的。

显示名称是否可以使用多种语言。例如,显示名称可以是法语 - thaï(Thaïlande)吗?

如果是这样,您需要执行双循环来查询本地显示名称。在外部循环中,您需要使用所有语言环境,其语言可用于提供显示名称。

以下是一个示例,其中显示名称可以是任何支持的语言环境的语言:

    Map<String,Locale> locales = new HashMap<String,Locale>();
    for (Locale l1: Locale.getAvailableLocales()) {
        for (Locale l2: Locale.getAvailableLocales()) {
            locales.put(l2.getDisplayName(l1), l2);
        }
    }