Wabow Information Inc. Blog
分類: 技術分享 作者: suzy
16 四月 2009本地化和國際化(L10n和I18n)點我看中文的WIKI說明
它們兩個相輔相成,應用範圍也很廣,這幾年來一直都是經常被拿來討論的熱門話題。
I18n 的例子:
作業系統多國語言化,大家在 console 底下就不用看英文,還可以用無蝦米打中文。
L10n 的例子:
在 google.jp 跟在 google.com.tw 同樣的關鍵字,搜尋的結果會不一樣。
其實嚴格說來兩者是密不可分,I18n 的例子 也可以是 L10n 的例子。
簡單的說就是有一群人一直在 將世界各地所用的 語言、幣制、日期時間格式、匯率、甚至於姓與名的優先順序這樣的細節 等等 歸納起來做一個統整。再把規則標準化,讓大家在寫程式上可以遵循,再因地制宜。
規則是這樣作區分的,以中文為例:
zh 是 locale ,[CN、HK、MO、SG、TW] 是 region
| Chinese | zh | --- |
| zh_CN | China | |
| zh_HK | Hong Kong | |
| zh_MO | Macau | |
| zh_SG | Singapore | |
| zh_TW | Taiwan |
以前自己在做幣制/匯率之間的轉換時,我有試著一個個找出世界常用的幾種幣值 如 歐元、英鎊、日幣、人民幣 的 幣制與代表符號[$、¥、€....] 。
美金有到小數點第二位,有的幣只到小數點第一位,台幣就沒有小數點... 有的國家金額格式是用1,000.00 但有的國家用1.000,00。
歐元很多歐洲國家都有使用,所以並不是一個幣值對應一個國家。
當時光是整理+求證就花了不少時間,而且還有出錯的可能。程式上就只用PHP 的 函式 number_format 跟一個資料表去做轉換。其實還頗為麻煩。
Zend Framework 裡 也有 本地化和國際化 相關的組件 叫作 Zend_Locale。
Zend_Locale 提供三種方式設定決定怎麼找出所屬區域:
Zend_Locale 通常會與下列組件一起使用。
我只有大概先看了一下 Zend_Locale 的用法,下面幾個範例是我比較有印象的:
Zend_Locale 對於 數字上的運用:
$locale = new Zend_Locale('auto'); // 設為 auto 就是 會依 Browser->Environment->Framework的順序
$number = Zend_Locale_Format::getNumber('13.524,678', array('locale' => $locale));
$arabicScript = "١٠٠"; // Arabic for "100" (one hundred) $latinScript = Zend_Locale_Format::convertNumerals($arabicScript, 'Arab', 'Latn'); // 拉丁數字轉成阿拉伯數字 print "\nOriginal: " . $arabicScript; // ١٠٠ print "\nNormalized: " . $latinScript; // 100
Zend_Locale 對於 日期與時間的運用:
$dateString = Zend_Locale_Format::getDate('13.04.2006', array('date_format' =>'dd.MM.yyyy'));
$date = Zend_Locale_Format::getDate('04.13.2006', array('date_format' => 'dd.MM.yyyy', 'fix_date' => true));
註1: 還可以設定為PHP格式 setOptions(array('format_type' => 'php')),也可以自定格式
註2: 'fix_date' 的功能會簡單地對輸入的日期做簡單的檢核, eg如果日跟月搞錯它會幫你修正
閱讀心得:
把所有有關 Zend_Locale 這一章大略看完後,覺得沒有立刻可以拿來用的功能。也有可能是我的知識讓我還想不到它更深的意義。
一時好像無法說出 Zend_Locale 的好處在哪...
後來我想到 www.carpoolking.com 這個網站可以用:
(是我紐西蘭的台灣人同學自己做的網站, 目的是 "尋找共乘的同伴" & "愛地球")
這個網站的幾個核心功能 如果用 Zend_Locale 或 類似的架構 "感覺"會滿好套的。
等將來他網站的會員版塊越來越大,只有一個人在維護系統的他,要再繼續新增一個國家/地區的時候,就只要準備翻譯就好了。
其他有應用到 本地化和國際化 的大站:
www.paypal.com
進站它會幫使用者自動找到國家跟語言,它的刷卡機制也提供七種的幣值轉換,刷卡頁面網站目前有提供 英文 日文跟西班牙文 三種語言。

www.ebay.com
大家都應該知道在ebay可以下標其他國家的商品,價錢也會經過匯率計算轉換成使用者的幣值。
最後:
(L10n和I18n)這個題目實在很大,以前"瞄"過很多論文都是在專門寫這類的東西(但看不懂),所以其實不敢自己妄自下結論,
但我一直滿喜歡有關 多國語言 跟 匯率轉換(再跟Paypal串接) 跟 利用 所在地 跟 重量 計算 運費 的相關功能。
這些功能 有的在 Pear 可以找得到。