devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
86 lines (85 loc) • 3.7 kB
JavaScript
/**
* DevExtreme (esm/common/core/localization/globalize/currency.js)
* Version: 24.2.6
* Build date: Mon Mar 17 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import openXmlCurrencyFormat from "../open_xml_currency_format";
import "./core";
import "./number";
import "../currency";
import "globalize/currency";
import Globalize from "globalize";
import {
config
} from "../../../../common";
import numberLocalization from "../number";
const CURRENCY_STYLES = ["symbol", "accounting"];
if (Globalize && Globalize.formatCurrency) {
if ("en" === Globalize.locale().locale) {
Globalize.locale("en")
}
const formattersCache = {};
const getFormatter = (currency, format) => {
let formatter;
let formatCacheKey;
if ("object" === typeof format) {
formatCacheKey = Globalize.locale().locale + ":" + currency + ":" + JSON.stringify(format)
} else {
formatCacheKey = Globalize.locale().locale + ":" + currency + ":" + format
}
formatter = formattersCache[formatCacheKey];
if (!formatter) {
formatter = formattersCache[formatCacheKey] = Globalize.currencyFormatter(currency, format)
}
return formatter
};
const globalizeCurrencyLocalization = {
_formatNumberCore: function(value, format, formatConfig) {
if ("currency" === format) {
const currency = formatConfig && formatConfig.currency || config().defaultCurrency;
return getFormatter(currency, this._normalizeFormatConfig(format, formatConfig, value))(value)
}
return this.callBase.apply(this, arguments)
},
_normalizeFormatConfig: function(format, formatConfig, value) {
const normalizedConfig = this.callBase(format, formatConfig, value);
if ("currency" === format) {
const useAccountingStyle = formatConfig.useCurrencyAccountingStyle ?? config().defaultUseCurrencyAccountingStyle;
normalizedConfig.style = CURRENCY_STYLES[+useAccountingStyle]
}
return normalizedConfig
},
format: function(value, format) {
if ("number" !== typeof value) {
return value
}
format = this._normalizeFormat(format);
if (format) {
if ("default" === format.currency) {
format.currency = config().defaultCurrency
}
if ("currency" === format.type) {
return this._formatNumber(value, this._parseNumberFormatString("currency"), format)
} else if (!format.type && format.currency) {
return getFormatter(format.currency, format)(value)
}
}
return this.callBase.apply(this, arguments)
},
getCurrencySymbol: function(currency) {
if (!currency) {
currency = config().defaultCurrency
}
return Globalize.cldr.main("numbers/currencies/" + currency)
},
getOpenXmlCurrencyFormat: function(currency) {
const currencySymbol = this.getCurrencySymbol(currency).symbol;
const accountingFormat = Globalize.cldr.main("numbers/currencyFormats-numberSystem-latn").accounting;
return openXmlCurrencyFormat(currencySymbol, accountingFormat)
}
};
numberLocalization.inject(globalizeCurrencyLocalization)
}