2

ICU 消息格式似乎对我不起作用。这是示例:

$n = 22;
$f = MessageFormatter::create('ru', '{n, plural, one{корова} few{коровы} many{коров} other{коров}}');
echo $n.' '.$f->format(['n' => $n])."\n";

我得到22 коров了输出,但显然应该得到22 коровы. 在几个 ubuntu 服务器上尝试过。

语言:俄语

php-intl 版本 1.1.0

ICU 版本 52.1

任何帮助都会得到帮助,因为我坚持下去。

4

1 回答 1

3

这是一个令人讨厌的错误,我花了将近一个小时才弄清楚。好吧,事实证明在ICU52.1 中(可能之前也是如此)我们有以下内容:

set34{
    many{
        "v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100"
        " = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …"
    }
    one{
        "v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 6"
        "1, 71, 81, 101, 1001, …"
    }
    other{
        " @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal"
        " 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
    }
}

来源:http: //source.icu-project.org/repos/icu/icu/tags/release-52-1/source/data/misc/plurals.txt

因此,2-4、22-24 等 ( 22 коровы) 的情况属于other修饰符,因此您的情况的正确语法是{n, plural, one{корова} few{коровы} many{коров} other{коровы}}. 我留下few了与较新ICU版本的兼容性(在这种情况下确实使用few了修饰符)。

于 2015-09-01T09:38:36.153 回答