mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-01 02:12:12 +00:00
i18n: complete Slovak Monitor and CLI messages
This commit is contained in:
@@ -1530,7 +1530,7 @@ export function NotificationSettings() {
|
||||
<Input
|
||||
type={showSecrets["tg_token"] ? "text" : "password"}
|
||||
className={`h-7 text-xs font-mono ${!editMode ? "opacity-50" : ""}`}
|
||||
placeholder="7595377878:AAGE6Fb2cy... (with or without 'bot' prefix)"
|
||||
placeholder={t("settings.notifications.ui.botTokenPlaceholder")}
|
||||
value={secretValue("tg_token", config.channels.telegram?.bot_token || "")}
|
||||
onChange={e => updateChannel("telegram", "bot_token", e.target.value)}
|
||||
disabled={!editMode}
|
||||
@@ -1542,6 +1542,7 @@ export function NotificationSettings() {
|
||||
{showSecrets["tg_token"] ? <EyeOff className="h-3 w-3" /> : <Eye className="h-3 w-3" />}
|
||||
</button>
|
||||
</div>
|
||||
<p className="text-[10px] text-muted-foreground">{t("settings.notifications.ui.botTokenHelp")}</p>
|
||||
</div>
|
||||
<div className="space-y-1.5">
|
||||
<Label className="text-[11px] text-muted-foreground">{t("settings.notifications.ui.chatId")}</Label>
|
||||
|
||||
@@ -9,6 +9,7 @@ import { NotificationSettings } from "./notification-settings"
|
||||
import { HealthThresholds } from "./health-thresholds"
|
||||
import { LxcUpdateDetection } from "./lxc-update-detection"
|
||||
import { DiskExclusions } from "./disk-exclusions"
|
||||
import { optimizationDescription, optimizationToolName } from "../lib/optimization-descriptions"
|
||||
import { ScriptTerminalModal } from "./script-terminal-modal"
|
||||
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "./ui/select"
|
||||
import { Switch } from "./ui/switch"
|
||||
@@ -580,7 +581,7 @@ export function Settings() {
|
||||
if (entries.length === 0) return
|
||||
const batch = entries.map(e => `${e.source}:${e.function}:${e.key}`).join("\n")
|
||||
const title = entries.length === 1
|
||||
? t("settings.optimizations.updateOneTitle", { name: entries[0].name })
|
||||
? t("settings.optimizations.updateOneTitle", { name: optimizationToolName(entries[0].key, entries[0].name, t) })
|
||||
: t("settings.optimizations.updateManyTitle", { count: entries.length })
|
||||
const description = entries.length === 1
|
||||
? t("settings.optimizations.updateOneDescription", { functionName: entries[0].function, source: entries[0].source })
|
||||
@@ -2117,7 +2118,7 @@ export function Settings() {
|
||||
<div className={`w-2 h-2 rounded-full flex-shrink-0 ${
|
||||
hasUpdate ? 'bg-purple-400' : (isDeprecated ? 'bg-amber-500' : 'bg-green-500')
|
||||
}`} />
|
||||
<span className="text-sm font-medium truncate">{tool.name}</span>
|
||||
<span className="text-sm font-medium truncate">{optimizationToolName(tool.key, tool.name, t)}</span>
|
||||
{isDeprecated && (
|
||||
<span className="text-[9px] uppercase tracking-wider text-amber-500 bg-amber-500/10 border border-amber-500/30 px-1.5 py-0.5 rounded flex-shrink-0">
|
||||
{t("settings.optimizations.legacy")}
|
||||
@@ -2133,7 +2134,7 @@ export function Settings() {
|
||||
<button
|
||||
onClick={(e) => { e.stopPropagation(); handleSingleToolUpdate(tool) }}
|
||||
className="text-purple-300 hover:text-purple-200 transition-colors"
|
||||
title={t("settings.optimizations.updateToolTitle", { name: tool.name, version: tool.available_version || "?" })}
|
||||
title={t("settings.optimizations.updateToolTitle", { name: optimizationToolName(tool.key, tool.name, t), version: tool.available_version || "?" })}
|
||||
>
|
||||
<ArrowUpCircle className="h-4 w-4" />
|
||||
</button>
|
||||
@@ -2289,13 +2290,13 @@ export function Settings() {
|
||||
/>
|
||||
<div className="flex-1 min-w-0">
|
||||
<div className="flex items-center gap-2 flex-wrap">
|
||||
<span className="text-sm font-medium">{tool.name}</span>
|
||||
<span className="text-sm font-medium">{optimizationToolName(tool.key, tool.name, t)}</span>
|
||||
<span className="text-[10px] text-purple-300 bg-purple-500/15 border border-purple-500/30 px-1.5 py-0.5 rounded font-mono">
|
||||
v{tool.version || '1.0'} → v{tool.available_version || '?'}
|
||||
</span>
|
||||
</div>
|
||||
{tool.description && (
|
||||
<p className="text-xs text-muted-foreground mt-1 leading-snug">{tool.description}</p>
|
||||
<p className="text-xs text-muted-foreground mt-1 leading-snug">{optimizationDescription(tool.description, t)}</p>
|
||||
)}
|
||||
</div>
|
||||
</label>
|
||||
|
||||
@@ -2,6 +2,12 @@
|
||||
* API Configuration for ProxMenux Monitor
|
||||
* Handles API URL generation with automatic proxy detection
|
||||
*/
|
||||
// Resolve wording only for a generic transport failure. Normal responses and
|
||||
// backend error payloads keep the transport free of locale-loading work.
|
||||
async function apiFailure(...args: Parameters<typeof import("./api-errors").apiFailure>): Promise<string> {
|
||||
const messages = await import("./api-errors")
|
||||
return messages.apiFailure(...args)
|
||||
}
|
||||
|
||||
/**
|
||||
* API Server Port Configuration
|
||||
@@ -114,7 +120,7 @@ export async function fetchApi<T>(endpoint: string, options?: RequestInit): Prom
|
||||
hadToken = true
|
||||
}
|
||||
if (!hadToken) {
|
||||
throw new Error(`Unauthorized: ${endpoint}`)
|
||||
throw new Error(await apiFailure("unauthorized", { endpoint }))
|
||||
}
|
||||
try {
|
||||
localStorage.removeItem("proxmenux-auth-token")
|
||||
@@ -131,7 +137,7 @@ export async function fetchApi<T>(endpoint: string, options?: RequestInit): Prom
|
||||
window.location.reload()
|
||||
}
|
||||
}
|
||||
throw new Error(`Unauthorized: ${endpoint}`)
|
||||
throw new Error(await apiFailure("unauthorized", { endpoint }))
|
||||
}
|
||||
// Try to surface the backend's JSON error payload instead of a
|
||||
// bare `500 INTERNAL SERVER ERROR`. The Flask routes consistently
|
||||
@@ -168,7 +174,7 @@ export async function fetchApi<T>(endpoint: string, options?: RequestInit): Prom
|
||||
throw parseErr
|
||||
}
|
||||
}
|
||||
throw new Error(`API request failed: ${response.status} ${response.statusText}`)
|
||||
throw new Error(await apiFailure("http", { status: response.status, statusText: response.statusText }))
|
||||
}
|
||||
|
||||
// Check content type to ensure we're getting JSON
|
||||
@@ -176,13 +182,13 @@ export async function fetchApi<T>(endpoint: string, options?: RequestInit): Prom
|
||||
if (!contentType || !contentType.includes("application/json")) {
|
||||
const text = await response.text()
|
||||
console.error("fetchApi: Expected JSON but got:", contentType, "- Body preview:", text.substring(0, 200))
|
||||
throw new Error(`Expected JSON response but got ${contentType || "unknown content type"}`)
|
||||
throw new Error(await apiFailure("unexpectedContentType", { contentType: contentType || await apiFailure("unknownContentType") }))
|
||||
}
|
||||
|
||||
try {
|
||||
return await response.json()
|
||||
} catch (jsonError) {
|
||||
console.error("fetchApi: JSON parse error for", endpoint, "-", jsonError)
|
||||
throw new Error(`Invalid JSON response from ${endpoint}`)
|
||||
throw new Error(await apiFailure("invalidJson", { endpoint }))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
import enMessages from "../messages/en/common.json"
|
||||
import skMessages from "../messages/sk/common.json"
|
||||
import { detectBrowserLanguage, LANGUAGE_STORAGE_KEY } from "./i18n/languages"
|
||||
|
||||
type Failure = keyof typeof enMessages.apiErrors
|
||||
|
||||
// fetchApi also runs outside React hooks. Read the provider's current document
|
||||
// language, with its stored/browser preference as a fallback.
|
||||
export function apiFailure(key: Failure, params: Record<string, string | number> = {}): string {
|
||||
let language = typeof document === "undefined" ? "" : document.documentElement?.lang
|
||||
if (!language && typeof window !== "undefined") {
|
||||
try { language = window.localStorage.getItem(LANGUAGE_STORAGE_KEY) || "" } catch { /* private browsing */ }
|
||||
}
|
||||
language ||= detectBrowserLanguage()
|
||||
const messages = language === "sk" ? skMessages.apiErrors : enMessages.apiErrors
|
||||
return messages[key].replace(/\{(\w+)\}/g, (match, name) => params[name] === undefined ? match : String(params[name]))
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
import enMessages from "../messages/en/common.json"
|
||||
|
||||
type Translate = (key: string, params?: Record<string, string | number>) => string
|
||||
|
||||
// Descriptions are live server metadata. Translate only exact known wording;
|
||||
// a newer script description must remain visible rather than become stale text.
|
||||
export function optimizationDescription(description: string, t: Translate): string {
|
||||
const entries = Object.entries(enMessages.settings.optimizations.toolDescriptions)
|
||||
const match = entries.find(([, english]) => english === description)
|
||||
return match ? t(`settings.optimizations.toolDescriptions.${match[0]}`) : description
|
||||
}
|
||||
|
||||
// Unknown tools retain the server's name until their key is translated.
|
||||
export function optimizationToolName(tool: string, fallback: string, t: Translate): string {
|
||||
return Object.prototype.hasOwnProperty.call(enMessages.settings.optimizations.toolNames, tool)
|
||||
? t(`settings.optimizations.toolNames.${tool}`)
|
||||
: fallback
|
||||
}
|
||||
@@ -2231,7 +2231,9 @@
|
||||
"inactiveFooter": "Enable notifications to receive system, health and security alerts through the configured channels.",
|
||||
"notificationLanguage": "Notification language",
|
||||
"selectNotificationLanguage": "Select notification language",
|
||||
"notificationLanguageHint": "Used for deterministic runtime notifications even when AI is disabled."
|
||||
"notificationLanguageHint": "Used for deterministic runtime notifications even when AI is disabled.",
|
||||
"botTokenPlaceholder": "7595377878:AAGE6Fb2cy...",
|
||||
"botTokenHelp": "The token can include the 'bot' prefix or be entered without it."
|
||||
},
|
||||
"ai": {
|
||||
"title": "AI enhancement",
|
||||
@@ -2373,7 +2375,73 @@
|
||||
"availableUpdates": "Available updates",
|
||||
"availableUpdatesDescription": "{count} optimizations can be updated to a newer version.",
|
||||
"selectedCount": "{selected} of {total} selected",
|
||||
"updateSelected": "Update selected"
|
||||
"updateSelected": "Update selected",
|
||||
"toolDescriptions": {
|
||||
"subscriptionAuto": "Patch the Proxmox web UI to suppress the subscription dialog and register a successful patch.",
|
||||
"timeSync": "Detect timezone from public IP and enable systemd time sync (NTP).",
|
||||
"aptLanguages": "Stop APT from downloading translation files to speed up updates.",
|
||||
"journald": "Cap journald size, raise rate limit and force info-level logging so the log viewer and Fail2Ban work.",
|
||||
"logrotate": "Replace logrotate.conf with a Log2RAM-friendly profile (daily rotation, copytruncate).",
|
||||
"systemLimits": "Raise inotify watches, file descriptors, process keys and PID limits to enterprise levels.",
|
||||
"memory": "Tune swappiness, dirty page ratios and compaction proactiveness for VM hosts without overriding the kernel's memory-overcommit policy.",
|
||||
"kernelPanic": "Auto-reboot on kernel panic / oops / hardlockup; write crash dumps to /var/crash.",
|
||||
"aptIpv4": "Force APT to use IPv4 to avoid stalls on hosts with broken IPv6 connectivity.",
|
||||
"network": "Tune TCP buffers, somaxconn, IPv4 hardening and disable rp_filter on fw bridges (PVE 9 compatible).",
|
||||
"bashrc": "Install and safely migrate the managed ProxMenux Bash prompt and aliases while preserving or selecting the short/full working-directory style.",
|
||||
"log2ramAuto": "Install Log2RAM with size auto-tuned to host RAM (128M/256M/512M); SSD/M.2 detection skips on rotational disks.",
|
||||
"zfsAutotrim": "Enable ZFS autotrim on detected pools and record only pools changed by ProxMenux.",
|
||||
"persistentNetwork": "Pin NIC names to MAC addresses via systemd .link files so kernel updates don't shuffle interface names.",
|
||||
"kexec": "Install kexec-tools and add a Ctrl+Alt+K hotkey + systemd unit for fast reboots that skip BIOS/POST.",
|
||||
"amd": "Detect AMD EPYC/Ryzen CPUs and apply microcode + IOMMU + KVM-specific kernel boot params.",
|
||||
"openVSwitch": "Install OpenVSwitch for software-defined networking inside VMs and containers.",
|
||||
"tcpBbr": "Enable TCP Fast Open (clients + server) and BBR congestion control for better latency under load.",
|
||||
"ceph": "Install Ceph (client + server packages) for distributed RBD/CephFS storage; PVE 8/9 aware repo selection.",
|
||||
"zfsArc": "Cap ZFS ARC max using Proxmox VE's 10%-of-RAM policy (16 GiB ceiling), safely reconcile conflicting module settings and report the pool-size guideline before applying it.",
|
||||
"zfsSnapshots": "Install zfs-auto-snapshot with cron schedules for hourly/daily/weekly/monthly snapshots.",
|
||||
"rpc": "Disable rpcbind service/socket while preserving their exact previous systemd state for rollback.",
|
||||
"pigz": "Replace gzip with pigz (parallel implementation) for faster vzdump backup compression.",
|
||||
"guestAgent": "Detect the host's hypervisor (qemu/vmware/hyperv/virtualbox) and install the matching guest agent.",
|
||||
"vfio": "Enable IOMMU and load VFIO modules to allow GPU/PCI passthrough into VMs.",
|
||||
"motd": "Add the ProxMenux MOTD banner while preserving the original file contents or absence for rollback.",
|
||||
"subscriptionCustom": "Patch the Proxmox web UI to suppress the \"no valid subscription\" dialog (PVE 8 + 9 variants supported).",
|
||||
"zram": "Enable an opt-in ZRAM swap profile sized to one tenth of RAM.",
|
||||
"backupLimits": "Lift vzdump bandwidth/IO limits so backups run at the storage's real throughput.",
|
||||
"ovh": "Detect OVH-rented hardware via whois lookup and install OVH Real-Time Monitoring (no-op on non-OVH).",
|
||||
"ha": "Enable the Proxmox HA stack (pve-ha-lrm, pve-ha-crm, corosync) for cluster failover.",
|
||||
"fastfetch": "Install Fastfetch system summary tool with the ProxMenux logo + status block as the SSH login banner.",
|
||||
"figurine": "Install Figurine (ASCII-art hostname banner) and wire it into the SSH login flow.",
|
||||
"log2ramCustom": "Install Log2RAM with user-chosen RAM size; prompts for size and SSD/M.2 awareness before applying.",
|
||||
"systemUtilities": "Install selected system utilities and track only packages that were newly added by ProxMenux."
|
||||
},
|
||||
"toolNames": {
|
||||
"subscription_banner": "Subscription Banner Removal",
|
||||
"time_sync": "Time Synchronization",
|
||||
"apt_languages": "APT Language Skip",
|
||||
"journald": "Journald Optimization",
|
||||
"logrotate": "Logrotate Optimization",
|
||||
"system_limits": "System Limits Increase",
|
||||
"memory_settings": "Memory Settings Optimization",
|
||||
"zram_swap": "ZRAM Swap Profile",
|
||||
"kernel_panic": "Kernel Panic Configuration",
|
||||
"apt_ipv4": "APT IPv4 Force",
|
||||
"kexec": "kexec for quick reboots",
|
||||
"rpc": "RPC / rpcbind Disable",
|
||||
"motd": "Custom MOTD Banner",
|
||||
"system_utils": "System Utilities",
|
||||
"network_optimization": "Network Optimizations",
|
||||
"bashrc_custom": "Bashrc Customization",
|
||||
"figurine": "Figurine",
|
||||
"fastfetch": "Fastfetch",
|
||||
"log2ram": "Log2ram (SSD Protection)",
|
||||
"zfs_autotrim": "ZFS Autotrim",
|
||||
"amd_fixes": "AMD CPU (Ryzen/EPYC) fixes",
|
||||
"persistent_network": "Setting persistent network interfaces",
|
||||
"vfio_iommu": "VFIO/IOMMU Passthrough",
|
||||
"lvm_repair": "LVM PV Headers Repair",
|
||||
"repo_cleanup": "Repository Cleanup",
|
||||
"proxmox_repos": "Proxmox APT Repositories",
|
||||
"entropy": "Entropy Generation (haveged)"
|
||||
}
|
||||
},
|
||||
"healthThresholds": {
|
||||
"title": "Health Monitor Thresholds",
|
||||
@@ -6617,5 +6685,12 @@
|
||||
"pbsWebInterface": "PBS web interface",
|
||||
"changeAddress": "Change address",
|
||||
"cancel": "Cancel"
|
||||
},
|
||||
"apiErrors": {
|
||||
"http": "API request failed: {status} {statusText}",
|
||||
"unexpectedContentType": "Expected JSON response but got {contentType}",
|
||||
"unknownContentType": "unknown content type",
|
||||
"invalidJson": "Invalid JSON response from {endpoint}",
|
||||
"unauthorized": "Unauthorized: {endpoint}"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -820,7 +820,7 @@
|
||||
"idleTitle": "Nečítaj, kým ho nič nepoužíva, aby sa to mohlo roztočiť. Jeho teplota sa znova zobrazí, akonáhle sa disk používa.",
|
||||
"diskExcluded": "Vylúčené",
|
||||
"diskExcludedTitle": "Vylúčené z periodických čítania v Nastaveniach.",
|
||||
"temperatureNoDisks": "No disks",
|
||||
"temperatureNoDisks": "Žiadne disky",
|
||||
"temperatureNormal": "Teploty normálne",
|
||||
"temperatureHighCount": "Vysoké teploty: {count}",
|
||||
"temperatureCriticalCount": "Kritické teploty: {count}",
|
||||
@@ -2156,7 +2156,9 @@
|
||||
"appriseSlackDocs": "Formáty URL a nastavenie Slack",
|
||||
"appriseMatrixSteps": "Použite účet pre oznámenia, ktorý môže odosielať správy do miestnosti. Nahraďte vzorového používateľa, heslo, domovský server a úplné ID miestnosti; špeciálne znaky v prihlasovacích údajoch zakódujte pre URL. Schéma matrixs používa HTTPS. Podporu tokenov, SSO a šifrovaných miestností v nainštalovanej verzii Apprise nájdete v dokumentácii.",
|
||||
"appriseMatrixDocs": "Formáty URL a nastavenie Matrix",
|
||||
"appriseServiceFinish": "Povoľte Apprise, zadajte svoju URL, vyberte kategórie oznámení alebo jednotlivé udalosti, uložte a potom použite Odoslať test. Tieto príklady nemenia uloženú URL. Tento kanál Apprise má jeden cieľ; pre viac služieb naraz použite API Apprise."
|
||||
"appriseServiceFinish": "Povoľte Apprise, zadajte svoju URL, vyberte kategórie oznámení alebo jednotlivé udalosti, uložte a potom použite Odoslať test. Tieto príklady nemenia uloženú URL. Tento kanál Apprise má jeden cieľ; pre viac služieb naraz použite API Apprise.",
|
||||
"botTokenPlaceholder": "7595377878:AAGE6Fb2cy...",
|
||||
"botTokenHelp": "Token môže byť s prefixom „bot“ alebo bez neho."
|
||||
},
|
||||
"ai": {
|
||||
"title": "AI vylepšenie",
|
||||
@@ -2284,21 +2286,87 @@
|
||||
"emptyTitle": "Zatiaľ nie sú nainštalované žiadne systémové optimalizácie",
|
||||
"emptyDescription": "Spustite ProxMenux a nastavte systémové optimalizácie",
|
||||
"installedTools": "Nainštalované nástroje",
|
||||
"activeCount": "{count} aktívne",
|
||||
"activeCount": "Aktívne: {count}",
|
||||
"viewUpdates": "Zobraziť dostupné aktualizácie",
|
||||
"updateCount": "{count} aktualizácií",
|
||||
"updateCount": "Aktualizácie: {count}",
|
||||
"updateOneTitle": "Aktualizovať: {name}",
|
||||
"updateManyTitle": "Aktualizovať {count} optimalizácií",
|
||||
"updateManyTitle": "Aktualizácia optimalizácií ({count})",
|
||||
"updateOneDescription": "Znova sa spustí {functionName} z toku {source}.",
|
||||
"updateManyDescription": "Postupne sa spustí {count} post-install funkcií.",
|
||||
"updateManyDescription": "Počet funkcií, ktoré sa postupne spustia: {count}.",
|
||||
"legacySourceTitle": "Staršia optimalizácia - kliknutím zobrazíte zdroj",
|
||||
"sourceTitle": "Kliknutím zobrazíte zdrojový kód",
|
||||
"legacy": "staršie",
|
||||
"updateToolTitle": "Aktualizovať {name} na v{version}",
|
||||
"availableUpdates": "Dostupné aktualizácie",
|
||||
"availableUpdatesDescription": "{count} optimalizácií sa dá aktualizovať na novšiu verziu.",
|
||||
"availableUpdatesDescription": "Nástroje s dostupnou novšou verziou: {count}.",
|
||||
"selectedCount": "Vybrané {selected} z {total}",
|
||||
"updateSelected": "Aktualizovať vybrané"
|
||||
"updateSelected": "Aktualizovať vybrané",
|
||||
"toolDescriptions": {
|
||||
"subscriptionAuto": "Upraví web Proxmoxu tak, aby nezobrazoval upozornenie na predplatné, a zaznamená úspešnú úpravu.",
|
||||
"timeSync": "Zistí časové pásmo podľa verejnej IP adresy a zapne synchronizáciu času cez systemd (NTP).",
|
||||
"aptLanguages": "Vypne sťahovanie prekladových súborov APT a zrýchli aktualizácie.",
|
||||
"journald": "Obmedzí veľkosť journald, zvýši limit správ a zapne úroveň info, aby fungoval prehliadač záznamov aj Fail2Ban.",
|
||||
"logrotate": "Nahradí logrotate.conf profilom vhodným pre Log2RAM (denná rotácia, copytruncate).",
|
||||
"systemLimits": "Zvýši limity sledovaní inotify, otvorených súborov, kľúčov procesov a PID pre náročnú prevádzku.",
|
||||
"memory": "Upraví swappiness, podiel neuložených stránok a aktívne zhusťovanie pamäte pre VM servery bez zmeny pravidiel jadra pre nadmerné prideľovanie pamäte.",
|
||||
"kernelPanic": "Zapne automatický reštart pri kernel panic, oops alebo hardlockup a uloží výpisy pádu do /var/crash.",
|
||||
"aptIpv4": "Vynúti IPv4 pre APT, aby sa predišlo čakaniu pri nefunkčnom pripojení IPv6.",
|
||||
"network": "Upraví TCP vyrovnávacie pamäte, somaxconn a zabezpečenie IPv4; vypne rp_filter na firewallových mostoch (kompatibilné s PVE 9).",
|
||||
"bashrc": "Nainštaluje a bezpečne prenesie spravovaný Bash prompt a aliasy ProxMenuxu so zachovaním alebo výberom krátkej či úplnej cesty pracovného priečinka.",
|
||||
"log2ramAuto": "Nainštaluje Log2RAM s veľkosťou podľa RAM servera (128M/256M/512M); pri rotačných diskoch vynechá detekciu SSD/M.2.",
|
||||
"zfsAutotrim": "Zapne ZFS autotrim na nájdených pooloch a zaznamená iba pooly zmenené ProxMenuxom.",
|
||||
"persistentNetwork": "Priradí názvy sieťových rozhraní k MAC adresám cez súbory systemd .link, aby ich aktualizácie jadra nemenili.",
|
||||
"kexec": "Nainštaluje kexec-tools a pridá skratku Ctrl+Alt+K aj službu systemd na rýchly reštart s vynechaním BIOS/POST.",
|
||||
"amd": "Rozpozná procesory AMD EPYC/Ryzen a nastaví mikrokód aj parametre jadra pre IOMMU a KVM.",
|
||||
"openVSwitch": "Nainštaluje OpenVSwitch na softvérovo riadené siete vo VM a kontajneroch.",
|
||||
"tcpBbr": "Zapne TCP Fast Open pre klienta aj server a riadenie zahltenia BBR na zníženie oneskorenia pri záťaži.",
|
||||
"ceph": "Nainštaluje klientské aj serverové balíky Ceph pre úložisko RBD/CephFS; repozitár vyberie podľa PVE 8/9.",
|
||||
"zfsArc": "Obmedzí ZFS ARC podľa pravidla Proxmox VE na 10 % RAM (najviac 16 GiB), bezpečne zosúladí konfliktné nastavenia modulu a pred použitím zobrazí odporúčanie podľa veľkosti poolu.",
|
||||
"zfsSnapshots": "Nainštaluje zfs-auto-snapshot s hodinovými, dennými, týždennými a mesačnými plánmi v crone.",
|
||||
"rpc": "Vypne službu aj socket rpcbind a zachová ich presný pôvodný stav systemd na prípadnú obnovu.",
|
||||
"pigz": "Nahradí gzip paralelným pigz na rýchlejšiu kompresiu záloh vzdump.",
|
||||
"guestAgent": "Rozpozná hypervízor servera (qemu/vmware/hyperv/virtualbox) a nainštaluje príslušného hosťovského agenta.",
|
||||
"vfio": "Zapne IOMMU a načíta moduly VFIO na priame priradenie GPU/PCI do VM.",
|
||||
"motd": "Pridá uvítaciu správu MOTD ProxMenuxu a na obnovu zachová pôvodný obsah súboru alebo jeho neprítomnosť.",
|
||||
"subscriptionCustom": "Upraví web Proxmoxu tak, aby nezobrazoval upozornenie na neplatné predplatné (podporuje PVE 8 aj 9).",
|
||||
"zram": "Zapne voliteľný profil swapu ZRAM s veľkosťou jednej desatiny RAM.",
|
||||
"backupLimits": "Odstráni limity prenosu a I/O vzdump, aby zálohy využili skutočnú priepustnosť úložiska.",
|
||||
"ovh": "Zistí hardvér prenajatý od OVH cez whois a nainštaluje OVH Real-Time Monitoring (mimo OVH nič nemení).",
|
||||
"ha": "Zapne služby Proxmox HA (pve-ha-lrm, pve-ha-crm, corosync) na prevzatie prevádzky v klastri pri výpadku.",
|
||||
"fastfetch": "Nainštaluje systémový prehľad Fastfetch s logom a stavom ProxMenuxu ako uvítanie pri prihlásení cez SSH.",
|
||||
"figurine": "Nainštaluje Figurine na zobrazenie názvu servera pomocou ASCII grafiky pri prihlásení cez SSH.",
|
||||
"log2ramCustom": "Nainštaluje Log2RAM s veľkosťou zvolenou používateľom; pred použitím sa opýta na veľkosť a zohľadní SSD/M.2.",
|
||||
"systemUtilities": "Nainštaluje vybrané systémové nástroje a zaznamená iba balíky novo pridané ProxMenuxom."
|
||||
},
|
||||
"toolNames": {
|
||||
"subscription_banner": "Odstránenie upozornenia na predplatné",
|
||||
"time_sync": "Synchronizácia času",
|
||||
"apt_languages": "Vynechanie jazykových balíkov APT",
|
||||
"journald": "Optimalizácia journald",
|
||||
"logrotate": "Optimalizácia logrotate",
|
||||
"system_limits": "Zvýšenie systémových limitov",
|
||||
"memory_settings": "Optimalizácia nastavení pamäte",
|
||||
"zram_swap": "Profil swapu ZRAM",
|
||||
"kernel_panic": "Nastavenie správania pri páde jadra",
|
||||
"apt_ipv4": "Vynútenie IPv4 pre APT",
|
||||
"kexec": "Rýchly reštart cez kexec",
|
||||
"rpc": "Vypnutie RPC / rpcbind",
|
||||
"motd": "Vlastná uvítacia správa MOTD",
|
||||
"system_utils": "Systémové nástroje",
|
||||
"network_optimization": "Optimalizácia siete",
|
||||
"bashrc_custom": "Prispôsobenie bashrc",
|
||||
"figurine": "Figurine",
|
||||
"fastfetch": "Fastfetch",
|
||||
"log2ram": "Log2ram (ochrana SSD)",
|
||||
"zfs_autotrim": "ZFS Autotrim",
|
||||
"amd_fixes": "Opravy pre procesory AMD (Ryzen/EPYC)",
|
||||
"persistent_network": "Trvalé názvy sieťových rozhraní",
|
||||
"vfio_iommu": "Priame priradenie zariadení (VFIO/IOMMU)",
|
||||
"lvm_repair": "Oprava hlavičiek fyzických zväzkov LVM",
|
||||
"repo_cleanup": "Vyčistenie repozitárov",
|
||||
"proxmox_repos": "Repozitáre APT pre Proxmox",
|
||||
"entropy": "Generovanie entropie (haveged)"
|
||||
}
|
||||
},
|
||||
"healthThresholds": {
|
||||
"title": "Hranice kontroly stavu",
|
||||
@@ -7408,5 +7476,12 @@
|
||||
"pbsWebInterface": "Webové rozhranie PBS",
|
||||
"changeAddress": "Zmeniť adresu",
|
||||
"cancel": "Zrušiť"
|
||||
},
|
||||
"apiErrors": {
|
||||
"http": "Požiadavka na API zlyhala: {status} {statusText}",
|
||||
"unexpectedContentType": "Očakávala sa odpoveď JSON, ale prišiel typ {contentType}",
|
||||
"unknownContentType": "neznámy typ obsahu",
|
||||
"invalidJson": "Odpoveď z {endpoint} obsahuje neplatný JSON",
|
||||
"unauthorized": "Chýba platné prihlásenie: {endpoint}"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user