import sys
import time
import gettext
from types import StringType, UnicodeType
from Mailman import mm_cfg
from Mailman.SafeDict import SafeDict
_translation = None
def set_language(language=None):
global _translation
if language is not None:
language = [language]
try:
_translation = gettext.translation('mailman', mm_cfg.MESSAGES_DIR,
language)
except IOError:
_translation = gettext.NullTranslations()
def get_translation():
return _translation
def set_translation(translation):
global _translation
_translation = translation
if _translation is None:
set_language()
def _(s):
if s == '':
return s
assert s
frame = sys._getframe(1)
dict = SafeDict(frame.f_globals.copy())
dict.update(frame.f_locals)
tns = _translation.gettext(s)
charset = _translation.charset()
if not charset:
charset = 'us-ascii'
for k, v in dict.items():
if isinstance(v, UnicodeType):
dict[k] = v.encode(charset, 'replace')
return tns % dict
def ctime(date):
daysofweek = [
_('Mon'), _('Tue'), _('Wed'), _('Thu'),
_('Fri'), _('Sat'), _('Sun')
]
months = [
'',
_('Jan'), _('Feb'), _('Mar'), _('Apr'), _('May'), _('Jun'),
_('Jul'), _('Aug'), _('Sep'), _('Oct'), _('Nov'), _('Dec')
]
tzname = _('Server Local Time')
if isinstance(date, StringType):
try:
year, mon, day, hh, mm, ss, wday, ydat, dst = time.strptime(date)
tzname = time.tzname[dst and 1 or 0]
except ValueError:
try:
wday, mon, day, hms, year = date.split()
hh, mm, ss = hms.split(':')
year = int(year)
day = int(day)
hh = int(hh)
mm = int(mm)
ss = int(ss)
except ValueError:
return date
else:
for i in range(0, 7):
wconst = (1999, 1, 1, 0, 0, 0, i, 1, 0)
if wday.lower() == time.strftime('%a', wconst).lower():
wday = i
break
for i in range(1, 13):
mconst = (1999, i, 1, 0, 0, 0, 0, 1, 0)
if mon.lower() == time.strftime('%b', mconst).lower():
mon = i
break
else:
year, mon, day, hh, mm, ss, wday, yday, dst = time.localtime(date)
tzname = time.tzname[dst and 1 or 0]
wday = daysofweek[wday]
mon = months[mon]
return _('%(wday)s %(mon)s %(day)2i %(hh)02i:%(mm)02i:%(ss)02i '
'%(tzname)s %(year)04i')