Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取语言环境的iso2语言代码?_Java_Locale - Fatal编程技术网

Java 如何获取语言环境的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

我通过以下方式获得iso2语言代码:

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();
}