我在应用程序中读取了一个指定语言代码的文件:
public void setResources(String locale) {
// validate locale
// ULocale lo = new ULocale(locale);
// System.out.println(lo.getDisplayCountry());
}
Run Code Online (Sandbox Code Playgroud)
必须采用以下格式:<ISO 639 language code>_<ISO 3166 region code>例如.en_UK,en_US等.是否可以在继续之前验证语言环境字符串是否有效?
Arn*_*ter 20
我不知道ULocale,但如果您的意思是java.util.Locale,以下代码可能会:
public void setResources(String locale) {
// validate locale
Locale lo = parseLocale(locale);
if (isValid(lo)) {
System.out.println(lo.getDisplayCountry());
} else {
System.out.println("invalid: " + locale);
}
}
private Locale parseLocale(String locale) {
String[] parts = locale.split("_");
switch (parts.length) {
case 3: return new Locale(parts[0], parts[1], parts[2]);
case 2: return new Locale(parts[0], parts[1]);
case 1: return new Locale(parts[0]);
default: throw new IllegalArgumentException("Invalid locale: " + locale);
}
}
private boolean isValid(Locale locale) {
try {
return locale.getISO3Language() != null && locale.getISO3Country() != null;
} catch (MissingResourceException e) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:添加验证
Vde*_*deX 16
isAvailableLocale(Locale locale)
Run Code Online (Sandbox Code Playgroud)
回答你的问题.
例:
String key= "ms-MY";
Locale locale = new Locale.Builder().setLanguageTag(key).build();
if (LocaleUtils.isAvailableLocale(locale))
{
System.out.println("Locale present");
}
Run Code Online (Sandbox Code Playgroud)
避免使用getAvailableLocales()它将返回155 locales它耗时.
如果可能,请在LocaleUtils类和Locale中了解更多信息
loc*_*cka 14
您可以像这样获取可用的语言环境并枚举它们以查看语言环境是否有效
boolean isValidLocale(String value) {
Locale[] locales = Locale.getAvailableLocales();
for (Locale locale : locales) {
if (value.equals(locale.toString())) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
小智 8
用org.apache.commons.lang.LocaleUtils.toLocale(localeString).
单行,除了捕捉java.lang.IllegalArgumentException.
commons lang有一个实用程序方法来解析和验证语言环境字符串:LocaleUtils.toLocale(String)
之后,您只需检查变量是否为空:
Validate.isTrue( StringUtils.isBlank( locale.getVariant() ) );
Run Code Online (Sandbox Code Playgroud)
现在我只是这样做:
ULocale uLocale = new ULocale(locale);
if (uLocale.getCountry() != null && !uLocale.getCountry().isEmpty()) {
...
}
Run Code Online (Sandbox Code Playgroud)
效果很好。