我在 PHP 中使用MessageFormat(intl
扩展的一部分)。该扩展使用 ICU 4.6.1。
但是,问题不在于 PHP。
我想通过对第一个令牌做出决定来格式化一段字符串{0}
:
- 什么时候,文本应该
{0}
是0
a
- 如果是
1
,文本应该是b
- 对于所有其他情况,文本应为
c
我知道这可以用plural
,=0
来完成0
,但是通过我的测试,它似乎不起作用,很可能是因为在 4.8 中引入了偏移量和自定义复数。
因此,我正在尝试使用select
:
{0, select, 0 {a} other {{0,plural,one{b}other{c}}}}
但是,由于某种原因,消息格式化程序无法格式化上述内容并返回false
(无法格式化)。
为什么会这样?我的语法有问题吗?
快速更新:经过一番挖掘,似乎我无法使用 select 来匹配以数字开头的值。有没有办法解决这个问题?
另一个更新:更新到 ICU 49.1.2 和intl
3.0.0a2。我现在可以使用=0
,=1
等,但这已停止工作(以前工作过):
{0}{0, plural, one{a} other{b}}
这在哪里起作用:
{0, plural, one{a} other{b}}