我已阅读有关翻译复数形式的 GNU Gettext 手册并查看其示例:
#, c-format
msgid "One file removed"
msgid_plural "%d files removed"
msgstr[0] "%d slika je uklonjena"
msgstr[1] "%d datoteke uklonjenih"
msgstr[2] "%d slika uklonjenih"
为什么 msgid_plural 与 msgid 不同,这不会违背让翻译知道复数形式的目的吗?
我认为我可以做这样的事情(对于英语):
#, c-format
msgid "X geese"
msgstr[0] "%d goose"
msgstr[1] "%d geese"
#, c-format
msgid "sentence_about_geese_at_the_lake"
msgstr[0] "There is one goose at the lake."
msgstr[1] "There are %d geese at the lake."
(仅使用一个 msgid)。
然后在我的代码中,我会有类似的东西:
<?php echo $this->translate('X geese', $numberA); ?>
<?php echo $this->translate('sentence_about_geese_at_the_lake', $numberB); ?>
如果 $numberA 是 3,它会说“3 geese”。
如果 $numberB 为 0,则下一行将显示“湖中有 0 只鹅”。
(因为对于英语,规则是(n != 1),所以复数用于任何等于 0 或大于 1 的数字)。
对我来说,为同一个短语集合指定 2 个 msgid 似乎是多余的。
谢谢你的帮助!