Merge branch 'main' into calibre-web-widget

This commit is contained in:
Georges-Antoine Assi 2023-08-20 10:38:54 -04:00
commit d3829dc4c5
No known key found for this signature in database
GPG Key ID: E01F01B06E816D51
179 changed files with 10343 additions and 2075 deletions

View File

@ -16,6 +16,7 @@
**/compose* **/compose*
**/Dockerfile* **/Dockerfile*
**/node_modules **/node_modules
!**/node_modules/.pnpm/compressjs@*/**
**/npm-debug.log **/npm-debug.log
**/obj **/obj
**/secrets.dev.yaml **/secrets.dev.yaml

View File

@ -1,7 +1,7 @@
name: Bug report name: Bug report
description: Create a report to help us improve description: Create a report to help us improve
title: "[Bug] " title: "[Bug] "
labels: ["bug"] labels: ["bug, unconfirmed"]
body: body:
- type: markdown - type: markdown
attributes: attributes:

View File

@ -52,6 +52,8 @@ COPY --link --chown=1000:1000 /public ./public/
# Copy files from builder # Copy files from builder
COPY --link --from=builder --chown=1000:1000 /app/.next/standalone ./ COPY --link --from=builder --chown=1000:1000 /app/.next/standalone ./
COPY --link --from=builder --chown=1000:1000 /app/.next/static/ ./.next/static/ COPY --link --from=builder --chown=1000:1000 /app/.next/static/ ./.next/static/
# see https://github.com/benphelps/homepage/issues/1795
COPY --link --from=builder /app/node_modules/.pnpm/compressjs@1.0.3/node_modules/compressjs/lib/ ./node_modules/.pnpm/compressjs@1.0.3/node_modules/compressjs/lib/
COPY --link --chmod=755 docker-entrypoint.sh /usr/local/bin/ COPY --link --chmod=755 docker-entrypoint.sh /usr/local/bin/
RUN apk add --no-cache su-exec RUN apk add --no-cache su-exec

View File

@ -141,7 +141,7 @@ pnpm dev
Open [http://localhost:3000](http://localhost:3000) to start. Open [http://localhost:3000](http://localhost:3000) to start.
This is a [Next.js](https://nextjs.org/) application, see their doucmentation for more information: This is a [Next.js](https://nextjs.org/) application, see their documentation for more information:
## Contributors ## Contributors

971
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -16,6 +16,7 @@
"compare-versions": "^5.0.1", "compare-versions": "^5.0.1",
"dockerode": "^3.3.4", "dockerode": "^3.3.4",
"follow-redirects": "^1.15.2", "follow-redirects": "^1.15.2",
"gamedig": "^4.0.6",
"i18next": "^21.9.2", "i18next": "^21.9.2",
"js-yaml": "^4.1.0", "js-yaml": "^4.1.0",
"json-rpc-2.0": "^1.4.1", "json-rpc-2.0": "^1.4.1",
@ -29,10 +30,12 @@
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-i18next": "^11.18.6", "react-i18next": "^11.18.6",
"react-icons": "^4.4.0", "react-icons": "^4.4.0",
"recharts": "^2.7.2",
"shvl": "^3.0.0", "shvl": "^3.0.0",
"swr": "^1.3.0", "swr": "^1.3.0",
"systeminformation": "^5.17.12", "systeminformation": "^5.17.12",
"tough-cookie": "^4.1.2", "tough-cookie": "^4.1.2",
"urbackup-server-api": "^0.8.9",
"winston": "^3.8.2", "winston": "^3.8.2",
"xml-js": "^1.6.11" "xml-js": "^1.6.11"
}, },

File diff suppressed because it is too large Load Diff

View File

