forked from MKHyperlink/TargetXliffCreator
-
Notifications
You must be signed in to change notification settings - Fork 0
/
targetXliff.py
60 lines (46 loc) · 1.87 KB
/
targetXliff.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# # -*- coding: utf-8 -*-
import lxml.etree as Parser, os
from lxml import etree
from sys import argv
if (len(argv) == 4):
script, baseFile, srcFile, language = argv
else:
print 'Arguments amount wrong!'
print '[base_file] [source_file] [target_language]'
exit()
nodes = Parser.parse(baseFile)
root = nodes.getroot()
def createFullTagName(text):
return "{urn:oasis:names:tc:xliff:document:1.2}" + text
def getStringTable():
strMap = {}
with open(srcFile) as myfile:
for line in myfile:
name, var = line.partition("=")[::2]
if name and var:
strMap[name.strip().strip('"')] = var.strip()[1:-2]
# print '[%s][%s]' %(name.strip().strip('"'), var.strip()[1:-2])
return strMap
stringTable = getStringTable()
for f in root:
f.attrib['target-language'] = language
body = f.find(createFullTagName('body'))
for trans in body.iter(createFullTagName('trans-unit')):
note = trans.find(createFullTagName('note'))
target = trans.find(createFullTagName('target'))
source = trans.find(createFullTagName('source'))
if target is None:
containedStr = None
for key in stringTable.keys():
if note is not None and key in note.text:
containedStr = key
break;
newEle = etree.Element('target')
if containedStr is not None:
newEle.text = stringTable[containedStr].decode('utf-8')
else:
if source is not None and source.text is not None:
print source.text.encode('utf-8')
newEle.text = source.text#.decode('utf-8')
trans.insert(trans.index(source)+1, newEle)
nodes.write('%s.xliff'%(language), pretty_print=True, xml_declaration=True, encoding='utf-8')