update: 更新前端依赖;修改前端样式

This commit is contained in:
mofeng-git
2026-07-17 01:33:44 +08:00
parent aca847e76c
commit 57d1597264
146 changed files with 3790 additions and 2982 deletions

View File

@@ -5,10 +5,7 @@ export default {
cancel: 'Cancel',
confirm: 'Confirm',
delete: 'Delete',
upload: 'Upload',
download: 'Download',
refresh: 'Refresh',
close: 'Close',
success: 'Success',
error: 'Error',
warning: 'Warning',
@@ -24,21 +21,16 @@ export default {
connected: 'Connected',
disconnected: 'Disconnected',
connecting: 'Connecting...',
disconnecting: 'Disconnecting...',
unknown: 'Unknown',
back: 'Back',
next: 'Next',
apply: 'Apply',
menu: 'Menu',
optional: 'Optional',
recommended: 'Recommended',
notSupportedYet: ' (Not Yet Supported)',
create: 'Create',
creating: 'Creating...',
deleting: 'Deleting...',
more: 'More',
collapse: 'Collapse',
expand: 'Expand',
toggleTheme: 'Toggle theme',
toggleLanguage: 'Toggle language',
retry: 'Retry',
@@ -55,9 +47,6 @@ export default {
networkErrorDesc: 'Unable to connect to server. Please check your connection.',
},
nav: {
console: 'Console',
msd: 'Virtual Media',
settings: 'Settings',
logout: 'Logout',
},
auth: {
@@ -80,8 +69,6 @@ export default {
passwordRequired: 'Please fill in all password fields',
passwordMismatch: 'Passwords do not match',
passwordTooShort: 'Password must be at least 4 characters',
passwordChanged: 'Password changed successfully',
userNotFound: 'User not found',
sessionExpired: 'Session expired',
loggedInElsewhere: 'Logged in elsewhere',
forgotPassword: 'Forgot password',
@@ -101,10 +88,6 @@ export default {
power: 'Power',
keyboard: 'Virtual Keyboard',
keyboardTip: 'Show virtual keyboard',
mouseAbsolute: 'Absolute Mouse',
mouseRelative: 'Relative Mouse',
mouseAbsoluteTip: 'Absolute positioning - direct screen coordinate mapping',
mouseRelativeTip: 'Relative positioning - sends mouse movement deltas',
webTerminal: 'Web Terminal',
stats: 'Stats',
statsTip: 'View connection statistics',
@@ -117,8 +100,7 @@ export default {
deviceSettings: 'Device Settings',
videoMode: 'Mode',
selectMode: 'Select mode...',
h264Hint: 'H.264 mode requires WebRTC support, lower latency',
webrtcHint: 'WebRTC mode has lower latency, requires browser support',
videoModeHint: 'HTTP uses more bandwidth but offers broad compatibility; WebRTC has stricter network requirements but uses less bandwidth',
videoDevice: 'Device',
videoFormat: 'Format',
videoResolution: 'Resolution',
@@ -129,14 +111,9 @@ export default {
selectFps: 'Select FPS...',
bitratePreset: 'Bitrate',
bitrateSpeed: 'Speed',
bitrateSpeedDesc: '1 Mbps - Lowest latency',
bitrateBalanced: 'Balanced',
bitrateBalancedDesc: '4 Mbps - Recommended',
bitrateQuality: 'Quality',
bitrateQualityDesc: '8 Mbps - Best visual',
browserUnsupported: 'Browser unsupported',
encoder: 'Encoder',
changeEncoderBackend: 'Change encoder backend...',
backendSoftware: 'Software',
backendAuto: 'Auto',
recommended: 'Recommended',
@@ -158,7 +135,6 @@ export default {
audioConfig: 'Audio',
playbackControl: 'Playback',
volume: 'Volume',
mute: 'Mute',
audioDeviceSettings: 'Device Settings',
audioEnabled: 'Audio',
audioDevice: 'Device',
@@ -207,16 +183,12 @@ export default {
macAddress: 'MAC Address',
invalidMac: 'Invalid MAC address format',
recentMac: 'Recent',
send: 'Send',
wolSent: 'WOL packet sent',
wolFailed: 'Failed to send WOL packet',
},
setup: {
title: 'Initial Setup',
welcome: 'Welcome to One-KVM',
description: 'Complete the initial setup to get started',
stepAccount: 'Account Setup',
stepVideo: 'Video Setup',
stepAudioVideo: 'Audio/Video Setup',
stepHid: 'HID Setup',
setUsername: 'Set Admin Username',
@@ -242,9 +214,7 @@ export default {
noAudioDevices: 'No audio devices detected',
audioDeviceHelp: 'Select the audio capture device for capturing remote host audio. Usually on the same USB device as the video capture card.',
hidBackend: 'HID Backend',
selectHidBackend: 'Select HID control method',
serialHid: 'Serial HID',
disableHid: 'Disabled',
serialPort: 'Serial Port',
selectSerialPort: 'Select serial port',
noSerialDevices: 'No serial devices detected',
@@ -252,7 +222,6 @@ export default {
udc: 'USB Device Controller',
selectUdc: 'Select UDC',
noUdcDevices: 'No UDC devices detected',
hidDisabledHint: 'Disabling HID will prevent keyboard and mouse control of the remote host',
complete: 'Complete Setup',
setupFailed: 'Setup failed',
advancedEncoder: 'Advanced: Encoder Backend',
@@ -269,10 +238,8 @@ export default {
extensionsDescription: 'Choose which extensions to auto-start',
ttydTitle: 'Web Terminal (ttyd)',
ttydDescription: 'Access device command line in browser',
ttydWindowsUnsupportedDescription: 'ttyd Web Terminal is not supported on Windows and will not be enabled.',
extensionsHint: 'These settings can be changed later in Settings',
notInstalled: 'Not installed',
notSupportedOnWindows: 'Unsupported on Windows',
passwordStrength: 'Password Strength',
passwordWeak: 'Weak',
passwordMedium: 'Medium',
@@ -280,24 +247,14 @@ export default {
passwordVeryStrong: 'Very Strong',
},
console: {
title: 'Remote Console',
videoAlt: 'KVM Video',
videoMode: 'Video Mode',
mjpeg: 'MJPEG',
webrtc: 'WebRTC',
fullscreen: 'Fullscreen',
exitFullscreen: 'Exit Fullscreen',
screenshot: 'Screenshot',
reconnect: 'Refresh Page',
noVideo: 'No video signal',
connecting: 'Connecting...',
streamOffline: 'Stream offline',
connectionFailed: 'Connection Failed',
connectionFailedDesc: 'Unable to connect to video stream, please refresh page or check device status',
videoRestarting: 'Video stream is restarting',
deviceSwitching: 'Switching video device...',
configChanging: 'Applying new configuration...',
videoRestarted: 'Video stream updated',
streamError: 'Stream error',
// Four canonical video states (backend StreamStateChanged: streaming /
// no_signal / device_lost / device_busy). `reason` provides optional
@@ -321,7 +278,7 @@ export default {
},
uvc_usb_error: {
title: 'USB capture transport error',
detail: 'The USB capture device encountered a protocol error (EPROTO). You can try resetting the device from Settings → Environment → USB Devices.',
detail: 'The USB capture device encountered a protocol error (EPROTO). You can try resetting it from Settings → Other → USB Device Reset.',
},
uvc_capture_stall: {
title: 'UVC capture stalled',
@@ -339,14 +296,12 @@ export default {
audio_device_lost: 'Audio capture is unavailable; recovery in progress',
audio_reconnecting: 'Retrying audio device connection',
uvc_usb_error:
'Try another USB port or cable, avoid hubs, or reconnect the device. You can also reset the device from Settings → Environment → USB Devices.',
'Try another USB port or cable, avoid hubs, or reconnect the device. You can also reset it from Settings → Other → USB Device Reset.',
uvc_capture_stall: '',
},
},
webrtcConnected: 'WebRTC Connected',
webrtcConnectedDesc: 'Using low-latency H.264 video stream',
webrtcFailed: 'WebRTC Connection Failed',
fallingBackToMjpeg: 'Falling back to MJPEG mode',
webrtcPhaseIceServers: 'Loading ICE servers...',
webrtcPhaseCreatePeer: 'Creating peer connection...',
webrtcPhaseCreateChannel: 'Creating data channel...',
@@ -359,40 +314,14 @@ export default {
mjpegPhaseStream: 'Requesting video stream...',
mjpegPhaseFirstFrame: 'Waiting for first frame...',
stepProgress: 'Step {current}/{total}',
pointerLocked: 'Pointer Locked',
pointerLockedDesc: 'Press Escape to release the pointer',
pointerLockFailed: 'Failed to lock pointer',
relativeModeHint: 'Relative Mouse Mode',
relativeModeHintDesc: 'Click on the video area to lock the pointer, press Escape to release',
metaKeyHint: 'System Key Detected',
metaKeyHintDesc: 'Enter fullscreen mode to capture Win/Meta keys',
streamModeChanged: 'Video Mode Changed',
streamModeChangedDesc: 'Server switched to {mode} mode',
deviceLost: 'Video Device Lost',
deviceLostDesc: '{device}: {reason}',
deviceRecovering: 'Video Device Recovering',
deviceRecoveringDesc: 'Attempting to recover video device (attempt {attempt})',
deviceRecovered: 'Video Device Recovered',
deviceRecoveredDesc: 'Video device reconnected successfully',
pleaseWait: 'Please wait...',
retryCount: 'Retrying (attempt {count})',
errorDetails: 'Error details',
},
hid: {
title: 'HID Control',
keyboard: 'Keyboard',
mouse: 'Mouse',
reset: 'Reset HID',
sendCtrlAltDel: 'Send Ctrl+Alt+Del',
pasteText: 'Paste Text',
absoluteMouse: 'Absolute',
relativeMouse: 'Relative',
deviceLost: 'HID Device Lost',
deviceLostDesc: '{backend}: {reason}',
reconnecting: 'HID Reconnecting',
reconnectingDesc: 'Attempting to reconnect (attempt {attempt})',
recovered: 'HID Recovered',
recoveredDesc: '{backend} HID device reconnected successfully',
errorHints: {
udcNotConfigured: 'OTG is ready, waiting for the target host to connect and finish USB enumeration',
disabled: 'HID backend is disabled',
@@ -418,10 +347,6 @@ export default {
audio: {
deviceLost: 'Audio Device Lost',
deviceLostDesc: '{device}: {reason}',
reconnecting: 'Audio Reconnecting',
reconnectingDesc: 'Attempting to reconnect (attempt {attempt})',
recovered: 'Audio Recovered',
recoveredDesc: '{device} audio device reconnected successfully',
},
msd: {
title: 'Virtual Media',
@@ -438,8 +363,6 @@ export default {
accessMode: 'Access Mode',
readOnly: 'Read Only',
readWrite: 'Read/Write',
fileList: 'File List',
uploadFile: 'Upload File',
createFolder: 'Create Folder',
driveNotInitialized: 'Virtual drive not initialized',
initializeDrive: 'Initialize Drive',
@@ -485,11 +408,8 @@ export default {
settings: {
title: 'Settings',
sidebarSubtitle: 'Manage device, network and extensions',
basic: 'Basic',
general: 'General',
appearance: 'Appearance',
account: 'Account',
access: 'Access',
video: 'Video',
encoder: 'Encoder',
hid: 'HID',
@@ -497,38 +417,31 @@ export default {
atx: 'ATX',
environment: 'Environment',
network: 'Network',
users: 'Users',
hardware: 'Hardware',
system: 'System',
other: 'Other',
extensions: 'Extensions',
configured: 'Configured',
security: 'Security',
about: 'About',
appearanceSubtitle: 'Customize interface appearance and language',
accountSubtitle: 'Manage credentials and session policy',
networkSubtitle: 'Configure web server ports, listen addresses and SSL certificate',
videoSubtitle: 'Configure capture device, video encoder and WebRTC ICE servers',
hidSubtitle: 'Configure the HID backend, device, descriptors, and USB gadget functions',
msdSubtitle: 'Manage Mass Storage Device image directory',
atxSubtitle: 'Configure remote power control hardware and Wake-on-LAN',
environmentSubtitle: 'System runtime environment and USB device maintenance',
otherSubtitle: 'Additional system hardware controls',
aboutSubtitle: 'Online upgrade, version info and hardware overview',
environmentSubtitle: 'View device information and system runtime diagnostics',
otherSubtitle: 'Additional hardware controls and USB device maintenance',
aboutSubtitle: 'Online upgrade and version information',
extTtydSubtitle: 'Open a host Shell terminal in the browser',
thirdPartyAccessSubtitle: 'Configure external RustDesk, VNC, RTSP, and Redfish access',
extRemoteAccessSubtitle: 'Remote access through NAT-traversal services',
extFrpcSubtitle: 'NAT traversal through the FRP client',
watchdog: {
title: 'Hardware Watchdog',
description: 'Automatically use an available hardware watchdog while One-KVM is running.',
description: 'The hardware watchdog can trigger a hardware reset if the system hangs or the process exits',
status: {
running: 'Running',
closed: 'Off',
unsupported: 'Unsupported',
error: 'Error',
},
safety: 'If One-KVM stops feeding the watchdog, the hardware may restart the system according to its watchdog policy.',
loadFailed: 'Failed to load hardware watchdog status',
toggleFailed: 'Failed to update hardware watchdog',
enableFailed: 'Failed to enable the hardware watchdog.',
@@ -539,7 +452,6 @@ export default {
disableFailed: 'The hardware watchdog cannot be safely disabled and keepalive will continue.',
abnormalReason: 'The hardware watchdog is in an abnormal state.',
},
aboutDesc: 'Open and Lightweight IP-KVM Solution',
deviceInfo: 'Device Info',
deviceInfoDesc: 'Host system information',
hostname: 'Hostname',
@@ -557,55 +469,31 @@ export default {
newPassword: 'New Password',
usernameDesc: 'Change the console login username',
passwordDesc: 'Change the console login password',
version: 'Version',
detectDevices: 'Detect Devices',
detecting: 'Detecting...',
networkSettings: 'Network Settings',
msdSettings: 'MSD Settings',
httpSettings: 'HTTP Settings',
httpPort: 'HTTP Port',
configureHttpPort: 'Configure HTTP server port',
webServer: 'Access Address',
webServerDesc: 'Configure HTTP/HTTPS ports and listening addresses. Restart required for changes to take effect.',
httpsPort: 'HTTPS Port',
bindAddress: 'Bind Address',
bindAddressDesc: 'IP address the server listens on. 0.0.0.0 means all network interfaces.',
bindMode: 'Listening Address',
bindModeDesc: 'Choose which addresses the web server binds to.',
bindModeAll: 'All addresses',
bindModeLocal: 'Local only (127.0.0.1)',
bindModeCustom: 'Custom address list',
bindIpv6: 'Enable IPv6',
bindAllDesc: 'Also listen on :: (all IPv6 interfaces).',
bindLocalDesc: 'Also listen on ::1 (IPv6 loopback).',
bindAddressList: 'Address List',
bindAddressListDesc: 'One IP address per line (IPv4 or IPv6).',
addBindAddress: 'Add address',
bindAddressListEmpty: 'Add at least one IP address.',
httpsEnabled: 'Enable HTTPS',
httpsEnabledDesc: 'Serve over an encrypted connection. A self-signed certificate is generated automatically if none is provided.',
portConfig: 'Port & Protocol',
portConfigDesc: 'The service listens on a single port at a time, determined by the HTTPS toggle',
redfishTitle: 'Redfish',
redfishDesc: 'DMTF Redfish standard management interface',
redfishEnabled: 'Enable Redfish API',
redfishEnabledDesc: 'When enabled, the standard Redfish management interface is available at /redfish/v1/',
redfishEndpoint: 'Redfish Endpoint',
copyRedfishUrl: 'Copy Redfish URL',
openRedfishEndpoint: 'Open Redfish endpoint',
httpPortReserved: 'HTTP port (reserved)',
httpsPortReserved: 'HTTPS port (reserved)',
portActive: 'Active',
portReserved: 'Reserved',
portReservedHint: 'The reserved port is applied only after switching protocol; you can preconfigure it now.',
previewUrl: 'Access URL preview',
copyUrl: 'Copy access URL',
openInBrowser: 'Open in browser',
listenAddress: 'Listen Address',
listenAddressDesc: 'Choose which network interfaces the web server binds to',
bindModeAllDesc: '0.0.0.0 — Listen on all network interfaces',
bindModeLocalDesc: '127.0.0.1 — Loopback only (local access)',
bindModeCustomDesc: 'Bind to a specific list of IP addresses',
listenAddressDesc: 'Configure the network interfaces used by the web server',
effectiveAddresses: 'Effective listen addresses',
sslCertificate: 'SSL Certificate',
sslCertificateDesc: 'Upload a custom PEM certificate to replace the self-signed one. A service restart is required to apply.',
@@ -618,8 +506,6 @@ export default {
sslKeyPem: 'Private Key (.key)',
sslCertPemPlaceholder: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----',
sslKeyPemPlaceholder: '-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----',
sslCertSaved: 'Certificate saved, restart to apply',
sslCertCleared: 'Reverted to self-signed certificate, restart to apply',
restartRequired: 'Restart Required',
restartRequiredHint: 'The service will restart automatically to apply the new configuration.',
unsavedChangesHint: 'Click Save to apply changes',
@@ -637,7 +523,6 @@ export default {
currentVersion: 'Current Version',
latestVersion: 'Latest Version',
updateStatus: 'Update Status',
updateStatusIdle: 'Idle',
releaseNotes: 'Release Notes',
noUpdates: 'No new version available for current channel',
updateOverviewLoadFailed: 'Failed to load update information',
@@ -659,38 +544,12 @@ export default {
authSettings: 'Session Policy',
authSettingsDesc: 'Configure single-user login and concurrent session behavior',
allowMultipleSessions: 'Allow concurrent web sessions',
allowMultipleSessionsDesc: 'When disabled, a new login automatically signs out the previous session',
userManagement: 'User Management',
userManagementDesc: 'Manage user accounts and permissions',
addUser: 'Add User',
editUser: 'Edit User',
deleteUser: 'Delete User',
username: 'Username',
password: 'Password',
role: 'Role',
roleAdmin: 'Admin',
roleUser: 'User',
loadingUsers: 'Loading users...',
noUsers: 'No users found',
create: 'Create',
confirmDeleteUser: 'Are you sure you want to delete user "{name}"?',
msdStatus: 'MSD Status',
atxStatus: 'ATX Status',
available: 'Available',
notAvailable: 'Not available',
msdEnable: 'Enable MSD',
msdEnableDesc: 'Enable to mount ISO images and virtual drives to the target machine',
msdCh9329Warning: 'HID backend is CH9329, MSD is unavailable',
msdCh9329WarningDesc: 'CH9329 is a serial HID backend and does not support USB Gadget MSD',
msdDir: 'MSD directory',
msdDirDesc: 'MSD base directory containing images/ and ventoy/ subfolders',
msdDirHint: 'Changing this rebuilds MSD and updates console capacity stats',
willBeEnabledAfterSave: 'Will be enabled after save',
disabled: 'Disabled',
msdDesc: 'Mass Storage Device allows you to mount ISO images and virtual drives to the target machine. Use the MSD panel on the main page to manage images.',
atxDesc: 'ATX power control allows you to remotely power on/off and reset the target machine. Use the ATX panel on the main page to control power.',
atxPowerButton: 'Power Button',
atxResetButton: 'Reset Button',
atxPowerManagement: 'Power Management',
atxDriver: 'Driver Type',
atxDriverNone: 'Disabled',
atxDriverGpio: 'GPIO',
@@ -709,7 +568,6 @@ export default {
atxWolSettingsDesc: 'Configure WOL magic packet sending options',
atxWolInterface: 'Network Interface',
atxWolInterfacePlaceholder: 'e.g. eth0, enp0s3',
atxWolInterfaceHint: 'Specify network interface for WOL packets, leave empty for default routing',
themeDesc: 'Choose the interface color scheme',
languageDesc: 'Choose the interface display language',
featureVisibility: 'Feature Visibility',
@@ -722,7 +580,6 @@ export default {
selectDevice: 'Select device...',
videoFormat: 'Video Format',
selectFormat: 'Select format...',
driver: 'Driver',
resolution: 'Resolution',
frameRate: 'Frame Rate',
encoderBackend: 'Video Encoder',
@@ -731,14 +588,12 @@ export default {
autoRecommended: 'Auto (Recommended)',
software: 'Software',
supportedFormats: 'Supported Codecs',
encoderHint: 'Hardware encoders deliver lower latency and CPU usage; software encoders offer broader compatibility at a higher resource cost.',
hidSettings: 'HID Settings',
hidSettingsDesc: 'Configure backend, device, descriptors, and functions in order',
hidBackend: 'HID Backend',
serialDevice: 'Serial Device',
baudRate: 'Baud Rate',
otgUdc: 'OTG Device Controller',
otgUdcDesc: 'Select the UDC used by the USB gadget, or leave blank for automatic selection',
ch9329Options: 'CH9329 Options',
ch9329OptionsDesc: 'Configure runtime compatibility for the CH9329 serial HID chip',
ch9329HybridMouse: 'Linux Absolute Mouse Compatibility',
@@ -752,29 +607,21 @@ export default {
ch9329DescriptorWarning: 'Saving writes CH9329 parameters; changes may not show until the device is power-cycled or reconnected',
ch9329StringLengthWarning: 'CH9329 strings are limited to 23 bytes',
otgHidProfile: 'OTG Functions',
otgHidProfileDesc: 'Select which USB functions are exposed to the host',
otgFunctionKeyboard: 'Keyboard',
otgFunctionKeyboard: 'Standard Keyboard',
otgFunctionKeyboardDesc: 'Standard HID keyboard device',
otgKeyboardLeds: 'Keyboard LED Status',
otgKeyboardLedsDesc: 'Enable Caps/Num/Scroll LED feedback from the host',
otgFunctionMouseRelative: 'Relative Mouse',
otgFunctionMouseRelativeDesc: 'Traditional mouse movement (HID boot mouse)',
otgFunctionMouseAbsolute: 'Absolute Mouse',
otgFunctionMouseAbsoluteDesc: 'Absolute positioning (touchscreen-like)',
otgFunctionMouseRelative: 'Relative Positioning Mouse',
otgFunctionMouseAbsolute: 'Absolute Positioning Mouse',
otgFunctionConsumer: 'Consumer Control Keyboard',
otgFunctionConsumerDesc: 'Consumer Control keys such as volume/play/pause',
otgFunctionMsd: 'Mass Storage (MSD)',
otgFunctionMsdDesc: 'Expose USB storage to the host',
otgProfileWarning: 'Saving reconnects the USB device; unsupported combinations show an error and restore the previous configuration',
otgFunctionMinWarning: 'Enable at least one HID function before saving',
otgNetwork: 'USB Virtual Ethernet',
otgNetwork: 'USB Virtual Ethernet Bridge',
otgRuntimeDegraded: 'OTG runtime is degraded',
otgNetworkDesc: 'Bridge the USB link to an existing uplink',
otgNetworkDriver: 'Host Driver Mode',
otgNetworkInterface: 'Bridge Interface',
otgNetworkNone: 'None',
otgDescriptor: 'USB Device Descriptor',
otgDescriptorDesc: 'Configure USB device identification',
vendorId: 'Vendor ID (VID)',
productId: 'Product ID (PID)',
manufacturer: 'Manufacturer',
@@ -790,7 +637,6 @@ export default {
overall: 'Overall Status',
ok: 'Healthy',
hasIssues: 'Issues Found',
summary: 'Issue Summary',
counts: '{errors} errors, {warnings} warnings',
groupCounts: '{ok} passed, {warnings} warnings, {errors} errors',
notRun: 'Not run',
@@ -872,7 +718,7 @@ export default {
none: 'None',
},
usbDevices: {
title: 'USB Devices',
title: 'USB Device Reset',
desc: 'View connected USB devices and reset them to recover from errors',
refresh: 'Refresh',
loadFailed: 'Failed to load USB device list',
@@ -887,34 +733,21 @@ export default {
resetAction: 'Reset Device',
},
webrtcSettings: 'WebRTC Signaling',
webrtcSettingsDesc: 'Configure STUN/TURN servers to assist NAT traversal',
publicIceServersHint: 'Leave empty to use Google\u2019s public STUN servers; TURN must be self-hosted',
webrtcSettingsDesc: 'Configure STUN/TURN servers; changes apply to newly established WebRTC sessions after saving',
stunServer: 'STUN Server',
stunServerPlaceholder: 'stun:stun.l.google.com:19302',
stunServerHint: 'Leave empty to use Google\u2019s public STUN servers',
turnServer: 'TURN Server',
turnServerPlaceholder: 'turn:turn.example.com:3478',
turnServerHint: 'TURN relay server. Strongly recommended for public deployments or strict NAT environments.',
turnUsername: 'TURN Username',
turnPassword: 'TURN Password',
turnCredentialsHint: 'Credentials used for TURN server authentication',
iceConfigNote: 'Changes apply to the next WebRTC session',
},
virtualKeyboard: {
title: 'Virtual Keyboard',
attach: 'Attach',
detach: 'Detach',
hide: 'Hide',
show: 'Show Virtual Keyboard',
layoutSelect: 'Keyboard Layout',
osWindows: 'Windows',
osMac: 'Mac',
osAndroid: 'Android',
mediaKeys: 'Consumer Control Keyboard',
},
config: {
applied: 'Configuration applied',
applyFailed: 'Failed to apply configuration',
loadDevicesFailed: 'Failed to load device list',
updateFailed: 'Update failed',
},
@@ -927,9 +760,6 @@ export default {
online: 'Online',
offline: 'Offline',
connecting: 'Connecting...',
version: 'Version',
uptime: 'Uptime',
running: 'Running',
format: 'Format',
resolution: 'Resolution',
fps: 'FPS',
@@ -937,10 +767,7 @@ export default {
fpsActual: 'Actual FPS',
fpsStaticHint: 'Frame rate drops automatically while the image is static',
paused: 'Paused',
clients: 'Clients',
backend: 'Backend',
mouse: 'Mouse',
mouseSupport: 'Mouse Support',
currentMode: 'Current Mode',
absolute: 'Absolute',
relative: 'Relative',
@@ -948,21 +775,14 @@ export default {
networkError: 'Network Error',
disconnected: 'Disconnected',
hidUnavailable: 'HID Unavailable',
sampleRate: 'Sample Rate',
channels: 'Channels',
quality: 'Quality',
streaming: 'Streaming',
off: 'Off',
defaultDevice: 'Default',
notConnected: 'Not Connected',
connected: 'Connected',
image: 'Image',
msdStatus: 'Status',
msdStandby: 'Idle',
msdImageMode: 'Image Mode',
msdDriveMode: 'Virtual USB',
msdMultiMode: 'Virtual Media: {count} mounted',
msdMountType: 'Mount Type',
msdCurrentImage: 'Current Image',
msdNoImage: 'None',
},
@@ -978,21 +798,18 @@ export default {
autoStart: 'Auto Start',
thirdPartyAccess: {
title: 'Third-party Access',
desc: 'Configure RustDesk, VNC, and RTSP in one place',
},
viewLogs: 'View Logs',
noLogs: 'No logs available',
binaryNotFound: '{path} not found, please install the required program',
remoteAccess: {
title: 'Remote Access',
desc: 'GOSTC/FRPC NAT traversal and Easytier networking',
},
ttyd: {
title: 'Ttyd Web Terminal',
desc: 'Web terminal access via ttyd',
open: 'Open Terminal',
openInNewTab: 'Open in New Tab',
port: 'Port',
shell: 'Shell',
},
gostc: {
@@ -1014,11 +831,10 @@ export default {
peers: 'Peer Nodes',
addPeer: 'Add Peer',
virtualIp: 'Virtual IP',
virtualIpHint: 'Leave empty for DHCP, or specify with CIDR (e.g., 10.0.0.1/24)',
},
frpc: {
title: 'FRPC NAT Traversal',
desc: 'Connect to an frps server through the FRP client',
desc: 'Use the FRP client for NAT traversal',
quickConfig: 'Quick Config',
fullConfig: 'Full Config',
fullConfigHint: 'Paste the provider TOML configuration file here',
@@ -1045,8 +861,7 @@ export default {
},
rustdesk: {
title: 'RustDesk Remote',
desc: 'Remote access via RustDesk client',
serverSettings: 'Server Settings',
desc: 'Configure the RustDesk service; the selected codec will be locked',
rendezvousServer: 'ID Server',
rendezvousServerPlaceholder: 'hbbs.example.com:21116',
rendezvousServerRequired: 'Enter the RustDesk ID server',
@@ -1054,10 +869,8 @@ export default {
relayServerPlaceholder: 'hbbr.example.com:21117',
relayKey: 'Relay Key',
codec: 'Codec',
codecHint: 'Choose H.264 or H.265 before starting RustDesk. The codec is locked while running.',
deviceInfo: 'Device Info',
deviceId: 'Device ID',
deviceIdHint: 'Use this ID in RustDesk client to connect',
devicePassword: 'Device Password',
showPassword: 'Show Password',
hidePassword: 'Hide Password',
@@ -1065,8 +878,6 @@ export default {
regeneratePassword: 'Regenerate Password',
confirmRegenerateId: 'Are you sure you want to regenerate the device ID? Existing clients will need to reconnect with the new ID.',
confirmRegeneratePassword: 'Are you sure you want to regenerate the password? Existing clients will need to reconnect with the new password.',
serviceStatus: 'Service Status',
rendezvousStatus: 'Registration Status',
registered: 'Registered',
connected: 'Connected',
disconnected: 'Disconnected',
@@ -1075,21 +886,16 @@ export default {
notInitialized: 'Not Initialized',
copyId: 'Copy ID',
copyPassword: 'Copy Password',
copied: 'Copied',
keypairGenerated: 'Keypair Generated',
noKeypair: 'No Keypair',
},
rtsp: {
title: 'RTSP Streaming',
desc: 'Configure RTSP video output service (H.264/H.265)',
desc: 'Configure the RTSP streaming service; the selected codec will be locked',
bind: 'Bind Address',
bindHint: 'Enter an IPv4 or IPv6 address; configure the port in the port field.',
port: 'Port',
path: 'Stream Path',
pathPlaceholder: 'live',
pathHint: 'Example: rtsp://device-ip:8554/live',
codec: 'Codec',
codecHint: 'RTSP locks output to the selected codec while running. If RustDesk is running, choose the same codec.',
allowOneClient: 'Allow One Client Only',
username: 'Username',
usernamePlaceholder: 'Empty means no authentication',
@@ -1099,44 +905,31 @@ export default {
},
vnc: {
title: 'VNC Remote',
desc: 'Access via TigerVNC client',
desc: 'Configure the VNC service; the selected codec will be locked',
bind: 'Bind Address',
bindHint: 'Enter an IPv4 or IPv6 address; configure the port in the port field.',
port: 'Port',
encoding: 'Video Encoding',
encodingTightJpeg: 'Tight JPEG',
encodingH264: 'H.264',
encodingHint: 'VNC locks output while running. VNC cannot start under an H.265 lock; MJPEG blocks RTSP and RustDesk.',
allowOneClient: 'Allow One Client Only',
password: 'Password',
passwordPlaceholder: 'Leave empty to keep current',
passwordRequiredPlaceholder: 'Up to 8 characters',
passwordRequired: 'Set a VNC password',
passwordMaxLength: 'VNC passwords are limited to 8 characters',
passwordSaved: 'Password is saved; leaving this empty keeps it unchanged.',
clients: '{count} clients',
urlPreview: 'VNC Address Preview',
},
},
stats: {
title: 'Connection Stats',
current: 'Current Status',
video: 'Video',
videoDesc: 'Video stream from server to client.',
video: 'Video Information',
stability: 'Network Stability',
stabilityDesc: 'How smooth the incoming video packets are in the network.',
jitter: 'Jitter',
delay: 'Playback Delay',
delayDesc: 'Delay added by jitter buffer to smooth unevenly arriving frames.',
packetLoss: 'Packet Loss',
packetLossDesc: 'Number of lost incoming video RTP packets.',
total: 'total',
frameRate: 'Frame Rate',
frameRateDesc: 'Number of incoming video frames displayed per second.',
additional: 'Additional Info',
latency: 'ICE Latency',
bitrate: 'Bitrate',
fps: 'FPS',
resolution: 'Resolution',
packetsLost: 'Packets Lost',
connection: 'Connection Info',
@@ -1148,23 +941,9 @@ export default {
relay: 'TURN Relay',
},
help: {
flashMode: 'Flash mode mounts the image as a USB drive, compatible with most BIOS boot',
cdromMode: 'CDROM mode mounts the image as a CD drive, for systems requiring optical boot',
readOnlyMode: 'Read-only mode is safer, the target system cannot modify the image',
readWriteMode: 'Read-write mode allows writing data, useful for saving configurations',
driveSize: 'Virtual drive size. Larger drives can store more files but take longer to initialize',
mjpegMode: 'MJPEG mode has best compatibility, works with all browsers, but higher latency',
webrtcMode: 'WebRTC mode has lower latency, but requires browser codec support',
videoBitratePreset: 'Speed: lowest latency, best for slow networks. Balanced: good quality and latency. Quality: best visual, needs good bandwidth',
encoderBackend: 'Hardware encoder has better performance and lower power. Software encoder has better compatibility',
absoluteMode: 'Absolute mode maps mouse coordinates directly, suitable for most scenarios',
relativeMode: 'Relative mode sends mouse movement delta, for games or special software',
mouseThrottle: 'Send interval controls mouse event frequency. Higher values reduce network load',
hidBackend: 'OTG backend requires USB OTG hardware support. CH9329 is a serial HID chip solution',
atxActiveLevel: 'Active level depends on your hardware wiring. High means high voltage when triggered',
wolInterface: 'Network interface name for sending Wake-on-LAN magic packets, e.g., eth0 or br0',
stunServer: 'STUN server for NAT traversal to establish P2P connections. Leave empty for public servers',
turnServer: 'TURN server provides relay when P2P fails. Requires more bandwidth but more reliable',
audioQuality: 'Higher quality means better audio but requires more network bandwidth',
},
}

View File

@@ -5,10 +5,7 @@ export default {
cancel: '取消',
confirm: '确认',
delete: '删除',
upload: '上传',
download: '下载',
refresh: '刷新',
close: '关闭',
success: '成功',
error: '错误',
warning: '警告',
@@ -24,21 +21,16 @@ export default {
connected: '已连接',
disconnected: '已断开',
connecting: '连接中...',
disconnecting: '断开中...',
unknown: '未知',
back: '上一步',
next: '下一步',
apply: '应用',
menu: '菜单',
optional: '可选',
recommended: '推荐',
notSupportedYet: '(尚未支持)',
create: '创建',
creating: '创建中...',
deleting: '删除中...',
more: '更多',
collapse: '收起',
expand: '展开',
toggleTheme: '切换主题',
toggleLanguage: '切换语言',
retry: '重试',
@@ -55,9 +47,6 @@ export default {
networkErrorDesc: '无法连接到服务器,请检查网络连接。',
},
nav: {
console: '控制台',
msd: '虚拟媒体',
settings: '设置',
logout: '退出登录',
},
auth: {
@@ -80,8 +69,6 @@ export default {
passwordRequired: '请填写所有密码字段',
passwordMismatch: '两次输入的密码不一致',
passwordTooShort: '密码至少需要4个字符',
passwordChanged: '密码修改成功',
userNotFound: '用户不存在',
sessionExpired: '会话已过期',
loggedInElsewhere: '已在别处登录',
forgotPassword: '忘记密码',
@@ -101,10 +88,6 @@ export default {
power: '电源',
keyboard: '虚拟键盘',
keyboardTip: '显示虚拟键盘',
mouseAbsolute: '绝对鼠标',
mouseRelative: '相对鼠标',
mouseAbsoluteTip: '绝对定位模式 - 直接映射屏幕坐标',
mouseRelativeTip: '相对定位模式 - 发送鼠标移动增量',
webTerminal: '网页终端',
stats: '连接统计',
statsTip: '查看连接状态',
@@ -117,8 +100,7 @@ export default {
deviceSettings: '设备配置',
videoMode: '视频模式',
selectMode: '选择模式...',
h264Hint: 'H.264 模式需要 WebRTC 支持,延迟更低',
webrtcHint: 'WebRTC 模式延迟更低,需要浏览器支持',
videoModeHint: 'HTTP 对带宽占用较大但模式兼容性好WebRTC 对网络要求较高但带宽占用低',
videoDevice: '视频设备',
videoFormat: '视频格式',
videoResolution: '分辨率',
@@ -129,14 +111,9 @@ export default {
selectFps: '选择帧率...',
bitratePreset: '码率',
bitrateSpeed: '速度优先',
bitrateSpeedDesc: '1 Mbps - 最低延迟',
bitrateBalanced: '均衡',
bitrateBalancedDesc: '4 Mbps - 推荐',
bitrateQuality: '质量优先',
bitrateQualityDesc: '8 Mbps - 最佳画质',
browserUnsupported: '浏览器不支持',
encoder: '编码器',
changeEncoderBackend: '更改编码器后端...',
backendSoftware: '软件编码',
backendAuto: '自动',
recommended: '推荐',
@@ -158,7 +135,6 @@ export default {
audioConfig: '音频',
playbackControl: '播放控制',
volume: '音量',
mute: '静音',
audioDeviceSettings: '设备配置',
audioEnabled: '启用音频',
audioDevice: '音频设备',
@@ -207,16 +183,12 @@ export default {
macAddress: 'MAC 地址',
invalidMac: 'MAC 地址格式无效',
recentMac: '最近使用',
send: '发送',
wolSent: 'WOL 唤醒包已发送',
wolFailed: 'WOL 发送失败',
},
setup: {
title: '初始化设置',
welcome: '欢迎使用 One-KVM',
description: '请完成初始设置以开始使用',
stepAccount: '账号设置',
stepVideo: '视频设置',
stepAudioVideo: '音视频设置',
stepHid: '鼠键设置',
setUsername: '设置管理员用户名',
@@ -242,9 +214,7 @@ export default {
noAudioDevices: '未检测到音频设备',
audioDeviceHelp: '选择用于捕获远程主机音频的设备。通常与视频采集卡在同一 USB 设备上。',
hidBackend: 'HID 后端',
selectHidBackend: '选择 HID 控制方式',
serialHid: '串口 HID',
disableHid: '禁用',
serialPort: '串口设备',
selectSerialPort: '选择串口设备',
noSerialDevices: '未检测到串口设备',
@@ -252,7 +222,6 @@ export default {
udc: 'USB 设备控制器',
selectUdc: '选择 UDC',
noUdcDevices: '未检测到 UDC 设备',
hidDisabledHint: '禁用 HID 后将无法控制远程主机的键盘和鼠标',
complete: '完成设置',
setupFailed: '设置失败',
advancedEncoder: '高级选项:编码器后端',
@@ -269,10 +238,8 @@ export default {
extensionsDescription: '选择要自动启动的扩展服务',
ttydTitle: 'Web 终端 (ttyd)',
ttydDescription: '在浏览器中访问设备的命令行终端',
ttydWindowsUnsupportedDescription: 'Windows 平台暂不支持 ttyd Web 终端,此扩展不会启用。',
extensionsHint: '这些设置可以在设置页面中随时更改',
notInstalled: '未安装',
notSupportedOnWindows: 'Windows 不支持',
passwordStrength: '密码强度',
passwordWeak: '弱',
passwordMedium: '中',
@@ -280,24 +247,14 @@ export default {
passwordVeryStrong: '很强',
},
console: {
title: '远程控制台',
videoAlt: 'KVM 视频',
videoMode: '视频模式',
mjpeg: 'MJPEG',
webrtc: 'WebRTC',
fullscreen: '全屏',
exitFullscreen: '退出全屏',
screenshot: '截图',
reconnect: '刷新网页',
noVideo: '无视频信号',
connecting: '正在连接...',
streamOffline: '视频流离线',
connectionFailed: '连接失败',
connectionFailedDesc: '无法连接到视频流,请刷新网页或检查设备状态',
videoRestarting: '视频流正在重启',
deviceSwitching: '正在切换视频设备...',
configChanging: '正在应用新配置...',
videoRestarted: '视频流已更新',
streamError: '视频流错误',
// 四档视频状态(对应后端 StreamStateChangedstreaming / no_signal /
// device_lost / device_busy. `reason` 子键可选,用于在副文案中补充细节。
@@ -320,7 +277,7 @@ export default {
},
uvc_usb_error: {
title: 'USB 采集传输异常',
detail: 'USB 采集卡遇到协议错误EPROTO可在 设置 → 环境 → USB 设备 中尝试复位。',
detail: 'USB 采集卡遇到协议错误EPROTO可在 设置 → 其他 → USB 设备复位 中尝试复位。',
},
uvc_capture_stall: {
title: 'UVC 采集超时',
@@ -338,14 +295,12 @@ export default {
audio_device_lost: '音频采集不可用,正在自动恢复',
audio_reconnecting: '正在重试连接音频设备',
uvc_usb_error:
'可尝试更换 USB 口或线、避免 HUB、或重新插拔设备也可在 设置 → 环境 → USB 设备 中复位。',
'可尝试更换 USB 口或线、避免 HUB、或重新插拔设备也可在 设置 → 其他 → USB 设备复位 中复位。',
uvc_capture_stall: '',
},
},
webrtcConnected: 'WebRTC 已连接',
webrtcConnectedDesc: '正在使用 H.264 低延迟视频流',
webrtcFailed: 'WebRTC 连接失败',
fallingBackToMjpeg: '自动切换到 MJPEG 模式',
webrtcPhaseIceServers: '正在加载 ICE 服务器...',
webrtcPhaseCreatePeer: '正在创建点对点连接...',
webrtcPhaseCreateChannel: '正在创建数据通道...',
@@ -358,40 +313,14 @@ export default {
mjpegPhaseStream: '正在请求视频流...',
mjpegPhaseFirstFrame: '正在等待首帧...',
stepProgress: '第 {current}/{total} 步',
pointerLocked: '鼠标已锁定',
pointerLockedDesc: '按 Escape 键释放鼠标',
pointerLockFailed: '鼠标锁定失败',
relativeModeHint: '相对鼠标模式',
relativeModeHintDesc: '点击视频区域以锁定鼠标,按 Escape 释放',
metaKeyHint: '检测到系统键',
metaKeyHintDesc: '请进入全屏模式以捕获 Win/Meta 键',
streamModeChanged: '视频模式已切换',
streamModeChangedDesc: '服务器已切换到 {mode} 模式',
deviceLost: '视频设备丢失',
deviceLostDesc: '{device}: {reason}',
deviceRecovering: '视频设备恢复中',
deviceRecoveringDesc: '正在尝试恢复视频设备(第 {attempt} 次)',
deviceRecovered: '视频设备已恢复',
deviceRecoveredDesc: '视频设备已成功重连',
pleaseWait: '请稍候...',
retryCount: '正在重试 (第 {count} 次)',
errorDetails: '错误详情',
},
hid: {
title: 'HID 控制',
keyboard: '键盘',
mouse: '鼠标',
reset: '重置 HID',
sendCtrlAltDel: '发送 Ctrl+Alt+Del',
pasteText: '粘贴文本',
absoluteMouse: '绝对定位',
relativeMouse: '相对定位',
deviceLost: 'HID 设备丢失',
deviceLostDesc: '{backend}: {reason}',
reconnecting: 'HID 重连中',
reconnectingDesc: '正在尝试重连(第 {attempt} 次)',
recovered: 'HID 已恢复',
recoveredDesc: '{backend} HID 设备已成功重连',
errorHints: {
udcNotConfigured: 'OTG 已就绪,等待被控机连接并完成 USB 枚举',
disabled: 'HID 后端已禁用',
@@ -417,10 +346,6 @@ export default {
audio: {
deviceLost: '音频设备丢失',
deviceLostDesc: '{device}: {reason}',
reconnecting: '音频重连中',
reconnectingDesc: '正在尝试重连(第 {attempt} 次)',
recovered: '音频已恢复',
recoveredDesc: '音频设备已成功重连',
},
msd: {
title: '虚拟媒体',
@@ -437,8 +362,6 @@ export default {
accessMode: '访问模式',
readOnly: '只读',
readWrite: '读写',
fileList: '文件列表',
uploadFile: '上传文件',
createFolder: '新建文件夹',
driveNotInitialized: '虚拟驱动器未初始化',
initializeDrive: '初始化驱动器',
@@ -484,11 +407,8 @@ export default {
settings: {
title: '系统设置',
sidebarSubtitle: '管理设备、网络与扩展',
basic: '基础',
general: '通用',
appearance: '外观',
account: '账户',
access: '访问',
video: '视频',
encoder: '编码器',
hid: 'HID',
@@ -496,38 +416,31 @@ export default {
atx: 'ATX',
environment: '环境',
network: '网络',
users: '用户',
hardware: '硬件',
system: '系统',
other: '其他',
extensions: '扩展',
configured: '已配置',
security: '安全',
about: '关于',
appearanceSubtitle: '自定义界面外观与显示语言',
accountSubtitle: '管理登录凭据与会话策略',
networkSubtitle: '配置 Web 服务端口、监听地址与 SSL 证书',
videoSubtitle: '配置采集设备、视频编码器与 WebRTC 信令服务器',
hidSubtitle: '配置 HID 后端、设备、描述符与 USB Gadget 功能',
msdSubtitle: '管理虚拟存储设备 (MSD) 镜像目录',
atxSubtitle: '配置远程电源控制硬件与网络唤醒',
environmentSubtitle: '系统级运行环境与 USB 设备维护',
otherSubtitle: '其他系统硬件控制',
aboutSubtitle: '在线升级版本信息与设备硬件概览',
environmentSubtitle: '查看设备信息与系统级运行环境',
otherSubtitle: '其他系统硬件控制与 USB 设备维护',
aboutSubtitle: '在线升级版本信息',
extTtydSubtitle: '在浏览器中打开本机 Shell 终端',
thirdPartyAccessSubtitle: '集中配置 RustDesk、VNC、RTSP 与 Redfish 外部接入',
extRemoteAccessSubtitle: '通过内网穿透服务实现远程访问',
extFrpcSubtitle: '通过 FRP 客户端实现内网穿透',
watchdog: {
title: '硬件 Watchdog',
description: 'One-KVM 运行期间自动使用可用的硬件 Watchdog。',
description: '硬件 Watchdog 可在系统死机或程序退出时自动触发硬件复位信号',
status: {
running: '运行中',
closed: '已关闭',
unsupported: '不支持',
error: '异常',
},
safety: '如果 One-KVM 停止喂狗,硬件可能会按照 Watchdog 策略重启系统。',
loadFailed: '无法加载硬件 Watchdog 状态',
toggleFailed: '无法更新硬件 Watchdog',
enableFailed: '无法开启硬件 Watchdog。',
@@ -538,7 +451,6 @@ export default {
disableFailed: '硬件 Watchdog 无法安全停用,将继续喂狗。',
abnormalReason: '硬件 Watchdog 状态异常。',
},
aboutDesc: '开放轻量的 IP-KVM 解决方案',
deviceInfo: '设备信息',
deviceInfoDesc: '主机系统信息',
hostname: '主机名',
@@ -556,55 +468,31 @@ export default {
newPassword: '新密码',
usernameDesc: '修改控制台登录用户名',
passwordDesc: '修改控制台登录密码',
version: '版本',
detectDevices: '探测设备',
detecting: '探测中...',
networkSettings: '网络设置',
msdSettings: 'MSD 设置',
httpSettings: 'HTTP 设置',
httpPort: 'HTTP 端口',
configureHttpPort: '配置 HTTP 服务器端口',
webServer: '访问地址',
webServerDesc: '配置 HTTP/HTTPS 端口和监听地址,修改后需要重启生效',
httpsPort: 'HTTPS 端口',
bindAddress: '绑定地址',
bindAddressDesc: '服务器监听的 IP 地址0.0.0.0 表示监听所有网络接口',
bindMode: '监听地址',
bindModeDesc: '选择 Web 服务监听哪些地址。',
bindModeAll: '所有地址',
bindModeLocal: '仅本地 (127.0.0.1)',
bindModeCustom: '自定义地址列表',
bindIpv6: '启用 IPv6',
bindAllDesc: '同时监听 ::(所有 IPv6 地址)。',
bindLocalDesc: '同时监听 ::1IPv6 本地回环)。',
bindAddressList: '地址列表',
bindAddressListDesc: '每行一个 IPIPv4 或 IPv6。',
addBindAddress: '添加地址',
bindAddressListEmpty: '请至少填写一个 IP 地址。',
httpsEnabled: '启用 HTTPS',
httpsEnabledDesc: '使用加密连接对外提供服务,未配置证书时自动生成自签名证书',
portConfig: '端口与协议',
portConfigDesc: '服务一次仅监听一个端口,由 HTTPS 开关决定生效端口',
redfishTitle: 'Redfish',
redfishDesc: 'DMTF Redfish 标准管理接口',
redfishEnabled: '启用 Redfish API',
redfishEnabledDesc: '开启后可通过 /redfish/v1/ 访问标准 Redfish 管理接口',
redfishEndpoint: 'Redfish 入口',
copyRedfishUrl: '复制 Redfish 地址',
openRedfishEndpoint: '打开 Redfish 入口',
httpPortReserved: 'HTTP 端口(备用)',
httpsPortReserved: 'HTTPS 端口(备用)',
portActive: '当前生效',
portReserved: '备用',
portReservedHint: '备用端口仅在切换协议后生效,可提前配置',
previewUrl: '访问地址预览',
copyUrl: '复制访问地址',
openInBrowser: '在浏览器中打开',
listenAddress: '监听地址',
listenAddressDesc: '配置 Web 服务监听哪些网络接口',
bindModeAllDesc: '0.0.0.0 — 监听所有网络接口',
bindModeLocalDesc: '127.0.0.1 — 仅允许本机访问',
bindModeCustomDesc: '指定一组 IP 地址',
listenAddressDesc: '配置 Web 服务监听网络接口',
effectiveAddresses: '生效监听地址',
sslCertificate: 'SSL 证书',
sslCertificateDesc: '上传自定义 PEM 证书替换自签名证书,保存后需重启服务生效',
@@ -617,8 +505,6 @@ export default {
sslKeyPem: '私钥内容 (.key)',
sslCertPemPlaceholder: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----',
sslKeyPemPlaceholder: '-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----',
sslCertSaved: '证书已保存,重启后生效',
sslCertCleared: '已恢复自签名证书,重启后生效',
restartRequired: '需要重启',
restartRequiredHint: '保存后将自动重启服务以应用新配置',
unsavedChangesHint: '点击右侧按钮保存当前配置',
@@ -636,7 +522,6 @@ export default {
currentVersion: '当前版本',
latestVersion: '最新版本',
updateStatus: '升级状态',
updateStatusIdle: '空闲',
releaseNotes: '更新说明',
noUpdates: '当前通道暂无可升级新版本',
updateOverviewLoadFailed: '获取版本更新信息失败',
@@ -658,38 +543,12 @@ export default {
authSettings: '会话策略',
authSettingsDesc: '配置单用户登录与并发会话规则',
allowMultipleSessions: '允许多个 Web 会话并存',
allowMultipleSessionsDesc: '关闭后,新登录将自动踢出旧会话',
userManagement: '用户管理',
userManagementDesc: '管理用户账号和权限',
addUser: '添加用户',
editUser: '编辑用户',
deleteUser: '删除用户',
username: '用户名',
password: '密码',
role: '角色',
roleAdmin: '管理员',
roleUser: '普通用户',
loadingUsers: '加载用户中...',
noUsers: '暂无用户',
create: '创建',
confirmDeleteUser: '确定要删除用户 "{name}" 吗?',
msdStatus: 'MSD 状态',
atxStatus: 'ATX 状态',
available: '可用',
notAvailable: '不可用',
msdEnable: '启用 MSD',
msdEnableDesc: '启用后可以挂载 ISO 镜像和虚拟驱动器到目标机器',
msdCh9329Warning: '当前 HID 后端为 CH9329MSD 功能不可用',
msdCh9329WarningDesc: 'CH9329 为串口 HID 方案,不支持 USB Gadget 的 MSD 功能',
msdDir: 'MSD 目录',
msdDirDesc: 'MSD 根目录,内部包含 images/ 和 ventoy/ 两个子目录',
msdDirHint: '修改后会重建 MSD控制台容量统计以该目录为准',
willBeEnabledAfterSave: '保存后生效',
disabled: '已禁用',
msdDesc: '虚拟存储设备允许您将 ISO 镜像和虚拟驱动器挂载到目标机器。请在主页面的 MSD 面板中管理镜像。',
atxDesc: 'ATX 电源控制允许您远程开关机和重启目标机器。请在主页面的 ATX 面板中控制电源。',
atxPowerButton: '电源按钮',
atxResetButton: '重启按钮',
atxPowerManagement: '电源管理',
atxDriver: '驱动类型',
atxDriverNone: '禁用',
atxDriverGpio: 'GPIO',
@@ -708,7 +567,6 @@ export default {
atxWolSettingsDesc: '配置 Wake-on-LAN 魔术包发送选项',
atxWolInterface: '网络接口',
atxWolInterfacePlaceholder: '例如: eth0, enp0s3',
atxWolInterfaceHint: '指定发送 WOL 包的网络接口,留空则使用系统默认路由',
themeDesc: '选择界面颜色方案',
languageDesc: '选择界面显示语言',
featureVisibility: '功能展示',
@@ -721,7 +579,6 @@ export default {
selectDevice: '选择设备...',
videoFormat: '视频格式',
selectFormat: '选择格式...',
driver: '驱动',
resolution: '分辨率',
frameRate: '帧率',
encoderBackend: '视频编码器',
@@ -730,14 +587,12 @@ export default {
autoRecommended: '自动(推荐)',
software: '软件',
supportedFormats: '支持的编码格式',
encoderHint: '硬件编码器延迟和 CPU 占用比软件编码低,画质预设更好',
hidSettings: 'HID 设置',
hidSettingsDesc: '按后端、设备、描述符和功能顺序配置',
hidBackend: 'HID 后端',
serialDevice: '串口设备',
baudRate: '波特率',
otgUdc: 'OTG 设备控制器',
otgUdcDesc: '选择用于 USB Gadget 的 UDC留空时自动选择',
ch9329Options: 'CH9329 选项',
ch9329OptionsDesc: '配置 CH9329 串口 HID 芯片的运行兼容性',
ch9329HybridMouse: 'Linux 绝对鼠标兼容模式',
@@ -751,29 +606,21 @@ export default {
ch9329DescriptorWarning: '保存会写入 CH9329 参数;需要重新上电或重新插拔后才会变化',
ch9329StringLengthWarning: 'CH9329 字符串最长为 23 字节',
otgHidProfile: 'OTG 功能',
otgHidProfileDesc: '选择对目标主机暴露的 USB 功能',
otgFunctionKeyboard: '键盘',
otgFunctionKeyboard: '标准键盘',
otgFunctionKeyboardDesc: '标准 HID 键盘设备',
otgKeyboardLeds: '键盘状态灯',
otgKeyboardLedsDesc: '启用 Caps/Num/Scroll 状态灯回读',
otgFunctionMouseRelative: '相对鼠标',
otgFunctionMouseRelativeDesc: '传统鼠标移动HID 启动鼠标)',
otgFunctionMouseAbsolute: '绝对鼠标',
otgFunctionMouseAbsoluteDesc: '绝对定位(类似触控)',
otgFunctionMouseRelative: '相对定位鼠标',
otgFunctionMouseAbsolute: '绝对定位鼠标',
otgFunctionConsumer: '多媒体键盘',
otgFunctionConsumerDesc: '音量/播放/暂停等多媒体按键',
otgFunctionMsd: '虚拟媒体MSD',
otgFunctionMsdDesc: '向目标主机暴露 USB 存储',
otgProfileWarning: '保存后 USB 设备会重新连接;若控制器不支持当前组合,将显示失败并恢复原配置',
otgFunctionMinWarning: '请至少启用一个 HID 功能后再保存',
otgNetwork: 'USB 虚拟网卡',
otgNetwork: 'USB 虚拟网卡桥接',
otgRuntimeDegraded: 'OTG 运行时处于降级状态',
otgNetworkDesc: '桥接到现有上联网卡',
otgNetworkDriver: '目标机驱动模式',
otgNetworkInterface: '桥接网卡',
otgNetworkNone: '无',
otgDescriptor: 'USB 设备描述符',
otgDescriptorDesc: '配置 USB 设备标识信息',
vendorId: '厂商 ID (VID)',
productId: '产品 ID (PID)',
manufacturer: '制造商',
@@ -789,7 +636,6 @@ export default {
overall: '总体状态',
ok: '正常',
hasIssues: '存在问题',
summary: '问题统计',
counts: '错误 {errors},警告 {warnings}',
groupCounts: '通过 {ok},警告 {warnings},错误 {errors}',
notRun: '未执行',
@@ -871,7 +717,7 @@ export default {
none: '无',
},
usbDevices: {
title: 'USB 设备',
title: 'USB 设备复位',
desc: '查看已连接的 USB 设备,可通过复位恢复异常设备',
refresh: '刷新',
loadFailed: '加载 USB 设备列表失败',
@@ -886,34 +732,21 @@ export default {
resetAction: '确认复位',
},
webrtcSettings: 'WebRTC 信令',
webrtcSettingsDesc: '配置 STUN/TURN 服务器以辅助 NAT 穿透',
publicIceServersHint: '留空将使用 Google 公共 STUN 服务器TURN 服务器需自行部署',
webrtcSettingsDesc: '配置 STUN/TURN 服务器保存后WebRTC 会话新建立时生效',
stunServer: 'STUN 服务器',
stunServerPlaceholder: 'stun:stun.l.google.com:19302',
stunServerHint: '留空将使用 Google 公共 STUN 服务器',
turnServer: 'TURN 服务器',
turnServerPlaceholder: 'turn:turn.example.com:3478',
turnServerHint: 'P2P 连接失败时进行流量中继',
turnUsername: 'TURN 用户名',
turnPassword: 'TURN 密码',
turnCredentialsHint: '用于 TURN 服务器身份验证的凭据',
iceConfigNote: '更改后将在下一次 WebRTC 会话建立时生效',
},
virtualKeyboard: {
title: '虚拟键盘',
attach: '固定',
detach: '浮动',
hide: '隐藏',
show: '显示虚拟键盘',
layoutSelect: '键盘布局',
osWindows: 'Windows',
osMac: 'Mac',
osAndroid: 'Android',
mediaKeys: '多媒体键盘',
},
config: {
applied: '配置已应用',
applyFailed: '配置应用失败',
loadDevicesFailed: '加载设备列表失败',
updateFailed: '更新失败',
},
@@ -926,9 +759,6 @@ export default {
online: '在线',
offline: '离线',
connecting: '连接中...',
version: '版本',
uptime: '运行时间',
running: '运行中',
format: '格式',
resolution: '分辨率',
fps: '帧率',
@@ -936,10 +766,7 @@ export default {
fpsActual: '实际帧率',
fpsStaticHint: '画面静止时会自动降帧',
paused: '已暂停',
clients: '客户端',
backend: '后端',
mouse: '鼠标',
mouseSupport: '鼠标支持',
currentMode: '当前模式',
absolute: '绝对定位',
relative: '相对定位',
@@ -947,21 +774,14 @@ export default {
networkError: '网络错误',
disconnected: '已断开',
hidUnavailable: 'HID不可用',
sampleRate: '采样率',
channels: '声道',
quality: '质量',
streaming: '传输中',
off: '关闭',
defaultDevice: '默认',
notConnected: '未连接',
connected: '已连接',
image: '镜像',
msdStatus: '状态',
msdStandby: '空闲',
msdImageMode: '镜像模式',
msdDriveMode: '虚拟U盘',
msdMultiMode: '多媒体:{count} 个已挂载',
msdMountType: '挂载类型',
msdCurrentImage: '当前镜像',
msdNoImage: '无',
},
@@ -977,21 +797,18 @@ export default {
autoStart: '开机自启',
thirdPartyAccess: {
title: '第三方接入',
desc: '集中配置 RustDesk、VNC 与 RTSP',
},
viewLogs: '查看日志',
noLogs: '暂无日志',
binaryNotFound: '未找到 {path},请先安装对应程序',
remoteAccess: {
title: '远程访问',
desc: 'GOSTC/FRPC 内网穿透与 Easytier 组网',
},
ttyd: {
title: 'Ttyd 网页终端',
desc: '通过 ttyd 提供网页终端访问',
open: '打开终端',
openInNewTab: '在新标签页打开',
port: '端口',
shell: 'Shell',
},
gostc: {
@@ -1013,11 +830,10 @@ export default {
peers: '对等节点',
addPeer: '添加节点',
virtualIp: '虚拟 IP',
virtualIpHint: '留空则自动分配,手动指定需包含网段(如 10.0.0.1/24',
},
frpc: {
title: 'FRPC 内网穿透',
desc: '通过 FRP 客户端连接 frps 服务',
desc: '通过 FRP 客户端实现内网穿透',
quickConfig: '快速配置',
fullConfig: '完整配置',
fullConfigHint: '可在此粘贴供应商 TOML 配置文件',
@@ -1044,8 +860,7 @@ export default {
},
rustdesk: {
title: 'RustDesk 远程',
desc: '使用 RustDesk 客户端进行远程访问',
serverSettings: '服务器设置',
desc: '配置 RustDesk 服务,将会锁定所选编码',
rendezvousServer: 'ID 服务器',
rendezvousServerPlaceholder: 'hbbs.example.com:21116',
rendezvousServerRequired: '请填写 RustDesk ID 服务器',
@@ -1053,10 +868,8 @@ export default {
relayServerPlaceholder: 'hbbr.example.com:21117',
relayKey: '中继密钥',
codec: '编码格式',
codecHint: 'RustDesk 启动前需选择 H.264 或 H.265;运行时会锁定编码,不允许客户端切换。',
deviceInfo: '设备信息',
deviceId: '设备 ID',
deviceIdHint: '此 ID 用于 RustDesk 客户端连接',
devicePassword: '设备密码',
showPassword: '显示密码',
hidePassword: '隐藏密码',
@@ -1064,8 +877,6 @@ export default {
regeneratePassword: '重新生成密码',
confirmRegenerateId: '确定要重新生成设备 ID 吗?现有客户端需要使用新 ID 重新连接。',
confirmRegeneratePassword: '确定要重新生成设备密码吗?现有客户端需要使用新密码重新连接。',
serviceStatus: '服务状态',
rendezvousStatus: '注册状态',
registered: '已注册',
connected: '已连接',
disconnected: '未连接',
@@ -1074,21 +885,16 @@ export default {
notInitialized: '未初始化',
copyId: '复制 ID',
copyPassword: '复制密码',
copied: '已复制',
keypairGenerated: '密钥对已生成',
noKeypair: '密钥对未生成',
},
rtsp: {
title: 'RTSP 视频流',
desc: '配置 RTSP 推流服务H.264/H.265',
desc: '配置 RTSP 推流服务,将会锁定所选编码',
bind: '监听地址',
bindHint: '填写 IPv4 或 IPv6 地址;端口请在端口字段配置。',
port: '端口',
path: '流路径',
pathPlaceholder: 'live',
pathHint: '访问路径,例如 rtsp://设备IP:8554/live',
codec: '编码格式',
codecHint: 'RTSP 运行时会锁定为所选编码;若 RustDesk 已运行,只能选择相同编码。',
allowOneClient: '仅允许单客户端',
username: '用户名',
usernamePlaceholder: '留空表示无需认证',
@@ -1098,44 +904,31 @@ export default {
},
vnc: {
title: 'VNC 远程',
desc: '通过 TigerVNC 客户端访问',
desc: '配置 VNC 服务,将会锁定所选编码',
bind: '监听地址',
bindHint: '填写 IPv4 或 IPv6 地址;端口请在端口字段配置。',
port: '端口',
encoding: '视频编码',
encodingTightJpeg: 'Tight JPEG',
encodingH264: 'H.264',
encodingHint: 'VNC 运行时会锁定编码H.265 锁定时 VNC 无法启动MJPEG 锁定时 RTSP 与 RustDesk 无法启动。',
allowOneClient: '仅允许单客户端',
password: '密码',
passwordPlaceholder: '留空表示不修改',
passwordRequiredPlaceholder: '最多 8 个字符',
passwordRequired: '请设置 VNC 密码',
passwordMaxLength: 'VNC 密码最多 8 个字符',
passwordSaved: '已保存密码;留空不会修改。',
clients: '{count} 个客户端',
urlPreview: 'VNC 地址预览',
},
},
stats: {
title: '连接统计',
current: '当前状态',
video: '视频',
videoDesc: '从服务器到客户端的视频流。',
video: '视频信息',
stability: '网络稳定性',
stabilityDesc: '入站视频数据包在网络中的平稳程度。',
jitter: '抖动',
delay: '播放延迟',
delayDesc: '为平滑不均匀到达的帧而由抖动缓冲添加的延迟。',
packetLoss: '丢包',
packetLossDesc: '入站视频 RTP 数据包的丢失数量。',
total: '个',
frameRate: '帧率',
frameRateDesc: '每秒显示的入站视频帧数。',
additional: '其他信息',
latency: 'ICE 延迟',
bitrate: '码率',
fps: '帧率',
resolution: '分辨率',
packetsLost: '丢包数',
connection: '连接信息',
@@ -1147,23 +940,9 @@ export default {
relay: 'TURN 中继',
},
help: {
flashMode: 'Flash 模式将镜像作为 U 盘挂载,支持大多数 BIOS 启动',
cdromMode: 'CDROM 模式将镜像作为光驱挂载,适用于需要光盘启动的系统',
readOnlyMode: '只读模式更安全,目标系统无法修改镜像内容',
readWriteMode: '读写模式允许目标系统写入数据,适用于需要保存配置的场景',
driveSize: '虚拟驱动器大小。较大的驱动器支持存放更多文件,但初始化时间更长',
mjpegMode: 'MJPEG 模式兼容性最好,适用于所有浏览器,但延迟较高',
webrtcMode: 'WebRTC 模式延迟更低,但需要浏览器支持相应编解码器',
videoBitratePreset: '速度优先:最低延迟,适合网络较差的场景;均衡:画质和延迟平衡;质量优先:最佳画质,需要较好的网络带宽',
encoderBackend: '硬件编码器性能更好功耗更低,软件编码器兼容性更好',
absoluteMode: '绝对定位模式直接映射鼠标坐标,适用于大多数场景',
relativeMode: '相对定位模式发送鼠标移动增量,适用于游戏或特殊软件',
mouseThrottle: '发送间隔控制鼠标事件的发送频率,较大的值可减少网络负载',
hidBackend: 'OTG 后端需要硬件支持 USB OTGCH9329 是串口 HID 芯片方案',
atxActiveLevel: '活跃电平取决于您的硬件接线方式。高电平表示触发时输出高电压,低电平相反',
wolInterface: '用于发送 Wake-on-LAN 魔术包的网络接口名称,如 eth0 或 br0',
stunServer: 'STUN 服务器用于 NAT 穿透,帮助建立 P2P 连接。留空使用公共服务器',
turnServer: 'TURN 服务器在 P2P 连接失败时提供中继。需要更多带宽但连接更可靠',
audioQuality: '更高的质量意味着更好的音频效果,但需要更多的网络带宽',
},
}