Локализация в Inputmask строится вокруг адаптации масок ввода к региональным соглашениям: числовым разделителям, форматам дат, валютным представлениям и допустимым символам. Библиотека изначально ориентирована не на жёстко зафиксированные шаблоны, а на расширяемую систему алиасов и определений, что позволяет реализовывать поведение, эквивалентное «локалям» в более высокоуровневых библиотеках.
Ключевая идея локализации заключается в том, что один и тот же тип данных может иметь разные представления:
. или ,), ,,
.)DD.MM.YYYY, MM/DD/YYYY,
YYYY-MM-DD)Inputmask не оперирует «локалью» как единым объектом, вместо этого локализация раскладывается на набор параметров маски и алиасов.
Наиболее типичный сценарий локализации связан с числовым вводом.
Алиас numeric позволяет настраивать ключевые параметры:
radixPoint — символ десятичного разделителяgroupSeparator — разделитель групп разрядовdigits — количество знаков после запятойautoGroup — автоматическая группировка чиселallowMinus — поддержка отрицательных значенийПример адаптации под русскую локаль:
Inputmask("numeric", {
radixPoint: ",",
groupSeparator: " ",
autoGroup: true,
digits: 2,
digitsOptional: false,
placeholder: "0"
}).mask(element);
В данном случае формат числа становится совместимым с привычной
записью 1 234 567,89.
Для англоязычной локали конфигурация будет противоположной:
Inputmask("numeric", {
radixPoint: ".",
groupSeparator: ",",
autoGroup: true,
digits: 2
}).mask(element);
Алиас currency расширяет numeric, добавляя
символ валюты и правила его позиционирования.
Основные параметры:
prefix — символ валюты перед числомsuffix — символ валюты после числаrightAlign — выравнивание вводаallowPlus / allowMinus — знакиЛокализация валютного ввода обычно зависит от региона:
Inputmask("currency", {
prefix: "₽ ",
groupSeparator: " ",
radixPoint: ",",
digits: 2
}).mask(element);
Для доллара:
Inputmask("currency", {
prefix: "$ ",
groupSeparator: ",",
radixPoint: ".",
digits: 2
}).mask(element);
Важный момент заключается в том, что Inputmask не хранит список валют или их правила — вся локализация задаётся вручную через параметры алиаса.
Алиас datetime является наиболее сложным с точки зрения
локализации, так как включает:
inputFormat)Пример европейского формата:
Inputmask("datetime", {
inputFormat: "dd/mm/yyyy",
placeholder: "dd/mm/yyyy"
}).mask(element);
Американский формат:
Inputmask("datetime", {
inputFormat: "mm/dd/yyyy",
placeholder: "mm/dd/yyyy"
}).mask(element);
ISO-подобный формат:
Inputmask("datetime", {
inputFormat: "yyyy-mm-dd"
}).mask(element);
Локализация часто затрагивает визуальные элементы маски:
placeholder)_, *, 0)Пример:
Inputmask("numeric", {
placeholder: "_",
showMaskOnHover: false,
showMaskOnFocus: true
}).mask(element);
Для некоторых локалей важно визуально различать обязательные и
необязательные позиции, что достигается комбинацией
placeholder и clearIncomplete.
Более глубокая локализация достигается через расширение
definitions. Это позволяет менять допустимые символы в
маске.
Пример добавления кириллической поддержки:
Inputmask.extendDefinitions({
"c": {
validator: "[А-Яа-яЁё]",
casing: "upper"
}
});
После этого маска может использовать новый токен:
Inputmask("ccc-999").mask(element);
Таким образом, локализация может включать поддержку алфавитов, недоступных в стандартных масках.
Inputmask использует систему алиасов как промежуточный слой между «сырой маской» и готовым поведением.
Алиасы позволяют:
Пример расширения алиаса:
Inputmask.extendAliases({
"ru-numeric": {
alias: "numeric",
groupSeparator: " ",
radixPoint: ",",
autoGroup: true
}
});
Использование:
Inputmask("ru-numeric").mask(element);
Такой подход фактически создаёт локаль уровня приложения.
Одним из наиболее критичных аспектов локализации являются разделители:
Несоответствие этих символов региону пользователя приводит к ошибкам ввода и необходимости дополнительной нормализации данных.
Пример комбинированной настройки:
Inputmask("numeric", {
radixPoint: ",",
groupSeparator: ".",
autoGroup: true
}).mask(element);
Такая конфигурация характерна для ряда европейских стран, где разделители инвертированы относительно англоязычного стандарта.
В крупных приложениях локализация масок часто централизуется в виде профилей:
const locales = {
ru: {
numeric: {
radixPoint: ",",
groupSeparator: " "
},
currency: {
prefix: "₽ "
}
},
en: {
numeric: {
radixPoint: ".",
groupSeparator: ","
},
currency: {
prefix: "$ "
}
}
};
Далее конфигурация применяется динамически:
function applyLocale(locale) {
Inputmask.extendAliases({
"app-numeric": {
alias: "numeric",
...locales[locale].numeric
}
});
}
Такой подход позволяет переключать локаль без изменения логики формы.
Локализация влияет не только на отображение, но и на допустимые значения:
Inputmask реализует это через комбинацию validator,
definition и prevalidator, которые могут быть
переопределены в зависимости от локали.
В динамических интерфейсах локализация масок часто применяется на лету:
Переинициализация маски обычно требует её удаления и повторного применения с новыми параметрами:
Inputmask.remove(element);
Inputmask(newAliasOrOptions).mask(element);
Это обеспечивает корректное пересчитывание всех правил форматирования.
Несмотря на гибкость, локализация в Inputmask имеет ряд особенностей архитектуры:
Это делает систему мощной, но зависимой от точности конфигурации на уровне разработчика.