Database design IETF语言代码应该使用什么数据类型?

Database design IETF语言代码应该使用什么数据类型?,database-design,types,internationalization,language-agnostic,multilingual,Database Design,Types,Internationalization,Language Agnostic,Multilingual,我正在为微博平台上的消息设计一个模式,它需要有一个定义的语言。这些消息将分布在多个节点之间的网络中,因此我需要使模式紧凑,但仍然是完全多语言的 我将使用(en,en-AU等),但我需要知道是否有一种特定的方式来表示它们以提高效率。语言标记有多种标准,但是当前的规范由于与以前的标准保持向后兼容性而变得复杂。我不完全理解空间需求,因为有多个子标签 什么是表示IETF语言代码的最节省空间的方式?我认为IETF规范处理语言环境代码确实是业界的“最佳通用做法”,但在保持向后兼容性等方面绝对不能没有妥协。由

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

我将使用(
en
en-AU
等),但我需要知道是否有一种特定的方式来表示它们以提高效率。语言标记有多种标准,但是当前的规范由于与以前的标准保持向后兼容性而变得复杂。我不完全理解空间需求,因为有多个子标签


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

我认为IETF规范处理语言环境代码确实是业界的“最佳通用做法”,但在保持向后兼容性等方面绝对不能没有妥协。由于最重要的国际化库和标准(Unicode、ICU)都在使用它,我仍然建议您根据自己的需要调整它

BCP47/RFC5646建议使用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 Latn
sr Cyrl
(分别用拉丁语或西里尔语编写的塞尔维亚语)、
zh Hant
(繁体中文)和
zh Hans
(简体中文)。此外,您很可能不需要这些变体,这意味着这些语言环境代码的大多数实际示例应在17个字符的限制范围内