Repository: crsmithdev/arrow
Pull request #518 (2018-02-21 17:29:48)

Added Estonian localisation
Adapted version of hungarian locale.


Patch:
diff --git a/arrow/locales.py b/arrow/locales.py
index a17825b..35c686e 100644
--- a/arrow/locales.py
+++ b/arrow/locales.py
@@ -2157,5 +2157,43 @@ class NepaliLocale(Locale):
         '', 'सोम', 'मंगल', 'बुध', 'बिहि', 'शुक्र', 'शनि', 'आइत'
     ]
 
- 
+class EstonianLocale(Locale):
+    names = ['ee', 'et']
+
+    past = '{0} tagasi'
+    future = '{0} pärast'
+
+    timeframes = {
+        'now': {'past': 'just nüüd', 'future': 'just nüüd'},
+        'second': {'past': 'üks sekund', 'future': 'ühe sekundi'},
+        'seconds': {'past': '{0} sekundit', 'future': '{0} sekundi'},
+        'minute': {'past': 'üks minut', 'future': 'ühe minuti'},
+        'minutes': {'past': '{0} minutit', 'future': '{0} minuti'},
+        'hour': {'past': 'tund aega', 'future': 'tunni aja'},
+        'hours': {'past': '{0} tundi', 'future': '{0} tunni'},
+        'day': {'past': 'üks päev', 'future': 'ühe päeva'},
+        'days': {'past': '{0} päeva', 'future': '{0} päeva'},
+        'month': {'past': 'üks kuu', 'future': 'ühe kuu'},
+        'months': {'past': '{0} kuud', 'future': '{0} kuu'},
+        'year': {'past': 'üks aasta', 'future': 'ühe aasta'},
+        'years': {'past': '{0} aastat', 'future': '{0} aasta'}
+    }
+
+    month_names = ['', 'Jaanuar', 'Veebruar', 'Märts', 'Aprill', 'Mai', 'Juuni', 'Juuli',
+                   'August', 'September', 'Oktoober', 'November', 'Detsember']
+    month_abbreviations = ['', 'Jan', 'Veb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug',
+                           'Sep', 'Okt', 'Nov', 'Dets']
+
+    day_names = ['', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev', 'Pühapäev']
+    day_abbreviations = ['', 'Esm', 'Teis', 'Kolm', 'Nelj', 'Re', 'Lau', 'Püh']
+
+    def _format_timeframe(self, timeframe, delta):
+        form = self.timeframes[timeframe]
+        if delta > 0:
+            form = form['future']
+        else:
+            form = form['past']
+        return form.format(abs(delta))
+    
+    
 _locales = _map_locales()


Test patch:
diff --git a/tests/locales_tests.py b/tests/locales_tests.py
index 7d548e7..9afe6bc 100644
--- a/tests/locales_tests.py
+++ b/tests/locales_tests.py
@@ -685,3 +685,52 @@ class TagalogLocaleTests(Chai):
         assertEqual(self.locale.ordinal_number(100), 'ika-100')
         assertEqual(self.locale.ordinal_number(103), 'ika-103')
         assertEqual(self.locale.ordinal_number(114), 'ika-114')
+
+        
+class EstonianLocaleTests(Chai):
+
+    def setUp(self):
+        super(EstonianLocaleTests, self).setUp()
+
+        self.locale = locales.EstonianLocale()
+
+    def test_format_timeframe(self):
+        assertEqual(self.locale._format_timeframe('now', 0), 'just nüüd')
+        assertEqual(self.locale._format_timeframe('second', 1), 'ühe sekundi')
+        assertEqual(self.locale._format_timeframe('seconds', 3), '3 sekundi')
+        assertEqual(self.locale._format_timeframe('seconds', 30), '30 sekundi')
+        assertEqual(self.locale._format_timeframe('minute', 1), 'ühe minuti')
+        assertEqual(self.locale._format_timeframe('minutes', 4), '4 minuti')
+        assertEqual(self.locale._format_timeframe('minutes', 40), '40 minuti')
+        assertEqual(self.locale._format_timeframe('hour', 1), 'tunni aja')
+        assertEqual(self.locale._format_timeframe('hours', 5), '5 tunni')
+        assertEqual(self.locale._format_timeframe('hours', 23), '23 tunni')
+        assertEqual(self.locale._format_timeframe('day', 1), 'ühe päeva')
+        assertEqual(self.locale._format_timeframe('days', 6), '6 päeva')
+        assertEqual(self.locale._format_timeframe('days', 12), '12 päeva')
+        assertEqual(self.locale._format_timeframe('month', 1), 'ühe kuu')
+        assertEqual(self.locale._format_timeframe('months', 7), '7 kuu')
+        assertEqual(self.locale._format_timeframe('months', 11), '11 kuu')
+        assertEqual(self.locale._format_timeframe('year', 1), 'ühe aasta')
+        assertEqual(self.locale._format_timeframe('years', 8), '8 aasta')
+        assertEqual(self.locale._format_timeframe('years', 12), '12 aasta')
+        
+        assertEqual(self.locale._format_timeframe('now', 0), 'just nüüd')
+        assertEqual(self.locale._format_timeframe('second', -1), 'üks sekund')
+        assertEqual(self.locale._format_timeframe('seconds', -9), '9 sekundit')
+        assertEqual(self.locale._format_timeframe('seconds', -12), '12 sekundit')
+        assertEqual(self.locale._format_timeframe('minute', -1), 'üks minut')
+        assertEqual(self.locale._format_timeframe('minutes', -2), '2 minutit')
+        assertEqual(self.locale._format_timeframe('minutes', -10), '10 minutit')
+        assertEqual(self.locale._format_timeframe('hour', -1), 'tund aega')
+        assertEqual(self.locale._format_timeframe('hours', -3), '3 tundi')
+        assertEqual(self.locale._format_timeframe('hours', -11), '11 tundi')
+        assertEqual(self.locale._format_timeframe('day', -1), 'üks päev')
+        assertEqual(self.locale._format_timeframe('days', -2), '2 päeva')
+        assertEqual(self.locale._format_timeframe('days', -12), '12 päeva')
+        assertEqual(self.locale._format_timeframe('month', -1), 'üks kuu')
+        assertEqual(self.locale._format_timeframe('months', -3), '3 kuud')
+        assertEqual(self.locale._format_timeframe('months', -13), '13 kuud')
+        assertEqual(self.locale._format_timeframe('year', -1), 'üks aasta')
+        assertEqual(self.locale._format_timeframe('years', -4), '4 aastat')
+        assertEqual(self.locale._format_timeframe('years', -14), '14 aastat')