Repository: crsmithdev/arrow
Pull request #430 (2017-04-17 17:08:23)

Fix grammar of ArabicLocale


Patch:
diff --git a/arrow/locales.py b/arrow/locales.py
index 6e83af6..724a3d1 100644
--- a/arrow/locales.py
+++ b/arrow/locales.py
@@ -1076,37 +1076,101 @@ class AzerbaijaniLocale(Locale):
     day_names = ['', 'Bazar ertəsi', 'Çərşənbə axşamı', 'Çərşənbə', 'Cümə axşamı', 'Cümə', 'Şənbə', 'Bazar']
     day_abbreviations = ['', 'Ber', 'Çax', 'Çər', 'Cax', 'Cüm', 'Şnb', 'Bzr']
 
-
 class ArabicLocale(Locale):
-
-    names = ['ar', 'ar_eg']
+    names = ['ar', 'ar_ae', 'ar_bh', 'ar_dj', 'ar_eg', 'ar_eh', 'ar_er',
+    'ar_km', 'ar_kw', 'ar_ly', 'ar_om', 'ar_qa', 'ar_sa', 'ar_sd', 'ar_so',
+    'ar_ss', 'ar_td', 'ar_ye']
 
     past = 'منذ {0}'
     future = 'خلال {0}'
 
     timeframes = {
         'now': 'الآن',
-        'seconds': 'ثوان',
+        'seconds': {
+            'double' : 'ثانيتين',
+            'ten' : '{0} ثوان',
+            'higher' : '{0} ثانية'
+        },
         'minute': 'دقيقة',
-        'minutes': '{0} دقائق',
+        'minutes': {
+            'double' : 'دقيقتين',
+            'ten' : '{0} دقائق',
+            'higher' : '{0} دقيقة'
+        },
         'hour': 'ساعة',
-        'hours': '{0} ساعات',
+        'hours': {
+            'double' : 'ساعتين',
+            'ten' : '{0} ساعات',
+            'higher' : '{0} ساعة'
+        },
         'day': 'يوم',
-        'days': '{0} أيام',
+        'days': {
+            'double' : 'يومين',
+            'ten' : '{0} أيام',
+            'higher' : '{0} يوم'
+        },
         'month': 'شهر',
-        'months': '{0} شهور',
+        'months': {
+            'double' : 'شهرين',
+            'ten' : '{0} أشهر',
+            'higher' : '{0} شهر'
+        },
         'year': 'سنة',
-        'years': '{0} سنوات',
+        'years': {
+            'double' : 'سنتين',
+            'ten' : '{0} سنوات',
+            'higher' : '{0} سنة'
+        },
     }
 
