user.region,user.language,user.country和user.variant有什么区别?

rod*_*o42 8 java locale

我最近在我的系统中遇到了Java语言环境的问题,我试图使用这种配置运行一个项目:

-Duser.language=pt_BR
-Duser.country=BR
Run Code Online (Sandbox Code Playgroud)

谷歌搜索后,我发现这个网站让我改变我的配置:

-Duser.language=pt
-Duser.region=BR
-Duser.country=BR
Run Code Online (Sandbox Code Playgroud)

而问题已经消失.Additionaly我发现网页这样谈论使用所谓的另一个属性user.variant.

我不是在追求LC_*属性,我只是想找出这四个属性之间的区别是什么?

user.language
user.region
user.country
user.variant
Run Code Online (Sandbox Code Playgroud)

谢谢

Ren*_*ink 5

请查看http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html的javadoc.Locale

它描述了语言,变体等.


ala*_*inm 5

如果有一天上面的链接断开了......

https://docs.oracle.com/javase/8/docs/api/java/util/Locale.html复制粘贴

用户语言

ISO 639 alpha-2 或 alpha-3 语言代码,或最多 8 个字母的注册语言子标签(用于未来增强)。当一种语言同时具有 alpha-2 代码和 alpha-3 代码时,必须使用 alpha-2 代码。您可以在 IANA 语言子标签注册表中找到有效语言代码的完整列表(搜索“类型:语言”)。语言字段不区分大小写,但 Locale 始终规范化为小写。格式良好的语言值的形式为 [a-zA-Z]{2,8}。请注意,这不是完整的 BCP47 语言产品,因为它不包括 extlang。不需要它们,因为现代三字母语言代码取代了它们。示例:“en”(英语)、“ja”(日语)、“kok”(Konkani)

用户.地区/用户.国家

ISO 3166 alpha-2 国家代码或 UN M.49 numeric-3 区号。您可以在 IANA 语言子标签注册表中找到有效国家和地区代码的完整列表(搜索“类型:地区”)。country (region) 字段不区分大小写,但 Locale 始终规范化为大写。格式正确的国家/地区值的格式为 [a-zA-Z]{2} | [0-9]{3} 示例:“US”(美国)、“FR”(法国)、“029”(加勒比)

用户变体

用于指示区域设置变体的任意值。如果有两个或多个变体值,每个值都表示自己的语义,则这些值应按重要性排序,最重要的在前,用下划线('_')分隔。变体字段区分大小写。

注意:IETF BCP 47 对变体子标签设置了句法限制。此外,BCP 47 子标签严格用于指示定义语言或其方言的其他变体,这些变体未包含在语言、文字和地区子标签的任何组合中。您可以在 IANA 语言子标签注册表中找到有效变体代码的完整列表(搜索“类型:变体”)。

但是,Locale 中的变体字段历来用于任何类型的变体,而不仅仅是语言变体。例如,Java SE 运行时环境中可用的一些受支持变体表示替代的文化行为,例如日历类型或数字脚本。在 BCP 47 中,这种不识别语言的信息由扩展子标签或私人使用子标签支持。

格式正确的变体值的形式为 SUBTAG (('_'|'-') SUBTAG)* 其中 SUBTAG = [0-9][0-9a-zA-Z]{3} | [0-9a-zA-Z]{5,8}。(注意:BCP 47 只使用连字符 ('-') 作为分隔符,这更宽松)。

示例:“polyton”(Polytonic 希腊语)、“POSIX”