用户消息中的多元性

107

很多时候,当生成要向用户显示的消息时,该消息将包含一些内容,我希望告知客户。

我举个例子:客户从1个或更多项中选择了许多项目,并单击了删除。现在,我想给客户一个确认消息,并且我想提到他所选的项目数量,以最小化他选择了一堆项目并在只想删除其中一个项目时误点删除的可能性。

一种方法是将通用消息设计如下:

int noofitemsselected = SomeFunction();
string message = "You have selected " + noofitemsselected + " item(s). Are you sure you want to delete it/them?";

这里的“问题”出现在noofitemselected为1的情况下,我们需要写itemit而不是itemsthem

我通常的解决方案是这样的:

int noofitemsselected = SomeFunction();
string message = "You have selected " + noofitemsselected + " " + (noofitemsselected==1?"item" : "items") + ". Are you sure you want to delete " + (noofitemsselected==1?"it" : "them") + "?";

如果代码中有很多对数字复数的引用,那么生成类似这样的消息就会变得非常冗长和丑陋,并且实际消息会变得难以阅读。

所以我的问题很简单。是否有任何更好的方式来生成这样的消息?

编辑

我看到很多人都被我提到消息框中显示消息这个情境所困扰了,他们只是给出了如何避免使用消息框的答案,这也很好。

但请记住,复数问题也适用于程序中其他位置的文本。例如,显示在显示选定网格中的行数的标签旁边的网格中,将具有与复数化相关的相同问题。

因此,这基本上适用于从程序以某种方式输出的大多数文本,那么解决方案并不像只需更改程序以不再输出文本那么简单 :)


6
我不确定每种语言的复数形式是否像“item(s)”一样容易表达。 - Jens
5
你可能应该考虑本地化,这个问题可能会变得更加严重。 - Alex Brown
4
@Jens:通常它们不会这样做,而且方式也往往不太方便。有些语言例如在复数形式上会区分2-4和5-无限大的情况,并且这一切还要取决于性别。 "自然语言:本地化疯狂!即将登陆您身边的电脑!" - Piskvor left the building
29
对于程序员来说,没有什么比错误的复数形式更能让用户感觉他们懒惰了。 - Greg
4
@Øyvind:你的编辑做得很好。这里似乎有许多“回答者”更关注证明你的问题是错误的,而不是提供正确的解决方案。可以说是反解决方案。 - mwolfe02
显示剩余3条评论
25个回答

2

为什么要呈现用户可以理解的信息?这与40年的编程历史背道而驰。不!我们有一个好东西,不要用易懂的信息来破坏它。


(开个玩笑)


+1:很高兴在这里看到一些幽默。但即使你是在开玩笑,我也理解你的潜在观点。多年来创建的许多程序都有极其糟糕的消息。通常是因为它们变得过于技术化,以至于普通用户无法理解。 - Øyvind Bråthen
好点子。我总是喜欢收到像“用户输入上的494-B错误”这样的消息——它增加了一些神秘感,让生活变得更有趣。最近在尝试创建密码时出现了一个错误,只是简单地说,“密码不符合安全要求”。没有任何提示,不知道我哪方面的要求没有达到。我的密码包括大小写字母和几个数字。我试着添加了特殊字符。还是不行。直到我删除了一个字符,它才过了。我想他们制定了一个规则:不能连续使用相同的字符。 - Jay

2
像《魔兽世界》一样做吧:
BILLING_NAG_WARNING = "Your play time expires in %d |4minute:minutes;";

0

使用它会变得稍微短一些

string message = "Are you sure you want to delete " + noofitemsselected + " item" + (noofitemsselected>1 ? "s" : "") + "?";

0

我没有看到提到的一种方法是使用替换/选择标记(例如,类似于“您即将压扁{0} [?i({0}=1):/cactus/cacti/]”)。 (换句话说,有一个类似格式的表达式根据参数零(作为整数)是否等于1来指定替换)。 我在.net之前的日子里见过这样的标记; 我不知道它们在.net中的任何标准,也不知道最佳格式化方式。


0

我认为我们可以换个思路,这里的所有建议都是要么进行复数处理(并且需要考虑多个级别的复数、性别等问题),要么根本不使用它并提供一个好的撤销功能。

我会采用非语言化的方式,使用视觉提示。例如,想象一下iPhone应用程序,您可以通过滑动手指选择项目。在使用主删除按钮删除之前,它将“摇晃”所选项目,并显示一个带有V(确定)或X(取消)按钮的带有问号标题的框...

或者,在Kinekt / Move / Wii的3D世界中,想象一下选择文件,将手移动到删除按钮并被告知将手移动到头顶上方以确认(使用我之前提到的相同的视觉符号。例如,它不会询问您是否要删除3个文件?而是向您展示3个带有半透明红色X的文件,并告诉您执行某些操作以确认。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接