mirror of
https://github.com/UNITRONIX/BetterDesk.git
synced 2026-09-11 13:49:03 +00:00
0496b1dbc4
Add RustDesk-compatible client API and telemetry support and introduce a single-container Docker build. New client_api_handlers.go implements /api/login, /api/login-options, /api/logout, /api/currentUser, /api/ab, /api/heartbeat, /api/sysinfo and /api/sysinfo_ver with TOTP flow and an in-memory TFA session store; auth middleware and Server registration updated accordingly. Database interface and SQLite/Postgres implementations gain UpdatePeerSysinfo (with tests), audit actions for sysinfo, and handleGetPeer now returns live_online/live_status. Also add Dockerfile, docker-compose.single.yml, supervisord entrypoint, UI fixes (QR color inversion, 403 error view), labels file, README updates, and other ancillary changes. Co-Authored-By: MrBrodacz - Design <215021251+MrBrodacz2025@users.noreply.github.com> Co-Authored-By: boruto79 <176351662+boruto79@users.noreply.github.com> Co-Authored-By: marcosacramento <marcosacramento@gmail.com> Co-Authored-By: Charles Olivier Savignac <1275666+sircharlo@users.noreply.github.com>
1058 lines
40 KiB
JSON
1058 lines
40 KiB
JSON
{
|
|
"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"
|
|
},
|
|
"nav": {
|
|
"main": "Main",
|
|
"tools": "Tools",
|
|
"system": "System",
|
|
"dashboard": "Dashboard",
|
|
"devices": "Devices",
|
|
"keys": "Keys",
|
|
"generator": "Generator",
|
|
"settings": "Settings",
|
|
"users": "Users",
|
|
"inventory": "Inventory",
|
|
"tickets": "Tickets",
|
|
"activity": "Activity",
|
|
"automation": "Automation",
|
|
"file_transfer": "File Transfer",
|
|
"network": "Network",
|
|
"dataguard": "DataGuard",
|
|
"reports": "Reports",
|
|
"tenants": "Tenants",
|
|
"registrations": "Registrations",
|
|
"toggle_sidebar": "Toggle sidebar"
|
|
},
|
|
"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.",
|
|
"invalid_credentials": "Invalid username or password.",
|
|
"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_already_enabled": "Two-factor authentication is already enabled"
|
|
},
|
|
"dashboard": {
|
|
"title": "Dashboard",
|
|
"subtitle": "Overview of your RustDesk 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"
|
|
},
|
|
"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",
|
|
"selected": "selected",
|
|
"showing": "Showing",
|
|
"of": "of",
|
|
"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_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",
|
|
"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_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"
|
|
},
|
|
"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"
|
|
},
|
|
"settings": {
|
|
"title": "Settings",
|
|
"subtitle": "Console configuration and account settings",
|
|
"tab_general": "General",
|
|
"tab_server": "Server",
|
|
"tab_branding": "Branding",
|
|
"tab_backup": "Backup",
|
|
"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",
|
|
"version": "Version",
|
|
"database": "Database",
|
|
"uptime": "Uptime",
|
|
"audit_log": "Audit Log",
|
|
"audit_desc": "Recent console activity",
|
|
"no_audit_logs": "No audit logs found",
|
|
"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."
|
|
},
|
|
"audit": {
|
|
"time": "Time",
|
|
"user": "User",
|
|
"action": "Action",
|
|
"details": "Details"
|
|
},
|
|
"generator": {
|
|
"title": "Client Configuration Generator",
|
|
"subtitle": "Generate configuration for RustDesk clients",
|
|
"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"
|
|
},
|
|
"server": {
|
|
"port": "Port",
|
|
"api_port": "API Port",
|
|
"id_server": "ID Server",
|
|
"relay_server": "Relay Server",
|
|
"api_key": "API Key"
|
|
},
|
|
"status": {
|
|
"online": "Online",
|
|
"offline": "Offline",
|
|
"banned": "Banned",
|
|
"running": "Running",
|
|
"stopped": "Stopped",
|
|
"unknown": "Unknown",
|
|
"checking": "Checking..."
|
|
},
|
|
"actions": {
|
|
"refresh": "Refresh",
|
|
"copy": "Copy",
|
|
"connect": "Connect",
|
|
"connect_desktop": "Connect via Desktop Client",
|
|
"details": "Details",
|
|
"edit": "Edit",
|
|
"delete": "Delete",
|
|
"ban": "Ban",
|
|
"unban": "Unban",
|
|
"save": "Save",
|
|
"cancel": "Cancel",
|
|
"confirm": "Confirm",
|
|
"close": "Close",
|
|
"clear": "Clear",
|
|
"ok": "OK"
|
|
},
|
|
"time": {
|
|
"just_now": "Just now",
|
|
"minutes_ago": "{count} minute(s) ago",
|
|
"hours_ago": "{count} hour(s) ago",
|
|
"days_ago": "{count} day(s) ago"
|
|
},
|
|
"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": "Operator",
|
|
"role_viewer": "Viewer",
|
|
"role_hint": "Viewers can only view data, operators can manage devices, admins have full access",
|
|
"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",
|
|
"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 role for users who only need read access",
|
|
"tip_operator_role": "Use operator role for users who need to manage devices but not users",
|
|
"tip_audit_logs": "Review audit logs regularly for suspicious activity"
|
|
},
|
|
"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"
|
|
},
|
|
"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",
|
|
"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",
|
|
"block_input": "Block Input",
|
|
"display_settings": "Display Settings",
|
|
"image_quality": "Image Quality",
|
|
"quality_best": "Best Quality",
|
|
"quality_balanced": "Balanced",
|
|
"quality_low": "Performance",
|
|
"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",
|
|
"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"
|
|
},
|
|
"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_icon": "Material Icon",
|
|
"logo_type_svg": "SVG Code",
|
|
"logo_type_image": "Image URL",
|
|
"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 1.5 MB. The image is stored as base64 data.",
|
|
"logo_image_url": "Image Data / URL",
|
|
"logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.",
|
|
"logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.",
|
|
"logo_image_invalid_type": "Invalid file type. Use PNG, JPG, GIF, WebP or SVG.",
|
|
"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",
|
|
"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",
|
|
"saved": "Branding saved successfully. Reloading...",
|
|
"exported": "Theme exported",
|
|
"imported": "Theme imported successfully. Reloading...",
|
|
"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. Reloading..."
|
|
},
|
|
"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",
|
|
"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": "Helpdesk",
|
|
"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 recorded",
|
|
"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"
|
|
},
|
|
"automation": {
|
|
"title": "Automation & Alerts",
|
|
"subtitle": "Alert rules, remote commands, and SMTP configuration",
|
|
"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"
|
|
},
|
|
"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"
|
|
},
|
|
"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",
|
|
"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"
|
|
},
|
|
"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"
|
|
},
|
|
"tenants": {
|
|
"title": "Multi-Tenancy",
|
|
"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"
|
|
},
|
|
"registrations": {
|
|
"title": "Device Registrations",
|
|
"subtitle": "Manage registration requests from devices discovered via LAN",
|
|
"search_placeholder": "Search by device ID, hostname or IP...",
|
|
"no_registrations": "No registration 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"
|
|
},
|
|
"backup": {
|
|
"title": "Backup",
|
|
"desc": "Download a full backup of your console configuration, users, groups, and settings. Go server peer data is included when the BetterDesk backend is active.",
|
|
"restore_title": "Restore",
|
|
"restore_desc": "Upload a previously downloaded backup file to restore console configuration. Select which sections to restore below.",
|
|
"stat_users": "Users",
|
|
"stat_settings": "Settings",
|
|
"stat_folders": "Folders",
|
|
"stat_groups": "Groups",
|
|
"stat_strategies": "Strategies",
|
|
"stat_backend": "Backend",
|
|
"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 sections will be overwritten.",
|
|
"restore_success": "Backup restored successfully. Some changes may require a page reload.",
|
|
"restored": "Restored",
|
|
"skipped": "Skipped",
|
|
"backup_date": "Backup date",
|
|
"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"
|
|
}
|
|
}
|