Files
One-KVM/web/src/i18n/zh-CN.ts
mofeng-git 887f29096f feat: 增加 OTG HID 远程唤醒和 OTG MSD 设备名称配置
- 在补丁内核上启用 HID 写入唤醒及 USB 远程唤醒描述符
  - 支持全局配置 Flash 和 CD-ROM INQUIRY 字符串
  - 兼容普通内核的通用 INQUIRY 属性
  - 调整 OTG 功能布局并更新大容量 DVD 镜像提示
2026-07-29 13:56:52 +08:00

1139 lines
45 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 {
common: {
loading: '加载中...',
save: '保存',
cancel: '取消',
confirm: '确认',
delete: '删除',
refresh: '刷新',
success: '成功',
error: '错误',
warning: '警告',
info: '信息',
yes: '是',
no: '否',
on: '开',
off: '关',
enabled: '已启用',
later: '稍后',
restartNow: '立即重启',
disabled: '已禁用',
connected: '已连接',
disconnected: '已断开',
connecting: '连接中...',
unknown: '未知',
back: '上一步',
next: '下一步',
apply: '应用',
menu: '菜单',
optional: '可选',
notSupportedYet: '(尚未支持)',
create: '创建',
creating: '创建中...',
deleting: '删除中...',
toggleTheme: '切换主题',
toggleLanguage: '切换语言',
retry: '重试',
},
toast: {
closeNotification: '关闭通知',
notificationsRegion: '通知',
},
api: {
operationFailed: '操作失败',
operationFailedDesc: '操作失败',
parseResponseFailed: '解析响应失败',
networkError: '网络错误',
networkErrorDesc: '无法连接到服务器,请检查网络连接。',
},
nav: {
logout: '退出登录',
},
auth: {
login: '登录',
logout: '退出登录',
username: '用户名',
password: '密码',
enterUsername: '请输入用户名',
enterPassword: '请输入密码',
loginFailed: '登录失败',
invalidPassword: '用户名或密码错误',
systemNotInitialized: '系统尚未初始化,请先完成向导设置。',
changePassword: '修改密码',
currentPassword: '当前密码',
currentPasswordPlaceholder: '请输入当前密码',
newPassword: '新密码',
newPasswordPlaceholder: '请输入新密码',
confirmPassword: '确认密码',
confirmPasswordPlaceholder: '请再次输入新密码',
passwordRequired: '请填写所有密码字段',
passwordMismatch: '两次输入的密码不一致',
passwordTooShort: '密码至少需要4个字符',
sessionExpired: '会话已过期',
loggedInElsewhere: '已在别处登录',
forgotPassword: '忘记密码',
forgotPasswordHint:
'忘记密码?在运行本服务的设备上打开终端,执行 one-kvm user set-password按提示输入并确认新密码即可重置。',
totpPrompt: '请输入认证器应用中的验证码',
totpCode: '认证器验证码',
totpCodePlaceholder: '6 位验证码',
enterTotpCode: '请输入 6 位认证器验证码',
invalidTotpCode: '认证器验证码错误',
totpChallengeExpired: '本次登录验证已过期,请重新输入密码。',
totpRateLimited: '错误次数过多,请等待一分钟后重新登录。',
verifyAndLogin: '验证并登录',
backToPassword: '返回密码登录',
},
status: {
connected: '已连接',
connecting: '连接中',
disconnected: '已断开',
error: '错误',
},
actionbar: {
paste: '粘贴文本',
micStart: '开始传声',
micStop: '停止传声',
microphoneTransfer: '音频传声设置',
grantMicrophonePermission: '允许访问麦克风',
noMicrophoneDevices: '未发现音频输入设备',
micState: {
idle: '未传输',
starting: '启动中',
streaming: '传输中',
stopping: '停止中',
error: '异常',
},
micError: {
'secure-context-required': '浏览器仅允许 HTTPS 页面访问麦克风,请通过 HTTPS 打开控制台。',
unsupported: '当前浏览器不支持 Opus 麦克风传输,请使用支持 WebCodecs 的浏览器。',
'permission-denied': '麦克风权限被拒绝,请在浏览器站点权限中允许访问。',
'device-unavailable': '所选麦克风不可用,请检查设备连接或选择其他输入设备。',
'connection-failed': '无法连接 USB 麦克风传输服务,请确认 UAC 已启用且没有其他会话占用。',
'encoder-failed': '浏览器音频编码器异常,传输已停止。',
unknown: '麦克风传输启动失败,请检查设备和浏览器权限。',
},
virtualMedia: '虚拟媒体',
virtualMediaTip: '管理虚拟媒体设备',
power: '电源',
keyboard: '虚拟键盘',
keyboardTip: '显示虚拟键盘',
webTerminal: '网页终端',
stats: '连接统计',
statsTip: '查看连接状态',
settings: '设置',
settingsTip: '系统设置',
fullscreen: '全屏',
fullscreenTip: '切换全屏模式',
videoConfig: '视频配置',
streamSettings: '流设置',
deviceSettings: '设备配置',
videoMode: '视频模式',
selectMode: '选择模式...',
videoModeHint: 'HTTP 对带宽占用较大但模式兼容性好WebRTC 对网络要求较高但带宽占用低',
videoDevice: '视频设备',
videoFormat: '视频格式',
videoResolution: '分辨率',
videoFps: '帧率',
selectDevice: '选择设备...',
selectFormat: '选择格式...',
selectResolution: '选择分辨率...',
selectFps: '选择帧率...',
bitratePreset: '码率',
bitrateSpeed: '速度优先',
bitrateBalanced: '均衡',
bitrateQuality: '质量优先',
browserUnsupported: '浏览器不支持',
backendSoftware: '软件编码',
backendAuto: '自动',
recommended: '推荐',
notRecommended: '不推荐',
multiSourceCodecLocked: '{sources} 已启用,当前编码已锁定',
multiSourceVideoParamsWarning: '{sources} 已启用,修改视频设备和输入参数将导致流中断',
hidConfig: '鼠键配置',
mouseSettings: '鼠标设置',
hidDeviceSettings: 'HID 设备设置',
positioningMode: '定位模式',
sendInterval: '发送间隔',
showCursor: '显示指针',
backend: '后端类型',
devicePath: '设备路径',
baudrate: '波特率',
absolute: '绝对定位',
relative: '相对定位',
applying: '应用中...',
audioConfig: '音频',
playbackControl: '音频播放设置',
volume: '音量',
audioDeviceSettings: '设备配置',
audioEnabled: '启用音频',
audioDevice: '音频输入设备',
audioQuality: '音频质量',
qualityVoice: '语音',
qualityBalanced: '均衡',
qualityHigh: '高品质',
selectAudioDevice: '选择设备...',
},
infobar: {
keys: '按键',
pointer: '指针',
caps: 'Caps',
num: 'Num',
scroll: 'Scroll',
keyboardLedUnavailable: '键盘状态灯功能未开启或不支持',
},
paste: {
title: '粘贴文本',
placeholder: '在此输入要粘贴的文本...',
hint: '按 Ctrl+Enter 快速发送',
confirm: '发送',
typing: '正在输入...',
escToCancel: '按 Esc 取消',
stop: '停止',
untypableWarning: '部分字符无法通过键盘输入',
untypableChars: '无法输入的字符: {chars}',
},
atx: {
title: '电源控制',
powerState: '电源状态',
hddState: '硬盘活动',
stateOn: '已开机',
stateOff: '已关机',
stateUnknown: '未知',
hddActive: '活动',
hddInactive: '空闲',
shortPress: '短按电源',
longPress: '长按电源 (强制关机)',
reset: '重启',
wol: '网络唤醒',
macAddress: 'MAC 地址',
invalidMac: 'MAC 地址格式无效',
recentMac: '最近使用',
wolFailed: 'WOL 发送失败',
},
setup: {
welcome: '欢迎使用 One-KVM',
description: '请完成初始设置以开始使用',
stepAccount: '账号设置',
stepAudioVideo: '音视频设置',
stepHid: '鼠键设置',
setUsername: '设置管理员用户名',
usernameHint: '用户名至少2个字符',
setPassword: '设置管理员密码',
passwordHint: '密码至少4个字符',
confirmPassword: '确认密码',
passwordMismatch: '两次输入的密码不一致',
videoDevice: '视频设备',
selectVideoDevice: '选择视频采集设备',
videoFormat: '画面格式',
selectFormat: '选择画面格式',
resolution: '分辨率',
selectResolution: '选择分辨率',
fps: '帧率',
selectFps: '选择帧率',
noVideoDevices: '未检测到视频设备',
noSignalDetected: '未检测到 HDMI 信号,请连接 HDMI 线缆后刷新。',
refreshDevices: '刷新设备',
audioDevice: '音频设备',
selectAudioDevice: '选择音频采集设备',
noAudio: '不使用音频',
noAudioDevices: '未检测到音频设备',
audioDeviceHelp: '选择用于捕获远程主机音频的设备。通常与视频采集卡在同一 USB 设备上。',
hidBackend: 'HID 后端',
serialHid: '串口 HID',
serialPort: '串口设备',
selectSerialPort: '选择串口设备',
noSerialDevices: '未检测到串口设备',
baudRate: '波特率',
udc: 'USB 设备控制器',
selectUdc: '选择 UDC',
noUdcDevices: '未检测到 UDC 设备',
complete: '完成设置',
setupFailed: '设置失败',
advancedEncoder: '高级选项:编码器后端',
encoderHint: '默认的"自动"选项适用于大多数情况。仅在需要特定编码器后端时更改。',
autoRecommended: '自动(推荐)',
hardware: '硬件',
software: '软件',
progress: '步骤 {current} / {total}',
ch9329Help: 'CH9329 是一款串口转 HID 芯片,通过串口连接到主机。适用于大多数硬件配置。',
otgHelp: 'USB OTG 模式通过 USB 设备控制器直接模拟 HID 设备。需要硬件支持 USB OTG 功能。',
videoDeviceHelp: '选择用于捕获远程主机画面的视频采集设备。通常是 HDMI 采集卡。',
videoFormatHelp: 'MJPEG 格式兼容性最好H.264/H.265 带宽占用更低但需要编码支持。',
stepExtensions: '扩展设置',
extensionsDescription: '选择要自动启动的扩展服务',
ttydTitle: 'Web 终端 (ttyd)',
ttydDescription: '在浏览器中访问设备的命令行终端',
extensionsHint: '这些设置可以在设置页面中随时更改',
notInstalled: '未安装',
passwordStrength: '密码强度',
passwordWeak: '弱',
passwordMedium: '中',
passwordStrong: '强',
passwordVeryStrong: '很强',
},
console: {
videoAlt: 'KVM 视频',
mjpeg: 'MJPEG',
webrtc: 'WebRTC',
reconnect: '刷新网页',
connecting: '正在连接...',
connectionFailed: '连接失败',
connectionFailedDesc: '无法连接到视频流,请刷新网页或检查设备状态',
videoRestarting: '视频流正在重启',
streamError: '视频流错误',
// 四档视频状态(对应后端 StreamStateChangedstreaming / no_signal /
// device_lost / device_busy. `reason` 子键可选,用于在副文案中补充细节。
signal: {
noSignal: {
title: '暂无视频信号',
detail: '采集卡已就绪,正在等待被控机画面',
},
deviceLost: {
title: '视频设备已断开',
detail: '采集卡离线,正在尝试重新识别…',
},
audioDeviceLost: {
title: '音频设备已断开',
detail: '正在尝试重新连接音频采集设备…',
},
deviceBusy: {
title: '视频通道忙',
detail: '正在切换配置或被其他组件占用,请稍候…',
},
uvc_usb_error: {
title: 'USB 采集传输异常',
detail: 'USB 采集卡遇到协议错误EPROTO可在 设置 → 其他 → USB 设备复位 中尝试复位。',
},
uvc_capture_stall: {
title: 'UVC 采集超时',
detail: '检查设备连接,若设备已连接,可尝试修改采集格式并复位设备。',
},
reason: {
no_cable: '未检测到 HDMI 线缆,请检查连接或被控机是否已开机',
no_sync: '信号不稳定,无法锁定时序,可尝试降低被控机分辨率/刷新率',
out_of_range: '分辨率或刷新率超出采集卡能力,建议切换到 1080p60 以内',
no_signal: '采集卡已就绪,正在等待画面…',
recovering: '正在自动重连视频设备',
device_lost: '视频节点丢失,等待驱动恢复',
config_changing: '正在应用新配置',
mode_switching: '正在切换视频模式',
audio_device_lost: '音频采集不可用,正在自动恢复',
audio_reconnecting: '正在重试连接音频设备',
uvc_usb_error:
'可尝试更换 USB 口或线、避免 HUB、或重新插拔设备也可在 设置 → 其他 → USB 设备复位 中复位。',
uvc_capture_stall: '',
},
},
webrtcConnected: 'WebRTC 已连接',
webrtcFailed: 'WebRTC 连接失败',
webrtcPhaseIceServers: '正在加载 ICE 服务器...',
webrtcPhaseCreatePeer: '正在创建点对点连接...',
webrtcPhaseCreateChannel: '正在创建数据通道...',
webrtcPhaseCreateOffer: '正在创建本地会话描述...',
webrtcPhaseWaitAnswer: '正在等待远端应答...',
webrtcPhaseSetRemote: '正在应用远端会话描述...',
webrtcPhaseApplyIce: '正在应用 ICE 候选...',
webrtcPhaseNegotiating: '正在协商安全连接...',
mjpegPhaseWebsocket: '正在连接控制通道...',
mjpegPhaseStream: '正在请求视频流...',
mjpegPhaseFirstFrame: '正在等待首帧...',
stepProgress: '第 {current}/{total} 步',
pointerLockFailed: '鼠标锁定失败',
deviceLost: '视频设备丢失',
deviceLostDesc: '{device}: {reason}',
pleaseWait: '请稍候...',
errorDetails: '错误详情',
},
hid: {
keyboard: '键盘',
errorHints: {
udcNotConfigured: 'OTG 已就绪,等待被控机连接并完成 USB 枚举',
disabled: 'HID 后端已禁用',
hidDeviceMissing: '未找到 HID 设备节点,可尝试重启 HID 服务',
notOpened: 'HID 设备尚未打开,可尝试重启 HID 服务',
portNotFound: '找不到串口设备,请检查 CH9329 接线与设备路径',
noResponse: 'CH9329 无响应,请检查波特率与供电',
noResponseWithCmd: 'CH9329 无响应,请检查波特率与供电(命令 {cmd}',
invalidConfig: '串口参数无效,请检查设备路径与波特率配置',
protocolError: 'CH9329 返回了无效协议数据',
deviceDisconnected: 'HID 设备已断开,请检查线缆与接口',
ioError: '检测到 I/O 通信异常',
otgIoError: 'OTG 链路不稳定,请检查 USB 线和被控机接口',
ch9329IoError: 'CH9329 串口链路不稳定,请检查接线与供电',
serialError: '串口通信异常,请检查 CH9329 接线与配置',
initFailed: 'CH9329 初始化失败,请检查串口参数与供电',
shutdown: 'HID 后端已停止',
reconnecting: 'CH9329 正在重连,请稍后重试',
workerStopped: 'CH9329 后台通信已停止,请检查设备连接后重启 HID 服务或重新保存 HID 设置',
backendError: '{backend} HID 后端异常,请检查设备连接与配置',
},
},
audio: {
deviceLost: '音频设备丢失',
deviceLostDesc: '{device}: {reason}',
},
msd: {
title: '虚拟媒体',
images: 'ISO/IMG 挂载',
drive: '虚拟U盘',
imageList: '镜像列表',
uploadImage: '上传镜像',
noImages: '暂无镜像',
connect: '连接',
disconnect: '断开',
cdrom: 'CD-ROM',
flash: 'Flash',
storageMode: '存储模式',
accessMode: '访问模式',
readOnly: '只读',
readWrite: '读写',
createFolder: '新建文件夹',
driveNotInitialized: '虚拟驱动器未初始化',
initializeDrive: '初始化驱动器',
driveSize: '驱动器大小',
usedSpace: '已用',
freeSpace: '剩余',
deleteDrive: '删除驱动器',
confirmDeleteDrive: '确定要删除虚拟驱动器吗?所有文件将被清除。',
systemAvailable: '系统可用',
emptyFolder: '空文件夹',
confirmDelete: '确定要删除 "{name}" 吗?',
folderName: '文件夹名称',
downloadFromUrl: '从 URL 下载',
downloadFromUrlDesc: '输入镜像文件的 URL 地址,支持 ISO/IMG 格式',
url: 'URL 地址',
filename: '文件名',
filenameAutoDetect: '自动从 URL 获取',
download: '下载',
downloadComplete: '下载完成',
largeFileWarning: '>2.2GB',
largeFileTooltip: '若内核未启用 DVD 镜像支持,挂载后仅前 2.2 GB 可访问。',
operationInProgress: '操作进行中,请稍候',
selectDriveSize: '选择虚拟驱动器大小',
driveSpaceUnknown: '无法读取 MSD 目录所在储存空间的剩余可用空间',
driveSpaceUnavailable: 'MSD 目录所在储存空间不足无法创建虚拟U盘',
driveSpaceTooSmall: '剩余可用空间不足 {min} MB无法创建虚拟U盘',
driveCreateFailed: '虚拟U盘创建失败',
driveFileTooLarge: 'MSD 目录所在文件系统不支持这么大的单个虚拟盘文件',
driveReadOnly: 'MSD 目录所在文件系统为只读',
drivePermissionDenied: 'One-KVM 没有写入 MSD 目录的权限',
driveConnectedBlocked: '请先断开连接,再操作文件',
driveConnectedFilesHidden: '已连接到被控机,文件列表暂不可用',
uploadFailed: '文件上传失败',
driveUnreadable: '格式不支持',
driveUnreadableTooltip: '无法解析 exFAT 文件系统,可能已被格式化为不支持的格式。',
reinitializeDrive: '重新初始化',
diskMode: '驱动器模式',
singleDiskMode: '单驱动器',
multiDiskMode: '多驱动器',
diskModeHint: '单驱动器提供 1 个介质槽位,多驱动器提供 8 个;切换模式会清空已挂载介质并重新枚举 USB。',
mountImage: '挂载镜像',
mediaCount: '介质 {count}/{capacity}',
mediaSlotsFull: '介质槽已满,无法挂载更多介质',
reenumerating: 'USB 正在重新枚举',
operations: {
loadStatus: '虚拟媒体状态加载失败',
loadImages: '镜像列表加载失败',
uploadImage: '镜像上传失败',
deleteImage: '镜像删除失败',
mountImage: '镜像挂载失败',
unmountImage: '镜像卸载失败',
mountDrive: '虚拟盘挂载失败',
unmountDrive: '虚拟盘卸载失败',
changeMode: '驱动器模式切换失败',
initializeDrive: '虚拟盘初始化失败',
deleteDrive: '虚拟盘删除失败',
loadDriveFiles: '虚拟盘文件列表加载失败',
uploadDriveFile: '虚拟盘文件上传失败',
deleteDriveFile: '虚拟盘文件删除失败',
createDirectory: '文件夹创建失败',
startDownload: '镜像下载启动失败',
cancelDownload: '镜像下载取消失败',
downloadImage: '镜像下载失败',
},
errors: {
unavailable: '虚拟媒体服务当前不可用。',
operationInProgress: '另一项虚拟媒体操作正在进行中,请稍候。',
operationFailed: '虚拟媒体操作失败。',
invalidRequest: '虚拟媒体请求无效。',
resourceNotFound: '未找到请求的虚拟媒体资源。',
resourceAlreadyExists: '虚拟媒体资源已存在。',
mediaSlotsFull: '虚拟媒体槽位已全部占用。',
mediaAlreadyMounted: '该虚拟介质已经挂载。',
mediaInUse: '该虚拟介质正在使用中。',
imageTooLarge: '虚拟媒体镜像过大。',
invalidUrl: '下载 URL 无效。',
remoteDownloadFailed: '远程镜像下载失败。',
downloadIncomplete: '远程镜像下载不完整。',
driveNotInitialized: '虚拟盘尚未初始化。',
driveConnected: '虚拟盘已连接到被控机,请先断开连接再操作文件。',
driveFilesystemUnsupported: '虚拟盘文件系统不受支持,请重新初始化后再操作。',
driveSizeInvalid: '虚拟盘大小无效。',
storageSpaceUnavailable: '无法获取虚拟媒体存储空间信息。',
storageFull: '虚拟媒体存储空间不足。',
storageReadOnly: '虚拟媒体存储为只读。',
storagePermissionDenied: '没有访问虚拟媒体存储的权限。',
mediumRemovalPrevented: '被控机正在使用该虚拟介质,并拒绝移除。请先在被控机中弹出或卸载该介质,然后重试。',
disconnectFailed: '虚拟介质断开失败,请重试或检查系统日志。',
},
},
settings: {
title: '系统设置',
sidebarSubtitle: '管理设备、网络与扩展',
appearance: '外观',
account: '账户',
video: '视频',
encoder: '编码器',
hid: 'HID',
msd: 'MSD',
atx: 'ATX',
environment: '环境',
network: '网络',
hardware: '硬件',
system: '系统',
other: '其他',
extensions: '扩展',
about: '关于',
appearanceSubtitle: '自定义界面外观与显示语言',
videoSubtitle: '配置采集设备、视频编码器与 WebRTC 信令服务器',
hidSubtitle: '配置 HID 后端、设备、描述符与 USB Gadget 功能',
atxSubtitle: '配置远程电源控制硬件与网络唤醒',
environmentSubtitle: '查看设备信息与系统级运行环境',
otherSubtitle: '其他系统硬件控制与 USB 设备维护',
aboutSubtitle: '在线升级与版本信息',
extTtydSubtitle: '在浏览器中打开本机 Shell 终端',
thirdPartyAccessSubtitle: '集中配置 RustDesk、VNC、RTSP 与 Redfish 外部接入',
extRemoteAccessSubtitle: '通过内网穿透服务实现远程访问',
extFrpcSubtitle: '通过 FRP 客户端实现内网穿透',
watchdog: {
title: '硬件 Watchdog',
description: '硬件 Watchdog 可在系统死机或程序退出时自动触发硬件复位信号',
status: {
running: '运行中',
closed: '已关闭',
unsupported: '不支持',
error: '异常',
},
loadFailed: '无法加载硬件 Watchdog 状态',
toggleFailed: '无法更新硬件 Watchdog',
enableFailed: '无法开启硬件 Watchdog。',
unsupportedReason: '未发现支持的硬件 Watchdog。',
discoveryFailed: '无法发现硬件 Watchdog。',
openFailed: '无法打开硬件 Watchdog。',
feedFailed: '硬件 Watchdog 当前未能正常喂狗。',
disableFailed: '硬件 Watchdog 无法安全停用,将继续喂狗。',
abnormalReason: '硬件 Watchdog 状态异常。',
},
deviceInfo: '设备信息',
deviceInfoDesc: '主机系统信息',
hostname: '主机名',
cpuModel: '处理器 / 平台',
cpuUsage: 'CPU 利用率',
memoryUsage: '内存使用',
networkAddresses: '网络地址',
language: '语言',
theme: '主题',
lightMode: '浅色模式',
darkMode: '深色模式',
systemMode: '跟随系统',
changePassword: '修改密码',
currentPassword: '当前密码',
newPassword: '新密码',
usernameDesc: '修改控制台登录用户名',
passwordDesc: '修改控制台登录密码',
totp: {
title: '双重身份验证',
description: '登录 Web 控制台时要求输入认证器验证码',
serverTime: '服务器时间',
localTime: '本地时间',
clockOffset: '时钟偏差:{seconds} 秒',
clockDriftWarning: '服务器与当前设备的时间相差至少 30 秒,校准时钟前验证码可能无法通过。',
enable: '启用 2FA',
disable: '关闭 2FA',
enableTitle: '设置双重身份验证',
disableTitle: '关闭双重身份验证',
manualSecret: '手动设置密钥',
secretOneTime: '此密钥仅在设置期间显示,请立即添加到认证器。',
enterSixDigitCode: '请输入 6 位认证器验证码',
currentPasswordIncorrect: '当前密码错误',
invalidCode: '认证器验证码错误',
enrollmentExpired: '设置已过期,请重新输入密码开始。',
rateLimited: '错误次数过多,请等待一分钟后重试。',
alreadyEnabled: '双重身份验证已经启用',
notEnabled: '双重身份验证尚未启用',
operationFailed: '无法更新双重身份验证',
loadFailed: '无法加载双重身份验证状态',
},
httpPort: 'HTTP 端口',
httpsPort: 'HTTPS 端口',
bindAddress: '绑定地址',
bindMode: '监听地址',
bindModeAll: '所有地址',
bindModeLocal: '仅本地 (127.0.0.1)',
bindModeCustom: '自定义地址列表',
bindIpv6: '启用 IPv6',
bindAddressList: '地址列表',
addBindAddress: '添加地址',
bindAddressListEmpty: '请至少填写一个 IP 地址。',
httpsEnabled: '启用 HTTPS',
portConfig: '端口与协议',
portConfigDesc: '服务一次仅监听一个端口,由 HTTPS 开关决定生效端口',
redfishTitle: 'Redfish',
redfishDesc: 'DMTF Redfish 标准管理接口',
redfishEnabled: '启用 Redfish API',
redfishEndpoint: 'Redfish 入口',
portActive: '当前生效',
portReserved: '备用',
previewUrl: '访问地址预览',
copyUrl: '复制访问地址',
openInBrowser: '在浏览器中打开',
listenAddress: '监听地址',
listenAddressDesc: '配置 Web 服务监听的网络接口',
effectiveAddresses: '生效监听地址',
sslCertificate: 'SSL 证书',
sslCertificateDesc: '上传自定义 PEM 证书替换自签名证书,保存后需重启服务生效',
sslCertCustom: '自定义证书',
sslCertSelfSigned: '自签名证书',
sslCertActive: '自定义证书已启用',
sslCertClear: '恢复自签名',
sslCertSave: '保存证书',
sslCertPem: '证书内容 (.crt / .pem)',
sslKeyPem: '私钥内容 (.key)',
sslCertPemPlaceholder: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----',
sslKeyPemPlaceholder: '-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----',
restartRequired: '需要重启',
restartRequiredHint: '保存后将自动重启服务以应用新配置',
unsavedChangesHint: '点击右侧按钮保存当前配置',
restartMessage: 'Web 服务器配置已保存,需要重启程序才能生效。',
restarting: '正在重启...',
autoRestarting: '正在自动重启',
autoRestartingDesc: '配置已保存,服务恢复后将自动跳转到新地址...',
autoRestartingHttpsDesc: '服务即将重启,{sec} 秒后将显示跳转链接...',
autoRestartFailed: '自动重启超时,请手动刷新页面或检查服务状态。',
httpsManualRedirectTitle: '请点击下方链接前往新地址',
httpsManualRedirectDesc: 'HTTPS 自签名证书需要在浏览器中手动接受,点击链接后在安全警告页选择"继续访问"即可。',
onlineUpgrade: '在线升级',
onlineUpgradeDesc: '检查并升级 One-KVM',
updateChannel: '升级通道',
currentVersion: '当前版本',
latestVersion: '最新版本',
updateStatus: '升级状态',
releaseNotes: '更新说明',
noUpdates: '当前通道暂无可升级新版本',
updateOverviewLoadFailed: '获取版本更新信息失败',
startUpgrade: '开始升级',
updatePhaseIdle: '空闲',
updatePhaseChecking: '检查中',
updatePhaseDownloading: '下载中',
updatePhaseVerifying: '校验中',
updatePhaseInstalling: '安装中',
updatePhaseRestarting: '重启中',
updatePhaseSuccess: '成功',
updatePhaseFailed: '失败',
updateMsgChecking: '检查更新中',
updateMsgDownloading: '下载中',
updateMsgVerifying: '校验中SHA256',
updateMsgInstalling: '替换程序中',
updateMsgRestarting: '服务重启中',
auth: '访问控制',
authSettings: '会话策略',
authSettingsDesc: '配置单用户登录与并发会话规则',
allowMultipleSessions: '允许多个 Web 会话并存',
username: '用户名',
password: '密码',
msdDir: 'MSD 目录',
msdFlashInquiryString: 'Flash 设备名称',
msdCdromInquiryString: 'CD-ROM 设备名称',
atxPowerButton: '电源按钮',
atxResetButton: '重启按钮',
atxPowerManagement: '电源管理',
atxDriver: '驱动类型',
atxDriverNone: '禁用',
atxDriverGpio: 'GPIO',
atxDriverUsbRelay: 'USB LCUS HID继电器',
atxDriverSerial: 'USB LCUS 串口继电器',
atxDevice: '设备',
atxGpioChip: 'GPIO 芯片',
atxPin: 'GPIO 引脚',
atxChannel: '继电器通道',
atxActiveLevel: '触发电平',
atxLevelHigh: '高电平触发',
atxLevelLow: '低电平触发',
atxLedSensing: 'LED 状态检测',
atxHddSensing: 'HDD 活动检测',
atxWolSettings: '网络唤醒设置',
atxWolSettingsDesc: '配置 Wake-on-LAN 魔术包发送选项',
atxWolInterface: '网络接口',
atxWolInterfacePlaceholder: '例如: eth0, enp0s3',
themeDesc: '选择界面颜色方案',
languageDesc: '选择界面显示语言',
featureVisibility: '功能展示',
featureVisibilityDesc: '控制控制台页面显示的功能入口',
computerUseAgent: 'Computer Use Agent',
pasteText: '粘贴文本',
videoSettings: '视频采集',
videoSettingsDesc: '配置视频采集设备的格式、分辨率与帧率',
videoDevice: '视频设备',
selectDevice: '选择设备...',
videoFormat: '视频格式',
selectFormat: '选择格式...',
resolution: '分辨率',
frameRate: '帧率',
encoderBackend: '视频编码器',
encoderBackendDesc: '选择 WebRTC 输出使用的视频编码器后端',
backend: '后端',
autoRecommended: '自动(推荐)',
software: '软件',
supportedFormats: '支持的编码格式',
hidSettings: 'HID 设置',
hidSettingsDesc: '按后端、设备、描述符和功能顺序配置',
hidBackend: 'HID 后端',
serialDevice: '串口设备',
baudRate: '波特率',
otgUdc: 'OTG 设备控制器',
ch9329Options: 'CH9329 选项',
ch9329OptionsDesc: '配置 CH9329 串口 HID 芯片的运行兼容性',
ch9329HybridMouse: 'Linux 绝对鼠标兼容模式',
ch9329HybridMouseDesc: '绝对移动仍使用绝对鼠标包,点击和滚轮改用相对鼠标包发送',
ch9329Descriptor: 'CH9329 USB 设备描述符',
ch9329DescriptorDesc: '先从 CH9329 芯片读取 USB 标识信息,读取成功后再修改',
ch9329DescriptorLoading: '正在读取 CH9329 描述符...',
ch9329DescriptorLoadFailed: '读取 CH9329 描述符失败',
ch9329ConfigModeUnavailable: 'CH9329 配置模式不可用。读取或写入芯片参数需要将 SET 拉低;当前显示上次保存的描述符。',
ch9329DescriptorReadRequired: '需要先成功读取 CH9329 描述符才能保存',
ch9329DescriptorWarning: '保存会写入 CH9329 参数;需要重新上电或重新插拔后才会变化',
ch9329StringLengthWarning: 'CH9329 字符串最长为 23 字节',
otgHidProfile: 'OTG 功能',
otgFunctionKeyboard: '标准键盘',
otgKeyboardLeds: '键盘状态灯',
otgFunctionMouseRelative: '相对定位鼠标',
otgFunctionMouseAbsolute: '绝对定位鼠标',
otgFunctionConsumer: '多媒体键盘',
otgFunctionMsd: '虚拟媒体MSD',
otgProfileWarning: '保存后 USB 设备会重新连接;若控制器不支持当前组合,将显示失败并恢复原配置',
otgFunctionMinWarning: '请至少启用一个 HID 功能后再保存',
otgNetwork: 'USB 虚拟网卡桥接',
otgRuntimeDegraded: 'OTG 运行时处于降级状态',
otgNetworkDriver: '目标机驱动模式',
otgNetworkInterface: '桥接网卡',
otgNetworkNone: '无',
otgNetworkInterfacesLoadFailed: '无法获取桥接网卡列表',
uacMic: 'USB 麦克风',
otgDescriptor: 'USB 设备描述符',
vendorId: '厂商 ID (VID)',
productId: '产品 ID (PID)',
manufacturer: '制造商',
productName: '产品名称',
serialNumber: '序列号',
serialNumberAuto: '自动生成',
descriptorWarning: '修改这些设置将导致 USB 设备重新连接',
otgSelfCheck: {
title: 'OTG 自检',
desc: '检查 UDC、gadget 绑定和连接状态',
run: '运行自检',
failed: '执行 OTG 自检失败',
overall: '总体状态',
ok: '正常',
hasIssues: '存在问题',
counts: '错误 {errors},警告 {warnings}',
groupCounts: '通过 {ok},警告 {warnings},错误 {errors}',
notRun: '未执行',
status: {
ok: '正常',
warn: '告警',
error: '异常',
skipped: '跳过',
},
groups: {
udc: 'UDC 基础',
gadgetConfig: 'gadget 配置',
oneKvm: 'one-kvm gadget',
functions: '功能与设备节点',
link: '连接状态',
},
values: {
missing: '不存在',
notConfigured: '未配置',
mounted: '已挂载',
unmounted: '未挂载',
available: '可用',
unavailable: '不可用',
exists: '存在',
none: '无',
unbound: '未绑定',
noConflict: '无冲突',
conflict: '冲突',
unknown: '未知',
normal: '正常',
abnormal: '异常',
},
selectedUdc: '目标 UDC',
boundUdc: '已绑定 UDC',
messages: {
udc_dir_exists: 'UDC 目录检查',
udc_has_entries: 'UDC 检查',
configfs_mounted: 'configfs 检查',
usb_gadget_dir_exists: 'usb_gadget 检查',
libcomposite_loaded: 'libcomposite 检查',
one_kvm_gadget_exists: 'one-kvm gadget 检查',
other_gadgets: '其他 gadget 检查',
configured_udc_valid: '配置 UDC 检查',
one_kvm_bound_udc: 'gadget 绑定 UDC 检查',
hid_functions_present: 'HID 函数检查',
config_c1_exists: 'configs/c.1 检查',
function_links_ok: 'functions 链接检查',
hid_device_nodes: 'HID 设备节点检查',
udc_conflict: 'UDC 冲突检查',
udc_state: 'UDC 状态检查',
udc_speed: 'UDC 速率检查',
},
hints: {
udc_dir_exists: '请确认内核已启用 UDC/OTG 驱动',
udc_has_entries: '请确认 OTG 控制器已在设备树中启用',
configfs_mounted: '可执行: mount -t configfs none /sys/kernel/config',
usb_gadget_dir_exists: '请确认 configfs 与 USB gadget 支持已启用',
libcomposite_loaded: '可执行: modprobe libcomposite',
one_kvm_gadget_exists: '启用 OTG HID 或 MSD 后会自动创建 one-kvm gadget',
other_gadgets: '可能与 one-kvm 抢占 UDC请检查是否有其他 OTG 服务',
configured_udc_valid: '请在 HID OTG 设置中重新选择 UDC',
one_kvm_bound_udc: '请确认 HID/MSD 已启用并成功初始化',
hid_functions_present: '请检查 OTG HID 配置是否至少启用了一个 HID 功能',
config_c1_exists: 'gadget 结构不完整,请尝试重启 One-KVM',
function_links_ok: '建议重新初始化 OTG切换一次 HID 后端或重启服务)',
hid_device_nodes: '请确认 gadget 已绑定并检查内核日志',
udc_conflict: '请停用其他 OTG 服务或切换 one-kvm 到空闲 UDC',
udc_state: '请确认已连接被控机,且被控机已识别 USB 设备',
udc_speed: '设备可能未完成枚举,可尝试重插 USB',
},
},
encoderSelfCheck: {
title: '硬件编码能力测试',
desc: '按 720p、1080p、2K、4K 测试硬件编码能力',
run: '开始测试',
failed: '执行硬件编码能力测试失败',
resolution: '分辨率',
currentHardwareEncoder: '当前硬件编码器',
none: '无',
},
usbDevices: {
title: 'USB 设备复位',
desc: '查看已连接的 USB 设备,可通过复位恢复异常设备',
refresh: '刷新',
loadFailed: '加载 USB 设备列表失败',
noDevices: '未发现 USB 设备',
colDevice: '设备',
colSpeed: '速度',
colVideo: '视频',
colAction: '操作',
reset: '复位',
resetConfirmTitle: '确认复位 USB 设备',
resetConfirmDesc: '将通过 authorized 属性复位 USB 设备「{device}」,该设备上的所有连接将短暂中断。确定继续?',
resetAction: '确认复位',
},
webrtcSettings: 'WebRTC 信令',
webrtcSettingsDesc: '配置 STUN/TURN 服务器保存后WebRTC 会话新建立时生效',
stunServer: 'STUN 服务器',
stunServerPlaceholder: 'stun:stun.l.google.com:19302',
turnServer: 'TURN 服务器',
turnServerPlaceholder: 'turn:turn.example.com:3478',
turnUsername: 'TURN 用户名',
turnPassword: 'TURN 密码',
},
virtualKeyboard: {
title: '虚拟键盘',
attach: '固定',
detach: '浮动',
hide: '隐藏',
},
config: {
loadDevicesFailed: '加载设备列表失败',
updateFailed: '更新失败',
},
computerUse: {
title: 'Computer Use',
status: {
waitingScreenshot: '截屏中',
thinking: '思考中',
executing: '执行中',
completed: '已完成',
failed: '失败',
stopped: '已停止',
idle: '空闲',
},
connection: {
connected: '已连接',
disconnected: '未连接',
socketFailed: 'Computer Use WebSocket 连接失败',
messageFailed: '处理 Computer Use WebSocket 消息失败',
},
buttons: {
settings: '设置',
clear: '清空',
close: '关闭',
send: '发送',
stop: '停止',
save: '保存',
clearKey: '清除 Key',
},
reasoning: {
failed: '思考失败',
process: '思考过程',
thinking: '思考中',
},
trace: {
screenshot: '截图',
screenshotAlt: 'Computer Use 截图',
executed: '已执行',
},
input: {
placeholder: '输入任务,按下回车换行,按下 Ctrl+Enter 发送',
apiKeyRequired: '请先配置 API Key。',
},
settings: {
title: 'Computer Use 设置',
enableAi: '启用 AI 操作',
model: '模型',
apiUrl: 'API URL',
apiKey: 'API Key',
configured: '已配置:{source}',
sourceEnv: '环境变量',
sourceConfig: '配置文件',
sourceNone: '未配置',
},
actions: {
click: '点击 ({x}, {y}) {button}',
doubleClick: '双击 ({x}, {y}) {button}',
move: '移动到 ({x}, {y})',
drag: '拖拽 {count} 个点',
scroll: '滚动 ({x}, {y}) dx={dx} dy={dy}',
typeAscii: '输入 {count} 个 ASCII 字符',
keypress: '按键 {keys}',
wait: '等待 {ms}ms',
screenshot: '请求截图',
},
mouseButtons: {
left: '左键',
middle: '中键',
right: '右键',
},
errors: {
configLoadFailed: '无法加载 Computer Use 配置',
taskFailed: 'Computer Use 任务失败',
startFailed: 'Computer Use 启动失败',
stopFailed: 'Computer Use 停止失败',
captureUnavailable: '当前视频画面尚不可用',
screenshotFailed: '截图失败',
},
success: {
configSaved: 'Computer Use 配置已保存',
apiKeyCleared: 'API Key 已清除',
},
},
statusCard: {
device: '设备',
video: '视频',
hid: 'HID',
audio: '音频',
msd: 'MSD',
online: '在线',
offline: '离线',
connecting: '连接中...',
format: '格式',
resolution: '分辨率',
fps: '帧率',
fpsTarget: '目标帧率',
fpsActual: '实际帧率',
paused: '已暂停',
backend: '后端',
currentMode: '当前模式',
absolute: '绝对定位',
relative: '相对定位',
channel: '通道',
networkError: '网络错误',
disconnected: '已断开',
hidUnavailable: 'HID不可用',
audioPlayback: '音频播放',
audioTransfer: '音频传声',
playbackActive: '播放中',
playbackStopped: '已停止',
transferIdle: '未传声',
transferStarting: '正在启动',
transferWaiting: '等待目标机',
transferActive: '传声中',
transferStalled: '目标机未接收',
transferStopping: '正在停止',
transferError: '传声异常',
quality: '质量',
streaming: '传输中',
off: '关闭',
defaultDevice: '默认',
connected: '已连接',
msdStatus: '状态',
msdStandby: '空闲',
msdDriveMode: '虚拟U盘',
msdCurrentImage: '当前镜像',
msdNoImage: '无',
},
extensions: {
available: '可用',
unavailable: '不可用',
running: '运行中',
starting: '启动中',
stopped: '已停止',
failed: '启动失败',
start: '启动',
stop: '停止',
autoStart: '开机自启',
thirdPartyAccess: {
title: '第三方接入',
},
viewLogs: '查看日志',
noLogs: '暂无日志',
binaryNotFound: '未找到 {path},请先安装对应程序',
remoteAccess: {
title: '远程访问',
},
ttyd: {
title: 'Ttyd 网页终端',
desc: '通过 ttyd 提供网页终端访问',
open: '打开终端',
openInNewTab: '在新标签页打开',
shell: 'Shell',
},
gostc: {
title: 'GOSTC 内网穿透',
desc: '通过 GOSTC 实现内网穿透',
addr: '服务器地址',
addrPlaceholder: '主机名或 IP必填',
addrRequired: '请填写 GOSTC 服务器地址',
key: '客户端密钥',
keyRequired: '请填写 GOSTC 客户端密钥',
tls: '启用 TLS',
},
easytier: {
title: 'Easytier 组网',
desc: '通过 EasyTier 实现 P2P VPN 组网',
networkName: '网络名称',
networkNameRequired: '请填写 EasyTier 网络名称',
networkSecret: '网络密钥',
peers: '对等节点',
addPeer: '添加节点',
virtualIp: '虚拟 IP',
},
frpc: {
title: 'FRPC 内网穿透',
desc: '通过 FRP 客户端实现内网穿透',
quickConfig: '快速配置',
fullConfig: '完整配置',
fullConfigHint: '可在此粘贴供应商 TOML 配置文件',
fullConfigRequired: '请填写完整 frpc.toml 配置',
proxyType: '代理类型',
proxyName: '代理名称',
proxyNamePlaceholder: 'one-kvm-ssh',
proxyNameRequired: '请填写 FRPC 代理名称',
serverAddr: '服务器地址',
serverAddrPlaceholder: 'frps.example.com',
serverAddrRequired: '请填写 FRPC 服务器地址',
serverPort: '服务器端口',
token: '认证令牌',
tokenRequired: '请填写 FRPC 认证令牌',
localIp: '本地地址',
localIpRequired: '请填写 FRPC 本地地址',
localPort: '本地端口',
remotePort: '远程端口',
remotePortRequired: 'TCP/UDP 代理需要填写远程端口',
customDomain: '自定义域名',
customDomainPlaceholder: 'kvm.example.com',
secretKey: '访问密钥',
tls: '启用 TLS',
},
rustdesk: {
title: 'RustDesk 远程',
desc: '配置 RustDesk 服务,将会锁定所选编码',
rendezvousServer: 'ID 服务器',
rendezvousServerPlaceholder: 'hbbs.example.com:21116',
rendezvousServerRequired: '请填写 RustDesk ID 服务器',
relayServer: '中继服务器',
relayServerPlaceholder: 'hbbr.example.com:21117',
relayKey: '中继密钥',
codec: '编码格式',
deviceInfo: '设备信息',
deviceId: '设备 ID',
devicePassword: '设备密码',
showPassword: '显示密码',
hidePassword: '隐藏密码',
regenerateId: '重新生成 ID',
regeneratePassword: '重新生成密码',
confirmRegenerateId: '确定要重新生成设备 ID 吗?现有客户端需要使用新 ID 重新连接。',
confirmRegeneratePassword: '确定要重新生成设备密码吗?现有客户端需要使用新密码重新连接。',
registered: '已注册',
connected: '已连接',
disconnected: '未连接',
connecting: '连接中',
notConfigured: '未配置',
notInitialized: '未初始化',
copyId: '复制 ID',
copyPassword: '复制密码',
keypairGenerated: '密钥对已生成',
},
rtsp: {
title: 'RTSP 视频流',
desc: '配置 RTSP 推流服务,将会锁定所选编码',
bind: '监听地址',
port: '端口',
path: '流路径',
pathPlaceholder: 'live',
codec: '编码格式',
allowOneClient: '仅允许单客户端',
username: '用户名',
usernamePlaceholder: '留空表示无需认证',
password: '密码',
passwordPlaceholder: '输入新密码',
urlPreview: 'RTSP 地址预览',
},
vnc: {
title: 'VNC 远程',
desc: '配置 VNC 服务,将会锁定所选编码',
bind: '监听地址',
port: '端口',
encoding: '视频编码',
encodingTightJpeg: 'Tight JPEG',
encodingH264: 'H.264',
allowOneClient: '仅允许单客户端',
password: '密码',
passwordPlaceholder: '留空表示不修改',
passwordRequiredPlaceholder: '最多 8 个字符',
passwordRequired: '请设置 VNC 密码',
passwordMaxLength: 'VNC 密码最多 8 个字符',
clients: '{count} 个客户端',
urlPreview: 'VNC 地址预览',
},
},
stats: {
title: '连接统计',
video: '视频信息',
stability: '网络稳定性',
delay: '播放延迟',
packetLoss: '丢包',
total: '个',
frameRate: '帧率',
bitrate: '码率',
resolution: '分辨率',
packetsLost: '丢包数',
connection: '连接信息',
connectionType: '连接类型',
transport: '传输协议',
localCandidate: '本地候选',
remoteCandidate: '远程候选',
p2p: 'P2P 直连',
relay: 'TURN 中继',
},
help: {
videoBitratePreset: '速度优先:最低延迟,适合网络较差的场景;均衡:画质和延迟平衡;质量优先:最佳画质,需要较好的网络带宽',
absoluteMode: '绝对定位模式直接映射鼠标坐标,适用于大多数场景',
relativeMode: '相对定位模式发送鼠标移动增量,适用于游戏或特殊软件',
mouseThrottle: '发送间隔控制鼠标事件的发送频率,较大的值可减少网络负载',
},
}