@ -23,7 +23,7 @@
"free": "متاح", "free": "متاح",
"used": "مستخدم", "used": "مستخدم",
"load": "الضغط", "load": "الضغط",
"mem": "MEM", "mem": "الذاكرة",
"temp": "TEMP", "temp": "TEMP",
"max": "Max", "max": "Max",
"uptime": "UP", "uptime": "UP",
@ -134,14 +134,15 @@
"episodes": "Episodes" "episodes": "Episodes"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Total Observed", "totalObserved": "مجموع الملاحظات",
"diffsDetected": "Diffs Detected" "diffsDetected": "Diffs Detected"
}, },
"tautulli": { "tautulli": {
"playing": "يشتغل", "playing": "يشتغل",
"transcoding": "التحويل", "transcoding": "التحويل",
"bitrate": "معدل البت", "bitrate": "معدل البت",
"no_active": "No Active Streams" "no_active": "No Active Streams",
"plex_connection_error": "Check Plex Connection"
}, },
"nzbget": { "nzbget": {
"rate": "معدل", "rate": "معدل",
@ -179,18 +180,22 @@
"sonarr": { "sonarr": {
"wanted": "مطلوب", "wanted": "مطلوب",
"queued": "في الإنتظار", "queued": "في الإنتظار",
"series": "سلسلة" "series": "سلسلة",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "مطلوب", "wanted": "مطلوب",
"missing": "مفقود", "missing": "مفقود",
"queued": "في الإنتظار", "queued": "في الإنتظار",
"movies": "أفلام" "movies": "أفلام",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "مطلوب", "wanted": "مطلوب",
"queued": "في الإنتظار", "queued": "في الإنتظار",
"albums": "ألبومات" "artists": "Artists"
}, },
"readarr": { "readarr": {
"wanted": "مطلوب", "wanted": "مطلوب",
@ -296,12 +301,22 @@
}, },
"glances": { "glances": {
"cpu": "معالج", "cpu": "معالج",
"mem": "الذاكرة",
"wait": "الرجاء الإنتظار", "wait": "الرجاء الإنتظار",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"quicklaunch": { "quicklaunch": {
"bookmark": "مفضلة", "bookmark": "مفضلة",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -89,7 +89,8 @@
"playing": "Възпроизвежда", "playing": "Възпроизвежда",
"transcoding": "Конвертира", "transcoding": "Конвертира",
"bitrate": "Честота", "bitrate": "Честота",
"no_active": "Няма активни потоци" "no_active": "Няма активни потоци",
"plex_connection_error": "Check Plex Connection"
}, },
"nzbget": { "nzbget": {
"rate": "Rate", "rate": "Rate",
@ -117,18 +118,22 @@
"sonarr": { "sonarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"series": "Series" "series": "Series",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"movies": "Movies", "movies": "Movies",
"missing": "Missing" "missing": "Missing",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"albums": "Albums" "artists": "Artists"
}, },
"readarr": { "readarr": {
"wanted": "Wanted", "wanted": "Wanted",
@ -234,12 +239,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"wait": "Please wait", "wait": "Please wait",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Total Observed", "totalObserved": "Total Observed",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -26,7 +26,9 @@
"sonarr": { "sonarr": {
"wanted": "Volgut", "wanted": "Volgut",
"queued": "En cua", "queued": "En cua",
"series": "Sèries" "series": "Sèries",
"queue": "Queue",
"unknown": "Unknown"
}, },
"speedtest": { "speedtest": {
"ping": "Ping", "ping": "Ping",
@ -78,7 +80,8 @@
"playing": "Reproduint", "playing": "Reproduint",
"transcoding": "Transcodificant", "transcoding": "Transcodificant",
"bitrate": "Taxa de bits", "bitrate": "Taxa de bits",
"no_active": "Sense transmissions actives" "no_active": "Sense transmissions actives",
"plex_connection_error": "Check Plex Connection"
}, },
"nzbget": { "nzbget": {
"rate": "Taxa", "rate": "Taxa",
@ -99,7 +102,9 @@
"wanted": "Volgut", "wanted": "Volgut",
"queued": "En cua", "queued": "En cua",
"movies": "Pel·lícules", "movies": "Pel·lícules",
"missing": "Faltant" "missing": "Faltant",
"queue": "Queue",
"unknown": "Unknown"
}, },
"readarr": { "readarr": {
"wanted": "Volgut", "wanted": "Volgut",
@ -173,7 +178,7 @@
"lidarr": { "lidarr": {
"wanted": "Volgut", "wanted": "Volgut",
"queued": "En cua", "queued": "En cua",
"albums": "Àlbums" "artists": "Artists"
}, },
"adguard": { "adguard": {
"queries": "Consultes", "queries": "Consultes",
@ -234,12 +239,22 @@
}, },
"glances": { "glances": {
"cpu": "Processador", "cpu": "Processador",
"mem": "Memòria",
"wait": "Si us plau, espereu", "wait": "Si us plau, espereu",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Total d'observats", "totalObserved": "Total d'observats",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"totalUsed": "Used Storage",
"noRecent": "Out of Date"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -46,8 +46,8 @@
}, },
"unifi": { "unifi": {
"users": "Uživatelé", "users": "Uživatelé",
"uptime": "Doba provozu systému", "uptime": "Doba provozu",
"days": "Dnů", "days": "dní",
"wan": "WAN", "wan": "WAN",
"lan": "LAN", "lan": "LAN",
"wlan": "WLAN", "wlan": "WLAN",
@ -56,8 +56,8 @@
"wlan_devices": "Zařízení WLAN", "wlan_devices": "Zařízení WLAN",
"lan_users": "Uživatelé LAN", "lan_users": "Uživatelé LAN",
"wlan_users": "Uživatelé WLAN", "wlan_users": "Uživatelé WLAN",
"up": "BĚŽÍ", "up": "FUNKČNÍ",
"down": "NEBĚŽÍ", "down": "NEFUNKČNÍ",
"wait": "Počkejte prosím", "wait": "Počkejte prosím",
"empty_data": "Stav podsystému neznámý" "empty_data": "Stav podsystému neznámý"
}, },
@ -95,7 +95,8 @@
"playing": "Přehrává", "playing": "Přehrává",
"transcoding": "Překódovávání", "transcoding": "Překódovávání",
"bitrate": "Přenosová rychlost", "bitrate": "Přenosová rychlost",
"no_active": "Žádný aktivní stream" "no_active": "Žádný aktivní stream",
"plex_connection_error": "Check Plex Connection"
}, },
"nzbget": { "nzbget": {
"rate": "Rychlost", "rate": "Rychlost",
@ -133,18 +134,22 @@
"sonarr": { "sonarr": {
"wanted": "Hledané", "wanted": "Hledané",
"queued": "Ve frontě", "queued": "Ve frontě",
"series": "Seriály" "series": "Seriály",
"unknown": "Unknown",
"queue": "Queue"
}, },
"radarr": { "radarr": {
"wanted": "Hledané", "wanted": "Hledané",
"missing": "Chybějící", "missing": "Chybějící",
"queued": "Ve frontě", "queued": "Ve frontě",
"movies": "Filmy" "movies": "Filmy",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "Hledané", "wanted": "Hledané",
"queued": "Ve frontě", "queued": "Ve frontě",
"albums": "Alba" "artists": "Artists"
}, },
"readarr": { "readarr": {
"wanted": "Hledané", "wanted": "Hledané",
@ -308,12 +313,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "RAM",
"wait": "Prosím počkejte", "wait": "Prosím počkejte",
"temp": "TEPLOTA", "temp": "TEPLOTA",
"uptime": "BĚŽÍ", "uptime": "BĚŽÍ",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"total": "Total",
"free": "Free",
"used": "Used",
"load": "Load",
"warn": "Warn",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"quicklaunch": { "quicklaunch": {
"bookmark": "Záložka", "bookmark": "Záložka",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadSpeed": "Download Speed",
"downloadCount": "Queue Count",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"map": "Map",
"currentPlayers": "Current players",
"name": "Name",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -9,12 +9,14 @@
"queued": "I Kø", "queued": "I Kø",
"movies": "Film", "movies": "Film",
"wanted": "Ønskede", "wanted": "Ønskede",
"missing": "Mangler" "missing": "Mangler",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "Ønsket", "wanted": "Ønsket",
"queued": "I Kø", "queued": "I Kø",
"albums": "Albums" "artists": "Artists"
}, },
"jellyseerr": { "jellyseerr": {
"available": "Tilgængelig", "available": "Tilgængelig",
@ -68,12 +70,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "RAM",
"wait": "Vent venligst", "wait": "Vent venligst",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h", "hours": "h",
"temp": "TEMP" "temp": "TEMP",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"wmo": { "wmo": {
"1-day": "Hovedsageligt solrigt", "1-day": "Hovedsageligt solrigt",
@ -228,7 +240,8 @@
"playing": "Afspiller", "playing": "Afspiller",
"transcoding": "Transcoder", "transcoding": "Transcoder",
"bitrate": "Bitrate", "bitrate": "Bitrate",
"no_active": "Ingen Aktive Streams" "no_active": "Ingen Aktive Streams",
"plex_connection_error": "Check Plex Connection"
}, },
"nzbget": { "nzbget": {
"rate": "Rate", "rate": "Rate",
@ -260,7 +273,9 @@
"sonarr": { "sonarr": {
"wanted": "Ønsket", "wanted": "Ønsket",
"queued": "I Kø", "queued": "I Kø",
"series": "Serier" "series": "Serier",
"queue": "Queue",
"unknown": "Unknown"
}, },
"readarr": { "readarr": {
"wanted": "Ønskede", "wanted": "Ønskede",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadSpeed": "Download Speed",
"downloadCount": "Queue Count",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -56,7 +56,8 @@
"playing": "Spielen", "playing": "Spielen",
"transcoding": "Transcodierung", "transcoding": "Transcodierung",
"bitrate": "Bitrate", "bitrate": "Bitrate",
"no_active": "Keine aktiven Streams" "no_active": "Keine aktiven Streams",
"plex_connection_error": "Check Plex Connection"
}, },
"rutorrent": { "rutorrent": {
"active": "Aktiv", "active": "Aktiv",
@ -66,13 +67,17 @@
"sonarr": { "sonarr": {
"wanted": "Gesucht", "wanted": "Gesucht",
"queued": "In Warteschlange", "queued": "In Warteschlange",
"series": "Serien" "series": "Serien",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "Gesucht", "wanted": "Gesucht",
"queued": "In Warteschlange", "queued": "In Warteschlange",
"movies": "Filme", "movies": "Filme",
"missing": "Fehlt" "missing": "Fehlt",
"queue": "Queue",
"unknown": "Unknown"
}, },
"readarr": { "readarr": {
"wanted": "Gesucht", "wanted": "Gesucht",
@ -173,7 +178,7 @@
"lidarr": { "lidarr": {
"wanted": "Gesucht", "wanted": "Gesucht",
"queued": "In Warteschlange", "queued": "In Warteschlange",
"albums": "Alben" "artists": "Artists"
}, },
"adguard": { "adguard": {
"queries": "Anfragen", "queries": "Anfragen",
@ -234,12 +239,22 @@
}, },
"glances": { "glances": {
"cpu": "Prozessor", "cpu": "Prozessor",
"mem": "RAM",
"wait": "Bitte warten", "wait": "Bitte warten",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "T", "days": "T",
"hours": "S" "hours": "S",
"load": "Auslastung",
"warn": "Warnung",
"total": "Gesamt",
"free": "Frei",
"used": "Verwendet",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap",
"crit": "Crit",
"read": "Read"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Gesamt beobachtet", "totalObserved": "Gesamt beobachtet",
@ -606,7 +621,7 @@
"systemTempC": "System Temp", "systemTempC": "System Temp",
"poolUsage": "Pool Nutzung", "poolUsage": "Pool Nutzung",
"volumeUsage": "Volume Usage", "volumeUsage": "Volume Usage",
"invalid": "Invalid" "invalid": "Ungültig"
}, },
"pfsense": { "pfsense": {
"load": "Durchschnittliche Last", "load": "Durchschnittliche Last",
@ -625,16 +640,71 @@
}, },
"evcc": { "evcc": {
"watt_hour": "Wh", "watt_hour": "Wh",
"pv_power": "Production", "pv_power": "Produktion",
"battery_soc": "Battery", "battery_soc": "Batterie",
"grid_power": "Grid", "grid_power": "Grid",
"home_power": "Consumption", "home_power": "Verbrauch",
"charge_power": "Charger" "charge_power": "Ladegerät"
}, },
"pialert": { "pialert": {
"total": "Gesamt",
"connected": "Verbunden",
"new_devices": "Neue Geräte",
"down_alerts": "Down Alarme"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"bots": "Bots",
"ping": "Ping",
"maxPlayers": "Max players",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved",
"inProgress": "In Progress"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total", "total": "Total",
"connected": "Connected", "running": "Running",
"new_devices": "New Devices", "stopped": "Stopped",
"down_alerts": "Down Alerts" "passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -162,7 +162,8 @@
"playing": "Αναπαράγει", "playing": "Αναπαράγει",
"transcoding": "Μετακωδικοποίηση", "transcoding": "Μετακωδικοποίηση",
"bitrate": "Ρυθμός bit", "bitrate": "Ρυθμός bit",
"no_active": "Δεν υπάρχουν ενεργές ροές" "no_active": "Δεν υπάρχουν ενεργές ροές",
"plex_connection_error": "Έλεγχος Σύνδεσης με Plex"
}, },
"nzbget": { "nzbget": {
"rate": "Ρυθμός", "rate": "Ρυθμός",
@ -206,7 +207,9 @@
"sonarr": { "sonarr": {
"series": "Σειρές", "series": "Σειρές",
"wanted": "Επιθυμούντε", "wanted": "Επιθυμούντε",
"queued": "Σε σειρά" "queued": "Σε σειρά",
"queue": "Ούρα",
"unknown": "Άγνωστο"
}, },
"downloadstation": { "downloadstation": {
"download": "Μεταφόρτωση", "download": "Μεταφόρτωση",
@ -218,12 +221,14 @@
"wanted": "Επιθυμούντε", "wanted": "Επιθυμούντε",
"missing": "Απουσιάζει", "missing": "Απουσιάζει",
"queued": "Σε σειρά", "queued": "Σε σειρά",
"movies": "Ταινίες" "movies": "Ταινίες",
"queue": "Ουρά",
"unknown": "Άγνωστο"
}, },
"lidarr": { "lidarr": {
"wanted": "Θέλετε", "wanted": "Θέλετε",
"queued": "Στη σειρά", "queued": "Στη σειρά",
"albums": "Δίσκοι" "artists": "Καλλιτέχνες"
}, },
"readarr": { "readarr": {
"wanted": "Θέλετε", "wanted": "Θέλετε",
@ -232,17 +237,17 @@
}, },
"bazarr": { "bazarr": {
"missingEpisodes": "Επεισόδια που λείπουν", "missingEpisodes": "Επεισόδια που λείπουν",
"missingMovies": "Missing Movies" "missingMovies": "Ταινίες που Λείπουν"
}, },
"ombi": { "ombi": {
"pending": "Pending", "pending": "Σε εκκρεμότητα",
"approved": "Approved", "approved": "Εγκρίθηκε",
"available": "Available" "available": "Διαθέσιμο"
}, },
"jellyseerr": { "jellyseerr": {
"pending": "Pending", "pending": "Σε εκκρεμότητα",
"approved": "Approved", "approved": "Εγκρίθηκε",
"available": "Available" "available": "Διαθέσιμο"
}, },
"overseerr": { "overseerr": {
"pending": "Pending", "pending": "Pending",
@ -252,25 +257,25 @@
}, },
"pihole": { "pihole": {
"queries": "Queries", "queries": "Queries",
"blocked": "Blocked", "blocked": "Αποκλεισμένο",
"gravity": "Gravity", "gravity": "Gravity",
"blocked_percent": "Blocked %" "blocked_percent": "Αποκλεισμένο %"
}, },
"adguard": { "adguard": {
"queries": "Queries", "queries": "Αναζητήσεις",
"blocked": "Blocked", "blocked": "Αποκλεισμένο",
"filtered": "Filtered", "filtered": "Φιλτραρισμένα",
"latency": "Latency" "latency": "Καθυστέρηση"
}, },
"speedtest": { "speedtest": {
"upload": "Upload", "upload": "Ανέβασμα",
"download": "Download", "download": "Λήψη",
"ping": "Ping" "ping": "Ping"
}, },
"portainer": { "portainer": {
"running": "Running", "running": "Running",
"stopped": "Stopped", "stopped": "Σταματημένο",
"total": "Total" "total": "Σύνολο"
}, },
"tdarr": { "tdarr": {
"queue": "Queue", "queue": "Queue",
@ -355,12 +360,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"wait": "Please wait", "wait": "Please wait",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"load": "Load",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"quicklaunch": { "quicklaunch": {
"bookmark": "Bookmark", "bookmark": "Bookmark",
@ -548,7 +563,7 @@
"records_total": "Queue Length" "records_total": "Queue Length"
}, },
"pterodactyl": { "pterodactyl": {
"servers": "Servers", "servers": "Διακομιστές",
"nodes": "Nodes" "nodes": "Nodes"
}, },
"prometheus": { "prometheus": {
@ -580,22 +595,22 @@
"shows": "Εκπομπές", "shows": "Εκπομπές",
"recordings": "Εγγραφές", "recordings": "Εγγραφές",
"scheduled": "Προγραμματισμένα", "scheduled": "Προγραμματισμένα",
"passes": "Passes" "passes": "Περάσματα"
}, },
"whatsupdocker": { "whatsupdocker": {
"monitoring": "Monitoring", "monitoring": "Monitoring",
"updates": "Updates" "updates": "Updates"
}, },
"tailscale": { "tailscale": {
"address": "Address", "address": "Διεύθυνση",
"never": "Never", "never": "Ποτέ",
"years": "{{number}}y", "years": "{{number}}y",
"weeks": "{{number}}w", "weeks": "{{number}}w",
"days": "{{number}}d", "days": "{{number}}d",
"hours": "{{number}}h", "hours": "{{number}}h",
"expires": "Expires", "expires": "Λήγει",
"last_seen": "Last Seen", "last_seen": "Last Seen",
"now": "Now", "now": "Τώρα",
"minutes": "{{number}}m", "minutes": "{{number}}m",
"seconds": "{{number}}s", "seconds": "{{number}}s",
"ago": "{{value}} Ago" "ago": "{{value}} Ago"
@ -606,7 +621,7 @@
"systemTempC": "Θερμοκρασία συστήματος", "systemTempC": "Θερμοκρασία συστήματος",
"poolUsage": "Χρήση πισίνας", "poolUsage": "Χρήση πισίνας",
"volumeUsage": "Volume Usage", "volumeUsage": "Volume Usage",
"invalid": "Invalid" "invalid": "Μη έγκυρο"
}, },
"pfsense": { "pfsense": {
"load": "Load Avg", "load": "Load Avg",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"myPrs": "My PRs",
"approved": "Approved",
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

82
public/locales/en/common.json Executable file → Normal file
View File

@ -129,7 +129,8 @@
"playing": "Playing", "playing": "Playing",
"transcoding": "Transcoding", "transcoding": "Transcoding",
"bitrate": "Bitrate", "bitrate": "Bitrate",
"no_active": "No Active Streams" "no_active": "No Active Streams",
"plex_connection_error": "Check Plex Connection"
}, },
"omada": { "omada": {
"connectedAp": "Connected APs", "connectedAp": "Connected APs",
@ -194,18 +195,22 @@
"sonarr": { "sonarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"series": "Series" "series": "Series",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "Wanted", "wanted": "Wanted",
"missing": "Missing", "missing": "Missing",
"queued": "Queued", "queued": "Queued",
"movies": "Movies" "movies": "Movies",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"albums": "Albums" "artists": "Artists"
}, },
"readarr": { "readarr": {
"wanted": "Wanted", "wanted": "Wanted",
@ -357,12 +362,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM", "load": "Load",
"wait": "Please wait", "wait": "Please wait",
"temp": "TEMP", "temp": "TEMP",
"warn": "Warn",
"uptime": "UP", "uptime": "UP",
"total": "Total",
"free": "Free",
"used": "Used",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"quicklaunch": { "quicklaunch": {
"bookmark": "Bookmark", "bookmark": "Bookmark",
@ -650,5 +665,60 @@
"books": "Books", "books": "Books",
"authors": "Authors", "authors": "Authors",
"series": "Series" "series": "Series"
},
"jdownloader": {
"downloadCount": "Queue",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size",
"downloadSpeed": "Speed"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"gamedig": {
"status": "Status",
"online": "Online",
"offline": "Offline",
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping"
},
"urbackup": {
"ok" : "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
} }
} }

View File

@ -87,7 +87,8 @@
"playing": "Playing", "playing": "Playing",
"transcoding": "Transcoding", "transcoding": "Transcoding",
"bitrate": "Bitrate", "bitrate": "Bitrate",
"no_active": "No Active Streams" "no_active": "No Active Streams",
"plex_connection_error": "Check Plex Connection"
}, },
"nzbget": { "nzbget": {
"rate": "Rate", "rate": "Rate",
@ -131,18 +132,22 @@
"sonarr": { "sonarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"series": "Serio" "series": "Serio",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "Wanted", "wanted": "Wanted",
"missing": "Missing", "missing": "Missing",
"queued": "Queued", "queued": "Queued",
"movies": "Filmoj" "movies": "Filmoj",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"albums": "Albumoj" "artists": "Artists"
}, },
"readarr": { "readarr": {
"wanted": "Wanted", "wanted": "Wanted",
@ -252,12 +257,22 @@
}, },
"glances": { "glances": {
"cpu": "Ĉefprocesoro", "cpu": "Ĉefprocesoro",
"mem": "Memoro",
"wait": "Bonvolu atendi", "wait": "Bonvolu atendi",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"quicklaunch": { "quicklaunch": {
"bookmark": "Bookmark", "bookmark": "Bookmark",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -56,7 +56,8 @@
"playing": "Reproduciendo", "playing": "Reproduciendo",
"transcoding": "Transcodificando", "transcoding": "Transcodificando",
"bitrate": "Tasa de bits", "bitrate": "Tasa de bits",
"no_active": "Sin transmisiones activas" "no_active": "Sin transmisiones activas",
"plex_connection_error": "Comprueba la conexión a Plex"
}, },
"rutorrent": { "rutorrent": {
"active": "Activo", "active": "Activo",
@ -66,13 +67,17 @@
"sonarr": { "sonarr": {
"wanted": "Buscando", "wanted": "Buscando",
"queued": "En cola", "queued": "En cola",
"series": "Series" "series": "Series",
"queue": "Poner a la cola",
"unknown": "Desconocido"
}, },
"radarr": { "radarr": {
"wanted": "Buscando", "wanted": "Buscando",
"queued": "En cola", "queued": "En cola",
"movies": "Películas", "movies": "Películas",
"missing": "Faltan" "missing": "Faltan",
"queue": "Poner a la cola",
"unknown": "Desconocido"
}, },
"readarr": { "readarr": {
"wanted": "Buscando", "wanted": "Buscando",
@ -173,7 +178,7 @@
"lidarr": { "lidarr": {
"queued": "En cola", "queued": "En cola",
"wanted": "Buscando", "wanted": "Buscando",
"albums": "Álbumes" "artists": "Artistas"
}, },
"adguard": { "adguard": {
"queries": "Consultas", "queries": "Consultas",
@ -234,12 +239,22 @@
}, },
"glances": { "glances": {
"cpu": "Procesador", "cpu": "Procesador",
"mem": "Memoria",
"wait": "Espera por favor", "wait": "Espera por favor",
"temp": "TEMPORAL", "temp": "TEMPORAL",
"uptime": "ARRIBA", "uptime": "ARRIBA",
"days": "Días", "days": "Días",
"hours": "Horas" "hours": "Horas",
"load": "Cargar",
"warn": "Advertir",
"total": "Total",
"free": "Libre",
"used": "Utilizado",
"crit": "Crít.",
"read": "Leer",
"write": "Escribir",
"gpu": "GPU",
"mem": "Memoria",
"swap": "Intercambiar"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Total Observados", "totalObserved": "Total Observados",
@ -605,8 +620,8 @@
"memUsage": "Uso de la memoria", "memUsage": "Uso de la memoria",
"systemTempC": "Temperatura del sistema", "systemTempC": "Temperatura del sistema",
"poolUsage": "Comprobación del uso del grupo de memoria", "poolUsage": "Comprobación del uso del grupo de memoria",
"volumeUsage": "Volume Usage", "volumeUsage": "Volumen utilizado",
"invalid": "Invalid" "invalid": "No válido"
}, },
"pfsense": { "pfsense": {
"load": "Promedio de carga", "load": "Promedio de carga",
@ -626,15 +641,70 @@
"evcc": { "evcc": {
"pv_power": "Producción", "pv_power": "Producción",
"battery_soc": "Batería", "battery_soc": "Batería",
"grid_power": "Grid", "grid_power": "Red",
"home_power": "Consumo", "home_power": "Consumo",
"charge_power": "Cargador", "charge_power": "Cargador",
"watt_hour": "vatio-hora (Wh)" "watt_hour": "vatio-hora (Wh)"
}, },
"pialert": { "pialert": {
"total": "Total", "total": "Total",
"connected": "Connected", "connected": "Conectado",
"new_devices": "New Devices", "new_devices": "Nuevos dispositivos",
"down_alerts": "Down Alerts" "down_alerts": "Alertas"
},
"jdownloader": {
"downloadCount": "Cola",
"downloadSpeed": "Velocidad",
"downloadBytesRemaining": "Restante",
"downloadTotalBytes": "Tamaño"
},
"kavita": {
"seriesCount": "Serie",
"totalFiles": "Archivos"
},
"gamedig": {
"name": "Nombre",
"map": "Mapa",
"currentPlayers": "Jugadores actuales",
"players": "Jugadores",
"maxPlayers": "Jugadores máximos",
"bots": "Bots",
"ping": "Ping",
"status": "Estado",
"online": "En línea",
"offline": "Sin conexión"
},
"azuredevops": {
"result": "Resultado",
"status": "Estado",
"buildId": "Identificador de la construcción",
"succeeded": "Exitoso",
"notStarted": "Sin empezar",
"failed": "Fallido",
"canceled": "Cancelado",
"inProgress": "En curso",
"totalPrs": "RP totales",
"myPrs": "Mis logros",
"approved": "Aprobados"
},
"urbackup": {
"ok": "De acuerdo",
"errored": "Errores",
"noRecent": "Caducado",
"totalUsed": "Almacenamiento usado"
},
"openmediavault": {
"running": "Ejecutando",
"downloading": "Descargando",
"total": "Total",
"stopped": "Detenido",
"passed": "Aprobado",
"failed": "Fallido"
},
"mealie": {
"recipes": "Recetas",
"users": "Usuarios",
"categories": "Categorías",
"tags": "Etiquetas"
} }
} }

View File

@ -0,0 +1,710 @@
{
"wmo": {
"95-night": "Thunderstorm",
"96-day": "Thunderstorm With Hail",
"96-night": "Thunderstorm With Hail",
"99-day": "Thunderstorm With Hail",
"0-day": "Sunny",
"0-night": "Clear",
"1-day": "Mainly Sunny",
"1-night": "Mainly Clear",
"2-day": "Partly Cloudy",
"2-night": "Partly Cloudy",
"3-day": "Cloudy",
"3-night": "Cloudy",
"45-day": "Foggy",
"45-night": "Foggy",
"48-day": "Foggy",
"48-night": "Foggy",
"51-day": "Light Drizzle",
"51-night": "Light Drizzle",
"53-day": "Drizzle",
"53-night": "Drizzle",
"55-day": "Heavy Drizzle",
"55-night": "Heavy Drizzle",
"56-day": "Light Freezing Drizzle",
"56-night": "Light Freezing Drizzle",
"57-day": "Freezing Drizzle",
"57-night": "Freezing Drizzle",
"61-day": "Light Rain",
"61-night": "Light Rain",
"63-day": "Rain",
"63-night": "Rain",
"65-day": "Heavy Rain",
"65-night": "Heavy Rain",
"66-day": "Freezing Rain",
"66-night": "Freezing Rain",
"67-day": "Freezing Rain",
"67-night": "Freezing Rain",
"71-day": "Light Snow",
"71-night": "Light Snow",
"73-day": "Snow",
"73-night": "Snow",
"75-day": "Heavy Snow",
"75-night": "Heavy Snow",
"77-day": "Snow Grains",
"77-night": "Snow Grains",
"80-day": "Light Showers",
"80-night": "Light Showers",
"81-day": "Showers",
"81-night": "Showers",
"82-day": "Heavy Showers",
"82-night": "Heavy Showers",
"85-day": "Snow Showers",
"85-night": "Snow Showers",
"86-day": "Snow Showers",
"86-night": "Snow Showers",
"95-day": "Thunderstorm",
"99-night": "Thunderstorm With Hail"
},
"homebridge": {
"updates": "Updates",
"available_update": "System",
"update_available": "Update Available",
"up_to_date": "Up to Date",
"child_bridges": "Child Bridges",
"child_bridges_status": "{{ok}}/{{total}}",
"up": "Up",
"pending": "Pending",
"down": "Down"
},
"common": {
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
},
"widget": {
"missing_type": "Missing Widget Type: {{type}}",
"api_error": "API Error",
"information": "Informazioa",
"status": "Status",
"url": "URL",
"raw_error": "Raw Error",
"response_data": "Response Data"
},
"weather": {
"current": "Current Location",
"allow": "Click to allow",
"updating": "Eguneratzen",
"wait": "Itxaron mesedez"
},
"search": {
"placeholder": "Bilatu…"
},
"resources": {
"cpu": "CPU",
"mem": "MEM",
"total": "Guztira",
"free": "Free",
"used": "Erabilita",
"load": "Load",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"unifi": {
"users": "Users",
"uptime": "System Uptime",
"days": "Egun",
"wan": "WAN",
"lan": "LAN",
"wlan": "WLAN",
"devices": "Gailuak",
"lan_devices": "LAN Gailuak",
"wlan_devices": "WLAN Gailuak",
"lan_users": "LAN Erabiltzaileak",
"wlan_users": "WLAN Erabiltzaileak",
"up": "UP",
"down": "DOWN",
"wait": "Itxaron mesedez",
"empty_data": "Subsystem status unknown"
},
"docker": {
"rx": "RX",
"tx": "TX",
"mem": "MEM",
"cpu": "CPU",
"running": "Running",
"offline": "Offline",
"error": "Error",
"unknown": "Ezezaguna",
"healthy": "Osasuntsu",
"starting": "Abiarazten",
"unhealthy": "Unhealthy",
"not_found": "Not Found",
"exited": "Exited",
"partial": "Partial"
},
"ping": {
"error": "Errorea",
"ping": "Ping"
},
"emby": {
"playing": "Playing",
"transcoding": "Transcoding",
"bitrate": "Bit-tasa",
"no_active": "No Active Streams",
"movies": "Movies",
"series": "Series",
"episodes": "Episodes",
"songs": "Abestiak"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"flood": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"freshrss": {
"subscriptions": "Subscriptions",
"unread": "Unread"
},
"caddy": {
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"changedetectionio": {
"totalObserved": "Total Observed",
"diffsDetected": "Diffs Detected"
},
"channelsdvrserver": {
"shows": "Shows",
"recordings": "Recordings",
"scheduled": "Scheduled",
"passes": "Passes"
},
"tautulli": {
"playing": "Playing",
"transcoding": "Transcoding",
"bitrate": "Bitrate",
"no_active": "No Active Streams",
"plex_connection_error": "Check Plex Connection"
},
"omada": {
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways",
"connectedSwitches": "Connected switches"
},
"nzbget": {
"rate": "Rate",
"remaining": "Remaining",
"downloaded": "Downloaded"
},
"plex": {
"streams": "Active Streams",
"albums": "Albums",
"movies": "Movies",
"tv": "TV Shows"
},
"sabnzbd": {
"rate": "Rate",
"queue": "Queue",
"timeleft": "Time Left"
},
"rutorrent": {
"active": "Active",
"upload": "Kargatu",
"download": "Deskargatu"
},
"transmission": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"qbittorrent": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"qnap": {
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"deluge": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"downloadstation": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"sonarr": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Series",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Wanted",
"missing": "Missing",
"queued": "Queued",
"movies": "Movies",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Wanted",
"queued": "Queued",
"artists": "Artists"
},
"readarr": {
"wanted": "Wanted",
"queued": "Queued",
"books": "Books"
},
"bazarr": {
"missingEpisodes": "Missing Episodes",
"missingMovies": "Missing Movies"
},
"ombi": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
},
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
},
"overseerr": {
"pending": "Pending",
"processing": "Processing",
"approved": "Approved",
"available": "Available"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
},
"pihole": {
"queries": "Queries",
"blocked": "Blocked",
"blocked_percent": "Blocked %",
"gravity": "Gravity"
},
"adguard": {
"queries": "Queries",
"blocked": "Blocked",
"filtered": "Filtered",
"latency": "Latency"
},
"speedtest": {
"upload": "Upload",
"download": "Download",
"ping": "Ping"
},
"portainer": {
"running": "Running",
"stopped": "Stopped",
"total": "Total"
},
"tailscale": {
"address": "Address",
"expires": "Expires",
"never": "Never",
"last_seen": "Last Seen",
"now": "Now",
"years": "{{number}}y",
"weeks": "{{number}}w",
"days": "{{number}}d",
"hours": "{{number}}h",
"minutes": "{{number}}m",
"seconds": "{{number}}s",
"ago": "{{value}} Ago"
},
"tdarr": {
"queue": "Queue",
"processed": "Processed",
"errored": "Errored",
"saved": "Saved"
},
"traefik": {
"routers": "Routers",
"services": "Services",
"middleware": "Middleware"
},
"navidrome": {
"nothing_streaming": "No Active Streams",
"please_wait": "Please Wait"
},
"npm": {
"enabled": "Enabled",
"disabled": "Disabled",
"total": "Total"
},
"coinmarketcap": {
"configure": "Configure one or more crypto currencies to track",
"1hour": "1 Hour",
"1day": "1 Day",
"7days": "7 Days",
"30days": "30 Days"
},
"gotify": {
"apps": "Applications",
"clients": "Clients",
"messages": "Messages"
},
"prowlarr": {
"enableIndexers": "Indexers",
"numberOfGrabs": "Grabs",
"numberOfQueries": "Queries",
"numberOfFailGrabs": "Fail Grabs",
"numberOfFailQueries": "Fail Queries"
},
"jackett": {
"configured": "Configured",
"errored": "Errored"
},
"strelaysrv": {
"numActiveSessions": "Sessions",
"numConnections": "Connections",
"dataRelayed": "Relayed",
"transferRate": "Rate"
},
"mastodon": {
"user_count": "Users",
"status_count": "Posts",
"domain_count": "Domains"
},
"medusa": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Series"
},
"minecraft": {
"players": "Jokalariak",
"version": "Version",
"status": "Status",
"up": "Online",
"down": "Offline"
},
"miniflux": {
"read": "Read",
"unread": "Unread"
},
"authentik": {
"users": "Users",
"loginsLast24H": "Logins (24h)",
"failedLoginsLast24H": "Failed Logins (24h)"
},
"proxmox": {
"mem": "MEM",
"cpu": "CPU",
"lxc": "LXC",
"vms": "VMs"
},
"glances": {
"cpu": "CPU",
"load": "Load",
"wait": "Please wait",
"temp": "TEMP",
"warn": "Warn",
"uptime": "UP",
"total": "Total",
"free": "Free",
"used": "Used",
"days": "d",
"hours": "h",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
},
"quicklaunch": {
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"watchtower": {
"containers_scanned": "Scanned",
"containers_updated": "Updated",
"containers_failed": "Failed"
},
"autobrr": {
"approvedPushes": "Approved",
"rejectedPushes": "Rejected",
"filters": "Filters",
"indexers": "Indexers"
},
"tubearchivist": {
"downloads": "Queue",
"videos": "Videos",
"channels": "Channels",
"playlists": "Playlists"
},
"truenas": {
"load": "System Load",
"uptime": "Uptime",
"alerts": "Alerts",
"time": "{{value, number(style: unit; unitDisplay: long;)}}"
},
"pyload": {
"speed": "Speed",
"active": "Active",
"queue": "Queue",
"total": "Total"
},
"gluetun": {
"public_ip": "Public IP",
"region": "Region",
"country": "Country"
},
"hdhomerun": {
"channels": "Channels",
"hd": "HD"
},
"scrutiny": {
"passed": "Passed",
"failed": "Failed",
"unknown": "Unknown"
},
"paperlessngx": {
"inbox": "Inbox",
"total": "Total"
},
"nextdns": {
"wait": "Please Wait",
"no_devices": "No Device Data Received"
},
"mikrotik": {
"cpuLoad": "CPU Load",
"memoryUsed": "Memory Used",
"uptime": "Uptime",
"numberOfLeases": "Leases"
},
"xteve": {
"streams_all": "All Streams",
"streams_active": "Active Streams",
"streams_xepg": "XEPG Channels"
},
"opnsense": {
"cpu": "CPU Load",
"memory": "Active Memory",
"wanUpload": "WAN Upload",
"wanDownload": "WAN Download"
},
"moonraker": {
"printer_state": "Printer State",
"print_status": "Print Status",
"print_progress": "Progress",
"layers": "Layers"
},
"octoprint": {
"printer_state": "Status",
"temp_tool": "Tool temp",
"temp_bed": "Bed temp",
"job_completion": "Completion"
},
"cloudflared": {
"origin_ip": "Origin IP",
"status": "Status"
},
"pfsense": {
"load": "Load Avg",
"memory": "Mem Usage",
"wanStatus": "WAN Status",
"up": "Up",
"down": "Down",
"temp": "Temp",
"disk": "Disk Usage",
"wanIP": "WAN IP"
},
"proxmoxbackupserver": {
"datastore_usage": "Datastore",
"failed_tasks_24h": "Failed Tasks 24h",
"cpu_usage": "CPU",
"memory_usage": "Memory"
},
"immich": {
"users": "Users",
"photos": "Photos",
"videos": "Videos",
"storage": "Storage"
},
"uptimekuma": {
"up": "Sites Up",
"down": "Sites Down",
"uptime": "Uptime",
"incident": "Incident",
"m": "m"
},
"komga": {
"libraries": "Libraries",
"series": "Series",
"books": "Books"
},
"diskstation": {
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"mylar": {
"series": "Series",
"issues": "Issues",
"wanted": "Wanted"
},
"photoprism": {
"albums": "Albums",
"photos": "Photos",
"videos": "Videos",
"people": "People"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
},
"ghostfolio": {
"gross_percent_today": "Today",
"gross_percent_1y": "One year",
"gross_percent_max": "All time"
},
"audiobookshelf": {
"podcasts": "Podcasts",
"books": "Books",
"podcastsDuration": "Duration",
"booksDuration": "Duration"
},
"homeassistant": {
"people_home": "People Home",
"lights_on": "Lights On",
"switches_on": "Switches On"
},
"whatsupdocker": {
"monitoring": "Monitoring",
"updates": "Updates"
},
"jdownloader": {
"downloadCount": "Queue",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size",
"downloadSpeed": "Speed"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"currentPlayers": "Current players",
"name": "Name",
"map": "Map",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"notStarted": "Not Started",
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
}
}

View File

@ -62,7 +62,8 @@
"playing": "Toistaa", "playing": "Toistaa",
"transcoding": "Transkoodaa", "transcoding": "Transkoodaa",
"bitrate": "Bittinopeus", "bitrate": "Bittinopeus",
"no_active": "Ei aktiivisia striimejä" "no_active": "Ei aktiivisia striimejä",
"plex_connection_error": "Check Plex Connection"
}, },
"nzbget": { "nzbget": {
"rate": "Nopeus", "rate": "Nopeus",
@ -94,18 +95,22 @@
"sonarr": { "sonarr": {
"wanted": "Haluttu", "wanted": "Haluttu",
"queued": "Jonossa", "queued": "Jonossa",
"series": "Sarja" "series": "Sarja",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "Haluttu", "wanted": "Haluttu",
"queued": "Jonossa", "queued": "Jonossa",
"movies": "Elokuvia", "movies": "Elokuvia",
"missing": "Missing" "missing": "Missing",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "Haluttu", "wanted": "Haluttu",
"queued": "Jonossa", "queued": "Jonossa",
"albums": "Albumeja" "artists": "Artists"
}, },
"readarr": { "readarr": {
"wanted": "Haluttu", "wanted": "Haluttu",
@ -235,11 +240,21 @@
"glances": { "glances": {
"wait": "Please wait", "wait": "Please wait",
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Total Observed", "totalObserved": "Total Observed",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -5,8 +5,8 @@
"status": "Statut", "status": "Statut",
"information": "Information", "information": "Information",
"url": "URL", "url": "URL",
"raw_error": "Raw Error", "raw_error": "Erreur brute",
"response_data": "Response Data" "response_data": "Données de réponse"
}, },
"search": { "search": {
"placeholder": "Recherche…" "placeholder": "Recherche…"
@ -56,7 +56,8 @@
"playing": "En lecture", "playing": "En lecture",
"transcoding": "Transcodage", "transcoding": "Transcodage",
"bitrate": "Débit", "bitrate": "Débit",
"no_active": "Aucun flux actif" "no_active": "Aucun flux actif",
"plex_connection_error": "Vérifier la connexion à Plex"
}, },
"rutorrent": { "rutorrent": {
"active": "Actif", "active": "Actif",
@ -66,13 +67,17 @@
"sonarr": { "sonarr": {
"wanted": "Demande", "wanted": "Demande",
"queued": "Attente", "queued": "Attente",
"series": "Séries" "series": "Séries",
"queue": "Attente",
"unknown": "Inconnu"
}, },
"radarr": { "radarr": {
"wanted": "Demande", "wanted": "Demande",
"queued": "Attente", "queued": "Attente",
"movies": "Films", "movies": "Films",
"missing": "Manquant" "missing": "Manquant",
"queue": "Attente",
"unknown": "Inconnu"
}, },
"readarr": { "readarr": {
"wanted": "Demande", "wanted": "Demande",
@ -173,7 +178,7 @@
"lidarr": { "lidarr": {
"wanted": "Demandé", "wanted": "Demandé",
"queued": "En queue", "queued": "En queue",
"albums": "Albums" "artists": "Artistes"
}, },
"adguard": { "adguard": {
"queries": "Requêtes", "queries": "Requêtes",
@ -234,12 +239,22 @@
}, },
"glances": { "glances": {
"cpu": "Cpu", "cpu": "Cpu",
"mem": "Mém",
"wait": "Merci de patienter", "wait": "Merci de patienter",
"temp": "Temp", "temp": "Temp",
"uptime": "Up", "uptime": "Up",
"days": "j", "days": "j",
"hours": "h" "hours": "h",
"load": "Charge",
"warn": "Alerte",
"total": "Total",
"free": "Libre",
"used": "Utilisé",
"crit": "Crit.",
"read": "Lect.",
"write": "Écrit.",
"gpu": "GPU",
"mem": "Mém.",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Total Observé", "totalObserved": "Total Observé",
@ -393,7 +408,7 @@
"queue": "À traiter", "queue": "À traiter",
"processed": "Traité", "processed": "Traité",
"errored": "En erreur", "errored": "En erreur",
"saved": "Economisé" "saved": "Libéré"
}, },
"miniflux": { "miniflux": {
"read": "Lu", "read": "Lu",
@ -570,7 +585,7 @@
"homeassistant": { "homeassistant": {
"people_home": "People Home", "people_home": "People Home",
"lights_on": "Lumières allumées", "lights_on": "Lumières allumées",
"switches_on": "Switches On" "switches_on": "Commutateur On"
}, },
"freshrss": { "freshrss": {
"unread": "Non lu", "unread": "Non lu",
@ -605,8 +620,8 @@
"memUsage": "Mém", "memUsage": "Mém",
"systemTempC": "Temp", "systemTempC": "Temp",
"poolUsage": "Pool", "poolUsage": "Pool",
"volumeUsage": "Volume Usage", "volumeUsage": "Volume",
"invalid": "Invalid" "invalid": "Invalide"
}, },
"pfsense": { "pfsense": {
"load": "Charge moy.", "load": "Charge moy.",
@ -633,8 +648,63 @@
}, },
"pialert": { "pialert": {
"total": "Total", "total": "Total",
"connected": "Connected", "connected": "Connecté",
"new_devices": "New Devices", "new_devices": "Nouvel Appareil",
"down_alerts": "Down Alerts" "down_alerts": "Alertes"
},
"jdownloader": {
"downloadCount": "Total en attente",
"downloadSpeed": "Vitesse de téléchargement",
"downloadBytesRemaining": "Restant",
"downloadTotalBytes": "Taille"
},
"kavita": {
"seriesCount": "Séries",
"totalFiles": "Fichiers"
},
"gamedig": {
"name": "Nom",
"map": "Carte",
"currentPlayers": "Joueurs actuels",
"players": "Joueurs",
"maxPlayers": "Joueurs max",
"bots": "Bots",
"ping": "Ping",
"status": "Statut",
"online": "En ligne",
"offline": "Hors ligne"
},
"azuredevops": {
"result": "Résultat",
"status": "Statut",
"buildId": "Build ID",
"succeeded": "Réussi",
"notStarted": "Arrêté",
"failed": "Échoué",
"canceled": "Annulé",
"inProgress": "En cours",
"totalPrs": "PRs Total",
"myPrs": "Mes PRs",
"approved": "Approuvé"
},
"urbackup": {
"ok": "Ok",
"errored": "Erreur",
"noRecent": "Obsolète",
"totalUsed": "Esp. Utilisé"
},
"openmediavault": {
"downloading": "Téléchargement",
"total": "Total",
"running": "Démarré",
"stopped": "Arrêté",
"passed": "Réussi",
"failed": "Échoué"
},
"mealie": {
"recipes": "Recettes",
"users": "Utilisateurs",
"categories": "Catégories",
"tags": "Étiquettes"
} }
} }

View File

@ -62,7 +62,8 @@
"playing": "מנגן", "playing": "מנגן",
"transcoding": "מקודד", "transcoding": "מקודד",
"bitrate": "סיביות", "bitrate": "סיביות",
"no_active": "אין הזרמות פעילות" "no_active": "אין הזרמות פעילות",
"plex_connection_error": "Check Plex Connection"
}, },
"nzbget": { "nzbget": {
"rate": "יחס", "rate": "יחס",
@ -94,18 +95,22 @@
"sonarr": { "sonarr": {
"wanted": "מבוקש", "wanted": "מבוקש",
"queued": "בתור", "queued": "בתור",
"series": "סדרות" "series": "סדרות",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "מבוקש", "wanted": "מבוקש",
"queued": "בתור", "queued": "בתור",
"movies": "סרטים", "movies": "סרטים",
"missing": "Missing" "missing": "Missing",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "מבוקש", "wanted": "מבוקש",
"queued": "בתור", "queued": "בתור",
"albums": "אלבומים" "artists": "Artists"
}, },
"readarr": { "readarr": {
"wanted": "מבוקש", "wanted": "מבוקש",
@ -234,12 +239,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"wait": "Please wait", "wait": "Please wait",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"warn": "Warn",
"load": "Load",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Total Observed", "totalObserved": "Total Observed",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"myPrs": "My PRs",
"totalPrs": "Total PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -117,7 +117,8 @@
"playing": "Playing", "playing": "Playing",
"transcoding": "Transcoding", "transcoding": "Transcoding",
"bitrate": "Bitrate", "bitrate": "Bitrate",
"no_active": "No Active Streams" "no_active": "No Active Streams",
"plex_connection_error": "Check Plex Connection"
}, },
"nzbget": { "nzbget": {
"rate": "Rate", "rate": "Rate",
@ -155,18 +156,22 @@
"sonarr": { "sonarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"series": "Series" "series": "Series",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "Wanted", "wanted": "Wanted",
"missing": "Missing", "missing": "Missing",
"queued": "Queued", "queued": "Queued",
"movies": "Movies" "movies": "Movies",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"albums": "Albums" "artists": "Artists"
}, },
"overseerr": { "overseerr": {
"pending": "Pending", "pending": "Pending",
@ -242,12 +247,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"wait": "Please wait", "wait": "Please wait",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"quicklaunch": { "quicklaunch": {
"bookmark": "Bookmark", "bookmark": "Bookmark",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"myPrs": "My PRs",
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -104,7 +104,8 @@
"playing": "Reprodukcija", "playing": "Reprodukcija",
"transcoding": "Prekodiranje", "transcoding": "Prekodiranje",
"bitrate": "Stopa bitova", "bitrate": "Stopa bitova",
"no_active": "Nema aktivnih prijenosa" "no_active": "Nema aktivnih prijenosa",
"plex_connection_error": "Provjeri Plex vezu"
}, },
"nzbget": { "nzbget": {
"rate": "Stopa", "rate": "Stopa",
@ -125,18 +126,22 @@
"sonarr": { "sonarr": {
"wanted": "Zatraženo", "wanted": "Zatraženo",
"queued": "U redu čekanja", "queued": "U redu čekanja",
"series": "Serije" "series": "Serije",
"unknown": "Nepoznato",
"queue": "Red čekanja"
}, },
"radarr": { "radarr": {
"wanted": "Zatraženo", "wanted": "Zatraženo",
"queued": "U redu čekanja", "queued": "U redu čekanja",
"movies": "Filmovi", "movies": "Filmovi",
"missing": "Nedostaje" "missing": "Nedostaje",
"queue": "Red čekanja",
"unknown": "Nepoznato"
}, },
"lidarr": { "lidarr": {
"wanted": "Zatraženo", "wanted": "Zatraženo",
"queued": "U redu čekanja", "queued": "U redu čekanja",
"albums": "Albumi" "artists": "Umjetnici"
}, },
"readarr": { "readarr": {
"wanted": "Zatraženo", "wanted": "Zatraženo",
@ -234,12 +239,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"wait": "Pričekaj", "wait": "Pričekaj",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"used": "Korišteno",
"load": "Opterećenje",
"warn": "Upozori",
"total": "Ukupno",
"free": "Slobodno",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Ukupno promatrano", "totalObserved": "Ukupno promatrano",
@ -474,7 +489,7 @@
"up": "Aktivne stranice", "up": "Aktivne stranice",
"down": "Neaktivne stranice", "down": "Neaktivne stranice",
"uptime": "Radno vrijeme", "uptime": "Radno vrijeme",
"incident": "Incident", "incident": "Slučaj",
"m": "min" "m": "min"
}, },
"komga": { "komga": {
@ -605,36 +620,91 @@
"poolUsage": "Korištenje memorijskog skupa", "poolUsage": "Korištenje memorijskog skupa",
"cpuUsage": "Korištenje procesora", "cpuUsage": "Korištenje procesora",
"memUsage": "Korištenje memorije", "memUsage": "Korištenje memorije",
"volumeUsage": "Volume Usage", "volumeUsage": "Korištenje jedinice memorije",
"invalid": "Invalid" "invalid": "Neispravno"
}, },
"pfsense": { "pfsense": {
"load": "Load Avg", "load": "Prosječno opterećenje",
"memory": "Mem Usage", "memory": "Korištenje memorije",
"wanStatus": "WAN Status", "wanStatus": "Stanje WAN-a",
"up": "Up", "up": "Up",
"down": "Down", "down": "Down",
"temp": "Temp", "temp": "Temperatura",
"disk": "Disk Usage", "disk": "Korištenje diska",
"wanIP": "WAN IP" "wanIP": "WAN IP"
}, },
"caddy": { "caddy": {
"upstreams": "Upstreams", "upstreams": "Glavne grane",
"requests": "Current requests", "requests": "Aktualni zahtjevi",
"requests_failed": "Failed requests" "requests_failed": "Neuspjeli zahtjevi"
}, },
"evcc": { "evcc": {
"pv_power": "Production", "pv_power": "Proizvodnja",
"battery_soc": "Battery", "battery_soc": "Baterija",
"grid_power": "Grid", "grid_power": "Raspored",
"home_power": "Consumption", "home_power": "Potrošnja",
"charge_power": "Charger", "charge_power": "Punjač",
"watt_hour": "Wh" "watt_hour": "Wh"
}, },
"pialert": { "pialert": {
"total": "Ukupno",
"connected": "Povezano",
"new_devices": "Novi uređaji",
"down_alerts": "Obavijest o rušenju"
},
"jdownloader": {
"downloadCount": "Red čekanja",
"downloadSpeed": "Brzina",
"downloadBytesRemaining": "Preostalo",
"downloadTotalBytes": "Veličina"
},
"kavita": {
"seriesCount": "Serije",
"totalFiles": "Datoteke"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"noRecent": "Out of Date",
"totalUsed": "Used Storage",
"ok": "Ok",
"errored": "Errors"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total", "total": "Total",
"connected": "Connected", "running": "Running",
"new_devices": "New Devices", "stopped": "Stopped",
"down_alerts": "Down Alerts" "passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -4,15 +4,15 @@
"free": "Szabad", "free": "Szabad",
"used": "Használt", "used": "Használt",
"load": "Terhelés", "load": "Terhelés",
"cpu": "CPU", "cpu": "Processzor",
"mem": "MEM", "mem": "MEM",
"temp": "TEMP", "temp": "TEMP",
"max": "Max", "max": "Max",
"uptime": "UP", "uptime": "FUT",
"months": "mo", "months": "",
"days": "d", "days": "n",
"hours": "h", "hours": "ó",
"minutes": "m" "minutes": "p"
}, },
"docker": { "docker": {
"rx": "RX", "rx": "RX",
@ -20,20 +20,20 @@
"mem": "MEM", "mem": "MEM",
"cpu": "CPU", "cpu": "CPU",
"offline": "Offline", "offline": "Offline",
"error": "Error", "error": "Hiba",
"unknown": "Unknown", "unknown": "Ismeretlen",
"unhealthy": "Unhealthy", "unhealthy": "Egészségtelen",
"running": "Running", "running": "Futó",
"starting": "Starting", "starting": "Indul",
"not_found": "Not Found", "not_found": "Nem található",
"exited": "Exited", "exited": "Kilépett",
"partial": "Partial", "partial": "Részleges",
"healthy": "Healthy" "healthy": "Egészséges"
}, },
"lidarr": { "lidarr": {
"albums": "Albumok",
"wanted": "Keresett", "wanted": "Keresett",
"queued": "Sorban áll" "queued": "Sorban áll",
"artists": "Előadók"
}, },
"readarr": { "readarr": {
"wanted": "Keresett", "wanted": "Keresett",
@ -48,16 +48,16 @@
"missing_type": "Hiányzó Widget Típus: {{type}}", "missing_type": "Hiányzó Widget Típus: {{type}}",
"api_error": "API Hiba", "api_error": "API Hiba",
"status": "Státusz", "status": "Státusz",
"information": "Information", "information": "Információ",
"url": "URL", "url": "URL",
"raw_error": "Raw Error", "raw_error": "Nyers hiba",
"response_data": "Response Data" "response_data": "Válaszadatok"
}, },
"weather": { "weather": {
"current": "Aktuális hely", "current": "Aktuális hely",
"allow": "Kattints az engedélyezéshez", "allow": "Kattints az engedélyezéshez",
"updating": "Frissítés", "updating": "Frissítés",
"wait": "Kérlek várj" "wait": "Kérjük várjon"
}, },
"search": { "search": {
"placeholder": "Keresés…" "placeholder": "Keresés…"
@ -67,16 +67,17 @@
"transcoding": "Átkódolás", "transcoding": "Átkódolás",
"bitrate": "Bitráta", "bitrate": "Bitráta",
"no_active": "Nincs aktív lejátszás", "no_active": "Nincs aktív lejátszás",
"movies": "Movies", "movies": "Film",
"series": "Series", "series": "Sorozat",
"episodes": "Episodes", "episodes": "Epizód",
"songs": "Songs" "songs": "Zeneszám"
}, },
"tautulli": { "tautulli": {
"playing": "Lejátszás folyamatban", "playing": "Lejátszás folyamatban",
"transcoding": "Átkódolás", "transcoding": "Átkódolás",
"bitrate": "Bitráta", "bitrate": "Bitráta",
"no_active": "Nincs aktív lejátszás" "no_active": "Nincs aktív lejátszás",
"plex_connection_error": "Plex kapcsolat ellenőrzése"
}, },
"nzbget": { "nzbget": {
"rate": "Ráta", "rate": "Ráta",
@ -108,13 +109,17 @@
"sonarr": { "sonarr": {
"wanted": "Keresett", "wanted": "Keresett",
"queued": "Sorban áll", "queued": "Sorban áll",
"series": "Sorozat" "series": "Sorozat",
"queue": "Várólista",
"unknown": "Ismeretlen"
}, },
"radarr": { "radarr": {
"wanted": "Keresett", "wanted": "Keresett",
"queued": "Sorban áll", "queued": "Sorban áll",
"movies": "Filmek", "movies": "Filmek",
"missing": "Missing" "missing": "Hiányzik",
"queue": "Várólista",
"unknown": "Ismeretlen"
}, },
"ombi": { "ombi": {
"pending": "Függőben", "pending": "Függőben",
@ -130,13 +135,13 @@
"pending": "Függőben", "pending": "Függőben",
"approved": "Engedélyezett", "approved": "Engedélyezett",
"available": "Elérhető", "available": "Elérhető",
"processing": "Processing" "processing": "Feldolgozás"
}, },
"pihole": { "pihole": {
"queries": "Lekérdezések", "queries": "Lekérdezések",
"blocked": "Blokkolt", "blocked": "Blokkolt",
"gravity": "Gravitáció", "gravity": "Gravitáció",
"blocked_percent": "Blocked %" "blocked_percent": "Blokkolt %"
}, },
"adguard": { "adguard": {
"queries": "Lekérdezések", "queries": "Lekérdezések",
@ -188,453 +193,518 @@
"errored": "Hibás" "errored": "Hibás"
}, },
"mastodon": { "mastodon": {
"user_count": "Users", "user_count": "Felhasználók",
"status_count": "Posts", "status_count": "Posztok",
"domain_count": "Domains" "domain_count": "Domainek"
}, },
"strelaysrv": { "strelaysrv": {
"numActiveSessions": "Sessions", "numActiveSessions": "Munkamenetek",
"numConnections": "Connections", "numConnections": "Csatlakozások",
"dataRelayed": "Relayed", "dataRelayed": "Átirányított",
"transferRate": "Rate" "transferRate": "Ráta"
}, },
"authentik": { "authentik": {
"users": "Users", "users": "Felhasználók",
"loginsLast24H": "Logins (24h)", "loginsLast24H": "Bejelentkezések (24 óra)",
"failedLoginsLast24H": "Failed Logins (24h)" "failedLoginsLast24H": "Sikertelen bejelentkezések (24h)"
}, },
"proxmox": { "proxmox": {
"mem": "MEM", "mem": "RAM",
"cpu": "CPU", "cpu": "Processzor",
"lxc": "LXC", "lxc": "LXC",
"vms": "VMs" "vms": "VM-ek"
}, },
"unifi": { "unifi": {
"users": "Users", "users": "Felhasználók",
"uptime": "System Uptime", "uptime": "Rendszer üzemidő",
"days": "Days", "days": "Napok",
"wan": "WAN", "wan": "WAN",
"lan_users": "LAN Users", "lan_users": "LAN Felhasználók",
"wlan_users": "WLAN Users", "wlan_users": "WLAN Felhasználók",
"up": "UP", "up": "FUT",
"down": "DOWN", "down": "ÁLL",
"wait": "Please wait", "wait": "Kérjük várjon",
"lan": "LAN", "lan": "LAN",
"wlan": "WLAN", "wlan": "WLAN",
"devices": "Devices", "devices": "Eszközök",
"lan_devices": "LAN Devices", "lan_devices": "LAN Eszközök",
"wlan_devices": "WLAN Devices", "wlan_devices": "WLAN Eszközök",
"empty_data": "Subsystem status unknown" "empty_data": "Az alrendszer állapota ismeretlen"
}, },
"plex": { "plex": {
"streams": "Active Streams", "streams": "Aktív Stream-ek",
"movies": "Movies", "movies": "Filmek",
"tv": "TV Shows", "tv": "TV műsorok",
"albums": "Albums" "albums": "Albumok"
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "Processzor",
"mem": "MEM", "wait": "Kérjük várjon",
"wait": "Please wait", "temp": "HŐMÉRSÉKLET",
"temp": "TEMP", "uptime": "FUT",
"uptime": "UP", "days": "n",
"days": "d", "hours": "ó",
"hours": "h" "load": "Kapacitáskihasználás",
"warn": "Figyelmeztet",
"total": "Összes",
"free": "Szabad",
"used": "Felhasznált",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Total Observed", "totalObserved": "Összes Megfigyelt",
"diffsDetected": "Diffs Detected" "diffsDetected": "Észlelt különbségek"
}, },
"wmo": { "wmo": {
"0-day": "Sunny", "0-day": "Napos",
"0-night": "Clear", "0-night": "Derült",
"3-day": "Cloudy", "3-day": "Felhős",
"3-night": "Cloudy", "3-night": "Felhős",
"45-day": "Foggy", "45-day": "Ködös",
"53-day": "Drizzle", "53-day": "Szitálás",
"56-night": "Light Freezing Drizzle", "56-night": "Enyhe fagyos szitálás",
"57-day": "Freezing Drizzle", "57-day": "Fagyos szitálás",
"1-day": "Mainly Sunny", "1-day": "Többnyire napos",
"1-night": "Mainly Clear", "1-night": "Többnyire derült",
"2-day": "Partly Cloudy", "2-day": "Részben felhős",
"2-night": "Partly Cloudy", "2-night": "Részben felhős",
"45-night": "Foggy", "45-night": "Ködös",
"48-day": "Foggy", "48-day": "Ködös",
"48-night": "Foggy", "48-night": "Ködös",
"51-day": "Light Drizzle", "51-day": "Enyhe szitálás",
"51-night": "Light Drizzle", "51-night": "Enyhe szitálás",
"57-night": "Freezing Drizzle", "57-night": "Fagyos szitálás",
"61-day": "Light Rain", "61-day": "Enyhe eső",
"61-night": "Light Rain", "61-night": "Enyhe eső",
"53-night": "Drizzle", "53-night": "Szitálás",
"55-day": "Heavy Drizzle", "55-day": "Erős szitálás",
"55-night": "Heavy Drizzle", "55-night": "Erős szitálás",
"56-day": "Light Freezing Drizzle", "56-day": "Enyhe fagyos szitálás",
"63-day": "Rain", "63-day": "Eső",
"63-night": "Rain", "63-night": "Eső",
"65-day": "Heavy Rain", "65-day": "Heves eső",
"65-night": "Heavy Rain", "65-night": "Heves eső",
"66-day": "Freezing Rain", "66-day": "Ónos eső",
"66-night": "Freezing Rain", "66-night": "Ónos eső",
"67-day": "Freezing Rain", "67-day": "Ónos eső",
"67-night": "Freezing Rain", "67-night": "Ónos eső",
"71-day": "Light Snow", "71-day": "Enyhe havazás",
"71-night": "Light Snow", "71-night": "Enyhe havazás",
"73-day": "Snow", "73-day": "",
"73-night": "Snow", "73-night": "",
"75-day": "Heavy Snow", "75-day": "Erős havazás",
"75-night": "Heavy Snow", "75-night": "Erős havazás",
"77-day": "Snow Grains", "77-day": "Hódara",
"77-night": "Snow Grains", "77-night": "Hódara",
"80-day": "Light Showers", "80-day": "Enyhe záporok",
"80-night": "Light Showers", "80-night": "Enyhe záporok",
"81-day": "Showers", "81-day": "Záporok",
"81-night": "Showers", "81-night": "Záporok",
"82-day": "Heavy Showers", "82-day": "Heves záporok",
"82-night": "Heavy Showers", "82-night": "Heves záporok",
"85-day": "Snow Showers", "85-day": "Hózáporok",
"85-night": "Snow Showers", "85-night": "Hózáporok",
"86-day": "Snow Showers", "86-day": "Hózáporok",
"86-night": "Snow Showers", "86-night": "Hózáporok",
"95-day": "Thunderstorm", "95-day": "Zivatar",
"95-night": "Thunderstorm", "95-night": "Zivatar",
"96-day": "Thunderstorm With Hail", "96-day": "Zivatar jégesővel",
"96-night": "Thunderstorm With Hail", "96-night": "Zivatar jégesővel",
"99-day": "Thunderstorm With Hail", "99-day": "Zivatar jégesővel",
"99-night": "Thunderstorm With Hail" "99-night": "Zivatar jégesővel"
}, },
"quicklaunch": { "quicklaunch": {
"bookmark": "Bookmark", "bookmark": "Könyvjelző",
"service": "Service", "service": "Szolgáltatás",
"search": "Search", "search": "Keresés",
"custom": "Custom", "custom": "Egyedi",
"visit": "Visit", "visit": "Megnéz",
"url": "URL" "url": "URL"
}, },
"homebridge": { "homebridge": {
"available_update": "System", "available_update": "Rendszer",
"updates": "Updates", "updates": "Frissítések",
"update_available": "Update Available", "update_available": "Elérhető Frissítés",
"up_to_date": "Up to Date", "up_to_date": "Naprakész",
"child_bridges": "Child Bridges", "child_bridges": "Gyerek Hidak",
"child_bridges_status": "{{ok}}/{{total}}", "child_bridges_status": "{{ok}}/{{total}}",
"up": "Up", "up": "Fut",
"pending": "Pending", "pending": "Függőben",
"down": "Down" "down": "Áll"
}, },
"autobrr": { "autobrr": {
"approvedPushes": "Approved", "approvedPushes": "Jóváhagyott",
"rejectedPushes": "Rejected", "rejectedPushes": "Elutasított",
"filters": "Filters", "filters": "Szűrők",
"indexers": "Indexers" "indexers": "Indexelők"
}, },
"watchtower": { "watchtower": {
"containers_scanned": "Scanned", "containers_scanned": "Beolvasott",
"containers_updated": "Updated", "containers_updated": "Frissített",
"containers_failed": "Failed" "containers_failed": "Sikertelen"
}, },
"tubearchivist": { "tubearchivist": {
"downloads": "Queue", "downloads": "Várólista",
"videos": "Videos", "videos": "Videók",
"channels": "Channels", "channels": "Csatornák",
"playlists": "Playlists" "playlists": "Lejátszási listák"
}, },
"truenas": { "truenas": {
"load": "System Load", "load": "Rendszerterheltség",
"uptime": "Uptime", "uptime": "Üzemidő",
"alerts": "Alerts", "alerts": "Riasztások",
"time": "{{value, number(style: unit; unitDisplay: long;)}}" "time": "{{value, number(style: unit; unitDisplay: long;)}}"
}, },
"navidrome": { "navidrome": {
"nothing_streaming": "No Active Streams", "nothing_streaming": "Nincsenek Aktív Stream-ek",
"please_wait": "Please Wait" "please_wait": "Kérjük Várjon"
}, },
"pyload": { "pyload": {
"speed": "Speed", "speed": "Sebesség",
"active": "Active", "active": "Aktív",
"queue": "Queue", "queue": "Várólista",
"total": "Total" "total": "Összes"
}, },
"gluetun": { "gluetun": {
"public_ip": "Public IP", "public_ip": "Nyilvános IP-cím",
"region": "Region", "region": "Régió",
"country": "Country" "country": "Ország"
}, },
"hdhomerun": { "hdhomerun": {
"channels": "Channels", "channels": "Csatornák",
"hd": "HD" "hd": "HD"
}, },
"ping": { "ping": {
"error": "Error", "error": "Hiba",
"ping": "Ping" "ping": "Ping"
}, },
"scrutiny": { "scrutiny": {
"passed": "Passed", "passed": "Megfelelt",
"failed": "Failed", "failed": "Sikertelen",
"unknown": "Unknown" "unknown": "Ismeretlen"
}, },
"paperlessngx": { "paperlessngx": {
"inbox": "Inbox", "inbox": "Beérkezett",
"total": "Total" "total": "Összes"
}, },
"deluge": { "deluge": {
"download": "Download", "download": "Letöltés",
"seed": "Seed", "seed": "Seed",
"upload": "Upload", "upload": "Feltöltés",
"leech": "Leech" "leech": "Leech"
}, },
"flood": { "flood": {
"download": "Download", "download": "Letöltés",
"upload": "Upload", "upload": "Feltöltés",
"leech": "Leech", "leech": "Leech",
"seed": "Seed" "seed": "Seed"
}, },
"tdarr": { "tdarr": {
"queue": "Queue", "queue": "Várólista",
"processed": "Processed", "processed": "Feldolgozott",
"errored": "Errored", "errored": "Hibás",
"saved": "Saved" "saved": "Mentett"
}, },
"miniflux": { "miniflux": {
"read": "Read", "read": "Olvasott",
"unread": "Unread" "unread": "Olvasatlan"
}, },
"nextdns": { "nextdns": {
"wait": "Please Wait", "wait": "Kérjük Várjon",
"no_devices": "No Device Data Received" "no_devices": "Nincs fogadott eszközadat"
}, },
"common": { "common": {
"bibyterate": "{{value, rate(bits: false; binary: true)}}", "bibyterate": "{{value, rate(bits: false; binary: true)}}",
"bibitrate": "{{value, rate(bits: true; binary: true)}}" "bibitrate": "{{value, rate(bits: true; binary: true)}}"
}, },
"omada": { "omada": {
"activeUser": "Active devices", "activeUser": "Aktív eszközök",
"alerts": "Alerts", "alerts": "Riasztások",
"connectedAp": "Connected APs", "connectedAp": "Csatlakoztatott AP-k",
"connectedGateway": "Connected gateways", "connectedGateway": "Csatlakoztatott gateway-ek",
"connectedSwitches": "Connected switches" "connectedSwitches": "Csatlakoztatott switch-ek"
}, },
"downloadstation": { "downloadstation": {
"download": "Download", "download": "Letöltés",
"upload": "Upload", "upload": "Feltöltés",
"leech": "Leech", "leech": "Leech",
"seed": "Seed" "seed": "Seed"
}, },
"mikrotik": { "mikrotik": {
"cpuLoad": "CPU Load", "cpuLoad": "Processzor Terhelés",
"memoryUsed": "Memory Used", "memoryUsed": "Felhasznált Memória",
"uptime": "Uptime", "uptime": "Üzemidő",
"numberOfLeases": "Leases" "numberOfLeases": "Bérletek"
}, },
"xteve": { "xteve": {
"streams_all": "All Streams", "streams_all": "Minden Stream",
"streams_active": "Active Streams", "streams_active": "Aktív Stream-ek",
"streams_xepg": "XEPG Channels" "streams_xepg": "XEPG Csatornák"
}, },
"opnsense": { "opnsense": {
"cpu": "CPU Load", "cpu": "Processzor Terhelés",
"memory": "Active Memory", "memory": "Aktív Memória",
"wanUpload": "WAN Upload", "wanUpload": "WAN Feltöltés",
"wanDownload": "WAN Download" "wanDownload": "WAN Letöltés"
}, },
"moonraker": { "moonraker": {
"layers": "Layers", "layers": "Rétegek",
"printer_state": "Printer State", "printer_state": "Nyomtató Állapota",
"print_status": "Print Status", "print_status": "Nyomtatás Állapota",
"print_progress": "Progress" "print_progress": "Folyamat"
}, },
"medusa": { "medusa": {
"wanted": "Wanted", "wanted": "Keresett",
"queued": "Queued", "queued": "Sorba állítva",
"series": "Series" "series": "Sorozatok"
}, },
"octoprint": { "octoprint": {
"printer_state": "Status", "printer_state": "Állapot",
"temp_tool": "Tool temp", "temp_tool": "Szerszám hőmérséklet",
"temp_bed": "Bed temp", "temp_bed": "Ágy Hőmérséklet",
"job_completion": "Completion" "job_completion": "Teljesítés"
}, },
"cloudflared": { "cloudflared": {
"origin_ip": "Origin IP", "origin_ip": "Eredeti IP",
"status": "Status" "status": "Állapot"
}, },
"proxmoxbackupserver": { "proxmoxbackupserver": {
"datastore_usage": "Datastore", "datastore_usage": "Adattár",
"failed_tasks_24h": "Failed Tasks 24h", "failed_tasks_24h": "Sikertelen feladatok 24h",
"cpu_usage": "CPU", "cpu_usage": "Processzor",
"memory_usage": "Memory" "memory_usage": "Memória"
}, },
"immich": { "immich": {
"users": "Users", "users": "Felhasználók",
"photos": "Photos", "photos": "Fényképek",
"videos": "Videos", "videos": "Videók",
"storage": "Storage" "storage": "Tárhely"
}, },
"uptimekuma": { "uptimekuma": {
"up": "Sites Up", "up": "Futó Webhelyek",
"down": "Sites Down", "down": "Nem Elérhető Webhelyek",
"uptime": "Uptime", "uptime": "Üzemidő",
"incident": "Incident", "incident": "Incidens",
"m": "m" "m": "perc"
}, },
"komga": { "komga": {
"libraries": "Libraries", "libraries": "Könyvtárak",
"series": "Series", "series": "Sorozatok",
"books": "Books" "books": "Könyvek"
}, },
"mylar": { "mylar": {
"series": "Series", "series": "Sorozatok",
"issues": "Issues", "issues": "Problémák",
"wanted": "Wanted" "wanted": "Keresett"
}, },
"photoprism": { "photoprism": {
"albums": "Albums", "albums": "Albumok",
"photos": "Photos", "photos": "Fényképek",
"videos": "Videos", "videos": "Videók",
"people": "People" "people": "Emberek"
}, },
"diskstation": { "diskstation": {
"days": "Days", "days": "Napok",
"uptime": "Uptime", "uptime": "Üzemidő",
"volumeAvailable": "Available" "volumeAvailable": "Elérhető"
}, },
"fileflows": { "fileflows": {
"queue": "Queue", "queue": "Várólista",
"processing": "Processing", "processing": "Feldolgozás",
"processed": "Processed", "processed": "Feldolgozott",
"time": "Time" "time": "Idő"
}, },
"grafana": { "grafana": {
"dashboards": "Dashboards", "dashboards": "Műszerfalak",
"datasources": "Data Sources", "datasources": "Adatforrások",
"totalalerts": "Total Alerts", "totalalerts": "Összes Riasztás",
"alertstriggered": "Alerts Triggered" "alertstriggered": "Aktivált riasztások"
}, },
"nextcloud": { "nextcloud": {
"cpuload": "Cpu Load", "cpuload": "Processzor Terhelés",
"memoryusage": "Memory Usage", "memoryusage": "Memória Használat",
"freespace": "Free Space", "freespace": "Szabad hely",
"activeusers": "Active Users", "activeusers": "Aktív Felhasználók",
"numfiles": "Files", "numfiles": "Fájlok",
"numshares": "Shared Items" "numshares": "Megosztott Elemek"
}, },
"kopia": { "kopia": {
"status": "Status", "status": "Állapot",
"size": "Size", "size": "Méret",
"lastrun": "Last Run", "lastrun": "Legutóbbi futtatás",
"nextrun": "Next Run", "nextrun": "Következő Futtatás",
"failed": "Failed" "failed": "Sikertelen"
}, },
"unmanic": { "unmanic": {
"active_workers": "Active Workers", "active_workers": "Aktív Dolgozók",
"total_workers": "Total Workers", "total_workers": "Összes Dolgozó",
"records_total": "Queue Length" "records_total": "Várólista Hossza"
}, },
"healthchecks": { "healthchecks": {
"new": "New", "new": "Új",
"up": "Online", "up": "Online",
"grace": "In Grace Period", "grace": "Türelmi idő alatt",
"down": "Offline", "down": "Offline",
"paused": "Paused", "paused": "Szünetel",
"status": "Status", "status": "Állapot",
"last_ping": "Last Ping", "last_ping": "Legutóbbi Ping",
"never": "No pings yet" "never": "Még nincsenek ping-ek"
}, },
"pterodactyl": { "pterodactyl": {
"servers": "Servers", "servers": "Szerverek",
"nodes": "Nodes" "nodes": "Node-ok"
}, },
"prometheus": { "prometheus": {
"targets_up": "Targets Up", "targets_up": "Célpontok Futnak",
"targets_down": "Targets Down", "targets_down": "Célpontok Állnak",
"targets_total": "Total Targets" "targets_total": "Összes Célpont"
}, },
"minecraft": { "minecraft": {
"players": "Players", "players": "Lejátszók",
"version": "Version", "version": "Verzió",
"status": "Status", "status": "Állapot",
"up": "Online", "up": "Online",
"down": "Offline" "down": "Offline"
}, },
"ghostfolio": { "ghostfolio": {
"gross_percent_today": "Today", "gross_percent_today": "Ma",
"gross_percent_1y": "One year", "gross_percent_1y": "Egy év",
"gross_percent_max": "All time" "gross_percent_max": "Mindig"
}, },
"audiobookshelf": { "audiobookshelf": {
"podcasts": "Podcasts", "podcasts": "Podcast",
"books": "Books", "books": "Könyv",
"podcastsDuration": "Duration", "podcastsDuration": "Időtartam",
"booksDuration": "Duration" "booksDuration": "Időtartam"
}, },
"homeassistant": { "homeassistant": {
"people_home": "People Home", "people_home": "Emberek otthon",
"lights_on": "Lights On", "lights_on": "Fények bekapcsolva",
"switches_on": "Switches On" "switches_on": "Kapcsolók felkapcsolva"
}, },
"freshrss": { "freshrss": {
"subscriptions": "Subscriptions", "subscriptions": "Előfizetések",
"unread": "Unread" "unread": "Olvasatlan"
}, },
"channelsdvrserver": { "channelsdvrserver": {
"shows": "Shows", "shows": "Műsorok",
"recordings": "Recordings", "recordings": "Felvételek",
"scheduled": "Scheduled", "scheduled": "Ütemezett",
"passes": "Passes" "passes": "Engedélyek"
}, },
"whatsupdocker": { "whatsupdocker": {
"monitoring": "Monitoring", "monitoring": "Nyomonkövetés",
"updates": "Updates" "updates": "Frissítések"
}, },
"tailscale": { "tailscale": {
"address": "Address", "address": "Cím",
"expires": "Expires", "expires": "Lejár",
"never": "Never", "never": "Soha",
"last_seen": "Last Seen", "last_seen": "Utoljára látott",
"now": "Now", "now": "Most",
"years": "{{number}}y", "years": "{{number}}y",
"weeks": "{{number}}w", "weeks": "{{number}}w",
"days": "{{number}}d", "days": "{{number}}d",
"minutes": "{{number}}m", "minutes": "{{number}}m",
"seconds": "{{number}}s", "seconds": "{{number}}s",
"ago": "{{value}} Ago", "ago": "{{value}} Ezelőtt",
"hours": "{{number}}h" "hours": "{{number}}h"
}, },
"qnap": { "qnap": {
"cpuUsage": "CPU Usage", "cpuUsage": "Processzor Használat",
"memUsage": "MEM Usage", "memUsage": "Memória Használat",
"systemTempC": "System Temp", "systemTempC": "Rendszerhőmérséklet",
"poolUsage": "Pool Usage", "poolUsage": "Pool Használat",
"volumeUsage": "Volume Usage", "volumeUsage": "Kötet Használat",
"invalid": "Invalid" "invalid": "Érvénytelen"
}, },
"pfsense": { "pfsense": {
"load": "Load Avg", "load": "Átlagos terhelés",
"memory": "Mem Usage", "memory": "RAM Használat",
"wanStatus": "WAN Status", "wanStatus": "WAN Állapot",
"up": "Up", "up": "Fut",
"down": "Down", "down": "Áll",
"temp": "Temp", "temp": "Hőmérséklet",
"disk": "Disk Usage", "disk": "Lemezhasználat",
"wanIP": "WAN IP" "wanIP": "WAN IP"
}, },
"caddy": { "caddy": {
"upstreams": "Upstreams", "upstreams": "Upstreamek",
"requests": "Current requests", "requests": "Jelenlegi kérelmek",
"requests_failed": "Failed requests" "requests_failed": "Sikertelen kérelmek"
}, },
"evcc": { "evcc": {
"pv_power": "Production", "pv_power": "Termelés",
"battery_soc": "Battery", "battery_soc": "Akkumulátor",
"grid_power": "Grid", "grid_power": "Rács",
"home_power": "Consumption", "home_power": "Fogyasztás",
"charge_power": "Charger", "charge_power": "Töltő",
"watt_hour": "Wh" "watt_hour": "Wh"
}, },
"pialert": { "pialert": {
"total": "Összes",
"connected": "Csatlakoztatott",
"new_devices": "Új Eszközök",
"down_alerts": "Leállási Figyelmeztetések"
},
"jdownloader": {
"downloadSpeed": "Sebesség",
"downloadCount": "Összes függőben lévő",
"downloadTotalBytes": "Méret",
"downloadBytesRemaining": "Fennmaradó"
},
"kavita": {
"seriesCount": "Sorozatok",
"totalFiles": "Fájlok"
},
"gamedig": {
"ping": "Ping",
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"status": "Status",
"myPrs": "My PRs",
"approved": "Approved",
"result": "Result",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total", "total": "Total",
"connected": "Connected", "running": "Running",
"new_devices": "New Devices", "stopped": "Stopped",
"down_alerts": "Down Alerts" "passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -0,0 +1,710 @@
{
"nzbget": {
"downloaded": "Downloaded",
"rate": "Rate",
"remaining": "Remaining"
},
"plex": {
"streams": "Active Streams",
"albums": "Albums",
"movies": "Movies",
"tv": "TV Shows"
},
"sabnzbd": {
"rate": "Rate",
"queue": "Queue",
"timeleft": "Time Left"
},
"rutorrent": {
"active": "Active",
"upload": "Upload",
"download": "Download"
},
"transmission": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"qbittorrent": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"qnap": {
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"systemTempC": "System Temp",
"invalid": "Invalid"
},
"deluge": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"downloadstation": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"sonarr": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Series",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Wanted",
"missing": "Missing",
"queued": "Queued",
"movies": "Movies",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Wanted",
"queued": "Queued",
"artists": "Artists"
},
"readarr": {
"wanted": "Wanted",
"queued": "Queued",
"books": "Books"
},
"bazarr": {
"missingEpisodes": "Missing Episodes",
"missingMovies": "Missing Movies"
},
"ombi": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
},
"jellyseerr": {
"approved": "Approved",
"pending": "Pending",
"available": "Available"
},
"overseerr": {
"approved": "Approved",
"available": "Available",
"pending": "Pending",
"processing": "Processing"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
},
"pihole": {
"queries": "Queries",
"blocked": "Blocked",
"blocked_percent": "Blocked %",
"gravity": "Gravity"
},
"adguard": {
"queries": "Queries",
"blocked": "Blocked",
"filtered": "Filtered",
"latency": "Latency"
},
"speedtest": {
"upload": "Upload",
"download": "Download",
"ping": "Ping"
},
"tailscale": {
"address": "Address",
"expires": "Expires",
"never": "Never",
"last_seen": "Last Seen",
"now": "Now",
"years": "{{number}}y",
"weeks": "{{number}}w",
"days": "{{number}}d",
"hours": "{{number}}h",
"minutes": "{{number}}m",
"seconds": "{{number}}s",
"ago": "{{value}} Ago"
},
"tdarr": {
"queue": "Queue",
"processed": "Processed",
"errored": "Errored",
"saved": "Saved"
},
"traefik": {
"routers": "Routers",
"services": "Services",
"middleware": "Middleware"
},
"npm": {
"disabled": "Disabled",
"enabled": "Enabled",
"total": "Total"
},
"navidrome": {
"nothing_streaming": "No Active Streams",
"please_wait": "Please Wait"
},
"coinmarketcap": {
"configure": "Configure one or more crypto currencies to track",
"1hour": "1 Hour",
"1day": "1 Day",
"7days": "7 Days",
"30days": "30 Days"
},
"prowlarr": {
"numberOfGrabs": "Grabs",
"numberOfQueries": "Queries",
"enableIndexers": "Indexers",
"numberOfFailGrabs": "Fail Grabs",
"numberOfFailQueries": "Fail Queries"
},
"gotify": {
"apps": "Applications",
"clients": "Clients",
"messages": "Messages"
},
"jackett": {
"configured": "Configured",
"errored": "Errored"
},
"strelaysrv": {
"numActiveSessions": "Sessions",
"numConnections": "Connections",
"dataRelayed": "Relayed",
"transferRate": "Rate"
},
"mastodon": {
"user_count": "Users",
"status_count": "Posts",
"domain_count": "Domains"
},
"medusa": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Series"
},
"minecraft": {
"players": "Players",
"version": "Version",
"status": "Status",
"up": "Online",
"down": "Offline"
},
"authentik": {
"loginsLast24H": "Logins (24h)",
"failedLoginsLast24H": "Failed Logins (24h)",
"users": "Users"
},
"proxmox": {
"cpu": "CPU",
"lxc": "LXC",
"vms": "VMs",
"mem": "MEM"
},
"glances": {
"temp": "TEMP",
"warn": "Warn",
"uptime": "UP",
"total": "Total",
"free": "Free",
"cpu": "CPU",
"load": "Load",
"wait": "Please wait",
"used": "Used",
"days": "d",
"hours": "h",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
},
"quicklaunch": {
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"wmo": {
"0-night": "Clear",
"0-day": "Sunny",
"1-day": "Mainly Sunny",
"1-night": "Mainly Clear",
"2-day": "Partly Cloudy",
"2-night": "Partly Cloudy",
"56-day": "Light Freezing Drizzle",
"56-night": "Light Freezing Drizzle",
"3-day": "Cloudy",
"3-night": "Cloudy",
"45-day": "Foggy",
"45-night": "Foggy",
"48-day": "Foggy",
"48-night": "Foggy",
"51-day": "Light Drizzle",
"51-night": "Light Drizzle",
"53-day": "Drizzle",
"53-night": "Drizzle",
"55-day": "Heavy Drizzle",
"55-night": "Heavy Drizzle",
"57-day": "Freezing Drizzle",
"57-night": "Freezing Drizzle",
"61-day": "Light Rain",
"61-night": "Light Rain",
"63-day": "Rain",
"63-night": "Rain",
"71-day": "Light Snow",
"71-night": "Light Snow",
"73-day": "Snow",
"73-night": "Snow",
"65-day": "Heavy Rain",
"65-night": "Heavy Rain",
"66-day": "Freezing Rain",
"66-night": "Freezing Rain",
"67-day": "Freezing Rain",
"67-night": "Freezing Rain",
"75-day": "Heavy Snow",
"75-night": "Heavy Snow",
"77-day": "Snow Grains",
"77-night": "Snow Grains",
"80-day": "Light Showers",
"82-day": "Heavy Showers",
"82-night": "Heavy Showers",
"85-day": "Snow Showers",
"85-night": "Snow Showers",
"86-day": "Snow Showers",
"86-night": "Snow Showers",
"99-day": "Thunderstorm With Hail",
"99-night": "Thunderstorm With Hail",
"80-night": "Light Showers",
"81-day": "Showers",
"81-night": "Showers",
"95-day": "Thunderstorm",
"95-night": "Thunderstorm",
"96-day": "Thunderstorm With Hail",
"96-night": "Thunderstorm With Hail"
},
"homebridge": {
"available_update": "System",
"updates": "Updates",
"update_available": "Update Available",
"up_to_date": "Up to Date",
"child_bridges": "Child Bridges",
"child_bridges_status": "{{ok}}/{{total}}",
"up": "Up",
"pending": "Pending",
"down": "Down"
},
"healthchecks": {
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet",
"new": "New",
"up": "Online"
},
"watchtower": {
"containers_scanned": "Scanned",
"containers_updated": "Updated",
"containers_failed": "Failed"
},
"autobrr": {
"approvedPushes": "Approved",
"rejectedPushes": "Rejected",
"filters": "Filters",
"indexers": "Indexers"
},
"tubearchivist": {
"downloads": "Queue",
"videos": "Videos",
"channels": "Channels",
"playlists": "Playlists"
},
"truenas": {
"load": "System Load",
"uptime": "Uptime",
"alerts": "Alerts",
"time": "{{value, number(style: unit; unitDisplay: long;)}}"
},
"pyload": {
"speed": "Speed",
"active": "Active",
"queue": "Queue",
"total": "Total"
},
"gluetun": {
"public_ip": "Public IP",
"region": "Region",
"country": "Country"
},
"hdhomerun": {
"channels": "Channels",
"hd": "HD"
},
"paperlessngx": {
"inbox": "Inbox",
"total": "Total"
},
"nextdns": {
"wait": "Please Wait",
"no_devices": "No Device Data Received"
},
"mikrotik": {
"cpuLoad": "CPU Load",
"memoryUsed": "Memory Used",
"uptime": "Uptime",
"numberOfLeases": "Leases"
},
"xteve": {
"streams_all": "All Streams",
"streams_active": "Active Streams",
"streams_xepg": "XEPG Channels"
},
"opnsense": {
"cpu": "CPU Load",
"memory": "Active Memory",
"wanUpload": "WAN Upload",
"wanDownload": "WAN Download"
},
"moonraker": {
"print_status": "Print Status",
"printer_state": "Printer State",
"print_progress": "Progress",
"layers": "Layers"
},
"octoprint": {
"printer_state": "Status",
"temp_bed": "Bed temp",
"job_completion": "Completion",
"temp_tool": "Tool temp"
},
"cloudflared": {
"origin_ip": "Origin IP",
"status": "Status"
},
"pfsense": {
"load": "Load Avg",
"memory": "Mem Usage",
"wanStatus": "WAN Status",
"up": "Up",
"down": "Down",
"temp": "Temp",
"disk": "Disk Usage",
"wanIP": "WAN IP"
},
"proxmoxbackupserver": {
"datastore_usage": "Datastore",
"failed_tasks_24h": "Failed Tasks 24h",
"cpu_usage": "CPU",
"memory_usage": "Memory"
},
"immich": {
"videos": "Videos",
"storage": "Storage",
"users": "Users",
"photos": "Photos"
},
"uptimekuma": {
"up": "Sites Up",
"down": "Sites Down",
"uptime": "Uptime",
"incident": "Incident",
"m": "m"
},
"komga": {
"libraries": "Libraries",
"series": "Series",
"books": "Books"
},
"diskstation": {
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"mylar": {
"series": "Series",
"issues": "Issues",
"wanted": "Wanted"
},
"photoprism": {
"people": "People",
"albums": "Albums",
"photos": "Photos",
"videos": "Videos"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",
"nextrun": "Next Run",
"size": "Size",
"failed": "Failed",
"lastrun": "Last Run"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"ghostfolio": {
"gross_percent_max": "All time",
"gross_percent_today": "Today",
"gross_percent_1y": "One year"
},
"audiobookshelf": {
"podcasts": "Podcasts",
"podcastsDuration": "Duration",
"books": "Books",
"booksDuration": "Duration"
},
"homeassistant": {
"people_home": "People Home",
"lights_on": "Lights On",
"switches_on": "Switches On"
},
"whatsupdocker": {
"monitoring": "Monitoring",
"updates": "Updates"
},
"weather": {
"wait": "Harap tunggu",
"current": "Lokasi Saat Ini",
"allow": "Klik untuk mengizinkan",
"updating": "Memperbarui"
},
"search": {
"placeholder": "Telusuri…"
},
"unifi": {
"lan_devices": "LAN Devices",
"wlan_devices": "WLAN Devices",
"lan_users": "LAN Users",
"users": "Users",
"uptime": "System Uptime",
"days": "Days",
"wan": "WAN",
"lan": "LAN",
"wlan": "WLAN",
"devices": "Devices",
"wlan_users": "WLAN Users",
"up": "UP",
"down": "DOWN",
"wait": "Please wait",
"empty_data": "Subsystem status unknown"
},
"docker": {
"rx": "RX",
"tx": "TX",
"mem": "MEM",
"cpu": "CPU",
"running": "Running",
"offline": "Offline",
"error": "Error",
"unknown": "Unknown",
"healthy": "Healthy",
"starting": "Starting",
"unhealthy": "Unhealthy",
"not_found": "Not Found",
"exited": "Exited",
"partial": "Partial"
},
"freshrss": {
"unread": "Unread",
"subscriptions": "Subscriptions"
},
"caddy": {
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"omada": {
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways",
"connectedSwitches": "Connected switches"
},
"portainer": {
"running": "Running",
"stopped": "Stopped",
"total": "Total"
},
"miniflux": {
"read": "Read",
"unread": "Unread"
},
"scrutiny": {
"passed": "Passed",
"failed": "Failed",
"unknown": "Unknown"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
},
"common": {
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
},
"widget": {
"missing_type": "Missing Widget Type: {{type}}",
"api_error": "API Error",
"information": "Informasi",
"status": "Status",
"url": "URL",
"raw_error": "Raw Error",
"response_data": "Response Data"
},
"resources": {
"cpu": "CPU",
"mem": "MEM",
"total": "Total",
"free": "Luang",
"used": "Digunakan",
"load": "Load",
"temp": "TEMP",
"max": "Maks",
"uptime": "UP",
"months": "mo",
"hours": "h",
"days": "d",
"minutes": "m"
},
"ping": {
"error": "Error",
"ping": "Ping"
},
"emby": {
"playing": "Playing",
"transcoding": "Transcoding",
"bitrate": "Bitrate",
"no_active": "No Active Streams",
"movies": "Movies",
"series": "Series",
"episodes": "Episodes",
"songs": "Songs"
},
"evcc": {
"pv_power": "Production",
"home_power": "Consumption",
"charge_power": "Charger",
"battery_soc": "Battery",
"grid_power": "Grid",
"watt_hour": "Wh"
},
"flood": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"changedetectionio": {
"totalObserved": "Total Observed",
"diffsDetected": "Diffs Detected"
},
"channelsdvrserver": {
"shows": "Shows",
"recordings": "Recordings",
"scheduled": "Scheduled",
"passes": "Passes"
},
"tautulli": {
"playing": "Playing",
"transcoding": "Transcoding",
"bitrate": "Bitrate",
"no_active": "No Active Streams",
"plex_connection_error": "Check Plex Connection"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
}
}

View File

@ -7,12 +7,12 @@
"rx": "RX", "rx": "RX",
"error": "Errore", "error": "Errore",
"unknown": "Sconosciuto", "unknown": "Sconosciuto",
"running": "Running", "running": "In esecuzione",
"starting": "Starting", "starting": "In avvio",
"unhealthy": "Unhealthy", "unhealthy": "Unhealthy",
"not_found": "Not Found", "not_found": "Non trovato",
"exited": "Exited", "exited": "Uscito",
"partial": "Partial", "partial": "Parziale",
"healthy": "Healthy" "healthy": "Healthy"
}, },
"emby": { "emby": {
@ -20,16 +20,17 @@
"transcoding": "Transcodifica", "transcoding": "Transcodifica",
"bitrate": "Bitrate", "bitrate": "Bitrate",
"no_active": "Nessuno Stream Attivo", "no_active": "Nessuno Stream Attivo",
"movies": "Movies", "movies": "Film",
"series": "Series", "series": "Serie",
"episodes": "Episodes", "episodes": "Episodi",
"songs": "Songs" "songs": "Canzoni"
}, },
"tautulli": { "tautulli": {
"playing": "In riproduzione", "playing": "In riproduzione",
"transcoding": "Transcodifica", "transcoding": "Transcodifica",
"bitrate": "Bitrate", "bitrate": "Bitrate",
"no_active": "Nessuno Stream Attivo" "no_active": "Nessuno Stream Attivo",
"plex_connection_error": "Check Plex Connection"
}, },
"speedtest": { "speedtest": {
"upload": "Upload", "upload": "Upload",
@ -81,13 +82,17 @@
"sonarr": { "sonarr": {
"series": "Serie", "series": "Serie",
"wanted": "Richiesti", "wanted": "Richiesti",
"queued": "In coda" "queued": "In coda",
"queue": "Coda",
"unknown": "Sconosciuto"
}, },
"radarr": { "radarr": {
"wanted": "Richiesti", "wanted": "Richiesti",
"queued": "In coda", "queued": "In coda",
"movies": "Film", "movies": "Film",
"missing": "Mancanti" "missing": "Mancanti",
"queue": "Coda",
"unknown": "Sconosciuto"
}, },
"readarr": { "readarr": {
"wanted": "Richiesti", "wanted": "Richiesti",
@ -108,7 +113,7 @@
"queries": "Richieste", "queries": "Richieste",
"blocked": "Bloccati", "blocked": "Bloccati",
"gravity": "Severità", "gravity": "Severità",
"blocked_percent": "Blocked %" "blocked_percent": "Bloccato %"
}, },
"npm": { "npm": {
"enabled": "Attivi", "enabled": "Attivi",
@ -171,9 +176,9 @@
"missingMovies": "Film Mancanti" "missingMovies": "Film Mancanti"
}, },
"lidarr": { "lidarr": {
"wanted": "Mancanti", "wanted": "Richiesto",
"queued": "In coda", "queued": "In coda",
"albums": "Album" "artists": "Artisti"
}, },
"adguard": { "adguard": {
"queries": "Interrogazioni", "queries": "Interrogazioni",
@ -224,22 +229,32 @@
"devices": "Dispositivi", "devices": "Dispositivi",
"lan_devices": "Dispositivi LAN", "lan_devices": "Dispositivi LAN",
"wlan_devices": "Dispositivi WLAN", "wlan_devices": "Dispositivi WLAN",
"empty_data": "Subsystem status unknown" "empty_data": "Stato del sottosistema sconosciuto"
}, },
"plex": { "plex": {
"streams": "Trasmissioni attive", "streams": "Trasmissioni attive",
"movies": "Film", "movies": "Film",
"tv": "Programma televisivo", "tv": "Programma televisivo",
"albums": "Albums" "albums": "Album"
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"wait": "Attendere prego", "wait": "Attendere prego",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Carico",
"warn": "Avviso",
"total": "Totale",
"free": "Libero",
"used": "Usato",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Totale Osservato", "totalObserved": "Totale Osservato",
@ -306,9 +321,9 @@
"quicklaunch": { "quicklaunch": {
"bookmark": "Segnalibro", "bookmark": "Segnalibro",
"service": "Servizio", "service": "Servizio",
"search": "Search", "search": "Cerca",
"custom": "Custom", "custom": "Personalizzato",
"visit": "Visit", "visit": "Visita",
"url": "URL" "url": "URL"
}, },
"homebridge": { "homebridge": {
@ -319,7 +334,7 @@
"child_bridges": "Child Bridges", "child_bridges": "Child Bridges",
"child_bridges_status": "{{ok}}/{{total}}", "child_bridges_status": "{{ok}}/{{total}}",
"up": "Up", "up": "Up",
"pending": "Pending", "pending": "In attesa",
"down": "Down" "down": "Down"
}, },
"autobrr": { "autobrr": {
@ -424,7 +439,7 @@
"cpuLoad": "Carico della CPU", "cpuLoad": "Carico della CPU",
"memoryUsed": "Memoria Utilizzata", "memoryUsed": "Memoria Utilizzata",
"uptime": "Tempo di attività", "uptime": "Tempo di attività",
"numberOfLeases": "Lease" "numberOfLeases": "Rilasci"
}, },
"xteve": { "xteve": {
"streams_all": "Tutti gli stream", "streams_all": "Tutti gli stream",
@ -432,209 +447,264 @@
"streams_xepg": "Canali XEPG" "streams_xepg": "Canali XEPG"
}, },
"opnsense": { "opnsense": {
"cpu": "Carico CPU", "cpu": "Carico della CPU",
"memory": "Memoria in uso", "memory": "Memoria in uso",
"wanUpload": "WAN Upload", "wanUpload": "WAN Upload",
"wanDownload": "WAN Download" "wanDownload": "WAN Download"
}, },
"moonraker": { "moonraker": {
"printer_state": "Printer State", "printer_state": "Stato stampante",
"print_status": "Print Status", "print_status": "Stato Stampante",
"print_progress": "Progress", "print_progress": "Avanzamento",
"layers": "Layers" "layers": "Livelli"
}, },
"medusa": { "medusa": {
"wanted": "Wanted", "wanted": "Richiesto",
"queued": "Queued", "queued": "In coda",
"series": "Series" "series": "Serie"
}, },
"octoprint": { "octoprint": {
"printer_state": "Status", "printer_state": "Stato",
"temp_tool": "Tool temp", "temp_tool": "Tool temp",
"temp_bed": "Bed temp", "temp_bed": "Bed temp",
"job_completion": "Completion" "job_completion": "Completamento"
}, },
"cloudflared": { "cloudflared": {
"origin_ip": "Origin IP", "origin_ip": "IP sorgente",
"status": "Status" "status": "Stato"
}, },
"proxmoxbackupserver": { "proxmoxbackupserver": {
"datastore_usage": "Datastore", "datastore_usage": "Datastore",
"failed_tasks_24h": "Failed Tasks 24h", "failed_tasks_24h": "Attività Non Riuscite 24h",
"cpu_usage": "CPU", "cpu_usage": "CPU",
"memory_usage": "Memory" "memory_usage": "Memoria"
}, },
"immich": { "immich": {
"users": "Users", "users": "Utenti",
"photos": "Photos", "photos": "Foto",
"videos": "Videos", "videos": "Video",
"storage": "Storage" "storage": "Memoria"
}, },
"uptimekuma": { "uptimekuma": {
"up": "Sites Up", "up": "Siti On",
"down": "Sites Down", "down": "Siti Down",
"uptime": "Uptime", "uptime": "Uptime",
"incident": "Incident", "incident": "Incidente",
"m": "m" "m": "m"
}, },
"komga": { "komga": {
"libraries": "Libraries", "libraries": "Librerie",
"series": "Series", "series": "Serie",
"books": "Books" "books": "Libri"
}, },
"mylar": { "mylar": {
"series": "Series", "series": "Serie",
"issues": "Issues", "issues": "Problemi",
"wanted": "Wanted" "wanted": "Richiesto"
}, },
"photoprism": { "photoprism": {
"albums": "Albums", "albums": "Album",
"photos": "Photos", "photos": "Foto",
"videos": "Videos", "videos": "Video",
"people": "People" "people": "Persone"
}, },
"diskstation": { "diskstation": {
"days": "Days", "days": "Giorni",
"uptime": "Uptime", "uptime": "Uptime",
"volumeAvailable": "Available" "volumeAvailable": "Disponibile"
}, },
"fileflows": { "fileflows": {
"queue": "Queue", "queue": "Coda",
"processing": "Processing", "processing": "In Lavorazione",
"processed": "Processed", "processed": "Elaborato",
"time": "Time" "time": "Tempo"
}, },
"grafana": { "grafana": {
"dashboards": "Dashboards", "dashboards": "Dashboards",
"datasources": "Data Sources", "datasources": "Origine dei Dati",
"totalalerts": "Total Alerts", "totalalerts": "Avvisi Totali",
"alertstriggered": "Alerts Triggered" "alertstriggered": "Avvisi Attivati"
}, },
"nextcloud": { "nextcloud": {
"memoryusage": "Memory Usage", "memoryusage": "Uso della Memoria",
"cpuload": "Cpu Load", "cpuload": "Carico della CPU",
"freespace": "Free Space", "freespace": "Spazio Libero",
"activeusers": "Active Users", "activeusers": "Utenti Attivi",
"numfiles": "Files", "numfiles": "File",
"numshares": "Shared Items" "numshares": "Oggetti Condivisi"
}, },
"kopia": { "kopia": {
"status": "Status", "status": "Stato",
"size": "Size", "size": "Dimensione",
"lastrun": "Last Run", "lastrun": "Ultima esecuzione",
"nextrun": "Next Run", "nextrun": "Prossima esecuzione",
"failed": "Failed" "failed": "Fallito"
}, },
"unmanic": { "unmanic": {
"active_workers": "Active Workers", "active_workers": "Lavoratori Attivi",
"total_workers": "Total Workers", "total_workers": "Lavoratori Totali",
"records_total": "Queue Length" "records_total": "Lunghezza della Coda"
}, },
"healthchecks": { "healthchecks": {
"new": "New", "new": "Nuovo",
"up": "Online", "up": "Online",
"grace": "In Grace Period", "grace": "Periodo di Tolleranza",
"down": "Offline", "down": "Offline",
"paused": "Paused", "paused": "In Pausa",
"status": "Status", "status": "Stato",
"last_ping": "Last Ping", "last_ping": "Ultimo Ping",
"never": "No pings yet" "never": "Ancora nessun ping"
}, },
"pterodactyl": { "pterodactyl": {
"servers": "Servers", "servers": "Server",
"nodes": "Nodes" "nodes": "Nodi"
}, },
"prometheus": { "prometheus": {
"targets_up": "Targets Up", "targets_up": "Targets Up",
"targets_down": "Targets Down", "targets_down": "Targets Down",
"targets_total": "Total Targets" "targets_total": "Targets Totali"
}, },
"minecraft": { "minecraft": {
"players": "Players", "players": "Giocatori",
"version": "Version", "version": "Versione",
"status": "Status", "status": "Stato",
"up": "Online", "up": "Online",
"down": "Offline" "down": "Offline"
}, },
"ghostfolio": { "ghostfolio": {
"gross_percent_today": "Today", "gross_percent_today": "Oggi",
"gross_percent_1y": "One year", "gross_percent_1y": "Un anno",
"gross_percent_max": "All time" "gross_percent_max": "Sempre"
}, },
"audiobookshelf": { "audiobookshelf": {
"podcasts": "Podcasts", "podcasts": "Podcast",
"books": "Books", "books": "Libri",
"podcastsDuration": "Duration", "podcastsDuration": "Durata",
"booksDuration": "Duration" "booksDuration": "Durata"
}, },
"homeassistant": { "homeassistant": {
"people_home": "People Home", "people_home": "Persone a Casa",
"lights_on": "Lights On", "lights_on": "Luci Accese",
"switches_on": "Switches On" "switches_on": "Switch Accesi"
}, },
"freshrss": { "freshrss": {
"subscriptions": "Subscriptions", "subscriptions": "Iscrizioni",
"unread": "Unread" "unread": "Non letto"
}, },
"channelsdvrserver": { "channelsdvrserver": {
"shows": "Shows", "shows": "Spettacoli",
"recordings": "Recordings", "recordings": "Registrazioni",
"scheduled": "Scheduled", "scheduled": "Programmati",
"passes": "Passes" "passes": "Tessere"
}, },
"whatsupdocker": { "whatsupdocker": {
"monitoring": "Monitoring", "monitoring": "Monitoraggio",
"updates": "Updates" "updates": "Aggiornamenti"
}, },
"tailscale": { "tailscale": {
"never": "Never", "never": "Mai",
"address": "Address", "address": "Indirizzo",
"expires": "Expires", "expires": "Scade",
"last_seen": "Last Seen", "last_seen": "Ultima visualizzazione",
"now": "Now", "now": "Adesso",
"years": "{{number}}y", "years": "{{number}}y",
"weeks": "{{number}}w", "weeks": "{{number}}w",
"hours": "{{number}}h", "hours": "{{number}}h",
"minutes": "{{number}}m", "minutes": "{{number}}m",
"seconds": "{{number}}s", "seconds": "{{number}}s",
"ago": "{{value}} Ago", "ago": "{{value}} Fa",
"days": "{{number}}d" "days": "{{number}}d"
}, },
"qnap": { "qnap": {
"cpuUsage": "CPU Usage", "cpuUsage": "Utilizzo CPU",
"memUsage": "MEM Usage", "memUsage": "Utilizzo MEM",
"systemTempC": "System Temp", "systemTempC": "Temp sistema",
"poolUsage": "Pool Usage", "poolUsage": "Utilizzo Pool",
"volumeUsage": "Volume Usage", "volumeUsage": "Utilizzo Volume",
"invalid": "Invalid" "invalid": "Invalido"
}, },
"pfsense": { "pfsense": {
"load": "Load Avg", "load": "Carico Medio",
"memory": "Mem Usage", "memory": "Uso Memoria",
"wanStatus": "WAN Status", "wanStatus": "Stato WAN",
"up": "Up", "up": "Up",
"down": "Down", "down": "Down",
"temp": "Temp", "temp": "Temperatura",
"disk": "Disk Usage", "disk": "Uso Disco",
"wanIP": "WAN IP" "wanIP": "IP WAN"
}, },
"caddy": { "caddy": {
"upstreams": "Upstreams", "upstreams": "Upstream",
"requests": "Current requests", "requests": "Richieste correnti",
"requests_failed": "Failed requests" "requests_failed": "Richieste fallite"
}, },
"evcc": { "evcc": {
"pv_power": "Production", "pv_power": "Produzione",
"battery_soc": "Battery", "battery_soc": "Batteria",
"grid_power": "Grid", "grid_power": "Griglia",
"home_power": "Consumption", "home_power": "Consumo",
"charge_power": "Charger", "charge_power": "Caricatore",
"watt_hour": "Wh" "watt_hour": "Wh"
}, },
"pialert": { "pialert": {
"total": "Totali",
"connected": "Connesso",
"new_devices": "Nuovi Dispositivi",
"down_alerts": "Avvisi di Disservizio"
},
"jdownloader": {
"downloadCount": "Coda",
"downloadSpeed": "Velocità Download",
"downloadBytesRemaining": "Residuo",
"downloadTotalBytes": "Dimensione"
},
"kavita": {
"seriesCount": "Serie",
"totalFiles": "File"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"myPrs": "My PRs",
"approved": "Approved",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"total": "Total", "total": "Total",
"connected": "Connected", "running": "Running",
"new_devices": "New Devices", "downloading": "Downloading",
"down_alerts": "Down Alerts" "stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -15,13 +15,23 @@
"transferRate": "レート" "transferRate": "レート"
}, },
"glances": { "glances": {
"mem": "MEM",
"cpu": "CPU", "cpu": "CPU",
"wait": "お待ちください", "wait": "お待ちください",
"temp": "温度", "temp": "温度",
"uptime": "UP", "uptime": "UP",
"days": "日", "days": "日",
"hours": "時間" "hours": "時間",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"autobrr": { "autobrr": {
"filters": "フィルター", "filters": "フィルター",
@ -59,7 +69,7 @@
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
"total": "合計", "total": "合計",
"free": "フリー", "free": "Free",
"used": "使用", "used": "使用",
"load": "ロード", "load": "ロード",
"mem": "MEM", "mem": "MEM",
@ -132,7 +142,8 @@
"playing": "再生中", "playing": "再生中",
"transcoding": "変換中", "transcoding": "変換中",
"bitrate": "ビットレート", "bitrate": "ビットレート",
"no_active": "アクティブストリームなし" "no_active": "アクティブストリームなし",
"plex_connection_error": "Check Plex Connection"
}, },
"omada": { "omada": {
"connectedAp": "接続されたAP", "connectedAp": "接続されたAP",
@ -189,18 +200,22 @@
"sonarr": { "sonarr": {
"wanted": "募集中", "wanted": "募集中",
"queued": "待機中", "queued": "待機中",
"series": "シリーズ" "series": "シリーズ",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "募集中", "wanted": "募集中",
"missing": "不明", "missing": "不明",
"queued": "キュー", "queued": "キュー",
"movies": "映画" "movies": "映画",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "募集中", "wanted": "募集中",
"queued": "キュー", "queued": "キュー",
"albums": "アルバム" "artists": "Artists"
}, },
"readarr": { "readarr": {
"wanted": "募集中", "wanted": "募集中",
@ -231,7 +246,7 @@
"queries": "クエリ", "queries": "クエリ",
"blocked": "ブロック中", "blocked": "ブロック中",
"gravity": "グラビティ", "gravity": "グラビティ",
"blocked_percent": "Blocked %" "blocked_percent": "ブロック %"
}, },
"adguard": { "adguard": {
"queries": "クエリ", "queries": "クエリ",
@ -601,11 +616,11 @@
"ago": "{{value}} 前" "ago": "{{value}} 前"
}, },
"qnap": { "qnap": {
"cpuUsage": "CPU Usage", "cpuUsage": "CPU使用量",
"memUsage": "MEM Usage", "memUsage": "MEM使用量",
"systemTempC": "System Temp", "systemTempC": "システム温度",
"poolUsage": "Pool Usage", "poolUsage": "プール使用量",
"volumeUsage": "Volume Usage", "volumeUsage": "ボリューム使用量",
"invalid": "Invalid" "invalid": "Invalid"
}, },
"pfsense": { "pfsense": {
@ -625,16 +640,71 @@
}, },
"evcc": { "evcc": {
"watt_hour": "Wh", "watt_hour": "Wh",
"pv_power": "Production", "pv_power": "発電量",
"battery_soc": "Battery", "battery_soc": "バッテリー",
"grid_power": "Grid", "grid_power": "グリッド",
"home_power": "Consumption", "home_power": "消費",
"charge_power": "Charger" "charge_power": "チャージャー"
}, },
"pialert": { "pialert": {
"total": "Total", "total": "Total",
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -111,7 +111,8 @@
"playing": "재생 중", "playing": "재생 중",
"transcoding": "트랜스코딩", "transcoding": "트랜스코딩",
"bitrate": "비트레이트", "bitrate": "비트레이트",
"no_active": "활성 스트림 없음" "no_active": "활성 스트림 없음",
"plex_connection_error": "Check Plex Connection"
}, },
"omada": { "omada": {
"connectedAp": "연결된 AP", "connectedAp": "연결된 AP",
@ -163,18 +164,22 @@
"sonarr": { "sonarr": {
"wanted": "요청", "wanted": "요청",
"queued": "대기 중", "queued": "대기 중",
"series": "시리즈" "series": "시리즈",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "요청", "wanted": "요청",
"missing": "빠짐", "missing": "빠짐",
"queued": "대기 중", "queued": "대기 중",
"movies": "영화" "movies": "영화",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "요청", "wanted": "요청",
"queued": "대기 중", "queued": "대기 중",
"albums": "앨범" "artists": "Artists"
}, },
"readarr": { "readarr": {
"wanted": "요청", "wanted": "요청",
@ -301,12 +306,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"wait": "Please wait", "wait": "Please wait",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"quicklaunch": { "quicklaunch": {
"bookmark": "Bookmark", "bookmark": "Bookmark",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"down_alerts": "Down Alerts", "down_alerts": "Down Alerts",
"new_devices": "New Devices" "new_devices": "New Devices"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"ping": "Ping",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -97,7 +97,8 @@
"playing": "Atskaņo", "playing": "Atskaņo",
"transcoding": "Pārkodē", "transcoding": "Pārkodē",
"bitrate": "Bitrate", "bitrate": "Bitrate",
"no_active": "Nav aktīvu straumju" "no_active": "Nav aktīvu straumju",
"plex_connection_error": "Check Plex Connection"
}, },
"omada": { "omada": {
"connectedAp": "Savienotie piekļuves punkti", "connectedAp": "Savienotie piekļuves punkti",
@ -154,18 +155,22 @@
"sonarr": { "sonarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"series": "Series" "series": "Series",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "Wanted", "wanted": "Wanted",
"missing": "Missing", "missing": "Missing",
"queued": "Queued", "queued": "Queued",
"movies": "Filmas" "movies": "Filmas",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"albums": "Albumi" "artists": "Artists"
}, },
"readarr": { "readarr": {
"wanted": "Wanted", "wanted": "Wanted",
@ -290,12 +295,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"wait": "Please wait", "wait": "Please wait",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h", "hours": "h",
"temp": "TEMP" "temp": "TEMP",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"quicklaunch": { "quicklaunch": {
"bookmark": "Bookmark", "bookmark": "Bookmark",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"online": "Online",
"status": "Status",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -33,8 +33,8 @@
}, },
"lidarr": { "lidarr": {
"queued": "Dibaris Gilir", "queued": "Dibaris Gilir",
"albums": "Album", "wanted": "Mahu",
"wanted": "Mahu" "artists": "Artists"
}, },
"readarr": { "readarr": {
"wanted": "Mahu", "wanted": "Mahu",
@ -66,12 +66,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"wait": "Sila tunggu", "wait": "Sila tunggu",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"quicklaunch": { "quicklaunch": {
"bookmark": "Tandabuku", "bookmark": "Tandabuku",
@ -196,7 +206,8 @@
"playing": "Sedang Dimainkan", "playing": "Sedang Dimainkan",
"transcoding": "Transkoding", "transcoding": "Transkoding",
"bitrate": "Kadar bit", "bitrate": "Kadar bit",
"no_active": "Tiada Strim Aktif" "no_active": "Tiada Strim Aktif",
"plex_connection_error": "Check Plex Connection"
}, },
"plex": { "plex": {
"streams": "Strim Aktif", "streams": "Strim Aktif",
@ -229,13 +240,17 @@
"sonarr": { "sonarr": {
"wanted": "Mahu", "wanted": "Mahu",
"queued": "Dibaris Gilir", "queued": "Dibaris Gilir",
"series": "Bersiri" "series": "Bersiri",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "Mahu", "wanted": "Mahu",
"missing": "Hilang", "missing": "Hilang",
"queued": "Dibaris Gilir", "queued": "Dibaris Gilir",
"movies": "Filem" "movies": "Filem",
"queue": "Queue",
"unknown": "Unknown"
}, },
"bazarr": { "bazarr": {
"missingEpisodes": "Episod Yang Hilang", "missingEpisodes": "Episod Yang Hilang",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"downloading": "Downloading",
"total": "Total",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -56,7 +56,8 @@
"playing": "Spiller", "playing": "Spiller",
"transcoding": "Transkoding", "transcoding": "Transkoding",
"bitrate": "Bitrate", "bitrate": "Bitrate",
"no_active": "Ingen aktive strømmer" "no_active": "Ingen aktive strømmer",
"plex_connection_error": "Check Plex Connection"
}, },
"rutorrent": { "rutorrent": {
"active": "Aktiv", "active": "Aktiv",
@ -66,13 +67,17 @@
"sonarr": { "sonarr": {
"wanted": "Ønsket", "wanted": "Ønsket",
"queued": "I kø", "queued": "I kø",
"series": "Serie" "series": "Serie",
"unknown": "Unknown",
"queue": "Queue"
}, },
"radarr": { "radarr": {
"wanted": "Ønsket", "wanted": "Ønsket",
"queued": "I kø", "queued": "I kø",
"movies": "Filmer", "movies": "Filmer",
"missing": "Missing" "missing": "Missing",
"queue": "Queue",
"unknown": "Unknown"
}, },
"readarr": { "readarr": {
"wanted": "Wanted", "wanted": "Wanted",
@ -173,7 +178,7 @@
"lidarr": { "lidarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"albums": "Albums" "artists": "Artists"
}, },
"adguard": { "adguard": {
"queries": "Queries", "queries": "Queries",
@ -234,12 +239,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"wait": "Please wait", "wait": "Please wait",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Total Observed", "totalObserved": "Total Observed",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Filer"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -72,7 +72,8 @@
"playing": "Afspelen", "playing": "Afspelen",
"transcoding": "Transcodering", "transcoding": "Transcodering",
"bitrate": "Bitsnelheid", "bitrate": "Bitsnelheid",
"no_active": "Geen Actieve Streams" "no_active": "Geen Actieve Streams",
"plex_connection_error": "Check Plex Connection"
}, },
"rutorrent": { "rutorrent": {
"active": "Actief", "active": "Actief",
@ -82,13 +83,17 @@
"sonarr": { "sonarr": {
"wanted": "Gezocht", "wanted": "Gezocht",
"queued": "In de wachtrij", "queued": "In de wachtrij",
"series": "Series" "series": "Series",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"movies": "Films", "movies": "Films",
"wanted": "Gezocht", "wanted": "Gezocht",
"queued": "In de wachtrij", "queued": "In de wachtrij",
"missing": "Missend" "missing": "Missend",
"queue": "Queue",
"unknown": "Unknown"
}, },
"readarr": { "readarr": {
"wanted": "Gezocht", "wanted": "Gezocht",
@ -173,7 +178,7 @@
"lidarr": { "lidarr": {
"wanted": "Gezocht", "wanted": "Gezocht",
"queued": "In de wachtrij", "queued": "In de wachtrij",
"albums": "Albums" "artists": "Artists"
}, },
"adguard": { "adguard": {
"queries": "Queries", "queries": "Queries",
@ -234,12 +239,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"wait": "Please wait", "wait": "Please wait",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Totaal waargenomen", "totalObserved": "Totaal waargenomen",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"online": "Online",
"status": "Status",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -37,7 +37,8 @@
"playing": "Odtwarzanie", "playing": "Odtwarzanie",
"transcoding": "Transkodowanie", "transcoding": "Transkodowanie",
"bitrate": "Bitrate", "bitrate": "Bitrate",
"no_active": "Brak aktywnych strumieni" "no_active": "Brak aktywnych strumieni",
"plex_connection_error": "Check Plex Connection"
}, },
"speedtest": { "speedtest": {
"download": "Pobieranie", "download": "Pobieranie",
@ -110,18 +111,22 @@
"sonarr": { "sonarr": {
"wanted": "Poszukiwane", "wanted": "Poszukiwane",
"queued": "W kolejce", "queued": "W kolejce",
"series": "Seriale" "series": "Seriale",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "Poszukiwane", "wanted": "Poszukiwane",
"queued": "W kolejce", "queued": "W kolejce",
"movies": "Filmy", "movies": "Filmy",
"missing": "Brakujące" "missing": "Brakujące",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "Poszukiwane", "wanted": "Poszukiwane",
"queued": "W kolejce", "queued": "W kolejce",
"albums": "Albumy" "artists": "Artists"
}, },
"readarr": { "readarr": {
"wanted": "Poszukiwane", "wanted": "Poszukiwane",
@ -234,12 +239,22 @@
}, },
"glances": { "glances": {
"cpu": "Procesor", "cpu": "Procesor",
"mem": "Pamięć",
"wait": "Proszę czekać", "wait": "Proszę czekać",
"temp": "TEMP", "temp": "TEMP",
"uptime": "CZAS", "uptime": "CZAS",
"days": "dni", "days": "dni",
"hours": "godz" "hours": "godz",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"diffsDetected": "Wykryto różnic", "diffsDetected": "Wykryto różnic",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"myPrs": "My PRs",
"approved": "Approved",
"result": "Result",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -90,7 +90,8 @@
"playing": "Reproduzindo", "playing": "Reproduzindo",
"transcoding": "Transcodificando", "transcoding": "Transcodificando",
"bitrate": "Taxa de bits", "bitrate": "Taxa de bits",
"no_active": "Sem transmissões ativas" "no_active": "Sem transmissões ativas",
"plex_connection_error": "Verifique a conexão do Plex"
}, },
"nzbget": { "nzbget": {
"rate": "Taxa", "rate": "Taxa",
@ -112,18 +113,22 @@
"sonarr": { "sonarr": {
"wanted": "Desejado", "wanted": "Desejado",
"queued": "Na fila", "queued": "Na fila",
"series": "Séries" "series": "Séries",
"queue": "Fila",
"unknown": "Desconhecido"
}, },
"radarr": { "radarr": {
"wanted": "Desejado", "wanted": "Desejado",
"queued": "Na fila", "queued": "Na fila",
"movies": "Filmes", "movies": "Filmes",
"missing": "Faltando" "missing": "Faltando",
"queue": "Fila",
"unknown": "Desconhecido"
}, },
"lidarr": { "lidarr": {
"wanted": "Desejado", "wanted": "Desejado",
"queued": "Na fila", "queued": "Na fila",
"albums": "Álbuns" "artists": "Artistas"
}, },
"readarr": { "readarr": {
"wanted": "Desejado", "wanted": "Desejado",
@ -154,7 +159,7 @@
"queries": "Consultas", "queries": "Consultas",
"blocked": "Bloqueados", "blocked": "Bloqueados",
"gravity": "Gravidade", "gravity": "Gravidade",
"blocked_percent": "Blocked %" "blocked_percent": "Bloqueado %"
}, },
"adguard": { "adguard": {
"queries": "Consultas", "queries": "Consultas",
@ -234,12 +239,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"wait": "Por favor aguarde", "wait": "Por favor aguarde",
"temp": "TEMP", "temp": "TEMP",
"uptime": "LIGADO", "uptime": "LIGADO",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Carga",
"warn": "Aviso",
"total": "Total",
"free": "Livre",
"used": "Usado",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Observados", "totalObserved": "Observados",
@ -515,8 +530,8 @@
"memoryusage": "Memória Utilizada", "memoryusage": "Memória Utilizada",
"freespace": "Espaço Livre", "freespace": "Espaço Livre",
"activeusers": "Usuários Ativos", "activeusers": "Usuários Ativos",
"numfiles": "Files", "numfiles": "Arquivos",
"numshares": "Shared Items" "numshares": "Itens Compartilhados"
}, },
"kopia": { "kopia": {
"status": "Status", "status": "Status",
@ -573,68 +588,123 @@
"switches_on": "Interruptores Ligados" "switches_on": "Interruptores Ligados"
}, },
"freshrss": { "freshrss": {
"subscriptions": "Subscriptions", "subscriptions": "Assinaturas",
"unread": "Unread" "unread": "Não lida"
}, },
"channelsdvrserver": { "channelsdvrserver": {
"shows": "Shows", "shows": "Shows",
"recordings": "Recordings", "recordings": "Gravações",
"scheduled": "Scheduled", "scheduled": "Agendado",
"passes": "Passes" "passes": "Passes"
}, },
"whatsupdocker": { "whatsupdocker": {
"monitoring": "Monitoring", "monitoring": "Monitorando",
"updates": "Updates" "updates": "Atualizações"
}, },
"tailscale": { "tailscale": {
"address": "Address", "address": "Endereço",
"expires": "Expires", "expires": "Expira",
"never": "Never", "never": "Nunca",
"last_seen": "Last Seen", "last_seen": "Visto pela última vez",
"now": "Now", "now": "Agora",
"years": "{{number}}y", "years": "{{number}}a",
"weeks": "{{number}}w", "weeks": "{{number}}s",
"hours": "{{number}}h", "hours": "{{number}}h",
"days": "{{number}}d", "days": "{{number}}d",
"minutes": "{{number}}m", "minutes": "{{number}}m",
"seconds": "{{number}}s", "seconds": "{{number}}s",
"ago": "{{value}} Ago" "ago": "{{value}} Atrás"
}, },
"qnap": { "qnap": {
"systemTempC": "System Temp", "systemTempC": "Temp Sistema",
"cpuUsage": "CPU Usage", "cpuUsage": "Uso CPU",
"memUsage": "MEM Usage", "memUsage": "Uso MEM",
"poolUsage": "Pool Usage", "poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage", "volumeUsage": "Uso Volume",
"invalid": "Invalid" "invalid": "Invalido"
}, },
"pfsense": { "pfsense": {
"load": "Load Avg", "load": "Média de carga",
"memory": "Mem Usage", "memory": "Uso Mem",
"wanStatus": "WAN Status", "wanStatus": "WAN Status",
"up": "Up", "up": "Up",
"down": "Down", "down": "Down",
"temp": "Temp", "temp": "Temp",
"disk": "Disk Usage", "disk": "Uso de disco",
"wanIP": "WAN IP" "wanIP": "WAN IP"
}, },
"caddy": { "caddy": {
"upstreams": "Upstreams", "upstreams": "Upstreams",
"requests": "Current requests", "requests": "Solicitações atuais",
"requests_failed": "Failed requests" "requests_failed": "Solicitações com falha"
}, },
"evcc": { "evcc": {
"pv_power": "Production", "pv_power": "Produção",
"battery_soc": "Battery", "battery_soc": "Bateria",
"grid_power": "Grid", "grid_power": "Grade",
"home_power": "Consumption", "home_power": "Consumo",
"charge_power": "Charger", "charge_power": "Carregador",
"watt_hour": "Wh" "watt_hour": "Wh"
}, },
"pialert": { "pialert": {
"total": "Total", "total": "Total",
"connected": "Connected", "connected": "Conectado",
"new_devices": "New Devices", "new_devices": "Novos dispositivos",
"down_alerts": "Down Alerts" "down_alerts": "Alertas de Quedas"
},
"jdownloader": {
"downloadCount": "Fila",
"downloadSpeed": "Velocidade de download",
"downloadBytesRemaining": "Restante",
"downloadTotalBytes": "Tamanho"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Arquivos"
},
"gamedig": {
"name": "Nome",
"map": "Mapa",
"currentPlayers": "Jogadores atuais",
"players": "Jogadores",
"maxPlayers": "Jogadores Max",
"bots": "Robos",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -56,7 +56,8 @@
"playing": "Reproduzindo", "playing": "Reproduzindo",
"transcoding": "Transcodificação", "transcoding": "Transcodificação",
"bitrate": "Taxa de bits", "bitrate": "Taxa de bits",
"no_active": "Sem streams ativas" "no_active": "Sem streams ativas",
"plex_connection_error": "Check Plex Connection"
}, },
"rutorrent": { "rutorrent": {
"active": "Ativo", "active": "Ativo",
@ -66,13 +67,17 @@
"sonarr": { "sonarr": {
"wanted": "Desejada", "wanted": "Desejada",
"queued": "Em fila", "queued": "Em fila",
"series": "Séries" "series": "Séries",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "Desejado", "wanted": "Desejado",
"queued": "Fila", "queued": "Fila",
"movies": "Filmes", "movies": "Filmes",
"missing": "Faltando" "missing": "Faltando",
"queue": "Queue",
"unknown": "Unknown"
}, },
"readarr": { "readarr": {
"wanted": "Desejados", "wanted": "Desejados",
@ -186,7 +191,7 @@
"lidarr": { "lidarr": {
"queued": "Enfileirado", "queued": "Enfileirado",
"wanted": "Desejado", "wanted": "Desejado",
"albums": "Álbuns" "artists": "Artists"
}, },
"adguard": { "adguard": {
"queries": "Consultas", "queries": "Consultas",
@ -247,12 +252,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"wait": "Por favor, aguarde", "wait": "Por favor, aguarde",
"temp": "TEMP", "temp": "TEMP",
"uptime": "Cima", "uptime": "Cima",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Total Observado", "totalObserved": "Total Observado",
@ -582,12 +597,12 @@
"switches_on": "Interruptores Ligados" "switches_on": "Interruptores Ligados"
}, },
"freshrss": { "freshrss": {
"subscriptions": "Subscriptions", "subscriptions": "Assinaturas",
"unread": "Unread" "unread": "Não lida"
}, },
"channelsdvrserver": { "channelsdvrserver": {
"shows": "Shows", "shows": "Shows",
"recordings": "Recordings", "recordings": "Gravações",
"scheduled": "Scheduled", "scheduled": "Scheduled",
"passes": "Passes" "passes": "Passes"
}, },
@ -629,21 +644,76 @@
}, },
"caddy": { "caddy": {
"upstreams": "Upstreams", "upstreams": "Upstreams",
"requests": "Current requests", "requests": "Solicitações atuais",
"requests_failed": "Failed requests" "requests_failed": "Solicitações com falha"
}, },
"evcc": { "evcc": {
"pv_power": "Production", "pv_power": "Produção",
"battery_soc": "Battery", "battery_soc": "Bateria",
"grid_power": "Grid", "grid_power": "Grade",
"home_power": "Consumption", "home_power": "Consumo",
"charge_power": "Charger", "charge_power": "Carregador",
"watt_hour": "Wh" "watt_hour": "Kw"
}, },
"pialert": { "pialert": {
"total": "Total", "total": "Total",
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"approved": "Approved",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -92,7 +92,8 @@
"no_active": "Niciun stream activ", "no_active": "Niciun stream activ",
"playing": "Activ", "playing": "Activ",
"transcoding": "Transcodare", "transcoding": "Transcodare",
"bitrate": "Bitrate" "bitrate": "Bitrate",
"plex_connection_error": "Check Plex Connection"
}, },
"nzbget": { "nzbget": {
"rate": "Rată", "rate": "Rată",
@ -134,18 +135,22 @@
"sonarr": { "sonarr": {
"wanted": "Dorite", "wanted": "Dorite",
"queued": "În coadă", "queued": "În coadă",
"series": "Seriale" "series": "Seriale",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"queued": "În coadă", "queued": "În coadă",
"wanted": "Dorite", "wanted": "Dorite",
"movies": "Filme", "movies": "Filme",
"missing": "Missing" "missing": "Missing",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "Dorite", "wanted": "Dorite",
"queued": "În coadă", "queued": "În coadă",
"albums": "Albume" "artists": "Artists"
}, },
"readarr": { "readarr": {
"wanted": "Dorite", "wanted": "Dorite",
@ -234,12 +239,22 @@
}, },
"glances": { "glances": {
"cpu": "Procesor", "cpu": "Procesor",
"mem": "Memorie",
"wait": "Te rugam sa astepti", "wait": "Te rugam sa astepti",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Total Observed", "totalObserved": "Total Observed",
@ -636,5 +651,60 @@
"down_alerts": "Down Alerts", "down_alerts": "Down Alerts",
"total": "Total", "total": "Total",
"connected": "Connected" "connected": "Connected"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved",
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -16,11 +16,11 @@
"free": "Свободно", "free": "Свободно",
"used": "Использовано", "used": "Использовано",
"load": "Загрузка", "load": "Загрузка",
"cpu": "Процессор", "cpu": "ЦП",
"mem": "Память", "mem": "ОЗУ",
"temp": "Температура", "temp": "Темпер.",
"max": "Макс.", "max": "Макс.",
"uptime": "UP", "uptime": "Работает",
"months": "мес", "months": "мес",
"days": "д", "days": "д",
"hours": "ч", "hours": "ч",
@ -56,7 +56,8 @@
"playing": "Воспроизведение", "playing": "Воспроизведение",
"transcoding": "Транскодирование", "transcoding": "Транскодирование",
"bitrate": "Битрейт", "bitrate": "Битрейт",
"no_active": "Нет активных трансляций" "no_active": "Нет активных трансляций",
"plex_connection_error": "Проверьте соединение с Plex"
}, },
"rutorrent": { "rutorrent": {
"active": "Активный", "active": "Активный",
@ -64,18 +65,22 @@
"download": "Загрузка" "download": "Загрузка"
}, },
"sonarr": { "sonarr": {
"wanted": "Хотел", "wanted": "Желаемое",
"queued": "В очереди", "queued": "В очереди",
"series": "Серии" "series": "Серии",
"queue": "Очередь",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "Хотел", "wanted": "Желаемое",
"queued": "В очереди", "queued": "В очереди",
"movies": "Фильмы", "movies": "Фильмы",
"missing": "Пропущено" "missing": "Пропущено",
"queue": "Очередь",
"unknown": "Unknown"
}, },
"readarr": { "readarr": {
"wanted": "Хотел", "wanted": "Желаемое",
"queued": "В очереди", "queued": "В очереди",
"books": "Книги" "books": "Книги"
}, },
@ -171,9 +176,9 @@
"missingMovies": "Отсутствующие фильмы" "missingMovies": "Отсутствующие фильмы"
}, },
"lidarr": { "lidarr": {
"wanted": "Хотел", "wanted": "Желаемое",
"queued": "В очереди", "queued": "В очереди",
"albums": "Альбомы" "artists": "Артисты"
}, },
"adguard": { "adguard": {
"queries": "Запросы", "queries": "Запросы",
@ -234,12 +239,22 @@
}, },
"glances": { "glances": {
"cpu": "Процессор", "cpu": "Процессор",
"mem": "Память",
"wait": "Пожалуйста, подождите", "wait": "Пожалуйста, подождите",
"temp": "Температура", "temp": "Температура",
"uptime": "Работает", "uptime": "Работает",
"days": "д", "days": "д",
"hours": "ч" "hours": "ч",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Всего наблюдаемых", "totalObserved": "Всего наблюдаемых",
@ -604,8 +619,8 @@
"cpuUsage": "CPU Usage", "cpuUsage": "CPU Usage",
"memUsage": "MEM Usage", "memUsage": "MEM Usage",
"systemTempC": "System Temp", "systemTempC": "System Temp",
"poolUsage": "Pool Usage", "poolUsage": "Использование пула",
"volumeUsage": "Volume Usage", "volumeUsage": "Использование тома",
"invalid": "Invalid" "invalid": "Invalid"
}, },
"pfsense": { "pfsense": {
@ -619,22 +634,77 @@
"temp": "Temp" "temp": "Temp"
}, },
"caddy": { "caddy": {
"upstreams": "Upstreams", "upstreams": "Апстримы",
"requests": "Current requests", "requests": "Текущие запросы",
"requests_failed": "Failed requests" "requests_failed": "Неудачные запросы"
}, },
"evcc": { "evcc": {
"home_power": "Consumption", "home_power": "Потребление",
"pv_power": "Production", "pv_power": "Production",
"battery_soc": "Battery", "battery_soc": "Battery",
"grid_power": "Grid", "grid_power": "Grid",
"charge_power": "Charger", "charge_power": "Зарядка",
"watt_hour": "Wh" "watt_hour": "Wh"
}, },
"pialert": { "pialert": {
"total": "Total", "total": "Total",
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "Новые устройства",
"down_alerts": "Down Alerts" "down_alerts": "Оповещения о сбоях"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"passed": "Passed",
"failed": "Failed",
"running": "Running",
"stopped": "Stopped"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -221,7 +221,8 @@
"playing": "Playing", "playing": "Playing",
"transcoding": "Transcoding", "transcoding": "Transcoding",
"bitrate": "Bitrate", "bitrate": "Bitrate",
"no_active": "No Active Streams" "no_active": "No Active Streams",
"plex_connection_error": "Check Plex Connection"
}, },
"omada": { "omada": {
"connectedAp": "Connected APs", "connectedAp": "Connected APs",
@ -273,18 +274,22 @@
"sonarr": { "sonarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"series": "Series" "series": "Series",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "Wanted", "wanted": "Wanted",
"missing": "Missing", "missing": "Missing",
"queued": "Queued", "queued": "Queued",
"movies": "Movies" "movies": "Movies",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"albums": "Albums" "artists": "Artists"
}, },
"readarr": { "readarr": {
"wanted": "Wanted", "wanted": "Wanted",
@ -398,12 +403,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"wait": "Please wait", "wait": "Please wait",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"quicklaunch": { "quicklaunch": {
"bookmark": "Bookmark", "bookmark": "Bookmark",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"succeeded": "Succeeded",
"notStarted": "Not Started",
"inProgress": "In Progress",
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"failed": "Failed",
"canceled": "Canceled",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"total": "Total",
"downloading": "Downloading",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -168,7 +168,8 @@
"transcoding": "Transkodira", "transcoding": "Transkodira",
"bitrate": "Pasovna širina", "bitrate": "Pasovna širina",
"playing": "Predvaja", "playing": "Predvaja",
"no_active": "Ni aktivne vsebine" "no_active": "Ni aktivne vsebine",
"plex_connection_error": "Check Plex Connection"
}, },
"flood": { "flood": {
"download": "Prenos", "download": "Prenos",
@ -235,18 +236,22 @@
"sonarr": { "sonarr": {
"wanted": "Iskano", "wanted": "Iskano",
"queued": "V vrsti", "queued": "V vrsti",
"series": "Serije" "series": "Serije",
"queue": "Vrsta",
"unknown": "Neznano"
}, },
"radarr": { "radarr": {
"wanted": "Iskano", "wanted": "Iskano",
"missing": "Manjka", "missing": "Manjka",
"queued": "V vrsti", "queued": "V vrsti",
"movies": "Filmi" "movies": "Filmi",
"queue": "Vrsta",
"unknown": "Neznano"
}, },
"lidarr": { "lidarr": {
"wanted": "Iskano", "wanted": "Iskano",
"queued": "V vrsti", "queued": "V vrsti",
"albums": "Albumi" "artists": "Avtorji"
}, },
"readarr": { "readarr": {
"wanted": "Iskano", "wanted": "Iskano",
@ -350,12 +355,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"wait": "Prosim počakajte", "wait": "Prosim počakajte",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "u" "hours": "u",
"free": "Prosto",
"load": "Obremenitev",
"warn": "Opoz.",
"total": "Skupaj",
"used": "V uporabi",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"authentik": { "authentik": {
"users": "Uporabniki", "users": "Uporabniki",
@ -605,8 +620,8 @@
"memUsage": "MEM", "memUsage": "MEM",
"systemTempC": "Temperatura", "systemTempC": "Temperatura",
"poolUsage": "Prostor", "poolUsage": "Prostor",
"volumeUsage": "Volume Usage", "volumeUsage": "Prostora",
"invalid": "Invalid" "invalid": "Neveljavno"
}, },
"pfsense": { "pfsense": {
"load": "Povp. obremenitev", "load": "Povp. obremenitev",
@ -632,9 +647,64 @@
"watt_hour": "Wh" "watt_hour": "Wh"
}, },
"pialert": { "pialert": {
"total": "Skupaj",
"connected": "Povezanih",
"new_devices": "Nove naprave",
"down_alerts": "Izključeno"
},
"jdownloader": {
"downloadCount": "Vrsta",
"downloadSpeed": "Hitrost prenosa",
"downloadBytesRemaining": "Še ostane",
"downloadTotalBytes": "Velikost"
},
"kavita": {
"seriesCount": "Serije",
"totalFiles": "Datoteke"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total", "total": "Total",
"connected": "Connected", "running": "Running",
"new_devices": "New Devices", "stopped": "Stopped",
"down_alerts": "Down Alerts" "passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -79,7 +79,8 @@
"playing": "Playing", "playing": "Playing",
"transcoding": "Transcoding", "transcoding": "Transcoding",
"bitrate": "Bitrate", "bitrate": "Bitrate",
"no_active": "No Active Streams" "no_active": "No Active Streams",
"plex_connection_error": "Check Plex Connection"
}, },
"nzbget": { "nzbget": {
"rate": "Rate", "rate": "Rate",
@ -117,18 +118,22 @@
"sonarr": { "sonarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"series": "Series" "series": "Series",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"movies": "Movies", "movies": "Movies",
"missing": "Missing" "missing": "Missing",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"albums": "Albums" "artists": "Artists"
}, },
"readarr": { "readarr": {
"wanted": "Wanted", "wanted": "Wanted",
@ -234,12 +239,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"wait": "Please wait", "wait": "Please wait",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Total Observed", "totalObserved": "Total Observed",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed",
"downloading": "Downloading"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -62,7 +62,8 @@
"playing": "Spelar", "playing": "Spelar",
"transcoding": "Omkodning", "transcoding": "Omkodning",
"bitrate": "Bitrate", "bitrate": "Bitrate",
"no_active": "Inga aktiva strömmar" "no_active": "Inga aktiva strömmar",
"plex_connection_error": "Check Plex Connection"
}, },
"nzbget": { "nzbget": {
"rate": "Hastighet", "rate": "Hastighet",
@ -88,18 +89,22 @@
"sonarr": { "sonarr": {
"wanted": "Eftersöker", "wanted": "Eftersöker",
"queued": "I kö", "queued": "I kö",
"series": "Serier" "series": "Serier",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "Eftersöker", "wanted": "Eftersöker",
"queued": "I kö", "queued": "I kö",
"movies": "Filmer", "movies": "Filmer",
"missing": "Missing" "missing": "Missing",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "Eftersöker", "wanted": "Eftersöker",
"queued": "I kö", "queued": "I kö",
"albums": "Album" "artists": "Artists"
}, },
"readarr": { "readarr": {
"wanted": "Eftersökt", "wanted": "Eftersökt",
@ -234,12 +239,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"wait": "Vänligen vänta", "wait": "Vänligen vänta",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Total Observed", "totalObserved": "Total Observed",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"totalFiles": "Files",
"seriesCount": "Series"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"approved": "Approved",
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -79,7 +79,8 @@
"playing": "ఆడుతున్నారు", "playing": "ఆడుతున్నారు",
"transcoding": "ట్రాన్స్‌కోడింగ్", "transcoding": "ట్రాన్స్‌కోడింగ్",
"bitrate": "బిట్రేట్", "bitrate": "బిట్రేట్",
"no_active": "యాక్టివ్ స్ట్రీమ్‌లు లేవు" "no_active": "యాక్టివ్ స్ట్రీమ్‌లు లేవు",
"plex_connection_error": "Check Plex Connection"
}, },
"nzbget": { "nzbget": {
"rate": "రేట్", "rate": "రేట్",
@ -111,18 +112,22 @@
"sonarr": { "sonarr": {
"wanted": "కావలెను", "wanted": "కావలెను",
"queued": "క్యూయూఎడ్", "queued": "క్యూయూఎడ్",
"series": "సిరీస్" "series": "సిరీస్",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "కావలెను", "wanted": "కావలెను",
"queued": "క్యూయూఎడ్", "queued": "క్యూయూఎడ్",
"movies": "సినిమాలు", "movies": "సినిమాలు",
"missing": "మిస్సింగ్" "missing": "మిస్సింగ్",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "కావలెను", "wanted": "కావలెను",
"queued": "క్యూయూఎడ్", "queued": "క్యూయూఎడ్",
"albums": "ఆల్బములు" "artists": "Artists"
}, },
"bazarr": { "bazarr": {
"missingEpisodes": "ఎపిసోడ్‌లు లేవు", "missingEpisodes": "ఎపిసోడ్‌లు లేవు",
@ -234,12 +239,22 @@
}, },
"glances": { "glances": {
"cpu": "సీపియూ", "cpu": "సీపియూ",
"mem": "MEM",
"wait": "దయచేసి వేచి ఉండండి", "wait": "దయచేసి వేచి ఉండండి",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "మొత్తం గమనించబడింది", "totalObserved": "మొత్తం గమనించబడింది",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"totalFiles": "Files",
"seriesCount": "Series"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"myPrs": "My PRs",
"approved": "Approved",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"failed": "Failed",
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -139,7 +139,8 @@
"playing": "Playing", "playing": "Playing",
"transcoding": "Transcoding", "transcoding": "Transcoding",
"bitrate": "Bitrate", "bitrate": "Bitrate",
"no_active": "No Active Streams" "no_active": "No Active Streams",
"plex_connection_error": "Check Plex Connection"
}, },
"omada": { "omada": {
"connectedAp": "Connected APs", "connectedAp": "Connected APs",
@ -190,7 +191,9 @@
"sonarr": { "sonarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"series": "Series" "series": "Series",
"queue": "Queue",
"unknown": "Unknown"
}, },
"readarr": { "readarr": {
"queued": "Queued", "queued": "Queued",
@ -216,12 +219,14 @@
"wanted": "Wanted", "wanted": "Wanted",
"missing": "Missing", "missing": "Missing",
"queued": "Queued", "queued": "Queued",
"movies": "Movies" "movies": "Movies",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"albums": "Albums" "artists": "Artists"
}, },
"ombi": { "ombi": {
"pending": "Pending", "pending": "Pending",
@ -310,12 +315,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"wait": "Please wait", "wait": "Please wait",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"quicklaunch": { "quicklaunch": {
"bookmark": "Bookmark", "bookmark": "Bookmark",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -24,13 +24,13 @@
"used": "Kullanımda", "used": "Kullanımda",
"load": "Yük", "load": "Yük",
"mem": "MEM", "mem": "MEM",
"temp": "TEMP", "temp": "Geçici",
"max": "Max", "max": "En Yüksek",
"uptime": "UP", "uptime": "Çalışma Süresi",
"months": "mo", "months": "Ay",
"days": "d", "days": "Gün",
"hours": "h", "hours": "Saat",
"minutes": "m" "minutes": "Dakika"
}, },
"unifi": { "unifi": {
"users": "Kullanıcılar", "users": "Kullanıcılar",
@ -57,29 +57,30 @@
"offline": "Çevrimdışı", "offline": "Çevrimdışı",
"error": "Hata", "error": "Hata",
"unknown": "Bilinmiyor", "unknown": "Bilinmiyor",
"running": "Running", "running": "Çalışan",
"starting": "Starting", "starting": "Başlatılıyor",
"unhealthy": "Unhealthy", "unhealthy": "Sağlıksız",
"not_found": "Not Found", "not_found": "Bulunamadı",
"exited": "Exited", "exited": "Durduruldu",
"partial": "Partial", "partial": "Parçalı",
"healthy": "Healthy" "healthy": "Sağlık"
}, },
"emby": { "emby": {
"playing": "Oynatılıyor", "playing": "Oynatılıyor",
"transcoding": "Dönüştürülüyor", "transcoding": "Dönüştürülüyor",
"bitrate": "Bit Oranı", "bitrate": "Bit Oranı",
"no_active": "Aktif akış yok", "no_active": "Aktif akış yok",
"movies": "Movies", "movies": "Filmler",
"series": "Series", "series": "Diziler",
"episodes": "Episodes", "episodes": "Bölümler",
"songs": "Songs" "songs": "Şarkılar"
}, },
"tautulli": { "tautulli": {
"playing": "Oynatılıyor", "playing": "Oynatılıyor",
"transcoding": "Dönüştürülüyor", "transcoding": "Dönüştürülüyor",
"bitrate": "Bit Oranı", "bitrate": "Bit Oranı",
"no_active": "Aktif akış yok" "no_active": "Aktif akış yok",
"plex_connection_error": "Check Plex Connection"
}, },
"nzbget": { "nzbget": {
"rate": "Oran", "rate": "Oran",
@ -90,7 +91,7 @@
"streams": "Aktif Akış", "streams": "Aktif Akış",
"movies": "Filmler", "movies": "Filmler",
"tv": "TV Showları", "tv": "TV Showları",
"albums": "Albums" "albums": "Albümler"
}, },
"sabnzbd": { "sabnzbd": {
"rate": "Oran", "rate": "Oran",
@ -117,18 +118,22 @@
"sonarr": { "sonarr": {
"wanted": "Aranan", "wanted": "Aranan",
"queued": "Kuyrukta", "queued": "Kuyrukta",
"series": "Seriler" "series": "Seriler",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "Aranan", "wanted": "Aranan",
"queued": "Kuyrukta", "queued": "Kuyrukta",
"movies": "Filmler", "movies": "Filmler",
"missing": "Kayıp" "missing": "Kayıp",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "Aranan", "wanted": "Aranan",
"queued": "Kuyrukta", "queued": "Kuyrukta",
"albums": "Albümler" "artists": "Artists"
}, },
"readarr": { "readarr": {
"wanted": "Aranan", "wanted": "Aranan",
@ -159,7 +164,7 @@
"queries": "Sorgular", "queries": "Sorgular",
"blocked": "Engellenen", "blocked": "Engellenen",
"gravity": "Yer Çekimi", "gravity": "Yer Çekimi",
"blocked_percent": "Blocked %" "blocked_percent": "Engellenen %"
}, },
"adguard": { "adguard": {
"queries": "Sorgular", "queries": "Sorgular",
@ -234,12 +239,22 @@
}, },
"glances": { "glances": {
"cpu": "İşlemci", "cpu": "İşlemci",
"mem": "Bellek",
"wait": "Lütfen bekleyiniz", "wait": "Lütfen bekleyiniz",
"temp": "TEMP", "temp": "Sıcaklık",
"uptime": "UP", "uptime": "Çalışma Süresi",
"days": "d", "days": "Gün",
"hours": "h" "hours": "Saat",
"load": "Yük",
"warn": "Uyarı",
"total": "Toplam",
"free": "Boş",
"used": "Kullanım",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Toplam Gözlenen", "totalObserved": "Toplam Gözlenen",
@ -307,9 +322,9 @@
"bookmark": "Yer İmi", "bookmark": "Yer İmi",
"service": "Hizmet", "service": "Hizmet",
"search": "Ara", "search": "Ara",
"custom": "Custom", "custom": "Özel",
"visit": "Visit", "visit": "Ziyaret",
"url": "URL" "url": "Link"
}, },
"homebridge": { "homebridge": {
"available_update": "Sistem", "available_update": "Sistem",
@ -380,14 +395,14 @@
"deluge": { "deluge": {
"download": "İndir", "download": "İndir",
"upload": "Yükle", "upload": "Yükle",
"leech": "Leech", "leech": "Tüketici",
"seed": "Tohum" "seed": "Tohum"
}, },
"flood": { "flood": {
"download": "İndir", "download": "İndir",
"upload": "Yükle", "upload": "Yükle",
"leech": "Leech", "leech": "Tüketici",
"seed": "Tohum" "seed": "Sağlayıcı"
}, },
"tdarr": { "tdarr": {
"queue": "Sıra", "queue": "Sıra",
@ -417,7 +432,7 @@
"downloadstation": { "downloadstation": {
"download": "İndir", "download": "İndir",
"upload": "Yükle", "upload": "Yükle",
"leech": "Leech", "leech": "Tüketici",
"seed": "Tohum" "seed": "Tohum"
}, },
"mikrotik": { "mikrotik": {
@ -444,7 +459,7 @@
"layers": "Katmanlar" "layers": "Katmanlar"
}, },
"medusa": { "medusa": {
"wanted": "Wanted", "wanted": "Aranan",
"queued": "Kuyrukta", "queued": "Kuyrukta",
"series": "Seri" "series": "Seri"
}, },
@ -550,11 +565,11 @@
"targets_total": "Total Targets" "targets_total": "Total Targets"
}, },
"minecraft": { "minecraft": {
"players": "Players", "players": "Oyuncular",
"version": "Version", "version": "Versiyon",
"status": "Status", "status": "Durum",
"up": "Online", "up": "Çevrimiçi",
"down": "Offline" "down": "Çevrimdışı"
}, },
"ghostfolio": { "ghostfolio": {
"gross_percent_today": "Today", "gross_percent_today": "Today",
@ -573,40 +588,40 @@
"switches_on": "Switches On" "switches_on": "Switches On"
}, },
"freshrss": { "freshrss": {
"subscriptions": "Subscriptions", "subscriptions": "Abonelikler",
"unread": "Unread" "unread": "Okunmamış"
}, },
"channelsdvrserver": { "channelsdvrserver": {
"shows": "Shows", "shows": "Diziler",
"recordings": "Recordings", "recordings": "Kayıtlar",
"scheduled": "Scheduled", "scheduled": "Planlanmış",
"passes": "Passes" "passes": "Geçilenler"
}, },
"whatsupdocker": { "whatsupdocker": {
"monitoring": "Monitoring", "monitoring": "Monitoring",
"updates": "Updates" "updates": "Updates"
}, },
"tailscale": { "tailscale": {
"never": "Never", "never": "Asla",
"last_seen": "Last Seen", "last_seen": "Son Görülme",
"now": "Now", "now": "Şimdi",
"years": "{{number}}y", "years": "{{number}} Yıl",
"weeks": "{{number}}w", "weeks": "{{number}} Hafta",
"days": "{{number}}d", "days": "{{number}} Gün",
"hours": "{{number}}h", "hours": "{{number}} Saat",
"minutes": "{{number}}m", "minutes": "{{number}} Dakika",
"seconds": "{{number}}s", "seconds": "{{number}} Saniye",
"ago": "{{value}} Ago", "ago": "{{value}} Önce",
"address": "Address", "address": "Adres",
"expires": "Expires" "expires": "Geciken"
}, },
"qnap": { "qnap": {
"cpuUsage": "CPU Usage", "cpuUsage": "İşlemci Kullanımı",
"memUsage": "MEM Usage", "memUsage": "Bellek Kullanımı",
"systemTempC": "System Temp", "systemTempC": "Sistem Sıcaklığı",
"poolUsage": "Pool Usage", "poolUsage": "Havuz Kullanımı",
"volumeUsage": "Volume Usage", "volumeUsage": "Alan Kullanımı",
"invalid": "Invalid" "invalid": "Geçersiz"
}, },
"pfsense": { "pfsense": {
"load": "Load Avg", "load": "Load Avg",
@ -619,22 +634,77 @@
"wanIP": "WAN IP" "wanIP": "WAN IP"
}, },
"caddy": { "caddy": {
"upstreams": "Upstreams", "upstreams": "Akış",
"requests": "Current requests", "requests": "Anlık İstekler",
"requests_failed": "Failed requests" "requests_failed": "Başarısız İstekler"
}, },
"evcc": { "evcc": {
"pv_power": "Production", "pv_power": "Üretim",
"battery_soc": "Battery", "battery_soc": "Batarya",
"grid_power": "Grid", "grid_power": "Güç",
"home_power": "Consumption", "home_power": "Tüketim",
"charge_power": "Charger", "charge_power": "Şarj",
"watt_hour": "Wh" "watt_hour": "Watt/Saat"
}, },
"pialert": { "pialert": {
"total": "Toplam",
"connected": "Bağlandı",
"new_devices": "Yeni Cihazlar",
"down_alerts": "Düşme Uyarıları"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total", "total": "Total",
"connected": "Connected", "running": "Running",
"new_devices": "New Devices", "stopped": "Stopped",
"down_alerts": "Down Alerts" "passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -127,7 +127,7 @@
"total": "Всього", "total": "Всього",
"free": "Вільно", "free": "Вільно",
"used": "Використано", "used": "Використано",
"load": "Навантаження", "load": "Завантаження",
"mem": "Пам'ять", "mem": "Пам'ять",
"temp": "TEMP", "temp": "TEMP",
"max": "Max", "max": "Max",
@ -198,7 +198,8 @@
"playing": "Відтворення", "playing": "Відтворення",
"transcoding": "Перекодування", "transcoding": "Перекодування",
"bitrate": "Бітрейт", "bitrate": "Бітрейт",
"no_active": "Немає активних потоків" "no_active": "Немає активних потоків",
"plex_connection_error": "Перевірте з'єднання Plex"
}, },
"nzbget": { "nzbget": {
"rate": "Швидкість", "rate": "Швидкість",
@ -232,18 +233,22 @@
"sonarr": { "sonarr": {
"wanted": "Розшукується", "wanted": "Розшукується",
"queued": "У черзі", "queued": "У черзі",
"series": "Серії" "series": "Серії",
"queue": "Черга",
"unknown": "Невідомо"
}, },
"radarr": { "radarr": {
"wanted": "Розшукується", "wanted": "Розшукується",
"missing": "Відсутній", "missing": "Відсутній",
"queued": "У черзі", "queued": "У черзі",
"movies": "Фільми" "movies": "Фільми",
"queue": "Черга",
"unknown": "Невідомо"
}, },
"lidarr": { "lidarr": {
"wanted": "Розшукується", "wanted": "Розшукується",
"queued": "У черзі", "queued": "У черзі",
"albums": "Альбоми" "artists": "Виконавці"
}, },
"traefik": { "traefik": {
"middleware": "Проміжне програмне забезпечення", "middleware": "Проміжне програмне забезпечення",
@ -358,12 +363,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "Пам'ять",
"wait": "Будь ласка, зачекайте", "wait": "Будь ласка, зачекайте",
"temp": "TEMP", "temp": "TEMP",
"uptime": "Відправка", "uptime": "Відправка",
"days": "д", "days": "д",
"hours": "г" "hours": "г",
"load": "Завантаження",
"warn": "Увага",
"total": "Всього",
"free": "Вільний",
"used": "Використовується",
"crit": "Crit",
"read": "Прочитати",
"write": "Написати",
"gpu": "GPU",
"mem": "Пам'ять",
"swap": "Обмін"
}, },
"quicklaunch": { "quicklaunch": {
"bookmark": "Закладка", "bookmark": "Закладка",
@ -605,8 +620,8 @@
"memUsage": "Використання пам'яті", "memUsage": "Використання пам'яті",
"systemTempC": "Температура системи", "systemTempC": "Температура системи",
"poolUsage": "Використання пулу", "poolUsage": "Використання пулу",
"volumeUsage": "Volume Usage", "volumeUsage": "Гучність",
"invalid": "Invalid" "invalid": "Недійсний"
}, },
"pfsense": { "pfsense": {
"load": "Середнє завантаження", "load": "Середнє завантаження",
@ -632,9 +647,64 @@
"watt_hour": "Вт/год" "watt_hour": "Вт/год"
}, },
"pialert": { "pialert": {
"total": "Всього",
"connected": "Підключено",
"new_devices": "Нові пристрої",
"down_alerts": "Сповіщення про збій"
},
"jdownloader": {
"downloadCount": "Черга",
"downloadSpeed": "Швидкість",
"downloadBytesRemaining": "Залишилося",
"downloadTotalBytes": "Розмір"
},
"kavita": {
"seriesCount": "Серій",
"totalFiles": "Файлів"
},
"gamedig": {
"name": "Назва",
"map": "Мапа",
"currentPlayers": "Поточні гравці",
"players": "Гравці",
"maxPlayers": "Максимум гравців",
"bots": "Ботів",
"ping": "Пінг",
"status": "Статус",
"online": "В мережі",
"offline": "Не в мережі"
},
"azuredevops": {
"result": "Результат",
"status": "Статус",
"buildId": "ID збірки",
"succeeded": "Успішно",
"notStarted": "Не розпочато",
"failed": "Невдача",
"canceled": "Скасовано",
"inProgress": "В процесі",
"totalPrs": "Всього PR",
"myPrs": "Мій PR",
"approved": "Затверджено"
},
"urbackup": {
"ok": "Добре",
"errored": "Помилки",
"noRecent": "Застарілий",
"totalUsed": "Використовувана пам'ять"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total", "total": "Total",
"connected": "Connected", "running": "Running",
"new_devices": "New Devices", "stopped": "Stopped",
"down_alerts": "Down Alerts" "passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -56,7 +56,8 @@
"playing": "Đang chơi", "playing": "Đang chơi",
"transcoding": "Chuyển định dạng", "transcoding": "Chuyển định dạng",
"bitrate": "Bitrate", "bitrate": "Bitrate",
"no_active": "No Active Streams" "no_active": "No Active Streams",
"plex_connection_error": "Check Plex Connection"
}, },
"rutorrent": { "rutorrent": {
"active": "Hoạt động", "active": "Hoạt động",
@ -66,13 +67,17 @@
"sonarr": { "sonarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"series": "Series" "series": "Series",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"movies": "Phim", "movies": "Phim",
"missing": "Missing" "missing": "Missing",
"queue": "Queue",
"unknown": "Unknown"
}, },
"readarr": { "readarr": {
"wanted": "Đang tìm", "wanted": "Đang tìm",
@ -173,7 +178,7 @@
"lidarr": { "lidarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"albums": "Albums" "artists": "Artists"
}, },
"adguard": { "adguard": {
"queries": "Queries", "queries": "Queries",
@ -234,12 +239,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"wait": "Please wait", "wait": "Please wait",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Total Observed", "totalObserved": "Total Observed",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -13,7 +13,8 @@
"playing": "播放緊", "playing": "播放緊",
"no_active": "無任何活動", "no_active": "無任何活動",
"transcoding": "轉碼緊", "transcoding": "轉碼緊",
"bitrate": "比特率" "bitrate": "比特率",
"plex_connection_error": "Check Plex Connection"
}, },
"transmission": { "transmission": {
"download": "下載速度", "download": "下載速度",
@ -94,18 +95,22 @@
"sonarr": { "sonarr": {
"wanted": "想睇", "wanted": "想睇",
"queued": "排緊隊", "queued": "排緊隊",
"series": "電視劇" "series": "電視劇",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "想睇", "wanted": "想睇",
"queued": "排緊隊", "queued": "排緊隊",
"movies": "電影", "movies": "電影",
"missing": "Missing" "missing": "Missing",
"queue": "Queue",
"unknown": "Unknown"
}, },
"lidarr": { "lidarr": {
"wanted": "想睇", "wanted": "想睇",
"queued": "排緊隊", "queued": "排緊隊",
"albums": "專輯" "artists": "Artists"
}, },
"readarr": { "readarr": {
"wanted": "想睇", "wanted": "想睇",
@ -234,12 +239,22 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM",
"wait": "Please wait", "wait": "Please wait",
"temp": "TEMP", "temp": "TEMP",
"uptime": "UP", "uptime": "UP",
"days": "d", "days": "d",
"hours": "h" "hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "Total Observed", "totalObserved": "Total Observed",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"canceled": "Canceled",
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -56,7 +56,8 @@
"playing": "播放中", "playing": "播放中",
"transcoding": "转码", "transcoding": "转码",
"bitrate": "比特率", "bitrate": "比特率",
"no_active": "暂无播放" "no_active": "暂无播放",
"plex_connection_error": "Check Plex Connection"
}, },
"rutorrent": { "rutorrent": {
"active": "活动中", "active": "活动中",
@ -66,13 +67,17 @@
"sonarr": { "sonarr": {
"wanted": "想看", "wanted": "想看",
"queued": "排队", "queued": "排队",
"series": "系列" "series": "系列",
"queue": "Queue",
"unknown": "Unknown"
}, },
"radarr": { "radarr": {
"wanted": "想看", "wanted": "想看",
"queued": "队列", "queued": "队列",
"movies": "电影", "movies": "电影",
"missing": "丢失" "missing": "丢失",
"queue": "Queue",
"unknown": "Unknown"
}, },
"readarr": { "readarr": {
"wanted": "订阅", "wanted": "订阅",
@ -173,7 +178,7 @@
"lidarr": { "lidarr": {
"wanted": "订阅", "wanted": "订阅",
"queued": "队列", "queued": "队列",
"albums": "相册" "artists": "Artists"
}, },
"adguard": { "adguard": {
"queries": "查询", "queries": "查询",
@ -234,12 +239,22 @@
}, },
"glances": { "glances": {
"cpu": "处理器", "cpu": "处理器",
"mem": "内存",
"wait": "请稍等", "wait": "请稍等",
"temp": "温度", "temp": "温度",
"uptime": "运行时间", "uptime": "运行时间",
"days": "天", "days": "天",
"hours": "时" "hours": "时",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"crit": "Crit",
"read": "Read",
"write": "Write",
"gpu": "GPU",
"mem": "Mem",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "观察到的总数", "totalObserved": "观察到的总数",
@ -550,7 +565,7 @@
"targets_total": "总目标" "targets_total": "总目标"
}, },
"minecraft": { "minecraft": {
"players": "播放中", "players": "玩家",
"version": "版本", "version": "版本",
"status": "状态", "status": "状态",
"up": "在线的", "up": "在线的",
@ -624,7 +639,7 @@
"requests_failed": "失败请求" "requests_failed": "失败请求"
}, },
"evcc": { "evcc": {
"pv_power": "Production", "pv_power": "正式环境",
"battery_soc": "Battery", "battery_soc": "Battery",
"grid_power": "Grid", "grid_power": "Grid",
"home_power": "Consumption", "home_power": "Consumption",
@ -636,5 +651,60 @@
"connected": "Connected", "connected": "Connected",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
},
"jdownloader": {
"downloadCount": "Queue Count",
"downloadSpeed": "Download Speed",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size"
},
"kavita": {
"seriesCount": "Series",
"totalFiles": "Files"
},
"gamedig": {
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"canceled": "Canceled",
"inProgress": "In Progress",
"result": "Result",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
"failed": "Failed",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Approved"
},
"urbackup": {
"ok": "Ok",
"errored": "Errors",
"noRecent": "Out of Date",
"totalUsed": "Used Storage"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -21,14 +21,14 @@
"mem": "記憶體", "mem": "記憶體",
"cpu": "處理器", "cpu": "處理器",
"error": "錯誤", "error": "錯誤",
"unknown": "未知", "unknown": "未知",
"running": "執行中", "running": "執行中",
"starting": "啟動中", "starting": "啟動中",
"unhealthy": "不健康的", "unhealthy": "不健康的",
"not_found": "未找到", "not_found": "未找到",
"exited": "已退出", "exited": "已退出",
"partial": "部分", "partial": "部分",
"healthy": "健康" "healthy": "健康"
}, },
"emby": { "emby": {
"playing": "正在播放", "playing": "正在播放",
@ -44,7 +44,8 @@
"playing": "正在播放", "playing": "正在播放",
"transcoding": "轉碼", "transcoding": "轉碼",
"bitrate": "位元率", "bitrate": "位元率",
"no_active": "無播放活動" "no_active": "無播放活動",
"plex_connection_error": "檢查Plex的連接狀態"
}, },
"jellyseerr": { "jellyseerr": {
"pending": "待下載", "pending": "待下載",
@ -88,12 +89,16 @@
"movies": "電影", "movies": "電影",
"wanted": "關注中", "wanted": "關注中",
"queued": "已加入佇列", "queued": "已加入佇列",
"missing": "缺少" "missing": "缺少",
"queue": "佇列",
"unknown": "未知的"
}, },
"sonarr": { "sonarr": {
"wanted": "關注中", "wanted": "關注中",
"queued": "已加入佇列", "queued": "已加入佇列",
"series": "影集" "series": "影集",
"queue": "佇列",
"unknown": "未知的"
}, },
"readarr": { "readarr": {
"wanted": "關注中", "wanted": "關注中",
@ -123,8 +128,8 @@
"ping": "Ping" "ping": "Ping"
}, },
"portainer": { "portainer": {
"running": "運中", "running": "運中",
"stopped": "未運行", "stopped": "已停止",
"total": "全部" "total": "全部"
}, },
"traefik": { "traefik": {
@ -163,7 +168,7 @@
"seed": "已完成下載" "seed": "已完成下載"
}, },
"jackett": { "jackett": {
"configured": "已置", "configured": "已置",
"errored": "發生錯誤" "errored": "發生錯誤"
}, },
"bazarr": { "bazarr": {
@ -173,7 +178,7 @@
"lidarr": { "lidarr": {
"wanted": "關注中", "wanted": "關注中",
"queued": "已加入佇列", "queued": "已加入佇列",
"albums": "專輯" "artists": "創作者"
}, },
"adguard": { "adguard": {
"queries": "查詢", "queries": "查詢",
@ -200,8 +205,8 @@
}, },
"authentik": { "authentik": {
"users": "使用者", "users": "使用者",
"loginsLast24H": "登錄(24h)", "loginsLast24H": "登入 (過去 24 小時)",
"failedLoginsLast24H": "登錄失敗(24h)" "failedLoginsLast24H": "登入失敗 (過去 24 小時)"
}, },
"proxmox": { "proxmox": {
"mem": "記憶體", "mem": "記憶體",
@ -211,7 +216,7 @@
}, },
"unifi": { "unifi": {
"users": "使用者", "users": "使用者",
"uptime": "系統運時間", "uptime": "系統運時間",
"days": "天", "days": "天",
"wan": "WAN", "wan": "WAN",
"lan_users": "有線使用者", "lan_users": "有線使用者",
@ -222,7 +227,7 @@
"lan": "LAN", "lan": "LAN",
"wlan": "WLAN", "wlan": "WLAN",
"devices": "設備", "devices": "設備",
"lan_devices": "LAN設備", "lan_devices": "有線設備",
"wlan_devices": "無線設備", "wlan_devices": "無線設備",
"empty_data": "子系統狀態未知" "empty_data": "子系統狀態未知"
}, },
@ -234,19 +239,29 @@
}, },
"glances": { "glances": {
"cpu": "CPU", "cpu": "CPU",
"mem": "記憶體",
"wait": "請稍後", "wait": "請稍後",
"temp": "溫度", "temp": "溫度",
"uptime": "運行時間", "uptime": "運行時間",
"days": "天", "days": "天",
"hours": "時" "hours": "時",
"free": "未使用",
"used": "已使用",
"load": "負載量",
"warn": "警告",
"total": "總共",
"crit": "Crit",
"read": "讀取",
"write": "寫入",
"gpu": "GPU",
"mem": "記憶體",
"swap": "Swap"
}, },
"changedetectionio": { "changedetectionio": {
"totalObserved": "總監測數", "totalObserved": "總監測數",
"diffsDetected": "偵測到的變更" "diffsDetected": "偵測到的變更"
}, },
"wmo": { "wmo": {
"0-day": "晴", "0-day": "晴",
"0-night": "晴朗", "0-night": "晴朗",
"71-day": "小雪", "71-day": "小雪",
"71-night": "小雪", "71-night": "小雪",
@ -308,7 +323,7 @@
"service": "服務", "service": "服務",
"search": "搜尋", "search": "搜尋",
"custom": "自訂", "custom": "自訂",
"visit": "", "visit": "訪",
"url": "網址" "url": "網址"
}, },
"homebridge": { "homebridge": {
@ -351,7 +366,7 @@
}, },
"pyload": { "pyload": {
"speed": "速度", "speed": "速度",
"active": "行中", "active": "行中",
"queue": "佇列", "queue": "佇列",
"total": "全部" "total": "全部"
}, },
@ -521,8 +536,8 @@
"kopia": { "kopia": {
"status": "狀態", "status": "狀態",
"size": "檔案大小", "size": "檔案大小",
"lastrun": "上次行", "lastrun": "上次行",
"nextrun": "下次行", "nextrun": "下次行",
"failed": "失敗" "failed": "失敗"
}, },
"unmanic": { "unmanic": {
@ -587,11 +602,11 @@
"updates": "可更新" "updates": "可更新"
}, },
"tailscale": { "tailscale": {
"address": "Address", "address": "位址",
"expires": "Expires", "expires": "已失效",
"never": "Never", "never": "未曾",
"last_seen": "上次連線", "last_seen": "上次連線",
"now": "Now", "now": "現在",
"years": "{{number}} 年", "years": "{{number}} 年",
"hours": "{{number}} 小時", "hours": "{{number}} 小時",
"minutes": "{{number}} 分鐘", "minutes": "{{number}} 分鐘",
@ -605,23 +620,23 @@
"memUsage": "記憶體使用率", "memUsage": "記憶體使用率",
"systemTempC": "系統溫度", "systemTempC": "系統溫度",
"poolUsage": "儲存池使用率", "poolUsage": "儲存池使用率",
"volumeUsage": "Volume Usage", "volumeUsage": "儲存區用量",
"invalid": "Invalid" "invalid": "無效的"
}, },
"pfsense": { "pfsense": {
"load": "平均負載量", "load": "平均負載量",
"memory": "記憶體使用率", "memory": "記憶體使用率",
"wanStatus": "網際網路狀態", "wanStatus": "網際網路狀態",
"up": "Up", "up": "已連線",
"down": "Down", "down": "已離線",
"temp": "溫度", "temp": "溫度",
"disk": "硬碟使用率", "disk": "硬碟使用率",
"wanIP": "WAN IP" "wanIP": "網際網路 IP"
}, },
"caddy": { "caddy": {
"upstreams": "上行", "upstreams": "上行",
"requests": "Current requests", "requests": "目前請求數",
"requests_failed": "Failed requests" "requests_failed": "失敗請求"
}, },
"evcc": { "evcc": {
"grid_power": "電網", "grid_power": "電網",
@ -632,9 +647,64 @@
"watt_hour": "瓦時 (Wh)" "watt_hour": "瓦時 (Wh)"
}, },
"pialert": { "pialert": {
"total": "全部",
"connected": "已連線",
"new_devices": "新裝置",
"down_alerts": "離線警告"
},
"jdownloader": {
"downloadCount": "下載佇列",
"downloadSpeed": "下載速率",
"downloadBytesRemaining": "剩餘",
"downloadTotalBytes": "總下載量"
},
"kavita": {
"seriesCount": "叢刊",
"totalFiles": "檔案"
},
"gamedig": {
"name": "名稱",
"map": "地圖",
"currentPlayers": "當前玩家數",
"players": "玩家",
"maxPlayers": "玩家數上限",
"bots": "機器人",
"ping": "Ping",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"azuredevops": {
"result": "結果",
"status": "狀態",
"buildId": "組建編號",
"succeeded": "成功",
"notStarted": "尚未啟用",
"failed": "失敗",
"canceled": "取消",
"inProgress": "執行中",
"totalPrs": "總提取要求",
"myPrs": "我的提取要求",
"approved": "已核准"
},
"urbackup": {
"ok": "Ok",
"errored": "錯誤",
"noRecent": "已過時",
"totalUsed": "已使用空間"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Total", "total": "Total",
"connected": "Connected", "running": "Running",
"new_devices": "New Devices", "stopped": "Stopped",
"down_alerts": "Down Alerts" "passed": "Passed",
"failed": "Failed"
},
"mealie": {
"recipes": "Recipes",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
} }
} }

View File

@ -1,13 +1,48 @@
import { useRef } from "react";
import classNames from "classnames";
import { Disclosure, Transition } from '@headlessui/react';
import { MdKeyboardArrowDown } from "react-icons/md";
import ErrorBoundary from "components/errorboundry"; import ErrorBoundary from "components/errorboundry";
import List from "components/bookmarks/list"; import List from "components/bookmarks/list";
export default function BookmarksGroup({ group }) { export default function BookmarksGroup({ group, disableCollapse }) {
const panel = useRef();
return ( return (
<div key={group.name} className="flex-1"> <div key={group.name} className="flex-1">
<Disclosure defaultOpen>
{({ open }) => (
<>
<Disclosure.Button disabled={disableCollapse} className="flex w-full select-none items-center group">
<h2 className="text-theme-800 dark:text-theme-300 text-xl font-medium">{group.name}</h2> <h2 className="text-theme-800 dark:text-theme-300 text-xl font-medium">{group.name}</h2>
<MdKeyboardArrowDown className={classNames(
disableCollapse ? 'hidden' : '',
'transition-all opacity-0 group-hover:opacity-100 ml-auto text-theme-800 dark:text-theme-300 text-xl',
open ? '' : 'rotate-90'
)} />
</Disclosure.Button>
<Transition
// Otherwise the transition group does display: none and cancels animation
className="!block"
unmount={false}
beforeLeave={() => {
panel.current.style.height = `${panel.current.scrollHeight}px`;
setTimeout(() => {panel.current.style.height = `0`}, 1);
}}
beforeEnter={() => {
panel.current.style.height = `0px`;
setTimeout(() => {panel.current.style.height = `${panel.current.scrollHeight}px`}, 1);
}}
>
<Disclosure.Panel className="transition-all overflow-hidden duration-300 ease-out" ref={panel} static>
<ErrorBoundary> <ErrorBoundary>
<List bookmarks={group.bookmarks} /> <List bookmarks={group.bookmarks} />
</ErrorBoundary> </ErrorBoundary>
</Disclosure.Panel>
</Transition>
</>
)}
</Disclosure>
</div> </div>
); );
} }

View File

@ -1,4 +1,5 @@
import { useContext } from "react"; import { useContext } from "react";
import classNames from "classnames";
import { SettingsContext } from "utils/contexts/settings"; import { SettingsContext } from "utils/contexts/settings";
import ResolvedIcon from "components/resolvedicon"; import ResolvedIcon from "components/resolvedicon";
@ -16,7 +17,10 @@ export default function Item({ bookmark }) {
className="block w-full text-left cursor-pointer transition-all h-15 mb-3 rounded-md font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 hover:bg-theme-300/20 dark:bg-white/5 dark:hover:bg-white/10" className="block w-full text-left cursor-pointer transition-all h-15 mb-3 rounded-md font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 hover:bg-theme-300/20 dark:bg-white/5 dark:hover:bg-white/10"
> >
<div className="flex"> <div className="flex">
<div className="flex-shrink-0 flex items-center justify-center w-11 bg-theme-500/10 dark:bg-theme-900/50 text-theme-700 hover:text-theme-700 dark:text-theme-200 text-sm font-medium rounded-l-md"> <div className={classNames(
settings.cardBlur !== undefined && `backdrop-blur${settings.cardBlur.length ? '-' : ""}${settings.cardBlur}`,
"flex-shrink-0 flex items-center justify-center w-11 bg-theme-500/10 dark:bg-theme-900/50 text-theme-700 hover:text-theme-700 dark:text-theme-200 text-sm font-medium rounded-l-md"
)}>
{bookmark.icon && {bookmark.icon &&
<div className="flex-shrink-0 w-5 h-5"> <div className="flex-shrink-0 w-5 h-5">
<ResolvedIcon icon={bookmark.icon} alt={bookmark.abbr} /> <ResolvedIcon icon={bookmark.icon} alt={bookmark.abbr} />
@ -24,7 +28,10 @@ export default function Item({ bookmark }) {
} }
{!bookmark.icon && bookmark.abbr} {!bookmark.icon && bookmark.abbr}
</div> </div>
<div className="flex-1 flex items-center justify-between rounded-r-md "> <div className={classNames(
settings.cardBlur !== undefined && `backdrop-blur${settings.cardBlur.length ? '-' : ""}${settings.cardBlur}`,
"flex-1 flex items-center justify-between rounded-r-md"
)}>
<div className="flex-1 grow pl-3 py-2 text-xs">{bookmark.name}</div> <div className="flex-1 grow pl-3 py-2 text-xs">{bookmark.name}</div>
<div className="px-2 py-2 truncate text-theme-500 dark:text-theme-300 text-xs">{hostname}</div> <div className="px-2 py-2 truncate text-theme-500 dark:text-theme-300 text-xs">{hostname}</div>
</div> </div>

View File

@ -145,7 +145,7 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear
return ( return (
<div className={classNames( <div className={classNames(
"relative z-20 ease-in-out duration-300 transition-opacity", "relative z-40 ease-in-out duration-300 transition-opacity",
hidden && !isOpen && "hidden", hidden && !isOpen && "hidden",
!hidden && isOpen && "opacity-100", !hidden && isOpen && "opacity-100",
!isOpen && "opacity-0", !isOpen && "opacity-0",

View File

@ -33,11 +33,22 @@ export default function ResolvedIcon({ icon, width = 32, height = 32, alt = "log
} }
// check mdi- or si- prefixed icons // check mdi- or si- prefixed icons
const prefix = icon.split("-")[0] const prefix = icon.split("-")[0];
if (prefix in iconSetURLs) { if (prefix in iconSetURLs) {
// get icon source // default to theme setting
const iconName = icon.replace(`${prefix}-`, "").replace(".svg", ""); let iconName = icon.replace(`${prefix}-`, "").replace(".svg", "");
let iconColor = settings.iconStyle === "theme" ?
`rgb(var(--color-${ theme === "dark" ? 300 : 900 }) / var(--tw-text-opacity, 1))` :
"linear-gradient(180deg, rgb(var(--color-logo-start)), rgb(var(--color-logo-stop)))";
// use custom hex color if provided
const colorMatches = icon.match(/[#][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]$/i)
if (colorMatches?.length) {
iconName = icon.replace(`${prefix}-`, "").replace(".svg", "").replace(`-${colorMatches[0]}`, "");
iconColor = `${colorMatches[0]}`;
}
const iconSource = `${iconSetURLs[prefix]}${iconName}.svg`; const iconSource = `${iconSetURLs[prefix]}${iconName}.svg`;
return ( return (
@ -47,9 +58,7 @@ export default function ResolvedIcon({ icon, width = 32, height = 32, alt = "log
height, height,
maxWidth: '100%', maxWidth: '100%',
maxHeight: '100%', maxHeight: '100%',
background: settings.iconStyle === "theme" ? background: `${iconColor}`,
`rgb(var(--color-${ theme === "dark" ? 300 : 900 }) / var(--tw-text-opacity, 1))` :
"linear-gradient(180deg, rgb(var(--color-logo-start)), rgb(var(--color-logo-stop)))",
mask: `url(${iconSource}) no-repeat center / contain`, mask: `url(${iconSource}) no-repeat center / contain`,
WebkitMask: `url(${iconSource}) no-repeat center / contain`, WebkitMask: `url(${iconSource}) no-repeat center / contain`,
}} }}
@ -57,7 +66,6 @@ export default function ResolvedIcon({ icon, width = 32, height = 32, alt = "log
); );
} }
// fallback to dashboard-icons // fallback to dashboard-icons
if (icon.endsWith(".svg")) { if (icon.endsWith(".svg")) {
const iconName = icon.replace(".svg", ""); const iconName = icon.replace(".svg", "");

View File

@ -1,27 +1,62 @@
import { useRef } from "react";
import classNames from "classnames"; import classNames from "classnames";
import { Disclosure, Transition } from '@headlessui/react';
import { MdKeyboardArrowDown } from "react-icons/md";
import List from "components/services/list"; import List from "components/services/list";
import ResolvedIcon from "components/resolvedicon"; import ResolvedIcon from "components/resolvedicon";
export default function ServicesGroup({ services, layout, fiveColumns }) { export default function ServicesGroup({ group, services, layout, fiveColumns, disableCollapse }) {
const panel = useRef();
return ( return (
<div <div
key={services.name} key={services.name}
className={classNames( className={classNames(
layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/2 lg:basis-1/3 xl:basis-1/4", layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/2 lg:basis-1/3 xl:basis-1/4",
layout?.style !== "row" && fiveColumns ? "3xl:basis-1/5" : "", layout?.style !== "row" && fiveColumns ? "3xl:basis-1/5" : "",
"flex-1 p-1" layout?.header === false ? "flex-1 px-1 -my-1" : "flex-1 p-1",
)} )}
> >
<div className="flex select-none items-center"> <Disclosure defaultOpen>
{({ open }) => (
<>
{ layout?.header !== false &&
<Disclosure.Button disabled={disableCollapse} className="flex w-full select-none items-center group">
{layout?.icon && {layout?.icon &&
<div className="flex-shrink-0 mr-2 w-7 h-7"> <div className="flex-shrink-0 mr-2 w-7 h-7">
<ResolvedIcon icon={layout.icon} /> <ResolvedIcon icon={layout.icon} />
</div> </div>
} }
<h2 className="text-theme-800 dark:text-theme-300 text-xl font-medium">{services.name}</h2> <h2 className="flex text-theme-800 dark:text-theme-300 text-xl font-medium">{services.name}</h2>
</div> <MdKeyboardArrowDown className={classNames(
<List services={services.services} layout={layout} /> disableCollapse ? 'hidden' : '',
'transition-all opacity-0 group-hover:opacity-100 ml-auto text-theme-800 dark:text-theme-300 text-xl',
open ? '' : 'rotate-90'
)} />
</Disclosure.Button>
}
<Transition
// Otherwise the transition group does display: none and cancels animation
className="!block"
unmount={false}
beforeLeave={() => {
panel.current.style.height = `${panel.current.scrollHeight}px`;
setTimeout(() => {panel.current.style.height = `0`}, 1);
}}
beforeEnter={() => {
panel.current.style.height = `0px`;
setTimeout(() => {panel.current.style.height = `${panel.current.scrollHeight}px`}, 1);
}}
>
<Disclosure.Panel className="transition-all overflow-hidden duration-300 ease-out" ref={panel} static>
<List group={group} services={services.services} layout={layout} />
</Disclosure.Panel>
</Transition>
</>
)}
</Disclosure>
</div> </div>
); );
} }

View File

@ -11,7 +11,7 @@ import Kubernetes from "widgets/kubernetes/component";
import { SettingsContext } from "utils/contexts/settings"; import { SettingsContext } from "utils/contexts/settings";
import ResolvedIcon from "components/resolvedicon"; import ResolvedIcon from "components/resolvedicon";
export default function Item({ service }) { export default function Item({ service, group }) {
const hasLink = service.href && service.href !== "#"; const hasLink = service.href && service.href !== "#";
const { settings } = useContext(SettingsContext); const { settings } = useContext(SettingsContext);
const showStats = (service.showStats === false) ? false : settings.showStats; const showStats = (service.showStats === false) ? false : settings.showStats;
@ -32,11 +32,13 @@ export default function Item({ service }) {
return ( return (
<li key={service.name}> <li key={service.name}>
<div <div
className={`${ className={classNames(
hasLink ? "cursor-pointer " : " " settings.cardBlur !== undefined && `backdrop-blur${settings.cardBlur.length ? '-' : ""}${settings.cardBlur}`,
}transition-all h-15 mb-2 p-1 rounded-md font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 hover:bg-theme-300/20 dark:bg-white/5 dark:hover:bg-white/10 relative`} hasLink && "cursor-pointer",
'transition-all h-15 mb-2 p-1 rounded-md font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 hover:bg-theme-300/20 dark:bg-white/5 dark:hover:bg-white/10 relative overflow-clip'
)}
> >
<div className="flex select-none"> <div className="flex select-none z-0">
{service.icon && {service.icon &&
(hasLink ? ( (hasLink ? (
<a <a
@ -60,24 +62,24 @@ export default function Item({ service }) {
rel="noreferrer" rel="noreferrer"
className="flex-1 flex items-center justify-between rounded-r-md " className="flex-1 flex items-center justify-between rounded-r-md "
> >
<div className="flex-1 px-2 py-2 text-sm text-left"> <div className="flex-1 px-2 py-2 text-sm text-left z-10">
{service.name} {service.name}
<p className="text-theme-500 dark:text-theme-300 text-xs font-light">{service.description}</p> <p className="text-theme-500 dark:text-theme-300 text-xs font-light">{service.description}</p>
</div> </div>
</a> </a>
) : ( ) : (
<div className="flex-1 flex items-center justify-between rounded-r-md "> <div className="flex-1 flex items-center justify-between rounded-r-md ">
<div className="flex-1 px-2 py-2 text-sm text-left"> <div className="flex-1 px-2 py-2 text-sm text-left z-10">
{service.name} {service.name}
<p className="text-theme-500 dark:text-theme-300 text-xs font-light">{service.description}</p> <p className="text-theme-500 dark:text-theme-300 text-xs font-light">{service.description}</p>
</div> </div>
</div> </div>
)} )}
<div className="absolute top-0 right-0 w-1/2 flex flex-row justify-end gap-2 mr-2"> <div className="absolute top-0 right-0 w-1/2 flex flex-row justify-end gap-2 mr-2 z-30">
{service.ping && ( {service.ping && (
<div className="flex-shrink-0 flex items-center justify-center cursor-pointer"> <div className="flex-shrink-0 flex items-center justify-center cursor-pointer">
<Ping service={service} /> <Ping group={group} service={service.name} />
<span className="sr-only">Ping status</span> <span className="sr-only">Ping status</span>
</div> </div>
)} )}

View File

@ -14,7 +14,7 @@ const columnMap = [
"grid-cols-1 md:grid-cols-2 lg:grid-cols-8", "grid-cols-1 md:grid-cols-2 lg:grid-cols-8",
]; ];
export default function List({ services, layout }) { export default function List({ group, services, layout }) {
return ( return (
<ul <ul
className={classNames( className={classNames(
@ -23,7 +23,7 @@ export default function List({ services, layout }) {
)} )}
> >
{services.map((service) => ( {services.map((service) => (
<Item key={service.container ?? service.app ?? service.name} service={service} /> <Item key={service.container ?? service.app ?? service.name} service={service} group={group} />
))} ))}
</ul> </ul>
); );

View File

@ -1,9 +1,9 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import useSWR from "swr"; import useSWR from "swr";
export default function Ping({ service }) { export default function Ping({ group, service }) {
const { t } = useTranslation(); const { t } = useTranslation();
const { data, error } = useSWR(`/api/ping?${new URLSearchParams({ping: service.ping}).toString()}`, { const { data, error } = useSWR(`/api/ping?${new URLSearchParams({ group, service }).toString()}`, {
refreshInterval: 30000 refreshInterval: 30000
}); });
@ -23,7 +23,7 @@ export default function Ping({ service }) {
); );
} }
const statusText = `${service.ping}: HTTP status ${data.status}`; const statusText = `${service}: HTTP status ${data.status}`;
if (data.status > 403) { if (data.status > 403) {
return ( return (

View File

@ -15,8 +15,11 @@ export default function Container({ error = false, children, service }) {
return <Error service={service} error={error} /> return <Error service={service} error={error} />
} }
let visibleChildren = children; const childrenArray = Array.isArray(children) ? children : [children];
const fields = service?.widget?.fields;
let visibleChildren = childrenArray;
let fields = service?.widget?.fields;
if (typeof fields === 'string') fields = JSON.parse(service.widget.fields);
const type = service?.widget?.type; const type = service?.widget?.type;
if (fields && type) { if (fields && type) {
// if the field contains a "." then it most likely contains a common loc value // if the field contains a "." then it most likely contains a common loc value
@ -24,7 +27,7 @@ export default function Container({ error = false, children, service }) {
// fields: [ "resources.cpu", "resources.mem", "field"] // fields: [ "resources.cpu", "resources.mem", "field"]
// or even // or even
// fields: [ "resources.cpu", "widget_type.field" ] // fields: [ "resources.cpu", "widget_type.field" ]
visibleChildren = children?.filter(child => fields.some(field => { visibleChildren = childrenArray?.filter(child => fields.some(field => {
let fullField = field; let fullField = field;
if (!field.includes(".")) { if (!field.includes(".")) {
fullField = `${type}.${field}`; fullField = `${type}.${field}`;

View File

@ -9,10 +9,12 @@ function displayData(data) {
return (data.type === 'Buffer') ? Buffer.from(data).toString() : JSON.stringify(data, 4); return (data.type === 'Buffer') ? Buffer.from(data).toString() : JSON.stringify(data, 4);
} }
export default function Error({ error: err }) { export default function Error({ error }) {
const { t } = useTranslation(); const { t } = useTranslation();
const { error } = err?.data ?? { error: err }; if (error?.data?.error) {
error = error.data.error; // eslint-disable-line no-param-reassign
}
return ( return (
<details className="px-1 pb-1"> <details className="px-1 pb-1">

View File

@ -1,6 +1,9 @@
import { useState, useEffect } from "react"; import { useState, useEffect } from "react";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import Container from "../widget/container";
import Raw from "../widget/raw";
const textSizes = { const textSizes = {
"4xl": "text-4xl", "4xl": "text-4xl",
"3xl": "text-3xl", "3xl": "text-3xl",
@ -27,12 +30,14 @@ export default function DateTime({ options }) {
}, [date, setDate, dateLocale, format]); }, [date, setDate, dateLocale, format]);
return ( return (
<div className="flex flex-col justify-center first:ml-0 ml-4"> <Container options={options}>
<Raw>
<div className="flex flex-row items-center grow justify-end"> <div className="flex flex-row items-center grow justify-end">
<span className={`text-theme-800 dark:text-theme-200 tabular-nums ${textSizes[textSize || "lg"]}`}> <span className={`text-theme-800 dark:text-theme-200 tabular-nums ${textSizes[textSize || "lg"]}`}>
{date} {date}
</span> </span>
</div> </div>
</div> </Raw>
</Container>
); );
} }

View File

@ -1,10 +1,15 @@
import useSWR from "swr"; import useSWR from "swr";
import { BiError } from "react-icons/bi"; import { useContext } from "react";
import { FaMemory, FaRegClock, FaThermometerHalf } from "react-icons/fa"; import { FaMemory, FaRegClock, FaThermometerHalf } from "react-icons/fa";
import { FiCpu } from "react-icons/fi"; import { FiCpu, FiHardDrive } from "react-icons/fi";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import UsageBar from "../resources/usage-bar"; import Error from "../widget/error";
import Resource from "../widget/resource";
import Resources from "../widget/resources";
import WidgetLabel from "../widget/widget_label";
import { SettingsContext } from "utils/contexts/settings";
const cpuSensorLabels = ["cpu_thermal", "Core", "Tctl"]; const cpuSensorLabels = ["cpu_thermal", "Core", "Tctl"];
@ -14,6 +19,7 @@ function convertToFahrenheit(t) {
export default function Widget({ options }) { export default function Widget({ options }) {
const { t, i18n } = useTranslation(); const { t, i18n } = useTranslation();
const { settings } = useContext(SettingsContext);
const { data, error } = useSWR( const { data, error } = useSWR(
`/api/widgets/glances?${new URLSearchParams({ lang: i18n.language, ...options }).toString()}`, { `/api/widgets/glances?${new URLSearchParams({ lang: i18n.language, ...options }).toString()}`, {
@ -22,52 +28,19 @@ export default function Widget({ options }) {
); );
if (error || data?.error) { if (error || data?.error) {
return ( return <Error options={options} />
<div className="flex flex-col justify-center first:ml-0 ml-4">
<div className="flex flex-row items-center justify-end">
<div className="flex flex-row items-center">
<BiError className="w-8 h-8 text-theme-800 dark:text-theme-200" />
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-sm">{t("widget.api_error")}</span>
</div>
</div>
</div>
</div>
);
} }
if (!data) { if (!data) {
return ( return <Resources options={options}>
<div className="flex flex-col max-w:full sm:basis-auto self-center grow-0 flex-wrap ml-4"> <Resource icon={FiCpu} label={t("glances.wait")} percentage="0" />
<div className="flex flex-row self-center flex-wrap justify-between"> <Resource icon={FaMemory} label={t("glances.wait")} percentage="0" />
<div className="flex-none flex flex-row items-center mr-3 py-1.5"> { options.cputemp && <Resource icon={FaThermometerHalf} label={t("glances.wait")} percentage="0" /> }
<FiCpu className="text-theme-800 dark:text-theme-200 w-5 h-5" /> { options.disk && !Array.isArray(options.disk) && <Resource key={options.disk} icon={FiHardDrive} label={t("glances.wait")} percentage="0" /> }
<div className="flex flex-col ml-3 text-left min-w-[85px]"> { options.disk && Array.isArray(options.disk) && options.disk.map((disk) => <Resource key={`disk_${disk}`} icon={FiHardDrive} label={t("glances.wait")} percentage="0" /> ) }
<div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between"> { options.uptime && <Resource icon={FaRegClock} label={t("glances.wait")} percentage="0" /> }
<div className="pl-0.5 text-xs"> { options.label && <WidgetLabel label={options.label} /> }
{t("glances.wait")} </Resources>;
</div>
</div>
<UsageBar percent="0" />
</div>
</div>
<div className="flex-none flex flex-row items-center mr-3 py-1.5">
<FaMemory className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left min-w-[85px]">
<div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5 text-xs">
{t("glances.wait")}
</div>
</div>
<UsageBar percent="0" />
</div>
</div>
</div>
{options.label && (
<div className="ml-6 pt-1 text-center text-theme-800 dark:text-theme-200 text-xs">{options.label}</div>
)}
</div>
);
} }
const unit = options.units === "imperial" ? "fahrenheit" : "celsius"; const unit = options.units === "imperial" ? "fahrenheit" : "celsius";
@ -77,7 +50,7 @@ export default function Widget({ options }) {
if (options.cputemp && cpuSensors) { if (options.cputemp && cpuSensors) {
try { try {
mainTemp = cpuSensors.reduce((acc, s) => acc + s.value, 0) / cpuSensors.length; mainTemp = cpuSensors.reduce((acc, s) => acc + s.value, 0) / cpuSensors.length;
maxTemp = Math.max(cpuSensors.reduce((acc, s) => acc + s.warning, 0) / cpuSensors.length, maxTemp); maxTemp = Math.max(cpuSensors.reduce((acc, s) => acc + (s.warning > 0 ? s.warning : 0), 0) / cpuSensors.length, maxTemp);
if (unit === "fahrenheit") { if (unit === "fahrenheit") {
mainTemp = convertToFahrenheit(mainTemp); mainTemp = convertToFahrenheit(mainTemp);
maxTemp = convertToFahrenheit(maxTemp); maxTemp = convertToFahrenheit(maxTemp);
@ -88,78 +61,93 @@ export default function Widget({ options }) {
} }
const tempPercent = Math.round((mainTemp / maxTemp) * 100); const tempPercent = Math.round((mainTemp / maxTemp) * 100);
let disks = [];
if (options.disk) {
disks = Array.isArray(options.disk)
? options.disk.map((disk) => data.fs.find((d) => d.mnt_point === disk)).filter((d) => d)
: [data.fs.find((d) => d.mnt_point === options.disk)].filter((d) => d);
}
return ( return (
<div className="flex flex-col max-w:full sm:basis-auto self-center grow-0 flex-wrap ml-4"> <Resources options={options} target={settings.target ?? "_blank"}>
<div className="flex flex-row self-center flex-wrap justify-between"> <Resource
<div className="flex-none flex flex-row items-center mr-3 py-1.5"> icon={FiCpu}
<FiCpu className="text-theme-800 dark:text-theme-200 w-5 h-5" /> value={t("common.number", {
<div className="flex flex-col ml-3 text-left min-w-[85px]"> value: data.cpu.total,
<div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">
{t("common.number", {
value: data.quicklook.cpu,
style: "unit", style: "unit",
unit: "percent", unit: "percent",
maximumFractionDigits: 0, maximumFractionDigits: 0,
})} })}
</div> label={t("glances.cpu")}
<div className="pr-1">{t("glances.cpu")}</div> expandedValue={t("common.number", {
</div> value: data.load.min15,
<UsageBar percent={data.quicklook.cpu} />
</div>
</div>
<div className="flex-none flex flex-row items-center mr-3 py-1.5">
<FaMemory className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left min-w-[85px]">
<div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">
{t("common.number", {
value: data.quicklook.mem,
style: "unit", style: "unit",
unit: "percent", unit: "percent",
maximumFractionDigits: 0, maximumFractionDigits: 0
})} })}
</div> expandedLabel={t("glances.load")}
<div className="pr-1">{t("glances.mem")}</div> percentage={data.cpu.total}
</div> expanded={options.expanded}
<UsageBar percent={data.quicklook.mem} /> />
</div> <Resource
</div> icon={FaMemory}
value={t("common.bytes", {
value: data.mem.free,
maximumFractionDigits: 1,
binary: true,
})}
label={t("glances.free")}
expandedValue={t("common.bytes", {
value: data.mem.total,
maximumFractionDigits: 1,
binary: true,
})}
expandedLabel={t("glances.total")}
percentage={data.mem.percent}
expanded={options.expanded}
/>
{disks.map((disk) => (
<Resource key={`disk_${disk.mnt_point ?? disk.device_name}`}
icon={FiHardDrive}
value={t("common.bytes", { value: disk.free })}
label={t("glances.free")}
expandedValue={t("common.bytes", { value: disk.size })}
expandedLabel={t("glances.total")}
percentage={disk.percent}
expanded={options.expanded}
/>
))}
{options.cputemp && mainTemp > 0 && {options.cputemp && mainTemp > 0 &&
(<div className="flex-none flex flex-row items-center mr-3 py-1.5"> <Resource
<FaThermometerHalf className="text-theme-800 dark:text-theme-200 w-5 h-5" /> icon={FaThermometerHalf}
<div className="flex flex-col ml-3 text-left min-w-[85px]"> value={t("common.number", {
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">
{t("common.number", {
value: mainTemp, value: mainTemp,
maximumFractionDigits: 1, maximumFractionDigits: 1,
style: "unit", style: "unit",
unit unit
})} })}
</div> label={t("glances.temp")}
<div className="pr-1">{t("glances.temp")}</div> expandedValue={t("common.number", {
</span> value: maxTemp,
<UsageBar percent={tempPercent} /> maximumFractionDigits: 1,
</div> style: "unit",
</div>)} unit
})}
expandedLabel={t("glances.warn")}
percentage={tempPercent}
expanded={options.expanded}
/>
}
{options.uptime && data.uptime && {options.uptime && data.uptime &&
(<div className="flex-none flex flex-row items-center mr-3 py-1.5"> <Resource
<FaRegClock className="text-theme-800 dark:text-theme-200 w-5 h-5" /> icon={FaRegClock}
<div className="flex flex-col ml-3 text-left min-w-[85px]"> value={data.uptime.replace(" days,", t("glances.days")).replace(/:\d\d:\d\d$/g, t("glances.hours"))}
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between"> label={t("glances.uptime")}
<div className="pl-0.5"> percentage={Math.round((new Date().getSeconds() / 60) * 100).toString()}
{data.uptime.replace(" days,", t("glances.days")).replace(/:\d\d:\d\d$/g, t("glances.hours"))} />
</div> }
<div className="pr-1">{t("glances.uptime")}</div> {options.label && <WidgetLabel label={options.label} />}
</span> </Resources>
<UsageBar percent={Math.round((new Date().getSeconds() / 60) * 100)} />
</div>
</div>)}
</div>
{options.label && (
<div className="pt-1 text-center text-theme-800 dark:text-theme-200 text-xs">{options.label}</div>
)}
</div>
); );
} }

View File

@ -1,3 +1,6 @@
import Container from "../widget/container";
import Raw from "../widget/raw";
const textSizes = { const textSizes = {
"4xl": "text-4xl", "4xl": "text-4xl",
"3xl": "text-3xl", "3xl": "text-3xl",
@ -11,12 +14,12 @@ const textSizes = {
export default function Greeting({ options }) { export default function Greeting({ options }) {
if (options.text) { if (options.text) {
return ( return <Container options={options}>
<div className="flex flex-row items-center justify-start"> <Raw>
<span className={`text-theme-800 dark:text-theme-200 ${textSizes[options.text_size || "xl"]}`}> <span className={`text-theme-800 dark:text-theme-200 mr-3 ${textSizes[options.text_size || "xl"]}`}>
{options.text} {options.text}
</span> </span>
</div> </Raw>
); </Container>;
} }
} }

View File

@ -1,12 +1,15 @@
import useSWR from "swr"; import useSWR from "swr";
import { BiError } from "react-icons/bi";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import Error from "../widget/error";
import Container from "../widget/container";
import Raw from "../widget/raw";
import Node from "./node"; import Node from "./node";
export default function Widget({ options }) { export default function Widget({ options }) {
const { cluster, nodes } = options; const { cluster, nodes } = options;
const { t, i18n } = useTranslation(); const { i18n } = useTranslation();
const defaultData = { const defaultData = {
cpu: { cpu: {
@ -18,7 +21,7 @@ export default function Widget({ options }) {
used: 0, used: 0,
total: 0, total: 0,
free: 0, free: 0,
precent: 0 percent: 0
} }
}; };
@ -29,23 +32,12 @@ export default function Widget({ options }) {
); );
if (error || data?.error) { if (error || data?.error) {
return ( return <Error options={options} />
<div className="flex flex-col justify-center first:ml-0 ml-4">
<div className="flex flex-row items-center justify-end">
<div className="flex flex-row items-center">
<BiError className="w-8 h-8 text-theme-800 dark:text-theme-200" />
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-sm">{t("widget.api_error")}</span>
</div>
</div>
</div>
</div>
);
} }
if (!data) { if (!data) {
return ( return <Container options={options}>
<div className="flex flex-col max-w:full sm:basis-auto self-center grow-0 flex-wrap"> <Raw>
<div className="flex flex-row self-center flex-wrap justify-between"> <div className="flex flex-row self-center flex-wrap justify-between">
{cluster.show && {cluster.show &&
<Node type="cluster" key="cluster" options={options.cluster} data={defaultData} /> <Node type="cluster" key="cluster" options={options.cluster} data={defaultData} />
@ -54,12 +46,12 @@ export default function Widget({ options }) {
<Node type="node" key="nodes" options={options.nodes} data={defaultData} /> <Node type="node" key="nodes" options={options.nodes} data={defaultData} />
} }
</div> </div>
</div> </Raw>
); </Container>;
} }
return ( return <Container options={options}>
<div className="flex flex-col max-w:full sm:basis-auto self-center grow-0 flex-wrap"> <Raw>
<div className="flex flex-row self-center flex-wrap justify-between"> <div className="flex flex-row self-center flex-wrap justify-between">
{cluster.show && {cluster.show &&
<Node key="cluster" type="cluster" options={options.cluster} data={data.cluster} /> <Node key="cluster" type="cluster" options={options.cluster} data={data.cluster} />
@ -69,6 +61,6 @@ export default function Widget({ options }) {
<Node key={node.name} type="node" options={options.nodes} data={node} />) <Node key={node.name} type="node" options={options.nodes} data={node} />)
} }
</div> </div>
</div> </Raw>
); </Container>;
} }

View File

@ -3,8 +3,7 @@ import { FiAlertTriangle, FiCpu, FiServer } from "react-icons/fi";
import { SiKubernetes } from "react-icons/si"; import { SiKubernetes } from "react-icons/si";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import UsageBar from "./usage-bar"; import UsageBar from "../resources/usage-bar";
export default function Node({ type, options, data }) { export default function Node({ type, options, data }) {
const { t } = useTranslation(); const { t } = useTranslation();
@ -29,7 +28,7 @@ export default function Node({ type, options, data }) {
<div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between"> <div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5"> <div className="pl-0.5">
{t("common.number", { {t("common.number", {
value: data.cpu.percent, value: data?.cpu?.percent ?? 0,
style: "unit", style: "unit",
unit: "percent", unit: "percent",
maximumFractionDigits: 0 maximumFractionDigits: 0
@ -37,18 +36,18 @@ export default function Node({ type, options, data }) {
</div> </div>
<FiCpu className="text-theme-800 dark:text-theme-200 w-3 h-3" /> <FiCpu className="text-theme-800 dark:text-theme-200 w-3 h-3" />
</div> </div>
<UsageBar percent={data.cpu.percent} /> <UsageBar percent={data?.cpu?.percent ?? 0} />
<div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between"> <div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5"> <div className="pl-0.5">
{t("common.bytes", { {t("common.bytes", {
value: data.memory.free, value: data?.memory?.free ?? 0,
maximumFractionDigits: 0, maximumFractionDigits: 0,
binary: true binary: true
})} })}
</div> </div>
<FaMemory className="text-theme-800 dark:text-theme-200 w-3 h-3" /> <FaMemory className="text-theme-800 dark:text-theme-200 w-3 h-3" />
</div> </div>
<UsageBar percent={data.memory.percent} /> <UsageBar percent={data?.memory?.percent} />
{options.showLabel && ( {options.showLabel && (
<div className="pt-1 text-center text-theme-800 dark:text-theme-200 text-xs">{type === "cluster" ? options.label : data.name}</div> <div className="pt-1 text-center text-theme-800 dark:text-theme-200 text-xs">{type === "cluster" ? options.label : data.name}</div>
)} )}

View File

@ -1,12 +0,0 @@
export default function UsageBar({ percent }) {
return (
<div className="mt-0.5 w-full bg-theme-800/30 rounded-full h-1 dark:bg-theme-200/20">
<div
className="bg-theme-800/70 h-1 rounded-full dark:bg-theme-200/50 transition-all duration-1000"
style={{
width: `${percent}%`,
}}
/>
</div>
);
}

View File

@ -1,11 +1,18 @@
import Container from "../widget/container";
import Raw from "../widget/raw";
import ResolvedIcon from "components/resolvedicon" import ResolvedIcon from "components/resolvedicon"
export default function Logo({ options }) { export default function Logo({ options }) {
return ( return (
<div className="w-12 h-12 flex flex-row items-center align-middle mr-3 self-center"> <Container options={options}>
<Raw>
{options.icon ? {options.icon ?
<ResolvedIcon icon={options.icon} width={48} height={48} /> : <div className="mr-3">
<ResolvedIcon icon={options.icon} width={48} height={48} />
</div> :
// fallback to homepage logo // fallback to homepage logo
<div className="w-12 h-12">
<svg <svg
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 1024 1024" viewBox="0 0 1024 1024"
@ -56,7 +63,9 @@ export default function Logo({ options }) {
/> />
</g> </g>
</svg> </svg>
}
</div> </div>
}
</Raw>
</Container>
) )
} }

View File

@ -1,37 +1,31 @@
import useSWR from "swr"; import useSWR from "swr";
import { BiError } from "react-icons/bi";
import { useTranslation } from "next-i18next"; import Error from "../widget/error";
import Container from "../widget/container";
import Raw from "../widget/raw";
import Node from "./node"; import Node from "./node";
export default function Longhorn({ options }) { export default function Longhorn({ options }) {
const { expanded, total, labels, include, nodes } = options; const { expanded, total, labels, include, nodes } = options;
const { t } = useTranslation();
const { data, error } = useSWR(`/api/widgets/longhorn`, { const { data, error } = useSWR(`/api/widgets/longhorn`, {
refreshInterval: 1500 refreshInterval: 1500
}); });
if (error || data?.error) { if (error || data?.error) {
return ( return <Error options={options} />
<div className="flex flex-col max-w:full sm:basis-auto self-center grow-0 flex-wrap">
<BiError className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-xs">{t("widget.api_error")}</span>
</div>
</div>
);
} }
if (!data) { if (!data) {
return ( return <Container options={options}>
<div className="flex flex-col max-w:full sm:basis-auto self-center grow-0 flex-wrap"> <Raw>
<div className="flex flex-row self-center flex-wrap justify-between" /> <div className="flex flex-row self-center flex-wrap justify-between" />
</div> </Raw>
); </Container>;
} }
return ( return <Container options={options}>
<div className="flex flex-col max-w:full sm:basis-auto self-center grow-0 flex-wrap"> <Raw>
<div className="flex flex-row self-center flex-wrap justify-between"> <div className="flex flex-row self-center flex-wrap justify-between">
{data.nodes {data.nodes
.filter((node) => { .filter((node) => {
@ -52,6 +46,6 @@ export default function Longhorn({ options }) {
</div> </div>
)} )}
</div> </div>
</div> </Raw>
); </Container>;
} }

View File

@ -1,32 +1,20 @@
import { FiHardDrive } from "react-icons/fi";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import { FaThermometerHalf } from "react-icons/fa";
import UsageBar from "../resources/usage-bar"; import Resource from "../widget/resource";
import WidgetLabel from "../widget/widget_label";
export default function Node({ data, expanded, labels }) { export default function Node({ data, expanded, labels }) {
const { t } = useTranslation(); const { t } = useTranslation();
return ( return <Resource
<> icon={FaThermometerHalf}
<div className="flex-none flex flex-row items-center mr-3 py-1.5"> value={t("common.bytes", { value: data.node.available })}
<FiHardDrive className="text-theme-800 dark:text-theme-200 w-5 h-5" /> label={t("resources.free")}
<div className="flex flex-col ml-3 text-left min-w-[85px]"> expandedValue={t("common.bytes", { value: data.node.maximum })}
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between"> expandedLabel={t("resources.total")}
<div className="pl-0.5">{t("common.bytes", { value: data.node.available })}</div> percentage={Math.round(((data.node.maximum - data.node.available) / data.node.maximum) * 100)}
<div className="pr-1">{t("resources.free")}</div> expanded={expanded}
</span> >{ labels && <WidgetLabel label={data.node.id} /> }
{expanded && ( </Resource>
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">{t("common.bytes", { value: data.node.maximum })}</div>
<div className="pr-1">{t("resources.total")}</div>
</span>
)}
<UsageBar percent={Math.round(((data.node.maximum - data.node.available) / data.node.maximum) * 100)} />
</div>
</div>
{labels && (
<div className="ml-6 pt-1 text-center text-theme-800 dark:text-theme-200 text-xs">{data.node.id}</div>
)}
</>
);
} }

View File

@ -1,7 +0,0 @@
import mapIcon from "utils/weather/openmeteo-condition-map";
export default function Icon({ condition, timeOfDay }) {
const IconComponent = mapIcon(condition, timeOfDay);
return <IconComponent className="w-10 h-10 text-theme-800 dark:text-theme-200" />;
}

View File

@ -1,11 +1,16 @@
import useSWR from "swr"; import useSWR from "swr";
import { useState } from "react"; import { useState } from "react";
import { BiError } from "react-icons/bi";
import { WiCloudDown } from "react-icons/wi"; import { WiCloudDown } from "react-icons/wi";
import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; import { MdLocationDisabled, MdLocationSearching } from "react-icons/md";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import Icon from "./icon"; import Error from "../widget/error";
import Container from "../widget/container";
import ContainerButton from "../widget/container_button";
import WidgetIcon from "../widget/widget_icon";
import PrimaryText from "../widget/primary_text";
import SecondaryText from "../widget/secondary_text";
import mapIcon from "../../../utils/weather/openmeteo-condition-map";
function Widget({ options }) { function Widget({ options }) {
const { t } = useTranslation(); const { t } = useTranslation();
@ -15,60 +20,33 @@ function Widget({ options }) {
); );
if (error || data?.error) { if (error || data?.error) {
return ( return <Error options={options} />
<div className="flex flex-col justify-center first:ml-0 ml-4 mr-2">
<div className="flex flex-row items-center justify-end">
<div className="flex flex-col items-center">
<BiError className="w-8 h-8 text-theme-800 dark:text-theme-200" />
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-sm">{t("widget.api_error")}</span>
<span className="text-theme-800 dark:text-theme-200 text-xs">-</span>
</div>
</div>
</div>
</div>
);
} }
if (!data) { if (!data) {
return ( return <Container options={options}>
<div className="flex flex-col justify-center first:ml-0 ml-4 mr-2"> <PrimaryText>{t("weather.updating")}</PrimaryText>
<div className="flex flex-row items-center justify-end"> <SecondaryText>{t("weather.wait")}</SecondaryText>
<div className="flex flex-col items-center"> <WidgetIcon icon={WiCloudDown} size="l" />
<WiCloudDown className="w-8 h-8 text-theme-800 dark:text-theme-200" /> </Container>;
</div>
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-sm">{t("weather.updating")}</span>
<span className="text-theme-800 dark:text-theme-200 text-xs">{t("weather.wait")}</span>
</div>
</div>
</div>
);
} }
const unit = options.units === "metric" ? "celsius" : "fahrenheit"; const unit = options.units === "metric" ? "celsius" : "fahrenheit";
const condition = data.current_weather.weathercode;
const timeOfDay = data.current_weather.time > data.daily.sunrise[0] && data.current_weather.time < data.daily.sunset[0] ? "day" : "night"; const timeOfDay = data.current_weather.time > data.daily.sunrise[0] && data.current_weather.time < data.daily.sunset[0] ? "day" : "night";
return ( return <Container options={options}>
<div className="flex flex-col justify-center first:ml-0 ml-4 mr-2"> <PrimaryText>
<div className="flex flex-row items-center justify-end">
<div className="flex flex-col items-center">
<Icon condition={data.current_weather.weathercode} timeOfDay={timeOfDay} />
</div>
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-sm">
{options.label && `${options.label}, `} {options.label && `${options.label}, `}
{t("common.number", { {t("common.number", {
value: data.current_weather.temperature, value: data.current_weather.temperature,
style: "unit", style: "unit",
unit, unit,
})} })}
</span> </PrimaryText>
<span className="text-theme-800 dark:text-theme-200 text-xs">{t(`wmo.${data.current_weather.weathercode}-${timeOfDay}`)}</span> <SecondaryText>{t(`wmo.${data.current_weather.weathercode}-${timeOfDay}`)}</SecondaryText>
</div> <WidgetIcon icon={mapIcon(condition, timeOfDay)} size="xl" />
</div> </Container>;
</div>
);
} }
export default function OpenMeteo({ options }) { export default function OpenMeteo({ options }) {
@ -103,27 +81,11 @@ export default function OpenMeteo({ options }) {
// if (!requesting && !location) requestLocation(); // if (!requesting && !location) requestLocation();
if (!location) { if (!location) {
return ( return <ContainerButton options={options} callback={requestLocation} >
<button <PrimaryText>{t("weather.current")}</PrimaryText>
type="button" <SecondaryText>{t("weather.allow")}</SecondaryText>
onClick={() => requestLocation()} <WidgetIcon icon={ requesting ? MdLocationSearching : MdLocationDisabled} size="m" pulse />
className="flex flex-col justify-center first:ml-0 ml-4 mr-2" </ContainerButton>;
>
<div className="flex flex-row items-center justify-end">
<div className="flex flex-col items-center">
{requesting ? (
<MdLocationSearching className="w-6 h-6 text-theme-800 dark:text-theme-200 animate-pulse" />
) : (
<MdLocationDisabled className="w-6 h-6 text-theme-800 dark:text-theme-200" />
)}
</div>
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-sm">{t("weather.current")}</span>
<span className="text-theme-800 dark:text-theme-200 text-xs">{t("weather.allow")}</span>
</div>
</div>
</button>
);
} }
return <Widget options={{ ...location, ...options }} />; return <Widget options={{ ...location, ...options }} />;

View File

@ -1,7 +0,0 @@
import mapIcon from "utils/weather/owm-condition-map";
export default function Icon({ condition, timeOfDay }) {
const IconComponent = mapIcon(condition, timeOfDay);
return <IconComponent className="w-10 h-10 text-theme-800 dark:text-theme-200" />;
}

View File

@ -1,11 +1,16 @@
import useSWR from "swr"; import useSWR from "swr";
import { useState } from "react"; import { useState } from "react";
import { BiError } from "react-icons/bi";
import { WiCloudDown } from "react-icons/wi"; import { WiCloudDown } from "react-icons/wi";
import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; import { MdLocationDisabled, MdLocationSearching } from "react-icons/md";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import Icon from "./icon"; import Error from "../widget/error";
import Container from "../widget/container";
import ContainerButton from "../widget/container_button";
import PrimaryText from "../widget/primary_text";
import SecondaryText from "../widget/secondary_text";
import WidgetIcon from "../widget/widget_icon";
import mapIcon from "../../../utils/weather/owm-condition-map";
function Widget({ options }) { function Widget({ options }) {
const { t, i18n } = useTranslation(); const { t, i18n } = useTranslation();
@ -15,58 +20,27 @@ function Widget({ options }) {
); );
if (error || data?.cod === 401 || data?.error) { if (error || data?.cod === 401 || data?.error) {
return ( return <Error options={options} />
<div className="flex flex-col justify-center first:ml-auto ml-4 mr-2">
<div className="flex flex-row items-center justify-end">
<div className="hidden sm:flex flex-col items-center">
<BiError className="w-8 h-8 text-theme-800 dark:text-theme-200" />
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-sm">{t("widget.api_error")}</span>
<span className="text-theme-800 dark:text-theme-200 text-xs">-</span>
</div>
</div>
</div>
</div>
);
} }
if (!data) { if (!data) {
return ( return <Container options={options}>
<div className="flex flex-col justify-center first:ml-auto ml-4 mr-2"> <PrimaryText>{t("weather.updating")}</PrimaryText>
<div className="flex flex-row items-center justify-end"> <SecondaryText>{t("weather.wait")}</SecondaryText>
<div className="hidden sm:flex flex-col items-center"> <WidgetIcon icon={WiCloudDown} size="l" />
<WiCloudDown className="w-8 h-8 text-theme-800 dark:text-theme-200" /> </Container>;
</div>
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-sm">{t("weather.updating")}</span>
<span className="text-theme-800 dark:text-theme-200 text-xs">{t("weather.wait")}</span>
</div>
</div>
</div>
);
} }
const unit = options.units === "metric" ? "celsius" : "fahrenheit"; const unit = options.units === "metric" ? "celsius" : "fahrenheit";
return ( const condition = data.weather[0].id;
<div className="flex flex-col justify-center first:ml-auto ml-2 mr-2"> const timeOfDay = data.dt > data.sys.sunrise && data.dt < data.sys.sunset ? "day" : "night";
<div className="flex flex-row items-center justify-end">
<div className="hidden sm:flex flex-col items-center"> return <Container options={options}>
<Icon <PrimaryText>{options.label && `${options.label}, ` }{t("common.number", { value: data.main.temp, style: "unit", unit })}</PrimaryText>
condition={data.weather[0].id} <SecondaryText>{data.weather[0].description}</SecondaryText>
timeOfDay={data.dt > data.sys.sunrise && data.dt < data.sys.sunset ? "day" : "night"} <WidgetIcon icon={mapIcon(condition, timeOfDay)} size="xl" />
/> </Container>;
</div>
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-sm">
{options.label && `${options.label}, `}
{t("common.number", { value: data.main.temp, style: "unit", unit })}
</span>
<span className="text-theme-800 dark:text-theme-200 text-xs">{data.weather[0].description}</span>
</div>
</div>
</div>
);
} }
export default function OpenWeatherMap({ options }) { export default function OpenWeatherMap({ options }) {
@ -98,30 +72,12 @@ export default function OpenWeatherMap({ options }) {
} }
}; };
// if (!requesting && !location) requestLocation();
if (!location) { if (!location) {
return ( return <ContainerButton options={options} callback={requestLocation} >
<button <PrimaryText>{t("weather.current")}</PrimaryText>
type="button" <SecondaryText>{t("weather.allow")}</SecondaryText>
onClick={() => requestLocation()} <WidgetIcon icon={requesting ? MdLocationSearching : MdLocationDisabled} size="m" pulse />
className="flex flex-col justify-center first:ml-auto ml-4 mr-2" </ContainerButton>;
>
<div className="flex flex-row items-center justify-end">
<div className="hidden sm:flex flex-col items-center">
{requesting ? (
<MdLocationSearching className="w-6 h-6 text-theme-800 dark:text-theme-200 animate-pulse" />
) : (
<MdLocationDisabled className="w-6 h-6 text-theme-800 dark:text-theme-200" />
)}
</div>
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-sm">{t("weather.current")}</span>
<span className="text-theme-800 dark:text-theme-200 text-xs">{t("weather.allow")}</span>
</div>
</div>
</button>
);
} }
return <Widget options={{ ...location, ...options }} />; return <Widget options={{ ...location, ...options }} />;

View File

@ -0,0 +1,18 @@
export default function QueueEntry({ title, activity, timeLeft, progress}) {
return (
<div className="text-theme-700 dark:text-theme-200 relative h-5 rounded-md bg-theme-200/50 dark:bg-theme-900/20 m-1 px-1 flex">
<div
className="absolute h-5 rounded-md bg-theme-200 dark:bg-theme-900/40 z-0 -ml-1"
style={{
width: `${progress}%`,
}}
/>
<div className="text-xs z-10 self-center ml-2 relative h-4 grow mr-2">
<div className="absolute w-full whitespace-nowrap text-ellipsis overflow-hidden text-left">{title}</div>
</div>
<div className="self-center text-xs flex justify-end mr-1.5 pl-1 z-10 text-ellipsis overflow-hidden whitespace-nowrap">
{timeLeft ? `${activity} - ${timeLeft}` : activity}
</div>
</div>
);
}

View File

@ -1,79 +1,41 @@
import useSWR from "swr"; import useSWR from "swr";
import { FiCpu } from "react-icons/fi"; import { FiCpu } from "react-icons/fi";
import { BiError } from "react-icons/bi";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import UsageBar from "./usage-bar"; import Resource from "../widget/resource";
import Error from "../widget/error";
export default function Cpu({ expanded }) { export default function Cpu({ expanded, refresh = 1500 }) {
const { t } = useTranslation(); const { t } = useTranslation();
const { data, error } = useSWR(`/api/widgets/resources?type=cpu`, { const { data, error } = useSWR(`/api/widgets/resources?type=cpu`, {
refreshInterval: 1500, refreshInterval: refresh,
}); });
if (error || data?.error) { if (error || data?.error) {
return ( return <Error />
<div className="flex-none flex flex-row items-center mr-3 py-1.5">
<BiError className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-xs">{t("widget.api_error")}</span>
</div>
</div>
);
} }
if (!data) { if (!data) {
return ( return <Resource icon={FiCpu} value="-" label={t("resources.cpu")} expandedValue="-"
<div className="flex-none flex flex-row items-center mr-3 py-1.5 animate-pulse"> expandedLabel={t("resources.load")} percentage="0" expanded={expanded} />
<FiCpu className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left min-w-[85px]">
<div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5 pr-1">-</div>
<div className="pr-1">{t("resources.cpu")}</div>
</div>
{expanded && (
<div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5 pr-1">-</div>
<div className="pr-1">{t("resources.load")}</div>
</div>
)}
<UsageBar percent={0} />
</div>
</div>
);
} }
const percent = data.cpu.usage; return <Resource
icon={FiCpu}
return ( value={t("common.number", {
<div className="flex-none flex flex-row items-center mr-3 py-1.5">
<FiCpu className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left min-w-[85px]">
<div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5 pr-1">
{t("common.number", {
value: data.cpu.usage, value: data.cpu.usage,
style: "unit", style: "unit",
unit: "percent", unit: "percent",
maximumFractionDigits: 0, maximumFractionDigits: 0,
})} })}
</div> label={t("resources.cpu")}
<div className="pr-1">{t("resources.cpu")}</div> expandedValue={t("common.number", {
</div>
{expanded && (
<div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5 pr-1">
{t("common.number", {
value: data.cpu.load, value: data.cpu.load,
maximumFractionDigits: 2, maximumFractionDigits: 2,
})} })}
</div> expandedLabel={t("resources.load")}
<div className="pr-1">{t("resources.load")}</div> percentage={data.cpu.usage}
</div> expanded={expanded}
)} />
<UsageBar percent={percent} />
</div>
</div>
);
} }

View File

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

View File

@ -1,68 +1,43 @@
import useSWR from "swr"; import useSWR from "swr";
import { FiHardDrive } from "react-icons/fi"; import { FiHardDrive } from "react-icons/fi";
import { BiError } from "react-icons/bi";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import UsageBar from "./usage-bar"; import Resource from "../widget/resource";
import Error from "../widget/error";
export default function Disk({ options, expanded }) { export default function Disk({ options, expanded, refresh = 1500 }) {
const { t } = useTranslation(); const { t } = useTranslation();
const { data, error } = useSWR(`/api/widgets/resources?type=disk&target=${options.disk}`, { const { data, error } = useSWR(`/api/widgets/resources?type=disk&target=${options.disk}`, {
refreshInterval: 1500, refreshInterval: refresh,
}); });
if (error || data?.error) { if (error || data?.error) {
return ( return <Error options={options} />
<div className="flex-none flex flex-row items-center mr-3 py-1.5">
<BiError className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-xs">{t("widget.api_error")}</span>
</div>
</div>
);
} }
if (!data) { if (!data) {
return ( return <Resource
<div className="flex-none flex flex-row items-center mr-3 py-1.5 animate-pulse"> icon={FiHardDrive}
<FiHardDrive className="text-theme-800 dark:text-theme-200 w-5 h-5" /> value="-"
<div className="flex flex-col ml-3 text-left min-w-[85px]"> label={t("resources.free")}
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between"> expandedValue="-"
<div className="pl-0.5 pr-1">-</div> expandedLabel={t("resources.total")}
<div className="pr-1">{t("resources.free")}</div> expanded={expanded}
</span> percentage="0"
{expanded && ( />;
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5 pr-1">-</div>
<div className="pr-1">{t("resources.total")}</div>
</span>
)}
<UsageBar percent={0} />
</div>
</div>
);
} }
// data.drive.used not accurate? // data.drive.used not accurate?
const percent = Math.round(((data.drive.size - data.drive.available) / data.drive.size) * 100); const percent = Math.round(((data.drive.size - data.drive.available) / data.drive.size) * 100);
return ( return <Resource
<div className="flex-none flex flex-row items-center mr-3 py-1.5"> icon={FiHardDrive}
<FiHardDrive className="text-theme-800 dark:text-theme-200 w-5 h-5" /> value={t("common.bytes", { value: data.drive.available })}
<div className="flex flex-col ml-3 text-left min-w-[85px]"> label={t("resources.free")}
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between"> expandedValue={t("common.bytes", { value: data.drive.size })}
<div className="pl-0.5 pr-1">{t("common.bytes", { value: data.drive.available })}</div> expandedLabel={t("resources.total")}
<div className="pr-1">{t("resources.free")}</div> percentage={percent}
</span> expanded={expanded}
{expanded && ( />;
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5 pr-1">{t("common.bytes", { value: data.drive.size })}</div>
<div className="pr-1">{t("resources.total")}</div>
</span>
)}
<UsageBar percent={percent} />
</div>
</div>
);
} }

View File

@ -1,75 +1,42 @@
import useSWR from "swr"; import useSWR from "swr";
import { FaMemory } from "react-icons/fa"; import { FaMemory } from "react-icons/fa";
import { BiError } from "react-icons/bi";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import UsageBar from "./usage-bar"; import Resource from "../widget/resource";
import Error from "../widget/error";
export default function Memory({ expanded }) { export default function Memory({ expanded, refresh = 1500 }) {
const { t } = useTranslation(); const { t } = useTranslation();
const { data, error } = useSWR(`/api/widgets/resources?type=memory`, { const { data, error } = useSWR(`/api/widgets/resources?type=memory`, {
refreshInterval: 1500, refreshInterval: refresh,
}); });
if (error || data?.error) { if (error || data?.error) {
return ( return <Error />
<div className="flex-none flex flex-row items-center mr-3 py-1.5">
<BiError className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-xs">{t("widget.api_error")}</span>
</div>
</div>
);
} }
if (!data) { if (!data) {
return ( return <Resource
<div className="flex-none flex flex-row items-center mr-3 py-1.5 animate-pulse"> icon={FaMemory}
<FaMemory className="text-theme-800 dark:text-theme-200 w-5 h-5" /> value="-"
<div className="flex flex-col ml-3 text-left min-w-[85px]"> label={t("resources.free")}
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between"> expandedValue="-"
<div className="pl-0.5 pr-1">-</div> expandedLabel={t("resources.total")}
<div className="pr-1">{t("resources.free")}</div> expanded={expanded}
</span> percentage="0"
{expanded && ( />;
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5 pr-1">-</div>
<div className="pr-1">{t("resources.total")}</div>
</span>
)}
<UsageBar percent={0} />
</div>
</div>
);
} }
const percent = Math.round((data.memory.active / data.memory.total) * 100); const percent = Math.round((data.memory.active / data.memory.total) * 100);
return ( return <Resource
<div className="flex-none flex flex-row items-center mr-3 py-1.5"> icon={FaMemory}
<FaMemory className="text-theme-800 dark:text-theme-200 w-5 h-5" /> value={t("common.bytes", { value: data.memory.available, maximumFractionDigits: 1, binary: true })}
<div className="flex flex-col ml-3 text-left min-w-[85px]"> label={t("resources.free")}
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between"> expandedValue={t("common.bytes", { value: data.memory.total, maximumFractionDigits: 1, binary: true })}
<div className="pl-0.5 pr-1"> expandedLabel={t("resources.total")}
{t("common.bytes", { value: data.memory.available, maximumFractionDigits: 1, binary: true })} percentage={percent}
</div> expanded={expanded}
<div className="pr-1">{t("resources.free")}</div> />;
</span>
{expanded && (
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5 pr-1">
{t("common.bytes", {
value: data.memory.total,
maximumFractionDigits: 1,
binary: true,
})}
</div>
<div className="pr-1">{t("resources.total")}</div>
</span>
)}
<UsageBar percent={percent} />
</div>
</div>
);
} }

View File

@ -1,3 +1,6 @@
import Container from "../widget/container";
import Raw from "../widget/raw";
import Disk from "./disk"; import Disk from "./disk";
import Cpu from "./cpu"; import Cpu from "./cpu";
import Memory from "./memory"; import Memory from "./memory";
@ -6,20 +9,23 @@ import Uptime from "./uptime";
export default function Resources({ options }) { export default function Resources({ options }) {
const { expanded, units } = options; const { expanded, units } = options;
return ( let { refresh } = options;
<div className="flex flex-col max-w:full sm:basis-auto self-center grow-0 flex-wrap"> if (!refresh) refresh = 1500;
refresh = Math.max(refresh, 1000);
return <Container options={options}>
<Raw>
<div className="flex flex-row self-center flex-wrap justify-between"> <div className="flex flex-row self-center flex-wrap justify-between">
{options.cpu && <Cpu expanded={expanded} />} {options.cpu && <Cpu expanded={expanded} refresh={refresh} />}
{options.memory && <Memory expanded={expanded} />} {options.memory && <Memory expanded={expanded} refresh={refresh} />}
{Array.isArray(options.disk) {Array.isArray(options.disk)
? options.disk.map((disk) => <Disk key={disk} options={{ disk }} expanded={expanded} />) ? options.disk.map((disk) => <Disk key={disk} options={{ disk }} expanded={expanded} refresh={refresh} />)
: options.disk && <Disk options={options} expanded={expanded} />} : options.disk && <Disk options={options} expanded={expanded} refresh={refresh} />}
{options.cputemp && <CpuTemp expanded={expanded} units={units} />} {options.cputemp && <CpuTemp expanded={expanded} units={units} refresh={refresh} />}
{options.uptime && <Uptime />} {options.uptime && <Uptime refresh={refresh} />}
</div> </div>
{options.label && ( {options.label && (
<div className="ml-6 pt-1 text-center text-theme-800 dark:text-theme-200 text-xs">{options.label}</div> <div className="ml-6 pt-1 text-center text-theme-800 dark:text-theme-200 text-xs">{options.label}</div>
)} )}
</div> </Raw>
); </Container>;
} }

View File

@ -1,40 +1,23 @@
import useSWR from "swr"; import useSWR from "swr";
import { FaRegClock } from "react-icons/fa"; import { FaRegClock } from "react-icons/fa";
import { BiError } from "react-icons/bi";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import UsageBar from "./usage-bar"; import Resource from "../widget/resource";
import Error from "../widget/error";
export default function Uptime() { export default function Uptime({ refresh = 1500 }) {
const { t } = useTranslation(); const { t } = useTranslation();
const { data, error } = useSWR(`/api/widgets/resources?type=uptime`, { const { data, error } = useSWR(`/api/widgets/resources?type=uptime`, {
refreshInterval: 1500, refreshInterval: refresh,
}); });
if (error || data?.error) { if (error || data?.error) {
return ( return <Error />
<div className="flex-none flex flex-row items-center mr-3 py-1.5">
<BiError className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-xs">{t("widget.api_error")}</span>
</div>
</div>
);
} }
if (!data) { if (!data) {
return ( return <Resource icon={FaRegClock} value="-" label={t("resources.uptime")} percentage="0" />;
<div className="flex-none flex flex-row items-center mr-3 py-1.5 animate-pulse">
<FaRegClock className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left min-w-[85px]">
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">-</div>
<div className="pr-1">{t("resources.temp")}</div>
</span>
</div>
</div>
);
} }
const mo = Math.floor(data.uptime / (3600 * 24 * 31)); const mo = Math.floor(data.uptime / (3600 * 24 * 31));
@ -47,20 +30,7 @@ export default function Uptime() {
else if (d > 0) uptime = `${d}${t("resources.days")} ${h}${t("resources.hours")}`; else if (d > 0) uptime = `${d}${t("resources.days")} ${h}${t("resources.hours")}`;
else uptime = `${h}${t("resources.hours")} ${m}${t("resources.minutes")}`; else uptime = `${h}${t("resources.hours")} ${m}${t("resources.minutes")}`;
const percent = Math.round((new Date().getSeconds() / 60) * 100); const percent = Math.round((new Date().getSeconds() / 60) * 100).toString();
return ( return <Resource icon={FaRegClock} value={uptime} label={t("resources.uptime")} percentage={percent} />;
<div className="flex-none flex flex-row items-center mr-3 py-1.5">
<FaRegClock className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left min-w-[85px]">
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">
{uptime}
</div>
<div className="pr-1">{t("resources.uptime")}</div>
</span>
<UsageBar percent={percent} />
</div>
</div>
);
} }

View File

@ -1,10 +1,13 @@
import { useState, useEffect, Fragment } from "react"; import { useState, useEffect, useCallback, Fragment } from "react";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import { FiSearch } from "react-icons/fi"; import { FiSearch } from "react-icons/fi";
import { SiDuckduckgo, SiMicrosoftbing, SiGoogle, SiBaidu, SiBrave } from "react-icons/si"; import { SiDuckduckgo, SiMicrosoftbing, SiGoogle, SiBaidu, SiBrave } from "react-icons/si";
import { Listbox, Transition } from "@headlessui/react"; import { Listbox, Transition } from "@headlessui/react";
import classNames from "classnames"; import classNames from "classnames";
import ContainerForm from "../widget/container_form";
import Raw from "../widget/raw";
export const searchProviders = { export const searchProviders = {
google: { google: {
name: "Google", name: "Google",
@ -77,13 +80,8 @@ export default function Search({ options }) {
} }
}, [availableProviderIds]); }, [availableProviderIds]);
if (!availableProviderIds) { const submitCallback = useCallback(event => {
return null;
}
function handleSubmit(event) {
const q = encodeURIComponent(query); const q = encodeURIComponent(query);
const { url } = selectedProvider; const { url } = selectedProvider;
if (url) { if (url) {
window.open(`${url}${q}`, options.target || "_blank"); window.open(`${url}${q}`, options.target || "_blank");
@ -94,6 +92,10 @@ export default function Search({ options }) {
event.preventDefault(); event.preventDefault();
event.target.reset(); event.target.reset();
setQuery(""); setQuery("");
}, [options.target, options.url, query, selectedProvider]);
if (!availableProviderIds) {
return null;
} }
const onChangeProvider = (provider) => { const onChangeProvider = (provider) => {
@ -101,8 +103,9 @@ export default function Search({ options }) {
localStorage.setItem(localStorageKey, provider.name); localStorage.setItem(localStorageKey, provider.name);
} }
return ( return <ContainerForm options={options} callback={submitCallback} additionalClassNames="grow" >
<form className="flex-col relative h-8 my-4 min-w-fit grow first:ml-0 ml-4" onSubmit={handleSubmit}> <Raw>
<div className="flex-col relative h-8 my-4 min-w-fit">
<div className="flex absolute inset-y-0 left-0 items-center pl-3 pointer-events-none w-full text-theme-800 dark:text-white" /> <div className="flex absolute inset-y-0 left-0 items-center pl-3 pointer-events-none w-full text-theme-800 dark:text-white" />
<input <input
type="text" type="text"
@ -172,6 +175,7 @@ export default function Search({ options }) {
</Listbox.Options> </Listbox.Options>
</Transition> </Transition>
</Listbox> </Listbox>
</form> </div>
); </Raw>
</ContainerForm>;
} }

View File

@ -3,6 +3,12 @@ import { MdSettingsEthernet } from "react-icons/md";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import { SiUbiquiti } from "react-icons/si"; import { SiUbiquiti } from "react-icons/si";
import Error from "../widget/error";
import Container from "../widget/container";
import Raw from "../widget/raw";
import WidgetIcon from "../widget/widget_icon";
import PrimaryText from "../widget/primary_text";
import useWidgetAPI from "utils/proxy/use-widget-api"; import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Widget({ options }) { export default function Widget({ options }) {
@ -13,35 +19,16 @@ export default function Widget({ options }) {
const { data: statsData, error: statsError } = useWidgetAPI(options, "stat/sites", { index: options.index }); const { data: statsData, error: statsError } = useWidgetAPI(options, "stat/sites", { index: options.index });
if (statsError) { if (statsError) {
return ( return <Error options={options} />
<div className="flex flex-col justify-center first:ml-0 ml-4">
<div className="flex flex-row items-center justify-end">
<div className="flex flex-col items-center">
<BiError className="w-8 h-8 text-theme-800 dark:text-theme-200" />
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-sm">{t("widget.api_error")}</span>
</div>
</div>
</div>
</div>
);
} }
const defaultSite = options.site ? statsData?.data.find(s => s.desc === options.site) : statsData?.data?.find(s => s.name === "default"); const defaultSite = options.site ? statsData?.data.find(s => s.desc === options.site) : statsData?.data?.find(s => s.name === "default");
if (!defaultSite) { if (!defaultSite) {
return ( return <Container options={options}>
<div className="flex flex-col justify-center first:ml-0 ml-4"> <PrimaryText>{t("unifi.wait")}</PrimaryText>
<div className="flex flex-row items-center justify-end"> <WidgetIcon icon={SiUbiquiti} />
<div className="flex flex-col items-center"> </Container>;
<SiUbiquiti className="w-5 h-5 text-theme-800 dark:text-theme-200" />
</div>
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-xs">{t("unifi.wait")}</span>
</div>
</div>
</div>
);
} }
const wan = defaultSite.health.find(h => h.subsystem === "wan"); const wan = defaultSite.health.find(h => h.subsystem === "wan");
@ -56,7 +43,8 @@ export default function Widget({ options }) {
const dataEmpty = !(wan.show || lan.show || wlan.show || uptime); const dataEmpty = !(wan.show || lan.show || wlan.show || uptime);
return ( return <Container options={options}>
<Raw>
<div className="flex-none flex flex-row items-center mr-3 py-1.5"> <div className="flex-none flex flex-row items-center mr-3 py-1.5">
<div className="flex flex-col"> <div className="flex flex-col">
<div className="flex flex-row ml-3 mb-0.5"> <div className="flex flex-row ml-3 mb-0.5">
@ -142,5 +130,6 @@ export default function Widget({ options }) {
</div>} </div>}
</div> </div>
</div> </div>
); </Raw>
</Container>
} }

View File

@ -1,7 +0,0 @@
import mapIcon from "utils/weather/condition-map";
export default function Icon({ condition, timeOfDay }) {
const IconComponent = mapIcon(condition, timeOfDay);
return <IconComponent className="w-10 h-10 text-theme-800 dark:text-theme-200" />;
}

View File

@ -1,11 +1,16 @@
import useSWR from "swr"; import useSWR from "swr";
import { useState } from "react"; import { useState } from "react";
import { BiError } from "react-icons/bi";
import { WiCloudDown } from "react-icons/wi"; import { WiCloudDown } from "react-icons/wi";
import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; import { MdLocationDisabled, MdLocationSearching } from "react-icons/md";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import Icon from "./icon"; import Error from "../widget/error";
import Container from "../widget/container";
import PrimaryText from "../widget/primary_text";
import SecondaryText from "../widget/secondary_text";
import WidgetIcon from "../widget/widget_icon";
import ContainerButton from "../widget/container_button";
import mapIcon from "../../../utils/weather/condition-map";
function Widget({ options }) { function Widget({ options }) {
const { t, i18n } = useTranslation(); const { t, i18n } = useTranslation();
@ -15,59 +20,33 @@ function Widget({ options }) {
); );
if (error || data?.error) { if (error || data?.error) {
return ( return <Error options={options} />
<div className="flex flex-col justify-center first:ml-0 ml-4 mr-2">
<div className="flex flex-row items-center justify-end">
<div className="flex flex-col items-center">
<BiError className="w-8 h-8 text-theme-800 dark:text-theme-200" />
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-sm">{t("widget.api_error")}</span>
<span className="text-theme-800 dark:text-theme-200 text-xs">-</span>
</div>
</div>
</div>
</div>
);
} }
if (!data) { if (!data) {
return ( return <Container options={options}>
<div className="flex flex-col justify-center first:ml-0 ml-4 mr-2"> <PrimaryText>{t("weather.updating")}</PrimaryText>
<div className="flex flex-row items-center justify-end"> <SecondaryText>{t("weather.wait")}</SecondaryText>
<div className="flex flex-col items-center"> <WidgetIcon icon={WiCloudDown} size="l" />
<WiCloudDown className="w-8 h-8 text-theme-800 dark:text-theme-200" /> </Container>;
</div>
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-sm">{t("weather.updating")}</span>
<span className="text-theme-800 dark:text-theme-200 text-xs">{t("weather.wait")}</span>
</div>
</div>
</div>
);
} }
const unit = options.units === "metric" ? "celsius" : "fahrenheit"; const unit = options.units === "metric" ? "celsius" : "fahrenheit";
const condition = data.current.condition.code;
const timeOfDay = data.current.is_day ? "day" : "night";
return ( return <Container options={options}>
<div className="flex flex-col justify-center first:ml-0 ml-4 mr-2"> <PrimaryText>
<div className="flex flex-row items-center justify-end">
<div className="flex flex-col items-center">
<Icon condition={data.current.condition.code} timeOfDay={data.current.is_day ? "day" : "night"} />
</div>
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-sm">
{options.label && `${options.label}, `} {options.label && `${options.label}, `}
{t("common.number", { {t("common.number", {
value: options.units === "metric" ? data.current.temp_c : data.current.temp_f, value: options.units === "metric" ? data.current.temp_c : data.current.temp_f,
style: "unit", style: "unit",
unit, unit,
})} })}
</span> </PrimaryText>
<span className="text-theme-800 dark:text-theme-200 text-xs">{data.current.condition.text}</span> <SecondaryText>{data.current.condition.text}</SecondaryText>
</div> <WidgetIcon icon={mapIcon(condition, timeOfDay)} size="xl" />
</div> </Container>;
</div>
);
} }
export default function WeatherApi({ options }) { export default function WeatherApi({ options }) {
@ -99,30 +78,12 @@ export default function WeatherApi({ options }) {
} }
}; };
// if (!requesting && !location) requestLocation();
if (!location) { if (!location) {
return ( return <ContainerButton options={options} callback={requestLocation} >
<button <PrimaryText>{t("weather.current")}</PrimaryText>
type="button" <SecondaryText>{t("weather.allow")}</SecondaryText>
onClick={() => requestLocation()} <WidgetIcon icon={requesting ? MdLocationSearching : MdLocationDisabled} size="m" pulse />
className="flex flex-col justify-center first:ml-0 ml-4 mr-2" </ContainerButton>;
>
<div className="flex flex-row items-center justify-end">
<div className="flex flex-col items-center">
{requesting ? (
<MdLocationSearching className="w-6 h-6 text-theme-800 dark:text-theme-200 animate-pulse" />
) : (
<MdLocationDisabled className="w-6 h-6 text-theme-800 dark:text-theme-200" />
)}
</div>
<div className="flex flex-col ml-3 text-left">
<span className="text-theme-800 dark:text-theme-200 text-sm">{t("weather.current")}</span>
<span className="text-theme-800 dark:text-theme-200 text-xs">{t("weather.allow")}</span>
</div>
</div>
</button>
);
} }
return <Widget options={{ ...location, ...options }} />; return <Widget options={{ ...location, ...options }} />;

View File

@ -17,13 +17,13 @@ const widgetMappings = {
kubernetes: dynamic(() => import("components/widgets/kubernetes/kubernetes")), kubernetes: dynamic(() => import("components/widgets/kubernetes/kubernetes")),
}; };
export default function Widget({ widget }) { export default function Widget({ widget, style }) {
const InfoWidget = widgetMappings[widget.type]; const InfoWidget = widgetMappings[widget.type];
if (InfoWidget) { if (InfoWidget) {
return ( return (
<ErrorBoundary> <ErrorBoundary>
<InfoWidget options={widget.options} /> <InfoWidget options={{ ...widget.options, style }} />
</ErrorBoundary> </ErrorBoundary>
); );
} }

View File

@ -0,0 +1,54 @@
import classNames from "classnames";
import WidgetIcon from "./widget_icon";
import PrimaryText from "./primary_text";
import SecondaryText from "./secondary_text";
import Raw from "./raw";
export function getAllClasses(options, additionalClassNames = '') {
if (options?.style?.header === "boxedWidgets") {
return classNames(
"flex flex-col justify-center first:ml-0 ml-2 mr-2",
"mt-2 m:mb-0 rounded-md shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 dark:bg-white/5 p-2 pl-3 pr-3",
additionalClassNames
);
}
let widgetAlignedClasses = "flex flex-col max-w:full sm:basis-auto self-center grow-0 flex-wrap";
if (options?.style?.isRightAligned) {
widgetAlignedClasses = "flex flex-col justify-center first:ml-auto ml-2 mr-2 ";
}
return classNames(
widgetAlignedClasses,
additionalClassNames
);
}
export function getInnerBlock(children) {
// children won't be an array if it's Raw component
return Array.isArray(children) && <div className="flex flex-row items-center justify-end">
<div className="flex flex-col items-center">{children.find(child => child.type === WidgetIcon)}</div>
<div className="flex flex-col ml-3 text-left">
{children.find(child => child.type === PrimaryText)}
{children.find(child => child.type === SecondaryText)}
</div>
</div>;
}
export function getBottomBlock(children) {
if (children.type !== Raw) {
return children.find(child => child.type === Raw) || [];
}
return [children];
}
export default function Container({ children = [], options, additionalClassNames = '' }) {
return (
<div className={getAllClasses(options, additionalClassNames)}>
{getInnerBlock(children)}
{getBottomBlock(children)}
</div>
);
}

View File

@ -0,0 +1,10 @@
import { getAllClasses, getInnerBlock, getBottomBlock } from "./container";
export default function ContainerButton ({ children = [], options, additionalClassNames = '', callback }) {
return (
<button type="button" onClick={callback} className={getAllClasses(options, additionalClassNames)}>
{getInnerBlock(children)}
{getBottomBlock(children)}
</button>
);
}

View File

@ -0,0 +1,10 @@
import { getAllClasses, getInnerBlock, getBottomBlock } from "./container";
export default function ContainerForm ({ children = [], options, additionalClassNames = '', callback }) {
return (
<form type="button" onSubmit={callback} className={getAllClasses(options, additionalClassNames)}>
{getInnerBlock(children)}
{getBottomBlock(children)}
</form>
);
}

View File

@ -0,0 +1,10 @@
import { getAllClasses, getInnerBlock, getBottomBlock } from "./container";
export default function ContainerLink ({ children = [], options, additionalClassNames = '', target }) {
return (
<a href={options.url} target={target} className={getAllClasses(options, additionalClassNames)}>
{getInnerBlock(children)}
{getBottomBlock(children)}
</a>
);
}

View File

@ -0,0 +1,15 @@
import { useTranslation } from "react-i18next";
import { BiError } from "react-icons/bi";
import Container from "./container";
import PrimaryText from "./primary_text";
import WidgetIcon from "./widget_icon";
export default function Error({ options }) {
const { t } = useTranslation();
return <Container options={options}>
<PrimaryText>{t("widget.api_error")}</PrimaryText>
<WidgetIcon icon={BiError} size="l" />
</Container>;
}

View File

@ -0,0 +1,5 @@
export default function PrimaryText({ children }) {
return (
<span className="text-theme-800 dark:text-theme-200 text-sm">{children}</span>
);
}

View File

@ -0,0 +1,7 @@
export default function Raw({ children }) {
if (children.type === Raw) {
return [children];
}
return children;
}

View File

@ -0,0 +1,22 @@
import UsageBar from "../resources/usage-bar";
export default function Resource({ children, icon, value, label, expandedValue = "", expandedLabel = "", percentage, expanded = false }) {
const Icon = icon;
return <div className="flex-none flex flex-row items-center mr-3 py-1.5">
<Icon className="text-theme-800 dark:text-theme-200 w-5 h-5"/>
<div className="flex flex-col ml-3 text-left min-w-[85px]">
<div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">{value}</div>
<div className="pr-1">{label}</div>
</div>
{ expanded && <div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">{expandedValue}</div>
<div className="pr-1">{expandedLabel}</div>
</div>
}
{ percentage >= 0 && <UsageBar percent={percentage} /> }
{ children }
</div>
</div>;
}

View File

@ -0,0 +1,17 @@
import ContainerLink from "./container_link";
import Resource from "./resource";
import Raw from "./raw";
import WidgetLabel from "./widget_label";
export default function Resources({ options, children, target }) {
const widgetParts = [].concat(...children);
return <ContainerLink options={options} target={target}>
<Raw>
<div className="flex flex-row self-center flex-wrap justify-between">
{ widgetParts.filter(child => child && child.type === Resource) }
</div>
{ widgetParts.filter(child => child && child.type === WidgetLabel) }
</Raw>
</ContainerLink>;
}

View File

@ -0,0 +1,5 @@
export default function SecondaryText({ children }) {
return (
<span className="text-theme-800 dark:text-theme-200 text-xs">{children}</span>
);
}

View File

@ -0,0 +1,17 @@
export default function WidgetIcon({ icon, size = "s", pulse = false }) {
const Icon = icon;
let additionalClasses = "text-theme-800 dark:text-theme-200 ";
switch (size) {
case "m": additionalClasses += "w-6 h-6 "; break;
case "l": additionalClasses += "w-8 h-8 "; break;
case "xl": additionalClasses += "w-10 h-10 "; break;
default: additionalClasses += "w-5 h-5 ";
}
if (pulse) {
additionalClasses += "animate-pulse ";
}
return <Icon className={additionalClasses} />;
}

View File

@ -0,0 +1,3 @@
export default function WidgetLabel({ label = "" }) {
return <div className="pt-1 text-center text-theme-800 dark:text-theme-200 text-xs">{label}</div>
}

View File

@ -2,7 +2,7 @@ import { join } from "path";
import { createHash } from "crypto"; import { createHash } from "crypto";
import { readFileSync } from "fs"; import { readFileSync } from "fs";
import checkAndCopyConfig from "utils/config/config"; import checkAndCopyConfig, { CONF_DIR } from "utils/config/config";
const configs = ["docker.yaml", "settings.yaml", "services.yaml", "bookmarks.yaml", "widgets.yaml"]; const configs = ["docker.yaml", "settings.yaml", "services.yaml", "bookmarks.yaml", "widgets.yaml"];
@ -15,7 +15,7 @@ function hash(buffer) {
export default async function handler(req, res) { export default async function handler(req, res) {
const hashes = configs.map((config) => { const hashes = configs.map((config) => {
checkAndCopyConfig(config); checkAndCopyConfig(config);
const configYaml = join(process.cwd(), "config", config); const configYaml = join(CONF_DIR, config);
return hash(readFileSync(configYaml, "utf8")); return hash(readFileSync(configYaml, "utf8"));
}); });

View File

@ -1,12 +1,22 @@
import { performance } from "perf_hooks"; import { performance } from "perf_hooks";
import { getServiceItem } from "utils/config/service-helpers";
import createLogger from "utils/logger"; import createLogger from "utils/logger";
import { httpProxy } from "utils/proxy/http"; import { httpProxy } from "utils/proxy/http";
const logger = createLogger("ping"); const logger = createLogger("ping");
export default async function handler(req, res) { export default async function handler(req, res) {
const { ping: pingURL } = req.query; const { group, service } = req.query;
const serviceItem = await getServiceItem(group, service);
if (!serviceItem) {
logger.debug(`No service item found for group ${group} named ${service}`);
return res.status(400).send({
error: "Unable to find service, see log for details.",
});
}
const { ping: pingURL } = serviceItem;
if (!pingURL) { if (!pingURL) {
logger.debug("No ping URL specified"); logger.debug("No ping URL specified");

View File

@ -22,6 +22,7 @@ export default async function handler(req, res) {
if (widget?.mappings) { if (widget?.mappings) {
const mapping = widget?.mappings?.[req.query.endpoint]; const mapping = widget?.mappings?.[req.query.endpoint];
const mappingParams = mapping?.params; const mappingParams = mapping?.params;
const optionalParams = mapping?.optionalParams;
const map = mapping?.map; const map = mapping?.map;
const endpoint = mapping?.endpoint; const endpoint = mapping?.endpoint;
const endpointProxy = mapping?.proxyHandler || serviceProxyHandler; const endpointProxy = mapping?.proxyHandler || serviceProxyHandler;
@ -40,9 +41,17 @@ export default async function handler(req, res) {
req.query.endpoint = formatApiCall(endpoint, segments); req.query.endpoint = formatApiCall(endpoint, segments);
} }
if (req.query.query && mappingParams) { if (req.query.query && (mappingParams || optionalParams)) {
const queryParams = JSON.parse(req.query.query); const queryParams = JSON.parse(req.query.query);
const query = new URLSearchParams(mappingParams.map((p) => [p, queryParams[p]]));
let filteredOptionalParams = []
if (optionalParams) filteredOptionalParams = optionalParams.filter(p => queryParams[p] !== undefined);
let params = [];
if (mappingParams) params = params.concat(mappingParams);
if (filteredOptionalParams) params = params.concat(filteredOptionalParams);
const query = new URLSearchParams(params.map((p) => [p, queryParams[p]]));
req.query.endpoint = `${req.query.endpoint}?${query}`; req.query.endpoint = `${req.query.endpoint}?${query}`;
} }

View File

@ -40,20 +40,32 @@ async function retrieveFromGlancesAPI(privateWidgetOptions, endpoint) {
} }
export default async function handler(req, res) { export default async function handler(req, res) {
const { index } = req.query; const { index, cputemp: includeCpuTemp, uptime: includeUptime, disk: includeDisks } = req.query;
const privateWidgetOptions = await getPrivateWidgetOptions("glances", index); const privateWidgetOptions = await getPrivateWidgetOptions("glances", index);
try { try {
const quicklookData = await retrieveFromGlancesAPI(privateWidgetOptions, "quicklook"); const cpuData = await retrieveFromGlancesAPI(privateWidgetOptions, "cpu");
const loadData = await retrieveFromGlancesAPI(privateWidgetOptions, "load");
const memoryData = await retrieveFromGlancesAPI(privateWidgetOptions, "mem");
const data = { const data = {
quicklook: quicklookData cpu: cpuData,
load: loadData,
mem: memoryData,
} }
// Disabled by default, dont call unless needed
if (includeUptime) {
data.uptime = await retrieveFromGlancesAPI(privateWidgetOptions, "uptime"); data.uptime = await retrieveFromGlancesAPI(privateWidgetOptions, "uptime");
}
if (includeCpuTemp) {
data.sensors = await retrieveFromGlancesAPI(privateWidgetOptions, "sensors"); data.sensors = await retrieveFromGlancesAPI(privateWidgetOptions, "sensors");
}
if (includeDisks) {
data.fs = await retrieveFromGlancesAPI(privateWidgetOptions, "fs");
}
return res.status(200).send(data); return res.status(200).send(data);
} catch (e) { } catch (e) {

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