Ищу алгоритм для склонения текста в ССК поле

Главные вкладки

Аватар пользователя RedRat RedRat 12 апреля 2011 в 15:20

Имеется два ССК поля: текстовое "Количество" и список "Единица измерения". Во втором поле забит предустановленный список значений типа "пачка, ящик, коробка, вагон" и т.д. Хочется, чтобы при выводе материала название единиц измерения склонялись в соответствии с введённым количеством из первого поля, например: "1 ящик", "2 пачки", "5 вагонов".

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

Комментарии

Аватар пользователя RedRat RedRat 12 апреля 2011 в 17:41

"eLSe" wrote:
Посмотрите сервис Яндекса - Склонятор

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

Аватар пользователя eLSe eLSe 13 апреля 2011 в 9:16

Тогда лучше выкрутиться через темизацию.

смотрим для примера перевод модуля comment (modules-comment.ru.po):

#: modules/comment/comment.module:429
msgid "1 new comment"
msgid_plural "count new comments"
msgstr[0] "count новый комментарий"
msgstr[1] "count новых комментария"
msgstr[2] "count[2] новых комментариев"
Аватар пользователя RedRat RedRat 13 апреля 2011 в 16:36

"eLSe" wrote:
Тогда лучше выкрутиться через темизацию.

Да, этот вариант я сразу попробовал. Проблема в том, что строки из списка значений недоступны для перевода, так как они не забиты в коде, а вводятся при создании поля. Или я неправильно понял ваш совет?

"theСанитар" wrote:
Выбираем по вкусу алгоритм и прикручиваем.

Проблема, собственно, не в алгоритме склонения (он у меня и так уже есть), а в том, как его вызвать при выводе поля.

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