-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathExtractTranslation.js
More file actions
100 lines (77 loc) · 2.79 KB
/
ExtractTranslation.js
File metadata and controls
100 lines (77 loc) · 2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
const fs = require("fs-extra");
const parser = require("xml2js").Parser();
const magaFolder = "C:/Program Files (x86)/Steam/steamapps/common/Total War Attila/data/Maga";
function toLua(data, filename) {
const stream = fs.createWriteStream(filename + ".lua");
stream.once("open", function() {
stream.write("local Data = {\n");
Object.keys(data).forEach( function(key) {
stream.write("[\"" + key + "\"] = \"" + data[key] + "\",\n");
})
stream.write("} --: map<string, string>\n\n");
stream.write("return Data;");
stream.end();
})
}
function extractRegionNameFromTranslated(campaign) {
const LineByLineReader = require("line-by-line");
const lr = new LineByLineReader(__dirname + "/xml/translated_texts.xml");
const campaignPrefix = {
"main_attila": "att",
"bel_attila": "bel",
"cha_attila": "cha"
}
const prefix = campaignPrefix[campaign];
const key = "<key>start_pos_settlements_onscreen_name_settlement:" + prefix;
// faction key => name
let obj = {
"en": {}, "fr": {}, "cz": {}, "de": {}, "es": {},
"it": {}, "pl": {}, "ru": {}, "tr": {}
}
let keyFind = false;
let counter = 0;
let language;
let english;
let translated;
let region;
function processLine(line) {
if (!keyFind) {
if (line.indexOf(key) == -1) return;
let str = line.replace(/\<(.+?)\>/g, "").replace(/\d/g, "");
region = str.replace("start_pos_settlements_onscreen_name_settlement:", "");
// fix for some bel region key (province_name:name)
region = region.split(":")[0];
keyFind = true;
return;
}
if (keyFind) {
counter++;
if (counter == 1) language = line.replace(/\<(.+?)\>/g, "");
if (counter == 2) english = line.replace(/\<(.+?)\>/g, "");
if (counter == 5) translated = line.replace(/\<(.+?)\>/g, "");
if (counter == 6) {
obj[language][region] = translated;
obj["en"][region] = english;
counter = 0;
keyFind = false;
}
}
}
lr.on("line", function(line) {
lr.pause();
processLine(line);
lr.resume();
})
lr.on("end", function() {
Object.keys(obj).forEach( function(lang) {
let upper = lang.toUpperCase();
let folder = magaFolder + "/Local/" + upper + "/" + campaign;
fs.ensureDirSync(folder);
let filePath = folder + "/RegionsName";
toLua(obj[lang], filePath);
})
})
}
// extractRegionNameFromTranslated("main_attila");
// extractRegionNameFromTranslated("bel_attila");
// extractRegionNameFromTranslated("cha_attila");