From: Iskren Chernev Date: Wed, 12 Mar 2014 08:55:44 +0000 (-0700) Subject: Improve serbian latin translation X-Git-Tag: 2.6.0~25^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F1528%2Fhead;p=thirdparty%2Fmoment.git Improve serbian latin translation --- diff --git a/lang/rs.js b/lang/rs.js deleted file mode 100644 index 86275536e..000000000 --- a/lang/rs.js +++ /dev/null @@ -1,139 +0,0 @@ -// moment.js language configuration -// language : serbian (rs) -// author : Limon Monte : https://github.com/limonte -// based on (bs) translation by Nedim Cholich - -(function (factory) { - if (typeof define === 'function' && define.amd) { - define(['moment'], factory); // AMD - } else if (typeof exports === 'object') { - module.exports = factory(require('../moment')); // Node - } else { - factory(window.moment); // Browser global - } -}(function (moment) { - - function translate(number, withoutSuffix, key) { - var result = number + " "; - switch (key) { - case 'm': - return withoutSuffix ? 'jedna minuta' : 'jedne minute'; - case 'mm': - if (number === 1) { - result += 'minuta'; - } else if (number === 2 || number === 3 || number === 4) { - result += 'minute'; - } else { - result += 'minuta'; - } - return result; - case 'h': - return withoutSuffix ? 'jedan sat' : 'jednog sata'; - case 'hh': - if (number === 1) { - result += 'sat'; - } else if (number === 2 || number === 3 || number === 4) { - result += 'sata'; - } else { - result += 'sati'; - } - return result; - case 'dd': - if (number === 1) { - result += 'dan'; - } else { - result += 'dana'; - } - return result; - case 'MM': - if (number === 1) { - result += 'mesec'; - } else if (number === 2 || number === 3 || number === 4) { - result += 'meseca'; - } else { - result += 'meseci'; - } - return result; - case 'yy': - if (number === 1) { - result += 'godina'; - } else if (number === 2 || number === 3 || number === 4) { - result += 'godine'; - } else { - result += 'godina'; - } - return result; - } - } - - return moment.lang('rs', { - months : "januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"), - monthsShort : "jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"), - weekdays : "nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"), - weekdaysShort : "ned._pon._uto._sre._čet._pet._sub.".split("_"), - weekdaysMin : "ne_po_ut_sr_če_pe_su".split("_"), - longDateFormat : { - LT : "H:mm", - L : "DD. MM. YYYY", - LL : "D. MMMM YYYY", - LLL : "D. MMMM YYYY LT", - LLLL : "dddd, D. MMMM YYYY LT" - }, - calendar : { - sameDay : '[danas u] LT', - nextDay : '[sutra u] LT', - - nextWeek : function () { - switch (this.day()) { - case 0: - return '[u] [nedelju] [u] LT'; - case 3: - return '[u] [sredu] [u] LT'; - case 6: - return '[u] [subotu] [u] LT'; - case 1: - case 2: - case 4: - case 5: - return '[u] dddd [u] LT'; - } - }, - lastDay : '[juče u] LT', - lastWeek : function () { - switch (this.day()) { - case 0: - case 3: - return '[prošlu] dddd [u] LT'; - case 6: - return '[prošle] [subote] [u] LT'; - case 1: - case 2: - case 4: - case 5: - return '[prošli] dddd [u] LT'; - } - }, - sameElse : 'L' - }, - relativeTime : { - future : "za %s", - past : "pre %s", - s : "par sekundi", - m : translate, - mm : translate, - h : translate, - hh : translate, - d : "dan", - dd : translate, - M : "mesec", - MM : translate, - y : "godinu", - yy : translate - }, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); -})); diff --git a/lang/sr.js b/lang/sr.js new file mode 100644 index 000000000..54a5f4f6e --- /dev/null +++ b/lang/sr.js @@ -0,0 +1,106 @@ +// moment.js language configuration +// language : Serbian-latin (sr) +// author : Milan Janačković : https://github.com/milan-j + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + + var translator = { + words: { //Different grammatical cases + m: ['jedan minut', 'jedne minute'], + mm: ['minut', 'minute', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mesec', 'meseca', 'meseci'], + yy: ['godina', 'godine', 'godina'] + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return number + ' ' + translator.correctGrammaticalCase(number, wordKey); + } + } + }; + + return moment.lang('sr', { + months: ['januar', 'februar', 'mart', 'april', 'maj', 'jun', 'jul', 'avgust', 'septembar', 'oktobar', 'novembar', 'decembar'], + monthsShort: ['jan.', 'feb.', 'mar.', 'apr.', 'maj', 'jun', 'jul', 'avg.', 'sep.', 'okt.', 'nov.', 'dec.'], + weekdays: ['nedelja', 'ponedeljak', 'utorak', 'sreda', 'četvrtak', 'petak', 'subota'], + weekdaysShort: ['ned.', 'pon.', 'uto.', 'sre.', 'čet.', 'pet.', 'sub.'], + weekdaysMin: ['ne', 'po', 'ut', 'sr', 'če', 'pe', 'su'], + longDateFormat: { + LT: "H:mm", + L: "DD. MM. YYYY", + LL: "D. MMMM YYYY", + LLL: "D. MMMM YYYY LT", + LLLL: "dddd, D. MMMM YYYY LT" + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sutra u] LT', + + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedelju] [u] LT'; + case 3: + return '[u] [sredu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[juče u] LT', + lastWeek : function () { + var lastWeekDays = [ + '[prošle] [nedelje] [u] LT', + '[prošlog] [ponedeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT' + ]; + return lastWeekDays[this.day()]; + }, + sameElse : 'L' + }, + relativeTime : { + future : "za %s", + past : "pre %s", + s : "nekoliko sekundi", + m : translator.translate, + mm : translator.translate, + h : translator.translate, + hh : translator.translate, + d : "dan", + dd : translator.translate, + M : "mesec", + MM : translator.translate, + y : "godinu", + yy : translator.translate + }, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); diff --git a/test/lang/rs.js b/test/lang/sr.js similarity index 92% rename from test/lang/rs.js rename to test/lang/sr.js index dde4135c6..daa7571bf 100644 --- a/test/lang/rs.js +++ b/test/lang/sr.js @@ -2,12 +2,12 @@ var moment = require("../../moment"); /************************************************** - Serbian + Serbian-latin (sr) *************************************************/ -exports["lang:rs"] = { +exports["lang:sr"] = { setUp : function (cb) { - moment.lang('rs'); + moment.lang('sr-lat'); cb(); }, @@ -19,7 +19,8 @@ exports["lang:rs"] = { "parse" : function (test) { test.expect(96); - var tests = 'januar jan._februar feb._mart mar._april apr._maj maj._jun jun._jul jul._avgust avg._septembar sep._oktobar okt._novembar nov._decembar dec.'.split("_"), i; + var tests = 'januar jan._februar feb._mart mar._april apr._maj maj_jun jun_jul jul_avgust avg._septembar sep._oktobar okt._novembar nov._decembar dec.'.split("_"), + i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } @@ -112,7 +113,8 @@ exports["lang:rs"] = { "format month" : function (test) { test.expect(12); - var expected = 'januar jan._februar feb._mart mar._april apr._maj maj._jun jun._jul jul._avgust avg._septembar sep._oktobar okt._novembar nov._decembar dec.'.split("_"), i; + var expected = 'januar jan._februar feb._mart mar._april apr._maj maj_jun jun_jul jul_avgust avg._septembar sep._oktobar okt._novembar nov._decembar dec.'.split("_"), + i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } @@ -121,7 +123,8 @@ exports["lang:rs"] = { "format week" : function (test) { test.expect(7); - var expected = 'nedelja ned. ne_ponedeljak pon. po_utorak uto. ut_sreda sre. sr_četvrtak čet. če_petak pet. pe_subota sub. su'.split("_"), i; + var expected = 'nedelja ned. ne_ponedeljak pon. po_utorak uto. ut_sreda sre. sr_četvrtak čet. če_petak pet. pe_subota sub. su'.split("_"), + i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } @@ -131,9 +134,9 @@ exports["lang:rs"] = { "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); - test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "par sekundi", "44 seconds = a few seconds"); - test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "jedna minuta", "45 seconds = a minute"); - test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "jedna minuta", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "nekoliko sekundi", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "jedan minut", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "jedan minut", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minute", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuta", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "jedan sat", "45 minutes = an hour"); @@ -166,20 +169,20 @@ exports["lang:rs"] = { "suffix" : function (test) { test.expect(2); - test.equal(moment(30000).from(0), "za par sekundi", "prefix"); - test.equal(moment(0).from(30000), "pre par sekundi", "prefix"); + test.equal(moment(30000).from(0), "za nekoliko sekundi", "prefix"); + test.equal(moment(0).from(30000), "pre nekoliko sekundi", "prefix"); test.done(); }, "now from now" : function (test) { test.expect(1); - test.equal(moment().fromNow(), "pre par sekundi", "now from now should display as in the past"); + test.equal(moment().fromNow(), "pre nekoliko sekundi", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); - test.equal(moment().add({s: 30}).fromNow(), "za par sekundi", "in a few seconds"); + test.equal(moment().add({s: 30}).fromNow(), "za nekoliko sekundi", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "za 5 dana", "in 5 days"); test.done(); }, @@ -236,18 +239,17 @@ exports["lang:rs"] = { var i, m; function makeFormat(d) { - switch (d.day()) { - case 0: - case 3: - return '[prošlu] dddd [u] LT'; - case 6: - return '[prošle] [subote] [u] LT'; - case 1: - case 2: - case 4: - case 5: - return '[prošli] dddd [u] LT'; - } + var lastWeekDay = [ + '[prošle] [nedelje] [u] LT', + '[prošlog] [ponedeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT' + ]; + + return lastWeekDay[d.day()]; } for (i = 2; i < 7; i++) { @@ -385,7 +387,7 @@ exports["lang:rs"] = { "returns the name of the language" : function (test) { if (typeof module !== 'undefined' && module.exports) { - test.equal(require('../../lang/rs'), 'rs', "module should export rs"); + test.equal(require('../../lang/sr'), 'sr', "module should export sr"); } test.done();