diff options
| author | tkikuchi | 2005-12-06 04:21:28 +0000 |
|---|---|---|
| committer | tkikuchi | 2005-12-06 04:21:28 +0000 |
| commit | f956fc180ebb9eaa96eec7a142ccd5587aa10df5 (patch) | |
| tree | d0ccf6b76f5e04aaed6cb0ddb46f01c01c69dc33 | |
| parent | f52e1e76bdfd84ce149148dfe2eda8451d2ce79b (diff) | |
| download | mailman-f956fc180ebb9eaa96eec7a142ccd5587aa10df5.tar.gz mailman-f956fc180ebb9eaa96eec7a142ccd5587aa10df5.tar.zst mailman-f956fc180ebb9eaa96eec7a142ccd5587aa10df5.zip | |
| -rwxr-xr-x | admin/bin/templ2po.py | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/admin/bin/templ2po.py b/admin/bin/templ2po.py new file mode 100755 index 000000000..4f4d91429 --- /dev/null +++ b/admin/bin/templ2po.py @@ -0,0 +1,131 @@ +#! /usr/bin/env python +# Move language templates to po file. +# This should be one time task of source code transition. +# Code stolen from pygettext.py +# by Tokio Kikuchi <tkikuchi@is.kochi-u.ac.jp> + +"""templ2po.py -- convert mailman language to po file. + +Usage: templ2po.py language ... + +Options: + + -h, --help + +Language is in IANA format. +""" + +import sys +import os +import getopt + +try: + import paths + from Mailman.i18n import _ +except ImportError: + def _(s): return s + +EMPTYSTRING = '' + + +def usage(code, msg=''): + if code: + fd = sys.stderr + else: + fd = sys.stdout + print >> fd, _(__doc__) % globals() + if msg: + print >> fd, msg + sys.exit(code) + + + +escapes = [] + +def make_escapes(pass_iso8859): + global escapes + if pass_iso8859: + # Allow iso-8859 characters to pass through so that e.g. 'msgid + # "H[o-umlaut]he"' would result not result in 'msgid "H\366he"'. + # Otherwise we escape any character outside the 32..126 range. + mod = 128 + else: + mod = 256 + for i in range(256): + if 32 <= (i % mod) <= 126: + escapes.append(chr(i)) + else: + escapes.append("\\%03o" % i) + escapes[ord('\\')] = '\\\\' + escapes[ord('\t')] = '\\t' + escapes[ord('\r')] = '\\r' + escapes[ord('\n')] = '\\n' + escapes[ord('\"')] = '\\"' + + +def escape(s, eightbit): + global escapes + s = list(s) + for i in range(len(s)): + if eightbit and ord(s[i]) > 127: + pass + else: + s[i] = escapes[ord(s[i])] + return EMPTYSTRING.join(s) + + +def normalize(s, eightbit): + # This converts the various Python string types into a format that is + # appropriate for .po files, namely much closer to C style. + lines = s.split('\n') + if len(lines) == 1: + s = '"' + escape(s, eightbit) + '"' + else: + if not lines[-1]: + del lines[-1] + lines[-1] = lines[-1] + '\n' + for i in range(len(lines)): + lines[i] = escape(lines[i], eightbit) + lineterm = '\\n"\n"' + s = '""\n"' + lineterm.join(lines) + '"' + return s + + + +def main(): + try: + opts, args = getopt.getopt( + sys.argv[1:], + 'h', + ['help',] + ) + except getopt.error, msg: + usage(1, msg) + + # parse options + for opt, arg in opts: + if opt in ('-h', '--help'): + usage(0) + + # calculate escapes + make_escapes(0) + + for lang in args: + filenames = os.listdir('templates/%s' % lang) + filenames.remove('CVS') + outfile = file('messages/%s/LC_MESSAGES/mailman.po' % lang, 'a') + for filename in filenames: + try: + s = file('templates/en/%s' % filename).read() + print >> outfile, '#: templates/en/%s:1' % filename + print >> outfile, '#, template' + print >> outfile, 'msgid', normalize(s, 0) + s = file('templates/%s/%s' % (lang, filename)).read() + print >> outfile, 'msgstr', normalize(s, 1) + print >> outfile + except IOError: + continue + + +if __name__ == '__main__': + main() |
