+Version 1.0
+http://svn.edgewall.org/repos/babel/tags/1.0.0/
+(???, from branches/stable/1.0.x)
+
+ * Added support for the locale plural rules defined by the CLDR.
+ * Added `format_timedelta` function to support localized formatting of
+ relative times with strings such as "2 days" or "1 month" (ticket #126).
+
+
Version 0.9.3
http://svn.edgewall.org/repos/babel/tags/0.9.3/
(Jul 9 2008, from branches/stable/0.9.x)
>>> format_timedelta(timedelta(hours=3), granularity='day',
... locale='en_US')
- u'0 days'
+ u'1 day'
The threshold parameter can be used to determine at which value the
presentation switches to the next higher unit. A higher threshold factor
for unit, secs_per_unit in TIMEDELTA_UNITS:
value = abs(seconds) / secs_per_unit
if value >= threshold or unit == granularity:
+ if unit == granularity and value > 0:
+ value = max(1, value)
value = int(round(value))
plural_form = locale.plural_form(value)
pattern = locale._data['unit_patterns'][unit][plural_form]
"yyyy-MM-dd HH:mm", locale='en_US')
+class FormatTimedeltaTestCase(unittest.TestCase):
+
+ def test_zero_seconds(self):
+ string = dates.format_timedelta(timedelta(seconds=0), locale='en')
+ self.assertEqual('0 seconds', string)
+ string = dates.format_timedelta(timedelta(seconds=0),
+ granularity='hour', locale='en')
+ self.assertEqual('0 hours', string)
+
+ def test_small_value_with_granularity(self):
+ string = dates.format_timedelta(timedelta(seconds=42),
+ granularity='hour', locale='en')
+ self.assertEqual('1 hour', string)
+
+
def suite():
suite = unittest.TestSuite()
suite.addTest(doctest.DocTestSuite(dates))
suite.addTest(unittest.makeSuite(FormatTimeTestCase))
return suite
+
if __name__ == '__main__':
unittest.main(defaultTest='suite')
>>> format_timedelta(delta, threshold=1.2, locale='en_US')
u'6 days'
>>> format_timedelta(delta, granularity='month', locale='en_US')
- u'0 months'
+ u'1 month'
Time-zone Support