单数词或复数词的最佳实践?

时间:2009-09-17 10:54:02

标签: localization plural singular

这是关于一般的最佳做法,不是针对单一语言,数据库或其他任何内容的

我们都必须处理生成的输出,您可以在其中报告“一个产品”或“两个产品”。阅读不太好...有些人只是通过使用“一个产品”或“产品数量:(1)”来解决这个问题,其他人可能会有其他解决方案。

在不同的口语中,事情可能会更加复杂!在法语中,当你的产品为零时,你会使用单数形式,而不是复数形式! (零产品)其他语言(中文,日文)甚至可能缺乏这些语法差异或者有两个以上不同的词来表示产品的数量。 (例如,复数和更大数。)

但为了保持这个简单,让我们专注于具有单数和复数单词的语言。

在设置新项目时,还必须生成报告,您如何处理单数和复数单词?您是否在数据库中为单数和复数形式添加了两个名称字段?您是否在代码中添加了其他规则以将单词从单数转换为复数?你使用其他技巧吗?

在处理需要跟踪单数和复数形式的项目时,您如何处理?

7 个答案:

答案 0 :(得分:10)

我建议您一般查看gettext,特别是ngettext。也许即使你不打算翻译你的申请。前往this part of the documentation。它实现了或多或少的所有语言,即使你选择的语言缺乏这种支持,也没有什么能阻止你借用这些想法。

答案 1 :(得分:2)

在Perl中,Lingua::EN::Inflect全面解决了这个问题。它使用大型字典并仔细处理规则的所有异常。它还可以执行“a”或“an”之类的操作,并处理比较!

有关血腥的详细信息,请参阅the paper

答案 2 :(得分:1)

通常我会通过某种格式化程序发送文本,格式化程序会将要显示的值重新格式化为人类可读的文本。这也可以修改您的“产品”文字。 Java为此提供了MessageFormat类,它支持这样的修改。参见[1]中的例子。

[1] http://java.sun.com/j2se/1.5.0/docs/api/java/text/MessageFormat.html

答案 3 :(得分:1)

阅读并实施this;完成后报告(几年后)。就个人而言,我对(s)方法感到满意;)(尽管不言而喻,这并不适用于所有语言)。

答案 4 :(得分:1)

只需更新,CLDR现在有多种语言规则,ICU有实施。

答案 5 :(得分:0)

Number of products:  1 
Number of products:  4
Number of products:  FILE_NOT_FOUND

尝试使用自然语言报告定量数据实在太麻烦了。

答案 6 :(得分:-4)

使用英语应用程序,通过使用一组if语句来存储单数并创建复数通常是最简单和最有效的。

if( count > 1 ){
   suffix = 's';
}