应用国际化

[转] http://www.syyong.com/other/Application-internationalization.html

概述

为支持应用国际化所需考虑的技术实现问题很多,比如时区、手机号、语言、国家或地区名称等不同所造成的I18N问题。

术语

CC

即Country Code,国际电话区号,如中国为86,也称为国家码。由国际电信联盟(ITU)的E.123和E.164标准所分配。

国际电话区号表➫

国际冠码

国际冠码是要拨打国际电话时,在键入受话地区的国际电话区号前,所须键入发话地区的输出(前缀)码,以转接至国际电话线路用的数字。在拨打国际电话时,通常会将国际冠码放在国际电话区号前以表示本号码将会拨离本地。例如当在美国要拨打电话至英国的号码1234 567890时,就必须先输入美国的国际冠码 011,然后英国的国际区号 44 再接着当地的电话号码 1234 567890,也就是说整体的形式为 011-44-1234-567890 。加号(+)可以用来代替任何国家的冠码,用以表示拨号者使用了所在国家的国际冠码。当前的大部分手机都允许“+”的输入,可以是按住“0”键(大部分GSM制式的手机)或连按两次“*”星号键输入。在使用时,系统会根据电话被使用的位置自动将“+”转换成正确的国际代码,使得拨打者可以在任何国家用相同的储存号码拨打电话。“+”也可以用“00”来代替。

国际电信联盟早些前已推荐00作为通用的国际冠码,并已为数不少的国家所采用。然而仍有国家决定采用不同的国际冠码,甚至提供多组冠码,例如美国的就是011。详细国际冠码表

MCC

移动设备国家代码 Mobile Country Code (MCC)由三位十进制数组成,它表明移动用户(或系统)归属的国家。
格式。MCC由三个十进制数组成,编码范围为十进制的000-999。作为全球唯一的国家识别标准,MCC的资源由国际电联(ITU)统一分配和管理。ITU建议书E.212规定了各国的MCC号码。中国的移动设备国家代码为460(十进制)。 由于MCC的特殊意义,因此它在网络中一旦设定之后是不允许更改的。
移动设备国家代码列表➫

参考阅读一➫
参考阅读二(墙外)➫

MNC

即移动网号,两个数字。格式:移动网号(MNC)由二个十进制数组成,编码范围为十进制的00-99。若一个国家中有多于一个的GSM公司陆地移动网(PLMN),则每个网必须具有不同的MNC。MNC一般由国家的有关电信管理部门统一分配,同一个营运者可以拥有一个或多个MNC(视业务提供的规模而定),但不同的营运者不可以分享相同的MNC。由于MNC的特殊意义,因此它在网络中一旦设定是不允许更改的。中国运营商的MNC:

00 中国移动  
01 中国联通  
02 中国移动  
03 中国电信  
05 中国电信  
06 中国联通  
07 中国移动  

参考阅读➫

IMSI

国际移动用户识别码(IMSI) International Mobile Subscriber Identity。国际上为唯一识别一个移动用户所分配的号码。从技术上讲,IMSI可以彻底解决国际漫游问题。但是由于北美目前仍有大量的AMPS系统使用MIN号码,且北美的MDN和MIN采用相同的编号,系统已经无法更改,所以目前国际漫游暂时还是以MIN为主。其中以0和1打头的MIN资源称为IRM(International Roaming MIN),由IFAST (International Forum on ANSI-41 Standards Technology)统一管理。目前联通申请的IRM资源以09打头。可以看出,随着用户的增长,用于国际漫游的MIN资源将很快耗尽,全球统一采用IMSI标识用户势在必行。

格式:IMSI共有15位,其结构为:MCC+MNC+MIN 。MIN共有10位,其结构:09+M0M1M2M3+ABCD。其中的M0M1M2M3和MDN号码中的H0H1H2H3可存在对应关系,ABCD四位为自由分配。可以看出IMSI在MIN号码前加了MCC,可以区别出每个用户的来自的国家,因此可以实现国际漫游。在同一个国家内,如果有多个CDMA运营商,可以通过MNC来进行区别。

参考阅读➫

国际域名缩写、国家代码

即为每个国家、地区分配的域名的缩写,如中国为CN。

