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

时间:2011-04-07 14:00:25

标签: java locale

我以这种方式获得iso2语言代码:

public String getLang(Locale language)
    return language.toString().substring(0,2).toLowerCase()
}

有更好的方法吗?

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

5 个答案:

答案 0 :(得分:12)

怎么样?
public String getLang(Locale language)
    return language.getLanguage();
}

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


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

答案 1 :(得分:8)

我有同样的问题,这就是我找到的。

如果使用构造函数创建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()将返回" zh"。

这对我来说很奇怪,但它的实施方式。

所以这是解释的长期答案,如果您希望语言代码返回双字母ISO语言,则需要使用Java Locale构建器或进行字符串操作。

使用substring的方法有效但我会使用下面我写的内容来涵盖分隔符可能是" - "或" _"。

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

答案 2 :(得分:1)

使用toLanguageTag()方法怎么样?

示例:

public String getLang(Locale language) {
    return language.toLanguageTag();
}

答案 3 :(得分:0)

也许可以致电Locale#getLanguage()

答案 4 :(得分:0)

Locale locale = ?; locale.getLanguage();