在國(guó)際化組件的學(xué)習(xí)過(guò)程中,我們已經(jīng)接觸過(guò)了NumberFormatter這種數(shù)字的格式化操作,它可以讓我們將數(shù)字轉(zhuǎn)換成標(biāo)準(zhǔn)格式、貨幣、本地語(yǔ)言等形式。今天我們來(lái)學(xué)習(xí)的是另一種專門用于信息格式化的類MessageFormatter,它主要是針對(duì)字符串的操作。
MessageFormatter 也是遵循的 ICU 規(guī)范,底層是 C 中的 ICU 操作,所以和 C 相關(guān)代碼的使用方式?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 里預(yù)編譯操作的占位符。在調(diào)用 format() 方法后,就可以讓這個(gè)方法里面的參數(shù)來(lái)替換占位符的內(nèi)容。
我們可以指定占位的所使用的參數(shù)類型和位置,{參數(shù)下標(biāo),類型,擴(kuò)展類型} 這就是這個(gè)信息數(shù)據(jù)格式化的占位符的規(guī)則定義??雌饋?lái)貌似很簡(jiǎn)單呀,其實(shí)它還有