From d855e2b396f58ca691edd0375bd888199f5981fa Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 9 Dec 2023 21:27:02 -0800 Subject: [PATCH 01/20] Fix: Increase kubernetes cpu/mem usage scale (#2453) --- src/pages/api/kubernetes/stats/[...service].js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/api/kubernetes/stats/[...service].js b/src/pages/api/kubernetes/stats/[...service].js index 31eba164..90a67bec 100644 --- a/src/pages/api/kubernetes/stats/[...service].js +++ b/src/pages/api/kubernetes/stats/[...service].js @@ -100,8 +100,8 @@ export default async function handler(req, res) { }); stats.cpuLimit = cpuLimit; stats.memLimit = memLimit; - stats.cpuUsage = cpuLimit ? stats.cpu / cpuLimit : 0; - stats.memUsage = memLimit ? stats.mem / memLimit : 0; + stats.cpuUsage = cpuLimit ? 100 * (stats.cpu / cpuLimit) : 0; + stats.memUsage = memLimit ? 100 * (stats.mem / memLimit) : 0; res.status(200).json({ stats, }); From 44b7de794bd8a4709246215b5bbade3e72994170 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 9 Dec 2023 22:00:27 -0800 Subject: [PATCH 02/20] New Crowdin translations by GitHub Action (#2423) Co-authored-by: Crowdin Bot --- public/locales/af/common.json | 23 +++- public/locales/ar/common.json | 23 +++- public/locales/bg/common.json | 203 ++++++++++++++++------------- public/locales/ca/common.json | 21 ++- public/locales/cs/common.json | 23 +++- public/locales/da/common.json | 23 +++- public/locales/de/common.json | 29 +++-- public/locales/el/common.json | 23 +++- public/locales/eo/common.json | 23 +++- public/locales/es/common.json | 23 +++- public/locales/eu/common.json | 23 +++- public/locales/fi/common.json | 23 +++- public/locales/fr/common.json | 25 +++- public/locales/he/common.json | 23 +++- public/locales/hi/common.json | 23 +++- public/locales/hr/common.json | 23 +++- public/locales/hu/common.json | 23 +++- public/locales/id/common.json | 23 +++- public/locales/it/common.json | 23 +++- public/locales/ja/common.json | 23 +++- public/locales/ko/common.json | 23 +++- public/locales/lv/common.json | 23 +++- public/locales/ms/common.json | 23 +++- public/locales/nl/common.json | 23 +++- public/locales/no/common.json | 23 +++- public/locales/pl/common.json | 69 ++++++---- public/locales/pt/common.json | 23 +++- public/locales/pt_BR/common.json | 23 +++- public/locales/ro/common.json | 23 +++- public/locales/ru/common.json | 23 +++- public/locales/sk/common.json | 21 ++- public/locales/sl/common.json | 21 ++- public/locales/sr/common.json | 23 +++- public/locales/sv/common.json | 23 +++- public/locales/te/common.json | 23 +++- public/locales/th/common.json | 23 +++- public/locales/tr/common.json | 21 ++- public/locales/uk/common.json | 65 +++++---- public/locales/vi/common.json | 23 +++- public/locales/yue/common.json | 87 ++++++++----- public/locales/zh-Hans/common.json | 23 +++- public/locales/zh-Hant/common.json | 63 +++++---- 42 files changed, 1059 insertions(+), 279 deletions(-) diff --git a/public/locales/af/common.json b/public/locales/af/common.json index 421d252a..a0674ec6 100644 --- a/public/locales/af/common.json +++ b/public/locales/af/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Gebruikers", - "uptime": "Stelsel Bedryfstyd", + "uptime": "Optyd", "days": "Daë", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Intekenings", "unread": "Ongelees" }, + "fritzbox": { + "connectionStatus": "Status", + "connectionStatusUnconfigured": "Ongekonfigureer", + "connectionStatusConnecting": "Verbind", + "connectionStatusAuthenticating": "Stel geldigheid vas", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Ontkoppel", + "connectionStatusDisconnected": "Ontkoppel", + "connectionStatusConnected": "Gekoppel", + "uptime": "Optyd", + "maxDown": "Maks. Af", + "maxUp": "Maks. Op", + "down": "Af", + "up": "Op", + "received": "Ontvang", + "sent": "Gestuur", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Stroomop", "requests": "Huidige versoeke", @@ -765,6 +783,7 @@ "inCinemas": "In fliekteaters", "physicalRelease": "Fisiese Vrylating", "digitalRelease": "Digitale Vrylating", - "noEventsToday": "Geen gebeure vir vandag nie!" + "noEventsToday": "Geen gebeure vir vandag nie!", + "noEventsFound": "Geen gebeure gevind nie" } } diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json index 06e029ca..2693eb86 100644 --- a/public/locales/ar/common.json +++ b/public/locales/ar/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "المستخدمون", - "uptime": "مدة تشغيل النظام", + "uptime": "مدة التشغيل", "days": "أيام", "wan": "الشبكة الواسعة", "lan": "الشبكة المحلية", @@ -122,6 +122,24 @@ "subscriptions": "الاشتراكات", "unread": "غير مقروءة" }, + "fritzbox": { + "connectionStatus": "الحالة", + "connectionStatusUnconfigured": "لم تتم تهيئته", + "connectionStatusConnecting": "جاري الاتصال", + "connectionStatusAuthenticating": "جار المصادقة", + "connectionStatusPendingDisconnect": "في انتظار قطع الاتصال", + "connectionStatusDisconnecting": "جار قطع الاتصال", + "connectionStatusDisconnected": "غير متصل", + "connectionStatusConnected": "متصل", + "uptime": "مدة التشغيل", + "maxDown": "أقصى حد للتنزيل", + "maxUp": "أقصى حد للتحميل", + "down": "لا يعمل", + "up": "يعمل", + "received": "تم الإستلام", + "sent": "تم الإرسال", + "externalIPAddress": "IP الخارجي" + }, "caddy": { "upstreams": "تدفق", "requests": "طلبات الحالية", @@ -765,6 +783,7 @@ "inCinemas": "في دور السينما", "physicalRelease": "الإصدار المادي", "digitalRelease": "الإصدار الرقمي", - "noEventsToday": "لا توجد أحداث اليوم!" + "noEventsToday": "لا توجد أحداث اليوم!", + "noEventsFound": "لم يتم العثور على أحداث" } } diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json index 68af6856..a9114002 100644 --- a/public/locales/bg/common.json +++ b/public/locales/bg/common.json @@ -33,22 +33,22 @@ }, "resources": { "cpu": "Процесор", - "mem": "MEM", + "mem": "Памет", "total": "Общо", "free": "Свободни", "used": "Заети", "load": "Натоварване", - "temp": "TEMP", - "max": "Max", - "uptime": "UP", - "months": "mo", - "days": "d", - "hours": "h", - "minutes": "m" + "temp": "Температура", + "max": "Макс.", + "uptime": "Онлайн", + "months": "мес", + "days": "д", + "hours": "ч", + "minutes": "мин" }, "unifi": { "users": "Потребители", - "uptime": "Активен от", + "uptime": "Uptime", "days": "Дни", "wan": "WAN", "lan": "LAN", @@ -58,7 +58,7 @@ "wlan_devices": "WLAN Устройства", "lan_users": "LAN Потребители", "wlan_users": "WLAN Потребители", - "up": "UP", + "up": "Онлайн", "down": "DOWN", "wait": "Моля изчакайте", "empty_data": "Subsystem status unknown" @@ -66,12 +66,12 @@ "docker": { "rx": "RX", "tx": "TX", - "mem": "MEM", + "mem": "Памет", "cpu": "Процесор", "running": "Running", "offline": "Изключен", "error": "Грешка", - "unknown": "Unknown", + "unknown": "Неизв.", "healthy": "Healthy", "starting": "Starting", "unhealthy": "Unhealthy", @@ -99,7 +99,7 @@ "transcoding": "Конвертира", "bitrate": "Bitrate", "no_active": "Няма активни потоци", - "movies": "Movies", + "movies": "Филми", "series": "Series", "episodes": "Episodes", "songs": "Songs" @@ -122,6 +122,24 @@ "subscriptions": "Subscriptions", "unread": "Unread" }, + "fritzbox": { + "connectionStatus": "Статус", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Свързано", + "uptime": "Uptime", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Current requests", @@ -133,8 +151,8 @@ }, "channelsdvrserver": { "shows": "Shows", - "recordings": "Recordings", - "scheduled": "Scheduled", + "recordings": "Записи", + "scheduled": "Планирано", "passes": "Passes" }, "tautulli": { @@ -142,12 +160,12 @@ "transcoding": "Конвертира", "bitrate": "Bitrate", "no_active": "Няма активни потоци", - "plex_connection_error": "Check Plex Connection" + "plex_connection_error": "Провери връзка с Plex" }, "omada": { "connectedAp": "Connected APs", - "activeUser": "Active devices", - "alerts": "Alerts", + "activeUser": "Активни устройства", + "alerts": "Предупреждения", "connectedGateway": "Connected gateways", "connectedSwitches": "Connected switches" }, @@ -158,8 +176,8 @@ }, "plex": { "streams": "Активни Потоци", - "albums": "Albums", - "movies": "Movies", + "albums": "Албуми", + "movies": "Филми", "tv": "Сериали" }, "sabnzbd": { @@ -190,7 +208,7 @@ "systemTempC": "System Temp", "poolUsage": "Pool Usage", "volumeUsage": "Volume Usage", - "invalid": "Invalid" + "invalid": "Невалидни" }, "deluge": { "download": "Download", @@ -205,28 +223,28 @@ "seed": "Seed" }, "sonarr": { - "wanted": "Wanted", - "queued": "Queued", + "wanted": "Търсени", + "queued": "В изчакване", "series": "Series", "queue": "Опашка", - "unknown": "Unknown" + "unknown": "Неизв." }, "radarr": { - "wanted": "Wanted", - "missing": "Missing", - "queued": "Queued", - "movies": "Movies", + "wanted": "Търсени", + "missing": "Липсващи", + "queued": "В изчакване", + "movies": "Филми", "queue": "Опашка", - "unknown": "Unknown" + "unknown": "Неизв." }, "lidarr": { - "wanted": "Wanted", - "queued": "Queued", - "artists": "Artists" + "wanted": "Търсени", + "queued": "В изчакване", + "artists": "Изпълнители" }, "readarr": { - "wanted": "Wanted", - "queued": "Queued", + "wanted": "Търсени", + "queued": "В изчакване", "books": "Книги" }, "bazarr": { @@ -251,8 +269,8 @@ }, "pialert": { "total": "Общо", - "connected": "Connected", - "new_devices": "New Devices", + "connected": "Свързано", + "new_devices": "Нови устройства", "down_alerts": "Down Alerts" }, "pihole": { @@ -280,16 +298,16 @@ "tailscale": { "address": "Address", "expires": "Expires", - "never": "Never", - "last_seen": "Last Seen", - "now": "Now", - "years": "{{number}}y", - "weeks": "{{number}}w", - "days": "{{number}}d", - "hours": "{{number}}h", - "minutes": "{{number}}m", - "seconds": "{{number}}s", - "ago": "{{value}} Ago" + "never": "Никога", + "last_seen": "Последно видян", + "now": "Сега", + "years": "{{number}}г", + "weeks": "{{number}}с", + "days": "{{number}}д", + "hours": "{{number}}ч", + "minutes": "{{number}}м", + "seconds": "{{number}}сек", + "ago": "преди {{value}}" }, "tdarr": { "queue": "Опашка", @@ -346,12 +364,12 @@ "domain_count": "Domains" }, "medusa": { - "wanted": "Wanted", - "queued": "Queued", + "wanted": "Търсени", + "queued": "В изчакване", "series": "Series" }, "minecraft": { - "players": "Players", + "players": "Играчи", "version": "Version", "status": "Статус", "up": "Online", @@ -367,7 +385,7 @@ "failedLoginsLast24H": "Failed Logins (24h)" }, "proxmox": { - "mem": "MEM", + "mem": "Памет", "cpu": "Процесор", "lxc": "LXC", "vms": "VMs" @@ -376,15 +394,15 @@ "cpu": "Процесор", "load": "Натоварване", "wait": "Моля изчакайте", - "temp": "TEMP", - "_temp": "Temp", - "warn": "Warn", - "uptime": "UP", + "temp": "Температура", + "_temp": "Температура", + "warn": "Предупреждение", + "uptime": "Онлайн", "total": "Общо", "free": "Свободни", "used": "Заети", - "days": "d", - "hours": "h", + "days": "д", + "hours": "ч", "crit": "Crit", "read": "Read", "write": "Write", @@ -395,7 +413,7 @@ "quicklaunch": { "bookmark": "Bookmark", "service": "Service", - "search": "Search", + "search": "Търсене", "custom": "Custom", "visit": "Visit", "url": "URL" @@ -470,9 +488,9 @@ "down": "Down" }, "healthchecks": { - "new": "New", + "new": "Нови", "up": "Online", - "grace": "In Grace Period", + "grace": "Гратисен период", "down": "Изключен", "paused": "Paused", "status": "Статус", @@ -487,19 +505,19 @@ "autobrr": { "approvedPushes": "Одобрен", "rejectedPushes": "Rejected", - "filters": "Filters", + "filters": "Филтри", "indexers": "Indexers" }, "tubearchivist": { "downloads": "Опашка", - "videos": "Videos", - "channels": "Channels", + "videos": "Видео", + "channels": "Канали", "playlists": "Playlists" }, "truenas": { "load": "System Load", "uptime": "Uptime", - "alerts": "Alerts", + "alerts": "Предупреждения", "time": "{{value, number(style: unit; unitDisplay: long;)}}" }, "pyload": { @@ -510,17 +528,17 @@ }, "gluetun": { "public_ip": "Public IP", - "region": "Region", - "country": "Country" + "region": "Регион", + "country": "Страна" }, "hdhomerun": { - "channels": "Channels", + "channels": "Канали", "hd": "HD" }, "scrutiny": { "passed": "Passed", "failed": "Failed", - "unknown": "Unknown" + "unknown": "Неизв." }, "paperlessngx": { "inbox": "Inbox", @@ -575,7 +593,7 @@ "wanStatus": "WAN Status", "up": "Up", "down": "Down", - "temp": "Temp", + "temp": "Температура", "disk": "Disk Usage", "wanIP": "WAN IP" }, @@ -588,7 +606,7 @@ "immich": { "users": "Потребители", "photos": "Photos", - "videos": "Videos", + "videos": "Видео", "storage": "Storage" }, "uptimekuma": { @@ -596,7 +614,7 @@ "down": "Sites Down", "uptime": "Uptime", "incident": "Incident", - "m": "m" + "m": "мин" }, "atsumeru": { "series": "Series", @@ -617,12 +635,12 @@ "mylar": { "series": "Series", "issues": "Issues", - "wanted": "Wanted" + "wanted": "Търсени" }, "photoprism": { - "albums": "Albums", + "albums": "Албуми", "photos": "Photos", - "videos": "Videos", + "videos": "Видео", "people": "People" }, "fileflows": { @@ -641,13 +659,13 @@ "cpuload": "Cpu Load", "memoryusage": "Memory Usage", "freespace": "Free Space", - "activeusers": "Active Users", - "numfiles": "Files", - "numshares": "Shared Items" + "activeusers": "Активни потребители", + "numfiles": "Файлове", + "numshares": "Споделени записи" }, "kopia": { "status": "Статус", - "size": "Size", + "size": "Размер", "lastrun": "Last Run", "nextrun": "Next Run", "failed": "Failed" @@ -674,8 +692,8 @@ "audiobookshelf": { "podcasts": "Podcasts", "books": "Книги", - "podcastsDuration": "Duration", - "booksDuration": "Duration" + "podcastsDuration": "Продължителност", + "booksDuration": "Продължителност" }, "homeassistant": { "people_home": "People Home", @@ -695,12 +713,12 @@ "jdownloader": { "downloadCount": "Опашка", "downloadBytesRemaining": "Остава", - "downloadTotalBytes": "Size", + "downloadTotalBytes": "Размер", "downloadSpeed": "Speed" }, "kavita": { "seriesCount": "Series", - "totalFiles": "Files" + "totalFiles": "Файлове" }, "azuredevops": { "result": "Result", @@ -720,24 +738,24 @@ "online": "Online", "offline": "Изключен", "name": "Name", - "map": "Map", - "currentPlayers": "Current players", - "players": "Players", - "maxPlayers": "Max players", - "bots": "Bots", + "map": "Карта", + "currentPlayers": "Текущи играчи", + "players": "Играчи", + "maxPlayers": "Максимален брой играчи", + "bots": "Ботове", "ping": "Ping" }, "urbackup": { - "ok": "Ok", - "errored": "Errors", + "ok": "ОК", + "errored": "Грешки", "noRecent": "Out of Date", "totalUsed": "Used Storage" }, "mealie": { - "recipes": "Recipes", + "recipes": "Рецепти", "users": "Потребители", "categories": "Categories", - "tags": "Tags" + "tags": "Тагове" }, "openmediavault": { "downloading": "Downloading", @@ -759,12 +777,13 @@ "up": "Up", "seemsdown": "Seems Down", "down": "Down", - "unknown": "Unknown" + "unknown": "Неизв." }, "calendar": { "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "Няма събития за днес!", + "noEventsFound": "Няма намерени събития" } } diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json index 0a94fa02..3a25fdd7 100644 --- a/public/locales/ca/common.json +++ b/public/locales/ca/common.json @@ -122,6 +122,24 @@ "subscriptions": "Subscriptions", "unread": "Unread" }, + "fritzbox": { + "connectionStatus": "Estat", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connected", + "uptime": "Temps actiu", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Current requests", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json index f1c9e9d4..3a9e9afd 100644 --- a/public/locales/cs/common.json +++ b/public/locales/cs/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Uživatelé", - "uptime": "Doba provozu", + "uptime": "Doba spuštění", "days": "dní", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Odběry", "unread": "Nepřečteno" }, + "fritzbox": { + "connectionStatus": "Stav", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connected", + "uptime": "Doba spuštění", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Odesílání dat", "requests": "Aktuální požadavky", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/da/common.json b/public/locales/da/common.json index 6bfb4bd2..ae59cf44 100644 --- a/public/locales/da/common.json +++ b/public/locales/da/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Brugere", - "uptime": "System Oppetid", + "uptime": "Oppetid", "days": "Dage", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Abonnementer", "unread": "Ulæst" }, + "fritzbox": { + "connectionStatus": "Status", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Forbundet", + "uptime": "Oppetid", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Ned", + "up": "Op", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Aktuelle anmodninger", @@ -765,6 +783,7 @@ "inCinemas": "I biografen", "physicalRelease": "Fysisk udgivelse", "digitalRelease": "Digitale udgivelser", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/de/common.json b/public/locales/de/common.json index fcd45f39..b068e4ef 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Benutzer", - "uptime": "System-Laufzeit", + "uptime": "Betriebszeit", "days": "Tage", "wan": "WAN", "lan": "LAN", @@ -126,19 +126,19 @@ "connectionStatus": "Status", "connectionStatusUnconfigured": "Unkonfiguriert", "connectionStatusConnecting": "Verbinde", - "connectionStatusAuthenticating": "Authenifiziere", - "connectionStatusPendingDisconnect": "Anstehende Trennung", + "connectionStatusAuthenticating": "Authentifiziere", + "connectionStatusPendingDisconnect": "Ausstehende Trennung", "connectionStatusDisconnecting": "Trenne", "connectionStatusDisconnected": "Getrennt", "connectionStatusConnected": "Verbunden", "uptime": "Betriebszeit", - "maxDown": "Max. Down", - "maxUp": "Max. Up", - "down": "Down", - "up": "Up", + "maxDown": "Max. Empfang", + "maxUp": "Max. Senden", + "down": "Empfangen", + "up": "Senden", "received": "Empfangen", "sent": "Gesendet", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "Externe IP" }, "caddy": { "upstreams": "Upstreams", @@ -170,7 +170,7 @@ "connectedSwitches": "Verbundene Switches" }, "nzbget": { - "rate": "Geschwindigkeit", + "rate": "Datenrate", "remaining": "Verbleibend", "downloaded": "Heruntergeladen" }, @@ -181,7 +181,7 @@ "tv": "TV-Serien" }, "sabnzbd": { - "rate": "Geschwindigkeit", + "rate": "Datenrate", "queue": "Warteschlange", "timeleft": "Verbleibende Zeit" }, @@ -356,7 +356,7 @@ "numActiveSessions": "Sitzungen", "numConnections": "Verbindungen", "dataRelayed": "Weitergeleitet", - "transferRate": "Geschwindigkeit" + "transferRate": "Datenrate" }, "mastodon": { "user_count": "Benutzer", @@ -521,7 +521,7 @@ "time": "{{value, number(style: unit; unitDisplay: long;)}}" }, "pyload": { - "speed": "Geschwindigkeit", + "speed": "Datenrate", "active": "Aktiv", "queue": "Warteschlange", "total": "Gesamt" @@ -714,7 +714,7 @@ "downloadCount": "Warteschlange", "downloadBytesRemaining": "Verbleibend", "downloadTotalBytes": "Größe", - "downloadSpeed": "Geschwindigkeit" + "downloadSpeed": "Datenrate" }, "kavita": { "seriesCount": "Serien", @@ -783,6 +783,7 @@ "inCinemas": "Im Kino", "physicalRelease": "Physische Version", "digitalRelease": "Digitale Version", - "noEventsToday": "Heute keine Ereignisse!" + "noEventsToday": "Heute keine Ereignisse!", + "noEventsFound": "Keine Termine gefunden" } } diff --git a/public/locales/el/common.json b/public/locales/el/common.json index 689ee0e0..be283627 100644 --- a/public/locales/el/common.json +++ b/public/locales/el/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Χρήστες", - "uptime": "Χρόνος λειτουργίας συστήματος", + "uptime": "Uptime", "days": "Ημέρες", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Συνδρομές", "unread": "Μη Διαβασμένο" }, + "fritzbox": { + "connectionStatus": "Κατάσταση", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connected", + "uptime": "Uptime", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Τρέχοντα αιτήματα", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/eo/common.json b/public/locales/eo/common.json index 198c82d5..142e5df1 100644 --- a/public/locales/eo/common.json +++ b/public/locales/eo/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Uzantoj", - "uptime": "Uptempo de la Sistemo", + "uptime": "Uptime", "days": "Tagoj", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Subscriptions", "unread": "Unread" }, + "fritzbox": { + "connectionStatus": "Stato", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connected", + "uptime": "Uptime", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Current requests", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/es/common.json b/public/locales/es/common.json index 92ab1ce3..a7d41ddc 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Usuarios", - "uptime": "Tiempo de actividad", + "uptime": "Tiempo de la actividad", "days": "Días", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Suscripciones", "unread": "Sin leer" }, + "fritzbox": { + "connectionStatus": "Estado", + "connectionStatusUnconfigured": "Sin configurar", + "connectionStatusConnecting": "Conectando", + "connectionStatusAuthenticating": "Autenticando", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Desconectando", + "connectionStatusDisconnected": "Desconectado", + "connectionStatusConnected": "Conectado", + "uptime": "Tiempo de la actividad", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Abajo", + "up": "Arriba", + "received": "Recibido", + "sent": "Enviado", + "externalIPAddress": "IP pública" + }, "caddy": { "upstreams": "Upstream (desarrollo de software)", "requests": "Peticiones actuales", @@ -765,6 +783,7 @@ "inCinemas": "En cine", "physicalRelease": "Lanzamiento en físico", "digitalRelease": "Lanzamiento en digital", - "noEventsToday": "Sin eventos para hoy" + "noEventsToday": "Sin eventos para hoy", + "noEventsFound": "No events found" } } diff --git a/public/locales/eu/common.json b/public/locales/eu/common.json index d5189c41..f4b583e9 100644 --- a/public/locales/eu/common.json +++ b/public/locales/eu/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Users", - "uptime": "System Uptime", + "uptime": "Uptime", "days": "Egun", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Subscriptions", "unread": "Unread" }, + "fritzbox": { + "connectionStatus": "Status", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connected", + "uptime": "Uptime", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Current requests", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json index be0f7629..b23fd6f5 100644 --- a/public/locales/fi/common.json +++ b/public/locales/fi/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Users", - "uptime": "System Uptime", + "uptime": "Uptime", "days": "Days", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Subscriptions", "unread": "Unread" }, + "fritzbox": { + "connectionStatus": "Tila", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connected", + "uptime": "Uptime", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Current requests", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index a86469d0..f47d4008 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Utilisateurs", - "uptime": "Disponibilité du système", + "uptime": "Démarré depuis", "days": "Jours", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Abonnements", "unread": "Non lu" }, + "fritzbox": { + "connectionStatus": "Statut", + "connectionStatusUnconfigured": "Non-configuré", + "connectionStatusConnecting": "Connexion en cours", + "connectionStatusAuthenticating": "Authentification en cours", + "connectionStatusPendingDisconnect": "Déconnexion en attente", + "connectionStatusDisconnecting": "Déconnexion en cours", + "connectionStatusDisconnected": "Déconnecté", + "connectionStatusConnected": "Connecté", + "uptime": "Démarré depuis", + "maxDown": "Max. Bas", + "maxUp": "Max. Haut", + "down": "Down", + "up": "Up", + "received": "Reçu", + "sent": "Envoyé", + "externalIPAddress": "IP externe" + }, "caddy": { "upstreams": "Upstreams", "requests": "Demandes en cours", @@ -690,7 +708,7 @@ "books": "Livres", "authors": "Auteurs", "categories": "Catégories", - "series": "Séries TV" + "series": "Séries" }, "jdownloader": { "downloadCount": "En attente", @@ -765,6 +783,7 @@ "inCinemas": "En salle", "physicalRelease": "Sortie physique", "digitalRelease": "Sortie numérique", - "noEventsToday": "Rien pour aujourd'hui !" + "noEventsToday": "Rien pour aujourd'hui !", + "noEventsFound": "Aucun événement trouvé" } } diff --git a/public/locales/he/common.json b/public/locales/he/common.json index c73bce48..4f5f38dc 100644 --- a/public/locales/he/common.json +++ b/public/locales/he/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Users", - "uptime": "System Uptime", + "uptime": "Uptime", "days": "Days", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Subscriptions", "unread": "Unread" }, + "fritzbox": { + "connectionStatus": "סטטוס", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connected", + "uptime": "Uptime", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Current requests", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json index 6d7c87e1..b5b62d33 100644 --- a/public/locales/hi/common.json +++ b/public/locales/hi/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Users", - "uptime": "System Uptime", + "uptime": "Uptime", "days": "Days", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Subscriptions", "unread": "Unread" }, + "fritzbox": { + "connectionStatus": "Status", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connected", + "uptime": "Uptime", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Current requests", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json index e876359d..cf2bf6e2 100644 --- a/public/locales/hr/common.json +++ b/public/locales/hr/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Korisnici", - "uptime": "Radno vrijeme sustava", + "uptime": "Radno vrijeme", "days": "Dani", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Pretplate", "unread": "Nepročitano" }, + "fritzbox": { + "connectionStatus": "Stanje", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Povezano", + "uptime": "Radno vrijeme", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Glavne grane", "requests": "Aktualni zahtjevi", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json index c0923d6a..f130370d 100644 --- a/public/locales/hu/common.json +++ b/public/locales/hu/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Felhasználók", - "uptime": "Rendszer üzemidő", + "uptime": "Üzemidő", "days": "Napok", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Előfizetések", "unread": "Olvasatlan" }, + "fritzbox": { + "connectionStatus": "Státusz", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Csatlakoztatott", + "uptime": "Üzemidő", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreamek", "requests": "Jelenlegi kérelmek", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/id/common.json b/public/locales/id/common.json index 6bb4669d..0481053a 100644 --- a/public/locales/id/common.json +++ b/public/locales/id/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Users", - "uptime": "System Uptime", + "uptime": "Uptime", "days": "Days", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Subscriptions", "unread": "Unread" }, + "fritzbox": { + "connectionStatus": "Status", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connected", + "uptime": "Uptime", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Current requests", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/it/common.json b/public/locales/it/common.json index de2ff158..9b5c9c32 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Utenti", - "uptime": "Uptime di Sistema", + "uptime": "Tempo di attività", "days": "Giorni", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Iscrizioni", "unread": "Non letto" }, + "fritzbox": { + "connectionStatus": "Stato", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connesso", + "uptime": "Tempo di attività", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstream", "requests": "Richieste correnti", @@ -765,6 +783,7 @@ "inCinemas": "Al cinema", "physicalRelease": "Release fisici", "digitalRelease": "Versione digitale", - "noEventsToday": "Nessun evento per oggi!" + "noEventsToday": "Nessun evento per oggi!", + "noEventsFound": "Nessun evento trovato" } } diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json index a651ef4b..719b5958 100644 --- a/public/locales/ja/common.json +++ b/public/locales/ja/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "ユーザ", - "uptime": "システム・アップタイム", + "uptime": "稼働時間", "days": "日", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "購読", "unread": "未読" }, + "fritzbox": { + "connectionStatus": "状態", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "接続済み", + "uptime": "稼働時間", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "下へ", + "up": "上へ", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "アップストリーム", "requests": "現在のリクエスト", @@ -765,6 +783,7 @@ "inCinemas": "映画館内", "physicalRelease": "物理的なリリース", "digitalRelease": "デジタル・リリース", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/ko/common.json b/public/locales/ko/common.json index 00ce209c..96029afc 100644 --- a/public/locales/ko/common.json +++ b/public/locales/ko/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "사용자", - "uptime": "시스템 업타임", + "uptime": "Uptime", "days": "일", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Subscriptions", "unread": "Unread" }, + "fritzbox": { + "connectionStatus": "상태", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connected", + "uptime": "Uptime", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Current requests", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/lv/common.json b/public/locales/lv/common.json index f8748eb1..e7e92b87 100644 --- a/public/locales/lv/common.json +++ b/public/locales/lv/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Lietotāji", - "uptime": "Sistēmas darbības laiks", + "uptime": "Uptime", "days": "Dienas", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Subscriptions", "unread": "Unread" }, + "fritzbox": { + "connectionStatus": "Statuss", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connected", + "uptime": "Uptime", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Current requests", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json index b670e077..488b7ec3 100644 --- a/public/locales/ms/common.json +++ b/public/locales/ms/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Pengguna", - "uptime": "Masa Operasi Sistem", + "uptime": "Masa Hidup", "days": "Hari", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Subscriptions", "unread": "Unread" }, + "fritzbox": { + "connectionStatus": "Status", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connected", + "uptime": "Masa Hidup", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Current requests", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index b948f378..4f54da1f 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Gebruikers", - "uptime": "Systeem Uptime", + "uptime": "Online", "days": "Dagen", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Abonnementen", "unread": "Ongelezen" }, + "fritzbox": { + "connectionStatus": "Status", + "connectionStatusUnconfigured": "Niet-geconfigureerd", + "connectionStatusConnecting": "Bezig met verbinden", + "connectionStatusAuthenticating": "Verificatie", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Verbinding verbreken...", + "connectionStatusDisconnected": "Verbinding verbroken", + "connectionStatusConnected": "Verbonden", + "uptime": "Online", + "maxDown": "Max. Omlaag", + "maxUp": "Max. omhoog", + "down": "Offline", + "up": "Online", + "received": "Ontvangen", + "sent": "Verzonden", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Huidige verzoeken", @@ -765,6 +783,7 @@ "inCinemas": "In bioscopen", "physicalRelease": "Fysieke versie", "digitalRelease": "Digitale versie", - "noEventsToday": "Geen gebeurtenissen voor vandaag!" + "noEventsToday": "Geen gebeurtenissen voor vandaag!", + "noEventsFound": "Geen gebeurtenissen gevonden" } } diff --git a/public/locales/no/common.json b/public/locales/no/common.json index 6d7c87e1..b5b62d33 100644 --- a/public/locales/no/common.json +++ b/public/locales/no/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Users", - "uptime": "System Uptime", + "uptime": "Uptime", "days": "Days", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Subscriptions", "unread": "Unread" }, + "fritzbox": { + "connectionStatus": "Status", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connected", + "uptime": "Uptime", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Current requests", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index fb07e215..1fd55806 100644 --- a/public/locales/pl/common.json +++ b/public/locales/pl/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Użytkownicy", - "uptime": "Czas pracy systemu", + "uptime": "Czas działania", "days": "Dni", "wan": "Sieć WAN", "lan": "Sieć LAN", @@ -122,6 +122,24 @@ "subscriptions": "Subskrypcje", "unread": "Nieprzeczytane" }, + "fritzbox": { + "connectionStatus": "Stan", + "connectionStatusUnconfigured": "Nieskonfigurowane", + "connectionStatusConnecting": "Łączenie", + "connectionStatusAuthenticating": "Uwierzytelnianie", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Rozłączanie", + "connectionStatusDisconnected": "Rozłączono", + "connectionStatusConnected": "Połączony", + "uptime": "Czas działania", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Niedostępny", + "up": "Dostępny", + "received": "Odebrane", + "sent": "Wysłane", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Aktualne zapytania", @@ -476,7 +494,7 @@ "down": "Nieosiągalny", "paused": "Zatrzymane", "status": "Stan", - "last_ping": "Last Ping", + "last_ping": "Ostatni ping", "never": "No pings yet" }, "watchtower": { @@ -571,12 +589,12 @@ }, "pfsense": { "load": "Load Avg", - "memory": "Mem Usage", - "wanStatus": "WAN Status", + "memory": "Użycie pamięci", + "wanStatus": "Status WAN", "up": "Dostępny", "down": "Niedostępny", "temp": "Temperatura", - "disk": "Disk Usage", + "disk": "Użycie dysku", "wanIP": "WAN IP" }, "proxmoxbackupserver": { @@ -600,9 +618,9 @@ }, "atsumeru": { "series": "Seriale", - "archives": "Archives", - "chapters": "Chapters", - "categories": "Categories" + "archives": "Archiwa", + "chapters": "Rozdziały", + "categories": "Kategorie" }, "komga": { "libraries": "Biblioteki", @@ -632,7 +650,7 @@ "time": "Czas" }, "grafana": { - "dashboards": "Dashboards", + "dashboards": "Panel główny", "datasources": "Źródła danych", "totalalerts": "Total Alerts", "alertstriggered": "Alerts Triggered" @@ -649,7 +667,7 @@ "status": "Stan", "size": "Rozmiar", "lastrun": "Ostatnie uruchomienie", - "nextrun": "Next Run", + "nextrun": "Następne uruchomienie", "failed": "Niepowodzenie" }, "unmanic": { @@ -659,7 +677,7 @@ }, "pterodactyl": { "servers": "Serwery", - "nodes": "Nodes" + "nodes": "Węzły" }, "prometheus": { "targets_up": "Targets Up", @@ -669,7 +687,7 @@ "ghostfolio": { "gross_percent_today": "Dzisiaj", "gross_percent_1y": "Rok", - "gross_percent_max": "All time" + "gross_percent_max": "Od początku" }, "audiobookshelf": { "podcasts": "Podcasty", @@ -688,8 +706,8 @@ }, "calibreweb": { "books": "Książki", - "authors": "Authors", - "categories": "Categories", + "authors": "Autorzy", + "categories": "Kategorie", "series": "Seriale" }, "jdownloader": { @@ -703,14 +721,14 @@ "totalFiles": "Pliki" }, "azuredevops": { - "result": "Result", + "result": "Wynik", "status": "Stan", - "buildId": "Build ID", - "succeeded": "Succeeded", + "buildId": "ID kompilacji", + "succeeded": "Ukończono", "notStarted": "Not Started", "failed": "Niepowodzenie", - "canceled": "Canceled", - "inProgress": "In Progress", + "canceled": "Anulowano", + "inProgress": "W trakcie", "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Zaakceptowane" @@ -723,24 +741,24 @@ "map": "Mapa", "currentPlayers": "Current players", "players": "Gracze", - "maxPlayers": "Max players", + "maxPlayers": "Maksymalna ilość graczy", "bots": "Boty", "ping": "Ping" }, "urbackup": { "ok": "Ok", - "errored": "Errors", - "noRecent": "Out of Date", + "errored": "Błędy", + "noRecent": "Nieaktualne", "totalUsed": "Used Storage" }, "mealie": { "recipes": "Recipes", "users": "Użytkownicy", - "categories": "Categories", + "categories": "Kategorie", "tags": "Tagi" }, "openmediavault": { - "downloading": "Downloading", + "downloading": "Pobieranie", "total": "Całkowite", "running": "Działa", "stopped": "Zatrzymane", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index 93ad1c75..0a22f2e0 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Utilizadores", - "uptime": "Sistema Ativo", + "uptime": "Ligado", "days": "Dias", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Assinaturas", "unread": "Não lida" }, + "fritzbox": { + "connectionStatus": "Estado", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Conectado", + "uptime": "Ligado", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Solicitações atuais", @@ -765,6 +783,7 @@ "inCinemas": "Em cinemas", "physicalRelease": "Lançamento físico", "digitalRelease": "Lançamento digital", - "noEventsToday": "Não existem eventos hoje!" + "noEventsToday": "Não existem eventos hoje!", + "noEventsFound": "No events found" } } diff --git a/public/locales/pt_BR/common.json b/public/locales/pt_BR/common.json index 9ac42d57..d4d0ce55 100644 --- a/public/locales/pt_BR/common.json +++ b/public/locales/pt_BR/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Utilizadores", - "uptime": "Sistema Ativo", + "uptime": "Ligado", "days": "Dias", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Assinaturas", "unread": "Não lida" }, + "fritzbox": { + "connectionStatus": "Estado", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connected", + "uptime": "Ligado", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Solicitações atuais", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json index 0f859545..99e9f924 100644 --- a/public/locales/ro/common.json +++ b/public/locales/ro/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Utilizatori", - "uptime": "Timp de funcționare a sistemului", + "uptime": "Uptime", "days": "Zile", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Abonări", "unread": "Necitit" }, + "fritzbox": { + "connectionStatus": "Stare", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connected", + "uptime": "Uptime", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Jos", + "up": "Sus", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreamuri", "requests": "Solicitări curente", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index d8c417b7..7135e85e 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Пользователи", - "uptime": "Время работы системы", + "uptime": "Время работы", "days": "Дней", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Подписки", "unread": "Не прочитано" }, + "fritzbox": { + "connectionStatus": "Статус", + "connectionStatusUnconfigured": "Не настроено", + "connectionStatusConnecting": "Подключение", + "connectionStatusAuthenticating": "Авторизация", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Отключение", + "connectionStatusDisconnected": "Отключено", + "connectionStatusConnected": "Подключено", + "uptime": "Время работы", + "maxDown": "Макс. Загрузка", + "maxUp": "Макс. Отдача", + "down": "Офлайн", + "up": "Онлайн", + "received": "Получено", + "sent": "Отправлено", + "externalIPAddress": "Внеш. IP" + }, "caddy": { "upstreams": "Входящие каналы", "requests": "Текущие запросы", @@ -765,6 +783,7 @@ "inCinemas": "В кинотеатрах", "physicalRelease": "Физический релиз", "digitalRelease": "Цифровой релиз", - "noEventsToday": "Нет событий на сегодня!" + "noEventsToday": "Нет событий на сегодня!", + "noEventsFound": "Событий не найдено" } } diff --git a/public/locales/sk/common.json b/public/locales/sk/common.json index 172e81d2..2364693e 100644 --- a/public/locales/sk/common.json +++ b/public/locales/sk/common.json @@ -122,6 +122,24 @@ "subscriptions": "Odbery", "unread": "Neprečítané" }, + "fritzbox": { + "connectionStatus": "Stav", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Pripojené", + "uptime": "Doba prevádzky", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Sťahovanie", + "up": "Nahrávanie", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Odosielanie dát", "requests": "Aktuálne požiadavky", @@ -765,6 +783,7 @@ "inCinemas": "V kinách", "physicalRelease": "Fyzické vydanie", "digitalRelease": "Digitálne vydanie", - "noEventsToday": "Žiadne udalosti na dnešný deň!" + "noEventsToday": "Žiadne udalosti na dnešný deň!", + "noEventsFound": "No events found" } } diff --git a/public/locales/sl/common.json b/public/locales/sl/common.json index 05d6e47f..91ebb845 100644 --- a/public/locales/sl/common.json +++ b/public/locales/sl/common.json @@ -122,6 +122,24 @@ "subscriptions": "Naročnine", "unread": "Neprebrano" }, + "fritzbox": { + "connectionStatus": "Stanje", + "connectionStatusUnconfigured": "Nenastavljeno", + "connectionStatusConnecting": "Se povezuje", + "connectionStatusAuthenticating": "Avtentikacija", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Prekinitev", + "connectionStatusDisconnected": "Prekinjeno", + "connectionStatusConnected": "Povezanih", + "uptime": "Čas delovanja", + "maxDown": "Maks. dol", + "maxUp": "Maks. gor", + "down": "Nepovezan", + "up": "Povezan", + "received": "Prejeto", + "sent": "Poslano", + "externalIPAddress": "Zun. IP" + }, "caddy": { "upstreams": "Pretok gor", "requests": "Trenutnih zahtev", @@ -765,6 +783,7 @@ "inCinemas": "V kinu", "physicalRelease": "Fizična izdaja", "digitalRelease": "Digitalna izdaja", - "noEventsToday": "Za danes ni dogodkov!" + "noEventsToday": "Za danes ni dogodkov!", + "noEventsFound": "Ni dogodkov" } } diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json index 6d7c87e1..b5b62d33 100644 --- a/public/locales/sr/common.json +++ b/public/locales/sr/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Users", - "uptime": "System Uptime", + "uptime": "Uptime", "days": "Days", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Subscriptions", "unread": "Unread" }, + "fritzbox": { + "connectionStatus": "Status", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connected", + "uptime": "Uptime", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Current requests", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index 4d9d3c95..89f89bf4 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Användare", - "uptime": "Upptid", + "uptime": "Uptime", "days": "Dagar", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Subscriptions", "unread": "Unread" }, + "fritzbox": { + "connectionStatus": "Status", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connected", + "uptime": "Uptime", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Current requests", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/te/common.json b/public/locales/te/common.json index 5b3f7c97..1d5c5862 100644 --- a/public/locales/te/common.json +++ b/public/locales/te/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "వినియోగదారులు", - "uptime": "సిస్టమ్ సమయము", + "uptime": "Uptime", "days": "రోజులు", "wan": "WAN", "lan": "లాన్", @@ -122,6 +122,24 @@ "subscriptions": "Subscriptions", "unread": "Unread" }, + "fritzbox": { + "connectionStatus": "హోదా", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connected", + "uptime": "Uptime", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Current requests", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/th/common.json b/public/locales/th/common.json index 6e2f41c5..6a124864 100644 --- a/public/locales/th/common.json +++ b/public/locales/th/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "ผู้ใช้", - "uptime": "เวลาทำงานของระบบ", + "uptime": "Uptime", "days": "วัน", "wan": "WAN", "lan": "แลน", @@ -122,6 +122,24 @@ "subscriptions": "Subscriptions", "unread": "Unread" }, + "fritzbox": { + "connectionStatus": "สถานะ", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connected", + "uptime": "Uptime", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Current requests", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json index d82e63e2..ee933bd1 100644 --- a/public/locales/tr/common.json +++ b/public/locales/tr/common.json @@ -122,6 +122,24 @@ "subscriptions": "Abonelikler", "unread": "Okunmamış" }, + "fritzbox": { + "connectionStatus": "Durum", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Bağlandı", + "uptime": "Çalışma Süresi", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Akış", "requests": "Anlık İstekler", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/uk/common.json b/public/locales/uk/common.json index 39bbef59..f4f6f807 100644 --- a/public/locales/uk/common.json +++ b/public/locales/uk/common.json @@ -18,7 +18,7 @@ "api_error": "Помилка API", "information": "Інформація", "status": "Стан", - "url": "URL", + "url": "URL-адреса", "raw_error": "Помилка Raw", "response_data": "Дані відповіді" }, @@ -32,14 +32,14 @@ "placeholder": "Пошук…" }, "resources": { - "cpu": "CPU", - "mem": "Пам'ять", - "total": "Всього", + "cpu": "ЦП", + "mem": "ОЗП", + "total": "Усього", "free": "Вільно", "used": "Використано", "load": "Завантаження", - "temp": "TEMP", - "max": "Max", + "temp": "Температура", + "max": "Макс.", "uptime": "Відправка", "months": "міс", "days": "д", @@ -48,7 +48,7 @@ }, "unifi": { "users": "Користувачі", - "uptime": "Час роботи системи", + "uptime": "Час роботи", "days": "Днів", "wan": "WAN", "lan": "LAN", @@ -66,8 +66,8 @@ "docker": { "rx": "RX", "tx": "TX", - "mem": "Пам'ять", - "cpu": "CPU", + "mem": "ОЗП", + "cpu": "ЦП", "running": "Запущено", "offline": "Офлайн", "error": "Помилка", @@ -122,6 +122,24 @@ "subscriptions": "Передплата", "unread": "Не прочитано" }, + "fritzbox": { + "connectionStatus": "Стан", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Підключено", + "uptime": "Час роботи", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Потоки", "requests": "Поточні запити", @@ -250,7 +268,7 @@ "available": "Доступно" }, "pialert": { - "total": "Всього", + "total": "Усього", "connected": "Підключено", "new_devices": "Нові пристрої", "down_alerts": "Сповіщення про збій" @@ -275,7 +293,7 @@ "portainer": { "running": "Запущено", "stopped": "Зупинено", - "total": "Всього" + "total": "Усього" }, "tailscale": { "address": "Адреса", @@ -309,7 +327,7 @@ "npm": { "enabled": "Увімкнено", "disabled": "Вимкнено", - "total": "Всього" + "total": "Усього" }, "coinmarketcap": { "configure": "Налаштуйте одну або кілька криптовалют для відстеження", @@ -367,20 +385,20 @@ "failedLoginsLast24H": "Невдалі входи (24 години)" }, "proxmox": { - "mem": "Пам'ять", - "cpu": "CPU", + "mem": "ОЗП", + "cpu": "ЦП", "lxc": "Контейнери Linux", "vms": "Віртуальні машини" }, "glances": { - "cpu": "CPU", + "cpu": "ЦП", "load": "Завантаження", "wait": "Будь ласка, зачекайте", - "temp": "TEMP", + "temp": "Температура", "_temp": "Temp", "warn": "Увага", "uptime": "Відправка", - "total": "Всього", + "total": "Усього", "free": "Вільно", "used": "Використано", "days": "д", @@ -398,7 +416,7 @@ "search": "Пошук", "custom": "Користувацький", "visit": "Відвідайте", - "url": "URL" + "url": "URL-адреса" }, "wmo": { "0-day": "Сонячно", @@ -506,7 +524,7 @@ "speed": "Швидкість", "active": "Активний", "queue": "Черга", - "total": "Всього" + "total": "Усього" }, "gluetun": { "public_ip": "Публічний IP", @@ -524,7 +542,7 @@ }, "paperlessngx": { "inbox": "Вхідні", - "total": "Всього" + "total": "Усього" }, "nextdns": { "wait": "Будь ласка, зачекайте", @@ -582,7 +600,7 @@ "proxmoxbackupserver": { "datastore_usage": "Сховище даних", "failed_tasks_24h": "Невиконані завдання 24 години", - "cpu_usage": "CPU", + "cpu_usage": "ЦП", "memory_usage": "Пам'ять" }, "immich": { @@ -741,7 +759,7 @@ }, "openmediavault": { "downloading": "Downloading", - "total": "Всього", + "total": "Усього", "running": "Запущено", "stopped": "Зупинено", "passed": "Пройшов", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index f7cf8d47..d2c2e3d4 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "Users", - "uptime": "System Uptime", + "uptime": "Uptime", "days": "Days", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "Subscriptions", "unread": "Unread" }, + "fritzbox": { + "connectionStatus": "Trạng thái", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "Connected", + "uptime": "Uptime", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "Upstreams", "requests": "Current requests", @@ -765,6 +783,7 @@ "inCinemas": "In cinemas", "physicalRelease": "Physical release", "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" } } diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json index 35af06b6..3c57cc74 100644 --- a/public/locales/yue/common.json +++ b/public/locales/yue/common.json @@ -48,11 +48,11 @@ }, "unifi": { "users": "使用者", - "uptime": "系統運作時間", + "uptime": "運行時間", "days": "天", "wan": "WAN", - "lan": "LAN", - "wlan": "WLAN", + "lan": "區域網路", + "wlan": "無線區域網路", "devices": "設備", "lan_devices": "有線設備", "wlan_devices": "無線設備", @@ -81,18 +81,18 @@ }, "ping": { "error": "錯誤", - "ping": "Ping", - "down": "Down", - "up": "Up", - "not_available": "Not Available" + "ping": "延遲", + "down": "離線", + "up": "在線", + "not_available": "不可用" }, "siteMonitor": { - "http_status": "HTTP status", + "http_status": "HTTP 狀態", "error": "錯誤", - "response": "Response", - "down": "Down", - "up": "Up", - "not_available": "Not Available" + "response": "回應", + "down": "離線", + "up": "在線", + "not_available": "不可用" }, "emby": { "playing": "播放緊", @@ -122,6 +122,24 @@ "subscriptions": "訂閱", "unread": "未讀" }, + "fritzbox": { + "connectionStatus": "狀況", + "connectionStatusUnconfigured": "未設置", + "connectionStatusConnecting": "連線中", + "connectionStatusAuthenticating": "驗證中", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "正在中斷連線", + "connectionStatusDisconnected": "連接已中斷", + "connectionStatusConnected": "已連線", + "uptime": "運行時間", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "離線", + "up": "在線", + "received": "已接收", + "sent": "已送出", + "externalIPAddress": "外部 IP" + }, "caddy": { "upstreams": "上行", "requests": "目前請求數", @@ -270,7 +288,7 @@ "speedtest": { "upload": "上傳速率", "download": "下載速率", - "ping": "Ping" + "ping": "延遲" }, "portainer": { "running": "執行中", @@ -369,8 +387,8 @@ "proxmox": { "mem": "記憶體", "cpu": "CPU", - "lxc": "LXC", - "vms": "VMs" + "lxc": "Linux 容器", + "vms": "虛擬機" }, "glances": { "cpu": "CPU", @@ -390,7 +408,7 @@ "write": "寫入", "gpu": "GPU", "mem": "記憶體", - "swap": "Swap" + "swap": "交換空間" }, "quicklaunch": { "bookmark": "書籤", @@ -463,11 +481,11 @@ "updates": "更新", "update_available": "有可用的更新", "up_to_date": "已更新至最新", - "child_bridges": "Child Bridges", + "child_bridges": "子網橋", "child_bridges_status": "{{ok}}/{{total}}", - "up": "Up", + "up": "在線", "pending": "待定", - "down": "Down" + "down": "離線" }, "healthchecks": { "new": "新建立", @@ -542,10 +560,10 @@ "streams_xepg": "XEPG頻道" }, "opendtu": { - "yieldDay": "Today", - "absolutePower": "Power", - "relativePower": "Power %", - "limit": "Limit" + "yieldDay": "今日", + "absolutePower": "功率", + "relativePower": "功率百分比", + "limit": "上限" }, "opnsense": { "cpu": "CPU負載", @@ -573,8 +591,8 @@ "load": "平均負載量", "memory": "記憶體使用率", "wanStatus": "網際網路狀態", - "up": "Up", - "down": "Down", + "up": "在線", + "down": "離線", "temp": "溫度", "disk": "硬碟使用率", "wanIP": "網際網路 IP" @@ -667,7 +685,7 @@ "targets_total": "目標總數" }, "ghostfolio": { - "gross_percent_today": "Today", + "gross_percent_today": "今日", "gross_percent_1y": "一年", "gross_percent_max": "所有時間" }, @@ -725,10 +743,10 @@ "players": "玩家", "maxPlayers": "玩家數上限", "bots": "機器人", - "ping": "Ping" + "ping": "延遲" }, "urbackup": { - "ok": "Ok", + "ok": "確定", "errored": "錯誤", "noRecent": "已過時", "totalUsed": "已使用空間" @@ -756,15 +774,16 @@ "sitesDown": "離線網站", "paused": "擱置中", "notyetchecked": "尚未檢查", - "up": "Up", + "up": "在線", "seemsdown": "似乎離線", - "down": "Down", + "down": "離線", "unknown": "未知" }, "calendar": { - "inCinemas": "In cinemas", - "physicalRelease": "Physical release", - "digitalRelease": "Digital release", - "noEventsToday": "No events for today!" + "inCinemas": "上映中", + "physicalRelease": "實體發行", + "digitalRelease": "數位發行", + "noEventsToday": "今日無事件", + "noEventsFound": "未找到事件" } } diff --git a/public/locales/zh-Hans/common.json b/public/locales/zh-Hans/common.json index 64173da6..fcf5c5e2 100644 --- a/public/locales/zh-Hans/common.json +++ b/public/locales/zh-Hans/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "用户数", - "uptime": "系统运行时间", + "uptime": "运行时间", "days": "天", "wan": "WAN", "lan": "LAN", @@ -122,6 +122,24 @@ "subscriptions": "订阅", "unread": "未读" }, + "fritzbox": { + "connectionStatus": "状态", + "connectionStatusUnconfigured": "Unconfigured", + "connectionStatusConnecting": "Connecting", + "connectionStatusAuthenticating": "Authenticating", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "Disconnecting", + "connectionStatusDisconnected": "Disconnected", + "connectionStatusConnected": "已连接", + "uptime": "运行时间", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "离线", + "up": "在线", + "received": "Received", + "sent": "Sent", + "externalIPAddress": "Ext. IP" + }, "caddy": { "upstreams": "上行", "requests": "当前请求", @@ -765,6 +783,7 @@ "inCinemas": "上映中", "physicalRelease": "实体发行", "digitalRelease": "数字发行", - "noEventsToday": "今天没有活动!" + "noEventsToday": "今天没有活动!", + "noEventsFound": "未找到事件" } } diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json index b3d9b046..3efb120c 100644 --- a/public/locales/zh-Hant/common.json +++ b/public/locales/zh-Hant/common.json @@ -48,7 +48,7 @@ }, "unifi": { "users": "使用者", - "uptime": "系統運作時間", + "uptime": "運行時間", "days": "天", "wan": "WAN", "lan": "區域網路", @@ -82,16 +82,16 @@ "ping": { "error": "錯誤", "ping": "延遲", - "down": "Down", - "up": "Up", + "down": "離線", + "up": "在線", "not_available": "不可用" }, "siteMonitor": { "http_status": "HTTP 狀態", "error": "錯誤", "response": "回應", - "down": "Down", - "up": "Up", + "down": "離線", + "up": "在線", "not_available": "不可用" }, "emby": { @@ -122,6 +122,24 @@ "subscriptions": "訂閱", "unread": "未讀" }, + "fritzbox": { + "connectionStatus": "狀態", + "connectionStatusUnconfigured": "未設置", + "connectionStatusConnecting": "連線中", + "connectionStatusAuthenticating": "驗證中", + "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusDisconnecting": "正在中斷連線", + "connectionStatusDisconnected": "連接已中斷", + "connectionStatusConnected": "已連線", + "uptime": "運行時間", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "離線", + "up": "在線", + "received": "已接收", + "sent": "已送出", + "externalIPAddress": "外部 IP" + }, "caddy": { "upstreams": "上行", "requests": "目前請求數", @@ -369,8 +387,8 @@ "proxmox": { "mem": "記憶體", "cpu": "CPU", - "lxc": "LXC", - "vms": "VMs" + "lxc": "Linux 容器", + "vms": "虛擬機" }, "glances": { "cpu": "CPU", @@ -390,7 +408,7 @@ "write": "寫入", "gpu": "GPU", "mem": "記憶體", - "swap": "Swap" + "swap": "交換空間" }, "quicklaunch": { "bookmark": "書籤", @@ -463,11 +481,11 @@ "updates": "更新", "update_available": "有可用的更新", "up_to_date": "已更新至最新", - "child_bridges": "Child Bridges", + "child_bridges": "子網橋", "child_bridges_status": "{{ok}}/{{total}}", - "up": "Up", + "up": "在線", "pending": "待下載", - "down": "Down" + "down": "離線" }, "healthchecks": { "new": "新建立", @@ -543,9 +561,9 @@ }, "opendtu": { "yieldDay": "今日", - "absolutePower": "Power", - "relativePower": "Power %", - "limit": "Limit" + "absolutePower": "功率", + "relativePower": "功率百分比", + "limit": "上限" }, "opnsense": { "cpu": "CPU負載", @@ -573,8 +591,8 @@ "load": "平均負載量", "memory": "記憶體使用率", "wanStatus": "網際網路狀態", - "up": "Up", - "down": "Down", + "up": "在線", + "down": "離線", "temp": "溫度", "disk": "硬碟使用率", "wanIP": "網際網路 IP" @@ -756,15 +774,16 @@ "sitesDown": "離線網站", "paused": "擱置中", "notyetchecked": "尚未檢查", - "up": "Up", + "up": "在線", "seemsdown": "似乎離線", - "down": "Down", + "down": "離線", "unknown": "未知" }, "calendar": { - "inCinemas": "In cinemas", - "physicalRelease": "Physical release", - "digitalRelease": "Digital release", - "noEventsToday": "今日無事件" + "inCinemas": "上映中", + "physicalRelease": "實體發行", + "digitalRelease": "數位發行", + "noEventsToday": "今日無事件", + "noEventsFound": "未找到事件" } } From 0a3d552114c34dda14a2cda33467cfe6cb353c6b Mon Sep 17 00:00:00 2001 From: Thorben Date: Sun, 10 Dec 2023 16:06:52 +0100 Subject: [PATCH 03/20] Fix typo in fritzbox documentation (#2457) --- docs/widgets/services/fritzbox.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/widgets/services/fritzbox.md b/docs/widgets/services/fritzbox.md index 4bdadb41..8cf7deea 100644 --- a/docs/widgets/services/fritzbox.md +++ b/docs/widgets/services/fritzbox.md @@ -13,7 +13,7 @@ Home Network > Network > Network Settings > Access Settings in the Home Network Credentials are not needed and, as such, you may want to consider using `http` instead of `https` as those requests are significantly faster. -Allowed fields (limited to a max of 4): `["connectionStatus", "upTime", "maxDown", "maxUp", "down", "up", "received", "sent", "externalIPAddress"]`. +Allowed fields (limited to a max of 4): `["connectionStatus", "uptime", "maxDown", "maxUp", "down", "up", "received", "sent", "externalIPAddress"]`. ```yaml widget: From a72ccb6d27df1ba2d7b4f2d7a06fa2b0fea42537 Mon Sep 17 00:00:00 2001 From: Denis Papec Date: Sun, 10 Dec 2023 15:19:43 +0000 Subject: [PATCH 04/20] Fix: show recurring and multi-day events (#2451) --- package-lock.json | 7 ++-- package.json | 1 + pnpm-lock.yaml | 9 +++-- src/widgets/calendar/integrations/ical.jsx | 46 +++++++++++++++------- 4 files changed, 42 insertions(+), 21 deletions(-) diff --git a/package-lock.json b/package-lock.json index 45c77579..abac02b0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,6 +32,7 @@ "react-i18next": "^11.18.6", "react-icons": "^4.4.0", "recharts": "^2.7.2", + "rrule": "^2.8.1", "swr": "^1.3.0", "systeminformation": "^5.17.12", "tough-cookie": "^4.1.2", @@ -5501,9 +5502,9 @@ } }, "node_modules/rrule": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/rrule/-/rrule-2.7.2.tgz", - "integrity": "sha512-NkBsEEB6FIZOZ3T8frvEBOB243dm46SPufpDckY/Ap/YH24V1zLeMmDY8OA10lk452NdrF621+ynDThE7FQU2A==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/rrule/-/rrule-2.8.1.tgz", + "integrity": "sha512-hM3dHSBMeaJ0Ktp7W38BJZ7O1zOgaFEsn41PDk+yHoEtfLV+PoJt9E9xAlZiWgf/iqEqionN0ebHFZIDAp+iGw==", "dependencies": { "tslib": "^2.4.0" } diff --git a/package.json b/package.json index 0688bf7d..9bea0461 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "react-i18next": "^11.18.6", "react-icons": "^4.4.0", "recharts": "^2.7.2", + "rrule": "^2.8.1", "swr": "^1.3.0", "systeminformation": "^5.17.12", "tough-cookie": "^4.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2d272b31..ba74b36d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -77,6 +77,9 @@ dependencies: recharts: specifier: ^2.7.2 version: 2.7.2(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0) + rrule: + specifier: ^2.8.1 + version: 2.8.1 swr: specifier: ^1.3.0 version: 1.3.0(react@18.2.0) @@ -871,7 +874,7 @@ packages: resolution: {integrity: sha512-wlQwcF0fl4eLclyGdncF9rcNNq0ipRYZGagG6h3LVgRXvCWE1fdMUaCLXwfC9YWoz9jKKbjQAq7TpO2Y3yrvmA==} dependencies: ical-date-parser: 4.0.0 - rrule: 2.7.2 + rrule: 2.8.1 dev: false /call-bind@1.0.2: @@ -3552,8 +3555,8 @@ packages: dependencies: glob: 7.2.3 - /rrule@2.7.2: - resolution: {integrity: sha512-NkBsEEB6FIZOZ3T8frvEBOB243dm46SPufpDckY/Ap/YH24V1zLeMmDY8OA10lk452NdrF621+ynDThE7FQU2A==} + /rrule@2.8.1: + resolution: {integrity: sha512-hM3dHSBMeaJ0Ktp7W38BJZ7O1zOgaFEsn41PDk+yHoEtfLV+PoJt9E9xAlZiWgf/iqEqionN0ebHFZIDAp+iGw==} dependencies: tslib: 2.5.0 dev: false diff --git a/src/widgets/calendar/integrations/ical.jsx b/src/widgets/calendar/integrations/ical.jsx index b3f1f781..f5063331 100644 --- a/src/widgets/calendar/integrations/ical.jsx +++ b/src/widgets/calendar/integrations/ical.jsx @@ -2,6 +2,7 @@ import { DateTime } from "luxon"; import { parseString } from "cal-parser"; import { useEffect } from "react"; import { useTranslation } from "next-i18next"; +import { RRule } from "rrule"; import useWidgetAPI from "../../../utils/proxy/use-widget-api"; import Error from "../../../components/services/widget/error"; @@ -22,15 +23,15 @@ export default function Integration({ config, params, setEvents, hideErrors }) { } } - if (icalError || !parsedIcal) { + const startDate = DateTime.fromISO(params.start); + const endDate = DateTime.fromISO(params.end); + + if (icalError || !parsedIcal || !startDate.isValid || !endDate.isValid) { return; } const eventsToAdd = {}; - const events = parsedIcal?.getEventsBetweenDates( - DateTime.fromISO(params.start).toJSDate(), - DateTime.fromISO(params.end).toJSDate(), - ); + const events = parsedIcal?.getEventsBetweenDates(startDate.toJSDate(), endDate.toJSDate()); events?.forEach((event) => { let title = `${event?.summary?.value}`; @@ -38,16 +39,31 @@ export default function Integration({ config, params, setEvents, hideErrors }) { title = `${config.name}: ${title}`; } - event.matchingDates.forEach((date) => { - eventsToAdd[event?.uid?.value] = { - title, - date: DateTime.fromJSDate(date), - color: config?.color ?? "zinc", - isCompleted: DateTime.fromJSDate(date) < DateTime.now(), - additional: event.location?.value, - type: "ical", - }; - }); + const eventToAdd = (date, i, type) => { + const duration = event.dtend.value - event.dtstart.value; + const days = duration / (1000 * 60 * 60 * 24); + + for (let j = 0; j < days; j += 1) { + eventsToAdd[`${event?.uid?.value}${i}${j}${type}`] = { + title, + date: DateTime.fromJSDate(date).plus({ days: j }), + color: config?.color ?? "zinc", + isCompleted: DateTime.fromJSDate(date) < DateTime.now(), + additional: event.location?.value, + type: "ical", + }; + } + }; + + if (event?.recurrenceRule?.options) { + const rule = new RRule(event.recurrenceRule.options); + const recurringEvents = rule.between(startDate.toJSDate(), endDate.toJSDate()); + + recurringEvents.forEach((date, i) => eventToAdd(date, i, "recurring")); + return; + } + + event.matchingDates.forEach((date, i) => eventToAdd(date, i, "single")); }); setEvents((prevEvents) => ({ ...prevEvents, ...eventsToAdd })); From bccd73fe2d4cc2611ca5b01f41a93884aaf7f315 Mon Sep 17 00:00:00 2001 From: Brandon McFarlin <6525520+Brandawg93@users.noreply.github.com> Date: Sun, 10 Dec 2023 12:56:35 -0500 Subject: [PATCH 05/20] Feature: Add peaNUT Widget (#2450) --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- docs/widgets/services/peanut.md | 21 ++++++++++++++ mkdocs.yml | 1 + public/locales/en/common.json | 8 ++++++ src/widgets/components.js | 1 + src/widgets/peanut/component.jsx | 49 ++++++++++++++++++++++++++++++++ src/widgets/peanut/widget.js | 14 +++++++++ src/widgets/widgets.js | 2 ++ 7 files changed, 96 insertions(+) create mode 100644 docs/widgets/services/peanut.md create mode 100644 src/widgets/peanut/component.jsx create mode 100644 src/widgets/peanut/widget.js diff --git a/docs/widgets/services/peanut.md b/docs/widgets/services/peanut.md new file mode 100644 index 00000000..fa6cf6b3 --- /dev/null +++ b/docs/widgets/services/peanut.md @@ -0,0 +1,21 @@ +--- +title: PeaNUT +description: PeaNUT Widget Configuration +--- + +This widget adds support for [Network UPS Tools](https://networkupstools.org/) via a third party tool, [PeaNUT](https://github.com/Brandawg93/PeaNUT). + +The default ups name is `ups`. To configure more than one ups, you must create multiple peanut services. + +Allowed fields: `["battery_charge", "ups_load", "ups_status"]` + +!!! note + + This widget requires an additional tool, [PeaNUT](https://github.com/Brandawg93/PeaNUT), as noted. Other projects exist to achieve similar results using a `customapi` widget, for example [NUTCase](https://github.com/ArthurMitchell42/nutcase#using-nutcase-homepage). + +```yaml +widget: + type: peanut + url: http://peanut.host.or.ip:port + key: nameofyourups +``` diff --git a/mkdocs.yml b/mkdocs.yml index 706a4a5b..77f55dde 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -96,6 +96,7 @@ nav: - widgets/services/opnsense.md - widgets/services/overseerr.md - widgets/services/paperlessngx.md + - widgets/services/peanut.md - widgets/services/pfsense.md - widgets/services/photoprism.md - widgets/services/pialert.md diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 8a3b851c..8512181d 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -544,6 +544,14 @@ "inbox": "Inbox", "total": "Total" }, + "peanut": { + "battery_charge": "Battery Charge", + "ups_load": "UPS Load", + "ups_status": "UPS Status", + "online": "Online", + "on_battery": "On Battery", + "low_battery": "Low Battery" + }, "nextdns": { "wait": "Please Wait", "no_devices": "No Device Data Received" diff --git a/src/widgets/components.js b/src/widgets/components.js index df9a7530..4209b69a 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -35,6 +35,7 @@ const components = { gotify: dynamic(() => import("./gotify/component")), grafana: dynamic(() => import("./grafana/component")), hdhomerun: dynamic(() => import("./hdhomerun/component")), + peanut: dynamic(() => import("./peanut/component")), homeassistant: dynamic(() => import("./homeassistant/component")), homebridge: dynamic(() => import("./homebridge/component")), healthchecks: dynamic(() => import("./healthchecks/component")), diff --git a/src/widgets/peanut/component.jsx b/src/widgets/peanut/component.jsx new file mode 100644 index 00000000..b61ecacf --- /dev/null +++ b/src/widgets/peanut/component.jsx @@ -0,0 +1,49 @@ +import { useTranslation } from "next-i18next"; + +import Container from "components/services/widget/container"; +import Block from "components/services/widget/block"; +import useWidgetAPI from "utils/proxy/use-widget-api"; + +export default function Component({ service }) { + const { widget } = service; + const { t } = useTranslation(); + + const { data: upsData, error: upsError } = useWidgetAPI(widget, "devices"); + + if (upsError) { + return ; + } + + if (!upsData) { + return ( + + + + + + ); + } + + let status; + switch (upsData.ups_status) { + case "OL": + status = t("peanut.online"); + break; + case "OB": + status = t("peanut.on_battery"); + break; + case "LB": + status = t("peanut.low_battery"); + break; + default: + status = upsData.ups_status; + } + + return ( + + + + + + ); +} diff --git a/src/widgets/peanut/widget.js b/src/widgets/peanut/widget.js new file mode 100644 index 00000000..2697dfb1 --- /dev/null +++ b/src/widgets/peanut/widget.js @@ -0,0 +1,14 @@ +import genericProxyHandler from "utils/proxy/handlers/generic"; + +const widget = { + api: "{url}/api/v1/{endpoint}/{key}", + proxyHandler: genericProxyHandler, + + mappings: { + devices: { + endpoint: "devices", + }, + }, +}; + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index a41d9306..904bd701 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -62,6 +62,7 @@ import opnsense from "./opnsense/widget"; import overseerr from "./overseerr/widget"; import openmediavault from "./openmediavault/widget"; import paperlessngx from "./paperlessngx/widget"; +import peanut from "./peanut/widget"; import pfsense from "./pfsense/widget"; import photoprism from "./photoprism/widget"; import proxmoxbackupserver from "./proxmoxbackupserver/widget"; @@ -166,6 +167,7 @@ const widgets = { overseerr, openmediavault, paperlessngx, + peanut, pfsense, photoprism, proxmoxbackupserver, From d38b313177be73de3a01fec9dd87a6c997ba2253 Mon Sep 17 00:00:00 2001 From: Thorben Date: Sun, 10 Dec 2023 21:21:53 +0100 Subject: [PATCH 06/20] Fix: fritzbox error when response contains empty values (#2463) --- src/widgets/fritzbox/proxy.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/widgets/fritzbox/proxy.js b/src/widgets/fritzbox/proxy.js index 353231d2..3c0b0f72 100644 --- a/src/widgets/fritzbox/proxy.js +++ b/src/widgets/fritzbox/proxy.js @@ -33,9 +33,9 @@ async function requestEndpoint(apiBaseUrl, service, action) { const response = {}; try { const jsonData = JSON.parse(xml2json(data)); - const responseElements = jsonData?.elements[0]?.elements[0]?.elements[0]?.elements || []; + const responseElements = jsonData?.elements?.[0]?.elements?.[0]?.elements?.[0]?.elements || []; responseElements.forEach((element) => { - response[element.name] = element.elements[0]?.text || ""; + response[element.name] = element.elements?.[0].text || ""; }); } catch (e) { logger.debug(`Failed parsing ${service}->${action} response:`, data); From bd6f24d82ac3633393656f746da26c13c6462652 Mon Sep 17 00:00:00 2001 From: Alice Lee Date: Mon, 11 Dec 2023 15:10:46 +0000 Subject: [PATCH 07/20] Documentation: Fix link to widgets page in docs (#2466) --- docs/configs/services.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configs/services.md b/docs/configs/services.md index 82e42f67..010950eb 100644 --- a/docs/configs/services.md +++ b/docs/configs/services.md @@ -179,7 +179,7 @@ Services may be connected to a Docker container, either running on the local mac Services may also have a service widget (or integration) attached to them, this works independently of the Docker integration. -You can find information and configuration for each of the supported integrations on the [Service Widgets](service-widgets.md) page. +You can find information and configuration for each of the supported integrations on the [Widgets](../widgets/index.md) page. Here is an example of a Radarr & Sonarr service, with their respective integrations. From 25767ba3c7e00e9ea66fd2d9615a0ccef6b53635 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 11 Dec 2023 07:32:40 -0800 Subject: [PATCH 08/20] Fix: moonraker widget error when not printing (#2468) --- src/widgets/moonraker/component.jsx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/widgets/moonraker/component.jsx b/src/widgets/moonraker/component.jsx index 43f7c02d..78332135 100644 --- a/src/widgets/moonraker/component.jsx +++ b/src/widgets/moonraker/component.jsx @@ -34,12 +34,8 @@ export default function Component({ service }) { ); } - let currentLayer = "-"; - let totalLayer = "-"; - if (printStats.result.status.print_stats.info.total_layer !== null) { - currentLayer = printStats.result.status.print_stats.info.current_layer; - totalLayer = printStats.result.status.print_stats.info.total_layer; - } + const printStatsInfo = printStats.result.status.print_stats.info ?? {}; + const { current_layer: currentLayer = "-", total_layer: totalLayer = "-" } = printStatsInfo; return ( From 15a12763f8cd8d9e5024a4f1537099392c606fc1 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 11 Dec 2023 08:41:45 -0800 Subject: [PATCH 09/20] Fix: calendar widget radarr integration API params invalid (#2470) --- src/widgets/calendar/component.jsx | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/widgets/calendar/component.jsx b/src/widgets/calendar/component.jsx index d1ab2b4b..0e10d0ed 100644 --- a/src/widgets/calendar/component.jsx +++ b/src/widgets/calendar/component.jsx @@ -52,15 +52,18 @@ export default function Component({ service }) { // params for API fetch const params = useMemo(() => { - if (!showDate) { - return {}; + const constructedParams = { + start: "", + end: "", + unmonitored: false, + }; + + if (showDate) { + constructedParams.start = showDate.minus({ months: 3 }).toFormat("yyyy-MM-dd"); + constructedParams.end = showDate.plus({ months: 3 }).toFormat("yyyy-MM-dd"); } - return { - start: showDate.minus({ months: 3 }).toFormat("yyyy-MM-dd"), - end: showDate.plus({ months: 3 }).toFormat("yyyy-MM-dd"), - unmonitored: "false", - }; + return constructedParams; }, [showDate]); // Load active integrations From 3bddfdfe3b97ebcfa1651771d21c66692b66609d Mon Sep 17 00:00:00 2001 From: CosminPerRam Date: Tue, 12 Dec 2023 00:11:44 +0200 Subject: [PATCH 10/20] Chore: update gamedig dep to 4.3.0 (#2474) --- package-lock.json | 8 ++++---- package.json | 2 +- pnpm-lock.yaml | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index abac02b0..dbda7fdf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "compare-versions": "^5.0.1", "dockerode": "^3.3.4", "follow-redirects": "^1.15.2", - "gamedig": "^4.1.0", + "gamedig": "^4.3.0", "i18next": "^21.9.2", "js-yaml": "^4.1.0", "json-rpc-2.0": "^1.4.1", @@ -2958,9 +2958,9 @@ } }, "node_modules/gamedig": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/gamedig/-/gamedig-4.1.0.tgz", - "integrity": "sha512-jvLUEakihJgpiw9t9yQRsbcemeALeTNlnaWY1gvYdwI63ZlkxznTaLqX5K/eluRTTCtAWNW3YceT6NVjyAZIwA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gamedig/-/gamedig-4.3.0.tgz", + "integrity": "sha512-73wQM/mYLh0giljtg9OmF7QySxTGUj52+MxGklm2cveakOuB2zk0cvQl7vIFYcv6uI3HwenjOZKZ5507c/ZyzA==", "dependencies": { "cheerio": "^1.0.0-rc.10", "gbxremote": "^0.2.1", diff --git a/package.json b/package.json index 9bea0461..68ec6ba7 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "compare-versions": "^5.0.1", "dockerode": "^3.3.4", "follow-redirects": "^1.15.2", - "gamedig": "^4.1.0", + "gamedig": "^4.3.0", "i18next": "^21.9.2", "js-yaml": "^4.1.0", "json-rpc-2.0": "^1.4.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ba74b36d..21ee10a8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,8 +27,8 @@ dependencies: specifier: ^1.15.2 version: 1.15.2 gamedig: - specifier: ^4.1.0 - version: 4.1.0 + specifier: ^4.3.0 + version: 4.3.0 i18next: specifier: ^21.9.2 version: 21.10.0 @@ -1973,8 +1973,8 @@ packages: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true - /gamedig@4.1.0: - resolution: {integrity: sha512-jvLUEakihJgpiw9t9yQRsbcemeALeTNlnaWY1gvYdwI63ZlkxznTaLqX5K/eluRTTCtAWNW3YceT6NVjyAZIwA==} + /gamedig@4.3.0: + resolution: {integrity: sha512-73wQM/mYLh0giljtg9OmF7QySxTGUj52+MxGklm2cveakOuB2zk0cvQl7vIFYcv6uI3HwenjOZKZ5507c/ZyzA==} engines: {node: '>=14.0.0'} hasBin: true dependencies: From aeaf36e0cfb15c35e1c6bedb79fe11c9fab5dbb5 Mon Sep 17 00:00:00 2001 From: Sean Kelly Date: Thu, 14 Dec 2023 19:07:52 -0800 Subject: [PATCH 11/20] Fix changedetection diffs only showing up when it was the first time they were checked (#2479) --- src/widgets/changedetectionio/component.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/changedetectionio/component.jsx b/src/widgets/changedetectionio/component.jsx index e13e10e4..caef8655 100644 --- a/src/widgets/changedetectionio/component.jsx +++ b/src/widgets/changedetectionio/component.jsx @@ -28,7 +28,7 @@ export default function Component({ service }) { let diffsDetected = 0; Object.keys(data).forEach((key) => { - if (data[key].last_changed > 0 && data[key].last_checked === data[key].last_changed && !data[key].viewed) { + if (data[key].last_changed > 0 && !data[key].viewed) { diffsDetected += 1; } }); From 24e25e8953e5eecb6ccd0796dab5651efeae89ab Mon Sep 17 00:00:00 2001 From: Thorben Date: Fri, 15 Dec 2023 22:33:29 +0100 Subject: [PATCH 12/20] Enhancement: fritzbox uptime display (#2481) --- src/widgets/fritzbox/component.jsx | 28 ++++++++++++++++++++-------- src/widgets/fritzbox/proxy.js | 6 +++--- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/widgets/fritzbox/component.jsx b/src/widgets/fritzbox/component.jsx index 7c32f617..e4234cd0 100644 --- a/src/widgets/fritzbox/component.jsx +++ b/src/widgets/fritzbox/component.jsx @@ -6,16 +6,28 @@ import useWidgetAPI from "utils/proxy/use-widget-api"; export const fritzboxDefaultFields = ["connectionStatus", "uptime", "maxDown", "maxUp"]; -const formatUptime = (timestamp) => { - const hours = Math.floor(timestamp / 3600); - const minutes = Math.floor((timestamp % 3600) / 60); - const seconds = timestamp % 60; +const formatUptime = (uptimeInSeconds) => { + const days = Math.floor(uptimeInSeconds / (3600 * 24)); + const hours = Math.floor((uptimeInSeconds % (3600 * 24)) / 3600); + const minutes = Math.floor((uptimeInSeconds % 3600) / 60); + const seconds = Math.floor(uptimeInSeconds) % 60; + const format = (num) => String(num).padStart(2, "0"); - const hourDuration = hours > 0 ? `${hours}h` : "00h"; - const minDuration = minutes > 0 ? `${minutes}m` : "00m"; - const secDuration = seconds > 0 ? `${seconds}s` : "00s"; + let uptimeStr = ""; + if (days) { + uptimeStr += `${days}d`; + } + if (uptimeInSeconds >= 3600) { + uptimeStr += `${format(hours)}h`; + } + if (uptimeInSeconds >= 60) { + uptimeStr += `${format(minutes)}m`; + } + if (!days) { + uptimeStr += `${format(seconds)}s `; + } - return hourDuration + minDuration + secDuration; + return uptimeStr; }; export default function Component({ service }) { diff --git a/src/widgets/fritzbox/proxy.js b/src/widgets/fritzbox/proxy.js index 3c0b0f72..a0a22d8b 100644 --- a/src/widgets/fritzbox/proxy.js +++ b/src/widgets/fritzbox/proxy.js @@ -50,12 +50,12 @@ export default async function fritzboxProxyHandler(req, res) { const serviceWidget = await getServiceWidget(group, service); if (!serviceWidget) { - res.status(500).json({ error: "Service widget not found" }); + res.status(500).json({ error: { message: "Service widget not found" } }); return; } if (!serviceWidget.url) { - res.status(500).json({ error: "Service widget url not configured" }); + res.status(500).json({ error: { message: "Service widget url not configured" } }); return; } @@ -91,6 +91,6 @@ export default async function fritzboxProxyHandler(req, res) { }); }) .catch((error) => { - res.status(500).json({ error: error.message }); + res.status(500).json({ error: { message: error.message } }); }); } From e768b1c83a01572d835b82760a4fd0f15f8a578a Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 15 Dec 2023 14:08:37 -0800 Subject: [PATCH 13/20] Unify uptime formatting (#2483) --- next-i18next.config.js | 17 ++++++++++++++ public/locales/en/common.json | 14 ++++++----- src/components/widgets/resources/uptime.jsx | 19 +++++++-------- src/widgets/fritzbox/component.jsx | 26 +-------------------- src/widgets/uptimerobot/component.jsx | 22 ++--------------- 5 files changed, 36 insertions(+), 62 deletions(-) diff --git a/next-i18next.config.js b/next-i18next.config.js index e5bc98bd..6790e14d 100644 --- a/next-i18next.config.js +++ b/next-i18next.config.js @@ -84,6 +84,22 @@ function prettyBytes(number, options) { return `${prefix + numberString} ${unit}`; } +function uptime(uptimeInSeconds, i18next) { + const mo = Math.floor(uptimeInSeconds / (3600 * 24 * 31)); + const d = Math.floor((uptimeInSeconds % (3600 * 24 * 31)) / (3600 * 24)); + const h = Math.floor((uptimeInSeconds % (3600 * 24)) / 3600); + const m = Math.floor((uptimeInSeconds % 3600) / 60); + const s = Math.floor(uptimeInSeconds % 60); + + const moDisplay = mo > 0 ? mo + i18next.t("common.months") : ""; + const dDisplay = d > 0 ? d + i18next.t("common.days") : ""; + const hDisplay = h > 0 && mo === 0 ? h + i18next.t("common.hours") : ""; + const mDisplay = m > 0 && mo === 0 && d === 0 ? m + i18next.t("common.minutes") : ""; + const sDisplay = s > 0 && mo === 0 && d === 0 && h === 0 ? s + i18next.t("common.seconds") : ""; + + return (moDisplay + dDisplay + hDisplay + mDisplay + sDisplay).replace(/,\s*$/, ""); +} + module.exports = { i18n: { defaultLocale: "en", @@ -126,6 +142,7 @@ module.exports = { i18next.services.formatter.add("date", (value, lng, options) => new Intl.DateTimeFormat(lng, { ...options }).format(new Date(value)), ); + i18next.services.formatter.add("uptime", (value, lng) => uptime(value, i18next)); }, type: "3rdParty", }, diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 8512181d..1f800bf2 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -11,7 +11,13 @@ "percent": "{{value, percent}}", "number": "{{value, number}}", "ms": "{{value, number}}", - "date": "{{value, date}}" + "date": "{{value, date}}", + "uptime": "{{value, uptime}}", + "months": "mo", + "days": "d", + "hours": "h", + "minutes": "m", + "seconds": "s" }, "widget": { "missing_type": "Missing Widget Type: {{type}}", @@ -40,11 +46,7 @@ "load": "Load", "temp": "TEMP", "max": "Max", - "uptime": "UP", - "months": "mo", - "days": "d", - "hours": "h", - "minutes": "m" + "uptime": "UP" }, "unifi": { "users": "Users", diff --git a/src/components/widgets/resources/uptime.jsx b/src/components/widgets/resources/uptime.jsx index 72b4865f..025d1aa5 100644 --- a/src/components/widgets/resources/uptime.jsx +++ b/src/components/widgets/resources/uptime.jsx @@ -20,17 +20,14 @@ export default function Uptime({ refresh = 1500 }) { return ; } - const mo = Math.floor(data.uptime / (3600 * 24 * 31)); - const d = Math.floor((data.uptime % (3600 * 24 * 31)) / (3600 * 24)); - const h = Math.floor((data.uptime % (3600 * 24)) / 3600); - const m = Math.floor((data.uptime % 3600) / 60); - - let uptime; - if (mo > 0) uptime = `${mo}${t("resources.months")} ${d}${t("resources.days")}`; - else if (d > 0) uptime = `${d}${t("resources.days")} ${h}${t("resources.hours")}`; - else uptime = `${h}${t("resources.hours")} ${m}${t("resources.minutes")}`; - const percent = Math.round((new Date().getSeconds() / 60) * 100).toString(); - return ; + return ( + + ); } diff --git a/src/widgets/fritzbox/component.jsx b/src/widgets/fritzbox/component.jsx index e4234cd0..5939f9ed 100644 --- a/src/widgets/fritzbox/component.jsx +++ b/src/widgets/fritzbox/component.jsx @@ -6,30 +6,6 @@ import useWidgetAPI from "utils/proxy/use-widget-api"; export const fritzboxDefaultFields = ["connectionStatus", "uptime", "maxDown", "maxUp"]; -const formatUptime = (uptimeInSeconds) => { - const days = Math.floor(uptimeInSeconds / (3600 * 24)); - const hours = Math.floor((uptimeInSeconds % (3600 * 24)) / 3600); - const minutes = Math.floor((uptimeInSeconds % 3600) / 60); - const seconds = Math.floor(uptimeInSeconds) % 60; - const format = (num) => String(num).padStart(2, "0"); - - let uptimeStr = ""; - if (days) { - uptimeStr += `${days}d`; - } - if (uptimeInSeconds >= 3600) { - uptimeStr += `${format(hours)}h`; - } - if (uptimeInSeconds >= 60) { - uptimeStr += `${format(minutes)}m`; - } - if (!days) { - uptimeStr += `${format(seconds)}s `; - } - - return uptimeStr; -}; - export default function Component({ service }) { const { t } = useTranslation(); const { widget } = service; @@ -68,7 +44,7 @@ export default function Component({ service }) { return ( - + diff --git a/src/widgets/uptimerobot/component.jsx b/src/widgets/uptimerobot/component.jsx index 92497aed..c0cb670f 100644 --- a/src/widgets/uptimerobot/component.jsx +++ b/src/widgets/uptimerobot/component.jsx @@ -4,24 +4,6 @@ import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; import useWidgetAPI from "utils/proxy/use-widget-api"; -function secondsToDhms(seconds) { - const d = Math.floor(seconds / (3600 * 24)); - const h = Math.floor((seconds % (3600 * 24)) / 3600); - const m = Math.floor((seconds % 3600) / 60); - const s = Math.floor(seconds % 60); - - const dDisplay = d > 0 ? d + (d === 1 ? " day, " : " days, ") : ""; - const hDisplay = h > 0 ? h + (h === 1 ? " hr, " : " hrs, ") : ""; - let mDisplay = m > 0 && d === 0 ? m + (m === 1 ? " min" : " mins") : ""; - let sDisplay = ""; - - if (d === 0 && h === 0) { - mDisplay = m > 0 ? m + (m === 1 ? " min, " : " mins, ") : ""; - sDisplay = s > 0 ? s + (s === 1 ? " sec" : " secs") : ""; - } - return (dDisplay + hDisplay + mDisplay + sDisplay).replace(/,\s*$/, ""); -} - export default function Component({ service }) { const { widget } = service; const { t } = useTranslation(); @@ -68,7 +50,7 @@ export default function Component({ service }) { break; case 2: status = t("uptimerobot.up"); - uptime = secondsToDhms(monitor.logs[0].duration); + uptime = t("common.uptime", { value: monitor.logs[0].duration }); logIndex = 1; break; case 8: @@ -83,7 +65,7 @@ export default function Component({ service }) { } const lastDown = new Date(monitor.logs[logIndex].datetime * 1000).toLocaleString(); - const downDuration = secondsToDhms(monitor.logs[logIndex].duration); + const downDuration = t("common.uptime", { value: monitor.logs[logIndex].duration }); const hideDown = logIndex === 1 && monitor.logs[logIndex].type !== 1; return ( From 30e4a2ae3ab5104168f67a87e37441f8a83fb92b Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 15 Dec 2023 14:12:14 -0800 Subject: [PATCH 14/20] Include truenas in uptime refactor --- public/locales/en/common.json | 3 +-- src/widgets/truenas/component.jsx | 30 +----------------------------- 2 files changed, 2 insertions(+), 31 deletions(-) diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 1f800bf2..aa4ef1e5 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -519,8 +519,7 @@ "truenas": { "load": "System Load", "uptime": "Uptime", - "alerts": "Alerts", - "time": "{{value, number(style: unit; unitDisplay: long;)}}" + "alerts": "Alerts" }, "pyload": { "speed": "Speed", diff --git a/src/widgets/truenas/component.jsx b/src/widgets/truenas/component.jsx index 456e2012..c1fc5c53 100644 --- a/src/widgets/truenas/component.jsx +++ b/src/widgets/truenas/component.jsx @@ -4,34 +4,6 @@ import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; import useWidgetAPI from "utils/proxy/use-widget-api"; -const processUptime = (uptime) => { - const seconds = uptime.toFixed(0); - - const levels = [ - [Math.floor(seconds / 31536000), "year"], - [Math.floor((seconds % 31536000) / 2592000), "month"], - [Math.floor(((seconds % 31536000) % 2592000) / 86400), "day"], - [Math.floor(((seconds % 31536000) % 86400) / 3600), "hour"], - [Math.floor((((seconds % 31536000) % 86400) % 3600) / 60), "minute"], - [(((seconds % 31536000) % 86400) % 3600) % 60, "second"], - ]; - - for (let i = 0; i < levels.length; i += 1) { - const level = levels[i]; - if (level[0] > 0) { - return { - value: level[0], - unit: level[1], - }; - } - } - - return { - value: 0, - unit: "second", - }; -}; - export default function Component({ service }) { const { t } = useTranslation(); @@ -58,7 +30,7 @@ export default function Component({ service }) { return ( - + ); From eea20defb13adc1bf532665f5d194e09729ce1bd Mon Sep 17 00:00:00 2001 From: Atropos <33070637+atropos112@users.noreply.github.com> Date: Sun, 17 Dec 2023 18:55:40 +0000 Subject: [PATCH 15/20] Enhancement: support `instanceName` filtering for kubernetes deployment (#2488) --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- docs/configs/kubernetes.md | 4 ++++ src/utils/config/service-helpers.js | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/configs/kubernetes.md b/docs/configs/kubernetes.md index c1777612..6ba995c4 100644 --- a/docs/configs/kubernetes.md +++ b/docs/configs/kubernetes.md @@ -79,6 +79,7 @@ metadata: gethomepage.dev/widget.url: "https://emby.example.com" gethomepage.dev/pod-selector: "" gethomepage.dev/weight: 10 # optional + gethomepage.dev/instance: "public" # optional spec: rules: - host: emby.example.com @@ -95,6 +96,8 @@ spec: When the Kubernetes cluster connection has been properly configured, this service will be automatically discovered and added to your Homepage. **You do not need to specify the `namespace` or `app` values, as they will be automatically inferred.** +If you are using multiple instances of homepage, an `instance` annotation can be specified to limit services to a specific instance. If no instance is provided, the service will be visible on all instances. + ### Traefik IngressRoute support Homepage can also read ingresses defined using the Traefik IngressRoute custom resource definition. Due to the complex nature of Traefik routing rules, it is required for the `gethomepage.dev/href` annotation to be set: @@ -116,6 +119,7 @@ metadata: gethomepage.dev/widget.url: "https://emby.example.com" gethomepage.dev/pod-selector: "" gethomepage.dev/weight: 10 # optional + gethomepage.dev/instance: "public" # optional spec: entryPoints: - websecure diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index c2319781..f96f6509 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -169,6 +169,7 @@ export async function checkCRD(kc, name) { export async function servicesFromKubernetes() { const ANNOTATION_BASE = "gethomepage.dev"; const ANNOTATION_WIDGET_BASE = `${ANNOTATION_BASE}/widget.`; + const { instanceName } = getSettings(); checkAndCopyConfig("kubernetes.yaml"); @@ -238,7 +239,10 @@ export async function servicesFromKubernetes() { const services = ingressList.items .filter( (ingress) => - ingress.metadata.annotations && ingress.metadata.annotations[`${ANNOTATION_BASE}/enabled`] === "true", + ingress.metadata.annotations && + ingress.metadata.annotations[`${ANNOTATION_BASE}/enabled`] === "true" && + (!ingress.metadata.annotations[`${ANNOTATION_BASE}/instance`] || + ingress.metadata.annotations[`${ANNOTATION_BASE}/instance`] === instanceName), ) .map((ingress) => { let constructedService = { From c3e0627d62b7bf6bb21de9bd7c87f874961266ac Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 17 Dec 2023 11:25:26 -0800 Subject: [PATCH 16/20] Try updating mike, changing docs action cache_id --- .github/workflows/docs-publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docs-publish.yml b/.github/workflows/docs-publish.yml index f85f9ee5..92900e25 100644 --- a/.github/workflows/docs-publish.yml +++ b/.github/workflows/docs-publish.yml @@ -70,7 +70,7 @@ jobs: - uses: actions/setup-python@v5 with: python-version: 3.x - - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV + - run: echo "cache_id=${{github.sha}}" >> $GITHUB_ENV - uses: actions/cache@v3 with: key: mkdocs-material-${{ env.cache_id }} @@ -78,7 +78,7 @@ jobs: restore-keys: | mkdocs-material- - run: sudo apt-get install pngquant - - run: pip install mike==1.1.2 + - run: pip install mike==2.0.0 - run: pip install git+https://${GH_TOKEN}@github.com/benphelps/mkdocs-material-insiders.git - name: Set Git config run: | From afd49d5327bc7cf7a346d66d6ce2c0816dea98e0 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 17 Dec 2023 11:51:06 -0800 Subject: [PATCH 17/20] Remove groups plugin for now --- mkdocs.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index 77f55dde..b2b85785 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -229,12 +229,9 @@ markdown_extensions: - admonition plugins: - - group: - enabled: !ENV MKINSIDERS - plugins: - - optimize - - typeset - - social + - optimize + - typeset + - social - tags - search: pipeline: From b9f1ddd28453326f39712424fb7222b0b66bd798 Mon Sep 17 00:00:00 2001 From: HaveAGitGat <43864057+HaveAGitGat@users.noreply.github.com> Date: Mon, 18 Dec 2023 08:39:30 +0000 Subject: [PATCH 18/20] Fix: Tdarr widget should use viewable count if exists (#2492) --- src/widgets/tdarr/component.jsx | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/widgets/tdarr/component.jsx b/src/widgets/tdarr/component.jsx index 78ac7384..f885830f 100644 --- a/src/widgets/tdarr/component.jsx +++ b/src/widgets/tdarr/component.jsx @@ -26,9 +26,19 @@ export default function Component({ service }) { ); } - const queue = parseInt(tdarrData.table1Count, 10) + parseInt(tdarrData.table4Count, 10); - const processed = parseInt(tdarrData.table2Count, 10) + parseInt(tdarrData.table5Count, 10); - const errored = parseInt(tdarrData.table3Count, 10) + parseInt(tdarrData.table6Count, 10); + // use viewable count if it exists, which removes file count of any disabled libraries etc + // only shows items which are viewable in the tables in the UI + + const table1Count = tdarrData.table1ViewableCount || tdarrData.table1Count; + const table2Count = tdarrData.table2ViewableCount || tdarrData.table2Count; + const table3Count = tdarrData.table3ViewableCount || tdarrData.table3Count; + const table4Count = tdarrData.table4ViewableCount || tdarrData.table4Count; + const table5Count = tdarrData.table5ViewableCount || tdarrData.table5Count; + const table6Count = tdarrData.table6ViewableCount || tdarrData.table6Count; + + const queue = parseInt(table1Count, 10) + parseInt(table4Count, 10); + const processed = parseInt(table2Count, 10) + parseInt(table5Count, 10); + const errored = parseInt(table3Count, 10) + parseInt(table6Count, 10); const saved = parseFloat(tdarrData.sizeDiff, 10) * 1000000000; return ( From e0886ef71586da2ccc7acec2e45889ffc4840532 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 18 Dec 2023 08:13:45 -0800 Subject: [PATCH 19/20] Revert "Remove groups plugin for now" This reverts commit afd49d5327bc7cf7a346d66d6ce2c0816dea98e0. --- mkdocs.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index b2b85785..77f55dde 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -229,9 +229,12 @@ markdown_extensions: - admonition plugins: - - optimize - - typeset - - social + - group: + enabled: !ENV MKINSIDERS + plugins: + - optimize + - typeset + - social - tags - search: pipeline: From 4d6754e4a7258c46047d3cc2ca2e3fe63f6df76a Mon Sep 17 00:00:00 2001 From: William Date: Fri, 22 Dec 2023 10:38:58 -0500 Subject: [PATCH 20/20] Chore: bump react-icons to 4.12.0 (#2507) --- package-lock.json | 6 +++--- package.json | 2 +- pnpm-lock.yaml | 55 ++++++++++++++++++++++------------------------- 3 files changed, 30 insertions(+), 33 deletions(-) diff --git a/package-lock.json b/package-lock.json index dbda7fdf..988f206b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5209,9 +5209,9 @@ } }, "node_modules/react-icons": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.8.0.tgz", - "integrity": "sha512-N6+kOLcihDiAnj5Czu637waJqSnwlMNROzVZMhfX68V/9bu9qHaMIJC4UdozWoOk57gahFCNHwVvWzm0MTzRjg==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.12.0.tgz", + "integrity": "sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==", "peerDependencies": { "react": "*" } diff --git a/package.json b/package.json index 68ec6ba7..13f07778 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-i18next": "^11.18.6", - "react-icons": "^4.4.0", + "react-icons": "^4.12.0", "recharts": "^2.7.2", "rrule": "^2.8.1", "swr": "^1.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 21ee10a8..ade18318 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -72,8 +72,8 @@ dependencies: specifier: ^11.18.6 version: 11.18.6(i18next@21.10.0)(react-dom@18.2.0)(react@18.2.0) react-icons: - specifier: ^4.4.0 - version: 4.8.0(react@18.2.0) + specifier: ^4.12.0 + version: 4.12.0(react@18.2.0) recharts: specifier: ^2.7.2 version: 2.7.2(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0) @@ -266,7 +266,7 @@ packages: underscore: 1.13.6 ws: 7.5.9 optionalDependencies: - openid-client: 5.4.0 + openid-client: 5.6.2 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -835,10 +835,9 @@ packages: ieee754: 1.2.1 dev: false - /buildcheck@0.0.3: - resolution: {integrity: sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==} + /buildcheck@0.0.6: + resolution: {integrity: sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==} engines: {node: '>=10.0.0'} - requiresBuild: true dev: false optional: true @@ -945,7 +944,7 @@ packages: normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true /chownr@1.1.4: @@ -1043,13 +1042,13 @@ packages: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} dev: false - /cpu-features@0.0.4: - resolution: {integrity: sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==} + /cpu-features@0.0.9: + resolution: {integrity: sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ==} engines: {node: '>=10.0.0'} requiresBuild: true dependencies: - buildcheck: 0.0.3 - nan: 2.17.0 + buildcheck: 0.0.6 + nan: 2.18.0 dev: false optional: true @@ -1948,8 +1947,8 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true @@ -2509,9 +2508,8 @@ packages: resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==} dev: true - /jose@4.13.1: - resolution: {integrity: sha512-MSJQC5vXco5Br38mzaQKiq9mwt7lwj2eXpgpRyQYNHYt2lq1PjkWa7DLXX0WVcQLE9HhMh3jPiufS7fhJf+CLQ==} - requiresBuild: true + /jose@4.15.4: + resolution: {integrity: sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ==} dev: false optional: true @@ -2781,8 +2779,8 @@ packages: thenify-all: 1.6.0 dev: true - /nan@2.17.0: - resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} + /nan@2.18.0: + resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} requiresBuild: true dev: false optional: true @@ -2990,10 +2988,9 @@ packages: es-abstract: 1.21.2 dev: true - /oidc-token-hash@5.0.1: - resolution: {integrity: sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ==} + /oidc-token-hash@5.0.3: + resolution: {integrity: sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==} engines: {node: ^10.13.0 || >=12.0.0} - requiresBuild: true dev: false optional: true @@ -3015,14 +3012,14 @@ packages: mimic-fn: 2.1.0 dev: false - /openid-client@5.4.0: - resolution: {integrity: sha512-hgJa2aQKcM2hn3eyVtN12tEA45ECjTJPXCgUh5YzTzy9qwapCvmDTVPWOcWVL0d34zeQoQ/hbG9lJhl3AYxJlQ==} + /openid-client@5.6.2: + resolution: {integrity: sha512-TIVimoK/fAvpiISLcoGZyNJx2TOfd5AE6TXn58FFj6Y8qbU/jqky54Aws7sYKuCph1bLPWSRUa1r/Rd6K21bhg==} requiresBuild: true dependencies: - jose: 4.13.1 + jose: 4.15.4 lru-cache: 6.0.0 object-hash: 2.2.0 - oidc-token-hash: 5.0.1 + oidc-token-hash: 5.0.3 dev: false optional: true @@ -3322,8 +3319,8 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /react-icons@4.8.0(react@18.2.0): - resolution: {integrity: sha512-N6+kOLcihDiAnj5Czu637waJqSnwlMNROzVZMhfX68V/9bu9qHaMIJC4UdozWoOk57gahFCNHwVvWzm0MTzRjg==} + /react-icons@4.12.0(react@18.2.0): + resolution: {integrity: sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==} peerDependencies: react: '*' dependencies: @@ -3682,8 +3679,8 @@ packages: asn1: 0.2.6 bcrypt-pbkdf: 1.0.2 optionalDependencies: - cpu-features: 0.0.4 - nan: 2.17.0 + cpu-features: 0.0.9 + nan: 2.18.0 dev: false /sshpk@1.17.0: