-
Notifications
You must be signed in to change notification settings - Fork 0
/
numberToLocaleStringPatch.js
113 lines (107 loc) · 2.61 KB
/
numberToLocaleStringPatch.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/* Author: Tyler Stark
* Name: Localized Numbers Patch
* Purpose: Patch Legacy Browsers Usage of toLocaleString
**/
(function(){
var tempNumber = Math.PI*1000000;
// German and French localized numbers do not equal each other.
// If the following passes, it suggests that the locale parameter is being ignored.
if(tempNumber.toLocaleString('de') === tempNumber.toLocaleString('fr')) {
// Helper Function to assist with formatting numbers
var formatNumber = function(number, delimiter, decimalDelimiter){
var numberString = number.toString(),
splitNumber = numberString.split('.'),
splitFloats = '';
// Check if the number's precision is greater than the thousanths place.
// If so, build out the tail end of the formatted Number.
if(splitNumber[1] && splitNumber[1].length > 3) {
splitFloats = decimalDelimiter + number.toFixed(3).toString().split('.')[1];
}
return splitNumber[0].split( /(?=(?:\d{3})+$)/g ).join(delimiter) + splitFloats;
};
window.Number.prototype.toLocaleString = function(){
var localeMap = {
en: {
delimiter: ',',
decimal: '.'
},
au: {
delimiter: ',',
decimal: '.'
},
gb: {
delimiter: ',',
decimal: '.'
},
fr: {
delimiter: ' ',
decimal: ','
},
de: {
delimiter: '.',
decimal: ','
},
at: {
delimiter: ',',
decimal: '.'
},
fi: {
delimiter: ' ',
decimal: ','
},
nl: {
delimiter: '.',
decimal: ','
},
es: {
delimiter: '.',
decimal: ','
},
da: {
delimiter: '.',
decimal: ','
},
el: {
delimiter: '.',
decimal: ','
},
et: {
delimiter: ' ',
decimal: ','
},
it: {
delimiter: '.',
decimal: ','
},
pl: {
delimiter: ' ',
decimal: ','
},
sv: {
delimiter: ' ',
decimal: ','
},
ru: {
delimiter: ' ',
decimal: ','
},
no: {
delimiter: ',',
decimal: '.'
}
},
locale,
navigatorLanguage,
localeCharacters;
navigatorLanguage = (navigator && navigator.language) || 'en';
navigatorLanguage = navigatorLanguage.replace(/\-\w+$/g, '');
locale = arguments[0] || navigatorLanguage;
localeCharacters = localeMap[locale];
if (localeCharacters) {
return formatNumber(this, localeCharacters.delimiter, localeCharacters.decimal);
}
// Failsafe scenerio
return this.valueOf();
};
}
})(); // Imediately Invoke