使用PHP为INTL MessageFormatter命名参数


Named arguments for INTL MessageFormatter with PHP

我想在传递给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项目网站报告称,自icu 3.8以来,命名论点得到支持(见此处),我使用4.2.1

独角兽在哪里?PHP不支持MessageFormatter的命名参数?也许还有其他选择?

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

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

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

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

参见sprintf()

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