如何为MessageFormat转义DecimalFormat模式?

时间:2018-10-11 12:20:35

标签: php icu

模式}}}}123ICU DecimalFormat中是有效的语法,因为}在填充字符的合法范围内。可以在PHP中进行如下验证:

$f = new NumberFormatter('en_GB', NumberFormatter::PATTERN_DECIMAL, '*}######0');
$this->assertSame('}}}}123', $f->format(123));
                   -------
                   correct

但是将其嵌入ICU MessageFormat中时,我们遇到的问题是,大括号字符过早地结束了参数,需要转义。

再次,使用PHP验证这是否引发IntlException:

$f = new MessageFormatter('en_GB', "{0,number,*}######0}");
$this->assertSame('}}}}123', $f->format([123]));

根据ICU MessageFormat语法引用格式也不起作用,因为在DecimalFormat语法中,引用符号是无效的 padChar 。总之,这些都不起作用:

  • {0,number,*}######0}
  • {0,number,*'}'######0}
  • {0,number,'*}######0'}

DecimalFormat语法似乎与MessageFormat的 argStyleText 语法不兼容。

这是PHP的Intl扩展中的错误,还是有办法逃避消息中的十进制模式?

请注意,这是有关ICU MessageFormat的学术问题,我并不是在问如何在PHP中填充整数。

0 个答案:

没有答案