лучшие практики для единственного или множественного числа слов? - PullRequest
12 голосов
/ 17 сентября 2009

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

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

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

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

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

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

Ответы [ 7 ]

10 голосов
/ 17 сентября 2009

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

2 голосов
/ 17 сентября 2009

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

См. бумагу для подробностей.

1 голос
/ 11 ноября 2011

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

1 голос
/ 17 сентября 2009

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

1 голос
/ 17 сентября 2009

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

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

0 голосов
/ 17 сентября 2009

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

if( count > 1 ){
   suffix = 's';
}
0 голосов
/ 17 сентября 2009
Number of products:  1 
Number of products:  4
Number of products:  FILE_NOT_FOUND

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

...