From: Isaac Cambron Date: Sat, 28 Sep 2013 08:57:32 +0000 (-0400) Subject: pass arrays of languages X-Git-Tag: 2.3.0~6^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eaff269698124dedabd13054754782afb76bf8b6;p=thirdparty%2Fmoment.git pass arrays of languages --- diff --git a/moment.js b/moment.js index 4a4e7fa36..a9b752b16 100644 --- a/moment.js +++ b/moment.js @@ -458,6 +458,10 @@ return value; } + function normalizeLanguage(key) { + return key.toLowerCase().replace('_', '-'); + } + /************************************ Languages ************************************/ @@ -663,18 +667,30 @@ // 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; } @@ -1346,20 +1362,20 @@ // 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 diff --git a/test/moment/lang.js b/test/moment/lang.js index 74942171a..ace0d866a 100644 --- a/test/moment/lang.js +++ b/test/moment/lang.js @@ -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');