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