mirror of
https://github.com/NaitLee/Cat-Printer.git
synced 2025-05-17 07:40:21 -07:00
102 lines
3.3 KiB
JavaScript
102 lines
3.3 KiB
JavaScript
|
|
(function (root, factory) {
|
|
if (typeof define === 'function' && define.amd) {
|
|
define(['exports'], factory);
|
|
} else if (typeof exports !== 'undefined') {
|
|
factory(exports);
|
|
} else {
|
|
factory((root.i18N = {}));
|
|
}
|
|
}(this, function (exports) {
|
|
var _document = document;
|
|
|
|
if (window.NodeList && !NodeList.prototype.forEach) {
|
|
NodeList.prototype.forEach = Array.prototype.forEach;
|
|
}
|
|
|
|
var data = '', dataelem = _document.querySelector('#i18-N');
|
|
if (dataelem != null) data = dataelem.value; else return;
|
|
|
|
var lang = {}, langname = '', defaultlang = 'en_US', matchedtags = [];
|
|
|
|
matchedtags = data.match(/\[(.+)\]/ig);
|
|
matchedtags.forEach(function(tag) {
|
|
langname = tag.slice(1, -1);
|
|
lang[langname] = {};
|
|
data.split(tag+'\n')[1].split('\n\n[')[0].split('\n').map(function(value) { return value.split('='); }).forEach(function(array) {
|
|
lang[langname][array[0]] = array[1];
|
|
});
|
|
});
|
|
|
|
for (var i in lang['global']) {
|
|
for (var j in lang) {
|
|
lang[j][i] = lang['global'][i];
|
|
}
|
|
}
|
|
|
|
var parseattr = [];
|
|
|
|
function backup() {
|
|
lang['originalattr'] = [];
|
|
lang['originaltext'] = [];
|
|
_document.querySelectorAll('*').forEach(function(elem) {
|
|
parseattr.forEach(function(attr) {
|
|
var originaltext = elem[attr];
|
|
if (originaltext == undefined) return;
|
|
lang['originalattr'].push([elem, originaltext]);
|
|
});
|
|
elem.childNodes.forEach(function(node){
|
|
if (node.nodeType == Node.TEXT_NODE) {
|
|
var originaltext = node.nodeValue;
|
|
if (originaltext == undefined) return;
|
|
lang['originaltext'].push([node, originaltext]);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
backup();
|
|
|
|
function recover() {
|
|
for (var i in lang['originalattr']) {
|
|
lang['originalattr'][i][0].value = lang['originalattr'][i][1];
|
|
}
|
|
for (var i in lang['originaltext']) {
|
|
lang['originaltext'][i][0].nodeValue = lang['originaltext'][i][1];
|
|
}
|
|
}
|
|
|
|
function get(originaltext, language) {
|
|
language = language || userlang || defaultlang;
|
|
return lang[language][originaltext] || originaltext;
|
|
}
|
|
|
|
function force(language) {
|
|
recover(); userlang = language;
|
|
_document.querySelectorAll('*').forEach(function(elem) {
|
|
parseattr.forEach(function(attr) {
|
|
var originaltext = elem[attr];
|
|
if (originaltext == undefined) return;
|
|
var localizedtext = lang[language][originaltext];
|
|
if (localizedtext == undefined) return;
|
|
elem[attr] = localizedtext;
|
|
});
|
|
elem.childNodes.forEach(function(node){
|
|
if (node.nodeType == Node.TEXT_NODE) {
|
|
var originaltext = node.nodeValue;
|
|
var localizedtext = lang[language][originaltext];
|
|
if (localizedtext == undefined) return;
|
|
node.nodeValue = localizedtext;
|
|
}
|
|
});
|
|
});
|
|
}
|
|
exports.get = get;
|
|
exports.force = force;
|
|
exports.recover = recover;
|
|
|
|
var userlang = navigator.language;
|
|
if (lang[userlang] == undefined) return;
|
|
force(userlang);
|
|
}));
|