]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
OS-29 Detect user locale in a browser when a 'default' sting is passed to the locale...
authorMaciej Myśliński <maciej.myslinski@netguru.pl>
Fri, 24 Feb 2017 19:18:40 +0000 (20:18 +0100)
committerIskren Chernev <iskren.chernev@gmail.com>
Sat, 11 Mar 2017 22:42:32 +0000 (00:42 +0200)
src/lib/locale/locales.js
src/test/moment/locale.js

index 99ee11571849f4df7faabc10c9628b83501eb512..a26ffe0f3b17cf66d9c11a81996a0cceaf933f23 100644 (file)
@@ -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) {
index 186c649dfe2f1163874c08a6b11abdec6d051fe5..1892fdd0e4ed4c357e6ea1c83532c64fe716573a 100644 (file)
@@ -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');