代码之家  ›  专栏  ›  技术社区  ›  wannaBeDev

区域设置对象初始化的差异

  •  0
  • wannaBeDev  · 技术社区  · 2 周前

    这两种创建 Locale :

    Locale uk    = Locale.UK;
    
    Locale en_uk = new Locale("en", "UK");
    

    到目前为止,我注意到的唯一区别是 getDisplayCountry 返回不同的值。第一个 United Kingdom 第二个 UK ,这并不怎么困扰我。除此之外还有什么区别吗?特别是因为我想在德国、法国、韩国等其他地区采用第一种风格

    2 回复  |  直到 2 周前
        1
  •  5
  •   Basil Bourque    2 周前

    tl;博士

    • 国家/地区代码错误。
    • 不使用 Locale 常数。使用 Locale.of .
    Locale.of( "en" , "GB" )  // For English language, and cultural norms of United Kingdom.
    

    其他示例:

    • Locale.of( "en" , "CA" ) 在加拿大学习英语。
    • Locale.of( "fr" , "CA" ) 加拿大的法语。
    • Locale.of( "en" , "US" ) 美国的英语。

    GB UK

    出于您的目的,的正确国家/地区代码 United Kingdom of Great Britain and Northern Ireland GB 英国 ,如Mark Rotteveel所评论。

    CLDR

    现代Java( 9+ ) uses by default 这个 Common Locale Data Repository (CLDR) 作为定位数据的主要来源。 Entry # 827 在CLDR中显示的国家代码为 GB 对于 大不列颠联合王国 .

    标准国家代码

    这个 Javadoc for Locale 规定国家/地区代码必须为:

    如果好奇,请转储到控制台:

    Arrays.stream( Locale.getISOLanguages() ).forEach( System.out::println );  // All 2-letter country codes defined in ISO 3166.
    Arrays.stream( Locale.getISOCountries() ).forEach( System.out::println );  // All 2-letter language codes defined in ISO 639.
    

    Javadoc还指出,完整的列表可以在 IANA Language Subtag Registry 有一个提示可以搜索 Type: region 。在那里,我们发现这个条目告诉我们使用 GB 为联合王国。

    %%
    Type: region
    Subtag: GB
    Description: United Kingdom
    Added: 2005-10-16
    Comments: as of 2006-03-29 GB no longer includes the Channel Islands and
      Isle of Man; see GG, JE, IM
    %%
    

    验证器

    这个 Comment by andrewJames 指向我们 this online validator 通过 Christoph Schneegans 对于 IETF BCP 47 language tag 语言和国家代码相结合。

    我们看到了 en-UK 失败,而 en-GB 通过。

    避免 场所 常量

    正如在另一个问题中所讨论的,Java团队已经要求您忽略 those constants 定义于 场所 类如 Locale.UK Locale.CANADA_FRENCH .他们的创作在设计上是一个草率而糟糕的决定。有关更多信息,请参阅 my longer Answer .

    相反,在现代Java中( 19+ ),使用方便的静态工厂方法 Locale.of .

    场所英国 ,的区域设置(“en”,“GB”)

    看见 第个位置,共个 在行动中。

    Locale locale = Locale.of( "en" , "GB" ) ;