Merge branch 'main' into enhanced-glances

This commit is contained in:
Georges-Antoine Assi 2023-05-22 12:16:13 -04:00
commit 28180f0e81
No known key found for this signature in database
GPG Key ID: E01F01B06E816D51
131 changed files with 747 additions and 603 deletions

View File

@ -69,11 +69,18 @@ body:
attributes:
label: Browser Logs
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
id: other
attributes:
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
id: pre-flight
attributes:

View File

@ -513,7 +513,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",
@ -580,7 +582,7 @@
"passes": "Passes"
},
"whatsupdocker": {
"monitoring": "Monitoring",
"updates": "Updates"
"monitoring": "Supervisió",
"updates": "Actualitzacions"
}
}

View File

@ -6,7 +6,7 @@
"downloads": "Fronta"
},
"truenas": {
"load": "Vytížení systému",
"load": "Zatížení systému",
"uptime": "Doba spuštění",
"alerts": "Upozornění",
"time": "{{value, number(style: unit; unitDisplay: long;)}}"
@ -30,19 +30,19 @@
"placeholder": "Hledat…"
},
"resources": {
"cpu": "CPU",
"cpu": "PROC",
"total": "Celkem",
"free": "Volné",
"used": "Využité",
"load": "Vytížení",
"mem": "RAM",
"max": "Max",
"uptime": "UP",
"months": "mo",
"load": "Zatížení",
"mem": "PAM",
"max": "Max.",
"uptime": "BĚŽÍ",
"months": "měs.",
"days": "d",
"hours": "h",
"minutes": "m",
"temp": "TEMP"
"temp": "TEPLOTA"
},
"unifi": {
"users": "Uživatelé",
@ -64,8 +64,8 @@
"docker": {
"rx": "RX",
"tx": "TX",
"mem": "RAM",
"cpu": "CPU",
"mem": "PAM",
"cpu": "PROC",
"offline": "Offline",
"error": "Chyba",
"unknown": "Neznámý",
@ -85,7 +85,7 @@
"movies": "Filmy",
"series": "Seriály",
"episodes": "Epizody",
"songs": "Písničky"
"songs": "Skladby"
},
"changedetectionio": {
"totalObserved": "Celkem zjištěno",
@ -106,7 +106,7 @@
"streams": "Aktivní streamy",
"movies": "Filmy",
"tv": "Seriály",
"albums": "Albums"
"albums": "Alba"
},
"sabnzbd": {
"rate": "Rychlost",
@ -188,9 +188,9 @@
"ping": "Ping"
},
"portainer": {
"running": "Běží",
"running": "Spuštěno",
"stopped": "Zastaveno",
"total": "Celkově"
"total": "Celkem"
},
"traefik": {
"routers": "Routery",
@ -300,17 +300,17 @@
"failedLoginsLast24H": "Neúspěšná přihlášení (24h)"
},
"proxmox": {
"mem": "RAM",
"cpu": "CPU",
"mem": "PAM",
"cpu": "PROC",
"lxc": "LXC",
"vms": "Virtuální Stroje"
},
"glances": {
"cpu": "CPU",
"mem": "RAM",
"cpu": "PROC",
"mem": "PAM",
"wait": "Prosím počkejte",
"temp": "TEMP",
"uptime": "UP",
"temp": "TEPLOTA",
"uptime": "BĚŽÍ",
"days": "d",
"hours": "h"
},
@ -334,9 +334,9 @@
"down": "Vypnutý"
},
"watchtower": {
"containers_scanned": "Naskenováno",
"containers_scanned": "Prohledáno",
"containers_updated": "Aktualizováno",
"containers_failed": "Chyba"
"containers_failed": "Selhalo"
},
"autobrr": {
"approvedPushes": "Schváleno",
@ -460,7 +460,7 @@
"proxmoxbackupserver": {
"datastore_usage": "Datové úložiště",
"failed_tasks_24h": "Neúspěšné úlohy 24h",
"cpu_usage": "CPU",
"cpu_usage": "PROC",
"memory_usage": "Paměť"
},
"immich": {
@ -504,16 +504,18 @@
"time": "Čas"
},
"grafana": {
"dashboards": "Přístrojové panely",
"dashboards": "Nástěnky",
"datasources": "Zdroje dat",
"totalalerts": "Celkový počet upozornění",
"alertstriggered": "Spuštěné výstrahy"
},
"nextcloud": {
"cpuload": "CPU zatížení",
"cpuload": "Zatížení procesoru",
"memoryusage": "Využití paměti",
"freespace": "Volný prostor",
"activeusers": "Aktivní uživatelé"
"activeusers": "Aktivní uživatelé",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Stav",
@ -565,22 +567,22 @@
"booksDuration": "Trvání"
},
"homeassistant": {
"people_home": "People Home",
"lights_on": "Lights On",
"switches_on": "Switches On"
"people_home": "Lidí doma",
"lights_on": "Rozsvícená světla",
"switches_on": "Zapnuté přepínače"
},
"freshrss": {
"subscriptions": "Subscriptions",
"unread": "Unread"
"subscriptions": "Odběry",
"unread": "Nepřečteno"
},
"channelsdvrserver": {
"shows": "Shows",
"recordings": "Recordings",
"scheduled": "Scheduled",
"passes": "Passes"
"recordings": "Nahrávky",
"scheduled": "Naplánováno",
"passes": "Průchody"
},
"whatsupdocker": {
"monitoring": "Monitoring",
"updates": "Updates"
"monitoring": "Sledování",
"updates": "Aktualizace"
}
}

View File

@ -513,7 +513,9 @@
"memoryusage": "Memory Usage",
"cpuload": "Cpu Load",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"cpuload": "CPU Last",
"memoryusage": "RAM Verbrauch",
"freespace": "Freier Speicher",
"activeusers": "Aktive Nutzer"
"activeusers": "Aktive Nutzer",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -530,7 +530,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -553,7 +553,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"activeusers": "Active Users",
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space"
"freespace": "Free Space",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"cpuload": "Carga de la CPU",
"memoryusage": "Uso de la memoria",
"freespace": "Espacio libre",
"activeusers": "Usuarios activos"
"activeusers": "Usuarios activos",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Estado",
@ -580,7 +582,7 @@
"passes": "Pases"
},
"whatsupdocker": {
"monitoring": "Monitoring",
"updates": "Updates"
"monitoring": "Supervisión",
"updates": "Actualizaciones"
}
}

View File

@ -513,7 +513,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numshares": "Shared Items",
"numfiles": "Files"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"freespace": "Espace Libre",
"activeusers": "Utilisateurs Actifs",
"cpuload": "Charge Cpu",
"memoryusage": "Utilisation Mémoire"
"memoryusage": "Utilisation Mémoire",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Statut",
@ -580,7 +582,7 @@
"passes": "Passes"
},
"whatsupdocker": {
"monitoring": "Monitoring",
"updates": "Updates"
"monitoring": "Conteneurs",
"updates": "Mises à jour"
}
}

View File

@ -513,7 +513,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -229,7 +229,7 @@
"streams": "Aktivni prijenosi",
"movies": "Filmovi",
"tv": "TV emisije",
"albums": "Albums"
"albums": "Albumi"
},
"glances": {
"cpu": "CPU",
@ -513,7 +513,9 @@
"cpuload": "Cpu opterećenje",
"memoryusage": "Korištenje memorije",
"freespace": "Slobodna memorija",
"activeusers": "Aktivni korisnici"
"activeusers": "Aktivni korisnici",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Stanje",
@ -581,6 +583,6 @@
},
"whatsupdocker": {
"monitoring": "Monitoring",
"updates": "Updates"
"updates": "Aktualiziranja"
}
}

