# coding: utf-8 import json import os import sys def loadJson(lfile): ldata = lfile.read() cont = ldata.split("var dictionary =") if len(cont) != 2: print "Unexpected format for file " + lfile + ". Expected `var dictionary =` from old source code" exit(1) trans = cont[1].strip().replace("\n", "") if trans[-1] == ";": trans = trans[0: -1] try: return json.loads(trans) except expression as identifier: print "Something went wrong in parsing old files. Perhaps incorrect formatting?" exit(1) def loadTranslations(l10repo): with open("fieldsFromOldLayout.json") as outfile: oldLayout = json.load(outfile) fieldsFromOldLayout = oldLayout["allFields"] actionsFromOldLayout = oldLayout["actions"] with open("manualNeededLabels.json") as outfile: manualNeededLabels = json.load(outfile) newTranslations = {} for r, d, f in os.walk(l10repo): for file in f: print file if '.js' in file: with open(os.path.join(r, file)) as oldfile: oldTrans = loadJson(oldfile) print len(oldTrans.keys()) newTrans = {} for apikey in fieldsFromOldLayout: currLabel = fieldsFromOldLayout[apikey]["labels"][0] # Just use the first label for now in case multiple labels exist if currLabel in oldTrans: newTrans[apikey] = oldTrans[currLabel] for label in manualNeededLabels: if label in oldTrans: newTrans[manualNeededLabels[label]] = oldTrans[label] else: newTrans[manualNeededLabels[label]] = manualNeededLabels[label] for a in actionsFromOldLayout: actions = actionsFromOldLayout[a] for action in actions: if not "label" in action: continue curLabel = action["label"] if curLabel in oldTrans: newTrans[curLabel] = oldTrans[curLabel] else: print "Not found translation for " + curLabel if "keys" in action: curKeys = action["keys"] for key in curKeys: curLabel = curKeys[key]["label"] if curLabel in oldTrans: newTrans[key] = oldTrans[curLabel] else: print "Not found translation for " + curLabel newTranslations[file] = newTrans for file in newTranslations: with open("../src/locales/" + file[:-3] + ".json", "w") as newT: json.dump(newTranslations[file], newT, sort_keys=True, indent=4) if __name__ == "__main__": if len(sys.argv) != 2: print "Usage: fileTranslations.py $CLOUDSTACK_CODE_REPO" exit(1) cldstk = sys.argv[1] l10repo = os.path.join(cldstk, "ui/l10n") if not os.path.isdir(l10repo): print "Invalid translations location sent: " + l10repo + " does not exists" exit(1) loadTranslations(l10repo) exit(0)