]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
[locale] (ar-dz) improve translation (#5523)
authorAmine27 <amineroukh@gmail.com>
Tue, 19 May 2020 11:40:14 +0000 (13:40 +0200)
committerGitHub <noreply@github.com>
Tue, 19 May 2020 11:40:14 +0000 (04:40 -0700)
src/locale/ar-dz.js
src/test/locale/ar-dz.js

index cddda42afc94b5fe5abae474ca895fb071b299f9..12687a6c5af196584873c709eed0413b7e4ed3d8 100644 (file)
 //! moment.js locale configuration
 //! locale : Arabic (Algeria) [ar-dz]
-//! author : Noureddine LOUAHEDJ : https://github.com/noureddineme
+//! author : Amine Roukh: https://github.com/Amine27
+//! author : Abdel Said: https://github.com/abdelsaid
+//! author : Ahmed Elkhatib
+//! author : forabi https://github.com/forabi
+//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem
 
 import moment from '../moment';
 
+var pluralForm = function (n) {
+        return n === 0
+            ? 0
+            : n === 1
+            ? 1
+            : n === 2
+            ? 2
+            : n % 100 >= 3 && n % 100 <= 10
+            ? 3
+            : n % 100 >= 11
+            ? 4
+            : 5;
+    },
+    plurals = {
+        s: [
+            'أقل من ثانية',
+            'ثانية واحدة',
+            ['ثانيتان', 'ثانيتين'],
+            '%d ثوان',
+            '%d ثانية',
+            '%d ثانية',
+        ],
+        m: [
+            'أقل من دقيقة',
+            'دقيقة واحدة',
+            ['دقيقتان', 'دقيقتين'],
+            '%d دقائق',
+            '%d دقيقة',
+            '%d دقيقة',
+        ],
+        h: [
+            'أقل من ساعة',
+            'ساعة واحدة',
+            ['ساعتان', 'ساعتين'],
+            '%d ساعات',
+            '%d ساعة',
+            '%d ساعة',
+        ],
+        d: [
+            'أقل من يوم',
+            'يوم واحد',
+            ['يومان', 'يومين'],
+            '%d أيام',
+            '%d يومًا',
+            '%d يوم',
+        ],
+        M: [
+            'أقل من شهر',
+            'شهر واحد',
+            ['شهران', 'شهرين'],
+            '%d أشهر',
+            '%d شهرا',
+            '%d شهر',
+        ],
+        y: [
+            'أقل من عام',
+            'عام واحد',
+            ['عامان', 'عامين'],
+            '%d أعوام',
+            '%d عامًا',
+            '%d عام',
+        ],
+    },
+    pluralize = function (u) {
+        return function (number, withoutSuffix, string, isFuture) {
+            var f = pluralForm(number),
+                str = plurals[u][pluralForm(number)];
+            if (f === 2) {
+                str = str[withoutSuffix ? 0 : 1];
+            }
+            return str.replace(/%d/i, number);
+        };
+    },
+    months = [
+        'جانفي',
+        'فيفري',
+        'مارس',
+        'أفريل',
+        'ماي',
+        'جوان',
+        'جويلية',
+        'أوت',
+        'سبتمبر',
+        'أكتوبر',
+        'نوفمبر',
+        'ديسمبر',
+    ];
+
 export default moment.defineLocale('ar-dz', {
-    months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
-        '_'
-    ),
-    monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
-        '_'
-    ),
+    months: months,
+    monthsShort: months,
     weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
-    weekdaysShort: 'احد_اثÙ\86Ù\8aÙ\86_Ø«Ù\84اثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
-    weekdaysMin: 'أح_إث_Ø«Ù\84ا_أر_Ø®Ù\85_جÙ\85_سب'.split('_'),
+    weekdaysShort: 'أحد_إثÙ\86Ù\8aÙ\86_Ø«Ù\84اثاء_Ø£ربعاء_خميس_جمعة_سبت'.split('_'),
+    weekdaysMin: 'Ø­_Ù\86_Ø«_ر_Ø®_ج_س'.split('_'),
     weekdaysParseExact: true,
     longDateFormat: {
         LT: 'HH:mm',
         LTS: 'HH:mm:ss',
-        L: 'DD/MM/YYYY',
+        L: 'D/\u200FM/\u200FYYYY',
         LL: 'D MMMM YYYY',
         LLL: 'D MMMM YYYY HH:mm',
         LLLL: 'dddd D MMMM YYYY HH:mm',
     },
+    meridiemParse: /ص|م/,
+    isPM: function (input) {
+        return 'م' === input;
+    },
+    meridiem: function (hour, minute, isLower) {
+        if (hour < 12) {
+            return 'ص';
+        } else {
+            return 'م';
+        }
+    },
     calendar: {
-        sameDay: '[اÙ\84Ù\8aÙ\88Ù\85 Ø¹Ù\84Ù\89 الساعة] LT',
-        nextDay: '[غدا على الساعة] LT',
-        nextWeek: 'dddd [عÙ\84Ù\89 الساعة] LT',
-        lastDay: '[Ø£Ù\85س Ø¹Ù\84Ù\89 الساعة] LT',
-        lastWeek: 'dddd [عÙ\84Ù\89 الساعة] LT',
+        sameDay: '[اÙ\84Ù\8aÙ\88Ù\85 Ø¹Ù\86د الساعة] LT',
+        nextDay: '[غدًا عند الساعة] LT',
+        nextWeek: 'dddd [عÙ\86د الساعة] LT',
+        lastDay: '[Ø£Ù\85س Ø¹Ù\86د الساعة] LT',
+        lastWeek: 'dddd [عÙ\86د الساعة] LT',
         sameElse: 'L',
     },
     relativeTime: {
-        future: 'في %s',
+        future: 'بعد %s',
         past: 'منذ %s',
-        s: 'ثوان',
-        ss: '%d ثانية',
-        m: 'دقيقة',
-        mm: '%d دقائق',
-        h: 'ساعة',
-        hh: '%d ساعات',
-        d: 'يوم',
-        dd: '%d أيام',
-        M: 'شهر',
-        MM: '%d أشهر',
-        y: 'سنة',
-        yy: '%d سنوات',
+        s: pluralize('s'),
+        ss: pluralize('s'),
+        m: pluralize('m'),
+        mm: pluralize('m'),
+        h: pluralize('h'),
+        hh: pluralize('h'),
+        d: pluralize('d'),
+        dd: pluralize('d'),
+        M: pluralize('M'),
+        MM: pluralize('M'),
+        y: pluralize('y'),
+        yy: pluralize('y'),
+    },
+    postformat: function (string) {
+        return string.replace(/,/g, '،');
     },
     week: {
         dow: 0, // Sunday is the first day of the week.
index 7df8cfeccc144ed61a06c065bee392e02bd6457f..48921f7857541bee6ce08fe8a0d6c6f1331bc1ea 100644 (file)
@@ -12,7 +12,11 @@ test('parse', function (assert) {
         assert.equal(
             moment(input, mmm).month(),
             i,
-            input + ' should be month ' + (i + 1)
+            input +
+                ' should be month ' +
+                (i + 1) +
+                ' instead is month ' +
+                moment(input, mmm).month()
         );
     }
 
@@ -48,31 +52,31 @@ test('format', function (assert) {
     var a = [
             [
                 'dddd, MMMM Do YYYY, h:mm:ss a',
-                'الأحد, فيفري 14 2010, 3:25:50 pm',
+                'الأحد، فيفري 14 2010، 3:25:50 م',
             ],
-            ['ddd, hA', 'احد, 3PM'],
+            ['ddd, hA', 'أحدØ\8c 3Ù\85'],
             ['M Mo MM MMMM MMM', '2 2 02 فيفري فيفري'],
             ['YYYY YY', '2010 10'],
             ['D Do DD', '14 14 14'],
-            ['d do dddd ddd dd', '0 0 Ø§Ù\84أحد Ø§Ø­Ø¯ Ø£ح'],
+            ['d do dddd ddd dd', '0 0 Ø§Ù\84أحد Ø£Ø­Ø¯ ح'],
             ['DDD DDDo DDDD', '45 45 045'],
             ['w wo ww', '7 7 07'],
             ['h hh', '3 03'],
             ['H HH', '15 15'],
             ['m mm', '25 25'],
             ['s ss', '50 50'],
-            ['a A', 'pm PM'],
+            ['a A', 'م م'],
             ['[the] DDDo [day of the year]', 'the 45 day of the year'],
             ['LT', '15:25'],
             ['LTS', '15:25:50'],
-            ['L', '14/02/2010'],
+            ['L', '14/\u200f2/\u200f2010'],
             ['LL', '14 فيفري 2010'],
             ['LLL', '14 فيفري 2010 15:25'],
             ['LLLL', 'الأحد 14 فيفري 2010 15:25'],
-            ['l', '14/2/2010'],
+            ['l', '14/\u200f2/\u200f2010'],
             ['ll', '14 فيفري 2010'],
             ['lll', '14 فيفري 2010 15:25'],
-            ['llll', 'احد 14 فيفري 2010 15:25'],
+            ['llll', 'Ø£حد 14 فيفري 2010 15:25'],
         ],
         b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
         i;
@@ -133,7 +137,7 @@ test('format month', function (assert) {
 });
 
 test('format week', function (assert) {
-    var expected = 'اÙ\84أحد Ø§Ø­Ø¯ Ø£Ø­_اÙ\84إثÙ\86Ù\8aÙ\86 Ø§Ø«Ù\86Ù\8aÙ\86 Ø¥Ø«_اÙ\84Ø«Ù\84اثاء Ø«Ù\84اثاء Ø«Ù\84ا_اÙ\84أربعاء Ø§Ø±Ø¨Ø¹Ø§Ø¡ Ø£Ø±_اÙ\84Ø®Ù\85Ù\8aس Ø®Ù\85Ù\8aس Ø®Ù\85_اÙ\84جÙ\85عة Ø¬Ù\85عة Ø¬Ù\85_اÙ\84سبت Ø³Ø¨Øª Ø³Ø¨'.split(
+    var expected = 'اÙ\84أحد Ø£Ø­Ø¯ Ø­_اÙ\84إثÙ\86Ù\8aÙ\86 Ø¥Ø«Ù\86Ù\8aÙ\86 Ù\86_اÙ\84Ø«Ù\84اثاء Ø«Ù\84اثاء Ø«_اÙ\84أربعاء Ø£Ø±Ø¨Ø¹Ø§Ø¡ Ø±_اÙ\84Ø®Ù\85Ù\8aس Ø®Ù\85Ù\8aس Ø®_اÙ\84جÙ\85عة Ø¬Ù\85عة Ø¬_اÙ\84سبت Ø³Ø¨Øª Ø³'.split(
             '_'
         ),
         i;
@@ -150,42 +154,42 @@ test('from', function (assert) {
     var start = moment([2007, 1, 28]);
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ s: 44 }), true),
-        'ثوان',
+        '44 ثانية',
         '44 seconds = a few seconds'
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ s: 45 }), true),
-        'دقيقة',
+        'دقيقة واحدة',
         '45 seconds = a minute'
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ s: 89 }), true),
-        'دقيقة',
+        'دقيقة واحدة',
         '89 seconds = a minute'
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ s: 90 }), true),
-        '2 دقائق',
+        'دقيقتان',
         '90 seconds = 2 minutes'
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ m: 44 }), true),
-        '44 دقائق',
+        '44 دقيقة',
         '44 minutes = 44 minutes'
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ m: 45 }), true),
-        'ساعة',
+        'ساعة واحدة',
         '45 minutes = an hour'
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ m: 89 }), true),
-        'ساعة',
+        'ساعة واحدة',
         '89 minutes = an hour'
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ m: 90 }), true),
-        '2 ساعات',
+        'ساعتان',
         '90 minutes = 2 hours'
     );
     assert.equal(
@@ -195,27 +199,27 @@ 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(
         start.from(moment([2007, 1, 28]).add({ h: 36 }), true),
-        '2 أيام',
+        'يومان',
         '36 hours = 2 days'
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ d: 1 }), true),
-        'يوم',
+        'يوم واحد',
         '1 day = a day'
     );
     assert.equal(
@@ -225,32 +229,32 @@ test('from', function (assert) {
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ d: 25 }), true),
-        '25 أيام',
+        '25 يومًا',
         '25 days = 25 days'
     );
     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(
         start.from(moment([2007, 1, 28]).add({ d: 46 }), true),
-        '2 أشهر',
+        'شهران',
         '46 days = 2 months'
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ d: 74 }), true),
-        '2 أشهر',
+        'شهران',
         '75 days = 2 months'
     );
     assert.equal(
@@ -260,7 +264,7 @@ test('from', function (assert) {
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ M: 1 }), true),
-        'شهر',
+        'شهر واحد',
         '1 month = a month'
     );
     assert.equal(
@@ -270,35 +274,35 @@ test('from', function (assert) {
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ d: 345 }), true),
-        'سÙ\86Ø©',
+        'عاÙ\85 Ù\88احد',
         '345 days = a year'
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ d: 548 }), true),
-        '2 سنوات',
+        'عامان',
         '548 days = 2 years'
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ y: 1 }), true),
-        'سÙ\86Ø©',
+        'عاÙ\85 Ù\88احد',
         '1 year = a year'
     );
     assert.equal(
         start.from(moment([2007, 1, 28]).add({ y: 5 }), true),
-        '5 Ø³Ù\86Ù\88ات',
+        '5 Ø£Ø¹Ù\88اÙ\85',
         '5 years = 5 years'
     );
 });
 
 test('suffix', function (assert) {
-    assert.equal(moment(30000).from(0), 'في ثوان', 'prefix');
-    assert.equal(moment(0).from(30000), 'منذ ثوان', 'suffix');
+    assert.equal(moment(30000).from(0), 'بعد 30 ثانية', 'prefix');
+    assert.equal(moment(0).from(30000), 'منذ 30 ثانية', 'suffix');
 });
 
 test('now from now', function (assert) {
     assert.equal(
         moment().fromNow(),
-        'منذ ثوان',
+        'منذ ثانية واحدة',
         'now from now should display as in the past'
     );
 });