View File

@ -513,7 +513,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"memoryusage": "Memory Usage",
"cpuload": "Cpu Load",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -534,7 +534,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"cpuload": "Cpu Belasting",
"memoryusage": "Geheugen Gebruik",
"freespace": "Vrije Ruimte",
"activeusers": "Actieve Gebruikers"
"activeusers": "Actieve Gebruikers",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"cpuload": "Carga de CPU",
"memoryusage": "Memória Utilizada",
"freespace": "Espaço Livre",
"activeusers": "Usuários Ativos"
"activeusers": "Usuários Ativos",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -522,7 +522,9 @@
"cpuload": "Carga de CPU",
"memoryusage": "Memória Utilizada",
"freespace": "Espaço Livre",
"activeusers": "Utilizadores Ativos"
"activeusers": "Utilizadores Ativos",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Estado",

View File

@ -513,7 +513,9 @@
"activeusers": "Active Users",
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space"
"freespace": "Free Space",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -5,7 +5,7 @@
"status": "Статус",
"information": "Информация",
"url": "URL",
"raw_error": "Raw Error",
"raw_error": "Необработанная ошибка",
"response_data": "Данные ответа"
},
"search": {
@ -17,14 +17,14 @@
"used": "Использовано",
"load": "Загрузка",
"cpu": "Процессор",
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"mem": "Память",
"temp": "Температура",
"max": "Макс.",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
"months": "мес",
"days": "д",
"hours": "ч",
"minutes": "м"
},
"docker": {
"rx": "Rx",
@ -34,34 +34,34 @@
"offline": "Не в сети",
"error": "Ошибка",
"unknown": "Неизвестный",
"running": "Running",
"starting": "Starting",
"unhealthy": "Unhealthy",
"not_found": "Not Found",
"exited": "Exited",
"partial": "Partial",
"healthy": "Healthy"
"running": "Запущенно",
"starting": "Запускается",
"unhealthy": "Не живой",
"not_found": "Не найден",
"exited": "Существует",
"partial": "Частично",
"healthy": "Живой"
},
"emby": {
"playing": "Воспроизведение",
"transcoding": "Транскодирование",
"bitrate": "Битрейт",
"no_active": "Нет активных потоков",
"movies": "Movies",
"series": "Series",
"episodes": "Episodes",
"songs": "Songs"
"movies": "Фильмы",
"series": "Сериалы",
"episodes": "Эпизоды",
"songs": "Песни"
},
"tautulli": {
"playing": "Воспроизведение",
"transcoding": "Транскодирование",
"bitrate": "Битрейт",
"no_active": "No Active Streams"
"no_active": "Нет активных трансляций"
},
"rutorrent": {
"active": "Активный",
"upload": "Загрузить",
"download": "Скачать"
"upload": "Загрузка",
"download": "Загрузка"
},
"sonarr": {
"wanted": "Хотел",
@ -72,12 +72,12 @@
"wanted": "Хотел",
"queued": "В очереди",
"movies": "Фильмы",
"missing": "Missing"
"missing": "Пропущено"
},
"readarr": {
"wanted": "Wanted",
"queued": "Queued",
"books": "Books"
"wanted": "Хотел",
"queued": "В очереди",
"books": "Книги"
},
"ombi": {
"pending": "Ожидание",
@ -95,12 +95,12 @@
"gravity": "Сила тяжести"
},
"speedtest": {
"upload": "Загрузка",
"download": "Скачать",
"ping": "пинг"
"upload": "Отдача",
"download": "Загрузка",
"ping": "Пинг"
},
"portainer": {
"running": "Запущено",
"running": "Запущенно",
"stopped": "Остановлено",
"total": "Всего"
},
@ -121,92 +121,92 @@
"updating": "Обновление"
},
"overseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available",
"processing": "Processing"
"pending": "Ожидание",
"approved": "Одобрено",
"available": "Доступно",
"processing": "Обработка"
},
"sabnzbd": {
"rate": "Rate",
"queue": "Queue",
"timeleft": "Time Left"
"rate": "Оценка",
"queue": "Очередь",
"timeleft": "Осталось времени"
},
"nzbget": {
"rate": "Rate",
"remaining": "Remaining",
"downloaded": "Downloaded"
"rate": "Оценка",
"remaining": "Осталось",
"downloaded": "Загружено"
},
"coinmarketcap": {
"configure": "Configure one or more crypto currencies to track",
"1hour": "1 Hour",
"1day": "1 Day",
"7days": "7 Days",
"configure": "Настройте одну или несколько криптовалют для отслеживания",
"1hour": "1 Час",
"1day": "1 День",
"7days": "7 Дней",
"30days": "30 Дней"
},
"gotify": {
"apps": "Applications",
"clients": "Clients",
"messages": "Messages"
"apps": "Приложения",
"clients": "Клиенты",
"messages": "Сообщения"
},
"prowlarr": {
"enableIndexers": "Indexers",
"numberOfGrabs": "Grabs",
"numberOfQueries": "Queries",
"numberOfFailGrabs": "Fail Grabs",
"numberOfFailQueries": "Fail Queries"
"enableIndexers": "Индексаторы",
"numberOfGrabs": "Захваты",
"numberOfQueries": "Запросы",
"numberOfFailGrabs": "Неудачные захваты",
"numberOfFailQueries": "Неудачные запросы"
},
"transmission": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
"download": "Загрузка",
"upload": "Отдача",
"leech": "Пиры",
"seed": "Сиды"
},
"jackett": {
"configured": "Configured",
"errored": "Errored"
"configured": "Настроено",
"errored": "Ошибочно"
},
"bazarr": {
"missingEpisodes": "Missing Episodes",
"missingMovies": "Missing Movies"
"missingEpisodes": "Отсутствующие эпизоды",
"missingMovies": "Отсутствующие фильмы"
},
"lidarr": {
"wanted": "Wanted",
"queued": "Queued",
"albums": "Albums"
"wanted": "Хотел",
"queued": "В очереди",
"albums": "Альбомы"
},
"adguard": {
"queries": "Queries",
"blocked": "Blocked",
"filtered": "Filtered",
"latency": "Latency"
"queries": "Запросы",
"blocked": "Заблокировано",
"filtered": "Отсортировано",
"latency": "Задержка"
},
"qbittorrent": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
"download": "Загрузка",
"upload": "Отдача",
"leech": "Пиры",
"seed": "Сиды"
},
"mastodon": {
"user_count": "Users",
"status_count": "Posts",
"domain_count": "Domains"
"user_count": "Пользователи",
"status_count": "Посты",
"domain_count": "Домены"
},
"strelaysrv": {
"numConnections": "Connections",
"dataRelayed": "Relayed",
"transferRate": "Rate",
"numActiveSessions": "Sessions"
"numConnections": "Соединения",
"dataRelayed": "Ретранслировано",
"transferRate": "Оценка",
"numActiveSessions": "Сессий"
},
"authentik": {
"users": "Users",
"loginsLast24H": "Logins (24h)",
"failedLoginsLast24H": "Failed Logins (24h)"
"users": "Пользователи",
"loginsLast24H": "Входы (24ч)",
"failedLoginsLast24H": "Неудачные входы (24ч)"
},
"proxmox": {
"mem": "MEM",
"cpu": "CPU",
"mem": "Память",
"cpu": "Процессор",
"lxc": "LXC",
"vms": "VMs"
"vms": "Виртуальные машины"
},
"unifi": {
"users": "Пользователи",
@ -215,152 +215,152 @@
"wan": "WAN",
"lan_users": "Пользователи LAN",
"wlan_users": "Пользователи WLAN",
"up": "UP",
"down": "DOWN",
"wait": "Подождите",
"up": "Работает",
"down": "Не работает",
"wait": "Пожалуйста, подождите",
"lan": "LAN",
"wlan": "WLAN",
"devices": "Устройства",
"lan_devices": "Устройства подключённые по LAN",
"wlan_devices": "WLAN Devices",
"empty_data": "Subsystem status unknown"
"wlan_devices": "Подключения WLAN",
"empty_data": "Статус системы неизвестен"
},
"plex": {
"streams": "Active Streams",
"movies": "Movies",
"tv": "TV Shows",
"albums": "Albums"
"streams": "Активные трансляции",
"movies": "Фильмы",
"tv": "Передачи",
"albums": "Альбомы"
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"cpu": "Процессор",
"mem": "Память",
"wait": "Пожалуйста, подождите",
"temp": "Температура",
"uptime": "Работает",
"days": "д",
"hours": "ч"
},
"changedetectionio": {
"totalObserved": "Всего наблюдаемых",
"diffsDetected": "Обнаружены различия"
},
"wmo": {
"0-day": "Sunny",
"0-night": "Clear",
"71-night": "Light Snow",
"73-day": "Snow",
"73-night": "Snow",
"75-day": "Heavy Snow",
"75-night": "Heavy Snow",
"77-day": "Snow Grains",
"77-night": "Snow Grains",
"80-day": "Light Showers",
"80-night": "Light Showers",
"81-day": "Showers",
"1-day": "Mainly Sunny",
"1-night": "Mainly Clear",
"2-day": "Partly Cloudy",
"2-night": "Partly Cloudy",
"3-day": "Cloudy",
"3-night": "Cloudy",
"45-day": "Foggy",
"45-night": "Foggy",
"48-day": "Foggy",
"48-night": "Foggy",
"51-day": "Light Drizzle",
"51-night": "Light Drizzle",
"53-day": "Drizzle",
"53-night": "Drizzle",
"55-day": "Heavy Drizzle",
"55-night": "Heavy Drizzle",
"56-day": "Light Freezing Drizzle",
"56-night": "Light Freezing Drizzle",
"57-day": "Freezing Drizzle",
"57-night": "Freezing Drizzle",
"61-day": "Light Rain",
"61-night": "Light Rain",
"63-day": "Rain",
"63-night": "Rain",
"65-day": "Heavy Rain",
"65-night": "Heavy Rain",
"66-day": "Freezing Rain",
"66-night": "Freezing Rain",
"67-day": "Freezing Rain",
"67-night": "Freezing Rain",
"71-day": "Light Snow",
"81-night": "Showers",
"82-day": "Heavy Showers",
"82-night": "Heavy Showers",
"85-day": "Snow Showers",
"85-night": "Snow Showers",
"86-day": "Snow Showers",
"86-night": "Snow Showers",
"95-day": "Thunderstorm",
"95-night": "Thunderstorm",
"96-day": "Thunderstorm With Hail",
"96-night": "Thunderstorm With Hail",
"99-day": "Thunderstorm With Hail",
"99-night": "Thunderstorm With Hail"
"0-day": "Солнечно",
"0-night": "Ясно",
"71-night": "Лёгкий снег",
"73-day": "Снег",
"73-night": "Снег",
"75-day": "Сильный снегопад",
"75-night": "Сильный снегопад",
"77-day": "Снежные зёрна",
"77-night": "Снежные зёрна",
"80-day": "Слабый дождь",
"80-night": "Слабый дождь",
"81-day": "Ливень",
"1-day": "Преимущественно солнечно",
"1-night": "Преимущественно ясно",
"2-day": "Переменная облачность",
"2-night": "Переменная облачность",
"3-day": "Облачно",
"3-night": "Облачно",
"45-day": "Туманно",
"45-night": "Туманно",
"48-day": "Туманно",
"48-night": "Туманно",
"51-day": "Слегка моросит",
"51-night": "Слегка моросит",
"53-day": "Моросит",
"53-night": "Моросит",
"55-day": "Сильно моросит",
"55-night": "Сильно моросит",
"56-day": "Лёгкая изморозь",
"56-night": "Лёгкая изморозь",
"57-day": "Изморозь",
"57-night": "Изморозь",
"61-day": "Лёгкий дождь",
"61-night": "Лёгкий дождь",
"63-day": "Дождь",
"63-night": "Дождь",
"65-day": "Сильный дождь",
"65-night": "Сильный дождь",
"66-day": "Ледяной дождь",
"66-night": "Ледяной дождь",
"67-day": "Ледяной дождь",
"67-night": "Ледяной дождь",
"71-day": "Лёгкий снег",
"81-night": "Ливень",
"82-day": "Сильный ливень",
"82-night": "Сильный ливень",
"85-day": "Снегопад",
"85-night": "Снегопад",
"86-day": "Снегопад",
"86-night": "Снегопад",
"95-day": "Гроза",
"95-night": "Гроза",
"96-day": "Гроза с градом",
"96-night": "Гроза с градом",
"99-day": "Гроза с градом",
"99-night": "Гроза с градом"
},
"quicklaunch": {
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom",
"visit": "Visit",
"bookmark": "Закладка",
"service": "Сервис",
"search": "Поиск",
"custom": "Пользовательский",
"visit": "Посетить",
"url": "URL"
},
"homebridge": {
"available_update": "System",
"updates": "Updates",
"update_available": "Update Available",
"up_to_date": "Up to Date",
"available_update": "Система",
"updates": "Обновления",
"update_available": "Доступные обновления",
"up_to_date": "Обновлено",
"child_bridges_status": "{{ok}}/{{total}}",
"child_bridges": "Child Bridges",
"up": "Up",
"pending": "Pending",
"down": "Down"
"child_bridges": "Дочерние мосты",
"up": "Включено",
"pending": "В ожидании",
"down": "Выключено"
},
"autobrr": {
"approvedPushes": "Approved",
"rejectedPushes": "Rejected",
"filters": "Filters",
"indexers": "Indexers"
"approvedPushes": "Одобрено",
"rejectedPushes": "Отклонено",
"filters": "Фильтры",
"indexers": "Индексаторы"
},
"watchtower": {
"containers_scanned": "Scanned",
"containers_updated": "Updated",
"containers_failed": "Failed"
"containers_scanned": "Отсканировано",
"containers_updated": "Обновлено",
"containers_failed": "Неудачно"
},
"tubearchivist": {
"downloads": "Queue",
"videos": "Videos",
"channels": "Channels",
"playlists": "Playlists"
"downloads": "Очередь",
"videos": "Видео",
"channels": "Каналы",
"playlists": "Плейлисты"
},
"truenas": {
"load": "System Load",
"uptime": "Uptime",
"alerts": "Alerts",
"load": "Загрузка системы",
"uptime": "Время работы",
"alerts": "Уведомления",
"time": "{{value, number(style: unit; unitDisplay: long;)}}"
},
"navidrome": {
"nothing_streaming": "No Active Streams",
"please_wait": "Please Wait"
"nothing_streaming": "Нет активных трансляций",
"please_wait": "Пожалуйста, подождите"
},
"pyload": {
"speed": "Speed",
"active": "Active",
"queue": "Queue",
"total": "Total"
"speed": "Скорость",
"active": "Активный",
"queue": "Очередь",
"total": "Всего"
},
"gluetun": {
"public_ip": "Public IP",
"region": "Region",
"country": "Country"
"public_ip": "Публичный IP",
"region": "Регион",
"country": "Страна"
},
"hdhomerun": {
"channels": "Channels",
"channels": "Каналы",
"hd": "HD"
},
"ping": {
@ -368,219 +368,221 @@
"ping": "Пинг"
},
"scrutiny": {
"failed": "Failed",
"unknown": "Unknown",
"passed": "Passed"
"failed": "Неудачно",
"unknown": "Неизвестный",
"passed": "Пройдено"
},
"paperlessngx": {
"inbox": "Inbox",
"total": "Total"
"inbox": "Входящие",
"total": "Всего"
},
"deluge": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
"download": "Загрузка",
"upload": "Отдача",
"leech": "Пиры",
"seed": "Сиды"
},
"flood": {
"upload": "Upload",
"download": "Download",
"leech": "Leech",
"seed": "Seed"
"upload": "Отдача",
"download": "Загрузка",
"leech": "Пиры",
"seed": "Сиды"
},
"tdarr": {
"queue": "Queue",
"processed": "Processed",
"errored": "Errored",
"saved": "Saved"
"queue": "Очередь",
"processed": "Обработано",
"errored": "Ошибочно",
"saved": "Сохранено"
},
"miniflux": {
"read": "Read",
"unread": "Unread"
"read": "Прочитанные",
"unread": "Непрочитанные"
},
"nextdns": {
"wait": "Please Wait",
"no_devices": "No Device Data Received"
"wait": "Пожалуйста, подождите",
"no_devices": "Данные устройства не получены"
},
"common": {
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
},
"omada": {
"connectedSwitches": "Connected switches",
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways"
"connectedSwitches": "Подключенные свитчи",
"connectedAp": "Подключенные точки доступа",
"activeUser": "Активные устройства",
"alerts": "Оповещения",
"connectedGateway": "Подключенные шлюзы"
},
"downloadstation": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
"download": "Загрузка",
"upload": "Отдача",
"leech": "Пиры",
"seed": "Сиды"
},
"mikrotik": {
"cpuLoad": "CPU Load",
"memoryUsed": "Memory Used",
"uptime": "Uptime",
"numberOfLeases": "Leases"
"cpuLoad": "Загрузка процессора",
"memoryUsed": "Использование памяти",
"uptime": "Время работы",
"numberOfLeases": "Аренды"
},
"xteve": {
"streams_all": "All Streams",
"streams_active": "Active Streams",
"streams_xepg": "XEPG Channels"
"streams_all": "Все трансляции",
"streams_active": "Активные трансляции",
"streams_xepg": "XEPG-каналы"
},
"opnsense": {
"cpu": "CPU Load",
"memory": "Active Memory",
"wanUpload": "WAN Upload",
"wanDownload": "WAN Download"
"cpu": "Загрузка процессора",
"memory": "Активная память",
"wanUpload": "Отдача через WAN",
"wanDownload": "Загрузка через WAN"
},
"moonraker": {
"printer_state": "Printer State",
"print_status": "Print Status",
"print_progress": "Progress",
"layers": "Layers"
"printer_state": "Состояние принтера",
"print_status": "Статус печати",
"print_progress": "Прогресс",
"layers": "Слои"
},
"medusa": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Series"
"wanted": "Хотел",
"queued": "В очереди",
"series": "Сериалы"
},
"octoprint": {
"printer_state": "Status",
"temp_tool": "Tool temp",
"temp_bed": "Bed temp",
"job_completion": "Completion"
"printer_state": "Статус",
"temp_tool": "Температура инструмента",
"temp_bed": "Температура стола",
"job_completion": "Завершение"
},
"cloudflared": {
"origin_ip": "Origin IP",
"status": "Status"
"origin_ip": "IP источника",
"status": "Статус"
},
"proxmoxbackupserver": {
"datastore_usage": "Datastore",
"failed_tasks_24h": "Failed Tasks 24h",
"cpu_usage": "CPU",
"memory_usage": "Memory"
"datastore_usage": "Хранилище данных",
"failed_tasks_24h": "Неудачные задачи 24ч",
"cpu_usage": "Процессор",
"memory_usage": "Память"
},
"immich": {
"users": "Users",
"photos": "Photos",
"videos": "Videos",
"storage": "Storage"
"users": "Пользователи",
"photos": "Фотографии",
"videos": "Видео",
"storage": "Хранилище"
},
"uptimekuma": {
"up": "Sites Up",
"down": "Sites Down",
"uptime": "Uptime",
"incident": "Incident",
"m": "m"
"up": "Сайтов включено",
"down": "Сайтов выключено",
"uptime": "Время работы",
"incident": "Инцидент",
"m": "м"
},
"komga": {
"libraries": "Libraries",
"series": "Series",
"books": "Books"
"libraries": "Библиотеки",
"series": "Серии",
"books": "Книги"
},
"mylar": {
"series": "Series",
"issues": "Issues",
"wanted": "Wanted"
"series": "Серии",
"issues": "Проблемы",
"wanted": "Хотел"
},
"photoprism": {
"albums": "Albums",
"photos": "Photos",
"videos": "Videos",
"people": "People"
"albums": "Альбомы",
"photos": "Фотографии",
"videos": "Видео",
"people": "Люди"
},
"diskstation": {
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
"days": "Дней",
"uptime": "Время работы",
"volumeAvailable": "Доступно"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
"queue": "Очередь",
"processing": "Обработка",
"processed": "Обработано",
"time": "Время"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
"dashboards": "Панели мониторинга",
"datasources": "Источники данных",
"totalalerts": "Всего уведомлений",
"alertstriggered": "Уведомлений сработало"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"cpuload": "Загрузка процессора",
"memoryusage": "Использование памяти",
"freespace": "Свободное место",
"activeusers": "Активные пользователи",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
"status": "Статус",
"size": "Размер",
"lastrun": "Последний запуск",
"nextrun": "Следующий запуск",
"failed": "Неудачно"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
"active_workers": "Активные воркеры",
"total_workers": "Всего воркеров",
"records_total": "Длина запроса"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
"new": "Новые",
"up": "Онлайн",
"grace": "В льготный период",
"down": "Офлайн",
"paused": "Приостановлено",
"status": "Статус",
"last_ping": "Последний пинг",
"never": "Пока нет пингов"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
"servers": "Сервера",
"nodes": "Узлы"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
"targets_up": "Целей включено",
"targets_down": "Целей выключено",
"targets_total": "Всего целей"
},
"minecraft": {
"players": "Players",
"version": "Version",
"status": "Status",
"up": "Online",
"down": "Offline"
"players": "Игроков",
"version": "Версия",
"status": "Статус",
"up": "Онлайн",
"down": "Офлайн"
},
"ghostfolio": {
"gross_percent_today": "Today",
"gross_percent_1y": "One year",
"gross_percent_max": "All time"
"gross_percent_today": "Сегодня",
"gross_percent_1y": "1 год",
"gross_percent_max": "За всё время"
},
"audiobookshelf": {
"podcasts": "Podcasts",
"books": "Books",
"podcastsDuration": "Duration",
"booksDuration": "Duration"
"podcasts": "Подкасты",
"books": "Книги",
"podcastsDuration": "Продолжительность",
"booksDuration": "Продолжительность"
},
"homeassistant": {
"people_home": "People Home",
"lights_on": "Lights On",
"switches_on": "Switches On"
"people_home": "Людей дома",
"lights_on": "Включено света",
"switches_on": "Включено переключателей"
},
"freshrss": {
"subscriptions": "Subscriptions",
"unread": "Unread"
"subscriptions": "Подписки",
"unread": "Непрочитанные"
},
"channelsdvrserver": {
"shows": "Shows",
"recordings": "Recordings",
"scheduled": "Scheduled",
"passes": "Passes"
"shows": "Сериалы",
"recordings": "Записи",
"scheduled": "Запланировано",
"passes": "Пройдено"
},
"whatsupdocker": {
"monitoring": "Monitoring",
"updates": "Updates"
"monitoring": "Мониторинг",
"updates": "Обновления"
}
}

