UNPKG

6.5 kBPlain TextView Raw
1import Colors = require('colors.ts');
2
3class MainLanHg {
4 private fs = require("fs");
5 private path = require("path");
6 private xlsx = require('node-xlsx');
7 private _baseUrl: string;
8 constructor(baseUrl: string) {
9 var self = this;
10 self._baseUrl = baseUrl;
11 self.transStr();
12 }
13 private transExcel() {
14 var self = this;
15 var baseUrl = self._baseUrl;
16 var path = self.path;
17 var hwObj = {};
18 var sheets = self.xlsx.parse(path.join(baseUrl, "temp.xls"));//获取到所有sheets
19 var lanData = sheets[0].data;
20 var lan;
21 for (var i = 1, len = lanData.length; i < len; i++) {
22 lan = lanData[i];
23 if (lan[1] != undefined && lan[2] != undefined) {
24 hwObj[lan[1]] = lan[2];
25 }
26 }
27 return hwObj;
28 }
29 private transStr() {
30 var self = this;
31 var baseUrl = self._baseUrl;
32 var path = self.path;
33 var fs = self.fs;
34 var xlsx = self.xlsx;
35 // 定制控制台输出颜色
36 Colors.theme({ error: "red", info: "green" });
37 Colors.enable();
38 var lanStr_1 = fs.readFileSync(path.join(baseUrl, 'lanObj.json'), 'utf-8');
39 var lanObj_1 = JSON.parse(lanStr_1);
40 //language_2
41 var lanArr_1 = [];
42 var newJson_1 = {};
43 var lanTxt_1 = "";
44 var useIds = [];
45 var maxId = 0;
46 var minId = 999999;
47 //language_2
48 var newJson_2 = {};
49 var lanTxt_2 = "";
50 var temp = "";
51 var result = "";
52 var hwObj = self.transExcel();
53 var val;
54 for (var key in lanObj_1) {
55 var val_1 = lanObj_1[key];
56 val = val_1.replace(/\r\n\n/g, "\\r\\n\\n");
57 val = val.replace(/\r\n/g, "\\r\\n");
58 temp = val.replace(/\n/g, "\\n");
59 result = hwObj[temp];
60 if (result != undefined) {
61 result = result.toString();
62 }
63 if (result) {
64 var result1 = result.replace(/\\r\\n\\n/g, "\r\n\n");
65 result1 = result1.replace(/\\r\\n/g, "\r\n");
66 result1 = result1.replace(/\\n/g, "\n");
67 newJson_2[key] = result1;
68 } else {
69 var val1 = val.replace(/\\r\\n\\n/g, "\r\n\n");
70 newJson_2[key] = val1;
71 val1 = val1.replace(/\\\\n/g, "\\\\\\\\n");
72 val1 = val1.replace(/\t/g, "\\t");
73 lanTxt_2 += '\n\t'+val1;
74 }
75 var kArr = key.split("_");
76 var kName = kArr[0];
77 // 缺失id检查
78 var id = Number(kArr[1]);
79 if (id == undefined || kName != "k") {
80 self.sendErr(key, "[key不规范]");
81 }
82 else {
83 useIds.push(id);
84 if (id > maxId) {
85 maxId = id;
86 }
87 if (id < minId) {
88 minId = id;
89 }
90 }
91 if (lanArr_1.indexOf(val_1) < 0) {
92 var val_2 = val_1.replace(/\\r\\n\\n/g, "\r\n\n");
93 val_2 = val_2.replace(/\r\n/g, "\\r\\n");
94 val_2 = val_2.replace(/\n/g, "\\n");
95 val_2 = val_2.replace(/\\\\n/g, "\\\\\\\\n");
96 val_2 = val_2.replace(/\t/g, "\\t");
97 lanTxt_1 += "\n\t/**" + val_2 + "*/" + "\n\t" + key + ":string;";
98 newJson_1[key] = val_1;
99 lanArr_1.push(val_1);
100 }
101 else {
102 self.sendErr(key, "[文本重复]");
103 }
104 }
105 var content_1 = "interface LanTxt\n{#a\n}".replace(/#a/g, lanTxt_1) + '\nlet lanTxt:LanTxt = {} as LanTxt;';
106 var content_2 = "\n#a".replace(/#a/g, lanTxt_2);
107 fs.writeFileSync(path.join(baseUrl, "lanObj.json"), JSON.stringify(newJson_1, null, " "));
108 fs.writeFileSync(path.join(baseUrl, "lanObj2.json"), JSON.stringify(newJson_2, null, " "));
109 fs.writeFileSync(path.join(baseUrl, "lan_byh.txt"), content_2);
110 fs.writeFileSync(path.normalize(path.join(baseUrl, 'resource', 'language', 'language_1.json')), JSON.stringify(newJson_1));
111 fs.writeFileSync(path.normalize(path.join(baseUrl, 'resource', 'language', 'language_2.json')), JSON.stringify(newJson_2));
112 fs.writeFileSync(path.normalize(path.join(baseUrl, 'src', 'game', 'language', 'LanTxt.ts')), content_1);
113 // 缺失id打印
114 var missIds = [];
115 for (var i = minId; i <= maxId; i++) {
116 if (useIds.indexOf(i) == -1) {
117 missIds.push(i);
118 }
119 }
120 var msg = self.compressIds(missIds);
121 console.log("[finish]".info + " [" + minId + "," + maxId + "] " + "missIds: ".error + msg);
122 }
123
124 /**发送错误 */
125 private sendErr(msg: string, head: string = "[error]"): void {
126 console.log(head.error + msg);
127 }
128
129 /**压缩id */
130 private compressIds(missIds: number[]): string {
131 if (missIds.length <= 0) {
132 return "";
133 }
134 missIds.sort();
135 var i = 0;
136 var len = missIds.length;
137 if (len == 1) {
138 return missIds[0] + "";
139 }
140 if (len == 2) {
141 return missIds[0] + "," + missIds[1];
142 }
143 var splits = [0]; // 分割点
144 for (i = 0; i < len - 2; i++) {
145 if (missIds[i + 1] - missIds[i] > 1) {
146 splits.push(i + 1);
147 }
148 }
149 var slen = splits.length;
150 // 重组
151 var reformIds = [];
152 for (i = 0; i < slen; i++) {
153 if (i == slen - 1) {
154 reformIds.push(missIds.slice(splits[i]));
155 }
156 else {
157 reformIds.push(missIds.slice(splits[i], splits[i + 1]));
158 }
159 }
160 // msg
161 var msgs = [];
162 var rlen = reformIds.length;
163 for (i = 0; i < rlen; i++) {
164 var u = reformIds[i];
165 var ulen = u.length;
166 if (ulen <= 1) {
167 msgs.push(u[0] + "");
168 }
169 else {
170 msgs.push(u[0] + "-" + u[ulen - 1]);
171 }
172 }
173 return msgs.join(",");
174 }
175}
176
177export function run(baseUrl: string): void {
178 new MainLanHg(baseUrl);
179}
\No newline at end of file