import Colors = require('colors.ts'); import fs = require("fs"); import path = require("path"); import file = require("./tool/FileUtil"); type MapLike = { [key: string]: T, [key: number]: T}; class MainLan { private _clsName:string = 'LanTxt'; private _baseUrl:string; constructor() { var self = this; // 定制控制台输出颜色 Colors.theme({ error: "red", info: "green" }); Colors.enable(); } public start() { let self = this; let setName = (process.argv.slice(2)[1] || '').trim(); if(setName) self._clsName = setName; let baseUrl = self._baseUrl = process.cwd(); console.log(baseUrl); let fromObj:MapLike = JSON.parse(fs.readFileSync(path.join(baseUrl, 'lanObj.json'), 'utf-8')); let valArr:string[] = []; let keyVals:{key:number,val:string}[] = []; let val:string; for(let key in fromObj) { val = fromObj[key]; if(!val){ console.log('语言包为空----- ' + key); continue; } if(valArr.indexOf(val) < 0){ let keyNum = Number(key.split('_')[1]); keyVals.push({key:keyNum, val:val}); } else { console.log('重复 ----- ' + key + ' ----- ' + val + ' -----') } } keyVals.sort(function(A:{key:number,val:string},B:{key:number,val:string}):number{ return A.key - B.key; }) let lanObj:MapLike = {}; let lanTxt = ''; let len = keyVals.length; let diff = keyVals[len - 1].key - (len - 1); if(diff > 0) console.warn('存在 ' + diff + ' 个未使用的key'); for(let i = 0; i < len; i++) { let key = 'k_' + keyVals[i].key; lanObj[key] = keyVals[i].val; let val = lanObj[key].replace(/\\\\n/g, "\\\\\\\\n").replace(/\r\n\n/g, "\\r\\n\\n").replace(/\r\n/g, "\\r\\n").replace(/\n/g, "\\n").replace(/\t/g, "\\t"); if(!lanTxt) lanTxt = '\n\t\t'; lanTxt += "/**" + val + "*/" + "\n\t\t" + 'k_' + i + ":string;\n\t\t"; } fs.writeFileSync(path.join(baseUrl, "lanObj.json"), JSON.stringify(lanObj, null, " ")); fs.writeFileSync(path.normalize(path.join(baseUrl, 'resource', 'config', 'lanJson.json')), JSON.stringify(lanObj)); let clsName = self._clsName; let cls = clsName.replace(clsName[0],clsName[0].toLowerCase()); let clsCont = `namespace byh{\n\texport interface ${clsName}\n\t{${lanTxt}\n\t}\n\texport var ${cls}:${clsName}= {} as ${clsName};\n}`; fs.writeFileSync(path.normalize(path.join(baseUrl, 'src', 'game', 'core', 'manager', clsName + '.ts')), clsCont); } } export function run(): void { new MainLan().start(); }