Задача.
Например, необходимо в интерфейсе отображать количество проданных за день яблок естественной фразой "Продано 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 - этого будет достаточно.
Если потребуется определять форму предмета исчисления для других языков, то формулы можно подсмотреть здесь.
Заключение.
Старался быть кратким. Спасибо за внимание.