]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
pass arrays of languages
authorIsaac Cambron <isaac@isaaccambron.com>
Sat, 28 Sep 2013 08:57:32 +0000 (04:57 -0400)
committerIsaac Cambron <isaac@isaaccambron.com>
Sat, 28 Sep 2013 08:57:32 +0000 (04:57 -0400)
moment.js
test/moment/lang.js

index 4a4e7fa367354c17f7f698a20029954c0d2021ef..a9b752b169f6369a2e59da54c8f73b8dfc18eb39 100644 (file)
--- a/moment.js
+++ b/moment.js
         return value;
     }
 
+    function normalizeLanguage(key) {
+        return key.toLowerCase().replace('_', '-');
+    }
+
     /************************************
         Languages
     ************************************/
     // definition for 'en', so long as 'en' has already been loaded using
     // moment.lang.
     function getLangDefinition(key) {
-        if (!key) {
-            return moment.fn._lang;
-        }
-        if (!languages[key] && hasModule) {
-            try {
-                require('./lang/' + key);
-            } catch (e) {
-                // call with no params to set to default
-                return moment.fn._lang;
+        var i, lang,
+            get = function (k) {
+                k = normalizeLanguage(k);
+                if (!languages[k] && hasModule) {
+                    try {
+                        require('./lang/' + k);
+                    } catch (e) { }
+                }
+                return languages[k];
+            };
+
+        if (isArray(key)) {
+            for (i in key) {
+                lang = get(key[i]);
+                if (lang) {
+                    return lang;
+                }
             }
         }
-        return languages[key] || moment.fn._lang;
+        else if (key) {
+            return get(key) || moment.fn._lang;
+        }
+
+        return moment.fn._lang;
     }
 
 
     // no arguments are passed in, it will simply return the current global
     // language key.
     moment.lang = function (key, values) {
+        var r;
         if (!key) {
             return moment.fn._lang._abbr;
         }
-        key = key.toLowerCase();
-        key = key.replace('_', '-');
         if (values) {
-            loadLang(key, values);
+            loadLang(normalizeLanguage(key), values);
         } else if (values === null) {
             unloadLang(key);
             key = 'en';
         } else if (!languages[key]) {
             getLangDefinition(key);
         }
-        moment.duration.fn._lang = moment.fn._lang = getLangDefinition(key);
+        r = moment.duration.fn._lang = moment.fn._lang = getLangDefinition(key);
+        return r._abbr;
     };
 
     // returns language data
index 74942171a5559155ba8f047388cac95261e58ea7..ace0d866aea74ae4f717e233a29c163d8bf3e0aa 100644 (file)
@@ -2,9 +2,11 @@ var moment = require("../../moment");
 
 exports.lang = {
     "library getter" : function (test) {
-        test.expect(7);
+        var r;
+        test.expect(8);
 
-        moment.lang('en');
+        r = moment.lang('en');
+        test.equal(r, 'en', 'Lang should return en by default');
         test.equal(moment.lang(), 'en', 'Lang should return en by default');
 
         moment.lang('fr');
@@ -28,6 +30,12 @@ exports.lang = {
         test.done();
     },
 
+    "library getter array of langs" : function (test) {
+        test.equal(moment.lang(['non-existent', 'fr', 'also-non-existent']), 'fr', "passing an array uses the first valid language");
+        test.equal(moment.lang(['es', 'fr', 'also-non-existent']), 'es', "passing an array uses the first valid language");
+        test.done();
+    },
+
     "library ensure inheritance" : function (test) {
         test.expect(2);
 
@@ -101,6 +109,14 @@ exports.lang = {
         test.done();
     },
 
+    "instance lang method with array" : function (test) {
+        var m = moment().lang(['non-existent', 'fr', 'also-non-existent']);
+        test.equal(m.lang()._abbr, 'fr', "passing an array uses the first valid language");
+        m = moment().lang(['es', 'fr', 'also-non-existent']);
+        test.equal(m.lang()._abbr, 'es', "passing an array uses the first valid language");
+        test.done();
+    },
+
     "instance lang persists with manipulation" : function (test) {
         test.expect(3);
         moment.lang('en');