mirror of
				https://github.com/karl0ss/homepage.git
				synced 2025-11-04 00:10:57 +00:00 
			
		
		
		
	Merge branch 'main' into kubernetes
This commit is contained in:
		
						commit
						b6e8b64a2e
					
				@ -85,7 +85,7 @@ services:
 | 
				
			|||||||
      - 3000:3000
 | 
					      - 3000:3000
 | 
				
			||||||
    volumes:
 | 
					    volumes:
 | 
				
			||||||
      - /path/to/config:/app/config # Make sure your local config directory exists
 | 
					      - /path/to/config:/app/config # Make sure your local config directory exists
 | 
				
			||||||
      - /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations
 | 
					      - /var/run/docker.sock:/var/run/docker.sock:ro # (optional) For docker integrations
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
or docker run:
 | 
					or docker run:
 | 
				
			||||||
 | 
				
			|||||||
@ -347,61 +347,61 @@
 | 
				
			|||||||
    "deluge": {
 | 
					    "deluge": {
 | 
				
			||||||
        "download": "Preuzimanje",
 | 
					        "download": "Preuzimanje",
 | 
				
			||||||
        "upload": "Prijenos",
 | 
					        "upload": "Prijenos",
 | 
				
			||||||
        "leech": "Leech",
 | 
					        "leech": "Korištenje tuđeg sadržaja",
 | 
				
			||||||
        "seed": "Seed"
 | 
					        "seed": "Prenošenje preuzetog sadržaja"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "flood": {
 | 
					    "flood": {
 | 
				
			||||||
        "download": "Preuzimanje",
 | 
					        "download": "Preuzimanje",
 | 
				
			||||||
        "upload": "Prijenos",
 | 
					        "upload": "Prijenos",
 | 
				
			||||||
        "leech": "Leech",
 | 
					        "leech": "Korištenje tuđeg sadržaja",
 | 
				
			||||||
        "seed": "Seed"
 | 
					        "seed": "Prenošenje preuzetog sadržaja"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "tdarr": {
 | 
					    "tdarr": {
 | 
				
			||||||
        "queue": "Queue",
 | 
					        "queue": "Red čekanja",
 | 
				
			||||||
        "processed": "Processed",
 | 
					        "processed": "Obrađeno",
 | 
				
			||||||
        "errored": "Errored",
 | 
					        "errored": "S greškom",
 | 
				
			||||||
        "saved": "Saved"
 | 
					        "saved": "Spremljeno"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "miniflux": {
 | 
					    "miniflux": {
 | 
				
			||||||
        "read": "Read",
 | 
					        "read": "Pročitano",
 | 
				
			||||||
        "unread": "Unread"
 | 
					        "unread": "Nepročitano"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "nextdns": {
 | 
					    "nextdns": {
 | 
				
			||||||
        "wait": "Please Wait",
 | 
					        "wait": "Pričekaj",
 | 
				
			||||||
        "no_devices": "No Device Data Received"
 | 
					        "no_devices": "Podaci o uređaju nisu primljeni"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "common": {
 | 
					    "common": {
 | 
				
			||||||
        "bibyterate": "{{value, rate(bits: false; binary: true)}}",
 | 
					        "bibyterate": "{{value, rate(bits: false; binary: true)}}",
 | 
				
			||||||
        "bibitrate": "{{value, rate(bits: true; binary: true)}}"
 | 
					        "bibitrate": "{{value, rate(bits: true; binary: true)}}"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "omada": {
 | 
					    "omada": {
 | 
				
			||||||
        "connectedAp": "Connected APs",
 | 
					        "connectedAp": "Povezani AP-ovi",
 | 
				
			||||||
        "activeUser": "Active devices",
 | 
					        "activeUser": "Aktivni uređaji",
 | 
				
			||||||
        "alerts": "Alerts",
 | 
					        "alerts": "Upozorenja",
 | 
				
			||||||
        "connectedGateway": "Connected gateways",
 | 
					        "connectedGateway": "Povezani pristupi",
 | 
				
			||||||
        "connectedSwitches": "Connected switches"
 | 
					        "connectedSwitches": "Povezani prekidači"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "downloadstation": {
 | 
					    "downloadstation": {
 | 
				
			||||||
        "download": "Download",
 | 
					        "download": "Preuzimanje",
 | 
				
			||||||
        "upload": "Upload",
 | 
					        "upload": "Prijenos",
 | 
				
			||||||
        "leech": "Leech",
 | 
					        "leech": "Korištenje tuđeg sadržaja",
 | 
				
			||||||
        "seed": "Seed"
 | 
					        "seed": "Prenošenje preuzetog sadržaja"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "mikrotik": {
 | 
					    "mikrotik": {
 | 
				
			||||||
        "cpuLoad": "CPU Load",
 | 
					        "cpuLoad": "CPU Load",
 | 
				
			||||||
        "memoryUsed": "Memory Used",
 | 
					        "memoryUsed": "Korištena memorija",
 | 
				
			||||||
        "uptime": "Uptime",
 | 
					        "uptime": "Uptime",
 | 
				
			||||||
        "numberOfLeases": "Leases"
 | 
					        "numberOfLeases": "Leases"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "xteve": {
 | 
					    "xteve": {
 | 
				
			||||||
        "streams_all": "All Streams",
 | 
					        "streams_all": "Svi prijenosi",
 | 
				
			||||||
        "streams_active": "Active Streams",
 | 
					        "streams_active": "Aktivni prijenosi",
 | 
				
			||||||
        "streams_xepg": "XEPG Channels"
 | 
					        "streams_xepg": "XEPG kanali"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "opnsense": {
 | 
					    "opnsense": {
 | 
				
			||||||
        "cpu": "CPU Load",
 | 
					        "cpu": "CPU Load",
 | 
				
			||||||
        "memory": "Active Memory",
 | 
					        "memory": "Aktivna memorija",
 | 
				
			||||||
        "wanUpload": "WAN Upload",
 | 
					        "wanUpload": "WAN prijenos",
 | 
				
			||||||
        "wanDownload": "WAN Download"
 | 
					        "wanDownload": "WAN preuzimanje"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										407
									
								
								public/locales/ja/common.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										407
									
								
								public/locales/ja/common.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,407 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "navidrome": {
 | 
				
			||||||
 | 
					        "nothing_streaming": "No Active Streams",
 | 
				
			||||||
 | 
					        "please_wait": "Please Wait"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "npm": {
 | 
				
			||||||
 | 
					        "total": "Total",
 | 
				
			||||||
 | 
					        "enabled": "Enabled",
 | 
				
			||||||
 | 
					        "disabled": "Disabled"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "strelaysrv": {
 | 
				
			||||||
 | 
					        "numActiveSessions": "Sessions",
 | 
				
			||||||
 | 
					        "numConnections": "Connections",
 | 
				
			||||||
 | 
					        "dataRelayed": "Relayed",
 | 
				
			||||||
 | 
					        "transferRate": "Rate"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "glances": {
 | 
				
			||||||
 | 
					        "mem": "MEM",
 | 
				
			||||||
 | 
					        "cpu": "CPU",
 | 
				
			||||||
 | 
					        "wait": "Please wait"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "autobrr": {
 | 
				
			||||||
 | 
					        "filters": "Filters",
 | 
				
			||||||
 | 
					        "indexers": "Indexers",
 | 
				
			||||||
 | 
					        "approvedPushes": "Approved",
 | 
				
			||||||
 | 
					        "rejectedPushes": "Rejected"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "gluetun": {
 | 
				
			||||||
 | 
					        "region": "Region",
 | 
				
			||||||
 | 
					        "country": "Country",
 | 
				
			||||||
 | 
					        "public_ip": "Public IP"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "common": {
 | 
				
			||||||
 | 
					        "bibyterate": "{{value, rate(bits: false; binary: true)}}",
 | 
				
			||||||
 | 
					        "bibitrate": "{{value, rate(bits: true; binary: true)}}"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "widget": {
 | 
				
			||||||
 | 
					        "api_error": "APIエラー",
 | 
				
			||||||
 | 
					        "information": "情報",
 | 
				
			||||||
 | 
					        "missing_type": "見つからないウィジェットタイプ: {{type}}",
 | 
				
			||||||
 | 
					        "status": "ステータス",
 | 
				
			||||||
 | 
					        "url": "URL",
 | 
				
			||||||
 | 
					        "raw_error": "生のエラー",
 | 
				
			||||||
 | 
					        "response_data": "レスポンスデータ"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "weather": {
 | 
				
			||||||
 | 
					        "current": "Current Location",
 | 
				
			||||||
 | 
					        "allow": "Click to allow",
 | 
				
			||||||
 | 
					        "updating": "Updating",
 | 
				
			||||||
 | 
					        "wait": "Please wait"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "search": {
 | 
				
			||||||
 | 
					        "placeholder": "Search…"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "resources": {
 | 
				
			||||||
 | 
					        "cpu": "CPU",
 | 
				
			||||||
 | 
					        "total": "Total",
 | 
				
			||||||
 | 
					        "free": "Free",
 | 
				
			||||||
 | 
					        "used": "Used",
 | 
				
			||||||
 | 
					        "load": "Load"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "unifi": {
 | 
				
			||||||
 | 
					        "users": "Users",
 | 
				
			||||||
 | 
					        "uptime": "System Uptime",
 | 
				
			||||||
 | 
					        "days": "Days",
 | 
				
			||||||
 | 
					        "wan": "WAN",
 | 
				
			||||||
 | 
					        "lan": "LAN",
 | 
				
			||||||
 | 
					        "wlan": "WLAN",
 | 
				
			||||||
 | 
					        "devices": "Devices",
 | 
				
			||||||
 | 
					        "lan_devices": "LAN Devices",
 | 
				
			||||||
 | 
					        "wlan_devices": "WLAN Devices",
 | 
				
			||||||
 | 
					        "lan_users": "LAN Users",
 | 
				
			||||||
 | 
					        "wlan_users": "WLAN Users",
 | 
				
			||||||
 | 
					        "up": "UP",
 | 
				
			||||||
 | 
					        "down": "DOWN",
 | 
				
			||||||
 | 
					        "wait": "Please wait"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "docker": {
 | 
				
			||||||
 | 
					        "rx": "RX",
 | 
				
			||||||
 | 
					        "tx": "TX",
 | 
				
			||||||
 | 
					        "mem": "MEM",
 | 
				
			||||||
 | 
					        "cpu": "CPU",
 | 
				
			||||||
 | 
					        "offline": "Offline",
 | 
				
			||||||
 | 
					        "error": "Error",
 | 
				
			||||||
 | 
					        "unknown": "Unknown"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "ping": {
 | 
				
			||||||
 | 
					        "error": "Error",
 | 
				
			||||||
 | 
					        "ping": "Ping"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "emby": {
 | 
				
			||||||
 | 
					        "playing": "Playing",
 | 
				
			||||||
 | 
					        "transcoding": "Transcoding",
 | 
				
			||||||
 | 
					        "bitrate": "Bitrate",
 | 
				
			||||||
 | 
					        "no_active": "No Active Streams"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "flood": {
 | 
				
			||||||
 | 
					        "download": "Download",
 | 
				
			||||||
 | 
					        "upload": "Upload",
 | 
				
			||||||
 | 
					        "leech": "Leech",
 | 
				
			||||||
 | 
					        "seed": "Seed"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "changedetectionio": {
 | 
				
			||||||
 | 
					        "totalObserved": "Total Observed",
 | 
				
			||||||
 | 
					        "diffsDetected": "Diffs Detected"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "tautulli": {
 | 
				
			||||||
 | 
					        "playing": "Playing",
 | 
				
			||||||
 | 
					        "transcoding": "Transcoding",
 | 
				
			||||||
 | 
					        "bitrate": "Bitrate",
 | 
				
			||||||
 | 
					        "no_active": "No Active Streams"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "omada": {
 | 
				
			||||||
 | 
					        "connectedAp": "Connected APs",
 | 
				
			||||||
 | 
					        "activeUser": "Active devices",
 | 
				
			||||||
 | 
					        "alerts": "Alerts",
 | 
				
			||||||
 | 
					        "connectedGateway": "Connected gateways",
 | 
				
			||||||
 | 
					        "connectedSwitches": "Connected switches"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "nzbget": {
 | 
				
			||||||
 | 
					        "rate": "Rate",
 | 
				
			||||||
 | 
					        "remaining": "Remaining",
 | 
				
			||||||
 | 
					        "downloaded": "Downloaded"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "plex": {
 | 
				
			||||||
 | 
					        "streams": "Active Streams",
 | 
				
			||||||
 | 
					        "movies": "Movies",
 | 
				
			||||||
 | 
					        "tv": "TV Shows"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "sabnzbd": {
 | 
				
			||||||
 | 
					        "rate": "Rate",
 | 
				
			||||||
 | 
					        "queue": "Queue",
 | 
				
			||||||
 | 
					        "timeleft": "Time Left"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "rutorrent": {
 | 
				
			||||||
 | 
					        "active": "Active",
 | 
				
			||||||
 | 
					        "upload": "Upload",
 | 
				
			||||||
 | 
					        "download": "Download"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "transmission": {
 | 
				
			||||||
 | 
					        "download": "Download",
 | 
				
			||||||
 | 
					        "upload": "Upload",
 | 
				
			||||||
 | 
					        "leech": "Leech",
 | 
				
			||||||
 | 
					        "seed": "Seed"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "qbittorrent": {
 | 
				
			||||||
 | 
					        "download": "Download",
 | 
				
			||||||
 | 
					        "upload": "Upload",
 | 
				
			||||||
 | 
					        "leech": "Leech",
 | 
				
			||||||
 | 
					        "seed": "Seed"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "deluge": {
 | 
				
			||||||
 | 
					        "download": "Download",
 | 
				
			||||||
 | 
					        "upload": "Upload",
 | 
				
			||||||
 | 
					        "leech": "Leech",
 | 
				
			||||||
 | 
					        "seed": "Seed"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "downloadstation": {
 | 
				
			||||||
 | 
					        "download": "Download",
 | 
				
			||||||
 | 
					        "upload": "Upload",
 | 
				
			||||||
 | 
					        "leech": "Leech",
 | 
				
			||||||
 | 
					        "seed": "Seed"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "sonarr": {
 | 
				
			||||||
 | 
					        "wanted": "Wanted",
 | 
				
			||||||
 | 
					        "queued": "Queued",
 | 
				
			||||||
 | 
					        "series": "Series"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "radarr": {
 | 
				
			||||||
 | 
					        "wanted": "Wanted",
 | 
				
			||||||
 | 
					        "missing": "Missing",
 | 
				
			||||||
 | 
					        "queued": "Queued",
 | 
				
			||||||
 | 
					        "movies": "Movies"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "lidarr": {
 | 
				
			||||||
 | 
					        "wanted": "Wanted",
 | 
				
			||||||
 | 
					        "queued": "Queued",
 | 
				
			||||||
 | 
					        "albums": "Albums"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "readarr": {
 | 
				
			||||||
 | 
					        "wanted": "Wanted",
 | 
				
			||||||
 | 
					        "queued": "Queued",
 | 
				
			||||||
 | 
					        "books": "Books"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "bazarr": {
 | 
				
			||||||
 | 
					        "missingEpisodes": "Missing Episodes",
 | 
				
			||||||
 | 
					        "missingMovies": "Missing Movies"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "ombi": {
 | 
				
			||||||
 | 
					        "pending": "Pending",
 | 
				
			||||||
 | 
					        "approved": "Approved",
 | 
				
			||||||
 | 
					        "available": "Available"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "jellyseerr": {
 | 
				
			||||||
 | 
					        "pending": "Pending",
 | 
				
			||||||
 | 
					        "approved": "Approved",
 | 
				
			||||||
 | 
					        "available": "Available"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "overseerr": {
 | 
				
			||||||
 | 
					        "pending": "Pending",
 | 
				
			||||||
 | 
					        "processing": "Processing",
 | 
				
			||||||
 | 
					        "approved": "Approved",
 | 
				
			||||||
 | 
					        "available": "Available"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "pihole": {
 | 
				
			||||||
 | 
					        "queries": "Queries",
 | 
				
			||||||
 | 
					        "blocked": "Blocked",
 | 
				
			||||||
 | 
					        "gravity": "Gravity"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "adguard": {
 | 
				
			||||||
 | 
					        "queries": "Queries",
 | 
				
			||||||
 | 
					        "blocked": "Blocked",
 | 
				
			||||||
 | 
					        "filtered": "Filtered",
 | 
				
			||||||
 | 
					        "latency": "Latency"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "speedtest": {
 | 
				
			||||||
 | 
					        "upload": "Upload",
 | 
				
			||||||
 | 
					        "download": "Download",
 | 
				
			||||||
 | 
					        "ping": "Ping"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "portainer": {
 | 
				
			||||||
 | 
					        "running": "Running",
 | 
				
			||||||
 | 
					        "stopped": "Stopped",
 | 
				
			||||||
 | 
					        "total": "Total"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "tdarr": {
 | 
				
			||||||
 | 
					        "queue": "Queue",
 | 
				
			||||||
 | 
					        "processed": "Processed",
 | 
				
			||||||
 | 
					        "errored": "Errored",
 | 
				
			||||||
 | 
					        "saved": "Saved"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "traefik": {
 | 
				
			||||||
 | 
					        "routers": "Routers",
 | 
				
			||||||
 | 
					        "services": "Services",
 | 
				
			||||||
 | 
					        "middleware": "Middleware"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "coinmarketcap": {
 | 
				
			||||||
 | 
					        "configure": "Configure one or more crypto currencies to track",
 | 
				
			||||||
 | 
					        "1hour": "1 Hour",
 | 
				
			||||||
 | 
					        "1day": "1 Day",
 | 
				
			||||||
 | 
					        "7days": "7 Days",
 | 
				
			||||||
 | 
					        "30days": "30 Days"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "gotify": {
 | 
				
			||||||
 | 
					        "apps": "Applications",
 | 
				
			||||||
 | 
					        "clients": "Clients",
 | 
				
			||||||
 | 
					        "messages": "Messages"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "prowlarr": {
 | 
				
			||||||
 | 
					        "enableIndexers": "Indexers",
 | 
				
			||||||
 | 
					        "numberOfGrabs": "Grabs",
 | 
				
			||||||
 | 
					        "numberOfQueries": "Queries",
 | 
				
			||||||
 | 
					        "numberOfFailGrabs": "Fail Grabs",
 | 
				
			||||||
 | 
					        "numberOfFailQueries": "Fail Queries"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "jackett": {
 | 
				
			||||||
 | 
					        "configured": "Configured",
 | 
				
			||||||
 | 
					        "errored": "Errored"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "mastodon": {
 | 
				
			||||||
 | 
					        "user_count": "Users",
 | 
				
			||||||
 | 
					        "status_count": "Posts",
 | 
				
			||||||
 | 
					        "domain_count": "Domains"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "miniflux": {
 | 
				
			||||||
 | 
					        "read": "Read",
 | 
				
			||||||
 | 
					        "unread": "Unread"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "authentik": {
 | 
				
			||||||
 | 
					        "users": "Users",
 | 
				
			||||||
 | 
					        "loginsLast24H": "Logins (24h)",
 | 
				
			||||||
 | 
					        "failedLoginsLast24H": "Failed Logins (24h)"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "proxmox": {
 | 
				
			||||||
 | 
					        "mem": "MEM",
 | 
				
			||||||
 | 
					        "cpu": "CPU",
 | 
				
			||||||
 | 
					        "lxc": "LXC",
 | 
				
			||||||
 | 
					        "vms": "VMs"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "quicklaunch": {
 | 
				
			||||||
 | 
					        "bookmark": "Bookmark",
 | 
				
			||||||
 | 
					        "service": "Service"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "wmo": {
 | 
				
			||||||
 | 
					        "0-day": "Sunny",
 | 
				
			||||||
 | 
					        "1-day": "Mainly Sunny",
 | 
				
			||||||
 | 
					        "0-night": "Clear",
 | 
				
			||||||
 | 
					        "1-night": "Mainly Clear",
 | 
				
			||||||
 | 
					        "2-day": "Partly Cloudy",
 | 
				
			||||||
 | 
					        "2-night": "Partly Cloudy",
 | 
				
			||||||
 | 
					        "3-day": "Cloudy",
 | 
				
			||||||
 | 
					        "3-night": "Cloudy",
 | 
				
			||||||
 | 
					        "45-day": "Foggy",
 | 
				
			||||||
 | 
					        "45-night": "Foggy",
 | 
				
			||||||
 | 
					        "48-day": "Foggy",
 | 
				
			||||||
 | 
					        "48-night": "Foggy",
 | 
				
			||||||
 | 
					        "51-day": "Light Drizzle",
 | 
				
			||||||
 | 
					        "51-night": "Light Drizzle",
 | 
				
			||||||
 | 
					        "53-day": "Drizzle",
 | 
				
			||||||
 | 
					        "53-night": "Drizzle",
 | 
				
			||||||
 | 
					        "55-day": "Heavy Drizzle",
 | 
				
			||||||
 | 
					        "55-night": "Heavy Drizzle",
 | 
				
			||||||
 | 
					        "56-day": "Light Freezing Drizzle",
 | 
				
			||||||
 | 
					        "56-night": "Light Freezing Drizzle",
 | 
				
			||||||
 | 
					        "57-day": "Freezing Drizzle",
 | 
				
			||||||
 | 
					        "57-night": "Freezing Drizzle",
 | 
				
			||||||
 | 
					        "61-day": "Light Rain",
 | 
				
			||||||
 | 
					        "61-night": "Light Rain",
 | 
				
			||||||
 | 
					        "63-day": "Rain",
 | 
				
			||||||
 | 
					        "63-night": "Rain",
 | 
				
			||||||
 | 
					        "67-night": "Freezing Rain",
 | 
				
			||||||
 | 
					        "71-day": "Light Snow",
 | 
				
			||||||
 | 
					        "65-day": "Heavy Rain",
 | 
				
			||||||
 | 
					        "65-night": "Heavy Rain",
 | 
				
			||||||
 | 
					        "66-day": "Freezing Rain",
 | 
				
			||||||
 | 
					        "66-night": "Freezing Rain",
 | 
				
			||||||
 | 
					        "67-day": "Freezing Rain",
 | 
				
			||||||
 | 
					        "71-night": "Light Snow",
 | 
				
			||||||
 | 
					        "73-day": "Snow",
 | 
				
			||||||
 | 
					        "73-night": "Snow",
 | 
				
			||||||
 | 
					        "75-day": "Heavy Snow",
 | 
				
			||||||
 | 
					        "75-night": "Heavy Snow",
 | 
				
			||||||
 | 
					        "77-day": "Snow Grains",
 | 
				
			||||||
 | 
					        "77-night": "Snow Grains",
 | 
				
			||||||
 | 
					        "80-day": "Light Showers",
 | 
				
			||||||
 | 
					        "80-night": "Light Showers",
 | 
				
			||||||
 | 
					        "81-day": "Showers",
 | 
				
			||||||
 | 
					        "81-night": "Showers",
 | 
				
			||||||
 | 
					        "82-day": "Heavy Showers",
 | 
				
			||||||
 | 
					        "82-night": "Heavy Showers",
 | 
				
			||||||
 | 
					        "85-day": "Snow Showers",
 | 
				
			||||||
 | 
					        "85-night": "Snow Showers",
 | 
				
			||||||
 | 
					        "86-day": "Snow Showers",
 | 
				
			||||||
 | 
					        "86-night": "Snow Showers",
 | 
				
			||||||
 | 
					        "95-day": "Thunderstorm",
 | 
				
			||||||
 | 
					        "95-night": "Thunderstorm",
 | 
				
			||||||
 | 
					        "96-day": "Thunderstorm With Hail",
 | 
				
			||||||
 | 
					        "96-night": "Thunderstorm With Hail",
 | 
				
			||||||
 | 
					        "99-day": "Thunderstorm With Hail",
 | 
				
			||||||
 | 
					        "99-night": "Thunderstorm With Hail"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "homebridge": {
 | 
				
			||||||
 | 
					        "available_update": "System",
 | 
				
			||||||
 | 
					        "updates": "Updates",
 | 
				
			||||||
 | 
					        "update_available": "Update Available",
 | 
				
			||||||
 | 
					        "up_to_date": "Up to Date",
 | 
				
			||||||
 | 
					        "child_bridges": "Child Bridges",
 | 
				
			||||||
 | 
					        "child_bridges_status": "{{ok}}/{{total}}"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "watchtower": {
 | 
				
			||||||
 | 
					        "containers_scanned": "Scanned",
 | 
				
			||||||
 | 
					        "containers_updated": "Updated",
 | 
				
			||||||
 | 
					        "containers_failed": "Failed"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "tubearchivist": {
 | 
				
			||||||
 | 
					        "downloads": "Queue",
 | 
				
			||||||
 | 
					        "videos": "Videos",
 | 
				
			||||||
 | 
					        "channels": "Channels",
 | 
				
			||||||
 | 
					        "playlists": "Playlists"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "truenas": {
 | 
				
			||||||
 | 
					        "load": "System Load",
 | 
				
			||||||
 | 
					        "uptime": "Uptime",
 | 
				
			||||||
 | 
					        "alerts": "Alerts",
 | 
				
			||||||
 | 
					        "time": "{{value, number(style: unit; unitDisplay: long;)}}"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "pyload": {
 | 
				
			||||||
 | 
					        "speed": "Speed",
 | 
				
			||||||
 | 
					        "active": "Active",
 | 
				
			||||||
 | 
					        "queue": "Queue",
 | 
				
			||||||
 | 
					        "total": "Total"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "hdhomerun": {
 | 
				
			||||||
 | 
					        "channels": "Channels",
 | 
				
			||||||
 | 
					        "hd": "HD"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "scrutiny": {
 | 
				
			||||||
 | 
					        "passed": "Passed",
 | 
				
			||||||
 | 
					        "failed": "Failed",
 | 
				
			||||||
 | 
					        "unknown": "Unknown"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "paperlessngx": {
 | 
				
			||||||
 | 
					        "inbox": "Inbox",
 | 
				
			||||||
 | 
					        "total": "Total"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "nextdns": {
 | 
				
			||||||
 | 
					        "wait": "Please Wait",
 | 
				
			||||||
 | 
					        "no_devices": "No Device Data Received"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "mikrotik": {
 | 
				
			||||||
 | 
					        "cpuLoad": "CPU Load",
 | 
				
			||||||
 | 
					        "memoryUsed": "Memory Used",
 | 
				
			||||||
 | 
					        "uptime": "Uptime",
 | 
				
			||||||
 | 
					        "numberOfLeases": "Leases"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "xteve": {
 | 
				
			||||||
 | 
					        "streams_all": "All Streams",
 | 
				
			||||||
 | 
					        "streams_active": "Active Streams",
 | 
				
			||||||
 | 
					        "streams_xepg": "XEPG Channels"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "opnsense": {
 | 
				
			||||||
 | 
					        "cpu": "CPU Load",
 | 
				
			||||||
 | 
					        "memory": "Active Memory",
 | 
				
			||||||
 | 
					        "wanUpload": "WAN Upload",
 | 
				
			||||||
 | 
					        "wanDownload": "WAN Download"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    "widget": {
 | 
					    "widget": {
 | 
				
			||||||
        "missing_type": "Widget ausente: {{type}}",
 | 
					        "missing_type": "Tipo de Widget ausente: {{type}}",
 | 
				
			||||||
        "api_error": "Erro da API",
 | 
					        "api_error": "Erro da API",
 | 
				
			||||||
        "status": "Estado",
 | 
					        "status": "Estado",
 | 
				
			||||||
        "information": "Informação",
 | 
					        "information": "Informação",
 | 
				
			||||||
@ -14,8 +14,8 @@
 | 
				
			|||||||
    "resources": {
 | 
					    "resources": {
 | 
				
			||||||
        "total": "Total",
 | 
					        "total": "Total",
 | 
				
			||||||
        "free": "Livre",
 | 
					        "free": "Livre",
 | 
				
			||||||
        "used": "Usado",
 | 
					        "used": "Utilizado",
 | 
				
			||||||
        "load": "Carregar",
 | 
					        "load": "Carga",
 | 
				
			||||||
        "cpu": "CPU"
 | 
					        "cpu": "CPU"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "docker": {
 | 
					    "docker": {
 | 
				
			||||||
@ -53,7 +53,7 @@
 | 
				
			|||||||
        "wanted": "Desejado",
 | 
					        "wanted": "Desejado",
 | 
				
			||||||
        "queued": "Fila",
 | 
					        "queued": "Fila",
 | 
				
			||||||
        "movies": "Filmes",
 | 
					        "movies": "Filmes",
 | 
				
			||||||
        "missing": "Missing"
 | 
					        "missing": "Faltando"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "readarr": {
 | 
					    "readarr": {
 | 
				
			||||||
        "wanted": "Desejados",
 | 
					        "wanted": "Desejados",
 | 
				
			||||||
@ -111,14 +111,14 @@
 | 
				
			|||||||
    "weather": {
 | 
					    "weather": {
 | 
				
			||||||
        "current": "Localização atual",
 | 
					        "current": "Localização atual",
 | 
				
			||||||
        "allow": "Clicar para permitir",
 | 
					        "allow": "Clicar para permitir",
 | 
				
			||||||
        "updating": "A atualizar",
 | 
					        "updating": "Atualizando",
 | 
				
			||||||
        "wait": "Por favor aguarde"
 | 
					        "wait": "Por favor aguarde"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "overseerr": {
 | 
					    "overseerr": {
 | 
				
			||||||
        "pending": "Pendente",
 | 
					        "pending": "Pendente",
 | 
				
			||||||
        "approved": "Aprovado",
 | 
					        "approved": "Aprovado",
 | 
				
			||||||
        "available": "Disponível",
 | 
					        "available": "Disponível",
 | 
				
			||||||
        "processing": "Processing"
 | 
					        "processing": "Processando"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "sabnzbd": {
 | 
					    "sabnzbd": {
 | 
				
			||||||
        "rate": "Taxa",
 | 
					        "rate": "Taxa",
 | 
				
			||||||
@ -192,9 +192,9 @@
 | 
				
			|||||||
        "transferRate": "Taxa"
 | 
					        "transferRate": "Taxa"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "authentik": {
 | 
					    "authentik": {
 | 
				
			||||||
        "loginsLast24H": "Logins (24h)",
 | 
					        "loginsLast24H": "Inícios de sessão (24h)",
 | 
				
			||||||
        "failedLoginsLast24H": "Failed Logins (24h)",
 | 
					        "failedLoginsLast24H": "Inícios de sessão falhados (24h)",
 | 
				
			||||||
        "users": "Users"
 | 
					        "users": "Utilizadores"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "proxmox": {
 | 
					    "proxmox": {
 | 
				
			||||||
        "mem": "MEM",
 | 
					        "mem": "MEM",
 | 
				
			||||||
@ -204,13 +204,13 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "unifi": {
 | 
					    "unifi": {
 | 
				
			||||||
        "users": "Utilizadores",
 | 
					        "users": "Utilizadores",
 | 
				
			||||||
        "uptime": "Tempo de Atividade do Sistema",
 | 
					        "uptime": "Sistema Ativo",
 | 
				
			||||||
        "days": "Dias",
 | 
					        "days": "Dias",
 | 
				
			||||||
        "wan": "WAN",
 | 
					        "wan": "WAN",
 | 
				
			||||||
        "lan_users": "Utilizadores LAN",
 | 
					        "lan_users": "Utilizadores LAN",
 | 
				
			||||||
        "wlan_users": "Utilizadores WLAN",
 | 
					        "wlan_users": "Utilizadores WLAN",
 | 
				
			||||||
        "up": "Ligados",
 | 
					        "up": "Ligado",
 | 
				
			||||||
        "down": "Desligados",
 | 
					        "down": "Desligado",
 | 
				
			||||||
        "wait": "Por favor, aguarde",
 | 
					        "wait": "Por favor, aguarde",
 | 
				
			||||||
        "lan": "LAN",
 | 
					        "lan": "LAN",
 | 
				
			||||||
        "wlan": "WLAN",
 | 
					        "wlan": "WLAN",
 | 
				
			||||||
@ -241,7 +241,7 @@
 | 
				
			|||||||
        "2-night": "Parcialmente nublado",
 | 
					        "2-night": "Parcialmente nublado",
 | 
				
			||||||
        "3-day": "Nublado",
 | 
					        "3-day": "Nublado",
 | 
				
			||||||
        "3-night": "Nublado",
 | 
					        "3-night": "Nublado",
 | 
				
			||||||
        "99-night": "Thunderstorm With Hail",
 | 
					        "99-night": "Trovoada com granizo",
 | 
				
			||||||
        "45-day": "Nevoeiro",
 | 
					        "45-day": "Nevoeiro",
 | 
				
			||||||
        "45-night": "Nevoeiro",
 | 
					        "45-night": "Nevoeiro",
 | 
				
			||||||
        "48-day": "Nevoeiro",
 | 
					        "48-day": "Nevoeiro",
 | 
				
			||||||
@ -257,160 +257,160 @@
 | 
				
			|||||||
        "57-day": "Freezing Drizzle",
 | 
					        "57-day": "Freezing Drizzle",
 | 
				
			||||||
        "57-night": "Freezing Drizzle",
 | 
					        "57-night": "Freezing Drizzle",
 | 
				
			||||||
        "66-day": "Freezing Rain",
 | 
					        "66-day": "Freezing Rain",
 | 
				
			||||||
        "61-day": "Light Rain",
 | 
					        "61-day": "Chuva fraca",
 | 
				
			||||||
        "61-night": "Light Rain",
 | 
					        "61-night": "Chuva fraca",
 | 
				
			||||||
        "63-day": "Rain",
 | 
					        "63-day": "Chuva",
 | 
				
			||||||
        "63-night": "Rain",
 | 
					        "63-night": "Chuva",
 | 
				
			||||||
        "65-day": "Heavy Rain",
 | 
					        "65-day": "Chuva forte",
 | 
				
			||||||
        "66-night": "Freezing Rain",
 | 
					        "66-night": "Freezing Rain",
 | 
				
			||||||
        "65-night": "Heavy Rain",
 | 
					        "65-night": "Chuva forte",
 | 
				
			||||||
        "67-day": "Freezing Rain",
 | 
					        "67-day": "Freezing Rain",
 | 
				
			||||||
        "67-night": "Freezing Rain",
 | 
					        "67-night": "Freezing Rain",
 | 
				
			||||||
        "71-day": "Light Snow",
 | 
					        "71-day": "Neve fraca",
 | 
				
			||||||
        "71-night": "Light Snow",
 | 
					        "71-night": "Neve fraca",
 | 
				
			||||||
        "73-day": "Snow",
 | 
					        "73-day": "Neve",
 | 
				
			||||||
        "73-night": "Snow",
 | 
					        "73-night": "Neve",
 | 
				
			||||||
        "75-day": "Heavy Snow",
 | 
					        "75-day": "Neve forte",
 | 
				
			||||||
        "75-night": "Heavy Snow",
 | 
					        "75-night": "Neve forte",
 | 
				
			||||||
        "77-day": "Snow Grains",
 | 
					        "77-day": "Snow Grains",
 | 
				
			||||||
        "77-night": "Snow Grains",
 | 
					        "77-night": "Snow Grains",
 | 
				
			||||||
        "80-day": "Light Showers",
 | 
					        "80-day": "Neve fraca",
 | 
				
			||||||
        "80-night": "Light Showers",
 | 
					        "80-night": "Chuviscos ligeiros",
 | 
				
			||||||
        "81-day": "Showers",
 | 
					        "81-day": "Chuviscos",
 | 
				
			||||||
        "81-night": "Showers",
 | 
					        "81-night": "Chuviscos",
 | 
				
			||||||
        "82-day": "Heavy Showers",
 | 
					        "82-day": "Chuviscos fortes",
 | 
				
			||||||
        "82-night": "Heavy Showers",
 | 
					        "82-night": "Chuviscos fortes",
 | 
				
			||||||
        "85-day": "Snow Showers",
 | 
					        "85-day": "Snow Showers",
 | 
				
			||||||
        "85-night": "Snow Showers",
 | 
					        "85-night": "Snow Showers",
 | 
				
			||||||
        "86-day": "Snow Showers",
 | 
					        "86-day": "Snow Showers",
 | 
				
			||||||
        "86-night": "Snow Showers",
 | 
					        "86-night": "Snow Showers",
 | 
				
			||||||
        "95-day": "Thunderstorm",
 | 
					        "95-day": "Trovoada",
 | 
				
			||||||
        "95-night": "Thunderstorm",
 | 
					        "95-night": "Trovoada",
 | 
				
			||||||
        "96-day": "Thunderstorm With Hail",
 | 
					        "96-day": "Trovoada com granizo",
 | 
				
			||||||
        "96-night": "Thunderstorm With Hail",
 | 
					        "96-night": "Trovoada com granizo",
 | 
				
			||||||
        "99-day": "Thunderstorm With Hail"
 | 
					        "99-day": "Trovoada com granizo"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "quicklaunch": {
 | 
					    "quicklaunch": {
 | 
				
			||||||
        "bookmark": "Marcador",
 | 
					        "bookmark": "Marcador",
 | 
				
			||||||
        "service": "Serviço"
 | 
					        "service": "Serviço"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "homebridge": {
 | 
					    "homebridge": {
 | 
				
			||||||
        "available_update": "System",
 | 
					        "available_update": "Sistema",
 | 
				
			||||||
        "updates": "Updates",
 | 
					        "updates": "Atualizações",
 | 
				
			||||||
        "update_available": "Update Available",
 | 
					        "update_available": "Atualização disponível",
 | 
				
			||||||
        "up_to_date": "Up to Date",
 | 
					        "up_to_date": "Atualizado",
 | 
				
			||||||
        "child_bridges": "Child Bridges",
 | 
					        "child_bridges": "Child Bridges",
 | 
				
			||||||
        "child_bridges_status": "{{ok}}/{{total}}"
 | 
					        "child_bridges_status": "{{ok}}/{{total}}"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "autobrr": {
 | 
					    "autobrr": {
 | 
				
			||||||
        "approvedPushes": "Approved",
 | 
					        "approvedPushes": "Aprovado",
 | 
				
			||||||
        "rejectedPushes": "Rejected",
 | 
					        "rejectedPushes": "Rejeitado",
 | 
				
			||||||
        "filters": "Filters",
 | 
					        "filters": "Filtros",
 | 
				
			||||||
        "indexers": "Indexers"
 | 
					        "indexers": "Indexadores"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "watchtower": {
 | 
					    "watchtower": {
 | 
				
			||||||
        "containers_scanned": "Scanned",
 | 
					        "containers_scanned": "Verificado",
 | 
				
			||||||
        "containers_updated": "Updated",
 | 
					        "containers_updated": "Atualizado",
 | 
				
			||||||
        "containers_failed": "Failed"
 | 
					        "containers_failed": "Falhou"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "tubearchivist": {
 | 
					    "tubearchivist": {
 | 
				
			||||||
        "downloads": "Queue",
 | 
					        "downloads": "Fila",
 | 
				
			||||||
        "videos": "Videos",
 | 
					        "videos": "Vídeos",
 | 
				
			||||||
        "channels": "Channels",
 | 
					        "channels": "Canais",
 | 
				
			||||||
        "playlists": "Playlists"
 | 
					        "playlists": "Listas"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "truenas": {
 | 
					    "truenas": {
 | 
				
			||||||
        "load": "System Load",
 | 
					        "load": "Carga do sistema",
 | 
				
			||||||
        "uptime": "Uptime",
 | 
					        "uptime": "Ligado",
 | 
				
			||||||
        "alerts": "Alerts",
 | 
					        "alerts": "Alertas",
 | 
				
			||||||
        "time": "{{value, number(style: unit; unitDisplay: long;)}}"
 | 
					        "time": "{{value, number(style: unit; unitDisplay: long;)}}"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "navidrome": {
 | 
					    "navidrome": {
 | 
				
			||||||
        "nothing_streaming": "No Active Streams",
 | 
					        "nothing_streaming": "Sem streams ativos",
 | 
				
			||||||
        "please_wait": "Please Wait"
 | 
					        "please_wait": "Por favor aguarde"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "pyload": {
 | 
					    "pyload": {
 | 
				
			||||||
        "queue": "Queue",
 | 
					        "queue": "Fila",
 | 
				
			||||||
        "total": "Total",
 | 
					        "total": "Total",
 | 
				
			||||||
        "speed": "Speed",
 | 
					        "speed": "Velocidade",
 | 
				
			||||||
        "active": "Active"
 | 
					        "active": "Ativo"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "gluetun": {
 | 
					    "gluetun": {
 | 
				
			||||||
        "region": "Region",
 | 
					        "region": "Região",
 | 
				
			||||||
        "country": "Country",
 | 
					        "country": "País",
 | 
				
			||||||
        "public_ip": "Public IP"
 | 
					        "public_ip": "IP público"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "hdhomerun": {
 | 
					    "hdhomerun": {
 | 
				
			||||||
        "channels": "Channels",
 | 
					        "channels": "Canais",
 | 
				
			||||||
        "hd": "HD"
 | 
					        "hd": "HD"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "ping": {
 | 
					    "ping": {
 | 
				
			||||||
        "error": "Erro",
 | 
					        "error": "Erro",
 | 
				
			||||||
        "ping": "Ping"
 | 
					        "ping": "Tempo de resposta"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "scrutiny": {
 | 
					    "scrutiny": {
 | 
				
			||||||
        "passed": "Passed",
 | 
					        "passed": "Aprovado",
 | 
				
			||||||
        "failed": "Failed",
 | 
					        "failed": "Falhou",
 | 
				
			||||||
        "unknown": "Unknown"
 | 
					        "unknown": "Desconhecido"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "paperlessngx": {
 | 
					    "paperlessngx": {
 | 
				
			||||||
        "inbox": "Inbox",
 | 
					        "inbox": "Caixa de entrada",
 | 
				
			||||||
        "total": "Total"
 | 
					        "total": "Total"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "deluge": {
 | 
					    "deluge": {
 | 
				
			||||||
        "download": "Download",
 | 
					        "download": "Descarregar",
 | 
				
			||||||
        "upload": "Upload",
 | 
					        "upload": "Enviar",
 | 
				
			||||||
        "leech": "Leech",
 | 
					        "leech": "Leech",
 | 
				
			||||||
        "seed": "Seed"
 | 
					        "seed": "Semente"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "flood": {
 | 
					    "flood": {
 | 
				
			||||||
        "download": "Descarregar",
 | 
					        "download": "Descarregar",
 | 
				
			||||||
        "upload": "Carregar",
 | 
					        "upload": "Carregar",
 | 
				
			||||||
        "leech": "Leech",
 | 
					        "leech": "Leech",
 | 
				
			||||||
        "seed": "Seed"
 | 
					        "seed": "Semente"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "tdarr": {
 | 
					    "tdarr": {
 | 
				
			||||||
        "queue": "Queue",
 | 
					        "queue": "Fila",
 | 
				
			||||||
        "processed": "Processed",
 | 
					        "processed": "Processado",
 | 
				
			||||||
        "errored": "Errored",
 | 
					        "errored": "Erro",
 | 
				
			||||||
        "saved": "Saved"
 | 
					        "saved": "Guardado"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "miniflux": {
 | 
					    "miniflux": {
 | 
				
			||||||
        "read": "Read",
 | 
					        "read": "Lido",
 | 
				
			||||||
        "unread": "Unread"
 | 
					        "unread": "Não lido"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "nextdns": {
 | 
					    "nextdns": {
 | 
				
			||||||
        "wait": "Please Wait",
 | 
					        "wait": "Aguarde",
 | 
				
			||||||
        "no_devices": "No Device Data Received"
 | 
					        "no_devices": "Nenhum dado do dispositivo recebido"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "omada": {
 | 
					    "omada": {
 | 
				
			||||||
        "connectedAp": "Connected APs",
 | 
					        "connectedAp": "APs Ligados",
 | 
				
			||||||
        "activeUser": "Active devices",
 | 
					        "activeUser": "Dispositivos activos",
 | 
				
			||||||
        "alerts": "Alerts",
 | 
					        "alerts": "Alertas",
 | 
				
			||||||
        "connectedGateway": "Connected gateways",
 | 
					        "connectedGateway": "Gateways ligados",
 | 
				
			||||||
        "connectedSwitches": "Connected switches"
 | 
					        "connectedSwitches": "Switches ligados"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "downloadstation": {
 | 
					    "downloadstation": {
 | 
				
			||||||
        "download": "Download",
 | 
					        "download": "Descarregar",
 | 
				
			||||||
        "upload": "Upload",
 | 
					        "upload": "Enviar",
 | 
				
			||||||
        "leech": "Leech",
 | 
					        "leech": "Leech",
 | 
				
			||||||
        "seed": "Seed"
 | 
					        "seed": "Semente"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "mikrotik": {
 | 
					    "mikrotik": {
 | 
				
			||||||
        "cpuLoad": "CPU Load",
 | 
					        "cpuLoad": "Carga do CPU",
 | 
				
			||||||
        "memoryUsed": "Memory Used",
 | 
					        "memoryUsed": "Memória Utilizada",
 | 
				
			||||||
        "uptime": "Uptime",
 | 
					        "uptime": "Ativo",
 | 
				
			||||||
        "numberOfLeases": "Leases"
 | 
					        "numberOfLeases": "Leases"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "xteve": {
 | 
					    "xteve": {
 | 
				
			||||||
        "streams_all": "All Streams",
 | 
					        "streams_all": "Todos os Streams",
 | 
				
			||||||
        "streams_active": "Active Streams",
 | 
					        "streams_active": "Streams ativos",
 | 
				
			||||||
        "streams_xepg": "XEPG Channels"
 | 
					        "streams_xepg": "Canais XEPG"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "opnsense": {
 | 
					    "opnsense": {
 | 
				
			||||||
        "cpu": "CPU Load",
 | 
					        "cpu": "Carga do CPU",
 | 
				
			||||||
        "memory": "Active Memory",
 | 
					        "memory": "Memória Ativa",
 | 
				
			||||||
        "wanUpload": "WAN Upload",
 | 
					        "wanUpload": "Envio WAN",
 | 
				
			||||||
        "wanDownload": "WAN Download"
 | 
					        "wanDownload": "WAN Descarga"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,116 +1,116 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    "widget": {
 | 
					    "widget": {
 | 
				
			||||||
        "missing_type": "Missing Widget Type: {{type}}",
 | 
					        "missing_type": "遺失的小工具類型: {{type}}",
 | 
				
			||||||
        "api_error": "API Error",
 | 
					        "api_error": "API錯誤",
 | 
				
			||||||
        "status": "Status",
 | 
					        "status": "狀態",
 | 
				
			||||||
        "information": "Information",
 | 
					        "information": "資訊",
 | 
				
			||||||
        "url": "URL",
 | 
					        "url": "URL",
 | 
				
			||||||
        "raw_error": "Raw Error",
 | 
					        "raw_error": "Raw Error",
 | 
				
			||||||
        "response_data": "Response Data"
 | 
					        "response_data": "Response Data"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "weather": {
 | 
					    "weather": {
 | 
				
			||||||
        "current": "Current Location",
 | 
					        "current": "目前位置",
 | 
				
			||||||
        "allow": "Click to allow",
 | 
					        "allow": "點擊以允許",
 | 
				
			||||||
        "updating": "Updating",
 | 
					        "updating": "更新中",
 | 
				
			||||||
        "wait": "Please wait"
 | 
					        "wait": "請稍後"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "docker": {
 | 
					    "docker": {
 | 
				
			||||||
        "rx": "RX",
 | 
					        "rx": "接收",
 | 
				
			||||||
        "offline": "Offline",
 | 
					        "offline": "離線",
 | 
				
			||||||
        "tx": "TX",
 | 
					        "tx": "發送",
 | 
				
			||||||
        "mem": "MEM",
 | 
					        "mem": "記憶體",
 | 
				
			||||||
        "cpu": "CPU",
 | 
					        "cpu": "處理器",
 | 
				
			||||||
        "error": "Error",
 | 
					        "error": "錯誤",
 | 
				
			||||||
        "unknown": "Unknown"
 | 
					        "unknown": "未知的"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "emby": {
 | 
					    "emby": {
 | 
				
			||||||
        "playing": "Playing",
 | 
					        "playing": "正在播放",
 | 
				
			||||||
        "transcoding": "Transcoding",
 | 
					        "transcoding": "轉碼",
 | 
				
			||||||
        "bitrate": "Bitrate",
 | 
					        "bitrate": "位元率",
 | 
				
			||||||
        "no_active": "No Active Streams"
 | 
					        "no_active": "暫無撥放"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "tautulli": {
 | 
					    "tautulli": {
 | 
				
			||||||
        "playing": "Playing",
 | 
					        "playing": "正在播放",
 | 
				
			||||||
        "transcoding": "Transcoding",
 | 
					        "transcoding": "轉碼",
 | 
				
			||||||
        "bitrate": "Bitrate",
 | 
					        "bitrate": "位元率",
 | 
				
			||||||
        "no_active": "No Active Streams"
 | 
					        "no_active": "暫無撥放"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "jellyseerr": {
 | 
					    "jellyseerr": {
 | 
				
			||||||
        "pending": "Pending",
 | 
					        "pending": "待定",
 | 
				
			||||||
        "approved": "Approved",
 | 
					        "approved": "已接受",
 | 
				
			||||||
        "available": "Available"
 | 
					        "available": "可用的"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "search": {
 | 
					    "search": {
 | 
				
			||||||
        "placeholder": "Search…"
 | 
					        "placeholder": "搜尋…"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "resources": {
 | 
					    "resources": {
 | 
				
			||||||
        "total": "Total",
 | 
					        "total": "全部",
 | 
				
			||||||
        "free": "Free",
 | 
					        "free": "剩餘",
 | 
				
			||||||
        "used": "Used",
 | 
					        "used": "已使用",
 | 
				
			||||||
        "load": "Load",
 | 
					        "load": "負載",
 | 
				
			||||||
        "cpu": "CPU"
 | 
					        "cpu": "CPU"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "nzbget": {
 | 
					    "nzbget": {
 | 
				
			||||||
        "rate": "Rate",
 | 
					        "rate": "速率",
 | 
				
			||||||
        "remaining": "Remaining",
 | 
					        "remaining": "剩餘",
 | 
				
			||||||
        "downloaded": "Downloaded"
 | 
					        "downloaded": "已下載"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "sabnzbd": {
 | 
					    "sabnzbd": {
 | 
				
			||||||
        "rate": "Rate",
 | 
					        "rate": "速率",
 | 
				
			||||||
        "queue": "Queue",
 | 
					        "queue": "佇列",
 | 
				
			||||||
        "timeleft": "Time Left"
 | 
					        "timeleft": "剩餘時間"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "rutorrent": {
 | 
					    "rutorrent": {
 | 
				
			||||||
        "active": "Active",
 | 
					        "active": "Active",
 | 
				
			||||||
        "upload": "Upload",
 | 
					        "upload": "上傳",
 | 
				
			||||||
        "download": "Download"
 | 
					        "download": "下載"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "radarr": {
 | 
					    "radarr": {
 | 
				
			||||||
        "movies": "Movies",
 | 
					        "movies": "電影",
 | 
				
			||||||
        "wanted": "Wanted",
 | 
					        "wanted": "欲觀看",
 | 
				
			||||||
        "queued": "Queued",
 | 
					        "queued": "已加入佇列",
 | 
				
			||||||
        "missing": "Missing"
 | 
					        "missing": "遺失"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "sonarr": {
 | 
					    "sonarr": {
 | 
				
			||||||
        "wanted": "Wanted",
 | 
					        "wanted": "欲觀看",
 | 
				
			||||||
        "queued": "Queued",
 | 
					        "queued": "已加入佇列",
 | 
				
			||||||
        "series": "Series"
 | 
					        "series": "系列"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "readarr": {
 | 
					    "readarr": {
 | 
				
			||||||
        "wanted": "Wanted",
 | 
					        "wanted": "欲觀看",
 | 
				
			||||||
        "queued": "Queued",
 | 
					        "queued": "已加入佇列",
 | 
				
			||||||
        "books": "Books"
 | 
					        "books": "書籍"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "ombi": {
 | 
					    "ombi": {
 | 
				
			||||||
        "pending": "Pending",
 | 
					        "pending": "待定",
 | 
				
			||||||
        "approved": "Approved",
 | 
					        "approved": "已接受",
 | 
				
			||||||
        "available": "Available"
 | 
					        "available": "可用的"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "overseerr": {
 | 
					    "overseerr": {
 | 
				
			||||||
        "pending": "Pending",
 | 
					        "pending": "待定",
 | 
				
			||||||
        "approved": "Approved",
 | 
					        "approved": "已接受",
 | 
				
			||||||
        "available": "Available",
 | 
					        "available": "可用的",
 | 
				
			||||||
        "processing": "Processing"
 | 
					        "processing": "處理中"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "pihole": {
 | 
					    "pihole": {
 | 
				
			||||||
        "queries": "Queries",
 | 
					        "queries": "查詢",
 | 
				
			||||||
        "blocked": "Blocked",
 | 
					        "blocked": "已阻擋",
 | 
				
			||||||
        "gravity": "Gravity"
 | 
					        "gravity": "Gravity"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "speedtest": {
 | 
					    "speedtest": {
 | 
				
			||||||
        "upload": "Upload",
 | 
					        "upload": "上行",
 | 
				
			||||||
        "download": "Download",
 | 
					        "download": "下行",
 | 
				
			||||||
        "ping": "Ping"
 | 
					        "ping": "Ping"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "portainer": {
 | 
					    "portainer": {
 | 
				
			||||||
        "running": "Running",
 | 
					        "running": "運行中",
 | 
				
			||||||
        "stopped": "Stopped",
 | 
					        "stopped": "已停止",
 | 
				
			||||||
        "total": "Total"
 | 
					        "total": "總數"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "traefik": {
 | 
					    "traefik": {
 | 
				
			||||||
        "routers": "Routers",
 | 
					        "routers": "路由器",
 | 
				
			||||||
        "services": "Services",
 | 
					        "services": "服務",
 | 
				
			||||||
        "middleware": "Middleware"
 | 
					        "middleware": "中介軟體"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "gotify": {
 | 
					    "gotify": {
 | 
				
			||||||
        "clients": "Clients",
 | 
					        "clients": "Clients",
 | 
				
			||||||
@ -118,8 +118,8 @@
 | 
				
			|||||||
        "messages": "Messages"
 | 
					        "messages": "Messages"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "npm": {
 | 
					    "npm": {
 | 
				
			||||||
        "enabled": "Enabled",
 | 
					        "enabled": "已啟用",
 | 
				
			||||||
        "disabled": "Disabled",
 | 
					        "disabled": "已停用",
 | 
				
			||||||
        "total": "Total"
 | 
					        "total": "Total"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "coinmarketcap": {
 | 
					    "coinmarketcap": {
 | 
				
			||||||
@ -137,8 +137,8 @@
 | 
				
			|||||||
        "numberOfFailQueries": "Fail Queries"
 | 
					        "numberOfFailQueries": "Fail Queries"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "transmission": {
 | 
					    "transmission": {
 | 
				
			||||||
        "download": "Download",
 | 
					        "download": "下載",
 | 
				
			||||||
        "upload": "Upload",
 | 
					        "upload": "上傳",
 | 
				
			||||||
        "leech": "Leech",
 | 
					        "leech": "Leech",
 | 
				
			||||||
        "seed": "Seed"
 | 
					        "seed": "Seed"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
@ -147,23 +147,23 @@
 | 
				
			|||||||
        "errored": "Errored"
 | 
					        "errored": "Errored"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "bazarr": {
 | 
					    "bazarr": {
 | 
				
			||||||
        "missingEpisodes": "Missing Episodes",
 | 
					        "missingEpisodes": "缺失的劇集",
 | 
				
			||||||
        "missingMovies": "Missing Movies"
 | 
					        "missingMovies": "缺失的電影"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "lidarr": {
 | 
					    "lidarr": {
 | 
				
			||||||
        "wanted": "Wanted",
 | 
					        "wanted": "欲觀看",
 | 
				
			||||||
        "queued": "Queued",
 | 
					        "queued": "已加入佇列",
 | 
				
			||||||
        "albums": "Albums"
 | 
					        "albums": "專輯"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "adguard": {
 | 
					    "adguard": {
 | 
				
			||||||
        "queries": "Queries",
 | 
					        "queries": "查詢",
 | 
				
			||||||
        "blocked": "Blocked",
 | 
					        "blocked": "已阻擋",
 | 
				
			||||||
        "filtered": "Filtered",
 | 
					        "filtered": "已過濾",
 | 
				
			||||||
        "latency": "Latency"
 | 
					        "latency": "延遲"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "qbittorrent": {
 | 
					    "qbittorrent": {
 | 
				
			||||||
        "download": "Download",
 | 
					        "download": "下載",
 | 
				
			||||||
        "upload": "Upload",
 | 
					        "upload": "上傳",
 | 
				
			||||||
        "leech": "Leech",
 | 
					        "leech": "Leech",
 | 
				
			||||||
        "seed": "Seed"
 | 
					        "seed": "Seed"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
@ -190,25 +190,25 @@
 | 
				
			|||||||
        "vms": "VMs"
 | 
					        "vms": "VMs"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "unifi": {
 | 
					    "unifi": {
 | 
				
			||||||
        "users": "Users",
 | 
					        "users": "使用者",
 | 
				
			||||||
        "uptime": "System Uptime",
 | 
					        "uptime": "系統運行時間",
 | 
				
			||||||
        "days": "Days",
 | 
					        "days": "天",
 | 
				
			||||||
        "wan": "WAN",
 | 
					        "wan": "WAN",
 | 
				
			||||||
        "lan_users": "LAN Users",
 | 
					        "lan_users": "LAN使用者",
 | 
				
			||||||
        "wlan_users": "WLAN Users",
 | 
					        "wlan_users": "WLAN使用者",
 | 
				
			||||||
        "up": "UP",
 | 
					        "up": "UP",
 | 
				
			||||||
        "down": "DOWN",
 | 
					        "down": "DOWN",
 | 
				
			||||||
        "wait": "Please wait",
 | 
					        "wait": "請稍後",
 | 
				
			||||||
        "lan": "LAN",
 | 
					        "lan": "LAN",
 | 
				
			||||||
        "wlan": "WLAN",
 | 
					        "wlan": "WLAN",
 | 
				
			||||||
        "devices": "Devices",
 | 
					        "devices": "設備",
 | 
				
			||||||
        "lan_devices": "LAN Devices",
 | 
					        "lan_devices": "LAN設備",
 | 
				
			||||||
        "wlan_devices": "WLAN Devices"
 | 
					        "wlan_devices": "WLAN設備"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "plex": {
 | 
					    "plex": {
 | 
				
			||||||
        "streams": "Active Streams",
 | 
					        "streams": "正在串流",
 | 
				
			||||||
        "movies": "Movies",
 | 
					        "movies": "電影",
 | 
				
			||||||
        "tv": "TV Shows"
 | 
					        "tv": "影集"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "glances": {
 | 
					    "glances": {
 | 
				
			||||||
        "cpu": "CPU",
 | 
					        "cpu": "CPU",
 | 
				
			||||||
@ -313,8 +313,8 @@
 | 
				
			|||||||
        "time": "{{value, number(style: unit; unitDisplay: long;)}}"
 | 
					        "time": "{{value, number(style: unit; unitDisplay: long;)}}"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "navidrome": {
 | 
					    "navidrome": {
 | 
				
			||||||
        "nothing_streaming": "No Active Streams",
 | 
					        "nothing_streaming": "暫無撥放",
 | 
				
			||||||
        "please_wait": "Please Wait"
 | 
					        "please_wait": "請稍後"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "pyload": {
 | 
					    "pyload": {
 | 
				
			||||||
        "speed": "Speed",
 | 
					        "speed": "Speed",
 | 
				
			||||||
@ -332,7 +332,7 @@
 | 
				
			|||||||
        "hd": "HD"
 | 
					        "hd": "HD"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "ping": {
 | 
					    "ping": {
 | 
				
			||||||
        "error": "Error",
 | 
					        "error": "錯誤",
 | 
				
			||||||
        "ping": "Ping"
 | 
					        "ping": "Ping"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "scrutiny": {
 | 
					    "scrutiny": {
 | 
				
			||||||
@ -345,22 +345,22 @@
 | 
				
			|||||||
        "total": "Total"
 | 
					        "total": "Total"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "deluge": {
 | 
					    "deluge": {
 | 
				
			||||||
        "download": "Download",
 | 
					        "download": "下載",
 | 
				
			||||||
        "upload": "Upload",
 | 
					        "upload": "上傳",
 | 
				
			||||||
        "leech": "Leech",
 | 
					        "leech": "Leech",
 | 
				
			||||||
        "seed": "Seed"
 | 
					        "seed": "Seed"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "flood": {
 | 
					    "flood": {
 | 
				
			||||||
        "download": "Download",
 | 
					        "download": "下載",
 | 
				
			||||||
        "upload": "Upload",
 | 
					        "upload": "上傳",
 | 
				
			||||||
        "leech": "Leech",
 | 
					        "leech": "Leech",
 | 
				
			||||||
        "seed": "Seed"
 | 
					        "seed": "Seed"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "tdarr": {
 | 
					    "tdarr": {
 | 
				
			||||||
        "queue": "Queue",
 | 
					        "queue": "佇列",
 | 
				
			||||||
        "processed": "Processed",
 | 
					        "processed": "已處理",
 | 
				
			||||||
        "errored": "Errored",
 | 
					        "errored": "錯誤",
 | 
				
			||||||
        "saved": "Saved"
 | 
					        "saved": "已儲存"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "miniflux": {
 | 
					    "miniflux": {
 | 
				
			||||||
        "read": "Read",
 | 
					        "read": "Read",
 | 
				
			||||||
@ -375,15 +375,15 @@
 | 
				
			|||||||
        "bibitrate": "{{value, rate(bits: true; binary: true)}}"
 | 
					        "bibitrate": "{{value, rate(bits: true; binary: true)}}"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "omada": {
 | 
					    "omada": {
 | 
				
			||||||
        "connectedAp": "Connected APs",
 | 
					        "connectedAp": "已連接的存取點",
 | 
				
			||||||
        "activeUser": "Active devices",
 | 
					        "activeUser": "在線裝置",
 | 
				
			||||||
        "alerts": "Alerts",
 | 
					        "alerts": "警示",
 | 
				
			||||||
        "connectedGateway": "Connected gateways",
 | 
					        "connectedGateway": "已連接的閘道",
 | 
				
			||||||
        "connectedSwitches": "Connected switches"
 | 
					        "connectedSwitches": "已連接的交換器"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "downloadstation": {
 | 
					    "downloadstation": {
 | 
				
			||||||
        "download": "Download",
 | 
					        "download": "下載",
 | 
				
			||||||
        "upload": "Upload",
 | 
					        "upload": "上傳",
 | 
				
			||||||
        "leech": "Leech",
 | 
					        "leech": "Leech",
 | 
				
			||||||
        "seed": "Seed"
 | 
					        "seed": "Seed"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
				
			|||||||
@ -13,22 +13,23 @@ const textSizes = {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function DateTime({ options }) {
 | 
					export default function DateTime({ options }) {
 | 
				
			||||||
  const { text_size: textSize, format } = options;
 | 
					  const { text_size: textSize, locale, format } = options;
 | 
				
			||||||
  const { i18n } = useTranslation();
 | 
					  const { i18n } = useTranslation();
 | 
				
			||||||
  const [date, setDate] = useState("");
 | 
					  const [date, setDate] = useState("");
 | 
				
			||||||
 | 
					  const dateLocale = locale ?? i18n.language;
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  useEffect(() => {
 | 
					  useEffect(() => {
 | 
				
			||||||
    const dateFormat = new Intl.DateTimeFormat(i18n.language, { ...format });
 | 
					    const dateFormat = new Intl.DateTimeFormat(dateLocale, { ...format });
 | 
				
			||||||
    const interval = setInterval(() => {
 | 
					    const interval = setInterval(() => {
 | 
				
			||||||
      setDate(dateFormat.format(new Date()));
 | 
					      setDate(dateFormat.format(new Date()));
 | 
				
			||||||
    }, 1000);
 | 
					    }, 1000);
 | 
				
			||||||
    return () => clearInterval(interval);
 | 
					    return () => clearInterval(interval);
 | 
				
			||||||
  }, [date, setDate, i18n.language, format]);
 | 
					  }, [date, setDate, dateLocale, format]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return (
 | 
					  return (
 | 
				
			||||||
    <div className="flex flex-col justify-center first:ml-0 ml-4">
 | 
					    <div className="flex flex-col justify-center first:ml-0 ml-4">
 | 
				
			||||||
      <div className="flex flex-row items-center grow justify-end">
 | 
					      <div className="flex flex-row items-center grow justify-end">
 | 
				
			||||||
        <span className={`text-theme-800 dark:text-theme-200 ${textSizes[textSize || "lg"]}`}>
 | 
					        <span className={`text-theme-800 dark:text-theme-200 tabular-nums ${textSizes[textSize || "lg"]}`}>
 | 
				
			||||||
          {date}
 | 
					          {date}
 | 
				
			||||||
        </span>
 | 
					        </span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
				
			|||||||
@ -30,6 +30,8 @@ export default async function credentialedProxyHandler(req, res, map) {
 | 
				
			|||||||
        headers["X-gotify-Key"] = `${widget.key}`;
 | 
					        headers["X-gotify-Key"] = `${widget.key}`;
 | 
				
			||||||
      } else if (widget.type === "authentik") {
 | 
					      } else if (widget.type === "authentik") {
 | 
				
			||||||
        headers.Authorization = `Bearer ${widget.key}`;
 | 
					        headers.Authorization = `Bearer ${widget.key}`;
 | 
				
			||||||
 | 
					      } else if (widget.type === "truenas") {
 | 
				
			||||||
 | 
					        headers.Authorization = `Bearer ${widget.key}`;
 | 
				
			||||||
      } else if (widget.type === "proxmox") {
 | 
					      } else if (widget.type === "proxmox") {
 | 
				
			||||||
        headers.Authorization = `PVEAPIToken=${widget.username}=${widget.password}`;
 | 
					        headers.Authorization = `PVEAPIToken=${widget.username}=${widget.password}`;
 | 
				
			||||||
      } else if (widget.type === "autobrr") {
 | 
					      } else if (widget.type === "autobrr") {
 | 
				
			||||||
 | 
				
			|||||||
@ -4,8 +4,8 @@ import { formatProxyUrl } from "./api-helpers";
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export default function useWidgetAPI(widget, ...options) {
 | 
					export default function useWidgetAPI(widget, ...options) {
 | 
				
			||||||
  const config = {};
 | 
					  const config = {};
 | 
				
			||||||
  if (options?.refreshInterval) {
 | 
					  if (options && options[1]?.refreshInterval) {
 | 
				
			||||||
    config.refreshInterval = options.refreshInterval;
 | 
					    config.refreshInterval = options[1].refreshInterval;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  const { data, error } = useSWR(formatProxyUrl(widget, ...options), config);
 | 
					  const { data, error } = useSWR(formatProxyUrl(widget, ...options), config);
 | 
				
			||||||
  // make the data error the top-level error
 | 
					  // make the data error the top-level error
 | 
				
			||||||
 | 
				
			|||||||
@ -5,10 +5,8 @@ import widgets from "widgets/widgets";
 | 
				
			|||||||
import getServiceWidget from "utils/config/service-helpers";
 | 
					import getServiceWidget from "utils/config/service-helpers";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const logger = createLogger("downloadstationProxyHandler");
 | 
					const logger = createLogger("downloadstationProxyHandler");
 | 
				
			||||||
const authApi = "{url}/webapi/auth.cgi?api=SYNO.API.Auth&version=2&method=login&account={username}&passwd={password}&session=DownloadStation&format=cookie"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function login(widget) {
 | 
					async function login(loginUrl) {
 | 
				
			||||||
  const loginUrl = formatApiCall(authApi, widget);
 | 
					 | 
				
			||||||
  const [status, contentType, data] = await httpProxy(loginUrl);
 | 
					  const [status, contentType, data] = await httpProxy(loginUrl);
 | 
				
			||||||
  if (status !== 200) {
 | 
					  if (status !== 200) {
 | 
				
			||||||
    return [status, contentType, data];
 | 
					    return [status, contentType, data];
 | 
				
			||||||
@ -56,8 +54,28 @@ export default async function downloadstationProxyHandler(req, res) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  const json = JSON.parse(data.toString());
 | 
					  const json = JSON.parse(data.toString());
 | 
				
			||||||
  if (json?.success !== true) {
 | 
					  if (json?.success !== true) {
 | 
				
			||||||
    logger.debug("Logging in to DownloadStation");
 | 
					    logger.debug("Attempting login to DownloadStation");
 | 
				
			||||||
    [status, contentType, data] = await login(widget);
 | 
					
 | 
				
			||||||
 | 
					    const apiInfoUrl = formatApiCall("{url}/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query", widget);
 | 
				
			||||||
 | 
					    let path = "entry.cgi";
 | 
				
			||||||
 | 
					    let maxVersion = 7;
 | 
				
			||||||
 | 
					    [status, contentType, data] = await httpProxy(apiInfoUrl);
 | 
				
			||||||
 | 
					    if (status === 200) {
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        const apiAuthInfo = JSON.parse(data.toString()).data['SYNO.API.Auth'];
 | 
				
			||||||
 | 
					        if (apiAuthInfo) {
 | 
				
			||||||
 | 
					          path = apiAuthInfo.path;
 | 
				
			||||||
 | 
					          maxVersion = apiAuthInfo.maxVersion;
 | 
				
			||||||
 | 
					          logger.debug(`Deteceted Downloadstation auth API path: ${path} and maxVersion: ${maxVersion}`);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      } catch {
 | 
				
			||||||
 | 
					        logger.debug(`Error ${status} obtaining DownloadStation API info`);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					    const authApi = `{url}/webapi/${path}?api=SYNO.API.Auth&version=${maxVersion}&method=login&account={username}&passwd={password}&session=DownloadStation&format=cookie`
 | 
				
			||||||
 | 
					    const loginUrl = formatApiCall(authApi, widget);
 | 
				
			||||||
 | 
					    [status, contentType, data] = await login(loginUrl);
 | 
				
			||||||
    if (status !== 200) {
 | 
					    if (status !== 200) {
 | 
				
			||||||
      return res.status(status).end(data)
 | 
					      return res.status(status).end(data)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -1,9 +1,31 @@
 | 
				
			|||||||
import { jsonArrayFilter } from "utils/proxy/api-helpers";
 | 
					import { jsonArrayFilter } from "utils/proxy/api-helpers";
 | 
				
			||||||
 | 
					import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
 | 
				
			||||||
import genericProxyHandler from "utils/proxy/handlers/generic";
 | 
					import genericProxyHandler from "utils/proxy/handlers/generic";
 | 
				
			||||||
 | 
					import getServiceWidget from "utils/config/service-helpers";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const widget = {
 | 
					const widget = {
 | 
				
			||||||
  api: "{url}/api/v2.0/{endpoint}",
 | 
					  api: "{url}/api/v2.0/{endpoint}",
 | 
				
			||||||
  proxyHandler: genericProxyHandler,
 | 
					  proxyHandler: async (req, res, map) => { // choose proxy handler based on widget settings
 | 
				
			||||||
 | 
					    const { group, service } = req.query;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					    if (group && service) {
 | 
				
			||||||
 | 
					      const widgetOpts = await getServiceWidget(group, service);
 | 
				
			||||||
 | 
					      let handler;
 | 
				
			||||||
 | 
					      if (widgetOpts.username && widgetOpts.password) {
 | 
				
			||||||
 | 
					        handler = genericProxyHandler;
 | 
				
			||||||
 | 
					      } else if (widgetOpts.key) {
 | 
				
			||||||
 | 
					        handler = credentialedProxyHandler;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (handler) {
 | 
				
			||||||
 | 
					        return handler(req, res, map);
 | 
				
			||||||
 | 
					      } 
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					      return res.status(500).json({ error: "Username / password or API key required" });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return res.status(500).json({ error: "Error parsing widget request" });
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  mappings: {
 | 
					  mappings: {
 | 
				
			||||||
    alerts: {
 | 
					    alerts: {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user