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

1276 lines
54 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

export default {
hidGuide: {
missingDevice: 'The previous device {device} is unavailable. Check the current selection.',
connectionTimeout: 'Connection timed out. Check the data cable and the controlled computer’s USB port. You can connect later or reconfigure.',
"deviceTitle": "Driver and device",
"features": "Feature configuration",
"saveFeatures": "Save features",
"configure": "Configure driver",
"reconfigure": "Reconfigure",
"driver": "HID driver",
"wiringHelp": "Wiring guide",
"refreshDevices": "Refresh HID devices",
"driver_otg": "USB OTG",
"driver_ch9329": "CH9329",
"driver_bluetooth": "Bluetooth HID",
"driver_none": "Disabled",
"device_otg": "UDC",
"device_ch9329": "Serial port",
"device_bluetooth": "Local Bluetooth adapter",
"host": "Controlled computer",
"hostUsb": "Host USB",
"otgPort": "One-KVM OTG USB",
"serialLink": "CH340 → Serial connection → CH9329",
"integratedCable": "CH340 + CH9329 integrated cable",
"dataCable": "USB data cable",
"wireless": "Bluetooth connection",
"wiring_otg": "One-KVM OTG USB port → USB data cable → controlled computer USB port.",
"wiring_ch9329": "Connect One-KVM to CH9329 over serial, then connect CH9329 USB to the controlled computer.",
"wiring_bluetooth": "On the controlled computer, open System Settings → Add Bluetooth device → select the advertised HID name.",
"disabledHelp": "One-KVM cannot send keyboard or mouse input while HID is disabled.",
"selectDevice": "Select a device",
"noDevices": "No devices found. Check the connection and refresh.",
"nameInvalid": "Use 1–64 UTF-8 bytes without control characters.",
"unconfigured": "HID is not configured",
"disabled": "HID is disabled",
"legacyAuto": "Automatic (legacy configuration)",
"unknown": "Unknown or unable to read status",
"ready": "HID ready",
"preparing": "Connected, preparing HID",
"paired": "Paired, waiting for connection",
"pairing": "Waiting for pairing",
"waiting": "Applied, waiting for connection",
"initializing": "Initializing",
"appliedHelp": "Configuration applied. Closing keeps the configuration and completed pairing.",
"draftHelp": "Choose a driver and device. The running configuration changes only when you apply.",
"dirty": "There are unsaved feature changes. Return to save them, or discard them to continue.",
"returnSave": "Return to save",
"discard": "Discard changes and continue",
"pairInstructions": "Add a Bluetooth device in the controlled computer’s system settings and select “{name}”. The pairing window lasts 120 seconds.",
"pairTimeout": "The pairing window ended. You can open it again.",
"reopenPairing": "Reopen pairing",
"resetWarning": "Previous One-KVM HID bonds will be cleared. Remove the old device on the controlled computer before adding it again.",
"disableUsb": "Leaving USB OTG will disable: {functions}.",
"msd": "Virtual disk",
"network": "USB network",
"audio": "USB audio",
"done": "Done",
"later": "Connect later",
"configureLater": "Configure later",
"useConfiguration": "Use this configuration",
"repair": "Pair again",
"uncertain": "The previous request has an unknown result. Check the connection first; applying again will clear bonds again.",
"checkConnection": "Check applied configuration",
"resumeRetry": "The current configuration differs from the pending selection. Review it and retry."
},
bluetoothHid: {
paired: 'Paired; waiting for the computer to connect keyboard and mouse',
"description": "Classic Bluetooth keyboard and relative mouse.",
"adapter": "Bluetooth adapter",
"name": "Device name",
"peer": "Computer address (optional)",
"peerHelp": "Leave blank to reuse the only bonded device, or select a computer during pairing.",
"ready": "Keyboard and mouse ready",
"pairing": "Pairing open: {seconds}s",
"connected": "Connected; waiting for HID channels",
"waiting": "Waiting for the paired computer",
"unavailable": "Bluetooth unavailable or starting",
"openPairing": "Pair for 2 minutes",
"closePairing": "Close pairing",
"disconnect": "Disconnect",
"forget": "Forget computer",
"windows": "Windows 11: Settings → Bluetooth & devices → Add device → Bluetooth. After forgetting, remove the device in Windows before pairing again.",
"applyFirst": "Apply the HID settings first, then open pairing."
},
videoInput: {
format: 'Input Format',
resolution: 'Resolution',
frameRate: 'Frame Rate',
noSignal: 'No signal',
unavailable: 'Unable to read input status',
refresh: 'Refresh input status',
selectFormat: 'Select format...',
selectResolution: 'Select resolution...',
selectFps: 'Select FPS...',
},
common: {
loading: 'Loading...',
save: 'Save',
cancel: 'Cancel',
confirm: 'Confirm',
delete: 'Delete',
refresh: 'Refresh',
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...',
unknown: 'Unknown',
back: 'Back',
next: 'Next',
apply: 'Apply',
menu: 'Menu',
optional: 'Optional',
notSupportedYet: ' (Not Yet Supported)',
create: 'Create',
creating: 'Creating...',
deleting: 'Deleting...',
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: {
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',
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.',
totpPrompt: 'Enter the code from your authenticator app',
totpCode: 'Authenticator code',
totpCodePlaceholder: '6-digit code',
enterTotpCode: 'Enter a 6-digit authenticator code',
invalidTotpCode: 'The authenticator code is incorrect',
totpChallengeExpired: 'This login attempt has expired. Enter your password again.',
totpRateLimited: 'Too many incorrect codes. Wait one minute, then sign in again.',
verifyAndLogin: 'Verify and login',
backToPassword: 'Back to password',
},
status: {
no_signal: 'No signal',
busy: 'Device busy',
connected: 'Connected',
connecting: 'Connecting',
disconnected: 'Disconnected',
error: 'Error',
},
actionbar: {
muted: 'Muted',
more: 'More actions',
collapseToolbar: 'Collapse toolbar',
expandToolbar: 'Expand toolbar',
paste: 'Paste Text',
micStart: 'Start Transfer',
micStop: 'Stop Transfer',
microphoneTransfer: 'Audio Transfer Settings',
grantMicrophonePermission: 'Allow Microphone Access',
noMicrophoneDevices: 'No audio input devices found',
micState: {
idle: 'Idle',
starting: 'Starting',
streaming: 'Streaming',
stopping: 'Stopping',
error: 'Error',
},
micError: {
'secure-context-required': 'Browsers only allow microphone access on HTTPS pages. Open the console over HTTPS.',
unsupported: 'This browser cannot encode microphone audio with WebCodecs. Use a browser with WebCodecs support.',
'permission-denied': 'Microphone access was denied. Allow it in your browser site permissions.',
'device-unavailable': 'The selected microphone is unavailable. Check the device connection or choose another input.',
'connection-failed': 'Could not connect to USB microphone transfer. Check that UAC is enabled and no other session is active.',
'encoder-failed': 'The browser audio encoder failed and transfer was stopped.',
unknown: 'Microphone transfer failed to start. Check the device and browser permissions.',
},
virtualMedia: 'Virtual Media',
virtualMediaTip: 'Manage virtual media devices',
power: 'Power',
keyboard: 'Virtual Keyboard',
keyboardTip: 'Show virtual keyboard',
webTerminal: 'Web Terminal',
stats: 'Stats',
statsTip: 'View connection statistics',
settings: 'Settings',
settingsTip: 'System settings',
fullscreen: 'Fullscreen',
fullscreenTip: 'Toggle fullscreen mode',
actualSizeAria: 'Display video at original pixel size',
actualSizeTip: 'Display at original pixels',
fitSizeAria: 'Fit video to window',
fitSizeTip: 'Restore fit to window',
videoConfig: 'Video',
streamSettings: 'Stream Settings',
deviceSettings: 'Device Settings',
videoMode: 'Mode',
videoRotation: 'Rotation',
selectMode: 'Select mode...',
videoModeHint: 'HTTP uses more bandwidth but offers broad compatibility; WebRTC has stricter network requirements but uses less bandwidth',
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',
bitrateBalanced: 'Balanced',
bitrateQuality: 'Quality',
browserUnsupported: 'Browser unsupported',
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: 'Audio Playback Settings',
volume: 'Volume',
audioDeviceSettings: 'Device Settings',
audioEnabled: 'Audio',
audioDevice: 'Audio Input Device',
audioQuality: 'Quality',
qualityVoice: 'Voice',
qualityBalanced: 'Balanced',
qualityHigh: 'High',
selectAudioDevice: 'Select device...',
},
infobar: {
pointerCaptured: 'Mouse captured · Esc to release',
keys: 'Keys',
pointer: 'Pointer',
caps: 'Caps',
num: 'Num',
scroll: 'Scroll',
keyboardLedUnavailable: 'Keyboard LED status is disabled or unsupported',
},
paste: {
title: 'Paste Text',
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',
powerState: 'Power State',
hddState: 'HDD Activity',
stateOn: 'On',
stateOff: 'Off',
stateUnknown: 'Unknown',
hddActive: 'Active',
hddInactive: 'Inactive',
shortPress: 'Power (Short)',
longPress: 'Power (Long/Force Off)',
reset: 'Reset',
wol: 'Wake-on-LAN',
macAddress: 'MAC Address',
invalidMac: 'Invalid MAC address format',
recentMac: 'Recent',
wolFailed: 'Failed to send WOL packet',
},
setup: {
welcome: 'Welcome to One-KVM',
description: 'Complete the initial setup to get started',
stepAccount: 'Account 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',
serialHid: 'Serial HID',
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',
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.',
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: {
videoAlt: 'KVM Video',
mjpeg: 'MJPEG',
webrtc: 'WebRTC',
reconnect: 'Refresh Page',
connecting: 'Connecting...',
connectionFailed: 'Connection Failed',
connectionFailedDesc: 'Unable to connect to video stream, please refresh page or check device status',
videoRestarting: 'Video stream is restarting',
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: 'No video signal detected',
},
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 it from Settings → Other → USB Device Reset.',
},
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: 'No signal or unstable signal; unable to lock timing',
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 it from Settings → Other → USB Device Reset.',
uvc_capture_stall: '',
},
},
webrtcConnected: 'WebRTC Connected',
webrtcFailed: 'WebRTC Connection Failed',
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}',
pointerLockFailed: 'Failed to lock pointer',
deviceLost: 'Video Device Lost',
deviceLostDesc: '{device}: {reason}',
pleaseWait: 'Please wait...',
errorDetails: 'Error details',
},
hid: {
keyboard: 'Keyboard',
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',
reconnecting: 'CH9329 is reconnecting. Try again shortly',
workerStopped: 'CH9329 background communication has stopped. Check the device connection, then restart HID service or save HID settings again',
backendError: '{backend} HID backend error, check device connection and configuration',
},
},
audio: {
deviceLost: 'Audio Device Lost',
deviceLostDesc: '{device}: {reason}',
},
msd: {
title: 'Virtual Media',
images: 'ISO/IMG Mount',
drive: 'Virtual USB',
imageList: 'Image List',
uploadImage: 'Upload Image',
noImages: 'No images',
connect: 'Connect',
disconnect: 'Disconnect',
cdrom: 'CD-ROM',
flash: 'Flash',
storageMode: 'Storage Mode',
accessMode: 'Access Mode',
readOnly: 'Read Only',
readWrite: 'Read/Write',
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.',
systemAvailable: 'System Available',
emptyFolder: 'Empty folder',
confirmDelete: 'Are you sure you want to delete "{name}"?',
folderName: 'Folder name',
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',
largeFileWarning: '>2.2GB',
largeFileTooltip: 'If DVD image support is not enabled in the kernel, only the first 2.2 GB is accessible after mounting.',
operationInProgress: 'Operation in progress, please wait',
selectDriveSize: 'Select virtual drive size',
driveSpaceUnknown: 'Unable to read available space for the MSD directory filesystem',
driveSpaceUnavailable: 'Not enough space on the MSD directory filesystem to create a virtual drive',
driveSpaceTooSmall: 'Available space is less than {min} MB; cannot create a virtual drive',
driveCreateFailed: 'Failed to create virtual drive',
driveFileTooLarge: 'The MSD directory filesystem does not support a virtual drive file this large',
driveReadOnly: 'The MSD directory filesystem is read-only',
drivePermissionDenied: 'One-KVM does not have permission to write to the MSD directory',
driveConnectedBlocked: 'Disconnect the drive before editing files',
driveConnectedFilesHidden: 'Drive is connected to target machine — file list unavailable',
uploadFailed: 'File upload failed',
driveUnreadable: 'Format unsupported',
driveUnreadableTooltip: 'Unable to parse the exFAT filesystem. It may have been formatted with an unsupported format.',
driveFilesystemUnsupportedHint: 'Web file browsing does not support this filesystem, but you can still connect the drive to the target machine.',
reinitializeDrive: 'Re-initialize',
diskMode: 'Drive Mode',
singleDiskMode: 'Single',
multiDiskMode: 'Multi',
diskModeHint: 'Single drive provides 1 media slot; multi drive provides 8. Switching modes clears mounted media and re-enumerates USB.',
mountImage: 'Mount Image',
mediaCount: 'Media {count}/{capacity}',
mediaSlotsFull: 'Media slots are full; no more media can be mounted',
reenumerating: 'USB is re-enumerating',
operations: {
loadStatus: 'Failed to load virtual media status',
loadImages: 'Failed to load image list',
uploadImage: 'Image upload failed',
deleteImage: 'Image deletion failed',
mountImage: 'Image mounting failed',
unmountImage: 'Image unmounting failed',
mountDrive: 'Virtual drive mounting failed',
unmountDrive: 'Virtual drive unmounting failed',
changeMode: 'Drive mode change failed',
initializeDrive: 'Virtual drive initialization failed',
deleteDrive: 'Virtual drive deletion failed',
loadDriveFiles: 'Failed to load virtual drive files',
uploadDriveFile: 'File upload failed',
deleteDriveFile: 'File deletion failed',
createDirectory: 'Folder creation failed',
startDownload: 'Failed to start image download',
cancelDownload: 'Failed to cancel image download',
downloadImage: 'Image download failed',
},
errors: {
unavailable: 'Virtual media service is unavailable.',
operationInProgress: 'Another virtual media operation is in progress.',
operationFailed: 'The virtual media operation failed.',
invalidRequest: 'The virtual media request is invalid.',
resourceNotFound: 'The requested virtual media resource was not found.',
resourceAlreadyExists: 'The virtual media resource already exists.',
mediaSlotsFull: 'All virtual media slots are in use.',
mediaAlreadyMounted: 'The virtual medium is already mounted.',
mediaInUse: 'The virtual medium is currently in use.',
imageTooLarge: 'The virtual media image is too large.',
invalidUrl: 'The download URL is invalid.',
remoteDownloadFailed: 'The remote image download failed.',
downloadIncomplete: 'The remote image download was incomplete.',
driveNotInitialized: 'The virtual drive is not initialized.',
driveConnected: 'The virtual drive is connected to the controlled computer. Disconnect it before editing files.',
driveFilesystemUnsupported: 'Web file management does not support this format, but the drive can still be mounted on the controlled computer.',
driveSizeInvalid: 'The virtual drive size is invalid.',
storageSpaceUnavailable: 'Available virtual media storage space could not be determined.',
storageFull: 'Virtual media storage does not have enough free space.',
storageReadOnly: 'Virtual media storage is read-only.',
storagePermissionDenied: 'Permission to access virtual media storage was denied.',
mediumRemovalPrevented: 'The controlled computer is using this virtual medium and has prevented its removal. Eject or unmount it on the controlled computer, then try again.',
disconnectFailed: 'Virtual media could not be disconnected. Please try again or check the system logs.',
},
},
settings: {
title: 'Settings',
appearance: 'Appearance',
accountSubtitle: 'Manage console login credentials and security verification',
account: 'Account',
video: 'Video',
encoder: 'Encoder',
hid: 'HID',
msd: 'MSD',
atx: 'ATX',
environment: 'Environment',
networkSubtitle: 'Configure web server ports, listen addresses, and HTTPS',
network: 'Network',
hardware: 'Hardware',
system: 'System',
other: 'Other',
extensions: 'Extensions',
about: 'About',
appearanceSubtitle: 'Customize interface appearance and language',
videoSubtitle: 'Configure capture device, video encoder and WebRTC ICE servers',
hidSubtitle: 'Configure the HID backend, device, descriptors, and USB gadget functions',
atxSubtitle: 'Configure remote power control hardware and Wake-on-LAN',
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: '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',
},
loadFailed: 'Failed to load hardware watchdog status',
toggleFailed: 'Failed to update hardware watchdog',
enableFailed: 'Failed to enable the hardware watchdog.',
unsupportedReason: 'No supported hardware watchdog was found.',
discoveryFailed: 'Failed to detect the hardware watchdog.',
openFailed: 'The hardware watchdog could not be opened.',
feedFailed: 'The hardware watchdog is not being fed successfully.',
disableFailed: 'The hardware watchdog cannot be safely disabled and keepalive will continue.',
abnormalReason: 'The hardware watchdog is in an abnormal state.',
},
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',
consoleLayout: 'Console layout',
consoleLayoutDesc: 'Choose how console controls are arranged. The preference is saved in this browser.',
consoleLayoutHints: {
current: 'Full status and labeled tools for configuration and troubleshooting.',
sidebar: 'Compact status and fixed icons for frequent actions.',
floating: 'Essential floating controls that collapse to keep the video clear.',
},
consoleLayoutOptions: {
current: 'Top bar',
floating: 'Floating bar',
sidebar: 'Sidebar',
},
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',
totp: {
title: 'Two-factor authentication',
description: 'Require an authenticator code when signing in to the web console',
serverTime: 'Server time',
localTime: 'Local time',
clockOffset: 'Clock offset: {seconds} seconds',
clockDriftWarning: 'The server and this device differ by at least 30 seconds. Codes may fail until their clocks are corrected.',
enable: 'Enable 2FA',
disable: 'Disable 2FA',
enableTitle: 'Set up two-factor authentication',
disableTitle: 'Disable two-factor authentication',
manualSecret: 'Manual setup key',
secretOneTime: 'This key is shown only during setup. Store it in your authenticator now.',
enterSixDigitCode: 'Enter a 6-digit authenticator code',
currentPasswordIncorrect: 'The current password is incorrect',
invalidCode: 'The authenticator code is incorrect',
enrollmentExpired: 'Setup expired. Enter your password to start again.',
rateLimited: 'Too many incorrect codes. Wait one minute and try again.',
alreadyEnabled: 'Two-factor authentication is already enabled',
notEnabled: 'Two-factor authentication is not enabled',
operationFailed: 'Unable to update two-factor authentication',
loadFailed: 'Unable to load two-factor authentication status',
},
httpPort: 'HTTP Port',
httpsPort: 'HTTPS Port',
bindAddress: 'Bind Address',
bindMode: 'Listening Address',
bindModeAll: 'All addresses',
bindModeLocal: 'Local only (127.0.0.1)',
bindModeCustom: 'Custom address list',
bindIpv6: 'Enable IPv6',
bindAddressList: 'Address List',
addBindAddress: 'Add address',
bindAddressListEmpty: 'Add at least one IP address.',
httpsEnabled: 'Enable HTTPS',
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',
redfishEndpoint: 'Redfish Endpoint',
portActive: 'Active',
portReserved: 'Reserved',
previewUrl: 'Access URL preview',
copyUrl: 'Copy access URL',
openInBrowser: 'Open in browser',
listenAddress: 'Listen Address',
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.',
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-----',
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',
releaseNotes: 'Release Notes',
noUpdates: 'No new version available for current channel',
updateOverviewLoadFailed: 'Failed to load update information',
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',
username: 'Username',
password: 'Password',
msdDir: 'MSD directory',
msdFlashInquiryString: 'Flash device name',
msdCdromInquiryString: 'CD-ROM device name',
atxPowerButton: 'Power Button',
atxResetButton: 'Reset Button',
atxPowerManagement: 'Power Management',
atxDriver: 'Driver Type',
atxDriverNone: 'Disabled',
atxDriverGpio: 'GPIO',
atxDriverUsbRelay: 'USB LCUS HID Relay',
atxDriverSerial: 'USB LCUS Serial Relay',
atxDevice: 'Device',
atxGpioChip: 'GPIO Chip',
atxPin: 'GPIO Pin',
atxChannel: 'Relay Channel',
atxActiveLevel: 'Trigger Level',
atxLevelHigh: 'High-level trigger',
atxLevelLow: 'Low-level trigger',
atxLedSensing: 'LED Status Sensing',
atxHddSensing: 'HDD Activity Sensing',
atxWolSettings: 'Wake-on-LAN Settings',
atxWolSettingsDesc: 'Configure WOL magic packet sending options',
atxWolInterface: 'Network Interface',
atxWolInterfacePlaceholder: 'e.g. eth0, enp0s3',
themeDesc: 'Choose the interface color scheme',
languageDesc: 'Choose the interface display language',
featureVisibility: 'Feature Visibility',
featureVisibilityDesc: 'Control which feature entry points are shown on the console page',
computerUseAgent: 'Computer Use Agent',
pasteText: 'Paste Text',
videoSettings: 'Video Capture',
videoSettingsDesc: 'Select a capture device. Source-following inputs report their active mode automatically.',
videoDevice: 'Video Device',
selectDevice: 'Select device...',
videoFormat: 'Video Format',
selectFormat: 'Select format...',
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',
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',
ch9329Options: 'CH9329 Options',
ch9329OptionsDesc: 'Configure runtime compatibility for the CH9329 serial HID chip',
ch9329HybridMouse: 'Linux Absolute Mouse Compatibility',
ch9329HybridMouseDesc: 'Keep absolute movement on absolute packets, but send buttons and wheel through relative packets',
mouseMacosDrag: 'macOS Drag Compatibility',
mouseMacosDragRequiresBoth: 'Enable both relative and absolute mouse interfaces before saving.',
mouseMacosDragDesc: 'Experimental workaround for interrupted drags in absolute mouse mode (OTG / CH9329). OTG requires both mouse interfaces. Tracking speed and drop position may vary with macOS settings; this version has not been tested on a Mac.',
ch9329Descriptor: 'CH9329 USB Device Descriptor',
ch9329DescriptorDesc: 'Read USB identification fields from the CH9329 chip before editing',
ch9329DescriptorLoading: 'Reading CH9329 descriptor...',
ch9329DescriptorLoadFailed: 'Failed to read CH9329 descriptor',
ch9329ConfigModeUnavailable: 'CH9329 configuration mode is unavailable. Pull SET low to read or write chip parameters; showing the last saved descriptor.',
ch9329DescriptorReadRequired: 'Read the CH9329 descriptor successfully before saving',
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',
otgFunctionKeyboard: 'Standard Keyboard',
otgKeyboardLeds: 'Keyboard LED Status',
otgFunctionMouseRelative: 'Relative Positioning Mouse',
otgFunctionMouseAbsolute: 'Absolute Positioning Mouse',
otgFunctionConsumer: 'Consumer Control Keyboard',
otgFunctionMsd: 'Mass Storage (MSD)',
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 Bridge',
otgRuntimeDegraded: 'OTG runtime is degraded',
otgNetworkDriver: 'Host Driver Mode',
otgNetworkInterface: 'Bridge Interface',
otgNetworkNone: 'None',
otgNetworkInterfacesLoadFailed: 'Failed to load bridge interfaces',
uacMic: 'USB Microphone',
otgDescriptor: 'USB Device Descriptor',
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',
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 Device Reset',
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; changes apply to newly established WebRTC sessions after saving',
stunServer: 'STUN Server',
stunServerPlaceholder: 'stun:stun.l.google.com:19302',
turnServer: 'TURN Server',
turnServerPlaceholder: 'turn:turn.example.com:3478',
turnUsername: 'TURN Username',
turnPassword: 'TURN Password',
},
virtualKeyboard: {
title: 'Virtual Keyboard',
attach: 'Attach',
detach: 'Detach',
hide: 'Hide',
},
config: {
loadDevicesFailed: 'Failed to load device list',
updateFailed: 'Update failed',
},
computerUse: {
title: 'Computer Use',
status: {
waitingScreenshot: 'Capturing screen',
thinking: 'Thinking',
executing: 'Executing',
completed: 'Completed',
failed: 'Failed',
stopped: 'Stopped',
idle: 'Idle',
},
connection: {
connected: 'Connected',
disconnected: 'Disconnected',
socketFailed: 'Computer Use WebSocket connection failed',
messageFailed: 'Failed to process Computer Use WebSocket message',
},
buttons: {
settings: 'Settings',
clear: 'Clear',
close: 'Close',
send: 'Send',
stop: 'Stop',
save: 'Save',
clearKey: 'Clear Key',
},
reasoning: {
failed: 'Thinking failed',
process: 'Reasoning',
thinking: 'Thinking',
},
trace: {
screenshot: 'Screenshot',
screenshotAlt: 'Computer Use screenshot',
executed: 'Executed',
},
input: {
placeholder: 'Enter a task. Press Enter for a new line; press Ctrl+Enter to send.',
apiKeyRequired: 'Configure an API Key first.',
},
settings: {
title: 'Computer Use Settings',
enableAi: 'Enable AI control',
model: 'Model',
apiUrl: 'API URL',
apiKey: 'API Key',
configured: 'Configured: {source}',
sourceEnv: 'environment variable',
sourceConfig: 'configuration file',
sourceNone: 'not configured',
},
actions: {
click: 'Click ({x}, {y}) {button}',
doubleClick: 'Double-click ({x}, {y}) {button}',
move: 'Move to ({x}, {y})',
drag: 'Drag through {count} points',
scroll: 'Scroll at ({x}, {y}) dx={dx} dy={dy}',
typeAscii: 'Type {count} ASCII characters',
keypress: 'Press {keys}',
wait: 'Wait {ms}ms',
screenshot: 'Request screenshot',
},
mouseButtons: {
left: 'left button',
middle: 'middle button',
right: 'right button',
},
errors: {
configLoadFailed: 'Failed to load Computer Use settings',
taskFailed: 'Computer Use task failed',
startFailed: 'Failed to start Computer Use',
stopFailed: 'Failed to stop Computer Use',
captureUnavailable: 'The current video frame is unavailable',
screenshotFailed: 'Screenshot capture failed',
},
success: {
configSaved: 'Computer Use settings saved',
apiKeyCleared: 'API Key cleared',
},
},
statusCard: {
connectionDetails: 'Connection details',
device: 'Device',
video: 'Video',
hid: 'HID',
audio: 'Audio',
msd: 'MSD',
online: 'Online',
offline: 'Offline',
connecting: 'Connecting...',
format: 'Format',
resolution: 'Resolution',
fps: 'FPS',
fpsTarget: 'Target FPS',
fpsActual: 'Actual FPS',
paused: 'Paused',
backend: 'Backend',
currentMode: 'Current Mode',
absolute: 'Absolute',
relative: 'Relative',
channel: 'Channel',
networkError: 'Network Error',
disconnected: 'Disconnected',
hidUnavailable: 'HID Unavailable',
audioPlayback: 'Audio Playback',
audioTransfer: 'Audio Transfer',
playbackActive: 'Playing',
playbackStopped: 'Stopped',
transferIdle: 'Not Transmitting',
transferStarting: 'Starting',
transferWaiting: 'Waiting for Target',
transferActive: 'Transmitting',
transferStalled: 'Target Not Receiving',
transferStopping: 'Stopping',
transferError: 'Transfer Error',
quality: 'Quality',
streaming: 'Streaming',
off: 'Off',
defaultDevice: 'Default',
connected: 'Connected',
msdStatus: 'Status',
msdStandby: 'Idle',
msdDriveMode: 'Virtual USB',
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',
thirdPartyAccess: {
title: 'Third-party Access',
},
viewLogs: 'View Logs',
noLogs: 'No logs available',
binaryNotFound: '{path} not found, please install the required program',
remoteAccess: {
title: 'Remote Access',
},
ttyd: {
title: 'Ttyd Web Terminal',
desc: 'Web terminal access via ttyd',
open: 'Open Terminal',
openInNewTab: 'Open in New Tab',
shell: 'Shell',
},
gostc: {
title: 'GOSTC NAT Traversal',
desc: 'NAT traversal via GOSTC',
addr: 'Server Address',
addrPlaceholder: 'Hostname or IP (required)',
addrRequired: 'Enter the GOSTC server address',
key: 'Client Key',
keyRequired: 'Enter the GOSTC client key',
tls: 'Enable TLS',
},
easytier: {
title: 'Easytier Network',
desc: 'P2P VPN networking via EasyTier',
quickConfig: 'Quick Config',
fullConfig: 'Full Config',
fullConfigHint: 'Paste the full easytier.toml configuration file here',
fullConfigRequired: 'Enter the full easytier.toml configuration',
networkName: 'Network Name',
networkNameRequired: 'Enter the EasyTier network name',
networkSecret: 'Network Secret',
peers: 'Peer Nodes',
addPeer: 'Add Peer',
virtualIp: 'Virtual IP',
},
frpc: {
title: 'FRPC NAT Traversal',
desc: 'Use the FRP client for NAT traversal',
quickConfig: 'Quick Config',
fullConfig: 'Full Config',
fullConfigHint: 'Paste the provider TOML configuration file here',
fullConfigRequired: 'Enter the full frpc.toml configuration',
proxyType: 'Proxy Type',
proxyName: 'Proxy Name',
proxyNamePlaceholder: 'one-kvm-ssh',
proxyNameRequired: 'Enter the FRPC proxy name',
serverAddr: 'Server Address',
serverAddrPlaceholder: 'frps.example.com',
serverAddrRequired: 'Enter the FRPC server address',
serverPort: 'Server Port',
token: 'Token',
tokenRequired: 'Enter the FRPC token',
localIp: 'Local Address',
localIpRequired: 'Enter the FRPC local address',
localPort: 'Local Port',
remotePort: 'Remote Port',
remotePortRequired: 'TCP/UDP proxies require a remote port',
customDomain: 'Custom Domain',
customDomainPlaceholder: 'kvm.example.com',
secretKey: 'Secret Key',
tls: 'Enable TLS',
},
rustdesk: {
title: 'RustDesk Remote',
desc: 'Configure the RustDesk service; the selected codec will be locked',
mode: 'Access Mode',
modeId: 'ID Service',
modeIdDesc: 'Register with an ID server and use the configured relay when direct connections fail',
modeDirectIp: 'Direct IP',
modeDirectIpDesc: 'Listen on the device only, without connecting to an ID or relay server',
directAccessPort: 'Direct Access Port',
directAccessPortInvalid: 'The direct access port must be between 1 and 65535',
rendezvousServer: 'ID Server',
rendezvousServerPlaceholder: 'hbbs.example.com:21116',
rendezvousServerRequired: 'Enter the RustDesk ID server',
relayServer: 'Relay Server',
relayServerPlaceholder: 'hbbr.example.com:21117',
relayKey: 'Relay Key',
codec: 'Codec',
deviceId: 'Device ID',
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.',
registered: 'Registered',
disconnected: 'Disconnected',
connecting: 'Connecting',
notConfigured: 'Not Configured',
notInitialized: 'Not Initialized',
copyId: 'Copy ID',
copyPassword: 'Copy Password',
},
rtsp: {
title: 'RTSP Streaming',
desc: 'Configure the RTSP streaming service; the selected codec will be locked',
bind: 'Bind Address',
port: 'Port',
path: 'Stream Path',
pathPlaceholder: 'live',
codec: 'Codec',
allowOneClient: 'Allow One Client Only',
username: 'Username',
usernamePlaceholder: 'Empty means no authentication',
password: 'Password',
passwordPlaceholder: 'Enter new password',
urlPreview: 'RTSP URL Preview',
},
vnc: {
title: 'VNC Remote',
desc: 'Configure the VNC service; the selected codec will be locked',
bind: 'Bind Address',
port: 'Port',
encoding: 'Video Encoding',
encodingTightJpeg: 'Tight JPEG',
encodingH264: 'H.264',
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',
clients: '{count} clients',
urlPreview: 'VNC Address Preview',
},
},
stats: {
title: 'Connection Stats',
video: 'Video Information',
stability: 'Network Stability',
delay: 'Playback Delay',
packetLoss: 'Packet Loss',
total: 'total',
frameRate: 'Frame Rate',
bitrate: 'Bitrate',
resolution: 'Resolution',
packetsLost: 'Packets Lost',
connection: 'Connection Info',
connectionType: 'Connection Type',
transport: 'Transport',
localCandidate: 'Local Candidate',
remoteCandidate: 'Remote Candidate',
p2p: 'P2P Direct',
relay: 'TURN Relay',
},
help: {
videoBitratePreset: 'Speed: lowest latency, best for slow networks. Balanced: good quality and latency. Quality: best visual, needs good bandwidth',
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',
},
}