在國際化組件的學習過程中,我們已經(jīng)接觸過了NumberFormatter這種數(shù)字的格式化操作,它可以讓我們將數(shù)字轉換成標準格式、貨幣、本地語言等形式。今天我們來學習的是另一種專門用于信息格式化的類MessageFormatter,它主要是針對字符串的操作。
MessageFormatter 也是遵循的 ICU 規(guī)范,底層是 C 中的 ICU 操作,所以和 C 相關代碼的使用方式?jīng)]有太大的區(qū)別。
格式化
// 格式化 $fmt = new MessageFormatter("zh_CN", "{0,number,integer} 只猴子在 {1,number,integer} 顆樹上,每只樹上有 {2,number} 只猴子"); echo $fmt->format([4560, 123, 4560 / 123]), PHP_EOL; // 4,560 只猴子在 123 顆樹上,每只樹上有 37.073 只猴子 $fmt = new MessageFormatter("de", "{0,number,integer} Affen auf {1,number,integer} B?umen sind {2,number} Affen pro Baum"); echo $fmt->format([4560, 123, 4560 / 123]), PHP_EOL; // 4.560 Affen auf 123 B?umen sind 37,073 Affen pro Baum echo MessageFormatter::formatMessage("zh_CN", "{0,number,integer} 只猴子在 {1,number,integer} 顆樹上,每只樹上有 {2,number} 只猴子", [4560, 123, 4560 / 123]), PHP_EOL; // 4,560 只猴子在 123 顆樹上,每只樹上有 37.073 只猴子 echo MessageFormatter::formatMessage("de", "{0,number,integer} Affen auf {1,number,integer} B?umen sind {2,number} Affen pro Baum", [4560, 123, 4560 / 123]), PHP_EOL; // 4.560 Affen auf 123 B?umen sind 37,073 Affen pro Baum
看到了嗎?類似于 PDO 里預編譯操作的占位符。在調(diào)用 format() 方法后,就可以讓這個方法里面的參數(shù)來替換占位符的內(nèi)容。
我們可以指定占位的所使用的參數(shù)類型和位置,{參數(shù)下標,類型,擴展類型} 這就是這個信息數(shù)據(jù)格式化的占位符的規(guī)則定義??雌饋砻菜坪芎唵窝剑鋵嵥€有