2024 日本 PHP 研討會

MessageFormatter 類別

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)

簡介

MessageFormatter 是一個具體類別,允許使用者產生串接的、語言中性的訊息。此類別中提供的方法用於建構所有終端使用者看到的訊息。

MessageFormatter 類別會將程式提供的各種片段(例如文字片段、數字和日期)組裝成訊息。由於有了 MessageFormatter 類別,程式不需要知道片段的順序。該類別使用片段的格式規範,將它們組裝成包含在資源包中單一字串的訊息。例如,MessageFormatter 讓您可以列印「已列印 y 個檔案中的 x 個...」這句話,同時仍保有翻譯的彈性。

以前,終端使用者訊息會被創建成一個句子並以字串處理。這個程序會為本地化人員帶來問題,因為句子結構、詞序、數字格式等在不同語言之間差異很大。建立訊息的語言中性方法是將訊息的每個部分分開,並提供資料的鍵值。使用這些鍵值,MessageFormatter 類別可以串連訊息的各個部分、將它們本地化,並向終端使用者顯示格式良好的字串。

MessageFormatter 接收一組物件,格式化它們,然後將格式化的字串插入到模式中的適當位置。選擇格式可以與 MessageFormatter 結合使用,以處理複數、匹配數字和從項目陣列中進行選擇。通常,訊息格式來自資源,而參數會在執行階段動態設定。

類別概要

類別 MessageFormatter {
/* 方法 */
公開 __construct(字串 $locale, 字串 $pattern)
公開 靜態 create(字串 $locale, 字串 $pattern): ?MessageFormatter
公開 format(陣列 $values): 字串|false
公開 靜態 formatMessage(字串 $locale, 字串 $pattern, 陣列 $values): 字串|false
公開 getLocale(): 字串
public parse(字串 $string): 陣列|false
public static parseMessage(字串 $locale, 字串 $pattern, 字串 $message): 陣列|false
public setPattern(字串 $pattern): 布林值
}

目錄

新增註解

使用者貢獻的註解 1 則註解

3
from dot php dot net at NOSPAM dot brainbox dot cz
10 年前
在 PHP < 5.5 版本中,MessageFormatter 無法使用 DateTime 實例作為參數。實例將會被轉換為值為 0 的時間戳記(例如 1970-01-01),並會產生以下注意事項:「無法將 DateTime 類別的物件轉換為 int」。在這些舊的 PHP 版本中,您必須手動將實例轉換為時間戳記。

<?php
$datetime
= new DateTime();
if (
PHP_VERSION_ID < 50500) { // PHP 版本小於 5.5 需要轉換成時間戳記
MessageFormatter::formatMessage('en_US', 'Today is {0, date, full}.', array($datetime->getTimestamp()));
} else {
// 目前程式碼
MessageFormatter::formatMessage('en_US', 'Today is {0, date, full}.', array($datetime));
}
?>
To Top