From: Maciej Myśliński Date: Fri, 24 Feb 2017 19:18:40 +0000 (+0100) Subject: OS-29 Detect user locale in a browser when a 'default' sting is passed to the locale... X-Git-Tag: 2.18.0~20^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=40e0d673a27c63d499b8be5708fb2b1cfcdcf449;p=thirdparty%2Fmoment.git OS-29 Detect user locale in a browser when a 'default' sting is passed to the locale method --- diff --git a/src/lib/locale/locales.js b/src/lib/locale/locales.js index 99ee11571..a26ffe0f3 100644 --- a/src/lib/locale/locales.js +++ b/src/lib/locale/locales.js @@ -47,6 +47,9 @@ function chooseLocale(names) { function loadLocale(name) { var oldLocale = null; + if (name === 'default' && typeof window !== 'undefined') { + name = window.navigator.userLanguage || window.navigator.language; + } // TODO: Find a better way to register and load all the locales in Node if (!locales[name] && (typeof module !== 'undefined') && module && module.exports) { diff --git a/src/test/moment/locale.js b/src/test/moment/locale.js index 186c649df..1892fdd0e 100644 --- a/src/test/moment/locale.js +++ b/src/test/moment/locale.js @@ -47,6 +47,50 @@ test('library getters and setters', function (assert) { assert.equal(r, 'en', 'locale should return en by default'); assert.equal(moment.locale(), 'en', 'locale should return en by default'); + moment.locale('default'); + assert.equal(moment.locale(), 'en', 'default locale should return en on node'); + + // simulating window on node (normally avaliable only in a browser) + global.window = { + navigator: { + language: 'wrong-locale', + userLanguage: 'fr' + } + }; + + moment.locale('default'); + assert.equal(moment.locale(), 'fr', 'default locale should return locale from window.navigator.userLanguage first on browser'); + + global.window = { + navigator: { + language: undefined, + userLanguage: 'fr' + } + }; + + moment.locale('default'); + assert.equal(moment.locale(), 'fr', 'default locale should return locale from window.navigator.userLanguage first on browser'); + + global.window = { + navigator: { + language: 'fr', + userLanguage: undefined + } + }; + + moment.locale('default'); + assert.equal(moment.locale(), 'fr', 'default locale should return locale from window.navigator.language second on browser'); + + global.window = { + navigator: { + language: 'wrong-locale', + userLanguage: 'wrong-locale' + } + }; + + moment.locale('default'); + assert.equal(moment.locale(), 'fr', 'default locale should return en if a browser provides unknown locale'); + moment.locale('fr'); assert.equal(moment.locale(), 'fr', 'locale should return the changed locale');