Skip to content

Instantly share code, notes, and snippets.

@ArtemAvramenko
Last active April 1, 2025 11:28
Show Gist options
  • Save ArtemAvramenko/cff5adc55cd579318818f5b60b758da1 to your computer and use it in GitHub Desktop.
Save ArtemAvramenko/cff5adc55cd579318818f5b60b758da1 to your computer and use it in GitHub Desktop.
Script for determining regional number formats
// type numberFormat =
'dot_with_comma_grouping' | // en-US
'dot_with_indian_grouping' | // en-IN
'dot_with_apostrophe_grouping' | // de-CH
'comma_with_dot_grouping' | // it-IT
'comma_with_space_grouping'; // pt-PT
// 100,000.50 - DEFAULT FORMAT except for Europe (en-US)
["United Kingdom", "Malta"]
// 1,00,000.50 (en-IN)
["India", "Pakistan", "Bangladesh"];
// 100’000.50 (de-CH)
["Liechtenstein", "Switzerland"];
// 100.000,50 - default for Europe (it-IT)
[
"Angola", "Argentina", "Azerbaijan", "Bolivia", "Brazil", "Cameroon", "Chile",
"Colombia", "Cuba", "Cyprus", "East Timor", "Ecuador", "Greenland", "Indonesia",
"Lebanon", "Mauritania", "Mongolia", "Morocco", "Mozambique", "Macedonia", "Paraguay",
"Somalia", "Suriname", "Tunisia", "Turkey", "Uruguay", "Venezuela", "Vietnam", "Zimbabwe"
];
// 100 000,50 (pt-PT)
[
"Albania", "Algeria", "Armenia", "Austria", "Belarus", "Belgium", "Bulgaria", "Costa Rica",
"Estonia", "Finland", "France", "Georgia", "Hungary", "Kazakhstan", "Kyrgyzstan", "Latvia",
"Lithuania", "Macau SAR China", "Monaco", "Norway", "Poland", "Portugal", "Russia",
"Slovakia", "South Africa", "Sweden", "Tajikistan", "Turkmenistan", "Ukraine", "Uzbekistan"
];
const locales =
'af-ZA|am-ET|ar-AE|ar-BH|ar-DZ|ar-EG|ar-IQ|ar-JO|ar-KW|ar-LB|ar-LY|ar-MA|arn-CL|ar-OM|ar-QA|ar-SA|ar-SD|ar-SY|ar-TN|ar-YE|as-IN|az-az|az-Cyrl-AZ|az-Latn-AZ|ba-RU|be-BY|bg-BG|bn-BD|bn-IN|bo-CN|br-FR|bs-Cyrl-BA|bs-Latn-BA|ca-ES|co-FR|cs-CZ|cy-GB|da-DK|de-AT|de-CH|de-DE|de-LI|de-LU|dsb-DE|dv-MV|el-CY|el-GR|en-029|en-AU|en-BZ|en-CA|en-cb|en-GB|en-IE|en-IN|en-JM|en-MT|en-MY|en-NZ|en-PH|en-SG|en-TT|en-US|en-ZA|en-ZW|es-AR|es-BO|es-CL|es-CO|es-CR|es-DO|es-EC|es-ES|es-GT|es-HN|es-MX|es-NI|es-PA|es-PE|es-PR|es-PY|es-SV|es-US|es-UY|es-VE|et-EE|eu-ES|fa-IR|fi-FI|fil-PH|fo-FO|fr-BE|fr-CA|fr-CH|fr-FR|fr-LU|fr-MC|fy-NL|ga-IE|gd-GB|gd-ie|gl-ES|gsw-FR|gu-IN|ha-Latn-NG|he-IL|hi-IN|hr-BA|hr-HR|hsb-DE|hu-HU|hy-AM|id-ID|ig-NG|ii-CN|in-ID|is-IS|it-CH|it-IT|iu-Cans-CA|iu-Latn-CA|iw-IL|ja-JP|ka-GE|kk-KZ|kl-GL|km-KH|kn-IN|kok-IN|ko-KR|ky-KG|lb-LU|lo-LA|lt-LT|lv-LV|mi-NZ|mk-MK|ml-IN|mn-MN|mn-Mong-CN|moh-CA|mr-IN|ms-BN|ms-MY|mt-MT|nb-NO|ne-NP|nl-BE|nl-NL|nn-NO|no-no|nso-ZA|oc-FR|or-IN|pa-IN|pl-PL|prs-AF|ps-AF|pt-BR|pt-PT|qut-GT|quz-BO|quz-EC|quz-PE|rm-CH|ro-mo|ro-RO|ru-mo|ru-RU|rw-RW|sah-RU|sa-IN|se-FI|se-NO|se-SE|si-LK|sk-SK|sl-SI|sma-NO|sma-SE|smj-NO|smj-SE|smn-FI|sms-FI|sq-AL|sr-BA|sr-CS|sr-Cyrl-BA|sr-Cyrl-CS|sr-Cyrl-ME|sr-Cyrl-RS|sr-Latn-BA|sr-Latn-CS|sr-Latn-ME|sr-Latn-RS|sr-ME|sr-RS|sr-sp|sv-FI|sv-SE|sw-KE|syr-SY|ta-IN|te-IN|tg-Cyrl-TJ|th-TH|tk-TM|tlh-QS|tn-ZA|tr-TR|tt-RU|tzm-Latn-DZ|ug-CN|uk-UA|ur-PK|uz-Cyrl-UZ|uz-Latn-UZ|uz-uz|vi-VN|wo-SN|xh-ZA|yo-NG|zh-CN|zh-HK|zh-MO|zh-SG|zh-TW|zu-ZA'
.split('|');
const regionNames = [];
const regionFormatFilter = 1;
const a = [
'100 000,50'.replace(/ /g, "\u00a0"),
'100 000,50'.replace(/ /g, "\u202f"),
'1,00,000.50',
'100.000,50',
'100,000.50',
'100’000.50'
];
const dn = new Intl.DisplayNames(['en'], { type: 'region' })
const regions = {};
for (let locale of locales) {
const s = (100000.5).toLocaleString(
locale,
{ useGroping: true, minimumFractionDigits: 2 });
if (a.indexOf(s) == regionFormatFilter) {
const parts = locale.split('-');
const region = parts[parts.length - 1];
regions[region.toLowerCase()] = true;
}
}
for (let region in regions) {
let name = region + '!!!!';
try {
name = dn.of(region.toUpperCase());
} catch(e) { }
regionNames.push(name);
}
regionNames.sort();
console.log(regionNames.join('\n'));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment