From 6f8630a70dd5a4652cc897c75e5692c28f1b7dd4 Mon Sep 17 00:00:00 2001 From: Yuri Chornoivan Date: Tue, 3 Nov 2015 16:26:08 +0200 Subject: Add files to translate messages from stylesheets --- docs/stylesheets/transconverter.py | 107 +++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 docs/stylesheets/transconverter.py (limited to 'docs/stylesheets/transconverter.py') 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='' +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 ', + 'Language-Team': lang_code + ' ', + '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) + -- cgit v1.2.1