-
Notifications
You must be signed in to change notification settings - Fork 63
/
Copy pathtranslations.js
65 lines (57 loc) · 2.21 KB
/
translations.js
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
const { readFileSync, readdirSync, writeFileSync } = require("fs");
const { execSync } = require("child_process");
const { resolve, join } = require("path");
const file = readFileSync("./assets/Script/Languages/en.ts", {
encoding: "utf8",
})
.replace("export const EN =", "")
.replace("};", "}");
const en = eval(`(${file})`);
function getAllFiles(dir) {
const paths = readdirSync(dir, { withFileTypes: true });
const files = paths.map((dirent) => {
const res = resolve(dir, dirent.name);
return dirent.isDirectory() ? getAllFiles(res) : res;
});
return files.flat();
}
const sourceFiles = getAllFiles(join(__dirname, "assets", "Script"))
.filter((f) => f.endsWith(".ts") && !f.endsWith(".d.ts") && !f.includes("/Languages/"))
.map((f) => readFileSync(f, { encoding: "utf8" }))
.join()
.replace(/\s+/g, "");
function isWhitelisted(key) {
return (
key.startsWith("InputStrategy") ||
key.startsWith("ConstructionStatus") ||
key.startsWith("MarketNewsFilter") ||
key.startsWith("PanelPosition")
);
}
Object.keys(en).forEach((key) => {
if (!sourceFiles.includes(`t("${key}`) && !sourceFiles.includes(`.${key}`) && !isWhitelisted(key)) {
console.log(`Translation not used: ${key}`);
}
});
readdirSync("./assets/Script/Languages/").forEach((fileName) => {
if (!fileName.endsWith(".ts") || fileName.startsWith("en.ts")) {
return;
}
const variableName = fileName.replace(".ts", "").replace("-", "_").toUpperCase();
const filePath = `./assets/Script/Languages/${fileName}`;
const file = readFileSync(filePath, { encoding: "utf8" })
.replace(`export const ${variableName} =`, "")
.replace("};", "}");
const language = eval(`(${file})`);
const result = {};
Object.keys(en).forEach((k) => {
if (language[k]) {
result[k] = language[k];
} else {
result[k] = en[k];
}
});
writeFileSync(filePath, `export const ${variableName} = ${JSON.stringify(result, null, 2)};`);
});
execSync("npx prettier --write ./assets/Script/Languages/*.ts --config .prettierrc.json", { encoding: "utf8" });
console.log("Translation has successfully updated!");