Java 将语言名称转换为ISO 639语言代码

Java 将语言名称转换为ISO 639语言代码,java,locale,iso,iso-639-2,Java,Locale,Iso,Iso 639 2,我需要将语言名称如“匈牙利语”、“英语”转换为ISO 639代码。ISO 639-6是最好的,但ISO 639-2已经足够好了。实现这一目标的最佳方式是什么 我应该将英语转换为locale,并使用getLanguage()获取语言?如果这是唯一的方法,我如何将像“English”这样的字符串转换为java语言环境 我的目标是使用ISO639代码存储图书语言信息 for (Locale locale : Locale.getAvailableLocales()) { Sys

我需要将语言名称如“匈牙利语”、“英语”转换为ISO 639代码。ISO 639-6是最好的,但ISO 639-2已经足够好了。实现这一目标的最佳方式是什么

我应该将英语转换为locale,并使用getLanguage()获取语言?如果这是唯一的方法,我如何将像“English”这样的字符串转换为java语言环境

我的目标是使用ISO639代码存储图书语言信息

    for (Locale locale : Locale.getAvailableLocales()) {
        System.out.println("" + locale
                + "; display: " + locale.getDisplayLanguage()
                + "; name: " + locale.getDisplayName()
                + "; lang: " + locale.getLanguage()
                + "; iso3: " + locale.getISO3Language());
    }
这将发现大约150个地区,其中ISO3是三个字母的变体,而不是旧的两个字母的getLanguage

显示语言是纯语言名称,而显示名称则用国家“德语(奥地利)”修饰

所以


对于显示方法,有一个可选的Locale参数,用于显式设置为Locale.ENGLISH。

您可以通过将语言名称的正则表达式传递给(在库中)来获得ISO 639-2代码列表

下面的示例代码是一个命令行工具,它将给定的语言名称转换为相应的ISO 639-2代码

import java.util.List;
导入com.neovisionaries.i18n.LanguageAlpha3Code;
公共类至639_2
{
公共静态void main(字符串[]args)
{
//对于命令行中给定的每种语言名称。
for(字符串语言名称:args)
{
//获取ISO 639-2代码(alpha-3代码)列表
//其语言名称与给定模式匹配。
列表
=LanguageAlpha3Code.findByName(languageName);
//打印语言和ISO 639-2代码。
System.out.format(“%s=>%s\n”,languageName,
(list.size()!=0)?list.get(0):“”);
}
}
}
执行示例:

$ java -cp nv-i18n-1.14.jar:. To639_2 Hungarian English Hungarian => hun English => eng $java-cp nv-i18n-1.14.jar:。To639_2匈牙利英语 匈牙利语=>匈奴语 英语=>英语
/**
*此方法是从给定的语言名称中获取语言代码
*as语言环境不能从语言名称实例化。
*
*您可以指定您使用的语言:Locale loc=new Locale(“en”)使用您的任何语言
* 
*@param lng->给定语言名称,例如:英语
*@return->将返回“eng”
*
*小威尔逊·M·彭哈。
*/
私有字符串getLanguageCode(字符串lng){
语言环境loc=新语言环境(“en”);
String[]name=loc.getISOLanguages();//语言代码列表
for(int i=0;i
到目前为止,您尝试了什么?我知道java.util.Locale对此有一些基本支持,我创建了一个增强的ISO 639枚举(以及其他ISO枚举)。代码在那里可用:(免费)我相信要获得ISO 639-2,您必须将
list.get(0)
替换为
list.get(0)…getAlpha3B()
在区域设置中。请注意,此方法与每对区域设置匹配一个语言名称,并且不会捕获诸如अंग्रेजी" 及"अँग्रेज़ी“(这两种都是用印地语说英语的方式)。 $ java -cp nv-i18n-1.14.jar:. To639_2 Hungarian English Hungarian => hun English => eng
/**
 * This method is to get the language code from given language name
 * as locale can't be instantiate from a language name.
 *
 * You can specify which language you are at : Locale loc=new Locale("en") use whatever your language is
 * 
 * @param lng -> given language name eg.: English
 * @return -> will return "eng"
 *
 * Wilson M Penha Jr.
 */
private String getLanguageCode(String lng){
    Locale loc = new Locale("en");
    String[] name = loc.getISOLanguages(); // list of language codes

    for (int i = 0; i < name.length; i++) {
        Locale locale = new Locale(name[i],"US");
        // get the language name in english for comparison
        String langLocal = locale.getDisplayLanguage(loc).toLowerCase();
        if (lng.equals(langLocal)){
            return locale.getISO3Language();
        }
    }
    return "unknown";
}