diff --git a/bun.lockb b/bun.lockb index cde9aa1..a60aeb1 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 3123386..2f14608 100644 --- a/package.json +++ b/package.json @@ -24,8 +24,8 @@ "@radix-ui/react-separator": "^1.1.1", "@radix-ui/react-slot": "^1.1.1", "@radix-ui/react-switch": "^1.1.2", - "@tanstack/react-query": "^5.62.8", - "@tanstack/react-query-devtools": "^5.62.8", + "@tanstack/react-query": "^5.62.11", + "@tanstack/react-query-devtools": "^5.62.11", "@tanstack/react-table": "^8.20.6", "@trivago/prettier-plugin-sort-imports": "^5.2.0", "@types/d3-geo": "^3.1.0", @@ -43,10 +43,10 @@ "react": "^19.0.0", "react-dom": "^19.0.0", "react-i18next": "^15.2.0", - "react-router-dom": "^7.1.0", + "react-router-dom": "^7.1.1", "recharts": "^2.15.0", "sonner": "^1.7.1", - "tailwind-merge": "^2.5.5", + "tailwind-merge": "^2.6.0", "tailwindcss-animate": "^1.0.7" }, "devDependencies": { @@ -63,7 +63,7 @@ "postcss": "^8.4.49", "tailwindcss": "^3.4.17", "typescript": "~5.6.3", - "typescript-eslint": "^8.18.1", - "vite": "^6.0.5" + "typescript-eslint": "^8.18.2", + "vite": "^6.0.6" } } diff --git a/src/App.tsx b/src/App.tsx index 7665ae1..2bdc76c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -32,11 +32,11 @@ const App: React.FC = () => { (window.ForceTheme as string) !== "" ? window.ForceTheme : undefined useEffect(() => { - if (settingData?.data?.custom_code) { - InjectContext(settingData?.data?.custom_code) + if (settingData?.data?.config?.custom_code) { + InjectContext(settingData?.data?.config?.custom_code) setIsCustomCodeInjected(true) } - }, [settingData?.data?.custom_code]) + }, [settingData?.data?.config?.custom_code]) useEffect(() => { if (forceTheme === "dark" || forceTheme === "light") { @@ -52,12 +52,12 @@ const App: React.FC = () => { return null } - if (settingData?.data?.custom_code && !isCustomCodeInjected) { + if (settingData?.data?.config?.custom_code && !isCustomCodeInjected) { return null } - if (settingData?.data?.language && !localStorage.getItem("language")) { - i18n.changeLanguage(settingData?.data?.language) + if (settingData?.data?.config?.language && !localStorage.getItem("language")) { + i18n.changeLanguage(settingData?.data?.config?.language) } const customBackgroundImage = diff --git a/src/components/Header.tsx b/src/components/Header.tsx index 3c251ca..8703945 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -30,7 +30,7 @@ function Header() { const onlineCount = connected ? (lastMessage ? JSON.parse(lastMessage.data).online || 0 : 0) : "..." - const siteName = settingData?.data?.site_name + const siteName = settingData?.data?.config?.site_name // @ts-expect-error CustomLogo is a global variable const customLogo = window.CustomLogo || "/apple-touch-icon.png" diff --git a/src/locales/de/translation.json b/src/locales/de/translation.json new file mode 100644 index 0000000..d5c5230 --- /dev/null +++ b/src/locales/de/translation.json @@ -0,0 +1,119 @@ +{ + "refreshing": "Aktualisieren", + "serviceTracker": { + "uptime": "Uptime", + "today": "Heute", + "noService": "Keine Servicedaten", + "daysAgo": "vor Tagen", + "loading": "Laden..." + }, + "serverCard": { + "uptime": "Uptime", + "mem": "MEM", + "upload": "Upload", + "download": "Download", + "system": "System", + "stg": "STG", + "totalDownload": "Download", + "days": "Tage", + "hours": "Stunden", + "totalUpload": "Upload" + }, + "serverDetail": { + "unknown": "Unbekannt", + "arch": "Arch", + "status": "Status", + "online": "Online", + "days": "Tage", + "upload": "Upload", + "download": "Download", + "offline": "Offline", + "uptime": "Uptime", + "version": "Version", + "mem": "Speicher", + "disk": "Festplatte", + "region": "Region", + "system": "System", + "lastActive": "Letzte Aktivität", + "temperature": "Temperatur" + }, + "theme": { + "system": "Folgen Sie dem System", + "light": "Hell", + "dark": "Dunkel" + }, + "monitor": { + "monitorCount": "Services", + "noData": "Kein Server Monitoring Daten, bitte fügen sie zuerst einen Monitor hinzu", + "avgDelay": "Latenz" + }, + "billingInfo": { + "error": "Fehler", + "remaining": "Verbleibend", + "indefinite": "Unbestimmt", + "expired": "Verfallen", + "days": "tage", + "price": "Preis", + "free": "Kostenlos", + "usage-baseed": "Verwendungsbasiert" + }, + "overview": "Überblick", + "map": { + "Regions": "Regionen", + "Servers": "server", + "Distributions": "Server sind verteilt in" + }, + "pwa": { + "reload": "Update", + "newContent": "Neue Inhalte verfügbar", + "offlineReady": "Anwendung bereit, offline zu verwenden" + }, + "error": { + "pageNotFound": "Seite nicht gefunden", + "backToHome": "Zurück zur Startseite" + }, + "whereTheTimeIs": "Wo die Zeit ist", + "info": { + "websocketConnecting": "WebSocket verbindet", + "websocketConnected": "WebSocket verbunden", + "websocketDisconnected": "WebSocket getrennt", + "processing": "Verarbeiten..." + }, + "tabSwitch": { + "Network": "Netzwerk", + "Detail": "Detail" + }, + "nezha": "Nezha Monitoring", + "dashboard": "Dashboard", + "serverDetailChart": { + "upload": "Upload", + "download": "Download", + "process": "Prozess", + "disk": "Festplatte", + "mem": "Speicher", + "swap": "Swap" + }, + "language": { + "zh-TW": "Traditionelles Chinesisch", + "en-US": "Englisch", + "zh-CN": "vereinfachtes Chinesisch" + }, + "online": "Online", + "offline": "Offline", + "serverOverview": { + "totalServers": "Server insgesamt", + "onlineServers": "Online Server", + "offlineServers": "Offline Server", + "totalBandwidth": "Gesamte Bandbreite", + "speed": "Geschwindigkeit", + "network": "Netzwerk" + }, + "cycleTransfer": { + "used": "benutzt", + "total": "gesamt", + "nextUpdate": "nächstes update" + }, + "footer": { + "themeBy": "Design von " + } +} diff --git a/src/types/nezha-api.ts b/src/types/nezha-api.ts index a7da360..75deb94 100644 --- a/src/types/nezha-api.ts +++ b/src/types/nezha-api.ts @@ -140,12 +140,19 @@ export interface CycleTransferData { } } +type SettingConfig = { + debug: boolean + language: string + site_name: string + user_template: string + admin_template: string + custom_code: string +} + export interface SettingResponse { success: boolean data: { - language: string - site_name: string - custom_code: string + config: SettingConfig version: string } }