Last active
March 31, 2020 04:26
-
-
Save StefansArya/1a9423fab2b966a08ea672a864a98333 to your computer and use it in GitHub Desktop.
Dynamically load locale for moment.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;(function(){ | |
if(window.moment === void 0) | |
return console.error("Moment.js must be loaded first"); | |
var cdnLink = 'https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/locale/'; | |
var loaded = new Set(); | |
var available = ['af','ar-dz','ar-kw','ar-ly','ar-ma','ar-sa','ar-tn','ar','az','be','bg','bm','bn','bo','br','bs','ca','cs','cv','cy','da','de-at','de-ch','de','dv','el','en-au','en-ca','en-gb','en-ie','en-il','en-nz','en-SG','eo','es-do','es-us','es','et','eu','fa','fi','fo','fr-ca','fr-ch','fr','fy','ga','gd','gl','gom-latn','gu','he','hi','hr','hu','hy-am','id','is','it-ch','it','ja','jv','ka','kk','km','kn','ko','ku','ky','lb','lo','lt','lv','me','mi','mk','ml','mn','mr','ms-my','ms','mt','my','nb','ne','nl-be','nl','nn','pa-in','pl','pt-br','pt','ro','ru','sd','se','si','sk','sl','sq','sr-cyrl','sr','ss','sv','sw','ta','te','tet','tg','th','tl-ph','tlh','tr','tzl','tzm-latn','tzm','ug-cn','uk','ur','uz-latn','uz','vi','x-pseudo','yo','zh-cn','zh-hk','zh-tw']; | |
moment.loadLocale = function(locale, callback){ | |
if(locale.length > 10) | |
return; // Unexpected input | |
if(locale.indexOf('_') !== -1) | |
locale = locale.split('_'); | |
else | |
locale = locale.split('-'); | |
var found = false; | |
for(var i=0, n=locale.length; i<n; i++){ | |
var temp = locale.join('-'); | |
if(available.indexOf(temp) !== -1){ | |
found = temp; | |
break; | |
} | |
locale.pop(); | |
} | |
if(found !== false){ | |
if(loaded.has(found)){ | |
moment.locale(found); | |
return callback && callback(found); | |
} | |
var xhr = new XMLHttpRequest(); | |
xhr.open("GET", cdnLink+found+'.js'); | |
xhr.onreadystatechange = function(){ | |
if(xhr.status === 200 && xhr.readyState === 4){ | |
this.moment = window.moment; | |
loaded.add(found); | |
eval(xhr.responseText); // Because HTML5 doesn't execute dynamic script tag | |
moment.locale(found); | |
callback && callback(found); | |
} | |
}; | |
xhr.send(); | |
return; | |
} | |
callback && callback(false); | |
} | |
})(); | |
// Example | |
moment.loadLocale('id_ID', function(found){ | |
if(found === false) | |
return console.error("Language not found"); | |
console.log(moment().format('LLLL')); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment