aboutsummaryrefslogtreecommitdiffstats
path: root/Mailman/i18n.py
diff options
context:
space:
mode:
Diffstat (limited to 'Mailman/i18n.py')
-rw-r--r--Mailman/i18n.py129
1 files changed, 129 insertions, 0 deletions
diff --git a/Mailman/i18n.py b/Mailman/i18n.py
new file mode 100644
index 00000000..d38eba85
--- /dev/null
+++ b/Mailman/i18n.py
@@ -0,0 +1,129 @@
+# Copyright (C) 2000,2001,2002 by the Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+import sys
+import time
+import gettext
+from types import StringType
+
+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:
+ # The selected language was not installed in messages, so fall back to
+ # untranslated English.
+ _translation = gettext.NullTranslations()
+
+def get_translation():
+ return _translation
+
+def set_translation(translation):
+ global _translation
+ _translation = translation
+
+
+# Set up the global translation based on environment variables. Mostly used
+# for command line scripts.
+if _translation is None:
+ set_language()
+
+
+
+def _(s):
+ if s == '':
+ return s
+ assert s
+ # Do translation of the given string into the current language, and do
+ # Ping-string interpolation into the resulting string.
+ #
+ # This lets you write something like:
+ #
+ # now = time.ctime(time.time())
+ # print _('The current time is: %(now)s')
+ #
+ # and have it Just Work. Note that the lookup order for keys in the
+ # original string is 1) locals dictionary, 2) globals dictionary.
+ #
+ # First, get the frame of the caller
+ frame = sys._getframe(1)
+ # A `safe' dictionary is used so we won't get an exception if there's a
+ # missing key in the dictionary.
+ dict = SafeDict(frame.f_globals.copy())
+ dict.update(frame.f_locals)
+ # Translate the string, then interpolate into it.
+ return _translation.gettext(s) % dict
+
+
+
+def ctime(date):
+ # Don't make these module globals since we have to do runtime translation
+ # of the strings anyway.
+ 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')