国际域名缩写表➫

语言代码

ISO 639是数个由国际标准化组织为各语言所订定的语言代码。中文的ISO 639-1代码为zh。 ISO 639-1是国际标准化组织ISO 639语言编码标准的第一部分。它含有 136 个两字母的编码,用来标示世界上主要的语言。这些代码在很多地方都被用作语言的简写,例如:
英语(English)用en表示
德语(Deutsch)用de表示(Deutsch 是德语的本名)
日语(Japanese)用ja表示(尽管日语的拼音是 Nihongo)
汉语 使用zh表示,来自“中文”的汉语拼音:Zhōngwén
ISO 639-1在 2002年成为正式标准。
ISO 639-1收录语言列表➫

语言的标签表示法

RFC 4646标准定义,《Tags for Identifying Languages》。
这个文件规定,一种语言的标签应该按照如下方式排列:

language-script-region-variant-extension-privateuse

1. language:这部分就是ISO 639规定的语言代码,比如中文是zh。
2. script:表示变体,比如简体汉字是zh-Hans,繁体汉字是zh-Hant。
3. region:表示语言使用的地理区域,比如zh-Hans-CN就是中国大陆使用的简体中文。
4. variant:表示方言。
5. extension-privateus:表示扩展用途和私有标识。

一般约定,language标签全部小写,region标签全部大写,script标签只有首字母大写。不同标签之间用连字号-链接。

比如html中,content-language用于定义页面所使用的语言代码。
content-language语法:

language-code = primary-code ( "-" subcode )*  
// 例如:zh-CN

primary-code为语言代码,subcode为国家代码。

中文zh

Chinese                                     zh 
Chinese (Simplified) Legacy                 zh-CHS
Chinese (Traditional) Legacy                zh-CHT
Chinese (Simplified)                        zh-Hans
Chinese (Traditional)                       zh-Hant
Chinese (Simplified, PRC)                   zh-CN
Chinese (Traditional, Hong Kong S.A.R.)     zh-HK
Chinese (Traditional, Macao S.A.R.)         zh-MO
Chinese (Simplified, Singapore)             zh-SG
Chinese (Traditional, Taiwan)               zh-TW
zh-CN → zh-CHS → zh-Hans → zh
zh-TW → zh-CHT → zh-Hant → zh
// 简体汉字zh-Hans,繁体汉字zh-Hant,是zh汉字的变体。

时区

时区(Time Zone)是地球上的区域使用同一个时间定义。1884年在华盛顿召开国际经度会议时,为了克服时间上的混乱,规定将全球划分为24个时区。比如中国为东八区(UTC/GMT+08:00)。是比世界协调时间(UTC)/格林威治时间(GMT)快8小时的时区。在1884年的“国际经度会议”上,格林尼治天文台测定的经线被确定为零度经线,有关国际会议决定将地球表面按经线从南到北,每相隔15度划一个区域,这样一共有24个区域,并且规定相邻区域的时间相差1小时。在同一区域内的东端和西端的人看到太阳升起的时间最多相差不过1小时。

移动端

获取locale

ios、Android可以获取到本机设置语言,如zh-Hans。
注意:这个会跟随用户如手机设置的语言、地区而发生变动。

获取国家代码(国际域名缩写)

ios、Android可以获取到本机设置所在国家、地区,如CN。
注意:这个会跟随用户如手机设置的所在国家、地区而发生变动。

获取MCC

ios、Android 在设备插入了SIM卡后可以获取到MCC。
MCC不会随用户所在地理位置而改变。
未插入SIM卡获取不到。

获取MNC

ios、Android 在设备插入了SIM卡后可以获取到MNC。
未插入SIM卡获取不到。

获取本机手机号

ios、Android 在手机插入了SIM卡,并且获得用户授权后可以获取到本机手机号。
有些运营商SIM并不能获取到本机号
获取到的手机号包含国家冠码+国家区码+手机号。
ios在获取本机号可能存在AppStore审核不通过可能,ios一般不会去获取本机号。

获取通讯录

ios、Android 获得用户授权后可以获取到通讯录。
通讯录信息可以拿到姓名+号码。号码即用户输入存入的号码,不会自动加上冠码、国家区号等信息。

