export default { // Navigation nav: { printers: '打印机', archives: '归档', queue: '队列', stats: '统计', profiles: '配置文件', maintenance: '维护', projects: '项目', inventory: '耗材', files: '文件管理器', notifications: '通知', settings: '设置', system: '系统', collapseSidebar: '收起侧边栏', expandSidebar: '展开侧边栏', update: '更新', updateAvailable: '有可用更新:v{{version}}', updateAvailableBanner: '版本 {{version}} 已发布!', viewUpdate: '查看更新', viewOnGithub: '在 GitHub 上查看', keyboardShortcuts: '键盘快捷键 (?)', switchToLight: '切换到浅色模式', switchToDark: '切换到深色模式', smartSwitches: '智能开关', logout: '退出登录', }, // Common common: { save: '保存', saving: '保存中...', cancel: '取消', delete: '删除', edit: '编辑', add: '添加', close: '关闭', confirm: '确认', loading: '加载中...', error: '错误', success: '成功', warning: '警告', enabled: '已启用', disabled: '已禁用', yes: '是', no: '否', on: '开', off: '关', all: '全部', none: '无', search: '搜索', filter: '筛选', sort: '排序', refresh: '刷新', download: '下载', upload: '上传', uploading: '上传中...', uploadFailed: '上传失败', actions: '操作', status: '状态', name: '名称', description: '描述', date: '日期', time: '时间', hours: '小时', minutes: '分钟', seconds: '秒', days: '天', enable: '启用', disable: '禁用', permissions: '权限', noPrinters: '未配置打印机', noData: '暂无数据', linkNotFound: '未找到链接', required: '必填', optional: '可选', dismiss: '关闭', apply: '应用', reset: '重置', export: '导出', import: '导入', clear: '清除', selectAll: '全选', deselectAll: '取消全选', noChange: '— 不更改 —', unchanged: '未更改', unassigned: '未分配', unknown: '未知', unknownError: '未知错误', today: '今天', tomorrow: '明天', asap: '尽快', overdue: '已逾期', now: '现在', collapse: '收起', expand: '展开', viewArchive: '查看归档', viewInFileManager: '在文件管理器中查看', addedBy: '由 {{username}} 添加', prints: '次打印', more: '还有 {{count}} 个', ascending: '升序', descending: '降序', printer: '打印机', remove: '移除', type: '类型', print: '打印', rename: '重命名', move: '移动', create: '创建', duplicate: '复制', left: '左', right: '右', }, // Printers page printers: { title: '打印机', addPrinter: '添加打印机', editPrinter: '编辑打印机', deletePrinter: '删除打印机', printerName: '打印机名称', serialNumber: '序列号', ipAddress: 'IP 地址 / 主机名', accessCode: '访问码', model: '型号', nozzleCount: '喷嘴数量', autoArchive: '自动归档', status: { available: '可用', idle: '空闲', printing: '打印中', paused: '已暂停', offline: '离线', problem: '故障', error: '错误', finished: '已完成', unknown: '未知', }, temperatures: { nozzle: '喷嘴', bed: '热床', chamber: '腔室', }, progress: '{{percent}}% 完成', timeRemaining: '剩余 {{time}}', deleteConfirm: '确定要删除"{{name}}"吗?', maintenanceOk: '维护正常', maintenanceWarning: '{{count}} 个警告', maintenanceWarning_plural: '{{count}} 个警告', maintenanceDue: '{{count}} 个到期', maintenanceDue_plural: '{{count}} 个到期', // Sort options sort: { name: '名称', status: '状态', model: '型号', location: '位置', ascending: '升序排列', descending: '降序排列', }, // Card size cardSize: { small: '小卡片', medium: '中卡片', large: '大卡片', extraLarge: '超大卡片', }, // Controls hideOffline: '隐藏离线', nextAvailable: '下一个可用', powerOn: '开机', offlinePrintersWithPlugs: '带智能插座的离线打印机', noPrintersConfigured: '尚未配置打印机', // Printer card readyToPrint: '准备打印', external: '外部', extL: '外置左', extR: '外置右', deleteArchives: '删除打印归档', noLabel: '无标签', printPreview: '打印预览', width: '宽度', height: '高度', noObjectsFound: '未找到对象', objectsLoadedOnPrintStart: '对象在打印开始时加载', willBeSkipped: '将被跳过', name: '名称', serialCannotBeChanged: '序列号无法更改', locationHelp: '用于分组打印机和筛选队列任务', // WiFi signal strength wifiSignal: { veryWeak: '非常弱', weak: '弱', fair: '一般', good: '良好', excellent: '优秀', }, // Maintenance maintenanceUpToDate: '所有维护均已完成 - 点击查看', // Chamber light chamberLightOn: '打开腔室灯', chamberLightOff: '关闭腔室灯', // Files files: '文件', browseFiles: '浏览打印机文件', // Smart plug autoOffAfterPrint: '打印后自动关机', autoOffExecuted: '已执行自动关机 - 开启打印机以重置', // HMS errors hmsErrors: 'HMS 错误', viewHmsErrors: '查看 {{count}} 个 HMS 错误', // Actions resume: '继续', pause: '暂停', stop: '停止', camera: '摄像头', skipObject: '跳过对象', reconnect: '重新连接', mqttDebug: 'MQTT 调试', printerInformation: '打印机信息', copyToClipboard: '复制', copied: '已复制!', state: '状态', wifiSignalLabel: 'WiFi 信号', developerMode: '开发者模式', enabled: '已启用', disabled: '已禁用', addedOn: '添加日期', sdCard: 'SD 卡', inserted: '已插入', notInserted: '未插入', totalPrintHours: '打印时长', activeNozzle: '当前:{{nozzle}} 喷嘴', nozzleRack: '喷嘴架', nozzleDocked: '已停靠', nozzleMounted: '已安装', nozzleActive: '使用中', nozzleIdle: '空闲', nozzleDiameter: '直径', nozzleType: '类型', nozzleStatus: '状态', nozzleFilament: '耗材', nozzleWear: '磨损', nozzleMaxTemp: '最高温度', nozzleSerial: '序列号', nozzleHardenedSteel: '硬化钢', nozzleStainlessSteel: '不锈钢', nozzleTungstenCarbide: '碳化钨', nozzleFlow: '流量', nozzleHighFlow: '高流量', nozzleStandardFlow: '标准', // Firmware firmwareUpdate: '固件更新', firmwareInstructions: '在打印机触摸屏上,前往', firmwareNav: '导航到', settings: '设置', firmware: '固件', // Discovery discoverPrinters: '发现打印机', searching: '搜索中...', manualEntry: '手动输入', addFromCloud: '从云端添加', // Toast messages toast: { printerDeleted: '打印机已删除', missingSpoolAssignment: '已在{{printer}}上开始打印。以下料槽未分配耗材: {{slots}}', printerAdded: '打印机已添加', printerUpdated: '打印机已更新', failedToDelete: '删除打印机失败', failedToAdd: '添加打印机失败', failedToUpdate: '更新打印机失败', commandSent: '命令已发送', failedToSendCommand: '发送命令失败', turnedOn: '{{name}} 已开启', failedToPowerOn: '开启 {{name}} 失败', scriptTriggered: '脚本已触发', printStopped: '打印已停止', printPaused: '打印已暂停', printResumed: '打印已继续', referenceDeleted: '参考已删除', detectionAreaSaved: '检测区域已保存', failedToRunScript: '运行脚本失败', failedToStopPrint: '停止打印失败', failedToPausePrint: '暂停打印失败', failedToResumePrint: '继续打印失败', failedToControlChamberLight: '控制腔室灯失败', failedToSetSpeed: '设置打印速度失败', failedToUpdateSetting: '更新设置失败', failedToSkipObjects: '跳过对象失败', failedToRereadRfid: '重新读取 RFID 失败', failedToCheckPlate: '检查打印板失败', failedToUpdateLabel: '更新标签失败', failedToDeleteReference: '删除参考失败', failedToSaveDetectionArea: '保存检测区域失败', plateCheckEnabled: '打印板检查已启用', plateCheckDisabled: '打印板检查已禁用', calibrationSaved: '校准已保存!', calibrationFailed: '校准失败', rfidRereadInitiated: '已发起 RFID 重新读取', }, // Connection status connection: { connected: '已连接', offline: '离线', }, // Queue info queue: { inQueue: '队列中有 {{count}} 个打印任务', inQueue_plural: '队列中有 {{count}} 个打印任务', }, // Controls section controls: '控制', // RFID rfid: { reread: '重新读取 RFID', }, // Permissions permission: { noAdd: '您没有添加打印机的权限', noEdit: '您没有编辑打印机的权限', noDelete: '您没有删除打印机的权限', noControl: '您没有控制打印机的权限', noFiles: '您没有访问打印机文件的权限', noAmsRfid: '您没有重新读取 AMS RFID 的权限', noSmartPlugControl: '您没有控制智能插座的权限', noCamera: '您没有查看摄像头的权限', }, // Add/Edit modal modal: { addTitle: '添加打印机', editTitle: '编辑打印机', myPrinter: '我的打印机', selectModel: '选择型号...', locationGroup: '位置 / 分组(可选)', locationPlaceholder: '例如:工作室、办公室、地下室', autoArchiveLabel: '自动归档已完成的打印', fromPrinterSettings: '来自打印机设置', modelOptional: '型号(可选)', saveChanges: '保存更改', }, // Skip objects skipObjects: { tooltip: '跳过对象', onlyWhilePrinting: '跳过对象(仅在打印时)', requiresMultiple: '跳过对象(需要2个以上对象)', title: '跳过对象', matchIdsInfo: '将 ID 与打印机显示屏上的 ID 进行对照', printerShowsIds: '打印机屏幕上显示构建板上对象的 ID', skipSelected: '跳过所选', skipping: '跳过中...', noObjectsSelected: '未选择对象', selectObjectsToSkip: '选择要从当前打印中跳过的对象', skipped: '已跳过', objectsSkipped: '对象已跳过', activeCount: '{{count}} 个活跃', waitForLayer: '等待第2层以上才能跳过对象(当前第 {{layer}} 层)', skip: '跳过', confirmTitle: '跳过对象?', confirmMessage: '确定要跳过"{{name}}"吗?此操作无法撤销。', }, // Confirm modals confirm: { deleteTitle: '删除打印机', deleteMessage: '确定要删除"{{name}}"吗?这将移除所有连接设置。', deleteArchivesNote: '此打印机的所有打印历史将被永久删除。', keepArchivesNote: '打印历史将保留,但不再与此打印机关联。', stopTitle: '停止打印', stopMessage: '确定要停止"{{name}}"上的当前打印吗?这将取消打印任务。', stopButton: '停止打印', pauseTitle: '暂停打印', pauseMessage: '确定要暂停"{{name}}"上的当前打印吗?', pauseButton: '暂停打印', resumeTitle: '继续打印', resumeMessage: '确定要继续"{{name}}"上的打印吗?', resumeButton: '继续打印', powerOnTitle: '开启打印机', powerOnMessage: '确定要打开"{{name}}"的电源吗?', powerOnButton: '开机', powerOffTitle: '关闭打印机', powerOffMessage: '确定要关闭"{{name}}"的电源吗?', powerOffWarning: '警告:"{{name}}"正在打印中!确定要关闭电源吗?这将中断打印并可能损坏打印机。', powerOffButton: '关机', }, // Discovery discovery: { title: '发现打印机', searching: '搜索中...', scanning: '扫描中...', scanProgress: '扫描中... {{scanned}}/{{total}}', foundPrinters: '发现 {{count}} 台打印机', noPrintersFound: '未找到打印机', noPrintersFoundSubnet: '在指定子网中未找到打印机。', noPrintersFoundNetwork: '在网络上未找到打印机。', allConfigured: '所有发现的打印机已配置完毕。', alreadyAdded: '已添加', select: '选择', manualEntry: '手动输入', addFromCloud: '从云端添加', subnetToScan: '要扫描的子网', dockerNote: '检测到 Docker 环境。请以 CIDR 格式输入打印机所在子网。需要在 docker-compose.yml 中设置 network_mode: host。', scanSubnet: '扫描子网查找打印机', discoverNetwork: '在网络上发现打印机', scanningSubnet: '正在扫描子网查找拓竹打印机...', scanningNetwork: '正在扫描网络...', serialRequired: '需要序列号', unknown: '未知', failedToStart: '启动发现失败', }, // AMS Drying drying: { start: '开始干燥', stop: '停止干燥', temperature: '温度', duration: '时长', hours: '小时', timeRemaining: '剩余 {{time}}', active: '干燥中', notSupported: '不支持干燥', powerRequired: '连接AMS电源适配器以启用干燥', startingDrying: '正在启动干燥...', stoppingDrying: '正在停止干燥...', rotateTray: '干燥时旋转料盘', }, // Filaments section filaments: '耗材', // Camera openCameraOverlay: '打开摄像头叠加层', openCameraWindow: '在新窗口中打开摄像头', // Firmware firmwareUpdateAvailable: '固件更新可用:{{current}} → {{latest}}', firmwareUpToDate: '固件 {{version}} — 已是最新', firmwareUpdateButton: '更新', // Plate detection plateDetection: { noPermission: '您没有更新打印机的权限', enabledClick: '打印板检查已启用 - 点击禁用', disabledClick: '打印板检查已禁用 - 点击启用', manageCalibration: '管理打印板检测校准', calibrationRequired: '需要校准', calibrationInstructions: '请确保构建板完全空置,然后点击校准。', calibrationDescription: '校准会拍摄空置打印板的参考图像。后续检查将与此参考进行比较以检测物体。', calibrationTip: '提示:您最多可以为不同的打印板存储5个校准。系统会在检查时自动使用最佳匹配。', plateEmpty: '打印板似乎是空的', objectsDetected: '在打印板上检测到物体', confidence: '置信度', difference: '差异', analysisPreview: '分析预览:', analysisLegend: '绿色框 = 检测区域,红色覆盖 = 与校准的差异', savedReferences: '已保存的参考 ({{count}}/{{max}})', deleteReference: '删除参考', labelPlaceholder: '标签...', clickToEdit: '{{label}} - 点击编辑', clickToAddLabel: '点击添加标签', }, // Speed speed: { title: '打印速度', silent: '静音 (50%)', standard: '标准 (100%)', sport: '运动 (124%)', ludicrous: '疯狂 (166%)', }, // Fans fans: { partCooling: '零件冷却风扇', auxiliary: '辅助风扇', chamber: '腔室风扇', }, // HMS errors clickToViewHmsErrors: '点击查看 HMS 错误', estimatedCompletion: '预计完成时间', slotOptions: '槽位选项', // AMS hover popup amsPopup: { friendlyName: 'AMS 名称', friendlyNamePlaceholder: '例如 AMS 友好名称', serialNumber: '序列号', firmwareVersion: '固件', save: '保存', clear: '清除', noEditPermission: '您没有重命名 AMS 单元的权限', }, // Firmware modal firmwareModal: { title: '固件更新', titleUpToDate: '固件信息', currentVersion: '当前版本:', latestVersion: '最新版本:', releaseNotes: '发布说明', checkingPrereqs: '正在检查前提条件...', sdCardReady: 'SD 卡已就绪。点击下方上传固件。', uploadedSuccess: '固件已上传到 SD 卡!', applyInstructions: '在打印机上应用更新:', step1: '在打印机触摸屏上,前往设置', step2: '导航到固件', step3: '选择从 SD 卡更新', step4: '更新将需要 10-20 分钟', done: '完成', starting: '启动中...', uploadFirmware: '上传固件', uploadFailed: '上传启动失败:{{error}}', uploadedToast: '固件已上传!请在打印机屏幕上触发更新。', }, accessCodePlaceholder: '留空以保持当前值', // ROI editor roi: { title: '检测区域 (ROI)', xStart: 'X 起点', yStart: 'Y 起点', width: '宽度', height: '高度', instruction: '调整检测区域以聚焦到构建板。预览中的绿色框显示当前区域。', }, developerModeWarning: '以下打印机未启用开发者局域网模式:{{names}}。某些功能可能无法使用。', howToEnable: '如何启用', incompatibleFile: '此文件是为 {{slicedFor}} 切片的,但该打印机是 {{printerModel}}', dropNotPrintable: '只能打印 .gcode 和 .gcode.3mf 文件', dropToPrint: '拖放以打印', cannotPrint: '打印机忙碌', }, // Archives page archives: { title: '打印归档', searchPlaceholder: '搜索归档...', filterByPrinter: '按打印机筛选', filterByStatus: '按状态筛选', sortBy: '排序方式', sortNewest: '最新优先', sortOldest: '最旧优先', sortName: '名称', sortDuration: '时长', sortLargest: '最大优先', sortSmallest: '最小优先', sortSize: '大小', noArchives: '未找到归档', noArchivesSearch: '没有匹配搜索的归档', originalPrintNotVisible: '原始打印不可见 - 请尝试清除筛选条件', noArchivesYet: '暂无归档', loadingArchives: '加载归档中...', releaseToUpload: '释放以上传', showAll: '显示全部', showFavoritesOnly: '仅显示收藏', gridView: '网格视图', listView: '列表视图', calendarView: '日历视图', logView: '打印日志', manageTags: '管理标签', showFailedPrints: '显示失败的打印', hideFailedPrints: '隐藏失败的打印', hideDuplicates: '隐藏重复项', viewOriginalPrint: '点击查看原始打印 (#{{id}})', printTime: '打印时间', filamentUsed: '耗材用量', cost: '成本', reprint: '重新打印', preview: '预览', deleteArchive: '删除归档', deleteConfirm: '确定要删除此归档吗?', favorite: '收藏', unfavorite: '取消收藏', viewDetails: '查看详情', status: { completed: '已完成', failed: '失败', stopped: '已停止', }, toast: { source3mfAttached: '源 3MF 已附加:{{filename}}', failedUploadSource3mf: '上传源 3MF 失败', source3mfRemoved: '源 3MF 已移除', failedRemoveSource3mf: '移除源 3MF 失败', f3dAttached: 'F3D 已附加:{{filename}}', failedUploadF3d: '上传 F3D 失败', f3dRemoved: 'F3D 已移除', failedRemoveF3d: '移除 F3D 失败', timelapseAttached: '延时摄影已附加:{{filename}}', timelapseAlreadyAttached: '延时摄影已附加', noMatchingTimelapse: '未找到匹配的延时摄影', failedScanTimelapse: '扫描延时摄影失败', failedAttachTimelapse: '附加延时摄影失败', timelapseRemoved: '延时摄影已移除', failedRemoveTimelapse: '移除延时摄影失败', timelapseUploaded: '延时摄影已上传:{{filename}}', failedUploadTimelapse: '上传延时摄影失败', archiveDeleted: '归档已删除', failedDeleteArchive: '删除归档失败', addedToFavorites: '已添加到收藏', removedFromFavorites: '已从收藏中移除', projectUpdated: '项目已更新', failedUpdateProject: '更新项目失败', linkCopied: '链接已复制到剪贴板', failedCopyLink: '复制链接失败', photoDeleted: '照片已删除', failedDeletePhoto: '删除照片失败', failedDeleteArchives: '删除归档失败', failedUpdateFavorites: '更新收藏失败', exportDownloaded: '导出已下载', exportFailed: '导出失败', }, menu: { print: '打印', schedule: '排程', openInBambuStudio: '在切片软件中打开', slice: '切片', externalLink: '外部链接', viewOnMakerWorld: '在 MakerWorld 上查看', preview3d: '3D 预览', viewTimelapse: '查看延时摄影', scanForTimelapse: '扫描延时摄影', uploadTimelapse: '上传延时摄影', removeTimelapse: '移除延时摄影', downloadSource3mf: '下载源 3MF', uploadSource3mf: '上传源 3MF', replaceSource3mf: '替换源 3MF', removeSource3mf: '移除源 3MF', uploadF3d: '上传 F3D', replaceF3d: '替换 F3D', downloadF3d: '下载 F3D', removeF3d: '移除 F3D', download: '下载', copyDownloadLink: '复制下载链接', qrCode: '二维码', viewPhotos: '查看照片', viewPhotosCount: '查看照片 ({{count}})', projectPage: '项目页面', addToFavorites: '添加到收藏', removeFromFavorites: '从收藏中移除', edit: '编辑', goToProject: '前往项目:{{name}}', addToProject: '添加到项目', removeFromProject: '从项目中移除', loading: '加载中...', noProjectsAvailable: '无可用项目', select: '选择', deselect: '取消选择', delete: '删除', }, permission: { noReprint: '您没有重新打印此归档的权限', noAddToQueue: '您没有添加到队列的权限', noUpdateArchives: '您没有更新归档的权限', noUploadFiles: '您没有上传文件的权限', noDownload: '您没有下载归档的权限', noCopyLink: '您没有复制下载链接的权限', noDelete: '您没有删除此归档的权限', noCreate: '您没有创建归档的权限', }, card: { previousPlate: '上一个板', nextPlate: '下一个板', plateNumber: '板 {{index}}', moreOptions: '右键查看更多选项', addToFavorites: '添加到收藏', removeFromFavorites: '从收藏中移除', cancelled: '已取消', failed: '失败', duplicate: '重复', duplicateTitle: '此模型之前已打印过', openSource3mf: '在 Bambu Studio 中打开源 3MF(右键查看更多选项)', downloadF3d: '下载 Fusion 360 设计文件', viewTimelapse: '查看延时摄影', viewPhoto: '查看 1 张照片', viewPhotos: '查看 {{count}} 张照片', openFolder: '打开文件夹:{{name}}', slicedFile: '已切片文件 - 可以打印', sourceFile: '仅源文件 - 无 AMS 映射可用', gcode: 'GCODE', source: '源文件', project: '项目:{{name}}', estimated: '预计:{{time}}', actual: '实际:{{time}}', accuracy: '准确度:{{percent}}%', filament: '{{weight}}g', layer: '{{count}} 层', layers: '{{count}} 层', object: '{{count}} 个对象', objects: '{{count}} 个对象', slicedFor: '为 {{model}} 切片', uploadedBy: '上传者', noPermissionReprint: '您没有重新打印的权限', noFileForReprint: '无可用的 3MF 文件 — 打印记录时无法从打印机下载该文件', noPermissionEdit: '您没有编辑归档的权限', noPermissionDelete: '您没有删除归档的权限', reprint: '重新打印', schedulePrint: '排程打印', schedule: '排程', openInBambuStudio: '在切片软件中打开', openInBambuStudioToSlice: '在切片软件中打开进行切片', slice: '切片', externalLink: '外部链接', makerWorld: 'MakerWorld:{{designer}}', viewProject: '查看项目', noExternalLink: '无外部链接', preview3d: '3D 预览', download: '下载', edit: '编辑', delete: '删除', }, modal: { deleteArchive: '删除归档', deleteConfirm: '确定要删除"{{name}}"吗?此操作无法撤销。', deleteButton: '删除', removeSource3mf: '移除源 3MF', removeSource3mfConfirm: '确定要从"{{name}}"中移除源 3MF 文件吗?这将删除原始切片项目文件。', removeButton: '移除', removeF3d: '移除 F3D', removeF3dConfirm: '确定要从"{{name}}"中移除 Fusion 360 设计文件吗?', removeTimelapse: '移除延时摄影', removeTimelapseConfirm: '确定要从"{{name}}"中移除延时摄影视频吗?', timelapse: '{{name}} - 延时摄影', selectTimelapse: '选择延时摄影', selectTimelapseDesc: '未找到自动匹配。请选择此打印的延时摄影:', deleteArchives: '删除归档', deleteArchivesConfirm: '确定要删除 {{count}} 个归档吗?此操作无法撤销。', deleteCount: '删除 {{count}} 个', }, page: { title: '归档', printsCount: '{{filtered}} / {{total}} 次打印', dropFilesHere: '将 .3mf 文件拖放到此处', releaseToUpload: '释放以上传', only3mfSupported: '仅支持 .3mf 文件', close: '关闭', selected: '已选择 {{count}} 个', selectAll: '全选', tags: '标签', project: '项目', favorite: '收藏', delete: '删除', toggledFavorites: '已切换 {{count}} 个归档的收藏状态', failedUpdateFavorites: '更新收藏失败', archivesDeleted: '已删除 {{count}} 个归档', failedDeleteArchives: '删除归档失败', photoDeleted: '照片已删除', failedDeletePhoto: '删除照片失败', }, list: { name: '名称', printer: '打印机', date: '日期', size: '大小', actions: '操作', hasTimelapse: '有延时摄影', }, log: { date: '日期', printName: '打印名称', printer: '打印机', user: '用户', status: '状态', duration: '时长', filament: '耗材', allPrinters: '所有打印机', allUsers: '所有用户', allStatuses: '所有状态', cancelled: '已取消', skipped: '已跳过', dateFrom: '从', dateTo: '到', noEntries: '未找到打印日志条目', showing: '显示 {{count}} / {{total}} 条', rowsPerPage: '行数', page: '页', prev: '上一页', next: '下一页', clearLog: '清除日志', clearLogTitle: '清除打印日志', clearLogConfirm: '所有打印日志条目将被永久删除。归档和队列项目不受影响。此操作无法撤销。确定要继续吗?', clearLogButton: '全部清除', cleared: '已清除 {{count}} 条日志', clearFailed: '清除打印日志失败', }, }, // Queue page queue: { title: '打印队列', subtitle: '排程和管理您的打印任务', addToQueue: '添加到队列', // Print modal print: '打印', reprint: '重新打印', schedulePrint: '排程打印', editQueueItem: '编辑队列项目', printToPrinters: '打印到 {{count}} 台打印机', queueToPrinters: '排队到 {{count}} 台打印机', queueSelectedPlates: '将 {{count}} 个热床加入队列', selectAllPlates: '选择全部 {{count}} 个热床', deselectAll: '取消全选', printQueued: '已加入打印队列', itemsQueued: '{{count}} 个任务已加入队列', sending: '发送中...', sendingProgress: '发送中 {{current}}/{{total}}...', adding: '添加中...', addingProgress: '添加中 {{current}}/{{total}}...', savingProgress: '保存中 {{current}}/{{total}}...', clearQueue: '清空队列', clearHistory: '清除历史', emptyQueue: '队列为空', position: '位置', scheduledTime: '排程时间', moveUp: '上移', moveDown: '下移', startNow: '立即开始', printingInProgress: '打印进行中...', viewArchive: '查看归档', viewInFileManager: '在文件管理器中查看', itemCount: '{{count}} 个项目', itemCount_plural: '{{count}} 个项目', dragToReorder: '拖动以重新排序(仅限尽快)', reorderHint: '位置仅影响"尽快"项目。排程项目按设定时间运行。', addedBy: '由 {{name}} 添加', nextInQueue: '队列中的下一个', clearPlate: '清理打印板并开始下一个', clearPlateSuccess: '打印板已清理 — 准备进行下一个打印', plateReady: '打印板已清理 — 准备进行下一个打印', plateNumber: '板 {{index}}', // Sections sections: { currentlyPrinting: '正在打印', queued: '排队中', history: '历史', }, // Status status: { pending: '等待中', waiting: '等待中', printing: '打印中', paused: '已暂停', completed: '已完成', failed: '失败', skipped: '已跳过', cancelled: '已取消', }, // Summary cards summary: { printing: '打印中', queued: '排队中', totalTime: '总队列时间', totalWeight: '总队列重量', history: '历史', }, // Filters filter: { allPrinters: '所有打印机', unassigned: '未分配', allStatus: '所有状态', allLocations: '所有位置', any: '任意', }, // Sort sort: { byPosition: '按位置排序', byName: '按名称排序', byPrinter: '按打印机排序', bySchedule: '按排程排序', byDate: '按日期排序', ascendingOldest: '升序(最旧优先)', descendingNewest: '降序(最新优先)', }, // Badges badges: { staged: '已暂存', requiresPrevious: '需要前一个成功', autoPowerOff: '自动关机', }, // Empty state empty: { title: '没有排程的打印', description: '从归档页面使用右键菜单中的"排程"选项来排程打印,或拖放文件开始。', }, // Time time: { asap: '尽快', overdue: '已逾期', now: '现在', lessThanMinute: '不到一分钟', inMinutes: '{{count}} 分钟后', inHours: '{{count}} 小时后', }, // Actions actions: { stopPrint: '停止打印', startPrint: '开始打印', requeue: '重新排队', }, // Bulk edit bulkEdit: { title: '编辑 {{count}} 个项目', title_plural: '编辑 {{count}} 个项目', description: '仅更改的设置将应用于所选项目。', printer: '打印机', noChange: '— 不更改 —', queueOptions: '队列选项', staged: '暂存(手动开始)', autoPowerOff: '打印后自动关机', requirePrevious: '要求前一个成功', printOptions: '打印选项', bedLevelling: '热床调平', flowCalibration: '流量校准', vibrationCalibration: '振动校准', layerInspection: '首层检查', timelapse: '延时摄影', useAms: '使用 AMS', applyChanges: '应用更改', selectAll: '全选', deselectAll: '取消全选', selected: '已选择 {{count}} 个', editSelected: '编辑所选', cancelSelected: '取消所选', }, // Confirmations confirm: { cancelTitle: '取消排程打印', cancelMessage: '确定要取消"{{name}}"吗?', stopTitle: '停止打印', stopMessage: '确定要停止当前打印"{{name}}"吗?这将取消打印机上的打印任务。', removeTitle: '从历史中移除', removeMessage: '确定要从队列历史中移除"{{name}}"吗?', clearHistoryTitle: '清除历史', clearHistoryMessage: '确定要从历史中移除所有 {{count}} 个项目吗?', cancelButton: '取消打印', stopButton: '停止打印', thisPrint: '此打印', thisItem: '此项目', }, // Toast messages toast: { cancelled: '队列项目已取消', cancelFailed: '取消项目失败', removed: '队列项目已移除', removeFailed: '移除项目失败', stopped: '打印已停止', stopFailed: '停止打印失败', released: '打印已释放到队列', startFailed: '开始打印失败', reorderFailed: '重新排序队列失败', historyCleared: '已清除 {{count}} 条历史记录', clearHistoryFailed: '清除历史失败', updateFailed: '更新项目失败', bulkCancelled: '已取消 {{count}} 个项目', bulkCancelFailed: '批量取消项目失败', }, // Permissions permissions: { noStopPrint: '您没有停止打印的权限', noStartPrint: '您没有开始打印的权限', noEdit: '您没有编辑此队列项目的权限', noCancel: '您没有取消此队列项目的权限', noRequeue: '您没有重新排队的权限', noRemove: '您没有移除此队列项目的权限', noClearHistory: '您没有清除所有历史的权限', noEditItems: '您没有编辑队列项目的权限', noCancelItems: '您没有取消队列项目的权限', }, }, backgroundDispatch: { unknownFile: '未知文件', unknownPrinter: '未知打印机', startingPrints: '正在开始打印', progressSummary: '{{complete}}/{{total}} 完成 • 已分发:{{dispatched}} • 处理中:{{processing}}', expandDetails: '展开分发详情', collapseDetails: '收起分发详情', dismissToast: '关闭分发通知', cancelDispatchJob: '取消分发任务', cancel: '取消', cancelling: '取消中…', status: { dispatched: '已分发', processing: '处理中', completed: '已完成', failed: '失败', cancelled: '已取消', }, toast: { cancellingUpload: '取消上传中...', cancelled: '分发已取消', cancelFailed: '取消分发失败', completeWithFailures: '后台分发完成:{{completed}} 成功,{{failed}} 失败', completeSuccess: '后台分发完成:{{completed}} 成功', printStartedRemaining: '{{completed}} 个打印已开始,{{remaining}} 个正在发送...', }, }, // Statistics page stats: { title: '仪表板', subtitle: '拖动小部件以重新排列。点击眼睛图标隐藏。', overview: '概览', totalPrints: '总打印次数', successRate: '成功率', totalPrintTime: '总打印时间', printTime: '打印时间', totalFilament: '总耗材用量', filamentUsed: '耗材用量', filamentCost: '耗材成本', totalCost: '总成本', energyUsed: '能耗', energyCost: '能源成本', averagePrintTime: '平均打印时间', printsPerDay: '每日打印次数', byPrinter: '按打印机', printsByPrinter: '各打印机打印次数', byMaterial: '按材料', byMonth: '按月份', last7Days: '最近 7 天', last30Days: '最近 30 天', last90Days: '最近 90 天', allTime: '全部时间', // Widgets quickStats: '快速统计', printActivity: '打印活动', filamentTypes: '耗材类型', filamentTrends: '耗材趋势', failureAnalysis: '失败分析', timeAccuracy: '时间准确度', successful: '成功:', failed: '失败:', perfectEstimate: '100% = 完美估计', noTimeAccuracyData: '暂无时间准确度数据', noFilamentData: '暂无耗材数据', noPrinterData: '暂无打印机数据', noPrintData: '暂无打印数据', noPrintDataLast30Days: '最近 30 天无打印数据', failureReasons: '失败原因', topFailureReasons: '主要失败原因', failedPrintsCount: '{{failed}} / {{total}} 次打印失败', lastWeekRate: '上周:{{rate}}%', // Actions resetLayout: '重置布局', recalculateCosts: '重新计算成本', recalculateCostsHint: '使用当前耗材价格重新计算所有归档成本', exportStats: '导出统计', exportAsCsv: '导出为 CSV', exportAsExcel: '导出为 Excel', hiddenCount: '{{count}} 个已隐藏', // Toast exportDownloaded: '导出已下载', exportFailed: '导出失败', layoutReset: '布局已重置', recalculatedCosts: '已为 {{count}} 个归档重新计算成本', recalculateFailed: '重新计算成本失败', // Loading loadingStats: '加载统计数据中...', // Permissions noPermissionResetLayout: '您没有重置布局的权限', noPermissionRecalculate: '您没有重新计算成本的权限', noPrintDataInRange: '所选范围内无打印数据', periodFilament: '期间耗材', periodCost: '期间成本', avgPerPrint: '每次打印平均', usageOverTime: '随时间的使用量', filamentByWeight: '重量', printDuration: '打印时长', printerUtilization: '打印机利用率', filamentSuccess: '按材料成功率', printHabits: '打印习惯', printTimeOfDay: '打印时段', colorDistribution: '颜色分布', noColorData: '暂无颜色数据', records: '记录', longestPrint: '最长打印', heaviestPrint: '最重打印', mostExpensivePrint: '最贵打印', busiestDay: '最忙碌的一天', successStreak: '连续成功', streakPrint: '连续打印', streakPrints: '{{count}} 次连续打印', printerStats: '打印机统计', hours: '小时', avgPrints: '平均打印', noArchiveData: '暂无打印数据', filamentByTime: '时间', avgWeight: '平均重量', avgTime: '平均时间', filamentByPrints: '打印次数', timeframe: { today: '今天', 'this-week': '本周', 'this-month': '本月', 'last-7': '最近 7 天', 'last-30': '最近 30 天', 'last-90': '最近 90 天', 'this-year': '今年', 'all-time': '全部时间', custom: '自定义范围', from: '从', to: '到', }, }, // Maintenance page maintenance: { title: '维护', overview: '概览', allOk: '所有维护均已完成', dueCount: '{{count}} 项到期', dueCount_plural: '{{count}} 项到期', warningCount: '{{count}} 个警告', warningCount_plural: '{{count}} 个警告', totalPrintTime: '总打印时间', nextMaintenance: '下次维护', nothingDue: '无到期项目', tasks: '任务', lastPerformed: '上次执行', interval: '间隔', hoursRemaining: '剩余 {{hours}} 小时', hoursOverdue: '逾期 {{hours}} 小时', markDone: '标记为完成', performMaintenance: '执行维护', history: '历史', noHistory: '无维护历史', editPrintHours: '编辑打印时间', currentHours: '当前小时数', // Tabs statusTab: '状态', settingsTab: '设置', // Status overdueCount: '{{count}} 个逾期', dueSoonCount: '{{count}} 个即将到期', dueSoon: '即将到期', allGood: '一切正常', overdueBy: '逾期 {{duration}}', dueIn: '{{duration}} 后到期', timeLeft: '剩余 {{duration}}', // Duration formats day: '1 天', days: '{{count}} 天', week: '1 周', weeks: '{{count}} 周', month: '1 个月', months: '{{count}} 个月', year: '1 年', // Settings maintenanceTypes: '维护类型', maintenanceTypesDescription: '系统类型和您的自定义维护任务', addCustomType: '添加自定义类型', restoreDefaults: '恢复默认任务', intervalType: '间隔类型', intervalValue: '间隔 ({{type}})', icon: '图标', documentationLink: '文档链接(可选)', assignToPrinters: '分配给打印机', selectAtLeastOnePrinter: '至少选择一台打印机', addType: '添加类型', custom: '自定义', printHours: '打印小时数', calendarDays: '日历天数', exampleName: '例如:更换 HEPA 过滤器', viewDocumentation: '查看文档', timeBasedInterval: '基于时间的间隔', // Interval overrides intervalOverrides: '间隔覆盖', intervalOverridesDescription: '为特定打印机自定义间隔', // Printer assignment assignedToPrinters: '已分配给打印机:', noPrintersAssigned: '未分配打印机', addPrinterShort: '添加:', printersAssignedClick: '已分配 {{count}} 台打印机 - 点击管理', removeFromPrinter: '从此打印机移除', // Types types: { lubricateCarbonRods: '润滑碳纤维杆', lubricateRails: '润滑线性导轨', cleanNozzle: '清洁喷嘴/热端', checkBelts: '检查皮带张力', cleanBuildPlate: '清洁构建板', checkExtruder: '检查挤出机齿轮', checkCooling: '检查冷却风扇', generalInspection: '综合检查', cleanCarbonRods: '清洁碳纤维杆', lubricateSteelRods: '润滑钢杆', cleanSteelRods: '清洁钢杆', cleanLinearRails: '清洁线性导轨', checkPtfeTube: '检查 PTFE 管', replaceHepaFilter: '更换 HEPA 过滤器', replaceCarbonFilter: '更换活性炭过滤器', lubricateLeftNozzleRail: '润滑左喷嘴导轨', }, // Toast maintenanceComplete: '维护已标记为完成', typeUpdated: '维护类型已更新', typeDeleted: '维护类型已删除', defaultsRestored: '已恢复 {{count}} 个默认任务', printHoursUpdated: '打印小时数已更新', printerAssigned: '打印机已分配', printerRemoved: '打印机已移除', // Confirmation deleteTypeConfirm: '删除"{{name}}"?', deleteSystemTypeTitle: '删除默认维护任务?', deleteSystemTypeMessage: '确定要删除默认维护任务"{{name}}"吗?', // Permissions noPermissionUpdate: '您没有更新维护项目的权限', noPermissionPerform: '您没有执行维护的权限', noPermissionEditTypes: '您没有编辑维护类型的权限', noPermissionDeleteTypes: '您没有删除维护类型的权限', noPermissionEditHours: '您没有编辑打印时间的权限', noPermissionRemovePrinter: '您没有移除打印机分配的权限', noPermissionAssignPrinter: '您没有分配打印机的权限', noPermissionEditIntervals: '您没有编辑间隔的权限', // Configure link configureSettings: '配置维护类型和间隔', }, // Settings page settings: { title: '设置', general: '通用', // Tab names tabs: { general: '通用', smartPlugs: '智能插座', notifications: '通知', filament: '耗材', network: '网络', apiKeys: 'API 密钥', virtualPrinter: '虚拟打印机', users: '身份验证', backup: '备份', emailAuth: '邮箱认证', }, // Email settings email: { smtpSettings: 'SMTP 配置', smtpHost: 'SMTP 服务器', smtpPort: 'SMTP 端口', security: '安全', authentication: '认证', username: '用户名', password: '密码', fromEmail: '发件邮箱', fromName: '发件人名称', testConnection: '测试 SMTP 连接', testRecipient: '测试收件邮箱', sendTest: '发送测试邮件', sending: '发送中...', save: '保存设置', saving: '保存中...', advancedAuth: '高级认证', advancedAuthEnabled: '高级认证已启用', advancedAuthEnabledDesc: '基于邮箱的用户管理功能已激活。新用户将通过邮件收到自动生成的密码,用户可以通过忘记密码功能重置密码。', advancedAuthDisabled: '高级认证已禁用', advancedAuthDisabledDesc: '启用高级认证以激活基于邮箱的用户管理功能。', enable: '启用', disable: '禁用', feature1: '密码自动生成并通过邮件发送给新用户', feature2: '用户可以使用用户名或邮箱登录', feature3: '忘记密码功能可用', feature4: '管理员可以通过邮件重置用户密码', // Error messages errors: { requiredFields: '请填写所有必填字段', usernameRequired: '启用认证时需要用户名', enterTestEmail: '请输入测试邮箱地址', smtpServerAndEmail: '测试前请填写 SMTP 服务器和发件邮箱', usernamePasswordRequired: '启用认证时需要用户名和密码', configureSmtpFirst: '请先配置并测试 SMTP 设置', enableAuthFirst: '请先启用身份验证才能使用基于电子邮件的功能。', }, // Success messages success: { settingsSaved: 'SMTP 设置保存成功', }, // Security options securityOptions: { starttls: 'STARTTLS(端口 587)', ssl: 'SSL/TLS(端口 465)', none: '无(端口 25)', }, // Authentication options authOptions: { enabled: '已启用', disabled: '已禁用', }, }, appearance: '外观', notifications: '通知', smartPlugs: '智能插座', spoolman: 'Spoolman', updates: '更新', language: '语言', languageDescription: '选择您的首选语言', theme: '主题', themeLight: '浅色', themeDark: '深色', themeSystem: '跟随系统', defaultView: '默认视图', defaultViewDescription: '打开应用时显示的页面', checkForUpdates: '检查更新', autoUpdate: '自动更新', currentVersion: '当前版本', latestVersion: '最新版本', upToDate: '已是最新版本', updateAvailable: '有可用更新', // Notifications notificationLanguage: '通知语言', notificationLanguageDescription: '推送通知的语言', bedCooledThreshold: '热床冷却阈值', bedCooledThresholdDescription: '打印后热床被视为已冷却的温度', userNotificationsEnabled: '用户通知', userNotificationsEnabledDescription: '启用用户通知菜单和打印任务事件的邮件通知。需要高级身份验证。', userNotificationsDisabledHint: '请启用高级身份验证以使用用户通知。', notificationProviders: '通知提供商', addProvider: '添加提供商', editProvider: '编辑提供商', providerType: '提供商类型', testNotification: '测试通知', testSuccess: '测试通知发送成功', testFailed: '发送测试通知失败', quietHours: '免打扰时间', quietHoursDescription: '在此时间段内不发送通知', quietHoursStart: '开始', quietHoursEnd: '结束', events: { title: '通知事件', printStart: '打印开始', printComplete: '打印完成', printFailed: '打印失败', printStopped: '打印停止', printProgress: '进度里程碑', printProgressDescription: '在 25%、50%、75% 时通知', printerOffline: '打印机离线', printerError: '打印机错误', filamentLow: '耗材不足', maintenanceDue: '维护到期', maintenanceDueDescription: '需要维护时通知', }, // Smart Plugs smartPlug: { title: '智能插座', add: '添加智能插座', edit: '编辑智能插座', name: '名称', ipAddress: 'IP 地址', linkedPrinter: '关联打印机', autoOn: '自动开启', autoOnDescription: '打印开始时开启', autoOff: '自动关闭', autoOffDescription: '打印完成后关闭', offDelay: '关闭延迟', offDelayMinutes: '打印后分钟数', offDelayTemp: '当喷嘴温度低于', currentState: '当前状态', turnOn: '开启', turnOff: '关闭', }, // Filament Tracking Mode filamentTracking: '耗材追踪', filamentTrackingDesc: '选择如何追踪您的耗材。您可以使用内置库存或连接外部 Spoolman 服务器。', filamentChecks: '耗材检查', disableFilamentWarnings: '禁用耗材警告', disableFilamentWarningsDesc: '在打印或加入队列时不显示耗材不足警告', trackingModeBuiltIn: '内置库存', trackingModeBuiltInDesc: '包含 RFID 自动匹配和用量追踪', trackingModeSpoolmanDesc: '外部耗材管理服务器', builtInFeatureRfid: '自动检测 AMS 中的拓竹 RFID 耗材', builtInFeatureUsage: '追踪每次打印的耗材消耗', builtInFeatureCatalog: '管理耗材、颜色和 K 值配置文件', builtInFeatureThirdParty: '第三方耗材可分配到库存耗材', amsSyncButton: '从 AMS 同步重量', amsSyncTitle: '从 AMS 同步耗材重量', amsSyncMessage: '这将使用已连接打印机的当前 AMS 剩余百分比值覆盖所有库存耗材重量。用于从损坏的重量数据中恢复。打印机必须在线。', amsSyncing: '同步中...', amsSyncSuccess: '已同步 {{synced}} 个耗材,跳过 {{skipped}} 个', amsSyncError: '从 AMS 同步重量失败', // Spoolman settings spoolmanUrl: 'Spoolman URL', spoolmanUrlHint: 'Spoolman 服务器的 URL(例如 http://localhost:7912)', spoolmanConnected: '已连接', spoolmanDisconnected: '未连接', status: '状态', connect: '连接', disconnect: '断开', howSyncWorks: '同步工作原理', syncInfoRfidOnly: '仅同步带有 RFID 的官方拓竹耗材', syncInfoAutoCreate: '首次同步时自动在 Spoolman 中创建新耗材', syncInfoThirdPartySkipped: '非拓竹耗材(第三方、重新填充的)将被跳过', linkingExistingSpools: '链接现有耗材', linkingExistingSpoolsDesc: '要将现有的 Spoolman 耗材链接到您的 AMS,请将鼠标悬停在 AMS 槽位上并点击"链接到 Spoolman"。', syncMode: '同步模式', syncModeAuto: '自动', syncModeManual: '仅手动', syncModeAutoDesc: '检测到更改时自动同步 AMS 数据', syncModeManualDesc: '仅在手动触发时同步', syncAmsData: '同步 AMS 数据', syncAmsDataDesc: '手动将打印机 AMS 数据同步到 Spoolman', allPrinters: '所有打印机', // Default printer noDefaultPrinter: '无默认(每次询问)', // Sidebar sidebarOrder: '侧边栏顺序', // Camera saveThumbnails: '保存缩略图', captureFinishPhoto: '拍摄完成照片', noPrintersConfigured: '未配置打印机', // Archive settings archiveMode: { always: '始终创建归档条目', never: '从不创建归档条目', ask: '每次询问', }, // Updates checkForUpdatesLabel: '检查更新', checkPrinterFirmware: '检查打印机固件', includeBetaUpdates: '包含测试版本', includeBetaUpdatesDesc: '检查更新时通知测试版和预发布版本', // Queue enableRetry: '启用重试', // Home Assistant homeAssistantDescription: '通过 Home Assistant 控制智能插座', environmentManagedLabel: '(环境变量管理)', autoEnabledViaEnv: '通过环境变量自动启用', urlFromEnvReadOnly: '值由 HA_URL 环境变量设置(只读)', tokenFromEnvReadOnly: '值由 HA_TOKEN 环境变量设置(只读)', // MQTT mqttConnectedTo: '已连接到', // Prometheus prometheusDescription: '以 Prometheus 格式暴露打印机数据', // Smart plugs empty state noSmartPlugsTitle: '未配置智能插座', noSmartPlugsDescription: '添加基于 Tasmota 的智能插座以追踪能耗并自动化电源控制。', // Notifications empty state noProvidersTitle: '未配置提供商', noProvidersDescription: '添加提供商以接收警报。', noTemplatesAvailable: '无可用模板。重启后端以加载默认模板。', // API permissions apiPermissionView: '查看打印机状态和队列', apiPermissionEdit: '添加和移除打印队列中的项目', // API keys apiKeysEmptyTitle: '无 API 密钥', apiKeysEmptyDescription: '创建 API 密钥以与外部服务集成。', // Users noUsersFound: '未找到用户', noGroupsFound: '未找到组', noGroupsAvailable: '无可用组', passwordsDoNotMatch: '密码不匹配', systemGroupWarning: '系统组名称不可更改', // Auth disabled authDisabledTitle: '身份验证已禁用', authDisabledFeature1: '需要登录才能访问系统', authDisabledFeature2: '创建多个用户并基于组的权限管理', authDisabledFeature3: '使用 50+ 个细粒度权限控制访问', // User deletion userHasCreated: '此用户已创建:', userItemsQuestion: '您想如何处理这些项目?', deleteUserConfirm: '确定要删除此用户吗?', actionCannotBeUndone: '此操作无法撤销。', // Smart plugs addFirstSmartPlug: '添加您的第一个智能插座', // Notifications providers: '提供商', log: '日志', testAll: '全部测试', testResults: '测试结果', testPassedCount: '{{count}} 个通过', testFailedCount: '{{count}} 个失败', messageTemplates: '消息模板', messageTemplatesDescription: '自定义每个事件的通知消息。', // API Keys section apiKeys: 'API 密钥', apiKeysDescription: '创建 API 密钥用于外部集成和 Webhook。', createKey: '创建密钥', apiKeyCreated: 'API 密钥创建成功', apiKeyCopyWarning: '请立即复制此密钥 - 它不会再次显示!', useInApiBrowser: '在 API 浏览器中使用', createNewApiKey: '创建新 API 密钥', keyName: '密钥名称', keyNamePlaceholder: '例如:Home Assistant、OctoPrint', readStatus: '读取状态', readStatusDescription: '查看打印机状态和队列', manageQueue: '管理队列', manageQueueDescription: '添加和移除打印队列中的项目', controlPrinter: '控制打印机', controlPrinterDescription: '暂停、继续和停止打印', unnamedKey: '未命名密钥', lastUsed: '上次使用', read: '读取', control: '控制', createFirstKey: '创建您的第一个密钥', webhookEndpoints: 'Webhook 端点', webhookApiKeyHint: '在 X-API-Key 请求头中使用您的 API 密钥。', webhook: { getAllStatus: '获取所有打印机状态', getSpecificStatus: '获取特定打印机状态', addToQueue: '添加到打印队列', pausePrint: '暂停打印', resumePrint: '继续打印', stopPrint: '停止打印', }, apiBrowser: 'API 浏览器', apiBrowserDescription: '浏览和测试所有可用的 API 端点。', apiKeyForTesting: '测试用 API 密钥', apiKeyPlaceholder: '在此粘贴您的 API 密钥以测试需要认证的端点...', apiKeyHint: '此密钥将作为 X-API-Key 请求头随请求发送。', deleteApiKeyTitle: '删除 API 密钥', deleteApiKeyMessage: '确定要删除此 API 密钥吗?使用此密钥的所有集成将停止工作。', deleteKey: '删除密钥', // Filament tab amsDisplayThresholds: 'AMS 显示阈值', amsThresholdsDescription: '配置 AMS 湿度和温度指示器的颜色阈值。', humidity: '湿度', goodGreen: '良好(绿色)', fairOrange: '一般(橙色)', aboveFairBad: '超过一般阈值显示为红色(差)', fairAlsoDryingThreshold: '此阈值也用于触发自动干燥', temperature: '温度', goodBlue: '良好(蓝色)', aboveFairHot: '超过一般阈值显示为红色(热)', historyRetention: '历史保留', keepSensorHistory: '保留传感器历史', historyRetentionDescription: '较旧的湿度和温度数据将被自动删除', queueDrying: '自动干燥', queueDryingDescription: '在队列打印之间,打印机空闲时自动干燥AMS耗材。使用上方的湿度阈值触发干燥。', queueDryingEnabled: '启用自动干燥', queueDryingEnabledDescription: '当打印机空闲且湿度超过阈值时,自动启动AMS干燥', queueDryingBlock: '等待干燥完成', queueDryingBlockDescription: '阻止打印队列直到干燥完成。关闭时,打印优先于干燥。', ambientDryingEnabled: '环境干燥', ambientDryingEnabledDescription: '当空闲打印机的湿度超过阈值时自动干燥耗材,无需排队打印。', dryingPresets: '干燥预设', dryingPresetsDescription: '每种耗材类型的温度和时长。AMS 2 Pro使用较低温度,AMS-HT支持较高温度。', dryingFilament: '耗材', printModal: '打印对话框', expandCustomMapping: '默认展开自定义映射', expandCustomMappingDescription: '打印到多台打印机时,默认展开显示每台打印机的 AMS 映射', // User management authentication: '身份验证', authEnabledDescription: '您的实例已通过用户身份验证保护', authDisabledDescription: '启用以要求登录并管理用户访问', authDisabledMessage: '启用身份验证以创建用户账户、管理权限并保护您的 Bambuddy 实例。', enableAuthentication: '启用身份验证', currentUser: '当前用户', changePassword: '修改密码', admin: '管理员', users: '用户', addUser: '添加用户', groups: '组', addGroup: '添加组', system: '系统', noDescription: '无描述', userCount: '{{count}} 个用户', permissionCount: '{{count}} 个权限', createUser: '创建用户', username: '用户名', enterUsername: '输入用户名', password: '密码', enterPassword: '输入密码(至少 6 个字符)', confirmPassword: '确认密码', confirmPasswordPlaceholder: '确认密码', // Title tooltips viewReleaseOnGitHub: '在 GitHub 上查看发布', turnAllPlugsOn: '开启所有插座', turnAllPlugsOff: '关闭所有插座', // Modal: Clear logs clearNotificationLogs: '清除通知日志', clearLogsMessage: '这将永久删除所有 30 天前的通知日志。此操作无法撤销。', clearLogs: '清除日志', // Modal: Reset UI resetUiPreferences: '重置 UI 偏好', resetUiPreferencesMessage: '这将重置所有 UI 偏好为默认值:侧边栏顺序、主题、仪表板布局、视图模式和排序偏好。您的打印机、归档和服务器设置不会受到影响。清除后页面将重新加载。', resetPreferences: '重置偏好', // Modal: Delete group deleteGroupTitle: '删除组', deleteGroupMessage: '确定要删除此组吗?此组中的用户将失去这些权限。', deleteGroup: '删除组', // Modal: Disable auth disableAuthenticationTitle: '禁用身份验证', disableAuthenticationMessage: '确定要禁用身份验证吗?这将使您的 Bambuddy 实例无需登录即可访问。所有用户将保留在数据库中但身份验证将被禁用。', disableAuthentication: '禁用身份验证', // Additional settings configureBambuddy: '配置 Bambuddy', systemDefault: '系统默认', archiveSettings: '归档设置', newWindow: '新窗口', embeddedOverlay: '嵌入式叠加层', preferredSlicer: '首选切片软件', preferredSlicerDescription: '选择要用于打开文件的切片软件', externalCameras: '外部摄像头', costTracking: '成本追踪', printsOnly: '仅打印', totalConsumption: '总消耗', dataManagement: '数据管理', storageUsage: '存储使用情况', storageUsageDescription: '按类别的数据使用情况明细', storageUsageTotal: '总计', storageUsageErrors: '错误', storageUsageOtherBreakdown: '其他(包括静态资源、脚本和配置文件)', storageUsageSystem: '系统', storageUsageData: '数据', storageUsageUnavailable: '存储使用信息不可用', clearNotificationLogsDescription: '删除 30 天前的通知日志', resetUiPreferencesDescription: '重置侧边栏顺序、主题、视图模式和布局偏好。打印机、归档和设置不受影响。', enableHomeAssistant: '启用 Home Assistant', enableMqtt: '启用 MQTT', useTls: '使用 TLS', enableMetricsEndpoint: '启用指标端点', availableMetrics: '可用指标', editUser: '编辑用户', deleteUserTitle: '删除用户', groupName: '组名称', // Placeholders leaveEmptyForAnonymous: '留空为匿名', leaveEmptyForNoAuth: '留空为无认证', enterNewPassword: '输入新密码', confirmNewPassword: '确认新密码', enterGroupName: '输入组名称', enterDescriptionOptional: '输入描述(可选)', enterCurrentPassword: '输入当前密码', enterNewPasswordMin6: '输入新密码(至少 6 个字符)', toast: { keyCopied: '密钥已复制到剪贴板', copyFailed: '复制密钥失败', keyAddedToBrowser: '密钥已添加到 API 浏览器', clearLogsFailed: '清除日志失败', uiPreferencesReset: 'UI 偏好已重置。刷新中...', authDisabled: '身份验证已成功禁用', authDisableFailed: '禁用身份验证失败', apiKeyCreated: 'API 密钥已创建', apiKeyDeleted: 'API 密钥已删除', userCreated: '用户创建成功', userUpdated: '用户更新成功', userDeleted: '用户删除成功', groupCreated: '组创建成功', groupUpdated: '组更新成功', groupDeleted: '组删除成功', fillRequiredFields: '请填写所有必填字段', passwordsDoNotMatch: '密码不匹配', passwordTooShort: '密码至少需要 6 个字符', enterGroupName: '请输入组名称', settingsSaved: '设置已保存', cameraSettingsSaved: '摄像头设置已保存', enterCameraUrl: '请输入摄像头 URL', passwordChanged: '密码修改成功', connectionFailed: '连接失败', testFailed: '测试失败', cameraConnected: '摄像头已连接{{resolution}}', }, testConnection: '测试连接', catalog: { spoolCatalog: '耗材目录', spoolCatalogDescription: '按品牌/类型的空耗材重量。用于添加耗材时的自动重量查找。', searchCatalog: '搜索目录...', addNewEntry: '添加新条目', namePlaceholder: '名称(例如:Bambu Lab - 塑料)', weight: '重量', type: '类型', default: '默认', custom: '自定义', noMatch: '没有条目匹配您的搜索', empty: '目录中没有条目', deleteEntry: '删除条目', deleteConfirm: '确定要删除"{{name}}"吗?', resetCatalog: '重置目录', resetConfirm: '重置目录为默认值?这将移除所有自定义条目。', loadFailed: '加载耗材目录失败', nameWeightRequired: '名称和重量为必填项', entryAdded: '条目已添加', addFailed: '添加条目失败', entryUpdated: '条目已更新', updateFailed: '更新条目失败', entryDeleted: '条目已删除', deleteFailed: '删除条目失败', resetSuccess: '目录已重置为默认值', resetFailed: '重置目录失败', exported: '已导出 {{count}} 条', imported: '已导入 {{added}} 条(跳过 {{skipped}} 条)', importFailed: '导入失败:无效的 JSON 格式', exportTooltip: '导出目录为 JSON', importTooltip: '从 JSON 导入目录', resetTooltip: '重置为默认值', selectedCount: '已选择 {{count}} 项', deleteSelected: '删除所选', bulkDeleteConfirm: '确定要删除 {{count}} 个条目吗?', bulkDeleted: '已删除 {{count}} 个条目', bulkDeleteFailed: '删除条目失败', }, colorCatalog: { title: '颜色目录', description: '按制造商/材料的耗材颜色。用于添加耗材时的自动颜色查找。', searchColors: '搜索颜色...', allManufacturers: '所有制造商', addNewColor: '添加新颜色', manufacturer: '制造商', colorName: '颜色名称', hex: '十六进制', materialOptional: '材料(可选)', showing: '显示 {{filtered}} / {{total}} 种颜色', noMatch: '没有颜色匹配您的搜索', empty: '目录中没有颜色', deleteColor: '删除颜色', deleteConfirm: '确定要删除"{{name}}"吗?', resetCatalog: '重置颜色目录', resetConfirm: '重置目录为默认值?这将移除所有自定义颜色。', sync: '同步', starting: '启动中...', syncTooltip: '从 FilamentColors.xyz 同步(2000+ 种颜色,可能需要一分钟)', loadFailed: '加载颜色目录失败', fieldsRequired: '制造商、颜色名称和十六进制颜色为必填项', colorAdded: '颜色已添加', addFailed: '添加颜色失败', colorUpdated: '颜色已更新', updateFailed: '更新颜色失败', colorDeleted: '颜色已删除', deleteFailed: '删除颜色失败', resetSuccess: '颜色目录已重置为默认值', resetFailed: '重置目录失败', syncUpToDate: '已是最新(检查了 {{count}} 种颜色)', syncComplete: '添加了 {{added}} 种新颜色({{skipped}} 种已存在)', syncError: '同步错误', syncFailed: '从 FilamentColors.xyz 同步失败', exported: '已导出 {{count}} 种颜色', imported: '已导入 {{added}} 种颜色(跳过 {{skipped}} 种)', importFailed: '导入失败:无效的 JSON 格式', selectedCount: '已选择 {{count}} 项', deleteSelected: '删除所选', bulkDeleteConfirm: '确定要删除 {{count}} 种颜色吗?', bulkDeleted: '已删除 {{count}} 种颜色', bulkDeleteFailed: '删除颜色失败', }, dateFormat: '日期格式', dateFormatUs: '美式 (MM/DD/YYYY)', dateFormatEu: '欧式 (DD/MM/YYYY)', dateFormatIso: 'ISO (YYYY-MM-DD)', timeFormat: '时间格式', timeFormat12: '12小时制 (3:30 PM)', timeFormat24: '24小时制 (15:30)', defaultPrinter: '默认打印机', defaultPrinterDescription: '为上传、重印和其他操作预选此打印机。', slicerBambuStudio: 'Bambu Studio', slicerOrcaSlicer: 'OrcaSlicer', sidebarOrderDescription: '拖拽侧边栏项目以重新排序。在此处重置为默认顺序。', setDefault: '设为默认', sidebarOrderSetDefaultHint: '设为默认将当前菜单顺序应用于尚未自定义的用户。', sidebarDefaultSet: '已设置默认菜单顺序。', sidebarDefaultCleared: '已清除默认菜单顺序。', sidebarDefaultFailed: '设置默认菜单顺序失败。', reset: '重置', darkMode: '深色模式', lightMode: '浅色模式', active: '(当前)', background: '背景', accent: '强调色', style: '样式', bgNeutral: '中性', bgWarm: '暖色', bgCool: '冷色', bgOled: 'OLED 纯黑', bgSlate: '石板蓝', bgForest: '森林绿', accentGreen: '绿色', accentTeal: '青色', accentBlue: '蓝色', accentOrange: '橙色', accentPurple: '紫色', accentRed: '红色', styleClassic: '经典', styleGlow: '发光', styleVibrant: '鲜艳', themeToggleHint: '使用侧边栏中的太阳/月亮图标在深色和浅色模式之间切换。', autoArchivePrints: '自动归档打印', autoArchiveDescription: '打印完成时自动保存3MF文件', saveThumbnailsDescription: '从3MF文件中提取并保存预览图像', captureFinishPhotoDescription: '打印完成时从打印机摄像头拍照', ffmpegNotInstalled: '未安装ffmpeg', ffmpegRequired: '摄像头捕获需要ffmpeg。通过 brew install ffmpeg(macOS)或 apt install ffmpeg(Linux)安装。', camera: '摄像头', cameraViewMode: '摄像头查看模式', cameraOverlayDescription: '摄像头在主屏幕上以可调大小的覆盖层打开', cameraWindowDescription: '摄像头在单独的浏览器窗口中打开', externalCamerasDescription: '配置外部摄像头以替换内置打印机摄像头。支持MJPEG流、RTSP、HTTP快照和USB摄像头(V4L2)。启用后,外部摄像头将用于实时查看和完成照片。', cameraPlaceholderUsb: '设备路径 (/dev/video0)', cameraPlaceholderUrl: '摄像头URL (rtsp://... 或 http://...)', cameraTypeMjpeg: 'MJPEG 流', cameraTypeRtsp: 'RTSP 流', cameraTypeSnapshot: 'HTTP 快照', cameraTypeUsb: 'USB 摄像头 (V4L2)', cameraRotation: '旋转', test: '测试', connected: '已连接', disconnected: '未连接', currency: '货币', defaultFilamentCost: '默认耗材成本(每公斤)', electricityCost: '每千瓦时电费', energyDisplayMode: '能源显示模式', energyModePrintDescription: '仪表板显示打印期间使用的能源总和', energyModeTotalDescription: '仪表板显示智能插座的累计能源', fileManager: '文件管理器', createArchiveEntry: '打印时创建归档条目', createArchiveEntryDescription: '从文件管理器打印时,可选择创建归档条目', lowDiskSpaceWarning: '磁盘空间不足警告', lowDiskSpaceDescription: '当可用磁盘空间低于此阈值时显示警告', printerFirmware: '打印机固件', checkFirmwareDescription: '检查Bambu Lab的打印机固件更新', bambuddySoftware: 'Bambuddy 软件', autoCheckDescription: '启动时自动检查新版本', checkNow: '立即检查', updateAvailableVersion: '可用更新:v{{version}}', releaseNotes: '发布说明', updateViaDocker: '通过 Docker Compose 更新:', installUpdate: '安装更新', latestVersionRunning: '您正在运行最新版本', failedToCheckUpdates: '检查更新失败:{{error}}', backupRestore: '备份与恢复', backupRestoreDescription: '导出/导入设置并配置GitHub备份', goToBackup: '前往备份', externalUrl: '外部URL', externalUrlDescription: 'Bambuddy可访问的外部URL。用于通知图像和外部集成。', bambuddyUrl: 'Bambuddy URL', externalUrlHint: '包含协议和端口(例如:http://192.168.1.100:8000)', ftpRetry: 'FTP重试', ftpRetryDescription: '当打印机WiFi不稳定时重试FTP操作。适用于3MF下载、打印上传、延时摄影下载和固件更新。', autoRetryDescription: '自动重试失败的FTP操作', retryAttempts: '重试次数', retryDelay: '重试延迟', connectionTimeout: '连接超时', time_one: '{{count}}次', time_other: '{{count}}次', second_one: '{{count}}秒', second_other: '{{count}}秒', nSeconds: '{{count}}秒', increaseForWeakWifi: '对WiFi信号弱的打印机增加此值', homeAssistant: 'Home Assistant', homeAssistantFullDescription: '连接到Home Assistant,通过HA REST API控制智能插座。支持switch、light、input_boolean和script实体。', homeAssistantUrl: 'Home Assistant URL', longLivedAccessToken: '长期访问令牌', haTokenHint: '在HA中创建令牌:个人资料 → 长期访问令牌 → 创建令牌', connectionSuccessful: '连接成功', connectionFailed: '连接失败', haConnectionSuccess: '已成功连接到Home Assistant。', haConnectionFailed: '连接Home Assistant失败。', mqttPublishing: 'MQTT发布', mqttDescription: '将BamBuddy事件发布到外部MQTT代理,用于与Node-RED、Home Assistant和其他自动化系统集成。', mqttEnableDescription: '向外部MQTT代理发布事件', brokerHostname: '代理主机名', port: '端口', usernameOptional: '用户名(可选)', passwordOptional: '密码(可选)', topicPrefix: '主题前缀', topicPrefixHint: '主题格式:{{prefix}}/printers//status 等', prometheusMetrics: 'Prometheus 指标', prometheusEndpointDescription: '在 /api/v1/metrics 公开打印机指标,用于Prometheus/Grafana监控。', bearerTokenOptional: 'Bearer令牌(可选)', bearerTokenHint: '设置后,请求必须包含 Authorization: Bearer ', metricsConnectionStatus: '连接状态', metricsPrinterState: '打印机状态(空闲/打印中等)', metricsPrintProgress: '打印进度 0-100%', metricsBedTemp: '热床温度', metricsNozzleTemp: '喷嘴温度', metricsPrintsTotal: '按结果分类的总打印数', metricsMore: '...以及更多(层数、风扇、队列、耗材用量)', smartPlugsDescription: '连接智能插座(Tasmota或Home Assistant)以自动化电源控制并跟踪打印机的能源使用情况。', allOn: '全部开启', allOff: '全部关闭', addSmartPlug: '添加智能插座', energySummary: '能源概要', currentPower: '当前功率', plugsOnline: '{{reachable}}/{{total}} 个插座在线', today: '今天', yesterday: '昨天', total: '总计', enablePlugsForSummary: '启用插座以查看能源概要', addNotificationProvider: '添加', systemBadge: '(系统)', creating: '创建中...', changing: '修改中...', deleteUserAndItems: '删除用户及其所有项目', deleteUserKeepItems: '删除用户,保留项目(将变为无主项目)', ok: '确定', }, // Notifications (for push notifications) notification: { printStarted: { title: '打印已开始', body: '{{printer}}:{{filename}} 已开始打印', }, printCompleted: { title: '打印已完成', body: '{{printer}}:{{filename}} 已成功完成', }, printFailed: { title: '打印失败', body: '{{printer}}:{{filename}} 打印失败', }, printStopped: { title: '打印已停止', body: '{{printer}}:{{filename}} 已停止', }, printProgress: { title: '打印进度', body: '{{printer}}:{{filename}} 已完成 {{percent}}%', }, printerOffline: { title: '打印机离线', body: '{{printer}} 已离线', }, printerError: { title: '打印机错误', body: '{{printer}}:{{error}}', }, filamentLow: { title: '耗材不足', body: '{{printer}}:耗材即将用完', }, maintenanceDue: { title: '维护到期', body: '{{printer}}:{{items}} 需要关注', }, }, // Errors errors: { generic: '出了点问题', networkError: '网络错误。请检查您的连接。', notFound: '未找到', unauthorized: '未授权', serverError: '服务器错误', validationError: '请检查您的输入', printerConnectionFailed: '连接打印机失败', saveFailed: '保存更改失败', deleteFailed: '删除失败', loadFailed: '加载数据失败', }, // HMS Errors modal hmsErrors: { title: '错误 - {{name}}', noErrors: '无错误', viewOnWiki: '在拓竹 Wiki 上查看', clearInstructions: '在打印机上清除错误以在此处消除它们。', clearErrors: '清除错误', clearSuccess: 'HMS 错误已清除', clearFailed: '清除 HMS 错误失败', }, // MQTT Debug modal mqttDebug: { title: 'MQTT 调试日志', searchPlaceholder: '搜索主题或负载...', noMessages: '尚未记录消息', startLoggingHint: '点击"开始记录"以开始捕获 MQTT 消息', noMessagesMatch: '没有消息匹配您的筛选条件', adjustFilterHint: '尝试调整您的搜索或筛选条件', incoming: '传入', outgoing: '传出', loggingStopped: '记录已停止', loggingActive: '记录中 - 消息将自动刷新', startLogging: '开始记录', stopLogging: '停止记录', clearLog: '清除日志', topic: '主题', timestamp: '时间戳', direction: '方向', all: '全部', }, // Printer File Manager modal (printer internal storage) printerFiles: { title: '文件管理器', storageUsed: '已用:', storageFree: '剩余:', filterPlaceholder: '筛选文件...', deleteButton: '删除', deleteFiles: '删除 {{count}} 个文件', deleteFileConfirm: '删除"{{name}}"?此操作无法撤销。', deleteFilesConfirm: '删除 {{count}} 个选中的文件?此操作无法撤销。', noFiles: '打印机上没有文件', loadingFiles: '加载文件中...', failedToLoad: '加载文件失败', toast: { filesDeleted: '已删除 {{count}} 个文件', deleteFailed: '删除失败:{{error}}', }, }, // Confirmations confirm: { delete: '确定要删除吗?', unsavedChanges: '您有未保存的更改。确定要离开吗?', clearQueue: '确定要清空队列吗?', }, // Login page login: { title: 'Bambuddy 登录', subtitle: '登录您的账户', username: '用户名', usernamePlaceholder: '输入您的用户名', usernameOrEmail: '用户名或邮箱', usernameOrEmailPlaceholder: '用户名或 @ 邮箱', password: '密码', passwordPlaceholder: '输入您的密码', signIn: '登录', signingIn: '登录中...', forgotPassword: '忘记密码?', loginSuccess: '登录成功', loginFailed: '登录失败', enterCredentials: '请输入用户名和密码', forgotPasswordTitle: '忘记密码', forgotPasswordMessage: '如果您忘记了密码,请联系系统管理员进行重置。', forgotPasswordEmailMessage: '输入您的邮箱地址,我们将向您发送新密码。', emailAddress: '邮箱地址', emailPlaceholder: 'your.email@example.com', cancel: '取消', sending: '发送中...', sendResetEmail: '发送重置邮件', howToReset: '如何重置密码:', resetStep1: '联系您的 Bambuddy 管理员', resetStep2: '请他们在用户管理中重置您的密码', resetStep3: '他们可以为您设置一个临时密码', resetStep4: '使用新密码登录并在设置中修改密码', gotIt: '知道了', }, // Setup page setup: { title: 'Bambuddy 设置', subtitle: '为您的 Bambuddy 实例配置身份验证', enableAuth: '启用身份验证', adminAccount: '管理员账户', adminAccountDesc: '如果管理员用户已存在,将使用现有管理员账户启用身份验证。如需使用现有管理员,请将下方字段留空,或输入新凭据创建新管理员用户。', adminUsername: '管理员用户名', adminPassword: '管理员密码', optionalIfAdminExists: '(如管理员用户已存在则为可选)', adminUsernamePlaceholder: '输入管理员用户名(可选)', adminPasswordPlaceholder: '输入管理员密码(可选)', confirmPassword: '确认密码', confirmPasswordPlaceholder: '确认管理员密码', settingUp: '设置中...', completeSetup: '完成设置', toast: { authEnabledAdminCreated: '身份验证已启用并创建了管理员用户', authEnabledExistingAdmins: '使用现有管理员用户启用了身份验证', setupCompleted: '设置完成', enterBothCredentials: '请输入管理员用户名和密码,或将两者留空以使用现有管理员用户', passwordsDoNotMatch: '密码不匹配', passwordTooShort: '密码至少需要 6 个字符', }, }, // Password change changePassword: { title: '修改密码', currentPassword: '当前密码', currentPasswordPlaceholder: '输入当前密码', newPassword: '新密码', newPasswordPlaceholder: '输入新密码(至少 6 个字符)', confirmPassword: '确认新密码', confirmPasswordPlaceholder: '确认新密码', passwordsDoNotMatch: '密码不匹配', passwordTooShort: '密码至少需要 6 个字符', changing: '修改中...', success: '密码修改成功', failed: '密码修改失败', }, // Plate detection alert plateAlert: { title: '打印已暂停!', message: '在构建板上检测到物体。打印已自动暂停。请清理打印板并继续打印。', understand: '我知道了', }, // Camera page camera: { title: '摄像头视图', invalidPrinterId: '无效的打印机 ID', live: '实时', snapshot: '快照', restartStream: '重启流', refreshSnapshot: '刷新快照', fullscreen: '全屏', exitFullscreen: '退出全屏', connectingToCamera: '连接摄像头中...', capturingSnapshot: '拍摄快照中...', connectionLost: '连接已断开', connectionFailed: '摄像头连接失败', reconnecting: '{{countdown}} 秒后重新连接...(第 {{attempt}}/{{max}} 次尝试)', reconnectNow: '立即重新连接', cameraUnavailable: '摄像头不可用', cameraUnavailableDesc: '请确保打印机已通电并已连接。', noCamera: '无可用摄像头', retry: '重试', cameraStream: '摄像头流', zoomOut: '缩小', zoomIn: '放大', resetZoom: '重置缩放', recording: '录制中', startRecording: '开始录制', stopRecording: '停止录制', chamberLight: '切换腔室灯', }, // Groups management groups: { title: '组管理', subtitle: '管理访问控制的权限组', backToSettings: '返回设置', createGroup: '创建组', noPermission: '您没有访问此页面的权限。', system: '系统', noDescription: '无描述', usersCount: '{{count}} 个用户', permissionsCount: '{{count}} 个权限', edit: '编辑', delete: '删除', toast: { created: '组创建成功', updated: '组更新成功', deleted: '组删除成功', enterGroupName: '请输入组名称', }, modal: { editGroup: '编辑组', createGroup: '创建组', cancel: '取消', saving: '保存中...', creating: '创建中...', saveChanges: '保存更改', }, form: { groupName: '组名称', groupNamePlaceholder: '输入组名称', systemGroupWarning: '系统组名称不可更改', description: '描述', descriptionPlaceholder: '输入描述(可选)', permissions: '权限(已选 {{count}} 个)', }, deleteModal: { title: '删除组', message: '确定要删除此组吗?此组中的用户将失去这些权限。', confirm: '删除组', }, editor: { title: '编辑组', createTitle: '创建组', search: '搜索权限...', selectAll: '全选', clearAll: '清除全部', permissionsSelected: '已选 {{count}} 个', noResults: '没有权限匹配您的搜索', }, }, // Users management users: { title: '用户管理', subtitle: '管理用户及其对 Bambuddy 实例的访问', backToSettings: '返回设置', createUser: '创建用户', noPermission: '您没有访问此页面的权限。', admin: '管理员', noGroups: '无组', active: '活跃', inactive: '非活跃', edit: '编辑', delete: '删除', system: '系统', noGroupsAvailable: '无可用组', table: { username: '用户名', groups: '组', status: '状态', actions: '操作', }, toast: { created: '用户创建成功', updated: '用户更新成功', deleted: '用户删除成功', fillRequired: '请填写所有必填字段', passwordsDoNotMatch: '密码不匹配', passwordTooShort: '密码至少需要 6 个字符', }, modal: { createUser: '创建用户', editUser: '编辑用户', cancel: '取消', creating: '创建中...', saving: '保存中...', saveChanges: '保存更改', advancedAuthSubtitle: '使用高级认证', }, form: { username: '用户名', usernamePlaceholder: '输入用户名', email: '邮箱', emailPlaceholder: 'user@example.com', password: '密码', passwordPlaceholder: '输入密码', confirmPassword: '确认密码', confirmPasswordPlaceholder: '确认密码', newPasswordPlaceholder: '输入新密码', confirmNewPasswordPlaceholder: '确认新密码', leaveBlankToKeep: '留空以保持当前值', groups: '组', optional: '可选', autoGeneratedPassword: '将自动生成安全密码并通过邮件发送给用户。', passwordManagedByAdvancedAuth: '密码由高级认证管理。使用"重置密码"通过邮件向用户发送新密码。', resetPassword: '重置密码', resettingPassword: '重置密码中...', }, deleteModal: { title: '删除用户', message: '确定要删除此用户吗?此操作无法撤销。', confirm: '删除用户', }, }, // Stream overlay streamOverlay: { title: '流叠加层', invalidPrinterId: '无效的打印机 ID', cameraStream: '摄像头流', progress: '进度', eta: '预计完成时间', printerIdle: '打印机空闲', printerOffline: '打印机离线', status: { printing: '打印中', paused: '已暂停', finished: '已完成', failed: '失败', idle: '空闲', unknown: '未知', }, }, // Profiles profiles: { title: '配置文件', subtitle: '管理您的切片预设和压力推进校准', tabs: { cloud: '云端配置文件', local: '本地配置文件', kprofiles: 'K 值配置', }, localProfiles: { title: '本地配置文件', subtitle: '从 OrcaSlicer 导入和管理切片预设', import: '导入配置文件', importDesc: '将 .bbscfg、.bbsflmt、.orca_filament、.zip 或 .json 文件拖放到此处', importing: '导入中...', search: '搜索本地预设...', noPresets: '暂无本地预设', badge: '本地', edit: '编辑', delete: '删除', cancel: '取消', deleteConfirmTitle: '删除预设', deleteConfirm: '确定要删除此预设吗?此操作无法撤销。', source: '来源', inheritsFrom: '继承自', filamentType: '类型', vendor: '厂商', compatiblePrinters: '兼容打印机', nozzleTemp: '喷嘴温度', cost: '成本', density: '密度', pressureAdvance: '压力推进', filament: '耗材', process: '工艺', printer: '打印机', toast: { importSuccess: '已导入 {{count}} 个预设', importSkipped: '跳过 {{count}} 个预设(重复)', importError: '导入时出现 {{count}} 个错误', deleted: '预设已删除', updated: '预设已更新', }, }, connectedAs: '已连接为', logout: '退出登录', noLogoutPermission: '您没有退出登录的权限', failedToLoad: '加载配置文件失败', retry: '重试', time: { justNow: '刚刚', minsAgo: '{{count}} 分钟前', hoursAgo: '{{count}} 小时前', daysAgo: '{{count}} 天前', }, toast: { loggedOut: '已退出登录', }, login: { title: '连接到拓竹云', subtitle: '跨设备同步您的切片预设', email: '邮箱', password: '密码', region: '地区', regionGlobal: '全球', regionChina: '中国', verificationCode: '验证码', totpCode: '验证器代码', checkEmail: '检查您的邮箱 ({{email}}) 获取 6 位验证码', enterTotpHint: '输入验证器应用中的 6 位代码', accessToken: '访问令牌', accessTokenHint: '粘贴您的拓竹访问令牌(来自 Bambu Studio)', back: '返回', loginButton: '登录', verifyButton: '验证', setTokenButton: '设置令牌', useToken: '改用访问令牌', useEmail: '改用邮箱登录', toast: { loggedIn: '登录成功', codeSent: '验证码已发送到您的邮箱', enterTotp: '输入验证器应用中的代码', tokenSet: '令牌设置成功', }, }, presets: { myPreset: '我的预设(可编辑)', duplicate: '复制', editable: '可编辑', failedToLoadDetails: '加载预设详情失败', deleteConfirm: '删除此预设?', deleteWarning: '这将从拓竹云中永久删除"{{name}}"。此操作无法撤销。', noDuplicatePermission: '您没有复制预设的权限', noEditPermission: '您没有编辑预设的权限', noDeletePermission: '您没有删除预设的权限', types: { filament: '耗材预设', printer: '打印机预设', process: '工艺预设', }, toast: { deleted: '预设已删除', created: '预设已创建', updated: '预设已更新', duplicated: '预设已复制', fieldAdded: '字段"{{key}}"已添加', exported: '预设已导出', }, baseLabel: '基础:{{name}}', currentLabel: '当前:{{name}}', newPreset: '新建预设', editPreset: '编辑预设', duplicatePreset: '复制预设', createNewPreset: '创建新预设', customizeSettings: '自定义新预设的设置', compareWithBase: '与基础预设比较', compare: '比较', // CreatePresetModal - Basic Info basePreset: '基础预设', selectBasePreset: '选择基础预设...', presetName: '预设名称', myCustomPreset: '我的自定义预设', inheritsFrom: '继承自', dropJsonToImport: '拖放 JSON 以导入', // CreatePresetModal - Tabs tabs: { common: '常用', allFields: '所有字段', }, // CreatePresetModal - All Fields Tab availableFields: '可用字段', searchFieldsPlaceholder: '搜索字段...', noMatchingFields: '没有匹配的字段', allFieldsAdded: '所有字段已添加', addCustomField: '添加自定义字段', yourOverrides: '您的覆盖值', noOverridesYet: '暂无覆盖值', clickFieldsToAdd: '点击左侧的字段进行添加', saveAsTemplate: '保存为模板', jsonTip: '提示:将 .json 文件拖放到此对话框的任意位置以导入设置', }, cloudView: { searchPlaceholder: '搜索预设...', templates: '模板', refresh: '刷新', newPreset: '新建预设', clearFilters: '清除筛选', // Compare mode compareMode: '比较模式', selectAnotherPreset: '选择另一个 {{type}} 预设', clickTwoPresets: '点击两个相同类型的预设进行比较', selectFirst: '1. 选择第一个', selectSecond: '2. 选择第二个', compareNow: '立即比较', // Status row lastSynced: '上次同步:', showingCount: '显示 {{showing}} / {{total}} 个预设', noPresetsFound: '未找到预设', // Column headers columns: { filament: '耗材', process: '工艺', printer: '打印机', }, noFilamentPresets: '无耗材预设', noProcessPresets: '无工艺预设', noPrinterPresets: '无打印机预设', // Filters filters: { type: '类型', owner: '所有者', printer: '打印机', nozzle: '喷嘴', filament: '耗材', layer: '层', all: '全部', myPresets: '我的预设', builtIn: '内置', process: '工艺', }, // Permissions noTemplatesPermission: '您没有管理模板的权限', noRefreshPermission: '您没有刷新配置文件的权限', noCreatePermission: '您没有创建预设的权限', }, templates: { title: '快速模板', noTemplates: '暂无模板', createFirst: '从预设编辑器创建模板', typeFilter: '类型:', deleteTitle: '删除模板', deleteWarning: '此操作无法撤销', deleteConfirm: '确定要删除"{{name}}"吗?', namePlaceholder: '模板名称', descriptionPlaceholder: '描述', settingsJson: '设置 (JSON)', fieldsCount: '{{count}} 个字段', shownInModals: '在对话框中显示', hiddenInModals: '在对话框中隐藏', apply: '应用', toast: { deleted: '模板已删除', updated: '模板已更新', created: '模板已创建', applied: '模板已应用', }, }, }, // Support/Debug support: { debugLoggingActive: '调试日志记录已激活', manageLogs: '管理', collectItem7: '打印机连接和固件版本', collectItem8: '集成状态(Spoolman、MQTT、HA)', collectItem9: '网络接口(仅子网)', collectItem10: 'Python 包版本', collectItem11: '数据库健康检查', collectItem12: 'Docker 环境详情', }, // File manager fileManager: { title: '文件管理器', subtitle: '组织和管理您的打印文件', uploadFiles: '上传文件', newFolder: '新建文件夹', folderName: '文件夹名称', folderNamePlaceholder: '例如:功能零件', renameFile: '重命名文件', renameFolder: '重命名文件夹', moveFiles: '移动 {{count}} 个文件', rootNoFolder: '根目录(无文件夹)', current: '当前', linkFolder: '链接文件夹', linkFolderDescription: '将"{{name}}"链接到项目或归档以便快速访问。', project: '项目', archive: '归档', noProjectsFound: '未找到项目', noArchivesFound: '未找到归档', unlink: '取消链接', link: '链接', dragDropFiles: '将文件拖放到此处', dropFilesHere: '将文件放在此处', orClickToBrowse: '或点击浏览', allFileTypesSupported: '支持所有文件类型。ZIP 文件将被解压。', zipFilesDetected: '检测到 ZIP 文件', zipExtractOptions: 'ZIP 文件将被解压。选择如何处理文件夹结构:', preserveZipStructure: '保留 ZIP 中的文件夹结构', createFolderFromZip: '从 ZIP 文件名创建文件夹', stlThumbnailGeneration: 'STL 缩略图生成', zipMayContainStl: 'ZIP 文件可能包含 STL 文件。可以在解压时生成缩略图。', thumbnailsCanBeGenerated: '可以为 STL 文件生成缩略图。大型模型可能需要更长时间处理。', generateThumbnailsForStl: '为 STL 文件生成缩略图', threemfDetected: '检测到 3MF 文件', threemfExtractionInfo: '将自动从 3MF 文件中提取打印机型号、材料、颜色和打印设置。', willBeExtracted: '将被解压', filesExtracted: '已解压 {{count}} 个文件', uploadComplete: '上传完成:{{succeeded}} 个成功', uploadFailed: '{{count}} 个失败', zipFilesFailed: '{{count}} 个文件失败', uploading: '上传中...', changeLink: '更改链接...', linkTo: '链接到...', linkToProjectOrArchive: '链接到项目或归档', addToQueue: '添加到队列', schedulePrint: '排程', generateThumbnail: '生成缩略图', generateThumbnails: '生成缩略图', generateThumbnailsForMissing: '为缺少缩略图的 STL 文件生成缩略图', gridView: '网格视图', listView: '列表视图', lowDiskSpaceWarning: '磁盘空间不足警告', lowDiskSpaceDetails: '仅剩 {{free}}(总共 {{total}})。阈值设置为 {{threshold}} GB。', files: '文件', folders: '文件夹', size: '大小', free: '剩余', allFiles: '所有文件', wrap: '换行', enableTextWrapping: '启用文本换行', disableTextWrapping: '禁用文本换行', dragToResizeTooltip: '拖动调整大小,双击重置', searchFiles: '搜索文件...', allTypes: '所有类型', prints: '打印', ascending: '升序', descending: '降序', resultsCount: '{{showing}} / {{total}} 个文件', selectAll: '全选', deselectAll: '取消全选', selected: '已选择 {{count}} 个', adding: '添加中...', loadingFiles: '加载文件中...', folderIsEmpty: '文件夹为空', noFilesYet: '暂无文件', folderEmptyDescription: '上传文件或将文件移入此文件夹以开始使用。', noFilesDescription: '上传文件以开始组织您的打印相关文件。', noMatchingFiles: '没有匹配的文件', noMatchingFilesDescription: '没有文件匹配您当前的搜索或筛选条件。', clearFilters: '清除筛选', printedCount: '已打印 {{count}} 次', uploadedBy: '上传者', deleteFolder: '删除文件夹', deleteFile: '删除文件', deleteFilesCount: '删除 {{count}} 个文件', deleteFolderConfirm: '确定要删除此文件夹吗?其中的所有文件也将被删除。', deleteFileConfirm: '确定要删除此文件吗?', deleteFilesConfirm: '确定要删除 {{count}} 个选中的文件吗?此操作无法撤销。', deleting: '删除中...', noPermissionRenameFolder: '您没有重命名文件夹的权限', noPermissionLinkFolder: '您没有链接文件夹的权限', noPermissionDeleteFolder: '您没有删除文件夹的权限', noPermissionPrint: '您没有打印的权限', noPermissionAddToQueue: '您没有添加到队列的权限', noPermissionDownload: '您没有下载文件的权限', noPermissionRenameFile: '您没有重命名此文件的权限', noPermissionGenerateThumbnail: '您没有生成缩略图的权限', noPermissionDeleteFile: '您没有删除此文件的权限', noPermissionCreateFolder: '您没有创建文件夹的权限', noPermissionUpload: '您没有上传文件的权限', noPermissionMoveFiles: '您没有移动文件的权限', noPermissionDeleteFiles: '您没有删除文件的权限', // External folder linkExternal: '链接外部', linkExternalFolder: '链接外部文件夹', linkExternalFolderDescription: '将主机目录(NAS、USB、网络共享)挂载到文件管理器中。文件不会被复制——直接从原始路径访问。', externalFolderNamePlaceholder: '例如:NAS打印文件', externalPath: '主机路径', externalPathHelp: 'Docker主机上目录的绝对路径。必须以绑定挂载方式挂载到容器中。', readOnly: '只读', readOnlyHelp: '防止上传和删除', showHiddenFiles: '显示隐藏文件(点文件)', externalFolder: '外部文件夹', scanFolder: '扫描', toast: { folderCreated: '文件夹已创建', folderDeleted: '文件夹已删除', fileDeleted: '文件已删除', filesDeleted: '已删除 {{count}} 个文件', filesMoved: '文件已移动', folderLinked: '文件夹已链接', folderUnlinked: '文件夹已取消链接', externalFolderLinked: '外部文件夹已链接并扫描', folderScanned: '扫描完成:添加 {{added}} 个,移除 {{removed}} 个', addedToQueue: '已将 {{count}} 个文件添加到队列', addedToQueuePartial: '已添加 {{added}} 个文件,{{failed}} 个失败', failedToAddToQueue: '添加文件失败:{{error}}', fileRenamed: '文件已重命名', folderRenamed: '文件夹已重命名', thumbnailsGenerated: '已生成 {{count}} 个缩略图', thumbnailsGeneratedPartial: '已生成 {{succeeded}} 个缩略图,{{failed}} 个失败', noStlMissingThumbnails: '没有缺少缩略图的 STL 文件', failedToGenerateThumbnails: '生成缩略图失败:{{error}}', thumbnailGenerated: '缩略图已生成', failedToGenerateThumbnail: '生成缩略图失败:{{error}}', }, }, // Projects projects: { title: '项目', subtitle: '组织和跟踪您的 3D 打印项目', newProject: '新建项目', editProject: '编辑项目', deleteProject: '删除项目', projectName: '项目名称', description: '描述', noProjects: '暂无项目', noProjectsFiltered: '没有{{status}}项目', noProjectsFilteredHelp: '您没有任何{{status}}项目。当项目状态更改时,它们将出现在这里。', createFirst: '创建您的第一个项目以开始组织相关打印、跟踪进度和管理构建。', createFirstButton: '创建您的第一个项目', create: '创建', files: '文件', prints: '打印', plates: '板', parts: '零件', lastModified: '最后修改', deleteConfirm: '确定要删除此项目吗?归档和队列项目将被取消链接但不会被删除。', addFiles: '添加文件', removeFile: '移除文件', viewDetails: '查看详情', // Modal fields namePlaceholder: '例如:Voron 2.4 构建', descriptionPlaceholder: '可选描述...', color: '颜色', targetPlates: '目标板数', targetPlatesPlaceholder: '例如:25', targetPlatesHelp: '打印任务数量', targetParts: '目标零件数', targetPartsPlaceholder: '例如:150', targetPartsHelp: '所需零件总数', tagsLabel: '标签(逗号分隔)', tagsPlaceholder: '例如:voron、功能件、礼物', dueDate: '截止日期', priority: '优先级', priorityLow: '低', priorityNormal: '普通', priorityHigh: '高', priorityUrgent: '紧急', // Status statusActive: '进行中', statusCompleted: '已完成', statusArchived: '已归档', done: '完成', completed: '已完成', failed: '失败', inQueue: '队列中', noPrintsYet: '暂无打印', // Footer stats printJobs: '打印任务(板)', partsPrinted: '已打印零件', failedParts: '失败零件', // Actions import: '导入', export: '导出', importProject: '导入项目', exportAll: '导出所有项目', loading: '加载项目中...', // Permissions noEditPermission: '您没有编辑项目的权限', noDeletePermission: '您没有删除项目的权限', noCreatePermission: '您没有创建项目的权限', noImportPermission: '您没有导入项目的权限', noExportPermission: '您没有导出项目的权限', // Toast toast: { created: '项目已创建', updated: '项目已更新', deleted: '项目已删除', imported: '项目已导入', multipleImported: '已导入 {{count}} 个项目', importFailed: '导入失败', exported: '项目已导出(仅元数据)', }, }, // Project detail page projectDetail: { notFound: '未找到项目', backToProjects: '返回项目', export: '导出', exportProject: '导出项目', noExportPermission: '您没有导出项目的权限', noEditPermission: '您没有编辑项目的权限', partOf: '属于:', priorityLabel: '优先级:', noPrints: '此项目暂无打印', status: { active: '进行中', completed: '已完成', archived: '已归档', }, priority: { low: '低', normal: '普通', high: '高', urgent: '紧急', }, dueDate: { overdue: '已逾期', today: '今天到期', daysLeft: '还有 {{count}} 天', }, progress: { platesProgress: '板进度', partsProgress: '零件进度', printJobs: '打印任务', parts: '零件', percentComplete: '{{percent}}% 完成', remaining: '剩余 {{count}} 个', }, stats: { printJobs: '打印任务', total: '总计', failed: '{{count}} 个失败', partsPrinted: '已打印 {{count}} 个零件', printTime: '打印时间', filamentUsed: '耗材用量', }, cost: { title: '成本追踪', filamentCost: '耗材成本', energy: '能源', totalCost: '总成本', total: '总计', includesBom: '含物料清单', budget: '预算', remaining: '剩余', }, subProjects: { title: '子项目 ({{count}})', }, notes: { title: '备注', noEditPermission: '您没有编辑备注的权限', placeholder: '添加关于此项目的备注...', empty: '暂无备注。点击编辑添加备注。', }, files: { title: '文件', linkFolders: '从文件管理器链接文件夹', forQuickAccess: '到此项目以便快速访问。', fileCount: '{{count}} 个文件', empty: '未链接文件夹。前往文件管理器将文件夹链接到此项目。', }, bom: { title: '材料清单', acquired: '已获取 {{completed}}/{{total}}', showAll: '显示全部', hideDone: '隐藏已完成', addPart: '添加零件', noAddPermission: '您没有添加零件的权限', partNamePlaceholder: '零件名称(例如:M3x8 螺丝)', partName: '零件名称', qty: '数量', price: '价格 ({{currency}})', sourcingUrlPlaceholder: '采购链接(可选)', remarksPlaceholder: '备注(可选)', deletePart: '删除零件', deleteConfirm: '确定要删除"{{name}}"吗?', noUpdatePermission: '您没有更新零件的权限', noEditPermission: '您没有编辑零件的权限', noDeletePermission: '您没有删除零件的权限', totalCost: '总成本:', empty: '材料清单中没有零件。添加硬件、电子元件或其他组件以跟踪需要采购的物品。', }, timeline: { title: '活动时间线', empty: '暂无活动。', }, template: { saveAsTemplate: '保存为模板', noCreatePermission: '您没有创建模板的权限', }, queue: { title: '队列', viewAll: '查看全部', printing: '{{count}} 个打印中', queued: '{{count}} 个排队中', }, prints: { title: '打印 ({{count}})', }, toast: { projectUpdated: '项目已更新', partAdded: '零件已添加', partRemoved: '零件已移除', exportFailed: '导出失败', projectExported: '项目已导出', templateCreated: '模板已创建', }, }, // System info system: { title: '系统信息', version: '版本', uptime: '运行时间', cpuUsage: 'CPU 使用率', memoryUsage: '内存使用率', diskUsage: '磁盘使用率', networkInfo: '网络信息', logs: '日志', debugMode: '调试模式', enableDebug: '启用调试日志', disableDebug: '禁用调试日志', downloadLogs: '下载日志', clearLogs: '清除日志', dockerInfo: 'Docker 信息', containerName: '容器名称', imageName: '镜像名称', platform: '平台', architecture: '架构', }, // Library (K Profiles) library: { title: '耗材库', addFilament: '添加耗材', editFilament: '编辑耗材', deleteFilament: '删除耗材', vendor: '厂商', material: '材料', color: '颜色', kFactor: 'K 值', temperature: '温度', noFilaments: '耗材库中没有耗材', deleteConfirm: '确定要删除此耗材吗?', importFromPrinter: '从打印机导入', exportToFile: '导出到文件', }, // Spoolman spoolman: { title: 'Spoolman 集成', enabled: 'Spoolman 已启用', url: 'Spoolman URL', connected: '已连接', disconnected: '未连接', testConnection: '测试连接', sync: '同步', syncing: '同步中...', lastSync: '上次同步', linkToSpoolman: '链接到 Spoolman', openInSpoolman: '在 Spoolman 中打开', unlinkSpool: '取消链接耗材', unlinkConfirmTitle: '解开线轴?', unlinkConfirmMessage: '这将断开卷轴与 Spoolman 的连接。Spoolman 中的卷轴数据将保持不变。', selectSpool: '选择耗材', noUnlinkedSpools: '无未链接的耗材', linkSuccess: '耗材已成功链接到 Spoolman', linkFailed: '链接耗材失败', unlinkSuccess: '已成功从 Spoolman 取消链接耗材', unlinkFailed: '取消链接耗材失败', spoolId: '耗材 ID', fillSourceLabel: '(Spoolman)', weight: '重量', remaining: '剩余', disableWeightSync: '禁用 AMS 估计重量同步', disableWeightSyncDesc: '不从 AMS 估计值更新剩余容量。如果您更喜欢 Spoolman 的用量追踪而非 AMS 百分比估计,请使用此选项。新耗材仍将使用 AMS 估计值作为初始重量。', reportPartialUsage: '报告失败打印的部分用量', reportPartialUsageDesc: '当打印失败或被取消时,根据层进度报告估计的耗材使用量。', }, // Inventory inventory: { title: '耗材库存', addSpool: '添加耗材', editSpool: '编辑耗材', material: '材料', selectMaterial: '选择材料...', subtype: '子类型', brand: '品牌', searchBrand: '搜索品牌...', useCustomBrand: '使用"{{brand}}"', useCustomMaterial: '使用自定义材料:{{material}}', colorName: '颜色名称', colorNamePlaceholder: '翡翠白、烈焰红...', color: '颜色', hexColor: '十六进制颜色', pickColor: '选择自定义颜色', labelWeight: '标签重量', coreWeight: '空盘重量', searchSpoolWeight: '搜索耗材重量...', weightUsed: '已使用', currentWeight: '剩余重量', measuredWeight: '称量重量', spoolName: '线轴', costPerKg: '每公斤成本', measuredWeightError: '称量重量必须在 {{min}}g 到 {{max}}g 之间。', slicerFilament: '切片耗材', slicerFilamentName: '切片预设名称', slicerPreset: '切片预设', searchPresets: '搜索耗材预设...', selectedPreset: '已选择', noPresetsFound: '未找到预设', tempOverrides: '温度覆盖', note: '备注', notePlaceholder: '关于此耗材的任何备注...', archive: '归档', restore: '恢复', noSpools: '暂无耗材。添加您的第一个耗材开始使用。', noManualSpools: '没有手动添加的耗材。请先向库存中添加耗材。', kProfiles: 'K 值配置', addKProfile: '添加 K 值配置', assignSpool: '分配耗材', unassignSpool: '取消分配', assignSuccess: '耗材已分配,AMS 槽位已配置', assignFailed: '分配耗材失败', assignMismatchTitle: '材料不匹配', assignMismatchMessage: '所选线轴材料 "{{spoolMaterial}}" 与 {{location}} 的料槽材料 "{{trayMaterial}}" 不匹配。仍要分配吗?', assignMismatchConfirm: '仍然分配', assignPartialMismatchMessage: '线轴材料 "{{spoolMaterial}}" 与 {{location}} 的 "{{trayMaterial}}" 相近但不完全一致。是否继续?', assignProfileMismatchMessage: '线轴配置 "{{spoolProfile}}" 与 {{location}} 的料槽配置 "{{trayProfile}}" 不一致。是否继续?', selectSpool: '选择要分配到此槽位的耗材', assigned: '已分配', assigning: '分配中...', searchSpools: '搜索耗材...', allMaterials: '所有材料', filterByBrand: '按品牌筛选...', showArchived: '显示已归档', quickAdd: '快速添加(库存)', quantity: '数量', stock: '库存', configured: '已配置', spoolsCreated: '已创建 {{count}} 个耗材', spoolCreated: '耗材已创建', spoolUpdated: '耗材已更新', spoolDeleted: '耗材已删除', spoolArchived: '耗材已归档', spoolRestored: '耗材已恢复', deleteConfirm: '确定要删除此耗材吗?此操作无法撤销。', archiveConfirm: '确定要归档此耗材吗?', advancedSettings: '高级设置', // Tabs filamentInfoTab: '耗材信息', paProfileTab: 'PA 配置', filamentInfo: '耗材', additional: '附加', // Cloud loadingPresets: '加载云端预设中...', cloudConnected: '云端已连接', cloudNotConnected: '云端未连接(使用默认值)', // Colors recentColors: '最近', searchColors: '搜索颜色...', searchResults: '搜索结果', allColors: '所有颜色', commonColors: '常用颜色', showLess: '显示更少', showAll: '显示全部', noColorsFound: '没有颜色匹配您的搜索', noResults: '未找到匹配项', // PA Profiles selectMaterialFirst: '请先在耗材信息选项卡中选择材料。', noPrintersConfigured: '未配置打印机。添加打印机以使用 PA 配置。', matchingFilter: '匹配', anyBrand: '任何品牌', anyVariant: '任何变体', autoSelect: '自动选择', matches: '匹配', match: '匹配', noMatches: '无匹配', connected: '已连接', offline: '离线', printerOffline: '打印机离线。连接后查看校准配置。', noKProfilesMatch: '没有 K 值配置匹配所选耗材。', leftNozzle: '左喷嘴', rightNozzle: '右喷嘴', profilesSelected: '个校准配置已选择', // Stats & enhanced table totalInventory: '总库存', totalConsumed: '总消耗', byMaterial: '按材料', inPrinter: '在打印机中', lowStock: '库存不足', sinceTracking: '自开始追踪', loadedInAms: '已装载到 AMS/外置', remaining: '剩余', weightCheck: '重量检查', lastWeighed: '上次称量', neverWeighed: '从未称量', search: '搜索耗材...', showing: '显示', to: '到', of: '共', show: '显示', spools: '个耗材', spool: '个耗材', page: '页', noSpoolsMatch: '未找到结果', noSpoolsMatchDesc: '尝试调整您的搜索或筛选条件。', active: '活跃', archived: '已归档', all: '全部', used: '已使用', new: '新的', clearFilters: '清除筛选', table: '表格', cards: '卡片', net: '净重', // Grouping groupSimilar: '分组', groupedSpools: '{{count}} 个相同耗材', groupedRows: '行', // Column config columns: '列', configureColumns: '配置列', configureColumnsDesc: '拖动以重新排序列或使用箭头。使用眼睛图标切换可见性。', visible: '可见', reset: '重置', cancel: '取消', applyChanges: '应用更改', moveUp: '上移', moveDown: '下移', hideColumn: '隐藏列', showColumn: '显示列', // Tag linking linkToSpool: '链接到耗材', tagLinked: '标签已链接到耗材', tagLinkFailed: '链接标签失败', tagAlreadyLinked: '标签已链接到其他耗材', unknownTag: '检测到未知 RFID 标签', // Usage history usageHistory: '使用历史', noUsageHistory: '暂无使用记录', printName: '打印名称', weightConsumed: '消耗重量', clearHistory: '清除', historyCleared: '使用历史已清除', fillSourceLabel: '(库存)', lowStockThresholdError: '阈值必须在 0.1 到 99.9 之间', }, // Timelapse timelapse: { title: '延时摄影', create: '创建延时摄影', download: '下载', delete: '删除', preview: '预览', frameRate: '帧率', quality: '质量', processing: '处理中...', noTimelapses: '无可用延时摄影', }, // AMS ams: { title: 'AMS', slot: '槽位', empty: '空', emptySlot: '空槽位', unknown: '未知', humidity: '湿度', temperature: '温度', filamentType: '耗材类型', filamentColor: '颜色', remaining: '剩余', history: 'AMS 历史', noHistory: '无可用历史', configureSlot: '配置槽位', externalSpool: '外置耗材', profile: '配置', kFactor: 'K 值', fill: '填充', configure: '配置', used: '已使用', remainingUnit: '剩余', }, // Print modal printModal: { title: '开始打印', selectPrinter: '选择打印机', selectPlate: '选择板', filamentMapping: '耗材映射', totalCost: '总成本:', slotRemainingShort: ' - 剩余 {{grams}}g', printSettings: '打印设置', bedLeveling: '热床调平', flowCalibration: '流量校准', vibrationCalibration: '振动校准', layerInspection: '首层检查', timelapse: '延时摄影', startPrint: '开始打印', addToQueue: '添加到队列', cancel: '取消', noPrintersAvailable: '无可用打印机', printerBusy: '打印机忙碌', printerOffline: '打印机离线', sameTypeDifferentColor: '相同类型,不同颜色', filamentTypeNotLoaded: '耗材类型未装载', openCalendar: '打开日历', leftNozzle: '左', rightNozzle: '右', leftNozzleTooltip: '左喷嘴', rightNozzleTooltip: '右喷嘴', filamentOverride: '耗材覆盖', filamentOverrideHint: '可选覆盖用于基于模型的耗材分配。调度器将使用您选择的耗材而不是原始 3MF 值进行匹配。', originalFilament: '原始', overrideWith: '覆盖为', resetToOriginal: '恢复为原始', insufficientFilamentTitle: '耗材不足', insufficientFilamentMessage: '部分已分配线轴的剩余耗材少于本次打印所需:', insufficientFilamentLine: '{{printer}} - {{slot}}:需要 {{required}}g,剩余 {{remaining}}g', printAnyway: '仍然打印', forceColorMatch: '强制颜色匹配', }, // Backup backup: { title: '备份与恢复', createBackup: '创建备份', restoreBackup: '恢复备份', restoreDescription: '从备份文件替换所有数据', downloadBackup: '下载备份', uploadBackup: '上传备份', lastBackup: '上次备份', autoBackup: '自动备份', backupNow: '立即备份', restoreWarning: '警告:恢复备份将覆盖所有当前数据。', includeArchives: '包含归档', includeSettings: '包含设置', includeProfiles: '包含配置文件', backupSuccess: '备份创建成功', restoreSuccess: '备份恢复成功', backupFailed: '备份失败', restoreFailed: '恢复失败', restoreNote: '恢复期间虚拟打印机将停止', // GitHub Backup githubBackup: 'GitHub 备份', enabled: '已启用', cloudLoginRequired: '需要登录 Bambu Cloud。请在 配置文件 → 云配置文件 中登录以启用 GitHub 备份。', cloudLoginRequiredShort: '需要Cloud登录', githubDescription: '自动将您的配置文件同步到私有 GitHub 仓库以进行备份和版本历史记录。', repositoryUrl: '仓库 URL', personalAccessToken: '个人访问令牌', tokenSaved: '(已保存)', enterNewToken: '输入新令牌以更新', tokenHint: '具有内容读写权限的细粒度令牌', branch: '分支', manualOnly: '仅手动', hourly: '每小时', daily: '每天', weekly: '每周', includeInBackup: '包含在备份中', kProfiles: 'K 配置文件', kProfilesDescription: '来自已连接打印机的压力推进校准', noPrintersConnected: '没有打印机连接', printersConnected: '{{connected}}/{{total}} 已连接', cloudProfiles: '云配置文件', cloudProfilesDescription: '来自 Bambu Cloud 的耗材、打印机和工艺预设', appSettings: '应用设置', appSettingsDescription: 'Bambuddy 配置(完整数据库)', lastBackupAt: '上次备份:', noBackupsYet: '尚无备份', next: '下次:', startingBackup: '正在启动备份...', test: '测试', enableBackup: '启用备份', testConnection: '测试连接', enterRepoUrl: '请输入仓库 URL', enterRepoAndToken: '请输入仓库 URL 和访问令牌', repoRequired: '仓库 URL 为必填项', tokenRequired: '访问令牌为必填项', githubBackupEnabled: 'GitHub 备份已启用', tokenUpdated: '令牌已更新', settingsSaved: '设置已保存', failedToSave: '保存失败:{{message}}', backupCompleteFiles: '备份完成 - {{count}} 个文件已更新', backupSkippedNoChanges: '备份已跳过 - 无更改', backupFailed2: '备份失败:{{message}}', clearedLogs: '已清除 {{count}} 条日志', failedToClearLogs: '清除日志失败:{{message}}', // History history: '历史记录', clear: '清除', date: '日期', status: '状态', commit: '提交', // Local Backup localBackup: '本地备份', localBackupDescription: '创建 Bambuddy 数据的完整备份,包括数据库、档案、上传和所有文件。', downloadBackupLabel: '下载备份', completeBackupZip: '完整备份:数据库 + 所有文件(ZIP)', download: '下载', preparingBackup: '正在准备备份...', creatingArchive: '正在创建备份归档...对于大型归档可能需要一些时间。', downloadingFile: '正在下载备份文件...', backupDownloaded: '备份下载成功', failedToCreateBackup: '创建备份失败:{{message}}', restore: '恢复', restoreReplacesAll: '恢复将替换所有数据。', restoreReplacesAllDetail: '您当前的数据库和文件将被完全替换。恢复后需要重启。', restoreConfirmTitle: '恢复备份', restoreConfirmMessage: '您确定要从"{{filename}}"恢复吗?这将完全替换您当前的数据库和所有文件。恢复后需要重启应用程序。', restoreConfirmButton: '恢复备份', uploadingFile: '正在上传备份文件...', backupRestoredRestart: '备份已恢复。请重启 Bambuddy。', failedToRestore: '恢复备份失败。请检查文件格式。', reloadNow: '立即重新加载', creatingBackup: '正在创建备份', restoringBackup: '正在恢复备份', preparing: '准备中...', processing: '处理中...', doNotClosePage: '请不要关闭此页面或导航离开。对于大型备份,此操作可能需要几分钟。', // RestoreModal restoring: '恢复中...', restoreComplete: '恢复完成', restoreFailed2: '恢复失败', importSettings: '从备份文件导入设置', pleaseWaitRestoring: '请等待数据恢复中', selectBackupFile: '点击选择备份文件(.json 或 .zip)', duplicateHandling: '重复项处理方式:', matchPrinters: '打印机', matchPrintersBy: '按序列号匹配', matchSmartPlugs: '智能插座', matchSmartPlugsBy: '按 IP 地址匹配', matchNotificationProviders: '通知提供者', matchNotificationProvidersBy: '按名称匹配', matchFilaments: '耗材', matchFilamentsBy: '按名称 + 类型 + 品牌匹配', matchArchives: '档案', matchArchivesBy: '按内容哈希匹配(始终跳过)', matchPendingUploads: '待上传', matchPendingUploadsBy: '按文件名匹配', matchSettingsTemplates: '设置和模板', matchSettingsTemplatesBy: '始终覆盖', replaceExisting: '替换现有数据', keepExisting: '保留现有数据', overwriteDescription: '用备份数据覆盖已存在的项目', keepDescription: '仅恢复尚不存在的项目', overwriteCaution: '注意:', overwriteWarning: '覆盖将用备份数据替换您当前的配置。出于安全考虑,打印机访问代码永远不会被覆盖。', cancel: '取消', processingBackup: '正在处理备份文件...', itemsRestored: '已恢复项目', itemsSkipped: '已跳过项目', restored: '已恢复', skippedAlreadyExist: '已跳过(已存在)', filesCategory: '文件(3MF、缩略图等)', andMore: '...还有 {{count}} 项', newApiKeysGenerated: '已生成新的 API 密钥', keysShownOnce: '这些密钥仅显示一次。请立即复制!', copy: '复制', noDataFound: '在备份文件中未找到可恢复的数据。', close: '关闭', // Category labels categories: { settings: '设置', notification_providers: '通知提供者', notification_templates: '通知模板', smart_plugs: '智能插座', printers: '打印机', filaments: '耗材', maintenance_types: '维护类型', archives: '档案', projects: '项目', pending_uploads: '待上传', external_links: '外部链接', api_keys: 'API 密钥', }, }, // Tags tags: { title: '标签', addTag: '添加标签', editTag: '编辑标签', deleteTag: '删除标签', tagName: '标签名称', tagColor: '标签颜色', noTags: '无标签', deleteConfirm: '确定要删除此标签吗?', manageTags: '管理标签', }, // Upload modal (archives) uploadModal: { title: '上传 3MF 文件', dragDrop: '将 .3mf 文件拖放到此处', or: '或', browseFiles: '浏览文件', extractionInfo: '将从 3MF 文件元数据中自动提取打印机型号。', uploaded: '已上传', failed: '失败', uploading: '上传中...', upload: '上传', uploadFailed: '上传失败', }, // Edit archive modal // Edit Archive Modal editArchive: { title: '编辑归档', name: '名称', namePlaceholder: '打印名称', printer: '打印机', noPrinter: '无打印机', project: '项目', noProject: '无项目', itemsPrinted: '打印数量', itemsPrintedHelp: '此打印任务中生产的物品数量', notes: '备注', notesPlaceholder: '添加关于此打印的备注...', externalLink: '外部链接', externalLinkPlaceholder: 'https://printables.com/model/...', externalLinkHelp: '链接到 Printables、Thingiverse 或其他来源', tags: '标签', tagsPlaceholder: '添加标签...', addMoreTags: '添加更多标签...', matchingTags: '匹配"{{query}}"', existingTags: '现有标签', clickToAdd: '(点击添加)', status: '状态', failureReason: '失败原因', selectReason: '选择原因...', photos: '打印成品照片', photosHelp: '点击 + 添加打印成品照片', printResult: '打印成品', saving: '保存中...', // Failure reasons failureReasons: { adhesionFailure: '附着力失败', spaghettiDetached: '拉丝 / 脱落', layerShift: '层偏移', cloggedNozzle: '喷嘴堵塞', filamentRunout: '耗材用完', warping: '翘曲', stringing: '拉丝', underExtrusion: '挤出不足', powerFailure: '断电', userCancelled: '用户取消', other: '其他', }, // Archive statuses statuses: { completed: '已完成', failed: '失败', aborted: '已取消', printing: '打印中', }, }, // K-Profiles kProfiles: { title: 'K 值配置', noPrintersConfigured: '未配置打印机', addPrinterInSettings: '在设置中添加打印机以管理 K 值配置', noActivePrinters: '无活跃打印机', enablePrinterConnection: '启用打印机连接以查看其 K 值配置', loadingProfiles: '加载 K 值配置中...', printerOffline: '打印机离线', printerOfflineDesc: '所选打印机未连接。开启电源以查看 K 值配置。', noMatchingProfiles: '无匹配的配置', noMatchingProfilesDesc: '没有配置匹配您的搜索条件', noKProfiles: '无 K 值配置', noKProfilesDesc: '未找到 {{diameter}}mm 喷嘴的压力推进配置', createFirstProfile: '创建第一个配置', // Controls printer: '打印机', nozzle: '喷嘴', refresh: '刷新', addProfile: '添加配置', export: '导出', import: '导入', select: '选择', selectAll: '全选', delete: '删除', // Filters searchPlaceholder: '按名称或耗材搜索...', allExtruders: '所有挤出机', leftOnly: '仅左侧', rightOnly: '仅右侧', allFlow: '所有流量', hfOnly: '仅高流量', sOnly: '仅标准', sortName: '排序:名称', sortKValue: '排序:K 值', sortFilament: '排序:耗材', // Dual extruder labels leftExtruder: '左挤出机', rightExtruder: '右挤出机', // Modal modal: { addTitle: '添加 K 值配置', editTitle: '编辑 K 值配置', profileName: '配置名称', profileNamePlaceholder: '我的 PLA 配置', kValue: 'K 值', kValuePlaceholder: '0.020', kValueHelp: '典型范围:PLA 0.01 - 0.06,PETG 0.02 - 0.10', filament: '耗材', selectFilament: '选择耗材...', noFilamentsHelp: '未找到耗材。请先在 Bambu Studio 中创建 K 值配置。', flowType: '流量类型', highFlow: '高流量', standard: '标准', nozzleSize: '喷嘴尺寸', extruder: '挤出机', extruders: '挤出机', left: '左', right: '右', notes: '备注(本地存储)', notesPlaceholder: '添加关于此配置的备注...', notesHelp: '备注保存在 Bambuddy 中,不在打印机上', syncing: '与打印机同步中...', savingExtruder: '保存到挤出机 {{current}}/{{total}}...', pleaseWait: '请稍候', }, // Delete confirmation deleteConfirm: { title: '删除配置', cannotUndo: '此操作无法撤销', message: '确定要从打印机删除"{{name}}"吗?', }, // Bulk delete bulkDelete: { title: '删除配置', cannotUndo: '此操作无法撤销', message: '确定要从打印机删除 {{count}} 个选中的配置吗?', }, // Toast toast: { profileSaved: 'K 值配置已保存', profilesSaved: 'K 值配置已保存到 {{count}} 个挤出机', selectAtLeastOneExtruder: '请至少选择一个挤出机', profileDeleted: 'K 值配置已删除', profilesDeleted: '已删除 {{count}} 个配置', exportedProfiles: '已导出 {{count}} 个配置', importedProfiles: '已导入 {{count}} / {{total}} 个配置', noProfilesToExport: '无可导出的配置', invalidFileFormat: '无效的文件格式', failedToParseImport: '解析导入文件失败', failedToSaveBatch: '批量保存 K 值配置失败', noteSaved: '备注已保存', failedToSaveNote: '保存备注失败', }, // Permissions permission: { noRead: '您没有刷新配置的权限', noCreate: '您没有添加配置的权限', noUpdate: '您没有更新 K 值配置的权限', noDelete: '您没有删除 K 值配置的权限', noExport: '您没有导出配置的权限', noImport: '您没有导入配置的权限', }, }, // Virtual Printer virtualPrinter: { title: '虚拟打印机', running: '运行中', stopped: '已停止', description: { default: '启用虚拟打印机,使其在 Bambu Studio 和 OrcaSlicer 中可见。发送到此打印机的文件将直接归档而不打印。', proxy: '启用代理,将切片软件流量中继到真实打印机,允许在任何网络上远程打印。', }, enable: { title: '启用虚拟打印机', visibleInSlicer: '在切片软件发现中显示为"Bambuddy"', proxyingTo: '代理到 {{name}}', notActive: '未激活', }, model: { title: '打印机型号', description: '选择要模拟的打印机型号。', restartWarning: '更改型号将重启虚拟打印机', }, accessCode: { title: '访问码', isSet: '访问码已设置', notSet: '未设置访问码 - 需要设置才能启用', placeholder: '输入 8 位字符代码', placeholderChange: '输入新代码以更改', hint: '必须恰好 8 个字符。切片软件使用此代码进行认证。', charCount: '({{count}}/8)', }, targetPrinter: { title: '目标打印机', configured: '代理目标已配置', notConfigured: '未选择目标打印机 - 代理模式需要设置', placeholder: '选择打印机...', hint: '选择要将切片软件流量代理到的打印机。打印机必须处于局域网模式。', noPrinters: '未配置打印机。请先添加打印机以使用代理模式。', }, remoteInterface: { title: '网络接口覆盖', configured: '接口覆盖已激活', optional: '可选 - 当自动检测的 IP 不正确时使用(例如多网卡、Docker、VPN)', placeholder: '自动检测(默认)...', hint: '覆盖通过 SSDP 广播并在 TLS 证书中使用的 IP 地址。在 Bambuddy 有多个网络接口时很有用。', }, mode: { title: '模式', archive: '归档', archiveDesc: '立即归档文件', review: '审核', reviewDesc: '归档前审核', queue: '队列', queueDesc: '归档并添加到队列', proxy: '代理', proxyDesc: '中继到真实打印机', }, autoDispatch: { title: '自动派发', description: '添加到队列时自动开始打印。关闭后,打印任务等待手动派发。', }, setupRequired: { title: '需要设置', description: '虚拟打印机功能需要额外的系统配置才能工作。包括端口转发、防火墙规则和平台特定设置。', readGuide: '启用前请阅读设置指南', }, howItWorks: { title: '工作原理', step1: '在同一局域网中,虚拟打印机会通过发现机制自动出现在您的切片软件(Bambu Studio / OrcaSlicer)中。从其他网络,通过 IP 地址和访问码手动添加。', step2: '在归档、审核和队列模式下,使用切片软件中的"发送"按钮将 3MF 文件上传到 Bambuddy。切片软件会显示"打印成功"— 文件已存储,未打印。', step3: '在代理模式下,虚拟打印机将所有流量中继到真实打印机 — 打印会立即开始,就像直接连接一样。', }, status: { title: '状态详情', printerName: '打印机名称', model: '型号', serialNumber: '序列号', mode: '模式', pendingFiles: '待处理文件', targetPrinter: '目标打印机', ftpPort: 'FTP 端口', mqttPort: 'MQTT 端口', ftpConnections: 'FTP 连接', mqttConnections: 'MQTT 连接', }, toast: { updated: '虚拟打印机设置已更新', failedToUpdate: '更新设置失败', accessCodeRequired: '请先设置访问码', targetPrinterRequired: '请先选择目标打印机', bindIpRequired: '请先设置绑定 IP', accessCodeEmpty: '访问码不能为空', accessCodeLength: '访问码必须恰好 8 个字符', created: '虚拟打印机已创建', failedToCreate: '创建虚拟打印机失败', deleted: '虚拟打印机已删除', failedToDelete: '删除虚拟打印机失败', }, list: { title: '虚拟打印机', add: '添加', addFirst: '添加虚拟打印机', empty: '未配置虚拟打印机。添加一个以开始使用。', }, bindIp: { title: '绑定接口', placeholder: '选择接口...', hint: '此虚拟打印机绑定的网络接口。每台打印机必须唯一。', }, proxy: { accessCodeHint: '在代理模式下,在切片软件中使用目标打印机的访问码。连接会透明转发到真实打印机。', }, addDialog: { title: '添加虚拟打印机', name: '名称', hint: '创建后可以配置访问码、目标打印机和其他设置。', create: '创建', }, deleteConfirm: { title: '删除虚拟打印机', message: '确定要删除"{{name}}"吗?这将停止此打印机的所有服务。', }, }, // Model Viewer modelViewer: { openInSlicer: '在切片软件中打开', tabs: { model: '3D 模型', gcode: 'G-code 预览', }, notAvailable: '不可用', notSliced: '未切片', plates: '板', allPlates: '所有板', plateNumber: '板 {{number}}', plateCount: '{{count}} 个板', plateCount_other: '{{count}} 个板', objectCount: '{{count}} 个对象', objectCount_other: '{{count}} 个对象', filamentCount: '{{count}} 种耗材', filamentCount_other: '{{count}} 种耗材', eta: '预计 {{minutes}} 分钟', noPreview: '此文件无可用预览', pagination: { pageOf: '第 {{current}} / {{total}} 页', prev: '上一页', next: '下一页', }, errors: { failedToLoad: '加载文件失败', noMeshes: '3MF 文件中未找到网格', unsupportedFormat: '不支持的文件格式', }, }, // Maintenance type descriptions (built-in) maintenanceDescriptions: { lubricateCarbonRods: '在碳纤维杆上涂抹润滑剂以确保顺畅运动', lubricateRails: '在线性导轨上涂抹润滑剂以确保顺畅运动', cleanNozzle: '清洁热端和喷嘴以防止堵塞', checkBelts: '检查皮带张力以确保打印精度', cleanBuildPlate: '清洁构建板以获得更好的附着力', checkExtruder: '检查挤出机齿轮磨损情况', checkCooling: '确保冷却风扇正常工作', generalInspection: '打印机综合检查', cleanCarbonRods: '清洁碳纤维杆以减少摩擦', lubricateSteelRods: '在钢杆上涂抹润滑剂以确保顺畅运动', cleanSteelRods: '清洁钢杆以减少摩擦', cleanLinearRails: '擦拭线性导轨以清除灰尘和碎屑', checkPtfeTube: '检查 PTFE 管的磨损或损坏', replaceHepaFilter: '更换 HEPA 过滤器以保证空气质量', replaceCarbonFilter: '更换活性炭过滤器', lubricateLeftNozzleRail: '润滑左喷嘴导轨(H2 系列)', }, // Smart Plugs smartPlugs: { offline: '离线', admin: '管理', openPlugAdminPage: '打开插座管理页面', deleteSmartPlug: '删除智能插座', turnOnSmartPlug: '开启智能插座', turnOffSmartPlug: '关闭智能插座', turnOn: '开启', turnOff: '关闭', addSmartPlug: { scanningNetwork: '扫描网络中...', chooseEntity: '选择实体...', connectionFailed: '连接失败', searchEntities: '搜索实体...', searchPowerSensors: '搜索功率传感器...', searchEnergySensors: '搜索能量传感器...', placeholders: { plugName: '客厅插座', mqttStateOnValue: 'ON、true、1', mqttSameAsPower: '与功率主题相同,或不同', }, }, // SmartPlugCard linkedTo: '关联到:', monitorOnly: '仅监控', alerts: '警报', scheduleOn: '开启 {{time}}', scheduleOff: '关闭 {{time}}', on: '开启', off: '关闭', power: '功率', kwhToday: '今日kWh', settings: '设置', automationSettings: '自动化设置', showInSwitchbar: '在开关栏显示', quickAccessSidebar: '从侧边栏快速访问', enabled: '已启用', enableAutomation: '为此插座启用自动化', autoOn: '自动开启', autoOnDescription: '打印开始时开启', autoOff: '自动关闭', autoOffDescription: '打印完成时关闭(一次性)', autoOffPersistent: '保持启用', autoOffPersistentDescription: '在打印之间保持启用而非一次性', turnOffDelayMode: '关闭延迟模式', time: '时间', temp: '温度', delayMinutes: '延迟(分钟)', tempThreshold: '温度阈值(°C)', tempThresholdDescription: '当喷嘴冷却到此温度以下时关闭', edit: '编辑', deleteConfirm: '确定要删除"{{name}}"吗?此操作无法撤销。', turnOnConfirm: '确定要开启"{{name}}"吗?', turnOffConfirm: '确定要关闭"{{name}}"吗?这将切断连接设备的电源。', failedToTurn: '无法{{action}}"{{name}}"', unknown: '未知', // AddSmartPlugModal addTitle: '添加智能插座', editTitle: '编辑智能插座', stopScanning: '停止扫描', discoverTasmota: '发现Tasmota设备', foundDevices: '找到{{count}}个设备 - 点击选择:', noDevicesFound: '未在您的网络中找到Tasmota设备', haNotConfigured: 'Home Assistant未配置。请在以下位置设置', haSettingsPath: '设置 → 网络 → Home Assistant', selectEntity: '选择实体 *', ipAddress: 'IP地址 *', nameLabel: '名称 *', username: '用户名', password: '密码', authHint: '如果您的Tasmota设备不需要认证,请留空', linkToPrinter: '关联打印机', noPrinter: '无打印机(仅手动控制)', linkingDescription: '关联后可在打印开始/完成时自动开关', powerAlerts: '功率警报', alertAbove: '高于时警报(W)', alertBelow: '低于时警报(W)', alertDescription: '当电力消耗超过这些阈值时收到通知。留空以禁用该方向。', dailySchedule: '每日计划', turnOnAt: '开启时间', turnOffAt: '关闭时间', scheduleDescription: '每天在这些时间自动开关插座。留空以跳过该操作。', showOnPrinterCard: '在打印机卡片上显示', displayOnPrinterCard: '在打印机卡片上显示按钮', connectedResult: '已连接!', deviceLabel: '设备:{{name}} - ', stateLabel: '状态:{{state}}', test: '测试', delete: '删除', save: '保存', add: '添加', cancel: '取消', failedToStartScan: '无法开始扫描', nameRequired: '名称为必填项', entityRequired: 'Home Assistant插座需要实体', mqttTopicRequired: '必须为功率、能源或状态监控配置至少一个MQTT主题', loadingEntities: '正在加载实体...', loading: '加载中...', failedToLoadEntities: '加载实体失败:{{error}}', noEntitiesMatching: '未找到匹配"{{search}}"的实体', noEntitiesAvailable: '无可用实体', searchingEntities: '搜索所有实体(找到{{count}}个)', showingEntities: '显示 switch、light、input_boolean({{count}}个可用)', energyMonitoringOptional: '能源监控(可选)', energyMonitoringHint: '搜索并选择提供功率/能源数据的传感器。', powerSensorW: '功率传感器(W)', energyTodayKwh: '今日能源(kWh)', totalEnergyKwh: '总能源(kWh)', noMatchingSensors: '无匹配的传感器', none: '无', mqttNotConfigured: 'MQTT代理未配置。请在以下位置设置代理地址', mqttSettingsPath: '设置 → 网络 → MQTT发布', mqttNotConfiguredSuffix: '(您不需要启用发布,只需填写代理详细信息)。', mqttMonitorOnlyDescription: 'MQTT插座通过MQTT订阅接收功率/能源数据。开关控制不可用 - 请使用您的MQTT代理或家庭自动化系统。', powerMonitoring: '功率监控', energyMonitoring: '能源监控', stateMonitoring: '状态监控', optional: '可选', topic: '主题', jsonPath: 'JSON路径', multiplier: '乘数', onValue: 'ON值', mqttPowerHint: 'JSON路径从JSON负载中提取值(例如"power_l1")。如果主题发布原始数值,请留空。\n乘数:mW→W使用0.001,kW→W使用1000。', mqttEnergyHint: 'JSON路径从JSON负载中提取值。原始值请留空。\n乘数:Wh→kWh使用0.001,MWh→kWh使用1000。', mqttStateHint: 'JSON路径从JSON负载中提取值。原始值请留空。\nON值:表示"ON"的确切字符串。留空以自动检测(ON、true、1)。', noSwitchesInSwitchbar: '开关栏中没有开关', enableSwitchbarHint: '在设置 > 智能插座中启用"在开关栏显示"', }, // Notifications notifications: { // Provider types providerTypes: { callmebot: 'CallMeBot/WhatsApp', ntfy: 'ntfy', pushover: 'Pushover', telegram: 'Telegram', email: '电子邮件', discord: 'Discord', webhook: 'Webhook', homeassistant: 'Home Assistant', }, // Provider descriptions providerDescriptions: { email: 'SMTP 电子邮件通知', telegram: '通过 Telegram 机器人发送通知', discord: '通过 Webhook 发送到 Discord 频道', ntfy: '免费、可自托管的推送通知', pushover: '简单、可靠的推送通知', callmebot: '通过 CallMeBot 免费发送 WhatsApp 通知', webhook: '通用 HTTP POST 到任意 URL', homeassistant: 'Home Assistant 仪表板中的持久通知', }, // NotificationProviderCard lastSuccess: '上次:{{date}}', error: '错误', printer: '打印机:', allPrinters: '所有打印机', sendTestNotification: '发送测试通知', eventSettings: '事件设置', enabled: '已启用', sendFromProvider: '从此提供商发送通知', // Event categories printEvents: '打印事件', printerStatus: '打印机状态', amsAlarms: 'AMS 警报', amsHtAlarms: 'AMS-HT 警报', printQueue: '打印队列', // Event tags (badges) start: '开始', plateCheck: '热床检测', complete: '完成', failed: '失败', stopped: '已停止', progress: '进度', offline: '离线', lowFilament: '耗材不足', maintenance: '维护', amsHumidity: 'AMS 湿度', amsTemp: 'AMS 温度', amsHtHumidity: 'AMS-HT 湿度', amsHtTemp: 'AMS-HT 温度', bedCooled: '热床已冷却', firstLayer: '首层完成', quiet: '免打扰', digest: '摘要 {{time}}', // Event labels (expanded settings) printStarted: '打印已开始', plateNotEmpty: '热床非空', plateNotEmptyDescription: '打印前检测到物体', printCompleted: '打印已完成', bedCooledLabel: '热床已冷却', bedCooledDescription: '打印后热床温度降至阈值以下', firstLayerCompleteLabel: '首层打印完成', firstLayerCompleteDescription: '首层完成时发送带照片的通知', missingSpoolAssignmentLabel: '缺少料卷分配', missingSpoolAssignmentDescription: '当打印开始且所需料盘没有分配料卷时发送通知', printFailed: '打印失败', printStopped: '打印已停止', progressMilestones: '进度里程碑', progressMilestonesDescription: '在 25%、50%、75% 时通知', printerOffline: '打印机离线', printerError: '打印机错误', lowFilamentLabel: '耗材不足', maintenanceDue: '需要维护', maintenanceDueDescription: '需要维护时通知', amsHumidityHigh: 'AMS 湿度过高', amsHumidityHighDescription: '普通 AMS 湿度超过阈值', amsTemperatureHigh: 'AMS 温度过高', amsTemperatureHighDescription: '普通 AMS 温度超过阈值', amsHtHumidityHigh: 'AMS-HT 湿度过高', amsHtHumidityHighDescription: 'AMS-HT 湿度超过阈值', amsHtTemperatureHigh: 'AMS-HT 温度过高', amsHtTemperatureHighDescription: 'AMS-HT 温度超过阈值', // Queue events jobAdded: '任务已添加', jobAddedDescription: '任务已添加到队列', jobAssigned: '任务已分配', jobAssignedDescription: '基于模型的任务已分配给打印机', jobStarted: '任务已开始', jobStartedDescription: '队列任务已开始打印', jobWaiting: '任务等待中', jobWaitingDescription: '任务正在等待耗材或打印机', jobSkipped: '任务已跳过', jobSkippedDescription: '任务已跳过(上一个失败)', jobFailed: '任务失败', jobFailedDescription: '任务启动失败', queueComplete: '队列已完成', queueCompleteDescription: '所有队列任务已完成', // Quiet hours quietHours: '免打扰时段', noNotificationsDuring: '在此时段内不发送通知', editProviderToChangeQuietHours: '编辑提供商以更改免打扰时段', // Daily digest dailyDigest: '每日摘要', batchNotifications: '将通知汇总为每日摘要', sendAt: '发送于 {{time}}', editProviderToChangeDigestTime: '编辑提供商以更改摘要时间', // Actions edit: '编辑', deleteProvider: '删除通知提供商', deleteConfirm: '确定要删除"{{name}}"吗?此操作无法撤销。', delete: '删除', // AddNotificationModal addTitle: '添加通知提供商', editTitle: '编辑通知提供商', nameLabel: '名称 *', namePlaceholder: '我的通知', providerTypeLabel: '提供商类型 *', configuration: '配置', testConfiguration: '测试配置', printerFilter: '打印机筛选', onlyFromPrinter: '仅发送来自此打印机的事件通知', quietHoursDnd: '免打扰时段', quietStart: '开始', quietEnd: '结束', dailyDigestLabel: '每日摘要', sendDigestAt: '发送摘要于', digestCollected: '事件将被收集并在此时间作为单条摘要发送', notificationEvents: '通知事件', progressPercent: '(25%、50%、75%)', bedCooledAfterPrint: '(打印完成后)', cancel: '取消', save: '保存', add: '添加', nameRequired: '名称为必填项', fieldRequired: '{{field}}为必填项', // Config field labels phoneNumber: '电话号码', apiKey: 'API 密钥', serverUrl: '服务器 URL', topic: '主题', authToken: '认证令牌', userKey: '用户密钥', appToken: '应用令牌', priority: '优先级', botToken: '机器人令牌', chatId: '聊天 ID', smtpServer: 'SMTP 服务器', smtpPort: 'SMTP 端口', security: '安全', authentication: '认证', username: '用户名', password: '密码', fromEmail: '发件人邮箱', toEmail: '收件人邮箱', webhookUrl: 'Webhook URL', payloadFormat: '负载格式', authorization: '授权', titleFieldName: '标题字段名', messageFieldName: '消息字段名', // NotificationTemplateEditor editTemplate: '编辑模板:{{name}}', titleLabel: '标题', bodyLabel: '正文', titlePlaceholder: '通知标题...', bodyPlaceholder: '通知正文...', availableVariables: '可用变量', clickToInsert: '点击插入到正文光标位置', livePreview: '实时预览', hide: '隐藏', show: '显示', loadingPreview: '加载预览中...', enterTemplateContent: '输入模板内容以查看预览', titlePreview: '标题:', bodyPreview: '正文:', resetToDefault: '恢复默认', titleRequired: '标题为必填项', bodyRequired: '正文为必填项', // NotificationLogViewer notificationLog: '通知日志', showFailedOnly: '仅显示失败', last24Hours: '最近 24 小时', last7Days: '最近 7 天', last30Days: '最近 30 天', last90Days: '最近 90 天', justNow: '刚刚', noFailedNotifications: '没有失败的通知', noNotificationsLogged: '没有通知记录', unknownProvider: '未知提供商', logTitle: '标题', logMessage: '消息', logError: '错误', logProvider: '提供商:{{type}}', logTime: '时间:{{time}}', refresh: '刷新', clearOld: '清除旧记录', statsSummary: '最近 {{days}} 天:', statsNotifications: '条通知', statsSent: '{{count}} 条已发送', statsFailed: '{{count}} 条失败', // Event type labels (for log viewer) eventTypes: { print_start: '打印已开始', print_complete: '打印完成', print_failed: '打印失败', print_stopped: '打印已停止', print_progress: '进度', printer_offline: '打印机离线', printer_error: '打印机错误', filament_low: '耗材不足', maintenance_due: '需要维护', test: '测试', }, userEmail: { title: '通知', emailNotifications: '邮件通知', emailNotificationsDesc: '接收您自己打印任务的邮件通知。邮件将通过高级身份验证中配置的 SMTP 设置发送。', sendingTo: '通知将发送至', noEmailWarning: '您的账户没有邮件地址。请联系管理员添加。', printJobNotifications: '打印任务通知', printJobNotificationsDesc: '选择哪些事件会触发您提交的打印任务的邮件通知。', printJobStarts: '打印任务开始', printJobStartsDesc: '当您的打印任务开始时收到通知。', printJobFinishes: '打印任务完成', printJobFinishesDesc: '当您的打印任务成功完成时收到通知。', printErrors: '打印错误', printErrorsDesc: '当您的打印任务失败或遇到错误时收到通知。', printJobStops: '打印任务停止', printJobStopsDesc: '当您的打印任务被取消或停止时收到通知。', saveSuccess: '通知偏好设置已保存。', saveError: '保存通知偏好设置失败。', }, }, // Rich Text Editor richTextEditor: { bold: '粗体', italic: '斜体', underline: '下划线', bulletList: '无序列表', numberedList: '有序列表', alignLeft: '左对齐', alignCenter: '居中对齐', alignRight: '右对齐', addLink: '添加链接', removeLink: '移除链接', }, // External Links externalLinks: { noLinksConfigured: '未配置外部链接', deleteLink: '删除链接', removeCustomIcon: '移除自定义图标', openInNewTab: '在新标签页中打开', placeholders: { linkName: '我的链接', }, }, // Keyboard Shortcuts Modal keyboardShortcuts: { title: '键盘快捷键', navigation: '导航', archivesSection: '归档', kProfilesSection: 'K 值配置', generalSection: '通用', shortcuts: { goToPrinters: '前往打印机', goToArchives: '前往归档', goToQueue: '前往队列', goToStats: '前往统计', goToProfiles: '前往云端配置', goToSettings: '前往设置', focusSearch: '聚焦搜索', openUploadModal: '打开上传对话框', clearSelection: '清除选择 / 取消焦点', contextMenu: '卡片右键菜单', refreshProfiles: '刷新配置', newProfile: '新建配置', exitSelectionMode: '退出选择模式', showHelp: '显示此帮助', }, footer: '按 Esc 或点击外部关闭', }, // Notification Log notificationLog: { title: '通知日志', events: { printStarted: '打印开始', printComplete: '打印完成', printFailed: '打印失败', printStopped: '打印停止', progress: '进度', printerOffline: '打印机离线', printerError: '打印机错误', lowFilament: '耗材不足', maintenanceDue: '维护到期', test: '测试', }, timeAgo: { justNow: '刚刚', minutesAgo: '{{minutes}} 分钟前', hoursAgo: '{{hours}} 小时前', }, }, // Restore/Backup Modal restoreBackup: { title: '恢复备份', restoring: '恢复中...', restoreComplete: '恢复完成', restoreFailed: '恢复失败', importSettings: '从备份文件导入设置', pleaseWait: '请稍候,正在恢复您的数据', clickToSelect: '点击选择备份文件(.json 或 .zip)', howDuplicateHandling: '重复处理方式:', categories: { printers: '打印机', smartPlugs: '智能插座', notificationProviders: '通知提供商', filaments: '耗材', archives: '归档', pendingUploads: '待处理上传', settingsTemplates: '设置和模板', }, matchingInfo: { printers: '按序列号匹配', smartPlugs: '按 IP 地址匹配', notificationProviders: '按名称匹配', filaments: '按名称 + 类型 + 品牌匹配', archives: '按内容哈希匹配', pendingUploads: '按文件名匹配', settingsTemplates: '始终覆盖', }, replaceExisting: '替换现有数据', keepExisting: '保留现有数据', replaceDescription: '用备份数据覆盖已存在的项目', keepDescription: '仅恢复不存在的项目', caution: '注意:', cautionText: '覆盖将用备份数据替换您当前的配置。出于安全考虑,打印机访问码永远不会被覆盖。', itemsRestored: '已恢复项目', itemsSkipped: '已跳过项目', restored: '已恢复', skipped: '已跳过(已存在)', filesLabel: '文件(3MF、缩略图等)', newApiKeysGenerated: '已生成新 API 密钥', newApiKeysWarning: '这些密钥仅显示一次。请立即复制!', processingBackup: '处理备份文件中...', noDataFound: '备份文件中未找到可恢复的数据。', failedToRestore: '恢复备份失败。请检查文件格式。', }, // Backup Export Modal backupExport: { title: '导出备份', selectData: '选择要包含的数据', selectAll: '全选', selectNone: '全不选', categoryDescriptions: { settings: '语言、主题、更新偏好', notifications: 'ntfy、Pushover、Discord 等', templates: '自定义消息模板', smartPlugs: 'Tasmota 插座配置', externalLinks: '侧边栏外部服务链接', printers: '打印机信息(不含访问码)', plateDetection: '空打印板参考图像', filaments: '耗材类型和成本', maintenance: '自定义维护计划', archives: '所有打印数据 + 文件(3MF、缩略图、照片)', projects: '项目、材料清单和附件', pendingUploads: '虚拟打印机待审核的上传', apiKeys: 'Webhook API 密钥(导入时生成新密钥)', }, requiresPrinters: '需要选择打印机', zipFileWarning: '将创建 ZIP 文件。', zipFileDescription: '包括所有 3MF 文件、缩略图、延时摄影和照片。这可能需要一些时间并生成较大的文件。', includeAccessCodes: '包含访问码', includeAccessCodesDescription: '用于转移到另一台机器', includeAccessCodesWarning: '访问码将以明文形式包含。请妥善保管此备份文件!', categoriesSelected: '已选择 {{selectedCount}} 个类别', }, // Pending Uploads Panel pendingUploads: { placeholders: { notes: '添加关于此打印的备注...', }, discardUpload: '丢弃上传', archiveAllUploads: '归档所有上传', discardAllUploads: '丢弃所有上传', archive: '归档', timeAgo: { justNow: '刚刚', minutesAgo: '{{minutes}} 分钟前', hoursAgo: '{{hours}} 小时前', daysAgo: '{{days}} 天前', }, }, // API Browser apiBrowser: { placeholders: { requestBody: 'JSON 请求体...', searchEndpoints: '搜索端点...', }, }, // Configure AMS Slot Modal configureAmsSlot: { title: '配置 AMS 槽位', slotConfigured: '槽位已配置!', configuringSlot: '正在配置槽位:', slotLabel: '{{ams}} 槽位 {{slot}}', searchPresets: '搜索预设...', colorPlaceholder: '颜色名称或十六进制(例如:棕色、FF8800)', clearCustomColor: '清除自定义颜色', noCloudPresets: '无云端预设。登录拓竹云以同步。', noPresetsAvailable: '无可用预设。登录拓竹云或导入本地配置。', noMatchingPresets: '未找到匹配的预设。', custom: '自定义', builtin: '内置', settingsSentToPrinter: '设置已发送到打印机', filamentProfile: '耗材配置', kProfileLabel: 'K 值配置(压力推进)', filteringFor: '筛选:{{material}}', noKProfile: '无 K 值配置(使用默认值 0.020)', noMatchingKProfiles: '未找到匹配的 K 值配置。将使用默认 K=0.020。', selectFilamentFirst: '请先选择耗材配置', kFromCalibration: 'K={{value}}(来自打印机校准)', customColorLabel: '自定义颜色(可选)', presetColors: '{{name}} 颜色:', showLessColors: '显示更少颜色', showMoreColors: '显示更多颜色', clear: '清除', hexLabel: '十六进制:#{{hex}}', resetting: '重置中...', resetSlot: '重置槽位', cancel: '取消', configuring: '配置中...', configureSlot: '配置槽位', }, // GitHub Backup Settings githubBackup: { title: 'GitHub 备份', history: '历史', downloadBackup: '下载备份', restoreBackup: '恢复备份', noBackupsYet: '暂无备份', }, // Email Settings emailSettings: { placeholders: { fromName: 'BamBuddy', }, }, // Tag Management Modal tagManagement: { searchTags: '搜索标签...', renameTag: '重命名标签', deleteTag: '删除标签', }, // Notification Template Editor notificationTemplates: { placeholders: { title: '通知标题...', body: '通知正文...', }, }, // Batch Tag Modal batchTag: { placeholders: { newTag: '输入新标签...', }, }, // Photo Gallery Modal photoGallery: { deletePhoto: '删除照片', }, // Filament Hover Card filamentHoverCard: { copySpoolUuid: '复制耗材 UUID', }, // K Profiles View kProfilesView: { hasNote: '有备注', copyProfile: '复制配置', }, // Layout/Navigation layout: { openMenu: '打开菜单', noPermissionSystemInfo: '您没有查看系统信息的权限', }, // Dashboard dashboard: { dragToReorder: '拖动以重新排列', hideWidget: '隐藏小部件', }, // Notification Provider Card notificationProviderCard: { deleteNotificationProvider: '删除通知提供商', }, // File Manager Modal fileManagerModal: { closeFileManager: '关闭文件管理器', sortFiles: '排序文件', goToParentFolder: '返回上级文件夹', threeView: '3D 视图', }, // Embedded Camera Viewer embeddedCameraViewer: { refreshStream: '刷新流', close: '关闭', zoomOut: '缩小', resetZoom: '重置缩放', zoomIn: '放大', dragToResize: '拖动调整大小', }, // Timelapse Viewer timelapseViewer: { skipBack5s: '后退 5 秒', skipForward5s: '前进 5 秒', }, // Notification Providers notificationProviders: { descriptions: { email: 'SMTP 邮件通知', telegram: '通过 Telegram 机器人通知', discord: '通过 Webhook 发送到 Discord 频道', ntfy: '免费、可自托管的推送通知', pushover: '简单、可靠的推送通知', callmebot: '通过 CallMeBot 的免费 WhatsApp 通知', webhook: '通用 HTTP POST 到任意 URL', }, }, // Log Viewer logViewer: { searchPlaceholder: '搜索消息或日志名称...', noLogEntries: '未找到日志条目', }, // Switchbar Popover switchbarPopover: { noSwitchesInSwitchbar: '切换栏中没有开关', }, // Project Page Modal projectPageModal: { placeholders: { title: '标题', designer: '设计师', license: '许可证', description: '输入描述...', profileTitle: '配置标题', profileDescription: '配置描述...', }, }, // Spoolman Settings spoolmanSettings: {}, // Time time: { unknown: '-', waiting: '等待中', justNow: '刚刚', now: '现在', minsAgo: '{{count}} 分钟前', inMins: '{{count}} 分钟后', hoursAgo: '{{count}} 小时前', inHours: '{{count}} 小时后', daysAgo: '{{count}} 天前', inDays: '{{count}} 天后', }, // SpoolBuddy Kiosk spoolbuddy: { nav: { dashboard: '仪表板', ams: 'AMS', inventory: '库存', writeTag: '写入', settings: '设置', }, status: { nfcReady: 'NFC 就绪', nfcOff: 'NFC 关闭', offline: '离线', online: '在线', noPrinters: '无打印机', deviceOffline: '设备离线', waitingConnection: '等待设备连接...', systemReady: '系统就绪', status: '状态', }, dashboard: { readyToScan: '准备扫描', idleMessage: '将耗材放在秤上以识别', nfcHint: 'NFC 标签将自动读取', device: '设备', syncWeight: '同步重量', weightSynced: '已同步!', unknownTag: '未知标签', newTag: '检测到新标签', onScale: '在秤上', linkSpool: '链接到耗材', linkTagTitle: '将标签链接到耗材', linkTag: '链接标签', selectSpool: '选择要链接此标签的耗材:', noUntagged: '未找到没有标签的耗材', tagDetected: '检测到标签', noTag: '无标签', tagId: '标签', grossWeight: '毛重', spoolSize: '耗材盘尺寸', close: '关闭', currentSpool: '当前耗材', }, modal: { spoolDetected: '检测到耗材', assignToAms: '分配到 AMS', syncWeight: '同步重量', weightSynced: '已同步!', syncing: '同步中...', newTagDetected: '检测到新标签', addToInventory: '添加到库存', assignToAmsTitle: '分配到 AMS', selectSlot: '选择槽位', assign: '分配', assigning: '分配中...', assignSuccess: '已分配!', assignError: '分配耗材失败。请重试。', noPrinterSelected: '选择打印机...', noAmsDetected: '此打印机未检测到 AMS', slot: '槽位', }, weight: { noReading: '无读数', stable: '稳定', measuring: '测量中...', tare: '去皮', calibrate: '校准', }, spool: { remaining: '剩余', material: '材料', brand: '品牌', color: '颜色', coreWeight: '空盘', labelWeight: '标签', scaleWeight: '秤重', netWeight: '净重', lastUsed: '上次使用', }, ams: { noData: '未检测到 AMS', connectAms: '连接 AMS 以查看耗材槽位', noPrinter: '未选择打印机', selectPrinter: '从顶部栏选择打印机', printerDisconnected: '打印机已断开', humidity: '湿度', level: '余量', active: '活跃', slot: '槽位', empty: '空', }, inventory: { search: '搜索耗材...', empty: '库存中没有耗材', noResults: '没有匹配的耗材', spools: '个耗材', addSpool: '添加耗材', }, settings: { // Tabs tabDevice: '设备', tabDisplay: '显示', tabScale: '秤', tabUpdates: '更新', // Device tab nfcReader: 'NFC 读卡器', type: '类型', connection: '连接', notConnected: '不适用', deviceInfo: '设备信息', hostname: '主机', uptime: '运行时间', // Display tab brightness: '亮度', saved: '已保存', noBacklight: '未检测到 DSI 背光。亮度控制需要 DSI 显示屏。', screenBlank: '屏幕熄灭超时', screenBlankDesc: '不活动后屏幕关闭。触摸唤醒。', displayNote: '亮度作为软件滤镜应用。', // Scale tab scaleCalibration: '秤校准', currentWeight: '当前重量', tareOffset: '去皮', calFactor: '系数', knownWeight: '已知重量', calStep1: '移除秤上所有物品并按设置零点。', calStep2: '将已知重量放在秤上。', setZero: '设置零点', calibrateNow: '校准', calibrated: '已校准', tareSet: '去皮命令已发送。等待设备响应...', tareFailed: '发送去皮命令失败', zeroSet: '零点已设置。将已知重量放在秤上。', calibrationDone: '校准完成!', calibrationFailed: '校准失败', lastCalibrated: '上次校准', stable: '稳定', settling: '稳定中...', firmware: '固件', scale: '秤', noDevice: '未找到 SpoolBuddy 设备', // Updates tab daemonVersion: '守护进程版本', currentVersion: '当前', versionPending: '等待守护进程...', checking: '检查中...', checkUpdates: '检查更新', updateAvailable: '有可用更新', updateInstructions: '通过 SSH 更新:运行 SpoolBuddy 安装脚本进行升级。', upToDate: '已是最新', includeBeta: '包含测试版本', }, writeTag: { tabExisting: '现有耗材', tabNew: '新耗材', tabReplace: '替换标签', searchPlaceholder: '按材料、颜色、品牌搜索...', noUntaggedSpools: '没有无标签的耗材', noTaggedSpools: '没有有标签的耗材', selectSpool: '选择一个耗材,然后将空白 NTAG 放在读卡器上', placeTag: '将 NTAG 放在读卡器上', tagReady: '检测到标签 — 准备写入', writeTag: '写入标签', replaceTag: '替换标签', writing: '写入标签中...', waiting: '等待 SpoolBuddy...', writeSuccess: '标签写入成功!', writeFailed: '写入失败', queueFailed: '排队写入命令失败', tryAgain: '重试', cancel: '取消', replaceWarning: '旧标签将被取消链接。新标签将替换它。', deviceOffline: 'SpoolBuddy 离线', material: '材料', colorName: '颜色名称', color: '颜色', brand: '品牌', weight: '重量 (g)', createSpool: '创建耗材', creating: '创建中...', spoolCreated: '耗材已创建!准备写入。', createFailed: '创建耗材失败', }, }, bugReport: { title: '报告错误', description: '描述', descriptionPlaceholder: '出了什么问题?请描述问题...', email: '邮箱(可选)', emailPlaceholder: 'your@email.com', emailPrivacy: '如果提供,您的邮箱将包含在GitHub Issue的折叠部分中,以便维护者后续跟进。', screenshot: '截图', uploadOrPaste: '上传、粘贴或拖拽图片', dataCollectedSummary: '报告中包含哪些数据?', dataIncluded: '包含:', dataIncludedList: '应用版本、操作系统、架构、Python版本、数据库统计(仅计数)、打印机型号、喷嘴数量、固件版本、连接状态、集成状态(Spoolman、MQTT、HA)、非敏感设置、网络接口数量、Docker详情、依赖版本。', dataNeverIncluded: '绝不包含:', dataNeverIncludedList: '打印机名称、序列号、访问代码、密码、IP地址、邮箱地址、API密钥、令牌、Webhook URL、主机名或用户名。', submit: '提交', startLogging: '开始调试日志', stepEnableLogging: '调试日志已启用', stepReproduce: '请现在重现问题', stepStopLogging: '停止并提交报告', stopAndSubmit: '停止并提交', maxDuration: '{{minutes}}分钟后自动停止', stoppingLogs: '正在收集日志并提交...', submitting: '正在提交错误报告...', submitSuccess: '错误报告提交成功!', submitFailed: '提交错误报告失败', thankYou: '谢谢!', submitted: '您的错误报告已提交。', viewIssue: '查看Issue', unexpectedError: '发生了意外错误', }, };