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" ) ;