#!/usr/bin/env python3 import binascii import polib from os import listdir, walk, remove from os.path import isdir, join import sys if len(sys.argv) < 2: print(" Syntax: interim-update-module-for-gettext path/to/dir/of/languages/language/module output.po") sys.exit(2) uiline = False subpath = sys.argv[1] print("interim-update-for-gettext: processing " + subpath) messages = None npos = 0 for dirpath, dirname, filenames in walk(subpath): for filename in filenames: ipath = join(dirpath, filename) print("interim-update-for-gettext: merging " + ipath) po = polib.pofile(ipath) if len(po) != 0: samplefile = po[0].occurrences[0][0] if samplefile.endswith(".src") or samplefile.endswith(".ui"): if npos == 0: messages = po else: for entry in po: messages.append(entry) npos = npos + 1 if npos > 0: middle = 0 for entry in messages: if not len(entry.occurrences): continue location = entry.occurrences[0][0] if location.endswith(".ui"): uiline = True else: uiline = False lines = entry.msgctxt.split('\n') if uiline: widgetid = lines[1] typeid = lines[2] entry.msgctxt = location[:-3] + "|" + widgetid if typeid == "tooltip_text": entry.msgctxt = entry.msgctxt + "|" + typeid if entry.msgctxt == 'calloutpage|position' and entry.msgid == 'Middle': middle = middle + 1 if middle == 2: entry.msgid = "Center" else: ctxline = lines[1] if (ctxline.endswith("+RID_SC_FUNC_DESCRIPTIONS_START")): ctxline = ctxline[:-len("+RID_SC_FUNC_DESCRIPTIONS_START")] elif (ctxline.endswith("+RID_GLOBSTR_OFFSET")): ctxline = ctxline[:-len("+RID_GLOBSTR_OFFSET")] entry.msgctxt = ctxline comments = entry.comment.split('\n') keyid = entry.msgctxt + '|' + entry.msgid comments[-1] = polib.genKeyId(keyid.encode('utf-8')) entry.comment = "\n".join(comments) if (len(entry.msgid) and len(entry.msgstr)): if (entry.msgid[0] == '\n' and entry.msgstr[0] != '\n'): entry.msgstr = '\n' + entry.msgstr elif (entry.msgid[0] != '\n' and entry.msgstr[0] == '\n'): entry.msgstr = ' ' + entry.msgstr if (entry.msgid[-1] == '\n' and entry.msgstr[-1] != '\n'): entry.msgstr = entry.msgstr + '\n' elif (entry.msgid[-1] != '\n' and entry.msgstr[-1] == '\n'): entry.msgstr = entry.msgstr[:-1] else: messages = polib.POFile() messages.metadata = { 'Project-Id-Version': '1.0', 'Report-Msgid-Bugs-To': 'you@example.com', 'POT-Creation-Date': '2007-10-18 14:00+0100', 'PO-Revision-Date': '2007-10-18 14:00+0100', 'Last-Translator': 'you ', 'Language-Team': 'English ', 'MIME-Version': '1.0', 'Content-Type': 'text/plain; charset=utf-8', 'Content-Transfer-Encoding': '8bit', } messages.save(sys.argv[2])