import Colors = require('colors.ts'); class MainLanHg { private fs = require("fs"); private path = require("path"); private xlsx = require('node-xlsx'); private _baseUrl: string; constructor(baseUrl: string) { var self = this; self._baseUrl = baseUrl; self.transStr(); } private transExcel() { var self = this; var baseUrl = self._baseUrl; var path = self.path; var hwObj = {}; var sheets = self.xlsx.parse(path.join(baseUrl, "temp.xls"));//获取到所有sheets var lanData = sheets[0].data; var lan; for (var i = 1, len = lanData.length; i < len; i++) { lan = lanData[i]; if (lan[1] != undefined && lan[2] != undefined) { hwObj[lan[1]] = lan[2]; } } return hwObj; } private transStr() { var self = this; var baseUrl = self._baseUrl; var path = self.path; var fs = self.fs; var xlsx = self.xlsx; // 定制控制台输出颜色 Colors.theme({ error: "red", info: "green" }); Colors.enable(); var lanStr_1 = fs.readFileSync(path.join(baseUrl, 'lanObj.json'), 'utf-8'); var lanObj_1 = JSON.parse(lanStr_1); //language_2 var lanArr_1 = []; var newJson_1 = {}; var lanTxt_1 = ""; var useIds = []; var maxId = 0; var minId = 999999; //language_2 var newJson_2 = {}; var lanTxt_2 = ""; var temp = ""; var result = ""; var hwObj = self.transExcel(); var val; for (var key in lanObj_1) { var val_1 = lanObj_1[key]; val = val_1.replace(/\r\n\n/g, "\\r\\n\\n"); val = val.replace(/\r\n/g, "\\r\\n"); temp = val.replace(/\n/g, "\\n"); result = hwObj[temp]; if (result != undefined) { result = result.toString(); } if (result) { var result1 = result.replace(/\\r\\n\\n/g, "\r\n\n"); result1 = result1.replace(/\\r\\n/g, "\r\n"); result1 = result1.replace(/\\n/g, "\n"); newJson_2[key] = result1; } else { var val1 = val.replace(/\\r\\n\\n/g, "\r\n\n"); newJson_2[key] = val1; val1 = val1.replace(/\\\\n/g, "\\\\\\\\n"); val1 = val1.replace(/\t/g, "\\t"); lanTxt_2 += '\n\t'+val1; } var kArr = key.split("_"); var kName = kArr[0]; // 缺失id检查 var id = Number(kArr[1]); if (id == undefined || kName != "k") { self.sendErr(key, "[key不规范]"); } else { useIds.push(id); if (id > maxId) { maxId = id; } if (id < minId) { minId = id; } } if (lanArr_1.indexOf(val_1) < 0) { var val_2 = val_1.replace(/\\r\\n\\n/g, "\r\n\n"); val_2 = val_2.replace(/\r\n/g, "\\r\\n"); val_2 = val_2.replace(/\n/g, "\\n"); val_2 = val_2.replace(/\\\\n/g, "\\\\\\\\n"); val_2 = val_2.replace(/\t/g, "\\t"); lanTxt_1 += "\n\t/**" + val_2 + "*/" + "\n\t" + key + ":string;"; newJson_1[key] = val_1; lanArr_1.push(val_1); } else { self.sendErr(key, "[文本重复]"); } } var content_1 = "interface LanTxt\n{#a\n}".replace(/#a/g, lanTxt_1) + '\nlet lanTxt:LanTxt = {} as LanTxt;'; var content_2 = "\n#a".replace(/#a/g, lanTxt_2); fs.writeFileSync(path.join(baseUrl, "lanObj.json"), JSON.stringify(newJson_1, null, " ")); fs.writeFileSync(path.join(baseUrl, "lanObj2.json"), JSON.stringify(newJson_2, null, " ")); fs.writeFileSync(path.join(baseUrl, "lan_byh.txt"), content_2); fs.writeFileSync(path.normalize(path.join(baseUrl, 'resource', 'language', 'language_1.json')), JSON.stringify(newJson_1)); fs.writeFileSync(path.normalize(path.join(baseUrl, 'resource', 'language', 'language_2.json')), JSON.stringify(newJson_2)); fs.writeFileSync(path.normalize(path.join(baseUrl, 'src', 'game', 'language', 'LanTxt.ts')), content_1); // 缺失id打印 var missIds = []; for (var i = minId; i <= maxId; i++) { if (useIds.indexOf(i) == -1) { missIds.push(i); } } var msg = self.compressIds(missIds); console.log("[finish]".info + " [" + minId + "," + maxId + "] " + "missIds: ".error + msg); } /**发送错误 */ private sendErr(msg: string, head: string = "[error]"): void { console.log(head.error + msg); } /**压缩id */ private compressIds(missIds: number[]): string { if (missIds.length <= 0) { return ""; } missIds.sort(); var i = 0; var len = missIds.length; if (len == 1) { return missIds[0] + ""; } if (len == 2) { return missIds[0] + "," + missIds[1]; } var splits = [0]; // 分割点 for (i = 0; i < len - 2; i++) { if (missIds[i + 1] - missIds[i] > 1) { splits.push(i + 1); } } var slen = splits.length; // 重组 var reformIds = []; for (i = 0; i < slen; i++) { if (i == slen - 1) { reformIds.push(missIds.slice(splits[i])); } else { reformIds.push(missIds.slice(splits[i], splits[i + 1])); } } // msg var msgs = []; var rlen = reformIds.length; for (i = 0; i < rlen; i++) { var u = reformIds[i]; var ulen = u.length; if (ulen <= 1) { msgs.push(u[0] + ""); } else { msgs.push(u[0] + "-" + u[ulen - 1]); } } return msgs.join(","); } } export function run(baseUrl: string): void { new MainLanHg(baseUrl); }