Add translation tools
We need these tools for our translation gates. Related-Bug: #1291844 Change-Id: I466a17acfd133e085fbb63bd71d5d59bd833ae3b
This commit is contained in:
parent
84079a6c5c
commit
3b0a580b15
151
tools/generatedocbook
Executable file
151
tools/generatedocbook
Executable file
@ -0,0 +1,151 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
'''
|
||||
Created on 2012-7-3
|
||||
|
||||
@author: daisy
|
||||
'''
|
||||
import os, sys
|
||||
import tempfile
|
||||
import shutil
|
||||
import xml.dom.minidom
|
||||
from optparse import OptionParser
|
||||
import codecs
|
||||
|
||||
from xml2po import Main
|
||||
default_mode = 'docbook'
|
||||
operation = 'merge'
|
||||
options = {
|
||||
'mark_untranslated' : False,
|
||||
'expand_entities' : True,
|
||||
'expand_all_entities' : False,
|
||||
}
|
||||
|
||||
ignore_folder = {"docbkx-example"}
|
||||
root = "./"
|
||||
|
||||
def mergeback (folder, language):
|
||||
if (folder==None) :
|
||||
path = root
|
||||
else :
|
||||
outputFiles = mergeSingleDocument(folder, language)
|
||||
if ((outputFiles != None) and (len(outputFiles)>0)) :
|
||||
for outXML in outputFiles :
|
||||
changeXMLLangSetting (outXML, language)
|
||||
return
|
||||
|
||||
if (not os.path.isdir(path)) :
|
||||
return
|
||||
|
||||
files = os.listdir(path)
|
||||
for aFile in files :
|
||||
if (not (aFile in ignore_folder)):
|
||||
outputFiles = mergeSingleDocument (aFile, language)
|
||||
if ((outputFiles != None) and (len(outputFiles)>0)) :
|
||||
for outXML in outputFiles :
|
||||
changeXMLLangSetting (outXML, language)
|
||||
|
||||
def mergeSingleDocument(folder, language):
|
||||
xmlfiles = []
|
||||
outputfiles = []
|
||||
abspath = os.path.join(root, folder)
|
||||
if (os.path.isdir(abspath)) :
|
||||
os.path.walk(abspath, get_xml_list, xmlfiles)
|
||||
else:
|
||||
return None
|
||||
|
||||
if len(xmlfiles)>0 :
|
||||
popath = os.path.join(abspath,"locale",language+".po")
|
||||
#generate MO file
|
||||
mofile_handler, mofile_tmppath = tempfile.mkstemp()
|
||||
os.close(mofile_handler)
|
||||
os.system("msgfmt -o %s %s" % (mofile_tmppath, popath))
|
||||
|
||||
for aXML in xmlfiles :
|
||||
#(filename, ext) = os.path.splitext(os.path.basename(aXML))
|
||||
relpath = os.path.relpath(aXML, root)
|
||||
outputpath = os.path.join(os.path.curdir, "generated", language, relpath)
|
||||
try:
|
||||
xml2po_main = Main(default_mode, operation, outputpath, options)
|
||||
xml2po_main.merge(mofile_tmppath, aXML)
|
||||
outputfiles.append(outputpath)
|
||||
except IOError:
|
||||
print "Error: cannot open aFile %s for writing."
|
||||
sys.exit(5)
|
||||
except :
|
||||
print ("Exception happen")
|
||||
if mofile_tmppath :
|
||||
os.remove(mofile_tmppath)
|
||||
|
||||
return outputfiles
|
||||
|
||||
def changeXMLLangSetting(xmlFile, language):
|
||||
dom = xml.dom.minidom.parse(xmlFile)
|
||||
root = dom.documentElement
|
||||
root.setAttribute("xml:lang", language[:2])
|
||||
fileObj = codecs.open(xmlFile, "wb", encoding="utf-8")
|
||||
|
||||
#add namespace to link
|
||||
nodelists = root.getElementsByTagName("link")
|
||||
for node in nodelists :
|
||||
if (node.hasAttribute("href")) :
|
||||
node.setAttribute("xlink:href", node.getAttribute("href"))
|
||||
if (node.hasAttribute("title")) :
|
||||
node.setAttribute("xlink:title", node.getAttribute("title"))
|
||||
|
||||
dom.writexml(fileObj)
|
||||
|
||||
def get_xml_list (sms, dr, flst):
|
||||
if ((flst == "target") or (flst == "wadls")) :
|
||||
return
|
||||
if (dr.find("target")>-1) :
|
||||
return
|
||||
if (dr.find("wadls")>-1) :
|
||||
return
|
||||
|
||||
for f in flst:
|
||||
if ((f.endswith(".xml") and (f != "pom.xml"))) :
|
||||
sms.append(os.path.join(dr,f))
|
||||
|
||||
def main(argv):
|
||||
|
||||
usage = "usage: %prog [options] command [cmd_options]"
|
||||
description = "This is the tool to generate translated docbooks, which"\
|
||||
" will be stored in 'generated/[language]/"
|
||||
|
||||
parser = OptionParser(
|
||||
usage=usage, version="0.6", description=description
|
||||
)
|
||||
parser.disable_interspersed_args()
|
||||
parser.add_option(
|
||||
"-l", "--language", dest="language", help=("specified language")
|
||||
)
|
||||
parser.add_option(
|
||||
"-b", "--book", dest="book", help=("specified docbook")
|
||||
)
|
||||
(options, args) = parser.parse_args()
|
||||
if (options.language == None) :
|
||||
print "must specify language"
|
||||
return
|
||||
|
||||
#change working directory
|
||||
|
||||
#copy folders
|
||||
folder = options.book
|
||||
language = options.language
|
||||
sourcepath = os.path.join(root, folder)
|
||||
destpath = os.path.join(os.path.curdir, "generated", language)
|
||||
if (not os.path.exists(destpath)) :
|
||||
os.makedirs(destpath)
|
||||
|
||||
destfolder = os.path.join(destpath, folder)
|
||||
if (os.path.exists(destfolder)) :
|
||||
shutil.rmtree(destfolder)
|
||||
|
||||
os.system("cp -r %s %s" % (sourcepath, destpath))
|
||||
mergeback(folder, language)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main(sys.argv[1:])
|
||||
|
93
tools/generatepot
Executable file
93
tools/generatepot
Executable file
@ -0,0 +1,93 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
'''
|
||||
Created on 2012-7-3
|
||||
|
||||
@author: daisy
|
||||
'''
|
||||
import os, sys
|
||||
from xml2po import Main
|
||||
from xml2po.modes.docbook import docbookXmlMode
|
||||
|
||||
class myDocbookXmlMode(docbookXmlMode):
|
||||
def __init__(self):
|
||||
self.lists = ['itemizedlist', 'orderedlist', 'variablelist',
|
||||
'segmentedlist', 'simplelist', 'calloutlist', 'varlistentry', 'userinput',
|
||||
'computeroutput','prompt','command','screen']
|
||||
self.objects = [ 'figure', 'textobject', 'imageobject', 'mediaobject',
|
||||
'screenshot','literallayout', 'programlisting' ]
|
||||
|
||||
default_mode = 'docbook'
|
||||
operation = 'pot'
|
||||
options = {
|
||||
'mark_untranslated' : False,
|
||||
'expand_entities' : True,
|
||||
'expand_all_entities' : False,
|
||||
}
|
||||
|
||||
ignore_folder = {"docbkx-example", "training-guide"}
|
||||
ignore_file = {"api-examples.xml"}
|
||||
|
||||
root = "./"
|
||||
|
||||
def generatePoT (folder):
|
||||
if (folder==None) :
|
||||
path = root
|
||||
else :
|
||||
generateSinglePoT(folder)
|
||||
return
|
||||
|
||||
if (not os.path.isdir(path)) :
|
||||
return
|
||||
|
||||
files = os.listdir(path)
|
||||
for aFile in files :
|
||||
if (not (aFile in ignore_folder)):
|
||||
generateSinglePoT (aFile)
|
||||
|
||||
def generateSinglePoT(folder):
|
||||
xmlfiles = []
|
||||
abspath = os.path.join(root, folder)
|
||||
if (os.path.isdir(abspath)) :
|
||||
os.path.walk(abspath, get_all_xml, xmlfiles)
|
||||
else:
|
||||
return
|
||||
|
||||
if len(xmlfiles)>0 :
|
||||
output = os.path.join(abspath,"locale")
|
||||
if (not os.path.exists(output)) :
|
||||
os.mkdir(output)
|
||||
output = os.path.join(output, folder+".pot")
|
||||
try:
|
||||
xml2po_main = Main(default_mode, operation, output, options)
|
||||
xml2po_main.current_mode = myDocbookXmlMode()
|
||||
except IOError:
|
||||
print "Error: cannot open aFile %s for writing." % (output)
|
||||
sys.exit(5)
|
||||
#print(xmlfiles)
|
||||
#print(">>>outout: %s ", output)
|
||||
xml2po_main.to_pot(xmlfiles)
|
||||
|
||||
def get_all_xml (sms, dr, flst):
|
||||
if ((flst == "target") or (flst == "wadls")) :
|
||||
return
|
||||
if (dr.find("target")>-1) :
|
||||
return
|
||||
if (dr.find("wadls")>-1) :
|
||||
return
|
||||
|
||||
for f in flst:
|
||||
if (f.endswith(".xml") and (f != "pom.xml") and (not (f in ignore_file))) :
|
||||
sms.append(os.path.join(dr,f))
|
||||
|
||||
def main():
|
||||
try:
|
||||
folder = sys.argv[1]
|
||||
except:
|
||||
folder = None
|
||||
generatePoT(folder)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
Loading…
x
Reference in New Issue
Block a user