Skip to content

Commit 372dbc0

Browse files
committed
added lang system helped by notachul
1 parent 7696d98 commit 372dbc0

26 files changed

+1006
-530
lines changed

handlers/translation.js

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
const path = require('path');
2+
const fs = require('fs');
3+
4+
5+
6+
function loadTranslations(lang) {
7+
const filePath = path.join(__dirname, `../lang/${lang}/lang.json`);
8+
if (fs.existsSync(filePath)) {
9+
return JSON.parse(fs.readFileSync(filePath, 'utf8'));
10+
}
11+
return JSON.parse(fs.readFileSync(path.join(__dirname, '../lang/en/lang.json'), 'utf8'));
12+
}
13+
14+
function translationMiddleware(req, res, next) {
15+
req.lang = req.cookies && req.cookies.lang ? req.cookies.lang : 'en';
16+
req.translations = loadTranslations(req.lang);
17+
next();
18+
}
19+
20+
module.exports = translationMiddleware;

index.js

+23-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ const path = require('path');
3030
const chalk = require('chalk');
3131
const expressWs = require('express-ws')(app);
3232
const { db } = require('./handlers/db.js')
33+
const translationMiddleware = require('./handlers/translation');
34+
const cookieParser = require('cookie-parser')
3335

3436
const sqlite = require("better-sqlite3");
3537
const SqliteStore = require("better-sqlite3-session-store")(session);
@@ -48,6 +50,10 @@ const log = new CatLoggr();
4850
app.use(bodyParser.urlencoded({ extended: false }));
4951
app.use(bodyParser.json());
5052

