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;
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 的项目。
您在互联网上找到的代码使用下一个函数来提取所有语言环境:
import java.text.DateFormat;
import java.util.Locale;
Locale list[] = DateFormat.getAvailableLocales();
如果我们阅读该函数的文档:
返回所有语言环境的数组,此类的
方法可以返回本地化实例。返回的数组表示 Java 运行时和已安装的get*Instance
实现支持的语言环境的联合。它必须至少包含一个等于DateFormatProvider
Locale
的Locale.US
实例
因此我们可以理解,返回的语言环境数量取决于您的运行时版本和您的
DateFormatProvider
。
例如,在我的 JDK 1.6.0_27 机器上,我得到 152 个结果。
要提供 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,并且始终是最新的(如果您选择的提供商可靠)。