语言代码和区域设置代码的定义是什么?

37

  • 何时使用en_GBen-GB
  • 它们之间有什么区别?
  • 这种ISO 639-1(语言)和ISO 3166(国家)的组合是否有ISO名称?


  • 3
    好问题,当人们严格遵守标准时,确实很不错。 - Waldheinz
    4个回答

    39
    有几种区域标识符系统。许多在表面上看起来很相似,但深入了解后并非如此:
    一些例子(塞尔维亚- 拉丁文塞尔维亚,日本 - 日本 偏旁排序):
    UTS-35、ICU、Mac OS X、Flash:sr-Latn-RS、ja-JP@collation=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 的确切版本也取决于所用的区域标识符系统。
    总的来说,应该接受 _- 两种风格,并只生成一种风格("在接受时要宽松,在发出时要严格"),如 ICU 所示。
    如果与使用其他类型的区域标识符系统的系统进行通信,则必须进行映射到/从您的系统。这将强制您使用 _-。一些映射可能会有损耗(在Windows、Linux中无法指定替代日历;在Java 7之前的版本中无法指定替代排序或脚本等),而往返转换可能无法实现(类似于RGB-CMYK的转换)。
    补充说明:不仅系统之间存在差异,而且它们随时间变化。例如,Java 7增加了对sr_RS和脚本的支持,Windows不断添加对更多区域设置的支持,新的国家被创建(苏丹分裂,俄罗斯,塞尔维亚)或消失(东德,苏联,南斯拉夫)等。
    对于内部表示,您可能希望选择最强大的表示方式,可以表示一切,并且是UTS-35 / BCP 47(同时被CLDR和ICU使用)。

    8

    RFC 3066中,它涵盖了互联网,表示为“en-GB”,而不是“en_GB”。


    你是在谈论特定的用途吗?例如,在Unix/Linux系统上使用下划线。 - ak2
    @ak2 - 不,我说的是ISO 3066规范,它使用连字符而不是下划线。 - Lazarus
    ISO 3066(“复印机”)与此无关。你可能指的是RFC 3066,它确实规定了连字符,但这当然是特定于互联网的。ISO 3166定义了国家和地区代码,但据我所知,并未说明如何将它们与ISO 639语言代码结合使用。如果您引用标准的相关部分证明相反,可以随意进行证明。 - ak2
    你说得对,我把我的ISO和RFC搞混了(回答已相应地进行了编辑)。我没有兴趣证明这个规范是除了基于互联网之外的任何东西。 - Lazarus

    7
    一个locale是语言和地区(通常是一个国家)的组合。
    分隔符可以是_或者-,但是建议使用破折号。
    可能你正在寻找BCP-47标准,它使用ISO 639-1的语言代码和ISO 3166-1 alpha-2的地区/国家代码(通常写成大写)。
    你可以在这里找到更多关于它们的信息:http://blog.i18n.ro/simplified-locale-codes/

    这个问题并不特定于HTML、XML或类似的东西,但是你的答案是。在Unix/Linux环境中,下划线被使用而连字符则不被识别。 - ak2

    2
    这取决于技术。例如,在Java中,Locale.UK会给你en_GB代码(如果你足够关心调用toString())。这就是你在模块之间传递的内容(除非你传递具体类型),也是你写入配置文件(即faces-context.xml)的内容。
    另一方面,在.Net中,你肯定会使用en-GB。
    en-GB形式肯定更常见,在大多数情况下,这是你应该使用的形式。
    不同之处很明显:分隔符:)。否则没有区别(在含义上,特定技术可能对语言环境标识符施加一些限制)。
    据我所知,没有处理语言和国家组合的ISO规范文件。在软件国际化中,它是语言环境模型的一部分。

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