Merge branch 'main' into enhanced-glances
This commit is contained in:
commit
28180f0e81
9
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
9
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@ -69,11 +69,18 @@ body:
|
|||||||
attributes:
|
attributes:
|
||||||
label: Browser Logs
|
label: Browser Logs
|
||||||
description: Please review and provide any logs from the browser, if relevant
|
description: Please review and provide any logs from the browser, if relevant
|
||||||
|
- type: textarea
|
||||||
|
id: troubleshooting
|
||||||
|
attributes:
|
||||||
|
label: Troubleshooting
|
||||||
|
description: Please include output from your [troubleshooting tests](https://gethomepage.dev/en/more/troubleshooting/#service-widget-errors). If this is a service widget issue and you do not include any information here your issue will be closed. If it is not, indicate e.g. 'n/a'
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: other
|
id: other
|
||||||
attributes:
|
attributes:
|
||||||
label: Other
|
label: Other
|
||||||
description: Please include output from your troubleshooting tests, if relevant. Include any other relevant details. E.g. service version or API version, docker version, etc.
|
description: Include any other relevant details. E.g. service version or API version, docker version, etc.
|
||||||
- type: checkboxes
|
- type: checkboxes
|
||||||
id: pre-flight
|
id: pre-flight
|
||||||
attributes:
|
attributes:
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
@ -580,7 +582,7 @@
|
|||||||
"passes": "Passes"
|
"passes": "Passes"
|
||||||
},
|
},
|
||||||
"whatsupdocker": {
|
"whatsupdocker": {
|
||||||
"monitoring": "Monitoring",
|
"monitoring": "Supervisió",
|
||||||
"updates": "Updates"
|
"updates": "Actualitzacions"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
"downloads": "Fronta"
|
"downloads": "Fronta"
|
||||||
},
|
},
|
||||||
"truenas": {
|
"truenas": {
|
||||||
"load": "Vytížení systému",
|
"load": "Zatížení systému",
|
||||||
"uptime": "Doba spuštění",
|
"uptime": "Doba spuštění",
|
||||||
"alerts": "Upozornění",
|
"alerts": "Upozornění",
|
||||||
"time": "{{value, number(style: unit; unitDisplay: long;)}}"
|
"time": "{{value, number(style: unit; unitDisplay: long;)}}"
|
||||||
@ -30,19 +30,19 @@
|
|||||||
"placeholder": "Hledat…"
|
"placeholder": "Hledat…"
|
||||||
},
|
},
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": "CPU",
|
"cpu": "PROC",
|
||||||
"total": "Celkem",
|
"total": "Celkem",
|
||||||
"free": "Volné",
|
"free": "Volné",
|
||||||
"used": "Využité",
|
"used": "Využité",
|
||||||
"load": "Vytížení",
|
"load": "Zatížení",
|
||||||
"mem": "RAM",
|
"mem": "PAM",
|
||||||
"max": "Max",
|
"max": "Max.",
|
||||||
"uptime": "UP",
|
"uptime": "BĚŽÍ",
|
||||||
"months": "mo",
|
"months": "měs.",
|
||||||
"days": "d",
|
"days": "d",
|
||||||
"hours": "h",
|
"hours": "h",
|
||||||
"minutes": "m",
|
"minutes": "m",
|
||||||
"temp": "TEMP"
|
"temp": "TEPLOTA"
|
||||||
},
|
},
|
||||||
"unifi": {
|
"unifi": {
|
||||||
"users": "Uživatelé",
|
"users": "Uživatelé",
|
||||||
@ -64,8 +64,8 @@
|
|||||||
"docker": {
|
"docker": {
|
||||||
"rx": "RX",
|
"rx": "RX",
|
||||||
"tx": "TX",
|
"tx": "TX",
|
||||||
"mem": "RAM",
|
"mem": "PAM",
|
||||||
"cpu": "CPU",
|
"cpu": "PROC",
|
||||||
"offline": "Offline",
|
"offline": "Offline",
|
||||||
"error": "Chyba",
|
"error": "Chyba",
|
||||||
"unknown": "Neznámý",
|
"unknown": "Neznámý",
|
||||||
@ -85,7 +85,7 @@
|
|||||||
"movies": "Filmy",
|
"movies": "Filmy",
|
||||||
"series": "Seriály",
|
"series": "Seriály",
|
||||||
"episodes": "Epizody",
|
"episodes": "Epizody",
|
||||||
"songs": "Písničky"
|
"songs": "Skladby"
|
||||||
},
|
},
|
||||||
"changedetectionio": {
|
"changedetectionio": {
|
||||||
"totalObserved": "Celkem zjištěno",
|
"totalObserved": "Celkem zjištěno",
|
||||||
@ -106,7 +106,7 @@
|
|||||||
"streams": "Aktivní streamy",
|
"streams": "Aktivní streamy",
|
||||||
"movies": "Filmy",
|
"movies": "Filmy",
|
||||||
"tv": "Seriály",
|
"tv": "Seriály",
|
||||||
"albums": "Albums"
|
"albums": "Alba"
|
||||||
},
|
},
|
||||||
"sabnzbd": {
|
"sabnzbd": {
|
||||||
"rate": "Rychlost",
|
"rate": "Rychlost",
|
||||||
@ -188,9 +188,9 @@
|
|||||||
"ping": "Ping"
|
"ping": "Ping"
|
||||||
},
|
},
|
||||||
"portainer": {
|
"portainer": {
|
||||||
"running": "Běží",
|
"running": "Spuštěno",
|
||||||
"stopped": "Zastaveno",
|
"stopped": "Zastaveno",
|
||||||
"total": "Celkově"
|
"total": "Celkem"
|
||||||
},
|
},
|
||||||
"traefik": {
|
"traefik": {
|
||||||
"routers": "Routery",
|
"routers": "Routery",
|
||||||
@ -300,17 +300,17 @@
|
|||||||
"failedLoginsLast24H": "Neúspěšná přihlášení (24h)"
|
"failedLoginsLast24H": "Neúspěšná přihlášení (24h)"
|
||||||
},
|
},
|
||||||
"proxmox": {
|
"proxmox": {
|
||||||
"mem": "RAM",
|
"mem": "PAM",
|
||||||
"cpu": "CPU",
|
"cpu": "PROC",
|
||||||
"lxc": "LXC",
|
"lxc": "LXC",
|
||||||
"vms": "Virtuální Stroje"
|
"vms": "Virtuální Stroje"
|
||||||
},
|
},
|
||||||
"glances": {
|
"glances": {
|
||||||
"cpu": "CPU",
|
"cpu": "PROC",
|
||||||
"mem": "RAM",
|
"mem": "PAM",
|
||||||
"wait": "Prosím počkejte",
|
"wait": "Prosím počkejte",
|
||||||
"temp": "TEMP",
|
"temp": "TEPLOTA",
|
||||||
"uptime": "UP",
|
"uptime": "BĚŽÍ",
|
||||||
"days": "d",
|
"days": "d",
|
||||||
"hours": "h"
|
"hours": "h"
|
||||||
},
|
},
|
||||||
@ -334,9 +334,9 @@
|
|||||||
"down": "Vypnutý"
|
"down": "Vypnutý"
|
||||||
},
|
},
|
||||||
"watchtower": {
|
"watchtower": {
|
||||||
"containers_scanned": "Naskenováno",
|
"containers_scanned": "Prohledáno",
|
||||||
"containers_updated": "Aktualizováno",
|
"containers_updated": "Aktualizováno",
|
||||||
"containers_failed": "Chyba"
|
"containers_failed": "Selhalo"
|
||||||
},
|
},
|
||||||
"autobrr": {
|
"autobrr": {
|
||||||
"approvedPushes": "Schváleno",
|
"approvedPushes": "Schváleno",
|
||||||
@ -460,7 +460,7 @@
|
|||||||
"proxmoxbackupserver": {
|
"proxmoxbackupserver": {
|
||||||
"datastore_usage": "Datové úložiště",
|
"datastore_usage": "Datové úložiště",
|
||||||
"failed_tasks_24h": "Neúspěšné úlohy 24h",
|
"failed_tasks_24h": "Neúspěšné úlohy 24h",
|
||||||
"cpu_usage": "CPU",
|
"cpu_usage": "PROC",
|
||||||
"memory_usage": "Paměť"
|
"memory_usage": "Paměť"
|
||||||
},
|
},
|
||||||
"immich": {
|
"immich": {
|
||||||
@ -504,16 +504,18 @@
|
|||||||
"time": "Čas"
|
"time": "Čas"
|
||||||
},
|
},
|
||||||
"grafana": {
|
"grafana": {
|
||||||
"dashboards": "Přístrojové panely",
|
"dashboards": "Nástěnky",
|
||||||
"datasources": "Zdroje dat",
|
"datasources": "Zdroje dat",
|
||||||
"totalalerts": "Celkový počet upozornění",
|
"totalalerts": "Celkový počet upozornění",
|
||||||
"alertstriggered": "Spuštěné výstrahy"
|
"alertstriggered": "Spuštěné výstrahy"
|
||||||
},
|
},
|
||||||
"nextcloud": {
|
"nextcloud": {
|
||||||
"cpuload": "CPU zatížení",
|
"cpuload": "Zatížení procesoru",
|
||||||
"memoryusage": "Využití paměti",
|
"memoryusage": "Využití paměti",
|
||||||
"freespace": "Volný prostor",
|
"freespace": "Volný prostor",
|
||||||
"activeusers": "Aktivní uživatelé"
|
"activeusers": "Aktivní uživatelé",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Stav",
|
"status": "Stav",
|
||||||
@ -565,22 +567,22 @@
|
|||||||
"booksDuration": "Trvání"
|
"booksDuration": "Trvání"
|
||||||
},
|
},
|
||||||
"homeassistant": {
|
"homeassistant": {
|
||||||
"people_home": "People Home",
|
"people_home": "Lidí doma",
|
||||||
"lights_on": "Lights On",
|
"lights_on": "Rozsvícená světla",
|
||||||
"switches_on": "Switches On"
|
"switches_on": "Zapnuté přepínače"
|
||||||
},
|
},
|
||||||
"freshrss": {
|
"freshrss": {
|
||||||
"subscriptions": "Subscriptions",
|
"subscriptions": "Odběry",
|
||||||
"unread": "Unread"
|
"unread": "Nepřečteno"
|
||||||
},
|
},
|
||||||
"channelsdvrserver": {
|
"channelsdvrserver": {
|
||||||
"shows": "Shows",
|
"shows": "Shows",
|
||||||
"recordings": "Recordings",
|
"recordings": "Nahrávky",
|
||||||
"scheduled": "Scheduled",
|
"scheduled": "Naplánováno",
|
||||||
"passes": "Passes"
|
"passes": "Průchody"
|
||||||
},
|
},
|
||||||
"whatsupdocker": {
|
"whatsupdocker": {
|
||||||
"monitoring": "Monitoring",
|
"monitoring": "Sledování",
|
||||||
"updates": "Updates"
|
"updates": "Aktualizace"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "CPU Last",
|
"cpuload": "CPU Last",
|
||||||
"memoryusage": "RAM Verbrauch",
|
"memoryusage": "RAM Verbrauch",
|
||||||
"freespace": "Freier Speicher",
|
"freespace": "Freier Speicher",
|
||||||
"activeusers": "Aktive Nutzer"
|
"activeusers": "Aktive Nutzer",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -530,7 +530,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -553,7 +553,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"activeusers": "Active Users",
|
"activeusers": "Active Users",
|
||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space"
|
"freespace": "Free Space",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Carga de la CPU",
|
"cpuload": "Carga de la CPU",
|
||||||
"memoryusage": "Uso de la memoria",
|
"memoryusage": "Uso de la memoria",
|
||||||
"freespace": "Espacio libre",
|
"freespace": "Espacio libre",
|
||||||
"activeusers": "Usuarios activos"
|
"activeusers": "Usuarios activos",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Estado",
|
"status": "Estado",
|
||||||
@ -580,7 +582,7 @@
|
|||||||
"passes": "Pases"
|
"passes": "Pases"
|
||||||
},
|
},
|
||||||
"whatsupdocker": {
|
"whatsupdocker": {
|
||||||
"monitoring": "Monitoring",
|
"monitoring": "Supervisión",
|
||||||
"updates": "Updates"
|
"updates": "Actualizaciones"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numshares": "Shared Items",
|
||||||
|
"numfiles": "Files"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"freespace": "Espace Libre",
|
"freespace": "Espace Libre",
|
||||||
"activeusers": "Utilisateurs Actifs",
|
"activeusers": "Utilisateurs Actifs",
|
||||||
"cpuload": "Charge Cpu",
|
"cpuload": "Charge Cpu",
|
||||||
"memoryusage": "Utilisation Mémoire"
|
"memoryusage": "Utilisation Mémoire",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Statut",
|
"status": "Statut",
|
||||||
@ -580,7 +582,7 @@
|
|||||||
"passes": "Passes"
|
"passes": "Passes"
|
||||||
},
|
},
|
||||||
"whatsupdocker": {
|
"whatsupdocker": {
|
||||||
"monitoring": "Monitoring",
|
"monitoring": "Conteneurs",
|
||||||
"updates": "Updates"
|
"updates": "Mises à jour"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -229,7 +229,7 @@
|
|||||||
"streams": "Aktivni prijenosi",
|
"streams": "Aktivni prijenosi",
|
||||||
"movies": "Filmovi",
|
"movies": "Filmovi",
|
||||||
"tv": "TV emisije",
|
"tv": "TV emisije",
|
||||||
"albums": "Albums"
|
"albums": "Albumi"
|
||||||
},
|
},
|
||||||
"glances": {
|
"glances": {
|
||||||
"cpu": "CPU",
|
"cpu": "CPU",
|
||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Cpu opterećenje",
|
"cpuload": "Cpu opterećenje",
|
||||||
"memoryusage": "Korištenje memorije",
|
"memoryusage": "Korištenje memorije",
|
||||||
"freespace": "Slobodna memorija",
|
"freespace": "Slobodna memorija",
|
||||||
"activeusers": "Aktivni korisnici"
|
"activeusers": "Aktivni korisnici",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Stanje",
|
"status": "Stanje",
|
||||||
@ -581,6 +583,6 @@
|
|||||||
},
|
},
|
||||||
"whatsupdocker": {
|
"whatsupdocker": {
|
||||||
"monitoring": "Monitoring",
|
"monitoring": "Monitoring",
|
||||||
"updates": "Updates"
|
"updates": "Aktualiziranja"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -534,7 +534,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Cpu Belasting",
|
"cpuload": "Cpu Belasting",
|
||||||
"memoryusage": "Geheugen Gebruik",
|
"memoryusage": "Geheugen Gebruik",
|
||||||
"freespace": "Vrije Ruimte",
|
"freespace": "Vrije Ruimte",
|
||||||
"activeusers": "Actieve Gebruikers"
|
"activeusers": "Actieve Gebruikers",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Carga de CPU",
|
"cpuload": "Carga de CPU",
|
||||||
"memoryusage": "Memória Utilizada",
|
"memoryusage": "Memória Utilizada",
|
||||||
"freespace": "Espaço Livre",
|
"freespace": "Espaço Livre",
|
||||||
"activeusers": "Usuários Ativos"
|
"activeusers": "Usuários Ativos",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -522,7 +522,9 @@
|
|||||||
"cpuload": "Carga de CPU",
|
"cpuload": "Carga de CPU",
|
||||||
"memoryusage": "Memória Utilizada",
|
"memoryusage": "Memória Utilizada",
|
||||||
"freespace": "Espaço Livre",
|
"freespace": "Espaço Livre",
|
||||||
"activeusers": "Utilizadores Ativos"
|
"activeusers": "Utilizadores Ativos",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Estado",
|
"status": "Estado",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"activeusers": "Active Users",
|
"activeusers": "Active Users",
|
||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space"
|
"freespace": "Free Space",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
"status": "Статус",
|
"status": "Статус",
|
||||||
"information": "Информация",
|
"information": "Информация",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"raw_error": "Raw Error",
|
"raw_error": "Необработанная ошибка",
|
||||||
"response_data": "Данные ответа"
|
"response_data": "Данные ответа"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
@ -17,14 +17,14 @@
|
|||||||
"used": "Использовано",
|
"used": "Использовано",
|
||||||
"load": "Загрузка",
|
"load": "Загрузка",
|
||||||
"cpu": "Процессор",
|
"cpu": "Процессор",
|
||||||
"mem": "MEM",
|
"mem": "Память",
|
||||||
"temp": "TEMP",
|
"temp": "Температура",
|
||||||
"max": "Max",
|
"max": "Макс.",
|
||||||
"uptime": "UP",
|
"uptime": "UP",
|
||||||
"months": "mo",
|
"months": "мес",
|
||||||
"days": "d",
|
"days": "д",
|
||||||
"hours": "h",
|
"hours": "ч",
|
||||||
"minutes": "m"
|
"minutes": "м"
|
||||||
},
|
},
|
||||||
"docker": {
|
"docker": {
|
||||||
"rx": "Rx",
|
"rx": "Rx",
|
||||||
@ -34,34 +34,34 @@
|
|||||||
"offline": "Не в сети",
|
"offline": "Не в сети",
|
||||||
"error": "Ошибка",
|
"error": "Ошибка",
|
||||||
"unknown": "Неизвестный",
|
"unknown": "Неизвестный",
|
||||||
"running": "Running",
|
"running": "Запущенно",
|
||||||
"starting": "Starting",
|
"starting": "Запускается",
|
||||||
"unhealthy": "Unhealthy",
|
"unhealthy": "Не живой",
|
||||||
"not_found": "Not Found",
|
"not_found": "Не найден",
|
||||||
"exited": "Exited",
|
"exited": "Существует",
|
||||||
"partial": "Partial",
|
"partial": "Частично",
|
||||||
"healthy": "Healthy"
|
"healthy": "Живой"
|
||||||
},
|
},
|
||||||
"emby": {
|
"emby": {
|
||||||
"playing": "Воспроизведение",
|
"playing": "Воспроизведение",
|
||||||
"transcoding": "Транскодирование",
|
"transcoding": "Транскодирование",
|
||||||
"bitrate": "Битрейт",
|
"bitrate": "Битрейт",
|
||||||
"no_active": "Нет активных потоков",
|
"no_active": "Нет активных потоков",
|
||||||
"movies": "Movies",
|
"movies": "Фильмы",
|
||||||
"series": "Series",
|
"series": "Сериалы",
|
||||||
"episodes": "Episodes",
|
"episodes": "Эпизоды",
|
||||||
"songs": "Songs"
|
"songs": "Песни"
|
||||||
},
|
},
|
||||||
"tautulli": {
|
"tautulli": {
|
||||||
"playing": "Воспроизведение",
|
"playing": "Воспроизведение",
|
||||||
"transcoding": "Транскодирование",
|
"transcoding": "Транскодирование",
|
||||||
"bitrate": "Битрейт",
|
"bitrate": "Битрейт",
|
||||||
"no_active": "No Active Streams"
|
"no_active": "Нет активных трансляций"
|
||||||
},
|
},
|
||||||
"rutorrent": {
|
"rutorrent": {
|
||||||
"active": "Активный",
|
"active": "Активный",
|
||||||
"upload": "Загрузить",
|
"upload": "Загрузка",
|
||||||
"download": "Скачать"
|
"download": "Загрузка"
|
||||||
},
|
},
|
||||||
"sonarr": {
|
"sonarr": {
|
||||||
"wanted": "Хотел",
|
"wanted": "Хотел",
|
||||||
@ -72,12 +72,12 @@
|
|||||||
"wanted": "Хотел",
|
"wanted": "Хотел",
|
||||||
"queued": "В очереди",
|
"queued": "В очереди",
|
||||||
"movies": "Фильмы",
|
"movies": "Фильмы",
|
||||||
"missing": "Missing"
|
"missing": "Пропущено"
|
||||||
},
|
},
|
||||||
"readarr": {
|
"readarr": {
|
||||||
"wanted": "Wanted",
|
"wanted": "Хотел",
|
||||||
"queued": "Queued",
|
"queued": "В очереди",
|
||||||
"books": "Books"
|
"books": "Книги"
|
||||||
},
|
},
|
||||||
"ombi": {
|
"ombi": {
|
||||||
"pending": "Ожидание",
|
"pending": "Ожидание",
|
||||||
@ -95,12 +95,12 @@
|
|||||||
"gravity": "Сила тяжести"
|
"gravity": "Сила тяжести"
|
||||||
},
|
},
|
||||||
"speedtest": {
|
"speedtest": {
|
||||||
"upload": "Загрузка",
|
"upload": "Отдача",
|
||||||
"download": "Скачать",
|
"download": "Загрузка",
|
||||||
"ping": "пинг"
|
"ping": "Пинг"
|
||||||
},
|
},
|
||||||
"portainer": {
|
"portainer": {
|
||||||
"running": "Запущено",
|
"running": "Запущенно",
|
||||||
"stopped": "Остановлено",
|
"stopped": "Остановлено",
|
||||||
"total": "Всего"
|
"total": "Всего"
|
||||||
},
|
},
|
||||||
@ -121,92 +121,92 @@
|
|||||||
"updating": "Обновление"
|
"updating": "Обновление"
|
||||||
},
|
},
|
||||||
"overseerr": {
|
"overseerr": {
|
||||||
"pending": "Pending",
|
"pending": "Ожидание",
|
||||||
"approved": "Approved",
|
"approved": "Одобрено",
|
||||||
"available": "Available",
|
"available": "Доступно",
|
||||||
"processing": "Processing"
|
"processing": "Обработка"
|
||||||
},
|
},
|
||||||
"sabnzbd": {
|
"sabnzbd": {
|
||||||
"rate": "Rate",
|
"rate": "Оценка",
|
||||||
"queue": "Queue",
|
"queue": "Очередь",
|
||||||
"timeleft": "Time Left"
|
"timeleft": "Осталось времени"
|
||||||
},
|
},
|
||||||
"nzbget": {
|
"nzbget": {
|
||||||
"rate": "Rate",
|
"rate": "Оценка",
|
||||||
"remaining": "Remaining",
|
"remaining": "Осталось",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Загружено"
|
||||||
},
|
},
|
||||||
"coinmarketcap": {
|
"coinmarketcap": {
|
||||||
"configure": "Configure one or more crypto currencies to track",
|
"configure": "Настройте одну или несколько криптовалют для отслеживания",
|
||||||
"1hour": "1 Hour",
|
"1hour": "1 Час",
|
||||||
"1day": "1 Day",
|
"1day": "1 День",
|
||||||
"7days": "7 Days",
|
"7days": "7 Дней",
|
||||||
"30days": "30 Дней"
|
"30days": "30 Дней"
|
||||||
},
|
},
|
||||||
"gotify": {
|
"gotify": {
|
||||||
"apps": "Applications",
|
"apps": "Приложения",
|
||||||
"clients": "Clients",
|
"clients": "Клиенты",
|
||||||
"messages": "Messages"
|
"messages": "Сообщения"
|
||||||
},
|
},
|
||||||
"prowlarr": {
|
"prowlarr": {
|
||||||
"enableIndexers": "Indexers",
|
"enableIndexers": "Индексаторы",
|
||||||
"numberOfGrabs": "Grabs",
|
"numberOfGrabs": "Захваты",
|
||||||
"numberOfQueries": "Queries",
|
"numberOfQueries": "Запросы",
|
||||||
"numberOfFailGrabs": "Fail Grabs",
|
"numberOfFailGrabs": "Неудачные захваты",
|
||||||
"numberOfFailQueries": "Fail Queries"
|
"numberOfFailQueries": "Неудачные запросы"
|
||||||
},
|
},
|
||||||
"transmission": {
|
"transmission": {
|
||||||
"download": "Download",
|
"download": "Загрузка",
|
||||||
"upload": "Upload",
|
"upload": "Отдача",
|
||||||
"leech": "Leech",
|
"leech": "Пиры",
|
||||||
"seed": "Seed"
|
"seed": "Сиды"
|
||||||
},
|
},
|
||||||
"jackett": {
|
"jackett": {
|
||||||
"configured": "Configured",
|
"configured": "Настроено",
|
||||||
"errored": "Errored"
|
"errored": "Ошибочно"
|
||||||
},
|
},
|
||||||
"bazarr": {
|
"bazarr": {
|
||||||
"missingEpisodes": "Missing Episodes",
|
"missingEpisodes": "Отсутствующие эпизоды",
|
||||||
"missingMovies": "Missing Movies"
|
"missingMovies": "Отсутствующие фильмы"
|
||||||
},
|
},
|
||||||
"lidarr": {
|
"lidarr": {
|
||||||
"wanted": "Wanted",
|
"wanted": "Хотел",
|
||||||
"queued": "Queued",
|
"queued": "В очереди",
|
||||||
"albums": "Albums"
|
"albums": "Альбомы"
|
||||||
},
|
},
|
||||||
"adguard": {
|
"adguard": {
|
||||||
"queries": "Queries",
|
"queries": "Запросы",
|
||||||
"blocked": "Blocked",
|
"blocked": "Заблокировано",
|
||||||
"filtered": "Filtered",
|
"filtered": "Отсортировано",
|
||||||
"latency": "Latency"
|
"latency": "Задержка"
|
||||||
},
|
},
|
||||||
"qbittorrent": {
|
"qbittorrent": {
|
||||||
"download": "Download",
|
"download": "Загрузка",
|
||||||
"upload": "Upload",
|
"upload": "Отдача",
|
||||||
"leech": "Leech",
|
"leech": "Пиры",
|
||||||
"seed": "Seed"
|
"seed": "Сиды"
|
||||||
},
|
},
|
||||||
"mastodon": {
|
"mastodon": {
|
||||||
"user_count": "Users",
|
"user_count": "Пользователи",
|
||||||
"status_count": "Posts",
|
"status_count": "Посты",
|
||||||
"domain_count": "Domains"
|
"domain_count": "Домены"
|
||||||
},
|
},
|
||||||
"strelaysrv": {
|
"strelaysrv": {
|
||||||
"numConnections": "Connections",
|
"numConnections": "Соединения",
|
||||||
"dataRelayed": "Relayed",
|
"dataRelayed": "Ретранслировано",
|
||||||
"transferRate": "Rate",
|
"transferRate": "Оценка",
|
||||||
"numActiveSessions": "Sessions"
|
"numActiveSessions": "Сессий"
|
||||||
},
|
},
|
||||||
"authentik": {
|
"authentik": {
|
||||||
"users": "Users",
|
"users": "Пользователи",
|
||||||
"loginsLast24H": "Logins (24h)",
|
"loginsLast24H": "Входы (24ч)",
|
||||||
"failedLoginsLast24H": "Failed Logins (24h)"
|
"failedLoginsLast24H": "Неудачные входы (24ч)"
|
||||||
},
|
},
|
||||||
"proxmox": {
|
"proxmox": {
|
||||||
"mem": "MEM",
|
"mem": "Память",
|
||||||
"cpu": "CPU",
|
"cpu": "Процессор",
|
||||||
"lxc": "LXC",
|
"lxc": "LXC",
|
||||||
"vms": "VMs"
|
"vms": "Виртуальные машины"
|
||||||
},
|
},
|
||||||
"unifi": {
|
"unifi": {
|
||||||
"users": "Пользователи",
|
"users": "Пользователи",
|
||||||
@ -215,152 +215,152 @@
|
|||||||
"wan": "WAN",
|
"wan": "WAN",
|
||||||
"lan_users": "Пользователи LAN",
|
"lan_users": "Пользователи LAN",
|
||||||
"wlan_users": "Пользователи WLAN",
|
"wlan_users": "Пользователи WLAN",
|
||||||
"up": "UP",
|
"up": "Работает",
|
||||||
"down": "DOWN",
|
"down": "Не работает",
|
||||||
"wait": "Подождите",
|
"wait": "Пожалуйста, подождите",
|
||||||
"lan": "LAN",
|
"lan": "LAN",
|
||||||
"wlan": "WLAN",
|
"wlan": "WLAN",
|
||||||
"devices": "Устройства",
|
"devices": "Устройства",
|
||||||
"lan_devices": "Устройства подключённые по LAN",
|
"lan_devices": "Устройства подключённые по LAN",
|
||||||
"wlan_devices": "WLAN Devices",
|
"wlan_devices": "Подключения WLAN",
|
||||||
"empty_data": "Subsystem status unknown"
|
"empty_data": "Статус системы неизвестен"
|
||||||
},
|
},
|
||||||
"plex": {
|
"plex": {
|
||||||
"streams": "Active Streams",
|
"streams": "Активные трансляции",
|
||||||
"movies": "Movies",
|
"movies": "Фильмы",
|
||||||
"tv": "TV Shows",
|
"tv": "Передачи",
|
||||||
"albums": "Albums"
|
"albums": "Альбомы"
|
||||||
},
|
},
|
||||||
"glances": {
|
"glances": {
|
||||||
"cpu": "CPU",
|
"cpu": "Процессор",
|
||||||
"mem": "MEM",
|
"mem": "Память",
|
||||||
"wait": "Please wait",
|
"wait": "Пожалуйста, подождите",
|
||||||
"temp": "TEMP",
|
"temp": "Температура",
|
||||||
"uptime": "UP",
|
"uptime": "Работает",
|
||||||
"days": "d",
|
"days": "д",
|
||||||
"hours": "h"
|
"hours": "ч"
|
||||||
},
|
},
|
||||||
"changedetectionio": {
|
"changedetectionio": {
|
||||||
"totalObserved": "Всего наблюдаемых",
|
"totalObserved": "Всего наблюдаемых",
|
||||||
"diffsDetected": "Обнаружены различия"
|
"diffsDetected": "Обнаружены различия"
|
||||||
},
|
},
|
||||||
"wmo": {
|
"wmo": {
|
||||||
"0-day": "Sunny",
|
"0-day": "Солнечно",
|
||||||
"0-night": "Clear",
|
"0-night": "Ясно",
|
||||||
"71-night": "Light Snow",
|
"71-night": "Лёгкий снег",
|
||||||
"73-day": "Snow",
|
"73-day": "Снег",
|
||||||
"73-night": "Snow",
|
"73-night": "Снег",
|
||||||
"75-day": "Heavy Snow",
|
"75-day": "Сильный снегопад",
|
||||||
"75-night": "Heavy Snow",
|
"75-night": "Сильный снегопад",
|
||||||
"77-day": "Snow Grains",
|
"77-day": "Снежные зёрна",
|
||||||
"77-night": "Snow Grains",
|
"77-night": "Снежные зёрна",
|
||||||
"80-day": "Light Showers",
|
"80-day": "Слабый дождь",
|
||||||
"80-night": "Light Showers",
|
"80-night": "Слабый дождь",
|
||||||
"81-day": "Showers",
|
"81-day": "Ливень",
|
||||||
"1-day": "Mainly Sunny",
|
"1-day": "Преимущественно солнечно",
|
||||||
"1-night": "Mainly Clear",
|
"1-night": "Преимущественно ясно",
|
||||||
"2-day": "Partly Cloudy",
|
"2-day": "Переменная облачность",
|
||||||
"2-night": "Partly Cloudy",
|
"2-night": "Переменная облачность",
|
||||||
"3-day": "Cloudy",
|
"3-day": "Облачно",
|
||||||
"3-night": "Cloudy",
|
"3-night": "Облачно",
|
||||||
"45-day": "Foggy",
|
"45-day": "Туманно",
|
||||||
"45-night": "Foggy",
|
"45-night": "Туманно",
|
||||||
"48-day": "Foggy",
|
"48-day": "Туманно",
|
||||||
"48-night": "Foggy",
|
"48-night": "Туманно",
|
||||||
"51-day": "Light Drizzle",
|
"51-day": "Слегка моросит",
|
||||||
"51-night": "Light Drizzle",
|
"51-night": "Слегка моросит",
|
||||||
"53-day": "Drizzle",
|
"53-day": "Моросит",
|
||||||
"53-night": "Drizzle",
|
"53-night": "Моросит",
|
||||||
"55-day": "Heavy Drizzle",
|
"55-day": "Сильно моросит",
|
||||||
"55-night": "Heavy Drizzle",
|
"55-night": "Сильно моросит",
|
||||||
"56-day": "Light Freezing Drizzle",
|
"56-day": "Лёгкая изморозь",
|
||||||
"56-night": "Light Freezing Drizzle",
|
"56-night": "Лёгкая изморозь",
|
||||||
"57-day": "Freezing Drizzle",
|
"57-day": "Изморозь",
|
||||||
"57-night": "Freezing Drizzle",
|
"57-night": "Изморозь",
|
||||||
"61-day": "Light Rain",
|
"61-day": "Лёгкий дождь",
|
||||||
"61-night": "Light Rain",
|
"61-night": "Лёгкий дождь",
|
||||||
"63-day": "Rain",
|
"63-day": "Дождь",
|
||||||
"63-night": "Rain",
|
"63-night": "Дождь",
|
||||||
"65-day": "Heavy Rain",
|
"65-day": "Сильный дождь",
|
||||||
"65-night": "Heavy Rain",
|
"65-night": "Сильный дождь",
|
||||||
"66-day": "Freezing Rain",
|
"66-day": "Ледяной дождь",
|
||||||
"66-night": "Freezing Rain",
|
"66-night": "Ледяной дождь",
|
||||||
"67-day": "Freezing Rain",
|
"67-day": "Ледяной дождь",
|
||||||
"67-night": "Freezing Rain",
|
"67-night": "Ледяной дождь",
|
||||||
"71-day": "Light Snow",
|
"71-day": "Лёгкий снег",
|
||||||
"81-night": "Showers",
|
"81-night": "Ливень",
|
||||||
"82-day": "Heavy Showers",
|
"82-day": "Сильный ливень",
|
||||||
"82-night": "Heavy Showers",
|
"82-night": "Сильный ливень",
|
||||||
"85-day": "Snow Showers",
|
"85-day": "Снегопад",
|
||||||
"85-night": "Snow Showers",
|
"85-night": "Снегопад",
|
||||||
"86-day": "Snow Showers",
|
"86-day": "Снегопад",
|
||||||
"86-night": "Snow Showers",
|
"86-night": "Снегопад",
|
||||||
"95-day": "Thunderstorm",
|
"95-day": "Гроза",
|
||||||
"95-night": "Thunderstorm",
|
"95-night": "Гроза",
|
||||||
"96-day": "Thunderstorm With Hail",
|
"96-day": "Гроза с градом",
|
||||||
"96-night": "Thunderstorm With Hail",
|
"96-night": "Гроза с градом",
|
||||||
"99-day": "Thunderstorm With Hail",
|
"99-day": "Гроза с градом",
|
||||||
"99-night": "Thunderstorm With Hail"
|
"99-night": "Гроза с градом"
|
||||||
},
|
},
|
||||||
"quicklaunch": {
|
"quicklaunch": {
|
||||||
"bookmark": "Bookmark",
|
"bookmark": "Закладка",
|
||||||
"service": "Service",
|
"service": "Сервис",
|
||||||
"search": "Search",
|
"search": "Поиск",
|
||||||
"custom": "Custom",
|
"custom": "Пользовательский",
|
||||||
"visit": "Visit",
|
"visit": "Посетить",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
},
|
},
|
||||||
"homebridge": {
|
"homebridge": {
|
||||||
"available_update": "System",
|
"available_update": "Система",
|
||||||
"updates": "Updates",
|
"updates": "Обновления",
|
||||||
"update_available": "Update Available",
|
"update_available": "Доступные обновления",
|
||||||
"up_to_date": "Up to Date",
|
"up_to_date": "Обновлено",
|
||||||
"child_bridges_status": "{{ok}}/{{total}}",
|
"child_bridges_status": "{{ok}}/{{total}}",
|
||||||
"child_bridges": "Child Bridges",
|
"child_bridges": "Дочерние мосты",
|
||||||
"up": "Up",
|
"up": "Включено",
|
||||||
"pending": "Pending",
|
"pending": "В ожидании",
|
||||||
"down": "Down"
|
"down": "Выключено"
|
||||||
},
|
},
|
||||||
"autobrr": {
|
"autobrr": {
|
||||||
"approvedPushes": "Approved",
|
"approvedPushes": "Одобрено",
|
||||||
"rejectedPushes": "Rejected",
|
"rejectedPushes": "Отклонено",
|
||||||
"filters": "Filters",
|
"filters": "Фильтры",
|
||||||
"indexers": "Indexers"
|
"indexers": "Индексаторы"
|
||||||
},
|
},
|
||||||
"watchtower": {
|
"watchtower": {
|
||||||
"containers_scanned": "Scanned",
|
"containers_scanned": "Отсканировано",
|
||||||
"containers_updated": "Updated",
|
"containers_updated": "Обновлено",
|
||||||
"containers_failed": "Failed"
|
"containers_failed": "Неудачно"
|
||||||
},
|
},
|
||||||
"tubearchivist": {
|
"tubearchivist": {
|
||||||
"downloads": "Queue",
|
"downloads": "Очередь",
|
||||||
"videos": "Videos",
|
"videos": "Видео",
|
||||||
"channels": "Channels",
|
"channels": "Каналы",
|
||||||
"playlists": "Playlists"
|
"playlists": "Плейлисты"
|
||||||
},
|
},
|
||||||
"truenas": {
|
"truenas": {
|
||||||
"load": "System Load",
|
"load": "Загрузка системы",
|
||||||
"uptime": "Uptime",
|
"uptime": "Время работы",
|
||||||
"alerts": "Alerts",
|
"alerts": "Уведомления",
|
||||||
"time": "{{value, number(style: unit; unitDisplay: long;)}}"
|
"time": "{{value, number(style: unit; unitDisplay: long;)}}"
|
||||||
},
|
},
|
||||||
"navidrome": {
|
"navidrome": {
|
||||||
"nothing_streaming": "No Active Streams",
|
"nothing_streaming": "Нет активных трансляций",
|
||||||
"please_wait": "Please Wait"
|
"please_wait": "Пожалуйста, подождите"
|
||||||
},
|
},
|
||||||
"pyload": {
|
"pyload": {
|
||||||
"speed": "Speed",
|
"speed": "Скорость",
|
||||||
"active": "Active",
|
"active": "Активный",
|
||||||
"queue": "Queue",
|
"queue": "Очередь",
|
||||||
"total": "Total"
|
"total": "Всего"
|
||||||
},
|
},
|
||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Public IP",
|
"public_ip": "Публичный IP",
|
||||||
"region": "Region",
|
"region": "Регион",
|
||||||
"country": "Country"
|
"country": "Страна"
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Channels",
|
"channels": "Каналы",
|
||||||
"hd": "HD"
|
"hd": "HD"
|
||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
@ -368,219 +368,221 @@
|
|||||||
"ping": "Пинг"
|
"ping": "Пинг"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"failed": "Failed",
|
"failed": "Неудачно",
|
||||||
"unknown": "Unknown",
|
"unknown": "Неизвестный",
|
||||||
"passed": "Passed"
|
"passed": "Пройдено"
|
||||||
},
|
},
|
||||||
"paperlessngx": {
|
"paperlessngx": {
|
||||||
"inbox": "Inbox",
|
"inbox": "Входящие",
|
||||||
"total": "Total"
|
"total": "Всего"
|
||||||
},
|
},
|
||||||
"deluge": {
|
"deluge": {
|
||||||
"download": "Download",
|
"download": "Загрузка",
|
||||||
"upload": "Upload",
|
"upload": "Отдача",
|
||||||
"leech": "Leech",
|
"leech": "Пиры",
|
||||||
"seed": "Seed"
|
"seed": "Сиды"
|
||||||
},
|
},
|
||||||
"flood": {
|
"flood": {
|
||||||
"upload": "Upload",
|
"upload": "Отдача",
|
||||||
"download": "Download",
|
"download": "Загрузка",
|
||||||
"leech": "Leech",
|
"leech": "Пиры",
|
||||||
"seed": "Seed"
|
"seed": "Сиды"
|
||||||
},
|
},
|
||||||
"tdarr": {
|
"tdarr": {
|
||||||
"queue": "Queue",
|
"queue": "Очередь",
|
||||||
"processed": "Processed",
|
"processed": "Обработано",
|
||||||
"errored": "Errored",
|
"errored": "Ошибочно",
|
||||||
"saved": "Saved"
|
"saved": "Сохранено"
|
||||||
},
|
},
|
||||||
"miniflux": {
|
"miniflux": {
|
||||||
"read": "Read",
|
"read": "Прочитанные",
|
||||||
"unread": "Unread"
|
"unread": "Непрочитанные"
|
||||||
},
|
},
|
||||||
"nextdns": {
|
"nextdns": {
|
||||||
"wait": "Please Wait",
|
"wait": "Пожалуйста, подождите",
|
||||||
"no_devices": "No Device Data Received"
|
"no_devices": "Данные устройства не получены"
|
||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||||
},
|
},
|
||||||
"omada": {
|
"omada": {
|
||||||
"connectedSwitches": "Connected switches",
|
"connectedSwitches": "Подключенные свитчи",
|
||||||
"connectedAp": "Connected APs",
|
"connectedAp": "Подключенные точки доступа",
|
||||||
"activeUser": "Active devices",
|
"activeUser": "Активные устройства",
|
||||||
"alerts": "Alerts",
|
"alerts": "Оповещения",
|
||||||
"connectedGateway": "Connected gateways"
|
"connectedGateway": "Подключенные шлюзы"
|
||||||
},
|
},
|
||||||
"downloadstation": {
|
"downloadstation": {
|
||||||
"download": "Download",
|
"download": "Загрузка",
|
||||||
"upload": "Upload",
|
"upload": "Отдача",
|
||||||
"leech": "Leech",
|
"leech": "Пиры",
|
||||||
"seed": "Seed"
|
"seed": "Сиды"
|
||||||
},
|
},
|
||||||
"mikrotik": {
|
"mikrotik": {
|
||||||
"cpuLoad": "CPU Load",
|
"cpuLoad": "Загрузка процессора",
|
||||||
"memoryUsed": "Memory Used",
|
"memoryUsed": "Использование памяти",
|
||||||
"uptime": "Uptime",
|
"uptime": "Время работы",
|
||||||
"numberOfLeases": "Leases"
|
"numberOfLeases": "Аренды"
|
||||||
},
|
},
|
||||||
"xteve": {
|
"xteve": {
|
||||||
"streams_all": "All Streams",
|
"streams_all": "Все трансляции",
|
||||||
"streams_active": "Active Streams",
|
"streams_active": "Активные трансляции",
|
||||||
"streams_xepg": "XEPG Channels"
|
"streams_xepg": "XEPG-каналы"
|
||||||
},
|
},
|
||||||
"opnsense": {
|
"opnsense": {
|
||||||
"cpu": "CPU Load",
|
"cpu": "Загрузка процессора",
|
||||||
"memory": "Active Memory",
|
"memory": "Активная память",
|
||||||
"wanUpload": "WAN Upload",
|
"wanUpload": "Отдача через WAN",
|
||||||
"wanDownload": "WAN Download"
|
"wanDownload": "Загрузка через WAN"
|
||||||
},
|
},
|
||||||
"moonraker": {
|
"moonraker": {
|
||||||
"printer_state": "Printer State",
|
"printer_state": "Состояние принтера",
|
||||||
"print_status": "Print Status",
|
"print_status": "Статус печати",
|
||||||
"print_progress": "Progress",
|
"print_progress": "Прогресс",
|
||||||
"layers": "Layers"
|
"layers": "Слои"
|
||||||
},
|
},
|
||||||
"medusa": {
|
"medusa": {
|
||||||
"wanted": "Wanted",
|
"wanted": "Хотел",
|
||||||
"queued": "Queued",
|
"queued": "В очереди",
|
||||||
"series": "Series"
|
"series": "Сериалы"
|
||||||
},
|
},
|
||||||
"octoprint": {
|
"octoprint": {
|
||||||
"printer_state": "Status",
|
"printer_state": "Статус",
|
||||||
"temp_tool": "Tool temp",
|
"temp_tool": "Температура инструмента",
|
||||||
"temp_bed": "Bed temp",
|
"temp_bed": "Температура стола",
|
||||||
"job_completion": "Completion"
|
"job_completion": "Завершение"
|
||||||
},
|
},
|
||||||
"cloudflared": {
|
"cloudflared": {
|
||||||
"origin_ip": "Origin IP",
|
"origin_ip": "IP источника",
|
||||||
"status": "Status"
|
"status": "Статус"
|
||||||
},
|
},
|
||||||
"proxmoxbackupserver": {
|
"proxmoxbackupserver": {
|
||||||
"datastore_usage": "Datastore",
|
"datastore_usage": "Хранилище данных",
|
||||||
"failed_tasks_24h": "Failed Tasks 24h",
|
"failed_tasks_24h": "Неудачные задачи 24ч",
|
||||||
"cpu_usage": "CPU",
|
"cpu_usage": "Процессор",
|
||||||
"memory_usage": "Memory"
|
"memory_usage": "Память"
|
||||||
},
|
},
|
||||||
"immich": {
|
"immich": {
|
||||||
"users": "Users",
|
"users": "Пользователи",
|
||||||
"photos": "Photos",
|
"photos": "Фотографии",
|
||||||
"videos": "Videos",
|
"videos": "Видео",
|
||||||
"storage": "Storage"
|
"storage": "Хранилище"
|
||||||
},
|
},
|
||||||
"uptimekuma": {
|
"uptimekuma": {
|
||||||
"up": "Sites Up",
|
"up": "Сайтов включено",
|
||||||
"down": "Sites Down",
|
"down": "Сайтов выключено",
|
||||||
"uptime": "Uptime",
|
"uptime": "Время работы",
|
||||||
"incident": "Incident",
|
"incident": "Инцидент",
|
||||||
"m": "m"
|
"m": "м"
|
||||||
},
|
},
|
||||||
"komga": {
|
"komga": {
|
||||||
"libraries": "Libraries",
|
"libraries": "Библиотеки",
|
||||||
"series": "Series",
|
"series": "Серии",
|
||||||
"books": "Books"
|
"books": "Книги"
|
||||||
},
|
},
|
||||||
"mylar": {
|
"mylar": {
|
||||||
"series": "Series",
|
"series": "Серии",
|
||||||
"issues": "Issues",
|
"issues": "Проблемы",
|
||||||
"wanted": "Wanted"
|
"wanted": "Хотел"
|
||||||
},
|
},
|
||||||
"photoprism": {
|
"photoprism": {
|
||||||
"albums": "Albums",
|
"albums": "Альбомы",
|
||||||
"photos": "Photos",
|
"photos": "Фотографии",
|
||||||
"videos": "Videos",
|
"videos": "Видео",
|
||||||
"people": "People"
|
"people": "Люди"
|
||||||
},
|
},
|
||||||
"diskstation": {
|
"diskstation": {
|
||||||
"days": "Days",
|
"days": "Дней",
|
||||||
"uptime": "Uptime",
|
"uptime": "Время работы",
|
||||||
"volumeAvailable": "Available"
|
"volumeAvailable": "Доступно"
|
||||||
},
|
},
|
||||||
"fileflows": {
|
"fileflows": {
|
||||||
"queue": "Queue",
|
"queue": "Очередь",
|
||||||
"processing": "Processing",
|
"processing": "Обработка",
|
||||||
"processed": "Processed",
|
"processed": "Обработано",
|
||||||
"time": "Time"
|
"time": "Время"
|
||||||
},
|
},
|
||||||
"grafana": {
|
"grafana": {
|
||||||
"dashboards": "Dashboards",
|
"dashboards": "Панели мониторинга",
|
||||||
"datasources": "Data Sources",
|
"datasources": "Источники данных",
|
||||||
"totalalerts": "Total Alerts",
|
"totalalerts": "Всего уведомлений",
|
||||||
"alertstriggered": "Alerts Triggered"
|
"alertstriggered": "Уведомлений сработало"
|
||||||
},
|
},
|
||||||
"nextcloud": {
|
"nextcloud": {
|
||||||
"cpuload": "Cpu Load",
|
"cpuload": "Загрузка процессора",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Использование памяти",
|
||||||
"freespace": "Free Space",
|
"freespace": "Свободное место",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Активные пользователи",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Статус",
|
||||||
"size": "Size",
|
"size": "Размер",
|
||||||
"lastrun": "Last Run",
|
"lastrun": "Последний запуск",
|
||||||
"nextrun": "Next Run",
|
"nextrun": "Следующий запуск",
|
||||||
"failed": "Failed"
|
"failed": "Неудачно"
|
||||||
},
|
},
|
||||||
"unmanic": {
|
"unmanic": {
|
||||||
"active_workers": "Active Workers",
|
"active_workers": "Активные воркеры",
|
||||||
"total_workers": "Total Workers",
|
"total_workers": "Всего воркеров",
|
||||||
"records_total": "Queue Length"
|
"records_total": "Длина запроса"
|
||||||
},
|
},
|
||||||
"healthchecks": {
|
"healthchecks": {
|
||||||
"new": "New",
|
"new": "Новые",
|
||||||
"up": "Online",
|
"up": "Онлайн",
|
||||||
"grace": "In Grace Period",
|
"grace": "В льготный период",
|
||||||
"down": "Offline",
|
"down": "Офлайн",
|
||||||
"paused": "Paused",
|
"paused": "Приостановлено",
|
||||||
"status": "Status",
|
"status": "Статус",
|
||||||
"last_ping": "Last Ping",
|
"last_ping": "Последний пинг",
|
||||||
"never": "No pings yet"
|
"never": "Пока нет пингов"
|
||||||
},
|
},
|
||||||
"pterodactyl": {
|
"pterodactyl": {
|
||||||
"servers": "Servers",
|
"servers": "Сервера",
|
||||||
"nodes": "Nodes"
|
"nodes": "Узлы"
|
||||||
},
|
},
|
||||||
"prometheus": {
|
"prometheus": {
|
||||||
"targets_up": "Targets Up",
|
"targets_up": "Целей включено",
|
||||||
"targets_down": "Targets Down",
|
"targets_down": "Целей выключено",
|
||||||
"targets_total": "Total Targets"
|
"targets_total": "Всего целей"
|
||||||
},
|
},
|
||||||
"minecraft": {
|
"minecraft": {
|
||||||
"players": "Players",
|
"players": "Игроков",
|
||||||
"version": "Version",
|
"version": "Версия",
|
||||||
"status": "Status",
|
"status": "Статус",
|
||||||
"up": "Online",
|
"up": "Онлайн",
|
||||||
"down": "Offline"
|
"down": "Офлайн"
|
||||||
},
|
},
|
||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Сегодня",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "1 год",
|
||||||
"gross_percent_max": "All time"
|
"gross_percent_max": "За всё время"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Подкасты",
|
||||||
"books": "Books",
|
"books": "Книги",
|
||||||
"podcastsDuration": "Duration",
|
"podcastsDuration": "Продолжительность",
|
||||||
"booksDuration": "Duration"
|
"booksDuration": "Продолжительность"
|
||||||
},
|
},
|
||||||
"homeassistant": {
|
"homeassistant": {
|
||||||
"people_home": "People Home",
|
"people_home": "Людей дома",
|
||||||
"lights_on": "Lights On",
|
"lights_on": "Включено света",
|
||||||
"switches_on": "Switches On"
|
"switches_on": "Включено переключателей"
|
||||||
},
|
},
|
||||||
"freshrss": {
|
"freshrss": {
|
||||||
"subscriptions": "Subscriptions",
|
"subscriptions": "Подписки",
|
||||||
"unread": "Unread"
|
"unread": "Непрочитанные"
|
||||||
},
|
},
|
||||||
"channelsdvrserver": {
|
"channelsdvrserver": {
|
||||||
"shows": "Shows",
|
"shows": "Сериалы",
|
||||||
"recordings": "Recordings",
|
"recordings": "Записи",
|
||||||
"scheduled": "Scheduled",
|
"scheduled": "Запланировано",
|
||||||
"passes": "Passes"
|
"passes": "Пройдено"
|
||||||
},
|
},
|
||||||
"whatsupdocker": {
|
"whatsupdocker": {
|
||||||
"monitoring": "Monitoring",
|
"monitoring": "Мониторинг",
|
||||||
"updates": "Updates"
|
"updates": "Обновления"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -534,7 +534,9 @@
|
|||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users",
|
"activeusers": "Active Users",
|
||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage"
|
"memoryusage": "Memory Usage",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -68,7 +68,9 @@
|
|||||||
"cpuload": "CPU obremenitev",
|
"cpuload": "CPU obremenitev",
|
||||||
"memoryusage": "Uporabljen spomin",
|
"memoryusage": "Uporabljen spomin",
|
||||||
"freespace": "Prostor na voljo",
|
"freespace": "Prostor na voljo",
|
||||||
"activeusers": "Aktivni uporabniki"
|
"activeusers": "Aktivni uporabniki",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Stanje",
|
"status": "Stanje",
|
||||||
@ -193,10 +195,10 @@
|
|||||||
"streams": "Aktivna vsebina",
|
"streams": "Aktivna vsebina",
|
||||||
"movies": "Filmi",
|
"movies": "Filmi",
|
||||||
"tv": "TV serije",
|
"tv": "TV serije",
|
||||||
"albums": "Albums"
|
"albums": "Albumi"
|
||||||
},
|
},
|
||||||
"sabnzbd": {
|
"sabnzbd": {
|
||||||
"rate": "Hitrost prenosa",
|
"rate": "Hitrost",
|
||||||
"queue": "Vrsta",
|
"queue": "Vrsta",
|
||||||
"timeleft": "Preostali čas"
|
"timeleft": "Preostali čas"
|
||||||
},
|
},
|
||||||
@ -236,7 +238,7 @@
|
|||||||
},
|
},
|
||||||
"radarr": {
|
"radarr": {
|
||||||
"wanted": "Iskano",
|
"wanted": "Iskano",
|
||||||
"missing": "Manjkajoče",
|
"missing": "Manjka",
|
||||||
"queued": "V vrsti",
|
"queued": "V vrsti",
|
||||||
"movies": "Filmi"
|
"movies": "Filmi"
|
||||||
},
|
},
|
||||||
@ -341,7 +343,7 @@
|
|||||||
},
|
},
|
||||||
"proxmox": {
|
"proxmox": {
|
||||||
"lxc": "LXC",
|
"lxc": "LXC",
|
||||||
"vms": "VM-ji",
|
"vms": "VM",
|
||||||
"mem": "MEM",
|
"mem": "MEM",
|
||||||
"cpu": "CPU"
|
"cpu": "CPU"
|
||||||
},
|
},
|
||||||
@ -521,10 +523,10 @@
|
|||||||
"storage": "Shramba"
|
"storage": "Shramba"
|
||||||
},
|
},
|
||||||
"uptimekuma": {
|
"uptimekuma": {
|
||||||
"up": "Povezanih strani",
|
"up": "Deluje",
|
||||||
"down": "Nepovezanih strani",
|
"down": "Ne deluje",
|
||||||
"uptime": "Čas delovanja",
|
"uptime": "Čas delovanja",
|
||||||
"incident": "Težave",
|
"incident": "Incident",
|
||||||
"m": "m"
|
"m": "m"
|
||||||
},
|
},
|
||||||
"komga": {
|
"komga": {
|
||||||
@ -561,11 +563,11 @@
|
|||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasti",
|
"podcasts": "Podcasti",
|
||||||
"books": "Knjige",
|
"books": "Knjige",
|
||||||
"podcastsDuration": "Dolžina",
|
"podcastsDuration": "Trajanje",
|
||||||
"booksDuration": "Dolžina"
|
"booksDuration": "Trajanje"
|
||||||
},
|
},
|
||||||
"homeassistant": {
|
"homeassistant": {
|
||||||
"people_home": "Ljudi doma",
|
"people_home": "Ljudje doma",
|
||||||
"lights_on": "Vklopljene luči",
|
"lights_on": "Vklopljene luči",
|
||||||
"switches_on": "Vklopljena stikala"
|
"switches_on": "Vklopljena stikala"
|
||||||
},
|
},
|
||||||
@ -580,7 +582,7 @@
|
|||||||
"passes": "Prehodi"
|
"passes": "Prehodi"
|
||||||
},
|
},
|
||||||
"whatsupdocker": {
|
"whatsupdocker": {
|
||||||
"monitoring": "Monitoring",
|
"monitoring": "Se spremlja",
|
||||||
"updates": "Updates"
|
"updates": "Posodobitve"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Навантаження Cpu",
|
"cpuload": "Навантаження Cpu",
|
||||||
"memoryusage": "Використання пам'яті",
|
"memoryusage": "Використання пам'яті",
|
||||||
"freespace": "Вільного місця",
|
"freespace": "Вільного місця",
|
||||||
"activeusers": "Активні користувачі"
|
"activeusers": "Активні користувачі",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Статус",
|
"status": "Статус",
|
||||||
@ -580,7 +582,7 @@
|
|||||||
"passes": "Перепустки"
|
"passes": "Перепустки"
|
||||||
},
|
},
|
||||||
"whatsupdocker": {
|
"whatsupdocker": {
|
||||||
"monitoring": "Monitoring",
|
"monitoring": "Спостереження",
|
||||||
"updates": "Updates"
|
"updates": "Оновлення"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memory Usage",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Free Space",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Active Users"
|
"activeusers": "Active Users",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"lastrun": "Last Run",
|
"lastrun": "Last Run",
|
||||||
|
|||||||
@ -229,7 +229,7 @@
|
|||||||
"streams": "活动流",
|
"streams": "活动流",
|
||||||
"movies": "电影",
|
"movies": "电影",
|
||||||
"tv": "电视节目",
|
"tv": "电视节目",
|
||||||
"albums": "Albums"
|
"albums": "专辑"
|
||||||
},
|
},
|
||||||
"glances": {
|
"glances": {
|
||||||
"cpu": "处理器",
|
"cpu": "处理器",
|
||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "处理器负载",
|
"cpuload": "处理器负载",
|
||||||
"memoryusage": "内存占用",
|
"memoryusage": "内存占用",
|
||||||
"freespace": "剩余空间",
|
"freespace": "剩余空间",
|
||||||
"activeusers": "活跃用户"
|
"activeusers": "活跃用户",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "状态",
|
"status": "状态",
|
||||||
@ -542,9 +544,9 @@
|
|||||||
"nodes": "节点"
|
"nodes": "节点"
|
||||||
},
|
},
|
||||||
"prometheus": {
|
"prometheus": {
|
||||||
"targets_up": "Targets Up",
|
"targets_up": "目标离线",
|
||||||
"targets_down": "Targets Down",
|
"targets_down": "目标在线",
|
||||||
"targets_total": "Total Targets"
|
"targets_total": "总目标"
|
||||||
},
|
},
|
||||||
"minecraft": {
|
"minecraft": {
|
||||||
"players": "播放中",
|
"players": "播放中",
|
||||||
@ -570,13 +572,13 @@
|
|||||||
"switches_on": "Switches On"
|
"switches_on": "Switches On"
|
||||||
},
|
},
|
||||||
"freshrss": {
|
"freshrss": {
|
||||||
"subscriptions": "Subscriptions",
|
"subscriptions": "订阅",
|
||||||
"unread": "Unread"
|
"unread": "未读"
|
||||||
},
|
},
|
||||||
"channelsdvrserver": {
|
"channelsdvrserver": {
|
||||||
"shows": "Shows",
|
"shows": "节目",
|
||||||
"recordings": "Recordings",
|
"recordings": "录像",
|
||||||
"scheduled": "Scheduled",
|
"scheduled": "已计划的",
|
||||||
"passes": "Passes"
|
"passes": "Passes"
|
||||||
},
|
},
|
||||||
"whatsupdocker": {
|
"whatsupdocker": {
|
||||||
|
|||||||
@ -26,8 +26,8 @@
|
|||||||
"starting": "啟動中",
|
"starting": "啟動中",
|
||||||
"unhealthy": "不健康的",
|
"unhealthy": "不健康的",
|
||||||
"not_found": "未找到",
|
"not_found": "未找到",
|
||||||
"exited": "Exited",
|
"exited": "已退出",
|
||||||
"partial": "Partial",
|
"partial": "部分",
|
||||||
"healthy": "健康的"
|
"healthy": "健康的"
|
||||||
},
|
},
|
||||||
"emby": {
|
"emby": {
|
||||||
@ -35,10 +35,10 @@
|
|||||||
"transcoding": "轉碼",
|
"transcoding": "轉碼",
|
||||||
"bitrate": "位元率",
|
"bitrate": "位元率",
|
||||||
"no_active": "無播放活動",
|
"no_active": "無播放活動",
|
||||||
"movies": "Movies",
|
"movies": "電影",
|
||||||
"series": "Series",
|
"series": "影集",
|
||||||
"episodes": "Episodes",
|
"episodes": "集",
|
||||||
"songs": "Songs"
|
"songs": "曲目"
|
||||||
},
|
},
|
||||||
"tautulli": {
|
"tautulli": {
|
||||||
"playing": "正在播放",
|
"playing": "正在播放",
|
||||||
@ -61,13 +61,13 @@
|
|||||||
"load": "負載",
|
"load": "負載",
|
||||||
"cpu": "CPU",
|
"cpu": "CPU",
|
||||||
"mem": "記憶體",
|
"mem": "記憶體",
|
||||||
"temp": "TEMP",
|
"temp": "溫度",
|
||||||
"max": "Max",
|
"max": "最大",
|
||||||
"uptime": "UP",
|
"uptime": "運行時間",
|
||||||
"months": "mo",
|
"months": "月",
|
||||||
"days": "d",
|
"days": "天",
|
||||||
"hours": "h",
|
"hours": "時",
|
||||||
"minutes": "m"
|
"minutes": "分"
|
||||||
},
|
},
|
||||||
"nzbget": {
|
"nzbget": {
|
||||||
"rate": "速率",
|
"rate": "速率",
|
||||||
@ -98,7 +98,7 @@
|
|||||||
"readarr": {
|
"readarr": {
|
||||||
"wanted": "關注中",
|
"wanted": "關注中",
|
||||||
"queued": "已加入佇列",
|
"queued": "已加入佇列",
|
||||||
"books": "書籍"
|
"books": "叢書"
|
||||||
},
|
},
|
||||||
"ombi": {
|
"ombi": {
|
||||||
"pending": "待下載",
|
"pending": "待下載",
|
||||||
@ -114,7 +114,7 @@
|
|||||||
"pihole": {
|
"pihole": {
|
||||||
"queries": "查詢",
|
"queries": "查詢",
|
||||||
"blocked": "已阻擋",
|
"blocked": "已阻擋",
|
||||||
"gravity": "Gravity"
|
"gravity": "阻擋清單"
|
||||||
},
|
},
|
||||||
"speedtest": {
|
"speedtest": {
|
||||||
"upload": "上行速率",
|
"upload": "上行速率",
|
||||||
@ -229,16 +229,16 @@
|
|||||||
"streams": "正在播放",
|
"streams": "正在播放",
|
||||||
"movies": "電影",
|
"movies": "電影",
|
||||||
"tv": "影集",
|
"tv": "影集",
|
||||||
"albums": "Albums"
|
"albums": "專輯"
|
||||||
},
|
},
|
||||||
"glances": {
|
"glances": {
|
||||||
"cpu": "CPU",
|
"cpu": "CPU",
|
||||||
"mem": "記憶體",
|
"mem": "記憶體",
|
||||||
"wait": "請稍後",
|
"wait": "請稍後",
|
||||||
"temp": "TEMP",
|
"temp": "溫度",
|
||||||
"uptime": "UP",
|
"uptime": "運行時間",
|
||||||
"days": "d",
|
"days": "天",
|
||||||
"hours": "h"
|
"hours": "時"
|
||||||
},
|
},
|
||||||
"changedetectionio": {
|
"changedetectionio": {
|
||||||
"totalObserved": "總監測數",
|
"totalObserved": "總監測數",
|
||||||
@ -307,8 +307,8 @@
|
|||||||
"service": "服務",
|
"service": "服務",
|
||||||
"search": "搜尋",
|
"search": "搜尋",
|
||||||
"custom": "自訂",
|
"custom": "自訂",
|
||||||
"visit": "Visit",
|
"visit": "訪問",
|
||||||
"url": "URL"
|
"url": "網址"
|
||||||
},
|
},
|
||||||
"homebridge": {
|
"homebridge": {
|
||||||
"available_update": "系統",
|
"available_update": "系統",
|
||||||
@ -317,9 +317,9 @@
|
|||||||
"up_to_date": "已更新至最新",
|
"up_to_date": "已更新至最新",
|
||||||
"child_bridges": "Child Bridges",
|
"child_bridges": "Child Bridges",
|
||||||
"child_bridges_status": "{{ok}}/{{total}}",
|
"child_bridges_status": "{{ok}}/{{total}}",
|
||||||
"up": "Up",
|
"up": "在線",
|
||||||
"pending": "Pending",
|
"pending": "處理中",
|
||||||
"down": "Down"
|
"down": "離線"
|
||||||
},
|
},
|
||||||
"autobrr": {
|
"autobrr": {
|
||||||
"approvedPushes": "已核准",
|
"approvedPushes": "已核准",
|
||||||
@ -479,7 +479,7 @@
|
|||||||
"komga": {
|
"komga": {
|
||||||
"libraries": "文庫",
|
"libraries": "文庫",
|
||||||
"series": "叢刊",
|
"series": "叢刊",
|
||||||
"books": "書刊"
|
"books": "叢書"
|
||||||
},
|
},
|
||||||
"mylar": {
|
"mylar": {
|
||||||
"series": "系列",
|
"series": "系列",
|
||||||
@ -513,7 +513,9 @@
|
|||||||
"cpuload": "處理器負載",
|
"cpuload": "處理器負載",
|
||||||
"memoryusage": "記憶體用量",
|
"memoryusage": "記憶體用量",
|
||||||
"freespace": "可用空間",
|
"freespace": "可用空間",
|
||||||
"activeusers": "活躍用戶"
|
"activeusers": "活躍用戶",
|
||||||
|
"numfiles": "Files",
|
||||||
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "狀態",
|
"status": "狀態",
|
||||||
@ -523,9 +525,9 @@
|
|||||||
"failed": "失敗"
|
"failed": "失敗"
|
||||||
},
|
},
|
||||||
"unmanic": {
|
"unmanic": {
|
||||||
"active_workers": "Active Workers",
|
"active_workers": "在線工作程序",
|
||||||
"total_workers": "Total Workers",
|
"total_workers": "總工作程序",
|
||||||
"records_total": "Queue Length"
|
"records_total": "佇列長度"
|
||||||
},
|
},
|
||||||
"healthchecks": {
|
"healthchecks": {
|
||||||
"new": "新建立",
|
"new": "新建立",
|
||||||
@ -538,49 +540,49 @@
|
|||||||
"never": "尚未檢查"
|
"never": "尚未檢查"
|
||||||
},
|
},
|
||||||
"pterodactyl": {
|
"pterodactyl": {
|
||||||
"servers": "Servers",
|
"servers": "伺服器",
|
||||||
"nodes": "Nodes"
|
"nodes": "節點"
|
||||||
},
|
},
|
||||||
"prometheus": {
|
"prometheus": {
|
||||||
"targets_up": "Targets Up",
|
"targets_up": "目標上線",
|
||||||
"targets_down": "Targets Down",
|
"targets_down": "目標離線",
|
||||||
"targets_total": "Total Targets"
|
"targets_total": "目標總數"
|
||||||
},
|
},
|
||||||
"minecraft": {
|
"minecraft": {
|
||||||
"players": "Players",
|
"players": "玩家",
|
||||||
"version": "Version",
|
"version": "版本",
|
||||||
"status": "Status",
|
"status": "狀態",
|
||||||
"up": "Online",
|
"up": "上線",
|
||||||
"down": "Offline"
|
"down": "離線"
|
||||||
},
|
},
|
||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "今日",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "一年",
|
||||||
"gross_percent_max": "All time"
|
"gross_percent_max": "所有時間"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "播客",
|
||||||
"books": "Books",
|
"books": "叢書",
|
||||||
"podcastsDuration": "Duration",
|
"podcastsDuration": "歷時",
|
||||||
"booksDuration": "Duration"
|
"booksDuration": "歷時"
|
||||||
},
|
},
|
||||||
"homeassistant": {
|
"homeassistant": {
|
||||||
"people_home": "People Home",
|
"people_home": "在家人數",
|
||||||
"lights_on": "Lights On",
|
"lights_on": "燈亮著",
|
||||||
"switches_on": "Switches On"
|
"switches_on": "開關開著"
|
||||||
},
|
},
|
||||||
"freshrss": {
|
"freshrss": {
|
||||||
"subscriptions": "Subscriptions",
|
"subscriptions": "訂閱",
|
||||||
"unread": "Unread"
|
"unread": "未讀"
|
||||||
},
|
},
|
||||||
"channelsdvrserver": {
|
"channelsdvrserver": {
|
||||||
"shows": "Shows",
|
"shows": "節目",
|
||||||
"recordings": "Recordings",
|
"recordings": "錄影",
|
||||||
"scheduled": "Scheduled",
|
"scheduled": "已排定",
|
||||||
"passes": "Passes"
|
"passes": "通行證"
|
||||||
},
|
},
|
||||||
"whatsupdocker": {
|
"whatsupdocker": {
|
||||||
"monitoring": "Monitoring",
|
"monitoring": "監測中",
|
||||||
"updates": "Updates"
|
"updates": "可更新"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,7 +4,7 @@ export default function List({ bookmarks }) {
|
|||||||
return (
|
return (
|
||||||
<ul className="mt-3 flex flex-col">
|
<ul className="mt-3 flex flex-col">
|
||||||
{bookmarks.map((bookmark) => (
|
{bookmarks.map((bookmark) => (
|
||||||
<Item key={bookmark.name} bookmark={bookmark} />
|
<Item key={`${bookmark.name}-${bookmark.href}`} bookmark={bookmark} />
|
||||||
))}
|
))}
|
||||||
</ul>
|
</ul>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -161,7 +161,7 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear
|
|||||||
)} type="text" autoCorrect="false" ref={searchField} value={searchString} onChange={handleSearchChange} onKeyDown={handleSearchKeyDown} />
|
)} type="text" autoCorrect="false" ref={searchField} value={searchString} onChange={handleSearchChange} onKeyDown={handleSearchKeyDown} />
|
||||||
{results.length > 0 && <ul className="max-h-[60vh] overflow-y-auto m-2">
|
{results.length > 0 && <ul className="max-h-[60vh] overflow-y-auto m-2">
|
||||||
{results.map((r, i) => (
|
{results.map((r, i) => (
|
||||||
<li key={r.container ?? r.app ?? r.name}>
|
<li key={r.container ?? r.app ?? `${r.name}-${r.href}`}>
|
||||||
<button type="button" data-index={i} onMouseEnter={handleItemHover} className={classNames(
|
<button type="button" data-index={i} onMouseEnter={handleItemHover} className={classNames(
|
||||||
"flex flex-row w-full items-center justify-between rounded-md text-sm md:text-xl py-2 px-4 cursor-pointer text-theme-700 dark:text-theme-200",
|
"flex flex-row w-full items-center justify-between rounded-md text-sm md:text-xl py-2 px-4 cursor-pointer text-theme-700 dark:text-theme-200",
|
||||||
i === currentItemIndex && "bg-theme-300/50 dark:bg-theme-700/50",
|
i === currentItemIndex && "bg-theme-300/50 dark:bg-theme-700/50",
|
||||||
|
|||||||
@ -1,6 +1,18 @@
|
|||||||
|
import { useContext } from "react";
|
||||||
import Image from "next/future/image";
|
import Image from "next/future/image";
|
||||||
|
|
||||||
|
import { SettingsContext } from "utils/contexts/settings";
|
||||||
|
import { ThemeContext } from "utils/contexts/theme";
|
||||||
|
|
||||||
|
const iconSetURLs = {
|
||||||
|
'mdi': "https://cdn.jsdelivr.net/npm/@mdi/svg@latest/svg/",
|
||||||
|
'si' : "https://cdn.jsdelivr.net/npm/simple-icons@latest/icons/",
|
||||||
|
};
|
||||||
|
|
||||||
export default function ResolvedIcon({ icon, width = 32, height = 32, alt = "logo" }) {
|
export default function ResolvedIcon({ icon, width = 32, height = 32, alt = "logo" }) {
|
||||||
|
const { settings } = useContext(SettingsContext);
|
||||||
|
const { theme } = useContext(ThemeContext);
|
||||||
|
|
||||||
// direct or relative URLs
|
// direct or relative URLs
|
||||||
if (icon.startsWith("http") || icon.startsWith("/")) {
|
if (icon.startsWith("http") || icon.startsWith("/")) {
|
||||||
return (
|
return (
|
||||||
@ -12,15 +24,22 @@ export default function ResolvedIcon({ icon, width = 32, height = 32, alt = "log
|
|||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
objectFit: "contain",
|
objectFit: "contain",
|
||||||
|
maxHeight: "100%",
|
||||||
|
maxWidth: "100%",
|
||||||
}}
|
}}
|
||||||
alt={alt}
|
alt={alt}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// mdi- prefixed, material design icons
|
// check mdi- or si- prefixed icons
|
||||||
if (icon.startsWith("mdi-")) {
|
const prefix = icon.split("-")[0]
|
||||||
const iconName = icon.replace("mdi-", "").replace(".svg", "");
|
|
||||||
|
if (prefix in iconSetURLs) {
|
||||||
|
// get icon source
|
||||||
|
const iconName = icon.replace(`${prefix}-`, "").replace(".svg", "");
|
||||||
|
const iconSource = `${iconSetURLs[prefix]}${iconName}.svg`;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
@ -28,9 +47,11 @@ export default function ResolvedIcon({ icon, width = 32, height = 32, alt = "log
|
|||||||
height,
|
height,
|
||||||
maxWidth: '100%',
|
maxWidth: '100%',
|
||||||
maxHeight: '100%',
|
maxHeight: '100%',
|
||||||
background: "linear-gradient(180deg, rgb(var(--color-logo-start)), rgb(var(--color-logo-stop)))",
|
background: settings.iconStyle === "theme" ?
|
||||||
mask: `url(https://cdn.jsdelivr.net/npm/@mdi/svg@latest/svg/${iconName}.svg) no-repeat center / contain`,
|
`rgb(var(--color-${ theme === "dark" ? 300 : 900 }) / var(--tw-text-opacity, 1))` :
|
||||||
WebkitMask: `url(https://cdn.jsdelivr.net/npm/@mdi/svg@latest/svg/${iconName}.svg) no-repeat center / contain`,
|
"linear-gradient(180deg, rgb(var(--color-logo-start)), rgb(var(--color-logo-stop)))",
|
||||||
|
mask: `url(${iconSource}) no-repeat center / contain`,
|
||||||
|
WebkitMask: `url(${iconSource}) no-repeat center / contain`,
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
@ -47,6 +68,8 @@ export default function ResolvedIcon({ icon, width = 32, height = 32, alt = "log
|
|||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
objectFit: "contain",
|
objectFit: "contain",
|
||||||
|
maxHeight: "100%",
|
||||||
|
maxWidth: "100%"
|
||||||
}}
|
}}
|
||||||
alt={alt}
|
alt={alt}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -1,8 +1,18 @@
|
|||||||
|
import { useContext } from "react";
|
||||||
|
|
||||||
import Error from "./error";
|
import Error from "./error";
|
||||||
|
|
||||||
|
import { SettingsContext } from "utils/contexts/settings";
|
||||||
|
|
||||||
export default function Container({ error = false, children, service }) {
|
export default function Container({ error = false, children, service }) {
|
||||||
|
const { settings } = useContext(SettingsContext);
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return <Error error={error} />
|
if (settings.hideErrors || service.widget.hide_errors) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return <Error service={service} error={error} />
|
||||||
}
|
}
|
||||||
|
|
||||||
let visibleChildren = children;
|
let visibleChildren = children;
|
||||||
|
|||||||
@ -9,12 +9,10 @@ function displayData(data) {
|
|||||||
return (data.type === 'Buffer') ? Buffer.from(data).toString() : JSON.stringify(data, 4);
|
return (data.type === 'Buffer') ? Buffer.from(data).toString() : JSON.stringify(data, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function Error({ error }) {
|
export default function Error({ error: err }) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
if (error?.data?.error) {
|
const { error } = err?.data ?? { error: err };
|
||||||
error = error.data.error; // eslint-disable-line no-param-reassign
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<details className="px-1 pb-1">
|
<details className="px-1 pb-1">
|
||||||
|
|||||||
@ -30,7 +30,7 @@ export default async function handler(req, res) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const containerNames = containers.map((container) => container.Names[0]?.replace(/^\//, ""));
|
const containerNames = containers.flatMap((container) => container.Names.map((name) => name.replace(/^\//, "")));
|
||||||
const containerExists = containerNames.includes(containerName);
|
const containerExists = containerNames.includes(containerName);
|
||||||
|
|
||||||
if (containerExists) {
|
if (containerExists) {
|
||||||
|
|||||||
@ -30,7 +30,7 @@ export default async function handler(req, res) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const containerNames = containers.map((container) => container.Names[0]?.replace(/^\//, ""));
|
const containerNames = containers.flatMap((container) => container.Names.map((name) => name.replace(/^\//, "")));
|
||||||
const containerExists = containerNames.includes(containerName);
|
const containerExists = containerNames.includes(containerName);
|
||||||
|
|
||||||
if (containerExists) {
|
if (containerExists) {
|
||||||
|
|||||||
@ -286,7 +286,7 @@ function Home({ initialSettings }) {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{services && (
|
{services?.length > 0 && (
|
||||||
<div className="flex flex-wrap p-4 sm:p-8 sm:pt-4 items-start pb-2">
|
<div className="flex flex-wrap p-4 sm:p-8 sm:pt-4 items-start pb-2">
|
||||||
{services.map((group) => (
|
{services.map((group) => (
|
||||||
<ServicesGroup key={group.name} services={group} layout={initialSettings.layout?.[group.name]} fiveColumns={settings.fiveColumns} />
|
<ServicesGroup key={group.name} services={group} layout={initialSettings.layout?.[group.name]} fiveColumns={settings.fiveColumns} />
|
||||||
@ -294,7 +294,7 @@ function Home({ initialSettings }) {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{bookmarks && (
|
{bookmarks?.length > 0 && (
|
||||||
<div className={`grow flex flex-wrap pt-0 p-4 sm:p-8 gap-2 grid-cols-1 lg:grid-cols-2 lg:grid-cols-${Math.min(6, bookmarks.length)}`}>
|
<div className={`grow flex flex-wrap pt-0 p-4 sm:p-8 gap-2 grid-cols-1 lg:grid-cols-2 lg:grid-cols-${Math.min(6, bookmarks.length)}`}>
|
||||||
{bookmarks.map((group) => (
|
{bookmarks.map((group) => (
|
||||||
<BookmarksGroup key={group.name} group={group} />
|
<BookmarksGroup key={group.name} group={group} />
|
||||||
|
|||||||
@ -257,6 +257,7 @@ export function cleanServiceGroups(groups) {
|
|||||||
const {
|
const {
|
||||||
type, // all widgets
|
type, // all widgets
|
||||||
fields,
|
fields,
|
||||||
|
hideErrors,
|
||||||
server, // docker widget
|
server, // docker widget
|
||||||
container,
|
container,
|
||||||
currency, // coinmarketcap widget
|
currency, // coinmarketcap widget
|
||||||
@ -269,7 +270,7 @@ export function cleanServiceGroups(groups) {
|
|||||||
wan, // opnsense widget,
|
wan, // opnsense widget,
|
||||||
enableBlocks, // emby/jellyfin
|
enableBlocks, // emby/jellyfin
|
||||||
enableNowPlaying,
|
enableNowPlaying,
|
||||||
volume // diskstation widget
|
volume, // diskstation widget
|
||||||
} = cleanedService.widget;
|
} = cleanedService.widget;
|
||||||
|
|
||||||
const fieldsList = typeof fields === 'string' ? JSON.parse(fields) : fields;
|
const fieldsList = typeof fields === 'string' ? JSON.parse(fields) : fields;
|
||||||
@ -277,6 +278,7 @@ export function cleanServiceGroups(groups) {
|
|||||||
cleanedService.widget = {
|
cleanedService.widget = {
|
||||||
type,
|
type,
|
||||||
fields: fieldsList || null,
|
fields: fieldsList || null,
|
||||||
|
hide_errors: hideErrors || false,
|
||||||
service_name: service.name,
|
service_name: service.name,
|
||||||
service_group: serviceGroup.name,
|
service_group: serviceGroup.name,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -12,7 +12,7 @@ export default function Component({ service }) {
|
|||||||
const { data: adguardData, error: adguardError } = useWidgetAPI(widget, "stats");
|
const { data: adguardData, error: adguardError } = useWidgetAPI(widget, "stats");
|
||||||
|
|
||||||
if (adguardError) {
|
if (adguardError) {
|
||||||
return <Container error={adguardError} />;
|
return <Container service={service} error={adguardError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!adguardData) {
|
if (!adguardData) {
|
||||||
|
|||||||
@ -12,7 +12,7 @@ export default function Component({ service }) {
|
|||||||
|
|
||||||
|
|
||||||
if (librariesError) {
|
if (librariesError) {
|
||||||
return <Container error={librariesError} />;
|
return <Container service={service} error={librariesError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!librariesData) {
|
if (!librariesData) {
|
||||||
|
|||||||
@ -15,7 +15,7 @@ export default function Component({ service }) {
|
|||||||
|
|
||||||
if (usersError || loginsError || failedLoginsError) {
|
if (usersError || loginsError || failedLoginsError) {
|
||||||
const finalError = usersError ?? loginsError ?? failedLoginsError;
|
const finalError = usersError ?? loginsError ?? failedLoginsError;
|
||||||
return <Container error={finalError} />;
|
return <Container service={service} error={finalError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!usersData || !loginsData || !failedLoginsData) {
|
if (!usersData || !loginsData || !failedLoginsData) {
|
||||||
|
|||||||
@ -15,7 +15,7 @@ export default function Component({ service }) {
|
|||||||
|
|
||||||
if (statsError || filtersError || indexersError) {
|
if (statsError || filtersError || indexersError) {
|
||||||
const finalError = statsError ?? filtersError ?? indexersError;
|
const finalError = statsError ?? filtersError ?? indexersError;
|
||||||
return <Container error={finalError} />;
|
return <Container service={service} error={finalError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!statsData || !filtersData || !indexersData) {
|
if (!statsData || !filtersData || !indexersData) {
|
||||||
|
|||||||
@ -14,7 +14,7 @@ export default function Component({ service }) {
|
|||||||
|
|
||||||
if (moviesError || episodesError) {
|
if (moviesError || episodesError) {
|
||||||
const finalError = moviesError ?? episodesError;
|
const finalError = moviesError ?? episodesError;
|
||||||
return <Container error={finalError} />;
|
return <Container service={service} error={finalError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!episodesData || !moviesData) {
|
if (!episodesData || !moviesData) {
|
||||||
|
|||||||
@ -12,7 +12,7 @@ export default function Component({ service }) {
|
|||||||
const { data, error } = useWidgetAPI(widget, "info");
|
const { data, error } = useWidgetAPI(widget, "info");
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return <Container error={error} />;
|
return <Container service={service} error={error} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!data) {
|
if (!data) {
|
||||||
|
|||||||
@ -11,7 +11,7 @@ export default function Component({ service }) {
|
|||||||
const { data: channelsData, error: channelsError } = useWidgetAPI(widget, "status");
|
const { data: channelsData, error: channelsError } = useWidgetAPI(widget, "status");
|
||||||
|
|
||||||
if (channelsError) {
|
if (channelsError) {
|
||||||
return <Container error={channelsError} />;
|
return <Container service={service} error={channelsError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!channelsData) {
|
if (!channelsData) {
|
||||||
|
|||||||
@ -8,7 +8,7 @@ export default function Component({ service }) {
|
|||||||
const { data: statsData, error: statsError } = useWidgetAPI(widget, "cfd_tunnel");
|
const { data: statsData, error: statsError } = useWidgetAPI(widget, "cfd_tunnel");
|
||||||
|
|
||||||
if (statsError) {
|
if (statsError) {
|
||||||
return <Container error={statsError} />;
|
return <Container service={service} error={statsError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!statsData) {
|
if (!statsData) {
|
||||||
|
|||||||
@ -38,7 +38,7 @@ export default function Component({ service }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (statsError) {
|
if (statsError) {
|
||||||
return <Container error={statsError} />;
|
return <Container service={service} error={statsError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!statsData || !dateRange) {
|
if (!statsData || !dateRange) {
|
||||||
|
|||||||
@ -12,7 +12,7 @@ export default function Component({ service }) {
|
|||||||
const { data: torrentData, error: torrentError } = useWidgetAPI(widget);
|
const { data: torrentData, error: torrentError } = useWidgetAPI(widget);
|
||||||
|
|
||||||
if (torrentError) {
|
if (torrentError) {
|
||||||
return <Container error={torrentError} />;
|
return <Container service={service} error={torrentError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!torrentData) {
|
if (!torrentData) {
|
||||||
|
|||||||
@ -12,7 +12,7 @@ export default function Component({ service }) {
|
|||||||
const { data: utilizationData, error: utilizationError } = useWidgetAPI(widget, "utilization");
|
const { data: utilizationData, error: utilizationError } = useWidgetAPI(widget, "utilization");
|
||||||
|
|
||||||
if (storageError || infoError || utilizationError) {
|
if (storageError || infoError || utilizationError) {
|
||||||
return <Container error={ storageError ?? infoError ?? utilizationError } />;
|
return <Container service={service} error={ storageError ?? infoError ?? utilizationError } />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!storageData || !infoData || !utilizationData) {
|
if (!storageData || !infoData || !utilizationData) {
|
||||||
|
|||||||
@ -19,7 +19,7 @@ export default function Component({ service }) {
|
|||||||
|
|
||||||
if (statsError || statsData?.error || statusError || statusData?.error) {
|
if (statsError || statsData?.error || statusError || statusData?.error) {
|
||||||
const finalError = statsError ?? statsData?.error ?? statusError ?? statusData?.error;
|
const finalError = statsError ?? statsData?.error ?? statusError ?? statusData?.error;
|
||||||
return <Container error={finalError} />;
|
return <Container service={service} error={finalError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (statusData && !(statusData.status.includes("running") || statusData.status.includes("partial"))) {
|
if (statusData && !(statusData.status.includes("running") || statusData.status.includes("partial"))) {
|
||||||
|
|||||||
@ -10,7 +10,7 @@ export default function Component({ service }) {
|
|||||||
const { data: listData, error: listError } = useWidgetAPI(widget, "list");
|
const { data: listData, error: listError } = useWidgetAPI(widget, "list");
|
||||||
|
|
||||||
if (listError) {
|
if (listError) {
|
||||||
return <Container error={listError} />;
|
return <Container service={service} error={listError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
const tasks = listData?.data?.tasks;
|
const tasks = listData?.data?.tasks;
|
||||||
|
|||||||
@ -206,7 +206,7 @@ export default function Component({ service }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sessionsError || countError) {
|
if (sessionsError || countError) {
|
||||||
return <Container error={sessionsError ?? countError} />;
|
return <Container service={service} error={sessionsError ?? countError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
const enableBlocks = service.widget?.enableBlocks
|
const enableBlocks = service.widget?.enableBlocks
|
||||||
|
|||||||
@ -12,7 +12,7 @@ export default function Component({ service }) {
|
|||||||
const { data: fileflowsData, error: fileflowsError } = useWidgetAPI(widget, "status");
|
const { data: fileflowsData, error: fileflowsError } = useWidgetAPI(widget, "status");
|
||||||
|
|
||||||
if (fileflowsError) {
|
if (fileflowsError) {
|
||||||
return <Container error={fileflowsError} />;
|
return <Container service={service} error={fileflowsError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!fileflowsData) {
|
if (!fileflowsData) {
|
||||||
|
|||||||
@ -12,7 +12,7 @@ export default function Component({ service }) {
|
|||||||
const { data: torrentData, error: torrentError } = useWidgetAPI(widget, "torrents");
|
const { data: torrentData, error: torrentError } = useWidgetAPI(widget, "torrents");
|
||||||
|
|
||||||
if (torrentError || !torrentData?.torrents) {
|
if (torrentError || !torrentData?.torrents) {
|
||||||
return <Container error={torrentError ?? {message: "No torrent data returned"}} />;
|
return <Container service={service} error={torrentError ?? {message: "No torrent data returned"}} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!torrentData || !torrentData.torrents) {
|
if (!torrentData || !torrentData.torrents) {
|
||||||
|
|||||||
@ -12,7 +12,7 @@ export default function Component({ service }) {
|
|||||||
const { data: freshrssData, error: freshrssError } = useWidgetAPI(widget, "info");
|
const { data: freshrssData, error: freshrssError } = useWidgetAPI(widget, "info");
|
||||||
|
|
||||||
if (freshrssError) {
|
if (freshrssError) {
|
||||||
return <Container error={freshrssError} />;
|
return <Container service={service} error={freshrssError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!freshrssData) {
|
if (!freshrssData) {
|
||||||
|
|||||||
@ -18,7 +18,7 @@ export default function Component({ service }) {
|
|||||||
|
|
||||||
if (ghostfolioErrorToday || ghostfolioErrorYear || ghostfolioErrorMax) {
|
if (ghostfolioErrorToday || ghostfolioErrorYear || ghostfolioErrorMax) {
|
||||||
const finalError = ghostfolioErrorToday ?? ghostfolioErrorYear ?? ghostfolioErrorMax
|
const finalError = ghostfolioErrorToday ?? ghostfolioErrorYear ?? ghostfolioErrorMax
|
||||||
return <Container error={finalError} />;
|
return <Container service={service} error={finalError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!performanceToday || !performanceYear || !performanceMax) {
|
if (!performanceToday || !performanceYear || !performanceMax) {
|
||||||
|
|||||||
@ -8,7 +8,7 @@ export default function Component({ service }) {
|
|||||||
const { data: gluetunData, error: gluetunError } = useWidgetAPI(widget, "ip");
|
const { data: gluetunData, error: gluetunError } = useWidgetAPI(widget, "ip");
|
||||||
|
|
||||||
if (gluetunError) {
|
if (gluetunError) {
|
||||||
return <Container error={gluetunError} />;
|
return <Container service={service} error={gluetunError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gluetunData) {
|
if (!gluetunData) {
|
||||||
|
|||||||
@ -11,7 +11,7 @@ export default function Component({ service }) {
|
|||||||
|
|
||||||
if (appsError || messagesError || clientsError) {
|
if (appsError || messagesError || clientsError) {
|
||||||
const finalError = appsError ?? messagesError ?? clientsError;
|
const finalError = appsError ?? messagesError ?? clientsError;
|
||||||
return <Container error={finalError} />;
|
return <Container service={service} error={finalError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -12,7 +12,7 @@ export default function Component({ service }) {
|
|||||||
const { data: alertsData, error: alertsError } = useWidgetAPI(widget, "alerts");
|
const { data: alertsData, error: alertsError } = useWidgetAPI(widget, "alerts");
|
||||||
|
|
||||||
if (statsError || alertsError) {
|
if (statsError || alertsError) {
|
||||||
return <Container error={statsError ?? alertsError} />;
|
return <Container service={service} error={statsError ?? alertsError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!statsData || !alertsData) {
|
if (!statsData || !alertsData) {
|
||||||
|
|||||||
@ -8,7 +8,7 @@ export default function Component({ service }) {
|
|||||||
const { data: channelsData, error: channelsError } = useWidgetAPI(widget, "lineup");
|
const { data: channelsData, error: channelsError } = useWidgetAPI(widget, "lineup");
|
||||||
|
|
||||||
if (channelsError) {
|
if (channelsError) {
|
||||||
return <Container error={channelsError} />;
|
return <Container service={service} error={channelsError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!channelsData) {
|
if (!channelsData) {
|
||||||
|
|||||||
@ -30,7 +30,7 @@ export default function Component({ service }) {
|
|||||||
const { data, error } = useWidgetAPI(widget, "checks");
|
const { data, error } = useWidgetAPI(widget, "checks");
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return <Container error={error} />;
|
return <Container service={service} error={error} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!data) {
|
if (!data) {
|
||||||
|
|||||||
@ -7,7 +7,7 @@ export default function Component({ service }) {
|
|||||||
|
|
||||||
const { data, error } = useWidgetAPI(widget, null, { refreshInterval: 60000 });
|
const { data, error } = useWidgetAPI(widget, null, { refreshInterval: 60000 });
|
||||||
if (error) {
|
if (error) {
|
||||||
return <Container error={error} />;
|
return <Container service={service} error={error} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
return <Container service={service}>
|
return <Container service={service}>
|
||||||
|
|||||||
@ -12,7 +12,7 @@ export default function Component({ service }) {
|
|||||||
const { data: homebridgeData, error: homebridgeError } = useWidgetAPI(widget, "info");
|
const { data: homebridgeData, error: homebridgeError } = useWidgetAPI(widget, "info");
|
||||||
|
|
||||||
if (homebridgeError) {
|
if (homebridgeError) {
|
||||||
return <Container error={homebridgeError} />;
|
return <Container service={service} error={homebridgeError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!homebridgeData) {
|
if (!homebridgeData) {
|
||||||
|
|||||||
@ -11,7 +11,7 @@ export default function Component({ service }) {
|
|||||||
const { data: immichData, error: immichError } = useWidgetAPI(widget);
|
const { data: immichData, error: immichError } = useWidgetAPI(widget);
|
||||||
|
|
||||||
if (immichError || immichData?.statusCode === 401) {
|
if (immichError || immichData?.statusCode === 401) {
|
||||||
return <Container error={immichError ?? immichData} />;
|
return <Container service={service} error={immichError ?? immichData} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!immichData) {
|
if (!immichData) {
|
||||||
|
|||||||
@ -12,7 +12,7 @@ export default function Component({ service }) {
|
|||||||
const { data: indexersData, error: indexersError } = useWidgetAPI(widget, "indexers");
|
const { data: indexersData, error: indexersError } = useWidgetAPI(widget, "indexers");
|
||||||
|
|
||||||
if (indexersError) {
|
if (indexersError) {
|
||||||
return <Container error={indexersError} />;
|
return <Container service={service} error={indexersError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!indexersData) {
|
if (!indexersData) {
|
||||||
|
|||||||
@ -8,7 +8,7 @@ export default function Component({ service }) {
|
|||||||
const { data: statsData, error: statsError } = useWidgetAPI(widget, "request/count");
|
const { data: statsData, error: statsError } = useWidgetAPI(widget, "request/count");
|
||||||
|
|
||||||
if (statsError) {
|
if (statsError) {
|
||||||
return <Container error={statsError} />;
|
return <Container service={service} error={statsError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!statsData) {
|
if (!statsData) {
|
||||||
|
|||||||
@ -14,7 +14,7 @@ export default function Component({ service }) {
|
|||||||
|
|
||||||
if (libraryError || seriesError || bookError) {
|
if (libraryError || seriesError || bookError) {
|
||||||
const finalError = libraryError ?? seriesError ?? bookError;
|
const finalError = libraryError ?? seriesError ?? bookError;
|
||||||
return <Container error={finalError} />;
|
return <Container service={service} error={finalError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!libraryData || !seriesData || !bookData) {
|
if (!libraryData || !seriesData || !bookData) {
|
||||||
|
|||||||
@ -38,7 +38,7 @@ export default function Component({ service }) {
|
|||||||
const { data: statusData, error: statusError } = useWidgetAPI(widget, "status");
|
const { data: statusData, error: statusError } = useWidgetAPI(widget, "status");
|
||||||
|
|
||||||
if (statusError) {
|
if (statusError) {
|
||||||
return <Container error={statusError} />;
|
return <Container service={service} error={statusError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
const source = statusData?.sources[0];
|
const source = statusData?.sources[0];
|
||||||
|
|||||||
@ -16,7 +16,7 @@ export default function Component({ service }) {
|
|||||||
`/api/kubernetes/stats/${widget.namespace}/${widget.app}?${podSelectorString}`);
|
`/api/kubernetes/stats/${widget.namespace}/${widget.app}?${podSelectorString}`);
|
||||||
|
|
||||||
if (statsError || statusError) {
|
if (statsError || statusError) {
|
||||||
return <Container error={t("widget.api_error")} />;
|
return <Container service={service} error={t("widget.api_error")} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (statusData && statusData.status !== "running") {
|
if (statusData && statusData.status !== "running") {
|
||||||
|
|||||||
@ -15,7 +15,7 @@ export default function Component({ service }) {
|
|||||||
|
|
||||||
if (albumsError || wantedError || queueError) {
|
if (albumsError || wantedError || queueError) {
|
||||||
const finalError = albumsError ?? wantedError ?? queueError;
|
const finalError = albumsError ?? wantedError ?? queueError;
|
||||||
return <Container error={finalError} />;
|
return <Container service={service} error={finalError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!albumsData || !wantedData || !queueData) {
|
if (!albumsData || !wantedData || !queueData) {
|
||||||
|
|||||||
@ -12,7 +12,7 @@ export default function Component({ service }) {
|
|||||||
const { data: statsData, error: statsError } = useWidgetAPI(widget, "instance");
|
const { data: statsData, error: statsError } = useWidgetAPI(widget, "instance");
|
||||||
|
|
||||||
if (statsError) {
|
if (statsError) {
|
||||||
return <Container error={statsError} />;
|
return <Container service={service} error={statsError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!statsData) {
|
if (!statsData) {
|
||||||
|
|||||||
@ -13,7 +13,7 @@ export default function Component({ service }) {
|
|||||||
|
|
||||||
if (statsError || futureError) {
|
if (statsError || futureError) {
|
||||||
const finalError = statsError ?? futureError;
|
const finalError = statsError ?? futureError;
|
||||||
return <Container error={finalError} />;
|
return <Container service={service} error={finalError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!statsData || !futureData) {
|
if (!statsData || !futureData) {
|
||||||
|
|||||||
@ -14,7 +14,7 @@ export default function Component({ service }) {
|
|||||||
|
|
||||||
if (statsError || leasesError) {
|
if (statsError || leasesError) {
|
||||||
const finalError = statsError ?? leasesError;
|
const finalError = statsError ?? leasesError;
|
||||||
return <Container error={ finalError } />;
|
return <Container service={service} error={ finalError } />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!statsData || !leasesData) {
|
if (!statsData || !leasesData) {
|
||||||
|
|||||||
@ -10,7 +10,7 @@ export default function Component({ service }) {
|
|||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
if(serverError){
|
if(serverError){
|
||||||
return <Container error={serverError} />;
|
return <Container service={service} error={serverError} />;
|
||||||
}
|
}
|
||||||
if (!serverData) {
|
if (!serverData) {
|
||||||
return (
|
return (
|
||||||
|
|||||||
@ -12,7 +12,7 @@ export default function Component({ service }) {
|
|||||||
const { data: minifluxData, error: minifluxError } = useWidgetAPI(widget, "counters");
|
const { data: minifluxData, error: minifluxError } = useWidgetAPI(widget, "counters");
|
||||||
|
|
||||||
if (minifluxError) {
|
if (minifluxError) {
|
||||||
return <Container error={minifluxError} />;
|
return <Container service={service} error={minifluxError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!minifluxData) {
|
if (!minifluxData) {
|
||||||
|
|||||||
@ -15,7 +15,7 @@ export default function Component({ service }) {
|
|||||||
|
|
||||||
if (printStatsError || displayStatsError || webHooksError) {
|
if (printStatsError || displayStatsError || webHooksError) {
|
||||||
const finalError = printStatsError ?? displayStatsError ?? webHooksError;
|
const finalError = printStatsError ?? displayStatsError ?? webHooksError;
|
||||||
return <Container error={finalError} />;
|
return <Container service={service} error={finalError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!printStats || !displayStatus || !webHooks) {
|
if (!printStats || !displayStatus || !webHooks) {
|
||||||
|
|||||||
@ -15,7 +15,7 @@ export default function Component({ service }) {
|
|||||||
|
|
||||||
if (seriesError || issuesError || wantedError) {
|
if (seriesError || issuesError || wantedError) {
|
||||||
const finalError = seriesError ?? issuesError ?? wantedError;
|
const finalError = seriesError ?? issuesError ?? wantedError;
|
||||||
return <Container error={finalError} />;
|
return <Container service={service} error={finalError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!seriesData || !issuesData || !wantedData) {
|
if (!seriesData || !issuesData || !wantedData) {
|
||||||
|
|||||||
@ -27,7 +27,7 @@ export default function Component({ service }) {
|
|||||||
const { data: navidromeData, error: navidromeError } = useWidgetAPI(widget, "getNowPlaying");
|
const { data: navidromeData, error: navidromeError } = useWidgetAPI(widget, "getNowPlaying");
|
||||||
|
|
||||||
if (navidromeError || navidromeData?.["subsonic-response"]?.error) {
|
if (navidromeError || navidromeData?.["subsonic-response"]?.error) {
|
||||||
return <Container error={navidromeError ?? navidromeData?.["subsonic-response"]?.error} />;
|
return <Container service={service} error={navidromeError ?? navidromeData?.["subsonic-response"]?.error} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!navidromeData) {
|
if (!navidromeData) {
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import { useTranslation } from "next-i18next";
|
import { useTranslation } from "next-i18next";
|
||||||
|
import { useMemo } from "react";
|
||||||
|
|
||||||
import Container from "components/services/widget/container";
|
import Container from "components/services/widget/container";
|
||||||
import Block from "components/services/widget/block";
|
import Block from "components/services/widget/block";
|
||||||
@ -10,30 +11,53 @@ export default function Component({ service }) {
|
|||||||
const { widget } = service;
|
const { widget } = service;
|
||||||
const { data: nextcloudData, error: nextcloudError } = useWidgetAPI(widget, "serverinfo");
|
const { data: nextcloudData, error: nextcloudError } = useWidgetAPI(widget, "serverinfo");
|
||||||
|
|
||||||
|
// Support for deprecated fields (cpuload, memoryusage)
|
||||||
|
const [showCpuLoad, showMemoryUsage] = useMemo(() => {
|
||||||
|
// Default values if fields is not set
|
||||||
|
if (!widget.fields) return [false, false];
|
||||||
|
|
||||||
|
// Allows for backwards compatibility with existing values of fields
|
||||||
|
if (widget.fields.length <= 4) return [true, true];
|
||||||
|
|
||||||
|
// If all fields are enabled, drop cpuload and memoryusage
|
||||||
|
if (widget.fields.length === 6) return [false, false];
|
||||||
|
|
||||||
|
const hasCpuLoad = widget.fields?.includes('cpuload');
|
||||||
|
const hasMemoryUsage = widget.fields?.includes('memoryusage');
|
||||||
|
|
||||||
|
// If (for some reason) 5 fields are set, drop memoryusage
|
||||||
|
if (hasCpuLoad && hasMemoryUsage) return [true, false];
|
||||||
|
return [!hasCpuLoad, !hasMemoryUsage]
|
||||||
|
}, [widget.fields]);
|
||||||
|
|
||||||
if (nextcloudError) {
|
if (nextcloudError) {
|
||||||
return <Container error={nextcloudError} />;
|
return <Container service={service} error={nextcloudError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!nextcloudData) {
|
if (!nextcloudData) {
|
||||||
return (
|
return (
|
||||||
<Container service={service}>
|
<Container service={service}>
|
||||||
<Block label="nextcloud.cpuload" />
|
{showCpuLoad && <Block label="nextcloud.cpuload" />}
|
||||||
<Block label="nextcloud.memoryusage" />
|
{showMemoryUsage && <Block label="nextcloud.memoryusage" />}
|
||||||
<Block label="nextcloud.freespace" />
|
<Block label="nextcloud.freespace" />
|
||||||
<Block label="nextcloud.activeusers" />
|
<Block label="nextcloud.activeusers" />
|
||||||
|
<Block label="nextcloud.numfiles" />
|
||||||
|
<Block label="nextcloud.numshares" />
|
||||||
</Container>
|
</Container>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const nextcloudInfo = nextcloudData.ocs.data.nextcloud;
|
const { nextcloud: nextcloudInfo, activeUsers } = nextcloudData.ocs.data;
|
||||||
const memoryUsage = 100 * ((parseFloat(nextcloudInfo.system.mem_total) - parseFloat(nextcloudInfo.system.mem_free)) / parseFloat(nextcloudInfo.system.mem_total));
|
const memoryUsage = 100 * ((parseFloat(nextcloudInfo.system.mem_total) - parseFloat(nextcloudInfo.system.mem_free)) / parseFloat(nextcloudInfo.system.mem_total));
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Container service={service}>
|
<Container service={service}>
|
||||||
<Block label="nextcloud.cpuload" value={t("common.percent", { value: nextcloudInfo.system.cpuload[0] })} />
|
{showCpuLoad && <Block label="nextcloud.cpuload" value={t("common.percent", { value: nextcloudInfo.system.cpuload[0] })} />}
|
||||||
<Block label="nextcloud.memoryusage" value={t("common.percent", { value:memoryUsage })} />
|
{showMemoryUsage && <Block label="nextcloud.memoryusage" value={t("common.percent", { value:memoryUsage })} />}
|
||||||
<Block label="nextcloud.freespace" value={t("common.bbytes", { value: nextcloudInfo.system.freespace, maximumFractionDigits: 1 })} />
|
<Block label="nextcloud.freespace" value={t("common.bbytes", { value: nextcloudInfo.system.freespace, maximumFractionDigits: 1 })} />
|
||||||
<Block label="nextcloud.activeusers" value={t("common.number", { value: nextcloudData.ocs.data.activeUsers.last5minutes })} />
|
<Block label="nextcloud.activeusers" value={t("common.number", { value: activeUsers.last24hours })} />
|
||||||
|
<Block label="nextcloud.numfiles" value={t("common.number", { value: nextcloudInfo.storage.num_files })} />
|
||||||
|
<Block label="nextcloud.numshares" value={t("common.number", { value: nextcloudInfo.shares.num_shares })} />
|
||||||
</Container>
|
</Container>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,7 +12,7 @@ export default function Component({ service }) {
|
|||||||
const { data: nextdnsData, error: nextdnsError } = useWidgetAPI(widget, "analytics/status");
|
const { data: nextdnsData, error: nextdnsError } = useWidgetAPI(widget, "analytics/status");
|
||||||
|
|
||||||
if (nextdnsError) {
|
if (nextdnsError) {
|
||||||
return <Container error={nextdnsError} />;
|
return <Container service={service} error={nextdnsError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!nextdnsData) {
|
if (!nextdnsData) {
|
||||||
|
|||||||
@ -8,7 +8,7 @@ export default function Component({ service }) {
|
|||||||
const { data: infoData, error: infoError } = useWidgetAPI(widget, "nginx/proxy-hosts");
|
const { data: infoData, error: infoError } = useWidgetAPI(widget, "nginx/proxy-hosts");
|
||||||
|
|
||||||
if (infoError) {
|
if (infoError) {
|
||||||
return <Container error={infoError} />;
|
return <Container service={service} error={infoError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!infoData) {
|
if (!infoData) {
|
||||||
|
|||||||
@ -12,7 +12,7 @@ export default function Component({ service }) {
|
|||||||
const { data: statusData, error: statusError } = useWidgetAPI(widget, "status");
|
const { data: statusData, error: statusError } = useWidgetAPI(widget, "status");
|
||||||
|
|
||||||
if (statusError) {
|
if (statusError) {
|
||||||
return <Container error={statusError} />;
|
return <Container service={service} error={statusError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!statusData) {
|
if (!statusData) {
|
||||||
|
|||||||
@ -9,11 +9,11 @@ export default function Component({ service }) {
|
|||||||
const { data: jobStats, error: jobStatsError } = useWidgetAPI(widget, "job_stats");
|
const { data: jobStats, error: jobStatsError } = useWidgetAPI(widget, "job_stats");
|
||||||
|
|
||||||
if (printerStatsError) {
|
if (printerStatsError) {
|
||||||
return <Container error={printerStatsError} />;
|
return <Container service={service} error={printerStatsError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (jobStatsError) {
|
if (jobStatsError) {
|
||||||
return <Container error={jobStatsError} />;
|
return <Container service={service} error={jobStatsError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
const state = printerStats?.state?.text;
|
const state = printerStats?.state?.text;
|
||||||
|
|||||||
@ -14,7 +14,7 @@ export default function Component({ service }) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (omadaAPIError) {
|
if (omadaAPIError) {
|
||||||
return <Container error={omadaAPIError} />;
|
return <Container service={service} error={omadaAPIError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!omadaData) {
|
if (!omadaData) {
|
||||||
|
|||||||
@ -8,7 +8,7 @@ export default function Component({ service }) {
|
|||||||
const { data: statsData, error: statsError } = useWidgetAPI(widget, "Request/count");
|
const { data: statsData, error: statsError } = useWidgetAPI(widget, "Request/count");
|
||||||
|
|
||||||
if (statsError) {
|
if (statsError) {
|
||||||
return <Container error={statsError} />;
|
return <Container service={service} error={statsError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!statsData) {
|
if (!statsData) {
|
||||||
|
|||||||
@ -14,7 +14,7 @@ export default function Component({ service }) {
|
|||||||
|
|
||||||
if (activityError || interfaceError) {
|
if (activityError || interfaceError) {
|
||||||
const finalError = activityError ?? interfaceError;
|
const finalError = activityError ?? interfaceError;
|
||||||
return <Container error={ finalError } />;
|
return <Container service={service} error={ finalError } />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!activityData || !interfaceData) {
|
if (!activityData || !interfaceData) {
|
||||||
|
|||||||
@ -11,7 +11,7 @@ export default function Component({ service }) {
|
|||||||
const { data: statsData, error: statsError } = useWidgetAPI(widget, "request/count");
|
const { data: statsData, error: statsError } = useWidgetAPI(widget, "request/count");
|
||||||
|
|
||||||
if (statsError) {
|
if (statsError) {
|
||||||
return <Container error={statsError} />;
|
return <Container service={service} error={statsError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!statsData) {
|
if (!statsData) {
|
||||||
|
|||||||
@ -8,7 +8,7 @@ export default function Component({ service }) {
|
|||||||
const { data: statisticsData, error: statisticsError } = useWidgetAPI(widget, "statistics");
|
const { data: statisticsData, error: statisticsError } = useWidgetAPI(widget, "statistics");
|
||||||
|
|
||||||
if (statisticsError) {
|
if (statisticsError) {
|
||||||
return <Container error={statisticsError} />;
|
return <Container service={service} error={statisticsError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!statisticsData) {
|
if (!statisticsData) {
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user