В Pikaday локализация интерфейса строится вокруг объекта
i18n, который отвечает за все текстовые строки,
отображаемые пользователю: названия месяцев, дней недели, подписи кнопок
навигации и форматные элементы календаря. Этот объект передаётся в
конфигурации при инициализации и полностью заменяет стандартный
английский набор строк.
Объект i18n представляет собой плоскую структуру
ключ–значение, где каждое поле отвечает за конкретный элемент интерфейса
календаря. Типичная форма выглядит следующим образом:
i18n: {
previousMonth: '',
nextMonth: '',
months: [],
weekdays: [],
weekdaysShort: [],
weekdaysMin: []
}
Несмотря на кажущуюся простоту, каждая группа значений играет строго определённую роль в рендеринге календаря и влияет на несколько частей UI одновременно.
Ключи previousMonth и nextMonth управляют
подписями кнопок переключения месяцев. Эти значения отображаются в
заголовке календаря рядом со стрелками навигации.
i18n: {
previousMonth: 'Предыдущий месяц',
nextMonth: 'Следующий месяц'
}
Особенность этих полей заключается в том, что они не являются обязательными для функциональности. Если они пустые, интерфейс остаётся рабочим, но теряет текстовую доступность, что критично для screen reader-ов и accessibility.
Поле months — это массив из 12 строк, строго
соответствующих порядку месяцев от января до декабря. Нарушение порядка
приводит к некорректному отображению дат.
i18n: {
months: [
'Январь', 'Февраль', 'Март', 'Апрель',
'Май', 'Июнь', 'Июль', 'Август',
'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
]
}
Внутренний механизм календаря использует индекс месяца (0–11) как прямой ключ доступа к массиву. Это означает, что структура должна быть фиксированной и не допускает пропусков элементов.
Поле weekdays содержит полные названия дней недели,
обычно начиная с воскресенья:
i18n: {
weekdays: [
'Воскресенье',
'Понедельник',
'Вторник',
'Среда',
'Четверг',
'Пятница',
'Суббота'
]
}
Важно, что порядок здесь критически зависит от внутренней реализации календаря. В большинстве конфигураций первый день недели — воскресенье, и смещение не производится автоматически.
weekdaysShort используется для компактного отображения в
заголовках таблицы календаря. Обычно это 2–3 символа или краткие
формы:
i18n: {
weekdaysShort: [
'Вс', 'Пн', 'Вт', 'Ср',
'Чт', 'Пт', 'Сб'
]
}
Этот массив отображается в верхней строке сетки календаря и напрямую соответствует индексу дня недели.
Поле weekdaysMin используется для ещё более компактного
отображения, часто в узких интерфейсах или мобильных версиях:
i18n: {
weekdaysMin: [
'В', 'П', 'В', 'С',
'Ч', 'П', 'С'
]
}
Здесь важно учитывать неоднозначность сокращений в языках с кириллицей: одинаковые буквы могут соответствовать разным дням, поэтому часто требуется контекстное различение через дизайн, а не только текст.
Полноценный объект локализации объединяет все перечисленные элементы:
const picker = new Pikaday({
field: document.getElementById('datepicker'),
i18n: {
previousMonth: 'Предыдущий',
nextMonth: 'Следующий',
months: [
'Январь', 'Февраль', 'Март', 'Апрель',
'Май', 'Июнь', 'Июль', 'Август',
'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
],
weekdays: [
'Воскресенье', 'Понедельник', 'Вторник',
'Среда', 'Четверг', 'Пятница', 'Суббота'
],
weekdaysShort: [
'Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'
],
weekdaysMin: [
'В', 'П', 'В', 'С', 'Ч', 'П', 'С'
]
}
});
Все строки из i18n не обрабатываются динамически во
время каждого рендера, а используются как статический словарь. При
инициализации календаря создаётся ссылка на объект локализации, после
чего доступ к данным осуществляется через индексные обращения.
Механизм работы можно описать следующим образом:
months[date.getMonth()]weekdays[date.getDay()]weekdaysShort[date.getDay()]Это означает, что любые изменения массива после инициализации могут не отразиться в уже созданном экземпляре календаря.
i18n не ограничивается только русской или английской локализацией. Возможны произвольные наборы языков, включая мультиязычные интерфейсы. Однако структура должна сохраняться неизменной: количество месяцев всегда 12, количество дней недели всегда 7.
Типичная ошибка при кастомизации — попытка сократить массивы или изменить их порядок под «локальные привычки», что приводит к рассинхронизации отображаемых дат.
Если часть полей i18n отсутствует, библиотека
подставляет значения по умолчанию. Это приводит к смешанному интерфейсу:
часть текста остаётся на английском, часть — на пользовательском
языке.
Например:
i18n: {
months: ['Январь', 'Февраль']
}
В таком случае первые два месяца будут локализованы, остальные останутся дефолтными, что делает интерфейс визуально несогласованным и логически некорректным.
Хотя i18n напрямую не отвечает за формат даты, он
косвенно влияет на восприятие данных пользователем. Названия месяцев и
дней используются при отображении выбранной даты, если кастомные форматы
не переопределены.
При использовании toString или аналогичных методов
форматирования календарь комбинирует данные даты с текстами из
i18n, формируя итоговую строку.
Локализация через i18n напрямую влияет на доступность
интерфейса. Screen reader-ы используют текстовые значения из объекта для
озвучивания элементов управления календарём. Особенно критичны:
previousMonthnextMonthmonthsweekdaysОтсутствие или некорректная настройка этих полей приводит к тому, что календарь остаётся функциональным визуально, но теряет семантическую понятность для вспомогательных технологий.