en_GB
和en-GB
?
ISO 639-1
(语言)和ISO 3166
(国家/地区)组合是否有ISO名称?
答案 0 :(得分:30)
有多个区域设置标识符系统。乍看之下,其中许多是相似的,但是当你走得更深时,情况并非如此:
一些例子(塞尔维亚语塞尔维亚语,拉丁语,日语和日语,基本排序):
将它想象成谈论颜色的不同方式(RGB,CMYB,HSV,Pantone等)
除非您指定所使用的环境,否则-
与_
没有任何意义。使用-
并且Java无法理解它,使用_
并且Windows将无法理解它。
ICU(以及在其上构建的系统)接受-
和_
,但产生_
样式。
没有ISO涵盖语言国家/地区的组合。但是有ISO涵盖了各个部分(语言,国家,脚本)。 ISO的确切版本还取决于用于区域设置标识符的系统。
一般来说,你应该同时接受_
和-
,并且只生成一个(“你接受的是自由的,你发出的是严格的”)(如ICU)。
如果使用其他类型的区域设置标识符与系统进行通信,则必须映射到系统或从系统映射。这将迫使您使用_
或-
。
一些映射将是有损的(没有办法在Windows,Linux中指定备用日历;或者在7岁以上的Java中使用备用排序或脚本等)并且可能无法进行往返(有点类似于转换RGB- CMYK)。
补充:不仅系统之间的情况不同,而且它们可以及时改变。例如,Java 7增加了对sr_RS和脚本的支持,Windows不断增加对更多语言环境的支持,创建新国家(苏丹分裂,俄罗斯,塞尔维亚)或消失(东德,美国,南斯拉夫等)。
对于内部表示,您可能希望选择能够代表所有内容的最强大的,即UTS-35 / BCP 47(也由CLDR和ICU使用)。
答案 1 :(得分:6)
语言环境是语言和地区(通常是国家/地区)的组合。
分隔符可以是_
或-
,但推荐的是破折号。
您可能正在寻找使用ISO 639-1语言代码和ISO 3166-1 alpha-2区域/国家代码(通常以大写字母书写)的BCP-47标准。
找到有关它们的更多信息答案 2 :(得分:5)
它在RFC 3066中涵盖了互联网,并表示" en-GB"不是" en_GB"
答案 3 :(得分:1)
这取决于技术。例如,在Java Locale.UK中将为您提供en_GB代码(如果您足够谨慎,可以调用toString()
)。这是您在模块之间传递的内容(除非您传递的是具体类型),这就是您要写入配置文件(即faces-context.xml)的内容。
另一方面,在.Net中,你肯定会使用en-GB。
en-GB表单肯定更常见,在大多数情况下,这是您应该使用的表单。
不同之处显而易见:分隔符:)否则没有区别(在意义上,特定技术可能会对Locale标识符施加一些约束)。
根据我的知识,没有ISO规范性文件可以处理语言和国家/地区的组合。在软件国际化中,它是Locale Model的一部分。