2

我想在传递给 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 起支持命名参数(见此处),我使用 4.2.1

独角兽在哪里?PHP 不支持 MessageFormatter 的命名参数?也许有替代方案?

4

2 回答 2

1

这在未来(截至今天)版本的 intl 中已修复。请参阅https://bugs.php.net/bug.php?id=61871

于 2012-06-27T14:20:56.343 回答
0

是的,看起来是这样。你想听什么?

更新:在 OP 编辑​​了他的问题之后

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

sprintf()

当然它没有任何基于本地的东西。

于 2012-02-22T19:08:23.920 回答