diff --git a/system/helpers/numberUtils.cfm b/system/helpers/numberUtils.cfm index 03c48b4554..e59737a585 100644 --- a/system/helpers/numberUtils.cfm +++ b/system/helpers/numberUtils.cfm @@ -1,9 +1,12 @@ - + + + - var decimalPlaces = len( listRest( arguments.number, "." ) ); - var numberFormat = decimalPlaces ? ",.#repeatString( "_", decimalPlaces )#" : ","; + var resolvedMask = Len( arguments.mask ) ? arguments.mask : getSingleton( "numberFormatService" ).getNumberFormatMask( arguments.locale ); + var decimalPlaces = Len( ListRest( arguments.number, "." ) ); + var numberFormat = decimalPlaces ? "#resolvedMask#.#RepeatString( '_', decimalPlaces )#" : resolvedMask; diff --git a/system/services/l10n/NumberFormatService.cfc b/system/services/l10n/NumberFormatService.cfc new file mode 100644 index 0000000000..a6436e3584 --- /dev/null +++ b/system/services/l10n/NumberFormatService.cfc @@ -0,0 +1,39 @@ +/** + * @singleton true + * @presideService true + */ +component { + + public any function init() { + return this; + } + + public string function getNumberFormatMask( string locale="" ) { + var resolvedLocale = Len( Trim( arguments.locale ) ) ? Trim( arguments.locale ) : _getSiteLocale(); + + switch ( resolvedLocale ) { + case "en_GB": + case "en_US": + return ","; + } + + return "_"; + } + +// PRIVATE HELPERSs + private string function _getSiteLocale() { + var siteId = $getRequestContext().getSiteId(); + + if ( Len( siteId ) ) { + var settings = $getPresideObject( "site" ).selectData( + id = siteId + , returntype = "singleRecordStruct" + , selectFields = [ "locale" ] + ); + + return settings.locale ?: "en_GB"; + } + + return "en_GB"; + } +} \ No newline at end of file