Множественность пользовательских сообщений - PullRequest
106 голосов
/ 23 ноября 2010

Часто при создании сообщений для показа пользователю сообщение будет содержать число что-то , о котором я хочу сообщить клиенту.

Я приведу пример: клиент выбрал количество товаров от 1 и выше и нажал кнопку удаления. Теперь я хочу отправить клиенту подтверждающее сообщение и упомянуть количество выбранных им предметов, чтобы свести к минимуму вероятность того, что он допустил ошибку, выбрав несколько предметов и нажав «Удалить», когда он хочет удалить только один из им.

Один из способов - сделать общее сообщение следующим образом:

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

«Проблема» здесь - это случай, когда noofitemselected равен 1, и мы должны написать item и it вместо items и их .

Мое нормальное решение будет примерно таким

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

Это становится довольно длинным и довольно неприятным, очень быстрым, если в коде много ссылок на множество чисел, а реальное сообщение становится трудным для чтения.

Так что мои вопросы просты. Есть ли более эффективные способы создания таких сообщений?

EDIT

Я вижу, что многие люди очень зациклились на том, что я упомянул, что сообщение должно отображаться в окне сообщения, и просто дал ответ о том, как вообще не использовать окно сообщения, и что все хорошо.

Но помните, что проблема плюрализации распространяется и на тексты в других местах программы, помимо окон сообщений. Например, метка рядом с сеткой, отображающая количество линий, выбранных в сетке, будет иметь ту же проблему в отношении плюрализации.

Таким образом, это в основном относится к большей части текста, который каким-то образом выводится из программ, и тогда решение не так просто, как просто изменить программу так, чтобы она больше не выводила текст:)

Ответы [ 25 ]

2 голосов
/ 24 ноября 2010

Делайте так, как в World of Warcraft:

BILLING_NAG_WARNING = "Your play time expires in %d |4minute:minutes;";
2 голосов
/ 24 ноября 2010

Почему вы хотите представить сообщение, которое пользователи могут понять?Это идет вразрез с 40-летней историей программирования.Нееееет, у нас хорошо получается, не портите это понятными сообщениями.


(j / k)

0 голосов
/ 19 декабря 2010

Я бы на минуту задумался, все предложения здесь либо делают множественное число (и беспокоятся о более чем 1 уровне множественности, пола и т. Д.), Либо вообще не используют его и дают хорошую отмену.

Я бы пошел не языковым путем и использовал бы для этого визуальные очереди.Например, представьте себе приложение для Iphone, которое вы выбираете, вытирая палец.перед удалением их с помощью мастер-кнопки удаления он «встряхнет» выбранные элементы и покажет вам вопросительный знак с заголовком с помощью кнопок V (ok) или X (отмена) ...

Или в3D-мир Kinekt / Move / Wii - представьте, что вы выбираете файлы, перемещаете руку к кнопке удаления и получаете указание поднять руку над головой для подтверждения (используя те же визуальные символы, которые я упоминал ранее. Например, вместо того, чтобы просить вас удалить3 файла - он покажет вам 3 файла с парящим полупрозрачным красным Х и скажет вам сделать что-то для подтверждения.

0 голосов
/ 23 ноября 2010

становится немного короче с

string message = "Are you sure you want to delete " + noofitemsselected + " item" + (noofitemsselected>1 ? "s" : "") + "?";
0 голосов
/ 23 ноября 2010

Один из подходов, о которых я не упомянул, это использование тега замены / выбора (например, что-то вроде «Вы собираетесь раздавить {0} [? I ({0} = 1): / cactus / cacti /»] ". (другими словами, у выражения, подобного формату, укажите подстановку, основанную на том, равен ли аргумент ноль, взятый как целое число 1). Я видел такие теги, использовавшиеся в дни до .net; я неЯ не знаю ни одного стандарта для них в .net, и при этом я не знаю лучшего способа их форматировать.

...