mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2026-10-28 00:10:50 +08:00
1276 lines
54 KiB
TypeScript
1276 lines
54 KiB
TypeScript
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',
|
||
},
|
||
}
|