今天我們來聊一下 PHP 相較于其他語言的重要特點之一:國際化支持,更具體地說,是 PHP 的 Intl 模塊。
國際化的意義在于,我們常用的編程語言大多數是英文,但世界上每個地方的人都有可能使用我們開發的程序,包括使用不同的語言、數字格式、時間格式。如果我們不注重國際化支持,就會出現這樣的情況:輸出的數字或日期格式是錯誤的或者不符因地制宜的習慣。為了解決這個問題,PHP 團隊加入了 Intl 模塊。
簡單介紹完 Intl 模塊的意義,下面我們通過一些例子來展示它的具體用法。
// 加載Intl擴展 extension=intl.so
我們需要使用 Intl 模塊必需加載擴展??梢栽?PHP.ini 文件中打開找到 extension=intl.so 打開,在不存在則需要手動添加。
// 處理時間 $date = new IntlDateFormatter( 'zh_CN', IntlDateFormatter::LONG, IntlDateFormatter::LONG, 'Asia/Shanghai', IntlDateFormatter::GREGORIAN ); $dateText = $date->format(new DateTime()); echo $dateText;
在 PHP 中處理時間,我們通常使用 date() 函數。但這是有問題的: 它只能在 Unix 時間戳上操作,如果你想支持不同的地區、使用不同的時間格式,你得寫許多不同的格式化字符串。Intl模塊提供了一個更智能的方式:IntlDateFormatter,幫助我們根據地區和風格設置日期格式。
// 處理貨幣 $formatter = new NumberFormatter('zh_CN', NumberFormatter::CURRENCY); $price = $formatter->formatCurrency(12345.67, 'USD'); echo $price;
另一個國際化的問題是貨幣格式化,不能僅將美元顯示為美元。數字格式化和貨幣格式化情況類似。在 UTF-8 編碼中,Intl 組件可以愉快地處理各種語言、貨幣、模式等格式,以及以不同語言書寫的小數分隔號 (比如 1,098.25)。
// 處理數字格式 $formatter = new NumberFormatter('zh_CN', NumberFormatter::DECIMAL); $number = $formatter->format(12345.67); echo $number;
數字形式的格式化也難以進行處理,特別是當它們不遵循萬國編碼時。
這些例子或多或少地展示了 Intl 模塊的使用,更多詳情可以參看官網文檔。
總體來說,國際化是一個超出我們個人、團隊,甚至國際組織范圍的任務,在這個任務中 Intl 模塊在 PHP 中扮演著至關重要的角色。