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: '视频流错误', // 四档视频状态(对应后端 StreamStateChanged:streaming / 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: '发送间隔控制鼠标事件的发送频率,较大的值可减少网络负载', }, }