获取所在时区

ios、Android 可以获取到用户所在时区,值为用户本机系统设置的时区。

服务端

时区

PHP:
PHP支持的时区➫
注意这个是在变动的。通过函数:timezone_identifiers_list() 或者方法:\DateTimeZone::listIdentifiers() 来列取当前php环境下定义了的时区。客户端在上报timeZone时,由于时区字符串规则较多,且总数不固定。在做合法性检查时可以巧妙的使用:

$timeZone = "Asia/Shanghai";
$o = new DateTimeZone($timeZone);
if (is_object($o)) {
    return $timeZone; // 合法
}
return false; // 不合法

这个方案比in_array($timeZone, timezone_identifiers_list()) 更优,实际使用中发现timezone_identifiers_list()会有较多时区不支持。

手机号格式

在全球各个国家的手机号格式不尽相同,这里列举出一些常用国家或地区的手机号格式:

国家或地区长度开头
中国 11 1开头
美国 10 -
加拿大 7 -
中国香港 8 6、9开头
中国台湾 10 09开头,0是台湾省内用
英国 11 077,078,079开头
德国 10 17开头
印度 10 98开头
日本 11 080、090开头,小灵通070开头
韩国 11 010、011、016、017、018、019开头
泰国 9 666开头

 

附录

对照表

