def test_basics(self): app = flask.Flask(__name__) b = babel.Babel(app, default_locale="de_DE") with app.test_request_context(): assert gettext(u"Hello %(name)s!", name="Peter") == "Hallo Peter!" assert ngettext(u"%(num)s Apple", u"%(num)s Apples", 3) == u"3 Äpfel" assert ngettext(u"%(num)s Apple", u"%(num)s Apples", 1) == u"1 Apfel"
def test_basics(self): app = flask.Flask(__name__) b = babel.Babel(app, default_locale='de_DE') with app.test_request_context(): assert gettext(u'Hello %(name)s!', name='Peter') == 'Hallo Peter!' assert ngettext(u'%(num)s Apple', u'%(num)s Apples', 3) == u'3 Äpfel' assert ngettext(u'%(num)s Apple', u'%(num)s Apples', 1) == u'1 Apfel'
def test_basics_for_different_locale_path2(self): app = flask.Flask(__name__) b = babel.Babel(app, default_locale='de_DE') with app.test_request_context(): app.config['BABEL_LOCALE_FOLDER'] = 'locale' assert gettext(u'Hello %(name)s!', name='Peter') == 'Hallo Peter!' assert ngettext(u'%(num)s Apple', u'%(num)s Apples', 3) == u'3 Äpfel' assert ngettext(u'%(num)s Apple', u'%(num)s Apples', 1) == u'1 Apfel'
def timesince(dt, default=None): """ Returns string representing "time since" e.g. 3 days ago, 5 hours ago etc. """ if default is None: default = gettext("just now") now = datetime.utcnow() diff = now - dt periods = ( (diff.days / 365, "year", "years"), (diff.days / 30, "month", "months"), (diff.days / 7, "week", "weeks"), (diff.days, "day", "days"), (diff.seconds / 3600, "hour", "hours"), (diff.seconds / 60, "minute", "minutes"), (diff.seconds, "second", "seconds"), ) for period, singular, plural in periods: if not period: continue singular = u"%%(num)d %s ago" % singular plural = u"%%(num)d %s ago" % plural return ngettext(singular, plural, num=period) return default
def timesince(dt, default=None): """ Returns string representing "time since" e.g. 3 days ago, 5 hours ago etc. """ if default is None: default = gettext("just now") now = datetime.utcnow() diff = now - dt years = diff.days / 365 months = diff.days / 30 weeks = diff.days / 7 days = diff.days hours = diff.seconds / 3600 minutes = diff.seconds / 60 seconds = diff.seconds periods = ( (years, ngettext("%(num)s year", "%(num)s years", num=years)), (months, ngettext("%(num)s month", "%(num)s months", num=months)), (weeks, ngettext("%(num)s week", "%(num)s weeks", num=weeks)), (days, ngettext("%(num)s day", "%(num)s days", num=days)), (hours, ngettext("%(num)s hour", "%(num)s hours", num=hours)), (minutes, ngettext("%(num)s minute", "%(num)s minutes", num=minutes)), (seconds, ngettext("%(num)s second", "%(num)s seconds", num=seconds)), ) for period, trans in periods: if period: return gettext("%(period)s ago", period=trans) return default
def timebefore(dt, default=None): if default is None: default = gettext("passed") now = datetime.utcnow() diff = dt - now years = diff.days / 365 months = diff.days / 30 weeks = diff.days / 7 days = diff.days hours = diff.seconds / 3600 minutes = diff.seconds / 60 seconds = diff.seconds periods = ( (years, ngettext("%(num)s year", "%(num)s years", num=years)), (months, ngettext("%(num)s month", "%(num)s months", num=months)), (weeks, ngettext("%(num)s week", "%(num)s weeks", num=weeks)), (days, ngettext("%(num)s day", "%(num)s days", num=days)), (hours, ngettext("%(num)s hour", "%(num)s hours", num=hours)), (minutes, ngettext("%(num)s minute", "%(num)s minutes", num=minutes)), (seconds, ngettext("%(num)s second", "%(num)s seconds", num=seconds)), ) for period, trans in periods: if period and diff.days >= 0: return gettext("%(period)s", period=trans) return default
def prettify_time_ago(t): """ Converts seconds to a meaningful string. INPUT - t -- time in seconds """ if t < 60: s = int(t) return ngettext("%(num)d second", "%(num)d seconds", s) if t < 3600: m = int(t / 60) return ngettext("%(num)d minute", "%(num)d minutes", m) if t < 3600 * 24: h = int(t / 3600) return ngettext("%(num)d hour", "%(num)d hours", h) d = int(t / (3600 * 24)) return ngettext("%(num)d day", "%(num)d days", d)
def prettify_time_ago(t): """ Converts seconds to a meaningful string. INPUT - t -- time in seconds """ if t < 60: s = int(t) return ngettext('%(num)d second', '%(num)d seconds', s) if t < 3600: m = int(t/60) return ngettext('%(num)d minute', '%(num)d minutes', m) if t < 3600*24: h = int(t/3600) return ngettext('%(num)d hour', '%(num)d hours', h) d = int(t/(3600*24)) return ngettext('%(num)d day', '%(num)d days', d)
def prettify_time_ago(t): """ Converts seconds to a meaningful string. INPUT - t -- time in seconds """ if t < 60: s = int(t) return ngettext('%(num)d second', '%(num)d seconds', s) if t < 3600: m = int(t / 60) return ngettext('%(num)d minute', '%(num)d minutes', m) if t < 3600 * 24: h = int(t / 3600) return ngettext('%(num)d hour', '%(num)d hours', h) d = int(t / (3600 * 24)) return ngettext('%(num)d day', '%(num)d days', d)
def timesince(d, now=None): """ Takes two datetime objects and returns the time between d and now as a nicely formatted string, e.g. "10 minutes". If d occurs after now, then "0 minutes" is returned. Units used are years, months, weeks, days, hours, and minutes. Seconds and microseconds are ignored. Up to two adjacent units will be displayed. For example, "2 weeks, 3 days" and "1 year, 3 months" are possible outputs, but "2 weeks, 3 hours" and "1 year, 5 days" are not. Adapted from http://blog.natbat.co.uk/archive/2003/Jun/14/time_since """ if not d: return "Never" if d < datetime.datetime.now() - datetime.timedelta(days=5): return d.date() chunks = ( (60 * 60 * 24 * 365, lambda n: ngettext("year", "years", n)), (60 * 60 * 24 * 30, lambda n: ngettext("month", "months", n)), (60 * 60 * 24 * 7, lambda n: ngettext("week", "weeks", n)), (60 * 60 * 24, lambda n: ngettext("day", "days", n)), (60 * 60, lambda n: ngettext("hour", "hours", n)), (60, lambda n: ngettext("minute", "minutes", n)), ) # Convert datetime.date to datetime.datetime for comparison. if not isinstance(d, datetime.datetime): d = datetime.datetime(d.year, d.month, d.day) if now and not isinstance(now, datetime.datetime): now = datetime.datetime(now.year, now.month, now.day) if not now: if d.tzinfo: now = datetime.datetime.now(d.tzinfo) else: now = datetime.datetime.now() # ignore microsecond part of 'd' since we removed it from 'now' delta = now - (d - datetime.timedelta(0, 0, d.microsecond)) since = delta.days * 24 * 60 * 60 + delta.seconds if since <= 0: # d is in the future compared to now, stop processing. return d.date() for i, (seconds, name) in enumerate(chunks): count = since // seconds if count != 0: break s = gettext("%(number)d %(type)s", number=count, type=name(count)) if s == "0 minutes": return "Just now" if s == "1 day": return "Yesterday" return s + " ago"
def timesince(d, now=None): """ Takes two datetime objects and returns the time between d and now as a nicely formatted string, e.g. "10 minutes". If d occurs after now, then "0 minutes" is returned. Units used are years, months, weeks, days, hours, and minutes. Seconds and microseconds are ignored. Up to two adjacent units will be displayed. For example, "2 weeks, 3 days" and "1 year, 3 months" are possible outputs, but "2 weeks, 3 hours" and "1 year, 5 days" are not. Adapted from http://blog.natbat.co.uk/archive/2003/Jun/14/time_since """ if not d: return 'Never' if d < datetime.datetime.now() - datetime.timedelta(days=5): return d.date() chunks = ((60 * 60 * 24 * 365, lambda n: ngettext('year', 'years', n)), (60 * 60 * 24 * 30, lambda n: ngettext('month', 'months', n)), (60 * 60 * 24 * 7, lambda n: ngettext('week', 'weeks', n)), (60 * 60 * 24, lambda n: ngettext('day', 'days', n)), (60 * 60, lambda n: ngettext('hour', 'hours', n)), (60, lambda n: ngettext('minute', 'minutes', n))) # Convert datetime.date to datetime.datetime for comparison. if not isinstance(d, datetime.datetime): d = datetime.datetime(d.year, d.month, d.day) if now and not isinstance(now, datetime.datetime): now = datetime.datetime(now.year, now.month, now.day) if not now: if d.tzinfo: now = datetime.datetime.now(d.tzinfo) else: now = datetime.datetime.now() # ignore microsecond part of 'd' since we removed it from 'now' delta = now - (d - datetime.timedelta(0, 0, d.microsecond)) since = delta.days * 24 * 60 * 60 + delta.seconds if since <= 0: # d is in the future compared to now, stop processing. return d.date() for i, (seconds, name) in enumerate(chunks): count = since // seconds if count != 0: break s = gettext('%(number)d %(type)s', number=count, type=name(count)) if s == '0 minutes': return 'Just now' if s == '1 day': return 'Yesterday' return s + ' ago'
def timesince(d, now=None): """ Takes two datetime objects and returns the time between d and now as a nicely formatted string, e.g. "10 minutes". If d occurs after now, then "0 minutes" is returned. Units used are years, months, weeks, days, hours, and minutes. Seconds and microseconds are ignored. Up to two adjacent units will be displayed. For example, "2 weeks, 3 days" and "1 year, 3 months" are possible outputs, but "2 weeks, 3 hours" and "1 year, 5 days" are not. Adapted from http://blog.natbat.co.uk/archive/2003/Jun/14/time_since """ chunks = ( (60 * 60 * 24 * 365, lambda n: ngettext('year', 'years', n)), (60 * 60 * 24 * 30, lambda n: ngettext('month', 'months', n)), (60 * 60 * 24 * 7, lambda n: ngettext('week', 'weeks', n)), (60 * 60 * 24, lambda n: ngettext('day', 'days', n)), (60 * 60, lambda n: ngettext('hour', 'hours', n)), (60, lambda n: ngettext('minute', 'minutes', n)) ) # Convert datetime.date to datetime.datetime for comparison. if not isinstance(d, datetime.datetime): d = datetime.datetime(d.year, d.month, d.day) if now and not isinstance(now, datetime.datetime): now = datetime.datetime(now.year, now.month, now.day) if not now: if d.tzinfo: now = to_user_timezone(datetime.datetime.now()) else: now = datetime.datetime.now() # ignore microsecond part of 'd' since we removed it from 'now' delta = now - (d - datetime.timedelta(0, 0, d.microsecond)) since = delta.days * 24 * 60 * 60 + delta.seconds if since <= 0: # d is in the future compared to now, stop processing. return u'0 ' + gettext('minutes') for i, (seconds, name) in enumerate(chunks): count = since // seconds if count != 0: break s = gettext('%(number)d %(type)s', number=count, type=name(count)) if i + 1 < len(chunks): # Now get the second item seconds2, name2 = chunks[i + 1] count2 = (since - (seconds * count)) // seconds2 if count2 != 0: s += gettext(', %(number)d %(type)s', number=count2, type=name2(count2)) return s
def ngettext(self, singular, pluaral, n): return ngettext(singular, pluaral, n)