语言代码和语言区域代码的良好定义是什么?

问题描述

| 何时使用
en_GB
en-GB
? 有什么区别 ?
ISO 639-1
(语言)和
ISO 3166
(国家/地区)组合是否有ISO名称?     

解决方法

        有几种语言环境标识符系统。乍一看,其中许多都是相似的,但是当您深入时,它们却并非如此: 一些示例(带有拉丁文字的塞尔维亚-塞尔维亚,带有基本排序的日语-日本): UTS-35,ICU,Mac OS X,Flash:sr-Latn-RS,ja-JP @ collat​​ion = radical 较新的UTS-35,BCP 47扩展U:sr-Latn-RS,ja-JP-u-co-unihan Win 2000,XP:0x81a,0x10411 Vista,Win 7:sr-Latn-CS,ja-JP_radical Java:sr_CS,ja_JP Java 7:sr_RS,ja_JP Linux:sr_RS @ latin,ja_JP.utf8 可以将其视为谈论颜色(RGB,CMYB,HSV,Pantone等)的不同方式 因此,除非您指定所使用的环境,否则
-
vs.
_
没有意义。使用
-
,Java将无法理解,使用
_
,Windows将不会理解。 ICU(及其上构建的系统)接受
-
_
,但产生
_
样式。 没有涵盖语言国家组合的ISO。但是有些ISO涵盖了各个部分(语言,国家/地区,脚本)。 ISO的确切版本还取决于语言环境标识符所使用的系统。 通常,您应该同时接受ѭ5和
-
,并且只生成一个(“接受的内容是自由的,发出的内容是严格的”)(如ICU)。 如果使用其他类型的语言环境标识符与系统通信,则必须映射到系统或从系统映射。那将迫使您使用
_
-
。 某些映射将是有损的(在Windows,Linux中无法指定备用日历;在Java早于7时无法指定备用排序或脚本,等等),并且可能无法进行往返(有点类似于RGB- CMYK)。 另外:事情不仅在系统之间是不同的,而且可以随时间变化。例如Java 7增加了对sr_RS和脚本的支持,Windows不断增加对更多语言环境的支持,创建了新的国家(苏丹分裂,俄罗斯,塞尔维亚)或消失(东德,苏联,南斯拉夫)等等。 对于内部表示,您可能希望选择功能最强大的一种,它可以表示所有内容,即UTS-35 / BCP 47(也由CLDR和ICU使用)。     ,        语言环境是语言和地区(通常是国家/地区)的组合。 分隔符可以是
_
-
,但推荐使用破折号。 可能您正在寻找使用ISO 639-1中的语言代码和ISO 3166-1 alpha-2中的地区/国家/地区代码的BCP-47标准(通常以大写形式编写)。 您可以在这里找到有关它们的更多信息http://blog.i18n.ro/simplified-locale-codes/     ,        RFC 3066中的Internet对此进行了覆盖,表示\“ en-GB \”而不是\“ en_GB \”     ,        这取决于技术。例如,在Java Locale.UK中,您会得到en_GB代码(如果您足够关心调用
toString()
)。这就是您要在模块之间传递的内容(除非您传递具体的类型),这就是您要写入配置文件(即faces-context.xml)的内容。 另一方面,在.Net中,您肯定会使用en-GB。 en-GB表格肯定更常见,在大多数情况下,这是您应该使用的表格。 区别是显而易见的:分隔符:)否则就没有区别(在含义上,特定技术可能会对Locale标识符施加一些约束)。 据我所知,没有ISO规范性文件处理语言和国家/地区组合。在软件国际化中,它是语言环境模型的一部分。