背景知识
现代软件开发,往往做出的应用程序不止给一个国家的人去使用。不同国家的人往往存在语言文字不通的问题。由此产生了国际化(internationalization)、多语言(multi-language)、本地化(locale)这些词,它们其实都是一个意思,支持多种语言,提供给不同国家的用户使用。
语言编码、国家/地区编码
做web 开发的朋友可能多多少少接触过类似 zh-cn, en-us 这样的编码字样。
这些编码是用来表示指定的国家地区的语言类型的。那么,这些含有特殊含义的编码是如何产生的呢?
ISO-639标准使用编码定义了国际上常见的语言,每一种语言由两个小写字母表示。
ISO-3166标准使用编码定义了国家/地区,每个国家/地区由两个大写字母表示。
为什么要用语言+国家/地区来标示语言呢?
道理很简单:拿咱们中国来说,同样是中文,全国各地的方言就多如牛毛,更不要说世界上有那么多种语言,得有多少方言?
下表列举了一些常见国家、地区的语言编码:
国家/地区 | 语言编码 | 国家/地区 | 语言编码 |
---|---|---|---|
简体中文(中国) | zh-cn | 繁体中文(台湾地区) | zh-tw |
繁体中文(香港) | zh-hk | 英语(香港) | en-hk |
英语(美国) | en-us | 英语(英国) | en-gb |
英语(全球) | en-ww | 英语(加拿大) | en-ca |
英语(澳大利亚) | en-au | 英语(爱尔兰) | en-ie |
英语(芬兰) | en-fi | 芬兰语(芬兰) | fi-fi |
英语(丹麦) | en-dk | 丹麦语(丹麦) | da-dk |
英语(以色列) | en-il | 希伯来语(以色列) | he-il |
英语(南非) | en-za | 英语(印度) | en-in |
英语(挪威) | en-no | 英语(新加坡) | en-sg |
英语(新西兰) | en-nz | 英语(印度尼西亚) | en-id |
英语(菲律宾) | en-ph | 英语(泰国) | en-th |
英语(马来西亚) | en-my | 英语(阿拉伯) | en-xa |
韩文(韩国) | ko-kr | 日语(日本) | ja-jp |
荷兰语(荷兰) | nl-nl | 荷兰语(比利时) | nl-be |
葡萄牙语(葡萄牙) | pt-pt | 葡萄牙语(巴西) | pt-br |
法语(法国) | fr-fr | 法语(卢森堡) | fr-lu |
法语(瑞士) | fr-ch | 法语(比利时) | fr-be |
法语(加拿大) | fr-ca | 西班牙语(拉丁美洲) | es-la |
西班牙语(西班牙) | es-es | 西班牙语(阿根廷) | es-ar |
西班牙语(美国) | es-us | 西班牙语(墨西哥) | es-mx |
西班牙语(哥伦比亚) | es-co | 西班牙语(波多黎各) | es-pr |
德语(德国) | de-de | 德语(奥地利) | de-at |
德语(瑞士) | de-ch | 俄语(俄罗斯) | ru-ru |
意大利语(意大利) | it-it | 希腊语(希腊) | el-gr |
挪威语(挪威) | no-no | 匈牙利语(匈牙利) | hu-hu |
土耳其语(土耳其) | tr-tr | 捷克语(捷克共和国) | cs-cz |
斯洛文尼亚语 | sl-sl | 波兰语(波兰) | pl-pl |
瑞典语(瑞典) | sv-se |
注:由表中可以看出*语言、国家/**地区* *编码一般都是英文单词的缩写。*
字符编码
在此处,引申一下字符编码的概念。
是不是有了语言、国家/****地区编码,计算机就可以识别各种语言了?
答案是否。作为程序员,相信每个人都会遇到过这样的情况:,期望打印中文,结果输出的却是乱码。
这种情况,往往是因为字符编码的问题。
计算机在设计之初,并没有考虑多个国家,多种不同语言的应用场景。当时定义一种ASCII码,将字母、数字和其他符号编号用7****比特的二进制数来表示。后来,计算机在世界开始普及,为了适应多种文字,出现了多种编码格式,例如中文汉字一般使用的编码格式为GB2312、GBK。
由此,又产生了一个问题,不同字符编码之间互相无法识别。于是,为了一统江湖,出现了 unicode编码。它为每种语言的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台的文本转换需求。
有人不禁要问,既然 Unicode 可以支持所有语言的字符,那还要其他字符编码做什么?
Unicode 有一个缺点:为了支持所有语言的字符,所以它需要用更多位数去表示,比如ASCII表示一个英文字符只需要一个字节,而 Unicode 则需要两个字节。很明显,如果字符数多,这样的效率会很低。
为了解决这个问题,有出现了一些中间格式的字符编码:如UTF-8、UTF-16、UTF-32等。中国程序员一般使用UTF-8编码。
各种系统设置的语言代码
af 南非荷兰语 | sq 阿尔巴尼亚语 |
---|---|
ar-sa 阿拉伯语(沙特阿拉伯) | ar-iq 阿拉伯语(伊拉克) |
ar-eg 阿拉伯语(埃及) | ar-ly 阿拉伯语(利比亚) |
ar-dz 阿拉伯语(阿尔及利亚) | ar-ma 阿拉伯语(摩洛哥) |
ar-tn 阿拉伯语(突尼斯) | ar-om 阿拉伯语(阿曼) |
ar-ye 阿拉伯语(也门) | ar-sy 阿拉伯语(叙利亚) |
ar-jo 阿拉伯语(约旦) | ar-lb 阿拉伯语(黎巴嫩) |
ar-kw 阿拉伯语(科威特) | ar-ae 阿拉伯语(阿拉伯联合酋长国) |
ar-bh 阿拉伯语(巴林) | ar-qa 阿拉伯语(卡塔尔) |
eu 巴斯克语 | bg 保加利亚语 |
be 贝劳语 | ca 加泰罗尼亚语 |
zh-tw 中文(中国台湾) | zh-cn 中文(中华人民共和国) |
zh-hk 中文(中国香港特别行政区) | zh-sg 中文(新加坡) |
hr 克罗地亚语 | cs 捷克语 |
da 丹麦语 | nl 荷兰语(标准) |
nl-be 荷兰语(比利时) | en 英语 |
en-us 英语(美国) | en-gb 英语(英国) |
en-au 英语(澳大利亚) | en-ca 英语(加拿大) |
en-nz 英语(新西兰) | en-ie 英语(爱尔兰) |
en-za 英语(南非) | en-jm 英语(牙买加) |
en 英语(加勒比) | en-bz 英语(伯利兹) |
en-tt 英语(特立尼达) | et 爱沙尼亚语 |
fo 法罗语 | fa 波斯语 |
fi 芬兰语 | fr 法语(标准) |
fr-be 法语(比利时) | fr-ca 法语(加拿大) |
fr-ch 法语(瑞士) | fr-lu 法语(卢森堡) |
gd 盖尔语(苏格兰) | gd-ie 盖尔语(爱尔兰) |
de 德语(标准) | de-ch 德语(瑞士) |
de-at 德语(奥地利) | de-lu 德语(卢森堡) |
de-li 德语(列支敦士登) | el 希腊语 |
he 希伯来语 | hi 北印度语 |
hu 匈牙利语 | is 冰岛语 |
in 印度尼西亚语 | it 意大利语(标准) |
it-ch 意大利语(瑞士) | ja 日语 |
ko 朝鲜语 | ko 朝鲜语(韩国) |
lv 拉脱维亚语 | lt 立陶宛语 |
mk FYRO 马其顿语 | ms 马来西亚语 |
mt 马耳他语 | no 挪威语(博克马尔) |
no 挪威语(尼诺斯克) | pl 波兰语 |
pt-br 葡萄牙语(巴西) | pt 葡萄牙语(葡萄牙) |
rm 拉丁语系 | ro 罗马尼亚语 |
ro-mo 罗马尼亚语(摩尔达维亚) | ru 俄语 |
ru-mo 俄语(摩尔达维亚) | sz 萨摩斯语(拉普兰) |
sr 塞尔维亚语(西里尔) | sr 塞尔维亚语(拉丁) |
sk 斯洛伐克语 | sl 斯洛文尼亚语 |
sb 索布语 | es 西班牙语(西班牙传统) |
es-mx 西班牙语(墨西哥) | es 西班牙语(西班牙现代) |
es-gt 西班牙语(危地马拉) | es-cr 西班牙语(哥斯达黎加) |
es-pa 西班牙语(巴拿马) | es-do 西班牙语(多米尼加共和国) |
es-ve 西班牙语(委内瑞拉) | es-co 西班牙语(哥伦比亚) |
es-pe 西班牙语(秘鲁) | es-ar 西班牙语(阿根廷) |
es-ec 西班牙语(厄瓜多尔) | es-cl 西班牙语(智利) |
es-uy 西班牙语(乌拉圭) | es-py 西班牙语(巴拉圭) |
es-bo 西班牙语(玻利维亚) | es-sv 西班牙语(萨尔瓦多) |
es-hn 西班牙语(洪都拉斯) | es-ni 西班牙语(尼加拉瓜) |
es-pr 西班牙语(波多黎各) | sx 苏图语 |
sv 瑞典语 | sv-fi 瑞典语(芬兰) |
th 泰语 | ts 汤加语 |
tn 瓦纳语 | tr 土耳其语 |
uk 乌克兰语 | ur 乌尔都语 |
ve 文达语 | vi 越南语 |
xh 科萨语 | ji 依地语 |
zu 祖鲁语 |
Display Text (English) | Display Text (Localized) | SWITCH Locale | DataKey | Primary URL Pattern |
---|---|---|---|---|
Arabic | Arabic | Arabic | Arabic (AR) [Remove "Middle East and Africa"] | ar_EG |
Chinese - Taiwan | 中文 - 台彎 | Chinese | Chinese (ZH) Simplified | zh_CN |
Chinese - China | 中文 - 中国 | Chinese (Taiwan) | Chinese (ZH) Traditional | zh_TW |
Czech | Český | Czech | Czech (CS) | cs_CZ |
Danish | Dansk | Danish | Danish (DA) | da_DK |
Dutch | Nederlands | Dutch | Dutch (NL) | nl_NL |
English - United States | English - United States | English | English (EN) United States | en_US |
English - United Kingdom | English - United Kingdom | English (United Kingdom) | English (EN) United Kingdom | en_GB |
Finnish | Suomi | Finnish | Finnish (FI) | fi_FI |
French - France | Français - France | French | French (FR) France | fr_FR |
French - Canada | Français - Canada | French (Canada) | French (FR) Canada | fr_CA |
French - Switzerland | Français - Suisse | French (Switzerland) | French (FR) Switzerland | fr_CH |
German - Austria | Deutsch - Österreich | German (Austria) | German (DE) Austrian | de_AT |
German - Germany | Deutsch - Deutschland | German | German (DE) Germany | de_DE |
German - Switzerland | Deutsch - Schweiz | German (Switzerland) | German (DE) Switzerland | de_CH |
Greek | Greek | Greek | Greek (EL) | el_GR |
Hungarian | Magyar | Hungarian | Hungarian (HU) | hu_HU |
Italian | Italiano | Italian | Italian (IT) | it_IT |
Japanese | 日本語 | Japanese (Japan) | Japanese (JA) | ja_JP |
Korean | Korean | Korean | Korean (KO) | ko_KR |
Norwegian | Norsk | Norwegian | Norwegian (NB) | nb_NO |
Polish | Polski | Polish | Polish (PL) | pl_PL |
Portuguese - Portugal | Português - Portugal | Portuguese | Portuguese (PT) Portugal | pt_PT |
Portuguese - Brazil | Português - Brasil | Protuguese (Brazil) | Portuguese (PT) Brazil | pt_BR |
Romanian | Romanian | Romanian | Romanian (RO) | ro_RO |
Russian | Russian | Russian | Russian (RU) | ru_RU |
Spanish | Español | Spanish (Spain) | Spanish (ES) | es_ES |
Swedish | Svenska | Swedish | Swedish (SV) -- Sverige | sv_SE |
Thai | Thai | Thai | Thai (TH) | th_TH |
Turkish | Türkçe | Turkish | Turkish (TR) | tr_TR |
Vietnamese | Vietnamese | Vietnamese | Vietnamese (VN) |
国家代号与区号
Countries and Regions | 国家或地区 | 国际域名缩写 | 电话代码 | 时差 |
---|---|---|---|---|
Angola | 安哥拉 | AO | 244 | -7 |
Afghanistan | 阿富汗 | AF | 93 | |
Albania | 阿尔巴尼亚 | AL | 355 | -7 |
Algeria | 阿尔及利亚 | DZ | 213 | -8 |
Andorra | 安道尔共和国 | AD | 376 | -8 |
Anguilla | 安圭拉岛 | AI | 1264 | -12 |
Antigua and Barbuda | 安提瓜和巴布达 | AG | 1268 | -12 |
Argentina | 阿根廷 | AR | 54 | -11 |
Armenia | 亚美尼亚 | AM | 374 | -6 |
Ascension | 阿森松 | 247 | -8 | |
Australia | 澳大利亚 | AU | 61 | +2 |
Austria | 奥地利 | AT | 43 | -7 |
Azerbaijan | 阿塞拜疆 | AZ | 994 | -5 |
Bahamas | 巴哈马 | BS | 1242 | -13 |
Bahrain | 巴林 | BH | 973 | -5 |
Bangladesh | 孟加拉国 | BD | 880 | -2 |
Barbados | 巴巴多斯 | BB | 1246 | -12 |
Belarus | 白俄罗斯 | BY | 375 | -6 |
Belgium | 比利时 | BE | 32 | -7 |
Belize | 伯利兹 | BZ | 501 | -14 |
Benin | 贝宁 | BJ | 229 | -7 |
Bermuda Is. | 百慕大群岛 | BM | 1441 | -12 |
Bolivia | 玻利维亚 | BO | 591 | -12 |
Botswana | 博茨瓦纳 | BW | 267 | -6 |
Brazil | 巴西 | BR | 55 | -11 |
Brunei | 文莱 | BN | 673 | |
Bulgaria | 保加利亚 | BG | 359 | -6 |
Burkina-faso | 布基纳法索 | BF | 226 | -8 |
Burma | 缅甸 | MM | 95 | -1.3 |
Burundi | 布隆迪 | BI | 257 | -6 |
Cameroon | 喀麦隆 | CM | 237 | -7 |
Canada | 加拿大 | CA | 1 | -13 |
Cayman Is. | 开曼群岛 | 1345 | -13 | |
Central African Republic | 中非共和国 | CF | 236 | -7 |
Chad | 乍得 | TD | 235 | -7 |
Chile | 智利 | CL | 56 | -13 |
China | 中国 | CN | 86 | |
Colombia | 哥伦比亚 | CO | 57 | |
Congo | 刚果 | CG | 242 | -7 |
Cook Is. | 库克群岛 | CK | 682 | -18.3 |
Costa Rica | 哥斯达黎加 | CR | 506 | -14 |
Cuba | 古巴 | CU | 53 | -13 |
Cyprus | 塞浦路斯 | CY | 357 | -6 |
Czech Republic | 捷克 | CZ | 420 | -7 |
Denmark | 丹麦 | DK | 45 | -7 |
Djibouti | 吉布提 | DJ | 253 | -5 |
Dominica Rep. | 多米尼加共和国 | DO | 1890 | -13 |
Ecuador | 厄瓜多尔 | EC | 593 | -13 |
Egypt | 埃及 | EG | 20 | -6 |
EI Salvador | 萨尔瓦多 | SV | 503 | -14 |
Estonia | 爱沙尼亚 | EE | 372 | -5 |
Ethiopia | 埃塞俄比亚 | ET | 251 | -5 |
Fiji | 斐济 | FJ | 679 | +4 |
Finland | 芬兰 | FI | 358 | -6 |
France | 法国 | FR | 33 | -8 |
French Guiana | 法属圭亚那 | GF | 594 | -12 |
Gabon | 加蓬 | GA | 241 | -7 |
Gambia | 冈比亚 | GM | 220 | -8 |
Georgia | 格鲁吉亚 | GE | 995 | |
Germany | 德国 | DE | 49 | -7 |
Ghana | 加纳 | GH | 233 | -8 |
Gibraltar | 直布罗陀 | GI | 350 | -8 |
Greece | 希腊 | GR | 30 | -6 |
Grenada | 格林纳达 | GD | 1809 | -14 |
Guam | 关岛 | GU | 1671 | +2 |
Guatemala | 危地马拉 | GT | 502 | -14 |
Guinea | 几内亚 | GN | 224 | -8 |
Guyana | 圭亚那 | GY | 592 | -11 |
Haiti | 海地 | HT | 509 | -13 |
Honduras | 洪都拉斯 | HN | 504 | -14 |
Hongkong | 香港 | HK | 852 | |
Hungary | 匈牙利 | HU | 36 | -7 |
Iceland | 冰岛 | IS | 354 | -9 |
India | 印度 | IN | 91 | -2.3 |
Indonesia | 印度尼西亚 | ID | 62 | -0.3 |
Iran | 伊朗 | IR | 98 | -4.3 |
Iraq | 伊拉克 | IQ | 964 | -5 |
Ireland | 爱尔兰 | IE | 353 | -4.3 |
Israel | 以色列 | IL | 972 | -6 |
Italy | 意大利 | IT | 39 | -7 |
Ivory Coast | 科特迪瓦 | 225 | -6 | |
Jamaica | 牙买加 | JM | 1876 | -12 |
Japan | 日本 | JP | 81 | +1 |
Jordan | 约旦 | JO | 962 | -6 |
Kampuchea (Cambodia ) | 柬埔寨 | KH | 855 | -1 |
Kazakstan | 哈萨克斯坦 | KZ | 327 | -5 |
Kenya | 肯尼亚 | KE | 254 | -5 |
Korea | 韩国 | KR | 82 | +1 |
Kuwait | 科威特 | KW | 965 | -5 |
Kyrgyzstan | 吉尔吉斯坦 | KG | 331 | -5 |
Laos | 老挝 | LA | 856 | -1 |
Latvia | 拉脱维亚 | LV | 371 | -5 |
Lebanon | 黎巴嫩 | LB | 961 | -6 |
Lesotho | 莱索托 | LS | 266 | -6 |
Liberia | 利比里亚 | LR | 231 | -8 |
Libya | 利比亚 | LY | 218 | -6 |
Liechtenstein | 列支敦士登 | LI | 423 | -7 |
Lithuania | 立陶宛 | LT | 370 |