Countries and Regions国家或地区国际域名缩写国际电话区号 CC时差移动设备国家代码 MCC
Angola 安哥拉 AO 244 -7 631
Afghanistan 阿富汗 AF 93 -3.5 412
Albania 阿尔巴尼亚 AL 355 -7 276
Algeria 阿尔及利亚 DZ 213 -8 603
Alaska(U.S.A) 阿拉斯加 US 1907 +3 310~316
Andorra 安道尔 AD 376 -8 213
Anguilla 安圭拉岛 AI 1264 -12 365
Antigua and Barbuda 安提瓜和巴布达 AG 1268 -12 344
Argentina 阿根廷 AR 54 -11 722
Armenia 亚美尼亚 AM 374 0 283
Ascension 阿森松   247 -8  
Australia 澳大利亚 AU 61 +2 505
Austria 奥地利 AT 43 -7 232
Azerbaijan 阿塞拜疆 AZ 994 -5 400
Bahamas 巴哈马 BS 1242 -13 364
Bahrain 巴林 BH 973 -5 426
Bangladesh 孟加拉国 BD 880 -2 470
Barbados 巴巴多斯 BB 1246 -12 342
Belarus 白俄罗斯 BY 375 -6 257
Belgium 比利时 BE 32 -7 206
Belize 伯利兹 BZ 501 -14 702
Benin 贝宁 BJ 229 -7 616
Bermuda Is 百慕大群岛 BM 1441 -12 350
Bhutan 不丹 BT 975 0 402
Bolivia 玻利维亚 BO 591 -12 736
Botswana 博茨瓦纳 BW 267 -6 652
Brazil 巴西 BR 55 -11 724
Brunei 文莱 BN 673 0 528
Bulgaria 保加利亚 BG 359 -6 284
Burkina-faso 布基纳法索 BF 226 -8 613
Burma 缅甸 MM 95 -1.3 414
Burundi 布隆迪 BI 257 -6 642
Cameroon 喀麦隆 CM 237 -7 624
Canada 加拿大 CA 1 -13 302
Cayman Is 开曼群岛 KY 1345 -13 346
Central African Republic 中非共和国 CF 236 -7 623
Chad 乍得 TD 235 -7 622
Chile 智利 CL 56 -13 730
China 中国 CN 86 0 460~461
Colombia 哥伦比亚 CO 57 0 732
Congo 刚果 CG 242 -7 629
Democratic Republic of the Congo 刚果民主共和国 CD 243 -7 630
Cook Is 库克群岛 CK 682 -18.3 548
Costa Rica 哥斯达黎加 CR 506 -14 712
Cuba 古巴 CU 53 -13 368
Cyprus 塞浦路斯 CY 357 -6 280
Czech 捷克 CZ 420 -7 230
Denmark 丹麦 DK 45 -7 238
Djibouti 吉布提 DJ 253 -5 638
Dominica 多米尼加 DO 1890 -13 370
Ecuador 厄瓜多尔 EC 593 -13 740
Egypt 埃及 EG 20 -6 602
EI Salvador 萨尔瓦多 SV 503 -14 706
Estonia 爱沙尼亚 EE 372 -5 248
Ethiopia 埃塞俄比亚 ET 251 -5 636
Fiji 斐济 FJ 679 +4 542
Finland 芬兰 FI 358 -6 244
France 法国 FR 33 -8 208
French Guiana 法属圭亚那 GF 594 -12 742
Gabon 加蓬 GA 241 -7 628
Gambia 冈比亚 GM 220 -8 607
Georgia 格鲁吉亚 GE 995 0 282
Germany 德国 DE 49 -7 262
Ghana 加纳 GH 233 -8 620
Gibraltar 直布罗陀 GI 350 -8 266
Greece 希腊 GR 30 -6 202
Grenada 格林纳达 GD 1809 -14 352
Guam 关岛 GU 1671 +2 535
Guatemala 危地马拉 GT 502 -14 704
Guinea 几内亚 GN 224 -8 611
Guyana 圭亚那 GY 592 -11 738
Haiti 海地 HT 509 -13 372
Honduras 洪都拉斯 HN 504 -14 708
Hongkong 香港 HK 852 0 454
Hungary 匈牙利 HU 36 -7 216
Iceland 冰岛 IS 354 -9 274
India 印度 IN 91 -2.3 404
Indonesia 印度尼西亚 ID 62 -0.3 510
Iran 伊朗 IR 98 -4.3 432
Iraq 伊拉克 IQ 964 -5 418
Ireland 爱尔兰 IE 353 -8 272
Israel 以色列 IL 972 -6 425
Italy 意大利 IT 39 -7 222
Ivory Coast 科特迪瓦 CI 225 -6 612
Jamaica 牙买加 JM 1876 -12 338
Japan 日本 JP 81 +1 440~441
Jordan 约旦 JO 962 -6 416
Cambodia(Kampuchea) 柬埔寨 KH 855 -1 456
Kazakstan 哈萨克斯坦 KZ 327 -5 401
Kenya 肯尼亚 KE 254 -5 639
Korea 韩国 KR 82 +1 450
Kuwait 科威特 KW 965 -5 419
Kyrgyzstan 吉尔吉斯坦 KG 331 -5 437
Laos 老挝 LA 856 -1 457
Latvia 拉脱维亚 LV 371 -5 247
Lebanon 黎巴嫩 LB 961 -6 415
Lesotho 莱索托 LS 266 -6 651
Liberia 利比里亚 LR 231 -8 618
Libya 利比亚 LY 218 -6 606
Liechtenstein 列支敦士登 LI 423 -7 295
Lithuania 立陶宛 LT 370 -5 246
Luxembourg 卢森堡 LU 352 -7 270
Macao 澳门 MO 853 0 455
Madagascar 马达加斯加 MG 261 -5 646
Malawi 马拉维 MW 265 -6 650
Malaysia 马来西亚 MY 60 -0.5 502
Maldives 马尔代夫 MV 960 -7 472
Mali 马里 ML 223 -8 610
Malta 马耳他 MT 356 -7 278
Mariana Is 马里亚那群岛 MP 1670 +1 534
Martinique 马提尼克 MQ 596 -12 340
Mauritius 毛里求斯 MU 230 -4 617
Mexico 墨西哥 MX 52 -15 334
Moldova 摩尔多瓦 MD 373 -5 259
Monaco 摩纳哥 MC 377 -7 212
Mongolia 蒙古 MN 976 0 428
Montserrat Is 蒙特塞拉特岛 MS 1664 -12 354
Morocco 摩洛哥 MA 212 -6 604
Mozambique 莫桑比克 MZ 258 -6 643
Namibia 纳米比亚 NA 264 -7 649
Nauru 瑙鲁 NR 674 +4 536
Nepal 尼泊尔 NP 977 -2.3 429
Netheriands Antilles 荷属安的列斯   599 -12  
Netherlands 荷兰 NL 31 -7 204
New Zealand 新西兰 NZ 64 +4 530
Nicaragua 尼加拉瓜 NI 505 -14 710
Niger 尼日尔 NE 227 -8 614
Nigeria 尼日利亚 NG 234 -7 621
North Korea 朝鲜 KP 850 +1 467
Norway 挪威 NO 47 -7 242
Oman 阿曼 OM 968 -4 422
Pakistan 巴基斯坦 PK 92 -2.3 410
Panama 巴拿马 PA 507 -13 714
Papua New Cuinea 巴布亚新几内亚 PG 675 +2 537
Paraguay 巴拉圭 PY 595 -12 744
Peru 秘鲁 PE 51 -13 716
Philippines 菲律宾 PH 63 0 515
Poland 波兰 PL 48 -7 260
French Polynesia 法属玻利尼西亚 PF 689 +3 547
Portugal 葡萄牙 PT 351 -8 268
Puerto Rico 波多黎各 PR 1787 -12 330
Qatar 卡塔尔 QA 974 -5 427
Reunion 留尼旺 RE 262 -4 647
Romania 罗马尼亚 RO 40 -6 226
Russia 俄罗斯 RU 7 -5 250
Saint Lueia 圣卢西亚 LC 1758 -12 358
Saint Vincent 圣文森特岛 VC 1784 -12 360
American Samoa 美属萨摩亚 AS 684 -19 544
Samoa 萨摩亚 WS 685 -19 549
San Marino 圣马力诺 SM 378 -7 292
Sao Tome and Principe 圣多美和普林西比 ST 239 -8 626
Saudi Arabia 沙特阿拉伯 SA 966 -5 420
Senegal 塞内加尔 SN 221 -8 608
Seychelles 塞舌尔 SC 248 -4 633
Sierra Leone 塞拉利昂 SL 232 -8 619
Singapore 新加坡 SG 65 +0.3 525
Slovakia 斯洛伐克 SK 421 -7 231
Slovenia 斯洛文尼亚 SI 386 -7 293
Solomon Is 所罗门群岛 SB 677 +3 540
Somali 索马里 SO 252 -5 637
South Africa 南非 ZA 27 -6 655
Spain 西班牙 ES 34 -8 214
Sri Lanka 斯里兰卡 LK 94 0 413
St.Lucia 圣卢西亚 LC 1758 -12 358
St.Vincent 圣文森特 VC 1784 -12 360
Sudan 苏丹 SD 249 -6 634
Suriname 苏里南 SR 597 -11.3 746
Swaziland 斯威士兰 SZ 268 -6 653
Sweden 瑞典 SE 46 -7 240
Switzerland 瑞士 CH 41 -7 228
Syria 叙利亚 SY 963 -6 417
Taiwan 台湾 TW 886 0 466
Tajikstan 塔吉克斯坦 TJ 992 -5 436
Tanzania 坦桑尼亚 TZ 255 -5 640
Thailand 泰国 TH 66 -1 520
Togo 多哥 TG 228 -8 615
Tonga 汤加 TO 676 +4 539
Trinidad and Tobago 特立尼达和多巴哥 TT 1809 -12 374
Tunisia 突尼斯 TN 216 -7 605
Turkey 土耳其 TR 90 -6 286
Turkmenistan 土库曼斯坦 TM 993 -5 438
Uganda 乌干达 UG 256 -5 641
Ukraine 乌克兰 UA 380 -5 255
United Arab Emirates 阿拉伯联合酋长国 AE 971 -4 424,430~431
United Kiongdom 英国 GB 44 -8 234~235
United States of America 美国 US 1 -13 310~316
Uruguay 乌拉圭 UY 598 -10.3 748
Uzbekistan 乌兹别克斯坦 UZ 233 -5 434
Venezuela 委内瑞拉 VE 58 -12.3 734
Vietnam 越南 VN 84 -1 452
Yemen 也门 YE 967 -5 421
Zimbabwe 津巴布韦 ZW 263 -6 648
Zambia 赞比亚 ZM 260 -6 645

参考链接

posted @ 2016-12-27 16:09  syyong  阅读(1506)  评论(0编辑  收藏  举报