diff --git a/moment.js b/moment.js index 60eeb5e425..8d6c6ddac6 100644 --- a/moment.js +++ b/moment.js @@ -603,7 +603,7 @@ moment[field] = function (format, index) { var i, getter, - method = moment.fn._locale[field], + method = moment._locale[field], results = []; if (typeof format === 'number') { @@ -613,7 +613,7 @@ getter = function (i) { var m = moment().utc().set(setter, i); - return method.call(moment.fn._locale, m, format || ''); + return method.call(moment._locale, m, format || ''); }; if (index != null) { @@ -730,9 +730,13 @@ } function loadLocale(name) { + var oldLocale = null; if (!locales[name] && hasModule) { try { + oldLocale = moment.locale(); require('./locale/' + name); + // because defineLocale currently also sets the global locale, we want to undo that for lazy loaded locales + moment.locale(oldLocale); } catch (e) { } } return locales[name]; @@ -1913,11 +1917,11 @@ } if (data) { - moment.duration.fn._locale = moment.fn._locale = data; + moment.duration._locale = moment._locale = data; } } - return moment.fn._locale._abbr; + return moment._locale._abbr; }; moment.defineLocale = function (name, values) { @@ -1927,8 +1931,13 @@ locales[name] = new Locale(); } locales[name].set(values); + + // backwards compat for now: also set the locale + moment.locale(name); + return locales[name]; } else { + // useful for testing delete locales[name]; return null; } @@ -1950,7 +1959,7 @@ } if (!key) { - return moment.fn._locale; + return moment._locale; } if (!isArray(key)) { diff --git a/tasks/embed_locales.js b/tasks/embed_locales.js index aef6310444..dc620a0923 100644 --- a/tasks/embed_locales.js +++ b/tasks/embed_locales.js @@ -17,11 +17,14 @@ module.exports = function (grunt) { grunt.file.write(config.dest, modifiedContents); }); + var languageReset = 'moment.locale(\'en\');' + function determineEmbeddedContent(files) { var embeddedContent = ''; files.forEach(function (file) { embeddedContent += transformFile(file); }); + embeddedContent += '\n ' + languageReset + '\n'; return embeddedContent; } diff --git a/test/moment/locale.js b/test/moment/locale.js index c9feb31f4c..d46b4200fc 100644 --- a/test/moment/locale.js +++ b/test/moment/locale.js @@ -129,7 +129,7 @@ exports.locale = { "defineLocale" : function (test) { moment.locale("en"); moment.defineLocale("dude", {months: ["Movember"]}); - test.equal(moment().locale(), "en", "defineLocale doesn't set it"); + test.equal(moment().locale(), "dude", "defineLocale also sets it"); test.equal(moment().locale("dude").locale(), "dude", "defineLocale defines a locale"); test.done(); }, @@ -411,6 +411,14 @@ exports.locale = { test.equal(registered, 'return-this', 'returns the locale configured'); + test.done(); + }, + + "changing the global locale doesn't affect existing instances" : function (test) { + moment.locale('en'); + var mom = moment(); + moment.locale('pr'); + test.equal('en', moment.locale()); test.done(); } };