2011-04-07 133 views
8

我得到ISO2语言代码是这样的:如何获取语言环境的ISO2语言代码?

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

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

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

+3

您的方法并不安全。例如。 Aragonese的ISO3代码是'arg',而ISO2代码是'an'。 – 2016-07-29 00:36:39

回答

0

Locale locale = ?; locale.getLanguage();

11

什么

public String getLang(Locale language) 
    return language.getLanguage(); 
} 

当然,这仅是一个ISO 639-1 2 lettercode如果有这种语言定义的,否则它可能会返回一个3个字母的代码(甚至更长)。


您的代码会给愚蠢的结果,如果你有没有语言代码语言环境(如_DE)(我将回空字符串,这是一个好一点,恕我直言)。如果区域设置包含语言代码,则它将返回该语言代码,但您不需要拨打toLowerCase()

+0

对我而言,这返回“nl_be”,而不是预期的“nl”。这怎么可能?我不得不使用locale.getLanguage()。split(“_”)[0]得到它:( – Wouter 2014-04-23 07:36:13

2

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

如果用构造函数创建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]; 
} 
相关问题