Склонение слов при числительных в Winter CMS
Слова при числительных - это слова которые идут после числовых обозначений. Как пример можно взять количество комментариев и склонение самого слова комментарий
.
В русском языке если слова склоняются, то получается у этих слов при числительных три варианта склонения (в английском два).
Возьмём слово комментарий
и просклоняем его до 10. Получается три разных окончания:
- 1 комментарий
- 2, 3, 4 комментария
- 5, 6, 7, 8, 9, 10 комментариев
Как же в Winter CMS вывести правильный вариант склонения если изначально мы не знаем каким будет числовое значение при этом слове?
Всё просто и разработчики Laravel уже позаботились об этом. Laravel trans_choice()
предоставляет средства для правильного формирования множественного числа строк в разных регионах с очень гибкими правилами.
Сначала создайте строки перевода в файле локализации вашего плагина. Как пример я сделаю так:
return [
'comments' => 'комментарий|комментария|комментариев',
'offers' => 'предложение|предложения|предложений',
'views' => 'просмотр|просмотра|просмотров',
];
Здесь мы задали ключи языковым переменным и значениями прописали через вертикальную черту |
варианты склонения нужного нам слова.
Теперь мы можем в нужном нам месте выводить значение.
Вывод в Twig
В твиге есть фильтр transchoice
, у него вот такой синтаксис для вывода нужного варианта:
{{ "author.pluginName::lang.comments" | transchoice(10) }}
Цифра 10 передаваемая параметром в transchoice()
это числовое значение для которого нужно вывести вариант слова с нужным склонением окончания. Как правило это переменная, просто для понятности синтаксиса я указал числом.
Более реальный пример, мы хотим вывести строку У статьи 45203 просмотра. У нас есть переменная item
с коллекцией данных среди которых есть поле count_views
которое на данный момент имеет значение 45203.
<div>У статьи {{ item.count_views }} {{ "author.pluginName::lang.views" | transchoice(item.count_views) }}</div>
При изменении количества просмотров будет выводится вариант с правильным склонением окончания.
Вывод в PHP
В php используется функция trans_choice()
принимающая два параметра - строку и число, при чём строка может быть языковым ключом. Вот несколько примеров:
$one = trans_choice('author.plugin::lang.comments', 1); // комментарий
$two = trans_choice('author.plugin::lang.offers', 2); // предложения
$ten = trans_choice('author.plugin::views.choice', 10); // просмотров
// или
$one = trans_choice('комментарий|комментария|комментариев', 1); // комментарий
$two = trans_choice('предложение|предложения|предложений', 2); // предложения
$ten = trans_choice('просмотр|просмотра|просмотров', 10); // просмотров
Для примера вторым параметром указаны чмсла, в реальности же указывается переменная с int
типом данных (целое число).
Так же есть решение склонение окончаний числительных с помощью JavaScript
*** Войдите чтобы писать комментарии.