Склонение слов при числительных в Winter CMS

Слова при числительных - это слова которые идут после числовых обозначений. Как пример можно взять количество комментариев и склонение самого слова комментарий.

В русском языке если слова склоняются, то получается у этих слов при числительных три варианта склонения (в английском два).

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

  • 1 комментарий
  • 2, 3, 4 комментария
  • 5, 6, 7, 8, 9, 10 комментариев

Как же в Winter CMS вывести правильный вариант склонения если изначально мы не знаем каким будет числовое значение при этом слове?

Всё просто и разработчики Laravel уже позаботились об этом. Laravel trans_choice() предоставляет средства для правильного формирования множественного числа строк в разных регионах с очень гибкими правилами.


Сначала создайте строки перевода в файле локализации вашего плагина. Как пример я сделаю так:

plugins/author/pluginName/lang/ru/lang.php
return [
    'comments' => 'комментарий|комментария|комментариев',
    'offers' => 'предложение|предложения|предложений',
    'views' => 'просмотр|просмотра|просмотров',
];

Здесь мы задали ключи языковым переменным и значениями прописали через вертикальную черту | варианты склонения нужного нам слова.

Теперь мы можем в нужном нам месте выводить значение.

Вывод в Twig

В твиге есть фильтр transchoice, у него вот такой синтаксис для вывода нужного варианта:

{{ "author.pluginName::lang.comments" | transchoice(10) }}

Цифра 10 передаваемая параметром в transchoice() это числовое значение для которого нужно вывести вариант слова с нужным склонением окончания. Как правило это переменная, просто для понятности синтаксиса я указал числом.

Более реальный пример, мы хотим вывести строку У статьи 45203 просмотра. У нас есть переменная item с коллекцией данных среди которых есть поле count_views которое на данный момент имеет значение 45203.

plugins/author/pluginName/components/item/default.htm
<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

Переопределение переводов
Переопределение переводов Как в системе Winter CMS сделать переопределение строк переводов для модулей и для плагинов не изменяя самих файлов локализации модулей и плагинов .
Русский язык для даты в Winter CMS
Русский язык для даты в Winter CMS Как в Winter CMS включить русский язык для выводимых на фронтенд дат. Если у вас в Winter CMS время и дата отображаются на английском языке, то значит что в настройках вы не меняли локализацию (язык) для фронтальной части сайта.
Комментарии 0

*** чтобы писать комментарии.