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

dan*_*car 30 locale localization internationalization

  • 当使用en_GBen-GB
  • 有什么不同 ?
  • 这个ISO 639-1(语言)和ISO 3166(国家)组合是否有ISO名称?

  • Mih*_*ita 31

    区域设置标识符有多个系统.其中许多乍一看是相似的,但是当你走得更深时却不是这样:

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

    • 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使用).


    sor*_*rin 7

    区域设置是语言和区域(通常是国家/地区)的组合.

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

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

    您可以在http://blog.i18n.ro/simplified-locale-codes/找到有关它们的更多信息.


    Laz*_*rus 6

    它在RFC 3066中用于Internet,表示"en-GB"而不是"en_GB"