vdo.ninja/translations/translate.js
Steve Seguin c1e9eb6dae
debug version of 14.0-alpha
first 14.0 alpha build

not done yet.  includes labels, broadcast flag fixes, updated translation file stuff, etc.

UNTESTED!!!!!
2020-12-06 13:38:55 -05:00

139 lines
4.6 KiB
JavaScript

// Copy and paste this code into OBS.Ninja's developer's console to generate new Translation files
function downloadTranslation(filename, trans={}){ // downloads the current translation to a file
var textDoc = JSON.stringify(trans, null, 2);
var hiddenElement = document.createElement('a');
hiddenElement.href = 'data:text/html,' + encodeURIComponent(textDoc);
hiddenElement.target = '_blank';
hiddenElement.download = filename+".json";
hiddenElement.click();
return trans;
}
function updateTranslation(filename){ // updates the website with a specific translation
var request = new XMLHttpRequest();
request.open('GET', "./translations/"+filename+'.json?'+(Math.random()*100).toString(), false); // `false` makes the request synchronous
request.send(null);
if (request.status !== 200) {
return false, {};
}
try{
var data = JSON.parse(request.responseText);
} catch(e){
console.log(request.responseText);
console.error(e);
return false, {};
}
var oldTransItems = data.innerHTML;
var allItems1 = document.querySelectorAll('[data-translate]');
allItems1.forEach(function(ele){
if (ele.dataset.translate in oldTransItems){
ele.innerHTML = oldTransItems[ele.dataset.translate];
}
});
var oldTransTitles = data.titles;
var allTitles1 = document.querySelectorAll('[title]');
allTitles1.forEach(function(ele){
var key = ele.title.replace(/[\W]+/g,"-").toLowerCase();
if (key in oldTransTitles){
ele.title = oldTransTitles[key];
}
});
var oldTransPlaceholders = data.placeholders;
var allPlaceholders1 = document.querySelectorAll('[placeholder]');
allPlaceholders1.forEach(function(ele){
var key = ele.placeholder.replace(/[\W]+/g,"-").toLowerCase();
if (key in oldTransPlaceholders){
ele.placeholder = oldTransPlaceholders[key];
}
});
return [true, data];
}
var 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.
var allItems = document.querySelectorAll('[data-translate]');
var defaultTrans = {};
allItems.forEach(function(ele){
var key = ele.dataset.translate.replace(/[\W]+/g,"-").toLowerCase();
defaultTrans[key] = ele.innerHTML;
});
var defaultTransTitles = {};
var allTitles = document.querySelectorAll('[title]');
allTitles.forEach(function(ele){
defaultTransTitles[ele.title] = ele.title;
});
var defaultTransPlaceholders = {};
var allPlaceholders = document.querySelectorAll('[placeholder]');
allPlaceholders.forEach(function(ele){
defaultTransPlaceholders[ele.placeholder] = ele.placeholder;
});
var combinedTrans = {}
combinedTrans.titles = defaultTransTitles;
combinedTrans.innerHTML = defaultTrans;
combinedTrans.placeholders = defaultTransPlaceholders;
var counter=0;
for (var i in updateList){
var lang = updateList[i];
setTimeout(function(ln){
var suceess = updateTranslation(ln); // we don't need to worry about DATA.
if (suceess[0]==true){
var newTrans = suceess[1].innerHTML;
var allItems = document.querySelectorAll('[data-translate]');
allItems.forEach(function(ele){
var key = ele.dataset.translate;
newTrans[key] = ele.innerHTML;
});
var newTransTitles = suceess[1].titles;
var allTitles = document.querySelectorAll('[title]');
allTitles.forEach(function(ele){
var key = ele.title.replace(/[\W]+/g,"-").toLowerCase();
newTransTitles[key] = ele.title;
});
var newPlaceholders = suceess[1].placeholders;
var allPlaceholders = document.querySelectorAll('[placeholder]');
allPlaceholders.forEach(function(ele){
var key = ele.placeholder.replace(/[\W]+/g,"-").toLowerCase();
newPlaceholders[key] = ele.placeholder;
});
////// DOWNLOAD UPDATED TRANSLATION
var outputTrans = {}
outputTrans.titles = newTransTitles;
outputTrans.innerHTML = newTrans;
outputTrans.placeholders = newPlaceholders;
downloadTranslation(ln, outputTrans);
}
////////// RESET THING BACK
allItems.forEach(function(ele){
if (ele.dataset.translate in defaultTrans){
ele.innerHTML = defaultTrans[ele.dataset.translate];
}
});
allTitles.forEach(function(ele){
var key = ele.title.replace(/[\W]+/g,"-").toLowerCase();
if (key in defaultTransTitles){
ele.title = defaultTransTitles[key];
}
});
allPlaceholders.forEach(function(ele){
var key = ele.placeholder.replace(/[\W]+/g,"-").toLowerCase();
if (key in defaultTransPlaceholders){
ele.placeholder = defaultTransPlaceholders[key];
}
});
},counter,lang);
counter+=300;
}