lia*_*dee 9 language-agnostic multilingual database-design types internationalization
我正在微博平台上设计一个消息模式,需要有一个定义的语言.这些消息将在许多节点之间的网络中分布,因此我需要使模式紧凑但仍然完全多语言.
我将使用IETF语言代码(en,en-AU等等),但我需要知道,如果有代表他们对效率的目的,以特定的方式.语言标签有多种标准,但目前的规范RFC 5646通过保持与先前标准的向后兼容性而复杂化.我不完全理解空间要求,因为有多个子标签.
表示IETF语言代码的最节省空间的方法是什么?
She*_*vin 13
我认为IETF处理区域代码的规范确实是业界"最佳通用实践",但绝对不能妥协以保持向后兼容性等.我仍然建议根据您的需要调整它,因为最重要的国际化库和标准(Unicode,ICU)正在使用它.
BCP47/RFC5646 第4.4.1节建议使用35个字符的标签长度:
language = 8 ; longest allowed registered value
; longer than primary+extlang
; which requires 7 characters
script = 5 ; if not suppressed: see Section 4.1
region = 4 ; UN M.49 numeric region code
; ISO 3166-1 codes require 3
variant1 = 9 ; needs 'language' as a prefix
variant2 = 9 ; very rare, as it needs
; 'language-variant1' as a prefix
total = 35 characters
Figure 7: Derivation of the Limit on Tag Length
Run Code Online (Sandbox Code Playgroud)
但是如果您只关心语言和脚本(而不是区域信息表示某些区域设置敏感数据,如日期和时间格式),那么您最多可以使用13个字符.
实际上,大多数标签最终只会是该语言的两个字符.我对付定期需要脚本的子标签的唯一常见的例子是sr-Latn和sr-Cyrl(分别为塞尔维亚拉丁文写的或西里尔文), zh-Hant(中国传统),和zh-Hans(简体中国).此外,很可能您不需要变体,这意味着这些区域代码的大多数现实世界示例应该低于17个字符的限制.