前言
"有"的阶段而已。趁着这个机会好好学习整理一下,为后面的技术选型做准备。
"何为国际化">何为国际化?
"你好!"替换为"What's up, man!",其实具体是分为以下5方面:
- 字符串替换
"你好!"替换为"What's up, man!"
. - 数字表示方式
"本地化的关键-language-tag">本地化的关键 —— Language Tag"en": { "name": "Enter Name" }, "zh-CN": { "name": "输入姓名" } }
"语法规则">语法规则
注意以下采用ABNF语言描述(ABNF的语法请参考语法规范:BNF与ABNF)
Language-Tag = langtag / privateuse / grandfathered langtag = language ["-" script] ["-" region] *("-" variant) *("-" extension) ["-" privateuse]
可以看到Language-Tag
分为langtag
,privateuse
和 grandfatherd
三个子类,下面我们先了解一般情况用不上的两个吧!
privateuse
"x" 1*("-" (1*8alphanum))
示例:x-zh-CN
是privateuse,其意思不一定与languagezh-CN
一致。
注意: 只作为小集团内部用可以,决不能大范围适用。
grandfathered
"en-GB-oed" ; irregular tags do not match
/ "i-ami" ; the 'langtag' production and
/ "i-bnn" ; would not otherwise be
/ "i-default" ; considered 'well-formed'
/ "i-enochian" ; These tags are all valid,
/ "i-hak" ; but most are deprecated
/ "i-klingon" ; in favor of more modern
/ "i-lux" ; subtags or subtag
/ "i-mingo"
/ "i-navajo"
/ "i-pwn"
/ "i-tao"
/ "i-tay"
/ "i-tsu"
/ "sgn-BE-FR"
/ "sgn-BE-NL"
/ "sgn-CH-DE"
regular = "art-lojban" ; these tags match the 'langtag'
/ "cel-gaulish" ; production, but their subtags
/ "no-bok" ; are not extended language
/ "no-nyn" ; or variant subtags: their meaning
/ "zh-guoyu" ; is defined by their registration
/ "zh-hakka" ; and all of these are deprecated
/ "zh-min" ; in favor of a more modern
/ "zh-min-nan" ; subtag or sequence of subtags
/ "zh-xiang"
注意: 几乎所有grandfarthered标签均可被当前registry的标签及其组合作替代(像i-tao
可以被tao
代替),因此如无意外请使用现行的标签吧。
下面就到了我们的重头戏langtag了,首先我们看看langtag下的第一个subtag——language.
Primary language subtag
"-" extlang] / 4ALPHA / 5*8ALPHA extlang = 3ALPHA *2("-" 3ALPHA)
看到language有三种形式,其中让我比较好奇的是第一种2*3ALPHA ["-" extlang]
。这种形式中前面的2*3ALPHA
称为macrolanguage,用于标明资源对应一种语言的汇总,而具体的某一种语言/方言则通过extlang指定。而包含extlang部分的language也被称为encompassed language.
如zh-cmn
和zh-yue
就是encompassed language,其中zh
是macrolanguage,而cmn
和yue
则是extlang。
"script-subtag">Script subtag
"region-subtag">Region subtag
"variant-subtag">Variant subtag
"extension-subtag">Extension subtag
"-" (2*8alphanum)) singleton = DIGIT / %x41-57 / %x59-5A / %x61-77 / %x79-7A
现在仅支持u
作为sigleton的值。
示例:de-DE-u-co-phonebk
表示采用电话本核对的方式对内容进行排序等操作。
更多关于language-tag的信息请参考BCP 47
如何选择Language Tag
"cmn"> 小陈说:"老大爷,东方广场怎么走啊?" 老大爷回答道:"<span lang="yue">你讲咩也啊?我听唔明喔。</span>" </p>
示例2:下文含大陆人讲英语、香港人讲普通话和美国人说英语
<p lang="cmn"> 小陈说:"<span lang="en-CN">Hi, where are you come from" 李先生说:"<span lang="cmn-HK">你的英文跟我的普通话一样普通啊,哈哈!</span>" Simon说:"<span lang="en">Hey, what's up!</span>" </p>