53+
app.use(cookieParser())
54+
55+
app.use(translationMiddleware);
56+
5157
app.set('view engine', 'ejs');
5258
app.use(
5359
session({
@@ -70,6 +76,7 @@ app.use((req, res, next) => {
7076
next();
7177
});
7278

79+
7380
/* remove the comments for faster loading
7481
app.use((req, res, next) => {
7582
res.setHeader('Cache-Control', 'no-store');
@@ -88,6 +95,7 @@ app.use('/assets', (req, res, next) => {
8895
app.use(passport.initialize());
8996
app.use(passport.session());
9097

98+
9199
// init
92100
init();
93101

@@ -101,6 +109,20 @@ console.log(chalk.gray(ascii) + chalk.white(`version v${config.version}\n`));
101109
*/
102110
const routesDir = path.join(__dirname, 'routes');
103111

112+
113+
114+
app.get('/setLanguage', (req, res) => {
115+
const lang = req.query.lang;
116+
if (lang && (lang === 'en' || lang === 'de')) {
117+
res.cookie('lang', lang, { maxAge: 900000, httpOnly: true });
118+
req.user.lang = lang; // Update user language preference
119+
res.json({ success: true });
120+
} else {
121+
console.log('Invalid language');
122+
res.json({ success: false });
123+
}
124+
});
125+
104126
function loadRoutes(directory) {
105127
fs.readdirSync(directory).forEach(file => {
106128
const fullPath = path.join(directory, file);
@@ -140,4 +162,4 @@ app.listen(config.port, () => log.info(`skyport is listening on port ${config.po
140162

141163
app.get('*', async function(req, res){
142164
res.render('errors/404', { req, name: await db.get('name') || 'Skyport', logo: await db.get('logo') || false })
143-
});
165+
});

lang/de/lang.json

+175
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
{
2+
"manageInstance": "Instanz verwalten",
3+
"instanceViewDetailText": "Ansicht, Aktualisierung und Verwaltung einer Instanz im Skyport-Panel.",
4+
"fivezerozeroInstanceError": "500 SERVERFEHLER",
5+
"somethingWentWrongThere": "Hm... Da ist etwas schief gelaufen.",
6+
"returnedTextError": "Hier ist der zurückgegebene Fehler:",
7+
"informationAvailableError": "Keine Fehlerinformationen verfügbar",
8+
"updateAccount": "Konto aktualisieren",
9+
"username": "Benutzername",
10+
"email": "E-Mail",
11+
"currentPassword": "Aktuelles Passwort",
12+
"newPassword": "Neues Passwort",
13+
"updateUsername": "Benutzernamen aktualisieren",
14+
"update_password": "Passwort aktualisieren",
15+
"enabled2FA": "2FA aktivieren",
16+
"disable2FA": "2FA deaktivieren",
17+
"enable2FATitle": "Zwei-Faktor-Authentifizierung aktivieren",
18+
"enable2FADescription": "Sichern Sie Ihr Konto mit einer zusätzlichen Schutzebene.",
19+
"checking": "Überprüfen...",
20+
"loading": "Laden...",
21+
"search": "Suchen...",
22+
"correctPassword": "✅ Korrekt!",
23+
"incorrectPassword": "❌ Falsches Passwort",
24+
"usernameTaken": "❌ Vergeben",
25+
"usernameIsNotTaken": "✅ Nicht vergeben",
26+
"validadingpasswordError": "Fehler bei der Passwortvalidierung",
27+
"updatingUsernameError": "Fehler beim Aktualisieren des Benutzernamens. Bitte versuchen Sie es später erneut.",
28+
"usernameUpdatedSuccess": "Benutzername erfolgreich aktualisiert!",
29+
"currentPasswordHide": "********",
30+
"newPasswordHide": "********",
31+
"authCode": "Authentifizierungscode",
32+
"verifyCode": "Code verifizieren",
33+
"instances": "Instanzen",
34+
"viewInstances": "Die Instanzen anzeigen, auf die Sie Zugriff haben.",
35+
"manageInstanceText": "Ansicht, Aktualisierung und Verwaltung einer Instanz im Skyport-Panel.",
36+
"createNewInstance": "Neue Instanz erstellen",
37+
"instancesText": "Eine Liste aller auf dem Skyport-Panel bereitgestellten Instanzen.",
38+
"noInstances": "Keine Instanzen",
39+
"noInstancesText": "Es gibt keine Instanzen auf Ihrem Konto.",
40+
"seeAllInstances": "Alle Instanzen anzeigen",
41+
"showingYourInstances": "Ihre Instanzen anzeigen",
42+
"settings": "Einstellungen",
43+
"changeSettings": "Ändern Sie allgemeine Einstellungen im Skyport-Panel.",
44+
"settingsSaved": "Gespeichert!",
45+
"settingsSaveFailed": "Speichern fehlgeschlagen.",
46+
"general": "Allgemein",
47+
"panelName": "Panel-Name:",
48+
"save": "Speichern",
49+
"saveNewLogo": "Neues Logo speichern",
50+
"panelLogo": "Panel-Logo:",
51+
"uploadLogo": "Logo hochladen:",
52+
"removeLogo": "Logo entfernen",
53+
"registerPage": "Registrierungsseite:",
54+
"enabled": "Aktiviert",
55+
"enable": "Aktivieren",
56+
"disabled": "Deaktiviert",
57+
"disable": "Deaktivieren",
58+
"forceVerifyEmail": "E-Mail-Verifizierung erzwingen:",
59+
"smtp": "SMTP",
60+
"smtpServer": "SMTP-Server",
61+
"smtpPort": "SMTP-Port",
62+
"smtpUsername": "SMTP-Benutzername",
63+
"smtpPassword": "SMTP-Passwort",
64+
"saveSmtpSettings": "SMTP-Einstellungen speichern",
65+
"mailFromName": "Absendername",
66+
"mailFromAddress": "Absenderadresse",
67+
"recipientEmail": "Empfänger-E-Mail",
68+
"sendTestEmail": "Test-E-Mail senden",
69+
"testEmailSuccess": "Test-E-Mail war erfolgreich.",
70+
"testEmailFailed": "Test-E-Mail fehlgeschlagen.",
71+
"usersDescription": "Eine Liste aller auf dem Skyport-Panel eingerichteten Benutzer.",
72+
"createUserButton": "Neuen Benutzer erstellen",
73+
"information": "Informationen",
74+
"role": "Rolle",
75+
"verificationStatus": "Verifizierungsstatus",
76+
"action": "Aktion",
77+
"actions": "Aktionen",
78+
"regularUserRole": "Normaler Benutzer",
79+
"verifiedStatus": "Verifiziert",
80+
"unverifiedStatus": "Nicht verifiziert",
81+
"error": "Fehler",
82+
"edit": "Bearbeiten",
83+
"create": "Erstellen",
84+
"remove": "Entfernen",
85+
"usernamePlaceholder": "JohnDoe",
86+
"emailPlaceholder": "[email protected]",
87+
"passwordLabel": "Passwort",
88+
"passwordPlaceholder": "******",
89+
"admin": "Admin",
90+
"true": "Wahr",
91+
"false": "Falsch",
92+
"account": "Konto",
93+
"overview": "Überblick",
94+
"overviewText": "Ein einfacher Überblick über Ihr Panel.",
95+
"user": "Benutzer",
96+
"users": "Benutzer",
97+
"node": "Knoten",
98+
"nodes": "Knoten",
99+
"nodesText": "Eine Liste aller auf dem Skyport-Panel eingerichteten Knoten.",
100+
"plugins": "Plugins",
101+
"signOut": "Abmelden",
102+
"accountJSON": "Konto - JSON",
103+
"nodesJSON": "Knoten - JSON",
104+
"image": "Bild",
105+
"images": "Bilder",
106+
"imagesText": "Eine Liste aller Bilder auf dem Skyport-Panel.",
107+
"imageDelete": "Bild löschen",
108+
"imageReplace": "Bild ersetzen",
109+
"sysInfo": "Systeminformationen",
110+
"sysInfoText": "Sie verwenden Skyport Panel Version",
111+
"newReleaseSkyport1": "Eine neue Version, Skyport",
112+
"newReleaseSkyport2": "ist verfügbar. Bitte klicken",
113+
"newReleaseSkyport3": "um es herunterzuladen!",
114+
"here": "Hier",
115+
"runningLatestVersion": "Sie verwenden die neueste Version!",
116+
"name": "Name",
117+
"dockerID": "Docker-ID",
118+
"volumeANDMount": "Volume / Einhängen",
119+
"unsuspend": "Entsperren",
120+
"suspend": "Sperren",
121+
"memory": "Speicher",
122+
"cpuThreads": "CPU-Threads",
123+
"ports": "Ports",
124+
"primaryPort": "Primärport",
125+
"connection": "Verbindung",
126+
"createNewNode": "Neuen Knoten erstellen",
127+
"configure": "Konfigurieren",
128+
"ram": "RAM",
129+
"disk": "Festplatte",
130+
"cpu": "CPU",
131+
"addressIP": "IP-Adresse",
132+
"deamonPort": "Daemon-Port",
133+
"tags": "Tags",
134+
"author": "Autor",
135+
"dockerImage": "Docker-Image",
136+
"importImage": "Bild importieren",
137+
"back": "Zurück",
138+
"APIKeys": "API-Schlüssel",
139+
"APIKeysText": "Eine Liste aller API-Schlüssel auf dem Skyport-Panel.",
140+
"id": "ID",
141+
"key": "Schlüssel",
142+
"createdAt": "Erstellt am",
143+
"createNewAPIKey": "Neuen API-Schlüssel erstellen",
144+
"clickToConfirmCreation": "Klicken Sie, um die Erstellung zu bestätigen",
145+
"auditLogs": "Prüfprotokolle",
146+
"auditLogsText": "Eine Historie der von Administratoren durchgeführten Aktionen.",
147+
"auditLogsNotAvailable": "Keine Prüfprotokolle verfügbar.",
148+
"timestamp": "Zeitstempel",
149+
"you": "Sie",
150+
"address": "Adresse",
151+
"identifier": "Kennung",
152+
"connectionFailure": "Verbindungsfehler",
153+
"connectionFailureText": "Der Knoten, der diese Instanz ausführt, scheint Probleme zu haben. Bitte warten...",
154+
"SendACommand": "Einen Befehl senden...",
155+
"status": "Status",
156+
"ramUsage": "RAM-Nutzung",
157+
"cpuUsage": "CPU-Nutzung",
158+
"diskUsage": "Festplattennutzung",
159+
"start": "Starten",
160+
"stop": "Stoppen",
161+
"restart": "Neustart",
162+
"created": "ERSTELLT!",
163+
"apiKeySuccessCreated": "Der API-Schlüssel wurde erfolgreich erstellt.",
164+
"apiKeyErrorDelete": "Fehler beim Löschen des Schlüssels",
165+
"editUser": "Benutzer bearbeiten",
166+
"editUserDetails": "Ändern Sie die Details des ausgewählten Benutzers.",
167+
"userCreatedSuccess": "Benutzer erfolgreich erstellt",
168+
"userDeletingError": "Fehler beim Löschen des Benutzers",
169+
"userDeletingConfirmation": "Sind Sie sicher, dass Sie diesen Benutzer löschen möchten?",
170+
"userCannotDelete": "Der aktuelle Benutzer kann nicht gelöscht werden.",
171+
"databaseCannotDelete": "Der einzige Benutzer in der Datenbank kann nicht gelöscht werden.",
172+
"userCreateError": "Fehler beim Erstellen des Benutzers",
173+
"saveChanges": "Änderungen speichern",
174+
"jsonSelectFile": "Bitte wählen Sie eine JSON-Datei aus."
175+
}

0 commit comments

Comments
 (0)