en_UK是非法的语言环境吗?

81

到目前为止,我一直使用' en_UK '来表示英式英语。今天在使用Zend框架时,出现了错误,因为该区域设置未包含在已识别的区域设置列表中。

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

'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中的“错误”还是有其他原因呢?


2
Zend的语言环境索引确认en_GB是英国英语,但我没有看到en_UK,所以我猜en_GB更受欢迎。http://framework.zend.com/manual/en/zend.locale.appendix.html - Bailey Parker
8
官方ISO页面提到了GB作为有效代码,但没有提到UK:http://www.iso.org/iso/country_codes/iso_3166_code_lists/country_names_and_code_elements.htm - Bailey Parker
@PHPMyCoder:是的,这就是答案已经展示的内容! - markus
1
在本地化世界中,uk代表乌克兰,而不是英国 :) - Ilya Saunkin
1
@Ilya,那是我查了一下。我相信乌克兰语是uk,但乌克兰本身是UA,即uk_UA。 - Robert Jørgensgaard Engdahl
5个回答

100
正确的国家代码是en_GB。区域设置使用ISO 3166-1国家代码。维基百科文章包括:
引用: 代码是根据ISO 3166 / MA选择的,“以反映国家名称的重要,独特组成部分,以便允许国家名称和国家代码之间的视觉关联。” [7]因此,通常不使用国家名称的常见组件,例如“共和国”,“王国”,“联合”,“联邦”或“民主”来推导代码元素。因此,例如,英国根据其官方名称“大不列颠及北爱尔兰联合王国”(尽管英国保留了根据英国的要求)。正式分配alpha-2代码GB,而不是UK。

28
为什么“US”是有效的? - qdot
2
@qdot 这些似乎是使用的指南,而不是硬性规定。对我来说,“US”似乎是一个合理的缩写,表示“美国”。作为一名英国人,我认为“GB”比“UK”更合适,因为后者似乎很平淡 - 但这只是我的个人意见。 - martin clayton
19
美国可能使用的唯一其他短代码是“SA”(去掉“United”),但这个代码已经被沙特阿拉伯和南非争夺了。 AM是亚美尼亚的代码,但由于阿根廷已经使用了AR,亚美尼亚不能使用。因此,我们只能使用US作为美国的代码。 - David Schwartz
7
你本可以选择AA。 - GolezTrol
3
塞尔维亚的情况是什么?它的ISO代码为RS,代表塞尔维亚共和国(Republika Srbija)。好奇... - Felipe Buccioni
显示剩余3条评论

21

这确实是一个常见的错误。 en_UK 是错误的。英国的 ISO 国家代码是 GB,因此语言标签应为 en_GB。


但我在很多地方都看到了这个东西!甚至PHP手册也免不了使用en_UK。 - markus
2
没有ISO区域设置。有ISO语言代码ISO国家代码IETF语言标签。但我猜你指的是C/POSIX locale - mercator
1
我参考了语言标签,它由两个ISO代码(在这种情况下)组成。实际问题是,在这种情况下,国家代码(ISO 3166-1 alpha-2)为GB而不是UK。UK已被保留(应英国的要求),但无效使用。但我希望我的答案仅指出具体错误(错误代码与正确代码),而不是历史课程。尽管如此,它不应该是错误的,所以我稍微改变了那句话。 - GolezTrol
1
语言标签应该是 en-GB,POSIX 区域设置是 en_GB。是的,我很挑剔。但我相信 ZF 没有提供任何在两者之间转换的函数,所以你可能最终会在你的 HTML 中得到 无效lang="en_GB" - mercator
1
ZF 将 en-GB 和 en_GB 都视为合法的本地化字符串。 - markus
@markus 但是HTML标准不认为带有下划线的语言标签是“合法”的,它们必须是HTML标签中“lang”属性中的IETF BCP 47代码。是的,我是8年后才评论的... - ADJenks

7
不完美的实现
自1985年起,ISO 3166-1 alpha-2代码已被用作国家代码顶级域名(ccTLD)在域名系统中使用。Internet分配数字机构目前主要按照alpha-2代码分配ccTLDs,但有一些例外。例如,英国的alpha-2代码是GB,但它使用.uk而不是.gb作为其ccTLD,因为英国目前在ISO 3166-1上的请求特殊预留了UK。
根据维基百科http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2的说法,这似乎是一个旧的事情,但已经成为了惯例。
编辑:马丁克莱顿找到了更好的答案。

5
您不能随意发明语言地区代码!它们已经被定义好了。因此,“en-gb”是英国英语,而“en-us”则是美国英语。如果您使用“en-uk”,那么您只是在编造一个代码。
至于为什么官方代码是“en-gb”,而不是“en-uk”,我认为主要是因为不存在所谓的英国英语。这种语言变体是英国英语。请注意,大不列颠和北爱尔兰联合王国之间的区别是:
英国 = 大不列颠 + 北爱尔兰
因此,将这个变体命名为“en-uk”,就好像您想要在这个类别中包括他们在北爱尔兰所说的方式一样。但是,您为什么要这样做呢?从语言学的角度来看,这是毫无意义的,因为北爱尔兰英语更接近于爱尔兰英语(en-IE),而不是英国英语。

我认为这个答案很有趣(从语言学的角度来看 :-) 很想听听那些给它点踩的人的理由。(尽管它没有像@martin_clayton的回答那样提供完整的背景) - Per Lundberg
1
@Per:从语言学角度来看,这很有趣,但事实上是错误的,因为在这种情况下,“GB”是整个英国(包括北爱尔兰,令人感到反直觉)的ISO国家代码,而不仅仅是英格兰、威尔士和苏格兰。毫无疑问,有些北爱尔兰人会更喜欢将ISO国家代码设置为UK。 - Steve Jessop
1
@SteveJessop 很有趣。这可能是为什么英国使用.uk作为他们的顶级域名,因为使用.gb更符合ISO标准,但它实际上并没有反映现实情况,因为该国实际上是“大不列颠及北爱尔兰联合王国”。 - Per Lundberg

4
英国的ISO 3166国家代码是"GB",因此语言环境代码应该是en_GB,而不是如此处所述的en_UK。en_GB也被glibc、gnome、kde等广泛使用。此外,我喜欢许多以前的开源项目中与此相关的错误修复,例如apache http 1.3roundcube project

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接