Flatpickr поддерживает систему локализаций через подключаемые
языковые пакеты, позволяющие полностью адаптировать интерфейс календаря
под региональные особенности, включая названия месяцев, дней недели,
форматы отображения даты и поведенческие параметры календаря.
Архитектура локализации построена на объекте l10n, который
передаётся в конфигурацию экземпляра и переопределяет стандартные
англоязычные строки.
Механизм локализации основан на JavaScript-объекте, содержащем строки интерфейса и настройки календаря. Каждая локаль представляет собой самостоятельный модуль, экспортирующий объект с предопределёнными полями:
Flatpickr не генерирует перевод автоматически, а использует готовые словари локалей, которые можно импортировать и переопределять.
Русская локализация поставляется в стандартном пакете и может быть подключена несколькими способами в зависимости от системы сборки.
При установке через npm локаль импортируется отдельно:
import { Russian } from "flatpickr/dist/l10n/ru.js";
import flatpickr from "flatpickr";
После импорта объект локализации передаётся в конфигурацию:
flatpickr("#date", {
locale: Russian
});
При использовании CDN подключается отдельный файл локали:
<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
<script src="https://cdn.jsdelivr.net/npm/flatpickr/dist/l10n/ru.js"></script>
Далее локаль доступна глобально:
flatpickr("#date", {
locale: flatpickr.l10ns.ru
});
Flatpickr позволяет установить глобальную локализацию, которая будет применяться ко всем экземплярам календаря без необходимости повторного указания.
import flatpickr from "flatpickr";
import { Russian } from "flatpickr/dist/l10n/ru.js";
flatpickr.localize(Russian);
После вызова localize все новые экземпляры используют
русскую локализацию автоматически, если не указано иное в конкретной
конфигурации.
Объект ru содержит набор ключей, определяющих поведение
интерфейса:
firstDayOfWeek — индекс первого дня неделиweekdays — массив названий дней неделиmonths — массив названий месяцевordinal — функция формирования порядковых
числительныхrangeSeparator — разделитель диапазона датПример структуры:
const Russian = {
weekdays: {
shorthand: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
longhand: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"]
},
months: {
shorthand: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"],
longhand: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"]
},
firstDayOfWeek: 1,
rangeSeparator: " — "
};
Локализация влияет не только на текст интерфейса, но и на восприятие
даты пользователем. В русской локали принято использовать порядок
день-месяц-год, что задаётся через параметр dateFormat.
flatpickr("#date", {
locale: Russian,
dateFormat: "d.m.Y"
});
Основные токены форматирования:
d — день месяца (01–31)m — месяц (01–12)Y — полный годH — часы (24-часовой формат)i — минутыПри включении временного выбора локализация также влияет на отображение AM/PM, если оно используется, хотя в русской локали чаще применяется 24-часовой формат.
Важным параметром локализации является firstDayOfWeek,
определяющий первый день недели.
Для русской локали стандартное значение:
firstDayOfWeek: 1
Это означает начало недели с понедельника, что влияет на построение сетки календаря, смещение дней и визуальную структуру таблицы дат.
Изменение этого параметра вручную позволяет адаптировать календарь под альтернативные стандарты, например американский (воскресенье как первый день недели).
Flatpickr позволяет частично изменять локализацию без создания нового объекта с нуля. Это используется при необходимости адаптировать отдельные элементы интерфейса.
import { Russian } from "flatpickr/dist/l10n/ru.js";
const customRussian = {
...Russian,
rangeSeparator: " до "
};
flatpickr("#date", {
locale: customRussian
});
Такой подход позволяет сохранять базовые переводы и изменять только бизнес-логику отображения.
В приложениях с мультиязычным интерфейсом локаль может изменяться в рантайме. Flatpickr поддерживает пересоздание экземпляра или обновление конфигурации.
Пример пересоздания:
let fp = flatpickr("#date", {
locale: Russian
});
fp.destroy();
fp = flatpickr("#date", {
locale: English
});
Альтернативный способ — глобальное изменение локали:
flatpickr.localize(English);
После этого новые экземпляры будут использовать обновлённый язык.
Некоторые плагины Flatpickr зависят от локализации, особенно:
Например, при включении диапазона дат (mode: "range")
используется rangeSeparator, определённый в локали:
flatpickr("#range", {
mode: "range",
locale: Russian
});
Это влияет на отображение выбранного диапазона в инпуте.
Локализация также влияет на парсинг пользовательского ввода.
Flatpickr пытается интерпретировать дату в соответствии с заданным
форматом и локалью. В русской локали это особенно важно, так как
различие между mm/dd/yyyy и dd.mm.yyyy может
приводить к ошибкам интерпретации.
При неправильном формате пользовательский ввод может не распознаваться:
flatpickr("#date", {
locale: Russian,
dateFormat: "d.m.Y",
allowInput: true
});
Параметр allowInput усиливает гибкость ввода, но требует
строгого соответствия формату.
На практике встречаются несколько типичных ошибок:
1. Неправильный импорт локали Использование неверного пути приводит к отсутствию перевода и возврату к английскому интерфейсу.
2. Конфликт глобальной и локальной локализации Если
flatpickr.localize() установлен глобально, а в экземпляре
передана другая локаль, может возникнуть несоответствие интерфейса.
3. Игнорирование dateFormat Даже при правильной локализации формат даты остаётся англоязычным, если явно не указан.
4. Несовместимость с кастомными плагинами Некоторые
сторонние расширения не учитывают l10n и требуют ручной
адаптации строк.
В сложных приложениях локализация используется не только для перевода интерфейса, но и как слой бизнес-настроек:
const enterpriseLocale = {
...Russian,
rangeSeparator: " → ",
firstDayOfWeek: 1
};
Такой подход позволяет использовать Flatpickr как часть унифицированной дизайн-системы, где язык интерфейса является управляемым параметром, а не фиксированной сущностью.