12

这是关于一般的最佳实践,而不是特定于单一语言、数据库或其他任何东西

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

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

但是为了简单起见,让我们关注同时具有单数和复数单词的语言。

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

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

4

7 回答 7

10

我建议gettext总体ngettext上,特别是看一下。也许即使您不打算翻译您的应用程序。只需转到文档的这一部分。它具有或多或少所有语言的实现,即使您选择的语言缺乏这种支持,也没有什么能阻止您借用这些想法。

于 2009-09-17T11:02:37.900 回答
2

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

有关血腥细节,请参阅论文

于 2009-09-17T11:37:26.113 回答
1

通常我会通过某种格式化程序发送我的文本,它将您想要显示的值重新格式化为人类可读的文本。这也可能会修改您的“产品”文本。Java 对此有 MessageFormat 类,它支持这种修改。请参阅 [1] 中的示例。

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

于 2009-09-17T11:01:40.913 回答
1

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

于 2009-09-17T11:10:57.040 回答
1

只是一个更新,CLDR现在有多个语言规则,ICU有一个实现。

于 2011-11-11T17:36:57.793 回答
0
Number of products:  1 
Number of products:  4
Number of products:  FILE_NOT_FOUND

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

于 2009-09-17T10:58:01.217 回答
-4

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

if( count > 1 ){
   suffix = 's';
}
于 2009-09-17T11:00:43.460 回答