在國際化組件的學習過程中,我們已經接觸過了NumberFormatter這種數字的格式化操作,它可以讓我們將數字轉換成標準格式、貨幣、本地語言等形式。今天我們來學習的是另一種專門用于信息格式化的類MessageFormatter,它主要是針對字符串的操作。
MessageFormatter 也是遵循的 ICU 規(guī)范,底層是 C 中的 ICU 操作,所以和 C 相關代碼的使用方式沒有太大的區(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 里預編譯操作的占位符。在調用 format() 方法后,就可以讓這個方法里面的參數來替換占位符的內容。
我們可以指定占位的所使用的參數類型和位置,{參數下標,類型,擴展類型} 這就是這個信息數據格式化的占位符的規(guī)則定義??雌饋砻菜坪芎唵窝?,其實它還有