воскресенье, 1 февраля 2009 г.

Идеальная грамматическая библиотека

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

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

Попробую набросать здесь требования к такой библиотеке.

1. Работа с числительными

1.1 Подстановка правильных склонений для числительных (У вас 1 новое сообщение, 5 новых сообщений, 16 сообщений)

2. Работа с временем

2.1 Подстановка правильных склонений для времени (Выходим через 22 минуты, через 30 минут, до завершения работы осталось 33 минуты 21 секунда)

2.2 Подстановка общеупотребительных значений для интервалов времени: (Событие произошло вчера, произошло неделю назад. Следующее событие через 2 дня)

3. Поддержка сообщества

3.1 Открытый исходный код
3.2 Стандарты на API
3.3 Версии для основных языков программирования

Что еще

Знаю, что подобные замуты были с библиотекой gettext, но не уверен, что этого достаточно.

4 комментария:

Анонимный комментирует...

На мой взгляд, проблема в универсальности. Для русского языка такую библиотеку (по крайней мере, в части правильного склонения числительных) сделать несложно. А вот библиотеку, которая учитывает все мыслимые флексии всех мировых языков...

Yury Skaletskiy комментирует...

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

Анонимный комментирует...

Не знаю, возможно ли это. Ну, например, сделаем мы функцию для склонения числительных:
склонение(количество, единица)
Хотим в блоге отображать количество комментариев:
"К этому сообщению написано" + склонение(12, "комментарий")
Но что если в каком-то языке нужно будет обеспечить иной порядок слов? Например:
К этому сообщению комментариев написано 12

Сергей Слепов комментирует...

Тогда в ресурсах должна быть строчка "К этому сообщению написано $$gettext({0}, комментарий)", в другом языке порядок может быть другой: "$$gettext({0}, комментарий) у этого сообщения". Для склонения можно использовать вот это: http://morpher.ru