3

当 Google 时,您会找到很多资料来查找 Java 支持的所有语言环境。但这一切都令人困惑。

例如 [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;

4

3 回答 3

3
    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的项目。

于 2013-06-25T08:54:36.327 回答
1

您在 Internet 上找到的代码使用下一个函数来提取所有语言环境:

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 个结果。

于 2013-06-25T08:36:32.487 回答
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 并且始终是最新的(如果您选择的提供程序是可靠的)。

于 2019-08-22T13:14:37.157 回答