#!/bin/python import re import sys from lxml import etree def main(argv) -> int: if len(argv) < 2: print("You need to specify a .ts file!") return 1 path = argv[1] if (len(path) < 3) or (path[-3:] != ".ts"): print("Please specify a path to a .ts file!") return 2 tree = None with open(path, "rb") as file: tree = etree.parse(file) if tree is None: print("Parsing failed!") return 3 root = tree.getroot() if root.tag != "TS": print("Wrong type of file!") return 4 for context in root.getchildren(): if context.tag != "context": continue for message in context.getchildren(): if message.tag != "message": continue source = message.find("source") translation = message.find("translation") if (source is None) or (translation is None): continue sourceText = etree.tostring(source, encoding="unicode").strip() if "&" in sourceText: continue translationText = etree.tostring(translation, encoding="unicode").strip() translationText = re.sub(r"&([a-zA-Z]+);", r"&\g<1>;", translationText) translationNode = etree.fromstring(translationText) translation.text = translationNode.text with open(path, "wb") as file: tree.write(file, encoding="utf-8", xml_declaration=True, pretty_print=True) print("Fixing finished!") return 0 if __name__ == "__main__": sys.exit(main(sys.argv))