将语言名称转换为 ISO 639 语言代码
Converting language names to ISO 639 language codes
我需要将 'Hungarian'、'English' 等语言名称转换为 ISO 639 代码。 ISO 639-6 是最好的,但 ISO 639-2 就足够了。实现此目标的最佳方法是什么?
我应该将英语转换为语言环境并使用 getLanguage() 获取语言吗?如果那是唯一的方法,我怎样才能将 'English' 之类的字符串转换为 java 语言环境?
我的目标是使用 ISO 639 代码存储图书语言信息。
for (Locale locale : Locale.getAvailableLocales()) {
System.out.println("" + locale
+ "; display: " + locale.getDisplayLanguage()
+ "; name: " + locale.getDisplayName()
+ "; lang: " + locale.getLanguage()
+ "; iso3: " + locale.getISO3Language());
}
这将找到大约 150 个语言环境,其中 ISO3 是三个字母的变体,而不是旧的两个字母的 getLanguage。
显示语言是纯语言名称,而显示名称是用国家点缀的"German (Austria)."
所以
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。
您可以通过将语言名称的正则表达式传递给 LanguageAlpha3Code.findByName(String) (in 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<LanguageAlpha3Code> 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 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";
}
我需要将 'Hungarian'、'English' 等语言名称转换为 ISO 639 代码。 ISO 639-6 是最好的,但 ISO 639-2 就足够了。实现此目标的最佳方法是什么?
我应该将英语转换为语言环境并使用 getLanguage() 获取语言吗?如果那是唯一的方法,我怎样才能将 'English' 之类的字符串转换为 java 语言环境?
我的目标是使用 ISO 639 代码存储图书语言信息。
for (Locale locale : Locale.getAvailableLocales()) {
System.out.println("" + locale
+ "; display: " + locale.getDisplayLanguage()
+ "; name: " + locale.getDisplayName()
+ "; lang: " + locale.getLanguage()
+ "; iso3: " + locale.getISO3Language());
}
这将找到大约 150 个语言环境,其中 ISO3 是三个字母的变体,而不是旧的两个字母的 getLanguage。
显示语言是纯语言名称,而显示名称是用国家点缀的"German (Austria)."
所以
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。
您可以通过将语言名称的正则表达式传递给 LanguageAlpha3Code.findByName(String) (in 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<LanguageAlpha3Code> 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 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";
}