mirror of
https://github.com/eliasstepanik/vdo.ninja.git
synced 2026-01-11 13:48:38 +00:00
169 lines
4.7 KiB
JavaScript
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);
|
|
});
|
|
}
|