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: '发生了意外错误',
},
};