语言代码和语言环境代码的定义是什么?

时间:2011-05-27 12:37:23

标签: localization internationalization locale

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

  • 4 个答案:

    答案 0 :(得分:30)

    有多个区域设置标识符系统。乍看之下,其中许多是相似的,但是当你走得更深时,情况并非如此:

    一些例子(塞尔维亚语塞尔维亚语,拉丁语,日语和日语,基本排序):

    • 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等)

    除非您指定所使用的环境,否则-_没有任何意义。使用-并且Java无法理解它,使用_并且Windows将无法理解它。 ICU(以及在其上构建的系统)接受-_,但产生_样式。

    没有ISO涵盖语言国家/地区的组合。但是有ISO涵盖了各个部分(语言,国家,脚本)。 ISO的确切版本还取决于用于区域设置标识符的系统。


    一般来说,你应该同时接受_-,并且只生成一个(“你接受的是自由的,你发出的是严格的”)(如ICU)。

    如果使用其他类型的区域设置标识符与系统进行通信,则必须映射到系统或从系统映射。这将迫使您使用_-。 一些映射将是有损的(没有办法在Windows,Linux中指定备用日历;或者在7岁以上的Java中使用备用排序或脚本等)并且可能无法进行往返(有点类似于转换RGB- CMYK)。

    补充:不仅系统之间的情况不同,而且它们可以及时改变。例如,Java 7增加了对sr_RS和脚本的支持,Windows不断增加对更多语言环境的支持,创建新国家(苏丹分裂,俄罗斯,塞尔维亚)或消失(东德,美国,南斯拉夫等)。

    对于内部表示,您可能希望选择能够代表所有内容的最强大的,即UTS-35 / BCP 47(也由CLDR和ICU使用)。

    答案 1 :(得分:6)

    语言环境是语言和地区(通常是国家/地区)的组合。

    分隔符可以是_-,但推荐的是破折号。

    您可能正在寻找使用ISO 639-1语言代码和ISO 3166-1 alpha-2区域/国家代码(通常以大写字母书写)的BCP-47标准。

    您可以在http://blog.i18n.ro/simplified-locale-codes/

    找到有关它们的更多信息

    答案 2 :(得分:5)

    它在RFC 3066中涵盖了互联网,并表示" en-GB"不是" en_GB"

    答案 3 :(得分:1)

    这取决于技术。例如,在Java Locale.UK中将为您提供en_GB代码(如果您足够谨慎,可以调用toString())。这是您在模块之间传递的内容(除非您传递的是具体类型),这就是您要写入配置文件(即faces-context.xml)的内容。
    另一方面,在.Net中,你肯定会使用en-GB。

    en-GB表单肯定更常见,在大多数情况下,这是您应该使用的表单。

    不同之处显而易见:分隔符:)否则没有区别(在意义上,特定技术可能会对Locale标识符施加一些约束)。

    根据我的知识,没有ISO规范性文件可以处理语言和国家/地区的组合。在软件国际化中,它是Locale Model的一部分。