当您在Google上找到很多材料时,可以通过Java查找所有受支持的Locales。但这一切令人困惑。
例如[http://sanjaal.com/java/tag/java-locale-tutorial/]显示210个区域设置的输出。但是当我运行相同的程序时,我只得到155.我不会得到例如ta_IN。任何程序都不会输出si_LK。
有人可以清空吗?
我使用JDK / JRE 1.7
http://www.oracle.com/technetwork/java/javase/javase7locales-334809.html提供了111个条目。
我有一个支持i18n的Spring应用程序,我们的客户可以自己进行本地化。我要做的是提供所有语言环境的列表,供他们从中选择。
哦!这令人困惑。 Local.getISOCountries()提供LK作为国家和Locale.getISOLanguages();提供si作为语言....但是Locale.getAvailableLocales()中没有给出有效语言环境的si_LK;
答案 0 :(得分:2)
Locale loc = new Locale("ta", "IN"); // ta_IN, si_LK
System.out.printf("Name: %s%n"
+ "Country: %s; %s - %s%n"
+ "Language: %s; %s - %s%n"
+ "Script: %s - %s%n",
loc.getDisplayName(Locale.ENGLISH),
loc.getCountry(), loc.getISO3Country(), loc.getDisplayCountry(Locale.ENGLISH),
loc.getLanguage(), loc.getISO3Language(), loc.getDisplayLanguage(Locale.ENGLISH),
loc.getScript(), loc.getDisplayScript(Locale.ENGLISH));
Name: Tamil (India)
Country: IN; IND - India
Language: ta; tam - Tamil
Script: -
Name: Sinhalese (Sri Lanka)
Country: LK; LKA - Sri Lanka
Language: si; sin - Sinhalese
Script: -
也可以为自己的语言环境提供支持(因为Java 7我相信)。我为世界语制作了它,它是可行的(LocaleProvider)。但在你的情况下,所有人都可能在那里。
SimpleDateFormat f = new SimpleDateFormat("EEEE", loc);
System.out.println("Weekday: " + f.format(new Date()));
不幸的是显示“星期二”,所以需要实现语言格式等。 我找到了serbo-croatian/bosnian的项目。
答案 1 :(得分:1)
您在互联网上找到的代码使用下一个函数来提取所有语言环境:
Locale list[] = DateFormat.getAvailableLocales();
如果我们阅读该功能的文档:
Returns an array of all locales for which the get*Instance methods of this class can return localized instances. The returned array represents the union of locales supported by the Java runtime and by installed DateFormatProvider implementations. It must contain at least a Locale instance equal to Locale.US
因此我们可以理解返回的语言环境数取决于您的运行时版本和DateFormatProvider。
例如在我的JDK 1.6.0_27机器中,我得到152个结果。
答案 2 :(得分:0)
要提供您的JAVA版本中所有ISO国家的列表,请尝试以下操作:
public static void main(String[] args) {
String[] locales = Locale.getISOCountries();
for (String countryCode : locales) {
Locale obj = new Locale("", countryCode);
System.out.println("Country Code = " + obj.getCountry()
+ ", Country Name = " + obj.getDisplayCountry());
}
}
通过这种方式,您可以提供所有国家的完整列表,但这仍然取决于您JDK的当前ISO国家列表。
另一种方法是使用提供者提供的REST-API,例如:https://restcountries.eu/rest/v2/all中的https://restcountries.eu/
这样,您的程序就独立于您使用的JDK,并且始终保持更新状态(如果您选择的提供程序可靠的话)。