diff options
author | Yuri Chornoivan <yurchor@ukr.net> | 2015-11-03 16:26:08 +0200 |
---|---|---|
committer | Yuri Chornoivan <yurchor@ukr.net> | 2015-11-03 16:26:08 +0200 |
commit | 6f8630a70dd5a4652cc897c75e5692c28f1b7dd4 (patch) | |
tree | 7cf0a6cb3c787769dd2f3fb0e7d5672f038080a9 /docs/stylesheets/transconverter.py | |
parent | 812bc098c3325d87a5638238ae9d802b44d20eb3 (diff) | |
download | tools-6f8630a70dd5a4652cc897c75e5692c28f1b7dd4.tar tools-6f8630a70dd5a4652cc897c75e5692c28f1b7dd4.tar.gz tools-6f8630a70dd5a4652cc897c75e5692c28f1b7dd4.tar.bz2 tools-6f8630a70dd5a4652cc897c75e5692c28f1b7dd4.tar.xz tools-6f8630a70dd5a4652cc897c75e5692c28f1b7dd4.zip |
Add files to translate messages from stylesheets
Diffstat (limited to 'docs/stylesheets/transconverter.py')
-rw-r--r-- | docs/stylesheets/transconverter.py | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/docs/stylesheets/transconverter.py b/docs/stylesheets/transconverter.py new file mode 100644 index 00000000..48b3ea63 --- /dev/null +++ b/docs/stylesheets/transconverter.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import errno, glob, polib, re, os, getopt, sys +from time import strftime + +def usage(): + print '\nUsage: python %s [OPTION]' %os.path.basename(sys.argv[0]) + print ' extract existing translations from xsl file' + print 'Options: -h, --help : usage' + sys.exit(2) +try: + opts, args = getopt.getopt(sys.argv[1:], "h:", ["help"]) +except getopt.GetoptError: + usage() # print help information and exit + +directory='.' +for o in opts: + if o in ("-h", "--help"): + usage() + +# Find all XSL files +files = [] +for rootdir, dirnames, filenames in os.walk(directory): + files.extend(glob.glob(rootdir + "/*.xsl")) + +# Define Templates and po directory name +translationtemplate='l:l10n\ (.*?)<\/l:l10n' +tpattern=re.compile(translationtemplate,re.DOTALL) +entemplate='language=\"en\">\n(.*?)<\/l:l10n' +enpattern=re.compile(entemplate,re.DOTALL) +langtemplate='language=\"(.*?)\"' +lpattern=re.compile(langtemplate,re.DOTALL) +messagetemplate='<l:gentext key=\"(.*?)\"\/>' +mpattern=re.compile(messagetemplate,re.DOTALL) +podir = 'po' + +pocreationtime = strftime('%Y-%m-%d %H:%M%z') + +for langfile in files: + langfiledir = langfile.replace('.xsl', '') + langfilename = langfiledir.rpartition('/')[2] + # Create localization directories if needed + try: + os.makedirs(podir) + except OSError, e: + if e.errno != errno.EEXIST: + raise + #open xsl file + text = open(langfile,"r").read() + + # Find all English messages, determine msgctxts and msgids + messages = {} + for enblock in enpattern.findall(text): + for enmessage in mpattern.findall(enblock): + msgkey, msgid = enmessage.split('\" text=\"') + messages[msgkey] = msgid + + # Parse contents and add them to PO + for tblock in tpattern.findall(text): + lang_code = lpattern.search(tblock).group(1) + print lang_code + pofilename = podir + '/' + lang_code + '.po' + if not os.path.isfile(pofilename): + # Create PO file + po = polib.POFile() + po.metadata = { + 'Project-Id-Version': 'Mageia XSL files translation', + 'Report-Msgid-Bugs-To': 'mageia-i18n@mageia.org', + 'POT-Creation-Date': pocreationtime, + 'PO-Revision-Date': pocreationtime, + 'Last-Translator': 'Duffy Duck <d_duck@nowhere.net>', + 'Language-Team': lang_code + ' <mageia-' + lang_code + '@ml.mageia.org>', + 'MIME-Version': '1.0', + 'Content-Type': 'text/plain; charset=UTF-8', + 'Content-Transfer-Encoding': '8bit', + } + po.save(pofilename) + po = polib.pofile(pofilename, check_for_duplicates=True) + if lang_code == 'en': + for message in mpattern.findall(tblock): + msgkey, msg_id = message.split('\" text=\"') + poentry = polib.POEntry( + msgctxt = msgkey, + msgid = msg_id.decode('utf-8'), + msgstr = msg_id.decode('utf-8'), + occurrences=[(langfile,'')] + ) + try: + po.append(poentry) + except ValueError: + print 'The entry already exists, skipping it' + else: + for message in mpattern.findall(tblock): + msgkey, msg_id = message.split('\" text=\"') + poentry = polib.POEntry( + msgctxt = msgkey, + msgid = messages[msgkey].decode('utf-8'), + msgstr = msg_id.decode('utf-8') if msg_id != messages[msgkey] else '', + occurrences=[(langfile,'')] + ) + try: + po.append(poentry) + except ValueError: + print 'The entry already exists, skipping it' + po.save(pofilename) + |