2012-02-22 31 views
2

我想用命名的參數傳遞給MessageFormater一個字符串,這樣爲INTL MessageFormatter命名的參數與PHP

$fmt = new MessageFormatter("en_US", "My name id {my_name}"); 
$fmt->format(array('my_name' => 'John')); 

當我運行此代碼,我得到錯誤信息:

$fmt->getErrorMessage() returns 

數字格式失敗:U_ILLEGAL_ARGUMENT_ERROR

瓦ereas

$fmt = new MessageFormatter("en_US", "My name id {0}"); 
$fmt->format(array(0 => 'John')); 

效果很好。該命名參數

ICU項目網站報告,因爲ICU 3.8(Seen here)的支持,我用的是4.2.1

哪裏麒麟? PHP不支持MessageFormatter的命名參數? 也許有另一種選擇?

回答

0

是的,似乎是這樣。你想聽什麼?

更新:在OP編輯他的問題後

echo vsprintf('My name id %s', array('John')); 

sprintf()

當然它沒有任何基於本地的東西。

+0

嗨,我編輯了我的主題以尋求替代方案。 – Tristan 2012-02-23 11:10:23

+0

我知道這種方式。我的文本也發送給譯員。我想避免%d,%s。翻譯「我的名字是{my_name}」比「我的名字是%s」最簡單。這是一個不好的例子,因爲很容易理解這句話的含義,但有時並非如此。 – Tristan 2012-02-23 11:45:55