@@ -306,10 +310,10 @@ test('now from now', function (assert) {
 test('fromNow', function (assert) {
     assert.equal(
         moment().add({ s: 30 }).fromNow(),
-        'في ثوان',
+        'بعد 30 ثانية',
         'in a few seconds'
     );
-    assert.equal(moment().add({ d: 5 }).fromNow(), 'في 5 أيام', 'in 5 days');
+    assert.equal(moment().add({ d: 5 }).fromNow(), 'بعد 5 أيام', 'in 5 days');
 });
 
 test('calendar day', function (assert) {
@@ -317,32 +321,32 @@ test('calendar day', function (assert) {
 
     assert.equal(
         moment(a).calendar(),
-        'اÙ\84Ù\8aÙ\88Ù\85 Ø¹Ù\84Ù\89 الساعة 12:00',
+        'اÙ\84Ù\8aÙ\88Ù\85 Ø¹Ù\86د الساعة 12:00',
         'today at the same time'
     );
     assert.equal(
         moment(a).add({ m: 25 }).calendar(),
-        'اÙ\84Ù\8aÙ\88Ù\85 Ø¹Ù\84Ù\89 الساعة 12:25',
+        'اÙ\84Ù\8aÙ\88Ù\85 Ø¹Ù\86د الساعة 12:25',
         'Now plus 25 min'
     );
     assert.equal(
         moment(a).add({ h: 1 }).calendar(),
-        'اÙ\84Ù\8aÙ\88Ù\85 Ø¹Ù\84Ù\89 الساعة 13:00',
+        'اÙ\84Ù\8aÙ\88Ù\85 Ø¹Ù\86د الساعة 13:00',
         'Now plus 1 hour'
     );
     assert.equal(
         moment(a).add({ d: 1 }).calendar(),
-        'غدا على الساعة 12:00',
+        'غدًا عند الساعة 12:00',
         'tomorrow at the same time'
     );
     assert.equal(
         moment(a).subtract({ h: 1 }).calendar(),
-        'اÙ\84Ù\8aÙ\88Ù\85 Ø¹Ù\84Ù\89 الساعة 11:00',
+        'اÙ\84Ù\8aÙ\88Ù\85 Ø¹Ù\86د الساعة 11:00',
         'Now minus 1 hour'
     );
     assert.equal(
         moment(a).subtract({ d: 1 }).calendar(),
-        'Ø£Ù\85س Ø¹Ù\84Ù\89 الساعة 12:00',
+        'Ø£Ù\85س Ø¹Ù\86د الساعة 12:00',
         'yesterday at the same time'
     );
 });
@@ -353,19 +357,19 @@ test('calendar next week', function (assert) {
         m = moment().add({ d: i });
         assert.equal(
             m.calendar(),
-            m.format('dddd [عÙ\84Ù\89 الساعة] LT'),
+            m.format('dddd [عÙ\86د الساعة] LT'),
             'Today + ' + i + ' days current time'
         );
         m.hours(0).minutes(0).seconds(0).milliseconds(0);
         assert.equal(
             m.calendar(),
-            m.format('dddd [عÙ\84Ù\89 الساعة] LT'),
+            m.format('dddd [عÙ\86د الساعة] LT'),
             'Today + ' + i + ' days beginning of day'
         );
         m.hours(23).minutes(59).seconds(59).milliseconds(999);
         assert.equal(
             m.calendar(),
-            m.format('dddd [عÙ\84Ù\89 الساعة] LT'),
+            m.format('dddd [عÙ\86د الساعة] LT'),
             'Today + ' + i + ' days end of day'
         );
     }
@@ -377,19 +381,19 @@ test('calendar last week', function (assert) {
         m = moment().subtract({ d: i });
         assert.equal(
             m.calendar(),
-            m.format('dddd [عÙ\84Ù\89 الساعة] LT'),
+            m.format('dddd [عÙ\86د الساعة] LT'),
             'Today - ' + i + ' days current time'
         );
         m.hours(0).minutes(0).seconds(0).milliseconds(0);
         assert.equal(
             m.calendar(),
-            m.format('dddd [عÙ\84Ù\89 الساعة] LT'),
+            m.format('dddd [عÙ\86د الساعة] LT'),
             'Today - ' + i + ' days beginning of day'
         );
         m.hours(23).minutes(59).seconds(59).milliseconds(999);
         assert.equal(
             m.calendar(),
-            m.format('dddd [عÙ\84Ù\89 الساعة] LT'),
+            m.format('dddd [عÙ\86د الساعة] LT'),
             'Today - ' + i + ' days end of day'
         );
     }
@@ -419,28 +423,60 @@ test('calendar all else', function (assert) {
 
 test('weeks year starting sunday formatted', function (assert) {
     assert.equal(
-        moment([2016, 1, 4]).format('w ww wo'),
+        moment([2011, 1, 4]).format('w ww wo'),
         '5 05 5',
-        'Feb 4 2016 should be week 5'
+        'Feb 4 2011 should be week 5'
     );
     assert.equal(
-        moment([2016, 0, 6]).format('w ww wo'),
+        moment([2012, 0, 6]).format('w ww wo'),
         '1 01 1',
-        'Jan  6 2016 should be week 1'
+        'Jan  6 2012 should be week 1'
     );
     assert.equal(
-        moment([2016, 0, 7]).format('w ww wo'),
+        moment([2012, 0, 7]).format('w ww wo'),
         '1 01 1',
-        'Jan  7 2016 should be week 1'
+        'Jan  7 2012 should be week 1'
     );
     assert.equal(
-        moment([2016, 0, 13]).format('w ww wo'),
+        moment([2012, 0, 13]).format('w ww wo'),
         '2 02 2',
-        'Jan 13 2016 should be week 2'
+        'Jan 13 2012 should be week 2'
     );
     assert.equal(
-        moment([2016, 0, 14]).format('w ww wo'),
+        moment([2012, 0, 14]).format('w ww wo'),
         '2 02 2',
-        'Jan 14 2016 should be week 2'
+        'Jan 14 2012 should be week 2'
+    );
+});
+
+test('no leading zeros in long date formats', function (assert) {
+    var i, j, longDateStr, shortDateStr;
+    for (i = 1; i <= 9; ++i) {
+        for (j = 1; j <= 9; ++j) {
+            longDateStr = moment([2014, i, j]).format('L');
+            shortDateStr = moment([2014, i, j]).format('l');
+            assert.equal(
+                longDateStr,
+                shortDateStr,
+                'should not have leading zeros in month or day'
+            );
+        }
+    }
+});
+
+// locale-specific
+test('ar-dz strict mode parsing works', function (assert) {
+    var m, formattedDate;
+    m = moment().locale('ar-dz');
+    formattedDate = m.format('l');
+    assert.equal(
+        moment.utc(formattedDate, 'l', 'ar-dz', false).isValid(),
+        true,
+        'Non-strict parsing works'
+    );
+    assert.equal(
+        moment.utc(formattedDate, 'l', 'ar-dz', true).isValid(),
+        true,
+        'Strict parsing must work'
     );
 });