2011-11-21 84 views
1

我想使用語言環境的顯示名稱創建java.util.Locale對象。例如,我想泰國具有價值的區域如何使用語言環境的顯示名稱檢索語言環境對象

th_TH

如果顯示的名字是

泰(泰國)

如何做到這一點?

我能想到的一種方式是在所有可用的語言環境中進行迭代,並將每個語言環境的顯示名稱與我的顯示名稱進行比較並查找語言環境對象。但我想知道是否有任何更智能的方式可用於此。

+0

如何被顯示的名稱創建? – NimChimpsky

+0

它以前使用locale.getDisplayName()創建並存儲在顯示名稱的集合中。現在我試圖將此顯示名稱與語言環境對象匹配。 – javalearner

回答

1

如果您所要做的只是顯示名稱字符串,則可以與可用區域設置的顯示名稱進行比較。

如果您將多次執行該操作,那麼通過顯示名稱構建一個語言環境地圖一次,然後使用它來回答您的查詢是有意義的。

顯示名稱可以多於一種語言。例如,顯示名稱是否可以用法語 - 泰國語(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); 
     } 
    } 
+0

謝謝。地圖是一個更好的選擇。我相信我會單獨使用一種語言的顯示名稱。謝謝。 – javalearner

1

我surpised沒有對此沒有現有設施......我會創建一個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,雖然這並不能使顯示名稱被使用,這很奇怪。

+0

謝謝。地圖是一個不錯的選擇。 – javalearner