【问题标题】:Locale appending 'variation' to language and country code将“变体”附加到语言和国家/地区代码的区域设置
【发布时间】:2016-10-06 18:56:40
【问题描述】:

LocaleContext.getLocale() 返回当前作为“en_US_WOL”的语言环境对象。我使用断点验证了语言环境对象,看起来像英语,美国 - 美国的国家代码,WOL - 变体(语言环境对象的一个​​字段)。 变体字段如何以及为什么会为 getLocale() 方法附加和返回?我该如何阻止呢? (LocaleContext 是 ThreadLocal 类型)

【问题讨论】:

    标签: java locale


    【解决方案1】:

    根据http://docs.oracle.com/javase/6/docs/api/java/util/Locale.html

    variant 参数是供应商或浏览器特定的代码。例如,Windows 使用 WIN,Macintosh 使用 MAC,POSIX 使用 POSIX。如果有两个变体,请用下划线分隔它们,并将最重要的一个放在第一位。例如,传统的西班牙语排序规则可能会构造一个带有语言、国家和变体参数的语言环境:“es”、“ES”、“Traditional_WIN”。

    如果你在寻找特定变体的 Locale,我想你可以使用这个构造函数:

    Locale(String language, String country, String variant) 
    

    或调整浏览器的区域设置(如果您的应用程序涉及浏览器)

    【讨论】:

    • 我只需要输出为“en_US”。当我执行 getLocale() 时,我不想要变体“WOL”。如果有另一个仅返回 language_CountryCode 的函数,那么我将不得不修改我的 API(LocalContext 类)以调用该函数并在 getLocale() 上仅返回这两个值
    【解决方案2】:

    我也有这个问题。不幸的是,我还没有找到任何内置方法来很好地输出没有 Variant 的语言国家代码,所以我用这样的 sn-p 帮助自己(也许对某人很方便):

    public static String getLanguageCode(Locale locale) {
        StringBuilder sb = new StringBuilder();
        sb.append(locale.getLanguage());
        if (locale.getCountry() != null && locale.getCountry().length() > 0) {
            sb.append("-");
            sb.append(locale.getCountry());
        }
        return sb.toString();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多