Добро пожаловать на сайт SEDBY

Склоняем единицы измерения с помощью функции cot_declension()

  • 150 просмотров +1
  • 23 декабря, 2025
  • Обновлено: 16 января, 2026
  • admin
  • Время чтения: 4 минуты
  • 1 (Подробно)
Склоняем единицы измерения с помощью функции cot_declension()
Правильные склонения в системе Cotonti Siena

Практически любой сайт, особенно его backend, требует вывода числовых данных с единицами измерения. Например:

1 просмотр
12 страниц
5 посетителей
0 комментариев

Мы видим, что для русского языка выстраивается тройная парадигма:

  1. значение равно (заканчивается на) 1,
  2. значение больше 1 и меньше 5,
  3. значение больше или равно 5 (или равно 0).

Для английского все по-другому:

1 hit
12 pages
5 visitors
0 comments

Здесь парадигма другая:

  1. значение равно 1,
  2. значение больше 1.

Французы пошли своим путем:

1 aperçu
12 pages
5 visiteurs
0 commentaires

Парадигма тоже двойная, но иная по отношению к германской группе:

  1. значение равно 0 или 1,
  2. значение больше 1.

Со всей этой историей в Cotonti Siena разбираются функции cot_get_plural() и cot_declension(). Первая определяет парадигму и отдает вариант для множественного числа применительно к системному языку. Вторая оформляет вывод так, чтобы сделать его максимально гибким для разработчика или верстальщика сайта.

Функция cot_get_plural()

Данная функция вызывается из cot_declension() и, как уже говорилось, определяет вариант множественного числа для указанного языка. Чудес она не совершает и предлагает выбор для:

  • германских языков (en, de, nl, se, us),
  • романских языков (fr),
  • славянских языков (ru, ua).

Все это группы языков индоевропейской семьи, да и то не все. Дальше их разработчики Cotonti не заходили, но это означает означает лишь то, что при востребованности, скажем, финского или венгерского в функцию будут внесены соответствующие изменения. А пока что у нас и так неплохой выбор из 8 языков.

Функция cot_declension()

В отличие от cot_get_plural(), с данной функцией уже можно работать напрямую. Она принимает 4 аргумента:

function cot_declension($digit, $expr, $onlyword = false, $canfrac = false)
{
...

Разберем каждый:

  • $digit содержит числовое значение,
  • $expr содержит имя специальной языковой переменной из массива $Ls,
  • $onlyword в зависимости от значения true или false ограничит вывод только вербальным значением (“страниц” вместо “5 страниц”),
  • $canfrac в зависимости от значения true или false передаст указание на число с дробной частью.

Теперь коротко по каждому аргументу с кейсами. Для простоты ограничимся использованием функции в шаблонизаторе, предположим, что организуем вывод для переменной $some_digit со значением 5, а системным языком является русский.

Прежде, чем делать красиво, создадим языковую строку для нашего значения или убедимся в ее наличии. Для этого заглянем в файл lang/ru/main.ru.lang.php и поищем в нем элементы массива $Ls. Это глобальный файл локализации, доступный в любой локации, но если в нем отсутствует строка с искомым словом, можно поискать в файле локализации модуля, например, modules/page/lang/page.ru.lang.php. Если и там нет ничего похожего, откроем файл локализации темы (например, themes/nemesis/nemesis.ru.lang.php) и создадим в нем кастомную строку:

$Ls['theme_apples'] = яблоко,яблока,яблок';

Имя можно выбрать любое, но для исключения возможных конфликтов используйте уникальный префикс.

Ок, теперь в шаблоне можем указать:

<div>
  {PHP.some_digit|cot_declension($this, ‘theme_apples’)}
</div>

На выходе получим

5 яблок

Если все так просто, зачем нужна суета с $onlyword? Дело в том, что в шаблоне часто требуется отдельная разметка для числа и единицы измерения, например:

5 <span>просмотров</span>

В таком случае используем:

{PHP.some_digit} <span>{PHP.some_digit|cot_declension($this, ‘theme_hits’, true)}</span>

Проще всего дело обстоит с аргументом $canfrac. Исходя из названия, понятно, что если вы не уверены в целочисленном значении обрабатываемой переменной, этому аргументу лучше присвоить значение true:

{PHP.some_digit|cot_declension($this, ‘theme_hits’, false, true)}

Теперь если $some_digit примет значение 5.3, получим:

5.3 яблока

, но и при значении 5 вывод будет правильным:

5 яблок

Если вы уверены в целочисленном значении, $canfrac поможет избежать лишней проверки.

Заключение

Еще на одном примере мы продемонстрировали, что Cotonti Siena – это гибкое и компактное решение для создания сайтов, которое, ко всему прочему, еще и обеспечивает дружественный подход к локализации. Котонти не только и не просто обеспечивает подстановку переводных строк “как есть”, но и обеспечивает локализацию падежей, а также форматов дат, десятичных знаков и “тысячных” разделителей.

Нескучной вам верстки!


Комментарии:
Комментарии отсутствуют

Новый комментарий

Ваш комментарий будет доступен для редактирования 10 минут
Блок пользователя
Регистрация на нашем сайте позволит вам общаться на форумах и получить доступ к другому полезному функционалу
Вы вошли как Гость