如何解决语言代码和语言区域代码的良好定义是什么?
| 何时使用en_GB
和en-GB
?
有什么区别 ?
ISO 639-1
(语言)和ISO 3166
(国家/地区)组合是否有ISO名称?
解决方法
有几种语言环境标识符系统。乍一看,其中许多都是相似的,但是当您深入时,它们却并非如此:
一些示例(带有拉丁文字的塞尔维亚-塞尔维亚,带有基本排序的日语-日本):
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的确切版本还取决于语言环境标识符所使用的系统。
通常,您应该同时接受ѭ5和-
,并且只生成一个(“接受的内容是自由的,发出的内容是严格的”)(如ICU)。
如果使用其他类型的语言环境标识符与系统通信,则必须映射到系统或从系统映射。那将迫使您使用_
或-
。
某些映射将是有损的(在Windows,Linux中无法指定备用日历;在Java早于7时无法指定备用排序或脚本,等等),并且可能无法进行往返(有点类似于RGB- CMYK)。
另外:事情不仅在系统之间是不同的,而且可以随时间变化。例如Java 7增加了对sr_RS和脚本的支持,Windows不断增加对更多语言环境的支持,创建了新的国家(苏丹分裂,俄罗斯,塞尔维亚)或消失(东德,苏联,南斯拉夫)等等。
对于内部表示,您可能希望选择功能最强大的一种,它可以表示所有内容,即UTS-35 / BCP 47(也由CLDR和ICU使用)。
, 语言环境是语言和地区(通常是国家/地区)的组合。
分隔符可以是_
或-
,但推荐使用破折号。
可能您正在寻找使用ISO 639-1中的语言代码和ISO 3166-1 alpha-2中的地区/国家/地区代码的BCP-47标准(通常以大写形式编写)。
您可以在这里找到有关它们的更多信息http://blog.i18n.ro/simplified-locale-codes/
, RFC 3066中的Internet对此进行了覆盖,表示\“ en-GB \”而不是\“ en_GB \”
, 这取决于技术。例如,在Java Locale.UK中,您会得到en_GB代码(如果您足够关心调用toString()
)。这就是您要在模块之间传递的内容(除非您传递具体的类型),这就是您要写入配置文件(即faces-context.xml)的内容。
另一方面,在.Net中,您肯定会使用en-GB。
en-GB表格肯定更常见,在大多数情况下,这是您应该使用的表格。
区别是显而易见的:分隔符:)否则就没有区别(在含义上,特定技术可能会对Locale标识符施加一些约束)。
据我所知,没有ISO规范性文件处理语言和国家/地区组合。在软件国际化中,它是语言环境模型的一部分。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。