-
-
Notifications
You must be signed in to change notification settings - Fork 105
/
Copy pathprocess.js
119 lines (106 loc) · 3.56 KB
/
process.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
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
function downloadTranslation(filename, trans = {}) {
const textDoc = JSON.stringify(trans, null, 2);
const hiddenElement = document.createElement('a');
hiddenElement.href = `data:text/html,${encodeURIComponent(textDoc)}`;
hiddenElement.target = '_blank';
hiddenElement.download = `${filename}.json`;
hiddenElement.click();
return trans;
}
async function updateTranslation(filename) {
try {
const response = await fetch(`./translations/${filename}.json?${Math.random() * 100}`);
if (!response.ok) return [false, {}];
const data = await response.json();
return [true, data];
} catch (e) {
console.error(e);
return [false, {}];
}
}
const updateList = [
"blank", // must be first
"en-us",
"de",
"es",
"fr",
"it",
"ja",
"eu",
"nl",
"pig",
"pt",
"pt-br",
"ru",
"tr",
"uk",
"ar"
];
// Initialize DOM selectors and defaults
const allItems = document.querySelectorAll('[data-translate]');
const allTitles = document.querySelectorAll('[title]');
const allPlaceholders = document.querySelectorAll('[placeholder]');
// Initialize default translations
const defaultTrans = {};
allItems.forEach((ele) => {
const key = ele.dataset.translate;
defaultTrans[key] = ele.innerHTML;
});
const defaultTransTitles = {};
allTitles.forEach((ele) => {
const key = ele.title.replace(/[\W]+/g, "-").toLowerCase();
ele.dataset.key = key;
defaultTransTitles[key] = ele.title;
});
const defaultTransPlaceholders = {};
allPlaceholders.forEach((ele) => {
try {
const key = ele.placeholder.replace(/[\W]+/g, "-").toLowerCase();
ele.dataset.key = key;
defaultTransPlaceholders[key] = ele.placeholder;
} catch(e){
const key = ele.getAttribute("placeholder").replace(/[\W]+/g, "-").toLowerCase();
ele.dataset.key = key;
defaultTransPlaceholders[key] = ele.getAttribute("placeholder");
}
});
let counter = 0;
for (const lang of updateList) {
setTimeout(async () => {
console.log(`Processing ${lang}...`);
const [success, data] = await updateTranslation(lang);
if (success) {
// Create output preserving ALL existing translations
const outputTrans = {
innerHTML: {...data.innerHTML},
titles: {...data.titles},
placeholders: {...data.placeholders}
};
// Only add NEW keys that don't exist in the translation file
allItems.forEach(ele => {
const key = ele.dataset.translate;
if (!(key in outputTrans.innerHTML)) {
outputTrans.innerHTML[key] = defaultTrans[key];
}
});
allTitles.forEach(ele => {
const key = ele.dataset.key;
if (!(key in outputTrans.titles)) {
outputTrans.titles[key] = defaultTransTitles[key];
}
});
allPlaceholders.forEach(ele => {
const key = ele.dataset.key;
if (!(key in outputTrans.placeholders)) {
outputTrans.placeholders[key] = defaultTransPlaceholders[key];
}
});
// Preserve miscellaneous section
if (data.miscellaneous) {
outputTrans.miscellaneous = {...data.miscellaneous};
}
downloadTranslation(lang, outputTrans);
}
}, counter);
counter += 800;
}