MessageFormat字符串中的参数可以是可选的吗?

时间:2013-06-03 04:46:47

标签: php internationalization icu messageformat

我正在使用MessageFormatter类来格式化已翻译的字符串以显示给最终用户。

问题是我还需要在最终结果中插入一些html标记。例如,字符串可能只是Peter liked a photo,但是,我需要最终结果来包含标记:

<a href="blah.com">Peter</a> liked <a href="blah2.com">a photo</a>

经过大量研究后,特别是这些问题

我决定使用这种方法:

{1}{0}{2} liked {3}a photo{4}

其中:

{0} = Peter
{1} = <a href="blah.com">
{2} = </a>
{3} = <a href="blah2.com">
{4} = </a>

除了有点麻烦之外,它还运行得很好。但是,我不想将标记包含在资源包字符串中的主要原因是,有时候,我希望在没有HTML标记的情况下返回字符串。

问题在于,如果我只将1个参数(Peter)传递给MessageFormatter,它会抱怨我缺少参数。

我可以做的一件事就是传递这个({1}{5}将是空字符串):

{0} = Peter
{1} = 
{2} = 
{3} = 
{4} = 

然而,这非常麻烦且不太好。

无论如何,我可以在消息格式字符串中将参数标记为可选(实质上,只是忽略参数,如果没有传入它的值)?

1 个答案:

答案 0 :(得分:0)

在PHP 5.5中,现在可以按照changed functions guide中的说明进行操作。

  

MessageFormatter :: format()和相关函数不再出错   提供的论点数量不足。相反,   占位符不会被替换。