我的工作项目中有很多实例需要在一个句子中显示某些集合的大小。例如,如果集合的大小为5,则表示“5个用户”。如果它的大小为1或0,则表示“1个用户”或“0个用户”。现在,我正在用if-else语句来确定是否打印“s”,这很乏味。
我想知道是否有一个开源JSP自定义标记库允许我完成此任务。我知道我可以自己写一个......基本上,它会有2个这样的参数:<lib:display word="user" collection="userList" />
。根据集合大小,它将决定是否附加“s”。但是,这个实现不会太强大,因为我还需要处理“ies”,有些词不使用任何这些。因此,我希望有一个更强大的库可以立即使用,而不是创建一个半生不熟的工具。在这种情况下,我并不太担心在这个单词前加上is / are。
顺便说一下,我使用Java。
非常感谢。
答案 0 :(得分:28)
查看inflector这个java项目,它允许您执行Noun.pluralOf("user")
或Noun.pluralOf("user", userList.size())
,并处理一系列变化和异常情况(person-&gt; people, loaf-&gt; loaves等),以及让你在必要时定义自定义映射规则。
答案 1 :(得分:10)
嗯,我不太明白为什么你需要一个库。我认为这样做的功能是微不足道的:
public String singlePlural(int count, String singular, String plural)
{
return count==1 ? singular : plural;
}
通话看起来像:
singlePlural(count, "user", "users");
singlePlural(count, "baby", "babies");
singlePlural(count, "person", "people");
singlePlural(count, "cherub", "cherubim");
... etc ...
也许这个库会做一大堆其他有用的东西。我想你可以说它提供了所有复数形式的字典,但在任何给定的程序中你不关心语言中所有单词的复数,只是你在这个程序中使用的那些单词。我想如果在编译时不知道可能是单数或复数的单词,如果它是用户输入的内容,那么我想要第三方字典而不是自己构建一个字典。
修改强>
突然间,我发现你所寻找的是一般制作复数的功能,体现了一系列规则,例如“通常只添加's',但如果单词以'y'结尾,则改变'y' to'ies',如果它以's'结尾,则改为'ses',......“等等。我认为用英语来说,任何实际目的都是不可能的:有太多的特殊情况,比如”人/人“ “和”孩子/孩子“等。我认为你能做的最好的事情就是拥有一个通用的”添加''规则,可能还有一些其他常见情况,然后是一长串例外情况。也许在其他语言中,人们可以提出一个相当简单的规则。
正如我所说,如果这个词在编译时不知道但是来自某些用户输入,那么是的,非常需要第三方字典。
答案 2 :(得分:4)
这在英语以外的语言中变得复杂,变形因子的目的是在将来支持。
我熟悉捷克用户=uživatel和:
1 uživatel
2 uživatelé
3 uživatelé
4 uživatelé
5 uživatelů
...
你可以看到为什么使用硬编码的单数+复数编写的程序将无法使用。
答案 3 :(得分:0)
此功能内置于Ruby on Rails中。我不确切知道在哪里,但它应该很容易在源代码中找到,然后你可以简单地编写代码。
编辑:找到一些代码:如果我没记错的话,主要是在大多数单词上添加“s”,尽管我相信有一些常见异常的列表(可能是哈希,错误字典)。值得注意的是从“人”到“人”的转换:)
如果您决定将其国际化为英语以外的其他语言,那么您当然会陷入痛苦的世界。欢迎来到高度不规则的语法世界,祝你好运!