8

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

-Duser.language=pt_BR
-Duser.country=BR

谷歌搜索后,我发现这个网站让我将配置更改为:

-Duser.language=pt
-Duser.region=BR
-Duser.country=BR

问题消失了。另外,我发现这样的页面谈论使用另一个名为user.variant.

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

user.language
user.region
user.country
user.variant

谢谢

4

2 回答 2

5

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

它描述了语言、变体等。

于 2013-09-20T13:49:45.103 回答
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”(康卡尼语)

user.region/user.country

ISO 3166 alpha-2 国家代码或 UN M.49 numeric-3 区域代码。您可以在 IANA 语言子标签注册表中找到有效国家和地区代码的完整列表(搜索“类型:地区”)。国家(地区)字段不区分大小写,但 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”(多调希腊语)、“POSIX”

于 2017-08-07T12:35:22.570 回答