{
"en": { "name": "Enter Name" },
"zh-CN": { "name": "输入姓名" }
}
但除了[code]en[/code]和[code]zh-CN[/code]还有其他键吗?它们的组成规则又是如何的呢?下面我们来稍微深入的了解这些Language Tag吧!
[/*]
[/list]
[h2]语法规则[/h2]
注意以下采用ABNF语言描述(ABNF的语法请参考[url=http://kb.cnblogs.com/page/189566/]语法规范:BNF与ABNF[/url])
Language-Tag = langtag
/ privateuse
/ grandfathered
langtag = language
["-" script]
["-" region]
*("-" variant)
*("-" extension)
["-" privateuse]
可以看到[code]Language-Tag[/code]分为[code]langtag[/code],[code]privateuse[/code] 和 [code]grandfatherd[/code]三个子类,下面我们先了解一般情况用不上的两个吧!
[b]privateuse[/b]
标签的意思不由subtag registry定义,而是由使用的团队间私自定义、维护和使用。
格式:
privateuse = "x" 1*("-" (1*8alphanum))
示例:[code]x-zh-CN[/code]是privateuse,其意思不一定与language[code]zh-CN[/code]一致。
注意: 只作为小集团内部用可以,决不能大范围适用。
[b]grandfathered[/b]
用于向后兼容。由于RFC 4646前的标签无法完全匹配当前registry的标签语法和意思,因此通过grandfathered来提供向后兼容的特性。
语法:
grandfathered = irregular
/ regualr
irregular = "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的标签及其组合作替代(像[code]i-tao[/code]可以被[code]tao[/code]代替),因此如无意外请使用现行的标签吧。
下面就到了我们的重头戏langtag了,首先我们看看langtag下的第一个subtag——language.
[h3]Primary language subtag[/h3]
像[code]en[/code]这种就是Primary language subtag,用于标识资源所对应的语言。
语法:
language = 2*3ALPAH
["-" extlang]
/ 4ALPHA
/ 5*8ALPHA
extlang = 3ALPHA
*2("-" 3ALPHA)
看到language有三种形式,其中让我比较好奇的是第一种[code]2*3ALPHA ["-" extlang][/code]。这种形式中前面的[code]2*3ALPHA[/code]称为macrolanguage,用于标明资源对应一种语言的汇总,而具体的某一种语言/方言则通过extlang指定。而包含extlang部分的language也被称为encompassed language.
如[code]zh-cmn[/code]和[code]zh-yue[/code]就是encompassed language,其中[code]zh[/code]是macrolanguage,而[code]cmn[/code]和[code]yue[/code]则是extlang。
这里有个很有趣的事情是,我们认为普通话和广东话等都是汉语的方言,但西方却认为普通话、广东话根本就不属于一种语言,因此像[code]zh-cmn[/code]和[code]zh-yue[/code]在规范中被设置为redundant,建议直接使用[code]cmn[/code]和[code]yue[/code]等。不过由于历史原因,我们还是使用[code]zh-CN[/code]代表[code]cmn-CN[/code]。
另外现在可以作为macrolanguage的就只有7个标签([code]ar[/code],[code]kok[/code],[code]ms[/code],[code]sw[/code],[code]uz[/code],[code]zh[/code]和[code]sgn[/code])
另外几个和cmn类似的subtags如下
cmn 普通话(官话、国语) wuu 吴语(江浙话、上海话) czh 徽语(徽州话、严州话、吴语-徽严片) hak 客家语 yue 粤语(广东话) nan 闽南语(福建话、台语) cpx 莆仙话(莆田话、兴化语) cdo 闽东语 mnp 闽北语 zco 闽中语 gan 赣语(江西话) hsn 湘语(湖南话) cjy 晋语(山西话、陕北话)注意: 一般采用全小写 [h3]Script subtag[/h3] 用于指定字迹或文字系统资源所属的语言和方言等。 语法:
script = 4ALPHA注意: 一般采用首字母大写,后续字母全小写 [h3]Region subtag[/h3] 指定与国家、地域对应的语言/方言文化。 语法:
region = 2ALPHA / 3DIGIT注意: 一般采用全大写 [h3]Variant subtag[/h3] 指定其他subtag又无法提供的额外信息 语法:
variant = 5*8alphanum / (DIGIT 3alphanum)示例:[code]de-CH-1996[/code]其中1996是variant subtag,整体意思是在Switzerland使用的自1996改良过的德语。 [h3]Extension subtag[/h3] 提供一种机制让我们去扩展langtag 语法:
extension = singleton 1*("-" (2*8alphanum))
singleton = DIGIT
/ %x41-57
/ %x59-5A
/ %x61-77
/ %x79-7A
现在仅支持[code]u[/code]作为sigleton的值。
示例:[code]de-DE-u-co-phonebk[/code]表示采用电话本核对的方式对内容进行排序等操作。
更多关于language-tag的信息请参考[url=http://www.rfc-editor.org/rfc/bcp/bcp47.txt]BCP 47[/url]
[h2]如何选择Language Tag[/h2]
硬着头皮啃下这么多规范的内容,但我还不知道如何组合合适的language-tag呢:(其实选择和组合的原则就只有一条
[b]在足以区别当前上下文中其他language-tag的前提下,保持language-tag足够地短小精干[/b]
示例1:下文普通话、粤语并存
<p lang="cmn"> 小陈说:"老大爷,东方广场怎么走啊?" 老大爷回答道:"<span lang="yue">你讲咩也啊?我听唔明喔。</span>" </p>示例2:下文含大陆人讲英语、香港人讲普通话和美国人说英语
<p lang="cmn"> 小陈说:"<span lang="en-CN">Hi, where are you come from?</span>" 李先生说:"<span lang="cmn-HK">你的英文跟我的普通话一样普通啊,哈哈!</span>" Simon说:"<span lang="en">Hey, what's up!</span>" </p>那现在引出另一个问题,那就是我们怎么知道各个subtag具体定义了哪些值呢? 具体都定义在[url=http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry]IANA Language Subtag Registry[/url]中了。 假如觉得查找起来还是不方便,那么就使用[url=http://r12a.github.io/apps/subtags/]Language Subtag Lookup tool[/url]吧! 另外若不清楚各国各地区所使用的语言或方言时,可通过[url=http://www.ethnologue.com/]Ethnologue[/url]查看,直接点击地图上的区域即可获取相应的subtag信息。 [h1]总结[/h1] 现在我们已经对国际化和本地化有了更全面的理解,也对Language tag有了更深入的认识,现在是不是迫不及待想挽起袖子撸代码呢?敬请期待下篇《JS魔法堂:不完全国际化&本地化手册 之 实战篇》 [h1]感谢[/h1] [url=http://www.zhihu.com/question/20797118]网页头部的声明应该是用 lang="zh" 还是 lang="zh-cn"?[/url] [url=http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry]Language Subtag Registry[/url] [url=http://www.rfc-editor.org/rfc/bcp/bcp47.txt]BCP 47[/url] [url=https://www.w3.org/International/getting-started/language]Language on the Web[/url] [url=https://www.w3.org/International/questions/qa-choosing-language-tags]Choosing a Language Tag[/url] [url=https://www.w3.org/International/articles/language-tags/]Language tags in HTML and XML[/url]
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有