[閱讀]本地化和國際化(L10n和I18n)的心得報告

分類: 技術分享 作者: 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 提供三種方式設定決定怎麼找出所屬區域:

  1. (使用者)Browser
  2. (Hosting)Environment
  3. Framework

Zend_Locale 通常會與下列組件一起使用。

  • Zend_Currency
  • Zend_Date
  • Zend_Calendar
  • Zend_Measure
  • Zend_Translate
  • Zend_TimeSync

我只有大概先看了一下 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 這個網站可以用:
(是我紐西蘭的台灣人同學自己做的網站, 目的是 "尋找共乘的同伴" & "愛地球")

  • 分三種語言, 有分國家/區域
  • 單位: 美國人用公里,但英國人用英哩
  • 日期: 美國人習慣是 YYYY-MM-DD 但 英國人習慣用 DD/MM, YYYY
  • 翻譯: 像 週一,週二,週三,週四,週五 這類的選項 就可以用 Zend_Translate 來做

這個網站的幾個核心功能 如果用 Zend_Locale 或 類似的架構 "感覺"會滿好套的。
等將來他網站的會員版塊越來越大,只有一個人在維護系統的他,要再繼續新增一個國家/地區的時候,就只要準備翻譯就好了。

其他有應用到 本地化和國際化 的大站

www.paypal.com

進站它會幫使用者自動找到國家跟語言,它的刷卡機制也提供七種的幣值轉換,刷卡頁面網站目前有提供 英文 日文跟西班牙文 三種語言。
paypal

www.ebay.com

大家都應該知道在ebay可以下標其他國家的商品,價錢也會經過匯率計算轉換成使用者的幣值。

最後:
(L10n和I18n)這個題目實在很大,以前"瞄"過很多論文都是在專門寫這類的東西(但看不懂),所以其實不敢自己妄自下結論,

但我一直滿喜歡有關 多國語言 跟 匯率轉換(再跟Paypal串接) 跟 利用 所在地 跟 重量 計算 運費 的相關功能。

這些功能 有的在 Pear 可以找得到。

我要留言

關於這裡

這個部落格分享了哇寶在電子商務領域的技術及資訊,希望能讓更多人一起為台灣的網路產業加油。