如何获取所有 Java 支持的语言环境

问题描述 投票:0回答:3

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;

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


1
投票

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

import java.text.DateFormat;
import java.util.Locale;

Locale list[] = DateFormat.getAvailableLocales();

如果我们阅读该函数的文档

返回所有语言环境的数组,此类的

get*Instance
方法可以返回本地化实例。返回的数组表示 Java 运行时和已安装的
DateFormatProvider
实现支持的语言环境的联合。它必须至少包含一个等于
Locale
Locale.US

实例

因此我们可以理解,返回的语言环境数量取决于您的运行时版本和您的

DateFormatProvider

例如,在我的 JDK 1.6.0_27 机器上,我得到 152 个结果。


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,并且始终是最新的(如果您选择的提供商可靠)。

© www.soinside.com 2019 - 2024. All rights reserved.