Java 什么';user.region、user.language、user.country和user.variant之间的区别是什么?
我最近在我的系统中遇到了Java语言环境的问题,我尝试使用以下配置运行一个项目:Java 什么';user.region、user.language、user.country和user.variant之间的区别是什么?,java,locale,Java,Locale,我最近在我的系统中遇到了Java语言环境的问题,我尝试使用以下配置运行一个项目: -Duser.language=pt_BR -Duser.country=BR 在谷歌搜索之后,我发现了让我将配置更改为: -Duser.language=pt -Duser.region=BR -Duser.country=BR 问题就解决了。另外,我还发现一些页面在谈论使用另一个名为user.variant的属性 我不是在寻找LC_*properties,我只是想找出这四个属性之间的区别 user.lang
-Duser.language=pt_BR
-Duser.country=BR
在谷歌搜索之后,我发现了让我将配置更改为:
-Duser.language=pt
-Duser.region=BR
-Duser.country=BR
问题就解决了。另外,我还发现一些页面在谈论使用另一个名为user.variant
的属性
我不是在寻找LC_*properties,我只是想找出这四个属性之间的区别
user.language
user.region
user.country
user.variant
谢谢请查看
语言环境的javadoc
它描述了语言、变体等。如果有一天上面的链接中断 复制粘贴自 用户语言 alpha-2或alpha-3语言代码,或注册语言子标签,最多8个字母(用于将来的增强)。当一种语言同时具有alpha-2代码和alpha-3代码时,必须使用alpha-2代码。您可以在IANA语言子标签注册表中找到有效语言代码的完整列表(搜索“类型:语言”)。language字段不区分大小写,但Locale始终规范化为小写。 格式良好的语言值的形式为[a-zA-Z]{2,8}。请注意,这不是完整的BCP47语言产品,因为它不包括extlang。因为现代的三字母语言代码取代了它们,所以不需要它们。 例如:“en”(英语)、“ja”(日语)、“kok”(Konkani) user.region/user.country 字母-2国家代码或UN M.49数字-3区号。您可以在IANA语言子标签注册表中找到有效国家和地区代码的完整列表(搜索“类型:地区”)。国家(地区)字段不区分大小写,但区域设置始终规范化为大写。 格式正确的国家/地区值的形式为[a-zA-Z]{2}|[0-9]{3} 例如:“美国”、“法国”、“029”(加勒比海) 用户变量 用于指示区域设置变化的任意值。如果存在两个或多个变量值,每个变量值都表示其自身的语义,则这些值应按重要性排序,最重要的值应首先用下划线(“”)分隔。变量字段区分大小写 注:IETF BCP 47对变体子标签进行了语法限制。此外,BCP 47子标签严格用于表示定义语言或其方言的其他变体,这些变体不包括在语言、脚本和区域子标签的任何组合中。您可以在IANA语言子标签注册表中找到有效变体代码的完整列表(搜索“类型:变体”) 然而,在历史上,Locale中的variant字段用于任何类型的变体,而不仅仅是语言变体。例如,Java SE运行时环境中提供的一些受支持的变体表示替代的文化行为,如日历类型或数字脚本。在BCP 47中,这种不识别语言的信息由扩展子标签或专用子标签支持 格式良好的变量值的形式为SUBTAG((“|’-”)SUBTAG)*,其中SUBTAG=[0-9][0-9a-zA-Z]{3}|[0-9a-zA-Z]{5,8}。(注意:BCP 47仅使用连字符(“-”)作为分隔符,这更为宽松) 示例:“polyton”(多声调希腊语),“POSIX”
谢谢,这澄清了很多。有时我们只是因为某种原因不看官方文件。唯一不完全清楚的是
user.country
和user.region
属性是否具有相同的效果(即使文档将其称为“国家(地区)”)。我只是手动测试了一下,它们确实是一样的。