我的应用程序正在从外部进程提供字符串,其中每个字符串的长度为2或5个字符,并表示java.util.Locale
s。例如:
EN-US
KO
第一个例子是一个5-char字符串,其中“en”是ISO语言代码,“us”是ISO国家代码。这应该对应于“en_US”区域设置。第二个示例只是一个2-char字符串,其中“ko”是ISO语言代码,应该对应于“ko_KR”(韩语)语言环境。
我需要一种方法来获取这些字符串(2或5-char类型),验证它(作为受支持的Java 6 区域设置),然后使用它创建Locale实例。
我本以为Locale带来了开箱即用的验证,但不幸的是这段代码运行时没有抛出异常:
Locale loc = new Locale("waawaaweewah", "greatsuccess");
// Prints: "waawaaweewah"
System.out.println(loc.getDisplayLanguage());
所以我问,给我这些字符串将给我的2个表格,我怎么能:
提前致谢!
答案 0 :(得分:7)
Locale.getISOCountries()和Locale.getISOLanguages()
分别返回ISO 3166和ISO 639中定义的所有双字母国家/地区和语言代码的列表,可用于创建区域设置。
您可以使用它来验证您的输入。
答案 1 :(得分:2)
您有两种选择,
String
解析为Locale
的方法。Locale
有效 - 请参阅javadoc 一个起点是分割String
并打开元素数量:
public static Locale parseLocale(final String locale) {
final String[] localeArr = locale.split("_");
switch (localeArr.length) {
case 1:
return new Locale(localeArr[0]);
case 2:
return new Locale(localeArr[0], localeArr[1]);
case 3:
return new Locale(localeArr[0], localeArr[1], localeArr[2]);
default:
throw new IllegalArgumentException("Invalid locale format;");
}
}
据推测,您需要获取所有有效国家/地区代码和语言的列表,并在调用构造函数之前将String[]
中的元素与有效值进行比较。