14

我正在为微博平台上的消息设计一个架构,该平台需要具有定义的语言。这些消息将分布在许多节点之间的网络上,因此我需要使架构紧凑但仍然完全多语言。

我将使用IETF 语言代码enen-AU),但为了提高效率,我需要知道是否有特定的方式来表示它们。语言标签有多种标准,但当前规范RFC 5646通过保持与以前标准的向后兼容性而变得复杂。我不完全了解空间要求,因为有多个子标签。

表示 IETF 语言代码最节省空间的方式是什么?

4

1 回答 1

19

我认为处理语言环境代码的 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

但是,如果您只关心语言和脚本(而不是表示某些区域设置敏感数据(如日期和时间格式)的区域信息),那么您最多可以使用 13 个字符。

实际上,大多数标签最终只会成为该语言的两个字符。我经常处理并需要脚本子标签的唯一常见示例是sr-Latnsr-Cyrl(分别是用拉丁文或西里尔文书写的塞尔维亚文)、zh-Hant(繁体中文)和zh-Hans(简体中文)。此外,您很可能不需要变体,这意味着这些语言环境代码的大多数现实世界示例都应低于 17 个字符的限制。

于 2013-07-25T16:12:36.130 回答