【问题标题】:Named arguments for INTL MessageFormatter with PHP使用 PHP 的 INTL MessageFormatter 的命名参数
【发布时间】:2012-03-13 03:56:37
【问题描述】:

我想在传递给 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 的命名参数? 也许还有其他选择?

【问题讨论】:

    标签: php icu named-parameters intl


    【解决方案1】:

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

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

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

    sprintf()

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

    【讨论】:

    • 我知道这种方式。我的文本也发送给翻译。我想避免 %d, %s。翻译“我的名字是 {my_name}”比翻译“我的名字是 %s”更简单。这是一个不好的例子,因为这句话的意思很容易理解,但有时并非如此。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-23
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多