68 lines
1.6 KiB
Python
68 lines
1.6 KiB
Python
#!/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))
|