-    month_names = ['', 'يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو',
-        'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر']
-    month_abbreviations = ['', 'يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو',
-        'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر']
+    month_names = ['', 'يناير', 'فبراير', 'مارس', 'أبريل', 'مايو',
+        'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر']
+    month_abbreviations = ['', 'يناير', 'فبراير', 'مارس', 'أبريل', 'مايو',
+        'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر']
+
+    day_names = ['', 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت', 'الأحد']
+    day_abbreviations = ['', 'إثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت', 'أحد']
+    
+    def _format_timeframe(self, timeframe, delta):
+        form = self.timeframes[timeframe]
+        delta = abs(delta)
+        if isinstance(form, dict):
+            if delta == 2:
+                form = form['double']
+            elif delta > 2 and delta <= 10:
+                form = form['ten']
+            else:
+                form = form['higher']
 
-    day_names = ['', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت', 'الأحد']
-    day_abbreviations = ['', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت', 'أحد']
+        return form.format(delta)
 
+class LevantArabicLocale(ArabicLocale):
+    names = ['ar_iq', 'ar_jo', 'ar_lb', 'ar_ps', 'ar_sy']
+    month_names = ['', 'كانون الثاني', 'شباط', 'آذار', 'نيسان', 'أيار', 'حزيران', 'تموز', 'آب',
+        'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول']
+    month_abbreviations = ['', 'كانون الثاني', 'شباط', 'آذار', 'نيسان', 'أيار', 'حزيران', 'تموز', 'آب',
+        'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول']
+
+class AlgeriaTunisiaArabicLocale(ArabicLocale):
+    names = ['ar_tn', 'ar_dz']
+    month_names = ['', 'جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان',
+        'جويلية', 'أوت', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر']
+    month_abbreviations = ['', 'جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان',
+        'جويلية', 'أوت', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر']
+
+class MauritaniaArabicLocale(ArabicLocale):
+    names = ['ar_mr']
+    month_names = ['', 'يناير', 'فبراير', 'مارس', 'إبريل', 'مايو', 'يونيو',
+        'يوليو', 'أغشت', 'شتمبر', 'أكتوبر', 'نوفمبر', 'دجمبر']
+    month_abbreviations = ['', 'يناير', 'فبراير', 'مارس', 'إبريل', 'مايو', 'يونيو',
+        'يوليو', 'أغشت', 'شتمبر', 'أكتوبر', 'نوفمبر', 'دجمبر']
+
+class MoroccoArabicLocale(ArabicLocale):
+    names = ['ar_ma']
+    month_names = ['', 'يناير', 'فبراير', 'مارس', 'أبريل', 'ماي', 'يونيو',
+        'يوليوز', 'غشت', 'شتنبر', 'أكتوبر', 'نونبر', 'دجنبر']
+    month_abbreviations = ['', 'يناير', 'فبراير', 'مارس', 'أبريل', 'ماي', 'يونيو',
+        'يوليوز', 'غشت', 'شتنبر', 'أكتوبر', 'نونبر', 'دجنبر']
 
 class IcelandicLocale(Locale):
 


Test patch:
diff --git a/tests/locales_tests.py b/tests/locales_tests.py
index e50d79f..a95e4b8 100644
--- a/tests/locales_tests.py
+++ b/tests/locales_tests.py
@@ -555,6 +555,43 @@ class RomanianLocaleTests(Chai):
         self.assertEqual(self.locale._format_relative("o zi", "day", 1), "peste o zi")
 
 
+class ArabicLocalesTest(Chai):
+    def setUp(self):
+        super(ArabicLocalesTest, self).setUp()
+
+        self.locale = locales.ArabicLocale()
+
+    def test_timeframes(self):
+
+        # single
+        self.assertEqual(self.locale._format_timeframe('minute', 1), 'دقيقة')
+        self.assertEqual(self.locale._format_timeframe('hour', 1), 'ساعة')
+        self.assertEqual(self.locale._format_timeframe('day', 1), 'يوم')
+        self.assertEqual(self.locale._format_timeframe('month', 1), 'شهر')
+        self.assertEqual(self.locale._format_timeframe('year', 1), 'سنة')
+
+        # double
+        self.assertEqual(self.locale._format_timeframe('minutes', 2), 'دقيقتين')
+        self.assertEqual(self.locale._format_timeframe('hours', 2), 'ساعتين')
+        self.assertEqual(self.locale._format_timeframe('days', 2), 'يومين')
+        self.assertEqual(self.locale._format_timeframe('months', 2), 'شهرين')
+        self.assertEqual(self.locale._format_timeframe('years', 2), 'سنتين')
+
+        # up to ten
+        self.assertEqual(self.locale._format_timeframe('minutes', 3), '3 دقائق')
+        self.assertEqual(self.locale._format_timeframe('hours', 4), '4 ساعات')
+        self.assertEqual(self.locale._format_timeframe('days', 5), '5 أيام')
+        self.assertEqual(self.locale._format_timeframe('months', 6), '6 أشهر')
+        self.assertEqual(self.locale._format_timeframe('years', 10), '10 سنوات')
+
+        # more than ten
+        self.assertEqual(self.locale._format_timeframe('minutes', 11), '11 دقيقة')
+        self.assertEqual(self.locale._format_timeframe('hours', 19), '19 ساعة')
+        self.assertEqual(self.locale._format_timeframe('months', 24), '24 شهر')
+        self.assertEqual(self.locale._format_timeframe('days', 50), '50 يوم')
+        self.assertEqual(self.locale._format_timeframe('years', 115), '115 سنة')
+
+
 class NepaliLocaleTests(Chai):
 
     def setUp(self):