Files
BetterDesk/web-nodejs/lang/en.json
T
UNITRONIX 8956ec653d feat(console): label optional UX 3.5 shell switch as Beta
Keep classic as the default production chrome. Mark the opt-in switcher
with a BETA badge/tooltip and show a topbar chip while UX 3.5 is active.
2026-07-31 20:12:42 +02:00

4346 lines
214 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"meta": {
"lang": "en",
"name": "English",
"native_name": "English",
"direction": "ltr"
},
"common": {
"loading": "Loading...",
"confirm": "Confirm",
"alert": "Alert",
"prompt": "Enter value",
"copied": "Copied to clipboard",
"save": "Save",
"saved": "Saved",
"error": "Error",
"success": "Success",
"warning": "Warning",
"info": "Information",
"all": "All",
"cancel": "Cancel",
"delete": "Delete",
"actions": "Actions",
"close": "Close",
"required": "required",
"name_required": "Name is required",
"active": "Active",
"inactive": "Inactive",
"invalid_json": "Invalid JSON",
"field_required": "{field} is required",
"back": "Back",
"edit": "Edit",
"yes": "Yes",
"no": "No"
},
"nav": {
"main": "Main",
"tools": "Tools",
"system": "System",
"dashboard": "Dashboard",
"devices": "Devices",
"keys": "Keys",
"generator": "Generator",
"settings": "Settings",
"users": "Users",
"inventory": "Inventory",
"tickets": "Tickets",
"help_requests": "Help Requests",
"activity": "Activity",
"automation": "Automation",
"file_transfer": "File Transfer",
"network": "Network",
"dataguard": "DataGuard",
"reports": "Reports",
"tenants": "Tenants",
"registrations": "Enrollment Requests",
"management": "Management",
"toggle_sidebar": "Toggle sidebar",
"toggle_theme": "Toggle theme",
"cdap": "CDAP Devices",
"fleet": "Fleet",
"scaling": "Scaling",
"cross_platform": "Cross-Platform",
"tokens": "Device Tokens",
"organizations": "Organizations",
"policies": "Policies",
"attestation": "Attestation",
"remote": "Remote Desktop",
"remote_open_tab": "Open Remote Desktop client in a new tab",
"toolkit": "Toolkit",
"security_audit": "Security Audit",
"permissions": "Permissions",
"languages": "Languages",
"resource_control": "Resource Control",
"sdk_studio": "SDK Studio",
"chat": "Chat",
"help": "Help",
"expand_sidebar": "Expand sidebar",
"login": "Login",
"server_management": "Server Management",
"server_attestation": "Server Attestation",
"commercialization": "Commercialization"
},
"mobile_nav": {
"label": "Main navigation",
"home": "Home",
"devices": "Devices",
"remote": "Remote",
"chat": "Chat",
"more": "More"
},
"auth": {
"login": "Login",
"logout": "Logout",
"login_title": "Sign In",
"login_subtitle": "Sign in to BetterDesk Console",
"username": "Username",
"username_placeholder": "Enter username",
"password": "Password",
"password_placeholder": "Enter password",
"remember_me": "Remember me",
"login_failed": "Login failed. Please check your credentials.",
"or": "or",
"login_sso": "Sign in with SSO",
"login_sso_with": "Sign in with {{provider}}",
"oidc_denied": "Access was denied by the identity provider.",
"oidc_invalid": "Invalid OIDC callback. Please try again.",
"oidc_failed": "OIDC authentication failed. Please try again.",
"oidc_error": "An error occurred during SSO login.",
"oidc_no_account": "Your account was not found and auto-registration is disabled.",
"invalid_credentials": "Invalid username or password.",
"username_collision": "A local account with this username already exists. Sign in with your local password, or ask an administrator to rename or remove the conflicting account.",
"pro_only_account": "This account is for RustDesk desktop client only. Please use the RustDesk app to log in.",
"fill_all_fields": "Please fill in all fields",
"logout_confirm": "Are you sure you want to logout?",
"change_password": "Change Password",
"password_required": "Password is required",
"totp_title": "Two-Factor Authentication",
"totp_subtitle": "Enter the 6-digit code from your authenticator app",
"totp_code": "Verification Code",
"totp_verify": "Verify",
"totp_use_recovery": "Use a recovery code instead",
"totp_use_code": "Use authenticator code instead",
"totp_recovery_code": "Recovery Code",
"totp_back_to_login": "Back to login",
"totp_invalid_code": "Invalid verification code. Please try again.",
"totp_enter_code": "Please enter a 6-digit code",
"totp_enter_recovery": "Please enter a recovery code",
"totp_session_expired": "Session expired. Please log in again.",
"totp_rate_limited": "Too many attempts. Please try again later.",
"totp_already_enabled": "Two-factor authentication is already enabled",
"passwords_mismatch": "Passwords do not match",
"emergency_mode_banner": "Go server unreachable — running in emergency mode (admin-only, limited functionality)"
},
"dashboard": {
"title": "Dashboard",
"subtitle": "Overview of your BetterDesk server",
"total_devices": "Total Devices",
"online_now": "Online Now",
"banned": "Banned",
"active_connections": "Active Connections",
"offline_devices": "Offline",
"server_status": "Server Status",
"quick_actions": "Quick Actions",
"manage_devices": "Manage connected devices",
"view_keys": "View server keys",
"generate_config": "Generate client config",
"server_settings": "Configure settings",
"greeting_morning": "Good morning, {name}",
"greeting_afternoon": "Good afternoon, {name}",
"greeting_evening": "Good evening, {name}",
"greeting_night": "Good night, {name}",
"health_overview": "Health Overview",
"devices_online": "Devices Online",
"active_alerts": "Active Alerts",
"recent_connections": "Total Devices",
"server_uptime": "Server Uptime",
"activity_feed": "Recent Activity",
"no_recent_activity": "No recent activity",
"just_now": "just now",
"ago": "ago",
"tip_desktop_mode": "Try Desktop Mode for a multi-window workspace with monitoring widgets.",
"tip_keyboard_shortcuts": "Press Ctrl+K anywhere to open the quick search command palette.",
"tip_address_book": "Sync your address book across devices by logging in from the RustDesk client.",
"tip_2fa": "Enable Two-Factor Authentication in Settings for extra account security.",
"tip_bulk_actions": "Select multiple devices and use bulk actions to manage them at once.",
"tip_theme": "Switch between Dark and Light themes in the sidebar settings.",
"tip_cdap": "Connect IoT devices and industrial sensors via the CDAP gateway.",
"tip_tutorials": "Click the help button in the bottom-right corner for interactive tutorials.",
"client_config_eyebrow": "Client setup",
"client_config_title": "RustDesk Client Configuration",
"client_config_subtitle": "Use these values in RustDesk to connect clients to this BetterDesk server.",
"copy_all_config": "Copy all",
"show_config_qr": "Show QR",
"config_server_id": "ID Server",
"config_relay_server": "Relay Server",
"config_api_server": "API Server",
"config_key": "Key",
"client_config_hint": "Enter these values in RustDesk network settings, in the ID/Relay server section.",
"open_generator": "Client Generator",
"open_keys": "Open Keys",
"open_remote": "Open the remote desktop console",
"attention_panel": "Needs Attention",
"system_ready": "System ready",
"system_attention": "Needs attention",
"config_not_ready": "Client configuration is not ready yet.",
"client_config_qr_title": "RustDesk Configuration QR",
"client_config_qr_hint": "Scan this code from a RustDesk client that supports configuration QR codes.",
"client_server_host_label": "Client server address",
"client_server_host_placeholder": "e.g. 203.0.113.10 or desk.example.com",
"client_server_host_hint": "Address RustDesk clients use to reach this server. Change it when the panel URL differs from the client-facing IP or DNS. For split domains, configure Settings → Public client endpoints.",
"client_server_host_env_hint": "Public ID, relay, and API endpoints are configured in Settings → Public client endpoints. Clear those fields there to use this override again.",
"apply_client_host": "Apply",
"copy_deploy_string": "Copy deploy string",
"show_intune_script": "Intune / PSADT script",
"intune_script_title": "Windows deployment snippet",
"intune_script_hint": "Run elevated after the RustDesk MSI finishes. Uses the same config string as Copy deploy string.",
"deploy_string_not_ready": "Deploy string is not available until the server public key is loaded."
},
"devices": {
"title": "Devices",
"id": "ID",
"hostname": "Hostname",
"username": "Username",
"platform": "Platform",
"version": "Version",
"ip_address": "IP Address",
"note": "Note",
"last_seen": "Last Seen",
"last_online": "Last Online",
"first_seen": "First Seen",
"created": "Created",
"status": "Status",
"ban_reason": "Ban Reason",
"actions": "Actions",
"search_placeholder": "Search devices...",
"filter_all": "All",
"filter_online": "Online",
"filter_offline": "Offline",
"filter_banned": "Banned",
"no_signal_tooltip": "Client contacted the API recently but is not registered on the signal server (UDP :21116). Restart the client after server migration.",
"selected": "selected",
"showing": "Showing",
"of": "of",
"per_page": "Per page",
"sync_status": "Sync Status",
"sync_success": "Status synchronized successfully",
"empty_title": "No devices found",
"empty_text": "No devices match your current filters",
"edit_title": "Device Details",
"delete_title": "Delete Device",
"delete_confirm": "Are you sure you want to delete device {id}?",
"delete_reserved_hint": "The device will be hidden and its ID will stay reserved. Select permanent deletion to release the ID for reuse.",
"delete_warning": "You are about to permanently delete this device:",
"delete_permanent": "This action cannot be undone. All data associated with this device will be permanently removed from the database.",
"delete_success": "Device deleted successfully",
"revoke_option": "Revoke device",
"revoke_hint": "Block device ID and disconnect active connections",
"revoke_success": "Device revoked successfully",
"details": "Device Details",
"ban_title": "Ban Device",
"ban_confirm": "Are you sure you want to ban device {id}?",
"ban_success": "Device banned successfully",
"unban_title": "Unban Device",
"unban_confirm": "Are you sure you want to unban device {id}?",
"unban_success": "Device unbanned successfully",
"change_id": "Change ID",
"change_id_title": "Change Device ID",
"new_id": "New ID",
"change_id_hint": "6-16 characters, letters, numbers, dashes and underscores only",
"change_id_online_warn": "This device is online. Prefer changing the ID in the RustDesk client when possible. A panel-side change keeps the same device identity but the client must adopt the new ID to stay connected.",
"change_id_success": "Device ID changed successfully",
"id_length_error": "ID must be 6-16 characters long",
"id_format_error": "ID can only contain letters, numbers, dashes and underscores",
"bulk_delete_title": "Delete Multiple Devices",
"bulk_delete_confirm": "Are you sure you want to delete {count} devices?",
"bulk_delete_success": "{count} devices deleted successfully",
"columns": "Columns",
"toggle_columns": "Toggle visible columns",
"not_found": "Device not found",
"delete_failed": "Failed to delete device",
"restore_failed": "Failed to restore device",
"change_id_failed": "Failed to change device ID",
"invalid_id": "Invalid device ID (6-16 characters required)",
"invalid_id_format": "Invalid ID format (letters, numbers, dashes, underscores only)",
"id_exists": "Device ID already exists",
"id_reserved_deleted": "This ID belongs to a deleted device. Restore that device or permanently delete it to release the ID for reuse.",
"show_deleted": "Show deleted devices",
"deleted_badge": "Deleted",
"restore_title": "Restore Device",
"restore_confirm": "Restore device {id}? It will become visible again and can reconnect with the same identity.",
"restore_success": "Device restored successfully",
"restore_action": "Restore",
"permanent_delete_title": "Permanently Delete Device",
"permanent_delete_confirm": "Permanently delete device {id}? This releases its ID for reuse and cannot be undone.",
"permanent_delete_success": "Device permanently deleted",
"filter_deleted": "Deleted",
"no_selection": "No devices selected",
"device_type": "Type",
"tags": "Tags",
"filter_type_all": "All Types",
"filter_type_rustdesk": "RustDesk",
"filter_type_desktop": "Desktop",
"filter_type_scada": "SCADA",
"filter_type_iot": "IoT",
"filter_type_agent": "Agent",
"cdap_connected": "CDAP Connected",
"revoke": "Revoke",
"access_policy": "Access Policy",
"filter_by_tags": "Filter by tags",
"no_tags": "No tags",
"all_groups": "All groups",
"create_group": "Create group",
"manage_groups": "Manage Groups",
"group_name": "Group name",
"group_name_placeholder": "e.g. Media PCs",
"dynamic_group": "Dynamic group from tag",
"dynamic_group_hint": "Devices with this tag join automatically.",
"tag_filter": "Tag filter",
"group_allowed_users": "Allowed users",
"group_allowed_users_hint": "Leave empty to keep the group visible to everyone with device permissions.",
"group_allowed_user_groups": "Allowed user groups",
"group_allowed_user_groups_hint": "Users in selected user groups can access this device group.",
"manage_user_groups": "Manage user groups",
"no_user_groups": "No user groups",
"edit_group": "Edit group",
"delete_group": "Delete group",
"delete_group_confirm": "Delete device group {name}?",
"group_deleted": "Device group deleted",
"folder_group_readonly": "Folder-backed groups are managed from folders.",
"group_tag_required": "Tag filter is required for dynamic groups",
"group_invalid": "Invalid group identifier",
"group_not_found": "Group not found",
"group_saved": "Device group saved",
"strategies_title": "Access control strategies",
"strategies_hint": "Link user groups to device groups and push RustDesk Pro security settings to matching clients.",
"create_strategy": "Add strategy",
"edit_strategy": "Edit strategy",
"delete_strategy": "Delete strategy",
"delete_strategy_confirm": "Delete strategy {name}?",
"strategy_name": "Strategy name",
"strategy_name_required": "Strategy name is required",
"strategy_user_group": "User group",
"strategy_device_group": "Device group",
"strategy_any_user_group": "Any user group",
"strategy_any_device_group": "Any device group",
"strategy_enabled": "Enabled",
"strategy_disabled": "Disabled",
"strategy_enabled_label": "Strategy enabled",
"strategy_permissions": "Client security settings",
"strategy_permissions_hint": "Uses RustDesk advanced-setting keys (Y/N). Leave Default to keep client or strategy inheritance.",
"strategy_permissions_count": "{count} settings",
"strategy_perm_default": "Default",
"strategy_perm_allow": "Allow (Y)",
"strategy_perm_deny": "Deny (N)",
"strategy_perm_file_transfer": "File transfer",
"strategy_perm_disable_clipboard": "Disable clipboard",
"strategy_perm_enable_clipboard": "Enable clipboard",
"strategy_perm_audio": "Audio",
"strategy_perm_tunnel": "TCP tunnel",
"strategy_perm_camera": "Camera",
"strategy_perm_restart": "Remote restart",
"strategy_perm_block_input": "Block user input",
"strategy_created": "Strategy created",
"strategy_updated": "Strategy updated",
"strategy_deleted": "Strategy deleted",
"strategy_not_found": "Strategy not found",
"strategy_assign": "Assign targets",
"strategy_assign_title": "Assign strategy: {name}",
"strategy_assign_devices": "Devices",
"strategy_assign_users": "Users",
"strategy_assign_groups": "Device groups",
"strategy_assign_hint": "Select devices, users, or device groups that should use this strategy directly (RustDesk Pro priority: device > user > group).",
"strategy_assign_saved": "Strategy assignments saved",
"strategy_assign_counts": "{peers} devices, {users} users, {groups} groups",
"strategy_assign_none": "No direct assignments",
"no_strategies": "No access control strategies yet",
"loading_strategies": "Loading strategies...",
"groups_saved": "Device groups saved",
"group_membership_added": "Added to group",
"group_membership_removed": "Removed from group",
"no_groups": "No groups yet",
"manual_groups": "Manual groups",
"dynamic_memberships": "Dynamic memberships",
"unattended_access": "Unattended Access",
"enable_unattended": "Enable unattended access",
"access_password": "Access Password",
"password_configured": "Password set",
"no_password": "No password",
"new_password": "New password (leave empty to keep current)",
"clear_password": "Clear password",
"access_schedule": "Access Schedule",
"enable_schedule": "Enable time-based access",
"allowed_days": "Allowed days",
"start_time": "Start time",
"end_time": "End time",
"timezone": "Timezone",
"allowed_operators": "Allowed Operators",
"all_operators": "All operators (leave empty)",
"operators_hint": "Comma-separated usernames. Leave empty to allow all operators.",
"last_updated_by": "Last updated by",
"access_policy_saved": "Access policy saved",
"display_name": "Display Name",
"display_name_placeholder": "Custom name (overrides hostname)",
"note_placeholder": "Notes about this device",
"tabs": {
"overview": "Overview",
"hardware": "Hardware",
"metrics": "Metrics",
"connections": "Connections",
"audit": "Audit",
"info": "Info",
"history": "History"
},
"hardware": {
"cpu": "Processor",
"memory": "Memory",
"disk": "Disk",
"os": "Operating System",
"hostname": "Hostname",
"uptime": "Uptime",
"load_avg": "Load Average",
"network": "Network Adapters",
"no_data": "No hardware data available",
"title": "Hardware Information",
"gpu": "Graphics Card"
}
},
"keys": {
"title": "Server Keys",
"subtitle": "Public key and configuration for RustDesk clients",
"public_key": "Public Key",
"qr_code": "QR Code",
"server_info": "Server Information",
"download": "Download Key",
"show_qr": "Show QR",
"qr_hint": "Scan this QR code with RustDesk mobile app",
"no_key": "No public key found",
"no_key_to_copy": "No key to copy",
"no_qr": "QR code not available",
"download_success": "Key file downloaded",
"not_found": "Key not found",
"api_not_found": "API key not found"
},
"settings": {
"title": "Settings",
"subtitle": "Console configuration and account settings",
"tab_general": "General",
"tab_server": "Server",
"tab_branding": "Branding",
"tab_backup": "Backup",
"tab_auth": "Authentication",
"tab_advanced": "Advanced",
"connection_mode_title": "Connection strategy",
"connection_mode_desc": "Control how RustDesk desktop clients connect: direct P2P (hole punch) when possible, or always via relay.",
"connection_mode_label": "Default connection mode",
"connection_mode_p2p_first": "P2P first (recommended) — try direct connection, fall back to relay",
"connection_mode_relay_only": "Relay only — all sessions use the relay server",
"connection_mode_advanced": "Advanced options",
"connection_mode_fallback_ms": "P2P fallback timeout (ms)",
"connection_mode_same_nat_relay": "Force relay when both peers share the same public IP (NAT hairpin)",
"connection_mode_network_hint": "P2P requires UDP port 21116 to be reachable between clients. Signal TCP 21116, relay TCP 21117, NAT test 21115 must be open on the server. Web browser clients always use relay.",
"connection_mode_save": "Save",
"connection_mode_save_restart": "Save & restart server",
"connection_mode_saved": "Connection mode saved",
"connection_mode_restart_started": "Server restart initiated",
"connection_mode_restart_failed": "Server restart failed",
"connection_mode_not_configurable": "Connection mode cannot be changed on this deployment (no systemd unit or docker-compose found)",
"connection_mode_compose_error": "Could not find server environment section in docker-compose.yml",
"connection_mode_source_saved": "Saved in",
"connection_mode_source_defaults": "Using server defaults (not writable from panel)",
"connection_mode_runtime": "Active server",
"public_endpoints_title": "Public client endpoints",
"public_endpoints_desc": "Hostname and API URL that RustDesk desktop clients use to reach this server. Used for Dashboard client configuration, QR codes, and deploy strings.",
"public_endpoints_hint": "Set these when the web console hostname differs from the RustDesk ID server, relay, or API (reverse proxy / split DNS). Leave empty to auto-detect from the panel URL or Client server address on the Dashboard.",
"public_endpoints_server_id": "Public ID server",
"public_endpoints_server_id_placeholder": "e.g. remote.example.com",
"public_endpoints_relay": "Public relay server",
"public_endpoints_relay_placeholder": "e.g. remote.example.com (defaults to ID server)",
"public_endpoints_api_url": "Public API URL",
"public_endpoints_api_url_placeholder": "e.g. https://api.example.com or http://203.0.113.10:21114",
"public_endpoints_api_url_hint": "Full URL RustDesk clients use for login and API calls (Go server on port 21114 by default).",
"public_endpoints_save": "Save endpoints",
"public_endpoints_saved": "Public client endpoints saved",
"public_endpoints_invalid_host": "Invalid ID or relay server hostname",
"public_endpoints_invalid_api_url": "Invalid API URL — use http:// or https:// with a valid host",
"public_endpoints_save_title": "Save public client endpoints?",
"public_endpoints_save_confirm": "Update RustDesk client configuration values used on the Dashboard (ID server, relay, API URL)?",
"advanced_title": "Configuration files",
"advanced_desc": "Edit server configuration files directly. Changes may require restarting services. A backup copy is created before each save.",
"advanced_warning": "These files contain secrets (API keys, database passwords, session secrets). Only edit if you know what you are doing. Incorrect syntax can prevent the server from starting.",
"advanced_files_label": "Files",
"advanced_select_file": "Select a file from the list to view or edit its contents.",
"advanced_reload": "Reload",
"advanced_save": "Save file",
"advanced_apply_restart": "Apply (restart service)",
"advanced_saved": "Configuration file saved",
"advanced_restart_after_save": "Configuration saved. Restart the affected service now so changes take effect?",
"advanced_restart_confirm": "Restart the related BetterDesk service(s)? Active connections may be interrupted briefly.",
"advanced_restart_console_confirm": "Restart the web console service? Your browser session will disconnect briefly and the page will reload when the console is back.",
"advanced_restart_started": "Service restart initiated",
"advanced_restart_done": "Console restarted — reloading page…",
"advanced_restart_polling": "Waiting for the console to come back online…",
"advanced_restart_timeout": "Restart was sent but the console did not respond in time. Check systemd/NSSM logs and reload manually.",
"advanced_restart_failed": "Service restart failed (insufficient privileges or service not installed)",
"advanced_save_confirm": "Save changes to this file? A backup of the previous version will be created.",
"advanced_unsaved_confirm": "You have unsaved changes. Discard them?",
"advanced_no_files": "No configuration files available on this system.",
"advanced_readonly": "read-only",
"advanced_missing": "missing",
"advanced_new_file": "New file (not created until you save)",
"advanced_new_file_hint": "New file — add content and save",
"advanced_backup_created": "backup created",
"advanced_restart_console": "Restart the web console service (e.g. systemctl restart betterdesk-console) for .env changes to take effect.",
"advanced_restart_goserver": "Restart the BetterDesk Go server for blocklist changes to load.",
"advanced_restart_systemd": "After editing systemd units, run: systemctl daemon-reload && systemctl restart <service>",
"advanced_restart_generic": "Restart the affected service for changes to take effect.",
"advanced_error_unknown": "Unknown configuration file",
"advanced_error_not_found": "File does not exist",
"advanced_error_not_file": "Path is not a regular file",
"advanced_error_too_large": "File exceeds the maximum editable size (512 KB)",
"advanced_error_binary": "Binary files cannot be edited in the panel",
"advanced_error_invalid": "Invalid file content",
"advanced_error_not_writable": "File is not writable by the console process",
"advanced_file_console-env": "Console environment (.env)",
"advanced_file_console-env-local": "Console overrides (.env.local)",
"advanced_file_go-blocklist": "Go server blocklist (blocklist.txt)",
"advanced_file_systemd-console": "systemd: betterdesk-console",
"advanced_file_systemd-server": "systemd: betterdesk-server",
"advanced_file_console-session-secret": "Console session secret (.session_secret)",
"advanced_file_go-audit-log": "Go server audit log (audit.jsonl)",
"advanced_file_build-env": "Agent build environment (/etc/betterdesk/build.env)",
"advanced_file_docker-supervisord": "Docker: supervisord.conf",
"advanced_file_docker-compose": "Docker: docker-compose.yml",
"advanced_restart_none": "No service restart is required for this file.",
"enrollment_title": "Device enrollment (RustDesk)",
"enrollment_desc": "Control how new RustDesk clients register and how operators approve them in the enrollment requests page.",
"enrollment_require_approval": "Require operator approval (Managed mode)",
"enrollment_require_approval_hint": "When enabled, unknown clients are queued until an operator approves them in Enrollment Requests.",
"enrollment_rich_approve": "Full approval form (name, folder, groups, tags)",
"enrollment_rich_approve_hint": "Shows a detailed dialog when approving enrollment or LAN registration requests.",
"enrollment_tag_picker": "Pick tags from existing device tags",
"enrollment_tag_picker_hint": "Lets operators select tags from the list used on the Devices page instead of typing only.",
"enrollment_open_requests": "Open enrollment requests",
"enrollment_pending_count": "{count} pending enrollment request(s)",
"ldap_title": "LDAP / Active Directory",
"client_sessions_title": "RustDesk client sessions",
"client_sessions_desc": "Control how long RustDesk desktop and mobile apps stay signed in to your BetterDesk account.",
"client_sessions_expiry_days": "Session duration (days)",
"client_sessions_expiry_hint": "Default is 7 days. When sliding renewal is off, clients must sign in again after this period.",
"client_sessions_sliding": "Extend session on activity",
"client_sessions_sliding_hint": "While a client is in use, its session is renewed until the maximum lifetime below.",
"client_sessions_max_days": "Maximum session lifetime (days)",
"client_sessions_max_days_hint": "Upper limit for sliding renewal from first login (default 30 days).",
"client_sessions_save": "Save session settings",
"ldap_desc": "Configure external authentication via LDAP or Active Directory. Users will be able to sign in with their domain credentials.",
"ldap_enabled": "Enable LDAP Authentication",
"ldap_enabled_hint": "When enabled, directory users can sign in with LDAP/AD credentials. Each account stays bound to one auth provider (local, LDAP, or OIDC) — local passwords are not accepted for LDAP-bound users.",
"ldap_connection": "Server Connection",
"ldap_host": "Host",
"ldap_port": "Port",
"ldap_use_tls": "LDAPS (TLS)",
"ldap_start_tls": "StartTLS",
"ldap_skip_verify": "Skip TLS verify",
"ldap_timeout": "Connection timeout (s)",
"ldap_timeout_hint": "Seconds to wait for LDAP server response",
"ldap_bind_mode": "Bind Mode",
"ldap_direct_bind": "Direct Bind",
"ldap_direct_bind_hint": "Bind directly with a DN template instead of using a service account to search.",
"ldap_bind_dn": "Bind DN (service account)",
"ldap_bind_dn_hint": "Distinguished Name of a read-only service account used to search for users.",
"ldap_bind_password": "Bind Password",
"ldap_base_dn": "Base DN",
"ldap_base_dn_hint": "Search base for finding users, e.g. dc=example,dc=com",
"ldap_user_filter": "User Filter",
"ldap_user_filter_hint": "LDAP filter to find users. Use {{username}} as placeholder. Default: (sAMAccountName={{username}})",
"ldap_direct_bind_dn": "Direct Bind DN Template",
"ldap_direct_bind_dn_hint": "DN template for direct bind. Use {{username}} as placeholder, e.g. uid={{username}},ou=users,dc=example,dc=com",
"ldap_user_attrs": "User Attributes",
"ldap_attr_id": "Username Attribute",
"ldap_attr_email": "Email Attribute",
"ldap_attr_name": "Display Name Attribute",
"ldap_group_mapping": "Group → Role Mapping",
"ldap_group_base_dn": "Group Base DN",
"ldap_group_base_dn_hint": "Leave empty to use the main Base DN",
"ldap_group_filter": "Group Filter",
"ldap_group_attr_name": "Group Name Attribute",
"ldap_default_role": "Default Role",
"ldap_default_role_hint": "Role assigned to users whose LDAP groups don't match any mapping",
"ldap_role_viewer": "Viewer",
"ldap_role_operator": "Operator",
"ldap_role_admin": "Admin",
"ldap_group_role_map": "Group → Role Map",
"ldap_group_role_map_hint": "Map LDAP groups to BetterDesk roles. Format: GroupDN=role separated by | (pipe). Example: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator",
"ldap_test_connection": "Test Connection",
"ldap_testing": "Testing...",
"ldap_test_success": "Connection successful! LDAP server is reachable and bind credentials are valid.",
"ldap_test_failed": "Connection failed",
"ldap_save": "Save LDAP Configuration",
"ldap_saved": "LDAP configuration saved successfully",
"oidc_title": "OIDC / OAuth2 (SSO)",
"oidc_desc": "Configure Single Sign-On via an OpenID Connect provider (Azure AD, Okta, Google, Keycloak, etc.).",
"oidc_enabled": "Enable OIDC Authentication",
"oidc_enabled_hint": "Allow users to sign in with an external identity provider",
"oidc_provider": "Identity Provider",
"oidc_display_name": "Button Display Name",
"oidc_display_name_hint": "Text shown on the login button (e.g. Azure AD, Okta)",
"oidc_issuer_url": "Issuer URL",
"oidc_issuer_url_hint": "OpenID Connect issuer URL (discovery will be automatic)",
"oidc_client_id": "Client ID",
"oidc_client_secret": "Client Secret",
"oidc_redirect_url": "Redirect URL (Callback)",
"oidc_redirect_url_hint": "Must match your IdP exactly. Path must be /api/auth/oidc/callback (or /api/oidc/callback). Prefer your panel public URL (this page origin) — the console proxies the callback to the Go API. Direct Go/Client API ports (:21114 / :21121) also work.",
"oidc_panel_url": "Panel URL",
"oidc_panel_url_hint": "URL operators use to open the web console (port 5000 or reverse-proxy hostname). Required for SSO login when the OIDC callback runs on the Go API port.",
"oidc_scopes": "Scopes",
"oidc_use_pkce": "Use PKCE (recommended)",
"oidc_auto_discovery": "Auto-discovery",
"oidc_allow_signup": "Auto-create users",
"oidc_manual_endpoints": "Manual Endpoint URLs",
"oidc_authorization_url": "Authorization Endpoint",
"oidc_token_url": "Token Endpoint",
"oidc_userinfo_url": "Userinfo Endpoint",
"oidc_claim_mapping": "Claim Mapping",
"oidc_claim_username": "Username Claim",
"oidc_claim_email": "Email Claim",
"oidc_claim_name": "Display Name Claim",
"oidc_claim_groups": "Groups Claim",
"oidc_role_mapping": "Role Mapping",
"oidc_default_role": "Default Role",
"oidc_group_role_map": "Group → Role Mapping",
"oidc_group_role_map_hint": "One mapping per line: group_name=role (e.g. admins=admin, operators=operator)",
"oidc_test_discovery": "Test Discovery",
"oidc_testing": "Testing...",
"oidc_test_success": "Discovery successful! Endpoints resolved.",
"oidc_test_failed": "Discovery failed",
"oidc_issuer_required": "Issuer URL is required to test discovery",
"oidc_save": "Save OIDC Configuration",
"oidc_saved": "OIDC configuration saved successfully",
"language": "Language",
"change_password": "Change Password",
"password_desc": "Update your account password",
"current_password": "Current Password",
"new_password": "New Password",
"confirm_password": "Confirm Password",
"save_password": "Update Password",
"password_changed": "Password changed successfully",
"fill_all_fields": "Please fill in all fields",
"passwords_not_match": "Passwords do not match",
"password_requirements": "Password requirements",
"password_requirements_not_met": "Password does not meet requirements",
"req_length": "At least 8 characters",
"req_uppercase": "At least one uppercase letter",
"req_lowercase": "At least one lowercase letter",
"req_number": "At least one number",
"server_info": "Server Information",
"device_scope_title": "Device visibility default",
"device_scope_desc": "Controls what non-admin users see when no folder, group, or direct device grants exist.",
"device_scope_open": "Open (legacy) — show all devices until ACL is configured",
"device_scope_restricted": "Restricted — show only explicitly granted devices",
"device_scope_save": "Save visibility default",
"device_scope_saved": "Device visibility default saved",
"device_scope_invalid": "Invalid visibility mode",
"device_scope_restricted_warning": "Restricted mode is active. Ensure users have folder, group, or direct device grants or they will see an empty device list.",
"version": "Version",
"database": "Database",
"uptime": "Uptime",
"audit_log": "Audit Log",
"audit_desc": "Recent console activity",
"no_audit_logs": "No audit logs found",
"tutorials_title": "Tutorials & Guides",
"tutorials_desc": "Control guided tours and help overlays shown throughout the console",
"tutorials_enabled": "Enable tutorials",
"tutorials_enabled_hint": "When disabled, tutorials will not start automatically and the help button will be hidden",
"tutorials_reset_hint": "Mark all tutorials as unseen so they can be shown again",
"tutorials_enabled_toast": "Tutorials enabled",
"tutorials_disabled_toast": "Tutorials disabled",
"tutorials_reset_toast": "All tutorials have been reset",
"backend_title": "Server Backend",
"backend_desc": "Choose which server backend to use for device management and signal/relay services.",
"backend_original": "Original",
"backend_enhanced": "Enhanced",
"backend_rustdesk_desc": "Standard RustDesk signal and relay servers (hbbs + hbbr). Basic HTTP API with limited endpoints.",
"backend_betterdesk_desc": "Enhanced Go-based server with full REST API, JWT authentication, blocklist, tags, real-time WebSocket events, and audit logging.",
"backend_feature_signal": "Signal server (ID registration)",
"backend_feature_relay": "Relay server (connection relay)",
"backend_feature_basic_api": "Basic REST API",
"backend_feature_full_api": "Full REST API (34+ endpoints)",
"backend_feature_jwt": "JWT authentication & TOTP 2FA",
"backend_feature_blocklist": "IP/ID blocklist management",
"backend_feature_tags": "Device tags & grouping",
"backend_feature_audit": "Audit event logging",
"backend_feature_websocket": "Real-time WebSocket events",
"backend_connection": "Connection",
"backend_api_url": "API URL",
"backend_test": "Test Connection",
"backend_testing": "Testing...",
"backend_save": "Apply Backend",
"backend_saved": "Server backend changed successfully. Device data will now be managed by the new backend.",
"backend_save_failed": "Failed to switch server backend",
"backend_test_success": "Connection successful! Server is reachable.",
"backend_test_failed": "Connection failed. Server is unreachable.",
"backend_confirm_switch": "Are you sure you want to switch the server backend? This will change how devices are managed.",
"backend_unreachable": "Cannot switch: target server is unreachable. Start the server first.",
"invalid_backend": "Invalid backend selection. Choose 'rustdesk' or 'betterdesk'.",
"backend_status_running": "Connected",
"backend_status_unreachable": "Unreachable",
"backend_status_error": "Error",
"backend_status_unknown": "Unknown",
"totp_title": "Two-Factor Authentication",
"totp_desc": "Add an extra layer of security with TOTP authenticator apps (Google Authenticator, Microsoft Authenticator, Authy, etc.)",
"totp_enabled": "2FA Enabled",
"totp_enabled_desc": "Your account is protected with two-factor authentication.",
"totp_disabled": "2FA Not Enabled",
"totp_disabled_desc": "Enable two-factor authentication for additional account security.",
"totp_setup": "Enable 2FA",
"totp_disable": "Disable 2FA",
"totp_step1": "Install an authenticator app on your phone",
"totp_step2": "Scan the QR code below",
"totp_step3": "Enter the 6-digit code to verify",
"totp_manual_key": "Manual key",
"totp_enter_code": "Enter verification code",
"totp_verify_enable": "Verify & Enable",
"totp_enabled_success": "Two-factor authentication enabled!",
"totp_recovery_warning": "Save these recovery codes in a safe place. Each code can only be used once. If you lose access to your authenticator app, you can use these codes to log in.",
"totp_done": "Done",
"totp_disable_warning": "Disabling two-factor authentication will make your account less secure. Enter your password to confirm.",
"totp_disabled_success": "Two-factor authentication has been disabled.",
"go_server_version": "Go server",
"go_server_version_dev_hint": "Go binary reports development build — rebuild or update the server to match the product version",
"tab_email": "Email",
"ui": {
"search_placeholder": "Search settings…",
"search_results": "{count} matching sections",
"auth_sub_enrollment": "Enrollment",
"auth_sub_client_sessions": "RustDesk clients",
"auth_sub_ldap": "LDAP / AD",
"auth_sub_oidc": "OIDC / SSO",
"branding_rdclient": "RdClient",
"connection_p2p_hint": "Try direct peer connection first; fall back to relay when P2P fails.",
"connection_relay_hint": "Route all client traffic through the relay server."
},
"confirm": {
"connection_mode_title": "Save connection strategy?",
"connection_mode": "Apply the new connection strategy for RustDesk clients?",
"connection_restart_title": "Save and restart server?",
"connection_restart": "Save connection settings and restart the BetterDesk server? Active sessions may disconnect briefly.",
"enrollment_mode_title": "Change enrollment mode?",
"enrollment_mode": "Switch enrollment to “{mode}”? This affects how new RustDesk clients can register.",
"ldap_enable_title": "Enable LDAP?",
"ldap_enable": "Enable LDAP / Active Directory sign-in? Console users may authenticate against your directory.",
"ldap_save_title": "Save LDAP settings?",
"ldap_save": "Save LDAP configuration? Incorrect settings can block directory sign-in.",
"oidc_enable_title": "Enable SSO?",
"oidc_enable": "Enable OIDC / SSO sign-in? Users may authenticate through your identity provider.",
"oidc_save_title": "Save SSO settings?",
"oidc_save": "Save OIDC / SSO configuration? Incorrect settings can block SSO sign-in.",
"smtp_save_title": "Save SMTP settings?",
"smtp_save": "Save SMTP configuration? Alert emails and notifications will use this mail server.",
"backup_restore_title": "Restore backup?",
"backup_restore": "Restore from this backup file? Selected data will be overwritten.",
"tutorials_reset_title": "Reset tutorials?",
"tutorials_reset": "Reset all tutorial progress? Guided tips will show again on each page.",
"advanced_save_title": "Save configuration file?",
"advanced_restart_after_title": "Restart service?",
"advanced_restart_title": "Restart service?",
"advanced_discard_title": "Discard changes?"
},
"email": {
"title": "Email notifications",
"desc": "Configure SMTP delivery for operational notifications and system alert emails.",
"smtp_host": "SMTP host",
"smtp_port": "Port",
"smtp_secure": "Use TLS/SSL",
"smtp_user": "Username",
"smtp_pass": "Password",
"smtp_from": "From address",
"alert_email": "Alert email",
"alert_email_hint": "Fallback address when no operator email is available, and for system warnings.",
"smtp_test": "Test connection",
"smtp_save": "Save configuration",
"smtp_saved": "Email settings saved",
"smtp_test_success": "Connection successful",
"smtp_test_failed": "Connection failed"
},
"enrollment_ldap_hint": "LDAP/AD and OIDC settings are under the LDAP / AD and OIDC / SSO tabs above.",
"oidc_redirect_url_invalid": "Redirect URL must use http(s) and end with /api/auth/oidc/callback (or /api/oidc/callback).",
"oidc_redirect_url_example": "Example: {url}"
},
"audit": {
"time": "Time",
"user": "User",
"action": "Action",
"details": "Details",
"action_login": "Login",
"action_login_failed": "Login Failed",
"action_logout": "Logout",
"action_password_change": "Password Changed",
"action_2fa_enable": "2FA Enabled",
"action_2fa_disable": "2FA Disabled",
"action_user_create": "User Created",
"action_user_update": "User Updated",
"action_user_delete": "User Deleted",
"action_settings_update": "Settings Updated",
"action_device_ban": "Device Banned",
"action_device_unban": "Device Unbanned",
"action_device_delete": "Device Deleted"
},
"generator": {
"title": "Agent Generator",
"subtitle": "Build branded BetterDesk Agent installers for your end users",
"alpha_badge": "ALPHA",
"alpha_tooltip": "Early feature — agent bundle generator is under active development.",
"bundles_title": "Agent bundles",
"new_bundle": "New bundle",
"editor_title": "Bundle editor",
"empty_state": "Select a bundle on the left or create a new one to begin.",
"loading": "Loading…",
"no_bundles": "No bundles yet. Create your first one.",
"bundle_name": "Bundle name",
"bundle_name_hint": "Internal label only — not shown to end users.",
"short_link": "Short download link",
"short_link_hint": "Used in the public URL (/d/…). Lowercase letters, numbers and dashes only (232 chars). Auto-filled from bundle name — shorten it for easier sharing (e.g. acme).",
"connection_section": "Server connection",
"server_host": "Public server address",
"server_host_placeholder": "support.example.com or 203.0.113.10",
"server_host_hint": "Domain name or public IP where end users reach your BetterDesk server. Port is taken from console configuration.",
"use_https": "Use HTTPS / WSS (recommended)",
"enrollment_token": "Device registration",
"enrollment_token_pending": "Per device after approval",
"enrollment_token_set": "Per device — approve in Registrations",
"enrollment_token_hint": "Each installation registers on its own. Approve new devices in the Registrations panel; the server then issues a unique access key per computer.",
"enrollment_per_device": "Per device — approve in Registrations",
"branding_section": "Branding",
"company_name": "Company / brand name",
"short_text": "Short description",
"contact_email": "Contact email",
"contact_phone": "Contact phone",
"contact_url": "Contact website",
"logo": "Logo",
"logo_hint": "PNG, JPEG, SVG or WebP. Maximum 256 KB.",
"logo_clear": "Remove logo",
"primary_color": "Primary color",
"accent_color": "Header color",
"background_color": "Window background",
"surface_color": "Card background",
"text_color": "Text color",
"text_muted_color": "Muted text color",
"status_ready_color": "Ready indicator color",
"header_text_color": "Header text color",
"default_lang": "Default language",
"allow_unattended": "Allow unattended access",
"allow_unattended_hint": "When enabled, the agent shows a permanent password for operator access.",
"save": "Save bundle",
"revoke": "Revoke",
"unrevoke": "Re-enable",
"revoked": "Revoked",
"preview_title": "Live preview",
"preview_hint": "Approximate look of the end-user agent window.",
"preview_default_name": "BetterDesk Support",
"preview_status_ready": "Ready",
"preview_id": "Your ID",
"preview_password": "Password",
"preview_chat": "Chat with support",
"preview_help": "Request help",
"preview_settings": "Settings (admin only)",
"preview_quit": "Quit (admin only)",
"download_link_title": "Download link",
"download_link_hint": "Share this link with end users. They will see a branded download page. Old hex links keep working after you change the short link.",
"open_portal": "Open",
"created": "Bundle created",
"saved": "Bundle saved",
"deleted": "Bundle deleted",
"revoked_ok": "Bundle revoked",
"unrevoked_ok": "Bundle re-enabled",
"link_copied": "Link copied to clipboard",
"copy_failed": "Could not copy automatically — please copy manually",
"unsaved_confirm": "Discard unsaved changes?",
"confirm_revoke": "Revoke this bundle? The download link will stop working.",
"confirm_unrevoke": "Re-enable this bundle?",
"confirm_delete": "Delete this bundle permanently? This cannot be undone.",
"builds_title": "Client builds",
"builds_hint": "Installers compiled on this server for each platform. Rebuild after fixing toolchain errors or updating agent source.",
"builds_loading": "Loading build status…",
"builds_empty": "No builds queued yet — save the bundle or click Rebuild all.",
"rebuild_all": "Rebuild all",
"rebuilding_all": "Queuing rebuilds…",
"rebuild_queued": "All platform builds queued",
"rebuild_confirm": "Rebuild all platform installers for this bundle? Existing ready artifacts will be replaced.",
"build_status_ready": "Ready",
"build_status_pending": "Queued",
"build_status_building": "Building",
"build_status_failed": "Failed",
"builds_summary": "{{ready}} ready · {{pending}} queued · {{building}} building · {{failed}} failed",
"build_error_hint": "Build error",
"errors": {
"validation_failed": "Validation failed",
"name_required": "Bundle name is required",
"company_name_required": "Company name is required",
"logo_invalid": "Logo must be a valid image file",
"logo_too_large": "Logo must be 256 KB or smaller",
"logo_read_failed": "Failed to read logo file",
"primary_color_invalid": "Primary color must be a hex value (e.g. #2563eb)",
"accent_color_invalid": "Header color must be a hex value (e.g. #1e293b)",
"contact_url_invalid": "Contact website must be a valid URL",
"server_host_required": "Public server address is required",
"server_host_invalid": "Enter a valid domain name or IPv4 address",
"token_failed": "Could not generate enrollment token — check server connectivity",
"rebuild_revoked": "Cannot rebuild a revoked bundle — re-enable it first",
"slug_invalid": "Short link may only contain lowercase letters, numbers and dashes",
"slug_too_short": "Short link must be at least 2 characters",
"slug_too_long": "Short link must be at most 32 characters",
"slug_taken": "This short link is already used by another bundle"
},
"legacy_title": "Client Configuration Generator",
"config_options": "Configuration Options",
"server_address": "Server Address",
"server_address_hint": "Your server's domain or IP address",
"custom_port": "Custom Port",
"port_hint": "Leave empty for default (21116)",
"relay_server": "Relay Server",
"relay_placeholder": "Same as ID server if empty",
"relay_hint": "Optional: separate relay server address",
"include_key": "Include public key in configuration",
"generate": "Generate Configuration",
"output": "Configuration Output",
"usage_title": "Connection Details",
"generated": "Configuration generated",
"server_required": "Server address is required",
"nothing_to_copy": "Generate a configuration first",
"rdclient_tab": "RdClient desktop",
"rdclient_new_bundle": "New RdClient bundle",
"rdclient_subtitle": "Build branded RdClient desktop installers with embedded panel URL",
"rdclient_server_url_hint": "Public URL where operators reach the BetterDesk console (/remote dashboard).",
"agent_client_tab": "Agent Client",
"agent_client_new_bundle": "New Agent Client bundle",
"support_agent_tab": "Support Agent",
"support_agent_new_bundle": "New Support Agent bundle",
"product_agent_client": "Agent Client",
"product_support_agent": "Support",
"product_rdclient": "RdClient"
},
"download": {
"title": "Download BetterDesk Agent",
"choose_platform": "Choose your platform",
"choose_platform_hint": "Select the installer that matches your operating system.",
"download": "Download",
"building": "Building…",
"failed": "Build failed",
"need_help": "Need help?",
"powered_by": "Powered by",
"product_agent_client": "BetterDesk Agent Client — full managed endpoint agent",
"product_support_agent": "BetterDesk Support Agent — lightweight end-user client",
"product_rdclient": "BetterDesk RdClient — operator remote desktop client"
},
"server": {
"port": "Port",
"api_port": "API Port",
"id_server": "ID Server",
"relay_server": "Relay Server",
"api_key": "API Key"
},
"status": {
"online": "Online",
"offline": "Offline",
"no_signal": "No signal",
"banned": "Banned",
"running": "Running",
"stopped": "Stopped",
"unknown": "Unknown",
"checking": "Checking...",
"label": "Status"
},
"actions": {
"refresh": "Refresh",
"copy": "Copy",
"connect": "Connect",
"connect_desktop": "Connect via Desktop Client",
"remote_viewer": "Remote Viewer",
"web_remote": "Web Remote",
"cdap_viewer": "CDAP Snapshot Viewer",
"details": "Details",
"edit": "Edit",
"delete": "Delete",
"ban": "Ban",
"unban": "Unban",
"save": "Save",
"cancel": "Cancel",
"confirm": "Confirm",
"close": "Close",
"clear": "Clear",
"ok": "OK",
"saved": "Saved successfully",
"back": "Back",
"create": "Create",
"dismiss": "Dismiss",
"view_all": "View All",
"add": "Add",
"remove": "Remove",
"retry": "Retry",
"show_value": "Show",
"hide_value": "Hide"
},
"time": {
"just_now": "Just now",
"seconds_ago": "{count}s ago",
"minutes_ago": "{count}m ago",
"hours_ago": "{count}h ago",
"days_ago": "{count}d ago",
"day_mon": "Mon",
"day_tue": "Tue",
"day_wed": "Wed",
"day_thu": "Thu",
"day_fri": "Fri",
"day_sat": "Sat",
"day_sun": "Sun"
},
"users": {
"title": "User Management",
"subtitle": "Manage console users and permissions",
"add_user": "Add User",
"edit_user": "Edit User",
"username": "Username",
"username_placeholder": "Enter username",
"username_hint": "3-32 characters, letters, numbers and underscores only",
"password": "Password",
"password_placeholder": "Enter password",
"password_hint": "Minimum 8 characters with mixed case, numbers and symbols",
"password_leave_empty": "Leave empty to keep current",
"role": "Role",
"role_admin": "Administrator",
"role_operator": "Remote Operator",
"role_viewer": "Viewer",
"role_pro": "Pro License (client API only)",
"role_super_admin": "Super Admin",
"role_server_admin": "Server Admin",
"role_global_admin": "Global Admin",
"role_hint": "Server-wide role. Remote Operators connect remotely and can change their own password. Viewers are read-only (no Web Client). Pro License accounts activate RustDesk Pro via the desktop client API only — no web panel access. Organization roles are configured separately.",
"scope_hint": "Limit which devices this user sees: assign user groups, folders, and/or direct devices. Without restrictions, operators and viewers see all devices (unless the server uses restricted default mode in Settings).",
"role_desc_viewer": "Read-only panel access: device list, audit, metrics. Cannot use Web Remote Desktop.",
"role_desc_operator": "Can connect via Web Client and RustDesk desktop, edit devices, and change own password in Settings.",
"role_desc_pro": "RustDesk desktop client API only — activates Pro license. Blocked from web panel login.",
"role_desc_admin": "Full access (legacy alias for Super Admin).",
"role_desc_super_admin": "Full server and panel access, including user and server configuration.",
"role_desc_server_admin": "Server infrastructure, keys, and read-only user visibility. No device connect.",
"role_desc_global_admin": "Manage all users, organizations, and devices. Cannot change server config.",
"user_folders": "Folder access",
"user_folders_hint": "Devices in selected folders are visible to this user when folder ACL is configured.",
"user_direct_devices": "Direct devices",
"user_direct_devices_hint": "Grant access to specific devices regardless of folder or group membership.",
"user_direct_devices_placeholder": "Enter device IDs separated by commas",
"effective_scope_count": "{count} devices visible",
"loading_folders": "Loading folders...",
"no_folders": "No folders available",
"pro_strategy_label": "RustDesk Pro strategy",
"pro_strategy_hint": "Optional access-control strategy for RustDesk Pro client features (separate from panel role).",
"pro_strategy_none": "None",
"column_scope": "Scope",
"user_groups": "User groups",
"user_groups_hint": "User groups can be used to grant access to selected device groups.",
"loading_user_groups": "Loading user groups...",
"no_user_groups": "No user groups available",
"create_user_group": "Create group",
"edit_user_group": "Edit user group",
"delete_user_group": "Delete user group",
"delete_user_group_confirm": "Delete user group {name}? Members will lose access granted through this group.",
"user_group_created": "User group created",
"user_group_updated": "User group updated",
"user_group_deleted": "User group deleted",
"user_group_not_found": "User group not found",
"group_name": "Group name",
"group_name_placeholder": "Operators",
"group_note": "Note",
"group_note_placeholder": "Optional note",
"group_name_required": "Group name is required",
"group_members_count": "{count} members",
"created": "Created",
"last_login": "Last Login",
"never": "Never",
"actions": "Actions",
"create": "Create User",
"edit": "Edit",
"reset_password": "Reset Password",
"new_password": "New Password",
"delete_title": "Delete User",
"delete_confirm": "Are you sure you want to delete user {username}?",
"delete_success": "User deleted successfully",
"user_created": "User created successfully",
"user_updated": "User updated successfully",
"password_reset_success": "Password reset successfully",
"empty_title": "No users found",
"empty_text": "Add users to manage console access",
"fill_required": "Please fill in all required fields",
"invalid_username": "Username must be 3-32 characters, letters, numbers and underscores only",
"username_exists": "Username already exists",
"weak_password": "Password is too weak",
"password_too_short": "Password must be at least 8 characters",
"invalid_role": "Invalid role",
"cannot_demote_self": "You cannot demote yourself",
"cannot_delete_self": "You cannot delete your own account",
"last_admin": "Cannot delete the last administrator",
"last_admin_go": "Cannot delete: this is the only Super Admin on the BetterDesk server. Create or sync another Super Admin (not Global Admin) first.",
"delete_mirror_failed": "Could not remove the user from the server. Try again when the BetterDesk server is reachable.",
"admin_only": "This feature is only available to administrators",
"password_required": "Password is required",
"not_found": "User not found",
"strength_weak": "Weak",
"strength_medium": "Medium",
"strength_strong": "Strong",
"security_tips_title": "Security Best Practices",
"tip_strong_passwords": "Use strong, unique passwords for each user",
"tip_unique_accounts": "Create individual accounts for each person",
"tip_viewer_role": "Use Viewer for read-only monitoring; Remote Operator for users who need to connect",
"tip_operator_role": "Use Remote Operator for scoped remote users who need Web Client and password self-service",
"tip_audit_logs": "Review audit logs regularly for suspicious activity",
"organizations": "Organizations",
"user_organizations": "Organizations for {username}",
"no_organizations": "User is not assigned to any organization",
"org_removed": "Organization assignment removed",
"server_role_label": "Server Role",
"server_role_hint": "Determines what the user can do across the whole console (panel access, server config, audit, etc.).",
"org_membership_section": "Organization Membership",
"org_membership_hint": "A user can belong to multiple organizations. The organization role only controls permissions inside that organization and is independent of the server role above.",
"column_organizations": "Organizations",
"provider": "Provider",
"provider_local": "Local",
"provider_ldap": "LDAP/AD",
"provider_oidc": "SSO",
"password_managed_by_provider": "Managed by identity provider",
"provider_managed_hint": "This account is managed by an external identity provider (LDAP/AD or SSO). The password and role are controlled by the provider and cannot be changed here.",
"no_orgs_short": "—",
"org_count_one": "{count} organization",
"org_count_many": "{count} organizations",
"all_orgs_assigned": "User is already a member of every organization.",
"email": "Email",
"email_placeholder": "operator@example.com",
"email_hint": "Used for help request notifications when the user is assigned to device folders or groups."
},
"folders": {
"title": "Folders",
"create": "Create Folder",
"edit": "Edit Folder",
"delete": "Delete Folder",
"name": "Folder Name",
"name_placeholder": "Enter folder name",
"name_required": "Folder name is required",
"name_too_long": "Folder name is too long (max 50 characters)",
"color": "Color",
"icon": "Icon",
"not_found": "Folder not found",
"delete_confirm": "Are you sure you want to delete this folder? Devices will be unassigned.",
"delete_success": "Folder deleted successfully",
"created": "Folder created successfully",
"updated": "Folder updated successfully",
"no_devices_selected": "No devices selected",
"devices_moved": "Devices moved successfully",
"device_assigned": "Device assigned to folder",
"unassigned": "Unassigned",
"all_devices": "All Devices",
"drag_hint": "Drag devices to folders to organize them",
"move_to": "Move to",
"toggle_sidebar": "Toggle sidebar"
},
"errors": {
"forbidden_title": "Access Denied",
"forbidden_message": "You do not have permission to access this resource.",
"not_found_title": "Page Not Found",
"not_found_message": "The page you're looking for doesn't exist or has been moved.",
"server_error_title": "Server Error",
"server_error_message": "Something went wrong. Please try again later.",
"go_home": "Go Home",
"try_again": "Try Again",
"load_devices_failed": "Failed to load devices",
"load_key_failed": "Failed to load key",
"load_qr_failed": "Failed to load QR",
"load_audit_failed": "Failed to load audit log",
"load_users_failed": "Failed to load users",
"load_folders_failed": "Failed to load folders",
"download_failed": "Download failed",
"logout_failed": "Logout failed",
"password_change_failed": "Failed to change password",
"language_change_failed": "Failed to change language",
"ban_failed": "Failed to ban device",
"unban_failed": "Failed to unban device",
"delete_failed": "Failed to delete device",
"change_id_failed": "Failed to change device ID",
"bulk_delete_failed": "Failed to delete devices",
"sync_failed": "Failed to sync status",
"error": "Error",
"not_found": "Not found",
"server_error": "Server error",
"load_device_failed": "Failed to load device",
"load_orgs_failed": "Failed to load organizations"
},
"remote": {
"title": "Remote Desktop",
"connecting": "Connecting...",
"waiting_password": "Waiting for password",
"authenticating": "Authenticating...",
"streaming": "Connected",
"disconnected": "Disconnected",
"error": "Error",
"status_idle": "Idle",
"password_required": "Password Required",
"enter_password_for": "Enter password for device",
"password_placeholder": "Device password",
"connect": "Connect",
"reconnect": "Reconnect",
"use_cdap_fallback": "Use CDAP viewer",
"cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.",
"disconnect": "Disconnect",
"back_to_devices": "Back to Devices",
"fullscreen": "Fullscreen",
"toggle_audio": "Toggle Audio",
"send_keys": "Send Keys",
"scale_mode": "Scale Mode",
"scale_fit": "Fit to Window",
"scale_fill": "Fill Window",
"scale_original": "Original Size (1:1)",
"scale_stretch": "Stretch to Fill",
"actions": "Actions",
"lock_screen": "Lock Screen",
"restart_remote": "Restart Remote Device",
"refresh_screen": "Refresh Screen",
"clipboard_paste": "Paste from Clipboard",
"clipboard_empty": "Clipboard is empty",
"clipboard_denied": "Clipboard access denied. HTTPS required or permission not granted.",
"block_input": "Block Input",
"reset_keyboard": "Reset Keyboard State",
"reset_keyboard_done": "Keyboard state reset on remote",
"keyboard_mode": "Keyboard Mode",
"keyboard_mode_auto": "Auto (Map, like RustDesk)",
"keyboard_mode_legacy": "Legacy (character)",
"keyboard_mode_map": "Map (physical scancode)",
"display_settings": "Display Settings",
"image_quality": "Image Quality",
"quality_best": "Best (Full Quality, 60fps)",
"quality_balanced": "Balanced",
"quality_low": "Performance",
"codec": "Video Codec",
"codec_auto": "Auto (recommended)",
"show_cursor": "Show Remote Cursor",
"lock_after_session": "Lock After Session",
"privacy_mode": "Privacy Mode",
"disable_clipboard": "Disable Clipboard",
"chat": "Chat",
"chat_placeholder": "Type a message...",
"record": "Record Screen",
"view_only": "View Only",
"pin_toolbar": "Pin Toolbar",
"monitors": "Monitors",
"select_monitor": "Select Monitor",
"quality_speed": "Speed (Low Quality, 60fps)",
"quality_quality": "Quality (Best, 30fps)",
"recording_started": "Recording started",
"recording_stopped": "Recording stopped",
"download_recording": "Download Recording",
"e2e_encrypted": "End-to-End Encrypted",
"e2e_key_exchange": "Establishing secure channel...",
"confirm_restart": "Are you sure you want to restart the remote device?",
"webcodecs_not_supported": "Your browser does not support WebCodecs API. Please use Chrome 94+ or Edge 94+.",
"webcodecs_insecure_context": "WebCodecs unavailable over HTTP. Video uses software fallback. For best performance, use HTTPS.",
"webcodecs_fallback_active": "Software video decoder active (limited performance)",
"click_to_start": "Click to Start",
"autoplay_blocked": "Browser requires user interaction to start video and audio playback.",
"start_playback": "Start Playback",
"new_connection": "New Connection",
"device_id_placeholder": "Enter Device ID",
"session_picker": {
"title": "Choose device",
"already_connected": "Already connected"
},
"http_warning": "HTTP mode: limited to H.264 software decode (~15 FPS). Use HTTPS for full performance (WebCodecs, VP9, 60 FPS).",
"file_transfer": "File Transfer",
"file_upload": "Upload",
"file_download": "Download",
"file_empty": "This folder is empty",
"file_loading": "Loading...",
"file_timeout": "Remote device did not respond. File transfer may not be supported or is disabled on the remote machine.",
"file_transfers": "Transfers",
"file_complete": "Complete",
"file_error": "Transfer failed",
"file_show_hidden": "Show hidden files",
"file_new_folder": "New Folder",
"file_new_folder_prompt": "Enter folder name:",
"file_parent": "Parent folder",
"file_root": "Root",
"file_rename": "Rename",
"file_rename_prompt": "Enter new name:",
"file_delete_confirm": "Are you sure you want to delete this item?",
"file_cancelled": "Transfer cancelled",
"2fa_required": "2FA Verification Required",
"2fa_hint": "Enter the 6-digit code from your authenticator app",
"2fa_invalid": "Enter a valid 6-digit code",
"verify": "Verify",
"remember_peer_password": "Remember device password on this device",
"save_peer_password": "Save password",
"input_mode_touch": "Touch",
"input_mode_touchpad": "Touchpad",
"show_keyboard": "Keyboard",
"special_keys": "Special keys",
"special_print_screen": "Print Screen",
"mobile_toolbar": "Remote controls",
"phone_unsupported_title": "Remote desktop requires a larger screen",
"phone_unsupported_body": "Use a tablet, unfolded foldable, or desktop to control devices remotely. You can still manage devices from the console.",
"phone_unsupported_back_devices": "Back to devices",
"phone_unsupported_get_desktop": "Get RdClient desktop",
"file_local": "Local computer",
"file_remote": "Remote computer",
"file_send": "Send",
"file_pick_folder": "Choose folder",
"file_queue_empty": "No transfers in progress",
"file_connecting": "Connecting file transfer session…",
"file_connect_failed": "Could not open file transfer session",
"file_local_limited": "Full local folder browsing requires Chrome or Edge over HTTPS. You can still upload and download files.",
"file_transfer_unavailable_cdap": "File transfer is not available for CDAP snapshot sessions.",
"file_status_waiting": "Waiting…",
"file_status_transferring": "Transferring…",
"file_status_saving": "Saving…",
"file_status_downloaded": "Downloaded",
"file_status_uploaded": "Uploaded",
"file_drop_upload_hint": "Drop to upload to: {path}",
"file_local_upload_hint": "Drop files in the box on the left or click it to upload. Destination is the folder open on the remote side.",
"file_transfer_stalled": "Remote did not start transfer",
"file_no_local_tree": "Choose a folder to browse local files (optional)",
"file_dropzone_title": "Drop files here",
"file_dropzone_subtitle": "or click to choose files",
"file_dropzone_multiple": "Multiple files supported",
"file_dropzone_waiting": "Waiting for remote connection…",
"file_overwrite_title": "File already exists",
"file_overwrite_message": "A file named \"{name}\" already exists on the remote computer. Overwrite it?",
"file_overwrite_skip": "Skip",
"file_overwrite_skip_all": "Skip all",
"file_overwrite_confirm": "Overwrite",
"file_overwrite_all": "Overwrite all",
"file_resume": "Resume",
"file_open": "Open",
"file_up": "Up",
"file_home": "Home",
"file_hide_hidden": "Hide hidden files",
"windows_sessions": "Windows sessions"
},
"remote_dashboard": {
"title": "Remote Desktop Client",
"subtitle": "Connect to your devices from the browser",
"search_placeholder": "Search by ID, hostname, or note…",
"filter_all": "All",
"filter_online": "Online",
"filter_offline": "Offline",
"col_id": "Device ID",
"col_hostname": "Hostname",
"col_platform": "Platform",
"col_status": "Status",
"col_last_seen": "Last seen",
"connect": "Connect",
"empty": "No devices match your filters",
"loading": "Loading devices…",
"error_load": "Failed to load devices",
"open_panel": "Open console",
"devices_count": "{count} devices",
"retry": "Retry",
"nav_address_book": "Address book",
"nav_folders": "Folders",
"nav_groups": "Groups",
"nav_tags": "Tags",
"quick_connect": "Control remote desktop",
"quick_connect_placeholder": "Enter remote ID…",
"view_grid": "Grid view",
"view_list": "List view",
"sync_now": "Refresh",
"last_sync": "Updated",
"status_ready": "Ready",
"sync_error": "Sync error",
"unassigned": "Unassigned",
"no_groups": "No groups",
"no_tags": "No tags",
"collapse_devices": "Collapse device list",
"expand_devices": "Expand device list",
"open_settings": "Settings"
},
"branding": {
"identity_title": "Brand Identity",
"identity_desc": "Customize the application name and description shown across the console",
"app_name": "Application Name",
"app_description": "Application Description",
"logo_title": "Logo",
"logo_desc": "Choose how your logo appears in the sidebar and login page",
"logo_type_text": "Text Logo",
"logo_type_icon": "Material Icon",
"logo_type_svg": "SVG Code",
"logo_type_image": "Image URL",
"logo_text": "Logo Text",
"logo_text_hint": "Primary text displayed as your brand logo",
"logo_text_accent": "Accent Text",
"logo_text_accent_hint": "Secondary text below the logo (e.g. product name or tagline)",
"logo_icon_name": "Icon Name",
"logo_icon_hint": "Enter a Material Icons name (e.g. dns, cloud, security). See fonts.google.com/icons",
"logo_svg_code": "SVG Code",
"logo_svg_hint": "Paste your SVG markup here. Supports full <svg> elements with paths and styles.",
"logo_image_upload": "Upload Image",
"logo_image_choose": "Choose image file",
"logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 2 MB. The image is saved on the server.",
"logo_image_url": "Image Path / URL",
"logo_image_url_hint": "Auto-filled when you upload a file, or enter a URL / path manually.",
"logo_image_too_large": "Image is too large. Maximum size is 2 MB.",
"logo_image_invalid_type": "Invalid file type. Use PNG, JPG, GIF, WebP or SVG.",
"logo_upload_success": "Logo uploaded successfully.",
"preview": "Preview",
"colors_title": "Color Scheme",
"colors_desc": "Customize the color palette. Leave empty to use defaults.",
"colors_backgrounds": "Backgrounds",
"colors_text": "Text",
"colors_accents": "Accent Colors",
"colors_borders": "Borders",
"typography_title": "Typography",
"typography_desc": "Choose fonts for headings and body text. Fonts are downloaded to the server for self-hosting.",
"font_heading": "Heading Font",
"font_heading_hint": "Used for headings (H1H6) and text logo",
"font_body": "Body Font",
"font_body_hint": "Used for body text and UI elements",
"font_search_placeholder": "Search fonts...",
"font_system_default": "System default",
"font_clear": "Clear",
"font_cat_all": "All",
"font_downloaded_count": "fonts downloaded on server",
"import_export_title": "Import / Export",
"import_export_desc": "Save your theme as a JSON file or import one from another instance",
"export_theme": "Export Theme",
"import_theme": "Import Theme",
"reset_defaults": "Reset to Defaults",
"save_branding": "Save Branding",
"save_now": "Save now",
"saved": "Branding saved successfully.",
"autosaved": "Changes saved automatically.",
"status_saved": "All changes saved",
"status_dirty": "Unsaved changes",
"status_saving": "Saving…",
"status_error": "Save failed",
"revert_changes": "Revert changes",
"exported": "Theme exported",
"imported": "Theme imported successfully.",
"import_error": "Failed to import theme. Invalid file format.",
"reset_confirm": "Are you sure you want to reset branding to defaults? This cannot be undone.",
"reset_success": "Branding reset to defaults.",
"profiles_label": "Appearance profile",
"profile_apply": "Apply profile",
"profile_new": "New profile",
"profile_save": "Save to profile",
"profile_duplicate": "Duplicate",
"profile_delete": "Delete",
"profile_none": "— Select profile —",
"profile_active": "active",
"profile_applied": "Profile applied.",
"profile_created": "Profile created.",
"profile_updated": "Profile updated.",
"profile_duplicated": "Profile duplicated.",
"profile_deleted": "Profile deleted.",
"profile_delete_confirm": "Delete this appearance profile?",
"profile_name_prompt": "Profile name:",
"profile_select_first": "Select a profile first.",
"builtin_themes": "Built-in themes",
"theme_apply_confirm": "Apply this built-in theme? Current settings will be replaced.",
"theme_applied": "Theme applied.",
"module_identity": "Identity & logo",
"module_colors": "Colors",
"module_typography": "Typography",
"module_backgrounds": "Console background",
"module_pages": "Login & agent pages",
"module_advanced": "Advanced",
"modules_nav": "Appearance modules",
"live_preview": "Live preview",
"preview_apply_page": "Preview on this page",
"preview_card_title": "Dashboard card",
"preview_card_body": "Sample body text showing your typography and colors.",
"preview_btn_primary": "Primary",
"preview_btn_secondary": "Secondary",
"font_google": "Google Fonts",
"font_local": "Downloaded",
"font_upload": "Upload custom",
"font_upload_choose": "Choose font file",
"font_upload_name": "Font family name",
"font_upload_success": "Font uploaded successfully.",
"font_local_empty": "No fonts downloaded yet.",
"font_delete": "Remove font",
"powered_by": "Powered by",
"background_title": "Background & Appearance",
"background_desc": "Set a console wallpaper, gradient or solid background. Cards float above it.",
"bg_type_none": "None",
"bg_type_color": "Solid Color",
"bg_type_gradient": "Gradient",
"bg_type_image": "Image",
"bg_color": "Background Color",
"bg_gradient": "CSS Gradient",
"bg_gradient_hint": "Any valid CSS gradient, e.g. linear-gradient(135deg, #1e293b, #0f172a)",
"bg_image_upload": "Upload Background Image",
"bg_image_choose": "Choose image file",
"bg_image_hint": "PNG, JPG, WebP or GIF. Max 8 MB. Stored on the server.",
"bg_image_url": "Image Path / URL",
"bg_size": "Image Sizing",
"bg_size_cover": "Cover (fill screen)",
"bg_size_contain": "Contain (fit)",
"bg_size_auto": "Auto (original)",
"bg_blur": "Background Blur",
"bg_overlay": "Dark Overlay",
"bg_overlay_hint": "Darkens the background for better text readability.",
"glass_title": "Glass Surfaces",
"glass_desc": "Frosted glass background for cards, modals, forms, and other panel surfaces.",
"glass_enabled": "Enable glass surfaces",
"glass_color": "Glass tint color",
"glass_color_hint": "Base color for frosted panels. Uses secondary background color when empty.",
"glass_blur": "Surface blur",
"glass_opacity": "Glass opacity",
"bg_image_too_large": "Image is too large. Maximum size is 8 MB.",
"bg_image_invalid_type": "Invalid file type. Use PNG, JPG, WebP or GIF.",
"bg_upload_success": "Background image uploaded successfully.",
"login_title": "Login Page",
"login_desc": "Customize the login screen heading, subtitle and background.",
"login_heading": "Login Heading",
"login_heading_placeholder": "Welcome back",
"login_subheading": "Login Subtitle",
"login_subheading_placeholder": "Sign in to your account",
"login_bg_inherit": "Same as console",
"agent_title": "Agent Download Page",
"agent_desc": "Customize the public agent download portal shown to end users.",
"agent_show_powered": "Show \"Powered by BetterDesk\"",
"agent_show_powered_hint": "Display the BetterDesk attribution in the download portal footer.",
"footer_title": "Footer & Copyright",
"footer_desc": "Add a custom footer line shown on the login screen and console sidebar.",
"footer_text": "Footer Text",
"footer_text_hint": "e.g. a copyright notice or company name.",
"show_powered": "Show \"BetterDesk\" attribution",
"show_powered_hint": "Display the BetterDesk name and version in the login footer and sidebar.",
"custom_css_title": "Custom CSS",
"custom_css_desc": "Advanced: inject custom CSS applied across the console and login page.",
"custom_css_hint": "Use with care. Invalid or unsafe rules are sanitized. Max 20,000 characters."
},
"device_detail": {
"tab_overview": "Overview",
"tab_tags": "Tags & Notes",
"tab_actions": "Actions",
"section_identity": "Identity",
"section_network": "Network",
"section_timestamps": "Timestamps",
"section_connect": "Connection",
"section_manage": "Management",
"folder": "Folder",
"status_tier": "Status Tier",
"device_banned": "This device is banned",
"no_reason": "No reason provided",
"tags": "Tags",
"no_tags": "No tags assigned to this device",
"tag_placeholder": "Enter a tag name...",
"add_tag": "Add",
"tag_exists": "This tag already exists",
"notes": "Notes",
"notes_placeholder": "Add notes about this device...",
"danger_zone": "Danger Zone",
"action_connect_web": "Web Remote",
"action_connect_web_desc": "Connect via browser remote desktop",
"action_native_remote": "BetterDesk Remote",
"action_native_remote_desc": "Native JPEG stream — no plugins required",
"action_connect_desktop": "Desktop Client",
"action_connect_desktop_desc": "Open in desktop client app",
"action_change_id_desc": "Change the device registration ID",
"action_ban_desc": "Block this device from connecting",
"action_unban_desc": "Allow this device to connect again",
"action_delete_desc": "Permanently remove this device",
"tab_hardware": "Hardware",
"tab_metrics": "Metrics",
"tab_services": "Services",
"tab_processes": "Processes",
"tab_events": "Events",
"tab_activity": "Activity",
"tab_files": "Files",
"agent_lazy_hint": "Click this tab to load live data from the agent",
"agent_offline": "Agent is offline",
"agent_timeout": "Agent did not respond in time",
"agent_error": "Failed to load data from agent",
"service_name": "Name",
"service_display": "Display name",
"service_status": "Status",
"service_start": "Start mode",
"process_name": "Name",
"process_user": "User",
"process_memory": "Memory",
"section_system": "System",
"section_cpu": "Processor",
"section_memory": "Memory",
"section_displays": "Displays",
"section_encoding": "Encoding Capabilities",
"section_live_metrics": "Live Metrics",
"section_current_usage": "Current Usage",
"section_usage_history": "Usage History",
"os": "Operating System",
"version": "Client Version",
"cpu_model": "CPU Model",
"cpu_cores": "CPU Cores",
"cpu_freq": "CPU Frequency",
"total_memory": "Total Memory",
"metric_memory": "Memory",
"metric_disk": "Disk",
"metrics_updated": "Updated",
"device_groups": "Groups",
"no_sysinfo": "No hardware information available",
"no_sysinfo_hint": "System info will appear after the device sends a sysinfo report",
"no_metrics": "No metrics data available",
"no_metrics_hint": "Metrics will appear after the device sends heartbeat reports",
"chart_oldest": "← Oldest",
"chart_newest": "Newest →"
},
"inventory": {
"title": "Inventory",
"subtitle": "Hardware and software inventory of managed devices",
"device_id": "Device ID",
"hostname": "Hostname",
"os": "Operating System",
"cpu": "CPU",
"cpu_cores": "CPU Cores",
"cpu_usage": "CPU Usage",
"memory": "Memory",
"memory_total": "Total Memory",
"memory_used": "Used Memory",
"memory_available": "Available Memory",
"memory_usage": "Memory Usage",
"swap": "Swap",
"disks": "Disks",
"disk_count": "Disk Count",
"network": "Network",
"network_interfaces": "Network Interfaces",
"software": "Software",
"software_count": "Installed Software",
"system": "System",
"kernel": "Kernel",
"architecture": "Architecture",
"uptime": "Uptime",
"frequency": "Frequency",
"physical_cores": "Physical Cores",
"logical_cores": "Logical Cores",
"model": "Model",
"usage": "Usage",
"total": "Total",
"used": "Used",
"available": "Available",
"mount_point": "Mount Point",
"removable": "removable",
"mac_address": "MAC Address",
"ip_addresses": "IP Addresses",
"traffic": "Traffic",
"collect_now": "Collect Now",
"collector_running": "Collector Running",
"collector_stopped": "Collector Stopped",
"last_upload": "Last upload",
"total_uploads": "total",
"last_seen": "Last Seen",
"collected_at": "Collected At",
"no_data": "No inventory data available yet. Click \"Collect Now\" to gather system information.",
"no_devices": "No devices with inventory data found",
"detail_title": "Device Inventory Detail",
"telemetry": "Telemetry",
"view_detail": "View Detail",
"export": "Export",
"refresh": "Refresh"
},
"tickets": {
"title": "Tickets",
"subtitle": "Support tickets and issue tracking",
"create": "New Ticket",
"edit": "Edit Ticket",
"delete": "Delete Ticket",
"detail": "Ticket Detail",
"ticket_id": "Ticket ID",
"ticket_title": "Title",
"description": "Description",
"status": "Status",
"priority": "Priority",
"category": "Category",
"assigned_to": "Assigned To",
"created_by": "Created By",
"device": "Device",
"sla_due": "SLA Due",
"created_at": "Created",
"updated_at": "Updated",
"resolved_at": "Resolved",
"closed_at": "Closed",
"status_open": "Open",
"status_in_progress": "In Progress",
"status_resolved": "Resolved",
"status_closed": "Closed",
"priority_low": "Low",
"priority_medium": "Medium",
"priority_high": "High",
"priority_critical": "Critical",
"category_general": "General",
"category_hardware": "Hardware",
"category_software": "Software",
"category_network": "Network",
"category_access": "Access",
"category_other": "Other",
"comments": "Comments",
"add_comment": "Add Comment",
"comment_placeholder": "Write a comment...",
"internal_note": "Internal note (not visible to end users)",
"attachments": "Attachments",
"upload_attachment": "Upload Attachment",
"download": "Download",
"connect_device": "Connect to Device",
"no_tickets": "No tickets found",
"no_comments": "No comments yet",
"no_attachments": "No attachments",
"title_required": "Title is required",
"delete_confirm": "Are you sure you want to delete ticket #{id}?",
"delete_success": "Ticket deleted successfully",
"created_success": "Ticket created successfully",
"updated_success": "Ticket updated successfully",
"sla_overdue": "SLA Overdue",
"filter_all": "All",
"search_placeholder": "Search tickets...",
"assign_to_me": "Assign to me",
"unassign": "Unassign",
"stats_total": "Total",
"stats_open": "Open",
"stats_in_progress": "In Progress",
"stats_resolved": "Resolved",
"stats_closed": "Closed"
},
"activity": {
"title": "Activity Monitoring",
"subtitle": "Application usage and idle tracking",
"device": "Device",
"hostname": "Hostname",
"sessions": "Sessions",
"idle_time": "Idle Time",
"active_time": "Active Time",
"last_report": "Last Report",
"top_apps": "Top Applications",
"app_name": "Application",
"window_title": "Window Title",
"category": "Category",
"duration": "Duration",
"started_at": "Started",
"ended_at": "Ended",
"session_count": "Session Count",
"total_active": "Total Active",
"total_idle": "Total Idle",
"detail_count": "Detail Records",
"no_data": "No activity data available",
"no_sessions": "No sessions",
"filter_from": "From",
"filter_to": "To",
"filter_apply": "Apply filter",
"hours": "hours",
"minutes": "minutes",
"seconds": "seconds",
"category_browser": "Browser",
"category_productivity": "Productivity",
"category_communication": "Communication",
"category_development": "Development",
"category_media": "Media",
"category_gaming": "Gaming",
"category_system": "System",
"category_other": "Other",
"summary": "Summary",
"details": "Details",
"refresh": "Refresh",
"search": "Search devices...",
"date_range": "Date Range",
"device_id": "Device ID",
"session_start": "Session Start",
"session_end": "Session End",
"user": "User",
"no_activity": "No activity recorded",
"reported_at": "Reported At",
"detail": "Detail",
"no_apps": "No applications"
},
"automation": {
"title": "Automation & Alerts",
"subtitle": "Alert rules, remote commands",
"rules": "Alert Rules",
"rules_subtitle": "Define conditions that trigger notifications",
"alerts": "Alert History",
"alerts_subtitle": "View and acknowledge triggered alerts",
"commands": "Remote Commands",
"commands_subtitle": "Send commands to remote devices",
"smtp": "SMTP Configuration",
"smtp_subtitle": "Email notification settings",
"rule_name": "Rule Name",
"description": "Description",
"condition_type": "Condition Type",
"condition_op": "Operator",
"condition_value": "Threshold",
"severity": "Severity",
"scope_device": "Target Device",
"scope_all": "All Devices",
"cooldown": "Cooldown (seconds)",
"notify_emails": "Notification Emails",
"enabled": "Enabled",
"disabled": "Disabled",
"create_rule": "Create Rule",
"edit_rule": "Edit Rule",
"delete_rule": "Delete Rule",
"acknowledge": "Acknowledge",
"acknowledged": "Acknowledged",
"unacknowledged": "Unacknowledged",
"triggered_at": "Triggered At",
"severity_info": "Info",
"severity_warning": "Warning",
"severity_critical": "Critical",
"op_gt": "Greater than",
"op_gte": "Greater or equal",
"op_lt": "Less than",
"op_lte": "Less or equal",
"op_eq": "Equal to",
"op_neq": "Not equal to",
"type_cpu_usage": "CPU Usage (%)",
"type_memory_usage": "Memory Usage (%)",
"type_disk_usage": "Disk Usage (%)",
"type_offline_duration": "Offline Duration (s)",
"type_idle_duration": "Idle Duration (s)",
"type_custom": "Custom",
"command_type": "Command Type",
"command_payload": "Command / Script",
"command_result": "Result",
"command_status": "Status",
"send_command": "Send Command",
"status_pending": "Pending",
"status_running": "Running",
"status_completed": "Completed",
"status_failed": "Failed",
"smtp_host": "SMTP Host",
"smtp_port": "Port",
"smtp_secure": "Use TLS",
"smtp_user": "Username",
"smtp_pass": "Password",
"smtp_from": "From Address",
"smtp_test": "Test Connection",
"smtp_save": "Save Configuration",
"smtp_test_success": "Connection successful",
"smtp_test_failed": "Connection failed",
"no_rules": "No alert rules configured",
"no_alerts": "No alerts triggered",
"no_commands": "No commands sent",
"id_payload_required": "Device ID and payload are required",
"no_commands_sent": "No commands have been sent yet"
},
"file_transfer": {
"title": "File Transfer",
"transfers": "Transfers",
"new_transfer": "New Transfer",
"upload": "Upload",
"download": "Download",
"direction": "Direction",
"filename": "Filename",
"file_size": "File Size",
"mime_type": "MIME Type",
"progress": "Progress",
"status": "Status",
"device": "Device",
"initiated_by": "Initiated By",
"created_at": "Created At",
"cancel": "Cancel",
"cancel_confirm": "Are you sure you want to cancel this transfer?",
"download_file": "Download File",
"browse_files": "Browse Files",
"select_file": "Select File",
"select_device": "Select Device",
"no_transfers": "No file transfers",
"status_pending": "Pending",
"status_active": "Active",
"status_completed": "Completed",
"status_failed": "Failed",
"status_cancelled": "Cancelled",
"bytes_transferred": "Bytes Transferred",
"chunks": "Chunks",
"transfer_started": "Transfer started",
"transfer_completed": "Transfer completed",
"transfer_failed": "Transfer failed",
"transfer_cancelled": "Transfer cancelled",
"max_file_size": "Maximum file size: 4 GB",
"error_too_large": "File is too large",
"error_no_device": "No device selected",
"error_no_file": "No file selected"
},
"network": {
"title": "Network Monitoring",
"targets": "Monitoring Targets",
"add_target": "Add Target",
"edit_target": "Edit Target",
"delete_target": "Delete Target",
"delete_confirm": "Are you sure you want to delete this target?",
"target_name": "Name",
"host": "Host",
"port": "Port",
"url": "URL",
"check_type": "Check Type",
"timeout": "Timeout (ms)",
"interval": "Interval (ms)",
"enabled": "Enabled",
"status": "Status",
"last_check": "Last Check",
"last_rtt": "Last RTT",
"rtt_ms": "RTT (ms)",
"status_up": "Up",
"status_down": "Down",
"status_unknown": "Unknown",
"check_now": "Check Now",
"history": "Check History",
"stats": "Statistics",
"total_targets": "Total Targets",
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"type_ping": "Ping (ICMP)",
"type_tcp": "TCP Port",
"type_http": "HTTP",
"type_https": "HTTPS",
"tools": "Network Tools",
"ping_tool": "Ping Test",
"tcp_tool": "TCP Port Check",
"http_tool": "HTTP Check",
"dns_tool": "DNS Resolve",
"monitor_start": "Start Monitor",
"monitor_stop": "Stop Monitor",
"monitor_running": "Monitor is running",
"monitor_stopped": "Monitor is stopped",
"no_targets": "No monitoring targets configured",
"no_history": "No check history available",
"error_code": "Error",
"status_code": "HTTP Status Code",
"search_targets": "Search targets...",
"name": "Name",
"tab_targets": "Targets",
"tab_tools": "Tools",
"avg_latency": "Avg Latency",
"type": "Type",
"latency": "Latency",
"check_history": "Check History",
"name_host_required": "Name and host are required",
"uptime": "Uptime",
"response_time": "Response Time",
"avg_response": "Average Response",
"charts": "Charts",
"realtime": "Realtime",
"response_time_ms": "Response Time (ms)",
"uptime_percent": "Uptime %",
"last_24h": "Last 24 hours",
"last_7d": "Last 7 days",
"last_30d": "Last 30 days"
},
"dataguard": {
"title": "DataGuard — DLP",
"policies": "DLP Policies",
"add_policy": "Add Policy",
"edit_policy": "Edit Policy",
"delete_policy": "Delete Policy",
"delete_confirm": "Are you sure you want to delete this policy?",
"policy_name": "Name",
"policy_description": "Description",
"policy_desc": "Policy Description",
"status": "Status",
"enabled": "Enabled",
"disabled": "Disabled",
"rules": "Rules",
"add_rule": "Add Rule",
"rule_type": "Rule Type",
"rule_type_usb": "USB Device",
"rule_type_file": "File Operation",
"action": "Action",
"action_allow": "Allow",
"action_block": "Block",
"action_log": "Log Only",
"filter": "Filter",
"vid": "Vendor ID (VID)",
"pid": "Product ID (PID)",
"serial": "Serial Number",
"device_class": "Device Class",
"drive_type": "Drive Type",
"file_extensions": "File Extensions",
"events": "DLP Events",
"event_source": "Source",
"event_source_usb": "USB",
"event_source_file": "File",
"event_type": "Event Type",
"event_details": "Details",
"no_policies": "No DLP policies configured",
"no_events": "No DLP events recorded",
"stats": "Statistics",
"total_events": "Total Events",
"blocked_events": "Blocked",
"logged_events": "Logged",
"usb_events": "USB Events",
"file_events": "File Events",
"device_id": "Device ID",
"policy_matched": "Policy Matched",
"timestamp": "Timestamp",
"drive_removable": "Removable",
"drive_fixed": "Fixed",
"drive_network": "Network",
"drive_cdrom": "CD-ROM",
"drive_unknown": "Unknown",
"total_policies": "Total Policies",
"active_policies": "Active Policies",
"violations": "Violations",
"blocked": "Blocked",
"tab_policies": "Policies",
"tab_events": "Events",
"search_policies": "Search policies...",
"create_policy": "Create Policy",
"policy_type": "Policy Type",
"scope": "Scope",
"events_count": "Events",
"search_events": "Search events...",
"event_time": "Event Time",
"device": "Device",
"policy": "Policy",
"detail": "Detail",
"scope_help": "Comma-separated device IDs, or leave empty for all",
"scope_all": "All Devices",
"active": "Active",
"type_file_type": "File Type",
"type_usb": "USB",
"type_clipboard": "Clipboard",
"type_screen_share": "Screen Share",
"type_file_transfer": "File Transfer"
},
"reports": {
"title": "Reports",
"generate": "Generate Report",
"generate_csv": "Export CSV",
"report_type": "Report Type",
"type_devices": "Device Summary",
"type_activity": "Activity Summary",
"type_security": "Security Report",
"type_tickets": "Ticket Report",
"type_network": "Network Report",
"type_inventory": "Inventory Report",
"type_alerts": "Alert Report",
"saved": "Saved Reports",
"save_report": "Save Report",
"delete_report": "Delete Report",
"delete_confirm": "Are you sure you want to delete this saved report?",
"no_saved": "No saved reports",
"report_title": "Title",
"created_by": "Created By",
"created_at": "Created At",
"filters": "Filters",
"date_from": "From",
"date_to": "To",
"device_filter": "Device ID",
"generated_at": "Generated At",
"section": "Data Section",
"total_devices": "Total Devices",
"online": "Online",
"offline": "Offline",
"banned": "Banned",
"platform_distribution": "Platform Distribution",
"top_applications": "Top Applications",
"total_active": "Total Active Time",
"total_idle": "Total Idle Time",
"dlp_stats": "DLP Statistics",
"banned_devices": "Banned Devices",
"audit_logs": "Audit Logs",
"ticket_stats": "Ticket Statistics",
"category_distribution": "Category Distribution",
"priority_distribution": "Priority Distribution",
"targets_status": "Targets Status",
"os_distribution": "OS Distribution",
"avg_ram": "Average RAM",
"alert_rules": "Alert Rules",
"recent_alerts": "Recent Alerts",
"tab_generate": "Generate Report",
"tab_saved": "Saved Reports",
"type_devices_desc": "Overview of all devices, platforms and statuses",
"type_activity_desc": "Application usage and idle time summary",
"type_security_desc": "Ban actions, DLP events and audit logs",
"type_tickets_desc": "Ticket statistics and SLA performance",
"type_network_desc": "Network monitoring targets and uptime data",
"type_inventory_desc": "Hardware and software inventory summary",
"type_alerts_desc": "Alert rules and triggered alert history",
"report_name": "Report Name",
"format": "Format",
"save": "Save Report",
"preview": "Preview",
"download": "Download",
"delete_saved": "Delete Report",
"raw_json": "Raw JSON"
},
"tenants": {
"title": "Tenants",
"list": "Tenants",
"add_tenant": "Add Tenant",
"edit_tenant": "Edit Tenant",
"delete_tenant": "Delete Tenant",
"delete_confirm": "Are you sure you want to delete this tenant? All device and user assignments will be removed.",
"name": "Name",
"slug": "Slug",
"contact_name": "Contact Name",
"contact_email": "Contact Email",
"max_devices": "Max Devices",
"max_devices_hint": "0 = unlimited",
"notes": "Notes",
"active": "Active",
"inactive": "Inactive",
"devices": "Devices",
"users": "Users",
"assign_device": "Assign Device",
"assign_devices": "Assign Devices",
"remove_device": "Remove Device",
"assign_user": "Assign User",
"remove_user": "Remove User",
"no_tenants": "No tenants configured",
"no_devices": "No devices assigned to this tenant",
"no_users": "No users assigned to this tenant",
"stats": "Tenant Statistics",
"total_devices": "Total Devices",
"online_devices": "Online Devices",
"total_users": "Total Users",
"created_at": "Created At",
"updated_at": "Updated At",
"slug_exists": "Tenant slug already exists",
"total_tenants": "Total Tenants",
"active_tenants": "Active Tenants",
"search": "Search tenants...",
"create_tenant": "Create Tenant",
"detail": "Tenant Detail",
"contact": "Contact",
"enabled": "Enabled",
"disabled": "Disabled",
"max": "max",
"info": "Tenant Info",
"status": "Status"
},
"registrations": {
"title": "Device Enrollment Requests",
"subtitle": "Review pending device enrollment and registration approval requests",
"search_placeholder": "Search by device ID, hostname or IP...",
"no_registrations": "No enrollment requests",
"col_device_id": "Device ID",
"col_hostname": "Hostname",
"col_platform": "Platform",
"col_ip": "IP Address",
"col_version": "Version",
"col_status": "Status",
"col_requested": "Requested",
"col_actions": "Actions",
"status_pending": "Pending",
"status_approved": "Approved",
"status_rejected": "Rejected",
"approve_btn": "Approve",
"approve_confirm": "Are you sure you want to approve this device? It will receive server credentials and can connect automatically.",
"approved_success": "Device registration approved successfully",
"reject_btn": "Reject",
"reject_title": "Reject Registration",
"reject_confirm": "Are you sure you want to reject this registration request?",
"reject_reason": "Reason (optional)",
"reject_reason_placeholder": "Enter reason for rejection...",
"rejected_success": "Device registration rejected",
"delete_confirm": "Are you sure you want to delete this registration record?",
"deleted_success": "Registration record deleted",
"enrollment_title": "Device Enrollment",
"enrollment_subtitle": "Pending enrollment requests from BetterDesk desktop clients",
"enrollment_empty": "No pending enrollment requests",
"enrollment_approve": "Approve",
"enrollment_reject": "Reject",
"enrollment_display_name": "Display Name",
"enrollment_display_name_placeholder": "Enter a name for this device...",
"enrollment_sync_mode": "Sync Mode",
"enrollment_sync_silent": "Silent — minimal telemetry",
"enrollment_sync_standard": "Standard — balanced sync",
"enrollment_sync_turbo": "Turbo — aggressive sync",
"enrollment_approved_success": "Device enrollment approved",
"enrollment_rejected_success": "Device enrollment rejected",
"approve_title": "Approve Device",
"field_name": "Device Name",
"field_name_placeholder": "Enter a name for this device...",
"field_sync_mode": "Sync Mode",
"sync_standard": "Standard — balanced sync",
"sync_silent": "Silent — minimal telemetry",
"sync_turbo": "Turbo — aggressive sync",
"field_tags": "Tags",
"field_tags_placeholder": "Comma-separated tags (e.g. office, laptop)...",
"field_tags_existing": "Existing tags",
"field_tag_add_placeholder": "Add a new tag...",
"field_tag_add_btn": "Add",
"field_groups": "Device groups",
"field_folder": "Folder",
"field_folder_none": "No folder",
"reject_ban_option": "Ban this device",
"reject_ban_hint": "The device will be blocked and cannot send new registration requests.",
"banner_open_mode": "Enrollment is open — new RustDesk clients register without operator approval. Set Managed mode in Settings to use this queue.",
"banner_locked_mode": "Enrollment is locked — only token-bound devices can register. Managed mode is required for operator approval of unknown clients.",
"enrollment_settings_link": "Enrollment settings"
},
"backup": {
"title": "Backup",
"desc": "Download a full disaster-recovery backup of your console — database, server identity keys, environment file, branding uploads and Go server data. The archive (.tar.gz) can be restored on a fresh machine to bring the entire server back online.",
"restore_title": "Restore",
"restore_desc": "Upload a previously downloaded backup archive (.tar.gz) or a legacy JSON config snapshot. Select which components to restore below.",
"stat_users": "Users",
"stat_settings": "Settings",
"stat_folders": "Folders",
"stat_groups": "Groups",
"stat_strategies": "Strategies",
"stat_backend": "Backend",
"stat_database": "Database engine",
"stat_keys": "Server keys included",
"stat_env": "Environment file",
"stat_uploads": "Branding files",
"download": "Download Backup",
"creating": "Creating backup...",
"download_success": "Backup downloaded successfully",
"upload": "Upload Backup",
"restore_confirm": "Are you sure you want to restore from this backup? Selected components will be overwritten.",
"restore_success": "Backup restored successfully. Some changes may require a page reload.",
"restart_required": "Some restored components (keys / .env / Go database) require a service restart to take effect.",
"restored": "Restored",
"skipped": "Skipped",
"backup_date": "Backup date",
"security_warning": "This backup contains secrets (server keys, environment file, password hashes and 2FA secrets). Store it securely and never share it.",
"restore_warning": "Restoring secrets, the environment file or the Go server database overwrites server identity and requires a service restart afterwards.",
"opt_database": "Database (all tables)",
"opt_database_hint": "Re-imports all console data. Applied live, no restart needed.",
"opt_uploads": "Branding files",
"opt_uploads_hint": "Logos and uploaded images.",
"opt_secrets": "Server keys & secrets",
"opt_secrets_warning": "Overwrites the Ed25519 server identity, API key and session secret. Requires a service restart.",
"opt_env": "Environment file (.env)",
"opt_env_warning": "Overwrites SESSION_SECRET, API key, database DSN, ports and TLS settings. Requires a service restart.",
"opt_godb": "Go server database",
"opt_godb_warning": "Overwrites the Go server SQLite database (SQLite backend only). Requires a service restart.",
"opt_settings": "Console settings",
"opt_branding": "Branding / Theme",
"opt_folders": "Device folders",
"opt_groups": "User & device groups",
"opt_addressbooks": "Address books",
"opt_users": "User accounts",
"opt_users_warning": "Destructive: replaces ALL user accounts with backup data. You may be logged out.",
"no_file": "No backup file selected",
"invalid_json": "Invalid backup file: not valid JSON",
"invalid_format": "Invalid backup file: not a BetterDesk backup"
},
"cdap": {
"device_detail": "CDAP Device",
"loading": "Loading...",
"loading_widgets": "Loading device widgets...",
"load_error": "Failed to load device data",
"connected": "Connected",
"disconnected": "Disconnected",
"device_offline_msg": "Device is currently offline. Widget values may be stale.",
"no_widgets": "No widgets available",
"no_widgets_desc": "This device has not registered a CDAP manifest with widget definitions.",
"command_log": "Command Log",
"clear_log": "Clear log",
"confirm_command": "Confirm Command",
"select_option": "Select",
"cdap_status": "CDAP Status",
"cdap_enabled": "CDAP Enabled",
"cdap_disabled": "CDAP Disabled",
"cdap_devices": "CDAP Devices",
"cdap_connections": "Active Connections",
"send_command": "Send Command",
"command_sent": "Command sent successfully",
"command_failed": "Failed to send command",
"devices_title": "CDAP Devices",
"devices_subtitle": "Connected devices via Custom Device Application Protocol",
"stat_connected": "Connected",
"stat_port": "Port",
"search_devices": "Search devices...",
"no_devices": "No devices connected",
"no_devices_desc": "No CDAP devices are currently connected. Devices will appear here once they connect to the gateway.",
"gateway_disabled": "CDAP Gateway Disabled",
"gateway_disabled_desc": "Enable the CDAP gateway by setting CDAP_ENABLED=true in the server configuration.",
"gateway_active": "Active",
"toggle_enable": "Enable CDAP",
"toggle_disable": "Disable CDAP",
"enabled_restart": "CDAP enabled. Server restart required to apply changes.",
"disabled_restart": "CDAP disabled. Server restart required to apply changes.",
"widgets": "widgets",
"type_all": "All",
"type_iot": "IoT",
"type_scada": "SCADA",
"type_os_agent": "OS Agent",
"type_network": "Network",
"type_camera": "Camera",
"type_custom": "Custom",
"active_alerts": "Active Alerts",
"alert_fired": "Alert fired",
"alert_cleared": "Alert cleared",
"no_alerts": "No active alerts",
"connect_terminal": "Connect Terminal",
"table_search": "Search...",
"just_now": "Just now",
"terminal_connecting": "Connecting to device...",
"terminal_disconnected": "Disconnected",
"terminal_error": "Terminal connection failed",
"linked_devices": "Linked Devices",
"link_device": "Link Device",
"unlink_device": "Unlink",
"no_linked_devices": "No linked devices",
"unlink_confirm": "Are you sure you want to unlink this device?",
"link_prompt": "Enter the Peer ID to link to this device:",
"connect_desktop": "Connect Desktop",
"connect_video": "Connect Stream",
"connect_files": "Browse Files",
"connect_audio": "Connect Audio",
"upload_file": "Upload",
"desktop_connecting": "Connecting...",
"video_connecting": "Connecting...",
"files_connecting": "Connecting...",
"audio_connecting": "Connecting...",
"audio_streaming": "Streaming",
"clipboard_in": "Clipboard received",
"clipboard_out": "Clipboard sent",
"monitor_select": "Select Monitor",
"keyframe_request": "Request Keyframe",
"quality_auto": "Auto Quality"
},
"notifications": {
"title": "Notifications",
"empty": "No new notifications",
"mark_all_read": "Mark all read",
"see_all": "See all help requests",
"help_request": "Help request",
"just_now": "just now"
},
"desktop": {
"switch_mode": "Desktop Mode",
"console_mode": "Console Mode",
"loading": "Loading...",
"minimize": "Minimize",
"maximize": "Maximize",
"restore": "Restore",
"close": "Close",
"widgets_mode": "Widgets",
"windows_mode": "Windows",
"wallpaper": "Wallpaper",
"add_widget": "Add Widget",
"remove_widget": "Remove Widget",
"pop_out_widget": "Pop Out",
"pop_in_widget": "Pop In",
"configure": "Configure",
"search_widgets": "Search widgets...",
"cat_monitoring": "Monitoring",
"cat_devices": "Devices",
"cat_tools": "Tools",
"cat_general": "General",
"notes_placeholder": "Write notes here...",
"search_placeholder": "Search devices, pages, settings...",
"search_pages": "Pages",
"search_devices": "Devices",
"search_no_results": "No results",
"exit_desktop": "Exit Desktop Mode",
"refresh": "Refresh",
"fullscreen": "Fullscreen",
"help": "Help",
"widget_clock": "Clock",
"widget_device_status": "Device Status",
"widget_server_health": "Server Info",
"widget_system_stats": "Device Gauges",
"widget_device_list": "Device List",
"widget_quick_actions": "Quick Actions",
"widget_recent_activity": "Recent Activity",
"widget_notes": "Notes",
"widget_network_monitor": "Network Monitor",
"widget_tickets_summary": "Tickets",
"widget_iframe": "Web Embed",
"widget_cdap_devices": "CDAP Devices",
"widget_uptime": "Uptime",
"widget_port_status": "Port Status",
"widget_device_grid": "Device Grid",
"widget_multi_gauge": "Server Gauges",
"widget_weekly_chart": "Weekly Activity",
"widget_quick_controls": "Quick Controls",
"widget_bandwidth": "Bandwidth",
"widget_connection_stats": "Connection Stats",
"widget_weather": "Weather",
"widget_world_clock": "World Clock",
"widget_bookmarks": "Bookmarks",
"widget_user_sessions": "User Sessions",
"widget_alert_feed": "Alert Feed",
"label_online": "Online",
"label_offline": "Offline",
"label_total": "Total",
"label_blocked": "Blocked",
"label_banned": "Banned",
"label_active": "Active",
"label_service": "Service",
"label_port": "Port",
"label_uptime_prefix": "Uptime:",
"label_uptime": "Uptime",
"label_no_devices": "No devices",
"label_no_activity": "No activity",
"label_no_targets": "No targets",
"label_unavailable": "Unavailable",
"label_open": "Open",
"label_in_progress": "In Progress",
"label_resolved": "Resolved",
"label_set_url": "Set URL in config",
"label_server_uptime": "Server Uptime",
"label_merged_info": "Merged into Server Info widget",
"label_with_notes": "With Notes",
"label_metric": "Metric",
"label_count": "Count",
"label_total_devices": "Total Devices",
"label_throughput": "Throughput",
"label_active_relays": "Active Relays",
"label_total_relayed": "Total Relayed",
"label_total_bytes": "Total Bytes",
"label_filter_devices": "Filter devices...",
"label_all": "All",
"label_ban": "Ban",
"label_unban": "Unban",
"label_connect": "Connect",
"label_no_cdap_devices": "No CDAP devices",
"action_add_widget": "Add Widget",
"label_merged_server_info": "Merged into Server Info widget",
"wp_images": "Images",
"wp_colors": "Solid Colors",
"wp_custom_color": "Custom color",
"wp_fit_style": "Style",
"wp_fill": "Fill",
"wp_fit": "Fit",
"wp_stretch": "Stretch",
"wp_center": "Center",
"wp_unavailable": "Wallpaper images are not installed on this server.",
"wp_download_hint": "Place PNG images in the public/wallpapers/ directory to enable wallpaper selection.",
"widget_calendar": "Calendar",
"widget_process_monitor": "Process Monitor",
"widget_disk_usage": "Disk Usage",
"widget_log_viewer": "Log Viewer",
"widget_speed_test": "Speed Test",
"widget_database_stats": "Database Stats",
"widget_docker_containers": "Docker Containers",
"widget_shell_command": "Shell Command",
"widget_device_map": "Device Map",
"widget_remote_connect": "Remote Connect",
"label_no_online": "No online devices",
"label_no_events": "No events today",
"label_event_title": "Event title:",
"label_no_data": "No data available",
"label_download_speed": "Download Speed",
"label_latency": "Latency",
"label_server": "Server",
"label_run_test": "Run Test",
"label_testing": "Testing...",
"label_table": "Table",
"label_rows": "Rows",
"label_last_backup": "Last Backup",
"label_no_containers": "No containers",
"label_docker_unavailable": "Docker not available",
"label_no_command": "No command configured",
"label_no_output": "No output yet",
"label_run": "Run",
"label_presets": "Presets",
"label_save_preset": "Save Preset",
"label_load_preset": "Load Preset",
"label_preset_name": "Preset name:",
"label_preset_monitoring": "Monitoring",
"label_preset_helpdesk": "Helpdesk",
"label_preset_minimal": "Minimal",
"label_preset_developer": "Developer",
"label_snap_layout": "Snap Layout",
"label_auto_arrange": "Auto Arrange",
"label_zone_layout": "Zone Layout",
"label_2col_equal": "2 Columns (Equal)",
"label_2col_wide": "2 Columns (60/40)",
"label_3col": "3 Columns",
"label_2x2_grid": "2×2 Grid",
"label_1_2": "1 + 2",
"label_1_3": "1 + 3",
"widget_group": "Widget Group",
"ungroup_widgets": "Ungroup Widgets",
"group_widgets": "Group Selected Widgets",
"snap_layouts": "Snap Layouts",
"snap_left": "Snap Left",
"snap_right": "Snap Right",
"snap_top_left": "Snap Top-Left",
"snap_top_right": "Snap Top-Right",
"snap_bottom_left": "Snap Bottom-Left",
"snap_bottom_right": "Snap Bottom-Right",
"aero_shake": "Shake to Minimize Others",
"zone_resize": "Drag border to resize zones",
"zone_borders": "Draggable Zone Borders",
"app_drawer": "Applications",
"search_apps": "Search apps...",
"edit_shortcuts": "Edit shortcuts",
"widgets": "Widgets",
"theme": "Theme"
},
"desktop_login": {
"click_to_sign_in": "Click anywhere or press a key to sign in",
"username_placeholder": "Username",
"password_placeholder": "Password",
"sign_in": "Sign in",
"verify": "Verify",
"totp_title": "Two-Factor Authentication",
"totp_subtitle": "Enter the 6-digit code from your authenticator app",
"back_to_login": "Back to login",
"fill_all_fields": "Please fill in all fields",
"invalid_credentials": "Invalid username or password",
"invalid_code": "Invalid verification code",
"enter_6_digits": "Enter all 6 digits",
"network_error": "Network error — check your connection",
"session_expired": "Session expired. Please sign in again."
},
"permissions": {
"title": "Permissions",
"subtitle": "Manage role-based permissions and custom overrides",
"info_title": "How permissions work",
"info_desc": "Each role has default permissions. You can add or remove individual permissions per role by toggling them below. Custom overrides are highlighted and can be reverted to defaults at any time.",
"select_role": "Select role",
"select_role_placeholder": "Choose a role...",
"reset_overrides": "Reset all overrides",
"granted": "Granted",
"overrides": "Overrides",
"level": "Level",
"super_admin_tag": "Full access",
"server_level_tag": "Server-level",
"custom": "Custom",
"default": "Default",
"revert": "Revert to default",
"saved": "Permission updated",
"reverted": "Reverted to default",
"all_reverted": "All overrides reverted",
"confirm_reset": "Reset all custom overrides for this role to defaults?",
"empty_title": "Select a role",
"empty_desc": "Choose a role from the dropdown above to view and manage its permissions.",
"locked_title": "Super Admin",
"locked_desc": "Super Admin has all permissions by default and cannot be customized.",
"cat_device": "Devices",
"cat_user": "Users",
"cat_server": "Server",
"cat_org": "Organizations",
"cat_audit": "Audit & Monitoring",
"cat_cdap": "CDAP",
"cat_enrollment": "Enrollment",
"cat_chat": "Chat",
"cat_branding": "Branding",
"perm_device_view": "View devices",
"perm_device_connect": "Connect to devices",
"perm_device_edit": "Edit devices",
"perm_device_delete": "Delete devices",
"perm_device_ban": "Ban / unban devices",
"perm_device_change_id": "Change device ID",
"perm_user_view": "View users",
"perm_user_create": "Create users",
"perm_user_edit": "Edit users",
"perm_user_delete": "Delete users",
"perm_server_config": "Server configuration",
"perm_server_keys": "Manage API keys",
"perm_server_attestation": "Server performance attestation",
"perm_org_create": "Create organizations",
"perm_org_edit": "Edit organizations",
"perm_org_delete": "Delete organizations",
"perm_org_manage_users": "Manage organization users",
"perm_org_manage_devices": "Manage organization devices",
"perm_audit_view": "View audit logs",
"perm_metrics_view": "View metrics",
"perm_blocklist_edit": "Edit blocklist",
"perm_cdap_view": "View CDAP devices",
"perm_cdap_command": "Send CDAP commands",
"perm_cdap_terminal": "CDAP terminal access",
"perm_cdap_files": "CDAP file access",
"perm_enrollment_manage": "Manage enrollment",
"perm_enrollment_approve": "Approve enrollment",
"perm_chat_access": "Chat access",
"perm_branding_edit": "Edit branding"
},
"tokens": {
"title": "Device Tokens",
"subtitle": "Manage enrollment tokens for automated device provisioning",
"enrollment_mode": "Enrollment Mode",
"mode_open": "Open",
"mode_open_desc": "Any device can register without a token",
"mode_managed": "Managed",
"mode_managed_desc": "Devices need a valid token or operator approval to register",
"mode_locked": "Locked",
"mode_locked_desc": "Only devices with a valid token can register",
"total": "Total Tokens",
"active": "Active",
"used": "Used",
"revoked": "Revoked",
"search_placeholder": "Search tokens...",
"status_pending": "Pending",
"status_active": "Active",
"status_used": "Used",
"status_revoked": "Revoked",
"status_expired": "Expired",
"bulk_generate": "Bulk Generate",
"create": "Create Token",
"edit": "Edit Token",
"token": "Token Prefix",
"name": "Name",
"status": "Status",
"uses": "Uses",
"bound_peer": "Bound Peer",
"expires": "Expires",
"created": "Created",
"actions": "Actions",
"name_placeholder": "e.g. Office PC batch",
"max_uses": "Max Uses",
"max_uses_hint": "0 = unlimited",
"expires_in": "Expires In",
"no_expiration": "No expiration",
"expires_1h": "1 hour",
"expires_24h": "24 hours",
"expires_7d": "7 days",
"expires_30d": "30 days",
"note": "Note",
"note_placeholder": "Optional note about this token...",
"count": "Count",
"count_range": "Number of tokens to generate (1-100)",
"name_prefix": "Name Prefix",
"generate": "Generate",
"token_created": "Token Created",
"tokens_generated": "Tokens Generated",
"copy_warning": "Copy the token now. It will not be shown again.",
"copy_token": "Copy Token",
"copied": "Copied!",
"revoke": "Revoke",
"revoke_confirm": "Are you sure you want to revoke this token? Devices already registered with it will not be affected.",
"revoked_success": "Token revoked successfully",
"no_tokens": "No tokens found",
"expired": "Expired",
"never": "Never",
"save": "Save",
"cancel": "Cancel",
"unlimited": "Unlimited"
},
"tutorial": {
"next": "Next",
"prev": "Previous",
"skip": "Skip",
"finish": "Finish",
"close": "Close",
"step_of": "{current} of {total}",
"console_sidebar_title": "Navigation Sidebar",
"console_sidebar_text": "Access all modules from here. Click any icon to navigate to that section. The sidebar adapts to your screen size.",
"console_expand_title": "Expand Sidebar",
"console_expand_text": "Click here to expand the sidebar and see full labels for all navigation items. Click again to collapse.",
"console_search_title": "Quick Search",
"console_search_text": "Search for devices, settings, or actions quickly. Press Ctrl+K for keyboard shortcut.",
"console_dashboard_title": "Dashboard",
"console_dashboard_text": "Your central hub showing server status, online devices, and quick actions. Keep an eye on important metrics at a glance.",
"console_devices_title": "Device Management",
"console_devices_text": "View, search, and manage all connected devices. Filter by status, assign tags, and configure individual device settings.",
"console_settings_title": "Settings",
"console_settings_text": "Configure server behavior, security options, branding, and user management. Customize BetterDesk to fit your needs.",
"console_desktop_title": "Desktop Mode",
"console_desktop_text": "Switch to desktop mode for a windowed workspace with widgets. Perfect for multi-tasking and monitoring dashboards.",
"console_complete_title": "You're Ready!",
"console_complete_text": "Explore the sidebar categories to discover all features. Click the Help icon anytime to restart this guide.",
"desktop_topbar_title": "Top Bar",
"desktop_topbar_text": "The top bar shows the clock, quick controls, and access to the app drawer. Click the grid icon to browse all apps.",
"desktop_drawer_title": "App Drawer",
"desktop_drawer_text": "Open the app drawer to search and launch any console function as a floating window. Apps are organized by category.",
"desktop_widgets_title": "Widget Dashboard",
"desktop_widgets_text": "Your customizable workspace. Widgets display live information and provide quick access to features. Drag to rearrange.",
"desktop_add_widget_title": "Add Widgets",
"desktop_add_widget_text": "Click here to browse available widgets. Choose from monitoring displays, device lists, notes, and more.",
"desktop_taskbar_title": "Taskbar",
"desktop_taskbar_text": "Open apps appear here. Click to focus or minimize windows. Hover icons to see app labels.",
"desktop_snap_title": "Snap Layouts",
"desktop_snap_text": "Drag windows to screen edges to snap them into position, or hover the maximize button for layout presets. Try Aero Shake!",
"desktop_windows_title": "App Windows",
"desktop_windows_text": "Apps open in draggable, resizable windows. Minimize, maximize, or close from the title bar. Windows layer above widgets.",
"desktop_search_title": "Quick Search",
"desktop_search_text": "Search across devices, pages, and settings. Press Ctrl+K anywhere to open search instantly.",
"desktop_complete_title": "Desktop Mode Ready!",
"desktop_complete_text": "Try opening apps from the drawer and arranging windows side-by-side. Use widget presets for quick dashboard layouts.",
"devices_folders_title": "Device Folders",
"devices_folders_text": "Organize devices into folders. Click a folder to filter the list. Right-click to rename or delete.",
"devices_search_title": "Search & Filter",
"devices_search_text": "Search by ID, hostname, or platform. Use the status pills to show only online, offline, or all devices.",
"devices_table_title": "Device List",
"devices_table_text": "Click any device row for details. Use the kebab menu on the right for quick actions like connect, edit tags, or delete.",
"devices_complete_title": "Device Management Ready!",
"devices_complete_text": "Drag devices between folders to organize them. Double-click a device to open its detail panel.",
"settings_tabs_title": "Settings Categories",
"settings_tabs_text": "Navigate between General, Security, Appearance, and other configuration sections.",
"settings_content_title": "Configuration",
"settings_content_text": "Each section contains specific server and console settings. Changes are saved when you click Save.",
"settings_complete_title": "Settings Overview",
"settings_complete_text": "Check Security settings for 2FA, API keys and user management. Visit Appearance to customize the console look.",
"help": "Help & Tutorials",
"tour_console": "Console Tour",
"tour_desktop": "Desktop Mode Tour",
"tour_devices": "Devices Tour",
"tour_remote": "Remote Session Tour",
"tour_organization": "Organization Setup",
"tour_cdap": "CDAP Overview",
"tour_chat": "Chat Basics",
"tour_settings": "Settings Tour",
"reset_all": "Reset All Tutorials",
"disable_tutorials": "Disable Tutorials",
"enable_tutorials": "Enable Tutorials",
"remote_toolbar_title": "Remote Toolbar",
"remote_toolbar_text": "Access display controls, clipboard sync, special keys, and quality settings from the toolbar. Toggle fullscreen with F11.",
"remote_canvas_title": "Remote Display",
"remote_canvas_text": "This is the remote screen. Click inside to start controlling the remote device. Mouse and keyboard input are forwarded automatically.",
"remote_clipboard_title": "Clipboard Sync",
"remote_clipboard_text": "Copy and paste text between your computer and the remote device. Use Ctrl+C / Ctrl+V as normal while focused on the remote display.",
"remote_complete_title": "Remote Session Ready!",
"remote_complete_text": "Use the toolbar buttons for special keys (Ctrl+Alt+Del, PrintScreen) and monitor switching. Press Escape or click Disconnect to end the session.",
"org_overview_title": "Organizations",
"org_overview_text": "Organizations let you group users, devices, and policies. Each organization has its own admin, operators, and settings.",
"org_create_title": "Create Organization",
"org_create_text": "Click here to create a new organization. Provide a name, slug, and optional description. You will be the owner of the new organization.",
"org_members_title": "Manage Members",
"org_members_text": "Invite users by email, assign roles (admin, operator, user), and manage access. Members can see devices assigned to their organization.",
"org_devices_title": "Assign Devices",
"org_devices_text": "Add devices to the organization. Devices assigned here will inherit the organization's policies and be visible to its members.",
"org_policies_title": "Organization Policies",
"org_policies_text": "Set security policies like password requirements, session timeouts, 2FA enforcement, and device enrollment rules for the organization.",
"org_complete_title": "Organization Setup Complete!",
"org_complete_text": "Invite your team and assign devices to start using organization-scoped management. Policies apply automatically to all members.",
"cdap_devices_title": "CDAP Devices",
"cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.",
"cdap_widgets_title": "Widget Dashboard",
"cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.",
"cdap_commands_title": "Send Commands",
"cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.",
"cdap_terminal_title": "Device Terminal",
"cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.",
"cdap_complete_title": "CDAP Overview Complete!",
"cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.",
"chat_contacts_title": "Contacts & Groups",
"chat_contacts_text": "See your contacts and chat groups. Click any contact to open a conversation. Green dots indicate online users.",
"chat_send_title": "Send Messages",
"chat_send_text": "Type your message and press Enter to send. Messages are end-to-end encrypted when both parties support E2E.",
"chat_file_title": "Share Files",
"chat_file_text": "Click the attachment icon to share files. Files are encrypted and can be up to 50 MB.",
"chat_complete_title": "Chat Ready!",
"chat_complete_text": "Chat with operators and end users in real time. Create groups for team communication. All messages support read receipts."
},
"help_request": {
"title": "Help Requests",
"subtitle": "Manage incoming help requests from desktop clients",
"new_request": "New Help Request",
"device": "Device",
"hostname": "Hostname",
"message": "Message",
"status": "Status",
"pending": "Pending",
"accepted": "Accepted",
"resolved": "Resolved",
"accept": "Accept",
"resolve": "Resolve",
"no_requests": "No help requests",
"notification": "Help request received from",
"stats_total": "Total",
"filter_all": "All"
},
"organizations": {
"title": "Organizations",
"create": "Create Organization",
"edit": "Edit Organization",
"detail": "Organization Details",
"name": "Name",
"slug": "Slug (URL-safe)",
"logo_url": "Logo URL",
"users": "Users",
"devices": "Devices",
"invitations": "Invitations",
"settings": "Settings",
"add_user": "Add User",
"assign_device": "Assign Device",
"create_invitation": "Create Invitation",
"delete_confirm": "Delete this organization? This will remove all associated users, devices, and settings.",
"no_orgs": "No organizations yet",
"no_orgs_hint": "Create your first organization to start managing devices and users.",
"connection_policy": "Connection Policy",
"allow_file_transfer": "Allow File Transfer",
"allow_clipboard": "Allow Clipboard",
"max_session_duration": "Max Session Duration (min)",
"role_owner": "Owner (Org Admin)",
"role_admin": "Administrator",
"role_operator": "Operator",
"role_user": "Member",
"username": "Username",
"password": "Password",
"display_name": "Display Name",
"email": "Email",
"role": "Role",
"last_login": "Last Login",
"actions": "Actions",
"device_id": "Device ID",
"department": "Department",
"building": "Building",
"location": "Location",
"assigned_user": "Assigned User",
"token": "Token",
"expires": "Expires",
"used": "Used",
"no_users": "No users in this organization.",
"no_devices": "No devices assigned to this organization.",
"no_invitations": "No invitations.",
"user_added": "User added",
"user_removed": "User removed",
"user_updated": "User role updated",
"device_assigned": "Device assigned",
"device_unassigned": "Device unassigned",
"invitation_created": "Invitation created",
"settings_saved": "Settings saved",
"org_deleted": "Organization deleted",
"confirm_remove_user": "Remove this user from the organization?",
"confirm_unassign_device": "Unassign this device from the organization?",
"confirm_delete_org": "Delete this organization and all associated data?",
"edit_role": "Edit Role",
"raw_settings": "Raw Settings",
"key": "Key",
"value": "Value",
"save": "Save Settings",
"policy_unattended": "Unattended (instant)",
"policy_attended": "Attended (with confirmation)",
"policy_ask": "Always ask",
"expires_hours": "Expiration (hours)",
"loading_failed": "Failed to load organization data",
"name_slug_required": "Name and slug are required",
"org_created": "Organization created",
"org_updated": "Organization updated",
"create_new_user": "Create New",
"add_existing_user": "Add Existing",
"none_available": "none",
"select_user": "Select user",
"org_role": "Organization Role",
"link_user_hint": "Selected user will be linked to this organization using their server account credentials.",
"no_available_users": "All server users are already linked to this organization.",
"user_linked": "User linked to organization",
"device_groups_tab": "Device Groups",
"device_groups_intro": "Device groups linked to this organization define which machines members can reach in the RustDesk client. Configure members and access on the Devices page.",
"manage_in_devices": "Open Devices → Groups",
"no_org_device_groups": "No device groups are linked to this organization yet.",
"create_org_device_group": "Create device group",
"org_device_group_created": "Device group created",
"org_user_groups_title": "User groups",
"org_user_groups_intro": "User groups linked to this organization can be granted access to the device groups above (Devices → Groups → Allowed user groups).",
"no_org_user_groups": "No user groups linked to this organization.",
"group_name": "Name",
"group_type": "Type",
"group_members": "Devices",
"group_type_manual": "Manual",
"group_type_tag": "Tag",
"group_allowed_user_groups": "Allowed user groups",
"group_devices_suffix": "devices",
"group_name_required": "Group name is required",
"org_team_id": "Organization team ID",
"link_team_id_hint": "The group will be linked to this organization automatically (team ID = organization ID).",
"address_book": "Address Book",
"address_book_import_devices": "Import org devices",
"address_book_save": "Save address book",
"address_book_intro": "Manage contacts shared with members of this organization. Personal address book entries still stay private and override shared entries on conflict.",
"address_book_enabled": "Share this address book with organization members",
"address_book_json": "Address book JSON",
"address_book_json_hint": "RustDesk legacy format, for example: {\"peers\":[{\"id\":\"123456789\",\"alias\":\"Office PC\"}],\"tags\":[\"Office\"]}",
"address_book_invalid_json": "Address book must be valid JSON",
"address_book_peers_array_required": "Address book peers must be an array",
"address_book_tags_array_required": "Address book tags must be an array",
"address_book_saved": "Address book saved",
"address_book_save_failed": "Failed to save address book",
"address_book_imported": "Organization devices imported",
"address_book_import_none": "No new organization devices to import",
"address_book_contacts": "Shared contacts",
"address_book_add_peer": "Add contact",
"address_book_peer_id": "Device ID",
"address_book_alias": "Alias",
"address_book_peer_tags": "Contact tags",
"address_book_peer_tags_placeholder": "office, support",
"address_book_tags_label": "Global tags",
"address_book_tags_placeholder": "Office, Support",
"address_book_tags_hint": "Comma-separated tags available in the RustDesk client address book.",
"address_book_no_peers": "No contacts yet — add a device ID or import organization devices.",
"address_book_show_json": "Advanced JSON",
"address_book_hide_json": "Structured editor"
},
"chat": {
"e2e_enabled": "End-to-end encrypted",
"e2e_establishing": "Establishing secure channel...",
"e2e_established": "Secure channel established",
"e2e_unsupported": "E2E encryption not supported in this browser",
"typing_indicator": "typing...",
"read_receipt": "Read",
"delivered": "Delivered",
"file_share": "File",
"file_too_large": "File too large (max 50MB)",
"file_encrypted": "Encrypted file transfer",
"presence_online": "Online",
"presence_away": "Away",
"presence_busy": "Busy",
"presence_offline": "Offline",
"key_rotation": "Security keys rotated",
"new_message": "New message",
"title": "Chat",
"contacts": "Contacts",
"groups": "Groups",
"no_contacts": "No contacts yet",
"no_groups": "No groups yet",
"no_messages": "No messages yet",
"no_results": "No results found",
"select_conversation": "Select a conversation to start chatting",
"select_conversation_hint": "Select a conversation to view messages",
"type_message": "Type a message...",
"send": "Send",
"attach_file": "Attach file",
"emoji": "Emoji",
"info": "Info",
"search_messages": "Search messages",
"create_group": "Create group",
"group_name": "Group name",
"group_name_placeholder": "Enter group name",
"group_members": "Members",
"cancel": "Cancel",
"create": "Create",
"members": "members",
"today": "Today",
"yesterday": "Yesterday",
"react": "React",
"my_presence": "My status",
"search_placeholder": "Search contacts & messages"
},
"toast": {
"device_connected": "Device connected",
"device_disconnected": "Device disconnected",
"session_started": "Remote session started",
"session_ended": "Remote session ended",
"file_upload_complete": "File upload complete",
"settings_saved": "Settings saved",
"error_generic": "An error occurred",
"connection_lost": "Connection lost",
"reconnecting": "Reconnecting..."
},
"theme": {
"dark": "Dark",
"light": "Light",
"auto": "System",
"custom": "Custom",
"title": "Theme"
},
"ux35": {
"resize_sidebar": "Resize sidebar",
"open_menu": "Open menu",
"theme_mode_hint": "Light and Dark are built-in. Custom activates when you edit colors below.",
"switch_to_ux35": "Switch to UX 3.5 (Beta)",
"switch_to_classic": "Switch to classic UI",
"beta_badge": "BETA",
"beta_tooltip": "Beta console layout — optional; classic UI remains the default."
},
"days": {
"mon": "Mon",
"tue": "Tue",
"wed": "Wed",
"thu": "Thu",
"fri": "Fri",
"sat": "Sat",
"sun": "Sun"
},
"toolkit": {
"title": "Toolkit",
"subtitle": "Admin utilities and diagnostic tools",
"cat_network": "Network",
"cat_crypto": "Crypto",
"cat_encoding": "Encoding",
"cat_system": "System",
"host": "Host",
"port": "Port",
"domain": "Domain",
"run": "Run",
"generate": "Generate",
"encode": "Encode",
"decode": "Decode",
"send": "Send",
"refresh": "Refresh",
"algorithm": "Algorithm",
"input_text": "Input Text",
"enter_text": "Enter text...",
"length": "Length",
"options": "Options",
"source": "Source",
"lines": "Lines",
"log_console": "Console",
"log_go": "Go Server",
"mac_address": "MAC Address",
"broadcast": "Broadcast",
"ping_title": "Ping",
"ping_desc": "Check host reachability and latency",
"tcp_title": "TCP Port Check",
"tcp_desc": "Test TCP port connectivity",
"ssl_title": "SSL Inspector",
"ssl_desc": "Inspect SSL/TLS certificate details",
"http_title": "HTTP Health Check",
"http_desc": "Verify HTTP endpoint status",
"dns_title": "DNS Lookup",
"dns_desc": "Resolve hostname to IP address",
"whois_title": "DNS Records",
"whois_desc": "Query A, AAAA, MX, TXT, NS records",
"speed_title": "Speed Test",
"speed_desc": "Measure download bandwidth",
"run_speed_test": "Run Speed Test",
"wol_title": "Wake-on-LAN",
"wol_desc": "Send magic packet to wake a device",
"wol_sent": "Magic packet sent",
"hash_title": "Hash Generator",
"hash_desc": "Generate cryptographic hashes",
"password_title": "Password Generator",
"password_desc": "Generate a secure random password",
"jwt_title": "JWT Decoder",
"jwt_desc": "Decode and inspect JSON Web Tokens",
"jwt_token": "JWT Token",
"base64_title": "Base64",
"base64_desc": "Encode or decode Base64 data",
"url_title": "URL Encoder",
"url_desc": "Encode or decode URL components",
"processes_title": "Process List",
"processes_desc": "View running system processes",
"disk_title": "Disk Usage",
"disk_desc": "View disk partition usage",
"db_title": "Database Stats",
"db_desc": "View database table statistics",
"docker_title": "Docker Containers",
"docker_desc": "View running Docker containers",
"logs_title": "Log Viewer",
"logs_desc": "View recent log output",
"ip_address": "IP",
"latency": "Latency",
"ttl": "TTL",
"status": "Status",
"resolved": "Resolved",
"subject": "Subject",
"issuer": "Issuer",
"valid_from": "Valid From",
"valid_to": "Valid To",
"days_left": "Days Left",
"days": "days",
"protocol": "Protocol",
"cipher": "Cipher",
"alt_names": "SANs",
"chain": "Chain",
"record_type": "Type",
"record_value": "Value",
"hash_value": "Hash",
"entropy": "Entropy",
"very_strong": "Very Strong",
"strong": "Strong",
"weak": "Weak",
"expiry": "Expiry",
"expired": "Expired",
"valid": "Valid",
"process_name": "Name",
"db_type": "Type",
"db_size": "Size",
"table_name": "Table",
"row_count": "Rows",
"no_data": "No data available",
"no_docker": "No Docker containers found or Docker not available",
"no_logs": "No log lines available"
},
"policies": {
"title": "Organization Policies",
"subtitle": "Manage security, connection, and feature policies for your organizations",
"select_org": "Organization",
"select_org_placeholder": "Select an organization...",
"select_org_first": "Select an organization to view policy audit log.",
"configured": "Configured",
"connection_title": "Connection Policy",
"connection_desc": "Control how remote sessions are established",
"connection_mode": "Connection Mode",
"mode_attended": "Attended (requires user approval)",
"mode_unattended": "Unattended (always allow)",
"mode_ask": "Always Ask",
"max_session": "Max Session Duration (minutes)",
"idle_lock": "Idle Lock Timeout (minutes)",
"wallpaper_policy": "Wallpaper During Session",
"wallpaper_show": "Show",
"wallpaper_hide_session": "Hide during session",
"wallpaper_hide_always": "Always hide",
"features_title": "Feature Policy",
"features_desc": "Enable or disable specific features for devices",
"allow_file_transfer": "Allow File Transfer",
"allow_clipboard": "Allow Clipboard Sync",
"allow_audio": "Allow Audio Streaming",
"allow_recording": "Allow Session Recording",
"security_title": "Security Policy",
"security_desc": "Enforce security requirements for organization devices",
"require_2fa": "Require 2FA for Unattended Access",
"password_min_length": "Minimum Password Length",
"password_require_special": "Require Special Characters",
"password_max_age": "Password Max Age (days, 0=never)",
"allowed_operators": "Allowed Operator Roles (comma-separated)",
"network_title": "Network Policy",
"network_desc": "Control relay servers and direct connections",
"block_direct_p2p": "Block Direct P2P (force relay)",
"block_direct_p2p_hint": "Applies to devices in this organization. Global default is under Settings → Connection strategy.",
"allowed_relays": "Allowed Relay Servers (one per line)",
"ip_allowlist": "IP Allowlist (CIDR, one per line)",
"update_title": "Update Policy",
"update_desc": "Control automatic updates and update channels",
"auto_update": "Enable Auto-Update",
"update_channel": "Update Channel",
"audit_title": "Policy Changes",
"audit_desc": "Recent policy change history",
"no_audit": "No policy changes recorded.",
"save_success": "Policy saved successfully",
"save_failed": "Failed to save policy",
"load_failed": "Failed to load policies"
},
"attestation": {
"title": "Device Attestation",
"subtitle": "Monitor device identity verification and hardware fingerprints",
"verified": "Verified",
"pending": "Pending",
"failed": "Failed",
"device_list": "Device Attestation Records",
"device_list_desc": "Hardware fingerprints and identity verification status",
"col_device": "Device ID",
"col_hostname": "Hostname",
"col_fingerprint": "Fingerprint",
"col_status": "Status",
"col_last_check": "Last Check",
"col_actions": "Actions",
"no_records": "No attestation records found.",
"verify_success": "Device marked as verified",
"verify_failed": "Failed to verify device",
"revoke_success": "Device attestation revoked",
"revoke_failed": "Failed to revoke attestation"
},
"fleet": {
"title": "Fleet Management",
"tab_resources": "Resources",
"tab_tasks": "Tasks",
"tab_builder": "Workflow Builder",
"tab_compliance": "Compliance",
"res_title": "Resource Mapping",
"res_all_types": "All Types",
"res_type_printer": "Printer",
"res_type_network_drive": "Network Drive",
"res_type_dns": "DNS Server",
"res_type_proxy": "Proxy",
"res_type_vpn": "VPN",
"res_add": "Add Resource",
"res_name": "Resource Name",
"res_type": "Type",
"res_address": "Address / Path",
"res_target": "Target",
"res_scope": "Scope",
"res_scope_org": "Organization",
"res_scope_group": "Group",
"res_scope_device": "Device",
"res_scope_value": "Scope Value",
"res_status": "Status",
"res_active": "Active",
"res_inactive": "Inactive",
"res_no_data": "No resources found. Click 'Add Resource' to create one.",
"res_confirm_delete": "Are you sure you want to delete this resource?",
"task_title": "Task Scheduler",
"task_all_status": "All Status",
"task_status_pending": "Pending",
"task_status_running": "Running",
"task_status_success": "Success",
"task_status_failed": "Failed",
"task_search": "Search tasks…",
"task_create": "Create Task",
"task_name": "Task Name",
"task_type": "Type",
"task_type_script": "Script",
"task_type_install": "Install",
"task_type_update": "Update",
"task_type_restart": "Restart",
"task_type_deploy": "Deploy",
"task_type_scan": "Scan",
"task_targets": "Targets",
"task_targets_help": "Device IDs or group names, comma-separated",
"task_schedule": "Schedule",
"task_schedule_once": "Once",
"task_schedule_cron": "Cron",
"task_schedule_interval": "Interval",
"task_schedule_value": "Schedule Value",
"task_script": "Script / Command",
"task_retries": "Retries",
"task_timeout": "Timeout (s)",
"task_last_run": "Last Run",
"task_no_data": "No tasks found. Click 'Create Task' to get started.",
"task_confirm_delete": "Are you sure you want to delete this task?",
"task_output": "Task Output",
"task_retry": "Retry",
"builder_title": "Visual Workflow Builder",
"builder_select_workflow": "Select workflow…",
"builder_new": "New",
"builder_save": "Save",
"builder_export": "Export",
"builder_execute": "Execute",
"builder_dry_run": "Dry Run",
"builder_triggers": "Triggers",
"builder_conditions": "Conditions",
"builder_actions": "Actions",
"builder_results": "Results",
"builder_transforms": "Transforms",
"builder_properties": "Properties",
"builder_no_selection": "Select a node to edit its properties.",
"builder_node_trigger_manual": "Manual Trigger",
"builder_node_trigger_schedule": "Schedule",
"builder_node_trigger_event": "Event Trigger",
"builder_node_cond_os": "OS Check",
"builder_node_cond_threshold": "Threshold",
"builder_node_cond_time_window": "Time Window",
"builder_node_action_script": "Run Script",
"builder_node_action_install": "Install SW",
"builder_node_action_restart": "Restart Svc",
"builder_node_action_file_deploy": "Deploy File",
"builder_node_action_message": "Send Message",
"builder_node_result_log": "Log Output",
"builder_node_result_alert": "Send Alert",
"builder_node_result_chain": "Chain Workflow",
"builder_node_transform_parse": "Parse JSON",
"builder_node_transform_filter": "Filter",
"builder_node_transform_delay": "Delay",
"workflow_name": "Workflow name:",
"comp_title": "Software Compliance",
"comp_compliant": "Compliant",
"comp_warning": "Warning",
"comp_critical": "Critical",
"comp_score": "Avg. Score",
"comp_device": "Device",
"comp_hostname": "Hostname",
"comp_os": "OS",
"comp_score_col": "Score",
"comp_issues": "Issues",
"comp_last_scan": "Last Scan",
"comp_scan": "Scan",
"comp_scan_all": "Scan All",
"comp_remediate": "Remediate",
"comp_remediate_confirm": "Run auto-remediation on this device?",
"comp_no_data": "No compliance data available. Run a scan to get started.",
"save": "Save",
"cancel": "Cancel",
"close": "Close",
"edit": "Edit",
"delete": "Delete",
"actions": "Actions",
"all_orgs": "All Organizations",
"select_org_placeholder": "Select organization…",
"all_types": "All Types",
"type_printer": "Printer",
"type_network_drive": "Network Drive",
"type_dns": "DNS Server",
"type_vpn": "VPN",
"type_proxy": "Proxy",
"add_resource": "Add Resource",
"edit_resource": "Edit Resource",
"col_name": "Name",
"col_type": "Type",
"col_target": "Target",
"col_scope": "Scope",
"col_status": "Status",
"col_actions": "Actions",
"no_resources": "No resources found. Click 'Add Resource' to create one.",
"active": "Active",
"inactive": "Inactive",
"address": "Address / Path",
"scope_org": "Organization",
"scope_group": "Group",
"scope_device": "Device",
"scope_value": "Scope Value",
"scope_value_hint": "Organization name, group name, or device ID",
"confirm_delete": "Are you sure you want to delete this item?",
"all_statuses": "All Statuses",
"status_pending": "Pending",
"status_running": "Running",
"status_success": "Success",
"status_failed": "Failed",
"search_tasks": "Search tasks…",
"create_task": "Create Task",
"edit_task": "Edit Task",
"col_task_name": "Task Name",
"col_task_type": "Type",
"col_schedule": "Schedule",
"col_last_run": "Last Run",
"no_tasks": "No tasks found. Click 'Create Task' to get started.",
"task_type_file_deploy": "File Deploy",
"task_type_registry": "Registry",
"target_devices": "Target Devices",
"target_hint": "Device IDs or group names, comma-separated",
"schedule_immediate": "Immediate",
"schedule_once": "Once",
"schedule_cron": "Cron",
"cron_placeholder": "*/5 * * * *",
"script_content": "Script / Command",
"retry_count": "Retries",
"timeout_sec": "Timeout (s)",
"loading": "Loading",
"no_output": "No output available",
"error_loading": "Error loading data",
"select_workflow": "Select workflow…",
"new_workflow": "New",
"export": "Export",
"execute": "Execute",
"dry_run": "Dry Run",
"node_triggers": "Triggers",
"node_manual": "Manual Trigger",
"node_schedule": "Schedule",
"node_event": "Event Trigger",
"node_conditions": "Conditions",
"node_os_check": "OS Check",
"node_threshold": "Threshold",
"node_time_window": "Time Window",
"node_actions": "Actions",
"node_run_script": "Run Script",
"node_install": "Install SW",
"node_restart": "Restart Svc",
"node_file_deploy": "Deploy File",
"node_send_message": "Send Message",
"node_results": "Results",
"node_log_output": "Log Output",
"node_send_alert": "Send Alert",
"node_chain": "Chain Workflow",
"node_transforms": "Transforms",
"node_parse_json": "Parse JSON",
"node_filter": "Filter",
"node_delay": "Delay",
"node_properties": "Properties",
"all_organizations": "All Organizations",
"scan_all": "Scan All",
"compliant": "Compliant",
"non_compliant": "Warning",
"critical_issues": "Critical",
"avg_score": "Avg. Score",
"col_device": "Device",
"col_hostname": "Hostname",
"col_os": "OS",
"col_score": "Score",
"col_issues": "Issues",
"col_last_scan": "Last Scan",
"no_compliance_data": "No compliance data available. Run a scan to get started.",
"confirm_remediate": "Run auto-remediation on this device?"
},
"scaling": {
"title": "Scaling & Relay Management",
"tab_overview": "Overview",
"tab_relays": "Relay Nodes",
"tab_rules": "Assignment Rules",
"tab_capacity": "Capacity Planning",
"arch_title": "Network Architecture",
"arch_loading": "Loading architecture diagram...",
"stat_relay_nodes": "Relay Nodes",
"stat_total_devices": "Total Devices",
"stat_active_sessions": "Active Sessions",
"stat_bandwidth": "Total Bandwidth",
"relay_health": "Relay Health",
"no_relays": "No relay nodes configured. Add your first relay node to distribute load.",
"relay_search": "Search relays...",
"relay_add": "Add Relay Node",
"relay_edit": "Edit Relay Node",
"col_name": "Name",
"col_address": "Address",
"col_location": "Location",
"col_devices": "Devices",
"col_sessions": "Sessions",
"col_bandwidth": "Bandwidth",
"col_status": "Status",
"col_actions": "Actions",
"col_priority": "Priority",
"col_rule_name": "Rule Name",
"col_match": "Match",
"col_target_relay": "Target Relay",
"col_fallback": "Fallback",
"status_online": "Online",
"status_degraded": "Degraded",
"status_offline": "Offline",
"status_enabled": "Enabled",
"status_disabled": "Disabled",
"confirm_delete_relay": "Are you sure you want to delete this relay node?",
"confirm_delete_rule": "Are you sure you want to delete this assignment rule?",
"relays_info_banner": "This list is informational. The relay servers actually used by clients are configured via the RELAY_SERVERS environment variable on the BetterDesk server.",
"relay_name_address_required": "Name and address are required.",
"relay_save_failed": "Failed to save relay node.",
"relay_delete_failed": "Failed to delete relay node.",
"relay_saved": "Relay node saved.",
"relay_deleted": "Relay node deleted.",
"rule_name_value_required": "Rule name and match value are required.",
"rule_save_failed": "Failed to save rule.",
"rule_delete_failed": "Failed to delete rule.",
"rule_saved": "Rule saved.",
"rule_deleted": "Rule deleted.",
"rules_hint": "Assignment rules determine which relay server handles specific device groups. Rules are evaluated by priority (lowest first).",
"no_rules": "No assignment rules.",
"rule_add": "Add Rule",
"rule_edit": "Edit Rule",
"rule_match_type": "Match Type",
"match_subnet": "Subnet",
"match_group": "Device Group",
"match_tag": "Device Tag",
"match_location": "Location",
"rule_match_value": "Match Value",
"fallback_master": "Master Server",
"fallback_nearest": "Nearest Relay",
"relay_max_sessions": "Max Sessions",
"relay_max_bandwidth": "Max Bandwidth (Mbps)",
"cap_tiers": "Capacity Tiers",
"cap_loading": "Loading capacity data...",
"cap_recommendations": "Recommendations",
"cap_no_recs": "No recommendations available.",
"cap_planning": "Infrastructure Planning",
"cap_config": "Configuration",
"cap_max_devices": "Max Devices",
"cap_max_sessions": "Max Sessions",
"cap_current": "Current",
"cap_utilization": "Utilization",
"cap_tier_devices": "Device Capacity",
"cap_tier_sessions": "Session Capacity",
"cap_tier_bandwidth": "Bandwidth Capacity",
"cap_single_sqlite": "Single Server (SQLite)",
"cap_single_pg": "Single Server (PostgreSQL)",
"cap_master_3": "Master + 3 Relays",
"cap_master_10": "Master + 10 Relays",
"rec_no_relays": "No relay nodes configured. Consider adding relay nodes for better performance and redundancy.",
"rec_devices_high": "Device utilization is high. Consider adding more relay nodes to distribute load.",
"rec_sessions_high": "Session capacity is nearing its limit. Consider upgrading relay infrastructure.",
"rec_cpu_high": "Some relay nodes report high CPU usage. Consider load balancing or capacity upgrades.",
"rec_all_good": "All systems operating within normal parameters. No action required.",
"save": "Save",
"cancel": "Cancel",
"edit": "Edit",
"delete": "Delete",
"close": "Close"
},
"cross_platform": {
"title": "Cross-Platform Compatibility",
"tab_matrix": "Compatibility Matrix",
"tab_distribution": "Distribution",
"tab_protocols": "Protocols",
"tab_limitations": "Limitations",
"matrix_hint": "Feature support matrix across all supported platforms. Green = full support, yellow = partial, gray = not available, blue = planned.",
"col_feature": "Feature",
"legend_full": "Full support",
"legend_partial": "Partial support",
"legend_none": "Not available",
"legend_planned": "Planned",
"platform_breakdown": "Platform Breakdown",
"arch_breakdown": "Architecture Breakdown",
"version_breakdown": "Version Breakdown",
"summary": "Summary",
"total_devices": "Total Devices",
"unique_platforms": "Platforms",
"unique_archs": "Architectures",
"unique_versions": "Client Versions",
"no_devices": "No devices registered yet.",
"protocols_hint": "Protocol capability negotiation ensures each client receives only the features it supports. The server adapts behavior based on reported capabilities.",
"capability_negotiation": "Capability Negotiation",
"codec_support": "Codec Support (Online Devices)",
"feature_support": "Feature Support (Online Devices)",
"no_codec_data": "No codec data available from online devices.",
"no_feature_data": "No feature data available from online devices.",
"protobuf_schema": "ClientCapabilities Protobuf Schema",
"diagram_client": "Client",
"diagram_server": "BetterDesk Server",
"diagram_peer": "Remote Peer",
"limitations_hint": "Each platform has specific limitations that affect available features. Review these constraints when planning deployments.",
"feat_desktop_client": "Desktop Client",
"feat_background_agent": "Background Agent",
"feat_remote_target": "Remote Target",
"feat_screen_capture": "Screen Capture",
"feat_input_injection": "Input Injection",
"feat_file_transfer": "File Transfer",
"feat_clipboard_sync": "Clipboard Sync",
"feat_audio_streaming": "Audio Streaming",
"feat_chat": "Chat",
"feat_h264": "H.264 Codec",
"feat_vp9": "VP9 Codec",
"feat_av1": "AV1 Codec",
"feat_cdap_agent": "CDAP Agent",
"feat_session_recording": "Session Recording",
"feat_multi_monitor": "Multi-Monitor",
"feat_unattended_access": "Unattended Access",
"platform_windows": "Windows",
"platform_linux": "Linux",
"platform_macos": "macOS",
"platform_android": "Android",
"platform_ios": "iOS",
"platform_web": "Web Browser",
"platform_chromeos": "ChromeOS",
"status_production": "Production",
"status_testing": "Testing",
"status_planned": "Planned",
"status_limited": "Limited",
"status_experimental": "Experimental",
"limit_win_uac": "UAC elevation required for service installation and input injection on secure desktops.",
"limit_win_service": "Runs as NSSM service under per-service virtual accounts (NT SERVICE\\<service>); Administrator required only for installation.",
"limit_win_firewall": "Windows Firewall rules must allow ports 21115-21119 for relay connections.",
"limit_win_virtual_account": "Services run under isolated virtual accounts instead of LocalSystem; custom log paths may need ACL adjustment.",
"limit_linux_wayland": "Wayland compositors restrict programmatic screen capture; PipeWire portal API required.",
"limit_linux_pipewire": "Audio capture requires PipeWire; PulseAudio fallback available but limited.",
"limit_linux_arm": "ARM64 builds available; some codecs may use software decoding (slower).",
"limit_linux_unprivileged": "Services run as dedicated unprivileged 'betterdesk' account with systemd hardening (NoNewPrivileges, ProtectSystem=strict).",
"limit_mac_screen": "Screen Recording permission required in System Preferences > Privacy & Security.",
"limit_mac_signing": "Agent must be signed with Apple Developer ID for distribution.",
"limit_mac_notarize": "Notarization required for macOS Gatekeeper (non-App Store distribution).",
"limit_android_projection": "MediaProjection API requires user consent for each screen capture session.",
"limit_android_accessibility": "Input injection requires AccessibilityService; restricted in Android 14+.",
"limit_android_battery": "Background service limited by Doze mode; may require battery optimization exemption.",
"limit_ios_capture": "Apple prohibits background screen capture; viewer-only mode supported.",
"limit_ios_input": "No input injection permitted; remote viewing and chat only.",
"limit_ios_appstore": "Distribution via App Store only; TestFlight for beta testing.",
"limit_web_https": "WebCodecs API and WebRTC require HTTPS; HTTP falls back to JMuxer (limited codecs).",
"limit_web_codec": "Codec support depends on browser; H.264 widely supported, VP9/AV1 varies.",
"limit_web_performance": "Performance limited by browser sandbox; no direct hardware acceleration.",
"limit_chrome_crostini": "Full agent support only inside Crostini Linux container.",
"limit_chrome_pwa": "PWA mode provides web-only features; no native agent capabilities.",
"limit_chrome_input": "Input injection not supported outside Crostini container."
},
"security_audit": {
"title": "Security Audit",
"tab_overview": "Overview",
"tab_events": "Audit Events",
"tab_hardening": "Hardening",
"tab_vulnerabilities": "Vulnerabilities",
"security_score": "Security Score",
"failed_logins": "Failed Logins (24h)",
"active_bans": "Active Bans",
"api_keys": "API Keys",
"old_keys": "Old Keys (>90d)",
"security_checks": "Security Checks",
"tls_status": "TLS Status",
"pass": "Pass",
"warning": "Warning",
"fail": "Fail",
"tls_signal": "Signal TLS",
"tls_relay": "Relay TLS",
"tls_api": "API TLS",
"tls_wss": "WebSocket Secure",
"enabled": "Enabled",
"disabled": "Disabled",
"all_events": "All Events",
"event_login_failed": "Login Failed",
"event_login_success": "Login Success",
"event_peer_banned": "Peer Banned",
"event_ip_banned": "IP Banned",
"event_config_changed": "Config Changed",
"event_key_created": "Key Created",
"refresh": "Refresh",
"col_time": "Time",
"col_action": "Action",
"col_actor": "Actor",
"col_target": "Target",
"col_ip": "IP Address",
"col_details": "Details",
"no_events": "No audit events found.",
"hardening_hint": "Security hardening priorities for your BetterDesk deployment. Items are ordered by severity.",
"no_hardening": "No hardening items available.",
"vuln_hint": "Dependency vulnerability scan results. Run npm audit regularly to keep dependencies secure.",
"no_vulns": "No vulnerabilities found. Your dependencies are secure."
},
"languages": {
"title": "Language Management",
"total_languages": "Total Languages",
"fully_translated": "Fully Translated",
"needs_review": "Needs Review",
"reference_keys": "Reference Keys",
"no_languages": "No language files found.",
"badge_reference": "Reference",
"badge_review": "Needs Review",
"badge_complete": "Complete",
"coverage": "coverage",
"keys": "keys",
"missing": "missing",
"extra": "extra",
"view_missing": "View Missing",
"fix_missing": "Manual translation required",
"missing_keys_for": "Missing keys for",
"missing_keys_count": "keys missing (EN/PL reference values shown)",
"and_more": "and {n} more...",
"all_keys_present": "All keys are present!",
"confirm_fix": "Automatic language fixing is disabled for {code}.",
"fixed_title": "Manual translation required",
"fixed_msg": "Missing keys in {code} must be translated manually.",
"no_fix_needed": "No missing keys to fix."
},
"resource_control": {
"title": "Resource Control",
"tab_overview": "Overview",
"tab_usb": "USB Control",
"tab_optical": "Optical Drives",
"tab_monitors": "Monitors",
"tab_disks": "Disk Access",
"tab_quotas": "Resource Quotas",
"compliance_by_category": "Compliance by Category",
"device_compliance": "Device Compliance",
"search_devices": "Search devices...",
"col_device": "Device",
"col_platform": "Platform",
"col_status": "Status",
"col_usb": "USB",
"col_optical": "Optical",
"col_monitors": "Monitors",
"col_disks": "Disks",
"col_quotas": "Quotas",
"col_actions": "Actions",
"stat_total_devices": "Total Devices",
"stat_compliant": "Compliant",
"stat_partial": "Partial",
"stat_noncompliant": "Non-Compliant",
"stat_compliance_rate": "Compliance Rate",
"badge_na": "N/A",
"badge_compliant": "OK",
"badge_partial": "Partial",
"badge_noncompliant": "Fail",
"btn_configure": "Configure",
"no_devices": "No devices found",
"usb_title": "USB Port Control",
"usb_hint": "Control USB storage device access for the selected device or organization-wide default policy.",
"usb_storage_policy": "USB Storage Policy",
"usb_whitelist": "Whitelisted Devices (one per line)",
"usb_whitelist_hint": "VID:PID (e.g. 0781:5583)",
"usb_audit_log": "Log USB device connections",
"optical_title": "Optical Drive Control",
"optical_hint": "Control CD/DVD/Blu-ray drive access for the selected device.",
"optical_policy": "Optical Drive Policy",
"optical_audit_log": "Log optical drive access",
"monitors_title": "Monitor Management",
"monitors_hint": "Configure monitor settings including maximum count, resolution enforcement, brightness and power schedules.",
"monitors_max_count": "Maximum Monitors (0 = unlimited)",
"monitors_max_hint": "0 means no limit",
"monitors_resolution": "Max Resolution",
"monitors_brightness": "Brightness Limit",
"monitors_power_schedule": "Power Schedule",
"monitors_power_hint": "e.g. off:22:00-06:00",
"disks_title": "Disk Access Control",
"disks_hint": "Configure disk access policies including read-only mode, encryption enforcement, and partition visibility.",
"disks_readonly": "Force read-only mode",
"disks_encryption": "Require encryption (BitLocker/LUKS)",
"disks_smart": "Enable S.M.A.R.T. monitoring",
"disks_hidden": "Hidden Partitions",
"disks_hidden_hint": "Comma-separated drive letters or mount points",
"quotas_title": "Resource Quotas",
"quotas_hint": "Set per-user CPU, RAM, bandwidth, and disk quotas for the selected device.",
"quotas_cpu": "CPU Limit",
"quotas_ram": "RAM Limit",
"quotas_bandwidth": "Bandwidth Limit (Mbps)",
"quotas_bandwidth_hint": "0 = unlimited",
"quotas_disk_quota": "Disk Quota (GB)",
"quotas_disk_hint": "0 = unlimited",
"quotas_process_whitelist": "Process Whitelist (one per line)",
"quotas_process_hint": "e.g. chrome.exe, code.exe",
"policy_allowed": "Allowed",
"policy_blocked": "Blocked",
"policy_whitelist": "Whitelist Only",
"policy_any": "Any"
},
"sdk_studio": {
"title": "SDK Studio",
"subtitle": "Visual flow editor for CDAP bridges",
"new_flow": "New Flow",
"open_flow": "Open Flow",
"save_flow": "Save Flow",
"import_flow": "Import Flow",
"run_flow": "Run",
"debug": "Debug",
"deploy": "Deploy",
"undo": "Undo",
"redo": "Redo",
"untitled": "Untitled Flow",
"code_mode": "Code Mode",
"toggle_grid": "Toggle Grid",
"zoom_in": "Zoom In",
"zoom_out": "Zoom Out",
"zoom_fit": "Fit to Screen",
"palette": "Node Palette",
"search_nodes": "Search nodes...",
"cat_sources": "Sources",
"cat_processing": "Processing",
"cat_outputs": "Outputs",
"empty_title": "Start Building",
"empty_desc": "Drag nodes from the palette to start building a flow",
"browse_templates": "Browse Templates",
"inspector": "Inspector",
"select_node": "Select a node to inspect its properties",
"console": "Console",
"clear_console": "Clear",
"console_ready": "Studio ready",
"label": "Label",
"configuration": "Configuration",
"connections": "Connections",
"inputs": "Inputs",
"outputs": "Outputs",
"delete_node": "Delete Node",
"nodes": "Nodes",
"wires": "Wires",
"status_ready": "Ready",
"status_deployed": "Deployed",
"flow_name": "Flow Name",
"flow_desc": "Description",
"loading": "Loading...",
"no_flows": "No saved flows yet",
"confirm_delete": "Are you sure you want to delete this flow?",
"templates": "Templates",
"node_modbus_tcp": "Modbus TCP",
"node_modbus_rtu": "Modbus RTU",
"node_snmp_poll": "SNMP Poll",
"node_rest_poll": "REST Poll",
"node_mqtt_subscribe": "MQTT Subscribe",
"node_webhook": "Webhook",
"node_device_telemetry": "Device Telemetry",
"node_database_query": "Database Query",
"node_file_watch": "File Watch",
"node_filter": "Filter",
"node_transform": "Transform",
"node_aggregate": "Aggregate",
"node_delay": "Delay",
"node_debounce": "Debounce",
"node_switch": "Switch",
"node_merge": "Merge",
"node_script": "Script",
"node_widget_update": "Widget Update",
"node_alert": "Alert",
"node_command": "Command",
"node_log": "Log",
"node_rest_call": "REST Call",
"node_mqtt_publish": "MQTT Publish",
"node_database_write": "Database Write",
"node_email": "Email",
"node_modbus_write": "Modbus Write"
},
"updates": {
"tab_title": "Updates",
"title": "Software Updates",
"desc": "Check for new versions and update the BetterDesk console and Go server from GitHub",
"current_version": "Installed version",
"latest_version": "Latest commit",
"status": "Status",
"check_now": "Check for updates",
"checking": "Checking…",
"up_to_date": "Up to date",
"update_available": "Update available",
"changelog": "Recent Commits",
"no_changelog": "No release notes available",
"files_changed": "Files changed",
"files": "files",
"changes_unavailable": "Could not load file change list. You can still install the update.",
"create_backup": "Create backup before updating",
"install": "Install",
"install_confirm": "Are you sure you want to install this update? All supported changed components will be updated automatically and the console will restart after the update.",
"installing": "Installing update…",
"creating_backup": "Creating backup…",
"downloading": "Downloading files…",
"install_success": "Update installed successfully. Console is restarting…",
"install_failed": "Update installation failed",
"restarting": "Waiting for console to restart…",
"restart_complete": "Console restarted successfully",
"restart_timeout": "The update was applied, but the browser could not confirm the restart automatically. Reload the console to verify the new version.",
"no_version": "No update version selected. Check for updates first.",
"backups_title": "Update Backups",
"backups_desc": "Pre-update backups created automatically before each update",
"no_backups": "No update backups found",
"restore": "Restore",
"restore_confirm": "Are you sure you want to restore from this backup? Changed files will be overwritten.",
"restore_success": "Backup restored successfully. Console is restarting…",
"delete": "Delete",
"delete_confirm": "Permanently delete backup {name}? This cannot be undone.",
"delete_success": "Backup deleted",
"delete_failed": "Failed to delete backup",
"retention_label": "Keep N most recent backups",
"retention_hint": "Older backups are deleted automatically after each update. Use 0 to keep all backups.",
"retention_saved": "Retention setting saved",
"retention_invalid": "Retention must be an integer between 0 and 1000",
"retention_required_for_prune": "Set a retention value greater than 0 first",
"prune_now": "Apply now",
"prune_confirm": "Keep only the {n} most recent backups and delete the rest?",
"prune_done": "Pruned {n} backup(s)",
"total_size": "Total size",
"backups_count": "backup(s)",
"baseline_set": "Baseline set",
"commits_behind": "commits behind",
"total_files": "Total files",
"applied": "Applied",
"failed": "Failed",
"skipped": "Skipped",
"removed": "Removed",
"auto": "Auto",
"manual": "Manual",
"component_console": "Web Console",
"component_server": "Go Server",
"component_agent": "Agent",
"component_scripts": "Scripts & Docker",
"component_other": "Other",
"server_rebuild_warning": "Go Server source changed — the server binary will be updated automatically.",
"include_server": "Go Server will be updated automatically",
"checking_go": "Checking Go…",
"go_not_found": "Go not installed",
"go_check_failed": "Could not check Go availability",
"server_building": "Compiling Go server… This may take a few minutes.",
"server_built": "Server binary compiled",
"server_build_failed": "Server compilation failed",
"server_stale_title": "Server binary out of date",
"server_stale_desc": "The Go server source was updated but the running binary was not rebuilt. Rebuild it now to apply security and library updates.",
"rebuild_server": "Rebuild server binary",
"rebuilding_server": "Rebuilding…",
"rebuild_server_success": "Server binary rebuilt and restarted",
"rebuild_server_failed": "Server binary rebuild failed",
"docker_title": "Docker image deployment",
"docker_desc": "This console runs from a pre-built container image (official all-in-one or legacy split). Updates are applied on the host by pulling newer container image(s) from GHCR, not through in-app install or Go rebuild.",
"docker_install_note": "In-app install is disabled in Docker. Run the commands above on the host, then refresh this page.",
"docker_update_available": "New container image(s) available",
"docker_sha_unknown": "Up to date (image commit unknown)",
"docker_images": "Images",
"server_deployed": "Server binary deployed",
"server_deploy_failed": "Server deploy failed",
"server_build_note": "Server compilation may take 1-5 minutes. The update service will run it automatically when needed.",
"server_source_downloading": "Downloading server source…",
"strategy_label": "Update method",
"strategy_download": "Download pre-built binary",
"strategy_compile": "Compile from source",
"both_available": "Download & Compile",
"download_available": "Download available",
"no_method": "No update method",
"no_release": "No release",
"available": "Available",
"server_downloading": "Downloading server binary…",
"server_downloaded": "Server binary downloaded",
"server_download_failed": "Server binary download failed",
"server_download_note": "A pre-built binary will be downloaded from GitHub Releases. This usually takes less than a minute.",
"install_go_hint": "Install Go from https://go.dev/dl/ to enable compilation, or publish a release with pre-built binaries",
"strategy_install_go": "Auto-install Go and compile",
"strategy_install_go_hint": "Downloads or refreshes the official Go toolchain (~120 MB) in the console data directory, then compiles the server when needed.",
"auto_strategy": "Auto",
"auto_strategy_hint": "The console will pick the best available method and download or update required tools automatically.",
"auto_available": "Auto-rebuild ready",
"toolchain_ready": "Toolchain installed",
"toolchain_will_install": "Go toolchain will be installed or updated automatically",
"toolchain_downloading": "Downloading Go toolchain…",
"toolchain_failed": "Go toolchain install failed",
"modal_title": "Installing update",
"modal_done_title": "Update complete",
"modal_close": "Close",
"modal_reload_now": "Reload console",
"log_title": "Update log",
"log_expand": "Expand log",
"log_collapse": "Collapse log",
"log_copy": "Copy log",
"progress_step": "Step {current} of {total}",
"reload_countdown": "Auto-reload in {seconds}s",
"retry_update": "Retry update",
"retry_confirm": "Retry installing this update?",
"phase_confirm": "Confirmation",
"phase_backup": "Backup",
"phase_console": "Console files",
"phase_server": "Go server",
"phase_restart": "Restart",
"phase_done": "Done",
"preparing": "Preparing…",
"backup_skipped": "Backup skipped (per user choice)",
"server_skipped": "Go server skipped",
"server_not_selected": "No Go server changes",
"server_processing": "Processing Go server update…",
"no_restart_needed": "No restart required",
"complete": "Update applied",
"complete_summary": "The update has been applied successfully.",
"complete_with_errors": "The update finished, but some steps failed. See details below.",
"modal_done_with_errors_title": "Update finished with errors",
"console_will_restart": "Console process will restart now…",
"restart_complete_msg": "The console finished restarting. Click reload to load the new version. The page will reload automatically in 8 seconds.",
"refresh_recommended": "Static assets changed — reload the page to see the new UI.",
"confirm_title": "Apply update",
"confirm_with_backup": "A pre-update backup will be created automatically.",
"confirm_no_backup": "No backup will be created (proceed at your own risk).",
"channel_title": "Update channel",
"channel_desc": "Choose where the panel checks for updates. Production servers should use Stable.",
"channel_stable": "Stable (main)",
"channel_development": "Development (dev)",
"channel_pick_label": "Switch to",
"channel_apply_hint": "The change is saved immediately after you confirm. Then click Check for updates.",
"channel_branch_label": "GitHub branch",
"channel_save": "Switch channel",
"channel_saved": "Update channel switched. Click Check for updates to refresh.",
"channel_save_failed": "Failed to save update channel",
"channel_docker_blocked": "Docker image installs switch channel by image tag, not this setting. Set BETTERDESK_IMAGE_TAG=latest (stable) or BETTERDESK_IMAGE_TAG=dev (development), then run docker compose pull && docker compose up -d.",
"channel_docker_note": "Update channel in the panel only applies to native installs. For GHCR images, change BETTERDESK_IMAGE_TAG and recreate containers.",
"channel_switch_warning": "Switching the update channel changes which GitHub branch is used for version checks and installs. Your tracked commit SHA is kept — the next check may show a large diff. Continue?",
"channel_confirm_switch": "Switch update source from {from} to {to}? Your installed commit baseline stays the same until you run Check for updates.",
"more_options": "More options",
"option_advanced": "Advanced options",
"option_advanced_desc": "Backup retention, Docker deployment, server rebuild, and update strategy"
},
"accessibility": {
"title": "Accessibility",
"subtitle": "Adjust the console to your vision, motion and reading needs.",
"close": "Close accessibility menu",
"profiles": "Quick profiles",
"profile_low_vision": "Low vision",
"profile_low_vision_hint": "Larger text, strong contrast and focus.",
"profile_dyslexia": "Reading comfort",
"profile_dyslexia_hint": "Readable font and wider spacing.",
"profile_motion_safe": "Motion safe",
"profile_motion_safe_hint": "Reduces transitions and pauses animation.",
"profile_color_assist": "Color support",
"profile_color_assist_hint": "Color filter, labels and highlighted links.",
"reading": "Reading",
"font_size": "Font size",
"line_height": "Line height",
"letter_spacing": "Letter spacing",
"word_spacing": "Word spacing",
"readable_font": "Readable font",
"readable_font_hint": "Uses broad, familiar letter shapes.",
"dyslexia_spacing": "Dyslexia spacing",
"dyslexia_spacing_hint": "Adds extra spacing for long text.",
"visual": "Visual",
"contrast": "Contrast",
"contrast_normal": "Normal",
"contrast_high_dark": "High contrast dark",
"contrast_high_light": "High contrast light",
"contrast_yellow_black": "Yellow on black",
"color_filter": "Color vision filter",
"filter_none": "None",
"filter_protanopia": "Protanopia",
"filter_deuteranopia": "Deuteranopia",
"filter_tritanopia": "Tritanopia",
"filter_achromatopsia": "Achromatopsia",
"saturation": "Color saturation",
"underline_links": "Underline links",
"underline_links_hint": "Makes links visible without relying on color.",
"highlight_links": "Highlight actions",
"highlight_links_hint": "Outlines links and buttons.",
"highlight_headings": "Highlight headings",
"highlight_headings_hint": "Marks section titles with a color bar.",
"hide_media": "Dim media",
"hide_media_hint": "Dims images, videos and canvases.",
"interaction": "Interaction",
"strong_focus": "Strong focus",
"strong_focus_hint": "Shows a large keyboard focus ring.",
"large_cursor": "Large cursor",
"large_cursor_hint": "Uses a larger high-contrast pointer.",
"reduce_motion": "Reduce motion",
"reduce_motion_hint": "Shortens transitions and smooth scrolling.",
"pause_animations": "Pause animations",
"pause_animations_hint": "Stops looping visual motion.",
"reading_guide": "Reading guide",
"reading_guide_hint": "Follows the pointer with a bright line.",
"reading_mask": "Reading mask",
"reading_mask_hint": "Dims content above and below the pointer.",
"preview": "Preview",
"preview_title": "Operator workspace preview",
"preview_text": "Check whether text, links, controls and status labels are comfortable to read before closing this menu.",
"preview_link": "Device details link",
"preview_status": "Online",
"preview_button": "Primary action",
"preview_secondary": "Secondary",
"reset": "Reset",
"done": "Done"
},
"server_mgmt": {
"title": "Server Management",
"subtitle": "Cockpit-like control plane for the BetterDesk console host (BETA).",
"beta_tooltip": "Beta feature — under active development.",
"notice_title": "Beta feature",
"notice_body": "These tools run on the host where the BetterDesk console process lives. All operations are audited. Feature scope will expand in future releases.",
"tab_overview": "Overview",
"tab_terminal": "Terminal",
"tab_files": "Files",
"tab_services": "Services",
"cpu": "CPU",
"memory": "Memory",
"load": "Load average",
"disks": "Disks",
"history": "History (last 60 samples)",
"host_info": "Host info",
"cores": "cores",
"uptime": "Uptime",
"no_disks": "No disk data available",
"info_hostname": "Hostname",
"info_platform": "Platform",
"info_kernel": "Kernel",
"info_node": "Node.js",
"info_process_id": "Process ID",
"info_pty_available": "PTY available",
"term_connect": "Connect",
"term_disconnect": "Disconnect",
"term_clear": "Clear",
"term_status": "Status",
"term_connecting": "Connecting…",
"term_connected": "Connected",
"term_disconnected": "Disconnected",
"term_error": "Connection error",
"term_warning": "Commands run as the user that owns the console process. Add a sudoers rule to enable elevation.",
"term_hint": "Tip: type `sudo -i` to escalate (requires sudoers configuration).",
"term_lib_failed": "Failed to load terminal library",
"files_up": "Up one level",
"files_go": "Go",
"files_mkdir": "New folder",
"files_name": "Name",
"files_size": "Size",
"files_perms": "Mode",
"files_mtime": "Modified",
"files_rename": "Rename",
"files_rename_prompt": "New name:",
"files_empty": "Empty directory",
"files_error": "Failed to list directory",
"read_failed": "Failed to read file",
"save_failed": "Failed to save file",
"rename_failed": "Rename failed",
"delete_failed": "Delete failed",
"delete_confirm": "Delete this entry?",
"mkdir_prompt": "New folder name:",
"mkdir_failed": "Failed to create folder",
"file_saved": "File saved",
"binary_warn": "Binary file — preview only",
"encoding_utf8": "UTF-8 text",
"truncated": "truncated",
"full": "full",
"svc_search_placeholder": "Search services…",
"svc_name": "Service",
"svc_state": "State",
"svc_description": "Description",
"svc_empty": "No services found",
"svc_load_failed": "Failed to load services",
"svc_action_failed": "Action failed",
"svc_confirm": "Run",
"svc_start": "Start",
"svc_stop": "Stop",
"svc_restart": "Restart",
"svc_reload": "Reload",
"svc_enable": "Enable",
"svc_disable": "Disable",
"svc_status": "Status"
},
"server_attestation": {
"title": "Server Attestation",
"subtitle": "Performance benchmark that determines concurrent remote connection capacity at an 80% CPU, RAM, and disk threshold.",
"warning_title": "Load test",
"warning_body": "The benchmark simulates parallel WebSocket connections to the signal and relay servers. Run during off-peak hours — this test loads production.",
"run_benchmark": "Run benchmark",
"abort": "Abort",
"download_report": "Download JSON report",
"last_test": "Last test",
"no_test_yet": "No benchmark has been run yet",
"max_connections": "Max connections",
"threshold_80": "80% threshold — final metrics",
"disk": "Disk",
"ramp_chart": "Load ramp chart",
"connections": "Connections",
"connections_short": "conn.",
"tier_guide_title": "What does each tier mean?",
"tier_bronze": "BRONZE",
"tier_iron": "IRON",
"tier_titanium": "TITANIUM",
"tier_platinum": "PLATINUM",
"tier_obsidian": "OBSIDIAN",
"tier_none": "UNRATED",
"tier_bronze_desc": "125 concurrent connections — small VPS (12 vCPU, 24 GB RAM).",
"tier_iron_desc": "2675 connections — mid-range server (24 vCPU, 48 GB RAM).",
"tier_platinum_desc": "76200 connections — high-performance server (48 vCPU, 816 GB RAM).",
"tier_titanium_desc": "201400 connections — enterprise infrastructure (8+ vCPU, 1632 GB RAM).",
"tier_obsidian_desc": "401+ connections — turbo class: dedicated hardware, 16+ vCPU, 32+ GB RAM, NVMe.",
"docker_note": "Note: in Docker, CPU/RAM metrics may reflect container limits rather than the physical host.",
"badge_tooltip": "BetterDesk Server Attestation — server performance certification",
"confirm_run": "This benchmark will load-test the server with simulated connections. Continue?",
"starting": "Starting…",
"complete": "Benchmark complete",
"signal_peers": "Signal peers",
"relay_sessions": "Relay sessions",
"page_error": "Failed to load the Server Attestation page",
"mode_estimated": "Estimated (WebSocket unreachable)",
"incomplete": "Benchmark finished without a valid tier"
},
"commercialization": {
"title": "Commercialization",
"subtitle": "Support packages, billable sessions, and work reports",
"alpha_badge": "ALPHA",
"alpha_tooltip": "Early feature — billing and packages are under active development.",
"tabs": {
"overview": "Overview",
"packages": "Packages & contracts",
"sessions": "Sessions",
"reports": "Reports",
"settings": "Advanced settings"
},
"clock": {
"title": "Server time (NTP)",
"check_now": "Check now",
"unsynced": "Server clock is not synchronized — billable sessions may be blocked",
"synced_detail": "Clock synchronized for billing",
"ntp_servers": "NTP servers",
"ntp_servers_hint": "Comma-separated hostnames or IPs. Applied to the Go server (betterdesk-server), not only the web console.",
"max_skew_ms": "Maximum clock skew (ms)",
"require_sync": "Require synchronized clock for billable sessions",
"trust_os": "Trust OS NTP when direct queries fail",
"trust_os_hint": "Use systemd-timesyncd/chrony status when UDP NTP to public servers is blocked (DMZ/firewall).",
"save": "Save NTP settings",
"saved": "Clock settings saved. Go server restart initiated.",
"checked": "Clock check completed",
"save_restart": "Save NTP settings and restart the BetterDesk Go server? Active sessions may disconnect briefly.",
"status_offset": "Offset",
"status_server": "NTP source",
"status_os": "OS clock synced",
"status_error": "Last error",
"os_yes": "Yes",
"os_no": "No"
},
"stats": {
"active_sessions": "Active billable sessions",
"expiring_contracts": "Contracts expiring (30 days)",
"expiring_hint": "Active assignments with end date within 30 days"
},
"packages": {
"new": "New package",
"name": "Name",
"description": "Description",
"included_minutes": "Included minutes",
"overage_rate": "Overage rate / h",
"currency": "Currency",
"heading": "Support packages",
"prompt_name": "Package name",
"create_title": "New support package",
"edit_title": "Edit package",
"create_submit": "Create package",
"created": "Package created",
"updated": "Package updated",
"deleted": "Package deleted",
"delete_confirm": "Delete this package? Assignments using it must be removed first."
},
"sessions": {
"device": "Device",
"org": "Organization",
"operator": "Operator",
"duration": "Duration",
"phase": "Phase",
"amount": "Amount"
},
"reports": {
"session": "Session",
"summary": "Summary",
"date": "Date"
},
"contracts": {
"title": "Organization contracts",
"assignments_title": "Package assignments",
"new": "Assign package",
"target": "Target",
"org": "Organization",
"package": "Package",
"remaining": "Remaining minutes",
"hourly_rate": "Hourly rate",
"custom_overage": "Custom overage rate / h",
"validity": "Validity",
"valid_from": "Valid from",
"valid_until": "Valid until",
"status": "Status",
"actions": "Actions",
"suspend": "Suspend",
"activate": "Activate",
"select_org": "Select organization",
"select_package": "Select package",
"no_orgs": "No organizations found",
"no_packages": "Create a package first",
"edit_title": "Edit assignment",
"updated": "Assignment updated",
"deleted": "Assignment removed",
"delete_confirm": "Remove this package assignment?"
},
"assign": {
"title": "Assign package",
"submit": "Assign",
"target_type": "Target type",
"target": "Target",
"select_target": "Select target…",
"missing_fields": "Select target and package",
"optional": "Optional",
"success": "Package assigned"
},
"targets": {
"org": "Organization",
"device_group": "Device group",
"folder": "Folder",
"device": "Device"
},
"actions": {
"edit": "Edit",
"delete": "Delete",
"save": "Save",
"refresh": "Refresh"
},
"filters": {
"target_type": "Target type",
"all_types": "All types",
"all_statuses": "All statuses",
"all_orgs": "All organizations",
"organization": "Organization",
"search": "Search",
"search_placeholder": "Name or package…",
"device_id_placeholder": "Device ID"
},
"status": {
"active": "Active",
"suspended": "Suspended",
"pending_report": "Pending report",
"closed": "Closed"
},
"form": {
"cancel": "Cancel"
},
"export": {
"csv": "Export CSV",
"pdf": "Export PDF",
"sessions_csv": "Export sessions CSV"
},
"empty": {
"packages": "No packages yet. Create one with the button above.",
"contracts": "No package assignments yet. Assign a package to an organization, group, folder, or device.",
"sessions": "No billable sessions recorded yet.",
"reports": "No work reports submitted yet."
},
"report": {
"title": "Work report",
"subtitle": "Describe the work performed during this remote session.",
"category": "Category",
"ticket_ref": "Ticket reference",
"summary": "Work performed",
"skip": "Skip for now",
"submit": "Submit report",
"summary_required": "Summary is required",
"saved": "Work report saved"
},
"notifications": {
"title": "Email notifications",
"desc": "Notify operators by email when devices in their folders or groups submit help requests.",
"smtp_status": "SMTP status",
"smtp_configured": "SMTP is configured",
"smtp_missing": "SMTP is not configured — set it up in Settings → Email",
"smtp_link": "Open SMTP settings",
"help_requests_enabled": "Send email for new help requests",
"notify_assigned_operators": "Notify operators assigned to the device folder or group",
"fallback_alert_email": "Use alert email when no operator address is available",
"include_folder_in_subject": "Include folder name in the email subject",
"save": "Save notification settings",
"saved": "Notification settings saved"
}
},
"rdclient_login": {
"title": "Remote Desktop Client",
"subtitle": "Sign in to connect to your devices",
"username_placeholder": "Username",
"password_placeholder": "Password",
"remember_me": "Remember me on this device",
"sign_in": "Sign in",
"totp_title": "Two-factor authentication",
"totp_subtitle": "Enter the 6-digit code from your authenticator app",
"verify": "Verify",
"back_to_login": "Back to sign in",
"open_console_login": "Open console login",
"session_expired": "Session expired. Please sign in again.",
"fill_all_fields": "Please fill in all fields",
"invalid_credentials": "Invalid credentials",
"network_error": "Network error",
"enter_6_digits": "Enter all 6 digits",
"invalid_code": "Invalid code"
},
"rdclient_settings": {
"title": "RdClient Settings",
"open": "Settings",
"server_url": "Panel URL",
"tls_strict": "Strict TLS",
"sign_out": "Sign out",
"reset_client": "Reset client",
"discovery_refresh": "Refresh",
"discovery_empty": "No servers found on the local network"
},
"mesh": {
"settings_title": "MeshCentral Compatibility",
"enabled": "MeshCentral layer enabled",
"disabled": "MeshCentral layer disabled",
"server_id": "Server ID (for .msh)",
"download_msh": "Download MeshAgent .msh",
"agents_online": "Mesh agents online",
"device_type": "Mesh Agent",
"transport_mesh": "MeshCentral KVM",
"linked_peer": "Linked device",
"link_peer": "Link to RustDesk/CDAP peer on same host",
"onboarding_title": "MeshAgent onboarding",
"onboarding_body": "Download the .msh file, install MeshAgent on endpoints, and devices appear as mesh_agent in the device list.",
"run_command": "Run command",
"terminal": "Terminal",
"files": "File browser",
"run_command_title": "Run command on device",
"command_placeholder": "Command to execute",
"command_sent": "Command sent to agent",
"command_failed": "Failed to send command",
"run_as_shell": "Run in shell",
"terminal_title": "Remote terminal",
"terminal_unavailable": "Terminal module not loaded",
"link_peer_title": "Link mesh agent to peer",
"link_peer_hint": "Enter RustDesk or CDAP peer ID on the same host. Leave empty to unlink.",
"link_saved": "Link updated",
"transport_terminal": "Mesh terminal",
"transport_files": "Mesh files",
"settings_desc": "MeshAgent onboarding and Server ID for .msh files.",
"mesh_name": "Mesh group name (.msh)",
"copy_server_id": "Copy Server ID",
"copy_server_id_ok": "Server ID copied",
"enabled_label": "Enabled",
"disabled_label": "Disabled",
"share_link": "Guest desktop link",
"share_link_title": "Create guest desktop link",
"share_link_hint": "Time-limited view-only link. Recipients can open remote desktop without a panel account.",
"share_ttl": "Valid for (minutes)",
"share_url": "Share URL",
"share_create": "Create link",
"share_created": "Guest link created",
"port_tcp": "TCP port relay",
"port_forward_title": "TCP port relay via MeshAgent",
"port_connect": "Connect",
"port_connected": "Relay ready",
"port_connecting": "Connecting…",
"port_closed": "Disconnected",
"port_error": "WebSocket error",
"port_invalid": "Invalid port",
"port_send": "Send",
"port_send_placeholder": "Send text to remote port…",
"port_unavailable": "Port relay module not loaded",
"power_sleep": "Sleep",
"power_reset": "Reset",
"power_confirm": "Send power action",
"power_sent": "Power command sent",
"power_wake": "Wake",
"power_off": "Power off",
"filter_mesh": "Mesh agents",
"port_udp": "UDP port relay",
"groups_title": "Mesh groups",
"group_id_placeholder": "Group ID",
"group_name_placeholder": "Display name",
"group_add": "Add group",
"groups_save": "Save groups",
"groups_empty": "No mesh groups yet.",
"groups_load_error": "Could not load mesh groups.",
"groups_saved": "Mesh groups saved",
"groups_save_error": "Failed to save mesh groups",
"recordings_title": "Session recordings (server)",
"recordings_desc": "Mesh desktop sessions captured on the server (.mcrec). CDAP/RustDesk browser recordings stay local unless exported.",
"recordings_empty": "No server recordings yet.",
"recordings_load_error": "Could not load recordings.",
"recording_download": "Download",
"recording_server_on": "Server recording enabled — reconnecting…",
"recording_server_off": "Server recording disabled — reconnecting…",
"cert_missing": "Agent-server certificate not found. Back up mesh_agent_server.pem after agents connect.",
"cert_ok": "Agent-server certificate present",
"onboarding_step_msh": "Download the .msh file and set the mesh group name.",
"onboarding_step_install": "Install unmodified MeshAgent on endpoints using the .msh file.",
"onboarding_step_verify": "Confirm devices appear as mesh_agent and show online."
},
"guest_access": {
"title": "Guest Remote",
"subtitle": "Temporary access — only the devices shared with you",
"menu": "Guest access link",
"create_title": "Create guest access link",
"create_hint": "Time-limited RdClient link. Recipients can connect only to the selected devices — no Console login, no full device list.",
"devices": "Devices",
"ttl": "Valid for (minutes)",
"label": "Label (optional)",
"view_only": "View only",
"url": "Share URL",
"create": "Create link",
"created": "Guest link created",
"invalid_title": "Invalid guest link",
"missing_token": "This guest link is missing a token.",
"expired": "This guest link is invalid or expired.",
"device_denied": "This guest link is invalid, expired, or does not allow this device.",
"empty": "No devices on this guest link.",
"expires": "Expires",
"back_to_list": "Back to guest devices"
}
}