Update UI

Refactor and added new functioms
This commit is contained in:
AlphaX-Projects
2024-05-08 13:16:23 +02:00
parent 940f9f82f8
commit fa29ff4c43
357 changed files with 82113 additions and 83085 deletions

View File

@@ -4,8 +4,4 @@ const isMac = os.platform() === "darwin"
const isWindows = os.platform() === "win32"
const isLinux = os.platform() === "linux"
module.exports = {
isMac,
isWindows,
isLinux,
}
module.exports = { isMac, isWindows, isLinux }

View File

@@ -1,165 +1,176 @@
const osLocale = require("os-locale");
const fs = require("fs");
const path = require("path");
const osLocale = require("os-locale")
const fs = require("fs")
const path = require("path")
let cache = {
defaultLocale: "en",
availableLocales: [],
canonicalLocales: [],
locales: []
};
let cache = { defaultLocale: "en", availableLocales: [], canonicalLocales: [], locales: [] }
let i18n = {};
let i18n = {}
i18n.__ = function(name) {
i18n.getLocale();
i18n.__ = function (name) {
i18n.getLocale()
let string = i18n.getLocaleData(cache.locale)[name] || i18n.getLocaleData(cache.defaultLocale)[name];
if (!string) {
let underscoreIndex = cache.locale.indexOf("-");
if (underscoreIndex !== -1) {
let localeBaseCode = cache.locale.substring(0, underscoreIndex);
if (i18n.localeExists(localeBaseCode)) {
string = i18n.getLocaleData(localeBaseCode)[name];
}
}
}
let string = i18n.getLocaleData(cache.locale)[name] || i18n.getLocaleData(cache.defaultLocale)[name]
if (string) {
if (arguments.length === 1) {
return string;
} else {
for (let i = 0, l = arguments.length - 1; i < l; i++) {
string = string.replace("$" + i, arguments[1 + i]);
}
return string;
}
} else {
console.warn(`String "${name}" does not exist.`)
}
};
if (!string) {
let underscoreIndex = cache.locale.indexOf("-")
if (underscoreIndex !== -1) {
let localeBaseCode = cache.locale.substring(0, underscoreIndex)
if (i18n.localeExists(localeBaseCode)) {
string = i18n.getLocaleData(localeBaseCode)[name]
}
}
}
i18n.localeExists = function(locale) {
return i18n.getAvailableLocales().indexOf(locale) !== -1;
};
if (string) {
if (arguments.length === 1) {
return string
} else {
for (let i = 0, l = arguments.length - 1; i < l; i++) {
string = string.replace("$" + i, arguments[1 + i])
}
i18n.getLocaleData = function(locale) {
if (!cache.locales[locale]) {
cache.locales[locale] = i18n.readLocaleFile(locale);
}
return cache.locales[locale];
};
return string
}
} else {
console.warn(`String "${name}" does not exist.`)
}
}
i18n.readLocaleFile = function(locale) {
let localeData = JSON.parse(fs.readFileSync(
path.join(__dirname, "..", "locales", locale + ".json"),
{ encoding: "utf8" }
));
if (localeData.__redirect__) {
let redirectedLocaleData = JSON.parse(fs.readFileSync(
path.join(__dirname, "..", "locales", localeData.__redirect__ + ".json"),
{ encoding: "utf8" }
));
redirectedLocaleData.__is_redirected__ = true;
redirectedLocaleData.__canonical__ = localeData.__redirect__;
return redirectedLocaleData;
} else {
return localeData;
}
};
i18n.localeExists = function (locale) {
return i18n.getAvailableLocales().indexOf(locale) !== -1
}
i18n.doDOMReplacement = function() {
let elems0 = document.getElementsByClassName("i18n");
for (let i = 0, l = elems0.length; i < l; i++) {
elems0[i].innerHTML = i18n.__(elems0[i].dataset.i18nName);
}
i18n.getLocaleData = function (locale) {
if (!cache.locales[locale]) {
cache.locales[locale] = i18n.readLocaleFile(locale)
}
let elems1 = document.getElementsByClassName("i18n-attr");
for (let i = 0, l = elems1.length; i < l; i++) {
let mappings = elems1[i].dataset.i18nMap.split(";");
for (let j = 0, m = mappings.length; j < m; j++) {
let keyVal = mappings[j].split(":");
elems1[i].setAttribute(keyVal[0], i18n.__(keyVal[1]));
}
}
};
return cache.locales[locale]
}
i18n.setLocale = function(locale) {
if (i18n.localeExists(locale)) {
cache.locale = locale;
return true;
}
return false;
};
i18n.readLocaleFile = function (locale) {
let localeData = JSON.parse(fs.readFileSync(
path.join(__dirname, "..", "locales", locale + ".json"),
{ encoding: "utf8" }
))
i18n.getLocale = function() {
if (!cache.locale) {
let systemLocale = osLocale.sync();
let availableLocales = i18n.getAvailableLocales();
if (availableLocales.indexOf(systemLocale) !== -1) {
cache.locale = systemLocale;
} else if (availableLocales.indexOf(systemLocale.split("-")[0]) !== -1) {
cache.locale = systemLocale.split("-")[0];
} else {
var looseLocaleMatch;
for (let i = 0, l = availableLocales.length; i < l; i++) {
if (availableLocales[i].split("-")[0] === systemLocale.split("-")[0]) {
looseLocaleMatch = availableLocales[i];
break;
}
}
if (looseLocaleMatch) {
cache.locale = looseLocaleMatch;
} else {
cache.locale = cache.defaultLocale;
}
}
}
return cache.locale;
};
if (localeData.__redirect__) {
let redirectedLocaleData = JSON.parse(fs.readFileSync(
path.join(__dirname, "..", "locales", localeData.__redirect__ + ".json"),
{ encoding: "utf8" }
))
i18n.getCanonicalLocale = function() {
i18n.getLocale();
redirectedLocaleData.__is_redirected__ = true
redirectedLocaleData.__canonical__ = localeData.__redirect__
return redirectedLocaleData
} else {
return localeData
}
}
if (!cache.locales[cache.locale]) {
cache.locales[cache.locale] = i18n.readLocaleFile(cache.locale);
}
if (cache.locales[cache.locale].__canonical__) {
return cache.locales[cache.locale].__canonical__;
} else {
return cache.locale;
}
};
i18n.doDOMReplacement = function () {
let elems0 = document.getElementsByClassName("i18n")
i18n.getAvailableLocales = function(canonicalOnly) {
if (!cache.availableLocales.length) {
let filenames = fs.readdirSync(path.join(__dirname, "..", "locales"));
for (let i = 0, l = filenames.length; i < l; i++) {
cache.availableLocales.push(filenames[i].split(".")[0]);
}
}
if (canonicalOnly) {
return i18n.getCanonicalLocales();
} else {
return cache.availableLocales;
}
};
for (let i = 0, l = elems0.length; i < l; i++) {
elems0[i].innerHTML = i18n.__(elems0[i].dataset.i18nName)
}
i18n.getCanonicalLocales = function() {
i18n.getAvailableLocales();
let elems1 = document.getElementsByClassName("i18n-attr")
if (!cache.canonicalLocales.length) {
for (let i = 0, l = cache.availableLocales.length; i < l; i++) {
if (!i18n.readLocaleFile(cache.availableLocales[i]).hasOwnProperty("__is_redirected__")) {
cache.canonicalLocales.push(cache.availableLocales[i]);
}
}
}
return cache.canonicalLocales;
};
for (let i = 0, l = elems1.length; i < l; i++) {
let mappings = elems1[i].dataset.i18nMap.split(";")
for (let j = 0, m = mappings.length; j < m; j++) {
let keyVal = mappings[j].split(":")
elems1[i].setAttribute(keyVal[0], i18n.__(keyVal[1]))
}
}
}
i18n.getDefaultLocale = function() {
return cache.defaultLocale;
};
i18n.setLocale = function (locale) {
if (i18n.localeExists(locale)) {
cache.locale = locale
return true
}
module.exports = i18n;
return false
}
i18n.getLocale = function () {
if (!cache.locale) {
let systemLocale = osLocale.sync()
let availableLocales = i18n.getAvailableLocales()
if (availableLocales.indexOf(systemLocale) !== -1) {
cache.locale = systemLocale
} else if (availableLocales.indexOf(systemLocale.split("-")[0]) !== -1) {
cache.locale = systemLocale.split("-")[0]
} else {
var looseLocaleMatch
for (let i = 0, l = availableLocales.length; i < l; i++) {
if (availableLocales[i].split("-")[0] === systemLocale.split("-")[0]) {
looseLocaleMatch = availableLocales[i]
break
}
}
if (looseLocaleMatch) {
cache.locale = looseLocaleMatch
} else {
cache.locale = cache.defaultLocale
}
}
}
return cache.locale
}
i18n.getCanonicalLocale = function () {
i18n.getLocale()
if (!cache.locales[cache.locale]) {
cache.locales[cache.locale] = i18n.readLocaleFile(cache.locale)
}
if (cache.locales[cache.locale].__canonical__) {
return cache.locales[cache.locale].__canonical__
} else {
return cache.locale
}
}
i18n.getAvailableLocales = function (canonicalOnly) {
if (!cache.availableLocales.length) {
let filenames = fs.readdirSync(path.join(__dirname, "..", "locales"))
for (let i = 0, l = filenames.length; i < l; i++) {
cache.availableLocales.push(filenames[i].split(".")[0])
}
}
if (canonicalOnly) {
return i18n.getCanonicalLocales()
} else {
return cache.availableLocales
}
}
i18n.getCanonicalLocales = function () {
i18n.getAvailableLocales();
if (!cache.canonicalLocales.length) {
for (let i = 0, l = cache.availableLocales.length; i < l; i++) {
if (!i18n.readLocaleFile(cache.availableLocales[i]).hasOwnProperty("__is_redirected__")) {
cache.canonicalLocales.push(cache.availableLocales[i])
}
}
}
return cache.canonicalLocales
}
i18n.getDefaultLocale = function () {
return cache.defaultLocale
}
module.exports = i18n

View File

@@ -9,5 +9,5 @@ contextBridge.exposeInMainWorld('electronAPI', {
clearMyCache: () => ipcRenderer.send('clear-all-cache'),
clearCache() {
webFrame.clearCache()
},
}
})