vdo.ninja/.github/ci-generateTranslations.js
2021-03-28 10:14:59 -04:00

169 lines
4.7 KiB
JavaScript

var https = require("https");
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const axios = require("axios").default;
const fs = require("fs");
const dom = new JSDOM(``, {
url: "https://obs.ninja",
contentType: "text/html",
includeNodeLocations: true,
storageQuota: 10000000,
pretendToBeVisual: true,
});
global.document = new JSDOM(``, {
url: "https://obs.ninja",
contentType: "text/html",
includeNodeLocations: true,
storageQuota: 10000000,
pretendToBeVisual: false,
}).window.document;
function downloadTranslation(filename, trans = {}) {
// downloads the current translation to a file
console.log("Downloading translation: " + filename);
const textDoc = JSON.stringify(trans, null, 2);
fs.writeFile(`translations/${filename}.json`, textDoc, (err) => {
if (err) {
return console.log(err);
}
});
return trans;
}
async function updateTranslation(filename) {
// updates the website with a specific translation
let data = await axios({
method: "get",
url: `https://raw.githubusercontent.com/steveseguin/obsninja/master/translations/${filename}.json?${(
Math.random() * 100
).toString()}`,
})
.then((response) => {
return response.data;
})
.catch((error) => {
console.log(error);
});
const oldTransItems = data["innerHTML"];
// const allItems1 = document.querySelectorAll('[data-translate]');
allItems.forEach((ele) => {
const key = ele.dataset.translate; //.replace(/[\W]+/g, "-").toLowerCase();
if (key in oldTransItems) {
ele.innerHTML = oldTransItems[key];
}
});
const oldTransTitles = data["titles"];
//const allTitles1 = document.querySelectorAll('[title]');
allTitles.forEach((ele) => {
const key = ele.dataset.key;
//const key = ele.title.replace(/[\W]+/g, "-").toLowerCase();
if (key in oldTransTitles) {
ele.title = oldTransTitles[key];
}
});
const oldTransPlaceholders = data.placeholders;
//const allPlaceholders1 = document.querySelectorAll('[placeholder]');
allPlaceholders.forEach((ele) => {
const key = ele.dataset.key;
//const key = ele.placeholder.replace(/[\W]+/g, "-").toLowerCase();
if (key in oldTransPlaceholders) {
ele.placeholder = oldTransPlaceholders[key];
}
});
return [true, data];
}
const updateList = [
"cs",
"de",
"en",
"es",
"fr",
"it",
"ja",
"nl",
"pig",
"pt",
"ru",
"tr",
"blank",
]; // list of languages to update. Update this if you add a new language.
const allItems = document.querySelectorAll("[data-translate]");
const defaultTrans = {};
allItems.forEach((ele) => {
const key = ele.dataset.translate; //.replace(/[\W]+/g, "-").toLowerCase();
defaultTrans[key] = ele.innerHTML;
});
const defaultTransTitles = {};
const allTitles = document.querySelectorAll("[title]");
allTitles.forEach((ele) => {
const key = ele.title.replace(/[\W]+/g, "-").toLowerCase();
ele.dataset.key = key;
defaultTransTitles[key] = ele.title;
});
const defaultTransPlaceholders = {};
const allPlaceholders = document.querySelectorAll("[placeholder]");
allPlaceholders.forEach((ele) => {
const key = ele.placeholder.replace(/[\W]+/g, "-").toLowerCase();
ele.dataset.key = key;
defaultTransPlaceholders[key] = ele.placeholder;
});
const combinedTrans = {};
combinedTrans.titles = defaultTransTitles;
combinedTrans.innerHTML = defaultTrans;
combinedTrans.placeholders = defaultTransPlaceholders;
var counter = 0;
for (var i = 0; i < updateList.length; i++) {
const lang = updateList[i];
var translation = updateTranslation(lang); // we don't need to worry about DATA.
updateTranslation(lang)
.then((translation) => {
const newTrans = translation[1]["innerHTML"];
//const allItems = document.querySelectorAll('[data-translate]');
allItems.forEach((ele) => {
const key = ele.dataset.translate; //.replace(/[\W]+/g, "-").toLowerCase();
newTrans[key] = ele.innerHTML;
});
const newTransTitles = translation[1]["titles"];
//const allTitles = document.querySelectorAll('[title]');
allTitles.forEach((ele) => {
const key = ele.dataset.key;
newTransTitles[key] = ele.title;
});
const newPlaceholders = translation[1]["placeholders"];
// const allPlaceholders = document.querySelectorAll('[placeholder]');
allPlaceholders.forEach((ele) => {
const key = ele.dataset.key;
newPlaceholders[key] = ele.placeholder;
});
// //// DOWNLOAD UPDATED TRANSLATION
const outputTrans = {};
outputTrans["titles"] = newTransTitles;
outputTrans["innerHTML"] = newTrans;
outputTrans["placeholders"] = newPlaceholders;
downloadTranslation(lang, outputTrans);
})
.catch((error) => {
console.log(error);
});
}