我认为我们在应用程序说“剩余1分钟”或类似内容之前都遇到过这个问题。我认为这一观察证明了许多程序员忽略了这个问题。
在我的项目中,我通常在这些方面做了一些事情来解释复数名词:
$Count = count($Items);
$Noun = 'minute';
if ($Count != 1)
{
$Noun .= 's';
}
echo sprintf('There are %u %s remaining.', $Count, $Noun);
我对这种方法有几个问题:
有没有人对通用的模块化方法有什么想法来解决这个问题?我很满意,不仅仅有一个答案。
答案 0 :(得分:3)
通常实现一个接受数字和所有单数和复数形容词的函数。
所以样本调用可能是
echo 'There are ' $count . ' ' . pluralize($count, array('minute', 'minutes')) . ' remaining';
如果您决定将应用程序翻译成多种语言,此链接将有助于正确复数:http://translate.sourceforge.net/wiki/l10n/pluralforms
ps:如果您传递额外的第3个参数language
,我将使用任何语言都可以正常使用,这将指定使用哪个复数公式。
答案 1 :(得分:2)
我认为使用一般方法会使性能过高,而不会影响这些小代码的实用性。为了实现通用方法,你应该使用dictonary或类似的东西,这与利益相比是非常不必要的。也许这样一个更简单的路线就是性能和实用性之间的正确权衡。
$Count = count($Items);
$Noun = 'minute';
echo sprintf('There are %u %s(s) remaining.', $Count, $Noun);
答案 2 :(得分:1)
处理这个问题的一个简单方法是创建一个带有三个参数的函数:数字,单词的单数拼写和单词的复数拼写。该函数返回单词的单数或复数形式,具体取决于值。它仍然把责任放在程序员身上,但它比你在这里展示的要清晰。