A guest was implicitly limited to a single allocation: lookups were
"(server, vmid) -> one row", release_ip_by_vmid freed one address, and
the link tool skipped guests that already had one. An instance can now
hold a primary address plus any number of aliases, managed from the
Network tab of the instance and visible on the IPAM pages.
Schema and service:
- ipam_allocations gains is_primary, assignment_kind, target_interface
and apply_* columns; migration 43 marks existing rows as primary
- find_allocations_by_resource/set_primary; release_ip_by_vmid now frees
every address of a deleted guest instead of just the first one
- next-available search may scan the whole subnet when a network has no
auto-assign pool, skipping node and cached guest addresses so it never
hands out an address that is already live
Applying to the guest (services/guest_ip_service.py):
- reuses script_engine, so LXC goes through pct exec and VMs through the
guest agent; the shell script synchronises the whole alias list of an
interface, which makes add, remove and retry the same code path
- persists via ifupdown, netplan, NetworkManager or sysconfig and never
restarts guest networking; an unknown stack degrades to runtime_only
and an unreachable guest keeps the allocation as pending
API and UI:
- /ipam/api/guests/{server_id}/{vmid}/addresses: list, add, apply,
primary, delete; allocations list accepts guest filters
- instance list exposes ips[] alongside the primary ip
- addresses card on the Network tab, "+N" badge in the IP column,
primary badge in the allocations table
Fixes found along the way:
- link-allocations registers every address of a guest, carries the MAC
over, refuses to take an address away from another live guest and no
longer matches allocations by resource name (which leaked an address
between same-named guests on different servers)
- IPAM history no longer fails to serialise datetime values, which used
to abort re-linking with a 500
2036 lines
81 KiB
JSON
2036 lines
81 KiB
JSON
{
|
|
"nav": {
|
|
"account": "Account",
|
|
"profile": "Profile",
|
|
"infrastructure": "Infrastructure",
|
|
"network": "Network",
|
|
"management": "Management",
|
|
"dashboard": "Dashboard",
|
|
"instances": "Instances",
|
|
"nodes": "Nodes",
|
|
"cluster": "Cluster",
|
|
"templates": "Templates",
|
|
"backups": "Backups",
|
|
"tasks": "Tasks",
|
|
"ipam": "IPAM",
|
|
"networks": "Networks",
|
|
"users": "Users",
|
|
"workspaces": "Workspaces",
|
|
"logs": "Logs",
|
|
"settings": "Settings",
|
|
"applications": "Applications",
|
|
"app store": "App Store",
|
|
"my apps": "My Apps",
|
|
"search": "Search sections",
|
|
"searchPlaceholder": "Jump to a section...",
|
|
"searchEmpty": "No results found",
|
|
"topology": "Topology"
|
|
},
|
|
"appstore": {
|
|
"title": "App Store",
|
|
"subtitle": "Self-hosted apps, one-click install into an LXC container",
|
|
"search": "Search apps…",
|
|
"all_categories": "All categories",
|
|
"all_sources": "All sources",
|
|
"sources": {
|
|
"runtipi": "Runtipi",
|
|
"umbrel": "Umbrel"
|
|
},
|
|
"golden": {
|
|
"button": "Golden template",
|
|
"title": "Golden LXC template",
|
|
"desc": "Automatically build the golden template (Debian 12 + Docker + Compose) on the selected node. App Store clones app containers from it.",
|
|
"current": "Current template",
|
|
"none": "not configured",
|
|
"server": "Proxmox server",
|
|
"pick_server": "Select a server",
|
|
"pick_server_hint": "Select a server to see its current template",
|
|
"template_storage": "Template storage",
|
|
"rootfs_storage": "Rootfs storage",
|
|
"no_template_storage": "no vztmpl storages",
|
|
"no_rootfs_storage": "no rootdir storages",
|
|
"force": "Rebuild",
|
|
"build": "Build template",
|
|
"started": "Template build started",
|
|
"failed": "Build failed",
|
|
"working": "Working..."
|
|
},
|
|
"refresh_catalog": "Refresh catalog",
|
|
"last_synced": "Last synced",
|
|
"never": "never",
|
|
"syncing": "Syncing…",
|
|
"sync_done": "Catalog synced: {{total}} apps",
|
|
"sync_failed": "Catalog sync failed",
|
|
"installed_badge": "Installed",
|
|
"unavailable": "Unavailable",
|
|
"install": "Install",
|
|
"no_apps": "No apps found",
|
|
"loading": "Loading…",
|
|
"by": "by",
|
|
"source": "Source",
|
|
"version": "Version",
|
|
"port": "Port",
|
|
"disclaimer": "This compose file runs as-is from a third-party repository. Review what will be installed.",
|
|
"view_compose": "View source compose",
|
|
"back": "Back to catalog",
|
|
"my_apps": "My Apps",
|
|
"my_apps_subtitle": "Installed applications",
|
|
"no_installed": "No installed apps yet",
|
|
"col_name": "Name",
|
|
"col_status": "Status",
|
|
"col_version": "Version",
|
|
"col_address": "Address",
|
|
"col_actions": "Actions",
|
|
"open": "Open",
|
|
"retry": "Retry",
|
|
"delete": "Delete",
|
|
"delete_confirm": "Delete app \"{{name}}\" and its LXC container?",
|
|
"deleted": "App deleted",
|
|
"start": "Start",
|
|
"stop": "Stop",
|
|
"restart": "Restart",
|
|
"logs": "Logs",
|
|
"logs_title": "Logs — {{name}}",
|
|
"no_logs": "No logs",
|
|
"orphaned_hint": "Container removed outside PVEmanager",
|
|
"refresh": "Refresh",
|
|
"update": "Update",
|
|
"rollback": "Rollback",
|
|
"update_confirm": "Update \"{{name}}\"? A pre-update snapshot is taken automatically.",
|
|
"rollback_confirm": "Roll back \"{{name}}\"? This ALSO reverts the app's DATA to the snapshot moment.",
|
|
"update_started": "Update started",
|
|
"rollback_started": "Rollback started",
|
|
"powered_by": "Powered by Runtipi appstore",
|
|
"golden_missing": "Golden LXC template is not configured. Set the APPSTORE_GOLDEN_TEMPLATE variable (see docs/golden-template.md).",
|
|
"categories": {
|
|
"ai": "AI",
|
|
"automation": "Automation",
|
|
"books": "Books",
|
|
"crypto": "Crypto",
|
|
"data": "Data & Analytics",
|
|
"dashboard": "Dashboards",
|
|
"development": "Development",
|
|
"featured": "Featured",
|
|
"finance": "Finance",
|
|
"gaming": "Gaming",
|
|
"media": "Media",
|
|
"messaging": "Messaging",
|
|
"monitoring": "Monitoring",
|
|
"music": "Music",
|
|
"network": "Network",
|
|
"photography": "Photography",
|
|
"productivity": "Productivity",
|
|
"security": "Security",
|
|
"social": "Social",
|
|
"storage": "Storage",
|
|
"utilities": "Utilities"
|
|
},
|
|
"install_title": "Install {{name}}",
|
|
"step_advanced": "Advanced (LXC resources)",
|
|
"server": "Server",
|
|
"select_server": "Select server",
|
|
"node": "Node (optional)",
|
|
"storage": "Storage",
|
|
"bridge": "Bridge",
|
|
"port_auto": "Default",
|
|
"ipam_network": "IPAM network (IP address)",
|
|
"ipam_dhcp": "DHCP (default)",
|
|
"ipam_pool": "IPAM pool",
|
|
"ipam_pool_auto": "Auto (any pool)",
|
|
"cores": "CPU cores",
|
|
"memory": "RAM (MB)",
|
|
"disk": "Disk (GB)",
|
|
"app_name": "App name",
|
|
"start_install": "Install",
|
|
"installing": "Installing…",
|
|
"install_started": "Installation started",
|
|
"credentials": "Credentials (shown once — copy them now)",
|
|
"credentials_title": "Credentials — {{name}}",
|
|
"credentials_btn": "Credentials",
|
|
"no_credentials": "No stored credentials for this app. Check the app logs or its documentation.",
|
|
"credentials_hint": "Default login and password from the catalog plus secrets generated at install time. Change the password in the app after first login.",
|
|
"minimize": "Minimize",
|
|
"copy": "Copy",
|
|
"copied": "Copied",
|
|
"done": "Done",
|
|
"close": "Close",
|
|
"open_app": "Open app",
|
|
"install_failed": "Installation failed"
|
|
},
|
|
"cluster": {
|
|
"create_title": "Create cluster",
|
|
"create_btn": "Create cluster",
|
|
"create_started": "Cluster creation started",
|
|
"select_node": "Select server",
|
|
"cluster_name": "Cluster name",
|
|
"name_rule": "Starts with a letter; letters, digits, hyphens; max 15 chars.",
|
|
"link0": "Corosync link0 IP of the joining node (optional)",
|
|
"link0_hint": "A dedicated network for corosync is recommended in production.",
|
|
"cluster_host": "Cluster node address to connect to (optional)",
|
|
"cluster_host_hint": "Private IP of the cluster node reachable over the corosync network. Leave empty to use its panel address (may be a public FQDN unreachable from a dedicated network).",
|
|
"rootpw_optional": "root@pam password (if not saved on server)",
|
|
"join_node": "Join node",
|
|
"join_title": "Join node to cluster",
|
|
"join_started": "Join started",
|
|
"join_unconfirmed": "Join task started, but membership is not confirmed yet",
|
|
"join_btn": "Join cluster",
|
|
"step": "Step",
|
|
"joining_node": "Node to join (standalone)",
|
|
"target_cluster": "Target cluster node",
|
|
"select_cluster": "Select cluster node",
|
|
"node_clean": "Node has no VMs/containers — ready to join.",
|
|
"guests_warning": "Joining a cluster overwrites /etc/pve — all VMs/containers on this node will be lost. They must be backed up and deleted first.",
|
|
"backup_storage": "Backup storage",
|
|
"select_storage": "Select storage",
|
|
"free": "free",
|
|
"no_backup_storage": "No backup-capable storage found on this node.",
|
|
"prepare_btn": "Back up & clear node",
|
|
"preparing": "Backing up & deleting… (may take minutes)",
|
|
"node_ready": "Node cleared and ready to join.",
|
|
"join_final_warning": "The node will be joined to the cluster and its Proxmox interface will restart for a moment. This cannot be undone.",
|
|
"node_rootpw": "root@pam password of the joining node",
|
|
"confirm_understand": "I understand this is irreversible",
|
|
"eject_title": "Eject node from cluster",
|
|
"eject_btn": "Eject",
|
|
"eject_warning": "The node must be powered OFF before ejecting, and must not rejoin the same cluster network afterwards.",
|
|
"eject_confirm": "Eject",
|
|
"eject_via": "via",
|
|
"rootpw_ssh": "root password (for SSH fallback, optional)",
|
|
"eject_panel_only": "Only detach the panel entry (do not touch Proxmox)",
|
|
"eject_panel_only_hint": "Use this when the node is not actually in the cluster (e.g. a previous join failed) or is unreachable for pvecm delnode.",
|
|
"nodes": "nodes",
|
|
"standalone": "Standalone servers",
|
|
"no_standalone": "No standalone servers.",
|
|
"two_node_quorum": "A 2-node cluster loses quorum if one node fails. 3+ nodes or a QDevice is recommended for production.",
|
|
"import_btn": "Import",
|
|
"import_title": "Import existing cluster",
|
|
"import_hint": "For nodes already clustered on the Proxmox side (outside the panel). This only links matching panel entries by IP/hostname — it does not run any pvecm operation.",
|
|
"detect_btn": "Detect cluster",
|
|
"no_real_cluster": "This node is not part of a Proxmox cluster.",
|
|
"detected_as": "Detected cluster",
|
|
"not_in_panel": "Not added to the panel yet — add it as a server first.",
|
|
"linked_elsewhere": "Panel entry is linked to a different cluster.",
|
|
"already_linked": "Already linked in the panel."
|
|
},
|
|
"login": {
|
|
"title": "Sign in to your account",
|
|
"username": "Username",
|
|
"password": "Password",
|
|
"username_placeholder": "Enter username",
|
|
"password_placeholder": "Enter password",
|
|
"sign_in": "Sign in",
|
|
"signing_in": "Signing in...",
|
|
"forgot_password": "Forgot password",
|
|
"show_password": "Show password",
|
|
"hide_password": "Hide password",
|
|
"two_factor_code": "Authentication code",
|
|
"two_factor_placeholder": "6-digit code or backup code",
|
|
"two_factor_hint": "Enter the code from your authenticator app, or a backup code.",
|
|
"verify": "Verify",
|
|
"back": "Back",
|
|
"logout": "Logout"
|
|
},
|
|
"reset": {
|
|
"forgot_title": "Password recovery",
|
|
"forgot_subtitle": "Enter your account email and we will send you a reset link.",
|
|
"email": "E-mail",
|
|
"email_placeholder": "Enter your email",
|
|
"send_link": "Send link",
|
|
"sending": "Sending...",
|
|
"email_sent": "If an account with that email exists, we have sent a link to reset your password. Check your inbox.",
|
|
"back_to_login": "Back to sign in",
|
|
"checking_link": "Checking the link...",
|
|
"invalid_title": "Link is invalid",
|
|
"invalid_text": "This password reset link is invalid or has expired. Please request a new one.",
|
|
"request_new": "Request a new link",
|
|
"set_title": "Set a new password",
|
|
"set_subtitle": "Enter a new password for your account.",
|
|
"new_password": "New password",
|
|
"new_password_placeholder": "Enter new password",
|
|
"confirm_password": "Confirm password",
|
|
"confirm_password_placeholder": "Repeat new password",
|
|
"passwords_mismatch": "Passwords do not match",
|
|
"save": "Save password",
|
|
"saving": "Saving...",
|
|
"success_title": "Password updated",
|
|
"success_text": "Your password has been changed. Redirecting to the sign-in page...",
|
|
"go_to_login": "Go to sign in"
|
|
},
|
|
"dashboard": {
|
|
"title": "Dashboard",
|
|
"nodes": "Nodes",
|
|
"virtual_machines": "Virtual Machines",
|
|
"containers": "Containers",
|
|
"alerts": "Alerts",
|
|
"memory": "Memory",
|
|
"storage": "Storage",
|
|
"instances": "Instances",
|
|
"recent_activity": "Recent Activity",
|
|
"cluster": "Cluster",
|
|
"ipv4_available": "IPv4 available",
|
|
"nodes_count": "Nodes",
|
|
"ram_oversell": "RAM oversell =",
|
|
"tasks_today": "Tasks today",
|
|
"tasks_done": "Done:",
|
|
"tasks_running": "Running:",
|
|
"tasks_queued": "Queued:",
|
|
"tasks_errors": "Errors:",
|
|
"tasks_total": "Total",
|
|
"server": "Server",
|
|
"servers_count": "Servers",
|
|
"platform": "Platform",
|
|
"cluster_nodes": "Cluster nodes",
|
|
"top10_now": "Top 10 now",
|
|
"top10_day": "Top 10 today",
|
|
"node_name": "Node name",
|
|
"disk_top": "Top disk usage"
|
|
},
|
|
"common": {
|
|
"access_denied": "Access denied",
|
|
"access_denied_desc": "You do not have permission to open this page. Contact an administrator if you need access.",
|
|
"loading": "Loading...",
|
|
"save": "Save",
|
|
"saved": "Saved",
|
|
"optional": "optional",
|
|
"cancel": "Cancel",
|
|
"clear": "Clear",
|
|
"filter": "Filter…",
|
|
"reset": "Reset",
|
|
"delete": "Delete",
|
|
"edit": "Edit",
|
|
"create": "Create",
|
|
"search": "Search...",
|
|
"actions": "Actions",
|
|
"status": "Status",
|
|
"name": "Name",
|
|
"type": "Type",
|
|
"node": "Node",
|
|
"running": "Running",
|
|
"stopped": "Stopped",
|
|
"online": "Online",
|
|
"offline": "Offline",
|
|
"queued": "Queued...",
|
|
"no_data": "No data",
|
|
"changePassword": "Change password",
|
|
"runCommand": "Run command",
|
|
"confirm_delete": "Are you sure you want to delete this?",
|
|
"all": "All",
|
|
"date": "Date",
|
|
"user": "User",
|
|
"prev": "Previous",
|
|
"next": "Next",
|
|
"refresh": "Refresh",
|
|
"back": "Back",
|
|
"close": "Close",
|
|
"confirm": "Confirm",
|
|
"console": "Console",
|
|
"start": "Start",
|
|
"stop": "Stop",
|
|
"shutdown": "Shutdown",
|
|
"restart": "Restart",
|
|
"snapshots": "Snapshots",
|
|
"suspend": "Suspend",
|
|
"cpu": "CPU",
|
|
"memory": "Memory",
|
|
"disk": "Disk",
|
|
"uptime": "Uptime",
|
|
"vmid": "VMID",
|
|
"boot_order": "Boot Order",
|
|
"qemu_agent": "QEMU Agent",
|
|
"start_on_boot": "Start on Boot",
|
|
"primary_ip": "Primary IP",
|
|
"network_in": "Network In",
|
|
"network_out": "Network Out",
|
|
"network_io": "Network I/O",
|
|
"storage": "Storage",
|
|
"disk_read_rate": "Disk Read",
|
|
"disk_write_rate": "Disk Write",
|
|
"net_in_rate": "Net In",
|
|
"net_out_rate": "Net Out",
|
|
"io_rates": "I/O Rates",
|
|
"guest_agent_required": "Install qemu-guest-agent for disk usage details",
|
|
"used_of": "used of",
|
|
"rollback": "Rollback",
|
|
"description": "Description",
|
|
"os_type": "OS Type",
|
|
"vcpu": "vCPU",
|
|
"instance_info": "Instance Info",
|
|
"network": "Network",
|
|
"interfaces": "Interfaces",
|
|
"dns": "DNS",
|
|
"gateway": "Gateway",
|
|
"vlan": "VLAN",
|
|
"my_proxmox_server": "My Proxmox Server",
|
|
"enabled": "Enabled",
|
|
"disabled": "Disabled",
|
|
"yes": "Yes",
|
|
"no": "No",
|
|
"qemu_virtual_machine": "QEMU Virtual Machine",
|
|
"lxc_container": "LXC Container",
|
|
"root": "root",
|
|
"ubuntu": "ubuntu",
|
|
"my_vm": "my-vm-01",
|
|
"cores": "cores",
|
|
"of": "of",
|
|
"placeholder_root": "root",
|
|
"placeholder_ubuntu": "ubuntu",
|
|
"placeholder_vm_name": "my-vm-01",
|
|
"placeholder_ssh_key": "ssh-rsa AAAA...",
|
|
"placeholder_command": "ls -la /tmp",
|
|
"placeholder_disk_size": "e.g. 100",
|
|
"placeholder_snapshot_name": "e.g. before-update",
|
|
"placeholder_root_pam": "root@pam",
|
|
"placeholder_disk": "scsi0",
|
|
"placeholder_notes": "Description / notes about the instance...",
|
|
"ipam": "IPAM",
|
|
"comment": "Comment",
|
|
"add": "Add",
|
|
"safer": "(more secure)",
|
|
"clone": "Clone",
|
|
"iso": "ISO image",
|
|
"notes": "Notes",
|
|
"reinstall": "Reinstall",
|
|
"done": "Done",
|
|
"copied": "Copied",
|
|
"message": "Message"
|
|
},
|
|
"snap_archive": {
|
|
"title": "Snapshot archive",
|
|
"subtitle": "Snapshots preserved from deleted VMs/containers",
|
|
"empty": "No archived snapshots",
|
|
"snapshot": "Snapshot",
|
|
"deleted_by": "Deleted by",
|
|
"archived_at": "Archived at",
|
|
"parent": "Parent",
|
|
"reason": "Reason",
|
|
"config": "Snapshot config"
|
|
},
|
|
"instances": {
|
|
"create": "Create Instance",
|
|
"os_config": "OS / Config",
|
|
"owner": "Owner",
|
|
"no_owner": "No owner",
|
|
"owner_saved": "Owner updated",
|
|
"owner_hint": "Assign this instance to a user (admin only).",
|
|
"saved_config": "Saved configuration",
|
|
"saved_config_hint": "Values stored by the panel at creation/reinstall time.",
|
|
"migrate": "Migrate",
|
|
"migrate_desc": "Move to another cluster node:",
|
|
"migrate_started": "Migration started in background",
|
|
"migrate_target_node": "Target node",
|
|
"migrate_select_node": "Select node",
|
|
"migrate_no_targets": "No other nodes available in the cluster.",
|
|
"migrate_target_storage": "Target storage",
|
|
"migrate_same_storage": "Keep source storage",
|
|
"migrate_online": "Online (live) migration",
|
|
"bulk_migrate_title": "Bulk migrate ({{count}})",
|
|
"bulk_migrate_desc": "Select the target cluster node. Instances already on it will be skipped.",
|
|
"target_node": "Target node",
|
|
"select_node": "Select node",
|
|
"online_migration": "Online migration for running instances (live)",
|
|
"status_migrating": "Migrating",
|
|
"nothing_to_migrate": "All selected instances are already on the target node",
|
|
"migrate_same_server": "Select instances from the same server",
|
|
"migrate_online_hint_running": "Instance is running — live migration keeps it online during the move.",
|
|
"migrate_online_hint_stopped": "Instance is stopped — leave off for a regular offline migration.",
|
|
"remote_migrate": "Migrate to another cluster",
|
|
"remote_migrate_desc": "Move to an independent Proxmox cluster (not a node of the current one)",
|
|
"remote_migrate_started": "Remote migration started in background",
|
|
"remote_migrate_target_server": "Target cluster",
|
|
"remote_migrate_select_server": "Select a server",
|
|
"remote_migrate_no_targets": "No other servers configured with an API token. Remote migration requires the target server to use API token auth (not a password).",
|
|
"remote_migrate_target_bridge": "Network bridge",
|
|
"remote_migrate_same_bridge": "Same as source",
|
|
"remote_migrate_delete_source": "Remove from the source cluster after a successful transfer",
|
|
"serial_console": "Serial console",
|
|
"cloud_init": "Cloud-Init",
|
|
"ci_no_drive": "This VM has no Cloud-Init drive — settings will only apply once one is added.",
|
|
"ci_saved": "Cloud-Init settings saved",
|
|
"ci_password_keep": "Leave blank to keep current",
|
|
"ci_ip_mode": "IP mode",
|
|
"ci_static": "Static",
|
|
"ci_ip_none": "Not set",
|
|
"ci_ip_cidr": "IP/CIDR",
|
|
"ci_ip_required": "Enter an IP address for static mode",
|
|
"ci_nameserver": "nameserver",
|
|
"ci_searchdomain": "Search domain",
|
|
"ci_reboot_hint": "Cloud-Init applies changes on the next VM reboot.",
|
|
"boot_order": "Boot order",
|
|
"boot_order_hint": "Devices are tried top to bottom. Disable a device to exclude it from booting.",
|
|
"boot_order_saved": "Boot order saved",
|
|
"boot_none_enabled": "No boot devices enabled — the VM will not boot.",
|
|
"boot_disabled": "Disabled devices",
|
|
"boot_enable": "Enable",
|
|
"boot_disable": "Disable",
|
|
"boot_network": "Network (PXE)",
|
|
"vm_options": "VM options",
|
|
"vm_options_saved": "VM options saved",
|
|
"opt_agent": "QEMU Guest Agent",
|
|
"opt_agent_hint": "Enables agent integration (needs qemu-guest-agent inside the VM).",
|
|
"opt_tablet": "Tablet pointer",
|
|
"opt_tablet_hint": "USB tablet for absolute mouse; disable to save resources on headless VMs.",
|
|
"opt_kvm": "KVM hardware virtualization",
|
|
"opt_kvm_hint": "Disable only for nested virtualization without KVM support.",
|
|
"opt_hotplug": "Hotplug (network, disk, USB)",
|
|
"opt_hotplug_hint": "Allow hot-adding devices while the VM is running.",
|
|
"unlock": "Unlock",
|
|
"unlocked": "Lock removed",
|
|
"lock_current": "Current lock: {{lock}}",
|
|
"no_lock": "No active lock.",
|
|
"cpu_options": "CPU options",
|
|
"cpu_saved": "CPU settings saved",
|
|
"cpu_type": "CPU type",
|
|
"cpu_type_hint": "\"host\" gives best performance but blocks live migration between different CPUs.",
|
|
"sockets": "Sockets",
|
|
"cpulimit": "CPU limit",
|
|
"cpulimit_hint": "Max host CPU cores the VM may use (0 = unlimited).",
|
|
"cpuunits": "CPU units (weight)",
|
|
"cpuunits_hint": "Scheduler weight relative to other guests (default 100).",
|
|
"numa": "Enable NUMA",
|
|
"disk_management": "Disk management",
|
|
"no_disks": "No disks attached",
|
|
"disk_move": "Move disk",
|
|
"disk_move_delete": "Delete source after move",
|
|
"disk_moved": "Disk move started",
|
|
"disk_move_stop_hint": "The container is running — it needs to be stopped before the move. The wizard will stop it, move the disk, and start it back automatically.",
|
|
"disk_move_confirm_title": "Move disk?",
|
|
"disk_move_confirm_plain": "Disk {{dev}} will be moved to storage {{storage}}.",
|
|
"disk_move_confirm_running": "The container is currently running. Moving disk {{dev}} to {{storage}} requires it to be stopped first. It will be stopped, the disk moved, then the container will be started again.",
|
|
"disk_move_stage_stopping": "Stopping container...",
|
|
"disk_move_stage_moving": "Moving disk...",
|
|
"disk_move_stage_starting": "Starting container back up...",
|
|
"disk_move_stop_and_move": "Stop and move",
|
|
"disk_move_stop_timeout": "Timed out waiting for the container to stop — move cancelled",
|
|
"disk_add": "Add disk",
|
|
"disk_added": "Disk {{dev}} added",
|
|
"disk_bus": "Bus",
|
|
"disk_detach_confirm": "Detach and delete disk {{dev}}? This destroys its data.",
|
|
"disk_detached": "Disk detached",
|
|
"autostart": "Autostart",
|
|
"autostart_saved": "Autostart settings saved",
|
|
"start_on_boot": "Start on boot",
|
|
"start_on_boot_hint": "Automatically start this instance when the host node boots.",
|
|
"startup_order": "Startup order",
|
|
"startup_up_delay": "Start delay (sec)",
|
|
"startup_down_timeout": "Shutdown timeout (sec)",
|
|
"startup_order_hint": "Lower order starts first. Start delay waits before the next instance; shutdown timeout waits before force-off. Leave empty for defaults.",
|
|
"protection": "Protection",
|
|
"protection_hint": "Prevents the instance and its disks from being removed.",
|
|
"compute_resources": "Compute Resources",
|
|
"vcpu_cores": "vCPU Cores",
|
|
"current_cores": "Current: {{count}} cores",
|
|
"memory_mb": "Memory (MB)",
|
|
"current_memory": "Current: {{count}} MB",
|
|
"apply_changes": "Apply Changes",
|
|
"apply_changes_note": "Note: VM may need to be restarted for changes to take effect.",
|
|
"disk_resize": "Disk Resize",
|
|
"disk_device": "Disk Device",
|
|
"new_size_gb": "New Size (GB)",
|
|
"resize_disk": "Resize Disk",
|
|
"resize_disk_hint": "Disks can only be enlarged. Use the full target size.",
|
|
"raw_configuration": "Raw Configuration",
|
|
"saved_name": "Name",
|
|
"cloud_user": "Cloud-init user",
|
|
"execute_script": "Execute script",
|
|
"execute_script_hint": "Runs via the QEMU guest agent (must be installed and running in the VM).",
|
|
"interpreter": "Interpreter",
|
|
"timeout_sec": "Timeout (sec)",
|
|
"run_script": "Run script",
|
|
"script_required": "Script is empty",
|
|
"exit_code": "Exit code",
|
|
"search_placeholder": "Search by name, IP, or VMID...",
|
|
"all_statuses": "All statuses",
|
|
"all_nodes": "All nodes",
|
|
"all_servers": "All servers",
|
|
"no_instances": "No instances found",
|
|
"deploy_completed_with_warnings": "VM created, but some settings were not applied",
|
|
"try_other_search": "Try a different search query",
|
|
"create_first": "Create your first instance",
|
|
"showing": "Showing",
|
|
"of": "of",
|
|
"overview": "Overview",
|
|
"graphs": "Graphs",
|
|
"networking": "Networking",
|
|
"hardware": "Hardware",
|
|
"firewall": "Firewall",
|
|
"tags": "Tags",
|
|
"no_tags": "No tags",
|
|
"tags_hint": "Comma-separated tags",
|
|
"tags_saved": "Tags saved",
|
|
"destroy": "Destroy",
|
|
"task_activity": "Task Activity",
|
|
"status_creating": "Creating",
|
|
"selected_count": "{{count}} selected",
|
|
"status_starting": "Starting",
|
|
"status_stopping": "Stopping",
|
|
"status_restarting": "Restarting",
|
|
"status_shutting_down": "Shutting down",
|
|
"status_deleting": "Deleting",
|
|
"bulk_failed": "failed",
|
|
"locked_hint": "Locked by Proxmox — operation in progress",
|
|
"vmid_pending": "pending",
|
|
"no_snapshots": "No snapshots",
|
|
"notes_saved": "Notes saved",
|
|
"before_update": "before-update",
|
|
"rollback": "Rollback",
|
|
"delete_snapshot": "Delete",
|
|
"snapshot_storage_hint": "Snapshots require storage that supports them (qcow2, ZFS, Ceph/RBD, LVM-thin, BTRFS). They are not available on raw disks or plain LVM/iSCSI. The \"Snapshots as Volume-Chain\" option on LVM only enables snapshots for qcow2-format disks — an existing raw disk must first be moved to qcow2.",
|
|
"snapshot_unsupported_storage": "This VM's storage does not support snapshots. Use a disk on qcow2, ZFS, Ceph, LVM-thin or BTRFS — or use a backup instead.",
|
|
"parameters": "Settings",
|
|
"edit_resources": "Edit resources",
|
|
"backup_now": "Create backup",
|
|
"backup_started": "Backup started in background",
|
|
"backup_create": "Create backup",
|
|
"backup_no_storages": "No backup-capable storages on this node",
|
|
"destroy_title": "Destroy {{type}}",
|
|
"destroy_irreversible": "This action is irreversible!",
|
|
"destroy_warning_before": "This will permanently delete",
|
|
"destroy_warning_after": " and all its data, including disks and snapshots. IP allocations will be released.",
|
|
"destroy_confirm_label_before": "Type",
|
|
"destroy_confirm_label_after": "to confirm",
|
|
"destroy_button": "Permanently Destroy {{type}}",
|
|
"destroyed": "{{name}} has been destroyed",
|
|
"status_reinstalling": "Reinstalling",
|
|
"status_changing_password": "Changing password",
|
|
"clone_started": "Cloning started in background",
|
|
"clone_title": "Clone",
|
|
"clone_desc": "Create a copy of {{name}}",
|
|
"clone_new_name": "New instance name",
|
|
"clone_target_node": "Target node",
|
|
"clone_same_node": "Same node ({{node}})",
|
|
"clone_storage": "Storage",
|
|
"clone_same_storage": "Same as source",
|
|
"clone_owner": "Owner",
|
|
"clone_owner_me": "Me ({{username}})",
|
|
"clone_desc_label": "Description",
|
|
"clone_desc_placeholder": "Note for the new instance",
|
|
"clone_full": "Full clone",
|
|
"clone_btn": "Clone",
|
|
"reinstall_started": "Reinstall started in background",
|
|
"reinstall_title": "Reinstall",
|
|
"reinstall_desc": "This will recreate instance {{name}} from its original template. All data will be lost.",
|
|
"reinstall_lxc_warn": "LXC support is experimental.",
|
|
"reinstall_confirm_label": "Type",
|
|
"reinstall_btn": "Reinstall",
|
|
"password_started": "Password change started in background",
|
|
"change_password_title": "Change password",
|
|
"change_password_qemu_hint": "Requires qemu-guest-agent installed inside the VM.",
|
|
"change_password_lxc_hint": "Container must be running.",
|
|
"change_password_user": "User",
|
|
"change_password_new": "New password",
|
|
"change_password_btn": "Change",
|
|
"notes_title": "Notes",
|
|
"notes_desc": "Free text / markdown, visible in Proxmox UI.",
|
|
"notes_placeholder": "Description / notes about the instance...",
|
|
"exec_unavailable_title": "Command execution unavailable",
|
|
"exec_unavailable_desc": "qemu-guest-agent support — KVM (qemu) instances only.",
|
|
"exec_title": "Run command (qemu-agent)",
|
|
"exec_desc": "Command runs inside the VM via guest-agent.",
|
|
"exec_command": "Command",
|
|
"exec_timeout": "Timeout (s)",
|
|
"exec_run": "Execute",
|
|
"iso_lxc_title": "ISO not available for LXC",
|
|
"iso_lxc_desc": "ISO image mounting is supported only for KVM (qemu) virtual machines.",
|
|
"iso_title": "ISO image",
|
|
"iso_desc": "Attach an ISO to the virtual CD-ROM device.",
|
|
"iso_device": "Device",
|
|
"iso_image": "Image",
|
|
"iso_select": "Select ISO",
|
|
"iso_current": "current",
|
|
"iso_no_isos": "No ISO images found on this node.",
|
|
"iso_boot_disk": "Boot from disk after ejection",
|
|
"iso_boot_disk_hint": "Sets the disk first in boot order and reboots the VM if running — to immediately boot the installed OS instead of the ISO.",
|
|
"iso_boot_iso": "Boot from this ISO",
|
|
"iso_boot_iso_hint": "Sets the CD-ROM first in boot order and reboots the VM if running — for installation/recovery from the image. Without this option the ISO is simply inserted.",
|
|
"iso_ejected_rebooting": "ISO ejected, VM rebooting from disk",
|
|
"iso_ejected_disk": "ISO ejected, boot from disk (takes effect on next start)",
|
|
"iso_ejected": "ISO detached",
|
|
"iso_attached_rebooting": "ISO attached, VM rebooting from image",
|
|
"iso_attached_booting": "ISO attached, boot from image (takes effect on next start)",
|
|
"iso_attached": "ISO attached",
|
|
"iso_eject": "Eject",
|
|
"iso_attach": "Attach",
|
|
"power_start": "Start",
|
|
"power_start_desc": "Start instance",
|
|
"power_restart": "Restart",
|
|
"power_restart_desc": "Restart instance",
|
|
"power_shutdown": "Shutdown",
|
|
"power_shutdown_desc": "Gracefully shut down instance (ACPI shutdown)",
|
|
"power_stop": "Stop",
|
|
"power_stop_desc": "Force stop instance. Unsaved data may be lost",
|
|
"power_unnamed": "selected instance",
|
|
"power_stop_warn": "This is the equivalent of pulling the power cable.",
|
|
"disk_resize_too_small": "New size must be larger than current ({{size}} GB). Proxmox does not support shrinking disks.",
|
|
"disk_no_fs": "Disk resized to {{size}}G, but filesystem was not expanded",
|
|
"current_disk_size": "Current size: {{size}} GB",
|
|
"fs_grown": "Filesystem expanded inside the OS",
|
|
"fs_not_grown": "Filesystem not expanded — growpart output below"
|
|
},
|
|
"wizard": {
|
|
"title": "Create Instance",
|
|
"step_server": "Server",
|
|
"step_template": "Template",
|
|
"step_config": "Configuration",
|
|
"step_confirm": "Confirm",
|
|
"select_server": "Select server",
|
|
"select_template": "Select template",
|
|
"no_templates": "No templates available",
|
|
"configure": "Configure",
|
|
"basic": "Basic",
|
|
"target_node": "Target Node",
|
|
"auto_select": "Auto select",
|
|
"start_after_create": "Start after creation",
|
|
"resources": "Resources",
|
|
"memory_mb": "Memory (MB)",
|
|
"disk_gb": "Disk (GB)",
|
|
"bridge": "Network Bridge",
|
|
"manual_ip": "Manual IP",
|
|
"ci_user": "Cloud-Init User",
|
|
"ci_password": "Cloud-Init Password",
|
|
"confirm": "Confirm",
|
|
"server_label": "Server",
|
|
"template_label": "Template",
|
|
"back": "Back",
|
|
"next": "Next",
|
|
"storage": "Storage",
|
|
"hostname": "Hostname",
|
|
"cpu": "CPU Cores",
|
|
"memory": "Memory (MB)",
|
|
"disk": "Disk (GB)",
|
|
"network": "Network",
|
|
"password": "Password",
|
|
"ssh_keys": "SSH Keys",
|
|
"ssh_keys_select": "Select saved SSH keys",
|
|
"ssh_keys_owner": "Instance owner",
|
|
"ssh_keys_owner_self": "Me (current user)",
|
|
"no_saved_keys": "No saved SSH keys",
|
|
"deploy": "Deploy",
|
|
"deploy_queued": "Deploy task for \"{{name}}\" has been queued",
|
|
"deploy_success": "Instance \"{{name}}\" deployed successfully",
|
|
"deploy_failed": "Deployment failed",
|
|
"deploy_done": "Instance created successfully",
|
|
"deploy_wait": "Please wait, deployment in progress...",
|
|
"deploy_starting": "Starting...",
|
|
"deploying_title": "Deploying Instance",
|
|
"deploying": "Deploying...",
|
|
"status_pending": "Queued",
|
|
"status_running": "Running",
|
|
"status_completed": "Completed",
|
|
"status_failed": "Failed",
|
|
"go_to_instances": "Go to Instances",
|
|
"retry": "Retry",
|
|
"os_group": "OS Group",
|
|
"ipam_network": "IPAM Network",
|
|
"auto_allocate_ip": "Auto-allocate IP",
|
|
"instance_type": "Instance Type",
|
|
"select_type": "Select type",
|
|
"type_vm": "Virtual Machine",
|
|
"type_vm_desc": "QEMU/KVM VM from template",
|
|
"type_lxc": "LXC Container",
|
|
"type_lxc_desc": "Linux container from CT template",
|
|
"lxc_template": "CT Template",
|
|
"select_lxc_template": "Select CT template",
|
|
"no_lxc_templates": "No CT templates found. Upload templates to Proxmox Storage first.",
|
|
"lxc_password": "Root Password",
|
|
"lxc_password_placeholder": "Container root password",
|
|
"swap_mb": "Swap (MB)",
|
|
"unprivileged": "Unprivileged container",
|
|
"lxc_template_label": "CT Template",
|
|
"type_iso": "VM from ISO",
|
|
"type_iso_desc": "Blank QEMU/KVM VM for an OS install from an ISO",
|
|
"select_iso": "Select installation ISO",
|
|
"select_node_first": "Select a node",
|
|
"iso_node_hint": "The ISO list comes from this node's storages",
|
|
"iso_image": "ISO image",
|
|
"iso_select_placeholder": "Select ISO",
|
|
"no_isos": "No ISO images on this node. Upload one to a storage with the ISO content type first.",
|
|
"iso_extra": "Second ISO (drivers)",
|
|
"iso_extra_none": "Not used",
|
|
"iso_extra_hint": "Mounted as a second CD-ROM — for example virtio-win when installing Windows",
|
|
"iso_hardware": "Hardware",
|
|
"disk_bus": "Disk bus",
|
|
"disk_bus_windows_hint": "The Windows installer will not see a VirtIO disk without drivers — pick SATA or attach virtio-win as the second ISO.",
|
|
"net_model": "Network card",
|
|
"tpm": "TPM 2.0",
|
|
"os_type": "Guest OS",
|
|
"os_type_hint": "Changing this presets BIOS, disk bus and network card",
|
|
"iso_ip_hint": "The IP is only reserved in IPAM — there is no cloud-init here, so enter it manually in the installer.",
|
|
"iso_next_steps": "The VM boots from the ISO. Open the console to run the installer; when it is done, click Eject in the ISO dialog — the disk becomes first in the boot order automatically.",
|
|
"iso_download": "Download an ISO to this node",
|
|
"iso_refresh": "Refresh the ISO list",
|
|
"quota_blocked_title": "Quota limits reached",
|
|
"quota_blocked_desc": "You cannot create another instance — the following limits are fully used:",
|
|
"quota_blocked_hint": "Delete an instance you no longer need, or ask an administrator to raise your quota.",
|
|
"quota_exceeded_title": "This configuration does not fit your quota",
|
|
"quota_exceeded_hint": "Reduce the resources above to continue.",
|
|
"quota_used_of": "{{used}} of {{limit}}",
|
|
"quota_projection_note": "Including the instance being created.",
|
|
"ip_cidr_placeholder": "10.10.10.5/24 or dhcp",
|
|
"invalid_name": "Name must be a valid DNS name: start with a letter, contain only letters, digits and hyphens, end with a letter or digit (e.g. my-app-01)"
|
|
},
|
|
"nodes": {
|
|
"title": "Servers",
|
|
"auth_error": "Auth error",
|
|
"auth_error_hint": "The server is reachable but rejected the credentials (HTTP 401). Check the API token or password — this usually means the token was revoked or replaced, e.g. after the node joined a cluster.",
|
|
"vms": "VMs",
|
|
"containers": "Containers",
|
|
"cpu": "CPU",
|
|
"memory": "Memory",
|
|
"disk": "Disk",
|
|
"uptime": "Uptime",
|
|
"cluster_nodes": "Cluster Nodes",
|
|
"instances_on_server": "Instances on server",
|
|
"tab_overview": "Overview",
|
|
"tab_graphs": "Graphs",
|
|
"tab_network": "Network",
|
|
"tab_ha": "HA",
|
|
"tab_firewall": "Firewall",
|
|
"tab_pools": "Pools",
|
|
"tab_disks": "Disks",
|
|
"tab_admin": "Administration",
|
|
"tab_access": "Access",
|
|
"vm_list": "Virtual Machines on Server",
|
|
"no_servers": "No servers configured",
|
|
"add_server": "Add Server",
|
|
"open_pve_ui": "Open in Proxmox",
|
|
"updates_available": "Updates available",
|
|
"updates_available_count": "Updates available: {{count}}",
|
|
"edit_server": "Edit Server",
|
|
"test_connection": "Test Connection",
|
|
"hostname": "Hostname / IP",
|
|
"port": "Port",
|
|
"api_user": "API User",
|
|
"api_token_name": "API Token Name",
|
|
"api_token_value": "API Token Value",
|
|
"use_password": "Use password auth",
|
|
"auth_mode": "Connection method",
|
|
"auth_mode_auto": "Login and password (panel creates an API token)",
|
|
"auth_mode_token": "Existing API token",
|
|
"auth_mode_password": "Password only",
|
|
"auth_mode_auto_hint": "The password is used once to create an API token. From then on the panel works through the token, which you can revoke in Proxmox at any time.",
|
|
"switch_to_token": "Switch to API token",
|
|
"switch_to_token_confirm": "Create an API token for server \"{{name}}\" and switch the panel to it? The stored password is used.",
|
|
"switch_to_token_ok": "Server switched to token \"{{token}}\"",
|
|
"verify_ssl": "Verify SSL",
|
|
"connection_ok": "Connection successful",
|
|
"connection_failed": "Connection failed",
|
|
"auto_create_token": "Create API token automatically",
|
|
"auto_create_token_hint": "An API token will be created on the Proxmox server automatically. For a cluster, all nodes will be added.",
|
|
"auto_fields_required": "Name, host and password are required",
|
|
"cluster_mode": "Cluster",
|
|
"standalone": "Standalone",
|
|
"cluster_nodes_count": "{{count}} nodes",
|
|
"no_workspace": "No workspace",
|
|
"reboot": "Reboot",
|
|
"shutdown": "Shutdown",
|
|
"shell": "Console (Shell)",
|
|
"confirm_reboot": "Reboot node «{{node}}»? All VMs and containers on it will be stopped.",
|
|
"confirm_shutdown": "Shut down node «{{node}}»? Access will be lost until manually powered on.",
|
|
"reboot_started": "Node reboot initiated",
|
|
"shutdown_started": "Node shutdown initiated"
|
|
},
|
|
"netif": {
|
|
"title": "Network Interfaces",
|
|
"add": "Add Interface",
|
|
"add_interface": "Add interface",
|
|
"add_submit": "Add",
|
|
"add_title": "Add network interface",
|
|
"add_description": "Will be added as {{key}}",
|
|
"if_name": "Interface name",
|
|
"model": "Model",
|
|
"bridge": "Bridge",
|
|
"select_bridge": "Select a bridge",
|
|
"vlan_tag": "VLAN tag",
|
|
"mac": "MAC address",
|
|
"mac_auto": "auto",
|
|
"optional": "optional",
|
|
"ip_mode": "IP mode",
|
|
"static": "Static",
|
|
"ip_cidr": "IP/CIDR",
|
|
"firewall": "Firewall",
|
|
"no_devices": "No network devices",
|
|
"remove_interface": "Remove interface",
|
|
"remove_title": "Remove network interface?",
|
|
"remove_description": "Interface {{key}} will be removed from the configuration. The instance may lose network connectivity.",
|
|
"added": "Interface {{key}} added",
|
|
"removed": "Interface {{key}} removed",
|
|
"err_bridge_required": "Select a network bridge",
|
|
"err_bad_mac": "Invalid MAC address (format AA:BB:CC:DD:EE:FF)",
|
|
"err_bad_vlan": "VLAN tag must be a number between 1 and 4094",
|
|
"err_bad_cidr": "Enter the IP in CIDR format, e.g. 10.0.0.5/24",
|
|
"err_bad_gateway": "Invalid gateway address",
|
|
"edit": "Edit",
|
|
"name": "Name",
|
|
"type": "Type",
|
|
"address": "Address",
|
|
"gateway": "Gateway",
|
|
"ports": "Ports / Slaves",
|
|
"bridge_ports": "Bridge ports",
|
|
"bond_slaves": "Bond slaves",
|
|
"bond_mode": "Bond mode",
|
|
"vlan_raw_device": "VLAN raw device",
|
|
"vlan_id": "VLAN tag",
|
|
"autostart": "Autostart",
|
|
"comments": "Comments",
|
|
"active": "Active",
|
|
"inactive": "Inactive",
|
|
"apply": "Apply Configuration",
|
|
"revert": "Revert",
|
|
"apply_confirm": "Apply pending network changes on this node? Active connections may be interrupted.",
|
|
"revert_confirm": "Discard all pending network changes on this node?",
|
|
"pending_hint": "Changes are staged until applied.",
|
|
"name_required": "Interface name is required",
|
|
"created": "Interface created",
|
|
"saved": "Interface updated",
|
|
"deleted": "Interface deleted",
|
|
"applied": "Network configuration applied",
|
|
"reverted": "Pending changes reverted"
|
|
},
|
|
"hw": {
|
|
"platform": "Platform",
|
|
"bios": "BIOS",
|
|
"machine": "Machine type",
|
|
"vga": "Display (VGA)",
|
|
"scsihw": "SCSI controller",
|
|
"sockets": "CPU sockets",
|
|
"platform_saved": "Hardware updated",
|
|
"platform_hint": "Hardware changes take effect after the VM is powered off and started again.",
|
|
"passthrough": "Device passthrough",
|
|
"no_passthrough": "No passthrough devices",
|
|
"remove_device": "Remove device",
|
|
"device_removed": "Device {{key}} removed",
|
|
"remove_title": "Remove device?",
|
|
"remove_description": "Device {{key}} will be removed from the VM configuration.",
|
|
"passthrough_hint": "PCI/USB passthrough requires the VM to be powered off and IOMMU enabled on the host.",
|
|
"stop_first": "Power off the VM to change passthrough",
|
|
"running_lock": "The VM is running — passthrough devices cannot be added or removed. Power off the VM.",
|
|
"efi_required_title": "OVMF (UEFI) requires an EFI disk",
|
|
"efi_required_hint": "The EFI disk will be created automatically. Choose a storage for it.",
|
|
"efi_storage": "EFI disk storage",
|
|
"select_storage": "Select a storage",
|
|
"err_efi_storage": "Select a storage for the EFI disk",
|
|
"add_submit": "Add",
|
|
"add_pci_title": "PCI passthrough",
|
|
"add_pci_description": "Will be added as {{key}}. The VM must be powered off.",
|
|
"pci_device": "Device",
|
|
"select_pci": "Select a device",
|
|
"no_pci": "No devices found",
|
|
"pci_pcie": "PCI-Express (q35 only)",
|
|
"pci_all_functions": "All device functions",
|
|
"pci_primary_gpu": "Primary GPU (x-vga)",
|
|
"pci_rombar": "ROM-Bar",
|
|
"pci_hint": "PCI passthrough requires IOMMU (VT-d / AMD-Vi) enabled on the host.",
|
|
"err_pci_required": "Select a PCI device",
|
|
"pci_added": "Device {{key}} added",
|
|
"add_usb_title": "USB passthrough",
|
|
"add_usb_description": "Will be added as {{key}}",
|
|
"usb_device": "Device",
|
|
"select_usb": "Select a device",
|
|
"no_usb": "No devices found",
|
|
"usb3": "USB 3.0",
|
|
"err_usb_required": "Select a USB device",
|
|
"usb_added": "Device {{key}} added",
|
|
"disk": "Disk",
|
|
"add_disk_title": "Physical disk passthrough",
|
|
"add_disk_description": "Will be added as {{key}}",
|
|
"disk_device": "Disk",
|
|
"select_disk": "Select a disk",
|
|
"no_disks": "No disks found",
|
|
"disk_bus": "Bus",
|
|
"disk_ssd": "Emulate SSD",
|
|
"disk_discard": "Discard / TRIM",
|
|
"disk_used_warn": "Disk is in use ({{used}}) — passthrough may cause data loss.",
|
|
"disk_passthrough_hint": "The disk is given to the VM exclusively via a stable /dev/disk/by-id/ path. Bound to this node — migration to another node is not available.",
|
|
"err_disk_required": "Select a disk",
|
|
"disk_added": "Disk {{key}} passed through"
|
|
},
|
|
"fw": {
|
|
"title": "Firewall (datacenter)",
|
|
"on": "on",
|
|
"off": "off",
|
|
"enable": "Enable",
|
|
"disable": "Disable",
|
|
"rules": "Rules",
|
|
"groups": "Security Groups",
|
|
"ipsets": "IP Sets",
|
|
"aliases": "Aliases",
|
|
"options": "Options",
|
|
"add_rule": "Add rule",
|
|
"rule_hint": "Rules are evaluated top to bottom.",
|
|
"direction": "Direction",
|
|
"action": "Action",
|
|
"match": "Source → Destination",
|
|
"security_group": "Security group",
|
|
"select_group": "Select a group",
|
|
"proto": "Protocol",
|
|
"macro": "Macro",
|
|
"source": "Source",
|
|
"dest": "Destination",
|
|
"dport": "Dest. port",
|
|
"sport": "Src. port",
|
|
"enabled": "Enabled",
|
|
"log": "Log",
|
|
"err_group_required": "Select a security group",
|
|
"rule_added": "Rule added",
|
|
"rule_deleted": "Rule deleted",
|
|
"delete_rule_confirm": "Delete this rule?",
|
|
"add_group": "Add security group",
|
|
"delete_group": "Delete security group",
|
|
"group_name": "Group name",
|
|
"group_added": "Security group created",
|
|
"group_deleted": "Group deleted",
|
|
"add_ipset": "Add IP set",
|
|
"delete_ipset": "Delete IP set",
|
|
"ipset_name": "IP set name",
|
|
"ipset_added": "IP set created",
|
|
"ipset_deleted": "IP set deleted",
|
|
"add_alias": "Add alias",
|
|
"delete_alias": "Delete alias",
|
|
"alias_added": "Alias created",
|
|
"alias_deleted": "Alias deleted",
|
|
"name": "Name",
|
|
"entry_added": "Entry added",
|
|
"entry_deleted": "Entry deleted",
|
|
"delete_entry": "Delete entry",
|
|
"enable_dc": "Enable datacenter firewall",
|
|
"policy_in": "Inbound policy",
|
|
"policy_out": "Outbound policy",
|
|
"options_hint": "Policies apply to traffic that matches no rule.",
|
|
"options_saved": "Options saved",
|
|
"err_name": "Enter a name",
|
|
"err_cidr": "Enter a CIDR",
|
|
"node_title": "Firewall (node)",
|
|
"log_tab": "Log",
|
|
"enable_node": "Enable node firewall",
|
|
"log_level_in": "Inbound log level",
|
|
"log_level_out": "Outbound log level",
|
|
"nosmurfs": "Block SMURF attacks",
|
|
"tcpflags": "Filter illegal TCP flags",
|
|
"synflood": "SYN-flood protection",
|
|
"node_options_hint": "These options apply to traffic of the Proxmox host node itself.",
|
|
"guest_title": "Instance firewall",
|
|
"enable_guest": "Enable instance firewall",
|
|
"dhcp": "Allow DHCP",
|
|
"macfilter": "MAC filter",
|
|
"ipfilter": "IP filter (anti-spoofing)",
|
|
"ndp": "NDP (IPv6)",
|
|
"guest_options_hint": "The instance firewall only works when the datacenter firewall is enabled and firewall=1 is set on the NIC."
|
|
},
|
|
"pools": {
|
|
"title": "Resource Pools",
|
|
"add": "Create pool",
|
|
"pool_id": "Pool name",
|
|
"created": "Pool created",
|
|
"deleted": "Pool deleted",
|
|
"delete": "Delete pool",
|
|
"delete_hint": "(the pool must be empty)",
|
|
"err_id": "Enter a pool name",
|
|
"empty": "Pool is empty",
|
|
"add_member": "Add VM/LXC",
|
|
"select_vm": "Select an instance",
|
|
"no_available": "None available",
|
|
"member_added": "Added to pool",
|
|
"member_removed": "Removed from pool",
|
|
"remove_member_confirm": "Remove from pool?"
|
|
},
|
|
"disks": {
|
|
"title": "Disks & ZFS",
|
|
"physical": "Disks",
|
|
"device": "Device",
|
|
"type": "Type",
|
|
"model": "Model",
|
|
"size": "Size",
|
|
"usage": "Usage",
|
|
"free": "free",
|
|
"health": "Health",
|
|
"attribute": "Attribute",
|
|
"value": "Value",
|
|
"worst": "Worst",
|
|
"threshold": "Threshold",
|
|
"wipe": "Wipe",
|
|
"wipe_confirm": "Wipe disk (all data will be destroyed)",
|
|
"wiped": "Disk is being wiped",
|
|
"create_zfs": "Create ZFS pool",
|
|
"create_zfs_hint": "The disks will be wiped and combined into a pool.",
|
|
"pool_name": "Pool name",
|
|
"raid_level": "RAID level",
|
|
"compression": "Compression",
|
|
"devices": "Disks",
|
|
"no_free_disks": "No free disks",
|
|
"err_name": "Enter a pool name",
|
|
"err_devices": "Select disks",
|
|
"pool_created": "ZFS pool is being created",
|
|
"destroy_pool": "Destroy ZFS pool",
|
|
"pool_destroyed": "Pool is being destroyed",
|
|
"alloc": "Allocated"
|
|
},
|
|
"access": {
|
|
"title": "PVE Access",
|
|
"tokens": "API Tokens",
|
|
"realms": "Realms",
|
|
"type": "Type",
|
|
"add_realm": "Add realm",
|
|
"realm_id": "Realm",
|
|
"realm_created": "Realm created",
|
|
"realm_deleted": "Realm deleted",
|
|
"delete_realm": "Delete realm",
|
|
"err_realm": "Enter a realm name",
|
|
"server": "Server",
|
|
"user_attr": "User attribute",
|
|
"domain": "Domain",
|
|
"username_claim": "Username claim",
|
|
"secure": "SSL/TLS (secure)",
|
|
"builtin": "built-in",
|
|
"select_user": "User",
|
|
"add_token": "Create token",
|
|
"token_id": "Token ID",
|
|
"privsep": "Privilege separation (token has its own permissions)",
|
|
"secret": "Secret",
|
|
"secret_warning": "The secret is shown only once — save it now.",
|
|
"token_created": "Token created",
|
|
"token_deleted": "Token deleted",
|
|
"delete_token": "Delete token",
|
|
"err_tokenid": "Enter a token ID",
|
|
"expire": "Expires"
|
|
},
|
|
"nodeadm": {
|
|
"title": "Node administration",
|
|
"services": "Services",
|
|
"updates": "Updates",
|
|
"repos": "Repositories",
|
|
"service": "Service",
|
|
"desc": "Description",
|
|
"package": "Package",
|
|
"current": "Current",
|
|
"new": "New",
|
|
"refresh": "Check (apt update)",
|
|
"apt_refreshed": "Package lists are refreshing",
|
|
"up_to_date": "No updates",
|
|
"updates_count": "Updates available: {{n}}",
|
|
"upgrade_hint": "\"Install updates\" opens the node console running apt dist-upgrade (confirmation required). Keep the tab open until it finishes.",
|
|
"do_upgrade": "Install updates",
|
|
"upgrade": "Upgrade",
|
|
"repo_updated": "Repository updated",
|
|
"enable": "Enable",
|
|
"disable": "Disable",
|
|
"certs": "Certificates",
|
|
"syslog": "Log",
|
|
"tasks": "Tasks",
|
|
"system": "System",
|
|
"tasks_hint": "Proxmox tasks executed on this node",
|
|
"task_start": "Start",
|
|
"task_type": "Type",
|
|
"task_id": "Object",
|
|
"task_user": "User",
|
|
"task_running": "running",
|
|
"syslog_hint": "Latest system log entries from the node",
|
|
"tz_saved": "Timezone saved",
|
|
"dns_saved": "DNS saved",
|
|
"time": "Time",
|
|
"node_time": "Node local time",
|
|
"timezone": "Timezone"
|
|
},
|
|
"ha": {
|
|
"title": "High Availability",
|
|
"add": "Add to HA",
|
|
"resource": "Resource",
|
|
"state": "State",
|
|
"group": "Group",
|
|
"no_group": "No group",
|
|
"groups": "HA groups",
|
|
"max_restart": "Max restart",
|
|
"max_relocate": "Max relocate",
|
|
"cluster_only": "HA is only available in cluster mode.",
|
|
"no_resources": "No resources are managed by HA.",
|
|
"select_guest": "Select a VM or container",
|
|
"remove_confirm": "Remove from HA",
|
|
"added": "Added to HA",
|
|
"removed": "Removed from HA"
|
|
},
|
|
"sdn": {
|
|
"title": "SDN (Software Defined Networking)",
|
|
"unavailable": "SDN is not available on this server (requires Proxmox VE 7.0+).",
|
|
"pending": "Pending changes",
|
|
"applied_state": "Applied",
|
|
"apply": "Apply",
|
|
"apply_confirm": "Apply pending SDN changes to all nodes?",
|
|
"applied": "SDN changes applied",
|
|
"zones": "Zones",
|
|
"vnets": "VNets",
|
|
"subnets": "Subnets",
|
|
"type": "Type",
|
|
"zone": "Zone",
|
|
"zone_name": "Zone name",
|
|
"add_zone": "Add zone",
|
|
"edit_zone": "Edit zone",
|
|
"delete_zone": "Delete zone",
|
|
"zone_created": "Zone created",
|
|
"zone_saved": "Zone updated",
|
|
"zone_deleted": "Zone deleted",
|
|
"zone_name_required": "Zone name is required",
|
|
"zone_required": "Select a zone",
|
|
"bridge": "Bridge",
|
|
"peers": "Peers",
|
|
"nodes": "Nodes",
|
|
"vnet_name": "VNet name",
|
|
"add_vnet": "Add VNet",
|
|
"edit_vnet": "Edit VNet",
|
|
"delete_vnet": "Delete VNet",
|
|
"vnet_created": "VNet created",
|
|
"vnet_saved": "VNet updated",
|
|
"vnet_deleted": "VNet deleted",
|
|
"vnet_name_required": "VNet name is required",
|
|
"tag": "Tag",
|
|
"alias": "Alias",
|
|
"vlanaware": "VLAN aware",
|
|
"add_subnet": "Add subnet",
|
|
"delete_subnet": "Delete subnet",
|
|
"subnet_created": "Subnet created",
|
|
"subnet_deleted": "Subnet deleted",
|
|
"subnet_required": "Subnet CIDR is required",
|
|
"gateway": "Gateway",
|
|
"snat": "SNAT",
|
|
"dnszoneprefix": "DNS zone prefix",
|
|
"create_ipam": "Also create a matching IPAM network",
|
|
"no_dns_entries": "No SDN DNS servers"
|
|
},
|
|
"templates": {
|
|
"title": "OS Templates",
|
|
"deploy": "Deploy",
|
|
"vm_name": "VM name",
|
|
"minimums": "Minimums",
|
|
"start_after": "Start after creation",
|
|
"deploy_started": "Deployment started",
|
|
"name_required": "Enter a VM name",
|
|
"download_ct": "Download CT template",
|
|
"download_started": "Download started",
|
|
"download_fields_required": "Select node, storage and template",
|
|
"download_btn": "Download",
|
|
"no_vztmpl_storage": "No vztmpl storage",
|
|
"template": "Template",
|
|
"select_template": "Select template",
|
|
"server": "Server",
|
|
"search": "Search templates...",
|
|
"all_groups": "All groups",
|
|
"all_servers": "All servers",
|
|
"all_types": "All types",
|
|
"type_kvm": "KVM",
|
|
"type_lxc": "LXC",
|
|
"file_template": "File template",
|
|
"auto_import": "Auto Import",
|
|
"importing": "Importing...",
|
|
"no_templates": "No templates found",
|
|
"os": "Operating System",
|
|
"version": "Version",
|
|
"imported": "Imported",
|
|
"imported_count": "Templates imported: {{count}}",
|
|
"imported_none": "No new templates found to import",
|
|
"select_server": "Select server",
|
|
"import_btn": "Import Templates",
|
|
"group": "Group",
|
|
"edit_group": "Edit group",
|
|
"select_group": "Select group",
|
|
"group_updated": "Group updated"
|
|
},
|
|
"storages": {
|
|
"title": "Storages",
|
|
"add": "Add storage",
|
|
"edit": "Edit storage",
|
|
"id": "Storage ID",
|
|
"type": "Type",
|
|
"content": "Content",
|
|
"nodes": "Nodes",
|
|
"nodes_placeholder": "empty = all nodes",
|
|
"all_nodes": "all",
|
|
"usage": "Usage",
|
|
"path": "Path",
|
|
"server": "Server",
|
|
"export": "Export",
|
|
"scan_exports": "Scan server for exports",
|
|
"server_required": "Enter the server address first",
|
|
"no_exports_found": "No exports found — check /etc/exports on the server",
|
|
"share": "Share",
|
|
"datastore": "Datastore",
|
|
"username": "Username",
|
|
"password": "Password",
|
|
"fingerprint": "Fingerprint",
|
|
"vgname": "Volume group",
|
|
"thinpool": "Thin pool",
|
|
"zfs_pool": "ZFS pool / dataset",
|
|
"ceph_pool": "Ceph pool",
|
|
"monhost": "Monitor hosts",
|
|
"monhost_placeholder": "10.0.0.1 10.0.0.2 (external Ceph)",
|
|
"fsname": "CephFS name",
|
|
"sparse": "Thin provisioning",
|
|
"disabled_ok": "Storage disabled",
|
|
"enabled_ok": "Storage enabled",
|
|
"disabled": "Disabled",
|
|
"enabled": "Enabled",
|
|
"inactive": "Inactive",
|
|
"inactive_on": "unavailable on: {{nodes}}",
|
|
"inactive_hint": "Declared in the cluster config but not available on: {{nodes}}. The volume group, pool or mount is missing on those nodes.",
|
|
"id_required": "Storage ID is required",
|
|
"created": "Storage created",
|
|
"saved": "Storage updated",
|
|
"deleted": "Storage deleted",
|
|
"delete_confirm": "Delete storage",
|
|
"native_jobs": "Native PVE backup schedules",
|
|
"no_native_jobs": "No native backup schedules",
|
|
"schedule": "Schedule",
|
|
"schedule_hint": "systemd calendar event, e.g. \"sat 03:00\" or \"mon..fri 02:30\".",
|
|
"compress": "Compression",
|
|
"no_compress": "None",
|
|
"selection": "Guest selection",
|
|
"select_all_guests": "All guests",
|
|
"select_vmids": "Selected VMIDs",
|
|
"retention": "Retention (prune-backups)",
|
|
"comment": "Comment",
|
|
"mailto": "Email notifications",
|
|
"add_native_job": "Add job",
|
|
"edit_native_job": "Edit backup job",
|
|
"delete_job_confirm": "Delete backup job",
|
|
"job_created": "Backup job created",
|
|
"job_updated": "Backup job updated",
|
|
"job_deleted": "Backup job deleted",
|
|
"job_enabled": "Job enabled",
|
|
"job_disabled": "Job disabled",
|
|
"job_schedule_storage_required": "Schedule and storage are required"
|
|
},
|
|
"backups": {
|
|
"title": "Backups",
|
|
"files": "Backup Files",
|
|
"jobs": "Scheduled Jobs",
|
|
"scheduled_jobs": "Scheduled Jobs",
|
|
"storage": "Storage",
|
|
"server": "Server",
|
|
"size": "Size",
|
|
"date": "Date",
|
|
"format": "Format",
|
|
"restore": "Restore",
|
|
"download": "Download",
|
|
"schedule": "Schedule",
|
|
"enabled": "Enabled",
|
|
"disabled": "Disabled",
|
|
"run_now": "Run Now",
|
|
"no_backups": "No backups found",
|
|
"no_backups_match": "No backups match your search",
|
|
"search_backups": "Search by VMID, volume, or notes...",
|
|
"no_jobs": "No scheduled jobs",
|
|
"volume": "Volume",
|
|
"notes": "Notes",
|
|
"vmids": "VMIDs",
|
|
"storage_col": "Storage",
|
|
"keep_last": "Last",
|
|
"keep_daily": "Daily",
|
|
"keep_weekly": "Weekly",
|
|
"keep_monthly": "Monthly",
|
|
"select_server": "Select server",
|
|
"select_storage": "Select storage",
|
|
"node": "Node",
|
|
"all_nodes": "All nodes",
|
|
"select_server_first": "Select a server to view backups",
|
|
"disable": "Disable",
|
|
"enable": "Enable",
|
|
"job_started": "Backup job started",
|
|
"type": "Type",
|
|
"restore_title": "Restore from backup",
|
|
"restore_warning": "Restoring will overwrite the existing VM/container with this VMID. Provide a new VMID to restore as a new guest.",
|
|
"new_vmid_optional": "New VMID (optional)",
|
|
"new_vmid_hint": "Leave empty to restore with the original VMID (existing guest will be overwritten).",
|
|
"start_after_restore": "Start after restore",
|
|
"unique_mac": "Generate unique MAC addresses",
|
|
"restore_started": "Restore started",
|
|
"restore_failed": "Failed to start restore",
|
|
"selected_count": "Selected: {{count}}",
|
|
"restore_selected": "Restore selected",
|
|
"select_all_one_per_vmid": "Select one (latest) backup per VMID",
|
|
"bulk_restore_title": "Bulk restore",
|
|
"bulk_mode": "Restore mode",
|
|
"mode_in_place": "In place (same VMID)",
|
|
"mode_new_vmid": "As new VMIDs",
|
|
"mode_in_place_hint": "Each backup is restored onto its original VMID, overwriting the existing VM/container (must be stopped).",
|
|
"mode_new_vmid_hint": "Each backup is restored as a new guest with an automatically assigned free VMID.",
|
|
"bulk_in_place_warning": "Warning: existing VMs/containers with these VMIDs will be overwritten. Make sure they are stopped.",
|
|
"confirm_overwrite": "I understand existing guests will be overwritten",
|
|
"bulk_restore_done": "Restore started for {{count}} backup(s)",
|
|
"bulk_restore_partial": "Started: {{ok}}, failed: {{fail}}",
|
|
"node_required": "Could not determine node for the operation",
|
|
"restore_target_node": "Restore to node",
|
|
"restore_target_storage": "Target storage",
|
|
"storage_from_backup": "From backup configuration",
|
|
"target_storage_hint": "Where to place the restored disks. \"From backup configuration\" keeps the original storage — pick another when restoring to a node that lacks it.",
|
|
"bulk_target_node": "Target node (override)",
|
|
"bulk_target_node_source": "Use each backup's source node",
|
|
"bulk_target_node_hint": "Leave empty to restore each backup to its original node",
|
|
"invalid_vmid": "Invalid VMID",
|
|
"delete_title": "Delete backup",
|
|
"delete_confirm": "The backup file will be permanently deleted. Continue?",
|
|
"delete_success": "Backup deleted",
|
|
"delete_failed": "Failed to delete backup",
|
|
"create_job": "Create schedule",
|
|
"edit_job": "Edit schedule",
|
|
"job_created": "Schedule created",
|
|
"job_updated": "Schedule updated",
|
|
"job_deleted": "Schedule deleted",
|
|
"job_save_failed": "Failed to save schedule",
|
|
"job_delete_failed": "Failed to delete schedule",
|
|
"delete_job_title": "Delete schedule?",
|
|
"delete_job_confirm": "The schedule will be removed from the planner. Existing backup files are kept.",
|
|
"vmids_required": "Specify at least one VMID",
|
|
"vmids_hint": "Comma-separated VMIDs (e.g. 100, 101) or 'all' for every VM/CT.",
|
|
"all_vms": "All VMs/CTs",
|
|
"all_vms_selected": "All VMs/CTs on the node selected",
|
|
"select_all_visible": "Select all visible",
|
|
"clear_selection": "Clear",
|
|
"pick_server_node_first": "Select a server and node first",
|
|
"no_vms_found": "No VMs/CTs found",
|
|
"cron_required": "Specify a cron expression",
|
|
"cron_hint": "Format: minute hour day month weekday. Example: '0 2 * * *' — daily at 02:00.",
|
|
"mode": "Mode",
|
|
"compress": "Compression",
|
|
"none": "none",
|
|
"preset": "Preset",
|
|
"cron": {
|
|
"daily_2am": "Daily at 02:00",
|
|
"daily_midnight": "Daily at midnight",
|
|
"every_6h": "Every 6 hours",
|
|
"weekly_sunday": "Weekly (Sunday 03:00)",
|
|
"monthly_1st": "Monthly (1st at 04:00)"
|
|
},
|
|
"compression": "Compression",
|
|
"no_compression": "No compression"
|
|
},
|
|
"ipam": {
|
|
"tools": "Tools",
|
|
"summary": "Summary",
|
|
"recent_activity": "Recent activity",
|
|
"select_network": "Select network",
|
|
"auto_allocate": "Auto-allocate IP",
|
|
"next_available": "Next available",
|
|
"allocate_next": "Allocate next IP",
|
|
"conflicts": "Conflicts",
|
|
"no_conflicts": "No conflicts detected",
|
|
"orphans": "Orphan allocations",
|
|
"no_orphans": "No orphan allocations",
|
|
"cleanup_orphans": "Clean up",
|
|
"cleanup_confirm": "Release all orphan IP allocations?",
|
|
"released": "Released",
|
|
"unlinked": "Unlinked VMs",
|
|
"no_unlinked": "All VMs are linked",
|
|
"link_allocations": "Scan & link",
|
|
"linked": "Linked",
|
|
"link_skipped": "Skipped: {{count}}",
|
|
"ip_history": "IP history lookup",
|
|
"pool_required_hint": "Auto-allocation requires an auto-assign pool in the network.",
|
|
"resource_required": "Please specify a resource before allocating an IP.",
|
|
"dashboard": "IPAM Dashboard",
|
|
"networks": "Networks",
|
|
"networks_count": "Networks",
|
|
"total_allocated": "Total allocated",
|
|
"total_reserved": "Total reserved",
|
|
"vm_count": "VMs / containers",
|
|
"view_all_networks": "View all networks",
|
|
"add_network": "Add network",
|
|
"no_networks": "No networks found",
|
|
"ips_used": "IPs used",
|
|
"network_created": "Network created",
|
|
"allocations": "Allocations",
|
|
"history": "History",
|
|
"total_ips": "Total IPs",
|
|
"allocated": "Allocated",
|
|
"reserved": "Reserved",
|
|
"available": "Available",
|
|
"utilization": "Utilization",
|
|
"network": "Network",
|
|
"network_info": "Network Information",
|
|
"pools": "Pools",
|
|
"range": "Range",
|
|
"usage": "Usage",
|
|
"resource": "Resource",
|
|
"description": "Description",
|
|
"action": "Action",
|
|
"details": "Details",
|
|
"server": "Server",
|
|
"bridge": "Bridge",
|
|
"create_network": "Create Network",
|
|
"cidr": "CIDR",
|
|
"gateway": "Gateway",
|
|
"vms_linked": "VMs Linked",
|
|
"network_overview": "Network Overview",
|
|
"edit_network": "Edit Network",
|
|
"delete_network": "Delete Network",
|
|
"delete_network_confirm": "Delete network \"{{name}}\"? This action cannot be undone.",
|
|
"force_delete": "Force delete (including allocations)",
|
|
"network_updated": "Network updated",
|
|
"network_deleted": "Network deleted",
|
|
"is_active": "Active",
|
|
"workspace": "Workspace",
|
|
"workspace_global": "— global —",
|
|
"is_default": "Default network for workspace",
|
|
"default": "default",
|
|
"dns_domain": "DNS Domain",
|
|
"add_pool": "Add Pool",
|
|
"edit_pool": "Edit Pool",
|
|
"pool_type": "Pool Type",
|
|
"auto_assign": "Auto-assign",
|
|
"pool_created": "Pool created",
|
|
"pool_updated": "Pool updated",
|
|
"pool_deleted": "Pool deleted",
|
|
"delete_pool_confirm": "Delete pool \"{{name}}\"?",
|
|
"ip_map": "IP Map",
|
|
"ip_map_truncated": "Showing {{shown}} of {{total}} addresses",
|
|
"add_allocation": "Add IP",
|
|
"edit_allocation": "Edit Allocation",
|
|
"allocation_created": "Allocation created",
|
|
"allocation_updated": "Allocation updated",
|
|
"delete_allocation_confirm": "Release IP {{ip}}?",
|
|
"notes": "Notes",
|
|
"addresses": "IP addresses",
|
|
"add_address": "Add IP",
|
|
"add_address_title": "Add IP address",
|
|
"add_address_description": "The address is allocated in IPAM and attached to the guest interface as an alias.",
|
|
"add_address_submit": "Assign address",
|
|
"no_addresses": "No addresses in IPAM",
|
|
"primary": "primary",
|
|
"make_primary": "Make primary address",
|
|
"primary_managed_by_nic": "The primary address comes from the NIC config",
|
|
"from_nic_config": "from NIC config",
|
|
"applied": "applied",
|
|
"not_applied": "not applied",
|
|
"runtime_only": "until reboot",
|
|
"runtime_only_hint": "Address is up, but the guest network stack was not recognised — it will not survive a reboot",
|
|
"discovered": "discovered",
|
|
"apply": "Apply",
|
|
"release": "Release",
|
|
"release_title": "Release address?",
|
|
"release_description": "Address {{ip}} will be removed from the guest interface and released in IPAM.",
|
|
"address_added": "Address {{ip}} assigned",
|
|
"address_released": "Address {{ip}} released",
|
|
"address_released_not_removed": "{{ip}} released in IPAM, but could not be removed from the guest: {{error}}",
|
|
"address_runtime_only": "{{ip}} is up but not persisted: guest network stack was not recognised",
|
|
"address_reserved_not_applied": "{{ip}} reserved but not applied: {{error}}",
|
|
"address_mode": "Address",
|
|
"next_free": "Next free",
|
|
"manual_ip": "Enter manually",
|
|
"target_interface": "Guest interface",
|
|
"any_pool": "Any",
|
|
"pool": "Pool",
|
|
"err_network_required": "Select a network",
|
|
"err_bad_ip": "Invalid IP address",
|
|
"extra_addresses": "+{{count}} more"
|
|
},
|
|
"logs": {
|
|
"level": "Level",
|
|
"category": "Category",
|
|
"message": "Message",
|
|
"delete_old": "Delete old logs"
|
|
},
|
|
"settings": {
|
|
"profile": "Profile",
|
|
"notification_channels": "Notification channels",
|
|
"panel": "Panel",
|
|
"security": "Security",
|
|
"notifications": "Notifications",
|
|
"about": "About",
|
|
"profile_info": "Profile Information",
|
|
"username": "Username",
|
|
"display_name": "Display Name",
|
|
"change_password": "Change Password",
|
|
"current_password": "Current Password",
|
|
"new_password": "New Password",
|
|
"confirm_password": "Confirm Password",
|
|
"password_mismatch": "Passwords do not match",
|
|
"tfa": {
|
|
"title": "Two-Factor Authentication",
|
|
"on": "Enabled",
|
|
"off": "Disabled",
|
|
"description": "Extra login protection: a one-time code from an authenticator app (Google Authenticator, Authy, 1Password, etc.).",
|
|
"enable": "Enable 2FA",
|
|
"disable": "Disable 2FA",
|
|
"confirm_disable": "Confirm disable",
|
|
"current_code": "Current code (or backup)",
|
|
"verify_enable": "Verify & enable",
|
|
"enter_code": "Enter the code from the app",
|
|
"scan_hint": "Scan the QR code in your authenticator app.",
|
|
"manual_key": "Or enter the key manually:",
|
|
"backup_codes_title": "Backup codes",
|
|
"backup_codes_hint": "Store these one-time codes somewhere safe. Each works once and replaces your app code if you lose access. Shown only now.",
|
|
"copy_codes": "Copy codes",
|
|
"backup_remaining": "Backup codes remaining: {{count}}",
|
|
"enabled_ok": "Two-factor authentication enabled",
|
|
"disabled_ok": "Two-factor authentication disabled"
|
|
},
|
|
"panel_settings": "Panel Settings",
|
|
"panel_name": "Panel Name",
|
|
"language": "Language",
|
|
"security_settings": "Security Settings",
|
|
"max_attempts": "Max Login Attempts",
|
|
"lockout_duration": "Lockout Duration",
|
|
"session_timeout": "Session Timeout",
|
|
"seconds": "seconds",
|
|
"minutes": "minutes",
|
|
"days": "days",
|
|
"log_retention_days": "Log Retention",
|
|
"security_saved": "Security settings saved",
|
|
"version": "Version",
|
|
"check_updates": "Check for Updates",
|
|
"update_available": "Update available",
|
|
"up_to_date": "You are up to date",
|
|
"update_repository": "Update repository",
|
|
"repo_saved": "Repository URL saved",
|
|
"perform_update": "Update now",
|
|
"update_confirm": "Start the update? The panel will pull the latest version, rebuild and restart — it will be briefly unavailable.",
|
|
"update_started": "Update started",
|
|
"update_in_progress": "Update in progress",
|
|
"update_failed": "Update failed",
|
|
"update_reset": "Reset status",
|
|
"send_test": "Send test",
|
|
"test_email_placeholder": "test@example.com",
|
|
"test_email_required": "Enter a test email address",
|
|
"chat_id_required": "Enter a Telegram chat ID",
|
|
"my_notifications": "My notifications",
|
|
"notifications_enabled": "Enable notifications",
|
|
"email_enabled": "Email notifications",
|
|
"email_critical_only": "Email: critical only",
|
|
"telegram_enabled": "Telegram notifications",
|
|
"verify": "Verify",
|
|
"quiet_start": "Quiet hours start",
|
|
"quiet_end": "Quiet hours end",
|
|
"prefs_saved": "Preferences saved",
|
|
"test_sent": "Test notification sent",
|
|
"send_test_notification": "Send test notification"
|
|
},
|
|
"ssh_keys": {
|
|
"title": "SSH Keys",
|
|
"add": "Add SSH key",
|
|
"edit": "Edit SSH key",
|
|
"name": "Name",
|
|
"public_key": "Public key",
|
|
"private_key": "Private key",
|
|
"private_key_hint": "The private key is stored encrypted. Used only on explicit download.",
|
|
"private_key_replace_hint": "Leave empty to keep the current value",
|
|
"comment": "Comment",
|
|
"fingerprint": "Fingerprint",
|
|
"has_private": "Has private",
|
|
"no_private": "Public only",
|
|
"download_private": "Download private key",
|
|
"copy_public": "Copy public key",
|
|
"copied": "Copied",
|
|
"copy_failed": "Copy failed",
|
|
"created": "SSH key added",
|
|
"deleted": "SSH key deleted",
|
|
"confirm_delete": "Delete this SSH key?",
|
|
"empty": "No saved SSH keys",
|
|
"manage_for_user": "User SSH keys"
|
|
},
|
|
"users": {
|
|
"users": "Users",
|
|
"roles": "Roles",
|
|
"sessions": "Sessions",
|
|
"security": "Security",
|
|
"create": "Create User",
|
|
"edit": "Edit User",
|
|
"create_role": "Create Role",
|
|
"edit_role": "Edit Role",
|
|
"role": "Role",
|
|
"no_role": "No role",
|
|
"last_login": "Last Login",
|
|
"active": "Active",
|
|
"inactive": "Inactive",
|
|
"locked": "Locked",
|
|
"is_active": "Active",
|
|
"is_admin": "Administrator",
|
|
"require_password_change": "Require password change",
|
|
"reset_password": "Reset Password",
|
|
"new_password": "New password",
|
|
"unlock": "Unlock",
|
|
"impersonate": "Log in as this user",
|
|
"impersonate_started": "You are now logged in as {{name}}",
|
|
"impersonate_stopped": "Returned to your admin account",
|
|
"impersonating_as": "Viewing as {{name}}",
|
|
"impersonated_by": "impersonated by {{name}}",
|
|
"return_to_admin": "Return to admin",
|
|
"manage_servers": "Assigned Servers",
|
|
"manage_ssh_keys": "Manage SSH Keys",
|
|
"assigned_servers": "Assigned Servers",
|
|
"compatible_servers": "Compatible Servers",
|
|
"incompatible": "Incompatible",
|
|
"failed_attempts": "Failed Attempts",
|
|
"terminate_sessions": "Terminate Sessions",
|
|
"disable_2fa": "Disable user's 2FA",
|
|
"terminate_all_sessions": "Terminate All Sessions",
|
|
"permissions_count": "Permissions",
|
|
"permissions": "Permissions",
|
|
"select_all": "Select all",
|
|
"clear_all": "Clear all",
|
|
"system_role": "System",
|
|
"users_count": "Users",
|
|
"active_sessions": "Active Sessions",
|
|
"user_agent": "User Agent",
|
|
"device": "Device",
|
|
"last_activity": "Last Activity",
|
|
"created": "Created",
|
|
"expires": "Expires",
|
|
"security_settings": "Security Settings",
|
|
"max_login_attempts": "Max Login Attempts",
|
|
"lockout_duration": "Lockout Duration (min)",
|
|
"session_timeout": "Session Timeout (min)",
|
|
"ip_block_threshold": "IP Block Threshold",
|
|
"ip_block_duration": "IP Block Duration (min)",
|
|
"password_min_length": "Min Password Length",
|
|
"password_require_uppercase": "Uppercase letter",
|
|
"password_require_lowercase": "Lowercase letter",
|
|
"password_require_numbers": "Number",
|
|
"password_require_special": "Special character",
|
|
"blocked_ips": "Blocked IPs",
|
|
"block_ip": "Block IP",
|
|
"ip_address": "IP address",
|
|
"reason": "Reason",
|
|
"duration_minutes": "Duration (min, empty = permanent)",
|
|
"permanent": "Permanent",
|
|
"blocked_at": "Blocked at",
|
|
"expires_at": "Expires",
|
|
"unblock": "Unblock",
|
|
"security_events": "Security Events",
|
|
"event_type": "Event Type",
|
|
"workspaces": "Workspaces",
|
|
"no_workspaces": "No workspaces",
|
|
"workspace_required": "User must belong to the server's workspace",
|
|
"quota": {
|
|
"manage": "Quotas (limits)",
|
|
"hint": "Leave a field empty for no limit on that metric.",
|
|
"instances": "Max instances (VM + LXC)",
|
|
"cores": "Max vCPU (cores)",
|
|
"memory_mb": "Max RAM (MB)",
|
|
"disk_gb": "Max disk (GB)",
|
|
"used": "Used",
|
|
"unlimited": "unlimited",
|
|
"saved": "Quota saved"
|
|
},
|
|
"sessions_terminated_one": "Terminated {{count}} session",
|
|
"sessions_terminated_other": "Terminated {{count}} sessions"
|
|
},
|
|
"workspaces": {
|
|
"create": "Create Workspace",
|
|
"edit": "Edit Workspace",
|
|
"servers": "Servers",
|
|
"users": "Users",
|
|
"created": "Created",
|
|
"all": "All workspaces",
|
|
"select": "Select workspace",
|
|
"assign_servers": "Assign Servers",
|
|
"assign_users": "Assign Users",
|
|
"no_servers": "No servers available",
|
|
"no_users": "No users available"
|
|
},
|
|
"tasks": {
|
|
"view_log": "View log",
|
|
"task_log": "Task log",
|
|
"clear_completed": "Clear Completed",
|
|
"running": "Running",
|
|
"queued": "Queued",
|
|
"completed": "Completed",
|
|
"failed": "Failed",
|
|
"tasks_count": "tasks",
|
|
"description": "Description",
|
|
"step_message": "Step / Message",
|
|
"server": "Server",
|
|
"node": "Node",
|
|
"started": "Started",
|
|
"progress": "Progress",
|
|
"active_count_one": "{{count}} active task",
|
|
"active_count_other": "{{count}} active tasks",
|
|
"no_active": "No active tasks"
|
|
},
|
|
"notifications": {
|
|
"title": "Notifications",
|
|
"mark_all_read": "Mark all read",
|
|
"empty": "No notifications"
|
|
},
|
|
"graphs": {
|
|
"cpu_usage": "CPU Usage",
|
|
"memory_usage": "Memory Usage",
|
|
"network_in": "Network In",
|
|
"network_out": "Network Out",
|
|
"disk_read": "Disk Read",
|
|
"disk_write": "Disk Write",
|
|
"iops_read": "IOPS Read",
|
|
"iops_write": "IOPS Write",
|
|
"disk_usage_pct": "Disk Usage",
|
|
"io_delay": "IO Delay",
|
|
"load_average": "Load Average",
|
|
"swap_usage": "Swap Usage",
|
|
"root_fs": "Root Filesystem"
|
|
},
|
|
"console": {
|
|
"connecting": "Connecting to console...",
|
|
"reconnect": "Reconnect",
|
|
"connected": "Connected",
|
|
"error": "Error",
|
|
"terminal_closed": "Terminal connection closed",
|
|
"terminal_error": "Terminal connection error",
|
|
"power": "Power",
|
|
"reboot": "Reboot",
|
|
"shutdown": "Shutdown",
|
|
"hard_reset": "Hard Reset",
|
|
"hard_stop": "Hard Stop",
|
|
"confirm_hard_reset": "Hard reset will forcibly reboot the VM without a graceful OS shutdown. Continue?",
|
|
"confirm_hard_stop": "Hard stop will forcibly kill the VM process without a graceful shutdown. Continue?",
|
|
"action_sent": "Command sent",
|
|
"action_failed": "Failed to send command",
|
|
"extra_keys": "Extra keys",
|
|
"ctrl_alt_del": "Ctrl+Alt+Del",
|
|
"ctrl_alt_backspace": "Ctrl+Alt+Backspace",
|
|
"scale_to_fit": "Scale to fit",
|
|
"actual_size": "Actual size",
|
|
"clipboard": "Clipboard",
|
|
"clipboard_title": "Send text to VM clipboard",
|
|
"clipboard_desc": "Text will be sent to the guest clipboard via VNC.",
|
|
"clipboard_placeholder": "Type or paste text to send...",
|
|
"send": "Send",
|
|
"screenshot": "Screenshot",
|
|
"screenshot_failed": "Failed to capture screenshot"
|
|
},
|
|
"images": {
|
|
"title": "Images",
|
|
"server": "Server",
|
|
"node": "Node",
|
|
"no_nodes": "No nodes available",
|
|
"search": "Search image...",
|
|
"arch": "Architecture",
|
|
"arch_all": "All architectures",
|
|
"cloud_section": "Cloud VM images",
|
|
"iso_section": "ISO images",
|
|
"lxc_section": "LXC templates (Proxmox repository)",
|
|
"mirror_badge": "mirror",
|
|
"no_images_filter": "No images match the filter.",
|
|
"download_by_url": "Download by URL",
|
|
"select_server_node": "Select a server and node to download an image.",
|
|
"select_server_node_list": "Select a server and node to view the list.",
|
|
"node_storage": "On node storage",
|
|
"no_iso_links": "No saved ISO links. Download an image by URL or add a mirror with type «iso» below.",
|
|
"download_iso_title": "Download ISO",
|
|
"iso_local_desc": "The file will be uploaded to the node through the panel",
|
|
"iso_url_desc": "Proxmox will download the image from the URL directly to the node",
|
|
"node_label": "Node",
|
|
"arch_label": "Architecture",
|
|
"tab_url": "By URL",
|
|
"tab_local": "Local file",
|
|
"url_label": "Image URL",
|
|
"detect_filename_title": "Detect filename from URL",
|
|
"detect_filename_failed": "Could not determine filename",
|
|
"filename_label": "Filename in storage",
|
|
"filename_hint": "Proxmox only accepts .iso and .img — otherwise the extension will be added automatically. The wand button next to the URL detects the real filename (via Content-Disposition or the final URL after redirects) when it is not visible from the URL itself.",
|
|
"drop_iso": "Drop ISO file here",
|
|
"drop_iso_hint": "or click to select (.iso, .img)",
|
|
"remove_file": "Remove file",
|
|
"local_filename_hint": "The filename in storage is assigned automatically from the selected file's name.",
|
|
"storage_iso": "Storage (iso)",
|
|
"storage_import": "Download storage (import)",
|
|
"storage_vztmpl": "Storage (vztmpl)",
|
|
"select_storage": "Select storage",
|
|
"free": "free",
|
|
"no_iso_storage": "No storage with ISO content type. Enable ISO in storage settings.",
|
|
"no_import_storage": "No storage with import support (content=import). A dir/NFS storage with content type «Import» is required (PVE 8.2+).",
|
|
"no_vztmpl_storage": "No storage with container template support (vztmpl).",
|
|
"checksum_optional": "Checksum (optional)",
|
|
"algo": "Algorithm",
|
|
"iso_upload_started": "ISO upload to node started in background",
|
|
"iso_download_started": "ISO download started in background",
|
|
"upload_btn": "Upload",
|
|
"download_btn": "Download",
|
|
"create_template_title": "Create template from image",
|
|
"download_image_title": "Download image",
|
|
"make_template_label": "Convert to VM template after download (disk import + cloud-init)",
|
|
"disk_storage": "VM disk storage (images)",
|
|
"no_disk_storage": "No storage for VM disks (content=images).",
|
|
"vmid_label": "Template VMID (blank = auto)",
|
|
"vmid_placeholder": "e.g. 9001",
|
|
"cores": "Cores",
|
|
"memory_mb": "Memory (MB)",
|
|
"bridge": "Bridge",
|
|
"ci_user": "cloud-init user",
|
|
"ci_user_placeholder": "e.g. ubuntu",
|
|
"ci_password": "cloud-init password",
|
|
"template_started": "Template creation started in background",
|
|
"download_started": "Image download started in background",
|
|
"create_template_btn": "Create template"
|
|
},
|
|
"mirrors": {
|
|
"title": "Custom mirrors",
|
|
"add": "Add",
|
|
"empty": "No custom mirrors yet.",
|
|
"disabled_badge": "off",
|
|
"delete_title": "Delete mirror?",
|
|
"deleted": "Mirror deleted",
|
|
"saved": "Saved",
|
|
"add_title": "Add mirror",
|
|
"edit_title": "Edit mirror",
|
|
"name": "Name",
|
|
"kind": "Type",
|
|
"kind_qcow2": "qcow2 (VM)",
|
|
"kind_vztmpl": "vztmpl (LXC)",
|
|
"kind_iso": "iso (installation)",
|
|
"arch": "Architecture",
|
|
"os": "OS",
|
|
"version": "Version",
|
|
"url_or_template_hint": "(or template name below)",
|
|
"url_required_hint": "(required)",
|
|
"template_name": "Template name (vztmpl)",
|
|
"checksum": "Checksum",
|
|
"algo": "Algorithm",
|
|
"description": "Description",
|
|
"enabled_label": "Enabled (show in catalog)",
|
|
"url_required": "URL is required for {{kind}}",
|
|
"url_or_template_required": "URL or template name is required"
|
|
},
|
|
"scripts": {
|
|
"title": "Script catalog",
|
|
"subtitle": "Bash scripts for execution on Proxmox nodes and guests (VM/LXC)",
|
|
"new_script": "New script",
|
|
"tab_catalog": "Catalog",
|
|
"tab_repos": "Git sources",
|
|
"tab_executions": "Execution history",
|
|
"search": "Search by name...",
|
|
"no_scripts": "No scripts yet",
|
|
"no_search_results": "Nothing found",
|
|
"target_node": "Proxmox node",
|
|
"target_guest": "VM/LXC",
|
|
"source_community": "Community Scripts",
|
|
"run": "Run",
|
|
"run_title": "Run: {{name}}",
|
|
"execution_title": "Run: {{name}}",
|
|
"no_output": "(no output)",
|
|
"name_placeholder": "Log cleanup",
|
|
"confirm_delete": "Delete script «{{name}}»?",
|
|
"deleted": "Script deleted",
|
|
"repo_added": "Source added",
|
|
"repo_url_placeholder": "https://github.com/user/scripts.git",
|
|
"add_repo": "Add source",
|
|
"add_community_scripts": "Community-Scripts (ProxmoxVE)",
|
|
"no_repos": "No Git sources configured",
|
|
"last_synced": "synced",
|
|
"sync_done": "Synced: +{{created}} / updated {{updated}}",
|
|
"sync_failed": "Sync failed",
|
|
"sync": "Synchronize",
|
|
"no_executions": "No executions yet",
|
|
"col_script": "Script",
|
|
"col_target": "Target",
|
|
"col_status": "Status",
|
|
"col_exit_code": "Exit code",
|
|
"col_started": "Started",
|
|
"edit_title": "Edit script",
|
|
"new_title": "New script",
|
|
"name": "Name",
|
|
"slug": "Slug",
|
|
"description": "Description",
|
|
"category": "Category",
|
|
"target_type": "Execution target",
|
|
"interpreter": "Interpreter",
|
|
"content": "Script content",
|
|
"params_hint": "Parameters are available as environment variables ($NAME).",
|
|
"params": "Parameters",
|
|
"add_param": "Add parameter",
|
|
"param_label": "Label",
|
|
"required": "req.",
|
|
"validation_required": "Fill in the name, slug and script content",
|
|
"saved": "Script saved",
|
|
"server": "Proxmox server",
|
|
"pick_server": "Select server",
|
|
"node": "Node",
|
|
"pick_node": "Select node",
|
|
"guest": "VM / LXC",
|
|
"pick_guest": "Select VM/container",
|
|
"community_scripts_warning": "This script will create a new LXC container on the Proxmox host and will fetch additional code from GitHub at runtime (misc/build.func) — this is third-party code that pvemanager does not verify or pin.",
|
|
"param_required": "Parameter «{{label}}» is required",
|
|
"exit_code": "Exit code"
|
|
},
|
|
"certs": {
|
|
"title": "TLS certificates",
|
|
"upload": "Upload certificate",
|
|
"apply": "Apply",
|
|
"expired": "Expired",
|
|
"days_left": "{{d}} days",
|
|
"cert_required": "Paste the certificate in PEM format",
|
|
"uploaded": "Certificate uploaded, pveproxy restarted",
|
|
"confirm_delete": "Delete the custom certificate for node «{{node}}»? The self-signed certificate will be restored and pveproxy will restart.",
|
|
"delete": "Delete certificate",
|
|
"deleted": "Certificate deleted, self-signed restored",
|
|
"pem_cert": "Certificate (PEM, with chain)",
|
|
"pem_key": "Private key (PEM, optional)",
|
|
"custom": "Custom",
|
|
"builtin": "Self-signed",
|
|
"subject": "Subject",
|
|
"issuer": "Issuer",
|
|
"notbefore": "Valid from",
|
|
"notafter": "Valid until",
|
|
"pubkey": "Key",
|
|
"fingerprint": "Fingerprint"
|
|
},
|
|
"topology": {
|
|
"title": "Network topology",
|
|
"subtitle": "Hierarchical map of clusters, nodes and guests",
|
|
"empty": "No servers available",
|
|
"error": "Failed to load topology",
|
|
"too_many": "Too many objects; grouping is enabled",
|
|
"filters": {
|
|
"connection": "Connection",
|
|
"all_connections": "All connections",
|
|
"vm_status": "VM status",
|
|
"status_all": "All",
|
|
"status_running": "Running",
|
|
"status_stopped": "Stopped",
|
|
"threshold": "Group VMs above",
|
|
"threshold_off": "Off"
|
|
},
|
|
"actions": {
|
|
"fit": "Fit to screen",
|
|
"fullscreen": "Fullscreen",
|
|
"exit_fullscreen": "Exit fullscreen",
|
|
"export": "Export",
|
|
"export_png": "Export PNG",
|
|
"export_svg": "Export SVG",
|
|
"refresh": "Refresh"
|
|
},
|
|
"export": {
|
|
"progress": "Rendering image…",
|
|
"done": "Image saved",
|
|
"failed": "Export failed",
|
|
"svg_hint": "SVG embeds HTML; some vector editors render it only partially"
|
|
},
|
|
"legend": {
|
|
"title": "Legend",
|
|
"panel": "Panel",
|
|
"cluster": "Cluster",
|
|
"standalone": "Standalone",
|
|
"node": "Proxmox node",
|
|
"vm": "Virtual machine",
|
|
"lxc": "Container",
|
|
"running": "Running",
|
|
"stopped": "Stopped",
|
|
"stale": "Cached data"
|
|
},
|
|
"node": {
|
|
"cpu": "CPU",
|
|
"ram": "RAM",
|
|
"clusters_count_one": "{{count}} cluster",
|
|
"clusters_count_other": "{{count}} clusters",
|
|
"nodes_count_one": "{{count}} node",
|
|
"nodes_count_other": "{{count}} nodes",
|
|
"guests_count_one": "{{count}} guest",
|
|
"guests_count_other": "{{count}} guests"
|
|
},
|
|
"group": {
|
|
"count": "{{count}} VMs",
|
|
"count_one": "{{count}} VM",
|
|
"expand": "Show all",
|
|
"collapse": "Collapse",
|
|
"breakdown": "{{running}} running · {{stopped}} stopped"
|
|
},
|
|
"warning": {
|
|
"offline": "{{server}} is unreachable — showing cached data",
|
|
"error": "{{server}}: {{message}}"
|
|
}
|
|
}
|
|
}
|