我得到ISO2语言代码是这样的:如何获取语言环境的ISO2语言代码?
public String getLang(Locale language)
return language.toString().substring(0,2).toLowerCase()
}
有没有更好的方式来做到这一点?
编辑:当我使用getLanguage时,我得到一个空字符串。
我得到ISO2语言代码是这样的:如何获取语言环境的ISO2语言代码?
public String getLang(Locale language)
return language.toString().substring(0,2).toLowerCase()
}
有没有更好的方式来做到这一点?
编辑:当我使用getLanguage时,我得到一个空字符串。
也许通过调用Locale#getLanguage()
Locale locale = ?; locale.getLanguage();
什么
public String getLang(Locale language)
return language.getLanguage();
}
当然,这仅是一个ISO 639-1 2 lettercode如果有这种语言定义的,否则它可能会返回一个3个字母的代码(甚至更长)。
您的代码会给愚蠢的结果,如果你有没有语言代码语言环境(如_DE
)(我将回空字符串,这是一个好一点,恕我直言)。如果区域设置包含语言代码,则它将返回该语言代码,但您不需要拨打toLowerCase()
。
对我而言,这返回“nl_be”,而不是预期的“nl”。这怎么可能?我不得不使用locale.getLanguage()。split(“_”)[0]得到它:( – Wouter 2014-04-23 07:36:13
我有同样的问题,这是我发现的。
如果用构造函数创建Locale
:
Locale locale = new Locale("en_US");
然后调用getLanguage
:
String language = locale.getLanguage();
的language
值将是 “EN_US”;
如果创建Locale
与建筑商:
Locale locale = new Locale.Builder().setLanguage("en").setRegion("US").build()
那么该值locale.getLanguage()
将返回将是 “恩”。
这对我来说很奇怪,但它是它实施的方式。
因此,如果您希望语言代码返回两个字母的ISO语言(需要使用Java Locale
构建器或进行一些字符串操作),那么这是解释的长答案。
您的方法与substring
的作品,但我会用我写下面的东西来涵盖分隔符可能是“ - ”或“_”的情况。
public String getLang(Locale language)
String[] localeStrings = (language.split("[-_]+"));
return localeStrings[0];
}
您的方法并不安全。例如。 Aragonese的ISO3代码是'arg',而ISO2代码是'an'。 – 2016-07-29 00:36:39