export default {
  // Navigation
  nav: {
    printers: '印表機',
    archives: '歸檔',
    queue: '列印佇列',
    stats: '統計',
    profiles: '設定檔案',
    maintenance: '維護',
    projects: '專案',
    inventory: '耗材',
    files: '檔案管理器',
    makerworld: 'MakerWorld',
    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: '錯誤',
    errorLoading: '載入錯誤',
    retry: '重試',
    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: '降序',
    back: '返回',
    copy: '複製',
    copied: '已複製!',
    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: '尚未設定印表機',
    search: '搜尋印表機...',
    noSearchResults: '沒有印表機符合您的搜尋或篩選條件',
    filter: {
      allStatuses: '所有狀態',
      allLocations: '所有位置',
    },
    toolbar: {
      filters: '篩選',
      view: '檢視',
      actions: '操作',
    },
    // 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: '重新連線',
    forceRefresh: '強制重新整理',
    forceRefreshSuccess: '已請求重新整理',
    mqttDebug: 'MQTT 偵錯',
    printerInformation: '印表機資訊',
    copyToClipboard: '複製',
    copied: '已複製！',
    state: '狀態',
    wifiSignalLabel: 'Wi-Fi 訊號',
    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: '新增印表機失敗',
      connectionFailedNotAdded: '無法連線到印表機。請檢查 IP 位址、序號和存取碼，並確認已啟用僅區域網路（LAN-only）模式。該印表機未被新增。',
      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 重新讀取',
      loadInitiated: '載入耗材中…',
      unloadInitiated: '卸載耗材中…',
      failedToLoad: '載入耗材失敗',
      failedToUnload: '卸載耗材失敗',
    },
    // Connection status
    connection: {
      connected: '已連線',
      offline: '離線',
    },
    plateStatus: {
      markCleared: '將列印板標記為已清理',
      cleared: '列印板已清理',
      notCleared: '列印板未清理',
      inUse: '列印板使用中',
    },
    // Queue info
    queue: {
      inQueue: '佇列中有 {{count}} 個列印任務',
      inQueue_plural: '佇列中有 {{count}} 個列印任務',
    },
    // Controls section
    controls: '控制',
    // RFID
    rfid: {
      reread: '重新讀取 RFID',
    },
    // AMS load/unload (#891)
    ams: {
      load: '載入',
      unload: '卸載',
    },
    bedJog: {
      title: '移動熱床',
      bed: '熱床',
      step: '步長 (mm)',
      up: '熱床上移',
      down: '熱床下移',
      disabledWhilePrinting: '列印中已停用',
      notHomedTitle: '印表機未歸零',
      notHomedMessage: '印表機自上次列印以來尚未歸零。請先執行自動歸零以確保安全定位（先停放噴頭，然後歸零 X、Y 和 Z），或者直接移動 — 軟限位將被繞過。',
      homeZ: '自動歸零',
      moveAnyway: '強制移動',
      homingStarted: '印表機自動歸零中…',
    },
    // 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: '關機',
      haToggleTitle: '切換"{{name}}"',
      haToggleMessage: '切換 Home Assistant 實體 {{entity}}？如果目前為開啟狀態，可能會關閉電源。',
      haToggleWarning: '警告："{{name}}"正在列印中！切換 {{entity}} 可能會切斷電源並中斷列印。是否繼續？',
      haToggleButton: '切換',
    },
    // Bulk actions
    bulk: {
      select: '選擇',
      selectAll: '全選',
      selectByLocation: '按位置選擇',
      selected: '已選擇{{count}}臺',
      actions: {
        stop: '停止',
        pause: '暫停',
        resume: '繼續',
        clearPlate: '清除列印床',
        clearHMS: '清除通知',
      },
      confirm: {
        stopTitle: '停止{{count}}個列印任務',
        stopMessage: '這將取消{{count}}臺印表機上的活動列印任務。此操作無法復原。',
        stopButton: '全部停止',
        pauseTitle: '暫停{{count}}個列印任務',
        pauseMessage: '這將暫停{{count}}臺印表機上的活動列印任務。',
        pauseButton: '全部暫停',
        clearPlateTitle: '清除{{count}}個列印床',
        clearPlateMessage: '這將清除{{count}}臺印表機的列印床，可能會觸發佇列中的任務。',
        clearPlateButton: '全部清除',
      },
      success: '{{action}}已在{{count}}臺印表機上完成',
      partial: '{{succeeded}}成功，{{failed}}失敗',
      noneApplicable: '沒有選中的印表機處於適合此操作的狀態',
      selectByState: '按狀態選擇',
    },
    // 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: '請確保列印板<strong>完全空置</strong>，然後點選校準。',
      calibrationDescription: '校準會拍攝空置列印板的參考影像。後續檢查將與此參考進行比較以檢測物體。',
      calibrationTip: '<strong>提示：</strong>您最多可以為不同的列印板儲存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%)',
    },
    airduct: {
      title: '風道模式',
      cooling: '製冷',
      heating: '加熱',
    },
    noSdCard: '無SD',
    door: {
      open: '開',
      closed: '關',
    },
    // Fans
    fans: {
      partCooling: '零件冷卻風扇',
      auxiliary: '輔助風扇',
      chamber: '腔室風扇',
    },
    // HMS errors
    clickToViewHmsErrors: '點選檢視 HMS 錯誤',
    estimatedCompletion: '預計完成時間',
    plateNumber: '板 {{number}}',
    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: '在印表機觸控式螢幕上，前往<strong>設定</strong>',
      step2: '導航到<strong>韌體</strong>',
      step3: '選擇<strong>從 SD 卡更新</strong>',
      step4: '更新將需要 10-20 分鐘',
      done: '完成',
      starting: '啟動中...',
      uploadFirmware: '上傳韌體',
      uploadFailed: '上傳啟動失敗：{{error}}',
      uploadedToast: '韌體已上傳！請在印表機螢幕上觸發更新。',
      availableVersions: '可用版本',
      usable: '可用',
      unavailable: '不可用',
      installed: '已安裝',
      newerBadge: '較新',
      olderBadge: '較舊',
      currentBadge: '目前',
    },
    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: '尚無歸檔',
    prints: '條列印',
    pagination: {
      showing: '顯示',
      to: '至',
      of: '共',
      show: '每頁',
      page: '頁',
      all: '全部',
    },
    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: 'QR 碼',
      viewPhotos: '檢視照片',
      viewPhotosCount: '檢視照片 ({{count}})',
      projectPage: '專案頁面',
      addToFavorites: '新增到收藏',
      removeFromFavorites: '從收藏中移除',
      edit: '編輯',
      printLog: '列印記錄',
      goToProject: '前往專案：{{name}}',
      addToProject: '新增到專案',
      removeFromProject: '從專案中移除',
      loading: '載入中...',
      noProjectsAvailable: '無可用專案',
      searchProjects: '搜尋專案…',
      select: '選擇',
      deselect: '取消選擇',
      delete: '刪除',
    },
    permission: {
      noReprint: '您沒有重新列印此歸檔的權限',
      noAddToQueue: '您沒有新增到佇列的權限',
      noUpdateArchives: '您沒有更新歸檔的權限',
      noUploadFiles: '您沒有上傳檔案的權限',
      noDownload: '您沒有下載歸檔的權限',
      noCopyLink: '您沒有複製下載連結的權限',
      noDelete: '您沒有刪除此歸檔的權限',
      noCreate: '您沒有建立歸檔的權限',
    },
    platePicker: {
      title: '選擇要預覽的列印板',
      hint: '此存檔包含多個列印板。選擇一個在 GCode 檢視器中開啟。',
      plateLabel: '列印板 {{index}}',
      objectCount: '{{count}} 個物件',
      objectCount_plural: '{{count}} 個物件',
      noGcode: '此存檔沒有可預覽的已切片 G 代碼。請先在 Bambu Studio 中開啟並切片。',
    },
    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}}',
      runsBadge: '{{count}} 次列印',
      runsBadgeTitle: '共 {{count}} 次列印 — 成功 {{successful}} 次，失敗 {{failed}} 次。點擊查看完整列印記錄。',
      estimated: '預計：{{time}}',
      actual: '實際：{{time}}',
      accuracy: '準確度：{{percent}}%',
      filament: '{{weight}} 克',
      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: '刪除',
    },
    runLog: {
      title: '列印記錄',
      modalTitle: '列印記錄 — {{name}}',
      modalTitleFallback: '此歸檔',
      empty: '此歸檔尚未記錄任何列印事件。',
      col: {
        date: '日期',
        status: '狀態',
        duration: '時長',
        filament: '耗材',
        cost: '成本',
      },
      status: {
        completed: '已完成',
        failed: '失敗',
        cancelled: '已取消',
        stopped: '已停止',
        skipped: '已略過',
        printing: '列印中',
      },
    },
    modal: {
      deleteArchive: '刪除歸檔',
      deleteConfirm: '確定要刪除"{{name}}"嗎？此操作無法復原。',
      deleteButton: '刪除',
      deletePurgeStats: '同時從快速統計中刪除此列印（耗材、時間、成本、能耗）',
      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: '位置僅影響"儘快"項目。排程項目按設定時間執行。',
    sjf: {
      label: 'SJF',
      tooltip: '最短任務優先 — 排程器優先處理較短的列印任務',
    },
    addedBy: '由 {{name}} 新增',
    nextInQueue: '佇列中的下一個',
    clearPlateSuccess: '列印板已清理 — 準備進行下一個列印',
    plateNumber: '板 {{index}}',
    // Batch / quantity
    quantity: '數量',
    quantityHint: '建立 {{count}} 個佇列項目',
    activeBatches: '活躍批次',
    batchProgress: '已完成 {{completed}}/{{total}}',
    cancelBatch: '取消剩餘',
    batchCancelled: '已取消剩餘批次項目',
    cancelBatchConfirmTitle: '取消批次',
    cancelBatchConfirmMessage: '取消此批次中所有剩餘的待處理項目？',
    batch: '批次',
    // 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: '自動關機',
      gcodeInjection: 'G-code',
    },
    // 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: '批次取消項目失敗',
    },
    // Timeline view
    timeline: {
      listView: '列表',
      timelineView: '時間線',
      unassigned: '未分配',
      noData: '當天沒有計畫的列印任務',
      allDoneBy: '所有列印預計在 {{time}} 前完成',
      staged: '暫存',
      filterAll: '全部顯示',
      filterPrinting: '列印中',
      filterQueued: '佇列中',
      time: {
        anyMoment: '即將完成',
        minutesLeft: '剩餘{{minutes}} 分鐘',
        hoursLeft: '剩餘{{hours}}小時',
        hoursMinutesLeft: '剩餘{{hours}}小時{{minutes}} 分鐘',
      },
      day: {
        previous: '前一天',
        next: '後一天',
        today: '今天',
      },
    },
    // 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: '取消中…',
    awaitingPrinter: '等待印表機…',
    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: '能源成本',
    energyWarmingUpTooltip: '能耗追蹤正在收集每小時快照。當所選範圍之前至少存在一個快照時，時間段合計將變得準確。早期數值可能偏低。',
    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: '到',
    },
    allUsers: '所有使用者',
    noUser: '無使用者（系統）',
    filterByUser: '按使用者篩選',
  },

  // 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: '通知',
      queue: '工作流程',
      filament: '耗材',
      network: '網路',
      apiKeys: 'API 金鑰',
      virtualPrinter: '虛擬印表機',
      spoolbuddy: 'SpoolBuddy',
      failureDetection: '故障檢測',
      users: '身份驗證',
      backup: '備份',
      emailAuth: '信箱認證',
      ldap: 'LDAP',
      twoFa: '雙因素認證',
      oidc: 'SSO / OIDC',
      security: '安全',
    },
    spoolbuddy: {
      infoTitle: 'SpoolBuddy 裝置',
      infoBody: 'SpoolBuddy kiosk 透過心跳自動註冊。如果裝置不再使用，或守護程式當機遺留了過時的重複項，可在此取消註冊。',
      duplicatesTitle: '已註冊 {{count}} 台裝置',
      duplicatesBody: 'kiosk 介面只使用最先註冊的裝置。如果其中有因當機遺留的過時重複項，請取消註冊它——線上裝置會在下次心跳時重新註冊自己。',
      empty: '尚未註冊任何 SpoolBuddy 裝置。',
      online: '線上',
      offline: '離線',
      unregister: '取消註冊',
      unregisterSuccess: '裝置已取消註冊',
      unregisterError: '取消註冊裝置失敗',
      confirmTitle: '取消註冊 SpoolBuddy 裝置？',
      confirmBody: '將從資料庫中移除 "{{hostname}}" ({{deviceId}})。如果裝置線上，會在下次心跳時重新註冊自己。',
      ipAddress: 'IP 位址',
      firmware: '韌體',
      lastSeen: '上次線上',
      daemonUptime: '守護程式執行時間',
      systemUptime: '系統執行時間',
      never: '從未',
      nfc: 'NFC',
      scale: '磅秤',
      cpuTemp: 'CPU 溫度',
      memory: '記憶體',
      disk: '磁碟',
      // Device actions
      update: '更新',
      updateConfirmTitle: '更新 SpoolBuddy 守護程式？',
      updateConfirmBody: '對 "{{hostname}}" 觸發軟體更新？更新完成後守護程式將重新啟動。',
      restartBrowser: '重新啟動瀏覽器',
      restartBrowserConfirmTitle: '重新啟動 kiosk 瀏覽器？',
      restartBrowserConfirmBody: '在 "{{hostname}}" 上重新啟動 kiosk 瀏覽器？顯示將短暫黑屏。',
      restartDaemon: '重新啟動守護程式',
      restartDaemonConfirmTitle: '重新啟動 SpoolBuddy 守護程式？',
      restartDaemonConfirmBody: '在 "{{hostname}}" 上重新啟動 SpoolBuddy 守護程式？裝置將離線幾秒鐘。',
      reboot: '重新開機',
      rebootConfirmTitle: '重新開機？',
      rebootConfirmBody: '重新開機 "{{hostname}}"？裝置將離線約一分鐘。',
      shutdown: '關機',
      shutdownConfirmTitle: '關閉裝置？',
      shutdownConfirmBody: '關閉 "{{hostname}}"？您需要實體存取才能重新開機。',
      commandConfirm: '確認',
      commandQueued: '命令已加入佇列',
      commandError: '傳送命令失敗',
    },
    ldap: {
      title: 'LDAP 認證',
      enabledDesc: 'LDAP 認證已啟用',
      disabledDesc: 'LDAP 認證已停用',
      disabledHint: '在下方設定並儲存 LDAP 設定，然後啟用。',
      enabled: 'LDAP 認證已啟用',
      disabled: 'LDAP 認證已停用',
      feature1: '使用者可以使用 LDAP 憑據登入',
      feature2: '本機管理員帳戶作為後備保留',
      feature3: '登入時 LDAP 群組對應到 BamBuddy 群組',
      serverConfig: 'LDAP 伺服器設定',
      serverUrl: '伺服器 URL',
      serverUrlHint: '使用 ldap:// 進行標準連線或 ldaps:// 進行 SSL 連線',
      security: '安全',
      securityHint: 'StartTLS 將普通連線升級為 TLS。LDAPS 從一開始就使用 TLS。',
      bindDn: '繫結 DN（服務帳戶）',
      bindPassword: '繫結密碼',
      searchBase: '搜尋基礎 DN',
      userFilter: '使用者搜尋過濾器',
      userFilterHint: '{username} 替換為登入使用者名稱。OpenLDAP 使用 (uid={username})。',
      advanced: '進階',
      autoProvision: '自動建立使用者',
      autoProvisionHint: '首次 LDAP 登入時自動建立 BamBuddy 帳戶',
      defaultGroup: '預設群組',
      defaultGroupNone: '— 無（無復原）—',
      defaultGroupHint: '當 LDAP 使用者透過身份驗證但不在任何已對應的 LDAP 群組中時分配的備援群組。留空以使未對應的使用者沒有權限。',
      groupMapping: '群組對應（JSON）',
      groupMappingHint: '將 LDAP 群組 DN 對應到 BamBuddy 群組。可用群組：',
      testConnection: '測試連線',
      settingsSaved: 'LDAP 設定已儲存',
      errors: {
        serverRequired: 'LDAP 伺服器 URL 為必填項',
        searchBaseRequired: '搜尋基礎 DN 為必填項',
        enableAuthFirst: '請先啟用認證',
        configureLdapFirst: '請先儲存 LDAP 設定',
      },
    },
    // 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: '在列印或加入佇列時不顯示耗材不足警告',
    preferLowestFilament: '優先使用剩餘最少的耗材',
    preferLowestFilamentDesc: '當多個料盤匹配時，使用剩餘耗材最少的那個',
    trackingModeBuiltIn: '內建庫存',
    trackingModeBuiltInDesc: '包含 RFID 自動匹配和用量追蹤',
    trackingModeSpoolmanDesc: '外部耗材管理伺服器',
    builtInFeatureRfid: '自動檢測 AMS 中的拓竹 RFID 耗材',
    builtInFeatureUsage: '追蹤每次列印的耗材消耗',
    builtInFeatureCatalog: '管理耗材、顏色和 K 值設定檔案',
    builtInFeatureThirdParty: '第三方耗材可分配到庫存耗材',
    amsSyncButton: '從 AMS 同步重量',
    amsSyncTitle: '從 AMS 同步耗材重量',
    amsSyncMessage: '這將使用已連線印表機的目前 AMS 剩餘百分比值覆蓋所有庫存耗材重量。用於從損壞的重量資料中恢復。印表機必須線上。',
    amsSyncing: '同步中...',
    amsSyncSuccess: '已同步 {{synced}} 個耗材，跳過 {{skipped}} 個',
    amsSyncError: '從 AMS 同步重量失敗',
    spoolmanAmsSyncButton: '從 AMS 同步 Spoolman 重量',
    spoolmanAmsSyncTitle: '從 AMS 同步 Spoolman 耗材重量',
    spoolmanAmsSyncMessage: '這將根據已連線印表機的目前 AMS 剩餘百分比值更新所有 Spoolman 耗材重量。印表機必須線上。',
    spoolmanAmsSyncing: '同步中...',
    spoolmanAmsSyncSuccess: '已同步 {{synced}} 個 Spoolman 耗材，跳過 {{skipped}} 個',
    spoolmanAmsSyncError: '從 AMS 同步 Spoolman 重量失敗',
    spoolmanAmsSyncErrorUnreachable: '同步失敗（Spoolman 無法存取）',
    spoolmanAmsSyncErrorNotConfigured: '同步失敗（Spoolman 未設定）',
    spoolmanNotConfigured: 'Spoolman 未設定',
    // Spoolman filament catalog section in spool catalog settings
    spoolmanFilamentCatalogTitle: 'Spoolman 耗材目錄',
    spoolmanFilamentCatalogDesc: '來自 Spoolman 的耗材名稱和皮重。名稱和線軸重量可在此處編輯；其他屬性請直接在 Spoolman 中管理。',
    // 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: '暫停、繼續和停止列印',
    cloudAccess: '允許雲端存取',
    cloudAccessDescription: '代表您讀取 Bambu Cloud 預設和耗材。需要登入 Bambu Cloud。',
    cloudBadge: '雲端',
    updateEnergyCost: '更新電價',
    updateEnergyCostDescription: '允許此金鑰向 /settings/electricity-price POST 新的每千瓦時電價。適用於 Home Assistant 動態電價自動化（Tibber、Octopus 等）。這是唯一可透過 API 金鑰寫入的設定欄位。',
    energyCostBadge: '能耗',
    legacyKey: '舊版',
    legacyKeyTooltip: '在按使用者所有權之前建立；需重建以使用雲端存取',
    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: '較舊的濕度和溫度資料將被自動刪除',
    defaultPrintOptions: '預設列印選項',
    defaultPrintOptionsDescription: '設定新列印的預設選項值。可在列印對話方塊中逐次覆蓋。',
    defaultBedLevelling: '熱床調平',
    defaultBedLevellingDesc: '列印前自動調平熱床',
    defaultFlowCali: '流量校準',
    defaultFlowCaliDesc: '校準擠出流量',
    defaultVibrationCali: '振動校準',
    defaultVibrationCaliDesc: '減少振紋偽影',
    defaultLayerInspect: '首層檢測',
    defaultLayerInspectDesc: 'AI首層檢測',
    defaultTimelapse: '縮時攝影',
    defaultTimelapseDesc: '錄製縮時攝影影片',
    staggeredStart: '錯開啟動',
    staggeredStartDescription: '多台印表機批次啟動時的預設群組大小與間隔。可在列印對話框中逐批覆寫。',
    plateClear: '熱床清空確認',
    requirePlateClear: '需要熱床清空確認',
    requirePlateClearDescription: '啟用後，排程器會在已完成列印的印表機上啟動佇列列印之前，等待每臺印表機的熱床清空確認。停用後，也會隱藏印表機卡片上的列印板狀態標記和「將列印板標記為已清理」按鈕。',
    gcodeInjection: 'G-code注入',
    gcodeInjectionDescription: '為Farmloop、SwapMod、AutoClear和Printflow 3D等自動列印系統設定自訂G-code，在列印開始和/或結束時注入。程式碼片段按印表機型號設定，在佇列項目上啟用"注入G-code"時套用。',
    gcodeInjectionNoPrinters: '未找到印表機。新增印表機以設定G-code程式碼片段。',
    gcodeStartLabel: '開始G-code',
    gcodeEndLabel: '結束G-code',
    gcodeStartPlaceholder: '在列印開始前插入的G-code...',
    gcodeEndPlaceholder: '在列印結束後追加的G-code...',
    staggerGroupSize: '群組大小',
    staggerGroupSizeHelp: '每個群組要同時啟動的印表機數量',
    staggerInterval: '間隔（分鐘）',
    staggerIntervalHelp: '每個群組啟動之間的延遲',
    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: '輸入密碼',
    passwordRequirements: '至少 8 個字元，包含一個大寫、一個小寫、一個數字和一個特殊字元。',
    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: '選擇要用於開啟檔案的切片軟體',
    orcaslicerKnownIssuesWarning: 'OrcaSlicer 2.3.2 / 2.4.0-dev 存在已知 CLI 錯誤，無法切片許多 Bambu 建立的 3MF — 見上游 issue #12426（繪製的多擠出機檔案 segfault）和 #13386（參數範圍嚴格驗證拒絕）。在上游修復發布之前，推薦使用 Bambu Studio。',
    useSlicerApi: '使用切片器 API',
    useSlicerApiDescription: '開啟時，「切片」操作開啟應用程式內切片器對話框並呼叫 slicer-API sidecar。關閉時（預設），透過 URI 方案交給桌面切片器。',
    slicerCard: '切片器',
    orcaslicerApiUrl: 'OrcaSlicer sidecar URL',
    bambuStudioApiUrl: 'Bambu Studio sidecar URL',
    slicerApiUrlDescription: 'slicer-API sidecar 容器的 URL。留空以使用 SLICER_API_URL / BAMBU_STUDIO_API_URL 環境變數預設值。',
    slicerBundles: {
      title: '切片器捆綁包',
      description: '匯入從 BambuStudio 匯出的 Printer Preset Bundle (.bbscfg)（檔案 → 匯出 → 匯出預設捆綁包 → "Printer preset bundle"）。匯入後，切片請求可以按名稱從捆綁包中選擇預設，無需重新上傳 JSON 設定三元組。',
      uploadButton: '上傳捆綁包',
      uploading: '上傳中…',
      loading: '載入捆綁包中…',
      empty: '尚未匯入捆綁包。',
      summary: '{{processCount}} 個製程 · {{filamentCount}} 個耗材預設',
      delete: '刪除',
      uploadSuccess: '已匯入 {{name}}',
      uploadError: '上傳捆綁包失敗：{{message}}',
      deleteSuccess: '捆綁包已移除',
      deleteError: '刪除捆綁包失敗：{{message}}',
      confirmDeleteTitle: '移除此捆綁包？',
      confirmDeleteMessage: '引用「{{name}}」的切片請求將失敗，直到捆綁包重新匯入。',
    },
    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: '密碼至少需要 8 個字元',
      passwordNeedsUppercase: '密碼必須至少包含一個大寫字母',
      passwordNeedsLowercase: '密碼必須至少包含一個小寫字母',
      passwordNeedsDigit: '密碼必須至少包含一個數字',
      passwordNeedsSpecial: '密碼必須至少包含一個特殊字元',
      enterGroupName: '請輸入群組名稱',
      settingsSaved: '設定已儲存',
      noPermissionUpdate: '您沒有權限變更設定',
      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: '刪除條目失敗',
      material: '材料',
      spoolWeight: '線軸重量',
      color: '顏色',
      updateSpoolWeight: '更新線軸重量',
      filamentUpdated: '耗材已更新',
      filamentUpdateFailed: '更新耗材失敗',
      filamentUpdateInvalid: '耗材資料無效',
      keepExistingSpoolWeight: '保留現有線軸的舊重量',
      keepExistingSpoolWeightDesc: '已使用此耗材類型建立的線軸保留舊的皮重。新線軸使用更新後的值。',
      applyToAllSpools: '套用至所有線軸',
      applyToAllSpoolsDesc: '此耗材類型的所有重量計算立即使用新的皮重。',
    },
    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>brew install ffmpeg</brew>（macOS）或 <apt>apt install ffmpeg</apt>（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)',
    cameraSnapshotUrl: '快照 URL（選用）',
    cameraSnapshotUrlPlaceholder: 'http://192.168.1.61:1984/api/frame.jpeg?src=printer',
    cameraSnapshotUrlHelp: '用於通知縮圖、完成照片、層縮時攝影影格和列印板偵測的單一影格 URL。縮時攝影和列印板偵測各自需要自己的每印表機切換 — 此 URL 只是它們啟用時拉取的影像來源。留空以從上方即時串流擷取。適用於 go2rtc（/api/frame.jpeg）和具有專用快照端點的 IP 攝影機。',
    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 更新：',
    updateViaHomeAssistant: '更新由 Home Assistant Supervisor 管理。請在 Home Assistant 中開啟 設定 → 附加元件 → Bambuddy 以安裝新版本。',
    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: '當印表機Wi-Fi 不穩定時重試FTP操作。適用於3MF下載、列印上傳、縮時攝影下載和韌體更新。',
    autoRetryDescription: '自動重試失敗的FTP操作',
    retryAttempts: '重試次數',
    retryDelay: '重試延遲',
    connectionTimeout: '連線超時',
    time_one: '{{count}} 次',
    time_other: '{{count}} 次',
    second_one: '{{count}} 秒',
    second_other: '{{count}} 秒',
    nSeconds: '{{count}} 秒',
    increaseForWeakWifi: '對Wi-Fi 訊號弱的印表機增加此值',
    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/<serial>/status 等',
    prometheusMetrics: 'Prometheus 指標',
    prometheusEndpointDescription: '在 <code>/api/v1/metrics</code> 公開印表機指標，用於Prometheus/Grafana監控。',
    bearerTokenOptional: 'Bearer權杖（可選）',
    bearerTokenHint: '設定後，請求必須包含 <code>Authorization: Bearer <token></code>',
    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: '確定',

    // 2FA settings
    twoFa: {
      totpTitle: '身份驗證器 App (TOTP)',
      totpDesc: '使用 Google Authenticator、Aegis 或 Authy 等 App。',
      emailOtpTitle: '郵件 OTP',
      emailOtpDesc: '登入時向 {{email}} 傳送一次性驗證碼。',
      emailOtpNoEmail: '請先為帳戶新增信箱地址以啟用此方式。',
      addEmailFirst: '您的帳戶沒有信箱地址，請聯絡管理員新增。',
      setupTotp: '設定身份驗證器 App',
      setupAuthApp: '設定身份驗證器 App',
      setupInstructions: '使用身份驗證器 App 掃描QR Code，然後輸入驗證碼確認。',
      manualEntry: '無法掃描？請手動輸入此金鑰：',
      scannedContinue: '已掃描 — 繼續',
      enterCodeToConfirm: '請輸入身份驗證器 App 中的6位驗證碼以確認設定。',
      activate: '啟用',
      disableTotp: '停用身份驗證器',
      disableConfirmHint: '請輸入有效的 TOTP 碼或備用碼來停用身份驗證器。',
      totpDisabled: '身份驗證器 App 已停用。',
      emailOtpEnabled: '郵件 OTP 已啟用。',
      emailOtpDisabled: '郵件 OTP 已停用。',
      smtpRequired: '請先設定並測試SMTP設定。',
      invalidCode: '無效驗證碼，請重試。',
      enableEmailOtp: '啟用郵件 OTP',
      disableEmailOtp: '停用郵件 OTP',
      emailSetupEnterCode: '驗證碼已傳送至您的信箱地址。請在下方輸入以確認您擁有此信箱。',
      verifyAndEnable: '驗證並啟用',
      emailDisablePasswordHint: '請輸入您的帳戶密碼以確認停用郵件 OTP。',
      passwordPlaceholder: '輸入您的密碼',
      backupCodesTitle: '儲存備用碼',
      backupCodesWarning: '請將這些碼儲存在安全的地方。每個碼只能使用一次，且不會再次顯示。',
      backupCodesRemaining: '剩餘 {{count}} 個備用碼',
      savedCodes: '已儲存',
      regenBackup: '重新產生備用碼',
      regenBackupHint: '輸入目前 TOTP 碼以產生 10 個新備用碼，所有現有備用碼將失效。',
      newBackupCodes: '新備用碼',
      linkedAccounts: '已連結的 SSO 帳戶',
      linkedAccountsDesc: '以下外部身份提供者已與您的帳戶連結。',
      oidcUnlinked: '帳戶已解除連結。',
    },

    // OIDC provider settings
    oidc: {
      title: 'SSO / OIDC 提供者',
      desc: '設定 OpenID Connect 提供者以實現單點登入。',
      addProvider: '新增提供者',
      newProvider: '新提供者',
      empty: '尚未設定 OIDC 提供者。',
      created: '提供者已建立。',
      updated: '提供者已更新。',
      deleted: '提供者已刪除。',
      refreshIcon: '重新整理圖示',
      removeIcon: '移除圖示',
      iconRefreshed: '圖示已重新整理。',
      iconRemoved: '圖示已移除。',
      iconFetchFailed: '無法從提供者 URL 取得圖示。',
      deleteTitle: '刪除提供者',
      deleteMessage: '刪除"{{name}}"？所有連結帳戶將斷開連線。',
      form: {
        name: '顯示名稱',
        issuerUrl: '頒發者 URL',
        clientId: '客戶端 ID',
        clientSecret: '客戶端金鑰',
        scopes: '作用域',
        iconUrl: '圖示 URL（可選）',
        enabled: '已啟用',
        autoCreate: '自動建立使用者',
        autoCreateDesc: '首次登入時自動建立本機帳戶。',
        autoLink: '自動連結已有帳戶',
        autoLinkDesc: '首次登入時透過信箱匹配現有本機帳戶並自動連結。',
        emailClaim: '電子郵件聲明',
        emailClaimDesc: "用作電子郵件身份的 JWT 聲明。Azure Entra ID 請使用 'preferred_username' 或 'upn'（不發送 email_verified）。僅使用可信的聲明名稱。",
        emailClaimPlaceholder: '電子郵件',
        emailClaimCustomClaimAutoLinkWarning: '自訂宣告僅在值由租用戶管理時（例如 Azure Entra ID 的 upn / preferred_username）對自動關聯安全。如果您的 IdP 允許使用者自我宣告此宣告，請勿啟用自動關聯。',
        requireEmailVerified: '要求電子郵件已驗證',
        requireEmailVerifiedDesc: '僅在提供商將電子郵件聲明標記為已驗證時才接受。',
        requireEmailVerifiedWarning: '警告：將在未經驗證的情況下接受電子郵件。僅對受信任的提供商使用。',
        requireEmailVerifiedAutoLink: '請先停用自動連結以變更此設定。',
        secretHint: '留空以保留目前',
        secretPlaceholder: '新金鑰',
        defaultGroup: '預設群組',
        defaultGroupDesc: '自動建立使用者時分配的群組。未設定時回退到 Viewers。',
        defaultGroupViewersFallback: 'Viewers（預設）',
      },
    },

    // TODO: translate encryption keys
    encryption: {
      title: 'MFA 加密狀態',
      enabledFromEnv: '已啟用靜態加密（金鑰來自 MFA_ENCRYPTION_KEY 環境變數）',
      enabledFromFile: '已啟用靜態加密（金鑰從資料目錄載入）',
      enabledGenerated: '使用自動產生的金鑰啟用靜態加密',
      notConfigured: '未設定靜態加密',
      notConfiguredDesc: 'TOTP 機密和 OIDC client_secrets 以明文儲存。請設定 MFA_ENCRYPTION_KEY 或使用可寫資料目錄重新啟動 Bambuddy 以自動產生。',
      allEncrypted: '所有 MFA 機密皆已靜態加密。',
      legacyRowsLabel: '舊版明文列',
      encryptedRowsLabel: '已加密列',
      legacyRowsWarning: '偵測到 {{count}} 個舊版明文列。請重新儲存 OIDC 供應商或重新註冊使用者的身份驗證器應用程式，以遷移到加密儲存。',
      backupHint: '自動產生的金鑰儲存在 DATA_DIR/.mfa_encryption_key 中，並包含在本機備份 ZIP 中。請保護備份安全或顯式設定 MFA_ENCRYPTION_KEY。',
      decryptionBrokenTitle: '加密金鑰遺失',
      decryptionBrokenError: '無法解密 {{count}} 條加密記錄，因為加密金鑰不再可用。請還原先前的 MFA_ENCRYPTION_KEY 或 DATA_DIR/.mfa_encryption_key 以恢復存取。',
      migrationErrorWarning: '{{count}} 行舊資料在啟動時未能重新加密。請檢查伺服器日誌並重新啟動 Bambuddy 以重試。',
    },

  },

  // 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: '登入中...',
    rememberMe: '記住我',
    forgotPassword: '忘記密碼？',
    loginSuccess: '登入成功',
    loginFailed: '登入失敗',
    enterCredentials: '請輸入使用者名稱和密碼',
    enterEmail: '請輸入您的電子郵件地址',
    oidcLoginFailed: 'OIDC 登入失敗',
    oidcErrors: {
      providerError: '身份提供者返回了一個錯誤',
      missingParameters: 'OIDC 回呼缺少必要引數',
      invalidState: 'OIDC 狀態無效或已被使用',
      stateExpired: 'OIDC 登入會話已過期，請重試',
      providerNotFound: '未找到 OIDC 提供者',
      discoveryFailed: '無法獲取 OIDC 探索文件',
      invalidDiscovery: 'OIDC 探索文件無效',
      networkError: 'OIDC 權杖交換時出現網路錯誤',
      badResponse: 'OIDC 權杖交換時收到意外回應',
      noIdToken: 'OIDC 提供者未返回 ID 權杖',
      validationFailed: 'OIDC 權杖驗證失敗',
      nonceMismatch: 'OIDC nonce 不符，可能存在重放攻擊',
      missingSubClaim: 'OIDC 權杖缺少 sub 宣告',
      noLinkedAccount: '沒有與此 OIDC 身份連結的本機帳戶',
      accountInactive: '您的帳戶已被停用',
      userResolutionFailed: '無法解析您的帳戶',
      internalError: 'OIDC 登入過程中發生內部錯誤',
      tokenExchangeFailed: 'OIDC 權杖交換失敗',
    },
    forgotPasswordTitle: '忘記密碼',
    forgotPasswordMessage: '如果您忘記了密碼，請聯絡系統管理員進行重設。',
    forgotPasswordEmailMessage: '輸入您的信箱地址，我們將向您傳送新密碼。',
    emailAddress: '信箱地址',
    emailPlaceholder: 'your.email@example.com',
    cancel: '取消',
    sending: '傳送中...',
    sendResetEmail: '傳送重設郵件',
    howToReset: '如何重設密碼：',
    resetStep1: '聯絡您的 Bambuddy 管理員',
    resetStep2: '請他們在使用者管理中重設您的密碼',
    resetStep3: '他們可以為您設定一個臨時密碼',
    resetStep4: '使用新密碼登入並在設定中修改密碼',
    gotIt: '知道了',
    resetPassword: {
      title: '設定新密碼',
      subtitle: '請在下方輸入並確認您的新密碼。',
      newPassword: '新密碼',
      newPasswordPlaceholder: '至少 8 個字元',
      confirmPassword: '確認密碼',
      confirmPasswordPlaceholder: '重複輸入新密碼',
      saving: '儲存中…',
      submit: '設定新密碼',
      backToLogin: '回到登入',
      passwordsDoNotMatch: '密碼不符',
      passwordTooShort: '密碼至少需要 8 個字元',
      resetFailed: '密碼重設失敗。連結可能已過期。',
    },
    twoFA: {
      title: '兩步驗證',
      subtitle: '您的帳戶已啟用兩步驗證。請在下方輸入驗證碼。',
      methodAuthenticator: '身份驗證器 App',
      methodEmail: '信箱驗證碼',
      methodBackup: '備用恢復碼',
      instructionsTotp: '請開啟您的身份驗證器 App，輸入 Bambuddy 的 6 位驗證碼。',
      instructionsEmail: '6 位驗證碼已傳送至您的信箱，有效期為 10 分鐘。',
      instructionsEmailNotSent: '點選下方按鈕，透過郵件獲取驗證碼。',
      instructionsBackup: '請輸入您的一個 8 位備用恢復碼。每個恢復碼只能使用一次。',
      sendCodeButton: '傳送信箱驗證碼',
      sendingCode: '傳送中...',
      resendCode: '重新傳送驗證碼',
      codeLabel: '驗證碼',
      backupCodeLabel: '備用恢復碼',
      codePlaceholder: '000000',
      backupCodePlaceholder: 'XXXXXXXX',
      verifyButton: '驗證',
      verifyingButton: '驗證中...',
      backToLogin: '← 回到登入頁面',
      orContinueWith: '或透過以下方式登入',
      signInWith: '使用 {{provider}} 登入',
      enterCode: '請輸入驗證碼',
      sendCodeFailed: '驗證碼傳送失敗',
      invalidCode: '無效驗證碼，請重試。',
    },

  },

  // 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: '切換腔室燈',
    unavailable: '攝影機無法使用',
    diagnose: {
      button: '診斷',
      modalTitle: '攝影機診斷',
      running: '正在執行診斷...',
      runFailed: '無法執行診斷: {{error}}',
      retry: '重新執行',
      stage: {
        tcp_reachable: '網路可達性',
        first_frame: '畫面擷取',
        live_stream_active: '直播串流進行中',
      },
      summary: {
        all_ok: '攝影機運作正常。診斷已成功完成所有階段。',
        live_stream_active_healthy: '攝影機正在傳輸最新畫面 — 無需測試。',
        printer_unreachable: '無法存取印表機。請檢查 IP 位址、網路連線以及印表機是否已開機。',
        camera_port_closed: '印表機可存取，但攝影機連接埠已關閉。請確認印表機設定中已啟用僅 LAN 模式與開發者模式。',
        no_frame: '已連線到攝影機，但未收到畫面。請重試或檢查印表機設定中攝影機是否已啟用。',
        unknown_failure: '攝影機診斷因不明原因失敗。請查看支援日誌了解詳情。',
      },
      meta: {
        protocol: '協定',
        port: '連接埠',
        profile: '設定檔',
      },
    },
  },

  // 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 個字元',
      ldapProvisioned: '已建立 LDAP 使用者「{{username}}」',
    },
    modal: {
      createUser: '建立使用者',
      editUser: '編輯使用者',
      cancel: '取消',
      creating: '建立中...',
      saving: '儲存中...',
      saveChanges: '儲存更改',
      advancedAuthSubtitle: '使用進階認證',
      // Manual LDAP provisioning (#1298) — English fallbacks
      tabsAriaLabel: '使用者來源',
      localTab: '本機',
      ldapTab: 'LDAP',
      ldapSearchLabel: '搜尋目錄',
      ldapSearchPlaceholder: '輸入使用者名稱、姓名或電子郵件...',
      ldapMinChars: '輸入至少 2 個字元以搜尋',
      ldapTypeToSearch: '開始輸入以搜尋 LDAP 目錄',
      ldapSearching: '搜尋目錄中...',
      ldapNoResults: '目錄中沒有符合的使用者',
      ldapSearchError: '目錄搜尋失敗。請檢查 LDAP 伺服器狀態。',
      ldapAlreadyProvisioned: '已建立',
      ldapSelectedLabel: '已選',
      ldapProvision: '建立使用者',
      ldapProvisioning: '建立中...',
      ldapErrorProvision: '建立失敗。請檢查 LDAP 伺服器狀態後重試。',
    },
    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: '輸入驗證器 App 中的 6 位驗證碼',
      accessToken: '存取權杖',
      accessTokenHint: '貼上您的拓竹雲端存取權杖。中國大陸帳號（綁定手機號碼、無 Email 登入）僅能使用此方式登入。可從 MakerWorld 瀏覽器 Cookie 取得權杖，詳見 Wiki。',
      back: '返回',
      loginButton: '登入',
      verifyButton: '驗證',
      setTokenButton: '設定權杖',
      useToken: '改用存取權杖',
      useEmail: '改用信箱登入',
      toast: {
        loggedIn: '登入成功',
        codeSent: '驗證碼已傳送到您的信箱',
        enterTotp: '輸入驗證器 App 中的程式碼',
        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: '上傳失敗',
    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: '停用文字換行',
    collapse: '折疊',
    collapseFoldersByDefault: '預設折疊資料夾',
    expandFoldersByDefault: '預設展開資料夾',
    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: '您沒有列印的權限',
    noPermissionSlice: '您沒有切片檔案的權限',
    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 構建',
    urlLabel: '網址',
    urlPlaceholder: 'https://makerworld.com/...',
    urlInvalid: '網址必須以 http:// 或 https:// 開頭',
    openExternalUrl: '開啟專案網址',
    coverImageLabel: '封面圖片',
    coverImageAlt: '專案封面圖片',
    coverImageUpload: '上傳',
    coverImageReplace: '替換',
    coverImageRemove: '移除',
    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: '未連結資料夾。前往檔案管理器將資料夾連結到此項目。',
      noFiles: '此資料夾中沒有檔案。',
      print: '立即列印',
      addToQueue: '加入佇列',
    },
    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: '匯出到檔案',
  },

  // Slice (slicer-API integration via SliceModal)
  slice: {
    title: '切片模型',
    action: '切片',
    slicing: '切片中…',
    printer: '印表機設定檔',
    process: '製程設定檔',
    filament: '耗材設定檔',
    filamentSlot: '耗材 {{index}}（{{type}}）',
    selectPreset: '— 選擇預設 —',
    loadingPresets: '載入預設中…',
    analyzingPlateFilaments: '分析列印板耗材中…',
    analyzingPlateFilamentsHint: '正在執行預覽切片以發現此列印板使用的 AMS 插槽。之後會快取 — 重新開啟是即時的。',
    previewToast: '分析 {{name}} — {{elapsed}}',
    previewWithProgress: '分析 {{name}} — {{stage}} ({{percent}}%) — {{elapsed}}',
    notUsedByPlate: '— 此列印板未使用',
    printerMismatch: '此 3MF 是為 {{source}} 切片的，但您選擇了 {{target}}。切片器 CLI 無法為不同的印表機重新切片 3MF — 請在 Bambu Studio 中開啟原始檔案，變更印表機並重新匯出。',
    noPresetsForSlot: '無可用預設',
    presetsLoadFailed: '載入預設失敗。請先開啟設定 → 設定檔以匯入。',
    allPresetsRequired: '必須選擇所有預設',
    enqueuing: '提交切片任務中…',
    queued: '已排隊…',
    failed: '切片失敗。請檢查切片器 sidecar 日誌。',
    startedToast: '在背景切片 {{name}}…',
    queuedToast: '已排隊：{{name}} — {{elapsed}}',
    runningToast: '切片 {{name}} — {{elapsed}}',
    runningWithProgress: '{{name}} – {{stage}} ({{percent}}%) – {{elapsed}}',
    completedToast: '已切片 {{name}}',
    failedToast: '切片 {{name}} 失敗：{{detail}}',
    tier: {
      local: '已匯入',
      cloud: '雲端',
      standard: '標準',
    },
    cloud: {
      notAuthenticated: '登入 Bambu Cloud（設定 → 設定檔 → 雲端）以查看雲端預設。',
      expired: 'Bambu Cloud 工作階段已過期 — 請重新登入以重新整理雲端預設。',
      unreachable: '目前無法存取 Bambu Cloud。本機和標準預設仍可使用。',
    },
    bedType: {
      label: '列印板',
      auto: '自動（使用製程預設）',
      coolPlate: '冷板',
      coolPlateSuperTack: 'Cool Plate SuperTack',
      engineering: 'Engineering Plate',
      highTemp: 'High Temp Plate',
      texturedPEI: 'Textured PEI Plate',
      smoothPEI: 'Smooth PEI Plate',
    },
  },

  // Spoolman
  spoolman: {
    title: 'Spoolman 整合',
    enabled: 'Spoolman 已啟用',
    url: 'Spoolman URL',
    connected: '已連線',
    disconnected: '未連線',
    testConnection: '測試連線',
    sync: '同步',
    syncing: '同步中...',
    lastSync: '上次同步',
    linkToSpoolman: '連結到 Spoolman',
    openInSpoolman: '在 Spoolman 中開啟',
    unlinkSpool: '取消連結耗材',
    unlinkConfirmTitle: '取消指派料盤？',
    unlinkConfirmMessage: '這將從此插槽中移除料盤。料盤本身的資料將保持不變。',
    selectSpool: '選擇耗材',
    noUnlinkedSpools: '無未指派的料盤',
    linkSuccess: '料盤指派成功',
    linkFailed: '料盤指派失敗',
    unlinkSuccess: '料盤取消指派成功',
    unlinkFailed: '料盤取消指派失敗',
    linkedSpool: '已指派料盤',
    spoolId: '耗材 ID',
    fillSourceLabel: '(Spoolman)',
    weight: '重量',
    remaining: '剩餘',
    disableWeightSync: '停用 AMS 估計重量同步',
    disableWeightSyncDesc: '不從 AMS 估計值更新剩餘容量。如果您更喜歡 Spoolman 的用量追蹤而非 AMS 百分比估計，請使用此選項。新耗材仍將使用 AMS 估計值作為初始重量。',
    reportPartialUsage: '報告失敗列印的部分用量',
    reportPartialUsageDesc: '當列印失敗或被取消時，根據層進度報告估計的耗材使用量。',
  },

  // Inventory
  inventory: {
    title: '耗材庫存',
    subtitle: '管理您的料盤',
    spoolmanMixedContentTitle: 'Spoolman 無法透過 HTTPS 載入 — 瀏覽器已封鎖混合內容',
    spoolmanMixedContentBody: 'Bambuddy 透過您的反向代理以 HTTPS 提供服務，但您的 Spoolman 位址仍為 HTTP。基於安全考量，瀏覽器會封鎖混合內容，因此內嵌的 Spoolman 介面無法載入。Spoolman 也必須可透過 HTTPS 存取。',
    spoolmanMixedContentFixReverseProxy: '請將 Spoolman 置於與 Bambuddy 相同的反向代理（Traefik / Nginx / Caddy）之後並啟用 HTTPS，然後在設定中將 Spoolman URL 更新為新的 HTTPS 位址。',
    spoolmanMixedContentFixOpenNewTab: '作為替代方案，可在新分頁以 HTTP 開啟 Spoolman — 混合內容規則僅適用於內嵌框架，獨立分頁仍可正常運作。',
    spoolmanOpenInNewTab: '在新分頁開啟 Spoolman',
    labels: {
      title: '列印線材標籤',
      selectedCount: '已選 {{count}} 項',
      pickSpools: '選擇要列印標籤的線材：',
      searchPlaceholder: '按名稱、品牌或 #ID 搜尋',
      filterByMaterial: '材料：',
      allMaterials: '全部',
      selectVisible: '選擇所有可見 ({{count}})',
      deselectVisible: '取消選擇可見',
      clearAll: '全部清除',
      noSpoolsToShow: '沒有要顯示的線材。請調整篩選條件後重試。',
      noMatches: '沒有線材符合目前搜尋或篩選。',
      printOne: '列印此線材的標籤',
      printLabels: '列印標籤…',
      bulkTitle: '從目前顯示的 {{count}} 個線材中選擇要列印標籤的',
      noSpoolsTitle: '沒有要貼標籤的線材',
      error: '無法產生標籤：{{msg}}',
      sortBy: {
        label: '排序：',
        id: '按 ID',
        color: '按顏色',
      },
      templates: {
        ams: {
          label: 'AMS holder (30 × 15 mm)',
          hint: '每頁一個標籤；適用於熱門的 AMS 耗材標籤托架。',
        },
        box40x30: {
          label: '盒標籤 (40 × 30 mm)',
          hint: '每頁一張；常見的 DK/Brother 捲尺寸,適合用於耗材袋與儲物盒標籤。',
        },
        box: {
          label: 'Box label (62 × 29 mm)',
          hint: '每頁一個標籤；適配 Brother PT/QL 和 Dymo 小標籤。',
        },
        averyL7160: {
          label: 'Avery L7160 — A4 sheet (38.1 × 63.5 mm × 21)',
          hint: '歐洲規格紙張；每張 A4 頁 21 個標籤。',
        },
        avery5160: {
          label: 'Avery 5160 — US Letter sheet (25.4 × 66.7 mm × 30)',
          hint: '美國規格紙張；每張 Letter 頁 30 個標籤。',
        },
      },
    },
    addSpool: '新增耗材',
    editSpool: '編輯耗材',
    copySpool: '複製耗材',
    material: '材料',
    selectMaterial: '選擇材料...',
    subtype: '子類型',
    brand: '品牌',
    searchBrand: '搜尋品牌...',
    useCustomBrand: '使用"{{brand}}"',
    useCustomMaterial: '使用自訂材料：{{material}}',
    colorName: '顏色名稱',
    colorNamePlaceholder: '翡翠白、烈焰紅...',
    color: '顏色',
    hexColor: '十六進位顏色',
    pickColor: '選擇自訂顏色',
    labelWeight: '標籤重量',
    coreWeight: '空盤重量',
    searchSpoolWeight: '搜尋耗材重量...',
    weightUsed: '已使用',
    currentWeight: '剩餘重量',
    measuredWeight: '稱量重量',
    spoolName: '料盤',
    costPerKg: '每公斤成本',
    storageLocation: '存放位置',
    storageLocationPlaceholder: '例如：貨架A，抽屜1',
    openInInventory: '在庫存中查看',
    measuredWeightError: '稱量重量必須在 {{min}}g 到 {{max}}g 之間。',
    slicerFilament: '切片耗材',
    slicerFilamentName: '切片預設名稱',
    slicerPreset: '切片預設',
    searchPresets: '搜尋耗材預設...',
    selectedPreset: '已選擇',
    noPresetsFound: '未找到預設',
    tempOverrides: '溫度覆蓋',
    note: '備註',
    notePlaceholder: '關於此耗材的任何備註...',
    // Per-spool category + low-stock threshold override (#729)
    category: '類別',
    categoryPlaceholder: '例如：生產、原型、客戶A',
    categoryNone: '未分類',
    storageLocationNone: '未設定位置',
    lowStockThresholdOverride: '低庫存閾值（此料盤）',
    lowStockThresholdOverrideHelp: '留空以使用全域閾值（{{global}}%）。',
    clearRfid: '清除 RFID 標籤',
    rfidCleared: 'RFID 標籤已清除',
    archive: '歸檔',
    restore: '恢復',
    noSpools: '尚無耗材。新增您的第一個耗材開始使用。',
    noAvailableSpools: '沒有可用的耗材。請先向庫存中新增耗材，或從其他槽位取消指派一個耗材。',
    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: '搜尋耗材...',
    showAllSpools: '顯示所有耗材',
    spoolmanSpools: 'Spoolman 線軸',
    allMaterials: '所有材料',
    filterByBrand: '按品牌篩選...',
    showArchived: '顯示已歸檔',
    quickAdd: '快速新增（庫存）',
    quantity: '數量',
    stock: '庫存',
    configured: '已設定',
    spoolsCreated: '已建立 {{count}} 個耗材',
    spoolsPartiallyCreated: '已建立 {{created}} / {{total}} 個耗材（部分失敗）',
    spoolCreated: '耗材已建立',
    spoolUpdated: '耗材已更新',
    spoolDeleted: '耗材已刪除',
    deepLinkSpoolNotFound: '找不到耗材',
    deepLinkFetchFailed: '無法載入耗材 — 請重試',
    spoolArchived: '耗材已歸檔',
    spoolRestored: '耗材已恢復',
    kProfileSaveFailed: 'K值設定檔設定無法儲存',
    syncWeightSpoolNotFound: '找不到耗材 — 可能已被刪除',
    syncWeightSpoolmanUnreachable: 'Spoolman 無法存取 — 請稍後再試',
    syncWeightFailed: '重量同步失敗',
    spoolmanUnreachable: 'Spoolman 無法存取 — 請稍後再試',
    deleteSpoolNotFound: '找不到耗材 — 可能已被刪除',
    deleteFailed: '刪除耗材失敗',
    archiveSpoolNotFound: '找不到耗材 — 可能已被刪除',
    archiveFailed: '歸檔耗材失敗',
    restoreSpoolNotFound: '找不到耗材 — 可能已被刪除',
    restoreFailed: '恢復耗材失敗',
    saveFailed: '儲存變更失敗',
    tagClearFailed: '清除標籤失敗',
    deleteConfirm: '確定要刪除此耗材嗎？此操作無法復原。',
    archiveConfirm: '確定要歸檔此耗材嗎？',
    advancedSettings: '進階設定',
    // Tabs
    filamentInfoTab: '耗材資訊',
    paProfileTab: 'PA 設定',
    filamentInfo: '耗材',
    additional: '附加',
    // Cloud
    loadingPresets: '載入雲端預設中...',
    cloudConnected: '雲端已連線',
    cloudNotConnected: '雲端未連線（使用預設值）',
    // Colors
    recentColors: '最近',
    searchColors: '搜尋顏色...',
    searchResults: '搜尋結果',
    allColors: '所有顏色',
    commonColors: '常用顏色',
    showLess: '顯示更少',
    showAll: '顯示全部',
    noColorsFound: '沒有顏色匹配您的搜尋',
    noResults: '未找到匹配項',
    // 多色漸層 + 視覺效果 (#1154)
    extraColorsLabel: '附加顏色',
    extraColorsPlaceholder: 'EC984C,#6CD4BC,A66EB9,D87694',
    extraColorsHint: '貼上 2 至 8 個十六進位色值,以逗號分隔。將以漸層方式呈現。',
    extraColorsInvalid: '已略過無效的十六進位值:{{tokens}}',
    colorEffectLabel: '效果',
    colorEffect: {
      none: '無',
      sparkle: '閃光',
      wood: '木紋',
      marble: '大理石',
      glow: '夜光',
      matte: '霧面',
      silk: '絲光',
      galaxy: '星空',
      rainbow: '彩虹',
      metal: '金屬',
      translucent: '半透明',
      gradient: '漸層',
      dualColor: '雙色',
      triColor: '三色',
      multicolor: '多色',
    },
    // 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: '自開始追蹤',
    resetUsage: '將用量重置為 0',
    resetUsageTooltip: '將此料盤的已消耗克數計數器歸零',
    resetUsageConfirm: '將此料盤的已消耗克數計數器重置為 0？後續列印將從零開始計算。料盤本身、剩餘重量計算與您的設定均不會變更。',
    resetAllUsage: '重置所有料盤的用量',
    resetAllUsageTooltip: '將每個有效料盤的已消耗克數計數器歸零',
    resetAllUsageConfirm: '將全部 {{count}} 個有效料盤的已消耗克數計數器重置為 0？這將清空「累計消耗」統計值，後續列印從零開始計算。料盤與剩餘重量不會變更。',
    usageReset: '料盤用量已重置為 0',
    allUsageReset: '已重置 {{count}} 個料盤',
    resetUsageFailed: '重置料盤用量失敗',
    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 之間',
    // Spoolman filament catalog picker
    spoolmanFilamentCatalog: 'Spoolman 耗材目錄',
    pickFromSpoolmanCatalog: '從 Spoolman 目錄選擇…',
    spoolmanFilamentSelected: '已從 Spoolman 目錄選擇耗材',
    spoolmanFilamentUnlinked: '已解除耗材目錄關聯',
    noSpoolmanFilaments: 'Spoolman 目錄中未找到耗材',
    spoolmanFilamentColorSwatch: '耗材顏色',
    spoolWeightManagedBySpoolman: '空線軸重量在 Spoolman 中按耗材類型管理',
    spoolmanCatalogLoadFailed: '無法載入 Spoolman 耗材目錄',
  },

  // 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: '強制顏色匹配',
    staggerPrinterStarts: '錯開印表機啟動',
    staggerGroupSize: '群組大小',
    staggerInterval: '間隔（分鐘）',
    staggerPreview: '{{printers}} 台印表機 → 分成 {{groups}} 組，每組 {{size}} 台，每 {{interval}} 分鐘啟動一組',
    staggerLastGroup: '最後一組：{{count}}',
    staggerTotal: '總計：{{minutes}} 分鐘',
    staggerToPrinters: '分批傳送到 {{count}} 臺印表機',
    gcodeInjection: '注入自動列印G-code',
  },

  // Backup
  backup: {
    includesEncryptionKey: '本機備份包含 MFA 加密金鑰檔案（DATA_DIR/.mfa_encryption_key），因此備份 ZIP 是自包含的。請將 ZIP 視為敏感檔案 — 任何擁有該檔案的人都可以解密內部儲存的 OIDC 用戶端機密和 TOTP 機密。',
    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: '需要雲端登入',
    githubDescription: '自動將您的設定檔案同步到私有 GitHub 倉庫以進行備份和版本歷史紀錄。',
    repoIsPrivate: '儲存庫為私有 — 可安全備份。',
    repoIsPublicWarning: '儲存庫為公開（PUBLIC）。Bambuddy 備份包含 MQTT 認證、Home Assistant 權杖、Prometheus 權杖、您的 Bambu Cloud 電子郵件，以及透過 K-profile 暴露的印表機存取碼。在您於服務商設定中將儲存庫改為私有之前，儲存將被阻擋。',
    repoVisibilityUnknown: '無法確認儲存庫的可見性。Bambuddy 拒絕向任何未確認為私有的目標進行備份；儲存將被阻擋。',
    repositoryUrl: '倉庫 URL',
    repoUrlPlaceholderGitHub: 'https://github.com/username/repo-name',
	repoUrlPlaceholderGitea: 'https://gitea.example.com/username/repo-name',
    repoUrlPlaceholderForgejo: 'https://forgejo.example.com/username/repo-name',
    repoUrlPlaceholderGitLab: 'https://gitlab.com/username/repo-name',
    allowInsecureHttp: '允許不安全的 HTTP',
    allowInsecureHttpHint: '為無 TLS 的私人網路自托管執行個體啟用',
    personalAccessToken: '個人存取權杖',
    tokenSaved: '（已儲存）',
    enterNewToken: '輸入新權杖以更新',
    tokenHint: '具有內容讀寫權限的細粒度權杖',
    branch: '分支',
    provider: 'Git 供應商',
    providerGitHub: 'GitHub',
	providerGitLab: 'GitLab',
	providerGitea: 'Gitea',
    providerForgejo: 'Forgejo',
    manualOnly: '僅手動',
    hourly: '每小時',
    daily: '每天',
    weekly: '每週',
    includeInBackup: '包含在備份中',
    kProfiles: 'K 設定檔案',
    kProfilesDescription: '來自已連線印表機的壓力推進校準',
    noPrintersConnected: '沒有印表機連線',
    printersConnected: '{{connected}}/{{total}} 已連線',
    cloudProfiles: '雲設定檔案',
    cloudProfilesDescription: '來自 Bambu Cloud 的耗材、印表機和工藝預設',
    appSettings: '應用程式設定',
    appSettingsDescription: 'Bambuddy 設定（完整資料庫）',
    spoolInventory: '耗材庫存',
    spoolInventoryDescription: '耗材卷軸、使用紀錄和成本追蹤',
    printArchives: '列印檔案',
    printArchivesDescription: '列印歷史中繼資料（不含 gcode/3MF 檔案）',
    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: '關閉',

    // Scheduled local backups (#884)
    scheduledBackup: '排程備份',
    scheduledBackupDescription: '依排程自動建立備份快照。輸出目錄可掛載到 NAS 或外部儲存。',
    frequency: '頻率',
    backupTime: '時間',
    retention: '保留',
    retentionDescription: '保留的備份數量',
    outputPath: '輸出路徑',
    outputPathPlaceholder: '預設：{{path}}',
    outputPathDescription: '留空以使用預設位置',
    runNow: '立即執行',
    backupFiles: '備份檔案',
    noScheduledBackups: '尚無備份',
    deleteBackup: '刪除',
    deleteBackupConfirm: '要刪除此備份檔案嗎？',
    backupRunning: '備份進行中…',
    scheduledBackupComplete: '備份已成功完成',
    scheduledBackupFailed: '備份失敗',
    nextBackup: '下次備份',
    backupSize: '大小',
    utc: 'UTC',
    defaultPathLabel: '預設：',

    // 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: '新增到佇列時自動開始列印。關閉後，列印任務等待手動派發。',
    },
    queueForceColorMatch: {
      title: '強制顏色匹配',
      description: '拒絕派發到沒有完全相同耗材類型和顏色的印表機。預設關閉 — 不啟用時，佇列僅按型號匹配，可能選到顏色錯誤的印表機。',
    },
    tailscaleDisabled: {
      title: 'Tailscale 整合',
      description: '啟用以將此 VP 標記為透過 Tailscale 公開。顯示主機的 Tailscale 位址，以便您知道要貼上到切片器中的 IP。CA 匯入步驟保持不變 — 此切換對憑證無影響。',
    },
    setupRequired: {
      title: '需要設定',
      description: '虛擬印表機功能需要額外的系統設定才能工作。包括埠轉發、防火牆規則和平臺特定設定。',
      readGuide: '啟用前請閱讀設定指南',
    },
    archiveNameSource: {
      title: '存檔名稱來源',
      description: '選擇透過虛擬印表機接收檔案時新存檔的命名方式。"元資料"使用 3MF 中嵌入的切片標題（預設）。"檔名"使用 Bambu Studio 透過 FTP 傳送的檔案名稱 — 當您在"傳送到印表機"對話方塊中重新命名工作時非常有用。',
      metadata: '元資料',
      filename: '檔名',
    },
    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: '更新設定失敗',
      copyFailed: '複製失敗 — 請手動選取文字',
      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: '在列印之間保持啟用而非一次性',
    autoOffAfterDrying: '乾燥完成後自動關閉',
    autoOffAfterDryingDescription: 'AMS 乾燥完成後關閉',
    delayAfterDryingMinutes: '乾燥後延遲（分鐘）',
    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）。',
    // REST smart plug
    restControl: '控制',
    restOnUrl: '開啟 URL',
    restOffUrl: '關閉 URL',
    restOnBody: '開啟請求內容',
    restOffBody: '關閉請求內容',
    restMethod: 'HTTP 方法',
    restHeaders: '自訂標頭（JSON）',
    restStatusUrl: '狀態 URL',
    restStatusPath: '狀態 JSON 路徑',
    restStatusOnValue: 'ON 值',
    restPowerUrl: '功率URL',
    restPowerPath: '功率 JSON 路徑',
    restPowerMultiplier: '功率乘數',
    restEnergyUrl: '能耗URL',
    restEnergyPath: '能耗 JSON 路徑',
    restEnergyMultiplier: '能耗乘數',
    restUrlRequired: 'REST 插座至少需要一個 URL（ON 或 OFF）',
    restHeadersHint: '例如：{"Authorization": "Bearer your-token"}',
    restBodyHint: '例如：ON、{"state": "on"}',
    restStatusHint: '用於輪詢目前狀態的 URL',
    restPathHint: '例如：state 或 data.power.status',
    restPowerUrlHint: '功率資料的獨立URL（留空則使用狀態URL）',
    restEnergyUrlHint: '能耗資料的獨立URL（留空則使用狀態URL）',
    restEnergyHint: '每個值可以使用獨立的URL，或回退到狀態 URL。使用乘數進行單位轉換（例如：0.001 將 Wh 轉換為 kWh）。',
    testConnection: '測試連線',
    connectionSuccess: '連線成功',
    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 溫度超過閾值',
    // Inventory stock alert events
    inventoryAlerts: '庫存警報',
    stockReorderAlert: '補貨警報',
    stockReorderAlertDescription: 'SKU 已達到補貨點',
    stockBreakAlert: '斷貨警報',
    stockBreakAlertDescription: '庫存將在補貨到達前耗盡',
    // 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: '（列印完成後）',
    // Per-event ntfy priority (#990)
    eventPriority: {
      sectionTitle: 'ntfy 優先級',
      helpNtfy: '為每個已啟用的事件選擇優先級。ntfy 使用它來升級提醒（聲音、可見性、推播行為）。此處未設定的級別將使用 ntfy 伺服器預設值。',
      min: '最低',
      low: '低',
      default: '預設',
      high: '高',
      urgent: '緊急',
    },
    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: '設定槽位',
  },

  // Git Backup Settings
  githubBackup: {
    title: 'Git 備份',
    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: '目前耗材',
      plateReady: '熱床就緒: {{name}}',
      plateReadyLabel: '待清理的熱床',
      plateClearAction: '清理',
      plateClearedToast: '已將熱床標記為已清理',
      plateClearFailed: '無法將熱床標記為已清理',
    },
    modal: {
      spoolDetected: '偵測到耗材',
      assignToAms: '分配到 AMS',
      syncWeight: '同步重量',
      weightSynced: '已同步！',
      syncing: '同步中...',
      newTagDetected: '偵測到新標籤',
      addToInventory: '新增到庫存',
      assignToAmsTitle: '分配到 AMS',
      selectSlot: '選擇槽位',
      assign: '分配',
      assigning: '分配中...',
      assignSuccess: '已分配！',
      assignPendingInsert: '已分配。插入耗材後將設定槽位。',
      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: '執行時間',
      systemConfig: '後端與認證',
      backendUrl: 'Bambuddy 後端 URL',
      apiToken: 'API 權杖',
      apiTokenPlaceholder: '輸入 API 權杖',
      saveConfig: '儲存設定',
      systemQueued: '設定已加入佇列。',
      nfcDiagnostic: 'NFC 診斷',
      scaleDiagnostic: '磅秤診斷',
      readTagDiagnostic: '讀取標籤診斷',
      testNfc: '測試讀卡器',
      testScale: '測試精度',
      testReadTag: '讀取標籤',
      systemFieldsRequired: '後端 URL 為必填項。',
      // 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: '建立耗材失敗',
      incompleteDataWarning: '已使用不完整的Spoolman資料寫入標籤',
    },
    quickMenu: {
      printerPower: '印表機電源',
      systemControls: '系統',
      restartDaemon: '重新啟動守護程式',
      restartBrowser: '重新啟動瀏覽器',
      reboot: '重新開機',
      shutdown: '關機',
      swipeToClose: '向下滑動關閉',
      confirmTitle: '確認',
      confirmShutdown: '確定要關閉 SpoolBuddy 嗎？您需要實體存取才能重新開啟。',
      confirmReboot: '確定要重新開機 SpoolBuddy 嗎？',
      confirmRestartDaemon: '重新啟動 SpoolBuddy 守護程式？NFC 和磅秤將暫時不可用。',
      confirmRestartBrowser: '重新啟動kiosk瀏覽器？螢幕將短暫變黑。',
      confirm: '確認',
      confirmPlugOn: '開啟 {{name}}？',
      confirmPlugOff: '關閉 {{name}}？',
      turnOn: '開啟',
      turnOff: '關閉',
    },
  },

  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: '發生了意外錯誤',
  },
  failureDetection: {
    title: 'AI 故障檢測',
    description: '透過自託管的 Obico ML API 監控列印,並對偵測到的故障自動採取行動。',
    mlUrl: 'Obico ML API 地址',
    mlUrlHint: '您自託管的 Obico ml_api 容器的基礎 URL(例如 http://192.168.1.10:3333)。',
    test: '測試',
    testSuccess: 'ML API 可存取且正常。',
    testFailed: '無法存取 ML API。',
    sensitivity: '靈敏度',
    sensitivityLow: '低(減少誤報)',
    sensitivityMedium: '中(平衡)',
    sensitivityHigh: '高(更早檢測,更多誤報)',
    sensitivityHint: '調整觸發警告和故障的置信度閾值。',
    action: '偵測到故障時的操作',
    actionNotify: '僅通知',
    actionPause: '暫停列印',
    actionPauseOff: '暫停並切斷電源',
    pollInterval: '檢查間隔(秒)',
    pollIntervalHint: '列印過程中每臺印表機的檢查頻率。最小 5 秒,最大 120 秒。',
    externalUrlMissing: '尚未設定外部 URL。',
    externalUrlHint: 'ML API 透過 URL 擷取攝影機快照。請在一般設定中設定外部 URL，讓 ML API 容器可以連線到 Bambuddy。',
    perPrinterTitle: '監控的印表機',
    perPrinterHint: '選擇檢測服務要監視哪些印表機。',
    monitorAll: '監控所有已連線的印表機',
    statusTitle: '狀態',
    serviceRunning: '服務執行中',
    thresholds: '低 / 高閾值',
    activePrinters: '活動列印',
    noActivePrints: '目前沒有正在進行的列印。',
    historyTitle: '最近檢測',
    noHistory: '尚無檢測紀錄。',
  },
  makerworld: {
    title: 'MakerWorld',
    description: '貼上 MakerWorld 模型連結，即可直接在 Bambuddy 中匯入並列印 —— 無需切換至 Bambu Handy 應用程式。',
    pasteUrlHeader: '從 MakerWorld 匯入',
    pasteUrlPlaceholder: 'https://makerworld.com/en/models/… 或貼上任意 MakerWorld 連結',
    resolveButton: '解析',
    signInRequiredTitle: '下載需要登入 Bambu Cloud',
    signInRequiredBody: '您可以匿名瀏覽模型詳情，但下載 3MF 檔案需要 Bambu Cloud 帳戶。',
    openCloudSettings: '開啟雲端設定',
    untitledModel: '無標題模型',
    byCreator: '作者: {{name}}',
    downloadsCount: '{{count}} 次下載',
    licensePrefix: '授權條款',
    alreadyImported: '已在資料庫中',
    openOnMakerworld: '在 MakerWorld 中開啟',
    alreadyInLibrary: '此模型已在您的資料庫中 —— 可在檔案管理員 → MakerWorld 中找到',
    importSuccess: '已匯入 {{filename}} —— 已儲存至檔案管理員 → MakerWorld',
    platesHeader: '列印板 ({{count}})',
    plateDefaultName: '列印板 {{n}}',
    materialCount: '{{count}} 種耗材',
    amsRequired: '需要 AMS',
    slicedFor: '為 {{printer}} 切片',
    alsoCompatible: '還標記為相容：{{printers}}',
    importToLibrary: '儲存',
    sliceIn: '儲存並在 {{slicer}} 中切片',
    disclaimer: 'MakerWorld 整合使用由社群記錄的 API 介面。Bambuddy 與 MakerWorld 或 Bambu Lab 無從屬或認可關係。',
    lastImportSuccess: '已匯入您的資料庫',
    lastImportAlreadyInLibrary: '已存在於您的資料庫中',
    viewInLibrary: '在檔案管理員中查看',
    openInBambuStudio: '在 Bambu Studio 中開啟',
    openInOrcaSlicer: '在 OrcaSlicer 中開啟',
    importTo: '匯入至檔案管理員',
    recentImportsHeader: '最近匯入',
    phaseResolving: '解析中',
    phaseDownloading: '下載中',
    folderAuto: 'MakerWorld (預設)',
    importAll: '全部匯入',
    importAllProgress: '正在匯入 {{current}}/{{total}}',
    openGallery: '開啟圖片庫',
    galleryPrev: '上一張',
    galleryNext: '下一張',
    deleteImport: '從資料庫中移除',
    importDeleting: '正在移除…',
    importDeleted: '已從資料庫中移除',
    confirmDelete: '從資料庫中移除 {{filename}}？本機檔案將被刪除，但可以從 MakerWorld 重新匯入。',
    errors: {
      resolveFailed: '無法解析該 MakerWorld 連結。',
      downloadFailed: '下載失敗。請重試。',
      deleteFailed: '無法從資料庫中移除檔案。',
    },
  },
  gcodeViewer: {
    back: '返回',
    backToArchives: '返回列印歸檔',
    backToFiles: '返回檔案管理器',
  },
  libraryTrash: {
    title: '資源回收筒',
    headerButton: '資源回收筒',
    headerTooltip: '檢視已移至資源回收筒的檔案',
    backToFiles: '返回檔案管理員',
    subtitleAdmin: '已刪除的檔案會在資源回收筒保留 {{days}} 天，之後自動刪除。此檢視顯示所有使用者的資源回收筒。',
    subtitleUser: '已刪除的檔案會在資源回收筒保留 {{days}} 天，之後自動刪除。',
    loading: '正在載入資源回收筒…',
    loadError: '無法載入資源回收筒。',
    empty: '資源回收筒是空的。',
    summary: '{{count}} 個檔案 · {{size}}',
    emptyTrash: '清空資源回收筒',
    restore: '還原',
    purgeNow: '立即刪除',
    autoPurgeIn: '將於 {{when}} 自動刪除',
    days: '天',
    retentionLabel: '自動刪除時間',
    selectAll: '全選',
    selectOne: '選擇 {{filename}}',
    selectionCount: '已選擇 {{count}} 項',
    bulkRestore: '還原所選',
    bulkPurge: '刪除所選',
    col: {
      filename: '檔案',
      folder: '資料夾',
      size: '大小',
      deleted: '移入資源回收筒',
      autoPurge: '自動刪除',
      owner: '擁有者',
      actions: '操作',
    },
    confirm: {
      purgeTitle: '永久刪除？',
      purgeBody: '{{filename}} 將從磁碟中刪除，無法還原。',
      emptyTitle: '清空資源回收筒？',
      emptyBody: '全部 {{count}} 個檔案將從磁碟中刪除。此操作無法復原。',
      bulkPurgeTitle: '永久刪除所選檔案？',
      bulkPurgeBody: '所選的 {{count}} 個檔案將從磁碟中刪除，無法還原。',
      cta: '永久刪除',
    },
    toast: {
      restored: '檔案已還原。',
      restoreFailed: '無法還原檔案。',
      purged: '檔案已永久刪除。',
      purgeFailed: '無法刪除檔案。',
      emptied: '已從資源回收筒刪除 {{count}} 個檔案。',
      emptyFailed: '無法清空資源回收筒。',
      retentionSaved: '自動刪除已設定為 {{days}} 天。',
      retentionFailed: '無法儲存保留設定。',
      bulkRestored: '已還原 {{count}} 個檔案。',
      bulkPurged: '已刪除 {{count}} 個檔案。',
    },
  },
  libraryPurge: {
    title: '清理舊檔案',
    headerButton: '清理舊檔案',
    headerTooltip: '批次將舊檔案移至資源回收筒',
    description: '早於所選時間的檔案將被移至資源回收筒。外部資料夾會被略過。在自動刪除之前，您可以從資源回收筒還原檔案。',
    ageLabel: '移動早於以下天數的檔案',
    days: '天',
    includeNeverPrinted: '包括從未列印過的檔案',
    effectsTitle: '點擊清除時會發生什麼',
    effect1: '符合的檔案移至回收筒 — 尚未從磁碟刪除。',
    effect2: '在保留期到期之前，您可以隨時從回收筒復原。',
    effect3: '保留期滿後，回收筒清理器將它們從磁碟永久刪除。',
    effect4: '外部（連結）資料夾中的檔案將被略過 — Bambuddy 從不刪除不屬於自己的位元組。',    previewLoading: '正在檢查符合的檔案數量…',
    previewFailed: '無法預覽清理結果。',
    previewSummary: '{{count}} 個檔案 · {{size}} 將被移至資源回收筒',
    andMore: '…還有 {{count}} 個',
    warning: '檔案將被軟刪除——在保留期結束前，您可以從資源回收筒還原它們。',
    confirmCta: '將 {{count}} 個移至資源回收筒',
    purging: '正在移至資源回收筒…',
    toast: {
      success: '已將 {{count}} 個檔案移至資源回收筒。',
      failed: '無法清理檔案。',
    },
  },
  libraryAutoPurge: {
    enableLabel: '自動清理舊檔案',
    enableDescription: '每天執行一次管理員清理。檔案會先進入資源回收筒——不會立即刪除。',
    ageLabel: '自動清理早於以下天數的檔案',
    ageDescription: '最少 7 天，最多 10 年。使用與手動「清理舊檔案」按鈕相同的時間規則。',
    days: '天',
    includeNeverPrinted: '包括從未列印過的檔案',
    saveFailed: '無法儲存自動清理設定。',
  },
  archivePurge: {
    headerButton: '清除舊條目',
    headerTooltip: '批次刪除舊歸檔',
    title: '清除舊歸檔',
    description: '清除舊的列印歷史。每個歸檔按其最近一次列印完成時間老化 — 重新列印歸檔會重新整理其年齡，因此活躍工作永遠不會被清除。',
    ageLabel: '刪除最近未列印的歸檔：',
    days: '天',
    effectsTitle: '點擊清除時會發生什麼',
    effect1: '每個符合的歸檔將從清單中隱藏，其磁碟檔案（3MF、縮圖、縮時攝影、原始 3MF、F3D、照片）也會被刪除。',
    effect2: '資料庫中的歸檔記錄會保留，因此 Quick Stats 仍可計入耗材、時間、成本與能耗的貢獻 — 與單筆刪除的預設行為一致。',
    effect3: '勾選下方「同時從統計中移除」，可一併清除 Quick Stats 中的貢獻（等同單筆刪除選項）。此操作無法復原。',
    effect4: '重新列印歸檔會重新整理其使用計時器，因此仍在使用的歸檔不會被清除。',
    purgeStatsLabel: '同時從統計中移除',
    purgeStatsHint: '從 Quick Stats（耗材、時間、成本、能耗）中移除符合的歸檔。未勾選時，Quick Stats 會保留所有貢獻，僅檔案從磁碟刪除。',
    previewLoading: '檢查符合的歸檔數量…',
    previewFailed: '無法預覽清除。',
    previewSummary: '將移除 {{count}} 個歸檔 · {{size}}',
    andMore: '…還有 {{count}} 個',
    warning: '檔案會從磁碟刪除且無法復原。繼續前請下載或收藏您想保留的內容。',
    confirmCta: '移除 {{count}} 個歸檔',
    purging: '移除中…',
    toast: {
      success: '已移除 {{count}} 個歸檔。',
      failed: '無法清除歸檔。',
    },
  },
  archiveAutoPurge: {
    enableLabel: '自動清除舊歸檔',
    enableDescription: '每天一次，將閾值內未列印的歸檔從清單中隱藏，並從磁碟中刪除其檔案。重新列印會重設計時器。',
    ageLabel: '自動刪除最近未列印的歸檔：',
    ageDescription: '最少 7 天，最多 10 年。基於最近一次列印完成 — 重新列印會重新整理年齡。刪除 3MF、縮圖、縮時攝影、原始 3MF、F3D 與照片。',
    days: '天',
    purgeStatsLabel: '同時從統計中移除',
    purgeStatsDescription: '啟用後，每日清理任務還會將每個被清除的歸檔從 Quick Stats（耗材、時間、成本、能耗）中移除。預設關閉 — Quick Stats 會保留貢獻，僅檔案從磁碟刪除。',
    runNow: '立即清除歸檔',
    saveFailed: '無法儲存自動清除設定。',
  },
  cameraTokens: {
    title: '攝影機 API 權杖',
    navTitle: '攝影機 API 權杖',
    description:
      '長期權杖，用於將攝影機串流嵌入 Home Assistant、Frigate、資訊站或其他需要穩定 URL 的工具。每個權杖僅限攝影機串流，可隨時撤銷。',
    loading: '載入中…',
    confirmRevoke: {
      title: '撤銷此權杖？',
      body: '使用「{{name}}」的任何裝置將立即失去存取權限。此操作無法復原。',
      cancel: '取消',
      confirm: '撤銷',
    },
    create: {
      title: '建立新權杖',
      nameLabel: '權杖名稱',
      namePlaceholder: '例如 Home Assistant',
      daysLabel: '到期天數',
      submit: '建立',
      hint:
        '最大有效期 365 天。權杖值僅在建立時顯示一次 — 請立即複製。',
    },
    created: {
      title: '權杖已建立 — 立即複製',
      warning:
        '這是此權杖唯一一次可見。關閉此對話框後您將無法再次查看。',
      copy: '複製',
      dismiss: '我已儲存',
    },
    list: {
      myTitle: '我的權杖',
      allTitle: '所有使用者（管理員視圖）',
      empty: '尚無權杖。',
      name: '名稱',
      owner: '擁有者',
      prefix: '前綴',
      created: '建立時間',
      expires: '到期時間',
      lastUsed: '最近使用',
      revoke: '撤銷',
      expired: '已過期',
    },
    toast: {
      created: '權杖已建立',
      createFailed: '建立權杖失敗',
      revoked: '權杖已撤銷',
      revokeFailed: '撤銷權杖失敗',
      loadFailed: '載入權杖失敗',
      copied: '已複製到剪貼簿',
      copyFailed: '複製失敗 — 手動選擇並複製',
    },
  },

  // Forecast & Inventory Intelligence
  forecast: {
    title: '庫存預測',
    noSpools: '未找到活躍的料卷。請將料卷新增至庫存以查看預測資料。',
    noUsageData: '無可用使用資料 — 無法預測庫存時間線。',
    sku: 'SKU',
    // Table headers
    material: '材料',
    stock: '庫存',
    dailyRate: '消耗率',
    daysLeft: '剩餘天數',
    emptyBy: '耗盡日期',
    reorderBy: '補貨截止日',
    actions: '操作',
    // Rate tier badges
    trend: '趨勢',
    estimated: '估算',
    noData: '無資料',
    // Timeframe
    timeframe: '時間範圍',
    // Chart
    chartTitle: '庫存預測 — 前5種材料',
    dashedLinesROP: '虛線 = 再訂貨點',
    stockLevel: '庫存量',
    reorderPoint: '再訂購點',
    safetyMargin: '安全餘量',
    trendLegend: '趨勢（基於歷史，95%服務水準）',
    estimatedLegend: '估算（重量差值）',
    noDataLegend: '無資料',
    ropLabel: '再訂貨點',
    ssLabel: '安全庫存',
    safetyStockLegend: '安全庫存',
    stockArrivalLegend: '到貨',
    stockoutLegend: '斷貨',
    // Alerts toolbar
    alertCount_one: '{{count}}條警告',
    alertCount_other: '{{count}}條警告',
    order: '訂購',
    // Settings
    globalLeadTime: '全域交貨期',
    globalLeadTimeHint: '全域交貨期下限 — 用於所有 SKU 的再訂購點計算',
    save: '儲存',
    cancel: '取消',
    settingsSaved: '設定已儲存',
    failedSaveSettings: '儲存設定失敗',
    globalLeadTimeSaved: '全域提前期已儲存',
    skuLeadTimeOverride: 'SKU 交貨期覆蓋',
    skuLeadTimeHint: '0 = 使用全域交貨期。設定 >0 以覆蓋此 SKU。',
    safetyMarginLabel: '安全餘量',
    effectiveLeadTime: '有效交貨期',
    effectiveLeadTimeHint: 'max(全域 {{global}}天, SKU {{sku}}天)',
    reorderPointHint: 'd̄ × LT + safety margin — 當庫存降至此水準時下單',
    safetyMarginHint: '統計安全庫存 (z=1.65 × σ × √LT) + 使用者自訂緩衝',
    safetyMarginHintDays: '在統計安全庫存基礎上額外增加的緩衝。{{approx}}',
    safetyMarginHintDaysApprox: ' ≈ 按當前速率 {{g}}g。',
    safetyMarginHintG: '在統計安全庫存基礎上增加的固定重量緩衝。{{approx}}',
    safetyMarginHintGApprox: ' ≈ 按當前速率 {{days}}天。',
    individualSpools: '單個料卷',
    labelWeight: '標示重量',
    spoolCount_one: '{{count}}個線軸',
    spoolCount_other: '{{count}}個線軸',
    // Alerts
    stockBreakRisk: '斷貨風險',
    stockBreakBefore: '補貨前庫存斷檔',
    stockBreakDetail: '剩餘 {{days}} 天，交貨期 {{lt}} 天。',
    reorderNow: '立即補貨',
    reorderTriggerPassed: '觸發日期 {{date}} 已過。',
    // Shopping list
    shoppingList: '購物清單',
    shoppingListItems_one: '（{{count}}項）',
    shoppingListItems_other: '（{{count}}項）',
    shoppingListEmpty: '購物清單為空。點擊任意列的購物車圖示以新增商品。',
    addToCart: '新增至購物清單',
    alertsSnoozed: '靜音此SKU的提醒',
    alertsEnabled: '啟用此SKU的提醒',
    addedToCart: '已新增至購物清單',
    failedAddItem: '新增項目失敗',
    listView: '列表',
    logisticsView: '物流',
    qty: '數量',
    weight: '重量',
    leadTime: '交貨期',
    expectedRestock: '預計補貨日期',
    status: '狀態',
    note: '備註',
    pending: '待處理',
    purchased: '已購買',
    received: '已收貨',
    markPurchased: '標記為已購買',
    markReceived: '標記為已收貨 — 將料卷新增至庫存',
    resetToPending: '重置為待處理',
    remove: '移除',
    clearAll: '清空',
    downloadCsv: 'CSV',
    // Add to cart modal
    addToCartTitle: '新增至購物清單',
    byQuantity: '依數量',
    byDuration: '依時長',
    numberOfSpools: '線軸數量',
    lastHowManyDays: '需要持續多少天？',
    noUsageQty: '無使用資料 — 數量已設為1。',
    noteOptional: '備註（選填）',
    notePlaceholder: '例如：用於專案X，緊急…',
    addNSpools_one: '新增{{count}}個線軸',
    addNSpools_other: '新增{{count}}個線軸',
    // Cart logistics
    onArrival: '到貨時',
    stockBreakIn: '{{days}} 天後斷貨。',
    stockRunsOutBefore: '庫存在 {{lt}} 天交貨期結束前耗盡。',
    atRate: '按 {{rate}}g/天的速度，您需要',
    moreSpools_one: '再{{count}}個線軸',
    moreSpools_other: '再{{count}}個線軸',
    bridgeGap: '來彌補缺口。',
    // Permissions
    noReadAccess: '您沒有查看庫存預測的權限。',
    noWriteAccess: '您沒有修改預測設定的權限。',
  },
};
