scancscode 1.0.57 → 1.0.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.trae/specs/fix-if-else-single-statement-value-extraction/checklist.md +7 -0
- package/.trae/specs/fix-if-else-single-statement-value-extraction/spec.md +41 -0
- package/.trae/specs/fix-if-else-single-statement-value-extraction/tasks.md +14 -0
- package/dist/src/CSVUtils.js +7 -5
- package/dist/src/CmdExecutor.js +1 -1
- package/dist/src/CsvAutoTranslator.js +5 -114
- package/dist/src/LanguageMap.js +113 -0
- package/dist/test/CSharpStringExtractor.test.js +2629 -2376
- package/dist/test/CsvAutoTranslator.test.js +166 -165
- package/dist/test/TestConvert.test.js +3 -1
- package/package.json +1 -1
- package/src/CSVUtils.ts +7 -5
- package/src/CmdExecutor.ts +1 -1
- package/src/CsvAutoTranslator.ts +6 -162
- package/src/LanguageMap.ts +158 -0
- package/test/Auto.csv +12544 -3
- package/test/Auto1.csv +4 -0
- package/test/CSharpStringExtractor.test.ts +2020 -1650
- package/test/CsvAutoTranslator.test.ts +196 -192
- package/test/TestConvert.test.ts +2 -1
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# 修复 if-else 语句无花括号时的值表达式提取 Spec
|
|
2
|
+
|
|
3
|
+
## 背景
|
|
4
|
+
当 if 或 else 语句没有花括号包围时(如单行 if/else),当前代码提取的是整个赋值语句,而应该只提取赋值右侧的值表达式。
|
|
5
|
+
|
|
6
|
+
## 测试用例分析
|
|
7
|
+
|
|
8
|
+
### 输入代码
|
|
9
|
+
```csharp
|
|
10
|
+
if (_eventIdx < _table.MainDescription.Length)
|
|
11
|
+
m_text_desc.text = _table.MainDescription[_eventIdx];
|
|
12
|
+
else
|
|
13
|
+
m_text_desc.text = _table.MainDescription[0];
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### 期望输出
|
|
17
|
+
- 第一个 snippet:
|
|
18
|
+
- `originalIndex`: `_table.MainDescription[_eventIdx]` 的位置 (95)
|
|
19
|
+
- `originalCode`: `_table.MainDescription[_eventIdx]`
|
|
20
|
+
- `convertedCode`: `_table.MainDescription[_eventIdx].TR()`
|
|
21
|
+
- 第二个 snippet:
|
|
22
|
+
- `originalIndex`: `_table.MainDescription[0]` 的位置
|
|
23
|
+
- `originalCode`: `_table.MainDescription[0]`
|
|
24
|
+
- `convertedCode`: `_table.MainDescription[0].TR()`
|
|
25
|
+
|
|
26
|
+
## 修改内容
|
|
27
|
+
|
|
28
|
+
### 问题定位
|
|
29
|
+
在 `CSharpStringExtractor.ts` 中,`extractValueExpression` 或相关方法处理 if-else 语句时:
|
|
30
|
+
- 当前:提取整个赋值语句 `m_text_desc.text = _table.MainDescription[_eventIdx]`
|
|
31
|
+
- 应该:只提取赋值右侧的值表达式 `_table.MainDescription[_eventIdx]`
|
|
32
|
+
|
|
33
|
+
### 修复策略
|
|
34
|
+
1. 识别 if/else 后没有花括号的单行语句
|
|
35
|
+
2. 跳过赋值左侧部分(`m_text_desc.text = `)
|
|
36
|
+
3. 只提取赋值右侧的表达式
|
|
37
|
+
4. 对提取的表达式应用 `.TR()` 转换
|
|
38
|
+
|
|
39
|
+
## 影响范围
|
|
40
|
+
- `CSharpStringExtractor.ts` 中的值提取逻辑
|
|
41
|
+
- 特别是在 `extractValueExpression` 或 `processStatementAndExtractValue` 方法中
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# 任务列表
|
|
2
|
+
|
|
3
|
+
## 任务 1: 分析代码定位问题
|
|
4
|
+
- [ ] 1.1 分析 CSharpStringExtractor.ts 中处理 if-else 单行语句的代码逻辑
|
|
5
|
+
- [ ] 1.2 定位需要修改的具体方法和代码位置
|
|
6
|
+
|
|
7
|
+
## 任务 2: 实现修复
|
|
8
|
+
- [ ] 2.1 修改 if-else 单行语句的值表达式提取逻辑
|
|
9
|
+
- [ ] 2.2 确保只提取赋值右侧的表达式
|
|
10
|
+
- [ ] 2.3 确保添加 .TR() 转换
|
|
11
|
+
|
|
12
|
+
## 任务 3: 验证测试
|
|
13
|
+
- [ ] 3.1 运行目标测试用例验证
|
|
14
|
+
- [ ] 3.2 运行完整测试套件确保无回归
|
package/dist/src/CSVUtils.js
CHANGED
|
@@ -65,14 +65,15 @@ class CSVUtils {
|
|
|
65
65
|
return content;
|
|
66
66
|
}
|
|
67
67
|
tryGetEntry(content, map01, map02) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
let key = content.replaceAll('\r\n', '\n');
|
|
69
|
+
if (map02.has(key)) {
|
|
70
|
+
let row2 = map02.get(key);
|
|
71
|
+
return [row2 != null, key, row2];
|
|
71
72
|
}
|
|
72
|
-
let shortKey = this.getShortKey(
|
|
73
|
+
let shortKey = this.getShortKey(key);
|
|
73
74
|
if (map01.has(shortKey)) {
|
|
74
75
|
let row1 = map01.get(shortKey);
|
|
75
|
-
if (row1 != null && (row1[0] == shortKey || row1[1] ==
|
|
76
|
+
if (row1 != null && (row1[0] == shortKey || row1[1] == key)) {
|
|
76
77
|
return [true, shortKey, row1];
|
|
77
78
|
}
|
|
78
79
|
else {
|
|
@@ -82,6 +83,7 @@ class CSVUtils {
|
|
|
82
83
|
return [false, shortKey, undefined];
|
|
83
84
|
}
|
|
84
85
|
merge(rows0, rows1, langs) {
|
|
86
|
+
let indexsxse = rows1.findIndex(x => x.includes("完成每日的显圣任务,获得经验值提升显圣等级"));
|
|
85
87
|
// 短key
|
|
86
88
|
let map01 = new Map();
|
|
87
89
|
// 全文key
|
package/dist/src/CmdExecutor.js
CHANGED
|
@@ -21,7 +21,7 @@ class CmdExecutor {
|
|
|
21
21
|
// "E:/DATA/Projects/ZhiYou/DXTSProject/Client/Assets/Scripts/",
|
|
22
22
|
];
|
|
23
23
|
let gameConfigFolders = [cwd + "Assets/Bundles/GameConfigs/"];
|
|
24
|
-
let outCsvFile = "
|
|
24
|
+
let outCsvFile = "test/Auto.csv";
|
|
25
25
|
let langs = ["zh_cn"];
|
|
26
26
|
let literalCollector = new LiteralCollector_1.LiteralCollector();
|
|
27
27
|
// return literalCollector.convert(cscodeFolders, gameConfigFolders, outCsvFile, langs,undefined,false,true)
|
|
@@ -37,6 +37,7 @@ exports.CsvAutoTranslator = void 0;
|
|
|
37
37
|
const crypto = __importStar(require("crypto"));
|
|
38
38
|
const https = __importStar(require("https"));
|
|
39
39
|
const CSVUtils_1 = require("./CSVUtils");
|
|
40
|
+
const LanguageMap_1 = require("./LanguageMap");
|
|
40
41
|
class OnlineTranslateResult {
|
|
41
42
|
errorCode = "";
|
|
42
43
|
errorMsg = "";
|
|
@@ -223,116 +224,6 @@ class CsvAutoTranslator {
|
|
|
223
224
|
let result = new OnlineTranslateResult(firstErrorCode, firstErrorMsg, isOk, translatedTexts);
|
|
224
225
|
return result;
|
|
225
226
|
}
|
|
226
|
-
langMap = new Map([
|
|
227
|
-
// 中文相关
|
|
228
|
-
["zh_cn", "zh"], // 简体中文
|
|
229
|
-
["zh_hk", "cht"], // 香港繁体中文
|
|
230
|
-
["zh_tw", "cht"], // 台湾繁体中文
|
|
231
|
-
// 英语相关
|
|
232
|
-
["en_us", "en"], // 美式英语
|
|
233
|
-
["en_gb", "en"], // 英式英语
|
|
234
|
-
["en_au", "en"], // 澳大利亚英语
|
|
235
|
-
["en_ca", "en"], // 加拿大英语
|
|
236
|
-
["en_nz", "en"], // 新西兰英语
|
|
237
|
-
// 日语
|
|
238
|
-
["ja_jp", "ja"], // 日语
|
|
239
|
-
// 韩语
|
|
240
|
-
["ko_kr", "ko"], // 韩语
|
|
241
|
-
// 法语
|
|
242
|
-
["fr_fr", "fr"], // 法语
|
|
243
|
-
["fr_ca", "fr"], // 加拿大法语
|
|
244
|
-
// 德语
|
|
245
|
-
["de_de", "de"], // 德语
|
|
246
|
-
// 西班牙语
|
|
247
|
-
["es_es", "es"], // 西班牙语
|
|
248
|
-
["es_mx", "es"], // 墨西哥西班牙语
|
|
249
|
-
// 俄语
|
|
250
|
-
["ru_ru", "ru"], // 俄语
|
|
251
|
-
// 葡萄牙语
|
|
252
|
-
["pt_pt", "pt"], // 葡萄牙语
|
|
253
|
-
["pt_br", "pt"], // 巴西葡萄牙语
|
|
254
|
-
// 意大利语
|
|
255
|
-
["it_it", "it"], // 意大利语
|
|
256
|
-
// 阿拉伯语
|
|
257
|
-
["ar_sa", "ar"], // 阿拉伯语
|
|
258
|
-
// 荷兰语
|
|
259
|
-
["nl_nl", "nl"], // 荷兰语
|
|
260
|
-
// 瑞典语
|
|
261
|
-
["sv_se", "sv"], // 瑞典语
|
|
262
|
-
// 丹麦语
|
|
263
|
-
["da_dk", "da"], // 丹麦语
|
|
264
|
-
// 挪威语
|
|
265
|
-
["no_no", "no"], // 挪威语
|
|
266
|
-
["nb_no", "no"], // 挪威语(博克马尔语)
|
|
267
|
-
// 芬兰语
|
|
268
|
-
["fi_fi", "fi"], // 芬兰语
|
|
269
|
-
// 波兰语
|
|
270
|
-
["pl_pl", "pl"], // 波兰语
|
|
271
|
-
// 匈牙利语
|
|
272
|
-
["hu_hu", "hu"], // 匈牙利语
|
|
273
|
-
// 捷克语
|
|
274
|
-
["cs_cz", "cs"], // 捷克语
|
|
275
|
-
// 斯洛伐克语
|
|
276
|
-
["sk_sk", "sk"], // 斯洛伐克语
|
|
277
|
-
// 罗马尼亚语
|
|
278
|
-
["ro_ro", "ro"], // 罗马尼亚语
|
|
279
|
-
// 希腊语
|
|
280
|
-
["el_gr", "el"], // 希腊语
|
|
281
|
-
// 土耳其语
|
|
282
|
-
["tr_tr", "tr"], // 土耳其语
|
|
283
|
-
// 希伯来语
|
|
284
|
-
["he_il", "he"], // 希伯来语
|
|
285
|
-
// 印地语
|
|
286
|
-
["hi_in", "hi"], // 印地语
|
|
287
|
-
// 泰语
|
|
288
|
-
["th_th", "th"], // 泰语
|
|
289
|
-
// 越南语
|
|
290
|
-
["vi_vn", "vi"], // 越南语
|
|
291
|
-
// 印尼语
|
|
292
|
-
["id_id", "id"], // 印尼语
|
|
293
|
-
// 马来语
|
|
294
|
-
["ms_my", "ms"], // 马来语
|
|
295
|
-
// 菲律宾语
|
|
296
|
-
["tl_ph", "tl"], // 菲律宾语
|
|
297
|
-
// 乌克兰语
|
|
298
|
-
["uk_ua", "uk"], // 乌克兰语
|
|
299
|
-
// 保加利亚语
|
|
300
|
-
["bg_bg", "bg"], // 保加利亚语
|
|
301
|
-
// 克罗地亚语
|
|
302
|
-
["hr_hr", "hr"], // 克罗地亚语
|
|
303
|
-
// 塞尔维亚语
|
|
304
|
-
["sr_rs", "sr"], // 塞尔维亚语
|
|
305
|
-
// 斯洛文尼亚语
|
|
306
|
-
["sl_si", "sl"], // 斯洛文尼亚语
|
|
307
|
-
// 爱沙尼亚语
|
|
308
|
-
["et_ee", "et"], // 爱沙尼亚语
|
|
309
|
-
// 拉脱维亚语
|
|
310
|
-
["lv_lv", "lv"], // 拉脱维亚语
|
|
311
|
-
// 立陶宛语
|
|
312
|
-
["lt_lt", "lt"], // 立陶宛语
|
|
313
|
-
// 波斯语
|
|
314
|
-
["fa_ir", "fa"], // 波斯语
|
|
315
|
-
// 乌尔都语
|
|
316
|
-
["ur_pk", "ur"], // 乌尔都语
|
|
317
|
-
// 孟加拉语
|
|
318
|
-
["bn_in", "bn"], // 孟加拉语
|
|
319
|
-
// 泰米尔语
|
|
320
|
-
["ta_in", "ta"], // 泰米尔语
|
|
321
|
-
// 泰卢固语
|
|
322
|
-
["te_in", "te"], // 泰卢固语
|
|
323
|
-
// 卡纳达语
|
|
324
|
-
["kn_in", "kn"], // 卡纳达语
|
|
325
|
-
// 马拉雅拉姆语
|
|
326
|
-
["ml_in", "ml"], // 马拉雅拉姆语
|
|
327
|
-
// 古吉拉特语
|
|
328
|
-
["gu_in", "gu"], // 古吉拉特语
|
|
329
|
-
// 马拉地语
|
|
330
|
-
["mr_in", "mr"], // 马拉地语
|
|
331
|
-
// 奥里亚语
|
|
332
|
-
["or_in", "or"], // 奥里亚语
|
|
333
|
-
// 阿萨姆语
|
|
334
|
-
["as_in", "as"] // 阿萨姆语
|
|
335
|
-
]);
|
|
336
227
|
async translateCsvRows(rows, fromLang, toLangs) {
|
|
337
228
|
if (rows.length === 0) {
|
|
338
229
|
console.log("CSV文件为空");
|
|
@@ -344,11 +235,11 @@ class CsvAutoTranslator {
|
|
|
344
235
|
console.error(`未找到 ${fromLang} 列`);
|
|
345
236
|
return TranslateCSVResult.Empty;
|
|
346
237
|
}
|
|
347
|
-
if (!
|
|
238
|
+
if (!LanguageMap_1.languageMap.has(fromLang)) {
|
|
348
239
|
console.error(`未找到 ${fromLang} 的目标语言`);
|
|
349
240
|
return TranslateCSVResult.Empty;
|
|
350
241
|
}
|
|
351
|
-
let fromLang2 =
|
|
242
|
+
let fromLang2 = LanguageMap_1.languageMap.get(fromLang);
|
|
352
243
|
if (fromLang2 == null) {
|
|
353
244
|
console.error(`未找到 ${fromLang} 的目标语言`);
|
|
354
245
|
return TranslateCSVResult.Empty;
|
|
@@ -366,7 +257,7 @@ class CsvAutoTranslator {
|
|
|
366
257
|
if (toLangs != undefined && !toLangs.includes(lang)) {
|
|
367
258
|
continue;
|
|
368
259
|
}
|
|
369
|
-
if (!(lang != fromLang &&
|
|
260
|
+
if (!(lang != fromLang && LanguageMap_1.languageMap.has(lang))) {
|
|
370
261
|
continue;
|
|
371
262
|
}
|
|
372
263
|
const needTranslateIndices = [];
|
|
@@ -394,7 +285,7 @@ class CsvAutoTranslator {
|
|
|
394
285
|
return TranslateCSVResult.Empty;
|
|
395
286
|
}
|
|
396
287
|
console.log(`开始翻译 ${needTranslateTexts.length} 条内容...`);
|
|
397
|
-
const toLang =
|
|
288
|
+
const toLang = LanguageMap_1.languageMap.get(lang);
|
|
398
289
|
if (toLang == null) {
|
|
399
290
|
console.error(`未找到 ${lang} 的目标语言`);
|
|
400
291
|
continue;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.languageMap = void 0;
|
|
4
|
+
exports.languageMap = new Map([
|
|
5
|
+
// 中文相关
|
|
6
|
+
["zh_cn", "zh"], // 简体中文
|
|
7
|
+
["zh_hk", "cht"], // 香港繁体中文
|
|
8
|
+
["zh_tw", "cht"], // 台湾繁体中文
|
|
9
|
+
// 英语相关
|
|
10
|
+
["en_us", "en"], // 美式英语
|
|
11
|
+
["en_gb", "en"], // 英式英语
|
|
12
|
+
["en_au", "en"], // 澳大利亚英语
|
|
13
|
+
["en_ca", "en"], // 加拿大英语
|
|
14
|
+
["en_nz", "en"], // 新西兰英语
|
|
15
|
+
// 日语
|
|
16
|
+
["ja_jp", "ja"], // 日语
|
|
17
|
+
// 韩语
|
|
18
|
+
["ko_kr", "ko"], // 韩语
|
|
19
|
+
// 法语
|
|
20
|
+
["fr_fr", "fr"], // 法语
|
|
21
|
+
["fr_ca", "fr"], // 加拿大法语
|
|
22
|
+
// 德语
|
|
23
|
+
["de_de", "de"], // 德语
|
|
24
|
+
// 西班牙语
|
|
25
|
+
["es_es", "es"], // 西班牙语
|
|
26
|
+
["es_mx", "es"], // 墨西哥西班牙语
|
|
27
|
+
// 俄语
|
|
28
|
+
["ru_ru", "ru"], // 俄语
|
|
29
|
+
// 葡萄牙语
|
|
30
|
+
["pt_pt", "pt"], // 葡萄牙语
|
|
31
|
+
["pt_br", "pt"], // 巴西葡萄牙语
|
|
32
|
+
// 意大利语
|
|
33
|
+
["it_it", "it"], // 意大利语
|
|
34
|
+
// 阿拉伯语
|
|
35
|
+
["ar_sa", "ar"], // 阿拉伯语
|
|
36
|
+
// 荷兰语
|
|
37
|
+
["nl_nl", "nl"], // 荷兰语
|
|
38
|
+
// 瑞典语
|
|
39
|
+
["sv_se", "sv"], // 瑞典语
|
|
40
|
+
// 丹麦语
|
|
41
|
+
["da_dk", "da"], // 丹麦语
|
|
42
|
+
// 挪威语
|
|
43
|
+
["no_no", "no"], // 挪威语
|
|
44
|
+
["nb_no", "no"], // 挪威语(博克马尔语)
|
|
45
|
+
// 芬兰语
|
|
46
|
+
["fi_fi", "fi"], // 芬兰语
|
|
47
|
+
// 波兰语
|
|
48
|
+
["pl_pl", "pl"], // 波兰语
|
|
49
|
+
// 匈牙利语
|
|
50
|
+
["hu_hu", "hu"], // 匈牙利语
|
|
51
|
+
// 捷克语
|
|
52
|
+
["cs_cz", "cs"], // 捷克语
|
|
53
|
+
// 斯洛伐克语
|
|
54
|
+
["sk_sk", "sk"], // 斯洛伐克语
|
|
55
|
+
// 罗马尼亚语
|
|
56
|
+
["ro_ro", "ro"], // 罗马尼亚语
|
|
57
|
+
// 希腊语
|
|
58
|
+
["el_gr", "el"], // 希腊语
|
|
59
|
+
// 土耳其语
|
|
60
|
+
["tr_tr", "tr"], // 土耳其语
|
|
61
|
+
// 希伯来语
|
|
62
|
+
["he_il", "he"], // 希伯来语
|
|
63
|
+
// 印地语
|
|
64
|
+
["hi_in", "hi"], // 印地语
|
|
65
|
+
// 泰语
|
|
66
|
+
["th_th", "th"], // 泰语
|
|
67
|
+
// 越南语
|
|
68
|
+
["vi_vn", "vi"], // 越南语
|
|
69
|
+
// 印尼语
|
|
70
|
+
["id_id", "id"], // 印尼语
|
|
71
|
+
// 马来语
|
|
72
|
+
["ms_my", "ms"], // 马来语
|
|
73
|
+
// 菲律宾语
|
|
74
|
+
["tl_ph", "tl"], // 菲律宾语
|
|
75
|
+
// 乌克兰语
|
|
76
|
+
["uk_ua", "uk"], // 乌克兰语
|
|
77
|
+
// 保加利亚语
|
|
78
|
+
["bg_bg", "bg"], // 保加利亚语
|
|
79
|
+
// 克罗地亚语
|
|
80
|
+
["hr_hr", "hr"], // 克罗地亚语
|
|
81
|
+
// 塞尔维亚语
|
|
82
|
+
["sr_rs", "sr"], // 塞尔维亚语
|
|
83
|
+
// 斯洛文尼亚语
|
|
84
|
+
["sl_si", "sl"], // 斯洛文尼亚语
|
|
85
|
+
// 爱沙尼亚语
|
|
86
|
+
["et_ee", "et"], // 爱沙尼亚语
|
|
87
|
+
// 拉脱维亚语
|
|
88
|
+
["lv_lv", "lv"], // 拉脱维亚语
|
|
89
|
+
// 立陶宛语
|
|
90
|
+
["lt_lt", "lt"], // 立陶宛语
|
|
91
|
+
// 波斯语
|
|
92
|
+
["fa_ir", "fa"], // 波斯语
|
|
93
|
+
// 乌尔都语
|
|
94
|
+
["ur_pk", "ur"], // 乌尔都语
|
|
95
|
+
// 孟加拉语
|
|
96
|
+
["bn_in", "bn"], // 孟加拉语
|
|
97
|
+
// 泰米尔语
|
|
98
|
+
["ta_in", "ta"], // 泰米尔语
|
|
99
|
+
// 泰卢固语
|
|
100
|
+
["te_in", "te"], // 泰卢固语
|
|
101
|
+
// 卡纳达语
|
|
102
|
+
["kn_in", "kn"], // 卡纳达语
|
|
103
|
+
// 马拉雅拉姆语
|
|
104
|
+
["ml_in", "ml"], // 马拉雅拉姆语
|
|
105
|
+
// 古吉拉特语
|
|
106
|
+
["gu_in", "gu"], // 古吉拉特语
|
|
107
|
+
// 马拉地语
|
|
108
|
+
["mr_in", "mr"], // 马拉地语
|
|
109
|
+
// 奥里亚语
|
|
110
|
+
["or_in", "or"], // 奥里亚语
|
|
111
|
+
// 阿萨姆语
|
|
112
|
+
["as_in", "as"] // 阿萨姆语
|
|
113
|
+
]);
|