如何在java中验证语言环境?

2022-09-01 12:30:35

我在应用程序中读取了一个文件,该文件指定了语言代码:

public void setResources(String locale) {

    // validate locale
    // ULocale lo = new ULocale(locale);
    // System.out.println(lo.getDisplayCountry());

}

必须采用以下格式:例如。en_UK、en_US等是否可以在继续之前验证区域设置字符串是否有效?<ISO 639 language code>_<ISO 3166 region code>


答案 1

我不知道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;
  }
}

编辑:添加验证


答案 2
isAvailableLocale(Locale locale) 

是您的问题的答案。

例:

String key= "ms-MY";
Locale locale = new Locale.Builder().setLanguageTag(key).build();
 if (LocaleUtils.isAvailableLocale(locale))
 {
  System.out.println("Locale present");
 }

避免使用它将返回155个区域设置它耗时。getAvailableLocales()

如果可能的话,请在 LocaleUtils 类Locale 中探索更多内容


推荐