View File

@ -534,7 +534,9 @@
"freespace": "Free Space",
"activeusers": "Active Users",
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage"
"memoryusage": "Memory Usage",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -68,7 +68,9 @@
"cpuload": "CPU obremenitev",
"memoryusage": "Uporabljen spomin",
"freespace": "Prostor na voljo",
"activeusers": "Aktivni uporabniki"
"activeusers": "Aktivni uporabniki",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Stanje",
@ -193,10 +195,10 @@
"streams": "Aktivna vsebina",
"movies": "Filmi",
"tv": "TV serije",
"albums": "Albums"
"albums": "Albumi"
},
"sabnzbd": {
"rate": "Hitrost prenosa",
"rate": "Hitrost",
"queue": "Vrsta",
"timeleft": "Preostali čas"
},
@ -236,7 +238,7 @@
},
"radarr": {
"wanted": "Iskano",
"missing": "Manjkajoče",
"missing": "Manjka",
"queued": "V vrsti",
"movies": "Filmi"
},
@ -341,7 +343,7 @@
},
"proxmox": {
"lxc": "LXC",
"vms": "VM-ji",
"vms": "VM",
"mem": "MEM",
"cpu": "CPU"
},
@ -521,10 +523,10 @@
"storage": "Shramba"
},
"uptimekuma": {
"up": "Povezanih strani",
"down": "Nepovezanih strani",
"up": "Deluje",
"down": "Ne deluje",
"uptime": "Čas delovanja",
"incident": "Težave",
"incident": "Incident",
"m": "m"
},
"komga": {
@ -561,11 +563,11 @@
"audiobookshelf": {
"podcasts": "Podcasti",
"books": "Knjige",
"podcastsDuration": "Dolžina",
"booksDuration": "Dolžina"
"podcastsDuration": "Trajanje",
"booksDuration": "Trajanje"
},
"homeassistant": {
"people_home": "Ljudi doma",
"people_home": "Ljudje doma",
"lights_on": "Vklopljene luči",
"switches_on": "Vklopljena stikala"
},
@ -580,7 +582,7 @@
"passes": "Prehodi"
},
"whatsupdocker": {
"monitoring": "Monitoring",
"updates": "Updates"
"monitoring": "Se spremlja",
"updates": "Posodobitve"
}
}

