
この記事では、 `Locale`クラスを使って国のリストを操作する方法を説明します。
P.S JDK 1.6
でテスト済み
1.国リスト
`Locale.getISOCountries()`は、http://www.iso.org/iso/country__codes[ISO 3166]で定義されている2文字の国コードのリストを返します。
ListCountry.java
package com.webmitta.model;
import java.util.Locale;
public class ListCountry {
public static void main(String[]args) {
ListCountry obj = new ListCountry();
obj.run();
}
public void run() {
String[]locales = Locale.getISOCountries();
for (String countryCode : locales) {
Locale obj = new Locale("", countryCode);
System.out.println("Country Code = " + obj.getCountry()
+ ", Country Name = " + obj.getDisplayCountry());
}
System.out.println("Done");
}
}
出力
Country Code = AD, Country Name = Andorra Country Code = AE, Country Name = United Arab Emirates Country Code = AF, Country Name = Afghanistan Country Code = AG, Country Name = Antigua and Barbuda Country Code = AI, Country Name = Anguilla Country Code = AL, Country Name = Albania//skip ...
2.定義された言語の国リスト
国のリストを取得し、国名を中国語で表示します。
ListCountry.java
package com.webmitta.model;
import java.util.Locale;
public class ListCountry {
public static void main(String[]args) {
ListCountry obj = new ListCountry();
//get a list of countries and display in Chinese
obj.getListOfCountries(Locale.Chinese);
//display in frence
//obj.getListOfCountries(Locale.FRENCH);
}
public void getListOfCountries(Locale locale) {
String[]locales = Locale.getISOCountries();
for (String countryCode : locales) {
Locale obj = new Locale("", countryCode);
System.out.println("Country Code = " + obj.getCountry()
+ ", Country Name = " + obj.getDisplayCountry(locale));
}
}
}
出力、UTF-8出力を有効にしたEclipse
3.各国言語のリスト
国のリストを取得し、自国の言語で国名を表示します。このトリックは、後でクエリーのために `Map`オブジェクトを作成し、国コードと国の言語を保存することです。
ListCountry.java
package com.webmitta.model;
import java.util.Locale;
import java.util.Map;
import java.util.TreeMap;
public class ListCountry {
private Map<String, String> languagesMap = new TreeMap<String, String>();
public ListCountry() {
initLanguageMap();
}
public static void main(String[]args) {
ListCountry obj = new ListCountry();
obj.getListOfCountries();
}
public void getListOfCountries() {
String[]countries = Locale.getISOCountries();
int supportedLocale = 0, nonSupportedLocale = 0;
for (String countryCode : countries) {
Locale obj = null;
if (languagesMap.get(countryCode) == null) {
obj = new Locale("", countryCode);
nonSupportedLocale++;
} else {
//create a Locale with own country's languages
obj = new Locale(languagesMap.get(countryCode), countryCode);
supportedLocale++;
}
System.out.println("Country Code = " + obj.getCountry()
+ ", Country Name = " + obj.getDisplayCountry(obj)
+ ", Languages = " + obj.getDisplayLanguage());
}
System.out.println("nonSupportedLocale : " + nonSupportedLocale);
System.out.println("supportedLocale : " + supportedLocale);
}
//create Map with country code and languages
public void initLanguageMap() {
Locale[]locales = Locale.getAvailableLocales();
for (Locale obj : locales) {
if ((obj.getDisplayCountry() != null) && (!"".equals(obj.getDisplayCountry()))) {
languagesMap.put(obj.getCountry(), obj.getLanguage());
}
}
}
}
出力、UTF-8出力を有効にしたEclipse
参考文献
-
http://www.iso.org/iso/home/standards/country
codes/iso-3166-1
decoding__table.htm[ISO
3166-1デコードテーブル]。
http://docs.oracle.com/javase/tutorial/i18n/locale/create.html
[Java
チュートリアル:ロケールの作成]。
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Locale.html
[Locale
JavaDoc]。
http://www.codereye.com/2009/03/getting-countries-list-for-specific.html
[Getting
Javaの国リスト]。 link://java/how-to-display-chinese-character-in-eclipse-console/[どうやって
Eclipseコンソールで漢字を表示する]
リンク://タグ/java/[java]リンク://タグ/ロケール/[ロケール]