【问题标题】:Can parameters in MessageFormat strings be optional?MessageFormat 字符串中的参数可以是可选的吗?
【发布时间】:2013-05-29 05:07:10
【问题描述】:

我正在使用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} = 

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

我是否可以在消息格式字符串中将参数标记为可选(本质上是忽略该参数,如果未传入该参数的值)?

【问题讨论】:

  • 另一种选择可能是在格式中使用 ICU 的选择选择器以返回纯文本格式的字符串或 HTML/标记字符串。在任何情况下,如果你提供 {n},你最好为 n 传递一些东西。

标签: php internationalization icu messageformat


【解决方案1】:

在 PHP 5.5 中,正如 changed functions guide 中所述,这现在是可能的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-29
    • 2010-11-24
    • 2023-02-09
    • 2017-06-10
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多