gpt4 book ai didi

code-readability - 处理单打/复数的最优雅的方式?

转载 作者:行者123 更新时间:2023-12-04 02:44:56 27 4
gpt4 key购买 nike

假设您正在制作一个博客软件,并且想要显示一个条目获得的评论数量。你可以这样做:

[Entry title]
[Content........]
[ <?php print($numComments;) ?> Comments]

这可能会导致:
[Entry title]
[Content........]
5 Comments

但如果一个条目只有 1 条评论,我希望该行显示“评论”而不是“评论”。并在线 if/else s 丑陋且重复。

处理这个问题的最佳方法是什么?

最佳答案

请使用 ngettext 像这样的功能。它
允许您正确处理英语和其他语言中的复数
语言,一劳永逸。你像这样使用它:

printf(ngettext("%d Comment", "%d Comments", $numComments), $numComments);
ngettext如果只有一个注释和第二个格式,函数将返回第一个格式字符串( "%d
Comment"
)
字符串 ( "%d Comments" ) 如果还有更多。 printf函数将
然后将数字放入字符串中。

这可能看起来很多工作,但它非常强大:它有效
使用具有 的语言不止一种复数形式(!) - 他们
实际存在。 PHP手册给出了“window”这个词的例子
在一些异国情调中变成“1 okno”、“2 okna”和“5 oken”
我不认识的语言...

如果您决定使用 ngettext ,那么你 future 的用户
来自遥远国家的人会非常感谢你:-)

编辑:正如评论中所建议的,有一个功能可以
执行上述操作:
function pluralize($num, $singleWord, $pluralWord) {
return printf(ngettext($singleWord, $pluralWord, $num), $num);
}

默认情况下, xgettext不会识别这个新功能,但你可以
--keyword 添加它旗帜。给定一个文件 test.php
echo ngettext("foo", "foos", 1);
echo pluralize(2, "bar", "bars");

你可以用
xgettext --keyword=pluralize:2,3 test.php 

由此产生的 messages.po文件有这样的条目:
#: test.php:7
msgid "foo"
msgid_plural "foos"
msgstr[0] ""
msgstr[1] ""

#: test.php:8
msgid "bar"
msgid_plural "bars"
msgstr[0] ""
msgstr[1] ""

翻译人员将填写每个复数形式并正确填写
在消息目录标题中形成“Plural-Forms”行,您将
能够支持所有语言。

关于code-readability - 处理单打/复数的最优雅的方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1161399/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com