Система локалей в AutoNumeric строится вокруг набора правил форматирования чисел, определяющих визуальное представление данных: разделители разрядов, десятичный символ, поведение отрицательных значений, префиксы и суффиксы, правила группировки и округления. Локаль в этом контексте представляет собой конфигурационный объект, который описывает региональные соглашения отображения чисел без изменения их внутреннего числового значения.
Базовый механизм локалей реализован через набор предопределённых конфигураций, однако архитектура библиотеки допускает создание полностью пользовательских вариантов, включая гибридные и доменно-специфичные форматы.
Каждая локаль в AutoNumeric описывается набором параметров, влияющих на форматирование строки отображения числа:
Создание собственной локали сводится к формированию конфигурационного объекта, который либо расширяет существующую локаль, либо определяет новую полностью.
Ключевой принцип — разделение логики хранения и представления: локаль влияет только на формат вывода и ввода, не изменяя числовую модель.
Минимальная пользовательская локаль определяется через переопределение базовых символов:
const customLocale = {
decimalCharacter: ',',
digitGroupSeparator: ' ',
decimalCharacterAlternative: '.',
currencySymbol: '₸ ',
currencySymbolPlacement: 'p',
roundingMethod: 'S',
minimumValue: '-999999999',
maximumValue: '999999999'
};
Данный набор параметров формирует европейский стиль отображения чисел с пробелами в качестве разделителей разрядов и запятой как десятичным символом.
Механизм расширения позволяет использовать существующую конфигурацию как основу и переопределять только необходимые поля.
const baseLocale = {
decimalCharacter: '.',
digitGroupSeparator: ',',
currencySymbol: '$ ',
currencySymbolPlacement: 'p'
};
const extendedLocale = {
...baseLocale,
decimalCharacter: ',',
digitGroupSeparator: ' ',
currencySymbol: '€ ',
currencySymbolPlacement: 's'
};
Такой подход обеспечивает консистентность поведения при сохранении гибкости региональных изменений.
AutoNumeric позволяет задавать нестандартные схемы группировки разрядов, включая азиатские и смешанные форматы.
const indianLocale = {
decimalCharacter: '.',
digitGroupSeparator: ',',
digitGroupSpacing: '2s',
currencySymbol: '₹ ',
currencySymbolPlacement: 'p'
};
Здесь применяется правило 2s, означающее:
Это соответствует стандарту 1,00,00,000.
Пользовательская локаль применяется на этапе создания экземпляра форматтера:
new AutoNumeric('#input', {
...customLocale,
decimalPlaces: 2,
modifyValueOnWheel: false
});
При таком подходе локаль становится частью конфигурации экземпляра и не требует глобальной регистрации.
При масштабных приложениях локали могут быть зарегистрированы как переиспользуемые конфигурации:
AutoNumeric.setLocale('customEU', {
decimalCharacter: ',',
digitGroupSeparator: '.',
currencySymbol: '€ ',
currencySymbolPlacement: 's',
roundingMethod: 'H'
});
После регистрации локаль доступна по ключу:
new AutoNumeric('#price', 'customEU');
Локаль влияет не только на отображение, но и на интерпретацию пользовательского ввода. При этом различаются:
Для локали с запятой как десятичным разделителем:
1.234,56
будет интерпретировано как:
1234.56
если точка используется как разделитель групп.
Локали часто используются для описания валютных форматов с различными позициями символов:
const usdPrefix = {
decimalCharacter: '.',
digitGroupSeparator: ',',
currencySymbol: '$ ',
currencySymbolPlacement: 'p'
};
const eurSuffix = {
decimalCharacter: ',',
digitGroupSeparator: ' ',
currencySymbol: ' €',
currencySymbolPlacement: 's'
};
Разница между моделями влияет на визуальное восприятие финансовых данных, особенно в интерфейсах бухгалтерских систем.
Параметр roundingMethod задаёт поведение при усечении
значений:
S — симметричное округлениеA — округление вверхX — округление внизB — банковское округлениеПример локали с банковским округлением:
const accountingLocale = {
decimalCharacter: '.',
digitGroupSeparator: ',',
roundingMethod: 'B',
decimalPlaces: 2
};
Локаль может фиксировать допустимый диапазон чисел, что используется для форм ввода:
const constrainedLocale = {
decimalCharacter: '.',
digitGroupSeparator: ',',
minimumValue: '0',
maximumValue: '1000000'
};
Такая конфигурация часто применяется в финансовых и аналитических интерфейсах, где отрицательные значения исключены.
Параметр decimalCharacterAlternative позволяет
обрабатывать ввод с разных клавиатурных раскладок:
const flexibleLocale = {
decimalCharacter: ',',
decimalCharacterAlternative: '.',
digitGroupSeparator: ' '
};
Это обеспечивает корректную обработку как европейского, так и американского формата ввода без дополнительной логики на уровне приложения.
В сложных приложениях локали формируются как композиции:
Пример композиции:
const base = {
decimalCharacter: '.',
digitGroupSeparator: ','
};
const region = {
decimalCharacter: ',',
digitGroupSeparator: ' '
};
const finance = {
currencySymbol: '₸ ',
currencySymbolPlacement: 'p',
roundingMethod: 'H'
};
const composedLocale = {
...base,
...region,
...finance
};
Локали могут изменяться во время работы интерфейса без пересоздания DOM-элемента:
anInstance.set({
decimalCharacter: ',',
digitGroupSeparator: '.'
});
При этом сохраняется текущее значение, но пересчитывается отображение.
Локали в AutoNumeric выступают как слой абстракции между:
Эта модель позволяет изолировать бизнес-логику от региональных особенностей, обеспечивая единый механизм обработки числовых данных в различных интерфейсах и культурах.