使用PHP为INTL MessageFormatter命名参数

时间:2012-02-22 19:04:21

标签: php icu named-parameters intl

我想在传递给MessageFormater的字符串中使用命名参数,就像那样

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

运行此代码时,我收到错误消息:

$fmt->getErrorMessage() returns
  

数字格式设置失败:U_ILLEGAL_ARGUMENT_ERROR

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

效果很好。

icu-project网站报告,自ICU 3.8(Seen here)起支持命名参数,我使用4.2.1

独角兽在哪里? PHP不支持MessageFormatter的命名参数? 也许有另一种选择?

2 个答案:

答案 0 :(得分:1)

这是在将来(截至今天)版本的intl中修复的。见https://bugs.php.net/bug.php?id=61871

答案 1 :(得分:0)

是的,似乎是这样。你想听到什么?

更新:OP编辑他的问题后

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

请参阅sprintf()

当然,它不是任何基于本地的东西。