到目前为止,我一直使用' 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'。这只是一个' bug'在Zend Framework中还是有其他原因吗?
答案 0 :(得分:75)
正确的国家/地区代码为en_GB
。区域设置使用ISO 3166-1作为国家/地区代码。 wikipedia writeup包括:
根据ISO 3166 / MA,选择代码“以反映 国家名称的重要,独特组成部分,以便允许 国家名称和国家代码之间的视觉关联“。[7]为此 原因,国家名称的共同组成部分,如“共和国”,“王国”, “联合”,“联邦”或“民主”通常不用于推导 代码元素。因此,例如,英国 官方分配了alpha-2代码GB而不是UK,基于 它的正式名称是“大不列颠及北爱尔兰联合王国” 爱尔兰“(尽管英国是应联合国的要求保留的 英国)。
答案 1 :(得分:20)
这确实是一个常见的(?)错误。 en_UK错了。英国的ISO国家/地区代码为GB,使语言标记为en_GB。
答案 2 :(得分:6)
不完美的实施
从1985年开始,ISO 3166-1 alpha-2代码已被用于 域名系统作为国家/地区代码顶级域名(ccTLD)。该 互联网号码分配机构目前分配ccTLD 主要遵循alpha-2代码,但有一些例外。[9]对于 例如,英国,其alpha-2代码是GB,使用.uk 而不是.gb作为其ccTLD,因为英国目前被特别保留 根据英国的要求,在ISO 3166-1中。
根据维基百科http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2。
显然,这是一件老旧的东西,或者类似的东西。
编辑:马丁克莱顿找到了更好的答案。答案 3 :(得分:4)
你不能简单地发明语言环境!它们已经定义好了。所以“en-gb”是英国英语,而“en-us”是美国英语。如果您使用“en-uk”,那么您只需编写代码。
至于为什么官方代码是“en-gb”而不是“en-uk”,我认为基本上是因为没有英国英语这样的东西。语言变体是英国人。请注意,英国和英国之间的差异是:
英国= GB +北爱尔兰
因此,通过命名变体“en-UK”,就像你说你想要在这个类别中包括他们在北爱尔兰的说话方式。但是你为什么要那样做呢?从语言学的角度来看,没有任何意义,因为北爱尔兰英语比英国英语更接近爱尔兰英语(en-IE)。
答案 4 :(得分:3)
大不列颠及北爱尔兰联合王国的ISO 3166中的正确国家/地区代码由于某种原因“GB”,因此区域代码应为en_GB,而不是en_UK,如上所述here。
en_GB也被glibc,gnome,kde等使用
此外,我喜欢这样一个事实:开源项目中许多以前的错误修复都与apache http 1.3和roundcube project
相关。