mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-29 14:45:24 +00:00
feat: load plugin frontends at runtime and remove plugin ids from the shell
This commit is contained in:
1 parent
49f0286a14
commit
e88d5a52e3
721 files changed
+54265
-44416
No files matched your search
@@ -1 +1,314 @@
|
||||
{}
|
||||
{
|
||||
"nav": {
|
||||
"proxmoxStats": "Proxmox Stats",
|
||||
"hostMetrics": "Host Metrics"
|
||||
},
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "Memory",
|
||||
"disk": "Disk",
|
||||
"network": "Network",
|
||||
"uptime": "Uptime",
|
||||
"processes": "Processes",
|
||||
"available": "Available",
|
||||
"free": "Free",
|
||||
"connecting": "Connecting...",
|
||||
"connectionFailed": "Failed to connect to server",
|
||||
"naCpus": "N/A CPU(s)",
|
||||
"cpuCores_one": "{{count}} Core",
|
||||
"cpuCores_other": "{{count}} Cores",
|
||||
"cpuUsage": "CPU Usage",
|
||||
"memoryUsage": "Memory Usage",
|
||||
"diskUsage": "Disk Usage",
|
||||
"selectFilesystem": "Select filesystem",
|
||||
"temperature": "Temperature",
|
||||
"highestTemperature": "Highest temperature",
|
||||
"primaryTemperatureSensor": "Primary sensor",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "No NVIDIA GPU detected. Install the NVIDIA driver (it provides nvidia-smi) to see GPU metrics.",
|
||||
"driver": "Driver {{version}}",
|
||||
"utilization": "Utilization",
|
||||
"memory": "VRAM",
|
||||
"temperature": "Temp",
|
||||
"power": "Power",
|
||||
"fan": "Fan",
|
||||
"processes": "GPU processes",
|
||||
"noProcesses": "No processes are using the GPU"
|
||||
},
|
||||
"failedToFetchHostConfig": "Failed to fetch host configuration",
|
||||
"serverOffline": "Server Offline",
|
||||
"cannotFetchMetrics": "Cannot fetch metrics from offline server",
|
||||
"totpFailed": "TOTP verification failed",
|
||||
"noneAuthNotSupported": "Host Metrics does not support 'none' authentication type.",
|
||||
"noHostSelected": "No host selected",
|
||||
"load": "Load",
|
||||
"systemInfo": "System Information",
|
||||
"hostname": "Hostname",
|
||||
"operatingSystem": "Operating System",
|
||||
"kernel": "Kernel",
|
||||
"seconds": "seconds",
|
||||
"networkInterfaces": "Network Interfaces",
|
||||
"noInterfacesFound": "No network interfaces found",
|
||||
"noProcessesFound": "No processes found",
|
||||
"processesTotal": "total",
|
||||
"processesRunning": "running",
|
||||
"loginStats": "SSH Login Statistics",
|
||||
"noRecentLoginData": "No recent login data",
|
||||
"executingQuickAction": "Executing {{name}}...",
|
||||
"quickActionSuccess": "{{name}} completed successfully",
|
||||
"quickActionFailed": "{{name}} failed",
|
||||
"quickActionError": "Failed to execute {{name}}",
|
||||
"ports": {
|
||||
"title": "Listening Ports",
|
||||
"protocol": "Protocol",
|
||||
"port": "Port",
|
||||
"address": "Address",
|
||||
"process": "Process",
|
||||
"search": "Search ports...",
|
||||
"allProtocols": "All",
|
||||
"noData": "No listening ports data"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Firewall",
|
||||
"inactive": "Inactive",
|
||||
"policy": "Policy",
|
||||
"rules": "rules",
|
||||
"noRules": "No rules in this chain",
|
||||
"noData": "No firewall data available",
|
||||
"action": "Action",
|
||||
"protocol": "Proto",
|
||||
"port": "Port",
|
||||
"source": "Source",
|
||||
"anywhere": "Anywhere",
|
||||
"chains": "chains"
|
||||
},
|
||||
"loadAvg": "Load Avg",
|
||||
"swap": "Swap",
|
||||
"architecture": "Architecture",
|
||||
"refresh": "Refresh",
|
||||
"retry": "Retry",
|
||||
"customize": "Customize layout",
|
||||
"reset": "Reset",
|
||||
"tabLive": "Live",
|
||||
"editModeInstructions": "Drag cards to rearrange, drag the bottom edge to resize, and use the width button to change a card's span. Add or remove cards below.",
|
||||
"managers": {
|
||||
"services": "Services",
|
||||
"processInspector": "Process Inspector",
|
||||
"logViewer": "Log Viewer",
|
||||
"cron": "Cron Jobs",
|
||||
"packages": "Packages",
|
||||
"ssl": "SSL Certificates",
|
||||
"firewall": "Firewall",
|
||||
"users": "Users & Permissions",
|
||||
"healthCheck": "Health Checks",
|
||||
"diskBreakdown": "Disk Breakdown",
|
||||
"systemdTimers": "Timers",
|
||||
"topMemory": "Top by Memory",
|
||||
"noData": "No data",
|
||||
"sudoHint": "Set a sudo password for this host in the host editor to enable privileged actions.",
|
||||
"filter": "Filter...",
|
||||
"start": "Start",
|
||||
"stop": "Stop",
|
||||
"restart": "Restart",
|
||||
"actionDone": "{{name}} updated",
|
||||
"actionFailed": "Action failed",
|
||||
"signalSent": "Signal sent to PID {{pid}}",
|
||||
"killHint": "Click: terminate (SIGTERM). Right-click: force kill (SIGKILL).",
|
||||
"working": "Working...",
|
||||
"update": "Update",
|
||||
"upgradeAll": "Upgrade all",
|
||||
"allUpToDate": "Everything is up to date",
|
||||
"save": "Save",
|
||||
"command": "Command",
|
||||
"enabled": "Enabled",
|
||||
"cronSaved": "Crontab updated",
|
||||
"clients": "Clients",
|
||||
"dryRun": "Dry run",
|
||||
"renew": "Renew",
|
||||
"noAcmeClient": "No ACME client (certbot or acme.sh) found on this host.",
|
||||
"addInputRule": "Add INPUT rule",
|
||||
"firewallWarning": "Changes are runtime-only until persisted. Be careful not to lock yourself out.",
|
||||
"ruleApplied": "Rule applied",
|
||||
"invalidPort": "Enter a valid port (1-65535)",
|
||||
"newUsername": "New username",
|
||||
"addUser": "Add",
|
||||
"deleteUser": "Delete user",
|
||||
"noHealthChecks": "No health checks configured yet.",
|
||||
"follow": "Follow",
|
||||
"noLogData": "No log output.",
|
||||
"tree": "Tree",
|
||||
"enableDisable": "Enable / disable at boot",
|
||||
"grantSudo": "Grant sudo",
|
||||
"revokeSudo": "Revoke sudo",
|
||||
"sslIssueCert": "Issue certificate",
|
||||
"sslExpired": "Expired",
|
||||
"sslInDays": "in {{days}}d",
|
||||
"sslNeedDomain": "Enter at least one domain",
|
||||
"sslIssued": "Certificate issued",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (standalone)",
|
||||
"sslHttpWebroot": "HTTP (webroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "DNS provider (e.g. cloudflare)",
|
||||
"sslIssueHint": "DNS provider credentials must already be configured on the host.",
|
||||
"sslRevoke": "Revoke certificate",
|
||||
"sslRevoked": "Certificate revoked",
|
||||
"sslRevokeConfirm": "Revoke and remove the certificate \"{{name}}\"? This cannot be undone.",
|
||||
"healthRun": "Run",
|
||||
"healthName": "Name",
|
||||
"healthTarget": "Host / address",
|
||||
"healthAddCheck": "Add check",
|
||||
"healthSaved": "Health checks saved",
|
||||
"healthMissingFields": "Each check needs a name and target",
|
||||
"logFile": "File",
|
||||
"logUnit": "Unit",
|
||||
"logCustomPath": "Custom path under /var/log (optional)",
|
||||
"logGrep": "Filter lines...",
|
||||
"firewallPersist": "Persist rules",
|
||||
"firewallPersisted": "Firewall rules persisted",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Tailscale",
|
||||
"wgNotInstalled": "WireGuard is not installed on this host",
|
||||
"wgNoInterfaces": "No WireGuard interfaces configured",
|
||||
"wgInterfaceUp": "Bring up",
|
||||
"wgInterfaceDown": "Bring down",
|
||||
"wgBringingUp": "Bringing {{name}} up...",
|
||||
"wgBringingDown": "Bringing {{name}} down...",
|
||||
"wgInterfaceUpDone": "{{name}} is up",
|
||||
"wgInterfaceDownDone": "{{name}} is down",
|
||||
"wgListenPort": "Port",
|
||||
"wgPublicKey": "Public key",
|
||||
"wgEndpoint": "Endpoint",
|
||||
"wgAllowedIPs": "Allowed IPs",
|
||||
"wgLastHandshake": "Last handshake",
|
||||
"wgHandshakeNever": "Never",
|
||||
"wgTransfer": "Transfer",
|
||||
"tsNotInstalled": "Tailscale is not installed on this host",
|
||||
"tsRunning": "Running",
|
||||
"tsStopped": "Stopped",
|
||||
"tsEnable": "Connect",
|
||||
"tsDisable": "Disconnect",
|
||||
"tsEnabling": "Connecting to Tailscale...",
|
||||
"tsDisabling": "Disconnecting from Tailscale...",
|
||||
"tsEnabled": "Tailscale connected",
|
||||
"tsDisabled": "Tailscale disconnected",
|
||||
"tsIPs": "Tailscale IPs",
|
||||
"tsPeers": "Peers",
|
||||
"tsOnline": "Online",
|
||||
"tsOffline": "Offline",
|
||||
"tsExitNode": "Exit node",
|
||||
"tsExitNodeActive": "Exit node active",
|
||||
"tsHostname": "Hostname"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Metrics History",
|
||||
"historySuffix": "History",
|
||||
"cpuMemoryDisk": "CPU / Memory / Disk",
|
||||
"network": "Network",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "No history data available for this time range.",
|
||||
"custom": "Custom",
|
||||
"to": "to",
|
||||
"apply": "Apply",
|
||||
"viewHistory": "View History"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Proxmox Stats",
|
||||
"cpuUsage": "CPU Usage",
|
||||
"memoryUsage": "Memory Usage",
|
||||
"diskUsage": "Disk Usage",
|
||||
"networkInterfaces": "Network Interfaces",
|
||||
"uptime": "Uptime",
|
||||
"systemInfo": "System Information",
|
||||
"guestsSummary": "Guests",
|
||||
"storagePools": "Storage Pools",
|
||||
"clusterHealth": "Cluster Health",
|
||||
"cpuCores_one": "{{count}} Core",
|
||||
"cpuCores_other": "{{count}} Cores",
|
||||
"used": "Used",
|
||||
"total": "Total",
|
||||
"hostname": "Hostname",
|
||||
"kernel": "Kernel",
|
||||
"pveVersion": "PVE Version",
|
||||
"name": "Name",
|
||||
"status": "Status",
|
||||
"type": "Type",
|
||||
"cpu": "CPU",
|
||||
"mem": "Mem",
|
||||
"disk": "Disk",
|
||||
"running": "Running",
|
||||
"stopped": "Stopped",
|
||||
"guestCounts": "{{running}}/{{total}} running",
|
||||
"inactive": "Inactive",
|
||||
"notClustered": "Standalone node (not part of a cluster)",
|
||||
"quorate": "Quorate",
|
||||
"notQuorate": "Not quorate",
|
||||
"nodeOnline": "Online",
|
||||
"nodeOffline": "Offline",
|
||||
"noHostSelected": "No host selected",
|
||||
"pveshNotFound": "pvesh not found - is this a Proxmox node?",
|
||||
"nodeDetectionFailed": "Unable to determine a valid Proxmox node name",
|
||||
"connecting": "Connecting...",
|
||||
"connectionFailed": "Failed to connect to Proxmox node",
|
||||
"refresh": "Refresh",
|
||||
"searchGuests": "Search guests...",
|
||||
"filterAll": "All",
|
||||
"filterVm": "VM",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "No VMs or LXC containers found on this node.",
|
||||
"noGuestsMatch": "No guests match the current filters."
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Host Metrics",
|
||||
"enableProxmoxStats": "Enable Proxmox Stats",
|
||||
"enableProxmoxStatsDesc": "Show a Proxmox Stats tab for this host with live node, guest, storage, and cluster stats collected over SSH.",
|
||||
"proxmoxStatsPollInterval": "Poll interval (seconds)",
|
||||
"proxmoxStatsPollIntervalDesc": "Minimum 15 seconds. How often to refresh Proxmox node stats.",
|
||||
"proxmoxStatsNodeOverride": "Node name override",
|
||||
"proxmoxStatsNodeOverrideDesc": "Override auto-detection of the Proxmox node name (detected via hostname by default).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Auto-detected from hostname",
|
||||
"metricsCollectionLabel": "Metrics Collection",
|
||||
"enableMetricsLabel": "Enable Metrics",
|
||||
"enableMetricsDesc": "Collect CPU, RAM, disk, and other metrics from this host",
|
||||
"useGlobalMetrics": "Use Global Interval",
|
||||
"useGlobalMetricsDesc": "Override with the server-wide metrics interval",
|
||||
"metricsIntervalS": "Metrics Interval (s)",
|
||||
"metricsIntervalDesc2": "Seconds between metric snapshots",
|
||||
"excludedMountsLabel": "Excluded Mounts",
|
||||
"monitoredMountsLabel": "Custom monitored paths",
|
||||
"monitoredMountsDesc": "Add paths that are not exposed as separate mounts, including bind-mounted Home Assistant paths such as /config.",
|
||||
"monitoredMountPathPlaceholder": "Path (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Label (optional)",
|
||||
"addMonitoredMount": "Add path",
|
||||
"excludedMountsDesc": "Hide specific mount points or filesystem types (e.g. nfs, cifs) from disk usage and alerts for this host.",
|
||||
"excludedMountsPlaceholder": "Mount path (/mnt/nas) or filesystem type (nfs, cifs)",
|
||||
"excludedMountsEmpty": "No mounts excluded. All detected filesystems are shown.",
|
||||
"addExcludedMount": "Add",
|
||||
"visibleWidgets": "Visible Widgets",
|
||||
"widgetsMovedToHostMetrics": "Cards are now added, arranged, and resized directly in the Host Metrics tab. Open Host Metrics for this host and use Customize to choose which cards are shown.",
|
||||
"quickActionsLabel": "Quick Actions",
|
||||
"quickActionsToolbar": "Quick actions appear as buttons in the Host Metrics toolbar for one-click command execution.",
|
||||
"noQuickActions": "No quick actions yet.",
|
||||
"buttonLabel": "Button label",
|
||||
"selectSnippetPlaceholder": "Select snippet...",
|
||||
"addActionBtn": "Add Action"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Metrics and alerts",
|
||||
"feature_metrics_desc": "Track CPU, memory and disk over time, and get alerted when they go bad."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Metrics History Retention",
|
||||
"metricsHistoryRetentionRange": "1 to 90 days",
|
||||
"days": "days"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "No data available",
|
||||
"showCurrentValue": "Show Current Value",
|
||||
"chartMetric": "Metric",
|
||||
"metricRange": "Range"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "SVE",
|
||||
"memory": "Geheue",
|
||||
"disk": "Skyf",
|
||||
"network": "Netwerk",
|
||||
"uptime": "Optyd",
|
||||
"processes": "Prosesse",
|
||||
"available": "Beskikbaar",
|
||||
"free": "Gratis",
|
||||
"connecting": "Verbind...",
|
||||
"connectionFailed": "Kon nie aan bediener koppel nie",
|
||||
"naCpus": "N/A SVE(s)",
|
||||
"cpuCores_one": "{{count}} Kern",
|
||||
"cpuCores_other": "{{count}} Kerne",
|
||||
"cpuUsage": "SVE-gebruik",
|
||||
"memoryUsage": "Geheuegebruik",
|
||||
"diskUsage": "Skyfgebruik",
|
||||
"selectFilesystem": "Kies lêerstelsel",
|
||||
"temperature": "Temperatuur",
|
||||
"highestTemperature": "Hoogste temperatuur",
|
||||
"primaryTemperatureSensor": "Primêre sensor",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "Geen NVIDIA GPU bespeur nie. Installeer die NVIDIA-drywer (dit verskaf nvidia-smi) om GPU-metrieke te sien.",
|
||||
"driver": "Bestuurder {{version}}",
|
||||
"utilization": "Benutting",
|
||||
"memory": "VRAM",
|
||||
"temperature": "Temperatuur",
|
||||
"power": "Krag",
|
||||
"fan": "Waaier",
|
||||
"processes": "GPU-prosesse",
|
||||
"noProcesses": "Geen prosesse gebruik die GPU nie"
|
||||
},
|
||||
"failedToFetchHostConfig": "Kon nie gasheerkonfigurasie haal nie",
|
||||
"serverOffline": "Bediener vanlyn",
|
||||
"cannotFetchMetrics": "Kan nie statistieke van vanlyn bediener haal nie",
|
||||
"totpFailed": "TOTP-verifikasie het misluk",
|
||||
"noneAuthNotSupported": "Host Metrics ondersteun nie die 'geen'-verifikasietipe nie.",
|
||||
"noHostSelected": "Geen gasheer gekies nie",
|
||||
"load": "Laai",
|
||||
"systemInfo": "Stelselinligting",
|
||||
"hostname": "Gasheernaam",
|
||||
"operatingSystem": "Bedryfstelsel",
|
||||
"kernel": "Kern",
|
||||
"seconds": "sekondes",
|
||||
"networkInterfaces": "Netwerkkoppelvlakke",
|
||||
"noInterfacesFound": "Geen netwerkkoppelvlakke gevind nie",
|
||||
"noProcessesFound": "Geen prosesse gevind nie",
|
||||
"processesTotal": "totaal",
|
||||
"processesRunning": "hardloop",
|
||||
"loginStats": "SSH-aanmeldingstatistieke",
|
||||
"noRecentLoginData": "Geen onlangse aanmelddata nie",
|
||||
"executingQuickAction": "Voer tans {{name}} uit ...",
|
||||
"quickActionSuccess": "{{name}} suksesvol voltooi",
|
||||
"quickActionFailed": "{{name}} het misluk",
|
||||
"quickActionError": "Kon nie {{name}} uitvoer nie",
|
||||
"ports": {
|
||||
"title": "Luisterpoorte",
|
||||
"protocol": "Protokol",
|
||||
"port": "Hawe",
|
||||
"address": "Adres",
|
||||
"process": "Proses",
|
||||
"search": "Soek poorte...",
|
||||
"allProtocols": "Alles",
|
||||
"noData": "Geen luisterpoorte-data nie"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Firewall",
|
||||
"inactive": "Onaktief",
|
||||
"policy": "Beleid",
|
||||
"rules": "reëls",
|
||||
"noRules": "Geen reëls in hierdie ketting nie",
|
||||
"noData": "Geen firewalldata beskikbaar nie",
|
||||
"action": "Aksie",
|
||||
"protocol": "Proto",
|
||||
"port": "Hawe",
|
||||
"source": "Bron",
|
||||
"anywhere": "Enige plek",
|
||||
"chains": "kettings"
|
||||
},
|
||||
"loadAvg": "Laai Gem.",
|
||||
"swap": "Ruil",
|
||||
"architecture": "Argitektuur",
|
||||
"refresh": "Verfris",
|
||||
"retry": "Probeer weer",
|
||||
"customize": "Pasmaak uitleg",
|
||||
"reset": "Herstel",
|
||||
"tabLive": "Lewendig",
|
||||
"editModeInstructions": "Sleep kaarte om te herrangskik, sleep die onderste rand om die grootte te verander, en gebruik die breedteknoppie om 'n kaart se omvang te verander. Voeg kaarte hieronder by of verwyder hulle.",
|
||||
"managers": {
|
||||
"services": "Dienste",
|
||||
"processInspector": "Prosesinspekteur",
|
||||
"logViewer": "Logkyker",
|
||||
"cron": "Cron-werk",
|
||||
"packages": "Pakkette",
|
||||
"ssl": "SSL-sertifikate",
|
||||
"firewall": "Firewall",
|
||||
"users": "Gebruikers en Toestemmings",
|
||||
"healthCheck": "Gesondheidstoetse",
|
||||
"diskBreakdown": "Skyfverdeling",
|
||||
"systemdTimers": "Tydtellers",
|
||||
"topMemory": "Top volgens geheue",
|
||||
"noData": "Geen data nie",
|
||||
"sudoHint": "Stel 'n sudo-wagwoord vir hierdie gasheer in die gasheerredigeerder om bevoorregte aksies moontlik te maak.",
|
||||
"filter": "Filter...",
|
||||
"start": "Begin",
|
||||
"stop": "Stop",
|
||||
"restart": "Herbegin",
|
||||
"actionDone": "{{name}} opgedateer",
|
||||
"actionFailed": "Aksie het misluk",
|
||||
"signalSent": "Sein gestuur na PID {{pid}}",
|
||||
"killHint": "Klik: beëindig (SIGTERM). Regskliek: forseer doodmaak (SIGKILL).",
|
||||
"working": "Werk...",
|
||||
"update": "Opdatering",
|
||||
"upgradeAll": "Gradeer alles op",
|
||||
"allUpToDate": "Alles is op datum",
|
||||
"save": "Stoor",
|
||||
"command": "Bevel",
|
||||
"enabled": "Geaktiveer",
|
||||
"cronSaved": "Crontab opgedateer",
|
||||
"clients": "Kliënte",
|
||||
"dryRun": "Droë lopie",
|
||||
"renew": "Hernu",
|
||||
"noAcmeClient": "Geen ACME-kliënt (certbot of acme.sh) op hierdie gasheer gevind nie.",
|
||||
"addInputRule": "Voeg INPUT-reël by",
|
||||
"firewallWarning": "Veranderinge is slegs looptyd totdat dit voortduur. Wees versigtig om jouself nie uit te sluit nie.",
|
||||
"ruleApplied": "Reël toegepas",
|
||||
"invalidPort": "Voer 'n geldige poort in (1-65535)",
|
||||
"newUsername": "Nuwe gebruikersnaam",
|
||||
"addUser": "Voeg by",
|
||||
"deleteUser": "Vee gebruiker uit",
|
||||
"noHealthChecks": "Geen gesondheidskontroles is nog opgestel nie.",
|
||||
"follow": "Volg",
|
||||
"noLogData": "Geen loguitvoer nie.",
|
||||
"tree": "Boom",
|
||||
"enableDisable": "Aktiveer/deaktiveer tydens opstart",
|
||||
"grantSudo": "Gee sudo toe",
|
||||
"revokeSudo": "Herroep sudo",
|
||||
"sslIssueCert": "Uitgawesertifikaat",
|
||||
"sslExpired": "Verstryk",
|
||||
"sslInDays": "in {{days}}d",
|
||||
"sslNeedDomain": "Voer ten minste een domein in",
|
||||
"sslIssued": "Sertifikaat uitgereik",
|
||||
"sslDomainsPlaceholder": "voorbeeld.com, www.voorbeeld.com",
|
||||
"sslHttpStandalone": "HTTP (losstaande)",
|
||||
"sslHttpWebroot": "HTTP (webwortel)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "DNS-verskaffer (bv. cloudflare)",
|
||||
"sslIssueHint": "DNS-verskaffer se geloofsbriewe moet reeds op die gasheer gekonfigureer wees.",
|
||||
"sslRevoke": "Herroep sertifikaat",
|
||||
"sslRevoked": "Sertifikaat herroep",
|
||||
"sslRevokeConfirm": "Herroep en verwyder die sertifikaat \"{{name}}\"? Dit kan nie ongedaan gemaak word nie.",
|
||||
"healthRun": "Hardloop",
|
||||
"healthName": "Naam",
|
||||
"healthTarget": "Gasheer / adres",
|
||||
"healthAddCheck": "Voeg tjek by",
|
||||
"healthSaved": "Gesondheidskontroles gestoor",
|
||||
"healthMissingFields": "Elke tjek benodig 'n naam en teiken",
|
||||
"logFile": "Lêer",
|
||||
"logUnit": "Eenheid",
|
||||
"logCustomPath": "Pasgemaakte pad onder /var/log (opsioneel)",
|
||||
"logGrep": "Filterlyne...",
|
||||
"firewallPersist": "Behou reëls",
|
||||
"firewallPersisted": "Firewall-reëls het voortgeduur",
|
||||
"wireguard": "Draadbeskerming",
|
||||
"tailscale": "Stertskaal",
|
||||
"wgNotInstalled": "WireGuard is nie op hierdie gasheer geïnstalleer nie",
|
||||
"wgNoInterfaces": "Geen WireGuard-koppelvlakke gekonfigureer nie",
|
||||
"wgInterfaceUp": "Bring op",
|
||||
"wgInterfaceDown": "Bring af",
|
||||
"wgBringingUp": "Bring {{name}} op...",
|
||||
"wgBringingDown": "Bring {{name}} af...",
|
||||
"wgInterfaceUpDone": "{{name}} is op",
|
||||
"wgInterfaceDownDone": "{{name}} is af",
|
||||
"wgListenPort": "Hawe",
|
||||
"wgPublicKey": "Publieke sleutel",
|
||||
"wgEndpoint": "Eindpunt",
|
||||
"wgAllowedIPs": "Toegelate IP's",
|
||||
"wgLastHandshake": "Laaste handdruk",
|
||||
"wgHandshakeNever": "Nooit",
|
||||
"wgTransfer": "Oordrag",
|
||||
"tsNotInstalled": "Tailscale is nie op hierdie gasheer geïnstalleer nie",
|
||||
"tsRunning": "Hardloop",
|
||||
"tsStopped": "Gestop",
|
||||
"tsEnable": "Verbind",
|
||||
"tsDisable": "Ontkoppel",
|
||||
"tsEnabling": "Verbind met Tailscale...",
|
||||
"tsDisabling": "Ontkoppel tans van Tailscale...",
|
||||
"tsEnabled": "Stertskaal gekoppel",
|
||||
"tsDisabled": "Stertskaal ontkoppel",
|
||||
"tsIPs": "Stertskaal-IP's",
|
||||
"tsPeers": "Eweknieë",
|
||||
"tsOnline": "Aanlyn",
|
||||
"tsOffline": "Vanlyn",
|
||||
"tsExitNode": "Uitgangsknoop",
|
||||
"tsExitNodeActive": "Uitgangsknoop aktief",
|
||||
"tsHostname": "Gasheernaam"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Metrieke Geskiedenis",
|
||||
"historySuffix": "Geskiedenis",
|
||||
"cpuMemoryDisk": "SVE / Geheue / Skyf",
|
||||
"network": "Netwerk",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "Geen geskiedenisdata beskikbaar vir hierdie tydperk nie.",
|
||||
"custom": "Pasgemaak",
|
||||
"to": "om",
|
||||
"apply": "Dien toe",
|
||||
"viewHistory": "Bekyk Geskiedenis"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Proxmox-statistieke",
|
||||
"cpuUsage": "SVE-gebruik",
|
||||
"memoryUsage": "Geheuegebruik",
|
||||
"diskUsage": "Skyfgebruik",
|
||||
"networkInterfaces": "Netwerkkoppelvlakke",
|
||||
"uptime": "Optyd",
|
||||
"systemInfo": "Stelselinligting",
|
||||
"guestsSummary": "Gaste",
|
||||
"storagePools": "Bergingspoele",
|
||||
"clusterHealth": "Klustergesondheid",
|
||||
"cpuCores_one": "{{count}} Kern",
|
||||
"cpuCores_other": "{{count}} Kerne",
|
||||
"used": "Gebruik",
|
||||
"total": "Totaal",
|
||||
"hostname": "Gasheernaam",
|
||||
"kernel": "Kern",
|
||||
"pveVersion": "PVE-weergawe",
|
||||
"name": "Naam",
|
||||
"status": "Status",
|
||||
"type": "Tipe",
|
||||
"cpu": "SVE",
|
||||
"mem": "Mem",
|
||||
"disk": "Skyf",
|
||||
"running": "Hardloop",
|
||||
"stopped": "Gestop",
|
||||
"guestCounts": "{{running}}/{{total}} hardloop",
|
||||
"inactive": "Onaktief",
|
||||
"notClustered": "Losstaande nodus (nie deel van 'n groep nie)",
|
||||
"quorate": "Kworate",
|
||||
"notQuorate": "Nie kworum nie",
|
||||
"nodeOnline": "Aanlyn",
|
||||
"nodeOffline": "Vanlyn",
|
||||
"noHostSelected": "Geen gasheer gekies nie",
|
||||
"pveshNotFound": "pvesh nie gevind nie - is dit 'n Proxmox-node?",
|
||||
"nodeDetectionFailed": "Kan nie 'n geldige Proxmox-nodusnaam bepaal nie",
|
||||
"connecting": "Verbind...",
|
||||
"connectionFailed": "Kon nie aan die Proxmox-nodus koppel nie",
|
||||
"refresh": "Verfris",
|
||||
"searchGuests": "Soek gaste...",
|
||||
"filterAll": "Alles",
|
||||
"filterVm": "VM",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "Geen VM'e of LXC-houers is op hierdie node gevind nie.",
|
||||
"noGuestsMatch": "Geen gaste stem ooreen met die huidige filters nie."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Gasheermetrieke"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Gasheermetrieke",
|
||||
"enableProxmoxStats": "Aktiveer Proxmox-statistieke",
|
||||
"enableProxmoxStatsDesc": "Wys 'n Proxmox Statistiek-oortjie vir hierdie gasheer met lewendige nodus-, gas-, bergings- en groepstatistieke wat oor SSH versamel is.",
|
||||
"proxmoxStatsPollInterval": "Stembusinterval (sekondes)",
|
||||
"proxmoxStatsPollIntervalDesc": "Minimum 15 sekondes. Hoe gereeld om Proxmox-nodusstatistieke te verfris.",
|
||||
"proxmoxStatsNodeOverride": "Nodenaam-oorskrywing",
|
||||
"proxmoxStatsNodeOverrideDesc": "Ignoreer outomatiese opsporing van die Proxmox-nodusnaam (standaard opgespoor via gasheernaam).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Outomaties opgespoor vanaf gasheernaam",
|
||||
"metricsCollectionLabel": "Metrieke-versameling",
|
||||
"enableMetricsLabel": "Aktiveer Metrieke",
|
||||
"enableMetricsDesc": "Versamel SVE-, RAM-, skyf- en ander statistieke van hierdie gasheer",
|
||||
"useGlobalMetrics": "Gebruik globale interval",
|
||||
"useGlobalMetricsDesc": "Oorskryf met die bedienerwye metrieke-interval",
|
||||
"metricsIntervalS": "Metrieke Interval (s)",
|
||||
"metricsIntervalDesc2": "Sekondes tussen metrieke momentopnames",
|
||||
"excludedMountsLabel": "Uitgesluite Monterings",
|
||||
"monitoredMountsLabel": "Pasgemaakte gemonitorde paaie",
|
||||
"monitoredMountsDesc": "Voeg paaie by wat nie as aparte monterings blootgestel word nie, insluitend bind-gemonteerde Home Assistant-paaie soos /config.",
|
||||
"monitoredMountPathPlaceholder": "Pad (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Etiket (opsioneel)",
|
||||
"addMonitoredMount": "Voeg pad by",
|
||||
"excludedMountsDesc": "Versteek spesifieke koppelpunte of lêerstelseltipes (bv. nfs, cifs) van skyfgebruik en waarskuwings vir hierdie gasheer.",
|
||||
"excludedMountsPlaceholder": "Monteerpad (/mnt/nas) of lêerstelseltipe (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Geen koppelstukke uitgesluit nie. Alle opgespoorde lêerstelsels word getoon.",
|
||||
"addExcludedMount": "Voeg by",
|
||||
"visibleWidgets": "Sigbare Widgets",
|
||||
"widgetsMovedToHostMetrics": "Kaarte word nou direk in die Gasheermetrieke-oortjie bygevoeg, gerangskik en herskaal. Maak Gasheermetrieke vir hierdie gasheer oop en gebruik Pasmaak om te kies watter kaarte gewys word.",
|
||||
"quickActionsLabel": "Vinnige Aksies",
|
||||
"quickActionsToolbar": "Vinnige aksies verskyn as knoppies in die Host Metrics-nutsbalk vir die uitvoering van opdragte met een klik.",
|
||||
"noQuickActions": "Geen vinnige aksies nog nie.",
|
||||
"buttonLabel": "Knoppie-etiket",
|
||||
"selectSnippetPlaceholder": "Kies uittreksel...",
|
||||
"addActionBtn": "Voeg Aksie by"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Metrieke en waarskuwings",
|
||||
"feature_metrics_desc": "Volg die SVE, geheue en skyf oor tyd en word gewaarsku wanneer hulle sleg word."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Metrieke Geskiedenis Behoud",
|
||||
"metricsHistoryRetentionRange": "1 tot 90 dae",
|
||||
"days": "dae"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Geen data beskikbaar nie",
|
||||
"showCurrentValue": "Wys huidige waarde",
|
||||
"chartMetric": "Metrieke",
|
||||
"metricRange": "Reikwydte"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "المعالج",
|
||||
"memory": "الذاكرة",
|
||||
"disk": "القرص",
|
||||
"network": "الشبكة",
|
||||
"uptime": "مدة التشغيل",
|
||||
"processes": "العمليات",
|
||||
"available": "المتاح",
|
||||
"free": "الخالي",
|
||||
"connecting": "جارٍ الاتصال...",
|
||||
"connectionFailed": "فشل الاتصال بالخادم",
|
||||
"naCpus": "غير متوفر",
|
||||
"cpuCores_one": "{{count}} نواة",
|
||||
"cpuCores_other": "{{count}} نوى",
|
||||
"cpuUsage": "استخدام المعالج",
|
||||
"memoryUsage": "استخدام الذاكرة",
|
||||
"diskUsage": "استخدام القرص",
|
||||
"selectFilesystem": "حدد نظام الملفات",
|
||||
"temperature": "درجة الحرارة",
|
||||
"highestTemperature": "أعلى درجة حرارة",
|
||||
"primaryTemperatureSensor": "المستشعر الأساسي",
|
||||
"gpu": {
|
||||
"title": "وحدة معالجة الرسومات",
|
||||
"noDevice": "لم يتم الكشف عن وحدة معالجة رسومات NVIDIA. قم بتثبيت برنامج تشغيل NVIDIA (يوفر nvidia-smi) لعرض مقاييس وحدة معالجة الرسومات.",
|
||||
"driver": "السائق {{version}}",
|
||||
"utilization": "استخدام",
|
||||
"memory": "ذاكرة الوصول العشوائي للفيديو",
|
||||
"temperature": "درجة حرارة",
|
||||
"power": "قوة",
|
||||
"fan": "معجب",
|
||||
"processes": "عمليات وحدة معالجة الرسومات",
|
||||
"noProcesses": "لا توجد عمليات تستخدم وحدة معالجة الرسومات (GPU)."
|
||||
},
|
||||
"failedToFetchHostConfig": "فشل جلب تكوين المضيف",
|
||||
"serverOffline": "الخادم غير متصل",
|
||||
"cannotFetchMetrics": "لا يمكن جلب المؤشرات من خادم غير متصل",
|
||||
"totpFailed": "فشل التحقق من TOTP",
|
||||
"noneAuthNotSupported": "مقاييس المضيف لا تدعم نوع المصادقة 'none'.",
|
||||
"noHostSelected": "لم يتم تحديد مضيف",
|
||||
"load": "الحمل",
|
||||
"systemInfo": "معلومات النظام",
|
||||
"hostname": "اسم المضيف",
|
||||
"operatingSystem": "نظام التشغيل",
|
||||
"kernel": "النواة",
|
||||
"seconds": "ثوانٍ",
|
||||
"networkInterfaces": "واجهات الشبكة",
|
||||
"noInterfacesFound": "لم يتم العثور على واجهات شبكة",
|
||||
"noProcessesFound": "لم يتم العثور على عمليات",
|
||||
"processesTotal": "الإجمالي",
|
||||
"processesRunning": "قيد التشغيل",
|
||||
"loginStats": "إحصائيات تسجيل الدخول عبر SSH",
|
||||
"noRecentLoginData": "لا توجد بيانات تسجيل دخول حديثة",
|
||||
"executingQuickAction": "جارٍ تنفيذ {{name}}...",
|
||||
"quickActionSuccess": "تم إكمال {{name}} بنجاح",
|
||||
"quickActionFailed": "فشل {{name}}",
|
||||
"quickActionError": "فشل تنفيذ {{name}}",
|
||||
"ports": {
|
||||
"title": "المنافذ المستمعة",
|
||||
"protocol": "البروتوكول",
|
||||
"port": "المنفذ",
|
||||
"address": "العنوان",
|
||||
"process": "العملية",
|
||||
"search": "بحث في المنافذ...",
|
||||
"allProtocols": "الكل",
|
||||
"noData": "لا توجد بيانات للمنافذ المستمعة"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "جدار الحماية",
|
||||
"inactive": "غير نشط",
|
||||
"policy": "السياسة",
|
||||
"rules": "قواعد",
|
||||
"noRules": "لا توجد قواعد في هذه السلسلة",
|
||||
"noData": "لا توجد بيانات لجدار الحماية",
|
||||
"action": "الإجراء",
|
||||
"protocol": "البروتوكول",
|
||||
"port": "المنفذ",
|
||||
"source": "المصدر",
|
||||
"anywhere": "أي مكان",
|
||||
"chains": "السلاسل"
|
||||
},
|
||||
"loadAvg": "متوسط التحميل",
|
||||
"swap": "التبديل",
|
||||
"architecture": "المعمارية",
|
||||
"refresh": "تحديث",
|
||||
"retry": "إعادة المحاولة",
|
||||
"customize": "تخصيص التخطيط",
|
||||
"reset": "إعادة تعيين",
|
||||
"tabLive": "مباشر",
|
||||
"editModeInstructions": "اسحب البطاقات لإعادة ترتيبها، واسحب الحافة السفلية لتغيير حجمها، واستخدم زر العرض لتغيير امتداد البطاقة. أضف البطاقات أو أزلها أدناه.",
|
||||
"managers": {
|
||||
"services": "الخدمات",
|
||||
"processInspector": "مفتش العمليات",
|
||||
"logViewer": "عارض السجلات",
|
||||
"cron": "مهام كرون",
|
||||
"packages": "الحزم",
|
||||
"ssl": "شهادات SSL",
|
||||
"firewall": "جدار الحماية",
|
||||
"users": "المستخدمون والأذونات",
|
||||
"healthCheck": "فحوصات الصحة",
|
||||
"diskBreakdown": "تفصيل القرص",
|
||||
"systemdTimers": "المؤقتات",
|
||||
"topMemory": "الأعلى استهلاكًا للذاكرة",
|
||||
"noData": "لا توجد بيانات",
|
||||
"sudoHint": "قم بتعيين كلمة مرور sudo لهذا المضيف في محرر المضيف لتمكين الإجراءات المميزة.",
|
||||
"filter": "تصفية...",
|
||||
"start": "بدء",
|
||||
"stop": "إيقاف",
|
||||
"restart": "إعادة تشغيل",
|
||||
"actionDone": "تم تحديث {{name}}",
|
||||
"actionFailed": "فشل الإجراء",
|
||||
"signalSent": "تم إرسال إشارة إلى PID {{pid}}",
|
||||
"killHint": "نقرة: إنهاء (SIGTERM). نقرة بزر الماوس الأيمن: إنهاء إجباري (SIGKILL).",
|
||||
"working": "جارٍ العمل...",
|
||||
"update": "تحديث",
|
||||
"upgradeAll": "ترقية الكل",
|
||||
"allUpToDate": "كل شيء محدث",
|
||||
"save": "حفظ",
|
||||
"command": "أمر",
|
||||
"enabled": "مفعل",
|
||||
"cronSaved": "تم تحديث crontab",
|
||||
"clients": "العملاء",
|
||||
"dryRun": "تشغيل تجريبي",
|
||||
"renew": "تجديد",
|
||||
"noAcmeClient": "لم يتم العثور على عميل ACME (certbot أو acme.sh) على هذا المضيف.",
|
||||
"addInputRule": "إضافة قاعدة INPUT",
|
||||
"firewallWarning": "التغييرات مؤقتة حتى يتم حفظها. احذر من قفل وصولك.",
|
||||
"ruleApplied": "تم تطبيق القاعدة",
|
||||
"invalidPort": "أدخل منفذًا صالحًا (1-65535)",
|
||||
"newUsername": "اسم مستخدم جديد",
|
||||
"addUser": "إضافة",
|
||||
"deleteUser": "حذف المستخدم",
|
||||
"noHealthChecks": "لم يتم تكوين فحوصات الصحة بعد.",
|
||||
"follow": "متابعة",
|
||||
"noLogData": "لا توجد مخرجات سجل.",
|
||||
"tree": "شجري",
|
||||
"enableDisable": "تفعيل / تعطيل عند الإقلاع",
|
||||
"grantSudo": "منح sudo",
|
||||
"revokeSudo": "سحب sudo",
|
||||
"sslIssueCert": "إصدار شهادة",
|
||||
"sslExpired": "منتهية الصلاحية",
|
||||
"sslInDays": "خلال {{days}} يومًا",
|
||||
"sslNeedDomain": "أدخل نطاقًا واحدًا على الأقل",
|
||||
"sslIssued": "تم إصدار الشهادة",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (مستقل)",
|
||||
"sslHttpWebroot": "HTTP (webroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "مزود DNS (مثل cloudflare)",
|
||||
"sslIssueHint": "يجب أن تكون بيانات اعتماد مزود DNS قد تم تكوينها مسبقًا على المضيف.",
|
||||
"sslRevoke": "إلغاء الشهادة",
|
||||
"sslRevoked": "تم إلغاء الشهادة",
|
||||
"sslRevokeConfirm": "هل تريد إلغاء الشهادة \"{{name}}\" وإزالتها؟ لا يمكن التراجع عن هذا الإجراء.",
|
||||
"healthRun": "تشغيل",
|
||||
"healthName": "الاسم",
|
||||
"healthTarget": "المضيف / العنوان",
|
||||
"healthAddCheck": "إضافة فحص",
|
||||
"healthSaved": "تم حفظ فحوصات الصحة",
|
||||
"healthMissingFields": "يتطلب كل فحص اسمًا وهدفًا",
|
||||
"logFile": "ملف",
|
||||
"logUnit": "وحدة",
|
||||
"logCustomPath": "مسار مخصص تحت /var/log (اختياري)",
|
||||
"logGrep": "تصفية السطور...",
|
||||
"firewallPersist": "حفظ القواعد",
|
||||
"firewallPersisted": "تم حفظ قواعد جدار الحماية",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Tailscale",
|
||||
"wgNotInstalled": "WireGuard غير مثبت على هذا المضيف",
|
||||
"wgNoInterfaces": "لا توجد واجهات WireGuard مُعدّة",
|
||||
"wgInterfaceUp": "رفع",
|
||||
"wgInterfaceDown": "إنزال",
|
||||
"wgBringingUp": "جارٍ رفع {{name}}...",
|
||||
"wgBringingDown": "جارٍ إنزال {{name}}...",
|
||||
"wgInterfaceUpDone": "{{name}} مرفوع",
|
||||
"wgInterfaceDownDone": "{{name}} منزّل",
|
||||
"wgListenPort": "المنفذ",
|
||||
"wgPublicKey": "المفتاح العام",
|
||||
"wgEndpoint": "نقطة النهاية",
|
||||
"wgAllowedIPs": "عناوين IP المسموح بها",
|
||||
"wgLastHandshake": "آخر مصافحة",
|
||||
"wgHandshakeNever": "أبدًا",
|
||||
"wgTransfer": "نقل",
|
||||
"tsNotInstalled": "Tailscale غير مثبت على هذا المضيف",
|
||||
"tsRunning": "يعمل",
|
||||
"tsStopped": "متوقف",
|
||||
"tsEnable": "اتصل",
|
||||
"tsDisable": "افصل",
|
||||
"tsEnabling": "جارٍ الاتصال بـ Tailscale...",
|
||||
"tsDisabling": "جارٍ قطع الاتصال بـ Tailscale...",
|
||||
"tsEnabled": "Tailscale متصل",
|
||||
"tsDisabled": "Tailscale غير متصل",
|
||||
"tsIPs": "عناوين IP لـ Tailscale",
|
||||
"tsPeers": "الأقران",
|
||||
"tsOnline": "متصل",
|
||||
"tsOffline": "غير متصل",
|
||||
"tsExitNode": "عقدة خروج",
|
||||
"tsExitNodeActive": "عقدة خروج نشطة",
|
||||
"tsHostname": "اسم المضيف"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "سجل المقاييس",
|
||||
"historySuffix": "السجل",
|
||||
"cpuMemoryDisk": "وحدة المعالجة المركزية / الذاكرة / القرص",
|
||||
"network": "الشبكة",
|
||||
"download": "استقبال",
|
||||
"upload": "إرسال",
|
||||
"noData": "لا توجد بيانات تاريخية متاحة لهذا النطاق الزمني.",
|
||||
"custom": "مخصص",
|
||||
"to": "إلى",
|
||||
"apply": "تطبيق",
|
||||
"viewHistory": "عرض السجل"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "إحصائيات Proxmox",
|
||||
"cpuUsage": "استخدام وحدة المعالجة المركزية",
|
||||
"memoryUsage": "استخدام الذاكرة",
|
||||
"diskUsage": "استخدام القرص",
|
||||
"networkInterfaces": "واجهات الشبكة",
|
||||
"uptime": "وقت التشغيل",
|
||||
"systemInfo": "معلومات النظام",
|
||||
"guestsSummary": "الضيوف",
|
||||
"storagePools": "أحواض التخزين",
|
||||
"clusterHealth": "الصحة العنقودية",
|
||||
"cpuCores_one": "{{count}} النواة",
|
||||
"cpuCores_other": "{{count}} النوى",
|
||||
"used": "مستخدم",
|
||||
"total": "المجموع",
|
||||
"hostname": "اسم المضيف",
|
||||
"kernel": "النواة",
|
||||
"pveVersion": "إصدار لاعب ضد البيئة",
|
||||
"name": "اسم",
|
||||
"status": "حالة",
|
||||
"type": "يكتب",
|
||||
"cpu": "وحدة المعالجة المركزية",
|
||||
"mem": "ميم",
|
||||
"disk": "أدك",
|
||||
"running": "جري",
|
||||
"stopped": "توقف",
|
||||
"guestCounts": "{{running}}/{{total}} قيد التشغيل",
|
||||
"inactive": "غير نشط",
|
||||
"notClustered": "عقدة مستقلة (ليست جزءًا من مجموعة)",
|
||||
"quorate": "اقتبس",
|
||||
"notQuorate": "غير مكتمل النصاب",
|
||||
"nodeOnline": "متصل",
|
||||
"nodeOffline": "غير متصل بالإنترنت",
|
||||
"noHostSelected": "لم يتم تحديد أي مضيف",
|
||||
"pveshNotFound": "لم يتم العثور على pvesh - هل هذه عقدة Proxmox؟",
|
||||
"nodeDetectionFailed": "تعذر تحديد اسم عقدة Proxmox صالح",
|
||||
"connecting": "جارٍ الاتصال...",
|
||||
"connectionFailed": "فشل الاتصال بعقدة Proxmox",
|
||||
"refresh": "ينعش",
|
||||
"searchGuests": "ابحث عن الضيوف...",
|
||||
"filterAll": "الجميع",
|
||||
"filterVm": "آلة افتراضية",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "لم يتم العثور على أي أجهزة افتراضية أو حاويات LXC على هذه العقدة.",
|
||||
"noGuestsMatch": "لا يوجد ضيوف يطابقون المعايير الحالية."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "مقاييس المضيف"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "مقاييس المضيف",
|
||||
"enableProxmoxStats": "تفعيل إحصائيات Proxmox",
|
||||
"enableProxmoxStatsDesc": "اعرض علامة تبويب إحصائيات Proxmox لهذا المضيف مع إحصائيات العقدة والضيف والتخزين والمجموعة التي تم جمعها عبر SSH.",
|
||||
"proxmoxStatsPollInterval": "فاصل الاستطلاع (بالثواني)",
|
||||
"proxmoxStatsPollIntervalDesc": "الحد الأدنى 15 ثانية. عدد مرات تحديث إحصائيات عقدة Proxmox.",
|
||||
"proxmoxStatsNodeOverride": "تجاوز اسم العقدة",
|
||||
"proxmoxStatsNodeOverrideDesc": "تجاوز الكشف التلقائي عن اسم عقدة Proxmox (يتم الكشف عنه عبر اسم المضيف افتراضيًا).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "تم اكتشافه تلقائيًا من اسم المضيف",
|
||||
"metricsCollectionLabel": "تجميع المقاييس",
|
||||
"enableMetricsLabel": "تمكين المقاييس",
|
||||
"enableMetricsDesc": "تجميع مقاييس وحدة المعالجة المركزية والذاكرة والقرص وغيرها من هذا المضيف",
|
||||
"useGlobalMetrics": "استخدام الفاصل الزمني العام",
|
||||
"useGlobalMetricsDesc": "تجاوز باستخدام فترة المقاييس على مستوى الخادم",
|
||||
"metricsIntervalS": "فترة المقاييس (ثانية)",
|
||||
"metricsIntervalDesc2": "الثواني بين لقطات المقاييس",
|
||||
"excludedMountsLabel": "حوامل مستثناة",
|
||||
"monitoredMountsLabel": "مسارات مراقبة مخصصة",
|
||||
"monitoredMountsDesc": "أضف المسارات التي لا يتم عرضها كعمليات ربط منفصلة، بما في ذلك مسارات Home Assistant المرتبطة مثل /config.",
|
||||
"monitoredMountPathPlaceholder": "المسار (/config، /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "ملصق (اختياري)",
|
||||
"addMonitoredMount": "إضافة مسار",
|
||||
"excludedMountsDesc": "إخفاء نقاط التحميل المحددة أو أنواع أنظمة الملفات (مثل nfs و cifs) من استخدام القرص والتنبيهات لهذا المضيف.",
|
||||
"excludedMountsPlaceholder": "مسار التثبيت (/mnt/nas) أو نوع نظام الملفات (nfs، cifs)",
|
||||
"excludedMountsEmpty": "لم يتم استبعاد أي وحدات تخزين. يتم عرض جميع أنظمة الملفات المكتشفة.",
|
||||
"addExcludedMount": "يضيف",
|
||||
"visibleWidgets": "الأدوات المرئية",
|
||||
"widgetsMovedToHostMetrics": "تتم الآن إضافة البطاقات وترتيبها وتغيير حجمها مباشرةً في علامة تبويب مقاييس المضيف. افتح مقاييس المضيف لهذا المضيف واستخدم تخصيص لاختيار البطاقات التي ستظهر.",
|
||||
"quickActionsLabel": "إجراءات سريعة",
|
||||
"quickActionsToolbar": "تظهر الإجراءات السريعة كأزرار في شريط أدوات مقاييس المضيف لتنفيذ الأوامر بنقرة واحدة.",
|
||||
"noQuickActions": "لا توجد إجراءات سريعة بعد.",
|
||||
"buttonLabel": "تسمية الزر",
|
||||
"selectSnippetPlaceholder": "اختر مقتطفًا...",
|
||||
"addActionBtn": "إضافة إجراء"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "المقاييس والتنبيهات",
|
||||
"feature_metrics_desc": "تتبع أداء وحدة المعالجة المركزية والذاكرة والقرص بمرور الوقت، واحصل على تنبيهات عند حدوث مشاكل فيها."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "الاحتفاظ بسجل المقاييس",
|
||||
"metricsHistoryRetentionRange": "من 1 إلى 90 يومًا",
|
||||
"days": "أيام"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "لا توجد بيانات",
|
||||
"showCurrentValue": "إظهار القيمة الحالية",
|
||||
"chartMetric": "المقياس",
|
||||
"metricRange": "النطاق"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "Процесор",
|
||||
"memory": "Памет",
|
||||
"disk": "Диск",
|
||||
"network": "Мрежа",
|
||||
"uptime": "Време на работа",
|
||||
"processes": "Процеси",
|
||||
"available": "Налично",
|
||||
"free": "Безплатно",
|
||||
"connecting": "Свързване...",
|
||||
"connectionFailed": "Неуспешно свързване със сървъра",
|
||||
"naCpus": "Няма процесор(и)",
|
||||
"cpuCores_one": "{{count}} Ядро",
|
||||
"cpuCores_other": "{{count}} Ядра",
|
||||
"cpuUsage": "Използване на процесора",
|
||||
"memoryUsage": "Използване на паметта",
|
||||
"diskUsage": "Използване на диска",
|
||||
"selectFilesystem": "Изберете файлова система",
|
||||
"temperature": "Температура",
|
||||
"highestTemperature": "Най-висока температура",
|
||||
"primaryTemperatureSensor": "Първичен сензор",
|
||||
"gpu": {
|
||||
"title": "Графичен процесор",
|
||||
"noDevice": "Не е открит графичен процесор NVIDIA. Инсталирайте драйвера на NVIDIA (той предоставя nvidia-smi), за да видите показателите на графичния процесор.",
|
||||
"driver": "Шофьор {{version}}",
|
||||
"utilization": "Употреба",
|
||||
"memory": "Видео памет (VRAM)",
|
||||
"temperature": "Температура",
|
||||
"power": "Мощност",
|
||||
"fan": "Вентилатор",
|
||||
"processes": "Процеси на графичния процесор",
|
||||
"noProcesses": "Няма процеси, които да използват графичния процесор"
|
||||
},
|
||||
"failedToFetchHostConfig": "Неуспешно извличане на конфигурацията на хоста",
|
||||
"serverOffline": "Сървърът е офлайн",
|
||||
"cannotFetchMetrics": "Не могат да се извлекат показатели от офлайн сървър",
|
||||
"totpFailed": "Проверката на TOTP не бе успешна",
|
||||
"noneAuthNotSupported": "Метриките на хоста не поддържат тип удостоверяване „няма“.",
|
||||
"noHostSelected": "Няма избран хост",
|
||||
"load": "Зареждане",
|
||||
"systemInfo": "Системна информация",
|
||||
"hostname": "Име на хост",
|
||||
"operatingSystem": "Операционна система",
|
||||
"kernel": "Ядро",
|
||||
"seconds": "секунди",
|
||||
"networkInterfaces": "Мрежови интерфейси",
|
||||
"noInterfacesFound": "Не са намерени мрежови интерфейси",
|
||||
"noProcessesFound": "Не са намерени процеси",
|
||||
"processesTotal": "общо",
|
||||
"processesRunning": "бягане",
|
||||
"loginStats": "Статистика за SSH вход",
|
||||
"noRecentLoginData": "Няма скорошни данни за вход",
|
||||
"executingQuickAction": "Изпълнява се {{name}}...",
|
||||
"quickActionSuccess": "{{name}} завършено успешно",
|
||||
"quickActionFailed": "{{name}} неуспешно",
|
||||
"quickActionError": "Неуспешно изпълнение на {{name}}",
|
||||
"ports": {
|
||||
"title": "Портове за слушане",
|
||||
"protocol": "Протокол",
|
||||
"port": "Порт",
|
||||
"address": "Адрес",
|
||||
"process": "Процес",
|
||||
"search": "Търсене на портове...",
|
||||
"allProtocols": "Всички",
|
||||
"noData": "Няма данни за портове за слушане"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Защитна стена",
|
||||
"inactive": "Неактивен",
|
||||
"policy": "Политика",
|
||||
"rules": "правила",
|
||||
"noRules": "Няма правила в тази верига",
|
||||
"noData": "Няма налични данни за защитната стена",
|
||||
"action": "Действие",
|
||||
"protocol": "Прото",
|
||||
"port": "Порт",
|
||||
"source": "Източник",
|
||||
"anywhere": "Навсякъде",
|
||||
"chains": "вериги"
|
||||
},
|
||||
"loadAvg": "Зареждане на средно",
|
||||
"swap": "Размяна",
|
||||
"architecture": "Архитектура",
|
||||
"refresh": "Обновяване",
|
||||
"retry": "Опитай отново",
|
||||
"customize": "Персонализиране на оформлението",
|
||||
"reset": "Нулиране",
|
||||
"tabLive": "На живо",
|
||||
"editModeInstructions": "Плъзнете картите, за да ги пренаредите, плъзнете долния ръб, за да промените размера им, и използвайте бутона за ширина, за да промените обхвата на картата. Добавете или премахнете карти по-долу.",
|
||||
"managers": {
|
||||
"services": "Услуги",
|
||||
"processInspector": "Инспектор на процеси",
|
||||
"logViewer": "Преглед на лог файлове",
|
||||
"cron": "Cron задачи",
|
||||
"packages": "Пакети",
|
||||
"ssl": "SSL сертификати",
|
||||
"firewall": "Защитна стена",
|
||||
"users": "Потребители и разрешения",
|
||||
"healthCheck": "Проверки на състоянието",
|
||||
"diskBreakdown": "Разбивка на диска",
|
||||
"systemdTimers": "Таймери",
|
||||
"topMemory": "Най-горе по памет",
|
||||
"noData": "Няма данни",
|
||||
"sudoHint": "Задайте парола за sudo за този хост в редактора на хостове, за да активирате привилегировани действия.",
|
||||
"filter": "Филтър...",
|
||||
"start": "Старт",
|
||||
"stop": "Спри",
|
||||
"restart": "Рестартиране",
|
||||
"actionDone": "{{name}} актуализирано",
|
||||
"actionFailed": "Действието е неуспешно",
|
||||
"signalSent": "Сигнал, изпратен към PID {{pid}}",
|
||||
"killHint": "Щракване: прекратяване (SIGTERM). Щракване с десен бутон: принудително прекъсване (SIGKILL).",
|
||||
"working": "Работа...",
|
||||
"update": "Актуализация",
|
||||
"upgradeAll": "Надстройте всички",
|
||||
"allUpToDate": "Всичко е актуално",
|
||||
"save": "Запазване",
|
||||
"command": "Команда",
|
||||
"enabled": "Активирано",
|
||||
"cronSaved": "Crontab е актуализиран",
|
||||
"clients": "Клиенти",
|
||||
"dryRun": "Сухо изпълнение",
|
||||
"renew": "Подновяване",
|
||||
"noAcmeClient": "Не е намерен ACME клиент (certbot или acme.sh) на този хост.",
|
||||
"addInputRule": "Добавяне на правило INPUT",
|
||||
"firewallWarning": "Промените са само по време на изпълнение, докато не бъдат запазени. Внимавайте да не се заключите.",
|
||||
"ruleApplied": "Правилото е приложено",
|
||||
"invalidPort": "Въведете валиден порт (1-65535)",
|
||||
"newUsername": "Ново потребителско име",
|
||||
"addUser": "Добавяне",
|
||||
"deleteUser": "Изтриване на потребител",
|
||||
"noHealthChecks": "Все още няма конфигурирани проверки за състоянието.",
|
||||
"follow": "Следвай",
|
||||
"noLogData": "Няма изходен лог.",
|
||||
"tree": "Дърво",
|
||||
"enableDisable": "Активиране/деактивиране при зареждане",
|
||||
"grantSudo": "Грант sudo",
|
||||
"revokeSudo": "Отмяна на sudo",
|
||||
"sslIssueCert": "Издаване на сертификат",
|
||||
"sslExpired": "Изтекъл",
|
||||
"sslInDays": "в {{days}}дни",
|
||||
"sslNeedDomain": "Въведете поне един домейн",
|
||||
"sslIssued": "Издаден сертификат",
|
||||
"sslDomainsPlaceholder": "пример.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (самостоятелен)",
|
||||
"sslHttpWebroot": "HTTP (уебкорен)",
|
||||
"sslDns": "ДНС",
|
||||
"sslDnsProvider": "DNS доставчик (напр. cloudflare)",
|
||||
"sslIssueHint": "Идентификационните данни на DNS доставчика трябва вече да са конфигурирани на хоста.",
|
||||
"sslRevoke": "Анулиране на сертификат",
|
||||
"sslRevoked": "Сертификатът е отменен",
|
||||
"sslRevokeConfirm": "Да се отмени и премахне сертификатът „{{name}}“? Това не може да бъде отменено.",
|
||||
"healthRun": "Бягане",
|
||||
"healthName": "Име",
|
||||
"healthTarget": "Хост / адрес",
|
||||
"healthAddCheck": "Добавяне на чек",
|
||||
"healthSaved": "Запазени са здравни проверки",
|
||||
"healthMissingFields": "Всяка проверка се нуждае от име и цел",
|
||||
"logFile": "Файл",
|
||||
"logUnit": "Единица",
|
||||
"logCustomPath": "Персонализиран път в /var/log (по избор)",
|
||||
"logGrep": "Филтърни линии...",
|
||||
"firewallPersist": "Запазване на правилата",
|
||||
"firewallPersisted": "Правилата на защитната стена се запазиха",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Задна скала",
|
||||
"wgNotInstalled": "WireGuard не е инсталиран на този хост",
|
||||
"wgNoInterfaces": "Няма конфигурирани WireGuard интерфейси",
|
||||
"wgInterfaceUp": "Доведете",
|
||||
"wgInterfaceDown": "Свалете",
|
||||
"wgBringingUp": "Извеждане на {{name}} нагоре...",
|
||||
"wgBringingDown": "Сваляне на {{name}}...",
|
||||
"wgInterfaceUpDone": "{{name}} е нагоре",
|
||||
"wgInterfaceDownDone": "{{name}} не работи",
|
||||
"wgListenPort": "Порт",
|
||||
"wgPublicKey": "Публичен ключ",
|
||||
"wgEndpoint": "Крайна точка",
|
||||
"wgAllowedIPs": "Разрешени IP адреси",
|
||||
"wgLastHandshake": "Последно ръкостискане",
|
||||
"wgHandshakeNever": "Никога",
|
||||
"wgTransfer": "Трансфер",
|
||||
"tsNotInstalled": "Tailscale не е инсталиран на този хост",
|
||||
"tsRunning": "Бягане",
|
||||
"tsStopped": "Спряно",
|
||||
"tsEnable": "Свържете се",
|
||||
"tsDisable": "Изключване",
|
||||
"tsEnabling": "Свързване с Tailscale...",
|
||||
"tsDisabling": "Изключване от Tailscale...",
|
||||
"tsEnabled": "Свързана опашка",
|
||||
"tsDisabled": "Задната скала е изключена",
|
||||
"tsIPs": "IP адреси на Tailscale",
|
||||
"tsPeers": "Връстници",
|
||||
"tsOnline": "Онлайн",
|
||||
"tsOffline": "Офлайн",
|
||||
"tsExitNode": "Изходен възел",
|
||||
"tsExitNodeActive": "Изходният възел е активен",
|
||||
"tsHostname": "Име на хост"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "История на показателите",
|
||||
"historySuffix": "История",
|
||||
"cpuMemoryDisk": "Процесор / Памет / Диск",
|
||||
"network": "Мрежа",
|
||||
"download": "Рецепта",
|
||||
"upload": "Тексас",
|
||||
"noData": "Няма налични исторически данни за този период от време.",
|
||||
"custom": "Персонализирано",
|
||||
"to": "до",
|
||||
"apply": "Приложи",
|
||||
"viewHistory": "Преглед на историята"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Статистика на Proxmox",
|
||||
"cpuUsage": "Използване на процесора",
|
||||
"memoryUsage": "Използване на паметта",
|
||||
"diskUsage": "Използване на диска",
|
||||
"networkInterfaces": "Мрежови интерфейси",
|
||||
"uptime": "Време на работа",
|
||||
"systemInfo": "Системна информация",
|
||||
"guestsSummary": "Гости",
|
||||
"storagePools": "Пулове за съхранение",
|
||||
"clusterHealth": "Здраве на клъстера",
|
||||
"cpuCores_one": "{{count}} Ядро",
|
||||
"cpuCores_other": "{{count}} Ядра",
|
||||
"used": "Използван",
|
||||
"total": "Общо",
|
||||
"hostname": "Име на хост",
|
||||
"kernel": "Ядро",
|
||||
"pveVersion": "PVE версия",
|
||||
"name": "Име",
|
||||
"status": "Статус",
|
||||
"type": "Тип",
|
||||
"cpu": "Процесор",
|
||||
"mem": "Мем",
|
||||
"disk": "Диск",
|
||||
"running": "Бягане",
|
||||
"stopped": "Спряно",
|
||||
"guestCounts": "{{running}}/{{total}} бягане",
|
||||
"inactive": "Неактивен",
|
||||
"notClustered": "Самостоятелен възел (не е част от клъстер)",
|
||||
"quorate": "Кворат",
|
||||
"notQuorate": "Няма кворум",
|
||||
"nodeOnline": "Онлайн",
|
||||
"nodeOffline": "Офлайн",
|
||||
"noHostSelected": "Няма избран хост",
|
||||
"pveshNotFound": "pvesh не е намерен - това Proxmox възел ли е?",
|
||||
"nodeDetectionFailed": "Не може да се определи валидно име на възел Proxmox",
|
||||
"connecting": "Свързване...",
|
||||
"connectionFailed": "Неуспешно свързване с възел Proxmox",
|
||||
"refresh": "Обновяване",
|
||||
"searchGuests": "Търсене на гости...",
|
||||
"filterAll": "Всички",
|
||||
"filterVm": "ВМ",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "На този възел не са намерени виртуални машини или LXC контейнери.",
|
||||
"noGuestsMatch": "Няма гости, които да отговарят на текущите филтри."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Метрики на хоста"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Метрики на хоста",
|
||||
"enableProxmoxStats": "Активиране на Proxmox Stats",
|
||||
"enableProxmoxStatsDesc": "Покажете раздела „Статистика на Proxmox“ за този хост с актуални статистически данни за възлите, госта, хранилището и клъстера, събрани през SSH.",
|
||||
"proxmoxStatsPollInterval": "Интервал на анкетата (секунди)",
|
||||
"proxmoxStatsPollIntervalDesc": "Минимум 15 секунди. Колко често да се обновяват статистическите данни за възлите на Proxmox.",
|
||||
"proxmoxStatsNodeOverride": "Замяна на името на възела",
|
||||
"proxmoxStatsNodeOverrideDesc": "Игнориране на автоматичното откриване на името на възела Proxmox (по подразбиране се открива чрез името на хоста).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Автоматично разпознато от името на хоста",
|
||||
"metricsCollectionLabel": "Колекция от показатели",
|
||||
"enableMetricsLabel": "Активиране на показатели",
|
||||
"enableMetricsDesc": "Събиране на данни за процесора, RAM, диска и други показатели от този хост",
|
||||
"useGlobalMetrics": "Използване на глобален интервал",
|
||||
"useGlobalMetricsDesc": "Замяна с интервала на показателите за целия сървър",
|
||||
"metricsIntervalS": "Интервал(и) на показателите",
|
||||
"metricsIntervalDesc2": "Секунди между моментните снимки на показателите",
|
||||
"excludedMountsLabel": "Изключени монтировки",
|
||||
"monitoredMountsLabel": "Персонализирани наблюдавани пътища",
|
||||
"monitoredMountsDesc": "Добавете пътища, които не са изложени като отделни монтирания, включително пътища за монтиран Home Assistant чрез свързване, като например /config.",
|
||||
"monitoredMountPathPlaceholder": "Път (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Етикет (по избор)",
|
||||
"addMonitoredMount": "Добавяне на път",
|
||||
"excludedMountsDesc": "Скриване на специфични точки на монтиране или типове файлови системи (напр. nfs, cifs) от използването на диска и предупрежденията за този хост.",
|
||||
"excludedMountsPlaceholder": "Път за монтиране (/mnt/nas) или тип файлова система (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Няма изключени монтирания. Показват се всички открити файлови системи.",
|
||||
"addExcludedMount": "Добавяне",
|
||||
"visibleWidgets": "Видими джаджи",
|
||||
"widgetsMovedToHostMetrics": "Картите вече се добавят, подреждат и преоразмеряват директно в раздела „Показатели за хоста“. Отворете „Показатели за хоста“ за този хост и използвайте „Персонализиране“, за да изберете кои карти да се показват.",
|
||||
"quickActionsLabel": "Бързи действия",
|
||||
"quickActionsToolbar": "Бързите действия се показват като бутони в лентата с инструменти Host Metrics за изпълнение на команди с едно щракване.",
|
||||
"noQuickActions": "Все още няма бързи действия.",
|
||||
"buttonLabel": "Етикет на бутона",
|
||||
"selectSnippetPlaceholder": "Изберете фрагмент...",
|
||||
"addActionBtn": "Добавяне на действие"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Показатели и сигнали",
|
||||
"feature_metrics_desc": "Проследявайте процесора, паметта и диска с течение на времето и получавайте известия, когато се повредят."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Запазване на историята на показателите",
|
||||
"metricsHistoryRetentionRange": "от 1 до 90 дни",
|
||||
"days": "дни"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Няма налични данни",
|
||||
"showCurrentValue": "Показване на текущата стойност",
|
||||
"chartMetric": "Метричен",
|
||||
"metricRange": "Диапазон"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "সিপিইউ",
|
||||
"memory": "স্মৃতি",
|
||||
"disk": "ডিস্ক",
|
||||
"network": "নেটওয়ার্ক",
|
||||
"uptime": "আপটাইম",
|
||||
"processes": "প্রক্রিয়া",
|
||||
"available": "উপলব্ধ",
|
||||
"free": "বিনামূল্যে",
|
||||
"connecting": "সংযোগ স্থাপন...",
|
||||
"connectionFailed": "সার্ভারের সাথে সংযোগ করতে ব্যর্থ হয়েছে",
|
||||
"naCpus": "প্রযোজ্য নয় সিপিইউ(গুলি)",
|
||||
"cpuCores_one": "{{count}} কোর",
|
||||
"cpuCores_other": "{{count}} কোর",
|
||||
"cpuUsage": "সিপিইউ ব্যবহার",
|
||||
"memoryUsage": "মেমরি ব্যবহার",
|
||||
"diskUsage": "ডিস্ক ব্যবহার",
|
||||
"selectFilesystem": "ফাইলসিস্টেম নির্বাচন করুন",
|
||||
"temperature": "তাপমাত্রা",
|
||||
"highestTemperature": "সর্বোচ্চ তাপমাত্রা",
|
||||
"primaryTemperatureSensor": "প্রাথমিক সেন্সর",
|
||||
"gpu": {
|
||||
"title": "জিপিইউ",
|
||||
"noDevice": "কোন NVIDIA GPU সনাক্ত করা যায়নি। GPU মেট্রিক্স দেখতে NVIDIA ড্রাইভারটি (যা nvidia-smi প্রদান করে) ইনস্টল করুন।",
|
||||
"driver": "চালক {{version}}",
|
||||
"utilization": "ব্যবহার",
|
||||
"memory": "VRAM",
|
||||
"temperature": "তাপমাত্রা",
|
||||
"power": "শক্তি",
|
||||
"fan": "ভক্ত",
|
||||
"processes": "জিপিইউ প্রক্রিয়া",
|
||||
"noProcesses": "কোনো প্রসেসই GPU ব্যবহার করছে না।"
|
||||
},
|
||||
"failedToFetchHostConfig": "হোস্ট কনফিগারেশন আনতে ব্যর্থ হয়েছে",
|
||||
"serverOffline": "সার্ভার অফলাইন",
|
||||
"cannotFetchMetrics": "অফলাইন সার্ভার থেকে মেট্রিক্স সংগ্রহ করা যাচ্ছে না",
|
||||
"totpFailed": "TOTP যাচাইকরণ ব্যর্থ হয়েছে",
|
||||
"noneAuthNotSupported": "হোস্ট মেট্রিক্স 'none' অথেনটিকেশন টাইপ সমর্থন করে না।",
|
||||
"noHostSelected": "কোন হোস্ট নির্বাচন করা হয়নি",
|
||||
"load": "লোড",
|
||||
"systemInfo": "সিস্টেমের তথ্য",
|
||||
"hostname": "হোস্টনাম",
|
||||
"operatingSystem": "অপারেটিং সিস্টেম",
|
||||
"kernel": "কার্নেল",
|
||||
"seconds": "সেকেন্ড",
|
||||
"networkInterfaces": "নেটওয়ার্ক ইন্টারফেস",
|
||||
"noInterfacesFound": "কোন নেটওয়ার্ক ইন্টারফেস খুঁজে পাওয়া যায়নি",
|
||||
"noProcessesFound": "কোন প্রক্রিয়া খুঁজে পাওয়া যায়নি",
|
||||
"processesTotal": "মোট",
|
||||
"processesRunning": "দৌড়ানো",
|
||||
"loginStats": "SSH লগইন পরিসংখ্যান",
|
||||
"noRecentLoginData": "সাম্প্রতিক কোনো লগইন ডেটা নেই",
|
||||
"executingQuickAction": "{{name}} কার্যকর করা হচ্ছে ...",
|
||||
"quickActionSuccess": "{{name}} সফলভাবে সম্পন্ন হয়েছে",
|
||||
"quickActionFailed": "{{name}} ব্যর্থ হয়েছে",
|
||||
"quickActionError": "{{name}} কার্যকর করতে ব্যর্থ হয়েছে",
|
||||
"ports": {
|
||||
"title": "লিসেনিং পোর্ট",
|
||||
"protocol": "প্রোটোকল",
|
||||
"port": "বন্দর",
|
||||
"address": "ঠিকানা",
|
||||
"process": "প্রক্রিয়া",
|
||||
"search": "পোর্ট অনুসন্ধান করুন...",
|
||||
"allProtocols": "সব",
|
||||
"noData": "কোন লিসেনিং পোর্ট ডেটা নেই"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "ফায়ারওয়াল",
|
||||
"inactive": "নিষ্ক্রিয়",
|
||||
"policy": "নীতি",
|
||||
"rules": "নিয়ম",
|
||||
"noRules": "এই শৃঙ্খলে কোনো নিয়ম নেই",
|
||||
"noData": "কোন ফায়ারওয়াল ডেটা উপলব্ধ নেই",
|
||||
"action": "পদক্ষেপ",
|
||||
"protocol": "প্রোটো",
|
||||
"port": "বন্দর",
|
||||
"source": "উৎস",
|
||||
"anywhere": "যেকোনো জায়গায়",
|
||||
"chains": "শৃঙ্খল"
|
||||
},
|
||||
"loadAvg": "গড় লোড",
|
||||
"swap": "অদলবদল",
|
||||
"architecture": "স্থাপত্য",
|
||||
"refresh": "রিফ্রেশ",
|
||||
"retry": "পুনরায় চেষ্টা করুন",
|
||||
"customize": "লেআউট কাস্টমাইজ করুন",
|
||||
"reset": "রিসেট",
|
||||
"tabLive": "সরাসরি",
|
||||
"editModeInstructions": "কার্ডগুলো পুনর্বিন্যাস করতে টেনে আনুন, আকার পরিবর্তন করতে নিচের কিনারা টেনে আনুন এবং কার্ডের বিস্তার বদলাতে প্রস্থ বোতামটি ব্যবহার করুন। নিচে কার্ড যোগ বা অপসারণ করুন।",
|
||||
"managers": {
|
||||
"services": "পরিষেবা",
|
||||
"processInspector": "প্রক্রিয়া পরিদর্শক",
|
||||
"logViewer": "লগ ভিউয়ার",
|
||||
"cron": "ক্রন জবস",
|
||||
"packages": "প্যাকেজ",
|
||||
"ssl": "SSL সার্টিফিকেট",
|
||||
"firewall": "ফায়ারওয়াল",
|
||||
"users": "ব্যবহারকারী ও অনুমতি",
|
||||
"healthCheck": "স্বাস্থ্য পরীক্ষা",
|
||||
"diskBreakdown": "ডিস্ক ব্রেকডাউন",
|
||||
"systemdTimers": "টাইমার",
|
||||
"topMemory": "স্মৃতি দ্বারা শীর্ষে",
|
||||
"noData": "কোন ডেটা নেই",
|
||||
"sudoHint": "বিশেষাধিকারপ্রাপ্ত কাজগুলো সক্ষম করতে হোস্ট এডিটরে এই হোস্টের জন্য একটি sudo পাসওয়ার্ড সেট করুন।",
|
||||
"filter": "ফিল্টার...",
|
||||
"start": "শুরু করুন",
|
||||
"stop": "থামুন",
|
||||
"restart": "পুনরায় চালু করুন",
|
||||
"actionDone": "{{name}} আপডেট করা হয়েছে",
|
||||
"actionFailed": "পদক্ষেপ ব্যর্থ হয়েছে",
|
||||
"signalSent": "PID {{pid}}-তে সংকেত পাঠানো হয়েছে",
|
||||
"killHint": "ক্লিক: বন্ধ করুন (SIGTERM)। ডান-ক্লিক: জোরপূর্বক বন্ধ করুন (SIGKILL)।",
|
||||
"working": "কাজ চলছে...",
|
||||
"update": "আপডেট",
|
||||
"upgradeAll": "সব আপগ্রেড করুন",
|
||||
"allUpToDate": "সবকিছু হালনাগাদ আছে",
|
||||
"save": "সংরক্ষণ করুন",
|
||||
"command": "আদেশ",
|
||||
"enabled": "সক্ষম করা হয়েছে",
|
||||
"cronSaved": "ক্রনট্যাব আপডেট করা হয়েছে",
|
||||
"clients": "ক্লায়েন্টরা",
|
||||
"dryRun": "ড্রাই রান",
|
||||
"renew": "পুনর্নবীকরণ করুন",
|
||||
"noAcmeClient": "এই হোস্টে কোনো ACME ক্লায়েন্ট (certbot বা acme.sh) খুঁজে পাওয়া যায়নি।",
|
||||
"addInputRule": "ইনপুট নিয়ম যোগ করুন",
|
||||
"firewallWarning": "স্থায়ী না হওয়া পর্যন্ত পরিবর্তনগুলো শুধুমাত্র রানটাইমে কার্যকর থাকে। খেয়াল রাখবেন যেন আপনি নিজে লক আউট না হয়ে যান।",
|
||||
"ruleApplied": "নিয়ম প্রয়োগ করা হয়েছে",
|
||||
"invalidPort": "একটি বৈধ পোর্ট প্রবেশ করান (1-65535)",
|
||||
"newUsername": "নতুন ব্যবহারকারীর নাম",
|
||||
"addUser": "যোগ করুন",
|
||||
"deleteUser": "ব্যবহারকারীকে মুছে ফেলুন",
|
||||
"noHealthChecks": "এখনো কোনো স্বাস্থ্য পরীক্ষা কনফিগার করা হয়নি।",
|
||||
"follow": "অনুসরণ করুন",
|
||||
"noLogData": "কোনো লগ আউটপুট নেই।",
|
||||
"tree": "গাছ",
|
||||
"enableDisable": "বুট করার সময় সক্ষম / অক্ষম করুন",
|
||||
"grantSudo": "Grant sudo",
|
||||
"revokeSudo": "sudo প্রত্যাহার করুন",
|
||||
"sslIssueCert": "সার্টিফিকেট প্রদান করুন",
|
||||
"sslExpired": "মেয়াদোত্তীর্ণ",
|
||||
"sslInDays": "{{days}}d-তে",
|
||||
"sslNeedDomain": "অন্তত একটি ডোমেইন প্রবেশ করান",
|
||||
"sslIssued": "সার্টিফিকেট ইস্যু করা হয়েছে",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (স্বতন্ত্র)",
|
||||
"sslHttpWebroot": "HTTP (ওয়েবরুট)",
|
||||
"sslDns": "ডিএনএস",
|
||||
"sslDnsProvider": "ডিএনএস প্রদানকারী (যেমন ক্লাউডফ্লেয়ার)",
|
||||
"sslIssueHint": "হোস্টে ডিএনএস প্রদানকারীর ক্রেডেনশিয়াল অবশ্যই আগে থেকে কনফিগার করা থাকতে হবে।",
|
||||
"sslRevoke": "সার্টিফিকেট বাতিল করুন",
|
||||
"sslRevoked": "সার্টিফিকেট বাতিল করা হয়েছে",
|
||||
"sslRevokeConfirm": "সার্টিফিকেট \"{{name}}\" বাতিল এবং অপসারণ করবেন? এটি পূর্বাবস্থায় ফেরানো যাবে না।",
|
||||
"healthRun": "দৌড়",
|
||||
"healthName": "নাম",
|
||||
"healthTarget": "হোস্ট / ঠিকানা",
|
||||
"healthAddCheck": "চেক যোগ করুন",
|
||||
"healthSaved": "স্বাস্থ্য পরীক্ষা সংরক্ষিত",
|
||||
"healthMissingFields": "প্রতিটি চেকের একটি নাম এবং লক্ষ্য থাকা প্রয়োজন।",
|
||||
"logFile": "ফাইল",
|
||||
"logUnit": "ইউনিট",
|
||||
"logCustomPath": "/var/log-এর অধীনে নিজস্ব পথ (ঐচ্ছিক)",
|
||||
"logGrep": "ফিল্টার লাইন...",
|
||||
"firewallPersist": "অধ্যবসায় নিয়ম",
|
||||
"firewallPersisted": "ফায়ারওয়াল নিয়মগুলি অব্যাহত ছিল",
|
||||
"wireguard": "ওয়্যারগার্ড",
|
||||
"tailscale": "লেজের স্কেল",
|
||||
"wgNotInstalled": "এই হোস্টে WireGuard ইনস্টল করা নেই",
|
||||
"wgNoInterfaces": "কোন WireGuard ইন্টারফেস কনফিগার করা নেই",
|
||||
"wgInterfaceUp": "উত্থাপন করুন",
|
||||
"wgInterfaceDown": "নামিয়ে আনুন",
|
||||
"wgBringingUp": "{{name}} উপরে তুলে আনা...",
|
||||
"wgBringingDown": "{{name}} কে নিচে নামিয়ে আনা হচ্ছে...",
|
||||
"wgInterfaceUpDone": "{{name}} উপরে আছে",
|
||||
"wgInterfaceDownDone": "{{name}} নিচে আছে",
|
||||
"wgListenPort": "বন্দর",
|
||||
"wgPublicKey": "পাবলিক কী",
|
||||
"wgEndpoint": "এন্ডপয়েন্ট",
|
||||
"wgAllowedIPs": "অনুমোদিত আইপি",
|
||||
"wgLastHandshake": "শেষ করমর্দন",
|
||||
"wgHandshakeNever": "কখনো না",
|
||||
"wgTransfer": "স্থানান্তর",
|
||||
"tsNotInstalled": "এই হোস্টে টেইলস্কেল ইনস্টল করা নেই।",
|
||||
"tsRunning": "দৌড়ানো",
|
||||
"tsStopped": "থামানো হয়েছে",
|
||||
"tsEnable": "সংযোগ করুন",
|
||||
"tsDisable": "সংযোগ বিচ্ছিন্ন করুন",
|
||||
"tsEnabling": "টেইলস্কেলের সাথে সংযোগ স্থাপন করা হচ্ছে...",
|
||||
"tsDisabling": "টেইলস্কেল থেকে সংযোগ বিচ্ছিন্ন হচ্ছে...",
|
||||
"tsEnabled": "টেলস্কেল সংযুক্ত",
|
||||
"tsDisabled": "টেলস্কেল সংযোগ বিচ্ছিন্ন",
|
||||
"tsIPs": "টেইলস্কেল আইপি",
|
||||
"tsPeers": "সমবয়সীরা",
|
||||
"tsOnline": "অনলাইন",
|
||||
"tsOffline": "অফলাইন",
|
||||
"tsExitNode": "প্রস্থান নোড",
|
||||
"tsExitNodeActive": "প্রস্থান নোড সক্রিয়",
|
||||
"tsHostname": "হোস্টনাম"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "মেট্রিক্সের ইতিহাস",
|
||||
"historySuffix": "ইতিহাস",
|
||||
"cpuMemoryDisk": "সিপিইউ / মেমরি / ডিস্ক",
|
||||
"network": "নেটওয়ার্ক",
|
||||
"download": "আরএক্স",
|
||||
"upload": "টেক্সাস",
|
||||
"noData": "এই সময়সীমার জন্য কোনো ঐতিহাসিক তথ্য উপলব্ধ নেই।",
|
||||
"custom": "কাস্টম",
|
||||
"to": "থেকে",
|
||||
"apply": "আবেদন করুন",
|
||||
"viewHistory": "ইতিহাস দেখুন"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "প্রক্সমক্স পরিসংখ্যান",
|
||||
"cpuUsage": "সিপিইউ ব্যবহার",
|
||||
"memoryUsage": "মেমরি ব্যবহার",
|
||||
"diskUsage": "ডিস্ক ব্যবহার",
|
||||
"networkInterfaces": "নেটওয়ার্ক ইন্টারফেস",
|
||||
"uptime": "আপটাইম",
|
||||
"systemInfo": "সিস্টেমের তথ্য",
|
||||
"guestsSummary": "অতিথিরা",
|
||||
"storagePools": "স্টোরেজ পুল",
|
||||
"clusterHealth": "ক্লাস্টার স্বাস্থ্য",
|
||||
"cpuCores_one": "{{count}} কোর",
|
||||
"cpuCores_other": "{{count}} কোর",
|
||||
"used": "ব্যবহৃত",
|
||||
"total": "মোট",
|
||||
"hostname": "হোস্টনাম",
|
||||
"kernel": "কার্নেল",
|
||||
"pveVersion": "PVE সংস্করণ",
|
||||
"name": "নাম",
|
||||
"status": "অবস্থা",
|
||||
"type": "প্রকার",
|
||||
"cpu": "সিপিইউ",
|
||||
"mem": "মেম",
|
||||
"disk": "ডিস্ক",
|
||||
"running": "দৌড়ানো",
|
||||
"stopped": "থামানো হয়েছে",
|
||||
"guestCounts": "{{running}}/{{total}} চলমান",
|
||||
"inactive": "নিষ্ক্রিয়",
|
||||
"notClustered": "স্বতন্ত্র নোড (ক্লাস্টারের অংশ নয়)",
|
||||
"quorate": "কোরাট",
|
||||
"notQuorate": "কোরাম পূর্ণ নয়",
|
||||
"nodeOnline": "অনলাইন",
|
||||
"nodeOffline": "অফলাইন",
|
||||
"noHostSelected": "কোন হোস্ট নির্বাচন করা হয়নি",
|
||||
"pveshNotFound": "pvesh খুঁজে পাওয়া যায়নি - এটি কি একটি Proxmox নোড?",
|
||||
"nodeDetectionFailed": "একটি বৈধ Proxmox নোডের নাম নির্ধারণ করা সম্ভব হয়নি।",
|
||||
"connecting": "সংযোগ স্থাপন...",
|
||||
"connectionFailed": "Proxmox নোডের সাথে সংযোগ করতে ব্যর্থ হয়েছে",
|
||||
"refresh": "রিফ্রেশ",
|
||||
"searchGuests": "অতিথিদের অনুসন্ধান করুন...",
|
||||
"filterAll": "সব",
|
||||
"filterVm": "ভিএম",
|
||||
"filterLxc": "এলএক্সসি",
|
||||
"noGuests": "এই নোডে কোনো ভিএম বা এলএক্সসি কন্টেইনার খুঁজে পাওয়া যায়নি।",
|
||||
"noGuestsMatch": "বর্তমান ফিল্টারগুলোর সাথে কোনো অতিথি মেলে না।"
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "হোস্ট মেট্রিক্স"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "হোস্ট মেট্রিক্স",
|
||||
"enableProxmoxStats": "Proxmox Stats সক্রিয় করুন",
|
||||
"enableProxmoxStatsDesc": "এই হোস্টের জন্য একটি Proxmox Stats ট্যাব দেখান, যেখানে SSH-এর মাধ্যমে সংগৃহীত লাইভ নোড, গেস্ট, স্টোরেজ এবং ক্লাস্টার পরিসংখ্যান থাকবে।",
|
||||
"proxmoxStatsPollInterval": "ভোটের ব্যবধান (সেকেন্ড)",
|
||||
"proxmoxStatsPollIntervalDesc": "সর্বনিম্ন ১৫ সেকেন্ড। কত ঘন ঘন প্রক্সমক্স নোড স্ট্যাটস রিফ্রেশ করতে হবে।",
|
||||
"proxmoxStatsNodeOverride": "নোডের নাম ওভাররাইড",
|
||||
"proxmoxStatsNodeOverrideDesc": "প্রক্সমক্স নোডের নামের স্বয়ংক্রিয় সনাক্তকরণকে অগ্রাহ্য করুন (যা ডিফল্টরূপে হোস্টনেমের মাধ্যমে সনাক্ত করা হয়)।",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "হোস্টনেম থেকে স্বয়ংক্রিয়ভাবে শনাক্ত করা হয়েছে",
|
||||
"metricsCollectionLabel": "মেট্রিক্স সংগ্রহ",
|
||||
"enableMetricsLabel": "মেট্রিক্স সক্ষম করুন",
|
||||
"enableMetricsDesc": "এই হোস্ট থেকে সিপিইউ, র্যাম, ডিস্ক এবং অন্যান্য মেট্রিক সংগ্রহ করুন।",
|
||||
"useGlobalMetrics": "গ্লোবাল ইন্টারভাল ব্যবহার করুন",
|
||||
"useGlobalMetricsDesc": "সার্ভার-ব্যাপী মেট্রিক্স ব্যবধান দিয়ে ওভাররাইড করুন",
|
||||
"metricsIntervalS": "মেট্রিক্স ব্যবধান (সেকেন্ড)",
|
||||
"metricsIntervalDesc2": "মেট্রিক স্ন্যাপশটগুলির মধ্যে সেকেন্ডের ব্যবধান",
|
||||
"excludedMountsLabel": "বাদ দেওয়া মাউন্টগুলি",
|
||||
"monitoredMountsLabel": "কাস্টম পর্যবেক্ষণ করা পথ",
|
||||
"monitoredMountsDesc": "এমন পাথ যোগ করুন যা আলাদা মাউন্ট হিসাবে উন্মুক্ত নয়, যার মধ্যে /config-এর মতো বাইন্ড-মাউন্টেড Home Assistant পাথও অন্তর্ভুক্ত।",
|
||||
"monitoredMountPathPlaceholder": "পাথ (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "লেবেল (ঐচ্ছিক)",
|
||||
"addMonitoredMount": "পথ যোগ করুন",
|
||||
"excludedMountsDesc": "এই হোস্টের জন্য ডিস্ক ব্যবহার এবং সতর্কতা থেকে নির্দিষ্ট মাউন্ট পয়েন্ট বা ফাইলসিস্টেমের ধরণ (যেমন nfs, cifs) লুকান।",
|
||||
"excludedMountsPlaceholder": "মাউন্ট পাথ (/mnt/nas) অথবা ফাইলসিস্টেমের ধরণ (nfs, cifs)",
|
||||
"excludedMountsEmpty": "কোনো মাউন্ট বাদ দেওয়া হয়নি। শনাক্তকৃত সকল ফাইলসিস্টেম দেখানো হয়েছে।",
|
||||
"addExcludedMount": "যোগ করুন",
|
||||
"visibleWidgets": "দৃশ্যমান উইজেট",
|
||||
"widgetsMovedToHostMetrics": "এখন কার্ডগুলি সরাসরি হোস্ট মেট্রিক্স ট্যাবে যোগ, সাজানো এবং আকার পরিবর্তন করা যায়। এই হোস্টের জন্য হোস্ট মেট্রিক্স খুলুন এবং কোন কার্ডগুলি দেখানো হবে তা বেছে নিতে কাস্টমাইজ ব্যবহার করুন।",
|
||||
"quickActionsLabel": "দ্রুত পদক্ষেপ",
|
||||
"quickActionsToolbar": "এক ক্লিকে কমান্ড কার্যকর করার জন্য কুইক অ্যাকশনগুলো হোস্ট মেট্রিক্স টুলবারে বাটন হিসেবে প্রদর্শিত হয়।",
|
||||
"noQuickActions": "এখনো কোনো দ্রুত পদক্ষেপ নেওয়া হয়নি।",
|
||||
"buttonLabel": "বোতাম লেবেল",
|
||||
"selectSnippetPlaceholder": "স্নিপেট নির্বাচন করুন...",
|
||||
"addActionBtn": "অ্যাকশন যোগ করুন"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "মেট্রিক্স এবং সতর্কতা",
|
||||
"feature_metrics_desc": "সময়ের সাথে সাথে সিপিইউ, মেমরি এবং ডিস্কের অবস্থা পর্যবেক্ষণ করুন এবং সেগুলি বিকল হয়ে গেলে সতর্কবার্তা পান।"
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "মেট্রিক্সের ইতিহাস সংরক্ষণ",
|
||||
"metricsHistoryRetentionRange": "১ থেকে ৯০ দিন",
|
||||
"days": "দিন"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "কোন ডেটা উপলব্ধ নেই",
|
||||
"showCurrentValue": "বর্তমান মান দেখান",
|
||||
"chartMetric": "মেট্রিক",
|
||||
"metricRange": "পরিসর"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "Memòria",
|
||||
"disk": "Disc",
|
||||
"network": "Xarxa",
|
||||
"uptime": "Temps de funcionament",
|
||||
"processes": "Processos",
|
||||
"available": "Disponible",
|
||||
"free": "Gratuït",
|
||||
"connecting": "Connectant...",
|
||||
"connectionFailed": "No s'ha pogut connectar al servidor",
|
||||
"naCpus": "CPU(s) N/A",
|
||||
"cpuCores_one": "{{count}} Nucli",
|
||||
"cpuCores_other": "{{count}} Nuclis",
|
||||
"cpuUsage": "Ús de la CPU",
|
||||
"memoryUsage": "Ús de memòria",
|
||||
"diskUsage": "Ús del disc",
|
||||
"selectFilesystem": "Selecciona el sistema de fitxers",
|
||||
"temperature": "Temperatura",
|
||||
"highestTemperature": "Temperatura més alta",
|
||||
"primaryTemperatureSensor": "Sensor principal",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "No s'ha detectat cap GPU NVIDIA. Instal·leu el controlador NVIDIA (proporciona nvidia-smi) per veure les mètriques de la GPU.",
|
||||
"driver": "Conductor {{version}}",
|
||||
"utilization": "Utilització",
|
||||
"memory": "VRAM",
|
||||
"temperature": "Temperatura",
|
||||
"power": "Poder",
|
||||
"fan": "Ventilador",
|
||||
"processes": "Processos de la GPU",
|
||||
"noProcesses": "Cap procés utilitza la GPU"
|
||||
},
|
||||
"failedToFetchHostConfig": "No s'ha pogut obtenir la configuració de l'amfitrió",
|
||||
"serverOffline": "Servidor fora de línia",
|
||||
"cannotFetchMetrics": "No es poden obtenir mètriques del servidor fora de línia",
|
||||
"totpFailed": "La verificació TOTP ha fallat",
|
||||
"noneAuthNotSupported": "Les mètriques de l'amfitrió no admeten el tipus d'autenticació \"cap\".",
|
||||
"noHostSelected": "No s'ha seleccionat cap amfitrió",
|
||||
"load": "Carrega",
|
||||
"systemInfo": "Informació del sistema",
|
||||
"hostname": "Nom d'amfitrió",
|
||||
"operatingSystem": "Sistema operatiu",
|
||||
"kernel": "Nucli",
|
||||
"seconds": "segons",
|
||||
"networkInterfaces": "Interfícies de xarxa",
|
||||
"noInterfacesFound": "No s'han trobat interfícies de xarxa",
|
||||
"noProcessesFound": "No s'han trobat processos",
|
||||
"processesTotal": "total",
|
||||
"processesRunning": "corrent",
|
||||
"loginStats": "Estadístiques d'inici de sessió SSH",
|
||||
"noRecentLoginData": "Sense dades d'inici de sessió recents",
|
||||
"executingQuickAction": "Executant {{name}}...",
|
||||
"quickActionSuccess": "{{name}} s'ha completat correctament",
|
||||
"quickActionFailed": "{{name}} ha fallat",
|
||||
"quickActionError": "No s'ha pogut executar {{name}}",
|
||||
"ports": {
|
||||
"title": "Ports d'escolta",
|
||||
"protocol": "Protocol",
|
||||
"port": "Port",
|
||||
"address": "Adreça",
|
||||
"process": "Procés",
|
||||
"search": "Cerca ports...",
|
||||
"allProtocols": "Tot",
|
||||
"noData": "No hi ha dades de ports d'escolta"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Tallafocs",
|
||||
"inactive": "Inactiu",
|
||||
"policy": "Política",
|
||||
"rules": "regles",
|
||||
"noRules": "No hi ha regles en aquesta cadena",
|
||||
"noData": "No hi ha dades de tallafocs disponibles",
|
||||
"action": "Acció",
|
||||
"protocol": "Proto",
|
||||
"port": "Port",
|
||||
"source": "Font",
|
||||
"anywhere": "A qualsevol lloc",
|
||||
"chains": "cadenes"
|
||||
},
|
||||
"loadAvg": "Mitjana de càrrega",
|
||||
"swap": "Intercanvi",
|
||||
"architecture": "Arquitectura",
|
||||
"refresh": "Actualitza",
|
||||
"retry": "Torna-ho a intentar",
|
||||
"customize": "Personalitza el disseny",
|
||||
"reset": "Restablir",
|
||||
"tabLive": "En directe",
|
||||
"editModeInstructions": "Arrossega les cartes per reorganitzar-les, arrossega la vora inferior per canviar-ne la mida i utilitza el botó d'amplada per canviar l'extensió d'una carta. Afegeix o elimina cartes a continuació.",
|
||||
"managers": {
|
||||
"services": "Serveis",
|
||||
"processInspector": "Inspector de processos",
|
||||
"logViewer": "Visualitzador de registre",
|
||||
"cron": "Treballs cron",
|
||||
"packages": "Paquets",
|
||||
"ssl": "Certificats SSL",
|
||||
"firewall": "Tallafocs",
|
||||
"users": "Usuaris i permisos",
|
||||
"healthCheck": "Controls de salut",
|
||||
"diskBreakdown": "Avaria del disc",
|
||||
"systemdTimers": "Temporitzadors",
|
||||
"topMemory": "Top per memòria",
|
||||
"noData": "Sense dades",
|
||||
"sudoHint": "Establiu una contrasenya sudo per a aquest host a l'editor d'hosts per habilitar accions privilegiades.",
|
||||
"filter": "Filtra...",
|
||||
"start": "Inici",
|
||||
"stop": "Atura",
|
||||
"restart": "Reinicia",
|
||||
"actionDone": "{{name}} actualitzat",
|
||||
"actionFailed": "L'acció ha fallat",
|
||||
"signalSent": "Senyal enviat al PID {{pid}}",
|
||||
"killHint": "Clic: finalitzar (SIGTERM). Clic amb el botó dret: forçar la mort (SIGKILL).",
|
||||
"working": "Treballant...",
|
||||
"update": "Actualització",
|
||||
"upgradeAll": "Actualitza-ho tot",
|
||||
"allUpToDate": "Tot està actualitzat",
|
||||
"save": "Desa",
|
||||
"command": "Comandament",
|
||||
"enabled": "Activat",
|
||||
"cronSaved": "Crontab actualitzat",
|
||||
"clients": "Clients",
|
||||
"dryRun": "Sessió en sec",
|
||||
"renew": "Renovar",
|
||||
"noAcmeClient": "No s'ha trobat cap client ACME (certbot o acme.sh) en aquest amfitrió.",
|
||||
"addInputRule": "Afegeix una regla INPUT",
|
||||
"firewallWarning": "Els canvis només són en temps d'execució fins que persisteixen. Aneu amb compte de no bloquejar-vos l'accés.",
|
||||
"ruleApplied": "Regla aplicada",
|
||||
"invalidPort": "Introduïu un port vàlid (1-65535)",
|
||||
"newUsername": "Nou nom d'usuari",
|
||||
"addUser": "Afegeix",
|
||||
"deleteUser": "Suprimeix l'usuari",
|
||||
"noHealthChecks": "Encara no s'ha configurat cap comprovació d'estat.",
|
||||
"follow": "Segueix",
|
||||
"noLogData": "No hi ha sortida de registre.",
|
||||
"tree": "Arbre",
|
||||
"enableDisable": "Activa / desactiva a l'arrencada",
|
||||
"grantSudo": "Concedir sudo",
|
||||
"revokeSudo": "Revoca sudo",
|
||||
"sslIssueCert": "Emetre certificat",
|
||||
"sslExpired": "Caducat",
|
||||
"sslInDays": "en {{days}}d",
|
||||
"sslNeedDomain": "Introduïu com a mínim un domini",
|
||||
"sslIssued": "Certificat emès",
|
||||
"sslDomainsPlaceholder": "exemple.com, www.exemple.com",
|
||||
"sslHttpStandalone": "HTTP (autònom)",
|
||||
"sslHttpWebroot": "HTTP (arrel web)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "Proveïdor de DNS (per exemple, Cloudflare)",
|
||||
"sslIssueHint": "Les credencials del proveïdor DNS ja han d'estar configurades a l'amfitrió.",
|
||||
"sslRevoke": "Revoca el certificat",
|
||||
"sslRevoked": "Certificat revocat",
|
||||
"sslRevokeConfirm": "Voleu revocar i eliminar el certificat \"{{name}}\"? Això no es pot desfer.",
|
||||
"healthRun": "Corre",
|
||||
"healthName": "Nom",
|
||||
"healthTarget": "Host / adreça",
|
||||
"healthAddCheck": "Afegeix un xec",
|
||||
"healthSaved": "S'han desat les comprovacions d'estat",
|
||||
"healthMissingFields": "Cada comprovació necessita un nom i un objectiu",
|
||||
"logFile": "Fitxer",
|
||||
"logUnit": "Unitat",
|
||||
"logCustomPath": "Ruta personalitzada a /var/log (opcional)",
|
||||
"logGrep": "Línies de filtre...",
|
||||
"firewallPersist": "Regles de persistència",
|
||||
"firewallPersisted": "Les regles del tallafocs van persistir",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Escala de cua",
|
||||
"wgNotInstalled": "WireGuard no està instal·lat en aquest host.",
|
||||
"wgNoInterfaces": "No hi ha cap interfície de WireGuard configurada",
|
||||
"wgInterfaceUp": "Porta a col·lació",
|
||||
"wgInterfaceDown": "Baixar",
|
||||
"wgBringingUp": "S'està mostrant {{name}}...",
|
||||
"wgBringingDown": "Baixant {{name}}...",
|
||||
"wgInterfaceUpDone": "{{name}} està activat",
|
||||
"wgInterfaceDownDone": "{{name}} està apagat",
|
||||
"wgListenPort": "Port",
|
||||
"wgPublicKey": "Clau pública",
|
||||
"wgEndpoint": "Punt final",
|
||||
"wgAllowedIPs": "IP permeses",
|
||||
"wgLastHandshake": "Última encaixada de mans",
|
||||
"wgHandshakeNever": "Mai",
|
||||
"wgTransfer": "Transferència",
|
||||
"tsNotInstalled": "Tailscale no està instal·lat en aquest amfitrió",
|
||||
"tsRunning": "Córrer",
|
||||
"tsStopped": "Aturat",
|
||||
"tsEnable": "Connecta",
|
||||
"tsDisable": "Desconnecta",
|
||||
"tsEnabling": "Connectant a Tailscale...",
|
||||
"tsDisabling": "Desconnectant de Tailscale...",
|
||||
"tsEnabled": "Escala de cua connectada",
|
||||
"tsDisabled": "Escala de cua desconnectada",
|
||||
"tsIPs": "IP de cua escala",
|
||||
"tsPeers": "Compañers",
|
||||
"tsOnline": "En línia",
|
||||
"tsOffline": "Fora de línia",
|
||||
"tsExitNode": "Node de sortida",
|
||||
"tsExitNodeActive": "Node de sortida actiu",
|
||||
"tsHostname": "Nom d'amfitrió"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Historial de mètriques",
|
||||
"historySuffix": "Història",
|
||||
"cpuMemoryDisk": "CPU / Memòria / Disc",
|
||||
"network": "Xarxa",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "No hi ha dades històriques disponibles per a aquest interval de temps.",
|
||||
"custom": "Personalitzat",
|
||||
"to": "a",
|
||||
"apply": "Aplica",
|
||||
"viewHistory": "Veure l'historial"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Estadístiques de Proxmox",
|
||||
"cpuUsage": "Ús de la CPU",
|
||||
"memoryUsage": "Ús de memòria",
|
||||
"diskUsage": "Ús del disc",
|
||||
"networkInterfaces": "Interfícies de xarxa",
|
||||
"uptime": "Temps de funcionament",
|
||||
"systemInfo": "Informació del sistema",
|
||||
"guestsSummary": "Convidats",
|
||||
"storagePools": "Piscines d'emmagatzematge",
|
||||
"clusterHealth": "Salut del clúster",
|
||||
"cpuCores_one": "{{count}} Nucli",
|
||||
"cpuCores_other": "{{count}} Nuclis",
|
||||
"used": "Usat",
|
||||
"total": "Total",
|
||||
"hostname": "Nom d'amfitrió",
|
||||
"kernel": "Nucli",
|
||||
"pveVersion": "Versió PVE",
|
||||
"name": "Nom",
|
||||
"status": "Estat",
|
||||
"type": "Tipus",
|
||||
"cpu": "CPU",
|
||||
"mem": "Memòria",
|
||||
"disk": "Disc",
|
||||
"running": "Córrer",
|
||||
"stopped": "Aturat",
|
||||
"guestCounts": "{{running}}/{{total}} en execució",
|
||||
"inactive": "Inactiu",
|
||||
"notClustered": "Node autònom (no forma part d'un clúster)",
|
||||
"quorate": "Quota",
|
||||
"notQuorate": "Sense quòrum",
|
||||
"nodeOnline": "En línia",
|
||||
"nodeOffline": "Fora de línia",
|
||||
"noHostSelected": "No s'ha seleccionat cap amfitrió",
|
||||
"pveshNotFound": "No s'ha trobat pvesh: és un node de Proxmox?",
|
||||
"nodeDetectionFailed": "No s'ha pogut determinar un nom de node Proxmox vàlid",
|
||||
"connecting": "Connectant...",
|
||||
"connectionFailed": "No s'ha pogut connectar al node de Proxmox.",
|
||||
"refresh": "Actualitza",
|
||||
"searchGuests": "Cerca convidats...",
|
||||
"filterAll": "Tot",
|
||||
"filterVm": "màquina virtual",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "No s'han trobat màquines virtuals ni contenidors LXC en aquest node.",
|
||||
"noGuestsMatch": "No hi ha convidats que coincideixin amb els filtres actuals."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Mètriques de l'amfitrió"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Mètriques de l'amfitrió",
|
||||
"enableProxmoxStats": "Activa les estadístiques de Proxmox",
|
||||
"enableProxmoxStatsDesc": "Mostra una pestanya Estadístiques de Proxmox per a aquest amfitrió amb estadístiques en directe de node, convidat, emmagatzematge i clúster recollides a través de SSH.",
|
||||
"proxmoxStatsPollInterval": "Interval de sondeig (segons)",
|
||||
"proxmoxStatsPollIntervalDesc": "Mínim 15 segons. Amb quina freqüència s'han d'actualitzar les estadístiques del node Proxmox.",
|
||||
"proxmoxStatsNodeOverride": "Substitució del nom del node",
|
||||
"proxmoxStatsNodeOverrideDesc": "Anul·la la detecció automàtica del nom del node Proxmox (detectat per defecte mitjançant el nom de l'amfitrió).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Detectat automàticament des del nom d'amfitrió",
|
||||
"metricsCollectionLabel": "Col·lecció de mètriques",
|
||||
"enableMetricsLabel": "Activa les mètriques",
|
||||
"enableMetricsDesc": "Recopila mètriques de CPU, RAM, disc i altres d'aquest amfitrió",
|
||||
"useGlobalMetrics": "Utilitza l'interval global",
|
||||
"useGlobalMetricsDesc": "Substitueix amb l'interval de mètriques de tot el servidor",
|
||||
"metricsIntervalS": "Interval de mètriques (s)",
|
||||
"metricsIntervalDesc2": "Segons entre instantànies de mètriques",
|
||||
"excludedMountsLabel": "Muntatges exclosos",
|
||||
"monitoredMountsLabel": "Rutes monitoritzades personalitzades",
|
||||
"monitoredMountsDesc": "Afegiu camins que no estiguin exposats com a muntatges separats, inclosos els camins de l'Assistent d'inici muntats per vinculació, com ara /config.",
|
||||
"monitoredMountPathPlaceholder": "Camí (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Etiqueta (opcional)",
|
||||
"addMonitoredMount": "Afegeix un camí",
|
||||
"excludedMountsDesc": "Amaga punts de muntatge o tipus de sistemes de fitxers específics (per exemple, nfs, cifs) de l'ús del disc i de les alertes per a aquest amfitrió.",
|
||||
"excludedMountsPlaceholder": "Ruta de muntatge (/mnt/nas) o tipus de sistema de fitxers (nfs, cifs)",
|
||||
"excludedMountsEmpty": "No s'han exclòs muntatges. Es mostren tots els sistemes de fitxers detectats.",
|
||||
"addExcludedMount": "Afegeix",
|
||||
"visibleWidgets": "Widgets visibles",
|
||||
"widgetsMovedToHostMetrics": "Ara les targetes s'afegeixen, s'organitzen i es canvien de mida directament a la pestanya Mètriques de l'amfitrió. Obriu Mètriques de l'amfitrió per a aquest amfitrió i utilitzeu Personalitza per triar quines targetes es mostren.",
|
||||
"quickActionsLabel": "Accions ràpides",
|
||||
"quickActionsToolbar": "Les accions ràpides apareixen com a botons a la barra d'eines de mètriques de l'amfitrió per executar ordres amb un sol clic.",
|
||||
"noQuickActions": "Encara no hi ha accions ràpides.",
|
||||
"buttonLabel": "Etiqueta del botó",
|
||||
"selectSnippetPlaceholder": "Selecciona un fragment...",
|
||||
"addActionBtn": "Afegeix una acció"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Mètriques i alertes",
|
||||
"feature_metrics_desc": "Fes un seguiment de la CPU, la memòria i el disc al llarg del temps i rep alertes quan es facin malbé."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Retenció de l'historial de mètriques",
|
||||
"metricsHistoryRetentionRange": "D'1 a 90 dies",
|
||||
"days": "dies"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "No hi ha dades disponibles",
|
||||
"showCurrentValue": "Mostra el valor actual",
|
||||
"chartMetric": "Mètrica",
|
||||
"metricRange": "Rang"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "Procesor",
|
||||
"memory": "Paměť",
|
||||
"disk": "Disk",
|
||||
"network": "Síť",
|
||||
"uptime": "Doba provozuschopnosti",
|
||||
"processes": "Procesy",
|
||||
"available": "K dispozici",
|
||||
"free": "Uvolnit",
|
||||
"connecting": "Spojovací...",
|
||||
"connectionFailed": "Nepodařilo se připojit k serveru",
|
||||
"naCpus": "CPU (procesory)",
|
||||
"cpuCores_one": "{{count}} Jádro",
|
||||
"cpuCores_other": "{{count}} Jádra",
|
||||
"cpuUsage": "Využití CPU",
|
||||
"memoryUsage": "Využití paměti",
|
||||
"diskUsage": "Využití disku",
|
||||
"selectFilesystem": "Vyberte souborový systém",
|
||||
"temperature": "Teplota",
|
||||
"highestTemperature": "Nejvyšší teplota",
|
||||
"primaryTemperatureSensor": "Primární senzor",
|
||||
"gpu": {
|
||||
"title": "Grafický procesor",
|
||||
"noDevice": "Nebyla detekována žádná grafická karta NVIDIA. Nainstalujte ovladač NVIDIA (obsahuje nvidia-smi) pro zobrazení metrik grafické karty.",
|
||||
"driver": "Řidič {{version}}",
|
||||
"utilization": "Využití",
|
||||
"memory": "VRAM",
|
||||
"temperature": "Dočasné",
|
||||
"power": "Moc",
|
||||
"fan": "Větrák",
|
||||
"processes": "Procesy GPU",
|
||||
"noProcesses": "Žádné procesy nepoužívají GPU"
|
||||
},
|
||||
"failedToFetchHostConfig": "Nepodařilo se načíst konfiguraci hostitele",
|
||||
"serverOffline": "Server offline",
|
||||
"cannotFetchMetrics": "Nelze načíst metriky z offline serveru",
|
||||
"totpFailed": "Ověření TOTP se nezdařilo",
|
||||
"noneAuthNotSupported": "Metriky hostitele nepodporují typ ověřování „žádné“.",
|
||||
"noHostSelected": "Nebyl vybrán žádný hostitel",
|
||||
"load": "Zatížení",
|
||||
"systemInfo": "Informace o systému",
|
||||
"hostname": "Název hostitele",
|
||||
"operatingSystem": "Operační systém",
|
||||
"kernel": "Jádro",
|
||||
"seconds": "sekundy",
|
||||
"networkInterfaces": "Síťová rozhraní",
|
||||
"noInterfacesFound": "Nenalezena žádná síťová rozhraní",
|
||||
"noProcessesFound": "Nenalezeny žádné procesy",
|
||||
"processesTotal": "celkový",
|
||||
"processesRunning": "běh",
|
||||
"loginStats": "Statistiky přihlášení SSH",
|
||||
"noRecentLoginData": "Žádné nedávné přihlašovací údaje",
|
||||
"executingQuickAction": "Spouštění {{name}}...",
|
||||
"quickActionSuccess": "{{name}} úspěšně dokončeno",
|
||||
"quickActionFailed": "{{name}} selhalo",
|
||||
"quickActionError": "Nepodařilo se spustit {{name}}",
|
||||
"ports": {
|
||||
"title": "Poslouchající porty",
|
||||
"protocol": "Protokol",
|
||||
"port": "Přístav",
|
||||
"address": "Adresa",
|
||||
"process": "Proces",
|
||||
"search": "Hledat porty...",
|
||||
"allProtocols": "Vše",
|
||||
"noData": "Žádná data naslouchajících portů"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Firewall",
|
||||
"inactive": "Neaktivní",
|
||||
"policy": "Politika",
|
||||
"rules": "pravidla",
|
||||
"noRules": "V tomto řetězci nejsou žádná pravidla",
|
||||
"noData": "Nejsou k dispozici žádná data firewallu",
|
||||
"action": "Akce",
|
||||
"protocol": "Proto",
|
||||
"port": "Přístav",
|
||||
"source": "Zdroj",
|
||||
"anywhere": "Kdekoli",
|
||||
"chains": "řetězy"
|
||||
},
|
||||
"loadAvg": "Průměrné zatížení",
|
||||
"swap": "Výměna",
|
||||
"architecture": "Architektura",
|
||||
"refresh": "Obnovit",
|
||||
"retry": "Zkusit znovu",
|
||||
"customize": "Přizpůsobit rozvržení",
|
||||
"reset": "Obnovit",
|
||||
"tabLive": "Žít",
|
||||
"editModeInstructions": "Přetažením karet změníte jejich uspořádání, přetažením spodního okraje změníte jejich velikost a pomocí tlačítka šířky změníte jejich rozpětí. Karty můžete přidávat nebo odebírat níže.",
|
||||
"managers": {
|
||||
"services": "Služby",
|
||||
"processInspector": "Inspektor procesů",
|
||||
"logViewer": "Prohlížeč protokolů",
|
||||
"cron": "Cron úlohy",
|
||||
"packages": "Balíčky",
|
||||
"ssl": "SSL certifikáty",
|
||||
"firewall": "Firewall",
|
||||
"users": "Uživatelé a oprávnění",
|
||||
"healthCheck": "Kontroly stavu",
|
||||
"diskBreakdown": "Rozpad disku",
|
||||
"systemdTimers": "Časovače",
|
||||
"topMemory": "Nejlépe podle paměti",
|
||||
"noData": "Žádná data",
|
||||
"sudoHint": "V editoru hostitelů nastavte pro tento hostitel heslo sudo, abyste povolili privilegované akce.",
|
||||
"filter": "Filtr...",
|
||||
"start": "Start",
|
||||
"stop": "Zastávka",
|
||||
"restart": "Restartovat",
|
||||
"actionDone": "{{name}} aktualizováno",
|
||||
"actionFailed": "Akce se nezdařila",
|
||||
"signalSent": "Signál odeslaný do PID {{pid}}",
|
||||
"killHint": "Kliknutí: ukončení (SIGTERM). Kliknutí pravým tlačítkem: vynucené ukončení (SIGKILL).",
|
||||
"working": "Pracovní...",
|
||||
"update": "Aktualizovat",
|
||||
"upgradeAll": "Upgradovat vše",
|
||||
"allUpToDate": "Všechno je aktuální",
|
||||
"save": "Uložit",
|
||||
"command": "Příkaz",
|
||||
"enabled": "Povoleno",
|
||||
"cronSaved": "Crontab aktualizován",
|
||||
"clients": "Klienti",
|
||||
"dryRun": "Zkušební provoz",
|
||||
"renew": "Obnovit",
|
||||
"noAcmeClient": "Na tomto hostiteli nebyl nalezen žádný klient ACME (certbot ani acme.sh).",
|
||||
"addInputRule": "Přidat pravidlo INPUT",
|
||||
"firewallWarning": "Změny jsou platné pouze za běhu, dokud nejsou trvalé. Dávejte pozor, abyste se k nim nezablokovali.",
|
||||
"ruleApplied": "Pravidlo bylo použito",
|
||||
"invalidPort": "Zadejte platný port (1-65535)",
|
||||
"newUsername": "Nové uživatelské jméno",
|
||||
"addUser": "Přidat",
|
||||
"deleteUser": "Smazat uživatele",
|
||||
"noHealthChecks": "Zatím nejsou nakonfigurovány žádné kontroly stavu.",
|
||||
"follow": "Následovat",
|
||||
"noLogData": "Žádný výstup protokolu.",
|
||||
"tree": "Strom",
|
||||
"enableDisable": "Povolit/zakázat při spuštění",
|
||||
"grantSudo": "Udělit sudo",
|
||||
"revokeSudo": "Zrušit sudo",
|
||||
"sslIssueCert": "Vydat certifikát",
|
||||
"sslExpired": "Platnost vypršela",
|
||||
"sslInDays": "v {{days}}d",
|
||||
"sslNeedDomain": "Zadejte alespoň jednu doménu",
|
||||
"sslIssued": "Vydaný certifikát",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (samostatný)",
|
||||
"sslHttpWebroot": "HTTP (webroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "Poskytovatel DNS (např. cloudflare)",
|
||||
"sslIssueHint": "Přihlašovací údaje poskytovatele DNS musí být již na hostiteli nakonfigurovány.",
|
||||
"sslRevoke": "Zrušit certifikát",
|
||||
"sslRevoked": "Certifikát zrušen",
|
||||
"sslRevokeConfirm": "Zrušit a odstranit certifikát „{{name}}“? Tuto akci nelze vrátit zpět.",
|
||||
"healthRun": "Běh",
|
||||
"healthName": "Jméno",
|
||||
"healthTarget": "Hostitel / adresa",
|
||||
"healthAddCheck": "Přidat šek",
|
||||
"healthSaved": "Kontroly stavu uloženy",
|
||||
"healthMissingFields": "Každá kontrola potřebuje název a cíl.",
|
||||
"logFile": "Soubor",
|
||||
"logUnit": "Jednotka",
|
||||
"logCustomPath": "Vlastní cesta v /var/log (volitelné)",
|
||||
"logGrep": "Filtrační potrubí...",
|
||||
"firewallPersist": "Pravidla pro trvalé uložení",
|
||||
"firewallPersisted": "Pravidla firewallu přetrvávala",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Koncová stupnice",
|
||||
"wgNotInstalled": "WireGuard není na tomto hostiteli nainstalován",
|
||||
"wgNoInterfaces": "Žádná nakonfigurovaná rozhraní WireGuard",
|
||||
"wgInterfaceUp": "Vychovat",
|
||||
"wgInterfaceDown": "Snížit",
|
||||
"wgBringingUp": "Vyvolávám {{name}}...",
|
||||
"wgBringingDown": "Snižování {{name}}...",
|
||||
"wgInterfaceUpDone": "{{name}} je aktivní",
|
||||
"wgInterfaceDownDone": "{{name}} je nefunkční",
|
||||
"wgListenPort": "Přístav",
|
||||
"wgPublicKey": "Veřejný klíč",
|
||||
"wgEndpoint": "Koncový bod",
|
||||
"wgAllowedIPs": "Povolené IP adresy",
|
||||
"wgLastHandshake": "Poslední podání ruky",
|
||||
"wgHandshakeNever": "Nikdy",
|
||||
"wgTransfer": "Převod",
|
||||
"tsNotInstalled": "Tailscale není na tomto hostiteli nainstalován",
|
||||
"tsRunning": "Běh",
|
||||
"tsStopped": "Zastaveno",
|
||||
"tsEnable": "Připojit",
|
||||
"tsDisable": "Odpojit",
|
||||
"tsEnabling": "Připojování k Tailscale...",
|
||||
"tsDisabling": "Odpojování od Tailscale...",
|
||||
"tsEnabled": "Koncová váha připojena",
|
||||
"tsDisabled": "Tailscale odpojeno",
|
||||
"tsIPs": "IP adresy Tailscale",
|
||||
"tsPeers": "Vrstevníci",
|
||||
"tsOnline": "Online",
|
||||
"tsOffline": "Offline",
|
||||
"tsExitNode": "Východový uzel",
|
||||
"tsExitNodeActive": "Výstupní uzel je aktivní",
|
||||
"tsHostname": "Název hostitele"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Historie metrik",
|
||||
"historySuffix": "Dějiny",
|
||||
"cpuMemoryDisk": "CPU / Paměť / Disk",
|
||||
"network": "Síť",
|
||||
"download": "RX",
|
||||
"upload": "Texas",
|
||||
"noData": "Pro toto časové období nejsou k dispozici žádná historická data.",
|
||||
"custom": "Zvyk",
|
||||
"to": "na",
|
||||
"apply": "Použít",
|
||||
"viewHistory": "Zobrazit historii"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Statistiky Proxmoxu",
|
||||
"cpuUsage": "Využití CPU",
|
||||
"memoryUsage": "Využití paměti",
|
||||
"diskUsage": "Využití disku",
|
||||
"networkInterfaces": "Síťová rozhraní",
|
||||
"uptime": "Doba provozuschopnosti",
|
||||
"systemInfo": "Informace o systému",
|
||||
"guestsSummary": "Hosté",
|
||||
"storagePools": "Úložné fondy",
|
||||
"clusterHealth": "Zdraví klastru",
|
||||
"cpuCores_one": "{{count}} Jádro",
|
||||
"cpuCores_other": "{{count}} Jádra",
|
||||
"used": "Použitý",
|
||||
"total": "Celkový",
|
||||
"hostname": "Název hostitele",
|
||||
"kernel": "Jádro",
|
||||
"pveVersion": "PVE verze",
|
||||
"name": "Jméno",
|
||||
"status": "Postavení",
|
||||
"type": "Typ",
|
||||
"cpu": "Procesor",
|
||||
"mem": "Paměť",
|
||||
"disk": "Disk",
|
||||
"running": "Běh",
|
||||
"stopped": "Zastaveno",
|
||||
"guestCounts": "{{running}}/{{total}} běží",
|
||||
"inactive": "Neaktivní",
|
||||
"notClustered": "Samostatný uzel (není součástí clusteru)",
|
||||
"quorate": "Kvorát",
|
||||
"notQuorate": "Není usnášeníschopný",
|
||||
"nodeOnline": "Online",
|
||||
"nodeOffline": "Offline",
|
||||
"noHostSelected": "Nebyl vybrán žádný hostitel",
|
||||
"pveshNotFound": "pvesh nenalezen - je to uzel Proxmox?",
|
||||
"nodeDetectionFailed": "Nelze určit platný název uzlu Proxmox.",
|
||||
"connecting": "Spojovací...",
|
||||
"connectionFailed": "Nepodařilo se připojit k uzlu Proxmox",
|
||||
"refresh": "Obnovit",
|
||||
"searchGuests": "Hledat hosty...",
|
||||
"filterAll": "Vše",
|
||||
"filterVm": "virtuální počítač",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "Na tomto uzlu nebyly nalezeny žádné virtuální počítače ani kontejnery LXC.",
|
||||
"noGuestsMatch": "Aktuálním filtrům neodpovídají žádní hosté."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Metriky hostitele"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Metriky hostitele",
|
||||
"enableProxmoxStats": "Povolit statistiky Proxmoxu",
|
||||
"enableProxmoxStatsDesc": "Zobrazit kartu Statistiky Proxmoxu pro tohoto hostitele s aktivními statistikami uzlů, hostů, úložišť a clusterů shromážděnými přes SSH.",
|
||||
"proxmoxStatsPollInterval": "Interval dotazování (sekundy)",
|
||||
"proxmoxStatsPollIntervalDesc": "Minimálně 15 sekund. Jak často aktualizovat statistiky uzlu Proxmox.",
|
||||
"proxmoxStatsNodeOverride": "Přepsání názvu uzlu",
|
||||
"proxmoxStatsNodeOverrideDesc": "Přepsat automatickou detekci názvu uzlu Proxmox (ve výchozím nastavení detekováno pomocí názvu hostitele).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Automaticky detekováno z názvu hostitele",
|
||||
"metricsCollectionLabel": "Sbírka metrik",
|
||||
"enableMetricsLabel": "Povolit metriky",
|
||||
"enableMetricsDesc": "Shromažďujte metriky CPU, RAM, disku a další z tohoto hostitele",
|
||||
"useGlobalMetrics": "Použít globální interval",
|
||||
"useGlobalMetricsDesc": "Přepsat intervalem metrik na úrovni celého serveru",
|
||||
"metricsIntervalS": "Interval metrik (y)",
|
||||
"metricsIntervalDesc2": "Sekundy mezi snímky metrik",
|
||||
"excludedMountsLabel": "Vyloučené držáky",
|
||||
"monitoredMountsLabel": "Vlastní monitorované cesty",
|
||||
"monitoredMountsDesc": "Přidejte cesty, které nejsou zobrazeny jako samostatné připojení, včetně cest připojených k Home Assistant, jako je /config.",
|
||||
"monitoredMountPathPlaceholder": "Cesta (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Štítek (volitelné)",
|
||||
"addMonitoredMount": "Přidat cestu",
|
||||
"excludedMountsDesc": "Skrýt konkrétní body připojení nebo typy souborových systémů (např. nfs, cifs) před využitím disku a upozorněními pro tento hostitel.",
|
||||
"excludedMountsPlaceholder": "Cesta připojení (/mnt/nas) nebo typ souborového systému (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Žádné připojení nejsou vyloučena. Zobrazí se všechny detekované souborové systémy.",
|
||||
"addExcludedMount": "Přidat",
|
||||
"visibleWidgets": "Viditelné widgety",
|
||||
"widgetsMovedToHostMetrics": "Karty se nyní přidávají, uspořádávají a mění jejich velikost přímo na kartě Metriky hostitele. Otevřete Metriky hostitele pro tohoto hostitele a pomocí možnosti Přizpůsobit vyberte, které karty se zobrazí.",
|
||||
"quickActionsLabel": "Rychlé akce",
|
||||
"quickActionsToolbar": "Rychlé akce se zobrazují jako tlačítka v panelu nástrojů Metriky hostitele pro spuštění příkazů jedním kliknutím.",
|
||||
"noQuickActions": "Zatím žádné rychlé akce.",
|
||||
"buttonLabel": "Štítek tlačítka",
|
||||
"selectSnippetPlaceholder": "Vybrat úryvek...",
|
||||
"addActionBtn": "Přidat akci"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Metriky a upozornění",
|
||||
"feature_metrics_desc": "Sledujte CPU, paměť a disk v průběhu času a nechte se upozornit, když se pokazí."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Uchovávání historie metrik",
|
||||
"metricsHistoryRetentionRange": "1 až 90 dní",
|
||||
"days": "dny"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Nejsou k dispozici žádná data",
|
||||
"showCurrentValue": "Zobrazit aktuální hodnotu",
|
||||
"chartMetric": "Metrický",
|
||||
"metricRange": "Rozsah"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "Hukommelse",
|
||||
"disk": "Disk",
|
||||
"network": "Netværk",
|
||||
"uptime": "Oppetid",
|
||||
"processes": "Processer",
|
||||
"available": "Tilgængelig",
|
||||
"free": "Gratis",
|
||||
"connecting": "Forbinder...",
|
||||
"connectionFailed": "Kunne ikke oprette forbindelse til serveren",
|
||||
"naCpus": "Ikke tilgængelig CPU(er)",
|
||||
"cpuCores_one": "{{count}} Kerne",
|
||||
"cpuCores_other": "{{count}} Kerner",
|
||||
"cpuUsage": "CPU-forbrug",
|
||||
"memoryUsage": "Hukommelsesforbrug",
|
||||
"diskUsage": "Diskforbrug",
|
||||
"selectFilesystem": "Vælg filsystem",
|
||||
"temperature": "Temperatur",
|
||||
"highestTemperature": "Højeste temperatur",
|
||||
"primaryTemperatureSensor": "Primær sensor",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "Ingen NVIDIA GPU fundet. Installer NVIDIA-driveren (den leverer nvidia-smi) for at se GPU-målinger.",
|
||||
"driver": "Chauffør {{version}}",
|
||||
"utilization": "Udnyttelse",
|
||||
"memory": "VRAM",
|
||||
"temperature": "Temp.",
|
||||
"power": "Magt",
|
||||
"fan": "Ventilator",
|
||||
"processes": "GPU-processer",
|
||||
"noProcesses": "Ingen processer bruger GPU'en"
|
||||
},
|
||||
"failedToFetchHostConfig": "Kunne ikke hente værtkonfigurationen",
|
||||
"serverOffline": "Server offline",
|
||||
"cannotFetchMetrics": "Kan ikke hente målinger fra offlineserveren",
|
||||
"totpFailed": "TOTP-bekræftelse mislykkedes",
|
||||
"noneAuthNotSupported": "Host Metrics understøtter ikke godkendelsestypen 'ingen'.",
|
||||
"noHostSelected": "Ingen vært valgt",
|
||||
"load": "Indlæs",
|
||||
"systemInfo": "Systemoplysninger",
|
||||
"hostname": "Værtsnavn",
|
||||
"operatingSystem": "Operativsystem",
|
||||
"kernel": "Kernen",
|
||||
"seconds": "sekunder",
|
||||
"networkInterfaces": "Netværksgrænseflader",
|
||||
"noInterfacesFound": "Ingen netværksgrænseflader fundet",
|
||||
"noProcessesFound": "Ingen processer fundet",
|
||||
"processesTotal": "total",
|
||||
"processesRunning": "løb",
|
||||
"loginStats": "SSH-loginstatistik",
|
||||
"noRecentLoginData": "Ingen nylige logindata",
|
||||
"executingQuickAction": "Udfører {{name}}...",
|
||||
"quickActionSuccess": "{{name}} gennemført",
|
||||
"quickActionFailed": "{{name}} mislykkedes",
|
||||
"quickActionError": "Kunne ikke udføre {{name}}",
|
||||
"ports": {
|
||||
"title": "Lytteporte",
|
||||
"protocol": "Protokol",
|
||||
"port": "Havn",
|
||||
"address": "Adresse",
|
||||
"process": "Behandle",
|
||||
"search": "Søg efter porte...",
|
||||
"allProtocols": "Alle",
|
||||
"noData": "Ingen data om lytteporte"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Firewall",
|
||||
"inactive": "Inaktiv",
|
||||
"policy": "Politik",
|
||||
"rules": "regler",
|
||||
"noRules": "Ingen regler i denne kæde",
|
||||
"noData": "Ingen firewalldata tilgængelige",
|
||||
"action": "Handling",
|
||||
"protocol": "Proto",
|
||||
"port": "Havn",
|
||||
"source": "Kilde",
|
||||
"anywhere": "Hvor som helst",
|
||||
"chains": "kæder"
|
||||
},
|
||||
"loadAvg": "Indlæs gennemsnit",
|
||||
"swap": "Byt",
|
||||
"architecture": "Arkitektur",
|
||||
"refresh": "Opfriske",
|
||||
"retry": "Prøv igen",
|
||||
"customize": "Tilpas layout",
|
||||
"reset": "Nulstil",
|
||||
"tabLive": "Levende",
|
||||
"editModeInstructions": "Træk kort for at omarrangere, træk i den nederste kant for at ændre størrelsen, og brug breddeknappen til at ændre et korts spændvidde. Tilføj eller fjern kort nedenfor.",
|
||||
"managers": {
|
||||
"services": "Tjenester",
|
||||
"processInspector": "Procesinspektør",
|
||||
"logViewer": "Logfremviser",
|
||||
"cron": "Cron-job",
|
||||
"packages": "Pakker",
|
||||
"ssl": "SSL-certifikater",
|
||||
"firewall": "Firewall",
|
||||
"users": "Brugere og tilladelser",
|
||||
"healthCheck": "Sundhedstjek",
|
||||
"diskBreakdown": "Disknedbrydning",
|
||||
"systemdTimers": "Timere",
|
||||
"topMemory": "Top efter hukommelse",
|
||||
"noData": "Ingen data",
|
||||
"sudoHint": "Angiv en sudo-adgangskode til denne vært i værtseditoren for at aktivere privilegerede handlinger.",
|
||||
"filter": "Filter...",
|
||||
"start": "Starte",
|
||||
"stop": "Stop",
|
||||
"restart": "Genstart",
|
||||
"actionDone": "{{name}} opdateret",
|
||||
"actionFailed": "Handlingen mislykkedes",
|
||||
"signalSent": "Signal sendt til PID {{pid}}",
|
||||
"killHint": "Klik: afslut (SIGTERM). Højreklik: tvungen afbrydelse (SIGKILL).",
|
||||
"working": "Arbejder...",
|
||||
"update": "Opdatering",
|
||||
"upgradeAll": "Opgrader alle",
|
||||
"allUpToDate": "Alt er opdateret",
|
||||
"save": "Spare",
|
||||
"command": "Kommando",
|
||||
"enabled": "Aktiveret",
|
||||
"cronSaved": "Crontab opdateret",
|
||||
"clients": "Klienter",
|
||||
"dryRun": "Tørløb",
|
||||
"renew": "Forny",
|
||||
"noAcmeClient": "Ingen ACME-klient (certbot eller acme.sh) fundet på denne vært.",
|
||||
"addInputRule": "Tilføj INPUT-regel",
|
||||
"firewallWarning": "Ændringer gælder kun for kørsel, indtil de bevares. Pas på ikke at låse dig selv ude.",
|
||||
"ruleApplied": "Regel anvendt",
|
||||
"invalidPort": "Indtast en gyldig port (1-65535)",
|
||||
"newUsername": "Nyt brugernavn",
|
||||
"addUser": "Tilføje",
|
||||
"deleteUser": "Slet bruger",
|
||||
"noHealthChecks": "Ingen sundhedstjek konfigureret endnu.",
|
||||
"follow": "Følge",
|
||||
"noLogData": "Ingen log-output.",
|
||||
"tree": "Træ",
|
||||
"enableDisable": "Aktivér/deaktiver ved opstart",
|
||||
"grantSudo": "Giv sudo",
|
||||
"revokeSudo": "Tilbagekald sudo",
|
||||
"sslIssueCert": "Udstedelsescertifikat",
|
||||
"sslExpired": "Udløbet",
|
||||
"sslInDays": "i {{days}}d",
|
||||
"sslNeedDomain": "Angiv mindst ét domæne",
|
||||
"sslIssued": "Certifikat udstedt",
|
||||
"sslDomainsPlaceholder": "eksempel.com, www.eksempel.com",
|
||||
"sslHttpStandalone": "HTTP (selvstændig)",
|
||||
"sslHttpWebroot": "HTTP (webroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "DNS-udbyder (f.eks. Cloudflare)",
|
||||
"sslIssueHint": "DNS-udbyderens legitimationsoplysninger skal allerede være konfigureret på værten.",
|
||||
"sslRevoke": "Tilbagekald certifikat",
|
||||
"sslRevoked": "Certifikat tilbagekaldt",
|
||||
"sslRevokeConfirm": "Tilbagekald og fjern certifikatet \"{{name}}\"? Dette kan ikke fortrydes.",
|
||||
"healthRun": "Løbe",
|
||||
"healthName": "Navn",
|
||||
"healthTarget": "Vært / adresse",
|
||||
"healthAddCheck": "Tilføj check",
|
||||
"healthSaved": "Sundhedstjek gemt",
|
||||
"healthMissingFields": "Hver check skal have et navn og et mål",
|
||||
"logFile": "Fil",
|
||||
"logUnit": "Enhed",
|
||||
"logCustomPath": "Brugerdefineret sti under /var/log (valgfrit)",
|
||||
"logGrep": "Filtrer linjer...",
|
||||
"firewallPersist": "Vedvarende regler",
|
||||
"firewallPersisted": "Firewallregler bevares",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Haleskala",
|
||||
"wgNotInstalled": "WireGuard er ikke installeret på denne vært",
|
||||
"wgNoInterfaces": "Ingen WireGuard-grænseflader konfigureret",
|
||||
"wgInterfaceUp": "Bring op",
|
||||
"wgInterfaceDown": "Bring ned",
|
||||
"wgBringingUp": "Bringer {{name}} op...",
|
||||
"wgBringingDown": "Bringer {{name}} ned...",
|
||||
"wgInterfaceUpDone": "{{name}} er oppe",
|
||||
"wgInterfaceDownDone": "{{name}} er nede",
|
||||
"wgListenPort": "Havn",
|
||||
"wgPublicKey": "Offentlig nøgle",
|
||||
"wgEndpoint": "Endepunkt",
|
||||
"wgAllowedIPs": "Tilladte IP-adresser",
|
||||
"wgLastHandshake": "Sidste håndtryk",
|
||||
"wgHandshakeNever": "Aldrig",
|
||||
"wgTransfer": "Overførsel",
|
||||
"tsNotInstalled": "Tailscale er ikke installeret på denne vært",
|
||||
"tsRunning": "Løb",
|
||||
"tsStopped": "Stoppet",
|
||||
"tsEnable": "Forbinde",
|
||||
"tsDisable": "Afbryde",
|
||||
"tsEnabling": "Forbinder til Tailscale...",
|
||||
"tsDisabling": "Afbryder forbindelsen til Tailscale...",
|
||||
"tsEnabled": "Haleskala forbundet",
|
||||
"tsDisabled": "Haleskalaen er afbrudt",
|
||||
"tsIPs": "Haleskalerings-IP'er",
|
||||
"tsPeers": "Peers",
|
||||
"tsOnline": "Online",
|
||||
"tsOffline": "Offline",
|
||||
"tsExitNode": "Udgangsnode",
|
||||
"tsExitNodeActive": "Afslut node aktiv",
|
||||
"tsHostname": "Værtsnavn"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Metrikhistorik",
|
||||
"historySuffix": "Historie",
|
||||
"cpuMemoryDisk": "CPU / Hukommelse / Disk",
|
||||
"network": "Netværk",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "Der er ingen historiske data tilgængelige for dette tidsinterval.",
|
||||
"custom": "Skik",
|
||||
"to": "til",
|
||||
"apply": "Anvende",
|
||||
"viewHistory": "Vis historik"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Proxmox-statistik",
|
||||
"cpuUsage": "CPU-forbrug",
|
||||
"memoryUsage": "Hukommelsesforbrug",
|
||||
"diskUsage": "Diskforbrug",
|
||||
"networkInterfaces": "Netværksgrænseflader",
|
||||
"uptime": "Oppetid",
|
||||
"systemInfo": "Systemoplysninger",
|
||||
"guestsSummary": "Gæster",
|
||||
"storagePools": "Opbevaringsbassiner",
|
||||
"clusterHealth": "Klyngesundhed",
|
||||
"cpuCores_one": "{{count}} Kerne",
|
||||
"cpuCores_other": "{{count}} Kerner",
|
||||
"used": "Brugt",
|
||||
"total": "Total",
|
||||
"hostname": "Værtsnavn",
|
||||
"kernel": "Kernen",
|
||||
"pveVersion": "PVE-version",
|
||||
"name": "Navn",
|
||||
"status": "Status",
|
||||
"type": "Type",
|
||||
"cpu": "CPU",
|
||||
"mem": "Mem",
|
||||
"disk": "Disk",
|
||||
"running": "Løb",
|
||||
"stopped": "Stoppet",
|
||||
"guestCounts": "{{running}}/{{total}} løber",
|
||||
"inactive": "Inaktiv",
|
||||
"notClustered": "Selvstændig node (ikke en del af en klynge)",
|
||||
"quorate": "Kvorat",
|
||||
"notQuorate": "Ikke quorable",
|
||||
"nodeOnline": "Online",
|
||||
"nodeOffline": "Offline",
|
||||
"noHostSelected": "Ingen vært valgt",
|
||||
"pveshNotFound": "pvesh ikke fundet - er dette en Proxmox-node?",
|
||||
"nodeDetectionFailed": "Kan ikke bestemme et gyldigt Proxmox-nodenavn",
|
||||
"connecting": "Forbinder...",
|
||||
"connectionFailed": "Kunne ikke oprette forbindelse til Proxmox-noden",
|
||||
"refresh": "Opfriske",
|
||||
"searchGuests": "Søg gæster...",
|
||||
"filterAll": "Alle",
|
||||
"filterVm": "VM",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "Der blev ikke fundet nogen VM'er eller LXC-containere på denne node.",
|
||||
"noGuestsMatch": "Ingen gæster matcher de nuværende filtre."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Værtsmålinger"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Værtsmålinger",
|
||||
"enableProxmoxStats": "Aktivér Proxmox-statistik",
|
||||
"enableProxmoxStatsDesc": "Vis en Proxmox Stats-faneblad for denne vært med live node-, gæst-, lager- og klyngestatistikker indsamlet via SSH.",
|
||||
"proxmoxStatsPollInterval": "Afstemningsinterval (sekunder)",
|
||||
"proxmoxStatsPollIntervalDesc": "Minimum 15 sekunder. Hvor ofte skal Proxmox-nodestatistikker opdateres.",
|
||||
"proxmoxStatsNodeOverride": "Tilsidesættelse af nodenavn",
|
||||
"proxmoxStatsNodeOverrideDesc": "Tilsidesæt automatisk detektion af Proxmox-nodenavnet (registreres som standard via værtsnavn).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Automatisk registreret fra værtsnavn",
|
||||
"metricsCollectionLabel": "Metriksamling",
|
||||
"enableMetricsLabel": "Aktivér metrikker",
|
||||
"enableMetricsDesc": "Indsaml CPU-, RAM-, disk- og andre målinger fra denne vært",
|
||||
"useGlobalMetrics": "Brug globalt interval",
|
||||
"useGlobalMetricsDesc": "Tilsidesæt med det serveromfattende metrikinterval",
|
||||
"metricsIntervalS": "Målinger Interval (s)",
|
||||
"metricsIntervalDesc2": "Sekunder mellem metriske snapshots",
|
||||
"excludedMountsLabel": "Ekskluderede monteringer",
|
||||
"monitoredMountsLabel": "Brugerdefinerede overvågede stier",
|
||||
"monitoredMountsDesc": "Tilføj stier, der ikke er eksponeret som separate monteringer, herunder bind-monterede Home Assistant-stier såsom /config.",
|
||||
"monitoredMountPathPlaceholder": "Sti (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Etiket (valgfrit)",
|
||||
"addMonitoredMount": "Tilføj sti",
|
||||
"excludedMountsDesc": "Skjul specifikke monteringspunkter eller filsystemtyper (f.eks. nfs, cifs) fra diskbrug og advarsler for denne vært.",
|
||||
"excludedMountsPlaceholder": "Monteringssti (/mnt/nas) eller filsystemtype (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Ingen monteringer er udelukket. Alle detekterede filsystemer vises.",
|
||||
"addExcludedMount": "Tilføje",
|
||||
"visibleWidgets": "Synlige widgets",
|
||||
"widgetsMovedToHostMetrics": "Kort tilføjes, arrangeres og skaleres nu direkte i fanen Værtsmål. Åbn Værtsmål for denne vært, og brug Tilpas til at vælge, hvilke kort der vises.",
|
||||
"quickActionsLabel": "Hurtige handlinger",
|
||||
"quickActionsToolbar": "Hurtige handlinger vises som knapper i værktøjslinjen Host Metrics til udførelse af kommandoer med et enkelt klik.",
|
||||
"noQuickActions": "Ingen hurtige handlinger endnu.",
|
||||
"buttonLabel": "Knapmærke",
|
||||
"selectSnippetPlaceholder": "Vælg uddrag...",
|
||||
"addActionBtn": "Tilføj handling"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Målinger og advarsler",
|
||||
"feature_metrics_desc": "Spor CPU, hukommelse og disk over tid, og få en advarsel, når de bliver dårlige."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Opbevaring af metrikhistorik",
|
||||
"metricsHistoryRetentionRange": "1 til 90 dage",
|
||||
"days": "dage"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Ingen data tilgængelige",
|
||||
"showCurrentValue": "Vis aktuel værdi",
|
||||
"chartMetric": "Metrisk",
|
||||
"metricRange": "Rækkevidde"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "Arbeitsspeicher",
|
||||
"disk": "Festplatte",
|
||||
"network": "Netzwerk",
|
||||
"uptime": "Betriebszeit",
|
||||
"processes": "Prozesse",
|
||||
"available": "Verfügbar",
|
||||
"free": "Frei",
|
||||
"connecting": "Verbinden...",
|
||||
"connectionFailed": "Verbindung zum Server fehlgeschlagen",
|
||||
"naCpus": "N/A CPU(s)",
|
||||
"cpuCores_one": "{{count}} Kern",
|
||||
"cpuCores_other": "{{count}} Kerne",
|
||||
"cpuUsage": "CPU-Auslastung",
|
||||
"memoryUsage": "Arbeitsspeicherauslastung",
|
||||
"diskUsage": "Festplattenauslastung",
|
||||
"selectFilesystem": "Dateisystem auswählen",
|
||||
"temperature": "Temperatur",
|
||||
"highestTemperature": "Höchste Temperatur",
|
||||
"primaryTemperatureSensor": "Primärsensor",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "Es wurde keine NVIDIA-GPU erkannt. Installieren Sie den NVIDIA-Treiber (dieser stellt nvidia-smi bereit), um die GPU-Metriken anzuzeigen.",
|
||||
"driver": "Fahrer {{version}}",
|
||||
"utilization": "Verwendung",
|
||||
"memory": "VRAM",
|
||||
"temperature": "Temp",
|
||||
"power": "Leistung",
|
||||
"fan": "Lüfter",
|
||||
"processes": "GPU-Prozesse",
|
||||
"noProcesses": "Es werden keine Prozesse die GPU nutzen."
|
||||
},
|
||||
"failedToFetchHostConfig": "Fehler beim Abrufen der Host-Konfiguration",
|
||||
"serverOffline": "Server offline",
|
||||
"cannotFetchMetrics": "Metriken können nicht vom Offline-Server abgerufen werden",
|
||||
"totpFailed": "TOTP-Überprüfung fehlgeschlagen",
|
||||
"noneAuthNotSupported": "Host Metrics unterstützt den Authentifizierungstyp 'none' nicht.",
|
||||
"noHostSelected": "Kein Host ausgewählt",
|
||||
"load": "Auslastung",
|
||||
"systemInfo": "Systeminformationen",
|
||||
"hostname": "Hostname",
|
||||
"operatingSystem": "Betriebssystem",
|
||||
"kernel": "Kernel",
|
||||
"seconds": "Sekunden",
|
||||
"networkInterfaces": "Netzwerkschnittstellen",
|
||||
"noInterfacesFound": "Keine Netzwerkschnittstellen gefunden",
|
||||
"noProcessesFound": "Keine Prozesse gefunden",
|
||||
"processesTotal": "gesamt",
|
||||
"processesRunning": "laufend",
|
||||
"loginStats": "SSH-Anmeldestatistiken",
|
||||
"noRecentLoginData": "Keine aktuellen Anmeldedaten",
|
||||
"executingQuickAction": "{{name}} wird ausgeführt...",
|
||||
"quickActionSuccess": "{{name}} erfolgreich abgeschlossen",
|
||||
"quickActionFailed": "{{name}} fehlgeschlagen",
|
||||
"quickActionError": "Fehler beim Ausführen von {{name}}",
|
||||
"ports": {
|
||||
"title": "Lauschende Ports",
|
||||
"protocol": "Protokoll",
|
||||
"port": "Port",
|
||||
"address": "Adresse",
|
||||
"process": "Prozess",
|
||||
"search": "Ports durchsuchen...",
|
||||
"allProtocols": "Alle",
|
||||
"noData": "Keine Daten zu lauschenden Ports"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Firewall",
|
||||
"inactive": "Inaktiv",
|
||||
"policy": "Richtlinie",
|
||||
"rules": "Regeln",
|
||||
"noRules": "Keine Regeln in dieser Kette",
|
||||
"noData": "Keine Firewall-Daten verfügbar",
|
||||
"action": "Aktion",
|
||||
"protocol": "Proto",
|
||||
"port": "Port",
|
||||
"source": "Quelle",
|
||||
"anywhere": "Überall",
|
||||
"chains": "Ketten"
|
||||
},
|
||||
"loadAvg": "Lastdurchschnitt",
|
||||
"swap": "Swap",
|
||||
"architecture": "Architektur",
|
||||
"refresh": "Aktualisieren",
|
||||
"retry": "Wiederholen",
|
||||
"customize": "Layout anpassen",
|
||||
"reset": "Zurücksetzen",
|
||||
"tabLive": "Live",
|
||||
"editModeInstructions": "Ziehen Sie Karten, um sie neu anzuordnen, ziehen Sie die untere Kante, um die Größe zu ändern, und verwenden Sie die Breitenschaltfläche, um die Breite einer Karte anzupassen. Fügen Sie Karten unten hinzu oder entfernen Sie sie.",
|
||||
"managers": {
|
||||
"services": "Dienste",
|
||||
"processInspector": "Prozessinspektor",
|
||||
"logViewer": "Protokollbetrachter",
|
||||
"cron": "Cron-Jobs",
|
||||
"packages": "Pakete",
|
||||
"ssl": "SSL-Zertifikate",
|
||||
"firewall": "Firewall",
|
||||
"users": "Benutzer & Berechtigungen",
|
||||
"healthCheck": "Gesundheitsprüfungen",
|
||||
"diskBreakdown": "Datenträgeraufschlüsselung",
|
||||
"systemdTimers": "Timer",
|
||||
"topMemory": "Top nach Speicher",
|
||||
"noData": "Keine Daten",
|
||||
"sudoHint": "Legen Sie im Host-Editor ein sudo-Passwort für diesen Host fest, um privilegierte Aktionen zu ermöglichen.",
|
||||
"filter": "Filtern...",
|
||||
"start": "Starten",
|
||||
"stop": "Stoppen",
|
||||
"restart": "Neustarten",
|
||||
"actionDone": "{{name}} aktualisiert",
|
||||
"actionFailed": "Aktion fehlgeschlagen",
|
||||
"signalSent": "Signal an PID {{pid}} gesendet",
|
||||
"killHint": "Klicken: Beenden (SIGTERM). Rechtsklick: Erzwungenes Beenden (SIGKILL).",
|
||||
"working": "In Bearbeitung...",
|
||||
"update": "Aktualisieren",
|
||||
"upgradeAll": "Alle upgraden",
|
||||
"allUpToDate": "Alles ist auf dem neuesten Stand",
|
||||
"save": "Speichern",
|
||||
"command": "Befehl",
|
||||
"enabled": "Aktiviert",
|
||||
"cronSaved": "Crontab aktualisiert",
|
||||
"clients": "Clients",
|
||||
"dryRun": "Trockenlauf",
|
||||
"renew": "Erneuern",
|
||||
"noAcmeClient": "Kein ACME-Client (certbot oder acme.sh) auf diesem Host gefunden.",
|
||||
"addInputRule": "INPUT-Regel hinzufügen",
|
||||
"firewallWarning": "Änderungen sind nur zur Laufzeit wirksam, bis sie gespeichert werden. Achten Sie darauf, sich nicht auszusperren.",
|
||||
"ruleApplied": "Regel angewendet",
|
||||
"invalidPort": "Gültigen Port eingeben (1–65535)",
|
||||
"newUsername": "Neuer Benutzername",
|
||||
"addUser": "Hinzufügen",
|
||||
"deleteUser": "Benutzer löschen",
|
||||
"noHealthChecks": "Noch keine Zustandsprüfungen konfiguriert.",
|
||||
"follow": "Folgen",
|
||||
"noLogData": "Keine Protokollausgabe.",
|
||||
"tree": "Baum",
|
||||
"enableDisable": "Beim Start aktivieren / deaktivieren",
|
||||
"grantSudo": "sudo gewähren",
|
||||
"revokeSudo": "sudo entziehen",
|
||||
"sslIssueCert": "Zertifikat ausstellen",
|
||||
"sslExpired": "Abgelaufen",
|
||||
"sslInDays": "in {{days}} T",
|
||||
"sslNeedDomain": "Geben Sie mindestens eine Domain ein",
|
||||
"sslIssued": "Zertifikat ausgestellt",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (Standalone)",
|
||||
"sslHttpWebroot": "HTTP (Webroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "DNS-Anbieter (z. B. cloudflare)",
|
||||
"sslIssueHint": "Anmeldedaten des DNS-Anbieters müssen bereits auf dem Host konfiguriert sein.",
|
||||
"sslRevoke": "Zertifikat widerrufen",
|
||||
"sslRevoked": "Zertifikat wurde widerrufen",
|
||||
"sslRevokeConfirm": "Zertifikat \"{{name}}\" widerrufen und entfernen? Dies kann nicht rückgängig gemacht werden.",
|
||||
"healthRun": "Ausführen",
|
||||
"healthName": "Name",
|
||||
"healthTarget": "Host / Adresse",
|
||||
"healthAddCheck": "Prüfung hinzufügen",
|
||||
"healthSaved": "Statusprüfungen gespeichert",
|
||||
"healthMissingFields": "Jede Prüfung benötigt einen Namen und ein Ziel",
|
||||
"logFile": "Datei",
|
||||
"logUnit": "Unit",
|
||||
"logCustomPath": "Benutzerdefinierter Pfad unter /var/log (optional)",
|
||||
"logGrep": "Zeilen filtern...",
|
||||
"firewallPersist": "Regeln dauerhaft speichern",
|
||||
"firewallPersisted": "Firewall-Regeln dauerhaft gespeichert",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Tailscale",
|
||||
"wgNotInstalled": "WireGuard ist auf diesem Host nicht installiert",
|
||||
"wgNoInterfaces": "Keine WireGuard-Schnittstellen konfiguriert",
|
||||
"wgInterfaceUp": "Aktivieren",
|
||||
"wgInterfaceDown": "Deaktivieren",
|
||||
"wgBringingUp": "{{name}} wird aktiviert...",
|
||||
"wgBringingDown": "{{name}} wird deaktiviert...",
|
||||
"wgInterfaceUpDone": "{{name}} ist aktiv",
|
||||
"wgInterfaceDownDone": "{{name}} ist deaktiviert",
|
||||
"wgListenPort": "Port",
|
||||
"wgPublicKey": "Öffentlicher Schlüssel",
|
||||
"wgEndpoint": "Endpunkt",
|
||||
"wgAllowedIPs": "Erlaubte IPs",
|
||||
"wgLastHandshake": "Letzter Handshake",
|
||||
"wgHandshakeNever": "Nie",
|
||||
"wgTransfer": "Übertragung",
|
||||
"tsNotInstalled": "Tailscale ist auf diesem Host nicht installiert",
|
||||
"tsRunning": "Aktiv",
|
||||
"tsStopped": "Gestoppt",
|
||||
"tsEnable": "Verbinden",
|
||||
"tsDisable": "Trennen",
|
||||
"tsEnabling": "Verbinde mit Tailscale...",
|
||||
"tsDisabling": "Trenne von Tailscale...",
|
||||
"tsEnabled": "Tailscale verbunden",
|
||||
"tsDisabled": "Tailscale getrennt",
|
||||
"tsIPs": "Tailscale-IPs",
|
||||
"tsPeers": "Peers",
|
||||
"tsOnline": "Online",
|
||||
"tsOffline": "Offline",
|
||||
"tsExitNode": "Exit-Knoten",
|
||||
"tsExitNodeActive": "Exit-Knoten aktiv",
|
||||
"tsHostname": "Hostname"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Metrikenverlauf",
|
||||
"historySuffix": "Verlauf",
|
||||
"cpuMemoryDisk": "CPU / RAM / Festplatte",
|
||||
"network": "Netzwerk",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "Keine Verlaufsdaten für diesen Zeitraum verfügbar.",
|
||||
"custom": "Benutzerdefiniert",
|
||||
"to": "bis",
|
||||
"apply": "Anwenden",
|
||||
"viewHistory": "Verlauf anzeigen"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Proxmox-Statistiken",
|
||||
"cpuUsage": "CPU-Auslastung",
|
||||
"memoryUsage": "Speichernutzung",
|
||||
"diskUsage": "Festplattennutzung",
|
||||
"networkInterfaces": "Netzwerkschnittstellen",
|
||||
"uptime": "Betriebszeit",
|
||||
"systemInfo": "Systeminformationen",
|
||||
"guestsSummary": "Gäste",
|
||||
"storagePools": "Speicherbecken",
|
||||
"clusterHealth": "Cluster Health",
|
||||
"cpuCores_one": "{{count}} Kern",
|
||||
"cpuCores_other": "{{count}} Kerne",
|
||||
"used": "Gebraucht",
|
||||
"total": "Gesamt",
|
||||
"hostname": "Hostname",
|
||||
"kernel": "Kernel",
|
||||
"pveVersion": "PVE-Version",
|
||||
"name": "Name",
|
||||
"status": "Status",
|
||||
"type": "Typ",
|
||||
"cpu": "CPU",
|
||||
"mem": "Mitglied",
|
||||
"disk": "Scheibe",
|
||||
"running": "Läuft",
|
||||
"stopped": "Angehalten",
|
||||
"guestCounts": "{{running}}/{{total}} läuft",
|
||||
"inactive": "Inaktiv",
|
||||
"notClustered": "Eigenständiger Knoten (nicht Teil eines Clusters)",
|
||||
"quorate": "Quorum",
|
||||
"notQuorate": "Nicht beschlussfähig",
|
||||
"nodeOnline": "Online",
|
||||
"nodeOffline": "Offline",
|
||||
"noHostSelected": "Kein Host ausgewählt",
|
||||
"pveshNotFound": "pvesh nicht gefunden - handelt es sich um einen Proxmox-Knoten?",
|
||||
"nodeDetectionFailed": "Es konnte kein gültiger Proxmox-Knotenname ermittelt werden.",
|
||||
"connecting": "Verbindung wird hergestellt...",
|
||||
"connectionFailed": "Verbindung zum Proxmox-Knoten fehlgeschlagen.",
|
||||
"refresh": "Aktualisieren",
|
||||
"searchGuests": "Gäste suchen...",
|
||||
"filterAll": "Alle",
|
||||
"filterVm": "VM",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "Auf diesem Knoten wurden keine VMs oder LXC-Container gefunden.",
|
||||
"noGuestsMatch": "Es gibt keine Gäste, die den aktuellen Filtern entsprechen."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Host-Metriken"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Host-Metriken",
|
||||
"enableProxmoxStats": "Proxmox-Statistiken aktivieren",
|
||||
"enableProxmoxStatsDesc": "Zeigen Sie für diesen Host eine Registerkarte „Proxmox Stats“ mit Live-Statistiken zu Knoten, Gastsystemen, Speicher und Cluster an, die über SSH erfasst werden.",
|
||||
"proxmoxStatsPollInterval": "Abfrageintervall (Sekunden)",
|
||||
"proxmoxStatsPollIntervalDesc": "Mindestens 15 Sekunden. Wie oft sollen die Proxmox-Knotenstatistiken aktualisiert werden?",
|
||||
"proxmoxStatsNodeOverride": "Knotennamen überschreiben",
|
||||
"proxmoxStatsNodeOverrideDesc": "Die automatische Erkennung des Proxmox-Knotennamens (standardmäßig über den Hostnamen ermittelt) kann deaktiviert werden.",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Automatisch anhand des Hostnamens erkannt",
|
||||
"metricsCollectionLabel": "Metrikerfassung",
|
||||
"enableMetricsLabel": "Metriken aktivieren",
|
||||
"enableMetricsDesc": "CPU, RAM, Festplatten und andere Metriken von diesem Host erfassen",
|
||||
"useGlobalMetrics": "Globales Intervall verwenden",
|
||||
"useGlobalMetricsDesc": "Mit dem serverweiten Metrikintervall überschreiben",
|
||||
"metricsIntervalS": "Metrikintervall (s)",
|
||||
"metricsIntervalDesc2": "Sekunden zwischen Metrik-Momentaufnahmen",
|
||||
"excludedMountsLabel": "Ausgeschlossene Halterungen",
|
||||
"monitoredMountsLabel": "Benutzerdefinierte überwachte Pfade",
|
||||
"monitoredMountsDesc": "Fügen Sie Pfade hinzu, die nicht als separate Mounts verfügbar sind, einschließlich bind-gebundener Home Assistant-Pfade wie /config.",
|
||||
"monitoredMountPathPlaceholder": "Pfad (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Etikett (optional)",
|
||||
"addMonitoredMount": "Pfad hinzufügen",
|
||||
"excludedMountsDesc": "Bestimmte Mountpunkte oder Dateisystemtypen (z. B. nfs, cifs) können von der Festplattennutzung und Warnmeldungen für diesen Host ausgeblendet werden.",
|
||||
"excludedMountsPlaceholder": "Mount-Pfad (/mnt/nas) oder Dateisystemtyp (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Keine Mounts ausgeschlossen. Alle erkannten Dateisysteme werden angezeigt.",
|
||||
"addExcludedMount": "Hinzufügen",
|
||||
"visibleWidgets": "Sichtbare Widgets",
|
||||
"widgetsMovedToHostMetrics": "Karten werden jetzt direkt im Tab „Host-Metriken“ hinzugefügt, angeordnet und in der Größe verändert. Öffnen Sie die Host-Metriken für diesen Host und verwenden Sie „Anpassen“, um auszuwählen, welche Karten angezeigt werden.",
|
||||
"quickActionsLabel": "Schnellaktionen",
|
||||
"quickActionsToolbar": "Schnellaktionen erscheinen als Schaltflächen in der Host-Metriken-Symbolleiste zur Ausführung von Befehlen mit einem Klick.",
|
||||
"noQuickActions": "Noch keine Schnellaktionen.",
|
||||
"buttonLabel": "Schaltflächenbeschriftung",
|
||||
"selectSnippetPlaceholder": "Snippet auswählen...",
|
||||
"addActionBtn": "Aktion hinzufügen"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Kennzahlen und Warnmeldungen",
|
||||
"feature_metrics_desc": "Verfolgen Sie CPU, Arbeitsspeicher und Festplatte im Zeitverlauf und lassen Sie sich benachrichtigen, wenn diese Werte sinken."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Aufbewahrungsdauer der Metriken",
|
||||
"metricsHistoryRetentionRange": "1 bis 90 Tage",
|
||||
"days": "Tage"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Keine Daten verfügbar",
|
||||
"showCurrentValue": "Aktuellen Wert anzeigen",
|
||||
"chartMetric": "Metrik",
|
||||
"metricRange": "Bereich"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "ΚΜΕ",
|
||||
"memory": "Μνήμη",
|
||||
"disk": "Δίσκος",
|
||||
"network": "Δίκτυο",
|
||||
"uptime": "Χρόνος λειτουργίας",
|
||||
"processes": "Διαδικασίες",
|
||||
"available": "Διαθέσιμος",
|
||||
"free": "Δωρεάν",
|
||||
"connecting": "Συνδετικός...",
|
||||
"connectionFailed": "Αποτυχία σύνδεσης με τον διακομιστή",
|
||||
"naCpus": "Δ/Υ CPU(s)",
|
||||
"cpuCores_one": "{{count}} Πυρήνας",
|
||||
"cpuCores_other": "{{count}} Πυρήνες",
|
||||
"cpuUsage": "Χρήση CPU",
|
||||
"memoryUsage": "Χρήση μνήμης",
|
||||
"diskUsage": "Χρήση δίσκου",
|
||||
"selectFilesystem": "Επιλογή συστήματος αρχείων",
|
||||
"temperature": "Θερμοκρασία",
|
||||
"highestTemperature": "Υψηλότερη θερμοκρασία",
|
||||
"primaryTemperatureSensor": "Κύριος αισθητήρας",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "Δεν εντοπίστηκε GPU NVIDIA. Εγκαταστήστε το πρόγραμμα οδήγησης NVIDIA (παρέχει nvidia-smi) για να δείτε τις μετρήσεις GPU.",
|
||||
"driver": "Οδηγός {{version}}",
|
||||
"utilization": "Χρησιμοποίηση",
|
||||
"memory": "VRAM",
|
||||
"temperature": "Θερμοκρασία",
|
||||
"power": "Εξουσία",
|
||||
"fan": "Ανεμιστήρας",
|
||||
"processes": "Διαδικασίες GPU",
|
||||
"noProcesses": "Δεν υπάρχουν διεργασίες που να χρησιμοποιούν την GPU"
|
||||
},
|
||||
"failedToFetchHostConfig": "Αποτυχία ανάκτησης διαμόρφωσης κεντρικού υπολογιστή",
|
||||
"serverOffline": "Διακομιστής εκτός σύνδεσης",
|
||||
"cannotFetchMetrics": "Δεν είναι δυνατή η ανάκτηση μετρήσεων από διακομιστή εκτός σύνδεσης",
|
||||
"totpFailed": "Η επαλήθευση TOTP απέτυχε.",
|
||||
"noneAuthNotSupported": "Το Host Metrics δεν υποστηρίζει τον τύπο ελέγχου ταυτότητας 'κανένας'.",
|
||||
"noHostSelected": "Δεν έχει επιλεγεί κεντρικός υπολογιστής",
|
||||
"load": "Φορτίο",
|
||||
"systemInfo": "Πληροφορίες συστήματος",
|
||||
"hostname": "Όνομα κεντρικού υπολογιστή",
|
||||
"operatingSystem": "Λειτουργικό σύστημα",
|
||||
"kernel": "Πυρήνας",
|
||||
"seconds": "δευτερόλεπτα",
|
||||
"networkInterfaces": "Διεπαφές δικτύου",
|
||||
"noInterfacesFound": "Δεν βρέθηκαν διεπαφές δικτύου",
|
||||
"noProcessesFound": "Δεν βρέθηκαν διεργασίες",
|
||||
"processesTotal": "σύνολο",
|
||||
"processesRunning": "τρέξιμο",
|
||||
"loginStats": "Στατιστικά στοιχεία σύνδεσης SSH",
|
||||
"noRecentLoginData": "Δεν υπάρχουν πρόσφατα δεδομένα σύνδεσης",
|
||||
"executingQuickAction": "Εκτέλεση {{name}}...",
|
||||
"quickActionSuccess": "{{name}} ολοκληρώθηκε με επιτυχία",
|
||||
"quickActionFailed": "{{name}} απέτυχε",
|
||||
"quickActionError": "Αποτυχία εκτέλεσης {{name}}",
|
||||
"ports": {
|
||||
"title": "Θύρες ακρόασης",
|
||||
"protocol": "Πρωτόκολλο",
|
||||
"port": "Λιμάνι",
|
||||
"address": "Διεύθυνση",
|
||||
"process": "Διαδικασία",
|
||||
"search": "Αναζήτηση θυρών...",
|
||||
"allProtocols": "Ολοι",
|
||||
"noData": "Δεν υπάρχουν δεδομένα θυρών ακρόασης"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Τείχος προστασίας",
|
||||
"inactive": "Αδρανής",
|
||||
"policy": "Πολιτική",
|
||||
"rules": "κανόνες",
|
||||
"noRules": "Δεν υπάρχουν κανόνες σε αυτήν την αλυσίδα",
|
||||
"noData": "Δεν υπάρχουν διαθέσιμα δεδομένα τείχους προστασίας",
|
||||
"action": "Δράση",
|
||||
"protocol": "Πρωτό",
|
||||
"port": "Λιμάνι",
|
||||
"source": "Πηγή",
|
||||
"anywhere": "Οπουδήποτε",
|
||||
"chains": "αλυσίδες"
|
||||
},
|
||||
"loadAvg": "Μέσος όρος φορτίου",
|
||||
"swap": "Ανταλαγή",
|
||||
"architecture": "Αρχιτεκτονική",
|
||||
"refresh": "Φρεσκάρω",
|
||||
"retry": "Δοκιμάζω πάλι",
|
||||
"customize": "Προσαρμογή διάταξης",
|
||||
"reset": "Επαναφορά",
|
||||
"tabLive": "Ζω",
|
||||
"editModeInstructions": "Σύρετε τις κάρτες για αναδιάταξη, σύρετε την κάτω άκρη για αλλαγή μεγέθους και χρησιμοποιήστε το κουμπί πλάτους για να αλλάξετε το εύρος μιας κάρτας. Προσθέστε ή αφαιρέστε κάρτες παρακάτω.",
|
||||
"managers": {
|
||||
"services": "Υπηρεσίες",
|
||||
"processInspector": "Επιθεωρητής Διαδικασίας",
|
||||
"logViewer": "Πρόγραμμα προβολής αρχείων καταγραφής",
|
||||
"cron": "Cron Jobs",
|
||||
"packages": "Πακέτα",
|
||||
"ssl": "Πιστοποιητικά SSL",
|
||||
"firewall": "Τείχος προστασίας",
|
||||
"users": "Χρήστες και Δικαιώματα",
|
||||
"healthCheck": "Έλεγχοι υγείας",
|
||||
"diskBreakdown": "Ανάλυση δίσκου",
|
||||
"systemdTimers": "Χρονόμετρα",
|
||||
"topMemory": "Κορυφαία κατά Μνήμη",
|
||||
"noData": "Δεν υπάρχουν δεδομένα",
|
||||
"sudoHint": "Ορίστε έναν κωδικό πρόσβασης sudo για αυτόν τον κεντρικό υπολογιστή στον επεξεργαστή κεντρικού υπολογιστή για να ενεργοποιήσετε τις προνομιακές ενέργειες.",
|
||||
"filter": "Φίλτρο...",
|
||||
"start": "Αρχή",
|
||||
"stop": "Στάση",
|
||||
"restart": "Επανεκκίνηση",
|
||||
"actionDone": "{{name}} ενημερώθηκε",
|
||||
"actionFailed": "Η ενέργεια απέτυχε",
|
||||
"signalSent": "Σήμα που στάλθηκε στο PID {{pid}}",
|
||||
"killHint": "Κάντε κλικ: τερματισμός (SIGTERM). Δεξί κλικ: αναγκαστική τερματισμός (SIGKILL).",
|
||||
"working": "Εργαζόμενος...",
|
||||
"update": "Εκσυγχρονίζω",
|
||||
"upgradeAll": "Αναβάθμιση όλων",
|
||||
"allUpToDate": "Όλα είναι ενημερωμένα",
|
||||
"save": "Εκτός",
|
||||
"command": "Εντολή",
|
||||
"enabled": "Ενεργοποιημένο",
|
||||
"cronSaved": "Το Crontab ενημερώθηκε",
|
||||
"clients": "Πελάτες",
|
||||
"dryRun": "Ξηρή λειτουργία",
|
||||
"renew": "Ανανεώνω",
|
||||
"noAcmeClient": "Δεν βρέθηκε πρόγραμμα-πελάτης ACME (certbot ή acme.sh) σε αυτόν τον κεντρικό υπολογιστή.",
|
||||
"addInputRule": "Προσθήκη κανόνα INPUT",
|
||||
"firewallWarning": "Οι αλλαγές ισχύουν μόνο κατά τον χρόνο εκτέλεσης μέχρι να διατηρηθούν. Προσέξτε να μην κλειδωθείτε έξω.",
|
||||
"ruleApplied": "Εφαρμόστηκε κανόνας",
|
||||
"invalidPort": "Εισαγάγετε μια έγκυρη θύρα (1-65535)",
|
||||
"newUsername": "Νέο όνομα χρήστη",
|
||||
"addUser": "Προσθέτω",
|
||||
"deleteUser": "Διαγραφή χρήστη",
|
||||
"noHealthChecks": "Δεν έχουν ρυθμιστεί ακόμη έλεγχοι εύρυθμης λειτουργίας.",
|
||||
"follow": "Ακολουθώ",
|
||||
"noLogData": "Δεν υπάρχει έξοδος αρχείου καταγραφής.",
|
||||
"tree": "Δέντρο",
|
||||
"enableDisable": "Ενεργοποίηση/απενεργοποίηση κατά την εκκίνηση",
|
||||
"grantSudo": "Grant sudo",
|
||||
"revokeSudo": "Ανάκληση sudo",
|
||||
"sslIssueCert": "Έκδοση πιστοποιητικού",
|
||||
"sslExpired": "Λήξη",
|
||||
"sslInDays": "σε {{days}}δ",
|
||||
"sslNeedDomain": "Εισαγάγετε τουλάχιστον έναν τομέα",
|
||||
"sslIssued": "Πιστοποιητικό που εκδόθηκε",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (αυτόνομο)",
|
||||
"sslHttpWebroot": "HTTP (weberroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "Πάροχος DNS (π.χ. cloudflare)",
|
||||
"sslIssueHint": "Τα διαπιστευτήρια του παρόχου DNS πρέπει να έχουν ήδη διαμορφωθεί στον κεντρικό υπολογιστή.",
|
||||
"sslRevoke": "Ανάκληση πιστοποιητικού",
|
||||
"sslRevoked": "Το πιστοποιητικό ανακλήθηκε",
|
||||
"sslRevokeConfirm": "Ανάκληση και κατάργηση του πιστοποιητικού \"{{name}}\"; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.",
|
||||
"healthRun": "Τρέξιμο",
|
||||
"healthName": "Ονομα",
|
||||
"healthTarget": "Υποδοχή / διεύθυνση",
|
||||
"healthAddCheck": "Προσθήκη επιταγής",
|
||||
"healthSaved": "Οι έλεγχοι υγείας αποθηκεύτηκαν",
|
||||
"healthMissingFields": "Κάθε έλεγχος χρειάζεται ένα όνομα και έναν στόχο",
|
||||
"logFile": "Αρχείο",
|
||||
"logUnit": "Μονάδα",
|
||||
"logCustomPath": "Προσαρμοσμένη διαδρομή στο /var/log (προαιρετικό)",
|
||||
"logGrep": "Γραμμές φιλτραρίσματος...",
|
||||
"firewallPersist": "Επιμονή στους κανόνες",
|
||||
"firewallPersisted": "Οι κανόνες του τείχους προστασίας παρέμειναν",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Κλίμακα ουράς",
|
||||
"wgNotInstalled": "Το WireGuard δεν είναι εγκατεστημένο σε αυτόν τον κεντρικό υπολογιστή",
|
||||
"wgNoInterfaces": "Δεν έχουν ρυθμιστεί διεπαφές WireGuard",
|
||||
"wgInterfaceUp": "Ανατρέφω",
|
||||
"wgInterfaceDown": "Ρίχνω",
|
||||
"wgBringingUp": "Εμφάνιση του {{name}}...",
|
||||
"wgBringingDown": "Κατεβάζοντας το {{name}}...",
|
||||
"wgInterfaceUpDone": "Το {{name}} είναι ενεργό",
|
||||
"wgInterfaceDownDone": "Το {{name}} δεν λειτουργεί",
|
||||
"wgListenPort": "Λιμάνι",
|
||||
"wgPublicKey": "Δημόσιο κλειδί",
|
||||
"wgEndpoint": "Τελικό σημείο",
|
||||
"wgAllowedIPs": "Επιτρεπόμενες IP",
|
||||
"wgLastHandshake": "Τελευταία χειραψία",
|
||||
"wgHandshakeNever": "Ποτέ",
|
||||
"wgTransfer": "Μεταφορά",
|
||||
"tsNotInstalled": "Το Tailscale δεν είναι εγκατεστημένο σε αυτόν τον κεντρικό υπολογιστή",
|
||||
"tsRunning": "Τρέξιμο",
|
||||
"tsStopped": "Σταμάτησε",
|
||||
"tsEnable": "Συνδέω",
|
||||
"tsDisable": "Αποσυνδέω",
|
||||
"tsEnabling": "Σύνδεση με το Tailscale...",
|
||||
"tsDisabling": "Αποσύνδεση από το Tailscale...",
|
||||
"tsEnabled": "Συνδεδεμένο με κλίμακα ουράς",
|
||||
"tsDisabled": "Η κλίμακα ουράς αποσυνδέθηκε",
|
||||
"tsIPs": "IP κλίμακας ουράς",
|
||||
"tsPeers": "Ομότιμοι",
|
||||
"tsOnline": "Διαδικτυακά",
|
||||
"tsOffline": "Εκτός σύνδεσης",
|
||||
"tsExitNode": "Κόμβος εξόδου",
|
||||
"tsExitNodeActive": "Κόμβος εξόδου ενεργός",
|
||||
"tsHostname": "Όνομα κεντρικού υπολογιστή"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Ιστορικό μετρήσεων",
|
||||
"historySuffix": "Ιστορία",
|
||||
"cpuMemoryDisk": "CPU / Μνήμη / Δίσκος",
|
||||
"network": "Δίκτυο",
|
||||
"download": "Συνάντηση",
|
||||
"upload": "Τέξας",
|
||||
"noData": "Δεν υπάρχουν διαθέσιμα δεδομένα ιστορικού για αυτό το χρονικό εύρος.",
|
||||
"custom": "Εθιμο",
|
||||
"to": "να",
|
||||
"apply": "Εφαρμόζω",
|
||||
"viewHistory": "Προβολή ιστορικού"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Στατιστικά Proxmox",
|
||||
"cpuUsage": "Χρήση CPU",
|
||||
"memoryUsage": "Χρήση μνήμης",
|
||||
"diskUsage": "Χρήση δίσκου",
|
||||
"networkInterfaces": "Διεπαφές δικτύου",
|
||||
"uptime": "Χρόνος λειτουργίας",
|
||||
"systemInfo": "Πληροφορίες συστήματος",
|
||||
"guestsSummary": "Επισκέπτες",
|
||||
"storagePools": "Πισίνες αποθήκευσης",
|
||||
"clusterHealth": "Υγεία συμπλέγματος",
|
||||
"cpuCores_one": "{{count}} Πυρήνας",
|
||||
"cpuCores_other": "{{count}} Πυρήνες",
|
||||
"used": "Μεταχειρισμένος",
|
||||
"total": "Σύνολο",
|
||||
"hostname": "Όνομα κεντρικού υπολογιστή",
|
||||
"kernel": "Πυρήνας",
|
||||
"pveVersion": "Έκδοση PVE",
|
||||
"name": "Ονομα",
|
||||
"status": "Κατάσταση",
|
||||
"type": "Τύπος",
|
||||
"cpu": "ΚΜΕ",
|
||||
"mem": "Μνήμη",
|
||||
"disk": "Δίσκος",
|
||||
"running": "Τρέξιμο",
|
||||
"stopped": "Σταμάτησε",
|
||||
"guestCounts": "{{running}}/{{total}} σε λειτουργία",
|
||||
"inactive": "Αδρανής",
|
||||
"notClustered": "Αυτόνομος κόμβος (δεν αποτελεί μέρος συμπλέγματος)",
|
||||
"quorate": "Απαρτίζω",
|
||||
"notQuorate": "Δεν υπάρχει απαρτία",
|
||||
"nodeOnline": "Διαδικτυακά",
|
||||
"nodeOffline": "Εκτός σύνδεσης",
|
||||
"noHostSelected": "Δεν έχει επιλεγεί κεντρικός υπολογιστής",
|
||||
"pveshNotFound": "Το pvesh δεν βρέθηκε - είναι αυτός κόμβος Proxmox;",
|
||||
"nodeDetectionFailed": "Δεν είναι δυνατός ο προσδιορισμός ενός έγκυρου ονόματος κόμβου Proxmox",
|
||||
"connecting": "Συνδετικός...",
|
||||
"connectionFailed": "Αποτυχία σύνδεσης με τον κόμβο Proxmox",
|
||||
"refresh": "Φρεσκάρω",
|
||||
"searchGuests": "Αναζήτηση επισκεπτών...",
|
||||
"filterAll": "Ολοι",
|
||||
"filterVm": "Εικονική Μηχανή",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "Δεν βρέθηκαν εικονικές μηχανές ή κοντέινερ LXC σε αυτόν τον κόμβο.",
|
||||
"noGuestsMatch": "Δεν υπάρχουν επισκέπτες που να αντιστοιχούν στα τρέχοντα φίλτρα."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Μετρήσεις κεντρικού υπολογιστή"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Μετρήσεις κεντρικού υπολογιστή",
|
||||
"enableProxmoxStats": "Ενεργοποίηση στατιστικών Proxmox",
|
||||
"enableProxmoxStatsDesc": "Εμφάνιση μιας καρτέλας Proxmox Stats για αυτόν τον κεντρικό υπολογιστή με στατιστικά στοιχεία ζωντανού κόμβου, επισκέπτη, χώρου αποθήκευσης και συμπλέγματος που συλλέγονται μέσω SSH.",
|
||||
"proxmoxStatsPollInterval": "Διάστημα δημοσκόπησης (δευτερόλεπτα)",
|
||||
"proxmoxStatsPollIntervalDesc": "Ελάχιστο 15 δευτερόλεπτα. Πόσο συχνά θα ανανεώνονται τα στατιστικά στοιχεία του κόμβου Proxmox.",
|
||||
"proxmoxStatsNodeOverride": "Παράκαμψη ονόματος κόμβου",
|
||||
"proxmoxStatsNodeOverrideDesc": "Παράκαμψη αυτόματης ανίχνευσης του ονόματος κόμβου Proxmox (εντοπίζεται μέσω του ονόματος κεντρικού υπολογιστή από προεπιλογή).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Αυτόματη ανίχνευση από το όνομα κεντρικού υπολογιστή",
|
||||
"metricsCollectionLabel": "Συλλογή μετρήσεων",
|
||||
"enableMetricsLabel": "Ενεργοποίηση μετρήσεων",
|
||||
"enableMetricsDesc": "Συλλογή μετρήσεων CPU, RAM, δίσκου και άλλων από αυτόν τον κεντρικό υπολογιστή",
|
||||
"useGlobalMetrics": "Χρήση καθολικού διαστήματος",
|
||||
"useGlobalMetricsDesc": "Παράκαμψη με το διάστημα μετρήσεων σε ολόκληρο τον διακομιστή",
|
||||
"metricsIntervalS": "Διάστημα μετρήσεων (s)",
|
||||
"metricsIntervalDesc2": "Δευτερόλεπτα μεταξύ στιγμιότυπων μετρήσεων",
|
||||
"excludedMountsLabel": "Εξαιρούμενες βάσεις",
|
||||
"monitoredMountsLabel": "Προσαρμοσμένες παρακολουθούμενες διαδρομές",
|
||||
"monitoredMountsDesc": "Προσθέστε διαδρομές που δεν εκτίθενται ως ξεχωριστές προσαρτήσεις, συμπεριλαμβανομένων των διαδρομών του Home Assistant που είναι προσαρτημένες στο bind, όπως το /config.",
|
||||
"monitoredMountPathPlaceholder": "Διαδρομή (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Ετικέτα (προαιρετικά)",
|
||||
"addMonitoredMount": "Προσθήκη διαδρομής",
|
||||
"excludedMountsDesc": "Απόκρυψη συγκεκριμένων σημείων προσάρτησης ή τύπων συστημάτων αρχείων (π.χ. nfs, cifs) από τη χρήση δίσκου και τις ειδοποιήσεις για αυτόν τον κεντρικό υπολογιστή.",
|
||||
"excludedMountsPlaceholder": "Διαδρομή προσάρτησης (/mnt/nas) ή τύπος συστήματος αρχείων (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Δεν εξαιρούνται προσαρτήσεις. Εμφανίζονται όλα τα εντοπισμένα συστήματα αρχείων.",
|
||||
"addExcludedMount": "Προσθέτω",
|
||||
"visibleWidgets": "Ορατά γραφικά στοιχεία",
|
||||
"widgetsMovedToHostMetrics": "Οι κάρτες προστίθενται, ταξινομούνται και αλλάζουν μέγεθος απευθείας στην καρτέλα Μετρήσεις κεντρικού υπολογιστή. Ανοίξτε τις Μετρήσεις κεντρικού υπολογιστή για αυτόν τον κεντρικό υπολογιστή και χρησιμοποιήστε την Προσαρμογή για να επιλέξετε ποιες κάρτες θα εμφανίζονται.",
|
||||
"quickActionsLabel": "Γρήγορες ενέργειες",
|
||||
"quickActionsToolbar": "Οι γρήγορες ενέργειες εμφανίζονται ως κουμπιά στη γραμμή εργαλείων Μετρήσεων κεντρικού υπολογιστή για εκτέλεση εντολών με ένα κλικ.",
|
||||
"noQuickActions": "Δεν υπάρχουν ακόμη γρήγορες ενέργειες.",
|
||||
"buttonLabel": "Ετικέτα κουμπιού",
|
||||
"selectSnippetPlaceholder": "Επιλογή αποσπάσματος...",
|
||||
"addActionBtn": "Προσθήκη ενέργειας"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Μετρήσεις και ειδοποιήσεις",
|
||||
"feature_metrics_desc": "Παρακολουθήστε την CPU, τη μνήμη και τον δίσκο με την πάροδο του χρόνου και λάβετε ειδοποίηση όταν παρουσιάσουν προβλήματα."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Διατήρηση ιστορικού μετρήσεων",
|
||||
"metricsHistoryRetentionRange": "1 έως 90 ημέρες",
|
||||
"days": "ημέρες"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Δεν υπάρχουν διαθέσιμα δεδομένα",
|
||||
"showCurrentValue": "Εμφάνιση τρέχουσας τιμής",
|
||||
"chartMetric": "Μετρικός",
|
||||
"metricRange": "Σειρά"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "Memoria",
|
||||
"disk": "Disco",
|
||||
"network": "Red",
|
||||
"uptime": "Tiempo de actividad",
|
||||
"processes": "Procesos",
|
||||
"available": "Disponible",
|
||||
"free": "Libre",
|
||||
"connecting": "Conectando...",
|
||||
"connectionFailed": "Error al conectar con el servidor",
|
||||
"naCpus": "CPU(s) N/D",
|
||||
"cpuCores_one": "{{count}} núcleo",
|
||||
"cpuCores_other": "{{count}} núcleos",
|
||||
"cpuUsage": "Uso de CPU",
|
||||
"memoryUsage": "Uso de memoria",
|
||||
"diskUsage": "Uso del disco",
|
||||
"selectFilesystem": "Seleccionar sistema de archivos",
|
||||
"temperature": "Temperatura",
|
||||
"highestTemperature": "Temperatura más alta",
|
||||
"primaryTemperatureSensor": "Sensor primario",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "No se ha detectado ninguna GPU NVIDIA. Instale el controlador NVIDIA (que incluye nvidia-smi) para ver las métricas de la GPU.",
|
||||
"driver": "Conductor {{version}}",
|
||||
"utilization": "Utilización",
|
||||
"memory": "VRAM",
|
||||
"temperature": "Temperatura",
|
||||
"power": "Fuerza",
|
||||
"fan": "Admirador",
|
||||
"processes": "procesos de GPU",
|
||||
"noProcesses": "Ningún proceso está utilizando la GPU."
|
||||
},
|
||||
"failedToFetchHostConfig": "Error al obtener la configuración del host",
|
||||
"serverOffline": "Servidor fuera de línea",
|
||||
"cannotFetchMetrics": "No se pueden obtener métricas de un servidor fuera de línea",
|
||||
"totpFailed": "Error en la verificación TOTP",
|
||||
"noneAuthNotSupported": "Host Metrics no admite el tipo de autenticación 'none'.",
|
||||
"noHostSelected": "Ningún host seleccionado",
|
||||
"load": "Carga",
|
||||
"systemInfo": "Información del sistema",
|
||||
"hostname": "Nombre de host",
|
||||
"operatingSystem": "Sistema operativo",
|
||||
"kernel": "Kernel",
|
||||
"seconds": "segundos",
|
||||
"networkInterfaces": "Interfaces de red",
|
||||
"noInterfacesFound": "No se encontraron interfaces de red",
|
||||
"noProcessesFound": "No se encontraron procesos",
|
||||
"processesTotal": "total",
|
||||
"processesRunning": "en ejecución",
|
||||
"loginStats": "Estadísticas de inicio de sesión SSH",
|
||||
"noRecentLoginData": "No hay datos de inicio de sesión recientes",
|
||||
"executingQuickAction": "Ejecutando {{name}}...",
|
||||
"quickActionSuccess": "{{name}} completado correctamente",
|
||||
"quickActionFailed": "{{name}} falló",
|
||||
"quickActionError": "Error al ejecutar {{name}}",
|
||||
"ports": {
|
||||
"title": "Puertos en escucha",
|
||||
"protocol": "Protocolo",
|
||||
"port": "Puerto",
|
||||
"address": "Dirección",
|
||||
"process": "Proceso",
|
||||
"search": "Buscar puertos...",
|
||||
"allProtocols": "Todos",
|
||||
"noData": "No hay datos de puertos en escucha"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Cortafuegos",
|
||||
"inactive": "Inactivo",
|
||||
"policy": "Política",
|
||||
"rules": "reglas",
|
||||
"noRules": "No hay reglas en esta cadena",
|
||||
"noData": "No hay datos del cortafuegos disponibles",
|
||||
"action": "Acción",
|
||||
"protocol": "Proto",
|
||||
"port": "Puerto",
|
||||
"source": "Origen",
|
||||
"anywhere": "Cualquier origen",
|
||||
"chains": "cadenas"
|
||||
},
|
||||
"loadAvg": "Carga Promedio",
|
||||
"swap": "Swap",
|
||||
"architecture": "Arquitectura",
|
||||
"refresh": "Refrescar",
|
||||
"retry": "Reintentar",
|
||||
"customize": "Personalizar diseño",
|
||||
"reset": "Restablecer",
|
||||
"tabLive": "En vivo",
|
||||
"editModeInstructions": "Arrastre las tarjetas para reorganizarlas, arrastre el borde inferior para redimensionarlas, y use el botón de ancho para cambiar el ancho de una tarjeta. Añada o elimine tarjetas a continuación.",
|
||||
"managers": {
|
||||
"services": "Servicios",
|
||||
"processInspector": "Inspector de procesos",
|
||||
"logViewer": "Visor de registros",
|
||||
"cron": "Tareas Cron",
|
||||
"packages": "Paquetes",
|
||||
"ssl": "Certificados SSL",
|
||||
"firewall": "Firewall",
|
||||
"users": "Usuarios y permisos",
|
||||
"healthCheck": "Comprobaciones de estado",
|
||||
"diskBreakdown": "Desglose de disco",
|
||||
"systemdTimers": "Temporizadores",
|
||||
"topMemory": "Top por memoria",
|
||||
"noData": "Sin datos",
|
||||
"sudoHint": "Establezca una contraseña de sudo para este host en el editor del host para habilitar acciones privilegiadas.",
|
||||
"filter": "Filtrar...",
|
||||
"start": "Iniciar",
|
||||
"stop": "Detener",
|
||||
"restart": "Reiniciar",
|
||||
"actionDone": "{{name}} actualizado",
|
||||
"actionFailed": "Acción fallida",
|
||||
"signalSent": "Señal enviada a PID {{pid}}",
|
||||
"killHint": "Clic: terminar (SIGTERM). Clic derecho: forzar cierre (SIGKILL).",
|
||||
"working": "Trabajando...",
|
||||
"update": "Actualizar",
|
||||
"upgradeAll": "Actualizar todo",
|
||||
"allUpToDate": "Todo está actualizado",
|
||||
"save": "Guardar",
|
||||
"command": "Comando",
|
||||
"enabled": "Activado",
|
||||
"cronSaved": "Crontab actualizado",
|
||||
"clients": "Clientes",
|
||||
"dryRun": "Simulación",
|
||||
"renew": "Renovar",
|
||||
"noAcmeClient": "No se encontró ningún cliente ACME (certbot o acme.sh) en este host.",
|
||||
"addInputRule": "Añadir regla INPUT",
|
||||
"firewallWarning": "Los cambios son solo en tiempo de ejecución hasta que se persisten. Tenga cuidado de no quedarse bloqueado fuera.",
|
||||
"ruleApplied": "Regla aplicada",
|
||||
"invalidPort": "Introduzca un puerto válido (1-65535)",
|
||||
"newUsername": "Nuevo nombre de usuario",
|
||||
"addUser": "Añadir",
|
||||
"deleteUser": "Eliminar usuario",
|
||||
"noHealthChecks": "Aún no se han configurado comprobaciones de estado.",
|
||||
"follow": "Seguir",
|
||||
"noLogData": "Sin salida de registro.",
|
||||
"tree": "Árbol",
|
||||
"enableDisable": "Activar / desactivar al arrancar",
|
||||
"grantSudo": "Conceder sudo",
|
||||
"revokeSudo": "Revocar sudo",
|
||||
"sslIssueCert": "Emitir certificado",
|
||||
"sslExpired": "Caducado",
|
||||
"sslInDays": "en {{days}}d",
|
||||
"sslNeedDomain": "Introduzca al menos un dominio",
|
||||
"sslIssued": "Certificado emitido",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (standalone)",
|
||||
"sslHttpWebroot": "HTTP (webroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "Proveedor DNS (p. ej. cloudflare)",
|
||||
"sslIssueHint": "Las credenciales del proveedor DNS ya deben estar configuradas en el host.",
|
||||
"sslRevoke": "Revocar certificado",
|
||||
"sslRevoked": "Certificado revocado",
|
||||
"sslRevokeConfirm": "¿Revocar y eliminar el certificado \"{{name}}\"? Esta acción no se puede deshacer.",
|
||||
"healthRun": "Ejecutar",
|
||||
"healthName": "Nombre",
|
||||
"healthTarget": "Host / dirección",
|
||||
"healthAddCheck": "Añadir verificación",
|
||||
"healthSaved": "Verificaciones de estado guardadas",
|
||||
"healthMissingFields": "Cada verificación necesita un nombre y un destino",
|
||||
"logFile": "Archivo",
|
||||
"logUnit": "Unidad",
|
||||
"logCustomPath": "Ruta personalizada bajo /var/log (opcional)",
|
||||
"logGrep": "Filtrar líneas...",
|
||||
"firewallPersist": "Persistir reglas",
|
||||
"firewallPersisted": "Reglas del firewall persistidas",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Tailscale",
|
||||
"wgNotInstalled": "WireGuard no está instalado en este host",
|
||||
"wgNoInterfaces": "No hay interfaces WireGuard configuradas",
|
||||
"wgInterfaceUp": "Activar",
|
||||
"wgInterfaceDown": "Desactivar",
|
||||
"wgBringingUp": "Activando {{name}}...",
|
||||
"wgBringingDown": "Desactivando {{name}}...",
|
||||
"wgInterfaceUpDone": "{{name}} está activado",
|
||||
"wgInterfaceDownDone": "{{name}} está desactivado",
|
||||
"wgListenPort": "Puerto",
|
||||
"wgPublicKey": "Clave pública",
|
||||
"wgEndpoint": "Endpoint",
|
||||
"wgAllowedIPs": "IPs permitidas",
|
||||
"wgLastHandshake": "Último handshake",
|
||||
"wgHandshakeNever": "Nunca",
|
||||
"wgTransfer": "Transferencia",
|
||||
"tsNotInstalled": "Tailscale no está instalado en este host",
|
||||
"tsRunning": "Ejecutándose",
|
||||
"tsStopped": "Detenido",
|
||||
"tsEnable": "Conectar",
|
||||
"tsDisable": "Desconectar",
|
||||
"tsEnabling": "Conectando a Tailscale...",
|
||||
"tsDisabling": "Desconectando de Tailscale...",
|
||||
"tsEnabled": "Tailscale conectado",
|
||||
"tsDisabled": "Tailscale desconectado",
|
||||
"tsIPs": "IPs de Tailscale",
|
||||
"tsPeers": "Pares",
|
||||
"tsOnline": "En línea",
|
||||
"tsOffline": "Desconectado",
|
||||
"tsExitNode": "Nodo de salida",
|
||||
"tsExitNodeActive": "Nodo de salida activo",
|
||||
"tsHostname": "Nombre de host"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Historial de Métricas",
|
||||
"historySuffix": "Historial",
|
||||
"cpuMemoryDisk": "CPU / Memoria / Disco",
|
||||
"network": "Red",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "No hay datos de historial disponibles para este rango de tiempo.",
|
||||
"custom": "Personalizado",
|
||||
"to": "a",
|
||||
"apply": "Aplicar",
|
||||
"viewHistory": "Ver Historial"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Estadísticas de Proxmox",
|
||||
"cpuUsage": "Uso de la CPU",
|
||||
"memoryUsage": "Uso de memoria",
|
||||
"diskUsage": "Uso del disco",
|
||||
"networkInterfaces": "Interfaces de red",
|
||||
"uptime": "Tiempo de actividad",
|
||||
"systemInfo": "Información del sistema",
|
||||
"guestsSummary": "Huéspedes",
|
||||
"storagePools": "Piscinas de almacenamiento",
|
||||
"clusterHealth": "Salud en grupo",
|
||||
"cpuCores_one": "{{count}} Núcleo",
|
||||
"cpuCores_other": "{{count}} Núcleos",
|
||||
"used": "Usado",
|
||||
"total": "Total",
|
||||
"hostname": "nombre de host",
|
||||
"kernel": "Núcleo",
|
||||
"pveVersion": "Versión PVE",
|
||||
"name": "Nombre",
|
||||
"status": "Estado",
|
||||
"type": "Tipo",
|
||||
"cpu": "UPC",
|
||||
"mem": "Memoria",
|
||||
"disk": "Disco",
|
||||
"running": "Correr",
|
||||
"stopped": "Interrumpido",
|
||||
"guestCounts": "{{running}}/{{total}} corriendo",
|
||||
"inactive": "Inactivo",
|
||||
"notClustered": "Nodo independiente (no forma parte de un clúster)",
|
||||
"quorate": "Con quórum",
|
||||
"notQuorate": "No hay quórum",
|
||||
"nodeOnline": "En línea",
|
||||
"nodeOffline": "Desconectado",
|
||||
"noHostSelected": "No se ha seleccionado ningún host.",
|
||||
"pveshNotFound": "pvesh no encontrado - ¿es este un nodo Proxmox?",
|
||||
"nodeDetectionFailed": "No se pudo determinar un nombre de nodo Proxmox válido.",
|
||||
"connecting": "Conectando...",
|
||||
"connectionFailed": "No se pudo conectar con el nodo Proxmox.",
|
||||
"refresh": "Refrescar",
|
||||
"searchGuests": "Buscar huéspedes...",
|
||||
"filterAll": "Todo",
|
||||
"filterVm": "VM",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "No se encontraron máquinas virtuales ni contenedores LXC en este nodo.",
|
||||
"noGuestsMatch": "No hay huéspedes que coincidan con los filtros actuales."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Métricas del host"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Métricas del host",
|
||||
"enableProxmoxStats": "Habilitar estadísticas de Proxmox",
|
||||
"enableProxmoxStatsDesc": "Muestra una pestaña de estadísticas de Proxmox para este host con estadísticas en tiempo real del nodo, invitado, almacenamiento y clúster recopiladas a través de SSH.",
|
||||
"proxmoxStatsPollInterval": "Intervalo de sondeo (segundos)",
|
||||
"proxmoxStatsPollIntervalDesc": "Mínimo 15 segundos. Con qué frecuencia se actualizan las estadísticas del nodo Proxmox.",
|
||||
"proxmoxStatsNodeOverride": "Anulación del nombre del nodo",
|
||||
"proxmoxStatsNodeOverrideDesc": "Anular la detección automática del nombre del nodo Proxmox (detectado por defecto mediante el nombre de host).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Detectado automáticamente a partir del nombre de host.",
|
||||
"metricsCollectionLabel": "Recopilación de métricas",
|
||||
"enableMetricsLabel": "Habilitar métricas",
|
||||
"enableMetricsDesc": "Recopilar CPU, RAM, disco y otras métricas de este host.",
|
||||
"useGlobalMetrics": "Usar intervalo global",
|
||||
"useGlobalMetricsDesc": "Sobrescribir con el intervalo de métricas global del servidor.",
|
||||
"metricsIntervalS": "Intervalo de métricas (s)",
|
||||
"metricsIntervalDesc2": "Segundos entre instantáneas de métricas.",
|
||||
"excludedMountsLabel": "Monturas excluidas",
|
||||
"monitoredMountsLabel": "Rutas personalizadas monitorizadas",
|
||||
"monitoredMountsDesc": "Agregue rutas que no estén expuestas como montajes separados, incluidas las rutas de Home Assistant montadas mediante enlace, como /config.",
|
||||
"monitoredMountPathPlaceholder": "Ruta (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Etiqueta (opcional)",
|
||||
"addMonitoredMount": "Agregar ruta",
|
||||
"excludedMountsDesc": "Oculta puntos de montaje o tipos de sistema de archivos específicos (por ejemplo, nfs, cifs) del uso del disco y las alertas para este host.",
|
||||
"excludedMountsPlaceholder": "Ruta de montaje (/mnt/nas) o tipo de sistema de archivos (nfs, cifs)",
|
||||
"excludedMountsEmpty": "No se excluye ningún punto de montaje. Se muestran todos los sistemas de archivos detectados.",
|
||||
"addExcludedMount": "Agregar",
|
||||
"visibleWidgets": "Widgets visibles",
|
||||
"widgetsMovedToHostMetrics": "Ahora las tarjetas se añaden, organizan y redimensionan directamente en la pestaña Métricas del host. Abre Métricas del host para este host y usa Personalizar para elegir qué tarjetas se muestran.",
|
||||
"quickActionsLabel": "Acciones rápidas",
|
||||
"quickActionsToolbar": "Las acciones rápidas aparecen como botones en la barra de herramientas de Métricas del host para la ejecución de comandos con un solo clic.",
|
||||
"noQuickActions": "Aún no hay acciones rápidas.",
|
||||
"buttonLabel": "Etiqueta del botón",
|
||||
"selectSnippetPlaceholder": "Seleccionar fragmento...",
|
||||
"addActionBtn": "Añadir acción"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Métricas y alertas",
|
||||
"feature_metrics_desc": "Realiza un seguimiento del rendimiento de la CPU, la memoria y el disco duro a lo largo del tiempo, y recibe alertas cuando alguno falle."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Retención del historial de métricas",
|
||||
"metricsHistoryRetentionRange": "De 1 a 90 días",
|
||||
"days": "días"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Sin datos disponibles",
|
||||
"showCurrentValue": "Mostrar valor actual",
|
||||
"chartMetric": "Métrica",
|
||||
"metricRange": "Rango"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "Suoritin",
|
||||
"memory": "Muisti",
|
||||
"disk": "Levy",
|
||||
"network": "Verkko",
|
||||
"uptime": "Käyttöaika",
|
||||
"processes": "Prosessit",
|
||||
"available": "Saatavilla",
|
||||
"free": "Ilmainen",
|
||||
"connecting": "Yhdistetään...",
|
||||
"connectionFailed": "Palvelimeen ei saatu yhteyttä",
|
||||
"naCpus": "Ei saatavilla olevaa suoritinta",
|
||||
"cpuCores_one": "{{count}} Ydin",
|
||||
"cpuCores_other": "{{count}} Ytimet",
|
||||
"cpuUsage": "Suorittimen käyttö",
|
||||
"memoryUsage": "Muistin käyttö",
|
||||
"diskUsage": "Levyn käyttö",
|
||||
"selectFilesystem": "Valitse tiedostojärjestelmä",
|
||||
"temperature": "Lämpötila",
|
||||
"highestTemperature": "Korkein lämpötila",
|
||||
"primaryTemperatureSensor": "Ensisijainen anturi",
|
||||
"gpu": {
|
||||
"title": "Näytönohjain",
|
||||
"noDevice": "NVIDIA-näytönohjainta ei havaittu. Asenna NVIDIA-ajuri (se tarjoaa nvidia-smi-ajurin) nähdäksesi näytönohjaimen tiedot.",
|
||||
"driver": "Kuljettaja {{version}}",
|
||||
"utilization": "Käyttö",
|
||||
"memory": "VRAM-muisti",
|
||||
"temperature": "Lämpötila",
|
||||
"power": "Voima",
|
||||
"fan": "Tuuletin",
|
||||
"processes": "GPU-prosessit",
|
||||
"noProcesses": "Mikään prosessi ei käytä grafiikkasuoritinta"
|
||||
},
|
||||
"failedToFetchHostConfig": "Isännän määritysten nouto epäonnistui",
|
||||
"serverOffline": "Palvelin offline-tilassa",
|
||||
"cannotFetchMetrics": "Mittarien nouto offline-palvelimelta ei onnistu",
|
||||
"totpFailed": "TOTP-vahvistus epäonnistui",
|
||||
"noneAuthNotSupported": "Isäntämittarit eivät tue 'none'-todennustyyppiä.",
|
||||
"noHostSelected": "Ei valittua isäntää",
|
||||
"load": "Ladata",
|
||||
"systemInfo": "Järjestelmätiedot",
|
||||
"hostname": "Isäntänimi",
|
||||
"operatingSystem": "Käyttöjärjestelmä",
|
||||
"kernel": "Ydin",
|
||||
"seconds": "sekuntia",
|
||||
"networkInterfaces": "Verkkoliitännät",
|
||||
"noInterfacesFound": "Verkkoliitäntöjä ei löytynyt",
|
||||
"noProcessesFound": "Ei prosesseja",
|
||||
"processesTotal": "kokonais-",
|
||||
"processesRunning": "juokseminen",
|
||||
"loginStats": "SSH-kirjautumistilastot",
|
||||
"noRecentLoginData": "Ei viimeaikaisia kirjautumistietoja",
|
||||
"executingQuickAction": "Suoritetaan {{name}}...",
|
||||
"quickActionSuccess": "{{name}} suoritettu onnistuneesti",
|
||||
"quickActionFailed": "{{name}} epäonnistui",
|
||||
"quickActionError": "Suoritus epäonnistui {{name}}",
|
||||
"ports": {
|
||||
"title": "Kuunteluportit",
|
||||
"protocol": "Protokolla",
|
||||
"port": "Portti",
|
||||
"address": "Osoite",
|
||||
"process": "Käsitellä",
|
||||
"search": "Hakusatamat...",
|
||||
"allProtocols": "Kaikki",
|
||||
"noData": "Ei kuunteluporttien tietoja"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Palomuuri",
|
||||
"inactive": "Passiivinen",
|
||||
"policy": "Käytäntö",
|
||||
"rules": "säännöt",
|
||||
"noRules": "Ei sääntöjä tässä ketjussa",
|
||||
"noData": "Palomuuritietoja ei ole saatavilla",
|
||||
"action": "Toiminta",
|
||||
"protocol": "Proto",
|
||||
"port": "Portti",
|
||||
"source": "Lähde",
|
||||
"anywhere": "Missä tahansa",
|
||||
"chains": "ketjut"
|
||||
},
|
||||
"loadAvg": "Keskimääräinen lataus",
|
||||
"swap": "Vaihtaa",
|
||||
"architecture": "Arkkitehtuuri",
|
||||
"refresh": "Päivitä",
|
||||
"retry": "Yritä uudelleen",
|
||||
"customize": "Mukauta asettelua",
|
||||
"reset": "Nollaa",
|
||||
"tabLive": "Elää",
|
||||
"editModeInstructions": "Vedä kortteja järjestelläksesi niitä uudelleen, vedä alareunaa muuttaaksesi kokoa ja käytä leveyspainiketta muuttaaksesi kortin väliä. Lisää tai poista kortteja alla.",
|
||||
"managers": {
|
||||
"services": "Palvelut",
|
||||
"processInspector": "Prosessitarkastaja",
|
||||
"logViewer": "Lokikatseluohjelma",
|
||||
"cron": "Cron-työt",
|
||||
"packages": "Paketit",
|
||||
"ssl": "SSL-sertifikaatit",
|
||||
"firewall": "Palomuuri",
|
||||
"users": "Käyttäjät ja käyttöoikeudet",
|
||||
"healthCheck": "Terveystarkastukset",
|
||||
"diskBreakdown": "Levyn erittely",
|
||||
"systemdTimers": "Ajastimet",
|
||||
"topMemory": "Muistin mukaan huippu",
|
||||
"noData": "Ei tietoja",
|
||||
"sudoHint": "Aseta tälle isännälle sudo-salasana isäntäeditorissa ottaaksesi käyttöön etuoikeutetut toiminnot.",
|
||||
"filter": "Suodattaa...",
|
||||
"start": "Aloita",
|
||||
"stop": "Stop",
|
||||
"restart": "Käynnistä uudelleen",
|
||||
"actionDone": "{{name}} päivitetty",
|
||||
"actionFailed": "Toiminto epäonnistui",
|
||||
"signalSent": "Signaali lähetetään PID:lle {{pid}}",
|
||||
"killHint": "Napsauta: lopeta (SIGTERM). Napsauta hiiren kakkospainikkeella: pakota lopettaminen (SIGKILL).",
|
||||
"working": "Työskentely...",
|
||||
"update": "Päivittää",
|
||||
"upgradeAll": "Päivitä kaikki",
|
||||
"allUpToDate": "Kaikki on ajan tasalla",
|
||||
"save": "Tallentaa",
|
||||
"command": "Komento",
|
||||
"enabled": "Käytössä",
|
||||
"cronSaved": "Crontab päivitetty",
|
||||
"clients": "Asiakkaat",
|
||||
"dryRun": "Kuiva ajo",
|
||||
"renew": "Uudista",
|
||||
"noAcmeClient": "Tältä isännältä ei löytynyt ACME-asiakasohjelmaa (certbot tai acme.sh).",
|
||||
"addInputRule": "Lisää SYÖTTÖSääntö",
|
||||
"firewallWarning": "Muutokset ovat vain ajonaikaisia, kunnes ne pysyvät voimassa. Varo lukitsemasta itseäsi ulos.",
|
||||
"ruleApplied": "Sääntö sovellettu",
|
||||
"invalidPort": "Anna kelvollinen portti (1-65535)",
|
||||
"newUsername": "Uusi käyttäjätunnus",
|
||||
"addUser": "Lisätä",
|
||||
"deleteUser": "Poista käyttäjä",
|
||||
"noHealthChecks": "Ei vielä määritettyjä kuntotarkastuksia.",
|
||||
"follow": "Seuraa",
|
||||
"noLogData": "Ei lokitulostetta.",
|
||||
"tree": "Puu",
|
||||
"enableDisable": "Ota käyttöön / poista käytöstä käynnistyksen yhteydessä",
|
||||
"grantSudo": "Myönnä sudo",
|
||||
"revokeSudo": "Peruuta sudo",
|
||||
"sslIssueCert": "Myöntötodistus",
|
||||
"sslExpired": "Vanhentunut",
|
||||
"sslInDays": "{{days}}d:ssä",
|
||||
"sslNeedDomain": "Anna vähintään yksi verkkotunnus",
|
||||
"sslIssued": "Todistus myönnetty",
|
||||
"sslDomainsPlaceholder": "esimerkki.com, www.esimerkki.com",
|
||||
"sslHttpStandalone": "HTTP (erillinen)",
|
||||
"sslHttpWebroot": "HTTP (verkkojuuri)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "DNS-palveluntarjoaja (esim. cloudflare)",
|
||||
"sslIssueHint": "DNS-palveluntarjoajan tunnistetietojen on oltava jo määritettyinä isännälle.",
|
||||
"sslRevoke": "Peruuta varmenne",
|
||||
"sslRevoked": "Varmenne peruutettu",
|
||||
"sslRevokeConfirm": "Peruuttaa ja poistaa varmenne \"{{name}}\"? Tätä ei voi perua.",
|
||||
"healthRun": "Juokse",
|
||||
"healthName": "Nimi",
|
||||
"healthTarget": "Isäntä / osoite",
|
||||
"healthAddCheck": "Lisää shekki",
|
||||
"healthSaved": "Terveystarkastukset tallennettu",
|
||||
"healthMissingFields": "Jokaisella tarkistuksella on oltava nimi ja kohde",
|
||||
"logFile": "Tiedosto",
|
||||
"logUnit": "Yksikkö",
|
||||
"logCustomPath": "Mukautettu polku /var/log-hakemistossa (valinnainen)",
|
||||
"logGrep": "Suodata viivat...",
|
||||
"firewallPersist": "Säilytä säännöt",
|
||||
"firewallPersisted": "Palomuurisäännöt säilyivät",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Tailscale",
|
||||
"wgNotInstalled": "WireGuardia ei ole asennettu tälle koneelle",
|
||||
"wgNoInterfaces": "Ei WireGuard-liitäntöjä määritettynä",
|
||||
"wgInterfaceUp": "Tuo esiin",
|
||||
"wgInterfaceDown": "Alentaa",
|
||||
"wgBringingUp": "Tuodaan {{name}} esiin...",
|
||||
"wgBringingDown": "Lasketaan {{name}} alas...",
|
||||
"wgInterfaceUpDone": "{{name}} on ylhäällä",
|
||||
"wgInterfaceDownDone": "{{name}} on alhaalla",
|
||||
"wgListenPort": "Portti",
|
||||
"wgPublicKey": "Julkinen avain",
|
||||
"wgEndpoint": "Päätepiste",
|
||||
"wgAllowedIPs": "Sallitut IP-osoitteet",
|
||||
"wgLastHandshake": "Viimeinen kädenpuristus",
|
||||
"wgHandshakeNever": "Ei koskaan",
|
||||
"wgTransfer": "Siirtää",
|
||||
"tsNotInstalled": "Tailscalea ei ole asennettu tälle isännälle",
|
||||
"tsRunning": "Juoksu",
|
||||
"tsStopped": "Pysähtynyt",
|
||||
"tsEnable": "Yhdistä",
|
||||
"tsDisable": "Katkaise yhteys",
|
||||
"tsEnabling": "Yhdistetään Tailscaleen...",
|
||||
"tsDisabling": "Yhteyden katkaiseminen Tailscaleen...",
|
||||
"tsEnabled": "Tailscale yhdistetty",
|
||||
"tsDisabled": "Tailscale irrotettu",
|
||||
"tsIPs": "Tailscale IP-osoitteet",
|
||||
"tsPeers": "Vertaiset",
|
||||
"tsOnline": "Verkossa",
|
||||
"tsOffline": "Offline-tilassa",
|
||||
"tsExitNode": "Poistumissolmu",
|
||||
"tsExitNodeActive": "Poistumissolmu aktiivinen",
|
||||
"tsHostname": "Isäntänimi"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Mittarihistoria",
|
||||
"historySuffix": "Historia",
|
||||
"cpuMemoryDisk": "CPU / Muisti / Levy",
|
||||
"network": "Verkko",
|
||||
"download": "Vastaanotto",
|
||||
"upload": "Teksas",
|
||||
"noData": "Tältä aikaväliltä ei ole saatavilla historiatietoja.",
|
||||
"custom": "Mukautettu",
|
||||
"to": "että",
|
||||
"apply": "Käytä",
|
||||
"viewHistory": "Näytä historia"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Proxmox-tilastot",
|
||||
"cpuUsage": "Suorittimen käyttö",
|
||||
"memoryUsage": "Muistin käyttö",
|
||||
"diskUsage": "Levyn käyttö",
|
||||
"networkInterfaces": "Verkkoliitännät",
|
||||
"uptime": "Käyttöaika",
|
||||
"systemInfo": "Järjestelmätiedot",
|
||||
"guestsSummary": "Vieraat",
|
||||
"storagePools": "Varastoaltaat",
|
||||
"clusterHealth": "Klusterin terveys",
|
||||
"cpuCores_one": "{{count}} Ydin",
|
||||
"cpuCores_other": "{{count}} Ytimet",
|
||||
"used": "Käytetty",
|
||||
"total": "Kokonais",
|
||||
"hostname": "Isäntänimi",
|
||||
"kernel": "Ydin",
|
||||
"pveVersion": "PVE-versio",
|
||||
"name": "Nimi",
|
||||
"status": "Status",
|
||||
"type": "Tyyppi",
|
||||
"cpu": "Suoritin",
|
||||
"mem": "Mem",
|
||||
"disk": "Levy",
|
||||
"running": "Juoksu",
|
||||
"stopped": "Pysähtynyt",
|
||||
"guestCounts": "{{running}}/{{total}} käynnissä",
|
||||
"inactive": "Passiivinen",
|
||||
"notClustered": "Itsenäinen solmu (ei osa klusteria)",
|
||||
"quorate": "Päätösvaltainen",
|
||||
"notQuorate": "Ei päätöslauselma",
|
||||
"nodeOnline": "Verkossa",
|
||||
"nodeOffline": "Offline-tilassa",
|
||||
"noHostSelected": "Ei valittua isäntää",
|
||||
"pveshNotFound": "pvesh-solmua ei löytynyt - onko tämä Proxmox-solmu?",
|
||||
"nodeDetectionFailed": "Kelvollista Proxmox-solmun nimeä ei voitu määrittää.",
|
||||
"connecting": "Yhdistetään...",
|
||||
"connectionFailed": "Yhteyden muodostaminen Proxmox-solmuun epäonnistui",
|
||||
"refresh": "Päivitä",
|
||||
"searchGuests": "Hae vieraita...",
|
||||
"filterAll": "Kaikki",
|
||||
"filterVm": "Virtuaalikone",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "Tältä solmulta ei löytynyt virtuaalikoneita tai LXC-säilöjä.",
|
||||
"noGuestsMatch": "Yksikään vieras ei vastaa nykyisiä suodattimia."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Isännän mittarit"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Isännän mittarit",
|
||||
"enableProxmoxStats": "Ota Proxmox-tilastot käyttöön",
|
||||
"enableProxmoxStatsDesc": "Näytä tämän isännän Proxmox-tilastot -välilehti, jossa on SSH:n kautta kerätyt reaaliaikaiset solmu-, vieras-, tallennus- ja klusteritilastot.",
|
||||
"proxmoxStatsPollInterval": "Kyselyväli (sekuntia)",
|
||||
"proxmoxStatsPollIntervalDesc": "Vähintään 15 sekuntia. Kuinka usein Proxmox-solmun tilastot päivitetään.",
|
||||
"proxmoxStatsNodeOverride": "Solmun nimen ohitus",
|
||||
"proxmoxStatsNodeOverrideDesc": "Ohita Proxmox-solmun nimen automaattinen tunnistus (tunnistetaan oletusarvoisesti isäntänimen kautta).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Automaattisesti tunnistettu isäntänimestä",
|
||||
"metricsCollectionLabel": "Mittarikokoelma",
|
||||
"enableMetricsLabel": "Ota mittarit käyttöön",
|
||||
"enableMetricsDesc": "Kerää prosessorin, RAMin, levyn ja muita mittareita tältä isännältä",
|
||||
"useGlobalMetrics": "Käytä globaalia intervallia",
|
||||
"useGlobalMetricsDesc": "Ohita palvelimen laajuisella mittarivälillä",
|
||||
"metricsIntervalS": "Mittariväli (s)",
|
||||
"metricsIntervalDesc2": "Sekunteja mittareiden tilannevedosten välillä",
|
||||
"excludedMountsLabel": "Poissuljetut kiinnikkeet",
|
||||
"monitoredMountsLabel": "Mukautetut valvotut polut",
|
||||
"monitoredMountsDesc": "Lisää polut, joita ei näytetä erillisinä liitoskohtina, mukaan lukien sidotut Home Assistant -polut, kuten /config.",
|
||||
"monitoredMountPathPlaceholder": "Polku (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Tarra (valinnainen)",
|
||||
"addMonitoredMount": "Lisää polku",
|
||||
"excludedMountsDesc": "Piilota tietyt liitoskohdat tai tiedostojärjestelmätyypit (esim. nfs, cifs) levyn käytöstä ja hälytyksistä tälle isännälle.",
|
||||
"excludedMountsPlaceholder": "Liitospolku (/mnt/nas) tai tiedostojärjestelmän tyyppi (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Ei poissuljettuja liitäntöjä. Kaikki havaitut tiedostojärjestelmät näytetään.",
|
||||
"addExcludedMount": "Lisätä",
|
||||
"visibleWidgets": "Näkyvät widgetit",
|
||||
"widgetsMovedToHostMetrics": "Kortteja lisätään, järjestetään ja niiden kokoa muutetaan nyt suoraan Isännän mittarit -välilehdellä. Avaa tämän isännän Isännän mittarit ja valitse näytettävät kortit Mukauta-toiminnolla.",
|
||||
"quickActionsLabel": "Pikatoiminnot",
|
||||
"quickActionsToolbar": "Pikatoiminnot näkyvät painikkeina isäntämetriikkatyökalurivillä komentojen suorittamista varten yhdellä napsautuksella.",
|
||||
"noQuickActions": "Ei vielä nopeita toimia.",
|
||||
"buttonLabel": "Painikkeen nimi",
|
||||
"selectSnippetPlaceholder": "Valitse katkelma...",
|
||||
"addActionBtn": "Lisää toiminto"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Mittarit ja hälytykset",
|
||||
"feature_metrics_desc": "Seuraa suorittimen, muistin ja levyn toimintaa ajan kuluessa ja saat ilmoituksen, kun ne vikaantuvat."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Mittarihistorian säilytys",
|
||||
"metricsHistoryRetentionRange": "1–90 päivää",
|
||||
"days": "päivää"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Ei tietoja saatavilla",
|
||||
"showCurrentValue": "Näytä nykyinen arvo",
|
||||
"chartMetric": "Metrinen",
|
||||
"metricRange": "Alue"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "Mémoire",
|
||||
"disk": "Disque",
|
||||
"network": "Réseau",
|
||||
"uptime": "Uptime",
|
||||
"processes": "Processus",
|
||||
"available": "Disponible",
|
||||
"free": "Libre",
|
||||
"connecting": "Connexion en cours…",
|
||||
"connectionFailed": "Échec de la connexion au serveur",
|
||||
"naCpus": "CPU(s) N/A",
|
||||
"cpuCores_one": "{{count}} cœur",
|
||||
"cpuCores_other": "{{count}} cœurs",
|
||||
"cpuUsage": "Utilisation CPU",
|
||||
"memoryUsage": "Utilisation mémoire",
|
||||
"diskUsage": "Utilisation disque",
|
||||
"selectFilesystem": "Sélectionner le système de fichiers",
|
||||
"temperature": "Température",
|
||||
"highestTemperature": "Température maximale",
|
||||
"primaryTemperatureSensor": "Capteur principal",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "Aucune carte graphique NVIDIA n'a été détectée. Installez le pilote NVIDIA (qui fournit nvidia-smi) pour consulter les métriques du GPU.",
|
||||
"driver": "Conducteur {{version}}",
|
||||
"utilization": "Utilisation",
|
||||
"memory": "VRAM",
|
||||
"temperature": "Temp",
|
||||
"power": "Pouvoir",
|
||||
"fan": "Ventilateur",
|
||||
"processes": "Processus GPU",
|
||||
"noProcesses": "Aucun processus n'utilise le GPU."
|
||||
},
|
||||
"failedToFetchHostConfig": "Échec de la récupération de la configuration de l'hôte",
|
||||
"serverOffline": "Serveur hors ligne",
|
||||
"cannotFetchMetrics": "Impossible de récupérer les métriques du serveur hors ligne",
|
||||
"totpFailed": "Échec de la vérification TOTP",
|
||||
"noneAuthNotSupported": "Les métriques de l'hôte ne prennent pas en charge le type d'authentification 'none'.",
|
||||
"noHostSelected": "Aucun hôte sélectionné",
|
||||
"load": "Charge",
|
||||
"systemInfo": "Informations système",
|
||||
"hostname": "Nom d'hôte",
|
||||
"operatingSystem": "Système d'exploitation",
|
||||
"kernel": "Noyau",
|
||||
"seconds": "secondes",
|
||||
"networkInterfaces": "Interfaces réseau",
|
||||
"noInterfacesFound": "Aucune interface réseau trouvée",
|
||||
"noProcessesFound": "Aucun processus trouvé",
|
||||
"processesTotal": "total",
|
||||
"processesRunning": "en cours",
|
||||
"loginStats": "Statistiques de connexion SSH",
|
||||
"noRecentLoginData": "Aucune donnée de connexion récente",
|
||||
"executingQuickAction": "Exécution de {{name}}...",
|
||||
"quickActionSuccess": "{{name}} terminé avec succès",
|
||||
"quickActionFailed": "Échec de {{name}}",
|
||||
"quickActionError": "Échec de l'exécution de {{name}}",
|
||||
"ports": {
|
||||
"title": "Ports en écoute",
|
||||
"protocol": "Protocole",
|
||||
"port": "Port",
|
||||
"address": "Adresse",
|
||||
"process": "Processus",
|
||||
"search": "Rechercher des ports...",
|
||||
"allProtocols": "Tous",
|
||||
"noData": "Aucune donnée de ports en écoute"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Pare-feu",
|
||||
"inactive": "Inactif",
|
||||
"policy": "Politique",
|
||||
"rules": "règles",
|
||||
"noRules": "Aucune règle dans cette chaîne",
|
||||
"noData": "Aucune donnée de pare-feu disponible",
|
||||
"action": "Action",
|
||||
"protocol": "Proto",
|
||||
"port": "Port",
|
||||
"source": "Source",
|
||||
"anywhere": "Partout",
|
||||
"chains": "chaînes"
|
||||
},
|
||||
"loadAvg": "Charge moyenne",
|
||||
"swap": "Swap",
|
||||
"architecture": "Architecture",
|
||||
"refresh": "Actualiser",
|
||||
"retry": "Réessayer",
|
||||
"customize": "Personnaliser la disposition",
|
||||
"reset": "Réinitialiser",
|
||||
"tabLive": "En direct",
|
||||
"editModeInstructions": "Faites glisser les cartes pour les réorganiser, faites glisser le bord inférieur pour les redimensionner, et utilisez le bouton de largeur pour modifier l'étendue d'une carte. Ajoutez ou retirez des cartes ci-dessous.",
|
||||
"managers": {
|
||||
"services": "Services",
|
||||
"processInspector": "Inspecteur de processus",
|
||||
"logViewer": "Visualiseur de logs",
|
||||
"cron": "Tâches Cron",
|
||||
"packages": "Paquets",
|
||||
"ssl": "Certificats SSL",
|
||||
"firewall": "Pare-feu",
|
||||
"users": "Utilisateurs et permissions",
|
||||
"healthCheck": "Contrôles de santé",
|
||||
"diskBreakdown": "Ventilation du disque",
|
||||
"systemdTimers": "Timers",
|
||||
"topMemory": "Top mémoire",
|
||||
"noData": "Aucune donnée",
|
||||
"sudoHint": "Définissez un mot de passe sudo pour cet hôte dans l'éditeur d'hôte pour activer les actions privilégiées.",
|
||||
"filter": "Filtrer...",
|
||||
"start": "Démarrer",
|
||||
"stop": "Arrêter",
|
||||
"restart": "Redémarrer",
|
||||
"actionDone": "{{name}} mis à jour",
|
||||
"actionFailed": "Action échouée",
|
||||
"signalSent": "Signal envoyé au PID {{pid}}",
|
||||
"killHint": "Clic : terminer (SIGTERM). Clic droit : forcer l'arrêt (SIGKILL).",
|
||||
"working": "En cours...",
|
||||
"update": "Mettre à jour",
|
||||
"upgradeAll": "Tout mettre à niveau",
|
||||
"allUpToDate": "Tout est à jour",
|
||||
"save": "Enregistrer",
|
||||
"command": "Commande",
|
||||
"enabled": "Activé",
|
||||
"cronSaved": "Crontab mis à jour",
|
||||
"clients": "Clients",
|
||||
"dryRun": "Simulation",
|
||||
"renew": "Renouveler",
|
||||
"noAcmeClient": "Aucun client ACME (certbot ou acme.sh) trouvé sur cet hôte.",
|
||||
"addInputRule": "Ajouter une règle INPUT",
|
||||
"firewallWarning": "Les modifications sont appliquées uniquement en mémoire jusqu'à leur persistance. Veillez à ne pas vous bloquer l'accès.",
|
||||
"ruleApplied": "Règle appliquée",
|
||||
"invalidPort": "Saisissez un port valide (1-65535)",
|
||||
"newUsername": "Nouveau nom d'utilisateur",
|
||||
"addUser": "Ajouter",
|
||||
"deleteUser": "Supprimer l'utilisateur",
|
||||
"noHealthChecks": "Aucune vérification d'état configurée pour le moment.",
|
||||
"follow": "Suivre",
|
||||
"noLogData": "Aucun journal disponible.",
|
||||
"tree": "Arborescence",
|
||||
"enableDisable": "Activer / désactiver au démarrage",
|
||||
"grantSudo": "Accorder sudo",
|
||||
"revokeSudo": "Révoquer sudo",
|
||||
"sslIssueCert": "Émettre le certificat",
|
||||
"sslExpired": "Expiré",
|
||||
"sslInDays": "dans {{days}} j",
|
||||
"sslNeedDomain": "Saisissez au moins un domaine",
|
||||
"sslIssued": "Certificat émis",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (autonome)",
|
||||
"sslHttpWebroot": "HTTP (webroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "Fournisseur DNS (ex. cloudflare)",
|
||||
"sslIssueHint": "Les identifiants du fournisseur DNS doivent déjà être configurés sur l’hôte.",
|
||||
"sslRevoke": "Révoquer le certificat",
|
||||
"sslRevoked": "Certificat révoqué",
|
||||
"sslRevokeConfirm": "Révoquer et supprimer le certificat « {{name}} » ? Cette action est irréversible.",
|
||||
"healthRun": "Exécuter",
|
||||
"healthName": "Nom",
|
||||
"healthTarget": "Hôte / adresse",
|
||||
"healthAddCheck": "Ajouter une vérification",
|
||||
"healthSaved": "Vérifications de santé enregistrées",
|
||||
"healthMissingFields": "Chaque vérification nécessite un nom et une cible",
|
||||
"logFile": "Fichier",
|
||||
"logUnit": "Unité",
|
||||
"logCustomPath": "Chemin personnalisé sous /var/log (optionnel)",
|
||||
"logGrep": "Filtrer les lignes...",
|
||||
"firewallPersist": "Persister les règles",
|
||||
"firewallPersisted": "Règles du pare-feu rendues persistantes",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Tailscale",
|
||||
"wgNotInstalled": "WireGuard n’est pas installé sur cet hôte",
|
||||
"wgNoInterfaces": "Aucune interface WireGuard configurée",
|
||||
"wgInterfaceUp": "Activer",
|
||||
"wgInterfaceDown": "Désactiver",
|
||||
"wgBringingUp": "Activation de {{name}}...",
|
||||
"wgBringingDown": "Désactivation de {{name}}...",
|
||||
"wgInterfaceUpDone": "{{name}} est activé",
|
||||
"wgInterfaceDownDone": "{{name}} est désactivé",
|
||||
"wgListenPort": "Port",
|
||||
"wgPublicKey": "Clé publique",
|
||||
"wgEndpoint": "Point de terminaison",
|
||||
"wgAllowedIPs": "IP autorisées",
|
||||
"wgLastHandshake": "Dernière poignée de main",
|
||||
"wgHandshakeNever": "Jamais",
|
||||
"wgTransfer": "Transfert",
|
||||
"tsNotInstalled": "Tailscale n’est pas installé sur cet hôte",
|
||||
"tsRunning": "Actif",
|
||||
"tsStopped": "Arrêté",
|
||||
"tsEnable": "Connecter",
|
||||
"tsDisable": "Déconnecter",
|
||||
"tsEnabling": "Connexion à Tailscale...",
|
||||
"tsDisabling": "Déconnexion de Tailscale...",
|
||||
"tsEnabled": "Tailscale connecté",
|
||||
"tsDisabled": "Tailscale déconnecté",
|
||||
"tsIPs": "IPs Tailscale",
|
||||
"tsPeers": "Pairs",
|
||||
"tsOnline": "En ligne",
|
||||
"tsOffline": "Hors ligne",
|
||||
"tsExitNode": "Nœud de sortie",
|
||||
"tsExitNodeActive": "Nœud de sortie actif",
|
||||
"tsHostname": "Nom d'hôte"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Historique des métriques",
|
||||
"historySuffix": "Historique",
|
||||
"cpuMemoryDisk": "CPU / Mémoire / Disque",
|
||||
"network": "Réseau",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "Aucune donnée d'historique disponible pour cette plage de temps.",
|
||||
"custom": "Personnalisé",
|
||||
"to": "à",
|
||||
"apply": "Appliquer",
|
||||
"viewHistory": "Voir l'historique"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Statistiques Proxmox",
|
||||
"cpuUsage": "Utilisation du processeur",
|
||||
"memoryUsage": "Utilisation de la mémoire",
|
||||
"diskUsage": "Utilisation du disque",
|
||||
"networkInterfaces": "Interfaces réseau",
|
||||
"uptime": "Disponibilité",
|
||||
"systemInfo": "Informations système",
|
||||
"guestsSummary": "Les invités",
|
||||
"storagePools": "Piscines de stockage",
|
||||
"clusterHealth": "Cluster Health",
|
||||
"cpuCores_one": "{{count}} Noyau",
|
||||
"cpuCores_other": "{{count}} Noyaux",
|
||||
"used": "Utilisé",
|
||||
"total": "Total",
|
||||
"hostname": "Nom d'hôte",
|
||||
"kernel": "Noyau",
|
||||
"pveVersion": "Version JcE",
|
||||
"name": "Nom",
|
||||
"status": "Statut",
|
||||
"type": "Taper",
|
||||
"cpu": "processeur",
|
||||
"mem": "Mem",
|
||||
"disk": "Disque",
|
||||
"running": "En cours d'exécution",
|
||||
"stopped": "Arrêté",
|
||||
"guestCounts": "{{running}}/{{total}} en cours",
|
||||
"inactive": "Inactif",
|
||||
"notClustered": "Nœud autonome (ne faisant pas partie d'un cluster)",
|
||||
"quorate": "Quaire",
|
||||
"notQuorate": "Pas de quorum",
|
||||
"nodeOnline": "En ligne",
|
||||
"nodeOffline": "Hors ligne",
|
||||
"noHostSelected": "Aucun hôte sélectionné",
|
||||
"pveshNotFound": "pvesh introuvable - s'agit-il d'un nœud Proxmox ?",
|
||||
"nodeDetectionFailed": "Impossible de déterminer un nom de nœud Proxmox valide",
|
||||
"connecting": "De liaison...",
|
||||
"connectionFailed": "Échec de la connexion au nœud Proxmox",
|
||||
"refresh": "Rafraîchir",
|
||||
"searchGuests": "Rechercher des invités...",
|
||||
"filterAll": "Tous",
|
||||
"filterVm": "VM",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "Aucune machine virtuelle ni conteneur LXC n'a été trouvé sur ce nœud.",
|
||||
"noGuestsMatch": "Aucun invité ne correspond aux filtres actuels."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Métriques de l'hôte"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Métriques de l'hôte",
|
||||
"enableProxmoxStats": "Activer les statistiques Proxmox",
|
||||
"enableProxmoxStatsDesc": "Afficher un onglet Statistiques Proxmox pour cet hôte avec des statistiques en direct sur les nœuds, les invités, le stockage et le cluster collectées via SSH.",
|
||||
"proxmoxStatsPollInterval": "Intervalle d'interrogation (secondes)",
|
||||
"proxmoxStatsPollIntervalDesc": "Minimum 15 secondes. Fréquence d'actualisation des statistiques du nœud Proxmox.",
|
||||
"proxmoxStatsNodeOverride": "Remplacement du nom du nœud",
|
||||
"proxmoxStatsNodeOverrideDesc": "Désactiver la détection automatique du nom du nœud Proxmox (détecté par défaut via le nom d'hôte).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Détection automatique à partir du nom d'hôte",
|
||||
"metricsCollectionLabel": "Collecte de métriques",
|
||||
"enableMetricsLabel": "Activer les métriques",
|
||||
"enableMetricsDesc": "Collecter les métriques CPU, RAM, disque et autres de cet hôte",
|
||||
"useGlobalMetrics": "Utiliser l'intervalle global",
|
||||
"useGlobalMetricsDesc": "Remplacer par l'intervalle de métriques défini à l'échelle du serveur",
|
||||
"metricsIntervalS": "Intervalle de métriques (s)",
|
||||
"metricsIntervalDesc2": "Secondes entre les instantanés de métriques",
|
||||
"excludedMountsLabel": "Supports exclus",
|
||||
"monitoredMountsLabel": "Chemins surveillés personnalisés",
|
||||
"monitoredMountsDesc": "Ajoutez les chemins qui ne sont pas exposés en tant que points de montage séparés, y compris les chemins Home Assistant montés par liaison tels que /config.",
|
||||
"monitoredMountPathPlaceholder": "Chemin (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Étiquette (facultatif)",
|
||||
"addMonitoredMount": "Ajouter un chemin",
|
||||
"excludedMountsDesc": "Masquer certains points de montage ou types de systèmes de fichiers (par exemple nfs, cifs) des données d'utilisation du disque et des alertes pour cet hôte.",
|
||||
"excludedMountsPlaceholder": "Chemin de montage (/mnt/nas) ou type de système de fichiers (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Aucun point de montage n'est exclu. Tous les systèmes de fichiers détectés sont affichés.",
|
||||
"addExcludedMount": "Ajouter",
|
||||
"visibleWidgets": "Widgets visibles",
|
||||
"widgetsMovedToHostMetrics": "Les cartes sont désormais ajoutées, organisées et redimensionnées directement dans l'onglet Métriques de l'hôte. Ouvrez les métriques de cet hôte et utilisez Personnaliser pour choisir les cartes à afficher.",
|
||||
"quickActionsLabel": "Actions rapides",
|
||||
"quickActionsToolbar": "Les actions rapides apparaissent sous forme de boutons dans la barre d'outils Métriques de l'hôte pour une exécution en un clic.",
|
||||
"noQuickActions": "Aucune action rapide pour le moment.",
|
||||
"buttonLabel": "Étiquette du bouton",
|
||||
"selectSnippetPlaceholder": "Sélectionner un snippet...",
|
||||
"addActionBtn": "Ajouter une action"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Métriques et alertes",
|
||||
"feature_metrics_desc": "Surveillez l'évolution du processeur, de la mémoire et du disque au fil du temps et recevez une alerte en cas de défaillance."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Rétention de l'historique des métriques",
|
||||
"metricsHistoryRetentionRange": "1 à 90 jours",
|
||||
"days": "jours"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Aucune donnée disponible",
|
||||
"showCurrentValue": "Afficher la valeur actuelle",
|
||||
"chartMetric": "Métrique",
|
||||
"metricRange": "Plage"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "מעבד",
|
||||
"memory": "זֵכֶר",
|
||||
"disk": "דִיסק",
|
||||
"network": "רֶשֶׁת",
|
||||
"uptime": "זמן פעולה",
|
||||
"processes": "תהליכים",
|
||||
"available": "זָמִין",
|
||||
"free": "לְשַׁחְרֵר",
|
||||
"connecting": "מְקַשֵׁר...",
|
||||
"connectionFailed": "נכשלה ההתחברות לשרת",
|
||||
"naCpus": "מעבדים לא רלוונטיים",
|
||||
"cpuCores_one": "{{count}} ליבה",
|
||||
"cpuCores_other": "{{count}} ליבות",
|
||||
"cpuUsage": "שימוש במעבד",
|
||||
"memoryUsage": "שימוש בזיכרון",
|
||||
"diskUsage": "שימוש בדיסק",
|
||||
"selectFilesystem": "בחירת מערכת קבצים",
|
||||
"temperature": "טֶמפֶּרָטוּרָה",
|
||||
"highestTemperature": "הטמפרטורה הגבוהה ביותר",
|
||||
"primaryTemperatureSensor": "חיישן ראשי",
|
||||
"gpu": {
|
||||
"title": "כרטיס מסך",
|
||||
"noDevice": "לא זוהה כרטיס מסך של NVIDIA. התקן את מנהל ההתקן של NVIDIA (הוא מספק nvidia-smi) כדי לראות את מדדי הכרטיס המסך.",
|
||||
"driver": "נהג {{version}}",
|
||||
"utilization": "ניצול",
|
||||
"memory": "זיכרון RAM",
|
||||
"temperature": "טמפ'",
|
||||
"power": "כּוֹחַ",
|
||||
"fan": "מְנִיפָה",
|
||||
"processes": "תהליכי GPU",
|
||||
"noProcesses": "אף תהליכים לא משתמשים ב-GPU"
|
||||
},
|
||||
"failedToFetchHostConfig": "נכשל באחזור תצורת המארח",
|
||||
"serverOffline": "שרת לא מקוון",
|
||||
"cannotFetchMetrics": "לא ניתן לאחזר מדדים משרת לא מקוון",
|
||||
"totpFailed": "אימות TOTP נכשל",
|
||||
"noneAuthNotSupported": "Host Metrics אינו תומך בסוג אימות 'ללא'.",
|
||||
"noHostSelected": "לא נבחר מארח",
|
||||
"load": "לִטעוֹן",
|
||||
"systemInfo": "מידע מערכת",
|
||||
"hostname": "שם מארח",
|
||||
"operatingSystem": "מַעֲרֶכֶת הַפעָלָה",
|
||||
"kernel": "גַרעִין",
|
||||
"seconds": "שניות",
|
||||
"networkInterfaces": "ממשקי רשת",
|
||||
"noInterfacesFound": "לא נמצאו ממשקי רשת",
|
||||
"noProcessesFound": "לא נמצאו תהליכים",
|
||||
"processesTotal": "סַך הַכֹּל",
|
||||
"processesRunning": "רִיצָה",
|
||||
"loginStats": "סטטיסטיקות כניסה ל-SSH",
|
||||
"noRecentLoginData": "אין נתוני התחברות אחרונים",
|
||||
"executingQuickAction": "מבצע {{name}}...",
|
||||
"quickActionSuccess": "{{name}} הושלם בהצלחה",
|
||||
"quickActionFailed": "{{name}} נכשל",
|
||||
"quickActionError": "נכשל בביצוע {{name}}",
|
||||
"ports": {
|
||||
"title": "יציאות האזנה",
|
||||
"protocol": "פּרוֹטוֹקוֹל",
|
||||
"port": "נָמָל",
|
||||
"address": "כְּתוֹבֶת",
|
||||
"process": "תַהֲלִיך",
|
||||
"search": "חיפוש פורטים...",
|
||||
"allProtocols": "כֹּל",
|
||||
"noData": "אין נתוני יציאות האזנה"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "חומת אש",
|
||||
"inactive": "לֹא פָּעִיל",
|
||||
"policy": "מְדִינִיוּת",
|
||||
"rules": "כללים",
|
||||
"noRules": "אין חוקים בשרשרת הזו",
|
||||
"noData": "אין נתוני חומת אש זמינים",
|
||||
"action": "פְּעוּלָה",
|
||||
"protocol": "פרוטו",
|
||||
"port": "נָמָל",
|
||||
"source": "מָקוֹר",
|
||||
"anywhere": "בְּכָל מָקוֹם",
|
||||
"chains": "שרשראות"
|
||||
},
|
||||
"loadAvg": "טען ממוצע",
|
||||
"swap": "לְהַחלִיף",
|
||||
"architecture": "אַדְרִיכָלוּת",
|
||||
"refresh": "לְרַעֲנֵן",
|
||||
"retry": "נסה שוב",
|
||||
"customize": "התאמה אישית של הפריסה",
|
||||
"reset": "אִתחוּל",
|
||||
"tabLive": "לִחיוֹת",
|
||||
"editModeInstructions": "גרור כרטיסים כדי לסדר מחדש, גרור את הקצה התחתון כדי לשנות את הגודל, והשתמש בלחצן הרוחב כדי לשנות את טווח הכרטיס. הוסף או הסר כרטיסים למטה.",
|
||||
"managers": {
|
||||
"services": "שירותים",
|
||||
"processInspector": "מפקח תהליכים",
|
||||
"logViewer": "מציג יומנים",
|
||||
"cron": "עבודות קרון",
|
||||
"packages": "חבילות",
|
||||
"ssl": "תעודות SSL",
|
||||
"firewall": "חומת אש",
|
||||
"users": "משתמשים והרשאות",
|
||||
"healthCheck": "בדיקות בריאות",
|
||||
"diskBreakdown": "פירוט דיסק",
|
||||
"systemdTimers": "טיימרים",
|
||||
"topMemory": "מובילים לפי זיכרון",
|
||||
"noData": "אין נתונים",
|
||||
"sudoHint": "הגדר סיסמת sudo עבור מארח זה בעורך המארחים כדי לאפשר פעולות הרשאות.",
|
||||
"filter": "לְסַנֵן...",
|
||||
"start": "הַתחָלָה",
|
||||
"stop": "לְהַפְסִיק",
|
||||
"restart": "הפעלה מחדש",
|
||||
"actionDone": "{{name}} updated",
|
||||
"actionFailed": "הפעולה נכשלה",
|
||||
"signalSent": "אות שנשלח ל-PID {{pid}}",
|
||||
"killHint": "לחיצה: סיום (SIGTERM). לחיצה ימנית: כיבוי בכוח (SIGKILL).",
|
||||
"working": "עובד...",
|
||||
"update": "לְעַדְכֵּן",
|
||||
"upgradeAll": "שדרגו הכל",
|
||||
"allUpToDate": "הכל מעודכן",
|
||||
"save": "לְהַצִיל",
|
||||
"command": "פְּקוּדָה",
|
||||
"enabled": "מופעל",
|
||||
"cronSaved": "קרונטאב עודכן",
|
||||
"clients": "לקוחות",
|
||||
"dryRun": "ריצה יבשה",
|
||||
"renew": "לְחַדֵשׁ",
|
||||
"noAcmeClient": "לא נמצא לקוח ACME (certbot או acme.sh) בשרת זה.",
|
||||
"addInputRule": "הוסף כלל INPUT",
|
||||
"firewallWarning": "שינויים הם בזמן ריצה בלבד עד שהם מתמשכים. היזהרו לא לנעול את עצמכם מחוץ למערכת.",
|
||||
"ruleApplied": "כלל שהוחל",
|
||||
"invalidPort": "הזן פורט תקין (1-65535)",
|
||||
"newUsername": "שם משתמש חדש",
|
||||
"addUser": "לְהוֹסִיף",
|
||||
"deleteUser": "מחיקת משתמש",
|
||||
"noHealthChecks": "עדיין לא הוגדרו בדיקות תקינות.",
|
||||
"follow": "לַעֲקוֹב",
|
||||
"noLogData": "אין פלט יומן.",
|
||||
"tree": "עֵץ",
|
||||
"enableDisable": "הפעלה/השבתה בעת האתחול",
|
||||
"grantSudo": "גרנט סודו",
|
||||
"revokeSudo": "בטל את הסודו",
|
||||
"sslIssueCert": "הנפקת תעודה",
|
||||
"sslExpired": "פג תוקף",
|
||||
"sslInDays": "ב- {{days}}ד'",
|
||||
"sslNeedDomain": "הזן לפחות דומיין אחד",
|
||||
"sslIssued": "תעודה שהונפקה",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (עצמאי)",
|
||||
"sslHttpWebroot": "HTTP (שורש רשת)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "ספק DNS (למשל cloudflare)",
|
||||
"sslIssueHint": "יש להגדיר את פרטי הגישה של ספק ה-DNS כבר במארח.",
|
||||
"sslRevoke": "בטל את האישור",
|
||||
"sslRevoked": "התעודה בוטלה",
|
||||
"sslRevokeConfirm": "לבטל ולהסיר את האישור \"{{name}}\"? לא ניתן לבטל פעולה זו.",
|
||||
"healthRun": "לָרוּץ",
|
||||
"healthName": "שֵׁם",
|
||||
"healthTarget": "מארח / כתובת",
|
||||
"healthAddCheck": "הוסף צ'ק",
|
||||
"healthSaved": "בדיקות הבריאות נשמרו",
|
||||
"healthMissingFields": "כל צ'ק צריך שם ומטרה",
|
||||
"logFile": "קוֹבֶץ",
|
||||
"logUnit": "יְחִידָה",
|
||||
"logCustomPath": "נתיב מותאם אישית תחת /var/log (אופציונלי)",
|
||||
"logGrep": "קווי סינון...",
|
||||
"firewallPersist": "כללים קבועים",
|
||||
"firewallPersisted": "כללי חומת האש נשמרו",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "קנה מידה זנב",
|
||||
"wgNotInstalled": "WireGuard אינו מותקן על מחשב זה",
|
||||
"wgNoInterfaces": "לא הוגדרו ממשקי WireGuard",
|
||||
"wgInterfaceUp": "לְהַעֲלוֹת",
|
||||
"wgInterfaceDown": "לְהַפִּיל",
|
||||
"wgBringingUp": "מעלה {{name}}...",
|
||||
"wgBringingDown": "מוריד את {{name}}...",
|
||||
"wgInterfaceUpDone": "{{name}} פעיל",
|
||||
"wgInterfaceDownDone": "{{name}} מושבת",
|
||||
"wgListenPort": "נָמָל",
|
||||
"wgPublicKey": "מפתח ציבורי",
|
||||
"wgEndpoint": "נקודת קצה",
|
||||
"wgAllowedIPs": "כתובות IP מותרות",
|
||||
"wgLastHandshake": "לחיצת יד אחרונה",
|
||||
"wgHandshakeNever": "לְעוֹלָם לֹא",
|
||||
"wgTransfer": "לְהַעֲבִיר",
|
||||
"tsNotInstalled": "Tailscale אינו מותקן על מחשב אחסון זה",
|
||||
"tsRunning": "רִיצָה",
|
||||
"tsStopped": "נֶעצָר",
|
||||
"tsEnable": "לְחַבֵּר",
|
||||
"tsDisable": "לְנַתֵק",
|
||||
"tsEnabling": "מתחבר ל-Tailscale...",
|
||||
"tsDisabling": "מתנתק מ-Tailscale...",
|
||||
"tsEnabled": "זנבסקאלה מחוברת",
|
||||
"tsDisabled": "ניתוק של קנה המידה של הזנב",
|
||||
"tsIPs": "כתובות IP של זנבות",
|
||||
"tsPeers": "עמיתים",
|
||||
"tsOnline": "באינטרנט",
|
||||
"tsOffline": "לא מקוון",
|
||||
"tsExitNode": "צומת יציאה",
|
||||
"tsExitNodeActive": "צומת יציאה פעיל",
|
||||
"tsHostname": "שם מארח"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "היסטוריית מדדים",
|
||||
"historySuffix": "הִיסטוֹרִיָה",
|
||||
"cpuMemoryDisk": "מעבד / זיכרון / דיסק",
|
||||
"network": "רֶשֶׁת",
|
||||
"download": "מרשם",
|
||||
"upload": "טקסס",
|
||||
"noData": "אין נתוני היסטוריה זמינים עבור טווח זמן זה.",
|
||||
"custom": "מִנְהָג",
|
||||
"to": "אֶל",
|
||||
"apply": "לִפְנוֹת",
|
||||
"viewHistory": "הצג היסטוריה"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "סטטיסטיקות פרוקסמוקס",
|
||||
"cpuUsage": "שימוש במעבד",
|
||||
"memoryUsage": "שימוש בזיכרון",
|
||||
"diskUsage": "שימוש בדיסק",
|
||||
"networkInterfaces": "ממשקי רשת",
|
||||
"uptime": "זמן פעולה",
|
||||
"systemInfo": "מידע מערכת",
|
||||
"guestsSummary": "אורחים",
|
||||
"storagePools": "בריכות אחסון",
|
||||
"clusterHealth": "בריאות אשכול",
|
||||
"cpuCores_one": "{{count}} ליבה",
|
||||
"cpuCores_other": "{{count}} ליבות",
|
||||
"used": "מְשׁוּמָשׁ",
|
||||
"total": "סַך הַכֹּל",
|
||||
"hostname": "שם מארח",
|
||||
"kernel": "גַרעִין",
|
||||
"pveVersion": "גרסת PVE",
|
||||
"name": "שֵׁם",
|
||||
"status": "סטָטוּס",
|
||||
"type": "סוּג",
|
||||
"cpu": "מעבד",
|
||||
"mem": "מ",
|
||||
"disk": "דִיסק",
|
||||
"running": "רִיצָה",
|
||||
"stopped": "נֶעצָר",
|
||||
"guestCounts": "ריצה {{running}}/ ריצה{{total}}",
|
||||
"inactive": "לֹא פָּעִיל",
|
||||
"notClustered": "צומת עצמאי (לא חלק מאשכול)",
|
||||
"quorate": "קוורט",
|
||||
"notQuorate": "לא נמצא מניין חוקי",
|
||||
"nodeOnline": "באינטרנט",
|
||||
"nodeOffline": "לא מקוון",
|
||||
"noHostSelected": "לא נבחר מארח",
|
||||
"pveshNotFound": "pvesh לא נמצא - האם זהו צומת Proxmox?",
|
||||
"nodeDetectionFailed": "לא ניתן לקבוע שם צומת Proxmox תקין",
|
||||
"connecting": "מְקַשֵׁר...",
|
||||
"connectionFailed": "נכשלה ההתחברות לצומת Proxmox",
|
||||
"refresh": "לְרַעֲנֵן",
|
||||
"searchGuests": "חיפוש אורחים...",
|
||||
"filterAll": "כֹּל",
|
||||
"filterVm": "מכונה וירטואלית",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "לא נמצאו מכונות וירטואליות או מכולות LXC בצומת זה.",
|
||||
"noGuestsMatch": "אין אורחים התואמים את המסננים הנוכחיים."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "מדדי מארח"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "מדדי מארח",
|
||||
"enableProxmoxStats": "הפעל סטטיסטיקות Proxmox",
|
||||
"enableProxmoxStatsDesc": "הצג כרטיסיית סטטיסטיקות Proxmox עבור מארח זה עם סטטיסטיקות של צומת, אורח, אחסון ואשכול שנאספו דרך SSH.",
|
||||
"proxmoxStatsPollInterval": "מרווח זמן בין סקר (שניות)",
|
||||
"proxmoxStatsPollIntervalDesc": "מינימום 15 שניות. באיזו תדירות לרענן את סטטיסטיקות הצומת של Proxmox.",
|
||||
"proxmoxStatsNodeOverride": "עקיפת שם הצומת",
|
||||
"proxmoxStatsNodeOverrideDesc": "עקיפת זיהוי אוטומטי של שם הצומת Proxmox (מזוהה דרך שם המארח כברירת מחדל).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "זוהה אוטומטית משם המארח",
|
||||
"metricsCollectionLabel": "אוסף מדדים",
|
||||
"enableMetricsLabel": "הפעל מדדים",
|
||||
"enableMetricsDesc": "איסוף מדדים של מעבד, זיכרון RAM, דיסק ומדדים אחרים ממארח זה",
|
||||
"useGlobalMetrics": "השתמש במרווח גלובלי",
|
||||
"useGlobalMetricsDesc": "עקיפה עם מרווח המדדים הכולל של השרת",
|
||||
"metricsIntervalS": "מרווח מדדים (ים)",
|
||||
"metricsIntervalDesc2": "שניות בין תמונות מצב של מדדים",
|
||||
"excludedMountsLabel": "תושבות לא כלולות",
|
||||
"monitoredMountsLabel": "נתיבים מנוטרים בהתאמה אישית",
|
||||
"monitoredMountsDesc": "הוסף נתיבים שאינם חשופים כחיבורים נפרדים, כולל נתיבי Home Assistant המותקנים באמצעות binding כגון /config.",
|
||||
"monitoredMountPathPlaceholder": "נתיב (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "תווית (אופציונלי)",
|
||||
"addMonitoredMount": "הוסף נתיב",
|
||||
"excludedMountsDesc": "הסתר נקודות הרכבה או סוגי מערכת קבצים ספציפיים (למשל nfs, cifs) משימוש בדיסק והתראות עבור מארח זה.",
|
||||
"excludedMountsPlaceholder": "נתיב הרכבה (/mnt/nas) או סוג מערכת קבצים (nfs, cifs)",
|
||||
"excludedMountsEmpty": "לא נכללו רכיבי טעינה. כל מערכות הקבצים שזוהו מוצגות.",
|
||||
"addExcludedMount": "לְהוֹסִיף",
|
||||
"visibleWidgets": "ווידג'טים גלויים",
|
||||
"widgetsMovedToHostMetrics": "כעת ניתן להוסיף, לסידור ולשנות את גודל הכרטיסים ישירות בכרטיסייה 'מדדי מארח'. פתחו את 'מדדי מארח' עבור מארח זה והשתמשו באפשרות 'התאמה אישית' כדי לבחור אילו כרטיסים יוצגו.",
|
||||
"quickActionsLabel": "פעולות מהירות",
|
||||
"quickActionsToolbar": "פעולות מהירות מופיעות ככפתורים בסרגל הכלים של Host Metrics לביצוע פקודה בלחיצה אחת.",
|
||||
"noQuickActions": "אין עדיין פעולות מהירות.",
|
||||
"buttonLabel": "תווית כפתור",
|
||||
"selectSnippetPlaceholder": "בחר קטע...",
|
||||
"addActionBtn": "הוסף פעולה"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "מדדים והתראות",
|
||||
"feature_metrics_desc": "עקוב אחר המעבד, הזיכרון והדיסק לאורך זמן, וקבל התראות כאשר הם מתקלקלים."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "שמירת היסטוריית מדדים",
|
||||
"metricsHistoryRetentionRange": "יום אחד עד 90 ימים",
|
||||
"days": "ימים"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "אין נתונים זמינים",
|
||||
"showCurrentValue": "הצג ערך נוכחי",
|
||||
"chartMetric": "מֶטרִי",
|
||||
"metricRange": "לָנוּעַ"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "मेमोरी",
|
||||
"disk": "डिस्क",
|
||||
"network": "नेटवर्क",
|
||||
"uptime": "अपटाइम",
|
||||
"processes": "प्रोसेसेस",
|
||||
"available": "उपलब्ध",
|
||||
"free": "फ्री",
|
||||
"connecting": "कनेक्ट हो रहा है...",
|
||||
"connectionFailed": "सर्वर से कनेक्ट करने में विफल",
|
||||
"naCpus": "N/A CPU(s)",
|
||||
"cpuCores_one": "{{count}} कोर",
|
||||
"cpuCores_other": "{{count}} कोर",
|
||||
"cpuUsage": "CPU उपयोग",
|
||||
"memoryUsage": "मेमोरी उपयोग",
|
||||
"diskUsage": "डिस्क उपयोग",
|
||||
"selectFilesystem": "फ़ाइल सिस्टम का चयन करें",
|
||||
"temperature": "तापमान",
|
||||
"highestTemperature": "उच्चतम तापमान",
|
||||
"primaryTemperatureSensor": "प्राथमिक सेंसर",
|
||||
"gpu": {
|
||||
"title": "जीपीयू",
|
||||
"noDevice": "कोई NVIDIA GPU नहीं मिला। GPU मेट्रिक्स देखने के लिए NVIDIA ड्राइवर (जो nvidia-smi प्रदान करता है) इंस्टॉल करें।",
|
||||
"driver": "ड्राइवर {{version}}",
|
||||
"utilization": "उपयोग",
|
||||
"memory": "वीआरएएम",
|
||||
"temperature": "अस्थायी",
|
||||
"power": "शक्ति",
|
||||
"fan": "पंखा",
|
||||
"processes": "जीपीयू प्रक्रियाएँ",
|
||||
"noProcesses": "कोई भी प्रक्रिया जीपीयू का उपयोग नहीं कर रही है।"
|
||||
},
|
||||
"failedToFetchHostConfig": "होस्ट कॉन्फ़िगरेशन प्राप्त करने में विफल",
|
||||
"serverOffline": "सर्वर ऑफ़लाइन",
|
||||
"cannotFetchMetrics": "ऑफ़लाइन सर्वर से मीट्रिक्स प्राप्त नहीं कर सकते",
|
||||
"totpFailed": "TOTP सत्यापन विफल",
|
||||
"noneAuthNotSupported": "होस्ट मेट्रिक्स 'none' प्रमाणीकरण प्रकार का समर्थन नहीं करता।",
|
||||
"noHostSelected": "कोई होस्ट चयनित नहीं",
|
||||
"load": "लोड",
|
||||
"systemInfo": "सिस्टम जानकारी",
|
||||
"hostname": "होस्टनाम",
|
||||
"operatingSystem": "ऑपरेटिंग सिस्टम",
|
||||
"kernel": "कर्नेल",
|
||||
"seconds": "सेकंड",
|
||||
"networkInterfaces": "नेटवर्क इंटरफ़ेस",
|
||||
"noInterfacesFound": "कोई नेटवर्क इंटरफ़ेस नहीं मिला",
|
||||
"noProcessesFound": "कोई प्रोसेस नहीं मिला",
|
||||
"processesTotal": "कुल",
|
||||
"processesRunning": "चल रहे",
|
||||
"loginStats": "SSH लॉगिन आँकड़े",
|
||||
"noRecentLoginData": "कोई हालिया लॉगिन डेटा नहीं",
|
||||
"executingQuickAction": "{{name}} निष्पादित हो रहा है...",
|
||||
"quickActionSuccess": "{{name}} सफलतापूर्वक पूर्ण हुआ",
|
||||
"quickActionFailed": "{{name}} विफल रहा",
|
||||
"quickActionError": "{{name}} निष्पादित करने में विफल",
|
||||
"ports": {
|
||||
"title": "लिसनिंग पोर्ट",
|
||||
"protocol": "प्रोटोकॉल",
|
||||
"port": "पोर्ट",
|
||||
"address": "पता",
|
||||
"process": "प्रोसेस",
|
||||
"search": "पोर्ट खोजें...",
|
||||
"allProtocols": "सभी",
|
||||
"noData": "कोई लिसनिंग पोर्ट डेटा नहीं"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "फ़ायरवॉल",
|
||||
"inactive": "निष्क्रिय",
|
||||
"policy": "नीति",
|
||||
"rules": "नियम",
|
||||
"noRules": "इस चेन में कोई नियम नहीं",
|
||||
"noData": "कोई फ़ायरवॉल डेटा उपलब्ध नहीं",
|
||||
"action": "कार्रवाई",
|
||||
"protocol": "प्रोटो",
|
||||
"port": "पोर्ट",
|
||||
"source": "स्रोत",
|
||||
"anywhere": "कहीं भी",
|
||||
"chains": "चेन्स"
|
||||
},
|
||||
"loadAvg": "लोड औसत",
|
||||
"swap": "स्वैप",
|
||||
"architecture": "आर्किटेक्चर",
|
||||
"refresh": "रीफ़्रेश",
|
||||
"retry": "पुनः प्रयास करें",
|
||||
"customize": "लेआउट अनुकूलित करें",
|
||||
"reset": "रीसेट",
|
||||
"tabLive": "लाइव",
|
||||
"editModeInstructions": "कार्ड को पुनर्व्यवस्थित करने के लिए खींचें, आकार बदलने के लिए निचले किनारे को खींचें, और कार्ड की चौड़ाई बदलने के लिए चौड़ाई बटन का उपयोग करें। नीचे कार्ड जोड़ें या हटाएं।",
|
||||
"managers": {
|
||||
"services": "सेवाएँ",
|
||||
"processInspector": "प्रोसेस इंस्पेक्टर",
|
||||
"logViewer": "लॉग व्यूअर",
|
||||
"cron": "क्रॉन जॉब्स",
|
||||
"packages": "पैकेजेस",
|
||||
"ssl": "SSL प्रमाणपत्र",
|
||||
"firewall": "फ़ायरवॉल",
|
||||
"users": "उपयोगकर्ता और अनुमतियाँ",
|
||||
"healthCheck": "स्वास्थ्य जांच",
|
||||
"diskBreakdown": "डिस्क ब्रेकडाउन",
|
||||
"systemdTimers": "टाइमर",
|
||||
"topMemory": "मेमोरी के अनुसार शीर्ष",
|
||||
"noData": "कोई डेटा नहीं",
|
||||
"sudoHint": "विशेषाधिकार क्रियाओं को सक्षम करने के लिए होस्ट संपादक में इस होस्ट के लिए एक sudo पासवर्ड सेट करें।",
|
||||
"filter": "फ़िल्टर...",
|
||||
"start": "प्रारंभ",
|
||||
"stop": "रोकें",
|
||||
"restart": "पुनरारंभ",
|
||||
"actionDone": "{{name}} अद्यतित",
|
||||
"actionFailed": "कार्रवाई विफल",
|
||||
"signalSent": "PID {{pid}} को सिग्नल भेजा गया",
|
||||
"killHint": "क्लिक: समाप्त करें (SIGTERM)। राइट-क्लिक: बलपूर्वक समाप्त करें (SIGKILL)।",
|
||||
"working": "काम कर रहा है...",
|
||||
"update": "अपडेट करें",
|
||||
"upgradeAll": "सभी अपग्रेड करें",
|
||||
"allUpToDate": "सब कुछ अप टू डेट है",
|
||||
"save": "सहेजें",
|
||||
"command": "कमांड",
|
||||
"enabled": "सक्षम",
|
||||
"cronSaved": "क्रॉनटैब अपडेट किया गया",
|
||||
"clients": "क्लाइंट",
|
||||
"dryRun": "ड्राई रन",
|
||||
"renew": "रीन्यू करें",
|
||||
"noAcmeClient": "इस होस्ट पर कोई ACME क्लाइंट (certbot या acme.sh) नहीं मिला।",
|
||||
"addInputRule": "INPUT नियम जोड़ें",
|
||||
"firewallWarning": "परिवर्तन केवल रनटाइम के लिए हैं जब तक स्थायी न हों। स्वयं को लॉक आउट करने से सावधान रहें।",
|
||||
"ruleApplied": "नियम लागू किया गया",
|
||||
"invalidPort": "एक वैध पोर्ट दर्ज करें (1-65535)",
|
||||
"newUsername": "नया उपयोगकर्ता नाम",
|
||||
"addUser": "जोड़ें",
|
||||
"deleteUser": "उपयोगकर्ता हटाएं",
|
||||
"noHealthChecks": "अभी तक कोई हेल्थ चेक कॉन्फ़िगर नहीं किया गया है।",
|
||||
"follow": "अनुसरण करें",
|
||||
"noLogData": "कोई लॉग आउटपुट नहीं।",
|
||||
"tree": "ट्री",
|
||||
"enableDisable": "बूट पर सक्षम / अक्षम करें",
|
||||
"grantSudo": "sudo दें",
|
||||
"revokeSudo": "sudo वापस लें",
|
||||
"sslIssueCert": "प्रमाणपत्र जारी करें",
|
||||
"sslExpired": "समाप्त",
|
||||
"sslInDays": "{{days}} दिनों में",
|
||||
"sslNeedDomain": "कम से कम एक डोमेन दर्ज करें",
|
||||
"sslIssued": "प्रमाणपत्र जारी किया गया",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (स्टैंडअलोन)",
|
||||
"sslHttpWebroot": "HTTP (वेबरूट)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "DNS प्रदाता (उदा. cloudflare)",
|
||||
"sslIssueHint": "DNS प्रदाता क्रेडेंशियल पहले से होस्ट पर कॉन्फ़िगर किए गए होने चाहिए।",
|
||||
"sslRevoke": "प्रमाणपत्र निरस्त करें",
|
||||
"sslRevoked": "प्रमाणपत्र निरस्त किया गया",
|
||||
"sslRevokeConfirm": "प्रमाणपत्र \"{{name}}\" निरस्त करें और हटाएं? यह पूर्ववत नहीं किया जा सकता।",
|
||||
"healthRun": "चलाएं",
|
||||
"healthName": "नाम",
|
||||
"healthTarget": "होस्ट / पता",
|
||||
"healthAddCheck": "जांच जोड़ें",
|
||||
"healthSaved": "स्वास्थ्य जांच सहेजी गईं",
|
||||
"healthMissingFields": "प्रत्येक जांच के लिए एक नाम और लक्ष्य आवश्यक है",
|
||||
"logFile": "फ़ाइल",
|
||||
"logUnit": "यूनिट",
|
||||
"logCustomPath": "/var/log के अंतर्गत कस्टम पथ (वैकल्पिक)",
|
||||
"logGrep": "लाइनें फ़िल्टर करें...",
|
||||
"firewallPersist": "नियम स्थायी करें",
|
||||
"firewallPersisted": "फ़ायरवॉल नियम स्थायी किए गए",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Tailscale",
|
||||
"wgNotInstalled": "WireGuard इस होस्ट पर स्थापित नहीं है",
|
||||
"wgNoInterfaces": "कोई WireGuard इंटरफ़ेस कॉन्फ़िगर्ड नहीं हैं",
|
||||
"wgInterfaceUp": "चालू करें",
|
||||
"wgInterfaceDown": "बंद करें",
|
||||
"wgBringingUp": "{{name}} चालू किया जा रहा है...",
|
||||
"wgBringingDown": "{{name}} बंद किया जा रहा है...",
|
||||
"wgInterfaceUpDone": "{{name}} चालू है",
|
||||
"wgInterfaceDownDone": "{{name}} बंद है",
|
||||
"wgListenPort": "पोर्ट",
|
||||
"wgPublicKey": "सार्वजनिक कुंजी",
|
||||
"wgEndpoint": "एंडपॉइंट",
|
||||
"wgAllowedIPs": "अनुमत IPs",
|
||||
"wgLastHandshake": "अंतिम हैंडशेक",
|
||||
"wgHandshakeNever": "कभी नहीं",
|
||||
"wgTransfer": "ट्रांसफर",
|
||||
"tsNotInstalled": "Tailscale इस होस्ट पर स्थापित नहीं है",
|
||||
"tsRunning": "चालू",
|
||||
"tsStopped": "बंद",
|
||||
"tsEnable": "कनेक्ट करें",
|
||||
"tsDisable": "डिस्कनेक्ट करें",
|
||||
"tsEnabling": "Tailscale से कनेक्ट हो रहा है...",
|
||||
"tsDisabling": "Tailscale से डिस्कनेक्ट हो रहा है...",
|
||||
"tsEnabled": "Tailscale कनेक्टेड",
|
||||
"tsDisabled": "Tailscale डिस्कनेक्टेड",
|
||||
"tsIPs": "Tailscale IPs",
|
||||
"tsPeers": "पीयर्स",
|
||||
"tsOnline": "ऑनलाइन",
|
||||
"tsOffline": "ऑफलाइन",
|
||||
"tsExitNode": "एक्जिट नोड",
|
||||
"tsExitNodeActive": "एक्जिट नोड सक्रिय",
|
||||
"tsHostname": "होस्टनाम"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "मेट्रिक्स इतिहास",
|
||||
"historySuffix": "इतिहास",
|
||||
"cpuMemoryDisk": "CPU / मेमोरी / डिस्क",
|
||||
"network": "नेटवर्क",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "इस समय सीमा के लिए कोई इतिहास डेटा उपलब्ध नहीं है।",
|
||||
"custom": "कस्टम",
|
||||
"to": "तक",
|
||||
"apply": "लागू करें",
|
||||
"viewHistory": "इतिहास देखें"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "प्रॉक्समॉक्स आँकड़े",
|
||||
"cpuUsage": "सीपीयू उपयोग",
|
||||
"memoryUsage": "स्मृति प्रयोग",
|
||||
"diskUsage": "डिस्क उपयोग",
|
||||
"networkInterfaces": "नेटवर्क इंटरफेस",
|
||||
"uptime": "अपटाइम",
|
||||
"systemInfo": "व्यवस्था जानकारी",
|
||||
"guestsSummary": "अतिथियों",
|
||||
"storagePools": "भंडारण पूल",
|
||||
"clusterHealth": "क्लस्टर स्वास्थ्य",
|
||||
"cpuCores_one": "{{count}} कोर",
|
||||
"cpuCores_other": "{{count}} कोर",
|
||||
"used": "इस्तेमाल किया गया",
|
||||
"total": "कुल",
|
||||
"hostname": "होस्ट का नाम",
|
||||
"kernel": "गुठली",
|
||||
"pveVersion": "PVE संस्करण",
|
||||
"name": "नाम",
|
||||
"status": "स्थिति",
|
||||
"type": "प्रकार",
|
||||
"cpu": "CPU",
|
||||
"mem": "मेम",
|
||||
"disk": "डिस्क",
|
||||
"running": "दौड़ना",
|
||||
"stopped": "रुका हुआ",
|
||||
"guestCounts": "{{running}}/{{total}} चल रहा है",
|
||||
"inactive": "निष्क्रिय",
|
||||
"notClustered": "स्टैंडअलोन नोड (क्लस्टर का हिस्सा नहीं)",
|
||||
"quorate": "कोरेट",
|
||||
"notQuorate": "निर्धारित संख्या पूरी नहीं है",
|
||||
"nodeOnline": "ऑनलाइन",
|
||||
"nodeOffline": "ऑफलाइन",
|
||||
"noHostSelected": "कोई होस्ट चयनित नहीं है",
|
||||
"pveshNotFound": "pvesh नहीं मिला - क्या यह Proxmox नोड है?",
|
||||
"nodeDetectionFailed": "वैध प्रोक्समॉक्स नोड नाम निर्धारित करने में असमर्थ",
|
||||
"connecting": "कनेक्ट हो रहा है...",
|
||||
"connectionFailed": "Proxmox नोड से कनेक्ट करने में विफल",
|
||||
"refresh": "ताज़ा करना",
|
||||
"searchGuests": "अतिथियों को खोजें...",
|
||||
"filterAll": "सभी",
|
||||
"filterVm": "वीएम",
|
||||
"filterLxc": "एलएक्ससी",
|
||||
"noGuests": "इस नोड पर कोई वीएम या एलएक्ससी कंटेनर नहीं मिला।",
|
||||
"noGuestsMatch": "वर्तमान फ़िल्टरों से कोई अतिथि मेल नहीं खाता।"
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "होस्ट मेट्रिक्स"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "होस्ट मेट्रिक्स",
|
||||
"enableProxmoxStats": "Proxmox सांख्यिकी सक्षम करें",
|
||||
"enableProxmoxStatsDesc": "इस होस्ट के लिए एक प्रोक्समॉक्स स्टैट्स टैब दिखाएं जिसमें एसएसएच के माध्यम से एकत्रित किए गए लाइव नोड, गेस्ट, स्टोरेज और क्लस्टर स्टैट्स शामिल हों।",
|
||||
"proxmoxStatsPollInterval": "मतदान अंतराल (सेकंड)",
|
||||
"proxmoxStatsPollIntervalDesc": "कम से कम 15 सेकंड। प्रोक्समॉक्स नोड के आंकड़ों को कितनी बार रीफ्रेश करना है?",
|
||||
"proxmoxStatsNodeOverride": "नोड नाम ओवरराइड",
|
||||
"proxmoxStatsNodeOverrideDesc": "Proxmox नोड नाम की स्वतः पहचान को ओवरराइड करें (जो डिफ़ॉल्ट रूप से होस्टनाम के माध्यम से पता लगाया जाता है)।",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "होस्टनाम से स्वतः पता लगाया गया",
|
||||
"metricsCollectionLabel": "मेट्रिक्स संग्रह",
|
||||
"enableMetricsLabel": "मेट्रिक्स सक्षम करें",
|
||||
"enableMetricsDesc": "इस होस्ट से CPU, RAM, डिस्क और अन्य मेट्रिक्स एकत्र करें",
|
||||
"useGlobalMetrics": "वैश्विक अंतराल का उपयोग करें",
|
||||
"useGlobalMetricsDesc": "सर्वर-व्यापी मेट्रिक्स अंतराल से ओवरराइड करें",
|
||||
"metricsIntervalS": "मेट्रिक्स अंतराल (सेकंड)",
|
||||
"metricsIntervalDesc2": "मेट्रिक स्नैपशॉट के बीच सेकंड",
|
||||
"excludedMountsLabel": "बहिष्कृत पर्वत",
|
||||
"monitoredMountsLabel": "कस्टम मॉनिटर किए गए पथ",
|
||||
"monitoredMountsDesc": "उन पथों को जोड़ें जो अलग-अलग माउंट के रूप में उजागर नहीं होते हैं, जिनमें बाइंड-माउंटेड होम असिस्टेंट पथ जैसे कि /config शामिल हैं।",
|
||||
"monitoredMountPathPlaceholder": "पथ (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "लेबल (वैकल्पिक)",
|
||||
"addMonitoredMount": "पथ जोड़ें",
|
||||
"excludedMountsDesc": "इस होस्ट के लिए डिस्क उपयोग और अलर्ट से विशिष्ट माउंट पॉइंट या फ़ाइल सिस्टम प्रकार (जैसे nfs, cifs) को छिपाएँ।",
|
||||
"excludedMountsPlaceholder": "माउंट पथ (/mnt/nas) या फ़ाइल सिस्टम प्रकार (nfs, cifs)",
|
||||
"excludedMountsEmpty": "कोई भी माउंट बाहर नहीं रखा गया है। सभी पहचाने गए फ़ाइल सिस्टम दिखाए गए हैं।",
|
||||
"addExcludedMount": "जोड़ना",
|
||||
"visibleWidgets": "दृश्यमान विजेट्स",
|
||||
"widgetsMovedToHostMetrics": "कार्ड अब सीधे होस्ट मेट्रिक्स टैब में जोड़े, व्यवस्थित और आकार बदले जा सकते हैं। इस होस्ट के लिए होस्ट मेट्रिक्स खोलें और यह चुनने के लिए कस्टमाइज़ का उपयोग करें कि कौन से कार्ड दिखाए जाएँ।",
|
||||
"quickActionsLabel": "त्वरित कार्रवाइयाँ",
|
||||
"quickActionsToolbar": "त्वरित कार्रवाइयाँ एक-क्लिक कमांड निष्पादन के लिए होस्ट मेट्रिक्स टूलबार में बटन के रूप में दिखाई देती हैं।",
|
||||
"noQuickActions": "अभी तक कोई त्वरित कार्रवाई नहीं।",
|
||||
"buttonLabel": "बटन लेबल",
|
||||
"selectSnippetPlaceholder": "स्निपेट चुनें...",
|
||||
"addActionBtn": "कार्रवाई जोड़ें"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "मैट्रिक्स और अलर्ट",
|
||||
"feature_metrics_desc": "समय के साथ सीपीयू, मेमोरी और डिस्क की स्थिति पर नज़र रखें और उनके खराब होने पर अलर्ट प्राप्त करें।"
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "मेट्रिक्स इतिहास प्रतिधारण",
|
||||
"metricsHistoryRetentionRange": "1 से 90 दिन",
|
||||
"days": "दिन"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "कोई डेटा उपलब्ध नहीं",
|
||||
"showCurrentValue": "वर्तमान मान दिखाएं",
|
||||
"chartMetric": "मीट्रिक",
|
||||
"metricRange": "सीमा"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "Memória",
|
||||
"disk": "Korong",
|
||||
"network": "Hálózat",
|
||||
"uptime": "Üzemidő",
|
||||
"processes": "Folyamatok",
|
||||
"available": "Elérhető",
|
||||
"free": "Ingyenes",
|
||||
"connecting": "Kapcsolódás...",
|
||||
"connectionFailed": "Nem sikerült csatlakozni a szerverhez",
|
||||
"naCpus": "Nincs CPU",
|
||||
"cpuCores_one": "{{count}} Mag",
|
||||
"cpuCores_other": "{{count}} Magok",
|
||||
"cpuUsage": "CPU-használat",
|
||||
"memoryUsage": "Memóriahasználat",
|
||||
"diskUsage": "Lemezhasználat",
|
||||
"selectFilesystem": "Fájlrendszer kiválasztása",
|
||||
"temperature": "Hőmérséklet",
|
||||
"highestTemperature": "Legmagasabb hőmérséklet",
|
||||
"primaryTemperatureSensor": "Elsődleges érzékelő",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "Nem észlelhető NVIDIA GPU. Telepítse az NVIDIA illesztőprogramot (ez biztosítja az nvidia-smi-t) a GPU-metrikák megtekintéséhez.",
|
||||
"driver": "Sofőr {{version}}",
|
||||
"utilization": "Hasznosítás",
|
||||
"memory": "VRAM",
|
||||
"temperature": "Hőmérséklet",
|
||||
"power": "Hatalom",
|
||||
"fan": "Ventilátor",
|
||||
"processes": "GPU-folyamatok",
|
||||
"noProcesses": "Egyik folyamat sem használja a GPU-t"
|
||||
},
|
||||
"failedToFetchHostConfig": "Nem sikerült lekérni a gazdagép konfigurációját",
|
||||
"serverOffline": "Szerver offline állapotban",
|
||||
"cannotFetchMetrics": "Nem lehet metrikákat lekérni az offline szerverről",
|
||||
"totpFailed": "TOTP-ellenőrzés sikertelen",
|
||||
"noneAuthNotSupported": "A Host Metrics nem támogatja a „nincs” hitelesítési típust.",
|
||||
"noHostSelected": "Nincs kiválasztva gazdagép",
|
||||
"load": "Terhelés",
|
||||
"systemInfo": "Rendszerinformációk",
|
||||
"hostname": "Gazdagépnév",
|
||||
"operatingSystem": "Operációs rendszer",
|
||||
"kernel": "Kernel",
|
||||
"seconds": "másodperc",
|
||||
"networkInterfaces": "Hálózati interfészek",
|
||||
"noInterfacesFound": "Nem találhatók hálózati interfészek",
|
||||
"noProcessesFound": "Nem találhatók folyamatok",
|
||||
"processesTotal": "teljes",
|
||||
"processesRunning": "futás",
|
||||
"loginStats": "SSH bejelentkezési statisztikák",
|
||||
"noRecentLoginData": "Nincsenek friss bejelentkezési adatok",
|
||||
"executingQuickAction": "{{name}} végrehajtása ...",
|
||||
"quickActionSuccess": "{{name}} sikeresen befejeződött",
|
||||
"quickActionFailed": "{{name}} sikertelen",
|
||||
"quickActionError": "Nem sikerült végrehajtani a {{name}} parancsot.",
|
||||
"ports": {
|
||||
"title": "Figyelő portok",
|
||||
"protocol": "Jegyzőkönyv",
|
||||
"port": "Kikötő",
|
||||
"address": "Cím",
|
||||
"process": "Folyamat",
|
||||
"search": "Keresési portok...",
|
||||
"allProtocols": "Minden",
|
||||
"noData": "Nincsenek figyelőport-adatok"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Tűzfal",
|
||||
"inactive": "Inaktív",
|
||||
"policy": "Politika",
|
||||
"rules": "szabályok",
|
||||
"noRules": "Nincsenek szabályok ebben a láncban",
|
||||
"noData": "Nincsenek elérhető tűzfaladatok",
|
||||
"action": "Akció",
|
||||
"protocol": "Proto",
|
||||
"port": "Kikötő",
|
||||
"source": "Forrás",
|
||||
"anywhere": "Bárhol",
|
||||
"chains": "láncok"
|
||||
},
|
||||
"loadAvg": "Átlagos betöltés",
|
||||
"swap": "Csere",
|
||||
"architecture": "Építészet",
|
||||
"refresh": "Frissítés",
|
||||
"retry": "Újrapróbálkozás",
|
||||
"customize": "Elrendezés testreszabása",
|
||||
"reset": "Visszaállítás",
|
||||
"tabLive": "Élő",
|
||||
"editModeInstructions": "Húzd a kártyákat az átrendezéshez, húzd az alsó szélüket az átméretezéshez, és használd a szélesség gombot a kártya szélességének módosításához. Alább adj hozzá vagy távolíts el kártyákat.",
|
||||
"managers": {
|
||||
"services": "Szolgáltatások",
|
||||
"processInspector": "Folyamatfelügyelő",
|
||||
"logViewer": "Naplómegjelenítő",
|
||||
"cron": "Cron-feladatok",
|
||||
"packages": "Csomagok",
|
||||
"ssl": "SSL tanúsítványok",
|
||||
"firewall": "Tűzfal",
|
||||
"users": "Felhasználók és engedélyek",
|
||||
"healthCheck": "Egészségügyi ellenőrzések",
|
||||
"diskBreakdown": "Lemezbontás",
|
||||
"systemdTimers": "Időzítők",
|
||||
"topMemory": "Top by Memory",
|
||||
"noData": "Nincsenek adatok",
|
||||
"sudoHint": "Állítson be egy sudo jelszót ehhez a gazdagéphez a gazdagép-szerkesztőben a privilegizált műveletek engedélyezéséhez.",
|
||||
"filter": "Szűrő...",
|
||||
"start": "Indul",
|
||||
"stop": "Stop",
|
||||
"restart": "Újraindítás",
|
||||
"actionDone": "{{name}} frissítve",
|
||||
"actionFailed": "Sikertelen művelet",
|
||||
"signalSent": "PID {{pid}}-ra küldött jel",
|
||||
"killHint": "Kattintás: leállítás (SIGTERM). Jobb klikk: kényszerített leállítás (SIGKILL).",
|
||||
"working": "Dolgozó...",
|
||||
"update": "Frissítés",
|
||||
"upgradeAll": "Összes frissítése",
|
||||
"allUpToDate": "Minden naprakész",
|
||||
"save": "Megtakarítás",
|
||||
"command": "Parancs",
|
||||
"enabled": "Engedélyezve",
|
||||
"cronSaved": "Crontab frissítve",
|
||||
"clients": "Ügyfelek",
|
||||
"dryRun": "Száraz futás",
|
||||
"renew": "Megújítás",
|
||||
"noAcmeClient": "Nem található ACME kliens (certbot vagy acme.sh) ezen a gazdagépen.",
|
||||
"addInputRule": "INPUT szabály hozzáadása",
|
||||
"firewallWarning": "A változtatások csak futásidejűek, amíg meg nem őrizve nem lesznek. Ügyeljen arra, hogy ne zárja ki magát.",
|
||||
"ruleApplied": "Szabály alkalmazva",
|
||||
"invalidPort": "Adjon meg egy érvényes portszámot (1-65535)",
|
||||
"newUsername": "Új felhasználónév",
|
||||
"addUser": "Hozzáadás",
|
||||
"deleteUser": "Felhasználó törlése",
|
||||
"noHealthChecks": "Még nincsenek konfigurálva állapotfelmérések.",
|
||||
"follow": "Követés",
|
||||
"noLogData": "Nincs naplókimenet.",
|
||||
"tree": "Fa",
|
||||
"enableDisable": "Engedélyezés / letiltás rendszerindításkor",
|
||||
"grantSudo": "Sudo engedélyezése",
|
||||
"revokeSudo": "Sudo visszavonása",
|
||||
"sslIssueCert": "Kibocsátási tanúsítvány",
|
||||
"sslExpired": "Lejárt",
|
||||
"sslInDays": "{{days}}d-ben",
|
||||
"sslNeedDomain": "Adjon meg legalább egy domaint",
|
||||
"sslIssued": "Kiállított tanúsítvány",
|
||||
"sslDomainsPlaceholder": "példa.com, www.példa.com",
|
||||
"sslHttpStandalone": "HTTP (önálló)",
|
||||
"sslHttpWebroot": "HTTP (webroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "DNS-szolgáltató (pl. cloudflare)",
|
||||
"sslIssueHint": "A DNS-szolgáltató hitelesítő adatait már konfigurálni kell a gazdagépen.",
|
||||
"sslRevoke": "Tanúsítvány visszavonása",
|
||||
"sslRevoked": "Tanúsítvány visszavonva",
|
||||
"sslRevokeConfirm": "Visszavonja és eltávolítja a(z) \"{{name}}\" tanúsítványt? Ez nem vonható vissza.",
|
||||
"healthRun": "Fut",
|
||||
"healthName": "Név",
|
||||
"healthTarget": "Gazdagép / cím",
|
||||
"healthAddCheck": "Csekk hozzáadása",
|
||||
"healthSaved": "Egészségügyi ellenőrzések mentve",
|
||||
"healthMissingFields": "Minden ellenőrzéshez kell egy név és egy cél.",
|
||||
"logFile": "Fájl",
|
||||
"logUnit": "Egység",
|
||||
"logCustomPath": "Egyéni elérési út a /var/log könyvtárban (opcionális)",
|
||||
"logGrep": "Szűrővonalak...",
|
||||
"firewallPersist": "Szabályok megőrzése",
|
||||
"firewallPersisted": "A tűzfalszabályok megmaradtak",
|
||||
"wireguard": "Drótvédő",
|
||||
"tailscale": "Farokskála",
|
||||
"wgNotInstalled": "A WireGuard nincs telepítve erre a gépre",
|
||||
"wgNoInterfaces": "Nincsenek konfigurált WireGuard interfészek",
|
||||
"wgInterfaceUp": "Felnevel",
|
||||
"wgInterfaceDown": "Lehoz",
|
||||
"wgBringingUp": "{{name}} felhozása...",
|
||||
"wgBringingDown": "{{name}} lehozása...",
|
||||
"wgInterfaceUpDone": "{{name}} fent van",
|
||||
"wgInterfaceDownDone": "{{name}} nem működik",
|
||||
"wgListenPort": "Kikötő",
|
||||
"wgPublicKey": "Nyilvános kulcs",
|
||||
"wgEndpoint": "Végpont",
|
||||
"wgAllowedIPs": "Engedélyezett IP-címek",
|
||||
"wgLastHandshake": "Utolsó kézfogás",
|
||||
"wgHandshakeNever": "Soha",
|
||||
"wgTransfer": "Átruházás",
|
||||
"tsNotInstalled": "A Tailscale nincs telepítve erre a gazdagépre",
|
||||
"tsRunning": "Futás",
|
||||
"tsStopped": "Leállítva",
|
||||
"tsEnable": "Csatlakozás",
|
||||
"tsDisable": "Leválasztás",
|
||||
"tsEnabling": "Kapcsolódás a Tailscale-hez...",
|
||||
"tsDisabling": "Lecsatlakozás a Tailscale-ről...",
|
||||
"tsEnabled": "Farokméret csatlakoztatva",
|
||||
"tsDisabled": "Farokváz leválasztva",
|
||||
"tsIPs": "Tailscale IP-címek",
|
||||
"tsPeers": "Társak",
|
||||
"tsOnline": "Online",
|
||||
"tsOffline": "Offline",
|
||||
"tsExitNode": "Kilépési csomópont",
|
||||
"tsExitNodeActive": "Kilépési csomópont aktív",
|
||||
"tsHostname": "Gazdagépnév"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Metrikák előzményei",
|
||||
"historySuffix": "Történelem",
|
||||
"cpuMemoryDisk": "CPU / Memória / Lemez",
|
||||
"network": "Hálózat",
|
||||
"download": "Vétel",
|
||||
"upload": "Texas",
|
||||
"noData": "Ehhez az időtartományhoz nem állnak rendelkezésre előzményadatok.",
|
||||
"custom": "Szokás",
|
||||
"to": "hogy",
|
||||
"apply": "Jelentkezés",
|
||||
"viewHistory": "Előzmények megtekintése"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Proxmox statisztikák",
|
||||
"cpuUsage": "CPU-használat",
|
||||
"memoryUsage": "Memóriahasználat",
|
||||
"diskUsage": "Lemezhasználat",
|
||||
"networkInterfaces": "Hálózati interfészek",
|
||||
"uptime": "Üzemidő",
|
||||
"systemInfo": "Rendszerinformációk",
|
||||
"guestsSummary": "Vendégek",
|
||||
"storagePools": "Tárolómedencék",
|
||||
"clusterHealth": "Klaszter Egészségügy",
|
||||
"cpuCores_one": "{{count}} Mag",
|
||||
"cpuCores_other": "{{count}} Magok",
|
||||
"used": "Használt",
|
||||
"total": "Teljes",
|
||||
"hostname": "Gazdagépnév",
|
||||
"kernel": "Kernel",
|
||||
"pveVersion": "PVE verzió",
|
||||
"name": "Név",
|
||||
"status": "Állapot",
|
||||
"type": "Típus",
|
||||
"cpu": "CPU",
|
||||
"mem": "Mem",
|
||||
"disk": "Korong",
|
||||
"running": "Futás",
|
||||
"stopped": "Leállítva",
|
||||
"guestCounts": "{{running}}/{{total}} fut",
|
||||
"inactive": "Inaktív",
|
||||
"notClustered": "Önálló csomópont (nem része fürtnek)",
|
||||
"quorate": "Kvórat",
|
||||
"notQuorate": "Nem határozatképes",
|
||||
"nodeOnline": "Online",
|
||||
"nodeOffline": "Offline",
|
||||
"noHostSelected": "Nincs kiválasztva gazdagép",
|
||||
"pveshNotFound": "pvesh nem található - ez egy Proxmox csomópont?",
|
||||
"nodeDetectionFailed": "Nem sikerült érvényes Proxmox csomópontnevet meghatározni.",
|
||||
"connecting": "Kapcsolódás...",
|
||||
"connectionFailed": "Nem sikerült csatlakozni a Proxmox csomóponthoz",
|
||||
"refresh": "Frissítés",
|
||||
"searchGuests": "Vendégek keresése...",
|
||||
"filterAll": "Minden",
|
||||
"filterVm": "Virtuális gép",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "Nem találhatók virtuális gépek vagy LXC konténerek ezen a csomóponton.",
|
||||
"noGuestsMatch": "Egyik vendég sem felel meg a jelenlegi szűrőknek."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Gazdagép-metrikák"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Gazdagép-metrikák",
|
||||
"enableProxmoxStats": "Proxmox statisztikák engedélyezése",
|
||||
"enableProxmoxStatsDesc": "Proxmox Statisztika fül megjelenítése ehhez a gazdagéphez, élő csomópont-, vendég-, tároló- és fürtstatisztikákkal, SSH-n keresztül gyűjtött adatokkal.",
|
||||
"proxmoxStatsPollInterval": "Lekérdezési intervallum (másodperc)",
|
||||
"proxmoxStatsPollIntervalDesc": "Minimum 15 másodperc. A Proxmox csomópont statisztikáinak frissítési gyakorisága.",
|
||||
"proxmoxStatsNodeOverride": "Csomópont nevének felülbírálása",
|
||||
"proxmoxStatsNodeOverrideDesc": "A Proxmox csomópont nevének automatikus észlelésének felülbírálása (alapértelmezés szerint a gazdagépnév alapján észlelhető).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Automatikusan felismerve a gazdagépnév alapján",
|
||||
"metricsCollectionLabel": "Metrikagyűjtemény",
|
||||
"enableMetricsLabel": "Metrikák engedélyezése",
|
||||
"enableMetricsDesc": "CPU, RAM, lemez és egyéb mérőszámok gyűjtése erről a gazdagépről",
|
||||
"useGlobalMetrics": "Globális intervallum használata",
|
||||
"useGlobalMetricsDesc": "Felülbírálás a szerverszintű metrika intervallummal",
|
||||
"metricsIntervalS": "Mérési intervallum (s)",
|
||||
"metricsIntervalDesc2": "Metrika pillanatképek között eltelt másodpercek",
|
||||
"excludedMountsLabel": "Kizárt tartók",
|
||||
"monitoredMountsLabel": "Egyéni figyelt útvonalak",
|
||||
"monitoredMountsDesc": "Adjon hozzá olyan elérési utakat, amelyek nincsenek különálló csatolásként közzétéve, beleértve a kötésként csatolt Home Assistant elérési utakat, például a /config-ot.",
|
||||
"monitoredMountPathPlaceholder": "Útvonal (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Címke (opcionális)",
|
||||
"addMonitoredMount": "Útvonal hozzáadása",
|
||||
"excludedMountsDesc": "Rejtsd el az adott csatolási pontokat vagy fájlrendszertípusokat (pl. nfs, cifs) a lemezhasználat és a riasztások elől ennél a gazdagépnél.",
|
||||
"excludedMountsPlaceholder": "Csatlakoztatási útvonal (/mnt/nas) vagy fájlrendszer típusa (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Nincsenek kizárva csatolások. Minden észlelt fájlrendszer látható.",
|
||||
"addExcludedMount": "Hozzáadás",
|
||||
"visibleWidgets": "Látható widgetek",
|
||||
"widgetsMovedToHostMetrics": "A kártyák mostantól közvetlenül a Gazdagép metrikái lapon adhatók hozzá, rendezhetők el és méretezhetők át. Nyissa meg a Gazdagép metrikái oldalt ehhez a gazdagéphez, és a Testreszabás gombbal válassza ki, hogy mely kártyák jelenjenek meg.",
|
||||
"quickActionsLabel": "Gyors műveletek",
|
||||
"quickActionsToolbar": "A gyors műveletek gombokként jelennek meg a Host Metrics eszköztáron, így egyetlen kattintással végrehajthatók a parancsok.",
|
||||
"noQuickActions": "Még nincsenek gyors intézkedések.",
|
||||
"buttonLabel": "Gomb felirata",
|
||||
"selectSnippetPlaceholder": "Válasszon részletet...",
|
||||
"addActionBtn": "Művelet hozzáadása"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Metrikák és riasztások",
|
||||
"feature_metrics_desc": "Kövesse nyomon a CPU, a memória és a lemez teljesítményét az idő múlásával, és kapjon értesítést, ha meghibásodnak."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Metrikák előzményeinek megőrzése",
|
||||
"metricsHistoryRetentionRange": "1-90 nap",
|
||||
"days": "napok"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Nincsenek elérhető adatok",
|
||||
"showCurrentValue": "Aktuális érték megjelenítése",
|
||||
"chartMetric": "Metrika",
|
||||
"metricRange": "Hatótávolság"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "Ingatan",
|
||||
"disk": "Disk",
|
||||
"network": "Jaringan",
|
||||
"uptime": "Waktu aktif",
|
||||
"processes": "Proses",
|
||||
"available": "Tersedia",
|
||||
"free": "Bebas",
|
||||
"connecting": "Menghubungkan...",
|
||||
"connectionFailed": "Gagal terhubung ke server",
|
||||
"naCpus": "CPU tidak tersedia",
|
||||
"cpuCores_one": "{{count}} Inti",
|
||||
"cpuCores_other": "{{count}} Inti",
|
||||
"cpuUsage": "Penggunaan CPU",
|
||||
"memoryUsage": "Penggunaan Memori",
|
||||
"diskUsage": "Penggunaan Disk",
|
||||
"selectFilesystem": "Pilih sistem file",
|
||||
"temperature": "Suhu",
|
||||
"highestTemperature": "Suhu tertinggi",
|
||||
"primaryTemperatureSensor": "Sensor utama",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "GPU NVIDIA tidak terdeteksi. Instal driver NVIDIA (yang menyediakan nvidia-smi) untuk melihat metrik GPU.",
|
||||
"driver": "Pengemudi {{version}}",
|
||||
"utilization": "Pemanfaatan",
|
||||
"memory": "VRAM",
|
||||
"temperature": "Suhu",
|
||||
"power": "Kekuatan",
|
||||
"fan": "Penggemar",
|
||||
"processes": "Proses GPU",
|
||||
"noProcesses": "Tidak ada proses yang menggunakan GPU."
|
||||
},
|
||||
"failedToFetchHostConfig": "Gagal mengambil konfigurasi host",
|
||||
"serverOffline": "Server Offline",
|
||||
"cannotFetchMetrics": "Tidak dapat mengambil metrik dari server offline.",
|
||||
"totpFailed": "Verifikasi TOTP gagal",
|
||||
"noneAuthNotSupported": "Host Metrics tidak mendukung tipe otentikasi 'none'.",
|
||||
"noHostSelected": "Tidak ada pembawa acara yang dipilih.",
|
||||
"load": "Memuat",
|
||||
"systemInfo": "Informasi Sistem",
|
||||
"hostname": "Nama host",
|
||||
"operatingSystem": "Sistem Operasi",
|
||||
"kernel": "Inti",
|
||||
"seconds": "detik",
|
||||
"networkInterfaces": "Antarmuka Jaringan",
|
||||
"noInterfacesFound": "Tidak ditemukan antarmuka jaringan.",
|
||||
"noProcessesFound": "Tidak ada proses yang ditemukan.",
|
||||
"processesTotal": "total",
|
||||
"processesRunning": "berlari",
|
||||
"loginStats": "Statistik Login SSH",
|
||||
"noRecentLoginData": "Tidak ada data login terbaru.",
|
||||
"executingQuickAction": "Menjalankan {{name}}...",
|
||||
"quickActionSuccess": "{{name}} berhasil diselesaikan",
|
||||
"quickActionFailed": "{{name}} gagal",
|
||||
"quickActionError": "Gagal mengeksekusi {{name}}",
|
||||
"ports": {
|
||||
"title": "Port Pendengaran",
|
||||
"protocol": "Protokol",
|
||||
"port": "Pelabuhan",
|
||||
"address": "Alamat",
|
||||
"process": "Proses",
|
||||
"search": "Cari pelabuhan...",
|
||||
"allProtocols": "Semua",
|
||||
"noData": "Tidak ada data port yang mendengarkan."
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Firewall",
|
||||
"inactive": "Tidak aktif",
|
||||
"policy": "Kebijakan",
|
||||
"rules": "aturan",
|
||||
"noRules": "Tidak ada aturan dalam rantai ini",
|
||||
"noData": "Tidak ada data firewall yang tersedia.",
|
||||
"action": "Tindakan",
|
||||
"protocol": "Proto",
|
||||
"port": "Pelabuhan",
|
||||
"source": "Sumber",
|
||||
"anywhere": "Di mana saja",
|
||||
"chains": "rantai"
|
||||
},
|
||||
"loadAvg": "Beban Rata-rata",
|
||||
"swap": "Menukar",
|
||||
"architecture": "Arsitektur",
|
||||
"refresh": "Menyegarkan",
|
||||
"retry": "Mencoba kembali",
|
||||
"customize": "Sesuaikan tata letak",
|
||||
"reset": "Mengatur ulang",
|
||||
"tabLive": "Hidup",
|
||||
"editModeInstructions": "Seret kartu untuk mengatur ulang, seret tepi bawah untuk mengubah ukurannya, dan gunakan tombol lebar untuk mengubah rentang kartu. Tambahkan atau hapus kartu di bawah ini.",
|
||||
"managers": {
|
||||
"services": "Layanan",
|
||||
"processInspector": "Inspektur Proses",
|
||||
"logViewer": "Penampil Log",
|
||||
"cron": "Tugas Cron",
|
||||
"packages": "Paket",
|
||||
"ssl": "Sertifikat SSL",
|
||||
"firewall": "Firewall",
|
||||
"users": "Pengguna & Izin",
|
||||
"healthCheck": "Pemeriksaan Kesehatan",
|
||||
"diskBreakdown": "Kerusakan Disk",
|
||||
"systemdTimers": "Pengatur waktu",
|
||||
"topMemory": "Atas oleh Memory",
|
||||
"noData": "Tidak ada data",
|
||||
"sudoHint": "Tetapkan kata sandi sudo untuk host ini di editor host untuk mengaktifkan tindakan istimewa.",
|
||||
"filter": "Menyaring...",
|
||||
"start": "Awal",
|
||||
"stop": "Berhenti",
|
||||
"restart": "Mulai ulang",
|
||||
"actionDone": "{{name}} diperbarui",
|
||||
"actionFailed": "Tindakan gagal",
|
||||
"signalSent": "Sinyal dikirim ke PID {{pid}}",
|
||||
"killHint": "Klik: akhiri (SIGTERM). Klik kanan: paksa matikan (SIGKILL).",
|
||||
"working": "Bekerja...",
|
||||
"update": "Memperbarui",
|
||||
"upgradeAll": "Tingkatkan semuanya",
|
||||
"allUpToDate": "Semuanya sudah diperbarui",
|
||||
"save": "Menyimpan",
|
||||
"command": "Memerintah",
|
||||
"enabled": "Diaktifkan",
|
||||
"cronSaved": "Crontab diperbarui",
|
||||
"clients": "Klien",
|
||||
"dryRun": "Simulasi",
|
||||
"renew": "Memperbarui",
|
||||
"noAcmeClient": "Tidak ditemukan klien ACME (certbot atau acme.sh) pada host ini.",
|
||||
"addInputRule": "Tambahkan aturan INPUT",
|
||||
"firewallWarning": "Perubahan hanya berlaku saat runtime hingga disimpan. Berhati-hatilah agar tidak mengunci akses Anda sendiri.",
|
||||
"ruleApplied": "Aturan diterapkan",
|
||||
"invalidPort": "Masukkan port yang valid (1-65535)",
|
||||
"newUsername": "Nama pengguna baru",
|
||||
"addUser": "Menambahkan",
|
||||
"deleteUser": "Hapus pengguna",
|
||||
"noHealthChecks": "Belum ada pemeriksaan kesehatan yang dikonfigurasi.",
|
||||
"follow": "Mengikuti",
|
||||
"noLogData": "Tidak ada output log.",
|
||||
"tree": "Pohon",
|
||||
"enableDisable": "Aktifkan/nonaktifkan saat booting",
|
||||
"grantSudo": "Berikan sudo",
|
||||
"revokeSudo": "Cabut sudo",
|
||||
"sslIssueCert": "Menerbitkan sertifikat",
|
||||
"sslExpired": "Kedaluwarsa",
|
||||
"sslInDays": "di {{days}}d",
|
||||
"sslNeedDomain": "Masukkan setidaknya satu domain",
|
||||
"sslIssued": "Sertifikat diterbitkan",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (mandiri)",
|
||||
"sslHttpWebroot": "HTTP (webroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "Penyedia DNS (misalnya Cloudflare)",
|
||||
"sslIssueHint": "Kredensial penyedia DNS harus sudah dikonfigurasi pada host.",
|
||||
"sslRevoke": "Cabut sertifikat",
|
||||
"sslRevoked": "Sertifikat dicabut",
|
||||
"sslRevokeConfirm": "Cabut dan hapus sertifikat \"{{name}}\"? Ini tidak dapat dibatalkan.",
|
||||
"healthRun": "Berlari",
|
||||
"healthName": "Nama",
|
||||
"healthTarget": "Host / alamat",
|
||||
"healthAddCheck": "Tambahkan pemeriksaan",
|
||||
"healthSaved": "Pemeriksaan kesehatan tersimpan",
|
||||
"healthMissingFields": "Setiap cek memerlukan nama dan target.",
|
||||
"logFile": "Mengajukan",
|
||||
"logUnit": "Satuan",
|
||||
"logCustomPath": "Jalur khusus di bawah /var/log (opsional)",
|
||||
"logGrep": "Garis filter...",
|
||||
"firewallPersist": "Pertahankan aturan",
|
||||
"firewallPersisted": "Aturan firewall tetap berlaku.",
|
||||
"wireguard": "Pelindung Kawat",
|
||||
"tailscale": "Skala ekor",
|
||||
"wgNotInstalled": "WireGuard tidak terpasang pada host ini.",
|
||||
"wgNoInterfaces": "Tidak ada antarmuka WireGuard yang dikonfigurasi.",
|
||||
"wgInterfaceUp": "Membesarkan",
|
||||
"wgInterfaceDown": "Menurunkan",
|
||||
"wgBringingUp": "Membawa {{name}} ke atas...",
|
||||
"wgBringingDown": "Menurunkan {{name}}...",
|
||||
"wgInterfaceUpDone": "{{name}} sudah aktif",
|
||||
"wgInterfaceDownDone": "{{name}} sedang down",
|
||||
"wgListenPort": "Pelabuhan",
|
||||
"wgPublicKey": "Kunci publik",
|
||||
"wgEndpoint": "Titik akhir",
|
||||
"wgAllowedIPs": "IP yang Diizinkan",
|
||||
"wgLastHandshake": "Jabat tangan terakhir",
|
||||
"wgHandshakeNever": "Tidak pernah",
|
||||
"wgTransfer": "Transfer",
|
||||
"tsNotInstalled": "Tailscale tidak terpasang pada host ini.",
|
||||
"tsRunning": "Berlari",
|
||||
"tsStopped": "Berhenti",
|
||||
"tsEnable": "Menghubungkan",
|
||||
"tsDisable": "Memutuskan",
|
||||
"tsEnabling": "Menghubungkan ke Tailscale...",
|
||||
"tsDisabling": "Memutus koneksi dari Tailscale...",
|
||||
"tsEnabled": "Sisik ekor terhubung",
|
||||
"tsDisabled": "Sisik ekor terputus",
|
||||
"tsIPs": "IP Tailscale",
|
||||
"tsPeers": "Rekan sejawat",
|
||||
"tsOnline": "On line",
|
||||
"tsOffline": "Offline",
|
||||
"tsExitNode": "Node keluar",
|
||||
"tsExitNodeActive": "Node keluar aktif",
|
||||
"tsHostname": "Nama host"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Riwayat Metrik",
|
||||
"historySuffix": "Sejarah",
|
||||
"cpuMemoryDisk": "CPU / Memori / Disk",
|
||||
"network": "Jaringan",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "Tidak ada data riwayat yang tersedia untuk rentang waktu ini.",
|
||||
"custom": "Kebiasaan",
|
||||
"to": "ke",
|
||||
"apply": "Menerapkan",
|
||||
"viewHistory": "Lihat Riwayat"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Statistik Proxmox",
|
||||
"cpuUsage": "Penggunaan CPU",
|
||||
"memoryUsage": "Penggunaan Memori",
|
||||
"diskUsage": "Penggunaan Disk",
|
||||
"networkInterfaces": "Antarmuka Jaringan",
|
||||
"uptime": "Waktu aktif",
|
||||
"systemInfo": "Informasi Sistem",
|
||||
"guestsSummary": "Tamu",
|
||||
"storagePools": "Kolam Penyimpanan",
|
||||
"clusterHealth": "Kesehatan Klaster",
|
||||
"cpuCores_one": "{{count}} Inti",
|
||||
"cpuCores_other": "{{count}} Inti",
|
||||
"used": "Digunakan",
|
||||
"total": "Total",
|
||||
"hostname": "Nama host",
|
||||
"kernel": "Inti",
|
||||
"pveVersion": "Versi PVE",
|
||||
"name": "Nama",
|
||||
"status": "Status",
|
||||
"type": "Jenis",
|
||||
"cpu": "CPU",
|
||||
"mem": "Mem",
|
||||
"disk": "Disk",
|
||||
"running": "Berlari",
|
||||
"stopped": "Berhenti",
|
||||
"guestCounts": "{{running}}/{{total}} berjalan",
|
||||
"inactive": "Tidak aktif",
|
||||
"notClustered": "Node mandiri (bukan bagian dari klaster)",
|
||||
"quorate": "Kutipan",
|
||||
"notQuorate": "Tidak memenuhi kuorum",
|
||||
"nodeOnline": "On line",
|
||||
"nodeOffline": "Offline",
|
||||
"noHostSelected": "Tidak ada pembawa acara yang dipilih.",
|
||||
"pveshNotFound": "pvesh tidak ditemukan - apakah ini node Proxmox?",
|
||||
"nodeDetectionFailed": "Tidak dapat menentukan nama node Proxmox yang valid.",
|
||||
"connecting": "Menghubungkan...",
|
||||
"connectionFailed": "Gagal terhubung ke node Proxmox",
|
||||
"refresh": "Menyegarkan",
|
||||
"searchGuests": "Mencari tamu...",
|
||||
"filterAll": "Semua",
|
||||
"filterVm": "Mesin virtual",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "Tidak ditemukan VM atau kontainer LXC pada node ini.",
|
||||
"noGuestsMatch": "Tidak ada tamu yang sesuai dengan filter saat ini."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Metrik Host"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Metrik Host",
|
||||
"enableProxmoxStats": "Aktifkan Statistik Proxmox",
|
||||
"enableProxmoxStatsDesc": "Tampilkan tab Statistik Proxmox untuk host ini dengan statistik node, guest, penyimpanan, dan cluster secara langsung yang dikumpulkan melalui SSH.",
|
||||
"proxmoxStatsPollInterval": "Interval polling (detik)",
|
||||
"proxmoxStatsPollIntervalDesc": "Minimal 15 detik. Seberapa sering statistik node Proxmox diperbarui.",
|
||||
"proxmoxStatsNodeOverride": "Penggantian nama node",
|
||||
"proxmoxStatsNodeOverrideDesc": "Ganti deteksi otomatis nama node Proxmox (yang secara default dideteksi melalui nama host).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Terdeteksi secara otomatis dari nama host",
|
||||
"metricsCollectionLabel": "Pengumpulan Metrik",
|
||||
"enableMetricsLabel": "Aktifkan Metrik",
|
||||
"enableMetricsDesc": "Kumpulkan data CPU, RAM, disk, dan metrik lainnya dari host ini.",
|
||||
"useGlobalMetrics": "Gunakan Interval Global",
|
||||
"useGlobalMetricsDesc": "Ganti dengan interval metrik di seluruh server.",
|
||||
"metricsIntervalS": "Interval Metrik (detik)",
|
||||
"metricsIntervalDesc2": "Detik antara pengambilan snapshot metrik",
|
||||
"excludedMountsLabel": "Dudukan yang Dikecualikan",
|
||||
"monitoredMountsLabel": "Jalur pemantauan khusus",
|
||||
"monitoredMountsDesc": "Tambahkan jalur yang tidak terekspos sebagai mount terpisah, termasuk jalur Home Assistant yang dipasang secara bind-mount seperti /config.",
|
||||
"monitoredMountPathPlaceholder": "Jalur (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Label (opsional)",
|
||||
"addMonitoredMount": "Tambahkan jalur",
|
||||
"excludedMountsDesc": "Sembunyikan titik pemasangan atau jenis sistem file tertentu (misalnya nfs, cifs) dari penggunaan disk dan peringatan untuk host ini.",
|
||||
"excludedMountsPlaceholder": "Jalur pemasangan (/mnt/nas) atau tipe sistem file (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Tidak ada mount yang dikecualikan. Semua sistem file yang terdeteksi ditampilkan.",
|
||||
"addExcludedMount": "Menambahkan",
|
||||
"visibleWidgets": "Widget yang Terlihat",
|
||||
"widgetsMovedToHostMetrics": "Kartu sekarang ditambahkan, diatur, dan diubah ukurannya langsung di tab Metrik Host. Buka Metrik Host untuk host ini dan gunakan Sesuaikan untuk memilih kartu mana yang akan ditampilkan.",
|
||||
"quickActionsLabel": "Tindakan Cepat",
|
||||
"quickActionsToolbar": "Tindakan cepat muncul sebagai tombol di bilah alat Metrik Host untuk eksekusi perintah sekali klik.",
|
||||
"noQuickActions": "Belum ada tindakan cepat.",
|
||||
"buttonLabel": "Label tombol",
|
||||
"selectSnippetPlaceholder": "Pilih cuplikan...",
|
||||
"addActionBtn": "Tambahkan Tindakan"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Metrik dan peringatan",
|
||||
"feature_metrics_desc": "Pantau CPU, memori, dan disk dari waktu ke waktu, dan dapatkan peringatan saat terjadi kerusakan."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Retensi Riwayat Metrik",
|
||||
"metricsHistoryRetentionRange": "1 hingga 90 hari",
|
||||
"days": "hari"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Tidak ada data yang tersedia",
|
||||
"showCurrentValue": "Tampilkan Nilai Saat Ini",
|
||||
"chartMetric": "Metrik",
|
||||
"metricRange": "Jangkauan"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "Memoria",
|
||||
"disk": "Disco",
|
||||
"network": "Rete",
|
||||
"uptime": "Tempo di attività",
|
||||
"processes": "Processi",
|
||||
"available": "Disponibile",
|
||||
"free": "Libero",
|
||||
"connecting": "Connessione in corso...",
|
||||
"connectionFailed": "Connessione al server non riuscita",
|
||||
"naCpus": "CPU N/D",
|
||||
"cpuCores_one": "{{count}} Core",
|
||||
"cpuCores_other": "{{count}} Core",
|
||||
"cpuUsage": "Utilizzo CPU",
|
||||
"memoryUsage": "Utilizzo memoria",
|
||||
"diskUsage": "Utilizzo disco",
|
||||
"selectFilesystem": "Seleziona il filesystem",
|
||||
"temperature": "Temperatura",
|
||||
"highestTemperature": "Temperatura massima",
|
||||
"primaryTemperatureSensor": "Sensore primario",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "Nessuna GPU NVIDIA rilevata. Installa il driver NVIDIA (che fornisce nvidia-smi) per visualizzare le metriche della GPU.",
|
||||
"driver": "Autista {{version}}",
|
||||
"utilization": "Utilizzo",
|
||||
"memory": "VRAM",
|
||||
"temperature": "Temp",
|
||||
"power": "Energia",
|
||||
"fan": "Fan",
|
||||
"processes": "Elaborazione GPU",
|
||||
"noProcesses": "Nessun processo sta utilizzando la GPU"
|
||||
},
|
||||
"failedToFetchHostConfig": "Recupero configurazione host non riuscito",
|
||||
"serverOffline": "Server offline",
|
||||
"cannotFetchMetrics": "Impossibile recuperare le metriche dal server offline",
|
||||
"totpFailed": "Verifica TOTP non riuscita",
|
||||
"noneAuthNotSupported": "Host Metrics non supporta il tipo di autenticazione 'none'.",
|
||||
"noHostSelected": "Nessun host selezionato",
|
||||
"load": "Carico",
|
||||
"systemInfo": "Informazioni di sistema",
|
||||
"hostname": "Nome host",
|
||||
"operatingSystem": "Sistema operativo",
|
||||
"kernel": "Kernel",
|
||||
"seconds": "secondi",
|
||||
"networkInterfaces": "Interfacce di rete",
|
||||
"noInterfacesFound": "Nessuna interfaccia di rete trovata",
|
||||
"noProcessesFound": "Nessun processo trovato",
|
||||
"processesTotal": "totale",
|
||||
"processesRunning": "in esecuzione",
|
||||
"loginStats": "Statistiche di accesso SSH",
|
||||
"noRecentLoginData": "Nessun dato di accesso recente",
|
||||
"executingQuickAction": "Esecuzione di {{name}}...",
|
||||
"quickActionSuccess": "{{name}} completato con successo",
|
||||
"quickActionFailed": "{{name}} non riuscito",
|
||||
"quickActionError": "Impossibile eseguire {{name}}",
|
||||
"ports": {
|
||||
"title": "Porte in ascolto",
|
||||
"protocol": "Protocollo",
|
||||
"port": "Porta",
|
||||
"address": "Indirizzo",
|
||||
"process": "Processo",
|
||||
"search": "Cerca porte...",
|
||||
"allProtocols": "Tutti",
|
||||
"noData": "Nessun dato sulle porte in ascolto"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Firewall",
|
||||
"inactive": "Inattivo",
|
||||
"policy": "Politica",
|
||||
"rules": "regole",
|
||||
"noRules": "Nessuna regola in questa catena",
|
||||
"noData": "Nessun dato sul firewall disponibile",
|
||||
"action": "Azione",
|
||||
"protocol": "Proto",
|
||||
"port": "Porta",
|
||||
"source": "Sorgente",
|
||||
"anywhere": "Ovunque",
|
||||
"chains": "Catene"
|
||||
},
|
||||
"loadAvg": "Carico medio",
|
||||
"swap": "Swap",
|
||||
"architecture": "Architettura",
|
||||
"refresh": "Aggiorna",
|
||||
"retry": "Riprova",
|
||||
"customize": "Personalizza layout",
|
||||
"reset": "Reimposta",
|
||||
"tabLive": "Live",
|
||||
"editModeInstructions": "Trascina le schede per riordinarle, trascina il bordo inferiore per ridimensionarle e usa il pulsante della larghezza per modificare l'estensione della scheda. Aggiungi o rimuovi schede qui sotto.",
|
||||
"managers": {
|
||||
"services": "Servizi",
|
||||
"processInspector": "Ispettore dei processi",
|
||||
"logViewer": "Visualizzatore di log",
|
||||
"cron": "Cron",
|
||||
"packages": "Pacchetti",
|
||||
"ssl": "Certificati SSL",
|
||||
"firewall": "Firewall",
|
||||
"users": "Utenti e permessi",
|
||||
"healthCheck": "Controlli di integrità",
|
||||
"diskBreakdown": "Analisi del disco",
|
||||
"systemdTimers": "Timer",
|
||||
"topMemory": "Principali per memoria",
|
||||
"noData": "Nessun dato",
|
||||
"sudoHint": "Imposta una password sudo per questo host nell'editor host per abilitare azioni privilegiate.",
|
||||
"filter": "Filtra...",
|
||||
"start": "Avvia",
|
||||
"stop": "Ferma",
|
||||
"restart": "Riavvia",
|
||||
"actionDone": "{{name}} aggiornato",
|
||||
"actionFailed": "Azione non riuscita",
|
||||
"signalSent": "Segnale inviato al PID {{pid}}",
|
||||
"killHint": "Clic: termina (SIGTERM). Clic destro: terminazione forzata (SIGKILL).",
|
||||
"working": "In corso...",
|
||||
"update": "Aggiorna",
|
||||
"upgradeAll": "Aggiorna tutto",
|
||||
"allUpToDate": "Tutto aggiornato",
|
||||
"save": "Salva",
|
||||
"command": "Comando",
|
||||
"enabled": "Abilitato",
|
||||
"cronSaved": "Crontab aggiornato",
|
||||
"clients": "Client",
|
||||
"dryRun": "Prova",
|
||||
"renew": "Rinnova",
|
||||
"noAcmeClient": "Nessun client ACME (certbot o acme.sh) trovato su questo host.",
|
||||
"addInputRule": "Aggiungi regola INPUT",
|
||||
"firewallWarning": "Le modifiche sono solo runtime finché non vengono rese permanenti. Fai attenzione a non rimanere bloccato fuori.",
|
||||
"ruleApplied": "Regola applicata",
|
||||
"invalidPort": "Inserisci una porta valida (1-65535)",
|
||||
"newUsername": "Nuovo nome utente",
|
||||
"addUser": "Aggiungi",
|
||||
"deleteUser": "Elimina utente",
|
||||
"noHealthChecks": "Nessun health check configurato al momento.",
|
||||
"follow": "Segui",
|
||||
"noLogData": "Nessun output di log.",
|
||||
"tree": "Albero",
|
||||
"enableDisable": "Abilita / disabilita all'avvio",
|
||||
"grantSudo": "Concedi sudo",
|
||||
"revokeSudo": "Revoca sudo",
|
||||
"sslIssueCert": "Emetti certificato",
|
||||
"sslExpired": "Scaduto",
|
||||
"sslInDays": "in {{days}}d",
|
||||
"sslNeedDomain": "Inserisci almeno un dominio",
|
||||
"sslIssued": "Certificato emesso",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (standalone)",
|
||||
"sslHttpWebroot": "HTTP (webroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "Provider DNS (es. cloudflare)",
|
||||
"sslIssueHint": "Le credenziali del provider DNS devono essere già configurate sull'host.",
|
||||
"sslRevoke": "Revoca certificato",
|
||||
"sslRevoked": "Certificato revocato",
|
||||
"sslRevokeConfirm": "Revocare e rimuovere il certificato \"{{name}}\"? Questa azione non può essere annullata.",
|
||||
"healthRun": "Esegui",
|
||||
"healthName": "Nome",
|
||||
"healthTarget": "Host / indirizzo",
|
||||
"healthAddCheck": "Aggiungi controllo",
|
||||
"healthSaved": "Controlli di integrità salvati",
|
||||
"healthMissingFields": "Ogni controllo richiede un nome e un obiettivo",
|
||||
"logFile": "File",
|
||||
"logUnit": "Unità",
|
||||
"logCustomPath": "Percorso personalizzato in /var/log (opzionale)",
|
||||
"logGrep": "Filtra righe...",
|
||||
"firewallPersist": "Rendi permanenti le regole",
|
||||
"firewallPersisted": "Regole del firewall rese permanenti",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Tailscale",
|
||||
"wgNotInstalled": "WireGuard non è installato su questo host",
|
||||
"wgNoInterfaces": "Nessuna interfaccia WireGuard configurata",
|
||||
"wgInterfaceUp": "Attiva",
|
||||
"wgInterfaceDown": "Disattiva",
|
||||
"wgBringingUp": "Attivazione di {{name}} in corso...",
|
||||
"wgBringingDown": "Disattivazione di {{name}} in corso...",
|
||||
"wgInterfaceUpDone": "{{name}} è attivo",
|
||||
"wgInterfaceDownDone": "{{name}} è disattivo",
|
||||
"wgListenPort": "Porta",
|
||||
"wgPublicKey": "Chiave pubblica",
|
||||
"wgEndpoint": "Endpoint",
|
||||
"wgAllowedIPs": "IP consentiti",
|
||||
"wgLastHandshake": "Ultimo handshake",
|
||||
"wgHandshakeNever": "Mai",
|
||||
"wgTransfer": "Trasferimento",
|
||||
"tsNotInstalled": "Tailscale non è installato su questo host",
|
||||
"tsRunning": "In esecuzione",
|
||||
"tsStopped": "Arrestato",
|
||||
"tsEnable": "Connetti",
|
||||
"tsDisable": "Disconnetti",
|
||||
"tsEnabling": "Connessione a Tailscale in corso...",
|
||||
"tsDisabling": "Disconnessione da Tailscale in corso...",
|
||||
"tsEnabled": "Tailscale connesso",
|
||||
"tsDisabled": "Tailscale disconnesso",
|
||||
"tsIPs": "IP Tailscale",
|
||||
"tsPeers": "Peer",
|
||||
"tsOnline": "Online",
|
||||
"tsOffline": "Offline",
|
||||
"tsExitNode": "Nodo di uscita",
|
||||
"tsExitNodeActive": "Nodo di uscita attivo",
|
||||
"tsHostname": "Nome host"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Cronologia metriche",
|
||||
"historySuffix": "Cronologia",
|
||||
"cpuMemoryDisk": "CPU / Memoria / Disco",
|
||||
"network": "Rete",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "Nessun dato storico disponibile per questo intervallo di tempo.",
|
||||
"custom": "Personalizzato",
|
||||
"to": "a",
|
||||
"apply": "Applica",
|
||||
"viewHistory": "Visualizza cronologia"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Statistiche di Proxmox",
|
||||
"cpuUsage": "Utilizzo della CPU",
|
||||
"memoryUsage": "Utilizzo della memoria",
|
||||
"diskUsage": "Utilizzo del disco",
|
||||
"networkInterfaces": "Interfacce di rete",
|
||||
"uptime": "Tempo di attività",
|
||||
"systemInfo": "Informazioni di sistema",
|
||||
"guestsSummary": "Ospiti",
|
||||
"storagePools": "Piscine di stoccaggio",
|
||||
"clusterHealth": "Cluster Health",
|
||||
"cpuCores_one": "{{count}} Nucleo",
|
||||
"cpuCores_other": "{{count}} Nuclei",
|
||||
"used": "Usato",
|
||||
"total": "Totale",
|
||||
"hostname": "Nome host",
|
||||
"kernel": "Kernel",
|
||||
"pveVersion": "Versione PVE",
|
||||
"name": "Nome",
|
||||
"status": "Stato",
|
||||
"type": "Tipo",
|
||||
"cpu": "processore",
|
||||
"mem": "Mem",
|
||||
"disk": "Disco",
|
||||
"running": "Corsa",
|
||||
"stopped": "Si è fermato",
|
||||
"guestCounts": "{{running}}/{{total}} in esecuzione",
|
||||
"inactive": "Inattivo",
|
||||
"notClustered": "Nodo autonomo (non facente parte di un cluster)",
|
||||
"quorate": "Citazione",
|
||||
"notQuorate": "Non è stato raggiunto il quorum",
|
||||
"nodeOnline": "Online",
|
||||
"nodeOffline": "Offline",
|
||||
"noHostSelected": "Nessun host selezionato",
|
||||
"pveshNotFound": "pvesh non trovato: si tratta di un nodo Proxmox?",
|
||||
"nodeDetectionFailed": "Impossibile determinare un nome nodo Proxmox valido",
|
||||
"connecting": "Connessione in corso...",
|
||||
"connectionFailed": "Impossibile connettersi al nodo Proxmox",
|
||||
"refresh": "Rinfrescato",
|
||||
"searchGuests": "Cerca ospiti...",
|
||||
"filterAll": "Tutto",
|
||||
"filterVm": "VM",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "Nessuna macchina virtuale o container LXC trovato su questo nodo.",
|
||||
"noGuestsMatch": "Nessun ospite corrisponde ai filtri attualmente attivi."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Metriche host"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Metriche host",
|
||||
"enableProxmoxStats": "Abilita le statistiche di Proxmox",
|
||||
"enableProxmoxStatsDesc": "Mostra la scheda Statistiche di Proxmox per questo host con statistiche in tempo reale su nodi, guest, storage e cluster, raccolte tramite SSH.",
|
||||
"proxmoxStatsPollInterval": "Intervallo di polling (secondi)",
|
||||
"proxmoxStatsPollIntervalDesc": "Minimo 15 secondi. Frequenza di aggiornamento delle statistiche dei nodi Proxmox.",
|
||||
"proxmoxStatsNodeOverride": "Sovrascrittura del nome del nodo",
|
||||
"proxmoxStatsNodeOverrideDesc": "Ignora il rilevamento automatico del nome del nodo Proxmox (rilevato tramite nome host per impostazione predefinita).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Rilevato automaticamente dal nome host",
|
||||
"metricsCollectionLabel": "Raccolta metriche",
|
||||
"enableMetricsLabel": "Abilita metriche",
|
||||
"enableMetricsDesc": "Raccogli CPU, RAM, disco e altre metriche da questo host",
|
||||
"useGlobalMetrics": "Usa intervallo globale",
|
||||
"useGlobalMetricsDesc": "Sovrascrivi con l'intervallo delle metriche del server",
|
||||
"metricsIntervalS": "Intervallo metriche (s)",
|
||||
"metricsIntervalDesc2": "Secondi tra uno snapshot delle metriche e l'altro",
|
||||
"excludedMountsLabel": "Montature escluse",
|
||||
"monitoredMountsLabel": "Percorsi monitorati personalizzati",
|
||||
"monitoredMountsDesc": "Aggiungi i percorsi che non sono esposti come mount separati, inclusi i percorsi di Home Assistant montati tramite bind, come /config.",
|
||||
"monitoredMountPathPlaceholder": "Percorso (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Etichetta (facoltativa)",
|
||||
"addMonitoredMount": "Aggiungi percorso",
|
||||
"excludedMountsDesc": "Nascondi specifici punti di montaggio o tipi di filesystem (ad esempio nfs, cifs) dall'utilizzo del disco e dagli avvisi per questo host.",
|
||||
"excludedMountsPlaceholder": "Percorso di montaggio (/mnt/nas) o tipo di filesystem (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Nessun mount escluso. Vengono mostrati tutti i filesystem rilevati.",
|
||||
"addExcludedMount": "Aggiungere",
|
||||
"visibleWidgets": "Widget visibili",
|
||||
"widgetsMovedToHostMetrics": "Le schede ora vengono aggiunte, disposte e ridimensionate direttamente nella scheda Metriche host. Apri Metriche host per questo host e usa Personalizza per scegliere quali schede mostrare.",
|
||||
"quickActionsLabel": "Azioni Rapide",
|
||||
"quickActionsToolbar": "Le azioni rapide appaiono come pulsanti nella barra delle metriche host per l'esecuzione di comandi con un clic.",
|
||||
"noQuickActions": "Nessuna azione rapida ancora.",
|
||||
"buttonLabel": "Etichetta pulsante",
|
||||
"selectSnippetPlaceholder": "Seleziona snippet...",
|
||||
"addActionBtn": "Aggiungi Azione"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Metriche e avvisi",
|
||||
"feature_metrics_desc": "Monitora l'utilizzo di CPU, memoria e disco nel tempo e ricevi avvisi in caso di malfunzionamenti."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Conservazione cronologia metriche",
|
||||
"metricsHistoryRetentionRange": "Da 1 a 90 giorni",
|
||||
"days": "giorni"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Nessun dato disponibile",
|
||||
"showCurrentValue": "Mostra valore corrente",
|
||||
"chartMetric": "Metrica",
|
||||
"metricRange": "Intervallo"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "メモリ",
|
||||
"disk": "ディスク",
|
||||
"network": "ネットワーク",
|
||||
"uptime": "稼働時間",
|
||||
"processes": "プロセス",
|
||||
"available": "利用可能",
|
||||
"free": "空き",
|
||||
"connecting": "接続中...",
|
||||
"connectionFailed": "サーバーへの接続に失敗しました",
|
||||
"naCpus": "N/A CPU",
|
||||
"cpuCores_one": "{{count}} コア",
|
||||
"cpuCores_other": "{{count}} コア",
|
||||
"cpuUsage": "CPU使用率",
|
||||
"memoryUsage": "メモリ使用率",
|
||||
"diskUsage": "ディスク使用率",
|
||||
"selectFilesystem": "ファイルシステムを選択",
|
||||
"temperature": "温度",
|
||||
"highestTemperature": "最高温度",
|
||||
"primaryTemperatureSensor": "プライマリーセンサー",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "NVIDIA GPUが検出されませんでした。GPUのメトリックを表示するには、NVIDIAドライバーをインストールしてください(ドライバーにはnvidia-smiが含まれています)。",
|
||||
"driver": "ドライバー {{version}}",
|
||||
"utilization": "利用",
|
||||
"memory": "VRAM",
|
||||
"temperature": "温度",
|
||||
"power": "力",
|
||||
"fan": "ファン",
|
||||
"processes": "GPUプロセス",
|
||||
"noProcesses": "GPUを使用しているプロセスはありません"
|
||||
},
|
||||
"failedToFetchHostConfig": "ホスト設定の取得に失敗しました",
|
||||
"serverOffline": "サーバーオフライン",
|
||||
"cannotFetchMetrics": "オフラインのサーバーからメトリクスを取得できません。",
|
||||
"totpFailed": "TOTP検証に失敗しました",
|
||||
"noneAuthNotSupported": "ホストメトリクスは「none」認証タイプをサポートしていません。",
|
||||
"noHostSelected": "ホストが選択されていません",
|
||||
"load": "負荷",
|
||||
"systemInfo": "システム情報",
|
||||
"hostname": "ホスト名",
|
||||
"operatingSystem": "オペレーティングシステム",
|
||||
"kernel": "カーネル",
|
||||
"seconds": "秒",
|
||||
"networkInterfaces": "ネットワークインターフェース",
|
||||
"noInterfacesFound": "ネットワークインターフェースが見つかりません",
|
||||
"noProcessesFound": "プロセスが見つかりません",
|
||||
"processesTotal": "合計",
|
||||
"processesRunning": "実行中",
|
||||
"loginStats": "SSHログイン統計",
|
||||
"noRecentLoginData": "最近のログインデータがありません",
|
||||
"executingQuickAction": "{{name}} を実行中...",
|
||||
"quickActionSuccess": "{{name}} が正常に完了しました",
|
||||
"quickActionFailed": "{{name}} が失敗しました",
|
||||
"quickActionError": "{{name}} の実行に失敗しました",
|
||||
"ports": {
|
||||
"title": "リスニングポート",
|
||||
"protocol": "プロトコル",
|
||||
"port": "ポート",
|
||||
"address": "アドレス",
|
||||
"process": "プロセス",
|
||||
"search": "ポートを検索...",
|
||||
"allProtocols": "すべて",
|
||||
"noData": "リスニングポートのデータがありません"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "ファイアウォール",
|
||||
"inactive": "非アクティブ",
|
||||
"policy": "ポリシー",
|
||||
"rules": "ルール",
|
||||
"noRules": "このチェーンにルールはありません",
|
||||
"noData": "利用可能なファイアウォールデータがありません",
|
||||
"action": "アクション",
|
||||
"protocol": "プロトコル",
|
||||
"port": "ポート",
|
||||
"source": "ソース",
|
||||
"anywhere": "任意",
|
||||
"chains": "チェーン"
|
||||
},
|
||||
"loadAvg": "ロードアベレージ",
|
||||
"swap": "スワップ",
|
||||
"architecture": "アーキテクチャ",
|
||||
"refresh": "更新",
|
||||
"retry": "再試行",
|
||||
"customize": "レイアウトをカスタマイズ",
|
||||
"reset": "リセット",
|
||||
"tabLive": "ライブ",
|
||||
"editModeInstructions": "カードをドラッグして並べ替え、下辺をドラッグしてサイズを変更し、幅ボタンでカードのスパンを変更します。下のボタンでカードを追加または削除してください。",
|
||||
"managers": {
|
||||
"services": "サービス",
|
||||
"processInspector": "プロセスインスペクタ",
|
||||
"logViewer": "ログビューア",
|
||||
"cron": "Cronジョブ",
|
||||
"packages": "パッケージ",
|
||||
"ssl": "SSL証明書",
|
||||
"firewall": "ファイアウォール",
|
||||
"users": "ユーザーと権限",
|
||||
"healthCheck": "ヘルスチェック",
|
||||
"diskBreakdown": "ディスク内訳",
|
||||
"systemdTimers": "タイマー",
|
||||
"topMemory": "メモリ使用量トップ",
|
||||
"noData": "データなし",
|
||||
"sudoHint": "特権アクションを有効にするには、ホストエディタでこのホストのsudoパスワードを設定してください。",
|
||||
"filter": "フィルター...",
|
||||
"start": "起動",
|
||||
"stop": "停止",
|
||||
"restart": "再起動",
|
||||
"actionDone": "{{name}} が更新されました",
|
||||
"actionFailed": "アクションに失敗しました",
|
||||
"signalSent": "PID {{pid}} にシグナルが送信されました",
|
||||
"killHint": "クリック: 終了 (SIGTERM)。右クリック: 強制終了 (SIGKILL)。",
|
||||
"working": "処理中...",
|
||||
"update": "更新",
|
||||
"upgradeAll": "すべてアップグレード",
|
||||
"allUpToDate": "すべて最新です",
|
||||
"save": "保存",
|
||||
"command": "コマンド",
|
||||
"enabled": "有効",
|
||||
"cronSaved": "crontab を更新しました",
|
||||
"clients": "クライアント",
|
||||
"dryRun": "ドライラン",
|
||||
"renew": "更新",
|
||||
"noAcmeClient": "このホストに ACME クライアント (certbot または acme.sh) が見つかりません。",
|
||||
"addInputRule": "INPUT ルールを追加",
|
||||
"firewallWarning": "変更は永続化されるまで実行中のみ有効です。自分をロックアウトしないよう注意してください。",
|
||||
"ruleApplied": "ルールを適用しました",
|
||||
"invalidPort": "有効なポート番号 (1-65535) を入力してください",
|
||||
"newUsername": "新しいユーザー名",
|
||||
"addUser": "追加",
|
||||
"deleteUser": "ユーザーを削除",
|
||||
"noHealthChecks": "ヘルスチェックはまだ設定されていません。",
|
||||
"follow": "フォロー",
|
||||
"noLogData": "ログ出力がありません。",
|
||||
"tree": "ツリー",
|
||||
"enableDisable": "起動時に有効/無効",
|
||||
"grantSudo": "sudo 権限を付与",
|
||||
"revokeSudo": "sudo 権限を剥奪",
|
||||
"sslIssueCert": "証明書を発行",
|
||||
"sslExpired": "期限切れ",
|
||||
"sslInDays": "あと {{days}} 日",
|
||||
"sslNeedDomain": "少なくとも1つのドメインを入力してください",
|
||||
"sslIssued": "証明書が発行されました",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (スタンドアロン)",
|
||||
"sslHttpWebroot": "HTTP (webroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "DNSプロバイダ(例: cloudflare)",
|
||||
"sslIssueHint": "DNSプロバイダの認証情報はホストに設定済みである必要があります。",
|
||||
"sslRevoke": "証明書を失効",
|
||||
"sslRevoked": "証明書が失効しました",
|
||||
"sslRevokeConfirm": "証明書 \"{{name}}\"を失効して削除しますか?この操作は取り消せません。",
|
||||
"healthRun": "実行",
|
||||
"healthName": "名前",
|
||||
"healthTarget": "ホスト / アドレス",
|
||||
"healthAddCheck": "チェックを追加",
|
||||
"healthSaved": "ヘルスチェックが保存されました",
|
||||
"healthMissingFields": "各チェックには名前とターゲットが必要です",
|
||||
"logFile": "ファイル",
|
||||
"logUnit": "ユニット",
|
||||
"logCustomPath": "/var/log 以下のカスタムパス (任意)",
|
||||
"logGrep": "行をフィルタ...",
|
||||
"firewallPersist": "ルールを永続化",
|
||||
"firewallPersisted": "ファイアウォールルールが永続化されました",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Tailscale",
|
||||
"wgNotInstalled": "このホストにWireGuardがインストールされていません",
|
||||
"wgNoInterfaces": "WireGuardインターフェースが設定されていません",
|
||||
"wgInterfaceUp": "起動",
|
||||
"wgInterfaceDown": "停止",
|
||||
"wgBringingUp": "{{name}}を起動中...",
|
||||
"wgBringingDown": "{{name}}を停止中...",
|
||||
"wgInterfaceUpDone": "{{name}}が起動しました",
|
||||
"wgInterfaceDownDone": "{{name}}が停止しました",
|
||||
"wgListenPort": "ポート",
|
||||
"wgPublicKey": "公開鍵",
|
||||
"wgEndpoint": "エンドポイント",
|
||||
"wgAllowedIPs": "許可されたIP",
|
||||
"wgLastHandshake": "最終ハンドシェイク",
|
||||
"wgHandshakeNever": "なし",
|
||||
"wgTransfer": "転送量",
|
||||
"tsNotInstalled": "このホストにTailscaleがインストールされていません",
|
||||
"tsRunning": "実行中",
|
||||
"tsStopped": "停止中",
|
||||
"tsEnable": "接続",
|
||||
"tsDisable": "切断",
|
||||
"tsEnabling": "Tailscaleに接続中...",
|
||||
"tsDisabling": "Tailscaleから切断中...",
|
||||
"tsEnabled": "Tailscale接続済み",
|
||||
"tsDisabled": "Tailscale切断済み",
|
||||
"tsIPs": "Tailscale IP",
|
||||
"tsPeers": "ピア",
|
||||
"tsOnline": "オンライン",
|
||||
"tsOffline": "オフライン",
|
||||
"tsExitNode": "Exitノード",
|
||||
"tsExitNodeActive": "Exitノード有効",
|
||||
"tsHostname": "ホスト名"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "メトリクス履歴",
|
||||
"historySuffix": "履歴",
|
||||
"cpuMemoryDisk": "CPU / メモリ / ディスク",
|
||||
"network": "ネットワーク",
|
||||
"download": "受信",
|
||||
"upload": "送信",
|
||||
"noData": "この期間の履歴データはありません。",
|
||||
"custom": "カスタム",
|
||||
"to": "~",
|
||||
"apply": "適用",
|
||||
"viewHistory": "履歴を表示"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Proxmox統計情報",
|
||||
"cpuUsage": "CPU使用率",
|
||||
"memoryUsage": "メモリ使用量",
|
||||
"diskUsage": "ディスク使用量",
|
||||
"networkInterfaces": "ネットワークインターフェース",
|
||||
"uptime": "稼働時間",
|
||||
"systemInfo": "システム情報",
|
||||
"guestsSummary": "ゲスト",
|
||||
"storagePools": "ストレージプール",
|
||||
"clusterHealth": "クラスターヘルス",
|
||||
"cpuCores_one": "{{count}} コア",
|
||||
"cpuCores_other": "{{count}} コア",
|
||||
"used": "使用済み",
|
||||
"total": "合計",
|
||||
"hostname": "ホスト名",
|
||||
"kernel": "カーネル",
|
||||
"pveVersion": "PVEバージョン",
|
||||
"name": "名前",
|
||||
"status": "状態",
|
||||
"type": "タイプ",
|
||||
"cpu": "CPU",
|
||||
"mem": "メモリ",
|
||||
"disk": "ディスク",
|
||||
"running": "ランニング",
|
||||
"stopped": "停止しました",
|
||||
"guestCounts": "{{running}}/{{total}} 実行中",
|
||||
"inactive": "非アクティブ",
|
||||
"notClustered": "スタンドアロンノード(クラスタの一部ではない)",
|
||||
"quorate": "引用",
|
||||
"notQuorate": "定足数に満たない",
|
||||
"nodeOnline": "オンライン",
|
||||
"nodeOffline": "オフライン",
|
||||
"noHostSelected": "ホストが選択されていません",
|
||||
"pveshNotFound": "pveshが見つかりません - これはProxmoxノードですか?",
|
||||
"nodeDetectionFailed": "有効な Proxmox ノード名を特定できません",
|
||||
"connecting": "接続中...",
|
||||
"connectionFailed": "Proxmoxノードへの接続に失敗しました",
|
||||
"refresh": "更新",
|
||||
"searchGuests": "ゲストを検索...",
|
||||
"filterAll": "全て",
|
||||
"filterVm": "VM",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "このノード上にはVMまたはLXCコンテナは見つかりませんでした。",
|
||||
"noGuestsMatch": "現在の検索条件に一致するゲストはいません。"
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "ホストメトリクス"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "ホストメトリクス",
|
||||
"enableProxmoxStats": "Proxmox Statsを有効にする",
|
||||
"enableProxmoxStatsDesc": "SSH経由で収集された、このホストのリアルタイムのノード、ゲスト、ストレージ、およびクラスタの統計情報を表示するProxmox統計タブを表示します。",
|
||||
"proxmoxStatsPollInterval": "ポーリング間隔(秒)",
|
||||
"proxmoxStatsPollIntervalDesc": "最低15秒。Proxmoxノードの統計情報を更新する頻度。",
|
||||
"proxmoxStatsNodeOverride": "ノード名の上書き",
|
||||
"proxmoxStatsNodeOverrideDesc": "Proxmoxノード名の自動検出(デフォルトではホスト名で検出)を上書きします。",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "ホスト名から自動検出",
|
||||
"metricsCollectionLabel": "メトリクス収集",
|
||||
"enableMetricsLabel": "メトリクスを有効にする",
|
||||
"enableMetricsDesc": "このホストから CPU、RAM、ディスクなどのメトリクスを収集します",
|
||||
"useGlobalMetrics": "グローバル間隔を使用する",
|
||||
"useGlobalMetricsDesc": "サーバー全体のメトリクス収集間隔で上書きします",
|
||||
"metricsIntervalS": "メトリクス間隔 (秒)",
|
||||
"metricsIntervalDesc2": "メトリクススナップショットの間隔 (秒)",
|
||||
"excludedMountsLabel": "除外されるマウント",
|
||||
"monitoredMountsLabel": "カスタム監視パス",
|
||||
"monitoredMountsDesc": "/config などのバインドマウントされた Home Assistant パスを含め、個別のマウントとして公開されていないパスを追加します。",
|
||||
"monitoredMountPathPlaceholder": "パス(/config、/mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "ラベル(任意)",
|
||||
"addMonitoredMount": "パスを追加",
|
||||
"excludedMountsDesc": "このホストのディスク使用量とアラートから、特定のマウントポイントまたはファイルシステムの種類(例:NFS、CIFS)を非表示にします。",
|
||||
"excludedMountsPlaceholder": "マウントパス(/mnt/nas)またはファイルシステムの種類(nfs、cifs)",
|
||||
"excludedMountsEmpty": "マウントポイントは除外されません。検出されたすべてのファイルシステムが表示されます。",
|
||||
"addExcludedMount": "追加",
|
||||
"visibleWidgets": "表示するウィジェット",
|
||||
"widgetsMovedToHostMetrics": "カードは、ホストメトリクスタブで直接追加、配置、サイズ変更できるようになりました。このホストのホストメトリクスを開き、カスタマイズを使用して表示するカードを選択してください。",
|
||||
"quickActionsLabel": "クイックアクション",
|
||||
"quickActionsToolbar": "クイックアクションはホストメトリクスツールバーにボタンとして表示され、ワンクリックでコマンドを実行できます。",
|
||||
"noQuickActions": "クイックアクションはまだありません",
|
||||
"buttonLabel": "ボタンラベル",
|
||||
"selectSnippetPlaceholder": "スニペットを選択...",
|
||||
"addActionBtn": "アクションを追加"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "指標とアラート",
|
||||
"feature_metrics_desc": "CPU、メモリ、ディスクの使用状況を長期的に監視し、異常が発生した際にアラートを受け取ることができます。"
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "メトリクス履歴保持期間",
|
||||
"metricsHistoryRetentionRange": "1〜90日",
|
||||
"days": "日"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "利用可能なデータはありません",
|
||||
"showCurrentValue": "現在の値を表示",
|
||||
"chartMetric": "メトリック",
|
||||
"metricRange": "範囲"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "메모리",
|
||||
"disk": "디스크",
|
||||
"network": "네트워크",
|
||||
"uptime": "업타임",
|
||||
"processes": "프로세스",
|
||||
"available": "사용 가능",
|
||||
"free": "여유",
|
||||
"connecting": "연결 중...",
|
||||
"connectionFailed": "서버 연결 실패",
|
||||
"naCpus": "N/A CPU",
|
||||
"cpuCores_one": "{{count}} 코어",
|
||||
"cpuCores_other": "{{count}} 코어",
|
||||
"cpuUsage": "CPU 사용률",
|
||||
"memoryUsage": "메모리 사용률",
|
||||
"diskUsage": "디스크 사용률",
|
||||
"selectFilesystem": "파일 시스템을 선택하세요",
|
||||
"temperature": "온도",
|
||||
"highestTemperature": "최고 온도",
|
||||
"primaryTemperatureSensor": "1차 센서",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "NVIDIA GPU가 감지되지 않았습니다. NVIDIA 드라이버를 설치하세요(드라이버에는 nvidia-smi가 포함되어 있습니다). 그러면 GPU 메트릭을 확인할 수 있습니다.",
|
||||
"driver": "드라이버 {{version}}",
|
||||
"utilization": "이용",
|
||||
"memory": "VRAM",
|
||||
"temperature": "임시",
|
||||
"power": "힘",
|
||||
"fan": "팬",
|
||||
"processes": "GPU 프로세스",
|
||||
"noProcesses": "GPU를 사용하는 프로세스가 없습니다."
|
||||
},
|
||||
"failedToFetchHostConfig": "호스트 구성 가져오기 실패",
|
||||
"serverOffline": "서버 오프라인",
|
||||
"cannotFetchMetrics": "오프라인 서버에서 메트릭 가져오기 불가",
|
||||
"totpFailed": "TOTP 인증 실패",
|
||||
"noneAuthNotSupported": "호스트 메트릭에서 'none' 인증 유형을 지원하지 않습니다.",
|
||||
"noHostSelected": "호스트가 선택되지 않았습니다.",
|
||||
"load": "부하",
|
||||
"systemInfo": "시스템 정보",
|
||||
"hostname": "호스트 이름",
|
||||
"operatingSystem": "운영 체제",
|
||||
"kernel": "커널",
|
||||
"seconds": "초",
|
||||
"networkInterfaces": "네트워크 인터페이스",
|
||||
"noInterfacesFound": "네트워크 인터페이스를 찾을 수 없습니다.",
|
||||
"noProcessesFound": "프로세스를 찾을 수 없습니다.",
|
||||
"processesTotal": "전체",
|
||||
"processesRunning": "실행 중",
|
||||
"loginStats": "SSH 로그인 통계",
|
||||
"noRecentLoginData": "최근 로그인 데이터가 없습니다.",
|
||||
"executingQuickAction": "{{name}} 실행 중...",
|
||||
"quickActionSuccess": "{{name}}이(가) 성공적으로 완료되었습니다.",
|
||||
"quickActionFailed": "{{name}} 실패",
|
||||
"quickActionError": "{{name}} 실행에 실패했습니다.",
|
||||
"ports": {
|
||||
"title": "수신 대기 포트",
|
||||
"protocol": "프로토콜",
|
||||
"port": "포트",
|
||||
"address": "주소",
|
||||
"process": "프로세스",
|
||||
"search": "포트 검색...",
|
||||
"allProtocols": "전체",
|
||||
"noData": "수신 대기 포트 데이터가 없습니다."
|
||||
},
|
||||
"firewall": {
|
||||
"title": "방화벽",
|
||||
"inactive": "비활성",
|
||||
"policy": "정책",
|
||||
"rules": "규칙",
|
||||
"noRules": "이 체인에 규칙이 없습니다.",
|
||||
"noData": "방화벽 데이터를 사용할 수 없습니다.",
|
||||
"action": "동작",
|
||||
"protocol": "프로토콜",
|
||||
"port": "포트",
|
||||
"source": "소스",
|
||||
"anywhere": "모든 곳",
|
||||
"chains": "체인"
|
||||
},
|
||||
"loadAvg": "로드 평균",
|
||||
"swap": "스왑",
|
||||
"architecture": "아키텍처",
|
||||
"refresh": "새로 고침",
|
||||
"retry": "재시도",
|
||||
"customize": "레이아웃 사용자 정의",
|
||||
"reset": "초기화",
|
||||
"tabLive": "실시간",
|
||||
"editModeInstructions": "카드를 드래그하여 재배열하고, 아래쪽 가장자리를 드래그하여 크기를 조정하며, 너비 버튼을 사용해 카드의 가로 폭을 변경하세요. 아래에서 카드를 추가하거나 제거할 수 있습니다.",
|
||||
"managers": {
|
||||
"services": "서비스",
|
||||
"processInspector": "프로세스 검사기",
|
||||
"logViewer": "로그 뷰어",
|
||||
"cron": "크론 작업",
|
||||
"packages": "패키지",
|
||||
"ssl": "SSL 인증서",
|
||||
"firewall": "방화벽",
|
||||
"users": "사용자 및 권한",
|
||||
"healthCheck": "상태 검사",
|
||||
"diskBreakdown": "디스크 분석",
|
||||
"systemdTimers": "타이머",
|
||||
"topMemory": "메모리 사용량 상위",
|
||||
"noData": "데이터 없음",
|
||||
"sudoHint": "호스트 편집기에서 이 호스트의 sudo 암호를 설정하여 권한이 필요한 작업을 활성화하세요.",
|
||||
"filter": "필터...",
|
||||
"start": "시작",
|
||||
"stop": "중지",
|
||||
"restart": "재시작",
|
||||
"actionDone": "{{name}} 업데이트됨",
|
||||
"actionFailed": "작업 실패",
|
||||
"signalSent": "PID {{pid}}에 시그널 전송됨",
|
||||
"killHint": "클릭: 종료 (SIGTERM). 마우스 오른쪽 클릭: 강제 종료 (SIGKILL).",
|
||||
"working": "작업 중...",
|
||||
"update": "업데이트",
|
||||
"upgradeAll": "모두 업그레이드",
|
||||
"allUpToDate": "모든 항목이 최신 상태입니다",
|
||||
"save": "저장",
|
||||
"command": "명령",
|
||||
"enabled": "활성화됨",
|
||||
"cronSaved": "Crontab이 업데이트되었습니다",
|
||||
"clients": "클라이언트",
|
||||
"dryRun": "테스트 실행",
|
||||
"renew": "갱신",
|
||||
"noAcmeClient": "이 호스트에 ACME 클라이언트(certbot 또는 acme.sh)가 없습니다.",
|
||||
"addInputRule": "INPUT 규칙 추가",
|
||||
"firewallWarning": "변경 사항은 저장하기 전까지 런타임에만 적용됩니다. 접근이 차단되지 않도록 주의하세요.",
|
||||
"ruleApplied": "규칙이 적용되었습니다",
|
||||
"invalidPort": "유효한 포트(1-65535)를 입력하세요",
|
||||
"newUsername": "새 사용자 이름",
|
||||
"addUser": "추가",
|
||||
"deleteUser": "사용자 삭제",
|
||||
"noHealthChecks": "아직 상태 점검이 구성되지 않았습니다.",
|
||||
"follow": "따라가기",
|
||||
"noLogData": "로그 출력이 없습니다.",
|
||||
"tree": "트리",
|
||||
"enableDisable": "부팅 시 활성화/비활성화",
|
||||
"grantSudo": "sudo 권한 부여",
|
||||
"revokeSudo": "sudo 권한 회수",
|
||||
"sslIssueCert": "인증서 발급",
|
||||
"sslExpired": "만료됨",
|
||||
"sslInDays": "{{days}}일 후",
|
||||
"sslNeedDomain": "최소 하나의 도메인을 입력하세요",
|
||||
"sslIssued": "인증서가 발급되었습니다",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (독립형)",
|
||||
"sslHttpWebroot": "HTTP (웹루트)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "DNS 공급자 (예: cloudflare)",
|
||||
"sslIssueHint": "DNS 공급자 자격 증명이 호스트에 이미 구성되어 있어야 합니다.",
|
||||
"sslRevoke": "인증서 폐기",
|
||||
"sslRevoked": "인증서가 폐기되었습니다",
|
||||
"sslRevokeConfirm": "인증서 \"{{name}}\"을(를) 폐기하고 제거하시겠습니까? 이 작업은 취소할 수 없습니다.",
|
||||
"healthRun": "실행",
|
||||
"healthName": "이름",
|
||||
"healthTarget": "호스트 / 주소",
|
||||
"healthAddCheck": "검사 추가",
|
||||
"healthSaved": "상태 검사가 저장되었습니다",
|
||||
"healthMissingFields": "각 검사에는 이름과 대상이 필요합니다",
|
||||
"logFile": "파일",
|
||||
"logUnit": "유닛",
|
||||
"logCustomPath": "/var/log 아래의 사용자 지정 경로 (선택 사항)",
|
||||
"logGrep": "줄 필터...",
|
||||
"firewallPersist": "규칙 영구 저장",
|
||||
"firewallPersisted": "방화벽 규칙이 영구 저장되었습니다",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Tailscale",
|
||||
"wgNotInstalled": "이 호스트에 WireGuard가 설치되어 있지 않습니다",
|
||||
"wgNoInterfaces": "구성된 WireGuard 인터페이스가 없습니다",
|
||||
"wgInterfaceUp": "올리기",
|
||||
"wgInterfaceDown": "내리기",
|
||||
"wgBringingUp": "{{name}} 올리는 중...",
|
||||
"wgBringingDown": "{{name}} 내리는 중...",
|
||||
"wgInterfaceUpDone": "{{name}}이(가) 올라왔습니다",
|
||||
"wgInterfaceDownDone": "{{name}}이(가) 내려갔습니다",
|
||||
"wgListenPort": "포트",
|
||||
"wgPublicKey": "공개 키",
|
||||
"wgEndpoint": "엔드포인트",
|
||||
"wgAllowedIPs": "허용된 IP",
|
||||
"wgLastHandshake": "마지막 핸드셰이크",
|
||||
"wgHandshakeNever": "없음",
|
||||
"wgTransfer": "전송",
|
||||
"tsNotInstalled": "이 호스트에 Tailscale이 설치되어 있지 않습니다",
|
||||
"tsRunning": "실행 중",
|
||||
"tsStopped": "중지됨",
|
||||
"tsEnable": "연결",
|
||||
"tsDisable": "연결 해제",
|
||||
"tsEnabling": "Tailscale에 연결 중...",
|
||||
"tsDisabling": "Tailscale 연결 해제 중...",
|
||||
"tsEnabled": "Tailscale 연결됨",
|
||||
"tsDisabled": "Tailscale 연결 해제됨",
|
||||
"tsIPs": "Tailscale IP",
|
||||
"tsPeers": "피어",
|
||||
"tsOnline": "온라인",
|
||||
"tsOffline": "오프라인",
|
||||
"tsExitNode": "출구 노드",
|
||||
"tsExitNodeActive": "출구 노드 활성",
|
||||
"tsHostname": "호스트명"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "메트릭 기록",
|
||||
"historySuffix": "기록",
|
||||
"cpuMemoryDisk": "CPU / 메모리 / 디스크",
|
||||
"network": "네트워크",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "이 시간 범위에 대한 기록 데이터가 없습니다.",
|
||||
"custom": "사용자 지정",
|
||||
"to": "~",
|
||||
"apply": "적용",
|
||||
"viewHistory": "기록 보기"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "프록스목스 통계",
|
||||
"cpuUsage": "CPU 사용량",
|
||||
"memoryUsage": "메모리 사용량",
|
||||
"diskUsage": "디스크 사용량",
|
||||
"networkInterfaces": "네트워크 인터페이스",
|
||||
"uptime": "가동 시간",
|
||||
"systemInfo": "시스템 정보",
|
||||
"guestsSummary": "손님",
|
||||
"storagePools": "저장 풀",
|
||||
"clusterHealth": "클러스터 헬스",
|
||||
"cpuCores_one": "{{count}} 코어",
|
||||
"cpuCores_other": "{{count}} 코어",
|
||||
"used": "사용된",
|
||||
"total": "총",
|
||||
"hostname": "호스트 이름",
|
||||
"kernel": "핵심",
|
||||
"pveVersion": "PVE 버전",
|
||||
"name": "이름",
|
||||
"status": "상태",
|
||||
"type": "유형",
|
||||
"cpu": "CPU",
|
||||
"mem": "메모리",
|
||||
"disk": "디스크",
|
||||
"running": "달리기",
|
||||
"stopped": "멈췄습니다",
|
||||
"guestCounts": "{{running}}/{{total}} 실행 중",
|
||||
"inactive": "비활성화됨",
|
||||
"notClustered": "독립형 노드(클러스터의 일부가 아님)",
|
||||
"quorate": "할당량",
|
||||
"notQuorate": "정족수 미달",
|
||||
"nodeOnline": "온라인",
|
||||
"nodeOffline": "오프라인",
|
||||
"noHostSelected": "호스트가 선택되지 않았습니다.",
|
||||
"pveshNotFound": "pvesh를 찾을 수 없습니다. Proxmox 노드입니까?",
|
||||
"nodeDetectionFailed": "유효한 Proxmox 노드 이름을 확인할 수 없습니다.",
|
||||
"connecting": "연결 중...",
|
||||
"connectionFailed": "Proxmox 노드에 연결하지 못했습니다.",
|
||||
"refresh": "새로 고치다",
|
||||
"searchGuests": "투숙객 검색...",
|
||||
"filterAll": "모두",
|
||||
"filterVm": "VM",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "이 노드에서 VM 또는 LXC 컨테이너를 찾을 수 없습니다.",
|
||||
"noGuestsMatch": "현재 필터 조건에 맞는 투숙객이 없습니다."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "호스트 메트릭"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "호스트 메트릭",
|
||||
"enableProxmoxStats": "Proxmox 통계 활성화",
|
||||
"enableProxmoxStatsDesc": "SSH를 통해 수집된 실시간 노드, 게스트, 스토리지 및 클러스터 통계를 포함하는 이 호스트의 Proxmox 통계 탭을 표시합니다.",
|
||||
"proxmoxStatsPollInterval": "폴링 간격(초)",
|
||||
"proxmoxStatsPollIntervalDesc": "최소 15초. Proxmox 노드 통계를 새로 고치는 빈도.",
|
||||
"proxmoxStatsNodeOverride": "노드 이름 재정의",
|
||||
"proxmoxStatsNodeOverrideDesc": "Proxmox 노드 이름 자동 감지 기능을 재정의합니다(기본적으로 호스트 이름을 통해 감지됨).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "호스트 이름에서 자동 감지됨",
|
||||
"metricsCollectionLabel": "메트릭 수집",
|
||||
"enableMetricsLabel": "메트릭 활성화",
|
||||
"enableMetricsDesc": "이 호스트에서 CPU, RAM, 디스크 및 기타 메트릭을 수집합니다.",
|
||||
"useGlobalMetrics": "전역 간격 사용",
|
||||
"useGlobalMetricsDesc": "서버 전체 메트릭 간격으로 재정의합니다.",
|
||||
"metricsIntervalS": "메트릭 간격(초)",
|
||||
"metricsIntervalDesc2": "메트릭 스냅샷 간격(초)",
|
||||
"excludedMountsLabel": "제외된 마운트",
|
||||
"monitoredMountsLabel": "사용자 지정 모니터링 경로",
|
||||
"monitoredMountsDesc": "/config와 같이 바인드 마운트된 Home Assistant 경로를 포함하여 별도의 마운트로 노출되지 않는 경로를 추가합니다.",
|
||||
"monitoredMountPathPlaceholder": "경로(/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "라벨 (선택 사항)",
|
||||
"addMonitoredMount": "경로를 추가합니다",
|
||||
"excludedMountsDesc": "이 호스트의 디스크 사용량 및 알림에서 특정 마운트 지점 또는 파일 시스템 유형(예: NFS, CIFS)을 숨깁니다.",
|
||||
"excludedMountsPlaceholder": "마운트 경로(/mnt/nas) 또는 파일 시스템 유형(nfs, cifs)",
|
||||
"excludedMountsEmpty": "마운트된 항목을 제외하지 않습니다. 감지된 모든 파일 시스템이 표시됩니다.",
|
||||
"addExcludedMount": "추가하다",
|
||||
"visibleWidgets": "표시 위젯",
|
||||
"widgetsMovedToHostMetrics": "카드는 이제 호스트 메트릭 탭에서 직접 추가, 정렬 및 크기 조정됩니다. 이 호스트의 호스트 메트릭을 열고 사용자 정의를 사용하여 표시할 카드를 선택하세요.",
|
||||
"quickActionsLabel": "빠른 작업",
|
||||
"quickActionsToolbar": "빠른 작업은 한 번의 클릭으로 명령을 실행할 수 있도록 호스트 메트릭 도구 모음에 버튼으로 표시됩니다.",
|
||||
"noQuickActions": "아직 빠른 작업이 없습니다.",
|
||||
"buttonLabel": "버튼 레이블",
|
||||
"selectSnippetPlaceholder": "스니펫 선택...",
|
||||
"addActionBtn": "작업 추가"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "지표 및 알림",
|
||||
"feature_metrics_desc": "CPU, 메모리 및 디스크 사용량을 시간 경과에 따라 추적하고, 문제가 발생하면 알림을 받으세요."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "메트릭 이력 보존 기간",
|
||||
"metricsHistoryRetentionRange": "1~90일",
|
||||
"days": "일"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "데이터 없음",
|
||||
"showCurrentValue": "현재 값 표시",
|
||||
"chartMetric": "메트릭",
|
||||
"metricRange": "범위"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "Geheugen",
|
||||
"disk": "Schijf",
|
||||
"network": "Netwerk",
|
||||
"uptime": "Beschikbaarheid",
|
||||
"processes": "Processen",
|
||||
"available": "Beschikbaar",
|
||||
"free": "Vrij",
|
||||
"connecting": "Verbinden...",
|
||||
"connectionFailed": "Verbinding met de server mislukt.",
|
||||
"naCpus": "Niet van toepassing CPU('s)",
|
||||
"cpuCores_one": "{{count}} Kern",
|
||||
"cpuCores_other": "{{count}} Kernen",
|
||||
"cpuUsage": "CPU-gebruik",
|
||||
"memoryUsage": "Geheugengebruik",
|
||||
"diskUsage": "Schijfgebruik",
|
||||
"selectFilesystem": "Selecteer bestandssysteem",
|
||||
"temperature": "Temperatuur",
|
||||
"highestTemperature": "Hoogste temperatuur",
|
||||
"primaryTemperatureSensor": "Primaire sensor",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "Geen NVIDIA GPU gedetecteerd. Installeer het NVIDIA-stuurprogramma (dit levert nvidia-smi) om GPU-statistieken te bekijken.",
|
||||
"driver": "Bestuurder {{version}}",
|
||||
"utilization": "Gebruik",
|
||||
"memory": "VRAM",
|
||||
"temperature": "Temp",
|
||||
"power": "Stroom",
|
||||
"fan": "Fan",
|
||||
"processes": "GPU-processen",
|
||||
"noProcesses": "Er zijn geen processen die de GPU gebruiken."
|
||||
},
|
||||
"failedToFetchHostConfig": "Het ophalen van de hostconfiguratie is mislukt.",
|
||||
"serverOffline": "Server offline",
|
||||
"cannotFetchMetrics": "Het is niet mogelijk om meetgegevens op te halen van een offline server.",
|
||||
"totpFailed": "TOTP-verificatie mislukt",
|
||||
"noneAuthNotSupported": "Host Metrics ondersteunt geen authenticatietype 'none'.",
|
||||
"noHostSelected": "Geen host geselecteerd",
|
||||
"load": "Laden",
|
||||
"systemInfo": "Systeeminformatie",
|
||||
"hostname": "Hostnaam",
|
||||
"operatingSystem": "Besturingssysteem",
|
||||
"kernel": "Kernel",
|
||||
"seconds": "seconden",
|
||||
"networkInterfaces": "Netwerkinterfaces",
|
||||
"noInterfacesFound": "Geen netwerkinterfaces gevonden",
|
||||
"noProcessesFound": "Geen processen gevonden",
|
||||
"processesTotal": "totaal",
|
||||
"processesRunning": "rennen",
|
||||
"loginStats": "SSH-aanmeldingsstatistieken",
|
||||
"noRecentLoginData": "Geen recente inloggegevens",
|
||||
"executingQuickAction": "Het uitvoeren van {{name}}...",
|
||||
"quickActionSuccess": "{{name}} succesvol voltooid",
|
||||
"quickActionFailed": "{{name}} mislukt",
|
||||
"quickActionError": "Het uitvoeren van {{name}} is mislukt.",
|
||||
"ports": {
|
||||
"title": "Luisterpoorten",
|
||||
"protocol": "Protocol",
|
||||
"port": "Haven",
|
||||
"address": "Adres",
|
||||
"process": "Proces",
|
||||
"search": "Poorten doorzoeken...",
|
||||
"allProtocols": "Alle",
|
||||
"noData": "Geen gegevens over luisterpoorten"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Firewall",
|
||||
"inactive": "Inactief",
|
||||
"policy": "Beleid",
|
||||
"rules": "regels",
|
||||
"noRules": "Er zijn geen regels in deze keten.",
|
||||
"noData": "Geen firewallgegevens beschikbaar",
|
||||
"action": "Actie",
|
||||
"protocol": "Proto",
|
||||
"port": "Haven",
|
||||
"source": "Bron",
|
||||
"anywhere": "Overal",
|
||||
"chains": "kettingen"
|
||||
},
|
||||
"loadAvg": "Gemiddelde belasting",
|
||||
"swap": "Ruil",
|
||||
"architecture": "Architectuur",
|
||||
"refresh": "Vernieuwen",
|
||||
"retry": "Opnieuw proberen",
|
||||
"customize": "Lay-out aanpassen",
|
||||
"reset": "Reset",
|
||||
"tabLive": "Live",
|
||||
"editModeInstructions": "Sleep kaarten om ze te herschikken, sleep de onderrand om het formaat aan te passen en gebruik de breedteknop om de afmetingen van een kaart te wijzigen. Voeg hieronder kaarten toe of verwijder ze.",
|
||||
"managers": {
|
||||
"services": "Diensten",
|
||||
"processInspector": "Procesinspecteur",
|
||||
"logViewer": "Logboekviewer",
|
||||
"cron": "Cron Jobs",
|
||||
"packages": "Pakketten",
|
||||
"ssl": "SSL-certificaten",
|
||||
"firewall": "Firewall",
|
||||
"users": "Gebruikers en machtigingen",
|
||||
"healthCheck": "Gezondheidscontroles",
|
||||
"diskBreakdown": "Schijfdefect",
|
||||
"systemdTimers": "Timers",
|
||||
"topMemory": "Top op geheugen",
|
||||
"noData": "Geen gegevens",
|
||||
"sudoHint": "Stel een sudo-wachtwoord in voor deze host in de hosteditor om acties met verhoogde bevoegdheden mogelijk te maken.",
|
||||
"filter": "Filter...",
|
||||
"start": "Begin",
|
||||
"stop": "Stop",
|
||||
"restart": "Opnieuw opstarten",
|
||||
"actionDone": "{{name}} bijgewerkt",
|
||||
"actionFailed": "Actie mislukt",
|
||||
"signalSent": "Signaal verzonden naar PID {{pid}}",
|
||||
"killHint": "Klikken: beëindigen (SIGTERM). Rechtsklikken: geforceerd afsluiten (SIGKILL).",
|
||||
"working": "Bezig met verwerken...",
|
||||
"update": "Update",
|
||||
"upgradeAll": "Upgrade alles",
|
||||
"allUpToDate": "Alles is actueel.",
|
||||
"save": "Redden",
|
||||
"command": "Commando",
|
||||
"enabled": "Ingeschakeld",
|
||||
"cronSaved": "Crontab bijgewerkt",
|
||||
"clients": "Klanten",
|
||||
"dryRun": "Proefloop",
|
||||
"renew": "Vernieuwen",
|
||||
"noAcmeClient": "Er is geen ACME-client (certbot of acme.sh) gevonden op deze host.",
|
||||
"addInputRule": "Voeg een INPUT-regel toe",
|
||||
"firewallWarning": "Wijzigingen zijn alleen tijdens de uitvoering van het programma geldig totdat ze zijn opgeslagen. Pas op dat u uzelf niet buitensluit.",
|
||||
"ruleApplied": "Toegepaste regel",
|
||||
"invalidPort": "Voer een geldig poortnummer in (1-65535)",
|
||||
"newUsername": "Nieuwe gebruikersnaam",
|
||||
"addUser": "Toevoegen",
|
||||
"deleteUser": "Gebruiker verwijderen",
|
||||
"noHealthChecks": "Er zijn nog geen gezondheidscontroles geconfigureerd.",
|
||||
"follow": "Volgen",
|
||||
"noLogData": "Geen loguitvoer.",
|
||||
"tree": "Boom",
|
||||
"enableDisable": "In-/uitschakelen bij het opstarten",
|
||||
"grantSudo": "Verleen sudo",
|
||||
"revokeSudo": "Sudo intrekken",
|
||||
"sslIssueCert": "Certificaat uitreiken",
|
||||
"sslExpired": "Verlopen",
|
||||
"sslInDays": "in {{days}}d",
|
||||
"sslNeedDomain": "Voer ten minste één domein in",
|
||||
"sslIssued": "Certificaat afgegeven",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (zelfstandig)",
|
||||
"sslHttpWebroot": "HTTP (webroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "DNS-provider (bijv. Cloudflare)",
|
||||
"sslIssueHint": "De inloggegevens van de DNS-provider moeten al op de host geconfigureerd zijn.",
|
||||
"sslRevoke": "Certificaat intrekken",
|
||||
"sslRevoked": "Certificaat ingetrokken",
|
||||
"sslRevokeConfirm": "Het certificaat \"{{name}}\" intrekken en verwijderen? Dit kan niet ongedaan gemaakt worden.",
|
||||
"healthRun": "Loop",
|
||||
"healthName": "Naam",
|
||||
"healthTarget": "Host / adres",
|
||||
"healthAddCheck": "Voeg een controle toe",
|
||||
"healthSaved": "Gezondheidscontroles opgeslagen",
|
||||
"healthMissingFields": "Elke controle heeft een naam en een doel nodig.",
|
||||
"logFile": "Bestand",
|
||||
"logUnit": "Eenheid",
|
||||
"logCustomPath": "Aangepast pad onder /var/log (optioneel)",
|
||||
"logGrep": "Filterlijnen...",
|
||||
"firewallPersist": "Persist-regels",
|
||||
"firewallPersisted": "De firewallregels bleven van kracht.",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Staartschaal",
|
||||
"wgNotInstalled": "WireGuard is niet geïnstalleerd op deze host.",
|
||||
"wgNoInterfaces": "Er zijn geen WireGuard-interfaces geconfigureerd.",
|
||||
"wgInterfaceUp": "Breng ter sprake",
|
||||
"wgInterfaceDown": "Neerhalen",
|
||||
"wgBringingUp": "{{name}} wordt geladen...",
|
||||
"wgBringingDown": "{{name}} naar beneden halen...",
|
||||
"wgInterfaceUpDone": "{{name}} is up",
|
||||
"wgInterfaceDownDone": "{{name}} is omlaag",
|
||||
"wgListenPort": "Haven",
|
||||
"wgPublicKey": "Openbare sleutel",
|
||||
"wgEndpoint": "Eindpunt",
|
||||
"wgAllowedIPs": "Toegestane IP-adressen",
|
||||
"wgLastHandshake": "Laatste handdruk",
|
||||
"wgHandshakeNever": "Nooit",
|
||||
"wgTransfer": "Overdracht",
|
||||
"tsNotInstalled": "Tailscale is niet geïnstalleerd op deze host.",
|
||||
"tsRunning": "Rennen",
|
||||
"tsStopped": "Gestopt",
|
||||
"tsEnable": "Verbinden",
|
||||
"tsDisable": "Verbinding verbreken",
|
||||
"tsEnabling": "Verbinding maken met Tailscale...",
|
||||
"tsDisabling": "Verbinding met Tailscale verbreken...",
|
||||
"tsEnabled": "Aangesloten staartschaal",
|
||||
"tsDisabled": "Staartschaal losgekoppeld",
|
||||
"tsIPs": "Tailscale IP-adressen",
|
||||
"tsPeers": "Leeftijdsgenoten",
|
||||
"tsOnline": "Online",
|
||||
"tsOffline": "Offline",
|
||||
"tsExitNode": "Uitgangsknooppunt",
|
||||
"tsExitNodeActive": "Uitgangsknooppunt actief",
|
||||
"tsHostname": "Hostnaam"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Statistiekengeschiedenis",
|
||||
"historySuffix": "Geschiedenis",
|
||||
"cpuMemoryDisk": "CPU / Geheugen / Schijf",
|
||||
"network": "Netwerk",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "Er zijn geen historische gegevens beschikbaar voor deze periode.",
|
||||
"custom": "Aangepast",
|
||||
"to": "naar",
|
||||
"apply": "Toepassen",
|
||||
"viewHistory": "Geschiedenis bekijken"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Proxmox-statistieken",
|
||||
"cpuUsage": "CPU-gebruik",
|
||||
"memoryUsage": "Geheugengebruik",
|
||||
"diskUsage": "Schijfgebruik",
|
||||
"networkInterfaces": "Netwerkinterfaces",
|
||||
"uptime": "Beschikbaarheid",
|
||||
"systemInfo": "Systeeminformatie",
|
||||
"guestsSummary": "Gasten",
|
||||
"storagePools": "Opslagbassins",
|
||||
"clusterHealth": "Clustergezondheid",
|
||||
"cpuCores_one": "{{count}} Kern",
|
||||
"cpuCores_other": "{{count}} Kernen",
|
||||
"used": "Gebruikt",
|
||||
"total": "Totaal",
|
||||
"hostname": "Hostnaam",
|
||||
"kernel": "Kernel",
|
||||
"pveVersion": "PVE-versie",
|
||||
"name": "Naam",
|
||||
"status": "Status",
|
||||
"type": "Type",
|
||||
"cpu": "CPU",
|
||||
"mem": "Mem",
|
||||
"disk": "Schijf",
|
||||
"running": "Rennen",
|
||||
"stopped": "Gestopt",
|
||||
"guestCounts": "{{running}}/{{total}} rennend",
|
||||
"inactive": "Inactief",
|
||||
"notClustered": "Zelfstandig knooppunt (geen onderdeel van een cluster)",
|
||||
"quorate": "Quoraat",
|
||||
"notQuorate": "Niet quorum",
|
||||
"nodeOnline": "Online",
|
||||
"nodeOffline": "Offline",
|
||||
"noHostSelected": "Geen host geselecteerd",
|
||||
"pveshNotFound": "pvesh niet gevonden - is dit een Proxmox-node?",
|
||||
"nodeDetectionFailed": "Kan geen geldige Proxmox-knooppuntnaam bepalen",
|
||||
"connecting": "Verbinden...",
|
||||
"connectionFailed": "Verbinding met Proxmox-node mislukt.",
|
||||
"refresh": "Vernieuwen",
|
||||
"searchGuests": "Gasten zoeken...",
|
||||
"filterAll": "Alle",
|
||||
"filterVm": "VM",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "Er zijn geen VM's of LXC-containers gevonden op dit knooppunt.",
|
||||
"noGuestsMatch": "Er zijn geen gasten die aan de huidige filters voldoen."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Hoststatistieken"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Hoststatistieken",
|
||||
"enableProxmoxStats": "Proxmox-statistieken inschakelen",
|
||||
"enableProxmoxStatsDesc": "Toon een tabblad Proxmox-statistieken voor deze host met live statistieken van knooppunten, gastsystemen, opslag en het cluster, verzameld via SSH.",
|
||||
"proxmoxStatsPollInterval": "Pollinterval (seconden)",
|
||||
"proxmoxStatsPollIntervalDesc": "Minimaal 15 seconden. Hoe vaak moeten de Proxmox-node-statistieken worden vernieuwd?",
|
||||
"proxmoxStatsNodeOverride": "Knooppuntnaam overschrijven",
|
||||
"proxmoxStatsNodeOverrideDesc": "Schakel de automatische detectie van de Proxmox-knooppuntnaam uit (deze wordt standaard gedetecteerd via de hostnaam).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Automatisch gedetecteerd op basis van hostnaam",
|
||||
"metricsCollectionLabel": "Gegevensverzameling",
|
||||
"enableMetricsLabel": "Statistieken inschakelen",
|
||||
"enableMetricsDesc": "Verzamel gegevens over CPU, RAM, schijfgebruik en andere parameters van deze host.",
|
||||
"useGlobalMetrics": "Gebruik globaal interval",
|
||||
"useGlobalMetricsDesc": "Overschrijf dit met het serverbrede metrische interval.",
|
||||
"metricsIntervalS": "Metriekinterval (s)",
|
||||
"metricsIntervalDesc2": "Seconden tussen momentopnamen van de meetwaarden",
|
||||
"excludedMountsLabel": "Uitgesloten montagesystemen",
|
||||
"monitoredMountsLabel": "Aangepaste bewaakte paden",
|
||||
"monitoredMountsDesc": "Voeg paden toe die niet als aparte mounts worden weergegeven, inclusief bind-mounted Home Assistant-paden zoals /config.",
|
||||
"monitoredMountPathPlaceholder": "Pad (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Label (optioneel)",
|
||||
"addMonitoredMount": "Pad toevoegen",
|
||||
"excludedMountsDesc": "Verberg specifieke koppelpunten of bestandssysteemtypen (bijv. nfs, cifs) voor schijfgebruik en waarschuwingen voor deze host.",
|
||||
"excludedMountsPlaceholder": "Mountpad (/mnt/nas) of bestandssysteemtype (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Geen mounts uitgesloten. Alle gedetecteerde bestandssystemen worden weergegeven.",
|
||||
"addExcludedMount": "Toevoegen",
|
||||
"visibleWidgets": "Zichtbare widgets",
|
||||
"widgetsMovedToHostMetrics": "Kaarten kunnen nu rechtstreeks in het tabblad Hoststatistieken worden toegevoegd, gerangschikt en van formaat worden veranderd. Open Hoststatistieken voor deze host en gebruik Aanpassen om te kiezen welke kaarten worden weergegeven.",
|
||||
"quickActionsLabel": "Snelle acties",
|
||||
"quickActionsToolbar": "Snelle acties verschijnen als knoppen in de Host Metrics-werkbalk, zodat u opdrachten met één klik kunt uitvoeren.",
|
||||
"noQuickActions": "Nog geen snelle acties ondernomen.",
|
||||
"buttonLabel": "Knoplabel",
|
||||
"selectSnippetPlaceholder": "Selecteer fragment...",
|
||||
"addActionBtn": "Actie toevoegen"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Statistieken en waarschuwingen",
|
||||
"feature_metrics_desc": "Volg de CPU, het geheugen en de schijf gedurende een bepaalde tijd en ontvang een melding wanneer ze defect raken."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Historische statistieken bewaren",
|
||||
"metricsHistoryRetentionRange": "1 tot 90 dagen",
|
||||
"days": "dagen"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Geen gegevens beschikbaar",
|
||||
"showCurrentValue": "Toon huidige waarde",
|
||||
"chartMetric": "Metrisch",
|
||||
"metricRange": "Bereik"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "Hukommelse",
|
||||
"disk": "Disk",
|
||||
"network": "Nettverk",
|
||||
"uptime": "Oppetid",
|
||||
"processes": "Prosesser",
|
||||
"available": "Tilgjengelig",
|
||||
"free": "Gratis",
|
||||
"connecting": "Kobler til...",
|
||||
"connectionFailed": "Kunne ikke koble til serveren",
|
||||
"naCpus": "Ikke tilgjengelig CPU(er)",
|
||||
"cpuCores_one": "{{count}} Kjerne",
|
||||
"cpuCores_other": "{{count}} Kjerner",
|
||||
"cpuUsage": "CPU-bruk",
|
||||
"memoryUsage": "Minnebruk",
|
||||
"diskUsage": "Diskbruk",
|
||||
"selectFilesystem": "Velg filsystem",
|
||||
"temperature": "Temperatur",
|
||||
"highestTemperature": "Høyeste temperatur",
|
||||
"primaryTemperatureSensor": "Primærsensor",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "Ingen NVIDIA GPU funnet. Installer NVIDIA-driveren (den inneholder nvidia-smi) for å se GPU-målinger.",
|
||||
"driver": "Sjåfør {{version}}",
|
||||
"utilization": "Utnyttelse",
|
||||
"memory": "VRAM",
|
||||
"temperature": "Temp.",
|
||||
"power": "Makt",
|
||||
"fan": "Fan",
|
||||
"processes": "GPU-prosesser",
|
||||
"noProcesses": "Ingen prosesser bruker GPU-en"
|
||||
},
|
||||
"failedToFetchHostConfig": "Kunne ikke hente vertskonfigurasjonen",
|
||||
"serverOffline": "Server frakoblet",
|
||||
"cannotFetchMetrics": "Kan ikke hente målinger fra frakoblet server",
|
||||
"totpFailed": "TOTP-verifisering mislyktes",
|
||||
"noneAuthNotSupported": "Host Metrics støtter ikke autentiseringstypen «ingen».",
|
||||
"noHostSelected": "Ingen vert valgt",
|
||||
"load": "Laste",
|
||||
"systemInfo": "Systeminformasjon",
|
||||
"hostname": "Vertsnavn",
|
||||
"operatingSystem": "Operativsystem",
|
||||
"kernel": "Kjerne",
|
||||
"seconds": "sekunder",
|
||||
"networkInterfaces": "Nettverksgrensesnitt",
|
||||
"noInterfacesFound": "Ingen nettverksgrensesnitt funnet",
|
||||
"noProcessesFound": "Ingen prosesser funnet",
|
||||
"processesTotal": "total",
|
||||
"processesRunning": "løping",
|
||||
"loginStats": "SSH-påloggingsstatistikk",
|
||||
"noRecentLoginData": "Ingen nylige påloggingsdata",
|
||||
"executingQuickAction": "Utfører {{name}}...",
|
||||
"quickActionSuccess": "{{name}} fullført",
|
||||
"quickActionFailed": "{{name}} mislyktes",
|
||||
"quickActionError": "Kunne ikke utføre {{name}}",
|
||||
"ports": {
|
||||
"title": "Lytteporter",
|
||||
"protocol": "Protokoll",
|
||||
"port": "Havn",
|
||||
"address": "Adresse",
|
||||
"process": "Behandle",
|
||||
"search": "Søk etter porter...",
|
||||
"allProtocols": "Alle",
|
||||
"noData": "Ingen data om lytteporter"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Brannmur",
|
||||
"inactive": "Inaktiv",
|
||||
"policy": "Politikk",
|
||||
"rules": "regler",
|
||||
"noRules": "Ingen regler i denne kjeden",
|
||||
"noData": "Ingen brannmurdata tilgjengelig",
|
||||
"action": "Handling",
|
||||
"protocol": "Proto",
|
||||
"port": "Havn",
|
||||
"source": "Kilde",
|
||||
"anywhere": "Hvor som helst",
|
||||
"chains": "kjeder"
|
||||
},
|
||||
"loadAvg": "Last inn gjennomsnitt",
|
||||
"swap": "Bytte",
|
||||
"architecture": "Arkitektur",
|
||||
"refresh": "Forfriske",
|
||||
"retry": "Prøv på nytt",
|
||||
"customize": "Tilpass oppsettet",
|
||||
"reset": "Tilbakestill",
|
||||
"tabLive": "Bo",
|
||||
"editModeInstructions": "Dra kort for å omorganisere, dra i den nederste kanten for å endre størrelsen, og bruk breddeknappen for å endre kortets rekkevidde. Legg til eller fjern kort nedenfor.",
|
||||
"managers": {
|
||||
"services": "Tjenester",
|
||||
"processInspector": "Prosessinspektør",
|
||||
"logViewer": "Loggviser",
|
||||
"cron": "Cron-jobber",
|
||||
"packages": "Pakker",
|
||||
"ssl": "SSL-sertifikater",
|
||||
"firewall": "Brannmur",
|
||||
"users": "Brukere og tillatelser",
|
||||
"healthCheck": "Helsesjekker",
|
||||
"diskBreakdown": "Disknedbrytning",
|
||||
"systemdTimers": "Tidtakere",
|
||||
"topMemory": "Topp etter minne",
|
||||
"noData": "Ingen data",
|
||||
"sudoHint": "Angi et sudo-passord for denne verten i vertredigeringsprogrammet for å aktivere privilegerte handlinger.",
|
||||
"filter": "Filter...",
|
||||
"start": "Start",
|
||||
"stop": "Stoppe",
|
||||
"restart": "Start på nytt",
|
||||
"actionDone": "{{name}} oppdatert",
|
||||
"actionFailed": "Handlingen mislyktes",
|
||||
"signalSent": "Signal sendt til PID {{pid}}",
|
||||
"killHint": "Klikk: avslutt (SIGTERM). Høyreklikk: tvungen avslutning (SIGKILL).",
|
||||
"working": "Arbeider...",
|
||||
"update": "Oppdatering",
|
||||
"upgradeAll": "Oppgrader alle",
|
||||
"allUpToDate": "Alt er oppdatert",
|
||||
"save": "Spare",
|
||||
"command": "Kommando",
|
||||
"enabled": "Aktivert",
|
||||
"cronSaved": "Crontab oppdatert",
|
||||
"clients": "Klienter",
|
||||
"dryRun": "Tørrløp",
|
||||
"renew": "Fornye",
|
||||
"noAcmeClient": "Ingen ACME-klient (certbot eller acme.sh) funnet på denne verten.",
|
||||
"addInputRule": "Legg til INPUT-regel",
|
||||
"firewallWarning": "Endringene gjelder kun for kjøring inntil de lagres. Vær forsiktig så du ikke låser deg ute.",
|
||||
"ruleApplied": "Regel brukt",
|
||||
"invalidPort": "Skriv inn en gyldig port (1-65535)",
|
||||
"newUsername": "Nytt brukernavn",
|
||||
"addUser": "Legge til",
|
||||
"deleteUser": "Slett bruker",
|
||||
"noHealthChecks": "Ingen helsesjekker er konfigurert ennå.",
|
||||
"follow": "Følge",
|
||||
"noLogData": "Ingen loggutgang.",
|
||||
"tree": "Tre",
|
||||
"enableDisable": "Aktiver/deaktiver ved oppstart",
|
||||
"grantSudo": "Gi sudo",
|
||||
"revokeSudo": "Tilbakekalle sudo",
|
||||
"sslIssueCert": "Utsted sertifikat",
|
||||
"sslExpired": "Utløpt",
|
||||
"sslInDays": "i {{days}}d",
|
||||
"sslNeedDomain": "Angi minst ett domene",
|
||||
"sslIssued": "Sertifikat utstedt",
|
||||
"sslDomainsPlaceholder": "eksempel.com, www.eksempel.com",
|
||||
"sslHttpStandalone": "HTTP (frittstående)",
|
||||
"sslHttpWebroot": "HTTP (nettrot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "DNS-leverandør (f.eks. Cloudflare)",
|
||||
"sslIssueHint": "DNS-leverandørens påloggingsinformasjon må allerede være konfigurert på verten.",
|
||||
"sslRevoke": "Tilbakekalle sertifikat",
|
||||
"sslRevoked": "Sertifikatet er tilbakekalt",
|
||||
"sslRevokeConfirm": "Tilbakekalle og fjerne sertifikatet «{{name}}»? Dette kan ikke angres.",
|
||||
"healthRun": "Løp",
|
||||
"healthName": "Navn",
|
||||
"healthTarget": "Vert / adresse",
|
||||
"healthAddCheck": "Legg til sjekk",
|
||||
"healthSaved": "Helsesjekker lagret",
|
||||
"healthMissingFields": "Hver sjekk trenger et navn og et mål",
|
||||
"logFile": "Fil",
|
||||
"logUnit": "Enhet",
|
||||
"logCustomPath": "Tilpasset sti under /var/log (valgfritt)",
|
||||
"logGrep": "Filtrer linjer...",
|
||||
"firewallPersist": "Vedvarende regler",
|
||||
"firewallPersisted": "Brannmurregler beholdt",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Haleskala",
|
||||
"wgNotInstalled": "WireGuard er ikke installert på denne verten",
|
||||
"wgNoInterfaces": "Ingen WireGuard-grensesnitt konfigurert",
|
||||
"wgInterfaceUp": "Ta opp",
|
||||
"wgInterfaceDown": "Ta ned",
|
||||
"wgBringingUp": "Tar opp {{name}}...",
|
||||
"wgBringingDown": "Å bringe {{name}} ned...",
|
||||
"wgInterfaceUpDone": "{{name}} er oppe",
|
||||
"wgInterfaceDownDone": "{{name}} er nede",
|
||||
"wgListenPort": "Havn",
|
||||
"wgPublicKey": "Offentlig nøkkel",
|
||||
"wgEndpoint": "Endepunkt",
|
||||
"wgAllowedIPs": "Tillatte IP-adresser",
|
||||
"wgLastHandshake": "Siste håndtrykk",
|
||||
"wgHandshakeNever": "Aldri",
|
||||
"wgTransfer": "Overføre",
|
||||
"tsNotInstalled": "Tailscale er ikke installert på denne verten",
|
||||
"tsRunning": "Løping",
|
||||
"tsStopped": "Stoppet",
|
||||
"tsEnable": "Koble til",
|
||||
"tsDisable": "Frakople",
|
||||
"tsEnabling": "Kobler til Tailscale...",
|
||||
"tsDisabling": "Kobler fra Tailscale...",
|
||||
"tsEnabled": "Haleskala tilkoblet",
|
||||
"tsDisabled": "Haleskala frakoblet",
|
||||
"tsIPs": "Haleskalerings-IP-er",
|
||||
"tsPeers": "jevnaldrende",
|
||||
"tsOnline": "På nett",
|
||||
"tsOffline": "Frakoblet",
|
||||
"tsExitNode": "Utgangsnode",
|
||||
"tsExitNodeActive": "Avslutt node aktiv",
|
||||
"tsHostname": "Vertsnavn"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Metrikkhistorikk",
|
||||
"historySuffix": "Historie",
|
||||
"cpuMemoryDisk": "CPU / Minne / Disk",
|
||||
"network": "Nettverk",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "Ingen historikkdata tilgjengelig for denne tidsperioden.",
|
||||
"custom": "Skikk",
|
||||
"to": "til",
|
||||
"apply": "Søke",
|
||||
"viewHistory": "Vis historikk"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Proxmox-statistikk",
|
||||
"cpuUsage": "CPU-bruk",
|
||||
"memoryUsage": "Minnebruk",
|
||||
"diskUsage": "Diskbruk",
|
||||
"networkInterfaces": "Nettverksgrensesnitt",
|
||||
"uptime": "Oppetid",
|
||||
"systemInfo": "Systeminformasjon",
|
||||
"guestsSummary": "Gjester",
|
||||
"storagePools": "Lagringsbassenger",
|
||||
"clusterHealth": "Klyngehelse",
|
||||
"cpuCores_one": "{{count}} Kjerne",
|
||||
"cpuCores_other": "{{count}} Kjerner",
|
||||
"used": "Brukt",
|
||||
"total": "Total",
|
||||
"hostname": "Vertsnavn",
|
||||
"kernel": "Kjerne",
|
||||
"pveVersion": "PVE-versjon",
|
||||
"name": "Navn",
|
||||
"status": "Status",
|
||||
"type": "Type",
|
||||
"cpu": "CPU",
|
||||
"mem": "Minne",
|
||||
"disk": "Disk",
|
||||
"running": "Løping",
|
||||
"stopped": "Stoppet",
|
||||
"guestCounts": "{{running}}/{{total}} løping",
|
||||
"inactive": "Inaktiv",
|
||||
"notClustered": "Frittstående node (ikke en del av en klynge)",
|
||||
"quorate": "Kvorat",
|
||||
"notQuorate": "Ikke beslutningsdyktig",
|
||||
"nodeOnline": "På nett",
|
||||
"nodeOffline": "Frakoblet",
|
||||
"noHostSelected": "Ingen vert valgt",
|
||||
"pveshNotFound": "pvesh ikke funnet – er dette en Proxmox-node?",
|
||||
"nodeDetectionFailed": "Kan ikke bestemme et gyldig Proxmox-nodenavn",
|
||||
"connecting": "Kobler til...",
|
||||
"connectionFailed": "Kunne ikke koble til Proxmox-noden",
|
||||
"refresh": "Forfriske",
|
||||
"searchGuests": "Søk etter gjester...",
|
||||
"filterAll": "Alle",
|
||||
"filterVm": "VM",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "Ingen virtuelle maskiner eller LXC-containere funnet på denne noden.",
|
||||
"noGuestsMatch": "Ingen gjester samsvarer med de gjeldende filtrene."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Vertsmålinger"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Vertsmålinger",
|
||||
"enableProxmoxStats": "Aktiver Proxmox-statistikk",
|
||||
"enableProxmoxStatsDesc": "Vis en Proxmox-statistikkfane for denne verten med live node-, gjeste-, lagrings- og klyngestatistikk samlet inn via SSH.",
|
||||
"proxmoxStatsPollInterval": "Avstemningsintervall (sekunder)",
|
||||
"proxmoxStatsPollIntervalDesc": "Minimum 15 sekunder. Hvor ofte Proxmox-nodestatistikken skal oppdateres.",
|
||||
"proxmoxStatsNodeOverride": "Overstyring av nodenavn",
|
||||
"proxmoxStatsNodeOverrideDesc": "Overstyr automatisk deteksjon av Proxmox-nodenavnet (detekteres via vertsnavn som standard).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Automatisk oppdaget fra vertsnavn",
|
||||
"metricsCollectionLabel": "Metriksamling",
|
||||
"enableMetricsLabel": "Aktiver målinger",
|
||||
"enableMetricsDesc": "Samle inn CPU-, RAM-, disk- og andre målinger fra denne verten",
|
||||
"useGlobalMetrics": "Bruk globalt intervall",
|
||||
"useGlobalMetricsDesc": "Overstyr med det serveromfattende måleintervallet",
|
||||
"metricsIntervalS": "Måleintervall (s)",
|
||||
"metricsIntervalDesc2": "Sekunder mellom målebilder",
|
||||
"excludedMountsLabel": "Ekskluderte fester",
|
||||
"monitoredMountsLabel": "Tilpassede overvåkede stier",
|
||||
"monitoredMountsDesc": "Legg til stier som ikke er eksponert som separate monteringer, inkludert bindingsmonterte Home Assistant-stier som /config.",
|
||||
"monitoredMountPathPlaceholder": "Sti (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Etikett (valgfritt)",
|
||||
"addMonitoredMount": "Legg til sti",
|
||||
"excludedMountsDesc": "Skjul spesifikke monteringspunkter eller filsystemtyper (f.eks. nfs, cifs) fra diskbruk og varsler for denne verten.",
|
||||
"excludedMountsPlaceholder": "Monteringssti (/mnt/nas) eller filsystemtype (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Ingen monteringer er utelukket. Alle oppdagede filsystemer vises.",
|
||||
"addExcludedMount": "Legge til",
|
||||
"visibleWidgets": "Synlige widgeter",
|
||||
"widgetsMovedToHostMetrics": "Kort legges nå til, arrangeres og endres i størrelse direkte i fanen Vertsmålinger. Åpne Vertsmålinger for denne verten og bruk Tilpass for å velge hvilke kort som vises.",
|
||||
"quickActionsLabel": "Hurtighandlinger",
|
||||
"quickActionsToolbar": "Hurtighandlinger vises som knapper i verktøylinjen for vertsmålinger for utførelse av kommandoer med ett klikk.",
|
||||
"noQuickActions": "Ingen hurtighandlinger ennå.",
|
||||
"buttonLabel": "Knappetikett",
|
||||
"selectSnippetPlaceholder": "Velg utdrag...",
|
||||
"addActionBtn": "Legg til handling"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Målinger og varsler",
|
||||
"feature_metrics_desc": "Spor CPU, minne og disk over tid, og bli varslet når de blir dårlige."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Oppbevaring av metrikkhistorikk",
|
||||
"metricsHistoryRetentionRange": "1 til 90 dager",
|
||||
"days": "dager"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Ingen data tilgjengelig",
|
||||
"showCurrentValue": "Vis gjeldende verdi",
|
||||
"chartMetric": "Metrisk",
|
||||
"metricRange": "Spekter"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "Procesor",
|
||||
"memory": "Pamięć",
|
||||
"disk": "Dysk",
|
||||
"network": "Sieć",
|
||||
"uptime": "Czas działania",
|
||||
"processes": "Procesy",
|
||||
"available": "Dostępne",
|
||||
"free": "Wolne",
|
||||
"connecting": "Łączenie...",
|
||||
"connectionFailed": "Nie udało się połączyć z serwerem",
|
||||
"naCpus": "Brak danych o CPU",
|
||||
"cpuCores_one": "{{count}} rdzeń",
|
||||
"cpuCores_other": "{{count}} rdzeni",
|
||||
"cpuUsage": "Wykorzystanie procesora",
|
||||
"memoryUsage": "Wykorzystanie pamięci",
|
||||
"diskUsage": "Wykorzystanie dysku",
|
||||
"selectFilesystem": "Wybierz system plików",
|
||||
"temperature": "Temperatura",
|
||||
"highestTemperature": "Najwyższa temperatura",
|
||||
"primaryTemperatureSensor": "Główny czujnik",
|
||||
"gpu": {
|
||||
"title": "Procesor graficzny",
|
||||
"noDevice": "Nie wykryto procesora graficznego NVIDIA. Zainstaluj sterownik NVIDIA (zawiera on nvidia-smi), aby wyświetlić dane dotyczące procesora graficznego.",
|
||||
"driver": "Kierowca {{version}}",
|
||||
"utilization": "Wykorzystanie",
|
||||
"memory": "Pamięć VRAM",
|
||||
"temperature": "Temp",
|
||||
"power": "Moc",
|
||||
"fan": "Wentylator",
|
||||
"processes": "Procesy GPU",
|
||||
"noProcesses": "Żaden proces nie wykorzystuje procesora GPU"
|
||||
},
|
||||
"failedToFetchHostConfig": "Nie udało się pobrać konfiguracji hosta",
|
||||
"serverOffline": "Serwer offline",
|
||||
"cannotFetchMetrics": "Nie można pobrać metryk z serwera offline",
|
||||
"totpFailed": "Weryfikacja TOTP nie powiodła się",
|
||||
"noneAuthNotSupported": "Metryki hosta nie obsługują typu uwierzytelniania „none”.",
|
||||
"noHostSelected": "Nie wybrano hosta",
|
||||
"load": "Obciążenie",
|
||||
"systemInfo": "Informacje o systemie",
|
||||
"hostname": "Nazwa hosta",
|
||||
"operatingSystem": "System operacyjny",
|
||||
"kernel": "Jądro",
|
||||
"seconds": "sekundy",
|
||||
"networkInterfaces": "Interfejsy sieciowe",
|
||||
"noInterfacesFound": "Nie znaleziono interfejsów sieciowych",
|
||||
"noProcessesFound": "Nie znaleziono procesów",
|
||||
"processesTotal": "łącznie",
|
||||
"processesRunning": "działa",
|
||||
"loginStats": "Statystyki logowania SSH",
|
||||
"noRecentLoginData": "Brak ostatnich danych logowania",
|
||||
"executingQuickAction": "Wykonywanie {{name}}...",
|
||||
"quickActionSuccess": "{{name}} ukończono pomyślnie",
|
||||
"quickActionFailed": "{{name}} nie powiodło się",
|
||||
"quickActionError": "Nie udało się wykonać {{name}}",
|
||||
"ports": {
|
||||
"title": "Porty nasłuchujące",
|
||||
"protocol": "Protokół",
|
||||
"port": "Port",
|
||||
"address": "Adres",
|
||||
"process": "Proces",
|
||||
"search": "Przeszukaj porty...",
|
||||
"allProtocols": "Wszystkie",
|
||||
"noData": "Brak danych portów nasłuchujących"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Zapora sieciowa",
|
||||
"inactive": "Nieaktywna",
|
||||
"policy": "Polityka",
|
||||
"rules": "reguł",
|
||||
"noRules": "Brak reguł w tym łańcuchu",
|
||||
"noData": "Brak dostępnych danych zapory sieciowej",
|
||||
"action": "Akcja",
|
||||
"protocol": "Proto",
|
||||
"port": "Port",
|
||||
"source": "Źródło",
|
||||
"anywhere": "Gdziekolwiek",
|
||||
"chains": "łańcuchy"
|
||||
},
|
||||
"loadAvg": "Obciążenie średnie",
|
||||
"swap": "Swap",
|
||||
"architecture": "Architektura",
|
||||
"refresh": "Odśwież",
|
||||
"retry": "Ponów",
|
||||
"customize": "Dostosuj układ",
|
||||
"reset": "Resetuj",
|
||||
"tabLive": "Na żywo",
|
||||
"editModeInstructions": "Przeciągnij karty, aby zmienić kolejność, przeciągnij dolną krawędź, aby zmienić wysokość, a przyciskiem szerokości zmień szerokość karty. Dodawaj lub usuwaj karty poniżej.",
|
||||
"managers": {
|
||||
"services": "Usługi",
|
||||
"processInspector": "Inspektor procesów",
|
||||
"logViewer": "Przeglądarka logów",
|
||||
"cron": "Zadania cron",
|
||||
"packages": "Pakiety",
|
||||
"ssl": "Certyfikaty SSL",
|
||||
"firewall": "Zapora sieciowa",
|
||||
"users": "Użytkownicy i uprawnienia",
|
||||
"healthCheck": "Kontrole stanu",
|
||||
"diskBreakdown": "Podział dysku",
|
||||
"systemdTimers": "Timery",
|
||||
"topMemory": "Wg pamięci",
|
||||
"noData": "Brak danych",
|
||||
"sudoHint": "Ustaw hasło sudo dla tego hosta w edytorze hosta, aby włączyć akcje uprzywilejowane.",
|
||||
"filter": "Filtr...",
|
||||
"start": "Start",
|
||||
"stop": "Zatrzymaj",
|
||||
"restart": "Uruchom ponownie",
|
||||
"actionDone": "Zaktualizowano {{name}}",
|
||||
"actionFailed": "Akcja nie powiodła się",
|
||||
"signalSent": "Sygnał wysłany do PID {{pid}}",
|
||||
"killHint": "Kliknięcie: zakończ (SIGTERM). Kliknięcie prawym przyciskiem myszy: wymuś zakończenie (SIGKILL).",
|
||||
"working": "Przetwarzanie...",
|
||||
"update": "Aktualizuj",
|
||||
"upgradeAll": "Uaktualnij wszystko",
|
||||
"allUpToDate": "Wszystko jest aktualne",
|
||||
"save": "Zapisz",
|
||||
"command": "Polecenie",
|
||||
"enabled": "Włączone",
|
||||
"cronSaved": "Zaktualizowano crontab",
|
||||
"clients": "Klienci",
|
||||
"dryRun": "Symulacja",
|
||||
"renew": "Odnów",
|
||||
"noAcmeClient": "Nie znaleziono klienta ACME (certbot lub acme.sh) na tym hoście.",
|
||||
"addInputRule": "Dodaj regułę INPUT",
|
||||
"firewallWarning": "Zmiany działają tylko do restartu, dopóki nie zostaną utrwalone. Uważaj, aby nie odciąć sobie dostępu.",
|
||||
"ruleApplied": "Zastosowano regułę",
|
||||
"invalidPort": "Wprowadź prawidłowy port (1-65535)",
|
||||
"newUsername": "Nowa nazwa użytkownika",
|
||||
"addUser": "Dodaj",
|
||||
"deleteUser": "Usuń użytkownika",
|
||||
"noHealthChecks": "Nie skonfigurowano jeszcze żadnych kontroli stanu.",
|
||||
"follow": "Śledź",
|
||||
"noLogData": "Brak wyjścia logu.",
|
||||
"tree": "Drzewo",
|
||||
"enableDisable": "Włącz/wyłącz przy starcie systemu",
|
||||
"grantSudo": "Przyznaj sudo",
|
||||
"revokeSudo": "Odwołaj sudo",
|
||||
"sslIssueCert": "Wystaw certyfikat",
|
||||
"sslExpired": "Wygasły",
|
||||
"sslInDays": "za {{days}} dni",
|
||||
"sslNeedDomain": "Wprowadź co najmniej jedną domenę",
|
||||
"sslIssued": "Wystawiono certyfikat",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (samodzielny)",
|
||||
"sslHttpWebroot": "HTTP (webroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "Dostawca DNS (np. Cloudflare)",
|
||||
"sslIssueHint": "Poświadczenia dostawcy DNS muszą być już skonfigurowane na hoście.",
|
||||
"sslRevoke": "Unieważnij certyfikat",
|
||||
"sslRevoked": "Unieważniono certyfikat",
|
||||
"sslRevokeConfirm": "Unieważnić i usunąć certyfikat „{{name}}”? Tego nie można cofnąć.",
|
||||
"healthRun": "Uruchom",
|
||||
"healthName": "Nazwa",
|
||||
"healthTarget": "Host / adres",
|
||||
"healthAddCheck": "Dodaj kontrolę",
|
||||
"healthSaved": "Zapisano kontrole stanu",
|
||||
"healthMissingFields": "Każda kontrola wymaga nazwy i celu",
|
||||
"logFile": "Plik",
|
||||
"logUnit": "Unit",
|
||||
"logCustomPath": "Ścieżka niestandardowa w /var/log (opcjonalnie)",
|
||||
"logGrep": "Filtruj wiersze...",
|
||||
"firewallPersist": "Utrwal reguły",
|
||||
"firewallPersisted": "Utrwalono reguły zapory",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Tailscale",
|
||||
"wgNotInstalled": "WireGuard nie jest zainstalowany na tym hoście",
|
||||
"wgNoInterfaces": "Brak skonfigurowanych interfejsów WireGuard",
|
||||
"wgInterfaceUp": "Podnieś",
|
||||
"wgInterfaceDown": "Wyłącz",
|
||||
"wgBringingUp": "Podnoszenie {{name}}...",
|
||||
"wgBringingDown": "Wyłączanie {{name}}...",
|
||||
"wgInterfaceUpDone": "{{name}} jest podniesiony",
|
||||
"wgInterfaceDownDone": "{{name}} jest wyłączony",
|
||||
"wgListenPort": "Port",
|
||||
"wgPublicKey": "Klucz publiczny",
|
||||
"wgEndpoint": "Punkt końcowy",
|
||||
"wgAllowedIPs": "Dozwolone adresy IP",
|
||||
"wgLastHandshake": "Ostatni handshake",
|
||||
"wgHandshakeNever": "Nigdy",
|
||||
"wgTransfer": "Transfer",
|
||||
"tsNotInstalled": "Tailscale nie jest zainstalowany na tym hoście",
|
||||
"tsRunning": "Działa",
|
||||
"tsStopped": "Zatrzymany",
|
||||
"tsEnable": "Połącz",
|
||||
"tsDisable": "Odłącz",
|
||||
"tsEnabling": "Łączenie z Tailscale...",
|
||||
"tsDisabling": "Rozłączanie z Tailscale...",
|
||||
"tsEnabled": "Tailscale połączony",
|
||||
"tsDisabled": "Tailscale rozłączony",
|
||||
"tsIPs": "Adresy IP Tailscale",
|
||||
"tsPeers": "Peery",
|
||||
"tsOnline": "Online",
|
||||
"tsOffline": "Offline",
|
||||
"tsExitNode": "Węzeł wyjściowy",
|
||||
"tsExitNodeActive": "Węzeł wyjściowy aktywny",
|
||||
"tsHostname": "Nazwa hosta"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Historia metryk",
|
||||
"historySuffix": "Historia",
|
||||
"cpuMemoryDisk": "Procesor / Pamięć / Dysk",
|
||||
"network": "Sieć",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "Brak dostępnych danych historycznych dla tego przedziału czasu.",
|
||||
"custom": "Niestandardowy",
|
||||
"to": "do",
|
||||
"apply": "Zastosuj",
|
||||
"viewHistory": "Wyświetl historię"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Statystyki Proxmox",
|
||||
"cpuUsage": "Wykorzystanie procesora",
|
||||
"memoryUsage": "Wykorzystanie pamięci",
|
||||
"diskUsage": "Wykorzystanie dysku",
|
||||
"networkInterfaces": "Interfejsy sieciowe",
|
||||
"uptime": "Czas działania",
|
||||
"systemInfo": "Informacje o systemie",
|
||||
"guestsSummary": "Goście",
|
||||
"storagePools": "Pule magazynowe",
|
||||
"clusterHealth": "Kondycja klastra",
|
||||
"cpuCores_one": "{{count}} rdzeń",
|
||||
"cpuCores_other": "{{count}} rdzeni",
|
||||
"used": "Użyte",
|
||||
"total": "Łącznie",
|
||||
"hostname": "Nazwa hosta",
|
||||
"kernel": "Jądro",
|
||||
"pveVersion": "Wersja PVE",
|
||||
"name": "Nazwa",
|
||||
"status": "Status",
|
||||
"type": "Typ",
|
||||
"cpu": "Procesor",
|
||||
"mem": "Pamięć",
|
||||
"disk": "Dysk",
|
||||
"running": "Działa",
|
||||
"stopped": "Zatrzymany",
|
||||
"guestCounts": "{{running}}/{{total}} działa",
|
||||
"inactive": "Nieaktywny",
|
||||
"notClustered": "Samodzielny węzeł (nie jest częścią klastra)",
|
||||
"quorate": "Kworum osiągnięte",
|
||||
"notQuorate": "Brak kworum",
|
||||
"nodeOnline": "Online",
|
||||
"nodeOffline": "Offline",
|
||||
"noHostSelected": "Nie wybrano hosta",
|
||||
"pveshNotFound": "Nie znaleziono pvesh. Czy to węzeł Proxmox?",
|
||||
"nodeDetectionFailed": "Nie można ustalić prawidłowej nazwy węzła Proxmox",
|
||||
"connecting": "Łączenie...",
|
||||
"connectionFailed": "Nie udało się połączyć z węzłem Proxmox",
|
||||
"refresh": "Odśwież",
|
||||
"searchGuests": "Wyszukaj gości...",
|
||||
"filterAll": "Wszystkie",
|
||||
"filterVm": "VM",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "Nie znaleziono maszyn wirtualnych ani kontenerów LXC na tym węźle.",
|
||||
"noGuestsMatch": "Żaden gość nie pasuje do bieżących filtrów."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Metryki hosta"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Metryki hosta",
|
||||
"enableProxmoxStats": "Włącz statystyki Proxmox",
|
||||
"enableProxmoxStatsDesc": "Pokaż kartę statystyk Proxmox dla tego hosta z bieżącymi statystykami węzła, gości, magazynu i klastra zbieranymi przez SSH.",
|
||||
"proxmoxStatsPollInterval": "Interwał sondowania (sekundy)",
|
||||
"proxmoxStatsPollIntervalDesc": "Minimum 15 sekund. Jak często odświeżać statystyki węzła Proxmox.",
|
||||
"proxmoxStatsNodeOverride": "Nadpisanie nazwy węzła",
|
||||
"proxmoxStatsNodeOverrideDesc": "Zastąp automatyczne wykrywanie nazwy węzła Proxmox (domyślnie wykrywane za pomocą nazwy hosta).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Automatycznie wykryto na podstawie nazwy hosta",
|
||||
"metricsCollectionLabel": "Zbieranie metryk",
|
||||
"enableMetricsLabel": "Włącz metryki",
|
||||
"enableMetricsDesc": "Zbieraj dane o procesorze, pamięci RAM, dysku i inne metryki z tego hosta",
|
||||
"useGlobalMetrics": "Użyj interwału globalnego",
|
||||
"useGlobalMetricsDesc": "Użyj globalnego interwału zbierania metryk",
|
||||
"metricsIntervalS": "Interwał metryk (s)",
|
||||
"metricsIntervalDesc2": "Sekundy między migawkami metryk",
|
||||
"excludedMountsLabel": "Wykluczone montowania",
|
||||
"monitoredMountsLabel": "Niestandardowe monitorowane ścieżki",
|
||||
"monitoredMountsDesc": "Dodaj ścieżki, które nie są udostępniane jako osobne montowania, w tym ścieżki Home Assistant montowane przez bind, takie jak /config.",
|
||||
"monitoredMountPathPlaceholder": "Ścieżka (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Etykieta (opcjonalnie)",
|
||||
"addMonitoredMount": "Dodaj ścieżkę",
|
||||
"excludedMountsDesc": "Ukryj określone punkty montowania lub typy systemów plików (np. nfs, cifs) w informacjach o wykorzystaniu dysku i alertach dla tego hosta.",
|
||||
"excludedMountsPlaceholder": "Ścieżka montowania (/mnt/nas) lub typ systemu plików (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Brak wykluczonych montowań. Wyświetlane są wszystkie wykryte systemy plików.",
|
||||
"addExcludedMount": "Dodaj",
|
||||
"visibleWidgets": "Widoczne widżety",
|
||||
"widgetsMovedToHostMetrics": "Karty dodaje się, układa i skaluje bezpośrednio na karcie „Metryki hosta”. Otwórz Metryki hosta dla tego hosta i użyj opcji „Dostosuj”, aby wybrać wyświetlane karty.",
|
||||
"quickActionsLabel": "Szybkie akcje",
|
||||
"quickActionsToolbar": "Szybkie akcje pojawiają się jako przyciski na pasku narzędzi Metryki hosta, umożliwiając wykonanie polecenia jednym kliknięciem.",
|
||||
"noQuickActions": "Brak szybkich akcji.",
|
||||
"buttonLabel": "Etykieta przycisku",
|
||||
"selectSnippetPlaceholder": "Wybierz snippet...",
|
||||
"addActionBtn": "Dodaj akcję"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Metryki i alerty",
|
||||
"feature_metrics_desc": "Śledź procesor, pamięć i dysk w czasie i otrzymuj alerty, gdy przekroczą próg."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Przechowywanie historii metryk",
|
||||
"metricsHistoryRetentionRange": "od 1 do 90 dni",
|
||||
"days": "dni"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Brak dostępnych danych",
|
||||
"showCurrentValue": "Pokaż wartość bieżącą",
|
||||
"chartMetric": "Metryka",
|
||||
"metricRange": "Zakres"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "Memória",
|
||||
"disk": "Disco",
|
||||
"network": "Rede",
|
||||
"uptime": "Tempo de atividade",
|
||||
"processes": "Processos",
|
||||
"available": "Disponível",
|
||||
"free": "Livre",
|
||||
"connecting": "Conectando...",
|
||||
"connectionFailed": "Falha ao conectar-se ao servidor",
|
||||
"naCpus": "N/A CPU(s)",
|
||||
"cpuCores_one": "{{count}} Núcleo",
|
||||
"cpuCores_other": "{{count}} Núcleos",
|
||||
"cpuUsage": "Utilização da CPU",
|
||||
"memoryUsage": "Uso de memória",
|
||||
"diskUsage": "Utilização do disco",
|
||||
"selectFilesystem": "Selecione o sistema de arquivos",
|
||||
"temperature": "Temperatura",
|
||||
"highestTemperature": "Temperatura mais alta",
|
||||
"primaryTemperatureSensor": "Sensor primário",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "Nenhuma GPU NVIDIA detectada. Instale o driver da NVIDIA (que fornece o nvidia-smi) para visualizar as métricas da GPU.",
|
||||
"driver": "Motorista {{version}}",
|
||||
"utilization": "Utilização",
|
||||
"memory": "VRAM",
|
||||
"temperature": "Temp",
|
||||
"power": "Poder",
|
||||
"fan": "Fã",
|
||||
"processes": "processos da GPU",
|
||||
"noProcesses": "Nenhum processo está utilizando a GPU."
|
||||
},
|
||||
"failedToFetchHostConfig": "Falha ao obter a configuração do host",
|
||||
"serverOffline": "Servidor offline",
|
||||
"cannotFetchMetrics": "Não foi possível obter métricas do servidor offline.",
|
||||
"totpFailed": "A verificação TOTP falhou.",
|
||||
"noneAuthNotSupported": "O Host Metrics não suporta o tipo de autenticação 'nenhum'.",
|
||||
"noHostSelected": "Nenhum host selecionado",
|
||||
"load": "Carregar",
|
||||
"systemInfo": "Informações do sistema",
|
||||
"hostname": "Nome do host",
|
||||
"operatingSystem": "Sistema operacional",
|
||||
"kernel": "Kernel",
|
||||
"seconds": "segundos",
|
||||
"networkInterfaces": "Interfaces de rede",
|
||||
"noInterfacesFound": "Nenhuma interface de rede encontrada",
|
||||
"noProcessesFound": "Nenhum processo encontrado",
|
||||
"processesTotal": "total",
|
||||
"processesRunning": "correndo",
|
||||
"loginStats": "Estatísticas de login SSH",
|
||||
"noRecentLoginData": "Nenhum dado de login recente",
|
||||
"executingQuickAction": "Executando {{name}}...",
|
||||
"quickActionSuccess": "{{name}} concluído com sucesso",
|
||||
"quickActionFailed": "{{name}} falhou",
|
||||
"quickActionError": "Falha ao executar {{name}}",
|
||||
"ports": {
|
||||
"title": "Portas de escuta",
|
||||
"protocol": "Protocolo",
|
||||
"port": "Porta",
|
||||
"address": "Endereço",
|
||||
"process": "Processo",
|
||||
"search": "Portas de pesquisa...",
|
||||
"allProtocols": "Todos",
|
||||
"noData": "Sem dados de portas de escuta"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Firewall",
|
||||
"inactive": "Inativo",
|
||||
"policy": "Política",
|
||||
"rules": "regras",
|
||||
"noRules": "Não há regras nesta corrente.",
|
||||
"noData": "Não há dados de firewall disponíveis.",
|
||||
"action": "Ação",
|
||||
"protocol": "Proto",
|
||||
"port": "Porta",
|
||||
"source": "Fonte",
|
||||
"anywhere": "Em qualquer lugar",
|
||||
"chains": "correntes"
|
||||
},
|
||||
"loadAvg": "Carga média",
|
||||
"swap": "Trocar",
|
||||
"architecture": "Arquitetura",
|
||||
"refresh": "Atualizar",
|
||||
"retry": "Tentar novamente",
|
||||
"customize": "Personalizar layout",
|
||||
"reset": "Reiniciar",
|
||||
"tabLive": "Ao vivo",
|
||||
"editModeInstructions": "Arraste os cartões para reorganizá-los, arraste a borda inferior para redimensioná-los e use o botão de largura para alterar a extensão de um cartão. Adicione ou remova cartões abaixo.",
|
||||
"managers": {
|
||||
"services": "Serviços",
|
||||
"processInspector": "Inspetor de Processos",
|
||||
"logViewer": "Visualizador de Logs",
|
||||
"cron": "Tarefas agendadas",
|
||||
"packages": "Pacotes",
|
||||
"ssl": "Certificados SSL",
|
||||
"firewall": "Firewall",
|
||||
"users": "Usuários e permissões",
|
||||
"healthCheck": "Exames de saúde",
|
||||
"diskBreakdown": "Avaria do disco",
|
||||
"systemdTimers": "Temporizadores",
|
||||
"topMemory": "Melhor por memória",
|
||||
"noData": "Sem dados",
|
||||
"sudoHint": "Defina uma senha sudo para este host no editor de hosts para habilitar ações privilegiadas.",
|
||||
"filter": "Filtro...",
|
||||
"start": "Começar",
|
||||
"stop": "Parar",
|
||||
"restart": "Reiniciar",
|
||||
"actionDone": "{{name}} atualizado",
|
||||
"actionFailed": "A ação falhou",
|
||||
"signalSent": "Sinal enviado para PID {{pid}}",
|
||||
"killHint": "Clique: encerrar (SIGTERM). Clique com o botão direito: forçar o encerramento (SIGKILL).",
|
||||
"working": "Trabalhando...",
|
||||
"update": "Atualizar",
|
||||
"upgradeAll": "Atualizar tudo",
|
||||
"allUpToDate": "Tudo está atualizado.",
|
||||
"save": "Salvar",
|
||||
"command": "Comando",
|
||||
"enabled": "Habilitado",
|
||||
"cronSaved": "Crontab atualizado",
|
||||
"clients": "Clientes",
|
||||
"dryRun": "Ensaio geral",
|
||||
"renew": "Renovar",
|
||||
"noAcmeClient": "Nenhum cliente ACME (certbot ou acme.sh) foi encontrado neste host.",
|
||||
"addInputRule": "Adicionar regra de ENTRADA",
|
||||
"firewallWarning": "As alterações são válidas apenas em tempo de execução até serem persistidas. Tenha cuidado para não bloquear o seu próprio acesso.",
|
||||
"ruleApplied": "Regra aplicada",
|
||||
"invalidPort": "Digite uma porta válida (1-65535)",
|
||||
"newUsername": "Novo nome de usuário",
|
||||
"addUser": "Adicionar",
|
||||
"deleteUser": "Excluir usuário",
|
||||
"noHealthChecks": "Nenhuma verificação de integridade configurada ainda.",
|
||||
"follow": "Seguir",
|
||||
"noLogData": "Nenhuma saída de log.",
|
||||
"tree": "Árvore",
|
||||
"enableDisable": "Ativar/desativar na inicialização",
|
||||
"grantSudo": "Conceder sudo",
|
||||
"revokeSudo": "Revogar sudo",
|
||||
"sslIssueCert": "Emitir certificado",
|
||||
"sslExpired": "Expirado",
|
||||
"sslInDays": "em {{days}}d",
|
||||
"sslNeedDomain": "Insira pelo menos um domínio.",
|
||||
"sslIssued": "Certificado emitido",
|
||||
"sslDomainsPlaceholder": "exemplo.com, www.exemplo.com",
|
||||
"sslHttpStandalone": "HTTP (autônomo)",
|
||||
"sslHttpWebroot": "HTTP (raiz da web)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "provedor de DNS (ex: Cloudflare)",
|
||||
"sslIssueHint": "As credenciais do provedor de DNS já devem estar configuradas no host.",
|
||||
"sslRevoke": "Revogar certificado",
|
||||
"sslRevoked": "Certificado revogado",
|
||||
"sslRevokeConfirm": "Revogar e remover o certificado \"{{name}}\"? Isso não pode ser desfeito.",
|
||||
"healthRun": "Correr",
|
||||
"healthName": "Nome",
|
||||
"healthTarget": "Endereço do host",
|
||||
"healthAddCheck": "Adicionar verificação",
|
||||
"healthSaved": "Exames de saúde salvos",
|
||||
"healthMissingFields": "Cada verificação precisa de um nome e um alvo.",
|
||||
"logFile": "Arquivo",
|
||||
"logUnit": "Unidade",
|
||||
"logCustomPath": "Caminho personalizado em /var/log (opcional)",
|
||||
"logGrep": "Linhas de filtro...",
|
||||
"firewallPersist": "Regras persistentes",
|
||||
"firewallPersisted": "As regras do firewall persistiram.",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Escama da cauda",
|
||||
"wgNotInstalled": "O WireGuard não está instalado neste host.",
|
||||
"wgNoInterfaces": "Nenhuma interface WireGuard configurada",
|
||||
"wgInterfaceUp": "Levantar a questão",
|
||||
"wgInterfaceDown": "Derrubem",
|
||||
"wgBringingUp": "Trazendo {{name}} para cima...",
|
||||
"wgBringingDown": "Derrubando {{name}}...",
|
||||
"wgInterfaceUpDone": "{{name}} está ativo",
|
||||
"wgInterfaceDownDone": "{{name}} está inativo",
|
||||
"wgListenPort": "Porta",
|
||||
"wgPublicKey": "Chave pública",
|
||||
"wgEndpoint": "Ponto final",
|
||||
"wgAllowedIPs": "IPs permitidos",
|
||||
"wgLastHandshake": "Último aperto de mãos",
|
||||
"wgHandshakeNever": "Nunca",
|
||||
"wgTransfer": "Transferir",
|
||||
"tsNotInstalled": "O Tailscale não está instalado neste host.",
|
||||
"tsRunning": "Correndo",
|
||||
"tsStopped": "Parou",
|
||||
"tsEnable": "Conectar",
|
||||
"tsDisable": "Desconectar",
|
||||
"tsEnabling": "Conectando-se à Tailscale...",
|
||||
"tsDisabling": "Desconectando-se do Tailscale...",
|
||||
"tsEnabled": "Escama de cauda conectada",
|
||||
"tsDisabled": "Escama de cauda desconectada",
|
||||
"tsIPs": "IPs da Tailscale",
|
||||
"tsPeers": "Pares",
|
||||
"tsOnline": "On-line",
|
||||
"tsOffline": "Offline",
|
||||
"tsExitNode": "Nó de saída",
|
||||
"tsExitNodeActive": "Nó de saída ativo",
|
||||
"tsHostname": "Nome do host"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Histórico de métricas",
|
||||
"historySuffix": "História",
|
||||
"cpuMemoryDisk": "CPU / Memória / Disco",
|
||||
"network": "Rede",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "Não há dados históricos disponíveis para este período.",
|
||||
"custom": "Personalizado",
|
||||
"to": "para",
|
||||
"apply": "Aplicar",
|
||||
"viewHistory": "Ver histórico"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Estatísticas do Proxmox",
|
||||
"cpuUsage": "Utilização da CPU",
|
||||
"memoryUsage": "Uso de memória",
|
||||
"diskUsage": "Utilização do disco",
|
||||
"networkInterfaces": "Interfaces de rede",
|
||||
"uptime": "Tempo de atividade",
|
||||
"systemInfo": "Informações do sistema",
|
||||
"guestsSummary": "Convidados",
|
||||
"storagePools": "Piscinas de armazenamento",
|
||||
"clusterHealth": "Cluster Health",
|
||||
"cpuCores_one": "{{count}} Núcleo",
|
||||
"cpuCores_other": "{{count}} Núcleos",
|
||||
"used": "Usado",
|
||||
"total": "Total",
|
||||
"hostname": "Nome do host",
|
||||
"kernel": "Kernel",
|
||||
"pveVersion": "Versão PvE",
|
||||
"name": "Nome",
|
||||
"status": "Status",
|
||||
"type": "Tipo",
|
||||
"cpu": "CPU",
|
||||
"mem": "Membro",
|
||||
"disk": "Disco",
|
||||
"running": "Correndo",
|
||||
"stopped": "Parou",
|
||||
"guestCounts": "{{running}}/{{total}} em execução",
|
||||
"inactive": "Inativo",
|
||||
"notClustered": "Nó independente (não faz parte de um cluster)",
|
||||
"quorate": "Quorate",
|
||||
"notQuorate": "Sem quórum",
|
||||
"nodeOnline": "On-line",
|
||||
"nodeOffline": "Offline",
|
||||
"noHostSelected": "Nenhum host selecionado",
|
||||
"pveshNotFound": "pvesh não encontrado - este é um nó Proxmox?",
|
||||
"nodeDetectionFailed": "Não foi possível determinar um nome de nó Proxmox válido.",
|
||||
"connecting": "Conectando...",
|
||||
"connectionFailed": "Falha ao conectar-se ao nó Proxmox",
|
||||
"refresh": "Atualizar",
|
||||
"searchGuests": "Pesquisar hóspedes...",
|
||||
"filterAll": "Todos",
|
||||
"filterVm": "VM",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "Nenhuma máquina virtual ou contêiner LXC foi encontrado neste nó.",
|
||||
"noGuestsMatch": "Nenhum hóspede corresponde aos filtros atuais."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Métricas do host"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Métricas do host",
|
||||
"enableProxmoxStats": "Ativar estatísticas do Proxmox",
|
||||
"enableProxmoxStatsDesc": "Exibe a aba de Estatísticas do Proxmox para este host com estatísticas em tempo real de nós, máquinas virtuais, armazenamento e cluster, coletadas via SSH.",
|
||||
"proxmoxStatsPollInterval": "Intervalo de sondagem (segundos)",
|
||||
"proxmoxStatsPollIntervalDesc": "Mínimo de 15 segundos. Com que frequência as estatísticas do nó Proxmox devem ser atualizadas.",
|
||||
"proxmoxStatsNodeOverride": "Substituição do nome do nó",
|
||||
"proxmoxStatsNodeOverrideDesc": "Substituir a detecção automática do nome do nó Proxmox (detectado por padrão através do nome do host).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Detectado automaticamente a partir do nome do host",
|
||||
"metricsCollectionLabel": "Coleta de métricas",
|
||||
"enableMetricsLabel": "Ativar métricas",
|
||||
"enableMetricsDesc": "Coletar métricas de CPU, RAM, disco e outras deste host.",
|
||||
"useGlobalMetrics": "Usar intervalo global",
|
||||
"useGlobalMetricsDesc": "Substituir pelo intervalo de métricas de todo o servidor",
|
||||
"metricsIntervalS": "Intervalo de métricas (s)",
|
||||
"metricsIntervalDesc2": "Segundos entre instantâneos de métricas",
|
||||
"excludedMountsLabel": "Suportes excluídos",
|
||||
"monitoredMountsLabel": "Caminhos monitorados personalizados",
|
||||
"monitoredMountsDesc": "Adicione caminhos que não estejam expostos como montagens separadas, incluindo caminhos do Home Assistant montados via bind, como /config.",
|
||||
"monitoredMountPathPlaceholder": "Caminho (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Rótulo (opcional)",
|
||||
"addMonitoredMount": "Adicionar caminho",
|
||||
"excludedMountsDesc": "Oculte pontos de montagem ou tipos de sistema de arquivos específicos (por exemplo, NFS, CIFS) do uso de disco e dos alertas para este host.",
|
||||
"excludedMountsPlaceholder": "Caminho de montagem (/mnt/nas) ou tipo de sistema de arquivos (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Nenhuma montagem excluída. Todos os sistemas de arquivos detectados são exibidos.",
|
||||
"addExcludedMount": "Adicionar",
|
||||
"visibleWidgets": "Widgets Visíveis",
|
||||
"widgetsMovedToHostMetrics": "Agora, os cartões podem ser adicionados, organizados e redimensionados diretamente na guia Métricas do Host. Abra as Métricas do Host para este host e use a opção Personalizar para escolher quais cartões serão exibidos.",
|
||||
"quickActionsLabel": "Ações rápidas",
|
||||
"quickActionsToolbar": "As ações rápidas aparecem como botões na barra de ferramentas do Host Metrics para execução de comandos com um único clique.",
|
||||
"noQuickActions": "Nenhuma ação imediata ainda.",
|
||||
"buttonLabel": "Rótulo do botão",
|
||||
"selectSnippetPlaceholder": "Selecione o trecho...",
|
||||
"addActionBtn": "Adicionar ação"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Métricas e alertas",
|
||||
"feature_metrics_desc": "Monitore o uso de CPU, memória e disco ao longo do tempo e receba alertas quando apresentarem problemas."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Retenção do histórico de métricas",
|
||||
"metricsHistoryRetentionRange": "1 a 90 dias",
|
||||
"days": "dias"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Não há dados disponíveis.",
|
||||
"showCurrentValue": "Mostrar valor atual",
|
||||
"chartMetric": "Métrica",
|
||||
"metricRange": "Faixa"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "Memória",
|
||||
"disk": "Disco",
|
||||
"network": "Rede",
|
||||
"uptime": "Tempo de atividade",
|
||||
"processes": "Processos",
|
||||
"available": "Disponível",
|
||||
"free": "Livre",
|
||||
"connecting": "A ligar...",
|
||||
"connectionFailed": "Falha ao ligar ao servidor",
|
||||
"naCpus": "N/D CPU(s)",
|
||||
"cpuCores_one": "{{count}} Núcleo",
|
||||
"cpuCores_other": "{{count}} Núcleos",
|
||||
"cpuUsage": "Utilização da CPU",
|
||||
"memoryUsage": "Utilização da memória",
|
||||
"diskUsage": "Utilização do disco",
|
||||
"selectFilesystem": "Selecione o sistema de ficheiros",
|
||||
"temperature": "Temperatura",
|
||||
"highestTemperature": "Temperatura máxima",
|
||||
"primaryTemperatureSensor": "Sensor primário",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "Nenhuma GPU NVIDIA detetada. Instale o controlador da NVIDIA (que fornece o nvidia-smi) para visualizar as métricas da GPU.",
|
||||
"driver": "Motorista {{version}}",
|
||||
"utilization": "Utilização",
|
||||
"memory": "VRAM",
|
||||
"temperature": "Temp",
|
||||
"power": "Poder",
|
||||
"fan": "Fã",
|
||||
"processes": "processos da GPU",
|
||||
"noProcesses": "Nenhum processo está a utilizar a GPU."
|
||||
},
|
||||
"failedToFetchHostConfig": "Falha ao obter a configuração do servidor",
|
||||
"serverOffline": "Servidor offline",
|
||||
"cannotFetchMetrics": "Não é possível obter métricas do servidor offline",
|
||||
"totpFailed": "Falha na verificação TOTP",
|
||||
"noneAuthNotSupported": "Host Metrics não suporta o tipo de autenticação 'none'.",
|
||||
"noHostSelected": "Nenhum host selecionado",
|
||||
"load": "Carga",
|
||||
"systemInfo": "Informação do Sistema",
|
||||
"hostname": "Nome do host",
|
||||
"operatingSystem": "Sistema Operativo",
|
||||
"kernel": "Kernel",
|
||||
"seconds": "segundos",
|
||||
"networkInterfaces": "Interfaces de Rede",
|
||||
"noInterfacesFound": "Nenhuma interface de rede encontrada",
|
||||
"noProcessesFound": "Nenhum processo encontrado",
|
||||
"processesTotal": "total",
|
||||
"processesRunning": "em execução",
|
||||
"loginStats": "Estatísticas de início de sessão SSH",
|
||||
"noRecentLoginData": "Sem dados de início de sessão recentes",
|
||||
"executingQuickAction": "A executar {{name}}...",
|
||||
"quickActionSuccess": "{{name}} concluído com sucesso",
|
||||
"quickActionFailed": "{{name}} falhou",
|
||||
"quickActionError": "Falha ao executar {{name}}",
|
||||
"ports": {
|
||||
"title": "Portas em escuta",
|
||||
"protocol": "Protocolo",
|
||||
"port": "Porta",
|
||||
"address": "Endereço",
|
||||
"process": "Processo",
|
||||
"search": "Pesquisar portas...",
|
||||
"allProtocols": "Todos",
|
||||
"noData": "Sem dados de portas em escuta"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Firewall",
|
||||
"inactive": "Inativo",
|
||||
"policy": "Política",
|
||||
"rules": "regras",
|
||||
"noRules": "Sem regras nesta cadeia",
|
||||
"noData": "Sem dados de firewall disponíveis",
|
||||
"action": "Ação",
|
||||
"protocol": "Proto",
|
||||
"port": "Porta",
|
||||
"source": "Origem",
|
||||
"anywhere": "Qualquer lugar",
|
||||
"chains": "cadeias"
|
||||
},
|
||||
"loadAvg": "Carga Média",
|
||||
"swap": "Swap",
|
||||
"architecture": "Arquitetura",
|
||||
"refresh": "Atualizar",
|
||||
"retry": "Tentar novamente",
|
||||
"customize": "Personalizar layout",
|
||||
"reset": "Redefinir",
|
||||
"tabLive": "Ao Vivo",
|
||||
"editModeInstructions": "Arraste os cartões para reorganizar, arraste a borda inferior para redimensionar e use o botão de largura para alterar a largura do cartão. Adicione ou remova cartões abaixo.",
|
||||
"managers": {
|
||||
"services": "Serviços",
|
||||
"processInspector": "Inspetor de Processos",
|
||||
"logViewer": "Visualizador de Registos",
|
||||
"cron": "Tarefas Cron",
|
||||
"packages": "Pacotes",
|
||||
"ssl": "Certificados SSL",
|
||||
"firewall": "Firewall",
|
||||
"users": "Utilizadores e Permissões",
|
||||
"healthCheck": "Verificações de Estado",
|
||||
"diskBreakdown": "Análise de Disco",
|
||||
"systemdTimers": "Temporizadores",
|
||||
"topMemory": "Top por Memória",
|
||||
"noData": "Sem dados",
|
||||
"sudoHint": "Defina uma palavra-passe sudo para este host no editor de hosts para ativar ações privilegiadas.",
|
||||
"filter": "Filtrar...",
|
||||
"start": "Iniciar",
|
||||
"stop": "Parar",
|
||||
"restart": "Reiniciar",
|
||||
"actionDone": "{{name}} atualizado",
|
||||
"actionFailed": "A ação falhou",
|
||||
"signalSent": "Sinal enviado para o PID {{pid}}",
|
||||
"killHint": "Clique: terminar (SIGTERM). Clique direito: forçar encerramento (SIGKILL).",
|
||||
"working": "A trabalhar...",
|
||||
"update": "Atualizar",
|
||||
"upgradeAll": "Atualizar tudo",
|
||||
"allUpToDate": "Tudo está atualizado",
|
||||
"save": "Guardar",
|
||||
"command": "Comando",
|
||||
"enabled": "Ativado",
|
||||
"cronSaved": "Crontab atualizado",
|
||||
"clients": "Clientes",
|
||||
"dryRun": "Simulação",
|
||||
"renew": "Renovar",
|
||||
"noAcmeClient": "Nenhum cliente ACME (certbot ou acme.sh) encontrado neste servidor.",
|
||||
"addInputRule": "Adicionar regra INPUT",
|
||||
"firewallWarning": "As alterações são efetuadas apenas em execução até serem guardadas. Tenha cuidado para não ficar bloqueado.",
|
||||
"ruleApplied": "Regra aplicada",
|
||||
"invalidPort": "Introduza uma porta válida (1-65535)",
|
||||
"newUsername": "Novo nome de utilizador",
|
||||
"addUser": "Adicionar",
|
||||
"deleteUser": "Eliminar utilizador",
|
||||
"noHealthChecks": "Nenhuma verificação de estado configurada ainda.",
|
||||
"follow": "Seguir",
|
||||
"noLogData": "Sem saída de registo.",
|
||||
"tree": "Árvore",
|
||||
"enableDisable": "Ativar / desativar no arranque",
|
||||
"grantSudo": "Conceder sudo",
|
||||
"revokeSudo": "Revogar sudo",
|
||||
"sslIssueCert": "Emitir certificado",
|
||||
"sslExpired": "Expirado",
|
||||
"sslInDays": "em {{days}}d",
|
||||
"sslNeedDomain": "Introduza pelo menos um domínio",
|
||||
"sslIssued": "Certificado emitido",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (autónomo)",
|
||||
"sslHttpWebroot": "HTTP (webroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "Fornecedor DNS (ex. cloudflare)",
|
||||
"sslIssueHint": "As credenciais do fornecedor DNS já devem estar configuradas no host.",
|
||||
"sslRevoke": "Revogar certificado",
|
||||
"sslRevoked": "Certificado revogado",
|
||||
"sslRevokeConfirm": "Revogar e remover o certificado \"{{name}}\"? Esta ação não pode ser anulada.",
|
||||
"healthRun": "Executar",
|
||||
"healthName": "Nome",
|
||||
"healthTarget": "Host / endereço",
|
||||
"healthAddCheck": "Adicionar verificação",
|
||||
"healthSaved": "Verificações de saúde guardadas",
|
||||
"healthMissingFields": "Cada verificação necessita de um nome e um destino",
|
||||
"logFile": "Ficheiro",
|
||||
"logUnit": "Unidade",
|
||||
"logCustomPath": "Caminho personalizado em /var/log (opcional)",
|
||||
"logGrep": "Filtrar linhas...",
|
||||
"firewallPersist": "Persistir regras",
|
||||
"firewallPersisted": "Regras de firewall persistidas",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Tailscale",
|
||||
"wgNotInstalled": "O WireGuard não está instalado neste host",
|
||||
"wgNoInterfaces": "Nenhuma interface WireGuard configurada",
|
||||
"wgInterfaceUp": "Ativar",
|
||||
"wgInterfaceDown": "Desativar",
|
||||
"wgBringingUp": "A ativar {{name}}...",
|
||||
"wgBringingDown": "A desativar {{name}}...",
|
||||
"wgInterfaceUpDone": "{{name}} está ativada",
|
||||
"wgInterfaceDownDone": "{{name}} está desativada",
|
||||
"wgListenPort": "Porta",
|
||||
"wgPublicKey": "Chave pública",
|
||||
"wgEndpoint": "Endpoint",
|
||||
"wgAllowedIPs": "IPs permitidos",
|
||||
"wgLastHandshake": "Último handshake",
|
||||
"wgHandshakeNever": "Nunca",
|
||||
"wgTransfer": "Transferência",
|
||||
"tsNotInstalled": "O Tailscale não está instalado neste host",
|
||||
"tsRunning": "A executar",
|
||||
"tsStopped": "Parado",
|
||||
"tsEnable": "Ligar",
|
||||
"tsDisable": "Desligar",
|
||||
"tsEnabling": "A ligar ao Tailscale...",
|
||||
"tsDisabling": "A desligar do Tailscale...",
|
||||
"tsEnabled": "Tailscale ligado",
|
||||
"tsDisabled": "Tailscale desligado",
|
||||
"tsIPs": "IPs do Tailscale",
|
||||
"tsPeers": "Pares",
|
||||
"tsOnline": "Online",
|
||||
"tsOffline": "Offline",
|
||||
"tsExitNode": "Nó de saída",
|
||||
"tsExitNodeActive": "Nó de saída ativo",
|
||||
"tsHostname": "Nome do host"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Histórico de Métricas",
|
||||
"historySuffix": "Histórico",
|
||||
"cpuMemoryDisk": "CPU / Memória / Disco",
|
||||
"network": "Rede",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "Sem dados de histórico disponíveis para este intervalo de tempo.",
|
||||
"custom": "Personalizado",
|
||||
"to": "a",
|
||||
"apply": "Aplicar",
|
||||
"viewHistory": "Ver Histórico"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Estatísticas do Proxmox",
|
||||
"cpuUsage": "Utilização da CPU",
|
||||
"memoryUsage": "Uso de memória",
|
||||
"diskUsage": "Utilização do disco",
|
||||
"networkInterfaces": "Interfaces de rede",
|
||||
"uptime": "Tempo de atividade",
|
||||
"systemInfo": "Informações do sistema",
|
||||
"guestsSummary": "Convidados",
|
||||
"storagePools": "Piscinas de armazenamento",
|
||||
"clusterHealth": "Saúde em grupo",
|
||||
"cpuCores_one": "{{count}} Núcleo",
|
||||
"cpuCores_other": "{{count}} Núcleos",
|
||||
"used": "Usado",
|
||||
"total": "Total",
|
||||
"hostname": "Nome do host",
|
||||
"kernel": "Kernel",
|
||||
"pveVersion": "Versão PvE",
|
||||
"name": "Nome",
|
||||
"status": "Estatuto",
|
||||
"type": "Tipo",
|
||||
"cpu": "CPU",
|
||||
"mem": "Membro",
|
||||
"disk": "Disco",
|
||||
"running": "Corrida",
|
||||
"stopped": "Parou",
|
||||
"guestCounts": "{{running}}/{{total}} em execução",
|
||||
"inactive": "Inativo",
|
||||
"notClustered": "Nó independente (não faz parte de um cluster)",
|
||||
"quorate": "Quorate",
|
||||
"notQuorate": "Sem quórum",
|
||||
"nodeOnline": "Online",
|
||||
"nodeOffline": "Offline",
|
||||
"noHostSelected": "Nenhum host selecionado",
|
||||
"pveshNotFound": "pvesh não encontrado - este é um nó Proxmox?",
|
||||
"nodeDetectionFailed": "Não foi possível determinar um nome de nó Proxmox válido.",
|
||||
"connecting": "Ligando...",
|
||||
"connectionFailed": "Falha ao ligar ao nó Proxmox",
|
||||
"refresh": "Atualizar",
|
||||
"searchGuests": "Pesquisar hóspedes...",
|
||||
"filterAll": "Tudo",
|
||||
"filterVm": "VM",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "Nenhuma máquina virtual ou contentor LXC foi encontrado neste nó.",
|
||||
"noGuestsMatch": "Nenhum hóspede corresponde aos filtros atuais."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Métricas do Servidor"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Métricas do Host",
|
||||
"enableProxmoxStats": "Ativar estatísticas do Proxmox",
|
||||
"enableProxmoxStatsDesc": "Apresenta o separador Estatísticas do Proxmox para este host com estatísticas em tempo real dos nós, máquinas virtuais, armazenamento e cluster, recolhidas via SSH.",
|
||||
"proxmoxStatsPollInterval": "Intervalo de sondagem (segundos)",
|
||||
"proxmoxStatsPollIntervalDesc": "Mínimo de 15 segundos. Com que frequência as estatísticas do nó Proxmox devem ser atualizadas.",
|
||||
"proxmoxStatsNodeOverride": "Substituição do nome do nó",
|
||||
"proxmoxStatsNodeOverrideDesc": "Substituir a deteção automática do nome do nó Proxmox (detetado por defeito através do nome do host).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Detetado automaticamente a partir do nome do host",
|
||||
"metricsCollectionLabel": "Recolha de Métricas",
|
||||
"enableMetricsLabel": "Ativar Métricas",
|
||||
"enableMetricsDesc": "Recolher métricas de CPU, RAM, disco e outras deste host",
|
||||
"useGlobalMetrics": "Usar Intervalo Global",
|
||||
"useGlobalMetricsDesc": "Substituir pelo intervalo de métricas global do servidor",
|
||||
"metricsIntervalS": "Intervalo de Métricas (s)",
|
||||
"metricsIntervalDesc2": "Segundos entre cada registo de métricas",
|
||||
"excludedMountsLabel": "Suportes excluídos",
|
||||
"monitoredMountsLabel": "Caminhos monitorizados personalizados",
|
||||
"monitoredMountsDesc": "Adicione caminhos que não estejam expostos como montagens separadas, incluindo caminhos do Home Assistant montados através de bind, como /config.",
|
||||
"monitoredMountPathPlaceholder": "Caminho (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Rótulo (opcional)",
|
||||
"addMonitoredMount": "Adicionar caminho",
|
||||
"excludedMountsDesc": "Ocultar pontos de montagem ou tipos de sistema de ficheiros específicos (por exemplo, NFS, CIFS) da utilização do disco e dos alertas para este host.",
|
||||
"excludedMountsPlaceholder": "Caminho de montagem (/mnt/nas) ou tipo de sistema de ficheiros (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Nenhuma montagem excluída. Todos os sistemas de ficheiros detetados são apresentados.",
|
||||
"addExcludedMount": "Adicionar",
|
||||
"visibleWidgets": "Widgets Visíveis",
|
||||
"widgetsMovedToHostMetrics": "Os cartões são agora adicionados, organizados e redimensionados diretamente no separador Métricas do Host. Abra as Métricas do Host para este host e use Personalizar para escolher quais os cartões a mostrar.",
|
||||
"quickActionsLabel": "Ações Rápidas",
|
||||
"quickActionsToolbar": "As ações rápidas aparecem como botões na barra de ferramentas de Métricas do Host para execução de comandos com um clique.",
|
||||
"noQuickActions": "Ainda não existem ações rápidas.",
|
||||
"buttonLabel": "Texto do botão",
|
||||
"selectSnippetPlaceholder": "Selecionar snippet...",
|
||||
"addActionBtn": "Adicionar Ação"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Métricas e alertas",
|
||||
"feature_metrics_desc": "Monitorize a utilização de CPU, memória e disco ao longo do tempo e receba alertas quando apresentam problemas."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Retenção do histórico de métricas",
|
||||
"metricsHistoryRetentionRange": "1 a 90 dias",
|
||||
"days": "dias"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Sem dados disponíveis",
|
||||
"showCurrentValue": "Mostrar valor atual",
|
||||
"chartMetric": "Métrica",
|
||||
"metricRange": "Intervalo"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "Memorie",
|
||||
"disk": "Disc",
|
||||
"network": "Reţea",
|
||||
"uptime": "Timp de funcționare",
|
||||
"processes": "Procese",
|
||||
"available": "Disponibil",
|
||||
"free": "Gratuit",
|
||||
"connecting": "Se conectează...",
|
||||
"connectionFailed": "Conectarea la server a eșuat",
|
||||
"naCpus": "N/A CPU(uri)",
|
||||
"cpuCores_one": "{{count}} Nucleu",
|
||||
"cpuCores_other": "{{count}} Nuclee",
|
||||
"cpuUsage": "Utilizarea procesorului",
|
||||
"memoryUsage": "Utilizarea memoriei",
|
||||
"diskUsage": "Utilizarea discului",
|
||||
"selectFilesystem": "Selectați sistemul de fișiere",
|
||||
"temperature": "Temperatură",
|
||||
"highestTemperature": "Cea mai ridicată temperatură",
|
||||
"primaryTemperatureSensor": "Senzor principal",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "Nu a fost detectată nicio placă grafică NVIDIA. Instalați driverul NVIDIA (acesta oferă nvidia-smi) pentru a vedea valorile GPU.",
|
||||
"driver": "Șofer {{version}}",
|
||||
"utilization": "Utilizare",
|
||||
"memory": "VRAM",
|
||||
"temperature": "Temperatura",
|
||||
"power": "Putere",
|
||||
"fan": "Ventilator",
|
||||
"processes": "Procese GPU",
|
||||
"noProcesses": "Niciun proces nu folosește GPU-ul"
|
||||
},
|
||||
"failedToFetchHostConfig": "Nu s-a putut prelua configurația gazdei",
|
||||
"serverOffline": "Serverul este offline",
|
||||
"cannotFetchMetrics": "Nu se pot prelua valori de pe serverul offline",
|
||||
"totpFailed": "Verificarea TOTP a eșuat",
|
||||
"noneAuthNotSupported": "Metricile gazdei nu acceptă tipul de autentificare „none”.",
|
||||
"noHostSelected": "Nicio gazdă selectată",
|
||||
"load": "Încărca",
|
||||
"systemInfo": "Informații despre sistem",
|
||||
"hostname": "Nume gazdă",
|
||||
"operatingSystem": "Sistem de operare",
|
||||
"kernel": "Nucleu",
|
||||
"seconds": "secunde",
|
||||
"networkInterfaces": "Interfețe de rețea",
|
||||
"noInterfacesFound": "Nu s-au găsit interfețe de rețea",
|
||||
"noProcessesFound": "Nu s-au găsit procese",
|
||||
"processesTotal": "total",
|
||||
"processesRunning": "funcţionare",
|
||||
"loginStats": "Statistici de conectare SSH",
|
||||
"noRecentLoginData": "Nu există date de conectare recente",
|
||||
"executingQuickAction": "Se execută {{name}}...",
|
||||
"quickActionSuccess": "{{name}} finalizat cu succes",
|
||||
"quickActionFailed": "{{name}} a eșuat",
|
||||
"quickActionError": "Executarea {{name}} a eșuat",
|
||||
"ports": {
|
||||
"title": "Porturi de ascultare",
|
||||
"protocol": "Protocol",
|
||||
"port": "Port",
|
||||
"address": "Adresa",
|
||||
"process": "Proces",
|
||||
"search": "Căutați porturi...",
|
||||
"allProtocols": "Toate",
|
||||
"noData": "Nu există date despre porturile de ascultare"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Firewall",
|
||||
"inactive": "Inactiv",
|
||||
"policy": "Politică",
|
||||
"rules": "reguli",
|
||||
"noRules": "Nicio regulă în acest lanț",
|
||||
"noData": "Nu sunt disponibile date despre firewall",
|
||||
"action": "Acţiune",
|
||||
"protocol": "Proto",
|
||||
"port": "Port",
|
||||
"source": "Sursă",
|
||||
"anywhere": "Oriunde",
|
||||
"chains": "lanţuri"
|
||||
},
|
||||
"loadAvg": "Încărcare medie",
|
||||
"swap": "Schimb",
|
||||
"architecture": "Arhitectură",
|
||||
"refresh": "Reîmprospăta",
|
||||
"retry": "Reîncercați",
|
||||
"customize": "Personalizați aspectul",
|
||||
"reset": "Resetare",
|
||||
"tabLive": "Trăi",
|
||||
"editModeInstructions": "Trageți cărțile pentru a le rearanja, trageți marginea de jos pentru a o redimensiona și folosiți butonul de lățime pentru a modifica întinderea unei cărți. Adăugați sau eliminați cărți mai jos.",
|
||||
"managers": {
|
||||
"services": "Servicii",
|
||||
"processInspector": "Inspector de procese",
|
||||
"logViewer": "Vizualizator de jurnal",
|
||||
"cron": "Lucrări cron",
|
||||
"packages": "Pachete",
|
||||
"ssl": "Certificate SSL",
|
||||
"firewall": "Firewall",
|
||||
"users": "Utilizatori și permisiuni",
|
||||
"healthCheck": "Verificări medicale",
|
||||
"diskBreakdown": "Defalcarea discului",
|
||||
"systemdTimers": "Cronometre",
|
||||
"topMemory": "Top după memorie",
|
||||
"noData": "Fără date",
|
||||
"sudoHint": "Setați o parolă sudo pentru această gazdă în editorul de gazde pentru a activa acțiuni privilegiate.",
|
||||
"filter": "Filtra...",
|
||||
"start": "Început",
|
||||
"stop": "Stop",
|
||||
"restart": "Repornire",
|
||||
"actionDone": "{{name}} actualizat",
|
||||
"actionFailed": "Acțiunea a eșuat",
|
||||
"signalSent": "Semnal trimis către PID {{pid}}",
|
||||
"killHint": "Clic: terminare (SIGTERM). Clic dreapta: închidere forțată (SIGKILL).",
|
||||
"working": "Lucru...",
|
||||
"update": "Actualizare",
|
||||
"upgradeAll": "Actualizați toate",
|
||||
"allUpToDate": "Totul este la zi",
|
||||
"save": "Salva",
|
||||
"command": "Comanda",
|
||||
"enabled": "Activat",
|
||||
"cronSaved": "Crontab actualizat",
|
||||
"clients": "Clienți",
|
||||
"dryRun": "Sesizare de uzură",
|
||||
"renew": "Reînnoi",
|
||||
"noAcmeClient": "Nu a fost găsit niciun client ACME (certbot sau acme.sh) pe această gazdă.",
|
||||
"addInputRule": "Adăugați regula INPUT",
|
||||
"firewallWarning": "Modificările sunt disponibile doar în timpul execuției până când sunt persistente. Aveți grijă să nu vă blocați accesul.",
|
||||
"ruleApplied": "Regula aplicată",
|
||||
"invalidPort": "Introduceți un port valid (1-65535)",
|
||||
"newUsername": "Nume de utilizator nou",
|
||||
"addUser": "Adăuga",
|
||||
"deleteUser": "Șterge utilizatorul",
|
||||
"noHealthChecks": "Nu au fost configurate încă verificări de stare.",
|
||||
"follow": "Urmărește",
|
||||
"noLogData": "Nicio ieșire de jurnal.",
|
||||
"tree": "Copac",
|
||||
"enableDisable": "Activare / dezactivare la pornire",
|
||||
"grantSudo": "Acordă sudo",
|
||||
"revokeSudo": "Revocați comanda sudo",
|
||||
"sslIssueCert": "Emite certificat",
|
||||
"sslExpired": "Expirat",
|
||||
"sslInDays": "în {{days}}d",
|
||||
"sslNeedDomain": "Introduceți cel puțin un domeniu",
|
||||
"sslIssued": "Certificat emis",
|
||||
"sslDomainsPlaceholder": "exemplu.com, www.exemplu.com",
|
||||
"sslHttpStandalone": "HTTP (independent)",
|
||||
"sslHttpWebroot": "HTTP (webroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "Furnizor DNS (de exemplu, Cloudflare)",
|
||||
"sslIssueHint": "Acreditările furnizorului DNS trebuie să fie deja configurate pe gazdă.",
|
||||
"sslRevoke": "Revocați certificatul",
|
||||
"sslRevoked": "Certificat revocat",
|
||||
"sslRevokeConfirm": "Revocați și eliminați certificatul „{{name}}”? Această acțiune nu poate fi anulată.",
|
||||
"healthRun": "Aleargă",
|
||||
"healthName": "Nume",
|
||||
"healthTarget": "Gazdă / adresă",
|
||||
"healthAddCheck": "Adăugați cec",
|
||||
"healthSaved": "Verificările de sănătate salvate",
|
||||
"healthMissingFields": "Fiecare verificare necesită un nume și o țintă",
|
||||
"logFile": "Fişier",
|
||||
"logUnit": "Unitate",
|
||||
"logCustomPath": "Cale personalizată sub /var/log (opțional)",
|
||||
"logGrep": "Linii de filtrare...",
|
||||
"firewallPersist": "Reguli persistente",
|
||||
"firewallPersisted": "Regulile firewall-ului au persistat",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Scară de coadă",
|
||||
"wgNotInstalled": "WireGuard nu este instalat pe această gazdă",
|
||||
"wgNoInterfaces": "Nicio interfață WireGuard configurată",
|
||||
"wgInterfaceUp": "A menționa",
|
||||
"wgInterfaceDown": "Doborâți",
|
||||
"wgBringingUp": "Se afișează {{name}}...",
|
||||
"wgBringingDown": "Se coboară {{name}}...",
|
||||
"wgInterfaceUpDone": "{{name}} este activ",
|
||||
"wgInterfaceDownDone": "{{name}} este nefuncțional",
|
||||
"wgListenPort": "Port",
|
||||
"wgPublicKey": "Cheie publică",
|
||||
"wgEndpoint": "Punct final",
|
||||
"wgAllowedIPs": "IP-uri permise",
|
||||
"wgLastHandshake": "Ultima strângere de mână",
|
||||
"wgHandshakeNever": "Nu",
|
||||
"wgTransfer": "Transfer",
|
||||
"tsNotInstalled": "Tailscale nu este instalat pe această gazdă",
|
||||
"tsRunning": "Funcţionare",
|
||||
"tsStopped": "Oprit",
|
||||
"tsEnable": "Conectează-te",
|
||||
"tsDisable": "Deconecta",
|
||||
"tsEnabling": "Conectare la Tailscale...",
|
||||
"tsDisabling": "Deconectare de la Tailscale...",
|
||||
"tsEnabled": "Scală de coadă conectată",
|
||||
"tsDisabled": "Scală detașată",
|
||||
"tsIPs": "IP-uri la scară mică",
|
||||
"tsPeers": "Colegi",
|
||||
"tsOnline": "Online",
|
||||
"tsOffline": "Offline",
|
||||
"tsExitNode": "Nod de ieșire",
|
||||
"tsExitNodeActive": "Nod de ieșire activ",
|
||||
"tsHostname": "Nume gazdă"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Istoricul metricilor",
|
||||
"historySuffix": "Istorie",
|
||||
"cpuMemoryDisk": "CPU / Memorie / Disc",
|
||||
"network": "Reţea",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "Nu sunt disponibile date istorice pentru acest interval de timp.",
|
||||
"custom": "Personalizat",
|
||||
"to": "la",
|
||||
"apply": "Aplică",
|
||||
"viewHistory": "Vizualizați istoricul"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Statistici Proxmox",
|
||||
"cpuUsage": "Utilizarea procesorului",
|
||||
"memoryUsage": "Utilizarea memoriei",
|
||||
"diskUsage": "Utilizarea discului",
|
||||
"networkInterfaces": "Interfețe de rețea",
|
||||
"uptime": "Timp de funcționare",
|
||||
"systemInfo": "Informații despre sistem",
|
||||
"guestsSummary": "Oaspeți",
|
||||
"storagePools": "Bazine de stocare",
|
||||
"clusterHealth": "Sănătatea clusterului",
|
||||
"cpuCores_one": "{{count}} Nucleu",
|
||||
"cpuCores_other": "{{count}} Nuclee",
|
||||
"used": "Folosit",
|
||||
"total": "Total",
|
||||
"hostname": "Nume gazdă",
|
||||
"kernel": "Nucleu",
|
||||
"pveVersion": "Versiunea PVE",
|
||||
"name": "Nume",
|
||||
"status": "Stare",
|
||||
"type": "Tip",
|
||||
"cpu": "CPU",
|
||||
"mem": "Mem",
|
||||
"disk": "Disc",
|
||||
"running": "Funcţionare",
|
||||
"stopped": "Oprit",
|
||||
"guestCounts": "{{running}}/{{total}} rulează",
|
||||
"inactive": "Inactiv",
|
||||
"notClustered": "Nod independent (nu face parte dintr-un cluster)",
|
||||
"quorate": "Cvoat",
|
||||
"notQuorate": "Fără cvorum",
|
||||
"nodeOnline": "Online",
|
||||
"nodeOffline": "Offline",
|
||||
"noHostSelected": "Nicio gazdă selectată",
|
||||
"pveshNotFound": "pvesh nu a fost găsit - este acesta un nod Proxmox?",
|
||||
"nodeDetectionFailed": "Nu se poate determina un nume de nod Proxmox valid",
|
||||
"connecting": "Se conectează...",
|
||||
"connectionFailed": "Conectarea la nodul Proxmox nu a reușit.",
|
||||
"refresh": "Reîmprospăta",
|
||||
"searchGuests": "Caută invitați...",
|
||||
"filterAll": "Toate",
|
||||
"filterVm": "Mașină virtuală",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "Nu s-au găsit mașini virtuale sau containere LXC pe acest nod.",
|
||||
"noGuestsMatch": "Niciun invitat nu corespunde filtrelor actuale."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Metrici ale gazdei"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Metrici ale gazdei",
|
||||
"enableProxmoxStats": "Activează statisticile Proxmox",
|
||||
"enableProxmoxStatsDesc": "Afișează o filă Statistici Proxmox pentru această gazdă cu statistici live despre noduri, invitați, stocare și cluster, colectate prin SSH.",
|
||||
"proxmoxStatsPollInterval": "Interval de sondaj (secunde)",
|
||||
"proxmoxStatsPollIntervalDesc": "Minim 15 secunde. Cât de des se actualizează statisticile nodului Proxmox.",
|
||||
"proxmoxStatsNodeOverride": "Suprascriere nume nod",
|
||||
"proxmoxStatsNodeOverrideDesc": "Suprascrie detectarea automată a numelui nodului Proxmox (detectat implicit prin numele de gazdă).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Detectat automat de la numele de gazdă",
|
||||
"metricsCollectionLabel": "Colecție de metrici",
|
||||
"enableMetricsLabel": "Activați metricile",
|
||||
"enableMetricsDesc": "Colectați valori pentru CPU, RAM, disc și alte valori de la această gazdă",
|
||||
"useGlobalMetrics": "Utilizați intervalul global",
|
||||
"useGlobalMetricsDesc": "Suprascriere cu intervalul de metrici la nivel de server",
|
||||
"metricsIntervalS": "Interval (s) de metrică",
|
||||
"metricsIntervalDesc2": "Secunde între instantaneele metricelor",
|
||||
"excludedMountsLabel": "Monturi excluse",
|
||||
"monitoredMountsLabel": "Căi monitorizate personalizate",
|
||||
"monitoredMountsDesc": "Adăugați căi care nu sunt expuse ca monturi separate, inclusiv căi Home Assistant montate prin bind, cum ar fi /config.",
|
||||
"monitoredMountPathPlaceholder": "Cale (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Etichetă (opțional)",
|
||||
"addMonitoredMount": "Adăugați o cale",
|
||||
"excludedMountsDesc": "Ascunde anumite puncte de montare sau tipuri de sisteme de fișiere (de exemplu, nfs, cifs) de utilizarea discului și de alertele pentru această gazdă.",
|
||||
"excludedMountsPlaceholder": "Calea de montare (/mnt/nas) sau tipul sistemului de fișiere (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Nicio montare exclusă. Sunt afișate toate sistemele de fișiere detectate.",
|
||||
"addExcludedMount": "Adăuga",
|
||||
"visibleWidgets": "Widgeturi vizibile",
|
||||
"widgetsMovedToHostMetrics": "Cardurile sunt acum adăugate, aranjate și redimensionate direct în fila Indicatori gazdă. Deschideți Indicatori gazdă pentru această gazdă și utilizați Personalizare pentru a alege ce carduri sunt afișate.",
|
||||
"quickActionsLabel": "Acțiuni rapide",
|
||||
"quickActionsToolbar": "Acțiunile rapide apar sub formă de butoane în bara de instrumente Host Metrics pentru executarea comenzilor cu un singur clic.",
|
||||
"noQuickActions": "Nicio acțiune rapidă încă.",
|
||||
"buttonLabel": "Etichetă buton",
|
||||
"selectSnippetPlaceholder": "Selectați fragmentul...",
|
||||
"addActionBtn": "Adăugați o acțiune"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Metrici și alerte",
|
||||
"feature_metrics_desc": "Urmărește procesorul, memoria și discul în timp și primește alerte când acestea se defectează."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Păstrarea istoricului metricilor",
|
||||
"metricsHistoryRetentionRange": "1 până la 90 de zile",
|
||||
"days": "zile"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Nu sunt disponibile date",
|
||||
"showCurrentValue": "Afișează valoarea curentă",
|
||||
"chartMetric": "Metric",
|
||||
"metricRange": "Gamă"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "ЦП",
|
||||
"memory": "Память",
|
||||
"disk": "Диск",
|
||||
"network": "Сеть",
|
||||
"uptime": "Время работы",
|
||||
"processes": "Процессы",
|
||||
"available": "Доступно",
|
||||
"free": "Свободно",
|
||||
"connecting": "Подключение...",
|
||||
"connectionFailed": "Не удалось подключиться к серверу",
|
||||
"naCpus": "Н/Д ЦП",
|
||||
"cpuCores_one": "{{count}} ядро",
|
||||
"cpuCores_other": "{{count}} ядер",
|
||||
"cpuUsage": "Использование ЦП",
|
||||
"memoryUsage": "Использование памяти",
|
||||
"diskUsage": "Использование диска",
|
||||
"selectFilesystem": "Выберите файловую систему",
|
||||
"temperature": "Температура",
|
||||
"highestTemperature": "Максимальная температура",
|
||||
"primaryTemperatureSensor": "Основной датчик",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "Графический процессор NVIDIA не обнаружен. Установите драйвер NVIDIA (он включает nvidia-smi), чтобы увидеть показатели графического процессора.",
|
||||
"driver": "Водитель {{version}}",
|
||||
"utilization": "Использование",
|
||||
"memory": "ВПМ",
|
||||
"temperature": "Температура",
|
||||
"power": "Власть",
|
||||
"fan": "Вентилятор",
|
||||
"processes": "процессы графического процессора",
|
||||
"noProcesses": "Никакие процессы не используют графический процессор."
|
||||
},
|
||||
"failedToFetchHostConfig": "Не удалось получить конфигурацию хоста",
|
||||
"serverOffline": "Сервер недоступен",
|
||||
"cannotFetchMetrics": "Не удалось загрузить метрики с недоступного сервера",
|
||||
"totpFailed": "Проверка TOTP не пройдена",
|
||||
"noneAuthNotSupported": "Host Metrics не поддерживает тип аутентификации 'none'.",
|
||||
"noHostSelected": "Хост не выбран",
|
||||
"load": "Нагрузка",
|
||||
"systemInfo": "Информация о системе",
|
||||
"hostname": "Имя хоста",
|
||||
"operatingSystem": "Операционная система",
|
||||
"kernel": "Ядро",
|
||||
"seconds": "секунды",
|
||||
"networkInterfaces": "Сетевые интерфейсы",
|
||||
"noInterfacesFound": "Сетевые интерфейсы не найдены",
|
||||
"noProcessesFound": "Процессы не найдены",
|
||||
"processesTotal": "всего",
|
||||
"processesRunning": "выполняется",
|
||||
"loginStats": "Статистика входов SSH",
|
||||
"noRecentLoginData": "Нет данных о недавних входах",
|
||||
"executingQuickAction": "Выполняется {{name}}...",
|
||||
"quickActionSuccess": "{{name}} успешно завершено",
|
||||
"quickActionFailed": "{{name}} не удалось",
|
||||
"quickActionError": "Не удалось выполнить {{name}}",
|
||||
"ports": {
|
||||
"title": "Прослушиваемые порты",
|
||||
"protocol": "Протокол",
|
||||
"port": "Порт",
|
||||
"address": "Адрес",
|
||||
"process": "Процесс",
|
||||
"search": "Поиск портов...",
|
||||
"allProtocols": "Все",
|
||||
"noData": "Нет данных о прослушиваемых портах"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Брандмауэр",
|
||||
"inactive": "Неактивен",
|
||||
"policy": "Политика",
|
||||
"rules": "правила",
|
||||
"noRules": "Нет правил в этой цепочке",
|
||||
"noData": "Нет данных о брандмауэре",
|
||||
"action": "Действие",
|
||||
"protocol": "Протокол",
|
||||
"port": "Порт",
|
||||
"source": "Источник",
|
||||
"anywhere": "Любое",
|
||||
"chains": "цепочки"
|
||||
},
|
||||
"loadAvg": "Средняя нагрузка",
|
||||
"swap": "Своп",
|
||||
"architecture": "Архитектура",
|
||||
"refresh": "Обновить",
|
||||
"retry": "Повторить",
|
||||
"customize": "Настроить макет",
|
||||
"reset": "Сбросить",
|
||||
"tabLive": "Онлайн",
|
||||
"editModeInstructions": "Перетаскивайте карточки для изменения порядка, перетаскивайте нижний край для изменения размера и используйте кнопку ширины, чтобы изменить занимаемое пространство. Добавляйте или удаляйте карточки ниже.",
|
||||
"managers": {
|
||||
"services": "Службы",
|
||||
"processInspector": "Инспектор процессов",
|
||||
"logViewer": "Просмотр журналов",
|
||||
"cron": "Задания Cron",
|
||||
"packages": "Пакеты",
|
||||
"ssl": "SSL-сертификаты",
|
||||
"firewall": "Брандмауэр",
|
||||
"users": "Пользователи и разрешения",
|
||||
"healthCheck": "Проверки состояния",
|
||||
"diskBreakdown": "Разбивка дисков",
|
||||
"systemdTimers": "Таймеры",
|
||||
"topMemory": "Топ по памяти",
|
||||
"noData": "Нет данных",
|
||||
"sudoHint": "Установите пароль sudo для этого хоста в редакторе хостов, чтобы включить привилегированные действия.",
|
||||
"filter": "Фильтр...",
|
||||
"start": "Запустить",
|
||||
"stop": "Остановить",
|
||||
"restart": "Перезапустить",
|
||||
"actionDone": "{{name}} обновлено",
|
||||
"actionFailed": "Действие не удалось",
|
||||
"signalSent": "Сигнал отправлен PID {{pid}}",
|
||||
"killHint": "Нажмите: завершить (SIGTERM). Правый клик: принудительно завершить (SIGKILL).",
|
||||
"working": "Выполняется...",
|
||||
"update": "Обновить",
|
||||
"upgradeAll": "Обновить всё",
|
||||
"allUpToDate": "Всё актуально",
|
||||
"save": "Сохранить",
|
||||
"command": "Команда",
|
||||
"enabled": "Включено",
|
||||
"cronSaved": "Crontab обновлён",
|
||||
"clients": "Клиенты",
|
||||
"dryRun": "Пробный запуск",
|
||||
"renew": "Продлить",
|
||||
"noAcmeClient": "На этом хосте не найден ACME-клиент (certbot или acme.sh).",
|
||||
"addInputRule": "Добавить правило INPUT",
|
||||
"firewallWarning": "Изменения действуют только до перезагрузки, пока не сохранены. Будьте осторожны, чтобы не заблокировать себе доступ.",
|
||||
"ruleApplied": "Правило применено",
|
||||
"invalidPort": "Введите допустимый порт (1–65535)",
|
||||
"newUsername": "Новое имя пользователя",
|
||||
"addUser": "Добавить",
|
||||
"deleteUser": "Удалить пользователя",
|
||||
"noHealthChecks": "Проверки работоспособности ещё не настроены.",
|
||||
"follow": "Следить",
|
||||
"noLogData": "Нет данных журнала.",
|
||||
"tree": "Дерево",
|
||||
"enableDisable": "Включить/отключить при загрузке",
|
||||
"grantSudo": "Предоставить sudo",
|
||||
"revokeSudo": "Отозвать sudo",
|
||||
"sslIssueCert": "Выпустить сертификат",
|
||||
"sslExpired": "Истёк",
|
||||
"sslInDays": "через {{days}}д",
|
||||
"sslNeedDomain": "Введите хотя бы один домен",
|
||||
"sslIssued": "Сертификат выпущен",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (автономный)",
|
||||
"sslHttpWebroot": "HTTP (webroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "DNS-провайдер (например, cloudflare)",
|
||||
"sslIssueHint": "Учетные данные DNS-провайдера должны быть уже настроены на хосте.",
|
||||
"sslRevoke": "Отозвать сертификат",
|
||||
"sslRevoked": "Сертификат отозван",
|
||||
"sslRevokeConfirm": "Отозвать и удалить сертификат \"{{name}}\"? Это действие нельзя отменить.",
|
||||
"healthRun": "Запустить",
|
||||
"healthName": "Название",
|
||||
"healthTarget": "Хост / адрес",
|
||||
"healthAddCheck": "Добавить проверку",
|
||||
"healthSaved": "Проверки работоспособности сохранены",
|
||||
"healthMissingFields": "Для каждой проверки нужны название и цель",
|
||||
"logFile": "Файл",
|
||||
"logUnit": "Юнит",
|
||||
"logCustomPath": "Произвольный путь в /var/log (необязательно)",
|
||||
"logGrep": "Фильтр строк...",
|
||||
"firewallPersist": "Сохранить правила",
|
||||
"firewallPersisted": "Правила брандмауэра сохранены",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Tailscale",
|
||||
"wgNotInstalled": "WireGuard не установлен на этом хосте",
|
||||
"wgNoInterfaces": "Не настроено ни одного интерфейса WireGuard",
|
||||
"wgInterfaceUp": "Поднять",
|
||||
"wgInterfaceDown": "Отключить",
|
||||
"wgBringingUp": "Поднимается {{name}}...",
|
||||
"wgBringingDown": "Отключается {{name}}...",
|
||||
"wgInterfaceUpDone": "{{name}} поднят",
|
||||
"wgInterfaceDownDone": "{{name}} отключен",
|
||||
"wgListenPort": "Порт",
|
||||
"wgPublicKey": "Открытый ключ",
|
||||
"wgEndpoint": "Конечная точка",
|
||||
"wgAllowedIPs": "Разрешенные IP-адреса",
|
||||
"wgLastHandshake": "Последнее рукопожатие",
|
||||
"wgHandshakeNever": "Никогда",
|
||||
"wgTransfer": "Передано",
|
||||
"tsNotInstalled": "Tailscale не установлен на этом хосте",
|
||||
"tsRunning": "Запущен",
|
||||
"tsStopped": "Остановлен",
|
||||
"tsEnable": "Подключить",
|
||||
"tsDisable": "Отключить",
|
||||
"tsEnabling": "Подключение к Tailscale...",
|
||||
"tsDisabling": "Отключение от Tailscale...",
|
||||
"tsEnabled": "Tailscale подключён",
|
||||
"tsDisabled": "Tailscale отключён",
|
||||
"tsIPs": "IP-адреса Tailscale",
|
||||
"tsPeers": "Пиры",
|
||||
"tsOnline": "Онлайн",
|
||||
"tsOffline": "Офлайн",
|
||||
"tsExitNode": "Выходной узел",
|
||||
"tsExitNodeActive": "Выходной узел активен",
|
||||
"tsHostname": "Имя хоста"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "История метрик",
|
||||
"historySuffix": "История",
|
||||
"cpuMemoryDisk": "ЦП / Память / Диск",
|
||||
"network": "Сеть",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "Нет исторических данных за этот период.",
|
||||
"custom": "Пользовательский",
|
||||
"to": "по",
|
||||
"apply": "Применить",
|
||||
"viewHistory": "Просмотреть историю"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Статистика Proxmox",
|
||||
"cpuUsage": "Использование ЦП",
|
||||
"memoryUsage": "Использование памяти",
|
||||
"diskUsage": "Использование диска",
|
||||
"networkInterfaces": "Сетевые интерфейсы",
|
||||
"uptime": "Время безотказной работы",
|
||||
"systemInfo": "Информация о системе",
|
||||
"guestsSummary": "Гости",
|
||||
"storagePools": "Бассейны для хранения",
|
||||
"clusterHealth": "Здоровье кластера",
|
||||
"cpuCores_one": "{{count}} Ядро",
|
||||
"cpuCores_other": "{{count}} Ядра",
|
||||
"used": "Использовал",
|
||||
"total": "Общий",
|
||||
"hostname": "Имя хоста",
|
||||
"kernel": "Ядро",
|
||||
"pveVersion": "Версия для PVE",
|
||||
"name": "Имя",
|
||||
"status": "Статус",
|
||||
"type": "Тип",
|
||||
"cpu": "Процессор",
|
||||
"mem": "Мем",
|
||||
"disk": "Диск",
|
||||
"running": "Бег",
|
||||
"stopped": "Остановлено",
|
||||
"guestCounts": "{{running}}/{{total}} бежит",
|
||||
"inactive": "Неактивный",
|
||||
"notClustered": "Автономный узел (не входящий в кластер)",
|
||||
"quorate": "Цитата",
|
||||
"notQuorate": "Кворум не соблюден",
|
||||
"nodeOnline": "Онлайн",
|
||||
"nodeOffline": "Офлайн",
|
||||
"noHostSelected": "Хост не выбран",
|
||||
"pveshNotFound": "pvesh не найден — это узел Proxmox?",
|
||||
"nodeDetectionFailed": "Не удалось определить допустимое имя узла Proxmox.",
|
||||
"connecting": "Подключение...",
|
||||
"connectionFailed": "Не удалось подключиться к узлу Proxmox.",
|
||||
"refresh": "Обновить",
|
||||
"searchGuests": "Поиск гостей...",
|
||||
"filterAll": "Все",
|
||||
"filterVm": "VM",
|
||||
"filterLxc": "ЛХС",
|
||||
"noGuests": "На этом узле не обнаружено виртуальных машин или контейнеров LXC.",
|
||||
"noGuestsMatch": "Ни один из гостей не соответствует текущим фильтрам."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Метрики хоста"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Метрики хоста",
|
||||
"enableProxmoxStats": "Включить статистику Proxmox",
|
||||
"enableProxmoxStatsDesc": "Отобразить вкладку Proxmox Stats для этого хоста с актуальными статистическими данными по узлам, гостевым системам, хранилищу и кластеру, собранными по SSH.",
|
||||
"proxmoxStatsPollInterval": "Интервал опроса (секунды)",
|
||||
"proxmoxStatsPollIntervalDesc": "Минимум 15 секунд. Как часто обновлять статистику узлов Proxmox.",
|
||||
"proxmoxStatsNodeOverride": "Переопределение имени узла",
|
||||
"proxmoxStatsNodeOverrideDesc": "Отключить автоматическое определение имени узла Proxmox (по умолчанию определяется по имени хоста).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Автоматически определено по имени хоста",
|
||||
"metricsCollectionLabel": "Сбор метрик",
|
||||
"enableMetricsLabel": "Включить метрики",
|
||||
"enableMetricsDesc": "Собирать метрики ЦП, ОЗУ, диска и другие с этого хоста",
|
||||
"useGlobalMetrics": "Использовать глобальный интервал",
|
||||
"useGlobalMetricsDesc": "Переопределить глобальным интервалом сбора метрик сервера",
|
||||
"metricsIntervalS": "Интервал сбора метрик (с)",
|
||||
"metricsIntervalDesc2": "Секунд между снимками метрик",
|
||||
"excludedMountsLabel": "Исключенные крепления",
|
||||
"monitoredMountsLabel": "Пользовательские контролируемые пути",
|
||||
"monitoredMountsDesc": "Добавьте пути, которые не отображаются как отдельные точки монтирования, включая пути Home Assistant, смонтированные с помощью bind-mount, например, /config.",
|
||||
"monitoredMountPathPlaceholder": "Путь (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Этикетка (необязательно)",
|
||||
"addMonitoredMount": "Добавить путь",
|
||||
"excludedMountsDesc": "Скрыть определенные точки монтирования или типы файловых систем (например, nfs, cifs) от информации об использовании диска и оповещений для этого хоста.",
|
||||
"excludedMountsPlaceholder": "Путь монтирования (/mnt/nas) или тип файловой системы (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Исключены все точки монтирования. Отображаются все обнаруженные файловые системы.",
|
||||
"addExcludedMount": "Добавлять",
|
||||
"visibleWidgets": "Видимые виджеты",
|
||||
"widgetsMovedToHostMetrics": "Карточки теперь добавляются, упорядочиваются и изменяются в размере непосредственно на вкладке «Метрики хоста». Откройте метрики для этого хоста и используйте «Настроить», чтобы выбрать отображаемые карточки.",
|
||||
"quickActionsLabel": "Быстрые действия",
|
||||
"quickActionsToolbar": "Быстрые действия отображаются в виде кнопок на панели инструментов метрик хоста для выполнения команд в один клик.",
|
||||
"noQuickActions": "Пока нет быстрых действий.",
|
||||
"buttonLabel": "Надпись кнопки",
|
||||
"selectSnippetPlaceholder": "Выбрать сниппет...",
|
||||
"addActionBtn": "Добавить действие"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Метрики и оповещения",
|
||||
"feature_metrics_desc": "Отслеживайте состояние процессора, памяти и диска с течением времени и получайте оповещения при возникновении неполадок."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Срок хранения метрик",
|
||||
"metricsHistoryRetentionRange": "от 1 до 90 дней",
|
||||
"days": "дней"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Нет данных",
|
||||
"showCurrentValue": "Показать текущее значение",
|
||||
"chartMetric": "Метрика",
|
||||
"metricRange": "Диапазон"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "Процесор",
|
||||
"memory": "Памћење",
|
||||
"disk": "Диск",
|
||||
"network": "Мрежа",
|
||||
"uptime": "Време непрекидног рада",
|
||||
"processes": "Процеси",
|
||||
"available": "Доступно",
|
||||
"free": "Бесплатно",
|
||||
"connecting": "Повезивање...",
|
||||
"connectionFailed": "Повезивање са сервером није успело",
|
||||
"naCpus": "Н/Д процесор(и)",
|
||||
"cpuCores_one": "{{count}} Језгро",
|
||||
"cpuCores_other": "{{count}} Језгра",
|
||||
"cpuUsage": "Искоришћеност процесора",
|
||||
"memoryUsage": "Коришћење меморије",
|
||||
"diskUsage": "Искоришћеност диска",
|
||||
"selectFilesystem": "Изаберите фајл систем",
|
||||
"temperature": "Температура",
|
||||
"highestTemperature": "Највиша температура",
|
||||
"primaryTemperatureSensor": "Примарни сензор",
|
||||
"gpu": {
|
||||
"title": "ГПУ",
|
||||
"noDevice": "Није детектована NVIDIA GPU. Инсталирајте NVIDIA драјвер (пружа nvidia-smi) да бисте видели метрике GPU-а.",
|
||||
"driver": "Возач {{version}}",
|
||||
"utilization": "Коришћење",
|
||||
"memory": "Видео меморија",
|
||||
"temperature": "Температура",
|
||||
"power": "Моћ",
|
||||
"fan": "Вентилатор",
|
||||
"processes": "Процеси графичког процесора (GPU)",
|
||||
"noProcesses": "Ниједан процес не користи ГПУ"
|
||||
},
|
||||
"failedToFetchHostConfig": "Није успело преузимање конфигурације хоста",
|
||||
"serverOffline": "Сервер ван мреже",
|
||||
"cannotFetchMetrics": "Није могуће преузети метрике са офлајн сервера",
|
||||
"totpFailed": "Верификација TOTP-а није успела",
|
||||
"noneAuthNotSupported": "Метрике хоста не подржавају тип аутентификације „ниједан“.",
|
||||
"noHostSelected": "Није изабран домаћин",
|
||||
"load": "Учитај",
|
||||
"systemInfo": "Системске информације",
|
||||
"hostname": "Име хоста",
|
||||
"operatingSystem": "Оперативни систем",
|
||||
"kernel": "Језгро",
|
||||
"seconds": "секунде",
|
||||
"networkInterfaces": "Мрежни интерфејси",
|
||||
"noInterfacesFound": "Није пронађен ниједан мрежни интерфејс",
|
||||
"noProcessesFound": "Није пронађен ниједан процес",
|
||||
"processesTotal": "укупно",
|
||||
"processesRunning": "трчање",
|
||||
"loginStats": "Статистика SSH пријава",
|
||||
"noRecentLoginData": "Нема скорашњих података за пријављивање",
|
||||
"executingQuickAction": "Извршава се {{name}}...",
|
||||
"quickActionSuccess": "{{name}} успешно завршено",
|
||||
"quickActionFailed": "{{name}} није успело",
|
||||
"quickActionError": "Није успело извршавање {{name}}",
|
||||
"ports": {
|
||||
"title": "Портови за слушање",
|
||||
"protocol": "Протокол",
|
||||
"port": "Лука",
|
||||
"address": "Адреса",
|
||||
"process": "Процес",
|
||||
"search": "Претражи портове...",
|
||||
"allProtocols": "Сви",
|
||||
"noData": "Нема података о портовима за слушање"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Заштитни зид (фајервол)",
|
||||
"inactive": "Неактивно",
|
||||
"policy": "Политика",
|
||||
"rules": "правила",
|
||||
"noRules": "Нема правила у овом ланцу",
|
||||
"noData": "Нема доступних података о заштитном зиду",
|
||||
"action": "Акција",
|
||||
"protocol": "Прото",
|
||||
"port": "Лука",
|
||||
"source": "Извор",
|
||||
"anywhere": "Било где",
|
||||
"chains": "ланци"
|
||||
},
|
||||
"loadAvg": "Учитај просек",
|
||||
"swap": "Замена",
|
||||
"architecture": "Архитектура",
|
||||
"refresh": "Освежи",
|
||||
"retry": "Покушај поново",
|
||||
"customize": "Прилагоди распоред",
|
||||
"reset": "Ресетуј",
|
||||
"tabLive": "Уживо",
|
||||
"editModeInstructions": "Превуците картице да бисте преуредили, превуците доњу ивицу да бисте променили величину и користите дугме за ширину да бисте променили распон картице. Додајте или уклоните картице испод.",
|
||||
"managers": {
|
||||
"services": "Услуге",
|
||||
"processInspector": "Инспектор процеса",
|
||||
"logViewer": "Прегледач дневника",
|
||||
"cron": "Cron послови",
|
||||
"packages": "Пакети",
|
||||
"ssl": "SSL сертификати",
|
||||
"firewall": "Заштитни зид (фајервол)",
|
||||
"users": "Корисници и дозволе",
|
||||
"healthCheck": "Здравствени прегледи",
|
||||
"diskBreakdown": "Распад диска",
|
||||
"systemdTimers": "Тајмери",
|
||||
"topMemory": "Најбоље по сећању",
|
||||
"noData": "Нема података",
|
||||
"sudoHint": "Поставите sudo лозинку за овај хост у уређивачу хостова да бисте омогућили привилеговане акције.",
|
||||
"filter": "Филтер...",
|
||||
"start": "Почетак",
|
||||
"stop": "Заустави",
|
||||
"restart": "Поново покрени",
|
||||
"actionDone": "{{name}} ажурирано",
|
||||
"actionFailed": "Акција није успела",
|
||||
"signalSent": "Сигнал послат на ПИД {{pid}}",
|
||||
"killHint": "Кликните: прекините (SIGTERM). Кликните десним тастером миша: присилно зауставите (SIGKILL).",
|
||||
"working": "Ради се...",
|
||||
"update": "Ажурирање",
|
||||
"upgradeAll": "Надогради све",
|
||||
"allUpToDate": "Све је ажурирано",
|
||||
"save": "Сачувај",
|
||||
"command": "Команда",
|
||||
"enabled": "Омогућено",
|
||||
"cronSaved": "Кронтаб је ажуриран",
|
||||
"clients": "Клијенти",
|
||||
"dryRun": "Пробни рад",
|
||||
"renew": "Обнови",
|
||||
"noAcmeClient": "Није пронађен ACME клијент (certbot или acme.sh) на овом хосту.",
|
||||
"addInputRule": "Додај INPUT правило",
|
||||
"firewallWarning": "Промене су само за време извршавања док се не сачувају. Пазите да се не закључате.",
|
||||
"ruleApplied": "Правило је примењено",
|
||||
"invalidPort": "Унесите важећи порт (1-65535)",
|
||||
"newUsername": "Ново корисничко име",
|
||||
"addUser": "Додај",
|
||||
"deleteUser": "Обриши корисника",
|
||||
"noHealthChecks": "Још увек нису конфигурисане провере исправности.",
|
||||
"follow": "Прати",
|
||||
"noLogData": "Нема излаза лог-а.",
|
||||
"tree": "Дрво",
|
||||
"enableDisable": "Омогући/онемогући при покретању",
|
||||
"grantSudo": "Додели судо",
|
||||
"revokeSudo": "Поништи sudo",
|
||||
"sslIssueCert": "Издај сертификат",
|
||||
"sslExpired": "Истекло",
|
||||
"sslInDays": "у {{days}}д",
|
||||
"sslNeedDomain": "Унесите барем један домен",
|
||||
"sslIssued": "Издат сертификат",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (самостални)",
|
||||
"sslHttpWebroot": "HTTP (вебрут)",
|
||||
"sslDns": "ДНС",
|
||||
"sslDnsProvider": "DNS провајдер (нпр. cloudflare)",
|
||||
"sslIssueHint": "Акредитиви DNS провајдера морају већ бити конфигурисани на хосту.",
|
||||
"sslRevoke": "Поништи сертификат",
|
||||
"sslRevoked": "Сертификат опозван",
|
||||
"sslRevokeConfirm": "Поништити и уклонити сертификат „{{name}}“? Ово се не може поништити.",
|
||||
"healthRun": "Трчи",
|
||||
"healthName": "Име",
|
||||
"healthTarget": "Домаћин / адреса",
|
||||
"healthAddCheck": "Додај чек",
|
||||
"healthSaved": "Провере здравственог стања сачуване",
|
||||
"healthMissingFields": "Свака провера захтева име и циљ",
|
||||
"logFile": "Датотека",
|
||||
"logUnit": "Јединица",
|
||||
"logCustomPath": "Прилагођена путања у /var/log (опционо)",
|
||||
"logGrep": "Филтерске линије...",
|
||||
"firewallPersist": "Правила трајања",
|
||||
"firewallPersisted": "Правила заштитног зида су опстала",
|
||||
"wireguard": "ВајерГард",
|
||||
"tailscale": "Репна скала",
|
||||
"wgNotInstalled": "WireGuard није инсталиран на овом хосту",
|
||||
"wgNoInterfaces": "Није конфигурисан ниједан WireGuard интерфејс",
|
||||
"wgInterfaceUp": "Поведи",
|
||||
"wgInterfaceDown": "Срушити",
|
||||
"wgBringingUp": "Доводи се {{name}} горе...",
|
||||
"wgBringingDown": "Спуштање {{name}}...",
|
||||
"wgInterfaceUpDone": "{{name}} је горе",
|
||||
"wgInterfaceDownDone": "{{name}} је неактиван",
|
||||
"wgListenPort": "Лука",
|
||||
"wgPublicKey": "Јавни кључ",
|
||||
"wgEndpoint": "Крајња тачка",
|
||||
"wgAllowedIPs": "Дозвољене IP адресе",
|
||||
"wgLastHandshake": "Последње руковање",
|
||||
"wgHandshakeNever": "Никад",
|
||||
"wgTransfer": "Пренос",
|
||||
"tsNotInstalled": "Tailscale није инсталиран на овом хосту",
|
||||
"tsRunning": "Трчање",
|
||||
"tsStopped": "Заустављено",
|
||||
"tsEnable": "Повежи се",
|
||||
"tsDisable": "Прекини везу",
|
||||
"tsEnabling": "Повезивање са Tailscale-ом...",
|
||||
"tsDisabling": "Искључивање из мреже Tailscale...",
|
||||
"tsEnabled": "Повезана је задња скала",
|
||||
"tsDisabled": "Реалскала је искључена",
|
||||
"tsIPs": "ИП адресе Tailscale-а",
|
||||
"tsPeers": "Вршњаци",
|
||||
"tsOnline": "Онлајн",
|
||||
"tsOffline": "Офлајн",
|
||||
"tsExitNode": "Излазни чвор",
|
||||
"tsExitNodeActive": "Излазни чвор је активан",
|
||||
"tsHostname": "Име хоста"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Историја метрика",
|
||||
"historySuffix": "Историја",
|
||||
"cpuMemoryDisk": "Процесор / Меморија / Диск",
|
||||
"network": "Мрежа",
|
||||
"download": "Рецепт",
|
||||
"upload": "Тексас",
|
||||
"noData": "Нема доступних историјских података за овај временски опсег.",
|
||||
"custom": "Прилагођено",
|
||||
"to": "до",
|
||||
"apply": "Примени",
|
||||
"viewHistory": "Прикажи историју"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Proxmox статистика",
|
||||
"cpuUsage": "Искоришћеност процесора",
|
||||
"memoryUsage": "Коришћење меморије",
|
||||
"diskUsage": "Искоришћеност диска",
|
||||
"networkInterfaces": "Мрежни интерфејси",
|
||||
"uptime": "Време непрекидног рада",
|
||||
"systemInfo": "Системске информације",
|
||||
"guestsSummary": "Гости",
|
||||
"storagePools": "Складишни базени",
|
||||
"clusterHealth": "Здравље кластера",
|
||||
"cpuCores_one": "{{count}} Језгро",
|
||||
"cpuCores_other": "{{count}} Језгра",
|
||||
"used": "Коришћено",
|
||||
"total": "Укупно",
|
||||
"hostname": "Име хоста",
|
||||
"kernel": "Језгро",
|
||||
"pveVersion": "ПВЕ верзија",
|
||||
"name": "Име",
|
||||
"status": "Статус",
|
||||
"type": "Тип",
|
||||
"cpu": "Процесор",
|
||||
"mem": "Мем",
|
||||
"disk": "Диск",
|
||||
"running": "Трчање",
|
||||
"stopped": "Заустављено",
|
||||
"guestCounts": "{{running}}/{{total}} трчи",
|
||||
"inactive": "Неактивно",
|
||||
"notClustered": "Самостални чвор (није део кластера)",
|
||||
"quorate": "Кворат",
|
||||
"notQuorate": "Није кворум",
|
||||
"nodeOnline": "Онлајн",
|
||||
"nodeOffline": "Офлајн",
|
||||
"noHostSelected": "Није изабран домаћин",
|
||||
"pveshNotFound": "pvesh није пронађен - да ли је ово Proxmox чвор?",
|
||||
"nodeDetectionFailed": "Није могуће утврдити важеће име Proxmox чвора",
|
||||
"connecting": "Повезивање...",
|
||||
"connectionFailed": "Повезивање са Proxmox чвором није успело",
|
||||
"refresh": "Освежи",
|
||||
"searchGuests": "Претражи госте...",
|
||||
"filterAll": "Сви",
|
||||
"filterVm": "Виртуелна машина",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "На овом чвору нису пронађене виртуелне машине или LXC контејнери.",
|
||||
"noGuestsMatch": "Ниједан гост не одговара тренутним филтерима."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Метрике хоста"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Метрике хоста",
|
||||
"enableProxmoxStats": "Омогући Proxmox статистику",
|
||||
"enableProxmoxStatsDesc": "Прикажи картицу Proxmox Stats за овај хост са статистикама уживо чвора, госта, складишта и кластера прикупљеним преко SSH-а.",
|
||||
"proxmoxStatsPollInterval": "Интервал анкете (секунде)",
|
||||
"proxmoxStatsPollIntervalDesc": "Минимум 15 секунди. Колико често освежавати статистику Proxmox чвора.",
|
||||
"proxmoxStatsNodeOverride": "Замена имена чвора",
|
||||
"proxmoxStatsNodeOverrideDesc": "Поништи аутоматско откривање имена Proxmox чвора (подразумевано се открива преко имена хоста).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Аутоматски детектовано на основу имена хоста",
|
||||
"metricsCollectionLabel": "Колекција метрика",
|
||||
"enableMetricsLabel": "Омогући метрике",
|
||||
"enableMetricsDesc": "Прикупљајте метрику процесора, RAM-а, диска и друге показатеље са овог хоста",
|
||||
"useGlobalMetrics": "Користи глобални интервал",
|
||||
"useGlobalMetricsDesc": "Замени интервалом метрика на нивоу сервера",
|
||||
"metricsIntervalS": "Интервал(и) метрика",
|
||||
"metricsIntervalDesc2": "Секунде између снимака метрика",
|
||||
"excludedMountsLabel": "Искључени носачи",
|
||||
"monitoredMountsLabel": "Прилагођене праћене путање",
|
||||
"monitoredMountsDesc": "Додајте путање које нису изложене као засебне монтиране верзије, укључујући путање за Home Assistant монтиране помоћу повезивања, као што је /config.",
|
||||
"monitoredMountPathPlaceholder": "Путања (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Ознака (опционо)",
|
||||
"addMonitoredMount": "Додај путању",
|
||||
"excludedMountsDesc": "Сакријте одређене тачке монтирања или типове фајл система (нпр. nfs, cifs) од коришћења диска и упозорења за овај хост.",
|
||||
"excludedMountsPlaceholder": "Путања монтирања (/mnt/nas) или тип фајл система (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Није искључено ниједно монтирање. Приказани су сви откривени фајл системи.",
|
||||
"addExcludedMount": "Додај",
|
||||
"visibleWidgets": "Видљиви виџети",
|
||||
"widgetsMovedToHostMetrics": "Картице се сада додају, распоређују и мењају им се величина директно на картици „Host Metrics“. Отворите „Host Metrics“ за овог хоста и користите „Customize“ да бисте изабрали које ће картице бити приказане.",
|
||||
"quickActionsLabel": "Брзе акције",
|
||||
"quickActionsToolbar": "Брзе акције се појављују као дугмад у траци са алаткама Host Metrics за извршавање команди једним кликом.",
|
||||
"noQuickActions": "Још нема брзих акција.",
|
||||
"buttonLabel": "Ознака дугмета",
|
||||
"selectSnippetPlaceholder": "Изаберите исечак...",
|
||||
"addActionBtn": "Додај акцију"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Метрике и упозорења",
|
||||
"feature_metrics_desc": "Пратите процесор, меморију и диск током времена и добијајте обавештења када дође до квара."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Чување историје метрика",
|
||||
"metricsHistoryRetentionRange": "Од 1 до 90 дана",
|
||||
"days": "дана"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Нема доступних података",
|
||||
"showCurrentValue": "Прикажи тренутну вредност",
|
||||
"chartMetric": "Метрика",
|
||||
"metricRange": "Домет"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "Minne",
|
||||
"disk": "Disk",
|
||||
"network": "Nätverk",
|
||||
"uptime": "Drifttid",
|
||||
"processes": "Processer",
|
||||
"available": "Tillgänglig",
|
||||
"free": "Gratis",
|
||||
"connecting": "Ansluter...",
|
||||
"connectionFailed": "Misslyckades med att ansluta till servern",
|
||||
"naCpus": "Ej tillämpligt CPU(er)",
|
||||
"cpuCores_one": "{{count}} Kärna",
|
||||
"cpuCores_other": "{{count}} Kärnor",
|
||||
"cpuUsage": "CPU-användning",
|
||||
"memoryUsage": "Minnesanvändning",
|
||||
"diskUsage": "Diskanvändning",
|
||||
"selectFilesystem": "Välj filsystem",
|
||||
"temperature": "Temperatur",
|
||||
"highestTemperature": "Högsta temperatur",
|
||||
"primaryTemperatureSensor": "Primär sensor",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "Ingen NVIDIA GPU hittades. Installera NVIDIA-drivrutinen (den tillhandahåller nvidia-smi) för att se GPU-statistik.",
|
||||
"driver": "Förare {{version}}",
|
||||
"utilization": "Utnyttjande",
|
||||
"memory": "VRAM",
|
||||
"temperature": "Temp",
|
||||
"power": "Driva",
|
||||
"fan": "Fläkt",
|
||||
"processes": "GPU-processer",
|
||||
"noProcesses": "Inga processer använder GPU:n"
|
||||
},
|
||||
"failedToFetchHostConfig": "Misslyckades med att hämta värdkonfigurationen",
|
||||
"serverOffline": "Servern är offline",
|
||||
"cannotFetchMetrics": "Kan inte hämta mätvärden från offlineservern",
|
||||
"totpFailed": "TOTP-verifiering misslyckades",
|
||||
"noneAuthNotSupported": "Host Metrics stöder inte autentiseringstypen 'ingen'.",
|
||||
"noHostSelected": "Ingen värd vald",
|
||||
"load": "Ladda",
|
||||
"systemInfo": "Systeminformation",
|
||||
"hostname": "Värdnamn",
|
||||
"operatingSystem": "Operativsystem",
|
||||
"kernel": "Kärna",
|
||||
"seconds": "sekunder",
|
||||
"networkInterfaces": "Nätverksgränssnitt",
|
||||
"noInterfacesFound": "Inga nätverksgränssnitt hittades",
|
||||
"noProcessesFound": "Inga processer hittades",
|
||||
"processesTotal": "total",
|
||||
"processesRunning": "spring",
|
||||
"loginStats": "SSH-inloggningsstatistik",
|
||||
"noRecentLoginData": "Inga aktuella inloggningsuppgifter",
|
||||
"executingQuickAction": "Kör {{name}}...",
|
||||
"quickActionSuccess": "{{name}} slutfört",
|
||||
"quickActionFailed": "{{name}} misslyckades",
|
||||
"quickActionError": "Misslyckades med att köra {{name}}",
|
||||
"ports": {
|
||||
"title": "Lyssningsportar",
|
||||
"protocol": "Protokoll",
|
||||
"port": "Hamn",
|
||||
"address": "Adress",
|
||||
"process": "Behandla",
|
||||
"search": "Sök portar...",
|
||||
"allProtocols": "Alla",
|
||||
"noData": "Inga lyssningsportdata"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Brandvägg",
|
||||
"inactive": "Inaktiv",
|
||||
"policy": "Politik",
|
||||
"rules": "regler",
|
||||
"noRules": "Inga regler i den här kedjan",
|
||||
"noData": "Ingen brandväggsdata tillgänglig",
|
||||
"action": "Handling",
|
||||
"protocol": "Proto",
|
||||
"port": "Hamn",
|
||||
"source": "Källa",
|
||||
"anywhere": "Någonstans",
|
||||
"chains": "kedjor"
|
||||
},
|
||||
"loadAvg": "Ladda genomsnitt",
|
||||
"swap": "Byta",
|
||||
"architecture": "Arkitektur",
|
||||
"refresh": "Uppdatera",
|
||||
"retry": "Försöka igen",
|
||||
"customize": "Anpassa layouten",
|
||||
"reset": "Återställa",
|
||||
"tabLive": "Bo",
|
||||
"editModeInstructions": "Dra kort för att ordna om, dra i den nedre kanten för att ändra storlek och använd breddknappen för att ändra ett korts längd. Lägg till eller ta bort kort nedan.",
|
||||
"managers": {
|
||||
"services": "Tjänster",
|
||||
"processInspector": "Processinspektör",
|
||||
"logViewer": "Loggvisare",
|
||||
"cron": "Cron-jobb",
|
||||
"packages": "Paket",
|
||||
"ssl": "SSL-certifikat",
|
||||
"firewall": "Brandvägg",
|
||||
"users": "Användare och behörigheter",
|
||||
"healthCheck": "Hälsokontroller",
|
||||
"diskBreakdown": "Diskuppdelning",
|
||||
"systemdTimers": "Timers",
|
||||
"topMemory": "Topp av Memory",
|
||||
"noData": "Inga uppgifter",
|
||||
"sudoHint": "Ange ett sudo-lösenord för den här värden i värdredigeraren för att aktivera privilegierade åtgärder.",
|
||||
"filter": "Filtrera...",
|
||||
"start": "Start",
|
||||
"stop": "Stopp",
|
||||
"restart": "Starta om",
|
||||
"actionDone": "{{name}} uppdaterad",
|
||||
"actionFailed": "Åtgärden misslyckades",
|
||||
"signalSent": "Signal skickad till PID {{pid}}",
|
||||
"killHint": "Klicka: avsluta (SIGTERM). Högerklicka: tvinga bort (SIGKILL).",
|
||||
"working": "Arbetssätt...",
|
||||
"update": "Uppdatera",
|
||||
"upgradeAll": "Uppgradera alla",
|
||||
"allUpToDate": "Allt är uppdaterat",
|
||||
"save": "Spara",
|
||||
"command": "Kommando",
|
||||
"enabled": "Aktiverad",
|
||||
"cronSaved": "Crontab uppdaterad",
|
||||
"clients": "klienter",
|
||||
"dryRun": "Torrkörning",
|
||||
"renew": "Förnya",
|
||||
"noAcmeClient": "Ingen ACME-klient (certbot eller acme.sh) hittades på den här värden.",
|
||||
"addInputRule": "Lägg till INPUT-regel",
|
||||
"firewallWarning": "Ändringarna gäller endast under körning tills de sparas. Var försiktig så att du inte låser dig ute.",
|
||||
"ruleApplied": "Regel tillämpad",
|
||||
"invalidPort": "Ange en giltig port (1-65535)",
|
||||
"newUsername": "Nytt användarnamn",
|
||||
"addUser": "Tillägga",
|
||||
"deleteUser": "Ta bort användare",
|
||||
"noHealthChecks": "Inga hälsokontroller har konfigurerats ännu.",
|
||||
"follow": "Följa",
|
||||
"noLogData": "Ingen loggutgång.",
|
||||
"tree": "Träd",
|
||||
"enableDisable": "Aktivera/avaktivera vid start",
|
||||
"grantSudo": "Bevilja sudo",
|
||||
"revokeSudo": "Återkalla sudo",
|
||||
"sslIssueCert": "Utfärdande av certifikat",
|
||||
"sslExpired": "Utgången",
|
||||
"sslInDays": "i {{days}}d",
|
||||
"sslNeedDomain": "Ange minst en domän",
|
||||
"sslIssued": "Certifikat utfärdat",
|
||||
"sslDomainsPlaceholder": "exempel.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (fristående)",
|
||||
"sslHttpWebroot": "HTTP (webbrot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "DNS-leverantör (t.ex. Cloudflare)",
|
||||
"sslIssueHint": "DNS-leverantörens inloggningsuppgifter måste redan vara konfigurerade på värden.",
|
||||
"sslRevoke": "Återkalla certifikat",
|
||||
"sslRevoked": "Certifikat återkallat",
|
||||
"sslRevokeConfirm": "Återkalla och ta bort certifikatet \"{{name}}\"? Detta kan inte ångras.",
|
||||
"healthRun": "Sikt",
|
||||
"healthName": "Namn",
|
||||
"healthTarget": "Värd / adress",
|
||||
"healthAddCheck": "Lägg till check",
|
||||
"healthSaved": "Hälsokontroller sparade",
|
||||
"healthMissingFields": "Varje kontroll behöver ett namn och ett mål",
|
||||
"logFile": "Fil",
|
||||
"logUnit": "Enhet",
|
||||
"logCustomPath": "Anpassad sökväg under /var/log (valfritt)",
|
||||
"logGrep": "Filtrera rader...",
|
||||
"firewallPersist": "Bevara regler",
|
||||
"firewallPersisted": "Brandväggsreglerna bibehölls",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Svansskala",
|
||||
"wgNotInstalled": "WireGuard är inte installerat på den här värddatorn",
|
||||
"wgNoInterfaces": "Inga WireGuard-gränssnitt konfigurerade",
|
||||
"wgInterfaceUp": "Få upp",
|
||||
"wgInterfaceDown": "Sänka",
|
||||
"wgBringingUp": "Tar upp {{name}}...",
|
||||
"wgBringingDown": "Att fälla {{name}}...",
|
||||
"wgInterfaceUpDone": "{{name}} är uppe",
|
||||
"wgInterfaceDownDone": "{{name}} är nere",
|
||||
"wgListenPort": "Hamn",
|
||||
"wgPublicKey": "Offentlig nyckel",
|
||||
"wgEndpoint": "Slutpunkt",
|
||||
"wgAllowedIPs": "Tillåtna IP-adresser",
|
||||
"wgLastHandshake": "Sista handskakningen",
|
||||
"wgHandshakeNever": "Aldrig",
|
||||
"wgTransfer": "Överföra",
|
||||
"tsNotInstalled": "Tailscale är inte installerat på den här värddatorn",
|
||||
"tsRunning": "Spring",
|
||||
"tsStopped": "Stoppad",
|
||||
"tsEnable": "Ansluta",
|
||||
"tsDisable": "Koppla från",
|
||||
"tsEnabling": "Ansluter till Tailscale...",
|
||||
"tsDisabling": "Kopplar från Tailscale...",
|
||||
"tsEnabled": "Svanskalan ansluten",
|
||||
"tsDisabled": "Svanskalan frånkopplad",
|
||||
"tsIPs": "Tailskala-IP-adresser",
|
||||
"tsPeers": "Kamrater",
|
||||
"tsOnline": "Online",
|
||||
"tsOffline": "Off-line",
|
||||
"tsExitNode": "Utgångsnod",
|
||||
"tsExitNodeActive": "Avslutsnod aktiv",
|
||||
"tsHostname": "Värdnamn"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Statistikhistorik",
|
||||
"historySuffix": "Historia",
|
||||
"cpuMemoryDisk": "CPU / Minne / Disk",
|
||||
"network": "Nätverk",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "Ingen historikdata tillgänglig för detta tidsintervall.",
|
||||
"custom": "Beställnings",
|
||||
"to": "till",
|
||||
"apply": "Tillämpas",
|
||||
"viewHistory": "Visa historik"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Proxmox-statistik",
|
||||
"cpuUsage": "CPU-användning",
|
||||
"memoryUsage": "Minnesanvändning",
|
||||
"diskUsage": "Diskanvändning",
|
||||
"networkInterfaces": "Nätverksgränssnitt",
|
||||
"uptime": "Drifttid",
|
||||
"systemInfo": "Systeminformation",
|
||||
"guestsSummary": "Gäster",
|
||||
"storagePools": "Lagringspooler",
|
||||
"clusterHealth": "Klusterhälsa",
|
||||
"cpuCores_one": "{{count}} Kärna",
|
||||
"cpuCores_other": "{{count}} Kärnor",
|
||||
"used": "Begagnad",
|
||||
"total": "Total",
|
||||
"hostname": "Värdnamn",
|
||||
"kernel": "Kärna",
|
||||
"pveVersion": "PVE-version",
|
||||
"name": "Namn",
|
||||
"status": "Status",
|
||||
"type": "Typ",
|
||||
"cpu": "CPU",
|
||||
"mem": "Mem",
|
||||
"disk": "Disk",
|
||||
"running": "Spring",
|
||||
"stopped": "Stoppad",
|
||||
"guestCounts": "{{running}}/{{total}} springer",
|
||||
"inactive": "Inaktiv",
|
||||
"notClustered": "Fristående nod (inte en del av ett kluster)",
|
||||
"quorate": "Kvorat",
|
||||
"notQuorate": "Inte kvoriöst",
|
||||
"nodeOnline": "Online",
|
||||
"nodeOffline": "Off-line",
|
||||
"noHostSelected": "Ingen värd vald",
|
||||
"pveshNotFound": "pvesh hittades inte - är detta en Proxmox-nod?",
|
||||
"nodeDetectionFailed": "Det gick inte att fastställa ett giltigt Proxmox-nodnamn",
|
||||
"connecting": "Ansluter...",
|
||||
"connectionFailed": "Misslyckades med att ansluta till Proxmox-noden",
|
||||
"refresh": "Uppdatera",
|
||||
"searchGuests": "Sök gäster...",
|
||||
"filterAll": "Alla",
|
||||
"filterVm": "VM",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "Inga virtuella maskiner eller LXC-behållare hittades på den här noden.",
|
||||
"noGuestsMatch": "Inga gäster matchar de aktuella filtren."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Värdstatistik"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Värdstatistik",
|
||||
"enableProxmoxStats": "Aktivera Proxmox-statistik",
|
||||
"enableProxmoxStatsDesc": "Visa en Proxmox-statistikflik för den här värden med live-nod-, gäst-, lagrings- och klusterstatistik insamlad via SSH.",
|
||||
"proxmoxStatsPollInterval": "Undersökningsintervall (sekunder)",
|
||||
"proxmoxStatsPollIntervalDesc": "Minst 15 sekunder. Hur ofta Proxmox-nodstatistik ska uppdateras.",
|
||||
"proxmoxStatsNodeOverride": "Åsidosättning av nodnamn",
|
||||
"proxmoxStatsNodeOverrideDesc": "Åsidosätt automatisk detektering av Proxmox-nodnamnet (detekteras via värdnamn som standard).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Automatiskt identifierad från värdnamn",
|
||||
"metricsCollectionLabel": "Metriksamling",
|
||||
"enableMetricsLabel": "Aktivera mätvärden",
|
||||
"enableMetricsDesc": "Samla in CPU, RAM, disk och andra mätvärden från den här värden",
|
||||
"useGlobalMetrics": "Använd globalt intervall",
|
||||
"useGlobalMetricsDesc": "Åsidosätt med det serveromfattande mätintervallet",
|
||||
"metricsIntervalS": "Mätintervall (s)",
|
||||
"metricsIntervalDesc2": "Sekunder mellan mätvärdesbilder",
|
||||
"excludedMountsLabel": "Undantagna fästen",
|
||||
"monitoredMountsLabel": "Anpassade övervakade sökvägar",
|
||||
"monitoredMountsDesc": "Lägg till sökvägar som inte exponeras som separata monteringar, inklusive bindningsmonterade Home Assistant-sökvägar som /config.",
|
||||
"monitoredMountPathPlaceholder": "Sökväg (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Etikett (valfritt)",
|
||||
"addMonitoredMount": "Lägg till sökväg",
|
||||
"excludedMountsDesc": "Dölj specifika monteringspunkter eller filsystemtyper (t.ex. nfs, cifs) från diskanvändning och aviseringar för den här värden.",
|
||||
"excludedMountsPlaceholder": "Monteringssökväg (/mnt/nas) eller filsystemtyp (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Inga monteringar är undantagna. Alla upptäckta filsystem visas.",
|
||||
"addExcludedMount": "Tillägga",
|
||||
"visibleWidgets": "Synliga widgetar",
|
||||
"widgetsMovedToHostMetrics": "Kort läggs nu till, ordnas och ändras i storlek direkt på fliken Värdstatistik. Öppna Värdstatistik för den här värden och använd Anpassa för att välja vilka kort som visas.",
|
||||
"quickActionsLabel": "Snabbåtgärder",
|
||||
"quickActionsToolbar": "Snabbåtgärder visas som knappar i verktygsfältet Host Metrics för att köra kommandon med ett klick.",
|
||||
"noQuickActions": "Inga snabba åtgärder ännu.",
|
||||
"buttonLabel": "Knappetikett",
|
||||
"selectSnippetPlaceholder": "Välj utdrag...",
|
||||
"addActionBtn": "Lägg till åtgärd"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Mätvärden och varningar",
|
||||
"feature_metrics_desc": "Spåra CPU, minne och disk över tid och få en avisering när de blir dåliga."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Bevarande av mätvärdenas historik",
|
||||
"metricsHistoryRetentionRange": "1 till 90 dagar",
|
||||
"days": "dagar"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Inga data tillgängliga",
|
||||
"showCurrentValue": "Visa aktuellt värde",
|
||||
"chartMetric": "Metrisk",
|
||||
"metricRange": "Räckvidd"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "ซีพียู",
|
||||
"memory": "หน่วยความจำ",
|
||||
"disk": "ดิสก์",
|
||||
"network": "เครือข่าย",
|
||||
"uptime": "เวลาใช้งาน",
|
||||
"processes": "กระบวนการ",
|
||||
"available": "มีอยู่",
|
||||
"free": "ฟรี",
|
||||
"connecting": "กำลังเชื่อมต่อ...",
|
||||
"connectionFailed": "ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ได้",
|
||||
"naCpus": "ไม่มีข้อมูล CPU",
|
||||
"cpuCores_one": "{{count}} แกนหลัก",
|
||||
"cpuCores_other": "{{count}} คอร์",
|
||||
"cpuUsage": "การใช้งาน CPU",
|
||||
"memoryUsage": "การใช้งานหน่วยความจำ",
|
||||
"diskUsage": "การใช้งานดิสก์",
|
||||
"selectFilesystem": "เลือกไฟล์ระบบ",
|
||||
"temperature": "อุณหภูมิ",
|
||||
"highestTemperature": "อุณหภูมิสูงสุด",
|
||||
"primaryTemperatureSensor": "เซ็นเซอร์หลัก",
|
||||
"gpu": {
|
||||
"title": "จีพี",
|
||||
"noDevice": "ไม่พบการ์ดจอ NVIDIA โปรดติดตั้งไดรเวอร์ NVIDIA (ซึ่งมีโปรแกรม nvidia-smi ให้ใช้งาน) เพื่อดูข้อมูลการทำงานของ GPU",
|
||||
"driver": "คนขับ {{version}}",
|
||||
"utilization": "การใช้ประโยชน์",
|
||||
"memory": "วีแรม",
|
||||
"temperature": "อุณหภูมิ",
|
||||
"power": "พลัง",
|
||||
"fan": "พัดลม",
|
||||
"processes": "การประมวลผล GPU",
|
||||
"noProcesses": "ไม่มีกระบวนการใดกำลังใช้งาน GPU อยู่"
|
||||
},
|
||||
"failedToFetchHostConfig": "ไม่สามารถดึงข้อมูลการกำหนดค่าโฮสต์ได้",
|
||||
"serverOffline": "เซิร์ฟเวอร์ออฟไลน์",
|
||||
"cannotFetchMetrics": "ไม่สามารถดึงข้อมูลเมตริกจากเซิร์ฟเวอร์ออฟไลน์ได้",
|
||||
"totpFailed": "การตรวจสอบ TOTP ล้มเหลว",
|
||||
"noneAuthNotSupported": "Host Metrics ไม่รองรับประเภทการตรวจสอบสิทธิ์แบบ 'none'",
|
||||
"noHostSelected": "ไม่ได้เลือกโฮสต์",
|
||||
"load": "โหลด",
|
||||
"systemInfo": "ข้อมูลระบบ",
|
||||
"hostname": "ชื่อโฮสต์",
|
||||
"operatingSystem": "ระบบปฏิบัติการ",
|
||||
"kernel": "เคอร์เนล",
|
||||
"seconds": "วินาที",
|
||||
"networkInterfaces": "อินเทอร์เฟซเครือข่าย",
|
||||
"noInterfacesFound": "ไม่พบอินเทอร์เฟซเครือข่าย",
|
||||
"noProcessesFound": "ไม่พบกระบวนการใดๆ",
|
||||
"processesTotal": "ทั้งหมด",
|
||||
"processesRunning": "วิ่ง",
|
||||
"loginStats": "สถิติการเข้าสู่ระบบ SSH",
|
||||
"noRecentLoginData": "ไม่มีข้อมูลการเข้าสู่ระบบล่าสุด",
|
||||
"executingQuickAction": "กำลังดำเนินการ {{name}}...",
|
||||
"quickActionSuccess": "{{name}} เสร็จสมบูรณ์เรียบร้อยแล้ว",
|
||||
"quickActionFailed": "{{name}} ล้มเหลว",
|
||||
"quickActionError": "ไม่สามารถดำเนินการ {{name}} ได้",
|
||||
"ports": {
|
||||
"title": "พอร์ตรับฟัง",
|
||||
"protocol": "โปรโตคอล",
|
||||
"port": "ท่าเรือ",
|
||||
"address": "ที่อยู่",
|
||||
"process": "กระบวนการ",
|
||||
"search": "ค้นหาพอร์ต...",
|
||||
"allProtocols": "ทั้งหมด",
|
||||
"noData": "ไม่มีข้อมูลพอร์ตการฟัง"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "ไฟร์วอลล์",
|
||||
"inactive": "ไม่ใช้งาน",
|
||||
"policy": "นโยบาย",
|
||||
"rules": "กฎ",
|
||||
"noRules": "ไม่มีกฎเกณฑ์ใดๆ ในห่วงโซ่นี้",
|
||||
"noData": "ไม่มีข้อมูลไฟร์วอลล์ให้ใช้งาน",
|
||||
"action": "การกระทำ",
|
||||
"protocol": "โปรโต",
|
||||
"port": "ท่าเรือ",
|
||||
"source": "แหล่งที่มา",
|
||||
"anywhere": "ทุกที่",
|
||||
"chains": "โซ่"
|
||||
},
|
||||
"loadAvg": "โหลดเฉลี่ย",
|
||||
"swap": "แลกเปลี่ยน",
|
||||
"architecture": "สถาปัตยกรรม",
|
||||
"refresh": "รีเฟรช",
|
||||
"retry": "ลองใหม่อีกครั้ง",
|
||||
"customize": "ปรับแต่งเค้าโครง",
|
||||
"reset": "รีเซ็ต",
|
||||
"tabLive": "สด",
|
||||
"editModeInstructions": "ลากการ์ดเพื่อจัดเรียงใหม่ ลากขอบด้านล่างเพื่อปรับขนาด และใช้ปุ่มความกว้างเพื่อเปลี่ยนความกว้างของการ์ด เพิ่มหรือลบการ์ดด้านล่าง",
|
||||
"managers": {
|
||||
"services": "บริการ",
|
||||
"processInspector": "ผู้ตรวจสอบกระบวนการ",
|
||||
"logViewer": "โปรแกรมดูบันทึก",
|
||||
"cron": "งานครอน",
|
||||
"packages": "แพ็คเกจ",
|
||||
"ssl": "ใบรับรอง SSL",
|
||||
"firewall": "ไฟร์วอลล์",
|
||||
"users": "ผู้ใช้และสิทธิ์การเข้าถึง",
|
||||
"healthCheck": "การตรวจสุขภาพ",
|
||||
"diskBreakdown": "การแยกดิสก์",
|
||||
"systemdTimers": "ตัวจับเวลา",
|
||||
"topMemory": "อันดับแรกโดย Memory",
|
||||
"noData": "ไม่มีข้อมูล",
|
||||
"sudoHint": "ตั้งรหัสผ่าน sudo สำหรับโฮสต์นี้ในโปรแกรมแก้ไขโฮสต์เพื่อเปิดใช้งานการดำเนินการที่มีสิทธิ์พิเศษ",
|
||||
"filter": "กรอง...",
|
||||
"start": "เริ่ม",
|
||||
"stop": "หยุด",
|
||||
"restart": "เริ่มใหม่",
|
||||
"actionDone": "{{name}} อัปเดตแล้ว",
|
||||
"actionFailed": "การดำเนินการล้มเหลว",
|
||||
"signalSent": "ส่งสัญญาณไปยัง PID {{pid}}",
|
||||
"killHint": "คลิก: ยุติการทำงาน (SIGTERM) คลิกขวา: บังคับปิดการทำงาน (SIGKILL)",
|
||||
"working": "การทำงาน...",
|
||||
"update": "อัปเดต",
|
||||
"upgradeAll": "อัปเกรดทั้งหมด",
|
||||
"allUpToDate": "ทุกอย่างอัปเดตแล้ว",
|
||||
"save": "บันทึก",
|
||||
"command": "สั่งการ",
|
||||
"enabled": "เปิดใช้งาน",
|
||||
"cronSaved": "อัปเดต Crontab แล้ว",
|
||||
"clients": "ลูกค้า",
|
||||
"dryRun": "การทดลองซ้อม",
|
||||
"renew": "ต่ออายุ",
|
||||
"noAcmeClient": "ไม่พบไคลเอ็นต์ ACME (certbot หรือ acme.sh) บนโฮสต์นี้",
|
||||
"addInputRule": "เพิ่มกฎ INPUT",
|
||||
"firewallWarning": "การเปลี่ยนแปลงจะมีผลเฉพาะขณะรันไทม์จนกว่าจะบันทึกเสร็จสมบูรณ์ โปรดระวังอย่าล็อกตัวเองออกจากระบบ",
|
||||
"ruleApplied": "กฎที่ใช้",
|
||||
"invalidPort": "ป้อนหมายเลขพอร์ตที่ถูกต้อง (1-65535)",
|
||||
"newUsername": "ชื่อผู้ใช้ใหม่",
|
||||
"addUser": "เพิ่ม",
|
||||
"deleteUser": "ลบผู้ใช้",
|
||||
"noHealthChecks": "ยังไม่ได้ตั้งค่าการตรวจสอบสุขภาพใดๆ",
|
||||
"follow": "ติดตาม",
|
||||
"noLogData": "ไม่มีการแสดงผลบันทึกใดๆ",
|
||||
"tree": "ต้นไม้",
|
||||
"enableDisable": "เปิดใช้งาน/ปิดใช้งานเมื่อบูตเครื่อง",
|
||||
"grantSudo": "ให้สิทธิ์ sudo",
|
||||
"revokeSudo": "ยกเลิกสิทธิ์ sudo",
|
||||
"sslIssueCert": "ออกใบรับรอง",
|
||||
"sslExpired": "หมดอายุ",
|
||||
"sslInDays": "ใน {{days}}d",
|
||||
"sslNeedDomain": "ป้อนโดเมนอย่างน้อยหนึ่งโดเมน",
|
||||
"sslIssued": "ออกใบรับรองแล้ว",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (แบบสแตนด์อโลน)",
|
||||
"sslHttpWebroot": "HTTP (webroot)",
|
||||
"sslDns": "เอ็นเอสดี",
|
||||
"sslDnsProvider": "ผู้ให้บริการ DNS (เช่น Cloudflare)",
|
||||
"sslIssueHint": "ต้องตั้งค่าข้อมูลประจำตัวของผู้ให้บริการ DNS บนโฮสต์ไว้แล้ว",
|
||||
"sslRevoke": "เพิกถอนใบรับรอง",
|
||||
"sslRevoked": "ใบรับรองถูกเพิกถอน",
|
||||
"sslRevokeConfirm": "เพิกถอนและลบใบรับรอง \"{{name}}\"? การดำเนินการนี้ไม่สามารถย้อนกลับได้",
|
||||
"healthRun": "วิ่ง",
|
||||
"healthName": "ชื่อ",
|
||||
"healthTarget": "โฮสต์ / ที่อยู่",
|
||||
"healthAddCheck": "เพิ่มเช็ค",
|
||||
"healthSaved": "บันทึกการตรวจสุขภาพ",
|
||||
"healthMissingFields": "เช็คแต่ละใบต้องมีชื่อและเป้าหมาย",
|
||||
"logFile": "ไฟล์",
|
||||
"logUnit": "หน่วย",
|
||||
"logCustomPath": "เส้นทางที่กำหนดเองภายใต้ /var/log (ไม่บังคับ)",
|
||||
"logGrep": "กรองบรรทัด...",
|
||||
"firewallPersist": "กฎการคงอยู่",
|
||||
"firewallPersisted": "กฎไฟร์วอลล์ยังคงอยู่",
|
||||
"wireguard": "ไวร์การ์ด",
|
||||
"tailscale": "เกล็ดหาง",
|
||||
"wgNotInstalled": "WireGuard ไม่ได้ติดตั้งอยู่ในเครื่องนี้",
|
||||
"wgNoInterfaces": "ไม่มีการกำหนดค่าอินเทอร์เฟซ WireGuard",
|
||||
"wgInterfaceUp": "นำมา",
|
||||
"wgInterfaceDown": "นำมาลง",
|
||||
"wgBringingUp": "กำลังนำ {{name}} ขึ้นมา...",
|
||||
"wgBringingDown": "ล้มล้าง {{name}}...",
|
||||
"wgInterfaceUpDone": "{{name}} พร้อมใช้งานแล้ว",
|
||||
"wgInterfaceDownDone": "{{name}} ใช้งานไม่ได้แล้ว",
|
||||
"wgListenPort": "ท่าเรือ",
|
||||
"wgPublicKey": "กุญแจสาธารณะ",
|
||||
"wgEndpoint": "จุดสิ้นสุด",
|
||||
"wgAllowedIPs": "ที่อยู่ IP ที่อนุญาต",
|
||||
"wgLastHandshake": "การจับมือครั้งสุดท้าย",
|
||||
"wgHandshakeNever": "ไม่เคย",
|
||||
"wgTransfer": "โอนย้าย",
|
||||
"tsNotInstalled": "Tailscale ไม่ได้ติดตั้งอยู่ในเครื่องนี้",
|
||||
"tsRunning": "วิ่ง",
|
||||
"tsStopped": "หยุด",
|
||||
"tsEnable": "เชื่อมต่อ",
|
||||
"tsDisable": "ตัดการเชื่อมต่อ",
|
||||
"tsEnabling": "กำลังเชื่อมต่อกับ Tailscale...",
|
||||
"tsDisabling": "กำลังตัดการเชื่อมต่อจาก Tailscale...",
|
||||
"tsEnabled": "เกล็ดหางเชื่อมต่อ",
|
||||
"tsDisabled": "เกล็ดหางหลุด",
|
||||
"tsIPs": "IP หาง",
|
||||
"tsPeers": "เพื่อนร่วมงาน",
|
||||
"tsOnline": "ออนไลน์",
|
||||
"tsOffline": "ออฟไลน์",
|
||||
"tsExitNode": "โหนดทางออก",
|
||||
"tsExitNodeActive": "โหนดทางออกทำงานอยู่",
|
||||
"tsHostname": "ชื่อโฮสต์"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "ประวัติการวัดผล",
|
||||
"historySuffix": "ประวัติศาสตร์",
|
||||
"cpuMemoryDisk": "ซีพียู / หน่วยความจำ / ดิสก์",
|
||||
"network": "เครือข่าย",
|
||||
"download": "อาร์ซี",
|
||||
"upload": "เท็กซัส",
|
||||
"noData": "ไม่มีข้อมูลประวัติสำหรับช่วงเวลานี้",
|
||||
"custom": "กำหนดเอง",
|
||||
"to": "ถึง",
|
||||
"apply": "นำมาใช้",
|
||||
"viewHistory": "ประวัติการดู"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "สถิติ Proxmox",
|
||||
"cpuUsage": "การใช้งาน CPU",
|
||||
"memoryUsage": "การใช้งานหน่วยความจำ",
|
||||
"diskUsage": "การใช้งานดิสก์",
|
||||
"networkInterfaces": "อินเทอร์เฟซเครือข่าย",
|
||||
"uptime": "เวลาใช้งาน",
|
||||
"systemInfo": "ข้อมูลระบบ",
|
||||
"guestsSummary": "แขก",
|
||||
"storagePools": "สระเก็บน้ำ",
|
||||
"clusterHealth": "สุขภาพคลัสเตอร์",
|
||||
"cpuCores_one": "{{count}} แกนหลัก",
|
||||
"cpuCores_other": "{{count}} คอร์",
|
||||
"used": "ใช้แล้ว",
|
||||
"total": "ทั้งหมด",
|
||||
"hostname": "ชื่อโฮสต์",
|
||||
"kernel": "เคอร์เนล",
|
||||
"pveVersion": "เวอร์ชัน PVE",
|
||||
"name": "ชื่อ",
|
||||
"status": "สถานะ",
|
||||
"type": "พิมพ์",
|
||||
"cpu": "ซีพียู",
|
||||
"mem": "เมม",
|
||||
"disk": "ดิสก์",
|
||||
"running": "วิ่ง",
|
||||
"stopped": "หยุด",
|
||||
"guestCounts": "{{running}}/{{total}} กำลังทำงาน",
|
||||
"inactive": "ไม่ใช้งาน",
|
||||
"notClustered": "โหนดแบบสแตนด์อโลน (ไม่ได้เป็นส่วนหนึ่งของคลัสเตอร์)",
|
||||
"quorate": "ควอต",
|
||||
"notQuorate": "องค์ประชุมไม่ครบ",
|
||||
"nodeOnline": "ออนไลน์",
|
||||
"nodeOffline": "ออฟไลน์",
|
||||
"noHostSelected": "ไม่ได้เลือกโฮสต์",
|
||||
"pveshNotFound": "ไม่พบ pvesh - นี่เป็นโหนด Proxmox หรือไม่?",
|
||||
"nodeDetectionFailed": "ไม่สามารถระบุชื่อโหนด Proxmox ที่ถูกต้องได้",
|
||||
"connecting": "กำลังเชื่อมต่อ...",
|
||||
"connectionFailed": "ไม่สามารถเชื่อมต่อกับโหนด Proxmox ได้",
|
||||
"refresh": "รีเฟรช",
|
||||
"searchGuests": "ค้นหาผู้เข้าพัก...",
|
||||
"filterAll": "ทั้งหมด",
|
||||
"filterVm": "วีเอ็ม",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "ไม่พบเครื่องเสมือน (VM) หรือคอนเทนเนอร์ LXC บนโหนดนี้",
|
||||
"noGuestsMatch": "ไม่มีแขกท่านใดตรงกับตัวกรองที่มีอยู่ในขณะนี้"
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "เมตริกโฮสต์"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "เมตริกโฮสต์",
|
||||
"enableProxmoxStats": "เปิดใช้งานสถิติ Proxmox",
|
||||
"enableProxmoxStatsDesc": "แสดงแท็บสถิติ Proxmox สำหรับโฮสต์นี้ พร้อมสถิติแบบเรียลไทม์ของโหนด เกสต์ พื้นที่จัดเก็บ และคลัสเตอร์ที่รวบรวมผ่าน SSH",
|
||||
"proxmoxStatsPollInterval": "ช่วงเวลาการสำรวจ (วินาที)",
|
||||
"proxmoxStatsPollIntervalDesc": "อย่างน้อย 15 วินาที ความถี่ในการอัปเดตสถิติโหนด Proxmox",
|
||||
"proxmoxStatsNodeOverride": "การแทนที่ชื่อโหนด",
|
||||
"proxmoxStatsNodeOverrideDesc": "ยกเลิกการตรวจจับชื่อโหนด Proxmox อัตโนมัติ (โดยค่าเริ่มต้นจะตรวจจับผ่านชื่อโฮสต์)",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "ตรวจจับอัตโนมัติจากชื่อโฮสต์",
|
||||
"metricsCollectionLabel": "การรวบรวมเมตริก",
|
||||
"enableMetricsLabel": "เปิดใช้งานเมตริก",
|
||||
"enableMetricsDesc": "รวบรวมข้อมูลการใช้งาน CPU, RAM, ดิสก์ และข้อมูลอื่นๆ จากโฮสต์นี้",
|
||||
"useGlobalMetrics": "ใช้ช่วงเวลาทั่วโลก",
|
||||
"useGlobalMetricsDesc": "แทนที่ด้วยช่วงเวลาการวัดเมตริกทั่วทั้งเซิร์ฟเวอร์",
|
||||
"metricsIntervalS": "ช่วงเวลาการวัด (วินาที)",
|
||||
"metricsIntervalDesc2": "จำนวนวินาทีระหว่างการบันทึกภาพเมตริก",
|
||||
"excludedMountsLabel": "การติดตั้งที่ไม่รวมอยู่ในเงื่อนไข",
|
||||
"monitoredMountsLabel": "เส้นทางการตรวจสอบแบบกำหนดเอง",
|
||||
"monitoredMountsDesc": "เพิ่มพาธที่ไม่ถูกเปิดเผยเป็นเมานต์แยกต่างหาก รวมถึงพาธ Home Assistant ที่เชื่อมต่อแบบ bind-mount เช่น /config",
|
||||
"monitoredMountPathPlaceholder": "เส้นทาง (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "ป้ายกำกับ (ไม่บังคับ)",
|
||||
"addMonitoredMount": "เพิ่มเส้นทาง",
|
||||
"excludedMountsDesc": "ซ่อนจุดเชื่อมต่อหรือประเภทระบบไฟล์เฉพาะ (เช่น nfs, cifs) จากการใช้งานดิสก์และการแจ้งเตือนสำหรับโฮสต์นี้",
|
||||
"excludedMountsPlaceholder": "เส้นทางการเชื่อมต่อ (/mnt/nas) หรือประเภทระบบไฟล์ (nfs, cifs)",
|
||||
"excludedMountsEmpty": "ไม่มีการยกเว้นการเมานต์ใดๆ ระบบไฟล์ที่ตรวจพบทั้งหมดจะแสดงขึ้น",
|
||||
"addExcludedMount": "เพิ่ม",
|
||||
"visibleWidgets": "วิดเจ็ตที่มองเห็นได้",
|
||||
"widgetsMovedToHostMetrics": "ขณะนี้สามารถเพิ่ม จัดเรียง และปรับขนาดการ์ดได้โดยตรงในแท็บเมตริกโฮสต์ เปิดเมตริกโฮสต์สำหรับโฮสต์นี้แล้วใช้ ปรับแต่ง เพื่อเลือกการ์ดที่จะแสดง",
|
||||
"quickActionsLabel": "การดำเนินการด่วน",
|
||||
"quickActionsToolbar": "การดำเนินการด่วนจะปรากฏเป็นปุ่มในแถบเครื่องมือ Host Metrics เพื่อให้สามารถเรียกใช้คำสั่งได้ด้วยการคลิกเพียงครั้งเดียว",
|
||||
"noQuickActions": "ยังไม่มีการดำเนินการใดๆ อย่างเร่งด่วนในขณะนี้",
|
||||
"buttonLabel": "ป้ายกำกับปุ่ม",
|
||||
"selectSnippetPlaceholder": "เลือกส่วนย่อย...",
|
||||
"addActionBtn": "เพิ่มการดำเนินการ"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "ตัวชี้วัดและการแจ้งเตือน",
|
||||
"feature_metrics_desc": "ติดตามการทำงานของ CPU หน่วยความจำ และดิสก์อย่างต่อเนื่อง และรับการแจ้งเตือนเมื่ออุปกรณ์เหล่านั้นเริ่มมีปัญหา"
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "การเก็บรักษาประวัติเมตริก",
|
||||
"metricsHistoryRetentionRange": "1 ถึง 90 วัน",
|
||||
"days": "วัน"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "ไม่มีข้อมูล",
|
||||
"showCurrentValue": "แสดงมูลค่าปัจจุบัน",
|
||||
"chartMetric": "เมตริก",
|
||||
"metricRange": "พิสัย"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "Bellek",
|
||||
"disk": "Disk",
|
||||
"network": "Ağ",
|
||||
"uptime": "Çalışma Süresi",
|
||||
"processes": "İşlemler",
|
||||
"available": "Kullanılabilir",
|
||||
"free": "Boş",
|
||||
"connecting": "Bağlanıyor...",
|
||||
"connectionFailed": "Sunucuya bağlanılamadı",
|
||||
"naCpus": "CPU yok",
|
||||
"cpuCores_one": "{{count}} Çekirdek",
|
||||
"cpuCores_other": "{{count}} Çekirdek",
|
||||
"cpuUsage": "CPU Kullanımı",
|
||||
"memoryUsage": "Bellek Kullanımı",
|
||||
"diskUsage": "Disk Kullanımı",
|
||||
"selectFilesystem": "Dosya sistemini seçin",
|
||||
"temperature": "Sıcaklık",
|
||||
"highestTemperature": "En yüksek sıcaklık",
|
||||
"primaryTemperatureSensor": "Birincil sensör",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "NVIDIA GPU algılanmadı. GPU ölçümlerini görmek için NVIDIA sürücüsünü (nvidia-smi içerir) yükleyin.",
|
||||
"driver": "Sürücü {{version}}",
|
||||
"utilization": "Kullanım",
|
||||
"memory": "VRAM",
|
||||
"temperature": "Geçici",
|
||||
"power": "Güç",
|
||||
"fan": "Fan",
|
||||
"processes": "GPU işlemleri",
|
||||
"noProcesses": "GPU'yu kullanan hiçbir işlem yok."
|
||||
},
|
||||
"failedToFetchHostConfig": "Host yapılandırması alınamadı",
|
||||
"serverOffline": "Sunucu Çevrimdışı",
|
||||
"cannotFetchMetrics": "Çevrimdışı sunucudan ölçümler alınamaz",
|
||||
"totpFailed": "TOTP doğrulaması başarısız",
|
||||
"noneAuthNotSupported": "Sunucu Metrikleri 'none' kimlik doğrulama türünü desteklemiyor.",
|
||||
"noHostSelected": "Sunucu seçilmedi",
|
||||
"load": "Yük",
|
||||
"systemInfo": "Sistem Bilgisi",
|
||||
"hostname": "Sunucu Adı",
|
||||
"operatingSystem": "İşletim Sistemi",
|
||||
"kernel": "Çekirdek",
|
||||
"seconds": "saniye",
|
||||
"networkInterfaces": "Ağ Arayüzleri",
|
||||
"noInterfacesFound": "Ağ arayüzleri bulunamadı",
|
||||
"noProcessesFound": "Hiç işlem bulunamadı",
|
||||
"processesTotal": "toplam",
|
||||
"processesRunning": "çalışan",
|
||||
"loginStats": "SSH Giriş İstatistikleri",
|
||||
"noRecentLoginData": "Son giriş verisi yok",
|
||||
"executingQuickAction": "{{name}} çalıştırılıyor...",
|
||||
"quickActionSuccess": "{{name}} başarıyla tamamlandı",
|
||||
"quickActionFailed": "{{name}} başarısız oldu",
|
||||
"quickActionError": "{{name}} çalıştırılamadı",
|
||||
"ports": {
|
||||
"title": "Dinlenen Portlar",
|
||||
"protocol": "Protokol",
|
||||
"port": "Port",
|
||||
"address": "Adres",
|
||||
"process": "İşlem",
|
||||
"search": "Portları ara...",
|
||||
"allProtocols": "Tümü",
|
||||
"noData": "Dinlenen port verisi yok"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Güvenlik Duvarı",
|
||||
"inactive": "Etkin Değil",
|
||||
"policy": "Politika",
|
||||
"rules": "kurallar",
|
||||
"noRules": "Bu zincirde kural yok",
|
||||
"noData": "Güvenlik duvarı verisi bulunamadı",
|
||||
"action": "Eylem",
|
||||
"protocol": "Protokol",
|
||||
"port": "Port",
|
||||
"source": "Kaynak",
|
||||
"anywhere": "Her yer",
|
||||
"chains": "zincirler"
|
||||
},
|
||||
"loadAvg": "Ortalama Yük",
|
||||
"swap": "Takas",
|
||||
"architecture": "Mimari",
|
||||
"refresh": "Yenile",
|
||||
"retry": "Yeniden dene",
|
||||
"customize": "Düzeni özelleştir",
|
||||
"reset": "Sıfırla",
|
||||
"tabLive": "Canlı",
|
||||
"editModeInstructions": "Kartları yeniden düzenlemek için sürükleyin, yeniden boyutlandırmak için alt kenarı sürükleyin ve bir kartın genişliğini değiştirmek için genişlik düğmesini kullanın. Aşağıdan kart ekleyin veya kaldırın.",
|
||||
"managers": {
|
||||
"services": "Hizmetler",
|
||||
"processInspector": "İşlem Denetçisi",
|
||||
"logViewer": "Günlük Görüntüleyici",
|
||||
"cron": "Cron Görevleri",
|
||||
"packages": "Paketler",
|
||||
"ssl": "SSL Sertifikaları",
|
||||
"firewall": "Güvenlik Duvarı",
|
||||
"users": "Kullanıcılar ve İzinler",
|
||||
"healthCheck": "Sağlık Kontrolleri",
|
||||
"diskBreakdown": "Disk Dağılımı",
|
||||
"systemdTimers": "Zamanlayıcılar",
|
||||
"topMemory": "Bellek Sıralaması",
|
||||
"noData": "Veri yok",
|
||||
"sudoHint": "Ayrıcalıklı eylemleri etkinleştirmek için host düzenleyicisinde bu host için bir sudo parolası belirleyin.",
|
||||
"filter": "Filtrele...",
|
||||
"start": "Başlat",
|
||||
"stop": "Durdur",
|
||||
"restart": "Yeniden Başlat",
|
||||
"actionDone": "{{name}} güncellendi",
|
||||
"actionFailed": "Eylem başarısız oldu",
|
||||
"signalSent": "PID {{pid}}'e sinyal gönderildi",
|
||||
"killHint": "Tıklama: sonlandır (SIGTERM). Sağ tıklama: zorla sonlandır (SIGKILL).",
|
||||
"working": "Çalışıyor...",
|
||||
"update": "Güncelle",
|
||||
"upgradeAll": "Tümünü yükselt",
|
||||
"allUpToDate": "Her şey güncel",
|
||||
"save": "Kaydet",
|
||||
"command": "Komut",
|
||||
"enabled": "Etkin",
|
||||
"cronSaved": "Crontab güncellendi",
|
||||
"clients": "İstemciler",
|
||||
"dryRun": "Deneme çalıştırması",
|
||||
"renew": "Yenile",
|
||||
"noAcmeClient": "Bu sunucuda ACME istemcisi (certbot veya acme.sh) bulunamadı.",
|
||||
"addInputRule": "INPUT kuralı ekle",
|
||||
"firewallWarning": "Değişiklikler, kalıcı hale getirilene kadar yalnızca çalışma zamanında geçerlidir. Kendinizi kilitlememeye dikkat edin.",
|
||||
"ruleApplied": "Kural uygulandı",
|
||||
"invalidPort": "Geçerli bir bağlantı noktası girin (1-65535)",
|
||||
"newUsername": "Yeni kullanıcı adı",
|
||||
"addUser": "Ekle",
|
||||
"deleteUser": "Kullanıcıyı sil",
|
||||
"noHealthChecks": "Henüz yapılandırılmış bir sağlık denetimi yok.",
|
||||
"follow": "Takip et",
|
||||
"noLogData": "Günlük çıktısı yok.",
|
||||
"tree": "Ağaç",
|
||||
"enableDisable": "Önyüklemede etkinleştir / devre dışı bırak",
|
||||
"grantSudo": "Sudo yetkisi ver",
|
||||
"revokeSudo": "Sudo yetkisini kaldır",
|
||||
"sslIssueCert": "Sertifika oluştur",
|
||||
"sslExpired": "Süresi dolmuş",
|
||||
"sslInDays": "{{days}} gün içinde",
|
||||
"sslNeedDomain": "En az bir alan adı girin",
|
||||
"sslIssued": "Sertifika oluşturuldu",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (bağımsız)",
|
||||
"sslHttpWebroot": "HTTP (webroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "DNS sağlayıcısı (örn. cloudflare)",
|
||||
"sslIssueHint": "DNS sağlayıcı kimlik bilgileri sunucuda zaten yapılandırılmış olmalıdır.",
|
||||
"sslRevoke": "Sertifikayı iptal et",
|
||||
"sslRevoked": "Sertifika iptal edildi",
|
||||
"sslRevokeConfirm": "\"{{name}}\" sertifikası iptal edilip kaldırılsın mı? Bu işlem geri alınamaz.",
|
||||
"healthRun": "Çalıştır",
|
||||
"healthName": "Ad",
|
||||
"healthTarget": "Sunucu / adres",
|
||||
"healthAddCheck": "Kontrol ekle",
|
||||
"healthSaved": "Sağlık kontrolleri kaydedildi",
|
||||
"healthMissingFields": "Her kontrol bir ad ve hedef gerektirir",
|
||||
"logFile": "Dosya",
|
||||
"logUnit": "Birim",
|
||||
"logCustomPath": "/var/log altında özel yol (isteğe bağlı)",
|
||||
"logGrep": "Satırları filtrele...",
|
||||
"firewallPersist": "Kuralları kalıcı yap",
|
||||
"firewallPersisted": "Güvenlik duvarı kuralları kalıcı hale getirildi",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Tailscale",
|
||||
"wgNotInstalled": "Bu sunucuda WireGuard yüklü değil",
|
||||
"wgNoInterfaces": "Yapılandırılmış WireGuard arayüzü yok",
|
||||
"wgInterfaceUp": "Başlat",
|
||||
"wgInterfaceDown": "Durdur",
|
||||
"wgBringingUp": "{{name}} başlatılıyor...",
|
||||
"wgBringingDown": "{{name}} durduruluyor...",
|
||||
"wgInterfaceUpDone": "{{name}} çalışıyor",
|
||||
"wgInterfaceDownDone": "{{name}} çalışmıyor",
|
||||
"wgListenPort": "Port",
|
||||
"wgPublicKey": "Açık anahtar",
|
||||
"wgEndpoint": "Uç nokta",
|
||||
"wgAllowedIPs": "İzin verilen IP'ler",
|
||||
"wgLastHandshake": "Son el sıkışma",
|
||||
"wgHandshakeNever": "Hiçbir zaman",
|
||||
"wgTransfer": "Transfer",
|
||||
"tsNotInstalled": "Bu sunucuda Tailscale yüklü değil",
|
||||
"tsRunning": "Çalışıyor",
|
||||
"tsStopped": "Durduruldu",
|
||||
"tsEnable": "Bağlan",
|
||||
"tsDisable": "Bağlantıyı Kes",
|
||||
"tsEnabling": "Tailscale'e bağlanıyor...",
|
||||
"tsDisabling": "Tailscale bağlantısı kesiliyor...",
|
||||
"tsEnabled": "Tailscale bağlandı",
|
||||
"tsDisabled": "Tailscale bağlantısı kesildi",
|
||||
"tsIPs": "Tailscale IP'leri",
|
||||
"tsPeers": "Eşler",
|
||||
"tsOnline": "Çevrimiçi",
|
||||
"tsOffline": "Çevrimdışı",
|
||||
"tsExitNode": "Çıkış düğümü",
|
||||
"tsExitNodeActive": "Çıkış düğümü etkin",
|
||||
"tsHostname": "Ana bilgisayar adı"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Metrik Geçmişi",
|
||||
"historySuffix": "Geçmiş",
|
||||
"cpuMemoryDisk": "CPU / Bellek / Disk",
|
||||
"network": "Ağ",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "Bu zaman aralığı için geçmiş verisi yok.",
|
||||
"custom": "Özel",
|
||||
"to": "ile",
|
||||
"apply": "Uygula",
|
||||
"viewHistory": "Geçmişi Görüntüle"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Proxmox İstatistikleri",
|
||||
"cpuUsage": "CPU Kullanımı",
|
||||
"memoryUsage": "Bellek Kullanımı",
|
||||
"diskUsage": "Disk Kullanımı",
|
||||
"networkInterfaces": "Ağ Arayüzleri",
|
||||
"uptime": "Çalışma süresi",
|
||||
"systemInfo": "Sistem Bilgileri",
|
||||
"guestsSummary": "Misafirler",
|
||||
"storagePools": "Depolama Havuzları",
|
||||
"clusterHealth": "Küme Sağlığı",
|
||||
"cpuCores_one": "{{count}} Çekirdek",
|
||||
"cpuCores_other": "{{count}} Çekirdekler",
|
||||
"used": "Kullanılmış",
|
||||
"total": "Toplam",
|
||||
"hostname": "Ana bilgisayar adı",
|
||||
"kernel": "Çekirdek",
|
||||
"pveVersion": "PVE Sürümü",
|
||||
"name": "İsim",
|
||||
"status": "Durum",
|
||||
"type": "Tip",
|
||||
"cpu": "İşlemci",
|
||||
"mem": "Mem",
|
||||
"disk": "Disk",
|
||||
"running": "Koşma",
|
||||
"stopped": "Durduruldu",
|
||||
"guestCounts": "{{running}}/{{total}} çalışıyor",
|
||||
"inactive": "Etkin değil",
|
||||
"notClustered": "Bağımsız düğüm (kümenin parçası olmayan)",
|
||||
"quorate": "Quora",
|
||||
"notQuorate": "Yeterli çoğunluğa sahip değil",
|
||||
"nodeOnline": "Çevrimiçi",
|
||||
"nodeOffline": "Çevrimdışı",
|
||||
"noHostSelected": "Sunucu seçilmedi.",
|
||||
"pveshNotFound": "pvesh bulunamadı - bu bir Proxmox düğümü mü?",
|
||||
"nodeDetectionFailed": "Geçerli bir Proxmox düğüm adı belirlenemedi.",
|
||||
"connecting": "Bağlanıyor...",
|
||||
"connectionFailed": "Proxmox düğümüne bağlanılamadı.",
|
||||
"refresh": "Yenile",
|
||||
"searchGuests": "Misafirleri ara...",
|
||||
"filterAll": "Tüm",
|
||||
"filterVm": "Sanal makine",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "Bu düğümde hiçbir sanal makine veya LXC kapsayıcısı bulunamadı.",
|
||||
"noGuestsMatch": "Mevcut filtrelere uyan konuk bulunamadı."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Sunucu Metrikleri"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Sunucu Metrikleri",
|
||||
"enableProxmoxStats": "Proxmox İstatistiklerini Etkinleştir",
|
||||
"enableProxmoxStatsDesc": "Bu sunucu için, SSH üzerinden toplanan canlı düğüm, sanal makine, depolama ve küme istatistiklerini içeren bir Proxmox İstatistikleri sekmesi gösterin.",
|
||||
"proxmoxStatsPollInterval": "Anket aralığı (saniye)",
|
||||
"proxmoxStatsPollIntervalDesc": "En az 15 saniye. Proxmox düğüm istatistiklerinin ne sıklıkla yenilenmesi gerektiği.",
|
||||
"proxmoxStatsNodeOverride": "Düğüm adı geçersiz kılma",
|
||||
"proxmoxStatsNodeOverrideDesc": "Proxmox düğüm adının otomatik olarak algılanmasını (varsayılan olarak ana bilgisayar adı üzerinden algılanır) geçersiz kılın.",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Ana bilgisayar adından otomatik olarak algılandı",
|
||||
"metricsCollectionLabel": "Metrik Toplama",
|
||||
"enableMetricsLabel": "Metrikleri Etkinleştir",
|
||||
"enableMetricsDesc": "Bu sunucudan CPU, RAM, disk ve diğer metrikleri topla",
|
||||
"useGlobalMetrics": "Genel Aralığı Kullan",
|
||||
"useGlobalMetricsDesc": "Sunucu geneli metrik aralığını geçersiz kıl",
|
||||
"metricsIntervalS": "Metrik Aralığı (sn)",
|
||||
"metricsIntervalDesc2": "Metrik anlık görüntüleri arasındaki saniye",
|
||||
"excludedMountsLabel": "Hariç Tutulan Montajlar",
|
||||
"monitoredMountsLabel": "Özel olarak izlenen yollar",
|
||||
"monitoredMountsDesc": "/config gibi Home Assistant'a bağlanan yollar da dahil olmak üzere, ayrı bağlama noktaları olarak gösterilmeyen yolları ekleyin.",
|
||||
"monitoredMountPathPlaceholder": "Yol (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Etiket (isteğe bağlı)",
|
||||
"addMonitoredMount": "Yol ekle",
|
||||
"excludedMountsDesc": "Bu sunucu için disk kullanımı ve uyarılarından belirli bağlama noktalarını veya dosya sistemi türlerini (örneğin nfs, cifs) gizleyin.",
|
||||
"excludedMountsPlaceholder": "Bağlama yolu (/mnt/nas) veya dosya sistemi türü (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Hiçbir bağlama noktası hariç tutulmadı. Tespit edilen tüm dosya sistemleri gösteriliyor.",
|
||||
"addExcludedMount": "Eklemek",
|
||||
"visibleWidgets": "Görünür Widget'lar",
|
||||
"widgetsMovedToHostMetrics": "Kartlar artık doğrudan Sunucu Metrikleri sekmesinde eklenir, düzenlenir ve yeniden boyutlandırılır. Bu sunucu için Sunucu Metrikleri'ni açın ve hangi kartların gösterileceğini seçmek için Özelleştir'i kullanın.",
|
||||
"quickActionsLabel": "Hızlı Eylemler",
|
||||
"quickActionsToolbar": "Hızlı eylemler, tek tıklamayla komut çalıştırmak için Ana Bilgisayar Metrikleri araç çubuğunda düğme olarak görünür.",
|
||||
"noQuickActions": "Henüz hızlı eylem yok.",
|
||||
"buttonLabel": "Düğme etiketi",
|
||||
"selectSnippetPlaceholder": "Parçacık seç...",
|
||||
"addActionBtn": "Eylem Ekle"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Ölçümler ve uyarılar",
|
||||
"feature_metrics_desc": "İşlemci, bellek ve disk performansını zaman içinde takip edin ve arızalandıklarında uyarı alın."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Metrik Geçmişi Saklama",
|
||||
"metricsHistoryRetentionRange": "1 ila 90 gün",
|
||||
"days": "gün"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Veri yok",
|
||||
"showCurrentValue": "Geçerli Değeri Göster",
|
||||
"chartMetric": "Metrik",
|
||||
"metricRange": "Aralık"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "Процесор",
|
||||
"memory": "Пам'ять",
|
||||
"disk": "Диск",
|
||||
"network": "Мережа",
|
||||
"uptime": "Час безперебійної роботи",
|
||||
"processes": "Процеси",
|
||||
"available": "Доступно",
|
||||
"free": "Безкоштовно",
|
||||
"connecting": "Підключення...",
|
||||
"connectionFailed": "Не вдалося підключитися до сервера",
|
||||
"naCpus": "Процесор(и) Немає даних",
|
||||
"cpuCores_one": "{{count}} Ядро",
|
||||
"cpuCores_other": "{{count}} Ядра",
|
||||
"cpuUsage": "Використання процесора",
|
||||
"memoryUsage": "Використання пам'яті",
|
||||
"diskUsage": "Використання диска",
|
||||
"selectFilesystem": "Виберіть файлову систему",
|
||||
"temperature": "Температура",
|
||||
"highestTemperature": "Найвища температура",
|
||||
"primaryTemperatureSensor": "Первинний датчик",
|
||||
"gpu": {
|
||||
"title": "Графічний процесор",
|
||||
"noDevice": "Графічний процесор NVIDIA не виявлено. Встановіть драйвер NVIDIA (він надає nvidia-smi), щоб переглянути показники графічного процесора.",
|
||||
"driver": "Водій {{version}}",
|
||||
"utilization": "Використання",
|
||||
"memory": "відеопам'ять",
|
||||
"temperature": "Темп",
|
||||
"power": "Потужність",
|
||||
"fan": "Вентилятор",
|
||||
"processes": "Процеси графічного процесора",
|
||||
"noProcesses": "Жоден процес не використовує графічний процесор"
|
||||
},
|
||||
"failedToFetchHostConfig": "Не вдалося отримати конфігурацію хоста",
|
||||
"serverOffline": "Сервер офлайн",
|
||||
"cannotFetchMetrics": "Не вдається отримати показники з офлайн-сервера",
|
||||
"totpFailed": "Не вдалося перевірити TOTP",
|
||||
"noneAuthNotSupported": "Метрики хоста не підтримують тип автентифікації «немає».",
|
||||
"noHostSelected": "Хост не вибрано",
|
||||
"load": "Навантаження",
|
||||
"systemInfo": "Інформація про систему",
|
||||
"hostname": "Ім'я хоста",
|
||||
"operatingSystem": "Операційна система",
|
||||
"kernel": "Ядро",
|
||||
"seconds": "секунди",
|
||||
"networkInterfaces": "Мережеві інтерфейси",
|
||||
"noInterfacesFound": "Мережевих інтерфейсів не знайдено",
|
||||
"noProcessesFound": "Процесів не знайдено",
|
||||
"processesTotal": "загальна сума",
|
||||
"processesRunning": "біг",
|
||||
"loginStats": "Статистика входу SSH",
|
||||
"noRecentLoginData": "Немає останніх даних для входу",
|
||||
"executingQuickAction": "Виконання {{name}}...",
|
||||
"quickActionSuccess": "{{name}} успішно завершено",
|
||||
"quickActionFailed": "{{name}} не вдалося",
|
||||
"quickActionError": "Не вдалося виконати {{name}}",
|
||||
"ports": {
|
||||
"title": "Порти прослуховування",
|
||||
"protocol": "Протокол",
|
||||
"port": "Порт",
|
||||
"address": "Адреса",
|
||||
"process": "Процес",
|
||||
"search": "Пошук портів...",
|
||||
"allProtocols": "Усі",
|
||||
"noData": "Немає даних про порти прослуховування"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Брандмауер",
|
||||
"inactive": "Неактивний",
|
||||
"policy": "Політика",
|
||||
"rules": "правила",
|
||||
"noRules": "У цьому ланцюжку немає правил",
|
||||
"noData": "Дані брандмауера недоступні",
|
||||
"action": "Дія",
|
||||
"protocol": "Прото",
|
||||
"port": "Порт",
|
||||
"source": "Джерело",
|
||||
"anywhere": "Будь-де",
|
||||
"chains": "ланцюги"
|
||||
},
|
||||
"loadAvg": "Середнє навантаження",
|
||||
"swap": "Обмін",
|
||||
"architecture": "Архітектура",
|
||||
"refresh": "Оновити",
|
||||
"retry": "Повторити спробу",
|
||||
"customize": "Налаштувати макет",
|
||||
"reset": "Скинути",
|
||||
"tabLive": "Живий",
|
||||
"editModeInstructions": "Перетягуйте картки, щоб змінити порядок, перетягуйте нижній край, щоб змінити розмір, і скористайтеся кнопкою ширини, щоб змінити ширину картки. Додавайте або видаляйте картки нижче.",
|
||||
"managers": {
|
||||
"services": "Послуги",
|
||||
"processInspector": "Інспектор процесів",
|
||||
"logViewer": "Переглядач журналів",
|
||||
"cron": "Cron-завдання",
|
||||
"packages": "Пакети",
|
||||
"ssl": "SSL-сертифікати",
|
||||
"firewall": "Брандмауер",
|
||||
"users": "Користувачі та дозволи",
|
||||
"healthCheck": "Перевірки здоров'я",
|
||||
"diskBreakdown": "Поломка диска",
|
||||
"systemdTimers": "Таймери",
|
||||
"topMemory": "Найкраще за пам'яттю",
|
||||
"noData": "Немає даних",
|
||||
"sudoHint": "Встановіть пароль sudo для цього хоста в редакторі хостів, щоб увімкнути привілейовані дії.",
|
||||
"filter": "Фільтр...",
|
||||
"start": "Початок",
|
||||
"stop": "СТІЙ",
|
||||
"restart": "Перезавантажити",
|
||||
"actionDone": "{{name}} оновлено",
|
||||
"actionFailed": "Дія не вдалася",
|
||||
"signalSent": "Сигнал, що надсилається до ПІД-регулятора {{pid}}",
|
||||
"killHint": "Клацніть: завершити (SIGTERM). Клацніть правою кнопкою миші: примусово завершити (SIGKILL).",
|
||||
"working": "Працюємо...",
|
||||
"update": "Оновлення",
|
||||
"upgradeAll": "Оновити все",
|
||||
"allUpToDate": "Все актуально",
|
||||
"save": "Зберегти",
|
||||
"command": "Команда",
|
||||
"enabled": "Увімкнено",
|
||||
"cronSaved": "Кронтаб оновлено",
|
||||
"clients": "Клієнти",
|
||||
"dryRun": "Сухий пробіг",
|
||||
"renew": "Поновити",
|
||||
"noAcmeClient": "На цьому хості не знайдено клієнта ACME (certbot або acme.sh).",
|
||||
"addInputRule": "Додати правило INPUT",
|
||||
"firewallWarning": "Зміни дійсні лише під час виконання, доки не будуть збережені. Будьте обережні, щоб не заблокувати себе.",
|
||||
"ruleApplied": "Правило застосовано",
|
||||
"invalidPort": "Введіть дійсний порт (1-65535)",
|
||||
"newUsername": "Нове ім'я користувача",
|
||||
"addUser": "Додати",
|
||||
"deleteUser": "Видалити користувача",
|
||||
"noHealthChecks": "Перевірки справності ще не налаштовано.",
|
||||
"follow": "Стежити",
|
||||
"noLogData": "Немає виводу журналу.",
|
||||
"tree": "Дерево",
|
||||
"enableDisable": "Увімкнути/вимкнути під час завантаження",
|
||||
"grantSudo": "Грант sudo",
|
||||
"revokeSudo": "Скасувати sudo",
|
||||
"sslIssueCert": "Випуск сертифіката",
|
||||
"sslExpired": "Термін дії минув",
|
||||
"sslInDays": "у {{days}}днях",
|
||||
"sslNeedDomain": "Введіть принаймні один домен",
|
||||
"sslIssued": "Сертифікат видано",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (автономний)",
|
||||
"sslHttpWebroot": "HTTP (корінь веб-сайту)",
|
||||
"sslDns": "ДНС",
|
||||
"sslDnsProvider": "DNS-провайдер (наприклад, cloudflare)",
|
||||
"sslIssueHint": "Облікові дані постачальника DNS вже мають бути налаштовані на хості.",
|
||||
"sslRevoke": "Скасувати сертифікат",
|
||||
"sslRevoked": "Сертифікат анульовано",
|
||||
"sslRevokeConfirm": "Скасувати та видалити сертифікат \"{{name}}\"? Цю дію неможливо скасувати.",
|
||||
"healthRun": "Бігти",
|
||||
"healthName": "Ім'я",
|
||||
"healthTarget": "Хост / адреса",
|
||||
"healthAddCheck": "Додати чек",
|
||||
"healthSaved": "Перевірки стану збережено",
|
||||
"healthMissingFields": "Кожній перевірці потрібні ім'я та ціль",
|
||||
"logFile": "Файл",
|
||||
"logUnit": "Одиниця",
|
||||
"logCustomPath": "Власний шлях до /var/log (необов'язково)",
|
||||
"logGrep": "Фільтрувальні лінії...",
|
||||
"firewallPersist": "Зберегти правила",
|
||||
"firewallPersisted": "Правила брандмауера збереглися",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Хвостова шкала",
|
||||
"wgNotInstalled": "WireGuard не встановлено на цьому хості",
|
||||
"wgNoInterfaces": "Немає налаштованих інтерфейсів WireGuard",
|
||||
"wgInterfaceUp": "Підніміть",
|
||||
"wgInterfaceDown": "Збити",
|
||||
"wgBringingUp": "Викликаємо {{name}}...",
|
||||
"wgBringingDown": "Зниження {{name}}...",
|
||||
"wgInterfaceUpDone": "{{name}} активовано",
|
||||
"wgInterfaceDownDone": "{{name}} не працює",
|
||||
"wgListenPort": "Порт",
|
||||
"wgPublicKey": "Відкритий ключ",
|
||||
"wgEndpoint": "Кінцева точка",
|
||||
"wgAllowedIPs": "Дозволені IP-адреси",
|
||||
"wgLastHandshake": "Останнє рукостискання",
|
||||
"wgHandshakeNever": "Ніколи",
|
||||
"wgTransfer": "Переказ",
|
||||
"tsNotInstalled": "Tailscale не встановлено на цьому хості",
|
||||
"tsRunning": "Біг",
|
||||
"tsStopped": "Зупинено",
|
||||
"tsEnable": "Підключитися",
|
||||
"tsDisable": "Відключитися",
|
||||
"tsEnabling": "Підключення до Tailscale...",
|
||||
"tsDisabling": "Відключення від Tailscale...",
|
||||
"tsEnabled": "Підключено хвостову шкалу",
|
||||
"tsDisabled": "Хвостова шкала відключена",
|
||||
"tsIPs": "IP-адреси Tailscale",
|
||||
"tsPeers": "Однолітки",
|
||||
"tsOnline": "Онлайн",
|
||||
"tsOffline": "Офлайн",
|
||||
"tsExitNode": "Вихідний вузол",
|
||||
"tsExitNodeActive": "Вихідний вузол активний",
|
||||
"tsHostname": "Ім'я хоста"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Історія показників",
|
||||
"historySuffix": "Історія",
|
||||
"cpuMemoryDisk": "Процесор / Пам'ять / Диск",
|
||||
"network": "Мережа",
|
||||
"download": "Рецепт",
|
||||
"upload": "Техас",
|
||||
"noData": "Для цього періоду часу немає історичних даних.",
|
||||
"custom": "Користувацька",
|
||||
"to": "до",
|
||||
"apply": "Застосувати",
|
||||
"viewHistory": "Переглянути історію"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Статистика Proxmox",
|
||||
"cpuUsage": "Використання процесора",
|
||||
"memoryUsage": "Використання пам'яті",
|
||||
"diskUsage": "Використання диска",
|
||||
"networkInterfaces": "Мережеві інтерфейси",
|
||||
"uptime": "Час безперебійної роботи",
|
||||
"systemInfo": "Інформація про систему",
|
||||
"guestsSummary": "Гості",
|
||||
"storagePools": "Пули зберігання",
|
||||
"clusterHealth": "Кластерне здоров'я",
|
||||
"cpuCores_one": "{{count}} Ядро",
|
||||
"cpuCores_other": "{{count}} Ядра",
|
||||
"used": "Використано",
|
||||
"total": "Всього",
|
||||
"hostname": "Ім'я хоста",
|
||||
"kernel": "Ядро",
|
||||
"pveVersion": "ПВЕ-версія",
|
||||
"name": "Ім'я",
|
||||
"status": "Статус",
|
||||
"type": "Тип",
|
||||
"cpu": "Процесор",
|
||||
"mem": "Мем",
|
||||
"disk": "Диск",
|
||||
"running": "Біг",
|
||||
"stopped": "Зупинено",
|
||||
"guestCounts": "{{running}}/{{total}} бігає",
|
||||
"inactive": "Неактивний",
|
||||
"notClustered": "Автономний вузол (не є частиною кластера)",
|
||||
"quorate": "Кворат",
|
||||
"notQuorate": "Не має кворуму",
|
||||
"nodeOnline": "Онлайн",
|
||||
"nodeOffline": "Офлайн",
|
||||
"noHostSelected": "Хост не вибрано",
|
||||
"pveshNotFound": "pvesh не знайдено - це вузол Proxmox?",
|
||||
"nodeDetectionFailed": "Не вдається визначити дійсну назву вузла Proxmox",
|
||||
"connecting": "Підключення...",
|
||||
"connectionFailed": "Не вдалося підключитися до вузла Proxmox",
|
||||
"refresh": "Оновити",
|
||||
"searchGuests": "Пошук гостей...",
|
||||
"filterAll": "Усі",
|
||||
"filterVm": "ВМ",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "На цьому вузлі не знайдено віртуальних машин або контейнерів LXC.",
|
||||
"noGuestsMatch": "Немає гостей, які відповідають поточним фільтрам."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Метрики хоста"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Метрики хоста",
|
||||
"enableProxmoxStats": "Увімкнути статистику Proxmox",
|
||||
"enableProxmoxStatsDesc": "Показати вкладку статистики Proxmox для цього хоста зі статистикою вузла, гостьового сервера, сховища та кластера, зібраною через SSH.",
|
||||
"proxmoxStatsPollInterval": "Інтервал опитування (секунди)",
|
||||
"proxmoxStatsPollIntervalDesc": "Мінімум 15 секунд. Як часто оновлювати статистику вузла Proxmox.",
|
||||
"proxmoxStatsNodeOverride": "Перевизначення назви вузла",
|
||||
"proxmoxStatsNodeOverrideDesc": "Перевизначити автоматичне визначення імені вузла Proxmox (за замовчуванням визначається через ім'я хоста).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Автоматично визначено за назвою хоста",
|
||||
"metricsCollectionLabel": "Колекція показників",
|
||||
"enableMetricsLabel": "Увімкнути метрики",
|
||||
"enableMetricsDesc": "Збирати показники процесора, оперативної пам'яті, дискового простору та інші показники з цього хоста",
|
||||
"useGlobalMetrics": "Використовувати глобальний інтервал",
|
||||
"useGlobalMetricsDesc": "Перевизначити інтервалом показників на рівні сервера",
|
||||
"metricsIntervalS": "Інтервал показників (и)",
|
||||
"metricsIntervalDesc2": "Секунди між знімками показників",
|
||||
"excludedMountsLabel": "Виключені маунти",
|
||||
"monitoredMountsLabel": "Користувацькі контрольовані шляхи",
|
||||
"monitoredMountsDesc": "Додайте шляхи, які не відображаються як окремі монтування, включаючи шляхи Home Assistant, змонтовані за допомогою прив’язки, такі як /config.",
|
||||
"monitoredMountPathPlaceholder": "Шлях (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Мітка (необов'язково)",
|
||||
"addMonitoredMount": "Додати шлях",
|
||||
"excludedMountsDesc": "Приховати певні точки монтування або типи файлових систем (наприклад, nfs, cifs) від використання диска та сповіщень для цього хоста.",
|
||||
"excludedMountsPlaceholder": "Шлях монтування (/mnt/nas) або тип файлової системи (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Монтування не виключено. Відображаються всі виявлені файлові системи.",
|
||||
"addExcludedMount": "Додати",
|
||||
"visibleWidgets": "Видимі віджети",
|
||||
"widgetsMovedToHostMetrics": "Тепер картки додаються, упорядковуються та змінюються за розміром безпосередньо на вкладці «Метрики хоста». Відкрийте «Метрики хоста» для цього хоста та скористайтеся функцією «Налаштувати», щоб вибрати, які картки відображатимуться.",
|
||||
"quickActionsLabel": "Швидкі дії",
|
||||
"quickActionsToolbar": "Швидкі дії відображаються як кнопки на панелі інструментів «Метрики хоста» для виконання команд одним клацанням миші.",
|
||||
"noQuickActions": "Поки що жодних швидких дій.",
|
||||
"buttonLabel": "Мітка кнопки",
|
||||
"selectSnippetPlaceholder": "Вибрати фрагмент...",
|
||||
"addActionBtn": "Додати дію"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Метрики та сповіщення",
|
||||
"feature_metrics_desc": "Відстежуйте роботу процесора, пам'яті та диска з плином часу та отримуйте сповіщення, коли вони виходять з ладу."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Збереження історії показників",
|
||||
"metricsHistoryRetentionRange": "Від 1 до 90 днів",
|
||||
"days": "дні"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Дані недоступні",
|
||||
"showCurrentValue": "Показати поточне значення",
|
||||
"chartMetric": "Метрика",
|
||||
"metricRange": "Діапазон"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "Bộ nhớ",
|
||||
"disk": "Ổ đĩa",
|
||||
"network": "Mạng",
|
||||
"uptime": "Thời gian hoạt động",
|
||||
"processes": "Tiến trình",
|
||||
"available": "Khả dụng",
|
||||
"free": "Trống",
|
||||
"connecting": "Đang kết nối...",
|
||||
"connectionFailed": "Kết nối máy chủ thất bại",
|
||||
"naCpus": "N/A CPU",
|
||||
"cpuCores_one": "{{count}} Lõi",
|
||||
"cpuCores_other": "{{count}} Lõi",
|
||||
"cpuUsage": "Mức sử dụng CPU",
|
||||
"memoryUsage": "Mức sử dụng bộ nhớ",
|
||||
"diskUsage": "Mức sử dụng ổ đĩa",
|
||||
"selectFilesystem": "Chọn hệ thống tệp",
|
||||
"temperature": "Nhiệt độ",
|
||||
"highestTemperature": "Nhiệt độ cao nhất",
|
||||
"primaryTemperatureSensor": "Cảm biến chính",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "Không phát hiện thấy GPU NVIDIA. Hãy cài đặt trình điều khiển NVIDIA (nó cung cấp lệnh nvidia-smi) để xem các thông số GPU.",
|
||||
"driver": "Tài xế {{version}}",
|
||||
"utilization": "Sử dụng",
|
||||
"memory": "VRAM",
|
||||
"temperature": "Nhiệt độ",
|
||||
"power": "Quyền lực",
|
||||
"fan": "Cái quạt",
|
||||
"processes": "Các quy trình GPU",
|
||||
"noProcesses": "Hiện không có tiến trình nào đang sử dụng GPU."
|
||||
},
|
||||
"failedToFetchHostConfig": "Không tải được cấu hình máy chủ",
|
||||
"serverOffline": "Máy chủ ngoại tuyến",
|
||||
"cannotFetchMetrics": "Không thể tải số liệu từ máy chủ ngoại tuyến",
|
||||
"totpFailed": "Xác minh TOTP thất bại",
|
||||
"noneAuthNotSupported": "Host Metrics không hỗ trợ kiểu xác thực 'none'.",
|
||||
"noHostSelected": "Chưa chọn máy chủ",
|
||||
"load": "Tải",
|
||||
"systemInfo": "Thông tin hệ thống",
|
||||
"hostname": "Tên máy chủ",
|
||||
"operatingSystem": "Hệ điều hành",
|
||||
"kernel": "Nhân",
|
||||
"seconds": "giây",
|
||||
"networkInterfaces": "Giao diện mạng",
|
||||
"noInterfacesFound": "Không tìm thấy giao diện mạng nào",
|
||||
"noProcessesFound": "Không tìm thấy tiến trình nào",
|
||||
"processesTotal": "Tổng",
|
||||
"processesRunning": "đang chạy",
|
||||
"loginStats": "Thống kê đăng nhập SSH",
|
||||
"noRecentLoginData": "Không có dữ liệu đăng nhập gần đây",
|
||||
"executingQuickAction": "Đang thực thi {{name}}...",
|
||||
"quickActionSuccess": "{{name}} đã hoàn tất thành công",
|
||||
"quickActionFailed": "{{name}} thất bại",
|
||||
"quickActionError": "Thực thi {{name}} thất bại",
|
||||
"ports": {
|
||||
"title": "Cổng đang lắng nghe",
|
||||
"protocol": "Giao thức",
|
||||
"port": "Cổng",
|
||||
"address": "Địa chỉ",
|
||||
"process": "Tiến trình",
|
||||
"search": "Tìm kiếm cổng...",
|
||||
"allProtocols": "Tất cả",
|
||||
"noData": "Không có dữ liệu cổng đang lắng nghe"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "Tường lửa",
|
||||
"inactive": "Không hoạt động",
|
||||
"policy": "Chính sách",
|
||||
"rules": "quy tắc",
|
||||
"noRules": "Không có quy tắc nào trong chuỗi này",
|
||||
"noData": "Không có dữ liệu tường lửa",
|
||||
"action": "Hành động",
|
||||
"protocol": "Giao thức",
|
||||
"port": "Cổng",
|
||||
"source": "Nguồn",
|
||||
"anywhere": "Mọi nơi",
|
||||
"chains": "chuỗi"
|
||||
},
|
||||
"loadAvg": "Tải trung bình",
|
||||
"swap": "Swap",
|
||||
"architecture": "Kiến trúc",
|
||||
"refresh": "Làm mới",
|
||||
"retry": "Thử lại",
|
||||
"customize": "Tùy chỉnh bố cục",
|
||||
"reset": "Đặt lại",
|
||||
"tabLive": "Trực tiếp",
|
||||
"editModeInstructions": "Kéo thẻ để sắp xếp lại, kéo cạnh dưới để thay đổi kích thước, và dùng nút chiều rộng để thay đổi độ rộng thẻ. Thêm hoặc xóa thẻ bên dưới.",
|
||||
"managers": {
|
||||
"services": "Dịch vụ",
|
||||
"processInspector": "Trình kiểm tra tiến trình",
|
||||
"logViewer": "Trình xem nhật ký",
|
||||
"cron": "Cron Jobs",
|
||||
"packages": "Gói",
|
||||
"ssl": "Chứng chỉ SSL",
|
||||
"firewall": "Tường lửa",
|
||||
"users": "Người dùng & Quyền",
|
||||
"healthCheck": "Kiểm tra sức khỏe",
|
||||
"diskBreakdown": "Phân tích ổ đĩa",
|
||||
"systemdTimers": "Bộ hẹn giờ",
|
||||
"topMemory": "Top theo bộ nhớ",
|
||||
"noData": "Không có dữ liệu",
|
||||
"sudoHint": "Đặt mật khẩu sudo cho máy chủ này trong trình chỉnh sửa máy chủ để kích hoạt các hành động đặc quyền.",
|
||||
"filter": "Lọc...",
|
||||
"start": "Khởi động",
|
||||
"stop": "Dừng",
|
||||
"restart": "Khởi động lại",
|
||||
"actionDone": "{{name}} được cập nhật",
|
||||
"actionFailed": "Hành động thất bại",
|
||||
"signalSent": "Đã gửi tín hiệu đến PID {{pid}}",
|
||||
"killHint": "Nhấp: kết thúc (SIGTERM). Nhấp chuột phải: buộc kết thúc (SIGKILL).",
|
||||
"working": "Đang làm việc...",
|
||||
"update": "Cập nhật",
|
||||
"upgradeAll": "Nâng cấp tất cả",
|
||||
"allUpToDate": "Tất cả đều mới nhất",
|
||||
"save": "Lưu",
|
||||
"command": "Lệnh",
|
||||
"enabled": "Đã bật",
|
||||
"cronSaved": "Đã cập nhật crontab",
|
||||
"clients": "Máy khách",
|
||||
"dryRun": "Chạy thử",
|
||||
"renew": "Gia hạn",
|
||||
"noAcmeClient": "Không tìm thấy máy khách ACME (certbot hoặc acme.sh) trên máy này.",
|
||||
"addInputRule": "Thêm quy tắc INPUT",
|
||||
"firewallWarning": "Thay đổi chỉ tạm thời, chưa được lưu vĩnh viễn. Cẩn thận kẻo tự khóa mình ra ngoài.",
|
||||
"ruleApplied": "Quy tắc đã được áp dụng",
|
||||
"invalidPort": "Nhập cổng hợp lệ (1-65535)",
|
||||
"newUsername": "Tên người dùng mới",
|
||||
"addUser": "Thêm",
|
||||
"deleteUser": "Xóa người dùng",
|
||||
"noHealthChecks": "Chưa có kiểm tra trạng thái nào được cấu hình.",
|
||||
"follow": "Theo dõi",
|
||||
"noLogData": "Không có dữ liệu nhật ký.",
|
||||
"tree": "Dạng cây",
|
||||
"enableDisable": "Bật / tắt khi khởi động",
|
||||
"grantSudo": "Cấp quyền sudo",
|
||||
"revokeSudo": "Thu hồi quyền sudo",
|
||||
"sslIssueCert": "Cấp chứng chỉ",
|
||||
"sslExpired": "Đã hết hạn",
|
||||
"sslInDays": "trong {{days}}d",
|
||||
"sslNeedDomain": "Nhập ít nhất một tên miền",
|
||||
"sslIssued": "Đã cấp chứng chỉ",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (độc lập)",
|
||||
"sslHttpWebroot": "HTTP (webroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "Nhà cung cấp DNS (ví dụ: cloudflare)",
|
||||
"sslIssueHint": "Thông tin xác thực nhà cung cấp DNS phải được cấu hình trên máy chủ.",
|
||||
"sslRevoke": "Thu hồi chứng chỉ",
|
||||
"sslRevoked": "Chứng chỉ đã bị thu hồi",
|
||||
"sslRevokeConfirm": "Thu hồi và xóa chứng chỉ \"{{name}}\"? Hành động này không thể hoàn tác.",
|
||||
"healthRun": "Chạy",
|
||||
"healthName": "Tên",
|
||||
"healthTarget": "Máy chủ / địa chỉ",
|
||||
"healthAddCheck": "Thêm kiểm tra",
|
||||
"healthSaved": "Đã lưu kiểm tra sức khỏe",
|
||||
"healthMissingFields": "Mỗi kiểm tra cần có tên và mục tiêu",
|
||||
"logFile": "Tệp",
|
||||
"logUnit": "Đơn vị",
|
||||
"logCustomPath": "Đường dẫn tùy chỉnh trong /var/log (tùy chọn)",
|
||||
"logGrep": "Lọc dòng...",
|
||||
"firewallPersist": "Lưu quy tắc",
|
||||
"firewallPersisted": "Đã lưu quy tắc tường lửa",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Tailscale",
|
||||
"wgNotInstalled": "WireGuard chưa được cài đặt trên máy chủ này",
|
||||
"wgNoInterfaces": "Chưa cấu hình giao diện WireGuard nào",
|
||||
"wgInterfaceUp": "Khởi động",
|
||||
"wgInterfaceDown": "Dừng",
|
||||
"wgBringingUp": "Đang khởi động {{name}}...",
|
||||
"wgBringingDown": "Đang dừng {{name}}...",
|
||||
"wgInterfaceUpDone": "{{name}} đã hoạt động",
|
||||
"wgInterfaceDownDone": "{{name}} đã dừng",
|
||||
"wgListenPort": "Cổng",
|
||||
"wgPublicKey": "Khóa công khai",
|
||||
"wgEndpoint": "Điểm cuối",
|
||||
"wgAllowedIPs": "IP được phép",
|
||||
"wgLastHandshake": "Lần bắt tay cuối",
|
||||
"wgHandshakeNever": "Chưa bao giờ",
|
||||
"wgTransfer": "Truyền tải",
|
||||
"tsNotInstalled": "Tailscale chưa được cài đặt trên máy chủ này",
|
||||
"tsRunning": "Đang chạy",
|
||||
"tsStopped": "Đã dừng",
|
||||
"tsEnable": "Kết nối",
|
||||
"tsDisable": "Ngắt kết nối",
|
||||
"tsEnabling": "Đang kết nối đến Tailscale...",
|
||||
"tsDisabling": "Đang ngắt kết nối khỏi Tailscale...",
|
||||
"tsEnabled": "Đã kết nối Tailscale",
|
||||
"tsDisabled": "Đã ngắt kết nối Tailscale",
|
||||
"tsIPs": "IP Tailscale",
|
||||
"tsPeers": "Các máy ngang hàng",
|
||||
"tsOnline": "Trực tuyến",
|
||||
"tsOffline": "Ngoại tuyến",
|
||||
"tsExitNode": "Nút thoát",
|
||||
"tsExitNodeActive": "Nút thoát đang hoạt động",
|
||||
"tsHostname": "Tên máy chủ"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Lịch sử chỉ số",
|
||||
"historySuffix": "Lịch sử",
|
||||
"cpuMemoryDisk": "CPU / Bộ nhớ / Ổ đĩa",
|
||||
"network": "Mạng",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "Không có dữ liệu lịch sử cho khoảng thời gian này.",
|
||||
"custom": "Tùy chỉnh",
|
||||
"to": "đến",
|
||||
"apply": "Áp dụng",
|
||||
"viewHistory": "Xem lịch sử"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Thống kê Proxmox",
|
||||
"cpuUsage": "Mức sử dụng CPU",
|
||||
"memoryUsage": "Mức sử dụng bộ nhớ",
|
||||
"diskUsage": "Mức sử dụng ổ đĩa",
|
||||
"networkInterfaces": "Giao diện mạng",
|
||||
"uptime": "Thời gian hoạt động",
|
||||
"systemInfo": "Thông tin hệ thống",
|
||||
"guestsSummary": "Khách",
|
||||
"storagePools": "Các bể chứa",
|
||||
"clusterHealth": "Cluster Health",
|
||||
"cpuCores_one": "{{count}} Lõi",
|
||||
"cpuCores_other": "{{count}} Lõi",
|
||||
"used": "Đã sử dụng",
|
||||
"total": "Tổng cộng",
|
||||
"hostname": "Tên máy chủ",
|
||||
"kernel": "Hạt nhân",
|
||||
"pveVersion": "Phiên bản PVE",
|
||||
"name": "Tên",
|
||||
"status": "Trạng thái",
|
||||
"type": "Kiểu",
|
||||
"cpu": "CPU",
|
||||
"mem": "Mem",
|
||||
"disk": "Đĩa",
|
||||
"running": "Đang chạy",
|
||||
"stopped": "Đã dừng lại",
|
||||
"guestCounts": "{{running}}/{{total}} đang chạy",
|
||||
"inactive": "Không hoạt động",
|
||||
"notClustered": "Nút độc lập (không thuộc cụm máy chủ)",
|
||||
"quorate": "Quorate",
|
||||
"notQuorate": "Không đủ số lượng",
|
||||
"nodeOnline": "Trực tuyến",
|
||||
"nodeOffline": "Ngoại tuyến",
|
||||
"noHostSelected": "Chưa chọn máy chủ nào",
|
||||
"pveshNotFound": "Không tìm thấy pvesh - đây có phải là một node Proxmox không?",
|
||||
"nodeDetectionFailed": "Không thể xác định tên nút Proxmox hợp lệ.",
|
||||
"connecting": "Đang kết nối...",
|
||||
"connectionFailed": "Không thể kết nối đến nút Proxmox.",
|
||||
"refresh": "Làm cho khỏe lại",
|
||||
"searchGuests": "Tìm kiếm khách...",
|
||||
"filterAll": "Tất cả",
|
||||
"filterVm": "Máy ảo",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "Không tìm thấy máy ảo hoặc vùng chứa LXC nào trên nút này.",
|
||||
"noGuestsMatch": "Hiện không có khách nào phù hợp với bộ lọc hiện tại."
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "Chỉ số máy chủ"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "Số liệu máy chủ",
|
||||
"enableProxmoxStats": "Bật thống kê Proxmox",
|
||||
"enableProxmoxStatsDesc": "Hiển thị tab Thống kê Proxmox cho máy chủ này với các số liệu thống kê trực tiếp về nút, máy ảo, bộ nhớ và cụm được thu thập qua SSH.",
|
||||
"proxmoxStatsPollInterval": "Khoảng thời gian giữa các lần thăm dò (giây)",
|
||||
"proxmoxStatsPollIntervalDesc": "Tối thiểu 15 giây. Tần suất làm mới số liệu thống kê của node Proxmox.",
|
||||
"proxmoxStatsNodeOverride": "Ghi đè tên nút",
|
||||
"proxmoxStatsNodeOverrideDesc": "Ghi đè tính năng tự động phát hiện tên nút Proxmox (mặc định được phát hiện thông qua tên máy chủ).",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "Tự động nhận diện từ tên máy chủ",
|
||||
"metricsCollectionLabel": "Thu thập số liệu",
|
||||
"enableMetricsLabel": "Bật thu thập số liệu",
|
||||
"enableMetricsDesc": "Thu thập CPU, RAM, đĩa và các số liệu khác từ máy này",
|
||||
"useGlobalMetrics": "Dùng khoảng thời gian toàn cục",
|
||||
"useGlobalMetricsDesc": "Ghi đè bằng khoảng thời gian thu thập số liệu toàn máy chủ",
|
||||
"metricsIntervalS": "Khoảng thu thập số liệu (giây)",
|
||||
"metricsIntervalDesc2": "Số giây giữa các lần chụp số liệu",
|
||||
"excludedMountsLabel": "Giá đỡ bị loại trừ",
|
||||
"monitoredMountsLabel": "Đường dẫn được giám sát tùy chỉnh",
|
||||
"monitoredMountsDesc": "Thêm các đường dẫn không được hiển thị dưới dạng các điểm gắn kết riêng biệt, bao gồm cả các đường dẫn Home Assistant được gắn kết bằng bind, chẳng hạn như /config.",
|
||||
"monitoredMountPathPlaceholder": "Đường dẫn (/config, /mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "Nhãn (tùy chọn)",
|
||||
"addMonitoredMount": "Thêm đường dẫn",
|
||||
"excludedMountsDesc": "Ẩn các điểm gắn kết hoặc loại hệ thống tập tin cụ thể (ví dụ: nfs, cifs) khỏi thông tin sử dụng ổ đĩa và cảnh báo cho máy chủ này.",
|
||||
"excludedMountsPlaceholder": "Đường dẫn gắn kết (/mnt/nas) hoặc loại hệ thống tệp (nfs, cifs)",
|
||||
"excludedMountsEmpty": "Không có điểm gắn kết nào bị loại trừ. Tất cả các hệ thống tập tin được phát hiện đều được hiển thị.",
|
||||
"addExcludedMount": "Thêm vào",
|
||||
"visibleWidgets": "Widget hiển thị",
|
||||
"widgetsMovedToHostMetrics": "Các thẻ hiện được thêm, sắp xếp và thay đổi kích thước trực tiếp trong tab Số liệu máy. Mở Số liệu máy cho máy này và dùng Tùy chỉnh để chọn thẻ hiển thị.",
|
||||
"quickActionsLabel": "Hành động nhanh",
|
||||
"quickActionsToolbar": "Hành động nhanh xuất hiện dưới dạng nút trên thanh công cụ Chỉ số máy để thực thi lệnh một lần nhấp.",
|
||||
"noQuickActions": "Chưa có hành động nhanh nào.",
|
||||
"buttonLabel": "Nhãn nút",
|
||||
"selectSnippetPlaceholder": "Chọn đoạn mã...",
|
||||
"addActionBtn": "Thêm hành động"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "Số liệu và cảnh báo",
|
||||
"feature_metrics_desc": "Theo dõi hiệu năng CPU, bộ nhớ và ổ đĩa theo thời gian, và nhận cảnh báo khi chúng gặp sự cố."
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "Thời gian lưu trữ lịch sử số liệu",
|
||||
"metricsHistoryRetentionRange": "1 đến 90 ngày",
|
||||
"days": "ngày"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "Không có dữ liệu",
|
||||
"showCurrentValue": "Hiển thị giá trị hiện tại",
|
||||
"chartMetric": "Chỉ số",
|
||||
"metricRange": "Phạm vi"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "内存",
|
||||
"disk": "磁盘",
|
||||
"network": "网络",
|
||||
"uptime": "运行时间",
|
||||
"processes": "进程",
|
||||
"available": "可用",
|
||||
"free": "空闲",
|
||||
"connecting": "连接中...",
|
||||
"connectionFailed": "连接服务器失败",
|
||||
"naCpus": "N/A CPU",
|
||||
"cpuCores_one": "{{count}} 核心",
|
||||
"cpuCores_other": "{{count}} 核心",
|
||||
"cpuUsage": "CPU 使用率",
|
||||
"memoryUsage": "内存使用率",
|
||||
"diskUsage": "磁盘使用率",
|
||||
"selectFilesystem": "选择文件系统",
|
||||
"temperature": "温度",
|
||||
"highestTemperature": "最高温度",
|
||||
"primaryTemperatureSensor": "主传感器",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "未检测到NVIDIA GPU。请安装NVIDIA驱动程序(它提供nvidia-smi)以查看GPU指标。",
|
||||
"driver": "司机 {{version}}",
|
||||
"utilization": "利用率",
|
||||
"memory": "显存",
|
||||
"temperature": "温度",
|
||||
"power": "力量",
|
||||
"fan": "扇子",
|
||||
"processes": "GPU 进程",
|
||||
"noProcesses": "没有进程正在使用 GPU"
|
||||
},
|
||||
"failedToFetchHostConfig": "获取主机配置失败",
|
||||
"serverOffline": "服务器离线",
|
||||
"cannotFetchMetrics": "无法从离线服务器获取指标",
|
||||
"totpFailed": "TOTP 验证失败",
|
||||
"noneAuthNotSupported": "主机指标不支持 'none' 认证类型。",
|
||||
"noHostSelected": "未选择主机",
|
||||
"load": "负载",
|
||||
"systemInfo": "系统信息",
|
||||
"hostname": "主机名",
|
||||
"operatingSystem": "操作系统",
|
||||
"kernel": "内核",
|
||||
"seconds": "秒",
|
||||
"networkInterfaces": "网络接口",
|
||||
"noInterfacesFound": "未找到网络接口",
|
||||
"noProcessesFound": "未找到进程",
|
||||
"processesTotal": "总计",
|
||||
"processesRunning": "运行中",
|
||||
"loginStats": "SSH 登录统计",
|
||||
"noRecentLoginData": "无最近登录数据",
|
||||
"executingQuickAction": "正在执行 {{name}}...",
|
||||
"quickActionSuccess": "{{name}} 执行成功",
|
||||
"quickActionFailed": "{{name}} 执行失败",
|
||||
"quickActionError": "执行 {{name}} 失败",
|
||||
"ports": {
|
||||
"title": "监听端口",
|
||||
"protocol": "协议",
|
||||
"port": "端口",
|
||||
"address": "地址",
|
||||
"process": "进程",
|
||||
"search": "搜索端口...",
|
||||
"allProtocols": "全部",
|
||||
"noData": "无监听端口数据"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "防火墙",
|
||||
"inactive": "未激活",
|
||||
"policy": "策略",
|
||||
"rules": "规则",
|
||||
"noRules": "该链中无规则",
|
||||
"noData": "无可用防火墙数据",
|
||||
"action": "操作",
|
||||
"protocol": "协议",
|
||||
"port": "端口",
|
||||
"source": "来源",
|
||||
"anywhere": "任意",
|
||||
"chains": "链"
|
||||
},
|
||||
"loadAvg": "平均负载",
|
||||
"swap": "交换空间",
|
||||
"architecture": "架构",
|
||||
"refresh": "刷新",
|
||||
"retry": "重试",
|
||||
"customize": "自定义布局",
|
||||
"reset": "重置",
|
||||
"tabLive": "实时",
|
||||
"editModeInstructions": "拖动卡片可重新排序,拖动底部边缘可调整大小,使用宽度按钮可更改卡片的跨度。在下方添加或移除卡片。",
|
||||
"managers": {
|
||||
"services": "服务",
|
||||
"processInspector": "进程查看器",
|
||||
"logViewer": "日志查看器",
|
||||
"cron": "定时任务",
|
||||
"packages": "软件包",
|
||||
"ssl": "SSL证书",
|
||||
"firewall": "防火墙",
|
||||
"users": "用户与权限",
|
||||
"healthCheck": "健康检查",
|
||||
"diskBreakdown": "磁盘详情",
|
||||
"systemdTimers": "计时器",
|
||||
"topMemory": "按内存占用排行",
|
||||
"noData": "无数据",
|
||||
"sudoHint": "在主机编辑器中为此主机设置 sudo 密码以启用特权操作。",
|
||||
"filter": "筛选...",
|
||||
"start": "启动",
|
||||
"stop": "停止",
|
||||
"restart": "重启",
|
||||
"actionDone": "{{name}} 已更新",
|
||||
"actionFailed": "操作失败",
|
||||
"signalSent": "信号已发送至 PID {{pid}}",
|
||||
"killHint": "单击:终止 (SIGTERM)。右键单击:强制终止 (SIGKILL)。",
|
||||
"working": "处理中...",
|
||||
"update": "更新",
|
||||
"upgradeAll": "全部升级",
|
||||
"allUpToDate": "所有内容均为最新",
|
||||
"save": "保存",
|
||||
"command": "命令",
|
||||
"enabled": "已启用",
|
||||
"cronSaved": "定时任务已更新",
|
||||
"clients": "客户端",
|
||||
"dryRun": "试运行",
|
||||
"renew": "续期",
|
||||
"noAcmeClient": "此主机上未找到 ACME 客户端 (certbot 或 acme.sh)。",
|
||||
"addInputRule": "添加 INPUT 规则",
|
||||
"firewallWarning": "更改仅在运行时有效,需持久化保存。小心不要将自己锁定在外。",
|
||||
"ruleApplied": "规则已应用",
|
||||
"invalidPort": "请输入有效端口 (1-65535)",
|
||||
"newUsername": "新用户名",
|
||||
"addUser": "添加",
|
||||
"deleteUser": "删除用户",
|
||||
"noHealthChecks": "尚未配置健康检查。",
|
||||
"follow": "跟踪",
|
||||
"noLogData": "无日志输出。",
|
||||
"tree": "树形",
|
||||
"enableDisable": "启用/禁用开机自启",
|
||||
"grantSudo": "授予 sudo",
|
||||
"revokeSudo": "撤销 sudo",
|
||||
"sslIssueCert": "签发证书",
|
||||
"sslExpired": "已过期",
|
||||
"sslInDays": "{{days}} 天后",
|
||||
"sslNeedDomain": "至少输入一个域名",
|
||||
"sslIssued": "证书已签发",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (独立模式)",
|
||||
"sslHttpWebroot": "HTTP (webroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "DNS 提供商 (如 cloudflare)",
|
||||
"sslIssueHint": "DNS 提供商凭据必须已在主机上配置。",
|
||||
"sslRevoke": "吊销证书",
|
||||
"sslRevoked": "证书已吊销",
|
||||
"sslRevokeConfirm": "吊销并删除证书 \"{{name}}\"?此操作无法撤销。",
|
||||
"healthRun": "运行",
|
||||
"healthName": "名称",
|
||||
"healthTarget": "主机 / 地址",
|
||||
"healthAddCheck": "添加检查",
|
||||
"healthSaved": "健康检查已保存",
|
||||
"healthMissingFields": "每个检查都需要名称和目标",
|
||||
"logFile": "文件",
|
||||
"logUnit": "单元",
|
||||
"logCustomPath": "自定义路径 (位于 /var/log 下,可选)",
|
||||
"logGrep": "过滤行...",
|
||||
"firewallPersist": "持久化规则",
|
||||
"firewallPersisted": "防火墙规则已持久化",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Tailscale",
|
||||
"wgNotInstalled": "此主机未安装 WireGuard",
|
||||
"wgNoInterfaces": "未配置 WireGuard 接口",
|
||||
"wgInterfaceUp": "启用",
|
||||
"wgInterfaceDown": "停用",
|
||||
"wgBringingUp": "正在启用 {{name}}...",
|
||||
"wgBringingDown": "正在停用 {{name}}...",
|
||||
"wgInterfaceUpDone": "{{name}} 已启用",
|
||||
"wgInterfaceDownDone": "{{name}} 已停用",
|
||||
"wgListenPort": "端口",
|
||||
"wgPublicKey": "公钥",
|
||||
"wgEndpoint": "对端",
|
||||
"wgAllowedIPs": "允许的 IP",
|
||||
"wgLastHandshake": "上次握手",
|
||||
"wgHandshakeNever": "从未",
|
||||
"wgTransfer": "传输",
|
||||
"tsNotInstalled": "此主机未安装 Tailscale",
|
||||
"tsRunning": "运行中",
|
||||
"tsStopped": "已停止",
|
||||
"tsEnable": "连接",
|
||||
"tsDisable": "断开连接",
|
||||
"tsEnabling": "正在连接到 Tailscale...",
|
||||
"tsDisabling": "正在断开 Tailscale 连接...",
|
||||
"tsEnabled": "Tailscale 已连接",
|
||||
"tsDisabled": "Tailscale 已断开连接",
|
||||
"tsIPs": "Tailscale IP",
|
||||
"tsPeers": "节点",
|
||||
"tsOnline": "在线",
|
||||
"tsOffline": "离线",
|
||||
"tsExitNode": "出口节点",
|
||||
"tsExitNodeActive": "出口节点活跃",
|
||||
"tsHostname": "主机名"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "指标历史",
|
||||
"historySuffix": "历史",
|
||||
"cpuMemoryDisk": "CPU / 内存 / 磁盘",
|
||||
"network": "网络",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "此时间范围内没有可用的历史数据。",
|
||||
"custom": "自定义",
|
||||
"to": "至",
|
||||
"apply": "应用",
|
||||
"viewHistory": "查看历史"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Proxmox 统计数据",
|
||||
"cpuUsage": "CPU 使用率",
|
||||
"memoryUsage": "内存使用情况",
|
||||
"diskUsage": "磁盘使用情况",
|
||||
"networkInterfaces": "网络接口",
|
||||
"uptime": "正常运行时间",
|
||||
"systemInfo": "系统信息",
|
||||
"guestsSummary": "客户主机",
|
||||
"storagePools": "存储池",
|
||||
"clusterHealth": "集群健康",
|
||||
"cpuCores_one": "{{count}} 核",
|
||||
"cpuCores_other": "{{count}} 核",
|
||||
"used": "已用",
|
||||
"total": "总计",
|
||||
"hostname": "主机名",
|
||||
"kernel": "内核",
|
||||
"pveVersion": "PVE 版本",
|
||||
"name": "名称",
|
||||
"status": "状态",
|
||||
"type": "类型",
|
||||
"cpu": "CPU",
|
||||
"mem": "内存",
|
||||
"disk": "磁盘",
|
||||
"running": "运行中",
|
||||
"stopped": "停止",
|
||||
"guestCounts": "{{running}}/{{total}} 运行中",
|
||||
"inactive": "未激活",
|
||||
"notClustered": "独立节点(非集群的一部分)",
|
||||
"quorate": "达到法定节点数量",
|
||||
"notQuorate": "未达到法定节点数量",
|
||||
"nodeOnline": "在线",
|
||||
"nodeOffline": "离线",
|
||||
"noHostSelected": "未选择主机",
|
||||
"pveshNotFound": "未找到 pvesh - 这是 Proxmox 节点吗?",
|
||||
"nodeDetectionFailed": "无法确定有效的 Proxmox 节点名称",
|
||||
"connecting": "正在连接...",
|
||||
"connectionFailed": "连接到 Proxmox 节点失败",
|
||||
"refresh": "刷新",
|
||||
"searchGuests": "搜索客户主机...",
|
||||
"filterAll": "全部",
|
||||
"filterVm": "虚拟机",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "此节点上未找到虚拟机或 LXC 容器。",
|
||||
"noGuestsMatch": "没有符合当前筛选条件的客户主机。"
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "主机指标"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "主机指标",
|
||||
"enableProxmoxStats": "启用 Proxmox 统计信息",
|
||||
"enableProxmoxStatsDesc": "显示此主机的 Proxmox 统计信息标签页,其中包含通过 SSH 收集的实时节点、客户机、存储和集群统计信息。",
|
||||
"proxmoxStatsPollInterval": "轮询间隔(秒)",
|
||||
"proxmoxStatsPollIntervalDesc": "最短间隔 15 秒。Proxmox 节点统计信息刷新频率。",
|
||||
"proxmoxStatsNodeOverride": "覆盖节点名称",
|
||||
"proxmoxStatsNodeOverrideDesc": "覆盖自动检测的 Proxmox 节点名称(默认情况下通过主机名检测)。",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "从主机名自动检测",
|
||||
"metricsCollectionLabel": "指标收集",
|
||||
"enableMetricsLabel": "启用指标",
|
||||
"enableMetricsDesc": "从此主机收集 CPU、RAM、磁盘和其他指标",
|
||||
"useGlobalMetrics": "使用全局间隔",
|
||||
"useGlobalMetricsDesc": "使用服务器范围的指标间隔覆盖",
|
||||
"metricsIntervalS": "指标间隔(秒)",
|
||||
"metricsIntervalDesc2": "指标快照之间的秒数",
|
||||
"excludedMountsLabel": "排除的挂载点",
|
||||
"monitoredMountsLabel": "自定义监控路径",
|
||||
"monitoredMountsDesc": "添加未作为单独挂载点公开的路径,包括绑定挂载的 Home Assistant 路径,例如 /config。",
|
||||
"monitoredMountPathPlaceholder": "路径(/config,/mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "标签(可选)",
|
||||
"addMonitoredMount": "添加路径",
|
||||
"excludedMountsDesc": "隐藏此主机磁盘使用情况和警报中的特定挂载点或文件系统类型(例如 nfs、cifs)。",
|
||||
"excludedMountsPlaceholder": "挂载路径(/mnt/nas)或文件系统类型(nfs、cifs)",
|
||||
"excludedMountsEmpty": "未排除任何挂载点。显示所有检测到的文件系统。",
|
||||
"addExcludedMount": "添加",
|
||||
"visibleWidgets": "可见小部件",
|
||||
"widgetsMovedToHostMetrics": "卡片现在可在“主机指标”选项卡中直接添加、排列和调整大小。打开此主机的“主机指标”,使用“自定义”选择要显示的卡片。",
|
||||
"quickActionsLabel": "快速操作",
|
||||
"quickActionsToolbar": "快速操作以按钮形式显示在主机指标工具栏中,以便一键执行命令。",
|
||||
"noQuickActions": "尚无快速操作。",
|
||||
"buttonLabel": "按钮标签",
|
||||
"selectSnippetPlaceholder": "选择代码片段...",
|
||||
"addActionBtn": "添加操作"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "指标与告警",
|
||||
"feature_metrics_desc": "跟踪 CPU、内存和磁盘的运行情况,并在它们出现故障时发出告警。"
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "指标历史保留",
|
||||
"metricsHistoryRetentionRange": "1 到 90 天",
|
||||
"days": "天"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "暂无数据",
|
||||
"showCurrentValue": "显示当前值",
|
||||
"chartMetric": "指标",
|
||||
"metricRange": "范围"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
{
|
||||
"hostMetrics": {
|
||||
"cpu": "CPU",
|
||||
"memory": "記憶體",
|
||||
"disk": "磁碟",
|
||||
"network": "網路",
|
||||
"uptime": "運作時間",
|
||||
"processes": "程序",
|
||||
"available": "可用",
|
||||
"free": "可用",
|
||||
"connecting": "連線中...",
|
||||
"connectionFailed": "無法連線至伺服器",
|
||||
"naCpus": "N/A CPU",
|
||||
"cpuCores_one": "{{count}} 核心",
|
||||
"cpuCores_other": "{{count}} 核心",
|
||||
"cpuUsage": "CPU 使用率",
|
||||
"memoryUsage": "記憶體使用率",
|
||||
"diskUsage": "磁碟使用率",
|
||||
"selectFilesystem": "選擇檔案系統",
|
||||
"temperature": "溫度",
|
||||
"highestTemperature": "最高溫度",
|
||||
"primaryTemperatureSensor": "主感應器",
|
||||
"gpu": {
|
||||
"title": "GPU",
|
||||
"noDevice": "未偵測到NVIDIA GPU。請安裝NVIDIA驅動程式(它提供nvidia-smi)以查看GPU指標。",
|
||||
"driver": "司機 {{version}}",
|
||||
"utilization": "使用率",
|
||||
"memory": "顯存",
|
||||
"temperature": "溫度",
|
||||
"power": "力量",
|
||||
"fan": "扇子",
|
||||
"processes": "GPU 行程",
|
||||
"noProcesses": "沒有進程正在使用 GPU"
|
||||
},
|
||||
"failedToFetchHostConfig": "無法取得主機設定",
|
||||
"serverOffline": "伺服器離線",
|
||||
"cannotFetchMetrics": "無法從離線伺服器取得指標",
|
||||
"totpFailed": "TOTP 驗證失敗",
|
||||
"noneAuthNotSupported": "主機指標不支援 'none' 驗證類型。",
|
||||
"noHostSelected": "未選擇主機",
|
||||
"load": "負載",
|
||||
"systemInfo": "系統資訊",
|
||||
"hostname": "主機名稱",
|
||||
"operatingSystem": "作業系統",
|
||||
"kernel": "核心",
|
||||
"seconds": "秒",
|
||||
"networkInterfaces": "網路介面",
|
||||
"noInterfacesFound": "找不到網路介面",
|
||||
"noProcessesFound": "找不到程序",
|
||||
"processesTotal": "總計",
|
||||
"processesRunning": "執行中",
|
||||
"loginStats": "SSH 登入統計資訊",
|
||||
"noRecentLoginData": "沒有最近的登入資料",
|
||||
"executingQuickAction": "正在執行 {{name}}...",
|
||||
"quickActionSuccess": "{{name}} 已成功完成",
|
||||
"quickActionFailed": "{{name}} 失敗",
|
||||
"quickActionError": "無法執行 {{name}}",
|
||||
"ports": {
|
||||
"title": "監聽中的連接埠",
|
||||
"protocol": "通訊協定",
|
||||
"port": "連接埠",
|
||||
"address": "位址",
|
||||
"process": "程序",
|
||||
"search": "搜尋連接埠...",
|
||||
"allProtocols": "全部",
|
||||
"noData": "無監聽連接埠資料"
|
||||
},
|
||||
"firewall": {
|
||||
"title": "防火牆",
|
||||
"inactive": "未啟用",
|
||||
"policy": "原則",
|
||||
"rules": "規則",
|
||||
"noRules": "此鏈中無規則",
|
||||
"noData": "無防火牆資料可用",
|
||||
"action": "動作",
|
||||
"protocol": "通訊協定",
|
||||
"port": "連接埠",
|
||||
"source": "來源",
|
||||
"anywhere": "任意位置",
|
||||
"chains": "鏈"
|
||||
},
|
||||
"loadAvg": "平均負載",
|
||||
"swap": "交換空間",
|
||||
"architecture": "架構",
|
||||
"refresh": "重新整理",
|
||||
"retry": "重試",
|
||||
"customize": "自訂版面配置",
|
||||
"reset": "重設",
|
||||
"tabLive": "即時",
|
||||
"editModeInstructions": "拖曳卡片以重新排列,拖曳底部邊緣以調整大小,並使用寬度按鈕變更卡片跨度。於下方新增或移除卡片。",
|
||||
"managers": {
|
||||
"services": "服務",
|
||||
"processInspector": "程序檢查器",
|
||||
"logViewer": "日誌檢視器",
|
||||
"cron": "Cron 工作",
|
||||
"packages": "套件",
|
||||
"ssl": "SSL 憑證",
|
||||
"firewall": "防火牆",
|
||||
"users": "使用者與權限",
|
||||
"healthCheck": "健康檢查",
|
||||
"diskBreakdown": "磁碟明細",
|
||||
"systemdTimers": "計時器",
|
||||
"topMemory": "記憶體用量排行",
|
||||
"noData": "無資料",
|
||||
"sudoHint": "在主機編輯器中為此主機設定 sudo 密碼,以啟用特權操作。",
|
||||
"filter": "篩選...",
|
||||
"start": "啟動",
|
||||
"stop": "停止",
|
||||
"restart": "重新啟動",
|
||||
"actionDone": "{{name}} 已更新",
|
||||
"actionFailed": "操作失敗",
|
||||
"signalSent": "訊號已傳送至 PID {{pid}}",
|
||||
"killHint": "按一下:終止 (SIGTERM)。按右鍵:強制終止 (SIGKILL)。",
|
||||
"working": "處理中...",
|
||||
"update": "更新",
|
||||
"upgradeAll": "全部升級",
|
||||
"allUpToDate": "所有項目皆為最新",
|
||||
"save": "儲存",
|
||||
"command": "指令",
|
||||
"enabled": "已啟用",
|
||||
"cronSaved": "Crontab 已更新",
|
||||
"clients": "客戶端",
|
||||
"dryRun": "試執行",
|
||||
"renew": "續期",
|
||||
"noAcmeClient": "此主機上找不到 ACME 用戶端 (certbot 或 acme.sh)。",
|
||||
"addInputRule": "新增 INPUT 規則",
|
||||
"firewallWarning": "變更僅在執行階段有效,儲存後才會永久生效。小心切勿將自己鎖定在外。",
|
||||
"ruleApplied": "規則已套用",
|
||||
"invalidPort": "輸入有效的連接埠 (1-65535)",
|
||||
"newUsername": "新使用者名稱",
|
||||
"addUser": "新增",
|
||||
"deleteUser": "刪除使用者",
|
||||
"noHealthChecks": "尚未設定健康檢查。",
|
||||
"follow": "追蹤",
|
||||
"noLogData": "無日誌輸出。",
|
||||
"tree": "樹狀",
|
||||
"enableDisable": "開機時啟用 / 停用",
|
||||
"grantSudo": "授予 sudo 權限",
|
||||
"revokeSudo": "撤銷 sudo 權限",
|
||||
"sslIssueCert": "頒發憑證",
|
||||
"sslExpired": "已過期",
|
||||
"sslInDays": "{{days}} 天內",
|
||||
"sslNeedDomain": "至少輸入一個網域",
|
||||
"sslIssued": "憑證已頒發",
|
||||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||||
"sslHttpStandalone": "HTTP (獨立模式)",
|
||||
"sslHttpWebroot": "HTTP (webroot)",
|
||||
"sslDns": "DNS",
|
||||
"sslDnsProvider": "DNS 提供者 (例如 cloudflare)",
|
||||
"sslIssueHint": "DNS 提供者的憑證必須已在主機上設定。",
|
||||
"sslRevoke": "撤銷憑證",
|
||||
"sslRevoked": "憑證已撤銷",
|
||||
"sslRevokeConfirm": "撤銷並移除憑證「{{name}}」?此操作無法復原。",
|
||||
"healthRun": "執行",
|
||||
"healthName": "名稱",
|
||||
"healthTarget": "主機 / 位址",
|
||||
"healthAddCheck": "新增檢查",
|
||||
"healthSaved": "健康檢查已儲存",
|
||||
"healthMissingFields": "每個檢查都需要名稱和目標",
|
||||
"logFile": "檔案",
|
||||
"logUnit": "單元",
|
||||
"logCustomPath": "/var/log 下的自訂路徑 (選用)",
|
||||
"logGrep": "篩選行...",
|
||||
"firewallPersist": "永久儲存規則",
|
||||
"firewallPersisted": "防火牆規則已永久儲存",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Tailscale",
|
||||
"wgNotInstalled": "此主機上未安裝 WireGuard",
|
||||
"wgNoInterfaces": "未設定任何 WireGuard 介面",
|
||||
"wgInterfaceUp": "啟用",
|
||||
"wgInterfaceDown": "停用",
|
||||
"wgBringingUp": "正在啟用 {{name}}...",
|
||||
"wgBringingDown": "正在停用 {{name}}...",
|
||||
"wgInterfaceUpDone": "{{name}} 已啟用",
|
||||
"wgInterfaceDownDone": "{{name}} 已停用",
|
||||
"wgListenPort": "連接埠",
|
||||
"wgPublicKey": "公開金鑰",
|
||||
"wgEndpoint": "端點",
|
||||
"wgAllowedIPs": "允許的 IP",
|
||||
"wgLastHandshake": "上次交握",
|
||||
"wgHandshakeNever": "從未",
|
||||
"wgTransfer": "傳輸",
|
||||
"tsNotInstalled": "此主機上未安裝 Tailscale",
|
||||
"tsRunning": "執行中",
|
||||
"tsStopped": "已停止",
|
||||
"tsEnable": "連線",
|
||||
"tsDisable": "中斷連線",
|
||||
"tsEnabling": "正在連線至 Tailscale...",
|
||||
"tsDisabling": "正在中斷 Tailscale 連線...",
|
||||
"tsEnabled": "Tailscale 已連線",
|
||||
"tsDisabled": "Tailscale 已中斷連線",
|
||||
"tsIPs": "Tailscale IP",
|
||||
"tsPeers": "對等節點",
|
||||
"tsOnline": "線上",
|
||||
"tsOffline": "離線",
|
||||
"tsExitNode": "出口節點",
|
||||
"tsExitNodeActive": "出口節點作用中",
|
||||
"tsHostname": "主機名稱"
|
||||
}
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "指標歷史記錄",
|
||||
"historySuffix": "歷史記錄",
|
||||
"cpuMemoryDisk": "CPU / 記憶體 / 磁碟",
|
||||
"network": "網路",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "此時間範圍內沒有可用的歷史資料。",
|
||||
"custom": "自訂",
|
||||
"to": "至",
|
||||
"apply": "套用",
|
||||
"viewHistory": "檢視歷史記錄"
|
||||
},
|
||||
"proxmoxStats": {
|
||||
"tabTitle": "Proxmox 統計數據",
|
||||
"cpuUsage": "CPU 使用率",
|
||||
"memoryUsage": "記憶體使用情況",
|
||||
"diskUsage": "磁碟使用情況",
|
||||
"networkInterfaces": "網路介面",
|
||||
"uptime": "正常運作時間",
|
||||
"systemInfo": "系統資訊",
|
||||
"guestsSummary": "賓客",
|
||||
"storagePools": "儲水池",
|
||||
"clusterHealth": "集群健康",
|
||||
"cpuCores_one": "{{count}} 核心",
|
||||
"cpuCores_other": "{{count}} 核心",
|
||||
"used": "用過的",
|
||||
"total": "全部的",
|
||||
"hostname": "主機名稱",
|
||||
"kernel": "核心",
|
||||
"pveVersion": "PVE 版本",
|
||||
"name": "姓名",
|
||||
"status": "地位",
|
||||
"type": "類型",
|
||||
"cpu": "中央處理器",
|
||||
"mem": "記憶",
|
||||
"disk": "磁碟",
|
||||
"running": "跑步",
|
||||
"stopped": "停止",
|
||||
"guestCounts": "{{running}}/{{total}} 運作中",
|
||||
"inactive": "非活躍狀態",
|
||||
"notClustered": "獨立節點(非叢集的一部分)",
|
||||
"quorate": "法定人數",
|
||||
"notQuorate": "未達法定人數",
|
||||
"nodeOnline": "在線的",
|
||||
"nodeOffline": "離線",
|
||||
"noHostSelected": "未選擇主機",
|
||||
"pveshNotFound": "找不到 pvesh - 這是 Proxmox 節點嗎?",
|
||||
"nodeDetectionFailed": "無法確定有效的 Proxmox 節點名稱",
|
||||
"connecting": "正在連接...",
|
||||
"connectionFailed": "連線到 Proxmox 節點失敗",
|
||||
"refresh": "重新整理",
|
||||
"searchGuests": "搜尋賓客...",
|
||||
"filterAll": "全部",
|
||||
"filterVm": "虛擬機",
|
||||
"filterLxc": "LXC",
|
||||
"noGuests": "此節點上未發現虛擬機器或 LXC 容器。",
|
||||
"noGuestsMatch": "沒有符合目前篩選條件的客人。"
|
||||
},
|
||||
"nav": {
|
||||
"hostMetrics": "主機指標"
|
||||
},
|
||||
"hosts": {
|
||||
"tabHostMetrics": "主機指標",
|
||||
"enableProxmoxStats": "啟用 Proxmox 統計訊息",
|
||||
"enableProxmoxStatsDesc": "顯示此主機的 Proxmox 統計資料標籤,其中包含透過 SSH 收集的即時節點、客戶機、儲存和叢集統計資訊。",
|
||||
"proxmoxStatsPollInterval": "輪詢間隔(秒)",
|
||||
"proxmoxStatsPollIntervalDesc": "最短間隔 15 秒。 Proxmox 節點統計資訊刷新頻率。",
|
||||
"proxmoxStatsNodeOverride": "節點名稱覆蓋",
|
||||
"proxmoxStatsNodeOverrideDesc": "覆蓋 Proxmox 節點名稱的自動偵測(預設透過主機名稱偵測)。",
|
||||
"proxmoxStatsNodeOverridePlaceholder": "從主機名稱自動偵測",
|
||||
"metricsCollectionLabel": "指標收集",
|
||||
"enableMetricsLabel": "啟用指標",
|
||||
"enableMetricsDesc": "從此主機收集 CPU、記憶體、磁碟和其他指標",
|
||||
"useGlobalMetrics": "使用全域間隔",
|
||||
"useGlobalMetricsDesc": "以伺服器範圍的指標間隔覆寫",
|
||||
"metricsIntervalS": "指標間隔(秒)",
|
||||
"metricsIntervalDesc2": "每次指標快照之間的秒數",
|
||||
"excludedMountsLabel": "排除的安裝",
|
||||
"monitoredMountsLabel": "自訂監控路徑",
|
||||
"monitoredMountsDesc": "新增未以單獨掛載點公開的路徑,包括綁定掛載的 Home Assistant 路徑,例如 /config。",
|
||||
"monitoredMountPathPlaceholder": "路徑(/config,/mnt/data)",
|
||||
"monitoredMountLabelPlaceholder": "標籤(可選)",
|
||||
"addMonitoredMount": "新增路徑",
|
||||
"excludedMountsDesc": "隱藏此主機磁碟使用情況和警報中的特定掛載點或檔案系統類型(例如 nfs、cifs)。",
|
||||
"excludedMountsPlaceholder": "掛載路徑(/mnt/nas)或檔案系統類型(nfs、cifs)",
|
||||
"excludedMountsEmpty": "未排除任何掛載點。顯示所有偵測到的檔案系統。",
|
||||
"addExcludedMount": "添加",
|
||||
"visibleWidgets": "可見的小工具",
|
||||
"widgetsMovedToHostMetrics": "現在卡片可直接在主機指標分頁中新增、排列和調整大小。開啟此主機的主機指標,然後使用自訂功能選擇要顯示的卡片。",
|
||||
"quickActionsLabel": "快速動作",
|
||||
"quickActionsToolbar": "快速動作會以按鈕形式顯示在主機計量工具列上,可一鍵執行指令。",
|
||||
"noQuickActions": "尚無快速動作。",
|
||||
"buttonLabel": "按鈕標籤",
|
||||
"selectSnippetPlaceholder": "選取程式碼片段...",
|
||||
"addActionBtn": "新增動作"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_metrics": "指標和警報",
|
||||
"feature_metrics_desc": "追蹤 CPU、記憶體和磁碟的運作情況,並在它們出現故障時發出警報。"
|
||||
},
|
||||
"admin": {
|
||||
"metricsHistoryRetention": "指標歷史保留",
|
||||
"metricsHistoryRetentionRange": "1 至 90 天",
|
||||
"days": "天"
|
||||
},
|
||||
"homepage": {
|
||||
"noData": "無可用資料",
|
||||
"showCurrentValue": "顯示目前值",
|
||||
"chartMetric": "指標",
|
||||
"metricRange": "範圍"
|
||||
}
|
||||
}
|
||||
@@ -33,8 +33,23 @@
|
||||
"titleKey": "nav.hostMetrics",
|
||||
"icon": "Activity",
|
||||
"openFrom": ["host-context-menu", "palette"]
|
||||
},
|
||||
{
|
||||
"id": "proxmox-stats",
|
||||
"titleKey": "nav.proxmoxStats",
|
||||
"icon": "HardDrive",
|
||||
"openFrom": ["host-context-menu", "palette"]
|
||||
}
|
||||
]
|
||||
],
|
||||
"settings": {
|
||||
"admin": [
|
||||
{
|
||||
"key": "historyRetention",
|
||||
"type": "custom",
|
||||
"component": "retention"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"locales": "locales",
|
||||
"platforms": ["linux", "win32", "darwin"]
|
||||
|
||||
@@ -0,0 +1,402 @@
|
||||
import { useState } from "react";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import {
|
||||
Activity,
|
||||
HardDrive,
|
||||
LayoutDashboard,
|
||||
Plus,
|
||||
Server,
|
||||
Trash2,
|
||||
Zap,
|
||||
} from "lucide-react";
|
||||
|
||||
import { Button } from "@/components/button";
|
||||
import { Input } from "@/components/input";
|
||||
import { SectionCard, SettingRow, FakeSwitch } from "@/components/section-card";
|
||||
import type { HostEditorForm } from "@/sidebar/HostEditorData";
|
||||
import { Select2 } from "@/components/select2";
|
||||
|
||||
type SetHostField = <K extends keyof HostEditorForm>(
|
||||
key: K,
|
||||
value: HostEditorForm[K],
|
||||
) => void;
|
||||
|
||||
export function HostStatsTab({
|
||||
form,
|
||||
setField,
|
||||
snippets,
|
||||
}: {
|
||||
form: HostEditorForm;
|
||||
setField: SetHostField;
|
||||
snippets: { id: number; name: string }[];
|
||||
}) {
|
||||
const { t } = useTranslation();
|
||||
const [newMount, setNewMount] = useState("");
|
||||
const [newMonitoredPath, setNewMonitoredPath] = useState("");
|
||||
const [newMonitoredLabel, setNewMonitoredLabel] = useState("");
|
||||
const excludedMounts = form.statsConfig.excludedMounts ?? [];
|
||||
const monitoredMounts = form.statsConfig.monitoredMounts ?? [];
|
||||
|
||||
const addExcludedMount = () => {
|
||||
const value = newMount.trim();
|
||||
if (!value || excludedMounts.includes(value)) {
|
||||
setNewMount("");
|
||||
return;
|
||||
}
|
||||
setField("statsConfig", {
|
||||
...form.statsConfig,
|
||||
excludedMounts: [...excludedMounts, value],
|
||||
});
|
||||
setNewMount("");
|
||||
};
|
||||
|
||||
const addMonitoredMount = () => {
|
||||
const path = newMonitoredPath.trim();
|
||||
if (!path || monitoredMounts.some((entry) => entry.path === path)) return;
|
||||
setField("statsConfig", {
|
||||
...form.statsConfig,
|
||||
monitoredMounts: [
|
||||
...monitoredMounts,
|
||||
{ path, label: newMonitoredLabel.trim() || undefined },
|
||||
],
|
||||
});
|
||||
setNewMonitoredPath("");
|
||||
setNewMonitoredLabel("");
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<SectionCard
|
||||
title={t("hosts.statusChecksLabel")}
|
||||
icon={<Activity className="size-3.5" />}
|
||||
>
|
||||
<div className="flex flex-col gap-0 py-1">
|
||||
<SettingRow
|
||||
label={t("hosts.enableStatusChecks")}
|
||||
description={t("hosts.enableStatusChecksDesc")}
|
||||
>
|
||||
<FakeSwitch
|
||||
checked={form.statsConfig.statusCheckEnabled}
|
||||
onChange={(v) =>
|
||||
setField("statsConfig", {
|
||||
...form.statsConfig,
|
||||
statusCheckEnabled: v,
|
||||
})
|
||||
}
|
||||
/>
|
||||
</SettingRow>
|
||||
{form.statsConfig.statusCheckEnabled && (
|
||||
<SettingRow
|
||||
label={t("hosts.useGlobalInterval")}
|
||||
description={t("hosts.useGlobalIntervalDesc")}
|
||||
>
|
||||
<FakeSwitch
|
||||
checked={form.statsConfig.useGlobalStatusInterval}
|
||||
onChange={(v) =>
|
||||
setField("statsConfig", {
|
||||
...form.statsConfig,
|
||||
useGlobalStatusInterval: v,
|
||||
})
|
||||
}
|
||||
/>
|
||||
</SettingRow>
|
||||
)}
|
||||
{form.statsConfig.statusCheckEnabled &&
|
||||
!form.statsConfig.useGlobalStatusInterval && (
|
||||
<SettingRow
|
||||
label={t("hosts.checkIntervalS")}
|
||||
description={t("hosts.checkIntervalDesc")}
|
||||
>
|
||||
<Input
|
||||
type="number"
|
||||
value={form.statsConfig.statusCheckInterval}
|
||||
onChange={(e) =>
|
||||
setField("statsConfig", {
|
||||
...form.statsConfig,
|
||||
statusCheckInterval: Number(e.target.value),
|
||||
})
|
||||
}
|
||||
className="w-20 h-7 text-xs text-right [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none"
|
||||
/>
|
||||
</SettingRow>
|
||||
)}
|
||||
</div>
|
||||
</SectionCard>
|
||||
<SectionCard
|
||||
title={t("hosts.metricsCollectionLabel")}
|
||||
icon={<Server className="size-3.5" />}
|
||||
>
|
||||
<div className="flex flex-col gap-0 py-1">
|
||||
<SettingRow
|
||||
label={t("hosts.enableMetricsLabel")}
|
||||
description={t("hosts.enableMetricsDesc")}
|
||||
>
|
||||
<FakeSwitch
|
||||
checked={form.statsConfig.metricsEnabled}
|
||||
onChange={(v) =>
|
||||
setField("statsConfig", {
|
||||
...form.statsConfig,
|
||||
metricsEnabled: v,
|
||||
})
|
||||
}
|
||||
/>
|
||||
</SettingRow>
|
||||
{form.statsConfig.metricsEnabled && (
|
||||
<SettingRow
|
||||
label={t("hosts.useGlobalMetrics")}
|
||||
description={t("hosts.useGlobalMetricsDesc")}
|
||||
>
|
||||
<FakeSwitch
|
||||
checked={form.statsConfig.useGlobalMetricsInterval}
|
||||
onChange={(v) =>
|
||||
setField("statsConfig", {
|
||||
...form.statsConfig,
|
||||
useGlobalMetricsInterval: v,
|
||||
})
|
||||
}
|
||||
/>
|
||||
</SettingRow>
|
||||
)}
|
||||
{form.statsConfig.metricsEnabled &&
|
||||
!form.statsConfig.useGlobalMetricsInterval && (
|
||||
<SettingRow
|
||||
label={t("hosts.metricsIntervalS")}
|
||||
description={t("hosts.metricsIntervalDesc2")}
|
||||
>
|
||||
<Input
|
||||
type="number"
|
||||
value={form.statsConfig.metricsInterval}
|
||||
onChange={(e) =>
|
||||
setField("statsConfig", {
|
||||
...form.statsConfig,
|
||||
metricsInterval: Number(e.target.value),
|
||||
})
|
||||
}
|
||||
className="w-20 h-7 text-xs text-right [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none"
|
||||
/>
|
||||
</SettingRow>
|
||||
)}
|
||||
</div>
|
||||
</SectionCard>
|
||||
<SectionCard
|
||||
title={t("hosts.monitoredMountsLabel")}
|
||||
icon={<HardDrive className="size-3.5" />}
|
||||
>
|
||||
<div className="flex flex-col gap-3 py-3">
|
||||
<p className="text-xs text-muted-foreground">
|
||||
{t("hosts.monitoredMountsDesc")}
|
||||
</p>
|
||||
<div className="grid grid-cols-[1fr_0.7fr_auto] gap-2">
|
||||
<Input
|
||||
className="h-7 text-xs"
|
||||
placeholder={t("hosts.monitoredMountPathPlaceholder")}
|
||||
value={newMonitoredPath}
|
||||
onChange={(e) => setNewMonitoredPath(e.target.value)}
|
||||
onKeyDown={(e) => {
|
||||
if (e.key === "Enter") {
|
||||
e.preventDefault();
|
||||
addMonitoredMount();
|
||||
}
|
||||
}}
|
||||
/>
|
||||
<Input
|
||||
className="h-7 text-xs"
|
||||
placeholder={t("hosts.monitoredMountLabelPlaceholder")}
|
||||
value={newMonitoredLabel}
|
||||
onChange={(e) => setNewMonitoredLabel(e.target.value)}
|
||||
onKeyDown={(e) => {
|
||||
if (e.key === "Enter") {
|
||||
e.preventDefault();
|
||||
addMonitoredMount();
|
||||
}
|
||||
}}
|
||||
/>
|
||||
<Button
|
||||
variant="outline"
|
||||
size="sm"
|
||||
className="h-7 px-2 text-[10px]"
|
||||
onClick={addMonitoredMount}
|
||||
>
|
||||
<Plus className="mr-1 size-3" /> {t("hosts.addMonitoredMount")}
|
||||
</Button>
|
||||
</div>
|
||||
{monitoredMounts.map((entry) => (
|
||||
<div
|
||||
key={entry.path}
|
||||
className="flex items-center gap-2 border border-border bg-muted/20 p-2 group"
|
||||
>
|
||||
<span className="min-w-0 flex-1 truncate font-mono text-xs">
|
||||
{entry.path}
|
||||
</span>
|
||||
{entry.label && (
|
||||
<span className="truncate text-xs text-muted-foreground">
|
||||
{entry.label}
|
||||
</span>
|
||||
)}
|
||||
<button
|
||||
className="text-muted-foreground opacity-0 transition-opacity hover:text-destructive group-hover:opacity-100"
|
||||
onClick={() =>
|
||||
setField("statsConfig", {
|
||||
...form.statsConfig,
|
||||
monitoredMounts: monitoredMounts.filter(
|
||||
(mount) => mount.path !== entry.path,
|
||||
),
|
||||
})
|
||||
}
|
||||
>
|
||||
<Trash2 className="size-3.5" />
|
||||
</button>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</SectionCard>
|
||||
<SectionCard
|
||||
title={t("hosts.excludedMountsLabel")}
|
||||
icon={<HardDrive className="size-3.5" />}
|
||||
>
|
||||
<div className="flex flex-col gap-3 py-3">
|
||||
<p className="text-xs text-muted-foreground">
|
||||
{t("hosts.excludedMountsDesc")}
|
||||
</p>
|
||||
<div className="flex items-center gap-2">
|
||||
<Input
|
||||
className="h-7 text-xs flex-1"
|
||||
placeholder={t("hosts.excludedMountsPlaceholder")}
|
||||
value={newMount}
|
||||
onChange={(e) => setNewMount(e.target.value)}
|
||||
onKeyDown={(e) => {
|
||||
if (e.key === "Enter") {
|
||||
e.preventDefault();
|
||||
addExcludedMount();
|
||||
}
|
||||
}}
|
||||
/>
|
||||
<Button
|
||||
variant="outline"
|
||||
size="sm"
|
||||
className="h-7 text-[10px] px-2 border-accent-brand/40 text-accent-brand"
|
||||
onClick={addExcludedMount}
|
||||
>
|
||||
<Plus className="size-3 mr-1" /> {t("hosts.addExcludedMount")}
|
||||
</Button>
|
||||
</div>
|
||||
{excludedMounts.length === 0 && (
|
||||
<div className="flex flex-col items-center justify-center py-4 text-muted-foreground/40 gap-1.5">
|
||||
<HardDrive className="size-6" />
|
||||
<span className="text-xs">{t("hosts.excludedMountsEmpty")}</span>
|
||||
</div>
|
||||
)}
|
||||
{excludedMounts.map((mount, i) => (
|
||||
<div
|
||||
key={`${mount}-${i}`}
|
||||
className="flex items-center gap-2 p-2 bg-muted/20 border border-border group"
|
||||
>
|
||||
<span className="text-xs flex-1 font-mono truncate">{mount}</span>
|
||||
<button
|
||||
className="text-muted-foreground hover:text-destructive opacity-0 group-hover:opacity-100 transition-opacity"
|
||||
onClick={() =>
|
||||
setField("statsConfig", {
|
||||
...form.statsConfig,
|
||||
excludedMounts: excludedMounts.filter(
|
||||
(_, idx) => idx !== i,
|
||||
),
|
||||
})
|
||||
}
|
||||
>
|
||||
<Trash2 className="size-3.5" />
|
||||
</button>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</SectionCard>
|
||||
<SectionCard
|
||||
title={t("hosts.visibleWidgets")}
|
||||
icon={<LayoutDashboard className="size-3.5" />}
|
||||
>
|
||||
<div className="flex flex-col gap-2 py-3">
|
||||
<p className="text-xs text-muted-foreground">
|
||||
{t("hosts.widgetsMovedToHostMetrics")}
|
||||
</p>
|
||||
</div>
|
||||
</SectionCard>
|
||||
<SectionCard
|
||||
title={t("hosts.quickActionsLabel")}
|
||||
icon={<Zap className="size-3.5" />}
|
||||
action={
|
||||
<Button
|
||||
variant="outline"
|
||||
size="sm"
|
||||
className="h-6 text-[10px] px-2 border-accent-brand/40 text-accent-brand"
|
||||
onClick={() =>
|
||||
setField("quickActions", [
|
||||
...form.quickActions,
|
||||
{ name: "", snippetId: "" },
|
||||
])
|
||||
}
|
||||
>
|
||||
<Plus className="size-3 mr-1" /> {t("hosts.addActionBtn")}
|
||||
</Button>
|
||||
}
|
||||
>
|
||||
<div className="flex flex-col gap-3 py-3">
|
||||
<p className="text-xs text-muted-foreground">
|
||||
{t("hosts.quickActionsToolbar")}
|
||||
</p>
|
||||
{form.quickActions.length === 0 && (
|
||||
<div className="flex flex-col items-center justify-center py-4 text-muted-foreground/40 gap-1.5">
|
||||
<Zap className="size-6" />
|
||||
<span className="text-xs">{t("hosts.noQuickActions")}</span>
|
||||
</div>
|
||||
)}
|
||||
{form.quickActions.map((a, i) => (
|
||||
<div
|
||||
key={i}
|
||||
className="flex items-center gap-2 p-2 bg-muted/20 border border-border group"
|
||||
>
|
||||
<Input
|
||||
className="h-7 text-xs flex-1"
|
||||
placeholder={t("hosts.buttonLabel")}
|
||||
value={a.name}
|
||||
onChange={(e) => {
|
||||
const updated = [...form.quickActions];
|
||||
updated[i] = { ...updated[i], name: e.target.value };
|
||||
setField("quickActions", updated);
|
||||
}}
|
||||
/>
|
||||
<Select2
|
||||
className="h-7 text-xs flex-1 border border-border bg-background px-2 outline-none focus:ring-1 focus:ring-ring"
|
||||
value={a.snippetId}
|
||||
onChange={(e) => {
|
||||
const updated = [...form.quickActions];
|
||||
updated[i] = {
|
||||
...updated[i],
|
||||
snippetId: e.target.value,
|
||||
};
|
||||
setField("quickActions", updated);
|
||||
}}
|
||||
>
|
||||
<option value="">{t("hosts.selectSnippetPlaceholder")}</option>
|
||||
{snippets.map((s) => (
|
||||
<option key={s.id} value={String(s.id)}>
|
||||
{s.name}
|
||||
</option>
|
||||
))}
|
||||
</Select2>
|
||||
<button
|
||||
className="text-muted-foreground hover:text-destructive opacity-0 group-hover:opacity-100 transition-opacity"
|
||||
onClick={() =>
|
||||
setField(
|
||||
"quickActions",
|
||||
form.quickActions.filter((_, idx) => idx !== i),
|
||||
)
|
||||
}
|
||||
>
|
||||
<Trash2 className="size-3.5" />
|
||||
</button>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</SectionCard>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
import React from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { HostMetricsTab } from "./HostMetricsTab.tsx";
|
||||
import { FullScreenAppWrapper } from "@/features/FullScreenAppWrapper.tsx";
|
||||
import { ConnectionScreen } from "@/components/connection/ConnectionScreen.tsx";
|
||||
|
||||
@@ -23,7 +23,7 @@ import { hasSnippetInputs } from "@/lib/snippet-variables.ts";
|
||||
import type { Snippet } from "@/types/ui-types.ts";
|
||||
import { TOTPDialog } from "@/ssh/dialogs/TOTPDialog.tsx";
|
||||
import { useTabsSafe } from "@/shell/TabContext.tsx";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { toast } from "sonner";
|
||||
import {
|
||||
type StatsConfig,
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
import { useEffect, useState } from "react";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import type {
|
||||
MetricsChartConfig,
|
||||
MetricsChartMetric,
|
||||
MetricsChartRange,
|
||||
WidgetEditFormProps,
|
||||
} from "@/types/homepage-types";
|
||||
import { getSSHHosts } from "@/api/ssh-host-management-api";
|
||||
import { Select2 } from "@/components/select2";
|
||||
|
||||
const METRICS: { id: MetricsChartMetric; label: string }[] = [
|
||||
{ id: "cpu", label: "CPU" },
|
||||
{ id: "memory", label: "Memory" },
|
||||
{ id: "disk", label: "Disk" },
|
||||
{ id: "net_rx", label: "RX MB/s" },
|
||||
{ id: "net_tx", label: "TX MB/s" },
|
||||
];
|
||||
|
||||
const RANGES: { id: MetricsChartRange; label: string }[] = [
|
||||
{ id: "15m", label: "15m" },
|
||||
{ id: "1h", label: "1h" },
|
||||
{ id: "6h", label: "6h" },
|
||||
{ id: "24h", label: "24h" },
|
||||
];
|
||||
|
||||
export function MetricsChartEditForm({
|
||||
config,
|
||||
onChange,
|
||||
}: WidgetEditFormProps<MetricsChartConfig>) {
|
||||
const { t } = useTranslation();
|
||||
const [hosts, setHosts] = useState<{ id: number; name: string }[]>([]);
|
||||
|
||||
useEffect(() => {
|
||||
getSSHHosts()
|
||||
.then((h) => setHosts(h.map((x) => ({ id: x.id, name: x.name }))))
|
||||
.catch(() => {});
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div className="flex flex-col gap-3">
|
||||
<div className="flex flex-col gap-1">
|
||||
<label className="text-xs font-medium text-muted-foreground">
|
||||
{t("homepage.host")}
|
||||
</label>
|
||||
<Select2
|
||||
value={config.hostId}
|
||||
onChange={(e) =>
|
||||
onChange({ ...config, hostId: Number(e.target.value) })
|
||||
}
|
||||
className="h-8 text-xs bg-background border border-border px-2 text-foreground"
|
||||
>
|
||||
<option value={0}>{t("homepage.selectHost")}</option>
|
||||
{hosts.map((h) => (
|
||||
<option key={h.id} value={h.id}>
|
||||
{h.name}
|
||||
</option>
|
||||
))}
|
||||
</Select2>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col gap-1">
|
||||
<label className="text-xs font-medium text-muted-foreground">
|
||||
{t("homepage.chartMetric")}
|
||||
</label>
|
||||
<div className="flex flex-wrap gap-1">
|
||||
{METRICS.map((m) => (
|
||||
<button
|
||||
key={m.id}
|
||||
type="button"
|
||||
onClick={() => onChange({ ...config, metric: m.id })}
|
||||
className={`px-2 py-0.5 text-[10px] font-medium border transition-colors ${config.metric === m.id ? "bg-accent-brand border-accent-brand text-white" : "border-border text-muted-foreground hover:border-accent-brand/50"}`}
|
||||
>
|
||||
{m.label}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col gap-1">
|
||||
<label className="text-xs font-medium text-muted-foreground">
|
||||
{t("homepage.metricRange")}
|
||||
</label>
|
||||
<div className="flex gap-1">
|
||||
{RANGES.map((r) => (
|
||||
<button
|
||||
key={r.id}
|
||||
type="button"
|
||||
onClick={() => onChange({ ...config, range: r.id })}
|
||||
className={`px-2 py-0.5 text-[10px] font-medium border transition-colors ${config.range === r.id ? "bg-accent-brand border-accent-brand text-white" : "border-border text-muted-foreground hover:border-accent-brand/50"}`}
|
||||
>
|
||||
{r.label}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<label className="flex items-center gap-2 text-xs text-muted-foreground cursor-pointer">
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={config.showCurrentValue}
|
||||
onChange={(e) =>
|
||||
onChange({ ...config, showCurrentValue: e.target.checked })
|
||||
}
|
||||
className="accent-accent-brand"
|
||||
/>
|
||||
{t("homepage.showCurrentValue")}
|
||||
</label>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,254 @@
|
||||
import { useEffect, useState, useRef } from "react";
|
||||
import { TrendingUp } from "lucide-react";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { MetricsChartEditForm } from "./MetricsChartEditForm";
|
||||
import type {
|
||||
MetricsChartConfig,
|
||||
MetricsChartMetric,
|
||||
WidgetComponentProps,
|
||||
WidgetTypeDefinition,
|
||||
} from "@/types/homepage-types";
|
||||
import { GRID_SIZE } from "@/types/homepage-types";
|
||||
import { getMetricsHistory, type MetricsHistoryRow } from "./host-metrics-api";
|
||||
import { getSSHHosts } from "@/api/ssh-host-management-api";
|
||||
import { WidgetTitle } from "@/features/homepage/widgets/WidgetTitle";
|
||||
import { runVisibleInterval } from "@/features/homepage/use-visible-interval";
|
||||
|
||||
function getAccentColor(): string {
|
||||
return (
|
||||
getComputedStyle(document.documentElement)
|
||||
.getPropertyValue("--accent-brand")
|
||||
.trim() || "#f59145"
|
||||
);
|
||||
}
|
||||
|
||||
function getMetricValue(
|
||||
row: MetricsHistoryRow,
|
||||
metric: MetricsChartMetric,
|
||||
): number | null {
|
||||
switch (metric) {
|
||||
case "cpu":
|
||||
return row.cpu_percent;
|
||||
case "memory":
|
||||
return row.mem_percent;
|
||||
case "disk":
|
||||
return row.disk_percent;
|
||||
case "net_rx":
|
||||
return row.net_rx_bytes != null ? row.net_rx_bytes / 1_000_000 : null;
|
||||
case "net_tx":
|
||||
return row.net_tx_bytes != null ? row.net_tx_bytes / 1_000_000 : null;
|
||||
}
|
||||
}
|
||||
|
||||
function getMetricLabel(
|
||||
metric: MetricsChartMetric,
|
||||
t: (k: string) => string,
|
||||
): string {
|
||||
switch (metric) {
|
||||
case "cpu":
|
||||
return t("homepage.metricCpu");
|
||||
case "memory":
|
||||
return t("homepage.metricMemory");
|
||||
case "disk":
|
||||
return t("homepage.metricDisk");
|
||||
case "net_rx":
|
||||
return "RX MB/s";
|
||||
case "net_tx":
|
||||
return "TX MB/s";
|
||||
}
|
||||
}
|
||||
|
||||
function getMetricUnit(metric: MetricsChartMetric): string {
|
||||
if (metric === "net_rx" || metric === "net_tx") return " MB/s";
|
||||
return "%";
|
||||
}
|
||||
|
||||
interface SparklineProps {
|
||||
values: number[];
|
||||
width: number;
|
||||
height: number;
|
||||
color: string;
|
||||
}
|
||||
|
||||
function Sparkline({ values, width, height, color }: SparklineProps) {
|
||||
if (values.length < 2) return null;
|
||||
const max = Math.max(...values, 1);
|
||||
const min = 0;
|
||||
const range = max - min;
|
||||
const pts = values.map((v, i) => {
|
||||
const x = (i / (values.length - 1)) * width;
|
||||
const y = height - ((v - min) / range) * height;
|
||||
return `${x.toFixed(1)},${y.toFixed(1)}`;
|
||||
});
|
||||
const polyPts = [`0,${height}`, ...pts, `${width},${height}`].join(" ");
|
||||
|
||||
return (
|
||||
<svg
|
||||
width={width}
|
||||
height={height}
|
||||
viewBox={`0 0 ${width} ${height}`}
|
||||
preserveAspectRatio="none"
|
||||
className="overflow-visible"
|
||||
>
|
||||
<defs>
|
||||
<linearGradient
|
||||
id={`mg-${color.replace("#", "")}`}
|
||||
x1="0"
|
||||
y1="0"
|
||||
x2="0"
|
||||
y2="1"
|
||||
>
|
||||
<stop offset="0%" stopColor={color} stopOpacity="0.3" />
|
||||
<stop offset="100%" stopColor={color} stopOpacity="0.02" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<polygon points={polyPts} fill={`url(#mg-${color.replace("#", "")})`} />
|
||||
<polyline
|
||||
points={pts.join(" ")}
|
||||
fill="none"
|
||||
stroke={color}
|
||||
strokeWidth="1.5"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
|
||||
function MetricsChartWidget({
|
||||
widget,
|
||||
config,
|
||||
}: WidgetComponentProps<MetricsChartConfig>) {
|
||||
const { t } = useTranslation();
|
||||
const { hostId, metric, range, showCurrentValue } = config;
|
||||
const [hostName, setHostName] = useState<string | null>(null);
|
||||
const [values, setValues] = useState<number[]>([]);
|
||||
const [loading, setLoading] = useState(true);
|
||||
const containerRef = useRef<HTMLDivElement>(null);
|
||||
const [dims, setDims] = useState({ w: 0, h: 0 });
|
||||
|
||||
useEffect(() => {
|
||||
if (!hostId) return;
|
||||
getSSHHosts()
|
||||
.then((hosts) => {
|
||||
const h = hosts.find((x) => x.id === hostId);
|
||||
if (h) setHostName(h.name);
|
||||
})
|
||||
.catch(() => {});
|
||||
}, [hostId]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!containerRef.current) return;
|
||||
const obs = new ResizeObserver((entries) => {
|
||||
const e = entries[0]?.contentRect;
|
||||
if (e) setDims({ w: Math.floor(e.width), h: Math.floor(e.height) });
|
||||
});
|
||||
obs.observe(containerRef.current);
|
||||
return () => obs.disconnect();
|
||||
}, []);
|
||||
|
||||
const fetchData = () => {
|
||||
if (!hostId) return;
|
||||
getMetricsHistory(hostId, { range })
|
||||
.then((res) => {
|
||||
const vals = res.rows
|
||||
.map((r) => getMetricValue(r, metric))
|
||||
.filter((v): v is number => v != null);
|
||||
setValues(vals);
|
||||
setLoading(false);
|
||||
})
|
||||
.catch(() => setLoading(false));
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
fetchData();
|
||||
return runVisibleInterval(() => {
|
||||
void fetchData();
|
||||
}, 60_000);
|
||||
}, [hostId, metric, range]);
|
||||
|
||||
const accent = getAccentColor();
|
||||
const current = values.length > 0 ? values[values.length - 1] : null;
|
||||
const unit = getMetricUnit(metric);
|
||||
const label = getMetricLabel(metric, t);
|
||||
|
||||
if (!hostId) {
|
||||
return (
|
||||
<div className="flex items-center justify-center w-full h-full text-xs text-muted-foreground">
|
||||
{t("homepage.noHostSelected")}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="flex flex-col w-full h-full overflow-hidden">
|
||||
<WidgetTitle title={widget.title} icon={<TrendingUp size={11} />} />
|
||||
<div className="flex flex-col flex-1 p-2 gap-1 overflow-hidden">
|
||||
<div className="flex items-center justify-between gap-1 shrink-0">
|
||||
<div className="flex flex-col min-w-0">
|
||||
<span className="text-[10px] font-semibold text-foreground truncate">
|
||||
{hostName ?? `Host #${hostId}`}
|
||||
</span>
|
||||
<span className="text-[9px] text-muted-foreground">
|
||||
{label} · {range}
|
||||
</span>
|
||||
</div>
|
||||
{showCurrentValue && current != null && (
|
||||
<span
|
||||
className="text-sm font-bold tabular-nums shrink-0"
|
||||
style={{ color: accent }}
|
||||
>
|
||||
{metric === "net_rx" || metric === "net_tx"
|
||||
? current.toFixed(2)
|
||||
: Math.round(current)}
|
||||
{unit}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div ref={containerRef} className="flex-1 min-h-0 relative">
|
||||
{loading ? (
|
||||
<div className="absolute inset-0 flex items-center justify-center text-[10px] text-muted-foreground/60">
|
||||
{t("homepage.loading")}
|
||||
</div>
|
||||
) : values.length < 2 ? (
|
||||
<div className="absolute inset-0 flex items-center justify-center text-[10px] text-muted-foreground/60">
|
||||
{t("homepage.noData")}
|
||||
</div>
|
||||
) : (
|
||||
dims.w > 0 &&
|
||||
dims.h > 0 && (
|
||||
<Sparkline
|
||||
values={values}
|
||||
width={dims.w}
|
||||
height={dims.h}
|
||||
color={accent}
|
||||
/>
|
||||
)
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
/** Registered by the plugin while it runs. */
|
||||
export const metricsChartWidget: WidgetTypeDefinition<MetricsChartConfig> = {
|
||||
id: "metrics_chart",
|
||||
name: "Metrics Chart",
|
||||
description: "Historical CPU, memory, disk, or network chart for a host",
|
||||
category: "monitoring",
|
||||
icon: <TrendingUp size={14} />,
|
||||
defaultConfig: {
|
||||
hostId: 0,
|
||||
metric: "cpu",
|
||||
range: "1h",
|
||||
showCurrentValue: true,
|
||||
},
|
||||
defaultSize: { w: GRID_SIZE * 12, h: GRID_SIZE * 6 },
|
||||
minSize: { w: GRID_SIZE * 6, h: GRID_SIZE * 4 },
|
||||
component: MetricsChartWidget,
|
||||
editFormComponent: MetricsChartEditForm,
|
||||
};
|
||||
|
||||
export { MetricsChartWidget };
|
||||
@@ -0,0 +1,73 @@
|
||||
import { useEffect, useState } from "react";
|
||||
import { useToast, useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { Button, Input } from "@termix/plugin-sdk/ui";
|
||||
import {
|
||||
getMetricsHistoryRetention,
|
||||
saveMetricsHistoryRetention,
|
||||
} from "./host-metrics-api";
|
||||
|
||||
/**
|
||||
* How long metrics history is kept. Lives in the metrics backend's own
|
||||
* setting, so it saves with its own button rather than the page's.
|
||||
*/
|
||||
export function MetricsRetentionSetting() {
|
||||
const { t } = useTranslation();
|
||||
const toast = useToast();
|
||||
const [days, setDays] = useState("7");
|
||||
|
||||
useEffect(() => {
|
||||
let cancelled = false;
|
||||
getMetricsHistoryRetention()
|
||||
.then((value) => {
|
||||
if (!cancelled) setDays(String(value));
|
||||
})
|
||||
.catch(() => {});
|
||||
return () => {
|
||||
cancelled = true;
|
||||
};
|
||||
}, []);
|
||||
|
||||
const save = async () => {
|
||||
const value = Number.parseInt(days, 10);
|
||||
if (Number.isNaN(value) || value < 1 || value > 90) {
|
||||
toast.error(t("admin.metricsHistoryRetentionRange"));
|
||||
return;
|
||||
}
|
||||
try {
|
||||
await saveMetricsHistoryRetention(value);
|
||||
toast.success(t("admin.monitoringSaved"));
|
||||
} catch {
|
||||
toast.error(t("admin.monitoringSaveFailed"));
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="flex flex-col gap-1.5">
|
||||
<label className="text-[10px] font-semibold text-muted-foreground uppercase tracking-widest">
|
||||
{t("admin.metricsHistoryRetention")}
|
||||
</label>
|
||||
<div className="flex items-center gap-2">
|
||||
<Input
|
||||
type="number"
|
||||
min={1}
|
||||
max={90}
|
||||
value={days}
|
||||
onChange={(event) => setDays(event.target.value)}
|
||||
className="w-20 text-sm"
|
||||
/>
|
||||
<span className="text-xs text-muted-foreground">{t("admin.days")}</span>
|
||||
<Button
|
||||
variant="outline"
|
||||
size="sm"
|
||||
className="text-xs border-accent-brand/40 text-accent-brand hover:bg-accent-brand/10 hover:text-accent-brand h-7"
|
||||
onClick={() => void save()}
|
||||
>
|
||||
{t("common.save")}
|
||||
</Button>
|
||||
</div>
|
||||
<span className="text-[10px] text-muted-foreground">
|
||||
{t("admin.metricsHistoryRetentionRange")}
|
||||
</span>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
import { cn } from "@/lib/utils";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
|
||||
export type HistoryTab = "live" | "1h" | "6h" | "24h" | "7d";
|
||||
|
||||
|
||||
@@ -1,14 +1,11 @@
|
||||
import { useState, useEffect } from "react";
|
||||
import { Cpu } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import type { ServerMetrics } from "@/main-axios";
|
||||
import { RadialGauge, Sparkline, MiniStat } from "@/components/charts";
|
||||
import { MetricCard } from "@/components/metric-card";
|
||||
import { LineChart, type LineChartSeries } from "@/components/charts/LineChart";
|
||||
import {
|
||||
getMetricsHistory,
|
||||
type MetricsHistoryRow,
|
||||
} from "@/api/host-metrics-api";
|
||||
import { getMetricsHistory, type MetricsHistoryRow } from "../host-metrics-api";
|
||||
import { CardTimeTabs, type HistoryTab } from "./CardTimeTabs";
|
||||
|
||||
function computeChartData(rows: MetricsHistoryRow[]) {
|
||||
|
||||
@@ -1,15 +1,12 @@
|
||||
import { useState, useEffect, useMemo } from "react";
|
||||
import { HardDrive } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import type { ServerMetrics } from "@/main-axios";
|
||||
import { FilesystemPicker } from "./FilesystemPicker";
|
||||
import { RadialGauge, Sparkline, MiniStat } from "@/components/charts";
|
||||
import { MetricCard } from "@/components/metric-card";
|
||||
import { LineChart, type LineChartSeries } from "@/components/charts/LineChart";
|
||||
import {
|
||||
getMetricsHistory,
|
||||
type MetricsHistoryRow,
|
||||
} from "@/api/host-metrics-api";
|
||||
import { getMetricsHistory, type MetricsHistoryRow } from "../host-metrics-api";
|
||||
import { CardTimeTabs, type HistoryTab } from "./CardTimeTabs";
|
||||
|
||||
export function DiskCard({
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { ChevronDown, Check } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import type { DiskFilesystem } from "@/main-axios";
|
||||
import { cn } from "@/lib/utils";
|
||||
import {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { ShieldCheck } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import type { ServerMetrics } from "@/main-axios";
|
||||
import { MetricCard } from "@/components/metric-card";
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { useId } from "react";
|
||||
import { Gpu } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import type { ServerMetrics } from "@/main-axios";
|
||||
import type { GpuDevice, GpuProcess } from "@/types/stats-widgets";
|
||||
import { MiniStat, RadialGauge, Sparkline, StatRow } from "@/components/charts";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { UserCheck, UserX } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import type { ServerMetrics } from "@/main-axios";
|
||||
import { MetricCard } from "@/components/metric-card";
|
||||
|
||||
|
||||
@@ -1,14 +1,11 @@
|
||||
import { useState, useEffect } from "react";
|
||||
import { MemoryStick } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import type { ServerMetrics } from "@/main-axios";
|
||||
import { RadialGauge, Sparkline, MiniStat } from "@/components/charts";
|
||||
import { MetricCard } from "@/components/metric-card";
|
||||
import { LineChart, type LineChartSeries } from "@/components/charts/LineChart";
|
||||
import {
|
||||
getMetricsHistory,
|
||||
type MetricsHistoryRow,
|
||||
} from "@/api/host-metrics-api";
|
||||
import { getMetricsHistory, type MetricsHistoryRow } from "../host-metrics-api";
|
||||
import { CardTimeTabs, type HistoryTab } from "./CardTimeTabs";
|
||||
|
||||
export function MemoryCard({
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
import { useState, useEffect } from "react";
|
||||
import { Cable, Container, Network, Wifi, WifiOff } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import type { ServerMetrics } from "@/main-axios";
|
||||
import { MetricCard } from "@/components/metric-card";
|
||||
import { LineChart, type LineChartSeries } from "@/components/charts/LineChart";
|
||||
import {
|
||||
getMetricsHistory,
|
||||
type MetricsHistoryRow,
|
||||
} from "@/api/host-metrics-api";
|
||||
import { getMetricsHistory, type MetricsHistoryRow } from "../host-metrics-api";
|
||||
import { CardTimeTabs, type HistoryTab } from "./CardTimeTabs";
|
||||
|
||||
function ifaceIcon(name: string) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { useMemo, useState } from "react";
|
||||
import { Unplug, Search } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import type { ServerMetrics, ListeningPort } from "@/main-axios";
|
||||
import { MetricCard } from "@/components/metric-card";
|
||||
import { Select2 } from "@/components/select2";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Cpu } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import type { ServerMetrics } from "@/main-axios";
|
||||
import { StatRow } from "@/components/charts";
|
||||
import { MetricCard } from "@/components/metric-card";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Server } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import type { ServerMetrics } from "@/main-axios";
|
||||
import { StatRow } from "@/components/charts";
|
||||
import { MetricCard } from "@/components/metric-card";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Thermometer } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import type { ServerMetrics } from "@/main-axios";
|
||||
import { StatRow } from "@/components/charts";
|
||||
import { MetricCard } from "@/components/metric-card";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Clock } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import type { ServerMetrics } from "@/main-axios";
|
||||
import { MetricCard } from "@/components/metric-card";
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { useEffect, useMemo, useState } from "react";
|
||||
import { Clock4, Plus, Trash2, Save } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { toast } from "sonner";
|
||||
import { Button } from "@/components/button";
|
||||
import { managerPost } from "@/main-axios";
|
||||
import { managerPost } from "../../host-metrics-api";
|
||||
import { useManagerData, extractError } from "./useManagerData";
|
||||
import { ManagerCardShell } from "./ManagerCardShell";
|
||||
import { ManagerSearch } from "./ManagerToolbar";
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import { useMemo, useState } from "react";
|
||||
import { ShieldCheck, Plus, Trash2, Save } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { toast } from "sonner";
|
||||
import { Button } from "@/components/button";
|
||||
import { managerPost, type FirewallChain } from "@/main-axios";
|
||||
import { type FirewallChain } from "@/main-axios";
|
||||
import { managerPost } from "../../host-metrics-api";
|
||||
import { useManagerData, extractError } from "./useManagerData";
|
||||
import { ManagerCardShell } from "./ManagerCardShell";
|
||||
import { ManagerSearch } from "./ManagerToolbar";
|
||||
|
||||
@@ -8,11 +8,11 @@ import {
|
||||
Play,
|
||||
Pencil,
|
||||
} from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { toast } from "sonner";
|
||||
import { Button } from "@/components/button";
|
||||
import { Sparkline } from "@/components/charts";
|
||||
import { managerPost } from "@/main-axios";
|
||||
import { managerPost } from "../../host-metrics-api";
|
||||
import { useManagerData, extractError } from "./useManagerData";
|
||||
import { ManagerCardShell } from "./ManagerCardShell";
|
||||
import { Select2 } from "@/components/select2";
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
||||
import { ScrollText } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { managerGet, managerGetSub } from "@/main-axios";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { managerGet, managerGetSub } from "../../host-metrics-api";
|
||||
import { extractError } from "./useManagerData";
|
||||
import { ManagerCardShell } from "./ManagerCardShell";
|
||||
import { useAdaptivePolling } from "@/hooks/use-adaptive-polling";
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { ReactNode } from "react";
|
||||
import { RefreshCw, AlertTriangle } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { Button } from "@/components/button";
|
||||
import { MetricCard } from "@/components/metric-card";
|
||||
import type { ManagerError } from "./useManagerData";
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { ReactNode } from "react";
|
||||
import { Search } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
|
||||
/**
|
||||
* Compact search row shared by manager cards. Optional `extra` renders to the
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { useMemo, useState } from "react";
|
||||
import { Package, ArrowUpCircle } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { toast } from "sonner";
|
||||
import { Button } from "@/components/button";
|
||||
import { managerPost } from "@/main-axios";
|
||||
import { managerPost } from "../../host-metrics-api";
|
||||
import { useManagerData, extractError } from "./useManagerData";
|
||||
import { ManagerCardShell } from "./ManagerCardShell";
|
||||
import { ManagerSearch } from "./ManagerToolbar";
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { useMemo, useState } from "react";
|
||||
import { ListTree, X, Skull } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { toast } from "sonner";
|
||||
import { managerPost } from "@/main-axios";
|
||||
import { managerPost } from "../../host-metrics-api";
|
||||
import { useManagerData, extractError } from "./useManagerData";
|
||||
import { ManagerCardShell } from "./ManagerCardShell";
|
||||
import { ManagerSearch } from "./ManagerToolbar";
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { useMemo, useState } from "react";
|
||||
import { Cog, Play, Square, RotateCw, Power } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { toast } from "sonner";
|
||||
import { managerPost } from "@/main-axios";
|
||||
import { managerPost } from "../../host-metrics-api";
|
||||
import { useManagerData, extractError } from "./useManagerData";
|
||||
import { ManagerCardShell } from "./ManagerCardShell";
|
||||
import { ManagerSearch } from "./ManagerToolbar";
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { useMemo, useState } from "react";
|
||||
import { MemoryStick, Timer, HardDrive } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { BarSeries, StatRow } from "@/components/charts";
|
||||
import { useManagerData } from "./useManagerData";
|
||||
import { ManagerCardShell } from "./ManagerCardShell";
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { useMemo, useState } from "react";
|
||||
import { ShieldCheck, RefreshCw, Plus, X, Trash2 } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { Button } from "@/components/button";
|
||||
import { managerPost } from "@/main-axios";
|
||||
import { managerPost } from "../../host-metrics-api";
|
||||
import {
|
||||
useManagerData,
|
||||
useManagerAction,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { useState } from "react";
|
||||
import { Power } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { useManagerData, useManagerAction } from "./useManagerData";
|
||||
import { ManagerCardShell } from "./ManagerCardShell";
|
||||
import { ManagerSearch } from "./ManagerToolbar";
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { useMemo, useState } from "react";
|
||||
import { Users, Plus, Trash2, ShieldCheck, Shield } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { toast } from "sonner";
|
||||
import { Button } from "@/components/button";
|
||||
import { managerPost } from "@/main-axios";
|
||||
import { managerPost } from "../../host-metrics-api";
|
||||
import { useManagerData, extractError } from "./useManagerData";
|
||||
import { ManagerCardShell } from "./ManagerCardShell";
|
||||
import { ManagerSearch } from "./ManagerToolbar";
|
||||
|
||||
@@ -6,7 +6,7 @@ import {
|
||||
ArrowUp,
|
||||
ArrowDown,
|
||||
} from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { useManagerData, useManagerAction } from "./useManagerData";
|
||||
import { ManagerCardShell } from "./ManagerCardShell";
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { useCallback, useEffect, useState } from "react";
|
||||
import { toast } from "sonner";
|
||||
import { managerGet, managerPost } from "@/main-axios";
|
||||
import { managerGet, managerPost } from "../../host-metrics-api";
|
||||
|
||||
interface ManagerError {
|
||||
message: string;
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
import { useCallback, useEffect, useRef, useState } from "react";
|
||||
import { getHostMetricsLayout, saveHostMetricsLayout } from "@/main-axios";
|
||||
import {
|
||||
getHostMetricsLayout,
|
||||
saveHostMetricsLayout,
|
||||
} from "../host-metrics-api";
|
||||
import type { HostMetricsLayout } from "@/types/host-metrics";
|
||||
|
||||
const SAVE_DEBOUNCE_MS = 800;
|
||||
|
||||
@@ -0,0 +1,146 @@
|
||||
import { handleApiError, statsApi } from "@/main-axios";
|
||||
import type { HostMetricsLayout } from "@/types/host-metrics";
|
||||
|
||||
// Every function below is keyed by a host's numeric database id, and the
|
||||
// receiving backend must own that host in its own database -- a synced
|
||||
// host has a different numeric id on each side (only its syncId matches
|
||||
// across them). These calls always target the embedded local backend; see
|
||||
// getAllServerStatuses in host-metrics-status-api.ts for the one metrics
|
||||
// call that IS safely merged across local + remote (a process-local,
|
||||
// in-memory aggregate keyed by whichever host ids that process happens to
|
||||
// know about, not a per-host lookup).
|
||||
|
||||
export interface MetricsHistoryRow {
|
||||
ts: string;
|
||||
cpu_percent: number | null;
|
||||
mem_percent: number | null;
|
||||
disk_percent: number | null;
|
||||
net_rx_bytes: number | null;
|
||||
net_tx_bytes: number | null;
|
||||
}
|
||||
|
||||
export interface MetricsHistoryResponse {
|
||||
rows: MetricsHistoryRow[];
|
||||
fromTs: string;
|
||||
toTs: string;
|
||||
}
|
||||
|
||||
export async function getMetricsHistory(
|
||||
hostId: number,
|
||||
opts: { range?: string; from?: string; to?: string },
|
||||
): Promise<MetricsHistoryResponse> {
|
||||
const res = await statsApi.get(`/metrics/history/${hostId}`, {
|
||||
params: opts,
|
||||
});
|
||||
return res.data as MetricsHistoryResponse;
|
||||
}
|
||||
|
||||
export async function getMetricsHistoryRetention(): Promise<number> {
|
||||
const res = await statsApi.get("/global-settings/history");
|
||||
return (res.data as { metricsHistoryRetentionDays: number })
|
||||
.metricsHistoryRetentionDays;
|
||||
}
|
||||
|
||||
export async function saveMetricsHistoryRetention(days: number): Promise<void> {
|
||||
await statsApi.post("/global-settings/history", {
|
||||
metricsHistoryRetentionDays: days,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Host Metrics layout persistence (server-synced per user/host) + the manager
|
||||
* card endpoints. All routes live under the `/host-metrics/*` prefix on the
|
||||
* stats app (port 30005).
|
||||
*/
|
||||
|
||||
export async function getHostMetricsLayout(
|
||||
hostId: number,
|
||||
): Promise<HostMetricsLayout | null> {
|
||||
try {
|
||||
const res = await statsApi.get(`/host-metrics/preferences/${hostId}`, {
|
||||
validateStatus: (status) => status === 200 || status === 404,
|
||||
});
|
||||
if (res.status === 404) return null;
|
||||
return res.data?.layout ?? null;
|
||||
} catch (error) {
|
||||
handleApiError(error, "fetch host metrics layout");
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
export async function saveHostMetricsLayout(
|
||||
hostId: number,
|
||||
layout: HostMetricsLayout,
|
||||
): Promise<void> {
|
||||
try {
|
||||
await statsApi.post(`/host-metrics/preferences/${hostId}`, layout);
|
||||
} catch (error) {
|
||||
handleApiError(error, "save host metrics layout");
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// ─── Managers ───────────────────────────────────────────────────────────────
|
||||
|
||||
export interface PlatformInfo {
|
||||
hasSystemd: boolean;
|
||||
pkg: "apt" | "dnf" | "yum" | "pacman" | null;
|
||||
hasCertbot: boolean;
|
||||
hasAcmeSh: boolean;
|
||||
hasDocker: boolean;
|
||||
osPrettyName: string | null;
|
||||
}
|
||||
|
||||
export async function getHostPlatform(hostId: number): Promise<PlatformInfo> {
|
||||
const res = await statsApi.get(`/host-metrics/platform/${hostId}`);
|
||||
return res.data;
|
||||
}
|
||||
|
||||
/** GET a manager resource (read). */
|
||||
export async function managerGet<T>(
|
||||
hostId: number,
|
||||
resource: string,
|
||||
params?: Record<string, string | number>,
|
||||
): Promise<T> {
|
||||
const res = await statsApi.get(
|
||||
`/host-metrics/managers/${resource}/${hostId}`,
|
||||
{ params },
|
||||
);
|
||||
return res.data as T;
|
||||
}
|
||||
|
||||
/**
|
||||
* GET a manager sub-resource where the host id sits in the middle of the path,
|
||||
* e.g. /managers/logs/{id}/files.
|
||||
*/
|
||||
export async function managerGetSub<T>(
|
||||
hostId: number,
|
||||
resource: string,
|
||||
sub: string,
|
||||
params?: Record<string, string | number>,
|
||||
): Promise<T> {
|
||||
const res = await statsApi.get(
|
||||
`/host-metrics/managers/${resource}/${hostId}/${sub}`,
|
||||
{ params },
|
||||
);
|
||||
return res.data as T;
|
||||
}
|
||||
|
||||
/**
|
||||
* POST a manager action. `resource` is the manager name; `action` is the
|
||||
* optional sub-path (e.g. "action", "signal", "renew"). The host id always
|
||||
* sits between them: /managers/{resource}/{id}[/{action}].
|
||||
*/
|
||||
export async function managerPost<T>(
|
||||
hostId: number,
|
||||
resource: string,
|
||||
body: unknown,
|
||||
action?: string,
|
||||
): Promise<T> {
|
||||
const suffix = action ? `/${action}` : "";
|
||||
const res = await statsApi.post(
|
||||
`/host-metrics/managers/${resource}/${hostId}${suffix}`,
|
||||
body,
|
||||
);
|
||||
return res.data as T;
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
/**
|
||||
* Frontend half of the host-metrics plugin.
|
||||
*
|
||||
* Registers the Host Metrics tab through the existing extension seams
|
||||
* (registerRailItem / registerTabComponent), the same way ssh-terminal's and
|
||||
* docker's frontend do.
|
||||
*
|
||||
* HostEditorStatsTab itself stays in src/ui/sidebar/HostEditorStatsTab.tsx
|
||||
* rather than moving into this plugin: it takes the same {form, setField}
|
||||
* pair every other host editor tab does, and those types (HostEditorForm,
|
||||
* the setField signature) are core types HostEditor.tsx owns -- the same
|
||||
* reason docker leaves HostDockerTab in core.
|
||||
*
|
||||
* register() is called when the plugin is enabled, unregister() when it is
|
||||
* disabled. As of this change neither is actually invoked anywhere yet, the
|
||||
* same as ssh-terminal's and docker's frontend entries -- there is no
|
||||
* frontend plugin loader yet. This file follows the same shape so it is
|
||||
* ready the moment that loader exists.
|
||||
*/
|
||||
|
||||
export const id = "host-metrics";
|
||||
export const tabId = "host-metrics";
|
||||
|
||||
export async function register({
|
||||
registerRailItem,
|
||||
registerTabComponent,
|
||||
icons,
|
||||
}) {
|
||||
registerTabComponent(tabId, () =>
|
||||
import("./HostMetricsTab.tsx").then((m) => ({
|
||||
default: m.HostMetricsTab,
|
||||
})),
|
||||
);
|
||||
|
||||
registerRailItem({
|
||||
id: tabId,
|
||||
icon: icons.Activity,
|
||||
labelKey: "nav.hostMetrics",
|
||||
kind: "tab",
|
||||
});
|
||||
}
|
||||
|
||||
export async function unregister({
|
||||
unregisterRailItem,
|
||||
unregisterTabComponent,
|
||||
}) {
|
||||
unregisterRailItem(tabId);
|
||||
unregisterTabComponent(tabId);
|
||||
}
|
||||
@@ -0,0 +1,161 @@
|
||||
import type { ComponentType } from "react";
|
||||
import { Activity, HardDrive, Server } from "lucide-react";
|
||||
import type {
|
||||
HomepageWidgetContribution,
|
||||
HostEditorSectionProps,
|
||||
StandaloneViewProps,
|
||||
TabProps,
|
||||
TermixApp,
|
||||
} from "@termix/plugin-sdk/frontend";
|
||||
import type { SSHHost } from "@/types";
|
||||
import { HostMetricsTab } from "./HostMetricsTab";
|
||||
import HostMetricsApp from "./HostMetricsApp";
|
||||
import { HostStatsTab } from "./HostEditorStatsTab";
|
||||
import { metricsChartWidget } from "./MetricsChartWidget";
|
||||
import { MetricsRetentionSetting } from "./MetricsRetentionSetting";
|
||||
import { ProxmoxStatsTab } from "./proxmox-stats/ProxmoxStatsTab";
|
||||
import ProxmoxStatsApp from "./proxmox-stats/ProxmoxStatsApp";
|
||||
import { HostProxmoxStatsTab } from "./proxmox-stats/HostProxmoxStatsTab";
|
||||
|
||||
type SectionSetField = Parameters<typeof HostStatsTab>[0]["setField"];
|
||||
|
||||
function MetricsTab({ sshHost, label, isVisible }: TabProps) {
|
||||
return (
|
||||
<HostMetricsTab
|
||||
hostConfig={sshHost as unknown as SSHHost}
|
||||
title={label}
|
||||
isVisible={isVisible}
|
||||
isTopbarOpen={false}
|
||||
embedded={true}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
function ProxmoxTab({ sshHost, label, isVisible }: TabProps) {
|
||||
return (
|
||||
<ProxmoxStatsTab
|
||||
hostConfig={sshHost as unknown as SSHHost}
|
||||
title={label}
|
||||
isVisible={isVisible}
|
||||
isTopbarOpen={false}
|
||||
embedded={true}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
function MetricsStandalone({ hostId }: StandaloneViewProps) {
|
||||
return <HostMetricsApp hostId={hostId} />;
|
||||
}
|
||||
|
||||
function ProxmoxStandalone({ hostId }: StandaloneViewProps) {
|
||||
return <ProxmoxStatsApp hostId={hostId} />;
|
||||
}
|
||||
|
||||
function MetricsHostSection({
|
||||
form,
|
||||
setField,
|
||||
snippets,
|
||||
}: HostEditorSectionProps) {
|
||||
return (
|
||||
<HostStatsTab
|
||||
form={form}
|
||||
setField={setField as SectionSetField}
|
||||
snippets={(snippets ?? []) as { id: number; name: string }[]}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
/** Drawn inside the proxmox plugin's host editor tab, when it runs. */
|
||||
function ProxmoxStatsHostSection({
|
||||
form,
|
||||
setField,
|
||||
}: {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
form: any;
|
||||
setField: (key: string, value: unknown) => void;
|
||||
}) {
|
||||
return (
|
||||
<HostProxmoxStatsTab form={form} setField={setField as SectionSetField} />
|
||||
);
|
||||
}
|
||||
|
||||
export function activate(app: TermixApp): void {
|
||||
app.registerTab("host-metrics", MetricsTab, {
|
||||
icon: Server,
|
||||
titleKey: "nav.hostMetrics",
|
||||
requiresHost: true,
|
||||
noHostMessageKey: "hostMetrics.noHostSelected",
|
||||
persistent: true,
|
||||
activityTypes: ["server_stats"],
|
||||
standalone: MetricsStandalone,
|
||||
// Links copied before the rename still open.
|
||||
standaloneViews: ["server-stats"],
|
||||
preload: () => import("./HostMetricsTab"),
|
||||
});
|
||||
|
||||
app.registerTab("proxmox-stats", ProxmoxTab, {
|
||||
icon: HardDrive,
|
||||
titleKey: "nav.proxmoxStats",
|
||||
requiresHost: true,
|
||||
noHostMessageKey: "proxmoxStats.noHostSelected",
|
||||
standalone: ProxmoxStandalone,
|
||||
preload: () => import("./proxmox-stats/ProxmoxStatsTab"),
|
||||
});
|
||||
|
||||
app.registerHostAction({
|
||||
id: "host-metrics",
|
||||
titleKey: "nav.hostMetrics",
|
||||
icon: Server,
|
||||
kind: "open",
|
||||
order: 50,
|
||||
tabType: "host-metrics",
|
||||
copyUrlView: "host-metrics",
|
||||
overview: true,
|
||||
when: (host) =>
|
||||
!!host.enableSsh &&
|
||||
(host.statsConfig as { metricsEnabled?: boolean } | undefined)
|
||||
?.metricsEnabled !== false,
|
||||
});
|
||||
|
||||
app.registerHostAction({
|
||||
id: "proxmox-stats",
|
||||
titleKey: "nav.proxmoxStats",
|
||||
icon: HardDrive,
|
||||
kind: "open",
|
||||
order: 60,
|
||||
tabType: "proxmox-stats",
|
||||
copyUrlView: "proxmox-stats",
|
||||
when: (host) => host.enableProxmoxStats === true,
|
||||
});
|
||||
|
||||
app.registerHostEditorSection({
|
||||
id: "host-metrics",
|
||||
group: "ssh",
|
||||
titleKey: "hosts.tabHostMetrics",
|
||||
icon: Activity,
|
||||
order: 70,
|
||||
component: MetricsHostSection,
|
||||
});
|
||||
|
||||
app.registerSlotContribution("proxmox.hostEditor", {
|
||||
actionId: "host-metrics.proxmoxStats",
|
||||
titleKey: "nav.proxmoxStats",
|
||||
kind: "component",
|
||||
component: ProxmoxStatsHostSection as unknown as ComponentType<
|
||||
Record<string, unknown>
|
||||
>,
|
||||
});
|
||||
|
||||
app.registerHomepageWidget(
|
||||
metricsChartWidget as unknown as HomepageWidgetContribution,
|
||||
);
|
||||
|
||||
app.registerSettingsComponent("retention", MetricsRetentionSetting);
|
||||
|
||||
app.registerSlotContribution("onboarding.features", {
|
||||
actionId: "host-metrics.feature",
|
||||
titleKey: "onboarding.feature_metrics",
|
||||
descriptionKey: "onboarding.feature_metrics_desc",
|
||||
icon: Activity as ComponentType<{ className?: string }>,
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,261 @@
|
||||
import { useMemo, useState } from "react";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { Box, Search, Server as ServerIcon } from "lucide-react";
|
||||
import { cn } from "@/lib/utils";
|
||||
import { Input } from "@/components/input";
|
||||
import type { ProxmoxGuestSummary } from "@/types/proxmox";
|
||||
|
||||
type StatusFilter = "all" | "running" | "stopped";
|
||||
type TypeFilter = "all" | "qemu" | "lxc";
|
||||
|
||||
function formatUptime(seconds: number | null): string {
|
||||
if (seconds === null || seconds <= 0) return "-";
|
||||
const days = Math.floor(seconds / 86400);
|
||||
const hours = Math.floor((seconds % 86400) / 3600);
|
||||
const minutes = Math.floor((seconds % 3600) / 60);
|
||||
if (days > 0) return `${days}d ${hours}h`;
|
||||
if (hours > 0) return `${hours}h ${minutes}m`;
|
||||
return `${minutes}m`;
|
||||
}
|
||||
|
||||
function UsageCell({
|
||||
percent,
|
||||
usedGiB,
|
||||
totalGiB,
|
||||
}: {
|
||||
percent: number | null;
|
||||
usedGiB?: number | null;
|
||||
totalGiB?: number | null;
|
||||
}) {
|
||||
if (percent === null) {
|
||||
return <span className="text-[11px] text-muted-foreground">-</span>;
|
||||
}
|
||||
const clamped = Math.min(100, Math.max(0, percent));
|
||||
const barColor =
|
||||
clamped >= 90
|
||||
? "bg-red-500"
|
||||
: clamped >= 75
|
||||
? "bg-yellow-500"
|
||||
: "bg-accent-brand";
|
||||
return (
|
||||
<div className="flex min-w-[92px] flex-col gap-1">
|
||||
<div className="flex items-baseline justify-between gap-2">
|
||||
<span className="text-xs font-semibold tabular-nums">
|
||||
{clamped.toFixed(0)}%
|
||||
</span>
|
||||
{usedGiB != null && totalGiB != null && (
|
||||
<span className="text-[10px] tabular-nums text-muted-foreground">
|
||||
{usedGiB.toFixed(1)}/{totalGiB.toFixed(1)}G
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
<div className="h-1.5 w-full overflow-hidden rounded-full bg-muted">
|
||||
<div
|
||||
className={cn("h-full rounded-full", barColor)}
|
||||
style={{ width: `${clamped}%` }}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export function GuestTable({ guests }: { guests: ProxmoxGuestSummary[] }) {
|
||||
const { t } = useTranslation();
|
||||
const [query, setQuery] = useState("");
|
||||
const [statusFilter, setStatusFilter] = useState<StatusFilter>("all");
|
||||
const [typeFilter, setTypeFilter] = useState<TypeFilter>("all");
|
||||
|
||||
const filtered = useMemo(() => {
|
||||
const q = query.trim().toLowerCase();
|
||||
return guests
|
||||
.filter(
|
||||
(g) =>
|
||||
statusFilter === "all" ||
|
||||
(statusFilter === "running") === (g.status === "running"),
|
||||
)
|
||||
.filter((g) => typeFilter === "all" || g.type === typeFilter)
|
||||
.filter(
|
||||
(g) =>
|
||||
!q || g.name.toLowerCase().includes(q) || String(g.vmid).includes(q),
|
||||
)
|
||||
.sort((a, b) => {
|
||||
if (a.status === b.status) return a.name.localeCompare(b.name);
|
||||
return a.status === "running" ? -1 : 1;
|
||||
});
|
||||
}, [guests, query, statusFilter, typeFilter]);
|
||||
|
||||
const running = guests.filter((g) => g.status === "running").length;
|
||||
|
||||
return (
|
||||
<div className="flex min-h-[420px] flex-1 flex-col overflow-hidden border border-border bg-card">
|
||||
<div className="flex shrink-0 flex-wrap items-center gap-2 border-b border-border px-3 py-2.5">
|
||||
<span className="text-xs font-semibold uppercase tracking-widest text-muted-foreground">
|
||||
{t("proxmoxStats.guestsSummary")}
|
||||
</span>
|
||||
<span className="text-[11px] text-muted-foreground">
|
||||
{t("proxmoxStats.guestCounts", { running, total: guests.length })}
|
||||
</span>
|
||||
<div className="ml-auto flex items-center gap-1.5">
|
||||
<div className="relative">
|
||||
<Search className="pointer-events-none absolute left-2 top-1/2 size-3 -translate-y-1/2 text-muted-foreground" />
|
||||
<Input
|
||||
value={query}
|
||||
onChange={(e) => setQuery(e.target.value)}
|
||||
placeholder={t("proxmoxStats.searchGuests")}
|
||||
className="h-7 w-40 pl-6 text-xs"
|
||||
/>
|
||||
</div>
|
||||
<div className="flex overflow-hidden rounded-none border border-border">
|
||||
{(["all", "qemu", "lxc"] as TypeFilter[]).map((f) => (
|
||||
<button
|
||||
key={f}
|
||||
onClick={() => setTypeFilter(f)}
|
||||
className={cn(
|
||||
"px-2 py-1 text-[10px] font-semibold uppercase tracking-wide transition-colors",
|
||||
typeFilter === f
|
||||
? "bg-accent-brand text-white"
|
||||
: "bg-background text-muted-foreground hover:bg-muted",
|
||||
)}
|
||||
>
|
||||
{f === "all"
|
||||
? t("proxmoxStats.filterAll")
|
||||
: f === "qemu"
|
||||
? t("proxmoxStats.filterVm")
|
||||
: t("proxmoxStats.filterLxc")}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
<div className="flex overflow-hidden rounded-none border border-border">
|
||||
{(["all", "running", "stopped"] as StatusFilter[]).map((f) => (
|
||||
<button
|
||||
key={f}
|
||||
onClick={() => setStatusFilter(f)}
|
||||
className={cn(
|
||||
"px-2 py-1 text-[10px] font-semibold uppercase tracking-wide transition-colors",
|
||||
statusFilter === f
|
||||
? "bg-accent-brand text-white"
|
||||
: "bg-background text-muted-foreground hover:bg-muted",
|
||||
)}
|
||||
>
|
||||
{f === "all"
|
||||
? t("proxmoxStats.filterAll")
|
||||
: f === "running"
|
||||
? t("proxmoxStats.running")
|
||||
: t("proxmoxStats.stopped")}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="min-h-0 flex-1 overflow-y-auto thin-scrollbar">
|
||||
{guests.length === 0 ? (
|
||||
<div className="flex h-full items-center justify-center py-16 text-xs text-muted-foreground">
|
||||
{t("proxmoxStats.noGuests")}
|
||||
</div>
|
||||
) : filtered.length === 0 ? (
|
||||
<div className="flex h-full items-center justify-center py-16 text-xs text-muted-foreground">
|
||||
{t("proxmoxStats.noGuestsMatch")}
|
||||
</div>
|
||||
) : (
|
||||
<table className="w-full border-collapse text-xs">
|
||||
<thead className="sticky top-0 z-10 bg-card">
|
||||
<tr className="border-b border-border text-[10px] uppercase tracking-wider text-muted-foreground">
|
||||
<th className="px-3 py-2 text-left font-semibold">
|
||||
{t("proxmoxStats.name")}
|
||||
</th>
|
||||
<th className="px-3 py-2 text-left font-semibold">
|
||||
{t("proxmoxStats.status")}
|
||||
</th>
|
||||
<th className="px-3 py-2 text-left font-semibold">ID</th>
|
||||
<th className="px-3 py-2 text-left font-semibold">
|
||||
{t("proxmoxStats.cpu")}
|
||||
</th>
|
||||
<th className="px-3 py-2 text-left font-semibold">
|
||||
{t("proxmoxStats.mem")}
|
||||
</th>
|
||||
<th className="px-3 py-2 text-left font-semibold">
|
||||
{t("proxmoxStats.disk")}
|
||||
</th>
|
||||
<th className="px-3 py-2 text-left font-semibold">
|
||||
{t("proxmoxStats.uptime")}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody className="divide-y divide-border">
|
||||
{filtered.map((guest) => (
|
||||
<tr
|
||||
key={`${guest.type}-${guest.vmid}`}
|
||||
className="transition-colors hover:bg-muted/40"
|
||||
>
|
||||
<td className="px-3 py-2">
|
||||
<div className="flex items-center gap-2">
|
||||
{guest.type === "lxc" ? (
|
||||
<Box className="size-3.5 shrink-0 text-muted-foreground" />
|
||||
) : (
|
||||
<ServerIcon className="size-3.5 shrink-0 text-muted-foreground" />
|
||||
)}
|
||||
<span className="min-w-0 truncate font-semibold">
|
||||
{guest.name}
|
||||
</span>
|
||||
<span className="shrink-0 rounded-full border border-border px-1.5 py-0.5 text-[9px] uppercase text-muted-foreground">
|
||||
{guest.type === "lxc" ? "LXC" : "VM"}
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-3 py-2">
|
||||
<div className="flex items-center gap-1.5">
|
||||
<span
|
||||
className={cn(
|
||||
"size-1.5 shrink-0 rounded-full",
|
||||
guest.status === "running"
|
||||
? "bg-green-500"
|
||||
: "bg-muted-foreground/50",
|
||||
)}
|
||||
/>
|
||||
<span
|
||||
className={cn(
|
||||
"font-medium",
|
||||
guest.status === "running"
|
||||
? "text-foreground"
|
||||
: "text-muted-foreground",
|
||||
)}
|
||||
>
|
||||
{guest.status === "running"
|
||||
? t("proxmoxStats.running")
|
||||
: t("proxmoxStats.stopped")}
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-3 py-2 font-mono text-muted-foreground">
|
||||
{guest.vmid}
|
||||
</td>
|
||||
<td className="px-3 py-2">
|
||||
<UsageCell percent={guest.cpuPercent} />
|
||||
</td>
|
||||
<td className="px-3 py-2">
|
||||
<UsageCell
|
||||
percent={guest.memPercent}
|
||||
usedGiB={guest.memUsedGiB}
|
||||
totalGiB={guest.memTotalGiB}
|
||||
/>
|
||||
</td>
|
||||
<td className="px-3 py-2">
|
||||
<UsageCell
|
||||
percent={guest.diskPercent}
|
||||
usedGiB={guest.diskUsedGiB}
|
||||
totalGiB={guest.diskTotalGiB}
|
||||
/>
|
||||
</td>
|
||||
<td className="px-3 py-2 whitespace-nowrap text-muted-foreground">
|
||||
{formatUptime(guest.uptimeSeconds)}
|
||||
</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { Server } from "lucide-react";
|
||||
import { Input } from "@/components/input";
|
||||
import { SectionCard, SettingRow, FakeSwitch } from "@/components/section-card";
|
||||
import type { HostEditorForm } from "@/sidebar/HostEditorData";
|
||||
|
||||
type SetHostField = <K extends keyof HostEditorForm>(
|
||||
key: K,
|
||||
value: HostEditorForm[K],
|
||||
) => void;
|
||||
|
||||
export function HostProxmoxStatsTab({
|
||||
form,
|
||||
setField,
|
||||
}: {
|
||||
form: HostEditorForm;
|
||||
setField: SetHostField;
|
||||
}) {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<SectionCard
|
||||
title={t("hosts.enableProxmoxStats")}
|
||||
icon={<Server className="size-3.5" />}
|
||||
>
|
||||
<div className="flex flex-col gap-0 py-1">
|
||||
<SettingRow
|
||||
label={t("hosts.enableProxmoxStats")}
|
||||
description={t("hosts.enableProxmoxStatsDesc")}
|
||||
>
|
||||
<FakeSwitch
|
||||
checked={form.enableProxmoxStats}
|
||||
onChange={(v) => setField("enableProxmoxStats", v)}
|
||||
/>
|
||||
</SettingRow>
|
||||
{form.enableProxmoxStats && (
|
||||
<>
|
||||
<SettingRow
|
||||
label={t("hosts.proxmoxStatsPollInterval")}
|
||||
description={t("hosts.proxmoxStatsPollIntervalDesc")}
|
||||
>
|
||||
<Input
|
||||
className="w-24 h-7 text-xs"
|
||||
type="number"
|
||||
min={15}
|
||||
value={form.proxmoxStatsConfig?.pollInterval ?? 60}
|
||||
onChange={(e) =>
|
||||
setField("proxmoxStatsConfig", {
|
||||
...form.proxmoxStatsConfig,
|
||||
pollInterval: Math.max(
|
||||
15,
|
||||
Number.parseInt(e.target.value || "60", 10),
|
||||
),
|
||||
})
|
||||
}
|
||||
/>
|
||||
</SettingRow>
|
||||
<SettingRow
|
||||
label={t("hosts.proxmoxStatsNodeOverride")}
|
||||
description={t("hosts.proxmoxStatsNodeOverrideDesc")}
|
||||
>
|
||||
<Input
|
||||
className="w-44 h-7 text-xs"
|
||||
value={form.proxmoxStatsConfig?.nodeName ?? ""}
|
||||
placeholder={t("hosts.proxmoxStatsNodeOverridePlaceholder")}
|
||||
onChange={(e) =>
|
||||
setField("proxmoxStatsConfig", {
|
||||
...form.proxmoxStatsConfig,
|
||||
nodeName: e.target.value || null,
|
||||
})
|
||||
}
|
||||
/>
|
||||
</SettingRow>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
</SectionCard>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,147 @@
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { Cpu, MemoryStick, HardDrive, Clock, Server } from "lucide-react";
|
||||
import { cn } from "@/lib/utils";
|
||||
import type { ProxmoxNodeStats } from "@/types/proxmox";
|
||||
|
||||
function Tile({
|
||||
icon,
|
||||
label,
|
||||
percent,
|
||||
detail,
|
||||
sparkline,
|
||||
}: {
|
||||
icon: React.ReactNode;
|
||||
label: string;
|
||||
percent: number | null;
|
||||
detail?: string | null;
|
||||
sparkline?: number[];
|
||||
}) {
|
||||
const clamped = percent === null ? null : Math.min(100, Math.max(0, percent));
|
||||
const barColor =
|
||||
clamped === null
|
||||
? "bg-muted-foreground/30"
|
||||
: clamped >= 90
|
||||
? "bg-red-500"
|
||||
: clamped >= 75
|
||||
? "bg-yellow-500"
|
||||
: "bg-accent-brand";
|
||||
|
||||
return (
|
||||
<div className="flex min-w-0 flex-1 flex-col gap-2 border border-border bg-card px-4 py-3">
|
||||
<div className="flex items-center gap-2 text-muted-foreground">
|
||||
{icon}
|
||||
<span className="text-[10px] font-bold uppercase tracking-widest">
|
||||
{label}
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex items-baseline justify-between gap-2">
|
||||
<span className="text-2xl font-bold tabular-nums">
|
||||
{clamped === null ? "N/A" : `${clamped.toFixed(0)}%`}
|
||||
</span>
|
||||
{detail && (
|
||||
<span className="truncate text-[11px] text-muted-foreground">
|
||||
{detail}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
<div className="h-1.5 w-full overflow-hidden rounded-full bg-muted">
|
||||
<div
|
||||
className={cn("h-full rounded-full transition-all", barColor)}
|
||||
style={{ width: `${clamped ?? 0}%` }}
|
||||
/>
|
||||
</div>
|
||||
{sparkline && sparkline.length > 1 && <MiniSparkline data={sparkline} />}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function MiniSparkline({ data }: { data: number[] }) {
|
||||
const w = 100;
|
||||
const h = 20;
|
||||
const max = 100;
|
||||
const points = data
|
||||
.map((v, i) => {
|
||||
const x = (i / (data.length - 1)) * w;
|
||||
const y = h - (Math.min(100, Math.max(0, v)) / max) * h;
|
||||
return `${x.toFixed(1)},${y.toFixed(1)}`;
|
||||
})
|
||||
.join(" ");
|
||||
return (
|
||||
<svg viewBox={`0 0 ${w} ${h}`} className="h-5 w-full text-accent-brand/70">
|
||||
<polyline
|
||||
points={points}
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
strokeWidth={1.5}
|
||||
strokeLinejoin="round"
|
||||
strokeLinecap="round"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
|
||||
export function NodeSummaryStrip({
|
||||
node,
|
||||
histories,
|
||||
}: {
|
||||
node: ProxmoxNodeStats | undefined;
|
||||
histories: { cpu: number[]; memory: number[]; disk: number[] };
|
||||
}) {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<div className="flex flex-wrap gap-2">
|
||||
<Tile
|
||||
icon={<Cpu className="size-3.5" />}
|
||||
label={t("proxmoxStats.cpuUsage")}
|
||||
percent={node?.cpu.percent ?? null}
|
||||
detail={
|
||||
node?.cpu.cores != null
|
||||
? t("proxmoxStats.cpuCores", { count: node.cpu.cores })
|
||||
: undefined
|
||||
}
|
||||
sparkline={histories.cpu}
|
||||
/>
|
||||
<Tile
|
||||
icon={<MemoryStick className="size-3.5" />}
|
||||
label={t("proxmoxStats.memoryUsage")}
|
||||
percent={node?.memory.percent ?? null}
|
||||
detail={
|
||||
node?.memory.usedGiB != null && node?.memory.totalGiB != null
|
||||
? `${node.memory.usedGiB.toFixed(1)} / ${node.memory.totalGiB.toFixed(1)} GiB`
|
||||
: undefined
|
||||
}
|
||||
sparkline={histories.memory}
|
||||
/>
|
||||
<Tile
|
||||
icon={<HardDrive className="size-3.5" />}
|
||||
label={t("proxmoxStats.diskUsage")}
|
||||
percent={node?.disk.percent ?? null}
|
||||
detail={
|
||||
node?.disk.usedGiB != null && node?.disk.totalGiB != null
|
||||
? `${node.disk.usedGiB.toFixed(1)} / ${node.disk.totalGiB.toFixed(1)} GiB`
|
||||
: undefined
|
||||
}
|
||||
sparkline={histories.disk}
|
||||
/>
|
||||
<div className="flex min-w-0 flex-1 flex-col justify-between gap-2 border border-border bg-card px-4 py-3">
|
||||
<div className="flex items-center gap-2 text-muted-foreground">
|
||||
<Clock className="size-3.5" />
|
||||
<span className="text-[10px] font-bold uppercase tracking-widest">
|
||||
{t("proxmoxStats.uptime")}
|
||||
</span>
|
||||
</div>
|
||||
<span className="text-2xl font-bold">
|
||||
{node?.uptime.formatted ?? "N/A"}
|
||||
</span>
|
||||
<div className="flex items-center gap-1.5 truncate text-[11px] text-muted-foreground">
|
||||
<Server className="size-3 shrink-0" />
|
||||
<span className="truncate">
|
||||
{node?.system.hostname ?? "-"}
|
||||
{node?.system.pveVersion ? ` · ${node.system.pveVersion}` : ""}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
import React from "react";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { ProxmoxStatsTab } from "./ProxmoxStatsTab";
|
||||
import { FullScreenAppWrapper } from "@/features/FullScreenAppWrapper.tsx";
|
||||
import { ConnectionScreen } from "@/components/connection/ConnectionScreen.tsx";
|
||||
|
||||
interface ProxmoxStatsAppProps {
|
||||
hostId?: string;
|
||||
}
|
||||
|
||||
const ProxmoxStatsApp: React.FC<ProxmoxStatsAppProps> = ({ hostId }) => {
|
||||
const { t } = useTranslation();
|
||||
return (
|
||||
<FullScreenAppWrapper hostId={hostId}>
|
||||
{(hostConfig, phase) => {
|
||||
if (phase === "loading") {
|
||||
return (
|
||||
<div className="relative h-full w-full">
|
||||
<ConnectionScreen
|
||||
status="connecting"
|
||||
message={t("hosts.loadingHost")}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
if (!hostConfig) {
|
||||
return (
|
||||
<div className="relative h-full w-full">
|
||||
<ConnectionScreen
|
||||
status="disconnected"
|
||||
message={t("hosts.hostNotFound")}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<ProxmoxStatsTab
|
||||
hostConfig={hostConfig}
|
||||
title={hostConfig.name || `${hostConfig.username}@${hostConfig.ip}`}
|
||||
isVisible={true}
|
||||
isTopbarOpen={false}
|
||||
embedded={true}
|
||||
/>
|
||||
);
|
||||
}}
|
||||
</FullScreenAppWrapper>
|
||||
);
|
||||
};
|
||||
|
||||
export default ProxmoxStatsApp;
|
||||
@@ -0,0 +1,385 @@
|
||||
/* eslint-disable react-hooks/exhaustive-deps */
|
||||
import React from "react";
|
||||
import { Button } from "@/components/button.tsx";
|
||||
import { getSSHHosts } from "@/main-axios";
|
||||
import {
|
||||
getProxmoxStats,
|
||||
startProxmoxStatsPolling,
|
||||
stopProxmoxStatsPolling,
|
||||
sendProxmoxStatsHeartbeat,
|
||||
} from "./proxmox-stats-api";
|
||||
import type { ProxmoxStatsSnapshot } from "@/types/proxmox";
|
||||
import type { ProxmoxStatsConfig } from "@/types";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { RefreshCw, Server } from "lucide-react";
|
||||
import { NodeSummaryStrip } from "./NodeSummaryStrip";
|
||||
import { GuestTable } from "./GuestTable";
|
||||
import { NodeNetworkCard } from "./cards/NodeNetworkCard";
|
||||
import { StoragePoolsCard } from "./cards/StoragePoolsCard";
|
||||
import { ClusterHealthCard } from "./cards/ClusterHealthCard";
|
||||
import { ConnectionScreen } from "@/components/connection/ConnectionScreen.tsx";
|
||||
import {
|
||||
ConnectionLogProvider,
|
||||
useConnectionLog,
|
||||
} from "@/ssh/connection-log/ConnectionLogContext.tsx";
|
||||
import { useConnectionRetry } from "@/lib/useConnectionRetry.ts";
|
||||
import { runAdaptivePolling } from "@/lib/adaptive-polling.ts";
|
||||
|
||||
const HISTORY_LEN = 30;
|
||||
|
||||
function statsChangeKey(data: ProxmoxStatsSnapshot): string {
|
||||
const bucket = (value: number | null | undefined) =>
|
||||
value == null ? null : Math.round(value / 5) * 5;
|
||||
return JSON.stringify({
|
||||
cpu: bucket(data.node.cpu.percent),
|
||||
memory: bucket(data.node.memory.percent),
|
||||
disk: bucket(data.node.disk.percent),
|
||||
guests: data.guests.counts,
|
||||
cluster: data.cluster,
|
||||
});
|
||||
}
|
||||
const DEFAULT_POLL_INTERVAL = 60;
|
||||
|
||||
interface HostConfig {
|
||||
id: number;
|
||||
name: string;
|
||||
ip: string;
|
||||
username: string;
|
||||
enableProxmoxStats?: boolean;
|
||||
proxmoxStatsConfig?: string | ProxmoxStatsConfig | null;
|
||||
authType?: string;
|
||||
port?: number;
|
||||
[key: string]: unknown;
|
||||
}
|
||||
|
||||
interface ProxmoxStatsProps {
|
||||
hostConfig?: HostConfig;
|
||||
title?: string;
|
||||
isVisible?: boolean;
|
||||
isTopbarOpen?: boolean;
|
||||
embedded?: boolean;
|
||||
}
|
||||
|
||||
interface ProxmoxStatsHistories {
|
||||
cpu: number[];
|
||||
memory: number[];
|
||||
disk: number[];
|
||||
}
|
||||
|
||||
function parseProxmoxStatsConfig(
|
||||
raw?: string | ProxmoxStatsConfig | null,
|
||||
): Required<Pick<ProxmoxStatsConfig, "pollInterval">> & ProxmoxStatsConfig {
|
||||
const defaults = { pollInterval: DEFAULT_POLL_INTERVAL, nodeName: null };
|
||||
if (!raw) return defaults;
|
||||
try {
|
||||
const parsed = typeof raw === "string" ? JSON.parse(raw) : raw;
|
||||
return { ...defaults, ...parsed };
|
||||
} catch {
|
||||
return defaults;
|
||||
}
|
||||
}
|
||||
|
||||
export function ProxmoxStatsTab(props: ProxmoxStatsProps): React.ReactElement {
|
||||
return (
|
||||
<ConnectionLogProvider>
|
||||
<ProxmoxStatsInner {...props} />
|
||||
</ConnectionLogProvider>
|
||||
);
|
||||
}
|
||||
|
||||
function ProxmoxStatsInner({
|
||||
hostConfig,
|
||||
title,
|
||||
isVisible = true,
|
||||
isTopbarOpen = true,
|
||||
embedded = false,
|
||||
}: ProxmoxStatsProps): React.ReactElement {
|
||||
const { t } = useTranslation();
|
||||
const { addLog, clearLogs } = useConnectionLog();
|
||||
|
||||
const [snapshot, setSnapshot] = React.useState<ProxmoxStatsSnapshot | null>(
|
||||
null,
|
||||
);
|
||||
const [histories, setHistories] = React.useState<ProxmoxStatsHistories>({
|
||||
cpu: [],
|
||||
memory: [],
|
||||
disk: [],
|
||||
});
|
||||
const [currentHostConfig, setCurrentHostConfig] = React.useState(hostConfig);
|
||||
const [isRefreshing, setIsRefreshing] = React.useState(false);
|
||||
const [isPageVisible, setIsPageVisible] = React.useState(!document.hidden);
|
||||
const [viewerSessionId, setViewerSessionId] = React.useState<string | null>(
|
||||
null,
|
||||
);
|
||||
|
||||
const statsConfig = React.useMemo(
|
||||
() => parseProxmoxStatsConfig(currentHostConfig?.proxmoxStatsConfig),
|
||||
[currentHostConfig?.proxmoxStatsConfig],
|
||||
);
|
||||
|
||||
React.useEffect(() => {
|
||||
const onVis = () => setIsPageVisible(!document.hidden);
|
||||
document.addEventListener("visibilitychange", onVis);
|
||||
return () => document.removeEventListener("visibilitychange", onVis);
|
||||
}, []);
|
||||
|
||||
const isActuallyVisible = isVisible && isPageVisible;
|
||||
|
||||
React.useEffect(() => {
|
||||
if (!viewerSessionId || !isActuallyVisible) return;
|
||||
const interval = setInterval(() => {
|
||||
sendProxmoxStatsHeartbeat(viewerSessionId).catch(() => {});
|
||||
}, 30000);
|
||||
return () => clearInterval(interval);
|
||||
}, [viewerSessionId, isActuallyVisible]);
|
||||
|
||||
React.useEffect(() => {
|
||||
if (hostConfig?.id !== currentHostConfig?.id) {
|
||||
setSnapshot(null);
|
||||
setHistories({ cpu: [], memory: [], disk: [] });
|
||||
}
|
||||
setCurrentHostConfig(hostConfig);
|
||||
}, [hostConfig?.id]);
|
||||
|
||||
React.useEffect(() => {
|
||||
const fetchLatest = async () => {
|
||||
if (!hostConfig?.id) return;
|
||||
try {
|
||||
const hosts = await getSSHHosts();
|
||||
const updated = hosts.find((h) => h.id === hostConfig.id);
|
||||
if (updated) setCurrentHostConfig(updated as unknown as HostConfig);
|
||||
} catch {
|
||||
// keep previous config
|
||||
}
|
||||
};
|
||||
fetchLatest();
|
||||
const onChanged = () => fetchLatest();
|
||||
window.addEventListener("ssh-hosts:changed", onChanged);
|
||||
return () => window.removeEventListener("ssh-hosts:changed", onChanged);
|
||||
}, [hostConfig?.id]);
|
||||
|
||||
const pushHistory = React.useCallback((data: ProxmoxStatsSnapshot) => {
|
||||
setHistories((prev) => {
|
||||
const add = (arr: number[], v: number | null | undefined) =>
|
||||
[...arr, v ?? 0].slice(-HISTORY_LEN);
|
||||
return {
|
||||
cpu: add(prev.cpu, data.node?.cpu?.percent),
|
||||
memory: add(prev.memory, data.node?.memory?.percent),
|
||||
disk: add(prev.disk, data.node?.disk?.percent),
|
||||
};
|
||||
});
|
||||
}, []);
|
||||
|
||||
const notEnabled = currentHostConfig?.enableProxmoxStats !== true;
|
||||
const stopPollingRef = React.useRef<(() => void) | null>(null);
|
||||
|
||||
const fetchSnapshot = React.useCallback(async (): Promise<void> => {
|
||||
if (!currentHostConfig?.id) return;
|
||||
|
||||
addLog({
|
||||
type: "info",
|
||||
stage: "stats_connecting",
|
||||
message: t("proxmoxStats.connecting"),
|
||||
});
|
||||
|
||||
const result = await startProxmoxStatsPolling(currentHostConfig.id);
|
||||
if (result.viewerSessionId) setViewerSessionId(result.viewerSessionId);
|
||||
|
||||
addLog({
|
||||
type: "info",
|
||||
stage: "stats_polling",
|
||||
message: t("proxmoxStats.connecting"),
|
||||
});
|
||||
|
||||
const data = await getProxmoxStats(currentHostConfig.id);
|
||||
if (!data) {
|
||||
throw new Error(t("proxmoxStats.connectionFailed"));
|
||||
}
|
||||
|
||||
setSnapshot(data);
|
||||
addLog({
|
||||
type: "success",
|
||||
stage: "connected",
|
||||
message: t("terminal.connected"),
|
||||
});
|
||||
|
||||
const intervalMs =
|
||||
(statsConfig.pollInterval ?? DEFAULT_POLL_INTERVAL) * 1000;
|
||||
let signature = statsChangeKey(data);
|
||||
stopPollingRef.current?.();
|
||||
stopPollingRef.current = runAdaptivePolling(
|
||||
async () => {
|
||||
const next = await getProxmoxStats(currentHostConfig.id);
|
||||
if (!next) throw new Error(t("proxmoxStats.connectionFailed"));
|
||||
const nextSignature = statsChangeKey(next);
|
||||
const changed = nextSignature !== signature;
|
||||
signature = nextSignature;
|
||||
setSnapshot(next);
|
||||
pushHistory(next);
|
||||
return changed;
|
||||
},
|
||||
{
|
||||
minIntervalMs: intervalMs,
|
||||
maxIntervalMs: Math.min(120_000, intervalMs * 6),
|
||||
stablePollsPerStep: 3,
|
||||
},
|
||||
{ runImmediately: false },
|
||||
);
|
||||
}, [currentHostConfig?.id, statsConfig.pollInterval, addLog, t, pushHistory]);
|
||||
|
||||
const retry = useConnectionRetry({
|
||||
connect: async () => {
|
||||
try {
|
||||
await fetchSnapshot();
|
||||
retry.markConnected();
|
||||
} catch (error: unknown) {
|
||||
addLog({
|
||||
type: "error",
|
||||
stage: "error",
|
||||
message:
|
||||
error instanceof Error
|
||||
? error.message
|
||||
: t("proxmoxStats.connectionFailed"),
|
||||
});
|
||||
retry.markFailed();
|
||||
}
|
||||
},
|
||||
enabled: isPageVisible && !notEnabled && !!currentHostConfig?.id,
|
||||
autoStart: false,
|
||||
});
|
||||
|
||||
const retryRef = React.useRef(retry);
|
||||
retryRef.current = retry;
|
||||
|
||||
// Connects once per host and stays connected while this tab exists, even
|
||||
// when the user switches to another tab and back. Only the browser tab
|
||||
// going into the background (isPageVisible) pauses/resumes it -- switching
|
||||
// between Termix tabs must not tear down and reconnect the session.
|
||||
React.useEffect(() => {
|
||||
if (notEnabled || !currentHostConfig?.id) return;
|
||||
|
||||
let cancelled = false;
|
||||
const debounce = setTimeout(() => {
|
||||
if (isPageVisible && !cancelled) {
|
||||
clearLogs();
|
||||
retryRef.current.reset();
|
||||
retryRef.current.retryNow();
|
||||
} else if (!isPageVisible) {
|
||||
stopPollingRef.current?.();
|
||||
stopPollingRef.current = null;
|
||||
if (currentHostConfig?.id) {
|
||||
stopProxmoxStatsPolling(currentHostConfig.id, undefined).catch(
|
||||
() => {},
|
||||
);
|
||||
}
|
||||
}
|
||||
}, 500);
|
||||
|
||||
return () => {
|
||||
cancelled = true;
|
||||
clearTimeout(debounce);
|
||||
stopPollingRef.current?.();
|
||||
stopPollingRef.current = null;
|
||||
if (currentHostConfig?.id) {
|
||||
stopProxmoxStatsPolling(currentHostConfig.id).catch(() => {});
|
||||
}
|
||||
};
|
||||
}, [currentHostConfig?.id, notEnabled, isPageVisible]);
|
||||
|
||||
const wrapperStyle: React.CSSProperties = embedded
|
||||
? { opacity: isVisible ? 1 : 0, height: "100%", width: "100%" }
|
||||
: {
|
||||
opacity: isVisible ? 1 : 0,
|
||||
margin: isTopbarOpen ? "74px 17px 8px 8px" : "16px 17px 8px 8px",
|
||||
height: isTopbarOpen ? "calc(100vh - 82px)" : "calc(100vh - 24px)",
|
||||
};
|
||||
|
||||
const handleRefresh = async () => {
|
||||
if (!currentHostConfig?.id) return;
|
||||
if (retry.status !== "connected") {
|
||||
retry.retryNow();
|
||||
return;
|
||||
}
|
||||
try {
|
||||
setIsRefreshing(true);
|
||||
const data = await getProxmoxStats(currentHostConfig.id);
|
||||
if (data) {
|
||||
setSnapshot(data);
|
||||
pushHistory(data);
|
||||
}
|
||||
} finally {
|
||||
setIsRefreshing(false);
|
||||
}
|
||||
};
|
||||
|
||||
const showContent = !notEnabled && retry.status === "connected" && snapshot;
|
||||
|
||||
return (
|
||||
<div
|
||||
style={wrapperStyle}
|
||||
className="relative flex flex-col overflow-hidden"
|
||||
>
|
||||
<div className="flex min-h-0 flex-1 flex-col overflow-hidden">
|
||||
{retry.status === "connected" && !notEnabled && (
|
||||
<div className="mx-3 mt-3 flex shrink-0 items-center justify-between border border-border bg-card px-3 py-3">
|
||||
<div className="flex items-center gap-3">
|
||||
<div className="flex size-10 shrink-0 items-center justify-center border border-border bg-muted">
|
||||
<Server className="size-5 text-accent-brand" />
|
||||
</div>
|
||||
<h1 className="text-lg font-bold md:text-2xl">{title}</h1>
|
||||
</div>
|
||||
<Button
|
||||
variant="outline"
|
||||
size="default"
|
||||
onClick={handleRefresh}
|
||||
disabled={isRefreshing}
|
||||
className="gap-2 font-semibold"
|
||||
>
|
||||
<RefreshCw
|
||||
className={`size-3.5 ${isRefreshing ? "animate-spin" : ""}`}
|
||||
/>
|
||||
{t("proxmoxStats.refresh")}
|
||||
</Button>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{showContent && (
|
||||
<div className="flex min-h-0 flex-1 flex-col gap-3 overflow-y-auto px-3 pb-3 pt-3">
|
||||
<div className="shrink-0">
|
||||
<NodeSummaryStrip node={snapshot.node} histories={histories} />
|
||||
</div>
|
||||
|
||||
<GuestTable guests={snapshot.guests.guests} />
|
||||
|
||||
<div className="grid shrink-0 grid-cols-1 gap-3 pb-1 md:grid-cols-3">
|
||||
<NodeNetworkCard snapshot={snapshot} />
|
||||
<StoragePoolsCard snapshot={snapshot} />
|
||||
{snapshot.cluster.clustered && (
|
||||
<ClusterHealthCard snapshot={snapshot} />
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<ConnectionScreen
|
||||
status={notEnabled ? "connected" : retry.status}
|
||||
message={t("proxmoxStats.connecting")}
|
||||
attempt={retry.attempt}
|
||||
maxAttempts={retry.maxAttempts}
|
||||
nextRetryInMs={retry.nextRetryInMs}
|
||||
onManualRetry={retry.retryNow}
|
||||
emptyState={
|
||||
notEnabled ? (
|
||||
<div className="text-center opacity-40">
|
||||
<Server className="mx-auto mb-4 size-16" />
|
||||
<p className="text-xl font-bold uppercase tracking-widest">
|
||||
{t("proxmoxStats.noHostSelected")}
|
||||
</p>
|
||||
</div>
|
||||
) : undefined
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
import { Network } from "lucide-react";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import type { ProxmoxStatsSnapshot } from "@/types/proxmox";
|
||||
import { cn } from "@/lib/utils";
|
||||
import { MetricCard } from "@/components/metric-card";
|
||||
|
||||
export function ClusterHealthCard({
|
||||
snapshot,
|
||||
}: {
|
||||
snapshot: ProxmoxStatsSnapshot | null;
|
||||
}) {
|
||||
const { t } = useTranslation();
|
||||
const cluster = snapshot?.cluster;
|
||||
|
||||
return (
|
||||
<MetricCard
|
||||
title={t("proxmoxStats.clusterHealth")}
|
||||
icon={<Network className="size-3.5" />}
|
||||
scroll
|
||||
>
|
||||
{!cluster || !cluster.clustered ? (
|
||||
<span className="text-xs text-muted-foreground">
|
||||
{t("proxmoxStats.notClustered")}
|
||||
</span>
|
||||
) : (
|
||||
<div className="flex flex-col gap-2 text-xs">
|
||||
<div className="flex items-center gap-2">
|
||||
<span
|
||||
className={cn(
|
||||
"size-1.5 shrink-0 rounded-full",
|
||||
cluster.quorate ? "bg-green-500" : "bg-red-500",
|
||||
)}
|
||||
/>
|
||||
<span className="font-medium">
|
||||
{cluster.clusterName ?? t("proxmoxStats.clusterHealth")}
|
||||
</span>
|
||||
<span className="text-muted-foreground">
|
||||
{cluster.quorate
|
||||
? t("proxmoxStats.quorate")
|
||||
: t("proxmoxStats.notQuorate")}
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex flex-col divide-y divide-border">
|
||||
{cluster.nodes.map((node) => (
|
||||
<div key={node.name} className="flex items-center gap-2 py-1.5">
|
||||
<span
|
||||
className={cn(
|
||||
"size-1.5 shrink-0 rounded-full",
|
||||
node.online ? "bg-green-500" : "bg-muted-foreground/50",
|
||||
)}
|
||||
/>
|
||||
<span className="min-w-0 flex-1 truncate font-medium">
|
||||
{node.name}
|
||||
</span>
|
||||
<span className="shrink-0 text-[10px] text-muted-foreground">
|
||||
{node.online
|
||||
? t("proxmoxStats.nodeOnline")
|
||||
: t("proxmoxStats.nodeOffline")}
|
||||
</span>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</MetricCard>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
import { Network } from "lucide-react";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import type { ProxmoxStatsSnapshot } from "@/types/proxmox";
|
||||
import { StatRow } from "@/components/charts";
|
||||
import { MetricCard } from "@/components/metric-card";
|
||||
|
||||
export function NodeNetworkCard({
|
||||
snapshot,
|
||||
}: {
|
||||
snapshot: ProxmoxStatsSnapshot | null;
|
||||
}) {
|
||||
const { t } = useTranslation();
|
||||
const interfaces = snapshot?.network.interfaces ?? [];
|
||||
|
||||
return (
|
||||
<MetricCard
|
||||
title={t("proxmoxStats.networkInterfaces")}
|
||||
icon={<Network className="size-3.5" />}
|
||||
scroll
|
||||
>
|
||||
{interfaces.length === 0 ? (
|
||||
<span className="text-xs text-muted-foreground">N/A</span>
|
||||
) : (
|
||||
<div className="flex flex-col divide-y divide-border">
|
||||
{interfaces.map((iface) => (
|
||||
<StatRow
|
||||
key={iface.name}
|
||||
label={iface.name}
|
||||
value={iface.ip ?? iface.state ?? "-"}
|
||||
mono
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
</MetricCard>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
import { Database } from "lucide-react";
|
||||
import { useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import type { ProxmoxStatsSnapshot } from "@/types/proxmox";
|
||||
import { MetricCard } from "@/components/metric-card";
|
||||
|
||||
export function StoragePoolsCard({
|
||||
snapshot,
|
||||
}: {
|
||||
snapshot: ProxmoxStatsSnapshot | null;
|
||||
}) {
|
||||
const { t } = useTranslation();
|
||||
const pools = snapshot?.storage.pools ?? [];
|
||||
|
||||
return (
|
||||
<MetricCard
|
||||
title={t("proxmoxStats.storagePools")}
|
||||
icon={<Database className="size-3.5" />}
|
||||
scroll
|
||||
>
|
||||
{pools.length === 0 ? (
|
||||
<span className="text-xs text-muted-foreground">N/A</span>
|
||||
) : (
|
||||
<div className="flex flex-col divide-y divide-border">
|
||||
{pools.map((pool) => (
|
||||
<div key={pool.name} className="flex flex-col gap-1 py-2 text-xs">
|
||||
<div className="flex items-center gap-2">
|
||||
<span className="min-w-0 flex-1 truncate font-medium">
|
||||
{pool.name}
|
||||
</span>
|
||||
<span className="shrink-0 rounded-full border border-border px-1.5 py-0.5 text-[10px] uppercase text-muted-foreground">
|
||||
{pool.type}
|
||||
</span>
|
||||
{!pool.active && (
|
||||
<span className="shrink-0 text-[10px] text-muted-foreground">
|
||||
{t("proxmoxStats.inactive")}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
<div className="flex items-center gap-2">
|
||||
<div className="h-1.5 flex-1 overflow-hidden rounded-full bg-muted">
|
||||
<div
|
||||
className="h-full bg-accent-brand"
|
||||
style={{
|
||||
width: `${Math.min(100, Math.max(0, pool.percent ?? 0))}%`,
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<span className="shrink-0 text-[10px] tabular-nums text-muted-foreground">
|
||||
{pool.usedGiB !== null && pool.totalGiB !== null
|
||||
? `${pool.usedGiB.toFixed(1)} / ${pool.totalGiB.toFixed(1)} GiB`
|
||||
: "N/A"}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
</MetricCard>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
import axios from "axios";
|
||||
import { handleApiError, statsApi } from "@/main-axios";
|
||||
import type { ProxmoxStatsSnapshot } from "@/types/proxmox";
|
||||
|
||||
// Every function below is keyed by a host's numeric database id, and the
|
||||
// receiving backend must own that host in its own database -- same caveat as
|
||||
// host-metrics-api.ts / host-metrics-status-api.ts. All routes live under the
|
||||
// `/proxmox-stats/*` prefix on the stats app (port 30005).
|
||||
|
||||
export async function getProxmoxStats(
|
||||
hostId: number,
|
||||
): Promise<ProxmoxStatsSnapshot | null> {
|
||||
try {
|
||||
const response = await statsApi.get(`/proxmox-stats/${hostId}`, {
|
||||
// Treat 404 as an expected "no stats yet / disabled" signal rather than
|
||||
// an error so we don't spam warn logs on the client.
|
||||
validateStatus: (status) => status === 200 || status === 404,
|
||||
});
|
||||
if (response.status === 404) {
|
||||
return null;
|
||||
}
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
if (axios.isAxiosError(error) && error.response?.status === 404) {
|
||||
return null;
|
||||
}
|
||||
handleApiError(error, "fetch proxmox stats");
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
export async function startProxmoxStatsPolling(hostId: number): Promise<{
|
||||
success: boolean;
|
||||
viewerSessionId?: string;
|
||||
status?: string;
|
||||
error?: string;
|
||||
}> {
|
||||
try {
|
||||
const response = await statsApi.post(`/proxmox-stats/start/${hostId}`);
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
handleApiError(error, "start proxmox stats polling");
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
export async function stopProxmoxStatsPolling(
|
||||
hostId: number,
|
||||
viewerSessionId?: string,
|
||||
): Promise<void> {
|
||||
try {
|
||||
await statsApi.post(`/proxmox-stats/stop/${hostId}`, { viewerSessionId });
|
||||
} catch (error) {
|
||||
handleApiError(error, "stop proxmox stats polling");
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
export async function sendProxmoxStatsHeartbeat(
|
||||
viewerSessionId: string,
|
||||
): Promise<void> {
|
||||
try {
|
||||
await statsApi.post("/proxmox-stats/heartbeat", { viewerSessionId });
|
||||
} catch (error) {
|
||||
handleApiError(error, "send proxmox stats heartbeat");
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
export interface ProxmoxStatsHistoryRow {
|
||||
ts: string;
|
||||
cpu_percent: number | null;
|
||||
mem_percent: number | null;
|
||||
disk_percent: number | null;
|
||||
net_rx_bytes: number | null;
|
||||
net_tx_bytes: number | null;
|
||||
}
|
||||
|
||||
export interface ProxmoxStatsHistoryResponse {
|
||||
rows: ProxmoxStatsHistoryRow[];
|
||||
fromTs: string;
|
||||
toTs: string;
|
||||
}
|
||||
|
||||
export async function getProxmoxStatsHistory(
|
||||
hostId: number,
|
||||
opts: { range?: string; from?: string; to?: string },
|
||||
): Promise<ProxmoxStatsHistoryResponse> {
|
||||
const res = await statsApi.get(`/proxmox-stats/history/${hostId}`, {
|
||||
params: opts,
|
||||
});
|
||||
return res.data as ProxmoxStatsHistoryResponse;
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
import { afterEach, describe, expect, it } from "vitest";
|
||||
import {
|
||||
renderWithApp,
|
||||
type RenderedPluginApp,
|
||||
} from "@termix/plugin-sdk/testing";
|
||||
import type { PluginManifest } from "@termix/plugin-sdk/manifest";
|
||||
import * as plugin from "../../src/frontend/index";
|
||||
import manifestJson from "../../manifest.json";
|
||||
import locales from "../../locales/en.json";
|
||||
|
||||
const manifest = manifestJson as unknown as PluginManifest;
|
||||
|
||||
const declared = (views?: Array<{ id: string }>) =>
|
||||
(views ?? []).map((view) => view.id).sort();
|
||||
|
||||
let rendered: RenderedPluginApp | null = null;
|
||||
|
||||
afterEach(async () => {
|
||||
await rendered?.deactivate();
|
||||
rendered = null;
|
||||
});
|
||||
|
||||
describe(`${manifest.id} activate`, () => {
|
||||
it("activates and registers only views its manifest declares", async () => {
|
||||
rendered = await renderWithApp(plugin, { manifest, locales });
|
||||
const contributes = manifest.contributes as unknown as Record<
|
||||
string,
|
||||
Array<{ id: string }> | undefined
|
||||
>;
|
||||
const tabs = declared(contributes.tabs);
|
||||
// A rail panel may reuse one of the plugin's tab ids.
|
||||
const panels = [...declared(contributes.panels), ...tabs];
|
||||
const cards = declared(contributes.dashboardCards);
|
||||
for (const id of rendered.registered.tabs()) expect(tabs).toContain(id);
|
||||
for (const id of rendered.registered.panels()) expect(panels).toContain(id);
|
||||
for (const id of rendered.registered.dashboardCards()) {
|
||||
expect(cards).toContain(id);
|
||||
}
|
||||
});
|
||||
|
||||
it("removes everything it registered on deactivate", async () => {
|
||||
const app = await renderWithApp(plugin, { manifest, locales });
|
||||
await app.deactivate();
|
||||
expect(app.registered.tabs()).toEqual([]);
|
||||
expect(app.registered.panels()).toEqual([]);
|
||||
expect(app.registered.railItems()).toEqual([]);
|
||||
expect(app.registered.hostActions()).toEqual([]);
|
||||
expect(app.registered.hostEditorSections()).toEqual([]);
|
||||
expect(app.registered.dashboardCards()).toEqual([]);
|
||||
expect(app.registered.settingsComponents()).toEqual([]);
|
||||
expect(app.registered.actions()).toEqual([]);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user