Java 如何获取语言环境的iso2语言代码?
我通过以下方式获得iso2语言代码:Java 如何获取语言环境的iso2语言代码?,java,locale,Java,Locale,我通过以下方式获得iso2语言代码: public String getLang(Locale language) return language.toString().substring(0,2).toLowerCase() } 有没有更好的办法 编辑:当我使用getLanguage时,我得到一个空字符串。可能通过调用Locale=?;locale.getLanguage()怎么办 public String getLang(Locale language) return l
public String getLang(Locale language)
return language.toString().substring(0,2).toLowerCase()
}
有没有更好的办法
编辑:当我使用getLanguage时,我得到一个空字符串。可能通过调用
Locale=?;locale.getLanguage()代码>怎么办
public String getLang(Locale language)
return language.getLanguage();
}
当然,如果为该语言定义了一个iso 639-1 2字母代码,那么它将只返回一个iso 639-1 2字母代码,否则它可能返回一个3字母代码(甚至更长)
如果您的语言环境没有语言代码(比如\u DE
),那么您的代码将给出愚蠢的结果(我的代码将返回空字符串,这会更好一些,IMHO)。如果区域设置包含语言代码,它将返回它,但是您不需要调用toLowerCase()
。我也有同样的问题,这就是我发现的
如果使用构造函数创建区域设置
:
Locale locale = new Locale("en_US");
然后调用getLanguage
:
String language = locale.getLanguage();
语言
的值为“en_us”
如果使用生成器创建区域设置
:
Locale locale = new Locale.Builder().setLanguage("en").setRegion("US").build()
然后值locale.getLanguage()
将返回“en”。
这对我来说很奇怪,但这是它的实现方式
因此,这是一个很长的答案来解释如果您希望语言代码返回两个字母的ISO语言,那么您需要使用Java语言环境
生成器或执行一些字符串操作。
您使用子字符串的方法很有效,但我会使用下面写的方法来涵盖分隔符可能为“-”或“\u1”的实例
使用toLanguageTag()
方法怎么样
例如:
public String getLang(Locale language) {
return language.toLanguageTag();
}
对我来说,这返回“nl_be”,而不是预期的“nl”。这怎么可能?我必须使用locale.getLanguage().split(“”)[0]来获得它:(这不起作用。需要拆分字符串。至少在Java 8中,您的方法是不安全的。例如,阿拉贡语的ISO3代码是arg
,而ISO2代码是an
。
public String getLang(Locale language) {
return language.toLanguageTag();
}