我以这种方式获得iso2语言代码:
public String getLang(Locale language)
return language.toString().substring(0,2).toLowerCase()
}
有更好的方法吗?
编辑:当我使用getLanguage时,我得到一个空字符串。
答案 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();