View File

@ -513,7 +513,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"cpuload": "Cpu Load",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"cpuload": "Навантаження Cpu",
"memoryusage": "Використання пам'яті",
"freespace": "Вільного місця",
"activeusers": "Активні користувачі"
"activeusers": "Активні користувачі",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Статус",
@ -580,7 +582,7 @@
"passes": "Перепустки"
},
"whatsupdocker": {
"monitoring": "Monitoring",
"updates": "Updates"
"monitoring": "Спостереження",
"updates": "Оновлення"
}
}

View File

@ -513,7 +513,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",

View File

@ -513,7 +513,9 @@
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"lastrun": "Last Run",

View File

@ -229,7 +229,7 @@
"streams": "活动流",
"movies": "电影",
"tv": "电视节目",
"albums": "Albums"
"albums": "专辑"
},
"glances": {
"cpu": "处理器",
@ -513,7 +513,9 @@
"cpuload": "处理器负载",
"memoryusage": "内存占用",
"freespace": "剩余空间",
"activeusers": "活跃用户"
"activeusers": "活跃用户",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "状态",
@ -542,9 +544,9 @@
"nodes": "节点"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
"targets_up": "目标离线",
"targets_down": "目标在线",
"targets_total": "总目标"
},
"minecraft": {
"players": "播放中",
@ -570,13 +572,13 @@
"switches_on": "Switches On"
},
"freshrss": {
"subscriptions": "Subscriptions",
"unread": "Unread"
"subscriptions": "订阅",
"unread": "未读"
},
"channelsdvrserver": {
"shows": "Shows",
"recordings": "Recordings",
"scheduled": "Scheduled",
"shows": "节目",
"recordings": "录像",
"scheduled": "已计划的",
"passes": "Passes"
},
"whatsupdocker": {

View File

@ -26,8 +26,8 @@
"starting": "啟動中",
"unhealthy": "不健康的",
"not_found": "未找到",
"exited": "Exited",
"partial": "Partial",
"exited": "已退出",
"partial": "部分",
"healthy": "健康的"
},
"emby": {
@ -35,10 +35,10 @@
"transcoding": "轉碼",
"bitrate": "位元率",
"no_active": "無播放活動",
"movies": "Movies",
"series": "Series",
"episodes": "Episodes",
"songs": "Songs"
"movies": "電影",
"series": "影集",
"episodes": "",
"songs": "曲目"
},
"tautulli": {
"playing": "正在播放",
@ -61,13 +61,13 @@
"load": "負載",
"cpu": "CPU",
"mem": "記憶體",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
"temp": "溫度",
"max": "最大",
"uptime": "運行時間",
"months": "",
"days": "",
"hours": "",
"minutes": ""
},
"nzbget": {
"rate": "速率",
@ -98,7 +98,7 @@
"readarr": {
"wanted": "關注中",
"queued": "已加入佇列",
"books": ""
"books": "書"
},
"ombi": {
"pending": "待下載",
@ -114,7 +114,7 @@
"pihole": {
"queries": "查詢",
"blocked": "已阻擋",
"gravity": "Gravity"
"gravity": "阻擋清單"
},
"speedtest": {
"upload": "上行速率",
@ -229,16 +229,16 @@
"streams": "正在播放",
"movies": "電影",
"tv": "影集",
"albums": "Albums"
"albums": "專輯"
},
"glances": {
"cpu": "CPU",
"mem": "記憶體",
"wait": "請稍後",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"temp": "溫度",
"uptime": "運行時間",
"days": "",
"hours": ""
},
"changedetectionio": {
"totalObserved": "總監測數",
@ -307,8 +307,8 @@
"service": "服務",
"search": "搜尋",
"custom": "自訂",
"visit": "Visit",
"url": "URL"
"visit": "訪問",
"url": "網址"
},
"homebridge": {
"available_update": "系統",
@ -317,9 +317,9 @@
"up_to_date": "已更新至最新",
"child_bridges": "Child Bridges",
"child_bridges_status": "{{ok}}/{{total}}",
"up": "Up",
"pending": "Pending",
"down": "Down"
"up": "在線",
"pending": "處理中",
"down": "離線"
},
"autobrr": {
"approvedPushes": "已核准",
@ -479,7 +479,7 @@
"komga": {
"libraries": "文庫",
"series": "叢刊",
"books": ""
"books": "書"
},
"mylar": {
"series": "系列",
@ -513,7 +513,9 @@
"cpuload": "處理器負載",
"memoryusage": "記憶體用量",
"freespace": "可用空間",
"activeusers": "活躍用戶"
"activeusers": "活躍用戶",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "狀態",
@ -523,9 +525,9 @@
"failed": "失敗"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
"active_workers": "在線工作程序",
"total_workers": "總工作程序",
"records_total": "佇列長度"
},
"healthchecks": {
"new": "新建立",
@ -538,49 +540,49 @@
"never": "尚未檢查"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
"servers": "伺服器",
"nodes": "節點"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
"targets_up": "目標上線",
"targets_down": "目標離線",
"targets_total": "目標總數"
},
"minecraft": {
"players": "Players",
"version": "Version",
"status": "Status",
"up": "Online",
"down": "Offline"
"players": "玩家",
"version": "版本",
"status": "狀態",
"up": "上線",
"down": "離線"
},
"ghostfolio": {
"gross_percent_today": "Today",
"gross_percent_1y": "One year",
"gross_percent_max": "All time"
"gross_percent_today": "今日",
"gross_percent_1y": "一年",
"gross_percent_max": "所有時間"
},
"audiobookshelf": {
"podcasts": "Podcasts",
"books": "Books",
"podcastsDuration": "Duration",
"booksDuration": "Duration"
"podcasts": "播客",
"books": "叢書",
"podcastsDuration": "歷時",
"booksDuration": "歷時"
},
"homeassistant": {
"people_home": "People Home",
"lights_on": "Lights On",
"switches_on": "Switches On"
"people_home": "在家人數",
"lights_on": "燈亮著",
"switches_on": "開關開著"
},
"freshrss": {
"subscriptions": "Subscriptions",
"unread": "Unread"
"subscriptions": "訂閱",
"unread": "未讀"
},
"channelsdvrserver": {
"shows": "Shows",
"recordings": "Recordings",
"scheduled": "Scheduled",
"passes": "Passes"
"shows": "節目",
"recordings": "錄影",
"scheduled": "已排定",
"passes": "通行證"
},
"whatsupdocker": {
"monitoring": "Monitoring",
"updates": "Updates"
"monitoring": "監測中",
"updates": "可更新"
}
}

View File

@ -4,7 +4,7 @@ export default function List({ bookmarks }) {
return (
<ul className="mt-3 flex flex-col">
{bookmarks.map((bookmark) => (
<Item key={bookmark.name} bookmark={bookmark} />
<Item key={`${bookmark.name}-${bookmark.href}`} bookmark={bookmark} />
))}
</ul>
);

View File

@ -161,7 +161,7 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear
)} 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.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(
"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",

View File

@ -1,6 +1,18 @@
import { useContext } from "react";
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" }) {
const { settings } = useContext(SettingsContext);
const { theme } = useContext(ThemeContext);
// direct or relative URLs
if (icon.startsWith("http") || icon.startsWith("/")) {
return (
@ -12,15 +24,22 @@ export default function ResolvedIcon({ icon, width = 32, height = 32, alt = "log
width,
height,
objectFit: "contain",
maxHeight: "100%",
maxWidth: "100%",
}}
alt={alt}
/>
);
}
// mdi- prefixed, material design icons
if (icon.startsWith("mdi-")) {
const iconName = icon.replace("mdi-", "").replace(".svg", "");
// check mdi- or si- prefixed icons
const prefix = icon.split("-")[0]
if (prefix in iconSetURLs) {
// get icon source
const iconName = icon.replace(`${prefix}-`, "").replace(".svg", "");
const iconSource = `${iconSetURLs[prefix]}${iconName}.svg`;
return (
<div
style={{
@ -28,9 +47,11 @@ export default function ResolvedIcon({ icon, width = 32, height = 32, alt = "log
height,
maxWidth: '100%',
maxHeight: '100%',
background: "linear-gradient(180deg, rgb(var(--color-logo-start)), rgb(var(--color-logo-stop)))",
mask: `url(https://cdn.jsdelivr.net/npm/@mdi/svg@latest/svg/${iconName}.svg) no-repeat center / contain`,
WebkitMask: `url(https://cdn.jsdelivr.net/npm/@mdi/svg@latest/svg/${iconName}.svg) no-repeat center / contain`,
background: settings.iconStyle === "theme" ?
`rgb(var(--color-${ theme === "dark" ? 300 : 900 }) / var(--tw-text-opacity, 1))` :
"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,
height,
objectFit: "contain",
maxHeight: "100%",
maxWidth: "100%"
}}
alt={alt}
/>

View File

@ -1,8 +1,18 @@
import { useContext } from "react";
import Error from "./error";
import { SettingsContext } from "utils/contexts/settings";
export default function Container({ error = false, children, service }) {
const { settings } = useContext(SettingsContext);
if (error) {
return <Error error={error} />
if (settings.hideErrors || service.widget.hide_errors) {
return null;
}
return <Error service={service} error={error} />
}
let visibleChildren = children;

View File

@ -9,12 +9,10 @@ function displayData(data) {
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();
if (error?.data?.error) {
error = error.data.error; // eslint-disable-line no-param-reassign
}
const { error } = err?.data ?? { error: err };
return (
<details className="px-1 pb-1">

View File

@ -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);
if (containerExists) {

View File

@ -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);
if (containerExists) {

View File

@ -286,7 +286,7 @@ function Home({ initialSettings }) {
)}
</div>
{services && (
{services?.length > 0 && (
<div className="flex flex-wrap p-4 sm:p-8 sm:pt-4 items-start pb-2">
{services.map((group) => (
<ServicesGroup key={group.name} services={group} layout={initialSettings.layout?.[group.name]} fiveColumns={settings.fiveColumns} />
@ -294,7 +294,7 @@ function Home({ initialSettings }) {
</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)}`}>
{bookmarks.map((group) => (
<BookmarksGroup key={group.name} group={group} />

View File

@ -257,6 +257,7 @@ export function cleanServiceGroups(groups) {
const {
type, // all widgets
fields,
hideErrors,
server, // docker widget
container,
currency, // coinmarketcap widget
@ -269,7 +270,7 @@ export function cleanServiceGroups(groups) {
wan, // opnsense widget,
enableBlocks, // emby/jellyfin
enableNowPlaying,
volume // diskstation widget
volume, // diskstation widget
} = cleanedService.widget;
const fieldsList = typeof fields === 'string' ? JSON.parse(fields) : fields;
@ -277,6 +278,7 @@ export function cleanServiceGroups(groups) {
cleanedService.widget = {
type,
fields: fieldsList || null,
hide_errors: hideErrors || false,
service_name: service.name,
service_group: serviceGroup.name,
};

View File

@ -12,7 +12,7 @@ export default function Component({ service }) {
const { data: adguardData, error: adguardError } = useWidgetAPI(widget, "stats");
if (adguardError) {
return <Container error={adguardError} />;
return <Container service={service} error={adguardError} />;
}
if (!adguardData) {

View File

@ -12,7 +12,7 @@ export default function Component({ service }) {
if (librariesError) {
return <Container error={librariesError} />;
return <Container service={service} error={librariesError} />;
}
if (!librariesData) {

View File

@ -15,7 +15,7 @@ export default function Component({ service }) {
if (usersError || loginsError || failedLoginsError) {
const finalError = usersError ?? loginsError ?? failedLoginsError;
return <Container error={finalError} />;
return <Container service={service} error={finalError} />;
}
if (!usersData || !loginsData || !failedLoginsData) {

View File

@ -15,7 +15,7 @@ export default function Component({ service }) {
if (statsError || filtersError || indexersError) {
const finalError = statsError ?? filtersError ?? indexersError;
return <Container error={finalError} />;
return <Container service={service} error={finalError} />;
}
if (!statsData || !filtersData || !indexersData) {

View File

@ -14,7 +14,7 @@ export default function Component({ service }) {
if (moviesError || episodesError) {
const finalError = moviesError ?? episodesError;
return <Container error={finalError} />;
return <Container service={service} error={finalError} />;
}
if (!episodesData || !moviesData) {

View File

@ -12,7 +12,7 @@ export default function Component({ service }) {
const { data, error } = useWidgetAPI(widget, "info");
if (error) {
return <Container error={error} />;
return <Container service={service} error={error} />;
}
if (!data) {

View File

@ -11,7 +11,7 @@ export default function Component({ service }) {
const { data: channelsData, error: channelsError } = useWidgetAPI(widget, "status");
if (channelsError) {
return <Container error={channelsError} />;
return <Container service={service} error={channelsError} />;
}
if (!channelsData) {

View File

@ -8,7 +8,7 @@ export default function Component({ service }) {
const { data: statsData, error: statsError } = useWidgetAPI(widget, "cfd_tunnel");
if (statsError) {
return <Container error={statsError} />;
return <Container service={service} error={statsError} />;
}
if (!statsData) {

View File

@ -38,7 +38,7 @@ export default function Component({ service }) {
}
if (statsError) {
return <Container error={statsError} />;
return <Container service={service} error={statsError} />;
}
if (!statsData || !dateRange) {

View File

@ -12,7 +12,7 @@ export default function Component({ service }) {
const { data: torrentData, error: torrentError } = useWidgetAPI(widget);
if (torrentError) {
return <Container error={torrentError} />;
return <Container service={service} error={torrentError} />;
}
if (!torrentData) {

View File

@ -12,7 +12,7 @@ export default function Component({ service }) {
const { data: utilizationData, error: utilizationError } = useWidgetAPI(widget, "utilization");
if (storageError || infoError || utilizationError) {
return <Container error={ storageError ?? infoError ?? utilizationError } />;
return <Container service={service} error={ storageError ?? infoError ?? utilizationError } />;
}
if (!storageData || !infoData || !utilizationData) {

View File

@ -19,7 +19,7 @@ export default function Component({ service }) {
if (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"))) {

View File

@ -10,7 +10,7 @@ export default function Component({ service }) {
const { data: listData, error: listError } = useWidgetAPI(widget, "list");
if (listError) {
return <Container error={listError} />;
return <Container service={service} error={listError} />;
}
const tasks = listData?.data?.tasks;

View File

@ -206,7 +206,7 @@ export default function Component({ service }) {
}
if (sessionsError || countError) {
return <Container error={sessionsError ?? countError} />;
return <Container service={service} error={sessionsError ?? countError} />;
}
const enableBlocks = service.widget?.enableBlocks

View File

@ -12,7 +12,7 @@ export default function Component({ service }) {
const { data: fileflowsData, error: fileflowsError } = useWidgetAPI(widget, "status");
if (fileflowsError) {
return <Container error={fileflowsError} />;
return <Container service={service} error={fileflowsError} />;
}
if (!fileflowsData) {

View File

@ -12,7 +12,7 @@ export default function Component({ service }) {
const { data: torrentData, error: torrentError } = useWidgetAPI(widget, "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) {

View File

@ -12,7 +12,7 @@ export default function Component({ service }) {
const { data: freshrssData, error: freshrssError } = useWidgetAPI(widget, "info");
if (freshrssError) {
return <Container error={freshrssError} />;
return <Container service={service} error={freshrssError} />;
}
if (!freshrssData) {

View File

@ -18,7 +18,7 @@ export default function Component({ service }) {
if (ghostfolioErrorToday || ghostfolioErrorYear || ghostfolioErrorMax) {
const finalError = ghostfolioErrorToday ?? ghostfolioErrorYear ?? ghostfolioErrorMax
return <Container error={finalError} />;
return <Container service={service} error={finalError} />;
}
if (!performanceToday || !performanceYear || !performanceMax) {

View File

@ -8,7 +8,7 @@ export default function Component({ service }) {
const { data: gluetunData, error: gluetunError } = useWidgetAPI(widget, "ip");
if (gluetunError) {
return <Container error={gluetunError} />;
return <Container service={service} error={gluetunError} />;
}
if (!gluetunData) {

View File

@ -11,7 +11,7 @@ export default function Component({ service }) {
if (appsError || messagesError || clientsError) {
const finalError = appsError ?? messagesError ?? clientsError;
return <Container error={finalError} />;
return <Container service={service} error={finalError} />;
}

View File

@ -12,7 +12,7 @@ export default function Component({ service }) {
const { data: alertsData, error: alertsError } = useWidgetAPI(widget, "alerts");
if (statsError || alertsError) {
return <Container error={statsError ?? alertsError} />;
return <Container service={service} error={statsError ?? alertsError} />;
}
if (!statsData || !alertsData) {

View File

@ -8,7 +8,7 @@ export default function Component({ service }) {
const { data: channelsData, error: channelsError } = useWidgetAPI(widget, "lineup");
if (channelsError) {
return <Container error={channelsError} />;
return <Container service={service} error={channelsError} />;
}
if (!channelsData) {

View File

@ -30,7 +30,7 @@ export default function Component({ service }) {
const { data, error } = useWidgetAPI(widget, "checks");
if (error) {
return <Container error={error} />;
return <Container service={service} error={error} />;
}
if (!data) {

View File

@ -7,7 +7,7 @@ export default function Component({ service }) {
const { data, error } = useWidgetAPI(widget, null, { refreshInterval: 60000 });
if (error) {
return <Container error={error} />;
return <Container service={service} error={error} />;
}
return <Container service={service}>

View File

@ -12,7 +12,7 @@ export default function Component({ service }) {
const { data: homebridgeData, error: homebridgeError } = useWidgetAPI(widget, "info");
if (homebridgeError) {
return <Container error={homebridgeError} />;
return <Container service={service} error={homebridgeError} />;
}
if (!homebridgeData) {

View File

@ -11,7 +11,7 @@ export default function Component({ service }) {
const { data: immichData, error: immichError } = useWidgetAPI(widget);
if (immichError || immichData?.statusCode === 401) {
return <Container error={immichError ?? immichData} />;
return <Container service={service} error={immichError ?? immichData} />;
}
if (!immichData) {

View File

@ -12,7 +12,7 @@ export default function Component({ service }) {
const { data: indexersData, error: indexersError } = useWidgetAPI(widget, "indexers");
if (indexersError) {
return <Container error={indexersError} />;
return <Container service={service} error={indexersError} />;
}
if (!indexersData) {

View File

@ -8,7 +8,7 @@ export default function Component({ service }) {
const { data: statsData, error: statsError } = useWidgetAPI(widget, "request/count");
if (statsError) {
return <Container error={statsError} />;
return <Container service={service} error={statsError} />;
}
if (!statsData) {

View File

@ -14,7 +14,7 @@ export default function Component({ service }) {
if (libraryError || seriesError || bookError) {
const finalError = libraryError ?? seriesError ?? bookError;
return <Container error={finalError} />;
return <Container service={service} error={finalError} />;
}
if (!libraryData || !seriesData || !bookData) {

View File

@ -38,7 +38,7 @@ export default function Component({ service }) {
const { data: statusData, error: statusError } = useWidgetAPI(widget, "status");
if (statusError) {
return <Container error={statusError} />;
return <Container service={service} error={statusError} />;
}
const source = statusData?.sources[0];

View File

@ -16,7 +16,7 @@ export default function Component({ service }) {
`/api/kubernetes/stats/${widget.namespace}/${widget.app}?${podSelectorString}`);
if (statsError || statusError) {
return <Container error={t("widget.api_error")} />;
return <Container service={service} error={t("widget.api_error")} />;
}
if (statusData && statusData.status !== "running") {

View File

@ -15,7 +15,7 @@ export default function Component({ service }) {
if (albumsError || wantedError || queueError) {
const finalError = albumsError ?? wantedError ?? queueError;
return <Container error={finalError} />;
return <Container service={service} error={finalError} />;
}
if (!albumsData || !wantedData || !queueData) {

View File

@ -12,7 +12,7 @@ export default function Component({ service }) {
const { data: statsData, error: statsError } = useWidgetAPI(widget, "instance");
if (statsError) {
return <Container error={statsError} />;
return <Container service={service} error={statsError} />;
}
if (!statsData) {

View File

@ -13,7 +13,7 @@ export default function Component({ service }) {
if (statsError || futureError) {
const finalError = statsError ?? futureError;
return <Container error={finalError} />;
return <Container service={service} error={finalError} />;
}
if (!statsData || !futureData) {

View File

@ -14,7 +14,7 @@ export default function Component({ service }) {
if (statsError || leasesError) {
const finalError = statsError ?? leasesError;
return <Container error={ finalError } />;
return <Container service={service} error={ finalError } />;
}
if (!statsData || !leasesData) {

View File

@ -10,7 +10,7 @@ export default function Component({ service }) {
const { t } = useTranslation();
if(serverError){
return <Container error={serverError} />;
return <Container service={service} error={serverError} />;
}
if (!serverData) {
return (

View File

@ -12,7 +12,7 @@ export default function Component({ service }) {
const { data: minifluxData, error: minifluxError } = useWidgetAPI(widget, "counters");
if (minifluxError) {
return <Container error={minifluxError} />;
return <Container service={service} error={minifluxError} />;
}
if (!minifluxData) {

View File

@ -15,7 +15,7 @@ export default function Component({ service }) {
if (printStatsError || displayStatsError || webHooksError) {
const finalError = printStatsError ?? displayStatsError ?? webHooksError;
return <Container error={finalError} />;
return <Container service={service} error={finalError} />;
}
if (!printStats || !displayStatus || !webHooks) {

View File

@ -15,7 +15,7 @@ export default function Component({ service }) {
if (seriesError || issuesError || wantedError) {
const finalError = seriesError ?? issuesError ?? wantedError;
return <Container error={finalError} />;
return <Container service={service} error={finalError} />;
}
if (!seriesData || !issuesData || !wantedData) {

View File

@ -27,7 +27,7 @@ export default function Component({ service }) {
const { data: navidromeData, error: navidromeError } = useWidgetAPI(widget, "getNowPlaying");
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) {

View File

@ -1,4 +1,5 @@
import { useTranslation } from "next-i18next";
import { useMemo } from "react";
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
@ -10,30 +11,53 @@ export default function Component({ service }) {
const { widget } = service;
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) {
return <Container error={nextcloudError} />;
return <Container service={service} error={nextcloudError} />;
}
if (!nextcloudData) {
return (
<Container service={service}>
<Block label="nextcloud.cpuload" />
<Block label="nextcloud.memoryusage" />
{showCpuLoad && <Block label="nextcloud.cpuload" />}
{showMemoryUsage && <Block label="nextcloud.memoryusage" />}
<Block label="nextcloud.freespace" />
<Block label="nextcloud.activeusers" />
<Block label="nextcloud.numfiles" />
<Block label="nextcloud.numshares" />
</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));
return (
<Container service={service}>
<Block label="nextcloud.cpuload" value={t("common.percent", { value: nextcloudInfo.system.cpuload[0] })} />
<Block label="nextcloud.memoryusage" value={t("common.percent", { value:memoryUsage })} />
{showCpuLoad && <Block label="nextcloud.cpuload" value={t("common.percent", { value: nextcloudInfo.system.cpuload[0] })} />}
{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.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>
);
}

View File

@ -12,7 +12,7 @@ export default function Component({ service }) {
const { data: nextdnsData, error: nextdnsError } = useWidgetAPI(widget, "analytics/status");
if (nextdnsError) {
return <Container error={nextdnsError} />;
return <Container service={service} error={nextdnsError} />;
}
if (!nextdnsData) {

View File

@ -8,7 +8,7 @@ export default function Component({ service }) {
const { data: infoData, error: infoError } = useWidgetAPI(widget, "nginx/proxy-hosts");
if (infoError) {
return <Container error={infoError} />;
return <Container service={service} error={infoError} />;
}
if (!infoData) {

View File

@ -12,7 +12,7 @@ export default function Component({ service }) {
const { data: statusData, error: statusError } = useWidgetAPI(widget, "status");
if (statusError) {
return <Container error={statusError} />;
return <Container service={service} error={statusError} />;
}
if (!statusData) {

View File

@ -9,11 +9,11 @@ export default function Component({ service }) {
const { data: jobStats, error: jobStatsError } = useWidgetAPI(widget, "job_stats");
if (printerStatsError) {
return <Container error={printerStatsError} />;
return <Container service={service} error={printerStatsError} />;
}
if (jobStatsError) {
return <Container error={jobStatsError} />;
return <Container service={service} error={jobStatsError} />;
}
const state = printerStats?.state?.text;

View File

@ -14,7 +14,7 @@ export default function Component({ service }) {
});
if (omadaAPIError) {
return <Container error={omadaAPIError} />;
return <Container service={service} error={omadaAPIError} />;
}
if (!omadaData) {

View File

@ -8,7 +8,7 @@ export default function Component({ service }) {
const { data: statsData, error: statsError } = useWidgetAPI(widget, "Request/count");
if (statsError) {
return <Container error={statsError} />;
return <Container service={service} error={statsError} />;
}
if (!statsData) {

View File

@ -14,7 +14,7 @@ export default function Component({ service }) {
if (activityError || interfaceError) {
const finalError = activityError ?? interfaceError;
return <Container error={ finalError } />;
return <Container service={service} error={ finalError } />;
}
if (!activityData || !interfaceData) {

View File

@ -11,7 +11,7 @@ export default function Component({ service }) {
const { data: statsData, error: statsError } = useWidgetAPI(widget, "request/count");
if (statsError) {
return <Container error={statsError} />;
return <Container service={service} error={statsError} />;
}
if (!statsData) {

View File

@ -8,7 +8,7 @@ export default function Component({ service }) {
const { data: statisticsData, error: statisticsError } = useWidgetAPI(widget, "statistics");
if (statisticsError) {
return <Container error={statisticsError} />;
return <Container service={service} error={statisticsError} />;
}
if (!statisticsData) {

Some files were not shown because too many files have changed in this diff Show More