比较语言环境作为彼此子集的规范方法

问题描述 投票:2回答:1

假设我以任何格式存储在某个配置中的语言环境,都可以从中获取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语言环境是否是当前语言环境的前缀,但是我想知道是否还有一种更惯用的方法来做到这一点。

java locale
1个回答
0
投票

您需要比locale.getLanguage()多的东西进行比较吗?这将为您提供比较的前缀。

Locale.forLanguageTag("en-US").getLanguage().equals(Locale.forLanguageTag("en").getLanguage()) //true;

0
投票

这可能有效:

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
© www.soinside.com 2019 - 2024. All rights reserved.