假设我以任何格式存储在某个配置中的语言环境,都可以从中获取Locale
对象。然后,我需要检查当前Locale
是此语言环境或此语言环境的子集。
所以,我要寻找的本质上是具有这些属性的方法isSubsetLocale(Locale currentLocale, Locale configLocale)
:
isSubsetLocale(Locale.forLanguageTag("en-US"), Locale.forLanguageTag("en")) == true;
isSubsetLocale(Locale.forLanguageTag("en-US"), Locale.forLanguageTag("en-US")) == true;
isSubsetLocale(Locale.forLanguageTag("de-CH"), Locale.forLanguageTag("en")) == false;
// or even
isSubsetLocale(Locale.forLanguageTag("en-US"), Locale.forLanguageTag("")) == true;
[我了解在99%的情况下,我只能检查config语言环境是否是当前语言环境的前缀,但是我想知道是否还有一种更惯用的方法来做到这一点。
您需要比locale.getLanguage()
多的东西进行比较吗?这将为您提供比较的前缀。
Locale.forLanguageTag("en-US").getLanguage().equals(Locale.forLanguageTag("en").getLanguage()) //true;
这可能有效:
public static boolean isSubsetLocale(Locale locale1, Locale locale2) {
String tag1 = locale1.toLanguageTag();
String tag2 = locale2.toLanguageTag();
if (tag1.equals("und"))
tag1 = "";
if (tag2.equals("und"))
tag2 = "";
return tag1.startsWith(tag2);
}
Test
System.out.println(isSubsetLocale(Locale.forLanguageTag("en-US"), Locale.forLanguageTag("en")));
System.out.println(isSubsetLocale(Locale.forLanguageTag("en-US"), Locale.forLanguageTag("en-US")));
System.out.println(isSubsetLocale(Locale.forLanguageTag("de-CH"), Locale.forLanguageTag("en")));
System.out.println(isSubsetLocale(Locale.forLanguageTag("en-US"), Locale.forLanguageTag("")));
输出
true
true
false
true