Частая задача интерфейса: вывести количество элементов с правильным окончанием (например: «Найдено 22 элемента»).
Раньше разработчики писали свои функции declension($n, $form1, $form2, $form5). В D7 есть штатное решение.
Использование класса
Класс находится в пространстве имен Bitrix\Main\Grid.
use Bitrix\Main\Grid\Declension;
// Создаем объект склонения
// Параметры: (форма для 1, форма для 2, форма для 5)
$declension = new Declension('товар', 'товара', 'товаров');
$count = 1;
echo "$count " . $declension->get($count); // 1 товар
$count = 2;
echo "$count " . $declension->get($count); // 2 товара
$count = 5;
echo "$count " . $declension->get($count); // 5 товаров
$count = 112;
echo "$count " . $declension->get($count); // 112 товаровРабота с другими языками
Для английского языка (где всего две формы: 1 item, 2 items) нужно передавать только два аргумента или использовать ту же форму для множественного числа дважды.
// Для английского
$declensionEn = new Declension('item', 'items');
echo "1 " . $declensionEn->get(1); // 1 item
echo "5 " . $declensionEn->get(5); // 5 itemsПримечание: Класс Declension использует простую логику.
Для полноценной мультиязычности (с поддержкой сложных правил славянских или восточных языков) правильнее использовать языковые файлы с поддержкой Plural Form (доступно в Loc::getMessage с плейсхолдерами), но для простых задач (рус/анг) Declension подходит идеально.
Вывод:
Не пишите свои велосипеды для склонения слов.
Класс Bitrix\Main\Grid\Declension прост, надежен и доступен в ядре «из коробки».
Bitrix\Main\Grid\Declension, склонение по числам битрикс, plural form bitrix, 1 товар 2 товара 5 товаров, языковые файлы.
