是否有用于处理普通语言中的单数/复数单词的单行程?

时间:2013-03-26 19:42:21

标签: java python localization plural singular

我常常看到网站做了1次观看,剩下1天或1个答案的事情。对我来说,这只是懒惰,因为它通常像以下一样容易修复:

if(views == 1)
   print views + " view"
else print views + " views"

我想知道的是,如果有一个普通语言的单行内容,如java,python,php等,我可以对这样做的网站发表评论并说,就像将它添加到你的网站一样简单码。这可能吗?

3 个答案:

答案 0 :(得分:3)

我在我的网站上处理此问题时使用ternary operators。看起来很多基于c的编程语言都支持三元运算符。它就像在php中一样简单:

<?= $views . ' view' . ($views == 1 ? '' : 's'); ?>

答案 1 :(得分:1)

您可以使用条件或三元运算符来处理问题,但以不同的方式查看,我们经常以下列方式显示复数/单数字

1 view(s), 1 day(s) left, or 1 answer(s)  

当添加条件可能不简单时,这通常很有用,例如作为输入字段?

对于Python,您可以创建一个函数来执行比较和添加额外's'的重复任务

>>> def pluralize(n, text):
    return "{} {}{}".format(n,text, 's' if n > 1 else '')

>>> pluralize(3,'word')
'3 words'
>>> pluralize(1,'word')
'1 word'

答案 2 :(得分:1)

如果您使用的是django(python),则可以使用pluralize过滤器:

You have {{ num_messages }} message{{ num_messages|pluralize }}.

它也支持特殊情况。看看documentation

如果你想在普通的python代码中做类似的事情,请看一下inflect模块。看起来它可能非常强大,并且显然可以正确猜测大多数复数:

import inflect
p = inflect.engine()
print("You have {}.".format(p.no('message',num_messages)))

哪个会输出像

这样的字符串
You have no messages.
You have 1 message.
You have 34 messages.