en_UK是非法的语言环境吗?

到目前为止,我一直使用英国英语的“en_UK”。 今天我在Zend Framework中使用它时遇到了错误,因为语言环境没有包含在已识别的语言环境的长列表中。

以下是该列表的简短摘录:

'ee_GH' => true, 'ee_TG' => true, 'ee' => true, 'el_CY' => true, 'el_GR' => true, 'el' => true, 'en_AS' => true, 'en_AU' => true, 'en_BE' => true, 'en_BW' => true, 'en_BZ' => true, 'en_CA' => true, 'en_GB' => true, 'en_GU' => true, 'en_HK' => true, 'en_IE' => true, 'en_IN' => true, 'en_JM' => true, 'en_MH' => true, 'en_MP' => true, 'en_MT' => true, 'en_NA' => true, 'en_NZ' => true, 'en_PH' => true, 'en_PK' => true, 'en_SG' => true, 'en_TT' => true, 'en_UM' => true, 'en_US' => true, 'en_VI' => true, 'en_ZA' => true, 'en_ZW' => true, 'en' => true, 'eo' => true, 'es_AR' => true, 'es_BO' => true, 'es_CL' => true, 'es_CO' => true, 'es_CR' => true, 'es_DO' => true, 

正如你所看到的,有各种各样的英语地区,还有一个“en_GB”的条目,我认为它代表了英国……但是没有“en_UK”。 这只是Zend Framework中的一个“错误”吗?还是有其他原因呢?

正确的国家代码是en_GB 。 区域设置使用ISO 3166-1国家代码。 维基百科的文章包括:

根据ISO 3166 / MA,这些代码被select为“反映国名的重要,独特的组成部分,以允许国名和国家代码之间的视觉关联”[7]。 出于这个原因,像“共和国”,“王国”,“联合国”,“联邦”或“民主”等国名的通用组成部分通常不用于派生代码元素。 因此,例如,根据英国的正式名称“大不列颠及北爱尔兰联合王国”,联合王国正式被指定为阿尔法2 GB而非英国(尽pipe英国是应联合王国的要求保留的)。

这确实是一个常见的(?)错误。 en_UK是错误的。 英国的ISO国家代码是GB,制作语言标签en_GB。

不完美的实现

从1985年开始,国际标准顶级域(ccTLD)在域名系统中使用了ISO 3166-1 alpha-2编码。 互联网号码分配当局目前主要根据alpha-2代码分配ccTLD,但有一些例外情况。 例如,英国的alpha-2代码是GB,使用.uk代替.gb作为其ccTLD,因为英国目前在英国的要求下特别保留在ISO 3166-1中。

根据维基百科http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2

所以显然这是一个老东西卡住或类似的东西。

编辑:martin claytonfind了更好的答案。

你不能简单地发明语言! 他们已经定义。 所以“en-gb”是英式英语,而“en-us”是美式英语。 如果你使用“en-uk”,你只是编写一个代码。

至于为什么官方代码是“en-gb”而不是“en-uk”,我认为基本上是因为没有英国英语这样的东西。 语言变体是英国的。 请注意,英国与英国的区别在于:

英国= GB +北爱尔兰

所以通过命名“en-UK”这个变种,就好像你在说要在这个范畴内包括他们在北爱尔兰的发言方式。 但是,你为什么要这样做呢? 从语言的angular度来看,这是没有意义的,因为北爱尔兰英语比英式英语更接近爱尔兰英语(en-IE)。

大不列颠及北爱尔兰联合王国在ISO 3166中正确的国家代码由于某种原因是“GB”的,所以区域代码应该是en_GB,而不是en_UK,如此处所述。

en_GB也被glibc,gnome,kde等使用

另外我喜欢这样一个事实,许多以前在开源项目中的错误修复都与这个在Apache HTTP 1.3和roundcube项目