Skip to content

Instantly share code, notes, and snippets.

@StefansArya
Last active March 31, 2020 04:26
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save StefansArya/1a9423fab2b966a08ea672a864a98333 to your computer and use it in GitHub Desktop.
Save StefansArya/1a9423fab2b966a08ea672a864a98333 to your computer and use it in GitHub Desktop.
Dynamically load locale for moment.js
;(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