0

我正在使用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}to{5}将是空字符串):

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

但是,这非常麻烦并且不是很好。

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

4

1 回答 1

0

在 PHP 5.5 中,这现在是可能的,如更改的函数指南中所述。

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

于 2013-06-20T23:59:59.330 回答