Merge branch 'benphelps:main' into add-whatsupdocker-widget

This commit is contained in:
Richy HBM 2023-03-30 15:00:54 +01:00 committed by GitHub
commit 2b1be6110a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
54 changed files with 3374 additions and 5298 deletions

View File

@ -3,7 +3,7 @@
"build": {
"dockerfile": "Dockerfile",
"args": {
"VARIANT": "18-buster"
"VARIANT": "18-bullseye"
}
},
"customizations": {

1
.gitignore vendored
View File

@ -4,6 +4,7 @@
/node_modules
/.pnp
.pnp.js
.pnpm-store
# testing
/coverage

4985
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -23,7 +23,7 @@
"minecraft-ping-js": "^1.0.2",
"next": "^12.3.1",
"next-i18next": "^12.0.1",
"node-os-utils": "^1.3.7",
"osx-temperature-sensor": "^1.0.8",
"pretty-bytes": "^6.0.0",
"raw-body": "^2.5.1",
"react": "^18.2.0",
@ -32,6 +32,7 @@
"react-icons": "^4.4.0",
"shvl": "^3.0.0",
"swr": "^1.3.0",
"systeminformation": "^5.17.12",
"tough-cookie": "^4.1.2",
"winston": "^3.8.2",
"xml-js": "^1.6.11"

File diff suppressed because it is too large Load Diff

View File

@ -23,7 +23,14 @@
"free": "متاح",
"used": "مستخدم",
"load": "الضغط",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"unifi": {
"users": "المستخدمون",
@ -288,7 +295,11 @@
"glances": {
"cpu": "معالج",
"mem": "الذاكرة",
"wait": "الرجاء الإنتظار"
"wait": "الرجاء الإنتظار",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"quicklaunch": {
"bookmark": "مفضلة",

View File

@ -33,7 +33,14 @@
"free": "Свободни",
"used": "Заети",
"load": "Натоварване",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"unifi": {
"users": "Потребители",
@ -226,7 +233,11 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait"
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Total Observed",

View File

@ -39,7 +39,14 @@
"used": "Utilitzat",
"load": "Càrrega",
"cpu": "CPU",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"docker": {
"rx": "Rebut",
@ -226,7 +233,11 @@
"glances": {
"cpu": "Processador",
"mem": "Memòria",
"wait": "Si us plau, espereu"
"wait": "Si us plau, espereu",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Total d'observats",

View File

@ -35,7 +35,14 @@
"free": "Volné",
"used": "Využité",
"load": "Vytížení",
"mem": "RAM"
"mem": "RAM",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m",
"temp": "TEMP"
},
"unifi": {
"users": "Uživatelé",
@ -300,7 +307,11 @@
"glances": {
"cpu": "CPU",
"mem": "RAM",
"wait": "Prosím počkejte"
"wait": "Prosím počkejte",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"quicklaunch": {
"bookmark": "Záložka",

View File

@ -68,7 +68,11 @@
"glances": {
"cpu": "CPU",
"mem": "RAM",
"wait": "Vent venligst"
"wait": "Vent venligst",
"uptime": "UP",
"days": "d",
"hours": "h",
"temp": "TEMP"
},
"wmo": {
"1-day": "Hovedsageligt solrigt",
@ -163,7 +167,14 @@
"free": "Fri",
"used": "Brugt",
"load": "Belastning",
"mem": "MEM"
"mem": "MEM",
"hours": "h",
"minutes": "m",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d"
},
"unifi": {
"users": "Brugere",

View File

@ -17,7 +17,14 @@
"used": "Gebraucht",
"load": "Last",
"cpu": "CPU",
"mem": "RAM"
"mem": "RAM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"docker": {
"rx": "Rx",
@ -226,7 +233,11 @@
"glances": {
"cpu": "Prozessor",
"mem": "RAM",
"wait": "Bitte warten"
"wait": "Bitte warten",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Gesamt beobachtet",

View File

@ -36,7 +36,14 @@
"total": "Total",
"free": "Free",
"used": "Used",
"load": "Load"
"load": "Load",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"unifi": {
"users": "Users",
@ -298,7 +305,11 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait"
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"quicklaunch": {
"bookmark": "Bookmark",

View File

@ -23,7 +23,14 @@
"free": "Libera",
"used": "Uzata",
"load": "Ŝarĝo",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"months": "mo",
"max": "Max",
"uptime": "UP",
"days": "d",
"hours": "h",
"minutes": "m"
},
"unifi": {
"users": "Uzantoj",
@ -244,7 +251,11 @@
"glances": {
"cpu": "Ĉefprocesoro",
"mem": "Memoro",
"wait": "Bonvolu atendi"
"wait": "Bonvolu atendi",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"quicklaunch": {
"bookmark": "Bookmark",

View File

@ -17,7 +17,14 @@
"used": "Usado",
"load": "Carga",
"cpu": "CPU",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"docker": {
"rx": "Recibido",
@ -226,7 +233,11 @@
"glances": {
"cpu": "Procesador",
"mem": "Memoria",
"wait": "Espere por favor"
"wait": "Espere por favor",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Total Observados",

View File

@ -23,7 +23,14 @@
"free": "Vapaana",
"used": "Käytetty",
"load": "Kuorma",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"docker": {
"rx": "RX",
@ -226,7 +233,11 @@
"glances": {
"wait": "Please wait",
"cpu": "CPU",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Total Observed",

View File

@ -17,7 +17,14 @@
"used": "Utilisé",
"load": "Charge",
"cpu": "CPU",
"mem": "MÉM"
"mem": "MÉM",
"max": "Max",
"temp": "TEMP",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"docker": {
"rx": "Rx",
@ -226,7 +233,11 @@
"glances": {
"cpu": "Cpu",
"mem": "Mém",
"wait": "Merci de patienter"
"wait": "Merci de patienter",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Total Observé",

View File

@ -23,7 +23,14 @@
"used": "בשימוש",
"load": "עומס",
"cpu": "CPU",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"docker": {
"rx": "RX",
@ -226,7 +233,11 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait"
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Total Observed",

View File

@ -57,7 +57,14 @@
"free": "Free",
"used": "Used",
"load": "Load",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"unifi": {
"users": "Users",
@ -234,7 +241,11 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait"
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"quicklaunch": {
"bookmark": "Bookmark",

View File

@ -14,7 +14,14 @@
"used": "Korišteno",
"load": "Opterećenje",
"cpu": "CPU",
"mem": "MEM"
"mem": "MEM",
"minutes": "m",
"max": "Max",
"uptime": "UP",
"months": "mo",
"temp": "TEMP",
"days": "d",
"hours": "h"
},
"sabnzbd": {
"rate": "Stopa",
@ -226,7 +233,11 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Pričekaj"
"wait": "Pričekaj",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Ukupno promatrano",

View File

@ -5,7 +5,14 @@
"used": "Használt",
"load": "Terhelés",
"cpu": "CPU",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"docker": {
"rx": "RX",
@ -226,7 +233,11 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait"
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Total Observed",

View File

@ -64,7 +64,14 @@
"used": "In utilizzo",
"load": "Carico",
"cpu": "CPU",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"rutorrent": {
"active": "Attivo",
@ -226,7 +233,11 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Attendere prego"
"wait": "Attendere prego",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Totale Osservato",

View File

@ -17,7 +17,11 @@
"glances": {
"mem": "MEM",
"cpu": "CPU",
"wait": "Please wait"
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"autobrr": {
"filters": "Filters",
@ -58,7 +62,14 @@
"free": "Free",
"used": "Used",
"load": "Load",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"unifi": {
"users": "Users",

View File

@ -41,7 +41,14 @@
"total": "총합",
"free": "남음",
"used": "사용",
"load": "부하"
"load": "부하",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"unifi": {
"users": "사용자",
@ -293,7 +300,11 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait"
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"quicklaunch": {
"bookmark": "Bookmark",

View File

@ -27,7 +27,14 @@
"free": "Brīvs",
"used": "Izmantojas",
"load": "Ielādē",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"unifi": {
"users": "Lietotāji",
@ -282,7 +289,11 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait"
"wait": "Please wait",
"uptime": "UP",
"days": "d",
"hours": "h",
"temp": "TEMP"
},
"quicklaunch": {
"bookmark": "Bookmark",

View File

@ -5,7 +5,14 @@
"free": "Bebas",
"used": "Telah diguna",
"load": "Beban",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"unifi": {
"uptime": "Masa Operasi Sistem",
@ -60,7 +67,11 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Sila tunggu"
"wait": "Sila tunggu",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"quicklaunch": {
"bookmark": "Tandabuku",

View File

@ -17,7 +17,14 @@
"used": "Brukt",
"load": "Last inn",
"cpu": "CPU",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"docker": {
"rx": "Mottatt",
@ -226,7 +233,11 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait"
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Total Observed",

View File

@ -1,6 +1,6 @@
{
"widget": {
"missing_type": "Missing Widget Type: {{type}}",
"missing_type": "Missend Widget Type: {{type}}",
"api_error": "API Error",
"status": "Status",
"information": "Informatie",
@ -14,7 +14,14 @@
"used": "Gebruikt",
"load": "Laadt",
"cpu": "CPU",
"mem": "MEM"
"mem": "MEM",
"days": "d",
"hours": "h",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"minutes": "m"
},
"docker": {
"rx": "RX",
@ -25,12 +32,12 @@
"error": "Fout",
"unknown": "Onbekend",
"running": "Running",
"starting": "Starting",
"unhealthy": "Unhealthy",
"not_found": "Not Found",
"exited": "Exited",
"partial": "Partial",
"healthy": "Healthy"
"starting": "Starten",
"unhealthy": "Ongezond",
"not_found": "Niet Gevonden",
"exited": "Verlaten",
"partial": "Gedeeltelijk",
"healthy": "Gezond"
},
"speedtest": {
"upload": "Upload",
@ -56,16 +63,16 @@
"transcoding": "Transcodering",
"bitrate": "Bitsnelheid",
"no_active": "Geen Actieve Steams",
"movies": "Movies",
"movies": "Films",
"series": "Series",
"episodes": "Episodes",
"songs": "Songs"
"episodes": "Afleveringen",
"songs": "Liedjes"
},
"tautulli": {
"playing": "Afspelen",
"transcoding": "Transcodering",
"bitrate": "Bitsnelheid",
"no_active": "No Active Streams"
"no_active": "Geen Actieve Streams"
},
"rutorrent": {
"active": "Actief",
@ -81,12 +88,12 @@
"movies": "Films",
"wanted": "Gezocht",
"queued": "In de wachtrij",
"missing": "Missing"
"missing": "Missend"
},
"readarr": {
"wanted": "Wanted",
"queued": "Queued",
"books": "Books"
"wanted": "Gezocht",
"queued": "In de wachtrij",
"books": "Boeken"
},
"ombi": {
"pending": "In afwachting",
@ -114,32 +121,32 @@
"total": "Totaal"
},
"overseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available",
"pending": "In Afwachting",
"approved": "Goedgekeurd",
"available": "Beschikbaar",
"processing": "Processing"
},
"sabnzbd": {
"rate": "Rate",
"queue": "Queue",
"queue": "Wachtrij",
"timeleft": "Time Left"
},
"nzbget": {
"rate": "Rate",
"remaining": "Remaining",
"downloaded": "Downloaded"
"remaining": "Resterend",
"downloaded": "Gedownload"
},
"coinmarketcap": {
"configure": "Configure one or more crypto currencies to track",
"1hour": "1 Hour",
"7days": "7 Days",
"1day": "1 Day",
"30days": "30 Days"
"1hour": "1 Uur",
"7days": "7 Dagen",
"1day": "1 Dag",
"30days": "30 Dagen"
},
"gotify": {
"apps": "Applications",
"apps": "Applicaties",
"clients": "Clients",
"messages": "Messages"
"messages": "Berichten"
},
"prowlarr": {
"enableIndexers": "Indexers",
@ -155,21 +162,21 @@
"seed": "Seed"
},
"jackett": {
"configured": "Configured",
"configured": "Geconfigureerd",
"errored": "Errored"
},
"bazarr": {
"missingEpisodes": "Missing Episodes",
"missingMovies": "Missing Movies"
"missingEpisodes": "Ontbrekende Afleveringen",
"missingMovies": "Ontbrekende Films"
},
"lidarr": {
"wanted": "Wanted",
"queued": "Queued",
"wanted": "Gezocht",
"queued": "In de wachtrij",
"albums": "Albums"
},
"adguard": {
"queries": "Queries",
"blocked": "Blocked",
"blocked": "Geblokkeerd",
"filtered": "Filtered",
"latency": "Latency"
},
@ -182,7 +189,7 @@
"mastodon": {
"user_count": "Users",
"status_count": "Posts",
"domain_count": "Domains"
"domain_count": "Domeinen"
},
"strelaysrv": {
"numActiveSessions": "Sessions",
@ -191,7 +198,7 @@
"transferRate": "Rate"
},
"authentik": {
"users": "Users",
"users": "Gebruikers",
"loginsLast24H": "Logins (24h)",
"failedLoginsLast24H": "Failed Logins (24h)"
},
@ -219,33 +226,37 @@
"empty_data": "Subsystem status unknown"
},
"plex": {
"streams": "Active Streams",
"movies": "Movies",
"tv": "TV Shows"
"streams": "Actieve Streams",
"movies": "Films",
"tv": "TV Series"
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait"
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Totaal waargenomen",
"diffsDetected": "Diffs Detected"
"diffsDetected": "Verschillen Gedetecteerd"
},
"wmo": {
"0-day": "Sunny",
"0-night": "Clear",
"1-day": "Mainly Sunny",
"1-night": "Mainly Clear",
"3-day": "Cloudy",
"99-night": "Thunderstorm With Hail",
"3-night": "Cloudy",
"2-day": "Partly Cloudy",
"2-night": "Partly Cloudy",
"45-day": "Foggy",
"45-night": "Foggy",
"48-day": "Foggy",
"48-night": "Foggy",
"0-day": "Zonnig",
"0-night": "Helder",
"1-day": "Overwegend Zonnig",
"1-night": "Overwegend Helder",
"3-day": "Bewolkt",
"99-night": "Onweersbui Met Hagel",
"3-night": "Bewolkt",
"2-day": "Gedeeltelijk Bewolkt",
"2-night": "Gedeeltelijk Bewolkt",
"45-day": "Mistig",
"45-night": "Mistig",
"48-day": "Mistig",
"48-night": "Mistig",
"51-day": "Light Drizzle",
"51-night": "Light Drizzle",
"53-day": "Drizzle",
@ -256,22 +267,22 @@
"56-night": "Light Freezing Drizzle",
"57-day": "Freezing Drizzle",
"57-night": "Freezing Drizzle",
"61-day": "Light Rain",
"61-night": "Light Rain",
"63-day": "Rain",
"63-night": "Rain",
"65-day": "Heavy Rain",
"65-night": "Heavy Rain",
"61-day": "Lichte Regen",
"61-night": "Lichte Regen",
"63-day": "Regen",
"63-night": "Regen",
"65-day": "Hevige Regen",
"65-night": "Hevige Regen",
"66-day": "Freezing Rain",
"66-night": "Freezing Rain",
"67-day": "Freezing Rain",
"67-night": "Freezing Rain",
"71-day": "Light Snow",
"71-night": "Light Snow",
"73-day": "Snow",
"73-night": "Snow",
"75-day": "Heavy Snow",
"75-night": "Heavy Snow",
"71-day": "Lichte Sneeuw",
"71-night": "Lichte Sneeuw",
"73-day": "Sneeuw",
"73-night": "Sneeuw",
"75-day": "Hevige Sneeuw",
"75-night": "Hevige Sneeuw",
"77-day": "Snow Grains",
"77-night": "Snow Grains",
"80-day": "Light Showers",
@ -284,46 +295,46 @@
"85-night": "Snow Showers",
"86-day": "Snow Showers",
"86-night": "Snow Showers",
"95-day": "Thunderstorm",
"95-night": "Thunderstorm",
"96-day": "Thunderstorm With Hail",
"96-night": "Thunderstorm With Hail",
"99-day": "Thunderstorm With Hail"
"95-day": "Onweersbui",
"95-night": "Onweersbui",
"96-day": "Onweersbui Met Hagel",
"96-night": "Onweersbui Met Hagel",
"99-day": "Onweersbui Met Hagel"
},
"quicklaunch": {
"bookmark": "Bookmark",
"bookmark": "Bladwijzer",
"service": "Service",
"search": "Search",
"search": "Zoek",
"custom": "Custom",
"visit": "Visit",
"visit": "Bezoek",
"url": "URL"
},
"homebridge": {
"available_update": "System",
"available_update": "Systeem",
"updates": "Updates",
"update_available": "Update Available",
"update_available": "Update Beschikbaar",
"up_to_date": "Up to Date",
"child_bridges": "Child Bridges",
"child_bridges_status": "{{ok}}/{{total}}",
"up": "Up",
"pending": "Pending",
"pending": "In afwachting van",
"down": "Down"
},
"autobrr": {
"approvedPushes": "Approved",
"rejectedPushes": "Rejected",
"approvedPushes": "Goedgekeurd",
"rejectedPushes": "Afgewezen",
"filters": "Filters",
"indexers": "Indexers"
},
"watchtower": {
"containers_scanned": "Scanned",
"containers_scanned": "Gescanned",
"containers_updated": "Updated",
"containers_failed": "Failed"
"containers_failed": "Gefaald"
},
"tubearchivist": {
"downloads": "Queue",
"videos": "Videos",
"channels": "Channels",
"channels": "Kanalen",
"playlists": "Playlists"
},
"truenas": {
@ -333,22 +344,22 @@
"time": "{{value, number(style: unit; unitDisplay: long;)}}"
},
"navidrome": {
"nothing_streaming": "No Active Streams",
"please_wait": "Please Wait"
"nothing_streaming": "Geen Actieve Streams",
"please_wait": "Even geduld aub"
},
"pyload": {
"speed": "Speed",
"active": "Active",
"total": "Total",
"queue": "Queue"
"speed": "Snelheid",
"active": "Actief",
"total": "Totaal",
"queue": "Wachtrij"
},
"gluetun": {
"public_ip": "Public IP",
"region": "Region",
"country": "Country"
"public_ip": "Publiek IP",
"region": "Regio",
"country": "Land"
},
"hdhomerun": {
"channels": "Channels",
"channels": "Kanalen",
"hd": "HD"
},
"ping": {
@ -357,12 +368,12 @@
},
"scrutiny": {
"passed": "Passed",
"failed": "Failed",
"unknown": "Unknown"
"failed": "Gefaald",
"unknown": "Onbekend"
},
"paperlessngx": {
"inbox": "Inbox",
"total": "Total"
"total": "Totaal"
},
"deluge": {
"download": "Download",
@ -377,18 +388,18 @@
"seed": "Seed"
},
"tdarr": {
"queue": "Queue",
"queue": "Wachtrij",
"processed": "Processed",
"errored": "Errored",
"saved": "Saved"
},
"miniflux": {
"read": "Read",
"unread": "Unread"
"read": "Gelezen",
"unread": "Ongelezen"
},
"nextdns": {
"wait": "Please Wait",
"no_devices": "No Device Data Received"
"wait": "Even geduld aub",
"no_devices": "Geen Apparaat Data Ontvangen"
},
"common": {
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
@ -396,8 +407,8 @@
},
"omada": {
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"activeUser": "Actieve apparaten",
"alerts": "Meldingen",
"connectedGateway": "Connected gateways",
"connectedSwitches": "Connected switches"
},
@ -408,8 +419,8 @@
"seed": "Seed"
},
"mikrotik": {
"cpuLoad": "CPU Load",
"memoryUsed": "Memory Used",
"cpuLoad": "CPU Belasting",
"memoryUsed": "Geheugen Gebruikt",
"uptime": "Uptime",
"numberOfLeases": "Leases"
},
@ -419,8 +430,8 @@
"streams_xepg": "XEPG Channels"
},
"opnsense": {
"cpu": "CPU Load",
"memory": "Active Memory",
"cpu": "CPU Belasting",
"memory": "Actief Geheugen",
"wanUpload": "WAN Upload",
"wanDownload": "WAN Download"
},
@ -449,13 +460,13 @@
"datastore_usage": "Datastore",
"failed_tasks_24h": "Failed Tasks 24h",
"cpu_usage": "CPU",
"memory_usage": "Memory"
"memory_usage": "Geheugen"
},
"immich": {
"users": "Users",
"photos": "Photos",
"users": "Gebruikers",
"photos": "Foto's",
"videos": "Videos",
"storage": "Storage"
"storage": "Opslag"
},
"uptimekuma": {
"up": "Sites Up",
@ -465,31 +476,31 @@
"m": "m"
},
"komga": {
"libraries": "Libraries",
"libraries": "Bibliotheken",
"series": "Series",
"books": "Books"
"books": "Boeken"
},
"mylar": {
"wanted": "Wanted",
"series": "Series",
"issues": "Issues"
"issues": "Problemen"
},
"photoprism": {
"albums": "Albums",
"photos": "Photos",
"photos": "Foto's",
"videos": "Videos",
"people": "People"
"people": "Personen"
},
"diskstation": {
"days": "Days",
"days": "Dagen",
"uptime": "Uptime",
"volumeAvailable": "Available"
"volumeAvailable": "Beschikbaar"
},
"fileflows": {
"queue": "Queue",
"queue": "Wachtrij",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
"time": "Tijd"
},
"grafana": {
"dashboards": "Dashboards",
@ -498,32 +509,32 @@
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"cpuload": "Cpu Belasting",
"memoryusage": "Geheugen Gebruik",
"freespace": "Vrije Ruimte",
"activeusers": "Actieve Gebruikers"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
"size": "Grootte",
"lastrun": "Laatste Run",
"nextrun": "Volgende Run",
"failed": "Gefaald"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
"active_workers": "Actieve Werkers",
"total_workers": "Totale Werkers",
"records_total": "Wachtrij Lengte"
},
"healthchecks": {
"new": "New",
"new": "Nieuw",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"paused": "Gepauzeerd",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
"last_ping": "Laatste Ping",
"never": "Nog geen pings"
},
"pterodactyl": {
"servers": "Servers",
@ -535,21 +546,21 @@
"targets_total": "Total Targets"
},
"minecraft": {
"players": "Players",
"version": "Version",
"players": "Spelers",
"version": "Versie",
"status": "Status",
"up": "Online",
"down": "Offline"
},
"ghostfolio": {
"gross_percent_today": "Today",
"gross_percent_1y": "One year",
"gross_percent_today": "Vandaag",
"gross_percent_1y": "Een jaar",
"gross_percent_max": "All time"
},
"audiobookshelf": {
"podcasts": "Podcasts",
"books": "Books",
"podcastsDuration": "Duration",
"booksDuration": "Duration"
"books": "Boeken",
"podcastsDuration": "Duur",
"booksDuration": "Duur"
}
}

View File

@ -14,7 +14,14 @@
"total": "Całkowite",
"free": "Wolne",
"cpu": "CPU",
"mem": "MEM"
"mem": "PAM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"emby": {
"no_active": "Brak aktywnych strumieni",
@ -71,13 +78,13 @@
"offline": "Offline",
"error": "Błąd",
"unknown": "Nieznany",
"running": "Running",
"running": "Działa",
"starting": "Starting",
"unhealthy": "Unhealthy",
"not_found": "Not Found",
"exited": "Exited",
"partial": "Partial",
"healthy": "Healthy"
"healthy": "Zdrowy"
},
"nzbget": {
"rate": "Szybkość",
@ -216,7 +223,7 @@
"devices": "Urządzenia",
"lan_devices": "Urządzenia LAN",
"wlan_devices": "Urządzenia WLAN",
"empty_data": "Subsystem status unknown"
"empty_data": "Nieznany stan"
},
"plex": {
"streams": "Aktywne strumienie",
@ -226,7 +233,11 @@
"glances": {
"cpu": "Procesor",
"mem": "Pamięć",
"wait": "Proszę czekać"
"wait": "Proszę czekać",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"diffsDetected": "Wykryto różnic",

View File

@ -51,7 +51,14 @@
"used": "Usado",
"load": "Carregamento",
"cpu": "CPU",
"mem": "MEM"
"mem": "MEM",
"max": "Max",
"temp": "TEMP",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"docker": {
"rx": "Recebido",
@ -226,7 +233,11 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Por favor aguarde"
"wait": "Por favor aguarde",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Observados",

View File

@ -17,7 +17,14 @@
"used": "Utilizado",
"load": "Carga",
"cpu": "CPU",
"mem": "MEM"
"mem": "MEM",
"max": "Max",
"temp": "TEMP",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"docker": {
"rx": "Rx",
@ -239,7 +246,11 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Por favor, aguarde"
"wait": "Por favor, aguarde",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Total Observado",

View File

@ -5,7 +5,14 @@
"total": "Total",
"free": "Disponibili",
"cpu": "Procesor",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"docker": {
"rx": "RX",
@ -226,7 +233,11 @@
"glances": {
"cpu": "Procesor",
"mem": "Memorie",
"wait": "Te rugam sa astepti"
"wait": "Te rugam sa astepti",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Total Observed",

View File

@ -17,7 +17,14 @@
"used": "Использовано",
"load": "Загрузка",
"cpu": "Процессор",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"docker": {
"rx": "Rx",
@ -226,7 +233,11 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait"
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Всего наблюдаемых",

View File

@ -167,7 +167,14 @@
"total": "Total",
"free": "Free",
"used": "Used",
"load": "Load"
"load": "Load",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"unifi": {
"users": "Users",
@ -390,7 +397,11 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait"
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"quicklaunch": {
"bookmark": "Bookmark",

View File

@ -23,7 +23,14 @@
"free": "Free",
"used": "Used",
"load": "Load",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"unifi": {
"users": "Users",
@ -226,7 +233,11 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait"
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Total Observed",

View File

@ -20,7 +20,14 @@
"free": "Ledigt",
"used": "Använt",
"cpu": "CPU",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"docker": {
"rx": "RX",
@ -226,7 +233,11 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Vänligen vänta"
"wait": "Vänligen vänta",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Total Observed",

View File

@ -40,7 +40,14 @@
"free": "మిగిలింది",
"used": "ఉపయోగించబడిన",
"load": "లోడ్",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"docker": {
"rx": "RX",
@ -226,7 +233,11 @@
"glances": {
"cpu": "సీపియూ",
"mem": "MEM",
"wait": "దయచేసి వేచి ఉండండి"
"wait": "దయచేసి వేచి ఉండండి",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "మొత్తం గమనించబడింది",

View File

@ -96,7 +96,14 @@
"total": "ทั้งหมด",
"free": "ฟรี",
"used": "ใช้แล้ว",
"load": "โหลด"
"load": "โหลด",
"hours": "h",
"minutes": "m",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d"
},
"ping": {
"error": "ข้อผิดพลาด",
@ -302,7 +309,11 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait"
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"quicklaunch": {
"bookmark": "Bookmark",

View File

@ -23,7 +23,14 @@
"free": "Boşta",
"used": "Kullanımda",
"load": "Yük",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"unifi": {
"users": "Kullanıcılar",
@ -226,7 +233,11 @@
"glances": {
"cpu": "İşlemci",
"mem": "Bellek",
"wait": "Lütfen bekleyiniz"
"wait": "Lütfen bekleyiniz",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Toplam Gözlenen",

View File

@ -128,7 +128,14 @@
"free": "Вільно",
"used": "Використано",
"load": "Навантаження",
"mem": "Пам'ять"
"mem": "Пам'ять",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"unifi": {
"users": "Користувачі",
@ -350,7 +357,11 @@
"glances": {
"cpu": "CPU",
"mem": "Пам'ять",
"wait": "Будь ласка, зачекайте"
"wait": "Будь ласка, зачекайте",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"quicklaunch": {
"bookmark": "Закладка",

View File

@ -17,7 +17,14 @@
"used": "Đã dùng",
"load": "Load",
"cpu": "CPU",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"docker": {
"rx": "RX",
@ -226,7 +233,11 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait"
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Total Observed",

View File

@ -45,7 +45,14 @@
"used": "用咗",
"load": "負荷",
"cpu": "CPU",
"mem": "MEM"
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"docker": {
"rx": "接收",
@ -226,7 +233,11 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait"
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "Total Observed",

View File

@ -17,7 +17,14 @@
"used": "已用",
"load": "负载",
"cpu": "处理器",
"mem": "内存"
"mem": "内存",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"docker": {
"rx": "接收",
@ -27,23 +34,23 @@
"offline": "离线",
"error": "错误",
"unknown": "未知",
"starting": "Starting",
"unhealthy": "Unhealthy",
"not_found": "Not Found",
"running": "Running",
"exited": "Exited",
"partial": "Partial",
"healthy": "Healthy"
"starting": "启动中",
"unhealthy": "不健康的",
"not_found": "未找到",
"running": "运行中",
"exited": "已退出",
"partial": "部分",
"healthy": "健康的"
},
"emby": {
"playing": "播放中",
"transcoding": "转码",
"bitrate": "比特率",
"no_active": "暂无播放",
"movies": "Movies",
"series": "Series",
"episodes": "Episodes",
"songs": "Songs"
"movies": "电影",
"series": "系列",
"episodes": "剧集",
"songs": "歌曲"
},
"tautulli": {
"playing": "播放中",
@ -226,7 +233,11 @@
"glances": {
"cpu": "处理器",
"mem": "内存",
"wait": "请稍等"
"wait": "请稍等",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "观察到的总数",
@ -251,69 +262,69 @@
"51-night": "小雨",
"53-day": "Drizzle",
"53-night": "Drizzle",
"55-day": "Heavy Drizzle",
"55-night": "Heavy Drizzle",
"56-day": "Light Freezing Drizzle",
"56-night": "Light Freezing Drizzle",
"57-day": "Freezing Drizzle",
"57-night": "Freezing Drizzle",
"61-day": "Light Rain",
"61-night": "Light Rain",
"63-day": "Rain",
"63-night": "Rain",
"65-day": "Heavy Rain",
"65-night": "Heavy Rain",
"66-day": "Freezing Rain",
"66-night": "Freezing Rain",
"67-day": "Freezing Rain",
"67-night": "Freezing Rain",
"55-day": "毛毛雨",
"55-night": "毛毛雨",
"56-day": "小冻毛雨",
"56-night": "小冻毛雨",
"57-day": "冻毛雨",
"57-night": "冻毛雨",
"61-day": "小雨",
"61-night": "小雨",
"63-day": "",
"63-night": "",
"65-day": "大雨",
"65-night": "大雨",
"66-day": "冻雨",
"66-night": "冻雨",
"67-day": "冻雨",
"67-night": "冻雨",
"71-day": "小雪",
"71-night": "小雪",
"73-day": "中雪",
"75-night": "大雪",
"77-day": "Snow Grains",
"77-night": "Snow Grains",
"80-day": "Light Showers",
"80-night": "Light Showers",
"81-day": "Showers",
"81-night": "Showers",
"82-day": "Heavy Showers",
"82-night": "Heavy Showers",
"85-day": "Snow Showers",
"85-night": "Snow Showers",
"86-day": "Snow Showers",
"86-night": "Snow Showers",
"95-day": "Thunderstorm",
"95-night": "Thunderstorm",
"96-day": "Thunderstorm With Hail",
"96-night": "Thunderstorm With Hail",
"99-day": "Thunderstorm With Hail",
"99-night": "Thunderstorm With Hail"
"77-day": "雪粒",
"77-night": "雪粒",
"80-day": "微阵雨",
"80-night": "微阵雨",
"81-day": "阵雨",
"81-night": "阵雨",
"82-day": "强阵雨",
"82-night": "强阵雨",
"85-day": "阵雪",
"85-night": "阵雪",
"86-day": "阵雪",
"86-night": "阵雪",
"95-day": "雷雨",
"95-night": "雷雨",
"96-day": "雷雨伴随冰雹",
"96-night": "雷雨伴随冰雹",
"99-day": "雷雨伴随冰雹",
"99-night": "雷雨伴随冰雹"
},
"quicklaunch": {
"bookmark": "书签",
"service": "服务",
"search": "搜索",
"custom": "Custom",
"visit": "Visit",
"url": "URL"
"custom": "自定",
"visit": "访问",
"url": "网址"
},
"homebridge": {
"available_update": "System",
"updates": "Updates",
"update_available": "Update Available",
"updates": "更新",
"update_available": "有可用的更新",
"up_to_date": "Up to Date",
"child_bridges": "Child Bridges",
"child_bridges_status": "{{ok}}/{{total}}",
"up": "Up",
"pending": "Pending",
"pending": "待定中",
"down": "Down"
},
"autobrr": {
"approvedPushes": "Approved",
"rejectedPushes": "Rejected",
"approvedPushes": "已核准",
"rejectedPushes": "拒绝",
"filters": "Filters",
"indexers": "Indexers"
"indexers": "索引器"
},
"watchtower": {
"containers_scanned": "以扫描",
@ -321,10 +332,10 @@
"containers_failed": "失败"
},
"tubearchivist": {
"downloads": "Queue",
"videos": "Videos",
"channels": "Channels",
"playlists": "Playlists"
"downloads": "队列",
"videos": "影片",
"channels": "频道",
"playlists": "播放清单"
},
"truenas": {
"load": "系统负载",
@ -337,18 +348,18 @@
"please_wait": "请等待"
},
"pyload": {
"speed": "Speed",
"speed": "速度",
"active": "Active",
"queue": "Queue",
"queue": "队列",
"total": "Total"
},
"gluetun": {
"public_ip": "Public IP",
"region": "Region",
"country": "Country"
"country": "国家"
},
"hdhomerun": {
"channels": "Channels",
"channels": "频道",
"hd": "HD"
},
"ping": {
@ -356,12 +367,12 @@
"ping": "Ping"
},
"scrutiny": {
"passed": "Passed",
"failed": "Failed",
"unknown": "Unknown"
"passed": "通过",
"failed": "失败",
"unknown": "未知的"
},
"paperlessngx": {
"inbox": "Inbox",
"inbox": "收件箱",
"total": "Total"
},
"deluge": {
@ -377,25 +388,25 @@
"seed": "做种"
},
"tdarr": {
"saved": "Saved",
"saved": "已保存",
"queue": "队列",
"processed": "Processed",
"processed": "已处理",
"errored": "出错"
},
"miniflux": {
"read": "Read",
"unread": "Unread"
"read": "已读",
"unread": "未读"
},
"nextdns": {
"wait": "Please Wait",
"no_devices": "No Device Data Received"
"wait": "请稍候",
"no_devices": "没有接收到设备数据"
},
"common": {
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
},
"omada": {
"connectedAp": "Connected APs",
"connectedAp": "连接中的AP",
"activeUser": "活跃设备",
"alerts": "警报",
"connectedGateway": "已连接网关",
@ -414,9 +425,9 @@
"numberOfLeases": "已连接"
},
"xteve": {
"streams_all": "All Streams",
"streams_active": "Active Streams",
"streams_xepg": "XEPG Channels"
"streams_all": "所有播放活动",
"streams_active": "正在播放",
"streams_xepg": "XEPG 频道"
},
"opnsense": {
"cpu": "处理器负载",
@ -425,24 +436,24 @@
"wanDownload": "WAN下载"
},
"moonraker": {
"printer_state": "Printer State",
"print_status": "Print Status",
"printer_state": "打印机状态",
"print_status": "打印状态",
"print_progress": "Progress",
"layers": "Layers"
"layers": ""
},
"medusa": {
"wanted": "Wanted",
"queued": "Queued",
"wanted": "关注中",
"queued": "已加入队列",
"series": "Series"
},
"octoprint": {
"printer_state": "Status",
"temp_tool": "Tool temp",
"temp_bed": "Bed temp",
"job_completion": "Completion"
"temp_tool": "喷头温度",
"temp_bed": "平台温度",
"job_completion": "完成度"
},
"cloudflared": {
"origin_ip": "Origin IP",
"origin_ip": "IP",
"status": "Status"
},
"proxmoxbackupserver": {
@ -452,10 +463,10 @@
"memory_usage": "内存"
},
"immich": {
"users": "Users",
"photos": "Photos",
"videos": "Videos",
"storage": "Storage"
"users": "使用者",
"photos": "照片",
"videos": "影片",
"storage": "储存空间"
},
"uptimekuma": {
"up": "在线网站",
@ -471,8 +482,8 @@
},
"mylar": {
"series": "系列",
"issues": "Issues",
"wanted": "Wanted"
"issues": "问题",
"wanted": "关注中"
},
"photoprism": {
"albums": "相册",
@ -486,16 +497,16 @@
"days": "天"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
"queue": "队列",
"processing": "处理中",
"processed": "已处理",
"time": "时间"
},
"grafana": {
"totalalerts": "Total Alerts",
"dashboards": "Dashboards",
"datasources": "Data Sources",
"alertstriggered": "Alerts Triggered"
"totalalerts": "警报总数",
"dashboards": "控制面板",
"datasources": "数据来源",
"alertstriggered": "触发的警报"
},
"nextcloud": {
"cpuload": "处理器负载",
@ -504,30 +515,30 @@
"activeusers": "活跃用户"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
"status": "状态",
"size": "大小",
"lastrun": "最后运行",
"nextrun": "下次运行",
"failed": "失败"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
"active_workers": "在线工作节点",
"total_workers": "工作节点总数",
"records_total": "队列长度"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
"new": "新建立",
"up": "在线的",
"grace": "延缓中",
"down": "离线",
"paused": "暂停",
"status": "状态",
"last_ping": "上次检查",
"never": "尚未检查"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
"servers": "服务器",
"nodes": "节点"
},
"prometheus": {
"targets_up": "Targets Up",
@ -535,21 +546,21 @@
"targets_total": "Total Targets"
},
"minecraft": {
"players": "Players",
"version": "Version",
"status": "Status",
"up": "Online",
"down": "Offline"
"players": "播放中",
"version": "版本",
"status": "状态",
"up": "在线的",
"down": "离线"
},
"ghostfolio": {
"gross_percent_today": "Today",
"gross_percent_1y": "One year",
"gross_percent_max": "All time"
"gross_percent_today": "今天",
"gross_percent_1y": "一年",
"gross_percent_max": "所有时间"
},
"audiobookshelf": {
"podcasts": "Podcasts",
"books": "Books",
"podcastsDuration": "Duration",
"booksDuration": "Duration"
"podcasts": "播客",
"books": "图书",
"podcastsDuration": "持续时间",
"booksDuration": "持续时间"
}
}

View File

@ -1,7 +1,7 @@
{
"widget": {
"missing_type": "遺失小工具的類型: {{type}}",
"api_error": "API錯誤",
"api_error": "API 錯誤",
"status": "狀態",
"information": "資訊",
"url": "網址",
@ -22,13 +22,13 @@
"cpu": "處理器",
"error": "錯誤",
"unknown": "未知的",
"running": "Running",
"starting": "Starting",
"unhealthy": "Unhealthy",
"not_found": "Not Found",
"running": "執行中",
"starting": "啟動中",
"unhealthy": "不健康的",
"not_found": "未找到",
"exited": "Exited",
"partial": "Partial",
"healthy": "Healthy"
"healthy": "健康的"
},
"emby": {
"playing": "正在播放",
@ -60,7 +60,14 @@
"used": "已使用",
"load": "負載",
"cpu": "CPU",
"mem": "記憶體"
"mem": "記憶體",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"nzbget": {
"rate": "速率",
@ -226,7 +233,11 @@
"glances": {
"cpu": "CPU",
"mem": "記憶體",
"wait": "請稍後"
"wait": "請稍後",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"changedetectionio": {
"totalObserved": "總監測數",
@ -371,8 +382,8 @@
"seed": "已完成下載"
},
"flood": {
"download": "下速率",
"upload": "上速率",
"download": "下速率",
"upload": "上速率",
"leech": "未完成下載",
"seed": "已完成下載"
},

View File

@ -1,6 +1,6 @@
import useSWR from "swr";
import { BiError } from "react-icons/bi";
import { FaMemory } from "react-icons/fa";
import { FaMemory, FaRegClock, FaThermometerHalf } from "react-icons/fa";
import { FiCpu } from "react-icons/fi";
import { useTranslation } from "next-i18next";
@ -64,6 +64,12 @@ export default function Widget({ options }) {
);
}
const unit = options.units === "imperial" ? "fahrenheit" : "celsius";
let mainTemp;
if (options.cputemp && data.sensors) {
mainTemp = unit === "celsius" ? data.sensors.find(s => s.label.includes("cpu_thermal")).value : data.sensors.find(s => s.label.includes("cpu_thermal")).value * 5/9 + 32;
}
return (
<div className="flex flex-col max-w:full sm:basis-auto self-center grow-0 flex-wrap ml-4">
<div className="flex flex-row self-center flex-wrap justify-between">
@ -73,7 +79,7 @@ export default function Widget({ options }) {
<div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">
{t("common.number", {
value: data.cpu,
value: data.quicklook.cpu,
style: "unit",
unit: "percent",
maximumFractionDigits: 0,
@ -81,7 +87,7 @@ export default function Widget({ options }) {
</div>
<div className="pr-1">{t("glances.cpu")}</div>
</div>
<UsageBar percent={data.cpu} />
<UsageBar percent={data.quicklook.cpu} />
</div>
</div>
<div className="flex-none flex flex-row items-center mr-3 py-1.5">
@ -90,7 +96,7 @@ export default function Widget({ options }) {
<div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">
{t("common.number", {
value: data.mem,
value: data.quicklook.mem,
style: "unit",
unit: "percent",
maximumFractionDigits: 0,
@ -98,9 +104,38 @@ export default function Widget({ options }) {
</div>
<div className="pr-1">{t("glances.mem")}</div>
</div>
<UsageBar percent={data.mem} />
<UsageBar percent={data.quicklook.mem} />
</div>
</div>
{options.cputemp && mainTemp &&
(<div className="flex-none flex flex-row items-center mr-3 py-1.5">
<FaThermometerHalf className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left min-w-[85px]">
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">
{t("common.number", {
value: mainTemp,
maximumFractionDigits: 1,
style: "unit",
unit
})}
</div>
<div className="pr-1">{t("glances.temp")}</div>
</span>
</div>
</div>)}
{options.uptime && data.uptime &&
(<div className="flex-none flex flex-row items-center mr-3 py-1.5">
<FaRegClock className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left min-w-[85px]">
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">
{data.uptime.replace(" days,", t("glances.days")).replace(/:\d\d:\d\d$/g, t("glances.hours"))}
</div>
<div className="pr-1">{t("glances.uptime")}</div>
</span>
</div>
</div>)}
</div>
{options.label && (
<div className="pt-1 text-center text-theme-800 dark:text-theme-200 text-xs">{options.label}</div>

View File

@ -0,0 +1,79 @@
import useSWR from "swr";
import { FaThermometerHalf } from "react-icons/fa";
import { BiError } from "react-icons/bi";
import { useTranslation } from "next-i18next";
export default function CpuTemp({ expanded, units }) {
const { t } = useTranslation();
const { data, error } = useSWR(`/api/widgets/resources?type=cputemp`, {
refreshInterval: 1500,
});
if (error || data?.error) {
return (
<div className="flex-none flex flex-row items-center mr-3 py-1.5">
<BiError className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-xs">{t("widget.api_error")}</span>
</div>
</div>
);
}
if (!data) {
return (
<div className="flex-none flex flex-row items-center mr-3 py-1.5 animate-pulse">
<FaThermometerHalf className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left min-w-[85px]">
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">-</div>
<div className="pr-1">{t("resources.temp")}</div>
</span>
{expanded && (
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">-</div>
<div className="pr-1">{t("resources.max")}</div>
</span>
)}
</div>
</div>
);
}
const unit = units === "imperial" ? "fahrenheit" : "celsius";
const mainTemp = (unit === "celsius") ? data.cputemp.main : data.cputemp.main * 5/9 + 32;
const maxTemp = (unit === "celsius") ? data.cputemp.max : data.cputemp.max * 5/9 + 32;
return (
<div className="flex-none flex flex-row items-center mr-3 py-1.5">
<FaThermometerHalf className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left min-w-[85px]">
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">
{t("common.number", {
value: mainTemp,
maximumFractionDigits: 1,
style: "unit",
unit
})}
</div>
<div className="pr-1">{t("resources.temp")}</div>
</span>
{expanded && (
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">
{t("common.number", {
value: maxTemp,
maximumFractionDigits: 1,
style: "unit",
unit
})}
</div>
<div className="pr-1">{t("resources.max")}</div>
</span>
)}
</div>
</div>
);
}

View File

@ -44,19 +44,19 @@ export default function Disk({ options, expanded }) {
);
}
const percent = Math.round((data.drive.usedGb / data.drive.totalGb) * 100);
const percent = Math.round((data.drive.used / data.drive.size) * 100);
return (
<div className="flex-none flex flex-row items-center mr-3 py-1.5">
<FiHardDrive className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left min-w-[85px]">
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5 pr-1">{t("common.bytes", { value: data.drive.freeGb * 1024 * 1024 * 1024 })}</div>
<div className="pl-0.5 pr-1">{t("common.bytes", { value: data.drive.available })}</div>
<div className="pr-1">{t("resources.free")}</div>
</span>
{expanded && (
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5 pr-1">{t("common.bytes", { value: data.drive.totalGb * 1024 * 1024 * 1024 })}</div>
<div className="pl-0.5 pr-1">{t("common.bytes", { value: data.drive.size })}</div>
<div className="pr-1">{t("resources.total")}</div>
</span>
)}

View File

@ -44,7 +44,7 @@ export default function Memory({ expanded }) {
);
}
const percent = Math.round((data.memory.usedMemMb / data.memory.totalMemMb) * 100);
const percent = Math.round((data.memory.used / data.memory.total) * 100);
return (
<div className="flex-none flex flex-row items-center mr-3 py-1.5">
@ -52,7 +52,7 @@ export default function Memory({ expanded }) {
<div className="flex flex-col ml-3 text-left min-w-[85px]">
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5 pr-1">
{t("common.bytes", { value: data.memory.freeMemMb * 1024 * 1024, maximumFractionDigits: 1, binary: true })}
{t("common.bytes", { value: data.memory.free, maximumFractionDigits: 1, binary: true })}
</div>
<div className="pr-1">{t("resources.free")}</div>
</span>
@ -60,7 +60,7 @@ export default function Memory({ expanded }) {
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5 pr-1">
{t("common.bytes", {
value: data.memory.totalMemMb * 1024 * 1024,
value: data.memory.total,
maximumFractionDigits: 1,
binary: true,
})}

View File

@ -1,9 +1,11 @@
import Disk from "./disk";
import Cpu from "./cpu";
import Memory from "./memory";
import CpuTemp from "./cputemp";
import Uptime from "./uptime";
export default function Resources({ options }) {
const { expanded } = options;
const { expanded, units } = options;
return (
<div className="flex flex-col max-w:full sm:basis-auto self-center grow-0 flex-wrap">
<div className="flex flex-row self-center flex-wrap justify-between">
@ -12,6 +14,8 @@ export default function Resources({ options }) {
{Array.isArray(options.disk)
? options.disk.map((disk) => <Disk key={disk} options={{ disk }} expanded={expanded} />)
: options.disk && <Disk options={options} expanded={expanded} />}
{options.cputemp && <CpuTemp expanded={expanded} units={units} />}
{options.uptime && <Uptime />}
</div>
{options.label && (
<div className="ml-6 pt-1 text-center text-theme-800 dark:text-theme-200 text-xs">{options.label}</div>

View File

@ -0,0 +1,61 @@
import useSWR from "swr";
import { FaRegClock } from "react-icons/fa";
import { BiError } from "react-icons/bi";
import { useTranslation } from "next-i18next";
export default function Uptime() {
const { t } = useTranslation();
const { data, error } = useSWR(`/api/widgets/resources?type=uptime`, {
refreshInterval: 1500,
});
if (error || data?.error) {
return (
<div className="flex-none flex flex-row items-center mr-3 py-1.5">
<BiError className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-xs">{t("widget.api_error")}</span>
</div>
</div>
);
}
if (!data) {
return (
<div className="flex-none flex flex-row items-center mr-3 py-1.5 animate-pulse">
<FaRegClock className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left min-w-[85px]">
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">-</div>
<div className="pr-1">{t("resources.temp")}</div>
</span>
</div>
</div>
);
}
const mo = Math.floor(data.uptime / (3600 * 24 * 31));
const d = Math.floor(data.uptime % (3600 * 24 * 31) / (3600 * 24));
const h = Math.floor(data.uptime % (3600 * 24) / 3600);
const m = Math.floor(data.uptime % 3600 / 60);
let uptime;
if (mo > 0) uptime = `${mo}${t("resources.months")} ${d}${t("resources.days")}`;
else if (d > 0) uptime = `${d}${t("resources.days")} ${h}${t("resources.hours")}`;
else uptime = `${h}${t("resources.hours")} ${m}${t("resources.minutes")}`;
return (
<div className="flex-none flex flex-row items-center mr-3 py-1.5">
<FaRegClock className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left min-w-[85px]">
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">
{uptime}
</div>
<div className="pr-1">{t("resources.uptime")}</div>
</span>
</div>
</div>
);
}

View File

@ -4,19 +4,16 @@ import { getPrivateWidgetOptions } from "utils/config/widget-helpers";
const logger = createLogger("glances");
export default async function handler(req, res) {
const { index } = req.query;
const privateWidgetOptions = await getPrivateWidgetOptions("glances", index);
async function retrieveFromGlancesAPI(privateWidgetOptions, endpoint) {
let errorMessage;
const url = privateWidgetOptions?.url;
if (!url) {
const errorMessage = "Missing Glances URL";
errorMessage = "Missing Glances URL";
logger.error(errorMessage);
return res.status(400).json({ error: errorMessage });
throw new Error(errorMessage);
}
const apiUrl = `${url}/api/3/quicklook`;
const apiUrl = `${url}/api/3/${endpoint}`;
const headers = {
"Accept-Encoding": "application/json"
};
@ -25,16 +22,41 @@ export default async function handler(req, res) {
}
const params = { method: "GET", headers };
const [status, contentType, data] = await httpProxy(apiUrl, params);
const [status, , data] = await httpProxy(apiUrl, params);
if (status === 401) {
logger.error("Authorization failure getting data from glances API. Data: %s", data);
errorMessage = `Authorization failure getting data from glances API. Data: ${data.toString()}`
logger.error(errorMessage);
throw new Error(errorMessage);
}
if (status !== 200) {
logger.error("HTTP %d getting data from glances API. Data: %s", status, data);
errorMessage = `HTTP ${status} getting data from glances API. Data: ${data.toString()}`
logger.error(errorMessage);
throw new Error(errorMessage);
}
if (contentType) res.setHeader("Content-Type", contentType);
return res.status(status).send(data);
return JSON.parse(Buffer.from(data).toString());
}
export default async function handler(req, res) {
const { index } = req.query;
const privateWidgetOptions = await getPrivateWidgetOptions("glances", index);
try {
const quicklookData = await retrieveFromGlancesAPI(privateWidgetOptions, "quicklook");
const data = {
quicklook: quicklookData
}
data.uptime = await retrieveFromGlancesAPI(privateWidgetOptions, "uptime");
data.sensors = await retrieveFromGlancesAPI(privateWidgetOptions, "sensors");
return res.status(200).send(data);
} catch (e) {
return res.status(400).json({ error: e.message });
}
}

View File

@ -1,15 +1,16 @@
import { existsSync } from "fs";
import { cpu, drive, mem } from "node-os-utils";
const si = require('systeminformation');
export default async function handler(req, res) {
const { type, target } = req.query;
if (type === "cpu") {
const load = await si.currentLoad();
return res.status(200).json({
cpu: {
usage: await cpu.usage(1000),
load: cpu.loadavgTime(5),
usage: load.currentLoad,
load: load.avgLoad,
},
});
}
@ -21,14 +22,29 @@ export default async function handler(req, res) {
});
}
const fsSize = await si.fsSize();
return res.status(200).json({
drive: await drive.info(target || "/"),
drive: fsSize.find(fs => fs.mount === target) ?? fsSize.find(fs => fs.mount === "/")
});
}
if (type === "memory") {
return res.status(200).json({
memory: await mem.info(),
memory: await si.mem(),
});
}
if (type === "cputemp") {
return res.status(200).json({
cputemp: await si.cpuTemperature(),
});
}
if (type === "uptime") {
const timeData = await si.time();
return res.status(200).json({
uptime: timeData.uptime
});
}

View File

@ -27,10 +27,22 @@ export default function getDockerArguments(server) {
}
if (servers[server].host) {
return {
conn: { host: servers[server].host, port: servers[server].port || null },
const res ={
conn: { host: servers[server].host },
swarm: !!servers[server].swarm,
};
}
if (servers[server].port){
res.conn.port = servers[server].port;
}
if (servers[server].tls){
res.conn.ca = readFileSync(path.join(process.cwd(), "config", servers[server].tls.caFile));
res.conn.cert = readFileSync(path.join(process.cwd(), "config", servers[server].tls.certFile));
res.conn.key = readFileSync(path.join(process.cwd(), "config", servers[server].tls.keyFile));
}
return res;
}
return servers[server];

View File

@ -1,7 +1,7 @@
import useSWR from "swr";
import { useTranslation } from "next-i18next";
import calculateCPUPercent from "./stats-helpers";
import { calculateCPUPercent, calculateUsedMemory } from "./stats-helpers";
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
@ -47,7 +47,7 @@ export default function Component({ service }) {
<Container service={service}>
<Block label="docker.cpu" value={t("common.percent", { value: calculateCPUPercent(statsData.stats) })} />
{statsData.stats.memory_stats.usage &&
<Block label="docker.mem" value={t("common.bytes", { value: statsData.stats.memory_stats.usage })} />
<Block label="docker.mem" value={t("common.bytes", { value: calculateUsedMemory(statsData.stats) })} />
}
{network && (
<>

View File

@ -1,4 +1,4 @@
export default function calculateCPUPercent(stats) {
export function calculateCPUPercent(stats) {
let cpuPercent = 0.0;
const cpuDelta = stats.cpu_stats.cpu_usage.total_usage - stats.precpu_stats.cpu_usage.total_usage;
const systemDelta = stats.cpu_stats.system_cpu_usage - stats.precpu_stats.system_cpu_usage;
@ -9,3 +9,7 @@ export default function calculateCPUPercent(stats) {
return Math.round(cpuPercent * 10) / 10;
}
export function calculateUsedMemory(stats) {
return stats.memory_stats.usage - (stats.memory_stats.stats.cache ?? 0)
}