]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
[locale] Fix Serbian locale (sr, sr-cyrl) (#5742)
authorDušan Simić <dusan.simic1810@gmail.com>
Thu, 8 Oct 2020 17:59:43 +0000 (19:59 +0200)
committerGitHub <noreply@github.com>
Thu, 8 Oct 2020 17:59:43 +0000 (10:59 -0700)
src/locale/sr-cyrl.js
src/locale/sr.js
src/test/locale/sr-cyrl.js
src/test/locale/sr.js

index 5f695972ae7df27223a34fe455436f7e22838d76..2c26999a04b34b45d11e9204ab3dfae8c85f3bce 100644 (file)
@@ -9,32 +9,42 @@ var translator = {
     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);
     },
 };
 
@@ -100,11 +110,11 @@ export default moment.defineLocale('sr-cyrl', {
         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}\./,
index 502b54d8d676ee31db06aa0cb425aced434b9ca0..7e38deab5ff5abccbfbb1254e37b20ea6abf2709 100644 (file)
@@ -1,3 +1,4 @@
+import { without } from 'lodash';
 //! moment.js locale configuration
 //! locale : Serbian [sr]
 //! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
@@ -9,32 +10,42 @@ var translator = {
     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);
     },
 };
 
@@ -102,11 +113,11 @@ export default moment.defineLocale('sr', {
         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}\./,
index f21e8886a19348aca43aa7bd123746d3491d07d8..dbb67d2d4b4a1878a5aeab45c06fdcaebf874480 100644 (file)
@@ -165,7 +165,7 @@ test('from', function (assert) {
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ s: 90 }), true),
-        '2 Ð¼Ð¸Ð½Ñ\83Ñ\82е',
+        '2 Ð¼Ð¸Ð½Ñ\83Ñ\82а',
         '90 seconds = 2 minutes'
     );
     assert.equal(
@@ -195,17 +195,17 @@ test('from', function (assert) {
     );
     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(
@@ -215,7 +215,7 @@ test('from', function (assert) {
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ d: 1 }), true),
-        'дан',
+        'један дан',
         '1 day = a day'
     );
     assert.equal(
@@ -230,17 +230,17 @@ test('from', function (assert) {
     );
     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(
@@ -260,7 +260,7 @@ test('from', function (assert) {
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ M: 1 }), true),
-        'месец',
+        'један месец',
         '1 month = a month'
     );
     assert.equal(
@@ -270,7 +270,7 @@ test('from', function (assert) {
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ d: 345 }), true),
-        'годину',
+        'једна година',
         '345 days = a year'
     );
     assert.equal(
@@ -280,7 +280,7 @@ test('from', function (assert) {
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ y: 1 }), true),
-        'годину',
+        'једна година',
         '1 year = a year'
     );
     assert.equal(
index 0d4f2e490aeb2a36a96db82305d965aa7027c9d5..ebd848991f0caa74913d539394b81681ddef7f1d 100644 (file)
@@ -165,7 +165,7 @@ test('from', function (assert) {
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ s: 90 }), true),
-        '2 minute',
+        '2 minuta',
         '90 seconds = 2 minutes'
     );
     assert.equal(
@@ -195,17 +195,17 @@ test('from', function (assert) {
     );
     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(
@@ -215,7 +215,7 @@ test('from', function (assert) {
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ d: 1 }), true),
-        'dan',
+        'jedan dan',
         '1 day = a day'
     );
     assert.equal(
@@ -230,17 +230,17 @@ test('from', function (assert) {
     );
     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(
@@ -260,7 +260,7 @@ test('from', function (assert) {
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ M: 1 }), true),
-        'mesec',
+        'jedan mesec',
         '1 month = a month'
     );
     assert.equal(
@@ -270,7 +270,7 @@ test('from', function (assert) {
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ d: 345 }), true),
-        'godinu',
+        'jedna godina',
         '345 days = a year'
     );
     assert.equal(
@@ -280,7 +280,7 @@ test('from', function (assert) {
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ y: 1 }), true),
-        'godinu',
+        'jedna godina',
         '1 year = a year'
     );
     assert.equal(