如何获取locale的iso2语言代码?

cup*_*kob 11 java locale

我这样得到iso2语言代码:

public String getLang(Locale language)
    return language.toString().substring(0,2).toLowerCase()
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点?

编辑:当我使用getLanguage时,我得到一个空字符串.

Paŭ*_*ann 12

关于什么

public String getLang(Locale language)
    return language.getLanguage();
}
Run Code Online (Sandbox Code Playgroud)

当然,如果为这种语言定义了一个,那么这只是一个iso 639-1 2字母代码,否则它可能会返回一个3个字母的代码(甚至更长).


如果您的语言环境没有语言代码(例如_DE),您的代码将会产生愚蠢的结果(我将返回空字符串,这有点好,恕我直言).如果语言环境包含语言代码,它将返回它,但是您不需要该语句toLowerCase().


Bro*_*rod 8

我有同样的问题,这就是我发现的.

如果Locale使用构造函数创建:

Locale locale = new Locale("en_US");
Run Code Online (Sandbox Code Playgroud)

然后你打电话getLanguage:

String language = locale.getLanguage();
Run Code Online (Sandbox Code Playgroud)

值为language"en_us";

如果Locale使用构建器创建:

Locale locale = new Locale.Builder().setLanguage("en").setRegion("US").build()
Run Code Online (Sandbox Code Playgroud)

然后该值locale.getLanguage()将返回"en".

这对我来说很奇怪,但它实现的方式.

因此,这是解释如果您希望语言代码返回双字母ISO语言的长答案,您需要使用Java Locale构建器或执行一些字符串操作.

你的方法有substring作品,但我会使用我在下面写的内容来覆盖分隔符可能是" - "或"_"的实例.

public String getLang(Locale language)
    String[] localeStrings = (language.split("[-_]+"));
    return localeStrings[0];
}
Run Code Online (Sandbox Code Playgroud)


Rid*_*del 1

也许通过打电话Locale#getLanguage()