words: {
//Different grammatical cases
ss: ['секунда', 'секунде', 'секунди'],
- m: ['Ñ\98едан минÑ\83Ñ\82', 'Ñ\98едне минÑ\83Ñ\82е'],
- mm: ['минÑ\83Ñ\82', 'минÑ\83Ñ\82е', 'минута'],
+ m: ['Ñ\98едан минÑ\83Ñ\82', 'Ñ\98едног минÑ\83Ñ\82а'],
+ mm: ['минÑ\83Ñ\82', 'минÑ\83Ñ\82а', 'минута'],
h: ['један сат', 'једног сата'],
hh: ['сат', 'сата', 'сати'],
+ d: ['један дан', 'једног дана'],
dd: ['дан', 'дана', 'дана'],
+ M: ['један месец', 'једног месеца'],
MM: ['месец', 'месеца', 'месеци'],
- yy: ['година', 'године', 'година'],
+ y: ['једну годину', 'једне године'],
+ yy: ['годину', 'године', 'година'],
},
correctGrammaticalCase: function (number, wordKey) {
- return number === 1
- ? wordKey[0]
- : number >= 2 && number <= 4
- ? wordKey[1]
- : wordKey[2];
+ if (number % 10 >= 1 && number % 10 <= 4 && (number % 100 < 10 || number % 100 >= 20)) {
+ return number % 10 === 1 ? wordKey[0] : wordKey[1]
+ }
+ return wordKey[2]
},
- translate: function (number, withoutSuffix, key) {
+ translate: function (number, withoutSuffix, key, isFuture) {
var wordKey = translator.words[key];
+
if (key.length === 1) {
- return withoutSuffix ? wordKey[0] : wordKey[1];
- } else {
- return (
- number +
- ' ' +
- translator.correctGrammaticalCase(number, wordKey)
- );
+ // Nominativ
+ if (key === 'y' && withoutSuffix) return 'једна година'
+ return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];
}
+
+ const word = translator.correctGrammaticalCase(number, wordKey)
+ // Nominativ
+ if (
+ key === 'yy' &&
+ withoutSuffix &&
+ word === 'годину') {
+ return (number + ' година')
+ }
+
+ return (number + ' ' + word);
},
};
mm: translator.translate,
h: translator.translate,
hh: translator.translate,
- d: 'дан',
+ d: translator.translate,
dd: translator.translate,
- M: 'месец',
+ M: translator.translate,
MM: translator.translate,
- y: 'годину',
+ y: translator.translate,
yy: translator.translate,
},
dayOfMonthOrdinalParse: /\d{1,2}\./,
+import { without } from 'lodash';
//! moment.js locale configuration
//! locale : Serbian [sr]
//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
words: {
//Different grammatical cases
ss: ['sekunda', 'sekunde', 'sekundi'],
- m: ['jedan minut', 'jedne minute'],
- mm: ['minut', 'minute', 'minuta'],
+ m: ['jedan minut', 'jednog minuta'],
+ mm: ['minut', 'minuta', 'minuta'],
h: ['jedan sat', 'jednog sata'],
hh: ['sat', 'sata', 'sati'],
+ d: ['jedan dan', 'jednog dana'],
dd: ['dan', 'dana', 'dana'],
+ M: ['jedan mesec', 'jednog meseca'],
MM: ['mesec', 'meseca', 'meseci'],
- yy: ['godina', 'godine', 'godina'],
+ y: ['jednu godinu', 'jedne godine'],
+ yy: ['godinu', 'godine', 'godina'],
},
correctGrammaticalCase: function (number, wordKey) {
- return number === 1
- ? wordKey[0]
- : number >= 2 && number <= 4
- ? wordKey[1]
- : wordKey[2];
+ if (number % 10 >= 1 && number % 10 <= 4 && (number % 100 < 10 || number % 100 >= 20)) {
+ return number % 10 === 1 ? wordKey[0] : wordKey[1]
+ }
+ return wordKey[2]
},
- translate: function (number, withoutSuffix, key) {
+ translate: function (number, withoutSuffix, key, isFuture) {
var wordKey = translator.words[key];
+
if (key.length === 1) {
- return withoutSuffix ? wordKey[0] : wordKey[1];
- } else {
- return (
- number +
- ' ' +
- translator.correctGrammaticalCase(number, wordKey)
- );
+ // Nominativ
+ if (key === 'y' && withoutSuffix) return 'jedna godina'
+ return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];
}
+
+ const word = translator.correctGrammaticalCase(number, wordKey)
+ // Nominativ
+ if (
+ key === 'yy' &&
+ withoutSuffix &&
+ word === 'godinu') {
+ return (number + ' godina')
+ }
+
+ return (number + ' ' + word);
},
};
mm: translator.translate,
h: translator.translate,
hh: translator.translate,
- d: 'dan',
+ d: translator.translate,
dd: translator.translate,
- M: 'mesec',
+ M: translator.translate,
MM: translator.translate,
- y: 'godinu',
+ y: translator.translate,
yy: translator.translate,
},
dayOfMonthOrdinalParse: /\d{1,2}\./,
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ s: 90 }), true),
- '2 минÑ\83Ñ\82е',
+ '2 минÑ\83Ñ\82а',
'90 seconds = 2 minutes'
);
assert.equal(
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ h: 21 }), true),
- '21 сати',
+ '21 сат',
'21 hours = 21 hours'
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ h: 22 }), true),
- 'дан',
+ 'један дан',
'22 hours = a day'
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ h: 35 }), true),
- 'дан',
+ 'један дан',
'35 hours = a day'
);
assert.equal(
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ d: 1 }), true),
- 'дан',
+ 'један дан',
'1 day = a day'
);
assert.equal(
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ d: 26 }), true),
- 'месец',
+ 'један месец',
'26 days = a month'
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ d: 30 }), true),
- 'месец',
+ 'један месец',
'30 days = a month'
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ d: 43 }), true),
- 'месец',
+ 'један месец',
'43 days = a month'
);
assert.equal(
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ M: 1 }), true),
- 'месец',
+ 'један месец',
'1 month = a month'
);
assert.equal(
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ d: 345 }), true),
- 'годину',
+ 'једна година',
'345 days = a year'
);
assert.equal(
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ y: 1 }), true),
- 'годину',
+ 'једна година',
'1 year = a year'
);
assert.equal(
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ s: 90 }), true),
- '2 minute',
+ '2 minuta',
'90 seconds = 2 minutes'
);
assert.equal(
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ h: 21 }), true),
- '21 sati',
+ '21 sat',
'21 hours = 21 hours'
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ h: 22 }), true),
- 'dan',
+ 'jedan dan',
'22 hours = a day'
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ h: 35 }), true),
- 'dan',
+ 'jedan dan',
'35 hours = a day'
);
assert.equal(
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ d: 1 }), true),
- 'dan',
+ 'jedan dan',
'1 day = a day'
);
assert.equal(
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ d: 26 }), true),
- 'mesec',
+ 'jedan mesec',
'26 days = a month'
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ d: 30 }), true),
- 'mesec',
+ 'jedan mesec',
'30 days = a month'
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ d: 43 }), true),
- 'mesec',
+ 'jedan mesec',
'43 days = a month'
);
assert.equal(
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ M: 1 }), true),
- 'mesec',
+ 'jedan mesec',
'1 month = a month'
);
assert.equal(
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ d: 345 }), true),
- 'godinu',
+ 'jedna godina',
'345 days = a year'
);
assert.equal(
);
assert.equal(
start.from(moment([2007, 1, 28]).add({ y: 1 }), true),
- 'godinu',
+ 'jedna godina',
'1 year = a year'
);
assert.equal(