我这样得到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().
我有同样的问题,这就是我发现的.
如果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)
| 归档时间: |
|
| 查看次数: |
14890 次 |
| 最近记录: |