html 4.01中的lang属性——实际上它是一个刮胡刀 - 博客园

文章推薦指數: 80 %
投票人數:10人

Whitespace is not allowed within the language-code. Language codes are case-insensitive. W3C的规定是:HTML 4.01中的lang的属性值使用RFC1766中的 ... 首页 新闻 博问 专区 闪存 班级 我的博客 我的园子 账号设置 简洁模式... 退出登录 注册 登录 sink_cup 细节控制CCN 详解W3C标准:html4.01中的lang属性——实际上它是一个刮胡刀 在HTML和XHTML中的lang属性使用什么值呢? 是使用zh-CN、zh-Hans还是zh-Hans-CN? 是使用zh-CN还是zh-cn,是否区分大小写? 是使用yue-Hans还是zh-yue-Hans呢? 为什么浏览器中一直使用zh-cn? 这是一段HTML4.01代码: HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

         实际上它是一个刮胡刀

它是一个刮胡刀

佢系一个须刨嚟嘅

先看W3CHTML4.01标准: HTML4.01Specification(W3CRecommendation24December1999):http://www.w3.org/TR/html401/#toc  第6章(BasicHTMLdatatypes)——第8节(Languagecodes):http://www.w3.org/TR/html401/types.html#h-6.8  原文如下: 6.8Languagecodes Thevalueofattributeswhosetypeisalanguagecode(%LanguageCodeintheDTD)referstoalanguagecodeasspecifiedby[RFC1766],section2.ForinformationonspecifyinglanguagecodesinHTML,pleaseconsultthesectiononlanguagecodes.Whitespaceisnotallowedwithinthelanguage-code. Languagecodesarecase-insensitive. W3C的规定是:HTML4.01中的lang的属性值使用RFC1766中的定义值。

HTML4.01的语言代码不区分大小写。

详细信息:http://www.w3.org/TR/html401/struct/dirlang.html#langcodes    原文如下: 8.1.1Languagecodes Thelangattribute'svalueisalanguagecodethatidentifiesanaturallanguagespoken,written,orotherwiseusedforthecommunicationofinformationamongpeople.Computerlanguagesareexplicitlyexcludedfromlanguagecodes. [RFC1766]definesandexplainsthelanguagecodesthatmustbeusedinHTMLdocuments. Briefly,languagecodesconsistofaprimarycodeandapossiblyemptyseriesofsubcodes: language-code=primary-code("-"subcode)* Herearesomesamplelanguagecodes: "en":English "en-US":theU.S.versionofEnglish. "en-cockney":theCockneyversionofEnglish. "i-navajo":theNavajolanguagespokenbysomeNativeAmericans. "x-klingon":Theprimarytag"x"indicatesanexperimentallanguagetag Two-letterprimarycodesarereservedfor[ISO639]languageabbreviations.Two-lettercodesincludefr(French),de(German),it(Italian),nl(Dutch),el(Greek),es(Spanish),pt(Portuguese),ar(Arabic),he(Hebrew),ru(Russian),zh(Chinese),ja(Japanese),hi(Hindi),ur(Urdu),andsa(Sanskrit). Anytwo-lettersubcodeisunderstoodtobea[ISO3166]countrycode. 即: lang的属性值表示语言代码,定义了人们之间通过说话、书写或其他方式进行交流的语言。

RFC1766定义了HTML中必须使用的语言代码。

语言代码包括一个主代码和一系列子代码,主代码必须使用,子代码可以不使用。

格式为:主代码、主代码-子代码、主代码-子代码-子代码、…… 例如:en表示英语,en-US表示美国英语。

2个字母的主代码按照ISO639的规定执行,包括fr(French),de(German),it(Italian),nl(Dutch),el(Greek),es(Spanish),pt(Portuguese),ar(Arabic),he(Hebrew),ru(Russian),zh(Chinese),ja(Japanese),hi(Hindi),ur(Urdu),andsa(Sanskrit)。

2个字母的子代码与ISO3166国家代码一致。

  下面先来看RFC1766:http://www.ietf.org/rfc/rfc1766.txt RFC1766由互联网工程工作小组(TheInternetEngineeringTaskForce,IETF)发行,网站http://www.ietf.org/。

