"installToolsManual":"Failed to install tools. Try manually: apt-get install smartmontools nvme-cli",
"runTest":"Run SMART test",
"shortTest":"Short test (~2 min)",
"longTest":"Long test (1-4 hours)",
"extendedTest":"Extended test (background)",
"testHelp":"A short test takes about 2 minutes. The extended test runs in the background and can take several hours on large disks. You will receive a notification when it finishes.",
"startFailed":"Failed to start test",
"short":"Short",
"extended":"Extended",
"testInProgress":"{type} test is running",
"testWait":"Please wait until the test finishes. Buttons will unlock automatically.",
"noProgress":"This disk's firmware does not report progress. The test is running in the background.",
"lastTest":"Last test",
"nvmeMetrics":"NVMe health metrics",
"sasMetrics":"SAS/SCSI health metrics",
"id":"ID",
"attribute":"Attribute",
"value":"Value",
"worst":"Worst",
"status":"Status",
"viewFullReport":"View full SMART report",
"reportHelp":"Generate a detailed SMART report with analysis and recommendations.",
"loadingReport":"Loading report...",
"reportLoadFailed":"Failed to load report data.",
"statusValues":{
"passed":"Passed",
"failed":"Failed",
"running":"Running",
"aborted":"Aborted",
"unknown":"Unknown"
}
},
"historyTab":{
"loading":"Loading test history...",
"empty":"No test history",
"emptyHint":"Run a SMART test to start building history for this disk.",
"title":"Test history",
"latest":"latest",
"today":"Today",
"yesterday":"Yesterday",
"daysAgo":"{count} days ago",
"downloadJson":"Download JSON",
"delete":"Delete",
"confirmDelete":"Delete this test record?",
"note":"Test results are stored locally and used to generate detailed SMART reports."
},
"smartReport":{
"title":"SMART Health Report",
"printPdf":"Print / Save as PDF",
"printHintMac":"Use Cmd+P to save as PDF",
"printHintCtrl":"Use Ctrl+P to save as PDF",
"subtitle":"ProxMenux Monitor - Disk Health Analysis",
"htmlLang":"en",
"date":"Date",
"device":"Device",
"executiveSummary":"Executive Summary",
"smartStatus":"SMART Status",
"healthAssessment":"Disk Health Assessment",
"passedUpper":"PASSED",
"testAgeWarning":"This report is based on a SMART test performed {days} days ago ({date}). Disk health may have changed since then. We recommend running a new SMART test for up-to-date results.",
"healthyAssessment":"This disk is operating within normal parameters. All SMART attributes are within acceptable thresholds. The disk has been powered on for approximately {uptime} and is currently operating at {temperature}. {sectors}",
"failedAssessment":"This disk has reported a SMART health failure. Immediate action is required. Back up all critical data and plan for disk replacement.",
"noBadSectors":"No bad sectors have been detected.",
"healthyMeaning":"In simple terms: This disk is working properly. You can continue using it normally. We recommend running periodic SMART tests (monthly) to catch any issues early.",
"criticalMeaning":"In simple terms: This disk has problems that could cause data loss. Back up your important files immediately and consider replacing the disk soon.",
"warningMeaning":"In simple terms: The disk is working but shows some signs of wear. It is not critical yet, but monitor it closely and keep your backups up to date.",
"moreIssues":"...and {count} more issues (see details below)",
"dismissed":"Dismissed",
"occurrences":"Occurrences",
"errorSignature":"Error Signature",
"rawMessage":"Raw Message",
"firstSeen":"First Seen",
"lastSeen":"Last Seen",
"observationsIntro":"The following events have been detected and logged for this disk. These observations may indicate potential issues that require attention.",
"temperatureHistory":"Temperature history",
"temperatureSamples":"{count} samples",
"temperatureBands":"Bands: amber = warn (>= {warn}°C), red = critical (>= {hot}°C). Sampled every 60s.",
"criticalWarning":"Active alert flags from the NVMe controller. Any non-zero value requires immediate investigation.",
"nvmeTemperature":"Composite temperature reported by the controller. Sustained high temperatures cause thermal throttling and reduce NAND lifespan.",
"temperatureSensor1":"Primary temperature sensor, usually the NAND flash. Most representative of flash health.",
"temperatureSensor2":"Secondary sensor, often the controller die. Typically runs hotter than Sensor 1.",
"temperatureSensor3":"Tertiary sensor, if present. Location varies by manufacturer.",
"availableSpare":"Percentage of spare NAND blocks remaining for bad-block replacement. An alert triggers below the threshold.",
"availableSpareThreshold":"Manufacturer-set minimum for Available Spare. Below this, the drive flags a critical warning.",
"percentageUsed":"Drive estimate of endurance consumed based on actual versus rated write cycles. 100% means the rated TBW was reached; the drive may keep working beyond this.",
"mediaErrors":"Unrecoverable read/write errors on NAND flash. Any non-zero value indicates permanent cell damage. Growing count means replace soon.",
"mediaIntegrityErrors":"Unrecoverable errors detected by the controller. Non-zero means data corruption risk.",
"unsafeShutdowns":"Power losses without proper flush or shutdown. Very high counts risk metadata corruption and firmware issues.",
"nvmePowerCycles":"Total on/off cycles. Frequent cycling increases connector and capacitor wear.",
"nvmePowerOnHours":"Total cumulative hours the drive has been powered on since manufacture.",
"dataUnitsRead":"Total data read in 512 KB units. Multiply by 512,000 for bytes. Useful for calculating daily read workload.",
"dataUnitsWritten":"Total data written in 512 KB units. Compare with TBW rating to estimate remaining endurance.",
"hostReadCommands":"Total read commands issued by the host. A high ratio versus write commands indicates a read-heavy workload.",
"hostWriteCommands":"Total write commands issued by the host. Includes filesystem metadata writes.",
"controllerBusyTime":"Total minutes the controller spent processing I/O commands. High values indicate sustained heavy workload.",
"errorLogEntries":"Number of entries in the error information log. Often includes benign self-test artifacts; cross-check with Media Errors.",
"warningTempTime":"Total minutes spent above the warning temperature threshold. Causes performance throttling. Zero is ideal.",
"criticalTempTime":"Total minutes spent above the critical temperature threshold. The drive may shut down to prevent damage. Should always be zero.",
"warningCompositeTemperatureTime":"Total minutes the composite temperature exceeded the warning threshold.",
"criticalCompositeTemperatureTime":"Total minutes the composite temperature exceeded the critical threshold. Must be zero.",
"thermalManagementT1TransCount":"Number of times the drive entered light thermal throttling (T1). Indicates cooling issues.",
"thermalManagementT2TransCount":"Number of times the drive entered heavy thermal throttling (T2). Significant performance impact.",
"thermalManagementT2TotalTime":"Total seconds spent in heavy thermal throttling. Severe performance degradation.",
"rawReadErrorRate":"Hardware read errors detected. High raw values on Seagate/Samsung drives are normal because their proprietary formula makes VALUE more important than raw.",
"writeErrorRate":"Errors encountered during write operations. A growing count may indicate head or media issues.",
"multiZoneErrorRate":"Errors when writing to multi-zone regions. Manufacturer-specific; a rising trend is concerning.",
"softReadErrorRate":"Read errors corrected by firmware without data loss. High values may indicate degrading media.",
"readErrorRetryRate":"Number of read retries needed. Occasional retries are normal; persistent growth indicates wear.",
"reportedUncorrect":"Errors that ECC could not correct. Any non-zero value means data was lost or unreadable.",
"reportedUncorrectableErrors":"Errors that ECC could not correct. Non-zero means data loss risk.",
"reallocatedSectorCount":"Bad sectors replaced by spare sectors from the reserve pool. A growing count means drive degradation.",
"retiredBlockCount":"NAND blocks retired due to wear or failure (SSD). Similar to Reallocated Sector Count for HDDs.",
"reallocatedEventCount":"Number of remap operations performed. Each event means a bad sector was replaced.",
"currentPendingSector":"Unstable sectors waiting to be remapped on next write. They may resolve or become permanently reallocated.",
"pendingSectors":"Sectors waiting to be remapped. They may resolve or become reallocated.",
"offlineUncorrectable":"Sectors that failed during offline scan and could not be corrected. Indicates possible data loss.",
"offlineUncorrectableSectorCount":"Uncorrectable sectors found during background scan. Data on these sectors is lost.",
"sataTemperature":"Current drive temperature. Sustained high temperatures accelerate wear and reduce lifespan.",
"temperatureCelsius":"Current drive temperature in Celsius. HDDs should usually stay below 45°C; SSDs below 60°C.",
"airflowTemperatureCel":"Temperature measured by the airflow sensor. Usually slightly lower than the main temperature sensor.",
"temperatureCase":"Temperature of the drive casing. Useful for monitoring enclosure ventilation.",
"temperatureInternal":"Internal temperature sensor. May read higher than case temperature.",
"sataPowerOnHours":"Total cumulative hours the drive has been powered on. Used to estimate age and plan replacements.",
"powerOnHoursAndMsec":"Total powered-on time with millisecond precision.",
"powerCycleCount":"Total number of complete power on/off cycles. Frequent cycling stresses electronics.",
"powerOffRetractCount":"Times the heads were retracted due to power loss (HDD). High values indicate unstable power supply.",
"unexpectedPowerLossCt":"Unexpected power losses (SSD). Can cause metadata corruption if write cache was active.",
"unsafeShutdownCount":"Power losses without proper shutdown (SSD). High values risk firmware corruption.",
"startStopCount":"Spindle motor start/stop cycles (HDD). Each cycle causes mechanical wear.",
"spinUpTime":"Time for platters to reach full operating speed (HDD). Increasing values may indicate motor bearing wear.",
"spinRetryCount":"Failed attempts to spin up the motor (HDD). Non-zero usually indicates power supply or motor issues.",
"calibrationRetryCount":"Number of head calibration retries (HDD). Non-zero may indicate mechanical issues.",
"seekErrorRate":"Errors during head positioning (HDD). High raw values on Seagate are often normal due to a proprietary formula.",
"unknownAttribute":"Vendor-specific attribute not defined in the SMART standard. Check manufacturer documentation.",
"freeFallSensor":"Free-fall events detected (laptop HDD). The heads are parked to prevent damage during drops.",
"grownDefectList":"Sectors remapped due to defects found during operation. Equivalent to Reallocated Sectors on SATA. A growing count means drive degradation.",
"readErrorsCorrected":"Read errors corrected by ECC. Normal for enterprise drives under heavy workload; only uncorrected errors are critical.",
"readEccFast":"Errors corrected by fast on-the-fly ECC during read operations. Normal in SAS drives.",
"readEccDelayed":"Errors requiring delayed or offline ECC correction during reads. Non-zero is acceptable but should not grow rapidly.",
"readUncorrectedErrors":"Read errors that ECC could not correct. Non-zero means data was lost or unreadable. Critical metric.",
"readDataProcessed":"Total data read by the drive. Useful for calculating daily workload.",
"writeErrorsCorrected":"Write errors corrected by ECC. Normal for enterprise drives.",
"writeUncorrectedErrors":"Write errors that ECC could not correct. Non-zero means potential data loss. Critical.",
"writeDataProcessed":"Total data written to the drive. Useful for workload analysis.",
"verifyErrorsCorrected":"Verification errors corrected during background verify operations.",
"verifyUncorrectedErrors":"Verify errors that could not be corrected. Non-zero indicates media degradation.",
"nonMediumErrors":"Controller or bus errors not related to the media itself. High count may indicate backplane or cable issues.",
"sasTemperature":"Current drive temperature. Enterprise SAS drives tolerate up to 55-60°C under sustained load.",
"sasPowerOnHours":"Total hours the drive has been powered on. Enterprise drives are rated for 24/7 operation.",
"startStopCycles":"Motor start/stop cycles. Enterprise SAS drives are rated for 50,000+ cycles.",
"loadUnloadCycles":"Head load/unload cycles. Enterprise drives are rated for 600,000+ cycles.",
"backgroundScanStatus":"Status of the SCSI background media scan. Runs continuously to detect surface defects."
},
"recommendations":{
"healthyTitle":"Disk is Healthy",
"healthyText":"All SMART attributes are within normal ranges. Continue regular monitoring.",
"criticalTitle":"Critical: Disk Health Issue Detected",
"criticalText":"SMART has reported a health issue. Back up all data immediately and plan for disk replacement.",
"unsafeText":"Frequent power losses increase the risk of firmware corruption. Ensure stable power or use a UPS.",
"seagateTitle":"Seagate Raw_Read_Error_Rate - Normal Behavior",
"seagateText":"Seagate drives report very large raw values for attribute #1. This is expected; only the normalized value matters and it should remain at 100.",
"smrText":"SMR disks write random data more slowly and may stall under a heavy mixed workload. They suit backups and archives, but are not recommended as primary Proxmox storage or ZFS vdevs."
}
},
"ataErrors":{
"idnf":"Sector address not found - possible bad sector or cable issue",
"unc":"Uncorrectable read error - bad sector",
"abrt":"Command aborted by drive",
"amnf":"Address mark not found - surface damage",
"tk0nf":"Track 0 not found - drive hardware failure",
"bbk":"Bad block detected",
"icrc":"Interface CRC error - cable or connector issue",
"mc":"Media changed",
"mcr":"Media change requested",
"wp":"Write protected"
},
"scheduleTab":{
"loading":"Loading schedules...",
"automaticTests":"Automatic SMART tests",
"toggleHelp":"Enable or disable all scheduled tests",
"enabled":"Enabled",
"disabled":"Disabled",
"configured":"Configured schedules",
"disks":"Disks",
"allDisks":"all disks",
"keepResults":"Keep {count} results",
"empty":"No scheduled tests configured",
"emptyHint":"Create a schedule to run SMART tests automatically.",
"edit":"Edit schedule",
"new":"New schedule",
"testType":"Test type",
"frequency":"Frequency",
"daily":"Daily",
"weekly":"Weekly",
"monthly":"Monthly",
"dailyAt":"Daily at {time}",
"weeklyAt":"{day} at {time}",
"monthlyAt":"Day {day} of month at {time}",
"dayOfWeek":"Day of week",
"dayOfMonth":"Day of month",
"timeHour":"Time (hour)",
"retention":"Keep results",
"lastN":"Last {count}",
"keepAll":"Keep all",
"saving":"Saving...",
"save":"Save schedule",
"cancel":"Cancel",
"add":"Add schedule",
"note":"Scheduled tests run automatically via cron. Results are saved to the SMART history.",
"days":{
"sunday":"Sunday",
"monday":"Monday",
"tuesday":"Tuesday",
"wednesday":"Wednesday",
"thursday":"Thursday",
"friday":"Friday",
"saturday":"Saturday"
}
}
},
"details":{
"temperature":{
"title":"CPU Temperature",
"diskTitle":"Temperature",
"current":"Current",
"min":"Min",
"avg":"Avg",
"max":"Max",
"seriesName":"Temperature",
"noData":"No temperature data available for this period",
"collectionHint":"Data is collected every 60 seconds",
"openHistory":"Open temperature history",
"collectingSamples":"Collecting samples — chart populates after ~2 minutes",
"sampleInterval":"Samples are collected every 60 seconds",
"timeframes":{
"hour":"1 Hour",
"day":"24 Hours",
"week":"7 Days",
"month":"30 Days"
},
"status":{
"hot":"Hot",
"warm":"Warm",
"normal":"Normal"
}
},
"processes":{
"topByCpu":"Top processes by CPU",
"topByMemory":"Top processes by Memory",
"cpuDescription":"Current CPU usage per process, as a fraction of the host's total CPU - same scale as the CPU Usage card above. Refreshes every 3 s while open.",
"memoryDescription":"Current resident memory per process. Refreshes every 3 s while open.",
"filterPlaceholder":"Filter by command line, user or PID...",
"pid":"PID",
"user":"User",
"command":"Command",
"cpuPercent":"CPU %",
"memory":"Memory",
"memPercent":"Mem %",
"noMatches":"No processes match the filter",
"captured":"Captured {time}",
"matchCount":"{count} match of {total} processes",
"matchesCount":"{count} matches of {total} processes",
"topCount":"Top {shown} of {total} processes",
"loadFailed":"Failed to fetch processes",
"lifetimeAverageTitle":"Average CPU% across this process's lifetime - useful for finding long-running idle baselines",
"averageShort":"avg"
},
"processInfo":{
"titleFallback":"Process",
"descriptionLive":"Live snapshot from /proc/{pid}. Auto-refreshes every {seconds} s while open.",
"descriptionExited":"Last snapshot from /proc/{pid} before the process finished.",
"finishedTitle":"This process has finished",
"finishedDescription":"It was likely a short-lived helper, script, pct exec, or one-shot command that completed while the modal was open. The data below is the last snapshot captured before it exited — not a stale or broken read.",
"loading":"Loading…",
"fetchFailed":"Failed to fetch process",
"captured":"Captured",
"lastSeen":"Last seen",
"sections":{
"overview":"Overview",
"resources":"Resources",
"command":"Command",
"lifetime":"Lifetime"
},
"labels":{
"state":"State",
"parent":"Parent",
"threads":"Threads",
"openFds":"Open FDs",
"user":"User",
"group":"Group",
"cpu":"CPU",
"memory":"Memory",
"residentRss":"Resident (RSS)",
"virtualSize":"Virtual size",
"swap":"Swap",
"ioRead":"I/O read",
"ioWrite":"I/O write",
"name":"Name",
"commandLine":"Command line",
"executable":"Executable",
"workingDir":"Working dir",
"started":"Started",
"runningFor":"Running for"
},
"states":{
"running":"Running",
"sleeping":"Sleeping",
"diskWait":"Disk wait",
"zombie":"Zombie",
"stopped":"Stopped",
"tracingStop":"Tracing stop",
"dead":"Dead",
"idle":"Idle",
"exited":"Exited"
}
}
},
"vmLxc":{
"loadingTitle":"Loading VMs and LXCs...",
"loadingDescription":"Fetching VM and LXC container status",
"disabledTitle":"Firewall is not enabled for this {type}",
"disabledHint":"Enable it in the Proxmox UI under {type} -> Firewall -> Options and add at least one rule with log: info or higher so packets start being recorded. New entries will appear here automatically on the next refresh.",
"readFailed":"Failed to read firewall log",
"empty":"No firewall events recorded yet.",
"emptyHint":"Rules with log: info or higher will populate this view as packets arrive."
"noUpdateMethodBody":"No update method available. Update from the app itself, or set a custom command in the App tab.",
"ociImmutableTitle":"OCI image container",
"ociImmutableBody":"OS packages are baked in at image build time and cannot be updated in place. Apply updates manually or reinstall with a newer image.",
"hideNoticeButton":"Hide this notice for this app",
"noOsUpdatesPending":"No OS updates pending",
"securityUpdateAria":"Security update",
"packagePendingLabel":"package pending",
"packagesPendingLabel":"packages pending",
"securityUpdateLabel":"security update",
"securityUpdatesLabel":"security updates",
"applicationDefaultName":"Application",
"installedLabel":"installed",
"upToDateAtLabel":"Up to date at",
"versionTrackingPending":"Version tracking pending — the next scheduled check will populate installed and upstream numbers.",
"customCommandTitle":"Custom update command",
"customCommandBody":"Run a user-defined shell command to update this app inside the container.",
"otherPackagePending":"+{count} other package pending in the container",
"otherPackagesPending":"+{count} other packages pending in the container",
"noManagedUpdateInfo":"No update information yet — check from Security → Secure Gateway.",
"ociTitle":"OCI image container",
"ociBody":"This container was created from an OCI (Docker) image. Update management for OCI containers is coming with the upcoming OCI install feature — updates will rebuild the container from a newer image tag rather than patching packages inside.",
"helperNotUpdateable":"The community-scripts registry marks this app as not updateable.",
"helperDetectedTitle":"Detected a helper-scripts updater",
"helperDetectedBody":"Applying manually is safest."
"systemctlHint":"systemctl show <service> -p ExecStart",
"whichHint":"which <app>",
"apkInfoHint":"\" : \"apk info | grep",
"grafanaNote":". Grafana needs",
"hiddenDetectionsHelpSingular":"You have {count} hidden detection. Restore one to bring it back, or register a custom app manually.",
"hiddenDetectionsHelpPlural":"You have {count} hidden detections. Restore one to bring it back, or register a custom app manually.",
"registerCustom":"Register a custom app",
"noAppsTitle":"No applications registered",
"noAppsBody":"Register each application running in this container. Get clickable web links, and — optionally — upstream version tracking + notifications for new releases.",
"registerApplication":"Register application",
"hiddenSuffix":"{count} hidden",
"confirmHide":"Hide the \"{name}\" detection permanently on this container?\n\nTo bring it back later, click \"Register a different app\" — the hidden list appears there with a Restore option.",
"nameSearchPlaceholder":"Type to search 700+ apps, or type your own",
"matchCount":"{count} matches",
"catalogPort":"port {port}",
"trackingAvailable":"tracking available",
"logoUrlLabel":"Logo URL",
"webLinks":"Web links",
"addPort":"Add port",
"detectedPorts":"Ports detected in the container — click to add:",
"noWebPorts":"No web ports listening. Use Add port if you still want to create a link manually.",
"trackUpstream":"Track upstream version (optional)",
"trackOff":"Off — link only",
"trackOn":"On · {method}",
"trackHelp":"Optional. When enabled, ProxMenux checks the installed version and compares it with the latest upstream release.",
"commandSafetyHelp":"Runs argv-style inside the CT as root — never through a shell. You are responsible for what the command does. Use installed_regex below to extract the version from the output.",
"manualVersionHelp":"Type the version you have installed. If an upstream source is set below, ProxMenux still checks for updates. After upgrading the app, return here and update this value.",
"upstreamHelp":"How ProxMenux finds the latest version to compare against your installed one.",
"githubRepoHelp":"Public GitHub repository where releases or tags are published.",
"httpJsonHelp":"Public JSON endpoint that returns a version somewhere in the payload.",
"jsonPathHelp":"Dotted path with optional [N] array indices.",
"restoreButton":"Restore",
"registerButton":"Register",
"removeButton":"Remove",
"checkButton":"Check",
"editFieldsButton":"Edit fields",
"alsoDetectedContainer":"Also detected on this container",
"addAnotherApplication":"Add another application",
"description":"Configure how long dismissed alerts stay hidden for each category. Changes apply to existing and future dismissed alerts.",
"category":"Category",
"suppressionDuration":"Suppression Duration",
"hours":"Hours",
"permanentNotice":"Alerts for {category} will stay hidden permanently after dismissal.",
"temperatureSafetyNotice":"Critical CPU temperature alerts still appear to protect the hardware.",
"longSuppressionNotice":"Long suppression period. Dismissed alerts in this category will stay hidden for a long time.",
"footerNote":"These settings apply when you dismiss a warning from the Health Monitor. Critical CPU temperature alerts always appear to protect your hardware.",
"activeSuppressions":"Active Suppressions",
"activeSuppressionsDescription":"Alerts you have hidden from the Health Monitor. Permanent dismisses can only be reverted here. Editing requires the Health Monitor",
"noActiveSuppressions":"No active suppressions. Dismissed alerts from the Health Monitor will appear here.",
"permanent":"Permanent",
"daysRemaining":"{count}d remaining",
"hoursRemaining":"{count}h remaining",
"reEnableDisabledTitle":"Enable Health Monitor Edit mode to re-enable",
"reEnableQueuedTitle":"Cancel re-enable; it will not be applied on Save",
"reEnableTitle":"Queue this alert for re-enable on Save",
"description":"Exclude remote storages (PBS, NFS, CIFS, etc.) from health monitoring and notifications. Use this for storages that are intentionally offline or have limited API access.",
"emptyTitle":"No remote storages detected",
"emptyDescription":"PBS, NFS, CIFS, and other remote storages will appear here when configured",
"storage":"Storage",
"offline":"Offline or unavailable",
"namespaceRestricted":"Reachable; datastore size hidden by ACL",
"healthHelp":"When OFF, this storage will not trigger warnings or critical alerts in the Health Monitor.",
"alertsHelp":"When OFF, no notifications will be sent for this storage."
},
"networkInterfaces":{
"title":"Network Interface Exclusions",
"description":"Exclude network interfaces (bridges, bonds, physical NICs) from health monitoring and notifications. Use this for interfaces that are intentionally disabled or unused.",
"emptyTitle":"No network interfaces detected",
"interface":"Interface",
"down":"DOWN",
"excluded":"Excluded",
"noIp":"No IP",
"healthHelp":"When OFF, this interface will not trigger warnings or critical alerts in the Health Monitor.",
"alertsHelp":"When OFF, no notifications will be sent for this interface."
},
"snippets":{
"title":"Snippets storage",
"description":"Where ProxMenux installs hookscripts, for example the GPU passthrough guard for VMs/LXCs. Pick a shared storage in cluster setups so VMs and LXCs migrate cleanly between nodes;",
"localNote":"is node-specific and breaks migration.",
"placeholder":"Pick a storage...",
"footer":"Existing VMs/LXCs already configured with the previous storage keep working. Only new GPU passthrough operations, or running \"sync hookscripts\" on the host, will use the new selection."
},
"lxcUpdateDetection":{
"title":"LXC Update Detection",
"descriptionStart":"Periodically check running Debian/Ubuntu/Alpine LXC containers for pending package updates",
"descriptionEnd":" and surface them on the dashboard. The corresponding notification toggle in Notifications -> Services appears only while detection is enabled.",
"enableLabel":"Enable LXC update detection",
"loadFailed":"Could not load the LXC update detection setting.",
"saveFailed":"Could not save the LXC update detection setting.",
"purgedMessage":"{count} LXC entries removed from the registry. Re-enabling detection will repopulate them on the next scan cycle."
},
"notifications":{
"title":"Notifications",
"description":"Configure notification channels and event filters. Receive alerts via Telegram, Gotify, Discord, or Email.",
"disabledDescription":"Get real-time alerts about your Proxmox environment via Telegram, Discord, Gotify, or Email.",
"enableService":"Enable notification service",
"enableServiceDescription":"Monitor system health, VM/CT events, backups, security alerts, and cluster status. PVE webhook integration is configured automatically.",
"enableButton":"Enable Notifications",
"configuring":"Configuring...",
"webhookConfigured":"PVE webhook configured automatically. Proxmox will send notifications to ProxMenux.",
"enhancedMessagesDescription":"Use AI to generate contextual notification messages",
"provider":"Provider",
"customBaseUrl":"Custom base URL",
"customBaseUrlPlaceholder":"Leave empty for OpenAI or enter a custom endpoint",
"customBaseUrlHint":"For OpenAI-compatible APIs such as BytePlus, LocalAI, LM Studio or vLLM.",
"apiKey":"API key",
"model":"Model",
"promptMode":"Prompt mode",
"defaultPrompt":"Default prompt",
"customPrompt":"Custom prompt",
"language":"Language",
"selectLanguage":"Select language",
"detailLevel":"Detail level per channel",
"suggestions":"AI suggestions",
"suggestionsDescription":"Allow AI to add brief troubleshooting tips based on log context",
"customPromptPlaceholder":"Enter your custom instructions for the AI…",
"testing":"Testing…",
"testConnection":"Test connection",
"ollamaUrl":"Ollama URL",
"getKey":"Get key",
"loadModelsPlaceholder":"Click Load to fetch models",
"selectModel":"Select model",
"noModelsLoaded":"No models loaded — click Load",
"noModelSelected":"Select a model first. Click Load to fetch the available models.",
"load":"Load",
"modelsAvailable":"{count} models available",
"detailHint":"AI translates and formats notifications in your selected language. Each channel can use a different level of detail.",
"beta":"BETA",
"export":"Export",
"import":"Import",
"communityPrompts":"Community prompts",
"customPromptHint":"Define your own rules and format. You control the detail and style of all notifications. Export the prompt to share it, or import one from the community.",
"local":"Local",
"detailLevels":{
"brief":"Brief",
"standard":"Standard",
"detailed":"Detailed"
},
"providersInfo":"AI provider information",
"loadModelsHint":"Click Load to fetch the available models from this provider.",
"openAiCompatible":"OpenAI-compatible APIs",
"openAiCompatibleDescription":"Set a custom base URL to use an OpenAI-compatible API. Supported services include:",
"anyOpenAiService":"Any service using the OpenAI format",
"providers":{
"groq":"Very fast, with a generous free tier. A good place to start.",
"openai":"Industry standard, accurate and widely used.",
"anthropic":"Excellent for writing and translation; fast and economical.",
"gemini":"A free tier is available, with a good quality-to-price ratio.",
"ollama":"Uses models on your Ollama server. Fully local, private and free to run.",
"openrouter":"Access to more than 100 models through one API key."
"description":"Create your own AI prompt for ProxMenux Monitor notifications",
"whatTitle":"What is a custom prompt?",
"whatDescription":"The prompt defines how AI formats your notifications. A custom prompt lets you control the style, level of detail and format of every message.",
"requirements":"Important requirements",
"formatIntro":"Your prompt must use this output format:",
"formatTitleThen":"followed by the title, then",
"formatBodyThen":"followed by the message",
"plainText":"Use plain text only, without Markdown, so the result works in every channel.",
"rawData":"The prompt receives raw Proxmox event data as input.",
"language":"Define the output language in the prompt. The Language selector only applies to the default mode.",
"gettingStarted":"Getting started",
"gettingStartedDescription":"An example prompt is ready to help you start. You can adjust it, export it to share with others, or import a prompt from the community.",
"emptyDescription":"Run ProxMenux to configure system optimizations",
"installedTools":"Installed Tools",
"activeCount":"{count} active",
"viewUpdates":"View available updates",
"updateCount":"{count} updates",
"updateOneTitle":"Update: {name}",
"updateManyTitle":"Update {count} optimizations",
"updateOneDescription":"Re-running {functionName} from the {source} flow.",
"updateManyDescription":"Re-running {count} post-install functions in sequence.",
"legacySourceTitle":"Legacy optimization - click to view source",
"sourceTitle":"Click to view source code",
"legacy":"legacy",
"updateToolTitle":"Update {name} to v{version}",
"availableUpdates":"Available updates",
"availableUpdatesDescription":"{count} optimizations can be updated to a newer version.",
"selectedCount":"{selected} of {total} selected",
"updateSelected":"Update selected"
},
"healthThresholds":{
"title":"Health Monitor Thresholds",
"description":"Health Monitor and notifications react when these limits are crossed. Drag the amber handle for the warning level and the red handle for the critical level. Values different from the recommendation appear in blue; hover a handle to see the recommendation, or use Reset to restore it.",
"loadFailed":"Failed to load thresholds.",
"invalidValue":"Invalid value for {key}: must be a number",
"resetFailed":"Reset failed",
"networkErrorWhileResetting":"Network error while resetting",
"resetSectionConfirm":"Reset all \"{section}\" thresholds to recommended values?",
"resetAllConfirm":"Reset ALL thresholds to recommended values? This affects every section.",
"resetAllTitle":"Reset every threshold to its recommended value",
"resetSectionTitle":"Reset this section to recommended",
"recommended":"Recommended",
"warning":"Warning",
"critical":"Critical",
"ok":"OK",
"warn":"WARN",
"crit":"CRIT",
"ram":"RAM",
"swapCriticalOnly":"Swap (critical only)",
"sections":{
"cpu":{
"title":"CPU usage"
},
"memory":{
"title":"Memory & Swap"
},
"cpu_temperature":{
"title":"CPU temperature"
},
"disk_temperature":{
"title":"Disk temperature",
"description":"Per-class thresholds. Same units (°C), different defaults because each class tolerates a different range."
},
"host_storage":{
"title":"Disk space - host",
"description":"Applies to / and every mountpoint under /var/lib/vz, /mnt/* etc."
},
"lxc_rootfs":{
"title":"Disk space - LXC rootfs",
"description":"Per-container root disk, evaluated against the rootfs size from PVE."
},
"lxc_mount":{
"title":"LXC mount points",
"description":"Capacity of mountpoints inside running CTs (mp0, mp1, NFS, bind mounts). Excludes the rootfs; that is covered above."
},
"pve_storage":{
"title":"PVE storage capacity",
"description":"Block-style PVE storages: LVM, LVM-thin, ZFS-pool, RBD/Ceph, PBS. Filesystem-style storage is already covered by host disk thresholds."
},
"zfs_pool":{
"title":"ZFS pool capacity",
"description":"ZFS pools at host level, independent of PVE registration, so rpool and dedicated backup pools are also monitored."
"scanDescription":"Open your authenticator app and scan this code.",
"qrCodeAlt":"2FA QR code",
"manualKey":"Manual key",
"copyKey":"Copy key",
"verifyTitle":"Verify code",
"verifyDescription":"Enter the current 6-digit code from your app.",
"verifying":"Verifying...",
"verifyAndEnable":"Verify and enable",
"enabledTitle":"2FA is enabled.",
"enabledDescription":"Save the backup codes before you close this window.",
"saveCodesTitle":"Save your backup codes",
"saveCodesDescription":"Each code can be used once if you lose access to your authenticator app.",
"backupCodes":"Backup codes",
"copyAll":"Copy all",
"finish":"Finish"
},
"secureGateway":{
"title":"Secure Gateway",
"learnMore":"Learn more",
"noNetworkDetected":"No network detected",
"noNetworksDetected":"No networks were detected.",
"recommended":"Recommended",
"retry":"Retry",
"errors":{
"loadWizardFailed":"Failed to load Secure Gateway setup",
"updateFailed":"Failed to update Secure Gateway",
"networkUpdateFailed":"Network error while updating Secure Gateway",
"fieldRequired":"{field} is required.",
"deploymentFailed":"Deployment failed",
"ociRequiresPve":"Secure Gateway uses standard LXC and should work on this Proxmox host. If this keeps happening, check the backend logs.",
"authKeyRequired":"Enter a Tailscale auth key.",
"updateAuthKeyFailed":"Failed to update auth key",
"couldNotLoadSetupData":"Could not load setup data."
},
"messages":{
"updateApplied":"Update was applied.",
"preparingDeployment":"Preparing deployment...",
"creatingLxc":"Creating LXC container...",
"gatewayDeployed":"Secure Gateway deployed."
},
"logs":{
"empty":"No logs available.",
"failed":"Failed to load logs.",
"title":"Secure Gateway logs",
"description":"Recent service output from the gateway container."
},
"values":{
"never":"never",
"yesterdayAt":"yesterday at {time}",
"yes":"Yes",
"no":"No"
},
"wizard":{
"introTitle":"Secure remote access with Tailscale",
"introDescription":"Deploy a small LXC gateway so your devices can reach ProxMenux, Proxmox and selected local networks through your Tailscale tailnet.",
"whatYouGet":"What you get",
"benefitMonitorAnywhere":"Open the Monitor from anywhere on your tailnet.",
"benefitProxmoxUi":"Reach the Proxmox web UI without exposing port 8006.",
"benefitVmLxc":"Access selected VM and LXC networks when needed.",
"benefitEncryption":"Traffic stays encrypted through Tailscale.",
"benefitNoPorts":"No public port forwarding required.",
"tailscaleAccountBefore":"You need a Tailscale account and a pre-auth key from",
"reviewDeploy":"Review and deploy",
"reviewDescription":"Check the final settings before the LXC gateway is created.",
"storageLocation":"Storage location",
"storageDescription":"Choose where to store the gateway container.",
"gbAvailable":"{amount} GB available",
"configurationSummary":"Configuration summary",
"hostname":"Hostname",
"storage":"Storage",
"accessMode":"Access mode",
"accessModes":{
"hostOnly":"Proxmox only",
"proxmoxNetwork":"Full local network",
"customNetworks":"Custom networks"
},
"hostAccess":"Host access",
"networks":"Networks",
"exitNode":"Exit node",
"acceptRoutes":"Accept routes",
"important":"Important",
"approvalRequired":"After deployment, approve the advertised subnet routes in Tailscale Admin.",
"exitNodeApprovalRequired":"Exit Node mode also needs approval there.",
"showAfterDeploy":"We will show the exact approval steps after deployment.",
"setupTitle":"Secure Gateway setup"
},
"steps":{
"intro":{
"title":"Secure remote access",
"description":"Set up secure VPN access to your Proxmox server"
},
"auth":{
"title":"Tailscale authentication",
"description":"Connect the gateway to your Tailscale account"
},
"access":{
"title":"Access scope",
"description":"Choose what should be reachable through this gateway"
},
"options":{
"title":"Advanced options",
"description":"Additional routing settings"
},
"deploy":{
"title":"Deploy gateway",
"description":"Review and deploy"
}
},
"status":{
"connected":"Connected",
"stopped":"Stopped",
"error":"Error"
},
"installed":{
"description":"Secure Gateway is deployed and managed by the Monitor.",
"heroDescription":"A web dashboard and management layer for Proxmox VE — health monitoring, notifications, terminal, optimization tracker and more, packaged as a single AppImage.",
"project":{
"title":"Project",
"description":"Repository, documentation and community channels."
},
"support":{
"title":"Support & License",
"description":"ProxMenux is free and open source under the GPL-3.0 license. If it is useful to you, a one-off contribution helps keep it that way."
},
"license":{
"label":"GPL-3.0 license",
"description":"Free software — see the LICENSE file for the full text."
"description":"Your new monitoring tool for Proxmox. Discover the features that help you manage and supervise your infrastructure more easily."
},
"overview":{
"title":"System Overview",
"description":"Monitor your server in real time: CPU, memory, temperature, system load and more, all in one clear dashboard."
},
"storage":{
"title":"Storage Management",
"description":"See the status of your disks and storage: capacity, usage, SMART health, temperature and performance for each device."
},
"network":{
"title":"Network Metrics",
"description":"Monitor network traffic in real time, including active interfaces, transfer speeds and historical usage graphs."
},
"virtualMachines":{
"title":"Virtual Machines & Containers",
"description":"Keep VMs and LXC containers in one place. View status, assigned resources, current usage and quick controls."
},
"hardware":{
"title":"Hardware Information",
"description":"View server hardware details: CPU, RAM, GPU, disks, network, UPS and more, including models, serial numbers and status."
},
"logs":{
"title":"System Logs",
"description":"Access system logs, filter events, search for specific errors and download displayed logs when you need deeper analysis."
},
"future":{
"title":"Ready for the Future!",
"description":"ProxMenux Monitor is ready for new features and improvements, with more actions gradually moving into the web panel."
}
}
},
"releaseNotes":{
"dialogTitle":"Release Notes - Version {version}",
"title":"What's New in Version {version}",
"intro":"We've added new features and improvements to make ProxMenux Monitor even better.",
"gotIt":"Got it!",
"dontShowAgain":"Don't show again for this version",
"currentFeatures":{
"hostUpdate":"One-click host update from the Health Monitor. The new Update Now button in System Updates runs the Proxmox update flow inside a dashboard terminal, without leaving the browser.",
"mobileInstall":"In-app install prompt for mobile. First-time visitors on Android and iOS Safari now see simple steps for adding the Monitor to their home screen as a PWA."
}
},
"network":{
"actions":{
"viewDetails":"View details"
},
"loading":{
"title":"Loading network data...",
"description":"Scanning interfaces, bridges and traffic"
},
"errors":{
"serverUnavailableTitle":"Server is not available",
"serverUnavailableDescription":"Unable to connect to the monitor server. Please make sure the service is running and try again."
"inactiveDescription":"This interface is currently down. Network traffic statistics are not available.",
"bondConfiguration":"Bond Configuration",
"bridgeConfiguration":"Bridge Configuration"
},
"flow":{
"title":"Network Flow"
},
"chart":{
"invalidDataFormat":"Invalid data format received from server",
"loadError":"Error loading metrics"
},
"latency":{
"status":{
"excellent":"Excellent",
"good":"Good",
"fair":"Fair",
"poor":"Poor"
},
"timeframes":{
"hour":"1 Hour",
"sixHours":"6 Hours",
"day":"24 Hours",
"threeDays":"3 Days",
"week":"7 Days"
},
"targets":{
"gateway":"Gateway (Router)",
"gatewayShort":"Gateway",
"cloudflare":"Cloudflare (1.1.1.1)",
"cloudflareShort":"Cloudflare",
"google":"Google DNS (8.8.8.8)",
"googleShort":"Google DNS"
},
"actions":{
"stop":"Stop",
"testAgain":"Test Again",
"report":"Report"
},
"testingProgress":"Testing... {percent}%",
"secondsRemaining":"{seconds}s remaining",
"samplesCollected":"{count} samples collected",
"packetLossValue":"{value}% packet loss",
"collectingData":"Collecting data...",
"noRealtimeData":"No data yet. Click “Test Again” to start.",
"noDataForPeriod":"No latency data available for this period",
"collectionInterval":"Data is collected every 60 seconds",
"realTimeMode":"Real-time mode",
"realTimeModeDescription":"Tests run for 2 minutes with readings every 5 seconds. Run the test again afterward to add more samples. All data is included in the report.",
"reinstallViaPostInstall":"Reinstall via ProxMenux post-install: {label}",
"noUpdatesAvailable":"No updates available",
"none":"none",
"running":"running",
"stopped":"stopped",
"unused":"unused",
"unbound":"unbound",
"driversReady":"Drivers ready",
"driversNotInstalled":"Drivers not installed",
"programmed":"Programmed (runtime loaded)",
"unprogrammed":"Unprogrammed (runtime not loaded)",
"notInstalled":"not installed",
"detecting":"Detecting...",
"solidStateDevice":"Solid State Device",
"notSpecified":"Not specified"
},
"time":{
"yesterdayAt":"yesterday {time}"
},
"recommendations":{
"intel":"To get extended GPU monitoring information, please install the intel-gpu-tools or igt-gpu-tools package.",
"nvidia":"For NVIDIA GPUs, real-time monitoring requires the proprietary drivers (nvidia-driver package). Install them only if your GPU is used directly by the host.",
"amd":"To get extended GPU monitoring information for AMD GPUs, please install amdgpu_top. You can download it from: https://github.com/Umio-Yasuno/amdgpu_top",
"generic":"To get extended GPU monitoring information, please install the appropriate GPU monitoring tools for your hardware."
},
"deviceTypes":{
"graphics":"Graphics",
"graphicsCard":"Graphics Card",
"usb":"USB",
"usbController":"USB Controller",
"audio":"Audio",
"audioController":"Audio Controller",
"network":"Network",
"networkController":"Network Controller",
"ethernet":"Ethernet",
"wireless":"Wi-Fi",
"wirelessController":"Wireless Controller",
"wifi":"Wi-Fi",
"storage":"Storage",
"storageController":"Storage Controller",
"hid":"HID",
"vendorSpecific":"Vendor Specific",
"communications":"Communications",
"integrated":"Integrated",
"discrete":"Discrete"
},
"gpu":{
"monitoringTitle":"GPU Real-Time Monitoring",
"sriovVirtualFunction":"SR-IOV Virtual Function",
"sriovVirtualFunctionDescription":"This device is a Virtual Function spawned by a Physical Function. Per-VF telemetry (temperature, utilization, memory) is not exposed by the kernel — open the parent PF to see aggregate GPU metrics.",
"virtualFunctionDetail":"Virtual Function Detail",
"noActiveProcesses":"No active processes using the GPU",
"virtualFunctions":"Virtual Functions",
"switchModeVmTitle":"GPU in Switch Mode VM",
"switchModeVmDescription":"This GPU is assigned to a virtual machine via VFIO passthrough. Real-time monitoring is not available from the host because the GPU is controlled by the VM.",
"extendedMonitoringUnavailable":"Extended Monitoring Not Available"
"recoveryPassphraseRequired":"Recovery passphrase is required.",
"repoNameAndSnapshotRequired":"Repository name and snapshot are required.",
"runFailed":"Run failed: {error}",
"snapshotInfoMissing":"Snapshot information is missing.",
"toggleFailed":"Could not change job state: {error}"
},
"extraPaths":{
"absolutePathHintAfter":"— the path must exist on this host exactly as typed.",
"absolutePathHintBefore":"Use the full absolute path.",
"absolutePathHintMiddle":"is not the same as",
"descriptionAfter":"(manual or scheduled, default or custom profile) on top of the default profile list. Useful for app data, custom config folders, and similar paths. ({count} configured)",
"descriptionBefore":"Paths added here are included in",
"empty":"No custom paths yet — backups use the default profile only.",
"encryptedCopyAvailable":"Encrypted key recovery copy is available in PBS.",
"keyfileMissingTitle":"PBS keyfile is missing",
"recoverArrow":"Recover →"
},
"restore":{
"ackAfter":"the VMs, LXCs and components listed above. This is irreversible.",
"ackBefore":"I understand that Complete restore will",
"afterRebootHint":"After the reboot, this Backups tab will show live post-restore progress with estimated time, per-component status, log tail and rollback delta. If Telegram/Discord/ntfy notifications are configured, you'll also receive the \"Host restore finished\" event.",
"blockedPathsHint":"Kernel/boot-tied paths are grayed out and cannot be selected — target runs a newer kernel.",
"chooseModeTitle":"Restore — choose mode",
"complete":"Complete",
"completeDescription":"Restore everything from the backup.",
"completeDescriptionAfter":"in the shell TUI menu. The terminal that opens next will still ask you to confirm safe-only vs safe+reboot vs all-at-once before touching the host.",
"completeDescriptionBefore":"Replays everything in the backup. Equivalent to picking",
"completeTitle":"Complete restore",
"crossKernelDescription":"Both Complete and Custom restore automatically skip kernel/boot-tied paths to avoid a kernel panic on next boot. Everything else (VMs, LXCs, network, components, custom paths) restores normally.",
"customByPathsDescription":"Pick exactly which paths to restore. Lists what's actually in this backup (default profile + your custom paths).",
"customByPathsTitle":"Custom restore by paths",
"customPickDescriptionAfter":"env var — same downstream code as the TUI. Reboot-required paths (kernel, modules, fstab, …) will be detected by the bash flow and you can schedule them for next boot from there.",
"customPickDescriptionBefore":"Pick the paths to restore. Your selection feeds",
"customPickDescriptionMiddle":"via the",
"destructiveTitle":"Complete restore will REMOVE the following (created after the backup)",
"noPathsMatch":"No paths match the filter.",
"noRestorablePaths":"This backup carries no restorable paths — only Complete restore is meaningful here.",
"olderThanTargetKernel":"is older than target kernel",
"operatorConfigDescription":"The following operator-authored settings will be merged into the target automatically, without touching kernel-tied defaults. Runs on both Complete and Custom restore.",
"operatorConfigTitle":"Operator config re-applied via kernel-agnostic merge",
"pathsInBackup":"({count} paths in backup)",
"pathsSelected":"{count} paths selected",
"pathsSkipped":"Paths that will be skipped ({count})",
"permanentlyDelete":"permanently delete",
"pickPathError":"Pick at least one path to continue.",
"skippedPathTitle":"Skipped: kernel-tied path, target runs a newer kernel",
"terminalTitle":"Restore terminal",
"tickAckToEnable":"Tick the acknowledgement above to enable."
},
"retention":{
"daily":"Daily",
"hourly":"Hourly",
"keepDaily":"Keep daily",
"keepHourly":"Keep hourly",
"keepLast":"Keep last",
"keepMonthly":"Keep monthly",
"keepWeekly":"Keep weekly",
"keepYearly":"Keep yearly",
"last":"Last",
"monthly":"Monthly",
"none":"None",
"noneAccumulate":"No retention limits — backups accumulate until manually removed.",
"title":"Retention",
"weekly":"Weekly",
"yearly":"Yearly",
"zeroDisables":"0 disables this limit."
},
"rollback":{
"components":"Components:",
"configsIncluded":"Configurations included in backup",
"lxcConfigs":"LXC configs:",
"noDifferences":"No host-state differences detected — the backup state matches the current host (or the backup didn't include /etc/pve).",
"pveOnlyHint":"Only the /etc/pve config is restored — disk images stay where they live.",
"vmConfigs":"VM configs:"
},
"schedule":{
"advancedHelpAfter":"for exact systemd syntax.",
"advancedHelpBefore":"Use",
"advancedHelpMiddle":"and",
"advancedOption":"Advanced",
"borgTimerOnly":"Borg jobs are scheduled by Monitor timers.",
"dailyOption":"Daily",
"everyDayAt":"Every day at {time}",
"everyDayAtMidnight":"Every day at midnight",
"everyHourAtMinute":"Every hour at minute {minute}",
"everyHourAtMinuteZero":"Every hour",
"everyMinute":"Every minute",
"everyMondayAtMidnight":"Every Monday at midnight",
"firstDayMonthly":"First day of every month",
"hourlyHelpAfter":"runs once per hour.",
"hourlyHelpBefore":"At minute",
"hourlyHelpMiddle":"the timer",
"hourlyOption":"Hourly",
"howToSchedule":"How should it run?",
"janFirst":"January 1 every year",
"modeHelp":"Choose a simple schedule or enter a systemd OnCalendar expression.",
"monthlyOption":"Monthly",
"monthlySkipHelp":"If a month has fewer days, systemd skips that run.",
"pickAtLeastOneDay":"Pick at least one day.",
"pickFrequency":"Pick frequency",
"preview":"Preview",
"rawOnCalendar":"{value} (systemd OnCalendar)",
"title":"Schedule",
"weekdaysAt":"{days} at {time}",
"weeklyOption":"Weekly"
},
"status":{
"attached":"attached",
"disabled":"disabled",
"legacy":"legacy",
"manual":"manual",
"manualOneShot":"manual / one-shot",
"ok":"ok",
"running":"running",
"scheduled":"scheduled"
},
"taskStates":{
"completed":"completed",
"failed":"failed",
"packing":"packing",
"queued":"queued",
"restoring":"restoring",
"running":"running"
},
"usb":{
"description":"Mount USB drives so they can be picked as a local or Borg target. Drives that already had a filesystem can be remounted as-is; raw drives (no partition table) can be wiped and formatted to",
"drivesDetected":"{count} drives detected",
"empty":"No USB drives detected. Plug one in and refresh — Monitor scans for them automatically every 30s.",
"formatAndUse":"Format and use",
"formatDescription":"This will wipe the selected disk and create a single ext4 partition.",
"formatDrive":"Format drive",
"formatDriveQuestion":"Wipe and format this disk?",
"formatTitle":"Wipe + format this disk as ext4",
"formatWarning":"Everything on the disk will be destroyed. This cannot be undone.",
"mountAndUse":"Mount and use",
"mounted":"Mounted",
"noneDetected":"No USB drives detected.",
"repartitionHint":"The disk will be re-partitioned (GPT + single ext4 partition) and mounted automatically.",
"scanning":"Scanning USB drives...",
"stateEmpty":"no filesystem",
"stateMounted":"mounted",
"stateUnmounted":"not mounted",
"typeDeviceExactly":"Type the device path EXACTLY to confirm:",
"typeDeviceToConfirm":"Type the device path to confirm",
"unformatted":"Unformatted",
"unmountConfirm":"Unmount {path}? Any backup job pointing at this path will fail until you remount it.",
"unmounted":"Unmounted",
"uuidTitle":"uuid: {uuid}",
"wipeAndFormat":"Wipe and format"
},
"validation":{
"invalidLabel":"Invalid label."
},
"weekdays":{
"friday":"Friday",
"monday":"Monday",
"saturday":"Saturday",
"short":{
"fri":"Fri",
"mon":"Mon",
"sat":"Sat",
"sun":"Sun",
"thu":"Thu",
"tue":"Tue",
"wed":"Wed"
},
"sunday":"Sunday",
"thursday":"Thursday",
"tuesday":"Tuesday",
"wednesday":"Wednesday"
}
},
"healthStatus":{
"title":"System health status",
"description":"Detailed checks of all system components",
"importedForcedHelp":"The new hostid was written to the pool label — the next boot should import cleanly.",
"skippedPartial":"Skipped (some disks missing)",
"skippedPartialHelp":"Some vdev disks were not found under /dev/disk/by-id. The pool was not imported to avoid a degraded auto-import. Fix the disks or import it manually with zpool import.",
"skippedMissing":"Skipped (no disks present)",
"skippedMissingHelp":"None of this pool’s disks are on this host. Move the disks here or import the pool from another host.",
"importFailed":"Import failed",
"importFailedHelp":"ZFS rejected the import even with -f. Check zpool import and the log below.",
"logPath":"Log: {path}"
},
"history":{
"title":"Past restores",
"description":"Restore runs archived after boot. The latest 20 are kept.",
"empty":"No past restores recorded."
},
"badges":{
"bootWarnings":"Boot warnings: {count}",
"zfsPools":"ZFS pools: {count}",
"needAttention":"needs attention: {count}"
},
"actions":{
"details":"Details",
"history":"History",
"dismiss":"Dismiss"
},
"summary":{
"guests":"Guests",
"bindMountStubs":"Bind-mount stubs",
"staleNodesCleaned":"Stale nodes cleaned",
"components":"Components"
}
},
"terminal":{
"connected":"Connected",
"disconnected":"Disconnected",
"terminalCount":"{count} / 4 terminals",
"stackedLayout":"Stacked view (rows)",
"gridLayout":"2×2 grid view",
"new":"New",
"search":"Search",
"clear":"Clear",
"searchCommands":"Search commands",
"onlineSource":"Online — using the cheat.sh API",
"offlineSource":"Offline — using local commands",
"searchDescription":"Search for Linux and Proxmox commands",