國際化與在地化 程式設計

所謂的國際化:就是根據特定的 locale 信息,提取與之相應的字符串或其它一些東西(比如時間和貨幣的格式)等等。這涉及到三個問題:

1,如何確定語言環境。
2,如何保存與 locale 相關的字符串或其它信息。
3,如何根據 locale 提取字符串和其它相應的信息。

https://astaxie.gitbooks.io/build-web-application-with-golang/content/zh/10.0.html




地區設定:https://zh.wikipedia.org/wiki/%E5%8C%BA%E5%9F%9F%E8%AE%BE%E7%BD%AE




Unicode 字元平面對映:
https://zh.wikipedia.org/wiki/Unicode%E5%AD%97%E7%AC%A6%E5%B9%B3%E9%9D%A2%E6%98%A0%E5%B0%84

http://www.unicode.org/

讀出一個 character, utf-8 to unicode convert 後的一個 character (not word), 兩個byte 它的值:
# 0000-007F:C0控制符及基本拉丁文 (C0 Control and Basic Latin)
就表示它是拉丁文 character
而英文只用到 128 也就是 7F 所以 0000-007F 的字就必然落在英文的範圍. 但不代表它不會是拉丁語系的 word 中的一個 character
兩個byte 它的值:
# 0080-00FF:C1控制符及拉丁文補充-1 (C1 Control and Latin 1 Supplement)
這就表示這個字是包括了法德葡西意等拉丁字, 但一定不是英文字. 這個word 不可能會是英文字了.

character = 拉丁語中的字符, 如英文的 A,B,C,D... 到 Z
word = 一個字, 例如 apple 為一個字.




如果要開發一個多語系的網站時,其中一種方法可以使用瀏覽器所設定的語系來判斷使用者的網頁語系。

http://blog.roodo.com/jessica_bird/archives/10029085.html

當瀏覽網頁時,瀏覽器會發送給 web 伺服器 HTTP Headers Information ,在表頭資訊裡,包含了這樣一個信息 Accept-Language,這是用來設置瀏覽器可接受的語言選項,可以設置一個以上的語系,再依優先順序使用。

以 PHP 來說,可使用 $_SERVER['HTTP_ACCEPT_LANGUAGE'] 來取得,取得類似 “zh-cn” 這樣子的結果;如果是多語系設定,則類似 “zh-cn,en;q=0.8,ko;q=0.5,zh-tw;q=0.3″ 這樣子的情況。

$lang = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);

if($lang[0]=='zh-tw')
{  //如果瀏覽器使用繁體中文,則為true。
 header("Location: ch/index.php"); //轉址到中文網頁。
else
 header("Location: en/index.php"); //轉址到英文網頁。
}

用 $_SERVER['HTTP_ACCEPT_LANGUAGE'] 來取得瀏覽器的訊息,此時若瀏覽器設為多語系,$lang 會是陣列,並且以逗號(,)做為陣列值的切割。

explode()
語法 : array explode (string separator, string string [, int limit])
說明 :
傳回一個字串的陣列,以參數 separator 為界線將參數 string 切開,如果有設定參數 limit,則傳回的陣列最多將會包含 limit 個元素,而最後一個元素將會包含 string 全部剩餘的部份。

http://php.net/manual/en/function.explode.php




檢測字串的編碼:
http://us2.php.net/manual/en/function.mb-detect-encoding.php




google 『字串 語系判斷』:
https://www.google.com.tw/search?espv=2&q=%E5%AD%97%E4%B8%B2+%E8%AA%9E%E7%B3%BB%E5%88%A4%E6%96%B7




語系代碼:

https://zh.wikipedia.org/wiki/%E5%8C%BA%E5%9F%9F%E8%AE%BE%E7%BD%AE
http://blog.roodo.com/jessica_bird/archives/10029085.html
http://www.htmldrive.net/items/demo/1312/-jQuery-Useful-freeze-header-row-in-table-plugin

