Files
One-KVM/web/src/i18n/en-US.ts

1096 lines
46 KiB
TypeScript

export default {
common: {
loading: 'Loading...',
save: 'Save',
cancel: 'Cancel',
confirm: 'Confirm',
delete: 'Delete',
upload: 'Upload',
download: 'Download',
refresh: 'Refresh',
close: 'Close',
success: 'Success',
error: 'Error',
warning: 'Warning',
info: 'Info',
yes: 'Yes',
no: 'No',
on: 'On',
off: 'Off',
enabled: 'Enabled',
disabled: 'Disabled',
later: 'Later',
restartNow: 'Restart Now',
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',
},
toast: {
closeNotification: 'Dismiss notification',
notificationsRegion: 'Notifications',
},
api: {
operationFailed: 'Operation Failed',
operationFailedDesc: 'Operation failed',
parseResponseFailed: 'Failed to parse response',
networkError: 'Network Error',
networkErrorDesc: 'Unable to connect to server. Please check your connection.',
},
nav: {
console: 'Console',
msd: 'Virtual Media',
settings: 'Settings',
logout: 'Logout',
},
auth: {
login: 'Login',
logout: 'Logout',
username: 'Username',
password: 'Password',
enterUsername: 'Enter username',
enterPassword: 'Enter password',
loginFailed: 'Login failed',
invalidPassword: 'Invalid username or password',
systemNotInitialized: 'System not initialized. Complete setup first.',
changePassword: 'Change Password',
currentPassword: 'Current Password',
currentPasswordPlaceholder: 'Enter current password',
newPassword: 'New Password',
newPasswordPlaceholder: 'Enter new password',
confirmPassword: 'Confirm Password',
confirmPasswordPlaceholder: 'Re-enter new password',
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',
forgotPasswordHint:
'Forgot your password? On the host running One-KVM, open a terminal and run one-kvm user set-password, then enter and confirm the new password when prompted.',
},
status: {
connected: 'Connected',
connecting: 'Connecting',
disconnected: 'Disconnected',
error: 'Error',
},
actionbar: {
paste: 'Paste Text',
virtualMedia: 'Virtual Media',
virtualMediaTip: 'Manage virtual media devices',
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',
extension: 'Extension',
extensionTip: 'Extension features',
stats: 'Stats',
statsTip: 'View connection statistics',
settings: 'Settings',
settingsTip: 'System settings',
fullscreen: 'Fullscreen',
fullscreenTip: 'Toggle fullscreen mode',
videoConfig: 'Video',
streamSettings: 'Stream Settings',
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',
videoDevice: 'Device',
videoFormat: 'Format',
videoResolution: 'Resolution',
videoFps: 'Frame Rate',
selectDevice: 'Select device...',
selectFormat: 'Select format...',
selectResolution: 'Select resolution...',
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',
notRecommended: 'Not Recommended',
multiSourceCodecLocked: '{sources} are enabled. Current codec is locked.',
multiSourceVideoParamsWarning: '{sources} are enabled. Changing video device and input parameters will interrupt the stream.',
hidConfig: 'HID',
mouseSettings: 'Mouse Settings',
hidDeviceSettings: 'HID Device Settings',
positioningMode: 'Positioning Mode',
sendInterval: 'Send Interval',
showCursor: 'Show Cursor',
backend: 'Backend',
devicePath: 'Device Path',
baudrate: 'Baudrate',
absolute: 'Absolute',
relative: 'Relative',
applying: 'Applying...',
audioConfig: 'Audio',
playbackControl: 'Playback',
volume: 'Volume',
mute: 'Mute',
audioDeviceSettings: 'Device Settings',
audioEnabled: 'Audio',
audioDevice: 'Device',
audioQuality: 'Quality',
qualityVoice: 'Voice',
qualityBalanced: 'Balanced',
qualityHigh: 'High',
selectAudioDevice: 'Select device...',
},
infobar: {
keys: 'Keys',
pointer: 'Pointer',
caps: 'Caps',
num: 'Num',
scroll: 'Scroll',
keyboardLedUnavailable: 'Keyboard LED status is disabled or unsupported',
},
paste: {
title: 'Paste Text',
description: 'Enter text to send to remote host as keyboard input',
label: 'Text Content',
placeholder: 'Enter text to paste here...',
hint: 'Press Ctrl+Enter to send quickly',
confirm: 'Send',
typing: 'Typing...',
escToCancel: 'Press Esc to cancel',
stop: 'Stop',
untypableWarning: 'Some characters cannot be typed',
untypableChars: 'Untypable characters: {chars}',
},
atx: {
title: 'Power Control',
description: 'Control remote host power state',
powerState: 'Power State',
stateOn: 'On',
stateOff: 'Off',
stateUnknown: 'Unknown',
shortPress: 'Power (Short)',
longPress: 'Power (Long/Force Off)',
reset: 'Reset',
confirmShortTitle: 'Confirm Power Press',
confirmShortDesc: 'This will simulate pressing the power button, same as a physical short press.',
confirmLongTitle: 'Confirm Force Power Off',
confirmLongDesc: 'This will force power off the host, which may cause data loss. Are you sure?',
confirmResetTitle: 'Confirm Reset',
confirmResetDesc: 'This will reset the host, which may cause unsaved data loss. Are you sure?',
wol: 'Wake-on-LAN',
wolDescription: 'Send Wake-on-LAN magic packet to power on a remote machine.',
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',
usernameHint: 'Username must be at least 2 characters',
setPassword: 'Set Admin Password',
passwordHint: 'Password must be at least 4 characters',
confirmPassword: 'Confirm Password',
passwordMismatch: 'Passwords do not match',
videoDevice: 'Video Device',
selectVideoDevice: 'Select video capture device',
videoFormat: 'Video Format',
selectFormat: 'Select format',
resolution: 'Resolution',
selectResolution: 'Select resolution',
fps: 'Frame Rate',
selectFps: 'Select FPS',
noVideoDevices: 'No video devices detected',
noSignalDetected: 'No HDMI signal detected. Please connect an HDMI cable and refresh.',
refreshDevices: 'Refresh Devices',
audioDevice: 'Audio Device',
selectAudioDevice: 'Select audio capture device',
noAudio: 'No audio',
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',
baudRate: 'Baud Rate',
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',
encoderHint: 'The default "Auto" option works for most cases. Only change if you need a specific encoder backend.',
autoRecommended: 'Auto (Recommended)',
hardware: 'Hardware',
software: 'Software',
progress: 'Step {current} of {total}',
ch9329Help: 'CH9329 is a serial-to-HID chip connected via serial port. Works with most hardware configurations.',
otgHelp: 'USB OTG mode emulates HID devices directly through USB Device Controller. Requires hardware OTG support.',
otgLowEndpointHint: 'Detected low-endpoint UDC; Consumer Control Keyboard will be disabled automatically.',
videoDeviceHelp: 'Select the video capture device for capturing the remote host display. Usually an HDMI capture card.',
videoFormatHelp: 'MJPEG has best compatibility. H.264/H.265 uses less bandwidth but requires encoding support.',
stepExtensions: 'Extensions',
extensionsDescription: 'Choose which extensions to auto-start',
ttydTitle: 'Web Terminal (ttyd)',
ttydDescription: 'Access device command line in browser',
extensionsHint: 'These settings can be changed later in Settings',
notInstalled: 'Not installed',
passwordStrength: 'Password Strength',
passwordWeak: 'Weak',
passwordMedium: 'Medium',
passwordStrong: 'Strong',
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
// fine-grained diagnostic sub-text.
signal: {
noSignal: {
title: 'Waiting for video signal',
detail: 'Capture device is ready, waiting for the target to output video',
},
deviceLost: {
title: 'Video device offline',
detail: 'Capture card is not responding, attempting to re-detect…',
},
audioDeviceLost: {
title: 'Audio device offline',
detail: 'Reconnecting the audio capture device…',
},
deviceBusy: {
title: 'Video channel busy',
detail: 'Applying a new configuration or another component is using the device, please wait…',
},
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.',
},
uvc_capture_stall: {
title: 'UVC capture stalled',
detail: 'Check the device connection. If already connected, try changing the capture format and resetting the device.',
},
reason: {
no_cable: 'HDMI cable not detected — check the cable and that the target is powered on',
no_sync: 'Unstable signal: timings could not be locked — try a lower resolution or refresh rate',
out_of_range: 'Resolution or refresh rate exceeds capture capability — try 1080p60 or below',
no_signal: 'Capture card is ready, waiting for a picture…',
recovering: 'Reconnecting the video device automatically',
device_lost: 'Video node disappeared, waiting for the driver to recover',
config_changing: 'Applying new configuration',
mode_switching: 'Switching video mode',
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.',
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...',
webrtcPhaseCreateOffer: 'Creating local offer...',
webrtcPhaseWaitAnswer: 'Waiting for remote answer...',
webrtcPhaseSetRemote: 'Applying remote description...',
webrtcPhaseApplyIce: 'Applying ICE candidates...',
webrtcPhaseNegotiating: 'Negotiating secure connection...',
mjpegPhaseWebsocket: 'Connecting control channel...',
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',
hidDeviceMissing: 'HID gadget device node is missing, try restarting HID service',
notOpened: 'HID device is not open, try restarting HID service',
portNotFound: 'Serial port not found, check CH9329 wiring and device path',
noResponse: 'No response from CH9329, check baud rate and power',
noResponseWithCmd: 'No response from CH9329, check baud rate and power (cmd {cmd})',
invalidConfig: 'Serial port parameters are invalid, check device path and baud rate',
protocolError: 'CH9329 replied with invalid protocol data',
deviceDisconnected: 'HID device disconnected, check cable and host port',
ioError: 'I/O communication error detected',
otgIoError: 'OTG link is unstable, check USB cable and host port',
ch9329IoError: 'CH9329 serial link is unstable, check wiring and power',
serialError: 'Serial communication error, check CH9329 wiring and config',
initFailed: 'CH9329 initialization failed, check serial settings and power',
shutdown: 'HID backend has stopped',
},
},
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',
images: 'ISO/IMG Mount',
imagesDesc: 'Mount ISO/IMG images to target device',
drive: 'Virtual USB',
driveDesc: 'Transfer files to target device like a USB drive, supports Ventoy boot',
imageList: 'Image List',
uploadImage: 'Upload Image',
noImages: 'No images',
connect: 'Connect',
disconnect: 'Disconnect',
connectedTo: 'Connected to',
cdrom: 'CD-ROM',
flash: 'Flash',
storageMode: 'Storage Mode',
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',
driveSize: 'Drive Size',
usedSpace: 'Used',
freeSpace: 'Free',
deleteDrive: 'Delete Drive',
confirmDeleteDrive: 'Are you sure you want to delete the virtual drive? All files will be erased.',
driveDeleted: 'Drive deleted',
systemAvailable: 'System Available',
emptyFolder: 'Empty folder',
confirmDelete: 'Are you sure you want to delete "{name}"?',
folderName: 'Folder name',
uploadImageHint: 'Click to upload ISO/IMG',
imageMounted: 'Image {name} mounted',
imageUnmounted: 'Image unmounted',
downloadFromUrl: 'Download from URL',
downloadFromUrlDesc: 'Enter the URL of an image file (ISO/IMG supported)',
url: 'URL',
filename: 'Filename',
filenameAutoDetect: 'Auto-detect from URL',
download: 'Download',
downloadComplete: 'Download complete',
downloadFailed: 'Download failed',
largeFileWarning: '>2.2GB',
largeFileTooltip: 'File is larger than 2.2GB, please use Flash mode to mount',
error: 'MSD Error',
errorDesc: '{reason}',
recovered: 'MSD Recovered',
recoveredDesc: 'MSD operation completed successfully',
operationInProgress: 'Operation in progress, please wait',
driveConnected: 'Virtual USB drive connected',
imageConnected: 'Image {name} connected',
selectDriveSize: 'Select virtual drive size',
selectedSize: 'Selected size',
customSize: 'Custom size',
driveSizeHint: 'Custom size overrides selection above (64MB - 32GB)',
driveCreated: 'Virtual drive created ({size} MB)',
fileDeleted: 'File deleted',
imageDeleted: 'Image deleted',
},
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',
msd: 'MSD',
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 keyboard and mouse backend with USB gadget descriptors',
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',
aboutSubtitle: 'Online upgrade, version info and hardware overview',
extTtydSubtitle: 'Open a host Shell terminal in the browser',
extRustdeskSubtitle: 'Remote graphical access via RustDesk',
extRtspSubtitle: 'Provide an RTSP video stream for external clients',
extRemoteAccessSubtitle: 'Remote access through NAT-traversal services',
aboutDesc: 'Open and Lightweight IP-KVM Solution',
deviceInfo: 'Device Info',
deviceInfoDesc: 'Host system information',
hostname: 'Hostname',
cpuModel: 'Processor / Platform',
cpuUsage: 'CPU Usage',
memoryUsage: 'Memory Usage',
networkAddresses: 'Network Addresses',
language: 'Language',
theme: 'Theme',
lightMode: 'Light',
darkMode: 'Dark',
systemMode: 'System',
changePassword: 'Change Password',
currentPassword: 'Current Password',
newPassword: 'New Password',
usernameDesc: 'Change the console login username',
passwordDesc: 'Change the console login password',
version: 'Version',
buildInfo: 'Build Info',
detectDevices: 'Detect Devices',
detecting: 'Detecting...',
networkSettings: 'Network Settings',
msdSettings: 'MSD Settings',
atxSettings: 'ATX 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 API',
redfishDesc: 'DMTF Redfish standard management interface',
redfishEnabled: 'Enable Redfish API',
redfishEnabledDesc: 'When enabled, the standard Redfish management interface is available at /redfish/v1/',
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',
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.',
sslCertCustom: 'Custom Certificate',
sslCertSelfSigned: 'Self-Signed',
sslCertActive: 'Custom certificate is active',
sslCertClear: 'Revert to Self-Signed',
sslCertSave: 'Save Certificate',
sslCertPem: 'Certificate (.crt / .pem)',
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',
restartMessage: 'Web server configuration saved. A restart is required for changes to take effect.',
restarting: 'Restarting...',
autoRestarting: 'Restarting automatically',
autoRestartingDesc: 'Configuration saved. Will redirect to the new address once the service is back...',
autoRestartingHttpsDesc: 'Service is restarting. A redirect link will appear in {sec}s...',
autoRestartFailed: 'Auto-restart timed out. Please refresh the page or check the service status.',
httpsManualRedirectTitle: 'Click the link below to open the new address',
httpsManualRedirectDesc: 'HTTPS with a self-signed certificate requires browser approval. Click the link and choose "Proceed" on the security warning.',
onlineUpgrade: 'Online Upgrade',
onlineUpgradeDesc: 'Check and upgrade One-KVM',
updateChannel: 'Update Channel',
currentVersion: 'Current Version',
latestVersion: 'Latest Version',
updateStatus: 'Update Status',
updateStatusIdle: 'Idle',
releaseNotes: 'Release Notes',
noUpdates: 'No new version available for current channel',
startUpgrade: 'Start Upgrade',
updatePhaseIdle: 'Idle',
updatePhaseChecking: 'Checking',
updatePhaseDownloading: 'Downloading',
updatePhaseVerifying: 'Verifying',
updatePhaseInstalling: 'Installing',
updatePhaseRestarting: 'Restarting',
updatePhaseSuccess: 'Success',
updatePhaseFailed: 'Failed',
updateMsgChecking: 'Checking for updates',
updateMsgDownloading: 'Downloading binary',
updateMsgVerifying: 'Verifying (SHA256)',
updateMsgInstalling: 'Replacing binary',
updateMsgRestarting: 'Restarting service',
auth: 'Access',
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.',
atxSettingsDesc: 'Configure ATX power control hardware bindings',
atxEnable: 'Enable ATX Control',
atxEnableDesc: 'Enable remote control of power and reset buttons',
atxPowerButton: 'Power Button',
atxPowerButtonDesc: 'For power on (short press) and force off (long press)',
atxResetButton: 'Reset Button',
atxResetButtonDesc: 'For resetting the target machine',
atxDriver: 'Driver Type',
atxDriverNone: 'Disabled',
atxDriverGpio: 'GPIO',
atxDriverUsbRelay: 'USB LCUS HID Relay',
atxDriverSerial: 'USB LCUS Serial Relay',
atxDevice: 'Device',
atxPin: 'GPIO Pin',
atxChannel: 'Relay Channel',
atxSharedSerialBaudHint: 'When Power and Reset share one serial relay device, baud rate is controlled by the first config',
atxActiveLevel: 'Active Level',
atxLevelHigh: 'Active High',
atxLevelLow: 'Active Low',
atxLedSensing: 'LED Status Sensing',
atxLedSensingDesc: 'Detect host power LED to determine power state (optional)',
atxLedEnable: 'Enable LED Sensing',
atxLedEnableDesc: 'Read power LED status via GPIO',
atxLedChip: 'GPIO Chip',
atxLedPin: 'GPIO Pin',
atxLedInverted: 'Invert Logic',
atxLedInvertedDesc: 'GPIO is low when LED is on',
atxWolSettings: 'Wake-on-LAN Settings',
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',
videoSettings: 'Video Capture',
videoSettingsDesc: 'Configure capture device format, resolution and frame rate',
videoDevice: 'Video Device',
selectDevice: 'Select device...',
videoFormat: 'Video Format',
selectFormat: 'Select format...',
driver: 'Driver',
resolution: 'Resolution',
frameRate: 'Frame Rate',
encoderBackend: 'Video Encoder',
encoderBackendDesc: 'Select the encoder backend used for WebRTC streaming',
backend: 'Backend',
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 keyboard and mouse control',
hidBackend: 'HID Backend',
serialDevice: 'Serial Device',
baudRate: 'Baud Rate',
otgHidProfile: 'OTG HID Functions',
otgHidProfileDesc: 'Select which HID functions are exposed to the host',
otgEndpointBudget: 'Max Endpoints',
otgEndpointBudgetUnlimited: 'Unlimited',
otgEndpointBudgetHint: 'This is a hardware limit. If the OTG selection exceeds the real hardware endpoint count, OTG will fail.',
otgEndpointUsage: 'Endpoint usage: {used} / {limit}',
otgEndpointUsageUnlimited: 'Endpoint usage: {used} / unlimited',
otgEndpointExceeded: 'The current OTG selection needs {used} endpoints, exceeding the limit {limit}.',
otgFunctionKeyboard: '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)',
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: 'Changing HID functions will reconnect the USB device',
otgLowEndpointHint: 'Low-endpoint UDC detected; Consumer Control Keyboard will be disabled automatically.',
otgFunctionMinWarning: 'Enable at least one HID function before saving',
otgDescriptor: 'USB Device Descriptor',
otgDescriptorDesc: 'Configure USB device identification',
vendorId: 'Vendor ID (VID)',
productId: 'Product ID (PID)',
manufacturer: 'Manufacturer',
productName: 'Product Name',
serialNumber: 'Serial Number',
serialNumberAuto: 'Auto-generated',
descriptorWarning: 'Changing these settings will reconnect the USB device',
otgSelfCheck: {
title: 'OTG Self-Check',
desc: 'Check UDC, gadget binding, and link status',
run: 'Run Self-Check',
failed: 'Failed to run OTG self-check',
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',
status: {
ok: 'Healthy',
warn: 'Warning',
error: 'Error',
skipped: 'Skipped',
},
groups: {
udc: 'UDC Basics',
gadgetConfig: 'Gadget Config',
oneKvm: 'one-kvm Gadget',
functions: 'Functions & Nodes',
link: 'Link State',
},
values: {
missing: 'Missing',
notConfigured: 'Not configured',
mounted: 'Mounted',
unmounted: 'Unmounted',
available: 'Available',
unavailable: 'Unavailable',
exists: 'Exists',
none: 'None',
unbound: 'Unbound',
noConflict: 'No conflict',
conflict: 'Conflict',
unknown: 'Unknown',
normal: 'Normal',
abnormal: 'Abnormal',
},
selectedUdc: 'Target UDC',
boundUdc: 'Bound UDC',
messages: {
udc_dir_exists: 'UDC directory check',
udc_has_entries: 'UDC check',
configfs_mounted: 'configfs check',
usb_gadget_dir_exists: 'usb_gadget check',
libcomposite_loaded: 'libcomposite check',
one_kvm_gadget_exists: 'one-kvm gadget check',
other_gadgets: 'Other gadget check',
configured_udc_valid: 'Configured UDC check',
one_kvm_bound_udc: 'Bound UDC check',
hid_functions_present: 'HID function check',
config_c1_exists: 'configs/c.1 check',
function_links_ok: 'Function link check',
hid_device_nodes: 'HID node check',
udc_conflict: 'UDC conflict check',
udc_state: 'UDC state check',
udc_speed: 'UDC speed check',
},
hints: {
udc_dir_exists: 'Ensure UDC/OTG kernel drivers are enabled',
udc_has_entries: 'Ensure OTG controller is enabled in device tree',
configfs_mounted: 'Try: mount -t configfs none /sys/kernel/config',
usb_gadget_dir_exists: 'Ensure configfs and USB gadget support are enabled',
libcomposite_loaded: 'Try: modprobe libcomposite',
one_kvm_gadget_exists: 'Enable OTG HID or MSD to let one-kvm gadget be created automatically',
other_gadgets: 'Potential UDC contention with one-kvm; check other OTG services',
configured_udc_valid: 'Please reselect UDC in HID OTG settings',
one_kvm_bound_udc: 'Ensure HID/MSD is enabled and initialized successfully',
hid_functions_present: 'Check OTG HID config and enable at least one HID function',
config_c1_exists: 'Gadget structure is incomplete; try restarting One-KVM',
function_links_ok: 'Reinitialize OTG (toggle HID backend once or restart service)',
hid_device_nodes: 'Ensure gadget is bound and check kernel logs',
udc_conflict: 'Stop other OTG services or switch one-kvm to an idle UDC',
udc_state: 'Ensure target host is connected and has recognized the USB device',
udc_speed: 'Device may not be fully enumerated; try reconnecting USB',
},
},
encoderSelfCheck: {
title: 'Hardware Encoding Capability Test',
desc: 'Test hardware encoding capability across 720p, 1080p, 2K, and 4K',
run: 'Start Test',
failed: 'Failed to run hardware encoding capability test',
resolution: 'Resolution',
currentHardwareEncoder: 'Current Hardware Encoder',
none: 'None',
},
usbDevices: {
title: 'USB Devices',
desc: 'View connected USB devices and reset them to recover from errors',
refresh: 'Refresh',
loadFailed: 'Failed to load USB device list',
noDevices: 'No USB devices found',
colDevice: 'Device',
colSpeed: 'Speed',
colVideo: 'Video',
colAction: 'Action',
reset: 'Reset',
resetConfirmTitle: 'Confirm USB Device Reset',
resetConfirmDesc: 'This will reset USB device "{device}" by cycling its authorized attribute. All connections to this device will be temporarily interrupted. Continue?',
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',
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',
turnPasswordConfigured: 'A password is already saved. Leave empty to keep the current 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',
},
statusCard: {
device: 'Device',
video: 'Video',
hid: 'HID',
audio: 'Audio',
msd: 'MSD',
online: 'Online',
offline: 'Offline',
connecting: 'Connecting...',
version: 'Version',
uptime: 'Uptime',
running: 'Running',
format: 'Format',
resolution: 'Resolution',
fps: 'FPS',
fpsTarget: 'Target FPS',
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',
channel: 'Channel',
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',
msdMountType: 'Mount Type',
msdCurrentImage: 'Current Image',
msdNoImage: 'None',
},
extensions: {
available: 'Available',
unavailable: 'Unavailable',
running: 'Running',
starting: 'Starting',
stopped: 'Stopped',
failed: 'Failed',
start: 'Start',
stop: 'Stop',
autoStart: 'Auto Start',
viewLogs: 'View Logs',
noLogs: 'No logs available',
binaryNotFound: '{path} not found, please install the required program',
remoteAccess: {
title: 'Remote Access',
desc: 'GOSTC 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: {
title: 'GOSTC NAT Traversal',
desc: 'NAT traversal via GOSTC',
addr: 'Server Address',
addrPlaceholder: 'Hostname or IP (required)',
key: 'Client Key',
tls: 'Enable TLS',
},
easytier: {
title: 'Easytier Network',
desc: 'P2P VPN networking via EasyTier',
networkName: 'Network Name',
networkSecret: 'Network Secret',
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)',
},
rustdesk: {
title: 'RustDesk Remote',
desc: 'Remote access via RustDesk client',
serverSettings: 'Server Settings',
rendezvousServer: 'ID Server',
rendezvousServerPlaceholder: 'hbbs.example.com:21116',
rendezvousServerHint: 'Configure your RustDesk server address (port optional, defaults to 21116)',
relayServer: 'Relay Server',
relayServerPlaceholder: 'hbbr.example.com:21117',
relayServerHint: 'Relay server address (port optional, defaults to 21117). Auto-derived if empty',
relayKey: 'Relay Key',
relayKeyPlaceholder: 'e.g. pLU0pEj2IZnNVKzrIO1pIdwGA3dOVJJLkFIYGOCGH1E=',
relayKeySet: 'Saved (32-byte Base64, usually 44 chars; leave empty and save to keep)',
relayKeyHint: 'Same as hbbs/hbbr -k: standard Base64 decoding to exactly 32 bytes (typically 44 characters including trailing =)',
deviceInfo: 'Device Info',
deviceId: 'Device ID',
deviceIdHint: 'Use this ID in RustDesk client to connect',
devicePassword: 'Device Password',
showPassword: 'Show Password',
hidePassword: 'Hide Password',
regenerateId: 'Regenerate ID',
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',
connecting: 'Connecting',
notConfigured: 'Not Configured',
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)',
bind: 'Bind Address',
port: 'Port',
path: 'Stream Path',
pathPlaceholder: 'live',
pathHint: 'Example: rtsp://device-ip:8554/live',
codec: 'Codec',
codecHint: 'Enabling RTSP locks codec to selected value and disables MJPEG.',
allowOneClient: 'Allow One Client Only',
username: 'Username',
usernamePlaceholder: 'Empty means no authentication',
password: 'Password',
passwordPlaceholder: 'Enter new password',
passwordSet: '••••••••',
passwordHint: 'Leave empty to keep current password; enter a new value to update it.',
urlPreview: 'RTSP URL Preview',
},
},
stats: {
title: 'Connection Stats',
webrtcMode: 'WebRTC Real-time Stats',
mjpegMode: 'MJPEG Real-time Stats',
current: 'Current Status',
video: 'Video',
videoDesc: 'Video stream from server to client.',
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',
wsLatency: 'WS Latency',
connection: 'Connection Info',
connectionType: 'Connection Type',
transport: 'Transport',
localCandidate: 'Local Candidate',
remoteCandidate: 'Remote Candidate',
p2p: 'P2P Direct',
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',
},
}