diff options
author | Yuri Chornoivan <yurchor@ukr.net> | 2018-09-06 19:34:47 +0300 |
---|---|---|
committer | Yuri Chornoivan <yurchor@ukr.net> | 2018-09-06 19:34:47 +0300 |
commit | 1a615718778dadedfb467351d0c504b106fe55af (patch) | |
tree | e7d64b8746aab89b3026290f12ab4c54c84a7150 /docs/desktop/desktoppo.py | |
parent | fb0ab72c0f816e78932abba5b32d39ed730e105f (diff) | |
download | tools-1a615718778dadedfb467351d0c504b106fe55af.tar tools-1a615718778dadedfb467351d0c504b106fe55af.tar.gz tools-1a615718778dadedfb467351d0c504b106fe55af.tar.bz2 tools-1a615718778dadedfb467351d0c504b106fe55af.tar.xz tools-1a615718778dadedfb467351d0c504b106fe55af.zip |
Put translation infractructure for desktop files into place
Diffstat (limited to 'docs/desktop/desktoppo.py')
-rwxr-xr-x | docs/desktop/desktoppo.py | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/docs/desktop/desktoppo.py b/docs/desktop/desktoppo.py new file mode 100755 index 00000000..d4e061b7 --- /dev/null +++ b/docs/desktop/desktoppo.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python3 +# -*- 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(' generate pot catalogs and updates po files for desktop resources in the specified directory') + print('Options: -h, --help : usage') + print(' -d <directory>, --directory <directory> : directory with desktop files') + sys.exit(2) +try: + opts, args = getopt.getopt(sys.argv[1:], "hd:", ["help", "directory="]) +except getopt.GetoptError: + usage() # print help information and exit + +directory='.' +for o,a in opts: + if o in ("-h", "--help"): + usage() + if o in ("-d", "--directory"): + directory=a + +directory = directory.rstrip('/') + +if (directory != '') and (os.path.isdir(directory) == False): + sys.exit('Specified directory does not exist') + +# Find all desktop files +files = [] +for rootdir, dirnames, filenames in os.walk(directory): + files.extend(glob.glob(rootdir + "/*.desktop")) + +# Define Templates and po directory name +messagetemplate='(?<=\n)(Name=.*?\n|Comment=.*?\n|GenericName=.*?\n)' +mpattern=re.compile(messagetemplate,re.DOTALL) +translationtemplate='(?<=\n)(Name\[.*?\n|Comment\[.*?\n|GenericName\[.*?\n)' +tpattern=re.compile(translationtemplate,re.DOTALL) +podir = 'po' + +# Write POT file +pot = polib.POFile('',check_for_duplicates=True) +potcreationtime = strftime('%Y-%m-%d %H:%M%z') +pot.metadata = { + 'Project-Id-Version': 'Mageia documentation desktop files translation', + 'Report-Msgid-Bugs-To': 'i18n-discuss@ml.mageia.org', + 'POT-Creation-Date': potcreationtime, + 'PO-Revision-Date': 'YEAR-MO-DA HO:MI+ZONE', + 'Last-Translator': 'FULL NAME <EMAIL@ADDRESS>', + 'Language-Team': 'LANGUAGE <LL@li.org>', + 'MIME-Version': '1.0', + 'Content-Type': 'text/plain; charset=UTF-8', + 'Content-Transfer-Encoding': '8bit', + } + +for langfile in files: + langfiledir = langfile.replace('.desktop', '') + langfilename = langfiledir.rpartition('/')[2] + # Create localization directories if needed + try: + os.makedirs(podir) + except OSError as e: + if e.errno != errno.EEXIST: + raise + #open desktop file + text = open(langfile,"r").read() + + # Parse contents and add them to POT + for mblock in mpattern.findall(text): + mblock_stripped = mblock.strip('\n') + message_comment, message_id = mblock.strip('\n').split('=') + potentry = polib.POEntry( + msgctxt = message_comment, + msgid = message_id, + msgstr = '', + occurrences=[(langfile,'')] + ) + if message_id != '': + try: + pot.append(potentry) + except ValueError: + print('The entry already exists') +pot.save('./po/mageia_docs_desktop.pot') + +# Merge translations +for pofile in glob.glob(podir + '/*.po'): + lang = pofile[:-3].rsplit('/',1)[1] + pofilename = pofile + po = polib.pofile(pofilename) + po.merge(pot) + po.save(pofilename) + +for langfile in files: + #open desktop file + deskfile = open(langfile,"r") + text = deskfile.read() + deskfile.close() + deskfile = open(langfile,"w") + for transblock in tpattern.findall(text): + text = text.replace(transblock, '') + + # Parse PO files + for pofile in sorted(glob.glob(podir + '/*.po'), reverse = True): + lang = pofile[:-3].rsplit('/',1)[1] + pofilename = pofile + po = polib.pofile(pofilename) + for entry in po.translated_entries(): + if entry.msgid in text: + origmessage = '\n' + entry.msgctxt + '=' + entry.msgid + '\n' + origandtranslated = '\n' + entry.msgctxt + '=' + entry.msgid + '\n' + entry.msgctxt + '[' + lang + ']=' + entry.msgstr + '\n' + text = text.replace(origmessage, origandtranslated) + + deskfile.write(text) + deskfile.close() + |