import Colors = require('colors.ts'); class MainLanHw { private fs = require("fs"); private path = require("path"); private _baseUrl: string; constructor(baseUrl: string) { var self = this; self._baseUrl = baseUrl; self.transStr(); } private transStr() { var self = this; var baseUrl = self._baseUrl; var path = self.path; var fs = self.fs; // 定制控制台输出颜色 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); var lanStr_2 = fs.readFileSync(path.join(baseUrl, 'lanObj2.json'), 'utf-8'); var lanObj_2 = JSON.parse(lanStr_2); //language_1 var lanArr_1 = []; var newJson_1 = {}; var lanTxt_1 = ""; var useIds = []; var maxId = 0; var minId = 999999; //language_2 var lanArr_2 = []; var newJson_2 = {}; for (var key in lanObj_1) { var val_1 = lanObj_1[key]; 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_3 = val_1.replace(/\\\\n/g, "\\\\\\\\n"); val_3 = val_3.replace(/\r\n\n/g, "\\r\\n\\n"); val_3 = val_3.replace(/\r\n/g, "\\r\\n"); val_3 = val_3.replace(/\n/g, "\\n"); val_3 = val_3.replace(/\t/g, "\\t"); lanTxt_1 += "\n\t/**" + val_3 + "*/" + "\n\t" + key + ":string;"; newJson_1[key] = val_1; lanArr_1.push(val_1); } else { self.sendErr(key, "[文本重复]"); } } for (var key in lanObj_2) { var val_2 = lanObj_2[key]; var kArr_2 = key.split("_"); var kName_2 = kArr_2[0]; // 缺失id检查 var id = Number(kArr_2[1]); if (id == undefined || kName_2 != "k") { self.sendErr(key, "[key不规范]"); } else { } if (lanArr_2.indexOf(val_2) < 0) { newJson_2[key] = val_2; lanArr_2.push(val_2); } else { self.sendErr(key, "[文本重复]"); } } var content_1 = "interface LanTxt\n{#a\n}".replace(/#a/g, lanTxt_1) + '\nlet lanTxt:LanTxt = {} as LanTxt;'; 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.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 MainLanHw(baseUrl); }