Merge branch 'main' into glances-fs
This commit is contained in:
commit
108ca23212
75 changed files with 2336 additions and 528 deletions
2
.vscode/launch.json
vendored
2
.vscode/launch.json
vendored
|
@ -16,4 +16,4 @@
|
|||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -85,6 +85,8 @@ services:
|
|||
volumes:
|
||||
- /path/to/config:/app/config # Make sure your local config directory exists
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro # (optional) For docker integrations
|
||||
# user: 1000:1000 optional, not compatibile with direct socket see https://gethomepage.dev/en/configs/docker/#using-socket-directly
|
||||
restart: unless-stopped
|
||||
```
|
||||
|
||||
or docker run:
|
||||
|
|
10
package-lock.json
generated
10
package-lock.json
generated
|
@ -14,7 +14,7 @@
|
|||
"compare-versions": "^5.0.1",
|
||||
"dockerode": "^3.3.4",
|
||||
"follow-redirects": "^1.15.2",
|
||||
"gamedig": "^4.0.6",
|
||||
"gamedig": "^4.0.7",
|
||||
"i18next": "^21.9.2",
|
||||
"js-yaml": "^4.1.0",
|
||||
"json-rpc-2.0": "^1.4.1",
|
||||
|
@ -2977,14 +2977,14 @@
|
|||
}
|
||||
},
|
||||
"node_modules/gamedig": {
|
||||
"version": "4.0.6",
|
||||
"resolved": "https://registry.npmjs.org/gamedig/-/gamedig-4.0.6.tgz",
|
||||
"integrity": "sha512-h0k9n/e5vNrd9Mh2wyFUp2Vo7ABWbDkdBxKC6FNJLOZiU5d9Z29bntGeYbXtOkcRWoV6Q63wSAJ3jLWxYQkpZw==",
|
||||
"version": "4.0.7",
|
||||
"resolved": "https://registry.npmjs.org/gamedig/-/gamedig-4.0.7.tgz",
|
||||
"integrity": "sha512-A8bJ23ulAEp8A4ZJAHp5cMkWu4ymf6AQdOPBAa2asHQqAnf2/bIa07ClcQeeCp+bQWYqJAcW7xvUqjruSrCX4A==",
|
||||
"dependencies": {
|
||||
"cheerio": "^1.0.0-rc.10",
|
||||
"compressjs": "^1.0.2",
|
||||
"gbxremote": "^0.2.1",
|
||||
"got": "^12.0.3",
|
||||
"got": "^12.1.0",
|
||||
"iconv-lite": "^0.6.3",
|
||||
"long": "^5.2.0",
|
||||
"minimist": "^1.2.6",
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
"compare-versions": "^5.0.1",
|
||||
"dockerode": "^3.3.4",
|
||||
"follow-redirects": "^1.15.2",
|
||||
"gamedig": "^4.0.6",
|
||||
"gamedig": "^4.0.7",
|
||||
"i18next": "^21.9.2",
|
||||
"js-yaml": "^4.1.0",
|
||||
"json-rpc-2.0": "^1.4.1",
|
||||
|
|
8
pnpm-lock.yaml
generated
8
pnpm-lock.yaml
generated
|
@ -24,8 +24,8 @@ dependencies:
|
|||
specifier: ^1.15.2
|
||||
version: 1.15.2
|
||||
gamedig:
|
||||
specifier: ^4.0.6
|
||||
version: 4.0.6
|
||||
specifier: ^4.0.7
|
||||
version: 4.0.7
|
||||
i18next:
|
||||
specifier: ^21.9.2
|
||||
version: 21.10.0
|
||||
|
@ -1972,8 +1972,8 @@ packages:
|
|||
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
|
||||
dev: true
|
||||
|
||||
/gamedig@4.0.6:
|
||||
resolution: {integrity: sha512-h0k9n/e5vNrd9Mh2wyFUp2Vo7ABWbDkdBxKC6FNJLOZiU5d9Z29bntGeYbXtOkcRWoV6Q63wSAJ3jLWxYQkpZw==}
|
||||
/gamedig@4.0.7:
|
||||
resolution: {integrity: sha512-A8bJ23ulAEp8A4ZJAHp5cMkWu4ymf6AQdOPBAa2asHQqAnf2/bIa07ClcQeeCp+bQWYqJAcW7xvUqjruSrCX4A==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"calibreweb": {
|
||||
"categories": "Categories",
|
||||
"series": "Series",
|
||||
"books": "Books",
|
||||
"authors": "Authors"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"seemsdown": "Seems Down",
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,13 +10,13 @@
|
|||
"movies": "Film",
|
||||
"wanted": "Ønskede",
|
||||
"missing": "Mangler",
|
||||
"queue": "Queue",
|
||||
"unknown": "Unknown"
|
||||
"queue": "Kø",
|
||||
"unknown": "Ukendt"
|
||||
},
|
||||
"lidarr": {
|
||||
"wanted": "Ønsket",
|
||||
"queued": "I Kø",
|
||||
"artists": "Artists"
|
||||
"artists": "Artister"
|
||||
},
|
||||
"jellyseerr": {
|
||||
"available": "Tilgængelig",
|
||||
|
@ -27,13 +27,13 @@
|
|||
"pending": "Afventer",
|
||||
"approved": "Godkendt",
|
||||
"available": "Tilgængelig",
|
||||
"processing": "Processing"
|
||||
"processing": "Behandler"
|
||||
},
|
||||
"adguard": {
|
||||
"queries": "Forespørgsler",
|
||||
"blocked": "Blokerede",
|
||||
"filtered": "Filtreret",
|
||||
"latency": "Latency"
|
||||
"latency": "Latenstid"
|
||||
},
|
||||
"speedtest": {
|
||||
"upload": "Upload",
|
||||
|
@ -48,7 +48,7 @@
|
|||
"coinmarketcap": {
|
||||
"30days": "30 Dage",
|
||||
"1day": "1 Dag",
|
||||
"configure": "Konfigurer en eller flere crypto valutaer til tracking",
|
||||
"configure": "Konfigurer en eller flere crypto valutaer til tracking",
|
||||
"7days": "7 Dage",
|
||||
"1hour": "1 time"
|
||||
},
|
||||
|
@ -73,67 +73,67 @@
|
|||
"wait": "Vent venligst",
|
||||
"uptime": "UP",
|
||||
"days": "d",
|
||||
"hours": "h",
|
||||
"hours": "t",
|
||||
"temp": "TEMP",
|
||||
"load": "Load",
|
||||
"warn": "Warn",
|
||||
"warn": "Advar",
|
||||
"total": "Total",
|
||||
"free": "Free",
|
||||
"used": "Used",
|
||||
"free": "Ledig",
|
||||
"used": "Brugt",
|
||||
"crit": "Crit",
|
||||
"read": "Read",
|
||||
"write": "Write",
|
||||
"read": "Læs",
|
||||
"write": "Skriv",
|
||||
"gpu": "GPU",
|
||||
"mem": "Mem",
|
||||
"mem": "Ram",
|
||||
"swap": "Swap"
|
||||
},
|
||||
"wmo": {
|
||||
"1-day": "Hovedsageligt solrigt",
|
||||
"1-day": "Overvejende Solrigt",
|
||||
"48-day": "Tåget",
|
||||
"48-night": "Tåget",
|
||||
"51-day": "Let støvregn",
|
||||
"51-night": "Let støvregn",
|
||||
"66-night": "Frysende regn",
|
||||
"67-day": "Frysende regn",
|
||||
"67-night": "Frysende regn",
|
||||
"51-day": "Let Støvregn",
|
||||
"51-night": "Let Støvregn",
|
||||
"66-night": "Frysende Regn",
|
||||
"67-day": "Frysende Regn",
|
||||
"67-night": "Frysende Regn",
|
||||
"71-day": "Let Sne",
|
||||
"75-night": "Kraftig Sne",
|
||||
"86-day": "Snebyger",
|
||||
"86-night": "Snebyger",
|
||||
"95-day": "Tordenvejr",
|
||||
"99-day": "Tordenvejr med hagl",
|
||||
"99-night": "Tordenvejr med hagl",
|
||||
"99-day": "Tordenvejr Med Hagl",
|
||||
"99-night": "Tordenvejr Med Hagl",
|
||||
"0-day": "Solrig",
|
||||
"0-night": "Klart",
|
||||
"1-night": "Hovedsageligt klart",
|
||||
"2-day": "Delvist skyet",
|
||||
"2-night": "Delvist skyet",
|
||||
"1-night": "Overvejende Skyfrit",
|
||||
"2-day": "Delvist Overskyet",
|
||||
"2-night": "Delvist Overskyet",
|
||||
"3-day": "Skyet",
|
||||
"3-night": "Skyet",
|
||||
"45-day": "Tåget",
|
||||
"65-day": "Kraftig regn",
|
||||
"65-night": "Kraftig regn",
|
||||
"65-day": "Kraftig Regn",
|
||||
"65-night": "Kraftig Regn",
|
||||
"45-night": "Tåget",
|
||||
"53-day": "Støvregn",
|
||||
"53-night": "Støvregn",
|
||||
"55-day": "Kraftig støvregn",
|
||||
"55-night": "Kraftig støvregn",
|
||||
"56-day": "Let frysende støvregn",
|
||||
"56-night": "Let frysende støvregn",
|
||||
"57-day": "Frysende støvregn",
|
||||
"57-night": "Frysende støvregn",
|
||||
"55-day": "Kraftig Støvregn",
|
||||
"55-night": "Kraftig Støvregn",
|
||||
"56-day": "Let Frysende Støvregn",
|
||||
"56-night": "Let Frysende Støvregn",
|
||||
"57-day": "Frysende Støvregn",
|
||||
"57-night": "Frysende Støvregn",
|
||||
"61-day": "Let Regn",
|
||||
"61-night": "Let Regn",
|
||||
"63-day": "Regn",
|
||||
"63-night": "Regn",
|
||||
"66-day": "Frysende regn",
|
||||
"66-day": "Frysende Regn",
|
||||
"71-night": "Let Sne",
|
||||
"73-day": "Sne",
|
||||
"73-night": "Sne",
|
||||
"75-day": "Kraftig Sne",
|
||||
"77-day": "Snekorn",
|
||||
"80-day": "Lette byger",
|
||||
"80-night": "Lette byger",
|
||||
"80-day": "Lette Byger",
|
||||
"80-night": "Lette Byger",
|
||||
"81-day": "Byger",
|
||||
"77-night": "Snekorn",
|
||||
"81-night": "Byger",
|
||||
|
@ -142,19 +142,19 @@
|
|||
"85-day": "Snebyger",
|
||||
"85-night": "Snebyger",
|
||||
"95-night": "Tordenvejr",
|
||||
"96-day": "Tordenvejr med hagl",
|
||||
"96-night": "Tordenvejr med hagl"
|
||||
"96-day": "Tordenvejr Med Hagl",
|
||||
"96-night": "Tordenvejr Med Hagl"
|
||||
},
|
||||
"homebridge": {
|
||||
"available_update": "System",
|
||||
"updates": "Opdateringer",
|
||||
"update_available": "Opdateringer tilgængelige",
|
||||
"update_available": "Opdateringer Tilgængelige",
|
||||
"up_to_date": "Opdateret",
|
||||
"child_bridges": "Child Bridges",
|
||||
"child_bridges_status": "{{ok}}/{{total}}",
|
||||
"up": "Up",
|
||||
"pending": "Pending",
|
||||
"down": "Down"
|
||||
"up": "Oppe",
|
||||
"pending": "Afventer",
|
||||
"down": "Nede"
|
||||
},
|
||||
"widget": {
|
||||
"missing_type": "Manglende Widget Type: {{type}}",
|
||||
|
@ -162,8 +162,8 @@
|
|||
"status": "Status",
|
||||
"information": "Information",
|
||||
"url": "URL",
|
||||
"raw_error": "Raw Error",
|
||||
"response_data": "Response Data"
|
||||
"raw_error": "Rå Fejl",
|
||||
"response_data": "Svardata"
|
||||
},
|
||||
"weather": {
|
||||
"current": "Nuværende lokation",
|
||||
|
@ -180,13 +180,13 @@
|
|||
"free": "Fri",
|
||||
"used": "Brugt",
|
||||
"load": "Belastning",
|
||||
"mem": "MEM",
|
||||
"hours": "h",
|
||||
"mem": "RAM",
|
||||
"hours": "t",
|
||||
"minutes": "m",
|
||||
"temp": "TEMP",
|
||||
"max": "Max",
|
||||
"uptime": "UP",
|
||||
"months": "mo",
|
||||
"months": "mdr",
|
||||
"days": "d"
|
||||
},
|
||||
"unifi": {
|
||||
|
@ -204,7 +204,7 @@
|
|||
"up": "Oppe",
|
||||
"down": "NED",
|
||||
"wait": "Vent venligst",
|
||||
"empty_data": "Subsystem status unknown"
|
||||
"empty_data": "Subsystem status ukendt"
|
||||
},
|
||||
"docker": {
|
||||
"cpu": "CPU",
|
||||
|
@ -213,24 +213,24 @@
|
|||
"mem": "RAM",
|
||||
"offline": "Offline",
|
||||
"error": "Error",
|
||||
"unknown": "Unknown",
|
||||
"running": "Running",
|
||||
"starting": "Starting",
|
||||
"unhealthy": "Unhealthy",
|
||||
"not_found": "Not Found",
|
||||
"exited": "Exited",
|
||||
"partial": "Partial",
|
||||
"healthy": "Healthy"
|
||||
"unknown": "Ukendt",
|
||||
"running": "Kører",
|
||||
"starting": "Starter",
|
||||
"unhealthy": "Usund",
|
||||
"not_found": "Ikke Fundet",
|
||||
"exited": "Forladt",
|
||||
"partial": "Delvis",
|
||||
"healthy": "Sund"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "Afspiller",
|
||||
"transcoding": "Transcoder",
|
||||
"bitrate": "Bitrate",
|
||||
"no_active": "Ingen Aktive Streams",
|
||||
"movies": "Movies",
|
||||
"series": "Series",
|
||||
"episodes": "Episodes",
|
||||
"songs": "Songs"
|
||||
"movies": "Film",
|
||||
"series": "Serier",
|
||||
"episodes": "Episoder",
|
||||
"songs": "Sange"
|
||||
},
|
||||
"changedetectionio": {
|
||||
"totalObserved": "Total Observeret",
|
||||
|
@ -241,7 +241,7 @@
|
|||
"transcoding": "Transcoder",
|
||||
"bitrate": "Bitrate",
|
||||
"no_active": "Ingen Aktive Streams",
|
||||
"plex_connection_error": "Check Plex Connection"
|
||||
"plex_connection_error": "Tjek Plex-forbindelse"
|
||||
},
|
||||
"nzbget": {
|
||||
"rate": "Rate",
|
||||
|
@ -274,8 +274,8 @@
|
|||
"wanted": "Ønsket",
|
||||
"queued": "I Kø",
|
||||
"series": "Serier",
|
||||
"queue": "Queue",
|
||||
"unknown": "Unknown"
|
||||
"queue": "Kø",
|
||||
"unknown": "Ukendt"
|
||||
},
|
||||
"readarr": {
|
||||
"wanted": "Ønskede",
|
||||
|
@ -295,7 +295,7 @@
|
|||
"blocked": "Blokerede",
|
||||
"gravity": "Gravity",
|
||||
"queries": "Forespørgsler",
|
||||
"blocked_percent": "Blocked %"
|
||||
"blocked_percent": "Blokeret %"
|
||||
},
|
||||
"portainer": {
|
||||
"running": "Kørende",
|
||||
|
@ -316,8 +316,8 @@
|
|||
"enableIndexers": "Indeksører",
|
||||
"numberOfGrabs": "Grabs",
|
||||
"numberOfQueries": "Forespørgsler",
|
||||
"numberOfFailGrabs": "Fail Grabs",
|
||||
"numberOfFailQueries": "Fejl forespørgsler"
|
||||
"numberOfFailGrabs": "Fejl Grabs",
|
||||
"numberOfFailQueries": "Fejl Forespørgsler"
|
||||
},
|
||||
"jackett": {
|
||||
"configured": "Konfigureret",
|
||||
|
@ -332,9 +332,9 @@
|
|||
"quicklaunch": {
|
||||
"bookmark": "Bogmærker",
|
||||
"service": "Service",
|
||||
"search": "Search",
|
||||
"custom": "Custom",
|
||||
"visit": "Visit",
|
||||
"search": "Søg",
|
||||
"custom": "Brugerdefinerede",
|
||||
"visit": "Besøg",
|
||||
"url": "URL"
|
||||
},
|
||||
"watchtower": {
|
||||
|
@ -371,25 +371,25 @@
|
|||
"total": "Total"
|
||||
},
|
||||
"gluetun": {
|
||||
"public_ip": "Public IP",
|
||||
"public_ip": "Offentlig IP",
|
||||
"region": "Region",
|
||||
"country": "Country"
|
||||
"country": "Land"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Channels",
|
||||
"channels": "Kanaler",
|
||||
"hd": "HD"
|
||||
},
|
||||
"ping": {
|
||||
"error": "Error",
|
||||
"error": "Fejl",
|
||||
"ping": "Ping"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Passed",
|
||||
"failed": "Failed",
|
||||
"unknown": "Unknown"
|
||||
"passed": "Bestået",
|
||||
"failed": "Mislykket",
|
||||
"unknown": "Ukendt"
|
||||
},
|
||||
"paperlessngx": {
|
||||
"inbox": "Inbox",
|
||||
"inbox": "Indbakke",
|
||||
"total": "Total"
|
||||
},
|
||||
"deluge": {
|
||||
|
@ -405,29 +405,29 @@
|
|||
"seed": "Seed"
|
||||
},
|
||||
"tdarr": {
|
||||
"queue": "Queue",
|
||||
"processed": "Processed",
|
||||
"errored": "Errored",
|
||||
"saved": "Saved"
|
||||
"queue": "Kø",
|
||||
"processed": "Behandlet",
|
||||
"errored": "Fejlet",
|
||||
"saved": "Gemt"
|
||||
},
|
||||
"miniflux": {
|
||||
"read": "Read",
|
||||
"unread": "Unread"
|
||||
"read": "Læst",
|
||||
"unread": "Ulæst"
|
||||
},
|
||||
"nextdns": {
|
||||
"wait": "Please Wait",
|
||||
"no_devices": "No Device Data Received"
|
||||
"wait": "Vent Venligst",
|
||||
"no_devices": "Ingen Enhedsdata Modtaget"
|
||||
},
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
"connectedAp": "Forbundne APs",
|
||||
"activeUser": "Aktive enheder",
|
||||
"alerts": "Advarsler",
|
||||
"connectedGateway": "Forbundne gateways",
|
||||
"connectedSwitches": "Forbundne switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
|
@ -436,238 +436,238 @@
|
|||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"cpuLoad": "CPU Belastning",
|
||||
"memoryUsed": "Hukommelse Brugt",
|
||||
"uptime": "Oppetid",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
"streams_all": "Alle Streams",
|
||||
"streams_active": "Aktive Streams",
|
||||
"streams_xepg": "XEPG Kanaler"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"cpu": "CPU Belastning",
|
||||
"memory": "Aktiv Hukommelse",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
},
|
||||
"moonraker": {
|
||||
"printer_state": "Printer State",
|
||||
"printer_state": "Printer Tilstand",
|
||||
"print_status": "Print Status",
|
||||
"print_progress": "Progress",
|
||||
"layers": "Layers"
|
||||
"print_progress": "Fremskridt",
|
||||
"layers": "Lag"
|
||||
},
|
||||
"medusa": {
|
||||
"wanted": "Wanted",
|
||||
"queued": "Queued",
|
||||
"series": "Series"
|
||||
"wanted": "Ønskede",
|
||||
"queued": "I Kø",
|
||||
"series": "Serier"
|
||||
},
|
||||
"octoprint": {
|
||||
"printer_state": "Status",
|
||||
"temp_tool": "Tool temp",
|
||||
"temp_bed": "Bed temp",
|
||||
"job_completion": "Completion"
|
||||
"job_completion": "Færdiggørelse"
|
||||
},
|
||||
"cloudflared": {
|
||||
"origin_ip": "Origin IP",
|
||||
"origin_ip": "Oprindelses-IP",
|
||||
"status": "Status"
|
||||
},
|
||||
"proxmoxbackupserver": {
|
||||
"datastore_usage": "Datastore",
|
||||
"failed_tasks_24h": "Failed Tasks 24h",
|
||||
"datastore_usage": "Datalager",
|
||||
"failed_tasks_24h": "Mislykkede Opgaver 24t",
|
||||
"cpu_usage": "CPU",
|
||||
"memory_usage": "Memory"
|
||||
"memory_usage": "Hukommelse"
|
||||
},
|
||||
"immich": {
|
||||
"users": "Users",
|
||||
"photos": "Photos",
|
||||
"videos": "Videos",
|
||||
"storage": "Storage"
|
||||
"users": "Brugere",
|
||||
"photos": "Billeder",
|
||||
"videos": "Videoer",
|
||||
"storage": "Lager"
|
||||
},
|
||||
"uptimekuma": {
|
||||
"up": "Sites Up",
|
||||
"down": "Sites Down",
|
||||
"uptime": "Uptime",
|
||||
"incident": "Incident",
|
||||
"up": "Sider Oppe",
|
||||
"down": "Sider Nede",
|
||||
"uptime": "Oppetid",
|
||||
"incident": "Hændelse",
|
||||
"m": "m"
|
||||
},
|
||||
"komga": {
|
||||
"libraries": "Libraries",
|
||||
"series": "Series",
|
||||
"books": "Books"
|
||||
"libraries": "Biblioteker",
|
||||
"series": "Serier",
|
||||
"books": "Bøger"
|
||||
},
|
||||
"mylar": {
|
||||
"series": "Series",
|
||||
"issues": "Issues",
|
||||
"wanted": "Wanted"
|
||||
"series": "Serier",
|
||||
"issues": "Problemer",
|
||||
"wanted": "Ønskede"
|
||||
},
|
||||
"photoprism": {
|
||||
"albums": "Albums",
|
||||
"photos": "Photos",
|
||||
"videos": "Videos",
|
||||
"people": "People"
|
||||
"photos": "Billeder",
|
||||
"videos": "Videoer",
|
||||
"people": "Mennesker"
|
||||
},
|
||||
"diskstation": {
|
||||
"days": "Days",
|
||||
"uptime": "Uptime",
|
||||
"volumeAvailable": "Available"
|
||||
"days": "Dage",
|
||||
"uptime": "Oppetid",
|
||||
"volumeAvailable": "Tilgængelig"
|
||||
},
|
||||
"fileflows": {
|
||||
"queue": "Queue",
|
||||
"processing": "Processing",
|
||||
"processed": "Processed",
|
||||
"time": "Time"
|
||||
"queue": "Kø",
|
||||
"processing": "Behandler",
|
||||
"processed": "Behandlet",
|
||||
"time": "Tid"
|
||||
},
|
||||
"grafana": {
|
||||
"totalalerts": "Total Alerts",
|
||||
"totalalerts": "Totale Advarsler",
|
||||
"dashboards": "Dashboards",
|
||||
"datasources": "Data Sources",
|
||||
"alertstriggered": "Alerts Triggered"
|
||||
"datasources": "Data Kilder",
|
||||
"alertstriggered": "Advarsler Udløst"
|
||||
},
|
||||
"nextcloud": {
|
||||
"memoryusage": "Memory Usage",
|
||||
"cpuload": "Cpu Load",
|
||||
"freespace": "Free Space",
|
||||
"activeusers": "Active Users",
|
||||
"numfiles": "Files",
|
||||
"numshares": "Shared Items"
|
||||
"memoryusage": "Hukommelse Forbrug",
|
||||
"cpuload": "Cpu Belastning",
|
||||
"freespace": "Ledig Plads",
|
||||
"activeusers": "Aktive Brugere",
|
||||
"numfiles": "Filer",
|
||||
"numshares": "Delte Genstande"
|
||||
},
|
||||
"kopia": {
|
||||
"status": "Status",
|
||||
"size": "Size",
|
||||
"lastrun": "Last Run",
|
||||
"nextrun": "Next Run",
|
||||
"failed": "Failed"
|
||||
"size": "Størrelse",
|
||||
"lastrun": "Sidst Kørt",
|
||||
"nextrun": "Næste Kørsel",
|
||||
"failed": "Mislykket"
|
||||
},
|
||||
"unmanic": {
|
||||
"active_workers": "Active Workers",
|
||||
"total_workers": "Total Workers",
|
||||
"records_total": "Queue Length"
|
||||
"active_workers": "Aktive Arbejdere",
|
||||
"total_workers": "Totale Arbejdere",
|
||||
"records_total": "Kø Længde"
|
||||
},
|
||||
"healthchecks": {
|
||||
"new": "New",
|
||||
"new": "Ny",
|
||||
"up": "Online",
|
||||
"grace": "In Grace Period",
|
||||
"down": "Offline",
|
||||
"paused": "Paused",
|
||||
"paused": "Pause",
|
||||
"status": "Status",
|
||||
"last_ping": "Last Ping",
|
||||
"never": "No pings yet"
|
||||
"last_ping": "Sidste Ping",
|
||||
"never": "Ingen Pings Endnu"
|
||||
},
|
||||
"pterodactyl": {
|
||||
"servers": "Servers",
|
||||
"nodes": "Nodes"
|
||||
"servers": "Servere",
|
||||
"nodes": "Noder"
|
||||
},
|
||||
"prometheus": {
|
||||
"targets_up": "Targets Up",
|
||||
"targets_down": "Targets Down",
|
||||
"targets_total": "Total Targets"
|
||||
"targets_up": "Mål Oppe",
|
||||
"targets_down": "Mål Nede",
|
||||
"targets_total": "Totale Mål"
|
||||
},
|
||||
"minecraft": {
|
||||
"players": "Players",
|
||||
"players": "Afspillere",
|
||||
"version": "Version",
|
||||
"status": "Status",
|
||||
"up": "Online",
|
||||
"down": "Offline"
|
||||
},
|
||||
"ghostfolio": {
|
||||
"gross_percent_today": "Today",
|
||||
"gross_percent_1y": "One year",
|
||||
"gross_percent_max": "All time"
|
||||
"gross_percent_today": "I Dag",
|
||||
"gross_percent_1y": "Et År",
|
||||
"gross_percent_max": "Altid"
|
||||
},
|
||||
"audiobookshelf": {
|
||||
"booksDuration": "Duration",
|
||||
"booksDuration": "Varighed",
|
||||
"podcasts": "Podcasts",
|
||||
"books": "Books",
|
||||
"podcastsDuration": "Duration"
|
||||
"books": "Bøger",
|
||||
"podcastsDuration": "Varighed"
|
||||
},
|
||||
"homeassistant": {
|
||||
"people_home": "People Home",
|
||||
"lights_on": "Lights On",
|
||||
"switches_on": "Switches On"
|
||||
"people_home": "Personer Hjemme",
|
||||
"lights_on": "Lys Tændt",
|
||||
"switches_on": "Kontakter Tændt"
|
||||
},
|
||||
"freshrss": {
|
||||
"subscriptions": "Subscriptions",
|
||||
"unread": "Unread"
|
||||
"subscriptions": "Abonnementer",
|
||||
"unread": "Ulæst"
|
||||
},
|
||||
"channelsdvrserver": {
|
||||
"shows": "Shows",
|
||||
"recordings": "Recordings",
|
||||
"scheduled": "Scheduled",
|
||||
"recordings": "Optagelser",
|
||||
"scheduled": "Planlagt",
|
||||
"passes": "Passes"
|
||||
},
|
||||
"whatsupdocker": {
|
||||
"monitoring": "Monitoring",
|
||||
"updates": "Updates"
|
||||
"monitoring": "Overvåger",
|
||||
"updates": "Opdateringer"
|
||||
},
|
||||
"tailscale": {
|
||||
"address": "Address",
|
||||
"expires": "Expires",
|
||||
"now": "Now",
|
||||
"address": "Adresse",
|
||||
"expires": "Udløber",
|
||||
"now": "Nu",
|
||||
"years": "{{number}}y",
|
||||
"weeks": "{{number}}w",
|
||||
"days": "{{number}}d",
|
||||
"hours": "{{number}}h",
|
||||
"minutes": "{{number}}m",
|
||||
"seconds": "{{number}}s",
|
||||
"never": "Never",
|
||||
"last_seen": "Last Seen",
|
||||
"ago": "{{value}} Ago"
|
||||
"never": "Aldrig",
|
||||
"last_seen": "Sidst Set",
|
||||
"ago": "{{value}} Siden"
|
||||
},
|
||||
"qnap": {
|
||||
"cpuUsage": "CPU Usage",
|
||||
"memUsage": "MEM Usage",
|
||||
"cpuUsage": "CPU Forbrug",
|
||||
"memUsage": "MEM Forbrug",
|
||||
"systemTempC": "System Temp",
|
||||
"poolUsage": "Pool Usage",
|
||||
"volumeUsage": "Volume Usage",
|
||||
"invalid": "Invalid"
|
||||
"poolUsage": "Pool Forbrug",
|
||||
"volumeUsage": "Volume Forbrug",
|
||||
"invalid": "Ugyldig"
|
||||
},
|
||||
"pfsense": {
|
||||
"load": "Load Avg",
|
||||
"memory": "Mem Usage",
|
||||
"load": "Belastning Gns",
|
||||
"memory": "Hukommelse Forbrug",
|
||||
"wanStatus": "WAN Status",
|
||||
"up": "Up",
|
||||
"down": "Down",
|
||||
"up": "Op",
|
||||
"down": "Ned",
|
||||
"temp": "Temp",
|
||||
"disk": "Disk Usage",
|
||||
"disk": "Disk Forbrug",
|
||||
"wanIP": "WAN IP"
|
||||
},
|
||||
"caddy": {
|
||||
"upstreams": "Upstreams",
|
||||
"requests": "Current requests",
|
||||
"requests_failed": "Failed requests"
|
||||
"requests": "Aktuelle anmodninger",
|
||||
"requests_failed": "Mislykkede anmodninger"
|
||||
},
|
||||
"evcc": {
|
||||
"pv_power": "Production",
|
||||
"battery_soc": "Battery",
|
||||
"grid_power": "Grid",
|
||||
"home_power": "Consumption",
|
||||
"charge_power": "Charger",
|
||||
"pv_power": "Produktion",
|
||||
"battery_soc": "Batteri",
|
||||
"grid_power": "Gitter",
|
||||
"home_power": "Forbrug",
|
||||
"charge_power": "Oplader",
|
||||
"watt_hour": "Wh"
|
||||
},
|
||||
"pialert": {
|
||||
"total": "Total",
|
||||
"connected": "Connected",
|
||||
"new_devices": "New Devices",
|
||||
"down_alerts": "Down Alerts"
|
||||
"connected": "Forbundet",
|
||||
"new_devices": "Nye Enheder",
|
||||
"down_alerts": "Nedadvarsler"
|
||||
},
|
||||
"jdownloader": {
|
||||
"downloadSpeed": "Download Speed",
|
||||
"downloadCount": "Queue Count",
|
||||
"downloadBytesRemaining": "Remaining",
|
||||
"downloadTotalBytes": "Size"
|
||||
"downloadSpeed": "Hastighed",
|
||||
"downloadCount": "Kø",
|
||||
"downloadBytesRemaining": "Tilbage",
|
||||
"downloadTotalBytes": "Størrelse"
|
||||
},
|
||||
"kavita": {
|
||||
"seriesCount": "Series",
|
||||
"totalFiles": "Files"
|
||||
"seriesCount": "Serier",
|
||||
"totalFiles": "Filer"
|
||||
},
|
||||
"gamedig": {
|
||||
"name": "Name",
|
||||
"map": "Map",
|
||||
"currentPlayers": "Current players",
|
||||
"players": "Players",
|
||||
"maxPlayers": "Max players",
|
||||
"name": "Navn",
|
||||
"map": "Kort",
|
||||
"currentPlayers": "Nuværende Spillere",
|
||||
"players": "Spillere",
|
||||
"maxPlayers": "Maks spillere",
|
||||
"bots": "Bots",
|
||||
"ping": "Ping",
|
||||
"status": "Status",
|
||||
|
@ -675,30 +675,62 @@
|
|||
"offline": "Offline"
|
||||
},
|
||||
"azuredevops": {
|
||||
"result": "Result",
|
||||
"result": "Resultat",
|
||||
"status": "Status",
|
||||
"buildId": "Build ID",
|
||||
"succeeded": "Succeeded",
|
||||
"notStarted": "Not Started",
|
||||
"failed": "Failed",
|
||||
"canceled": "Canceled",
|
||||
"inProgress": "In Progress",
|
||||
"succeeded": "Lykkedes",
|
||||
"notStarted": "Ikke Startet",
|
||||
"failed": "Mislykket",
|
||||
"canceled": "Annulleret",
|
||||
"inProgress": "I Gang",
|
||||
"totalPrs": "Total PRs",
|
||||
"myPrs": "My PRs",
|
||||
"approved": "Approved"
|
||||
"myPrs": "Mine PRs",
|
||||
"approved": "Godkendt"
|
||||
},
|
||||
"urbackup": {
|
||||
"ok": "Ok",
|
||||
"errored": "Errors",
|
||||
"noRecent": "Out of Date",
|
||||
"totalUsed": "Used Storage"
|
||||
"errored": "Fejl",
|
||||
"noRecent": "Uddateret",
|
||||
"totalUsed": "Brugt Lager"
|
||||
},
|
||||
"openmediavault": {
|
||||
"downloading": "Downloading",
|
||||
"downloading": "Downloader",
|
||||
"total": "Total",
|
||||
"running": "Running",
|
||||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
"running": "Kører",
|
||||
"stopped": "Stoppet",
|
||||
"passed": "Gennemført",
|
||||
"failed": "Mislykket"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Opskrifter",
|
||||
"users": "Brugere",
|
||||
"categories": "Kategorier",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Serier",
|
||||
"archives": "Arkiver",
|
||||
"chapters": "Kapitler",
|
||||
"categories": "Kategorier"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Bøger",
|
||||
"authors": "Forfattere",
|
||||
"categories": "Kategorier",
|
||||
"series": "Serier"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -150,9 +150,9 @@
|
|||
},
|
||||
"flood": {
|
||||
"download": "Λήξη",
|
||||
"upload": "Φόρτωση",
|
||||
"leech": "Αφαίμαξη",
|
||||
"seed": "Σπείρε"
|
||||
"upload": "Μεταφόρτωση",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"changedetectionio": {
|
||||
"totalObserved": "Συνολικά παρατηρηθείσα",
|
||||
|
@ -212,8 +212,8 @@
|
|||
"unknown": "Άγνωστο"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Μεταφόρτωση",
|
||||
"upload": "Φόρτωση",
|
||||
"download": "Λήψη",
|
||||
"upload": "Μεταφόρτωση",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
|
@ -431,7 +431,7 @@
|
|||
},
|
||||
"pyload": {
|
||||
"speed": "Speed",
|
||||
"active": "Active",
|
||||
"active": "Ενεργό",
|
||||
"queue": "Queue",
|
||||
"total": "Total"
|
||||
},
|
||||
|
@ -589,7 +589,7 @@
|
|||
},
|
||||
"freshrss": {
|
||||
"subscriptions": "Συνδρομές",
|
||||
"unread": "Αδιάβαστο"
|
||||
"unread": "Μη Διαβασμένο"
|
||||
},
|
||||
"channelsdvrserver": {
|
||||
"shows": "Εκπομπές",
|
||||
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"up": "Up",
|
||||
"unknown": "Unknown",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -579,6 +579,12 @@
|
|||
"incident": "Incident",
|
||||
"m": "m"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"komga": {
|
||||
"libraries": "Libraries",
|
||||
"series": "Series",
|
||||
|
@ -661,6 +667,12 @@
|
|||
"monitoring": "Monitoring",
|
||||
"updates": "Updates"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"jdownloader": {
|
||||
"downloadCount": "Queue",
|
||||
"downloadBytesRemaining": "Remaining",
|
||||
|
@ -702,6 +714,12 @@
|
|||
"noRecent": "Out of Date",
|
||||
"totalUsed": "Used Storage"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"openmediavault": {
|
||||
"downloading": "Downloading",
|
||||
"total": "Total",
|
||||
|
@ -709,5 +727,19 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"categories": "Categories",
|
||||
"authors": "Authors",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"downDuration": "Downtime Duration",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
"bitrate": "Tasa de bits",
|
||||
"no_active": "Sin transmisiones activas",
|
||||
"movies": "Películas",
|
||||
"series": "Serie",
|
||||
"series": "Series",
|
||||
"episodes": "Episodios",
|
||||
"songs": "Canciones"
|
||||
},
|
||||
|
@ -234,7 +234,7 @@
|
|||
"plex": {
|
||||
"streams": "Transmisiones activas",
|
||||
"movies": "Películas",
|
||||
"tv": "Series",
|
||||
"tv": "Programas de televisión",
|
||||
"albums": "Álbumes"
|
||||
},
|
||||
"glances": {
|
||||
|
@ -461,7 +461,7 @@
|
|||
"medusa": {
|
||||
"wanted": "Querido",
|
||||
"queued": "A la espera",
|
||||
"series": "Serie"
|
||||
"series": "Series"
|
||||
},
|
||||
"octoprint": {
|
||||
"temp_bed": "Temperatura de la plataforma",
|
||||
|
@ -659,7 +659,7 @@
|
|||
"downloadTotalBytes": "Tamaño"
|
||||
},
|
||||
"kavita": {
|
||||
"seriesCount": "Serie",
|
||||
"seriesCount": "Series",
|
||||
"totalFiles": "Archivos"
|
||||
},
|
||||
"gamedig": {
|
||||
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Detenido",
|
||||
"passed": "Aprobado",
|
||||
"failed": "Fallido"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recetas",
|
||||
"users": "Usuarios",
|
||||
"categories": "Categorías",
|
||||
"tags": "Etiquetas"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archivos",
|
||||
"chapters": "Capítulos",
|
||||
"categories": "Categorías"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Libros",
|
||||
"authors": "Autores",
|
||||
"categories": "Categorías",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Estado",
|
||||
"uptime": "Tiempo de actividad",
|
||||
"lastDown": "Último periodo de inactividad",
|
||||
"downDuration": "Tiempo de inactividad",
|
||||
"sitesUp": "Páginas web con conexión",
|
||||
"sitesDown": "Páginas web caídas",
|
||||
"paused": "Pausado",
|
||||
"notyetchecked": "Aún no verificado",
|
||||
"up": "Arriba",
|
||||
"seemsdown": "Parece caída",
|
||||
"down": "Abajo",
|
||||
"unknown": "Desconocido"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"uptime": "Uptime",
|
||||
"status": "Status",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Arrêté",
|
||||
"passed": "Réussi",
|
||||
"failed": "Échoué"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recettes",
|
||||
"users": "Utilisateurs",
|
||||
"categories": "Catégories",
|
||||
"tags": "Étiquettes"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Séries",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapitres",
|
||||
"categories": "Catégories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"series": "Séries",
|
||||
"books": "Ebooks",
|
||||
"authors": "Auteurs",
|
||||
"categories": "Catégories"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Statut",
|
||||
"uptime": "Disponibilité",
|
||||
"lastDown": "Dernière interruption",
|
||||
"downDuration": "Durée d'interruption",
|
||||
"sitesUp": "Sites en ligne",
|
||||
"sitesDown": "Sites hors ligne",
|
||||
"paused": "En pause",
|
||||
"notyetchecked": "Non vérifié",
|
||||
"up": "En ligne",
|
||||
"seemsdown": "Semble hors ligne",
|
||||
"down": "Hors ligne",
|
||||
"unknown": "Inconnu"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories",
|
||||
"series": "Series",
|
||||
"archives": "Archives"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"categories": "Categories",
|
||||
"series": "Series",
|
||||
"authors": "Authors"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"series": "Series",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
"transcoding": "Transcodifica",
|
||||
"bitrate": "Bitrate",
|
||||
"no_active": "Nessuno Stream Attivo",
|
||||
"plex_connection_error": "Check Plex Connection"
|
||||
"plex_connection_error": "Controllo Connessione a Plex"
|
||||
},
|
||||
"speedtest": {
|
||||
"upload": "Upload",
|
||||
|
@ -116,7 +116,7 @@
|
|||
"blocked_percent": "Bloccato %"
|
||||
},
|
||||
"npm": {
|
||||
"enabled": "Attivi",
|
||||
"enabled": "Abilitato",
|
||||
"disabled": "Disabilitati",
|
||||
"total": "Totali"
|
||||
},
|
||||
|
@ -156,7 +156,7 @@
|
|||
},
|
||||
"prowlarr": {
|
||||
"enableIndexers": "Indicizzatori",
|
||||
"numberOfGrabs": "Grabs",
|
||||
"numberOfGrabs": "Grab",
|
||||
"numberOfQueries": "Interrogazioni",
|
||||
"numberOfFailGrabs": "Grabs Falliti",
|
||||
"numberOfFailQueries": "Queries Fallite"
|
||||
|
@ -164,12 +164,12 @@
|
|||
"transmission": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"leech": "In scaricamento",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"jackett": {
|
||||
"configured": "Configurato",
|
||||
"errored": "Errore"
|
||||
"errored": "In errore"
|
||||
},
|
||||
"bazarr": {
|
||||
"missingEpisodes": "Episodi Mancanti",
|
||||
|
@ -188,7 +188,7 @@
|
|||
},
|
||||
"qbittorrent": {
|
||||
"download": "Download",
|
||||
"leech": "Leech",
|
||||
"leech": "In scaricamento",
|
||||
"upload": "Upload",
|
||||
"seed": "Seed"
|
||||
},
|
||||
|
@ -242,18 +242,18 @@
|
|||
"wait": "Attendere prego",
|
||||
"temp": "TEMP",
|
||||
"uptime": "UP",
|
||||
"days": "d",
|
||||
"hours": "h",
|
||||
"days": "g",
|
||||
"hours": "o",
|
||||
"load": "Carico",
|
||||
"warn": "Avviso",
|
||||
"total": "Totale",
|
||||
"free": "Libero",
|
||||
"used": "Usato",
|
||||
"crit": "Crit",
|
||||
"read": "Read",
|
||||
"write": "Write",
|
||||
"crit": "Critico",
|
||||
"read": "Lettura",
|
||||
"write": "Scrittura",
|
||||
"gpu": "GPU",
|
||||
"mem": "Mem",
|
||||
"mem": "Mem.",
|
||||
"swap": "Swap"
|
||||
},
|
||||
"changedetectionio": {
|
||||
|
@ -331,7 +331,7 @@
|
|||
"updates": "Aggiornamenti",
|
||||
"update_available": "Aggiornamento Disponibile",
|
||||
"up_to_date": "Aggiornato",
|
||||
"child_bridges": "Child Bridges",
|
||||
"child_bridges": "Bridge Figli",
|
||||
"child_bridges_status": "{{ok}}/{{total}}",
|
||||
"up": "Up",
|
||||
"pending": "In attesa",
|
||||
|
@ -373,7 +373,7 @@
|
|||
"gluetun": {
|
||||
"public_ip": "IP pubblico",
|
||||
"region": "Località",
|
||||
"country": "Stato"
|
||||
"country": "Paese"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Canali",
|
||||
|
@ -395,13 +395,13 @@
|
|||
"deluge": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"leech": "In scaricamento",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"leech": "In scaricamento",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"tdarr": {
|
||||
|
@ -432,7 +432,7 @@
|
|||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"leech": "In scaricamento",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
|
@ -465,8 +465,8 @@
|
|||
},
|
||||
"octoprint": {
|
||||
"printer_state": "Stato",
|
||||
"temp_tool": "Tool temp",
|
||||
"temp_bed": "Bed temp",
|
||||
"temp_tool": "Temp. utensile",
|
||||
"temp_bed": "Temp. letto",
|
||||
"job_completion": "Completamento"
|
||||
},
|
||||
"cloudflared": {
|
||||
|
@ -474,7 +474,7 @@
|
|||
"status": "Stato"
|
||||
},
|
||||
"proxmoxbackupserver": {
|
||||
"datastore_usage": "Datastore",
|
||||
"datastore_usage": "Archivio dati",
|
||||
"failed_tasks_24h": "Attività Non Riuscite 24h",
|
||||
"cpu_usage": "CPU",
|
||||
"memory_usage": "Memoria"
|
||||
|
@ -483,12 +483,12 @@
|
|||
"users": "Utenti",
|
||||
"photos": "Foto",
|
||||
"videos": "Video",
|
||||
"storage": "Memoria"
|
||||
"storage": "Archiviazione"
|
||||
},
|
||||
"uptimekuma": {
|
||||
"up": "Siti On",
|
||||
"down": "Siti Down",
|
||||
"uptime": "Uptime",
|
||||
"uptime": "Operatività",
|
||||
"incident": "Incidente",
|
||||
"m": "m"
|
||||
},
|
||||
|
@ -510,7 +510,7 @@
|
|||
},
|
||||
"diskstation": {
|
||||
"days": "Giorni",
|
||||
"uptime": "Uptime",
|
||||
"uptime": "Periodo Attività",
|
||||
"volumeAvailable": "Disponibile"
|
||||
},
|
||||
"fileflows": {
|
||||
|
@ -520,7 +520,7 @@
|
|||
"time": "Tempo"
|
||||
},
|
||||
"grafana": {
|
||||
"dashboards": "Dashboards",
|
||||
"dashboards": "Dashboard",
|
||||
"datasources": "Origine dei Dati",
|
||||
"totalalerts": "Avvisi Totali",
|
||||
"alertstriggered": "Avvisi Attivati"
|
||||
|
@ -560,8 +560,8 @@
|
|||
"nodes": "Nodi"
|
||||
},
|
||||
"prometheus": {
|
||||
"targets_up": "Targets Up",
|
||||
"targets_down": "Targets Down",
|
||||
"targets_up": "Target Attivi",
|
||||
"targets_down": "Target Non Attivi",
|
||||
"targets_total": "Targets Totali"
|
||||
},
|
||||
"minecraft": {
|
||||
|
@ -663,42 +663,74 @@
|
|||
"totalFiles": "File"
|
||||
},
|
||||
"gamedig": {
|
||||
"name": "Name",
|
||||
"map": "Map",
|
||||
"currentPlayers": "Current players",
|
||||
"players": "Players",
|
||||
"maxPlayers": "Max players",
|
||||
"bots": "Bots",
|
||||
"name": "Nome",
|
||||
"map": "Mappa",
|
||||
"currentPlayers": "Giocatori attuali",
|
||||
"players": "Giocatori",
|
||||
"maxPlayers": "Giocatori max",
|
||||
"bots": "Bot",
|
||||
"ping": "Ping",
|
||||
"status": "Status",
|
||||
"status": "Stato",
|
||||
"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"
|
||||
"result": "Risultato",
|
||||
"myPrs": "Miei PR",
|
||||
"approved": "Approvato",
|
||||
"status": "Stato",
|
||||
"buildId": "ID Build",
|
||||
"succeeded": "Riuscito",
|
||||
"notStarted": "Non Avviato",
|
||||
"failed": "Fallito",
|
||||
"canceled": "Cancellato",
|
||||
"inProgress": "In corso",
|
||||
"totalPrs": "PR Totali"
|
||||
},
|
||||
"urbackup": {
|
||||
"ok": "Ok",
|
||||
"errored": "Errors",
|
||||
"noRecent": "Out of Date",
|
||||
"totalUsed": "Used Storage"
|
||||
"errored": "Errori",
|
||||
"noRecent": "Obsoleto",
|
||||
"totalUsed": "Spazio usato"
|
||||
},
|
||||
"openmediavault": {
|
||||
"total": "Total",
|
||||
"running": "Running",
|
||||
"downloading": "Downloading",
|
||||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
"total": "Totale",
|
||||
"running": "In funzione",
|
||||
"downloading": "Download in corso",
|
||||
"stopped": "Fermati",
|
||||
"passed": "Riusciti",
|
||||
"failed": "Falliti"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Ricette",
|
||||
"users": "Utenti",
|
||||
"categories": "Categorie",
|
||||
"tags": "Tag"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Serie",
|
||||
"archives": "Archivi",
|
||||
"chapters": "Capitoli",
|
||||
"categories": "Categorie"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Libri",
|
||||
"authors": "Autori",
|
||||
"categories": "Categorie",
|
||||
"series": "Serie"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Stato",
|
||||
"uptime": "Tempo di attività",
|
||||
"lastDown": "Ultimo periodo di inattività",
|
||||
"downDuration": "Durata inattività",
|
||||
"sitesUp": "Siti attivi",
|
||||
"sitesDown": "Siti non attivi",
|
||||
"paused": "In pausa",
|
||||
"notyetchecked": "Non ancora controllati",
|
||||
"up": "Attivi",
|
||||
"seemsdown": "Sembrano non attivi",
|
||||
"down": "Non attivi",
|
||||
"unknown": "Sconosciuto"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
"strelaysrv": {
|
||||
"numActiveSessions": "セッション",
|
||||
"numConnections": "コネクション",
|
||||
"dataRelayed": "Relayed",
|
||||
"dataRelayed": "中継",
|
||||
"transferRate": "レート"
|
||||
},
|
||||
"glances": {
|
||||
|
@ -21,17 +21,17 @@
|
|||
"uptime": "UP",
|
||||
"days": "日",
|
||||
"hours": "時間",
|
||||
"load": "Load",
|
||||
"warn": "Warn",
|
||||
"total": "Total",
|
||||
"free": "Free",
|
||||
"used": "Used",
|
||||
"load": "ロード",
|
||||
"warn": "警告",
|
||||
"total": "トータル",
|
||||
"free": "空き",
|
||||
"used": "使用中",
|
||||
"crit": "Crit",
|
||||
"read": "Read",
|
||||
"write": "Write",
|
||||
"read": "読み込み",
|
||||
"write": "書き込み",
|
||||
"gpu": "GPU",
|
||||
"mem": "Mem",
|
||||
"swap": "Swap"
|
||||
"mem": "メモリ",
|
||||
"swap": "スワップ"
|
||||
},
|
||||
"autobrr": {
|
||||
"filters": "フィルター",
|
||||
|
@ -131,7 +131,7 @@
|
|||
"flood": {
|
||||
"download": "ダウンロード",
|
||||
"upload": "アップロード",
|
||||
"leech": "Leech",
|
||||
"leech": "リーチ",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"changedetectionio": {
|
||||
|
@ -143,7 +143,7 @@
|
|||
"transcoding": "変換中",
|
||||
"bitrate": "ビットレート",
|
||||
"no_active": "アクティブストリームなし",
|
||||
"plex_connection_error": "Check Plex Connection"
|
||||
"plex_connection_error": "Plex接続の確認"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "接続されたAP",
|
||||
|
@ -176,7 +176,7 @@
|
|||
"transmission": {
|
||||
"download": "ダウンロード",
|
||||
"upload": "アップロード",
|
||||
"leech": "Leech",
|
||||
"leech": "リーチ",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"qbittorrent": {
|
||||
|
@ -201,21 +201,21 @@
|
|||
"wanted": "募集中",
|
||||
"queued": "待機中",
|
||||
"series": "シリーズ",
|
||||
"queue": "Queue",
|
||||
"unknown": "Unknown"
|
||||
"queue": "キュー",
|
||||
"unknown": "不明"
|
||||
},
|
||||
"radarr": {
|
||||
"wanted": "募集中",
|
||||
"missing": "不明",
|
||||
"queued": "キュー",
|
||||
"movies": "映画",
|
||||
"queue": "Queue",
|
||||
"queue": "キュー",
|
||||
"unknown": "Unknown"
|
||||
},
|
||||
"lidarr": {
|
||||
"wanted": "募集中",
|
||||
"queued": "キュー",
|
||||
"artists": "Artists"
|
||||
"artists": "アーティスト"
|
||||
},
|
||||
"readarr": {
|
||||
"wanted": "募集中",
|
||||
|
@ -224,7 +224,7 @@
|
|||
},
|
||||
"bazarr": {
|
||||
"missingEpisodes": "欠番エピソード",
|
||||
"missingMovies": "不明・映画"
|
||||
"missingMovies": "行方不明の映画"
|
||||
},
|
||||
"ombi": {
|
||||
"pending": "保留中",
|
||||
|
@ -292,7 +292,7 @@
|
|||
"numberOfGrabs": "Grabs",
|
||||
"numberOfQueries": "クエリ",
|
||||
"numberOfFailGrabs": "Fail Grabs",
|
||||
"numberOfFailQueries": "Fail Queries"
|
||||
"numberOfFailQueries": "失敗クエリー"
|
||||
},
|
||||
"jackett": {
|
||||
"configured": "設定済",
|
||||
|
@ -304,8 +304,8 @@
|
|||
"domain_count": "ドメイン"
|
||||
},
|
||||
"miniflux": {
|
||||
"read": "Read",
|
||||
"unread": "Unread"
|
||||
"read": "既読",
|
||||
"unread": "未読"
|
||||
},
|
||||
"authentik": {
|
||||
"users": "ユーザー",
|
||||
|
@ -461,7 +461,7 @@
|
|||
"medusa": {
|
||||
"wanted": "Wanted",
|
||||
"queued": "Queued",
|
||||
"series": "Series"
|
||||
"series": "シリーズ"
|
||||
},
|
||||
"octoprint": {
|
||||
"temp_bed": "ベッド温度",
|
||||
|
@ -474,7 +474,7 @@
|
|||
"status": "状態"
|
||||
},
|
||||
"proxmoxbackupserver": {
|
||||
"datastore_usage": "Datastore",
|
||||
"datastore_usage": "データストア",
|
||||
"failed_tasks_24h": "失敗タスク(24h)",
|
||||
"cpu_usage": "CPU",
|
||||
"memory_usage": "メモリ"
|
||||
|
@ -499,7 +499,7 @@
|
|||
},
|
||||
"mylar": {
|
||||
"series": "シリーズ",
|
||||
"issues": "Issues",
|
||||
"issues": "課題",
|
||||
"wanted": "Wanted"
|
||||
},
|
||||
"photoprism": {
|
||||
|
@ -546,7 +546,7 @@
|
|||
"records_total": "キューの長さ"
|
||||
},
|
||||
"healthchecks": {
|
||||
"never": "まだPingはありません",
|
||||
"never": "Pingしていません",
|
||||
"new": "New",
|
||||
"up": "オンライン",
|
||||
"grace": "猶予期間中",
|
||||
|
@ -595,10 +595,10 @@
|
|||
"shows": "ショー",
|
||||
"recordings": "レコーディング",
|
||||
"scheduled": "予定済",
|
||||
"passes": "Passes"
|
||||
"passes": "パス"
|
||||
},
|
||||
"whatsupdocker": {
|
||||
"monitoring": "Monitoring",
|
||||
"monitoring": "モニタリング",
|
||||
"updates": "アップデート"
|
||||
},
|
||||
"tailscale": {
|
||||
|
@ -621,22 +621,22 @@
|
|||
"systemTempC": "システム温度",
|
||||
"poolUsage": "プール使用量",
|
||||
"volumeUsage": "ボリューム使用量",
|
||||
"invalid": "Invalid"
|
||||
"invalid": "無効"
|
||||
},
|
||||
"pfsense": {
|
||||
"up": "Up",
|
||||
"load": "Load Avg",
|
||||
"memory": "Mem Usage",
|
||||
"wanStatus": "WAN Status",
|
||||
"down": "Down",
|
||||
"temp": "Temp",
|
||||
"disk": "Disk Usage",
|
||||
"up": "アップ",
|
||||
"load": "読み込み平均",
|
||||
"memory": "メモリ使用量",
|
||||
"wanStatus": "WANステータス",
|
||||
"down": "ダウン",
|
||||
"temp": "温度",
|
||||
"disk": "ディスク使用量",
|
||||
"wanIP": "WAN IP"
|
||||
},
|
||||
"caddy": {
|
||||
"upstreams": "Upstreams",
|
||||
"requests": "Current requests",
|
||||
"requests_failed": "Failed requests"
|
||||
"upstreams": "アップストリーム",
|
||||
"requests": "現在のリクエスト",
|
||||
"requests_failed": "失敗したリクエスト"
|
||||
},
|
||||
"evcc": {
|
||||
"watt_hour": "Wh",
|
||||
|
@ -647,58 +647,90 @@
|
|||
"charge_power": "チャージャー"
|
||||
},
|
||||
"pialert": {
|
||||
"total": "Total",
|
||||
"connected": "Connected",
|
||||
"new_devices": "New Devices",
|
||||
"down_alerts": "Down Alerts"
|
||||
"total": "トータル",
|
||||
"connected": "接続済み",
|
||||
"new_devices": "新しいデバイス",
|
||||
"down_alerts": "ダウンアラート"
|
||||
},
|
||||
"jdownloader": {
|
||||
"downloadCount": "Queue Count",
|
||||
"downloadSpeed": "Download Speed",
|
||||
"downloadBytesRemaining": "Remaining",
|
||||
"downloadTotalBytes": "Size"
|
||||
"downloadCount": "キュー",
|
||||
"downloadSpeed": "スピード",
|
||||
"downloadBytesRemaining": "残り",
|
||||
"downloadTotalBytes": "サイズ"
|
||||
},
|
||||
"kavita": {
|
||||
"seriesCount": "Series",
|
||||
"totalFiles": "Files"
|
||||
"seriesCount": "シリーズ",
|
||||
"totalFiles": "ファイル"
|
||||
},
|
||||
"gamedig": {
|
||||
"name": "Name",
|
||||
"map": "Map",
|
||||
"currentPlayers": "Current players",
|
||||
"players": "Players",
|
||||
"maxPlayers": "Max players",
|
||||
"bots": "Bots",
|
||||
"name": "名前",
|
||||
"map": "マップ",
|
||||
"currentPlayers": "現在のプレーヤー",
|
||||
"players": "プレーヤー",
|
||||
"maxPlayers": "最大プレーヤー",
|
||||
"bots": "ボット",
|
||||
"ping": "Ping",
|
||||
"status": "Status",
|
||||
"online": "Online",
|
||||
"offline": "Offline"
|
||||
"status": "ステータス",
|
||||
"online": "オンライン",
|
||||
"offline": "オフライン"
|
||||
},
|
||||
"azuredevops": {
|
||||
"result": "Result",
|
||||
"status": "Status",
|
||||
"buildId": "Build ID",
|
||||
"succeeded": "Succeeded",
|
||||
"result": "結果",
|
||||
"status": "ステータス",
|
||||
"buildId": "ビルドID",
|
||||
"succeeded": "成功",
|
||||
"notStarted": "Not Started",
|
||||
"failed": "Failed",
|
||||
"canceled": "Canceled",
|
||||
"inProgress": "In Progress",
|
||||
"totalPrs": "Total PRs",
|
||||
"myPrs": "My PRs",
|
||||
"approved": "Approved"
|
||||
"failed": "失敗",
|
||||
"canceled": "キャンセル",
|
||||
"inProgress": "進行中",
|
||||
"totalPrs": "合計PR数",
|
||||
"myPrs": "私のPR",
|
||||
"approved": "承認"
|
||||
},
|
||||
"urbackup": {
|
||||
"ok": "Ok",
|
||||
"errored": "Errors",
|
||||
"noRecent": "Out of Date",
|
||||
"totalUsed": "Used Storage"
|
||||
"errored": "エラー",
|
||||
"noRecent": "期限切れ",
|
||||
"totalUsed": "使用済みストレージ"
|
||||
},
|
||||
"openmediavault": {
|
||||
"downloading": "Downloading",
|
||||
"total": "Total",
|
||||
"running": "Running",
|
||||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
"downloading": "ダウンロード中",
|
||||
"total": "トータル",
|
||||
"running": "実行中",
|
||||
"stopped": "停止中",
|
||||
"passed": "合格",
|
||||
"failed": "不合格"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "レシピ",
|
||||
"users": "ユーザー",
|
||||
"categories": "カテゴリー",
|
||||
"tags": "タグ"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "シリーズ",
|
||||
"archives": "アーカイブ",
|
||||
"chapters": "チャプター",
|
||||
"categories": "カテゴリー"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "書籍",
|
||||
"authors": "著者",
|
||||
"categories": "カテゴリー",
|
||||
"series": "シリーズ"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories",
|
||||
"series": "Series",
|
||||
"archives": "Archives"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"chapters": "Chapters",
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"unknown": "Unknown",
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"sitesDown": "Sites Down",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"downloading": "Downloading",
|
||||
"total": "Total",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"uptime": "Uptime",
|
||||
"status": "Status",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -229,7 +229,7 @@
|
|||
"devices": "Apparaten",
|
||||
"lan_devices": "LAN Apparaten",
|
||||
"wlan_devices": "WLAN Apparaten",
|
||||
"empty_data": "Subsystem status unknown"
|
||||
"empty_data": "Subsystem status onbekend"
|
||||
},
|
||||
"plex": {
|
||||
"streams": "Actieve Streams",
|
||||
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"uptime": "Uptime",
|
||||
"status": "Status",
|
||||
"up": "Up",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -709,5 +709,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown",
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,12 +20,12 @@
|
|||
"mem": "MEM",
|
||||
"cpu": "CPU",
|
||||
"offline": "Offline",
|
||||
"error": "Error",
|
||||
"unknown": "Unknown",
|
||||
"running": "Running",
|
||||
"starting": "Starting",
|
||||
"error": "Eroare",
|
||||
"unknown": "Necunoscut",
|
||||
"running": "Rulează",
|
||||
"starting": "Începe",
|
||||
"unhealthy": "Unhealthy",
|
||||
"not_found": "Not Found",
|
||||
"not_found": "Negăsit",
|
||||
"exited": "Exited",
|
||||
"partial": "Partial",
|
||||
"healthy": "Healthy"
|
||||
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"failed": "Failed",
|
||||
"running": "Running",
|
||||
"stopped": "Stopped"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Серии",
|
||||
"archives": "Архивы",
|
||||
"chapters": "Главы",
|
||||
"categories": "Категории"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -169,7 +169,7 @@
|
|||
"bitrate": "Pasovna širina",
|
||||
"playing": "Predvaja",
|
||||
"no_active": "Ni aktivne vsebine",
|
||||
"plex_connection_error": "Check Plex Connection"
|
||||
"plex_connection_error": "Preveri Plex povezavo"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Prenos",
|
||||
|
@ -365,9 +365,9 @@
|
|||
"warn": "Opoz.",
|
||||
"total": "Skupaj",
|
||||
"used": "V uporabi",
|
||||
"crit": "Crit",
|
||||
"read": "Read",
|
||||
"write": "Write",
|
||||
"crit": "Krit.",
|
||||
"read": "Prebrano",
|
||||
"write": "Zapisano",
|
||||
"gpu": "GPU",
|
||||
"mem": "Mem",
|
||||
"swap": "Swap"
|
||||
|
@ -663,42 +663,74 @@
|
|||
"totalFiles": "Datoteke"
|
||||
},
|
||||
"gamedig": {
|
||||
"name": "Name",
|
||||
"map": "Map",
|
||||
"currentPlayers": "Current players",
|
||||
"players": "Players",
|
||||
"maxPlayers": "Max players",
|
||||
"bots": "Bots",
|
||||
"name": "Naziv",
|
||||
"map": "Zemljevid",
|
||||
"currentPlayers": "Igralcev",
|
||||
"players": "Igralci",
|
||||
"maxPlayers": "Maks igralcev",
|
||||
"bots": "Boti",
|
||||
"ping": "Ping",
|
||||
"status": "Status",
|
||||
"online": "Online",
|
||||
"offline": "Offline"
|
||||
"online": "Na spletu",
|
||||
"offline": "Nepovezano"
|
||||
},
|
||||
"azuredevops": {
|
||||
"result": "Result",
|
||||
"result": "Rezultati",
|
||||
"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"
|
||||
"buildId": "ID gradnje",
|
||||
"succeeded": "Uspešnih",
|
||||
"notStarted": "Ni zagnano",
|
||||
"failed": "Neuspešno",
|
||||
"canceled": "Preklicano",
|
||||
"inProgress": "V delu",
|
||||
"totalPrs": "Skupaj PR",
|
||||
"myPrs": "Moji PR",
|
||||
"approved": "Odobreno"
|
||||
},
|
||||
"urbackup": {
|
||||
"ok": "Ok",
|
||||
"errored": "Errors",
|
||||
"noRecent": "Out of Date",
|
||||
"totalUsed": "Used Storage"
|
||||
"ok": "V redu",
|
||||
"errored": "Napake",
|
||||
"noRecent": "Zastarano",
|
||||
"totalUsed": "Shramba v uporabi"
|
||||
},
|
||||
"openmediavault": {
|
||||
"downloading": "Downloading",
|
||||
"total": "Total",
|
||||
"running": "Running",
|
||||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
"downloading": "Prenašanje",
|
||||
"total": "Skupaj",
|
||||
"running": "V teku",
|
||||
"stopped": "Ustavljeno",
|
||||
"passed": "Opravljeno",
|
||||
"failed": "Neuspešno"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recepti",
|
||||
"users": "Uporabniki",
|
||||
"categories": "Kategorije",
|
||||
"tags": "Značke"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Serije",
|
||||
"archives": "Arhivi",
|
||||
"chapters": "Poglavja",
|
||||
"categories": "Kategorije"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Knjige",
|
||||
"authors": "Avtorji",
|
||||
"categories": "Kategorije",
|
||||
"series": "Serije"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"unknown": "Unknown",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"passed": "Passed",
|
||||
"failed": "Failed",
|
||||
"downloading": "Downloading"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"paused": "Paused",
|
||||
"sitesDown": "Sites Down",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"running": "Running",
|
||||
"stopped": "Stopped",
|
||||
"passed": "Passed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Серії",
|
||||
"archives": "Архіви",
|
||||
"chapters": "Глави",
|
||||
"categories": "Категорії"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"up": "Up",
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -659,8 +659,8 @@
|
|||
"downloadTotalBytes": "Size"
|
||||
},
|
||||
"kavita": {
|
||||
"seriesCount": "Series",
|
||||
"totalFiles": "Files"
|
||||
"seriesCount": "系列",
|
||||
"totalFiles": "文件"
|
||||
},
|
||||
"gamedig": {
|
||||
"name": "Name",
|
||||
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "书籍",
|
||||
"authors": "作者",
|
||||
"categories": "分类",
|
||||
"series": "丛书"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,5 +700,37 @@
|
|||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,44 +5,64 @@ import { MdKeyboardArrowDown } from "react-icons/md";
|
|||
|
||||
import ErrorBoundary from "components/errorboundry";
|
||||
import List from "components/bookmarks/list";
|
||||
import ResolvedIcon from "components/resolvedicon";
|
||||
|
||||
export default function BookmarksGroup({ group, disableCollapse }) {
|
||||
export default function BookmarksGroup({ bookmarks, layout, disableCollapse }) {
|
||||
const panel = useRef();
|
||||
return (
|
||||
<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>
|
||||
<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>
|
||||
<List bookmarks={group.bookmarks} />
|
||||
</ErrorBoundary>
|
||||
</Disclosure.Panel>
|
||||
</Transition>
|
||||
</>
|
||||
)}
|
||||
</Disclosure>
|
||||
<div
|
||||
key={bookmarks.name}
|
||||
className={classNames(
|
||||
layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/4 lg:basis-1/5 xl:basis-1/6",
|
||||
layout?.header === false ? "flex-1 px-1 -my-1" : "flex-1 p-1"
|
||||
)}
|
||||
>
|
||||
<Disclosure defaultOpen>
|
||||
{({ open }) => (
|
||||
<>
|
||||
{layout?.header !== false && (
|
||||
<Disclosure.Button disabled={disableCollapse} className="flex w-full select-none items-center group">
|
||||
{layout?.icon && (
|
||||
<div className="flex-shrink-0 mr-2 w-7 h-7">
|
||||
<ResolvedIcon icon={layout.icon} />
|
||||
</div>
|
||||
)}
|
||||
<h2 className="text-theme-800 dark:text-theme-300 text-xl font-medium">{bookmarks.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-180"
|
||||
)}
|
||||
/>
|
||||
</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>
|
||||
<List bookmarks={bookmarks.bookmarks} layout={layout} />
|
||||
</ErrorBoundary>
|
||||
</Disclosure.Panel>
|
||||
</Transition>
|
||||
</>
|
||||
)}
|
||||
</Disclosure>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,8 +1,17 @@
|
|||
import classNames from "classnames";
|
||||
|
||||
import { columnMap } from "../../utils/layout/columns";
|
||||
|
||||
import Item from "components/bookmarks/item";
|
||||
|
||||
export default function List({ bookmarks }) {
|
||||
export default function List({ bookmarks, layout }) {
|
||||
return (
|
||||
<ul className="mt-3 flex flex-col">
|
||||
<ul
|
||||
className={classNames(
|
||||
layout?.style === "row" ? `grid ${columnMap[layout?.columns]} gap-x-2` : "flex flex-col",
|
||||
"mt-3"
|
||||
)}
|
||||
>
|
||||
{bookmarks.map((bookmark) => (
|
||||
<Item key={`${bookmark.name}-${bookmark.href}`} bookmark={bookmark} />
|
||||
))}
|
||||
|
|
|
@ -61,7 +61,6 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
function handleItemHover(event) {
|
||||
setCurrentItemIndex(parseInt(event.target?.dataset?.index, 10));
|
||||
}
|
||||
|
@ -71,6 +70,16 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear
|
|||
openCurrentItem(event.metaKey);
|
||||
}
|
||||
|
||||
function handleItemKeyDown(event) {
|
||||
if (!isOpen) return;
|
||||
|
||||
// native button handles other keys
|
||||
if (event.key === "Escape") {
|
||||
closeAndReset();
|
||||
event.preventDefault();
|
||||
}
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
if (searchString.length === 0) setResults([]);
|
||||
else {
|
||||
|
@ -162,10 +171,10 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear
|
|||
{results.length > 0 && <ul className="max-h-[60vh] overflow-y-auto m-2">
|
||||
{results.map((r, i) => (
|
||||
<li key={r.container ?? r.app ?? `${r.name}-${r.href}`}>
|
||||
<button type="button" data-index={i} onMouseEnter={handleItemHover} className={classNames(
|
||||
<button type="button" data-index={i} onMouseEnter={handleItemHover} onClick={handleItemClick} onKeyDown={handleItemKeyDown} className={classNames(
|
||||
"flex flex-row w-full items-center justify-between rounded-md text-sm md:text-xl py-2 px-4 cursor-pointer text-theme-700 dark:text-theme-200",
|
||||
i === currentItemIndex && "bg-theme-300/50 dark:bg-theme-700/50",
|
||||
)} onClick={handleItemClick}>
|
||||
)}>
|
||||
<div className="flex flex-row items-center mr-4 pointer-events-none">
|
||||
{(r.icon || r.abbr) && <div className="w-5 text-xs mr-4">
|
||||
{r.icon && <ResolvedIcon icon={r.icon} />}
|
||||
|
|
|
@ -33,7 +33,7 @@ export default function ServicesGroup({ group, services, layout, fiveColumns, di
|
|||
<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'
|
||||
open ? '' : 'rotate-180'
|
||||
)} />
|
||||
</Disclosure.Button>
|
||||
}
|
||||
|
|
|
@ -1,18 +1,8 @@
|
|||
import classNames from "classnames";
|
||||
|
||||
import Item from "components/services/item";
|
||||
import { columnMap } from "../../utils/layout/columns";
|
||||
|
||||
const columnMap = [
|
||||
"grid-cols-1 md:grid-cols-1 lg:grid-cols-1",
|
||||
"grid-cols-1 md:grid-cols-1 lg:grid-cols-1",
|
||||
"grid-cols-1 md:grid-cols-2 lg:grid-cols-2",
|
||||
"grid-cols-1 md:grid-cols-2 lg:grid-cols-3",
|
||||
"grid-cols-1 md:grid-cols-2 lg:grid-cols-4",
|
||||
"grid-cols-1 md:grid-cols-2 lg:grid-cols-5",
|
||||
"grid-cols-1 md:grid-cols-2 lg:grid-cols-6",
|
||||
"grid-cols-1 md:grid-cols-2 lg:grid-cols-7",
|
||||
"grid-cols-1 md:grid-cols-2 lg:grid-cols-8",
|
||||
];
|
||||
import Item from "components/services/item";
|
||||
|
||||
export default function List({ group, services, layout }) {
|
||||
return (
|
||||
|
|
|
@ -7,6 +7,14 @@ import Raw from "./raw";
|
|||
|
||||
export function getAllClasses(options, additionalClassNames = '') {
|
||||
if (options?.style?.header === "boxedWidgets") {
|
||||
if (options?.style?.cardBlur !== undefined) {
|
||||
// eslint-disable-next-line no-param-reassign
|
||||
additionalClassNames = [
|
||||
additionalClassNames,
|
||||
`backdrop-blur${options.style.cardBlur.length ? '-' : ""}${options.style.cardBlur}`
|
||||
].join(' ')
|
||||
}
|
||||
|
||||
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",
|
||||
|
|
|
@ -9,7 +9,7 @@ export default function Document() {
|
|||
content="A highly customizable homepage (or startpage / application dashboard) with Docker and service API integrations."
|
||||
/>
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<link rel="manifest" href="/site.webmanifest?v=4" />
|
||||
<link rel="manifest" href="/site.webmanifest?v=4" crossorigin="use-credentials" />
|
||||
<link rel="mask-icon" href="/safari-pinned-tab.svg?v=4" color="#1e9cd7" />
|
||||
</Head>
|
||||
<body>
|
||||
|
|
|
@ -55,6 +55,10 @@ export default async function handler(req, res) {
|
|||
req.query.endpoint = `${req.query.endpoint}?${query}`;
|
||||
}
|
||||
|
||||
if (mapping?.headers) {
|
||||
req.extraHeaders = mapping.headers;
|
||||
}
|
||||
|
||||
if (endpointProxy instanceof Function) {
|
||||
return endpointProxy(req, res, map);
|
||||
}
|
||||
|
|
|
@ -209,12 +209,12 @@ function Home({ initialSettings }) {
|
|||
searchProvider = searchProviders[searchWidget.options?.provider];
|
||||
}
|
||||
}
|
||||
const headerStyle = initialSettings?.headerStyle || "underlined";
|
||||
const headerStyle = settings?.headerStyle || "underlined";
|
||||
|
||||
useEffect(() => {
|
||||
function handleKeyDown(e) {
|
||||
if (e.target.tagName === "BODY") {
|
||||
if (String.fromCharCode(e.keyCode).match(/(\w|\s)/g) && !(e.altKey || e.ctrlKey || e.metaKey || e.shiftKey)) {
|
||||
if (e.target.tagName === "BODY" || e.target.id === "inner_wrapper") {
|
||||
if (e.key.match(/(\w|\s)/g) && !(e.altKey || e.ctrlKey || e.metaKey || e.shiftKey || e.code === "Tab")) {
|
||||
setSearching(true);
|
||||
} else if (e.key === "Escape") {
|
||||
setSearchString("");
|
||||
|
@ -233,12 +233,12 @@ function Home({ initialSettings }) {
|
|||
return (
|
||||
<>
|
||||
<Head>
|
||||
<title>{initialSettings.title || "Homepage"}</title>
|
||||
{initialSettings.base && <base href={initialSettings.base} />}
|
||||
{initialSettings.favicon ? (
|
||||
<title>{settings.title || "Homepage"}</title>
|
||||
{settings.base && <base href={settings.base} />}
|
||||
{settings.favicon ? (
|
||||
<>
|
||||
<link rel="apple-touch-icon" sizes="180x180" href={initialSettings.favicon} />
|
||||
<link rel="icon" href={initialSettings.favicon} />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href={settings.favicon} />
|
||||
<link rel="icon" href={settings.favicon} />
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
|
@ -248,33 +248,31 @@ function Home({ initialSettings }) {
|
|||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png?v=4" />
|
||||
</>
|
||||
)}
|
||||
<meta
|
||||
name="msapplication-TileColor"
|
||||
content={themes[initialSettings.color || "slate"][initialSettings.theme || "dark"]}
|
||||
/>
|
||||
<meta name="theme-color" content={themes[initialSettings.color || "slate"][initialSettings.theme || "dark"]} />
|
||||
<meta name="msapplication-TileColor" content={themes[settings.color || "slate"][settings.theme || "dark"]} />
|
||||
<meta name="theme-color" content={themes[settings.color || "slate"][settings.theme || "dark"]} />
|
||||
</Head>
|
||||
<div className="relative container m-auto flex flex-col justify-start z-10 h-full">
|
||||
<QuickLaunch
|
||||
servicesAndBookmarks={servicesAndBookmarks}
|
||||
searchString={searchString}
|
||||
setSearchString={setSearchString}
|
||||
isOpen={searching}
|
||||
close={setSearching}
|
||||
searchProvider={settings.quicklaunch?.hideInternetSearch ? null : searchProvider}
|
||||
/>
|
||||
<div
|
||||
className={classNames(
|
||||
"flex flex-row flex-wrap justify-between",
|
||||
headerStyles[headerStyle]
|
||||
"flex flex-row flex-wrap justify-between",
|
||||
headerStyles[headerStyle],
|
||||
settings.cardBlur !== undefined && headerStyle === "boxed" && `backdrop-blur${settings.cardBlur.length ? '-' : ""}${settings.cardBlur}`
|
||||
)}
|
||||
>
|
||||
<QuickLaunch
|
||||
servicesAndBookmarks={servicesAndBookmarks}
|
||||
searchString={searchString}
|
||||
setSearchString={setSearchString}
|
||||
isOpen={searching}
|
||||
close={setSearching}
|
||||
searchProvider={settings.quicklaunch?.hideInternetSearch ? null : searchProvider}
|
||||
/>
|
||||
{widgets && (
|
||||
<>
|
||||
{widgets
|
||||
.filter((widget) => !rightAlignedWidgets.includes(widget.type))
|
||||
.map((widget, i) => (
|
||||
<Widget key={i} widget={widget} style={{ header: headerStyle, isRightAligned: false}} />
|
||||
<Widget key={i} widget={widget} style={{ header: headerStyle, isRightAligned: false, cardBlur: settings.cardBlur }} />
|
||||
))}
|
||||
|
||||
<div className={classNames(
|
||||
|
@ -284,7 +282,7 @@ function Home({ initialSettings }) {
|
|||
{widgets
|
||||
.filter((widget) => rightAlignedWidgets.includes(widget.type))
|
||||
.map((widget, i) => (
|
||||
<Widget key={i} widget={widget} style={{ header: headerStyle, isRightAligned: true}} />
|
||||
<Widget key={i} widget={widget} style={{ header: headerStyle, isRightAligned: true, cardBlur: settings.cardBlur }} />
|
||||
))}
|
||||
</div>
|
||||
</>
|
||||
|
@ -292,39 +290,42 @@ function Home({ initialSettings }) {
|
|||
</div>
|
||||
|
||||
{services?.length > 0 && (
|
||||
<div className="flex flex-wrap p-4 sm:p-8 sm:pt-4 items-start pb-2">
|
||||
<div key="services" className="flex flex-wrap p-4 sm:p-8 sm:pt-4 items-start pb-2">
|
||||
{services.map((group) => (
|
||||
<ServicesGroup
|
||||
<ServicesGroup
|
||||
key={group.name}
|
||||
group={group.name}
|
||||
services={group}
|
||||
layout={initialSettings.layout?.[group.name]}
|
||||
fiveColumns={settings.fiveColumns}
|
||||
disableCollapse={settings.disableCollapse} />
|
||||
layout={settings.layout?.[group.name]}
|
||||
fiveColumns={settings.fiveColumns}
|
||||
disableCollapse={settings.disableCollapse}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
|
||||
{bookmarks?.length > 0 && (
|
||||
<div className={`grow flex flex-wrap pt-0 p-4 sm:p-8 gap-2 grid-cols-1 lg:grid-cols-2 lg:grid-cols-${Math.min(6, bookmarks.length)}`}>
|
||||
<div key="bookmarks" className="flex flex-wrap p-4 sm:p-8 sm:pt-4 items-start pb-2">
|
||||
{bookmarks.map((group) => (
|
||||
<BookmarksGroup
|
||||
key={group.name}
|
||||
group={group}
|
||||
disableCollapse={settings.disableCollapse} />
|
||||
bookmarks={group}
|
||||
layout={settings.layout?.[group.name]}
|
||||
disableCollapse={settings.disableCollapse}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className="flex flex-col mt-auto p-8 w-full">
|
||||
<div className="flex w-full justify-end">
|
||||
{!initialSettings?.color && <ColorToggle />}
|
||||
{!settings?.color && <ColorToggle />}
|
||||
<Revalidate />
|
||||
{!initialSettings?.theme && <ThemeToggle />}
|
||||
{!settings.theme && <ThemeToggle />}
|
||||
</div>
|
||||
|
||||
<div className="flex mt-4 w-full justify-end">
|
||||
{!initialSettings?.hideVersion && <Version />}
|
||||
{!settings.hideVersion && <Version />}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -374,6 +375,7 @@ export default function Wrapper({ initialSettings, fallback }) {
|
|||
>
|
||||
<div
|
||||
id="inner_wrapper"
|
||||
tabIndex="-1"
|
||||
className={classNames(
|
||||
'fixed overflow-auto w-full h-full',
|
||||
backgroundBlur && `backdrop-blur${initialSettings.background.blur.length ? '-' : ""}${initialSettings.background.blur}`,
|
||||
|
|
|
@ -34,6 +34,16 @@ export async function bookmarksResponse() {
|
|||
|
||||
if (!bookmarks) return [];
|
||||
|
||||
let initialSettings;
|
||||
|
||||
try {
|
||||
initialSettings = await getSettings();
|
||||
} catch (e) {
|
||||
console.error("Failed to load settings.yaml, please check for errors");
|
||||
if (e) console.error(e.toString());
|
||||
initialSettings = {};
|
||||
}
|
||||
|
||||
// map easy to write YAML objects into easy to consume JS arrays
|
||||
const bookmarksArray = bookmarks.map((group) => ({
|
||||
name: Object.keys(group)[0],
|
||||
|
@ -43,7 +53,21 @@ export async function bookmarksResponse() {
|
|||
})),
|
||||
}));
|
||||
|
||||
return bookmarksArray;
|
||||
const sortedGroups = [];
|
||||
const unsortedGroups = [];
|
||||
const definedLayouts = initialSettings.layout ? Object.keys(initialSettings.layout) : null;
|
||||
|
||||
bookmarksArray.forEach((group) => {
|
||||
if (definedLayouts) {
|
||||
const layoutIndex = definedLayouts.findIndex(layout => layout === group.name);
|
||||
if (layoutIndex > -1) sortedGroups[layoutIndex] = group;
|
||||
else unsortedGroups.push(group);
|
||||
} else {
|
||||
unsortedGroups.push(group);
|
||||
}
|
||||
});
|
||||
|
||||
return [...sortedGroups.filter(g => g), ...unsortedGroups];
|
||||
}
|
||||
|
||||
export async function widgetsResponse() {
|
||||
|
|
|
@ -158,22 +158,29 @@ export async function servicesFromKubernetes() {
|
|||
return null;
|
||||
});
|
||||
|
||||
const traefikIngressList = await crd.listClusterCustomObject("traefik.io", "v1alpha1", "ingressroutes")
|
||||
const traefikIngressListContaino = await crd.listClusterCustomObject("traefik.containo.us", "v1alpha1", "ingressroutes")
|
||||
.then((response) => response.body)
|
||||
.catch(async (error) => {
|
||||
logger.error("Error getting traefik ingresses from traefik.io: %d %s %s", error.statusCode, error.body, error.response);
|
||||
if (error.statusCode !== 404) {
|
||||
logger.error("Error getting traefik ingresses from traefik.containo.us: %d %s %s", error.statusCode, error.body, error.response);
|
||||
}
|
||||
|
||||
// Fallback to the old traefik CRD group
|
||||
const fallbackIngressList = await crd.listClusterCustomObject("traefik.containo.us", "v1alpha1", "ingressroutes")
|
||||
.then((response) => response.body)
|
||||
.catch((fallbackError) => {
|
||||
logger.error("Error getting traefik ingresses from traefik.containo.us: %d %s %s", fallbackError.statusCode, fallbackError.body, fallbackError.response);
|
||||
return null;
|
||||
});
|
||||
|
||||
return fallbackIngressList;
|
||||
return [];
|
||||
});
|
||||
|
||||
const traefikIngressListIo = await crd.listClusterCustomObject("traefik.io", "v1alpha1", "ingressroutes")
|
||||
.then((response) => response.body)
|
||||
.catch(async (error) => {
|
||||
if (error.statusCode !== 404) {
|
||||
logger.error("Error getting traefik ingresses from traefik.io: %d %s %s", error.statusCode, error.body, error.response);
|
||||
}
|
||||
|
||||
return [];
|
||||
});
|
||||
|
||||
|
||||
const traefikIngressList = [...traefikIngressListContaino, ...traefikIngressListIo];
|
||||
|
||||
if (traefikIngressList && traefikIngressList.items.length > 0) {
|
||||
const traefikServices = traefikIngressList.items
|
||||
.filter((ingress) => ingress.metadata.annotations && ingress.metadata.annotations[`${ANNOTATION_BASE}/href`])
|
||||
|
@ -299,6 +306,8 @@ export function cleanServiceGroups(groups) {
|
|||
stream, // mjpeg
|
||||
fit,
|
||||
method, // openmediavault widget
|
||||
mappings, // customapi widget
|
||||
refreshInterval,
|
||||
} = cleanedService.widget;
|
||||
|
||||
let fieldsList = fields;
|
||||
|
@ -372,6 +381,10 @@ export function cleanServiceGroups(groups) {
|
|||
if (type === "openmediavault") {
|
||||
if (method) cleanedService.widget.method = method;
|
||||
}
|
||||
if (type === "customapi") {
|
||||
if (mappings) cleanedService.widget.mappings = mappings;
|
||||
if (refreshInterval) cleanedService.widget.refreshInterval = refreshInterval;
|
||||
}
|
||||
}
|
||||
|
||||
return cleanedService;
|
||||
|
|
12
src/utils/layout/columns.js
Normal file
12
src/utils/layout/columns.js
Normal file
|
@ -0,0 +1,12 @@
|
|||
// eslint-disable-next-line import/prefer-default-export
|
||||
export const columnMap = [
|
||||
"grid-cols-1 md:grid-cols-1 lg:grid-cols-1",
|
||||
"grid-cols-1 md:grid-cols-1 lg:grid-cols-1",
|
||||
"grid-cols-1 md:grid-cols-2 lg:grid-cols-2",
|
||||
"grid-cols-1 md:grid-cols-2 lg:grid-cols-3",
|
||||
"grid-cols-1 md:grid-cols-2 lg:grid-cols-4",
|
||||
"grid-cols-1 md:grid-cols-2 lg:grid-cols-5",
|
||||
"grid-cols-1 md:grid-cols-2 lg:grid-cols-6",
|
||||
"grid-cols-1 md:grid-cols-2 lg:grid-cols-7",
|
||||
"grid-cols-1 md:grid-cols-2 lg:grid-cols-8",
|
||||
];
|
|
@ -32,6 +32,7 @@ export default async function credentialedProxyHandler(req, res, map) {
|
|||
"authentik",
|
||||
"cloudflared",
|
||||
"ghostfolio",
|
||||
"mealie",
|
||||
"tailscale",
|
||||
"truenas",
|
||||
"pterodactyl",
|
||||
|
|
|
@ -20,15 +20,14 @@ export default async function genericProxyHandler(req, res, map) {
|
|||
if (widget) {
|
||||
const url = new URL(formatApiCall(widgets[widget.type].api, { endpoint, ...widget }));
|
||||
|
||||
let headers;
|
||||
const headers = req.extraHeaders ?? widget.headers ?? {};
|
||||
|
||||
if (widget.username && widget.password) {
|
||||
headers = {
|
||||
Authorization: `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`,
|
||||
};
|
||||
headers.Authorization = `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`;
|
||||
}
|
||||
|
||||
const params = {
|
||||
method: req.method,
|
||||
method: widget.method ?? req.method,
|
||||
headers,
|
||||
}
|
||||
if (req.body) {
|
||||
|
|
36
src/widgets/atsumeru/component.jsx
Normal file
36
src/widgets/atsumeru/component.jsx
Normal file
|
@ -0,0 +1,36 @@
|
|||
import { useTranslation } from "next-i18next";
|
||||
|
||||
import Container from "components/services/widget/container";
|
||||
import Block from "components/services/widget/block";
|
||||
import useWidgetAPI from "utils/proxy/use-widget-api";
|
||||
|
||||
export default function Component({ service }) {
|
||||
const { t } = useTranslation();
|
||||
const { widget } = service;
|
||||
|
||||
const { data: infoData, error: infoError } = useWidgetAPI(widget, "info");
|
||||
|
||||
if (infoError) {
|
||||
return <Container service={service} error={infoError} />;
|
||||
}
|
||||
|
||||
if (!infoData) {
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="atsumeru.series" />
|
||||
<Block label="atsumeru.archives" />
|
||||
<Block label="atsumeru.chapters" />
|
||||
<Block label="atsumeru.categories" />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="atsumeru.series" value={t("common.number", { value: infoData.stats.total_series })} />
|
||||
<Block label="atsumeru.archives" value={t("common.number", { value: infoData.stats.total_archives })} />
|
||||
<Block label="atsumeru.chapters" value={t("common.number", { value: infoData.stats.total_chapters })} />
|
||||
<Block label="atsumeru.categories" value={t("common.number", { value: infoData.stats.total_categories })} />
|
||||
</Container>
|
||||
);
|
||||
}
|
14
src/widgets/atsumeru/widget.js
Normal file
14
src/widgets/atsumeru/widget.js
Normal file
|
@ -0,0 +1,14 @@
|
|||
import genericProxyHandler from "utils/proxy/handlers/generic";
|
||||
|
||||
const widget = {
|
||||
api: "{url}/api/server/{endpoint}",
|
||||
proxyHandler: genericProxyHandler,
|
||||
|
||||
mappings: {
|
||||
info: {
|
||||
endpoint: "info"
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
export default widget;
|
36
src/widgets/calibreweb/component.jsx
Normal file
36
src/widgets/calibreweb/component.jsx
Normal file
|
@ -0,0 +1,36 @@
|
|||
import { useTranslation } from "next-i18next";
|
||||
|
||||
import Container from "components/services/widget/container";
|
||||
import Block from "components/services/widget/block";
|
||||
import useWidgetAPI from "utils/proxy/use-widget-api";
|
||||
|
||||
export default function Component({ service }) {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const { widget } = service;
|
||||
const { data, error } = useWidgetAPI(widget, "stats");
|
||||
|
||||
if (error) {
|
||||
return <Container service={service} error={error} />;
|
||||
}
|
||||
|
||||
if (!data) {
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="calibreweb.books" />
|
||||
<Block label="calibreweb.authors" />
|
||||
<Block label="calibreweb.categories" />
|
||||
<Block label="calibreweb.series" />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="calibreweb.books" value={t("common.number", { value: data.books })} />
|
||||
<Block label="calibreweb.authors" value={t("common.number", { value: data.authors })} />
|
||||
<Block label="calibreweb.categories" value={t("common.number", { value: data.categories })} />
|
||||
<Block label="calibreweb.series" value={t("common.number", { value: data.series })} />
|
||||
</Container>
|
||||
);
|
||||
}
|
14
src/widgets/calibreweb/widget.js
Normal file
14
src/widgets/calibreweb/widget.js
Normal file
|
@ -0,0 +1,14 @@
|
|||
import genericProxyHandler from "../../utils/proxy/handlers/generic";
|
||||
|
||||
const widget = {
|
||||
api: "{url}/{endpoint}",
|
||||
proxyHandler: genericProxyHandler,
|
||||
|
||||
mappings: {
|
||||
stats: {
|
||||
endpoint: "opds/stats",
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export default widget;
|
|
@ -2,16 +2,19 @@ import dynamic from "next/dynamic";
|
|||
|
||||
const components = {
|
||||
adguard: dynamic(() => import("./adguard/component")),
|
||||
atsumeru: dynamic(() => import("./atsumeru/component")),
|
||||
audiobookshelf: dynamic(() => import("./audiobookshelf/component")),
|
||||
authentik: dynamic(() => import("./authentik/component")),
|
||||
autobrr: dynamic(() => import("./autobrr/component")),
|
||||
azuredevops: dynamic(() => import("./azuredevops/component")),
|
||||
bazarr: dynamic(() => import("./bazarr/component")),
|
||||
caddy: dynamic(() => import("./caddy/component")),
|
||||
calibreweb: dynamic(() => import("./calibreweb/component")),
|
||||
changedetectionio: dynamic(() => import("./changedetectionio/component")),
|
||||
channelsdvrserver: dynamic(() => import("./channelsdvrserver/component")),
|
||||
cloudflared: dynamic(() => import("./cloudflared/component")),
|
||||
coinmarketcap: dynamic(() => import("./coinmarketcap/component")),
|
||||
customapi: dynamic(() => import("./customapi/component")),
|
||||
deluge: dynamic(() => import("./deluge/component")),
|
||||
diskstation: dynamic(() => import("./diskstation/component")),
|
||||
downloadstation: dynamic(() => import("./downloadstation/component")),
|
||||
|
@ -42,6 +45,7 @@ const components = {
|
|||
kopia: dynamic(() => import("./kopia/component")),
|
||||
lidarr: dynamic(() => import("./lidarr/component")),
|
||||
mastodon: dynamic(() => import("./mastodon/component")),
|
||||
mealie: dynamic(() => import("./mealie/component")),
|
||||
medusa: dynamic(() => import("./medusa/component")),
|
||||
minecraft: dynamic(() => import("./minecraft/component")),
|
||||
miniflux: dynamic(() => import("./miniflux/component")),
|
||||
|
@ -93,6 +97,7 @@ const components = {
|
|||
unifi: dynamic(() => import("./unifi/component")),
|
||||
unmanic: dynamic(() => import("./unmanic/component")),
|
||||
uptimekuma: dynamic(() => import("./uptimekuma/component")),
|
||||
uptimerobot: dynamic(() => import("./uptimerobot/component")),
|
||||
urbackup: dynamic(() => import("./urbackup/component")),
|
||||
watchtower: dynamic(() => import("./watchtower/component")),
|
||||
whatsupdocker: dynamic(() => import("./whatsupdocker/component")),
|
||||
|
|
75
src/widgets/customapi/component.jsx
Normal file
75
src/widgets/customapi/component.jsx
Normal file
|
@ -0,0 +1,75 @@
|
|||
import { useTranslation } from "next-i18next";
|
||||
|
||||
import Container from "components/services/widget/container";
|
||||
import Block from "components/services/widget/block";
|
||||
import useWidgetAPI from "utils/proxy/use-widget-api";
|
||||
|
||||
function getValue(field, data) {
|
||||
let value = data;
|
||||
let lastField = field;
|
||||
let key = '';
|
||||
|
||||
while (typeof lastField === "object") {
|
||||
key = Object.keys(lastField)[0] ?? null;
|
||||
|
||||
if (key === null) {
|
||||
break;
|
||||
}
|
||||
|
||||
value = value[key];
|
||||
lastField = lastField[key];
|
||||
}
|
||||
|
||||
if (typeof value === 'undefined') {
|
||||
return null;
|
||||
}
|
||||
|
||||
return value[lastField] ?? null;
|
||||
}
|
||||
|
||||
function formatValue(t, mapping, value) {
|
||||
switch (mapping?.format) {
|
||||
case 'number':
|
||||
return t("common.number", { value: parseInt(value, 10) });
|
||||
case 'float':
|
||||
return t("common.number", { value });
|
||||
case 'percent':
|
||||
return t("common.percent", { value });
|
||||
case 'text':
|
||||
default:
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
export default function Component({ service }) {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const { widget } = service;
|
||||
|
||||
const { mappings = [], refreshInterval = 10000 } = widget;
|
||||
const { data: customData, error: customError } = useWidgetAPI(widget, null, {
|
||||
refreshInterval: Math.max(1000, refreshInterval),
|
||||
});
|
||||
|
||||
if (customError) {
|
||||
return <Container service={service} error={customError} />;
|
||||
}
|
||||
|
||||
if (!customData) {
|
||||
return (
|
||||
<Container service={service}>
|
||||
{ mappings.slice(0,4).map(item => <Block label={item.label} key={item.field} />) }
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
{ mappings.slice(0,4).map(mapping => <Block
|
||||
label={mapping.label}
|
||||
key={mapping.field}
|
||||
value={formatValue(t, mapping, getValue(mapping.field, customData))}
|
||||
/>) }
|
||||
</Container>
|
||||
);
|
||||
}
|
8
src/widgets/customapi/widget.js
Normal file
8
src/widgets/customapi/widget.js
Normal file
|
@ -0,0 +1,8 @@
|
|||
import genericProxyHandler from "utils/proxy/handlers/generic";
|
||||
|
||||
const widget = {
|
||||
api: "{url}",
|
||||
proxyHandler: genericProxyHandler,
|
||||
};
|
||||
|
||||
export default widget;
|
|
@ -29,17 +29,19 @@ function ticksToString(ticks) {
|
|||
|
||||
function SingleSessionEntry({ playCommand, session }) {
|
||||
const {
|
||||
NowPlayingItem: { Name, SeriesName, RunTimeTicks },
|
||||
NowPlayingItem: { Name, SeriesName },
|
||||
PlayState: { PositionTicks, IsPaused, IsMuted },
|
||||
} = session;
|
||||
|
||||
const RunTimeTicks = session.NowPlayingItem?.RunTimeTicks ?? session.NowPlayingItem?.CurrentProgram?.RunTimeTicks ?? 0;
|
||||
|
||||
const { IsVideoDirect, VideoDecoderIsHardware, VideoEncoderIsHardware } = session?.TranscodingInfo || {
|
||||
IsVideoDirect: true,
|
||||
VideoDecoderIsHardware: true,
|
||||
VideoEncoderIsHardware: true,
|
||||
};
|
||||
|
||||
const percent = (PositionTicks / RunTimeTicks) * 100;
|
||||
const percent = Math.min(1, PositionTicks / RunTimeTicks) * 100;
|
||||
|
||||
return (
|
||||
<>
|
||||
|
@ -98,13 +100,15 @@ function SingleSessionEntry({ playCommand, session }) {
|
|||
|
||||
function SessionEntry({ playCommand, session }) {
|
||||
const {
|
||||
NowPlayingItem: { Name, SeriesName, RunTimeTicks },
|
||||
NowPlayingItem: { Name, SeriesName },
|
||||
PlayState: { PositionTicks, IsPaused, IsMuted },
|
||||
} = session;
|
||||
|
||||
const RunTimeTicks = session.NowPlayingItem?.RunTimeTicks ?? session.NowPlayingItem?.CurrentProgram?.RunTimeTicks ?? 0;
|
||||
|
||||
const { IsVideoDirect, VideoDecoderIsHardware, VideoEncoderIsHardware } = session?.TranscodingInfo || {};
|
||||
|
||||
const percent = (PositionTicks / RunTimeTicks) * 100;
|
||||
const percent = Math.min(1, PositionTicks / RunTimeTicks) * 100;
|
||||
|
||||
return (
|
||||
<div className="text-theme-700 dark:text-theme-200 relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1 flex">
|
||||
|
|
33
src/widgets/mealie/component.jsx
Normal file
33
src/widgets/mealie/component.jsx
Normal file
|
@ -0,0 +1,33 @@
|
|||
import Container from "components/services/widget/container";
|
||||
import Block from "components/services/widget/block";
|
||||
import useWidgetAPI from "utils/proxy/use-widget-api";
|
||||
|
||||
export default function Component({ service }) {
|
||||
const { widget } = service;
|
||||
|
||||
const { data: mealieData, error: mealieError } = useWidgetAPI(widget);
|
||||
|
||||
if (mealieError || mealieData?.statusCode === 401) {
|
||||
return <Container service={service} error={mealieError ?? mealieData} />;
|
||||
}
|
||||
|
||||
if (!mealieData) {
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="mealie.recipes" />
|
||||
<Block label="mealie.users" />
|
||||
<Block label="mealie.categories" />
|
||||
<Block label="mealie.tags" />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="mealie.recipes" value={mealieData.totalRecipes} />
|
||||
<Block label="mealie.users" value={mealieData.totalUsers} />
|
||||
<Block label="mealie.categories" value={mealieData.totalCategories} />
|
||||
<Block label="mealie.tags" value={mealieData.totalTags} />
|
||||
</Container>
|
||||
);
|
||||
}
|
8
src/widgets/mealie/widget.js
Normal file
8
src/widgets/mealie/widget.js
Normal file
|
@ -0,0 +1,8 @@
|
|||
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
|
||||
|
||||
const widget = {
|
||||
api: "{url}/api/groups/statistics",
|
||||
proxyHandler: credentialedProxyHandler,
|
||||
};
|
||||
|
||||
export default widget;
|
97
src/widgets/uptimerobot/component.jsx
Normal file
97
src/widgets/uptimerobot/component.jsx
Normal file
|
@ -0,0 +1,97 @@
|
|||
import { useTranslation } from "next-i18next";
|
||||
|
||||
import Container from "components/services/widget/container";
|
||||
import Block from "components/services/widget/block";
|
||||
import useWidgetAPI from "utils/proxy/use-widget-api";
|
||||
|
||||
function secondsToDhms(seconds) {
|
||||
const d = Math.floor(seconds / (3600*24));
|
||||
const h = Math.floor(seconds % (3600*24) / 3600);
|
||||
const m = Math.floor(seconds % 3600 / 60);
|
||||
const s = Math.floor(seconds % 60);
|
||||
|
||||
const dDisplay = d > 0 ? d + (d === 1 ? " day, " : " days, ") : "";
|
||||
const hDisplay = h > 0 ? h + (h === 1 ? " hr, " : " hrs, ") : "";
|
||||
let mDisplay = m > 0 && d === 0 ? m + (m === 1 ? " min" : " mins") : "";
|
||||
let sDisplay = "";
|
||||
|
||||
if (d === 0 && h === 0) {
|
||||
mDisplay = m > 0 ? m + (m === 1 ? " min, " : " mins, ") : "";
|
||||
sDisplay = s > 0 ? s + (s === 1 ? " sec" : " secs") : "";
|
||||
}
|
||||
return (dDisplay + hDisplay + mDisplay + sDisplay).replace(/,\s*$/, "");
|
||||
}
|
||||
|
||||
export default function Component({ service }) {
|
||||
const { widget } = service;
|
||||
const { t } = useTranslation();
|
||||
|
||||
const { data: uptimerobotData, error: uptimerobotError } = useWidgetAPI(widget, "getmonitors");
|
||||
|
||||
if (uptimerobotError) {
|
||||
return <Container service={service} error={uptimerobotError} />;
|
||||
}
|
||||
|
||||
if (!uptimerobotData) {
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="uptimerobot.status" />
|
||||
<Block label="uptimerobot.uptime" />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
// multiple monitors
|
||||
if (uptimerobotData.pagination?.total > 1) {
|
||||
const sitesUp = uptimerobotData.monitors.filter(m => m.status === 2).length;
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="uptimerobot.sitesUp" value={sitesUp} />
|
||||
<Block label="uptimerobot.sitesDown" value={uptimerobotData.pagination.total - sitesUp} />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
// single monitor
|
||||
const monitor = uptimerobotData.monitors[0];
|
||||
let status;
|
||||
let uptime = 0;
|
||||
let logIndex = 0;
|
||||
|
||||
switch (monitor.status) {
|
||||
case 0:
|
||||
status = t("uptimerobot.paused");
|
||||
break;
|
||||
case 1:
|
||||
status = t("uptimerobot.notyetchecked");
|
||||
break;
|
||||
case 2:
|
||||
status = t("uptimerobot.up");
|
||||
uptime = secondsToDhms(monitor.logs[0].duration);
|
||||
logIndex = 1;
|
||||
break;
|
||||
case 8:
|
||||
status = t("uptimerobot.seemsdown");
|
||||
break;
|
||||
case 9:
|
||||
status = t("uptimerobot.down");
|
||||
break;
|
||||
default:
|
||||
status = t("uptimerobot.unknown");
|
||||
break;
|
||||
}
|
||||
|
||||
const lastDown = new Date(monitor.logs[logIndex].datetime * 1000).toLocaleString();
|
||||
const downDuration = secondsToDhms(monitor.logs[logIndex].duration);
|
||||
const hideDown = logIndex === 1 && monitor.logs[logIndex].type !== 1;
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="uptimerobot.status" value={status} />
|
||||
<Block label="uptimerobot.uptime" value={uptime} />
|
||||
{!hideDown && <Block label="uptimerobot.lastDown" value={lastDown} />}
|
||||
{!hideDown && <Block label="uptimerobot.downDuration" value={downDuration} />}
|
||||
</Container>
|
||||
);
|
||||
}
|
20
src/widgets/uptimerobot/widget.js
Normal file
20
src/widgets/uptimerobot/widget.js
Normal file
|
@ -0,0 +1,20 @@
|
|||
import genericProxyHandler from "utils/proxy/handlers/generic";
|
||||
|
||||
const widget = {
|
||||
api: "{url}/v2/{endpoint}?api_key={key}",
|
||||
proxyHandler: genericProxyHandler,
|
||||
|
||||
mappings: {
|
||||
getmonitors: {
|
||||
method: "POST",
|
||||
endpoint: "getMonitors",
|
||||
body: 'format=json&logs=1',
|
||||
headers: {
|
||||
"content-type": "application/x-www-form-urlencoded",
|
||||
"cache-control": "no-cache"
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export default widget;
|
|
@ -1,14 +1,17 @@
|
|||
import adguard from "./adguard/widget";
|
||||
import atsumeru from "./atsumeru/widget";
|
||||
import audiobookshelf from "./audiobookshelf/widget";
|
||||
import authentik from "./authentik/widget";
|
||||
import autobrr from "./autobrr/widget";
|
||||
import azuredevops from "./azuredevops/widget";
|
||||
import bazarr from "./bazarr/widget";
|
||||
import caddy from "./caddy/widget";
|
||||
import calibreweb from "./calibreweb/widget";
|
||||
import changedetectionio from "./changedetectionio/widget";
|
||||
import channelsdvrserver from "./channelsdvrserver/widget";
|
||||
import cloudflared from "./cloudflared/widget";
|
||||
import coinmarketcap from "./coinmarketcap/widget";
|
||||
import customapi from "./customapi/widget";
|
||||
import deluge from "./deluge/widget";
|
||||
import diskstation from "./diskstation/widget";
|
||||
import downloadstation from "./downloadstation/widget";
|
||||
|
@ -36,6 +39,7 @@ import komga from "./komga/widget";
|
|||
import kopia from "./kopia/widget";
|
||||
import lidarr from "./lidarr/widget";
|
||||
import mastodon from "./mastodon/widget";
|
||||
import mealie from "./mealie/widget";
|
||||
import medusa from "./medusa/widget";
|
||||
import minecraft from "./minecraft/widget";
|
||||
import miniflux from "./miniflux/widget";
|
||||
|
@ -87,6 +91,7 @@ import truenas from "./truenas/widget";
|
|||
import unifi from "./unifi/widget";
|
||||
import unmanic from "./unmanic/widget";
|
||||
import uptimekuma from "./uptimekuma/widget";
|
||||
import uptimerobot from "./uptimerobot/widget";
|
||||
import watchtower from "./watchtower/widget";
|
||||
import whatsupdocker from "./whatsupdocker/widget";
|
||||
import xteve from "./xteve/widget";
|
||||
|
@ -94,16 +99,19 @@ import urbackup from "./urbackup/widget";
|
|||
|
||||
const widgets = {
|
||||
adguard,
|
||||
atsumeru,
|
||||
audiobookshelf,
|
||||
authentik,
|
||||
autobrr,
|
||||
azuredevops,
|
||||
bazarr,
|
||||
caddy,
|
||||
calibreweb,
|
||||
changedetectionio,
|
||||
channelsdvrserver,
|
||||
cloudflared,
|
||||
coinmarketcap,
|
||||
customapi,
|
||||
deluge,
|
||||
diskstation,
|
||||
downloadstation,
|
||||
|
@ -132,6 +140,7 @@ const widgets = {
|
|||
kopia,
|
||||
lidarr,
|
||||
mastodon,
|
||||
mealie,
|
||||
medusa,
|
||||
minecraft,
|
||||
miniflux,
|
||||
|
@ -184,6 +193,7 @@ const widgets = {
|
|||
unifi_console: unifi,
|
||||
unmanic,
|
||||
uptimekuma,
|
||||
uptimerobot,
|
||||
urbackup,
|
||||
watchtower,
|
||||
whatsupdocker,
|
||||
|
|
|
@ -59,5 +59,16 @@ module.exports = {
|
|||
'backdrop-brightness-125',
|
||||
'backdrop-brightness-150',
|
||||
'backdrop-brightness-200',
|
||||
'grid-cols-1',
|
||||
'md:grid-cols-1',
|
||||
'md:grid-cols-2',
|
||||
'lg:grid-cols-1',
|
||||
'lg:grid-cols-2',
|
||||
'lg:grid-cols-3',
|
||||
'lg:grid-cols-4',
|
||||
'lg:grid-cols-5',
|
||||
'lg:grid-cols-6',
|
||||
'lg:grid-cols-7',
|
||||
'lg:grid-cols-8',
|
||||
],
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue