♻️ refactor: Refactoring and adding multiple features

This commit is contained in:
web
2025-08-05 06:42:39 -07:00
committed by speakeloudest
parent 5a2fa2e937
commit 47d19d1b44
106 changed files with 6893 additions and 4604 deletions
+4 -11
View File
@@ -1,32 +1,25 @@
{
"ADS Config": "ADS-Konfiguration",
"Announcement Management": "Ankündigungsverwaltung",
"Apple": "Apple-ID",
"Application Management": "Anwendungsverwaltung",
"Auth Control": "Authentifizierungskontrolle",
"Coupon Management": "Gutscheinverwaltung",
"Dashboard": "Armaturenbrett",
"Device": "Gerät",
"Document Management": "Dokumentenverwaltung",
"Email": "E-Mail",
"Facebook": "Facebook",
"Finance": "Finanzen",
"General": "Allgemein",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "Bestellverwaltung",
"Payment Config": "Zahlungskonfiguration",
"Phone Number": "Telefonnummer",
"Product Management": "Produktmanagement",
"Protocol Management": "Protokollverwaltung",
"Rule Management": "Regelverwaltung",
"Server": "Dienst",
"Server Management": "Serververwaltung",
"Settings": "Einstellungen",
"Subscribe Management": "Abonnementverwaltung",
"Subscribe Config": "Abonnieren-Konfiguration",
"System Config": "Systemkonfiguration",
"System Management": "Systemverwaltung",
"System Tool": "Systemwerkzeug",
"Telegram": "Telegram",
"Ticket Management": "Ticketverwaltung",
"Twitter": "Twitter",
"User": "Benutzer",
"User Detail": "Benutzerdetails",
"User Management": "Benutzerverwaltung"
+160
View File
@@ -0,0 +1,160 @@
{
"actions": "Aktionen",
"app": {
"appDownloadURL": "App-Download-URL",
"appIcon": "App-Symbol",
"appList": "App-Liste",
"appName": "App-Name",
"backupDomains": "Liste der Backup-Domains",
"backupDomainsDescription": "Liste der Backup-Domains für die Domain-Auflösung, eine Domain pro Zeile",
"batchDelete": "Stapel löschen",
"cancel": "Abbrechen",
"communicationKey": "Kommunikationsschlüssel",
"communicationKeyDescription": "Schlüssel, der für die Kommunikation mit dem Client verwendet wird",
"config": "Konfiguration",
"configApp": "App-Konfiguration",
"confirm": "Bestätigen",
"confirmDelete": "Löschen bestätigen",
"create": "Erstellen",
"createApp": "App erstellen",
"createSuccess": "Erfolgreich erstellt",
"defaultVersion": "Standard",
"delete": "Löschen",
"deleteWarning": "Diese Aktion kann nicht rückgängig gemacht werden",
"describeDescription": "Wird verwendet, um die Anwendung zu beschreiben, wird in der App-Liste angezeigt",
"description": "Beschreibung",
"downloadLink": "Download-Link",
"edit": "Bearbeiten",
"editApp": "App bearbeiten",
"encryption": "Verschlüsselungsmethode",
"encryptionDescription": "Wählen Sie die Verschlüsselungsmethode für die Kommunikation mit dem Client. Wenn ausgewählt, wird der Client diese Methode verwenden, um mit dem Server zu kommunizieren.",
"nameDescription": "Anwendungsname, wird in der App-Liste angezeigt",
"platform": "Plattform",
"selectApp": "App auswählen",
"selectAppDescription": "Wählen Sie die App aus, die konfiguriert werden soll. Alle Einstellungen gelten für die ausgewählte App.",
"startupPicture": "Startbild",
"startupPictureDescription": "Startbild, unterstützt Netzwerk- und lokale Bilder. Für Netzwerkbilder bitte die vollständige Bild-URL eingeben",
"startupPicturePreview": "Vorschau des Startbildes",
"startupPictureSkip": "Überspringzeit des Startbildes",
"startupPictureSkipDescription": "Anzeigedauer des Startbildes in Sekunden, 0 eingeben, um nicht anzuzeigen",
"subscriptionProtocol": "Abonnementprotokoll",
"updateSuccess": "Erfolgreich aktualisiert",
"version": "Version"
},
"cancel": "Abbrechen",
"config": {
"singleSubscriptionMode": "Einzelabonnement-Modus",
"subscriptionDomain": "Abonnement-Domain",
"subscriptionDomainDescription": "Wird für Abonnements verwendet; leer lassen, um die Site-Domain zu verwenden",
"subscriptionDomainPlaceholder": "Abonnement-Domain eingeben, eine pro Zeile",
"subscriptionPath": "Abonnement-Pfad",
"subscriptionPathDescription": "Wird für Abonnements verwendet; starten Sie das System nach der Änderung neu, um die optimale Leistung zu gewährleisten",
"subscriptionPathPlaceholder": "Eingeben",
"updateSuccess": "Erfolgreich aktualisiert",
"wildcardResolution": "Wildcard-Auflösung",
"wildcardResolutionDescription": "Wird für Abonnements verwendet"
},
"confirm": "Bestätigen",
"confirmDelete": "Möchten Sie wirklich löschen?",
"copy": "Kopieren",
"copySuccess": "Erfolgreich kopiert",
"create": "Erstellen",
"createSubscribe": "Neues Abonnement erstellen",
"createSuccess": "Erstellung erfolgreich",
"delete": "Löschen",
"deleteSuccess": "Erfolgreich gelöscht",
"deleteWarning": "Nach dem Löschen können die Daten nicht wiederhergestellt werden. Bitte gehen Sie vorsichtig vor.",
"deviceLimit": "Geräteanzahl/Stück",
"edit": "Bearbeiten",
"editSubscribe": "Abonnement bearbeiten",
"form": {
"Day": "Tag",
"Hour": "Stunde",
"Minute": "Minute",
"Month": "Monat",
"NoLimit": "Kein Limit",
"Year": "Jahr",
"annualReset": "Jährliches Zurücksetzen",
"basic": "Grundlegend",
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"deductionRatio": "Automatische/Manuelle Abzugskonfiguration",
"deductionRatioDescription": "Wird für Abzüge verwendet. Standardmäßig verwendet das System einen automatischen Berechnungsalgorithmus. Wenn ein manueller Prozentsatz angegeben wird, berechnet das System die Anteile basierend auf dem Zeit- und Verkehrsverhältnis, wobei sichergestellt wird, dass die Summe 100% ergibt.",
"description": "Beschreibung",
"deviceLimit": "Gerätebeschränkung",
"discount": "Rabatt",
"discountDescription": "Rabatt basierend auf Einzelpreis",
"discountMonths": "Monate",
"discountPercent": "Rabattprozentsatz",
"discount_price": "Rabattpreis",
"duration": "Dauer (Monate)",
"groupId": "Abonnementgruppe",
"inventory": "Abonnementslimit",
"monthlyReset": "Monatliches Zurücksetzen",
"name": "Name",
"noLimit": "Keine Begrenzung",
"noReset": "Kein Zurücksetzen",
"pricing": "Preisgestaltung",
"purchaseWithDiscount": "Abzug erlauben",
"purchaseWithDiscountDescription": "Aktivieren oder deaktivieren Sie die Abmeldefunktion. Nach der Aktivierung führt das System die Abzugsverarbeitung gemäß den konfigurierten Regeln und Anteilen durch, und der verbleibende Wert wird dem Guthaben gutgeschrieben.",
"quota": "Kaufbeschränkung",
"renewalReset": "Zurücksetzen bei Erneuerung",
"renewalResetDescription": "Zurücksetzungszyklus bei Erneuerung",
"replacement": "Ersatzpreis (pro Mal)",
"resetCycle": "Zurücksetzungszyklus",
"resetOn1st": "Zurücksetzen am 1.",
"selectResetCycle": "Bitte wählen Sie einen Zurücksetzungszyklus",
"selectSubscribeGroup": "Bitte Abonnementgruppe auswählen",
"selectUnitTime": "Bitte wählen Sie eine Zeiteinheit",
"server": "Dienst",
"serverGroup": "Dienstgruppe",
"servers": "Server",
"speedLimit": "Geschwindigkeitsbegrenzung ",
"traffic": "Datenvolumen",
"unitPrice": "Einheitspreis",
"unitTime": "Zeiteinheit"
},
"group": {
"actions": "Aktionen",
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"confirmDelete": "Löschen bestätigen?",
"create": "Erstellen",
"createSubscribeGroup": "Neue Abonnementgruppe erstellen",
"createSuccess": "Erstellung erfolgreich",
"delete": "Löschen",
"deleteSuccess": "Erfolgreich gelöscht",
"deleteWarning": "Nach dem Löschen können die Daten nicht wiederhergestellt werden, bitte vorsichtig vorgehen.",
"description": "Beschreibung",
"edit": "Bearbeiten",
"editSubscribeGroup": "Abonnementgruppe bearbeiten",
"form": {
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"description": "Beschreibung",
"name": "Name"
},
"name": "Name",
"title": "Liste der Abonnementgruppen",
"updateSuccess": "Erfolgreich aktualisiert",
"updatedAt": "Aktualisierungszeit"
},
"inventory": "Abonnementslimit",
"name": "Name",
"quota": "Kaufbeschränkung/pro Einkauf",
"replacement": "Preis pro Zurücksetzung",
"sell": "Verkauf",
"show": "Anzeigen",
"sold": "Abonnentenzahl",
"subscribe": "Abonnieren",
"subscribeGroup": "Gruppe abonnieren",
"tabs": {
"subscribe": "Abonnieren",
"subscribeApp": "App-Konfiguration",
"subscribeConfig": "Abonnement-Konfiguration",
"subscribeGroup": "Abonnieren Gruppe"
},
"traffic": "Verkehr",
"unitPrice": "Stückpreis",
"updateSuccess": "Aktualisierung erfolgreich"
}
+75 -147
View File
@@ -1,161 +1,89 @@
{
"actions": "Aktionen",
"app": {
"appDownloadURL": "App-Download-URL",
"appIcon": "App-Symbol",
"appList": "App-Liste",
"appName": "App-Name",
"backupDomains": "Liste der Backup-Domains",
"backupDomainsDescription": "Liste der Backup-Domains für die Domain-Auflösung, eine Domain pro Zeile",
"batchDelete": "Stapel löschen",
"actions": {
"cancel": "Abbrechen",
"communicationKey": "Kommunikationsschlüssel",
"communicationKeyDescription": "Schlüssel, der für die Kommunikation mit dem Client verwendet wird",
"config": "Konfiguration",
"configApp": "App-Konfiguration",
"confirm": "Bestätigen",
"confirmDelete": "Löschen bestätigen",
"create": "Erstellen",
"createApp": "App erstellen",
"createSuccess": "Erfolgreich erstellt",
"defaultVersion": "Standard",
"delete": "Löschen",
"deleteWarning": "Diese Aktion kann nicht rückgängig gemacht werden",
"describeDescription": "Wird verwendet, um die Anwendung zu beschreiben, wird in der App-Liste angezeigt",
"description": "Beschreibung",
"downloadLink": "Download-Link",
"edit": "Bearbeiten",
"editApp": "App bearbeiten",
"encryption": "Verschlüsselungsmethode",
"encryptionDescription": "Wählen Sie die Verschlüsselungsmethode für die Kommunikation mit dem Client. Wenn ausgewählt, wird der Client diese Methode verwenden, um mit dem Server zu kommunizieren.",
"nameDescription": "Anwendungsname, wird in der App-Liste angezeigt",
"platform": "Plattform",
"selectApp": "App auswählen",
"selectAppDescription": "Wählen Sie die App aus, die konfiguriert werden soll. Alle Einstellungen gelten für die ausgewählte App.",
"startupPicture": "Startbild",
"startupPictureDescription": "Startbild, unterstützt Netzwerk- und lokale Bilder. Für Netzwerkbilder bitte die vollständige Bild-URL eingeben",
"startupPicturePreview": "Vorschau des Startbildes",
"startupPictureSkip": "Überspringzeit des Startbildes",
"startupPictureSkipDescription": "Anzeigedauer des Startbildes in Sekunden, 0 eingeben, um nicht anzuzeigen",
"subscriptionProtocol": "Abonnementprotokoll",
"updateSuccess": "Erfolgreich aktualisiert",
"version": "Version"
"save": "Speichern",
"saveTemplate": "Vorlage speichern"
},
"cancel": "Abbrechen",
"config": {
"singleSubscriptionMode": "Einzelabonnement-Modus",
"singleSubscriptionModeDescription": "Wenn aktiviert, werden alle Benutzerabonnements in Guthaben umgewandelt",
"description": "Verwalten Sie die Einstellungen des Abonnementsystems",
"restrictUserAgent": "Benutzer-Agent-Einschränkung",
"restrictUserAgentDescription": "Zugriffseinschränkungen basierend auf dem Benutzer-Agent aktivieren",
"singleSubscriptionMode": "Einzelnes Abonnement-Modus",
"singleSubscriptionModeDescription": "Benutzer auf ein aktives Abonnement beschränken. Bestehende Abonnements bleiben unberührt",
"subscriptionDomain": "Abonnement-Domain",
"subscriptionDomainDescription": "Wird für Abonnements verwendet; leer lassen, um die Site-Domain zu verwenden",
"subscriptionDomainPlaceholder": "Abonnement-Domain eingeben, eine pro Zeile",
"subscriptionDomainDescription": "Benutzerdefinierte Domain für Abonnement-Links",
"subscriptionDomainPlaceholder": "Geben Sie die Abonnement-Domain ein, eine pro Zeile",
"subscriptionPath": "Abonnement-Pfad",
"subscriptionPathDescription": "Wird für Abonnements verwendet; starten Sie das System nach der Änderung neu, um die optimale Leistung zu gewährleisten",
"subscriptionPathPlaceholder": "Eingeben",
"updateSuccess": "Erfolgreich aktualisiert",
"subscriptionPathDescription": "Benutzerdefinierter Pfad für Abonnement-Endpunkte (bessere Leistung nach Systemneustart)",
"subscriptionPathPlaceholder": "Geben Sie den Abonnement-Pfad ein",
"title": "Abonnementkonfiguration",
"updateError": "Aktualisierung fehlgeschlagen",
"updateSuccess": "Einstellungen erfolgreich aktualisiert",
"userAgentWhitelist": "Benutzer-Agent-Whitelist",
"userAgentWhitelistDescription": "Erlaubte Benutzer-Agents für den Abonnementzugriff, jeweils eine pro Zeile. Eingebaute Vorlagen werden automatisch in die Whitelist aufgenommen",
"userAgentWhitelistPlaceholder": "Erlaubte Benutzer-Agents eingeben, jeweils eine pro Zeile",
"wildcardResolution": "Wildcard-Auflösung",
"wildcardResolutionDescription": "Wird für Abonnements verwendet"
"wildcardResolutionDescription": "Aktivieren Sie die Wildcard-Domainauflösung für Abonnements"
},
"confirm": "Bestätigen",
"confirmDelete": "Möchten Sie wirklich löschen?",
"copy": "Kopieren",
"copySuccess": "Erfolgreich kopiert",
"create": "Erstellen",
"createSubscribe": "Neues Abonnement erstellen",
"createSuccess": "Erstellung erfolgreich",
"delete": "Löschen",
"deleteSuccess": "Erfolgreich gelöscht",
"deleteWarning": "Nach dem Löschen können die Daten nicht wiederhergestellt werden. Bitte gehen Sie vorsichtig vor.",
"deviceLimit": "Geräteanzahl/Stück",
"edit": "Bearbeiten",
"editSubscribe": "Abonnement bearbeiten",
"form": {
"Day": "Tag",
"Hour": "Stunde",
"Minute": "Minute",
"Month": "Monat",
"NoLimit": "Kein Limit",
"Year": "Jahr",
"annualReset": "Jährliches Zurücksetzen",
"basic": "Grundlegend",
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"deductionRatio": "Automatische/Manuelle Abzugskonfiguration",
"deductionRatioDescription": "Wird für Abzüge verwendet. Standardmäßig verwendet das System einen automatischen Berechnungsalgorithmus. Wenn ein manueller Prozentsatz angegeben wird, berechnet das System die Anteile basierend auf dem Zeit- und Verkehrsverhältnis, wobei sichergestellt wird, dass die Summe 100% ergibt.",
"description": "Beschreibung",
"deviceLimit": "Gerätebeschränkung",
"discount": "Rabatt",
"discountDescription": "Rabatt basierend auf Einzelpreis",
"discountMonths": "Monate",
"discountPercent": "Rabattprozentsatz",
"discount_price": "Rabattpreis",
"duration": "Dauer (Monate)",
"groupId": "Abonnementgruppe",
"inventory": "Abonnementslimit",
"monthlyReset": "Monatliches Zurücksetzen",
"name": "Name",
"noLimit": "Keine Begrenzung",
"noReset": "Kein Zurücksetzen",
"pricing": "Preisgestaltung",
"purchaseWithDiscount": "Abzug erlauben",
"purchaseWithDiscountDescription": "Aktivieren oder deaktivieren Sie die Abmeldefunktion. Nach der Aktivierung führt das System die Abzugsverarbeitung gemäß den konfigurierten Regeln und Anteilen durch, und der verbleibende Wert wird dem Guthaben gutgeschrieben.",
"quota": "Kaufbeschränkung",
"renewalReset": "Zurücksetzen bei Erneuerung",
"renewalResetDescription": "Zurücksetzungszyklus bei Erneuerung",
"replacement": "Ersatzpreis (pro Mal)",
"resetCycle": "Zurücksetzungszyklus",
"resetOn1st": "Zurücksetzen am 1.",
"selectResetCycle": "Bitte wählen Sie einen Zurücksetzungszyklus",
"selectSubscribeGroup": "Bitte Abonnementgruppe auswählen",
"selectUnitTime": "Bitte wählen Sie eine Zeiteinheit",
"server": "Dienst",
"serverGroup": "Dienstgruppe",
"servers": "Server",
"speedLimit": "Geschwindigkeitsbegrenzung ",
"traffic": "Datenvolumen",
"unitPrice": "Einheitspreis",
"unitTime": "Zeiteinheit"
"description": "Konfigurieren Sie Abonnementeinstellungen und Clientvorlagen",
"messages": {
"noClients": "Keine Clientvorlagen",
"noClientsDescription": "Es sind noch keine Clientvorlagen konfiguriert. Fügen Sie Ihre erste Vorlage hinzu, um zu beginnen."
},
"group": {
"actions": "Aktionen",
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"confirmDelete": "Löschen bestätigen?",
"create": "Erstellen",
"createSubscribeGroup": "Neue Abonnementgruppe erstellen",
"createSuccess": "Erstellung erfolgreich",
"delete": "Löschen",
"deleteSuccess": "Erfolgreich gelöscht",
"deleteWarning": "Nach dem Löschen können die Daten nicht wiederhergestellt werden, bitte vorsichtig vorgehen.",
"description": "Beschreibung",
"edit": "Bearbeiten",
"editSubscribeGroup": "Abonnementgruppe bearbeiten",
"form": {
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"description": "Beschreibung",
"name": "Name"
"protocol": {
"clients": {
"clash": {
"features": "Großes Ökosystem, umfassende Regeln, aktive Community"
},
"egern": {
"features": "Moderner iOS-Client, hervorragende Leistung"
},
"hiddify": {
"features": "Plattformübergreifend, umfassende Protokolle, anfängerfreundlich"
},
"loon": {
"features": "Fortgeschrittener iOS-Client, reichhaltige Regeln, schönes Interface"
},
"netch": {
"features": "Gaming-fokussierter Proxy-Client"
},
"quantumult": {
"features": "Fortgeschrittener iOS-Client, flexible Regeln, reichhaltige Skripte"
},
"shadowrocket": {
"features": "Klassischer iOS-Client, flexible Konfiguration"
},
"singbox": {
"features": "Neuester Kernel, offizielle GUI, plattformübergreifende Unterstützung"
},
"stash": {
"features": "Modernes mobiles UI, umfassende Protokolle"
},
"surfboard": {
"features": "Kostenlos, aktive Entwicklung, modernes Interface"
},
"surge": {
"features": "Premium iOS/Mac-Tool, leistungsstarke Funktionen"
},
"v2box": {
"features": "Benutzerfreundlicher V2Ray-Client"
},
"v2rayn": {
"features": "Beliebter Windows-Client, funktionsreich"
},
"v2rayng": {
"features": "Beliebter Android-Client, leichtgewichtig"
}
},
"name": "Name",
"title": "Liste der Abonnementgruppen",
"updateSuccess": "Erfolgreich aktualisiert",
"updatedAt": "Aktualisierungszeit"
"description": "Verwalten Sie Konfigurationsvorlagen für Abonnements von Proxy-Clients",
"features": "Hauptmerkmale",
"platforms": "Plattformen",
"subscribeTemplate": "Konfiguration der Abonnementvorlage",
"templateContent": "Vorlageninhalt",
"templatePlaceholder": "Geben Sie die Clientkonfigurationsvorlage ein...",
"title": "Client-Abonnementvorlagen"
},
"inventory": "Abonnementslimit",
"name": "Name",
"quota": "Kaufbeschränkung/pro Einkauf",
"replacement": "Preis pro Zurücksetzung",
"sell": "Verkauf",
"show": "Anzeigen",
"sold": "Abonnentenzahl",
"subscribe": "Abonnieren",
"subscribeGroup": "Gruppe abonnieren",
"tabs": {
"subscribe": "Abonnieren",
"subscribeApp": "App-Konfiguration",
"subscribeConfig": "Abonnement-Konfiguration",
"subscribeGroup": "Abonnieren Gruppe"
},
"traffic": "Verkehr",
"unitPrice": "Stückpreis",
"updateSuccess": "Aktualisierung erfolgreich"
"title": "Abonnementverwaltung"
}