лучшие практики для единственного или множественного числа?

Речь идет о лучших практиках в целом, а не о конкретном языке, базе данных или чем-то еще

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

С разными разговорными языками все могло быть еще сложнее! Во французском языке, когда у вас нет продуктов, вы должны использовать форму единственного, а не множественного числа! (Нулевой продукт) В других языках (китайском, японском) эти грамматические различия могут отсутствовать или в них может содержаться более двух разных слов для обозначения количества продуктов. (Например, множественное и большее множественное число.)

Но для простоты давайте сосредоточимся на языках, в которых есть слова как в единственном, так и во множественном числе.

При создании нового проекта, который также должен генерировать отчеты, как вы справляетесь со словами единственного и множественного числа? Вы добавляете в базу данных два поля имени для единственного и множественного числа? Добавляете ли вы в код дополнительные правила для преобразования слов из единственного числа во множественное? Вы пользуетесь другими приемами?

Как вы справляетесь с этим при работе над проектом, в котором необходимо отслеживать формы единственного и множественного числа?


person Community    schedule 17.09.2009    source источник
comment
iirc В арабском языке есть особые формы для единственного, двойного и только (еще?) множественного числа! : S   -  person Disillusioned    schedule 07.12.2009
comment
В разных языках существует довольно много разных форм множественного числа. См. unicode.org/repos/cldr-tmp/trunk/ diff / Supplemental /   -  person SimonSimCity    schedule 20.03.2012


Ответы (7)


Я бы рекомендовал взглянуть на gettext в целом и на ngettext в частности. Может быть, даже если вы не собираетесь переводить свое приложение. Просто перейдите к этой части документации. Он имеет реализацию более или менее для всех языков, и даже если выбранный вами язык не поддерживает эту поддержку, ничто не мешает вам позаимствовать идеи.

person Community    schedule 17.09.2009
comment
Но как насчет названий продуктов, хранящихся в базе данных? - person Wim ten Brink; 17.09.2009
comment
То же самое - хранение пар единственного / множественного числа. И, в случае перевода (что не в вашем случае, или нет?) Вам просто нужно убедиться, что они либо помещены в .po, если вы используете gettext, либо используете аналогичный алгоритм и сохраните его в другом месте (конечно, это не делает смысл складывать тысячи товаров в .po файл). - person Michael Krelin - hacker; 17.09.2009
comment
Просто подумал о другой проблеме с названиями продуктов, хранящихся в базе данных - довольно легко обрабатывать формы множественного / единственного числа, но когда дело доходит до перевода, возникает проблема с падежами. И попытка придерживаться именительного падежа может оказаться почти такой же неудобной, как «Количество товаров: N». - person Michael Krelin - hacker; 17.09.2009

В Perl это всесторонне решается с помощью Lingua: : EN :: Inflect. Он использует большой словарь и тщательно обрабатывает все исключения из правил. Он также выполняет такие операции, как «a» или «an», а также обрабатывает сравнения!

См. Подробности в статье.

person Community    schedule 17.09.2009
comment
Одна проблема с этой ссылкой заключается в том, что она не зависит от языка, независимо от того, что вы здесь называете языком ;-) Другая проблема заключается в том, что проблема выходит за рамки множественной формы существительного, там < i> - это то, что называется целым предложением (и есть эти вещи, называемые целыми предложениями). - person Michael Krelin - hacker; 17.09.2009
comment
@hacker: Совершенно верно - этот модуль англоязычный. Но он очень хорошо владеет этим языком. - person ire_and_curses; 17.09.2009
comment
@hacker: проблемы типа 'is' и 'are' обрабатываются правильно. например: print inflect PL_ADJ (This) PL_N (error) PL_V (был) фатальным. \ n if $ severity ›1; - person ire_and_curses; 17.09.2009
comment
ire_and_curses, приятно знать, я лишь бегло просмотрел код. Но есть только английский и проблема только с Perl. Еще одна причина, по которой стоит проголосовать за эту ссылку, заключается в том, что если английский язык используется в качестве справочного материала для перевода, этот инструмент полезен для угадывания множественного имени продукта из единственного числа. - person Michael Krelin - hacker; 17.09.2009

Обычно я отправляю свой текст через какое-то средство форматирования, которое переформатирует значения, которые вы хотите отобразить, в текст, читаемый человеком. Это также может изменить текст вашего «продукта». Для этого в Java есть класс MessageFormat, который поддерживает такие модификации. См. Примеры в [1].

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

person Community    schedule 17.09.2009

Прочтите и примените это; доложите, когда закончите (через несколько лет). Лично я доволен подходом (s);) (хотя само собой разумеется, что это работает не для всех языков).

person Community    schedule 17.09.2009
comment
Что ж, эта ссылка ясно показывает сложность единственного / множественного числа слов. Также показывает, что количество форм варьируется от одной до шести различных форм! Мне уже нравится этот сайт! :-) - person Wim ten Brink; 17.09.2009
comment
Алекс, это - translate.sourceforge.net/wiki/l10n/pluralforms - похоже более исчерпывающий ресурс по формам множественного числа для разных языков. - person Michael Krelin - hacker; 17.09.2009

Просто обновление, CLDR теперь имеет правила множественного числа для языков и ICU имеет реализацию.

person Community    schedule 11.11.2011

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

Попытка использовать естественный язык для представления количественных данных - слишком большая проблема.

person Community    schedule 17.09.2009
comment
Да, знаю. :-) Просто пошутите меня и подумайте об этом как о важном требовании к механизму отчетности продукта, над которым вы работаете. - person Wim ten Brink; 17.09.2009
comment
И с каких это пор человечество перестало беспокоить? - person Vinko Vrsalovic; 17.09.2009
comment
Ооо ... Теперь я не могу перестать задумываться о множественной форме человечества ... возможно, человечество? ;-) - person Wim ten Brink; 17.09.2009
comment
Я думаю, что да, но это поднимает вопрос, что вы должны делать, когда сталкиваетесь с необходимостью использовать множественное число для настоящего singulare tantum, например dust или богатство; -) С другой стороны, если вы собираетесь продавать пыль или ножницы, к ним, скорее всего, будут прилагаться такие единицы, как карат пыли (звучит многообещающе :)) или ножницы. - person Michael Krelin - hacker; 17.09.2009
comment
Интересно, что ножницы - это всего лишь одно лезвие ножниц. Технически, вы могли бы назвать два ножницы четвертью ножниц ... :-) Во времена, когда ножницы делали вручную, было бы практично использовать единственное слово. Современная индустриализация сделала единственное число устаревшим. :-) - person Wim ten Brink; 17.09.2009
comment
@Workshop Alex: вы, ребята, меняете мою точку зрения. Это гигантская банка червей только для английского языка, и если вы добавите другие языки, это будут гигантские банки с червями (как насчет этого для вас?). - person MusiGenesis; 17.09.2009
comment
Не используйте ножницы, пока ножницы не сделают вас ножницами! - person Michael Krelin - hacker; 18.09.2009
comment
@hacker: ножницы? Я почти не знаю ее! - person MusiGenesis; 18.09.2009
comment
MusiGenesis ;-)))) Еще один повод не стричь ножницами! - person Michael Krelin - hacker; 18.09.2009

В англоязычных приложениях обычно проще и эффективнее всего хранить единственное и создавать множественное с помощью группы операторов if.

if( count > 1 ){
   suffix = 's';
}
person Community    schedule 17.09.2009