RFC1766的意思是: 主语言标签: 2个字母的主语言标签与ISO标准639一致("Codefortherepresentationofnamesoflanguages"[ISO639]),不允许使用标准以外的其他值。

第一个子语言标签: 2个字母的子语言标签与ISO3166alpha-2(2个字母的代码表)一致。

3到8个字母的子语言标签按照IANA的登记执行,按照第5章的说明进行使用。

NOTE:TheISO639/ISO3166conventionisthatlanguagenamesare writteninlowercase,whilecountrycodesarewritteninuppercase. Thisconventionisrecommended,butnotenforced;thetagsarecase insensitive. 注意:ISO639和ISO3166约定语言名称使用小写,国家代码使用大写。

这是一个推荐使用的惯例,并不是强制要求;语言代码是不区分大小写的。

再来看ISO639: [ISO639]"Codesfortherepresentationofnamesoflanguages",ISO639:1988.Formoreinformation,consulthttp://www.iso.ch/cate/d4766.html.Referalsotohttp://www.oasis-open.org/cover/iso639a.html. 按照维基百科(http://zh.wikipedia.org/zh-cn/ISO_639)的资料:ISO639是数个由国际标准化组织(ISO)为各语言所订定的语言代码。

此标准还在持续更新。

1988年的ISO639标准:http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt TechnicalcontentsofISO639:1988(E/F) "Codefortherepresentationofnamesoflanguages". [email protected] Minorcorrections,1992-09-08byKeldSimonsen Sundanesecorrected,1992-11-11byKeldSimonsen Telugucorrected,1995-08-24byKeldSimonsen Hebrew,Indonesian,Yiddishcorrected1995-10-10byMichaelEverson Inuktitut,Uighur,Zhuangadded1995-10-10byMichaelEverson Sinhalesecorrected,1995-10-10byMichaelEverson FaeroesecorrectedtoFaroese,1995-11-18byKeldSimonsen SangrocorrectedtoSangho,1996-07-28byKeldSimonsen Two-letterlower-casesymbolsareused. TheRegistrationAuthorityforISO639isInfoterm,Osterreichisches Normungsinstitut(ON),Postfach130,A-1021Vienna,Austria. aaAfar abAbkhazian afAfrikaans amAmharic arArabic asAssamese ayAymara azAzerbaijani baBashkir beByelorussian bgBulgarian bhBihari biBislama bnBengali;Bangla boTibetan brBreton caCatalan coCorsican csCzech cyWelsh daDanish deGerman dzBhutani elGreek enEnglish eoEsperanto esSpanish etEstonian euBasque faPersian fiFinnish fjFiji foFaroese frFrench fyFrisian gaIrish gdScotsGaelic glGalician gnGuarani guGujarati haHausa heHebrew(formerlyiw) hiHindi hrCroatian huHungarian hyArmenian iaInterlingua idIndonesian(formerlyin) ieInterlingue ikInupiak isIcelandic itItalian iuInuktitut jaJapanese jwJavanese kaGeorgian kkKazakh klGreenlandic kmCambodian knKannada koKorean ksKashmiri kuKurdish kyKirghiz laLatin lnLingala loLaothian ltLithuanian lvLatvian,Lettish mgMalagasy miMaori mkMacedonian mlMalayalam mnMongolian moMoldavian mrMarathi msMalay mtMaltese myBurmese naNauru neNepali nlDutch noNorwegian ocOccitan om(Afan)Oromo orOriya paPunjabi plPolish psPashto,Pushto ptPortuguese quQuechua rmRhaeto-Romance rnKirundi roRomanian ruRussian rwKinyarwanda saSanskrit sdSindhi sgSangho shSerbo-Croatian siSinhalese skSlovak slSlovenian smSamoan snShona soSomali sqAlbanian srSerbian ssSiswati stSesotho suSundanese svSwedish swSwahili taTamil teTelugu tgTajik thThai tiTigrinya tkTurkmen tlTagalog tnSetswana toTonga trTurkish tsTsonga ttTatar twTwi ugUighur ukUkrainian urUrdu uzUzbek viVietnamese voVolapuk woWolof xhXhosa yiYiddish(formerlyji) yoYoruba zaZhuang zhChinese zuZulu 到这里,主代码primary-code即语种的名称的标准找到了。

  下面开始找子代码subcode。

