Php 名词复数化的模块化方法
我想我们以前都遇到过这样的问题,应用程序说还有“1分钟”,或者类似的话。我认为这一观察结果证明了一个事实,即许多程序员忽略了这个问题 在我的项目中,我通常会按照以下思路来解释复数名词:Php 名词复数化的模块化方法,php,Php,我想我们以前都遇到过这样的问题,应用程序说还有“1分钟”,或者类似的话。我认为这一观察结果证明了一个事实,即许多程序员忽略了这个问题 在我的项目中,我通常会按照以下思路来解释复数名词: $Count = count($Items); $Noun = 'minute'; if ($Count != 1) { $Noun .= 's'; } echo sprintf('There are %u %s remaining.', $Count, $Noun); 我对这种方法有几个问题: 每次
$Count = count($Items);
$Noun = 'minute';
if ($Count != 1)
{
$Noun .= 's';
}
echo sprintf('There are %u %s remaining.', $Count, $Noun);
我对这种方法有几个问题:
有没有人对解决这个问题的通用、模块化方法有什么想法?我同意答案不止一个 实现一个接受数字和所有单数和复数形容词的函数是很常见的 因此,示例调用可能是
echo 'There are ' $count . ' ' . pluralize($count, array('minute', 'minutes')) . ' remaining';
如果您决定将应用程序翻译成多种语言,此链接将有助于正确实现多元化:
ps:如果你通过额外的第三个参数
language
,它将指定要使用的复数公式,那么我制作的propisal将适用于任何语言。我认为使用一般方法会过分强调性能,而不是这个小代码的有用性。为了实现一个通用的方法,你应该使用口述或类似的东西,这与好处相比确实是不必要的。也许更简单的一句话就是在性能和实用性之间进行正确的权衡
$Count = count($Items);
$Noun = 'minute';
echo sprintf('There are %u %s(s) remaining.', $Count, $Noun);
处理这个问题的一个简单方法是创建一个包含三个参数的函数:数字、单词的单数拼写和单词的复数拼写。该函数根据值返回单词的单数或复数版本。它仍然把责任推到程序员身上,但它比您在这里展示的内容更简洁。这些小东西正是让软件变得性感的原因。否则它只是一个没有多重化和正确的“他/她”用法的草图。@zerkms如果我们谈论做这种事情的美丽,我非常同意你。如果我们谈论的是在一个小型/中型软件中进行这种打印优化,我看不出有什么真正的好处。如果他决定为他的应用程序实现i18n呢?阿拉伯语有6种复数形式,因此函数需要接受6个参数,而不是2个。@zerkms,这是一个很好的观点。幸好你贴了一个解决这个问题的答案;-)感谢您提供了一个简单的解决方案以及一个理想的解决方案。我绝对认为这是正确的选择。