diff options
author | Robert Adam <dev@robert-adam.de> | 2020-01-27 21:31:24 +0300 |
---|---|---|
committer | Robert Adam <dev@robert-adam.de> | 2020-01-28 10:15:38 +0300 |
commit | ea1ff86c1ece8ecbed9e640b5e906cc06f1518ed (patch) | |
tree | 80402971bc9eb5f974ef0771b9168e635420dbe7 /scripts/generate-mumble_qt-qrc.py | |
parent | 72e1f47b7b13d2ffd2a98cb2fd79c10674376698 (diff) |
Added configuration file for specifying whether a provided qt-translation should be used as a fallback only or whether it should override an existing Qt translation
Diffstat (limited to 'scripts/generate-mumble_qt-qrc.py')
-rwxr-xr-x | scripts/generate-mumble_qt-qrc.py | 69 |
1 files changed, 63 insertions, 6 deletions
diff --git a/scripts/generate-mumble_qt-qrc.py b/scripts/generate-mumble_qt-qrc.py index f85900624..139776543 100755 --- a/scripts/generate-mumble_qt-qrc.py +++ b/scripts/generate-mumble_qt-qrc.py @@ -12,12 +12,52 @@ import platform import sys allowed_prefixes = ('qt', 'qtbase') +override_qt = [] -def dirToQrc(of, dirName, alreadyProcessedLangs): +def parseTranslationsConfig(configFile): + configHandle = open(configFile, "r") + + for currentLine in configHandle.readlines(): + currentLine = currentLine.strip() + # Skip comments and empty lines + if currentLine.startswith("#") or not currentLine: + continue + + # A config entry is supposed to be in the format <operator> <fileName> + splitParts = currentLine.split(" ", 1) + if len(splitParts) != 2: + raise RuntimeError("Invalid line in translation config file: %s" % currentLine) + + operator = splitParts[0].lower().strip() + translationFileName = splitParts[1].strip() + + if not translationFileName: + raise RuntimeError("Empty filename in translation config: %s" % currentLine) + + if not translationFileName.endswith(".ts"): + raise RuntimeError("Expected translation file to have a '*.ts' name but got %s" % translationFileName) + + # Replace the trailing .ts with .qm as this is what lrelease will turn it into + translationFileName = translationFileName[:-3] + ".qm" + + if operator == "fallback": + # fallback files are the default, so no special action has to be taken + pass + # be programmer friendly and allow "override" as well + elif operator == "overwrite" or operator == "override": + override_qt.append(translationFileName) + + +def dirToQrc(of, dirName, alreadyProcessedLangs, localTranslationDir = False): processedLangs = [] absDirName = os.path.abspath(dirName) fns = os.listdir(dirName) for fn in fns: + isOverride = False + if fn in override_qt and localTranslationDir: + # This translation should be used to overwrite an existing Qt-translation. + isOverride = True + fnRoot, fnExt = os.path.splitext(fn) if fnExt.lower() != '.qm': continue @@ -31,21 +71,36 @@ def dirToQrc(of, dirName, alreadyProcessedLangs): nextToLastUnderscoreIdx = prefix.rfind('_') prefix = fnRoot[:nextToLastUnderscoreIdx] lang = fnRoot[nextToLastUnderscoreIdx+1:] - if lang in alreadyProcessedLangs: + if lang in alreadyProcessedLangs and not isOverride: continue if not prefix in allowed_prefixes: continue absFn = os.path.join(absDirName, fn) if platform.system() == 'Windows': absFn = absFn.replace('\\', '/') - of.write(' <file alias="{0}">{1}</file>\n'.format(fn, absFn)) - processedLangs.append(lang) + + if not isOverride: + of.write(' <file alias="{0}">{1}</file>\n'.format(fn, absFn)) + processedLangs.append(lang) + else: + # In order to recognize translation-overrides, we have to prefix them + of.write(' <file alias="{0}">{1}</file>\n'.format("mumble_overwrite_" + fn, absFn)) + return processedLangs def main(): - # python generate-mumble_qt-qrc.py <output-fn> [inputs...] + # python generate-mumble_qt-qrc.py <output-fn> [inputs...] localDir output = sys.argv[1] - inputs = sys.argv[2:] + inputs = sys.argv[2:-1] + localDir = sys.argv[-1] + + # parse config file + if localDir.endswith("/") or localDir.endswith("\\"): + localDir = localDir[:-1] + + configFile = os.path.join(localDir, "translations.conf") + if os.path.isfile(configFile): + parseTranslationsConfig(configFile) of = open(output, 'w') of.write('<!DOCTYPE RCC><RCC version="1.0">\n') @@ -54,6 +109,8 @@ def main(): for dirName in inputs: newlyProcssedLangs = dirToQrc(of, dirName, processedLangs) processedLangs.extend(newlyProcssedLangs) + # Process translations provided by Mumble itself (aka local translations) + dirToQrc(of, localDir, processedLangs, True) of.write('</qresource>\n') of.write('</RCC>\n') of.close() |