Параметр i18n

В библиотеке Pikaday параметр i18n отвечает за локализацию интерфейса календаря: названия месяцев, дней недели, кнопок навигации и вспомогательных текстов. Он позволяет адаптировать компонент под любой язык без изменения внутренней логики работы datepicker.


Структура параметра i18n

Параметр i18n представляет собой объект, содержащий набор строковых полей. Каждое поле соответствует элементу интерфейса календаря.

Базовая структура:

i18n: {
    previousMonth: '',
    nextMonth: '',
    months: [],
    weekdays: [],
    weekdaysShort: []
}

Каждое свойство имеет строго определённое назначение.


previousMonth и nextMonth

Эти поля задают текст кнопок навигации между месяцами.

  • previousMonth — подпись для кнопки перехода к предыдущему месяцу
  • nextMonth — подпись для кнопки перехода к следующему месяцу

Пример:

i18n: {
    previousMonth: 'Предыдущий месяц',
    nextMonth: 'Следующий месяц'
}

Эти строки используются также в атрибутах доступности (ARIA-label), что делает календарь более удобным для вспомогательных технологий.


months — названия месяцев

Массив months содержит полные названия месяцев в календарном порядке от января до декабря.

Требования:

  • ровно 12 элементов
  • порядок строго фиксирован
  • строки используются в заголовке календаря

Пример для русского языка:

i18n: {
    months: [
        'Январь',
        'Февраль',
        'Март',
        'Апрель',
        'Май',
        'Июнь',
        'Июль',
        'Август',
        'Сентябрь',
        'Октябрь',
        'Ноябрь',
        'Декабрь'
    ]
}

Эти значения отображаются в верхней части календаря при смене месяца.


weekdays — полные названия дней недели

Массив weekdays определяет полные названия дней недели, используемые в некоторых режимах отображения или при расширенной кастомизации.

Требования:

  • 7 элементов
  • порядок начинается с воскресенья (внутренняя модель библиотеки)

Пример:

i18n: {
    weekdays: [
        'Воскресенье',
        'Понедельник',
        'Вторник',
        'Среда',
        'Четверг',
        'Пятница',
        'Суббота'
    ]
}

Важно учитывать, что порядок всегда фиксирован и не зависит от настройки firstDay.


weekdaysShort — сокращённые дни недели

weekdaysShort используется в шапке календаря (там, где отображаются обозначения дней недели в сетке дат).

Требования:

  • 7 элементов
  • краткие формы (обычно 2–3 символа)
  • порядок совпадает с weekdays

Пример:

i18n: {
    weekdaysShort: [
        'Вс',
        'Пн',
        'Вт',
        'Ср',
        'Чт',
        'Пт',
        'Сб'
    ]
}

Эти значения отображаются над колонками календарной сетки.


Полная конфигурация локализации

На практике i18n используется как единый объект, объединяющий все локализационные строки.

Пример полной конфигурации для русского языка:

const picker = new Pikaday({
    field: document.getElementById('date'),
    i18n: {
        previousMonth: 'Предыдущий месяц',
        nextMonth: 'Следующий месяц',
        months: [
            'Январь', 'Февраль', 'Март', 'Апрель',
            'Май', 'Июнь', 'Июль', 'Август',
            'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
        ],
        weekdays: [
            'Воскресенье', 'Понедельник', 'Вторник',
            'Среда', 'Четверг', 'Пятница', 'Суббота'
        ],
        weekdaysShort: [
            'Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'
        ]
    }
});

Особенности обработки i18n внутри Pikaday

Отсутствие динамической проверки полноты

Библиотека не выполняет строгую валидацию массива i18n. При отсутствии некоторых полей возможны:

  • отображение пустых строк
  • fallback к значениям по умолчанию (английский язык)
  • частичная локализация интерфейса

Статичность значений

i18n применяется при инициализации экземпляра календаря. Изменение объекта после создания пикера не приводит к обновлению интерфейса автоматически.

Пример поведения:

const picker = new Pikaday({ i18n: {...} });

picker.i18n.months = [...]; // не обновит UI

Для изменения языка требуется пересоздание экземпляра.


Зависимость от других параметров

Хотя i18n отвечает за текст, он косвенно взаимодействует с другими настройками:

  • firstDay — влияет на порядок отображения недель, но не на weekdaysShort
  • format — влияет на формат вывода даты, но не на локализацию интерфейса
  • toString — может использоваться для полной кастомизации вывода с учётом локали

Поддержка разных языков

Английский (по умолчанию)

Если i18n не задан, используется встроенная английская локализация.


Русский

Русская локализация требует полного переопределения всех массивов, так как встроенного русского набора в базовой версии библиотеки нет.


Арабский и RTL-языки

Для языков с направлением справа налево i18n часто используется совместно с параметром isRTL. При этом:

  • текст в i18n остаётся в логическом порядке языка
  • отображение интерфейса инвертируется на уровне layout

Практика расширенной локализации

Добавление сокращений с точками

Некоторые локали используют формат:

weekdaysShort: ['Вс.', 'Пн.', 'Вт.', 'Ср.', 'Чт.', 'Пт.', 'Сб.']

Это не влияет на функциональность, но может улучшать визуальную согласованность интерфейса в плотных макетах.


Использование альтернативных названий месяцев

В некоторых интерфейсах применяются сокращённые формы месяцев:

months: [
    'Янв', 'Фев', 'Мар', 'Апр',
    'Май', 'Июн', 'Июл', 'Авг',
    'Сен', 'Окт', 'Ноя', 'Дек'
]

Это особенно актуально для компактных календарей.


Ошибки конфигурации i18n

Несоответствие длины массивов

Частая ошибка — передача массивов неправильной длины:

  • months меньше или больше 12 элементов
  • weekdays или weekdaysShort не равны 7 элементам

Последствия:

  • некорректное отображение дней
  • смещение индексов
  • визуальные артефакты в интерфейсе

Несогласованность weekdays и weekdaysShort

Если массивы не синхронизированы по порядку, календарь будет показывать некорректные подписи, несмотря на отсутствие ошибок в консоли.


Использование нестроковых значений

Все поля i18n должны содержать строки. Передача чисел, null или объектов приводит к некорректному рендерингу интерфейса.


Взаимодействие с кастомными рендерами

При использовании кастомных функций рендеринга (onDraw, модификации DOM) значения из i18n часто используются как источник данных для:

  • генерации кастомных заголовков
  • построения альтернативных календарных шапок
  • интеграции с внешними UI-библиотеками

Роль i18n в архитектуре Pikaday

i18n является полностью изолированным слоем представления. Он не влияет на:

  • вычисление дат
  • логику выбора диапазонов
  • работу с minDate и maxDate
  • внутренние календарные алгоритмы

Его задача ограничивается текстовым представлением интерфейса, что делает локализацию предсказуемой и легко заменяемой без изменения ядра библиотеки.