diff --git a/frontend/scripts/check-i18n-parity.mjs b/frontend/scripts/check-i18n-parity.mjs index ffc6cdb14..f7e7314a3 100644 --- a/frontend/scripts/check-i18n-parity.mjs +++ b/frontend/scripts/check-i18n-parity.mjs @@ -1,4 +1,3 @@ -#!/usr/bin/env node // Verifies parity across locale files (en / zh-CN / zh-TW): // 1. Leaf-key sets are identical // 2. Each leaf's {{placeholder}} set is identical @@ -99,76 +98,93 @@ function loadLocale(filePath) { return leaves; } -const locales = { - en: loadLocale(path.join(localesDir, 'en.ts')), - 'zh-CN': loadLocale(path.join(localesDir, 'zh-CN.ts')), - 'zh-TW': loadLocale(path.join(localesDir, 'zh-TW.ts')), -}; - -let failed = false; -const MAX_REPORT = 20; - -function reportList(label, items) { - if (items.length === 0) return; - failed = true; - console.error(`\n[${label}] (${items.length})`); - items.slice(0, MAX_REPORT).forEach((i) => console.error(` ${i}`)); - if (items.length > MAX_REPORT) console.error(` ... and ${items.length - MAX_REPORT} more`); -} - -// Check 1: key set equality -const enKeys = new Set(locales.en.keys()); -for (const [code, map] of Object.entries(locales)) { - if (code === 'en') continue; - const keys = new Set(map.keys()); - const missing = [...enKeys].filter((k) => !keys.has(k)).sort(); - const extra = [...keys].filter((k) => !enKeys.has(k)).sort(); - reportList(`${code}: missing keys vs en`, missing); - reportList(`${code}: extra keys vs en`, extra); -} - -// Check 2: placeholder set equality per leaf const placeholderRe = /\{\{[^{}]+\}\}/g; -for (const [code, map] of Object.entries(locales)) { - if (code === 'en') continue; - const mismatches = []; - for (const [key, enValue] of locales.en) { - const otherValue = map.get(key); - if (otherValue === undefined) continue; - const enPlaceholders = new Set((enValue.match(placeholderRe) ?? [])); - const otherPlaceholders = new Set((otherValue.match(placeholderRe) ?? [])); - const missingPh = [...enPlaceholders].filter((p) => !otherPlaceholders.has(p)); - const extraPh = [...otherPlaceholders].filter((p) => !enPlaceholders.has(p)); - if (missingPh.length || extraPh.length) { - mismatches.push(`${key}: en=${[...enPlaceholders].join(',') || '∅'} vs ${code}=${[...otherPlaceholders].join(',') || '∅'}`); + +// Pure comparison logic, exported so tests can verify each failure mode +// without going through file IO or the TypeScript parser. +// Input: locales = { code: Map } (must contain 'en') +// Output: { failed, reports: Array<{ label, items }> } +export function compareLocales(locales) { + if (!locales.en) throw new Error("compareLocales requires a locales.en entry"); + const reports = []; + const add = (label, items) => { + if (items.length) reports.push({ label, items }); + }; + + const enKeys = new Set(locales.en.keys()); + + // Check 1: key set equality + for (const [code, map] of Object.entries(locales)) { + if (code === 'en') continue; + const keys = new Set(map.keys()); + const missing = [...enKeys].filter((k) => !keys.has(k)).sort(); + const extra = [...keys].filter((k) => !enKeys.has(k)).sort(); + add(`${code}: missing keys vs en`, missing); + add(`${code}: extra keys vs en`, extra); + } + + // Check 2: placeholder set equality per leaf + for (const [code, map] of Object.entries(locales)) { + if (code === 'en') continue; + const mismatches = []; + for (const [key, enValue] of locales.en) { + const otherValue = map.get(key); + if (otherValue === undefined) continue; + const enPlaceholders = new Set((enValue.match(placeholderRe) ?? [])); + const otherPlaceholders = new Set((otherValue.match(placeholderRe) ?? [])); + const missingPh = [...enPlaceholders].filter((p) => !otherPlaceholders.has(p)); + const extraPh = [...otherPlaceholders].filter((p) => !enPlaceholders.has(p)); + if (missingPh.length || extraPh.length) { + mismatches.push(`${key}: en=${[...enPlaceholders].join(',') || '∅'} vs ${code}=${[...otherPlaceholders].join(',') || '∅'}`); + } } + add(`${code}: placeholder mismatch vs en`, mismatches); } - reportList(`${code}: placeholder mismatch vs en`, mismatches); -} -// Check 3: plural suffix presence + reverse _one guard -for (const [code, map] of Object.entries(locales)) { - if (code === 'en') continue; - const pluralIssues = []; - for (const key of enKeys) { - if (key.endsWith('_plural') && !map.has(key)) pluralIssues.push(`missing _plural key: ${key}`); - if (key.endsWith('_one') && !map.has(key)) pluralIssues.push(`missing _one key: ${key}`); - if (key.endsWith('_other') && !map.has(key)) pluralIssues.push(`missing _other key: ${key}`); - } - for (const key of map.keys()) { - if (key.endsWith('_one') && !enKeys.has(key)) { - pluralIssues.push(`unexpected _one not present in en: ${key}`); + // Check 3: plural suffix presence + reverse _one guard + for (const [code, map] of Object.entries(locales)) { + if (code === 'en') continue; + const pluralIssues = []; + for (const key of enKeys) { + if (key.endsWith('_plural') && !map.has(key)) pluralIssues.push(`missing _plural key: ${key}`); + if (key.endsWith('_one') && !map.has(key)) pluralIssues.push(`missing _one key: ${key}`); + if (key.endsWith('_other') && !map.has(key)) pluralIssues.push(`missing _other key: ${key}`); } + for (const key of map.keys()) { + if (key.endsWith('_one') && !enKeys.has(key)) { + pluralIssues.push(`unexpected _one not present in en: ${key}`); + } + } + add(`${code}: plural key mismatch`, pluralIssues); } - reportList(`${code}: plural key mismatch`, pluralIssues); + + return { failed: reports.length > 0, reports }; } -if (failed) { - console.error('\n❌ i18n parity check failed.'); - process.exit(1); -} +// Skip file IO / process.exit when imported as a library (e.g. from tests). +const isMainModule = import.meta.url === url.pathToFileURL(process.argv[1] ?? '').href; +if (isMainModule) { + const locales = { + en: loadLocale(path.join(localesDir, 'en.ts')), + 'zh-CN': loadLocale(path.join(localesDir, 'zh-CN.ts')), + 'zh-TW': loadLocale(path.join(localesDir, 'zh-TW.ts')), + }; -console.log(`All locales in parity (en / zh-CN / zh-TW):`); -for (const [code, map] of Object.entries(locales)) { - console.log(` ${code}: ${map.size} leaves`); + const MAX_REPORT = 20; + const { failed, reports } = compareLocales(locales); + for (const { label, items } of reports) { + console.error(`\n[${label}] (${items.length})`); + items.slice(0, MAX_REPORT).forEach((i) => console.error(` ${i}`)); + if (items.length > MAX_REPORT) console.error(` ... and ${items.length - MAX_REPORT} more`); + } + + if (failed) { + console.error('\n❌ i18n parity check failed.'); + process.exit(1); + } + + console.log(`All locales in parity (en / zh-CN / zh-TW):`); + for (const [code, map] of Object.entries(locales)) { + console.log(` ${code}: ${map.size} leaves`); + } } diff --git a/frontend/src/__tests__/i18n/parity-script.test.ts b/frontend/src/__tests__/i18n/parity-script.test.ts new file mode 100644 index 000000000..fc8cef8c1 --- /dev/null +++ b/frontend/src/__tests__/i18n/parity-script.test.ts @@ -0,0 +1,95 @@ +import { describe, it, expect } from 'vitest'; +// @ts-expect-error -- .mjs script with no type declarations; pure JS import is fine for tests +import { compareLocales } from '../../../scripts/check-i18n-parity.mjs'; + +type LocaleMap = Map; + +const toMap = (obj: Record): LocaleMap => new Map(Object.entries(obj)); + +const hasReport = ( + reports: Array<{ label: string; items: string[] }>, + labelSubstr: string, + itemSubstr?: string, +): boolean => + reports.some( + (r) => + r.label.includes(labelSubstr) && + (itemSubstr === undefined || r.items.some((i) => i.includes(itemSubstr))), + ); + +describe('compareLocales (parity-script self-test)', () => { + it('passes when all locales match en', () => { + const en = toMap({ 'a.b': 'hello {{name}}', 'count_one': 'one', 'count_other': 'many' }); + const result = compareLocales({ + en, + 'zh-CN': toMap({ 'a.b': '你好 {{name}}', 'count_one': '一', 'count_other': '多' }), + 'zh-TW': toMap({ 'a.b': '你好 {{name}}', 'count_one': '一', 'count_other': '多' }), + }); + expect(result.failed).toBe(false); + expect(result.reports).toEqual([]); + }); + + it('flags keys missing from a non-en locale', () => { + const result = compareLocales({ + en: toMap({ 'a.b': 'x', 'a.c': 'y' }), + 'zh-TW': toMap({ 'a.b': 'x' }), + }); + expect(result.failed).toBe(true); + expect(hasReport(result.reports, 'zh-TW: missing keys vs en', 'a.c')).toBe(true); + }); + + it('flags keys that exist in a non-en locale but not in en', () => { + const result = compareLocales({ + en: toMap({ 'a.b': 'x' }), + 'zh-CN': toMap({ 'a.b': 'x', 'a.stray': 'extra' }), + }); + expect(result.failed).toBe(true); + expect(hasReport(result.reports, 'zh-CN: extra keys vs en', 'a.stray')).toBe(true); + }); + + it('flags placeholder mismatch (missing placeholder in translation)', () => { + const result = compareLocales({ + en: toMap({ greeting: 'Hello {{name}}!' }), + 'zh-CN': toMap({ greeting: '你好!' }), // {{name}} dropped + }); + expect(result.failed).toBe(true); + expect(hasReport(result.reports, 'placeholder mismatch', 'greeting')).toBe(true); + }); + + it('flags placeholder mismatch (translation introduces unknown placeholder)', () => { + // This is the exact class of bug the zh-CN sync caught: + // fileManager.uploadFailed had a stray {{count}} copied from a sibling key. + const result = compareLocales({ + en: toMap({ uploadFailed: 'Upload failed' }), + 'zh-CN': toMap({ uploadFailed: '{{count}} 个失败' }), + }); + expect(result.failed).toBe(true); + expect(hasReport(result.reports, 'placeholder mismatch', 'uploadFailed')).toBe(true); + }); + + it('flags missing plural suffix keys in a non-en locale', () => { + const result = compareLocales({ + en: toMap({ item_one: 'item', item_other: 'items' }), + 'zh-TW': toMap({ item_one: '項目' }), // item_other missing + }); + expect(result.failed).toBe(true); + expect(hasReport(result.reports, 'plural key mismatch', 'missing _other')).toBe(true); + }); + + it('flags a non-en _one key that does not exist in en', () => { + const result = compareLocales({ + en: toMap({ item: 'item' }), + 'zh-CN': toMap({ item: '项', item_one: '一项' }), // en never plural-gated this + }); + expect(result.failed).toBe(true); + expect( + hasReport(result.reports, 'plural key mismatch', 'unexpected _one not present in en'), + ).toBe(true); + }); + + it('throws when the en locale is absent', () => { + expect(() => + compareLocales({ 'zh-CN': toMap({ a: 'x' }) } as Record), + ).toThrow(/locales\.en/); + }); +}); diff --git a/static/assets/index-DvmJH2YP.js b/static/assets/index-D8a3o-KR.js similarity index 86% rename from static/assets/index-DvmJH2YP.js rename to static/assets/index-D8a3o-KR.js index ee5d2ed85..cd4555123 100644 --- a/static/assets/index-DvmJH2YP.js +++ b/static/assets/index-D8a3o-KR.js @@ -24,16 +24,19 @@ Usa moltiplicatore 0.001 per Wh→kWh, 1000 per MWh→kWh.`,mqttStateHint:`Il pe Valore ON: la stringa esatta che significa "ON". Lascia vuoto per rilevamento auto (ON, true, 1).`,restControl:"Control",restOnUrl:"Turn ON URL",restOffUrl:"Turn OFF URL",restOnBody:"ON Request Body",restOffBody:"OFF Request Body",restMethod:"HTTP Method",restHeaders:"Custom Headers (JSON)",restStatusUrl:"Status URL",restStatusPath:"State JSON Path",restStatusOnValue:"ON Value",restPowerUrl:"URL potenza",restPowerPath:"Power JSON Path",restPowerMultiplier:"Moltiplicatore potenza",restEnergyUrl:"URL energia",restEnergyPath:"Energy JSON Path",restEnergyMultiplier:"Moltiplicatore energia",restUrlRequired:"At least one URL (ON or OFF) is required for REST plugs",restHeadersHint:'e.g. {"Authorization": "Bearer your-token"}',restBodyHint:'e.g. ON, {"state": "on"}',restStatusHint:"URL to poll for current state",restPathHint:"e.g. state or data.power.status",restPowerUrlHint:"URL separato per i dati di potenza (usa l'URL di stato se vuoto)",restEnergyUrlHint:"URL separato per i dati di energia (usa l'URL di stato se vuoto)",restEnergyHint:"Ogni valore può usare il proprio URL o ricadere sull'URL di stato. Usa i moltiplicatori per la conversione delle unità (es. 0.001 per convertire Wh in kWh).",testConnection:"Test Connection",connectionSuccess:"Connection successful",noSwitchesInSwitchbar:"Nessun interruttore nella barra",enableSwitchbarHint:'Abilita "Mostra nella barra interruttori" in Impostazioni > Smart Plugs'},notifications:{providerTypes:{callmebot:"CallMeBot/WhatsApp",ntfy:"ntfy",pushover:"Pushover",telegram:"Telegram",email:"Email",discord:"Discord",webhook:"Webhook",homeassistant:"Home Assistant"},providerDescriptions:{email:"Notifiche email tramite SMTP",telegram:"Notifiche tramite bot Telegram",discord:"Invia a un canale Discord tramite webhook",ntfy:"Notifiche push gratuite e self-hostabili",pushover:"Notifiche push semplici e affidabili",callmebot:"Notifiche WhatsApp gratuite tramite CallMeBot",webhook:"POST HTTP generico verso qualsiasi URL",homeassistant:"Notifiche persistenti nella dashboard di Home Assistant"},lastSuccess:"Ultimo: {{date}}",error:"Errore",printer:"Stampante:",allPrinters:"Tutte le stampanti",sendTestNotification:"Invia notifica di prova",eventSettings:"Impostazioni eventi",enabled:"Abilitato",sendFromProvider:"Invia notifiche da questo provider",printEvents:"Eventi di stampa",printerStatus:"Stato stampante",amsAlarms:"Allarmi AMS",amsHtAlarms:"Allarmi AMS-HT",printQueue:"Coda di stampa",start:"Avvio",plateCheck:"Controllo piatto",complete:"Completato",failed:"Fallito",stopped:"Interrotto",progress:"Avanzamento",offline:"Offline",lowFilament:"Filamento scarso",maintenance:"Manutenzione",amsHumidity:"Umidità AMS",amsTemp:"Temp AMS",amsHtHumidity:"Umidità AMS-HT",amsHtTemp:"Temp AMS-HT",bedCooled:"Piatto raffreddato",firstLayer:"Primo strato",quiet:"Silenzioso",digest:"Riepilogo {{time}}",printStarted:"Stampa avviata",plateNotEmpty:"Piatto non vuoto",plateNotEmptyDescription:"Oggetti rilevati prima della stampa",printCompleted:"Stampa completata",bedCooledLabel:"Piatto raffreddato",bedCooledDescription:"Piatto raffreddato sotto la soglia dopo la stampa",firstLayerCompleteLabel:"Primo strato completato",firstLayerCompleteDescription:"Notifica con foto al termine del primo strato",missingSpoolAssignmentLabel:"Assegnazione bobina mancante",missingSpoolAssignmentDescription:"Notifica quando una stampa parte e i vassoi richiesti non hanno una bobina assegnata",printFailed:"Stampa fallita",printStopped:"Stampa interrotta",progressMilestones:"Traguardi di avanzamento",progressMilestonesDescription:"Notifica al 25%, 50%, 75%",printerOffline:"Stampante offline",printerError:"Errore stampante",lowFilamentLabel:"Filamento scarso",maintenanceDue:"Manutenzione necessaria",maintenanceDueDescription:"Notifica quando è necessaria la manutenzione",amsHumidityHigh:"Umidità AMS elevata",amsHumidityHighDescription:"L'umidità dell'AMS standard supera la soglia",amsTemperatureHigh:"Temperatura AMS elevata",amsTemperatureHighDescription:"La temperatura dell'AMS standard supera la soglia",amsHtHumidityHigh:"Umidità AMS-HT elevata",amsHtHumidityHighDescription:"L'umidità dell'AMS-HT supera la soglia",amsHtTemperatureHigh:"Temperatura AMS-HT elevata",amsHtTemperatureHighDescription:"La temperatura dell'AMS-HT supera la soglia",jobAdded:"Lavoro aggiunto",jobAddedDescription:"Lavoro aggiunto alla coda",jobAssigned:"Lavoro assegnato",jobAssignedDescription:"Lavoro basato su modello assegnato alla stampante",jobStarted:"Lavoro avviato",jobStartedDescription:"Lavoro in coda avviato per la stampa",jobWaiting:"Lavoro in attesa",jobWaitingDescription:"Lavoro in attesa di filamento o stampante",jobSkipped:"Lavoro saltato",jobSkippedDescription:"Lavoro saltato (precedente fallito)",jobFailed:"Lavoro fallito",jobFailedDescription:"Avvio del lavoro fallito",queueComplete:"Coda completata",queueCompleteDescription:"Tutti i lavori in coda completati",quietHours:"Ore silenziose",noNotificationsDuring:"Nessuna notifica durante queste ore",editProviderToChangeQuietHours:"Modifica il provider per cambiare le ore silenziose",dailyDigest:"Riepilogo giornaliero",batchNotifications:"Raggruppa le notifiche in un unico riepilogo giornaliero",sendAt:"Invia alle {{time}}",editProviderToChangeDigestTime:"Modifica il provider per cambiare l'orario del riepilogo",edit:"Modifica",deleteProvider:"Elimina provider di notifica",deleteConfirm:'Sei sicuro di voler eliminare "{{name}}"? Questa azione non può essere annullata.',delete:"Elimina",addTitle:"Aggiungi provider di notifica",editTitle:"Modifica provider di notifica",nameLabel:"Nome *",namePlaceholder:"Le mie notifiche",providerTypeLabel:"Tipo di provider *",configuration:"Configurazione",testConfiguration:"Testa configurazione",printerFilter:"Filtro stampante",onlyFromPrinter:"Invia notifiche solo per eventi da questa stampante",quietHoursDnd:"Ore silenziose (Non disturbare)",quietStart:"Inizio",quietEnd:"Fine",dailyDigestLabel:"Riepilogo giornaliero",sendDigestAt:"Invia riepilogo alle",digestCollected:"Gli eventi verranno raccolti e inviati come riepilogo unico a quest'ora",notificationEvents:"Eventi di notifica",progressPercent:"(25%, 50%, 75%)",bedCooledAfterPrint:"(dopo il completamento della stampa)",cancel:"Annulla",save:"Salva",add:"Aggiungi",nameRequired:"Il nome è obbligatorio",fieldRequired:"{{field}} è obbligatorio",phoneNumber:"Numero di telefono",apiKey:"Chiave API",serverUrl:"URL del server",topic:"Argomento",authToken:"Token di autenticazione",userKey:"Chiave utente",appToken:"Token applicazione",priority:"Priorità",botToken:"Token del bot",chatId:"ID chat",smtpServer:"Server SMTP",smtpPort:"Porta SMTP",security:"Sicurezza",authentication:"Autenticazione",username:"Nome utente",password:"Password",fromEmail:"Email mittente",toEmail:"Email destinatario",webhookUrl:"URL webhook",payloadFormat:"Formato payload",authorization:"Autorizzazione",titleFieldName:"Nome campo titolo",messageFieldName:"Nome campo messaggio",editTemplate:"Modifica modello: {{name}}",titleLabel:"Titolo",bodyLabel:"Corpo",titlePlaceholder:"Titolo della notifica...",bodyPlaceholder:"Corpo della notifica...",availableVariables:"Variabili disponibili",clickToInsert:"Clicca per inserire alla posizione del cursore nel corpo",livePreview:"Anteprima live",hide:"Nascondi",show:"Mostra",loadingPreview:"Caricamento anteprima...",enterTemplateContent:"Inserisci il contenuto del modello per vedere l'anteprima",titlePreview:"Titolo:",bodyPreview:"Corpo:",resetToDefault:"Ripristina predefinito",titleRequired:"Il titolo è obbligatorio",bodyRequired:"Il corpo è obbligatorio",notificationLog:"Registro notifiche",showFailedOnly:"Solo fallite",last24Hours:"Ultime 24 ore",last7Days:"Ultimi 7 giorni",last30Days:"Ultimi 30 giorni",last90Days:"Ultimi 90 giorni",justNow:"Proprio ora",noFailedNotifications:"Nessuna notifica fallita",noNotificationsLogged:"Nessuna notifica registrata",unknownProvider:"Provider sconosciuto",logTitle:"Titolo",logMessage:"Messaggio",logError:"Errore",logProvider:"Provider: {{type}}",logTime:"Ora: {{time}}",refresh:"Aggiorna",clearOld:"Cancella vecchie",statsSummary:"Ultimi {{days}} giorni:",statsNotifications:"notifiche",statsSent:"{{count}} inviate",statsFailed:"{{count}} fallite",eventTypes:{print_start:"Stampa avviata",print_complete:"Stampa completata",print_failed:"Stampa fallita",print_stopped:"Stampa interrotta",print_progress:"Avanzamento",printer_offline:"Stampante offline",printer_error:"Errore stampante",filament_low:"Filamento scarso",maintenance_due:"Manutenzione necessaria",test:"Prova"},userEmail:{title:"Notifiche",emailNotifications:"Notifiche via e-mail",emailNotificationsDesc:"Ricevi notifiche via e-mail per i tuoi lavori di stampa. Le e-mail vengono inviate tramite le impostazioni SMTP configurate nell'autenticazione avanzata.",sendingTo:"Le notifiche verranno inviate a",noEmailWarning:"Il tuo account non ha un indirizzo e-mail. Contatta un amministratore per aggiungerne uno.",printJobNotifications:"Notifiche lavori di stampa",printJobNotificationsDesc:"Scegli quali eventi attivano le notifiche e-mail per i lavori di stampa che invii.",printJobStarts:"Inizio lavoro di stampa",printJobStartsDesc:"Ricevi una notifica quando il tuo lavoro di stampa inizia.",printJobFinishes:"Fine lavoro di stampa",printJobFinishesDesc:"Ricevi una notifica quando il tuo lavoro di stampa si completa correttamente.",printErrors:"Errori di stampa",printErrorsDesc:"Ricevi una notifica quando il tuo lavoro di stampa fallisce o incontra un errore.",printJobStops:"Lavoro di stampa interrotto",printJobStopsDesc:"Ricevi una notifica quando il tuo lavoro di stampa viene annullato o interrotto.",saveSuccess:"Preferenze di notifica salvate.",saveError:"Impossibile salvare le preferenze di notifica."}},richTextEditor:{bold:"Grassetto",italic:"Corsivo",underline:"Sottolineato",bulletList:"Elenco puntato",numberedList:"Elenco numerato",alignLeft:"Allinea a sinistra",alignCenter:"Allinea al centro",alignRight:"Allinea a destra",addLink:"Aggiungi link",removeLink:"Rimuovi link"},externalLinks:{noLinksConfigured:"Nessun link esterno configurato",deleteLink:"Elimina link",removeCustomIcon:"Rimuovi icona personalizzata",openInNewTab:"Apri in nuova scheda",placeholders:{linkName:"Il mio link"}},keyboardShortcuts:{title:"Scorciatoie da tastiera",navigation:"Navigazione",archivesSection:"Archivi",kProfilesSection:"Profili K",generalSection:"Generale",shortcuts:{goToPrinters:"Vai a Stampanti",goToArchives:"Vai ad Archivi",goToQueue:"Vai a Coda",goToStats:"Vai a Statistiche",goToProfiles:"Vai a Profili cloud",goToSettings:"Vai a Impostazioni",focusSearch:"Vai alla ricerca",openUploadModal:"Apri finestra di caricamento",clearSelection:"Cancella selezione / deseleziona input",contextMenu:"Menu contestuale sulle schede",refreshProfiles:"Aggiorna profili",newProfile:"Nuovo profilo",exitSelectionMode:"Esci dalla modalità selezione",showHelp:"Mostra questa guida"},footer:"Premi Esc o clicca fuori per chiudere"},notificationLog:{title:"Registro notifiche",events:{printStarted:"Stampa avviata",printComplete:"Stampa completata",printFailed:"Stampa fallita",printStopped:"Stampa interrotta",progress:"Avanzamento",printerOffline:"Stampante offline",printerError:"Errore stampante",lowFilament:"Filamento in esaurimento",maintenanceDue:"Manutenzione in scadenza",test:"Test"},timeAgo:{justNow:"Adesso",minutesAgo:"{{minutes}} min fa",hoursAgo:"{{hours}} ore fa"}},restoreBackup:{title:"Ripristina backup",restoring:"Ripristino...",restoreComplete:"Ripristino completato",restoreFailed:"Ripristino fallito",importSettings:"Importa impostazioni da un file di backup",pleaseWait:"Attendere il ripristino dei dati",clickToSelect:"Clicca per selezionare il file di backup (.json o .zip)",howDuplicateHandling:"Come funziona la gestione dei duplicati:",categories:{printers:"Stampanti",smartPlugs:"Prese smart",notificationProviders:"Provider di notifica",filaments:"Filamenti",archives:"Archivi",pendingUploads:"Caricamenti in sospeso",settingsTemplates:"Impostazioni e modelli"},matchingInfo:{printers:"abbinati per numero di serie",smartPlugs:"abbinati per indirizzo IP",notificationProviders:"abbinati per nome",filaments:"abbinati per nome + tipo + marca",archives:"abbinati per hash del contenuto",pendingUploads:"abbinati per nome file",settingsTemplates:"sempre sovrascritti"},replaceExisting:"Sostituisci dati esistenti",keepExisting:"Mantieni dati esistenti",replaceDescription:"Sovrascrivi gli elementi già esistenti con i dati del backup",keepDescription:"Ripristina solo gli elementi che non esistono già",caution:"Attenzione:",cautionText:"La sovrascrittura sostituirà le configurazioni attuali con i dati del backup. I codici di accesso delle stampanti non vengono mai sovrascritti per sicurezza.",itemsRestored:"Elementi ripristinati",itemsSkipped:"Elementi saltati",restored:"Ripristinati",skipped:"Saltati (già esistenti)",filesLabel:"File (3MF, miniature, ecc.)",newApiKeysGenerated:"Nuove chiavi API generate",newApiKeysWarning:"Queste chiavi vengono mostrate una sola volta. Copiale adesso!",processingBackup:"Elaborazione file di backup...",noDataFound:"Nessun dato trovato da ripristinare nel file di backup.",failedToRestore:"Impossibile ripristinare il backup. Verificare il formato del file."},backupExport:{title:"Esporta backup",selectData:"Seleziona i dati da includere",selectAll:"Seleziona tutto",selectNone:"Deseleziona tutto",categoryDescriptions:{settings:"Lingua, tema, preferenze di aggiornamento",notifications:"ntfy, Pushover, Discord, ecc.",templates:"Modelli di messaggi personalizzati",smartPlugs:"Configurazioni prese Tasmota",externalLinks:"Link della barra laterale a servizi esterni",printers:"Info stampanti (codici di accesso esclusi)",plateDetection:"Immagini di riferimento piatto vuoto",filaments:"Tipi di filamento e costi",maintenance:"Programmi di manutenzione personalizzati",archives:"Tutti i dati di stampa + file (3MF, miniature, foto)",projects:"Progetti, elementi BOM e allegati",pendingUploads:"Caricamenti della stampante virtuale in attesa di revisione",apiKeys:"Chiavi API webhook (nuove chiavi generate all'importazione)"},requiresPrinters:"Richiede la selezione di Stampanti",zipFileWarning:"Verrà creato un file ZIP.",zipFileDescription:"Include tutti i file 3MF, miniature, timelapse e foto. Potrebbe richiedere tempo e produrre un file di grandi dimensioni.",includeAccessCodes:"Includi codici di accesso",includeAccessCodesDescription:"Per il trasferimento su un'altra macchina",includeAccessCodesWarning:"I codici di accesso saranno inclusi in testo semplice. Mantieni sicuro questo file di backup!",categoriesSelected:"{{selectedCount}} categorie selezionate"},pendingUploads:{placeholders:{notes:"Aggiungi note su questa stampa..."},discardUpload:"Scarta caricamento",archiveAllUploads:"Archivia tutti i caricamenti",discardAllUploads:"Scarta tutti i caricamenti",archive:"Archivia",timeAgo:{justNow:"Adesso",minutesAgo:"{{minutes}} min fa",hoursAgo:"{{hours}} ore fa",daysAgo:"{{days}} giorni fa"}},apiBrowser:{placeholders:{requestBody:"Corpo della richiesta JSON...",searchEndpoints:"Cerca endpoint..."}},configureAmsSlot:{title:"Configura Slot AMS",slotConfigured:"Slot configurato!",configuringSlot:"Configurazione slot:",slotLabel:"{{ams}} Slot {{slot}}",searchPresets:"Cerca preset...",colorPlaceholder:"Nome colore o hex (es. marrone, FF8800)",clearCustomColor:"Cancella colore personalizzato",noCloudPresets:"Nessun preset cloud. Accedi a Bambu Cloud per sincronizzare.",noPresetsAvailable:"Nessun preset disponibile. Accedi a Bambu Cloud o importa profili locali.",noMatchingPresets:"Nessun preset corrispondente trovato.",custom:"Personalizzato",builtin:"Integrato",settingsSentToPrinter:"Impostazioni inviate alla stampante",filamentProfile:"Profilo filamento",kProfileLabel:"Profilo K (Pressure Advance)",filteringFor:"Filtrando per: {{material}}",noKProfile:"Nessun profilo K (usa predefinito 0.020)",noMatchingKProfiles:"Nessun profilo K corrispondente. Verrà usato K=0.020 predefinito.",selectFilamentFirst:"Seleziona prima un profilo filamento",kFromCalibration:"K={{value}} dalla calibrazione stampante",customColorLabel:"Colore personalizzato (opzionale)",presetColors:"Colori {{name}}:",showLessColors:"Mostra meno colori",showMoreColors:"Mostra più colori",clear:"Cancella",hexLabel:"Hex: #{{hex}}",resetting:"Ripristino...",resetSlot:"Ripristina slot",cancel:"Annulla",configuring:"Configurazione...",configureSlot:"Configura slot"},githubBackup:{title:"Backup GitHub",history:"Cronologia",downloadBackup:"Scarica backup",restoreBackup:"Ripristina backup",noBackupsYet:"Nessun backup ancora"},emailSettings:{placeholders:{fromName:"BamBuddy"}},tagManagement:{searchTags:"Cerca tag...",renameTag:"Rinomina tag",deleteTag:"Elimina tag"},notificationTemplates:{placeholders:{title:"Titolo notifica...",body:"Corpo notifica..."}},batchTag:{placeholders:{newTag:"Inserisci nuovo tag..."}},photoGallery:{deletePhoto:"Elimina foto"},filamentHoverCard:{copySpoolUuid:"Copia UUID bobina"},kProfilesView:{hasNote:"Ha una nota",copyProfile:"Copia profilo"},layout:{openMenu:"Apri menu",noPermissionSystemInfo:"Non hai il permesso di visualizzare le informazioni di sistema"},dashboard:{dragToReorder:"Trascina per riordinare",hideWidget:"Nascondi widget"},notificationProviderCard:{deleteNotificationProvider:"Elimina provider di notifica"},fileManagerModal:{closeFileManager:"Chiudi gestore file",sortFiles:"Ordina file",goToParentFolder:"Vai alla cartella superiore",threeView:"Vista 3D"},embeddedCameraViewer:{refreshStream:"Aggiorna stream",close:"Chiudi",zoomOut:"Rimpicciolisci",resetZoom:"Reimposta zoom",zoomIn:"Ingrandisci",dragToResize:"Trascina per ridimensionare"},timelapseViewer:{skipBack5s:"Indietro 5s",skipForward5s:"Avanti 5s"},notificationProviders:{descriptions:{email:"Notifiche email via SMTP",telegram:"Notifiche tramite bot Telegram",discord:"Invia a canale Discord tramite webhook",ntfy:"Notifiche push gratuite e self-hostabili",pushover:"Notifiche push semplici e affidabili",callmebot:"Notifiche WhatsApp gratuite tramite CallMeBot",webhook:"POST HTTP generico a qualsiasi URL"}},logViewer:{searchPlaceholder:"Cerca messaggio o nome logger...",noLogEntries:"Nessuna voce di log trovata"},switchbarPopover:{noSwitchesInSwitchbar:"Nessun interruttore nella barra"},projectPageModal:{placeholders:{title:"Titolo",designer:"Designer",license:"Licenza",description:"Inserisci descrizione...",profileTitle:"Titolo profilo",profileDescription:"Descrizione profilo..."}},spoolmanSettings:{},time:{unknown:"-",waiting:"In attesa",justNow:"Proprio ora",now:"Ora",minsAgo:"{{count}}m fa",inMins:"tra {{count}}m",hoursAgo:"{{count}}h fa",inHours:"tra {{count}}h",daysAgo:"{{count}}g fa",inDays:"tra {{count}}g"},spoolbuddy:{nav:{dashboard:"Dashboard",ams:"AMS",inventory:"Inventario",writeTag:"Scrivi",settings:"Impostazioni"},status:{nfcReady:"NFC pronto",nfcOff:"NFC spento",offline:"Offline",online:"Online",noPrinters:"Nessuna stampante",deviceOffline:"Dispositivo offline",waitingConnection:"In attesa della connessione...",systemReady:"Sistema pronto",status:"Stato"},dashboard:{readyToScan:"Pronto per la scansione",idleMessage:"Posiziona una bobina sulla bilancia per identificarla",nfcHint:"Il tag NFC verrà letto automaticamente",device:"Dispositivo",syncWeight:"Sincronizza peso",weightSynced:"Sincronizzato!",unknownTag:"Tag sconosciuto",newTag:"Nuovo tag rilevato",onScale:"sulla bilancia",linkSpool:"Collega a bobina",linkTagTitle:"Collega tag a bobina",linkTag:"Collega tag",selectSpool:"Seleziona una bobina da collegare a questo tag:",noUntagged:"Nessuna bobina senza tag trovata",tagDetected:"Tag rilevato",noTag:"Nessun tag",tagId:"Tag",grossWeight:"Peso lordo",spoolSize:"Dimensione bobina",close:"Chiudi",currentSpool:"Bobina attuale"},modal:{spoolDetected:"Bobina rilevata",assignToAms:"Assegna all'AMS",syncWeight:"Sincronizza peso",weightSynced:"Sincronizzato!",syncing:"Sincronizzazione...",newTagDetected:"Nuovo tag rilevato",addToInventory:"Aggiungi all'inventario",assignToAmsTitle:"Assegna all'AMS",selectSlot:"Seleziona uno slot",assign:"Assegna",assigning:"Assegnazione...",assignSuccess:"Assegnato!",assignError:"Impossibile assegnare la bobina. Riprovare.",noPrinterSelected:"Seleziona una stampante...",noAmsDetected:"Nessun AMS rilevato su questa stampante",slot:"Slot"},weight:{noReading:"Nessuna lettura",stable:"Stabile",measuring:"Misurazione...",tare:"Tara",calibrate:"Calibra"},spool:{remaining:"Rimanente",material:"Materiale",brand:"Marca",color:"Colore",coreWeight:"Nucleo",labelWeight:"Etichetta",scaleWeight:"Bilancia",netWeight:"Netto",lastUsed:"Ultimo utilizzo"},ams:{noData:"Nessun AMS rilevato",connectAms:"Collega un AMS per vedere gli slot",noPrinter:"Nessuna stampante selezionata",selectPrinter:"Seleziona una stampante dalla barra superiore",printerDisconnected:"Stampante disconnessa",humidity:"Umidità",level:"Livello",active:"Attivo",slot:"Slot",empty:"Vuoto"},inventory:{search:"Cerca bobine...",empty:"Nessuna bobina nell'inventario",noResults:"Nessuna bobina corrispondente",spools:"bobine",addSpool:"Aggiungi bobina"},settings:{tabDevice:"Dispositivo",tabDisplay:"Display",tabScale:"Bilancia",tabUpdates:"Aggiornamenti",nfcReader:"Lettore NFC",type:"Tipo",connection:"Connessione",notConnected:"N/A",deviceInfo:"Info dispositivo",hostname:"Host",uptime:"Tempo di attività",brightness:"Luminosità",saved:"Salvato",noBacklight:"Nessuna retroilluminazione DSI rilevata. Il controllo luminosità richiede un display DSI.",screenBlank:"Timeout spegnimento schermo",screenBlankDesc:"Lo schermo si spegne dopo inattività. Tocca per riattivare.",displayNote:"La luminosità viene applicata come filtro software.",scaleCalibration:"Calibrazione bilancia",currentWeight:"Peso attuale",tareOffset:"Tara",calFactor:"Fattore",knownWeight:"Peso noto",calStep1:"Rimuovere tutto dalla bilancia e premere Imposta zero.",calStep2:"Posizionare il peso noto sulla bilancia.",setZero:"Imposta zero",calibrateNow:"Calibra",calibrated:"Calibrato",tareSet:"Comando tara inviato. In attesa del dispositivo...",tareFailed:"Invio comando tara fallito",zeroSet:"Punto zero impostato. Posizionare il peso noto sulla bilancia.",calibrationDone:"Calibrazione completata!",calibrationFailed:"Calibrazione fallita",lastCalibrated:"Ultima calibrazione",stable:"Stabile",settling:"Stabilizzazione...",firmware:"Firmware",scale:"Bilancia",noDevice:"Nessun dispositivo SpoolBuddy trovato",daemonVersion:"Versione daemon",currentVersion:"Attuale",versionPending:"In attesa del daemon...",checking:"Verifica...",checkUpdates:"Verifica aggiornamenti",updateAvailable:"Aggiornamento disponibile",updateInstructions:"Aggiorna via SSH: esegui lo script di installazione SpoolBuddy.",upToDate:"Aggiornato",includeBeta:"Includi versioni beta"},writeTag:{tabExisting:"Bobina esistente",tabNew:"Nuova bobina",tabReplace:"Sostituisci tag",searchPlaceholder:"Cerca per materiale, colore, marca...",noUntaggedSpools:"Nessuna bobina senza tag",noTaggedSpools:"Nessuna bobina con tag",selectSpool:"Seleziona una bobina, poi posiziona un NTAG sul lettore",placeTag:"Posiziona un NTAG sul lettore",tagReady:"Tag rilevato — pronto per la scrittura",writeTag:"Scrivi tag",replaceTag:"Sostituisci tag",writing:"Scrittura tag...",waiting:"In attesa di SpoolBuddy...",writeSuccess:"Tag scritto con successo!",writeFailed:"Scrittura fallita",queueFailed:"Impossibile accodare il comando di scrittura",tryAgain:"Riprova",cancel:"Annulla",replaceWarning:"Il vecchio tag verrà scollegato. Il nuovo tag lo sostituirà.",deviceOffline:"SpoolBuddy è offline",material:"Materiale",colorName:"Nome colore",color:"Colore",brand:"Marca",weight:"Peso (g)",createSpool:"Crea bobina",creating:"Creazione...",spoolCreated:"Bobina creata! Pronto per la scrittura.",createFailed:"Impossibile creare la bobina"},quickMenu:{printerPower:"Alimentazione stampante",systemControls:"Sistema",restartDaemon:"Riavvia daemon",restartBrowser:"Riavvia browser",reboot:"Riavvia",shutdown:"Spegni",swipeToClose:"Scorri verso il basso per chiudere",confirmTitle:"Conferma",confirmShutdown:"Sei sicuro di voler spegnere lo SpoolBuddy? Avrai bisogno di accesso fisico per riaccenderlo.",confirmReboot:"Sei sicuro di voler riavviare lo SpoolBuddy?",confirmRestartDaemon:"Riavviare il daemon SpoolBuddy? NFC e bilancia saranno temporaneamente non disponibili.",confirmRestartBrowser:"Riavviare il browser kiosk? Lo schermo diventerà brevemente nero.",confirm:"Conferma",confirmPlugOn:"Accendere {{name}}?",confirmPlugOff:"Spegnere {{name}}?",turnOn:"Accendi",turnOff:"Spegni"}},bugReport:{title:"Segnala un bug",description:"Descrizione",descriptionPlaceholder:"Cosa è andato storto? Descrivi il problema...",email:"Email (opzionale)",emailPlaceholder:"tua@email.it",emailPrivacy:"Se fornita, la tua email sarà inclusa in una sezione compressa dell'issue GitHub per permettere al manutentore di contattarti.",screenshot:"Screenshot",uploadOrPaste:"Carica, incolla o trascina un'immagine",dataCollectedSummary:"Quali dati sono inclusi nel report?",dataIncluded:"Inclusi:",dataIncludedList:"Versione app, OS, architettura, versione Python, statistiche database (solo conteggi), modelli stampante, numero ugelli, versioni firmware, stato connessione, stato integrazioni (Spoolman, MQTT, HA), impostazioni non sensibili, conteggio interfacce di rete, dettagli Docker, versioni dipendenze.",dataNeverIncluded:"Mai inclusi:",dataNeverIncludedList:"Nomi stampanti, numeri di serie, codici di accesso, password, indirizzi IP, indirizzi email, chiavi API, token, URL webhook, nomi host o nomi utente.",submit:"Invia",startLogging:"Avvia registrazione debug",stepEnableLogging:"Registrazione debug attivata",stepReproduce:"Riproduci il problema ora",stepStopLogging:"Ferma & invia rapporto",stopAndSubmit:"Ferma & Invia",maxDuration:"Arresto automatico dopo {{minutes}} min",stoppingLogs:"Raccolta log & invio...",submitting:"Invio segnalazione bug...",submitSuccess:"Segnalazione bug inviata con successo!",submitFailed:"Impossibile inviare la segnalazione bug",thankYou:"Grazie!",submitted:"La tua segnalazione bug è stata inviata.",viewIssue:"Vedi issue",unexpectedError:"Si è verificato un errore imprevisto"},failureDetection:{title:"Rilevamento guasti con IA",description:"Monitora le stampe tramite un'API ML Obico auto-ospitata e agisce automaticamente sui guasti rilevati.",mlUrl:"URL API ML Obico",mlUrlHint:"URL base del tuo container Obico ml_api auto-ospitato (es. http://192.168.1.10:3333).",test:"Prova",testSuccess:"API ML raggiungibile e funzionante.",testFailed:"Impossibile raggiungere l'API ML.",sensitivity:"Sensibilità",sensitivityLow:"Bassa (meno falsi positivi)",sensitivityMedium:"Media (bilanciata)",sensitivityHigh:"Alta (rilevamento precoce, più falsi positivi)",sensitivityHint:"Regola le soglie di confidenza che attivano avvisi e guasti.",action:"Azione al guasto rilevato",actionNotify:"Solo notifica",actionPause:"Metti in pausa",actionPauseOff:"Pausa e stacca corrente",pollInterval:"Intervallo di controllo (secondi)",pollIntervalHint:"Frequenza di controllo di ogni stampante durante la stampa. Minimo 5s, massimo 120s.",externalUrlMissing:"External URL is not set.",externalUrlHint:"The ML API fetches the camera snapshot by URL. Set the External URL in General settings so the ML API container can reach Bambuddy.",perPrinterTitle:"Stampanti monitorate",perPrinterHint:"Scegli quali stampanti il servizio di rilevamento deve monitorare.",monitorAll:"Monitora tutte le stampanti connesse",statusTitle:"Stato",serviceRunning:"Servizio in esecuzione",thresholds:"Soglie bassa / alta",activePrinters:"Stampe attive",noActivePrints:"Nessuna stampa in corso.",historyTitle:"Rilevamenti recenti",noHistory:"Nessun rilevamento finora."}},Kue={nav:{printers:"Impressoras",archives:"Arquivos",queue:"Fila",stats:"Estatísticas",profiles:"Perfis",maintenance:"Manutenção",projects:"Projetos",inventory:"Inventário",files:"Gerenciador de Arquivos",notifications:"Notificações",settings:"Configurações",system:"Sistema",collapseSidebar:"Recolher barra lateral",expandSidebar:"Expandir barra lateral",update:"Atualizar",updateAvailable:"Atualização disponível: v{{version}}",updateAvailableBanner:"Versão {{version}} está disponível!",viewUpdate:"Ver atualização",viewOnGithub:"Ver no GitHub",keyboardShortcuts:"Atalhos de teclado (?)",switchToLight:"Mudar para modo claro",switchToDark:"Mudar para modo escuro",smartSwitches:"Interruptores inteligentes",logout:"Sair"},common:{save:"Salvar",saving:"Salvando...",cancel:"Cancelar",delete:"Excluir",edit:"Editar",add:"Adicionar",close:"Fechar",confirm:"Confirmar",loading:"Carregando...",error:"Erro",success:"Sucesso",warning:"Aviso",enabled:"Ativado",disabled:"Desativado",yes:"Sim",no:"Não",on:"Ligado",off:"Desligado",all:"Todos",none:"Nenhum",search:"Pesquisar",filter:"Filtrar",sort:"Ordenar",refresh:"Atualizar",download:"Baixar",upload:"Enviar",uploading:"Enviando...",uploadFailed:"Falha no envio",actions:"Ações",status:"Status",name:"Nome",description:"Descrição",date:"Data",time:"Hora",hours:"Horas",minutes:"Minutos",seconds:"Segundos",days:"Dias",enable:"Ativar",disable:"Desativar",permissions:"Permissões",noPrinters:"Nenhuma impressora configurada",noData:"Nenhum dado disponível",linkNotFound:"Link não encontrado",required:"Obrigatório",optional:"Opcional",dismiss:"Dispensar",apply:"Aplicar",reset:"Redefinir",export:"Exportar",import:"Importar",clear:"Limpar",selectAll:"Selecionar tudo",deselectAll:"Desmarcar tudo",noChange:"— Sem alterações —",unchanged:"Inalterado",unassigned:"Não atribuído",unknown:"Desconhecido",unknownError:"Erro desconhecido",today:"Hoje",tomorrow:"Amanhã",asap:"O mais rápido possível",overdue:"Atrasado",now:"Agora",collapse:"Recolher",expand:"Expandir",viewArchive:"Ver arquivo",viewInFileManager:"Ver no Gerenciador de Arquivos",addedBy:"Adicionado por {{username}}",prints:"impressões",more:"+{{count}} mais",ascending:"Crescente",descending:"Decrescente",back:"Voltar",copy:"Copiar",copied:"Copiado!",printer:"Impressora",remove:"Remover",type:"Tipo",print:"Imprimir",rename:"Renomear",move:"Mover",create:"Criar",duplicate:"Duplicar",left:"Esquerda",right:"Direita"},printers:{title:"Impressoras",addPrinter:"Adicionar Impressora",editPrinter:"Editar Impressora",deletePrinter:"Excluir Impressora",printerName:"Nome da Impressora",serialNumber:"Número de Série",ipAddress:"Endereço IP / Nome do Host",accessCode:"Código de Acesso",model:"Modelo",nozzleCount:"Número de Bicos",autoArchive:"Arquivamento Automático",status:{available:"Disponível",idle:"Ocioso",printing:"Imprimindo",paused:"Pausado",offline:"Offline",problem:"Problema",error:"Erro",finished:"Concluído",unknown:"Desconhecido"},temperatures:{nozzle:"Bico",bed:"Cama",chamber:"Câmara"},progress:"{{percent}}% concluído",timeRemaining:"{{time}} restante",deleteConfirm:'Tem certeza de que deseja excluir "{{name}}"?',maintenanceOk:"Manutenção OK",maintenanceWarning:"{{count}} aviso",maintenanceWarning_plural:"{{count}} avisos",maintenanceDue:"{{count}} devido",maintenanceDue_plural:"{{count}} devido",sort:{name:"Nome",status:"Status",model:"Modelo",location:"Localização",ascending:"Ordem crescente",descending:"Ordem decrescente"},cardSize:{small:"Cartões pequenos",medium:"Cartões médios",large:"Cartões grandes",extraLarge:"Cartões extra grandes"},hideOffline:"Ocultar offline",nextAvailable:"Próximo disponível",powerOn:"Ligar",offlinePrintersWithPlugs:"Impressoras offline com tomadas inteligentes",noPrintersConfigured:"Nenhuma impressora configurada ainda",search:"Pesquisar impressoras...",noSearchResults:"Nenhuma impressora corresponde à sua pesquisa ou filtros",filter:{allStatuses:"Todos os status",allLocations:"Todos os locais"},readyToPrint:"Pronto para imprimir",external:"Externo",extL:"Ext-L",extR:"Ext-R",deleteArchives:"Excluir arquivos de impressão",noLabel:"Sem etiqueta",printPreview:"Pré-visualização de impressão",width:"Largura",height:"Altura",noObjectsFound:"Nenhum objeto encontrado",objectsLoadedOnPrintStart:"Objetos são carregados quando uma impressão começa",willBeSkipped:"Será ignorado",name:"Nome",serialCannotBeChanged:"Número de série não pode ser alterado",locationHelp:"Usado para agrupar impressoras e filtrar trabalhos na fila",wifiSignal:{veryWeak:"Muito fraco",weak:"Fraco",fair:"Regular",good:"Bom",excellent:"Excelente"},maintenanceUpToDate:"Toda a manutenção está em dia - Clique para ver",chamberLightOn:"Ligar luz da câmara",chamberLightOff:"Desligar luz da câmara",files:"Arquivos",browseFiles:"Procurar arquivos da impressora",autoOffAfterPrint:"Desligamento automático após impressão",autoOffExecuted:"Desligamento automático executado - ligue a impressora para reiniciar",hmsErrors:"Erros HMS",viewHmsErrors:"Ver {{count}} erro(s) HMS",resume:"Retomar",pause:"Pausar",stop:"Parar",camera:"âmera",skipObject:"Ignorar objeto",reconnect:"Reconectar",forceRefresh:"Forçar atualização",forceRefreshSuccess:"Atualização solicitada",mqttDebug:"Depuração MQTT",printerInformation:"Informações da impressora",copyToClipboard:"Copiar",copied:"Copiado!",state:"Estado",wifiSignalLabel:"Sinal WiFi",developerMode:"Modo desenvolvedor",enabled:"Ativado",disabled:"Desativado",addedOn:"Adicionada em",sdCard:"Cartão SD",inserted:"Inserido",notInserted:"Não inserido",totalPrintHours:"Horas de impressão",activeNozzle:"Ativo: {{nozzle}} bico",nozzleRack:"Suporte de bicos",nozzleDocked:"Acoplado",nozzleMounted:"Montado",nozzleActive:"Ativo",nozzleIdle:"Ocioso",nozzleDiameter:"Diâmetro",nozzleType:"Tipo",nozzleStatus:"Status",nozzleFilament:"Filamento",nozzleWear:"Desgaste",nozzleMaxTemp:"Temp Máx",nozzleSerial:"Serial",nozzleHardenedSteel:"Aço Endurecido",nozzleStainlessSteel:"Aço Inoxidável",nozzleTungstenCarbide:"Carboneto de Tungstênio",nozzleFlow:"Fluxo",nozzleHighFlow:"Alto Fluxo",nozzleStandardFlow:"Fluxo Padrão",firmwareUpdate:"Atualização de Firmware",firmwareInstructions:"No visor da impressora, vá para",firmwareNav:"Navegar para",settings:"Configurações",firmware:"Firmware",discoverPrinters:"Descobrir Impressoras",searching:"Procurando...",manualEntry:"Entrada Manual",addFromCloud:"Adicionar da Nuvem",toast:{printerDeleted:"Impressora excluída",missingSpoolAssignment:"Impressão iniciada em {{printer}}. Atribuição de bobina ausente para: {{slots}}",printerAdded:"Impressora adicionada",printerUpdated:"Impressora atualizada",failedToDelete:"Falha ao excluir impressora",failedToAdd:"Falha ao adicionar impressora",failedToUpdate:"Falha ao atualizar impressora",commandSent:"Comando enviado",failedToSendCommand:"Falha ao enviar comando",turnedOn:"{{name}} ligado",failedToPowerOn:"Falha ao ligar {{name}}",scriptTriggered:"Script acionado",printStopped:"Impressão parada",printPaused:"Impressão pausada",printResumed:"Impressão retomada",referenceDeleted:"Referência excluída",detectionAreaSaved:"Área de detecção salva",failedToRunScript:"Falha ao executar script",failedToStopPrint:"Falha ao parar impressão",failedToPausePrint:"Falha ao pausar impressão",failedToResumePrint:"Falha ao retomar impressão",failedToControlChamberLight:"Falha ao controlar a luz da câmara",failedToSetSpeed:"Falha ao definir a velocidade de impressão",failedToUpdateSetting:"Falha ao atualizar configuração",failedToSkipObjects:"Falha ao ignorar objetos",failedToRereadRfid:"Falha ao reler RFID",failedToCheckPlate:"Falha ao verificar a placa",failedToUpdateLabel:"Falha ao atualizar etiqueta",failedToDeleteReference:"Falha ao excluir referência",failedToSaveDetectionArea:"Falha ao salvar área de detecção",plateCheckEnabled:"Verificação da placa ativada",plateCheckDisabled:"Verificação da placa desativada",calibrationSaved:"Calibração salva!",calibrationFailed:"Falha na calibração",rfidRereadInitiated:"Releitura de RFID iniciada"},connection:{connected:"Conectado",offline:"Offline"},queue:{inQueue:"{{count}} impressão na fila",inQueue_plural:"{{count}} impressões na fila"},controls:"Controles",rfid:{reread:"Releitura de RFID"},bedJog:{title:"Mover a mesa de impressão",bed:"Mesa",step:"Passo (mm)",up:"Mover mesa para cima",down:"Mover mesa para baixo",disabledWhilePrinting:"Desativado durante a impressão",notHomedTitle:"Impressora não referenciada",notHomedMessage:"O eixo Z não foi referenciado desde a última impressão. Referencie Z primeiro para um posicionamento seguro, ou mova assim mesmo — os fins de curso de software serão ignorados.",homeZ:"Referenciar Z",moveAnyway:"Mover assim mesmo",homingStarted:"Referenciando eixo Z…"},permission:{noAdd:"Você não tem permissão para adicionar impressoras",noEdit:"Você não tem permissão para editar impressoras",noDelete:"Você não tem permissão para excluir impressoras",noControl:"Você não tem permissão para controlar impressoras",noFiles:"Você não tem permissão para acessar arquivos de impressora",noAmsRfid:"Você não tem permissão para reler RFID AMS",noSmartPlugControl:"Você não tem permissão para controlar tomadas inteligentes",noCamera:"Você não tem permissão para visualizar câmeras"},modal:{addTitle:"Adicionar Impressora",editTitle:"Editar Impressora",myPrinter:"Minha Impressora",selectModel:"Selecionar modelo...",locationGroup:"Localização / Grupo (opcional)",locationPlaceholder:"ex.: Oficina, Escritório, Porão",autoArchiveLabel:"Arquivar automaticamente impressões concluídas",fromPrinterSettings:"A partir das configurações da impressora",modelOptional:"Modelo (opcional)",saveChanges:"Salvar alterações"},skipObjects:{tooltip:"Ignorar objetos",onlyWhilePrinting:"Ignorar objetos (apenas durante a impressão)",requiresMultiple:"Ignorar objetos (requer 2+ objetos)",title:"Ignorar Objetos",matchIdsInfo:"Correspondência de IDs com o display da sua impressora",printerShowsIds:"A tela da impressora mostra os IDs dos objetos na placa de construção",skipSelected:"Ignorar Selecionados",skipping:"Ignorando...",noObjectsSelected:"Nenhum objeto selecionado",selectObjectsToSkip:"Selecione os objetos que deseja ignorar na impressão atual",skipped:"Ignorado",objectsSkipped:"Objetos ignorados",activeCount:"{{count}} ativo",waitForLayer:"Aguarde a camada 2+ para ignorar objetos (atualmente na camada {{layer}})",skip:"Ignorar",confirmTitle:"Ignorar Objeto?",confirmMessage:'Tem certeza de que deseja ignorar "{{name}}"? Isso não pode ser desfeito.'},confirm:{deleteTitle:"Excluir Impressora",deleteMessage:'Tem certeza de que deseja excluir "{{name}}"? Isso removerá todas as configurações de conexão.',deleteArchivesNote:"Todo o histórico de impressão desta impressora será permanentemente excluído.",keepArchivesNote:"O histórico de impressão será mantido, mas não estará mais associado a esta impressora.",stopTitle:"Parar Impressão",stopMessage:'Tem certeza de que deseja parar a impressão atual em "{{name}}"? Isso cancelará o trabalho de impressão.',stopButton:"Parar Impressão",pauseTitle:"Pausar Impressão",pauseMessage:'Tem certeza de que deseja pausar a impressão atual em "{{name}}"?',pauseButton:"Pausar Impressão",resumeTitle:"Retomar Impressão",resumeMessage:'Tem certeza de que deseja retomar a impressão em "{{name}}"?',resumeButton:"Retomar Impressão",powerOnTitle:"Ligar Impressora",powerOnMessage:'Tem certeza de que deseja ligar a impressora "{{name}}"?',powerOnButton:"Ligar",powerOffTitle:"Desligar Impressora",powerOffMessage:'Tem certeza de que deseja desligar a impressora "{{name}}"?',powerOffWarning:'AVISO: "{{name}}" está imprimindo no momento! Tem certeza de que deseja desligar a impressora? Isso interromperá a impressão e pode danificar a impressora.',powerOffButton:"Desligar"},bulk:{select:"Selecionar",selectAll:"Selecionar tudo",selectByLocation:"Selecionar por local",selected:"{{count}} selecionado(s)",actions:{stop:"Parar",pause:"Pausar",resume:"Retomar",clearPlate:"Limpar mesa",clearHMS:"Limpar notificações"},confirm:{stopTitle:"Parar {{count}} impressões",stopMessage:"Isso cancelará as impressões ativas em {{count}} impressora(s). Esta ação não pode ser desfeita.",stopButton:"Parar todas",pauseTitle:"Pausar {{count}} impressões",pauseMessage:"Isso pausará as impressões ativas em {{count}} impressora(s).",pauseButton:"Pausar todas",clearPlateTitle:"Limpar {{count}} mesas de impressão",clearPlateMessage:"Isso limpará a mesa de impressão em {{count}} impressora(s) e pode iniciar trabalhos na fila.",clearPlateButton:"Limpar todas"},success:"{{action}} concluído em {{count}} impressora(s)",partial:"{{succeeded}} bem-sucedido(s), {{failed}} falhou/falharam",noneApplicable:"Nenhuma impressora selecionada está no estado correto para esta ação",selectByState:"Selecionar por estado"},discovery:{title:"Descobrir Impressoras",searching:"Procurando...",scanning:"Escaneando...",scanProgress:"Escaneando... {{scanned}}/{{total}}",foundPrinters:"{{count}} impressora(s) encontrada(s)",noPrintersFound:"Nenhuma impressora encontrada",noPrintersFoundSubnet:"Nenhuma impressora encontrada na sub-rede especificada.",noPrintersFoundNetwork:"Nenhuma impressora encontrada na rede.",allConfigured:"Todas as impressoras descobertas já estão configuradas.",alreadyAdded:"Já adicionada",select:"Selecionar",manualEntry:"Entrada Manual",addFromCloud:"Adicionar da Nuvem",subnetToScan:"Sub-rede para escanear",dockerNote:"Docker detectado. Insira a sub-rede da sua impressora em notação CIDR. Requer network_mode: host no docker-compose.yml.",scanSubnet:"Escanear Sub-rede para Impressoras",discoverNetwork:"Descobrir Impressoras na Rede",scanningSubnet:"Escaneando sub-rede para impressoras Bambu...",scanningNetwork:"Escaneando rede...",serialRequired:"Serial necessário",unknown:"Desconhecido",failedToStart:"Falha ao iniciar a descoberta"},drying:{start:"Iniciar secagem",stop:"Parar secagem",temperature:"Temperatura",duration:"Duração",hours:"horas",timeRemaining:"{{time}} restante",active:"Secagem",notSupported:"Secagem não suportada",powerRequired:"Conecte o adaptador de energia AMS para ativar a secagem",startingDrying:"Iniciando secagem...",stoppingDrying:"Parando secagem...",rotateTray:"Girar o carretel durante a secagem"},filaments:"Filamentos",openCameraOverlay:"Abrir sobreposição da câmera",openCameraWindow:"Abrir câmera em nova janela",firmwareUpdateAvailable:"Atualização de firmware disponível: {{current}} → {{latest}}",firmwareUpToDate:"Firmware {{version}} — Atualizado",firmwareUpdateButton:"Atualizar",plateDetection:{noPermission:"Você não tem permissão para atualizar impressoras",enabledClick:"Verificação da placa ativada - Clique para desativar",disabledClick:"Verificação da placa desativada - Clique para ativar",manageCalibration:"Gerenciar calibração da detecção da placa",calibrationRequired:"Calibração necessária",calibrationInstructions:"Certifique-se de que a placa de construção esteja completamente vazia, em seguida clique em Calibrar.",calibrationDescription:"A calibração captura uma imagem de referência da placa vazia. Verificações futuras compararão com esta referência para detectar objetos.",calibrationTip:"Dica: Você pode armazenar até 5 calibrações para diferentes placas. O sistema usa automaticamente a melhor correspondência ao verificar.",plateEmpty:"A placa parece vazia",objectsDetected:"Objetos detectados na placa",confidence:"Confiança",difference:"Diferença",analysisPreview:"Pré-visualização da análise:",analysisLegend:"Caixa verde = área de detecção, Sobreposição vermelha = diferenças em relação à calibração",savedReferences:"Referências salvas ({{count}}/{{max}})",deleteReference:"Excluir referência",labelPlaceholder:"Etiqueta...",clickToEdit:"{{label}} - Clique para editar",clickToAddLabel:"Clique para adicionar etiqueta"},speed:{title:"Velocidade de impressão",silent:"Silencioso (50%)",standard:"Padrão (100%)",sport:"Sport (124%)",ludicrous:"Ludicrous (166%)"},airduct:{title:"Modo do duto de ar",cooling:"Resfriamento",heating:"Aquecimento"},noSdCard:"Sem SD",door:{open:"Aberta",closed:"Fechada"},fans:{partCooling:"Ventilador de resfriamento da peça",auxiliary:"Ventilador auxiliar",chamber:"Ventilador da câmara"},clickToViewHmsErrors:"Clique para ver erros do HMS",estimatedCompletion:"Tempo estimado de conclusão",plateNumber:"Placa {{number}}",slotOptions:"Opções de slot",amsPopup:{friendlyName:"Nome do AMS",friendlyNamePlaceholder:"ex.: Nome amigável do AMS",serialNumber:"Número de série",firmwareVersion:"Firmware",save:"Salvar",clear:"Limpar",noEditPermission:"Você não tem permissão para renomear unidades AMS"},firmwareModal:{title:"Atualização de Firmware",titleUpToDate:"Informações do Firmware",currentVersion:"Atual:",latestVersion:"Última:",releaseNotes:"Notas de Lançamento",checkingPrereqs:"Verificando pré-requisitos...",sdCardReady:"Cartão SD pronto. Clique abaixo para enviar o firmware.",uploadedSuccess:"Firmware enviado para o cartão SD!",applyInstructions:"Para aplicar a atualização na sua impressora:",step1:"Na tela sensível ao toque da impressora, vá para Configurações",step2:"Navegue até Firmware",step3:"Selecione Atualizar a partir do cartão SD",step4:"A atualização levará de 10 a 20 minutos",done:"Concluído",starting:"Iniciando...",uploadFirmware:"Enviar Firmware",uploadFailed:"Falha ao iniciar o envio: {{error}}",uploadedToast:"Firmware enviado! Inicie a atualização na tela da impressora."},accessCodePlaceholder:"Deixe vazio para manter o atual",roi:{title:"Área de Detecção (ROI)",xStart:"Início X",yStart:"Início Y",width:"Largura",height:"Altura",instruction:"Ajuste a área de detecção para focar na placa de construção. A caixa verde na pré-visualização mostra a área atual."},developerModeWarning:"O modo desenvolvedor LAN não está ativado em: {{names}}. Alguns recursos podem não funcionar.",howToEnable:"Como ativar",incompatibleFile:"Este arquivo foi fatiado para {{slicedFor}}, mas esta impressora é uma {{printerModel}}",dropNotPrintable:"Apenas arquivos .gcode e .gcode.3mf podem ser impressos",dropToPrint:"Solte para imprimir",cannotPrint:"Impressora ocupada"},archives:{title:"Arquivos de Impressão",searchPlaceholder:"Pesquisar arquivos...",filterByPrinter:"Filtrar por impressora",filterByStatus:"Filtrar por status",sortBy:"Ordenar por",sortNewest:"Mais recentes primeiro",sortOldest:"Mais antigos primeiro",sortName:"Nome",sortDuration:"Duração",sortLargest:"Maiores primeiro",sortSmallest:"Menores primeiro",sortSize:"Tamanho",noArchives:"Nenhum arquivo encontrado",noArchivesSearch:"Nenhum arquivo corresponde à sua pesquisa",originalPrintNotVisible:"Impressão original não visível - tente limpar os filtros",noArchivesYet:"Ainda não há arquivos",prints:"impressões",pagination:{showing:"Mostrando",to:"a",of:"de",show:"Mostrar",page:"Página",all:"Todos"},loadingArchives:"Carregando arquivos...",releaseToUpload:"Solte para enviar",showAll:"Mostrar todos",showFavoritesOnly:"Mostrar apenas favoritos",gridView:"Visualização em grade",listView:"Visualização em lista",calendarView:"Visualização em calendário",logView:"Registro de impressão",manageTags:"Gerenciar etiquetas",showFailedPrints:"Mostrar impressões falhas",hideFailedPrints:"Ocultar impressões falhas",hideDuplicates:"Ocultar duplicados",viewOriginalPrint:"Clique para visualizar a impressão original (#{{id}})",printTime:"Tempo de impressão",filamentUsed:"Filamento usado",cost:"Custo",reprint:"Reimprimir",preview:"Pré-visualizar",deleteArchive:"Excluir arquivo",deleteConfirm:"Tem certeza de que deseja excluir este arquivo?",favorite:"Favorito",unfavorite:"Remover dos favoritos",viewDetails:"Ver detalhes",status:{completed:"Concluído",failed:"Falhou",stopped:"Parado"},toast:{source3mfAttached:"Arquivo de origem 3MF anexado: {{filename}}",failedUploadSource3mf:"Falha ao enviar arquivo de origem 3MF",source3mfRemoved:"Arquivo de origem 3MF removido",failedRemoveSource3mf:"Falha ao remover arquivo de origem 3MF",f3dAttached:"F3D anexado: {{filename}}",failedUploadF3d:"Falha ao enviar F3D",f3dRemoved:"F3D removido",failedRemoveF3d:"Falha ao remover F3D",timelapseAttached:"Timelapse anexado: {{filename}}",timelapseAlreadyAttached:"Timelapse já anexado",noMatchingTimelapse:"Nenhum timelapse correspondente encontrado",failedScanTimelapse:"Falha ao escanear timelapse",failedAttachTimelapse:"Falha ao anexar timelapse",timelapseRemoved:"Timelapse removido",failedRemoveTimelapse:"Falha ao remover timelapse",timelapseUploaded:"Timelapse enviado: {{filename}}",failedUploadTimelapse:"Falha ao enviar timelapse",archiveDeleted:"Arquivo excluído",failedDeleteArchive:"Falha ao excluir arquivo",addedToFavorites:"Adicionado aos favoritos",removedFromFavorites:"Removido dos favoritos",projectUpdated:"Projeto atualizado",failedUpdateProject:"Falha ao atualizar projeto",linkCopied:"Link copiado para a área de transferência",failedCopyLink:"Falha ao copiar link",photoDeleted:"Foto excluída",failedDeletePhoto:"Falha ao excluir foto",failedDeleteArchives:"Falha ao excluir arquivos",failedUpdateFavorites:"Falha ao atualizar favoritos",exportDownloaded:"Exportação baixada",exportFailed:"Falha na exportação"},menu:{print:"Imprimir",schedule:"Agendar",openInBambuStudio:"Abrir no Slicer",slice:"Fatiar",externalLink:"Link externo",viewOnMakerWorld:"Ver no MakerWorld",preview3d:"Pré-visualização 3D",viewTimelapse:"Ver Timelapse",scanForTimelapse:"Escanear Timelapse",uploadTimelapse:"Enviar Timelapse",removeTimelapse:"Remover Timelapse",downloadSource3mf:"Baixar Source 3MF",uploadSource3mf:"Enviar Source 3MF",replaceSource3mf:"Substituir Source 3MF",removeSource3mf:"Remover Source 3MF",uploadF3d:"Enviar F3D",replaceF3d:"Substituir F3D",downloadF3d:"Baixar F3D",removeF3d:"Remover F3D",download:"Baixar",copyDownloadLink:"Copiar link de download",qrCode:"Qr Code",viewPhotos:"Ver fotos",viewPhotosCount:"Ver fotos ({{count}})",projectPage:"Página do projeto",addToFavorites:"Adicionar aos favoritos",removeFromFavorites:"Remover dos favoritos",edit:"Editar",goToProject:"Ir para o projeto: {{name}}",addToProject:"Adicionar ao projeto",removeFromProject:"Remover do projeto",loading:"Carregando...",noProjectsAvailable:"Nenhum projeto disponível",select:"Selecionar",deselect:"Desmarcar",delete:"Excluir"},permission:{noReprint:"Você não tem permissão para reimprimir este arquivo",noAddToQueue:"Você não tem permissão para adicionar à fila",noUpdateArchives:"Você não tem permissão para atualizar arquivos",noUploadFiles:"Você não tem permissão para enviar arquivos",noDownload:"Você não tem permissão para baixar arquivos",noCopyLink:"Você não tem permissão para copiar links de download",noDelete:"Você não tem permissão para excluir este arquivo",noCreate:"Você não tem permissão para criar arquivos"},card:{previousPlate:"Placa anterior",nextPlate:"Próxima placa",plateNumber:"Placa {{index}}",moreOptions:"Clique com o botão direito para mais opções",addToFavorites:"Adicionar aos favoritos",removeFromFavorites:"Remover dos favoritos",cancelled:"cancelado",failed:"falha",duplicate:"duplicado",duplicateTitle:"Este modelo já foi impresso antes",openSource3mf:"Abrir source 3MF no Bambu Studio (clique com o botão direito para mais opções)",downloadF3d:"Baixar arquivo de design do Fusion 360",viewTimelapse:"Ver timelapse",viewPhoto:"Ver 1 foto",viewPhotos:"Ver {{count}} fotos",openFolder:"Abrir pasta: {{name}}",slicedFile:"Arquivo fatiado - pronto para imprimir",sourceFile:"Apenas arquivo fonte - nenhum mapeamento AMS disponível",gcode:"GCODE",source:"SOURCE",project:"Projeto: {{name}}",estimated:"Estimado: {{time}}",actual:"Real: {{time}}",accuracy:"Precisão: {{percent}}%",filament:"{{weight}}g",layer:"{{count}} camada",layers:"{{count}} camadas",object:"{{count}} objeto",objects:"{{count}} objetos",slicedFor:"Fatiado para {{model}}",uploadedBy:"Enviado por",noPermissionReprint:"Você não tem permissão para reimprimir",noFileForReprint:"Nenhum arquivo 3MF disponível — o arquivo não pôde ser baixado da impressora quando a impressão foi registrada",noPermissionEdit:"Você não tem permissão para editar arquivos",noPermissionDelete:"Você não tem permissão para excluir arquivos",reprint:"Reimprimir",schedulePrint:"Agendar impressão",schedule:"Agendar",openInBambuStudio:"Abrir no Bambu Studio",openInBambuStudioToSlice:"Abrir no Bambu Studio para fatiar",slice:"Fatiar",externalLink:"Link externo",makerWorld:"MakerWorld: {{designer}}",viewProject:"Ver projeto",noExternalLink:"Nenhum link externo",preview3d:"Visualização 3D",download:"Baixar",edit:"Editar",delete:"Excluir"},modal:{deleteArchive:"Excluir Arquivo",deleteConfirm:'Tem certeza de que deseja excluir "{{name}}"? Esta ação não pode ser desfeita.',deleteButton:"Excluir",removeSource3mf:"Remover Source 3MF",removeSource3mfConfirm:'Tem certeza de que deseja remover o arquivo source 3MF de "{{name}}"? Isso excluirá o arquivo original do projeto do fatiador.',removeButton:"Remover",removeF3d:"Remover F3D",removeF3dConfirm:'Tem certeza de que deseja remover o arquivo de design do Fusion 360 de "{{name}}"?',removeTimelapse:"Remover Timelapse",removeTimelapseConfirm:'Tem certeza de que deseja remover o vídeo timelapse de "{{name}}"?',timelapse:"{{name}} - Timelapse",selectTimelapse:"Selecionar Timelapse",selectTimelapseDesc:"Nenhuma correspondência automática encontrada. Selecione o timelapse para esta impressão:",deleteArchives:"Excluir Arquivos",deleteArchivesConfirm:"Tem certeza de que deseja excluir {{count}} arquivo(s)? Esta ação não pode ser desfeita.",deleteCount:"Excluir {{count}}"},page:{title:"Arquivos",printsCount:"{{filtered}} de {{total}} impressões",dropFilesHere:"Solte arquivos .3mf aqui",releaseToUpload:"Solte para enviar",only3mfSupported:"Apenas arquivos .3mf são suportados",close:"Fechar",selected:"{{count}} selecionado(s)",selectAll:"Selecionar Todos",tags:"Tags",project:"Projeto",favorite:"Favorito",delete:"Excluir",toggledFavorites:"Favoritos alternados para {{count}} arquivo(s)",failedUpdateFavorites:"Falha ao atualizar favoritos",archivesDeleted:"{{count}} arquivo(s) excluído(s)",failedDeleteArchives:"Falha ao excluir arquivos",photoDeleted:"Foto excluída",failedDeletePhoto:"Falha ao excluir foto"},list:{name:"Nome",printer:"Impressora",date:"Data",size:"Tamanho",actions:"Ações",hasTimelapse:"Possui timelapse"},log:{date:"Data",printName:"Nome da Impressão",printer:"Impressora",user:"Usuário",status:"Status",duration:"Duração",filament:"Filamento",allPrinters:"Todas as Impressoras",allUsers:"Todos os Usuários",allStatuses:"Todos os Status",cancelled:"Cancelado",skipped:"Ignorado",dateFrom:"De",dateTo:"Até",noEntries:"Nenhuma entrada de registro de impressão encontrada",showing:"Mostrando {{count}} de {{total}} entradas",rowsPerPage:"Linhas",page:"Página",prev:"Anterior",next:"Próxima",clearLog:"Limpar Registro",clearLogTitle:"Limpar Registro de Impressão",clearLogConfirm:"Todas as entradas do registro de impressão serão permanentemente excluídas. Arquivos e itens da fila não serão afetados. Esta ação não pode ser desfeita. Tem certeza?",clearLogButton:"Limpar Tudo",cleared:"{{count}} entradas do registro de impressão limpas",clearFailed:"Falha ao limpar o registro de impressão"}},queue:{title:"Fila de Impressão",subtitle:"Agende e gerencie seus trabalhos de impressão",addToQueue:"Adicionar à Fila",print:"Imprimir",reprint:"Reimprimir",schedulePrint:"Agendar Impressão",editQueueItem:"Editar Item da Fila",printToPrinters:"Imprimir para {{count}} Impressoras",queueToPrinters:"Adicionar à Fila para {{count}} Impressoras",queueSelectedPlates:"Adicionar {{count}} placas à fila",selectAllPlates:"Selecionar todas as {{count}} placas",deselectAll:"Desmarcar tudo",printQueued:"Impressão adicionada à fila",itemsQueued:"{{count}} itens adicionados à fila",sending:"Enviando...",sendingProgress:"Enviando {{current}}/{{total}}...",adding:"Adicionando...",addingProgress:"Adicionando {{current}}/{{total}}...",savingProgress:"Salvando {{current}}/{{total}}...",clearQueue:"Limpar Fila",clearHistory:"Limpar Histórico",emptyQueue:"Fila vazia",position:"Posição",scheduledTime:"Hora Agendada",moveUp:"Mover para Cima",moveDown:"Mover para Baixo",startNow:"Iniciar Agora",printingInProgress:"Impressão em andamento...",viewArchive:"Ver Arquivo",viewInFileManager:"Ver no Gerenciador de Arquivos",itemCount:"{{count}} item",itemCount_plural:"{{count}} itens",dragToReorder:"Arraste para reordenar (apenas ASAP)",reorderHint:"A posição afeta apenas itens ASAP. Itens agendados são executados no horário definido.",sjf:{label:"SJF",tooltip:"Trabalho mais curto primeiro — o agendador prioriza impressões mais curtas"},addedBy:"Adicionado por {{name}}",nextInQueue:"Próximo na fila",clearPlate:"Limpar Placa e Iniciar Próximo",clearPlateSuccess:"Placa limpa — pronta para a próxima impressão",plateReady:"Placa limpa — pronta para a próxima impressão",plateNumber:"Placa {{index}}",quantity:"Quantidade",quantityHint:"Cria {{count}} itens na fila",activeBatches:"Lotes ativos",batchProgress:"{{completed}} de {{total}} concluídos",cancelBatch:"Cancelar restantes",batchCancelled:"Itens restantes do lote cancelados",cancelBatchConfirmTitle:"Cancelar lote",cancelBatchConfirmMessage:"Cancelar todos os itens pendentes restantes neste lote?",batch:"Lote",sections:{currentlyPrinting:"Imprimindo Atualmente",queued:"Na Fila",history:"Histórico"},status:{pending:"Pendente",waiting:"Aguardando",printing:"Imprimindo",paused:"Pausado",completed:"Concluído",failed:"Falhou",skipped:"Ignorado",cancelled:"Cancelado"},summary:{printing:"Imprimindo",queued:"Na Fila",totalTime:"Tempo Total da Fila",totalWeight:"Peso Total da Fila",history:"Histórico"},filter:{allPrinters:"Todas as Impressoras",unassigned:"Não Atribuído",allStatus:"Todos os Status",allLocations:"Todos os Locais",any:"Qualquer"},sort:{byPosition:"Ordenar por Posição",byName:"Ordenar por Nome",byPrinter:"Ordenar por Impressora",bySchedule:"Ordenar por Agendamento",byDate:"Ordenar por Data",ascendingOldest:"Crescente (mais antigo primeiro)",descendingNewest:"Decrescente (mais recente primeiro)"},badges:{staged:"Preparado (início manual)",requiresPrevious:"Requer sucesso anterior",autoPowerOff:"Desligamento automático",gcodeInjection:"G-code"},empty:{title:"Nenhuma impressão agendada",description:'Agende uma impressão a partir da página de Arquivos usando a opção "Agendar" no menu de contexto, ou arraste e solte arquivos para começar.'},time:{asap:"ASAP",overdue:"Atrasado",now:"Agora",lessThanMinute:"Em menos de um minuto",inMinutes:"Em {{count}} min",inHours:"Em {{count}} horas"},actions:{stopPrint:"Parar Impressão",startPrint:"Iniciar Impressão",requeue:"Reenfileirar"},bulkEdit:{title:"Editar {{count}} Item",title_plural:"Editar {{count}} Itens",description:"Apenas as configurações alteradas serão aplicadas aos itens selecionados.",printer:"Impressora",noChange:"— Sem alterações —",queueOptions:"Opções de Fila",staged:"Preparado (início manual)",autoPowerOff:"Desligamento automático após impressão",requirePrevious:"Requer sucesso anterior",printOptions:"Opções de Impressão",bedLevelling:"Nivelamento da Mesa",flowCalibration:"Calibração de Fluxo",vibrationCalibration:"Calibração de Vibração",layerInspection:"Inspeção da Primeira Camada",timelapse:"Timelapse",useAms:"Usar AMS",applyChanges:"Aplicar Alterações",selectAll:"Selecionar Todos",deselectAll:"Desmarcar Todos",selected:"{{count}} selecionado(s)",editSelected:"Editar Selecionados",cancelSelected:"Cancelar Selecionados"},confirm:{cancelTitle:"Cancelar Impressão Agendada",cancelMessage:'Tem certeza de que deseja cancelar "{{name}}"?',stopTitle:"Parar Impressão",stopMessage:'Tem certeza de que deseja parar a impressão atual "{{name}}"? Isso cancelará o trabalho de impressão na impressora.',removeTitle:"Remover do Histórico",removeMessage:'Tem certeza de que deseja remover "{{name}}" do histórico da fila?',clearHistoryTitle:"Limpar Histórico",clearHistoryMessage:"Tem certeza de que deseja remover todos os {{count}} itens do histórico?",cancelButton:"Cancelar Impressão",stopButton:"Parar Impressão",thisPrint:"esta impressão",thisItem:"este item"},toast:{cancelled:"Item da fila cancelado",cancelFailed:"Falha ao cancelar item",removed:"Item da fila removido",removeFailed:"Falha ao remover item",stopped:"Impressão parada",stopFailed:"Falha ao parar impressão",released:"Impressão liberada para a fila",startFailed:"Falha ao iniciar impressão",reorderFailed:"Falha ao reordenar fila",historyCleared:"Limpar {{count}} item(s) do histórico",clearHistoryFailed:"Falha ao limpar histórico",updateFailed:"Falha ao atualizar itens",bulkCancelled:"Cancelado {{count}} item(s)",bulkCancelFailed:"Falha ao cancelar itens"},timeline:{listView:"Lista",timelineView:"Linha do tempo",unassigned:"Não atribuído",noData:"Nenhuma impressão agendada para este dia",allDoneBy:"Todas as impressões concluídas até {{time}}",staged:"Preparado",filterAll:"Mostrar tudo",filterPrinting:"Imprimindo",filterQueued:"Na fila",time:{anyMoment:"a qualquer momento",minutesLeft:"{{minutes}}m restantes",hoursLeft:"{{hours}}h restantes",hoursMinutesLeft:"{{hours}}h {{minutes}}m restantes"},day:{previous:"Dia anterior",next:"Próximo dia",today:"Hoje"}},permissions:{noStopPrint:"Você não tem permissão para parar impressões",noStartPrint:"Você não tem permissão para iniciar impressões",noEdit:"Você não tem permissão para editar este item da fila",noCancel:"Você não tem permissão para cancelar este item da fila",noRequeue:"Você não tem permissão para reenfileirar itens",noRemove:"Você não tem permissão para remover este item da fila",noClearHistory:"Você não tem permissão para limpar todo o histórico",noEditItems:"Você não tem permissão para editar itens da fila",noCancelItems:"Você não tem permissão para cancelar itens da fila"}},backgroundDispatch:{unknownFile:"Unknown file",unknownPrinter:"Unknown printer",startingPrints:"Starting prints",progressSummary:"{{complete}}/{{total}} complete • Dispatched: {{dispatched}} • Processing: {{processing}}",expandDetails:"Expand dispatch details",collapseDetails:"Collapse dispatch details",dismissToast:"Dismiss dispatch toast",cancelDispatchJob:"Cancel dispatch job",cancel:"Cancel",cancelling:"Cancelling…",status:{dispatched:"Dispatched",processing:"Processing",completed:"Completed",failed:"Failed",cancelled:"Cancelled"},toast:{cancellingUpload:"Cancelling upload...",cancelled:"Dispatch cancelled",cancelFailed:"Failed to cancel dispatch",completeWithFailures:"Background dispatch complete: {{completed}} succeeded, {{failed}} failed",completeSuccess:"Background dispatch complete: {{completed}} succeeded",printStartedRemaining:"{{completed}} impressão(ões) iniciada(s), {{remaining}} enviando..."}},stats:{title:"Dashboard",subtitle:"Arraste os widgets para reorganizar. Clique no ícone de olho para ocultar.",overview:"Visão Geral",totalPrints:"Total de Impressões",successRate:"Taxa de Sucesso",totalPrintTime:"Tempo Total de Impressão",printTime:"Tempo de Impressão",totalFilament:"Filamento Total Utilizado",filamentUsed:"Filamento Utilizado",filamentCost:"Custo do Filamento",totalCost:"Custo Total",energyUsed:"Energia Utilizada",energyCost:"Custo da Energia",energyWarmingUpTooltip:"O monitoramento de energia ainda está coletando snapshots por hora. Os totais por período ficarão precisos quando houver pelo menos um snapshot antes do intervalo selecionado. Valores iniciais podem ser subestimados.",averagePrintTime:"Tempo Médio de Impressão",printsPerDay:"Impressões por Dia",byPrinter:"Por Impressora",printsByPrinter:"Impressões por Impressora",byMaterial:"Por Material",byMonth:"Por Mês",last7Days:"Últimos 7 Dias",last30Days:"Últimos 30 Dias",last90Days:"Últimos 90 Dias",allTime:"Todo o Tempo",quickStats:"Estatísticas Rápidas",printActivity:"Atividade de Impressão",filamentTypes:"Tipos de Filamento",filamentTrends:"Tendências de Filamento",failureAnalysis:"Análise de Falhas",timeAccuracy:"Precisão do Tempo",successful:"Bem-sucedido:",failed:"Falhou:",perfectEstimate:"100% = estimativa perfeita",noTimeAccuracyData:"Nenhum dado de precisão de tempo disponível",noFilamentData:"Nenhum dado de filamento disponível",noPrinterData:"Nenhum dado de impressora disponível",noPrintData:"Nenhum dado de impressão disponível",noPrintDataLast30Days:"Nenhum dado de impressão nos últimos 30 dias",failureReasons:"Razões de Falha",topFailureReasons:"Principais Razões de Falha",failedPrintsCount:"{{failed}} / {{total}} impressões falharam",lastWeekRate:"Última semana: {{rate}}%",resetLayout:"Redefinir Layout",recalculateCosts:"Recalcular Custos",recalculateCostsHint:"Recalcular todos os custos do arquivo usando os preços atuais do filamento",exportStats:"Exportar Estatísticas",exportAsCsv:"Exportar como CSV",exportAsExcel:"Exportar como Excel",hiddenCount:"{{count}} Oculto",exportDownloaded:"Exportação baixada",exportFailed:"Falha na exportação",layoutReset:"Layout redefinido",recalculatedCosts:"Custos recalculados para {{count}} arquivos",recalculateFailed:"Falha ao recalcular custos",loadingStats:"Carregando estatísticas...",noPermissionResetLayout:"Você não tem permissão para redefinir o layout",noPermissionRecalculate:"Você não tem permissão para recalcular custos",noPrintDataInRange:"Sem dados no período selecionado",periodFilament:"Filamento usado",periodCost:"Custo",avgPerPrint:"Média por impressão",usageOverTime:"Uso ao longo do tempo",filamentByWeight:"Peso",printDuration:"Duração da impressão",printerUtilization:"Utilização da impressora",filamentSuccess:"Sucesso por material",printHabits:"Hábitos de impressão",printTimeOfDay:"Horário de impressão",colorDistribution:"Distribuição de cores",noColorData:"Nenhum dado de cor disponível",records:"Recordes",longestPrint:"Impressão mais longa",heaviestPrint:"Impressão mais pesada",mostExpensivePrint:"Mais cara",busiestDay:"Dia mais movimentado",successStreak:"Sequência de sucesso",streakPrint:"impressão consecutiva",streakPrints:"{{count}} impressões consecutivas",printerStats:"Estatísticas da impressora",hours:"horas",avgPrints:"Méd. impressões",noArchiveData:"Nenhum dado de impressão disponível",filamentByTime:"Tempo",avgWeight:"Méd. peso",avgTime:"Méd. tempo",filamentByPrints:"Impressões",timeframe:{today:"Hoje","this-week":"Esta semana","this-month":"Este mês","last-7":"Últimos 7 dias","last-30":"Últimos 30 dias","last-90":"Últimos 90 dias","this-year":"Este ano","all-time":"Todo o período",custom:"Personalizado",from:"De",to:"Até"},allUsers:"Todos os Usuários",noUser:"Sem Usuário (Sistema)",filterByUser:"Filtrar por Usuário"},maintenance:{title:"Manutenção",overview:"Visão Geral",allOk:"Todas as manutenções estão em dia",dueCount:"{{count}} item pendente",dueCount_plural:"{{count}} itens pendentes",warningCount:"{{count}} aviso",warningCount_plural:"{{count}} avisos",totalPrintTime:"Tempo Total de Impressão",nextMaintenance:"Próxima Manutenção",nothingDue:"Nada pendente",tasks:"Tarefas",lastPerformed:"Última execução",interval:"Intervalo",hoursRemaining:"{{hours}}h restantes",hoursOverdue:"{{hours}}h atrasadas",markDone:"Marcar como Concluída",performMaintenance:"Realizar Manutenção",history:"Histórico",noHistory:"Nenhum histórico de manutenção",editPrintHours:"Editar Horas de Impressão",currentHours:"Horas Atuais",statusTab:"Status",settingsTab:"Configurações",overdueCount:"{{count}} atrasado",dueSoonCount:"{{count}} prestes a vencer",dueSoon:"Prestes a vencer",allGood:"Tudo certo",overdueBy:"Atrasado por {{duration}}",dueIn:"Vence em {{duration}}",timeLeft:"{{duration}} restantes",day:"1 dia",days:"{{count}} dias",week:"1 semana",weeks:"{{count}} semanas",month:"1 mês",months:"{{count}} meses",year:"1 ano",maintenanceTypes:"Tipos de Manutenção",maintenanceTypesDescription:"Tipos de sistema e suas tarefas de manutenção personalizadas",addCustomType:"Adicionar Tipo Personalizado",restoreDefaults:"Restaurar Tarefas Padrão",intervalType:"Tipo de Intervalo",intervalValue:"Intervalo ({{type}})",icon:"Icon",documentationLink:"Link da Documentação (opcional)",assignToPrinters:"Atribuir a Impressoras",selectAtLeastOnePrinter:"Selecione pelo menos uma impressora",addType:"Adicionar Tipo",custom:"Personalizado",printHours:"Horas de Impressão",calendarDays:"Dias de Calendário",exampleName:"ex., Substituir Filtro HEPA",viewDocumentation:"Ver documentação",timeBasedInterval:"Intervalo baseado em tempo",intervalOverrides:"Substituições de Intervalo",intervalOverridesDescription:"Personalize os intervalos para impressoras específicas",assignedToPrinters:"Atribuído a impressoras:",noPrintersAssigned:"Nenhuma impressora atribuída",addPrinterShort:"Adicionar:",printersAssignedClick:"{{count}} impressora(s) atribuída(s) - clique para gerenciar",removeFromPrinter:"Remover desta impressora",types:{lubricateCarbonRods:"Lubricar Barras de Carbono",lubricateRails:"Lubricar Trilhos Lineares",cleanNozzle:"Limpar Bico/Hotend",checkBelts:"Verificar Tensão das Correias",cleanBuildPlate:"Limpar Plataforma de Impressão",checkExtruder:"Verificar Engrenagens do Extrusor",checkCooling:"Verificar Ventiladores de Resfriamento",generalInspection:"Inspeção Geral",cleanCarbonRods:"Limpar Barras de Carbono",lubricateSteelRods:"Lubrificar Barras de Aço",cleanSteelRods:"Limpar Barras de Aço",cleanLinearRails:"Limpar Trilhos Lineares",checkPtfeTube:"Verificar Tubo PTFE",replaceHepaFilter:"Substituir Filtro HEPA",replaceCarbonFilter:"Substituir Filtro de Carbono",lubricateLeftNozzleRail:"Lubrificar Trilho do Bico Esquerdo"},maintenanceComplete:"Manutenção marcada como concluída",typeUpdated:"Tipo de manutenção atualizado",typeDeleted:"Tipo de manutenção excluído",defaultsRestored:"Restauradas {{count}} tarefa(s) padrão",printHoursUpdated:"Horas de impressão atualizadas",printerAssigned:"Impressora atribuída",printerRemoved:"Impressora removida",deleteTypeConfirm:'Excluir "{{name}}"?',deleteSystemTypeTitle:"Excluir tarefa de manutenção padrão?",deleteSystemTypeMessage:'Tem certeza de que deseja excluir a tarefa de manutenção padrão "{{name}}"?',noPermissionUpdate:"Você não tem permissão para atualizar itens de manutenção",noPermissionPerform:"Você não tem permissão para realizar manutenção",noPermissionEditTypes:"Você não tem permissão para editar tipos de manutenção",noPermissionDeleteTypes:"Você não tem permissão para excluir tipos de manutenção",noPermissionEditHours:"Você não tem permissão para editar horas de impressão",noPermissionRemovePrinter:"Você não tem permissão para remover atribuições de impressora",noPermissionAssignPrinter:"Você não tem permissão para atribuir impressoras",noPermissionEditIntervals:"Você não tem permissão para editar intervalos",configureSettings:"Configure tipos de manutenção e intervalos"},settings:{title:"Configurações",general:"Geral",tabs:{general:"Geral",smartPlugs:"Tomadas Inteligentes",notifications:"Notificações",queue:"Workflow",filament:"Filamento",network:"Rede",apiKeys:"Chaves API",virtualPrinter:"Impressora Virtual",failureDetection:"Detecção de Falhas",users:"Autenticação",backup:"Backup",emailAuth:"Autenticação por Email",ldap:"LDAP",twoFa:"Autenticação 2FA",oidc:"SSO / OIDC"},ldap:{title:"Autenticação LDAP",enabledDesc:"A autenticação LDAP está ativada",disabledDesc:"A autenticação LDAP está desativada",disabledHint:"Configure e salve as configurações LDAP abaixo, depois ative.",enabled:"Autenticação LDAP ativada",disabled:"Autenticação LDAP desativada",feature1:"Usuários podem fazer login com credenciais LDAP",feature2:"A conta de administrador local permanece como fallback",feature3:"Grupos LDAP são mapeados para grupos BamBuddy no login",serverConfig:"Configuração do Servidor LDAP",serverUrl:"URL do servidor",serverUrlHint:"Use ldap:// para padrão ou ldaps:// para conexões SSL",security:"Segurança",securityHint:"StartTLS atualiza uma conexão simples para TLS. LDAPS usa TLS desde o início.",bindDn:"Bind DN (conta de serviço)",bindPassword:"Senha Bind",searchBase:"Base DN de pesquisa",userFilter:"Filtro de pesquisa de usuário",userFilterHint:"{username} é substituído pelo nome de usuário. Use (uid={username}) para OpenLDAP.",autoProvision:"Provisionamento automático de usuários",autoProvisionHint:"Criar automaticamente uma conta BamBuddy no primeiro login LDAP",defaultGroup:"Grupo padrão",defaultGroupNone:"— Nenhum (sem fallback) —",defaultGroupHint:"Grupo de fallback atribuído quando um usuário LDAP se autentica mas não está em nenhum grupo LDAP mapeado. Deixe vazio para manter usuários não mapeados sem permissões.",groupMapping:"Mapeamento de grupos (JSON)",groupMappingHint:"Mapear DNs de grupos LDAP para grupos BamBuddy. Grupos disponíveis: ",testConnection:"Testar conexão",settingsSaved:"Configurações LDAP salvas",errors:{serverRequired:"URL do servidor LDAP é obrigatória",searchBaseRequired:"Base DN de pesquisa é obrigatória",enableAuthFirst:"Ative a autenticação primeiro",configureLdapFirst:"Salve as configurações LDAP primeiro"}},email:{smtpSettings:"Configuração SMTP",smtpHost:"Servidor SMTP",smtpPort:"Porta SMTP",security:"Segurança",authentication:"Autenticação",username:"Nome de Usuário",password:"Senha",fromEmail:"Email de Remetente",fromName:"Nome de Remetente",testConnection:"Testar Conexão SMTP",testRecipient:"Email de Teste",sendTest:"Enviar Email de Teste",sending:"Enviando...",save:"Salvar Configurações",saving:"Salvando...",advancedAuth:"Autenticação Avançada",advancedAuthEnabled:"Autenticação Avançada está habilitada",advancedAuthEnabledDesc:"Recursos de gerenciamento de usuários baseados em email estão ativos. Novos usuários receberão senhas geradas automaticamente por email, e os usuários podem redefinir suas senhas através do recurso de esqueci minha senha.",advancedAuthDisabled:"Autenticação Avançada está desabilitada",advancedAuthDisabledDesc:"Habilite a autenticação avançada para ativar recursos baseados em email para gerenciamento de usuários.",enable:"Habilitar",disable:"Desabilitar",feature1:"Senhas são geradas automaticamente e enviadas por email para novos usuários",feature2:"Usuários podem fazer login com nome de usuário ou email",feature3:"Recurso de esqueci minha senha está disponível",feature4:"Administradores podem redefinir senhas de usuários via email",errors:{requiredFields:"Por favor, preencha todos os campos obrigatórios",usernameRequired:"Nome de usuário é obrigatório quando a autenticação está habilitada",enterTestEmail:"Por favor, insira um endereço de email de teste",smtpServerAndEmail:"Por favor, preencha o servidor SMTP e o email de remetente antes de testar",usernamePasswordRequired:"Nome de usuário e senha são obrigatórios quando a autenticação está habilitada",configureSmtpFirst:"Por favor, configure e teste as configurações SMTP primeiro",enableAuthFirst:"Por favor, habilite a autenticação primeiro para usar os recursos baseados em e-mail."},success:{settingsSaved:"Configurações SMTP salvas com sucesso"},securityOptions:{starttls:"STARTTLS (Porta 587)",ssl:"SSL/TLS (Porta 465)",none:"Nenhuma (Porta 25)"},authOptions:{enabled:"Habilitado",disabled:"Desabilitado"}},appearance:"Aparência",notifications:"Notificações",smartPlugs:"Tomadas Inteligentes",spoolman:"Spoolman",updates:"Atualizações",language:"Idioma",languageDescription:"Selecione seu idioma preferido",theme:"Tema",themeLight:"Claro",themeDark:"Escuro",themeSystem:"Sistema",defaultView:"Visualização Padrão",defaultViewDescription:"Página a ser exibida ao abrir o aplicativo",checkForUpdates:"Verificar Atualizações",autoUpdate:"Atualização Automática",currentVersion:"Versão Atual",latestVersion:"Última Versão",upToDate:"Você está atualizado",updateAvailable:"Atualização disponível",notificationLanguage:"Idioma das Notificações",notificationLanguageDescription:"Idioma para notificações push",bedCooledThreshold:"Limite de Resfriamento da Cama",bedCooledThresholdDescription:"Temperatura abaixo da qual a cama é considerada resfriada após uma impressão",userNotificationsEnabled:"Notificações do Usuário",userNotificationsEnabledDescription:"Ativa o menu de notificações do usuário e notificações por e-mail para eventos de impressão. Requer Autenticação Avançada.",userNotificationsDisabledHint:"Ative a Autenticação Avançada para usar as notificações do usuário.",notificationProviders:"Provedores de Notificação",addProvider:"Adicionar Provedor",editProvider:"Editar Provedor",providerType:"Tipo de Provedor",testNotification:"Testar Notificação",testSuccess:"Notificação de teste enviada com sucesso",testFailed:"Falha ao enviar notificação de teste",quietHours:"Horas de Silêncio",quietHoursDescription:"Não perturbe durante essas horas",quietHoursStart:"Início",quietHoursEnd:"Fim",events:{title:"Eventos de Notificação",printStart:"Impressão Iniciada",printComplete:"Impressão Concluída",printFailed:"Falha na Impressão",printStopped:"Impressão Interrompida",printProgress:"Marcos de Progresso",printProgressDescription:"Notificar em 25%, 50%, 75%",printerOffline:"Impressora Offline",printerError:"Erro na Impressora",filamentLow:"Filamento Baixo",maintenanceDue:"Manutenção Pendente",maintenanceDueDescription:"Notificar quando a manutenção for necessária"},smartPlug:{title:"Tomadas Inteligentes",add:"Adicionar Tomada Inteligente",edit:"Editar Tomada Inteligente",name:"Nome",ipAddress:"Endereço IP",linkedPrinter:"Impressora Vinculada",autoOn:"Ligar Automaticamente",autoOnDescription:"Ligar quando a impressão começar",autoOff:"Desligar Automaticamente",autoOffDescription:"Desligar após a conclusão da impressão",offDelay:"Atraso para Desligar",offDelayMinutes:"Minutos após a impressão",offDelayTemp:"Quando o bico estiver abaixo da temperatura",currentState:"Estado Atual",turnOn:"Ligar",turnOff:"Desligar"},filamentTracking:"Rastreamento de Filamento",filamentTrackingDesc:"Escolha como rastrear seus rolos de filamento. Você pode usar o inventário interno ou conectar a um servidor Spoolman externo.",filamentChecks:"Verificações de filamento",disableFilamentWarnings:"Desativar avisos de filamento",disableFilamentWarningsDesc:"Não mostrar avisos sobre filamento insuficiente ao imprimir ou adicionar à fila",preferLowestFilament:"Preferir filamento com menor resto",preferLowestFilamentDesc:"Quando vários carretéis correspondem, usar o com menos filamento restante",trackingModeBuiltIn:"Inventário Interno",trackingModeBuiltInDesc:"Correspondência automática de RFID e rastreamento de uso incluídos",trackingModeSpoolmanDesc:"Servidor de gerenciamento de filamento externo",builtInFeatureRfid:"Detecta automaticamente rolos RFID da Bambu Lab no AMS",builtInFeatureUsage:"Rastreia o consumo de filamento por impressão",builtInFeatureCatalog:"Gerencia rolos, cores e perfis de fator K",builtInFeatureThirdParty:"Rolos de terceiros podem ser atribuídos aos rolos do inventário",amsSyncButton:"Sincronizar Pesos do AMS",amsSyncTitle:"Sincronizar Pesos dos Rolos do AMS",amsSyncMessage:"Isso substituirá todos os pesos dos rolos do inventário pelos valores atuais de % restante do AMS das impressoras conectadas. Use isso para recuperar dados de peso corrompidos. As impressoras devem estar online.",amsSyncing:"Sincronizando...",amsSyncSuccess:"{{synced}} rolo(s) sincronizado(s), {{skipped}} ignorado(s)",amsSyncError:"Falha ao sincronizar pesos do AMS",spoolmanUrl:"Spoolman URL",spoolmanUrlHint:"URL do seu servidor Spoolman (por exemplo, http://localhost:7912)",spoolmanConnected:"Conectado",spoolmanDisconnected:"Desconectado",status:"Status",connect:"Conectar",disconnect:"Desconectar",howSyncWorks:"Como a Sincronização Funciona",syncInfoRfidOnly:"Apenas rolos oficiais da Bambu Lab com RFID são sincronizados",syncInfoAutoCreate:"Novos rolos são criados automaticamente no Spoolman na primeira sincronização",syncInfoThirdPartySkipped:"Rolos não oficiais da Bambu Lab (terceiros, reabastecidos) são ignorados",linkingExistingSpools:"Vinculando Rolos Existentes",linkingExistingSpoolsDesc:'Para vincular rolos existentes do Spoolman ao seu AMS, passe o mouse sobre um slot do AMS e clique em "Vincular ao Spoolman".',syncMode:"Modo de Sincronização",syncModeAuto:"Automático",syncModeManual:"Apenas Manual",syncModeAutoDesc:"Os dados do AMS são sincronizados automaticamente quando alterações são detectadas",syncModeManualDesc:"Somente sincronize quando acionado manualmente",syncAmsData:"Sincronizar Dados do AMS",syncAmsDataDesc:"Sincronize manualmente os dados do AMS da impressora com o Spoolman",allPrinters:"Todas as Impressoras",noDefaultPrinter:"Sem padrão (perguntar a cada vez)",sidebarOrder:"Ordem da barra lateral",saveThumbnails:"Salvar miniaturas",captureFinishPhoto:"Capturar foto de conclusão",noPrintersConfigured:"Nenhuma impressora configurada",archiveMode:{always:"Sempre criar entrada de arquivo",never:"Nunca criar entrada de arquivo",ask:"Perguntar a cada vez"},checkForUpdatesLabel:"Verificar atualizações",checkPrinterFirmware:"Verificar firmware da impressora",includeBetaUpdates:"Incluir versões beta",includeBetaUpdatesDesc:"Notificar sobre versões beta e pré-lançamento ao verificar atualizações",enableRetry:"Habilitar tentativa",homeAssistantDescription:"Controlar tomadas inteligentes via Home Assistant",environmentManagedLabel:"(Gerenciado pelo Ambiente)",autoEnabledViaEnv:"Habilitado automaticamente via variáveis de ambiente",urlFromEnvReadOnly:"Valor definido pela variável de ambiente HA_URL (somente leitura)",tokenFromEnvReadOnly:"Valor definido pela variável de ambiente HA_TOKEN (somente leitura)",mqttConnectedTo:"Conectado a",prometheusDescription:"Expor dados da impressora no formato Prometheus",noSmartPlugsTitle:"Nenhuma tomada inteligente configurada",noSmartPlugsDescription:"Adicione uma tomada inteligente baseada em Tasmota para monitorar o consumo de energia e automatizar o controle de energia.",noProvidersTitle:"Nenhum provedor configurado",noProvidersDescription:"Adicione um provedor para receber alertas.",noTemplatesAvailable:"Nenhum modelo disponível. Reinicie o backend para gerar os modelos padrão.",apiPermissionView:"Visualizar status da impressora e fila",apiPermissionEdit:"Adicionar e remover itens da fila de impressão",apiKeysEmptyTitle:"Nenhuma chave API",apiKeysEmptyDescription:"Crie uma chave API para integrar com serviços externos.",noUsersFound:"Nenhum usuário encontrado",noGroupsFound:"Nenhum grupo encontrado",noGroupsAvailable:"Nenhum grupo disponível",passwordsDoNotMatch:"As senhas não coincidem",systemGroupWarning:"Os nomes dos grupos do sistema não podem ser alterados",authDisabledTitle:"Autenticação Desativada",authDisabledFeature1:"Exigir login para acessar o sistema",authDisabledFeature2:"Criar múltiplos usuários com permissões baseadas em grupos",authDisabledFeature3:"Controlar acesso com mais de 50 permissões granulares",userHasCreated:"Este usuário criou:",userItemsQuestion:"O que você gostaria de fazer com esses itens?",deleteUserConfirm:"Tem certeza de que deseja excluir este usuário?",actionCannotBeUndone:"Esta ação não pode ser desfeita.",addFirstSmartPlug:"Adicione sua primeira tomada inteligente",providers:"Provedores",log:"Registro",testAll:"Testar tudo",testResults:"Resultados do teste",testPassedCount:"{{count}} aprovado",testFailedCount:"{{count}} falhou",messageTemplates:"Modelos de mensagem",messageTemplatesDescription:"Personalize as mensagens de notificação para cada evento.",apiKeys:"Chaves API",apiKeysDescription:"Crie chaves API para integrações externas e webhooks.",createKey:"Criar Chave",apiKeyCreated:"Chave API criada com sucesso",apiKeyCopyWarning:"Copie esta chave agora - ela não será exibida novamente!",useInApiBrowser:"Usar no Navegador API",createNewApiKey:"Criar Nova Chave API",keyName:"Nome da Chave",keyNamePlaceholder:"e.g., Home Assistant, OctoPrint",readStatus:"Status de Leitura",readStatusDescription:"Visualizar status da impressora e fila",manageQueue:"Gerenciar Fila",manageQueueDescription:"Adicionar e remover itens da fila de impressão",controlPrinter:"Controlar Impressora",controlPrinterDescription:"Pausar, retomar e parar impressões",unnamedKey:"Chave Sem Nome",lastUsed:"Último uso",read:"Ler",control:"Controlar",createFirstKey:"Crie sua primeira chave",webhookEndpoints:"Endpoints de Webhook",webhookApiKeyHint:"Use sua chave API no cabeçalho X-API-Key.",webhook:{getAllStatus:"Obter status de todas as impressoras",getSpecificStatus:"Obter status de uma impressora específica",addToQueue:"Adicionar à fila de impressão",pausePrint:"Pausar impressão",resumePrint:"Retomar impressão",stopPrint:"Parar impressão"},apiBrowser:"Navegador API",apiBrowserDescription:"Explore e teste todos os endpoints de API disponíveis.",apiKeyForTesting:"Chave API para Teste",apiKeyPlaceholder:"Cole sua chave API aqui para testar endpoints autenticados...",apiKeyHint:"Esta chave será enviada como cabeçalho X-API-Key nas solicitações.",deleteApiKeyTitle:"Excluir Chave API",deleteApiKeyMessage:"Tem certeza de que deseja excluir esta chave API? Quaisquer integrações usando esta chave deixarão de funcionar.",deleteKey:"Excluir Chave",amsDisplayThresholds:"Limiares de Exibição AMS",amsThresholdsDescription:"Configure os limiares de cores para os indicadores de umidade e temperatura do AMS.",humidity:"Umidade",goodGreen:"Bom (verde)",fairOrange:"Razoável (laranja)",aboveFairBad:"Acima do limiar razoável mostra como vermelho (ruim)",fairAlsoDryingThreshold:"Este limiar também é usado para acionar a secagem automática",temperature:"Temperatura",goodBlue:"Bom (azul)",aboveFairHot:"Acima do limiar razoável mostra como vermelho (quente)",historyRetention:"Retenção de Histórico",keepSensorHistory:"Manter histórico do sensor por",historyRetentionDescription:"Dados antigos de umidade e temperatura serão automaticamente excluídos",defaultPrintOptions:"Opções de impressão padrão",defaultPrintOptionsDescription:"Defina valores padrão para opções de impressão. Podem ser alterados no diálogo de impressão.",defaultBedLevelling:"Nivelamento da mesa",defaultBedLevellingDesc:"Nivelar automaticamente a mesa antes da impressão",defaultFlowCali:"Calibração de fluxo",defaultFlowCaliDesc:"Calibrar fluxo de extrusão",defaultVibrationCali:"Calibração de vibração",defaultVibrationCaliDesc:"Reduzir artefatos de ringing",defaultLayerInspect:"Inspeção da primeira camada",defaultLayerInspectDesc:"Inspeção IA da primeira camada",defaultTimelapse:"Timelapse",defaultTimelapseDesc:"Gravar vídeo timelapse",staggeredStart:"Staggered Start",staggeredStartDescription:"Default group size and interval when staggering multi-printer batch starts. Can be overridden per batch in the print modal.",plateClear:"Confirmação de placa livre",requirePlateClear:"Exigir confirmação de placa livre",requirePlateClearDescription:"Quando ativado, o agendador aguarda a confirmação de placa livre por impressora antes de iniciar impressões na fila em impressoras com trabalhos concluídos. Desative para fluxos de trabalho de fazenda onde as placas são verificadas fisicamente.",gcodeInjection:"Injeção de G-code",gcodeInjectionDescription:'Configure G-code personalizado para injetar no início e/ou no final das impressões para sistemas de impressão automática como Farmloop, SwapMod, AutoClear e Printflow 3D. Os snippets são configurados por modelo de impressora e aplicados quando "Injetar G-code" está ativado em um item da fila.',gcodeInjectionNoPrinters:"Nenhuma impressora encontrada. Adicione impressoras para configurar snippets de G-code.",gcodeStartLabel:"G-code inicial",gcodeEndLabel:"G-code final",gcodeStartPlaceholder:"G-code inserido antes do início da impressão...",gcodeEndPlaceholder:"G-code adicionado após o término da impressão...",staggerGroupSize:"Group size",staggerGroupSizeHelp:"Printers to start simultaneously per group",staggerInterval:"Interval (minutes)",staggerIntervalHelp:"Delay between each group starting",queueDrying:"Secagem Automática",queueDryingDescription:"Secar automaticamente o filamento AMS quando a impressora estiver ociosa entre impressões na fila. Usa o limite de umidade acima.",queueDryingEnabled:"Ativar secagem automática",queueDryingEnabledDescription:"Iniciar secagem AMS automaticamente quando a impressora estiver ociosa e a umidade estiver acima do limite",queueDryingBlock:"Aguardar conclusão da secagem",queueDryingBlockDescription:"Bloquear a fila de impressão até a secagem terminar. Quando desativado, impressões têm prioridade.",ambientDryingEnabled:"Secagem ambiente",ambientDryingEnabledDescription:"Secar automaticamente o filamento em impressoras ociosas quando a umidade exceder o limite, mesmo sem impressões na fila.",dryingPresets:"Predefinições de secagem",dryingPresetsDescription:"Temperatura e duração por tipo de filamento. AMS 2 Pro usa temperaturas mais baixas, AMS-HT suporta temperaturas mais altas.",dryingFilament:"Filamento",printModal:"Modal de Impressão",expandCustomMapping:"Expandir mapeamento personalizado por padrão",expandCustomMappingDescription:"Ao imprimir em várias impressoras, mostrar o mapeamento AMS por impressora expandido",authentication:"Autenticação",authEnabledDescription:"Sua instância está protegida com autenticação de usuário",authDisabledDescription:"Ative para exigir login e gerenciar o acesso dos usuários",authDisabledMessage:"Ative a autenticação para criar contas de usuário, gerenciar permissões e proteger sua instância do Bambuddy.",enableAuthentication:"Ativar Autenticação",currentUser:"Usuário Atual",changePassword:"Alterar Senha",admin:"Administrador",users:"Usuários",addUser:"Adicionar Usuário",groups:"Grupos",addGroup:"Adicionar Grupo",system:"Sistema",noDescription:"Sem descrição",userCount:"{{count}} usuários",permissionCount:"{{count}} permissões",createUser:"Criar Usuário",username:"Nome de Usuário",enterUsername:"Digite o nome de usuário",password:"Senha",enterPassword:"Digite a senha (mínimo 6 caracteres)",confirmPassword:"Confirmar Senha",confirmPasswordPlaceholder:"Confirme a senha",viewReleaseOnGitHub:"Ver lançamento no GitHub",turnAllPlugsOn:"Ligar todas as tomadas",turnAllPlugsOff:"Desligar todas as tomadas",clearNotificationLogs:"Limpar Logs de Notificação",clearLogsMessage:"Isso excluirá permanentemente todos os logs de notificação com mais de 30 dias. Esta ação não pode ser desfeita.",clearLogs:"Limpar Logs",resetUiPreferences:"Redefinir Preferências de UI",resetUiPreferencesMessage:"Isso redefinirá todas as preferências de UI para os padrões: ordem da barra lateral, tema, layout do painel, modos de exibição e preferências de classificação. Suas impressoras, arquivos e configurações do servidor NÃO serão afetados. A página será recarregada após a limpeza.",resetPreferences:"Redefinir Preferências",deleteGroupTitle:"Excluir Grupo",deleteGroupMessage:"Tem certeza de que deseja excluir este grupo? Usuários neste grupo perderão essas permissões.",deleteGroup:"Excluir Grupo",disableAuthenticationTitle:"Desativar Autenticação",disableAuthenticationMessage:"Tem certeza de que deseja desativar a autenticação? Isso tornará sua instância do Bambuddy acessível sem login. Todos os usuários permanecerão no banco de dados, mas a autenticação será desativada.",disableAuthentication:"Desativar Autenticação",configureBambuddy:"Configurar Bambuddy",systemDefault:"Padrão do Sistema",archiveSettings:"Configurações de Arquivo",newWindow:"Nova Janela",embeddedOverlay:"Sobreposição Incorporada",preferredSlicer:"Fatiador Preferido",preferredSlicerDescription:"Escolha qual aplicativo de fatiamento abrirá os arquivos",externalCameras:"Câmeras Externas",costTracking:"Rastreamento de Custos",printsOnly:"Apenas Impressões",totalConsumption:"Consumo Total",dataManagement:"Gerenciamento de Dados",storageUsage:"Uso de Armazenamento",storageUsageDescription:"Detalhamento do uso de dados por categoria",storageUsageTotal:"Total",storageUsageErrors:"Erros",storageUsageOtherBreakdown:"Outros (inclui ativos estáticos, scripts e arquivos de configuração)",storageUsageSystem:"Sistema",storageUsageData:"Dados",storageUsageUnavailable:"Informações de uso de armazenamento indisponíveis",clearNotificationLogsDescription:"Excluir logs de notificação com mais de 30 dias",resetUiPreferencesDescription:"Redefinir ordem da barra lateral, tema, modos de exibição e preferências de layout. Impressoras, arquivos e configurações não são afetados.",enableHomeAssistant:"Ativar Home Assistant",enableMqtt:"Ativar MQTT",useTls:"Usar TLS",enableMetricsEndpoint:"Ativar Endpoint de Métricas",availableMetrics:"Métricas Disponíveis",editUser:"Editar Usuário",deleteUserTitle:"Excluir Usuário",groupName:"Nome do Grupo",leaveEmptyForAnonymous:"Deixe vazio para anônimo",leaveEmptyForNoAuth:"Deixe vazio para sem autenticação",enterNewPassword:"Digite a nova senha",confirmNewPassword:"Confirme a nova senha",enterGroupName:"Digite o nome do grupo",enterDescriptionOptional:"Digite a descrição (opcional)",enterCurrentPassword:"Digite a senha atual",enterNewPasswordMin6:"Digite a nova senha (mínimo 6 caracteres)",toast:{keyCopied:"Chave copiada para a área de transferência",copyFailed:"Falha ao copiar a chave",keyAddedToBrowser:"Chave adicionada ao Navegador de API",clearLogsFailed:"Falha ao limpar logs",uiPreferencesReset:"Preferências de UI redefinidas. Atualizando...",authDisabled:"Autenticação desativada com sucesso",authDisableFailed:"Falha ao desativar a autenticação",apiKeyCreated:"Chave de API criada",apiKeyDeleted:"Chave de API excluída",userCreated:"Usuário criado com sucesso",userUpdated:"Usuário atualizado com sucesso",userDeleted:"Usuário excluído com sucesso",groupCreated:"Grupo criado com sucesso",groupUpdated:"Grupo atualizado com sucesso",groupDeleted:"Grupo excluído com sucesso",fillRequiredFields:"Por favor, preencha todos os campos obrigatórios",passwordsDoNotMatch:"As senhas não coincidem",passwordTooShort:"A senha deve ter pelo menos 6 caracteres",enterGroupName:"Por favor, insira um nome de grupo",settingsSaved:"Configurações salvas",cameraSettingsSaved:"Configurações da câmera salvas",enterCameraUrl:"Por favor, insira a URL da câmera",passwordChanged:"Senha alterada com sucesso",connectionFailed:"Falha na conexão",testFailed:"Falha no teste",cameraConnected:"Câmera conectada{{resolution}}"},testConnection:"Testar Conexão",catalog:{spoolCatalog:"Catálogo de Carretéis",spoolCatalogDescription:"Pesos de carretéis vazios por marca/tipo. Usado para pesquisa automática de peso ao adicionar carretéis.",searchCatalog:"Pesquisar no catálogo...",addNewEntry:"Adicionar Nova Entrada",namePlaceholder:"Nome (ex.: Bambu Lab - Plástico)",weight:"Peso",type:"Tipo",default:"Padrão",custom:"Personalizado",noMatch:"Nenhuma entrada corresponde à sua pesquisa",empty:"Nenhuma entrada no catálogo",deleteEntry:"Excluir Entrada",deleteConfirm:'Tem certeza de que deseja excluir "{{name}}"?',resetCatalog:"Redefinir Catálogo",resetConfirm:"Redefinir catálogo para os padrões? Isso removerá todas as entradas personalizadas.",loadFailed:"Falha ao carregar o catálogo de carretéis",nameWeightRequired:"Nome e peso são obrigatórios",entryAdded:"Entrada adicionada",addFailed:"Falha ao adicionar entrada",entryUpdated:"Entrada atualizada",updateFailed:"Falha ao atualizar entrada",entryDeleted:"Entrada excluída",deleteFailed:"Falha ao excluir entrada",resetSuccess:"Catálogo redefinido para os padrões",resetFailed:"Falha ao redefinir catálogo",exported:"Exportadas {{count}} entradas",imported:"Importadas {{added}} entradas ({{skipped}} ignoradas)",importFailed:"Falha ao importar: formato JSON inválido",exportTooltip:"Exportar catálogo para JSON",importTooltip:"Importar catálogo de JSON",resetTooltip:"Redefinir para os padrões",selectedCount:"{{count}} selecionados",deleteSelected:"Excluir Selecionados",bulkDeleteConfirm:"Tem certeza de que deseja excluir {{count}} entradas?",bulkDeleted:"{{count}} entradas excluídas",bulkDeleteFailed:"Falha ao excluir entradas"},colorCatalog:{title:"Catálogo de Cores",description:"Cores de filamento por fabricante/material. Usado para pesquisa automática de cores ao adicionar carretéis.",searchColors:"Pesquisar cores...",allManufacturers:"Todos os fabricantes",addNewColor:"Adicionar Nova Cor",manufacturer:"Fabricante",colorName:"Nome da Cor",hex:"Hex",materialOptional:"Material (opcional)",showing:"Mostrando {{filtered}} de {{total}} cores",noMatch:"Nenhuma cor corresponde à sua pesquisa",empty:"Nenhuma cor no catálogo",deleteColor:"Excluir Cor",deleteConfirm:'Tem certeza de que deseja excluir "{{name}}"?',resetCatalog:"Redefinir Catálogo de Cores",resetConfirm:"Redefinir catálogo para os padrões? Isso removerá todas as cores personalizadas.",sync:"Sincronizar",starting:"Iniciando...",syncTooltip:"Sincronizar do FilamentColors.xyz (2000+ cores, pode levar um minuto)",loadFailed:"Falha ao carregar o catálogo de cores",fieldsRequired:"Fabricante, nome da cor e cor hex são obrigatórios",colorAdded:"Cor adicionada",addFailed:"Falha ao adicionar cor",colorUpdated:"Cor atualizada",updateFailed:"Falha ao atualizar cor",colorDeleted:"Cor excluída",deleteFailed:"Falha ao excluir cor",resetSuccess:"Catálogo de cores redefinido para os padrões",resetFailed:"Falha ao redefinir catálogo",syncUpToDate:"Já está atualizado ({{count}} cores verificadas)",syncComplete:"Adicionadas {{added}} novas cores ({{skipped}} já existiam)",syncError:"Erro de sincronização",syncFailed:"Falha ao sincronizar do FilamentColors.xyz",exported:"Exportadas {{count}} cores",imported:"Importadas {{added}} cores ({{skipped}} ignoradas)",importFailed:"Falha ao importar: formato JSON inválido",selectedCount:"{{count}} selecionados",deleteSelected:"Excluir Selecionados",bulkDeleteConfirm:"Tem certeza de que deseja excluir {{count}} cores?",bulkDeleted:"{{count}} cores excluídas",bulkDeleteFailed:"Falha ao excluir cores"},dateFormat:"Formato de data",dateFormatUs:"US (MM/DD/AAAA)",dateFormatEu:"EU (DD/MM/AAAA)",dateFormatIso:"ISO (AAAA-MM-DD)",timeFormat:"Formato de hora",timeFormat12:"12 horas (3:30 PM)",timeFormat24:"24 horas (15:30)",defaultPrinter:"Impressora padrão",defaultPrinterDescription:"Pré-selecionar esta impressora para uploads, reimpressões e outras operações.",slicerBambuStudio:"Bambu Studio",slicerOrcaSlicer:"OrcaSlicer",sidebarOrderDescription:"Arraste itens na barra lateral para reordenar. Restaurar ordem padrão aqui.",setDefault:"Definir padrão",sidebarOrderSetDefaultHint:"Definir padrão aplica a ordem atual do menu aos usuários que ainda não personalizaram o seu.",sidebarDefaultSet:"Ordem padrão do menu foi definida.",sidebarDefaultCleared:"Ordem padrão do menu removida.",sidebarDefaultFailed:"Falha ao definir a ordem padrão do menu.",reset:"Redefinir",darkMode:"Modo escuro",lightMode:"Modo claro",active:"(ativo)",background:"Fundo",accent:"Destaque",style:"Estilo",bgNeutral:"Neutro",bgWarm:"Quente",bgCool:"Frio",bgOled:"OLED Preto",bgSlate:"Azul ardósia",bgForest:"Verde floresta",accentGreen:"Verde",accentTeal:"Azul-petróleo",accentBlue:"Azul",accentOrange:"Laranja",accentPurple:"Roxo",accentRed:"Vermelho",styleClassic:"Clássico",styleGlow:"Brilhante",styleVibrant:"Vibrante",themeToggleHint:"Alternar entre modo escuro e claro usando o ícone de sol/lua na barra lateral.",autoArchivePrints:"Arquivar impressões automaticamente",autoArchiveDescription:"Salvar automaticamente arquivos 3MF quando impressões forem concluídas",saveThumbnailsDescription:"Extrair e salvar imagens de pré-visualização dos arquivos 3MF",captureFinishPhotoDescription:"Tirar foto da câmera da impressora quando a impressão for concluída",ffmpegNotInstalled:"ffmpeg não instalado",ffmpegRequired:"A captura de câmera requer ffmpeg. Instale via brew install ffmpeg (macOS) ou apt install ffmpeg (Linux).",camera:"Câmera",cameraViewMode:"Modo de visualização da câmera",cameraOverlayDescription:"A câmera abre em uma sobreposição redimensionável na tela principal",cameraWindowDescription:"A câmera abre em uma janela separada do navegador",externalCamerasDescription:"Configure câmeras externas para substituir a câmera integrada da impressora. Suporta streams MJPEG, RTSP, snapshots HTTP e câmeras USB (V4L2). Quando habilitada, a câmera externa é usada para visualização ao vivo e fotos de conclusão.",cameraPlaceholderUsb:"Caminho do dispositivo (/dev/video0)",cameraPlaceholderUrl:"URL da câmera (rtsp://... ou http://...)",cameraTypeMjpeg:"Stream MJPEG",cameraTypeRtsp:"Stream RTSP",cameraTypeSnapshot:"Snapshot HTTP",cameraTypeUsb:"Câmera USB (V4L2)",cameraRotation:"Rotação",test:"Testar",connected:"Conectado",disconnected:"Desconectado",currency:"Moeda",defaultFilamentCost:"Custo padrão do filamento (por kg)",electricityCost:"Custo da eletricidade por kWh",energyDisplayMode:"Modo de exibição de energia",energyModePrintDescription:"O painel mostra a soma da energia usada durante as impressões",energyModeTotalDescription:"O painel mostra a energia total dos plugues inteligentes",fileManager:"Gerenciador de arquivos",createArchiveEntry:"Criar entrada de arquivo ao imprimir",createArchiveEntryDescription:"Ao imprimir pelo gerenciador de arquivos, criar opcionalmente uma entrada de arquivo",lowDiskSpaceWarning:"Aviso de pouco espaço em disco",lowDiskSpaceDescription:"Mostrar aviso quando o espaço livre em disco ficar abaixo deste limite",printerFirmware:"Firmware da impressora",checkFirmwareDescription:"Verificar atualizações de firmware da Bambu Lab",bambuddySoftware:"Software Bambuddy",autoCheckDescription:"Verificar automaticamente novas versões ao iniciar",checkNow:"Verificar agora",updateAvailableVersion:"Atualização disponível: v{{version}}",releaseNotes:"Notas da versão",updateViaDocker:"Atualizar via Docker Compose:",installUpdate:"Instalar atualização",latestVersionRunning:"Você está usando a versão mais recente",failedToCheckUpdates:"Falha ao verificar atualizações: {{error}}",backupRestore:"Backup e Restauração",backupRestoreDescription:"Exportar/importar configurações e configurar backup do GitHub",goToBackup:"Ir para backup",externalUrl:"URL externa",externalUrlDescription:"A URL externa onde o Bambuddy está acessível. Usada para imagens de notificação e integrações externas.",bambuddyUrl:"URL do Bambuddy",externalUrlHint:"Inclua protocolo e porta (ex: http://192.168.1.100:8000)",ftpRetry:"Tentativa FTP",ftpRetryDescription:"Tentar novamente operações FTP quando o WiFi da impressora é instável. Aplica-se a downloads 3MF, uploads de impressão, downloads de timelapse e atualizações de firmware.",autoRetryDescription:"Tentar novamente automaticamente operações FTP que falharam",retryAttempts:"Tentativas de reenvio",retryDelay:"Atraso entre tentativas",connectionTimeout:"Tempo limite de conexão",time_one:"{{count}} vez",time_other:"{{count}} vezes",second_one:"{{count}} segundo",second_other:"{{count}} segundos",nSeconds:"{{count}} segundos",increaseForWeakWifi:"Aumente para impressoras com WiFi fraco",homeAssistant:"Home Assistant",homeAssistantFullDescription:"Conecte ao Home Assistant para controlar plugues inteligentes via API REST do HA. Suporta entidades switch, light, input_boolean e script.",homeAssistantUrl:"URL do Home Assistant",longLivedAccessToken:"Token de acesso de longa duração",haTokenHint:"Crie um token no HA: Perfil → Tokens de acesso de longa duração → Criar token",connectionSuccessful:"Conexão bem-sucedida",connectionFailed:"Falha na conexão",haConnectionSuccess:"Conectado com sucesso ao Home Assistant.",haConnectionFailed:"Falha ao conectar ao Home Assistant.",mqttPublishing:"Publicação MQTT",mqttDescription:"Publique eventos do BamBuddy para um broker MQTT externo para integração com Node-RED, Home Assistant e outros sistemas de automação.",mqttEnableDescription:"Publicar eventos no broker MQTT externo",brokerHostname:"Hostname do broker",port:"Porta",usernameOptional:"Usuário (opcional)",passwordOptional:"Senha (opcional)",topicPrefix:"Prefixo do tópico",topicPrefixHint:"Os tópicos serão: {{prefix}}/printers//status, etc.",prometheusMetrics:"Métricas Prometheus",prometheusEndpointDescription:"Expor métricas da impressora em /api/v1/metrics para monitoramento Prometheus/Grafana.",bearerTokenOptional:"Token Bearer (opcional)",bearerTokenHint:"Se definido, as requisições devem incluir Authorization: Bearer ",metricsConnectionStatus:"Status da conexão",metricsPrinterState:"Estado da impressora (idle/printing/etc)",metricsPrintProgress:"Progresso da impressão 0-100%",metricsBedTemp:"Temperatura da mesa",metricsNozzleTemp:"Temperatura do bico",metricsPrintsTotal:"Total de impressões por resultado",metricsMore:"...e mais (camadas, ventoinhas, fila, uso de filamento)",smartPlugsDescription:"Conecte plugues inteligentes (Tasmota ou Home Assistant) para automatizar o controle de energia e rastrear o consumo energético das suas impressoras.",allOn:"Ligar todos",allOff:"Desligar todos",addSmartPlug:"Adicionar plugue inteligente",energySummary:"Resumo de energia",currentPower:"Potência atual",plugsOnline:"{{reachable}}/{{total}} plugues online",today:"Hoje",yesterday:"Ontem",total:"Total",enablePlugsForSummary:"Habilite os plugues para ver o resumo de energia",addNotificationProvider:"Adicionar",systemBadge:"(Sistema)",creating:"Criando...",changing:"Alterando...",deleteUserAndItems:"Excluir usuário E seus itens",deleteUserKeepItems:"Excluir usuário, manter itens (ficarão sem dono)",ok:"OK",twoFa:{totpTitle:"App Autenticador (TOTP)",totpDesc:"Use um app como Google Authenticator, Aegis ou Authy.",emailOtpTitle:"OTP por e-mail",emailOtpDesc:"Envie um código único para {{email}} ao fazer login.",emailOtpNoEmail:"Adicione um endereço de e-mail à sua conta para ativar este método.",addEmailFirst:"Sua conta não tem endereço de e-mail. Peça a um administrador para adicionar um.",setupTotp:"Configurar App Autenticador",setupAuthApp:"Configurar App Autenticador",setupInstructions:"Escaneie o código QR com seu app autenticador e confirme com um código.",manualEntry:"Não consegue escanear? Digite este segredo manualmente:",scannedContinue:"Código escaneado — continuar",enterCodeToConfirm:"Digite o código de 6 dígitos do seu app autenticador para confirmar.",activate:"Ativar",disableTotp:"Desativar Autenticador",disableConfirmHint:"Digite um código TOTP válido ou um código de backup para desativar o autenticador.",totpDisabled:"App autenticador desativado.",emailOtpEnabled:"OTP por e-mail ativado.",emailOtpDisabled:"OTP por e-mail desativado.",smtpRequired:"Por favor, configure e teste as configurações SMTP primeiro.",invalidCode:"Código inválido. Por favor, tente novamente.",enableEmailOtp:"Ativar OTP por e-mail",disableEmailOtp:"Desativar OTP por e-mail",emailSetupEnterCode:"Um código de verificação foi enviado para o seu endereço de e-mail. Digite-o abaixo para confirmar que você possui esta caixa de entrada.",verifyAndEnable:"Verificar e Ativar",emailDisablePasswordHint:"Digite a senha da sua conta para confirmar a desativação do OTP por e-mail.",passwordPlaceholder:"Digite sua senha",backupCodesTitle:"Salve seus códigos de backup",backupCodesWarning:"Guarde estes códigos em lugar seguro. Cada código só pode ser usado uma vez.",backupCodesRemaining:"{{count}} códigos de backup restantes",savedCodes:"Códigos salvos",regenBackup:"Regenerar códigos de backup",regenBackupHint:"Digite seu código TOTP atual para gerar 10 novos códigos de backup.",newBackupCodes:"Novos códigos de backup",linkedAccounts:"Contas SSO vinculadas",linkedAccountsDesc:"Estes provedores de identidade externos estão vinculados à sua conta.",oidcUnlinked:"Conta desvinculada."},oidc:{title:"Provedores SSO / OIDC",desc:"Configure provedores OpenID Connect para login único.",addProvider:"Adicionar provedor",newProvider:"Novo provedor",empty:"Nenhum provedor OIDC configurado ainda.",created:"Provedor criado.",updated:"Provedor atualizado.",deleted:"Provedor excluído.",deleteTitle:"Excluir provedor",deleteMessage:'Excluir "{{name}}"? Todas as contas vinculadas serão desconectadas.',form:{name:"Nome de exibição",issuerUrl:"URL do emissor",clientId:"Client ID",clientSecret:"Client secret",scopes:"Escopos",iconUrl:"URL do ícone (opcional)",enabled:"Ativado",autoCreate:"Criar usuários automaticamente",autoCreateDesc:"Cria automaticamente uma conta local no primeiro login.",autoLink:"Vincular contas existentes automaticamente",autoLinkDesc:"Vincula contas locais existentes por e-mail no primeiro login.",secretHint:"deixe em branco para manter",secretPlaceholder:"novo segredo"}}},notification:{printStarted:{title:"Impressão Iniciada",body:"{{printer}}: {{filename}} iniciou a impressão"},printCompleted:{title:"Impressão Concluída",body:"{{printer}}: {{filename}} foi concluída com sucesso"},printFailed:{title:"Falha na Impressão",body:"{{printer}}: {{filename}} falhou"},printStopped:{title:"Impressão Interrompida",body:"{{printer}}: {{filename}} foi interrompida"},printProgress:{title:"Progresso da Impressão",body:"{{printer}}: {{filename}} está {{percent}}% concluída"},printerOffline:{title:"Impressora Offline",body:"{{printer}} está offline"},printerError:{title:"Erro na Impressora",body:"{{printer}}: {{error}}"},filamentLow:{title:"Filamento Baixo",body:"{{printer}}: O filamento está acabando"},maintenanceDue:{title:"Manutenção Pendente",body:"{{printer}}: {{items}} precisam de atenção"}},errors:{generic:"Algo deu errado",networkError:"Erro de rede. Por favor, verifique sua conexão.",notFound:"Não encontrado",unauthorized:"Não autorizado",serverError:"Erro no servidor",validationError:"Por favor, verifique sua entrada",printerConnectionFailed:"Falha ao conectar à impressora",saveFailed:"Falha ao salvar alterações",deleteFailed:"Falha ao excluir",loadFailed:"Falha ao carregar dados"},hmsErrors:{title:"Erros - {{name}}",noErrors:"Nenhum erro",viewOnWiki:"Ver no Bambu Lab Wiki",clearInstructions:"Limpe os erros na impressora para descartá-los aqui.",clearErrors:"Limpar Erros",clearSuccess:"Erros HMS limpos",clearFailed:"Falha ao limpar erros HMS"},mqttDebug:{title:"MQTT Log de Depuração",searchPlaceholder:"Pesquisar tópico ou payload...",noMessages:"Nenhuma mensagem registrada ainda",startLoggingHint:'Clique em "Iniciar Registro" para começar a capturar mensagens MQTT',noMessagesMatch:"Nenhuma mensagem corresponde ao seu filtro",adjustFilterHint:"Tente ajustar seus critérios de pesquisa ou filtro",incoming:"Entrada",outgoing:"Saída",loggingStopped:"Registro interrompido",loggingActive:"Registro ativo - as mensagens serão atualizadas automaticamente",startLogging:"Iniciar Registro",stopLogging:"Parar Registro",clearLog:"Limpar Registro",topic:"ópico",timestamp:"Carimbo de Data/Hora",direction:"Direção",all:"Todos"},printerFiles:{title:"Gerenciador de Arquivos",storageUsed:"Usado:",storageFree:"Livre:",filterPlaceholder:"Filtrar arquivos...",deleteButton:"Excluir",deleteFiles:"Excluir {{count}} arquivos",deleteFileConfirm:'Excluir "{{name}}"? Isso não pode ser desfeito.',deleteFilesConfirm:"Excluir {{count}} arquivos selecionados? Isso não pode ser desfeito.",noFiles:"Nenhum arquivo na impressora",loadingFiles:"Carregando arquivos...",failedToLoad:"Falha ao carregar arquivos",toast:{filesDeleted:"Arquivos excluídos: {{count}}",deleteFailed:"Falha ao excluir: {{error}}"}},confirm:{delete:"Tem certeza de que deseja excluir isso?",unsavedChanges:"Você tem alterações não salvas. Tem certeza de que deseja sair?",clearQueue:"Tem certeza de que deseja limpar a fila?"},login:{title:"Bambuddy Login",subtitle:"Faça login na sua conta",username:"Nome de usuário",usernamePlaceholder:"Digite seu nome de usuário",usernameOrEmail:"Nome de usuário ou Email",usernameOrEmailPlaceholder:"Nome de usuário ou Email",password:"Senha",passwordPlaceholder:"Digite sua senha",signIn:"Entrar",signingIn:"Entrando...",forgotPassword:"Esqueceu sua senha?",loginSuccess:"Login realizado com sucesso",loginFailed:"Falha no login",enterCredentials:"Por favor, insira nome de usuário e senha",enterEmail:"Por favor, insira seu endereço de e-mail",oidcLoginFailed:"Falha no login OIDC",oidcErrors:{providerError:"O provedor de identidade retornou um erro",missingParameters:"Parâmetros obrigatórios ausentes no callback OIDC",invalidState:"Estado OIDC inválido ou já utilizado",stateExpired:"Sessão OIDC expirada — tente novamente",providerNotFound:"Provedor OIDC não encontrado",discoveryFailed:"Falha ao obter o documento de descoberta OIDC",invalidDiscovery:"Documento de descoberta OIDC inválido",networkError:"Erro de rede durante a troca de token OIDC",badResponse:"Resposta inesperada durante a troca de token OIDC",noIdToken:"O provedor OIDC não retornou um token de ID",validationFailed:"Falha na validação do token OIDC",nonceMismatch:"Nonce OIDC não corresponde — possível ataque de replay",missingSubClaim:"Token OIDC sem claim sub",noLinkedAccount:"Nenhuma conta local vinculada a esta identidade OIDC",accountInactive:"Sua conta está inativa",userResolutionFailed:"Falha ao resolver sua conta",internalError:"Erro interno durante o login OIDC",tokenExchangeFailed:"Falha na troca de token OIDC"},forgotPasswordTitle:"Esqueceu a Senha",forgotPasswordMessage:"Se você esqueceu sua senha, entre em contato com o administrador do sistema para redefini-la.",forgotPasswordEmailMessage:"Digite seu endereço de email e enviaremos uma nova senha.",emailAddress:"Endereço de Email",emailPlaceholder:"seu.email@exemplo.com",cancel:"Cancelar",sending:"Enviando...",sendResetEmail:"Enviar Email de Redefinição",howToReset:"Como redefinir sua senha:",resetStep1:"Entre em contato com o administrador do Bambuddy",resetStep2:"Peça para redefinir sua senha na Gestão de Usuários",resetStep3:"Eles podem definir uma nova senha temporária para você",resetStep4:"Faça login com a nova senha e altere-a nas Configurações",gotIt:"Entendi",resetPassword:{title:"Definir nova senha",subtitle:"Digite e confirme sua nova senha abaixo.",newPassword:"Nova senha",newPasswordPlaceholder:"Pelo menos 8 caracteres",confirmPassword:"Confirmar senha",confirmPasswordPlaceholder:"Repetir nova senha",saving:"Salvando…",submit:"Definir nova senha",backToLogin:"Voltar para o login",passwordsDoNotMatch:"As senhas não coincidem",passwordTooShort:"A senha deve ter pelo menos 8 caracteres",resetFailed:"Falha ao redefinir senha. O link pode ter expirado."},twoFA:{title:"Autenticação em dois fatores",subtitle:"Sua conta está protegida com 2FA. Insira o código de verificação abaixo.",methodAuthenticator:"Aplicativo autenticador",methodEmail:"Código por e-mail",methodBackup:"Código de recuperação",instructionsTotp:"Abra seu aplicativo autenticador e insira o código de 6 dígitos gerado para o Bambuddy.",instructionsEmail:"Um código de 6 dígitos foi enviado para o seu e-mail. Ele é válido por 10 minutos.",instructionsEmailNotSent:"Clique no botão abaixo para receber um código de verificação por e-mail.",instructionsBackup:"Insira um dos seus códigos de recuperação de 8 caracteres. Cada código só pode ser utilizado uma vez.",sendCodeButton:"Enviar código por e-mail",sendingCode:"Enviando...",resendCode:"Reenviar código",codeLabel:"Código de verificação",backupCodeLabel:"Código de recuperação",codePlaceholder:"000000",backupCodePlaceholder:"XXXXXXXX",verifyButton:"Verificar",verifyingButton:"Verificando...",backToLogin:"← Voltar para o login",orContinueWith:"ou entrar com",signInWith:"Entrar com {{provider}}",enterCode:"Por favor, insira o código de verificação",sendCodeFailed:"Falha ao enviar o código de verificação",invalidCode:"Código inválido. Por favor, tente novamente."}},setup:{title:"Bambuddy Configuração",subtitle:"Configure a autenticação para sua instância do Bambuddy",enableAuth:"Ativar Autenticação",adminAccount:"Conta de Administrador",adminAccountDesc:"Se usuários administradores já existirem, a autenticação será ativada usando as contas de administrador existentes. Deixe os campos abaixo vazios para usar os administradores existentes ou insira novas credenciais para criar um novo usuário administrador.",adminUsername:"Nome de usuário do administrador",adminPassword:"Senha do administrador",optionalIfAdminExists:"(opcional se usuários administradores existirem)",adminUsernamePlaceholder:"Digite o nome de usuário do administrador (opcional)",adminPasswordPlaceholder:"Digite a senha do administrador (opcional)",confirmPassword:"Confirmar Senha",confirmPasswordPlaceholder:"Confirme a senha do administrador",settingUp:"Configurando...",completeSetup:"Concluir Configuração",toast:{authEnabledAdminCreated:"Autenticação ativada e usuário administrador criado",authEnabledExistingAdmins:"Autenticação ativada usando usuários administradores existentes",setupCompleted:"Configuração concluída",enterBothCredentials:"Por favor, insira o nome de usuário e a senha do administrador, ou deixe ambos vazios para usar os usuários administradores existentes",passwordsDoNotMatch:"As senhas não coincidem",passwordTooShort:"A senha deve ter pelo menos 6 caracteres"}},changePassword:{title:"Alterar Senha",currentPassword:"Senha Atual",currentPasswordPlaceholder:"Digite a senha atual",newPassword:"Nova Senha",newPasswordPlaceholder:"Digite a nova senha (mínimo 6 caracteres)",confirmPassword:"Confirmar Senha",confirmPasswordPlaceholder:"Confirme a nova senha",passwordsDoNotMatch:"As senhas não coincidem",passwordTooShort:"A senha deve ter pelo menos 6 caracteres",changing:"Alterando...",success:"Senha alterada com sucesso",failed:"Falha ao alterar a senha"},plateAlert:{title:"Impressão Pausada!",message:"Objetos detectados na mesa de impressão. A impressão foi automaticamente pausada. Por favor, limpe a mesa e retome a impressão.",understand:"Entendi"},camera:{title:"Visualização da Câmera",invalidPrinterId:"ID da impressora inválido",live:"Ao Vivo",snapshot:"Captura",restartStream:"Reiniciar transmissão",refreshSnapshot:"Atualizar captura",fullscreen:"Tela Cheia",exitFullscreen:"Sair da Tela Cheia",connectingToCamera:"Conectando à câmera...",capturingSnapshot:"Capturando imagem...",connectionLost:"Conexão perdida",connectionFailed:"Falha na conexão com a câmera",reconnecting:"Reconectando em {{countdown}}s... (tentativa {{attempt}}/{{max}})",reconnectNow:"Reconectar agora",cameraUnavailable:"Câmera indisponível",cameraUnavailableDesc:"Certifique-se de que a impressora está ligada e conectada.",noCamera:"Nenhuma câmera disponível",retry:"Tentar novamente",cameraStream:"Transmissão da câmera",zoomOut:"Reduzir zoom",zoomIn:"Aumentar zoom",resetZoom:"Redefinir zoom",recording:"Gravando",startRecording:"Iniciar gravação",stopRecording:"Parar gravação",chamberLight:"Alternar luz da câmara"},groups:{title:"Gerenciamento de Grupos",subtitle:"Gerenciar grupos de permissão para controle de acesso",backToSettings:"Voltar para Configurações",createGroup:"Criar Grupo",noPermission:"Você não tem permissão para acessar esta página.",system:"Sistema",noDescription:"Sem descrição",usersCount:"{{count}} usuários",permissionsCount:"{{count}} permissões",edit:"Editar",delete:"Excluir",toast:{created:"Grupo criado com sucesso",updated:"Grupo atualizado com sucesso",deleted:"Grupo excluído com sucesso",enterGroupName:"Por favor, insira um nome para o grupo"},modal:{editGroup:"Editar Grupo",createGroup:"Criar Grupo",cancel:"Cancelar",saving:"Salvando...",creating:"Criando...",saveChanges:"Salvar Alterações"},form:{groupName:"Nome do Grupo",groupNamePlaceholder:"Insira o nome do grupo",systemGroupWarning:"Os nomes dos grupos do sistema não podem ser alterados",description:"Descrição",descriptionPlaceholder:"Insira a descrição (opcional)",permissions:"Permissões ({{count}} selecionadas)"},deleteModal:{title:"Excluir Grupo",message:"Tem certeza de que deseja excluir este grupo? Os usuários deste grupo perderão essas permissões.",confirm:"Excluir Grupo"},editor:{title:"Editar Grupo",createTitle:"Criar Grupo",search:"Pesquisar permissões...",selectAll:"Selecionar Tudo",clearAll:"Limpar Tudo",permissionsSelected:"{{count}} selecionada(s)",noResults:"Nenhuma permissão corresponde à sua pesquisa"}},users:{title:"Gerenciamento de Usuários",subtitle:"Gerenciar usuários e seu acesso à sua instância do Bambuddy",backToSettings:"Voltar para Configurações",createUser:"Criar Usuário",noPermission:"Você não tem permissão para acessar esta página.",admin:"Admin",noGroups:"Sem grupos",active:"Ativo",inactive:"Inativo",edit:"Editar",delete:"Excluir",system:"Sistema",noGroupsAvailable:"Nenhum grupo disponível",table:{username:"Nome de Usuário",groups:"Grupos",status:"Status",actions:"Ações"},toast:{created:"Usuário criado com sucesso",updated:"Usuário atualizado com sucesso",deleted:"Usuário excluído com sucesso",fillRequired:"Por favor, preencha todos os campos obrigatórios",passwordsDoNotMatch:"As senhas não coincidem",passwordTooShort:"A senha deve ter pelo menos 6 caracteres"},modal:{createUser:"Criar Usuário",editUser:"Editar Usuário",cancel:"Cancelar",creating:"Criando...",saving:"Salvando...",saveChanges:"Salvar Alterações",advancedAuthSubtitle:"com Autenticação Avançada"},form:{username:"Nome de Usuário",usernamePlaceholder:"Insira o nome de usuário",email:"Email",emailPlaceholder:"user@example.com",password:"Senha",passwordPlaceholder:"Insira a senha",confirmPassword:"Confirmar Senha",confirmPasswordPlaceholder:"Confirme a senha",newPasswordPlaceholder:"Insira a nova senha",confirmNewPasswordPlaceholder:"Confirme a nova senha",leaveBlankToKeep:"deixe em branco para manter a atual",groups:"Grupos",optional:"opcional",autoGeneratedPassword:"Uma senha segura será gerada automaticamente e enviada por e-mail ao usuário.",passwordManagedByAdvancedAuth:'A senha é gerenciada pela Autenticação Avançada. Use "Redefinir Senha" para enviar uma nova senha ao usuário por e-mail.',resetPassword:"Redefinir Senha",resettingPassword:"Redefinindo Senha..."},deleteModal:{title:"Excluir Usuário",message:"Tem certeza de que deseja excluir este usuário? Esta ação não pode ser desfeita.",confirm:"Excluir Usuário"}},streamOverlay:{title:"Stream Overlay",invalidPrinterId:"ID da impressora inválido",cameraStream:"Transmissão da câmera",progress:"Progresso da impressão",eta:"ETA",printerIdle:"Impressora ociosa",printerOffline:"Impressora offline",status:{printing:"Imprimindo",paused:"Pausado",finished:"Concluído",failed:"Falhou",idle:"Ocioso",unknown:"Desconhecido"}},profiles:{title:"Perfis",subtitle:"Gerencie seus presets de fatiador e calibrações de avanço de pressão",tabs:{cloud:"Perfis na Nuvem",local:"Perfis Locais",kprofiles:"K-Perfis"},localProfiles:{title:"Perfis Locais",subtitle:"Importe e gerencie presets de fatiador do OrcaSlicer",import:"Importar Perfis",importDesc:"Solte arquivos .bbscfg, .bbsflmt, .orca_filament, .zip ou .json aqui",importing:"Importando...",search:"Pesquisar presets locais...",noPresets:"Nenhum preset local ainda",badge:"Local",edit:"Editar",delete:"Excluir",cancel:"Cancelar",deleteConfirmTitle:"Excluir Preset",deleteConfirm:"Tem certeza de que deseja excluir este preset? Esta ação não pode ser desfeita.",source:"Fonte",inheritsFrom:"Herdado de",filamentType:"Tipo",vendor:"Fornecedor",compatiblePrinters:"Impressoras Compatíveis",nozzleTemp:"Temperatura do Bico",cost:"Custo",density:"Densidade",pressureAdvance:"Avanço de Pressão",filament:"Filamento",process:"Processo",printer:"Impressora",toast:{importSuccess:"{{count}} preset(s) importada(s)",importSkipped:"{{count}} preset(s) ignorada(s) (duplicadas)",importError:"{{count}} erro(s) durante a importação",deleted:"Preset excluído",updated:"Preset atualizado"}},connectedAs:"Conectado como",logout:"Sair",noLogoutPermission:"Você não tem permissão para sair",failedToLoad:"Falha ao carregar perfis",retry:"Tentar novamente",time:{justNow:"Agora mesmo",minsAgo:"há {{count}} minutos",hoursAgo:"há {{count}} horas",daysAgo:"há {{count}} dias"},toast:{loggedOut:"Desconectado"},login:{title:"Conectar ao Bambu Cloud",subtitle:"Sincronize seus presets de fatiador entre dispositivos",email:"Email",password:"Senha",region:"Região",regionGlobal:"Global",regionChina:"China",verificationCode:"Código de Verificação",totpCode:"Código do Autenticador",checkEmail:"Verifique seu email ({{email}}) para um código de 6 dígitos",enterTotpHint:"Digite o código de 6 dígitos do seu aplicativo autenticador",accessToken:"Token de Acesso",accessTokenHint:"Cole seu token de acesso Bambu Lab (do Bambu Studio)",back:"Voltar",loginButton:"Entrar",verifyButton:"Verificar",setTokenButton:"Definir Token",useToken:"Usar token de acesso em vez disso",useEmail:"Entrar com email em vez disso",toast:{loggedIn:"Conectado com sucesso",codeSent:"Código de verificação enviado para seu email",enterTotp:"Digite o código do seu aplicativo autenticador",tokenSet:"Token definido com sucesso"}},presets:{myPreset:"Meu preset (editável)",duplicate:"Duplicar",editable:"Editável",failedToLoadDetails:"Falha ao carregar detalhes do preset",deleteConfirm:"Excluir este preset?",deleteWarning:'Isso excluirá permanentemente "{{name}}" do Bambu Cloud. Esta ação não pode ser desfeita.',noDuplicatePermission:"Você não tem permissão para duplicar presets",noEditPermission:"Você não tem permissão para editar presets",noDeletePermission:"Você não tem permissão para excluir presets",types:{filament:"Preset de filamento",printer:"Preset de impressora",process:"Preset de processo"},toast:{deleted:"Preset excluído",created:"Preset criado",updated:"Preset atualizado",duplicated:"Preset duplicado",fieldAdded:'Campo "{{key}}" adicionado',exported:"Preset exportado"},baseLabel:"Base: {{name}}",currentLabel:"Atual: {{name}}",newPreset:"Novo Preset",editPreset:"Editar Preset",duplicatePreset:"Duplicar Preset",createNewPreset:"Criar Novo Preset",customizeSettings:"Personalizar configurações para seu novo preset",compareWithBase:"Comparar com o preset base",compare:"Comparar",basePreset:"Preset Base",selectBasePreset:"Selecionar preset base...",presetName:"Nome do Preset",myCustomPreset:"Meu preset personalizado",inheritsFrom:"Herdado de",dropJsonToImport:"Solte o arquivo JSON para importar",tabs:{common:"Comum",allFields:"Todos os Campos"},availableFields:"Campos Disponíveis",searchFieldsPlaceholder:"Pesquisar campos...",noMatchingFields:"Nenhum campo correspondente",allFieldsAdded:"Todos os campos adicionados",addCustomField:"Adicionar campo personalizado",yourOverrides:"Suas Substituições",noOverridesYet:"Nenhuma substituição ainda",clickFieldsToAdd:"Clique nos campos à esquerda para adicioná-los",saveAsTemplate:"Salvar como modelo",jsonTip:"Dica: Arraste e solte um arquivo .json em qualquer lugar deste modal para importar configurações"},cloudView:{searchPlaceholder:"Pesquisar presets...",templates:"Modelos",refresh:"Atualizar",newPreset:"Novo Preset",clearFilters:"Limpar filtros",compareMode:"Modo de Comparação",selectAnotherPreset:"Selecionar outro preset {{type}}",clickTwoPresets:"Clique em dois presets do mesmo tipo para comparar",selectFirst:"1. Selecionar primeiro",selectSecond:"2. Selecionar segundo",compareNow:"Comparar Agora",lastSynced:"Última sincronização:",showingCount:"Mostrando {{showing}} de {{total}} presets",noPresetsFound:"Nenhum preset encontrado",columns:{filament:"Filamento",process:"Processo",printer:"Impressora"},noFilamentPresets:"Nenhum preset de filamento",noProcessPresets:"Nenhum preset de processo",noPrinterPresets:"Nenhum preset de impressora",filters:{type:"Tipo",owner:"Proprietário",printer:"Impressora",nozzle:"Bico",filament:"Filamento",layer:"Camada",all:"Todos",myPresets:"Meus Presets",builtIn:"Integrado",process:"Processo"},noTemplatesPermission:"Você não tem permissão para gerenciar modelos",noRefreshPermission:"Você não tem permissão para atualizar perfis",noCreatePermission:"Você não tem permissão para criar presets"},templates:{title:"Modelos Rápidos",noTemplates:"Nenhum modelo ainda",createFirst:"Crie modelos a partir do editor de presets",typeFilter:"Tipo:",deleteTitle:"Excluir Modelo",deleteWarning:"Esta ação não pode ser desfeita",deleteConfirm:'Tem certeza de que deseja excluir "{{name}}"?',namePlaceholder:"Nome do modelo",descriptionPlaceholder:"Descrição",settingsJson:"Configurações (JSON)",fieldsCount:"{{count}} campos",shownInModals:"Exibido em modais",hiddenInModals:"Oculto em modais",apply:"Aplicar",toast:{deleted:"Modelo excluído",updated:"Modelo atualizado",created:"Modelo criado",applied:"Modelo aplicado"}}},support:{debugLoggingActive:"Registro de depuração ativo",manageLogs:"Gerenciar",collectItem7:"Conectividade da impressora e versões de firmware",collectItem8:"Status de integração (Spoolman, MQTT, HA)",collectItem9:"Interfaces de rede (somente sub-redes)",collectItem10:"Versões de pacotes Python",collectItem11:"Verificações de integridade do banco de dados",collectItem12:"Detalhes do ambiente Docker"},fileManager:{title:"Gerenciador de Arquivos",subtitle:"Organize e gerencie seus arquivos de impressão",uploadFiles:"Enviar Arquivos",newFolder:"Nova Pasta",folderName:"Nome da Pasta",folderNamePlaceholder:"ex.: Peças Funcionais",renameFile:"Renomear Arquivo",renameFolder:"Renomear Pasta",moveFiles:"Mover {{count}} Arquivo(s)",rootNoFolder:"Raiz (Sem Pasta)",current:"Atual",linkFolder:"Vincular Pasta",linkFolderDescription:'Vincular "{{name}}" a um projeto ou arquivo para acesso rápido.',project:"Projeto",archive:"Arquivo",noProjectsFound:"Nenhum projeto encontrado",noArchivesFound:"Nenhum arquivo encontrado",unlink:"Desvincular",link:"Vincular",dragDropFiles:"Arraste e solte os arquivos aqui",dropFilesHere:"Solte os arquivos aqui",orClickToBrowse:"ou clique para procurar",allFileTypesSupported:"Todos os tipos de arquivos são suportados. Arquivos ZIP serão extraídos.",zipFilesDetected:"Arquivos ZIP detectados",zipExtractOptions:"Arquivos ZIP serão extraídos. Escolha como lidar com a estrutura de pastas:",preserveZipStructure:"Preservar estrutura de pastas do ZIP",createFolderFromZip:"Criar pasta a partir do nome do arquivo ZIP",stlThumbnailGeneration:"Geração de miniaturas STL",zipMayContainStl:"Arquivos ZIP podem conter arquivos STL. Miniaturas podem ser geradas durante a extração.",thumbnailsCanBeGenerated:"Miniaturas podem ser geradas para arquivos STL. Modelos grandes podem levar mais tempo para processar.",generateThumbnailsForStl:"Gerar miniaturas para arquivos STL",threemfDetected:"Arquivos 3MF detectados",threemfExtractionInfo:"Modelo da impressora, material, cor e configurações de impressão serão extraídos automaticamente dos arquivos 3MF.",willBeExtracted:"Será extraído",filesExtracted:"{{count}} arquivos extraídos",uploadComplete:"Upload concluído: {{succeeded}} bem-sucedidos",uploadFailed:"Falha no envio",zipFilesFailed:"{{count}} arquivos falharam",uploading:"Enviando...",changeLink:"Alterar link...",linkTo:"Vincular a...",linkToProjectOrArchive:"Vincular a projeto ou arquivo",addToQueue:"Adicionar à fila",schedulePrint:"Agendar impressão",generateThumbnail:"Gerar miniatura",generateThumbnails:"Gerar miniaturas",generateThumbnailsForMissing:"Gerar miniaturas para arquivos STL que não possuem",gridView:"Visualização em grade",listView:"Visualização em lista",lowDiskSpaceWarning:"Aviso de pouco espaço em disco",lowDiskSpaceDetails:"Apenas {{free}} livres de {{total}} no total. O limite está definido para {{threshold}} GB nas configurações.",files:"Arquivos",folders:"Pastas",size:"Tamanho",free:"Livre",allFiles:"Todos os arquivos",wrap:"Quebrar texto",enableTextWrapping:"Ativar quebra de texto",disableTextWrapping:"Desativar quebra de texto",dragToResizeTooltip:"Arraste para redimensionar, clique duas vezes para redefinir",searchFiles:"Pesquisar arquivos...",allTypes:"Todos os tipos",prints:"Impressões",ascending:"Crescente",descending:"Decrescente",resultsCount:"{{showing}} de {{total}} arquivos",selectAll:"Selecionar tudo",deselectAll:"Desmarcar tudo",selected:"{{count}} selecionado(s)",adding:"Adicionando...",loadingFiles:"Carregando arquivos...",folderIsEmpty:"A pasta está vazia",noFilesYet:"Nenhum arquivo ainda",folderEmptyDescription:"Envie arquivos ou mova arquivos para esta pasta para começar.",noFilesDescription:"Envie arquivos para começar a organizar seus arquivos relacionados à impressão.",noMatchingFiles:"Nenhum arquivo correspondente",noMatchingFilesDescription:"Nenhum arquivo corresponde aos seus critérios de pesquisa ou filtro.",clearFilters:"Limpar filtros",printedCount:"Impresso {{count}}x",uploadedBy:"Enviado por",deleteFolder:"Excluir pasta",deleteFile:"Excluir arquivo",deleteFilesCount:"Excluir {{count}} arquivos",deleteFolderConfirm:"Tem certeza de que deseja excluir esta pasta? Todos os arquivos dentro também serão excluídos.",deleteFileConfirm:"Tem certeza de que deseja excluir este arquivo?",deleteFilesConfirm:"Tem certeza de que deseja excluir {{count}} arquivos selecionados? Esta ação não pode ser desfeita.",deleting:"Excluindo...",noPermissionRenameFolder:"Você não tem permissão para renomear pastas",noPermissionLinkFolder:"Você não tem permissão para vincular pastas",noPermissionDeleteFolder:"Você não tem permissão para excluir pastas",noPermissionPrint:"Você não tem permissão para imprimir",noPermissionAddToQueue:"Você não tem permissão para adicionar à fila",noPermissionDownload:"Você não tem permissão para baixar arquivos",noPermissionRenameFile:"Você não tem permissão para renomear este arquivo",noPermissionGenerateThumbnail:"Você não tem permissão para gerar miniaturas",noPermissionDeleteFile:"Você não tem permissão para excluir este arquivo",noPermissionCreateFolder:"Você não tem permissão para criar pastas",noPermissionUpload:"Você não tem permissão para enviar arquivos",noPermissionMoveFiles:"Você não tem permissão para mover arquivos",noPermissionDeleteFiles:"Você não tem permissão para excluir arquivos",linkExternal:"Vincular externo",linkExternalFolder:"Vincular pasta externa",linkExternalFolderDescription:"Montar um diretório do host (NAS, USB, compartilhamento de rede) no Gerenciador de Arquivos. Os arquivos não são copiados — são acessados diretamente do caminho original.",externalFolderNamePlaceholder:"ex. Impressões NAS",externalPath:"Caminho do host",externalPathHelp:"Caminho absoluto do diretório no host Docker. Deve estar montado como bind no contêiner.",readOnly:"Somente leitura",readOnlyHelp:"impede uploads e exclusões",showHiddenFiles:"Mostrar arquivos ocultos (arquivos ponto)",externalFolder:"Pasta externa",scanFolder:"Escanear",toast:{folderCreated:"Pasta criada",folderDeleted:"Pasta excluída",fileDeleted:"Arquivo excluído",filesDeleted:"Excluídos {{count}} arquivos",filesMoved:"Arquivos movidos",folderLinked:"Pasta vinculada",folderUnlinked:"Pasta desvinculada",externalFolderLinked:"Pasta externa vinculada e escaneada",folderScanned:"Escaneamento concluído: {{added}} adicionados, {{removed}} removidos",addedToQueue:"Adicionado {{count}} arquivo(s) à fila",addedToQueuePartial:"Adicionado {{added}} arquivo(s), {{failed}} falharam",failedToAddToQueue:"Falha ao adicionar arquivos: {{error}}",fileRenamed:"Arquivo renomeado",folderRenamed:"Pasta renomeada",thumbnailsGenerated:"Geradas {{count}} miniatura(s)",thumbnailsGeneratedPartial:"Geradas {{succeeded}} miniatura(s), {{failed}} falharam",noStlMissingThumbnails:"Nenhum arquivo STL sem miniatura",failedToGenerateThumbnails:"Falha ao gerar miniaturas: {{error}}",thumbnailGenerated:"Miniatura gerada",failedToGenerateThumbnail:"Falha ao gerar miniatura: {{error}}"}},projects:{title:"Projetos",subtitle:"Organize e acompanhe seus projetos de impressão 3D",newProject:"Novo Projeto",editProject:"Editar Projeto",deleteProject:"Excluir Projeto",projectName:"Nome do Projeto",description:"Descrição",noProjects:"Nenhum projeto ainda",noProjectsFiltered:"Nenhum projeto {{status}}",noProjectsFilteredHelp:"Você não tem nenhum projeto {{status}}. Os projetos aparecerão aqui quando seu status mudar.",createFirst:"Crie seu primeiro projeto para começar a organizar impressões relacionadas, acompanhar o progresso e gerenciar suas construções.",createFirstButton:"Crie Seu Primeiro Projeto",create:"Criar",files:"Arquivos",prints:"Impressões",plates:"Placas",parts:"Peças",lastModified:"Última Modificação",deleteConfirm:"Tem certeza de que deseja excluir este projeto? Arquivos e itens da fila serão desvinculados, mas não excluídos.",addFiles:"Adicionar Arquivos",removeFile:"Remover Arquivo",viewDetails:"Ver Detalhes",namePlaceholder:"ex., Voron 2.4 Build",descriptionPlaceholder:"Descrição opcional...",color:"Cor",targetPlates:"Placas Alvo",targetPlatesPlaceholder:"ex., 25",targetPlatesHelp:"Número de trabalhos de impressão",targetParts:"Peças Alvo",targetPartsPlaceholder:"ex., 150",targetPartsHelp:"Total de objetos necessários",tagsLabel:"Tags (separadas por vírgula)",tagsPlaceholder:"ex., voron, funcional, presente",dueDate:"Data de Vencimento",priority:"Prioridade",priorityLow:"Baixa",priorityNormal:"Normal",priorityHigh:"Alta",priorityUrgent:"Urgente",statusActive:"Ativo",statusCompleted:"Concluído",statusArchived:"Arquivado",done:"Concluído",completed:"Concluído",failed:"Falhou",inQueue:"Na fila",noPrintsYet:"Nenhuma impressão ainda",printJobs:"Trabalhos de impressão (placas)",partsPrinted:"Peças impressas",failedParts:"Peças falhadas",import:"Importar",export:"Exportar",importProject:"Importar projeto",exportAll:"Exportar todos os projetos",loading:"Carregando projetos...",noEditPermission:"Você não tem permissão para editar projetos",noDeletePermission:"Você não tem permissão para excluir projetos",noCreatePermission:"Você não tem permissão para criar projetos",noImportPermission:"Você não tem permissão para importar projetos",noExportPermission:"Você não tem permissão para exportar projetos",toast:{created:"Projeto criado",updated:"Projeto atualizado",deleted:"Projeto excluído",imported:"Projeto importado",multipleImported:"{{count}} projetos importados",importFailed:"Falha na importação",exported:"Projetos exportados (apenas metadados)"}},projectDetail:{notFound:"Projeto não encontrado",backToProjects:"Voltar para Projetos",export:"Exportar",exportProject:"Exportar projeto",noExportPermission:"Você não tem permissão para exportar projetos",noEditPermission:"Você não tem permissão para editar projetos",partOf:"Parte de:",priorityLabel:"Prioridade:",noPrints:"Nenhuma impressão neste projeto ainda",status:{active:"Ativo",completed:"Concluído",archived:"Arquivado"},priority:{low:"Baixa",normal:"Normal",high:"Alta",urgent:"Urgente"},dueDate:{overdue:"Atrasado",today:"Vence hoje",daysLeft:"{{count}} dias restantes"},progress:{platesProgress:"Progresso das Placas",partsProgress:"Progresso das Peças",printJobs:"Trabalhos de Impressão",parts:"Peças",percentComplete:"{{percent}}% concluído",remaining:"{{count}} restantes"},stats:{printJobs:"Trabalhos de Impressão",total:"total",failed:"{{count}} falhou",partsPrinted:"{{count}} peças impressas",printTime:"Tempo de Impressão",filamentUsed:"Filamento Usado"},cost:{title:"Rastreamento de Custos",filamentCost:"Custo do Filamento",energy:"Energia",totalCost:"Custo Total",total:"Total",includesBom:"incl. lista de materiais",budget:"Orçamento",remaining:"Restante"},subProjects:{title:"Sub-projetos ({{count}})"},notes:{title:"Notas",noEditPermission:"Você não tem permissão para editar notas",placeholder:"Adicione notas sobre este projeto...",empty:"Nenhuma nota ainda. Clique em Editar para adicionar notas."},files:{title:"Arquivos",linkFolders:"Vincular pastas do Gerenciador de Arquivos",forQuickAccess:"a este projeto para acesso rápido.",fileCount:"{{count}} arquivo(s)",empty:"Nenhuma pasta vinculada. Vá para o Gerenciador de Arquivos e vincule uma pasta a este projeto.",noFiles:"Nenhum arquivo nesta pasta.",print:"Imprimir agora",addToQueue:"Adicionar à fila"},bom:{title:"Lista de Materiais",acquired:"{{completed}}/{{total}} adquiridos",showAll:"Mostrar todos",hideDone:"Ocultar concluídos",addPart:"Adicionar Peça",noAddPermission:"Você não tem permissão para adicionar peças",partNamePlaceholder:"Nome da peça (ex.: parafusos M3x8)",partName:"Nome da peça",qty:"Quantidade",price:"Preço ({{currency}})",sourcingUrlPlaceholder:"URL de fornecimento (opcional)",remarksPlaceholder:"Observações (opcional)",deletePart:"Excluir Peça",deleteConfirm:'Tem certeza de que deseja excluir "{{name}}"?',noUpdatePermission:"Você não tem permissão para atualizar peças",noEditPermission:"Você não tem permissão para editar peças",noDeletePermission:"Você não tem permissão para excluir peças",totalCost:"Custo total:",empty:"Nenhuma peça na lista de materiais. Adicione hardware, eletrônicos ou outros componentes para rastrear o que precisa ser adquirido."},timeline:{title:"Linha do Tempo de Atividades",empty:"Nenhuma atividade ainda."},template:{saveAsTemplate:"Salvar como Modelo",noCreatePermission:"Você não tem permissão para criar modelos"},queue:{title:"Fila",viewAll:"Ver todos",printing:"{{count}} imprimindo",queued:"{{count}} na fila"},prints:{title:"Impressões ({{count}})"},toast:{projectUpdated:"Projeto atualizado",partAdded:"Peça adicionada",partRemoved:"Peça removida",exportFailed:"Falha na exportação",projectExported:"Projeto exportado",templateCreated:"Modelo criado"}},system:{title:"Informações do Sistema",version:"Versão",uptime:"Tempo de Atividade",cpuUsage:"Uso da CPU",memoryUsage:"Uso da Memória",diskUsage:"Uso do Disco",networkInfo:"Informações de Rede",logs:"Logs",debugMode:"Modo de Depuração",enableDebug:"Ativar Registro de Depuração",disableDebug:"Desativar Registro de Depuração",downloadLogs:"Baixar Logs",clearLogs:"Limpar Logs",dockerInfo:"Informações do Docker",containerName:"Nome do Contêiner",imageName:"Nome da Imagem",platform:"Plataforma",architecture:"Arquitetura"},library:{title:"Biblioteca de Filamentos",addFilament:"Adicionar Filamento",editFilament:"Editar Filamento",deleteFilament:"Excluir Filamento",vendor:"Fornecedor",material:"Material",color:"Cor",kFactor:"Fator K",temperature:"Temperatura",noFilaments:"Nenhum filamento na biblioteca",deleteConfirm:"Tem certeza de que deseja excluir este filamento?",importFromPrinter:"Importar da Impressora",exportToFile:"Exportar para Arquivo"},spoolman:{title:"Integração com Spoolman",enabled:"Spoolman Ativado",url:"URL do Spoolman",connected:"Conectado",disconnected:"Não Conectado",testConnection:"Testar Conexão",sync:"Sincronizar",syncing:"Sincronizando...",lastSync:"Última Sincronização",linkToSpoolman:"Vincular ao Spoolman",openInSpoolman:"Abrir no Spoolman",unlinkSpool:"Desvincular Carretel",unlinkConfirmTitle:"Desvincular carretel?",unlinkConfirmMessage:"Isso desconectará o carretel do Spoolman. Os dados do carretel no Spoolman permanecerão inalterados.",selectSpool:"Selecionar Carretel",noUnlinkedSpools:"Nenhum carretel desvinculado disponível",linkSuccess:"Carretel vinculado ao Spoolman com sucesso",linkFailed:"Falha ao vincular carretel",unlinkSuccess:"Carretel desvinculado do Spoolman com sucesso",unlinkFailed:"Falha ao desvincular carretel",spoolId:"Carretel ID (Spool ID)",fillSourceLabel:"(Spoolman)",weight:"Peso",remaining:"Restante",disableWeightSync:"Desativar Sincronização de Peso Estimado do AMS",disableWeightSyncDesc:"Não atualize a capacidade restante a partir das estimativas do AMS. Use isso se preferir o rastreamento de uso do Spoolman em vez das estimativas baseadas em porcentagem do AMS. Novos carretéis ainda usarão a estimativa do AMS como seu peso inicial.",reportPartialUsage:"Relatar Uso Parcial para Impressões Falhadas",reportPartialUsageDesc:"Quando uma impressão falha ou é cancelada, relate o filamento estimado usado até aquele ponto com base no progresso das camadas."},inventory:{title:"Inventário de Carretéis",addSpool:"Adicionar Carretel",editSpool:"Editar Carretel",material:"Material",selectMaterial:"Selecionar material...",subtype:"Subtipo",brand:"Marca",searchBrand:"Pesquisar marca...",useCustomBrand:'Usar "{{brand}}"',useCustomMaterial:"Usar material personalizado: {{material}}",colorName:"Nome da Cor",colorNamePlaceholder:"Jade White, Fire Red...",color:"Cor",hexColor:"Cor Hexadecimal",pickColor:"Escolher cor personalizada",labelWeight:"Peso da Etiqueta",coreWeight:"Peso do Carretel Vazio",searchSpoolWeight:"Pesquisar peso do carretel...",weightUsed:"Usado",currentWeight:"Peso Restante",measuredWeight:"Peso Medido",spoolName:"Bobina",costPerKg:"Custo por kg",measuredWeightError:"O peso medido deve estar entre {{min}}g e {{max}}g.",slicerFilament:"Filamento do Fatiador",slicerFilamentName:"Nome do Predefinido do Fatiador",slicerPreset:"Predefinido do Fatiador",searchPresets:"Pesquisar predefinições de filamento...",selectedPreset:"Selecionado",noPresetsFound:"Nenhuma predefinição encontrada",tempOverrides:"Substituições de Temperatura",note:"Nota",notePlaceholder:"Quaisquer notas adicionais sobre este spool...",archive:"Arquivar",restore:"Restaurar",noSpools:"Nenhum carretel ainda. Adicione seu primeiro carretel para começar.",noManualSpools:"Nenhum carretel adicionado manualmente disponível. Adicione um carretel ao seu inventário primeiro.",kProfiles:"K-Perfis",addKProfile:"Adicionar K-Perfil",assignSpool:"Atribuir Carretel",unassignSpool:"Desatribuir",assignSuccess:"Carretel atribuído e slot AMS configurado",assignFailed:"Falha ao atribuir carretel",selectSpool:"Selecione um carretel para atribuir a este slot",assigned:"Atribuído",assigning:"Atribuindo...",searchSpools:"Pesquisar carretéis...",showAllSpools:"Mostrar todos os carretéis",allMaterials:"Todos os Materiais",filterByBrand:"Filtrar por marca...",showArchived:"Mostrar arquivados",quickAdd:"Adição rápida (Estoque)",quantity:"Quantidade",stock:"Estoque",configured:"Configurado",spoolsCreated:"{{count}} carretéis criados",spoolCreated:"Carretel criado",spoolUpdated:"Carretel atualizado",spoolDeleted:"Carretel excluído",spoolArchived:"Carretel arquivado",spoolRestored:"Carretel restaurado",deleteConfirm:"Tem certeza de que deseja excluir este carretel? Esta ação não pode ser desfeita.",archiveConfirm:"Tem certeza de que deseja arquivar este carretel?",advancedSettings:"Configurações Avançadas",filamentInfoTab:"Informações do Filamento",paProfileTab:"Perfil PA",filamentInfo:"Filamento",additional:"Adicional",loadingPresets:"Carregando predefinições da nuvem...",cloudConnected:"Nuvem conectada",cloudNotConnected:"Nuvem não conectada (usando padrões)",recentColors:"Recentes",searchColors:"Pesquisar cores...",searchResults:"Resultados da pesquisa",allColors:"Todas as cores",commonColors:"Cores comuns",showLess:"Mostrar menos",showAll:"Mostrar tudo",noColorsFound:"Nenhuma cor corresponde à sua pesquisa",noResults:"Nenhum resultado encontrado",selectMaterialFirst:"Por favor, selecione um material primeiro na aba Informações do Filamento.",noPrintersConfigured:"Nenhuma impressora configurada. Adicione impressoras para usar perfis PA.",matchingFilter:"Correspondente",anyBrand:"Qualquer marca",anyVariant:"Qualquer variante",autoSelect:"Seleção automática",matches:"correspondências",match:"correspondência",noMatches:"Nenhuma correspondência",connected:"Conectado",offline:"Offline",printerOffline:"A impressora está offline. Conecte-se para visualizar os perfis de calibração.",noKProfilesMatch:"Nenhum K-perfil corresponde ao filamento selecionado.",leftNozzle:"Bico Esquerdo",rightNozzle:"Bico Direito",profilesSelected:"perfil(is) de calibração selecionado(s)",totalInventory:"Inventário Total",totalConsumed:"Total Consumido",byMaterial:"Por Material",inPrinter:"Na Impressora",lowStock:"Estoque Baixo",sinceTracking:"Desde o início do rastreamento",loadedInAms:"Carregado no AMS/Ext",remaining:"Restante",weightCheck:"Verificação de Peso",lastWeighed:"Última pesagem",neverWeighed:"Nunca pesado",search:"Pesquisar carretéis...",showing:"Mostrando",to:"até",of:"de",show:"Mostrar",spools:"carretéis",spool:"carretel",page:"Página",noSpoolsMatch:"Nenhum resultado encontrado",noSpoolsMatchDesc:"Tente ajustar sua pesquisa ou filtros para encontrar o que você está procurando.",active:"Ativo",archived:"Arquivado",all:"Todos",used:"Usado",new:"Novo",clearFilters:"Limpar filtros",table:"Tabela",cards:"Cartões",net:"Líquido",groupSimilar:"Agrupar",groupedSpools:"{{count}} carretéis idênticos",groupedRows:"linhas",columns:"Colunas",configureColumns:"Configurar Colunas",configureColumnsDesc:"Arraste para reordenar as colunas ou use as setas. Alterne a visibilidade com o ícone de olho.",visible:"Visível",reset:"Redefinir",cancel:"Cancelar",applyChanges:"Aplicar Alterações",moveUp:"Mover para cima",moveDown:"Mover para baixo",hideColumn:"Ocultar coluna",showColumn:"Mostrar coluna",linkToSpool:"Vincular ao Carretel",tagLinked:"Tag vinculada ao carretel",tagLinkFailed:"Falha ao vincular tag",tagAlreadyLinked:"Tag já vinculada a outro carretel",unknownTag:"Tag RFID desconhecida detectada",usageHistory:"Histórico de Uso",noUsageHistory:"Nenhum uso registrado ainda",printName:"Nome da Impressão",weightConsumed:"Peso Consumido",clearHistory:"Limpar",historyCleared:"Histórico de uso limpo",fillSourceLabel:"(Inv)",lowStockThresholdError:"O limite deve estar entre 0.1 e 99.9",assignMismatchTitle:"Incompatibilidade de material",assignMismatchMessage:'O material do carretel selecionado "{{spoolMaterial}}" não corresponde ao material da bandeja "{{trayMaterial}}" para {{location}}. Atribuir mesmo assim?',assignMismatchConfirm:"Atribuir mesmo assim",assignPartialMismatchMessage:'O material do carretel "{{spoolMaterial}}" é semelhante, mas não corresponde exatamente a "{{trayMaterial}}" em {{location}}. Deseja prosseguir?',assignProfileMismatchMessage:'O perfil do carretel "{{spoolProfile}}" não corresponde ao perfil da bandeja "{{trayProfile}}" em {{location}}. Deseja prosseguir?'},timelapse:{title:"Timelapse",create:"Criar Timelapse",download:"Baixar",delete:"Excluir",preview:"Visualizar",frameRate:"Taxa de Quadros",quality:"Qualidade",processing:"Processando...",noTimelapses:"Nenhum timelapse disponível"},ams:{title:"AMS",slot:"Slot",empty:"Vazio",emptySlot:"Slot vazio",unknown:"Desconhecido",humidity:"Umidade",temperature:"Temperatura",filamentType:"Tipo de Filamento",filamentColor:"Cor",remaining:"Restante",history:"Histórico do AMS",noHistory:"Nenhum histórico disponível",configureSlot:"Configurar Slot",externalSpool:"Carretel Externo",profile:"Perfil",kFactor:"Fator K",fill:"Preencher",configure:"Configurar",used:"usado",remainingUnit:"restante"},printModal:{title:"Iniciar Impressão",selectPrinter:"Selecionar Impressora",selectPlate:"Selecionar Placa",filamentMapping:"Mapeamento de Filamento",totalCost:"Custo total:",slotRemainingShort:" - {{grams}}g rest.",printSettings:"Configurações de Impressão",bedLeveling:"Nivelamento da Mesa",flowCalibration:"Calibração de Fluxo",vibrationCalibration:"Calibração de Vibração",layerInspection:"Inspeção da Primeira Camada",timelapse:"Timelapse",startPrint:"Iniciar Impressão",addToQueue:"Adicionar à Fila",cancel:"Cancelar",noPrintersAvailable:"Nenhuma impressora disponível",printerBusy:"Impressora ocupada",printerOffline:"Impressora offline",sameTypeDifferentColor:"Mesmo tipo, cor diferente",filamentTypeNotLoaded:"Tipo de filamento não carregado",openCalendar:"Abrir calendário",leftNozzle:"L",rightNozzle:"R",leftNozzleTooltip:"Bico esquerdo",rightNozzleTooltip:"Bico direito",filamentOverride:"Substituição de Filamento",filamentOverrideHint:"Substitua opcionalmente os filamentos para atribuição baseada em modelo. O agendador usará os filamentos selecionados em vez dos valores originais do 3MF.",originalFilament:"Original",overrideWith:"Substituir por",resetToOriginal:"Restaurar original",insufficientFilamentTitle:"Filamento insuficiente",insufficientFilamentMessage:"Alguns dos carretéis atribuídos têm menos filamento restante do que o necessário para esta impressão:",insufficientFilamentLine:"{{printer}} - {{slot}}: necessário {{required}}g, restante {{remaining}}g",printAnyway:"Imprimir mesmo assim",forceColorMatch:"Forçar correspondência de cor",staggerPrinterStarts:"Stagger printer starts",staggerGroupSize:"Group size",staggerInterval:"Interval (min)",staggerPreview:"{{printers}} printers → {{groups}} groups of {{size}}, starting every {{interval}} min",staggerLastGroup:"last group: {{count}}",staggerTotal:"total: {{minutes}} min",staggerToPrinters:"Escalonar para {{count}} impressoras",gcodeInjection:"Injetar G-code de auto-impressão"},backup:{title:"Bakup e Restauração",createBackup:"Criar Backup",restoreBackup:"Restaurar Backup",restoreDescription:"Substituir todos os dados a partir de um arquivo de backup",downloadBackup:"Baixar Backup",uploadBackup:"Enviar Backup",lastBackup:"Último Backup",autoBackup:"Auto Backup",backupNow:"Fazer Backup Agora",restoreWarning:"Aviso: Restaurar um backup substituirá todos os dados atuais.",includeArchives:"Incluir Arquivos",includeSettings:"Incluir Configurações",includeProfiles:"Incluir Perfis",backupSuccess:"Backup criado com sucesso",restoreSuccess:"Backup restaurado com sucesso",backupFailed:"Falha ao criar backup",restoreFailed:"Falha ao restaurar backup",restoreNote:"A impressora virtual será parada durante a restauração",githubBackup:"Backup GitHub",enabled:"Ativado",cloudLoginRequired:"Login no Bambu Cloud necessário. Entre em Perfis → Perfis Cloud para ativar o backup GitHub.",cloudLoginRequiredShort:"Login Cloud necessário",githubDescription:"Sincronize automaticamente seus perfis com um repositório GitHub privado para backup e histórico de versões.",repositoryUrl:"URL do repositório",personalAccessToken:"Token de acesso pessoal",tokenSaved:"(salvo)",enterNewToken:"Digite um novo token para atualizar",tokenHint:"Token de granularidade fina com permissão de leitura/escrita de conteúdo",branch:"Branch",manualOnly:"Apenas manual",hourly:"A cada hora",daily:"Diário",weekly:"Semanal",includeInBackup:"Incluir no backup",kProfiles:"K-Perfis",kProfilesDescription:"Calibração de avanço de pressão das impressoras conectadas",noPrintersConnected:"Nenhuma impressora conectada",printersConnected:"{{connected}}/{{total}} conectadas",cloudProfiles:"Perfis Cloud",cloudProfilesDescription:"Predefinições de filamento, impressora e processo do Bambu Cloud",appSettings:"Configurações do App",appSettingsDescription:"Configuração do Bambuddy (banco de dados completo)",spoolInventory:"Inventário de bobinas",spoolInventoryDescription:"Bobinas de filamento, histórico de uso e rastreamento de custos",printArchives:"Arquivos de impressão",printArchivesDescription:"Metadados do histórico de impressão (sem arquivos gcode/3MF)",lastBackupAt:"Último backup:",noBackupsYet:"Nenhum backup ainda",next:"Próximo:",startingBackup:"Iniciando backup...",test:"Testar",enableBackup:"Ativar backup",testConnection:"Testar conexão",enterRepoUrl:"Digite a URL do repositório",enterRepoAndToken:"Digite a URL do repositório e o token de acesso",repoRequired:"A URL do repositório é obrigatória",tokenRequired:"O token de acesso é obrigatório",githubBackupEnabled:"Backup GitHub ativado",tokenUpdated:"Token atualizado",settingsSaved:"Configurações salvas",failedToSave:"Falha ao salvar: {{message}}",backupCompleteFiles:"Backup concluído - {{count}} arquivos atualizados",backupSkippedNoChanges:"Backup ignorado - sem alterações",backupFailed2:"Falha no backup: {{message}}",clearedLogs:"{{count}} logs removidos",failedToClearLogs:"Falha ao limpar logs: {{message}}",history:"Histórico",clear:"Limpar",date:"Data",status:"Status",commit:"Commit",localBackup:"Backup local",localBackupDescription:"Crie um backup completo dos seus dados do Bambuddy incluindo banco de dados, arquivos, uploads e todos os ficheiros.",downloadBackupLabel:"Baixar backup",completeBackupZip:"Backup completo: banco de dados + todos os arquivos (ZIP)",download:"Baixar",preparingBackup:"Preparando backup...",creatingArchive:"Criando arquivo de backup... Isso pode demorar para backups grandes.",downloadingFile:"Baixando arquivo de backup...",backupDownloaded:"Backup baixado com sucesso",failedToCreateBackup:"Falha ao criar backup: {{message}}",restore:"Restaurar",restoreReplacesAll:"A restauração substitui todos os dados.",restoreReplacesAllDetail:"Seu banco de dados e arquivos atuais serão completamente substituídos. É necessário reiniciar após a restauração.",restoreConfirmTitle:"Restaurar backup",restoreConfirmMessage:'Tem certeza de que deseja restaurar de "{{filename}}"? Isso substituirá completamente seu banco de dados e todos os arquivos. O aplicativo precisará ser reiniciado após a restauração.',restoreConfirmButton:"Restaurar backup",uploadingFile:"Enviando arquivo de backup...",backupRestoredRestart:"Backup restaurado. Por favor, reinicie o Bambuddy.",failedToRestore:"Falha ao restaurar backup. Verifique o formato do arquivo.",reloadNow:"Recarregar agora",creatingBackup:"Criando backup",restoringBackup:"Restaurando backup",preparing:"Preparando...",processing:"Processando...",doNotClosePage:"Por favor, não feche esta página nem navegue para outro lugar. Esta operação pode levar vários minutos para backups grandes.",restoring:"Restaurando...",restoreComplete:"Restauração concluída",restoreFailed2:"Falha na restauração",importSettings:"Importar configurações de um arquivo de backup",pleaseWaitRestoring:"Aguarde enquanto seus dados estão sendo restaurados",selectBackupFile:"Clique para selecionar um arquivo de backup (.json ou .zip)",duplicateHandling:"Como funciona o tratamento de duplicatas:",matchPrinters:"Impressoras",matchPrintersBy:"correspondência por número de série",matchSmartPlugs:"Smart Plugs",matchSmartPlugsBy:"correspondência por endereço IP",matchNotificationProviders:"Provedores de notificação",matchNotificationProvidersBy:"correspondência por nome",matchFilaments:"Filamentos",matchFilamentsBy:"correspondência por nome + tipo + marca",matchArchives:"Arquivos",matchArchivesBy:"correspondência por hash de conteúdo (sempre ignorado)",matchPendingUploads:"Uploads pendentes",matchPendingUploadsBy:"correspondência por nome do arquivo",matchSettingsTemplates:"Configurações e modelos",matchSettingsTemplatesBy:"sempre sobrescritos",replaceExisting:"Substituir dados existentes",keepExisting:"Manter dados existentes",overwriteDescription:"Sobrescrever itens que já existem com dados do backup",keepDescription:"Restaurar apenas itens que ainda não existem",overwriteCaution:"Cuidado:",overwriteWarning:"A sobrescrita substituirá suas configurações atuais pelos dados do backup. Códigos de acesso das impressoras nunca são sobrescritos por segurança.",cancel:"Cancelar",processingBackup:"Processando arquivo de backup...",itemsRestored:"Itens restaurados",itemsSkipped:"Itens ignorados",restored:"Restaurados",skippedAlreadyExist:"Ignorados (já existem)",filesCategory:"Arquivos (3MF, miniaturas, etc.)",andMore:"...e mais {{count}}",newApiKeysGenerated:"Novas chaves API geradas",keysShownOnce:"Estas chaves são exibidas apenas uma vez. Copie-as agora!",copy:"Copiar",noDataFound:"Nenhum dado para restaurar foi encontrado no arquivo de backup.",close:"Fechar",scheduledBackup:"Scheduled Backups",scheduledBackupDescription:"Automatically create backup snapshots on a schedule. Output directory can be mounted to a NAS or external storage.",frequency:"Frequency",backupTime:"Time",retention:"Retention",retentionDescription:"Number of backups to keep",outputPath:"Output Path",outputPathPlaceholder:"Default: {{path}}",outputPathDescription:"Leave empty for default location",runNow:"Run Now",backupFiles:"Backup Files",noScheduledBackups:"No backups yet",deleteBackup:"Delete",deleteBackupConfirm:"Delete this backup file?",backupRunning:"Backup in progress...",scheduledBackupComplete:"Backup completed successfully",scheduledBackupFailed:"Backup failed",nextBackup:"Next backup",backupSize:"Size",utc:"UTC",defaultPathLabel:"Default:",categories:{settings:"Configurações",notification_providers:"Provedores de notificação",notification_templates:"Modelos de notificação",smart_plugs:"Smart Plugs",printers:"Impressoras",filaments:"Filamentos",maintenance_types:"Tipos de manutenção",archives:"Arquivos",projects:"Projetos",pending_uploads:"Uploads pendentes",external_links:"Links externos",api_keys:"Chaves API"}},tags:{title:"Tags",addTag:"Adicionar Tag",editTag:"Editar Tag",deleteTag:"Excluir Tag",tagName:"Nome da Tag",tagColor:"Cor da Tag",noTags:"Nenhuma tag",deleteConfirm:"Tem certeza de que deseja excluir esta tag?",manageTags:"Gerenciar Tags"},uploadModal:{title:"Upload Arquivos 3MF",dragDrop:"Arraste e solte arquivos .3mf aqui",or:"ou",browseFiles:"Procurar Arquivos",extractionInfo:"O modelo da impressora será extraído automaticamente dos metadados do arquivo 3MF.",uploaded:"enviado",failed:"falhou",uploading:"Enviando...",upload:"Enviar",uploadFailed:"Falha no envio"},editArchive:{title:"Editar Arquivo",name:"Nome",namePlaceholder:"Nome da impressão",printer:"Impressora",noPrinter:"Nenhuma impressora",project:"Projeto",noProject:"Nenhum projeto",itemsPrinted:"Itens Impressos",itemsPrintedHelp:"Número de itens produzidos neste trabalho de impressão",notes:"Notas",notesPlaceholder:"Adicione notas sobre esta impressão...",externalLink:"Link Externo",externalLinkPlaceholder:"https://printables.com/model/...",externalLinkHelp:"Link para Printables, Thingiverse ou outra fonte",tags:"Tags",tagsPlaceholder:"Adicionar tags...",addMoreTags:"Adicionar mais tags...",matchingTags:'Correspondendo "{{query}}"',existingTags:"Tags existentes",clickToAdd:"(clique para adicionar)",status:"Status",failureReason:"Motivo da Falha",selectReason:"Selecione o motivo...",photos:"Fotos do Resultado da Impressão",photosHelp:"Clique em + para adicionar fotos do seu resultado impresso",printResult:"Resultado da Impressão",saving:"Salvando...",failureReasons:{adhesionFailure:"Falha de adesão",spaghettiDetached:"Spaghetti / Destacado",layerShift:"Deslocamento de camada",cloggedNozzle:"Bico entupido",filamentRunout:"Fim do filamento",warping:"Warping",stringing:"Stringing",underExtrusion:"Under-extrusion",powerFailure:"Falha de energia",userCancelled:"Cancelado pelo usuário",other:"Outro"},statuses:{completed:"Concluído",failed:"Falhou",aborted:"Cancelado",printing:"Imprimindo"}},kProfiles:{title:"K-Profiles",noPrintersConfigured:"Nenhuma impressora configurada",addPrinterInSettings:"Adicione uma impressora nas Configurações para gerenciar K-profiles",noActivePrinters:"Nenhuma impressora ativa",enablePrinterConnection:"Ative a conexão da impressora para visualizar seus K-profiles",loadingProfiles:"Carregando K-Profiles...",printerOffline:"Impressora Offline",printerOfflineDesc:"A impressora selecionada não está conectada. Ligue-a para visualizar os K-profiles.",noMatchingProfiles:"Nenhum Perfil Correspondente",noMatchingProfilesDesc:"Nenhum perfil corresponde aos seus critérios de pesquisa",noKProfiles:"Nenhum K-Profile",noKProfilesDesc:"Nenhum perfil de avanço de pressão encontrado para bico de {{diameter}}mm",createFirstProfile:"Criar Primeiro Perfil",printer:"Impressora",nozzle:"Bico",refresh:"Atualizar",addProfile:"Adicionar Perfil",export:"Exportar",import:"Importar",select:"Selecionar",selectAll:"Selecionar Todos",delete:"Excluir",searchPlaceholder:"Pesquisar por nome ou filamento...",allExtruders:"Todos os Extrusores",leftOnly:"Apenas Esquerdo",rightOnly:"Apenas Direito",allFlow:"Todo Fluxo",hfOnly:"Apenas HF",sOnly:"Apenas S",sortName:"Ordenar: Nome",sortKValue:"Ordenar: Valor K",sortFilament:"Ordenar: Filamento",leftExtruder:"Extrusor Esquerdo",rightExtruder:"Extrusor Direito",modal:{addTitle:"Adicionar K-Profile",editTitle:"Editar K-Profile",profileName:"Nome do Perfil",profileNamePlaceholder:"Meu Perfil PLA",kValue:"Valor K",kValuePlaceholder:"0.020",kValueHelp:"Faixa típica: 0.01 - 0.06 para PLA, 0.02 - 0.10 para PETG",filament:"Filamento",selectFilament:"Selecionar filamento...",noFilamentsHelp:"Nenhum filamento encontrado. Crie um K-profile no Bambu Studio primeiro.",flowType:"Tipo de Fluxo",highFlow:"Alto Fluxo",standard:"Padrão",nozzleSize:"Tamanho do Bico",extruder:"Extrusor",extruders:"Extrusores",left:"Esquerdo",right:"Direito",notes:"Notas (armazenadas localmente)",notesPlaceholder:"Adicione notas sobre este perfil...",notesHelp:"As notas são salvas no Bambuddy, não na impressora",syncing:"Sincronizando com a impressora...",savingExtruder:"Salvando no extrusor {{current}}/{{total}}...",pleaseWait:"Por favor, aguarde"},deleteConfirm:{title:"Excluir Perfil",cannotUndo:"Isso não pode ser desfeito",message:'Tem certeza de que deseja excluir "{{name}}" da impressora?'},bulkDelete:{title:"Excluir Perfis",cannotUndo:"Isso não pode ser desfeito",message:"Tem certeza de que deseja excluir {{count}} perfis selecionados da impressora?"},toast:{profileSaved:"K-profile salvo",profilesSaved:"K-profile salvo em {{count}} extrusores",selectAtLeastOneExtruder:"Por favor, selecione pelo menos um extrusor",profileDeleted:"K-profile excluído",profilesDeleted:"{{count}} perfis excluídos",exportedProfiles:"{{count}} perfis exportados",importedProfiles:"{{count}} de {{total}} perfis importados",noProfilesToExport:"Nenhum perfil para exportar",invalidFileFormat:"Formato de arquivo inválido",failedToParseImport:"Falha ao analisar o arquivo de importação",failedToSaveBatch:"Falha ao salvar K-profiles",noteSaved:"Nota salva",failedToSaveNote:"Falha ao salvar nota"},permission:{noRead:"Você não tem permissão para atualizar perfis",noCreate:"Você não tem permissão para adicionar perfis",noUpdate:"Você não tem permissão para atualizar K-profiles",noDelete:"Você não tem permissão para excluir K-profiles",noExport:"Você não tem permissão para exportar perfis",noImport:"Você não tem permissão para importar perfis"}},virtualPrinter:{title:"Impressora Virtual",running:"Em execução",stopped:"Parada",description:{default:"Ative uma impressora virtual que aparece no Bambu Studio e no OrcaSlicer. Os arquivos enviados para esta impressora serão arquivados diretamente sem impressão.",proxy:"Ative um proxy que retransmite o tráfego do slicer para uma impressora real, permitindo impressão remota em qualquer rede."},enable:{title:"Ativar Impressora Virtual",visibleInSlicer:'Visível como "Bambuddy" na descoberta do slicer',proxyingTo:"Proxy para {{name}}",notActive:"Não ativo"},model:{title:"Modelo da Impressora",description:"Selecione qual modelo de impressora emular.",restartWarning:"Alterar o modelo reiniciará a impressora virtual"},accessCode:{title:"Código de acesso",isSet:"O código de acesso está definido",notSet:"Nenhum código de acesso definido — necessário para ativar.",placeholder:"Digite um código de 8 caracteres",placeholderChange:"Digite um novo código para alterar",hint:"Deve ter exatamente 8 caracteres. Usado pelos slicers para autenticação.",charCount:"({{count}}/8)"},targetPrinter:{title:"Impressora Alvo",configured:"Proxy alvo configurado",notConfigured:"Nenhuma impressora alvo selecionada - necessário para o modo proxy",placeholder:"Selecione uma impressora...",hint:"Selecione a impressora para a qual o tráfego do slicer será enviado. A impressora deve estar no modo LAN.",noPrinters:"Nenhuma impressora configurada. Adicione uma impressora primeiro para usar o modo proxy."},remoteInterface:{title:"Substituição da Interface de Rede",configured:"Substituição da interface ativa",optional:"Opcional - use se o IP detectado automaticamente estiver errado (por exemplo, várias NICs, Docker, VPN)",placeholder:"Detecção automática (padrão)...",hint:"Substitua o endereço IP anunciado via SSDP e usado no certificado TLS. Útil quando o Bambuddy possui várias interfaces de rede."},mode:{title:"Modo",archive:"Arquivar",archiveDesc:"Arquivar arquivos imediatamente",review:"Revisar",reviewDesc:"Revisar antes de arquivar",queue:"Fila",queueDesc:"Arquivar e adicionar à fila",proxy:"Proxy",proxyDesc:"Retransmitir para impressora real"},autoDispatch:{title:"Envio automático",description:"Iniciar impressões automaticamente quando adicionadas à fila. Quando desativado, as impressões aguardam envio manual."},setupRequired:{title:"Configuração Necessária",description:"O recurso de impressora virtual requer configuração adicional do sistema antes de funcionar. Isso inclui encaminhamento de portas, regras de firewall e configurações específicas da plataforma.",readGuide:"Leia o guia de configuração antes de ativar"},howItWorks:{title:"Como funciona",step1:"Complete o guia de configuração para sua plataforma",step2:"Ative a impressora virtual e defina um código de acesso",step3:'No Bambu Studio ou OrcaSlicer, vá para "Adicionar Impressora"'},status:{title:"Detalhes do Status",printerName:"Nome da Impressora",model:"Modelo",serialNumber:"Número de Série",mode:"Modo",pendingFiles:"Arquivos Pendentes",targetPrinter:"Impressora Alvo",ftpPort:"Porta FTP",mqttPort:"Porta MQTT",ftpConnections:"Conexões FTP",mqttConnections:"Conexões MQTT"},toast:{updated:"Configurações da impressora virtual atualizadas",failedToUpdate:"Falha ao atualizar as configurações",accessCodeRequired:"Defina um código de acesso primeiro",targetPrinterRequired:"Selecione uma impressora alvo primeiro",bindIpRequired:"Defina um IP de ligação primeiro",accessCodeEmpty:"O código de acesso não pode estar vazio",accessCodeLength:"O código de acesso deve ter exatamente 8 caracteres",created:"Impressora virtual criada",failedToCreate:"Falha ao criar impressora virtual",deleted:"Impressora virtual excluída",failedToDelete:"Falha ao excluir impressora virtual"},list:{title:"Impressoras Virtuais",add:"Adicionar",addFirst:"Adicionar Impressora Virtual",empty:"Nenhuma impressora virtual configurada. Adicione uma para começar."},bindIp:{title:"Interface de Rede",placeholder:"Selecionar interface...",hint:"Interface de rede para esta impressora virtual. Deve ser única por impressora."},proxy:{accessCodeHint:"No modo proxy, use o código de acesso da impressora alvo no slicer. A conexão é encaminhada de forma transparente para a impressora real."},addDialog:{title:"Adicionar Impressora Virtual",name:"Nome",hint:"Você pode configurar o código de acesso, impressora alvo e outras configurações após a criação.",create:"Criar"},deleteConfirm:{title:"Excluir Impressora Virtual",message:'Tem certeza que deseja excluir "{{name}}"? Isso irá parar todos os serviços desta impressora.'}},modelViewer:{openInSlicer:"Abrir no Slicer",tabs:{model:"Modelo 3D",gcode:"Pré-visualização G-code"},notAvailable:"Não disponível",notSliced:"Não fatiado",plates:"Placas",allPlates:"Todas as Placas",plateNumber:"Placa {{number}}",plateCount:"{{count}} placa",plateCount_other:"{{count}} placas",objectCount:"{{count}} objeto",objectCount_other:"{{count}} objetos",filamentCount:"{{count}} filamento",filamentCount_other:"{{count}} filamentos",eta:"ETA {{minutes}} min",noPreview:"Pré-visualização não disponível para este arquivo",pagination:{pageOf:"Página {{current}} de {{total}}",prev:"Anterior",next:"Próximo"},errors:{failedToLoad:"Falha ao carregar o arquivo",noMeshes:"Nenhuma malha encontrada no arquivo 3MF",unsupportedFormat:"Formato de arquivo não suportado"}},maintenanceDescriptions:{lubricateCarbonRods:"Aplique lubrificante nos eixos de carbono para um movimento suave",lubricateRails:"Aplique lubrificante nos trilhos lineares para um movimento suave",cleanNozzle:"Limpe o hotend e o bico para evitar entupimentos",checkBelts:"Verifique a tensão das correias para impressões precisas",cleanBuildPlate:"Limpe a placa de construção para melhor adesão",checkExtruder:"Verifique as engrenagens do extrusor quanto ao desgaste",checkCooling:"Verifique se os ventiladores de resfriamento estão funcionando corretamente",generalInspection:"Inspeção geral da impressora",cleanCarbonRods:"Limpe os eixos de carbono para reduzir o atrito",lubricateSteelRods:"Aplique lubrificante nas barras de aço para um movimento suave",cleanSteelRods:"Limpe as barras de aço para reduzir o atrito",cleanLinearRails:"Limpe os trilhos lineares para remover poeira e detritos",checkPtfeTube:"Verifique o tubo PTFE quanto ao desgaste ou danos",replaceHepaFilter:"Substitua o filtro HEPA para qualidade do ar",replaceCarbonFilter:"Substitua o filtro de carbono ativado",lubricateLeftNozzleRail:"Lubrifique o trilho do bico esquerdo (série H2)"},smartPlugs:{offline:"Offline",admin:"Admin",openPlugAdminPage:"Abrir o painel de administração da tomada inteligente",deleteSmartPlug:"Excluir Tomada Inteligente",turnOnSmartPlug:"Ligar Tomada Inteligente",turnOffSmartPlug:"Desligar Tomada Inteligente",turnOn:"Ligar",turnOff:"Desligar",addSmartPlug:{scanningNetwork:"Procurando na rede...",chooseEntity:"Escolha uma entidade...",connectionFailed:"Falha na conexão",searchEntities:"Pesquisar entidades...",searchPowerSensors:"Pesquisar sensores de energia...",searchEnergySensors:"Pesquisar sensores de energia...",placeholders:{plugName:"Tomada da Sala",mqttStateOnValue:"ON, true, 1",mqttSameAsPower:"Mesmo que o tópico de energia, ou diferente"}},linkedTo:"Vinculado a:",monitorOnly:"Apenas monitoramento",alerts:"Alertas",scheduleOn:"Ligar {{time}}",scheduleOff:"Desligar {{time}}",on:"Ligado",off:"Desligado",power:"Potência",kwhToday:"kWh Hoje",settings:"Configurações",automationSettings:"Configurações de automação",showInSwitchbar:"Mostrar na barra de interruptores",quickAccessSidebar:"Acesso rápido pela barra lateral",enabled:"Ativado",enableAutomation:"Ativar automação para este plugue",autoOn:"Auto Ligar",autoOnDescription:"Ligar quando a impressão iniciar",autoOff:"Auto Desligar",autoOffDescription:"Desligar quando a impressão terminar (única vez)",autoOffPersistent:"Manter ativado",autoOffPersistentDescription:"Permanecer ativado entre impressões em vez de única vez",turnOffDelayMode:"Modo de atraso para desligar",time:"Tempo",temp:"Temp",delayMinutes:"Atraso (minutos)",tempThreshold:"Limite de temperatura (°C)",tempThresholdDescription:"Desliga quando o bico esfria abaixo desta temperatura",edit:"Editar",deleteConfirm:'Tem certeza que deseja excluir "{{name}}"? Esta ação não pode ser desfeita.',turnOnConfirm:'Tem certeza que deseja ligar "{{name}}"?',turnOffConfirm:'Tem certeza que deseja desligar "{{name}}"? Isso cortará a energia do dispositivo conectado.',failedToTurn:'Falha ao {{action}} "{{name}}"',unknown:"Desconhecido",addTitle:"Adicionar plugue inteligente",editTitle:"Editar plugue inteligente",stopScanning:"Parar varredura",discoverTasmota:"Descobrir dispositivos Tasmota",foundDevices:"{{count}} dispositivo(s) encontrado(s) - clique para selecionar:",noDevicesFound:"Nenhum dispositivo Tasmota encontrado na sua rede",haNotConfigured:"Home Assistant não está configurado. Configure em",haSettingsPath:"Configurações → Rede → Home Assistant",selectEntity:"Selecionar entidade *",ipAddress:"Endereço IP *",nameLabel:"Nome *",username:"Usuário",password:"Senha",authHint:"Deixe vazio se seu dispositivo Tasmota não requer autenticação",linkToPrinter:"Vincular à impressora",noPrinter:"Sem impressora (apenas controle manual)",linkingDescription:"A vinculação permite ligar/desligar automaticamente ao iniciar/terminar impressão",powerAlerts:"Alertas de potência",alertAbove:"Alertar se acima (W)",alertBelow:"Alertar se abaixo (W)",alertDescription:"Receba notificações quando o consumo de energia ultrapassar estes limites. Deixe vazio para desativar essa direção.",dailySchedule:"Programação diária",turnOnAt:"Ligar às",turnOffAt:"Desligar às",scheduleDescription:"Ligar/desligar automaticamente o plugue nestes horários diariamente. Deixe vazio para pular essa ação.",showOnPrinterCard:"Mostrar no cartão da impressora",displayOnPrinterCard:"Exibir botão no cartão da impressora",connectedResult:"Conectado!",deviceLabel:"Dispositivo: {{name}} - ",stateLabel:"Estado: {{state}}",test:"Testar",delete:"Excluir",save:"Salvar",add:"Adicionar",cancel:"Cancelar",failedToStartScan:"Falha ao iniciar varredura",nameRequired:"Nome é obrigatório",entityRequired:"Entidade é obrigatória para plugues Home Assistant",mqttTopicRequired:"Pelo menos um tópico MQTT deve ser configurado para potência, energia ou monitoramento de estado",loadingEntities:"Carregando entidades...",loading:"Carregando...",failedToLoadEntities:"Falha ao carregar entidades: {{error}}",noEntitiesMatching:'Nenhuma entidade encontrada correspondente a "{{search}}"',noEntitiesAvailable:"Nenhuma entidade disponível",searchingEntities:"Buscando todas as entidades ({{count}} encontradas)",showingEntities:"Mostrando switch, light, input_boolean ({{count}} disponíveis)",energyMonitoringOptional:"Monitoramento de energia (Opcional)",energyMonitoringHint:"Pesquise e selecione sensores que fornecem dados de potência/energia.",powerSensorW:"Sensor de potência (W)",energyTodayKwh:"Energia hoje (kWh)",totalEnergyKwh:"Energia total (kWh)",noMatchingSensors:"Nenhum sensor correspondente",none:"Nenhum",mqttNotConfigured:"Broker MQTT não configurado. Defina o endereço do broker em",mqttSettingsPath:"Configurações → Rede → Publicação MQTT",mqttNotConfiguredSuffix:"(você não precisa ativar a publicação, apenas preencha os detalhes do broker).",mqttMonitorOnlyDescription:"Plugues MQTT recebem dados de potência/energia via assinatura MQTT. O controle liga/desliga não está disponível - use seu broker MQTT ou sistema de automação residencial.",powerMonitoring:"Monitoramento de potência",energyMonitoring:"Monitoramento de energia",stateMonitoring:"Monitoramento de estado",optional:"opcional",topic:"Tópico",jsonPath:"Caminho JSON",multiplier:"Multiplicador",onValue:"Valor ON",mqttPowerHint:`O caminho JSON extrai o valor do payload JSON (ex: "power_l1"). Deixe vazio se o tópico publica valores numéricos brutos. Use multiplicador 0.001 para mW→W, 1000 para kW→W.`,mqttEnergyHint:`O caminho JSON extrai o valor do payload JSON. Deixe vazio para valores brutos. Use multiplicador 0.001 para Wh→kWh, 1000 para MWh→kWh.`,mqttStateHint:`O caminho JSON extrai o valor do payload JSON. Deixe vazio para valores brutos. -Valor ON: a string exata que significa "ON". Deixe vazio para detecção automática (ON, true, 1).`,restControl:"Control",restOnUrl:"Turn ON URL",restOffUrl:"Turn OFF URL",restOnBody:"ON Request Body",restOffBody:"OFF Request Body",restMethod:"HTTP Method",restHeaders:"Custom Headers (JSON)",restStatusUrl:"Status URL",restStatusPath:"State JSON Path",restStatusOnValue:"ON Value",restPowerUrl:"URL de potência",restPowerPath:"Power JSON Path",restPowerMultiplier:"Multiplicador de potência",restEnergyUrl:"URL de energia",restEnergyPath:"Energy JSON Path",restEnergyMultiplier:"Multiplicador de energia",restUrlRequired:"At least one URL (ON or OFF) is required for REST plugs",restHeadersHint:'e.g. {"Authorization": "Bearer your-token"}',restBodyHint:'e.g. ON, {"state": "on"}',restStatusHint:"URL to poll for current state",restPathHint:"e.g. state or data.power.status",restPowerUrlHint:"URL separada para dados de potência (usa a URL de status se vazio)",restEnergyUrlHint:"URL separada para dados de energia (usa a URL de status se vazio)",restEnergyHint:"Cada valor pode usar sua própria URL ou recorrer à URL de status. Use multiplicadores para conversão de unidades (ex: 0.001 para converter Wh em kWh).",testConnection:"Test Connection",connectionSuccess:"Connection successful",noSwitchesInSwitchbar:"Nenhum interruptor na barra",enableSwitchbarHint:'Ative "Mostrar na barra de interruptores" em Configurações > Smart Plugs'},notifications:{providerTypes:{callmebot:"CallMeBot/WhatsApp",ntfy:"ntfy",pushover:"Pushover",telegram:"Telegram",email:"E-mail",discord:"Discord",webhook:"Webhook",homeassistant:"Home Assistant"},providerDescriptions:{email:"Notificações por e-mail SMTP",telegram:"Notificações via bot do Telegram",discord:"Enviar para canal do Discord via webhook",ntfy:"Notificações push gratuitas e auto-hospedáveis",pushover:"Notificações push simples e confiáveis",callmebot:"Notificações gratuitas via WhatsApp pelo CallMeBot",webhook:"POST HTTP genérico para qualquer URL",homeassistant:"Notificações persistentes no painel do Home Assistant"},lastSuccess:"Último: {{date}}",error:"Erro",printer:"Impressora:",allPrinters:"Todas as impressoras",sendTestNotification:"Enviar Notificação de Teste",eventSettings:"Configurações de Eventos",enabled:"Ativado",sendFromProvider:"Enviar notificações deste provedor",printEvents:"Eventos de Impressão",printerStatus:"Status da Impressora",amsAlarms:"Alarmes do AMS",amsHtAlarms:"Alarmes do AMS-HT",printQueue:"Fila de Impressão",start:"Início",plateCheck:"Verificação da Mesa",complete:"Concluído",failed:"Falhou",stopped:"Parado",progress:"Progresso",offline:"Offline",lowFilament:"Filamento Baixo",maintenance:"Manutenção",amsHumidity:"Umidade do AMS",amsTemp:"Temp. do AMS",amsHtHumidity:"Umidade do AMS-HT",amsHtTemp:"Temp. do AMS-HT",bedCooled:"Mesa Resfriada",firstLayer:"Primeira camada",quiet:"Silencioso",digest:"Resumo {{time}}",printStarted:"Impressão Iniciada",plateNotEmpty:"Mesa Não Vazia",plateNotEmptyDescription:"Objetos detectados antes da impressão",printCompleted:"Impressão Concluída",bedCooledLabel:"Mesa Resfriada",bedCooledDescription:"Mesa resfriou abaixo do limite após a impressão",firstLayerCompleteLabel:"Primeira camada concluída",firstLayerCompleteDescription:"Notificar com foto quando a primeira camada terminar",missingSpoolAssignmentLabel:"Atribuição de bobina ausente",missingSpoolAssignmentDescription:"Notificar quando a impressão iniciar e bandejas necessárias não tiverem bobina atribuída",printFailed:"Impressão Falhou",printStopped:"Impressão Parada",progressMilestones:"Marcos de Progresso",progressMilestonesDescription:"Notificar em 25%, 50%, 75%",printerOffline:"Impressora Offline",printerError:"Erro da Impressora",lowFilamentLabel:"Filamento Baixo",maintenanceDue:"Manutenção Necessária",maintenanceDueDescription:"Notificar quando manutenção for necessária",amsHumidityHigh:"Umidade Alta do AMS",amsHumidityHighDescription:"Umidade do AMS regular excede o limite",amsTemperatureHigh:"Temperatura Alta do AMS",amsTemperatureHighDescription:"Temperatura do AMS regular excede o limite",amsHtHumidityHigh:"Umidade Alta do AMS-HT",amsHtHumidityHighDescription:"Umidade do AMS-HT excede o limite",amsHtTemperatureHigh:"Temperatura Alta do AMS-HT",amsHtTemperatureHighDescription:"Temperatura do AMS-HT excede o limite",jobAdded:"Trabalho Adicionado",jobAddedDescription:"Trabalho adicionado à fila",jobAssigned:"Trabalho Atribuído",jobAssignedDescription:"Trabalho baseado em modelo atribuído à impressora",jobStarted:"Trabalho Iniciado",jobStartedDescription:"Trabalho da fila começou a imprimir",jobWaiting:"Trabalho Aguardando",jobWaitingDescription:"Trabalho aguardando filamento ou impressora",jobSkipped:"Trabalho Pulado",jobSkippedDescription:"Trabalho pulado (anterior falhou)",jobFailed:"Trabalho Falhou",jobFailedDescription:"Trabalho falhou ao iniciar",queueComplete:"Fila Concluída",queueCompleteDescription:"Todos os trabalhos da fila finalizados",quietHours:"Horário de Silêncio",noNotificationsDuring:"Sem notificações durante essas horas",editProviderToChangeQuietHours:"Edite o provedor para alterar o horário de silêncio",dailyDigest:"Resumo Diário",batchNotifications:"Agrupar notificações em um único resumo diário",sendAt:"Enviar às {{time}}",editProviderToChangeDigestTime:"Edite o provedor para alterar o horário do resumo",edit:"Editar",deleteProvider:"Excluir Provedor de Notificação",deleteConfirm:'Tem certeza que deseja excluir "{{name}}"? Isso não pode ser desfeito.',delete:"Excluir",addTitle:"Adicionar Provedor de Notificação",editTitle:"Editar Provedor de Notificação",nameLabel:"Nome *",namePlaceholder:"Minhas Notificações",providerTypeLabel:"Tipo de Provedor *",configuration:"Configuração",testConfiguration:"Testar Configuração",printerFilter:"Filtro de Impressora",onlyFromPrinter:"Enviar notificações apenas para eventos desta impressora",quietHoursDnd:"Horário de Silêncio (Não Perturbe)",quietStart:"Início",quietEnd:"Fim",dailyDigestLabel:"Resumo Diário",sendDigestAt:"Enviar resumo às",digestCollected:"Os eventos serão coletados e enviados como um único resumo neste horário",notificationEvents:"Eventos de Notificação",progressPercent:"(25%, 50%, 75%)",bedCooledAfterPrint:"(após conclusão da impressão)",cancel:"Cancelar",save:"Salvar",add:"Adicionar",nameRequired:"Nome é obrigatório",fieldRequired:"{{field}} é obrigatório",phoneNumber:"Número de Telefone",apiKey:"Chave da API",serverUrl:"URL do Servidor",topic:"Tópico",authToken:"Token de Autenticação",userKey:"Chave do Usuário",appToken:"Token do Aplicativo",priority:"Prioridade",botToken:"Token do Bot",chatId:"ID do Chat",smtpServer:"Servidor SMTP",smtpPort:"Porta SMTP",security:"Segurança",authentication:"Autenticação",username:"Usuário",password:"Senha",fromEmail:"E-mail de Origem",toEmail:"E-mail de Destino",webhookUrl:"URL do Webhook",payloadFormat:"Formato do Payload",authorization:"Autorização",titleFieldName:"Nome do Campo de Título",messageFieldName:"Nome do Campo de Mensagem",editTemplate:"Editar Modelo: {{name}}",titleLabel:"Título",bodyLabel:"Corpo",titlePlaceholder:"Título da notificação...",bodyPlaceholder:"Corpo da notificação...",availableVariables:"Variáveis Disponíveis",clickToInsert:"Clique para inserir na posição do cursor no corpo",livePreview:"Pré-visualização ao Vivo",hide:"Ocultar",show:"Mostrar",loadingPreview:"Carregando pré-visualização...",enterTemplateContent:"Insira o conteúdo do modelo para ver a pré-visualização",titlePreview:"Título:",bodyPreview:"Corpo:",resetToDefault:"Restaurar Padrão",titleRequired:"Título é obrigatório",bodyRequired:"Corpo é obrigatório",notificationLog:"Registro de Notificações",showFailedOnly:"Apenas falhas",last24Hours:"Últimas 24 horas",last7Days:"Últimos 7 dias",last30Days:"Últimos 30 dias",last90Days:"Últimos 90 dias",justNow:"Agora mesmo",noFailedNotifications:"Nenhuma notificação com falha",noNotificationsLogged:"Nenhuma notificação registrada",unknownProvider:"Provedor Desconhecido",logTitle:"Título",logMessage:"Mensagem",logError:"Erro",logProvider:"Provedor: {{type}}",logTime:"Hora: {{time}}",refresh:"Atualizar",clearOld:"Limpar Antigos",statsSummary:"Últimos {{days}} dias:",statsNotifications:"notificações",statsSent:"{{count}} enviadas",statsFailed:"{{count}} com falha",eventTypes:{print_start:"Impressão Iniciada",print_complete:"Impressão Concluída",print_failed:"Impressão Falhou",print_stopped:"Impressão Parada",print_progress:"Progresso",printer_offline:"Impressora Offline",printer_error:"Erro da Impressora",filament_low:"Filamento Baixo",maintenance_due:"Manutenção Necessária",test:"Teste"},userEmail:{title:"Notificações",emailNotifications:"Notificações por E-mail",emailNotificationsDesc:"Receba notificações por e-mail para seus próprios trabalhos de impressão. Os e-mails são enviados usando as configurações SMTP definidas na Autenticação Avançada.",sendingTo:"As notificações serão enviadas para",noEmailWarning:"Sua conta não tem um endereço de e-mail. Entre em contato com um administrador para adicionar um.",printJobNotifications:"Notificações de Trabalhos de Impressão",printJobNotificationsDesc:"Escolha quais eventos acionam notificações por e-mail para os trabalhos de impressão que você envia.",printJobStarts:"Início do Trabalho de Impressão",printJobStartsDesc:"Ser notificado quando seu trabalho de impressão começar.",printJobFinishes:"Conclusão do Trabalho de Impressão",printJobFinishesDesc:"Ser notificado quando seu trabalho de impressão concluir com sucesso.",printErrors:"Erros de Impressão",printErrorsDesc:"Ser notificado quando seu trabalho de impressão falhar ou encontrar um erro.",printJobStops:"Trabalho de Impressão Parado",printJobStopsDesc:"Ser notificado quando seu trabalho de impressão for cancelado ou parado.",saveSuccess:"Preferências de notificação salvas.",saveError:"Falha ao salvar preferências de notificação."}},richTextEditor:{bold:"Negrito",italic:"Itálico",underline:"Sublinhado",bulletList:"Lista com marcadores",numberedList:"Lista numerada",alignLeft:"Alinhar à esquerda",alignCenter:"Centralizar",alignRight:"Alinhar à direita",addLink:"Adicionar link",removeLink:"Remover link"},externalLinks:{noLinksConfigured:"Nenhum link externo configurado",deleteLink:"Excluir link",removeCustomIcon:"Remover ícone personalizado",openInNewTab:"Abrir em nova aba",placeholders:{linkName:"Meu Link"}},keyboardShortcuts:{title:"Atalhos de Teclado",navigation:"Navegação",archivesSection:"Arquivos",kProfilesSection:"K-Profiles",generalSection:"Geral",shortcuts:{goToPrinters:"Ir para Impressoras",goToArchives:"Ir para Arquivos",goToQueue:"Ir para Fila",goToStats:"Ir para Estatísticas",goToProfiles:"Ir para Perfis na Nuvem",goToSettings:"Ir para Configurações",focusSearch:"Focar na pesquisa",openUploadModal:"Abrir modal de upload",clearSelection:"Limpar seleção / desfocar input",contextMenu:"Menu de contexto nos cartões",refreshProfiles:"Atualizar perfis",newProfile:"Novo perfil",exitSelectionMode:"Sair do modo de seleção",showHelp:"Mostrar esta ajuda"},footer:"Pressione Esc ou clique fora para fechar"},notificationLog:{title:"Registro de Notificações",events:{printStarted:"Impressão Iniciada",printComplete:"Impressão Concluída",printFailed:"Impressão Falhou",printStopped:"Impressão Interrompida",progress:"Progresso",printerOffline:"Impressora Offline",printerError:"Erro na Impressora",lowFilament:"Filamento Baixo",maintenanceDue:"Manutenção Pendente",test:"Teste"},timeAgo:{justNow:"Agora mesmo",minutesAgo:"há {{minutes}} minutos",hoursAgo:"há {{hours}} horas"}},restoreBackup:{title:"Restaurar Backup",restoring:"Restaurando...",restoreComplete:"Restauração Concluída",restoreFailed:"Falha na Restauração",importSettings:"Importar configurações de um arquivo de backup",pleaseWait:"Aguarde enquanto seus dados estão sendo restaurados",clickToSelect:"Clique para selecionar o arquivo de backup (.json ou .zip)",howDuplicateHandling:"Como funciona o tratamento de duplicatas:",categories:{printers:"Impressoras",smartPlugs:"Tomadas Inteligentes",notificationProviders:"Provedores de Notificação",filaments:"Filamentos",archives:"Arquivos",pendingUploads:"Uploads Pendentes",settingsTemplates:"Configurações e Modelos"},matchingInfo:{printers:"correspondem pelo número de série",smartPlugs:"correspondem pelo endereço IP",notificationProviders:"correspondem pelo nome",filaments:"correspondem pelo nome + tipo + marca",archives:"correspondem pelo hash do conteúdo",pendingUploads:"correspondem pelo nome do arquivo",settingsTemplates:"sempre sobrescrito"},replaceExisting:"Substituir dados existentes",keepExisting:"Manter dados existentes",replaceDescription:"Substituir itens que já existem com os dados do backup",keepDescription:"Restaurar apenas itens que não existem",caution:"Atenção:",cautionText:"Sobrescrever substituirá suas configurações atuais pelos dados do backup. Os códigos de acesso da impressora nunca são sobrescritos por segurança.",itemsRestored:"Itens Restaurados",itemsSkipped:"Itens Ignorados",restored:"Restaurado",skipped:"Ignorado (já existe)",filesLabel:"Arquivos (3MF, miniaturas, etc.)",newApiKeysGenerated:"Novas Chaves API Geradas",newApiKeysWarning:"Essas chaves são exibidas apenas uma vez. Copie-as agora!",processingBackup:"Processando arquivo de backup...",noDataFound:"Nenhum dado foi encontrado para restaurar no arquivo de backup.",failedToRestore:"Falha ao restaurar o backup. Verifique o formato do arquivo."},backupExport:{title:"Exportar Backup",selectData:"Selecione os dados a incluir",selectAll:"Selecionar Todos",selectNone:"Selecionar Nenhum",categoryDescriptions:{settings:"Idioma, tema, preferências de atualização",notifications:"ntfy, Pushover, Discord, etc.",templates:"Modelos de mensagens personalizadas",smartPlugs:"Configurações de tomadas Tasmota",externalLinks:"Links da barra lateral para serviços externos",printers:"Informações da impressora (códigos de acesso excluídos)",plateDetection:"Imagens de referência de placa vazia",filaments:"Tipos e custos de filamento",maintenance:"Cronogramas de manutenção personalizados",archives:"Todos os dados de impressão + arquivos (3MF, miniaturas, fotos)",projects:"Projetos, itens de BOM e anexos",pendingUploads:"Uploads de impressora virtual aguardando revisão",apiKeys:"Chaves API de webhook (novas chaves geradas na importação)"},requiresPrinters:"Requer que as impressoras sejam selecionadas",zipFileWarning:"Um arquivo ZIP será criado.",zipFileDescription:"Inclui todos os arquivos 3MF, miniaturas, timelapses e fotos. Isso pode levar algum tempo e resultar em um arquivo grande.",includeAccessCodes:"Incluir Códigos de Acesso",includeAccessCodesDescription:"Para transferir para outra máquina",includeAccessCodesWarning:"Os códigos de acesso serão incluídos em texto simples. Mantenha este arquivo de backup seguro!",categoriesSelected:"{{selectedCount}} categorias selecionadas"},pendingUploads:{placeholders:{notes:"Adicione notas sobre esta impressão..."},discardUpload:"Descartar Upload",archiveAllUploads:"Arquivar Todos os Uploads",discardAllUploads:"Descartar Todos os Uploads",archive:"Arquivar",timeAgo:{justNow:"Agora mesmo",minutesAgo:"há {{minutes}} minutos",hoursAgo:"há {{hours}} horas",daysAgo:"há {{days}} dias"}},apiBrowser:{placeholders:{requestBody:"Corpo da requisição JSON...",searchEndpoints:"Pesquisar endpoints..."}},configureAmsSlot:{title:"Configurar Slot AMS",slotConfigured:"Slot Configurado!",configuringSlot:"Configurando slot:",slotLabel:"{{ams}} Slot {{slot}}",searchPresets:"Pesquisar predefinições...",colorPlaceholder:"Nome da cor ou hex (ex.: marrom, FF8800)",clearCustomColor:"Limpar cor personalizada",noCloudPresets:"Nenhuma predefinição na nuvem. Faça login no Bambu Cloud para sincronizar.",noPresetsAvailable:"Nenhuma predefinição disponível. Faça login no Bambu Cloud ou importe perfis locais.",noMatchingPresets:"Nenhuma predefinição correspondente encontrada.",custom:"Personalizado",builtin:"Integrado",settingsSentToPrinter:"Configurações enviadas para a impressora",filamentProfile:"Perfil de Filamento",kProfileLabel:"Perfil K (Avanço de Pressão)",filteringFor:"Filtrando por: {{material}}",noKProfile:"Nenhum perfil K (usar padrão 0.020)",noMatchingKProfiles:"Nenhum perfil K correspondente encontrado. O K padrão=0.020 será usado.",selectFilamentFirst:"Selecione um perfil de filamento primeiro",kFromCalibration:"K={{value}} da calibração da impressora",customColorLabel:"Cor Personalizada (opcional)",presetColors:"Cores de {{name}}:",showLessColors:"Mostrar menos cores",showMoreColors:"Mostrar mais cores",clear:"Limpar",hexLabel:"Hex: #{{hex}}",resetting:"Redefinindo...",resetSlot:"Redefinir Slot",cancel:"Cancelar",configuring:"Configurando...",configureSlot:"Configurar Slot"},githubBackup:{title:"Backup do GitHub",history:"Histórico",downloadBackup:"Baixar Backup",restoreBackup:"Restaurar Backup",noBackupsYet:"Nenhum backup ainda"},emailSettings:{placeholders:{fromName:"BamBuddy"}},tagManagement:{searchTags:"Pesquisar tags...",renameTag:"Renomear tag",deleteTag:"Excluir tag"},notificationTemplates:{placeholders:{title:"Título da notificação...",body:"Corpo da notificação..."}},batchTag:{placeholders:{newTag:"Digite uma nova tag..."}},photoGallery:{deletePhoto:"Excluir foto"},filamentHoverCard:{copySpoolUuid:"Copiar UUID do carretel"},kProfilesView:{hasNote:"Possui nota",copyProfile:"Copiar perfil"},layout:{openMenu:"Abrir menu",noPermissionSystemInfo:"Você não tem permissão para visualizar informações do sistema"},dashboard:{dragToReorder:"Arrastar para reordenar",hideWidget:"Ocultar widget"},notificationProviderCard:{deleteNotificationProvider:"Excluir provedor de notificação"},fileManagerModal:{closeFileManager:"Fechar gerenciador de arquivos",sortFiles:"Ordenar arquivos",goToParentFolder:"Ir para a pasta pai",threeView:"Visualização 3D"},embeddedCameraViewer:{refreshStream:"Atualizar stream",close:"Fechar",zoomOut:"Reduzir zoom",resetZoom:"Redefinir zoom",zoomIn:"Aumentar zoom",dragToResize:"Arrastar para redimensionar"},timelapseViewer:{skipBack5s:"Voltar 5s",skipForward5s:"Avançar 5s"},notificationProviders:{descriptions:{email:"Notificações por email SMTP",telegram:"Notificações via bot do Telegram",discord:"Enviar para canal do Discord via webhook",ntfy:"Notificações push gratuitas e auto-hospedáveis",pushover:"Notificações push simples e confiáveis",callmebot:"Notificações gratuitas via WhatsApp pelo CallMeBot",webhook:"POST HTTP genérico para qualquer URL"}},logViewer:{searchPlaceholder:"Pesquisar mensagem ou nome do logger...",noLogEntries:"Nenhuma entrada de log encontrada"},switchbarPopover:{noSwitchesInSwitchbar:"Nenhum switch na barra de switches"},projectPageModal:{placeholders:{title:"Título",designer:"Designer",license:"Licença",description:"Digite a descrição...",profileTitle:"Título do perfil",profileDescription:"Descrição do perfil..."}},spoolmanSettings:{},time:{unknown:"-",waiting:"Aguardando",justNow:"Agora mesmo",now:"Agora",minsAgo:"{{count}}min atrás",inMins:"em {{count}}min",hoursAgo:"{{count}}h atrás",inHours:"em {{count}}h",daysAgo:"{{count}}d atrás",inDays:"em {{count}}d"},spoolbuddy:{nav:{dashboard:"Painel",ams:"AMS",inventory:"Inventário",writeTag:"Escrever",settings:"Configurações"},status:{nfcReady:"NFC pronto",nfcOff:"NFC desligado",offline:"Offline",online:"Online",noPrinters:"Sem impressoras",deviceOffline:"Dispositivo offline",waitingConnection:"Aguardando conexão do dispositivo...",systemReady:"Sistema pronto",status:"Status"},dashboard:{readyToScan:"Pronto para escanear",idleMessage:"Coloque um carretel na balança para identificá-lo",nfcHint:"A tag NFC será lida automaticamente",device:"Dispositivo",syncWeight:"Sincronizar peso",weightSynced:"Sincronizado!",unknownTag:"Tag desconhecida",newTag:"Nova tag detectada",onScale:"na balança",linkSpool:"Vincular ao carretel",linkTagTitle:"Vincular tag ao carretel",linkTag:"Vincular tag",selectSpool:"Selecione um carretel para vincular a esta tag:",noUntagged:"Nenhum carretel sem tag encontrado",tagDetected:"Tag detectada",noTag:"Sem tag",tagId:"Tag",grossWeight:"Peso bruto",spoolSize:"Tamanho do carretel",close:"Fechar",currentSpool:"Carretel Atual"},modal:{spoolDetected:"Carretel Detectado",assignToAms:"Atribuir ao AMS",syncWeight:"Sincronizar Peso",weightSynced:"Sincronizado!",syncing:"Sincronizando...",newTagDetected:"Nova Tag Detectada",addToInventory:"Adicionar ao Inventário",assignToAmsTitle:"Atribuir ao AMS",selectSlot:"Selecionar um slot",assign:"Atribuir",assigning:"Atribuindo...",assignSuccess:"Atribuído!",assignError:"Falha ao atribuir carretel. Tente novamente.",noPrinterSelected:"Selecionar uma impressora...",noAmsDetected:"Nenhum AMS detectado nesta impressora",slot:"Slot"},weight:{noReading:"Sem leitura",stable:"Estável",measuring:"Medindo...",tare:"Tarar",calibrate:"Calibrar"},spool:{remaining:"Restante",material:"Material",brand:"Marca",color:"Cor",coreWeight:"Núcleo",labelWeight:"Rótulo",scaleWeight:"Balança",netWeight:"Líquido",lastUsed:"Último uso"},ams:{noData:"Nenhum AMS detectado",connectAms:"Conecte um AMS para ver os slots",noPrinter:"Nenhuma impressora selecionada",selectPrinter:"Selecione uma impressora na barra superior",printerDisconnected:"Impressora desconectada",humidity:"Umidade",level:"Nível",active:"Ativo",slot:"Slot",empty:"Vazio"},inventory:{search:"Buscar carretéis...",empty:"Nenhum carretel no inventário",noResults:"Nenhum carretel correspondente",spools:"carretéis",addSpool:"Adicionar carretel"},settings:{tabDevice:"Dispositivo",tabDisplay:"Tela",tabScale:"Balança",tabUpdates:"Atualizações",nfcReader:"Leitor NFC",type:"Tipo",connection:"Conexão",notConnected:"N/A",deviceInfo:"Info do dispositivo",hostname:"Host",uptime:"Tempo de atividade",brightness:"Brilho",saved:"Salvo",noBacklight:"Nenhuma retroiluminação DSI detectada. O controle de brilho requer uma tela DSI.",screenBlank:"Tempo para desligar tela",screenBlankDesc:"A tela desliga após inatividade. Toque para despertar.",displayNote:"O brilho é aplicado como filtro de software.",scaleCalibration:"Calibração da balança",currentWeight:"Peso atual",tareOffset:"Tara",calFactor:"Fator",knownWeight:"Peso conhecido",calStep1:"Remova todos os itens da balança e pressione Definir zero.",calStep2:"Coloque o peso conhecido na balança.",setZero:"Definir zero",calibrateNow:"Calibrar",calibrated:"Calibrado",tareSet:"Comando de tara enviado. Aguardando dispositivo...",tareFailed:"Falha ao enviar comando de tara",zeroSet:"Ponto zero definido. Coloque o peso conhecido na balança.",calibrationDone:"Calibração concluída!",calibrationFailed:"Falha na calibração",lastCalibrated:"Última calibração",stable:"Estável",settling:"Estabilizando...",firmware:"Firmware",scale:"Balança",noDevice:"Nenhum dispositivo SpoolBuddy encontrado",daemonVersion:"Versão do daemon",currentVersion:"Atual",versionPending:"Aguardando daemon...",checking:"Verificando...",checkUpdates:"Verificar atualizações",updateAvailable:"Atualização disponível",updateInstructions:"Atualize via SSH: execute o script de instalação do SpoolBuddy.",upToDate:"Atualizado",includeBeta:"Incluir versões beta"},writeTag:{tabExisting:"Bobina existente",tabNew:"Nova bobina",tabReplace:"Substituir tag",searchPlaceholder:"Buscar por material, cor, marca...",noUntaggedSpools:"Nenhuma bobina sem tag",noTaggedSpools:"Nenhuma bobina com tag",selectSpool:"Selecione uma bobina e coloque um NTAG no leitor",placeTag:"Coloque um NTAG no leitor",tagReady:"Tag detectado — pronto para gravar",writeTag:"Gravar Tag",replaceTag:"Substituir Tag",writing:"Gravando tag...",waiting:"Aguardando SpoolBuddy...",writeSuccess:"Tag gravado com sucesso!",writeFailed:"Falha na gravação",queueFailed:"Falha ao enfileirar comando de gravação",tryAgain:"Tentar novamente",cancel:"Cancelar",replaceWarning:"O tag antigo será desvinculado. O novo tag o substituirá.",deviceOffline:"SpoolBuddy está offline",material:"Material",colorName:"Nome da cor",color:"Cor",brand:"Marca",weight:"Peso (g)",createSpool:"Criar bobina",creating:"Criando...",spoolCreated:"Bobina criada! Pronto para gravar.",createFailed:"Falha ao criar bobina"},quickMenu:{printerPower:"Energia da impressora",systemControls:"Sistema",restartDaemon:"Reiniciar daemon",restartBrowser:"Reiniciar navegador",reboot:"Reiniciar",shutdown:"Desligar",swipeToClose:"Deslize para baixo para fechar",confirmTitle:"Confirmar",confirmShutdown:"Tem certeza de que deseja desligar o SpoolBuddy? Você precisará de acesso físico para ligá-lo novamente.",confirmReboot:"Tem certeza de que deseja reiniciar o SpoolBuddy?",confirmRestartDaemon:"Reiniciar o daemon do SpoolBuddy? NFC e balança ficarão temporariamente indisponíveis.",confirmRestartBrowser:"Reiniciar o navegador kiosk? A tela ficará brevemente preta.",confirm:"Confirmar",confirmPlugOn:"Ligar {{name}}?",confirmPlugOff:"Desligar {{name}}?",turnOn:"Ligar",turnOff:"Desligar"}},bugReport:{title:"Reportar um bug",description:"Descrição",descriptionPlaceholder:"O que deu errado? Por favor, descreva o problema...",email:"Email (opcional)",emailPlaceholder:"seu@email.com.br",emailPrivacy:"Se fornecido, seu email será incluído em uma seção recolhida da issue no GitHub para que o mantenedor possa entrar em contato.",screenshot:"Captura de tela",uploadOrPaste:"Enviar, colar ou arrastar uma imagem",dataCollectedSummary:"Quais dados são incluídos no relatório?",dataIncluded:"Incluídos:",dataIncludedList:"Versão do app, SO, arquitetura, versão Python, estatísticas do banco de dados (apenas contagens), modelos de impressora, quantidade de bicos, versões de firmware, status de conexão, status de integrações (Spoolman, MQTT, HA), configurações não sensíveis, contagem de interfaces de rede, detalhes Docker, versões de dependências.",dataNeverIncluded:"Nunca incluídos:",dataNeverIncludedList:"Nomes de impressoras, números de série, códigos de acesso, senhas, endereços IP, endereços de email, chaves de API, tokens, URLs de webhook, nomes de host ou nomes de usuário.",submit:"Enviar",startLogging:"Iniciar log de depuração",stepEnableLogging:"Log de depuração ativado",stepReproduce:"Reproduza o problema agora",stepStopLogging:"Parar & enviar relatório",stopAndSubmit:"Parar & Enviar",maxDuration:"Para automaticamente após {{minutes}} min",stoppingLogs:"Coletando logs & enviando...",submitting:"Enviando relatório de bug...",submitSuccess:"Relatório de bug enviado com sucesso!",submitFailed:"Falha ao enviar relatório de bug",thankYou:"Obrigado!",submitted:"Seu relatório de bug foi enviado.",viewIssue:"Ver issue",unexpectedError:"Ocorreu um erro inesperado"},failureDetection:{title:"Detecção de Falhas por IA",description:"Monitora impressões via API ML do Obico auto-hospedada e age automaticamente em falhas detectadas.",mlUrl:"URL da API ML do Obico",mlUrlHint:"URL base do seu contêiner Obico ml_api auto-hospedado (ex.: http://192.168.1.10:3333).",test:"Testar",testSuccess:"API ML acessível e operacional.",testFailed:"Não foi possível acessar a API ML.",sensitivity:"Sensibilidade",sensitivityLow:"Baixa (menos falsos positivos)",sensitivityMedium:"Média (equilibrada)",sensitivityHigh:"Alta (detecção precoce, mais falsos positivos)",sensitivityHint:"Ajusta os limiares de confiança que disparam avisos e falhas.",action:"Ação em falha detectada",actionNotify:"Apenas notificar",actionPause:"Pausar impressão",actionPauseOff:"Pausar e cortar energia",pollInterval:"Intervalo de verificação (segundos)",pollIntervalHint:"Frequência de verificação de cada impressora durante a impressão. Mínimo 5s, máximo 120s.",externalUrlMissing:"External URL is not set.",externalUrlHint:"The ML API fetches the camera snapshot by URL. Set the External URL in General settings so the ML API container can reach Bambuddy.",perPrinterTitle:"Impressoras monitoradas",perPrinterHint:"Escolha quais impressoras o serviço de detecção monitora.",monitorAll:"Monitorar todas as impressoras conectadas",statusTitle:"Status",serviceRunning:"Serviço em execução",thresholds:"Limiares baixo / alto",activePrinters:"Impressões ativas",noActivePrints:"Nenhuma impressão em andamento.",historyTitle:"Detecções recentes",noHistory:"Nenhuma detecção ainda."}},Xue={nav:{printers:"打印机",archives:"归档",queue:"队列",stats:"统计",profiles:"配置文件",maintenance:"维护",projects:"项目",inventory:"耗材",files:"文件管理器",notifications:"通知",settings:"设置",system:"系统",collapseSidebar:"收起侧边栏",expandSidebar:"展开侧边栏",update:"更新",updateAvailable:"有可用更新:v{{version}}",updateAvailableBanner:"版本 {{version}} 已发布!",viewUpdate:"查看更新",viewOnGithub:"在 GitHub 上查看",keyboardShortcuts:"键盘快捷键 (?)",switchToLight:"切换到浅色模式",switchToDark:"切换到深色模式",smartSwitches:"智能开关",logout:"退出登录"},common:{save:"保存",saving:"保存中...",cancel:"取消",delete:"删除",edit:"编辑",add:"添加",close:"关闭",confirm:"确认",loading:"加载中...",error:"错误",success:"成功",warning:"警告",enabled:"已启用",disabled:"已禁用",yes:"是",no:"否",on:"开",off:"关",all:"全部",none:"无",search:"搜索",filter:"筛选",sort:"排序",refresh:"刷新",download:"下载",upload:"上传",uploading:"上传中...",uploadFailed:"上传失败",actions:"操作",status:"状态",name:"名称",description:"描述",date:"日期",time:"时间",hours:"小时",minutes:"分钟",seconds:"秒",days:"天",enable:"启用",disable:"禁用",permissions:"权限",noPrinters:"未配置打印机",noData:"暂无数据",linkNotFound:"未找到链接",required:"必填",optional:"可选",dismiss:"关闭",apply:"应用",reset:"重置",export:"导出",import:"导入",clear:"清除",selectAll:"全选",deselectAll:"取消全选",noChange:"— 不更改 —",unchanged:"未更改",unassigned:"未分配",unknown:"未知",unknownError:"未知错误",today:"今天",tomorrow:"明天",asap:"尽快",overdue:"已逾期",now:"现在",collapse:"收起",expand:"展开",viewArchive:"查看归档",viewInFileManager:"在文件管理器中查看",addedBy:"由 {{username}} 添加",prints:"次打印",more:"还有 {{count}} 个",ascending:"升序",descending:"降序",back:"返回",copy:"复制",copied:"已复制!",printer:"打印机",remove:"移除",type:"类型",print:"打印",rename:"重命名",move:"移动",create:"创建",duplicate:"复制",left:"左",right:"右"},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:{name:"名称",status:"状态",model:"型号",location:"位置",ascending:"升序排列",descending:"降序排列"},cardSize:{small:"小卡片",medium:"中卡片",large:"大卡片",extraLarge:"超大卡片"},hideOffline:"隐藏离线",nextAvailable:"下一个可用",powerOn:"开机",offlinePrintersWithPlugs:"带智能插座的离线打印机",noPrintersConfigured:"尚未配置打印机",search:"搜索打印机...",noSearchResults:"没有打印机符合您的搜索或筛选条件",filter:{allStatuses:"所有状态",allLocations:"所有位置"},readyToPrint:"准备打印",external:"外部",extL:"外置左",extR:"外置右",deleteArchives:"删除打印归档",noLabel:"无标签",printPreview:"打印预览",width:"宽度",height:"高度",noObjectsFound:"未找到对象",objectsLoadedOnPrintStart:"对象在打印开始时加载",willBeSkipped:"将被跳过",name:"名称",serialCannotBeChanged:"序列号无法更改",locationHelp:"用于分组打印机和筛选队列任务",wifiSignal:{veryWeak:"非常弱",weak:"弱",fair:"一般",good:"良好",excellent:"优秀"},maintenanceUpToDate:"所有维护均已完成 - 点击查看",chamberLightOn:"打开腔室灯",chamberLightOff:"关闭腔室灯",files:"文件",browseFiles:"浏览打印机文件",autoOffAfterPrint:"打印后自动关机",autoOffExecuted:"已执行自动关机 - 开启打印机以重置",hmsErrors:"HMS 错误",viewHmsErrors:"查看 {{count}} 个 HMS 错误",resume:"继续",pause:"暂停",stop:"停止",camera:"摄像头",skipObject:"跳过对象",reconnect:"重新连接",forceRefresh:"强制刷新",forceRefreshSuccess:"已请求刷新",mqttDebug:"MQTT 调试",printerInformation:"打印机信息",copyToClipboard:"复制",copied:"已复制!",state:"状态",wifiSignalLabel:"WiFi 信号",developerMode:"开发者模式",enabled:"已启用",disabled:"已禁用",addedOn:"添加日期",sdCard:"SD 卡",inserted:"已插入",notInserted:"未插入",totalPrintHours:"打印时长",activeNozzle:"当前:{{nozzle}} 喷嘴",nozzleRack:"喷嘴架",nozzleDocked:"已停靠",nozzleMounted:"已安装",nozzleActive:"使用中",nozzleIdle:"空闲",nozzleDiameter:"直径",nozzleType:"类型",nozzleStatus:"状态",nozzleFilament:"耗材",nozzleWear:"磨损",nozzleMaxTemp:"最高温度",nozzleSerial:"序列号",nozzleHardenedSteel:"硬化钢",nozzleStainlessSteel:"不锈钢",nozzleTungstenCarbide:"碳化钨",nozzleFlow:"流量",nozzleHighFlow:"高流量",nozzleStandardFlow:"标准",firmwareUpdate:"固件更新",firmwareInstructions:"在打印机触摸屏上,前往",firmwareNav:"导航到",settings:"设置",firmware:"固件",discoverPrinters:"发现打印机",searching:"搜索中...",manualEntry:"手动输入",addFromCloud:"从云端添加",toast:{printerDeleted:"打印机已删除",missingSpoolAssignment:"已在{{printer}}上开始打印。以下料槽未分配耗材: {{slots}}",printerAdded:"打印机已添加",printerUpdated:"打印机已更新",failedToDelete:"删除打印机失败",failedToAdd:"添加打印机失败",failedToUpdate:"更新打印机失败",commandSent:"命令已发送",failedToSendCommand:"发送命令失败",turnedOn:"{{name}} 已开启",failedToPowerOn:"开启 {{name}} 失败",scriptTriggered:"脚本已触发",printStopped:"打印已停止",printPaused:"打印已暂停",printResumed:"打印已继续",referenceDeleted:"参考已删除",detectionAreaSaved:"检测区域已保存",failedToRunScript:"运行脚本失败",failedToStopPrint:"停止打印失败",failedToPausePrint:"暂停打印失败",failedToResumePrint:"继续打印失败",failedToControlChamberLight:"控制腔室灯失败",failedToSetSpeed:"设置打印速度失败",failedToUpdateSetting:"更新设置失败",failedToSkipObjects:"跳过对象失败",failedToRereadRfid:"重新读取 RFID 失败",failedToCheckPlate:"检查打印板失败",failedToUpdateLabel:"更新标签失败",failedToDeleteReference:"删除参考失败",failedToSaveDetectionArea:"保存检测区域失败",plateCheckEnabled:"打印板检查已启用",plateCheckDisabled:"打印板检查已禁用",calibrationSaved:"校准已保存!",calibrationFailed:"校准失败",rfidRereadInitiated:"已发起 RFID 重新读取"},connection:{connected:"已连接",offline:"离线"},queue:{inQueue:"队列中有 {{count}} 个打印任务",inQueue_plural:"队列中有 {{count}} 个打印任务"},controls:"控制",rfid:{reread:"重新读取 RFID"},bedJog:{title:"移动热床",bed:"热床",step:"步长 (mm)",up:"热床上移",down:"热床下移",disabledWhilePrinting:"打印中已禁用",notHomedTitle:"打印机未归零",notHomedMessage:"自上次打印以来 Z 轴尚未归零。请先归零 Z 以确保安全定位,或者直接移动 — 软限位将被绕过。",homeZ:"归零 Z",moveAnyway:"强制移动",homingStarted:"Z 轴归零中…"},permission:{noAdd:"您没有添加打印机的权限",noEdit:"您没有编辑打印机的权限",noDelete:"您没有删除打印机的权限",noControl:"您没有控制打印机的权限",noFiles:"您没有访问打印机文件的权限",noAmsRfid:"您没有重新读取 AMS RFID 的权限",noSmartPlugControl:"您没有控制智能插座的权限",noCamera:"您没有查看摄像头的权限"},modal:{addTitle:"添加打印机",editTitle:"编辑打印机",myPrinter:"我的打印机",selectModel:"选择型号...",locationGroup:"位置 / 分组(可选)",locationPlaceholder:"例如:工作室、办公室、地下室",autoArchiveLabel:"自动归档已完成的打印",fromPrinterSettings:"来自打印机设置",modelOptional:"型号(可选)",saveChanges:"保存更改"},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:{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:"关机"},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:{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:"启动发现失败"},drying:{start:"开始干燥",stop:"停止干燥",temperature:"温度",duration:"时长",hours:"小时",timeRemaining:"剩余 {{time}}",active:"干燥中",notSupported:"不支持干燥",powerRequired:"连接AMS电源适配器以启用干燥",startingDrying:"正在启动干燥...",stoppingDrying:"正在停止干燥...",rotateTray:"干燥时旋转料盘"},filaments:"耗材",openCameraOverlay:"打开摄像头叠加层",openCameraWindow:"在新窗口中打开摄像头",firmwareUpdateAvailable:"固件更新可用:{{current}} → {{latest}}",firmwareUpToDate:"固件 {{version}} — 已是最新",firmwareUpdateButton:"更新",plateDetection:{noPermission:"您没有更新打印机的权限",enabledClick:"打印板检查已启用 - 点击禁用",disabledClick:"打印板检查已禁用 - 点击启用",manageCalibration:"管理打印板检测校准",calibrationRequired:"需要校准",calibrationInstructions:"请确保构建板完全空置,然后点击校准。",calibrationDescription:"校准会拍摄空置打印板的参考图像。后续检查将与此参考进行比较以检测物体。",calibrationTip:"提示:您最多可以为不同的打印板存储5个校准。系统会在检查时自动使用最佳匹配。",plateEmpty:"打印板似乎是空的",objectsDetected:"在打印板上检测到物体",confidence:"置信度",difference:"差异",analysisPreview:"分析预览:",analysisLegend:"绿色框 = 检测区域,红色覆盖 = 与校准的差异",savedReferences:"已保存的参考 ({{count}}/{{max}})",deleteReference:"删除参考",labelPlaceholder:"标签...",clickToEdit:"{{label}} - 点击编辑",clickToAddLabel:"点击添加标签"},speed:{title:"打印速度",silent:"静音 (50%)",standard:"标准 (100%)",sport:"运动 (124%)",ludicrous:"疯狂 (166%)"},airduct:{title:"风道模式",cooling:"制冷",heating:"加热"},noSdCard:"无SD",door:{open:"开",closed:"关"},fans:{partCooling:"零件冷却风扇",auxiliary:"辅助风扇",chamber:"腔室风扇"},clickToViewHmsErrors:"点击查看 HMS 错误",estimatedCompletion:"预计完成时间",plateNumber:"板 {{number}}",slotOptions:"槽位选项",amsPopup:{friendlyName:"AMS 名称",friendlyNamePlaceholder:"例如 AMS 友好名称",serialNumber:"序列号",firmwareVersion:"固件",save:"保存",clear:"清除",noEditPermission:"您没有重命名 AMS 单元的权限"},firmwareModal:{title:"固件更新",titleUpToDate:"固件信息",currentVersion:"当前版本:",latestVersion:"最新版本:",releaseNotes:"发布说明",checkingPrereqs:"正在检查前提条件...",sdCardReady:"SD 卡已就绪。点击下方上传固件。",uploadedSuccess:"固件已上传到 SD 卡!",applyInstructions:"在打印机上应用更新:",step1:"在打印机触摸屏上,前往设置",step2:"导航到固件",step3:"选择从 SD 卡更新",step4:"更新将需要 10-20 分钟",done:"完成",starting:"启动中...",uploadFirmware:"上传固件",uploadFailed:"上传启动失败:{{error}}",uploadedToast:"固件已上传!请在打印机屏幕上触发更新。"},accessCodePlaceholder:"留空以保持当前值",roi:{title:"检测区域 (ROI)",xStart:"X 起点",yStart:"Y 起点",width:"宽度",height:"高度",instruction:"调整检测区域以聚焦到构建板。预览中的绿色框显示当前区域。"},developerModeWarning:"以下打印机未启用开发者局域网模式:{{names}}。某些功能可能无法使用。",howToEnable:"如何启用",incompatibleFile:"此文件是为 {{slicedFor}} 切片的,但该打印机是 {{printerModel}}",dropNotPrintable:"只能打印 .gcode 和 .gcode.3mf 文件",dropToPrint:"拖放以打印",cannotPrint:"打印机忙碌"},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:"二维码",viewPhotos:"查看照片",viewPhotosCount:"查看照片 ({{count}})",projectPage:"项目页面",addToFavorites:"添加到收藏",removeFromFavorites:"从收藏中移除",edit:"编辑",goToProject:"前往项目:{{name}}",addToProject:"添加到项目",removeFromProject:"从项目中移除",loading:"加载中...",noProjectsAvailable:"无可用项目",select:"选择",deselect:"取消选择",delete:"删除"},permission:{noReprint:"您没有重新打印此归档的权限",noAddToQueue:"您没有添加到队列的权限",noUpdateArchives:"您没有更新归档的权限",noUploadFiles:"您没有上传文件的权限",noDownload:"您没有下载归档的权限",noCopyLink:"您没有复制下载链接的权限",noDelete:"您没有删除此归档的权限",noCreate:"您没有创建归档的权限"},card:{previousPlate:"上一个板",nextPlate:"下一个板",plateNumber:"板 {{index}}",moreOptions:"右键查看更多选项",addToFavorites:"添加到收藏",removeFromFavorites:"从收藏中移除",cancelled:"已取消",failed:"失败",duplicate:"重复",duplicateTitle:"此模型之前已打印过",openSource3mf:"在 Bambu Studio 中打开源 3MF(右键查看更多选项)",downloadF3d:"下载 Fusion 360 设计文件",viewTimelapse:"查看延时摄影",viewPhoto:"查看 1 张照片",viewPhotos:"查看 {{count}} 张照片",openFolder:"打开文件夹:{{name}}",slicedFile:"已切片文件 - 可以打印",sourceFile:"仅源文件 - 无 AMS 映射可用",gcode:"GCODE",source:"源文件",project:"项目:{{name}}",estimated:"预计:{{time}}",actual:"实际:{{time}}",accuracy:"准确度:{{percent}}%",filament:"{{weight}}g",layer:"{{count}} 层",layers:"{{count}} 层",object:"{{count}} 个对象",objects:"{{count}} 个对象",slicedFor:"为 {{model}} 切片",uploadedBy:"上传者",noPermissionReprint:"您没有重新打印的权限",noFileForReprint:"无可用的 3MF 文件 — 打印记录时无法从打印机下载该文件",noPermissionEdit:"您没有编辑归档的权限",noPermissionDelete:"您没有删除归档的权限",reprint:"重新打印",schedulePrint:"排程打印",schedule:"排程",openInBambuStudio:"在切片软件中打开",openInBambuStudioToSlice:"在切片软件中打开进行切片",slice:"切片",externalLink:"外部链接",makerWorld:"MakerWorld:{{designer}}",viewProject:"查看项目",noExternalLink:"无外部链接",preview3d:"3D 预览",download:"下载",edit:"编辑",delete:"删除"},modal:{deleteArchive:"删除归档",deleteConfirm:'确定要删除"{{name}}"吗?此操作无法撤销。',deleteButton:"删除",removeSource3mf:"移除源 3MF",removeSource3mfConfirm:'确定要从"{{name}}"中移除源 3MF 文件吗?这将删除原始切片项目文件。',removeButton:"移除",removeF3d:"移除 F3D",removeF3dConfirm:'确定要从"{{name}}"中移除 Fusion 360 设计文件吗?',removeTimelapse:"移除延时摄影",removeTimelapseConfirm:'确定要从"{{name}}"中移除延时摄影视频吗?',timelapse:"{{name}} - 延时摄影",selectTimelapse:"选择延时摄影",selectTimelapseDesc:"未找到自动匹配。请选择此打印的延时摄影:",deleteArchives:"删除归档",deleteArchivesConfirm:"确定要删除 {{count}} 个归档吗?此操作无法撤销。",deleteCount:"删除 {{count}} 个"},page:{title:"归档",printsCount:"{{filtered}} / {{total}} 次打印",dropFilesHere:"将 .3mf 文件拖放到此处",releaseToUpload:"释放以上传",only3mfSupported:"仅支持 .3mf 文件",close:"关闭",selected:"已选择 {{count}} 个",selectAll:"全选",tags:"标签",project:"项目",favorite:"收藏",delete:"删除",toggledFavorites:"已切换 {{count}} 个归档的收藏状态",failedUpdateFavorites:"更新收藏失败",archivesDeleted:"已删除 {{count}} 个归档",failedDeleteArchives:"删除归档失败",photoDeleted:"照片已删除",failedDeletePhoto:"删除照片失败"},list:{name:"名称",printer:"打印机",date:"日期",size:"大小",actions:"操作",hasTimelapse:"有延时摄影"},log:{date:"日期",printName:"打印名称",printer:"打印机",user:"用户",status:"状态",duration:"时长",filament:"耗材",allPrinters:"所有打印机",allUsers:"所有用户",allStatuses:"所有状态",cancelled:"已取消",skipped:"已跳过",dateFrom:"从",dateTo:"到",noEntries:"未找到打印日志条目",showing:"显示 {{count}} / {{total}} 条",rowsPerPage:"行数",page:"页",prev:"上一页",next:"下一页",clearLog:"清除日志",clearLogTitle:"清除打印日志",clearLogConfirm:"所有打印日志条目将被永久删除。归档和队列项目不受影响。此操作无法撤销。确定要继续吗?",clearLogButton:"全部清除",cleared:"已清除 {{count}} 条日志",clearFailed:"清除打印日志失败"}},queue:{title:"打印队列",subtitle:"排程和管理您的打印任务",addToQueue:"添加到队列",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:"队列中的下一个",clearPlate:"清理打印板并开始下一个",clearPlateSuccess:"打印板已清理 — 准备进行下一个打印",plateReady:"打印板已清理 — 准备进行下一个打印",plateNumber:"板 {{index}}",quantity:"数量",quantityHint:"创建 {{count}} 个队列项目",activeBatches:"活跃批次",batchProgress:"已完成 {{completed}}/{{total}}",cancelBatch:"取消剩余",batchCancelled:"已取消剩余批次项目",cancelBatchConfirmTitle:"取消批次",cancelBatchConfirmMessage:"取消此批次中所有剩余的待处理项目?",batch:"批次",sections:{currentlyPrinting:"正在打印",queued:"排队中",history:"历史"},status:{pending:"等待中",waiting:"等待中",printing:"打印中",paused:"已暂停",completed:"已完成",failed:"失败",skipped:"已跳过",cancelled:"已取消"},summary:{printing:"打印中",queued:"排队中",totalTime:"总队列时间",totalWeight:"总队列重量",history:"历史"},filter:{allPrinters:"所有打印机",unassigned:"未分配",allStatus:"所有状态",allLocations:"所有位置",any:"任意"},sort:{byPosition:"按位置排序",byName:"按名称排序",byPrinter:"按打印机排序",bySchedule:"按排程排序",byDate:"按日期排序",ascendingOldest:"升序(最旧优先)",descendingNewest:"降序(最新优先)"},badges:{staged:"已暂存",requiresPrevious:"需要前一个成功",autoPowerOff:"自动关机",gcodeInjection:"G-code"},empty:{title:"没有排程的打印",description:'从归档页面使用右键菜单中的"排程"选项来排程打印,或拖放文件开始。'},time:{asap:"尽快",overdue:"已逾期",now:"现在",lessThanMinute:"不到一分钟",inMinutes:"{{count}} 分钟后",inHours:"{{count}} 小时后"},actions:{stopPrint:"停止打印",startPrint:"开始打印",requeue:"重新排队"},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:"取消所选"},confirm:{cancelTitle:"取消排程打印",cancelMessage:'确定要取消"{{name}}"吗?',stopTitle:"停止打印",stopMessage:'确定要停止当前打印"{{name}}"吗?这将取消打印机上的打印任务。',removeTitle:"从历史中移除",removeMessage:'确定要从队列历史中移除"{{name}}"吗?',clearHistoryTitle:"清除历史",clearHistoryMessage:"确定要从历史中移除所有 {{count}} 个项目吗?",cancelButton:"取消打印",stopButton:"停止打印",thisPrint:"此打印",thisItem:"此项目"},toast:{cancelled:"队列项目已取消",cancelFailed:"取消项目失败",removed:"队列项目已移除",removeFailed:"移除项目失败",stopped:"打印已停止",stopFailed:"停止打印失败",released:"打印已释放到队列",startFailed:"开始打印失败",reorderFailed:"重新排序队列失败",historyCleared:"已清除 {{count}} 条历史记录",clearHistoryFailed:"清除历史失败",updateFailed:"更新项目失败",bulkCancelled:"已取消 {{count}} 个项目",bulkCancelFailed:"批量取消项目失败"},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:{noStopPrint:"您没有停止打印的权限",noStartPrint:"您没有开始打印的权限",noEdit:"您没有编辑此队列项目的权限",noCancel:"您没有取消此队列项目的权限",noRequeue:"您没有重新排队的权限",noRemove:"您没有移除此队列项目的权限",noClearHistory:"您没有清除所有历史的权限",noEditItems:"您没有编辑队列项目的权限",noCancelItems:"您没有取消队列项目的权限"}},backgroundDispatch:{unknownFile:"未知文件",unknownPrinter:"未知打印机",startingPrints:"正在开始打印",progressSummary:"{{complete}}/{{total}} 完成 • 已分发:{{dispatched}} • 处理中:{{processing}}",expandDetails:"展开分发详情",collapseDetails:"收起分发详情",dismissToast:"关闭分发通知",cancelDispatchJob:"取消分发任务",cancel:"取消",cancelling:"取消中…",status:{dispatched:"已分发",processing:"处理中",completed:"已完成",failed:"失败",cancelled:"已取消"},toast:{cancellingUpload:"取消上传中...",cancelled:"分发已取消",cancelFailed:"取消分发失败",completeWithFailures:"后台分发完成:{{completed}} 成功,{{failed}} 失败",completeSuccess:"后台分发完成:{{completed}} 成功",printStartedRemaining:"{{completed}} 个打印已开始,{{remaining}} 个正在发送..."}},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:"全部时间",quickStats:"快速统计",printActivity:"打印活动",filamentTypes:"耗材类型",filamentTrends:"耗材趋势",failureAnalysis:"失败分析",timeAccuracy:"时间准确度",successful:"成功:",failed:"失败:",perfectEstimate:"100% = 完美估计",noTimeAccuracyData:"暂无时间准确度数据",noFilamentData:"暂无耗材数据",noPrinterData:"暂无打印机数据",noPrintData:"暂无打印数据",noPrintDataLast30Days:"最近 30 天无打印数据",failureReasons:"失败原因",topFailureReasons:"主要失败原因",failedPrintsCount:"{{failed}} / {{total}} 次打印失败",lastWeekRate:"上周:{{rate}}%",resetLayout:"重置布局",recalculateCosts:"重新计算成本",recalculateCostsHint:"使用当前耗材价格重新计算所有归档成本",exportStats:"导出统计",exportAsCsv:"导出为 CSV",exportAsExcel:"导出为 Excel",hiddenCount:"{{count}} 个已隐藏",exportDownloaded:"导出已下载",exportFailed:"导出失败",layoutReset:"布局已重置",recalculatedCosts:"已为 {{count}} 个归档重新计算成本",recalculateFailed:"重新计算成本失败",loadingStats:"加载统计数据中...",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:{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:"当前小时数",statusTab:"状态",settingsTab:"设置",overdueCount:"{{count}} 个逾期",dueSoonCount:"{{count}} 个即将到期",dueSoon:"即将到期",allGood:"一切正常",overdueBy:"逾期 {{duration}}",dueIn:"{{duration}} 后到期",timeLeft:"剩余 {{duration}}",day:"1 天",days:"{{count}} 天",week:"1 周",weeks:"{{count}} 周",month:"1 个月",months:"{{count}} 个月",year:"1 年",maintenanceTypes:"维护类型",maintenanceTypesDescription:"系统类型和您的自定义维护任务",addCustomType:"添加自定义类型",restoreDefaults:"恢复默认任务",intervalType:"间隔类型",intervalValue:"间隔 ({{type}})",icon:"图标",documentationLink:"文档链接(可选)",assignToPrinters:"分配给打印机",selectAtLeastOnePrinter:"至少选择一台打印机",addType:"添加类型",custom:"自定义",printHours:"打印小时数",calendarDays:"日历天数",exampleName:"例如:更换 HEPA 过滤器",viewDocumentation:"查看文档",timeBasedInterval:"基于时间的间隔",intervalOverrides:"间隔覆盖",intervalOverridesDescription:"为特定打印机自定义间隔",assignedToPrinters:"已分配给打印机:",noPrintersAssigned:"未分配打印机",addPrinterShort:"添加:",printersAssignedClick:"已分配 {{count}} 台打印机 - 点击管理",removeFromPrinter:"从此打印机移除",types:{lubricateCarbonRods:"润滑碳纤维杆",lubricateRails:"润滑线性导轨",cleanNozzle:"清洁喷嘴/热端",checkBelts:"检查皮带张力",cleanBuildPlate:"清洁构建板",checkExtruder:"检查挤出机齿轮",checkCooling:"检查冷却风扇",generalInspection:"综合检查",cleanCarbonRods:"清洁碳纤维杆",lubricateSteelRods:"润滑钢杆",cleanSteelRods:"清洁钢杆",cleanLinearRails:"清洁线性导轨",checkPtfeTube:"检查 PTFE 管",replaceHepaFilter:"更换 HEPA 过滤器",replaceCarbonFilter:"更换活性炭过滤器",lubricateLeftNozzleRail:"润滑左喷嘴导轨"},maintenanceComplete:"维护已标记为完成",typeUpdated:"维护类型已更新",typeDeleted:"维护类型已删除",defaultsRestored:"已恢复 {{count}} 个默认任务",printHoursUpdated:"打印小时数已更新",printerAssigned:"打印机已分配",printerRemoved:"打印机已移除",deleteTypeConfirm:'删除"{{name}}"?',deleteSystemTypeTitle:"删除默认维护任务?",deleteSystemTypeMessage:'确定要删除默认维护任务"{{name}}"吗?',noPermissionUpdate:"您没有更新维护项目的权限",noPermissionPerform:"您没有执行维护的权限",noPermissionEditTypes:"您没有编辑维护类型的权限",noPermissionDeleteTypes:"您没有删除维护类型的权限",noPermissionEditHours:"您没有编辑打印时间的权限",noPermissionRemovePrinter:"您没有移除打印机分配的权限",noPermissionAssignPrinter:"您没有分配打印机的权限",noPermissionEditIntervals:"您没有编辑间隔的权限",configureSettings:"配置维护类型和间隔"},settings:{title:"设置",general:"通用",tabs:{general:"通用",smartPlugs:"智能插座",notifications:"通知",queue:"工作流",filament:"耗材",network:"网络",apiKeys:"API 密钥",virtualPrinter:"虚拟打印机",failureDetection:"故障检测",users:"身份验证",backup:"备份",emailAuth:"邮箱认证",ldap:"LDAP",twoFa:"双因素认证",oidc:"SSO / OIDC"},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})。",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:{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:"管理员可以通过邮件重置用户密码",errors:{requiredFields:"请填写所有必填字段",usernameRequired:"启用认证时需要用户名",enterTestEmail:"请输入测试邮箱地址",smtpServerAndEmail:"测试前请填写 SMTP 服务器和发件邮箱",usernamePasswordRequired:"启用认证时需要用户名和密码",configureSmtpFirst:"请先配置并测试 SMTP 设置",enableAuthFirst:"请先启用身份验证才能使用基于电子邮件的功能。"},success:{settingsSaved:"SMTP 设置保存成功"},securityOptions:{starttls:"STARTTLS(端口 587)",ssl:"SSL/TLS(端口 465)",none:"无(端口 25)"},authOptions:{enabled:"已启用",disabled:"已禁用"}},appearance:"外观",notifications:"通知",smartPlugs:"智能插座",spoolman:"Spoolman",updates:"更新",language:"语言",languageDescription:"选择您的首选语言",theme:"主题",themeLight:"浅色",themeDark:"深色",themeSystem:"跟随系统",defaultView:"默认视图",defaultViewDescription:"打开应用时显示的页面",checkForUpdates:"检查更新",autoUpdate:"自动更新",currentVersion:"当前版本",latestVersion:"最新版本",upToDate:"已是最新版本",updateAvailable:"有可用更新",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:"需要维护时通知"},smartPlug:{title:"智能插座",add:"添加智能插座",edit:"编辑智能插座",name:"名称",ipAddress:"IP 地址",linkedPrinter:"关联打印机",autoOn:"自动开启",autoOnDescription:"打印开始时开启",autoOff:"自动关闭",autoOffDescription:"打印完成后关闭",offDelay:"关闭延迟",offDelayMinutes:"打印后分钟数",offDelayTemp:"当喷嘴温度低于",currentState:"当前状态",turnOn:"开启",turnOff:"关闭"},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 同步重量失败",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:"所有打印机",noDefaultPrinter:"无默认(每次询问)",sidebarOrder:"侧边栏顺序",saveThumbnails:"保存缩略图",captureFinishPhoto:"拍摄完成照片",noPrintersConfigured:"未配置打印机",archiveMode:{always:"始终创建归档条目",never:"从不创建归档条目",ask:"每次询问"},checkForUpdatesLabel:"检查更新",checkPrinterFirmware:"检查打印机固件",includeBetaUpdates:"包含测试版本",includeBetaUpdatesDesc:"检查更新时通知测试版和预发布版本",enableRetry:"启用重试",homeAssistantDescription:"通过 Home Assistant 控制智能插座",environmentManagedLabel:"(环境变量管理)",autoEnabledViaEnv:"通过环境变量自动启用",urlFromEnvReadOnly:"值由 HA_URL 环境变量设置(只读)",tokenFromEnvReadOnly:"值由 HA_TOKEN 环境变量设置(只读)",mqttConnectedTo:"已连接到",prometheusDescription:"以 Prometheus 格式暴露打印机数据",noSmartPlugsTitle:"未配置智能插座",noSmartPlugsDescription:"添加基于 Tasmota 的智能插座以追踪能耗并自动化电源控制。",noProvidersTitle:"未配置提供商",noProvidersDescription:"添加提供商以接收警报。",noTemplatesAvailable:"无可用模板。重启后端以加载默认模板。",apiPermissionView:"查看打印机状态和队列",apiPermissionEdit:"添加和移除打印队列中的项目",apiKeysEmptyTitle:"无 API 密钥",apiKeysEmptyDescription:"创建 API 密钥以与外部服务集成。",noUsersFound:"未找到用户",noGroupsFound:"未找到组",noGroupsAvailable:"无可用组",passwordsDoNotMatch:"密码不匹配",systemGroupWarning:"系统组名称不可更改",authDisabledTitle:"身份验证已禁用",authDisabledFeature1:"需要登录才能访问系统",authDisabledFeature2:"创建多个用户并基于组的权限管理",authDisabledFeature3:"使用 50+ 个细粒度权限控制访问",userHasCreated:"此用户已创建:",userItemsQuestion:"您想如何处理这些项目?",deleteUserConfirm:"确定要删除此用户吗?",actionCannotBeUndone:"此操作无法撤销。",addFirstSmartPlug:"添加您的第一个智能插座",providers:"提供商",log:"日志",testAll:"全部测试",testResults:"测试结果",testPassedCount:"{{count}} 个通过",testFailedCount:"{{count}} 个失败",messageTemplates:"消息模板",messageTemplatesDescription:"自定义每个事件的通知消息。",apiKeys:"API 密钥",apiKeysDescription:"创建 API 密钥用于外部集成和 Webhook。",createKey:"创建密钥",apiKeyCreated:"API 密钥创建成功",apiKeyCopyWarning:"请立即复制此密钥 - 它不会再次显示!",useInApiBrowser:"在 API 浏览器中使用",createNewApiKey:"创建新 API 密钥",keyName:"密钥名称",keyNamePlaceholder:"例如:Home Assistant、OctoPrint",readStatus:"读取状态",readStatusDescription:"查看打印机状态和队列",manageQueue:"管理队列",manageQueueDescription:"添加和移除打印队列中的项目",controlPrinter:"控制打印机",controlPrinterDescription:"暂停、继续和停止打印",unnamedKey:"未命名密钥",lastUsed:"上次使用",read:"读取",control:"控制",createFirstKey:"创建您的第一个密钥",webhookEndpoints:"Webhook 端点",webhookApiKeyHint:"在 X-API-Key 请求头中使用您的 API 密钥。",webhook:{getAllStatus:"获取所有打印机状态",getSpecificStatus:"获取特定打印机状态",addToQueue:"添加到打印队列",pausePrint:"暂停打印",resumePrint:"继续打印",stopPrint:"停止打印"},apiBrowser:"API 浏览器",apiBrowserDescription:"浏览和测试所有可用的 API 端点。",apiKeyForTesting:"测试用 API 密钥",apiKeyPlaceholder:"在此粘贴您的 API 密钥以测试需要认证的端点...",apiKeyHint:"此密钥将作为 X-API-Key 请求头随请求发送。",deleteApiKeyTitle:"删除 API 密钥",deleteApiKeyMessage:"确定要删除此 API 密钥吗?使用此密钥的所有集成将停止工作。",deleteKey:"删除密钥",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:"Staggered Start",staggeredStartDescription:"Default group size and interval when staggering multi-printer batch starts. Can be overridden per batch in the print modal.",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:"Group size",staggerGroupSizeHelp:"Printers to start simultaneously per group",staggerInterval:"Interval (minutes)",staggerIntervalHelp:"Delay between each group starting",queueDrying:"自动干燥",queueDryingDescription:"在队列打印之间,打印机空闲时自动干燥AMS耗材。使用上方的湿度阈值触发干燥。",queueDryingEnabled:"启用自动干燥",queueDryingEnabledDescription:"当打印机空闲且湿度超过阈值时,自动启动AMS干燥",queueDryingBlock:"等待干燥完成",queueDryingBlockDescription:"阻止打印队列直到干燥完成。关闭时,打印优先于干燥。",ambientDryingEnabled:"环境干燥",ambientDryingEnabledDescription:"当空闲打印机的湿度超过阈值时自动干燥耗材,无需排队打印。",dryingPresets:"干燥预设",dryingPresetsDescription:"每种耗材类型的温度和时长。AMS 2 Pro使用较低温度,AMS-HT支持较高温度。",dryingFilament:"耗材",printModal:"打印对话框",expandCustomMapping:"默认展开自定义映射",expandCustomMappingDescription:"打印到多台打印机时,默认展开显示每台打印机的 AMS 映射",authentication:"身份验证",authEnabledDescription:"您的实例已通过用户身份验证保护",authDisabledDescription:"启用以要求登录并管理用户访问",authDisabledMessage:"启用身份验证以创建用户账户、管理权限并保护您的 Bambuddy 实例。",enableAuthentication:"启用身份验证",currentUser:"当前用户",changePassword:"修改密码",admin:"管理员",users:"用户",addUser:"添加用户",groups:"组",addGroup:"添加组",system:"系统",noDescription:"无描述",userCount:"{{count}} 个用户",permissionCount:"{{count}} 个权限",createUser:"创建用户",username:"用户名",enterUsername:"输入用户名",password:"密码",enterPassword:"输入密码(至少 6 个字符)",confirmPassword:"确认密码",confirmPasswordPlaceholder:"确认密码",viewReleaseOnGitHub:"在 GitHub 上查看发布",turnAllPlugsOn:"开启所有插座",turnAllPlugsOff:"关闭所有插座",clearNotificationLogs:"清除通知日志",clearLogsMessage:"这将永久删除所有 30 天前的通知日志。此操作无法撤销。",clearLogs:"清除日志",resetUiPreferences:"重置 UI 偏好",resetUiPreferencesMessage:"这将重置所有 UI 偏好为默认值:侧边栏顺序、主题、仪表板布局、视图模式和排序偏好。您的打印机、归档和服务器设置不会受到影响。清除后页面将重新加载。",resetPreferences:"重置偏好",deleteGroupTitle:"删除组",deleteGroupMessage:"确定要删除此组吗?此组中的用户将失去这些权限。",deleteGroup:"删除组",disableAuthenticationTitle:"禁用身份验证",disableAuthenticationMessage:"确定要禁用身份验证吗?这将使您的 Bambuddy 实例无需登录即可访问。所有用户将保留在数据库中但身份验证将被禁用。",disableAuthentication:"禁用身份验证",configureBambuddy:"配置 Bambuddy",systemDefault:"系统默认",archiveSettings:"归档设置",newWindow:"新窗口",embeddedOverlay:"嵌入式叠加层",preferredSlicer:"首选切片软件",preferredSlicerDescription:"选择要用于打开文件的切片软件",externalCameras:"外部摄像头",costTracking:"成本追踪",printsOnly:"仅打印",totalConsumption:"总消耗",dataManagement:"数据管理",storageUsage:"存储使用情况",storageUsageDescription:"按类别的数据使用情况明细",storageUsageTotal:"总计",storageUsageErrors:"错误",storageUsageOtherBreakdown:"其他(包括静态资源、脚本和配置文件)",storageUsageSystem:"系统",storageUsageData:"数据",storageUsageUnavailable:"存储使用信息不可用",clearNotificationLogsDescription:"删除 30 天前的通知日志",resetUiPreferencesDescription:"重置侧边栏顺序、主题、视图模式和布局偏好。打印机、归档和设置不受影响。",enableHomeAssistant:"启用 Home Assistant",enableMqtt:"启用 MQTT",useTls:"使用 TLS",enableMetricsEndpoint:"启用指标端点",availableMetrics:"可用指标",editUser:"编辑用户",deleteUserTitle:"删除用户",groupName:"组名称",leaveEmptyForAnonymous:"留空为匿名",leaveEmptyForNoAuth:"留空为无认证",enterNewPassword:"输入新密码",confirmNewPassword:"确认新密码",enterGroupName:"输入组名称",enterDescriptionOptional:"输入描述(可选)",enterCurrentPassword:"输入当前密码",enterNewPasswordMin6:"输入新密码(至少 6 个字符)",toast:{keyCopied:"密钥已复制到剪贴板",copyFailed:"复制密钥失败",keyAddedToBrowser:"密钥已添加到 API 浏览器",clearLogsFailed:"清除日志失败",uiPreferencesReset:"UI 偏好已重置。刷新中...",authDisabled:"身份验证已成功禁用",authDisableFailed:"禁用身份验证失败",apiKeyCreated:"API 密钥已创建",apiKeyDeleted:"API 密钥已删除",userCreated:"用户创建成功",userUpdated:"用户更新成功",userDeleted:"用户删除成功",groupCreated:"组创建成功",groupUpdated:"组更新成功",groupDeleted:"组删除成功",fillRequiredFields:"请填写所有必填字段",passwordsDoNotMatch:"密码不匹配",passwordTooShort:"密码至少需要 6 个字符",enterGroupName:"请输入组名称",settingsSaved:"设置已保存",cameraSettingsSaved:"摄像头设置已保存",enterCameraUrl:"请输入摄像头 URL",passwordChanged:"密码修改成功",connectionFailed:"连接失败",testFailed:"测试失败",cameraConnected:"摄像头已连接{{resolution}}"},testConnection:"测试连接",catalog:{spoolCatalog:"耗材目录",spoolCatalogDescription:"按品牌/类型的空耗材重量。用于添加耗材时的自动重量查找。",searchCatalog:"搜索目录...",addNewEntry:"添加新条目",namePlaceholder:"名称(例如:Bambu Lab - 塑料)",weight:"重量",type:"类型",default:"默认",custom:"自定义",noMatch:"没有条目匹配您的搜索",empty:"目录中没有条目",deleteEntry:"删除条目",deleteConfirm:'确定要删除"{{name}}"吗?',resetCatalog:"重置目录",resetConfirm:"重置目录为默认值?这将移除所有自定义条目。",loadFailed:"加载耗材目录失败",nameWeightRequired:"名称和重量为必填项",entryAdded:"条目已添加",addFailed:"添加条目失败",entryUpdated:"条目已更新",updateFailed:"更新条目失败",entryDeleted:"条目已删除",deleteFailed:"删除条目失败",resetSuccess:"目录已重置为默认值",resetFailed:"重置目录失败",exported:"已导出 {{count}} 条",imported:"已导入 {{added}} 条(跳过 {{skipped}} 条)",importFailed:"导入失败:无效的 JSON 格式",exportTooltip:"导出目录为 JSON",importTooltip:"从 JSON 导入目录",resetTooltip:"重置为默认值",selectedCount:"已选择 {{count}} 项",deleteSelected:"删除所选",bulkDeleteConfirm:"确定要删除 {{count}} 个条目吗?",bulkDeleted:"已删除 {{count}} 个条目",bulkDeleteFailed:"删除条目失败"},colorCatalog:{title:"颜色目录",description:"按制造商/材料的耗材颜色。用于添加耗材时的自动颜色查找。",searchColors:"搜索颜色...",allManufacturers:"所有制造商",addNewColor:"添加新颜色",manufacturer:"制造商",colorName:"颜色名称",hex:"十六进制",materialOptional:"材料(可选)",showing:"显示 {{filtered}} / {{total}} 种颜色",noMatch:"没有颜色匹配您的搜索",empty:"目录中没有颜色",deleteColor:"删除颜色",deleteConfirm:'确定要删除"{{name}}"吗?',resetCatalog:"重置颜色目录",resetConfirm:"重置目录为默认值?这将移除所有自定义颜色。",sync:"同步",starting:"启动中...",syncTooltip:"从 FilamentColors.xyz 同步(2000+ 种颜色,可能需要一分钟)",loadFailed:"加载颜色目录失败",fieldsRequired:"制造商、颜色名称和十六进制颜色为必填项",colorAdded:"颜色已添加",addFailed:"添加颜色失败",colorUpdated:"颜色已更新",updateFailed:"更新颜色失败",colorDeleted:"颜色已删除",deleteFailed:"删除颜色失败",resetSuccess:"颜色目录已重置为默认值",resetFailed:"重置目录失败",syncUpToDate:"已是最新(检查了 {{count}} 种颜色)",syncComplete:"添加了 {{added}} 种新颜色({{skipped}} 种已存在)",syncError:"同步错误",syncFailed:"从 FilamentColors.xyz 同步失败",exported:"已导出 {{count}} 种颜色",imported:"已导入 {{added}} 种颜色(跳过 {{skipped}} 种)",importFailed:"导入失败:无效的 JSON 格式",selectedCount:"已选择 {{count}} 项",deleteSelected:"删除所选",bulkDeleteConfirm:"确定要删除 {{count}} 种颜色吗?",bulkDeleted:"已删除 {{count}} 种颜色",bulkDeleteFailed:"删除颜色失败"},dateFormat:"日期格式",dateFormatUs:"美式 (MM/DD/YYYY)",dateFormatEu:"欧式 (DD/MM/YYYY)",dateFormatIso:"ISO (YYYY-MM-DD)",timeFormat:"时间格式",timeFormat12:"12小时制 (3:30 PM)",timeFormat24:"24小时制 (15:30)",defaultPrinter:"默认打印机",defaultPrinterDescription:"为上传、重印和其他操作预选此打印机。",slicerBambuStudio:"Bambu Studio",slicerOrcaSlicer:"OrcaSlicer",sidebarOrderDescription:"拖拽侧边栏项目以重新排序。在此处重置为默认顺序。",setDefault:"设为默认",sidebarOrderSetDefaultHint:"设为默认将当前菜单顺序应用于尚未自定义的用户。",sidebarDefaultSet:"已设置默认菜单顺序。",sidebarDefaultCleared:"已清除默认菜单顺序。",sidebarDefaultFailed:"设置默认菜单顺序失败。",reset:"重置",darkMode:"深色模式",lightMode:"浅色模式",active:"(当前)",background:"背景",accent:"强调色",style:"样式",bgNeutral:"中性",bgWarm:"暖色",bgCool:"冷色",bgOled:"OLED 纯黑",bgSlate:"石板蓝",bgForest:"森林绿",accentGreen:"绿色",accentTeal:"青色",accentBlue:"蓝色",accentOrange:"橙色",accentPurple:"紫色",accentRed:"红色",styleClassic:"经典",styleGlow:"发光",styleVibrant:"鲜艳",themeToggleHint:"使用侧边栏中的太阳/月亮图标在深色和浅色模式之间切换。",autoArchivePrints:"自动归档打印",autoArchiveDescription:"打印完成时自动保存3MF文件",saveThumbnailsDescription:"从3MF文件中提取并保存预览图像",captureFinishPhotoDescription:"打印完成时从打印机摄像头拍照",ffmpegNotInstalled:"未安装ffmpeg",ffmpegRequired:"摄像头捕获需要ffmpeg。通过 brew install ffmpeg(macOS)或 apt install ffmpeg(Linux)安装。",camera:"摄像头",cameraViewMode:"摄像头查看模式",cameraOverlayDescription:"摄像头在主屏幕上以可调大小的覆盖层打开",cameraWindowDescription:"摄像头在单独的浏览器窗口中打开",externalCamerasDescription:"配置外部摄像头以替换内置打印机摄像头。支持MJPEG流、RTSP、HTTP快照和USB摄像头(V4L2)。启用后,外部摄像头将用于实时查看和完成照片。",cameraPlaceholderUsb:"设备路径 (/dev/video0)",cameraPlaceholderUrl:"摄像头URL (rtsp://... 或 http://...)",cameraTypeMjpeg:"MJPEG 流",cameraTypeRtsp:"RTSP 流",cameraTypeSnapshot:"HTTP 快照",cameraTypeUsb:"USB 摄像头 (V4L2)",cameraRotation:"旋转",test:"测试",connected:"已连接",disconnected:"未连接",currency:"货币",defaultFilamentCost:"默认耗材成本(每公斤)",electricityCost:"每千瓦时电费",energyDisplayMode:"能源显示模式",energyModePrintDescription:"仪表板显示打印期间使用的能源总和",energyModeTotalDescription:"仪表板显示智能插座的累计能源",fileManager:"文件管理器",createArchiveEntry:"打印时创建归档条目",createArchiveEntryDescription:"从文件管理器打印时,可选择创建归档条目",lowDiskSpaceWarning:"磁盘空间不足警告",lowDiskSpaceDescription:"当可用磁盘空间低于此阈值时显示警告",printerFirmware:"打印机固件",checkFirmwareDescription:"检查Bambu Lab的打印机固件更新",bambuddySoftware:"Bambuddy 软件",autoCheckDescription:"启动时自动检查新版本",checkNow:"立即检查",updateAvailableVersion:"可用更新:v{{version}}",releaseNotes:"发布说明",updateViaDocker:"通过 Docker Compose 更新:",installUpdate:"安装更新",latestVersionRunning:"您正在运行最新版本",failedToCheckUpdates:"检查更新失败:{{error}}",backupRestore:"备份与恢复",backupRestoreDescription:"导出/导入设置并配置GitHub备份",goToBackup:"前往备份",externalUrl:"外部URL",externalUrlDescription:"Bambuddy可访问的外部URL。用于通知图像和外部集成。",bambuddyUrl:"Bambuddy URL",externalUrlHint:"包含协议和端口(例如:http://192.168.1.100:8000)",ftpRetry:"FTP重试",ftpRetryDescription:"当打印机WiFi不稳定时重试FTP操作。适用于3MF下载、打印上传、延时摄影下载和固件更新。",autoRetryDescription:"自动重试失败的FTP操作",retryAttempts:"重试次数",retryDelay:"重试延迟",connectionTimeout:"连接超时",time_one:"{{count}}次",time_other:"{{count}}次",second_one:"{{count}}秒",second_other:"{{count}}秒",nSeconds:"{{count}}秒",increaseForWeakWifi:"对WiFi信号弱的打印机增加此值",homeAssistant:"Home Assistant",homeAssistantFullDescription:"连接到Home Assistant,通过HA REST API控制智能插座。支持switch、light、input_boolean和script实体。",homeAssistantUrl:"Home Assistant URL",longLivedAccessToken:"长期访问令牌",haTokenHint:"在HA中创建令牌:个人资料 → 长期访问令牌 → 创建令牌",connectionSuccessful:"连接成功",connectionFailed:"连接失败",haConnectionSuccess:"已成功连接到Home Assistant。",haConnectionFailed:"连接Home Assistant失败。",mqttPublishing:"MQTT发布",mqttDescription:"将BamBuddy事件发布到外部MQTT代理,用于与Node-RED、Home Assistant和其他自动化系统集成。",mqttEnableDescription:"向外部MQTT代理发布事件",brokerHostname:"代理主机名",port:"端口",usernameOptional:"用户名(可选)",passwordOptional:"密码(可选)",topicPrefix:"主题前缀",topicPrefixHint:"主题格式:{{prefix}}/printers//status 等",prometheusMetrics:"Prometheus 指标",prometheusEndpointDescription:"在 /api/v1/metrics 公开打印机指标,用于Prometheus/Grafana监控。",bearerTokenOptional:"Bearer令牌(可选)",bearerTokenHint:"设置后,请求必须包含 Authorization: Bearer ",metricsConnectionStatus:"连接状态",metricsPrinterState:"打印机状态(空闲/打印中等)",metricsPrintProgress:"打印进度 0-100%",metricsBedTemp:"热床温度",metricsNozzleTemp:"喷嘴温度",metricsPrintsTotal:"按结果分类的总打印数",metricsMore:"...以及更多(层数、风扇、队列、耗材用量)",smartPlugsDescription:"连接智能插座(Tasmota或Home Assistant)以自动化电源控制并跟踪打印机的能源使用情况。",allOn:"全部开启",allOff:"全部关闭",addSmartPlug:"添加智能插座",energySummary:"能源概要",currentPower:"当前功率",plugsOnline:"{{reachable}}/{{total}} 个插座在线",today:"今天",yesterday:"昨天",total:"总计",enablePlugsForSummary:"启用插座以查看能源概要",addNotificationProvider:"添加",systemBadge:"(系统)",creating:"创建中...",changing:"修改中...",deleteUserAndItems:"删除用户及其所有项目",deleteUserKeepItems:"删除用户,保留项目(将变为无主项目)",ok:"确定",twoFa:{totpTitle:"身份验证器应用 (TOTP)",totpDesc:"使用 Google Authenticator、Aegis 或 Authy 等应用。",emailOtpTitle:"邮件 OTP",emailOtpDesc:"登录时向 {{email}} 发送一次性验证码。",emailOtpNoEmail:"请先为账户添加邮箱地址以启用此方式。",addEmailFirst:"您的账户没有邮箱地址,请联系管理员添加。",setupTotp:"设置身份验证器应用",setupAuthApp:"设置身份验证器应用",setupInstructions:"使用身份验证器应用扫描二维码,然后输入验证码确认。",manualEntry:"无法扫描?请手动输入此密钥:",scannedContinue:"已扫描 — 继续",enterCodeToConfirm:"请输入身份验证器应用中的6位验证码以确认设置。",activate:"激活",disableTotp:"停用身份验证器",disableConfirmHint:"请输入有效的 TOTP 码或备用码来停用身份验证器。",totpDisabled:"身份验证器应用已停用。",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:{title:"SSO / OIDC 提供商",desc:"配置 OpenID Connect 提供商以实现单点登录。",addProvider:"添加提供商",newProvider:"新提供商",empty:"尚未配置 OIDC 提供商。",created:"提供商已创建。",updated:"提供商已更新。",deleted:"提供商已删除。",deleteTitle:"删除提供商",deleteMessage:'删除"{{name}}"?所有关联账户将断开连接。',form:{name:"显示名称",issuerUrl:"颁发者 URL",clientId:"客户端 ID",clientSecret:"客户端密钥",scopes:"作用域",iconUrl:"图标 URL(可选)",enabled:"已启用",autoCreate:"自动创建用户",autoCreateDesc:"首次登录时自动创建本地账户。",autoLink:"自动关联已有账户",autoLinkDesc:"首次登录时通过邮箱匹配现有本地账户并自动关联。",secretHint:"留空以保留当前",secretPlaceholder:"新密钥"}}},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:{generic:"出了点问题",networkError:"网络错误。请检查您的连接。",notFound:"未找到",unauthorized:"未授权",serverError:"服务器错误",validationError:"请检查您的输入",printerConnectionFailed:"连接打印机失败",saveFailed:"保存更改失败",deleteFailed:"删除失败",loadFailed:"加载数据失败"},hmsErrors:{title:"错误 - {{name}}",noErrors:"无错误",viewOnWiki:"在拓竹 Wiki 上查看",clearInstructions:"在打印机上清除错误以在此处消除它们。",clearErrors:"清除错误",clearSuccess:"HMS 错误已清除",clearFailed:"清除 HMS 错误失败"},mqttDebug:{title:"MQTT 调试日志",searchPlaceholder:"搜索主题或负载...",noMessages:"尚未记录消息",startLoggingHint:'点击"开始记录"以开始捕获 MQTT 消息',noMessagesMatch:"没有消息匹配您的筛选条件",adjustFilterHint:"尝试调整您的搜索或筛选条件",incoming:"传入",outgoing:"传出",loggingStopped:"记录已停止",loggingActive:"记录中 - 消息将自动刷新",startLogging:"开始记录",stopLogging:"停止记录",clearLog:"清除日志",topic:"主题",timestamp:"时间戳",direction:"方向",all:"全部"},printerFiles:{title:"文件管理器",storageUsed:"已用:",storageFree:"剩余:",filterPlaceholder:"筛选文件...",deleteButton:"删除",deleteFiles:"删除 {{count}} 个文件",deleteFileConfirm:'删除"{{name}}"?此操作无法撤销。',deleteFilesConfirm:"删除 {{count}} 个选中的文件?此操作无法撤销。",noFiles:"打印机上没有文件",loadingFiles:"加载文件中...",failedToLoad:"加载文件失败",toast:{filesDeleted:"已删除 {{count}} 个文件",deleteFailed:"删除失败:{{error}}"}},confirm:{delete:"确定要删除吗?",unsavedChanges:"您有未保存的更改。确定要离开吗?",clearQueue:"确定要清空队列吗?"},login:{title:"Bambuddy 登录",subtitle:"登录您的账户",username:"用户名",usernamePlaceholder:"输入您的用户名",usernameOrEmail:"用户名或邮箱",usernameOrEmailPlaceholder:"用户名或 @ 邮箱",password:"密码",passwordPlaceholder:"输入您的密码",signIn:"登录",signingIn:"登录中...",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:"知道了",twoFA:{title:"两步验证",subtitle:"您的账户已启用两步验证。请在下方输入验证码。",methodAuthenticator:"身份验证器应用",methodEmail:"邮箱验证码",methodBackup:"备用恢复码",instructionsTotp:"请打开您的身份验证器应用,输入 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:{title:"Bambuddy 设置",subtitle:"为您的 Bambuddy 实例配置身份验证",enableAuth:"启用身份验证",adminAccount:"管理员账户",adminAccountDesc:"如果管理员用户已存在,将使用现有管理员账户启用身份验证。如需使用现有管理员,请将下方字段留空,或输入新凭据创建新管理员用户。",adminUsername:"管理员用户名",adminPassword:"管理员密码",optionalIfAdminExists:"(如管理员用户已存在则为可选)",adminUsernamePlaceholder:"输入管理员用户名(可选)",adminPasswordPlaceholder:"输入管理员密码(可选)",confirmPassword:"确认密码",confirmPasswordPlaceholder:"确认管理员密码",settingUp:"设置中...",completeSetup:"完成设置",toast:{authEnabledAdminCreated:"身份验证已启用并创建了管理员用户",authEnabledExistingAdmins:"使用现有管理员用户启用了身份验证",setupCompleted:"设置完成",enterBothCredentials:"请输入管理员用户名和密码,或将两者留空以使用现有管理员用户",passwordsDoNotMatch:"密码不匹配",passwordTooShort:"密码至少需要 6 个字符"}},changePassword:{title:"修改密码",currentPassword:"当前密码",currentPasswordPlaceholder:"输入当前密码",newPassword:"新密码",newPasswordPlaceholder:"输入新密码(至少 6 个字符)",confirmPassword:"确认新密码",confirmPasswordPlaceholder:"确认新密码",passwordsDoNotMatch:"密码不匹配",passwordTooShort:"密码至少需要 6 个字符",changing:"修改中...",success:"密码修改成功",failed:"密码修改失败"},plateAlert:{title:"打印已暂停!",message:"在构建板上检测到物体。打印已自动暂停。请清理打印板并继续打印。",understand:"我知道了"},camera:{title:"摄像头视图",invalidPrinterId:"无效的打印机 ID",live:"实时",snapshot:"快照",restartStream:"重启流",refreshSnapshot:"刷新快照",fullscreen:"全屏",exitFullscreen:"退出全屏",connectingToCamera:"连接摄像头中...",capturingSnapshot:"拍摄快照中...",connectionLost:"连接已断开",connectionFailed:"摄像头连接失败",reconnecting:"{{countdown}} 秒后重新连接...(第 {{attempt}}/{{max}} 次尝试)",reconnectNow:"立即重新连接",cameraUnavailable:"摄像头不可用",cameraUnavailableDesc:"请确保打印机已通电并已连接。",noCamera:"无可用摄像头",retry:"重试",cameraStream:"摄像头流",zoomOut:"缩小",zoomIn:"放大",resetZoom:"重置缩放",recording:"录制中",startRecording:"开始录制",stopRecording:"停止录制",chamberLight:"切换腔室灯"},groups:{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:{title:"用户管理",subtitle:"管理用户及其对 Bambuddy 实例的访问",backToSettings:"返回设置",createUser:"创建用户",noPermission:"您没有访问此页面的权限。",admin:"管理员",noGroups:"无组",active:"活跃",inactive:"非活跃",edit:"编辑",delete:"删除",system:"系统",noGroupsAvailable:"无可用组",table:{username:"用户名",groups:"组",status:"状态",actions:"操作"},toast:{created:"用户创建成功",updated:"用户更新成功",deleted:"用户删除成功",fillRequired:"请填写所有必填字段",passwordsDoNotMatch:"密码不匹配",passwordTooShort:"密码至少需要 6 个字符"},modal:{createUser:"创建用户",editUser:"编辑用户",cancel:"取消",creating:"创建中...",saving:"保存中...",saveChanges:"保存更改",advancedAuthSubtitle:"使用高级认证"},form:{username:"用户名",usernamePlaceholder:"输入用户名",email:"邮箱",emailPlaceholder:"user@example.com",password:"密码",passwordPlaceholder:"输入密码",confirmPassword:"确认密码",confirmPasswordPlaceholder:"确认密码",newPasswordPlaceholder:"输入新密码",confirmNewPasswordPlaceholder:"确认新密码",leaveBlankToKeep:"留空以保持当前值",groups:"组",optional:"可选",autoGeneratedPassword:"将自动生成安全密码并通过邮件发送给用户。",passwordManagedByAdvancedAuth:'密码由高级认证管理。使用"重置密码"通过邮件向用户发送新密码。',resetPassword:"重置密码",resettingPassword:"重置密码中..."},deleteModal:{title:"删除用户",message:"确定要删除此用户吗?此操作无法撤销。",confirm:"删除用户"}},streamOverlay:{title:"流叠加层",invalidPrinterId:"无效的打印机 ID",cameraStream:"摄像头流",progress:"进度",eta:"预计完成时间",printerIdle:"打印机空闲",printerOffline:"打印机离线",status:{printing:"打印中",paused:"已暂停",finished:"已完成",failed:"失败",idle:"空闲",unknown:"未知"}},profiles:{title:"配置文件",subtitle:"管理您的切片预设和压力推进校准",tabs:{cloud:"云端配置文件",local:"本地配置文件",kprofiles:"K 值配置"},localProfiles:{title:"本地配置文件",subtitle:"从 OrcaSlicer 导入和管理切片预设",import:"导入配置文件",importDesc:"将 .bbscfg、.bbsflmt、.orca_filament、.zip 或 .json 文件拖放到此处",importing:"导入中...",search:"搜索本地预设...",noPresets:"暂无本地预设",badge:"本地",edit:"编辑",delete:"删除",cancel:"取消",deleteConfirmTitle:"删除预设",deleteConfirm:"确定要删除此预设吗?此操作无法撤销。",source:"来源",inheritsFrom:"继承自",filamentType:"类型",vendor:"厂商",compatiblePrinters:"兼容打印机",nozzleTemp:"喷嘴温度",cost:"成本",density:"密度",pressureAdvance:"压力推进",filament:"耗材",process:"工艺",printer:"打印机",toast:{importSuccess:"已导入 {{count}} 个预设",importSkipped:"跳过 {{count}} 个预设(重复)",importError:"导入时出现 {{count}} 个错误",deleted:"预设已删除",updated:"预设已更新"}},connectedAs:"已连接为",logout:"退出登录",noLogoutPermission:"您没有退出登录的权限",failedToLoad:"加载配置文件失败",retry:"重试",time:{justNow:"刚刚",minsAgo:"{{count}} 分钟前",hoursAgo:"{{count}} 小时前",daysAgo:"{{count}} 天前"},toast:{loggedOut:"已退出登录"},login:{title:"连接到拓竹云",subtitle:"跨设备同步您的切片预设",email:"邮箱",password:"密码",region:"地区",regionGlobal:"全球",regionChina:"中国",verificationCode:"验证码",totpCode:"验证器代码",checkEmail:"检查您的邮箱 ({{email}}) 获取 6 位验证码",enterTotpHint:"输入验证器应用中的 6 位代码",accessToken:"访问令牌",accessTokenHint:"粘贴您的拓竹访问令牌(来自 Bambu Studio)",back:"返回",loginButton:"登录",verifyButton:"验证",setTokenButton:"设置令牌",useToken:"改用访问令牌",useEmail:"改用邮箱登录",toast:{loggedIn:"登录成功",codeSent:"验证码已发送到您的邮箱",enterTotp:"输入验证器应用中的代码",tokenSet:"令牌设置成功"}},presets:{myPreset:"我的预设(可编辑)",duplicate:"复制",editable:"可编辑",failedToLoadDetails:"加载预设详情失败",deleteConfirm:"删除此预设?",deleteWarning:'这将从拓竹云中永久删除"{{name}}"。此操作无法撤销。',noDuplicatePermission:"您没有复制预设的权限",noEditPermission:"您没有编辑预设的权限",noDeletePermission:"您没有删除预设的权限",types:{filament:"耗材预设",printer:"打印机预设",process:"工艺预设"},toast:{deleted:"预设已删除",created:"预设已创建",updated:"预设已更新",duplicated:"预设已复制",fieldAdded:'字段"{{key}}"已添加',exported:"预设已导出"},baseLabel:"基础:{{name}}",currentLabel:"当前:{{name}}",newPreset:"新建预设",editPreset:"编辑预设",duplicatePreset:"复制预设",createNewPreset:"创建新预设",customizeSettings:"自定义新预设的设置",compareWithBase:"与基础预设比较",compare:"比较",basePreset:"基础预设",selectBasePreset:"选择基础预设...",presetName:"预设名称",myCustomPreset:"我的自定义预设",inheritsFrom:"继承自",dropJsonToImport:"拖放 JSON 以导入",tabs:{common:"常用",allFields:"所有字段"},availableFields:"可用字段",searchFieldsPlaceholder:"搜索字段...",noMatchingFields:"没有匹配的字段",allFieldsAdded:"所有字段已添加",addCustomField:"添加自定义字段",yourOverrides:"您的覆盖值",noOverridesYet:"暂无覆盖值",clickFieldsToAdd:"点击左侧的字段进行添加",saveAsTemplate:"保存为模板",jsonTip:"提示:将 .json 文件拖放到此对话框的任意位置以导入设置"},cloudView:{searchPlaceholder:"搜索预设...",templates:"模板",refresh:"刷新",newPreset:"新建预设",clearFilters:"清除筛选",compareMode:"比较模式",selectAnotherPreset:"选择另一个 {{type}} 预设",clickTwoPresets:"点击两个相同类型的预设进行比较",selectFirst:"1. 选择第一个",selectSecond:"2. 选择第二个",compareNow:"立即比较",lastSynced:"上次同步:",showingCount:"显示 {{showing}} / {{total}} 个预设",noPresetsFound:"未找到预设",columns:{filament:"耗材",process:"工艺",printer:"打印机"},noFilamentPresets:"无耗材预设",noProcessPresets:"无工艺预设",noPrinterPresets:"无打印机预设",filters:{type:"类型",owner:"所有者",printer:"打印机",nozzle:"喷嘴",filament:"耗材",layer:"层",all:"全部",myPresets:"我的预设",builtIn:"内置",process:"工艺"},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:{debugLoggingActive:"调试日志记录已激活",manageLogs:"管理",collectItem7:"打印机连接和固件版本",collectItem8:"集成状态(Spoolman、MQTT、HA)",collectItem9:"网络接口(仅子网)",collectItem10:"Python 包版本",collectItem11:"数据库健康检查",collectItem12:"Docker 环境详情"},fileManager:{title:"文件管理器",subtitle:"组织和管理您的打印文件",uploadFiles:"上传文件",newFolder:"新建文件夹",folderName:"文件夹名称",folderNamePlaceholder:"例如:功能零件",renameFile:"重命名文件",renameFolder:"重命名文件夹",moveFiles:"移动 {{count}} 个文件",rootNoFolder:"根目录(无文件夹)",current:"当前",linkFolder:"链接文件夹",linkFolderDescription:'将"{{name}}"链接到项目或归档以便快速访问。',project:"项目",archive:"归档",noProjectsFound:"未找到项目",noArchivesFound:"未找到归档",unlink:"取消链接",link:"链接",dragDropFiles:"将文件拖放到此处",dropFilesHere:"将文件放在此处",orClickToBrowse:"或点击浏览",allFileTypesSupported:"支持所有文件类型。ZIP 文件将被解压。",zipFilesDetected:"检测到 ZIP 文件",zipExtractOptions:"ZIP 文件将被解压。选择如何处理文件夹结构:",preserveZipStructure:"保留 ZIP 中的文件夹结构",createFolderFromZip:"从 ZIP 文件名创建文件夹",stlThumbnailGeneration:"STL 缩略图生成",zipMayContainStl:"ZIP 文件可能包含 STL 文件。可以在解压时生成缩略图。",thumbnailsCanBeGenerated:"可以为 STL 文件生成缩略图。大型模型可能需要更长时间处理。",generateThumbnailsForStl:"为 STL 文件生成缩略图",threemfDetected:"检测到 3MF 文件",threemfExtractionInfo:"将自动从 3MF 文件中提取打印机型号、材料、颜色和打印设置。",willBeExtracted:"将被解压",filesExtracted:"已解压 {{count}} 个文件",uploadComplete:"上传完成:{{succeeded}} 个成功",uploadFailed:"{{count}} 个失败",zipFilesFailed:"{{count}} 个文件失败",uploading:"上传中...",changeLink:"更改链接...",linkTo:"链接到...",linkToProjectOrArchive:"链接到项目或归档",addToQueue:"添加到队列",schedulePrint:"排程",generateThumbnail:"生成缩略图",generateThumbnails:"生成缩略图",generateThumbnailsForMissing:"为缺少缩略图的 STL 文件生成缩略图",gridView:"网格视图",listView:"列表视图",lowDiskSpaceWarning:"磁盘空间不足警告",lowDiskSpaceDetails:"仅剩 {{free}}(总共 {{total}})。阈值设置为 {{threshold}} GB。",files:"文件",folders:"文件夹",size:"大小",free:"剩余",allFiles:"所有文件",wrap:"换行",enableTextWrapping:"启用文本换行",disableTextWrapping:"禁用文本换行",dragToResizeTooltip:"拖动调整大小,双击重置",searchFiles:"搜索文件...",allTypes:"所有类型",prints:"打印",ascending:"升序",descending:"降序",resultsCount:"{{showing}} / {{total}} 个文件",selectAll:"全选",deselectAll:"取消全选",selected:"已选择 {{count}} 个",adding:"添加中...",loadingFiles:"加载文件中...",folderIsEmpty:"文件夹为空",noFilesYet:"暂无文件",folderEmptyDescription:"上传文件或将文件移入此文件夹以开始使用。",noFilesDescription:"上传文件以开始组织您的打印相关文件。",noMatchingFiles:"没有匹配的文件",noMatchingFilesDescription:"没有文件匹配您当前的搜索或筛选条件。",clearFilters:"清除筛选",printedCount:"已打印 {{count}} 次",uploadedBy:"上传者",deleteFolder:"删除文件夹",deleteFile:"删除文件",deleteFilesCount:"删除 {{count}} 个文件",deleteFolderConfirm:"确定要删除此文件夹吗?其中的所有文件也将被删除。",deleteFileConfirm:"确定要删除此文件吗?",deleteFilesConfirm:"确定要删除 {{count}} 个选中的文件吗?此操作无法撤销。",deleting:"删除中...",noPermissionRenameFolder:"您没有重命名文件夹的权限",noPermissionLinkFolder:"您没有链接文件夹的权限",noPermissionDeleteFolder:"您没有删除文件夹的权限",noPermissionPrint:"您没有打印的权限",noPermissionAddToQueue:"您没有添加到队列的权限",noPermissionDownload:"您没有下载文件的权限",noPermissionRenameFile:"您没有重命名此文件的权限",noPermissionGenerateThumbnail:"您没有生成缩略图的权限",noPermissionDeleteFile:"您没有删除此文件的权限",noPermissionCreateFolder:"您没有创建文件夹的权限",noPermissionUpload:"您没有上传文件的权限",noPermissionMoveFiles:"您没有移动文件的权限",noPermissionDeleteFiles:"您没有删除文件的权限",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:{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:"查看详情",namePlaceholder:"例如:Voron 2.4 构建",descriptionPlaceholder:"可选描述...",color:"颜色",targetPlates:"目标板数",targetPlatesPlaceholder:"例如:25",targetPlatesHelp:"打印任务数量",targetParts:"目标零件数",targetPartsPlaceholder:"例如:150",targetPartsHelp:"所需零件总数",tagsLabel:"标签(逗号分隔)",tagsPlaceholder:"例如:voron、功能件、礼物",dueDate:"截止日期",priority:"优先级",priorityLow:"低",priorityNormal:"普通",priorityHigh:"高",priorityUrgent:"紧急",statusActive:"进行中",statusCompleted:"已完成",statusArchived:"已归档",done:"完成",completed:"已完成",failed:"失败",inQueue:"队列中",noPrintsYet:"暂无打印",printJobs:"打印任务(板)",partsPrinted:"已打印零件",failedParts:"失败零件",import:"导入",export:"导出",importProject:"导入项目",exportAll:"导出所有项目",loading:"加载项目中...",noEditPermission:"您没有编辑项目的权限",noDeletePermission:"您没有删除项目的权限",noCreatePermission:"您没有创建项目的权限",noImportPermission:"您没有导入项目的权限",noExportPermission:"您没有导出项目的权限",toast:{created:"项目已创建",updated:"项目已更新",deleted:"项目已删除",imported:"项目已导入",multipleImported:"已导入 {{count}} 个项目",importFailed:"导入失败",exported:"项目已导出(仅元数据)"}},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:{title:"系统信息",version:"版本",uptime:"运行时间",cpuUsage:"CPU 使用率",memoryUsage:"内存使用率",diskUsage:"磁盘使用率",networkInfo:"网络信息",logs:"日志",debugMode:"调试模式",enableDebug:"启用调试日志",disableDebug:"禁用调试日志",downloadLogs:"下载日志",clearLogs:"清除日志",dockerInfo:"Docker 信息",containerName:"容器名称",imageName:"镜像名称",platform:"平台",architecture:"架构"},library:{title:"耗材库",addFilament:"添加耗材",editFilament:"编辑耗材",deleteFilament:"删除耗材",vendor:"厂商",material:"材料",color:"颜色",kFactor:"K 值",temperature:"温度",noFilaments:"耗材库中没有耗材",deleteConfirm:"确定要删除此耗材吗?",importFromPrinter:"从打印机导入",exportToFile:"导出到文件"},spoolman:{title:"Spoolman 集成",enabled:"Spoolman 已启用",url:"Spoolman URL",connected:"已连接",disconnected:"未连接",testConnection:"测试连接",sync:"同步",syncing:"同步中...",lastSync:"上次同步",linkToSpoolman:"链接到 Spoolman",openInSpoolman:"在 Spoolman 中打开",unlinkSpool:"取消链接耗材",unlinkConfirmTitle:"解开线轴?",unlinkConfirmMessage:"这将断开卷轴与 Spoolman 的连接。Spoolman 中的卷轴数据将保持不变。",selectSpool:"选择耗材",noUnlinkedSpools:"无未链接的耗材",linkSuccess:"耗材已成功链接到 Spoolman",linkFailed:"链接耗材失败",unlinkSuccess:"已成功从 Spoolman 取消链接耗材",unlinkFailed:"取消链接耗材失败",spoolId:"耗材 ID",fillSourceLabel:"(Spoolman)",weight:"重量",remaining:"剩余",disableWeightSync:"禁用 AMS 估计重量同步",disableWeightSyncDesc:"不从 AMS 估计值更新剩余容量。如果您更喜欢 Spoolman 的用量追踪而非 AMS 百分比估计,请使用此选项。新耗材仍将使用 AMS 估计值作为初始重量。",reportPartialUsage:"报告失败打印的部分用量",reportPartialUsageDesc:"当打印失败或被取消时,根据层进度报告估计的耗材使用量。"},inventory:{title:"耗材库存",addSpool:"添加耗材",editSpool:"编辑耗材",material:"材料",selectMaterial:"选择材料...",subtype:"子类型",brand:"品牌",searchBrand:"搜索品牌...",useCustomBrand:'使用"{{brand}}"',useCustomMaterial:"使用自定义材料:{{material}}",colorName:"颜色名称",colorNamePlaceholder:"翡翠白、烈焰红...",color:"颜色",hexColor:"十六进制颜色",pickColor:"选择自定义颜色",labelWeight:"标签重量",coreWeight:"空盘重量",searchSpoolWeight:"搜索耗材重量...",weightUsed:"已使用",currentWeight:"剩余重量",measuredWeight:"称量重量",spoolName:"线轴",costPerKg:"每公斤成本",measuredWeightError:"称量重量必须在 {{min}}g 到 {{max}}g 之间。",slicerFilament:"切片耗材",slicerFilamentName:"切片预设名称",slicerPreset:"切片预设",searchPresets:"搜索耗材预设...",selectedPreset:"已选择",noPresetsFound:"未找到预设",tempOverrides:"温度覆盖",note:"备注",notePlaceholder:"关于此耗材的任何备注...",archive:"归档",restore:"恢复",noSpools:"暂无耗材。添加您的第一个耗材开始使用。",noManualSpools:"没有手动添加的耗材。请先向库存中添加耗材。",kProfiles:"K 值配置",addKProfile:"添加 K 值配置",assignSpool:"分配耗材",unassignSpool:"取消分配",assignSuccess:"耗材已分配,AMS 槽位已配置",assignFailed:"分配耗材失败",assignMismatchTitle:"材料不匹配",assignMismatchMessage:'所选线轴材料 "{{spoolMaterial}}" 与 {{location}} 的料槽材料 "{{trayMaterial}}" 不匹配。仍要分配吗?',assignMismatchConfirm:"仍然分配",assignPartialMismatchMessage:'线轴材料 "{{spoolMaterial}}" 与 {{location}} 的 "{{trayMaterial}}" 相近但不完全一致。是否继续?',assignProfileMismatchMessage:'线轴配置 "{{spoolProfile}}" 与 {{location}} 的料槽配置 "{{trayProfile}}" 不一致。是否继续?',selectSpool:"选择要分配到此槽位的耗材",assigned:"已分配",assigning:"分配中...",searchSpools:"搜索耗材...",showAllSpools:"显示所有耗材",allMaterials:"所有材料",filterByBrand:"按品牌筛选...",showArchived:"显示已归档",quickAdd:"快速添加(库存)",quantity:"数量",stock:"库存",configured:"已配置",spoolsCreated:"已创建 {{count}} 个耗材",spoolCreated:"耗材已创建",spoolUpdated:"耗材已更新",spoolDeleted:"耗材已删除",spoolArchived:"耗材已归档",spoolRestored:"耗材已恢复",deleteConfirm:"确定要删除此耗材吗?此操作无法撤销。",archiveConfirm:"确定要归档此耗材吗?",advancedSettings:"高级设置",filamentInfoTab:"耗材信息",paProfileTab:"PA 配置",filamentInfo:"耗材",additional:"附加",loadingPresets:"加载云端预设中...",cloudConnected:"云端已连接",cloudNotConnected:"云端未连接(使用默认值)",recentColors:"最近",searchColors:"搜索颜色...",searchResults:"搜索结果",allColors:"所有颜色",commonColors:"常用颜色",showLess:"显示更少",showAll:"显示全部",noColorsFound:"没有颜色匹配您的搜索",noResults:"未找到匹配项",selectMaterialFirst:"请先在耗材信息选项卡中选择材料。",noPrintersConfigured:"未配置打印机。添加打印机以使用 PA 配置。",matchingFilter:"匹配",anyBrand:"任何品牌",anyVariant:"任何变体",autoSelect:"自动选择",matches:"匹配",match:"匹配",noMatches:"无匹配",connected:"已连接",offline:"离线",printerOffline:"打印机离线。连接后查看校准配置。",noKProfilesMatch:"没有 K 值配置匹配所选耗材。",leftNozzle:"左喷嘴",rightNozzle:"右喷嘴",profilesSelected:"个校准配置已选择",totalInventory:"总库存",totalConsumed:"总消耗",byMaterial:"按材料",inPrinter:"在打印机中",lowStock:"库存不足",sinceTracking:"自开始追踪",loadedInAms:"已装载到 AMS/外置",remaining:"剩余",weightCheck:"重量检查",lastWeighed:"上次称量",neverWeighed:"从未称量",search:"搜索耗材...",showing:"显示",to:"到",of:"共",show:"显示",spools:"个耗材",spool:"个耗材",page:"页",noSpoolsMatch:"未找到结果",noSpoolsMatchDesc:"尝试调整您的搜索或筛选条件。",active:"活跃",archived:"已归档",all:"全部",used:"已使用",new:"新的",clearFilters:"清除筛选",table:"表格",cards:"卡片",net:"净重",groupSimilar:"分组",groupedSpools:"{{count}} 个相同耗材",groupedRows:"行",columns:"列",configureColumns:"配置列",configureColumnsDesc:"拖动以重新排序列或使用箭头。使用眼睛图标切换可见性。",visible:"可见",reset:"重置",cancel:"取消",applyChanges:"应用更改",moveUp:"上移",moveDown:"下移",hideColumn:"隐藏列",showColumn:"显示列",linkToSpool:"链接到耗材",tagLinked:"标签已链接到耗材",tagLinkFailed:"链接标签失败",tagAlreadyLinked:"标签已链接到其他耗材",unknownTag:"检测到未知 RFID 标签",usageHistory:"使用历史",noUsageHistory:"暂无使用记录",printName:"打印名称",weightConsumed:"消耗重量",clearHistory:"清除",historyCleared:"使用历史已清除",fillSourceLabel:"(库存)",lowStockThresholdError:"阈值必须在 0.1 到 99.9 之间"},timelapse:{title:"延时摄影",create:"创建延时摄影",download:"下载",delete:"删除",preview:"预览",frameRate:"帧率",quality:"质量",processing:"处理中...",noTimelapses:"无可用延时摄影"},ams:{title:"AMS",slot:"槽位",empty:"空",emptySlot:"空槽位",unknown:"未知",humidity:"湿度",temperature:"温度",filamentType:"耗材类型",filamentColor:"颜色",remaining:"剩余",history:"AMS 历史",noHistory:"无可用历史",configureSlot:"配置槽位",externalSpool:"外置耗材",profile:"配置",kFactor:"K 值",fill:"填充",configure:"配置",used:"已使用",remainingUnit:"剩余"},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:"Stagger printer starts",staggerGroupSize:"Group size",staggerInterval:"Interval (min)",staggerPreview:"{{printers}} printers → {{groups}} groups of {{size}}, starting every {{interval}} min",staggerLastGroup:"last group: {{count}}",staggerTotal:"total: {{minutes}} min",staggerToPrinters:"分批发送到 {{count}} 台打印机",gcodeInjection:"注入自动打印G-code"},backup:{title:"备份与恢复",createBackup:"创建备份",restoreBackup:"恢复备份",restoreDescription:"从备份文件替换所有数据",downloadBackup:"下载备份",uploadBackup:"上传备份",lastBackup:"上次备份",autoBackup:"自动备份",backupNow:"立即备份",restoreWarning:"警告:恢复备份将覆盖所有当前数据。",includeArchives:"包含归档",includeSettings:"包含设置",includeProfiles:"包含配置文件",backupSuccess:"备份创建成功",restoreSuccess:"备份恢复成功",backupFailed:"备份失败",restoreFailed:"恢复失败",restoreNote:"恢复期间虚拟打印机将停止",githubBackup:"GitHub 备份",enabled:"已启用",cloudLoginRequired:"需要登录 Bambu Cloud。请在 配置文件 → 云配置文件 中登录以启用 GitHub 备份。",cloudLoginRequiredShort:"需要Cloud登录",githubDescription:"自动将您的配置文件同步到私有 GitHub 仓库以进行备份和版本历史记录。",repositoryUrl:"仓库 URL",personalAccessToken:"个人访问令牌",tokenSaved:"(已保存)",enterNewToken:"输入新令牌以更新",tokenHint:"具有内容读写权限的细粒度令牌",branch:"分支",manualOnly:"仅手动",hourly:"每小时",daily:"每天",weekly:"每周",includeInBackup:"包含在备份中",kProfiles:"K 配置文件",kProfilesDescription:"来自已连接打印机的压力推进校准",noPrintersConnected:"没有打印机连接",printersConnected:"{{connected}}/{{total}} 已连接",cloudProfiles:"云配置文件",cloudProfilesDescription:"来自 Bambu Cloud 的耗材、打印机和工艺预设",appSettings:"应用设置",appSettingsDescription:"Bambuddy 配置(完整数据库)",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:"历史记录",clear:"清除",date:"日期",status:"状态",commit:"提交",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:"请不要关闭此页面或导航离开。对于大型备份,此操作可能需要几分钟。",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:"关闭",scheduledBackup:"Scheduled Backups",scheduledBackupDescription:"Automatically create backup snapshots on a schedule. Output directory can be mounted to a NAS or external storage.",frequency:"Frequency",backupTime:"Time",retention:"Retention",retentionDescription:"Number of backups to keep",outputPath:"Output Path",outputPathPlaceholder:"Default: {{path}}",outputPathDescription:"Leave empty for default location",runNow:"Run Now",backupFiles:"Backup Files",noScheduledBackups:"No backups yet",deleteBackup:"Delete",deleteBackupConfirm:"Delete this backup file?",backupRunning:"Backup in progress...",scheduledBackupComplete:"Backup completed successfully",scheduledBackupFailed:"Backup failed",nextBackup:"Next backup",backupSize:"Size",utc:"UTC",defaultPathLabel:"Default:",categories:{settings:"设置",notification_providers:"通知提供者",notification_templates:"通知模板",smart_plugs:"智能插座",printers:"打印机",filaments:"耗材",maintenance_types:"维护类型",archives:"档案",projects:"项目",pending_uploads:"待上传",external_links:"外部链接",api_keys:"API 密钥"}},tags:{title:"标签",addTag:"添加标签",editTag:"编辑标签",deleteTag:"删除标签",tagName:"标签名称",tagColor:"标签颜色",noTags:"无标签",deleteConfirm:"确定要删除此标签吗?",manageTags:"管理标签"},uploadModal:{title:"上传 3MF 文件",dragDrop:"将 .3mf 文件拖放到此处",or:"或",browseFiles:"浏览文件",extractionInfo:"将从 3MF 文件元数据中自动提取打印机型号。",uploaded:"已上传",failed:"失败",uploading:"上传中...",upload:"上传",uploadFailed:"上传失败"},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:"保存中...",failureReasons:{adhesionFailure:"附着力失败",spaghettiDetached:"拉丝 / 脱落",layerShift:"层偏移",cloggedNozzle:"喷嘴堵塞",filamentRunout:"耗材用完",warping:"翘曲",stringing:"拉丝",underExtrusion:"挤出不足",powerFailure:"断电",userCancelled:"用户取消",other:"其他"},statuses:{completed:"已完成",failed:"失败",aborted:"已取消",printing:"打印中"}},kProfiles:{title:"K 值配置",noPrintersConfigured:"未配置打印机",addPrinterInSettings:"在设置中添加打印机以管理 K 值配置",noActivePrinters:"无活跃打印机",enablePrinterConnection:"启用打印机连接以查看其 K 值配置",loadingProfiles:"加载 K 值配置中...",printerOffline:"打印机离线",printerOfflineDesc:"所选打印机未连接。开启电源以查看 K 值配置。",noMatchingProfiles:"无匹配的配置",noMatchingProfilesDesc:"没有配置匹配您的搜索条件",noKProfiles:"无 K 值配置",noKProfilesDesc:"未找到 {{diameter}}mm 喷嘴的压力推进配置",createFirstProfile:"创建第一个配置",printer:"打印机",nozzle:"喷嘴",refresh:"刷新",addProfile:"添加配置",export:"导出",import:"导入",select:"选择",selectAll:"全选",delete:"删除",searchPlaceholder:"按名称或耗材搜索...",allExtruders:"所有挤出机",leftOnly:"仅左侧",rightOnly:"仅右侧",allFlow:"所有流量",hfOnly:"仅高流量",sOnly:"仅标准",sortName:"排序:名称",sortKValue:"排序:K 值",sortFilament:"排序:耗材",leftExtruder:"左挤出机",rightExtruder:"右挤出机",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:"请稍候"},deleteConfirm:{title:"删除配置",cannotUndo:"此操作无法撤销",message:'确定要从打印机删除"{{name}}"吗?'},bulkDelete:{title:"删除配置",cannotUndo:"此操作无法撤销",message:"确定要从打印机删除 {{count}} 个选中的配置吗?"},toast:{profileSaved:"K 值配置已保存",profilesSaved:"K 值配置已保存到 {{count}} 个挤出机",selectAtLeastOneExtruder:"请至少选择一个挤出机",profileDeleted:"K 值配置已删除",profilesDeleted:"已删除 {{count}} 个配置",exportedProfiles:"已导出 {{count}} 个配置",importedProfiles:"已导入 {{count}} / {{total}} 个配置",noProfilesToExport:"无可导出的配置",invalidFileFormat:"无效的文件格式",failedToParseImport:"解析导入文件失败",failedToSaveBatch:"批量保存 K 值配置失败",noteSaved:"备注已保存",failedToSaveNote:"保存备注失败"},permission:{noRead:"您没有刷新配置的权限",noCreate:"您没有添加配置的权限",noUpdate:"您没有更新 K 值配置的权限",noDelete:"您没有删除 K 值配置的权限",noExport:"您没有导出配置的权限",noImport:"您没有导入配置的权限"}},virtualPrinter:{title:"虚拟打印机",running:"运行中",stopped:"已停止",description:{default:"启用虚拟打印机,使其在 Bambu Studio 和 OrcaSlicer 中可见。发送到此打印机的文件将直接归档而不打印。",proxy:"启用代理,将切片软件流量中继到真实打印机,允许在任何网络上远程打印。"},enable:{title:"启用虚拟打印机",visibleInSlicer:'在切片软件发现中显示为"Bambuddy"',proxyingTo:"代理到 {{name}}",notActive:"未激活"},model:{title:"打印机型号",description:"选择要模拟的打印机型号。",restartWarning:"更改型号将重启虚拟打印机"},accessCode:{title:"访问码",isSet:"访问码已设置",notSet:"未设置访问码 - 需要设置才能启用",placeholder:"输入 8 位字符代码",placeholderChange:"输入新代码以更改",hint:"必须恰好 8 个字符。切片软件使用此代码进行认证。",charCount:"({{count}}/8)"},targetPrinter:{title:"目标打印机",configured:"代理目标已配置",notConfigured:"未选择目标打印机 - 代理模式需要设置",placeholder:"选择打印机...",hint:"选择要将切片软件流量代理到的打印机。打印机必须处于局域网模式。",noPrinters:"未配置打印机。请先添加打印机以使用代理模式。"},remoteInterface:{title:"网络接口覆盖",configured:"接口覆盖已激活",optional:"可选 - 当自动检测的 IP 不正确时使用(例如多网卡、Docker、VPN)",placeholder:"自动检测(默认)...",hint:"覆盖通过 SSDP 广播并在 TLS 证书中使用的 IP 地址。在 Bambuddy 有多个网络接口时很有用。"},mode:{title:"模式",archive:"归档",archiveDesc:"立即归档文件",review:"审核",reviewDesc:"归档前审核",queue:"队列",queueDesc:"归档并添加到队列",proxy:"代理",proxyDesc:"中继到真实打印机"},autoDispatch:{title:"自动派发",description:"添加到队列时自动开始打印。关闭后,打印任务等待手动派发。"},setupRequired:{title:"需要设置",description:"虚拟打印机功能需要额外的系统配置才能工作。包括端口转发、防火墙规则和平台特定设置。",readGuide:"启用前请阅读设置指南"},howItWorks:{title:"工作原理",step1:"在同一局域网中,虚拟打印机会通过发现机制自动出现在您的切片软件(Bambu Studio / OrcaSlicer)中。从其他网络,通过 IP 地址和访问码手动添加。",step2:'在归档、审核和队列模式下,使用切片软件中的"发送"按钮将 3MF 文件上传到 Bambuddy。切片软件会显示"打印成功"— 文件已存储,未打印。',step3:"在代理模式下,虚拟打印机将所有流量中继到真实打印机 — 打印会立即开始,就像直接连接一样。"},status:{title:"状态详情",printerName:"打印机名称",model:"型号",serialNumber:"序列号",mode:"模式",pendingFiles:"待处理文件",targetPrinter:"目标打印机",ftpPort:"FTP 端口",mqttPort:"MQTT 端口",ftpConnections:"FTP 连接",mqttConnections:"MQTT 连接"},toast:{updated:"虚拟打印机设置已更新",failedToUpdate:"更新设置失败",accessCodeRequired:"请先设置访问码",targetPrinterRequired:"请先选择目标打印机",bindIpRequired:"请先设置绑定 IP",accessCodeEmpty:"访问码不能为空",accessCodeLength:"访问码必须恰好 8 个字符",created:"虚拟打印机已创建",failedToCreate:"创建虚拟打印机失败",deleted:"虚拟打印机已删除",failedToDelete:"删除虚拟打印机失败"},list:{title:"虚拟打印机",add:"添加",addFirst:"添加虚拟打印机",empty:"未配置虚拟打印机。添加一个以开始使用。"},bindIp:{title:"绑定接口",placeholder:"选择接口...",hint:"此虚拟打印机绑定的网络接口。每台打印机必须唯一。"},proxy:{accessCodeHint:"在代理模式下,在切片软件中使用目标打印机的访问码。连接会透明转发到真实打印机。"},addDialog:{title:"添加虚拟打印机",name:"名称",hint:"创建后可以配置访问码、目标打印机和其他设置。",create:"创建"},deleteConfirm:{title:"删除虚拟打印机",message:'确定要删除"{{name}}"吗?这将停止此打印机的所有服务。'}},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:"不支持的文件格式"}},maintenanceDescriptions:{lubricateCarbonRods:"在碳纤维杆上涂抹润滑剂以确保顺畅运动",lubricateRails:"在线性导轨上涂抹润滑剂以确保顺畅运动",cleanNozzle:"清洁热端和喷嘴以防止堵塞",checkBelts:"检查皮带张力以确保打印精度",cleanBuildPlate:"清洁构建板以获得更好的附着力",checkExtruder:"检查挤出机齿轮磨损情况",checkCooling:"确保冷却风扇正常工作",generalInspection:"打印机综合检查",cleanCarbonRods:"清洁碳纤维杆以减少摩擦",lubricateSteelRods:"在钢杆上涂抹润滑剂以确保顺畅运动",cleanSteelRods:"清洁钢杆以减少摩擦",cleanLinearRails:"擦拭线性导轨以清除灰尘和碎屑",checkPtfeTube:"检查 PTFE 管的磨损或损坏",replaceHepaFilter:"更换 HEPA 过滤器以保证空气质量",replaceCarbonFilter:"更换活性炭过滤器",lubricateLeftNozzleRail:"润滑左喷嘴导轨(H2 系列)"},smartPlugs:{offline:"离线",admin:"管理",openPlugAdminPage:"打开插座管理页面",deleteSmartPlug:"删除智能插座",turnOnSmartPlug:"开启智能插座",turnOffSmartPlug:"关闭智能插座",turnOn:"开启",turnOff:"关闭",addSmartPlug:{scanningNetwork:"扫描网络中...",chooseEntity:"选择实体...",connectionFailed:"连接失败",searchEntities:"搜索实体...",searchPowerSensors:"搜索功率传感器...",searchEnergySensors:"搜索能量传感器...",placeholders:{plugName:"客厅插座",mqttStateOnValue:"ON、true、1",mqttSameAsPower:"与功率主题相同,或不同"}},linkedTo:"关联到:",monitorOnly:"仅监控",alerts:"警报",scheduleOn:"开启 {{time}}",scheduleOff:"关闭 {{time}}",on:"开启",off:"关闭",power:"功率",kwhToday:"今日kWh",settings:"设置",automationSettings:"自动化设置",showInSwitchbar:"在开关栏显示",quickAccessSidebar:"从侧边栏快速访问",enabled:"已启用",enableAutomation:"为此插座启用自动化",autoOn:"自动开启",autoOnDescription:"打印开始时开启",autoOff:"自动关闭",autoOffDescription:"打印完成时关闭(一次性)",autoOffPersistent:"保持启用",autoOffPersistentDescription:"在打印之间保持启用而非一次性",turnOffDelayMode:"关闭延迟模式",time:"时间",temp:"温度",delayMinutes:"延迟(分钟)",tempThreshold:"温度阈值(°C)",tempThresholdDescription:"当喷嘴冷却到此温度以下时关闭",edit:"编辑",deleteConfirm:'确定要删除"{{name}}"吗?此操作无法撤销。',turnOnConfirm:'确定要开启"{{name}}"吗?',turnOffConfirm:'确定要关闭"{{name}}"吗?这将切断连接设备的电源。',failedToTurn:'无法{{action}}"{{name}}"',unknown:"未知",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")。如果主题发布原始数值,请留空。 +Valor ON: a string exata que significa "ON". Deixe vazio para detecção automática (ON, true, 1).`,restControl:"Control",restOnUrl:"Turn ON URL",restOffUrl:"Turn OFF URL",restOnBody:"ON Request Body",restOffBody:"OFF Request Body",restMethod:"HTTP Method",restHeaders:"Custom Headers (JSON)",restStatusUrl:"Status URL",restStatusPath:"State JSON Path",restStatusOnValue:"ON Value",restPowerUrl:"URL de potência",restPowerPath:"Power JSON Path",restPowerMultiplier:"Multiplicador de potência",restEnergyUrl:"URL de energia",restEnergyPath:"Energy JSON Path",restEnergyMultiplier:"Multiplicador de energia",restUrlRequired:"At least one URL (ON or OFF) is required for REST plugs",restHeadersHint:'e.g. {"Authorization": "Bearer your-token"}',restBodyHint:'e.g. ON, {"state": "on"}',restStatusHint:"URL to poll for current state",restPathHint:"e.g. state or data.power.status",restPowerUrlHint:"URL separada para dados de potência (usa a URL de status se vazio)",restEnergyUrlHint:"URL separada para dados de energia (usa a URL de status se vazio)",restEnergyHint:"Cada valor pode usar sua própria URL ou recorrer à URL de status. Use multiplicadores para conversão de unidades (ex: 0.001 para converter Wh em kWh).",testConnection:"Test Connection",connectionSuccess:"Connection successful",noSwitchesInSwitchbar:"Nenhum interruptor na barra",enableSwitchbarHint:'Ative "Mostrar na barra de interruptores" em Configurações > Smart Plugs'},notifications:{providerTypes:{callmebot:"CallMeBot/WhatsApp",ntfy:"ntfy",pushover:"Pushover",telegram:"Telegram",email:"E-mail",discord:"Discord",webhook:"Webhook",homeassistant:"Home Assistant"},providerDescriptions:{email:"Notificações por e-mail SMTP",telegram:"Notificações via bot do Telegram",discord:"Enviar para canal do Discord via webhook",ntfy:"Notificações push gratuitas e auto-hospedáveis",pushover:"Notificações push simples e confiáveis",callmebot:"Notificações gratuitas via WhatsApp pelo CallMeBot",webhook:"POST HTTP genérico para qualquer URL",homeassistant:"Notificações persistentes no painel do Home Assistant"},lastSuccess:"Último: {{date}}",error:"Erro",printer:"Impressora:",allPrinters:"Todas as impressoras",sendTestNotification:"Enviar Notificação de Teste",eventSettings:"Configurações de Eventos",enabled:"Ativado",sendFromProvider:"Enviar notificações deste provedor",printEvents:"Eventos de Impressão",printerStatus:"Status da Impressora",amsAlarms:"Alarmes do AMS",amsHtAlarms:"Alarmes do AMS-HT",printQueue:"Fila de Impressão",start:"Início",plateCheck:"Verificação da Mesa",complete:"Concluído",failed:"Falhou",stopped:"Parado",progress:"Progresso",offline:"Offline",lowFilament:"Filamento Baixo",maintenance:"Manutenção",amsHumidity:"Umidade do AMS",amsTemp:"Temp. do AMS",amsHtHumidity:"Umidade do AMS-HT",amsHtTemp:"Temp. do AMS-HT",bedCooled:"Mesa Resfriada",firstLayer:"Primeira camada",quiet:"Silencioso",digest:"Resumo {{time}}",printStarted:"Impressão Iniciada",plateNotEmpty:"Mesa Não Vazia",plateNotEmptyDescription:"Objetos detectados antes da impressão",printCompleted:"Impressão Concluída",bedCooledLabel:"Mesa Resfriada",bedCooledDescription:"Mesa resfriou abaixo do limite após a impressão",firstLayerCompleteLabel:"Primeira camada concluída",firstLayerCompleteDescription:"Notificar com foto quando a primeira camada terminar",missingSpoolAssignmentLabel:"Atribuição de bobina ausente",missingSpoolAssignmentDescription:"Notificar quando a impressão iniciar e bandejas necessárias não tiverem bobina atribuída",printFailed:"Impressão Falhou",printStopped:"Impressão Parada",progressMilestones:"Marcos de Progresso",progressMilestonesDescription:"Notificar em 25%, 50%, 75%",printerOffline:"Impressora Offline",printerError:"Erro da Impressora",lowFilamentLabel:"Filamento Baixo",maintenanceDue:"Manutenção Necessária",maintenanceDueDescription:"Notificar quando manutenção for necessária",amsHumidityHigh:"Umidade Alta do AMS",amsHumidityHighDescription:"Umidade do AMS regular excede o limite",amsTemperatureHigh:"Temperatura Alta do AMS",amsTemperatureHighDescription:"Temperatura do AMS regular excede o limite",amsHtHumidityHigh:"Umidade Alta do AMS-HT",amsHtHumidityHighDescription:"Umidade do AMS-HT excede o limite",amsHtTemperatureHigh:"Temperatura Alta do AMS-HT",amsHtTemperatureHighDescription:"Temperatura do AMS-HT excede o limite",jobAdded:"Trabalho Adicionado",jobAddedDescription:"Trabalho adicionado à fila",jobAssigned:"Trabalho Atribuído",jobAssignedDescription:"Trabalho baseado em modelo atribuído à impressora",jobStarted:"Trabalho Iniciado",jobStartedDescription:"Trabalho da fila começou a imprimir",jobWaiting:"Trabalho Aguardando",jobWaitingDescription:"Trabalho aguardando filamento ou impressora",jobSkipped:"Trabalho Pulado",jobSkippedDescription:"Trabalho pulado (anterior falhou)",jobFailed:"Trabalho Falhou",jobFailedDescription:"Trabalho falhou ao iniciar",queueComplete:"Fila Concluída",queueCompleteDescription:"Todos os trabalhos da fila finalizados",quietHours:"Horário de Silêncio",noNotificationsDuring:"Sem notificações durante essas horas",editProviderToChangeQuietHours:"Edite o provedor para alterar o horário de silêncio",dailyDigest:"Resumo Diário",batchNotifications:"Agrupar notificações em um único resumo diário",sendAt:"Enviar às {{time}}",editProviderToChangeDigestTime:"Edite o provedor para alterar o horário do resumo",edit:"Editar",deleteProvider:"Excluir Provedor de Notificação",deleteConfirm:'Tem certeza que deseja excluir "{{name}}"? Isso não pode ser desfeito.',delete:"Excluir",addTitle:"Adicionar Provedor de Notificação",editTitle:"Editar Provedor de Notificação",nameLabel:"Nome *",namePlaceholder:"Minhas Notificações",providerTypeLabel:"Tipo de Provedor *",configuration:"Configuração",testConfiguration:"Testar Configuração",printerFilter:"Filtro de Impressora",onlyFromPrinter:"Enviar notificações apenas para eventos desta impressora",quietHoursDnd:"Horário de Silêncio (Não Perturbe)",quietStart:"Início",quietEnd:"Fim",dailyDigestLabel:"Resumo Diário",sendDigestAt:"Enviar resumo às",digestCollected:"Os eventos serão coletados e enviados como um único resumo neste horário",notificationEvents:"Eventos de Notificação",progressPercent:"(25%, 50%, 75%)",bedCooledAfterPrint:"(após conclusão da impressão)",cancel:"Cancelar",save:"Salvar",add:"Adicionar",nameRequired:"Nome é obrigatório",fieldRequired:"{{field}} é obrigatório",phoneNumber:"Número de Telefone",apiKey:"Chave da API",serverUrl:"URL do Servidor",topic:"Tópico",authToken:"Token de Autenticação",userKey:"Chave do Usuário",appToken:"Token do Aplicativo",priority:"Prioridade",botToken:"Token do Bot",chatId:"ID do Chat",smtpServer:"Servidor SMTP",smtpPort:"Porta SMTP",security:"Segurança",authentication:"Autenticação",username:"Usuário",password:"Senha",fromEmail:"E-mail de Origem",toEmail:"E-mail de Destino",webhookUrl:"URL do Webhook",payloadFormat:"Formato do Payload",authorization:"Autorização",titleFieldName:"Nome do Campo de Título",messageFieldName:"Nome do Campo de Mensagem",editTemplate:"Editar Modelo: {{name}}",titleLabel:"Título",bodyLabel:"Corpo",titlePlaceholder:"Título da notificação...",bodyPlaceholder:"Corpo da notificação...",availableVariables:"Variáveis Disponíveis",clickToInsert:"Clique para inserir na posição do cursor no corpo",livePreview:"Pré-visualização ao Vivo",hide:"Ocultar",show:"Mostrar",loadingPreview:"Carregando pré-visualização...",enterTemplateContent:"Insira o conteúdo do modelo para ver a pré-visualização",titlePreview:"Título:",bodyPreview:"Corpo:",resetToDefault:"Restaurar Padrão",titleRequired:"Título é obrigatório",bodyRequired:"Corpo é obrigatório",notificationLog:"Registro de Notificações",showFailedOnly:"Apenas falhas",last24Hours:"Últimas 24 horas",last7Days:"Últimos 7 dias",last30Days:"Últimos 30 dias",last90Days:"Últimos 90 dias",justNow:"Agora mesmo",noFailedNotifications:"Nenhuma notificação com falha",noNotificationsLogged:"Nenhuma notificação registrada",unknownProvider:"Provedor Desconhecido",logTitle:"Título",logMessage:"Mensagem",logError:"Erro",logProvider:"Provedor: {{type}}",logTime:"Hora: {{time}}",refresh:"Atualizar",clearOld:"Limpar Antigos",statsSummary:"Últimos {{days}} dias:",statsNotifications:"notificações",statsSent:"{{count}} enviadas",statsFailed:"{{count}} com falha",eventTypes:{print_start:"Impressão Iniciada",print_complete:"Impressão Concluída",print_failed:"Impressão Falhou",print_stopped:"Impressão Parada",print_progress:"Progresso",printer_offline:"Impressora Offline",printer_error:"Erro da Impressora",filament_low:"Filamento Baixo",maintenance_due:"Manutenção Necessária",test:"Teste"},userEmail:{title:"Notificações",emailNotifications:"Notificações por E-mail",emailNotificationsDesc:"Receba notificações por e-mail para seus próprios trabalhos de impressão. Os e-mails são enviados usando as configurações SMTP definidas na Autenticação Avançada.",sendingTo:"As notificações serão enviadas para",noEmailWarning:"Sua conta não tem um endereço de e-mail. Entre em contato com um administrador para adicionar um.",printJobNotifications:"Notificações de Trabalhos de Impressão",printJobNotificationsDesc:"Escolha quais eventos acionam notificações por e-mail para os trabalhos de impressão que você envia.",printJobStarts:"Início do Trabalho de Impressão",printJobStartsDesc:"Ser notificado quando seu trabalho de impressão começar.",printJobFinishes:"Conclusão do Trabalho de Impressão",printJobFinishesDesc:"Ser notificado quando seu trabalho de impressão concluir com sucesso.",printErrors:"Erros de Impressão",printErrorsDesc:"Ser notificado quando seu trabalho de impressão falhar ou encontrar um erro.",printJobStops:"Trabalho de Impressão Parado",printJobStopsDesc:"Ser notificado quando seu trabalho de impressão for cancelado ou parado.",saveSuccess:"Preferências de notificação salvas.",saveError:"Falha ao salvar preferências de notificação."}},richTextEditor:{bold:"Negrito",italic:"Itálico",underline:"Sublinhado",bulletList:"Lista com marcadores",numberedList:"Lista numerada",alignLeft:"Alinhar à esquerda",alignCenter:"Centralizar",alignRight:"Alinhar à direita",addLink:"Adicionar link",removeLink:"Remover link"},externalLinks:{noLinksConfigured:"Nenhum link externo configurado",deleteLink:"Excluir link",removeCustomIcon:"Remover ícone personalizado",openInNewTab:"Abrir em nova aba",placeholders:{linkName:"Meu Link"}},keyboardShortcuts:{title:"Atalhos de Teclado",navigation:"Navegação",archivesSection:"Arquivos",kProfilesSection:"K-Profiles",generalSection:"Geral",shortcuts:{goToPrinters:"Ir para Impressoras",goToArchives:"Ir para Arquivos",goToQueue:"Ir para Fila",goToStats:"Ir para Estatísticas",goToProfiles:"Ir para Perfis na Nuvem",goToSettings:"Ir para Configurações",focusSearch:"Focar na pesquisa",openUploadModal:"Abrir modal de upload",clearSelection:"Limpar seleção / desfocar input",contextMenu:"Menu de contexto nos cartões",refreshProfiles:"Atualizar perfis",newProfile:"Novo perfil",exitSelectionMode:"Sair do modo de seleção",showHelp:"Mostrar esta ajuda"},footer:"Pressione Esc ou clique fora para fechar"},notificationLog:{title:"Registro de Notificações",events:{printStarted:"Impressão Iniciada",printComplete:"Impressão Concluída",printFailed:"Impressão Falhou",printStopped:"Impressão Interrompida",progress:"Progresso",printerOffline:"Impressora Offline",printerError:"Erro na Impressora",lowFilament:"Filamento Baixo",maintenanceDue:"Manutenção Pendente",test:"Teste"},timeAgo:{justNow:"Agora mesmo",minutesAgo:"há {{minutes}} minutos",hoursAgo:"há {{hours}} horas"}},restoreBackup:{title:"Restaurar Backup",restoring:"Restaurando...",restoreComplete:"Restauração Concluída",restoreFailed:"Falha na Restauração",importSettings:"Importar configurações de um arquivo de backup",pleaseWait:"Aguarde enquanto seus dados estão sendo restaurados",clickToSelect:"Clique para selecionar o arquivo de backup (.json ou .zip)",howDuplicateHandling:"Como funciona o tratamento de duplicatas:",categories:{printers:"Impressoras",smartPlugs:"Tomadas Inteligentes",notificationProviders:"Provedores de Notificação",filaments:"Filamentos",archives:"Arquivos",pendingUploads:"Uploads Pendentes",settingsTemplates:"Configurações e Modelos"},matchingInfo:{printers:"correspondem pelo número de série",smartPlugs:"correspondem pelo endereço IP",notificationProviders:"correspondem pelo nome",filaments:"correspondem pelo nome + tipo + marca",archives:"correspondem pelo hash do conteúdo",pendingUploads:"correspondem pelo nome do arquivo",settingsTemplates:"sempre sobrescrito"},replaceExisting:"Substituir dados existentes",keepExisting:"Manter dados existentes",replaceDescription:"Substituir itens que já existem com os dados do backup",keepDescription:"Restaurar apenas itens que não existem",caution:"Atenção:",cautionText:"Sobrescrever substituirá suas configurações atuais pelos dados do backup. Os códigos de acesso da impressora nunca são sobrescritos por segurança.",itemsRestored:"Itens Restaurados",itemsSkipped:"Itens Ignorados",restored:"Restaurado",skipped:"Ignorado (já existe)",filesLabel:"Arquivos (3MF, miniaturas, etc.)",newApiKeysGenerated:"Novas Chaves API Geradas",newApiKeysWarning:"Essas chaves são exibidas apenas uma vez. Copie-as agora!",processingBackup:"Processando arquivo de backup...",noDataFound:"Nenhum dado foi encontrado para restaurar no arquivo de backup.",failedToRestore:"Falha ao restaurar o backup. Verifique o formato do arquivo."},backupExport:{title:"Exportar Backup",selectData:"Selecione os dados a incluir",selectAll:"Selecionar Todos",selectNone:"Selecionar Nenhum",categoryDescriptions:{settings:"Idioma, tema, preferências de atualização",notifications:"ntfy, Pushover, Discord, etc.",templates:"Modelos de mensagens personalizadas",smartPlugs:"Configurações de tomadas Tasmota",externalLinks:"Links da barra lateral para serviços externos",printers:"Informações da impressora (códigos de acesso excluídos)",plateDetection:"Imagens de referência de placa vazia",filaments:"Tipos e custos de filamento",maintenance:"Cronogramas de manutenção personalizados",archives:"Todos os dados de impressão + arquivos (3MF, miniaturas, fotos)",projects:"Projetos, itens de BOM e anexos",pendingUploads:"Uploads de impressora virtual aguardando revisão",apiKeys:"Chaves API de webhook (novas chaves geradas na importação)"},requiresPrinters:"Requer que as impressoras sejam selecionadas",zipFileWarning:"Um arquivo ZIP será criado.",zipFileDescription:"Inclui todos os arquivos 3MF, miniaturas, timelapses e fotos. Isso pode levar algum tempo e resultar em um arquivo grande.",includeAccessCodes:"Incluir Códigos de Acesso",includeAccessCodesDescription:"Para transferir para outra máquina",includeAccessCodesWarning:"Os códigos de acesso serão incluídos em texto simples. Mantenha este arquivo de backup seguro!",categoriesSelected:"{{selectedCount}} categorias selecionadas"},pendingUploads:{placeholders:{notes:"Adicione notas sobre esta impressão..."},discardUpload:"Descartar Upload",archiveAllUploads:"Arquivar Todos os Uploads",discardAllUploads:"Descartar Todos os Uploads",archive:"Arquivar",timeAgo:{justNow:"Agora mesmo",minutesAgo:"há {{minutes}} minutos",hoursAgo:"há {{hours}} horas",daysAgo:"há {{days}} dias"}},apiBrowser:{placeholders:{requestBody:"Corpo da requisição JSON...",searchEndpoints:"Pesquisar endpoints..."}},configureAmsSlot:{title:"Configurar Slot AMS",slotConfigured:"Slot Configurado!",configuringSlot:"Configurando slot:",slotLabel:"{{ams}} Slot {{slot}}",searchPresets:"Pesquisar predefinições...",colorPlaceholder:"Nome da cor ou hex (ex.: marrom, FF8800)",clearCustomColor:"Limpar cor personalizada",noCloudPresets:"Nenhuma predefinição na nuvem. Faça login no Bambu Cloud para sincronizar.",noPresetsAvailable:"Nenhuma predefinição disponível. Faça login no Bambu Cloud ou importe perfis locais.",noMatchingPresets:"Nenhuma predefinição correspondente encontrada.",custom:"Personalizado",builtin:"Integrado",settingsSentToPrinter:"Configurações enviadas para a impressora",filamentProfile:"Perfil de Filamento",kProfileLabel:"Perfil K (Avanço de Pressão)",filteringFor:"Filtrando por: {{material}}",noKProfile:"Nenhum perfil K (usar padrão 0.020)",noMatchingKProfiles:"Nenhum perfil K correspondente encontrado. O K padrão=0.020 será usado.",selectFilamentFirst:"Selecione um perfil de filamento primeiro",kFromCalibration:"K={{value}} da calibração da impressora",customColorLabel:"Cor Personalizada (opcional)",presetColors:"Cores de {{name}}:",showLessColors:"Mostrar menos cores",showMoreColors:"Mostrar mais cores",clear:"Limpar",hexLabel:"Hex: #{{hex}}",resetting:"Redefinindo...",resetSlot:"Redefinir Slot",cancel:"Cancelar",configuring:"Configurando...",configureSlot:"Configurar Slot"},githubBackup:{title:"Backup do GitHub",history:"Histórico",downloadBackup:"Baixar Backup",restoreBackup:"Restaurar Backup",noBackupsYet:"Nenhum backup ainda"},emailSettings:{placeholders:{fromName:"BamBuddy"}},tagManagement:{searchTags:"Pesquisar tags...",renameTag:"Renomear tag",deleteTag:"Excluir tag"},notificationTemplates:{placeholders:{title:"Título da notificação...",body:"Corpo da notificação..."}},batchTag:{placeholders:{newTag:"Digite uma nova tag..."}},photoGallery:{deletePhoto:"Excluir foto"},filamentHoverCard:{copySpoolUuid:"Copiar UUID do carretel"},kProfilesView:{hasNote:"Possui nota",copyProfile:"Copiar perfil"},layout:{openMenu:"Abrir menu",noPermissionSystemInfo:"Você não tem permissão para visualizar informações do sistema"},dashboard:{dragToReorder:"Arrastar para reordenar",hideWidget:"Ocultar widget"},notificationProviderCard:{deleteNotificationProvider:"Excluir provedor de notificação"},fileManagerModal:{closeFileManager:"Fechar gerenciador de arquivos",sortFiles:"Ordenar arquivos",goToParentFolder:"Ir para a pasta pai",threeView:"Visualização 3D"},embeddedCameraViewer:{refreshStream:"Atualizar stream",close:"Fechar",zoomOut:"Reduzir zoom",resetZoom:"Redefinir zoom",zoomIn:"Aumentar zoom",dragToResize:"Arrastar para redimensionar"},timelapseViewer:{skipBack5s:"Voltar 5s",skipForward5s:"Avançar 5s"},notificationProviders:{descriptions:{email:"Notificações por email SMTP",telegram:"Notificações via bot do Telegram",discord:"Enviar para canal do Discord via webhook",ntfy:"Notificações push gratuitas e auto-hospedáveis",pushover:"Notificações push simples e confiáveis",callmebot:"Notificações gratuitas via WhatsApp pelo CallMeBot",webhook:"POST HTTP genérico para qualquer URL"}},logViewer:{searchPlaceholder:"Pesquisar mensagem ou nome do logger...",noLogEntries:"Nenhuma entrada de log encontrada"},switchbarPopover:{noSwitchesInSwitchbar:"Nenhum switch na barra de switches"},projectPageModal:{placeholders:{title:"Título",designer:"Designer",license:"Licença",description:"Digite a descrição...",profileTitle:"Título do perfil",profileDescription:"Descrição do perfil..."}},spoolmanSettings:{},time:{unknown:"-",waiting:"Aguardando",justNow:"Agora mesmo",now:"Agora",minsAgo:"{{count}}min atrás",inMins:"em {{count}}min",hoursAgo:"{{count}}h atrás",inHours:"em {{count}}h",daysAgo:"{{count}}d atrás",inDays:"em {{count}}d"},spoolbuddy:{nav:{dashboard:"Painel",ams:"AMS",inventory:"Inventário",writeTag:"Escrever",settings:"Configurações"},status:{nfcReady:"NFC pronto",nfcOff:"NFC desligado",offline:"Offline",online:"Online",noPrinters:"Sem impressoras",deviceOffline:"Dispositivo offline",waitingConnection:"Aguardando conexão do dispositivo...",systemReady:"Sistema pronto",status:"Status"},dashboard:{readyToScan:"Pronto para escanear",idleMessage:"Coloque um carretel na balança para identificá-lo",nfcHint:"A tag NFC será lida automaticamente",device:"Dispositivo",syncWeight:"Sincronizar peso",weightSynced:"Sincronizado!",unknownTag:"Tag desconhecida",newTag:"Nova tag detectada",onScale:"na balança",linkSpool:"Vincular ao carretel",linkTagTitle:"Vincular tag ao carretel",linkTag:"Vincular tag",selectSpool:"Selecione um carretel para vincular a esta tag:",noUntagged:"Nenhum carretel sem tag encontrado",tagDetected:"Tag detectada",noTag:"Sem tag",tagId:"Tag",grossWeight:"Peso bruto",spoolSize:"Tamanho do carretel",close:"Fechar",currentSpool:"Carretel Atual"},modal:{spoolDetected:"Carretel Detectado",assignToAms:"Atribuir ao AMS",syncWeight:"Sincronizar Peso",weightSynced:"Sincronizado!",syncing:"Sincronizando...",newTagDetected:"Nova Tag Detectada",addToInventory:"Adicionar ao Inventário",assignToAmsTitle:"Atribuir ao AMS",selectSlot:"Selecionar um slot",assign:"Atribuir",assigning:"Atribuindo...",assignSuccess:"Atribuído!",assignError:"Falha ao atribuir carretel. Tente novamente.",noPrinterSelected:"Selecionar uma impressora...",noAmsDetected:"Nenhum AMS detectado nesta impressora",slot:"Slot"},weight:{noReading:"Sem leitura",stable:"Estável",measuring:"Medindo...",tare:"Tarar",calibrate:"Calibrar"},spool:{remaining:"Restante",material:"Material",brand:"Marca",color:"Cor",coreWeight:"Núcleo",labelWeight:"Rótulo",scaleWeight:"Balança",netWeight:"Líquido",lastUsed:"Último uso"},ams:{noData:"Nenhum AMS detectado",connectAms:"Conecte um AMS para ver os slots",noPrinter:"Nenhuma impressora selecionada",selectPrinter:"Selecione uma impressora na barra superior",printerDisconnected:"Impressora desconectada",humidity:"Umidade",level:"Nível",active:"Ativo",slot:"Slot",empty:"Vazio"},inventory:{search:"Buscar carretéis...",empty:"Nenhum carretel no inventário",noResults:"Nenhum carretel correspondente",spools:"carretéis",addSpool:"Adicionar carretel"},settings:{tabDevice:"Dispositivo",tabDisplay:"Tela",tabScale:"Balança",tabUpdates:"Atualizações",nfcReader:"Leitor NFC",type:"Tipo",connection:"Conexão",notConnected:"N/A",deviceInfo:"Info do dispositivo",hostname:"Host",uptime:"Tempo de atividade",brightness:"Brilho",saved:"Salvo",noBacklight:"Nenhuma retroiluminação DSI detectada. O controle de brilho requer uma tela DSI.",screenBlank:"Tempo para desligar tela",screenBlankDesc:"A tela desliga após inatividade. Toque para despertar.",displayNote:"O brilho é aplicado como filtro de software.",scaleCalibration:"Calibração da balança",currentWeight:"Peso atual",tareOffset:"Tara",calFactor:"Fator",knownWeight:"Peso conhecido",calStep1:"Remova todos os itens da balança e pressione Definir zero.",calStep2:"Coloque o peso conhecido na balança.",setZero:"Definir zero",calibrateNow:"Calibrar",calibrated:"Calibrado",tareSet:"Comando de tara enviado. Aguardando dispositivo...",tareFailed:"Falha ao enviar comando de tara",zeroSet:"Ponto zero definido. Coloque o peso conhecido na balança.",calibrationDone:"Calibração concluída!",calibrationFailed:"Falha na calibração",lastCalibrated:"Última calibração",stable:"Estável",settling:"Estabilizando...",firmware:"Firmware",scale:"Balança",noDevice:"Nenhum dispositivo SpoolBuddy encontrado",daemonVersion:"Versão do daemon",currentVersion:"Atual",versionPending:"Aguardando daemon...",checking:"Verificando...",checkUpdates:"Verificar atualizações",updateAvailable:"Atualização disponível",updateInstructions:"Atualize via SSH: execute o script de instalação do SpoolBuddy.",upToDate:"Atualizado",includeBeta:"Incluir versões beta"},writeTag:{tabExisting:"Bobina existente",tabNew:"Nova bobina",tabReplace:"Substituir tag",searchPlaceholder:"Buscar por material, cor, marca...",noUntaggedSpools:"Nenhuma bobina sem tag",noTaggedSpools:"Nenhuma bobina com tag",selectSpool:"Selecione uma bobina e coloque um NTAG no leitor",placeTag:"Coloque um NTAG no leitor",tagReady:"Tag detectado — pronto para gravar",writeTag:"Gravar Tag",replaceTag:"Substituir Tag",writing:"Gravando tag...",waiting:"Aguardando SpoolBuddy...",writeSuccess:"Tag gravado com sucesso!",writeFailed:"Falha na gravação",queueFailed:"Falha ao enfileirar comando de gravação",tryAgain:"Tentar novamente",cancel:"Cancelar",replaceWarning:"O tag antigo será desvinculado. O novo tag o substituirá.",deviceOffline:"SpoolBuddy está offline",material:"Material",colorName:"Nome da cor",color:"Cor",brand:"Marca",weight:"Peso (g)",createSpool:"Criar bobina",creating:"Criando...",spoolCreated:"Bobina criada! Pronto para gravar.",createFailed:"Falha ao criar bobina"},quickMenu:{printerPower:"Energia da impressora",systemControls:"Sistema",restartDaemon:"Reiniciar daemon",restartBrowser:"Reiniciar navegador",reboot:"Reiniciar",shutdown:"Desligar",swipeToClose:"Deslize para baixo para fechar",confirmTitle:"Confirmar",confirmShutdown:"Tem certeza de que deseja desligar o SpoolBuddy? Você precisará de acesso físico para ligá-lo novamente.",confirmReboot:"Tem certeza de que deseja reiniciar o SpoolBuddy?",confirmRestartDaemon:"Reiniciar o daemon do SpoolBuddy? NFC e balança ficarão temporariamente indisponíveis.",confirmRestartBrowser:"Reiniciar o navegador kiosk? A tela ficará brevemente preta.",confirm:"Confirmar",confirmPlugOn:"Ligar {{name}}?",confirmPlugOff:"Desligar {{name}}?",turnOn:"Ligar",turnOff:"Desligar"}},bugReport:{title:"Reportar um bug",description:"Descrição",descriptionPlaceholder:"O que deu errado? Por favor, descreva o problema...",email:"Email (opcional)",emailPlaceholder:"seu@email.com.br",emailPrivacy:"Se fornecido, seu email será incluído em uma seção recolhida da issue no GitHub para que o mantenedor possa entrar em contato.",screenshot:"Captura de tela",uploadOrPaste:"Enviar, colar ou arrastar uma imagem",dataCollectedSummary:"Quais dados são incluídos no relatório?",dataIncluded:"Incluídos:",dataIncludedList:"Versão do app, SO, arquitetura, versão Python, estatísticas do banco de dados (apenas contagens), modelos de impressora, quantidade de bicos, versões de firmware, status de conexão, status de integrações (Spoolman, MQTT, HA), configurações não sensíveis, contagem de interfaces de rede, detalhes Docker, versões de dependências.",dataNeverIncluded:"Nunca incluídos:",dataNeverIncludedList:"Nomes de impressoras, números de série, códigos de acesso, senhas, endereços IP, endereços de email, chaves de API, tokens, URLs de webhook, nomes de host ou nomes de usuário.",submit:"Enviar",startLogging:"Iniciar log de depuração",stepEnableLogging:"Log de depuração ativado",stepReproduce:"Reproduza o problema agora",stepStopLogging:"Parar & enviar relatório",stopAndSubmit:"Parar & Enviar",maxDuration:"Para automaticamente após {{minutes}} min",stoppingLogs:"Coletando logs & enviando...",submitting:"Enviando relatório de bug...",submitSuccess:"Relatório de bug enviado com sucesso!",submitFailed:"Falha ao enviar relatório de bug",thankYou:"Obrigado!",submitted:"Seu relatório de bug foi enviado.",viewIssue:"Ver issue",unexpectedError:"Ocorreu um erro inesperado"},failureDetection:{title:"Detecção de Falhas por IA",description:"Monitora impressões via API ML do Obico auto-hospedada e age automaticamente em falhas detectadas.",mlUrl:"URL da API ML do Obico",mlUrlHint:"URL base do seu contêiner Obico ml_api auto-hospedado (ex.: http://192.168.1.10:3333).",test:"Testar",testSuccess:"API ML acessível e operacional.",testFailed:"Não foi possível acessar a API ML.",sensitivity:"Sensibilidade",sensitivityLow:"Baixa (menos falsos positivos)",sensitivityMedium:"Média (equilibrada)",sensitivityHigh:"Alta (detecção precoce, mais falsos positivos)",sensitivityHint:"Ajusta os limiares de confiança que disparam avisos e falhas.",action:"Ação em falha detectada",actionNotify:"Apenas notificar",actionPause:"Pausar impressão",actionPauseOff:"Pausar e cortar energia",pollInterval:"Intervalo de verificação (segundos)",pollIntervalHint:"Frequência de verificação de cada impressora durante a impressão. Mínimo 5s, máximo 120s.",externalUrlMissing:"External URL is not set.",externalUrlHint:"The ML API fetches the camera snapshot by URL. Set the External URL in General settings so the ML API container can reach Bambuddy.",perPrinterTitle:"Impressoras monitoradas",perPrinterHint:"Escolha quais impressoras o serviço de detecção monitora.",monitorAll:"Monitorar todas as impressoras conectadas",statusTitle:"Status",serviceRunning:"Serviço em execução",thresholds:"Limiares baixo / alto",activePrinters:"Impressões ativas",noActivePrints:"Nenhuma impressão em andamento.",historyTitle:"Detecções recentes",noHistory:"Nenhuma detecção ainda."}},Xue={nav:{printers:"打印机",archives:"归档",queue:"队列",stats:"统计",profiles:"配置文件",maintenance:"维护",projects:"项目",inventory:"耗材",files:"文件管理器",notifications:"通知",settings:"设置",system:"系统",collapseSidebar:"收起侧边栏",expandSidebar:"展开侧边栏",update:"更新",updateAvailable:"有可用更新:v{{version}}",updateAvailableBanner:"版本 {{version}} 已发布!",viewUpdate:"查看更新",viewOnGithub:"在 GitHub 上查看",keyboardShortcuts:"键盘快捷键 (?)",switchToLight:"切换到浅色模式",switchToDark:"切换到深色模式",smartSwitches:"智能开关",logout:"退出登录"},common:{save:"保存",saving:"保存中...",cancel:"取消",delete:"删除",edit:"编辑",add:"添加",close:"关闭",confirm:"确认",loading:"加载中...",error:"错误",success:"成功",warning:"警告",enabled:"已启用",disabled:"已禁用",yes:"是",no:"否",on:"开",off:"关",all:"全部",none:"无",search:"搜索",filter:"筛选",sort:"排序",refresh:"刷新",download:"下载",upload:"上传",uploading:"上传中...",uploadFailed:"上传失败",actions:"操作",status:"状态",name:"名称",description:"描述",date:"日期",time:"时间",hours:"小时",minutes:"分钟",seconds:"秒",days:"天",enable:"启用",disable:"禁用",permissions:"权限",noPrinters:"未配置打印机",noData:"暂无数据",linkNotFound:"未找到链接",required:"必填",optional:"可选",dismiss:"关闭",apply:"应用",reset:"重置",export:"导出",import:"导入",clear:"清除",selectAll:"全选",deselectAll:"取消全选",noChange:"— 不更改 —",unchanged:"未更改",unassigned:"未分配",unknown:"未知",unknownError:"未知错误",today:"今天",tomorrow:"明天",asap:"尽快",overdue:"已逾期",now:"现在",collapse:"收起",expand:"展开",viewArchive:"查看归档",viewInFileManager:"在文件管理器中查看",addedBy:"由 {{username}} 添加",prints:"次打印",more:"还有 {{count}} 个",ascending:"升序",descending:"降序",back:"返回",copy:"复制",copied:"已复制!",printer:"打印机",remove:"移除",type:"类型",print:"打印",rename:"重命名",move:"移动",create:"创建",duplicate:"复制",left:"左",right:"右"},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:{name:"名称",status:"状态",model:"型号",location:"位置",ascending:"升序排列",descending:"降序排列"},cardSize:{small:"小卡片",medium:"中卡片",large:"大卡片",extraLarge:"超大卡片"},hideOffline:"隐藏离线",nextAvailable:"下一个可用",powerOn:"开机",offlinePrintersWithPlugs:"带智能插座的离线打印机",noPrintersConfigured:"尚未配置打印机",search:"搜索打印机...",noSearchResults:"没有打印机符合您的搜索或筛选条件",filter:{allStatuses:"所有状态",allLocations:"所有位置"},readyToPrint:"准备打印",external:"外部",extL:"外置左",extR:"外置右",deleteArchives:"删除打印归档",noLabel:"无标签",printPreview:"打印预览",width:"宽度",height:"高度",noObjectsFound:"未找到对象",objectsLoadedOnPrintStart:"对象在打印开始时加载",willBeSkipped:"将被跳过",name:"名称",serialCannotBeChanged:"序列号无法更改",locationHelp:"用于分组打印机和筛选队列任务",wifiSignal:{veryWeak:"非常弱",weak:"弱",fair:"一般",good:"良好",excellent:"优秀"},maintenanceUpToDate:"所有维护均已完成 - 点击查看",chamberLightOn:"打开腔室灯",chamberLightOff:"关闭腔室灯",files:"文件",browseFiles:"浏览打印机文件",autoOffAfterPrint:"打印后自动关机",autoOffExecuted:"已执行自动关机 - 开启打印机以重置",hmsErrors:"HMS 错误",viewHmsErrors:"查看 {{count}} 个 HMS 错误",resume:"继续",pause:"暂停",stop:"停止",camera:"摄像头",skipObject:"跳过对象",reconnect:"重新连接",forceRefresh:"强制刷新",forceRefreshSuccess:"已请求刷新",mqttDebug:"MQTT 调试",printerInformation:"打印机信息",copyToClipboard:"复制",copied:"已复制!",state:"状态",wifiSignalLabel:"WiFi 信号",developerMode:"开发者模式",enabled:"已启用",disabled:"已禁用",addedOn:"添加日期",sdCard:"SD 卡",inserted:"已插入",notInserted:"未插入",totalPrintHours:"打印时长",activeNozzle:"当前:{{nozzle}} 喷嘴",nozzleRack:"喷嘴架",nozzleDocked:"已停靠",nozzleMounted:"已安装",nozzleActive:"使用中",nozzleIdle:"空闲",nozzleDiameter:"直径",nozzleType:"类型",nozzleStatus:"状态",nozzleFilament:"耗材",nozzleWear:"磨损",nozzleMaxTemp:"最高温度",nozzleSerial:"序列号",nozzleHardenedSteel:"硬化钢",nozzleStainlessSteel:"不锈钢",nozzleTungstenCarbide:"碳化钨",nozzleFlow:"流量",nozzleHighFlow:"高流量",nozzleStandardFlow:"标准",firmwareUpdate:"固件更新",firmwareInstructions:"在打印机触摸屏上,前往",firmwareNav:"导航到",settings:"设置",firmware:"固件",discoverPrinters:"发现打印机",searching:"搜索中...",manualEntry:"手动输入",addFromCloud:"从云端添加",toast:{printerDeleted:"打印机已删除",missingSpoolAssignment:"已在{{printer}}上开始打印。以下料槽未分配耗材: {{slots}}",printerAdded:"打印机已添加",printerUpdated:"打印机已更新",failedToDelete:"删除打印机失败",failedToAdd:"添加打印机失败",failedToUpdate:"更新打印机失败",commandSent:"命令已发送",failedToSendCommand:"发送命令失败",turnedOn:"{{name}} 已开启",failedToPowerOn:"开启 {{name}} 失败",scriptTriggered:"脚本已触发",printStopped:"打印已停止",printPaused:"打印已暂停",printResumed:"打印已继续",referenceDeleted:"参考已删除",detectionAreaSaved:"检测区域已保存",failedToRunScript:"运行脚本失败",failedToStopPrint:"停止打印失败",failedToPausePrint:"暂停打印失败",failedToResumePrint:"继续打印失败",failedToControlChamberLight:"控制腔室灯失败",failedToSetSpeed:"设置打印速度失败",failedToUpdateSetting:"更新设置失败",failedToSkipObjects:"跳过对象失败",failedToRereadRfid:"重新读取 RFID 失败",failedToCheckPlate:"检查打印板失败",failedToUpdateLabel:"更新标签失败",failedToDeleteReference:"删除参考失败",failedToSaveDetectionArea:"保存检测区域失败",plateCheckEnabled:"打印板检查已启用",plateCheckDisabled:"打印板检查已禁用",calibrationSaved:"校准已保存!",calibrationFailed:"校准失败",rfidRereadInitiated:"已发起 RFID 重新读取"},connection:{connected:"已连接",offline:"离线"},queue:{inQueue:"队列中有 {{count}} 个打印任务",inQueue_plural:"队列中有 {{count}} 个打印任务"},controls:"控制",rfid:{reread:"重新读取 RFID"},bedJog:{title:"移动热床",bed:"热床",step:"步长 (mm)",up:"热床上移",down:"热床下移",disabledWhilePrinting:"打印中已禁用",notHomedTitle:"打印机未归零",notHomedMessage:"自上次打印以来 Z 轴尚未归零。请先归零 Z 以确保安全定位,或者直接移动 — 软限位将被绕过。",homeZ:"归零 Z",moveAnyway:"强制移动",homingStarted:"Z 轴归零中…"},permission:{noAdd:"您没有添加打印机的权限",noEdit:"您没有编辑打印机的权限",noDelete:"您没有删除打印机的权限",noControl:"您没有控制打印机的权限",noFiles:"您没有访问打印机文件的权限",noAmsRfid:"您没有重新读取 AMS RFID 的权限",noSmartPlugControl:"您没有控制智能插座的权限",noCamera:"您没有查看摄像头的权限"},modal:{addTitle:"添加打印机",editTitle:"编辑打印机",myPrinter:"我的打印机",selectModel:"选择型号...",locationGroup:"位置 / 分组(可选)",locationPlaceholder:"例如:工作室、办公室、地下室",autoArchiveLabel:"自动归档已完成的打印",fromPrinterSettings:"来自打印机设置",modelOptional:"型号(可选)",saveChanges:"保存更改"},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:{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:"关机"},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:{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:"启动发现失败"},drying:{start:"开始干燥",stop:"停止干燥",temperature:"温度",duration:"时长",hours:"小时",timeRemaining:"剩余 {{time}}",active:"干燥中",notSupported:"不支持干燥",powerRequired:"连接AMS电源适配器以启用干燥",startingDrying:"正在启动干燥...",stoppingDrying:"正在停止干燥...",rotateTray:"干燥时旋转料盘"},filaments:"耗材",openCameraOverlay:"打开摄像头叠加层",openCameraWindow:"在新窗口中打开摄像头",firmwareUpdateAvailable:"固件更新可用:{{current}} → {{latest}}",firmwareUpToDate:"固件 {{version}} — 已是最新",firmwareUpdateButton:"更新",plateDetection:{noPermission:"您没有更新打印机的权限",enabledClick:"打印板检查已启用 - 点击禁用",disabledClick:"打印板检查已禁用 - 点击启用",manageCalibration:"管理打印板检测校准",calibrationRequired:"需要校准",calibrationInstructions:"请确保构建板完全空置,然后点击校准。",calibrationDescription:"校准会拍摄空置打印板的参考图像。后续检查将与此参考进行比较以检测物体。",calibrationTip:"提示:您最多可以为不同的打印板存储5个校准。系统会在检查时自动使用最佳匹配。",plateEmpty:"打印板似乎是空的",objectsDetected:"在打印板上检测到物体",confidence:"置信度",difference:"差异",analysisPreview:"分析预览:",analysisLegend:"绿色框 = 检测区域,红色覆盖 = 与校准的差异",savedReferences:"已保存的参考 ({{count}}/{{max}})",deleteReference:"删除参考",labelPlaceholder:"标签...",clickToEdit:"{{label}} - 点击编辑",clickToAddLabel:"点击添加标签"},speed:{title:"打印速度",silent:"静音 (50%)",standard:"标准 (100%)",sport:"运动 (124%)",ludicrous:"疯狂 (166%)"},airduct:{title:"风道模式",cooling:"制冷",heating:"加热"},noSdCard:"无SD",door:{open:"开",closed:"关"},fans:{partCooling:"零件冷却风扇",auxiliary:"辅助风扇",chamber:"腔室风扇"},clickToViewHmsErrors:"点击查看 HMS 错误",estimatedCompletion:"预计完成时间",plateNumber:"板 {{number}}",slotOptions:"槽位选项",amsPopup:{friendlyName:"AMS 名称",friendlyNamePlaceholder:"例如 AMS 友好名称",serialNumber:"序列号",firmwareVersion:"固件",save:"保存",clear:"清除",noEditPermission:"您没有重命名 AMS 单元的权限"},firmwareModal:{title:"固件更新",titleUpToDate:"固件信息",currentVersion:"当前版本:",latestVersion:"最新版本:",releaseNotes:"发布说明",checkingPrereqs:"正在检查前提条件...",sdCardReady:"SD 卡已就绪。点击下方上传固件。",uploadedSuccess:"固件已上传到 SD 卡!",applyInstructions:"在打印机上应用更新:",step1:"在打印机触摸屏上,前往设置",step2:"导航到固件",step3:"选择从 SD 卡更新",step4:"更新将需要 10-20 分钟",done:"完成",starting:"启动中...",uploadFirmware:"上传固件",uploadFailed:"上传启动失败:{{error}}",uploadedToast:"固件已上传!请在打印机屏幕上触发更新。",availableVersions:"可用版本",usable:"可用",unavailable:"不可用",installed:"已安装",newerBadge:"较新",olderBadge:"较旧",currentBadge:"当前"},accessCodePlaceholder:"留空以保持当前值",roi:{title:"检测区域 (ROI)",xStart:"X 起点",yStart:"Y 起点",width:"宽度",height:"高度",instruction:"调整检测区域以聚焦到构建板。预览中的绿色框显示当前区域。"},developerModeWarning:"以下打印机未启用开发者局域网模式:{{names}}。某些功能可能无法使用。",howToEnable:"如何启用",incompatibleFile:"此文件是为 {{slicedFor}} 切片的,但该打印机是 {{printerModel}}",dropNotPrintable:"只能打印 .gcode 和 .gcode.3mf 文件",dropToPrint:"拖放以打印",cannotPrint:"打印机忙碌"},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:"二维码",viewPhotos:"查看照片",viewPhotosCount:"查看照片 ({{count}})",projectPage:"项目页面",addToFavorites:"添加到收藏",removeFromFavorites:"从收藏中移除",edit:"编辑",goToProject:"前往项目:{{name}}",addToProject:"添加到项目",removeFromProject:"从项目中移除",loading:"加载中...",noProjectsAvailable:"无可用项目",select:"选择",deselect:"取消选择",delete:"删除"},permission:{noReprint:"您没有重新打印此归档的权限",noAddToQueue:"您没有添加到队列的权限",noUpdateArchives:"您没有更新归档的权限",noUploadFiles:"您没有上传文件的权限",noDownload:"您没有下载归档的权限",noCopyLink:"您没有复制下载链接的权限",noDelete:"您没有删除此归档的权限",noCreate:"您没有创建归档的权限"},card:{previousPlate:"上一个板",nextPlate:"下一个板",plateNumber:"板 {{index}}",moreOptions:"右键查看更多选项",addToFavorites:"添加到收藏",removeFromFavorites:"从收藏中移除",cancelled:"已取消",failed:"失败",duplicate:"重复",duplicateTitle:"此模型之前已打印过",openSource3mf:"在 Bambu Studio 中打开源 3MF(右键查看更多选项)",downloadF3d:"下载 Fusion 360 设计文件",viewTimelapse:"查看延时摄影",viewPhoto:"查看 1 张照片",viewPhotos:"查看 {{count}} 张照片",openFolder:"打开文件夹:{{name}}",slicedFile:"已切片文件 - 可以打印",sourceFile:"仅源文件 - 无 AMS 映射可用",gcode:"GCODE",source:"源文件",project:"项目:{{name}}",estimated:"预计:{{time}}",actual:"实际:{{time}}",accuracy:"准确度:{{percent}}%",filament:"{{weight}}g",layer:"{{count}} 层",layers:"{{count}} 层",object:"{{count}} 个对象",objects:"{{count}} 个对象",slicedFor:"为 {{model}} 切片",uploadedBy:"上传者",noPermissionReprint:"您没有重新打印的权限",noFileForReprint:"无可用的 3MF 文件 — 打印记录时无法从打印机下载该文件",noPermissionEdit:"您没有编辑归档的权限",noPermissionDelete:"您没有删除归档的权限",reprint:"重新打印",schedulePrint:"排程打印",schedule:"排程",openInBambuStudio:"在切片软件中打开",openInBambuStudioToSlice:"在切片软件中打开进行切片",slice:"切片",externalLink:"外部链接",makerWorld:"MakerWorld:{{designer}}",viewProject:"查看项目",noExternalLink:"无外部链接",preview3d:"3D 预览",download:"下载",edit:"编辑",delete:"删除"},modal:{deleteArchive:"删除归档",deleteConfirm:'确定要删除"{{name}}"吗?此操作无法撤销。',deleteButton:"删除",removeSource3mf:"移除源 3MF",removeSource3mfConfirm:'确定要从"{{name}}"中移除源 3MF 文件吗?这将删除原始切片项目文件。',removeButton:"移除",removeF3d:"移除 F3D",removeF3dConfirm:'确定要从"{{name}}"中移除 Fusion 360 设计文件吗?',removeTimelapse:"移除延时摄影",removeTimelapseConfirm:'确定要从"{{name}}"中移除延时摄影视频吗?',timelapse:"{{name}} - 延时摄影",selectTimelapse:"选择延时摄影",selectTimelapseDesc:"未找到自动匹配。请选择此打印的延时摄影:",deleteArchives:"删除归档",deleteArchivesConfirm:"确定要删除 {{count}} 个归档吗?此操作无法撤销。",deleteCount:"删除 {{count}} 个"},page:{title:"归档",printsCount:"{{filtered}} / {{total}} 次打印",dropFilesHere:"将 .3mf 文件拖放到此处",releaseToUpload:"释放以上传",only3mfSupported:"仅支持 .3mf 文件",close:"关闭",selected:"已选择 {{count}} 个",selectAll:"全选",tags:"标签",project:"项目",favorite:"收藏",delete:"删除",toggledFavorites:"已切换 {{count}} 个归档的收藏状态",failedUpdateFavorites:"更新收藏失败",archivesDeleted:"已删除 {{count}} 个归档",failedDeleteArchives:"删除归档失败",photoDeleted:"照片已删除",failedDeletePhoto:"删除照片失败"},list:{name:"名称",printer:"打印机",date:"日期",size:"大小",actions:"操作",hasTimelapse:"有延时摄影"},log:{date:"日期",printName:"打印名称",printer:"打印机",user:"用户",status:"状态",duration:"时长",filament:"耗材",allPrinters:"所有打印机",allUsers:"所有用户",allStatuses:"所有状态",cancelled:"已取消",skipped:"已跳过",dateFrom:"从",dateTo:"到",noEntries:"未找到打印日志条目",showing:"显示 {{count}} / {{total}} 条",rowsPerPage:"行数",page:"页",prev:"上一页",next:"下一页",clearLog:"清除日志",clearLogTitle:"清除打印日志",clearLogConfirm:"所有打印日志条目将被永久删除。归档和队列项目不受影响。此操作无法撤销。确定要继续吗?",clearLogButton:"全部清除",cleared:"已清除 {{count}} 条日志",clearFailed:"清除打印日志失败"}},queue:{title:"打印队列",subtitle:"排程和管理您的打印任务",addToQueue:"添加到队列",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:"队列中的下一个",clearPlate:"清理打印板并开始下一个",clearPlateSuccess:"打印板已清理 — 准备进行下一个打印",plateReady:"打印板已清理 — 准备进行下一个打印",plateNumber:"板 {{index}}",quantity:"数量",quantityHint:"创建 {{count}} 个队列项目",activeBatches:"活跃批次",batchProgress:"已完成 {{completed}}/{{total}}",cancelBatch:"取消剩余",batchCancelled:"已取消剩余批次项目",cancelBatchConfirmTitle:"取消批次",cancelBatchConfirmMessage:"取消此批次中所有剩余的待处理项目?",batch:"批次",sections:{currentlyPrinting:"正在打印",queued:"排队中",history:"历史"},status:{pending:"等待中",waiting:"等待中",printing:"打印中",paused:"已暂停",completed:"已完成",failed:"失败",skipped:"已跳过",cancelled:"已取消"},summary:{printing:"打印中",queued:"排队中",totalTime:"总队列时间",totalWeight:"总队列重量",history:"历史"},filter:{allPrinters:"所有打印机",unassigned:"未分配",allStatus:"所有状态",allLocations:"所有位置",any:"任意"},sort:{byPosition:"按位置排序",byName:"按名称排序",byPrinter:"按打印机排序",bySchedule:"按排程排序",byDate:"按日期排序",ascendingOldest:"升序(最旧优先)",descendingNewest:"降序(最新优先)"},badges:{staged:"已暂存",requiresPrevious:"需要前一个成功",autoPowerOff:"自动关机",gcodeInjection:"G-code"},empty:{title:"没有排程的打印",description:'从归档页面使用右键菜单中的"排程"选项来排程打印,或拖放文件开始。'},time:{asap:"尽快",overdue:"已逾期",now:"现在",lessThanMinute:"不到一分钟",inMinutes:"{{count}} 分钟后",inHours:"{{count}} 小时后"},actions:{stopPrint:"停止打印",startPrint:"开始打印",requeue:"重新排队"},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:"取消所选"},confirm:{cancelTitle:"取消排程打印",cancelMessage:'确定要取消"{{name}}"吗?',stopTitle:"停止打印",stopMessage:'确定要停止当前打印"{{name}}"吗?这将取消打印机上的打印任务。',removeTitle:"从历史中移除",removeMessage:'确定要从队列历史中移除"{{name}}"吗?',clearHistoryTitle:"清除历史",clearHistoryMessage:"确定要从历史中移除所有 {{count}} 个项目吗?",cancelButton:"取消打印",stopButton:"停止打印",thisPrint:"此打印",thisItem:"此项目"},toast:{cancelled:"队列项目已取消",cancelFailed:"取消项目失败",removed:"队列项目已移除",removeFailed:"移除项目失败",stopped:"打印已停止",stopFailed:"停止打印失败",released:"打印已释放到队列",startFailed:"开始打印失败",reorderFailed:"重新排序队列失败",historyCleared:"已清除 {{count}} 条历史记录",clearHistoryFailed:"清除历史失败",updateFailed:"更新项目失败",bulkCancelled:"已取消 {{count}} 个项目",bulkCancelFailed:"批量取消项目失败"},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:{noStopPrint:"您没有停止打印的权限",noStartPrint:"您没有开始打印的权限",noEdit:"您没有编辑此队列项目的权限",noCancel:"您没有取消此队列项目的权限",noRequeue:"您没有重新排队的权限",noRemove:"您没有移除此队列项目的权限",noClearHistory:"您没有清除所有历史的权限",noEditItems:"您没有编辑队列项目的权限",noCancelItems:"您没有取消队列项目的权限"}},backgroundDispatch:{unknownFile:"未知文件",unknownPrinter:"未知打印机",startingPrints:"正在开始打印",progressSummary:"{{complete}}/{{total}} 完成 • 已分发:{{dispatched}} • 处理中:{{processing}}",expandDetails:"展开分发详情",collapseDetails:"收起分发详情",dismissToast:"关闭分发通知",cancelDispatchJob:"取消分发任务",cancel:"取消",cancelling:"取消中…",status:{dispatched:"已分发",processing:"处理中",completed:"已完成",failed:"失败",cancelled:"已取消"},toast:{cancellingUpload:"取消上传中...",cancelled:"分发已取消",cancelFailed:"取消分发失败",completeWithFailures:"后台分发完成:{{completed}} 成功,{{failed}} 失败",completeSuccess:"后台分发完成:{{completed}} 成功",printStartedRemaining:"{{completed}} 个打印已开始,{{remaining}} 个正在发送..."}},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:"全部时间",quickStats:"快速统计",printActivity:"打印活动",filamentTypes:"耗材类型",filamentTrends:"耗材趋势",failureAnalysis:"失败分析",timeAccuracy:"时间准确度",successful:"成功:",failed:"失败:",perfectEstimate:"100% = 完美估计",noTimeAccuracyData:"暂无时间准确度数据",noFilamentData:"暂无耗材数据",noPrinterData:"暂无打印机数据",noPrintData:"暂无打印数据",noPrintDataLast30Days:"最近 30 天无打印数据",failureReasons:"失败原因",topFailureReasons:"主要失败原因",failedPrintsCount:"{{failed}} / {{total}} 次打印失败",lastWeekRate:"上周:{{rate}}%",resetLayout:"重置布局",recalculateCosts:"重新计算成本",recalculateCostsHint:"使用当前耗材价格重新计算所有归档成本",exportStats:"导出统计",exportAsCsv:"导出为 CSV",exportAsExcel:"导出为 Excel",hiddenCount:"{{count}} 个已隐藏",exportDownloaded:"导出已下载",exportFailed:"导出失败",layoutReset:"布局已重置",recalculatedCosts:"已为 {{count}} 个归档重新计算成本",recalculateFailed:"重新计算成本失败",loadingStats:"加载统计数据中...",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:{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:"当前小时数",statusTab:"状态",settingsTab:"设置",overdueCount:"{{count}} 个逾期",dueSoonCount:"{{count}} 个即将到期",dueSoon:"即将到期",allGood:"一切正常",overdueBy:"逾期 {{duration}}",dueIn:"{{duration}} 后到期",timeLeft:"剩余 {{duration}}",day:"1 天",days:"{{count}} 天",week:"1 周",weeks:"{{count}} 周",month:"1 个月",months:"{{count}} 个月",year:"1 年",maintenanceTypes:"维护类型",maintenanceTypesDescription:"系统类型和您的自定义维护任务",addCustomType:"添加自定义类型",restoreDefaults:"恢复默认任务",intervalType:"间隔类型",intervalValue:"间隔 ({{type}})",icon:"图标",documentationLink:"文档链接(可选)",assignToPrinters:"分配给打印机",selectAtLeastOnePrinter:"至少选择一台打印机",addType:"添加类型",custom:"自定义",printHours:"打印小时数",calendarDays:"日历天数",exampleName:"例如:更换 HEPA 过滤器",viewDocumentation:"查看文档",timeBasedInterval:"基于时间的间隔",intervalOverrides:"间隔覆盖",intervalOverridesDescription:"为特定打印机自定义间隔",assignedToPrinters:"已分配给打印机:",noPrintersAssigned:"未分配打印机",addPrinterShort:"添加:",printersAssignedClick:"已分配 {{count}} 台打印机 - 点击管理",removeFromPrinter:"从此打印机移除",types:{lubricateCarbonRods:"润滑碳纤维杆",lubricateRails:"润滑线性导轨",cleanNozzle:"清洁喷嘴/热端",checkBelts:"检查皮带张力",cleanBuildPlate:"清洁构建板",checkExtruder:"检查挤出机齿轮",checkCooling:"检查冷却风扇",generalInspection:"综合检查",cleanCarbonRods:"清洁碳纤维杆",lubricateSteelRods:"润滑钢杆",cleanSteelRods:"清洁钢杆",cleanLinearRails:"清洁线性导轨",checkPtfeTube:"检查 PTFE 管",replaceHepaFilter:"更换 HEPA 过滤器",replaceCarbonFilter:"更换活性炭过滤器",lubricateLeftNozzleRail:"润滑左喷嘴导轨"},maintenanceComplete:"维护已标记为完成",typeUpdated:"维护类型已更新",typeDeleted:"维护类型已删除",defaultsRestored:"已恢复 {{count}} 个默认任务",printHoursUpdated:"打印小时数已更新",printerAssigned:"打印机已分配",printerRemoved:"打印机已移除",deleteTypeConfirm:'删除"{{name}}"?',deleteSystemTypeTitle:"删除默认维护任务?",deleteSystemTypeMessage:'确定要删除默认维护任务"{{name}}"吗?',noPermissionUpdate:"您没有更新维护项目的权限",noPermissionPerform:"您没有执行维护的权限",noPermissionEditTypes:"您没有编辑维护类型的权限",noPermissionDeleteTypes:"您没有删除维护类型的权限",noPermissionEditHours:"您没有编辑打印时间的权限",noPermissionRemovePrinter:"您没有移除打印机分配的权限",noPermissionAssignPrinter:"您没有分配打印机的权限",noPermissionEditIntervals:"您没有编辑间隔的权限",configureSettings:"配置维护类型和间隔"},settings:{title:"设置",general:"通用",tabs:{general:"通用",smartPlugs:"智能插座",notifications:"通知",queue:"工作流",filament:"耗材",network:"网络",apiKeys:"API 密钥",virtualPrinter:"虚拟打印机",spoolbuddy:"SpoolBuddy",failureDetection:"故障检测",users:"身份验证",backup:"备份",emailAuth:"邮箱认证",ldap:"LDAP",twoFa:"双因素认证",oidc:"SSO / OIDC"},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:"磁盘",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})。",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:{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:"管理员可以通过邮件重置用户密码",errors:{requiredFields:"请填写所有必填字段",usernameRequired:"启用认证时需要用户名",enterTestEmail:"请输入测试邮箱地址",smtpServerAndEmail:"测试前请填写 SMTP 服务器和发件邮箱",usernamePasswordRequired:"启用认证时需要用户名和密码",configureSmtpFirst:"请先配置并测试 SMTP 设置",enableAuthFirst:"请先启用身份验证才能使用基于电子邮件的功能。"},success:{settingsSaved:"SMTP 设置保存成功"},securityOptions:{starttls:"STARTTLS(端口 587)",ssl:"SSL/TLS(端口 465)",none:"无(端口 25)"},authOptions:{enabled:"已启用",disabled:"已禁用"}},appearance:"外观",notifications:"通知",smartPlugs:"智能插座",spoolman:"Spoolman",updates:"更新",language:"语言",languageDescription:"选择您的首选语言",theme:"主题",themeLight:"浅色",themeDark:"深色",themeSystem:"跟随系统",defaultView:"默认视图",defaultViewDescription:"打开应用时显示的页面",checkForUpdates:"检查更新",autoUpdate:"自动更新",currentVersion:"当前版本",latestVersion:"最新版本",upToDate:"已是最新版本",updateAvailable:"有可用更新",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:"需要维护时通知"},smartPlug:{title:"智能插座",add:"添加智能插座",edit:"编辑智能插座",name:"名称",ipAddress:"IP 地址",linkedPrinter:"关联打印机",autoOn:"自动开启",autoOnDescription:"打印开始时开启",autoOff:"自动关闭",autoOffDescription:"打印完成后关闭",offDelay:"关闭延迟",offDelayMinutes:"打印后分钟数",offDelayTemp:"当喷嘴温度低于",currentState:"当前状态",turnOn:"开启",turnOff:"关闭"},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 同步重量失败",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:"所有打印机",noDefaultPrinter:"无默认(每次询问)",sidebarOrder:"侧边栏顺序",saveThumbnails:"保存缩略图",captureFinishPhoto:"拍摄完成照片",noPrintersConfigured:"未配置打印机",archiveMode:{always:"始终创建归档条目",never:"从不创建归档条目",ask:"每次询问"},checkForUpdatesLabel:"检查更新",checkPrinterFirmware:"检查打印机固件",includeBetaUpdates:"包含测试版本",includeBetaUpdatesDesc:"检查更新时通知测试版和预发布版本",enableRetry:"启用重试",homeAssistantDescription:"通过 Home Assistant 控制智能插座",environmentManagedLabel:"(环境变量管理)",autoEnabledViaEnv:"通过环境变量自动启用",urlFromEnvReadOnly:"值由 HA_URL 环境变量设置(只读)",tokenFromEnvReadOnly:"值由 HA_TOKEN 环境变量设置(只读)",mqttConnectedTo:"已连接到",prometheusDescription:"以 Prometheus 格式暴露打印机数据",noSmartPlugsTitle:"未配置智能插座",noSmartPlugsDescription:"添加基于 Tasmota 的智能插座以追踪能耗并自动化电源控制。",noProvidersTitle:"未配置提供商",noProvidersDescription:"添加提供商以接收警报。",noTemplatesAvailable:"无可用模板。重启后端以加载默认模板。",apiPermissionView:"查看打印机状态和队列",apiPermissionEdit:"添加和移除打印队列中的项目",apiKeysEmptyTitle:"无 API 密钥",apiKeysEmptyDescription:"创建 API 密钥以与外部服务集成。",noUsersFound:"未找到用户",noGroupsFound:"未找到组",noGroupsAvailable:"无可用组",passwordsDoNotMatch:"密码不匹配",systemGroupWarning:"系统组名称不可更改",authDisabledTitle:"身份验证已禁用",authDisabledFeature1:"需要登录才能访问系统",authDisabledFeature2:"创建多个用户并基于组的权限管理",authDisabledFeature3:"使用 50+ 个细粒度权限控制访问",userHasCreated:"此用户已创建:",userItemsQuestion:"您想如何处理这些项目?",deleteUserConfirm:"确定要删除此用户吗?",actionCannotBeUndone:"此操作无法撤销。",addFirstSmartPlug:"添加您的第一个智能插座",providers:"提供商",log:"日志",testAll:"全部测试",testResults:"测试结果",testPassedCount:"{{count}} 个通过",testFailedCount:"{{count}} 个失败",messageTemplates:"消息模板",messageTemplatesDescription:"自定义每个事件的通知消息。",apiKeys:"API 密钥",apiKeysDescription:"创建 API 密钥用于外部集成和 Webhook。",createKey:"创建密钥",apiKeyCreated:"API 密钥创建成功",apiKeyCopyWarning:"请立即复制此密钥 - 它不会再次显示!",useInApiBrowser:"在 API 浏览器中使用",createNewApiKey:"创建新 API 密钥",keyName:"密钥名称",keyNamePlaceholder:"例如:Home Assistant、OctoPrint",readStatus:"读取状态",readStatusDescription:"查看打印机状态和队列",manageQueue:"管理队列",manageQueueDescription:"添加和移除打印队列中的项目",controlPrinter:"控制打印机",controlPrinterDescription:"暂停、继续和停止打印",unnamedKey:"未命名密钥",lastUsed:"上次使用",read:"读取",control:"控制",createFirstKey:"创建您的第一个密钥",webhookEndpoints:"Webhook 端点",webhookApiKeyHint:"在 X-API-Key 请求头中使用您的 API 密钥。",webhook:{getAllStatus:"获取所有打印机状态",getSpecificStatus:"获取特定打印机状态",addToQueue:"添加到打印队列",pausePrint:"暂停打印",resumePrint:"继续打印",stopPrint:"停止打印"},apiBrowser:"API 浏览器",apiBrowserDescription:"浏览和测试所有可用的 API 端点。",apiKeyForTesting:"测试用 API 密钥",apiKeyPlaceholder:"在此粘贴您的 API 密钥以测试需要认证的端点...",apiKeyHint:"此密钥将作为 X-API-Key 请求头随请求发送。",deleteApiKeyTitle:"删除 API 密钥",deleteApiKeyMessage:"确定要删除此 API 密钥吗?使用此密钥的所有集成将停止工作。",deleteKey:"删除密钥",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:"Staggered Start",staggeredStartDescription:"Default group size and interval when staggering multi-printer batch starts. Can be overridden per batch in the print modal.",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:"Group size",staggerGroupSizeHelp:"Printers to start simultaneously per group",staggerInterval:"Interval (minutes)",staggerIntervalHelp:"Delay between each group starting",queueDrying:"自动干燥",queueDryingDescription:"在队列打印之间,打印机空闲时自动干燥AMS耗材。使用上方的湿度阈值触发干燥。",queueDryingEnabled:"启用自动干燥",queueDryingEnabledDescription:"当打印机空闲且湿度超过阈值时,自动启动AMS干燥",queueDryingBlock:"等待干燥完成",queueDryingBlockDescription:"阻止打印队列直到干燥完成。关闭时,打印优先于干燥。",ambientDryingEnabled:"环境干燥",ambientDryingEnabledDescription:"当空闲打印机的湿度超过阈值时自动干燥耗材,无需排队打印。",dryingPresets:"干燥预设",dryingPresetsDescription:"每种耗材类型的温度和时长。AMS 2 Pro使用较低温度,AMS-HT支持较高温度。",dryingFilament:"耗材",printModal:"打印对话框",expandCustomMapping:"默认展开自定义映射",expandCustomMappingDescription:"打印到多台打印机时,默认展开显示每台打印机的 AMS 映射",authentication:"身份验证",authEnabledDescription:"您的实例已通过用户身份验证保护",authDisabledDescription:"启用以要求登录并管理用户访问",authDisabledMessage:"启用身份验证以创建用户账户、管理权限并保护您的 Bambuddy 实例。",enableAuthentication:"启用身份验证",currentUser:"当前用户",changePassword:"修改密码",admin:"管理员",users:"用户",addUser:"添加用户",groups:"组",addGroup:"添加组",system:"系统",noDescription:"无描述",userCount:"{{count}} 个用户",permissionCount:"{{count}} 个权限",createUser:"创建用户",username:"用户名",enterUsername:"输入用户名",password:"密码",enterPassword:"输入密码(至少 6 个字符)",confirmPassword:"确认密码",confirmPasswordPlaceholder:"确认密码",viewReleaseOnGitHub:"在 GitHub 上查看发布",turnAllPlugsOn:"开启所有插座",turnAllPlugsOff:"关闭所有插座",clearNotificationLogs:"清除通知日志",clearLogsMessage:"这将永久删除所有 30 天前的通知日志。此操作无法撤销。",clearLogs:"清除日志",resetUiPreferences:"重置 UI 偏好",resetUiPreferencesMessage:"这将重置所有 UI 偏好为默认值:侧边栏顺序、主题、仪表板布局、视图模式和排序偏好。您的打印机、归档和服务器设置不会受到影响。清除后页面将重新加载。",resetPreferences:"重置偏好",deleteGroupTitle:"删除组",deleteGroupMessage:"确定要删除此组吗?此组中的用户将失去这些权限。",deleteGroup:"删除组",disableAuthenticationTitle:"禁用身份验证",disableAuthenticationMessage:"确定要禁用身份验证吗?这将使您的 Bambuddy 实例无需登录即可访问。所有用户将保留在数据库中但身份验证将被禁用。",disableAuthentication:"禁用身份验证",configureBambuddy:"配置 Bambuddy",systemDefault:"系统默认",archiveSettings:"归档设置",newWindow:"新窗口",embeddedOverlay:"嵌入式叠加层",preferredSlicer:"首选切片软件",preferredSlicerDescription:"选择要用于打开文件的切片软件",externalCameras:"外部摄像头",costTracking:"成本追踪",printsOnly:"仅打印",totalConsumption:"总消耗",dataManagement:"数据管理",storageUsage:"存储使用情况",storageUsageDescription:"按类别的数据使用情况明细",storageUsageTotal:"总计",storageUsageErrors:"错误",storageUsageOtherBreakdown:"其他(包括静态资源、脚本和配置文件)",storageUsageSystem:"系统",storageUsageData:"数据",storageUsageUnavailable:"存储使用信息不可用",clearNotificationLogsDescription:"删除 30 天前的通知日志",resetUiPreferencesDescription:"重置侧边栏顺序、主题、视图模式和布局偏好。打印机、归档和设置不受影响。",enableHomeAssistant:"启用 Home Assistant",enableMqtt:"启用 MQTT",useTls:"使用 TLS",enableMetricsEndpoint:"启用指标端点",availableMetrics:"可用指标",editUser:"编辑用户",deleteUserTitle:"删除用户",groupName:"组名称",leaveEmptyForAnonymous:"留空为匿名",leaveEmptyForNoAuth:"留空为无认证",enterNewPassword:"输入新密码",confirmNewPassword:"确认新密码",enterGroupName:"输入组名称",enterDescriptionOptional:"输入描述(可选)",enterCurrentPassword:"输入当前密码",enterNewPasswordMin6:"输入新密码(至少 6 个字符)",toast:{keyCopied:"密钥已复制到剪贴板",copyFailed:"复制密钥失败",keyAddedToBrowser:"密钥已添加到 API 浏览器",clearLogsFailed:"清除日志失败",uiPreferencesReset:"UI 偏好已重置。刷新中...",authDisabled:"身份验证已成功禁用",authDisableFailed:"禁用身份验证失败",apiKeyCreated:"API 密钥已创建",apiKeyDeleted:"API 密钥已删除",userCreated:"用户创建成功",userUpdated:"用户更新成功",userDeleted:"用户删除成功",groupCreated:"组创建成功",groupUpdated:"组更新成功",groupDeleted:"组删除成功",fillRequiredFields:"请填写所有必填字段",passwordsDoNotMatch:"密码不匹配",passwordTooShort:"密码至少需要 6 个字符",enterGroupName:"请输入组名称",settingsSaved:"设置已保存",cameraSettingsSaved:"摄像头设置已保存",enterCameraUrl:"请输入摄像头 URL",passwordChanged:"密码修改成功",connectionFailed:"连接失败",testFailed:"测试失败",cameraConnected:"摄像头已连接{{resolution}}"},testConnection:"测试连接",catalog:{spoolCatalog:"耗材目录",spoolCatalogDescription:"按品牌/类型的空耗材重量。用于添加耗材时的自动重量查找。",searchCatalog:"搜索目录...",addNewEntry:"添加新条目",namePlaceholder:"名称(例如:Bambu Lab - 塑料)",weight:"重量",type:"类型",default:"默认",custom:"自定义",noMatch:"没有条目匹配您的搜索",empty:"目录中没有条目",deleteEntry:"删除条目",deleteConfirm:'确定要删除"{{name}}"吗?',resetCatalog:"重置目录",resetConfirm:"重置目录为默认值?这将移除所有自定义条目。",loadFailed:"加载耗材目录失败",nameWeightRequired:"名称和重量为必填项",entryAdded:"条目已添加",addFailed:"添加条目失败",entryUpdated:"条目已更新",updateFailed:"更新条目失败",entryDeleted:"条目已删除",deleteFailed:"删除条目失败",resetSuccess:"目录已重置为默认值",resetFailed:"重置目录失败",exported:"已导出 {{count}} 条",imported:"已导入 {{added}} 条(跳过 {{skipped}} 条)",importFailed:"导入失败:无效的 JSON 格式",exportTooltip:"导出目录为 JSON",importTooltip:"从 JSON 导入目录",resetTooltip:"重置为默认值",selectedCount:"已选择 {{count}} 项",deleteSelected:"删除所选",bulkDeleteConfirm:"确定要删除 {{count}} 个条目吗?",bulkDeleted:"已删除 {{count}} 个条目",bulkDeleteFailed:"删除条目失败"},colorCatalog:{title:"颜色目录",description:"按制造商/材料的耗材颜色。用于添加耗材时的自动颜色查找。",searchColors:"搜索颜色...",allManufacturers:"所有制造商",addNewColor:"添加新颜色",manufacturer:"制造商",colorName:"颜色名称",hex:"十六进制",materialOptional:"材料(可选)",showing:"显示 {{filtered}} / {{total}} 种颜色",noMatch:"没有颜色匹配您的搜索",empty:"目录中没有颜色",deleteColor:"删除颜色",deleteConfirm:'确定要删除"{{name}}"吗?',resetCatalog:"重置颜色目录",resetConfirm:"重置目录为默认值?这将移除所有自定义颜色。",sync:"同步",starting:"启动中...",syncTooltip:"从 FilamentColors.xyz 同步(2000+ 种颜色,可能需要一分钟)",loadFailed:"加载颜色目录失败",fieldsRequired:"制造商、颜色名称和十六进制颜色为必填项",colorAdded:"颜色已添加",addFailed:"添加颜色失败",colorUpdated:"颜色已更新",updateFailed:"更新颜色失败",colorDeleted:"颜色已删除",deleteFailed:"删除颜色失败",resetSuccess:"颜色目录已重置为默认值",resetFailed:"重置目录失败",syncUpToDate:"已是最新(检查了 {{count}} 种颜色)",syncComplete:"添加了 {{added}} 种新颜色({{skipped}} 种已存在)",syncError:"同步错误",syncFailed:"从 FilamentColors.xyz 同步失败",exported:"已导出 {{count}} 种颜色",imported:"已导入 {{added}} 种颜色(跳过 {{skipped}} 种)",importFailed:"导入失败:无效的 JSON 格式",selectedCount:"已选择 {{count}} 项",deleteSelected:"删除所选",bulkDeleteConfirm:"确定要删除 {{count}} 种颜色吗?",bulkDeleted:"已删除 {{count}} 种颜色",bulkDeleteFailed:"删除颜色失败"},dateFormat:"日期格式",dateFormatUs:"美式 (MM/DD/YYYY)",dateFormatEu:"欧式 (DD/MM/YYYY)",dateFormatIso:"ISO (YYYY-MM-DD)",timeFormat:"时间格式",timeFormat12:"12小时制 (3:30 PM)",timeFormat24:"24小时制 (15:30)",defaultPrinter:"默认打印机",defaultPrinterDescription:"为上传、重印和其他操作预选此打印机。",slicerBambuStudio:"Bambu Studio",slicerOrcaSlicer:"OrcaSlicer",sidebarOrderDescription:"拖拽侧边栏项目以重新排序。在此处重置为默认顺序。",setDefault:"设为默认",sidebarOrderSetDefaultHint:"设为默认将当前菜单顺序应用于尚未自定义的用户。",sidebarDefaultSet:"已设置默认菜单顺序。",sidebarDefaultCleared:"已清除默认菜单顺序。",sidebarDefaultFailed:"设置默认菜单顺序失败。",reset:"重置",darkMode:"深色模式",lightMode:"浅色模式",active:"(当前)",background:"背景",accent:"强调色",style:"样式",bgNeutral:"中性",bgWarm:"暖色",bgCool:"冷色",bgOled:"OLED 纯黑",bgSlate:"石板蓝",bgForest:"森林绿",accentGreen:"绿色",accentTeal:"青色",accentBlue:"蓝色",accentOrange:"橙色",accentPurple:"紫色",accentRed:"红色",styleClassic:"经典",styleGlow:"发光",styleVibrant:"鲜艳",themeToggleHint:"使用侧边栏中的太阳/月亮图标在深色和浅色模式之间切换。",autoArchivePrints:"自动归档打印",autoArchiveDescription:"打印完成时自动保存3MF文件",saveThumbnailsDescription:"从3MF文件中提取并保存预览图像",captureFinishPhotoDescription:"打印完成时从打印机摄像头拍照",ffmpegNotInstalled:"未安装ffmpeg",ffmpegRequired:"摄像头捕获需要ffmpeg。通过 brew install ffmpeg(macOS)或 apt install ffmpeg(Linux)安装。",camera:"摄像头",cameraViewMode:"摄像头查看模式",cameraOverlayDescription:"摄像头在主屏幕上以可调大小的覆盖层打开",cameraWindowDescription:"摄像头在单独的浏览器窗口中打开",externalCamerasDescription:"配置外部摄像头以替换内置打印机摄像头。支持MJPEG流、RTSP、HTTP快照和USB摄像头(V4L2)。启用后,外部摄像头将用于实时查看和完成照片。",cameraPlaceholderUsb:"设备路径 (/dev/video0)",cameraPlaceholderUrl:"摄像头URL (rtsp://... 或 http://...)",cameraTypeMjpeg:"MJPEG 流",cameraTypeRtsp:"RTSP 流",cameraTypeSnapshot:"HTTP 快照",cameraTypeUsb:"USB 摄像头 (V4L2)",cameraRotation:"旋转",test:"测试",connected:"已连接",disconnected:"未连接",currency:"货币",defaultFilamentCost:"默认耗材成本(每公斤)",electricityCost:"每千瓦时电费",energyDisplayMode:"能源显示模式",energyModePrintDescription:"仪表板显示打印期间使用的能源总和",energyModeTotalDescription:"仪表板显示智能插座的累计能源",fileManager:"文件管理器",createArchiveEntry:"打印时创建归档条目",createArchiveEntryDescription:"从文件管理器打印时,可选择创建归档条目",lowDiskSpaceWarning:"磁盘空间不足警告",lowDiskSpaceDescription:"当可用磁盘空间低于此阈值时显示警告",printerFirmware:"打印机固件",checkFirmwareDescription:"检查Bambu Lab的打印机固件更新",bambuddySoftware:"Bambuddy 软件",autoCheckDescription:"启动时自动检查新版本",checkNow:"立即检查",updateAvailableVersion:"可用更新:v{{version}}",releaseNotes:"发布说明",updateViaDocker:"通过 Docker Compose 更新:",installUpdate:"安装更新",latestVersionRunning:"您正在运行最新版本",failedToCheckUpdates:"检查更新失败:{{error}}",backupRestore:"备份与恢复",backupRestoreDescription:"导出/导入设置并配置GitHub备份",goToBackup:"前往备份",externalUrl:"外部URL",externalUrlDescription:"Bambuddy可访问的外部URL。用于通知图像和外部集成。",bambuddyUrl:"Bambuddy URL",externalUrlHint:"包含协议和端口(例如:http://192.168.1.100:8000)",ftpRetry:"FTP重试",ftpRetryDescription:"当打印机WiFi不稳定时重试FTP操作。适用于3MF下载、打印上传、延时摄影下载和固件更新。",autoRetryDescription:"自动重试失败的FTP操作",retryAttempts:"重试次数",retryDelay:"重试延迟",connectionTimeout:"连接超时",time_one:"{{count}}次",time_other:"{{count}}次",second_one:"{{count}}秒",second_other:"{{count}}秒",nSeconds:"{{count}}秒",increaseForWeakWifi:"对WiFi信号弱的打印机增加此值",homeAssistant:"Home Assistant",homeAssistantFullDescription:"连接到Home Assistant,通过HA REST API控制智能插座。支持switch、light、input_boolean和script实体。",homeAssistantUrl:"Home Assistant URL",longLivedAccessToken:"长期访问令牌",haTokenHint:"在HA中创建令牌:个人资料 → 长期访问令牌 → 创建令牌",connectionSuccessful:"连接成功",connectionFailed:"连接失败",haConnectionSuccess:"已成功连接到Home Assistant。",haConnectionFailed:"连接Home Assistant失败。",mqttPublishing:"MQTT发布",mqttDescription:"将BamBuddy事件发布到外部MQTT代理,用于与Node-RED、Home Assistant和其他自动化系统集成。",mqttEnableDescription:"向外部MQTT代理发布事件",brokerHostname:"代理主机名",port:"端口",usernameOptional:"用户名(可选)",passwordOptional:"密码(可选)",topicPrefix:"主题前缀",topicPrefixHint:"主题格式:{{prefix}}/printers//status 等",prometheusMetrics:"Prometheus 指标",prometheusEndpointDescription:"在 /api/v1/metrics 公开打印机指标,用于Prometheus/Grafana监控。",bearerTokenOptional:"Bearer令牌(可选)",bearerTokenHint:"设置后,请求必须包含 Authorization: Bearer ",metricsConnectionStatus:"连接状态",metricsPrinterState:"打印机状态(空闲/打印中等)",metricsPrintProgress:"打印进度 0-100%",metricsBedTemp:"热床温度",metricsNozzleTemp:"喷嘴温度",metricsPrintsTotal:"按结果分类的总打印数",metricsMore:"...以及更多(层数、风扇、队列、耗材用量)",smartPlugsDescription:"连接智能插座(Tasmota或Home Assistant)以自动化电源控制并跟踪打印机的能源使用情况。",allOn:"全部开启",allOff:"全部关闭",addSmartPlug:"添加智能插座",energySummary:"能源概要",currentPower:"当前功率",plugsOnline:"{{reachable}}/{{total}} 个插座在线",today:"今天",yesterday:"昨天",total:"总计",enablePlugsForSummary:"启用插座以查看能源概要",addNotificationProvider:"添加",systemBadge:"(系统)",creating:"创建中...",changing:"修改中...",deleteUserAndItems:"删除用户及其所有项目",deleteUserKeepItems:"删除用户,保留项目(将变为无主项目)",ok:"确定",twoFa:{totpTitle:"身份验证器应用 (TOTP)",totpDesc:"使用 Google Authenticator、Aegis 或 Authy 等应用。",emailOtpTitle:"邮件 OTP",emailOtpDesc:"登录时向 {{email}} 发送一次性验证码。",emailOtpNoEmail:"请先为账户添加邮箱地址以启用此方式。",addEmailFirst:"您的账户没有邮箱地址,请联系管理员添加。",setupTotp:"设置身份验证器应用",setupAuthApp:"设置身份验证器应用",setupInstructions:"使用身份验证器应用扫描二维码,然后输入验证码确认。",manualEntry:"无法扫描?请手动输入此密钥:",scannedContinue:"已扫描 — 继续",enterCodeToConfirm:"请输入身份验证器应用中的6位验证码以确认设置。",activate:"激活",disableTotp:"停用身份验证器",disableConfirmHint:"请输入有效的 TOTP 码或备用码来停用身份验证器。",totpDisabled:"身份验证器应用已停用。",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:{title:"SSO / OIDC 提供商",desc:"配置 OpenID Connect 提供商以实现单点登录。",addProvider:"添加提供商",newProvider:"新提供商",empty:"尚未配置 OIDC 提供商。",created:"提供商已创建。",updated:"提供商已更新。",deleted:"提供商已删除。",deleteTitle:"删除提供商",deleteMessage:'删除"{{name}}"?所有关联账户将断开连接。',form:{name:"显示名称",issuerUrl:"颁发者 URL",clientId:"客户端 ID",clientSecret:"客户端密钥",scopes:"作用域",iconUrl:"图标 URL(可选)",enabled:"已启用",autoCreate:"自动创建用户",autoCreateDesc:"首次登录时自动创建本地账户。",autoLink:"自动关联已有账户",autoLinkDesc:"首次登录时通过邮箱匹配现有本地账户并自动关联。",secretHint:"留空以保留当前",secretPlaceholder:"新密钥"}}},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:{generic:"出了点问题",networkError:"网络错误。请检查您的连接。",notFound:"未找到",unauthorized:"未授权",serverError:"服务器错误",validationError:"请检查您的输入",printerConnectionFailed:"连接打印机失败",saveFailed:"保存更改失败",deleteFailed:"删除失败",loadFailed:"加载数据失败"},hmsErrors:{title:"错误 - {{name}}",noErrors:"无错误",viewOnWiki:"在拓竹 Wiki 上查看",clearInstructions:"在打印机上清除错误以在此处消除它们。",clearErrors:"清除错误",clearSuccess:"HMS 错误已清除",clearFailed:"清除 HMS 错误失败"},mqttDebug:{title:"MQTT 调试日志",searchPlaceholder:"搜索主题或负载...",noMessages:"尚未记录消息",startLoggingHint:'点击"开始记录"以开始捕获 MQTT 消息',noMessagesMatch:"没有消息匹配您的筛选条件",adjustFilterHint:"尝试调整您的搜索或筛选条件",incoming:"传入",outgoing:"传出",loggingStopped:"记录已停止",loggingActive:"记录中 - 消息将自动刷新",startLogging:"开始记录",stopLogging:"停止记录",clearLog:"清除日志",topic:"主题",timestamp:"时间戳",direction:"方向",all:"全部"},printerFiles:{title:"文件管理器",storageUsed:"已用:",storageFree:"剩余:",filterPlaceholder:"筛选文件...",deleteButton:"删除",deleteFiles:"删除 {{count}} 个文件",deleteFileConfirm:'删除"{{name}}"?此操作无法撤销。',deleteFilesConfirm:"删除 {{count}} 个选中的文件?此操作无法撤销。",noFiles:"打印机上没有文件",loadingFiles:"加载文件中...",failedToLoad:"加载文件失败",toast:{filesDeleted:"已删除 {{count}} 个文件",deleteFailed:"删除失败:{{error}}"}},confirm:{delete:"确定要删除吗?",unsavedChanges:"您有未保存的更改。确定要离开吗?",clearQueue:"确定要清空队列吗?"},login:{title:"Bambuddy 登录",subtitle:"登录您的账户",username:"用户名",usernamePlaceholder:"输入您的用户名",usernameOrEmail:"用户名或邮箱",usernameOrEmailPlaceholder:"用户名或 @ 邮箱",password:"密码",passwordPlaceholder:"输入您的密码",signIn:"登录",signingIn:"登录中...",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:"身份验证器应用",methodEmail:"邮箱验证码",methodBackup:"备用恢复码",instructionsTotp:"请打开您的身份验证器应用,输入 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:{title:"Bambuddy 设置",subtitle:"为您的 Bambuddy 实例配置身份验证",enableAuth:"启用身份验证",adminAccount:"管理员账户",adminAccountDesc:"如果管理员用户已存在,将使用现有管理员账户启用身份验证。如需使用现有管理员,请将下方字段留空,或输入新凭据创建新管理员用户。",adminUsername:"管理员用户名",adminPassword:"管理员密码",optionalIfAdminExists:"(如管理员用户已存在则为可选)",adminUsernamePlaceholder:"输入管理员用户名(可选)",adminPasswordPlaceholder:"输入管理员密码(可选)",confirmPassword:"确认密码",confirmPasswordPlaceholder:"确认管理员密码",settingUp:"设置中...",completeSetup:"完成设置",toast:{authEnabledAdminCreated:"身份验证已启用并创建了管理员用户",authEnabledExistingAdmins:"使用现有管理员用户启用了身份验证",setupCompleted:"设置完成",enterBothCredentials:"请输入管理员用户名和密码,或将两者留空以使用现有管理员用户",passwordsDoNotMatch:"密码不匹配",passwordTooShort:"密码至少需要 6 个字符"}},changePassword:{title:"修改密码",currentPassword:"当前密码",currentPasswordPlaceholder:"输入当前密码",newPassword:"新密码",newPasswordPlaceholder:"输入新密码(至少 6 个字符)",confirmPassword:"确认新密码",confirmPasswordPlaceholder:"确认新密码",passwordsDoNotMatch:"密码不匹配",passwordTooShort:"密码至少需要 6 个字符",changing:"修改中...",success:"密码修改成功",failed:"密码修改失败"},plateAlert:{title:"打印已暂停!",message:"在构建板上检测到物体。打印已自动暂停。请清理打印板并继续打印。",understand:"我知道了"},camera:{title:"摄像头视图",invalidPrinterId:"无效的打印机 ID",live:"实时",snapshot:"快照",restartStream:"重启流",refreshSnapshot:"刷新快照",fullscreen:"全屏",exitFullscreen:"退出全屏",connectingToCamera:"连接摄像头中...",capturingSnapshot:"拍摄快照中...",connectionLost:"连接已断开",connectionFailed:"摄像头连接失败",reconnecting:"{{countdown}} 秒后重新连接...(第 {{attempt}}/{{max}} 次尝试)",reconnectNow:"立即重新连接",cameraUnavailable:"摄像头不可用",cameraUnavailableDesc:"请确保打印机已通电并已连接。",noCamera:"无可用摄像头",retry:"重试",cameraStream:"摄像头流",zoomOut:"缩小",zoomIn:"放大",resetZoom:"重置缩放",recording:"录制中",startRecording:"开始录制",stopRecording:"停止录制",chamberLight:"切换腔室灯"},groups:{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:{title:"用户管理",subtitle:"管理用户及其对 Bambuddy 实例的访问",backToSettings:"返回设置",createUser:"创建用户",noPermission:"您没有访问此页面的权限。",admin:"管理员",noGroups:"无组",active:"活跃",inactive:"非活跃",edit:"编辑",delete:"删除",system:"系统",noGroupsAvailable:"无可用组",table:{username:"用户名",groups:"组",status:"状态",actions:"操作"},toast:{created:"用户创建成功",updated:"用户更新成功",deleted:"用户删除成功",fillRequired:"请填写所有必填字段",passwordsDoNotMatch:"密码不匹配",passwordTooShort:"密码至少需要 6 个字符"},modal:{createUser:"创建用户",editUser:"编辑用户",cancel:"取消",creating:"创建中...",saving:"保存中...",saveChanges:"保存更改",advancedAuthSubtitle:"使用高级认证"},form:{username:"用户名",usernamePlaceholder:"输入用户名",email:"邮箱",emailPlaceholder:"user@example.com",password:"密码",passwordPlaceholder:"输入密码",confirmPassword:"确认密码",confirmPasswordPlaceholder:"确认密码",newPasswordPlaceholder:"输入新密码",confirmNewPasswordPlaceholder:"确认新密码",leaveBlankToKeep:"留空以保持当前值",groups:"组",optional:"可选",autoGeneratedPassword:"将自动生成安全密码并通过邮件发送给用户。",passwordManagedByAdvancedAuth:'密码由高级认证管理。使用"重置密码"通过邮件向用户发送新密码。',resetPassword:"重置密码",resettingPassword:"重置密码中..."},deleteModal:{title:"删除用户",message:"确定要删除此用户吗?此操作无法撤销。",confirm:"删除用户"}},streamOverlay:{title:"流叠加层",invalidPrinterId:"无效的打印机 ID",cameraStream:"摄像头流",progress:"进度",eta:"预计完成时间",printerIdle:"打印机空闲",printerOffline:"打印机离线",status:{printing:"打印中",paused:"已暂停",finished:"已完成",failed:"失败",idle:"空闲",unknown:"未知"}},profiles:{title:"配置文件",subtitle:"管理您的切片预设和压力推进校准",tabs:{cloud:"云端配置文件",local:"本地配置文件",kprofiles:"K 值配置"},localProfiles:{title:"本地配置文件",subtitle:"从 OrcaSlicer 导入和管理切片预设",import:"导入配置文件",importDesc:"将 .bbscfg、.bbsflmt、.orca_filament、.zip 或 .json 文件拖放到此处",importing:"导入中...",search:"搜索本地预设...",noPresets:"暂无本地预设",badge:"本地",edit:"编辑",delete:"删除",cancel:"取消",deleteConfirmTitle:"删除预设",deleteConfirm:"确定要删除此预设吗?此操作无法撤销。",source:"来源",inheritsFrom:"继承自",filamentType:"类型",vendor:"厂商",compatiblePrinters:"兼容打印机",nozzleTemp:"喷嘴温度",cost:"成本",density:"密度",pressureAdvance:"压力推进",filament:"耗材",process:"工艺",printer:"打印机",toast:{importSuccess:"已导入 {{count}} 个预设",importSkipped:"跳过 {{count}} 个预设(重复)",importError:"导入时出现 {{count}} 个错误",deleted:"预设已删除",updated:"预设已更新"}},connectedAs:"已连接为",logout:"退出登录",noLogoutPermission:"您没有退出登录的权限",failedToLoad:"加载配置文件失败",retry:"重试",time:{justNow:"刚刚",minsAgo:"{{count}} 分钟前",hoursAgo:"{{count}} 小时前",daysAgo:"{{count}} 天前"},toast:{loggedOut:"已退出登录"},login:{title:"连接到拓竹云",subtitle:"跨设备同步您的切片预设",email:"邮箱",password:"密码",region:"地区",regionGlobal:"全球",regionChina:"中国",verificationCode:"验证码",totpCode:"验证器代码",checkEmail:"检查您的邮箱 ({{email}}) 获取 6 位验证码",enterTotpHint:"输入验证器应用中的 6 位代码",accessToken:"访问令牌",accessTokenHint:"粘贴您的拓竹访问令牌(来自 Bambu Studio)",back:"返回",loginButton:"登录",verifyButton:"验证",setTokenButton:"设置令牌",useToken:"改用访问令牌",useEmail:"改用邮箱登录",toast:{loggedIn:"登录成功",codeSent:"验证码已发送到您的邮箱",enterTotp:"输入验证器应用中的代码",tokenSet:"令牌设置成功"}},presets:{myPreset:"我的预设(可编辑)",duplicate:"复制",editable:"可编辑",failedToLoadDetails:"加载预设详情失败",deleteConfirm:"删除此预设?",deleteWarning:'这将从拓竹云中永久删除"{{name}}"。此操作无法撤销。',noDuplicatePermission:"您没有复制预设的权限",noEditPermission:"您没有编辑预设的权限",noDeletePermission:"您没有删除预设的权限",types:{filament:"耗材预设",printer:"打印机预设",process:"工艺预设"},toast:{deleted:"预设已删除",created:"预设已创建",updated:"预设已更新",duplicated:"预设已复制",fieldAdded:'字段"{{key}}"已添加',exported:"预设已导出"},baseLabel:"基础:{{name}}",currentLabel:"当前:{{name}}",newPreset:"新建预设",editPreset:"编辑预设",duplicatePreset:"复制预设",createNewPreset:"创建新预设",customizeSettings:"自定义新预设的设置",compareWithBase:"与基础预设比较",compare:"比较",basePreset:"基础预设",selectBasePreset:"选择基础预设...",presetName:"预设名称",myCustomPreset:"我的自定义预设",inheritsFrom:"继承自",dropJsonToImport:"拖放 JSON 以导入",tabs:{common:"常用",allFields:"所有字段"},availableFields:"可用字段",searchFieldsPlaceholder:"搜索字段...",noMatchingFields:"没有匹配的字段",allFieldsAdded:"所有字段已添加",addCustomField:"添加自定义字段",yourOverrides:"您的覆盖值",noOverridesYet:"暂无覆盖值",clickFieldsToAdd:"点击左侧的字段进行添加",saveAsTemplate:"保存为模板",jsonTip:"提示:将 .json 文件拖放到此对话框的任意位置以导入设置"},cloudView:{searchPlaceholder:"搜索预设...",templates:"模板",refresh:"刷新",newPreset:"新建预设",clearFilters:"清除筛选",compareMode:"比较模式",selectAnotherPreset:"选择另一个 {{type}} 预设",clickTwoPresets:"点击两个相同类型的预设进行比较",selectFirst:"1. 选择第一个",selectSecond:"2. 选择第二个",compareNow:"立即比较",lastSynced:"上次同步:",showingCount:"显示 {{showing}} / {{total}} 个预设",noPresetsFound:"未找到预设",columns:{filament:"耗材",process:"工艺",printer:"打印机"},noFilamentPresets:"无耗材预设",noProcessPresets:"无工艺预设",noPrinterPresets:"无打印机预设",filters:{type:"类型",owner:"所有者",printer:"打印机",nozzle:"喷嘴",filament:"耗材",layer:"层",all:"全部",myPresets:"我的预设",builtIn:"内置",process:"工艺"},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:{debugLoggingActive:"调试日志记录已激活",manageLogs:"管理",collectItem7:"打印机连接和固件版本",collectItem8:"集成状态(Spoolman、MQTT、HA)",collectItem9:"网络接口(仅子网)",collectItem10:"Python 包版本",collectItem11:"数据库健康检查",collectItem12:"Docker 环境详情"},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:"禁用文本换行",dragToResizeTooltip:"拖动调整大小,双击重置",searchFiles:"搜索文件...",allTypes:"所有类型",prints:"打印",ascending:"升序",descending:"降序",resultsCount:"{{showing}} / {{total}} 个文件",selectAll:"全选",deselectAll:"取消全选",selected:"已选择 {{count}} 个",adding:"添加中...",loadingFiles:"加载文件中...",folderIsEmpty:"文件夹为空",noFilesYet:"暂无文件",folderEmptyDescription:"上传文件或将文件移入此文件夹以开始使用。",noFilesDescription:"上传文件以开始组织您的打印相关文件。",noMatchingFiles:"没有匹配的文件",noMatchingFilesDescription:"没有文件匹配您当前的搜索或筛选条件。",clearFilters:"清除筛选",printedCount:"已打印 {{count}} 次",uploadedBy:"上传者",deleteFolder:"删除文件夹",deleteFile:"删除文件",deleteFilesCount:"删除 {{count}} 个文件",deleteFolderConfirm:"确定要删除此文件夹吗?其中的所有文件也将被删除。",deleteFileConfirm:"确定要删除此文件吗?",deleteFilesConfirm:"确定要删除 {{count}} 个选中的文件吗?此操作无法撤销。",deleting:"删除中...",noPermissionRenameFolder:"您没有重命名文件夹的权限",noPermissionLinkFolder:"您没有链接文件夹的权限",noPermissionDeleteFolder:"您没有删除文件夹的权限",noPermissionPrint:"您没有打印的权限",noPermissionAddToQueue:"您没有添加到队列的权限",noPermissionDownload:"您没有下载文件的权限",noPermissionRenameFile:"您没有重命名此文件的权限",noPermissionGenerateThumbnail:"您没有生成缩略图的权限",noPermissionDeleteFile:"您没有删除此文件的权限",noPermissionCreateFolder:"您没有创建文件夹的权限",noPermissionUpload:"您没有上传文件的权限",noPermissionMoveFiles:"您没有移动文件的权限",noPermissionDeleteFiles:"您没有删除文件的权限",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:{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:"查看详情",namePlaceholder:"例如:Voron 2.4 构建",descriptionPlaceholder:"可选描述...",color:"颜色",targetPlates:"目标板数",targetPlatesPlaceholder:"例如:25",targetPlatesHelp:"打印任务数量",targetParts:"目标零件数",targetPartsPlaceholder:"例如:150",targetPartsHelp:"所需零件总数",tagsLabel:"标签(逗号分隔)",tagsPlaceholder:"例如:voron、功能件、礼物",dueDate:"截止日期",priority:"优先级",priorityLow:"低",priorityNormal:"普通",priorityHigh:"高",priorityUrgent:"紧急",statusActive:"进行中",statusCompleted:"已完成",statusArchived:"已归档",done:"完成",completed:"已完成",failed:"失败",inQueue:"队列中",noPrintsYet:"暂无打印",printJobs:"打印任务(板)",partsPrinted:"已打印零件",failedParts:"失败零件",import:"导入",export:"导出",importProject:"导入项目",exportAll:"导出所有项目",loading:"加载项目中...",noEditPermission:"您没有编辑项目的权限",noDeletePermission:"您没有删除项目的权限",noCreatePermission:"您没有创建项目的权限",noImportPermission:"您没有导入项目的权限",noExportPermission:"您没有导出项目的权限",toast:{created:"项目已创建",updated:"项目已更新",deleted:"项目已删除",imported:"项目已导入",multipleImported:"已导入 {{count}} 个项目",importFailed:"导入失败",exported:"项目已导出(仅元数据)"}},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:{title:"系统信息",version:"版本",uptime:"运行时间",cpuUsage:"CPU 使用率",memoryUsage:"内存使用率",diskUsage:"磁盘使用率",networkInfo:"网络信息",logs:"日志",debugMode:"调试模式",enableDebug:"启用调试日志",disableDebug:"禁用调试日志",downloadLogs:"下载日志",clearLogs:"清除日志",dockerInfo:"Docker 信息",containerName:"容器名称",imageName:"镜像名称",platform:"平台",architecture:"架构"},library:{title:"耗材库",addFilament:"添加耗材",editFilament:"编辑耗材",deleteFilament:"删除耗材",vendor:"厂商",material:"材料",color:"颜色",kFactor:"K 值",temperature:"温度",noFilaments:"耗材库中没有耗材",deleteConfirm:"确定要删除此耗材吗?",importFromPrinter:"从打印机导入",exportToFile:"导出到文件"},spoolman:{title:"Spoolman 集成",enabled:"Spoolman 已启用",url:"Spoolman URL",connected:"已连接",disconnected:"未连接",testConnection:"测试连接",sync:"同步",syncing:"同步中...",lastSync:"上次同步",linkToSpoolman:"链接到 Spoolman",openInSpoolman:"在 Spoolman 中打开",unlinkSpool:"取消链接耗材",unlinkConfirmTitle:"解开线轴?",unlinkConfirmMessage:"这将断开卷轴与 Spoolman 的连接。Spoolman 中的卷轴数据将保持不变。",selectSpool:"选择耗材",noUnlinkedSpools:"无未链接的耗材",linkSuccess:"耗材已成功链接到 Spoolman",linkFailed:"链接耗材失败",unlinkSuccess:"已成功从 Spoolman 取消链接耗材",unlinkFailed:"取消链接耗材失败",spoolId:"耗材 ID",fillSourceLabel:"(Spoolman)",weight:"重量",remaining:"剩余",disableWeightSync:"禁用 AMS 估计重量同步",disableWeightSyncDesc:"不从 AMS 估计值更新剩余容量。如果您更喜欢 Spoolman 的用量追踪而非 AMS 百分比估计,请使用此选项。新耗材仍将使用 AMS 估计值作为初始重量。",reportPartialUsage:"报告失败打印的部分用量",reportPartialUsageDesc:"当打印失败或被取消时,根据层进度报告估计的耗材使用量。"},inventory:{title:"耗材库存",addSpool:"添加耗材",editSpool:"编辑耗材",material:"材料",selectMaterial:"选择材料...",subtype:"子类型",brand:"品牌",searchBrand:"搜索品牌...",useCustomBrand:'使用"{{brand}}"',useCustomMaterial:"使用自定义材料:{{material}}",colorName:"颜色名称",colorNamePlaceholder:"翡翠白、烈焰红...",color:"颜色",hexColor:"十六进制颜色",pickColor:"选择自定义颜色",labelWeight:"标签重量",coreWeight:"空盘重量",searchSpoolWeight:"搜索耗材重量...",weightUsed:"已使用",currentWeight:"剩余重量",measuredWeight:"称量重量",spoolName:"线轴",costPerKg:"每公斤成本",measuredWeightError:"称量重量必须在 {{min}}g 到 {{max}}g 之间。",slicerFilament:"切片耗材",slicerFilamentName:"切片预设名称",slicerPreset:"切片预设",searchPresets:"搜索耗材预设...",selectedPreset:"已选择",noPresetsFound:"未找到预设",tempOverrides:"温度覆盖",note:"备注",notePlaceholder:"关于此耗材的任何备注...",archive:"归档",restore:"恢复",noSpools:"暂无耗材。添加您的第一个耗材开始使用。",noManualSpools:"没有手动添加的耗材。请先向库存中添加耗材。",kProfiles:"K 值配置",addKProfile:"添加 K 值配置",assignSpool:"分配耗材",unassignSpool:"取消分配",assignSuccess:"耗材已分配,AMS 槽位已配置",assignFailed:"分配耗材失败",assignMismatchTitle:"材料不匹配",assignMismatchMessage:'所选线轴材料 "{{spoolMaterial}}" 与 {{location}} 的料槽材料 "{{trayMaterial}}" 不匹配。仍要分配吗?',assignMismatchConfirm:"仍然分配",assignPartialMismatchMessage:'线轴材料 "{{spoolMaterial}}" 与 {{location}} 的 "{{trayMaterial}}" 相近但不完全一致。是否继续?',assignProfileMismatchMessage:'线轴配置 "{{spoolProfile}}" 与 {{location}} 的料槽配置 "{{trayProfile}}" 不一致。是否继续?',selectSpool:"选择要分配到此槽位的耗材",assigned:"已分配",assigning:"分配中...",searchSpools:"搜索耗材...",showAllSpools:"显示所有耗材",allMaterials:"所有材料",filterByBrand:"按品牌筛选...",showArchived:"显示已归档",quickAdd:"快速添加(库存)",quantity:"数量",stock:"库存",configured:"已配置",spoolsCreated:"已创建 {{count}} 个耗材",spoolCreated:"耗材已创建",spoolUpdated:"耗材已更新",spoolDeleted:"耗材已删除",spoolArchived:"耗材已归档",spoolRestored:"耗材已恢复",deleteConfirm:"确定要删除此耗材吗?此操作无法撤销。",archiveConfirm:"确定要归档此耗材吗?",advancedSettings:"高级设置",filamentInfoTab:"耗材信息",paProfileTab:"PA 配置",filamentInfo:"耗材",additional:"附加",loadingPresets:"加载云端预设中...",cloudConnected:"云端已连接",cloudNotConnected:"云端未连接(使用默认值)",recentColors:"最近",searchColors:"搜索颜色...",searchResults:"搜索结果",allColors:"所有颜色",commonColors:"常用颜色",showLess:"显示更少",showAll:"显示全部",noColorsFound:"没有颜色匹配您的搜索",noResults:"未找到匹配项",selectMaterialFirst:"请先在耗材信息选项卡中选择材料。",noPrintersConfigured:"未配置打印机。添加打印机以使用 PA 配置。",matchingFilter:"匹配",anyBrand:"任何品牌",anyVariant:"任何变体",autoSelect:"自动选择",matches:"匹配",match:"匹配",noMatches:"无匹配",connected:"已连接",offline:"离线",printerOffline:"打印机离线。连接后查看校准配置。",noKProfilesMatch:"没有 K 值配置匹配所选耗材。",leftNozzle:"左喷嘴",rightNozzle:"右喷嘴",profilesSelected:"个校准配置已选择",totalInventory:"总库存",totalConsumed:"总消耗",byMaterial:"按材料",inPrinter:"在打印机中",lowStock:"库存不足",sinceTracking:"自开始追踪",loadedInAms:"已装载到 AMS/外置",remaining:"剩余",weightCheck:"重量检查",lastWeighed:"上次称量",neverWeighed:"从未称量",search:"搜索耗材...",showing:"显示",to:"到",of:"共",show:"显示",spools:"个耗材",spool:"个耗材",page:"页",noSpoolsMatch:"未找到结果",noSpoolsMatchDesc:"尝试调整您的搜索或筛选条件。",active:"活跃",archived:"已归档",all:"全部",used:"已使用",new:"新的",clearFilters:"清除筛选",table:"表格",cards:"卡片",net:"净重",groupSimilar:"分组",groupedSpools:"{{count}} 个相同耗材",groupedRows:"行",columns:"列",configureColumns:"配置列",configureColumnsDesc:"拖动以重新排序列或使用箭头。使用眼睛图标切换可见性。",visible:"可见",reset:"重置",cancel:"取消",applyChanges:"应用更改",moveUp:"上移",moveDown:"下移",hideColumn:"隐藏列",showColumn:"显示列",linkToSpool:"链接到耗材",tagLinked:"标签已链接到耗材",tagLinkFailed:"链接标签失败",tagAlreadyLinked:"标签已链接到其他耗材",unknownTag:"检测到未知 RFID 标签",usageHistory:"使用历史",noUsageHistory:"暂无使用记录",printName:"打印名称",weightConsumed:"消耗重量",clearHistory:"清除",historyCleared:"使用历史已清除",fillSourceLabel:"(库存)",lowStockThresholdError:"阈值必须在 0.1 到 99.9 之间"},timelapse:{title:"延时摄影",create:"创建延时摄影",download:"下载",delete:"删除",preview:"预览",frameRate:"帧率",quality:"质量",processing:"处理中...",noTimelapses:"无可用延时摄影"},ams:{title:"AMS",slot:"槽位",empty:"空",emptySlot:"空槽位",unknown:"未知",humidity:"湿度",temperature:"温度",filamentType:"耗材类型",filamentColor:"颜色",remaining:"剩余",history:"AMS 历史",noHistory:"无可用历史",configureSlot:"配置槽位",externalSpool:"外置耗材",profile:"配置",kFactor:"K 值",fill:"填充",configure:"配置",used:"已使用",remainingUnit:"剩余"},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:"Stagger printer starts",staggerGroupSize:"Group size",staggerInterval:"Interval (min)",staggerPreview:"{{printers}} printers → {{groups}} groups of {{size}}, starting every {{interval}} min",staggerLastGroup:"last group: {{count}}",staggerTotal:"total: {{minutes}} min",staggerToPrinters:"分批发送到 {{count}} 台打印机",gcodeInjection:"注入自动打印G-code"},backup:{title:"备份与恢复",createBackup:"创建备份",restoreBackup:"恢复备份",restoreDescription:"从备份文件替换所有数据",downloadBackup:"下载备份",uploadBackup:"上传备份",lastBackup:"上次备份",autoBackup:"自动备份",backupNow:"立即备份",restoreWarning:"警告:恢复备份将覆盖所有当前数据。",includeArchives:"包含归档",includeSettings:"包含设置",includeProfiles:"包含配置文件",backupSuccess:"备份创建成功",restoreSuccess:"备份恢复成功",backupFailed:"备份失败",restoreFailed:"恢复失败",restoreNote:"恢复期间虚拟打印机将停止",githubBackup:"GitHub 备份",enabled:"已启用",cloudLoginRequired:"需要登录 Bambu Cloud。请在 配置文件 → 云配置文件 中登录以启用 GitHub 备份。",cloudLoginRequiredShort:"需要Cloud登录",githubDescription:"自动将您的配置文件同步到私有 GitHub 仓库以进行备份和版本历史记录。",repositoryUrl:"仓库 URL",personalAccessToken:"个人访问令牌",tokenSaved:"(已保存)",enterNewToken:"输入新令牌以更新",tokenHint:"具有内容读写权限的细粒度令牌",branch:"分支",manualOnly:"仅手动",hourly:"每小时",daily:"每天",weekly:"每周",includeInBackup:"包含在备份中",kProfiles:"K 配置文件",kProfilesDescription:"来自已连接打印机的压力推进校准",noPrintersConnected:"没有打印机连接",printersConnected:"{{connected}}/{{total}} 已连接",cloudProfiles:"云配置文件",cloudProfilesDescription:"来自 Bambu Cloud 的耗材、打印机和工艺预设",appSettings:"应用设置",appSettingsDescription:"Bambuddy 配置(完整数据库)",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:"历史记录",clear:"清除",date:"日期",status:"状态",commit:"提交",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:"请不要关闭此页面或导航离开。对于大型备份,此操作可能需要几分钟。",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:"关闭",scheduledBackup:"Scheduled Backups",scheduledBackupDescription:"Automatically create backup snapshots on a schedule. Output directory can be mounted to a NAS or external storage.",frequency:"Frequency",backupTime:"Time",retention:"Retention",retentionDescription:"Number of backups to keep",outputPath:"Output Path",outputPathPlaceholder:"Default: {{path}}",outputPathDescription:"Leave empty for default location",runNow:"Run Now",backupFiles:"Backup Files",noScheduledBackups:"No backups yet",deleteBackup:"Delete",deleteBackupConfirm:"Delete this backup file?",backupRunning:"Backup in progress...",scheduledBackupComplete:"Backup completed successfully",scheduledBackupFailed:"Backup failed",nextBackup:"Next backup",backupSize:"Size",utc:"UTC",defaultPathLabel:"Default:",categories:{settings:"设置",notification_providers:"通知提供者",notification_templates:"通知模板",smart_plugs:"智能插座",printers:"打印机",filaments:"耗材",maintenance_types:"维护类型",archives:"档案",projects:"项目",pending_uploads:"待上传",external_links:"外部链接",api_keys:"API 密钥"}},tags:{title:"标签",addTag:"添加标签",editTag:"编辑标签",deleteTag:"删除标签",tagName:"标签名称",tagColor:"标签颜色",noTags:"无标签",deleteConfirm:"确定要删除此标签吗?",manageTags:"管理标签"},uploadModal:{title:"上传 3MF 文件",dragDrop:"将 .3mf 文件拖放到此处",or:"或",browseFiles:"浏览文件",extractionInfo:"将从 3MF 文件元数据中自动提取打印机型号。",uploaded:"已上传",failed:"失败",uploading:"上传中...",upload:"上传",uploadFailed:"上传失败"},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:"保存中...",failureReasons:{adhesionFailure:"附着力失败",spaghettiDetached:"拉丝 / 脱落",layerShift:"层偏移",cloggedNozzle:"喷嘴堵塞",filamentRunout:"耗材用完",warping:"翘曲",stringing:"拉丝",underExtrusion:"挤出不足",powerFailure:"断电",userCancelled:"用户取消",other:"其他"},statuses:{completed:"已完成",failed:"失败",aborted:"已取消",printing:"打印中"}},kProfiles:{title:"K 值配置",noPrintersConfigured:"未配置打印机",addPrinterInSettings:"在设置中添加打印机以管理 K 值配置",noActivePrinters:"无活跃打印机",enablePrinterConnection:"启用打印机连接以查看其 K 值配置",loadingProfiles:"加载 K 值配置中...",printerOffline:"打印机离线",printerOfflineDesc:"所选打印机未连接。开启电源以查看 K 值配置。",noMatchingProfiles:"无匹配的配置",noMatchingProfilesDesc:"没有配置匹配您的搜索条件",noKProfiles:"无 K 值配置",noKProfilesDesc:"未找到 {{diameter}}mm 喷嘴的压力推进配置",createFirstProfile:"创建第一个配置",printer:"打印机",nozzle:"喷嘴",refresh:"刷新",addProfile:"添加配置",export:"导出",import:"导入",select:"选择",selectAll:"全选",delete:"删除",searchPlaceholder:"按名称或耗材搜索...",allExtruders:"所有挤出机",leftOnly:"仅左侧",rightOnly:"仅右侧",allFlow:"所有流量",hfOnly:"仅高流量",sOnly:"仅标准",sortName:"排序:名称",sortKValue:"排序:K 值",sortFilament:"排序:耗材",leftExtruder:"左挤出机",rightExtruder:"右挤出机",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:"请稍候"},deleteConfirm:{title:"删除配置",cannotUndo:"此操作无法撤销",message:'确定要从打印机删除"{{name}}"吗?'},bulkDelete:{title:"删除配置",cannotUndo:"此操作无法撤销",message:"确定要从打印机删除 {{count}} 个选中的配置吗?"},toast:{profileSaved:"K 值配置已保存",profilesSaved:"K 值配置已保存到 {{count}} 个挤出机",selectAtLeastOneExtruder:"请至少选择一个挤出机",profileDeleted:"K 值配置已删除",profilesDeleted:"已删除 {{count}} 个配置",exportedProfiles:"已导出 {{count}} 个配置",importedProfiles:"已导入 {{count}} / {{total}} 个配置",noProfilesToExport:"无可导出的配置",invalidFileFormat:"无效的文件格式",failedToParseImport:"解析导入文件失败",failedToSaveBatch:"批量保存 K 值配置失败",noteSaved:"备注已保存",failedToSaveNote:"保存备注失败"},permission:{noRead:"您没有刷新配置的权限",noCreate:"您没有添加配置的权限",noUpdate:"您没有更新 K 值配置的权限",noDelete:"您没有删除 K 值配置的权限",noExport:"您没有导出配置的权限",noImport:"您没有导入配置的权限"}},virtualPrinter:{title:"虚拟打印机",running:"运行中",stopped:"已停止",description:{default:"启用虚拟打印机,使其在 Bambu Studio 和 OrcaSlicer 中可见。发送到此打印机的文件将直接归档而不打印。",proxy:"启用代理,将切片软件流量中继到真实打印机,允许在任何网络上远程打印。"},enable:{title:"启用虚拟打印机",visibleInSlicer:'在切片软件发现中显示为"Bambuddy"',proxyingTo:"代理到 {{name}}",notActive:"未激活"},model:{title:"打印机型号",description:"选择要模拟的打印机型号。",restartWarning:"更改型号将重启虚拟打印机"},accessCode:{title:"访问码",isSet:"访问码已设置",notSet:"未设置访问码 - 需要设置才能启用",placeholder:"输入 8 位字符代码",placeholderChange:"输入新代码以更改",hint:"必须恰好 8 个字符。切片软件使用此代码进行认证。",charCount:"({{count}}/8)"},targetPrinter:{title:"目标打印机",configured:"代理目标已配置",notConfigured:"未选择目标打印机 - 代理模式需要设置",placeholder:"选择打印机...",hint:"选择要将切片软件流量代理到的打印机。打印机必须处于局域网模式。",noPrinters:"未配置打印机。请先添加打印机以使用代理模式。"},remoteInterface:{title:"网络接口覆盖",configured:"接口覆盖已激活",optional:"可选 - 当自动检测的 IP 不正确时使用(例如多网卡、Docker、VPN)",placeholder:"自动检测(默认)...",hint:"覆盖通过 SSDP 广播并在 TLS 证书中使用的 IP 地址。在 Bambuddy 有多个网络接口时很有用。"},mode:{title:"模式",archive:"归档",archiveDesc:"立即归档文件",review:"审核",reviewDesc:"归档前审核",queue:"队列",queueDesc:"归档并添加到队列",proxy:"代理",proxyDesc:"中继到真实打印机"},autoDispatch:{title:"自动派发",description:"添加到队列时自动开始打印。关闭后,打印任务等待手动派发。"},setupRequired:{title:"需要设置",description:"虚拟打印机功能需要额外的系统配置才能工作。包括端口转发、防火墙规则和平台特定设置。",readGuide:"启用前请阅读设置指南"},howItWorks:{title:"工作原理",step1:"在同一局域网中,虚拟打印机会通过发现机制自动出现在您的切片软件(Bambu Studio / OrcaSlicer)中。从其他网络,通过 IP 地址和访问码手动添加。",step2:'在归档、审核和队列模式下,使用切片软件中的"发送"按钮将 3MF 文件上传到 Bambuddy。切片软件会显示"打印成功"— 文件已存储,未打印。',step3:"在代理模式下,虚拟打印机将所有流量中继到真实打印机 — 打印会立即开始,就像直接连接一样。"},status:{title:"状态详情",printerName:"打印机名称",model:"型号",serialNumber:"序列号",mode:"模式",pendingFiles:"待处理文件",targetPrinter:"目标打印机",ftpPort:"FTP 端口",mqttPort:"MQTT 端口",ftpConnections:"FTP 连接",mqttConnections:"MQTT 连接"},toast:{updated:"虚拟打印机设置已更新",failedToUpdate:"更新设置失败",accessCodeRequired:"请先设置访问码",targetPrinterRequired:"请先选择目标打印机",bindIpRequired:"请先设置绑定 IP",accessCodeEmpty:"访问码不能为空",accessCodeLength:"访问码必须恰好 8 个字符",created:"虚拟打印机已创建",failedToCreate:"创建虚拟打印机失败",deleted:"虚拟打印机已删除",failedToDelete:"删除虚拟打印机失败"},list:{title:"虚拟打印机",add:"添加",addFirst:"添加虚拟打印机",empty:"未配置虚拟打印机。添加一个以开始使用。"},bindIp:{title:"绑定接口",placeholder:"选择接口...",hint:"此虚拟打印机绑定的网络接口。每台打印机必须唯一。"},proxy:{accessCodeHint:"在代理模式下,在切片软件中使用目标打印机的访问码。连接会透明转发到真实打印机。"},addDialog:{title:"添加虚拟打印机",name:"名称",hint:"创建后可以配置访问码、目标打印机和其他设置。",create:"创建"},deleteConfirm:{title:"删除虚拟打印机",message:'确定要删除"{{name}}"吗?这将停止此打印机的所有服务。'}},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:"不支持的文件格式"}},maintenanceDescriptions:{lubricateCarbonRods:"在碳纤维杆上涂抹润滑剂以确保顺畅运动",lubricateRails:"在线性导轨上涂抹润滑剂以确保顺畅运动",cleanNozzle:"清洁热端和喷嘴以防止堵塞",checkBelts:"检查皮带张力以确保打印精度",cleanBuildPlate:"清洁构建板以获得更好的附着力",checkExtruder:"检查挤出机齿轮磨损情况",checkCooling:"确保冷却风扇正常工作",generalInspection:"打印机综合检查",cleanCarbonRods:"清洁碳纤维杆以减少摩擦",lubricateSteelRods:"在钢杆上涂抹润滑剂以确保顺畅运动",cleanSteelRods:"清洁钢杆以减少摩擦",cleanLinearRails:"擦拭线性导轨以清除灰尘和碎屑",checkPtfeTube:"检查 PTFE 管的磨损或损坏",replaceHepaFilter:"更换 HEPA 过滤器以保证空气质量",replaceCarbonFilter:"更换活性炭过滤器",lubricateLeftNozzleRail:"润滑左喷嘴导轨(H2 系列)"},smartPlugs:{offline:"离线",admin:"管理",openPlugAdminPage:"打开插座管理页面",deleteSmartPlug:"删除智能插座",turnOnSmartPlug:"开启智能插座",turnOffSmartPlug:"关闭智能插座",turnOn:"开启",turnOff:"关闭",addSmartPlug:{scanningNetwork:"扫描网络中...",chooseEntity:"选择实体...",connectionFailed:"连接失败",searchEntities:"搜索实体...",searchPowerSensors:"搜索功率传感器...",searchEnergySensors:"搜索能量传感器...",placeholders:{plugName:"客厅插座",mqttStateOnValue:"ON、true、1",mqttSameAsPower:"与功率主题相同,或不同"}},linkedTo:"关联到:",monitorOnly:"仅监控",alerts:"警报",scheduleOn:"开启 {{time}}",scheduleOff:"关闭 {{time}}",on:"开启",off:"关闭",power:"功率",kwhToday:"今日kWh",settings:"设置",automationSettings:"自动化设置",showInSwitchbar:"在开关栏显示",quickAccessSidebar:"从侧边栏快速访问",enabled:"已启用",enableAutomation:"为此插座启用自动化",autoOn:"自动开启",autoOnDescription:"打印开始时开启",autoOff:"自动关闭",autoOffDescription:"打印完成时关闭(一次性)",autoOffPersistent:"保持启用",autoOffPersistentDescription:"在打印之间保持启用而非一次性",turnOffDelayMode:"关闭延迟模式",time:"时间",temp:"温度",delayMinutes:"延迟(分钟)",tempThreshold:"温度阈值(°C)",tempThresholdDescription:"当喷嘴冷却到此温度以下时关闭",edit:"编辑",deleteConfirm:'确定要删除"{{name}}"吗?此操作无法撤销。',turnOnConfirm:'确定要开启"{{name}}"吗?',turnOffConfirm:'确定要关闭"{{name}}"吗?这将切断连接设备的电源。',failedToTurn:'无法{{action}}"{{name}}"',unknown:"未知",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")。如果主题发布原始数值,请留空。 乘数:mW→W使用0.001,kW→W使用1000。`,mqttEnergyHint:`JSON路径从JSON负载中提取值。原始值请留空。 乘数:Wh→kWh使用0.001,MWh→kWh使用1000。`,mqttStateHint:`JSON路径从JSON负载中提取值。原始值请留空。 -ON值:表示"ON"的确切字符串。留空以自动检测(ON、true、1)。`,restControl:"Control",restOnUrl:"Turn ON URL",restOffUrl:"Turn OFF URL",restOnBody:"ON Request Body",restOffBody:"OFF Request Body",restMethod:"HTTP Method",restHeaders:"Custom Headers (JSON)",restStatusUrl:"Status URL",restStatusPath:"State JSON Path",restStatusOnValue:"ON Value",restPowerUrl:"功率URL",restPowerPath:"Power JSON Path",restPowerMultiplier:"功率乘数",restEnergyUrl:"能耗URL",restEnergyPath:"Energy JSON Path",restEnergyMultiplier:"能耗乘数",restUrlRequired:"At least one URL (ON or OFF) is required for REST plugs",restHeadersHint:'e.g. {"Authorization": "Bearer your-token"}',restBodyHint:'e.g. ON, {"state": "on"}',restStatusHint:"URL to poll for current state",restPathHint:"e.g. state or data.power.status",restPowerUrlHint:"功率数据的独立URL(留空则使用状态URL)",restEnergyUrlHint:"能耗数据的独立URL(留空则使用状态URL)",restEnergyHint:"每个值可以使用独立的URL,或回退到状态URL。使用乘数进行单位转换(例如:0.001 将 Wh 转换为 kWh)。",testConnection:"Test Connection",connectionSuccess:"Connection successful",noSwitchesInSwitchbar:"开关栏中没有开关",enableSwitchbarHint:'在设置 > 智能插座中启用"在开关栏显示"'},notifications:{providerTypes:{callmebot:"CallMeBot/WhatsApp",ntfy:"ntfy",pushover:"Pushover",telegram:"Telegram",email:"电子邮件",discord:"Discord",webhook:"Webhook",homeassistant:"Home Assistant"},providerDescriptions:{email:"SMTP 电子邮件通知",telegram:"通过 Telegram 机器人发送通知",discord:"通过 Webhook 发送到 Discord 频道",ntfy:"免费、可自托管的推送通知",pushover:"简单、可靠的推送通知",callmebot:"通过 CallMeBot 免费发送 WhatsApp 通知",webhook:"通用 HTTP POST 到任意 URL",homeassistant:"Home Assistant 仪表板中的持久通知"},lastSuccess:"上次:{{date}}",error:"错误",printer:"打印机:",allPrinters:"所有打印机",sendTestNotification:"发送测试通知",eventSettings:"事件设置",enabled:"已启用",sendFromProvider:"从此提供商发送通知",printEvents:"打印事件",printerStatus:"打印机状态",amsAlarms:"AMS 警报",amsHtAlarms:"AMS-HT 警报",printQueue:"打印队列",start:"开始",plateCheck:"热床检测",complete:"完成",failed:"失败",stopped:"已停止",progress:"进度",offline:"离线",lowFilament:"耗材不足",maintenance:"维护",amsHumidity:"AMS 湿度",amsTemp:"AMS 温度",amsHtHumidity:"AMS-HT 湿度",amsHtTemp:"AMS-HT 温度",bedCooled:"热床已冷却",firstLayer:"首层完成",quiet:"免打扰",digest:"摘要 {{time}}",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 温度超过阈值",jobAdded:"任务已添加",jobAddedDescription:"任务已添加到队列",jobAssigned:"任务已分配",jobAssignedDescription:"基于模型的任务已分配给打印机",jobStarted:"任务已开始",jobStartedDescription:"队列任务已开始打印",jobWaiting:"任务等待中",jobWaitingDescription:"任务正在等待耗材或打印机",jobSkipped:"任务已跳过",jobSkippedDescription:"任务已跳过(上一个失败)",jobFailed:"任务失败",jobFailedDescription:"任务启动失败",queueComplete:"队列已完成",queueCompleteDescription:"所有队列任务已完成",quietHours:"免打扰时段",noNotificationsDuring:"在此时段内不发送通知",editProviderToChangeQuietHours:"编辑提供商以更改免打扰时段",dailyDigest:"每日摘要",batchNotifications:"将通知汇总为每日摘要",sendAt:"发送于 {{time}}",editProviderToChangeDigestTime:"编辑提供商以更改摘要时间",edit:"编辑",deleteProvider:"删除通知提供商",deleteConfirm:'确定要删除"{{name}}"吗?此操作无法撤销。',delete:"删除",addTitle:"添加通知提供商",editTitle:"编辑通知提供商",nameLabel:"名称 *",namePlaceholder:"我的通知",providerTypeLabel:"提供商类型 *",configuration:"配置",testConfiguration:"测试配置",printerFilter:"打印机筛选",onlyFromPrinter:"仅发送来自此打印机的事件通知",quietHoursDnd:"免打扰时段",quietStart:"开始",quietEnd:"结束",dailyDigestLabel:"每日摘要",sendDigestAt:"发送摘要于",digestCollected:"事件将被收集并在此时间作为单条摘要发送",notificationEvents:"通知事件",progressPercent:"(25%、50%、75%)",bedCooledAfterPrint:"(打印完成后)",cancel:"取消",save:"保存",add:"添加",nameRequired:"名称为必填项",fieldRequired:"{{field}}为必填项",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:"消息字段名",editTemplate:"编辑模板:{{name}}",titleLabel:"标题",bodyLabel:"正文",titlePlaceholder:"通知标题...",bodyPlaceholder:"通知正文...",availableVariables:"可用变量",clickToInsert:"点击插入到正文光标位置",livePreview:"实时预览",hide:"隐藏",show:"显示",loadingPreview:"加载预览中...",enterTemplateContent:"输入模板内容以查看预览",titlePreview:"标题:",bodyPreview:"正文:",resetToDefault:"恢复默认",titleRequired:"标题为必填项",bodyRequired:"正文为必填项",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}} 条失败",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:"保存通知偏好设置失败。"}},richTextEditor:{bold:"粗体",italic:"斜体",underline:"下划线",bulletList:"无序列表",numberedList:"有序列表",alignLeft:"左对齐",alignCenter:"居中对齐",alignRight:"右对齐",addLink:"添加链接",removeLink:"移除链接"},externalLinks:{noLinksConfigured:"未配置外部链接",deleteLink:"删除链接",removeCustomIcon:"移除自定义图标",openInNewTab:"在新标签页中打开",placeholders:{linkName:"我的链接"}},keyboardShortcuts:{title:"键盘快捷键",navigation:"导航",archivesSection:"归档",kProfilesSection:"K 值配置",generalSection:"通用",shortcuts:{goToPrinters:"前往打印机",goToArchives:"前往归档",goToQueue:"前往队列",goToStats:"前往统计",goToProfiles:"前往云端配置",goToSettings:"前往设置",focusSearch:"聚焦搜索",openUploadModal:"打开上传对话框",clearSelection:"清除选择 / 取消焦点",contextMenu:"卡片右键菜单",refreshProfiles:"刷新配置",newProfile:"新建配置",exitSelectionMode:"退出选择模式",showHelp:"显示此帮助"},footer:"按 Esc 或点击外部关闭"},notificationLog:{title:"通知日志",events:{printStarted:"打印开始",printComplete:"打印完成",printFailed:"打印失败",printStopped:"打印停止",progress:"进度",printerOffline:"打印机离线",printerError:"打印机错误",lowFilament:"耗材不足",maintenanceDue:"维护到期",test:"测试"},timeAgo:{justNow:"刚刚",minutesAgo:"{{minutes}} 分钟前",hoursAgo:"{{hours}} 小时前"}},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:"恢复备份失败。请检查文件格式。"},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}} 个类别"},pendingUploads:{placeholders:{notes:"添加关于此打印的备注..."},discardUpload:"丢弃上传",archiveAllUploads:"归档所有上传",discardAllUploads:"丢弃所有上传",archive:"归档",timeAgo:{justNow:"刚刚",minutesAgo:"{{minutes}} 分钟前",hoursAgo:"{{hours}} 小时前",daysAgo:"{{days}} 天前"}},apiBrowser:{placeholders:{requestBody:"JSON 请求体...",searchEndpoints:"搜索端点..."}},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:"配置槽位"},githubBackup:{title:"GitHub 备份",history:"历史",downloadBackup:"下载备份",restoreBackup:"恢复备份",noBackupsYet:"暂无备份"},emailSettings:{placeholders:{fromName:"BamBuddy"}},tagManagement:{searchTags:"搜索标签...",renameTag:"重命名标签",deleteTag:"删除标签"},notificationTemplates:{placeholders:{title:"通知标题...",body:"通知正文..."}},batchTag:{placeholders:{newTag:"输入新标签..."}},photoGallery:{deletePhoto:"删除照片"},filamentHoverCard:{copySpoolUuid:"复制耗材 UUID"},kProfilesView:{hasNote:"有备注",copyProfile:"复制配置"},layout:{openMenu:"打开菜单",noPermissionSystemInfo:"您没有查看系统信息的权限"},dashboard:{dragToReorder:"拖动以重新排列",hideWidget:"隐藏小部件"},notificationProviderCard:{deleteNotificationProvider:"删除通知提供商"},fileManagerModal:{closeFileManager:"关闭文件管理器",sortFiles:"排序文件",goToParentFolder:"返回上级文件夹",threeView:"3D 视图"},embeddedCameraViewer:{refreshStream:"刷新流",close:"关闭",zoomOut:"缩小",resetZoom:"重置缩放",zoomIn:"放大",dragToResize:"拖动调整大小"},timelapseViewer:{skipBack5s:"后退 5 秒",skipForward5s:"前进 5 秒"},notificationProviders:{descriptions:{email:"SMTP 邮件通知",telegram:"通过 Telegram 机器人通知",discord:"通过 Webhook 发送到 Discord 频道",ntfy:"免费、可自托管的推送通知",pushover:"简单、可靠的推送通知",callmebot:"通过 CallMeBot 的免费 WhatsApp 通知",webhook:"通用 HTTP POST 到任意 URL"}},logViewer:{searchPlaceholder:"搜索消息或日志名称...",noLogEntries:"未找到日志条目"},switchbarPopover:{noSwitchesInSwitchbar:"切换栏中没有开关"},projectPageModal:{placeholders:{title:"标题",designer:"设计师",license:"许可证",description:"输入描述...",profileTitle:"配置标题",profileDescription:"配置描述..."}},spoolmanSettings:{},time:{unknown:"-",waiting:"等待中",justNow:"刚刚",now:"现在",minsAgo:"{{count}} 分钟前",inMins:"{{count}} 分钟后",hoursAgo:"{{count}} 小时前",inHours:"{{count}} 小时后",daysAgo:"{{count}} 天前",inDays:"{{count}} 天后"},spoolbuddy:{nav:{dashboard:"仪表板",ams:"AMS",inventory:"库存",writeTag:"写入",settings:"设置"},status:{nfcReady:"NFC 就绪",nfcOff:"NFC 关闭",offline:"离线",online:"在线",noPrinters:"无打印机",deviceOffline:"设备离线",waitingConnection:"等待设备连接...",systemReady:"系统就绪",status:"状态"},dashboard:{readyToScan:"准备扫描",idleMessage:"将耗材放在秤上以识别",nfcHint:"NFC 标签将自动读取",device:"设备",syncWeight:"同步重量",weightSynced:"已同步!",unknownTag:"未知标签",newTag:"检测到新标签",onScale:"在秤上",linkSpool:"链接到耗材",linkTagTitle:"将标签链接到耗材",linkTag:"链接标签",selectSpool:"选择要链接此标签的耗材:",noUntagged:"未找到没有标签的耗材",tagDetected:"检测到标签",noTag:"无标签",tagId:"标签",grossWeight:"毛重",spoolSize:"耗材盘尺寸",close:"关闭",currentSpool:"当前耗材"},modal:{spoolDetected:"检测到耗材",assignToAms:"分配到 AMS",syncWeight:"同步重量",weightSynced:"已同步!",syncing:"同步中...",newTagDetected:"检测到新标签",addToInventory:"添加到库存",assignToAmsTitle:"分配到 AMS",selectSlot:"选择槽位",assign:"分配",assigning:"分配中...",assignSuccess:"已分配!",assignError:"分配耗材失败。请重试。",noPrinterSelected:"选择打印机...",noAmsDetected:"此打印机未检测到 AMS",slot:"槽位"},weight:{noReading:"无读数",stable:"稳定",measuring:"测量中...",tare:"去皮",calibrate:"校准"},spool:{remaining:"剩余",material:"材料",brand:"品牌",color:"颜色",coreWeight:"空盘",labelWeight:"标签",scaleWeight:"秤重",netWeight:"净重",lastUsed:"上次使用"},ams:{noData:"未检测到 AMS",connectAms:"连接 AMS 以查看耗材槽位",noPrinter:"未选择打印机",selectPrinter:"从顶部栏选择打印机",printerDisconnected:"打印机已断开",humidity:"湿度",level:"余量",active:"活跃",slot:"槽位",empty:"空"},inventory:{search:"搜索耗材...",empty:"库存中没有耗材",noResults:"没有匹配的耗材",spools:"个耗材",addSpool:"添加耗材"},settings:{tabDevice:"设备",tabDisplay:"显示",tabScale:"秤",tabUpdates:"更新",nfcReader:"NFC 读卡器",type:"类型",connection:"连接",notConnected:"不适用",deviceInfo:"设备信息",hostname:"主机",uptime:"运行时间",brightness:"亮度",saved:"已保存",noBacklight:"未检测到 DSI 背光。亮度控制需要 DSI 显示屏。",screenBlank:"屏幕熄灭超时",screenBlankDesc:"不活动后屏幕关闭。触摸唤醒。",displayNote:"亮度作为软件滤镜应用。",scaleCalibration:"秤校准",currentWeight:"当前重量",tareOffset:"去皮",calFactor:"系数",knownWeight:"已知重量",calStep1:"移除秤上所有物品并按设置零点。",calStep2:"将已知重量放在秤上。",setZero:"设置零点",calibrateNow:"校准",calibrated:"已校准",tareSet:"去皮命令已发送。等待设备响应...",tareFailed:"发送去皮命令失败",zeroSet:"零点已设置。将已知重量放在秤上。",calibrationDone:"校准完成!",calibrationFailed:"校准失败",lastCalibrated:"上次校准",stable:"稳定",settling:"稳定中...",firmware:"固件",scale:"秤",noDevice:"未找到 SpoolBuddy 设备",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:"创建耗材失败"},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:"External URL is not set.",externalUrlHint:"The ML API fetches the camera snapshot by URL. Set the External URL in General settings so the ML API container can reach Bambuddy.",perPrinterTitle:"监控的打印机",perPrinterHint:"选择检测服务要监视哪些打印机。",monitorAll:"监控所有已连接的打印机",statusTitle:"状态",serviceRunning:"服务运行中",thresholds:"低 / 高阈值",activePrinters:"活动打印",noActivePrints:"当前没有正在进行的打印。",historyTitle:"最近检测",noHistory:"暂无检测记录。"}},Yue={en:{translation:que},de:{translation:$ue},fr:{translation:Vue},ja:{translation:Gue},it:{translation:Wue},"pt-BR":{translation:Kue},"zh-CN":{translation:Xue}};uo.use(GY).use(wue).init({resources:Yue,fallbackLng:"en",supportedLngs:["en","de","fr","ja","it","pt-BR","zh-CN"],detection:{order:["localStorage","navigator","htmlTag"],lookupLocalStorage:"bambutrack_language",caches:["localStorage"]},interpolation:{escapeValue:!1},react:{useSuspense:!1}});const nH=[{code:"en",name:"English",nativeName:"English"},{code:"de",name:"German",nativeName:"Deutsch"},{code:"fr",name:"French",nativeName:"Français"},{code:"ja",name:"Japanese",nativeName:"日本語"},{code:"it",name:"Italian",nativeName:"Italiano"},{code:"pt-BR",name:"Portuguese (Brazil)",nativeName:"Português (Brasil)"},{code:"zh-CN",name:"Chinese (Simplified)",nativeName:"简体中文"}];var rH="popstate";function Que(t={}){function e(r,i){let{pathname:s,search:o,hash:l}=r.location;return z3("",{pathname:s,search:o,hash:l},i.state&&i.state.usr||null,i.state&&i.state.key||"default")}function n(r,i){return typeof i=="string"?i:W0(i)}return Jue(e,n,null,t)}function Pa(t,e){if(t===!1||t===null||typeof t>"u")throw new Error(e)}function rc(t,e){if(!t){typeof console<"u"&&console.warn(e);try{throw new Error(e)}catch{}}}function Zue(){return Math.random().toString(36).substring(2,10)}function aH(t,e){return{usr:t.state,key:t.key,idx:e}}function z3(t,e,n=null,r){return{pathname:typeof t=="string"?t:t.pathname,search:"",hash:"",...typeof e=="string"?ly(e):e,state:n,key:e&&e.key||r||Zue()}}function W0({pathname:t="/",search:e="",hash:n=""}){return e&&e!=="?"&&(t+=e.charAt(0)==="?"?e:"?"+e),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function ly(t){let e={};if(t){let n=t.indexOf("#");n>=0&&(e.hash=t.substring(n),t=t.substring(0,n));let r=t.indexOf("?");r>=0&&(e.search=t.substring(r),t=t.substring(0,r)),t&&(e.pathname=t)}return e}function Jue(t,e,n,r={}){let{window:i=document.defaultView,v5Compat:s=!1}=r,o=i.history,l="POP",c=null,d=u();d==null&&(d=0,o.replaceState({...o.state,idx:d},""));function u(){return(o.state||{idx:null}).idx}function m(){l="POP";let b=u(),g=b==null?null:b-d;d=b,c&&c({action:l,location:v.location,delta:g})}function p(b,g){l="PUSH";let _=z3(v.location,b,g);d=u()+1;let C=aH(_,d),P=v.createHref(_);try{o.pushState(C,"",P)}catch(N){if(N instanceof DOMException&&N.name==="DataCloneError")throw N;i.location.assign(P)}s&&c&&c({action:l,location:v.location,delta:1})}function f(b,g){l="REPLACE";let _=z3(v.location,b,g);d=u();let C=aH(_,d),P=v.createHref(_);o.replaceState(C,"",P),s&&c&&c({action:l,location:v.location,delta:0})}function x(b){return eme(b)}let v={get action(){return l},get location(){return t(i,o)},listen(b){if(c)throw new Error("A history only accepts one active listener");return i.addEventListener(rH,m),c=b,()=>{i.removeEventListener(rH,m),c=null}},createHref(b){return e(i,b)},createURL:x,encodeLocation(b){let g=x(b);return{pathname:g.pathname,search:g.search,hash:g.hash}},push:p,replace:f,go(b){return o.go(b)}};return v}function eme(t,e=!1){let n="http://localhost";typeof window<"u"&&(n=window.location.origin!=="null"?window.location.origin:window.location.href),Pa(n,"No window.location.(origin|href) available to create URL");let r=typeof t=="string"?t:W0(t);return r=r.replace(/ $/,"%20"),!e&&r.startsWith("//")&&(r=n+r),new URL(r,n)}function WY(t,e,n="/"){return tme(t,e,n,!1)}function tme(t,e,n,r){let i=typeof e=="string"?ly(e):e,s=cm(i.pathname||"/",n);if(s==null)return null;let o=KY(t);nme(o);let l=null;for(let c=0;l==null&&c{let u={relativePath:d===void 0?o.path||"":d,caseSensitive:o.caseSensitive===!0,childrenIndex:l,route:o};if(u.relativePath.startsWith("/")){if(!u.relativePath.startsWith(r)&&c)return;Pa(u.relativePath.startsWith(r),`Absolute route path "${u.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),u.relativePath=u.relativePath.slice(r.length)}let m=Ju([r,u.relativePath]),p=n.concat(u);o.children&&o.children.length>0&&(Pa(o.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${m}".`),KY(o.children,e,p,m,c)),!(o.path==null&&!o.index)&&e.push({path:m,score:cme(m,o.index),routesMeta:p})};return t.forEach((o,l)=>{if(o.path===""||!o.path?.includes("?"))s(o,l);else for(let c of XY(o.path))s(o,l,!0,c)}),e}function XY(t){let e=t.split("/");if(e.length===0)return[];let[n,...r]=e,i=n.endsWith("?"),s=n.replace(/\?$/,"");if(r.length===0)return i?[s,""]:[s];let o=XY(r.join("/")),l=[];return l.push(...o.map(c=>c===""?s:[s,c].join("/"))),i&&l.push(...o),l.map(c=>t.startsWith("/")&&c===""?"/":c)}function nme(t){t.sort((e,n)=>e.score!==n.score?n.score-e.score:dme(e.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}var rme=/^:[\w-]+$/,ame=3,ime=2,sme=1,ome=10,lme=-2,iH=t=>t==="*";function cme(t,e){let n=t.split("/"),r=n.length;return n.some(iH)&&(r+=lme),e&&(r+=ime),n.filter(i=>!iH(i)).reduce((i,s)=>i+(rme.test(s)?ame:s===""?sme:ome),r)}function dme(t,e){return t.length===e.length&&t.slice(0,-1).every((r,i)=>r===e[i])?t[t.length-1]-e[e.length-1]:0}function ume(t,e,n=!1){let{routesMeta:r}=t,i={},s="/",o=[];for(let l=0;l{if(u==="*"){let x=l[p]||"";o=s.slice(0,s.length-x.length).replace(/(.)\/+$/,"$1")}const f=l[p];return m&&!f?d[u]=void 0:d[u]=(f||"").replace(/%2F/g,"/"),d},{}),pathname:s,pathnameBase:o,pattern:t}}function mme(t,e=!1,n=!0){rc(t==="*"||!t.endsWith("*")||t.endsWith("/*"),`Route path "${t}" will be treated as if it were "${t.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${t.replace(/\*$/,"/*")}".`);let r=[],i="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(o,l,c)=>(r.push({paramName:l,isOptional:c!=null}),c?"/?([^\\/]+)?":"/([^\\/]+)")).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return t.endsWith("*")?(r.push({paramName:"*"}),i+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?i+="\\/*$":t!==""&&t!=="/"&&(i+="(?:(?=\\/|$))"),[new RegExp(i,e?void 0:"i"),r]}function hme(t){try{return t.split("/").map(e=>decodeURIComponent(e).replace(/\//g,"%2F")).join("/")}catch(e){return rc(!1,`The URL path "${t}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${e}).`),t}}function cm(t,e){if(e==="/")return t;if(!t.toLowerCase().startsWith(e.toLowerCase()))return null;let n=e.endsWith("/")?e.length-1:e.length,r=t.charAt(n);return r&&r!=="/"?null:t.slice(n)||"/"}var pme=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function fme(t,e="/"){let{pathname:n,search:r="",hash:i=""}=typeof t=="string"?ly(t):t,s;return n?(n=n.replace(/\/\/+/g,"/"),n.startsWith("/")?s=sH(n.substring(1),"/"):s=sH(n,e)):s=e,{pathname:s,search:xme(r),hash:yme(i)}}function sH(t,e){let n=e.replace(/\/+$/,"").split("/");return t.split("/").forEach(i=>{i===".."?n.length>1&&n.pop():i!=="."&&n.push(i)}),n.length>1?n.join("/"):"/"}function yM(t,e,n,r){return`Cannot include a '${t}' character in a manually specified \`to.${e}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function gme(t){return t.filter((e,n)=>n===0||e.route.path&&e.route.path.length>0)}function oO(t){let e=gme(t);return e.map((n,r)=>r===e.length-1?n.pathname:n.pathnameBase)}function lO(t,e,n,r=!1){let i;typeof t=="string"?i=ly(t):(i={...t},Pa(!i.pathname||!i.pathname.includes("?"),yM("?","pathname","search",i)),Pa(!i.pathname||!i.pathname.includes("#"),yM("#","pathname","hash",i)),Pa(!i.search||!i.search.includes("#"),yM("#","search","hash",i)));let s=t===""||i.pathname==="",o=s?"/":i.pathname,l;if(o==null)l=n;else{let m=e.length-1;if(!r&&o.startsWith("..")){let p=o.split("/");for(;p[0]==="..";)p.shift(),m-=1;i.pathname=p.join("/")}l=m>=0?e[m]:"/"}let c=fme(i,l),d=o&&o!=="/"&&o.endsWith("/"),u=(s||o===".")&&n.endsWith("/");return!c.pathname.endsWith("/")&&(d||u)&&(c.pathname+="/"),c}var Ju=t=>t.join("/").replace(/\/\/+/g,"/"),bme=t=>t.replace(/\/+$/,"").replace(/^\/*/,"/"),xme=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,yme=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t,vme=class{constructor(t,e,n,r=!1){this.status=t,this.statusText=e||"",this.internal=r,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}};function wme(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}function Sme(t){return t.map(e=>e.route.path).filter(Boolean).join("/").replace(/\/\/*/g,"/")||"/"}var YY=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function QY(t,e){let n=t;if(typeof n!="string"||!pme.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let r=n,i=!1;if(YY)try{let s=new URL(window.location.href),o=n.startsWith("//")?new URL(s.protocol+n):new URL(n),l=cm(o.pathname,e);o.origin===s.origin&&l!=null?n=l+o.search+o.hash:i=!0}catch{rc(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:r,isExternal:i,to:n}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var ZY=["POST","PUT","PATCH","DELETE"];new Set(ZY);var _me=["GET",...ZY];new Set(_me);var cy=w.createContext(null);cy.displayName="DataRouter";var DP=w.createContext(null);DP.displayName="DataRouterState";var kme=w.createContext(!1),JY=w.createContext({isTransitioning:!1});JY.displayName="ViewTransition";var Nme=w.createContext(new Map);Nme.displayName="Fetchers";var Cme=w.createContext(null);Cme.displayName="Await";var gl=w.createContext(null);gl.displayName="Navigation";var Bw=w.createContext(null);Bw.displayName="Location";var hc=w.createContext({outlet:null,matches:[],isDataRoute:!1});hc.displayName="Route";var cO=w.createContext(null);cO.displayName="RouteError";var eQ="REACT_ROUTER_ERROR",Pme="REDIRECT",Tme="ROUTE_ERROR_RESPONSE";function Ame(t){if(t.startsWith(`${eQ}:${Pme}:{`))try{let e=JSON.parse(t.slice(28));if(typeof e=="object"&&e&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.location=="string"&&typeof e.reloadDocument=="boolean"&&typeof e.replace=="boolean")return e}catch{}}function jme(t){if(t.startsWith(`${eQ}:${Tme}:{`))try{let e=JSON.parse(t.slice(40));if(typeof e=="object"&&e&&typeof e.status=="number"&&typeof e.statusText=="string")return new vme(e.status,e.statusText,e.data)}catch{}}function Mme(t,{relative:e}={}){Pa(dy(),"useHref() may be used only in the context of a component.");let{basename:n,navigator:r}=w.useContext(gl),{hash:i,pathname:s,search:o}=qw(t,{relative:e}),l=s;return n!=="/"&&(l=s==="/"?n:Ju([n,s])),r.createHref({pathname:l,search:o,hash:i})}function dy(){return w.useContext(Bw)!=null}function Kc(){return Pa(dy(),"useLocation() may be used only in the context of a component."),w.useContext(Bw).location}var tQ="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function nQ(t){w.useContext(gl).static||w.useLayoutEffect(t)}function Lo(){let{isDataRoute:t}=w.useContext(hc);return t?Vme():Eme()}function Eme(){Pa(dy(),"useNavigate() may be used only in the context of a component.");let t=w.useContext(cy),{basename:e,navigator:n}=w.useContext(gl),{matches:r}=w.useContext(hc),{pathname:i}=Kc(),s=JSON.stringify(oO(r)),o=w.useRef(!1);return nQ(()=>{o.current=!0}),w.useCallback((c,d={})=>{if(rc(o.current,tQ),!o.current)return;if(typeof c=="number"){n.go(c);return}let u=lO(c,JSON.parse(s),i,d.relative==="path");t==null&&e!=="/"&&(u.pathname=u.pathname==="/"?e:Ju([e,u.pathname])),(d.replace?n.replace:n.push)(u,d.state,d)},[e,n,s,i,t])}var rQ=w.createContext(null);function uy(){return w.useContext(rQ)}function Dme(t){let e=w.useContext(hc).outlet;return w.useMemo(()=>e&&w.createElement(rQ.Provider,{value:t},e),[e,t])}function Hw(){let{matches:t}=w.useContext(hc),e=t[t.length-1];return e?e.params:{}}function qw(t,{relative:e}={}){let{matches:n}=w.useContext(hc),{pathname:r}=Kc(),i=JSON.stringify(oO(n));return w.useMemo(()=>lO(t,JSON.parse(i),r,e==="path"),[t,i,r,e])}function Fme(t,e){return aQ(t,e)}function aQ(t,e,n,r,i){Pa(dy(),"useRoutes() may be used only in the context of a component.");let{navigator:s}=w.useContext(gl),{matches:o}=w.useContext(hc),l=o[o.length-1],c=l?l.params:{},d=l?l.pathname:"/",u=l?l.pathnameBase:"/",m=l&&l.route;{let _=m&&m.path||"";sQ(d,!m||_.endsWith("*")||_.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${d}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. +ON值:表示"ON"的确切字符串。留空以自动检测(ON、true、1)。`,restControl:"Control",restOnUrl:"Turn ON URL",restOffUrl:"Turn OFF URL",restOnBody:"ON Request Body",restOffBody:"OFF Request Body",restMethod:"HTTP Method",restHeaders:"Custom Headers (JSON)",restStatusUrl:"Status URL",restStatusPath:"State JSON Path",restStatusOnValue:"ON Value",restPowerUrl:"功率URL",restPowerPath:"Power JSON Path",restPowerMultiplier:"功率乘数",restEnergyUrl:"能耗URL",restEnergyPath:"Energy JSON Path",restEnergyMultiplier:"能耗乘数",restUrlRequired:"At least one URL (ON or OFF) is required for REST plugs",restHeadersHint:'e.g. {"Authorization": "Bearer your-token"}',restBodyHint:'e.g. ON, {"state": "on"}',restStatusHint:"URL to poll for current state",restPathHint:"e.g. state or data.power.status",restPowerUrlHint:"功率数据的独立URL(留空则使用状态URL)",restEnergyUrlHint:"能耗数据的独立URL(留空则使用状态URL)",restEnergyHint:"每个值可以使用独立的URL,或回退到状态URL。使用乘数进行单位转换(例如:0.001 将 Wh 转换为 kWh)。",testConnection:"Test Connection",connectionSuccess:"Connection successful",noSwitchesInSwitchbar:"开关栏中没有开关",enableSwitchbarHint:'在设置 > 智能插座中启用"在开关栏显示"'},notifications:{providerTypes:{callmebot:"CallMeBot/WhatsApp",ntfy:"ntfy",pushover:"Pushover",telegram:"Telegram",email:"电子邮件",discord:"Discord",webhook:"Webhook",homeassistant:"Home Assistant"},providerDescriptions:{email:"SMTP 电子邮件通知",telegram:"通过 Telegram 机器人发送通知",discord:"通过 Webhook 发送到 Discord 频道",ntfy:"免费、可自托管的推送通知",pushover:"简单、可靠的推送通知",callmebot:"通过 CallMeBot 免费发送 WhatsApp 通知",webhook:"通用 HTTP POST 到任意 URL",homeassistant:"Home Assistant 仪表板中的持久通知"},lastSuccess:"上次:{{date}}",error:"错误",printer:"打印机:",allPrinters:"所有打印机",sendTestNotification:"发送测试通知",eventSettings:"事件设置",enabled:"已启用",sendFromProvider:"从此提供商发送通知",printEvents:"打印事件",printerStatus:"打印机状态",amsAlarms:"AMS 警报",amsHtAlarms:"AMS-HT 警报",printQueue:"打印队列",start:"开始",plateCheck:"热床检测",complete:"完成",failed:"失败",stopped:"已停止",progress:"进度",offline:"离线",lowFilament:"耗材不足",maintenance:"维护",amsHumidity:"AMS 湿度",amsTemp:"AMS 温度",amsHtHumidity:"AMS-HT 湿度",amsHtTemp:"AMS-HT 温度",bedCooled:"热床已冷却",firstLayer:"首层完成",quiet:"免打扰",digest:"摘要 {{time}}",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 温度超过阈值",jobAdded:"任务已添加",jobAddedDescription:"任务已添加到队列",jobAssigned:"任务已分配",jobAssignedDescription:"基于模型的任务已分配给打印机",jobStarted:"任务已开始",jobStartedDescription:"队列任务已开始打印",jobWaiting:"任务等待中",jobWaitingDescription:"任务正在等待耗材或打印机",jobSkipped:"任务已跳过",jobSkippedDescription:"任务已跳过(上一个失败)",jobFailed:"任务失败",jobFailedDescription:"任务启动失败",queueComplete:"队列已完成",queueCompleteDescription:"所有队列任务已完成",quietHours:"免打扰时段",noNotificationsDuring:"在此时段内不发送通知",editProviderToChangeQuietHours:"编辑提供商以更改免打扰时段",dailyDigest:"每日摘要",batchNotifications:"将通知汇总为每日摘要",sendAt:"发送于 {{time}}",editProviderToChangeDigestTime:"编辑提供商以更改摘要时间",edit:"编辑",deleteProvider:"删除通知提供商",deleteConfirm:'确定要删除"{{name}}"吗?此操作无法撤销。',delete:"删除",addTitle:"添加通知提供商",editTitle:"编辑通知提供商",nameLabel:"名称 *",namePlaceholder:"我的通知",providerTypeLabel:"提供商类型 *",configuration:"配置",testConfiguration:"测试配置",printerFilter:"打印机筛选",onlyFromPrinter:"仅发送来自此打印机的事件通知",quietHoursDnd:"免打扰时段",quietStart:"开始",quietEnd:"结束",dailyDigestLabel:"每日摘要",sendDigestAt:"发送摘要于",digestCollected:"事件将被收集并在此时间作为单条摘要发送",notificationEvents:"通知事件",progressPercent:"(25%、50%、75%)",bedCooledAfterPrint:"(打印完成后)",cancel:"取消",save:"保存",add:"添加",nameRequired:"名称为必填项",fieldRequired:"{{field}}为必填项",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:"消息字段名",editTemplate:"编辑模板:{{name}}",titleLabel:"标题",bodyLabel:"正文",titlePlaceholder:"通知标题...",bodyPlaceholder:"通知正文...",availableVariables:"可用变量",clickToInsert:"点击插入到正文光标位置",livePreview:"实时预览",hide:"隐藏",show:"显示",loadingPreview:"加载预览中...",enterTemplateContent:"输入模板内容以查看预览",titlePreview:"标题:",bodyPreview:"正文:",resetToDefault:"恢复默认",titleRequired:"标题为必填项",bodyRequired:"正文为必填项",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}} 条失败",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:"保存通知偏好设置失败。"}},richTextEditor:{bold:"粗体",italic:"斜体",underline:"下划线",bulletList:"无序列表",numberedList:"有序列表",alignLeft:"左对齐",alignCenter:"居中对齐",alignRight:"右对齐",addLink:"添加链接",removeLink:"移除链接"},externalLinks:{noLinksConfigured:"未配置外部链接",deleteLink:"删除链接",removeCustomIcon:"移除自定义图标",openInNewTab:"在新标签页中打开",placeholders:{linkName:"我的链接"}},keyboardShortcuts:{title:"键盘快捷键",navigation:"导航",archivesSection:"归档",kProfilesSection:"K 值配置",generalSection:"通用",shortcuts:{goToPrinters:"前往打印机",goToArchives:"前往归档",goToQueue:"前往队列",goToStats:"前往统计",goToProfiles:"前往云端配置",goToSettings:"前往设置",focusSearch:"聚焦搜索",openUploadModal:"打开上传对话框",clearSelection:"清除选择 / 取消焦点",contextMenu:"卡片右键菜单",refreshProfiles:"刷新配置",newProfile:"新建配置",exitSelectionMode:"退出选择模式",showHelp:"显示此帮助"},footer:"按 Esc 或点击外部关闭"},notificationLog:{title:"通知日志",events:{printStarted:"打印开始",printComplete:"打印完成",printFailed:"打印失败",printStopped:"打印停止",progress:"进度",printerOffline:"打印机离线",printerError:"打印机错误",lowFilament:"耗材不足",maintenanceDue:"维护到期",test:"测试"},timeAgo:{justNow:"刚刚",minutesAgo:"{{minutes}} 分钟前",hoursAgo:"{{hours}} 小时前"}},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:"恢复备份失败。请检查文件格式。"},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}} 个类别"},pendingUploads:{placeholders:{notes:"添加关于此打印的备注..."},discardUpload:"丢弃上传",archiveAllUploads:"归档所有上传",discardAllUploads:"丢弃所有上传",archive:"归档",timeAgo:{justNow:"刚刚",minutesAgo:"{{minutes}} 分钟前",hoursAgo:"{{hours}} 小时前",daysAgo:"{{days}} 天前"}},apiBrowser:{placeholders:{requestBody:"JSON 请求体...",searchEndpoints:"搜索端点..."}},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:"配置槽位"},githubBackup:{title:"GitHub 备份",history:"历史",downloadBackup:"下载备份",restoreBackup:"恢复备份",noBackupsYet:"暂无备份"},emailSettings:{placeholders:{fromName:"BamBuddy"}},tagManagement:{searchTags:"搜索标签...",renameTag:"重命名标签",deleteTag:"删除标签"},notificationTemplates:{placeholders:{title:"通知标题...",body:"通知正文..."}},batchTag:{placeholders:{newTag:"输入新标签..."}},photoGallery:{deletePhoto:"删除照片"},filamentHoverCard:{copySpoolUuid:"复制耗材 UUID"},kProfilesView:{hasNote:"有备注",copyProfile:"复制配置"},layout:{openMenu:"打开菜单",noPermissionSystemInfo:"您没有查看系统信息的权限"},dashboard:{dragToReorder:"拖动以重新排列",hideWidget:"隐藏小部件"},notificationProviderCard:{deleteNotificationProvider:"删除通知提供商"},fileManagerModal:{closeFileManager:"关闭文件管理器",sortFiles:"排序文件",goToParentFolder:"返回上级文件夹",threeView:"3D 视图"},embeddedCameraViewer:{refreshStream:"刷新流",close:"关闭",zoomOut:"缩小",resetZoom:"重置缩放",zoomIn:"放大",dragToResize:"拖动调整大小"},timelapseViewer:{skipBack5s:"后退 5 秒",skipForward5s:"前进 5 秒"},notificationProviders:{descriptions:{email:"SMTP 邮件通知",telegram:"通过 Telegram 机器人通知",discord:"通过 Webhook 发送到 Discord 频道",ntfy:"免费、可自托管的推送通知",pushover:"简单、可靠的推送通知",callmebot:"通过 CallMeBot 的免费 WhatsApp 通知",webhook:"通用 HTTP POST 到任意 URL"}},logViewer:{searchPlaceholder:"搜索消息或日志名称...",noLogEntries:"未找到日志条目"},switchbarPopover:{noSwitchesInSwitchbar:"切换栏中没有开关"},projectPageModal:{placeholders:{title:"标题",designer:"设计师",license:"许可证",description:"输入描述...",profileTitle:"配置标题",profileDescription:"配置描述..."}},spoolmanSettings:{},time:{unknown:"-",waiting:"等待中",justNow:"刚刚",now:"现在",minsAgo:"{{count}} 分钟前",inMins:"{{count}} 分钟后",hoursAgo:"{{count}} 小时前",inHours:"{{count}} 小时后",daysAgo:"{{count}} 天前",inDays:"{{count}} 天后"},spoolbuddy:{nav:{dashboard:"仪表板",ams:"AMS",inventory:"库存",writeTag:"写入",settings:"设置"},status:{nfcReady:"NFC 就绪",nfcOff:"NFC 关闭",offline:"离线",online:"在线",noPrinters:"无打印机",deviceOffline:"设备离线",waitingConnection:"等待设备连接...",systemReady:"系统就绪",status:"状态"},dashboard:{readyToScan:"准备扫描",idleMessage:"将耗材放在秤上以识别",nfcHint:"NFC 标签将自动读取",device:"设备",syncWeight:"同步重量",weightSynced:"已同步!",unknownTag:"未知标签",newTag:"检测到新标签",onScale:"在秤上",linkSpool:"链接到耗材",linkTagTitle:"将标签链接到耗材",linkTag:"链接标签",selectSpool:"选择要链接此标签的耗材:",noUntagged:"未找到没有标签的耗材",tagDetected:"检测到标签",noTag:"无标签",tagId:"标签",grossWeight:"毛重",spoolSize:"耗材盘尺寸",close:"关闭",currentSpool:"当前耗材"},modal:{spoolDetected:"检测到耗材",assignToAms:"分配到 AMS",syncWeight:"同步重量",weightSynced:"已同步!",syncing:"同步中...",newTagDetected:"检测到新标签",addToInventory:"添加到库存",assignToAmsTitle:"分配到 AMS",selectSlot:"选择槽位",assign:"分配",assigning:"分配中...",assignSuccess:"已分配!",assignError:"分配耗材失败。请重试。",noPrinterSelected:"选择打印机...",noAmsDetected:"此打印机未检测到 AMS",slot:"槽位"},weight:{noReading:"无读数",stable:"稳定",measuring:"测量中...",tare:"去皮",calibrate:"校准"},spool:{remaining:"剩余",material:"材料",brand:"品牌",color:"颜色",coreWeight:"空盘",labelWeight:"标签",scaleWeight:"秤重",netWeight:"净重",lastUsed:"上次使用"},ams:{noData:"未检测到 AMS",connectAms:"连接 AMS 以查看耗材槽位",noPrinter:"未选择打印机",selectPrinter:"从顶部栏选择打印机",printerDisconnected:"打印机已断开",humidity:"湿度",level:"余量",active:"活跃",slot:"槽位",empty:"空"},inventory:{search:"搜索耗材...",empty:"库存中没有耗材",noResults:"没有匹配的耗材",spools:"个耗材",addSpool:"添加耗材"},settings:{tabDevice:"设备",tabDisplay:"显示",tabScale:"秤",tabUpdates:"更新",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 为必填项。",brightness:"亮度",saved:"已保存",noBacklight:"未检测到 DSI 背光。亮度控制需要 DSI 显示屏。",screenBlank:"屏幕熄灭超时",screenBlankDesc:"不活动后屏幕关闭。触摸唤醒。",displayNote:"亮度作为软件滤镜应用。",scaleCalibration:"秤校准",currentWeight:"当前重量",tareOffset:"去皮",calFactor:"系数",knownWeight:"已知重量",calStep1:"移除秤上所有物品并按设置零点。",calStep2:"将已知重量放在秤上。",setZero:"设置零点",calibrateNow:"校准",calibrated:"已校准",tareSet:"去皮命令已发送。等待设备响应...",tareFailed:"发送去皮命令失败",zeroSet:"零点已设置。将已知重量放在秤上。",calibrationDone:"校准完成!",calibrationFailed:"校准失败",lastCalibrated:"上次校准",stable:"稳定",settling:"稳定中...",firmware:"固件",scale:"秤",noDevice:"未找到 SpoolBuddy 设备",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:"创建耗材失败"},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:"External URL is not set.",externalUrlHint:"The ML API fetches the camera snapshot by URL. Set the External URL in General settings so the ML API container can reach Bambuddy.",perPrinterTitle:"监控的打印机",perPrinterHint:"选择检测服务要监视哪些打印机。",monitorAll:"监控所有已连接的打印机",statusTitle:"状态",serviceRunning:"服务运行中",thresholds:"低 / 高阈值",activePrinters:"活动打印",noActivePrints:"当前没有正在进行的打印。",historyTitle:"最近检测",noHistory:"暂无检测记录。"}},Yue={nav:{printers:"印表機",archives:"歸檔",queue:"佇列",stats:"統計",profiles:"設定檔案",maintenance:"維護",projects:"專案",inventory:"耗材",files:"檔案管理器",notifications:"通知",settings:"設定",system:"系統",collapseSidebar:"收起側邊欄",expandSidebar:"展開側邊欄",update:"更新",updateAvailable:"有可用更新:v{{version}}",updateAvailableBanner:"版本 {{version}} 已發布!",viewUpdate:"檢視更新",viewOnGithub:"在 GitHub 上檢視",keyboardShortcuts:"鍵盤快捷鍵 (?)",switchToLight:"切換到淺色模式",switchToDark:"切換到深色模式",smartSwitches:"智慧開關",logout:"登出"},common:{save:"儲存",saving:"儲存中...",cancel:"取消",delete:"刪除",edit:"編輯",add:"新增",close:"關閉",confirm:"確認",loading:"載入中...",error:"錯誤",success:"成功",warning:"警告",enabled:"已啟用",disabled:"已停用",yes:"是",no:"否",on:"開",off:"關",all:"全部",none:"無",search:"搜尋",filter:"篩選",sort:"排序",refresh:"重新整理",download:"下載",upload:"上傳",uploading:"上傳中...",uploadFailed:"上傳失敗",actions:"操作",status:"狀態",name:"名稱",description:"描述",date:"日期",time:"時間",hours:"小時",minutes:"分鐘",seconds:"秒",days:"天",enable:"啟用",disable:"停用",permissions:"權限",noPrinters:"未設定印表機",noData:"尚無資料",linkNotFound:"未找到連結",required:"必填",optional:"可選",dismiss:"關閉",apply:"套用",reset:"重設",export:"匯出",import:"匯入",clear:"清除",selectAll:"全選",deselectAll:"取消全選",noChange:"— 不更改 —",unchanged:"未更改",unassigned:"未分配",unknown:"未知",unknownError:"未知錯誤",today:"今天",tomorrow:"明天",asap:"儘快",overdue:"已逾期",now:"現在",collapse:"收起",expand:"展開",viewArchive:"檢視歸檔",viewInFileManager:"在檔案管理器中檢視",addedBy:"由 {{username}} 新增",prints:"次列印",more:"還有 {{count}} 個",ascending:"升序",descending:"降序",back:"返回",copy:"複製",copied:"已複製!",printer:"印表機",remove:"移除",type:"類型",print:"列印",rename:"重新命名",move:"移動",create:"建立",duplicate:"複製",left:"左",right:"右"},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:{name:"名稱",status:"狀態",model:"型號",location:"位置",ascending:"升序排列",descending:"降序排列"},cardSize:{small:"小卡片",medium:"中卡片",large:"大卡片",extraLarge:"超大卡片"},hideOffline:"隱藏離線",nextAvailable:"下一個可用",powerOn:"開機",offlinePrintersWithPlugs:"帶智慧插座的離線印表機",noPrintersConfigured:"尚未設定印表機",search:"搜尋印表機...",noSearchResults:"沒有印表機符合您的搜尋或篩選條件",filter:{allStatuses:"所有狀態",allLocations:"所有位置"},readyToPrint:"準備列印",external:"外部",extL:"外接左",extR:"外接右",deleteArchives:"刪除列印歸檔",noLabel:"無標籤",printPreview:"列印預覽",width:"寬度",height:"高度",noObjectsFound:"未找到物件",objectsLoadedOnPrintStart:"物件在列印開始時載入",willBeSkipped:"將被跳過",name:"名稱",serialCannotBeChanged:"序列號無法更改",locationHelp:"用於分組印表機和篩選佇列任務",wifiSignal:{veryWeak:"非常弱",weak:"弱",fair:"一般",good:"良好",excellent:"優秀"},maintenanceUpToDate:"所有維護均已完成 - 點選檢視",chamberLightOn:"開啟腔室燈",chamberLightOff:"關閉腔室燈",files:"檔案",browseFiles:"瀏覽印表機檔案",autoOffAfterPrint:"列印後自動關機",autoOffExecuted:"已執行自動關機 - 開啟印表機以重設",hmsErrors:"HMS 錯誤",viewHmsErrors:"檢視 {{count}} 個 HMS 錯誤",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:"標準",firmwareUpdate:"韌體更新",firmwareInstructions:"在印表機觸控式螢幕上,前往",firmwareNav:"導航到",settings:"設定",firmware:"韌體",discoverPrinters:"發現印表機",searching:"搜尋中...",manualEntry:"手動輸入",addFromCloud:"從雲端新增",toast:{printerDeleted:"印表機已刪除",missingSpoolAssignment:"已在{{printer}}上開始列印。以下料槽未分配耗材: {{slots}}",printerAdded:"印表機已新增",printerUpdated:"印表機已更新",failedToDelete:"刪除印表機失敗",failedToAdd:"新增印表機失敗",failedToUpdate:"更新印表機失敗",commandSent:"命令已傳送",failedToSendCommand:"傳送命令失敗",turnedOn:"{{name}} 已開啟",failedToPowerOn:"開啟 {{name}} 失敗",scriptTriggered:"腳本已觸發",printStopped:"列印已停止",printPaused:"列印已暫停",printResumed:"列印已繼續",referenceDeleted:"參考已刪除",detectionAreaSaved:"檢測區域已儲存",failedToRunScript:"執行腳本失敗",failedToStopPrint:"停止列印失敗",failedToPausePrint:"暫停列印失敗",failedToResumePrint:"繼續列印失敗",failedToControlChamberLight:"控制腔室燈失敗",failedToSetSpeed:"設定列印速度失敗",failedToUpdateSetting:"更新設定失敗",failedToSkipObjects:"跳過物件失敗",failedToRereadRfid:"重新讀取 RFID 失敗",failedToCheckPlate:"檢查列印板失敗",failedToUpdateLabel:"更新標籤失敗",failedToDeleteReference:"刪除參考失敗",failedToSaveDetectionArea:"儲存檢測區域失敗",plateCheckEnabled:"列印板檢查已啟用",plateCheckDisabled:"列印板檢查已停用",calibrationSaved:"校準已儲存!",calibrationFailed:"校準失敗",rfidRereadInitiated:"已發起 RFID 重新讀取"},connection:{connected:"已連線",offline:"離線"},queue:{inQueue:"佇列中有 {{count}} 個列印任務",inQueue_plural:"佇列中有 {{count}} 個列印任務"},controls:"控制",rfid:{reread:"重新讀取 RFID"},bedJog:{title:"移動熱床",bed:"熱床",step:"步長 (mm)",up:"熱床上移",down:"熱床下移",disabledWhilePrinting:"列印中已停用",notHomedTitle:"印表機未歸零",notHomedMessage:"自上次列印以來 Z 軸尚未歸零。請先歸零 Z 以確保安全定位,或者直接移動 — 軟限位將被繞過。",homeZ:"歸零 Z",moveAnyway:"強制移動",homingStarted:"Z 軸歸零中…"},permission:{noAdd:"您沒有新增印表機的權限",noEdit:"您沒有編輯印表機的權限",noDelete:"您沒有刪除印表機的權限",noControl:"您沒有控制印表機的權限",noFiles:"您沒有存取印表機檔案的權限",noAmsRfid:"您沒有重新讀取 AMS RFID 的權限",noSmartPlugControl:"您沒有控制智慧插座的權限",noCamera:"您沒有檢視攝影機的權限"},modal:{addTitle:"新增印表機",editTitle:"編輯印表機",myPrinter:"我的印表機",selectModel:"選擇型號...",locationGroup:"位置 / 分組(可選)",locationPlaceholder:"例如:工作室、辦公室、地下室",autoArchiveLabel:"自動歸檔已完成的列印",fromPrinterSettings:"來自印表機設定",modelOptional:"型號(可選)",saveChanges:"儲存更改"},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:{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:"關機"},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:{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:"啟動發現失敗"},drying:{start:"開始乾燥",stop:"停止乾燥",temperature:"溫度",duration:"時長",hours:"小時",timeRemaining:"剩餘 {{time}}",active:"乾燥中",notSupported:"不支援乾燥",powerRequired:"連線AMS電源介面卡以啟用乾燥",startingDrying:"正在啟動乾燥...",stoppingDrying:"正在停止乾燥...",rotateTray:"乾燥時旋轉料盤"},filaments:"耗材",openCameraOverlay:"開啟攝影機疊加層",openCameraWindow:"在新視窗中開啟攝影機",firmwareUpdateAvailable:"韌體更新可用:{{current}} → {{latest}}",firmwareUpToDate:"韌體 {{version}} — 已是最新",firmwareUpdateButton:"更新",plateDetection:{noPermission:"您沒有更新印表機的權限",enabledClick:"列印板檢查已啟用 - 點選停用",disabledClick:"列印板檢查已停用 - 點選啟用",manageCalibration:"管理列印板檢測校準",calibrationRequired:"需要校準",calibrationInstructions:"請確保列印板完全空置,然後點選校準。",calibrationDescription:"校準會拍攝空置列印板的參考影像。後續檢查將與此參考進行比較以檢測物體。",calibrationTip:"提示:您最多可以為不同的列印板儲存5個校準。系統會在檢查時自動使用最佳匹配。",plateEmpty:"列印板似乎是空的",objectsDetected:"在列印板上偵測到物體",confidence:"置信度",difference:"差異",analysisPreview:"分析預覽:",analysisLegend:"綠色框 = 檢測區域,紅色覆蓋 = 與校準的差異",savedReferences:"已儲存的參考 ({{count}}/{{max}})",deleteReference:"刪除參考",labelPlaceholder:"標籤...",clickToEdit:"{{label}} - 點選編輯",clickToAddLabel:"點選新增標籤"},speed:{title:"列印速度",silent:"靜音 (50%)",standard:"標準 (100%)",sport:"運動 (124%)",ludicrous:"瘋狂 (166%)"},airduct:{title:"風道模式",cooling:"製冷",heating:"加熱"},noSdCard:"無SD",door:{open:"開",closed:"關"},fans:{partCooling:"零件冷卻風扇",auxiliary:"輔助風扇",chamber:"腔室風扇"},clickToViewHmsErrors:"點選檢視 HMS 錯誤",estimatedCompletion:"預計完成時間",plateNumber:"板 {{number}}",slotOptions:"槽位選項",amsPopup:{friendlyName:"AMS 名稱",friendlyNamePlaceholder:"例如 AMS 友好名稱",serialNumber:"序列號",firmwareVersion:"韌體",save:"儲存",clear:"清除",noEditPermission:"您沒有重新命名 AMS 單元的權限"},firmwareModal:{title:"韌體更新",titleUpToDate:"韌體資訊",currentVersion:"目前版本:",latestVersion:"最新版本:",releaseNotes:"發布說明",checkingPrereqs:"正在檢查前提條件...",sdCardReady:"SD 卡已就緒。點選下方上傳韌體。",uploadedSuccess:"韌體已上傳到 SD 卡!",applyInstructions:"在印表機上套用更新:",step1:"在印表機觸控式螢幕上,前往設定",step2:"導航到韌體",step3:"選擇從 SD 卡更新",step4:"更新將需要 10-20 分鐘",done:"完成",starting:"啟動中...",uploadFirmware:"上傳韌體",uploadFailed:"上傳啟動失敗:{{error}}",uploadedToast:"韌體已上傳!請在印表機螢幕上觸發更新。",availableVersions:"可用版本",usable:"可用",unavailable:"不可用",installed:"已安裝",newerBadge:"較新",olderBadge:"較舊",currentBadge:"目前"},accessCodePlaceholder:"留空以保持目前值",roi:{title:"檢測區域 (ROI)",xStart:"X 起點",yStart:"Y 起點",width:"寬度",height:"高度",instruction:"調整檢測區域以聚焦到列印板。預覽中的綠色框顯示目前區域。"},developerModeWarning:"以下印表機未啟用開發者區域網路模式:{{names}}。某些功能可能無法使用。",howToEnable:"如何啟用",incompatibleFile:"此檔案是為 {{slicedFor}} 切片的,但該印表機是 {{printerModel}}",dropNotPrintable:"只能列印 .gcode 和 .gcode.3mf 檔案",dropToPrint:"拖放以列印",cannotPrint:"印表機忙碌"},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 Code",viewPhotos:"檢視照片",viewPhotosCount:"檢視照片 ({{count}})",projectPage:"專案頁面",addToFavorites:"新增到收藏",removeFromFavorites:"從收藏中移除",edit:"編輯",goToProject:"前往專案:{{name}}",addToProject:"新增到專案",removeFromProject:"從專案中移除",loading:"載入中...",noProjectsAvailable:"無可用專案",select:"選擇",deselect:"取消選擇",delete:"刪除"},permission:{noReprint:"您沒有重新列印此歸檔的權限",noAddToQueue:"您沒有新增到佇列的權限",noUpdateArchives:"您沒有更新歸檔的權限",noUploadFiles:"您沒有上傳檔案的權限",noDownload:"您沒有下載歸檔的權限",noCopyLink:"您沒有複製下載連結的權限",noDelete:"您沒有刪除此歸檔的權限",noCreate:"您沒有建立歸檔的權限"},card:{previousPlate:"上一個板",nextPlate:"下一個板",plateNumber:"板 {{index}}",moreOptions:"右鍵檢視更多選項",addToFavorites:"新增到收藏",removeFromFavorites:"從收藏中移除",cancelled:"已取消",failed:"失敗",duplicate:"重複",duplicateTitle:"此模型之前已列印過",openSource3mf:"在 Bambu Studio 中開啟源 3MF(右鍵檢視更多選項)",downloadF3d:"下載 Fusion 360 設計檔案",viewTimelapse:"檢視縮時攝影",viewPhoto:"檢視 1 張照片",viewPhotos:"檢視 {{count}} 張照片",openFolder:"開啟資料夾:{{name}}",slicedFile:"已切片檔案 - 可以列印",sourceFile:"僅原始檔 - 無 AMS 對應可用",gcode:"GCODE",source:"原始檔",project:"專案:{{name}}",estimated:"預計:{{time}}",actual:"實際:{{time}}",accuracy:"準確度:{{percent}}%",filament:"{{weight}}g",layer:"{{count}} 層",layers:"{{count}} 層",object:"{{count}} 個物件",objects:"{{count}} 個物件",slicedFor:"為 {{model}} 切片",uploadedBy:"上傳者",noPermissionReprint:"您沒有重新列印的權限",noFileForReprint:"無可用的 3MF 檔案 — 列印紀錄時無法從印表機下載該檔案",noPermissionEdit:"您沒有編輯歸檔的權限",noPermissionDelete:"您沒有刪除歸檔的權限",reprint:"重新列印",schedulePrint:"排程列印",schedule:"排程",openInBambuStudio:"在切片軟體中開啟",openInBambuStudioToSlice:"在切片軟體中開啟進行切片",slice:"切片",externalLink:"外部連結",makerWorld:"MakerWorld:{{designer}}",viewProject:"檢視專案",noExternalLink:"無外部連結",preview3d:"3D 預覽",download:"下載",edit:"編輯",delete:"刪除"},modal:{deleteArchive:"刪除歸檔",deleteConfirm:'確定要刪除"{{name}}"嗎?此操作無法復原。',deleteButton:"刪除",removeSource3mf:"移除源 3MF",removeSource3mfConfirm:'確定要從"{{name}}"中移除源 3MF 檔案嗎?這將刪除原始切片專案檔案。',removeButton:"移除",removeF3d:"移除 F3D",removeF3dConfirm:'確定要從"{{name}}"中移除 Fusion 360 設計檔案嗎?',removeTimelapse:"移除縮時攝影",removeTimelapseConfirm:'確定要從"{{name}}"中移除縮時攝影影片嗎?',timelapse:"{{name}} - 縮時攝影",selectTimelapse:"選擇縮時攝影",selectTimelapseDesc:"未找到自動匹配。請選擇此列印的縮時攝影:",deleteArchives:"刪除歸檔",deleteArchivesConfirm:"確定要刪除 {{count}} 個歸檔嗎?此操作無法復原。",deleteCount:"刪除 {{count}} 個"},page:{title:"歸檔",printsCount:"{{filtered}} / {{total}} 次列印",dropFilesHere:"將 .3mf 檔案拖放到此處",releaseToUpload:"放開以上傳",only3mfSupported:"僅支援 .3mf 檔案",close:"關閉",selected:"已選擇 {{count}} 個",selectAll:"全選",tags:"標籤",project:"專案",favorite:"收藏",delete:"刪除",toggledFavorites:"已切換 {{count}} 個歸檔的收藏狀態",failedUpdateFavorites:"更新收藏失敗",archivesDeleted:"已刪除 {{count}} 個歸檔",failedDeleteArchives:"刪除歸檔失敗",photoDeleted:"照片已刪除",failedDeletePhoto:"刪除照片失敗"},list:{name:"名稱",printer:"印表機",date:"日期",size:"大小",actions:"操作",hasTimelapse:"有縮時攝影"},log:{date:"日期",printName:"列印名稱",printer:"印表機",user:"使用者",status:"狀態",duration:"時長",filament:"耗材",allPrinters:"所有印表機",allUsers:"所有使用者",allStatuses:"所有狀態",cancelled:"已取消",skipped:"已跳過",dateFrom:"從",dateTo:"到",noEntries:"未找到列印日誌條目",showing:"顯示 {{count}} / {{total}} 條",rowsPerPage:"行數",page:"頁",prev:"上一頁",next:"下一頁",clearLog:"清除日誌",clearLogTitle:"清除列印日誌",clearLogConfirm:"所有列印日誌條目將被永久刪除。歸檔和佇列項目不受影響。此操作無法復原。確定要繼續嗎?",clearLogButton:"全部清除",cleared:"已清除 {{count}} 條日誌",clearFailed:"清除列印日誌失敗"}},queue:{title:"列印佇列",subtitle:"排程和管理您的列印任務",addToQueue:"新增到佇列",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:"佇列中的下一個",clearPlate:"清理列印板並開始下一個",clearPlateSuccess:"列印板已清理 — 準備進行下一個列印",plateReady:"列印板已清理 — 準備進行下一個列印",plateNumber:"板 {{index}}",quantity:"數量",quantityHint:"建立 {{count}} 個佇列項目",activeBatches:"活躍批次",batchProgress:"已完成 {{completed}}/{{total}}",cancelBatch:"取消剩餘",batchCancelled:"已取消剩餘批次項目",cancelBatchConfirmTitle:"取消批次",cancelBatchConfirmMessage:"取消此批次中所有剩餘的待處理項目?",batch:"批次",sections:{currentlyPrinting:"正在列印",queued:"佇列中",history:"歷史"},status:{pending:"等待中",waiting:"等待中",printing:"列印中",paused:"已暫停",completed:"已完成",failed:"失敗",skipped:"已跳過",cancelled:"已取消"},summary:{printing:"列印中",queued:"佇列中",totalTime:"總佇列時間",totalWeight:"總佇列重量",history:"歷史"},filter:{allPrinters:"所有印表機",unassigned:"未分配",allStatus:"所有狀態",allLocations:"所有位置",any:"任意"},sort:{byPosition:"按位置排序",byName:"按名稱排序",byPrinter:"按印表機排序",bySchedule:"按排程排序",byDate:"按日期排序",ascendingOldest:"升序(最舊優先)",descendingNewest:"降序(最新優先)"},badges:{staged:"已暫存",requiresPrevious:"需要前一個成功",autoPowerOff:"自動關機",gcodeInjection:"G-code"},empty:{title:"沒有排程的列印",description:'從歸檔頁面使用右鍵選單中的"排程"選項來排程列印,或拖放檔案開始。'},time:{asap:"儘快",overdue:"已逾期",now:"現在",lessThanMinute:"不到一分鐘",inMinutes:"{{count}} 分鐘後",inHours:"{{count}} 小時後"},actions:{stopPrint:"停止列印",startPrint:"開始列印",requeue:"重新佇列"},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:"取消所選"},confirm:{cancelTitle:"取消排程列印",cancelMessage:'確定要取消"{{name}}"嗎?',stopTitle:"停止列印",stopMessage:'確定要停止目前列印"{{name}}"嗎?這將取消印表機上的列印任務。',removeTitle:"從歷史中移除",removeMessage:'確定要從佇列歷史中移除"{{name}}"嗎?',clearHistoryTitle:"清除歷史",clearHistoryMessage:"確定要從歷史中移除所有 {{count}} 個項目嗎?",cancelButton:"取消列印",stopButton:"停止列印",thisPrint:"此列印",thisItem:"此項目"},toast:{cancelled:"佇列項目已取消",cancelFailed:"取消項目失敗",removed:"佇列項目已移除",removeFailed:"移除項目失敗",stopped:"列印已停止",stopFailed:"停止列印失敗",released:"列印已加入佇列",startFailed:"開始列印失敗",reorderFailed:"重新排序佇列失敗",historyCleared:"已清除 {{count}} 條歷史紀錄",clearHistoryFailed:"清除歷史失敗",updateFailed:"更新項目失敗",bulkCancelled:"已取消 {{count}} 個項目",bulkCancelFailed:"批次取消項目失敗"},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:{noStopPrint:"您沒有停止列印的權限",noStartPrint:"您沒有開始列印的權限",noEdit:"您沒有編輯此佇列項目的權限",noCancel:"您沒有取消此佇列項目的權限",noRequeue:"您沒有重新佇列的權限",noRemove:"您沒有移除此佇列項目的權限",noClearHistory:"您沒有清除所有歷史的權限",noEditItems:"您沒有編輯佇列項目的權限",noCancelItems:"您沒有取消佇列項目的權限"}},backgroundDispatch:{unknownFile:"未知檔案",unknownPrinter:"未知印表機",startingPrints:"正在開始列印",progressSummary:"{{complete}}/{{total}} 完成 • 已分發:{{dispatched}} • 處理中:{{processing}}",expandDetails:"展開分發詳情",collapseDetails:"收起分發詳情",dismissToast:"關閉分發通知",cancelDispatchJob:"取消分發任務",cancel:"取消",cancelling:"取消中…",status:{dispatched:"已分發",processing:"處理中",completed:"已完成",failed:"失敗",cancelled:"已取消"},toast:{cancellingUpload:"取消上傳中...",cancelled:"分發已取消",cancelFailed:"取消分發失敗",completeWithFailures:"後台分發完成:{{completed}} 成功,{{failed}} 失敗",completeSuccess:"後台分發完成:{{completed}} 成功",printStartedRemaining:"{{completed}} 個列印已開始,{{remaining}} 個正在傳送..."}},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:"全部時間",quickStats:"快速統計",printActivity:"列印活動",filamentTypes:"耗材類型",filamentTrends:"耗材趨勢",failureAnalysis:"失敗分析",timeAccuracy:"時間準確度",successful:"成功:",failed:"失敗:",perfectEstimate:"100% = 完美估計",noTimeAccuracyData:"尚無時間準確度資料",noFilamentData:"尚無耗材資料",noPrinterData:"尚無印表機資料",noPrintData:"尚無列印資料",noPrintDataLast30Days:"最近 30 天無列印資料",failureReasons:"失敗原因",topFailureReasons:"主要失敗原因",failedPrintsCount:"{{failed}} / {{total}} 次列印失敗",lastWeekRate:"上週:{{rate}}%",resetLayout:"重設佈局",recalculateCosts:"重新計算成本",recalculateCostsHint:"使用目前耗材價格重新計算所有歸檔成本",exportStats:"匯出統計",exportAsCsv:"匯出為 CSV",exportAsExcel:"匯出為 Excel",hiddenCount:"{{count}} 個已隱藏",exportDownloaded:"匯出已下載",exportFailed:"匯出失敗",layoutReset:"佈局已重設",recalculatedCosts:"已為 {{count}} 個歸檔重新計算成本",recalculateFailed:"重新計算成本失敗",loadingStats:"載入統計資料中...",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:{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:"目前小時數",statusTab:"狀態",settingsTab:"設定",overdueCount:"{{count}} 個逾期",dueSoonCount:"{{count}} 個即將到期",dueSoon:"即將到期",allGood:"一切正常",overdueBy:"逾期 {{duration}}",dueIn:"{{duration}} 後到期",timeLeft:"剩餘 {{duration}}",day:"1 天",days:"{{count}} 天",week:"1 週",weeks:"{{count}} 週",month:"1 個月",months:"{{count}} 個月",year:"1 年",maintenanceTypes:"維護類型",maintenanceTypesDescription:"系統類型和您的自訂維護任務",addCustomType:"新增自訂類型",restoreDefaults:"恢復預設任務",intervalType:"間隔類型",intervalValue:"間隔 ({{type}})",icon:"圖示",documentationLink:"說明文件連結(可選)",assignToPrinters:"分配給印表機",selectAtLeastOnePrinter:"至少選擇一臺印表機",addType:"新增類型",custom:"自訂",printHours:"列印小時數",calendarDays:"日曆天數",exampleName:"例如:更換 HEPA 過濾器",viewDocumentation:"檢視說明文件",timeBasedInterval:"基於時間的間隔",intervalOverrides:"間隔覆蓋",intervalOverridesDescription:"為特定印表機自訂間隔",assignedToPrinters:"已分配給印表機:",noPrintersAssigned:"未分配印表機",addPrinterShort:"新增:",printersAssignedClick:"已分配 {{count}} 臺印表機 - 點選管理",removeFromPrinter:"從此印表機移除",types:{lubricateCarbonRods:"潤滑碳纖維杆",lubricateRails:"潤滑線性導軌",cleanNozzle:"清潔噴嘴/熱端",checkBelts:"檢查皮帶張力",cleanBuildPlate:"清潔列印板",checkExtruder:"檢查擠出機齒輪",checkCooling:"檢查冷卻風扇",generalInspection:"綜合檢查",cleanCarbonRods:"清潔碳纖維杆",lubricateSteelRods:"潤滑鋼杆",cleanSteelRods:"清潔鋼杆",cleanLinearRails:"清潔線性導軌",checkPtfeTube:"檢查 PTFE 管",replaceHepaFilter:"更換 HEPA 過濾器",replaceCarbonFilter:"更換活性炭過濾器",lubricateLeftNozzleRail:"潤滑左噴嘴導軌"},maintenanceComplete:"維護已標記為完成",typeUpdated:"維護類型已更新",typeDeleted:"維護類型已刪除",defaultsRestored:"已恢復 {{count}} 個預設任務",printHoursUpdated:"列印小時數已更新",printerAssigned:"印表機已分配",printerRemoved:"印表機已移除",deleteTypeConfirm:'刪除"{{name}}"?',deleteSystemTypeTitle:"刪除預設維護任務?",deleteSystemTypeMessage:'確定要刪除預設維護任務"{{name}}"嗎?',noPermissionUpdate:"您沒有更新維護項目的權限",noPermissionPerform:"您沒有執行維護的權限",noPermissionEditTypes:"您沒有編輯維護類型的權限",noPermissionDeleteTypes:"您沒有刪除維護類型的權限",noPermissionEditHours:"您沒有編輯列印時間的權限",noPermissionRemovePrinter:"您沒有移除印表機分配的權限",noPermissionAssignPrinter:"您沒有分配印表機的權限",noPermissionEditIntervals:"您沒有編輯間隔的權限",configureSettings:"設定維護類型和間隔"},settings:{title:"設定",general:"通用",tabs:{general:"通用",smartPlugs:"智慧插座",notifications:"通知",queue:"工作流程",filament:"耗材",network:"網路",apiKeys:"API 金鑰",virtualPrinter:"虛擬印表機",spoolbuddy:"SpoolBuddy",failureDetection:"故障檢測",users:"身份驗證",backup:"備份",emailAuth:"信箱認證",ldap:"LDAP",twoFa:"雙因素認證",oidc:"SSO / OIDC"},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:"磁碟",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})。",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:{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:"管理員可以透過郵件重設使用者密碼",errors:{requiredFields:"請填寫所有必填欄位",usernameRequired:"啟用認證時需要使用者名稱",enterTestEmail:"請輸入測試信箱地址",smtpServerAndEmail:"測試前請填寫 SMTP 伺服器和寄件信箱",usernamePasswordRequired:"啟用認證時需要使用者名稱和密碼",configureSmtpFirst:"請先設定並測試 SMTP 設定",enableAuthFirst:"請先啟用身份驗證才能使用基於電子郵件的功能。"},success:{settingsSaved:"SMTP 設定儲存成功"},securityOptions:{starttls:"STARTTLS(連接埠 587)",ssl:"SSL/TLS(連接埠 465)",none:"無(連接埠 25)"},authOptions:{enabled:"已啟用",disabled:"已停用"}},appearance:"外觀",notifications:"通知",smartPlugs:"智慧插座",spoolman:"Spoolman",updates:"更新",language:"語言",languageDescription:"選擇您的首選語言",theme:"主題",themeLight:"淺色",themeDark:"深色",themeSystem:"跟隨系統",defaultView:"預設檢視",defaultViewDescription:"開啟應用程式時顯示的頁面",checkForUpdates:"檢查更新",autoUpdate:"自動更新",currentVersion:"目前版本",latestVersion:"最新版本",upToDate:"已是最新版本",updateAvailable:"有可用更新",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:"需要維護時通知"},smartPlug:{title:"智慧插座",add:"新增智慧插座",edit:"編輯智慧插座",name:"名稱",ipAddress:"IP 位址",linkedPrinter:"連結印表機",autoOn:"自動開啟",autoOnDescription:"列印開始時開啟",autoOff:"自動關閉",autoOffDescription:"列印完成後關閉",offDelay:"關閉延遲",offDelayMinutes:"列印後分鐘數",offDelayTemp:"當噴嘴溫度低於",currentState:"目前狀態",turnOn:"開啟",turnOff:"關閉"},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 同步重量失敗",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:"所有印表機",noDefaultPrinter:"無預設(每次詢問)",sidebarOrder:"側邊欄順序",saveThumbnails:"儲存縮圖",captureFinishPhoto:"拍攝完成照片",noPrintersConfigured:"未設定印表機",archiveMode:{always:"始終建立歸檔條目",never:"從不建立歸檔條目",ask:"每次詢問"},checkForUpdatesLabel:"檢查更新",checkPrinterFirmware:"檢查印表機韌體",includeBetaUpdates:"包含測試版本",includeBetaUpdatesDesc:"檢查更新時通知測試版和預發布版本",enableRetry:"啟用重試",homeAssistantDescription:"透過 Home Assistant 控制智慧插座",environmentManagedLabel:"(環境變數管理)",autoEnabledViaEnv:"透過環境變數自動啟用",urlFromEnvReadOnly:"值由 HA_URL 環境變數設定(只讀)",tokenFromEnvReadOnly:"值由 HA_TOKEN 環境變數設定(只讀)",mqttConnectedTo:"已連線到",prometheusDescription:"以 Prometheus 格式暴露印表機資料",noSmartPlugsTitle:"未設定智慧插座",noSmartPlugsDescription:"新增基於 Tasmota 的智慧插座以追蹤能耗並自動化電源控制。",noProvidersTitle:"未設定提供者",noProvidersDescription:"新增提供者以接收警報。",noTemplatesAvailable:"無可用範本。重新啟動後端以載入預設範本。",apiPermissionView:"檢視印表機狀態和佇列",apiPermissionEdit:"新增和移除列印佇列中的項目",apiKeysEmptyTitle:"無 API 金鑰",apiKeysEmptyDescription:"建立 API 金鑰以與外部服務整合。",noUsersFound:"未找到使用者",noGroupsFound:"未找到群組",noGroupsAvailable:"無可用群組",passwordsDoNotMatch:"密碼不符",systemGroupWarning:"系統群組名稱不可更改",authDisabledTitle:"身份驗證已停用",authDisabledFeature1:"需要登入才能存取系統",authDisabledFeature2:"建立多個使用者並基於群組的權限管理",authDisabledFeature3:"使用 50+ 個細粒度權限控制存取",userHasCreated:"此使用者已建立:",userItemsQuestion:"您想如何處理這些項目?",deleteUserConfirm:"確定要刪除此使用者嗎?",actionCannotBeUndone:"此操作無法復原。",addFirstSmartPlug:"新增您的第一個智慧插座",providers:"提供者",log:"日誌",testAll:"全部測試",testResults:"測試結果",testPassedCount:"{{count}} 個透過",testFailedCount:"{{count}} 個失敗",messageTemplates:"訊息範本",messageTemplatesDescription:"自訂每個事件的通知訊息。",apiKeys:"API 金鑰",apiKeysDescription:"建立 API 金鑰用於外部整合和 Webhook。",createKey:"建立金鑰",apiKeyCreated:"API 金鑰建立成功",apiKeyCopyWarning:"請立即複製此金鑰 - 它不會再次顯示!",useInApiBrowser:"在 API 瀏覽器中使用",createNewApiKey:"建立新 API 金鑰",keyName:"金鑰名稱",keyNamePlaceholder:"例如:Home Assistant、OctoPrint",readStatus:"讀取狀態",readStatusDescription:"檢視印表機狀態和佇列",manageQueue:"管理佇列",manageQueueDescription:"新增和移除列印佇列中的項目",controlPrinter:"控制印表機",controlPrinterDescription:"暫停、繼續和停止列印",unnamedKey:"未命名金鑰",lastUsed:"上次使用",read:"讀取",control:"控制",createFirstKey:"建立您的第一個金鑰",webhookEndpoints:"Webhook 端點",webhookApiKeyHint:"在 X-API-Key 請求頭中使用您的 API 金鑰。",webhook:{getAllStatus:"獲取所有印表機狀態",getSpecificStatus:"獲取特定印表機狀態",addToQueue:"新增到列印佇列",pausePrint:"暫停列印",resumePrint:"繼續列印",stopPrint:"停止列印"},apiBrowser:"API 瀏覽器",apiBrowserDescription:"瀏覽和測試所有可用的 API 端點。",apiKeyForTesting:"測試用 API 金鑰",apiKeyPlaceholder:"在此貼上您的 API 金鑰以測試需要認證的端點...",apiKeyHint:"此金鑰將作為 X-API-Key 請求頭隨請求傳送。",deleteApiKeyTitle:"刪除 API 金鑰",deleteApiKeyMessage:"確定要刪除此 API 金鑰嗎?使用此金鑰的所有整合將停止工作。",deleteKey:"刪除金鑰",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 對應",authentication:"身份驗證",authEnabledDescription:"您的實例已透過使用者身份驗證保護",authDisabledDescription:"啟用以要求登入並管理使用者存取",authDisabledMessage:"啟用身份驗證以建立使用者帳戶、管理權限並保護您的 Bambuddy 實例。",enableAuthentication:"啟用身份驗證",currentUser:"目前使用者",changePassword:"修改密碼",admin:"管理員",users:"使用者",addUser:"新增使用者",groups:"群組",addGroup:"新增群組",system:"系統",noDescription:"無描述",userCount:"{{count}} 個使用者",permissionCount:"{{count}} 個權限",createUser:"建立使用者",username:"使用者名稱",enterUsername:"輸入使用者名稱",password:"密碼",enterPassword:"輸入密碼(至少 6 個字元)",confirmPassword:"確認密碼",confirmPasswordPlaceholder:"確認密碼",viewReleaseOnGitHub:"在 GitHub 上檢視發布",turnAllPlugsOn:"開啟所有插座",turnAllPlugsOff:"關閉所有插座",clearNotificationLogs:"清除通知日誌",clearLogsMessage:"這將永久刪除所有 30 天前的通知日誌。此操作無法復原。",clearLogs:"清除日誌",resetUiPreferences:"重設 UI 偏好",resetUiPreferencesMessage:"這將重設所有 UI 偏好為預設值:側邊欄順序、主題、儀表板佈局、檢視模式和排序偏好。您的印表機、歸檔和伺服器設定不會受到影響。清除後頁面將重新載入。",resetPreferences:"重設偏好",deleteGroupTitle:"刪除群組",deleteGroupMessage:"確定要刪除此群組嗎?此群組中的使用者將失去這些權限。",deleteGroup:"刪除群組",disableAuthenticationTitle:"停用身份驗證",disableAuthenticationMessage:"確定要停用身份驗證嗎?這將使您的 Bambuddy 實例無需登入即可存取。所有使用者將保留在資料庫中但身份驗證將被停用。",disableAuthentication:"停用身份驗證",configureBambuddy:"設定 Bambuddy",systemDefault:"系統預設",archiveSettings:"歸檔設定",newWindow:"新視窗",embeddedOverlay:"嵌入式疊加層",preferredSlicer:"首選切片軟體",preferredSlicerDescription:"選擇要用於開啟檔案的切片軟體",externalCameras:"外部攝影機",costTracking:"成本追蹤",printsOnly:"僅列印",totalConsumption:"總消耗",dataManagement:"資料管理",storageUsage:"儲存使用情況",storageUsageDescription:"按類別的資料使用情況明細",storageUsageTotal:"總計",storageUsageErrors:"錯誤",storageUsageOtherBreakdown:"其他(包括靜態資源、腳本和設定檔案)",storageUsageSystem:"系統",storageUsageData:"資料",storageUsageUnavailable:"儲存使用資訊不可用",clearNotificationLogsDescription:"刪除 30 天前的通知日誌",resetUiPreferencesDescription:"重設側邊欄順序、主題、檢視模式和佈局偏好。印表機、歸檔和設定不受影響。",enableHomeAssistant:"啟用 Home Assistant",enableMqtt:"啟用 MQTT",useTls:"使用 TLS",enableMetricsEndpoint:"啟用指標端點",availableMetrics:"可用指標",editUser:"編輯使用者",deleteUserTitle:"刪除使用者",groupName:"群組名稱",leaveEmptyForAnonymous:"留空為匿名",leaveEmptyForNoAuth:"留空為無認證",enterNewPassword:"輸入新密碼",confirmNewPassword:"確認新密碼",enterGroupName:"輸入群組名稱",enterDescriptionOptional:"輸入描述(可選)",enterCurrentPassword:"輸入目前密碼",enterNewPasswordMin6:"輸入新密碼(至少 6 個字元)",toast:{keyCopied:"金鑰已複製到剪貼簿",copyFailed:"複製金鑰失敗",keyAddedToBrowser:"金鑰已新增到 API 瀏覽器",clearLogsFailed:"清除日誌失敗",uiPreferencesReset:"UI 偏好已重設。重新整理中...",authDisabled:"身份驗證已成功停用",authDisableFailed:"停用身份驗證失敗",apiKeyCreated:"API 金鑰已建立",apiKeyDeleted:"API 金鑰已刪除",userCreated:"使用者建立成功",userUpdated:"使用者更新成功",userDeleted:"使用者刪除成功",groupCreated:"群組建立成功",groupUpdated:"群組更新成功",groupDeleted:"群組刪除成功",fillRequiredFields:"請填寫所有必填欄位",passwordsDoNotMatch:"密碼不符",passwordTooShort:"密碼至少需要 6 個字元",enterGroupName:"請輸入群組名稱",settingsSaved:"設定已儲存",cameraSettingsSaved:"攝影機設定已儲存",enterCameraUrl:"請輸入攝影機 URL",passwordChanged:"密碼修改成功",connectionFailed:"連線失敗",testFailed:"測試失敗",cameraConnected:"攝影機已連線{{resolution}}"},testConnection:"測試連線",catalog:{spoolCatalog:"耗材目錄",spoolCatalogDescription:"按品牌/類型的空耗材重量。用於新增耗材時的自動重量查詢。",searchCatalog:"搜尋目錄...",addNewEntry:"新增新條目",namePlaceholder:"名稱(例如:Bambu Lab - 塑膠)",weight:"重量",type:"類型",default:"預設",custom:"自訂",noMatch:"沒有條目匹配您的搜尋",empty:"目錄中沒有條目",deleteEntry:"刪除條目",deleteConfirm:'確定要刪除"{{name}}"嗎?',resetCatalog:"重設目錄",resetConfirm:"重設目錄為預設值?這將移除所有自訂條目。",loadFailed:"載入耗材目錄失敗",nameWeightRequired:"名稱和重量為必填項",entryAdded:"條目已新增",addFailed:"新增條目失敗",entryUpdated:"條目已更新",updateFailed:"更新條目失敗",entryDeleted:"條目已刪除",deleteFailed:"刪除條目失敗",resetSuccess:"目錄已重設為預設值",resetFailed:"重設目錄失敗",exported:"已匯出 {{count}} 條",imported:"已匯入 {{added}} 條(跳過 {{skipped}} 條)",importFailed:"匯入失敗:無效的 JSON 格式",exportTooltip:"匯出目錄為 JSON",importTooltip:"從 JSON 匯入目錄",resetTooltip:"重設為預設值",selectedCount:"已選擇 {{count}} 項",deleteSelected:"刪除所選",bulkDeleteConfirm:"確定要刪除 {{count}} 個條目嗎?",bulkDeleted:"已刪除 {{count}} 個條目",bulkDeleteFailed:"刪除條目失敗"},colorCatalog:{title:"顏色目錄",description:"按製造商/材料的耗材顏色。用於新增耗材時的自動顏色查詢。",searchColors:"搜尋顏色...",allManufacturers:"所有製造商",addNewColor:"新增新顏色",manufacturer:"製造商",colorName:"顏色名稱",hex:"十六進位",materialOptional:"材料(可選)",showing:"顯示 {{filtered}} / {{total}} 種顏色",noMatch:"沒有顏色匹配您的搜尋",empty:"目錄中沒有顏色",deleteColor:"刪除顏色",deleteConfirm:'確定要刪除"{{name}}"嗎?',resetCatalog:"重設顏色目錄",resetConfirm:"重設目錄為預設值?這將移除所有自訂顏色。",sync:"同步",starting:"啟動中...",syncTooltip:"從 FilamentColors.xyz 同步(2000+ 種顏色,可能需要一分鐘)",loadFailed:"載入顏色目錄失敗",fieldsRequired:"製造商、顏色名稱和十六進位顏色為必填項",colorAdded:"顏色已新增",addFailed:"新增顏色失敗",colorUpdated:"顏色已更新",updateFailed:"更新顏色失敗",colorDeleted:"顏色已刪除",deleteFailed:"刪除顏色失敗",resetSuccess:"顏色目錄已重設為預設值",resetFailed:"重設目錄失敗",syncUpToDate:"已是最新(檢查了 {{count}} 種顏色)",syncComplete:"新增了 {{added}} 種新顏色({{skipped}} 種已存在)",syncError:"同步錯誤",syncFailed:"從 FilamentColors.xyz 同步失敗",exported:"已匯出 {{count}} 種顏色",imported:"已匯入 {{added}} 種顏色(跳過 {{skipped}} 種)",importFailed:"匯入失敗:無效的 JSON 格式",selectedCount:"已選擇 {{count}} 項",deleteSelected:"刪除所選",bulkDeleteConfirm:"確定要刪除 {{count}} 種顏色嗎?",bulkDeleted:"已刪除 {{count}} 種顏色",bulkDeleteFailed:"刪除顏色失敗"},dateFormat:"日期格式",dateFormatUs:"美式 (MM/DD/YYYY)",dateFormatEu:"歐式 (DD/MM/YYYY)",dateFormatIso:"ISO (YYYY-MM-DD)",timeFormat:"時間格式",timeFormat12:"12小時制 (3:30 PM)",timeFormat24:"24小時制 (15:30)",defaultPrinter:"預設印表機",defaultPrinterDescription:"為上傳、重印和其他操作預選此印表機。",slicerBambuStudio:"Bambu Studio",slicerOrcaSlicer:"OrcaSlicer",sidebarOrderDescription:"拖曳側邊欄項目以重新排序。在此處重設為預設順序。",setDefault:"設為預設",sidebarOrderSetDefaultHint:"設為預設將目前選單順序套用於尚未自訂的使用者。",sidebarDefaultSet:"已設定預設選單順序。",sidebarDefaultCleared:"已清除預設選單順序。",sidebarDefaultFailed:"設定預設選單順序失敗。",reset:"重設",darkMode:"深色模式",lightMode:"淺色模式",active:"(目前)",background:"背景",accent:"強調色",style:"樣式",bgNeutral:"中性",bgWarm:"暖色",bgCool:"冷色",bgOled:"OLED 純黑",bgSlate:"石板藍",bgForest:"森林綠",accentGreen:"綠色",accentTeal:"青色",accentBlue:"藍色",accentOrange:"橙色",accentPurple:"紫色",accentRed:"紅色",styleClassic:"經典",styleGlow:"發光",styleVibrant:"鮮豔",themeToggleHint:"使用側邊欄中的太陽/月亮圖示在深色和淺色模式之間切換。",autoArchivePrints:"自動歸檔列印",autoArchiveDescription:"列印完成時自動儲存3MF檔案",saveThumbnailsDescription:"從3MF檔案中提取並儲存預覽影像",captureFinishPhotoDescription:"列印完成時從印表機攝影機拍照",ffmpegNotInstalled:"未安裝ffmpeg",ffmpegRequired:"攝影機捕獲需要ffmpeg。透過 brew install ffmpeg(macOS)或 apt install ffmpeg(Linux)安裝。",camera:"攝影機",cameraViewMode:"攝影機檢視模式",cameraOverlayDescription:"攝影機在主螢幕上以可調大小的覆蓋層開啟",cameraWindowDescription:"攝影機在單獨的瀏覽器視窗中開啟",externalCamerasDescription:"設定外部攝影機以替換內建印表機攝影機。支援MJPEG流、RTSP、HTTP快照和USB攝影機(V4L2)。啟用後,外部攝影機將用於即時檢視和完成照片。",cameraPlaceholderUsb:"裝置路徑 (/dev/video0)",cameraPlaceholderUrl:"攝影機URL (rtsp://... 或 http://...)",cameraTypeMjpeg:"MJPEG 流",cameraTypeRtsp:"RTSP 流",cameraTypeSnapshot:"HTTP 快照",cameraTypeUsb:"USB 攝影機 (V4L2)",cameraRotation:"旋轉",test:"測試",connected:"已連線",disconnected:"未連線",currency:"貨幣",defaultFilamentCost:"預設耗材成本(每公斤)",electricityCost:"每千瓦時電費",energyDisplayMode:"能源顯示模式",energyModePrintDescription:"儀表板顯示列印期間使用的能源總和",energyModeTotalDescription:"儀表板顯示智慧插座的累計能源",fileManager:"檔案管理器",createArchiveEntry:"列印時建立歸檔條目",createArchiveEntryDescription:"從檔案管理器列印時,可選擇建立歸檔條目",lowDiskSpaceWarning:"磁碟空間不足警告",lowDiskSpaceDescription:"當可用磁碟空間低於此閾值時顯示警告",printerFirmware:"印表機韌體",checkFirmwareDescription:"檢查Bambu Lab的印表機韌體更新",bambuddySoftware:"Bambuddy 軟體",autoCheckDescription:"啟動時自動檢查新版本",checkNow:"立即檢查",updateAvailableVersion:"可用更新:v{{version}}",releaseNotes:"發布說明",updateViaDocker:"透過 Docker Compose 更新:",installUpdate:"安裝更新",latestVersionRunning:"您正在執行最新版本",failedToCheckUpdates:"檢查更新失敗:{{error}}",backupRestore:"備份與恢復",backupRestoreDescription:"匯出/匯入設定並設定GitHub 備份",goToBackup:"前往備份",externalUrl:"外部URL",externalUrlDescription:"Bambuddy可存取的外部URL。用於通知影像和外部整合。",bambuddyUrl:"Bambuddy URL",externalUrlHint:"包含協定和連接埠(例如:http://192.168.1.100:8000)",ftpRetry:"FTP重試",ftpRetryDescription:"當印表機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//status 等",prometheusMetrics:"Prometheus 指標",prometheusEndpointDescription:"在 /api/v1/metrics 公開印表機指標,用於Prometheus/Grafana監控。",bearerTokenOptional:"Bearer權杖(可選)",bearerTokenHint:"設定後,請求必須包含 Authorization: Bearer ",metricsConnectionStatus:"連線狀態",metricsPrinterState:"印表機狀態(空閒/列印中等)",metricsPrintProgress:"列印進度 0-100%",metricsBedTemp:"熱床溫度",metricsNozzleTemp:"噴嘴溫度",metricsPrintsTotal:"按結果分類的總列印數",metricsMore:"...以及更多(層數、風扇、佇列、耗材用量)",smartPlugsDescription:"連線智慧插座(Tasmota或Home Assistant)以自動化電源控制並追蹤印表機的能源使用情況。",allOn:"全部開啟",allOff:"全部關閉",addSmartPlug:"新增智慧插座",energySummary:"能源概要",currentPower:"目前功率",plugsOnline:"{{reachable}}/{{total}} 個插座線上",today:"今天",yesterday:"昨天",total:"總計",enablePlugsForSummary:"啟用插座以檢視能源概要",addNotificationProvider:"新增",systemBadge:"(系統)",creating:"建立中...",changing:"修改中...",deleteUserAndItems:"刪除使用者及其所有項目",deleteUserKeepItems:"刪除使用者,保留項目(將變為無主項目)",ok:"確定",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:{title:"SSO / OIDC 提供者",desc:"設定 OpenID Connect 提供者以實現單點登入。",addProvider:"新增提供者",newProvider:"新提供者",empty:"尚未設定 OIDC 提供者。",created:"提供者已建立。",updated:"提供者已更新。",deleted:"提供者已刪除。",deleteTitle:"刪除提供者",deleteMessage:'刪除"{{name}}"?所有連結帳戶將斷開連線。',form:{name:"顯示名稱",issuerUrl:"頒發者 URL",clientId:"客戶端 ID",clientSecret:"客戶端金鑰",scopes:"作用域",iconUrl:"圖示 URL(可選)",enabled:"已啟用",autoCreate:"自動建立使用者",autoCreateDesc:"首次登入時自動建立本機帳戶。",autoLink:"自動連結已有帳戶",autoLinkDesc:"首次登入時透過信箱匹配現有本機帳戶並自動連結。",secretHint:"留空以保留目前",secretPlaceholder:"新金鑰"}}},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:{generic:"出了點問題",networkError:"網路錯誤。請檢查您的連線。",notFound:"未找到",unauthorized:"未授權",serverError:"伺服器錯誤",validationError:"請檢查您的輸入",printerConnectionFailed:"連線印表機失敗",saveFailed:"儲存更改失敗",deleteFailed:"刪除失敗",loadFailed:"載入資料失敗"},hmsErrors:{title:"錯誤 - {{name}}",noErrors:"無錯誤",viewOnWiki:"在拓竹 Wiki 上檢視",clearInstructions:"在印表機上清除錯誤以在此處消除它們。",clearErrors:"清除錯誤",clearSuccess:"HMS 錯誤已清除",clearFailed:"清除 HMS 錯誤失敗"},mqttDebug:{title:"MQTT 偵錯日誌",searchPlaceholder:"搜尋主題或負載...",noMessages:"尚未紀錄訊息",startLoggingHint:'點選"開始紀錄"以開始捕獲 MQTT 訊息',noMessagesMatch:"沒有訊息匹配您的篩選條件",adjustFilterHint:"嘗試調整您的搜尋或篩選條件",incoming:"傳入",outgoing:"傳出",loggingStopped:"紀錄已停止",loggingActive:"紀錄中 - 訊息將自動重新整理",startLogging:"開始紀錄",stopLogging:"停止紀錄",clearLog:"清除日誌",topic:"主題",timestamp:"時間戳",direction:"方向",all:"全部"},printerFiles:{title:"檔案管理器",storageUsed:"已用:",storageFree:"剩餘:",filterPlaceholder:"篩選檔案...",deleteButton:"刪除",deleteFiles:"刪除 {{count}} 個檔案",deleteFileConfirm:'刪除"{{name}}"?此操作無法復原。',deleteFilesConfirm:"刪除 {{count}} 個選中的檔案?此操作無法復原。",noFiles:"印表機上沒有檔案",loadingFiles:"載入檔案中...",failedToLoad:"載入檔案失敗",toast:{filesDeleted:"已刪除 {{count}} 個檔案",deleteFailed:"刪除失敗:{{error}}"}},confirm:{delete:"確定要刪除嗎?",unsavedChanges:"您有未儲存的更改。確定要離開嗎?",clearQueue:"確定要清空佇列嗎?"},login:{title:"Bambuddy 登入",subtitle:"登入您的帳戶",username:"使用者名稱",usernamePlaceholder:"輸入您的使用者名稱",usernameOrEmail:"使用者名稱或信箱",usernameOrEmailPlaceholder:"使用者名稱或 @ 信箱",password:"密碼",passwordPlaceholder:"輸入您的密碼",signIn:"登入",signingIn:"登入中...",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:{title:"Bambuddy 設定",subtitle:"為您的 Bambuddy 實例設定身份驗證",enableAuth:"啟用身份驗證",adminAccount:"管理員帳戶",adminAccountDesc:"如果管理員使用者已存在,將使用現有管理員帳戶啟用身份驗證。如需使用現有管理員,請將下方欄位留空,或輸入新憑據建立新管理員使用者。",adminUsername:"管理員使用者名稱",adminPassword:"管理員密碼",optionalIfAdminExists:"(如管理員使用者已存在則為可選)",adminUsernamePlaceholder:"輸入管理員使用者名稱(可選)",adminPasswordPlaceholder:"輸入管理員密碼(可選)",confirmPassword:"確認密碼",confirmPasswordPlaceholder:"確認管理員密碼",settingUp:"設定中...",completeSetup:"完成設定",toast:{authEnabledAdminCreated:"身份驗證已啟用並建立了管理員使用者",authEnabledExistingAdmins:"使用現有管理員使用者啟用了身份驗證",setupCompleted:"設定完成",enterBothCredentials:"請輸入管理員使用者名稱和密碼,或將兩者留空以使用現有管理員使用者",passwordsDoNotMatch:"密碼不符",passwordTooShort:"密碼至少需要 6 個字元"}},changePassword:{title:"修改密碼",currentPassword:"目前密碼",currentPasswordPlaceholder:"輸入目前密碼",newPassword:"新密碼",newPasswordPlaceholder:"輸入新密碼(至少 6 個字元)",confirmPassword:"確認新密碼",confirmPasswordPlaceholder:"確認新密碼",passwordsDoNotMatch:"密碼不符",passwordTooShort:"密碼至少需要 6 個字元",changing:"修改中...",success:"密碼修改成功",failed:"密碼修改失敗"},plateAlert:{title:"列印已暫停!",message:"在列印板上偵測到物體。列印已自動暫停。請清理列印板並繼續列印。",understand:"我知道了"},camera:{title:"攝影機檢視",invalidPrinterId:"無效的印表機 ID",live:"即時",snapshot:"快照",restartStream:"重新啟動流",refreshSnapshot:"重新整理快照",fullscreen:"全螢幕",exitFullscreen:"離開全螢幕",connectingToCamera:"連線攝影機中...",capturingSnapshot:"拍攝快照中...",connectionLost:"連線已斷開",connectionFailed:"攝影機連線失敗",reconnecting:"{{countdown}} 秒後重新連線...(第 {{attempt}}/{{max}} 次嘗試)",reconnectNow:"立即重新連線",cameraUnavailable:"攝影機不可用",cameraUnavailableDesc:"請確保印表機已通電並已連線。",noCamera:"無可用攝影機",retry:"重試",cameraStream:"攝影機流",zoomOut:"縮小",zoomIn:"放大",resetZoom:"重設縮放",recording:"錄製中",startRecording:"開始錄製",stopRecording:"停止錄製",chamberLight:"切換腔室燈"},groups:{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:{title:"使用者管理",subtitle:"管理使用者及其對 Bambuddy 實例的存取",backToSettings:"返回設定",createUser:"建立使用者",noPermission:"您沒有存取此頁面的權限。",admin:"管理員",noGroups:"無群組",active:"活躍",inactive:"非活躍",edit:"編輯",delete:"刪除",system:"系統",noGroupsAvailable:"無可用群組",table:{username:"使用者名稱",groups:"群組",status:"狀態",actions:"操作"},toast:{created:"使用者建立成功",updated:"使用者更新成功",deleted:"使用者刪除成功",fillRequired:"請填寫所有必填欄位",passwordsDoNotMatch:"密碼不符",passwordTooShort:"密碼至少需要 6 個字元"},modal:{createUser:"建立使用者",editUser:"編輯使用者",cancel:"取消",creating:"建立中...",saving:"儲存中...",saveChanges:"儲存更改",advancedAuthSubtitle:"使用進階認證"},form:{username:"使用者名稱",usernamePlaceholder:"輸入使用者名稱",email:"信箱",emailPlaceholder:"user@example.com",password:"密碼",passwordPlaceholder:"輸入密碼",confirmPassword:"確認密碼",confirmPasswordPlaceholder:"確認密碼",newPasswordPlaceholder:"輸入新密碼",confirmNewPasswordPlaceholder:"確認新密碼",leaveBlankToKeep:"留空以保持目前值",groups:"群組",optional:"可選",autoGeneratedPassword:"將自動產生安全密碼並透過郵件傳送給使用者。",passwordManagedByAdvancedAuth:'密碼由進階認證管理。使用"重設密碼"透過郵件向使用者傳送新密碼。',resetPassword:"重設密碼",resettingPassword:"重設密碼中..."},deleteModal:{title:"刪除使用者",message:"確定要刪除此使用者嗎?此操作無法復原。",confirm:"刪除使用者"}},streamOverlay:{title:"流疊加層",invalidPrinterId:"無效的印表機 ID",cameraStream:"攝影機流",progress:"進度",eta:"預計完成時間",printerIdle:"印表機空閒",printerOffline:"印表機離線",status:{printing:"列印中",paused:"已暫停",finished:"已完成",failed:"失敗",idle:"空閒",unknown:"未知"}},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:"貼上您的拓竹存取權杖(來自 Bambu Studio)",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:"比較",basePreset:"基礎預設",selectBasePreset:"選擇基礎預設...",presetName:"預設名稱",myCustomPreset:"我的自訂預設",inheritsFrom:"繼承自",dropJsonToImport:"拖放 JSON 以匯入",tabs:{common:"常用",allFields:"所有欄位"},availableFields:"可用欄位",searchFieldsPlaceholder:"搜尋欄位...",noMatchingFields:"沒有匹配的欄位",allFieldsAdded:"所有欄位已新增",addCustomField:"新增自訂欄位",yourOverrides:"您的覆蓋值",noOverridesYet:"尚無覆蓋值",clickFieldsToAdd:"點選左側的欄位進行新增",saveAsTemplate:"儲存為範本",jsonTip:"提示:將 .json 檔案拖放到此對話方塊的任意位置以匯入設定"},cloudView:{searchPlaceholder:"搜尋預設...",templates:"範本",refresh:"重新整理",newPreset:"新增預設",clearFilters:"清除篩選",compareMode:"比較模式",selectAnotherPreset:"選擇另一個 {{type}} 預設",clickTwoPresets:"點選兩個相同類型的預設進行比較",selectFirst:"1. 選擇第一個",selectSecond:"2. 選擇第二個",compareNow:"立即比較",lastSynced:"上次同步:",showingCount:"顯示 {{showing}} / {{total}} 個預設",noPresetsFound:"未找到預設",columns:{filament:"耗材",process:"工藝",printer:"印表機"},noFilamentPresets:"無耗材預設",noProcessPresets:"無工藝預設",noPrinterPresets:"無印表機預設",filters:{type:"類型",owner:"所有者",printer:"印表機",nozzle:"噴嘴",filament:"耗材",layer:"層",all:"全部",myPresets:"我的預設",builtIn:"內建",process:"工藝"},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:{debugLoggingActive:"偵錯日誌紀錄已啟用",manageLogs:"管理",collectItem7:"印表機連線和韌體版本",collectItem8:"整合狀態(Spoolman、MQTT、HA)",collectItem9:"網路介面(僅子網)",collectItem10:"Python 套件版本",collectItem11:"資料庫健康檢查",collectItem12:"Docker 環境詳情"},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:"停用文字換行",dragToResizeTooltip:"拖曳調整大小,雙擊重設",searchFiles:"搜尋檔案...",allTypes:"所有類型",prints:"列印",ascending:"升序",descending:"降序",resultsCount:"{{showing}} / {{total}} 個檔案",selectAll:"全選",deselectAll:"取消全選",selected:"已選擇 {{count}} 個",adding:"新增中...",loadingFiles:"載入檔案中...",folderIsEmpty:"資料夾為空",noFilesYet:"尚無檔案",folderEmptyDescription:"上傳檔案或將檔案移入此資料夾以開始使用。",noFilesDescription:"上傳檔案以開始組織您的列印相關檔案。",noMatchingFiles:"沒有匹配的檔案",noMatchingFilesDescription:"沒有檔案匹配您目前的搜尋或篩選條件。",clearFilters:"清除篩選",printedCount:"已列印 {{count}} 次",uploadedBy:"上傳者",deleteFolder:"刪除資料夾",deleteFile:"刪除檔案",deleteFilesCount:"刪除 {{count}} 個檔案",deleteFolderConfirm:"確定要刪除此資料夾嗎?其中的所有檔案也將被刪除。",deleteFileConfirm:"確定要刪除此檔案嗎?",deleteFilesConfirm:"確定要刪除 {{count}} 個選中的檔案嗎?此操作無法復原。",deleting:"刪除中...",noPermissionRenameFolder:"您沒有重新命名資料夾的權限",noPermissionLinkFolder:"您沒有連結資料夾的權限",noPermissionDeleteFolder:"您沒有刪除資料夾的權限",noPermissionPrint:"您沒有列印的權限",noPermissionAddToQueue:"您沒有新增到佇列的權限",noPermissionDownload:"您沒有下載檔案的權限",noPermissionRenameFile:"您沒有重新命名此檔案的權限",noPermissionGenerateThumbnail:"您沒有產生縮圖的權限",noPermissionDeleteFile:"您沒有刪除此檔案的權限",noPermissionCreateFolder:"您沒有建立資料夾的權限",noPermissionUpload:"您沒有上傳檔案的權限",noPermissionMoveFiles:"您沒有移動檔案的權限",noPermissionDeleteFiles:"您沒有刪除檔案的權限",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:{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:"檢視詳情",namePlaceholder:"例如:Voron 2.4 構建",descriptionPlaceholder:"可選描述...",color:"顏色",targetPlates:"目標板數",targetPlatesPlaceholder:"例如:25",targetPlatesHelp:"列印任務數量",targetParts:"目標零件數",targetPartsPlaceholder:"例如:150",targetPartsHelp:"所需零件總數",tagsLabel:"標籤(逗號分隔)",tagsPlaceholder:"例如:voron、功能件、禮物",dueDate:"截止日期",priority:"優先順序",priorityLow:"低",priorityNormal:"普通",priorityHigh:"高",priorityUrgent:"緊急",statusActive:"進行中",statusCompleted:"已完成",statusArchived:"已歸檔",done:"完成",completed:"已完成",failed:"失敗",inQueue:"佇列中",noPrintsYet:"尚無列印",printJobs:"列印任務(板)",partsPrinted:"已列印零件",failedParts:"失敗零件",import:"匯入",export:"匯出",importProject:"匯入專案",exportAll:"匯出所有專案",loading:"載入專案中...",noEditPermission:"您沒有編輯專案的權限",noDeletePermission:"您沒有刪除專案的權限",noCreatePermission:"您沒有建立專案的權限",noImportPermission:"您沒有匯入專案的權限",noExportPermission:"您沒有匯出專案的權限",toast:{created:"專案已建立",updated:"專案已更新",deleted:"專案已刪除",imported:"專案已匯入",multipleImported:"已匯入 {{count}} 個項目",importFailed:"匯入失敗",exported:"專案已匯出(僅中繼資料)"}},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:{title:"系統資訊",version:"版本",uptime:"執行時間",cpuUsage:"CPU 使用率",memoryUsage:"記憶體使用率",diskUsage:"磁碟使用率",networkInfo:"網路資訊",logs:"日誌",debugMode:"偵錯模式",enableDebug:"啟用偵錯日誌",disableDebug:"停用偵錯日誌",downloadLogs:"下載日誌",clearLogs:"清除日誌",dockerInfo:"Docker 資訊",containerName:"容器名稱",imageName:"映象名稱",platform:"平臺",architecture:"架構"},library:{title:"耗材庫",addFilament:"新增耗材",editFilament:"編輯耗材",deleteFilament:"刪除耗材",vendor:"廠商",material:"材料",color:"顏色",kFactor:"K 值",temperature:"溫度",noFilaments:"耗材庫中沒有耗材",deleteConfirm:"確定要刪除此耗材嗎?",importFromPrinter:"從印表機匯入",exportToFile:"匯出到檔案"},spoolman:{title:"Spoolman 整合",enabled:"Spoolman 已啟用",url:"Spoolman URL",connected:"已連線",disconnected:"未連線",testConnection:"測試連線",sync:"同步",syncing:"同步中...",lastSync:"上次同步",linkToSpoolman:"連結到 Spoolman",openInSpoolman:"在 Spoolman 中開啟",unlinkSpool:"取消連結耗材",unlinkConfirmTitle:"解開料盤?",unlinkConfirmMessage:"這將斷開卷軸與 Spoolman 的連線。Spoolman 中的卷軸資料將保持不變。",selectSpool:"選擇耗材",noUnlinkedSpools:"無未連結的耗材",linkSuccess:"耗材已成功連結到 Spoolman",linkFailed:"連結耗材失敗",unlinkSuccess:"已成功從 Spoolman 取消連結耗材",unlinkFailed:"取消連結耗材失敗",spoolId:"耗材 ID",fillSourceLabel:"(Spoolman)",weight:"重量",remaining:"剩餘",disableWeightSync:"停用 AMS 估計重量同步",disableWeightSyncDesc:"不從 AMS 估計值更新剩餘容量。如果您更喜歡 Spoolman 的用量追蹤而非 AMS 百分比估計,請使用此選項。新耗材仍將使用 AMS 估計值作為初始重量。",reportPartialUsage:"報告失敗列印的部分用量",reportPartialUsageDesc:"當列印失敗或被取消時,根據層進度報告估計的耗材使用量。"},inventory:{title:"耗材庫存",addSpool:"新增耗材",editSpool:"編輯耗材",material:"材料",selectMaterial:"選擇材料...",subtype:"子類型",brand:"品牌",searchBrand:"搜尋品牌...",useCustomBrand:'使用"{{brand}}"',useCustomMaterial:"使用自訂材料:{{material}}",colorName:"顏色名稱",colorNamePlaceholder:"翡翠白、烈焰紅...",color:"顏色",hexColor:"十六進位顏色",pickColor:"選擇自訂顏色",labelWeight:"標籤重量",coreWeight:"空盤重量",searchSpoolWeight:"搜尋耗材重量...",weightUsed:"已使用",currentWeight:"剩餘重量",measuredWeight:"稱量重量",spoolName:"料盤",costPerKg:"每公斤成本",measuredWeightError:"稱量重量必須在 {{min}}g 到 {{max}}g 之間。",slicerFilament:"切片耗材",slicerFilamentName:"切片預設名稱",slicerPreset:"切片預設",searchPresets:"搜尋耗材預設...",selectedPreset:"已選擇",noPresetsFound:"未找到預設",tempOverrides:"溫度覆蓋",note:"備註",notePlaceholder:"關於此耗材的任何備註...",archive:"歸檔",restore:"恢復",noSpools:"尚無耗材。新增您的第一個耗材開始使用。",noManualSpools:"沒有手動新增的耗材。請先向庫存中新增耗材。",kProfiles:"K 值設定",addKProfile:"新增 K 值設定",assignSpool:"分配耗材",unassignSpool:"取消分配",assignSuccess:"耗材已分配,AMS 槽位已設定",assignFailed:"分配耗材失敗",assignMismatchTitle:"材料不符",assignMismatchMessage:'所選料盤材料 "{{spoolMaterial}}" 與 {{location}} 的料槽材料 "{{trayMaterial}}" 不符。仍要分配嗎?',assignMismatchConfirm:"仍然分配",assignPartialMismatchMessage:'料盤材料 "{{spoolMaterial}}" 與 {{location}} 的 "{{trayMaterial}}" 相近但不完全一致。是否繼續?',assignProfileMismatchMessage:'料盤設定 "{{spoolProfile}}" 與 {{location}} 的料槽設定 "{{trayProfile}}" 不一致。是否繼續?',selectSpool:"選擇要分配到此槽位的耗材",assigned:"已分配",assigning:"分配中...",searchSpools:"搜尋耗材...",showAllSpools:"顯示所有耗材",allMaterials:"所有材料",filterByBrand:"按品牌篩選...",showArchived:"顯示已歸檔",quickAdd:"快速新增(庫存)",quantity:"數量",stock:"庫存",configured:"已設定",spoolsCreated:"已建立 {{count}} 個耗材",spoolCreated:"耗材已建立",spoolUpdated:"耗材已更新",spoolDeleted:"耗材已刪除",spoolArchived:"耗材已歸檔",spoolRestored:"耗材已恢復",deleteConfirm:"確定要刪除此耗材嗎?此操作無法復原。",archiveConfirm:"確定要歸檔此耗材嗎?",advancedSettings:"進階設定",filamentInfoTab:"耗材資訊",paProfileTab:"PA 設定",filamentInfo:"耗材",additional:"附加",loadingPresets:"載入雲端預設中...",cloudConnected:"雲端已連線",cloudNotConnected:"雲端未連線(使用預設值)",recentColors:"最近",searchColors:"搜尋顏色...",searchResults:"搜尋結果",allColors:"所有顏色",commonColors:"常用顏色",showLess:"顯示更少",showAll:"顯示全部",noColorsFound:"沒有顏色匹配您的搜尋",noResults:"未找到匹配項",selectMaterialFirst:"請先在耗材資訊分頁中選擇材料。",noPrintersConfigured:"未設定印表機。新增印表機以使用 PA 設定。",matchingFilter:"匹配",anyBrand:"任何品牌",anyVariant:"任何變體",autoSelect:"自動選擇",matches:"匹配",match:"匹配",noMatches:"無匹配",connected:"已連線",offline:"離線",printerOffline:"印表機離線。連線後檢視校準設定。",noKProfilesMatch:"沒有 K 值設定匹配所選耗材。",leftNozzle:"左噴嘴",rightNozzle:"右噴嘴",profilesSelected:"個校準設定已選擇",totalInventory:"總庫存",totalConsumed:"總消耗",byMaterial:"按材料",inPrinter:"在印表機中",lowStock:"庫存不足",sinceTracking:"自開始追蹤",loadedInAms:"已裝載到 AMS/外接",remaining:"剩餘",weightCheck:"重量檢查",lastWeighed:"上次稱量",neverWeighed:"從未稱量",search:"搜尋耗材...",showing:"顯示",to:"到",of:"共",show:"顯示",spools:"個耗材",spool:"個耗材",page:"頁",noSpoolsMatch:"未找到結果",noSpoolsMatchDesc:"嘗試調整您的搜尋或篩選條件。",active:"活躍",archived:"已歸檔",all:"全部",used:"已使用",new:"新的",clearFilters:"清除篩選",table:"表格",cards:"卡片",net:"淨重",groupSimilar:"分組",groupedSpools:"{{count}} 個相同耗材",groupedRows:"行",columns:"列",configureColumns:"設定列",configureColumnsDesc:"拖曳以重新排序列或使用箭頭。使用眼睛圖示切換可見性。",visible:"可見",reset:"重設",cancel:"取消",applyChanges:"套用更改",moveUp:"上移",moveDown:"下移",hideColumn:"隱藏列",showColumn:"顯示列",linkToSpool:"連結到耗材",tagLinked:"標籤已連結到耗材",tagLinkFailed:"連結標籤失敗",tagAlreadyLinked:"標籤已連結到其他耗材",unknownTag:"偵測到未知 RFID 標籤",usageHistory:"使用歷史",noUsageHistory:"尚無使用紀錄",printName:"列印名稱",weightConsumed:"消耗重量",clearHistory:"清除",historyCleared:"使用歷史已清除",fillSourceLabel:"(庫存)",lowStockThresholdError:"閾值必須在 0.1 到 99.9 之間"},timelapse:{title:"縮時攝影",create:"建立縮時攝影",download:"下載",delete:"刪除",preview:"預覽",frameRate:"幀率",quality:"品質",processing:"處理中...",noTimelapses:"無可用縮時攝影"},ams:{title:"AMS",slot:"槽位",empty:"空",emptySlot:"空槽位",unknown:"未知",humidity:"濕度",temperature:"溫度",filamentType:"耗材類型",filamentColor:"顏色",remaining:"剩餘",history:"AMS 歷史",noHistory:"無可用歷史",configureSlot:"設定槽位",externalSpool:"外接耗材",profile:"設定",kFactor:"K 值",fill:"填充",configure:"設定",used:"已使用",remainingUnit:"剩餘"},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:{title:"備份與恢復",createBackup:"建立備份",restoreBackup:"恢復備份",restoreDescription:"從備份檔案替換所有資料",downloadBackup:"下載備份",uploadBackup:"上傳備份",lastBackup:"上次備份",autoBackup:"自動備份",backupNow:"立即備份",restoreWarning:"警告:恢復備份將覆蓋所有目前資料。",includeArchives:"包含歸檔",includeSettings:"包含設定",includeProfiles:"包含設定檔案",backupSuccess:"備份建立成功",restoreSuccess:"備份恢復成功",backupFailed:"備份失敗",restoreFailed:"恢復失敗",restoreNote:"恢復期間虛擬印表機將停止",githubBackup:"GitHub 備份",enabled:"已啟用",cloudLoginRequired:"需要登入 Bambu Cloud。請在 設定檔案 → 雲設定檔案 中登入以啟用 GitHub 備份。",cloudLoginRequiredShort:"需要雲端登入",githubDescription:"自動將您的設定檔案同步到私有 GitHub 倉庫以進行備份和版本歷史紀錄。",repositoryUrl:"倉庫 URL",personalAccessToken:"個人存取權杖",tokenSaved:"(已儲存)",enterNewToken:"輸入新權杖以更新",tokenHint:"具有內容讀寫權限的細粒度權杖",branch:"分支",manualOnly:"僅手動",hourly:"每小時",daily:"每天",weekly:"每週",includeInBackup:"包含在備份中",kProfiles:"K 設定檔案",kProfilesDescription:"來自已連線印表機的壓力推進校準",noPrintersConnected:"沒有印表機連線",printersConnected:"{{connected}}/{{total}} 已連線",cloudProfiles:"雲設定檔案",cloudProfilesDescription:"來自 Bambu Cloud 的耗材、印表機和工藝預設",appSettings:"應用程式設定",appSettingsDescription:"Bambuddy 設定(完整資料庫)",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:"歷史紀錄",clear:"清除",date:"日期",status:"狀態",commit:"提交",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:"請不要關閉此頁面或離開頁面。對於大型備份,此操作可能需要幾分鐘。",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:"關閉",scheduledBackup:"排程備份",scheduledBackupDescription:"依排程自動建立備份快照。輸出目錄可掛載到 NAS 或外部儲存。",frequency:"頻率",backupTime:"時間",retention:"保留",retentionDescription:"保留的備份數量",outputPath:"輸出路徑",outputPathPlaceholder:"預設:{{path}}",outputPathDescription:"留空以使用預設位置",runNow:"立即執行",backupFiles:"備份檔案",noScheduledBackups:"尚無備份",deleteBackup:"刪除",deleteBackupConfirm:"要刪除此備份檔案嗎?",backupRunning:"備份進行中…",scheduledBackupComplete:"備份已成功完成",scheduledBackupFailed:"備份失敗",nextBackup:"下次備份",backupSize:"大小",utc:"UTC",defaultPathLabel:"預設:",categories:{settings:"設定",notification_providers:"通知提供者",notification_templates:"通知範本",smart_plugs:"智慧插座",printers:"印表機",filaments:"耗材",maintenance_types:"維護類型",archives:"檔案",projects:"專案",pending_uploads:"待上傳",external_links:"外部連結",api_keys:"API 金鑰"}},tags:{title:"標籤",addTag:"新增標籤",editTag:"編輯標籤",deleteTag:"刪除標籤",tagName:"標籤名稱",tagColor:"標籤顏色",noTags:"無標籤",deleteConfirm:"確定要刪除此標籤嗎?",manageTags:"管理標籤"},uploadModal:{title:"上傳 3MF 檔案",dragDrop:"將 .3mf 檔案拖放到此處",or:"或",browseFiles:"瀏覽檔案",extractionInfo:"將從 3MF 檔案中繼資料中自動提取印表機型號。",uploaded:"已上傳",failed:"失敗",uploading:"上傳中...",upload:"上傳",uploadFailed:"上傳失敗"},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:"儲存中...",failureReasons:{adhesionFailure:"附著力失敗",spaghettiDetached:"拉絲 / 脫落",layerShift:"層偏移",cloggedNozzle:"噴嘴堵塞",filamentRunout:"耗材用完",warping:"翹曲",stringing:"拉絲",underExtrusion:"擠出不足",powerFailure:"斷電",userCancelled:"使用者取消",other:"其他"},statuses:{completed:"已完成",failed:"失敗",aborted:"已取消",printing:"列印中"}},kProfiles:{title:"K 值設定",noPrintersConfigured:"未設定印表機",addPrinterInSettings:"在設定中新增印表機以管理 K 值設定",noActivePrinters:"無活躍印表機",enablePrinterConnection:"啟用印表機連線以檢視其 K 值設定",loadingProfiles:"載入 K 值設定中...",printerOffline:"印表機離線",printerOfflineDesc:"所選印表機未連線。開啟電源以檢視 K 值設定。",noMatchingProfiles:"無匹配的設定",noMatchingProfilesDesc:"沒有設定匹配您的搜尋條件",noKProfiles:"無 K 值設定",noKProfilesDesc:"未找到 {{diameter}}mm 噴嘴的壓力推進設定",createFirstProfile:"建立第一個設定",printer:"印表機",nozzle:"噴嘴",refresh:"重新整理",addProfile:"新增設定",export:"匯出",import:"匯入",select:"選擇",selectAll:"全選",delete:"刪除",searchPlaceholder:"按名稱或耗材搜尋...",allExtruders:"所有擠出機",leftOnly:"僅左側",rightOnly:"僅右側",allFlow:"所有流量",hfOnly:"僅高流量",sOnly:"僅標準",sortName:"排序:名稱",sortKValue:"排序:K 值",sortFilament:"排序:耗材",leftExtruder:"左擠出機",rightExtruder:"右擠出機",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:"請稍候"},deleteConfirm:{title:"刪除設定",cannotUndo:"此操作無法復原",message:'確定要從印表機刪除"{{name}}"嗎?'},bulkDelete:{title:"刪除設定",cannotUndo:"此操作無法復原",message:"確定要從印表機刪除 {{count}} 個選中的設定嗎?"},toast:{profileSaved:"K 值設定已儲存",profilesSaved:"K 值設定已儲存到 {{count}} 個擠出機",selectAtLeastOneExtruder:"請至少選擇一個擠出機",profileDeleted:"K 值設定已刪除",profilesDeleted:"已刪除 {{count}} 個設定",exportedProfiles:"已匯出 {{count}} 個設定",importedProfiles:"已匯入 {{count}} / {{total}} 個設定",noProfilesToExport:"無可匯出的設定",invalidFileFormat:"無效的檔案格式",failedToParseImport:"解析匯入檔案失敗",failedToSaveBatch:"批次儲存 K 值設定失敗",noteSaved:"備註已儲存",failedToSaveNote:"儲存備註失敗"},permission:{noRead:"您沒有重新整理設定的權限",noCreate:"您沒有新增設定的權限",noUpdate:"您沒有更新 K 值設定的權限",noDelete:"您沒有刪除 K 值設定的權限",noExport:"您沒有匯出設定的權限",noImport:"您沒有匯入設定的權限"}},virtualPrinter:{title:"虛擬印表機",running:"執行中",stopped:"已停止",description:{default:"啟用虛擬印表機,使其在 Bambu Studio 和 OrcaSlicer 中可見。傳送到此印表機的檔案將直接歸檔而不列印。",proxy:"啟用代理,將切片軟體流量中繼到真實印表機,允許在任何網路上遠端列印。"},enable:{title:"啟用虛擬印表機",visibleInSlicer:'在切片軟體發現中顯示為"Bambuddy"',proxyingTo:"代理到 {{name}}",notActive:"未啟用"},model:{title:"印表機型號",description:"選擇要模擬的印表機型號。",restartWarning:"更改型號將重新啟動虛擬印表機"},accessCode:{title:"存取碼",isSet:"存取碼已設定",notSet:"未設定存取碼 - 需要設定才能啟用",placeholder:"輸入 8 位字元程式碼",placeholderChange:"輸入新程式碼以更改",hint:"必須恰好 8 個字元。切片軟體使用此程式碼進行認證。",charCount:"({{count}}/8)"},targetPrinter:{title:"目標印表機",configured:"代理目標已設定",notConfigured:"未選擇目標印表機 - 代理模式需要設定",placeholder:"選擇印表機...",hint:"選擇要將切片軟體流量代理到的印表機。印表機必須處於區域網路模式。",noPrinters:"未設定印表機。請先新增印表機以使用代理模式。"},remoteInterface:{title:"網路介面覆蓋",configured:"介面覆蓋已啟用",optional:"可選 - 當自動檢測的 IP 不正確時使用(例如多網路卡、Docker、VPN)",placeholder:"自動檢測(預設)...",hint:"覆蓋透過 SSDP 廣播並在 TLS 憑證中使用的 IP 位址。在 Bambuddy 有多個網路介面時很有用。"},mode:{title:"模式",archive:"歸檔",archiveDesc:"立即歸檔檔案",review:"審核",reviewDesc:"歸檔前審核",queue:"佇列",queueDesc:"歸檔並新增到佇列",proxy:"代理",proxyDesc:"中繼到真實印表機"},autoDispatch:{title:"自動派發",description:"新增到佇列時自動開始列印。關閉後,列印任務等待手動派發。"},setupRequired:{title:"需要設定",description:"虛擬印表機功能需要額外的系統設定才能工作。包括埠轉發、防火牆規則和平臺特定設定。",readGuide:"啟用前請閱讀設定指南"},howItWorks:{title:"工作原理",step1:"在同一區域網路中,虛擬印表機會透過發現機制自動出現在您的切片軟體(Bambu Studio / OrcaSlicer)中。從其他網路,透過 IP 位址和存取碼手動新增。",step2:'在歸檔、審核和佇列模式下,使用切片軟體中的"傳送"按鈕將 3MF 檔案上傳到 Bambuddy。切片軟體會顯示"列印成功"— 檔案已儲存,未列印。',step3:"在代理模式下,虛擬印表機將所有流量中繼到真實印表機 — 列印會立即開始,就像直接連線一樣。"},status:{title:"狀態詳情",printerName:"印表機名稱",model:"型號",serialNumber:"序列號",mode:"模式",pendingFiles:"待處理檔案",targetPrinter:"目標印表機",ftpPort:"FTP 連接埠",mqttPort:"MQTT 連接埠",ftpConnections:"FTP 連線",mqttConnections:"MQTT 連線"},toast:{updated:"虛擬印表機設定已更新",failedToUpdate:"更新設定失敗",accessCodeRequired:"請先設定存取碼",targetPrinterRequired:"請先選擇目標印表機",bindIpRequired:"請先設定繫結 IP",accessCodeEmpty:"存取碼不能為空",accessCodeLength:"存取碼必須恰好 8 個字元",created:"虛擬印表機已建立",failedToCreate:"建立虛擬印表機失敗",deleted:"虛擬印表機已刪除",failedToDelete:"刪除虛擬印表機失敗"},list:{title:"虛擬印表機",add:"新增",addFirst:"新增虛擬印表機",empty:"未設定虛擬印表機。新增一個以開始使用。"},bindIp:{title:"繫結介面",placeholder:"選擇介面...",hint:"此虛擬印表機繫結的網路介面。每臺印表機必須唯一。"},proxy:{accessCodeHint:"在代理模式下,在切片軟體中使用目標印表機的存取碼。連線會透明轉發到真實印表機。"},addDialog:{title:"新增虛擬印表機",name:"名稱",hint:"建立後可以設定存取碼、目標印表機和其他設定。",create:"建立"},deleteConfirm:{title:"刪除虛擬印表機",message:'確定要刪除"{{name}}"嗎?這將停止此印表機的所有服務。'}},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:"不支援的檔案格式"}},maintenanceDescriptions:{lubricateCarbonRods:"在碳纖維杆上塗抹潤滑劑以確保順暢運動",lubricateRails:"在線性導軌上塗抹潤滑劑以確保順暢運動",cleanNozzle:"清潔熱端和噴嘴以防止堵塞",checkBelts:"檢查皮帶張力以確保列印精度",cleanBuildPlate:"清潔列印板以獲得更好的附著力",checkExtruder:"檢查擠出機齒輪磨損情況",checkCooling:"確保冷卻風扇正常工作",generalInspection:"印表機綜合檢查",cleanCarbonRods:"清潔碳纖維杆以減少摩擦",lubricateSteelRods:"在鋼杆上塗抹潤滑劑以確保順暢運動",cleanSteelRods:"清潔鋼杆以減少摩擦",cleanLinearRails:"擦拭線性導軌以清除灰塵和碎屑",checkPtfeTube:"檢查 PTFE 管的磨損或損壞",replaceHepaFilter:"更換 HEPA 過濾器以保證空氣品質",replaceCarbonFilter:"更換活性炭過濾器",lubricateLeftNozzleRail:"潤滑左噴嘴導軌(H2 系列)"},smartPlugs:{offline:"離線",admin:"管理",openPlugAdminPage:"開啟插座管理頁面",deleteSmartPlug:"刪除智慧插座",turnOnSmartPlug:"開啟智慧插座",turnOffSmartPlug:"關閉智慧插座",turnOn:"開啟",turnOff:"關閉",addSmartPlug:{scanningNetwork:"掃描網路中...",chooseEntity:"選擇實體...",connectionFailed:"連線失敗",searchEntities:"搜尋實體...",searchPowerSensors:"搜尋功率感測器...",searchEnergySensors:"搜尋能量感測器...",placeholders:{plugName:"客廳插座",mqttStateOnValue:"ON、true、1",mqttSameAsPower:"與功率主題相同,或不同"}},linkedTo:"連結到:",monitorOnly:"僅監控",alerts:"警報",scheduleOn:"開啟 {{time}}",scheduleOff:"關閉 {{time}}",on:"開啟",off:"關閉",power:"功率",kwhToday:"今日kWh",settings:"設定",automationSettings:"自動化設定",showInSwitchbar:"在開關欄顯示",quickAccessSidebar:"從側邊欄快速存取",enabled:"已啟用",enableAutomation:"為此插座啟用自動化",autoOn:"自動開啟",autoOnDescription:"列印開始時開啟",autoOff:"自動關閉",autoOffDescription:"列印完成時關閉(一次性)",autoOffPersistent:"保持啟用",autoOffPersistentDescription:"在列印之間保持啟用而非一次性",turnOffDelayMode:"關閉延遲模式",time:"時間",temp:"溫度",delayMinutes:"延遲(分鐘)",tempThreshold:"溫度閾值(°C)",tempThresholdDescription:"當噴嘴冷卻到此溫度以下時關閉",edit:"編輯",deleteConfirm:'確定要刪除"{{name}}"嗎?此操作無法復原。',turnOnConfirm:'確定要開啟"{{name}}"嗎?',turnOffConfirm:'確定要關閉"{{name}}"嗎?這將切斷連線裝置的電源。',failedToTurn:'無法{{action}}"{{name}}"',unknown:"未知",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")。如果主題發布原始數值,請留空。 +乘數:mW→W使用0.001,kW→W使用1000。`,mqttEnergyHint:`JSON路徑從JSON負載中提取值。原始值請留空。 +乘數:Wh→kWh使用0.001,MWh→kWh使用1000。`,mqttStateHint:`JSON路徑從JSON負載中提取值。原始值請留空。 +ON值:表示"ON"的確切字串。留空以自動檢測(ON、true、1)。`,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:{providerTypes:{callmebot:"CallMeBot/WhatsApp",ntfy:"ntfy",pushover:"Pushover",telegram:"Telegram",email:"電子郵件",discord:"Discord",webhook:"Webhook",homeassistant:"Home Assistant"},providerDescriptions:{email:"SMTP 電子郵件通知",telegram:"透過 Telegram 機器人傳送通知",discord:"透過 Webhook 傳送到 Discord 頻道",ntfy:"免費、可自託管的推送通知",pushover:"簡單、可靠的推送通知",callmebot:"透過 CallMeBot 免費傳送 WhatsApp 通知",webhook:"通用 HTTP POST 到任意 URL",homeassistant:"Home Assistant 儀表板中的持久通知"},lastSuccess:"上次:{{date}}",error:"錯誤",printer:"印表機:",allPrinters:"所有印表機",sendTestNotification:"傳送測試通知",eventSettings:"事件設定",enabled:"已啟用",sendFromProvider:"從此提供者傳送通知",printEvents:"列印事件",printerStatus:"印表機狀態",amsAlarms:"AMS 警報",amsHtAlarms:"AMS-HT 警報",printQueue:"列印佇列",start:"開始",plateCheck:"熱床檢測",complete:"完成",failed:"失敗",stopped:"已停止",progress:"進度",offline:"離線",lowFilament:"耗材不足",maintenance:"維護",amsHumidity:"AMS 濕度",amsTemp:"AMS 溫度",amsHtHumidity:"AMS-HT 濕度",amsHtTemp:"AMS-HT 溫度",bedCooled:"熱床已冷卻",firstLayer:"首層完成",quiet:"免打擾",digest:"摘要 {{time}}",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 溫度超過閾值",jobAdded:"任務已新增",jobAddedDescription:"任務已新增到佇列",jobAssigned:"任務已分配",jobAssignedDescription:"基於模型的任務已分配給印表機",jobStarted:"任務已開始",jobStartedDescription:"佇列任務已開始列印",jobWaiting:"任務等待中",jobWaitingDescription:"任務正在等待耗材或印表機",jobSkipped:"任務已跳過",jobSkippedDescription:"任務已跳過(上一個失敗)",jobFailed:"任務失敗",jobFailedDescription:"任務啟動失敗",queueComplete:"佇列已完成",queueCompleteDescription:"所有佇列任務已完成",quietHours:"免打擾時段",noNotificationsDuring:"在此時段內不傳送通知",editProviderToChangeQuietHours:"編輯提供者以更改免打擾時段",dailyDigest:"每日摘要",batchNotifications:"將通知彙總為每日摘要",sendAt:"傳送於 {{time}}",editProviderToChangeDigestTime:"編輯提供者以更改摘要時間",edit:"編輯",deleteProvider:"刪除通知提供者",deleteConfirm:'確定要刪除"{{name}}"嗎?此操作無法復原。',delete:"刪除",addTitle:"新增通知提供者",editTitle:"編輯通知提供者",nameLabel:"名稱 *",namePlaceholder:"我的通知",providerTypeLabel:"提供者類型 *",configuration:"設定",testConfiguration:"測試設定",printerFilter:"印表機篩選",onlyFromPrinter:"僅傳送來自此印表機的事件通知",quietHoursDnd:"免打擾時段",quietStart:"開始",quietEnd:"結束",dailyDigestLabel:"每日摘要",sendDigestAt:"傳送摘要於",digestCollected:"事件將被收集並在此時間作為單條摘要傳送",notificationEvents:"通知事件",progressPercent:"(25%、50%、75%)",bedCooledAfterPrint:"(列印完成後)",cancel:"取消",save:"儲存",add:"新增",nameRequired:"名稱為必填項",fieldRequired:"{{field}}為必填項",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:"訊息欄位名",editTemplate:"編輯範本:{{name}}",titleLabel:"標題",bodyLabel:"正文",titlePlaceholder:"通知標題...",bodyPlaceholder:"通知正文...",availableVariables:"可用變數",clickToInsert:"點選插入到正文游標位置",livePreview:"即時預覽",hide:"隱藏",show:"顯示",loadingPreview:"載入預覽中...",enterTemplateContent:"輸入範本內容以檢視預覽",titlePreview:"標題:",bodyPreview:"正文:",resetToDefault:"恢復預設",titleRequired:"標題為必填項",bodyRequired:"正文為必填項",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}} 條失敗",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:"儲存通知偏好設定失敗。"}},richTextEditor:{bold:"粗體",italic:"斜體",underline:"底線",bulletList:"無序列表",numberedList:"有序列表",alignLeft:"左對齊",alignCenter:"居中對齊",alignRight:"右對齊",addLink:"新增連結",removeLink:"移除連結"},externalLinks:{noLinksConfigured:"未設定外部連結",deleteLink:"刪除連結",removeCustomIcon:"移除自訂圖示",openInNewTab:"在新標籤頁中開啟",placeholders:{linkName:"我的連結"}},keyboardShortcuts:{title:"鍵盤快捷鍵",navigation:"導航",archivesSection:"歸檔",kProfilesSection:"K 值設定",generalSection:"通用",shortcuts:{goToPrinters:"前往印表機",goToArchives:"前往歸檔",goToQueue:"前往佇列",goToStats:"前往統計",goToProfiles:"前往雲端設定",goToSettings:"前往設定",focusSearch:"聚焦搜尋",openUploadModal:"開啟上傳對話方塊",clearSelection:"清除選擇 / 取消焦點",contextMenu:"卡片右鍵選單",refreshProfiles:"重新整理設定",newProfile:"新增設定",exitSelectionMode:"結束選擇模式",showHelp:"顯示此協助"},footer:"按 Esc 或點選外部關閉"},notificationLog:{title:"通知日誌",events:{printStarted:"列印開始",printComplete:"列印完成",printFailed:"列印失敗",printStopped:"列印停止",progress:"進度",printerOffline:"印表機離線",printerError:"印表機錯誤",lowFilament:"耗材不足",maintenanceDue:"維護到期",test:"測試"},timeAgo:{justNow:"剛剛",minutesAgo:"{{minutes}} 分鐘前",hoursAgo:"{{hours}} 小時前"}},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:"恢復備份失敗。請檢查檔案格式。"},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}} 個類別"},pendingUploads:{placeholders:{notes:"新增關於此列印的備註..."},discardUpload:"丟棄上傳",archiveAllUploads:"歸檔所有上傳",discardAllUploads:"丟棄所有上傳",archive:"歸檔",timeAgo:{justNow:"剛剛",minutesAgo:"{{minutes}} 分鐘前",hoursAgo:"{{hours}} 小時前",daysAgo:"{{days}} 天前"}},apiBrowser:{placeholders:{requestBody:"JSON 請求體...",searchEndpoints:"搜尋端點..."}},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:"設定槽位"},githubBackup:{title:"GitHub 備份",history:"歷史",downloadBackup:"下載備份",restoreBackup:"恢復備份",noBackupsYet:"尚無備份"},emailSettings:{placeholders:{fromName:"BamBuddy"}},tagManagement:{searchTags:"搜尋標籤...",renameTag:"重新命名標籤",deleteTag:"刪除標籤"},notificationTemplates:{placeholders:{title:"通知標題...",body:"通知正文..."}},batchTag:{placeholders:{newTag:"輸入新標籤..."}},photoGallery:{deletePhoto:"刪除照片"},filamentHoverCard:{copySpoolUuid:"複製耗材 UUID"},kProfilesView:{hasNote:"有備註",copyProfile:"複製設定"},layout:{openMenu:"開啟選單",noPermissionSystemInfo:"您沒有檢視系統資訊的權限"},dashboard:{dragToReorder:"拖曳以重新排列",hideWidget:"隱藏小工具"},notificationProviderCard:{deleteNotificationProvider:"刪除通知提供者"},fileManagerModal:{closeFileManager:"關閉檔案管理器",sortFiles:"排序檔案",goToParentFolder:"返回上級資料夾",threeView:"3D 檢視"},embeddedCameraViewer:{refreshStream:"重新整理流",close:"關閉",zoomOut:"縮小",resetZoom:"重設縮放",zoomIn:"放大",dragToResize:"拖曳調整大小"},timelapseViewer:{skipBack5s:"後退 5 秒",skipForward5s:"前進 5 秒"},notificationProviders:{descriptions:{email:"SMTP 郵件通知",telegram:"透過 Telegram 機器人通知",discord:"透過 Webhook 傳送到 Discord 頻道",ntfy:"免費、可自託管的推送通知",pushover:"簡單、可靠的推送通知",callmebot:"透過 CallMeBot 的免費 WhatsApp 通知",webhook:"通用 HTTP POST 到任意 URL"}},logViewer:{searchPlaceholder:"搜尋訊息或日誌名稱...",noLogEntries:"未找到日誌條目"},switchbarPopover:{noSwitchesInSwitchbar:"切換欄中沒有開關"},projectPageModal:{placeholders:{title:"標題",designer:"設計師",license:"許可證",description:"輸入描述...",profileTitle:"設定標題",profileDescription:"設定描述..."}},spoolmanSettings:{},time:{unknown:"-",waiting:"等待中",justNow:"剛剛",now:"現在",minsAgo:"{{count}} 分鐘前",inMins:"{{count}} 分鐘後",hoursAgo:"{{count}} 小時前",inHours:"{{count}} 小時後",daysAgo:"{{count}} 天前",inDays:"{{count}} 天後"},spoolbuddy:{nav:{dashboard:"儀表板",ams:"AMS",inventory:"庫存",writeTag:"寫入",settings:"設定"},status:{nfcReady:"NFC 就緒",nfcOff:"NFC 關閉",offline:"離線",online:"線上",noPrinters:"無印表機",deviceOffline:"裝置離線",waitingConnection:"等待裝置連線...",systemReady:"系統就緒",status:"狀態"},dashboard:{readyToScan:"準備掃描",idleMessage:"將耗材放在磅秤上以識別",nfcHint:"NFC 標籤將自動讀取",device:"裝置",syncWeight:"同步重量",weightSynced:"已同步!",unknownTag:"未知標籤",newTag:"偵測到新標籤",onScale:"在磅秤上",linkSpool:"連結到耗材",linkTagTitle:"將標籤連結到耗材",linkTag:"連結標籤",selectSpool:"選擇要連結此標籤的耗材:",noUntagged:"未找到沒有標籤的耗材",tagDetected:"偵測到標籤",noTag:"無標籤",tagId:"標籤",grossWeight:"毛重",spoolSize:"耗材盤尺寸",close:"關閉",currentSpool:"目前耗材"},modal:{spoolDetected:"偵測到耗材",assignToAms:"分配到 AMS",syncWeight:"同步重量",weightSynced:"已同步!",syncing:"同步中...",newTagDetected:"偵測到新標籤",addToInventory:"新增到庫存",assignToAmsTitle:"分配到 AMS",selectSlot:"選擇槽位",assign:"分配",assigning:"分配中...",assignSuccess:"已分配!",assignError:"分配耗材失敗。請重試。",noPrinterSelected:"選擇印表機...",noAmsDetected:"此印表機未偵測到 AMS",slot:"槽位"},weight:{noReading:"無讀數",stable:"穩定",measuring:"測量中...",tare:"去皮",calibrate:"校準"},spool:{remaining:"剩餘",material:"材料",brand:"品牌",color:"顏色",coreWeight:"軸心重",labelWeight:"標籤重",scaleWeight:"磅秤重",netWeight:"淨重",lastUsed:"上次使用"},ams:{noData:"未偵測到 AMS",connectAms:"連線 AMS 以檢視耗材槽位",noPrinter:"未選擇印表機",selectPrinter:"從頂部欄選擇印表機",printerDisconnected:"印表機已斷開",humidity:"濕度",level:"餘量",active:"活躍",slot:"槽位",empty:"空"},inventory:{search:"搜尋耗材...",empty:"庫存中沒有耗材",noResults:"沒有匹配的耗材",spools:"個耗材",addSpool:"新增耗材"},settings:{tabDevice:"裝置",tabDisplay:"顯示",tabScale:"磅秤",tabUpdates:"更新",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 為必填項。",brightness:"亮度",saved:"已儲存",noBacklight:"未偵測到 DSI 背光。亮度控制需要 DSI 螢幕。",screenBlank:"螢幕熄滅超時",screenBlankDesc:"不活動後螢幕關閉。觸控喚醒。",displayNote:"亮度作為軟體濾鏡套用。",scaleCalibration:"磅秤校準",currentWeight:"目前重量",tareOffset:"去皮",calFactor:"係數",knownWeight:"已知重量",calStep1:"移除磅秤上所有物品並按設定零點。",calStep2:"將已知重量放在磅秤上。",setZero:"設定零點",calibrateNow:"校準",calibrated:"已校準",tareSet:"去皮命令已傳送。等待裝置回應...",tareFailed:"傳送去皮命令失敗",zeroSet:"零點已設定。將已知重量放在磅秤上。",calibrationDone:"校準完成!",calibrationFailed:"校準失敗",lastCalibrated:"上次校準",stable:"穩定",settling:"穩定中...",firmware:"韌體",scale:"磅秤",noDevice:"未找到 SpoolBuddy 裝置",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:"建立耗材失敗"},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:"尚無檢測紀錄。"}},Que={en:{translation:que},de:{translation:$ue},fr:{translation:Vue},ja:{translation:Gue},it:{translation:Wue},"pt-BR":{translation:Kue},"zh-CN":{translation:Xue},"zh-TW":{translation:Yue}};uo.use(GY).use(wue).init({resources:Que,fallbackLng:"en",supportedLngs:["en","de","fr","ja","it","pt-BR","zh-CN","zh-TW"],detection:{order:["localStorage","navigator","htmlTag"],lookupLocalStorage:"bambutrack_language",caches:["localStorage"]},interpolation:{escapeValue:!1},react:{useSuspense:!1}});const nH=[{code:"en",name:"English",nativeName:"English"},{code:"de",name:"German",nativeName:"Deutsch"},{code:"fr",name:"French",nativeName:"Français"},{code:"ja",name:"Japanese",nativeName:"日本語"},{code:"it",name:"Italian",nativeName:"Italiano"},{code:"pt-BR",name:"Portuguese (Brazil)",nativeName:"Português (Brasil)"},{code:"zh-CN",name:"Chinese (Simplified)",nativeName:"简体中文"},{code:"zh-TW",name:"Chinese (Traditional)",nativeName:"繁體中文"}];var rH="popstate";function Zue(t={}){function e(r,i){let{pathname:s,search:o,hash:l}=r.location;return z3("",{pathname:s,search:o,hash:l},i.state&&i.state.usr||null,i.state&&i.state.key||"default")}function n(r,i){return typeof i=="string"?i:W0(i)}return eme(e,n,null,t)}function Pa(t,e){if(t===!1||t===null||typeof t>"u")throw new Error(e)}function rc(t,e){if(!t){typeof console<"u"&&console.warn(e);try{throw new Error(e)}catch{}}}function Jue(){return Math.random().toString(36).substring(2,10)}function aH(t,e){return{usr:t.state,key:t.key,idx:e}}function z3(t,e,n=null,r){return{pathname:typeof t=="string"?t:t.pathname,search:"",hash:"",...typeof e=="string"?ly(e):e,state:n,key:e&&e.key||r||Jue()}}function W0({pathname:t="/",search:e="",hash:n=""}){return e&&e!=="?"&&(t+=e.charAt(0)==="?"?e:"?"+e),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function ly(t){let e={};if(t){let n=t.indexOf("#");n>=0&&(e.hash=t.substring(n),t=t.substring(0,n));let r=t.indexOf("?");r>=0&&(e.search=t.substring(r),t=t.substring(0,r)),t&&(e.pathname=t)}return e}function eme(t,e,n,r={}){let{window:i=document.defaultView,v5Compat:s=!1}=r,o=i.history,l="POP",c=null,d=u();d==null&&(d=0,o.replaceState({...o.state,idx:d},""));function u(){return(o.state||{idx:null}).idx}function m(){l="POP";let b=u(),g=b==null?null:b-d;d=b,c&&c({action:l,location:v.location,delta:g})}function p(b,g){l="PUSH";let _=z3(v.location,b,g);d=u()+1;let C=aH(_,d),P=v.createHref(_);try{o.pushState(C,"",P)}catch(N){if(N instanceof DOMException&&N.name==="DataCloneError")throw N;i.location.assign(P)}s&&c&&c({action:l,location:v.location,delta:1})}function f(b,g){l="REPLACE";let _=z3(v.location,b,g);d=u();let C=aH(_,d),P=v.createHref(_);o.replaceState(C,"",P),s&&c&&c({action:l,location:v.location,delta:0})}function x(b){return tme(b)}let v={get action(){return l},get location(){return t(i,o)},listen(b){if(c)throw new Error("A history only accepts one active listener");return i.addEventListener(rH,m),c=b,()=>{i.removeEventListener(rH,m),c=null}},createHref(b){return e(i,b)},createURL:x,encodeLocation(b){let g=x(b);return{pathname:g.pathname,search:g.search,hash:g.hash}},push:p,replace:f,go(b){return o.go(b)}};return v}function tme(t,e=!1){let n="http://localhost";typeof window<"u"&&(n=window.location.origin!=="null"?window.location.origin:window.location.href),Pa(n,"No window.location.(origin|href) available to create URL");let r=typeof t=="string"?t:W0(t);return r=r.replace(/ $/,"%20"),!e&&r.startsWith("//")&&(r=n+r),new URL(r,n)}function WY(t,e,n="/"){return nme(t,e,n,!1)}function nme(t,e,n,r){let i=typeof e=="string"?ly(e):e,s=cm(i.pathname||"/",n);if(s==null)return null;let o=KY(t);rme(o);let l=null;for(let c=0;l==null&&c{let u={relativePath:d===void 0?o.path||"":d,caseSensitive:o.caseSensitive===!0,childrenIndex:l,route:o};if(u.relativePath.startsWith("/")){if(!u.relativePath.startsWith(r)&&c)return;Pa(u.relativePath.startsWith(r),`Absolute route path "${u.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),u.relativePath=u.relativePath.slice(r.length)}let m=Ju([r,u.relativePath]),p=n.concat(u);o.children&&o.children.length>0&&(Pa(o.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${m}".`),KY(o.children,e,p,m,c)),!(o.path==null&&!o.index)&&e.push({path:m,score:dme(m,o.index),routesMeta:p})};return t.forEach((o,l)=>{if(o.path===""||!o.path?.includes("?"))s(o,l);else for(let c of XY(o.path))s(o,l,!0,c)}),e}function XY(t){let e=t.split("/");if(e.length===0)return[];let[n,...r]=e,i=n.endsWith("?"),s=n.replace(/\?$/,"");if(r.length===0)return i?[s,""]:[s];let o=XY(r.join("/")),l=[];return l.push(...o.map(c=>c===""?s:[s,c].join("/"))),i&&l.push(...o),l.map(c=>t.startsWith("/")&&c===""?"/":c)}function rme(t){t.sort((e,n)=>e.score!==n.score?n.score-e.score:ume(e.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}var ame=/^:[\w-]+$/,ime=3,sme=2,ome=1,lme=10,cme=-2,iH=t=>t==="*";function dme(t,e){let n=t.split("/"),r=n.length;return n.some(iH)&&(r+=cme),e&&(r+=sme),n.filter(i=>!iH(i)).reduce((i,s)=>i+(ame.test(s)?ime:s===""?ome:lme),r)}function ume(t,e){return t.length===e.length&&t.slice(0,-1).every((r,i)=>r===e[i])?t[t.length-1]-e[e.length-1]:0}function mme(t,e,n=!1){let{routesMeta:r}=t,i={},s="/",o=[];for(let l=0;l{if(u==="*"){let x=l[p]||"";o=s.slice(0,s.length-x.length).replace(/(.)\/+$/,"$1")}const f=l[p];return m&&!f?d[u]=void 0:d[u]=(f||"").replace(/%2F/g,"/"),d},{}),pathname:s,pathnameBase:o,pattern:t}}function hme(t,e=!1,n=!0){rc(t==="*"||!t.endsWith("*")||t.endsWith("/*"),`Route path "${t}" will be treated as if it were "${t.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${t.replace(/\*$/,"/*")}".`);let r=[],i="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(o,l,c)=>(r.push({paramName:l,isOptional:c!=null}),c?"/?([^\\/]+)?":"/([^\\/]+)")).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return t.endsWith("*")?(r.push({paramName:"*"}),i+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?i+="\\/*$":t!==""&&t!=="/"&&(i+="(?:(?=\\/|$))"),[new RegExp(i,e?void 0:"i"),r]}function pme(t){try{return t.split("/").map(e=>decodeURIComponent(e).replace(/\//g,"%2F")).join("/")}catch(e){return rc(!1,`The URL path "${t}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${e}).`),t}}function cm(t,e){if(e==="/")return t;if(!t.toLowerCase().startsWith(e.toLowerCase()))return null;let n=e.endsWith("/")?e.length-1:e.length,r=t.charAt(n);return r&&r!=="/"?null:t.slice(n)||"/"}var fme=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function gme(t,e="/"){let{pathname:n,search:r="",hash:i=""}=typeof t=="string"?ly(t):t,s;return n?(n=n.replace(/\/\/+/g,"/"),n.startsWith("/")?s=sH(n.substring(1),"/"):s=sH(n,e)):s=e,{pathname:s,search:yme(r),hash:vme(i)}}function sH(t,e){let n=e.replace(/\/+$/,"").split("/");return t.split("/").forEach(i=>{i===".."?n.length>1&&n.pop():i!=="."&&n.push(i)}),n.length>1?n.join("/"):"/"}function yM(t,e,n,r){return`Cannot include a '${t}' character in a manually specified \`to.${e}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function bme(t){return t.filter((e,n)=>n===0||e.route.path&&e.route.path.length>0)}function oO(t){let e=bme(t);return e.map((n,r)=>r===e.length-1?n.pathname:n.pathnameBase)}function lO(t,e,n,r=!1){let i;typeof t=="string"?i=ly(t):(i={...t},Pa(!i.pathname||!i.pathname.includes("?"),yM("?","pathname","search",i)),Pa(!i.pathname||!i.pathname.includes("#"),yM("#","pathname","hash",i)),Pa(!i.search||!i.search.includes("#"),yM("#","search","hash",i)));let s=t===""||i.pathname==="",o=s?"/":i.pathname,l;if(o==null)l=n;else{let m=e.length-1;if(!r&&o.startsWith("..")){let p=o.split("/");for(;p[0]==="..";)p.shift(),m-=1;i.pathname=p.join("/")}l=m>=0?e[m]:"/"}let c=gme(i,l),d=o&&o!=="/"&&o.endsWith("/"),u=(s||o===".")&&n.endsWith("/");return!c.pathname.endsWith("/")&&(d||u)&&(c.pathname+="/"),c}var Ju=t=>t.join("/").replace(/\/\/+/g,"/"),xme=t=>t.replace(/\/+$/,"").replace(/^\/*/,"/"),yme=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,vme=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t,wme=class{constructor(t,e,n,r=!1){this.status=t,this.statusText=e||"",this.internal=r,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}};function Sme(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}function _me(t){return t.map(e=>e.route.path).filter(Boolean).join("/").replace(/\/\/*/g,"/")||"/"}var YY=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function QY(t,e){let n=t;if(typeof n!="string"||!fme.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let r=n,i=!1;if(YY)try{let s=new URL(window.location.href),o=n.startsWith("//")?new URL(s.protocol+n):new URL(n),l=cm(o.pathname,e);o.origin===s.origin&&l!=null?n=l+o.search+o.hash:i=!0}catch{rc(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:r,isExternal:i,to:n}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var ZY=["POST","PUT","PATCH","DELETE"];new Set(ZY);var kme=["GET",...ZY];new Set(kme);var cy=w.createContext(null);cy.displayName="DataRouter";var DP=w.createContext(null);DP.displayName="DataRouterState";var Nme=w.createContext(!1),JY=w.createContext({isTransitioning:!1});JY.displayName="ViewTransition";var Cme=w.createContext(new Map);Cme.displayName="Fetchers";var Pme=w.createContext(null);Pme.displayName="Await";var gl=w.createContext(null);gl.displayName="Navigation";var Bw=w.createContext(null);Bw.displayName="Location";var hc=w.createContext({outlet:null,matches:[],isDataRoute:!1});hc.displayName="Route";var cO=w.createContext(null);cO.displayName="RouteError";var eQ="REACT_ROUTER_ERROR",Tme="REDIRECT",Ame="ROUTE_ERROR_RESPONSE";function jme(t){if(t.startsWith(`${eQ}:${Tme}:{`))try{let e=JSON.parse(t.slice(28));if(typeof e=="object"&&e&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.location=="string"&&typeof e.reloadDocument=="boolean"&&typeof e.replace=="boolean")return e}catch{}}function Mme(t){if(t.startsWith(`${eQ}:${Ame}:{`))try{let e=JSON.parse(t.slice(40));if(typeof e=="object"&&e&&typeof e.status=="number"&&typeof e.statusText=="string")return new wme(e.status,e.statusText,e.data)}catch{}}function Eme(t,{relative:e}={}){Pa(dy(),"useHref() may be used only in the context of a component.");let{basename:n,navigator:r}=w.useContext(gl),{hash:i,pathname:s,search:o}=qw(t,{relative:e}),l=s;return n!=="/"&&(l=s==="/"?n:Ju([n,s])),r.createHref({pathname:l,search:o,hash:i})}function dy(){return w.useContext(Bw)!=null}function Kc(){return Pa(dy(),"useLocation() may be used only in the context of a component."),w.useContext(Bw).location}var tQ="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function nQ(t){w.useContext(gl).static||w.useLayoutEffect(t)}function Lo(){let{isDataRoute:t}=w.useContext(hc);return t?Gme():Dme()}function Dme(){Pa(dy(),"useNavigate() may be used only in the context of a component.");let t=w.useContext(cy),{basename:e,navigator:n}=w.useContext(gl),{matches:r}=w.useContext(hc),{pathname:i}=Kc(),s=JSON.stringify(oO(r)),o=w.useRef(!1);return nQ(()=>{o.current=!0}),w.useCallback((c,d={})=>{if(rc(o.current,tQ),!o.current)return;if(typeof c=="number"){n.go(c);return}let u=lO(c,JSON.parse(s),i,d.relative==="path");t==null&&e!=="/"&&(u.pathname=u.pathname==="/"?e:Ju([e,u.pathname])),(d.replace?n.replace:n.push)(u,d.state,d)},[e,n,s,i,t])}var rQ=w.createContext(null);function uy(){return w.useContext(rQ)}function Fme(t){let e=w.useContext(hc).outlet;return w.useMemo(()=>e&&w.createElement(rQ.Provider,{value:t},e),[e,t])}function Hw(){let{matches:t}=w.useContext(hc),e=t[t.length-1];return e?e.params:{}}function qw(t,{relative:e}={}){let{matches:n}=w.useContext(hc),{pathname:r}=Kc(),i=JSON.stringify(oO(n));return w.useMemo(()=>lO(t,JSON.parse(i),r,e==="path"),[t,i,r,e])}function Rme(t,e){return aQ(t,e)}function aQ(t,e,n,r,i){Pa(dy(),"useRoutes() may be used only in the context of a component.");let{navigator:s}=w.useContext(gl),{matches:o}=w.useContext(hc),l=o[o.length-1],c=l?l.params:{},d=l?l.pathname:"/",u=l?l.pathnameBase:"/",m=l&&l.route;{let _=m&&m.path||"";sQ(d,!m||_.endsWith("*")||_.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${d}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. -Please change the parent to .`)}let p=Kc(),f;if(e){let _=typeof e=="string"?ly(e):e;Pa(u==="/"||_.pathname?.startsWith(u),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${u}" but pathname "${_.pathname}" was given in the \`location\` prop.`),f=_}else f=p;let x=f.pathname||"/",v=x;if(u!=="/"){let _=u.replace(/^\//,"").split("/");v="/"+x.replace(/^\//,"").split("/").slice(_.length).join("/")}let b=WY(t,{pathname:v});rc(m||b!=null,`No routes matched location "${f.pathname}${f.search}${f.hash}" `),rc(b==null||b[b.length-1].route.element!==void 0||b[b.length-1].route.Component!==void 0||b[b.length-1].route.lazy!==void 0,`Matched leaf route at location "${f.pathname}${f.search}${f.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let g=zme(b&&b.map(_=>Object.assign({},_,{params:Object.assign({},c,_.params),pathname:Ju([u,s.encodeLocation?s.encodeLocation(_.pathname.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:_.pathname]),pathnameBase:_.pathnameBase==="/"?u:Ju([u,s.encodeLocation?s.encodeLocation(_.pathnameBase.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:_.pathnameBase])})),o,n,r,i);return e&&g?w.createElement(Bw.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",...f},navigationType:"POP"}},g):g}function Rme(){let t=$me(),e=wme(t)?`${t.status} ${t.statusText}`:t instanceof Error?t.message:JSON.stringify(t),n=t instanceof Error?t.stack:null,r="rgba(200,200,200, 0.5)",i={padding:"0.5rem",backgroundColor:r},s={padding:"2px 4px",backgroundColor:r},o=null;return console.error("Error handled by React Router default ErrorBoundary:",t),o=w.createElement(w.Fragment,null,w.createElement("p",null,"💿 Hey developer 👋"),w.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",w.createElement("code",{style:s},"ErrorBoundary")," or"," ",w.createElement("code",{style:s},"errorElement")," prop on your route.")),w.createElement(w.Fragment,null,w.createElement("h2",null,"Unexpected Application Error!"),w.createElement("h3",{style:{fontStyle:"italic"}},e),n?w.createElement("pre",{style:i},n):null,o)}var Lme=w.createElement(Rme,null),iQ=class extends w.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,e){return e.location!==t.location||e.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:e.error,location:e.location,revalidation:t.revalidation||e.revalidation}}componentDidCatch(t,e){this.props.onError?this.props.onError(t,e):console.error("React Router caught the following error during render",t)}render(){let t=this.state.error;if(this.context&&typeof t=="object"&&t&&"digest"in t&&typeof t.digest=="string"){const n=jme(t.digest);n&&(t=n)}let e=t!==void 0?w.createElement(hc.Provider,{value:this.props.routeContext},w.createElement(cO.Provider,{value:t,children:this.props.component})):this.props.children;return this.context?w.createElement(Ome,{error:t},e):e}};iQ.contextType=kme;var vM=new WeakMap;function Ome({children:t,error:e}){let{basename:n}=w.useContext(gl);if(typeof e=="object"&&e&&"digest"in e&&typeof e.digest=="string"){let r=Ame(e.digest);if(r){let i=vM.get(e);if(i)throw i;let s=QY(r.location,n);if(YY&&!vM.get(e))if(s.isExternal||r.reloadDocument)window.location.href=s.absoluteURL||s.to;else{const o=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(s.to,{replace:r.replace}));throw vM.set(e,o),o}return w.createElement("meta",{httpEquiv:"refresh",content:`0;url=${s.absoluteURL||s.to}`})}}return t}function Ime({routeContext:t,match:e,children:n}){let r=w.useContext(cy);return r&&r.static&&r.staticContext&&(e.route.errorElement||e.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=e.route.id),w.createElement(hc.Provider,{value:t},n)}function zme(t,e=[],n=null,r=null,i=null){if(t==null){if(!n)return null;if(n.errors)t=n.matches;else if(e.length===0&&!n.initialized&&n.matches.length>0)t=n.matches;else return null}let s=t,o=n?.errors;if(o!=null){let u=s.findIndex(m=>m.route.id&&o?.[m.route.id]!==void 0);Pa(u>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(o).join(",")}`),s=s.slice(0,Math.min(s.length,u+1))}let l=!1,c=-1;if(n)for(let u=0;u=0?s=s.slice(0,c+1):s=[s[0]];break}}}let d=n&&r?(u,m)=>{r(u,{location:n.location,params:n.matches?.[0]?.params??{},unstable_pattern:Sme(n.matches),errorInfo:m})}:void 0;return s.reduceRight((u,m,p)=>{let f,x=!1,v=null,b=null;n&&(f=o&&m.route.id?o[m.route.id]:void 0,v=m.route.errorElement||Lme,l&&(c<0&&p===0?(sQ("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),x=!0,b=null):c===p&&(x=!0,b=m.route.hydrateFallbackElement||null)));let g=e.concat(s.slice(0,p+1)),_=()=>{let C;return f?C=v:x?C=b:m.route.Component?C=w.createElement(m.route.Component,null):m.route.element?C=m.route.element:C=u,w.createElement(Ime,{match:m,routeContext:{outlet:u,matches:g,isDataRoute:n!=null},children:C})};return n&&(m.route.ErrorBoundary||m.route.errorElement||p===0)?w.createElement(iQ,{location:n.location,revalidation:n.revalidation,component:v,error:f,children:_(),routeContext:{outlet:null,matches:g,isDataRoute:!0},onError:d}):_()},null)}function dO(t){return`${t} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Ume(t){let e=w.useContext(cy);return Pa(e,dO(t)),e}function Bme(t){let e=w.useContext(DP);return Pa(e,dO(t)),e}function Hme(t){let e=w.useContext(hc);return Pa(e,dO(t)),e}function uO(t){let e=Hme(t),n=e.matches[e.matches.length-1];return Pa(n.route.id,`${t} can only be used on routes that contain a unique "id"`),n.route.id}function qme(){return uO("useRouteId")}function $me(){let t=w.useContext(cO),e=Bme("useRouteError"),n=uO("useRouteError");return t!==void 0?t:e.errors?.[n]}function Vme(){let{router:t}=Ume("useNavigate"),e=uO("useNavigate"),n=w.useRef(!1);return nQ(()=>{n.current=!0}),w.useCallback(async(i,s={})=>{rc(n.current,tQ),n.current&&(typeof i=="number"?await t.navigate(i):await t.navigate(i,{fromRouteId:e,...s}))},[t,e])}var oH={};function sQ(t,e,n){!e&&!oH[t]&&(oH[t]=!0,rc(!1,n))}w.memo(Gme);function Gme({routes:t,future:e,state:n,onError:r}){return aQ(t,void 0,n,r,e)}function Ex({to:t,replace:e,state:n,relative:r}){Pa(dy()," may be used only in the context of a component.");let{static:i}=w.useContext(gl);rc(!i," must not be used on the initial render in a . This is a no-op, but you should modify your code so the is only ever rendered in response to some user interaction or state change.");let{matches:s}=w.useContext(hc),{pathname:o}=Kc(),l=Lo(),c=lO(t,oO(s),o,r==="path"),d=JSON.stringify(c);return w.useEffect(()=>{l(JSON.parse(d),{replace:e,state:n,relative:r})},[l,d,r,e,n]),null}function oQ(t){return Dme(t.context)}function Dr(t){Pa(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function Wme({basename:t="/",children:e=null,location:n,navigationType:r="POP",navigator:i,static:s=!1,unstable_useTransitions:o}){Pa(!dy(),"You cannot render a inside another . You should never have more than one in your app.");let l=t.replace(/^\/*/,"/"),c=w.useMemo(()=>({basename:l,navigator:i,static:s,unstable_useTransitions:o,future:{}}),[l,i,s,o]);typeof n=="string"&&(n=ly(n));let{pathname:d="/",search:u="",hash:m="",state:p=null,key:f="default"}=n,x=w.useMemo(()=>{let v=cm(d,l);return v==null?null:{location:{pathname:v,search:u,hash:m,state:p,key:f},navigationType:r}},[l,d,u,m,p,f,r]);return rc(x!=null,` is not able to match the URL "${d}${u}${m}" because it does not start with the basename, so the won't render anything.`),x==null?null:w.createElement(gl.Provider,{value:c},w.createElement(Bw.Provider,{children:e,value:x}))}function Kme({children:t,location:e}){return Fme(U3(t),e)}function U3(t,e=[]){let n=[];return w.Children.forEach(t,(r,i)=>{if(!w.isValidElement(r))return;let s=[...e,i];if(r.type===w.Fragment){n.push.apply(n,U3(r.props.children,s));return}Pa(r.type===Dr,`[${typeof r.type=="string"?r.type:r.type.name}] is not a component. All component children of must be a or `),Pa(!r.props.index||!r.props.children,"An index route cannot have child routes.");let o={id:r.props.id||s.join("-"),caseSensitive:r.props.caseSensitive,element:r.props.element,Component:r.props.Component,index:r.props.index,path:r.props.path,middleware:r.props.middleware,loader:r.props.loader,action:r.props.action,hydrateFallbackElement:r.props.hydrateFallbackElement,HydrateFallback:r.props.HydrateFallback,errorElement:r.props.errorElement,ErrorBoundary:r.props.ErrorBoundary,hasErrorBoundary:r.props.hasErrorBoundary===!0||r.props.ErrorBoundary!=null||r.props.errorElement!=null,shouldRevalidate:r.props.shouldRevalidate,handle:r.props.handle,lazy:r.props.lazy};r.props.children&&(o.children=U3(r.props.children,s)),n.push(o)}),n}var Mk="get",Ek="application/x-www-form-urlencoded";function FP(t){return typeof HTMLElement<"u"&&t instanceof HTMLElement}function Xme(t){return FP(t)&&t.tagName.toLowerCase()==="button"}function Yme(t){return FP(t)&&t.tagName.toLowerCase()==="form"}function Qme(t){return FP(t)&&t.tagName.toLowerCase()==="input"}function Zme(t){return!!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}function Jme(t,e){return t.button===0&&(!e||e==="_self")&&!Zme(t)}function B3(t=""){return new URLSearchParams(typeof t=="string"||Array.isArray(t)||t instanceof URLSearchParams?t:Object.keys(t).reduce((e,n)=>{let r=t[n];return e.concat(Array.isArray(r)?r.map(i=>[n,i]):[[n,r]])},[]))}function ehe(t,e){let n=B3(t);return e&&e.forEach((r,i)=>{n.has(i)||e.getAll(i).forEach(s=>{n.append(i,s)})}),n}var H_=null;function the(){if(H_===null)try{new FormData(document.createElement("form"),0),H_=!1}catch{H_=!0}return H_}var nhe=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function wM(t){return t!=null&&!nhe.has(t)?(rc(!1,`"${t}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${Ek}"`),null):t}function rhe(t,e){let n,r,i,s,o;if(Yme(t)){let l=t.getAttribute("action");r=l?cm(l,e):null,n=t.getAttribute("method")||Mk,i=wM(t.getAttribute("enctype"))||Ek,s=new FormData(t)}else if(Xme(t)||Qme(t)&&(t.type==="submit"||t.type==="image")){let l=t.form;if(l==null)throw new Error('Cannot submit a