[ISO3166]"Codesfortherepresentationofnamesofcountries",ISO3166:1993. 按照维基百科的资料(http://zh.wikipedia.org/zh-cn/ISO_3166): 国际标准化组织的ISO3166国际标准针对国家和地区编代码,有三部份:    *ISO3166-1有国际标准化组织(ISO)的标准国家代码。

有二位字母代码、三位字母代码、以及三位数字代码。

1974年首次出版。

   *ISO3166-2定义国家或地区的主要行政区代码。

   *ISO3166-3定义被取代的ISO3166-1代码的代码。

1998年首次出版。

开始看ISO3166alpha-2(2个字母的代码表): 当时HTML4.01采用的是ISO3166:1993,内容如下:http://xml.coverpages.org/country3166.html CountryCodeList:ISO3166-1993(E) Thisinternationalstandardprovidesatwo-letteralphabeticcodeforrepresentingthenamesofcountries,dependencies,andotherareasofspecialgeopoliticalinterest.Thesourceofthiscodesetisthe"CodesfortheRepresentationofNamesofCountries(ISO3166-1993(E))."Note:2005-04correction,Nambia-->Namibia.Itisavailablefrom: AmericanNationalStandardsInstitute,Inc. 11West42ndStreet,13thfloor NewYork,NewYork10036 CodeDefinitionandExplanation AD Andorra AE UnitedArabEmirates AF Afghanistan AG Antigua&Barbuda AI Anguilla AL Albania AM Armenia AN NetherlandsAntilles AO Angola AQ Antarctica AR Argentina AS AmericanSamoa AT Austria AU Australia AW Aruba AZ Azerbaijan BA BosniaandHerzegovina BB Barbados BD Bangladesh BE Belgium BF BurkinaFaso BG Bulgaria BH Bahrain BI Burundi BJ Benin BM Bermuda BN BruneiDarussalam BO Bolivia BR Brazil BS Bahama BT Bhutan BU Burma(nolongerexists) BV BouvetIsland BW Botswana BY Belarus BZ Belize CA Canada CC Cocos(Keeling)Islands CF CentralAfricanRepublic CG Congo CH Switzerland CI CôteD'ivoire(IvoryCoast) CK CookIislands CL Chile CM Cameroon CN China CO Colombia CR CostaRica CS Czechoslovakia(nolongerexists) CU Cuba CV CapeVerde CX ChristmasIsland CY Cyprus CZ CzechRepublic DD GermanDemocraticRepublic(nolongerexists) DE Germany DJ Djibouti DK Denmark DM Dominica DO DominicanRepublic DZ Algeria EC Ecuador EE Estonia EG Egypt EH WesternSahara ER Eritrea ES Spain ET Ethiopia FI Finland FJ Fiji FK FalklandIslands(Malvinas) FM Micronesia FO FaroeIslands FR France FX France,Metropolitan GA Gabon GB UnitedKingdom(GreatBritain) GD Grenada GE Georgia GF FrenchGuiana GH Ghana GI Gibraltar GL Greenland GM Gambia GN Guinea GP Guadeloupe GQ EquatorialGuinea GR Greece GS SouthGeorgiaandtheSouthSandwichIslands GT Guatemala GU Guam GW Guinea-Bissau GY Guyana HK HongKong HM Heard&McDonaldIslands HN Honduras HR Croatia HT Haiti HU Hungary ID Indonesia IE Ireland IL Israel IN India IO BritishIndianOceanTerritory IQ Iraq IR IslamicRepublicofIran IS Iceland IT Italy JM Jamaica JO Jordan JP Japan KE Kenya KG Kyrgyzstan KH Cambodia KI Kiribati KM Comoros KN St.KittsandNevis KP Korea,DemocraticPeople'sRepublicof KR Korea,Republicof KW Kuwait KY CaymanIslands KZ Kazakhstan LA LaoPeople'sDemocraticRepublic LB Lebanon LC SaintLucia LI Liechtenstein LK SriLanka LR Liberia LS Lesotho LT Lithuania LU Luxembourg LV Latvia LY LibyanArabJamahiriya MA Morocco MC Monaco MD Moldova,Republicof MG Madagascar MH MarshallIslands ML Mali MN Mongolia MM Myanmar MO Macau MP NorthernMarianaIslands MQ Martinique MR Mauritania MS Monserrat MT Malta MU Mauritius MV Maldives MW Malawi MX Mexico MY Malaysia MZ Mozambique NA Namibia NC NewCaledonia NE Niger NF NorfolkIsland NG Nigeria NI Nicaragua NL Netherlands NO Norway NP Nepal NR Nauru NT NeutralZone(nolongerexists) NU Niue NZ NewZealand OM Oman PA Panama PE Peru PF FrenchPolynesia PG PapuaNewGuinea PH Philippines PK Pakistan PL Poland PM St.Pierre&Miquelon PN Pitcairn PR PuertoRico PT Portugal PW Palau PY Paraguay QA Qatar RE Réunion RO Romania RU RussianFederation RW Rwanda SA SaudiArabia SB SolomonIslands SC Seychelles SD Sudan SE Sweden SG Singapore SH St.Helena SI Slovenia SJ Svalbard&JanMayenIslands SK Slovakia SL SierraLeone SM SanMarino SN Senegal SO Somalia SR Suriname ST SaoTome&Principe SU UnionofSovietSocialistRepublics(nolongerexists) SV ElSalvador SY SyrianArabRepublic SZ Swaziland TC Turks&CaicosIslands TD Chad TF FrenchSouthernTerritories TG Togo TH Thailand TJ Tajikistan TK Tokelau TM Turkmenistan TN Tunisia TO Tonga TP EastTimor TR Turkey TT Trinidad&Tobago TV Tuvalu TW Taiwan,ProvinceofChina TZ Tanzania,UnitedRepublicof UA Ukraine UG Uganda UM UnitedStatesMinorOutlyingIslands US UnitedStatesofAmerica UY Uruguay UZ Uzbekistan VA VaticanCityState(HolySee) VC St.Vincent&theGrenadines VE Venezuela VG BritishVirginIslands VI UnitedStatesVirginIslands VN VietNam VU Vanuatu WF Wallis&FutunaIslands WS Samoa YD DemocraticYemen(nolongerexists) YE Yemen YT Mayotte YU Yugoslavia ZA SouthAfrica ZM Zambia ZR Zaire ZW Zimbabwe ZZ Unknownorunspecifiedcountry 根据ISO提供的信息(http://www.iso.org/iso/catalogue_detail.htm?csnumber=22748),ISO3166:1993已被ISO3166-1取代。

在http://zh.wikipedia.org/zh-cn/ISO_3166-1可以看到ISO3166-1的国家和地区代码表,其中CN表示China,HK表示香港。

到这里,2个字母的子代码也清楚了。

下面开始“3到8个字母的子语言标签按照IANA的登记执行,按照第5章的说明进行使用。

” 第5章的原文如下: 5.IANAregistrationprocedureforlanguagetags Anylanguagetagmuststartwithanexistingtag,andextendit. Thisregistrationformshouldbeusedbyanyonewhowantstousea languagetagnotdefinedbyISOorIANA. Alvestrand[Page7] RFC1766LanguageTagMarch1995 ---------------------------------------------------------------------- LANGUAGETAGREGISTRATIONFORM Nameofrequester: E-mailaddressofrequester: Tagtoberegistered: Englishnameoflanguage: Nativenameoflanguage(transcribedintoASCII): Referencetopublisheddescriptionofthelanguage(bookorarticle): ---------------------------------------------------------------------- Thelanguageformmustbesenttofora2- weekreviewperiodbeforesubmittingittoIANA.(Thisisanopen list.Requeststobeaddedshouldbesentto.) Whenthetwoweekperiodhaspassed,thelanguagetagreviewer,who isappointedbytheIETFApplicationsAreaDirector,eitherforwards [email protected],orrejectsitbecauseofsignificant objectionsraisedonthelist. DecisionsmadebythereviewermaybeappealedtotheIESG. Allregisteredformsareavailableonlineinthedirectory ftp://ftp.isi.edu/in-notes/iana/assignments/languages/  根据第5章的内容,并没有说明3到8个字母的代码表在哪里? 查得IANA(互联网地址指派机构,InternetAssignedNumbersAuthority),网站是:http://www.iana.org/。

根据维基百科(http://zh.wikipedia.org/wiki/IANA)的资料: IANA是英文InternetAssignedNumbersAuthority的缩写,即Internet号码分配局,是互联网地址指派机构,是在国际互联网中使用的IP地址、域名和许多其它参数的管理机构。

IP地址、自治系统成员以及许多顶级和二级域名分配的日常职责由国际互联网注册中心(IR)和地区注册中心承担。

查得ianalanguagesubtag,在这里:http://www.iana.org/assignments/language-subtag-registry 引用部分内容如下:   %% Type:redundant Tag:zh-Hans Description:simplifiedChinese Added:2003-05-30 %% Type:redundant Tag:zh-Hans-CN Description:PRCMainlandChineseinsimplifiedscript Added:2005-04-13 %% Type:redundant Tag:zh-Hans-HK Description:HongKongChineseinsimplifiedscript Added:2005-04-11  标签zh-Hans是在2003-05-30添加的,表示“简体中文”(西方说法)或者称为“规范汉字”(东方说法)。

标签zh-Hans-CN是在2005-04-13添加的,表示“以简体中文格式书写的PRCMainland用语”。

标签zh-Hans-HK表示“以简体中文格式书写的香港地区用语”。

到这里,3到8个字母的子代码也明白。

  结论是: 按照ISO国际标准,使用zh-CN、zh-HK。

按惯例是语言种类小写(如zh),国家和地区代码大写(如CN),不作强制要求。

ISO是国际标准,跟着ISO走,你不会错的。

各个浏览器也都是这么干的。

IANA的语言代码更新快,但是影响力不如ISO,各个浏览器都不采用。

按照W3C的HTML4.01规范,可以使用IANA的语言代码。

所以如果你认可IANA的新代码,用吧,也是符合W3C的,zh-Hans也是对的。

下面请看各个浏览器支持的语言代码截图:       到这里,HTML4.01中的lang属性值问题得以解决。

XHTML1.0中的语言应该使用什么属性值,下次再说。

虽然XHTML2已经停止了,不过HTML5的lang可能是在XHTML的基础上再扩充。

    下面是相关的问题,有空再说。

  %% Type:redundant Tag:zh-yue Description:Cantonese Added:1999-12-18 Deprecated:2009-07-29 Preferred-Value:yue IANA极不赞成使用zh-yue,优先使用yue。

但是ISO639-2和ISO639-3都没有把yue作为单独的语言,看来浏览器也不会支持了。

http://zh.wikipedia.org/zh-cn/ISO_639-2%E4%BB%A3%E7%A0%81%E8%A1%A8 http://zh.wikipedia.org/zh-cn/ISO_639-3  关于“粤语是汉语族下属的一门语言”和“粤语是汉语的一种方言”的介绍,请看:http://zh.wikipedia.org/zh-cn/%E6%B1%89%E8%AF%AD %% Type:language Subtag:cmn Description:MandarinChinese Added:2009-07-29 Macrolanguage:zh %% Type:grandfathered Tag:zh-guoyu Description:MandarinorStandardChinese Added:1999-12-18 Deprecated:2005-07-15 Preferred-Value:cmn ISO639规定的是语言代码,那么其中的zh应表示汉语,汉语又分为“发音”与“文字”。

关于“发音”与“文字”的问题,有空再谈。

IANA的记录表明:zh-guoyu表示“现代标准汉语”,但已不赞成使用,优先使用cmn表示“现代标准汉语”。

联合国的官方语言有6种:阿拉伯语·汉语·英语·法语·俄语·西班牙语。

现代标准汉语包括:普通话、国语、华语。

详细内容请看:http://zh.wikipedia.org/zh-cn/%E7%8F%BE%E4%BB%A3%E6%A8%99%E6%BA%96%E6%BC%A2%E8%AA%9E posted@ 2010-01-2216:56  sink_cup  阅读(15620)  评论(9)  编辑  收藏  举报 刷新评论刷新页面返回顶部 Copyright©2021sink_cup Poweredby.NET6onKubernetes 本站原创作品采用知识共享署名3.0许可协议进行许可。



請為這篇文章評分?