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

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

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

我的目标是使用ISO 639代码存储书籍语言信息。

您可以通过将语言名称的正则表达式传递给LanguageAlpha3Code.findByName(String) (在nv-i18n库中)来获取ISO 639-2代码列表。

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

import java.util.List; import com.neovisionaries.i18n.LanguageAlpha3Code; public class To639_2 { public static void main(String[] args) { // For each language name given on the command line. for (String languageName : args) { // Get a list of ISO 639-2 codes (alpha-3 codes) // whose language name matches the given pattern. List list = LanguageAlpha3Code.findByName(languageName); // Print the language and the ISO 639-2 code. System.out.format("%s => %s\n", languageName, (list.size() != 0) ? list.get(0) : ""); } } } 

示例执行:

 $ java -cp nv-i18n-1.14.jar:。  To639_2匈牙利英语
匈牙利语=> hun
英语=> eng
  for (Locale locale : Locale.getAvailableLocales()) { System.out.println("" + locale + "; display: " + locale.getDisplayLanguage() + "; name: " + locale.getDisplayName() + "; lang: " + locale.getLanguage() + "; iso3: " + locale.getISO3Language()); } 

这将找到大约150个语言环境,其中ISO3是三个字母的变体,而不是旧的两个字母getLanguage。

显示语言是裸语言名称,而显示名称则用国家“德语(奥地利)”进行装饰。

所以

 public String toISO3(String name) { for (Locale locale : Locale.getAvailableLocales()) { if (name.equals(locale.getDisplayLanguage()) { return locale.getISO3Language(); } } throw new IllegalArgumentException("No language found: " + name); } 

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

 /** * 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"; }