def hello_plural(self): return dict(text=i18n.ungettext('Your application is now running', 'Your applications are now running', 2))
def hello_plural(self): return dict( text=i18n.ungettext('Your application is now running', 'Your applications are now running', 2))
def _my_update_params(self, d, nullable=False): options = [(0, _('None'))] for x in range(1, 10) + range(10, 30, 5) + range(30, 61, 15): options.append((x, ungettext(u'%u minute', u'%u minutes', x) % x)) d['options'] = options return d
def age(prevdate, show_short_version=False, now=None): """ turns a datetime into an age string. If show_short_version is True, then it will generate a not so accurate but shorter string, example: 2days ago, instead of 2 days and 23 hours ago. :param prevdate: datetime object :param show_short_version: if it should approximate the date and return a shorter string :rtype: unicode :returns: unicode words describing age """ now = now or datetime.datetime.now() order = ['year', 'month', 'day', 'hour', 'minute', 'second'] deltas = {} future = False if prevdate > now: now, prevdate = prevdate, now future = True if future: prevdate = prevdate.replace(microsecond=0) # Get date parts deltas from dateutil import relativedelta for part in order: d = relativedelta.relativedelta(now, prevdate) deltas[part] = getattr(d, part + 's') # Fix negative offsets (there is 1 second between 10:59:59 and 11:00:00, # not 1 hour, -59 minutes and -59 seconds) for num, length in [(5, 60), (4, 60), (3, 24)]: # seconds, minutes, hours part = order[num] carry_part = order[num - 1] if deltas[part] < 0: deltas[part] += length deltas[carry_part] -= 1 # Same thing for days except that the increment depends on the (variable) # number of days in the month month_lengths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] if deltas['day'] < 0: if prevdate.month == 2 and (prevdate.year % 4 == 0 and (prevdate.year % 100 != 0 or prevdate.year % 400 == 0)): deltas['day'] += 29 else: deltas['day'] += month_lengths[prevdate.month - 1] deltas['month'] -= 1 if deltas['month'] < 0: deltas['month'] += 12 deltas['year'] -= 1 # In short version, we want nicer handling of ages of more than a year if show_short_version: if deltas['year'] == 1: # ages between 1 and 2 years: show as months deltas['month'] += 12 deltas['year'] = 0 if deltas['year'] >= 2: # ages 2+ years: round if deltas['month'] > 6: deltas['year'] += 1 deltas['month'] = 0 # Format the result fmt_funcs = { 'year': lambda d: ungettext(u'%d year', '%d years', d) % d, 'month': lambda d: ungettext(u'%d month', '%d months', d) % d, 'day': lambda d: ungettext(u'%d day', '%d days', d) % d, 'hour': lambda d: ungettext(u'%d hour', '%d hours', d) % d, 'minute': lambda d: ungettext(u'%d minute', '%d minutes', d) % d, 'second': lambda d: ungettext(u'%d second', '%d seconds', d) % d, } for i, part in enumerate(order): value = deltas[part] if value == 0: continue if i < 5: sub_part = order[i + 1] sub_value = deltas[sub_part] else: sub_value = 0 if sub_value == 0 or show_short_version: if future: return _('in %s') % fmt_funcs[part](value) else: return _('%s ago') % fmt_funcs[part](value) if future: return _('in %s and %s') % (fmt_funcs[part](value), fmt_funcs[sub_part](sub_value)) else: return _('%s and %s ago') % (fmt_funcs[part](value), fmt_funcs[sub_part](sub_value)) return _('just now')