Culture Name Display Name Culture Code ISO 639x
af-ZA Afrikaans - South Africa 0x0436 AFK
sq-AL Albanian - Albania 0x041C SQI
ar-DZ Arabic - Algeria 0x1401 ARG
ar-BH Arabic - Bahrain 0x3C01 ARH
ar-EG Arabic - Egypt 0x0C01 ARE
ar-IQ Arabic - Iraq 0x0801 ARI
ar-JO Arabic - Jordan 0x2C01 ARJ
ar-KW Arabic - Kuwait 0x3401 ARK
ar-LB Arabic - Lebanon 0x3001 ARB
ar-LY Arabic - Libya 0x1001 ARL
ar-MA Arabic - Morocco 0x1801 ARM
ar-OM Arabic - Oman 0x2001 ARO
ar-QA Arabic - Qatar 0x4001 ARQ
ar-SA Arabic - Saudi Arabia 0x0401 ARA
ar-SY Arabic - Syria 0x2801 ARS
ar-TN Arabic - Tunisia 0x1C01 ART
ar-AE Arabic - United Arab Emirates 0x3801 ARU
ar-YE Arabic - Yemen 0x2401 ARY
hy-AM Armenian - Armenia 0x042B
Cy-az-AZ Azeri (Cyrillic) - Azerbaijan 0x082C
Lt-az-AZ Azeri (Latin) - Azerbaijan 0x042C
eu-ES Basque - Basque 0x042D EUQ
be-BY Belarusian - Belarus 0x0423 BEL
bg-BG Bulgarian - Bulgaria 0x0402 BGR
ca-ES Catalan - Catalan 0x0403 CAT
zh-CN Chinese - China 0x0804 CHS
zh-HK Chinese - Hong Kong SAR 0x0C04 ZHH
zh-MO Chinese - Macau SAR 0x1404
zh-SG Chinese - Singapore 0x1004 ZHI
zh-TW Chinese - Taiwan 0x0404 CHT
zh-CHS Chinese (Simplified) 0x0004
zh-CHT Chinese (Traditional) 0x7C04
hr-HR Croatian - Croatia 0x041A HRV
cs-CZ Czech - Czech Republic 0x0405 CSY
da-DK Danish - Denmark 0x0406 DAN
div-MV Dhivehi - Maldives 0x0465
nl-BE Dutch - Belgium 0x0813 NLB
nl-NL Dutch - The Netherlands 0x0413
en-AU English - Australia 0x0C09 ENA
en-BZ English - Belize 0x2809 ENL
en-CA English - Canada 0x1009 ENC
en-CB English - Caribbean 0x2409
en-IE English - Ireland 0x1809 ENI
en-JM English - Jamaica 0x2009 ENJ
en-NZ English - New Zealand 0x1409 ENZ
en-PH English - Philippines 0x3409
en-ZA English - South Africa 0x1C09 ENS
en-TT English - Trinidad and Tobago 0x2C09 ENT
en-GB English - United Kingdom 0x0809 ENG
en-US English - United States 0x0409 ENU
en-ZW English - Zimbabwe 0x3009
et-EE Estonian - Estonia 0x0425 ETI
fo-FO Faroese - Faroe Islands 0x0438 FOS
fa-IR Farsi - Iran 0x0429 FAR
fi-FI Finnish - Finland 0x040B FIN
fr-BE French - Belgium 0x080C FRB
fr-CA French - Canada 0x0C0C FRC
fr-FR French - France 0x040C
fr-LU French - Luxembourg 0x140C FRL
fr-MC French - Monaco 0x180C
fr-CH French - Switzerland 0x100C FRS
gl-ES Galician - Galician 0x0456
ka-GE Georgian - Georgia 0x0437
de-AT German - Austria 0x0C07 DEA
de-DE German - Germany 0x0407
de-LI German - Liechtenstein 0x1407 DEC
de-LU German - Luxembourg 0x1007 DEL
de-CH German - Switzerland 0x0807 DES
el-GR Greek - Greece 0x0408 ELL
gu-IN Gujarati - India 0x0447
he-IL Hebrew - Israel 0x040D HEB
hi-IN Hindi - India 0x0439 HIN
hu-HU Hungarian - Hungary 0x040E HUN
is-IS Icelandic - Iceland 0x040F ISL
id-ID Indonesian - Indonesia 0x0421
it-IT Italian - Italy 0x0410
it-CH Italian - Switzerland 0x0810 ITS
ja-JP Japanese - Japan 0x0411 JPN
kn-IN Kannada - India 0x044B
kk-KZ Kazakh - Kazakhstan 0x043F
kok-IN Konkani - India 0x0457
ko-KR Korean - Korea 0x0412 KOR
ky-KZ Kyrgyz - Kazakhstan 0x0440
lv-LV Latvian - Latvia 0x0426 LVI
lt-LT Lithuanian - Lithuania 0x0427 LTH
mk-MK Macedonian (FYROM) 0x042F MKD
ms-BN Malay - Brunei 0x083E
ms-MY Malay - Malaysia 0x043E
mr-IN Marathi - India 0x044E
mn-MN Mongolian - Mongolia 0x0450
nb-NO Norwegian (Bokmål) - Norway 0x0414
nn-NO Norwegian (Nynorsk) - Norway 0x0814
pl-PL Polish - Poland 0x0415 PLK
pt-BR Portuguese - Brazil 0x0416 PTB
pt-PT Portuguese - Portugal 0x0816
pa-IN Punjabi - India 0x0446
ro-RO Romanian - Romania 0x0418 ROM
ru-RU Russian - Russia 0x0419 RUS
sa-IN Sanskrit - India 0x044F
Cy-sr-SP Serbian (Cyrillic) - Serbia 0x0C1A
Lt-sr-SP Serbian (Latin) - Serbia 0x081A
sk-SK Slovak - Slovakia 0x041B SKY
sl-SI Slovenian - Slovenia 0x0424 SLV
es-AR Spanish - Argentina 0x2C0A ESS
es-BO Spanish - Bolivia 0x400A ESB
es-CL Spanish - Chile 0x340A ESL
es-CO Spanish - Colombia 0x240A ESO
es-CR Spanish - Costa Rica 0x140A ESC
es-DO Spanish - Dominican Republic 0x1C0A ESD
es-EC Spanish - Ecuador 0x300A ESF
es-SV Spanish - El Salvador 0x440A ESE
es-GT Spanish - Guatemala 0x100A ESG
es-HN Spanish - Honduras 0x480A ESH
es-MX Spanish - Mexico 0x080A ESM
es-NI Spanish - Nicaragua 0x4C0A ESI
es-PA Spanish - Panama 0x180A ESA
es-PY Spanish - Paraguay 0x3C0A ESZ
es-PE Spanish - Peru 0x280A ESR
es-PR Spanish - Puerto Rico 0x500A ES
es-ES Spanish - Spain 0x0C0A
es-UY Spanish - Uruguay 0x380A ESY
es-VE Spanish - Venezuela 0x200A ESV
sw-KE Swahili - Kenya 0x0441
sv-FI Swedish - Finland 0x081D SVF
sv-SE Swedish - Sweden 0x041D
syr-SY Syriac - Syria 0x045A
ta-IN Tamil - India 0x0449
tt-RU Tatar - Russia 0x0444
te-IN Telugu - India 0x044A
th-TH Thai - Thailand 0x041E THA
tr-TR Turkish - Turkey 0x041F TRK
uk-UA Ukrainian - Ukraine 0x0422 UKR
ur-PK Urdu - Pakistan 0x0420 URD
Cy-uz-UZ Uzbek (Cyrillic) - Uzbekistan 0x0843
Lt-uz-UZ Uzbek (Latin) - Uzbekistan 0x0443
vi-VN Vietnamese - Vietnam 0x042A VIT



程式語言編年史

程式語言編年史原文 下面這張圖片描繪了整個程式語言的歷史。包括各種程式語言的發明人、程式語言的特點和適用領域、被什麼網站或公司使用等 (檢視 完整高清圖 )。 之所以會有那麼多不同的程式語言是因為設計程式語言的初衷不同、對語言學習曲線的追求不同、不同程式之間的執行成本差異...