From be5ef3448e27024b08bd5b38a08ada7631497ddd Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 14 Mar 2026 21:45:25 -0700 Subject: [PATCH 01/28] Chore: add release drafter (#6424) --- .github/release-drafter.yml | 78 +++++++++++++++++++++++++++ .github/workflows/release-drafter.yml | 29 ++++++++++ 2 files changed, 107 insertions(+) create mode 100644 .github/release-drafter.yml create mode 100644 .github/workflows/release-drafter.yml diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml new file mode 100644 index 000000000..189fec070 --- /dev/null +++ b/.github/release-drafter.yml @@ -0,0 +1,78 @@ +name-template: 'v$RESOLVED_VERSION' +tag-template: 'v$RESOLVED_VERSION' +change-template: '- $TITLE (#$NUMBER) @$AUTHOR' +change-title-escapes: '\\<*_&' + +version-resolver: + major: + labels: + - 'major' + - 'breaking-change' + minor: + labels: + - 'enhancement' + - 'feature' + patch: + labels: + - 'bug' + - 'fix' + - 'dependencies' + - 'documentation' + default: patch + +categories: + - title: '⚠️ Breaking Changes' + labels: + - 'major' + - 'breaking-change' + - title: '🚀 Features' + labels: + - 'enhancement' + - 'feature' + - title: '🐛 Fixes' + labels: + - 'bug' + - 'fix' + - title: '🧰 Maintenance' + labels: + - 'dependencies' + - 'ci' + - 'chore' + - title: '📚 Documentation' + labels: + - 'documentation' + +autolabeler: + - label: 'documentation' + files: + - 'docs/**' + - '*.md' + - '.github/**/*.md' + + - label: 'ci' + files: + - '.github/workflows/**' + + - label: 'dependencies' + files: + - 'package.json' + - 'pnpm-lock.yaml' + - 'pyproject.toml' + - 'uv.lock' + + - label: 'feature' + files: + - 'src/components/**' + - 'src/widgets/**' + - 'src/pages/**' + + - label: 'chore' + files: + - 'Dockerfile*' + - 'docker-entrypoint.sh' + - 'k3d/**' + +template: | + ## What's Changed + + $CHANGES diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml new file mode 100644 index 000000000..a5097afd4 --- /dev/null +++ b/.github/workflows/release-drafter.yml @@ -0,0 +1,29 @@ +name: Release Drafter + +on: + push: + branches: + - main + pull_request_target: + types: [opened, reopened, synchronize] + workflow_dispatch: + inputs: + version: + description: "Optional explicit version override (for example: 2.0.0)" + required: false + type: string + +permissions: + contents: read + pull-requests: write + +jobs: + update_release_draft: + runs-on: ubuntu-latest + steps: + - uses: release-drafter/release-drafter@v6 + with: + config-name: release-drafter.yml + version: ${{ github.event.inputs.version }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 0598a27d60175ef5be515d233cab73071d491448 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 14 Mar 2026 21:49:02 -0700 Subject: [PATCH 02/28] Update release-drafter.yml --- .github/release-drafter.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 189fec070..24911d53e 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -71,6 +71,7 @@ autolabeler: - 'Dockerfile*' - 'docker-entrypoint.sh' - 'k3d/**' + - 'public/locales/**' template: | ## What's Changed From 34be817eb22b62bf26742fc305b46d264180e7d2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 15 Mar 2026 00:29:37 -0700 Subject: [PATCH 03/28] New Crowdin translations by GitHub Action (#6292) Co-authored-by: Crowdin Bot --- public/locales/af/common.json | 47 +- public/locales/ar/common.json | 23 +- public/locales/bg/common.json | 23 +- public/locales/ca/common.json | 317 ++++++------ public/locales/cs/common.json | 775 +++++++++++++++-------------- public/locales/da/common.json | 23 +- public/locales/de/common.json | 41 +- public/locales/el/common.json | 23 +- public/locales/eo/common.json | 23 +- public/locales/es/common.json | 31 +- public/locales/eu/common.json | 23 +- public/locales/fi/common.json | 23 +- public/locales/fr/common.json | 47 +- public/locales/he/common.json | 29 +- public/locales/hi/common.json | 23 +- public/locales/hr/common.json | 91 ++-- public/locales/hu/common.json | 31 +- public/locales/id/common.json | 23 +- public/locales/it/common.json | 43 +- public/locales/ja/common.json | 23 +- public/locales/ko/common.json | 31 +- public/locales/lv/common.json | 23 +- public/locales/ms/common.json | 23 +- public/locales/nl/common.json | 29 +- public/locales/no/common.json | 23 +- public/locales/pl/common.json | 51 +- public/locales/pt/common.json | 23 +- public/locales/pt_BR/common.json | 31 +- public/locales/ro/common.json | 23 +- public/locales/ru/common.json | 53 +- public/locales/sk/common.json | 97 ++-- public/locales/sl/common.json | 23 +- public/locales/sr/common.json | 87 ++-- public/locales/sv/common.json | 23 +- public/locales/te/common.json | 23 +- public/locales/th/common.json | 23 +- public/locales/tr/common.json | 275 +++++----- public/locales/uk/common.json | 31 +- public/locales/vi/common.json | 23 +- public/locales/yue/common.json | 73 +-- public/locales/zh-Hans/common.json | 187 +++---- public/locales/zh-Hant/common.json | 73 +-- 42 files changed, 1654 insertions(+), 1276 deletions(-) diff --git a/public/locales/af/common.json b/public/locales/af/common.json index ca71265da..0fc63a043 100644 --- a/public/locales/af/common.json +++ b/public/locales/af/common.json @@ -108,14 +108,14 @@ "songs": "Liedjies" }, "jellyfin": { - "playing": "Playing", - "transcoding": "Transcoding", - "bitrate": "Bitrate", - "no_active": "No Active Streams", + "playing": "Speel", + "transcoding": "Transkodering", + "bitrate": "Bistempo", + "no_active": "Geen Aktiewe Strome", "movies": "Movies", - "series": "Series", - "episodes": "Episodes", - "songs": "Songs" + "series": "Reekse", + "episodes": "Episode", + "songs": "Liedjies" }, "esphome": { "offline": "Vanlyn af", @@ -184,6 +184,13 @@ "no_active": "Geen aktiewe strome nie", "plex_connection_error": "Gaan Plex-verbinding Na" }, + "tracearr": { + "no_active": "Geen Aktiewe Strome", + "streams": "Uitsendings", + "transcodes": "Transkodering", + "directplay": "Direkte Speel", + "bitrate": "Bistempo" + }, "omada": { "connectedAp": "Gekoppelde APs", "activeUser": "Aktiewe toestelle", @@ -282,17 +289,13 @@ "approved": "Goedgekeur", "available": "Beskikbaar" }, - "jellyseerr": { + "seerr": { "pending": "Afwagtend", "approved": "Goedgekeur", "available": "Beskikbaar", - "issues": "Oop Kwessies" - }, - "overseerr": { - "pending": "Afwagtend", + "completed": "Afgehandel", "processing": "Verwerking", - "approved": "Goedgekeur", - "available": "Beskikbaar" + "issues": "Oop Kwessies" }, "netalertx": { "total": "Totaal", @@ -1152,11 +1155,11 @@ "artists": "Kunstenaars" }, "arcane": { - "containers": "Containers", - "images": "Images", - "image_updates": "Image Updates", - "images_unused": "Unused", - "environment_required": "Environment ID Required" + "containers": "Houers", + "images": "Beelde", + "image_updates": "Beeldopdaterings", + "images_unused": "Ongebruik", + "environment_required": "Omgewings-ID Vereis" }, "dockhand": { "running": "Lopend", @@ -1171,5 +1174,11 @@ "paused": "Onderbreek", "total": "Totaal", "environment_not_found": "Omgewing Nie Gevind Nie" + }, + "sparkyfitness": { + "eaten": "Geëet", + "burned": "Verbrand", + "remaining": "Oorblywende", + "steps": "Stappe" } } diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json index bc4c11e35..4b61311a1 100644 --- a/public/locales/ar/common.json +++ b/public/locales/ar/common.json @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "تحقق من الاتصال بـ Plex" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "المتصلة APs", "activeUser": "الأجهزة النشطة", @@ -282,18 +289,14 @@ "approved": "مصدق", "available": "متاح" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", + "completed": "Completed", + "processing": "Processing", "issues": "Open Issues" }, - "overseerr": { - "pending": "Pending", - "processing": "معالجة", - "approved": "Approved", - "available": "Available" - }, "netalertx": { "total": "Total", "connected": "Connected", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json index 307d67a95..516fbc93a 100644 --- a/public/locales/bg/common.json +++ b/public/locales/bg/common.json @@ -184,6 +184,13 @@ "no_active": "Няма активни потоци", "plex_connection_error": "Провери връзка с Plex" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Свързани точки", "activeUser": "Активни устройства", @@ -282,17 +289,13 @@ "approved": "Одобрен", "available": "Наличен" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", - "issues": "Open Issues" - }, - "overseerr": { - "pending": "Pending", + "completed": "Completed", "processing": "Processing", - "approved": "Approved", - "available": "Available" + "issues": "Open Issues" }, "netalertx": { "total": "Total", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json index ad9ba3c3f..43d2b2830 100644 --- a/public/locales/ca/common.json +++ b/public/locales/ca/common.json @@ -61,7 +61,7 @@ "wlan_devices": "Dispositius WLAN", "lan_users": "Usuaris LAN", "wlan_users": "Usuaris WLAN", - "up": "UP", + "up": "ACTIU", "down": "INACTIU", "wait": "Si us plau espera", "empty_data": "Estat del subsistema desconegut" @@ -93,8 +93,8 @@ "http_status": "Estat HTTP", "error": "Error", "response": "Resposta", - "down": "Down", - "up": "Up", + "down": "Inactiu", + "up": "Actiu", "not_available": "No disponible" }, "emby": { @@ -108,21 +108,21 @@ "songs": "Cançons" }, "jellyfin": { - "playing": "Playing", - "transcoding": "Transcoding", - "bitrate": "Bitrate", - "no_active": "No Active Streams", - "movies": "Movies", - "series": "Series", - "episodes": "Episodes", - "songs": "Songs" + "playing": "Reproduïnt", + "transcoding": "Transcodificant", + "bitrate": "Taxa de bits", + "no_active": "Sense reproduccions actives", + "movies": "Pel·lícules", + "series": "Sèries", + "episodes": "Episodis", + "songs": "Cançons" }, "esphome": { - "offline": "Offline", - "offline_alt": "Offline", + "offline": "Desconnectat", + "offline_alt": "Desconnectat", "online": "En línia", "total": "Total", - "unknown": "Unknown" + "unknown": "Desconegut" }, "evcc": { "pv_power": "Producció", @@ -143,7 +143,7 @@ "unread": "Sense llegir" }, "fritzbox": { - "connectionStatus": "Status", + "connectionStatus": "Estat", "connectionStatusUnconfigured": "Sense configurar", "connectionStatusConnecting": "Connectant", "connectionStatusAuthenticating": "Autenticant", @@ -151,11 +151,11 @@ "connectionStatusDisconnecting": "Desconnectant", "connectionStatusDisconnected": "Desconnectat", "connectionStatusConnected": "Connectat", - "uptime": "Uptime", + "uptime": "Temps en funcionament", "maxDown": "Màx. Descàrrega", "maxUp": "Màx. Càrrega", - "down": "Down", - "up": "Up", + "down": "Inactiu", + "up": "Actiu", "received": "Rebuts", "sent": "Enviats", "externalIPAddress": "IP ext.", @@ -178,17 +178,24 @@ "passes": "Aprovat" }, "tautulli": { - "playing": "Playing", - "transcoding": "Transcoding", - "bitrate": "Bitrate", - "no_active": "No Active Streams", + "playing": "Reproduïnt", + "transcoding": "Transcodificant", + "bitrate": "Taxa de bits", + "no_active": "Sense reproduccions actives", "plex_connection_error": "Comprova la connexió de Plex" }, + "tracearr": { + "no_active": "Sense reproduccions actives", + "streams": "Transmissions", + "transcodes": "Transcodificacions", + "directplay": "Reproducció directa", + "bitrate": "Taxa de bits" + }, "omada": { "connectedAp": "AP connectats", "activeUser": "Dispositius actius", "alerts": "Alertes", - "connectedGateways": "Connected gateways", + "connectedGateways": "Pasarel·les connectades", "connectedSwitches": "Conmutadors connectats" }, "nzbget": { @@ -199,24 +206,24 @@ "plex": { "streams": "Transmissions actives", "albums": "Àlbums", - "movies": "Movies", + "movies": "Pel·lícules", "tv": "Sèries" }, "sabnzbd": { - "rate": "Rate", + "rate": "Taxa", "queue": "Cua", "timeleft": "Temps restant" }, "rutorrent": { "active": "Actiu", - "upload": "Upload", - "download": "Download" + "upload": "Pujada", + "download": "Baixada" }, "transmission": { - "download": "Download", - "upload": "Upload", - "leech": "Leech", - "seed": "Seed" + "download": "Baixada", + "upload": "Pujada", + "leech": "Sangonera", + "seed": "Sembrat" }, "qbittorrent": { "download": "Download", @@ -282,18 +289,14 @@ "approved": "Aprovat", "available": "Disponible" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", + "completed": "Completed", + "processing": "Processing", "issues": "Open Issues" }, - "overseerr": { - "pending": "Pending", - "processing": "Processant", - "approved": "Approved", - "available": "Available" - }, "netalertx": { "total": "Total", "connected": "Connected", @@ -323,10 +326,10 @@ "total": "Total" }, "suwayomi": { - "download": "Downloaded", + "download": "Descarregat", "nondownload": "No descarregat", - "read": "Read", - "unread": "Unread", + "read": "Llegits", + "unread": "No llegits", "downloadedread": "Descarregat i llegit", "downloadedunread": "Descarregat i per llegir", "nondownloadedread": "No descarregat i llegit", @@ -347,7 +350,7 @@ "ago": "Fa {{value}}" }, "technitium": { - "totalQueries": "Queries", + "totalQueries": "Consultes", "totalNoError": "Èxits", "totalServerFailure": "Fallades", "totalNxDomain": "Dominis NX", @@ -355,12 +358,12 @@ "totalAuthoritative": "Autoritatiu", "totalRecursive": "Recursiu", "totalCached": "A la memòria cau", - "totalBlocked": "Blocked", + "totalBlocked": "Bloquejats", "totalDropped": "Abandonat", "totalClients": "Clients" }, "tdarr": { - "queue": "Queue", + "queue": "Cua", "processed": "Processat", "errored": "Error", "saved": "Estalviat" @@ -371,13 +374,13 @@ "middleware": "Intermediari" }, "trilium": { - "version": "Version", + "version": "Versió", "notesCount": "Notes", - "dbSize": "Database Size", - "unknown": "Unknown" + "dbSize": "Tamany de la base de dades", + "unknown": "Desconegut" }, "navidrome": { - "nothing_streaming": "No Active Streams", + "nothing_streaming": "Sense reproduccions actives", "please_wait": "Espereu si us plau" }, "npm": { @@ -400,43 +403,43 @@ "prowlarr": { "enableIndexers": "Indexadors", "numberOfGrabs": "Captures", - "numberOfQueries": "Queries", + "numberOfQueries": "Consultes", "numberOfFailGrabs": "Captures fallides", "numberOfFailQueries": "Consultes fallides" }, "jackett": { "configured": "Configurat", - "errored": "Errored" + "errored": "Errors" }, "strelaysrv": { "numActiveSessions": "Sessions", "numConnections": "Connexions", "dataRelayed": "Transmès", - "transferRate": "Rate" + "transferRate": "Taxa" }, "mastodon": { - "user_count": "Users", + "user_count": "Usuaris", "status_count": "Publicacions", "domain_count": "Dominis" }, "medusa": { - "wanted": "Wanted", - "queued": "Queued", - "series": "Series" + "wanted": "Volguts", + "queued": "Encuat", + "series": "Sèries" }, "minecraft": { "players": "Jugadors", "version": "Versió", - "status": "Status", - "up": "Online", - "down": "Offline" + "status": "Estat", + "up": "En línia", + "down": "Fora de línia" }, "miniflux": { "read": "Llegit", - "unread": "Unread" + "unread": "No llegits" }, "authentik": { - "users": "Users", + "users": "Usuaris", "loginsLast24H": "Inicis de sessió (24h)", "failedLoginsLast24H": "Errors d'inici de sessió (24h)" }, @@ -448,19 +451,19 @@ }, "glances": { "cpu": "CPU", - "load": "Load", - "wait": "Please wait", + "load": "Càrrega", + "wait": "Si us plau espera", "temp": "TEMP", "_temp": "Temp", "warn": "Avís", - "uptime": "UP", + "uptime": "ACTIU", "total": "Total", - "free": "Free", - "used": "Used", + "free": "Lliure", + "used": "Utilitzat", "days": "d", "hours": "h", "crit": "Crític", - "read": "Read", + "read": "Lectura", "write": "Escriptura", "gpu": "GPU", "mem": "Mem", @@ -481,25 +484,25 @@ "1-day": "Majorment assolellat", "1-night": "Majorment clar", "2-day": "Parcialment ennuvolat", - "2-night": "Partly Cloudy", + "2-night": "Parcialment ennuvolat", "3-day": "Ennuvolat", - "3-night": "Cloudy", + "3-night": "Ennuvolat", "45-day": "Boirós", - "45-night": "Foggy", - "48-day": "Foggy", - "48-night": "Foggy", + "45-night": "Emboirat", + "48-day": "Boirós", + "48-night": "Emboirat", "51-day": "Ruixats lleugers", - "51-night": "Light Drizzle", + "51-night": "Plugim lleuger", "53-day": "Ruixat", - "53-night": "Drizzle", + "53-night": "Plugim", "55-day": "Ruixat intens", - "55-night": "Heavy Drizzle", + "55-night": "Plovisqueig intens", "56-day": "Lleuger ruixat gelat", - "56-night": "Light Freezing Drizzle", + "56-night": "Lleuger ruixat gelat", "57-day": "Ruixat gelat", - "57-night": "Freezing Drizzle", + "57-night": "Plugim gelat", "61-day": "Pluja lleugera", - "61-night": "Light Rain", + "61-night": "Pluja lleugera", "63-day": "Pluja", "63-night": "Rain", "65-day": "Pluja intensa", @@ -634,12 +637,12 @@ "mikrotik": { "cpuLoad": "Càrrega de CPU", "memoryUsed": "Memoria en ús", - "uptime": "Uptime", + "uptime": "Temps en funcionament", "numberOfLeases": "IPs assignades" }, "xteve": { "streams_all": "Tots els streams", - "streams_active": "Active Streams", + "streams_active": "Transmissions actives", "streams_xepg": "Canals XEPG" }, "opendtu": { @@ -649,7 +652,7 @@ "limit": "Límit" }, "opnsense": { - "cpu": "CPU Load", + "cpu": "Càrrega de CPU", "memory": "Memòria activa", "wanUpload": "Pujada WAN", "wanDownload": "Baixada WAN" @@ -661,21 +664,21 @@ "layers": "Capes" }, "octoprint": { - "printer_state": "Status", + "printer_state": "Estat", "temp_tool": "Temperatura capçal", "temp_bed": "Temperatura llit", "job_completion": "Finalització" }, "cloudflared": { "origin_ip": "IP Origen", - "status": "Status" + "status": "Estat" }, "pfsense": { "load": "Càrrega mitjana", "memory": "Ús Memòria", "wanStatus": "Estat WAN", - "up": "Up", - "down": "Down", + "up": "Actiu", + "down": "Inactiu", "temp": "Temp", "disk": "Ús Disc", "wanIP": "IP WAN" @@ -687,58 +690,58 @@ "memory_usage": "Memòria" }, "immich": { - "users": "Users", + "users": "Usuaris", "photos": "Fotos", - "videos": "Videos", + "videos": "Vídeos", "storage": "Emmagatzematge" }, "uptimekuma": { "up": "Actius", "down": "Caiguts", - "uptime": "Uptime", + "uptime": "Temps en funcionament", "incident": "Incidència", "m": "m" }, "atsumeru": { - "series": "Series", + "series": "Sèries", "archives": "Arxius", "chapters": "Capítols", "categories": "Categories" }, "komga": { "libraries": "Biblioteques", - "series": "Series", - "books": "Books" + "series": "Sèries", + "books": "Llibres" }, "diskstation": { - "days": "Days", - "uptime": "Uptime", - "volumeAvailable": "Available" + "days": "Dies", + "uptime": "Temps en funcionament", + "volumeAvailable": "Disponible" }, "dispatcharr": { - "channels": "Channels", - "streams": "Streams" + "channels": "Canals", + "streams": "Transmissions" }, "mylar": { - "series": "Series", + "series": "Sèries", "issues": "Problemes", - "wanted": "Wanted" + "wanted": "Volguts" }, "photoprism": { - "albums": "Albums", - "photos": "Photos", - "videos": "Videos", + "albums": "Àlbums", + "photos": "Fotos", + "videos": "Vídeos", "people": "Gent" }, "fileflows": { - "queue": "Queue", - "processing": "Processing", - "processed": "Processed", + "queue": "Cua", + "processing": "Processant", + "processed": "Processat", "time": "Temps" }, "firefly": { - "networth": "Net Worth", - "budget": "Budget" + "networth": "Valor Net", + "budget": "Pressupost" }, "grafana": { "dashboards": "Taulells", @@ -755,11 +758,11 @@ "numshares": "Elements compartits" }, "kopia": { - "status": "Status", + "status": "Estat", "size": "Mida", "lastrun": "Darrera execució", "nextrun": "Següent execució", - "failed": "Failed" + "failed": "Error" }, "unmanic": { "active_workers": "Treballadors actius", @@ -776,21 +779,21 @@ "targets_total": "Objectius Totals" }, "gatus": { - "up": "Sites Up", - "down": "Sites Down", - "uptime": "Uptime" + "up": "Actius", + "down": "Caiguts", + "uptime": "Temps en funcionament" }, "ghostfolio": { - "gross_percent_today": "Today", + "gross_percent_today": "Avui", "gross_percent_1y": "Un any", "gross_percent_max": "Sempre", - "net_worth": "Net Worth" + "net_worth": "Valor Net" }, "audiobookshelf": { "podcasts": "Pòdcasts", - "books": "Books", + "books": "Llibres", "podcastsDuration": "Durada", - "booksDuration": "Duration" + "booksDuration": "Durada" }, "homeassistant": { "people_home": "Gent a casa", @@ -799,23 +802,23 @@ }, "whatsupdocker": { "monitoring": "Supervisió", - "updates": "Updates" + "updates": "Actualitzacions" }, "calibreweb": { - "books": "Books", + "books": "Llibres", "authors": "Autors", "categories": "Categories", - "series": "Series" + "series": "Sèries" }, "booklore": { - "libraries": "Libraries", - "books": "Books", - "reading": "Reading", - "finished": "Finished" + "libraries": "Biblioteques", + "books": "Llibres", + "reading": "Llegint", + "finished": "Acabats" }, "jdownloader": { - "downloadCount": "Queue", - "downloadBytesRemaining": "Remaining", + "downloadCount": "Cua", + "downloadBytesRemaining": "Restant", "downloadTotalBytes": "Size", "downloadSpeed": "Speed" }, @@ -987,17 +990,17 @@ }, "frigate": { "cameras": "Càmeres", - "uptime": "Uptime", - "version": "Version" + "uptime": "Temps en funcionament", + "version": "Versió" }, "linkwarden": { "links": "Enllaços", "collections": "Col·leccions", - "tags": "Tags" + "tags": "Etiquetes" }, "zabbix": { "unclassified": "No classificat", - "information": "Information", + "information": "Informació", "warning": "Avís", "average": "Mitjana", "high": "Alt", @@ -1018,22 +1021,22 @@ "tasksInProgress": "Tasques en marxa" }, "headscale": { - "name": "Name", - "address": "Address", - "last_seen": "Last Seen", - "status": "Status", - "online": "Online", - "offline": "Offline" + "name": "Nom", + "address": "Adreça", + "last_seen": "Vist per darrera vegada", + "status": "Estat", + "online": "En línia", + "offline": "Desconnectat" }, "beszel": { - "name": "Name", + "name": "Nom", "systems": "Sistemes", - "up": "Up", - "down": "Down", - "paused": "Paused", - "pending": "Pending", - "status": "Status", - "updated": "Updated", + "up": "Actiu", + "down": "Inactiu", + "paused": "Pausat", + "pending": "Pendent", + "status": "Estat", + "updated": "Actualitzat", "cpu": "CPU", "memory": "MEM", "disk": "Disc", @@ -1043,34 +1046,34 @@ "apps": "Apps", "synced": "Sincronitzats", "outOfSync": "Dessincronitzats", - "healthy": "Healthy", + "healthy": "Sa", "degraded": "Degradats", "progressing": "Progressant", - "missing": "Missing", + "missing": "Falten", "suspended": "Suspesos" }, "spoolman": { - "loading": "Loading" + "loading": "Carregant" }, "gitlab": { "groups": "Grups", - "issues": "Issues", + "issues": "Problemes", "merges": "Merge Requests", "projects": "Projectes" }, "apcups": { - "status": "Status", - "load": "Load", - "bcharge": "Battery Charge", - "timeleft": "Time Left" + "status": "Estat", + "load": "Càrrega", + "bcharge": "Càrrega de la bateria", + "timeleft": "Temps restant" }, "karakeep": { - "bookmarks": "Bookmarks", - "favorites": "Favorites", - "archived": "Archived", - "highlights": "Highlights", - "lists": "Lists", - "tags": "Tags" + "bookmarks": "Marcadors", + "favorites": "Preferits", + "archived": "Arxivats", + "highlights": "Destacats", + "lists": "Llistes", + "tags": "Etiquetes" }, "slskd": { "slskStatus": "Network", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json index fcecbc2d3..d1e67c0f0 100644 --- a/public/locales/cs/common.json +++ b/public/locales/cs/common.json @@ -14,7 +14,7 @@ "date": "{{value, date}}", "relativeDate": "{{value, relativeDate}}", "duration": "{{value, duration}}", - "months": "měs.", + "months": "měs", "days": "d", "hours": "h", "minutes": "m", @@ -39,8 +39,8 @@ "placeholder": "Hledat…" }, "resources": { - "cpu": "CPU", - "mem": "RAM", + "cpu": "Zatížení procesoru", + "mem": "Využití paměti", "total": "Celkem", "free": "Volné", "used": "Využité", @@ -51,7 +51,7 @@ }, "unifi": { "users": "Uživatelé", - "uptime": "Doba spuštění", + "uptime": "Doba provozu", "days": "dní", "wan": "WAN", "lan": "LAN", @@ -61,16 +61,16 @@ "wlan_devices": "Zařízení WLAN", "lan_users": "Uživatelé LAN", "wlan_users": "Uživatelé WLAN", - "up": "UP", + "up": "BĚŽÍ", "down": "NEFUNKČNÍ", - "wait": "Please wait", + "wait": "Čekejte prosím", "empty_data": "Stav podsystému neznámý" }, "docker": { "rx": "RX", "tx": "TX", - "mem": "MEM", - "cpu": "CPU", + "mem": "Využití paměti", + "cpu": "Zatížení procesoru", "running": "Běží", "offline": "Offline", "error": "Chyba", @@ -83,7 +83,7 @@ "partial": "Částečný" }, "ping": { - "error": "Error", + "error": "Chyba", "ping": "Odezva", "down": "Výpadek", "up": "Běží", @@ -91,11 +91,11 @@ }, "siteMonitor": { "http_status": "Stav HTTP", - "error": "Error", + "error": "Chyba", "response": "Odpověď", - "down": "Down", - "up": "Up", - "not_available": "Not Available" + "down": "Výpadek", + "up": "Běží", + "not_available": "Nedostupný" }, "emby": { "playing": "Přehrává", @@ -108,21 +108,21 @@ "songs": "Skladby" }, "jellyfin": { - "playing": "Playing", - "transcoding": "Transcoding", - "bitrate": "Bitrate", - "no_active": "No Active Streams", - "movies": "Movies", - "series": "Series", - "episodes": "Episodes", - "songs": "Songs" + "playing": "Přehrává se", + "transcoding": "Překódovávání", + "bitrate": "Přenosová rychlost", + "no_active": "Žádný aktivní stream", + "movies": "Filmy", + "series": "Seriály", + "episodes": "Epizody", + "songs": "Skladby" }, "esphome": { "offline": "Offline", "offline_alt": "Offline", "online": "Online", - "total": "Total", - "unknown": "Unknown" + "total": "Celkem", + "unknown": "Neznámý" }, "evcc": { "pv_power": "Produkce", @@ -143,7 +143,7 @@ "unread": "Nepřečteno" }, "fritzbox": { - "connectionStatus": "Status", + "connectionStatus": "Stav", "connectionStatusUnconfigured": "Nenastaveno", "connectionStatusConnecting": "Připojuji", "connectionStatusAuthenticating": "Ověřování", @@ -151,11 +151,11 @@ "connectionStatusDisconnecting": "Odpojování", "connectionStatusDisconnected": "Odpojeno", "connectionStatusConnected": "", - "uptime": "Uptime", + "uptime": "Doba provozu", "maxDown": "Max. Down", "maxUp": "Max. Up", - "down": "Down", - "up": "Up", + "down": "Výpadek", + "up": "Běží", "received": "Přijaté", "sent": "Odeslané", "externalIPAddress": "Ext. IP", @@ -178,12 +178,19 @@ "passes": "Průchody" }, "tautulli": { - "playing": "Playing", - "transcoding": "Transcoding", - "bitrate": "Bitrate", - "no_active": "No Active Streams", + "playing": "Přehrává se", + "transcoding": "Překódovávání", + "bitrate": "Přenosová rychlost", + "no_active": "Žádný aktivní stream", "plex_connection_error": "Zkontrolujte připojení Plexu" }, + "tracearr": { + "no_active": "Žádný aktivní stream", + "streams": "Streamy", + "transcodes": "Překódování", + "directplay": "Přímé přehrávání", + "bitrate": "Přenosová rychlost" + }, "omada": { "connectedAp": "Připojené APs", "activeUser": "Aktivní zařízení", @@ -199,33 +206,33 @@ "plex": { "streams": "Aktivní streamy", "albums": "Alba", - "movies": "Movies", + "movies": "Filmy", "tv": "Seriály" }, "sabnzbd": { - "rate": "Rate", + "rate": "Rychlost", "queue": "Fronta", "timeleft": "Zbývající čas" }, "rutorrent": { "active": "Aktivní", - "upload": "Upload", - "download": "Download" + "upload": "Nahrávání", + "download": "Stahování" }, "transmission": { - "download": "Download", - "upload": "Upload", - "leech": "Leech", - "seed": "Seed" + "download": "Stahování", + "upload": "Nahrávání", + "leech": "Leechované", + "seed": "Seedované" }, "qbittorrent": { - "download": "Download", - "upload": "Upload", - "leech": "Leech", - "seed": "Seed" + "download": "Stahování", + "upload": "Nahrávání", + "leech": "Leechované", + "seed": "Seedované" }, "qnap": { - "cpuUsage": "Využití procesoru", + "cpuUsage": "Zatížení procesoru", "memUsage": "Využití paměti", "systemTempC": "Teplota systému", "poolUsage": "Využití fondu", @@ -233,44 +240,44 @@ "invalid": "Neplatné" }, "deluge": { - "download": "Download", - "upload": "Upload", - "leech": "Leech", - "seed": "Seed" + "download": "Stahování", + "upload": "Nahrávání", + "leech": "Leechované", + "seed": "Seedování" }, "develancacheui": { "cachehitbytes": "Byty nalezené v mezipaměti", "cachemissbytes": "Byty nenalezené v mezipaměti" }, "downloadstation": { - "download": "Download", - "upload": "Upload", - "leech": "Leech", - "seed": "Seed" + "download": "Stahování", + "upload": "Nahravání", + "leech": "Leechované", + "seed": "Seedování" }, "sonarr": { - "wanted": "Hledané", + "wanted": "Požadované", "queued": "Ve frontě", - "series": "Series", - "queue": "Queue", - "unknown": "Unknown" + "series": "Seriály", + "queue": "Fronta", + "unknown": "Neznámý" }, "radarr": { - "wanted": "Wanted", + "wanted": "Požadované", "missing": "Chybějící", - "queued": "Queued", - "movies": "Movies", - "queue": "Queue", - "unknown": "Unknown" + "queued": "Ve frontě", + "movies": "Filmy", + "queue": "Fronta", + "unknown": "Neznámý" }, "lidarr": { - "wanted": "Wanted", - "queued": "Queued", + "wanted": "Požadované", + "queued": "Ve frontě", "artists": "Interpreti" }, "readarr": { - "wanted": "Wanted", - "queued": "Queued", + "wanted": "Požadované", + "queued": "Ve frontě", "books": "Knihy" }, "bazarr": { @@ -278,25 +285,21 @@ "missingMovies": "Chybějící filmy" }, "ombi": { - "pending": "Čeká", + "pending": "Čekající", "approved": "Schváleno", "available": "Dostupné" }, - "jellyseerr": { - "pending": "Pending", - "approved": "Approved", - "available": "Available", - "issues": "Open Issues" - }, - "overseerr": { - "pending": "Pending", - "processing": "Zpracovávání", - "approved": "Approved", - "available": "Available" + "seerr": { + "pending": "Čekající", + "approved": "Schválené", + "available": "K dispozici", + "completed": "Dokončené", + "processing": "Zpracovává se", + "issues": "Aktuální problémy" }, "netalertx": { - "total": "Total", - "connected": "Connected", + "total": "Celkem", + "connected": "Připojeno", "new_devices": "", "down_alerts": "Upozornění na výpadek" }, @@ -307,26 +310,26 @@ "gravity": "Gravity" }, "adguard": { - "queries": "Queries", - "blocked": "Blocked", + "queries": "Dotazy", + "blocked": "Blokováno", "filtered": "Filtrováno", "latency": "Odezva" }, "speedtest": { - "upload": "Upload", - "download": "Download", - "ping": "Ping" + "upload": "Nahrávání", + "download": "Stahování", + "ping": "Odezva" }, "portainer": { - "running": "Running", + "running": "Běží", "stopped": "Zastaveno", - "total": "Total" + "total": "Celkem" }, "suwayomi": { - "download": "Downloaded", + "download": "Staženo", "nondownload": "Nestaženo", - "read": "Read", - "unread": "Unread", + "read": "Přečtené", + "unread": "Nepřečtené", "downloadedread": "Staženo a přečteno", "downloadedunread": "Staženo a nepřečteno", "nondownloadedread": "Nestaženo a přečteno", @@ -347,7 +350,7 @@ "ago": "Před {{value}}" }, "technitium": { - "totalQueries": "Queries", + "totalQueries": "Dotazy", "totalNoError": "Úspěšně", "totalServerFailure": "Chyby", "totalNxDomain": "NX domény", @@ -355,12 +358,12 @@ "totalAuthoritative": "Autoritativní", "totalRecursive": "Rekurzivní", "totalCached": "V mezipaměti", - "totalBlocked": "Blocked", + "totalBlocked": "Blokováno", "totalDropped": "Vynecháno", "totalClients": "Klienti" }, "tdarr": { - "queue": "Queue", + "queue": "Fronta", "processed": "Zpracováno", "errored": "Chybné", "saved": "Uložené" @@ -371,19 +374,19 @@ "middleware": "Prostředník" }, "trilium": { - "version": "Version", - "notesCount": "Notes", - "dbSize": "Database Size", - "unknown": "Unknown" + "version": "Verze", + "notesCount": "Poznámky", + "dbSize": "Velikost databáze", + "unknown": "Neznámý" }, "navidrome": { - "nothing_streaming": "No Active Streams", + "nothing_streaming": "Nic se nepřehrává", "please_wait": "Čekejte prosím" }, "npm": { "enabled": "Povoleno", "disabled": "Zakázáno", - "total": "Total" + "total": "Celkem" }, "coinmarketcap": { "configure": "Nakonfigurujte alespoň jednu crypto měnu ke sledování", @@ -394,76 +397,76 @@ }, "gotify": { "apps": "Aplikace", - "clients": "Clients", + "clients": "Klienti", "messages": "Zprávy" }, "prowlarr": { "enableIndexers": "Indexery", "numberOfGrabs": "Uchopení", - "numberOfQueries": "Queries", + "numberOfQueries": "Dotazy", "numberOfFailGrabs": "Neúspěšné uchopení", "numberOfFailQueries": "Neúspěšné dotazy" }, "jackett": { "configured": "Konfigurováno", - "errored": "Errored" + "errored": "Chybné" }, "strelaysrv": { "numActiveSessions": "Sezení", "numConnections": "Připojení", "dataRelayed": "Přenášení", - "transferRate": "Rate" + "transferRate": "Rychlost" }, "mastodon": { - "user_count": "Users", + "user_count": "Uživatelé", "status_count": "Příspěvky", "domain_count": "Domény" }, "medusa": { - "wanted": "Wanted", - "queued": "Queued", - "series": "Series" + "wanted": "Požadované", + "queued": "Ve frontě", + "series": "Seriály" }, "minecraft": { "players": "Hráči", "version": "Verze", - "status": "Status", + "status": "Stav", "up": "Online", "down": "Offline" }, "miniflux": { "read": "Přečteno", - "unread": "Unread" + "unread": "Nepřečteno" }, "authentik": { - "users": "Users", + "users": "Uživatelé", "loginsLast24H": "Příhlášení (24h)", "failedLoginsLast24H": "Neúspěšná přihlášení (24h)" }, "proxmox": { - "mem": "MEM", - "cpu": "CPU", + "mem": "Využití paměti", + "cpu": "Zatížení procesoru", "lxc": "LXC", "vms": "Virtuální Stroje" }, "glances": { - "cpu": "CPU", - "load": "Load", - "wait": "Please wait", - "temp": "TEMP", + "cpu": "Zatížení procesoru", + "load": "Zatížení", + "wait": "Čekejte prosím", + "temp": "TEPLOTA", "_temp": "Teplota", "warn": "Varováni", - "uptime": "UP", - "total": "Total", - "free": "Free", - "used": "Used", + "uptime": "BĚŽÍ", + "total": "Celkem", + "free": "Volné", + "used": "Využité", "days": "d", "hours": "h", "crit": "Kritické", - "read": "Read", + "read": "Přečteno", "write": "Zápis", "gpu": "Grafická karta", - "mem": "Pamět RAM", + "mem": "Využití paměti", "swap": "Swap RAM" }, "quicklaunch": { @@ -472,7 +475,7 @@ "search": "Hledat", "custom": "Vlastní", "visit": "Navštivte", - "url": "URL", + "url": "Odkaz", "searchsuggestion": "Doporučení" }, "wmo": { @@ -481,77 +484,77 @@ "1-day": "Převážně slunečno", "1-night": "Převážně jasno", "2-day": "Polojasno", - "2-night": "Partly Cloudy", + "2-night": "Polojasno", "3-day": "Oblačno", - "3-night": "Cloudy", + "3-night": "Oblačno", "45-day": "Mlha", - "45-night": "Foggy", - "48-day": "Foggy", - "48-night": "Foggy", + "45-night": "Mlha", + "48-day": "Mlha", + "48-night": "Mlha", "51-day": "Lehké mrholení", - "51-night": "Light Drizzle", + "51-night": "Lehké mrholení", "53-day": "Mrholení", - "53-night": "Drizzle", + "53-night": "Mrholení", "55-day": "Silné mrholení", - "55-night": "Heavy Drizzle", + "55-night": "Silné mrholení", "56-day": "Mírné mrznoucí mrholení", - "56-night": "Light Freezing Drizzle", + "56-night": "Mírné mrznoucí mrholení", "57-day": "Mrznoucí mrholení", - "57-night": "Freezing Drizzle", + "57-night": "Mrznoucí mrholení", "61-day": "Slabý déšť", - "61-night": "Light Rain", + "61-night": "Slabý déšť", "63-day": "Déšť", - "63-night": "Rain", + "63-night": "Déšť", "65-day": "Silný déšť", - "65-night": "Heavy Rain", + "65-night": "Silný déšť", "66-day": "Mrznoucí déšť", - "66-night": "Freezing Rain", - "67-day": "Freezing Rain", - "67-night": "Freezing Rain", + "66-night": "Mrznoucí déšť", + "67-day": "Mrznoucí déšť", + "67-night": "Mrznoucí déšť", "71-day": "Slabé sněžení", - "71-night": "Light Snow", + "71-night": "Slabé sněžení", "73-day": "Sněžení", - "73-night": "Snow", + "73-night": "Sněžení", "75-day": "Silné sněžení", - "75-night": "Heavy Snow", + "75-night": "Silné sněžení", "77-day": "Sněhová zrna", - "77-night": "Snow Grains", + "77-night": "Sněhová zrna", "80-day": "Lehké přeháňky", - "80-night": "Light Showers", + "80-night": "Lehké přeháňky", "81-day": "Přeháňky", - "81-night": "Showers", + "81-night": "Přeháňky", "82-day": "Silné přeháňky", - "82-night": "Heavy Showers", + "82-night": "Silné přeháňky", "85-day": "Déšť se sněhem", - "85-night": "Snow Showers", - "86-day": "Snow Showers", - "86-night": "Snow Showers", + "85-night": "Déšť se sněhem", + "86-day": "Déšť se sněhem", + "86-night": "Déšť se sněhem", "95-day": "Bouřka", - "95-night": "Thunderstorm", + "95-night": "Bouřka", "96-day": "Bouřka s krupobitím", - "96-night": "Thunderstorm With Hail", - "99-day": "Thunderstorm With Hail", - "99-night": "Thunderstorm With Hail" + "96-night": "Bouřka s krupobitím", + "99-day": "Bouřka s krupobitím", + "99-night": "Bouřka s krupobitím" }, "homebridge": { "available_update": "Systém", "updates": "Aktualizace", "update_available": "Dostupná", - "up_to_date": "Žádné", + "up_to_date": "Aktuální", "child_bridges": "Podřízené můstky", "child_bridges_status": "{{ok}}/{{total}}", - "up": "Up", - "pending": "Pending", - "down": "Down", + "up": "Běží", + "pending": "Čekající", + "down": "Výpadek", "ok": "Ok" }, "healthchecks": { "new": "Nové", - "up": "Up", + "up": "Běží", "grace": "V období odkladu", - "down": "Down", + "down": "Výpadek", "paused": "Pozastaveno", - "status": "Status", + "status": "Stav", "last_ping": "Poslední ping", "never": "Zatím žádné pingy" }, @@ -561,63 +564,63 @@ "containers_failed": "Selhalo" }, "autobrr": { - "approvedPushes": "Approved", + "approvedPushes": "Schváleno", "rejectedPushes": "Zamítnuto", "filters": "Filtry", - "indexers": "Indexers" + "indexers": "Indexery" }, "tubearchivist": { - "downloads": "Queue", + "downloads": "Fronta", "videos": "Videa", "channels": "Kanály", "playlists": "Playlisty" }, "truenas": { "load": "Zatížení systému", - "uptime": "Uptime", - "alerts": "Alerts" + "uptime": "Doba provozu", + "alerts": "Upozornění" }, "pyload": { "speed": "Rychlost", - "active": "Active", - "queue": "Queue", - "total": "Total" + "active": "Aktivní", + "queue": "Fronta", + "total": "Celkem" }, "gluetun": { "public_ip": "Veřejná IP", "region": "Oblast", "country": "Stát", - "port_forwarded": "Port Forwarded" + "port_forwarded": "Port přesměrován" }, "hdhomerun": { - "channels": "Channels", + "channels": "Kanály", "hd": "HD", "tunerCount": "Tuner", "channelNumber": "Kanál", "channelNetwork": "Síť", "signalStrength": "Síla", "signalQuality": "Kvalita", - "symbolQuality": "Quality", - "networkRate": "Bitrate", + "symbolQuality": "Kvalita", + "networkRate": "Přenosová rychlost", "clientIP": "Klient" }, "scrutiny": { "passed": "Úspěšné", - "failed": "Failed", - "unknown": "Unknown" + "failed": "Selhalo", + "unknown": "Neznámý" }, "paperlessngx": { "inbox": "Doručená pošta", - "total": "Total" + "total": "Celkem" }, "pangolin": { - "orgs": "Orgs", - "sites": "Sites", - "resources": "Resources", - "targets": "Targets", - "traffic": "Traffic", - "in": "In", - "out": "Out" + "orgs": "Organizace", + "sites": "Stránky", + "resources": "Zdroje", + "targets": "Cíle", + "traffic": "Provoz", + "in": "Příchozí", + "out": "Odchozí" }, "peanut": { "battery_charge": "Úroveň baterie", @@ -628,18 +631,18 @@ "low_battery": "Nízký stav baterie" }, "nextdns": { - "wait": "Please Wait", + "wait": "Počkejte, prosím", "no_devices": "Žádná přijatá data zařízení" }, "mikrotik": { "cpuLoad": "Zatížení procesoru", - "memoryUsed": "Použitá paměť", - "uptime": "Uptime", + "memoryUsed": "Využití paměti", + "uptime": "Doba provozu", "numberOfLeases": "Pronájmy" }, "xteve": { "streams_all": "Všechny streamy", - "streams_active": "Active Streams", + "streams_active": "Aktivní streamy", "streams_xepg": "Kanály XEPG" }, "opendtu": { @@ -649,8 +652,8 @@ "limit": "Limit" }, "opnsense": { - "cpu": "CPU Load", - "memory": "Aktivní paměť", + "cpu": "Využití procesoru", + "memory": "Využití paměti", "wanUpload": "Nahrávání WAN", "wanDownload": "Stahování WAN" }, @@ -661,79 +664,79 @@ "layers": "Vrstvy" }, "octoprint": { - "printer_state": "Status", + "printer_state": "Stav", "temp_tool": "Teplota nástroje", "temp_bed": "Teplota postele", "job_completion": "Dokončení" }, "cloudflared": { "origin_ip": "Původní IP", - "status": "Status" + "status": "Stav" }, "pfsense": { "load": "Prům. zatížení", "memory": "Využití paměti", "wanStatus": "Stav WAN", - "up": "Up", - "down": "Down", - "temp": "Temp", + "up": "Běží", + "down": "Výpadek", + "temp": "Teplota", "disk": "Využití disku", "wanIP": "IP WAN" }, "proxmoxbackupserver": { "datastore_usage": "Datové úložiště", "failed_tasks_24h": "Neúspěšné úlohy 24h", - "cpu_usage": "CPU", - "memory_usage": "Paměť" + "cpu_usage": "Zatížení procesoru", + "memory_usage": "Využití paměti" }, "immich": { - "users": "Users", + "users": "Uživatelé", "photos": "Fotografie", - "videos": "Videos", + "videos": "Videa", "storage": "Úložiště" }, "uptimekuma": { - "up": "Stránky Up", - "down": "Stránky Down", - "uptime": "Uptime", + "up": "Weby běží", + "down": "Weby nefungují", + "uptime": "Doba provozu", "incident": "Událost", "m": "m" }, "atsumeru": { - "series": "Series", + "series": "Seriály", "archives": "Archivy", "chapters": "Kapitoly", "categories": "Kategorie" }, "komga": { "libraries": "Knihovny", - "series": "Series", - "books": "Books" + "series": "Série", + "books": "Knihy" }, "diskstation": { - "days": "Days", - "uptime": "Uptime", - "volumeAvailable": "Available" + "days": "Dny", + "uptime": "Doba provozu", + "volumeAvailable": "Dostupné" }, "dispatcharr": { - "channels": "Channels", - "streams": "Streams" + "channels": "Kanály", + "streams": "Streamy" }, "mylar": { - "series": "Series", + "series": "Série", "issues": "Problémy", - "wanted": "Wanted" + "wanted": "Požadované" }, "photoprism": { - "albums": "Albums", - "photos": "Photos", - "videos": "Videos", + "albums": "Alba", + "photos": "Fotografie", + "videos": "Videa", "people": "Lidé" }, "fileflows": { - "queue": "Queue", - "processing": "Processing", - "processed": "Processed", + "queue": "Fronta", + "processing": "Zpracovává se", + "processed": "Zpracováno", "time": "Čas" }, "firefly": { @@ -755,11 +758,11 @@ "numshares": "Sdílené položky" }, "kopia": { - "status": "Status", + "status": "Stav", "size": "Velikost", "lastrun": "Poslední spuštění", "nextrun": "Další spuštění", - "failed": "Failed" + "failed": "Selhalo" }, "unmanic": { "active_workers": "Aktivní workers", @@ -776,21 +779,21 @@ "targets_total": "Cíle celkem" }, "gatus": { - "up": "Sites Up", - "down": "Sites Down", - "uptime": "Uptime" + "up": "Weby běží", + "down": "Weby nefungují", + "uptime": "Doba provozu" }, "ghostfolio": { - "gross_percent_today": "Today", + "gross_percent_today": "Dnes", "gross_percent_1y": "Jeden rok", "gross_percent_max": "Za celou dobu", - "net_worth": "Net Worth" + "net_worth": "Čisté jmění" }, "audiobookshelf": { "podcasts": "Podcasty", - "books": "Books", + "books": "Knihy", "podcastsDuration": "Trvání", - "booksDuration": "Duration" + "booksDuration": "Délka" }, "homeassistant": { "people_home": "Lidí doma", @@ -799,54 +802,54 @@ }, "whatsupdocker": { "monitoring": "Sledování", - "updates": "Updates" + "updates": "Aktualizace" }, "calibreweb": { - "books": "Books", + "books": "Knihy", "authors": "Autoři", - "categories": "Categories", - "series": "Series" + "categories": "Kategorie", + "series": "Série" }, "booklore": { - "libraries": "Libraries", - "books": "Books", - "reading": "Reading", - "finished": "Finished" + "libraries": "Knihovny", + "books": "Knihy", + "reading": "Čtené", + "finished": "Přečtené" }, "jdownloader": { - "downloadCount": "Queue", - "downloadBytesRemaining": "Remaining", - "downloadTotalBytes": "Size", - "downloadSpeed": "Speed" + "downloadCount": "Fronta", + "downloadBytesRemaining": "Zbývá", + "downloadTotalBytes": "Velikost", + "downloadSpeed": "Rychlost" }, "kavita": { - "seriesCount": "Series", - "totalFiles": "Files" + "seriesCount": "Série", + "totalFiles": "Soubory" }, "azuredevops": { "result": "Výsledek", - "status": "Status", + "status": "Stav", "buildId": "ID sestavení", "succeeded": "Úspěšně", "notStarted": "Nezahájeno", - "failed": "Failed", + "failed": "Selhalo", "canceled": "Zrušeno", "inProgress": "Probíhá", "totalPrs": "Celkem PR", "myPrs": "Moje PR", - "approved": "Approved" + "approved": "Schváleno" }, "gamedig": { - "status": "Status", + "status": "Stav", "online": "Online", "offline": "Offline", - "name": "Jméno", + "name": "Název", "map": "Mapa", "currentPlayers": "Počet hráčů", - "players": "Players", + "players": "Hráči", "maxPlayers": "Maximální počet hráčů", "bots": "Boti", - "ping": "Ping" + "ping": "Odezva" }, "urbackup": { "ok": "Ok", @@ -856,39 +859,39 @@ }, "mealie": { "recipes": "Recepty", - "users": "Users", - "categories": "Categories", + "users": "Uživatelé", + "categories": "Kategorie", "tags": "Štítky" }, "openmediavault": { "downloading": "Stahování", - "total": "Total", - "running": "Running", - "stopped": "Stopped", - "passed": "Passed", - "failed": "Failed" + "total": "Celkem", + "running": "Běží", + "stopped": "Zastaveno", + "passed": "Úspěšně", + "failed": "Selhalo" }, "openwrt": { - "uptime": "Uptime", + "uptime": "Doba provozu", "cpuLoad": "Prům. zatížení procesoru (5m)", - "up": "Up", - "down": "Down", + "up": "Běží", + "down": "Výpadek", "bytesTx": "Přeneseno", - "bytesRx": "Received" + "bytesRx": "Přijato" }, "uptimerobot": { - "status": "Status", - "uptime": "Uptime", + "status": "Stav", + "uptime": "Doba provozu", "lastDown": "Poslední výpadek", "downDuration": "Trvání výpadku", - "sitesUp": "Sites Up", - "sitesDown": "Sites Down", - "paused": "Paused", + "sitesUp": "Weby běží", + "sitesDown": "Weby nefungují", + "paused": "Pozastaveno", "notyetchecked": "Zatím nezkontrolováno", - "up": "Up", + "up": "Běží", "seemsdown": "Zdá se nedostupný", - "down": "Down", - "unknown": "Unknown" + "down": "Výpadek", + "unknown": "Neznámý" }, "calendar": { "inCinemas": "V kinech", @@ -896,7 +899,7 @@ "digitalRelease": "Digitální vydání", "noEventsToday": "Pro dnešek žádné události!", "noEventsFound": "Nemáte žádné události", - "errorWhenLoadingData": "Error when loading calendar data" + "errorWhenLoadingData": "Chyba při načítání dat kalendáře" }, "romm": { "platforms": "Platformy", @@ -907,10 +910,10 @@ "totalfilesize": "Celková velikost" }, "mailcow": { - "domains": "Domains", + "domains": "Domény", "mailboxes": "E-mailové schránky", "mails": "Maily", - "storage": "Storage" + "storage": "Úložiště" }, "netdata": { "warnings": "Upozornění", @@ -919,12 +922,12 @@ "plantit": { "events": "Události", "plants": "Rostliny", - "photos": "Photos", + "photos": "Fotografie", "species": "Druhy" }, "gitea": { "notifications": "Oznámení", - "issues": "Issues", + "issues": "Problémy", "pulls": "Pull Requests", "repositories": "Repozitáře" }, @@ -940,13 +943,13 @@ "galleries": "Galerie", "performers": "Herci", "studios": "Studia", - "movies": "Movies", - "tags": "Tags", + "movies": "Filmy", + "tags": "Štítky", "oCount": "Počet O" }, "tandoor": { - "users": "Users", - "recipes": "Recipes", + "users": "Uživatelé", + "recipes": "Recepty", "keywords": "Klíčová slova" }, "homebox": { @@ -954,18 +957,18 @@ "totalWithWarranty": "Se zárukou", "locations": "Lokality", "labels": "Štítky", - "users": "Users", + "users": "Uživatelé", "totalValue": "Celková hodnota" }, "crowdsec": { - "alerts": "Alerts", + "alerts": "Upozornění", "bans": "Bany" }, "wgeasy": { - "connected": "Connected", - "enabled": "Enabled", - "disabled": "Disabled", - "total": "Total" + "connected": "Připojeno", + "enabled": "Povoleno", + "disabled": "Zakázáno", + "total": "Celkem" }, "swagdashboard": { "proxied": "Přes proxy", @@ -974,9 +977,9 @@ "banned": "Zabanován" }, "myspeed": { - "ping": "Ping", - "download": "Download", - "upload": "Upload" + "ping": "Odezva", + "download": "Stahování", + "upload": "Nahrávání" }, "stocks": { "stocks": "Akcie", @@ -987,17 +990,17 @@ }, "frigate": { "cameras": "Kamery", - "uptime": "Uptime", - "version": "Version" + "uptime": "Doba provozu", + "version": "Verze" }, "linkwarden": { "links": "Linky", "collections": "Sbírky", - "tags": "Tags" + "tags": "Štítky" }, "zabbix": { "unclassified": "Neklasifikováno", - "information": "Information", + "information": "Informace", "warning": "Upozornění", "average": "Průměr", "high": "Vysoký", @@ -1018,24 +1021,24 @@ "tasksInProgress": "Probíhají úkoly" }, "headscale": { - "name": "Name", - "address": "Address", - "last_seen": "Last Seen", - "status": "Status", + "name": "Název", + "address": "Adresa", + "last_seen": "Naposledy aktivní", + "status": "Stav", "online": "Online", "offline": "Offline" }, "beszel": { - "name": "Name", + "name": "Název", "systems": "Systém", - "up": "Up", - "down": "Down", - "paused": "Paused", - "pending": "Pending", - "status": "Status", - "updated": "Updated", - "cpu": "CPU", - "memory": "MEM", + "up": "Běží", + "down": "Výpadek", + "paused": "Pozastaveno", + "pending": "Čekající", + "status": "Stav", + "updated": "Aktualizováno", + "cpu": "Zatížení procesoru", + "memory": "Využití paměti", "disk": "Disk", "network": "Síť" }, @@ -1043,26 +1046,26 @@ "apps": "Aplikace", "synced": "Synchronizováno", "outOfSync": "Nesynchronizováno", - "healthy": "Healthy", + "healthy": "Zdravý", "degraded": "Degradováno", "progressing": "Probíhá", - "missing": "Missing", + "missing": "Chybějící", "suspended": "Pozastaveno" }, "spoolman": { - "loading": "Loading" + "loading": "Načítání" }, "gitlab": { "groups": "Skupiny", - "issues": "Issues", + "issues": "Problémy", "merges": "Žádosti o sloučení", "projects": "Projekty" }, "apcups": { - "status": "Status", - "load": "Load", - "bcharge": "Battery Charge", - "timeleft": "Time Left" + "status": "Stav", + "load": "Zatížení", + "bcharge": "Úroveň baterie", + "timeleft": "Zbývající čas" }, "karakeep": { "bookmarks": "Záložky", @@ -1070,106 +1073,112 @@ "archived": "Archivováno", "highlights": "Zvýraznění", "lists": "Seznamy", - "tags": "Tags" + "tags": "Štítky" }, "slskd": { - "slskStatus": "Network", - "connected": "Connected", - "disconnected": "Disconnected", + "slskStatus": "Síť", + "connected": "Připojeno", + "disconnected": "Odpojeno", "updateStatus": "Aktualizace", - "update_yes": "Available", - "update_no": "Up to Date", + "update_yes": "Dostupné", + "update_no": "Aktuální", "downloads": "Stažení", "uploads": "Nahrávání", - "sharedFiles": "Files" + "sharedFiles": "Soubory" }, "jellystat": { - "songs": "Songs", - "movies": "Movies", - "episodes": "Episodes", - "other": "Other" + "songs": "Skladby", + "movies": "Filmy", + "episodes": "Epizody", + "other": "Ostatní" }, "checkmk": { - "serviceErrors": "Service issues", - "hostErrors": "Host issues" + "serviceErrors": "Problémy se službami", + "hostErrors": "Problémy zařízení" }, "komodo": { - "total": "Total", - "running": "Running", - "stopped": "Stopped", - "down": "Down", - "unhealthy": "Unhealthy", - "unknown": "Unknown", - "servers": "Servers", - "stacks": "Stacks", - "containers": "Containers" + "total": "Celkem", + "running": "Běží", + "stopped": "Zastaveno", + "down": "Výpadek", + "unhealthy": "Nezdravý", + "unknown": "Neznámý", + "servers": "Servery", + "stacks": "Stacky", + "containers": "Kontejnery" }, "filebrowser": { - "available": "Available", - "used": "Used", - "total": "Total" + "available": "Dostupné", + "used": "Využito", + "total": "Celkem" }, "wallos": { - "activeSubscriptions": "Subscriptions", - "thisMonthlyCost": "This Month", - "nextMonthlyCost": "Next Month", - "previousMonthlyCost": "Prev. Month", - "nextRenewingSubscription": "Next Payment" + "activeSubscriptions": "Předplatná", + "thisMonthlyCost": "Tento měsíc", + "nextMonthlyCost": "Příští měsíc", + "previousMonthlyCost": "Předchozí měsíc", + "nextRenewingSubscription": "Další platba" }, "unraid": { - "STARTED": "Started", - "STOPPED": "Stopped", - "NEW_ARRAY": "New Array", - "RECON_DISK": "Reconstructing Disk", - "DISABLE_DISK": "Disk Disabled", - "SWAP_DSBL": "Swap Disable", - "INVALID_EXPANSION": "Invalid Expansion", - "PARITY_NOT_BIGGEST": "Parity Not Biggest", - "TOO_MANY_MISSING_DISKS": "Too Many Missing Disks", - "NEW_DISK_TOO_SMALL": "New Disk Too Small", - "NO_DATA_DISKS": "No Data Disks", - "notifications": "Notifications", - "status": "Status", - "cpu": "CPU", - "memoryUsed": "Memory Used", - "memoryAvailable": "Memory Available", - "arrayUsed": "Array Used", - "arrayFree": "Array Free", - "poolUsed": "{{pool}} Used", - "poolFree": "{{pool}} Free" + "STARTED": "Spuštěno", + "STOPPED": "Zastaveno", + "NEW_ARRAY": "Nové pole", + "RECON_DISK": "Rekonstrukce disku", + "DISABLE_DISK": "Disk deaktivován", + "SWAP_DSBL": "Swap vypnut", + "INVALID_EXPANSION": "Neplatné rozšíření", + "PARITY_NOT_BIGGEST": "Paritní disk není největší", + "TOO_MANY_MISSING_DISKS": "Příliš mnoho chybějících disků", + "NEW_DISK_TOO_SMALL": "Nový disk je příliš malý", + "NO_DATA_DISKS": "Žádné datové disky", + "notifications": "Upozornění", + "status": "Stav", + "cpu": "Zatížení procesoru", + "memoryUsed": "Využití paměti", + "memoryAvailable": "Volná paměť", + "arrayUsed": "Využito pole", + "arrayFree": "Volné místo", + "poolUsed": "Využito v {{pool}}", + "poolFree": "Volné v {{pool}}" }, "backrest": { - "num_plans": "Plans", - "num_success_30": "Successes", - "num_failure_30": "Failures", - "num_success_latest": "Succeeding", - "num_failure_latest": "Failing", - "bytes_added_30": "Bytes Added" + "num_plans": "Plány", + "num_success_30": "Úspěšně", + "num_failure_30": "Neúspěšně", + "num_success_latest": "Úspěšně", + "num_failure_latest": "Neúspěšně", + "bytes_added_30": "Přidané bajty" }, "yourspotify": { - "songs": "Songs", - "time": "Time", - "artists": "Artists" + "songs": "Skladby", + "time": "Délka", + "artists": "Umělci" }, "arcane": { - "containers": "Containers", - "images": "Images", - "image_updates": "Image Updates", - "images_unused": "Unused", - "environment_required": "Environment ID Required" + "containers": "Kontejnery", + "images": "Obrazy", + "image_updates": "Obrazy k aktualizaci", + "images_unused": "Nepoužívané obrazy", + "environment_required": "Požadováno ID prostředí" }, "dockhand": { - "running": "Running", - "stopped": "Stopped", - "cpu": "CPU", - "memory": "Memory", - "images": "Images", - "volumes": "Volumes", - "events_today": "Events Today", - "pending_updates": "Pending Updates", - "stacks": "Stacks", - "paused": "Paused", - "total": "Total", - "environment_not_found": "Environment Not Found" + "running": "Běží", + "stopped": "Zastaveno", + "cpu": "Zatížení procesoru", + "memory": "Využití paměti", + "images": "Obrazy", + "volumes": "Úložiště", + "events_today": "Dnešní události", + "pending_updates": "Čekající aktualizace", + "stacks": "Stacky", + "paused": "Pozastaveno", + "total": "Celkem", + "environment_not_found": "Prostředí nenalezeno" + }, + "sparkyfitness": { + "eaten": "Snězeno", + "burned": "Spáleno", + "remaining": "Zbývá", + "steps": "Kroky" } } diff --git a/public/locales/da/common.json b/public/locales/da/common.json index d5420fa94..0c920cbdb 100644 --- a/public/locales/da/common.json +++ b/public/locales/da/common.json @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "Tjek Plex-forbindelse" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Forbundne APs", "activeUser": "Aktive enheder", @@ -282,18 +289,14 @@ "approved": "Godkendt", "available": "Tilgængelig" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", + "completed": "Completed", + "processing": "Processing", "issues": "Open Issues" }, - "overseerr": { - "pending": "Pending", - "processing": "Behandler", - "approved": "Approved", - "available": "Available" - }, "netalertx": { "total": "Total", "connected": "Connected", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/de/common.json b/public/locales/de/common.json index b9154a3cd..c5fb9a67c 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -108,7 +108,7 @@ "songs": "Songs" }, "jellyfin": { - "playing": "Playing", + "playing": "Wiedergabe", "transcoding": "Transkodierung", "bitrate": "Bitrate", "no_active": "Keine aktiven Streams", @@ -184,6 +184,13 @@ "no_active": "Keine aktiven Streams", "plex_connection_error": "Prüfe Plex-Verbindung" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Verbundene APs", "activeUser": "Aktive Geräte", @@ -282,17 +289,13 @@ "approved": "Genehmigt", "available": "Verfügbar" }, - "jellyseerr": { - "pending": "Wartend", - "approved": "Genehmigt", - "available": "Verfügbar", - "issues": "Offene Issues" - }, - "overseerr": { - "pending": "Wartend", - "processing": "Wird verarbeitet", - "approved": "Genehmigt", - "available": "Verfügbar" + "seerr": { + "pending": "Pending", + "approved": "Approved", + "available": "Available", + "completed": "Completed", + "processing": "Processing", + "issues": "Open Issues" }, "netalertx": { "total": "Total", @@ -1159,17 +1162,23 @@ "environment_required": "Environment ID Required" }, "dockhand": { - "running": "Running", - "stopped": "Stopped", + "running": "Wird ausgeführt", + "stopped": "Gestoppt", "cpu": "CPU", - "memory": "Memory", + "memory": "RAM", "images": "Images", "volumes": "Volumes", "events_today": "Heutige Ereignisse", "pending_updates": "Ausstehende Updates", "stacks": "Stacks", "paused": "Pausiert", - "total": "Total", + "total": "Gesamt", "environment_not_found": "Umgebung nicht gefunden" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/el/common.json b/public/locales/el/common.json index b43444a79..f6f64577f 100644 --- a/public/locales/el/common.json +++ b/public/locales/el/common.json @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "Έλεγχος Σύνδεσης με Plex" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Συνδεδεμένα APs", "activeUser": "Ενεργές συσκευές", @@ -282,18 +289,14 @@ "approved": "Εγκρίθηκε", "available": "Διαθέσιμο" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", + "completed": "Completed", + "processing": "Processing", "issues": "Open Issues" }, - "overseerr": { - "pending": "Pending", - "processing": "Σε επεξεργασία", - "approved": "Approved", - "available": "Available" - }, "netalertx": { "total": "Total", "connected": "Connected", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/eo/common.json b/public/locales/eo/common.json index 0a6a427c4..2da22914a 100644 --- a/public/locales/eo/common.json +++ b/public/locales/eo/common.json @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "Check Plex Connection" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Connected APs", "activeUser": "Active devices", @@ -282,17 +289,13 @@ "approved": "Aprobita", "available": "Havebla" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", - "issues": "Open Issues" - }, - "overseerr": { - "pending": "Pending", + "completed": "Completed", "processing": "Processing", - "approved": "Approved", - "available": "Available" + "issues": "Open Issues" }, "netalertx": { "total": "Total", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/es/common.json b/public/locales/es/common.json index 205d94dc4..6bd5fb263 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -184,6 +184,13 @@ "no_active": "Sin transmisiones activas", "plex_connection_error": "Comprueba la conexión a Plex" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "AP conectados", "activeUser": "Dispositivos activos", @@ -282,17 +289,13 @@ "approved": "Aprobado", "available": "Disponible" }, - "jellyseerr": { - "pending": "Pendiente", - "approved": "Aprobado", - "available": "Disponible", - "issues": "Issues Abiertos" - }, - "overseerr": { - "pending": "Pendiente", - "processing": "Procesando", - "approved": "Aprobado", - "available": "Disponible" + "seerr": { + "pending": "Pending", + "approved": "Approved", + "available": "Available", + "completed": "Completed", + "processing": "Processing", + "issues": "Open Issues" }, "netalertx": { "total": "Total", @@ -1171,5 +1174,11 @@ "paused": "En Pausa", "total": "Total", "environment_not_found": "Entorno no encontrado" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/eu/common.json b/public/locales/eu/common.json index e4cb4ca17..2d2be6637 100644 --- a/public/locales/eu/common.json +++ b/public/locales/eu/common.json @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "Check Plex Connection" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Connected APs", "activeUser": "Active devices", @@ -282,17 +289,13 @@ "approved": "Approved", "available": "Available" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", - "issues": "Open Issues" - }, - "overseerr": { - "pending": "Pending", + "completed": "Completed", "processing": "Processing", - "approved": "Approved", - "available": "Available" + "issues": "Open Issues" }, "netalertx": { "total": "Total", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json index f201e63eb..42434aec7 100644 --- a/public/locales/fi/common.json +++ b/public/locales/fi/common.json @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "Check Plex Connection" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Connected APs", "activeUser": "Active devices", @@ -282,17 +289,13 @@ "approved": "Hyväksytty", "available": "Saatavilla" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", - "issues": "Open Issues" - }, - "overseerr": { - "pending": "Pending", + "completed": "Completed", "processing": "Processing", - "approved": "Approved", - "available": "Available" + "issues": "Open Issues" }, "netalertx": { "total": "Total", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index 62576cf57..fa5279a01 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -108,8 +108,8 @@ "songs": "Morceaux" }, "jellyfin": { - "playing": "Playing", - "transcoding": "Transcoding", + "playing": "En cours", + "transcoding": "En cours d'encodage", "bitrate": "Bitrate", "no_active": "No Active Streams", "movies": "Movies", @@ -184,6 +184,13 @@ "no_active": "Aucune lecture en cours", "plex_connection_error": "Vérifier la connexion à Plex" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "APs connectées", "activeUser": "Périphériques actifs", @@ -282,17 +289,13 @@ "approved": "Approuvé", "available": "Disponible" }, - "jellyseerr": { - "pending": "En attente", - "approved": "Approuvé", - "available": "Disponible", - "issues": "Problèmes non résolus" - }, - "overseerr": { - "pending": "En attente", - "processing": "En cours de traitement", - "approved": "Approuvé", - "available": "Disponible" + "seerr": { + "pending": "Pending", + "approved": "Approved", + "available": "Available", + "completed": "Completed", + "processing": "Processing", + "issues": "Open Issues" }, "netalertx": { "total": "Total", @@ -613,9 +616,9 @@ "pangolin": { "orgs": "Orgs", "sites": "Sites", - "resources": "Resources", - "targets": "Targets", - "traffic": "Traffic", + "resources": "Ressources", + "targets": "Cibles", + "traffic": "Trafique", "in": "In", "out": "Out" }, @@ -712,7 +715,7 @@ }, "diskstation": { "days": "Jours", - "uptime": "Disponibilité", + "uptime": "Démarré depuis", "volumeAvailable": "Disponible" }, "dispatcharr": { @@ -743,7 +746,7 @@ "grafana": { "dashboards": "Tableau de bord", "datasources": "Sources données", - "totalalerts": "Total alertes", + "totalalerts": "Alertes totales", "alertstriggered": "Alertes déclenchées" }, "nextcloud": { @@ -942,7 +945,7 @@ "studios": "Studios", "movies": "Films", "tags": "Tags", - "oCount": "0 Compte" + "oCount": "O-mètre" }, "tandoor": { "users": "Utilisateurs", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/he/common.json b/public/locales/he/common.json index d82aacebd..2897e0ddd 100644 --- a/public/locales/he/common.json +++ b/public/locales/he/common.json @@ -184,6 +184,13 @@ "no_active": "אין הזרמות פעילות", "plex_connection_error": "בדוק חיבור ל-Plex" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "נקודות גישה מחוברות", "activeUser": "מכשירים פעילים", @@ -282,18 +289,14 @@ "approved": "מאושר", "available": "זמין" }, - "jellyseerr": { - "pending": "ממתין לאישור", - "approved": "מאושר", - "available": "זמין", + "seerr": { + "pending": "Pending", + "approved": "Approved", + "available": "Available", + "completed": "Completed", + "processing": "Processing", "issues": "Open Issues" }, - "overseerr": { - "pending": "ממתין לאישור", - "processing": "מעבד", - "approved": "מאושר", - "available": "זמין" - }, "netalertx": { "total": "סה\"כ", "connected": "מחובר", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json index edc7090dc..45f0ffc21 100644 --- a/public/locales/hi/common.json +++ b/public/locales/hi/common.json @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "Check Plex Connection" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Connected APs", "activeUser": "Active devices", @@ -282,17 +289,13 @@ "approved": "Approved", "available": "Available" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", - "issues": "Open Issues" - }, - "overseerr": { - "pending": "Pending", + "completed": "Completed", "processing": "Processing", - "approved": "Approved", - "available": "Available" + "issues": "Open Issues" }, "netalertx": { "total": "Total", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json index 339fa21d3..d6b8147d9 100644 --- a/public/locales/hr/common.json +++ b/public/locales/hr/common.json @@ -108,14 +108,14 @@ "songs": "Pjesme" }, "jellyfin": { - "playing": "Playing", - "transcoding": "Transcoding", - "bitrate": "Bitrate", + "playing": "Reprodukcija u tijeku", + "transcoding": "Prekodiranje", + "bitrate": "Stopa bitova", "no_active": "No Active Streams", - "movies": "Movies", - "series": "Series", - "episodes": "Episodes", - "songs": "Songs" + "movies": "Filmovi", + "series": "Serije", + "episodes": "Epizode", + "songs": "Pjesme" }, "esphome": { "offline": "Offline", @@ -184,6 +184,13 @@ "no_active": "Nema aktivnih prijenosa", "plex_connection_error": "Provjeri Plex vezu" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Prekodiranja", + "directplay": "Izravna reprodukcija", + "bitrate": "Stopa bitova" + }, "omada": { "connectedAp": "Povezani AP-ovi", "activeUser": "Aktivni uređaji", @@ -282,17 +289,13 @@ "approved": "Odobreno", "available": "Dostupno" }, - "jellyseerr": { - "pending": "U tijeku", + "seerr": { + "pending": "Na čekanju", "approved": "Odobreno", "available": "Dostupno", - "issues": "Otvoreni problemi" - }, - "overseerr": { - "pending": "U tijeku", + "completed": "Dovršeno", "processing": "Obrada", - "approved": "Odobreno", - "available": "Dostupno" + "issues": "Otvoreni problemi" }, "netalertx": { "total": "Ukupno", @@ -543,7 +546,7 @@ "up": "Aktivno", "pending": "U tijeku", "down": "Neaktivno", - "ok": "Ok" + "ok": "U redu" }, "healthchecks": { "new": "Novo", @@ -611,11 +614,11 @@ "total": "Ukupno" }, "pangolin": { - "orgs": "Orgs", - "sites": "Sites", - "resources": "Resources", - "targets": "Targets", - "traffic": "Traffic", + "orgs": "Organizacije", + "sites": "Web-stranice", + "resources": "Resursi", + "targets": "Ciljevi", + "traffic": "Promet", "in": "In", "out": "Out" }, @@ -716,7 +719,7 @@ "volumeAvailable": "Dostupno" }, "dispatcharr": { - "channels": "Channels", + "channels": "Kanali", "streams": "Streams" }, "mylar": { @@ -808,10 +811,10 @@ "series": "Serije" }, "booklore": { - "libraries": "Libraries", - "books": "Books", - "reading": "Reading", - "finished": "Finished" + "libraries": "Knjižnice", + "books": "Knjige", + "reading": "Čitanje", + "finished": "Završeno" }, "jdownloader": { "downloadCount": "Red čekanja", @@ -1152,24 +1155,30 @@ "artists": "Izvođači" }, "arcane": { - "containers": "Containers", - "images": "Images", - "image_updates": "Image Updates", - "images_unused": "Unused", - "environment_required": "Environment ID Required" + "containers": "Kontejneri", + "images": "Slike", + "image_updates": "Aktualizirane slike", + "images_unused": "Nekorišteno", + "environment_required": "ID okruženja se mora navesti" }, "dockhand": { - "running": "Running", - "stopped": "Stopped", + "running": "Pokreće se", + "stopped": "Zaustavljeno", "cpu": "CPU", - "memory": "Memory", - "images": "Images", - "volumes": "Volumes", - "events_today": "Events Today", - "pending_updates": "Pending Updates", + "memory": "Memorija", + "images": "Slike", + "volumes": "Jedinice memorije", + "events_today": "Događanja danas", + "pending_updates": "Aktualiziranja na čekanju", "stacks": "Stacks", - "paused": "Paused", - "total": "Total", - "environment_not_found": "Environment Not Found" + "paused": "Pauzirano", + "total": "Ukupno", + "environment_not_found": "Okruženje nije pronađeno" + }, + "sparkyfitness": { + "eaten": "Pojedeno", + "burned": "Potrošeno", + "remaining": "Preostalo", + "steps": "Koraci" } } diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json index 2dcc50335..9191e2d02 100644 --- a/public/locales/hu/common.json +++ b/public/locales/hu/common.json @@ -184,6 +184,13 @@ "no_active": "Nincs aktív lejátszás", "plex_connection_error": "Plex kapcsolat ellenőrzése" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Csatlakoztatott AP-k", "activeUser": "Aktív eszközök", @@ -282,17 +289,13 @@ "approved": "Engedélyezett", "available": "Elérhető" }, - "jellyseerr": { - "pending": "Függőben lévő", - "approved": "Jóváhagyott", - "available": "Elérhető", - "issues": "Nyitott problémák" - }, - "overseerr": { - "pending": "Függőben lévő", - "processing": "Feldolgozás", - "approved": "Jóváhagyott", - "available": "Elérhető" + "seerr": { + "pending": "Pending", + "approved": "Approved", + "available": "Available", + "completed": "Completed", + "processing": "Processing", + "issues": "Open Issues" }, "netalertx": { "total": "Összes", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/id/common.json b/public/locales/id/common.json index 1bd393112..12a1b1061 100644 --- a/public/locales/id/common.json +++ b/public/locales/id/common.json @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "Cek Koneksi ke Plex" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "AP Tersambung", "activeUser": "Perangakat yang Aktif", @@ -282,18 +289,14 @@ "approved": "Tersetujui", "available": "Tersedia" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", + "completed": "Completed", + "processing": "Processing", "issues": "Open Issues" }, - "overseerr": { - "pending": "Pending", - "processing": "Memproses", - "approved": "Approved", - "available": "Available" - }, "netalertx": { "total": "Total", "connected": "Connected", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/it/common.json b/public/locales/it/common.json index 5283dbce7..992e2aee7 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -113,7 +113,7 @@ "bitrate": "Bitrate", "no_active": "No Active Streams", "movies": "Movies", - "series": "Series", + "series": "Serie", "episodes": "Episodes", "songs": "Songs" }, @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "Controllare la connessione a Plex" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "AP Connessi", "activeUser": "Dispositivi attivi", @@ -282,18 +289,14 @@ "approved": "Approvati", "available": "Disponibili" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", + "completed": "Completed", + "processing": "Processing", "issues": "Open Issues" }, - "overseerr": { - "pending": "Pending", - "processing": "In lavorazione", - "approved": "Approved", - "available": "Available" - }, "netalertx": { "total": "Total", "connected": "Connected", @@ -318,7 +321,7 @@ "ping": "Ping" }, "portainer": { - "running": "Running", + "running": "In esecuzione", "stopped": "Fermati", "total": "Total" }, @@ -713,7 +716,7 @@ "diskstation": { "days": "Days", "uptime": "Uptime", - "volumeAvailable": "Available" + "volumeAvailable": "Disponibili" }, "dispatcharr": { "channels": "Channels", @@ -1084,9 +1087,9 @@ "sharedFiles": "Files" }, "jellystat": { - "songs": "Songs", - "movies": "Movies", - "episodes": "Episodes", + "songs": "Brani", + "movies": "Film", + "episodes": "Episodi", "other": "Altro" }, "checkmk": { @@ -1110,11 +1113,11 @@ "total": "Total" }, "wallos": { - "activeSubscriptions": "Subscriptions", - "thisMonthlyCost": "This Month", - "nextMonthlyCost": "Next Month", + "activeSubscriptions": "Abbonamenti", + "thisMonthlyCost": "Questo Mese", + "nextMonthlyCost": "Mese Prossimo", "previousMonthlyCost": "Prev. Month", - "nextRenewingSubscription": "Next Payment" + "nextRenewingSubscription": "" }, "unraid": { "STARTED": "Started", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json index 4ae4e2f11..787598995 100644 --- a/public/locales/ja/common.json +++ b/public/locales/ja/common.json @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "Plex接続の確認" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "接続されたAP", "activeUser": "アクティブデバイス", @@ -282,18 +289,14 @@ "approved": "承認済", "available": "利用可" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", + "completed": "Completed", + "processing": "Processing", "issues": "Open Issues" }, - "overseerr": { - "pending": "Pending", - "processing": "処理中", - "approved": "Approved", - "available": "Available" - }, "netalertx": { "total": "Total", "connected": "Connected", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/ko/common.json b/public/locales/ko/common.json index a558ced64..060cb0996 100644 --- a/public/locales/ko/common.json +++ b/public/locales/ko/common.json @@ -184,6 +184,13 @@ "no_active": "활성 스트림 없음", "plex_connection_error": "Plex 연결 확인" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "연결된 AP", "activeUser": "활성 장치", @@ -282,17 +289,13 @@ "approved": "승인됨", "available": "이용 가능" }, - "jellyseerr": { - "pending": "대기 중", - "approved": "승인됨", - "available": "이용 가능", - "issues": "열린 이슈" - }, - "overseerr": { - "pending": "대기 중", - "processing": "처리 중", - "approved": "승인됨", - "available": "이용 가능" + "seerr": { + "pending": "Pending", + "approved": "Approved", + "available": "Available", + "completed": "Completed", + "processing": "Processing", + "issues": "Open Issues" }, "netalertx": { "total": "전체", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/lv/common.json b/public/locales/lv/common.json index edf4f8a5b..411b95249 100644 --- a/public/locales/lv/common.json +++ b/public/locales/lv/common.json @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "Check Plex Connection" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Savienotie piekļuves punkti", "activeUser": "Aktīvās ierīces", @@ -282,17 +289,13 @@ "approved": "Approved", "available": "Available" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", - "issues": "Open Issues" - }, - "overseerr": { - "pending": "Pending", + "completed": "Completed", "processing": "Processing", - "approved": "Approved", - "available": "Available" + "issues": "Open Issues" }, "netalertx": { "total": "Total", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json index a1c0befff..48af4fc1b 100644 --- a/public/locales/ms/common.json +++ b/public/locales/ms/common.json @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "Check Plex Connection" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Connected APs", "activeUser": "Peranti aktif", @@ -282,17 +289,13 @@ "approved": "Lulus", "available": "Sudah Ada" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", - "issues": "Open Issues" - }, - "overseerr": { - "pending": "Pending", + "completed": "Completed", "processing": "Processing", - "approved": "Approved", - "available": "Available" + "issues": "Open Issues" }, "netalertx": { "total": "Total", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index 465cee63b..b5bcee4ae 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -184,6 +184,13 @@ "no_active": "Geen Actieve Streams", "plex_connection_error": "Controleer Plex Connectie" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Verbonden APs", "activeUser": "Actieve apparaten", @@ -282,18 +289,14 @@ "approved": "Goedgekeurd", "available": "Beschikbaar" }, - "jellyseerr": { - "pending": "In afwachting", - "approved": "Goedgekeurd", - "available": "Beschikbaar", + "seerr": { + "pending": "Pending", + "approved": "Approved", + "available": "Available", + "completed": "Completed", + "processing": "Processing", "issues": "Open Issues" }, - "overseerr": { - "pending": "In afwachting", - "processing": "Verwerken", - "approved": "Goedgekeurd", - "available": "Beschikbaar" - }, "netalertx": { "total": "Totaal", "connected": "Verbonden", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/no/common.json b/public/locales/no/common.json index 9da706f5f..a07e6ff23 100644 --- a/public/locales/no/common.json +++ b/public/locales/no/common.json @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "Kontroller Plex tilkoblingen" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Tilkoblede AP'er", "activeUser": "Aktive enheter", @@ -282,18 +289,14 @@ "approved": "Godkjent", "available": "Tilgjengelig" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", + "completed": "Completed", + "processing": "Processing", "issues": "Open Issues" }, - "overseerr": { - "pending": "Pending", - "processing": "Behandler", - "approved": "Approved", - "available": "Available" - }, "netalertx": { "total": "Total", "connected": "Connected", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index f9d30462e..e11b48569 100644 --- a/public/locales/pl/common.json +++ b/public/locales/pl/common.json @@ -108,14 +108,14 @@ "songs": "Piosenki" }, "jellyfin": { - "playing": "Playing", - "transcoding": "Transcoding", + "playing": "Odtwarza", + "transcoding": "Transkoduje", "bitrate": "Bitrate", - "no_active": "No Active Streams", - "movies": "Movies", - "series": "Series", - "episodes": "Episodes", - "songs": "Songs" + "no_active": "Brak aktywnych strumieni", + "movies": "Filmy", + "series": "Seriale", + "episodes": "Odcinki", + "songs": "Piosenki" }, "esphome": { "offline": "Offline", @@ -184,6 +184,13 @@ "no_active": "Brak aktywnych strumieni", "plex_connection_error": "Sprawdź połączenie z Plex" }, + "tracearr": { + "no_active": "Brak aktywnych strumieni", + "streams": "Strumienie", + "transcodes": "Transkodowania", + "directplay": "Odtwarzanie bezpośrednie", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Połączone punkty dostępowe", "activeUser": "Aktywne urządzenia", @@ -282,17 +289,13 @@ "approved": "Zaakceptowane", "available": "Dostępne" }, - "jellyseerr": { + "seerr": { "pending": "Oczekujące", "approved": "Zaakceptowane", "available": "Dostępne", - "issues": "Otwarte zgłoszenia" - }, - "overseerr": { - "pending": "Oczekujące", + "completed": "Ukończone", "processing": "Przetwarzane", - "approved": "Zaakceptowane", - "available": "Dostępne" + "issues": "Otwarte zgłoszenia" }, "netalertx": { "total": "Razem", @@ -716,8 +719,8 @@ "volumeAvailable": "Dostępne" }, "dispatcharr": { - "channels": "Channels", - "streams": "Streams" + "channels": "Kanały", + "streams": "Strumienie" }, "mylar": { "series": "Seriale", @@ -1152,11 +1155,11 @@ "artists": "Wykonawcy" }, "arcane": { - "containers": "Containers", - "images": "Images", - "image_updates": "Image Updates", - "images_unused": "Unused", - "environment_required": "Environment ID Required" + "containers": "Kontenery", + "images": "Obrazy", + "image_updates": "Aktualizacje obrazów", + "images_unused": "Nieużywane", + "environment_required": "Wymagane ID środowiska" }, "dockhand": { "running": "Działające", @@ -1171,5 +1174,11 @@ "paused": "Wstrzymane", "total": "Razem", "environment_not_found": "Środowisko nie znalezione" + }, + "sparkyfitness": { + "eaten": "Zjedzone", + "burned": "Spalone", + "remaining": "Pozostało", + "steps": "Kroki" } } diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index ca0eb743d..0275558fd 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "Verifique a conexão do Plex" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "APs Ligados", "activeUser": "Dispositivos activos", @@ -282,18 +289,14 @@ "approved": "Aprovado", "available": "Disponível" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", + "completed": "Completed", + "processing": "Processing", "issues": "Open Issues" }, - "overseerr": { - "pending": "Pending", - "processing": "A Processar", - "approved": "Approved", - "available": "Available" - }, "netalertx": { "total": "Total", "connected": "Connected", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/pt_BR/common.json b/public/locales/pt_BR/common.json index 39a4a6d30..67669eb18 100644 --- a/public/locales/pt_BR/common.json +++ b/public/locales/pt_BR/common.json @@ -184,6 +184,13 @@ "no_active": "Sem Streams Ativos", "plex_connection_error": "Verifique a conexão do Plex" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "APs Ligados", "activeUser": "Dispositivos ativos", @@ -282,17 +289,13 @@ "approved": "Aprovada", "available": "Disponível" }, - "jellyseerr": { - "pending": "Pendente", - "approved": "Aprovado", - "available": "Disponível", - "issues": "Incidentes Abertos" - }, - "overseerr": { - "pending": "Pendente", - "processing": "Processando", - "approved": "Aprovado", - "available": "Disponível" + "seerr": { + "pending": "Pending", + "approved": "Approved", + "available": "Available", + "completed": "Completed", + "processing": "Processing", + "issues": "Open Issues" }, "netalertx": { "total": "Total", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json index 554fb4b4d..813dcc45e 100644 --- a/public/locales/ro/common.json +++ b/public/locales/ro/common.json @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "Check Plex Connection" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Connected APs", "activeUser": "Dispozitive active", @@ -282,18 +289,14 @@ "approved": "Aprobate", "available": "Disponibile" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", + "completed": "Completed", + "processing": "Processing", "issues": "Open Issues" }, - "overseerr": { - "pending": "Pending", - "processing": "Procesare", - "approved": "Approved", - "available": "Available" - }, "netalertx": { "total": "Total", "connected": "Connected", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index f812ba7d1..0fa464fc7 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -108,14 +108,14 @@ "songs": "Песни" }, "jellyfin": { - "playing": "Playing", - "transcoding": "Transcoding", - "bitrate": "Bitrate", - "no_active": "No Active Streams", - "movies": "Movies", - "series": "Series", - "episodes": "Episodes", - "songs": "Songs" + "playing": "Воспроизводится", + "transcoding": "Перекодирование", + "bitrate": "Битрейт", + "no_active": "Нет активных потоков", + "movies": "Фильмы", + "series": "Сериалы", + "episodes": "Эпизоды", + "songs": "Песни" }, "esphome": { "offline": "Не в сети", @@ -184,6 +184,13 @@ "no_active": "Нет активных стримов", "plex_connection_error": "Проверка соединения Plex" }, + "tracearr": { + "no_active": "Нет активных потоков", + "streams": "Потоки", + "transcodes": "Transcodes", + "directplay": "Прямое воспроизведение", + "bitrate": "Битрейт" + }, "omada": { "connectedAp": "Подключенные точки доступа", "activeUser": "Активные устройства", @@ -282,17 +289,13 @@ "approved": "Одобрено", "available": "Доступно" }, - "jellyseerr": { - "pending": "Ожидают", + "seerr": { + "pending": "Pending", "approved": "Одобрено", "available": "Доступно", - "issues": "Open Issues" - }, - "overseerr": { - "pending": "Ожидают", - "processing": "В процессе", - "approved": "Одобрено", - "available": "Доступно" + "completed": "Завершено", + "processing": "Обработка", + "issues": "Открытые задачи" }, "netalertx": { "total": "Всего", @@ -1130,8 +1133,8 @@ "NO_DATA_DISKS": "No Data Disks", "notifications": "Уведомления", "status": "Статус", - "cpu": "CPU", - "memoryUsed": "Memory Used", + "cpu": "ЦП", + "memoryUsed": "Использовано ОЗУ", "memoryAvailable": "Memory Available", "arrayUsed": "Array Used", "arrayFree": "Array Free", @@ -1141,14 +1144,14 @@ "backrest": { "num_plans": "Plans", "num_success_30": "Successes", - "num_failure_30": "Failures", + "num_failure_30": "Ошибки", "num_success_latest": "Succeeding", "num_failure_latest": "Failing", "bytes_added_30": "Bytes Added" }, "yourspotify": { "songs": "Songs", - "time": "Time", + "time": "Время", "artists": "Artists" }, "arcane": { @@ -1170,6 +1173,12 @@ "stacks": "Stacks", "paused": "Paused", "total": "Total", - "environment_not_found": "Environment Not Found" + "environment_not_found": "Среда не найдена" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/sk/common.json b/public/locales/sk/common.json index 4ccbe2342..917d70923 100644 --- a/public/locales/sk/common.json +++ b/public/locales/sk/common.json @@ -93,7 +93,7 @@ "http_status": "HTTP stavový kód", "error": "Chyba", "response": "Odpoveď", - "down": "Down", + "down": "Nedostupné", "up": "Beží", "not_available": "Nedostupné" }, @@ -108,18 +108,18 @@ "songs": "Skladby" }, "jellyfin": { - "playing": "Playing", - "transcoding": "Transcoding", - "bitrate": "Bitrate", - "no_active": "No Active Streams", - "movies": "Movies", - "series": "Series", - "episodes": "Episodes", - "songs": "Songs" + "playing": "Prehráva sa", + "transcoding": "Prebieha prekódovanie", + "bitrate": "Prenosová rýchlosť", + "no_active": "Žiadne aktívne vysielania", + "movies": "Filmov", + "series": "Seriálov", + "episodes": "Epizód", + "songs": "Skladieb" }, "esphome": { - "offline": "Offline", - "offline_alt": "Offline", + "offline": "Nedostupné", + "offline_alt": "Nedostupné", "online": "Online", "total": "Celkom", "unknown": "Neznáme" @@ -154,7 +154,7 @@ "uptime": "Dostupnosť", "maxDown": "Max. sťahovanie", "maxUp": "Max. nahrávanie", - "down": "Down", + "down": "Nedostupné", "up": "Beží", "received": "Prijaté", "sent": "Odoslané", @@ -178,12 +178,19 @@ "passes": "Odvysielané" }, "tautulli": { - "playing": "Playing", + "playing": "Prehráva sa", "transcoding": "Transcoding", - "bitrate": "Bitrate", + "bitrate": "Prenosová rýchlosť", "no_active": "No Active Streams", "plex_connection_error": "Skontroluj spojenie s Plex" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Prenosová rýchlosť" + }, "omada": { "connectedAp": "Pripojené prístupové body", "activeUser": "Aktívne zariadenia", @@ -282,18 +289,14 @@ "approved": "Schválené", "available": "Dostupné" }, - "jellyseerr": { - "pending": "Čakajúce", - "approved": "Schválené", - "available": "Dostupné", + "seerr": { + "pending": "Pending", + "approved": "Approved", + "available": "Available", + "completed": "Completed", + "processing": "Processing", "issues": "Open Issues" }, - "overseerr": { - "pending": "Čakajúce", - "processing": "Spracovávané", - "approved": "Schválené", - "available": "Dostupné" - }, "netalertx": { "total": "Celkom", "connected": "Pripojené", @@ -429,7 +432,7 @@ "version": "Verzia", "status": "Stav", "up": "Online", - "down": "Offline" + "down": "Nedostupné" }, "miniflux": { "read": "Prečítané", @@ -450,7 +453,7 @@ "cpu": "CPU", "load": "Záťaž", "wait": "Čakajte, prosím", - "temp": "TEMP", + "temp": "TEPL", "_temp": "Teplota", "warn": "Upozornení", "uptime": "BEŽÍ", @@ -491,13 +494,13 @@ "51-day": "Mierne mrholenie", "51-night": "Slabé mrholenie", "53-day": "Mrholenie", - "53-night": "Drizzle", + "53-night": "Mrholenie", "55-day": "Silné mrholenie", "55-night": "Silné mrholenie", "56-day": "Mierne mrazivé mrholenie", - "56-night": "Light Freezing Drizzle", + "56-night": "Jemné mrznúce mrholenie", "57-day": "Mrazivé mrholenie", - "57-night": "Freezing Drizzle", + "57-night": "Mrznúce mrholenie", "61-day": "Slabý dážď", "61-night": "Slabý dážď", "63-day": "Dážď", @@ -542,14 +545,14 @@ "child_bridges_status": "{{ok}}/{{total}}", "up": "Beží", "pending": "Čakajúce", - "down": "Down", + "down": "Nedostupné", "ok": "Ok" }, "healthchecks": { "new": "Nový", "up": "Beží", "grace": "V dodatočnej lehote", - "down": "Down", + "down": "Nedostupné", "paused": "Pozastavené", "status": "Stav", "last_ping": "Poslendný ping", @@ -675,7 +678,7 @@ "memory": "Využitie pamäte", "wanStatus": "Stav WAN", "up": "Beží", - "down": "Down", + "down": "Nedostupné", "temp": "Temp", "disk": "Využitie disku", "wanIP": "IP adresa WAN" @@ -776,8 +779,8 @@ "targets_total": "Cieľov spolu" }, "gatus": { - "up": "Sites Up", - "down": "Sites Down", + "up": "Dostupné stránky", + "down": "Nedostupné stránky", "uptime": "Dostupnosť" }, "ghostfolio": { @@ -799,7 +802,7 @@ }, "whatsupdocker": { "monitoring": "Monitoring", - "updates": "Updates" + "updates": "Aktualizácie" }, "calibreweb": { "books": "Books", @@ -872,7 +875,7 @@ "uptime": "Dostupnosť", "cpuLoad": "Záťaž CPU priem. (5m)", "up": "Beží", - "down": "Down", + "down": "Nedostupné", "bytesTx": "Prenesených", "bytesRx": "Prijaté" }, @@ -881,13 +884,13 @@ "uptime": "Dostupnosť", "lastDown": "Posledný čas nedostupnosti", "downDuration": "Trvanie nedostupnosti", - "sitesUp": "Sites Up", - "sitesDown": "Sites Down", + "sitesUp": "Dostupné stránky", + "sitesDown": "Nedostupné stránky", "paused": "Pozastavené", "notyetchecked": "Neskontrolované", "up": "Beží", "seemsdown": "Javí sa nedostupný", - "down": "Down", + "down": "Nedostupné", "unknown": "Neznáme" }, "calendar": { @@ -1023,17 +1026,17 @@ "last_seen": "Last Seen", "status": "Stav", "online": "Online", - "offline": "Offline" + "offline": "Nedostupné" }, "beszel": { "name": "Name", "systems": "Systems", "up": "Beží", - "down": "Down", + "down": "Nedostupné", "paused": "Pozastavené", "pending": "Čakajúce", "status": "Stav", - "updated": "Updated", + "updated": "Aktualizované", "cpu": "CPU", "memory": "RAM", "disk": "Disk", @@ -1078,7 +1081,7 @@ "disconnected": "Odpojené", "updateStatus": "Update", "update_yes": "Dostupné", - "update_no": "Up to Date", + "update_no": "Aktuálne", "downloads": "Downloads", "uploads": "Uploads", "sharedFiles": "Files" @@ -1097,7 +1100,7 @@ "total": "Celkom", "running": "Beží", "stopped": "Zastavené", - "down": "Down", + "down": "Nedostupné", "unhealthy": "Nezdravý", "unknown": "Neznáme", "servers": "Servery", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/sl/common.json b/public/locales/sl/common.json index a189ddaab..bcc63b1b7 100644 --- a/public/locales/sl/common.json +++ b/public/locales/sl/common.json @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "Preveri Plex povezavo" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Povezanih AP", "activeUser": "Aktivne naprave", @@ -282,18 +289,14 @@ "approved": "Odobreno", "available": "Na voljo" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", + "completed": "Completed", + "processing": "Processing", "issues": "Open Issues" }, - "overseerr": { - "pending": "Pending", - "processing": "Procesiram", - "approved": "Approved", - "available": "Available" - }, "netalertx": { "total": "Total", "connected": "Connected", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json index 9c74f2c90..110217cd3 100644 --- a/public/locales/sr/common.json +++ b/public/locales/sr/common.json @@ -108,14 +108,14 @@ "songs": "Песме" }, "jellyfin": { - "playing": "Playing", - "transcoding": "Transcoding", - "bitrate": "Bitrate", - "no_active": "No Active Streams", - "movies": "Movies", - "series": "Series", - "episodes": "Episodes", - "songs": "Songs" + "playing": "Репродукција", + "transcoding": "Транскодирање", + "bitrate": "Проток", + "no_active": "Нема активних стримова", + "movies": "Филмови", + "series": "Серије", + "episodes": "Епизоде", + "songs": "Песме" }, "esphome": { "offline": "Није на мрежи", @@ -184,6 +184,13 @@ "no_active": "Нема активних стримова", "plex_connection_error": "Провери везу са Plex-ом" }, + "tracearr": { + "no_active": "Нема активних стримова", + "streams": "Стримови", + "transcodes": "Транскодирање", + "directplay": "Директно репродуковање", + "bitrate": "Проток" + }, "omada": { "connectedAp": "Повезани АПи", "activeUser": "Активни уређаји", @@ -282,17 +289,13 @@ "approved": "Одобрено", "available": "Доступно" }, - "jellyseerr": { + "seerr": { "pending": "На чекању", "approved": "Одобрено", "available": "Доступно", - "issues": "Отворених питања" - }, - "overseerr": { - "pending": "На чекању", + "completed": "Завршено", "processing": "Обрада", - "approved": "Одобрено", - "available": "Доступно" + "issues": "Отворених питања" }, "netalertx": { "total": "Укупно", @@ -543,7 +546,7 @@ "up": "Горе", "pending": "На чекању", "down": "Доле", - "ok": "Ok" + "ok": "Ок" }, "healthchecks": { "new": "Сада", @@ -716,8 +719,8 @@ "volumeAvailable": "Доступно" }, "dispatcharr": { - "channels": "Channels", - "streams": "Streams" + "channels": "Канали", + "streams": "Стримови" }, "mylar": { "series": "Серије", @@ -808,10 +811,10 @@ "series": "Серије" }, "booklore": { - "libraries": "Libraries", - "books": "Books", - "reading": "Reading", - "finished": "Finished" + "libraries": "Библиотеке", + "books": "Књиге", + "reading": "Читање", + "finished": "Завршено" }, "jdownloader": { "downloadCount": "Ред", @@ -1152,24 +1155,30 @@ "artists": "Извођачи" }, "arcane": { - "containers": "Containers", - "images": "Images", - "image_updates": "Image Updates", - "images_unused": "Unused", - "environment_required": "Environment ID Required" + "containers": "Контејнера", + "images": "Слике", + "image_updates": "Ажурирања слика", + "images_unused": "Неискоришћено", + "environment_required": "ИД окружења је обавезан" }, "dockhand": { - "running": "Running", - "stopped": "Stopped", - "cpu": "CPU", - "memory": "Memory", - "images": "Images", - "volumes": "Volumes", - "events_today": "Events Today", - "pending_updates": "Pending Updates", - "stacks": "Stacks", - "paused": "Paused", - "total": "Total", - "environment_not_found": "Environment Not Found" + "running": "Покренуто", + "stopped": "Заустављено", + "cpu": "Процесор", + "memory": "Меморија", + "images": "Слике", + "volumes": "Јачине звука", + "events_today": "Данашњи догађаји", + "pending_updates": "Ажурирања на чекању", + "stacks": "Стекови", + "paused": "Паузирано", + "total": "Укупно", + "environment_not_found": "Окружење није пронађено" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index 2f98999bb..ef92e38b0 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "Check Plex Connection" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Connected APs", "activeUser": "Active devices", @@ -282,17 +289,13 @@ "approved": "Godkända", "available": "Tillgänglig" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", - "issues": "Open Issues" - }, - "overseerr": { - "pending": "Pending", + "completed": "Completed", "processing": "Processing", - "approved": "Approved", - "available": "Available" + "issues": "Open Issues" }, "netalertx": { "total": "Total", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/te/common.json b/public/locales/te/common.json index 2cf762e6e..f027f0f5a 100644 --- a/public/locales/te/common.json +++ b/public/locales/te/common.json @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "Check Plex Connection" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Connected APs", "activeUser": "Active devices", @@ -282,17 +289,13 @@ "approved": "ఆమోదించబడింది", "available": "అందుబాటులో వున్నవి" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", - "issues": "Open Issues" - }, - "overseerr": { - "pending": "Pending", + "completed": "Completed", "processing": "Processing", - "approved": "Approved", - "available": "Available" + "issues": "Open Issues" }, "netalertx": { "total": "Total", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/th/common.json b/public/locales/th/common.json index 699cbe5f7..b38d9db4a 100644 --- a/public/locales/th/common.json +++ b/public/locales/th/common.json @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "Check Plex Connection" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Connected APs", "activeUser": "Active devices", @@ -282,17 +289,13 @@ "approved": "Approved", "available": "Available" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", - "issues": "Open Issues" - }, - "overseerr": { - "pending": "Pending", + "completed": "Completed", "processing": "Processing", - "approved": "Approved", - "available": "Available" + "issues": "Open Issues" }, "netalertx": { "total": "Total", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json index 35488ae92..a48822f63 100644 --- a/public/locales/tr/common.json +++ b/public/locales/tr/common.json @@ -40,7 +40,7 @@ }, "resources": { "cpu": "İşlemci", - "mem": "MEM", + "mem": "Bellek", "total": "Toplam", "free": "Boş", "used": "Kullanımda", @@ -80,7 +80,7 @@ "unhealthy": "Sağlıksız", "not_found": "Bulunamadı", "exited": "Kapandı", - "partial": "Parçalı" + "partial": "Kısmi" }, "ping": { "error": "Hata", @@ -93,29 +93,29 @@ "http_status": "HTTPS durumu", "error": "Hata", "response": "Yanıt", - "down": "Çalışmayan", + "down": "İndirme", "up": "Çalışıyor", "not_available": "Uygun değil" }, "emby": { "playing": "Oynatılıyor", "transcoding": "Dönüştürülüyor", - "bitrate": "Bit Oranı", + "bitrate": "Bit Hızı", "no_active": "Etkin akış yok", - "movies": "Filmler", - "series": "Diziler", - "episodes": "Bölümler", - "songs": "Şarkılar" + "movies": "Film", + "series": "Dizi", + "episodes": "Bölüm", + "songs": "Şarkı" }, "jellyfin": { - "playing": "Playing", - "transcoding": "Transcoding", - "bitrate": "Bitrate", - "no_active": "No Active Streams", - "movies": "Movies", - "series": "Series", - "episodes": "Episodes", - "songs": "Songs" + "playing": "Oynatılıyor", + "transcoding": "Dönüştürülüyor", + "bitrate": "Bit Hızı", + "no_active": "Aktif Yayın Yok", + "movies": "Film", + "series": "Dizi", + "episodes": "Bölüm", + "songs": "Şarkı" }, "esphome": { "offline": "Çevrimdışı", @@ -135,8 +135,8 @@ "flood": { "download": "İndirme", "upload": "Yükleme", - "leech": "Tüketici", - "seed": "Sağlayıcı" + "leech": "İndirilen", + "seed": "Gönderilen" }, "freshrss": { "subscriptions": "Abonelikler", @@ -152,10 +152,10 @@ "connectionStatusDisconnected": "Bağlı değil", "connectionStatusConnected": "Bağlı", "uptime": "Çalışma Süresi", - "maxDown": "Max. Indirme", - "maxUp": "Max. Gönderme", - "down": "Çalışmayan", - "up": "Çalışıyor", + "maxDown": "Maks. İndirme", + "maxUp": "Maks. Gönderme", + "down": "İndirme", + "up": "Yükleme", "received": "Alınan", "sent": "Gönderilen", "externalIPAddress": "Harici IP", @@ -180,10 +180,17 @@ "tautulli": { "playing": "Oynatılıyor", "transcoding": "Dönüştürülüyor", - "bitrate": "Bit Oranı", + "bitrate": "Bit Hızı", "no_active": "Etkin akış yok", "plex_connection_error": "Plex Bağlantısı Kontrol Ediliyor" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Bağlı AP'ler", "activeUser": "Etkin aygıtlar", @@ -199,7 +206,7 @@ "plex": { "streams": "Etkin akış", "albums": "Albümler", - "movies": "Filmler", + "movies": "Film", "tv": "TV Showları" }, "sabnzbd": { @@ -209,20 +216,20 @@ }, "rutorrent": { "active": "Etkin", - "upload": "Yükleme", + "upload": "Gönderme", "download": "İndirme" }, "transmission": { "download": "İndirme", - "upload": "Yükleme", - "leech": "Tüketici", - "seed": "Sağlayıcı" + "upload": "Gönderme", + "leech": "İndirilen", + "seed": "Gönderilen" }, "qbittorrent": { "download": "İndirme", - "upload": "Yükleme", - "leech": "Tüketici", - "seed": "Sağlayıcı" + "upload": "Gönderme", + "leech": "İndirilen", + "seed": "Gönderilen" }, "qnap": { "cpuUsage": "İşlemci Kullanımı", @@ -234,9 +241,9 @@ }, "deluge": { "download": "İndirme", - "upload": "Yükleme", - "leech": "Leech", - "seed": "Seed" + "upload": "Gönderme", + "leech": "İndirilen", + "seed": "Gönderilen" }, "develancacheui": { "cachehitbytes": "Önbellek İsabetli Byte", @@ -244,14 +251,14 @@ }, "downloadstation": { "download": "İndirme", - "upload": "Yükleme", - "leech": "Tüketici", - "seed": "Sağlayıcı" + "upload": "Gönderme", + "leech": "İndirilen", + "seed": "Gönderilen" }, "sonarr": { "wanted": "İstendi", "queued": "Kuyrukta", - "series": "Seriler", + "series": "Diziler", "queue": "Kuyruk", "unknown": "Bilinmeyen" }, @@ -259,7 +266,7 @@ "wanted": "İstendi", "missing": "Eksik", "queued": "Kuyrukta", - "movies": "Filmler", + "movies": "Film", "queue": "Kuyruk", "unknown": "Bilinmeyen" }, @@ -282,17 +289,13 @@ "approved": "Onaylı", "available": "Kullanılabilir" }, - "jellyseerr": { - "pending": "Bekleyen", - "approved": "Onaylı", - "available": "Uygun", - "issues": "Open Issues" - }, - "overseerr": { + "seerr": { "pending": "Pending", - "processing": "İşleniyor", - "approved": "Onaylı", - "available": "Uygun" + "approved": "Approved", + "available": "Available", + "completed": "Completed", + "processing": "Processing", + "issues": "Open Issues" }, "netalertx": { "total": "Toplam", @@ -307,7 +310,7 @@ "gravity": "Gravity" }, "adguard": { - "queries": "Queries", + "queries": "Sorgular", "blocked": "Engellenen", "filtered": "Filtrelendi", "latency": "Gecikme" @@ -448,9 +451,9 @@ }, "glances": { "cpu": "İşlemci", - "load": "Load", + "load": "Yük", "wait": "Lütfen bekleyin", - "temp": "TEMP", + "temp": "Sıcaklık", "_temp": "Sıcaklık", "warn": "Uyarı", "uptime": "ÇALIŞIYOR", @@ -463,7 +466,7 @@ "read": "Okundu", "write": "Yazma", "gpu": "GPU", - "mem": "Hafıza", + "mem": "Bellek", "swap": "Swap" }, "quicklaunch": { @@ -543,7 +546,7 @@ "up": "Çalışıyor", "pending": "Bekleyen", "down": "Çalışmayan", - "ok": "Ok" + "ok": "Tamam" }, "healthchecks": { "new": "Yeni", @@ -598,7 +601,7 @@ "signalStrength": "Sağlamlık", "signalQuality": "Kalite", "symbolQuality": "Kalite", - "networkRate": "Bit Oranı", + "networkRate": "Bit Hızı", "clientIP": "Alıcı" }, "scrutiny": { @@ -611,13 +614,13 @@ "total": "Toplam" }, "pangolin": { - "orgs": "Orgs", - "sites": "Sites", - "resources": "Resources", - "targets": "Targets", - "traffic": "Traffic", - "in": "In", - "out": "Out" + "orgs": "Kuruluşlar", + "sites": "Siteler", + "resources": "Kaynaklar", + "targets": "Hedefler", + "traffic": "Trafik", + "in": "Gelen", + "out": "Giden" }, "peanut": { "battery_charge": "Pil Yüzdesi", @@ -676,7 +679,7 @@ "wanStatus": "WAN Durumu", "up": "Çalışıyor", "down": "Çalışmayan", - "temp": "Temp", + "temp": "Sıcaklık", "disk": "Disk Kullanımı", "wanIP": "WAN IP" }, @@ -697,7 +700,7 @@ "down": "Çalışmayan site", "uptime": "Çalışma süresi", "incident": "Olay", - "m": "m" + "m": "dk" }, "atsumeru": { "series": "Diziler", @@ -716,8 +719,8 @@ "volumeAvailable": "Uygun" }, "dispatcharr": { - "channels": "Channels", - "streams": "Streams" + "channels": "Kanallar", + "streams": "Akışlar" }, "mylar": { "series": "Diziler", @@ -771,12 +774,12 @@ "nodes": "Düğümler" }, "prometheus": { - "targets_up": "Hedef Çalışıyor", + "targets_up": "Çalışan Hedef", "targets_down": "Çalışmayan hedef", "targets_total": "Toplam Hedef" }, "gatus": { - "up": "Sites Up", + "up": "Çalışan Siteler", "down": "Çalışmayan site", "uptime": "Çalışma süresi" }, @@ -784,7 +787,7 @@ "gross_percent_today": "Bugün", "gross_percent_1y": "Bir yıl", "gross_percent_max": "Tüm zaman", - "net_worth": "Net Worth" + "net_worth": "Net Değer" }, "audiobookshelf": { "podcasts": "Podcast", @@ -805,13 +808,13 @@ "books": "Kitaplar", "authors": "Yazarlar", "categories": "Kategoriler", - "series": "Seriler" + "series": "Diziler" }, "booklore": { - "libraries": "Libraries", - "books": "Books", - "reading": "Reading", - "finished": "Finished" + "libraries": "Kütüphaneler", + "books": "Kitaplar", + "reading": "Okunuyor", + "finished": "Bitti" }, "jdownloader": { "downloadCount": "Kuyruk", @@ -820,7 +823,7 @@ "downloadSpeed": "Hız" }, "kavita": { - "seriesCount": "Seriler", + "seriesCount": "Diziler", "totalFiles": "Dosyalar" }, "azuredevops": { @@ -865,7 +868,7 @@ "total": "Toplam", "running": "Çalışıyor", "stopped": "Durdu", - "passed": "Passed", + "passed": "Başarılı", "failed": "Başarısız" }, "openwrt": { @@ -874,7 +877,7 @@ "up": "Çalışıyor", "down": "Çalışmayan", "bytesTx": "İletilen", - "bytesRx": "Received" + "bytesRx": "Alınan" }, "uptimerobot": { "status": "Durum", @@ -924,7 +927,7 @@ }, "gitea": { "notifications": "Bildirimler", - "issues": "Issues", + "issues": "Sorunlar", "pulls": "Değişiklik İstekleri", "repositories": "Depolar" }, @@ -1006,21 +1009,21 @@ "lubelogger": { "vehicle": "Taşıt", "vehicles": "Taşıtlar", - "serviceRecords": "Service Records", + "serviceRecords": "Servis Kayıtları", "reminders": "Hatırlatıcılar", "nextReminder": "Sonraki hatırlatıcı", - "none": "None" + "none": "Hiçbiri" }, "vikunja": { "projects": "Etkin projeler", "tasks7d": "Bitişi Bu Hafta Olan Görevler", - "tasksOverdue": "Overdue Tasks", - "tasksInProgress": "Tasks In Progress" + "tasksOverdue": "Gecikmiş Görevler", + "tasksInProgress": "Devam Eden Görevler" }, "headscale": { "name": "Ad", "address": "Adres", - "last_seen": "Last Seen", + "last_seen": "Son Görülme", "status": "Durum", "online": "Çevrimiçi", "offline": "Çevrimdışı" @@ -1031,21 +1034,21 @@ "up": "Çalışıyor", "down": "Çalışmayan", "paused": "Durduruldu", - "pending": "Pending", + "pending": "Beklemede", "status": "Durum", "updated": "Güncellendi", "cpu": "İşlemci", "memory": "Bellek", - "disk": "Disk", + "disk": "Depolama", "network": "NET" }, "argocd": { "apps": "Uygulamalar", - "synced": "Synced", - "outOfSync": "Out Of Sync", + "synced": "Senkron", + "outOfSync": "Senkron Değil", "healthy": "Sağlıklı", - "degraded": "Degraded", - "progressing": "Progressing", + "degraded": "Sorunlu", + "progressing": "Uygulanıyor", "missing": "Eksik", "suspended": "Askıya Alındı" }, @@ -1053,22 +1056,22 @@ "loading": "Yükleniyor" }, "gitlab": { - "groups": "Groups", - "issues": "Issues", - "merges": "Merge Requests", - "projects": "Projects" + "groups": "Gruplar", + "issues": "Sorunlar", + "merges": "Birleştirme İstekleri", + "projects": "Projeler" }, "apcups": { "status": "Durum", - "load": "Load", - "bcharge": "Battery Charge", + "load": "Yük", + "bcharge": "Pil Yüzdesi", "timeleft": "Kalan zaman" }, "karakeep": { "bookmarks": "Yer imleri", "favorites": "Gözdeler", - "archived": "Archived", - "highlights": "Highlights", + "archived": "Arşivlenen", + "highlights": "Öne Çıkanlar", "lists": "Listeler", "tags": "Etiketler" }, @@ -1084,14 +1087,14 @@ "sharedFiles": "Dosyalar" }, "jellystat": { - "songs": "Şarkılar", - "movies": "Filmler", - "episodes": "Bölümler", + "songs": "Şarkı", + "movies": "Film", + "episodes": "Bölüm", "other": "Diğer" }, "checkmk": { - "serviceErrors": "Service issues", - "hostErrors": "Host issues" + "serviceErrors": "Hizmet Sorunları", + "hostErrors": "Sunucu Sorunları" }, "komodo": { "total": "Toplam", @@ -1101,8 +1104,8 @@ "unhealthy": "Sağlıksız", "unknown": "Bilinmeyen", "servers": "Sunucular", - "stacks": "Stacks", - "containers": "Containers" + "stacks": "Yığınlar", + "containers": "Konteynerler" }, "filebrowser": { "available": "Uygun", @@ -1120,11 +1123,11 @@ "STARTED": "Başladı", "STOPPED": "Durdu", "NEW_ARRAY": "Yeni dizi", - "RECON_DISK": "Reconstructing Disk", + "RECON_DISK": "Disk Yeniden Oluşturuluyor", "DISABLE_DISK": "Disk devre dışı", "SWAP_DSBL": "Swap devre dışı", - "INVALID_EXPANSION": "Invalid Expansion", - "PARITY_NOT_BIGGEST": "Parity Not Biggest", + "INVALID_EXPANSION": "Geçersiz Genişletme", + "PARITY_NOT_BIGGEST": "Parity En Büyük Disk Değil", "TOO_MANY_MISSING_DISKS": "Çok fazla disk eksik", "NEW_DISK_TOO_SMALL": "Yeni disk çok küçük", "NO_DATA_DISKS": "Veri diski yok", @@ -1139,37 +1142,43 @@ "poolFree": "{{pool}} boş" }, "backrest": { - "num_plans": "Plans", - "num_success_30": "Successes", - "num_failure_30": "Failures", - "num_success_latest": "Succeeding", - "num_failure_latest": "Failing", - "bytes_added_30": "Bytes Added" + "num_plans": "Planlar", + "num_success_30": "Başarılılar", + "num_failure_30": "Başarısızlıklar", + "num_success_latest": "Başarılı", + "num_failure_latest": "Başarısız", + "bytes_added_30": "Eklenen Veri" }, "yourspotify": { - "songs": "Songs", - "time": "Time", - "artists": "Artists" + "songs": "Şarkılar", + "time": "Zaman", + "artists": "Sanatçılar" }, "arcane": { - "containers": "Containers", - "images": "Images", - "image_updates": "Image Updates", - "images_unused": "Unused", - "environment_required": "Environment ID Required" + "containers": "Konteynerler", + "images": "İmajlar", + "image_updates": "İmaj Güncellemeleri", + "images_unused": "Kullanılmayan İmajlar", + "environment_required": "Ortam Kimliği Gerekli" }, "dockhand": { - "running": "Running", - "stopped": "Stopped", - "cpu": "CPU", - "memory": "Memory", - "images": "Images", - "volumes": "Volumes", - "events_today": "Events Today", - "pending_updates": "Pending Updates", - "stacks": "Stacks", - "paused": "Paused", - "total": "Total", - "environment_not_found": "Environment Not Found" + "running": "Çalışan", + "stopped": "Durdurulan", + "cpu": "İşlemci", + "memory": "Bellek", + "images": "İmajlar", + "volumes": "Birimler", + "events_today": "Bugünkü Olaylar", + "pending_updates": "Bekleyen Güncellemeler", + "stacks": "Yığınlar", + "paused": "Duraklatılan", + "total": "Toplam", + "environment_not_found": "Ortam Bulunamadı" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/uk/common.json b/public/locales/uk/common.json index 58a3a3624..9775de051 100644 --- a/public/locales/uk/common.json +++ b/public/locales/uk/common.json @@ -184,6 +184,13 @@ "no_active": "Немає активних потоків", "plex_connection_error": "Перевірте з'єднання Plex" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Підключені точки доступу", "activeUser": "Активні пристрої", @@ -282,17 +289,13 @@ "approved": "Затверджено", "available": "Доступно" }, - "jellyseerr": { - "pending": "Очікує", - "approved": "Схвалено", - "available": "Доступно", - "issues": "Проблеми до усунення" - }, - "overseerr": { - "pending": "Очікує", - "processing": "Обробка", - "approved": "Схвалено", - "available": "Доступно" + "seerr": { + "pending": "Pending", + "approved": "Approved", + "available": "Available", + "completed": "Completed", + "processing": "Processing", + "issues": "Open Issues" }, "netalertx": { "total": "Усього", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index a83bc1c85..6efa0a65f 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "Check Plex Connection" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "Connected APs", "activeUser": "Active devices", @@ -282,17 +289,13 @@ "approved": "Đã duyệt", "available": "Available" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", - "issues": "Open Issues" - }, - "overseerr": { - "pending": "Pending", + "completed": "Completed", "processing": "Processing", - "approved": "Approved", - "available": "Available" + "issues": "Open Issues" }, "netalertx": { "total": "Total", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json index ac0da32ec..4e9ed87a5 100644 --- a/public/locales/yue/common.json +++ b/public/locales/yue/common.json @@ -108,14 +108,14 @@ "songs": "曲目" }, "jellyfin": { - "playing": "Playing", - "transcoding": "Transcoding", - "bitrate": "Bitrate", - "no_active": "No Active Streams", - "movies": "Movies", - "series": "Series", - "episodes": "Episodes", - "songs": "Songs" + "playing": "正在播放", + "transcoding": "轉碼", + "bitrate": "位元率", + "no_active": "無播放活動", + "movies": "電影", + "series": "系列", + "episodes": "劇集", + "songs": "曲目" }, "esphome": { "offline": "Offline", @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "檢查Plex的連接狀態" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "已連接的存取點", "activeUser": "在線裝置", @@ -282,18 +289,14 @@ "approved": "批准", "available": "可用" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", + "completed": "Completed", + "processing": "Processing", "issues": "Open Issues" }, - "overseerr": { - "pending": "Pending", - "processing": "處理中", - "approved": "Approved", - "available": "Available" - }, "netalertx": { "total": "Total", "connected": "Connected", @@ -318,9 +321,9 @@ "ping": "Ping" }, "portainer": { - "running": "Running", + "running": "執行中", "stopped": "暫停", - "total": "Total" + "total": "全部" }, "suwayomi": { "download": "Downloaded", @@ -383,7 +386,7 @@ "npm": { "enabled": "啟用", "disabled": "停用咗", - "total": "Total" + "total": "全部" }, "coinmarketcap": { "configure": "配置一個或多個加密貨幣以進行跟蹤", @@ -448,19 +451,19 @@ }, "glances": { "cpu": "CPU", - "load": "Load", - "wait": "Please wait", - "temp": "TEMP", + "load": "負載", + "wait": "請稍候", + "temp": "溫度", "_temp": "溫度", "warn": "警告", - "uptime": "UP", - "total": "Total", - "free": "Free", - "used": "Used", - "days": "d", - "hours": "h", + "uptime": "運作時間", + "total": "全部", + "free": "剩餘", + "used": "已使用", + "days": "日", + "hours": "時", "crit": "重大的", - "read": "Read", + "read": "已讀", "write": "寫入", "gpu": "GPU", "mem": "記憶體", @@ -1084,10 +1087,10 @@ "sharedFiles": "Files" }, "jellystat": { - "songs": "Songs", - "movies": "Movies", - "episodes": "Episodes", - "other": "Other" + "songs": "曲目", + "movies": "電影", + "episodes": "劇集", + "other": "其它" }, "checkmk": { "serviceErrors": "Service issues", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/zh-Hans/common.json b/public/locales/zh-Hans/common.json index 955595f31..dab59e434 100644 --- a/public/locales/zh-Hans/common.json +++ b/public/locales/zh-Hans/common.json @@ -61,7 +61,7 @@ "wlan_devices": "无线局域网设备", "lan_users": "局域网用户", "wlan_users": "无线局域网用户", - "up": "UP", + "up": "在线", "down": "离线", "wait": "请稍候", "empty_data": "子系统状态未知" @@ -108,21 +108,21 @@ "songs": "歌曲" }, "jellyfin": { - "playing": "Playing", - "transcoding": "Transcoding", - "bitrate": "Bitrate", - "no_active": "No Active Streams", - "movies": "Movies", - "series": "Series", - "episodes": "Episodes", - "songs": "Songs" + "playing": "播放中", + "transcoding": "转码", + "bitrate": "比特率", + "no_active": "暂无播放", + "movies": "电影", + "series": "系列", + "episodes": "剧集", + "songs": "歌曲" }, "esphome": { "offline": "离线", "offline_alt": "离线", "online": "在线的", - "total": "Total", - "unknown": "Unknown" + "total": "总计", + "unknown": "未知" }, "evcc": { "pv_power": "正式环境", @@ -143,7 +143,7 @@ "unread": "未读" }, "fritzbox": { - "connectionStatus": "Status", + "connectionStatus": "状态", "connectionStatusUnconfigured": "未配置", "connectionStatusConnecting": "连接中", "connectionStatusAuthenticating": "认证中", @@ -151,11 +151,11 @@ "connectionStatusDisconnecting": "正在断开连接", "connectionStatusDisconnected": "未连接", "connectionStatusConnected": "已连接", - "uptime": "Uptime", + "uptime": "运行时间", "maxDown": "最大下载速度", "maxUp": "最大上传速度", - "down": "Down", - "up": "Up", + "down": "离线", + "up": "在线", "received": "已接收", "sent": "已发送", "externalIPAddress": "外部IP", @@ -178,17 +178,24 @@ "passes": "通行证" }, "tautulli": { - "playing": "Playing", - "transcoding": "Transcoding", - "bitrate": "Bitrate", - "no_active": "No Active Streams", + "playing": "播放中", + "transcoding": "转码", + "bitrate": "比特率", + "no_active": "暂无播放", "plex_connection_error": "Check Plex Connection" }, + "tracearr": { + "no_active": "暂无播放", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "比特率" + }, "omada": { "connectedAp": "连接中的AP", "activeUser": "活跃设备", "alerts": "警报", - "connectedGateways": "Connected gateways", + "connectedGateways": "已连接网关", "connectedSwitches": "已连接开关" }, "nzbget": { @@ -203,13 +210,13 @@ "tv": "电视节目" }, "sabnzbd": { - "rate": "Rate", + "rate": "速率", "queue": "队列", "timeleft": "剩余时间" }, "rutorrent": { "active": "活动中", - "upload": "Upload", + "upload": "上传", "download": "下载" }, "transmission": { @@ -226,7 +233,7 @@ }, "qnap": { "cpuUsage": "处理器", - "memUsage": "内存", + "memUsage": "内存使用", "systemTempC": "系统温度", "poolUsage": "存储池", "volumeUsage": "Volume Usage", @@ -245,7 +252,7 @@ "downloadstation": { "download": "Download", "upload": "Upload", - "leech": "Leech", + "leech": "", "seed": "做种" }, "sonarr": { @@ -282,18 +289,14 @@ "approved": "已批准", "available": "可用" }, - "jellyseerr": { - "pending": "待办的", + "seerr": { + "pending": "Pending", "approved": "Approved", "available": "Available", + "completed": "Completed", + "processing": "Processing", "issues": "Open Issues" }, - "overseerr": { - "pending": "Pending", - "processing": "处理中", - "approved": "Approved", - "available": "Available" - }, "netalertx": { "total": "Total", "connected": "Connected", @@ -318,9 +321,9 @@ "ping": "Ping" }, "portainer": { - "running": "Running", + "running": "运行中", "stopped": "停止", - "total": "Total" + "total": "总计" }, "suwayomi": { "download": "Downloaded", @@ -377,13 +380,13 @@ "unknown": "未知" }, "navidrome": { - "nothing_streaming": "", + "nothing_streaming": "暂无播放", "please_wait": "请等待" }, "npm": { "enabled": "已启用", "disabled": "禁用", - "total": "Total" + "total": "总计" }, "coinmarketcap": { "configure": "配置一个或多个需要追踪的加密", @@ -406,7 +409,7 @@ }, "jackett": { "configured": "已配置", - "errored": "Errored" + "errored": "出错" }, "strelaysrv": { "numActiveSessions": "会话", @@ -420,7 +423,7 @@ "domain_count": "域" }, "medusa": { - "wanted": "Wanted", + "wanted": "", "queued": "Queued", "series": "Series" }, @@ -441,7 +444,7 @@ "failedLoginsLast24H": "登录失败 (24h)" }, "proxmox": { - "mem": "MEM", + "mem": "内存", "cpu": "CPU", "lxc": "容器", "vms": "虚拟机" @@ -450,7 +453,7 @@ "cpu": "CPU", "load": "负载", "wait": "请稍候", - "temp": "温度", + "temp": "转速", "_temp": "Temp", "warn": "Warn", "uptime": "运行时间", @@ -460,7 +463,7 @@ "days": "日", "hours": "时", "crit": "Crit", - "read": "Read", + "read": "读取", "write": "写入", "gpu": "GPU", "mem": "Mem", @@ -481,57 +484,57 @@ "1-day": "主要是晴天", "1-night": "大部晴朗", "2-day": "多云", - "2-night": "Partly Cloudy", + "2-night": "多云", "3-day": "阴天", - "3-night": "Cloudy", + "3-night": "阴天", "45-day": "有雾", - "45-night": "Foggy", - "48-day": "Foggy", - "48-night": "Foggy", + "45-night": "雾", + "48-day": "雾", + "48-night": "雾", "51-day": "小雨", - "51-night": "Light Drizzle", + "51-night": "小细雨", "53-day": "小雨", - "53-night": "Drizzle", + "53-night": "细雨", "55-day": "毛毛雨", - "55-night": "Heavy Drizzle", + "55-night": "大细雨", "56-day": "小冻毛雨", - "56-night": "Light Freezing Drizzle", + "56-night": "小冻毛雨", "57-day": "冻毛雨", - "57-night": "Freezing Drizzle", + "57-night": "冻毛雨", "61-day": "小雨", - "61-night": "Light Rain", + "61-night": "小雨", "63-day": "雨", - "63-night": "Rain", + "63-night": "雨天", "65-day": "大雨", - "65-night": "Heavy Rain", + "65-night": "大雨", "66-day": "冻雨", - "66-night": "Freezing Rain", - "67-day": "Freezing Rain", - "67-night": "Freezing Rain", + "66-night": "冻雨", + "67-day": "冻雨", + "67-night": "冻雨", "71-day": "小雪", - "71-night": "Light Snow", + "71-night": "小雪", "73-day": "中雪", - "73-night": "Snow", + "73-night": "中雪", "75-day": "大雪", - "75-night": "Heavy Snow", + "75-night": "大雪", "77-day": "雪粒", - "77-night": "Snow Grains", + "77-night": "雪粒", "80-day": "微阵雨", - "80-night": "Light Showers", + "80-night": "小阵雨", "81-day": "阵雨", - "81-night": "Showers", + "81-night": "阵雨", "82-day": "强阵雨", - "82-night": "Heavy Showers", + "82-night": "强阵雨", "85-day": "阵雪", - "85-night": "Snow Showers", - "86-day": "Snow Showers", - "86-night": "Snow Showers", + "85-night": "阵雪", + "86-day": "阵雪", + "86-night": "阵雪", "95-day": "雷雨", - "95-night": "Thunderstorm", + "95-night": "雷雨", "96-day": "雷雨伴随冰雹", - "96-night": "Thunderstorm With Hail", - "99-day": "Thunderstorm With Hail", - "99-night": "Thunderstorm With Hail" + "96-night": "雷雨伴随冰雹", + "99-day": "雷雨伴随冰雹", + "99-night": "雷雨伴随冰雹" }, "homebridge": { "available_update": "System", @@ -687,9 +690,9 @@ "memory_usage": "内存" }, "immich": { - "users": "Users", + "users": "用户", "photos": "照片", - "videos": "Videos", + "videos": "影片", "storage": "储存空间" }, "uptimekuma": { @@ -987,8 +990,8 @@ }, "frigate": { "cameras": "摄像头", - "uptime": "Uptime", - "version": "Version" + "uptime": "运行时间", + "version": "版本" }, "linkwarden": { "links": "链接", @@ -1035,7 +1038,7 @@ "status": "Status", "updated": "Updated", "cpu": "CPU", - "memory": "MEM", + "memory": "内存", "disk": "磁盘", "network": "网络" }, @@ -1059,10 +1062,10 @@ "projects": "项目" }, "apcups": { - "status": "Status", - "load": "Load", - "bcharge": "Battery Charge", - "timeleft": "Time Left" + "status": "状态", + "load": "负载", + "bcharge": "电池电量", + "timeleft": "剩余供电时间" }, "karakeep": { "bookmarks": "书签", @@ -1084,9 +1087,9 @@ "sharedFiles": "Files" }, "jellystat": { - "songs": "Songs", - "movies": "Movies", - "episodes": "Episodes", + "songs": "歌曲", + "movies": "电影", + "episodes": "剧集", "other": "其他" }, "checkmk": { @@ -1131,8 +1134,8 @@ "notifications": "Notifications", "status": "Status", "cpu": "CPU", - "memoryUsed": "Memory Used", - "memoryAvailable": "Memory Available", + "memoryUsed": "已用内存", + "memoryAvailable": "可用内存", "arrayUsed": "Array Used", "arrayFree": "Array Free", "poolUsed": "{{pool}} Used", @@ -1159,11 +1162,11 @@ "environment_required": "Environment ID Required" }, "dockhand": { - "running": "Running", - "stopped": "Stopped", + "running": "运行中", + "stopped": "停止", "cpu": "CPU", - "memory": "Memory", - "images": "Images", + "memory": "内存", + "images": "图片", "volumes": "Volumes", "events_today": "Events Today", "pending_updates": "Pending Updates", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json index 24cd1c55e..32c812862 100644 --- a/public/locales/zh-Hant/common.json +++ b/public/locales/zh-Hant/common.json @@ -108,14 +108,14 @@ "songs": "曲目" }, "jellyfin": { - "playing": "Playing", - "transcoding": "Transcoding", - "bitrate": "Bitrate", - "no_active": "No Active Streams", - "movies": "Movies", - "series": "Series", - "episodes": "Episodes", - "songs": "Songs" + "playing": "正在播放", + "transcoding": "轉碼", + "bitrate": "位元率", + "no_active": "無播放活動", + "movies": "電影", + "series": "系列", + "episodes": "劇集", + "songs": "曲目" }, "esphome": { "offline": "Offline", @@ -184,6 +184,13 @@ "no_active": "No Active Streams", "plex_connection_error": "檢查Plex的連線狀態" }, + "tracearr": { + "no_active": "No Active Streams", + "streams": "Streams", + "transcodes": "Transcodes", + "directplay": "Direct Play", + "bitrate": "Bitrate" + }, "omada": { "connectedAp": "已連線的無線網路", "activeUser": "上線裝置", @@ -282,18 +289,14 @@ "approved": "已核准", "available": "可觀看" }, - "jellyseerr": { + "seerr": { "pending": "Pending", "approved": "Approved", "available": "Available", + "completed": "Completed", + "processing": "Processing", "issues": "Open Issues" }, - "overseerr": { - "pending": "Pending", - "processing": "處理中", - "approved": "Approved", - "available": "Available" - }, "netalertx": { "total": "Total", "connected": "Connected", @@ -318,9 +321,9 @@ "ping": "Ping" }, "portainer": { - "running": "Running", + "running": "執行中", "stopped": "已停止", - "total": "Total" + "total": "全部" }, "suwayomi": { "download": "Downloaded", @@ -383,7 +386,7 @@ "npm": { "enabled": "已啟用", "disabled": "已停用", - "total": "Total" + "total": "全部" }, "coinmarketcap": { "configure": "請設定一個或多個欲追蹤的加密貨幣", @@ -448,19 +451,19 @@ }, "glances": { "cpu": "CPU", - "load": "Load", - "wait": "Please wait", - "temp": "TEMP", + "load": "負載", + "wait": "請稍候", + "temp": "溫度", "_temp": "溫度", "warn": "警告", - "uptime": "UP", - "total": "Total", - "free": "Free", - "used": "Used", - "days": "d", - "hours": "h", + "uptime": "運作時間", + "total": "全部", + "free": "剩餘", + "used": "已使用", + "days": "日", + "hours": "時", "crit": "重大的", - "read": "Read", + "read": "已讀", "write": "寫入", "gpu": "GPU", "mem": "記憶體", @@ -1084,10 +1087,10 @@ "sharedFiles": "Files" }, "jellystat": { - "songs": "Songs", - "movies": "Movies", - "episodes": "Episodes", - "other": "Other" + "songs": "曲目", + "movies": "電影", + "episodes": "劇集", + "other": "其它" }, "checkmk": { "serviceErrors": "Service issues", @@ -1171,5 +1174,11 @@ "paused": "Paused", "total": "Total", "environment_not_found": "Environment Not Found" + }, + "sparkyfitness": { + "eaten": "Eaten", + "burned": "Burned", + "remaining": "Remaining", + "steps": "Steps" } } From c069cb3333265e3eb590856535aa8283991fae30 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 16 Mar 2026 15:54:31 -0700 Subject: [PATCH 04/28] Maybe fix release drafter --- .github/release-drafter.yml | 1 + .github/workflows/release-drafter.yml | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 24911d53e..f7c315340 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -65,6 +65,7 @@ autolabeler: - 'src/components/**' - 'src/widgets/**' - 'src/pages/**' + - 'src/utils/**' - label: 'chore' files: diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index a5097afd4..8de6fd556 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -14,7 +14,7 @@ on: type: string permissions: - contents: read + contents: write pull-requests: write jobs: @@ -24,6 +24,7 @@ jobs: - uses: release-drafter/release-drafter@v6 with: config-name: release-drafter.yml + disable-releaser: ${{ github.event_name == 'pull_request_target' }} version: ${{ github.event.inputs.version }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From ca67ba2e492f7eb2561bcbf10a7942a6bdb4cbc1 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 16 Mar 2026 16:02:50 -0700 Subject: [PATCH 05/28] Tweak: sanitize calendar integration URLs from markup (#6431) --- src/utils/config/service-helpers.js | 14 +++++++- src/utils/config/service-helpers.test.js | 41 ++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index 52f8dcb05..f9651af5d 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -619,7 +619,19 @@ export function cleanServiceGroups(groups) { if (refreshInterval) widget.refreshInterval = refreshInterval; } if (type === "calendar") { - if (integrations) widget.integrations = integrations; + if (integrations) { + if (Array.isArray(integrations)) { + widget.integrations = integrations.map((integration) => { + if (!integration || typeof integration !== "object") { + return integration; + } + const { url, ...integrationWithoutUrl } = integration; + return integrationWithoutUrl; + }); + } else { + widget.integrations = integrations; + } + } if (firstDayInWeek) widget.firstDayInWeek = firstDayInWeek; if (view) widget.view = view; if (maxEvents) widget.maxEvents = maxEvents; diff --git a/src/utils/config/service-helpers.test.js b/src/utils/config/service-helpers.test.js index 0c6cf44ab..92145b13b 100644 --- a/src/utils/config/service-helpers.test.js +++ b/src/utils/config/service-helpers.test.js @@ -369,6 +369,47 @@ describe("utils/config/service-helpers", () => { expect(widgets.find((w) => w.type === "lubelogger")).toEqual(expect.objectContaining({ vehicleID: 12 })); }); + it("cleanServiceGroups removes calendar integration urls from frontend widget payload", async () => { + const mod = await import("./service-helpers"); + const { cleanServiceGroups } = mod; + + const rawGroups = [ + { + name: "Core", + services: [ + { + name: "Calendar", + weight: 100, + widgets: [ + { + type: "calendar", + integrations: [ + { + type: "ical", + name: "EPL Fixtures", + url: "https://calendar.google.com/calendar/ical/example/public/basic.ics", + color: "purple", + }, + ], + }, + ], + }, + ], + groups: [], + }, + ]; + + const cleaned = cleanServiceGroups(rawGroups); + const calendarWidget = cleaned[0].services[0].widgets[0]; + expect(calendarWidget.integrations).toEqual([ + { + type: "ical", + name: "EPL Fixtures", + color: "purple", + }, + ]); + }); + it("findGroupByName deep-searches and annotates parent", async () => { const mod = await import("./service-helpers"); const { findGroupByName } = mod; From 11de525fc00bdf0d2d8fb731c9a72083cb47264d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 16:04:14 -0700 Subject: [PATCH 06/28] Chore(deps): Bump release-drafter/release-drafter from 6 to 7 (#6429) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release-drafter.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index 8de6fd556..a29e00b20 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -21,7 +21,7 @@ jobs: update_release_draft: runs-on: ubuntu-latest steps: - - uses: release-drafter/release-drafter@v6 + - uses: release-drafter/release-drafter@v7 with: config-name: release-drafter.yml disable-releaser: ${{ github.event_name == 'pull_request_target' }} From 6bdea294c1ac886924eb30559fd11741e93389c7 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 17 Mar 2026 09:10:42 -0700 Subject: [PATCH 07/28] Try this fix for release-drafter again --- .github/workflows/release-drafter.yml | 34 +++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index a29e00b20..4d003233f 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -3,7 +3,7 @@ name: Release Drafter on: push: branches: - - main + - dev pull_request_target: types: [opened, reopened, synchronize] workflow_dispatch: @@ -14,17 +14,41 @@ on: type: string permissions: - contents: write - pull-requests: write + contents: read jobs: update_release_draft: + name: Update Release Draft + if: github.event_name == 'push' || github.event_name == 'workflow_dispatch' + permissions: + contents: write + pull-requests: read runs-on: ubuntu-latest steps: - - uses: release-drafter/release-drafter@v7 + - if: github.event_name == 'workflow_dispatch' && github.event.inputs.version != '' + uses: release-drafter/release-drafter@v7 with: config-name: release-drafter.yml - disable-releaser: ${{ github.event_name == 'pull_request_target' }} version: ${{ github.event.inputs.version }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - if: github.event_name != 'workflow_dispatch' || github.event.inputs.version == '' + uses: release-drafter/release-drafter@v7 + with: + config-name: release-drafter.yml + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + auto_label: + name: Auto Label PR + if: github.event_name == 'pull_request_target' + permissions: + contents: read + pull-requests: write + runs-on: ubuntu-latest + steps: + - uses: release-drafter/release-drafter/autolabeler@ebb69bb56f1b0ebd19897745035726b19bef973e + with: + config-name: release-drafter.yml + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From fadb03ad27bf9a7a89586d0149808aca6f8a69ad Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 17 Mar 2026 09:12:01 -0700 Subject: [PATCH 08/28] Enhancement: better support for raw values in block highlighting (#6434) --- src/components/services/widget/block.jsx | 6 +-- src/components/services/widget/block.test.jsx | 23 +++++++++ src/widgets/adguard/component.jsx | 1 + src/widgets/beszel/component.jsx | 19 ++++++-- src/widgets/deluge/component.jsx | 4 +- src/widgets/docker/component.jsx | 10 ++-- src/widgets/dockhand/component.jsx | 12 ++++- src/widgets/downloadstation/component.jsx | 4 +- src/widgets/filebrowser/component.jsx | 15 ++++-- src/widgets/flood/component.jsx | 4 +- src/widgets/fritzbox/component.jsx | 36 +++++++++++--- src/widgets/gamedig/component.jsx | 2 +- src/widgets/gatus/component.jsx | 2 +- src/widgets/jdownloader/component.jsx | 13 ++++- src/widgets/kubernetes/component.jsx | 13 ++++- src/widgets/mikrotik/component.jsx | 12 ++++- src/widgets/myspeed/component.jsx | 1 + src/widgets/nextcloud/component.jsx | 15 +++++- src/widgets/nzbget/component.jsx | 13 ++++- src/widgets/openwrt/methods/interface.jsx | 4 +- src/widgets/opnsense/component.jsx | 18 +++++-- src/widgets/peanut/component.jsx | 12 ++++- src/widgets/pfsense/component.jsx | 15 +++++- src/widgets/proxmox/component.jsx | 12 ++++- src/widgets/proxmoxbackupserver/component.jsx | 18 +++++-- src/widgets/proxmoxvm/component.jsx | 8 +++- src/widgets/pyload/component.jsx | 6 ++- src/widgets/qbittorrent/component.jsx | 12 ++++- src/widgets/rutorrent/component.jsx | 4 +- src/widgets/speedtest/component.jsx | 1 + src/widgets/strelaysrv/component.jsx | 7 ++- src/widgets/tdarr/component.jsx | 2 +- src/widgets/transmission/component.jsx | 4 +- src/widgets/unraid/component.jsx | 48 ++++++++++++++----- src/widgets/uptimekuma/component.jsx | 2 +- 35 files changed, 300 insertions(+), 78 deletions(-) diff --git a/src/components/services/widget/block.jsx b/src/components/services/widget/block.jsx index c61dd5d54..e78123ea8 100644 --- a/src/components/services/widget/block.jsx +++ b/src/components/services/widget/block.jsx @@ -6,7 +6,7 @@ import { BlockHighlightContext } from "./highlight-context"; import { evaluateHighlight, getHighlightClass } from "utils/highlights"; -export default function Block({ value, label, field }) { +export default function Block({ value, highlightValue, label, field }) { const { t } = useTranslation(); const highlightConfig = useContext(BlockHighlightContext); @@ -20,12 +20,12 @@ export default function Block({ value, label, field }) { } for (const candidate of candidates) { - const result = evaluateHighlight(candidate, value, highlightConfig); + const result = evaluateHighlight(candidate, highlightValue ?? value, highlightConfig); if (result) return result; } return null; - }, [field, label, value, highlightConfig]); + }, [field, label, value, highlightValue, highlightConfig]); const highlightClass = useMemo(() => { if (!highlight?.level) return undefined; diff --git a/src/components/services/widget/block.test.jsx b/src/components/services/widget/block.test.jsx index ece7518a7..38ee0d137 100644 --- a/src/components/services/widget/block.test.jsx +++ b/src/components/services/widget/block.test.jsx @@ -38,4 +38,27 @@ describe("components/services/widget/block", () => { expect(el.getAttribute("data-highlight-level")).toBe("danger"); expect(el.className).toContain("danger-class"); }); + + it("prefers highlightValue over the rendered value for numeric highlighting", () => { + const highlightConfig = { + levels: { warn: "warn-class" }, + fields: { + foo: { + numeric: { when: "gt", value: 5, level: "warn" }, + }, + }, + }; + + const { container } = renderWithProviders( + + + , + { settings: {} }, + ); + + const el = container.querySelector(".service-block"); + expect(el).not.toBeNull(); + expect(el.getAttribute("data-highlight-level")).toBe("warn"); + expect(el.className).toContain("warn-class"); + }); }); diff --git a/src/widgets/adguard/component.jsx b/src/widgets/adguard/component.jsx index e5a7670a5..47980e11b 100644 --- a/src/widgets/adguard/component.jsx +++ b/src/widgets/adguard/component.jsx @@ -37,6 +37,7 @@ export default function Component({ service }) { ); diff --git a/src/widgets/beszel/component.jsx b/src/widgets/beszel/component.jsx index bbcaeb0b7..18ed67d27 100644 --- a/src/widgets/beszel/component.jsx +++ b/src/widgets/beszel/component.jsx @@ -51,12 +51,25 @@ export default function Component({ service }) { - - - + + + ); diff --git a/src/widgets/deluge/component.jsx b/src/widgets/deluge/component.jsx index eb6ddfaa1..1707eb6ce 100644 --- a/src/widgets/deluge/component.jsx +++ b/src/widgets/deluge/component.jsx @@ -52,9 +52,9 @@ export default function Component({ service }) { <> - + - + {widget?.enableLeechProgress && leechTorrents.map((queueEntry) => ( diff --git a/src/widgets/docker/component.jsx b/src/widgets/docker/component.jsx index 6e05454f8..b1d8e1255 100644 --- a/src/widgets/docker/component.jsx +++ b/src/widgets/docker/component.jsx @@ -41,17 +41,19 @@ export default function Component({ service }) { } const { rxBytes, txBytes } = calculateThroughput(statsData.stats); + const cpuPercent = calculateCPUPercent(statsData.stats); + const usedMemory = calculateUsedMemory(statsData.stats); return ( - + {statsData.stats.memory_stats.usage && ( - + )} {statsData.stats.networks && ( <> - - + + )} diff --git a/src/widgets/dockhand/component.jsx b/src/widgets/dockhand/component.jsx index 50ccff180..d3c97bd01 100644 --- a/src/widgets/dockhand/component.jsx +++ b/src/widgets/dockhand/component.jsx @@ -105,8 +105,16 @@ export default function Component({ service }) { - - + + - + - + ); } diff --git a/src/widgets/filebrowser/component.jsx b/src/widgets/filebrowser/component.jsx index cf5a28000..53b6d89b9 100644 --- a/src/widgets/filebrowser/component.jsx +++ b/src/widgets/filebrowser/component.jsx @@ -25,14 +25,21 @@ export default function Component({ service }) { ); } + const available = (usage?.total ?? 0) - (usage?.used ?? 0); + return ( + + - - ); } diff --git a/src/widgets/flood/component.jsx b/src/widgets/flood/component.jsx index 92a2b61a0..973f8a6fd 100644 --- a/src/widgets/flood/component.jsx +++ b/src/widgets/flood/component.jsx @@ -45,9 +45,9 @@ export default function Component({ service }) { return ( - + - + ); } diff --git a/src/widgets/fritzbox/component.jsx b/src/widgets/fritzbox/component.jsx index d7928c20b..405975059 100644 --- a/src/widgets/fritzbox/component.jsx +++ b/src/widgets/fritzbox/component.jsx @@ -47,12 +47,36 @@ export default function Component({ service }) { - - - - - - + + + + + + diff --git a/src/widgets/gamedig/component.jsx b/src/widgets/gamedig/component.jsx index b76002b51..2efea5631 100644 --- a/src/widgets/gamedig/component.jsx +++ b/src/widgets/gamedig/component.jsx @@ -58,7 +58,7 @@ export default function Component({ service }) { - + ); } diff --git a/src/widgets/gatus/component.jsx b/src/widgets/gatus/component.jsx index 25aae239e..3a30b7e2b 100644 --- a/src/widgets/gatus/component.jsx +++ b/src/widgets/gatus/component.jsx @@ -45,7 +45,7 @@ export default function Component({ service }) { - + ); } diff --git a/src/widgets/jdownloader/component.jsx b/src/widgets/jdownloader/component.jsx index a7722c7c4..c352902e4 100644 --- a/src/widgets/jdownloader/component.jsx +++ b/src/widgets/jdownloader/component.jsx @@ -31,12 +31,21 @@ export default function Component({ service }) { return ( - + + - ); } diff --git a/src/widgets/kubernetes/component.jsx b/src/widgets/kubernetes/component.jsx index d3587a59a..e008411ec 100644 --- a/src/widgets/kubernetes/component.jsx +++ b/src/widgets/kubernetes/component.jsx @@ -43,14 +43,23 @@ export default function Component({ service }) { return ( {(statsData.stats.cpuLimit && ( - + )) || ( )} - + ); } diff --git a/src/widgets/mikrotik/component.jsx b/src/widgets/mikrotik/component.jsx index 4bab67926..fd7365d80 100644 --- a/src/widgets/mikrotik/component.jsx +++ b/src/widgets/mikrotik/component.jsx @@ -35,8 +35,16 @@ export default function Component({ service }) { return ( - - + + ); diff --git a/src/widgets/myspeed/component.jsx b/src/widgets/myspeed/component.jsx index e0967d471..8db5ecd0e 100644 --- a/src/widgets/myspeed/component.jsx +++ b/src/widgets/myspeed/component.jsx @@ -54,6 +54,7 @@ export default function Component({ service }) { style: "unit", unit: "millisecond", })} + highlightValue={data[0].ping} /> ); diff --git a/src/widgets/nextcloud/component.jsx b/src/widgets/nextcloud/component.jsx index d1f1cac9b..fe78bf3db 100755 --- a/src/widgets/nextcloud/component.jsx +++ b/src/widgets/nextcloud/component.jsx @@ -56,12 +56,23 @@ export default function Component({ service }) { return ( {showCpuLoad && ( - + + )} + {showMemoryUsage && ( + )} - {showMemoryUsage && } diff --git a/src/widgets/nzbget/component.jsx b/src/widgets/nzbget/component.jsx index a11ac9da1..401010f8d 100644 --- a/src/widgets/nzbget/component.jsx +++ b/src/widgets/nzbget/component.jsx @@ -27,11 +27,20 @@ export default function Component({ service }) { return ( - - + + ); diff --git a/src/widgets/openwrt/methods/interface.jsx b/src/widgets/openwrt/methods/interface.jsx index b746bc7e4..99e66ea2d 100644 --- a/src/widgets/openwrt/methods/interface.jsx +++ b/src/widgets/openwrt/methods/interface.jsx @@ -21,8 +21,8 @@ export default function Component({ service }) { return ( - - + + ); } diff --git a/src/widgets/opnsense/component.jsx b/src/widgets/opnsense/component.jsx index 1caaab472..17c765fc9 100644 --- a/src/widgets/opnsense/component.jsx +++ b/src/widgets/opnsense/component.jsx @@ -36,10 +36,22 @@ export default function Component({ service }) { return ( - + - {wan && } - {wan && } + {wan && ( + + )} + {wan && ( + + )} ); } diff --git a/src/widgets/peanut/component.jsx b/src/widgets/peanut/component.jsx index 54a293adb..f2c8491dd 100644 --- a/src/widgets/peanut/component.jsx +++ b/src/widgets/peanut/component.jsx @@ -52,8 +52,16 @@ export default function Component({ service }) { return ( - - + + ); diff --git a/src/widgets/pfsense/component.jsx b/src/widgets/pfsense/component.jsx index 69a862b44..06285ed78 100644 --- a/src/widgets/pfsense/component.jsx +++ b/src/widgets/pfsense/component.jsx @@ -51,14 +51,25 @@ export default function Component({ service }) { label="pfsense.load" value={version === 1 ? systemData.data.load_avg[0] : systemData.data.cpu_load_avg[0]} /> - + {showWanIP && } - {showDiskUsage && } + {showDiskUsage && ( + + )} ); } diff --git a/src/widgets/proxmox/component.jsx b/src/widgets/proxmox/component.jsx index 51762a737..ddab5bc51 100644 --- a/src/widgets/proxmox/component.jsx +++ b/src/widgets/proxmox/component.jsx @@ -67,8 +67,16 @@ export default function Component({ service }) { - - + + ); } diff --git a/src/widgets/proxmoxbackupserver/component.jsx b/src/widgets/proxmoxbackupserver/component.jsx index b13f87565..0af1134be 100644 --- a/src/widgets/proxmoxbackupserver/component.jsx +++ b/src/widgets/proxmoxbackupserver/component.jsx @@ -47,10 +47,22 @@ export default function Component({ service }) { return ( - + - - + + ); } diff --git a/src/widgets/proxmoxvm/component.jsx b/src/widgets/proxmoxvm/component.jsx index 75593642c..4cc0f8730 100644 --- a/src/widgets/proxmoxvm/component.jsx +++ b/src/widgets/proxmoxvm/component.jsx @@ -25,8 +25,12 @@ export default function ProxmoxVM({ service }) { return ( - - + + ); } diff --git a/src/widgets/pyload/component.jsx b/src/widgets/pyload/component.jsx index f618f75e5..13ee32a92 100644 --- a/src/widgets/pyload/component.jsx +++ b/src/widgets/pyload/component.jsx @@ -26,7 +26,11 @@ export default function Component({ service }) { return ( - + diff --git a/src/widgets/qbittorrent/component.jsx b/src/widgets/qbittorrent/component.jsx index 73dfacb5c..0f0fa3af3 100644 --- a/src/widgets/qbittorrent/component.jsx +++ b/src/widgets/qbittorrent/component.jsx @@ -74,9 +74,17 @@ export default function Component({ service }) { <> - + - + {widget?.enableLeechProgress && leechTorrents.map((queueEntry) => ( diff --git a/src/widgets/rutorrent/component.jsx b/src/widgets/rutorrent/component.jsx index 245a786cb..8f744b520 100644 --- a/src/widgets/rutorrent/component.jsx +++ b/src/widgets/rutorrent/component.jsx @@ -34,8 +34,8 @@ export default function Component({ service }) { return ( - - + + ); } diff --git a/src/widgets/speedtest/component.jsx b/src/widgets/speedtest/component.jsx index 7be00aa22..bc579b76a 100644 --- a/src/widgets/speedtest/component.jsx +++ b/src/widgets/speedtest/component.jsx @@ -54,6 +54,7 @@ export default function Component({ service }) { style: "unit", unit: "millisecond", })} + highlightValue={speedtestData.data.ping} /> ); diff --git a/src/widgets/strelaysrv/component.jsx b/src/widgets/strelaysrv/component.jsx index 026e19b70..e79345c42 100644 --- a/src/widgets/strelaysrv/component.jsx +++ b/src/widgets/strelaysrv/component.jsx @@ -29,10 +29,15 @@ export default function Component({ service }) { - + ); diff --git a/src/widgets/tdarr/component.jsx b/src/widgets/tdarr/component.jsx index 824a56b34..9dbc7e4de 100644 --- a/src/widgets/tdarr/component.jsx +++ b/src/widgets/tdarr/component.jsx @@ -46,7 +46,7 @@ export default function Component({ service }) { - + ); } diff --git a/src/widgets/transmission/component.jsx b/src/widgets/transmission/component.jsx index 474fe69f8..06b549513 100644 --- a/src/widgets/transmission/component.jsx +++ b/src/widgets/transmission/component.jsx @@ -36,9 +36,9 @@ export default function Component({ service }) { return ( - + - + ); } diff --git a/src/widgets/unraid/component.jsx b/src/widgets/unraid/component.jsx index f7b8dc5ca..1d90f34bc 100644 --- a/src/widgets/unraid/component.jsx +++ b/src/widgets/unraid/component.jsx @@ -58,35 +58,59 @@ export default function Component({ service }) { return ( - - + + + - + - {...POOLS.flatMap((pool) => - POOL_FIELDS.map(({ param, label, valueKey, valueType }) => ( - - )), + POOL_FIELDS.map(({ param, label, valueKey, valueType }) => { + const poolValue = data.caches?.[widget?.[pool]]?.[valueKey] || "-"; + + return ( + + ); + }), )} ); diff --git a/src/widgets/uptimekuma/component.jsx b/src/widgets/uptimekuma/component.jsx index e8a42e48f..a660a417d 100644 --- a/src/widgets/uptimekuma/component.jsx +++ b/src/widgets/uptimekuma/component.jsx @@ -50,7 +50,7 @@ export default function Component({ service }) { - + {incidentTime && ( Date: Tue, 17 Mar 2026 09:45:05 -0700 Subject: [PATCH 09/28] Chore(deps): Bump pnpm/action-setup from 4 to 5 (#6436) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker-publish.yml | 4 ++-- .github/workflows/test.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 69e2b40ab..e1cd86e87 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -33,7 +33,7 @@ jobs: uses: pre-commit/action@v3.0.1 - name: Install pnpm - uses: pnpm/action-setup@v4 + uses: pnpm/action-setup@v5 with: version: 10 run_install: false @@ -92,7 +92,7 @@ jobs: nextjs-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} - name: Install pnpm - uses: pnpm/action-setup@v4 + uses: pnpm/action-setup@v5 with: version: 10 run_install: false diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5d5234736..07b0cb7a7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/checkout@v6 - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@v5 with: version: 9 From 3d1be51ed4d473209ab803f754764f1e9dd71f2a Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 18 Mar 2026 10:33:56 -0700 Subject: [PATCH 10/28] Add pnpm install preLaunchTask and task --- .vscode/launch.json | 1 + .vscode/tasks.json | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 .vscode/tasks.json diff --git a/.vscode/launch.json b/.vscode/launch.json index 372a44597..a3f95165c 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -3,6 +3,7 @@ { "name": "Debug homepage", "type": "node", + "preLaunchTask": "pnpm install", "request": "launch", "runtimeExecutable": "pnpm", "runtimeArgs": ["run", "dev"], diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 000000000..88b116db2 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,21 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "type": "shell", + "label": "pnpm install", + "command": "pnpm install", + "group": { + "kind": "build", + "isDefault": true + }, + "presentation": { + "clear": true, + "panel": "shared", + "showReuseMessage": false + }, + "problemMatcher": [] + + } + ] +} From 02309211ac8d2a68001a68956d186b1f09d589ab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 18:35:42 +0000 Subject: [PATCH 11/28] Chore(deps): Bump next from 15.5.11 to 16.1.7 in the npm_and_yarn group across 1 directory (#6438) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- next.config.js | 7 ++- package.json | 2 +- pnpm-lock.yaml | 164 +++++++++++++++++++++++++++---------------------- 3 files changed, 96 insertions(+), 77 deletions(-) diff --git a/next.config.js b/next.config.js index d0395611c..ea49bf543 100644 --- a/next.config.js +++ b/next.config.js @@ -5,7 +5,12 @@ const nextConfig = { reactStrictMode: true, output: "standalone", images: { - domains: ["cdn.jsdelivr.net"], + remotePatterns: [ + { + protocol: "https", + hostname: "cdn.jsdelivr.net", + }, + ], unoptimized: true, }, i18n, diff --git a/package.json b/package.json index 6b8ff4c9c..20780916d 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "luxon": "^3.6.1", "memory-cache": "^0.2.0", "minecraftstatuspinger": "^1.2.2", - "next": "^15.5.11", + "next": "^16.1.7", "next-i18next": "^15.4.3", "ping": "^0.4.4", "pretty-bytes": "^7.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a2677f56f..043a82575 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51,11 +51,11 @@ importers: specifier: ^1.2.2 version: 1.2.2 next: - specifier: ^15.5.11 - version: 15.5.11(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: ^16.1.7 + version: 16.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) next-i18next: specifier: ^15.4.3 - version: 15.4.3(@types/react@19.0.10)(i18next@25.8.0(typescript@5.7.3))(next@15.5.11(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-i18next@15.5.3(i18next@25.8.0(typescript@5.7.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.7.3))(react@19.2.4) + version: 15.4.3(@types/react@19.0.10)(i18next@25.8.0(typescript@5.7.3))(next@16.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-i18next@15.5.3(i18next@25.8.0(typescript@5.7.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.7.3))(react@19.2.4) ping: specifier: ^0.4.4 version: 0.4.4 @@ -230,6 +230,10 @@ packages: resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + engines: {node: '>=6.9.0'} + '@babel/types@7.29.0': resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} @@ -286,8 +290,8 @@ packages: '@emnapi/core@1.4.0': resolution: {integrity: sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==} - '@emnapi/runtime@1.7.1': - resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} + '@emnapi/runtime@1.9.0': + resolution: {integrity: sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==} '@emnapi/wasi-threads@1.0.1': resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} @@ -569,8 +573,8 @@ packages: resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} engines: {node: '>=18.18'} - '@img/colour@1.0.0': - resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} engines: {node: '>=18'} '@img/sharp-darwin-arm64@0.34.5': @@ -755,56 +759,56 @@ packages: '@napi-rs/wasm-runtime@0.2.8': resolution: {integrity: sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==} - '@next/env@15.5.11': - resolution: {integrity: sha512-g9s5SS9gC7GJCEOR3OV3zqs7C5VddqxP9X+/6BpMbdXRkqsWfFf2CJPBZNvNEtAkKTNuRgRXAgNxSAXzfLdaTg==} + '@next/env@16.1.7': + resolution: {integrity: sha512-rJJbIdJB/RQr2F1nylZr/PJzamvNNhfr3brdKP6s/GW850jbtR70QlSfFselvIBbcPUOlQwBakexjFzqLzF6pg==} '@next/eslint-plugin-next@15.5.11': resolution: {integrity: sha512-tS/HYQOjIoX9ZNDQitba/baS8sTvo3ekY6Vgdx5lmhN4jov082bdApIChXr94qhMZHvEciz9DZglFFnhguQp/A==} - '@next/swc-darwin-arm64@15.5.7': - resolution: {integrity: sha512-IZwtxCEpI91HVU/rAUOOobWSZv4P2DeTtNaCdHqLcTJU4wdNXgAySvKa/qJCgR5m6KI8UsKDXtO2B31jcaw1Yw==} + '@next/swc-darwin-arm64@16.1.7': + resolution: {integrity: sha512-b2wWIE8sABdyafc4IM8r5Y/dS6kD80JRtOGrUiKTsACFQfWWgUQ2NwoUX1yjFMXVsAwcQeNpnucF2ZrujsBBPg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.5.7': - resolution: {integrity: sha512-UP6CaDBcqaCBuiq/gfCEJw7sPEoX1aIjZHnBWN9v9qYHQdMKvCKcAVs4OX1vIjeE+tC5EIuwDTVIoXpUes29lg==} + '@next/swc-darwin-x64@16.1.7': + resolution: {integrity: sha512-zcnVaaZulS1WL0Ss38R5Q6D2gz7MtBu8GZLPfK+73D/hp4GFMrC2sudLky1QibfV7h6RJBJs/gOFvYP0X7UVlQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.5.7': - resolution: {integrity: sha512-NCslw3GrNIw7OgmRBxHtdWFQYhexoUCq+0oS2ccjyYLtcn1SzGzeM54jpTFonIMUjNbHmpKpziXnpxhSWLcmBA==} + '@next/swc-linux-arm64-gnu@16.1.7': + resolution: {integrity: sha512-2ant89Lux/Q3VyC8vNVg7uBaFVP9SwoK2jJOOR0L8TQnX8CAYnh4uctAScy2Hwj2dgjVHqHLORQZJ2wH6VxhSQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.5.7': - resolution: {integrity: sha512-nfymt+SE5cvtTrG9u1wdoxBr9bVB7mtKTcj0ltRn6gkP/2Nu1zM5ei8rwP9qKQP0Y//umK+TtkKgNtfboBxRrw==} + '@next/swc-linux-arm64-musl@16.1.7': + resolution: {integrity: sha512-uufcze7LYv0FQg9GnNeZ3/whYfo+1Q3HnQpm16o6Uyi0OVzLlk2ZWoY7j07KADZFY8qwDbsmFnMQP3p3+Ftprw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.5.7': - resolution: {integrity: sha512-hvXcZvCaaEbCZcVzcY7E1uXN9xWZfFvkNHwbe/n4OkRhFWrs1J1QV+4U1BN06tXLdaS4DazEGXwgqnu/VMcmqw==} + '@next/swc-linux-x64-gnu@16.1.7': + resolution: {integrity: sha512-KWVf2gxYvHtvuT+c4MBOGxuse5TD7DsMFYSxVxRBnOzok/xryNeQSjXgxSv9QpIVlaGzEn/pIuI6Koosx8CGWA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.5.7': - resolution: {integrity: sha512-4IUO539b8FmF0odY6/SqANJdgwn1xs1GkPO5doZugwZ3ETF6JUdckk7RGmsfSf7ws8Qb2YB5It33mvNL/0acqA==} + '@next/swc-linux-x64-musl@16.1.7': + resolution: {integrity: sha512-HguhaGwsGr1YAGs68uRKc4aGWxLET+NevJskOcCAwXbwj0fYX0RgZW2gsOCzr9S11CSQPIkxmoSbuVaBp4Z3dA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.5.7': - resolution: {integrity: sha512-CpJVTkYI3ZajQkC5vajM7/ApKJUOlm6uP4BknM3XKvJ7VXAvCqSjSLmM0LKdYzn6nBJVSjdclx8nYJSa3xlTgQ==} + '@next/swc-win32-arm64-msvc@16.1.7': + resolution: {integrity: sha512-S0n3KrDJokKTeFyM/vGGGR8+pCmXYrjNTk2ZozOL1C/JFdfUIL9O1ATaJOl5r2POe56iRChbsszrjMAdWSv7kQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.5.7': - resolution: {integrity: sha512-gMzgBX164I6DN+9/PGA+9dQiwmTkE4TloBNx8Kv9UiGARsr9Nba7IpcBRA1iTV9vwlYnrE3Uy6I7Aj6qLjQuqw==} + '@next/swc-win32-x64-msvc@16.1.7': + resolution: {integrity: sha512-mwgtg8CNZGYm06LeEd+bNnOUfwOyNem/rOiP14Lsz+AnUY92Zq/LXwtebtUiaeVkhbroRCQ0c8GlR4UT1U+0yg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1058,8 +1062,8 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@swc/helpers@0.5.17': - resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + '@swc/helpers@0.5.19': + resolution: {integrity: sha512-QamiFeIK3txNjgUTNppE6MiG3p7TdninpZu0E0PbqVh1a9FNLT2FRhisaa4NcaX52XVhA5l7Pk58Ft7Sqi/2sA==} '@szmarczak/http-timer@5.0.1': resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} @@ -1575,6 +1579,11 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + baseline-browser-mapping@2.10.8: + resolution: {integrity: sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==} + engines: {node: '>=6.0.0'} + hasBin: true + bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} @@ -1637,8 +1646,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001760: - resolution: {integrity: sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==} + caniuse-lite@1.0.30001780: + resolution: {integrity: sha512-llngX0E7nQci5BPJDqoZSbuZ5Bcs9F5db7EtgfwBerX9XGtkkiO4NwfDDIRzHTTwcYC8vC7bmeUEPGrKlR/TkQ==} chai@5.3.3: resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} @@ -2881,9 +2890,9 @@ packages: react: '>= 17.0.2' react-i18next: '>= 13.5.0' - next@15.5.11: - resolution: {integrity: sha512-L2KPiKmqTDpRdeVDdPjhf43g2/VPe0NCNndq7OKDCgOLWtxe1kbr/zXGIZtYY7kZEAjRf7Bj/mwUFSr+tYC2Yg==} - engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + next@16.1.7: + resolution: {integrity: sha512-WM0L7WrSvKwoLegLYr6V+mz+RIofqQgVAfHhMp9a88ms0cFX8iX9ew+snpWlSBwpkURJOUdvCEt3uLl3NNzvWg==} + engines: {node: '>=20.9.0'} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 @@ -3299,8 +3308,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} hasBin: true @@ -3946,6 +3955,8 @@ snapshots: '@babel/runtime@7.28.6': {} + '@babel/runtime@7.29.2': {} + '@babel/types@7.29.0': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -3995,7 +4006,7 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.7.1': + '@emnapi/runtime@1.9.0': dependencies: tslib: 2.8.1 optional: true @@ -4201,7 +4212,7 @@ snapshots: '@humanwhocodes/retry@0.4.2': {} - '@img/colour@1.0.0': + '@img/colour@1.1.0': optional: true '@img/sharp-darwin-arm64@0.34.5': @@ -4286,7 +4297,7 @@ snapshots: '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.7.1 + '@emnapi/runtime': 1.9.0 optional: true '@img/sharp-win32-arm64@0.34.5': @@ -4370,38 +4381,38 @@ snapshots: '@napi-rs/wasm-runtime@0.2.8': dependencies: '@emnapi/core': 1.4.0 - '@emnapi/runtime': 1.7.1 + '@emnapi/runtime': 1.9.0 '@tybys/wasm-util': 0.9.0 optional: true - '@next/env@15.5.11': {} + '@next/env@16.1.7': {} '@next/eslint-plugin-next@15.5.11': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.5.7': + '@next/swc-darwin-arm64@16.1.7': optional: true - '@next/swc-darwin-x64@15.5.7': + '@next/swc-darwin-x64@16.1.7': optional: true - '@next/swc-linux-arm64-gnu@15.5.7': + '@next/swc-linux-arm64-gnu@16.1.7': optional: true - '@next/swc-linux-arm64-musl@15.5.7': + '@next/swc-linux-arm64-musl@16.1.7': optional: true - '@next/swc-linux-x64-gnu@15.5.7': + '@next/swc-linux-x64-gnu@16.1.7': optional: true - '@next/swc-linux-x64-musl@15.5.7': + '@next/swc-linux-x64-musl@16.1.7': optional: true - '@next/swc-win32-arm64-msvc@15.5.7': + '@next/swc-win32-arm64-msvc@16.1.7': optional: true - '@next/swc-win32-x64-msvc@15.5.7': + '@next/swc-win32-x64-msvc@16.1.7': optional: true '@nodelib/fs.scandir@2.1.5': @@ -4451,7 +4462,7 @@ snapshots: '@react-aria/interactions': 3.25.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@react-aria/utils': 3.31.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@react-types/shared': 3.32.1(react@19.2.4) - '@swc/helpers': 0.5.17 + '@swc/helpers': 0.5.19 clsx: 2.1.1 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) @@ -4462,13 +4473,13 @@ snapshots: '@react-aria/utils': 3.31.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@react-stately/flags': 3.1.2 '@react-types/shared': 3.32.1(react@19.2.4) - '@swc/helpers': 0.5.17 + '@swc/helpers': 0.5.19 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) '@react-aria/ssr@3.9.10(react@19.2.4)': dependencies: - '@swc/helpers': 0.5.17 + '@swc/helpers': 0.5.19 react: 19.2.4 '@react-aria/utils@3.31.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': @@ -4477,18 +4488,18 @@ snapshots: '@react-stately/flags': 3.1.2 '@react-stately/utils': 3.10.8(react@19.2.4) '@react-types/shared': 3.32.1(react@19.2.4) - '@swc/helpers': 0.5.17 + '@swc/helpers': 0.5.19 clsx: 2.1.1 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) '@react-stately/flags@3.1.2': dependencies: - '@swc/helpers': 0.5.17 + '@swc/helpers': 0.5.19 '@react-stately/utils@3.10.8(react@19.2.4)': dependencies: - '@swc/helpers': 0.5.17 + '@swc/helpers': 0.5.19 react: 19.2.4 '@react-types/shared@3.32.1(react@19.2.4)': @@ -4601,7 +4612,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@swc/helpers@0.5.17': + '@swc/helpers@0.5.19': dependencies: tslib: 2.8.1 @@ -4694,7 +4705,7 @@ snapshots: '@testing-library/dom@10.4.1': dependencies: '@babel/code-frame': 7.29.0 - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@types/aria-query': 5.0.4 aria-query: 5.3.0 dom-accessibility-api: 0.5.16 @@ -4866,7 +4877,7 @@ snapshots: fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.3 + semver: 7.7.4 ts-api-utils: 2.1.0(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: @@ -5149,6 +5160,8 @@ snapshots: base64-js@1.5.1: {} + baseline-browser-mapping@2.10.8: {} + bcrypt-pbkdf@1.0.2: dependencies: tweetnacl: 0.14.5 @@ -5224,7 +5237,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001760: {} + caniuse-lite@1.0.30001780: {} chai@5.3.3: dependencies: @@ -6245,7 +6258,7 @@ snapshots: is-bun-module@2.0.0: dependencies: - semver: 7.7.3 + semver: 7.7.4 is-callable@1.2.7: {} @@ -6566,7 +6579,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.3 + semver: 7.7.4 math-intrinsics@1.1.0: {} @@ -6631,7 +6644,7 @@ snapshots: net@1.0.2: {} - next-i18next@15.4.3(@types/react@19.0.10)(i18next@25.8.0(typescript@5.7.3))(next@15.5.11(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-i18next@15.5.3(i18next@25.8.0(typescript@5.7.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.7.3))(react@19.2.4): + next-i18next@15.4.3(@types/react@19.0.10)(i18next@25.8.0(typescript@5.7.3))(next@16.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-i18next@15.5.3(i18next@25.8.0(typescript@5.7.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.7.3))(react@19.2.4): dependencies: '@babel/runtime': 7.28.6 '@types/hoist-non-react-statics': 3.3.7(@types/react@19.0.10) @@ -6639,30 +6652,31 @@ snapshots: hoist-non-react-statics: 3.3.2 i18next: 25.8.0(typescript@5.7.3) i18next-fs-backend: 2.6.1 - next: 15.5.11(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next: 16.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-i18next: 15.5.3(i18next@25.8.0(typescript@5.7.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.7.3) transitivePeerDependencies: - '@types/react' - next@15.5.11(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + next@16.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - '@next/env': 15.5.11 + '@next/env': 16.1.7 '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001760 + baseline-browser-mapping: 2.10.8 + caniuse-lite: 1.0.30001780 postcss: 8.4.31 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) styled-jsx: 5.1.6(react@19.2.4) optionalDependencies: - '@next/swc-darwin-arm64': 15.5.7 - '@next/swc-darwin-x64': 15.5.7 - '@next/swc-linux-arm64-gnu': 15.5.7 - '@next/swc-linux-arm64-musl': 15.5.7 - '@next/swc-linux-x64-gnu': 15.5.7 - '@next/swc-linux-x64-musl': 15.5.7 - '@next/swc-win32-arm64-msvc': 15.5.7 - '@next/swc-win32-x64-msvc': 15.5.7 + '@next/swc-darwin-arm64': 16.1.7 + '@next/swc-darwin-x64': 16.1.7 + '@next/swc-linux-arm64-gnu': 16.1.7 + '@next/swc-linux-arm64-musl': 16.1.7 + '@next/swc-linux-x64-gnu': 16.1.7 + '@next/swc-linux-x64-musl': 16.1.7 + '@next/swc-win32-arm64-msvc': 16.1.7 + '@next/swc-win32-x64-msvc': 16.1.7 sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' @@ -7099,7 +7113,7 @@ snapshots: semver@6.3.1: {} - semver@7.7.3: {} + semver@7.7.4: {} set-function-length@1.2.2: dependencies: @@ -7127,9 +7141,9 @@ snapshots: sharp@0.34.5: dependencies: - '@img/colour': 1.0.0 + '@img/colour': 1.1.0 detect-libc: 2.1.2 - semver: 7.7.3 + semver: 7.7.4 optionalDependencies: '@img/sharp-darwin-arm64': 0.34.5 '@img/sharp-darwin-x64': 0.34.5 From 6e850bfed89e248477b82420e1c0185a58c1df47 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 18 Mar 2026 11:44:25 -0700 Subject: [PATCH 12/28] Use webpack flag in Next build script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 20780916d..4fadee7a7 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "scripts": { "preinstall": "npx only-allow pnpm", "dev": "next dev", - "build": "next build", + "build": "next build --webpack", "start": "next start", "lint": "eslint .", "test": "vitest run", From daa1c27d9b8752a98f7fe5b34c9bb8eb205977ea Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 18 Mar 2026 11:48:38 -0700 Subject: [PATCH 13/28] Bump Node.js version in docker-publish workflow --- .github/workflows/docker-publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index e1cd86e87..ecdaece41 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -41,7 +41,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v6 with: - node-version: 20 + node-version: 24 cache: 'pnpm' - name: Install dependencies @@ -100,7 +100,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v6 with: - node-version: 20 + node-version: 24 cache: 'pnpm' - name: Install dependencies From de0c8558fbfaa5f241e889a8b54fd09997bc6dfb Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 18 Mar 2026 11:54:54 -0700 Subject: [PATCH 14/28] Add webpack exclude to dynamic import --- src/widgets/calendar/component.jsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/widgets/calendar/component.jsx b/src/widgets/calendar/component.jsx index b97f4d46d..9295f0770 100644 --- a/src/widgets/calendar/component.jsx +++ b/src/widgets/calendar/component.jsx @@ -73,7 +73,13 @@ export default function Component({ service }) { ?.filter((integration) => integration?.type) .map((integration) => ({ // Include the extension so Vite/Vitest can statically validate the import base. - service: dynamic(() => import(`./integrations/${integration.type}.jsx`)), + service: dynamic( + () => + import( + /* webpackExclude: /\.test\.jsx$/ */ + `./integrations/${integration.type}.jsx` + ), + ), widget: { ...widget, ...integration }, })) ?? [], [widget], From 657dc917b4816e9fb8aa23353db0d2ae021a5889 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 18 Mar 2026 11:58:01 -0700 Subject: [PATCH 15/28] Relax Dependabot schedule and add cooldowns --- .github/dependabot.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index ba1b1fb02..9a53b3a6c 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -8,8 +8,12 @@ updates: - package-ecosystem: "github-actions" directory: "/" schedule: - interval: "daily" + interval: "weekly" + cooldown: + default-days: 7 - package-ecosystem: "npm" directory: "/" schedule: interval: "monthly" + cooldown: + default-days: 7 From f70dcd6a0379d5081d49af7577b0f901f0308dfc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 19:06:57 +0000 Subject: [PATCH 16/28] Chore(deps): Bump flatted from 3.3.3 to 3.4.2 in the npm_and_yarn group across 1 directory (#6439) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 043a82575..e946b491d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2206,8 +2206,8 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} @@ -4724,7 +4724,7 @@ snapshots: '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react@19.0.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@testing-library/dom': 10.4.1 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) @@ -5973,10 +5973,10 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.3.3 + flatted: 3.4.2 keyv: 4.5.4 - flatted@3.3.3: {} + flatted@3.4.2: {} fn.name@1.1.0: {} From 9893c5e846e810ee710b32e8169d0b20010e7cc7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 12:14:16 -0700 Subject: [PATCH 17/28] Chore(deps): Bump swr from 2.4.0 to 2.4.1 (#6441) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 4fadee7a7..d91e736e5 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "react-i18next": "^15.5.3", "react-icons": "^5.5.0", "recharts": "^3.1.2", - "swr": "^2.4.0", + "swr": "^2.4.1", "systeminformation": "^5.27.11", "tough-cookie": "^6.0.0", "urbackup-server-api": "^0.91.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e946b491d..baf1bd552 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -81,8 +81,8 @@ importers: specifier: ^3.1.2 version: 3.1.2(@types/react@19.0.10)(react-dom@19.2.4(react@19.2.4))(react-is@18.3.1)(react@19.2.4)(redux@5.0.1) swr: - specifier: ^2.4.0 - version: 2.4.0(react@19.2.4) + specifier: ^2.4.1 + version: 2.4.1(react@19.2.4) systeminformation: specifier: ^5.27.11 version: 5.27.11 @@ -3491,8 +3491,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - swr@2.4.0: - resolution: {integrity: sha512-sUlC20T8EOt1pHmDiqueUWMmRRX03W7w5YxovWX7VR2KHEPCTMly85x05vpkP5i6Bu4h44ePSMD9Tc+G2MItFw==} + swr@2.4.1: + resolution: {integrity: sha512-2CC6CiKQtEwaEeNiqWTAw9PGykW8SR5zZX8MZk6TeAvEAnVS7Visz8WzphqgtQ8v2xz/4Q5K+j+SeMaKXeeQIA==} peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -7352,7 +7352,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - swr@2.4.0(react@19.2.4): + swr@2.4.1(react@19.2.4): dependencies: dequal: 2.0.3 react: 19.2.4 From 311f2326863418193534a68164ca710af47932ca Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 18 Mar 2026 12:28:27 -0700 Subject: [PATCH 18/28] Add translation category and Crowdin PR label --- .github/release-drafter.yml | 7 +++++++ .github/workflows/crowdin.yml | 1 + 2 files changed, 8 insertions(+) diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index f7c315340..eac6e295a 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -17,6 +17,7 @@ version-resolver: - 'bug' - 'fix' - 'dependencies' + - 'translation' - 'documentation' default: patch @@ -38,6 +39,9 @@ categories: - 'dependencies' - 'ci' - 'chore' + - title: '🌐 Translations' + labels: + - 'translation' - title: '📚 Documentation' labels: - 'documentation' @@ -72,6 +76,9 @@ autolabeler: - 'Dockerfile*' - 'docker-entrypoint.sh' - 'k3d/**' + + - label: 'translation' + files: - 'public/locales/**' template: | diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml index f417cac7a..a841c7b76 100644 --- a/.github/workflows/crowdin.yml +++ b/.github/workflows/crowdin.yml @@ -25,6 +25,7 @@ jobs: download_translations: true crowdin_branch_name: dev localization_branch_name: l10n_dev + pull_request_labels: translation env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} From 2b65a0df04ab0b741835f4fbd9cdcb8831e7b8d1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 23:27:16 +0000 Subject: [PATCH 19/28] Chore(deps): Bump react-icons from 5.5.0 to 5.6.0 (#6443) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index d91e736e5..e530946ec 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "react": "^19.2.4", "react-dom": "^19.2.4", "react-i18next": "^15.5.3", - "react-icons": "^5.5.0", + "react-icons": "^5.6.0", "recharts": "^3.1.2", "swr": "^2.4.1", "systeminformation": "^5.27.11", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index baf1bd552..e80dda2f5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -75,8 +75,8 @@ importers: specifier: ^15.5.3 version: 15.5.3(i18next@25.8.0(typescript@5.7.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.7.3) react-icons: - specifier: ^5.5.0 - version: 5.5.0(react@19.2.4) + specifier: ^5.6.0 + version: 5.6.0(react@19.2.4) recharts: specifier: ^3.1.2 version: 3.1.2(@types/react@19.0.10)(react-dom@19.2.4(react@19.2.4))(react-is@18.3.1)(react@19.2.4)(redux@5.0.1) @@ -3141,8 +3141,8 @@ packages: typescript: optional: true - react-icons@5.5.0: - resolution: {integrity: sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==} + react-icons@5.6.0: + resolution: {integrity: sha512-RH93p5ki6LfOiIt0UtDyNg/cee+HLVR6cHHtW3wALfo+eOHTp8RnU2kRkI6E+H19zMIs03DyxUG/GfZMOGvmiA==} peerDependencies: react: '*' @@ -6904,7 +6904,7 @@ snapshots: react-dom: 19.2.4(react@19.2.4) typescript: 5.7.3 - react-icons@5.5.0(react@19.2.4): + react-icons@5.6.0(react@19.2.4): dependencies: react: 19.2.4 From d18bdb011af88da7075d3c7d93f1b2ef16878587 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 23:36:36 +0000 Subject: [PATCH 20/28] Chore(deps): Bump urbackup-server-api from 0.91.0 to 0.92.2 (#6444) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index e530946ec..caf1e341c 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "swr": "^2.4.1", "systeminformation": "^5.27.11", "tough-cookie": "^6.0.0", - "urbackup-server-api": "^0.91.0", + "urbackup-server-api": "^0.92.2", "winston": "^3.19.0", "ws": "^8.18.3", "xml-js": "^1.6.11" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e80dda2f5..1beb87628 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -90,8 +90,8 @@ importers: specifier: ^6.0.0 version: 6.0.0 urbackup-server-api: - specifier: ^0.91.0 - version: 0.91.0 + specifier: ^0.92.2 + version: 0.92.2 winston: specifier: ^3.19.0 version: 3.19.0 @@ -3674,8 +3674,8 @@ packages: unrs-resolver@1.3.3: resolution: {integrity: sha512-PFLAGQzYlyjniXdbmQ3dnGMZJXX5yrl2YS4DLRfR3BhgUsE1zpRIrccp9XMOGRfIHpdFvCn/nr5N1KMVda4x3A==} - urbackup-server-api@0.91.0: - resolution: {integrity: sha512-N1CSnGSCSHjwWfGOp6jE56mHYoZor/p++ii8yPsN9P/3cKLBgCvrAZxAbfi+IgK9FZpQEx/kPX1R8OTJRy+x6A==} + urbackup-server-api@0.92.2: + resolution: {integrity: sha512-IAillb3OVONurnh4CULwXpJ0jZXTsWKEBfp88qjf7k2vEzRDtBQqffMxanZkwRwYJ48LkOr5mz+QgPwWbkiVkw==} uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -7555,7 +7555,7 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.3.3 '@unrs/resolver-binding-win32-x64-msvc': 1.3.3 - urbackup-server-api@0.91.0: + urbackup-server-api@0.92.2: dependencies: async-mutex: 0.5.0 From 495065a6fa9853581b98112588f1fdabbf3174f9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 23:50:19 +0000 Subject: [PATCH 21/28] Chore(deps-dev): Bump eslint-plugin-prettier from 5.5.4 to 5.5.5 (#6442) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 26 +++++++++++++------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index caf1e341c..9e3657862 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "eslint-config-prettier": "^10.1.8", "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.2", - "eslint-plugin-prettier": "^5.5.4", + "eslint-plugin-prettier": "^5.5.5", "eslint-plugin-react": "^7.37.4", "eslint-plugin-react-hooks": "^5.2.0", "jsdom": "^28.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1beb87628..ce30456a2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -142,8 +142,8 @@ importers: specifier: ^6.10.2 version: 6.10.2(eslint@9.25.1(jiti@2.6.1)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.25.1(jiti@2.6.1)))(eslint@9.25.1(jiti@2.6.1))(prettier@3.8.1) + specifier: ^5.5.5 + version: 5.5.5(eslint-config-prettier@10.1.8(eslint@9.25.1(jiti@2.6.1)))(eslint@9.25.1(jiti@2.6.1))(prettier@3.8.1) eslint-plugin-react: specifier: ^7.37.4 version: 7.37.4(eslint@9.25.1(jiti@2.6.1)) @@ -2061,8 +2061,8 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - eslint-plugin-prettier@5.5.4: - resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==} + eslint-plugin-prettier@5.5.5: + resolution: {integrity: sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -3060,8 +3060,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + prettier-linter-helpers@1.0.1: + resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} engines: {node: '>=6.0.0'} prettier-plugin-organize-imports@4.3.0: @@ -3499,8 +3499,8 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - synckit@0.11.11: - resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} + synckit@0.11.12: + resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==} engines: {node: ^14.18.0 || >=16.0.0} systeminformation@5.27.11: @@ -5802,12 +5802,12 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.25.1(jiti@2.6.1)))(eslint@9.25.1(jiti@2.6.1))(prettier@3.8.1): + eslint-plugin-prettier@5.5.5(eslint-config-prettier@10.1.8(eslint@9.25.1(jiti@2.6.1)))(eslint@9.25.1(jiti@2.6.1))(prettier@3.8.1): dependencies: eslint: 9.25.1(jiti@2.6.1) prettier: 3.8.1 - prettier-linter-helpers: 1.0.0 - synckit: 0.11.11 + prettier-linter-helpers: 1.0.1 + synckit: 0.11.12 optionalDependencies: eslint-config-prettier: 10.1.8(eslint@9.25.1(jiti@2.6.1)) @@ -6823,7 +6823,7 @@ snapshots: prelude-ls@1.2.1: {} - prettier-linter-helpers@1.0.0: + prettier-linter-helpers@1.0.1: dependencies: fast-diff: 1.3.0 @@ -7360,7 +7360,7 @@ snapshots: symbol-tree@3.2.4: {} - synckit@0.11.11: + synckit@0.11.12: dependencies: '@pkgr/core': 0.2.9 From f261879fcb130f11a2ad3fca675382f921076479 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Mar 2026 00:00:36 +0000 Subject: [PATCH 22/28] Chore(deps): Bump the npm_and_yarn group across 1 directory with 5 updates (#6445) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 270 +++++++++++++++++++++++-------------------------- 2 files changed, 127 insertions(+), 145 deletions(-) diff --git a/package.json b/package.json index 9e3657862..199cc05d3 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "react-icons": "^5.6.0", "recharts": "^3.1.2", "swr": "^2.4.1", - "systeminformation": "^5.27.11", + "systeminformation": "^5.30.8", "tough-cookie": "^6.0.0", "urbackup-server-api": "^0.92.2", "winston": "^3.19.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ce30456a2..a112d946d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,8 +84,8 @@ importers: specifier: ^2.4.1 version: 2.4.1(react@19.2.4) systeminformation: - specifier: ^5.27.11 - version: 5.27.11 + specifier: ^5.30.8 + version: 5.30.8 tough-cookie: specifier: ^6.0.0 version: 6.0.0 @@ -915,128 +915,128 @@ packages: react-redux: optional: true - '@rollup/rollup-android-arm-eabi@4.57.1': - resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} + '@rollup/rollup-android-arm-eabi@4.59.0': + resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.57.1': - resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} + '@rollup/rollup-android-arm64@4.59.0': + resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.57.1': - resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} + '@rollup/rollup-darwin-arm64@4.59.0': + resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.57.1': - resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} + '@rollup/rollup-darwin-x64@4.59.0': + resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.57.1': - resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} + '@rollup/rollup-freebsd-arm64@4.59.0': + resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.57.1': - resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} + '@rollup/rollup-freebsd-x64@4.59.0': + resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': - resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': + resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.57.1': - resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} + '@rollup/rollup-linux-arm-musleabihf@4.59.0': + resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.57.1': - resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} + '@rollup/rollup-linux-arm64-gnu@4.59.0': + resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.57.1': - resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} + '@rollup/rollup-linux-arm64-musl@4.59.0': + resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.57.1': - resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} + '@rollup/rollup-linux-loong64-gnu@4.59.0': + resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-loong64-musl@4.57.1': - resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} + '@rollup/rollup-linux-loong64-musl@4.59.0': + resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.57.1': - resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} + '@rollup/rollup-linux-ppc64-gnu@4.59.0': + resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-ppc64-musl@4.57.1': - resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} + '@rollup/rollup-linux-ppc64-musl@4.59.0': + resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.57.1': - resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} + '@rollup/rollup-linux-riscv64-gnu@4.59.0': + resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.57.1': - resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} + '@rollup/rollup-linux-riscv64-musl@4.59.0': + resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.57.1': - resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} + '@rollup/rollup-linux-s390x-gnu@4.59.0': + resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.57.1': - resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} + '@rollup/rollup-linux-x64-gnu@4.59.0': + resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.57.1': - resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} + '@rollup/rollup-linux-x64-musl@4.59.0': + resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} cpu: [x64] os: [linux] - '@rollup/rollup-openbsd-x64@4.57.1': - resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} + '@rollup/rollup-openbsd-x64@4.59.0': + resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.57.1': - resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} + '@rollup/rollup-openharmony-arm64@4.59.0': + resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.57.1': - resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} + '@rollup/rollup-win32-arm64-msvc@4.59.0': + resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.57.1': - resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} + '@rollup/rollup-win32-ia32-msvc@4.59.0': + resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.57.1': - resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} + '@rollup/rollup-win32-x64-gnu@4.59.0': + resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.57.1': - resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} + '@rollup/rollup-win32-x64-msvc@4.59.0': + resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} cpu: [x64] os: [win32] @@ -1460,8 +1460,8 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.14.0: + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -2852,18 +2852,13 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - minizlib@3.0.1: - resolution: {integrity: sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==} + minizlib@3.1.0: + resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} engines: {node: '>= 18'} mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - hasBin: true - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -3250,12 +3245,8 @@ packages: rfc4648@1.5.4: resolution: {integrity: sha512-rRg/6Lb+IGfJqO05HZkN50UtY7K/JhxJag1kP23+zyMfrvoB0B7RWv06MbOzoc79RgCdNTiUaNsTT1AJZ7Z+cg==} - rimraf@5.0.10: - resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} - hasBin: true - - rollup@4.57.1: - resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} + rollup@4.59.0: + resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3503,8 +3494,8 @@ packages: resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==} engines: {node: ^14.18.0 || >=16.0.0} - systeminformation@5.27.11: - resolution: {integrity: sha512-K3Lto/2m3K2twmKHdgx5B+0in9qhXK4YnoT9rIlgwN/4v7OV5c8IjbeAUkuky/6VzCQC7iKCAqi8rZathCdjHg==} + systeminformation@5.30.8: + resolution: {integrity: sha512-imB8LwJCc2DkufKlSRHfzbjhheGzpg1P31A4c55IKTq/ll6Agn1rhBOY+WmS/hyg5inGFp7AyZIK0gvq5rFO2Q==} engines: {node: '>=8.0.0'} os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] hasBin: true @@ -3532,10 +3523,9 @@ packages: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} - tar@7.4.3: - resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + tar@7.5.11: + resolution: {integrity: sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==} engines: {node: '>=18'} - deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me telnet-client@2.2.6: resolution: {integrity: sha512-ZUYrLsPtQupQww3eSEORDVOb6ztdtKEghya6TVXPo2tg/UQq2pn5rHhvwuUvyYpbnsoqdNY1fyD1GNkXHR8dYA==} @@ -3663,8 +3653,8 @@ packages: undici-types@7.8.0: resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} - undici@7.22.0: - resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==} + undici@7.24.4: + resolution: {integrity: sha512-BM/JzwwaRXxrLdElV2Uo6cTLEjhSb3WXboncJamZ15NgUURmvlXvxa6xkwIOILIjPNo9i8ku136ZvWV0Uly8+w==} engines: {node: '>=20.18.1'} unpipe@1.0.0: @@ -4127,7 +4117,7 @@ snapshots: '@eslint/eslintrc@3.3.3': dependencies: - ajv: 6.12.6 + ajv: 6.14.0 debug: 4.4.1 espree: 10.3.0 globals: 14.0.0 @@ -4369,7 +4359,7 @@ snapshots: openid-client: 6.3.0 rfc4648: 1.5.4 stream-buffers: 3.0.3 - tar: 7.4.3 + tar: 7.5.11 tmp-promise: 3.0.3 tslib: 2.8.1 ws: 8.18.3 @@ -4518,79 +4508,79 @@ snapshots: react: 19.2.4 react-redux: 9.2.0(@types/react@19.0.10)(react@19.2.4)(redux@5.0.1) - '@rollup/rollup-android-arm-eabi@4.57.1': + '@rollup/rollup-android-arm-eabi@4.59.0': optional: true - '@rollup/rollup-android-arm64@4.57.1': + '@rollup/rollup-android-arm64@4.59.0': optional: true - '@rollup/rollup-darwin-arm64@4.57.1': + '@rollup/rollup-darwin-arm64@4.59.0': optional: true - '@rollup/rollup-darwin-x64@4.57.1': + '@rollup/rollup-darwin-x64@4.59.0': optional: true - '@rollup/rollup-freebsd-arm64@4.57.1': + '@rollup/rollup-freebsd-arm64@4.59.0': optional: true - '@rollup/rollup-freebsd-x64@4.57.1': + '@rollup/rollup-freebsd-x64@4.59.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.57.1': + '@rollup/rollup-linux-arm-musleabihf@4.59.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.57.1': + '@rollup/rollup-linux-arm64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.57.1': + '@rollup/rollup-linux-arm64-musl@4.59.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.57.1': + '@rollup/rollup-linux-loong64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-loong64-musl@4.57.1': + '@rollup/rollup-linux-loong64-musl@4.59.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.57.1': + '@rollup/rollup-linux-ppc64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-ppc64-musl@4.57.1': + '@rollup/rollup-linux-ppc64-musl@4.59.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.57.1': + '@rollup/rollup-linux-riscv64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.57.1': + '@rollup/rollup-linux-riscv64-musl@4.59.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.57.1': + '@rollup/rollup-linux-s390x-gnu@4.59.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.57.1': + '@rollup/rollup-linux-x64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-x64-musl@4.57.1': + '@rollup/rollup-linux-x64-musl@4.59.0': optional: true - '@rollup/rollup-openbsd-x64@4.57.1': + '@rollup/rollup-openbsd-x64@4.59.0': optional: true - '@rollup/rollup-openharmony-arm64@4.57.1': + '@rollup/rollup-openharmony-arm64@4.59.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.57.1': + '@rollup/rollup-win32-arm64-msvc@4.59.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.57.1': + '@rollup/rollup-win32-ia32-msvc@4.59.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.57.1': + '@rollup/rollup-win32-x64-gnu@4.59.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.57.1': + '@rollup/rollup-win32-x64-msvc@4.59.0': optional: true '@rtsao/scc@1.1.0': {} @@ -5015,7 +5005,7 @@ snapshots: agent-base@7.1.4: {} - ajv@6.12.6: + ajv@6.14.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -5861,7 +5851,7 @@ snapshots: '@humanwhocodes/retry': 0.4.2 '@types/estree': 1.0.7 '@types/json-schema': 7.0.15 - ajv: 6.12.6 + ajv: 6.14.0 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.0 @@ -6429,7 +6419,7 @@ snapshots: saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 6.0.0 - undici: 7.22.0 + undici: 7.24.4 w3c-xmlserializer: 5.0.0 webidl-conversions: 8.0.1 whatwg-mimetype: 5.0.0 @@ -6624,15 +6614,12 @@ snapshots: minipass@7.1.2: {} - minizlib@3.0.1: + minizlib@3.1.0: dependencies: minipass: 7.1.2 - rimraf: 5.0.10 mkdirp-classic@0.5.3: {} - mkdirp@3.0.1: {} - ms@2.1.3: {} nan@2.23.0: @@ -7031,39 +7018,35 @@ snapshots: rfc4648@1.5.4: {} - rimraf@5.0.10: - dependencies: - glob: 10.4.5 - - rollup@4.57.1: + rollup@4.59.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.57.1 - '@rollup/rollup-android-arm64': 4.57.1 - '@rollup/rollup-darwin-arm64': 4.57.1 - '@rollup/rollup-darwin-x64': 4.57.1 - '@rollup/rollup-freebsd-arm64': 4.57.1 - '@rollup/rollup-freebsd-x64': 4.57.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 - '@rollup/rollup-linux-arm-musleabihf': 4.57.1 - '@rollup/rollup-linux-arm64-gnu': 4.57.1 - '@rollup/rollup-linux-arm64-musl': 4.57.1 - '@rollup/rollup-linux-loong64-gnu': 4.57.1 - '@rollup/rollup-linux-loong64-musl': 4.57.1 - '@rollup/rollup-linux-ppc64-gnu': 4.57.1 - '@rollup/rollup-linux-ppc64-musl': 4.57.1 - '@rollup/rollup-linux-riscv64-gnu': 4.57.1 - '@rollup/rollup-linux-riscv64-musl': 4.57.1 - '@rollup/rollup-linux-s390x-gnu': 4.57.1 - '@rollup/rollup-linux-x64-gnu': 4.57.1 - '@rollup/rollup-linux-x64-musl': 4.57.1 - '@rollup/rollup-openbsd-x64': 4.57.1 - '@rollup/rollup-openharmony-arm64': 4.57.1 - '@rollup/rollup-win32-arm64-msvc': 4.57.1 - '@rollup/rollup-win32-ia32-msvc': 4.57.1 - '@rollup/rollup-win32-x64-gnu': 4.57.1 - '@rollup/rollup-win32-x64-msvc': 4.57.1 + '@rollup/rollup-android-arm-eabi': 4.59.0 + '@rollup/rollup-android-arm64': 4.59.0 + '@rollup/rollup-darwin-arm64': 4.59.0 + '@rollup/rollup-darwin-x64': 4.59.0 + '@rollup/rollup-freebsd-arm64': 4.59.0 + '@rollup/rollup-freebsd-x64': 4.59.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.59.0 + '@rollup/rollup-linux-arm-musleabihf': 4.59.0 + '@rollup/rollup-linux-arm64-gnu': 4.59.0 + '@rollup/rollup-linux-arm64-musl': 4.59.0 + '@rollup/rollup-linux-loong64-gnu': 4.59.0 + '@rollup/rollup-linux-loong64-musl': 4.59.0 + '@rollup/rollup-linux-ppc64-gnu': 4.59.0 + '@rollup/rollup-linux-ppc64-musl': 4.59.0 + '@rollup/rollup-linux-riscv64-gnu': 4.59.0 + '@rollup/rollup-linux-riscv64-musl': 4.59.0 + '@rollup/rollup-linux-s390x-gnu': 4.59.0 + '@rollup/rollup-linux-x64-gnu': 4.59.0 + '@rollup/rollup-linux-x64-musl': 4.59.0 + '@rollup/rollup-openbsd-x64': 4.59.0 + '@rollup/rollup-openharmony-arm64': 4.59.0 + '@rollup/rollup-win32-arm64-msvc': 4.59.0 + '@rollup/rollup-win32-ia32-msvc': 4.59.0 + '@rollup/rollup-win32-x64-gnu': 4.59.0 + '@rollup/rollup-win32-x64-msvc': 4.59.0 fsevents: 2.3.3 run-parallel@1.2.0: @@ -7364,7 +7347,7 @@ snapshots: dependencies: '@pkgr/core': 0.2.9 - systeminformation@5.27.11: {} + systeminformation@5.30.8: {} tabbable@6.3.0: {} @@ -7394,13 +7377,12 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - tar@7.4.3: + tar@7.5.11: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 minipass: 7.1.2 - minizlib: 3.0.1 - mkdirp: 3.0.1 + minizlib: 3.1.0 yallist: 5.0.0 telnet-client@2.2.6: @@ -7533,7 +7515,7 @@ snapshots: undici-types@7.8.0: {} - undici@7.22.0: {} + undici@7.24.4: {} unpipe@1.0.0: {} @@ -7621,7 +7603,7 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.57.1 + rollup: 4.59.0 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 24.1.0 From 96e3c7ac45940d401670f5c87f75d14f3e662249 Mon Sep 17 00:00:00 2001 From: Zhenzhong Tang Date: Fri, 20 Mar 2026 02:54:52 -0400 Subject: [PATCH 23/28] Fix: remove trailing space from Watchtower widget loading label (#6448) --- src/widgets/watchtower/component.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/watchtower/component.jsx b/src/widgets/watchtower/component.jsx index 58b2a3f5b..4e59a36bf 100644 --- a/src/widgets/watchtower/component.jsx +++ b/src/widgets/watchtower/component.jsx @@ -18,7 +18,7 @@ export default function Component({ service }) { if (!watchData) { return ( - + From 3fb2dcbc47a07c1e09a6a81f943f718d5e2b4a3f Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 25 Mar 2026 21:01:55 -0700 Subject: [PATCH 24/28] Chore: return to gh runners (#6462) --- .github/workflows/docker-publish.yml | 2 +- README.md | 7 ------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index ecdaece41..72ee1c58b 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -53,7 +53,7 @@ jobs: build: name: Docker Build & Push if: github.repository == 'gethomepage/homepage' - runs-on: self-hosted + runs-on: ubuntu-22.04 needs: [ pre-commit ] permissions: contents: read diff --git a/README.md b/README.md index 7ac6f61f7..14931ca7c 100644 --- a/README.md +++ b/README.md @@ -27,13 +27,6 @@ GitHub Sponsors

-

- DigitalOcean Referral Badge -

-

-Homepage builds are kindly powered by DigitalOcean. -

- # Features With features like quick search, bookmarks, weather support, a wide range of integrations and widgets, an elegant and modern design, and a focus on performance, Homepage is your ideal start to the day and a handy companion throughout it. From ea9fca02d31ed1a1d53781bf6107b7550ed5cbe3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 04:09:24 +0000 Subject: [PATCH 25/28] Chore(deps): Bump picomatch from 2.3.1 to 2.3.2 in the npm_and_yarn group across 1 directory (#6460) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 42 ++++++++++++++++++------------------------ 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a112d946d..12eba6264 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3023,16 +3023,12 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} - - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} ping@0.4.4: @@ -5938,13 +5934,13 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.4.3(picomatch@4.0.2): + fdir@6.4.3(picomatch@4.0.4): optionalDependencies: - picomatch: 4.0.2 + picomatch: 4.0.4 - fdir@6.5.0(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.4): optionalDependencies: - picomatch: 4.0.3 + picomatch: 4.0.4 fecha@4.2.3: {} @@ -6582,7 +6578,7 @@ snapshots: micromatch@4.0.8: dependencies: braces: 3.0.3 - picomatch: 2.3.1 + picomatch: 2.3.2 mime-db@1.52.0: {} @@ -6786,11 +6782,9 @@ snapshots: picocolors@1.1.1: {} - picomatch@2.3.1: {} + picomatch@2.3.2: {} - picomatch@4.0.2: {} - - picomatch@4.0.3: {} + picomatch@4.0.4: {} ping@0.4.4: {} @@ -7406,13 +7400,13 @@ snapshots: tinyglobby@0.2.12: dependencies: - fdir: 6.4.3(picomatch@4.0.2) - picomatch: 4.0.2 + fdir: 6.4.3(picomatch@4.0.4) + picomatch: 4.0.4 tinyglobby@0.2.15: dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 tinypool@1.1.1: {} @@ -7600,8 +7594,8 @@ snapshots: vite@7.3.1(@types/node@24.1.0)(jiti@2.6.1)(lightningcss@1.30.2): dependencies: esbuild: 0.27.2 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 postcss: 8.5.6 rollup: 4.59.0 tinyglobby: 0.2.15 @@ -7626,7 +7620,7 @@ snapshots: expect-type: 1.3.0 magic-string: 0.30.21 pathe: 2.0.3 - picomatch: 4.0.2 + picomatch: 4.0.4 std-env: 3.10.0 tinybench: 2.9.0 tinyexec: 0.3.2 From 45af25d6ce592ab879fade5a82af9d54d2236c15 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 27 Mar 2026 08:05:31 -0700 Subject: [PATCH 26/28] Fix: revert changes to qbittorrent widget endpoints (#6467) --- src/widgets/qbittorrent/component.jsx | 50 ++++++++++------------ src/widgets/qbittorrent/component.test.jsx | 34 +++------------ src/widgets/qbittorrent/widget.js | 8 ---- 3 files changed, 29 insertions(+), 63 deletions(-) diff --git a/src/widgets/qbittorrent/component.jsx b/src/widgets/qbittorrent/component.jsx index 0f0fa3af3..016ed3605 100644 --- a/src/widgets/qbittorrent/component.jsx +++ b/src/widgets/qbittorrent/component.jsx @@ -10,28 +10,13 @@ export default function Component({ service }) { const { t } = useTranslation(); const { widget } = service; - const { data: transferData, error: transferError } = useWidgetAPI(widget, "transfer"); - const { data: totalCountData, error: totalCountError } = useWidgetAPI(widget, "torrentCount"); - const { data: completedCountData, error: completedCountError } = useWidgetAPI(widget, "torrentCount", { - filter: "completed", - }); - const { data: leechTorrentData, error: leechTorrentError } = useWidgetAPI( - widget, - widget?.enableLeechProgress ? "torrents" : "", - widget?.enableLeechProgress ? { filter: "downloading" } : undefined, - ); + const { data: torrentData, error: torrentError } = useWidgetAPI(widget, "torrents"); - const apiError = transferError || totalCountError || completedCountError || leechTorrentError; - if (apiError) { - return ; + if (torrentError) { + return ; } - if ( - !transferData || - totalCountData === undefined || - completedCountData === undefined || - (widget?.enableLeechProgress && !leechTorrentData) - ) { + if (!torrentData) { return ( @@ -42,15 +27,24 @@ export default function Component({ service }) { ); } - const rateDl = Number(transferData?.dl_info_speed ?? 0); - const rateUl = Number(transferData?.up_info_speed ?? 0); - const totalCount = Number(totalCountData?.all ?? totalCountData?.count ?? totalCountData ?? 0); - const completedCount = Number( - completedCountData?.completed ?? completedCountData?.count ?? completedCountData?.all ?? completedCountData ?? 0, - ); - const leech = Math.max(0, totalCount - completedCount); + let rateDl = 0; + let rateUl = 0; + let completed = 0; + const leechTorrents = []; - const leechTorrents = Array.isArray(leechTorrentData) ? [...leechTorrentData] : []; + for (let i = 0; i < torrentData.length; i += 1) { + const torrent = torrentData[i]; + rateDl += torrent.dlspeed; + rateUl += torrent.upspeed; + if (torrent.progress === 1) { + completed += 1; + } + if (torrent.state.includes("DL") || torrent.state === "downloading") { + leechTorrents.push(torrent); + } + } + + const leech = torrentData.length - completed; const statePriority = [ "downloading", "forcedDL", @@ -79,7 +73,7 @@ export default function Component({ service }) { value={t("common.bibyterate", { value: rateDl, decimals: 1 })} highlightValue={rateDl} /> - + { expect(screen.getByText("qbittorrent.upload")).toBeInTheDocument(); }); - it("uses lightweight endpoints for counts/rates and filtered torrents for leech progress", () => { - useWidgetAPI.mockImplementation((_widget, endpoint, query) => { - if (endpoint === "transfer") { - return { data: { dl_info_speed: 15, up_info_speed: 3 }, error: undefined }; - } - if (endpoint === "torrentCount" && !query) { - return { data: 2, error: undefined }; - } - if (endpoint === "torrentCount" && query?.filter === "completed") { - return { data: 1, error: undefined }; - } - if (endpoint === "torrents" && query?.filter === "downloading") { - return { - data: [ - { - name: "B", - progress: 0.5, - state: "downloading", - eta: 60, - size: 100, - amount_left: 50, - }, - ], - error: undefined, - }; - } - return { data: undefined, error: undefined }; + it("computes leech/seed counts and upload/download rates, and can render leech progress entries", () => { + useWidgetAPI.mockReturnValue({ + data: [ + { name: "A", dlspeed: 10, upspeed: 1, progress: 1, state: "uploading" }, + { name: "B", dlspeed: 5, upspeed: 2, progress: 0.5, state: "downloading", eta: 60, size: 100, amount_left: 50 }, + ], + error: undefined, }); const service = { widget: { type: "qbittorrent", enableLeechProgress: true } }; diff --git a/src/widgets/qbittorrent/widget.js b/src/widgets/qbittorrent/widget.js index 9ec167faf..182ac9d1b 100644 --- a/src/widgets/qbittorrent/widget.js +++ b/src/widgets/qbittorrent/widget.js @@ -4,16 +4,8 @@ const widget = { proxyHandler: qbittorrentProxyHandler, mappings: { - transfer: { - endpoint: "transfer/info", - }, - torrentCount: { - endpoint: "torrents/count", - optionalParams: ["filter"], - }, torrents: { endpoint: "torrents/info", - optionalParams: ["filter"], }, }, }; From b37645b8d0bb188d588e83b2c6305bc5fa9641df Mon Sep 17 00:00:00 2001 From: Adam <68359098+mylegitches@users.noreply.github.com> Date: Fri, 27 Mar 2026 16:17:54 -0500 Subject: [PATCH 27/28] Documentation: fix kubernetes config examples (#6468) --- kubernetes.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kubernetes.md b/kubernetes.md index b6618afff..e5c71ea80 100644 --- a/kubernetes.md +++ b/kubernetes.md @@ -20,13 +20,13 @@ helm install my-release jameswynn/homepage Set the `mode` in the `kubernetes.yaml` to `cluster`. ```yaml -mode: default +mode: cluster ``` -To enable Kubernetes gateway-api compatibility, set `route` to `gateway`. +To enable Kubernetes gateway-api compatibility, set `gateway` to `true`. ```yaml -route: gateway +gateway: true ``` ## Widgets From ff4eaa2cd94ca37ae429434c69ad20335ddd5831 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 27 Mar 2026 14:39:27 -0700 Subject: [PATCH 28/28] Chore: make unifi proxy more generic (#6469) --- src/utils/proxy/handlers/unifi.js | 116 +++++++++++++++++++++++++++ src/widgets/unifi/proxy.js | 126 +++++++----------------------- src/widgets/unifi/proxy.test.js | 54 +++++++++++++ 3 files changed, 197 insertions(+), 99 deletions(-) create mode 100644 src/utils/proxy/handlers/unifi.js diff --git a/src/utils/proxy/handlers/unifi.js b/src/utils/proxy/handlers/unifi.js new file mode 100644 index 000000000..6a2b43247 --- /dev/null +++ b/src/utils/proxy/handlers/unifi.js @@ -0,0 +1,116 @@ +import cache from "memory-cache"; + +import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { addCookieToJar, setCookieHeader } from "utils/proxy/cookie-jar"; +import { httpProxy } from "utils/proxy/http"; +import widgets from "widgets/widgets"; + +function isSuccessfulLoginResponse(data) { + const json = JSON.parse(data.toString()); + return json?.meta?.rc === "ok" || json?.login_time || json?.update_time; +} + +async function login({ widget, api, endpoint, csrfToken }) { + const loginUrl = new URL(formatApiCall(api.replace("{prefix}", ""), { endpoint, ...widget })); + const headers = { "Content-Type": "application/json" }; + + if (csrfToken) { + headers["X-CSRF-TOKEN"] = csrfToken; + } + + return httpProxy(loginUrl, { + method: "POST", + body: JSON.stringify({ username: widget.username, password: widget.password, remember: true, rememberMe: true }), + headers, + }); +} + +export default function createUnifiProxyHandler({ + proxyName, + resolveWidget, + resolveRequestContext, + getLoginEndpoint = () => "auth/login", + shouldAttemptLogin = ({ widget }) => !widget.key, +}) { + const prefixCacheKey = `${proxyName}__prefix`; + const logger = createLogger(proxyName); + + return async function unifiProxyHandler(req, res) { + const widget = await resolveWidget(req, logger); + const { service, endpoint } = req.query; + + if (!widget) { + return res.status(400).json({ error: "Invalid proxy service type" }); + } + + const api = widgets?.[widget.type]?.api; + if (!api) { + return res.status(403).json({ error: "Service does not support API calls" }); + } + + const cachedPrefix = cache.get(`${prefixCacheKey}.${service}`); + const { + prefix, + headers = {}, + csrfToken: initialCsrfToken, + } = await resolveRequestContext({ + cachedPrefix, + logger, + req, + service, + widget, + }); + let csrfToken = initialCsrfToken; + + cache.put(`${prefixCacheKey}.${service}`, prefix); + + widget.prefix = prefix; + const url = new URL(formatApiCall(api, { endpoint, ...widget })); + const params = { method: "GET", headers }; + setCookieHeader(url, params); + + let [status, contentType, data, responseHeaders] = await httpProxy(url, params); + + if (status === 401 && shouldAttemptLogin({ widget, req, responseHeaders })) { + logger.debug("UniFi request was rejected, attempting login."); + + if (responseHeaders?.["x-csrf-token"]) { + csrfToken = responseHeaders["x-csrf-token"]; + } + + [status, contentType, data, responseHeaders] = await login({ + api, + csrfToken, + endpoint: getLoginEndpoint({ prefix, req, widget }), + widget, + }); + + if (status !== 200) { + logger.error("HTTP %d logging in to UniFi. Data: %s", status, data); + return res.status(status).json({ error: { message: `HTTP Error ${status}`, url, data } }); + } + + if (!isSuccessfulLoginResponse(data)) { + logger.error("Error logging in to UniFi: Data: %s", data); + return res.status(401).end(data); + } + + addCookieToJar(url, responseHeaders); + setCookieHeader(url, params); + + [status, contentType, data, responseHeaders] = await httpProxy(url, params); + } + + if (status !== 200) { + logger.error("HTTP %d getting data from UniFi endpoint %s. Data: %s", status, url.href, data); + return res.status(status).json({ error: { message: `HTTP Error ${status}`, url, data } }); + } + + if (contentType) { + res.setHeader("Content-Type", contentType); + } + + return res.status(status).send(data); + }; +} diff --git a/src/widgets/unifi/proxy.js b/src/widgets/unifi/proxy.js index c932fc41c..2d12662b9 100644 --- a/src/widgets/unifi/proxy.js +++ b/src/widgets/unifi/proxy.js @@ -1,19 +1,11 @@ -import cache from "memory-cache"; - import getServiceWidget from "utils/config/service-helpers"; import { getPrivateWidgetOptions } from "utils/config/widget-helpers"; -import createLogger from "utils/logger"; -import { formatApiCall } from "utils/proxy/api-helpers"; -import { addCookieToJar, setCookieHeader } from "utils/proxy/cookie-jar"; +import createUnifiProxyHandler from "utils/proxy/handlers/unifi"; import { httpProxy } from "utils/proxy/http"; -import widgets from "widgets/widgets"; const udmpPrefix = "/proxy/network"; -const proxyName = "unifiProxyHandler"; -const prefixCacheKey = `${proxyName}__prefix`; -const logger = createLogger(proxyName); -async function getWidget(req) { +async function getWidget(req, logger) { const { group, service, index } = req.query; let widget = null; @@ -43,100 +35,36 @@ async function getWidget(req) { return widget; } -async function login(widget, csrfToken) { - const endpoint = widget.prefix === udmpPrefix ? "auth/login" : "login"; - const api = widgets?.[widget.type]?.api?.replace("{prefix}", ""); // no prefix for login url - const loginUrl = new URL(formatApiCall(api, { endpoint, ...widget })); - const loginBody = { username: widget.username, password: widget.password, remember: true, rememberMe: true }; - const headers = { "Content-Type": "application/json" }; - if (csrfToken) { - headers["X-CSRF-TOKEN"] = csrfToken; - } - const [status, contentType, data, responseHeaders] = await httpProxy(loginUrl, { - method: "POST", - body: JSON.stringify(loginBody), - headers, - }); - return [status, contentType, data, responseHeaders]; -} - -export default async function unifiProxyHandler(req, res) { - const widget = await getWidget(req); - const { service } = req.query; - if (!widget) { - return res.status(400).json({ error: "Invalid proxy service type" }); - } - - const api = widgets?.[widget.type]?.api; - if (!api) { - return res.status(403).json({ error: "Service does not support API calls" }); - } - - let [status, contentType, data, responseHeaders] = []; - let prefix = cache.get(`${prefixCacheKey}.${service}`); - let csrfToken; +async function resolveRequestContext({ cachedPrefix, widget }) { const headers = {}; + if (widget.key) { - prefix = udmpPrefix; headers["X-API-KEY"] = widget.key; - headers["Accept"] = "application/json"; - } else if (prefix === null) { - // auto detect if we're talking to a UDM Pro or Network API device, and cache the result - // so that we don't make two requests each time data from Unifi is required - [status, contentType, data, responseHeaders] = await httpProxy(widget.url); - prefix = ""; - if (responseHeaders?.["x-csrf-token"]) { - // Unifi OS < 3.2.5 passes & requires csrf-token - prefix = udmpPrefix; - csrfToken = responseHeaders["x-csrf-token"]; - } else if ( - responseHeaders?.["access-control-expose-headers"] || - responseHeaders?.["Access-Control-Expose-Headers"] - ) { - // Unifi OS ≥ 3.2.5 doesnt pass csrf token but still uses different endpoint, same with Network API - prefix = udmpPrefix; - } - } - cache.put(`${prefixCacheKey}.${service}`, prefix); - - widget.prefix = prefix; - const { endpoint } = req.query; - const url = new URL(formatApiCall(api, { endpoint, ...widget })); - const params = { method: "GET", headers }; - setCookieHeader(url, params); - - [status, contentType, data, responseHeaders] = await httpProxy(url, params); - - if (status === 401 && !widget.key) { - logger.debug("Unifi isn't logged in or rejected the reqeust, attempting login."); - if (responseHeaders?.["x-csrf-token"]) { - csrfToken = responseHeaders["x-csrf-token"]; - } - [status, contentType, data, responseHeaders] = await login(widget, csrfToken); - - if (status !== 200) { - logger.error("HTTP %d logging in to Unifi. Data: %s", status, data); - return res.status(status).json({ error: { message: `HTTP Error ${status}`, url, data } }); - } - - const json = JSON.parse(data.toString()); - if (!(json?.meta?.rc === "ok" || json?.login_time || json?.update_time)) { - logger.error("Error logging in to Unifi: Data: %s", data); - return res.status(401).end(data); - } - - addCookieToJar(url, responseHeaders); - setCookieHeader(url, params); - - logger.debug("Retrying Unifi request after login."); - [status, contentType, data, responseHeaders] = await httpProxy(url, params); + headers.Accept = "application/json"; + return { headers, prefix: udmpPrefix }; } - if (status !== 200) { - logger.error("HTTP %d getting data from Unifi endpoint %s. Data: %s", status, url.href, data); - return res.status(status).json({ error: { message: `HTTP Error ${status}`, url, data } }); + if (cachedPrefix !== null) { + return { headers, prefix: cachedPrefix }; } - if (contentType) res.setHeader("Content-Type", contentType); - return res.status(status).send(data); + const [, , , responseHeaders] = await httpProxy(widget.url); + let prefix = ""; + let csrfToken; + + if (responseHeaders?.["x-csrf-token"]) { + prefix = udmpPrefix; + csrfToken = responseHeaders["x-csrf-token"]; + } else if (responseHeaders?.["access-control-expose-headers"] || responseHeaders?.["Access-Control-Expose-Headers"]) { + prefix = udmpPrefix; + } + + return { csrfToken, headers, prefix }; } + +export default createUnifiProxyHandler({ + proxyName: "unifiProxyHandler", + resolveWidget: getWidget, + resolveRequestContext, + getLoginEndpoint: ({ prefix }) => (prefix === udmpPrefix ? "auth/login" : "login"), +}); diff --git a/src/widgets/unifi/proxy.test.js b/src/widgets/unifi/proxy.test.js index c02a1ca38..6d84821e0 100644 --- a/src/widgets/unifi/proxy.test.js +++ b/src/widgets/unifi/proxy.test.js @@ -89,4 +89,58 @@ describe("widgets/unifi/proxy", () => { expect(res.statusCode).toBe(200); expect(res.body).toEqual(Buffer.from("data")); }); + + it("uses unifi_console private widget config for the info widget path", async () => { + getPrivateWidgetOptions.mockResolvedValue({ + url: "http://console", + username: "u", + password: "p", + }); + + httpProxy + .mockResolvedValueOnce([200, "text/html", Buffer.from(""), { "x-csrf-token": "csrf" }]) + .mockResolvedValueOnce([200, "application/json", Buffer.from("data"), {}]); + + const req = { + query: { + group: "unifi_console", + service: "unifi_console", + endpoint: "self", + query: JSON.stringify({ index: 2 }), + }, + }; + const res = createMockRes(); + + await unifiProxyHandler(req, res); + + expect(getPrivateWidgetOptions).toHaveBeenCalledWith("unifi_console", 2); + expect(httpProxy.mock.calls[1][0].toString()).toContain("/proxy/network/api/self"); + expect(res.statusCode).toBe(200); + }); + + it("uses the API key flow without attempting login", async () => { + getServiceWidget.mockResolvedValue({ + type: "unifi", + key: "secret", + url: "http://unifi", + }); + + httpProxy.mockResolvedValueOnce([200, "application/json", Buffer.from("data"), {}]); + + const req = { query: { group: "g", service: "svc", endpoint: "self", index: "0" } }; + const res = createMockRes(); + + await unifiProxyHandler(req, res); + + expect(httpProxy).toHaveBeenCalledTimes(1); + expect(httpProxy.mock.calls[0][0].toString()).toContain("/proxy/network/api/self"); + expect(httpProxy.mock.calls[0][1]).toMatchObject({ + headers: { + Accept: "application/json", + "X-API-KEY": "secret", + }, + method: "GET", + }); + expect(res.statusCode).toBe(200); + }); });