Формы предмета исчисления
Иногда возникает задача склонения предмета исчисления, но ее не пытаются решить правильно. Есть простое решение.
- Описание
- Подробнее
Описание
Задача.
Например, необходимо в интерфейсе отображать количество проданных за день яблок естественной фразой «Продано 1 яблоко» («Продано 2 яблока», «Продано 5 яблок»). Обращаю внимание, что количество проданных яблок указывается числом, а не прописью.
Неправильные решения.
Обычно необходимость склонения предмета исчисления обходят следующими способами:
— Игнорирование.
В итоге получаем «Продано 1 яблоков» или «Продано 2 яблоко».
— Использование сокращений.
В итоге получаем «Продано 3 ябл.»
— Использование всех форм сразу.
В итоге получаем «Продано 3 яблоко(ка,ок)» или «Продано 7 яблоко/яблока/яблок»
— Использование только одной формы.
В итоге получаем «Продано яблок: 3»
Последний вариант выглядит неплохо, но не всегда есть возможность использовать его.
Правильное решение.
Правильное решение заключается в выборе нужной формы предмета исчисления в зависимости от количества предмета.
Для русского языка это решается с помощью следующей функции.
Функция ПолучитьФормуПредметаИсчисления(Количество, Форма1, Форма2, Форма5) Экспорт
Перем Формы, К;
Формы = Новый Массив();
Формы.Добавить(Форма1);
Формы.Добавить(Форма2);
Формы.Добавить(Форма5);
К = ?(Количество >= 0, Количество, -Количество);
ИндексФормы = ?(К%10 = 1 И К%100 <> 11, 0, ?(К%10 >= 2 И К%10 = 20), 1, 2));
Возврат Формы[ИндексФормы];
КонецФункцииВ описанном примере решение может быть следующим.
"Продано " + Продано + " " + ПолучитьФормуПредметаИсчисления(Продано, "яблоко", "яблока", "яблок")Для того, чтобы правильно определить каждую из трех форм, вы должны проговорить их для 1, 2 и 5 — этого будет достаточно.
Если потребуется определять форму предмета исчисления для других языков, то формулы можно подсмотреть здесь.
Заключение.
Старался быть кратким. Спасибо за внимание.

