diff --git a/frontend/public/img/bb_allset.webp b/frontend/public/img/bb_allset.webp index 9575ff69d..0e5eb0929 100644 Binary files a/frontend/public/img/bb_allset.webp and b/frontend/public/img/bb_allset.webp differ diff --git a/frontend/public/img/bb_almost.webp b/frontend/public/img/bb_almost.webp index 27ff8fccd..840f0944f 100644 Binary files a/frontend/public/img/bb_almost.webp and b/frontend/public/img/bb_almost.webp differ diff --git a/frontend/public/img/bb_help.webp b/frontend/public/img/bb_help.webp index 540c9f6c7..7b01a3ab8 100644 Binary files a/frontend/public/img/bb_help.webp and b/frontend/public/img/bb_help.webp differ diff --git a/frontend/public/img/bb_hero.webp b/frontend/public/img/bb_hero.webp index a787d8ef8..0eeb6d931 100644 Binary files a/frontend/public/img/bb_hero.webp and b/frontend/public/img/bb_hero.webp differ diff --git a/frontend/public/img/bb_started.webp b/frontend/public/img/bb_started.webp index 4d832c549..df38a9a63 100644 Binary files a/frontend/public/img/bb_started.webp and b/frontend/public/img/bb_started.webp differ diff --git a/frontend/public/img/bb_walk.webp b/frontend/public/img/bb_walk.webp index 5ccd4eb50..3e465ecef 100644 Binary files a/frontend/public/img/bb_walk.webp and b/frontend/public/img/bb_walk.webp differ diff --git a/frontend/src/components/onboarding/TourEngine.tsx b/frontend/src/components/onboarding/TourEngine.tsx index d9b83176c..b7dab3056 100644 --- a/frontend/src/components/onboarding/TourEngine.tsx +++ b/frontend/src/components/onboarding/TourEngine.tsx @@ -221,6 +221,13 @@ export function TourEngine() { const modalPos = computeModalPosition(anchorRect); const isLastStep = stepIndex === TOUR_STEPS.length - 1; const isFirstStep = stepIndex === 0; + // Step counter shows visible position, not raw index — when add-printer + // auto-skips because the user already has printers, the next step is the + // user's first visible one and should render as "1 / N", not "2 / N". + const visibleTotal = TOUR_STEPS.filter((s) => !s.skipIf?.(skipContext)).length; + const visiblePosition = TOUR_STEPS.slice(0, stepIndex + 1).filter( + (s) => !s.skipIf?.(skipContext), + ).length; return ( <> @@ -240,7 +247,7 @@ export function TourEngine() {
"u")return null;try{return h.activeElement||h.body}catch{return h.body}}var xr=/[\n"\\]/g;function ja(h){return h.replace(xr,function(S){return"\\"+S.charCodeAt(0).toString(16)+" "})}function $a(h,S,P,M,W,te,Pe,He){h.name="",Pe!=null&&typeof Pe!="function"&&typeof Pe!="symbol"&&typeof Pe!="boolean"?h.type=Pe:h.removeAttribute("type"),S!=null?Pe==="number"?(S===0&&h.value===""||h.value!=S)&&(h.value=""+ia(S)):h.value!==""+ia(S)&&(h.value=""+ia(S)):Pe!=="submit"&&Pe!=="reset"||h.removeAttribute("value"),S!=null?Gr(h,Pe,ia(S)):P!=null?Gr(h,Pe,ia(P)):M!=null&&h.removeAttribute("value"),W==null&&te!=null&&(h.defaultChecked=!!te),W!=null&&(h.checked=W&&typeof W!="function"&&typeof W!="symbol"),He!=null&&typeof He!="function"&&typeof He!="symbol"&&typeof He!="boolean"?h.name=""+ia(He):h.removeAttribute("name")}function Oa(h,S,P,M,W,te,Pe,He){if(te!=null&&typeof te!="function"&&typeof te!="symbol"&&typeof te!="boolean"&&(h.type=te),S!=null||P!=null){if(!(te!=="submit"&&te!=="reset"||S!=null)){Jt(h);return}P=P!=null?""+ia(P):"",S=S!=null?""+ia(S):P,He||S===h.value||(h.value=S),h.defaultValue=S}M=M??W,M=typeof M!="function"&&typeof M!="symbol"&&!!M,h.checked=He?h.checked:!!M,h.defaultChecked=!!M,Pe!=null&&typeof Pe!="function"&&typeof Pe!="symbol"&&typeof Pe!="boolean"&&(h.name=Pe),Jt(h)}function Gr(h,S,P){S==="number"&&Ua(h.ownerDocument)===h||h.defaultValue===""+P||(h.defaultValue=""+P)}function et(h,S,P,M){if(h=h.options,S){S={};for(var W=0;W
=hi),kp=" ",jb=!1;function xe(h,S){switch(h){case"keyup":return Av.indexOf(S.keyCode)!==-1;case"keydown":return S.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Rt(h){return h=h.detail,typeof h=="object"&&"data"in h?h.data:null}var pa=!1;function Ma(h,S){switch(h){case"compositionend":return Rt(S);case"keypress":return S.which!==32?null:(jb=!0,kp);case"textInput":return h=S.data,h===kp&&jb?null:h;default:return null}}function Wa(h,S){if(pa)return h==="compositionend"||!ul&&xe(h,S)?(h=Pf(),ki=Du=mi=null,pa=!1,h):null;switch(h){case"paste":return null;case"keypress":if(!(S.ctrlKey||S.altKey||S.metaKey)||S.ctrlKey&&S.altKey){if(S.char&&1 <\/script>",te=te.removeChild(te.firstChild);break;case"select":te=typeof M.is=="string"?Pe.createElement("select",{is:M.is}):Pe.createElement("select"),M.multiple?te.multiple=!0:M.size&&(te.size=M.size);break;default:te=typeof M.is=="string"?Pe.createElement(W,{is:M.is}):Pe.createElement(W)}}te[vt]=S,te[Ct]=M;e:for(Pe=S.child;Pe!==null;){if(Pe.tag===5||Pe.tag===6)te.appendChild(Pe.stateNode);else if(Pe.tag!==4&&Pe.tag!==27&&Pe.child!==null){Pe.child.return=Pe,Pe=Pe.child;continue}if(Pe===S)break e;for(;Pe.sibling===null;){if(Pe.return===null||Pe.return===S)break e;Pe=Pe.return}Pe.sibling.return=Pe.return,Pe=Pe.sibling}S.stateNode=te;e:switch(Cs(te,W,M),W){case"button":case"input":case"select":case"textarea":M=!!M.autoFocus;break e;case"img":M=!0;break e;default:M=!1}M&&Wu(S)}}return Nn(S),NM(S,S.type,h===null?null:h.memoizedProps,S.pendingProps,P),null;case 6:if(h&&S.stateNode!=null)h.memoizedProps!==M&&Wu(S);else{if(typeof M!="string"&&S.stateNode===null)throw Error(n(166));if(h=V.current,Lb(S)){if(h=S.stateNode,P=S.memoizedProps,M=null,W=ks,W!==null)switch(W.tag){case 27:case 5:M=W.memoizedProps}h[vt]=S,h=!!(h.nodeValue===P||M!==null&&M.suppressHydrationWarning===!0||uq(h.nodeValue,P)),h||Tp(S,!0)}else h=PP(h).createTextNode(M),h[vt]=S,S.stateNode=h}return Nn(S),null;case 31:if(P=S.memoizedState,h===null||h.memoizedState!==null){if(M=Lb(S),P!==null){if(h===null){if(!M)throw Error(n(318));if(h=S.memoizedState,h=h!==null?h.dehydrated:null,!h)throw Error(n(557));h[vt]=S}else jf(),(S.flags&128)===0&&(S.memoizedState=null),S.flags|=4;Nn(S),h=!1}else P=Ij(),h!==null&&h.memoizedState!==null&&(h.memoizedState.hydrationErrors=P),h=!0;if(!h)return S.flags&256?(hl(S),S):(hl(S),null);if((S.flags&128)!==0)throw Error(n(558))}return Nn(S),null;case 13:if(M=S.memoizedState,h===null||h.memoizedState!==null&&h.memoizedState.dehydrated!==null){if(W=Lb(S),M!==null&&M.dehydrated!==null){if(h===null){if(!W)throw Error(n(318));if(W=S.memoizedState,W=W!==null?W.dehydrated:null,!W)throw Error(n(317));W[vt]=S}else jf(),(S.flags&128)===0&&(S.memoizedState=null),S.flags|=4;Nn(S),W=!1}else W=Ij(),h!==null&&h.memoizedState!==null&&(h.memoizedState.hydrationErrors=W),W=!0;if(!W)return S.flags&256?(hl(S),S):(hl(S),null)}return hl(S),(S.flags&128)!==0?(S.lanes=P,S):(P=M!==null,h=h!==null&&h.memoizedState!==null,P&&(M=S.child,W=null,M.alternate!==null&&M.alternate.memoizedState!==null&&M.alternate.memoizedState.cachePool!==null&&(W=M.alternate.memoizedState.cachePool.pool),te=null,M.memoizedState!==null&&M.memoizedState.cachePool!==null&&(te=M.memoizedState.cachePool.pool),te!==W&&(M.flags|=2048)),P!==h&&P&&(S.child.flags|=8192),cP(S,S.updateQueue),Nn(S),null);case 4:return F(),h===null&&QM(S.stateNode.containerInfo),Nn(S),null;case 10:return qu(S.type),Nn(S),null;case 19:if(ie(gi),M=S.memoizedState,M===null)return Nn(S),null;if(W=(S.flags&128)!==0,te=M.rendering,te===null)if(W)Vv(M,!1);else{if(ei!==0||h!==null&&(h.flags&128)!==0)for(h=S.child;h!==null;){if(te=Qk(h),te!==null){for(S.flags|=128,Vv(M,!1),h=te.updateQueue,S.updateQueue=h,cP(S,h),S.subtreeFlags=0,h=P,P=S.child;P!==null;)q5(P,h),P=P.sibling;return me(gi,gi.current&1|2),Mr&&Uu(S,M.treeForkCount),S.child}h=h.sibling}M.tail!==null&&L()>hP&&(S.flags|=128,W=!0,Vv(M,!1),S.lanes=4194304)}else{if(!W)if(h=Qk(te),h!==null){if(S.flags|=128,W=!0,h=h.updateQueue,S.updateQueue=h,cP(S,h),Vv(M,!0),M.tail===null&&M.tailMode==="hidden"&&!te.alternate&&!Mr)return Nn(S),null}else 2*L()-M.renderingStartTime>hP&&P!==536870912&&(S.flags|=128,W=!0,Vv(M,!1),S.lanes=4194304);M.isBackwards?(te.sibling=S.child,S.child=te):(h=M.last,h!==null?h.sibling=te:S.child=te,M.last=te)}return M.tail!==null?(h=M.tail,M.rendering=h,M.tail=h.sibling,M.renderingStartTime=L(),h.sibling=null,P=gi.current,me(gi,W?P&1|2:P&1),Mr&&Uu(S,M.treeForkCount),h):(Nn(S),null);case 22:case 23:return hl(S),Xj(),M=S.memoizedState!==null,h!==null?h.memoizedState!==null!==M&&(S.flags|=8192):M&&(S.flags|=8192),M?(P&536870912)!==0&&(S.flags&128)===0&&(Nn(S),S.subtreeFlags&6&&(S.flags|=8192)):Nn(S),P=S.updateQueue,P!==null&&cP(S,P.retryQueue),P=null,h!==null&&h.memoizedState!==null&&h.memoizedState.cachePool!==null&&(P=h.memoizedState.cachePool.pool),M=null,S.memoizedState!==null&&S.memoizedState.cachePool!==null&&(M=S.memoizedState.cachePool.pool),M!==P&&(S.flags|=2048),h!==null&&ie(Df),null;case 24:return P=null,h!==null&&(P=h.memoizedState.cache),S.memoizedState.cache!==P&&(S.flags|=2048),qu(Ci),Nn(S),null;case 25:return null;case 30:return null}throw Error(n(156,S.tag))}function Cue(h,S){switch(Rj(S),S.tag){case 1:return h=S.flags,h&65536?(S.flags=h&-65537|128,S):null;case 3:return qu(Ci),F(),h=S.flags,(h&65536)!==0&&(h&128)===0?(S.flags=h&-65537|128,S):null;case 26:case 27:case 5:return $(S),null;case 31:if(S.memoizedState!==null){if(hl(S),S.alternate===null)throw Error(n(340));jf()}return h=S.flags,h&65536?(S.flags=h&-65537|128,S):null;case 13:if(hl(S),h=S.memoizedState,h!==null&&h.dehydrated!==null){if(S.alternate===null)throw Error(n(340));jf()}return h=S.flags,h&65536?(S.flags=h&-65537|128,S):null;case 19:return ie(gi),null;case 4:return F(),null;case 10:return qu(S.type),null;case 22:case 23:return hl(S),Xj(),h!==null&&ie(Df),h=S.flags,h&65536?(S.flags=h&-65537|128,S):null;case 24:return qu(Ci),null;case 25:return null;default:return null}}function gH(h,S){switch(Rj(S),S.tag){case 3:qu(Ci),F();break;case 26:case 27:case 5:$(S);break;case 4:F();break;case 31:S.memoizedState!==null&&hl(S);break;case 13:hl(S);break;case 19:ie(gi);break;case 10:qu(S.type);break;case 22:case 23:hl(S),Xj(),h!==null&&ie(Df);break;case 24:qu(Ci)}}function Gv(h,S){try{var P=S.updateQueue,M=P!==null?P.lastEffect:null;if(M!==null){var W=M.next;P=W;do{if((P.tag&h)===h){M=void 0;var te=P.create,Pe=P.inst;M=te(),Pe.destroy=M}P=P.next}while(P!==W)}}catch(He){Zr(S,S.return,He)}}function Fp(h,S,P){try{var M=S.updateQueue,W=M!==null?M.lastEffect:null;if(W!==null){var te=W.next;M=te;do{if((M.tag&h)===h){var Pe=M.inst,He=Pe.destroy;if(He!==void 0){Pe.destroy=void 0,W=S;var pt=P,Et=He;try{Et()}catch(Ut){Zr(W,pt,Ut)}}}M=M.next}while(M!==te)}}catch(Ut){Zr(S,S.return,Ut)}}function bH(h){var S=h.updateQueue;if(S!==null){var P=h.stateNode;try{oU(S,P)}catch(M){Zr(h,h.return,M)}}}function yH(h,S,P){P.props=If(h.type,h.memoizedProps),P.state=h.memoizedState;try{P.componentWillUnmount()}catch(M){Zr(h,S,M)}}function $v(h,S){try{var P=h.ref;if(P!==null){switch(h.tag){case 26:case 27:case 5:var M=h.stateNode;break;case 30:M=h.stateNode;break;default:M=h.stateNode}typeof P=="function"?h.refCleanup=P(M):P.current=M}}catch(W){Zr(h,S,W)}}function Ld(h,S){var P=h.ref,M=h.refCleanup;if(P!==null)if(typeof M=="function")try{M()}catch(W){Zr(h,S,W)}finally{h.refCleanup=null,h=h.alternate,h!=null&&(h.refCleanup=null)}else if(typeof P=="function")try{P(null)}catch(W){Zr(h,S,W)}else P.current=null}function xH(h){var S=h.type,P=h.memoizedProps,M=h.stateNode;try{e:switch(S){case"button":case"input":case"select":case"textarea":P.autoFocus&&M.focus();break e;case"img":P.src?M.src=P.src:P.srcSet&&(M.srcset=P.srcSet)}}catch(W){Zr(h,h.return,W)}}function AM(h,S,P){try{var M=h.stateNode;Kue(M,h.type,P,S),M[Ct]=S}catch(W){Zr(h,h.return,W)}}function vH(h){return h.tag===5||h.tag===3||h.tag===26||h.tag===27&&Up(h.type)||h.tag===4}function jM(h){e:for(;;){for(;h.sibling===null;){if(h.return===null||vH(h.return))return null;h=h.return}for(h.sibling.return=h.return,h=h.sibling;h.tag!==5&&h.tag!==6&&h.tag!==18;){if(h.tag===27&&Up(h.type)||h.flags&2||h.child===null||h.tag===4)continue e;h.child.return=h,h=h.child}if(!(h.flags&2))return h.stateNode}}function MM(h,S,P){var M=h.tag;if(M===5||M===6)h=h.stateNode,S?(P.nodeType===9?P.body:P.nodeName==="HTML"?P.ownerDocument.body:P).insertBefore(h,S):(S=P.nodeType===9?P.body:P.nodeName==="HTML"?P.ownerDocument.body:P,S.appendChild(h),P=P._reactRootContainer,P!=null||S.onclick!==null||(S.onclick=$t));else if(M!==4&&(M===27&&Up(h.type)&&(P=h.stateNode,S=null),h=h.child,h!==null))for(MM(h,S,P),h=h.sibling;h!==null;)MM(h,S,P),h=h.sibling}function dP(h,S,P){var M=h.tag;if(M===5||M===6)h=h.stateNode,S?P.insertBefore(h,S):P.appendChild(h);else if(M!==4&&(M===27&&Up(h.type)&&(P=h.stateNode),h=h.child,h!==null))for(dP(h,S,P),h=h.sibling;h!==null;)dP(h,S,P),h=h.sibling}function SH(h){var S=h.stateNode,P=h.memoizedProps;try{for(var M=h.type,W=S.attributes;W.length;)S.removeAttributeNode(W[0]);Cs(S,M,P),S[vt]=h,S[Ct]=P}catch(te){Zr(h,h.return,te)}}var Ku=!1,Ai=!1,EM=!1,wH=typeof WeakSet=="function"?WeakSet:Set,es=null;function Tue(h,S){if(h=h.containerInfo,JM=MP,h=mo(h),_i(h)){if("selectionStart"in h)var P={start:h.selectionStart,end:h.selectionEnd};else e:{P=(P=h.ownerDocument)&&P.defaultView||window;var M=P.getSelection&&P.getSelection();if(M&&M.rangeCount!==0){P=M.anchorNode;var W=M.anchorOffset,te=M.focusNode;M=M.focusOffset;try{P.nodeType,te.nodeType}catch{P=null;break e}var Pe=0,He=-1,pt=-1,Et=0,Ut=0,Wt=h,Dt=null;t:for(;;){for(var zt;Wt!==P||W!==0&&Wt.nodeType!==3||(He=Pe+W),Wt!==te||M!==0&&Wt.nodeType!==3||(pt=Pe+M),Wt.nodeType===3&&(Pe+=Wt.nodeValue.length),(zt=Wt.firstChild)!==null;)Dt=Wt,Wt=zt;for(;;){if(Wt===h)break t;if(Dt===P&&++Et===W&&(He=Pe),Dt===te&&++Ut===M&&(pt=Pe),(zt=Wt.nextSibling)!==null)break;Wt=Dt,Dt=Wt.parentNode}Wt=zt}P=He===-1||pt===-1?null:{start:He,end:pt}}else P=null}P=P||{start:0,end:0}}else P=null;for(eE={focusedElem:h,selectionRange:P},MP=!1,es=S;es!==null;)if(S=es,h=S.child,(S.subtreeFlags&1028)!==0&&h!==null)h.return=S,es=h;else for(;es!==null;){switch(S=es,te=S.alternate,h=S.flags,S.tag){case 0:if((h&4)!==0&&(h=S.updateQueue,h=h!==null?h.events:null,h!==null))for(P=0;P s?.[0]===m[0]&&!n.context?(this.logger.warn(`It seems you are nesting recursively key: ${m[0]} in key: ${a[0]}`),null):this.translate(...m,a),n)),n.interpolation&&this.interpolator.reset()}const o=n.postProcess||this.options.postProcess,l=Ka(o)?[o]:o;return e!=null&&l?.length&&n.applyPostProcessor!==!1&&(e=wZ.handle(l,e,a,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...i,usedParams:this.getUsedParamsDetails(n)},...n}:n,this)),e}resolve(e,a={}){let n,i,s,o,l;return Ka(e)&&(e=[e]),e.forEach(c=>{if(this.isValidLookup(n))return;const d=this.extractFromKey(c,a),u=d.key;i=u;let m=d.namespaces;this.options.fallbackNS&&(m=m.concat(this.options.fallbackNS));const p=a.count!==void 0&&!Ka(a.count),f=p&&!a.ordinal&&a.count===0,g=a.context!==void 0&&(Ka(a.context)||typeof a.context=="number")&&a.context!=="",v=a.lngs?a.lngs:this.languageUtils.toResolveHierarchy(a.lng||this.language,a.fallbackLng);m.forEach(b=>{this.isValidLookup(n)||(l=b,!i8[`${v[0]}-${b}`]&&this.utils?.hasLoadedNamespace&&!this.utils?.hasLoadedNamespace(l)&&(i8[`${v[0]}-${b}`]=!0,this.logger.warn(`key "${i}" for languages "${v.join(", ")}" won't get resolved as namespace "${l}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),v.forEach(y=>{if(this.isValidLookup(n))return;o=y;const w=[u];if(this.i18nFormat?.addLookupKeys)this.i18nFormat.addLookupKeys(w,u,y,b,a);else{let C;p&&(C=this.pluralResolver.getSuffix(y,a.count,a));const T=`${this.options.pluralSeparator}zero`,N=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(p&&(a.ordinal&&C.indexOf(N)===0&&w.push(u+C.replace(N,this.options.pluralSeparator)),w.push(u+C),f&&w.push(u+T)),g){const j=`${u}${this.options.contextSeparator||"_"}${a.context}`;w.push(j),p&&(a.ordinal&&C.indexOf(N)===0&&w.push(j+C.replace(N,this.options.pluralSeparator)),w.push(j+C),f&&w.push(j+T))}}let k;for(;k=w.pop();)this.isValidLookup(n)||(s=k,n=this.getResource(y,b,k,a))}))})}),{res:n,usedKey:i,exactUsedKey:s,usedLng:o,usedNS:l}}isValidLookup(e){return e!==void 0&&!(!this.options.returnNull&&e===null)&&!(!this.options.returnEmptyString&&e==="")}getResource(e,a,n,i={}){return this.i18nFormat?.getResource?this.i18nFormat.getResource(e,a,n,i):this.resourceStore.getResource(e,a,n,i)}getUsedParamsDetails(e={}){const a=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],n=e.replace&&!Ka(e.replace);let i=n?e.replace:e;if(n&&typeof e.count<"u"&&(i.count=e.count),this.options.interpolation.defaultVariables&&(i={...this.options.interpolation.defaultVariables,...i}),!n){i={...i};for(const s of a)delete i[s]}return i}static hasDefaultValue(e){const a="defaultValue";for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&a===n.substring(0,a.length)&&e[n]!==void 0)return!0;return!1}}class s8{constructor(e){this.options=e,this.supportedLngs=this.options.supportedLngs||!1,this.logger=au.create("languageUtils")}getScriptPartFromCode(e){if(e=BS(e),!e||e.indexOf("-")<0)return null;const a=e.split("-");return a.length===2||(a.pop(),a[a.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(a.join("-"))}getLanguagePartFromCode(e){if(e=BS(e),!e||e.indexOf("-")<0)return e;const a=e.split("-");return this.formatLanguageCode(a[0])}formatLanguageCode(e){if(Ka(e)&&e.indexOf("-")>-1){let a;try{a=Intl.getCanonicalLocales(e)[0]}catch{}return a&&this.options.lowerCaseLng&&(a=a.toLowerCase()),a||(this.options.lowerCaseLng?e.toLowerCase():e)}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e}isSupportedCode(e){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(e=this.getLanguagePartFromCode(e)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(e)>-1}getBestMatchFromCodes(e){if(!e)return null;let a;return e.forEach(n=>{if(a)return;const i=this.formatLanguageCode(n);(!this.options.supportedLngs||this.isSupportedCode(i))&&(a=i)}),!a&&this.options.supportedLngs&&e.forEach(n=>{if(a)return;const i=this.getScriptPartFromCode(n);if(this.isSupportedCode(i))return a=i;const s=this.getLanguagePartFromCode(n);if(this.isSupportedCode(s))return a=s;a=this.options.supportedLngs.find(o=>{if(o===s)return o;if(!(o.indexOf("-")<0&&s.indexOf("-")<0)&&(o.indexOf("-")>0&&s.indexOf("-")<0&&o.substring(0,o.indexOf("-"))===s||o.indexOf(s)===0&&s.length>1))return o})}),a||(a=this.getFallbackCodes(this.options.fallbackLng)[0]),a}getFallbackCodes(e,a){if(!e)return[];if(typeof e=="function"&&(e=e(a)),Ka(e)&&(e=[e]),Array.isArray(e))return e;if(!a)return e.default||[];let n=e[a];return n||(n=e[this.getScriptPartFromCode(a)]),n||(n=e[this.formatLanguageCode(a)]),n||(n=e[this.getLanguagePartFromCode(a)]),n||(n=e.default),n||[]}toResolveHierarchy(e,a){const n=this.getFallbackCodes((a===!1?[]:a)||this.options.fallbackLng||[],e),i=[],s=o=>{o&&(this.isSupportedCode(o)?i.push(o):this.logger.warn(`rejecting language code not found in supportedLngs: ${o}`))};return Ka(e)&&(e.indexOf("-")>-1||e.indexOf("_")>-1)?(this.options.load!=="languageOnly"&&s(this.formatLanguageCode(e)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&s(this.getScriptPartFromCode(e)),this.options.load!=="currentOnly"&&s(this.getLanguagePartFromCode(e))):Ka(e)&&s(this.formatLanguageCode(e)),n.forEach(o=>{i.indexOf(o)<0&&s(this.formatLanguageCode(o))}),i}}const o8={zero:0,one:1,two:2,few:3,many:4,other:5},l8={select:t=>t===1?"one":"other",resolvedOptions:()=>({pluralCategories:["one","other"]})};class Kme{constructor(e,a={}){this.languageUtils=e,this.options=a,this.logger=au.create("pluralResolver"),this.pluralRulesCache={}}addRule(e,a){this.rules[e]=a}clearCache(){this.pluralRulesCache={}}getRule(e,a={}){const n=BS(e==="dev"?"en":e),i=a.ordinal?"ordinal":"cardinal",s=JSON.stringify({cleanedCode:n,type:i});if(s in this.pluralRulesCache)return this.pluralRulesCache[s];let o;try{o=new Intl.PluralRules(n,{type:i})}catch{if(!Intl)return this.logger.error("No Intl support, please use an Intl polyfill!"),l8;if(!e.match(/-|_/))return l8;const c=this.languageUtils.getLanguagePartFromCode(e);o=this.getRule(c,a)}return this.pluralRulesCache[s]=o,o}needsPlural(e,a={}){let n=this.getRule(e,a);return n||(n=this.getRule("dev",a)),n?.resolvedOptions().pluralCategories.length>1}getPluralFormsOfKey(e,a,n={}){return this.getSuffixes(e,n).map(i=>`${a}${i}`)}getSuffixes(e,a={}){let n=this.getRule(e,a);return n||(n=this.getRule("dev",a)),n?n.resolvedOptions().pluralCategories.sort((i,s)=>o8[i]-o8[s]).map(i=>`${this.options.prepend}${a.ordinal?`ordinal${this.options.prepend}`:""}${i}`):[]}getSuffix(e,a,n={}){const i=this.getRule(e,n);return i?`${this.options.prepend}${n.ordinal?`ordinal${this.options.prepend}`:""}${i.select(a)}`:(this.logger.warn(`no plural rule found for: ${e}`),this.getSuffix("dev",a,n))}}const c8=(t,e,a,n=".",i=!0)=>{let s=Ome(t,e,a);return!s&&i&&Ka(a)&&(s=e3(t,a,n),s===void 0&&(s=e3(e,a,n))),s},kE=t=>t.replace(/\$/g,"$$$$");class Yme{constructor(e={}){this.logger=au.create("interpolator"),this.options=e,this.format=e?.interpolation?.format||(a=>a),this.init(e)}init(e={}){e.interpolation||(e.interpolation={escapeValue:!0});const{escape:a,escapeValue:n,useRawValueToEscape:i,prefix:s,prefixEscaped:o,suffix:l,suffixEscaped:c,formatSeparator:d,unescapeSuffix:u,unescapePrefix:m,nestingPrefix:p,nestingPrefixEscaped:f,nestingSuffix:g,nestingSuffixEscaped:v,nestingOptionsSeparator:b,maxReplaces:y,alwaysFormat:w}=e.interpolation;this.escape=a!==void 0?a:Ume,this.escapeValue=n!==void 0?n:!0,this.useRawValueToEscape=i!==void 0?i:!1,this.prefix=s?ry(s):o||"{{",this.suffix=l?ry(l):c||"}}",this.formatSeparator=d||",",this.unescapePrefix=u?"":m||"-",this.unescapeSuffix=this.unescapePrefix?"":u||"",this.nestingPrefix=p?ry(p):f||ry("$t("),this.nestingSuffix=g?ry(g):v||ry(")"),this.nestingOptionsSeparator=b||",",this.maxReplaces=y||1e3,this.alwaysFormat=w!==void 0?w:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const e=(a,n)=>a?.source===n?(a.lastIndex=0,a):new RegExp(n,"g");this.regexp=e(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=e(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=e(this.nestingRegexp,`${this.nestingPrefix}((?:[^()"']+|"[^"]*"|'[^']*'|\\((?:[^()]|"[^"]*"|'[^']*')*\\))*?)${this.nestingSuffix}`)}interpolate(e,a,n,i){let s,o,l;const c=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},d=f=>{if(f.indexOf(this.formatSeparator)<0){const y=c8(a,c,f,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(y,void 0,n,{...i,...a,interpolationkey:f}):y}const g=f.split(this.formatSeparator),v=g.shift().trim(),b=g.join(this.formatSeparator).trim();return this.format(c8(a,c,v,this.options.keySeparator,this.options.ignoreJSONStructure),b,n,{...i,...a,interpolationkey:v})};this.resetRegExp();const u=i?.missingInterpolationHandler||this.options.missingInterpolationHandler,m=i?.interpolation?.skipOnVariables!==void 0?i.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:f=>kE(f)},{regex:this.regexp,safeValue:f=>this.escapeValue?kE(this.escape(f)):kE(f)}].forEach(f=>{for(l=0;s=f.regex.exec(e);){const g=s[1].trim();if(o=d(g),o===void 0)if(typeof u=="function"){const b=u(e,s,i);o=Ka(b)?b:""}else if(i&&Object.prototype.hasOwnProperty.call(i,g))o="";else if(m){o=s[0];continue}else this.logger.warn(`missed to pass in variable ${g} for interpolating ${e}`),o="";else!Ka(o)&&!this.useRawValueToEscape&&(o=e8(o));const v=f.safeValue(o);if(e=e.replace(s[0],v),m?(f.regex.lastIndex+=o.length,f.regex.lastIndex-=s[0].length):f.regex.lastIndex=0,l++,l>=this.maxReplaces)break}}),e}nest(e,a,n={}){let i,s,o;const l=(c,d)=>{const u=this.nestingOptionsSeparator;if(c.indexOf(u)<0)return c;const m=c.split(new RegExp(`${u}[ ]*{`));let p=`{${m[1]}`;c=m[0],p=this.interpolate(p,o);const f=p.match(/'/g),g=p.match(/"/g);((f?.length??0)%2===0&&!g||g.length%2!==0)&&(p=p.replace(/'/g,'"'));try{o=JSON.parse(p),d&&(o={...d,...o})}catch(v){return this.logger.warn(`failed parsing options string in nesting for key ${c}`,v),`${c}${u}${p}`}return o.defaultValue&&o.defaultValue.indexOf(this.prefix)>-1&&delete o.defaultValue,c};for(;i=this.nestingRegexp.exec(e);){let c=[];o={...n},o=o.replace&&!Ka(o.replace)?o.replace:o,o.applyPostProcessor=!1,delete o.defaultValue;const d=/{.*}/.test(i[1])?i[1].lastIndexOf("}")+1:i[1].indexOf(this.formatSeparator);if(d!==-1&&(c=i[1].slice(d).split(this.formatSeparator).map(u=>u.trim()).filter(Boolean),i[1]=i[1].slice(0,d)),s=a(l.call(this,i[1].trim(),o),o),s&&i[0]===e&&!Ka(s))return s;Ka(s)||(s=e8(s)),s||(this.logger.warn(`missed to resolve ${i[1]} for nesting ${e}`),s=""),c.length&&(s=c.reduce((u,m)=>this.format(u,m,n.lng,{...n,interpolationkey:i[1].trim()}),s.trim())),e=e.replace(i[0],s),this.regexp.lastIndex=0}return e}}const Qme=t=>{let e=t.toLowerCase().trim();const a={};if(t.indexOf("(")>-1){const n=t.split("(");e=n[0].toLowerCase().trim();const i=n[1].substring(0,n[1].length-1);e==="currency"&&i.indexOf(":")<0?a.currency||(a.currency=i.trim()):e==="relativetime"&&i.indexOf(":")<0?a.range||(a.range=i.trim()):i.split(";").forEach(o=>{if(o){const[l,...c]=o.split(":"),d=c.join(":").trim().replace(/^'+|'+$/g,""),u=l.trim();a[u]||(a[u]=d),d==="false"&&(a[u]=!1),d==="true"&&(a[u]=!0),isNaN(d)||(a[u]=parseInt(d,10))}})}return{formatName:e,formatOptions:a}},d8=t=>{const e={};return(a,n,i)=>{let s=i;i&&i.interpolationkey&&i.formatParams&&i.formatParams[i.interpolationkey]&&i[i.interpolationkey]&&(s={...s,[i.interpolationkey]:void 0});const o=n+JSON.stringify(s);let l=e[o];return l||(l=t(BS(n),i),e[o]=l),l(a)}},Xme=t=>(e,a,n)=>t(BS(a),n)(e);class Zme{constructor(e={}){this.logger=au.create("formatter"),this.options=e,this.init(e)}init(e,a={interpolation:{}}){this.formatSeparator=a.interpolation.formatSeparator||",";const n=a.cacheInBuiltFormats?d8:Xme;this.formats={number:n((i,s)=>{const o=new Intl.NumberFormat(i,{...s});return l=>o.format(l)}),currency:n((i,s)=>{const o=new Intl.NumberFormat(i,{...s,style:"currency"});return l=>o.format(l)}),datetime:n((i,s)=>{const o=new Intl.DateTimeFormat(i,{...s});return l=>o.format(l)}),relativetime:n((i,s)=>{const o=new Intl.RelativeTimeFormat(i,{...s});return l=>o.format(l,s.range||"day")}),list:n((i,s)=>{const o=new Intl.ListFormat(i,{...s});return l=>o.format(l)})}}add(e,a){this.formats[e.toLowerCase().trim()]=a}addCached(e,a){this.formats[e.toLowerCase().trim()]=d8(a)}format(e,a,n,i={}){const s=a.split(this.formatSeparator);if(s.length>1&&s[0].indexOf("(")>1&&s[0].indexOf(")")<0&&s.find(l=>l.indexOf(")")>-1)){const l=s.findIndex(c=>c.indexOf(")")>-1);s[0]=[s[0],...s.splice(1,l)].join(this.formatSeparator)}return s.reduce((l,c)=>{const{formatName:d,formatOptions:u}=Qme(c);if(this.formats[d]){let m=l;try{const p=i?.formatParams?.[i.interpolationkey]||{},f=p.locale||p.lng||i.locale||i.lng||n;m=this.formats[d](l,f,{...u,...i,...p})}catch(p){this.logger.warn(p)}return m}else this.logger.warn(`there was no format function for ${d}`);return l},e)}}const Jme=(t,e)=>{t.pending[e]!==void 0&&(delete t.pending[e],t.pendingCount--)};class epe extends RA{constructor(e,a,n,i={}){super(),this.backend=e,this.store=a,this.services=n,this.languageUtils=n.languageUtils,this.options=i,this.logger=au.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=i.maxParallelReads||10,this.readingCalls=0,this.maxRetries=i.maxRetries>=0?i.maxRetries:5,this.retryTimeout=i.retryTimeout>=1?i.retryTimeout:350,this.state={},this.queue=[],this.backend?.init?.(n,i.backend,i)}queueLoad(e,a,n,i){const s={},o={},l={},c={};return e.forEach(d=>{let u=!0;a.forEach(m=>{const p=`${d}|${m}`;!n.reload&&this.store.hasResourceBundle(d,m)?this.state[p]=2:this.state[p]<0||(this.state[p]===1?o[p]===void 0&&(o[p]=!0):(this.state[p]=1,u=!1,o[p]===void 0&&(o[p]=!0),s[p]===void 0&&(s[p]=!0),c[m]===void 0&&(c[m]=!0)))}),u||(l[d]=!0)}),(Object.keys(s).length||Object.keys(o).length)&&this.queue.push({pending:o,pendingCount:Object.keys(o).length,loaded:{},errors:[],callback:i}),{toLoad:Object.keys(s),pending:Object.keys(o),toLoadLanguages:Object.keys(l),toLoadNamespaces:Object.keys(c)}}loaded(e,a,n){const i=e.split("|"),s=i[0],o=i[1];a&&this.emit("failedLoading",s,o,a),!a&&n&&this.store.addResourceBundle(s,o,n,void 0,void 0,{skipCopy:!0}),this.state[e]=a?-1:2,a&&n&&(this.state[e]=0);const l={};this.queue.forEach(c=>{Ime(c.loaded,[s],o),Jme(c,e),a&&c.errors.push(a),c.pendingCount===0&&!c.done&&(Object.keys(c.loaded).forEach(d=>{l[d]||(l[d]={});const u=c.loaded[d];u.length&&u.forEach(m=>{l[d][m]===void 0&&(l[d][m]=!0)})}),c.done=!0,c.errors.length?c.callback(c.errors):c.callback())}),this.emit("loaded",l),this.queue=this.queue.filter(c=>!c.done)}read(e,a,n,i=0,s=this.retryTimeout,o){if(!e.length)return o(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:e,ns:a,fcName:n,tried:i,wait:s,callback:o});return}this.readingCalls++;const l=(d,u)=>{if(this.readingCalls--,this.waitingReads.length>0){const m=this.waitingReads.shift();this.read(m.lng,m.ns,m.fcName,m.tried,m.wait,m.callback)}if(d&&u&&i{for(let o=0;o-1&&this.options.ns.splice(a,1)}getResource(e,a,n,i={}){const s=i.keySeparator!==void 0?i.keySeparator:this.options.keySeparator,o=i.ignoreJSONStructure!==void 0?i.ignoreJSONStructure:this.options.ignoreJSONStructure;let l;e.indexOf(".")>-1?l=e.split("."):(l=[e,a],n&&(Array.isArray(n)?l.push(...n):Ka(n)&&s?l.push(...n.split(s)):l.push(n)));const c=uT(this.data,l);return!c&&!a&&!n&&e.indexOf(".")>-1&&(e=l[0],a=l[1],n=l.slice(2).join(".")),c||!o||!Ka(n)?c:e3(this.data?.[e]?.[a],n,s)}addResource(e,a,n,i,s={silent:!1}){const o=s.keySeparator!==void 0?s.keySeparator:this.options.keySeparator;let l=[e,a];n&&(l=l.concat(o?n.split(o):n)),e.indexOf(".")>-1&&(l=e.split("."),i=a,a=l[1]),this.addNamespaces(a),r8(this.data,l,i),s.silent||this.emit("added",e,a,n,i)}addResources(e,a,n,i={silent:!1}){for(const s in n)(Ka(n[s])||Array.isArray(n[s]))&&this.addResource(e,a,s,n[s],{silent:!0});i.silent||this.emit("added",e,a,n)}addResourceBundle(e,a,n,i,s,o={silent:!1,skipCopy:!1}){let l=[e,a];e.indexOf(".")>-1&&(l=e.split("."),i=n,n=a,a=l[1]),this.addNamespaces(a);let c=uT(this.data,l)||{};o.skipCopy||(n=JSON.parse(JSON.stringify(n))),i?SZ(c,n,s):c={...c,...n},r8(this.data,l,c),o.silent||this.emit("added",e,a,n)}removeResourceBundle(e,a){this.hasResourceBundle(e,a)&&delete this.data[e][a],this.removeNamespaces(a),this.emit("removed",e,a)}hasResourceBundle(e,a){return this.getResource(e,a)!==void 0}getResourceBundle(e,a){return a||(a=this.options.defaultNS),this.getResource(e,a)}getDataByLanguage(e){return this.data[e]}hasLanguageSomeTranslations(e){const a=this.getDataByLanguage(e);return!!(a&&Object.keys(a)||[]).find(i=>a[i]&&Object.keys(a[i]).length>0)}toJSON(){return this.data}}var wZ={processors:{},addPostProcessor(t){this.processors[t.name]=t},handle(t,e,a,n,i){return t.forEach(s=>{e=this.processors[s]?.process(e,a,n,i)??e}),e}};const kZ=Symbol("i18next/PATH_KEY");function Wme(){const t=[],e=Object.create(null);let a;return e.get=(n,i)=>(a?.revoke?.(),i===kZ?t:(t.push(i),a=Proxy.revocable(n,e),a.proxy)),Proxy.revocable(Object.create(null),e).proxy}function t3(t,e){const{[kZ]:a}=t(Wme());return a.join(e?.keySeparator??".")}const i8={},wE=t=>!Ka(t)&&typeof t!="boolean"&&typeof t!="number";class pT extends RA{constructor(e,a={}){super(),Rme(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],e,this),this.options=a,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=au.create("translator")}changeLanguage(e){e&&(this.language=e)}exists(e,a={interpolation:{}}){const n={...a};if(e==null)return!1;const i=this.resolve(e,n);if(i?.res===void 0)return!1;const s=wE(i.res);return!(n.returnObjects===!1&&s)}extractFromKey(e,a){let n=a.nsSeparator!==void 0?a.nsSeparator:this.options.nsSeparator;n===void 0&&(n=":");const i=a.keySeparator!==void 0?a.keySeparator:this.options.keySeparator;let s=a.ns||this.options.defaultNS||[];const o=n&&e.indexOf(n)>-1,l=!this.options.userDefinedKeySeparator&&!a.keySeparator&&!this.options.userDefinedNsSeparator&&!a.nsSeparator&&!Gme(e,n,i);if(o&&!l){const c=e.match(this.interpolator.nestingRegexp);if(c&&c.length>0)return{key:e,namespaces:Ka(s)?[s]:s};const d=e.split(n);(n!==i||n===i&&this.options.ns.indexOf(d[0])>-1)&&(s=d.shift()),e=d.join(i)}return{key:e,namespaces:Ka(s)?[s]:s}}translate(e,a,n){let i=typeof a=="object"?{...a}:a;if(typeof i!="object"&&this.options.overloadTranslationOptionHandler&&(i=this.options.overloadTranslationOptionHandler(arguments)),typeof i=="object"&&(i={...i}),i||(i={}),e==null)return"";typeof e=="function"&&(e=t3(e,{...this.options,...i})),Array.isArray(e)||(e=[String(e)]);const s=i.returnDetails!==void 0?i.returnDetails:this.options.returnDetails,o=i.keySeparator!==void 0?i.keySeparator:this.options.keySeparator,{key:l,namespaces:c}=this.extractFromKey(e[e.length-1],i),d=c[c.length-1];let u=i.nsSeparator!==void 0?i.nsSeparator:this.options.nsSeparator;u===void 0&&(u=":");const m=i.lng||this.language,p=i.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(m?.toLowerCase()==="cimode")return p?s?{res:`${d}${u}${l}`,usedKey:l,exactUsedKey:l,usedLng:m,usedNS:d,usedParams:this.getUsedParamsDetails(i)}:`${d}${u}${l}`:s?{res:l,usedKey:l,exactUsedKey:l,usedLng:m,usedNS:d,usedParams:this.getUsedParamsDetails(i)}:l;const f=this.resolve(e,i);let g=f?.res;const v=f?.usedKey||l,b=f?.exactUsedKey||l,y=["[object Number]","[object Function]","[object RegExp]"],w=i.joinArrays!==void 0?i.joinArrays:this.options.joinArrays,k=!this.i18nFormat||this.i18nFormat.handleAsObject,C=i.count!==void 0&&!Ka(i.count),T=pT.hasDefaultValue(i),N=C?this.pluralResolver.getSuffix(m,i.count,i):"",j=i.ordinal&&C?this.pluralResolver.getSuffix(m,i.count,{ordinal:!1}):"",D=C&&!i.ordinal&&i.count===0,_=D&&i[`defaultValue${this.options.pluralSeparator}zero`]||i[`defaultValue${N}`]||i[`defaultValue${j}`]||i.defaultValue;let E=g;k&&!g&&T&&(E=_);const z=wE(E),I=Object.prototype.toString.apply(E);if(k&&E&&z&&y.indexOf(I)<0&&!(Ka(w)&&Array.isArray(E))){if(!i.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const B=this.options.returnedObjectHandler?this.options.returnedObjectHandler(v,E,{...i,ns:c}):`key '${l} (${this.language})' returned an object instead of string.`;return s?(f.res=B,f.usedParams=this.getUsedParamsDetails(i),f):B}if(o){const B=Array.isArray(E),R=B?[]:{},K=B?b:v;for(const J in E)if(Object.prototype.hasOwnProperty.call(E,J)){const X=`${K}${o}${J}`;T&&!g?R[J]=this.translate(X,{...i,defaultValue:wE(_)?_[J]:void 0,joinArrays:!1,ns:c}):R[J]=this.translate(X,{...i,joinArrays:!1,ns:c}),R[J]===X&&(R[J]=E[J])}g=R}}else if(k&&Ka(w)&&Array.isArray(g))g=g.join(w),g&&(g=this.extendTranslation(g,e,i,n));else{let B=!1,R=!1;!this.isValidLookup(g)&&T&&(B=!0,g=_),this.isValidLookup(g)||(R=!0,g=l);const J=(i.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&R?void 0:g,X=T&&_!==g&&this.options.updateMissing;if(R||B||X){if(this.logger.log(X?"updateKey":"missingKey",m,d,l,X?_:g),o){const Y=this.resolve(l,{...i,keySeparator:!1});Y&&Y.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let ce=[];const de=this.languageUtils.getFallbackCodes(this.options.fallbackLng,i.lng||this.language);if(this.options.saveMissingTo==="fallback"&&de&&de[0])for(let Y=0;Y/api/v1/metrics for Prometheus/Grafana monitoring.",bearerTokenOptional:"Bearer Token (optional)",bearerTokenHint:"If set, requests must include Authorization: Bearer ",metricsConnectionStatus:"Connection status",metricsPrinterState:"Printer state (idle/printing/etc)",metricsPrintProgress:"Print progress 0-100%",metricsBedTemp:"Bed temperature",metricsNozzleTemp:"Nozzle temperature",metricsPrintsTotal:"Total prints by result",metricsMore:"...and more (layers, fans, queue, filament usage)",smartPlugsDescription:"Connect smart plugs (Tasmota or Home Assistant) to automate power control and track energy usage for your printers.",allOn:"All On",allOff:"All Off",addSmartPlug:"Add Smart Plug",energySummary:"Energy Summary",currentPower:"Current Power",plugsOnline:"{{reachable}}/{{total}} plugs online",today:"Today",yesterday:"Yesterday",total:"Total",enablePlugsForSummary:"Enable plugs to see energy summary",addNotificationProvider:"Add",systemBadge:"(System)",creating:"Creating...",changing:"Changing...",deleteUserAndItems:"Delete user AND their items",deleteUserKeepItems:"Delete user, keep items (become ownerless)",ok:"OK",twoFa:{totpTitle:"Authenticator App (TOTP)",totpDesc:"Use an authenticator app like Google Authenticator, Aegis or Authy.",emailOtpTitle:"Email OTP",emailOtpDesc:"Send a one-time code to {{email}} when you log in.",emailOtpNoEmail:"Add an email address to your account to enable this method.",addEmailFirst:"Your account has no email address. Ask an admin to add one before enabling Email OTP.",setupTotp:"Set up Authenticator App",setupAuthApp:"Set up Authenticator App",setupInstructions:"Scan the QR code below with your authenticator app, then confirm with a code.",manualEntry:"Can't scan? Enter this secret manually:",scannedContinue:"I've scanned the code — continue",enterCodeToConfirm:"Enter the 6-digit code from your authenticator app to confirm setup.",activate:"Activate",disableTotp:"Disable Authenticator",disableConfirmHint:"Enter a valid TOTP code or a backup code to disable the authenticator.",totpDisabled:"Authenticator app disabled.",emailOtpEnabled:"Email OTP enabled.",emailOtpDisabled:"Email OTP disabled.",smtpRequired:"Please configure and test SMTP settings first.",invalidCode:"Invalid code. Please try again.",enableEmailOtp:"Enable Email OTP",disableEmailOtp:"Disable Email OTP",emailSetupEnterCode:"A verification code has been sent to your email address. Enter it below to confirm you own this inbox.",verifyAndEnable:"Verify & Enable",emailDisablePasswordHint:"Enter your account password to confirm disabling email OTP.",passwordPlaceholder:"Enter your password",backupCodesTitle:"Save your backup codes",backupCodesWarning:"Save these codes somewhere safe. Each code can only be used once and they will not be shown again.",backupCodesRemaining:"{{count}} backup codes remaining",savedCodes:"I've saved my codes",regenBackup:"Regenerate Backup Codes",regenBackupHint:"Enter your current TOTP code to generate 10 new backup codes. All existing backup codes will be invalidated.",newBackupCodes:"New backup codes",linkedAccounts:"Linked SSO Accounts",linkedAccountsDesc:"These external identity providers are linked to your account.",oidcUnlinked:"Account unlinked."},oidc:{title:"SSO / OIDC Providers",desc:"Configure OpenID Connect providers to allow single sign-on via external identity providers.",addProvider:"Add Provider",newProvider:"New Provider",empty:"No OIDC providers configured yet.",created:"Provider created.",updated:"Provider updated.",deleted:"Provider deleted.",refreshIcon:"Refresh icon",removeIcon:"Remove icon",iconRefreshed:"Icon refreshed.",iconRemoved:"Icon removed.",iconFetchFailed:"Icon could not be fetched from the provider URL.",deleteTitle:"Delete Provider",deleteMessage:'Delete "{{name}}"? All linked user accounts will be disconnected.',form:{name:"Display Name",issuerUrl:"Issuer URL",clientId:"Client ID",clientSecret:"Client Secret",scopes:"Scopes",iconUrl:"Icon URL (optional)",enabled:"Enabled",autoCreate:"Auto-create users",autoCreateDesc:"Automatically create a local account on first login.",autoLink:"Auto-link existing accounts",autoLinkDesc:"Link existing local accounts by matching email on first login.",secretHint:"leave blank to keep current",secretPlaceholder:"new secret",emailClaim:"Email Claim",emailClaimDesc:"JWT claim used as email identity. Use 'preferred_username' or 'upn' for Azure Entra ID (which does not send email_verified). Only use trusted claim names.",emailClaimPlaceholder:"email",emailClaimCustomClaimAutoLinkWarning:"Custom claims are safe for auto-link only when the value is tenant-administered (e.g. Azure Entra ID upn / preferred_username). Do not enable auto-link if your IdP allows users to self-assert this claim.",requireEmailVerified:"Require email verified",requireEmailVerifiedDesc:"Only accept the email claim when the provider marks it as verified.",requireEmailVerifiedWarning:"Warning: email will be accepted even without verification. Use only with trusted providers.",requireEmailVerifiedAutoLink:"Disable auto-link first to change this setting.",defaultGroup:"Default Group",defaultGroupDesc:"Group assigned to auto-created users. Falls back to Viewers if not set.",defaultGroupViewersFallback:"Viewers (default)"}},encryption:{title:"MFA Encryption Status",enabledFromEnv:"At-rest encryption enabled (key from MFA_ENCRYPTION_KEY environment variable)",enabledFromFile:"At-rest encryption enabled (key loaded from data directory)",enabledGenerated:"At-rest encryption enabled with auto-generated key",notConfigured:"At-rest encryption not configured",notConfiguredDesc:"TOTP secrets and OIDC client_secrets are stored in plaintext. Set MFA_ENCRYPTION_KEY or restart Bambuddy with a writable data directory to auto-generate one.",allEncrypted:"All MFA secrets are encrypted at rest.",legacyRowsLabel:"Legacy plaintext rows",encryptedRowsLabel:"Encrypted rows",legacyRowsWarning:"{{count}} legacy plaintext row(s) detected. Re-save the OIDC provider or re-enroll the user’s authenticator app to migrate to encrypted storage.",backupHint:"The auto-generated key is stored at DATA_DIR/.mfa_encryption_key and is included in local backup ZIPs. Keep your backups secure or set MFA_ENCRYPTION_KEY explicitly.",decryptionBrokenTitle:"Encryption key missing",decryptionBrokenError:"{{count}} encrypted record(s) cannot be decrypted because the encryption key is no longer available. Restore the previous MFA_ENCRYPTION_KEY or DATA_DIR/.mfa_encryption_key to recover.",migrationErrorWarning:"{{count}} legacy row(s) failed to re-encrypt at startup. Check server logs and restart Bambuddy to retry."}},notification:{printStarted:{title:"Print Started",body:"{{printer}}: {{filename}} has started printing"},printCompleted:{title:"Print Completed",body:"{{printer}}: {{filename}} completed successfully"},printFailed:{title:"Print Failed",body:"{{printer}}: {{filename}} has failed"},printStopped:{title:"Print Stopped",body:"{{printer}}: {{filename}} was stopped"},printProgress:{title:"Print Progress",body:"{{printer}}: {{filename}} is {{percent}}% complete"},printerOffline:{title:"Printer Offline",body:"{{printer}} is offline"},printerError:{title:"Printer Error",body:"{{printer}}: {{error}}"},filamentLow:{title:"Low Filament",body:"{{printer}}: Filament is running low"},maintenanceDue:{title:"Maintenance Due",body:"{{printer}}: {{items}} need attention"}},errors:{generic:"Something went wrong",networkError:"Network error. Please check your connection.",notFound:"Not found",unauthorized:"Unauthorized",serverError:"Server error",validationError:"Please check your input",printerConnectionFailed:"Failed to connect to printer",saveFailed:"Failed to save changes",deleteFailed:"Failed to delete",loadFailed:"Failed to load data"},hmsErrors:{title:"Errors - {{name}}",noErrors:"No errors",viewOnWiki:"View on Bambu Lab Wiki",clearInstructions:"Clear errors on the printer to dismiss them here.",clearErrors:"Clear Errors",clearSuccess:"HMS errors cleared",clearFailed:"Failed to clear HMS errors"},mqttDebug:{title:"MQTT Debug Log",searchPlaceholder:"Search topic or payload...",noMessages:"No messages logged yet",startLoggingHint:'Click "Start Logging" to begin capturing MQTT messages',noMessagesMatch:"No messages match your filter",adjustFilterHint:"Try adjusting your search or filter criteria",incoming:"Incoming",outgoing:"Outgoing",loggingStopped:"Logging stopped",loggingActive:"Logging active - messages will auto-refresh",startLogging:"Start Logging",stopLogging:"Stop Logging",clearLog:"Clear Log",topic:"Topic",timestamp:"Timestamp",direction:"Direction",all:"All"},printerFiles:{title:"File Manager",storageUsed:"Used:",storageFree:"Free:",filterPlaceholder:"Filter files...",deleteButton:"Delete",deleteFiles:"Delete {{count}} Files",deleteFileConfirm:'Delete "{{name}}"? This cannot be undone.',deleteFilesConfirm:"Delete {{count}} selected files? This cannot be undone.",noFiles:"No files on printer",loadingFiles:"Loading files...",failedToLoad:"Failed to load files",toast:{filesDeleted:"Deleted {{count}} file(s)",deleteFailed:"Delete failed: {{error}}"}},confirm:{delete:"Are you sure you want to delete this?",unsavedChanges:"You have unsaved changes. Are you sure you want to leave?",clearQueue:"Are you sure you want to clear the queue?"},login:{title:"Bambuddy Login",subtitle:"Sign in to your account",username:"Username",usernamePlaceholder:"Enter your username",usernameOrEmail:"Username or Email",usernameOrEmailPlaceholder:"Username or @ Email",password:"Password",passwordPlaceholder:"Enter your password",signIn:"Sign in",signingIn:"Logging in...",rememberMe:"Remember Me",forgotPassword:"Forgot your password?",loginSuccess:"Logged in successfully",loginFailed:"Login failed",enterCredentials:"Please enter username and password",enterEmail:"Please enter your email address",oidcLoginFailed:"OIDC login failed",oidcErrors:{providerError:"The identity provider returned an error",missingParameters:"OIDC callback is missing required parameters",invalidState:"OIDC state is invalid or has already been used",stateExpired:"OIDC login session expired — please try again",providerNotFound:"OIDC provider not found",discoveryFailed:"Failed to fetch OIDC discovery document",invalidDiscovery:"OIDC discovery document is invalid",networkError:"Network error during OIDC token exchange",badResponse:"Unexpected response during OIDC token exchange",noIdToken:"OIDC provider did not return an ID token",validationFailed:"OIDC token validation failed",nonceMismatch:"OIDC nonce mismatch — possible replay attack",missingSubClaim:"OIDC token is missing the sub claim",noLinkedAccount:"No local account is linked to this OIDC identity",accountInactive:"Your account is inactive",userResolutionFailed:"Failed to resolve your account",internalError:"An internal error occurred during OIDC login",tokenExchangeFailed:"OIDC token exchange failed"},forgotPasswordTitle:"Forgot Password",forgotPasswordMessage:"If you've forgotten your password, please contact your system administrator to reset it.",forgotPasswordEmailMessage:"Enter your email address and we'll send you a new password.",emailAddress:"Email Address",emailPlaceholder:"your.email@example.com",cancel:"Cancel",sending:"Sending...",sendResetEmail:"Send Reset Email",howToReset:"How to reset your password:",resetStep1:"Contact your Bambuddy administrator",resetStep2:"Ask them to reset your password in User Management",resetStep3:"They can set a new temporary password for you",resetStep4:"Log in with the new password and change it in Settings",gotIt:"Got it",resetPassword:{title:"Set New Password",subtitle:"Enter and confirm your new password below.",newPassword:"New Password",newPasswordPlaceholder:"At least 8 characters",confirmPassword:"Confirm Password",confirmPasswordPlaceholder:"Repeat new password",saving:"Saving…",submit:"Set New Password",backToLogin:"Back to login",passwordsDoNotMatch:"Passwords do not match",passwordTooShort:"Password must be at least 8 characters",resetFailed:"Password reset failed. The link may have expired."},twoFA:{title:"Two-Factor Authentication",subtitle:"Your account is protected with 2FA. Enter the verification code below.",methodAuthenticator:"Authenticator App",methodEmail:"Email Code",methodBackup:"Backup Code",instructionsTotp:"Open your authenticator app and enter the 6-digit code for Bambuddy.",instructionsEmail:"A 6-digit code has been sent to your email address. It expires in 10 minutes.",instructionsEmailNotSent:"Click the button below to receive a verification code via email.",instructionsBackup:"Enter one of your 8-character backup recovery codes. Each code can only be used once.",sendCodeButton:"Send Code via Email",sendingCode:"Sending...",resendCode:"Resend code",codeLabel:"Verification Code",backupCodeLabel:"Backup Code",codePlaceholder:"000000",backupCodePlaceholder:"XXXXXXXX",verifyButton:"Verify",verifyingButton:"Verifying...",backToLogin:"← Back to login",orContinueWith:"or continue with",signInWith:"Sign in with {{provider}}",enterCode:"Please enter the verification code",sendCodeFailed:"Failed to send verification code",invalidCode:"Invalid code. Please try again."}},setup:{title:"Bambuddy Setup",subtitle:"Configure authentication for your Bambuddy instance",enableAuth:"Enable Authentication",adminAccount:"Admin Account",adminAccountDesc:"If admin users already exist, authentication will be enabled using the existing admin accounts. Leave the fields below empty to use existing admins, or enter new credentials to create a new admin user.",adminUsername:"Admin Username",adminPassword:"Admin Password",optionalIfAdminExists:"(optional if admin users exist)",adminUsernamePlaceholder:"Enter admin username (optional)",adminPasswordPlaceholder:"Enter admin password (optional)",confirmPassword:"Confirm Password",confirmPasswordPlaceholder:"Confirm admin password",settingUp:"Setting up...",completeSetup:"Complete Setup",toast:{authEnabledAdminCreated:"Authentication enabled and admin user created",authEnabledExistingAdmins:"Authentication enabled using existing admin users",setupCompleted:"Setup completed",enterBothCredentials:"Please enter both admin username and password, or leave both empty to use existing admin users",passwordsDoNotMatch:"Passwords do not match",passwordTooShort:"Password must be at least 6 characters"}},changePassword:{title:"Change Password",currentPassword:"Current Password",currentPasswordPlaceholder:"Enter current password",newPassword:"New Password",newPasswordPlaceholder:"Enter new password (min 6 characters)",confirmPassword:"Confirm New Password",confirmPasswordPlaceholder:"Confirm new password",passwordsDoNotMatch:"Passwords do not match",passwordTooShort:"Password must be at least 6 characters",changing:"Changing...",success:"Password changed successfully",failed:"Failed to change password"},plateAlert:{title:"Print Paused!",message:"Objects detected on build plate. The print has been automatically paused. Please clear the plate and resume the print.",understand:"I Understand"},camera:{title:"Camera View",invalidPrinterId:"Invalid printer ID",live:"Live",snapshot:"Snapshot",restartStream:"Restart stream",refreshSnapshot:"Refresh snapshot",fullscreen:"Fullscreen",exitFullscreen:"Exit fullscreen",connectingToCamera:"Connecting to camera...",capturingSnapshot:"Capturing snapshot...",connectionLost:"Connection lost",connectionFailed:"Camera connection failed",reconnecting:"Reconnecting in {{countdown}}s... (attempt {{attempt}}/{{max}})",reconnectNow:"Reconnect now",cameraUnavailable:"Camera unavailable",cameraUnavailableDesc:"Make sure the printer is powered on and connected.",noCamera:"No camera available",retry:"Retry",cameraStream:"Camera stream",zoomOut:"Zoom out",zoomIn:"Zoom in",resetZoom:"Reset zoom",recording:"Recording",startRecording:"Start Recording",stopRecording:"Stop Recording",chamberLight:"Toggle chamber light",unavailable:"Camera unavailable",diagnose:{button:"Diagnose",modalTitle:"Camera diagnostic",running:"Running diagnostic...",runFailed:"Diagnostic could not run: {{error}}",retry:"Run again",stage:{tcp_reachable:"Network reachability",first_frame:"Frame capture",live_stream_active:"Live stream active"},summary:{all_ok:"Camera is working. The diagnostic completed all stages successfully.",live_stream_active_healthy:"Camera is currently streaming with recent frames — no test needed.",printer_unreachable:"Printer is not reachable. Check the IP address, network connection, and that the printer is powered on.",camera_port_closed:"Printer is reachable but the camera port is closed. Make sure LAN-only mode and Developer Mode are enabled in the printer settings.",no_frame:"Connected to the camera but no frames were received. Try again, or check that the camera is enabled in the printer settings.",unknown_failure:"Camera diagnostic failed for an unknown reason. Check the support log for details."},meta:{protocol:"Protocol",port:"Port",profile:"Profile"}}},groups:{title:"Group Management",subtitle:"Manage permission groups for access control",backToSettings:"Back to Settings",createGroup:"Create Group",noPermission:"You do not have permission to access this page.",system:"System",noDescription:"No description",usersCount:"{{count}} users",permissionsCount:"{{count}} permissions",edit:"Edit",delete:"Delete",toast:{created:"Group created successfully",updated:"Group updated successfully",deleted:"Group deleted successfully",enterGroupName:"Please enter a group name"},modal:{editGroup:"Edit Group",createGroup:"Create Group",cancel:"Cancel",saving:"Saving...",creating:"Creating...",saveChanges:"Save Changes"},form:{groupName:"Group Name",groupNamePlaceholder:"Enter group name",systemGroupWarning:"System group names cannot be changed",description:"Description",descriptionPlaceholder:"Enter description (optional)",permissions:"Permissions ({{count}} selected)"},deleteModal:{title:"Delete Group",message:"Are you sure you want to delete this group? Users in this group will lose these permissions.",confirm:"Delete Group"},editor:{title:"Edit Group",createTitle:"Create Group",search:"Search permissions...",selectAll:"Select All",clearAll:"Clear All",permissionsSelected:"{{count}} selected",noResults:"No permissions match your search"}},users:{title:"User Management",subtitle:"Manage users and their access to your Bambuddy instance",backToSettings:"Back to Settings",createUser:"Create User",noPermission:"You do not have permission to access this page.",admin:"Admin",noGroups:"No groups",active:"Active",inactive:"Inactive",edit:"Edit",delete:"Delete",system:"System",noGroupsAvailable:"No groups available",table:{username:"Username",groups:"Groups",status:"Status",actions:"Actions"},toast:{created:"User created successfully",updated:"User updated successfully",deleted:"User deleted successfully",fillRequired:"Please fill in all required fields",passwordsDoNotMatch:"Passwords do not match",passwordTooShort:"Password must be at least 6 characters",ldapProvisioned:'Provisioned LDAP user "{{username}}"'},modal:{createUser:"Create User",editUser:"Edit User",cancel:"Cancel",creating:"Creating...",saving:"Saving...",saveChanges:"Save Changes",advancedAuthSubtitle:"with Advanced Authentication",tabsAriaLabel:"User source",localTab:"Local",ldapTab:"LDAP",ldapSearchLabel:"Search directory",ldapSearchPlaceholder:"Type a username, name, or email...",ldapMinChars:"Type at least 2 characters to search",ldapTypeToSearch:"Start typing to search the LDAP directory",ldapSearching:"Searching directory...",ldapNoResults:"No matching users in the directory",ldapSearchError:"Directory search failed. Check the LDAP server status.",ldapAlreadyProvisioned:"Already provisioned",ldapSelectedLabel:"Selected",ldapProvision:"Provision user",ldapProvisioning:"Provisioning...",ldapErrorProvision:"Provisioning failed. Check the LDAP server status and try again."},form:{username:"Username",usernamePlaceholder:"Enter username",email:"Email",emailPlaceholder:"user@example.com",password:"Password",passwordPlaceholder:"Enter password",confirmPassword:"Confirm Password",confirmPasswordPlaceholder:"Confirm password",newPasswordPlaceholder:"Enter new password",confirmNewPasswordPlaceholder:"Confirm new password",leaveBlankToKeep:"leave blank to keep current",groups:"Groups",optional:"optional",autoGeneratedPassword:"A secure password will be automatically generated and emailed to the user.",passwordManagedByAdvancedAuth:'Password is managed by Advanced Authentication. Use "Reset Password" to send a new password to the user via email.',resetPassword:"Reset Password",resettingPassword:"Resetting Password..."},deleteModal:{title:"Delete User",message:"Are you sure you want to delete this user? This action cannot be undone.",confirm:"Delete User"}},streamOverlay:{title:"Stream Overlay",invalidPrinterId:"Invalid printer ID",cameraStream:"Camera stream",progress:"Progress",eta:"ETA",printerIdle:"Printer is idle",printerOffline:"Printer offline",status:{printing:"Printing",paused:"Paused",finished:"Finished",failed:"Failed",idle:"Idle",unknown:"Unknown"}},profiles:{title:"Profiles",subtitle:"Manage your slicer presets and pressure advance calibrations",tabs:{bambuCloud:"Bambu Cloud",orcaCloud:"Orca Cloud",local:"Local Profiles",kprofiles:"K-Profiles"},orcaCloud:{connectedAs:"Connected as",logout:"Disconnect",noLogoutPermission:"You do not have permission to disconnect",noConnectPermission:"You do not have permission to connect to Orca Cloud",retry:"Retry",back:"Use a different sign-in method",connect:{title:"Connect to Orca Cloud",description:"Sign in to your Orca Cloud account to sync your slicer profiles into Bambuddy."},providers:{google:"Sign in with Google",apple:"Sign in with Apple",github:"Sign in with GitHub",email:"Sign in with email and password"},password:{title:"Sign in with email and password",email:"Email",emailPlaceholder:"you@example.com",password:"Password",submit:"Sign in"},paste:{title:"Finish signing in",step1:"A new tab opened with the Orca Cloud sign-in page. Sign in with your Orca account.",step2:'Your browser will be redirected to a "localhost" URL that fails to load. That is expected — the URL is what we need.',step3:"Copy the entire URL from your browser's address bar and paste it below.",signInUrl:"If the sign-in tab did not open, click this URL:",label:"Paste the callback URL here",placeholder:"http://localhost:41172/callback?code=...&state=...",submit:"Finish connecting"},profiles:{title:"Your Orca Cloud profiles ({{count}})",refresh:"Refresh",empty:"No profiles found in your Orca Cloud account yet."},toast:{connected:"Connected to Orca Cloud as {{email}}",disconnected:"Disconnected from Orca Cloud"},errors:{startFailed:"Could not start the Orca Cloud sign-in flow.",finishFailed:"Could not finish the Orca Cloud sign-in.",passwordFailed:"Could not sign in with that email and password.",passwordEmpty:"Please enter both your email and password.",emptyPaste:"Please paste the callback URL from your browser.",noCode:"That URL does not look like an Orca Cloud callback (no code parameter). Copy the full URL from your address bar."}},localProfiles:{title:"Local Profiles",subtitle:"Import and manage slicer presets from OrcaSlicer",import:"Import Profiles",importDesc:"Drop .bbscfg, .bbsflmt, .orca_filament, .zip, or .json files here",importing:"Importing...",search:"Search local presets...",noPresets:"No local presets yet",noSearchResults:"No presets match your search",badge:"Local",edit:"Edit",delete:"Delete",cancel:"Cancel",deleteConfirmTitle:"Delete Preset",deleteConfirm:"Are you sure you want to delete this preset? This cannot be undone.",source:"Source",inheritsFrom:"Inherits",filamentType:"Type",vendor:"Vendor",compatiblePrinters:"Printers",nozzleTemp:"Nozzle Temp",cost:"Cost",density:"Density",pressureAdvance:"Pressure Advance",filament:"Filament",process:"Process",printer:"Printer",toast:{importSuccess:"{{count}} preset(s) imported",importSkipped:"{{count}} preset(s) skipped (duplicates)",importError:"{{count}} error(s) during import",deleted:"Preset deleted",updated:"Preset updated"}},connectedAs:"Connected as",logout:"Logout",noLogoutPermission:"You do not have permission to logout",failedToLoad:"Failed to load profiles",retry:"Retry",time:{justNow:"Just now",minsAgo:"{{count}}m ago",hoursAgo:"{{count}}h ago",daysAgo:"{{count}}d ago"},toast:{loggedOut:"Logged out"},login:{title:"Connect to Bambu Cloud",subtitle:"Sync your slicer presets across devices",email:"Email",password:"Password",region:"Region",regionGlobal:"Global",regionChina:"China",verificationCode:"Verification Code",totpCode:"Authenticator Code",checkEmail:"Check your email ({{email}}) for a 6-digit code",enterTotpHint:"Enter the 6-digit code from your authenticator app",accessToken:"Access Token",accessTokenHint:"Paste your Bambu Cloud access token. China-region accounts must use this path (phone-bound — email login unavailable). See the wiki for how to retrieve the token from MakerWorld cookies.",back:"Back",loginButton:"Login",verifyButton:"Verify",setTokenButton:"Set Token",useToken:"Use access token instead",useEmail:"Login with email instead",toast:{loggedIn:"Logged in successfully",codeSent:"Verification code sent to your email",enterTotp:"Enter code from your authenticator app",tokenSet:"Token set successfully"}},presets:{myPreset:"My preset (editable)",duplicate:"Duplicate",editable:"Editable",failedToLoadDetails:"Failed to load preset details",deleteConfirm:"Delete this preset?",deleteWarning:'This will permanently delete "{{name}}" from Bambu Cloud. This cannot be undone.',noDuplicatePermission:"You do not have permission to duplicate presets",noEditPermission:"You do not have permission to edit presets",noDeletePermission:"You do not have permission to delete presets",types:{filament:"Filament preset",printer:"Printer preset",process:"Process preset"},toast:{deleted:"Preset deleted",created:"Preset created",updated:"Preset updated",duplicated:"Preset duplicated",fieldAdded:'Field "{{key}}" added',exported:"Preset exported"},baseLabel:"Base: {{name}}",currentLabel:"Current: {{name}}",newPreset:"New Preset",editPreset:"Edit Preset",duplicatePreset:"Duplicate Preset",createNewPreset:"Create New Preset",customizeSettings:"Customize settings for your new preset",compareWithBase:"Compare with base preset",compare:"Compare",basePreset:"Base Preset",selectBasePreset:"Select base preset...",presetName:"Preset Name",myCustomPreset:"My custom preset",inheritsFrom:"Inherits from",dropJsonToImport:"Drop JSON to import",tabs:{common:"Common",allFields:"All Fields"},availableFields:"Available Fields",searchFieldsPlaceholder:"Search fields...",noMatchingFields:"No matching fields",allFieldsAdded:"All fields added",addCustomField:"Add custom field",yourOverrides:"Your Overrides",noOverridesYet:"No overrides yet",clickFieldsToAdd:"Click fields on the left to add them",saveAsTemplate:"Save as template",jsonTip:"Tip: Drag & drop a .json file anywhere on this modal to import settings"},cloudView:{searchPlaceholder:"Search presets...",templates:"Templates",refresh:"Refresh",newPreset:"New Preset",clearFilters:"Clear filters",compareMode:"Compare Mode",selectAnotherPreset:"Select another {{type}} preset",clickTwoPresets:"Click two presets of the same type to compare",selectFirst:"1. Select first",selectSecond:"2. Select second",compareNow:"Compare Now",lastSynced:"Last synced:",showingCount:"Showing {{showing}} of {{total}} presets",noPresetsFound:"No presets found",columns:{filament:"Filament",process:"Process",printer:"Printer"},noFilamentPresets:"No filament presets",noProcessPresets:"No process presets",noPrinterPresets:"No printer presets",filters:{type:"Type",owner:"Owner",printer:"Printer",nozzle:"Nozzle",filament:"Filament",layer:"Layer",all:"All",myPresets:"My Presets",builtIn:"Built-in",process:"Process"},noTemplatesPermission:"You do not have permission to manage templates",noRefreshPermission:"You do not have permission to refresh profiles",noCreatePermission:"You do not have permission to create presets"},templates:{title:"Quick Templates",noTemplates:"No templates yet",createFirst:"Create templates from the preset editor",typeFilter:"Type:",deleteTitle:"Delete Template",deleteWarning:"This action cannot be undone",deleteConfirm:'Are you sure you want to delete "{{name}}"?',namePlaceholder:"Template name",descriptionPlaceholder:"Description",settingsJson:"Settings (JSON)",fieldsCount:"{{count}} fields",shownInModals:"Shown in modals",hiddenInModals:"Hidden in modals",apply:"Apply",toast:{deleted:"Template deleted",updated:"Template updated",created:"Template created",applied:"Template applied"}}},support:{debugLoggingActive:"Debug logging is active",manageLogs:"Manage",collectItem7:"Printer connectivity and firmware versions",collectItem8:"Integration status (Spoolman, MQTT, HA)",collectItem9:"Network interfaces (subnets only)",collectItem10:"Python package versions",collectItem11:"Database health checks",collectItem12:"Docker environment details",bundleGenerating:"Generating bundle...",bundleStepConnection:"Running printer connectivity checks",bundleStepVirtualPrinters:"Running virtual-printer setup checks",bundleStepLogScan:"Scanning recent logs for known issues",bundleStepBuild:"Building the support bundle ZIP"},fileManager:{title:"File Manager",subtitle:"Organize and manage your print files",uploadFiles:"Upload Files",newFolder:"New Folder",folderName:"Folder Name",folderNamePlaceholder:"e.g., Functional Parts",renameFile:"Rename File",renameFolder:"Rename Folder",invalidFilenameChar:'The character "{{char}}" is not allowed in print filenames. The printer SD card rejects: < > : " / \\ | ? *',moveFiles:"Move {{count}} File(s)",rootNoFolder:"Root (No Folder)",current:"current",linkFolder:"Link Folder",linkFolderDescription:'Link "{{name}}" to a project or archive for quick access.',project:"Project",archive:"Archive",noProjectsFound:"No projects found",noArchivesFound:"No archives found",unlink:"Unlink",link:"Link",dragDropFiles:"Drag & drop files here",dropFilesHere:"Drop files here",orClickToBrowse:"or click to browse",allFileTypesSupported:"All file types supported. ZIP files will be extracted.",zipFilesDetected:"ZIP files detected",zipExtractOptions:"ZIP files will be extracted. Choose how to handle folder structure:",preserveZipStructure:"Preserve folder structure from ZIP",createFolderFromZip:"Create folder from ZIP filename",stlThumbnailGeneration:"STL thumbnail generation",zipMayContainStl:"ZIP files may contain STL files. Thumbnails can be generated during extraction.",thumbnailsCanBeGenerated:"Thumbnails can be generated for STL files. Large models may take longer to process.",generateThumbnailsForStl:"Generate thumbnails for STL files",threemfDetected:"3MF files detected",threemfExtractionInfo:"Printer model, material, color, and print settings will be automatically extracted from 3MF files.",willBeExtracted:"Will be extracted",filesExtracted:"{{count}} files extracted",uploadComplete:"Upload complete: {{succeeded}} succeeded",uploadFailed:"Upload failed",zipFilesFailed:"{{count}} files failed",uploading:"Uploading...",changeLink:"Change Link...",linkTo:"Link to...",linkToProjectOrArchive:"Link to project or archive",addToQueue:"Add to Queue",schedulePrint:"Schedule",generateThumbnail:"Generate Thumbnail",generateThumbnails:"Generate Thumbnails",generateThumbnailsForMissing:"Generate thumbnails for STL files missing them",gridView:"Grid view",listView:"List view",lowDiskSpaceWarning:"Low disk space warning",lowDiskSpaceDetails:"Only {{free}} free of {{total}} total. Threshold is set to {{threshold}} GB in settings.",files:"Files",folders:"Folders",size:"Size",free:"Free",allFiles:"All Files",allExternal:"External",externalIsEmpty:"No external files",externalEmptyDescription:"Files in your linked external folders will appear here.",wrap:"Wrap",enableTextWrapping:"Enable text wrapping",disableTextWrapping:"Disable text wrapping",collapse:"Collapse",collapseFoldersByDefault:"Collapse folders by default",expandFoldersByDefault:"Expand folders by default",dragToResizeTooltip:"Drag to resize, double-click to reset",searchFiles:"Search files...",allTypes:"All types",prints:"Prints",ascending:"Ascending",descending:"Descending",resultsCount:"{{showing}} of {{total}} files",selectAll:"Select All",deselectAll:"Deselect All",selected:"{{count}} selected",adding:"Adding...",loadingFiles:"Loading files...",folderIsEmpty:"Folder is empty",noFilesYet:"No files yet",folderEmptyDescription:"Upload files or move files into this folder to get started.",noFilesDescription:"Upload files to start organizing your print-related files.",noMatchingFiles:"No matching files",noMatchingFilesDescription:"No files match your current search or filter criteria.",clearFilters:"Clear filters",printedCount:"Printed {{count}}x",uploadedBy:"Uploaded By",deleteFolder:"Delete Folder",deleteFile:"Delete File",deleteFilesCount:"Delete {{count}} Files",deleteFolderConfirm:"Are you sure you want to delete this folder? All files inside will also be deleted.",deleteFileConfirm:"Are you sure you want to delete this file?",deleteFilesConfirm:"Are you sure you want to delete {{count}} selected files? This action cannot be undone.",deleting:"Deleting...",noPermissionRenameFolder:"You do not have permission to rename folders",noPermissionLinkFolder:"You do not have permission to link folders",noPermissionDeleteFolder:"You do not have permission to delete folders",noPermissionPrint:"You do not have permission to print",noPermissionAddToQueue:"You do not have permission to add to queue",noPermissionSlice:"You do not have permission to slice files",noPermissionDownload:"You do not have permission to download files",noPermissionRenameFile:"You do not have permission to rename this file",noPermissionGenerateThumbnail:"You do not have permission to generate thumbnails",noPermissionDeleteFile:"You do not have permission to delete this file",noPermissionCreateFolder:"You do not have permission to create folders",noPermissionUpload:"You do not have permission to upload files",noPermissionMoveFiles:"You do not have permission to move files",noPermissionDeleteFiles:"You do not have permission to delete files",linkExternal:"Link External",linkExternalFolder:"Link External Folder",linkExternalFolderDescription:"Mount a host directory (NAS, USB, network share) into the File Manager. Files are not copied — they are accessed directly from the original path.",externalFolderNamePlaceholder:"e.g., NAS Prints",externalPath:"Host Path",externalPathHelp:"Absolute path to the directory on the Docker host. Must be bind-mounted into the container.",readOnly:"Read Only",readOnlyHelp:"prevents uploads and deletions",showHiddenFiles:"Show hidden files (dotfiles)",externalFolder:"External Folder",scanFolder:"Scan",toast:{folderCreated:"Folder created",folderDeleted:"Folder deleted",fileDeleted:"File deleted",filesDeleted:"Deleted {{count}} files",filesMoved:"Files moved",folderLinked:"Folder linked",folderUnlinked:"Folder unlinked",externalFolderLinked:"External folder linked and scanned",folderScanned:"Scan complete: {{added}} added, {{removed}} removed",addedToQueue:"Added {{count}} file(s) to queue",addedToQueuePartial:"Added {{added}} file(s), {{failed}} failed",failedToAddToQueue:"Failed to add files: {{error}}",fileRenamed:"File renamed",folderRenamed:"Folder renamed",thumbnailsGenerated:"Generated {{count}} thumbnail(s)",thumbnailsGeneratedPartial:"Generated {{succeeded}} thumbnail(s), {{failed}} failed",noStlMissingThumbnails:"No STL files missing thumbnails",failedToGenerateThumbnails:"Failed to generate thumbnails: {{error}}",thumbnailGenerated:"Thumbnail generated",failedToGenerateThumbnail:"Failed to generate thumbnail: {{error}}"}},projects:{title:"Projects",subtitle:"Organize and track your 3D printing projects",newProject:"New Project",editProject:"Edit Project",deleteProject:"Delete Project",projectName:"Project Name",description:"Description",noProjects:"No projects yet",noProjectsFiltered:"No {{status}} projects",noProjectsFilteredHelp:"You don't have any {{status}} projects. Projects will appear here when their status changes.",createFirst:"Create your first project to start organizing related prints, tracking progress, and managing your builds.",createFirstButton:"Create Your First Project",create:"Create",files:"Files",prints:"Prints",plates:"plates",parts:"parts",lastModified:"Last Modified",deleteConfirm:"Are you sure you want to delete this project? Archives and queue items will be unlinked but not deleted.",addFiles:"Add Files",removeFile:"Remove File",viewDetails:"View Details",namePlaceholder:"e.g., Voron 2.4 Build",descriptionPlaceholder:"Optional description...",urlLabel:"URL",urlPlaceholder:"https://makerworld.com/...",urlInvalid:"URL must start with http:// or https://",openExternalUrl:"Open project URL",coverImageLabel:"Cover photo",coverImageAlt:"Project cover photo",coverImageUpload:"Upload",coverImageReplace:"Replace",coverImageRemove:"Remove",color:"Color",targetPlates:"Target Plates",targetPlatesPlaceholder:"e.g., 25",targetPlatesHelp:"Number of print jobs",targetParts:"Target Parts",targetPartsPlaceholder:"e.g., 150",targetPartsHelp:"Total objects needed",tagsLabel:"Tags (comma-separated)",tagsPlaceholder:"e.g., voron, functional, gift",dueDate:"Due Date",priority:"Priority",priorityLow:"Low",priorityNormal:"Normal",priorityHigh:"High",priorityUrgent:"Urgent",statusActive:"Active",statusCompleted:"Completed",statusArchived:"Archived",done:"Done",completed:"completed",failed:"failed",inQueue:"in queue",noPrintsYet:"No prints yet",printJobs:"Print jobs (plates)",partsPrinted:"Parts printed",failedParts:"Failed parts",import:"Import",export:"Export",importProject:"Import project",exportAll:"Export all projects",loading:"Loading projects...",noEditPermission:"You do not have permission to edit projects",noDeletePermission:"You do not have permission to delete projects",noCreatePermission:"You do not have permission to create projects",noImportPermission:"You do not have permission to import projects",noExportPermission:"You do not have permission to export projects",toast:{created:"Project created",updated:"Project updated",deleted:"Project deleted",imported:"Project imported",multipleImported:"{{count}} projects imported",importFailed:"Import failed",exported:"Projects exported (metadata only)"}},projectDetail:{notFound:"Project not found",backToProjects:"Back to Projects",export:"Export",exportProject:"Export project",noExportPermission:"You do not have permission to export projects",noEditPermission:"You do not have permission to edit projects",partOf:"Part of:",priorityLabel:"Priority:",noPrints:"No prints in this project yet",status:{active:"Active",completed:"Completed",archived:"Archived"},priority:{low:"Low",normal:"Normal",high:"High",urgent:"Urgent"},dueDate:{overdue:"Overdue",today:"Due today",daysLeft:"{{count}} days left"},progress:{platesProgress:"Plates Progress",partsProgress:"Parts Progress",printJobs:"print jobs",parts:"parts",percentComplete:"{{percent}}% complete",remaining:"{{count}} remaining"},stats:{printJobs:"Print Jobs",total:"total",failed:"{{count}} failed",partsPrinted:"{{count}} parts printed",printTime:"Print Time",filamentUsed:"Filament Used"},cost:{title:"Cost Tracking",filamentCost:"Filament Cost",energy:"Energy",totalCost:"Total Cost",total:"Total",includesBom:"incl. BOM",budget:"Budget",remaining:"Remaining"},subProjects:{title:"Sub-projects ({{count}})"},notes:{title:"Notes",noEditPermission:"You do not have permission to edit notes",placeholder:"Add notes about this project...",empty:"No notes yet. Click Edit to add notes."},files:{title:"Files",linkFolders:"Link folders from the File Manager",forQuickAccess:"to this project for quick access.",fileCount:"{{count}} file(s)",empty:"No folders linked. Go to File Manager and link a folder to this project.",noFiles:"No files in this folder.",print:"Print Now",addToQueue:"Add to Queue"},bom:{title:"Bill of Materials",acquired:"{{completed}}/{{total}} acquired",showAll:"Show all",hideDone:"Hide done",addPart:"Add Part",noAddPermission:"You do not have permission to add parts",partNamePlaceholder:"Part name (e.g., M3x8 screws)",partName:"Part name",qty:"Qty",price:"Price ({{currency}})",sourcingUrlPlaceholder:"Sourcing URL (optional)",remarksPlaceholder:"Remarks (optional)",deletePart:"Delete Part",deleteConfirm:'Are you sure you want to delete "{{name}}"?',noUpdatePermission:"You do not have permission to update parts",noEditPermission:"You do not have permission to edit parts",noDeletePermission:"You do not have permission to delete parts",totalCost:"Total cost:",empty:"No parts in the bill of materials. Add hardware, electronics, or other components to track what needs to be sourced."},timeline:{title:"Activity Timeline",empty:"No activity yet."},template:{saveAsTemplate:"Save as Template",noCreatePermission:"You do not have permission to create templates"},queue:{title:"Queue",viewAll:"View all",printing:"{{count}} printing",queued:"{{count}} queued"},prints:{title:"Prints ({{count}})"},toast:{projectUpdated:"Project updated",partAdded:"Part added",partRemoved:"Part removed",exportFailed:"Export failed",projectExported:"Project exported",templateCreated:"Template created"}},system:{title:"System Information",version:"Version",uptime:"Uptime",cpuUsage:"CPU Usage",memoryUsage:"Memory Usage",diskUsage:"Disk Usage",networkInfo:"Network Info",logs:"Logs",debugMode:"Debug Mode",enableDebug:"Enable Debug Logging",disableDebug:"Disable Debug Logging",downloadLogs:"Download Logs",clearLogs:"Clear Logs",dockerInfo:"Docker Info",containerName:"Container Name",imageName:"Image Name",platform:"Platform",architecture:"Architecture"},library:{title:"Filament Library",addFilament:"Add Filament",editFilament:"Edit Filament",deleteFilament:"Delete Filament",vendor:"Vendor",material:"Material",color:"Color",kFactor:"K Factor",temperature:"Temperature",noFilaments:"No filaments in library",deleteConfirm:"Are you sure you want to delete this filament?",importFromPrinter:"Import from Printer",exportToFile:"Export to File"},slice:{title:"Slice model",action:"Slice",actionAll:"Slice all {{count}} plates",actionAllTitle:"Slice every plate into one multi-plate output (single archive). Filament selection covers every slot the project defines.",allPlatesToggle:"Slice all {{count}} plates",slicing:"Slicing…",printer:"Printer profile",process:"Process profile",filament:"Filament profile",filamentSlot:"Filament {{index}} ({{type}})",selectPreset:"— Select a preset —",loadingPresets:"Loading presets…",analyzingPlateFilaments:"Analyzing plate filaments…",analyzingPlateFilamentsHint:"Running a preview slice to discover which AMS slots this plate uses. Cached after — re-opening is instant.",previewToast:"Analyzing {{name}} — {{elapsed}}",previewWithProgress:"Analyzing {{name}} — {{stage}} ({{percent}}%) — {{elapsed}}",notUsedByPlate:"— not used by this plate",noPresetsForSlot:"No presets available",otherPrinters:"Other printers",presetsLoadFailed:"Failed to load presets. Open Settings → Profiles to import them first.",refreshPresets:"Refresh",refreshPresetsTitle:"Refresh presets — fetch the latest cloud and bundled listings (use after deleting a preset in Bambu Studio or Bambu Handy)",allPresetsRequired:"All presets must be selected",bundle:"Slicer bundle",bundleNone:"— None (pick presets individually) —",bundleAllRequired:"Bundle process and every filament slot must be picked",enqueuing:"Submitting slice job…",queued:"Queued…",failed:"Slicing failed. Check the slicer sidecar logs.",startedToast:"Slicing {{name}} in the background…",queuedToast:"Queued: {{name}} — {{elapsed}}",runningToast:"Slicing {{name}} — {{elapsed}}",runningWithProgress:"{{name}} — {{stage}} ({{percent}}%) — {{elapsed}}",runningWithProgressMultiPlate:"Plate {{plateIndex}} of {{plateCount}} • {{name}} — {{stage}} ({{percent}}%) — {{elapsed}}",completedToast:"Sliced {{name}}",failedTitle:"Slicing failed",failedToast:"Slicing {{name}} failed: {{detail}}",tier:{local:"Imported",cloud:"Bambu Cloud",orcaCloud:"Orca Cloud",standard:"Standard"},cloud:{notAuthenticated:"Sign in to Bambu Cloud (Settings → Profiles → Bambu Cloud) to see your cloud presets.",expired:"Bambu Cloud session expired — sign in again to refresh your cloud presets.",unreachable:"Bambu Cloud is unreachable right now. Local and standard presets still work."},orcaCloud:{notAuthenticated:"Sign in to Orca Cloud (Profiles → Orca Cloud) to see your Orca presets.",expired:"Orca Cloud session expired — sign in again to refresh your Orca presets.",unreachable:"Orca Cloud is unreachable right now. Other presets still work."},bedType:{label:"Build plate",auto:"Auto (use process preset)",coolPlate:"Cool Plate",coolPlateSuperTack:"Cool Plate SuperTack",engineering:"Engineering Plate",highTemp:"High Temp Plate",texturedPEI:"Textured PEI Plate",smoothPEI:"Smooth PEI Plate"}},spoolman:{title:"Spoolman Integration",enabled:"Spoolman Enabled",url:"Spoolman URL",connected:"Connected",disconnected:"Not Connected",testConnection:"Test Connection",sync:"Sync",syncing:"Syncing...",lastSync:"Last Sync",linkToSpoolman:"Link to Spoolman",openInSpoolman:"Open in Spoolman",unlinkSpool:"Unlink Spool",unlinkConfirmTitle:"Unassign Spool?",unlinkConfirmMessage:"This will remove the spool from this slot. The spool data itself will remain unchanged.",selectSpool:"Select Spool",noUnlinkedSpools:"No unassigned spools available",linkSuccess:"Spool assigned successfully",linkFailed:"Failed to assign spool",unlinkSuccess:"Spool unassigned successfully",unlinkFailed:"Failed to unassign spool",linkedSpool:"Assigned spool",spoolId:"Spool ID",fillSourceLabel:"(Spoolman)",weight:"Weight",remaining:"Remaining",disableWeightSync:"Disable AMS Estimated Weight Sync",disableWeightSyncDesc:"Don't update remaining capacity from AMS estimates. Use this if you prefer Spoolman's usage tracking over AMS percentage-based estimates. New spools will still use the AMS estimate as their initial weight.",reportPartialUsage:"Report Partial Usage for Failed Prints",reportPartialUsageDesc:"When a print fails or is cancelled, report the estimated filament used up to that point based on layer progress."},inventory:{title:"Spool Inventory",subtitle:"Manage your spools",spoolmanMixedContentTitle:"Spoolman can't load over HTTPS — mixed-content blocked by your browser",spoolmanMixedContentBody:"Bambuddy is served over HTTPS (via your reverse proxy), but your Spoolman URL is still plain HTTP. Browsers block mixed content for security, so the embedded Spoolman UI can't render. Spoolman needs to be reachable over HTTPS for this to work.",spoolmanMixedContentFixReverseProxy:"Put Spoolman behind the same reverse proxy as Bambuddy (Traefik / Nginx / Caddy) with HTTPS, then update the Spoolman URL in Settings to the new HTTPS address.",spoolmanMixedContentFixOpenNewTab:"As a workaround, open Spoolman in a new browser tab over HTTP — mixed-content rules only apply to embedded frames, so a standalone tab still works.",spoolmanOpenInNewTab:"Open Spoolman in a new tab",labels:{title:"Print spool labels",selectedCount:"{{count}} selected",pickSpools:"Pick which spools to print labels for:",searchPlaceholder:"Search name, brand, or #ID",filterByMaterial:"Material:",allMaterials:"All",selectVisible:"Select all visible ({{count}})",deselectVisible:"Deselect visible",clearAll:"Clear all",noSpoolsToShow:"No spools to show. Adjust your filter and try again.",noMatches:"No spools match the current search or filter.",printOne:"Print label for this spool",printLabels:"Print labels…",bulkTitle:"Pick spools to print labels for from the {{count}} currently shown",noSpoolsTitle:"No spools to label",error:"Could not generate labels: {{msg}}",sortBy:{label:"Sort:",id:"By ID",color:"By colour"},templates:{amsHolderSmall:{label:"AMS holder — small (74 × 33 mm)",hint:"Single label per page; matches the printable label from MakerWorld model 752566 (AMS Filament Label Holder)."},amsHolderLarge:{label:"AMS holder — large (75 × 55 mm)",hint:"Single label per page; fits the cardstock-insert variant of the AMS Filament Label Holder. Roomy enough for swatch, brand, material, ID, and QR code."},box40x30:{label:"Box label (40 × 30 mm)",hint:"Single label per page; common DK/Brother roll size, good for filament-bag and storage-bin labels."},box:{label:"Box label (62 × 29 mm)",hint:"Single label per page; sized for Brother PT/QL and Dymo small labels."},averyL7160:{label:"Avery L7160 — A4 sheet (38.1 × 63.5 mm × 21)",hint:"EU sheet stock; 21 labels per A4 page."},avery5160:{label:"Avery 5160 — US Letter sheet (25.4 × 66.7 mm × 30)",hint:"US sheet stock; 30 labels per Letter page."}}},csv:{importButton:"Import CSV",exportButton:"Export CSV",modalTitle:"Import spools from CSV",selectFile:"Choose a CSV file or drag it here",dragHint:"Header: material (required), brand, subtype, color_name, rgba, …",parsing:"Reading file…",previewError:"Could not read the CSV file",validCount:"{{count}} valid",errorCount:"{{count}} error",skippedCount:"{{count}} skipped",colRow:"Row",colStatus:"Status",colColor:"Color",colorResolved:"Color filled from catalog",colorCrossMaterial:"Color taken from a different material — no exact match in catalog",duplicateExisting:"A spool with this material, brand and color already exists — it will still be imported as a new spool",spoolmanHint:"In Spoolman mode, use Spoolman's built-in CSV import/export.",importValidRows:"Import {{count}} valid rows",noValidRows:"No valid rows",importing:"Importing…",importSuccess:"{{count}} spools imported",importError:"Import failed",exportError:"Export failed"},addSpool:"Add Spool",editSpool:"Edit Spool",copySpool:"Copy Spool",material:"Material",selectMaterial:"Select material...",subtype:"Subtype",brand:"Brand",searchBrand:"Search brand...",useCustomBrand:'Use "{{brand}}"',useCustomMaterial:"Use custom material: {{material}}",colorName:"Color Name",colorNamePlaceholder:"Jade White, Fire Red...",color:"Color",hexColor:"Hex Color",pickColor:"Pick custom color",labelWeight:"Label Weight",coreWeight:"Empty Spool Weight",searchSpoolWeight:"Search spool weight...",weightUsed:"Used",currentWeight:"Remaining Weight",measuredWeight:"Measured Weight",spoolName:"Spool",costPerKg:"Cost per kg",storageLocation:"Storage Location",storageLocationPlaceholder:"e.g. Shelf A, Drawer 1",openInInventory:"Open in Inventory",measuredWeightError:"Measured weight must be between {{min}}g and {{max}}g.",slicerFilament:"Slicer Filament",slicerFilamentName:"Slicer Preset Name",slicerPreset:"Slicer Preset",searchPresets:"Search filament presets...",selectedPreset:"Selected",noPresetsFound:"No presets found",tempOverrides:"Temperature Overrides",note:"Note",notePlaceholder:"Any additional notes about this spool...",category:"Category",categoryPlaceholder:"e.g. Production, Prototype, Client A",categoryNone:"Uncategorized",storageLocationNone:"No location set",lowStockThresholdOverride:"Low-stock threshold (this spool)",lowStockThresholdOverrideHelp:"Leave blank to use the global threshold ({{global}}%).",clearRfid:"Clear RFID Tag",rfidCleared:"RFID tag cleared",archive:"Archive",restore:"Restore",noSpools:"No spools yet. Add your first spool to get started.",noAvailableSpools:"No spools available. Add a spool to your inventory or unassign one from another slot first.",kProfiles:"K-Profiles",addKProfile:"Add K-Profile",assignSpool:"Assign Spool",unassignSpool:"Unassign",assignSuccess:"Spool assigned and AMS slot configured",assignPendingInsert:"Assigned. Slot will configure when you insert the spool.",assignFailed:"Failed to assign spool",selectSpool:"Select a spool to assign to this slot",assigned:"Assigned",assigning:"Assigning...",searchSpools:"Search spools...",showAllSpools:"Show all spools",spoolmanSpools:"Spoolman Spools",allMaterials:"All Materials",filterByBrand:"Filter by brand...",showArchived:"Show archived",quickAdd:"Quick Add (Stock)",quantity:"Quantity",stock:"Stock",configured:"Configured",spoolsCreated:"{{count}} spools created",spoolsPartiallyCreated:"{{created}} of {{total}} spools created (some failed)",spoolCreated:"Spool created",spoolUpdated:"Spool updated",spoolDeleted:"Spool deleted",deepLinkSpoolNotFound:"Spool not found",deepLinkFetchFailed:"Could not load spool — try again",spoolArchived:"Spool archived",spoolRestored:"Spool restored",kProfileSaveFailed:"K-profile settings could not be saved",syncWeightSpoolNotFound:"Spool not found — it may have been deleted",syncWeightSpoolmanUnreachable:"Spoolman is unreachable — try again later",syncWeightFailed:"Failed to sync weight",spoolmanUnreachable:"Spoolman is not reachable — please try again later",deleteSpoolNotFound:"Spool not found — it may have already been deleted",deleteFailed:"Failed to delete spool",archiveSpoolNotFound:"Spool not found — it may have already been deleted",archiveFailed:"Failed to archive spool",restoreSpoolNotFound:"Spool not found — it may have already been deleted",restoreFailed:"Failed to restore spool",saveFailed:"Failed to save changes",tagClearFailed:"Failed to clear tag",deleteConfirm:"Are you sure you want to delete this spool? This cannot be undone.",archiveConfirm:"Are you sure you want to archive this spool?",advancedSettings:"Advanced Settings",filamentInfoTab:"Filament Info",paProfileTab:"PA Profile",filamentInfo:"Filament",additional:"Additional",loadingPresets:"Loading cloud presets...",cloudConnected:"Cloud connected",cloudNotConnected:"Cloud not connected (using defaults)",recentColors:"Recent",searchColors:"Search colors...",searchResults:"Search results",allColors:"All colors",commonColors:"Common colors",showLess:"Show less",showAll:"Show all",noColorsFound:"No colors match your search",noResults:"No matches found",extraColorsLabel:"Extra colors",extraColorsPlaceholder:"EC984C,#6CD4BC,A66EB9,D87694",extraColorsHint:"Paste 2 to 8 hex stops, separated by commas. Renders as a gradient.",extraColorsInvalid:"Ignored invalid hex: {{tokens}}",colorEffectLabel:"Effect",colorEffect:{none:"None",sparkle:"Sparkle",wood:"Wood",marble:"Marble",glow:"Glow",matte:"Matte",silk:"Silk",galaxy:"Galaxy",rainbow:"Rainbow",metal:"Metal",translucent:"Translucent",gradient:"Gradient",dualColor:"Dual Color",triColor:"Tri Color",multicolor:"Multicolor"},selectMaterialFirst:"Please select a material first in the Filament Info tab.",noPrintersConfigured:"No printers configured. Add printers to use PA profiles.",matchingFilter:"Matching",anyBrand:"Any brand",anyVariant:"Any variant",autoSelect:"Auto-select",matches:"matches",match:"match",noMatches:"No matches",connected:"Connected",offline:"Offline",printerOffline:"Printer is offline. Connect to view calibration profiles.",noKProfilesMatch:"No K-profiles match the selected filament.",leftNozzle:"Left Nozzle",rightNozzle:"Right Nozzle",profilesSelected:"calibration profile(s) selected",totalInventory:"Total Inventory",totalConsumed:"Total Consumed",byMaterial:"By Material",inPrinter:"In Printer",lowStock:"Low Stock",sinceTracking:"Since tracking started",resetConsumedCounter:"Reset counter",resetConsumedCounterTooltip:"Zero the consumed-grams counter for this spool. Remaining weight is not changed.",resetConsumedCounterConfirm:"Reset this spool's consumed-grams counter to 0? Future prints will track from zero again. The spool itself, its remaining weight calculation, and your settings are not changed.",resetAllConsumedCounters:"Reset all counters",resetAllConsumedCountersTooltip:"Zero the consumed-grams counter on every spool. Remaining weights are not changed.",resetAllConsumedCountersConfirm:'Reset the consumed-grams counter to 0 on all {{count}} spools (archived ones included)? This clears the "Total Consumed" stat so future prints track from zero. Spools and remaining weights are not changed.',consumedCounterReset:"Counter reset",allConsumedCountersReset:"Counter reset for {{count}} spool(s)",resetConsumedCounterFailed:"Failed to reset counter",loadedInAms:"Loaded in AMS/Ext",remaining:"Remaining",weightCheck:"Weight Check",lastWeighed:"Last weighed",neverWeighed:"Never weighed",search:"Search spools...",showing:"Showing",to:"to",of:"of",show:"Show",spools:"spools",spool:"spool",page:"Page",noSpoolsMatch:"No results found",noSpoolsMatchDesc:"Try adjusting your search or filters to find what you're looking for.",active:"Active",archived:"Archived",all:"All",used:"Used",new:"New",clearFilters:"Clear filters",table:"Table",cards:"Cards",net:"Net",groupSimilar:"Group",groupedSpools:"{{count}} identical spools",groupedRows:"rows",columns:"Columns",configureColumns:"Configure Columns",configureColumnsDesc:"Drag to reorder columns or use arrows. Toggle visibility with the eye icon.",visible:"visible",reset:"Reset",cancel:"Cancel",applyChanges:"Apply Changes",moveUp:"Move up",moveDown:"Move down",hideColumn:"Hide column",showColumn:"Show column",linkToSpool:"Link to Spool",tagLinked:"Tag linked to spool",tagLinkFailed:"Failed to link tag",tagAlreadyLinked:"Tag already linked to another spool",unknownTag:"Unknown RFID tag detected",usageHistory:"Usage History",noUsageHistory:"No usage recorded yet",printName:"Print Name",weightConsumed:"Weight Consumed",clearHistory:"Clear",historyCleared:"Usage history cleared",fillSourceLabel:"(Inv)",lowStockThresholdError:"Threshold must be between 0.1 and 99.9",assignMismatchTitle:"Material mismatch",assignMismatchMessage:'The selected spool material "{{spoolMaterial}}" does not match the tray material "{{trayMaterial}}" for {{location}}. Assign anyway?',assignMismatchConfirm:"Assign Anyway",assignPartialMismatchMessage:'The spool material "{{spoolMaterial}}" is similar to but not exactly matching "{{trayMaterial}}" in {{location}}. Do you want to proceed?',assignProfileMismatchMessage:'The spool profile "{{spoolProfile}}" does not match the tray profile "{{trayProfile}}" in {{location}}. Do you want to proceed?',assignReconfigureNote:"The AMS slot will be reconfigured to use the spool's profile.",spoolmanFilamentCatalog:"Spoolman Filament Catalog",pickFromSpoolmanCatalog:"Pick from Spoolman catalog…",spoolmanFilamentSelected:"Filament selected from Spoolman catalog",spoolmanFilamentUnlinked:"Filament catalog link cleared",noSpoolmanFilaments:"No filaments found in Spoolman catalog",spoolmanFilamentColorSwatch:"Filament color",spoolWeightManagedBySpoolman:"Empty spool weight is managed per filament type in Spoolman",spoolmanCatalogLoadFailed:"Failed to load Spoolman filament catalog"},timelapse:{title:"Timelapse",create:"Create Timelapse",download:"Download",delete:"Delete",preview:"Preview",frameRate:"Frame Rate",quality:"Quality",processing:"Processing...",noTimelapses:"No timelapses available"},ams:{title:"AMS",slot:"Slot",empty:"Empty",emptySlot:"Empty slot",slotEmpty:"Empty",slotUnconfigured:"?",emptySlotReset:"No filament assigned",unknown:"Unknown",humidity:"Humidity",temperature:"Temperature",filamentType:"Filament Type",filamentColor:"Color",remaining:"Remaining",history:"AMS History",noHistory:"No history available",configureSlot:"Configure Slot",externalSpool:"External Spool",profile:"Profile",kFactor:"K Factor",fill:"Fill",configure:"Configure",used:"used",remainingUnit:"remaining"},printModal:{title:"Start Print",selectPrinter:"Select Printer",selectPlate:"Select Plate",filamentMapping:"Filament Mapping",totalCost:"Total cost:",slotRemainingShort:" - {{grams}}g left",printSettings:"Print Settings",bedLeveling:"Bed Leveling",flowCalibration:"Flow Calibration",vibrationCalibration:"Vibration Calibration",layerInspection:"First Layer Inspection",timelapse:"Timelapse",startPrint:"Start Print",addToQueue:"Add to Queue",cancel:"Cancel",noPrintersAvailable:"No printers available",printerBusy:"Printer is busy",printerOffline:"Printer is offline",sameTypeDifferentColor:"Same type, different color",filamentTypeNotLoaded:"Filament type not loaded",openCalendar:"Open calendar",leftNozzle:"L",rightNozzle:"R",leftNozzleTooltip:"Left nozzle",rightNozzleTooltip:"Right nozzle",filamentOverride:"Filament Override",filamentOverrideHint:"Optionally override filaments for model-based assignment. The scheduler will match against your selected filaments instead of the original 3MF values.",originalFilament:"Original",overrideWith:"Override with",resetToOriginal:"Reset to original",insufficientFilamentTitle:"Not enough filament",insufficientFilamentMessage:"Some assigned spools have less filament remaining than this print needs:",insufficientFilamentLine:"{{printer}} - {{slot}}: needs {{required}}g, remaining {{remaining}}g",printAnyway:"Print anyway",forceColorMatch:"Force color match",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:"Stagger to {{count}} printers",gcodeInjection:"Inject auto-print G-code"},backup:{includesEncryptionKey:"Local backups include the MFA encryption key file (DATA_DIR/.mfa_encryption_key) so a backup ZIP is self-contained. Treat the ZIP as sensitive — anyone with the file can decrypt the OIDC client secrets and TOTP secrets stored inside.",title:"Backup & Restore",createBackup:"Create Backup",restoreBackup:"Restore Backup",restoreDescription:"Replace all data from a backup file",downloadBackup:"Download Backup",uploadBackup:"Upload Backup",lastBackup:"Last Backup",autoBackup:"Auto Backup",backupNow:"Backup Now",restoreWarning:"Warning: Restoring a backup will overwrite all current data.",includeArchives:"Include Archives",includeSettings:"Include Settings",includeProfiles:"Include Profiles",backupSuccess:"Backup created successfully",restoreSuccess:"Backup restored successfully",backupFailed:"Backup failed",restoreFailed:"Restore failed",restoreNote:"Virtual Printer will be stopped during restore",githubBackup:"Git Backup",enabled:"Enabled",cloudLoginRequired:"Bambu Cloud login required. Sign in under Profiles → Cloud Profiles to enable GitHub backup.",cloudLoginRequiredShort:"Cloud login required",githubDescription:"Automatically sync your profiles to a private GitHub repository for backup and version history.",repoIsPrivate:"Repository is private — safe to back up to.",repoIsPublicWarning:"Repository is PUBLIC. Bambuddy backups include MQTT credentials, Home Assistant tokens, Prometheus tokens, your Bambu Cloud email, and printer access codes via K-profiles. Saving is blocked until you make the repository private in your provider's settings.",repoVisibilityUnknown:"Could not determine repository visibility. Bambuddy refuses to back up to anything not confirmed private; saving will be blocked.",repositoryUrl:"Repository URL",repoUrlPlaceholderGitHub:"https://github.com/username/repo-name",repoUrlPlaceholderGitea:"https://gitea.example.com/username/repo-name",repoUrlPlaceholderForgejo:"https://forgejo.example.com/username/repo-name",repoUrlPlaceholderGitLab:"https://gitlab.com/username/repo-name",allowInsecureHttp:"Allow insecure HTTP",allowInsecureHttpHint:"Enable for self-hosted instances on private networks without TLS",personalAccessToken:"Personal Access Token",tokenSaved:"(saved)",enterNewToken:"Enter new token to update",tokenHint:"Fine-grained token with Contents read/write permission",branch:"Branch",provider:"Git Provider",providerGitHub:"GitHub",providerGitLab:"GitLab",providerGitea:"Gitea",providerForgejo:"Forgejo",manualOnly:"Manual only",hourly:"Hourly",daily:"Daily",weekly:"Weekly",includeInBackup:"Include in backup",kProfiles:"K-Profiles",kProfilesDescription:"Pressure advance calibration from connected printers",noPrintersConnected:"No printers connected",printersConnected:"{{connected}}/{{total}} connected",cloudProfiles:"Cloud Profiles",cloudProfilesDescription:"Filament, printer, and process presets from Bambu Cloud",appSettings:"App Settings",appSettingsDescription:"Bambuddy configuration (complete database)",spoolInventory:"Spool Inventory",spoolInventoryDescription:"Filament spools, usage history, and cost tracking",printArchives:"Print Archives",printArchivesDescription:"Print history metadata (no gcode/3MF files)",lastBackupAt:"Last backup:",noBackupsYet:"No backups yet",next:"Next:",startingBackup:"Starting backup...",test:"Test",enableBackup:"Enable Backup",testConnection:"Test Connection",enterRepoUrl:"Enter repository URL",enterRepoAndToken:"Enter repository URL and access token",repoRequired:"Repository URL is required",tokenRequired:"Access token is required",githubBackupEnabled:"GitHub backup enabled",tokenUpdated:"Token updated",settingsSaved:"Settings saved",failedToSave:"Failed to save: {{message}}",backupCompleteFiles:"Backup complete - {{count}} files updated",backupSkippedNoChanges:"Backup skipped - no changes",backupFailed2:"Backup failed: {{message}}",clearedLogs:"Cleared {{count}} logs",failedToClearLogs:"Failed to clear logs: {{message}}",history:"History",clear:"Clear",date:"Date",status:"Status",commit:"Commit",localBackup:"Local Backup",localBackupDescription:"Create a complete backup of your Bambuddy data including the database, archives, uploads, and all files.",downloadBackupLabel:"Download Backup",completeBackupZip:"Complete backup: database + all files (ZIP)",download:"Download",preparingBackup:"Preparing backup...",creatingArchive:"Creating backup archive... This may take a while for large archives.",downloadingFile:"Downloading backup file...",backupDownloaded:"Backup downloaded successfully",failedToCreateBackup:"Failed to create backup: {{message}}",restore:"Restore",restoreReplacesAll:"Restore replaces all data.",restoreReplacesAllDetail:"Your current database and files will be completely replaced. A restart is required after restore.",restoreConfirmTitle:"Restore Backup",restoreConfirmMessage:'Are you sure you want to restore from "{{filename}}"? This will completely replace your current database and all files. The application will need to be restarted after restore.',restoreConfirmButton:"Restore Backup",uploadingFile:"Uploading backup file...",backupRestoredRestart:"Backup restored. Please restart Bambuddy.",failedToRestore:"Failed to restore backup. Please check the file format.",reloadNow:"Reload Now",creatingBackup:"Creating Backup",restoringBackup:"Restoring Backup",preparing:"Preparing...",processing:"Processing...",doNotClosePage:"Please do not close this page or navigate away. This operation may take several minutes for large backups.",restoring:"Restoring...",restoreComplete:"Restore Complete",restoreFailed2:"Restore Failed",importSettings:"Import settings from a backup file",pleaseWaitRestoring:"Please wait while your data is being restored",selectBackupFile:"Click to select backup file (.json or .zip)",duplicateHandling:"How duplicate handling works:",matchPrinters:"Printers",matchPrintersBy:"matched by serial number",matchSmartPlugs:"Smart Plugs",matchSmartPlugsBy:"matched by IP address",matchNotificationProviders:"Notification Providers",matchNotificationProvidersBy:"matched by name",matchFilaments:"Filaments",matchFilamentsBy:"matched by name + type + brand",matchArchives:"Archives",matchArchivesBy:"matched by content hash (always skipped)",matchPendingUploads:"Pending Uploads",matchPendingUploadsBy:"matched by filename",matchSettingsTemplates:"Settings & Templates",matchSettingsTemplatesBy:"always overwritten",replaceExisting:"Replace existing data",keepExisting:"Keep existing data",overwriteDescription:"Overwrite items that already exist with backup data",keepDescription:"Only restore items that don't already exist",overwriteCaution:"Caution:",overwriteWarning:"Overwriting will replace your current configurations with data from the backup. Printer access codes are never overwritten for security.",cancel:"Cancel",processingBackup:"Processing backup file...",itemsRestored:"Items Restored",itemsSkipped:"Items Skipped",restored:"Restored",skippedAlreadyExist:"Skipped (already exist)",filesCategory:"Files (3MF, thumbnails, etc.)",andMore:"...and {{count}} more",newApiKeysGenerated:"New API Keys Generated",keysShownOnce:"These keys are only shown once. Copy them now!",copy:"Copy",noDataFound:"No data was found to restore in the backup file.",close:"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",localTimeHint:"Local time ({{tz}})",defaultPathLabel:"Default:",categories:{settings:"Settings",notification_providers:"Notification Providers",notification_templates:"Notification Templates",smart_plugs:"Smart Plugs",printers:"Printers",filaments:"Filaments",maintenance_types:"Maintenance Types",archives:"Archives",projects:"Projects",pending_uploads:"Pending Uploads",external_links:"External Links",api_keys:"API Keys"}},tags:{title:"Tags",addTag:"Add Tag",editTag:"Edit Tag",deleteTag:"Delete Tag",tagName:"Tag Name",tagColor:"Tag Color",noTags:"No tags",deleteConfirm:"Are you sure you want to delete this tag?",manageTags:"Manage Tags"},uploadModal:{title:"Upload 3MF Files",dragDrop:"Drag & drop .3mf files here",or:"or",browseFiles:"Browse Files",extractionInfo:"The printer model will be automatically extracted from the 3MF file metadata.",uploaded:"uploaded",failed:"failed",uploading:"Uploading...",upload:"Upload",uploadFailed:"Upload failed"},editArchive:{title:"Edit Archive",name:"Name",namePlaceholder:"Print name",printer:"Printer",noPrinter:"No printer",project:"Project",noProject:"No project",itemsPrinted:"Items Printed",itemsPrintedHelp:"Number of items produced in this print job",notes:"Notes",notesPlaceholder:"Add notes about this print...",externalLink:"External Link",externalLinkPlaceholder:"https://printables.com/model/...",externalLinkHelp:"Link to Printables, Thingiverse, or other source",tags:"Tags",tagsPlaceholder:"Add tags...",addMoreTags:"Add more tags...",matchingTags:'Matching "{{query}}"',existingTags:"Existing tags",clickToAdd:"(click to add)",status:"Status",failureReason:"Failure Reason",selectReason:"Select reason...",photos:"Photos of Printed Result",photosHelp:"Click + to add photos of your printed result",printResult:"Print result",saving:"Saving...",failureReasons:{adhesionFailure:"Adhesion failure",spaghettiDetached:"Spaghetti / Detached",layerShift:"Layer shift",cloggedNozzle:"Clogged nozzle",filamentRunout:"Filament runout",warping:"Warping",stringing:"Stringing",underExtrusion:"Under-extrusion",powerFailure:"Power failure",userCancelled:"User cancelled",other:"Other"},statuses:{completed:"Completed",failed:"Failed",aborted:"Cancelled",printing:"Printing"}},kProfiles:{title:"K-Profiles",noPrintersConfigured:"No Printers Configured",addPrinterInSettings:"Add a printer in Settings to manage K-profiles",noActivePrinters:"No Active Printers",enablePrinterConnection:"Enable a printer connection to view its K-profiles",loadingProfiles:"Loading K-Profiles...",printerOffline:"Printer Offline",printerOfflineDesc:"The selected printer is not connected. Power it on to view K-profiles.",noMatchingProfiles:"No Matching Profiles",noMatchingProfilesDesc:"No profiles match your search criteria",noKProfiles:"No K-Profiles",noKProfilesDesc:"No pressure advance profiles found for {{diameter}}mm nozzle",createFirstProfile:"Create First Profile",printer:"Printer",nozzle:"Nozzle",refresh:"Refresh",addProfile:"Add Profile",export:"Export",import:"Import",select:"Select",selectAll:"Select All",delete:"Delete",searchPlaceholder:"Search by name or filament...",allExtruders:"All Extruders",leftOnly:"Left Only",rightOnly:"Right Only",allFlow:"All Flow",hfOnly:"HF Only",sOnly:"S Only",sortName:"Sort: Name",sortKValue:"Sort: K-Value",sortFilament:"Sort: Filament",leftExtruder:"Left Extruder",rightExtruder:"Right Extruder",modal:{addTitle:"Add K-Profile",editTitle:"Edit K-Profile",profileName:"Profile Name",profileNamePlaceholder:"My PLA Profile",kValue:"K-Value",kValuePlaceholder:"0.020",kValueHelp:"Typical range: 0.01 - 0.06 for PLA, 0.02 - 0.10 for PETG",filament:"Filament",selectFilament:"Select filament...",noFilamentsHelp:"No filaments found. Create a K-profile in Bambu Studio first.",flowType:"Flow Type",highFlow:"High Flow",standard:"Standard",nozzleSize:"Nozzle Size",extruder:"Extruder",extruders:"Extruders",left:"Left",right:"Right",notes:"Notes (stored locally)",notesPlaceholder:"Add notes about this profile...",notesHelp:"Notes are saved in Bambuddy, not on the printer",syncing:"Syncing with printer...",savingExtruder:"Saving to extruder {{current}}/{{total}}...",pleaseWait:"Please wait"},deleteConfirm:{title:"Delete Profile",cannotUndo:"This cannot be undone",message:'Are you sure you want to delete "{{name}}" from the printer?'},bulkDelete:{title:"Delete Profiles",cannotUndo:"This cannot be undone",message:"Are you sure you want to delete {{count}} selected profiles from the printer?"},toast:{profileSaved:"K-profile saved",profilesSaved:"K-profile saved to {{count}} extruders",selectAtLeastOneExtruder:"Please select at least one extruder",profileDeleted:"K-profile deleted",profilesDeleted:"Deleted {{count}} profiles",exportedProfiles:"Exported {{count}} profiles",importedProfiles:"Imported {{count}} of {{total}} profiles",noProfilesToExport:"No profiles to export",invalidFileFormat:"Invalid file format",failedToParseImport:"Failed to parse import file",failedToSaveBatch:"Failed to save K-profiles",noteSaved:"Note saved",failedToSaveNote:"Failed to save note"},permission:{noRead:"You do not have permission to refresh profiles",noCreate:"You do not have permission to add profiles",noUpdate:"You do not have permission to update K-profiles",noDelete:"You do not have permission to delete K-profiles",noExport:"You do not have permission to export profiles",noImport:"You do not have permission to import profiles"}},virtualPrinter:{title:"Virtual Printer",running:"Running",stopped:"Stopped",description:{default:"Enable a virtual printer that appears in Bambu Studio and OrcaSlicer. Files sent to this printer will be archived directly without printing.",proxy:"Enable a proxy that relays slicer traffic to a real printer, allowing remote printing over any network."},enable:{title:"Enable Virtual Printer",visibleInSlicer:'Visible as "Bambuddy" in slicer discovery',proxyingTo:"Proxying to {{name}}",notActive:"Not active"},model:{title:"Printer Model",description:"Select which printer model to emulate.",restartWarning:"Changing the model will restart the virtual printer"},accessCode:{title:"Access Code",isSet:"Access code is set",notSet:"No access code set - required to enable",placeholder:"Enter 8-char code",placeholderChange:"Enter new code to change",hint:"Must be exactly 8 characters. Used by slicers to authenticate.",charCount:"({{count}}/8)",inheritedFromTarget:"Inherited from target",derivedFromTargetHint:"Uses the target printer's access code. The bridge forwards slicer auth to the real printer, so the codes must match — edit the printer's access code to change this value.",reveal:"Show access code",hide:"Hide access code"},targetPrinter:{title:"Target Printer",configured:"Proxy target configured",notConfigured:"No target printer selected - required for proxy mode",placeholder:"Select a printer...",hint:"Select the printer to proxy slicer traffic to. The printer must be in LAN mode.",noPrinters:"No printers configured. Add a printer first to use proxy mode."},remoteInterface:{title:"Network Interface Override",configured:"Interface override active",optional:"Optional - use if auto-detected IP is wrong (e.g. multiple NICs, Docker, VPN)",placeholder:"Auto-detect (default)...",hint:"Override the IP address advertised via SSDP and used in the TLS certificate. Useful when Bambuddy has multiple network interfaces."},mode:{title:"Mode",archive:"Archive",archiveDesc:"Archive files immediately",review:"Review",reviewDesc:"Review before archiving",queue:"Queue",queueDesc:"Archive and add to queue",proxy:"Proxy",proxyDesc:"Relay to real printer"},autoDispatch:{title:"Auto-dispatch",description:"Automatically start prints when added to queue. When off, prints wait for manual dispatch."},queueForceColorMatch:{title:"Force color match",description:"Refuse to dispatch onto a printer that does not have the exact filament type and color loaded. Off by default — without this, the queue uses model-only matching and may pick a printer with the wrong color loaded."},tailscaleDisabled:{title:"Tailscale integration",description:"Enable to mark this VP as exposed over Tailscale. Shows the host's Tailscale address so you know which IP to paste into the slicer. The CA-import step is unchanged — this toggle has no effect on certificates."},setupRequired:{title:"Setup Required",description:"The virtual printer feature requires additional system configuration before it will work. This includes port forwarding, firewall rules, and platform-specific settings.",readGuide:"Read the setup guide before enabling"},archiveNameSource:{title:"Archive name source",description:`Choose how new archives are named when files arrive via the virtual printer. "Metadata" uses the slicer-embedded Title from the 3MF (default). "Filename" uses the filename Bambu Studio sent over FTP. Note: Bambu Studio overwrites the name you type in the "send to printer" dialog with the 3MF's Title field whenever one is present, so both modes often produce the same string.`,metadata:"Metadata",filename:"Filename"},caCert:{title:"Slicer certificate",description:"Virtual printers use a TLS certificate signed by the Bambuddy CA. Import this CA certificate into your slicer's trust store once so it accepts the connection — no need to copy it from the command line.",copy:"Copy",copied:"Copied",download:"Download",fingerprint:"SHA-256"},howItWorks:{title:"How it works",step1:"On the same LAN, virtual printers appear in your slicer (Bambu Studio / OrcaSlicer) automatically via discovery. From other networks, add them manually by IP address and access code.",step2:'In Archive, Review, and Queue modes, use the "Send" button in your slicer to upload 3MF files to Bambuddy. The slicer will show "Print success" — the file is stored, not printed.',step3:"In Proxy mode, the virtual printer relays all traffic to a real printer — prints start immediately as if connected directly."},status:{title:"Status Details",printerName:"Printer Name",model:"Model",serialNumber:"Serial Number",mode:"Mode",pendingFiles:"Pending Files",targetPrinter:"Target Printer",ftpPort:"FTP Port",mqttPort:"MQTT Port",ftpConnections:"FTP Connections",mqttConnections:"MQTT Connections"},toast:{updated:"Virtual printer settings updated",failedToUpdate:"Failed to update settings",copyFailed:"Failed to copy — try selecting the text manually",accessCodeRequired:"Please set an access code first",targetPrinterRequired:"Please select a target printer first",bindIpRequired:"Please set a bind IP first",accessCodeEmpty:"Access code cannot be empty",accessCodeLength:"Access code must be exactly 8 characters",targetCodeChangedRebind:"Access code now matches the new target printer. Re-add this device in your slicer to pick up the new code.",created:"Virtual printer created",failedToCreate:"Failed to create virtual printer",deleted:"Virtual printer deleted",failedToDelete:"Failed to delete virtual printer"},list:{title:"Virtual Printers",add:"Add",addFirst:"Add Virtual Printer",empty:"No virtual printers configured. Add one to get started."},bindIp:{title:"Bind Interface",placeholder:"Select interface...",hint:"Network interface for this virtual printer to bind to. Must be unique per printer."},proxy:{accessCodeHint:"In proxy mode, use your target printer's access code in the slicer. The connection is forwarded transparently to the real printer."},addDialog:{title:"Add Virtual Printer",name:"Name",hint:"You can configure access code, target printer, and other settings after creating.",create:"Create"},deleteConfirm:{title:"Delete Virtual Printer",message:'Are you sure you want to delete "{{name}}"? This will stop all services for this printer.'}},modelViewer:{openInSlicer:"Open in Slicer",tabs:{model:"3D Model",gcode:"G-code Preview"},notAvailable:"not available",notSliced:"not sliced",plates:"Plates",allPlates:"All Plates",plateNumber:"Plate {{number}}",plateCount:"{{count}} plate",plateCount_other:"{{count}} plates",objectCount:"{{count}} object",objectCount_other:"{{count}} objects",filamentCount:"{{count}} filament",filamentCount_other:"{{count}} filaments",eta:"ETA {{minutes}} min",noPreview:"No preview available for this file",pagination:{pageOf:"Page {{current}} of {{total}}",prev:"Prev",next:"Next"},errors:{failedToLoad:"Failed to load file",noMeshes:"No meshes found in 3MF file",unsupportedFormat:"Unsupported file format"}},maintenanceDescriptions:{lubricateCarbonRods:"Apply lubricant to carbon rods for smooth motion",lubricateRails:"Apply lubricant to linear rails for smooth motion",cleanNozzle:"Clean hotend and nozzle to prevent clogs",checkBelts:"Verify belt tension for accurate prints",cleanBuildPlate:"Clean build plate for better adhesion",checkExtruder:"Inspect extruder gears for wear",checkCooling:"Ensure cooling fans are working properly",generalInspection:"General printer inspection",cleanCarbonRods:"Clean carbon rods to reduce friction",lubricateSteelRods:"Apply lubricant to steel rods for smooth motion",cleanSteelRods:"Clean steel rods to reduce friction",cleanLinearRails:"Wipe linear rails to remove dust and debris",checkPtfeTube:"Inspect PTFE tube for wear or damage",replaceHepaFilter:"Replace HEPA filter for air quality",replaceCarbonFilter:"Replace activated carbon filter",lubricateLeftNozzleRail:"Lubricate left nozzle rail (H2 series)"},smartPlugs:{offline:"Offline",admin:"Admin",openPlugAdminPage:"Open plug admin page",deleteSmartPlug:"Delete Smart Plug",turnOnSmartPlug:"Turn On Smart Plug",turnOffSmartPlug:"Turn Off Smart Plug",turnOn:"Turn On",turnOff:"Turn Off",addSmartPlug:{scanningNetwork:"Scanning network...",chooseEntity:"Choose an entity...",connectionFailed:"Connection failed",searchEntities:"Search entities...",searchPowerSensors:"Search power sensors...",searchEnergySensors:"Search energy sensors...",placeholders:{plugName:"Living Room Plug",mqttStateOnValue:"ON, true, 1",mqttSameAsPower:"Same as power topic, or different"}},linkedTo:"Linked to:",monitorOnly:"Monitor Only",alerts:"Alerts",scheduleOn:"On {{time}}",scheduleOff:"Off {{time}}",on:"On",off:"Off",power:"Power",kwhToday:"kWh Today",settings:"Settings",automationSettings:"Automation Settings",showInSwitchbar:"Show in Switchbar",quickAccessSidebar:"Quick access from sidebar",enabled:"Enabled",enableAutomation:"Enable automation for this plug",autoOn:"Auto On",autoOnDescription:"Turn on when print starts",autoOff:"Auto Off",autoOffDescription:"Turn off when print completes (one-shot)",autoOffPersistent:"Keep Enabled",autoOffPersistentDescription:"Stay enabled between prints instead of one-shot",autoOffAfterDrying:"Auto Off After Drying",autoOffAfterDryingDescription:"Turn off when AMS drying completes",delayAfterDryingMinutes:"Drying delay (minutes)",turnOffDelayMode:"Turn Off Delay Mode",time:"Time",temp:"Temp",delayMinutes:"Delay (minutes)",tempThreshold:"Temperature threshold (°C)",tempThresholdDescription:"Turns off when nozzle cools below this temperature",edit:"Edit",deleteConfirm:'Are you sure you want to delete "{{name}}"? This cannot be undone.',turnOnConfirm:'Are you sure you want to turn on "{{name}}"?',turnOffConfirm:'Are you sure you want to turn off "{{name}}"? This will cut power to the connected device.',failedToTurn:'Failed to turn {{action}} "{{name}}"',unknown:"Unknown",addTitle:"Add Smart Plug",editTitle:"Edit Smart Plug",stopScanning:"Stop Scanning",discoverTasmota:"Discover Tasmota Devices",foundDevices:"Found {{count}} device(s) - click to select:",noDevicesFound:"No Tasmota devices found on your network",haNotConfigured:"Home Assistant is not configured. Set it up in",haSettingsPath:"Settings → Network → Home Assistant",selectEntity:"Select Entity *",ipAddress:"IP Address *",nameLabel:"Name *",username:"Username",password:"Password",authHint:"Leave empty if your Tasmota device doesn't require authentication",linkToPrinter:"Link to Printer",noPrinter:"No printer (manual control only)",linkingDescription:"Linking enables automatic on/off when prints start/complete",powerAlerts:"Power Alerts",alertAbove:"Alert if above (W)",alertBelow:"Alert if below (W)",alertDescription:"Get notified when power consumption crosses these thresholds. Leave empty to disable that direction.",dailySchedule:"Daily Schedule",turnOnAt:"Turn On at",turnOffAt:"Turn Off at",scheduleDescription:"Automatically turn the plug on/off at these times daily. Leave empty to skip that action.",showOnPrinterCard:"Show on Printer Card",displayOnPrinterCard:"Display button on printer card",connectedResult:"Connected!",deviceLabel:"Device: {{name}} - ",stateLabel:"State: {{state}}",test:"Test",delete:"Delete",save:"Save",add:"Add",cancel:"Cancel",failedToStartScan:"Failed to start scan",nameRequired:"Name is required",entityRequired:"Entity is required for Home Assistant plugs",mqttTopicRequired:"At least one MQTT topic must be configured for power, energy, or state monitoring",loadingEntities:"Loading entities...",loading:"Loading...",failedToLoadEntities:"Failed to load entities: {{error}}",noEntitiesMatching:'No entities found matching "{{search}}"',noEntitiesAvailable:"No entities available",searchingEntities:"Searching all entities ({{count}} found)",showingEntities:"Showing switch, light, input_boolean ({{count}} available)",energyMonitoringOptional:"Energy Monitoring (Optional)",energyMonitoringHint:"Search and select sensors that provide power/energy data.",powerSensorW:"Power Sensor (W)",energyTodayKwh:"Energy Today (kWh)",totalEnergyKwh:"Total Energy (kWh)",noMatchingSensors:"No matching sensors",none:"None",mqttNotConfigured:"MQTT broker not configured. Set broker address in",mqttSettingsPath:"Settings → Network → MQTT Publishing",mqttNotConfiguredSuffix:"(you don't need to enable publishing, just fill in the broker details).",mqttMonitorOnlyDescription:"MQTT plugs receive power/energy data via MQTT subscription. On/off control is not available - use your MQTT broker or home automation system.",powerMonitoring:"Power Monitoring",energyMonitoring:"Energy Monitoring",stateMonitoring:"State Monitoring",optional:"optional",topic:"Topic",jsonPath:"JSON Path",multiplier:"Multiplier",onValue:"ON Value",mqttPowerHint:`JSON path extracts value from JSON payload (e.g., "power_l1"). Leave empty if topic publishes raw numeric values.
+Use multiplier 0.001 for mW→W, 1000 for kW→W.`,mqttEnergyHint:`JSON path extracts value from JSON payload. Leave empty for raw values.
+Use multiplier 0.001 for Wh→kWh, 1000 for MWh→kWh.`,mqttStateHint:`JSON path extracts value from JSON payload. Leave empty for raw values.
+ON value: the exact string that means "ON". Leave empty for auto-detect (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:"Power URL",restPowerPath:"Power JSON Path",restPowerMultiplier:"Power Multiplier",restEnergyUrl:"Energy URL",restEnergyPath:"Energy JSON Path",restEnergyMultiplier:"Energy Multiplier",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:"Separate URL for power data (uses Status URL if empty)",restEnergyUrlHint:"Separate URL for energy data (uses Status URL if empty)",restEnergyHint:"Each value can use its own URL or fall back to the Status URL. Use multipliers for unit conversion (e.g. 0.001 to convert Wh to kWh).",testConnection:"Test Connection",connectionSuccess:"Connection successful",noSwitchesInSwitchbar:"No switches in switchbar",enableSwitchbarHint:'Enable "Show in Switchbar" in Settings > Smart Plugs'},notifications:{providerTypes:{callmebot:"CallMeBot/WhatsApp",ntfy:"ntfy",pushover:"Pushover",telegram:"Telegram",email:"Email",discord:"Discord",webhook:"Webhook",homeassistant:"Home Assistant"},providerDescriptions:{email:"SMTP email notifications",telegram:"Notifications via Telegram bot",discord:"Send to Discord channel via webhook",ntfy:"Free, self-hostable push notifications",pushover:"Simple, reliable push notifications",callmebot:"Free WhatsApp notifications via CallMeBot",webhook:"Generic HTTP POST to any URL",homeassistant:"Persistent notifications in Home Assistant dashboard"},lastSuccess:"Last: {{date}}",error:"Error",printer:"Printer:",allPrinters:"All printers",sendTestNotification:"Send Test Notification",eventSettings:"Event Settings",enabled:"Enabled",sendFromProvider:"Send notifications from this provider",printEvents:"Print Events",printerStatus:"Printer Status",amsAlarms:"AMS Alarms",amsHtAlarms:"AMS-HT Alarms",printQueue:"Print Queue",start:"Start",plateCheck:"Plate Check",complete:"Complete",failed:"Failed",stopped:"Stopped",progress:"Progress",offline:"Offline",lowFilament:"Low Filament",maintenance:"Maintenance",amsHumidity:"AMS Humidity",amsTemp:"AMS Temp",amsHtHumidity:"AMS-HT Humidity",amsHtTemp:"AMS-HT Temp",bedCooled:"Bed Cooled",firstLayer:"First Layer",quiet:"Quiet",digest:"Digest {{time}}",printStarted:"Print Started",plateNotEmpty:"Plate Not Empty",plateNotEmptyDescription:"Objects detected before print",printCompleted:"Print Completed",bedCooledLabel:"Bed Cooled",bedCooledDescription:"Bed cooled below threshold after print",firstLayerCompleteLabel:"First Layer Complete",firstLayerCompleteDescription:"Notify with snapshot when first layer finishes",missingSpoolAssignmentLabel:"Missing Spool Assignment",missingSpoolAssignmentDescription:"Notify when print starts and required trays have no assigned spool",printFailed:"Print Failed",printStopped:"Print Stopped",progressMilestones:"Progress Milestones",progressMilestonesDescription:"Notify at 25%, 50%, 75%",printerOffline:"Printer Offline",printerError:"Printer Error",lowFilamentLabel:"Low Filament",maintenanceDue:"Maintenance Due",maintenanceDueDescription:"Notify when maintenance is needed",amsHumidityHigh:"AMS Humidity High",amsHumidityHighDescription:"Regular AMS humidity exceeds threshold",amsTemperatureHigh:"AMS Temperature High",amsTemperatureHighDescription:"Regular AMS temperature exceeds threshold",amsHtHumidityHigh:"AMS-HT Humidity High",amsHtHumidityHighDescription:"AMS-HT humidity exceeds threshold",amsHtTemperatureHigh:"AMS-HT Temperature High",amsHtTemperatureHighDescription:"AMS-HT temperature exceeds threshold",inventoryAlerts:"Inventory Alerts",stockReorderAlert:"Reorder Alert",stockReorderAlertDescription:"SKU has reached its reorder point",stockBreakAlert:"Stock Break Alert",stockBreakAlertDescription:"Stock will run out before replenishment arrives",jobAdded:"Job Added",jobAddedDescription:"Job added to queue",jobAssigned:"Job Assigned",jobAssignedDescription:"Model-based job assigned to printer",jobStarted:"Job Started",jobStartedDescription:"Queue job started printing",jobWaiting:"Job Waiting",jobWaitingDescription:"Job waiting for filament or printer",jobSkipped:"Job Skipped",jobSkippedDescription:"Job skipped (previous failed)",jobFailed:"Job Failed",jobFailedDescription:"Job failed to start",queueComplete:"Queue Complete",queueCompleteDescription:"All queue jobs finished",quietHours:"Quiet Hours",noNotificationsDuring:"No notifications during these hours",editProviderToChangeQuietHours:"Edit provider to change quiet hours",dailyDigest:"Daily Digest",batchNotifications:"Batch notifications into a single daily summary",sendAt:"Send at {{time}}",editProviderToChangeDigestTime:"Edit provider to change digest time",edit:"Edit",deleteProvider:"Delete Notification Provider",deleteConfirm:'Are you sure you want to delete "{{name}}"? This cannot be undone.',delete:"Delete",addTitle:"Add Notification Provider",editTitle:"Edit Notification Provider",nameLabel:"Name *",namePlaceholder:"My Notifications",providerTypeLabel:"Provider Type *",configuration:"Configuration",testConfiguration:"Test Configuration",printerFilter:"Printer Filter",onlyFromPrinter:"Only send notifications for events from this printer",quietHoursDnd:"Quiet Hours (Do Not Disturb)",quietStart:"Start",quietEnd:"End",dailyDigestLabel:"Daily Digest",sendDigestAt:"Send digest at",digestCollected:"Events will be collected and sent as a single summary at this time",notificationEvents:"Notification Events",progressPercent:"(25%, 50%, 75%)",bedCooledAfterPrint:"(after print completes)",eventPriority:{sectionTitle:"ntfy Priority",helpNtfy:"Pick a priority for each enabled event. ntfy uses these to escalate alerts (sound, visibility, push behavior). Levels not set here use the ntfy server default.",min:"Min",low:"Low",default:"Default",high:"High",urgent:"Urgent"},cancel:"Cancel",save:"Save",add:"Add",nameRequired:"Name is required",fieldRequired:"{{field}} is required",phoneNumber:"Phone Number",apiKey:"API Key",serverUrl:"Server URL",topic:"Topic",authToken:"Auth Token",userKey:"User Key",appToken:"App Token",priority:"Priority",botToken:"Bot Token",chatId:"Chat ID",smtpServer:"SMTP Server",smtpPort:"SMTP Port",security:"Security",authentication:"Authentication",username:"Username",password:"Password",fromEmail:"From Email",toEmail:"To Email",webhookUrl:"Webhook URL",payloadFormat:"Payload Format",authorization:"Authorization",titleFieldName:"Title Field Name",messageFieldName:"Message Field Name",editTemplate:"Edit Template: {{name}}",titleLabel:"Title",bodyLabel:"Body",titlePlaceholder:"Notification title...",bodyPlaceholder:"Notification body...",availableVariables:"Available Variables",clickToInsert:"Click to insert at cursor position in body",livePreview:"Live Preview",hide:"Hide",show:"Show",loadingPreview:"Loading preview...",enterTemplateContent:"Enter template content to see preview",titlePreview:"Title:",bodyPreview:"Body:",resetToDefault:"Reset to Default",titleRequired:"Title is required",bodyRequired:"Body is required",notificationLog:"Notification Log",showFailedOnly:"Failed only",last24Hours:"Last 24 hours",last7Days:"Last 7 days",last30Days:"Last 30 days",last90Days:"Last 90 days",justNow:"Just now",noFailedNotifications:"No failed notifications",noNotificationsLogged:"No notifications logged",unknownProvider:"Unknown Provider",logTitle:"Title",logMessage:"Message",logError:"Error",logProvider:"Provider: {{type}}",logTime:"Time: {{time}}",refresh:"Refresh",clearOld:"Clear Old",statsSummary:"Last {{days}} days:",statsNotifications:"notifications",statsSent:"{{count}} sent",statsFailed:"{{count}} failed",eventTypes:{print_start:"Print Started",print_complete:"Print Complete",print_failed:"Print Failed",print_stopped:"Print Stopped",print_progress:"Progress",printer_offline:"Printer Offline",printer_error:"Printer Error",filament_low:"Low Filament",maintenance_due:"Maintenance Due",test:"Test"},userEmail:{title:"Notifications",emailNotifications:"Email Notifications",emailNotificationsDesc:"Receive email notifications for your own print jobs. Emails are sent using the system SMTP settings configured in Advanced Authentication.",sendingTo:"Notifications will be sent to",noEmailWarning:"Your account does not have an email address. Contact an administrator to add one.",printJobNotifications:"Print Job Notifications",printJobNotificationsDesc:"Choose which events trigger email notifications for print jobs you submit.",printJobStarts:"Print Job Starts",printJobStartsDesc:"Get notified when your print job begins.",printJobFinishes:"Print Job Finishes",printJobFinishesDesc:"Get notified when your print job completes successfully.",printErrors:"Print Errors",printErrorsDesc:"Get notified when your print job fails or encounters an error.",printJobStops:"Print Job Stops",printJobStopsDesc:"Get notified when your print job is cancelled or stopped.",saveSuccess:"Notification preferences saved.",saveError:"Failed to save notification preferences."}},richTextEditor:{bold:"Bold",italic:"Italic",underline:"Underline",bulletList:"Bullet List",numberedList:"Numbered List",alignLeft:"Align Left",alignCenter:"Align Center",alignRight:"Align Right",addLink:"Add Link",removeLink:"Remove Link"},externalLinks:{noLinksConfigured:"No external links configured",deleteLink:"Delete Link",removeCustomIcon:"Remove custom icon",openInNewTab:"Open in new tab",placeholders:{linkName:"My Link"}},keyboardShortcuts:{title:"Keyboard Shortcuts",navigation:"Navigation",archivesSection:"Archives",kProfilesSection:"K-Profiles",generalSection:"General",shortcuts:{goToPrinters:"Go to Printers",goToArchives:"Go to Archives",goToQueue:"Go to Queue",goToStats:"Go to Statistics",goToProfiles:"Go to Cloud Profiles",goToSettings:"Go to Settings",focusSearch:"Focus search",openUploadModal:"Open upload modal",clearSelection:"Clear selection / blur input",contextMenu:"Context menu on cards",refreshProfiles:"Refresh profiles",newProfile:"New profile",exitSelectionMode:"Exit selection mode",showHelp:"Show this help"},footer:"Press Esc or click outside to close"},notificationLog:{title:"Notification Log",events:{printStarted:"Print Started",printComplete:"Print Complete",printFailed:"Print Failed",printStopped:"Print Stopped",progress:"Progress",printerOffline:"Printer Offline",printerError:"Printer Error",lowFilament:"Low Filament",maintenanceDue:"Maintenance Due",test:"Test"},timeAgo:{justNow:"Just now",minutesAgo:"{{minutes}}m ago",hoursAgo:"{{hours}}h ago"}},restoreBackup:{title:"Restore Backup",restoring:"Restoring...",restoreComplete:"Restore Complete",restoreFailed:"Restore Failed",importSettings:"Import settings from a backup file",pleaseWait:"Please wait while your data is being restored",clickToSelect:"Click to select backup file (.json or .zip)",howDuplicateHandling:"How duplicate handling works:",categories:{printers:"Printers",smartPlugs:"Smart Plugs",notificationProviders:"Notification Providers",filaments:"Filaments",archives:"Archives",pendingUploads:"Pending Uploads",settingsTemplates:"Settings & Templates"},matchingInfo:{printers:"matched by serial number",smartPlugs:"matched by IP address",notificationProviders:"matched by name",filaments:"matched by name + type + brand",archives:"matched by content hash",pendingUploads:"matched by filename",settingsTemplates:"always overwritten"},replaceExisting:"Replace existing data",keepExisting:"Keep existing data",replaceDescription:"Overwrite items that already exist with backup data",keepDescription:"Only restore items that don't already exist",caution:"Caution:",cautionText:"Overwriting will replace your current configurations with backup data. Printer access codes are never overwritten for security.",itemsRestored:"Items Restored",itemsSkipped:"Items Skipped",restored:"Restored",skipped:"Skipped (already exist)",filesLabel:"Files (3MF, thumbnails, etc.)",newApiKeysGenerated:"New API Keys Generated",newApiKeysWarning:"These keys are only shown once. Copy them now!",processingBackup:"Processing backup file...",noDataFound:"No data was found to restore in the backup file.",failedToRestore:"Failed to restore backup. Please check the file format."},backupExport:{title:"Export Backup",selectData:"Select data to include",selectAll:"Select All",selectNone:"Select None",categoryDescriptions:{settings:"Language, theme, update preferences",notifications:"ntfy, Pushover, Discord, etc.",templates:"Custom message templates",smartPlugs:"Tasmota plug configurations",externalLinks:"Sidebar links to external services",printers:"Printer info (access codes excluded)",plateDetection:"Empty plate reference images",filaments:"Filament types and costs",maintenance:"Custom maintenance schedules",archives:"All print data + files (3MF, thumbnails, photos)",projects:"Projects, BOM items, and attachments",pendingUploads:"Virtual printer uploads awaiting review",apiKeys:"Webhook API keys (new keys generated on import)"},requiresPrinters:"Requires Printers to be selected",zipFileWarning:"ZIP file will be created.",zipFileDescription:"Includes all 3MF files, thumbnails, timelapses, and photos. This may take a while and result in a large file.",includeAccessCodes:"Include Access Codes",includeAccessCodesDescription:"For transferring to another machine",includeAccessCodesWarning:"Access codes will be included in plain text. Keep this backup file secure!",categoriesSelected:"{{selectedCount}} categories selected"},pendingUploads:{placeholders:{notes:"Add notes about this print..."},discardUpload:"Discard Upload",archiveAllUploads:"Archive All Uploads",discardAllUploads:"Discard All Uploads",archive:"Archive",timeAgo:{justNow:"Just now",minutesAgo:"{{minutes}}m ago",hoursAgo:"{{hours}}h ago",daysAgo:"{{days}}d ago"}},apiBrowser:{placeholders:{requestBody:"JSON request body...",searchEndpoints:"Search endpoints..."}},configureAmsSlot:{title:"Configure AMS Slot",slotConfigured:"Slot Configured!",configuringSlot:"Configuring slot:",slotLabel:"{{ams}} Slot {{slot}}",searchPresets:"Search presets...",colorPlaceholder:"Color name or hex (e.g., brown, FF8800)",clearCustomColor:"Clear custom color",noCloudPresets:"No cloud presets. Login to Bambu Cloud to sync.",noPresetsAvailable:"No presets available. Login to Bambu Cloud or import local profiles.",noMatchingPresets:"No matching presets found.",custom:"Custom",builtin:"Built-in",settingsSentToPrinter:"Settings sent to printer",filamentProfile:"Filament Profile",kProfileLabel:"K Profile (Pressure Advance)",filteringFor:"Filtering for: {{material}}",noKProfile:"No K profile (use default 0.020)",noMatchingKProfiles:"No matching K profiles found. Default K=0.020 will be used.",selectFilamentFirst:"Select a filament profile first",kFromCalibration:"K={{value}} from printer calibration",customColorLabel:"Custom Color (optional)",presetColors:"{{name}} colors:",showLessColors:"Show less colors",showMoreColors:"Show more colors",clear:"Clear",hexLabel:"Hex: #{{hex}}",resetting:"Resetting...",resetSlot:"Reset Slot",cancel:"Cancel",configuring:"Configuring...",configureSlot:"Configure Slot"},githubBackup:{title:"Git Backup",history:"History",downloadBackup:"Download Backup",restoreBackup:"Restore Backup",noBackupsYet:"No backups yet"},emailSettings:{placeholders:{fromName:"BamBuddy"}},tagManagement:{searchTags:"Search tags...",renameTag:"Rename tag",deleteTag:"Delete tag"},notificationTemplates:{placeholders:{title:"Notification title...",body:"Notification body..."}},batchTag:{placeholders:{newTag:"Enter new tag..."}},photoGallery:{deletePhoto:"Delete Photo"},filamentHoverCard:{copySpoolUuid:"Copy spool UUID"},kProfilesView:{hasNote:"Has note",copyProfile:"Copy profile"},layout:{openMenu:"Open menu",noPermissionSystemInfo:"You do not have permission to view system information"},dashboard:{dragToReorder:"Drag to reorder",hideWidget:"Hide widget"},notificationProviderCard:{deleteNotificationProvider:"Delete Notification Provider"},fileManagerModal:{closeFileManager:"Close file manager",sortFiles:"Sort files",goToParentFolder:"Go to parent folder",threeView:"3D View"},embeddedCameraViewer:{refreshStream:"Refresh stream",close:"Close",zoomOut:"Zoom out",resetZoom:"Reset zoom",zoomIn:"Zoom in",dragToResize:"Drag to resize"},timelapseViewer:{skipBack5s:"Skip back 5s",skipForward5s:"Skip forward 5s"},notificationProviders:{descriptions:{email:"SMTP email notifications",telegram:"Notifications via Telegram bot",discord:"Send to Discord channel via webhook",ntfy:"Free, self-hostable push notifications",pushover:"Simple, reliable push notifications",callmebot:"Free WhatsApp notifications via CallMeBot",webhook:"Generic HTTP POST to any URL"}},logViewer:{searchPlaceholder:"Search message or logger name...",noLogEntries:"No log entries found"},switchbarPopover:{noSwitchesInSwitchbar:"No switches in switchbar"},projectPageModal:{placeholders:{title:"Title",designer:"Designer",license:"License",description:"Enter description...",profileTitle:"Profile Title",profileDescription:"Profile description..."}},spoolmanSettings:{},time:{unknown:"-",waiting:"Waiting",justNow:"Just now",now:"Now",minsAgo:"{{count}}m ago",inMins:"in {{count}}m",hoursAgo:"{{count}}h ago",inHours:"in {{count}}h",daysAgo:"{{count}}d ago",inDays:"in {{count}}d"},spoolbuddy:{nav:{dashboard:"Dashboard",ams:"AMS",inventory:"Inventory",writeTag:"Write",settings:"Settings"},status:{nfcReady:"NFC Ready",nfcOff:"NFC Off",offline:"Offline",online:"Online",noPrinters:"No printers",deviceOffline:"Device Offline",waitingConnection:"Waiting for device connection...",systemReady:"System Ready",status:"Status"},dashboard:{readyToScan:"Ready to scan",idleMessage:"Place a spool on the scale to identify it",nfcHint:"NFC tag will be read automatically",device:"Device",syncWeight:"Sync Weight",weightSynced:"Synced!",unknownTag:"Unknown Tag",newTag:"New Tag Detected",onScale:"on scale",linkSpool:"Link to Spool",linkTagTitle:"Link Tag to Spool",linkTag:"Link Tag",selectSpool:"Select a spool to link this tag to:",noUntagged:"No spools without tags found",tagDetected:"Tag detected",noTag:"No tag",tagId:"Tag",grossWeight:"Gross weight",spoolSize:"Spool size",close:"Close",currentSpool:"Current Spool",plateReady:"Plate ready: {{name}}",plateReadyLabel:"Plates ready to clear",plateClearAction:"Clear",plateClearedToast:"Plate marked as cleared",plateClearFailed:"Could not mark plate as cleared"},modal:{spoolDetected:"Spool Detected",assignToAms:"Assign to AMS",syncWeight:"Sync Weight",weightSynced:"Synced!",syncing:"Syncing...",newTagDetected:"New Tag Detected",addToInventory:"Add to Inventory",assignToAmsTitle:"Assign to AMS",selectSlot:"Select a slot",assign:"Assign",assigning:"Assigning...",assignSuccess:"Assigned!",assignPendingInsert:"Assigned. Slot will configure when you insert the spool.",assignError:"Failed to assign spool. Please try again.",noPrinterSelected:"Select a printer...",noAmsDetected:"No AMS detected on this printer",slot:"Slot"},weight:{noReading:"No reading",stable:"Stable",measuring:"Measuring...",tare:"Tare",calibrate:"Calibrate"},spool:{remaining:"Remaining",material:"Material",brand:"Brand",color:"Color",coreWeight:"Core",labelWeight:"Label",scaleWeight:"Scale",netWeight:"Net",lastUsed:"Last used"},ams:{noData:"No AMS detected",connectAms:"Connect an AMS to see filament slots",noPrinter:"No printer selected",selectPrinter:"Select a printer from the top bar",printerDisconnected:"Printer disconnected",humidity:"Humidity",level:"Level",active:"Active",slot:"Slot",empty:"Empty"},inventory:{search:"Search spools...",empty:"No spools in inventory",noResults:"No matching spools",spools:"spools",addSpool:"Add Spool"},settings:{tabDevice:"Device",tabDisplay:"Display",tabScale:"Scale",tabUpdates:"Updates",nfcReader:"NFC Reader",type:"Type",connection:"Connection",notConnected:"N/A",deviceInfo:"Device Info",hostname:"Host",uptime:"Uptime",systemConfig:"Backend & Auth",backendUrl:"Bambuddy Backend URL",apiToken:"API Token",apiTokenPlaceholder:"Enter API token",saveConfig:"Save Config",systemQueued:"Config queued.",nfcDiagnostic:"NFC Diagnostic",scaleDiagnostic:"Scale Diagnostic",readTagDiagnostic:"Read Tag Diagnostic",testNfc:"Test reader",testScale:"Test accuracy",testReadTag:"Read tag",systemFieldsRequired:"Backend URL is required.",brightness:"Brightness",saved:"Saved",noBacklight:"No DSI backlight detected. Brightness control requires a DSI display.",screenBlank:"Screen Blank Timeout",screenBlankDesc:"Screen turns off after inactivity. Touch to wake.",displayNote:"Brightness is applied as a software filter.",scaleCalibration:"Scale Calibration",currentWeight:"Current weight",tareOffset:"Tare",calFactor:"Factor",knownWeight:"Known weight",calStep1:"Remove all items from the scale and press Set Zero.",calStep2:"Place known weight on scale.",setZero:"Set Zero",calibrateNow:"Calibrate",calibrated:"Calibrated",tareSet:"Tare command sent. Waiting for device...",tareComplete:"Tare complete!",tareTimedOut:"Tare timed out — is the SpoolBuddy daemon running?",tareFailed:"Failed to send tare command",zeroSet:"Zero point set. Place known weight on scale.",calibrationDone:"Calibration complete!",calibrationFailed:"Calibration failed",lastCalibrated:"Last calibrated",stable:"Stable",settling:"Settling...",firmware:"Firmware",scale:"Scale",noDevice:"No SpoolBuddy device found",daemonVersion:"Daemon Version",currentVersion:"Current",versionPending:"Waiting for daemon...",checking:"Checking...",checkUpdates:"Check for Updates",updateAvailable:"Update available",updateInstructions:"Update via SSH: run the SpoolBuddy install script to upgrade.",upToDate:"Up to date",includeBeta:"Include beta versions"},writeTag:{tabExisting:"Existing Spool",tabNew:"New Spool",tabReplace:"Replace Tag",searchPlaceholder:"Search by material, color, brand...",noUntaggedSpools:"No spools without tags",noTaggedSpools:"No spools with tags",selectSpool:"Select a spool, then place a blank NTAG on the reader",placeTag:"Place an NTAG on the reader",tagReady:"Tag detected — ready to write",writeTag:"Write Tag",replaceTag:"Replace Tag",writing:"Writing tag...",waiting:"Waiting for SpoolBuddy...",writeSuccess:"Tag written successfully!",writeFailed:"Write failed",queueFailed:"Failed to queue write command",tryAgain:"Try Again",cancel:"Cancel",replaceWarning:"Old tag will be unlinked. New tag will replace it.",deviceOffline:"SpoolBuddy is offline",material:"Material",colorName:"Color Name",color:"Color",brand:"Brand",weight:"Weight (g)",createSpool:"Create Spool",creating:"Creating...",spoolCreated:"Spool created! Ready to write.",createFailed:"Failed to create spool",incompleteDataWarning:"Tag written with incomplete Spoolman data"},quickMenu:{printerPower:"Printer Power",systemControls:"System",restartDaemon:"Restart Daemon",restartBrowser:"Restart Browser",reboot:"Reboot",shutdown:"Shutdown",swipeToClose:"Swipe down to close",confirmTitle:"Confirm",confirmShutdown:"Are you sure you want to shut down the SpoolBuddy? You will need physical access to turn it back on.",confirmReboot:"Are you sure you want to reboot the SpoolBuddy?",confirmRestartDaemon:"Restart the SpoolBuddy daemon? NFC and scale will be temporarily unavailable.",confirmRestartBrowser:"Restart the kiosk browser? The display will briefly go blank.",confirm:"Confirm",confirmPlugOn:"Turn on {{name}}?",confirmPlugOff:"Turn off {{name}}?",turnOn:"Turn On",turnOff:"Turn Off"}},diagnostic:{modalTitle:"Connection diagnostic — {{name}}",running:"Running diagnostic...",runningElapsed:"Running diagnostic... ({{elapsed}}s)",waitingForReportHint:"Listening for the printer to publish a status report — this can take up to {{max}} seconds.",runFailed:"Diagnostic could not run: {{error}}",retry:"Run again",runButton:"Run diagnostic",sectionTitle:"Connection Diagnostic",sectionDescription:"Check why a printer won't connect or won't print — port reachability, LAN developer mode, Docker network mode, and credentials.",noPrinters:"No printers configured.",overall:{ok:"No problems found — the printer connection looks healthy.",warnings:"The printer should work, but some things need attention.",problems:"Found problems that explain why the printer won't connect or print."},check:{port_mqtt:{title:"Control port (MQTT 8883)",pass:"Reachable — the printer is accepting control connections.",fail:"Port 8883 is unreachable. The printer is powered off, on a different IP address, or a firewall is blocking it. Verify the printer IP and that nothing blocks port 8883."},port_ftps:{title:"File transfer port (FTPS 990)",pass:"Reachable — sending print files will work.",warn:"Port 990 is unreachable. Monitoring may still work, but sending prints to the printer will fail. Make sure port 990 is not blocked."},external_storage:{title:"Store sent files on external storage (install step 4)",pass:"The printer reports this option is on — sent files will be stored on the SD card and archives will have thumbnails and slicer metadata.",fail:`The printer reports this option is off. Enable "Store sent files on external storage" — on newer firmware (P2S 01.02 / Bambu Studio 2.6+) the toggle lives on the printer's Print Settings; on older versions it's in Bambu Studio / OrcaSlicer's Device tab. Without it, every archived print is missing its thumbnail and slicer metadata.`,skip:"Not checked — needs a live MQTT connection. On older slicers where this setting lives only in the slicer the printer never reports it, so this check will pass even when the option is off — verify install step 4 manually."},port_rtsps:{title:"Camera port (RTSPS 322)",pass:"Reachable — the camera stream will work.",warn:"Port 322 is unreachable. The live camera view will not work. This does not affect printing."},network_mode:{title:"Docker network mode",pass:"Running in host network mode.",warn:'Bambuddy is running in Docker bridge networking. Printer discovery and the Virtual Printer need host network mode — recreate the container with "network_mode: host".',skip:"Not running in Docker — not applicable."},subnet:{title:"Network subnet",pass:"The printer and Bambuddy are on the same subnet.",warn:"The printer ({{printer_ip}}) and Bambuddy ({{host_ip}}) are on different subnets. They may not reach each other unless routing between the subnets is configured.",skip:"Subnet could not be determined — skipped."},mqtt_auth:{title:"Printer credentials",pass:"The printer accepted the connection.",fail:"The printer is reachable but rejected the connection. The access code or serial number is most likely wrong. The access code changes every time Developer Mode is toggled — re-copy it from the printer screen.",skip:"Not checked — the printer could not be reached."},developer_mode:{title:"LAN Developer Mode",pass:"Developer Mode is enabled.",fail:"Developer Mode is OFF on the printer. Enable it in the printer's LAN settings — and confirm with OK. Without it, prints will not start.",skip:"Could not be checked — requires a live connection to the printer."},printer_publishing:{title:"Printer is publishing status",pass:"The printer is publishing status updates — AMS, filaments, and K-profiles will mirror correctly to the slicer.",fail:"The MQTT broker accepted the connection but the printer has not published any status reports. This is almost always a wrong or mis-cased serial number — the device//api/v1/metrics für Prometheus/Grafana-Überwachung bereitstellen.",bearerTokenOptional:"Bearer-Token (optional)",bearerTokenHint:"Wenn gesetzt, müssen Anfragen Authorization: Bearer enthalten",metricsConnectionStatus:"Verbindungsstatus",metricsPrinterState:"Druckerstatus (idle/printing/etc)",metricsPrintProgress:"Druckfortschritt 0-100%",metricsBedTemp:"Betttemperatur",metricsNozzleTemp:"Düsentemperatur",metricsPrintsTotal:"Gesamtdrucke nach Ergebnis",metricsMore:"...und mehr (Schichten, Lüfter, Warteschlange, Filamentverbrauch)",smartPlugsDescription:"Smart Plugs (Tasmota oder Home Assistant) verbinden, um Stromsteuerung zu automatisieren und Energieverbrauch für Ihre Drucker zu verfolgen.",allOn:"Alle Ein",allOff:"Alle Aus",addSmartPlug:"Smart Plug hinzufügen",energySummary:"Energieübersicht",currentPower:"Aktuelle Leistung",plugsOnline:"{{reachable}}/{{total}} Plugs online",today:"Heute",yesterday:"Gestern",total:"Gesamt",enablePlugsForSummary:"Plugs aktivieren, um Energieübersicht zu sehen",addNotificationProvider:"Hinzufügen",systemBadge:"(System)",creating:"Erstellen...",changing:"Ändern...",deleteUserAndItems:"Benutzer UND dessen Elemente löschen",deleteUserKeepItems:"Benutzer löschen, Elemente behalten (werden herrenlos)",ok:"OK",twoFa:{totpTitle:"Authenticator-App (TOTP)",totpDesc:"Verwende eine Authenticator-App wie Google Authenticator, Aegis oder Authy.",emailOtpTitle:"E-Mail OTP",emailOtpDesc:"Sende einen Einmalcode an {{email}} beim Einloggen.",emailOtpNoEmail:"Füge eine E-Mail-Adresse zu deinem Konto hinzu, um diese Methode zu aktivieren.",addEmailFirst:"Dein Konto hat keine E-Mail-Adresse. Bitte einen Administrator, eine hinzuzufügen.",setupTotp:"Authenticator-App einrichten",setupAuthApp:"Authenticator-App einrichten",setupInstructions:"Scanne den QR-Code mit deiner Authenticator-App und bestätige mit einem Code.",manualEntry:"Kein Scanner? Gib dieses Secret manuell ein:",scannedContinue:"Code gescannt — weiter",enterCodeToConfirm:"Gib den 6-stelligen Code aus deiner Authenticator-App ein, um die Einrichtung zu bestätigen.",activate:"Aktivieren",disableTotp:"Authenticator deaktivieren",disableConfirmHint:"Gib einen gültigen TOTP-Code oder einen Backup-Code ein, um den Authenticator zu deaktivieren.",totpDisabled:"Authenticator-App deaktiviert.",emailOtpEnabled:"E-Mail OTP aktiviert.",emailOtpDisabled:"E-Mail OTP deaktiviert.",smtpRequired:"Bitte konfigurieren und testen Sie zuerst die SMTP-Einstellungen.",invalidCode:"Ungültiger Code. Bitte erneut versuchen.",enableEmailOtp:"E-Mail OTP aktivieren",disableEmailOtp:"E-Mail OTP deaktivieren",emailSetupEnterCode:"Ein Bestätigungscode wurde an Ihre E-Mail-Adresse gesendet. Geben Sie ihn unten ein, um zu bestätigen, dass Ihnen dieses Postfach gehört.",verifyAndEnable:"Verifizieren & Aktivieren",emailDisablePasswordHint:"Geben Sie Ihr Kontopasswort ein, um die Deaktivierung des E-Mail OTP zu bestätigen.",passwordPlaceholder:"Passwort eingeben",backupCodesTitle:"Backup-Codes sichern",backupCodesWarning:"Speichere diese Codes sicher. Jeder Code kann nur einmal verwendet werden und wird nicht erneut angezeigt.",backupCodesRemaining:"{{count}} Backup-Codes verbleibend",savedCodes:"Codes gespeichert",regenBackup:"Backup-Codes neu generieren",regenBackupHint:"Gib deinen aktuellen TOTP-Code ein, um 10 neue Backup-Codes zu generieren. Alle bestehenden Codes werden ungültig.",newBackupCodes:"Neue Backup-Codes",linkedAccounts:"Verknüpfte SSO-Konten",linkedAccountsDesc:"Diese externen Identitätsanbieter sind mit deinem Konto verknüpft.",oidcUnlinked:"Konto getrennt."},oidc:{title:"SSO / OIDC-Anbieter",desc:"Konfiguriere OpenID Connect-Anbieter für Single Sign-On.",addProvider:"Anbieter hinzufügen",newProvider:"Neuer Anbieter",empty:"Noch keine OIDC-Anbieter konfiguriert.",created:"Anbieter erstellt.",updated:"Anbieter aktualisiert.",deleted:"Anbieter gelöscht.",refreshIcon:"Icon neu laden",removeIcon:"Icon entfernen",iconRefreshed:"Icon aktualisiert.",iconRemoved:"Icon entfernt.",iconFetchFailed:"Icon konnte von der Anbieter-URL nicht geladen werden.",deleteTitle:"Anbieter löschen",deleteMessage:'"{{name}}" löschen? Alle verknüpften Benutzerkonten werden getrennt.',form:{name:"Anzeigename",issuerUrl:"Aussteller-URL",clientId:"Client-ID",clientSecret:"Client-Secret",scopes:"Bereiche",iconUrl:"Symbol-URL (optional)",enabled:"Aktiviert",autoCreate:"Benutzer automatisch anlegen",autoCreateDesc:"Erstellt beim ersten Login automatisch ein lokales Konto.",autoLink:"Bestehende Konten automatisch verknüpfen",autoLinkDesc:"Verknüpft beim ersten Login vorhandene lokale Konten anhand der E-Mail-Adresse.",secretHint:"leer lassen zum Beibehalten",secretPlaceholder:"neues Secret",emailClaim:"E-Mail-Claim",emailClaimDesc:"JWT-Claim für die E-Mail-Identität. Für Azure Entra ID 'preferred_username' oder 'upn' verwenden (sendet kein email_verified). Nur vertrauenswürdige Claim-Namen verwenden.",emailClaimPlaceholder:"E-Mail",emailClaimCustomClaimAutoLinkWarning:"Benutzerdefinierte Claims sind für die Auto-Verknüpfung nur sicher, wenn der Wert vom Mandanten verwaltet wird (z. B. Azure Entra ID upn / preferred_username). Aktiviere Auto-Verknüpfung nicht, wenn dein IdP Benutzern erlaubt, diesen Claim selbst zu setzen.",requireEmailVerified:"E-Mail-Verifizierung erforderlich",requireEmailVerifiedDesc:"E-Mail-Claim nur akzeptieren, wenn der Provider ihn als verifiziert markiert.",requireEmailVerifiedWarning:"Warnung: E-Mail wird auch ohne Verifizierung akzeptiert. Nur bei vertrauenswürdigen Providern verwenden.",requireEmailVerifiedAutoLink:"Auto-Verknüpfung zuerst deaktivieren, um diese Einstellung zu ändern.",defaultGroup:"Standardgruppe",defaultGroupDesc:"Gruppe, der automatisch erstellte Benutzer zugewiesen werden. Fallback auf Viewers, wenn nicht gesetzt.",defaultGroupViewersFallback:"Viewers (Standard)"}},encryption:{title:"MFA-Verschlüsselungsstatus",enabledFromEnv:"At-Rest-Verschlüsselung aktiv (Schlüssel aus Umgebungsvariable MFA_ENCRYPTION_KEY)",enabledFromFile:"At-Rest-Verschlüsselung aktiv (Schlüssel aus dem Datenverzeichnis geladen)",enabledGenerated:"At-Rest-Verschlüsselung aktiv mit automatisch generiertem Schlüssel",notConfigured:"At-Rest-Verschlüsselung nicht konfiguriert",notConfiguredDesc:"TOTP-Geheimnisse und OIDC-Client-Secrets werden im Klartext gespeichert. Setze MFA_ENCRYPTION_KEY oder starte Bambuddy mit beschreibbarem Datenverzeichnis neu, damit ein Schlüssel automatisch erzeugt wird.",allEncrypted:"Alle MFA-Geheimnisse sind verschlüsselt gespeichert.",legacyRowsLabel:"Klartext-Zeilen (Altbestand)",encryptedRowsLabel:"Verschlüsselte Zeilen",legacyRowsWarning:"{{count}} Klartext-Zeile(n) erkannt. Den OIDC-Provider neu speichern oder den Authenticator des Benutzers neu einrichten, um die Daten verschlüsselt abzulegen.",backupHint:"Der automatisch erzeugte Schlüssel liegt unter DATA_DIR/.mfa_encryption_key und wird in lokalen Backup-ZIPs mitgesichert. Backups sicher aufbewahren oder MFA_ENCRYPTION_KEY explizit setzen.",decryptionBrokenTitle:"Verschlüsselungsschlüssel fehlt",decryptionBrokenError:"{{count}} verschlüsselte Datensätze können nicht entschlüsselt werden, weil der Schlüssel nicht mehr verfügbar ist. Den vorherigen MFA_ENCRYPTION_KEY oder DATA_DIR/.mfa_encryption_key wiederherstellen.",migrationErrorWarning:"{{count}} Legacy-Eintrag/Einträge konnten beim Start nicht verschlüsselt werden. Prüfen Sie die Server-Logs und starten Sie Bambuddy neu."}},notification:{printStarted:{title:"Druck gestartet",body:"{{printer}}: {{filename}} wird gedruckt"},printCompleted:{title:"Druck abgeschlossen",body:"{{printer}}: {{filename}} erfolgreich abgeschlossen"},printFailed:{title:"Druck fehlgeschlagen",body:"{{printer}}: {{filename}} ist fehlgeschlagen"},printStopped:{title:"Druck gestoppt",body:"{{printer}}: {{filename}} wurde gestoppt"},printProgress:{title:"Druckfortschritt",body:"{{printer}}: {{filename}} ist zu {{percent}}% abgeschlossen"},printerOffline:{title:"Drucker offline",body:"{{printer}} ist offline"},printerError:{title:"Druckerfehler",body:"{{printer}} – {{error}}"},filamentLow:{title:"Filament niedrig",body:"{{printer}}: Filament geht zur Neige"},maintenanceDue:{title:"Wartung fällig",body:"{{printer}}: {{items}} benötigen Aufmerksamkeit"}},errors:{generic:"Etwas ist schiefgelaufen",networkError:"Netzwerkfehler. Bitte überprüfen Sie Ihre Verbindung.",notFound:"Nicht gefunden",unauthorized:"Nicht autorisiert",serverError:"Serverfehler",validationError:"Bitte überprüfen Sie Ihre Eingabe",printerConnectionFailed:"Verbindung zum Drucker fehlgeschlagen",saveFailed:"Speichern fehlgeschlagen",deleteFailed:"Löschen fehlgeschlagen",loadFailed:"Laden der Daten fehlgeschlagen"},hmsErrors:{title:"Fehler - {{name}}",noErrors:"Keine Fehler",viewOnWiki:"Im Bambu Lab Wiki ansehen",clearInstructions:"Löschen Sie die Fehler am Drucker, um sie hier zu entfernen.",clearErrors:"Fehler löschen",clearSuccess:"HMS-Fehler gelöscht",clearFailed:"HMS-Fehler konnten nicht gelöscht werden"},mqttDebug:{title:"MQTT-Debug-Protokoll",searchPlaceholder:"Topic oder Payload suchen...",noMessages:"Noch keine Nachrichten protokolliert",startLoggingHint:'Klicken Sie auf "Protokollierung starten", um MQTT-Nachrichten aufzuzeichnen',noMessagesMatch:"Keine Nachrichten entsprechen Ihrem Filter",adjustFilterHint:"Versuchen Sie, Ihre Such- oder Filterkriterien anzupassen",incoming:"Eingehend",outgoing:"Ausgehend",loggingStopped:"Protokollierung gestoppt",loggingActive:"Protokollierung aktiv - Nachrichten werden automatisch aktualisiert",startLogging:"Protokollierung starten",stopLogging:"Protokollierung stoppen",clearLog:"Protokoll löschen",topic:"Thema",timestamp:"Zeitstempel",direction:"Richtung",all:"Alle"},printerFiles:{title:"Dateimanager",storageUsed:"Belegt:",storageFree:"Frei:",filterPlaceholder:"Dateien filtern...",deleteButton:"Löschen",deleteFiles:"{{count}} Dateien löschen",deleteFileConfirm:'"{{name}}" löschen? Dies kann nicht rückgängig gemacht werden.',deleteFilesConfirm:"{{count}} ausgewählte Dateien löschen? Dies kann nicht rückgängig gemacht werden.",noFiles:"Keine Dateien auf dem Drucker",loadingFiles:"Dateien werden geladen...",failedToLoad:"Dateien konnten nicht geladen werden",toast:{filesDeleted:"{{count}} Datei(en) gelöscht",deleteFailed:"Löschen fehlgeschlagen: {{error}}"}},confirm:{delete:"Möchten Sie dies wirklich löschen?",unsavedChanges:"Sie haben ungespeicherte Änderungen. Möchten Sie wirklich verlassen?",clearQueue:"Möchten Sie die Warteschlange wirklich leeren?"},login:{title:"Bambuddy Anmeldung",subtitle:"Melden Sie sich bei Ihrem Konto an",username:"Benutzername",usernamePlaceholder:"Benutzername eingeben",usernameOrEmail:"Benutzername oder E-Mail",usernameOrEmailPlaceholder:"Benutzername oder @ E-Mail",password:"Passwort",passwordPlaceholder:"Passwort eingeben",signIn:"Anmelden",signingIn:"Anmeldung läuft...",rememberMe:"Angemeldet bleiben",forgotPassword:"Passwort vergessen?",loginSuccess:"Erfolgreich angemeldet",loginFailed:"Anmeldung fehlgeschlagen",enterCredentials:"Bitte Benutzername und Passwort eingeben",enterEmail:"Bitte geben Sie Ihre E-Mail-Adresse ein",oidcLoginFailed:"OIDC-Anmeldung fehlgeschlagen",oidcErrors:{providerError:"Der Identity-Provider hat einen Fehler zurückgegeben",missingParameters:"Dem OIDC-Callback fehlen erforderliche Parameter",invalidState:"OIDC-State ist ungültig oder wurde bereits verwendet",stateExpired:"OIDC-Sitzung abgelaufen — bitte erneut versuchen",providerNotFound:"OIDC-Provider nicht gefunden",discoveryFailed:"OIDC-Discovery-Dokument konnte nicht abgerufen werden",invalidDiscovery:"OIDC-Discovery-Dokument ist ungültig",networkError:"Netzwerkfehler beim OIDC-Token-Austausch",badResponse:"Unerwartete Antwort beim OIDC-Token-Austausch",noIdToken:"OIDC-Provider hat kein ID-Token zurückgegeben",validationFailed:"OIDC-Token-Validierung fehlgeschlagen",nonceMismatch:"OIDC-Nonce stimmt nicht überein — möglicher Replay-Angriff",missingSubClaim:"OIDC-Token enthält keinen Sub-Claim",noLinkedAccount:"Kein lokales Konto mit dieser OIDC-Identität verknüpft",accountInactive:"Ihr Konto ist inaktiv",userResolutionFailed:"Ihr Konto konnte nicht aufgelöst werden",internalError:"Interner Fehler beim OIDC-Login",tokenExchangeFailed:"OIDC-Token-Austausch fehlgeschlagen"},forgotPasswordTitle:"Passwort vergessen",forgotPasswordMessage:"Wenn Sie Ihr Passwort vergessen haben, wenden Sie sich bitte an Ihren Systemadministrator.",forgotPasswordEmailMessage:"Geben Sie Ihre E-Mail-Adresse ein und wir senden Ihnen ein neues Passwort.",emailAddress:"E-Mail-Adresse",emailPlaceholder:"ihre.email@beispiel.de",cancel:"Abbrechen",sending:"Wird gesendet...",sendResetEmail:"Zurücksetzungs-E-Mail senden",howToReset:"So setzen Sie Ihr Passwort zurück:",resetStep1:"Kontaktieren Sie Ihren Bambuddy-Administrator",resetStep2:"Bitten Sie ihn, Ihr Passwort in der Benutzerverwaltung zurückzusetzen",resetStep3:"Er kann ein neues temporäres Passwort für Sie festlegen",resetStep4:"Melden Sie sich mit dem neuen Passwort an und ändern Sie es in den Einstellungen",gotIt:"Verstanden",resetPassword:{title:"Neues Passwort festlegen",subtitle:"Geben Sie unten Ihr neues Passwort ein und bestätigen Sie es.",newPassword:"Neues Passwort",newPasswordPlaceholder:"Mindestens 8 Zeichen",confirmPassword:"Passwort bestätigen",confirmPasswordPlaceholder:"Neues Passwort wiederholen",saving:"Wird gespeichert…",submit:"Neues Passwort festlegen",backToLogin:"Zurück zur Anmeldung",passwordsDoNotMatch:"Passwörter stimmen nicht überein",passwordTooShort:"Passwort muss mindestens 8 Zeichen lang sein",resetFailed:"Passwort zurücksetzen fehlgeschlagen. Der Link ist möglicherweise abgelaufen."},twoFA:{title:"Zwei-Faktor-Authentifizierung",subtitle:"Ihr Konto ist mit 2FA geschützt. Geben Sie unten den Bestätigungscode ein.",methodAuthenticator:"Authenticator-App",methodEmail:"E-Mail-Code",methodBackup:"Wiederherstellungscode",instructionsTotp:"Öffnen Sie Ihre Authenticator-App und geben Sie den 6-stelligen Code für Bambuddy ein.",instructionsEmail:"Ein 6-stelliger Code wurde an Ihre E-Mail-Adresse gesendet. Er ist 10 Minuten gültig.",instructionsEmailNotSent:"Klicken Sie unten, um einen Bestätigungscode per E-Mail zu erhalten.",instructionsBackup:"Geben Sie einen Ihrer 8-stelligen Wiederherstellungscodes ein. Jeder Code kann nur einmal verwendet werden.",sendCodeButton:"Code per E-Mail senden",sendingCode:"Wird gesendet...",resendCode:"Code erneut senden",codeLabel:"Bestätigungscode",backupCodeLabel:"Wiederherstellungscode",codePlaceholder:"000000",backupCodePlaceholder:"XXXXXXXX",verifyButton:"Bestätigen",verifyingButton:"Wird überprüft...",backToLogin:"← Zurück zur Anmeldung",orContinueWith:"oder anmelden mit",signInWith:"Anmelden mit {{provider}}",enterCode:"Bitte geben Sie den Bestätigungscode ein",sendCodeFailed:"Bestätigungscode konnte nicht gesendet werden",invalidCode:"Ungültiger Code. Bitte erneut versuchen."}},setup:{title:"Bambuddy Einrichtung",subtitle:"Konfigurieren Sie die Authentifizierung für Ihre Bambuddy-Instanz",enableAuth:"Authentifizierung aktivieren",adminAccount:"Admin-Konto",adminAccountDesc:"Wenn bereits Admin-Benutzer existieren, wird die Authentifizierung mit den vorhandenen Admin-Konten aktiviert. Lassen Sie die Felder unten leer, um vorhandene Admins zu verwenden, oder geben Sie neue Anmeldedaten ein, um einen neuen Admin-Benutzer zu erstellen.",adminUsername:"Admin-Benutzername",adminPassword:"Admin-Passwort",optionalIfAdminExists:"(optional, wenn Admin-Benutzer existieren)",adminUsernamePlaceholder:"Admin-Benutzernamen eingeben (optional)",adminPasswordPlaceholder:"Admin-Passwort eingeben (optional)",confirmPassword:"Passwort bestätigen",confirmPasswordPlaceholder:"Admin-Passwort bestätigen",settingUp:"Einrichtung läuft...",completeSetup:"Einrichtung abschließen",toast:{authEnabledAdminCreated:"Authentifizierung aktiviert und Admin-Benutzer erstellt",authEnabledExistingAdmins:"Authentifizierung mit vorhandenen Admin-Benutzern aktiviert",setupCompleted:"Einrichtung abgeschlossen",enterBothCredentials:"Bitte geben Sie sowohl Admin-Benutzernamen als auch Passwort ein, oder lassen Sie beide leer, um vorhandene Admin-Benutzer zu verwenden",passwordsDoNotMatch:"Passwörter stimmen nicht überein",passwordTooShort:"Passwort muss mindestens 6 Zeichen lang sein"}},changePassword:{title:"Passwort ändern",currentPassword:"Aktuelles Passwort",currentPasswordPlaceholder:"Aktuelles Passwort eingeben",newPassword:"Neues Passwort",newPasswordPlaceholder:"Neues Passwort eingeben (min. 6 Zeichen)",confirmPassword:"Neues Passwort bestätigen",confirmPasswordPlaceholder:"Neues Passwort bestätigen",passwordsDoNotMatch:"Passwörter stimmen nicht überein",passwordTooShort:"Passwort muss mindestens 6 Zeichen lang sein",changing:"Wird geändert...",success:"Passwort erfolgreich geändert",failed:"Passwortänderung fehlgeschlagen"},plateAlert:{title:"Druck pausiert!",message:"Objekte auf dem Druckbett erkannt. Der Druck wurde automatisch pausiert. Bitte räumen Sie das Druckbett und setzen Sie den Druck fort.",understand:"Verstanden"},camera:{title:"Kameraansicht",invalidPrinterId:"Ungültige Drucker-ID",live:"Live",snapshot:"Schnappschuss",restartStream:"Stream neu starten",refreshSnapshot:"Schnappschuss aktualisieren",fullscreen:"Vollbild",exitFullscreen:"Vollbild beenden",connectingToCamera:"Verbinde mit Kamera...",capturingSnapshot:"Schnappschuss wird aufgenommen...",connectionLost:"Verbindung verloren",connectionFailed:"Kameraverbindung fehlgeschlagen",reconnecting:"Neuverbindung in {{countdown}}s... (Versuch {{attempt}}/{{max}})",reconnectNow:"Jetzt verbinden",cameraUnavailable:"Kamera nicht verfügbar",cameraUnavailableDesc:"Stellen Sie sicher, dass der Drucker eingeschaltet und verbunden ist.",noCamera:"Keine Kamera verfügbar",retry:"Erneut versuchen",cameraStream:"Kamera-Stream",zoomOut:"Verkleinern",zoomIn:"Vergrößern",resetZoom:"Zoom zurücksetzen",recording:"Aufnahme",startRecording:"Aufnahme starten",stopRecording:"Aufnahme stoppen",chamberLight:"Kammerbeleuchtung umschalten",unavailable:"Kamera nicht verfügbar",diagnose:{button:"Diagnose",modalTitle:"Kamera-Diagnose",running:"Diagnose läuft...",runFailed:"Diagnose konnte nicht ausgeführt werden: {{error}}",retry:"Erneut ausführen",stage:{tcp_reachable:"Netzwerk-Erreichbarkeit",first_frame:"Bilderfassung",live_stream_active:"Live-Stream aktiv"},summary:{all_ok:"Kamera funktioniert. Die Diagnose hat alle Phasen erfolgreich abgeschlossen.",live_stream_active_healthy:"Kamera streamt gerade mit aktuellen Bildern — kein Test nötig.",printer_unreachable:"Drucker ist nicht erreichbar. Prüfe IP-Adresse, Netzwerkverbindung und ob der Drucker eingeschaltet ist.",camera_port_closed:"Drucker ist erreichbar, aber der Kamera-Port ist geschlossen. Stelle sicher, dass LAN-Modus und Entwicklermodus in den Druckereinstellungen aktiviert sind.",no_frame:"Verbindung zur Kamera hergestellt, aber keine Bilder empfangen. Versuche es erneut oder prüfe, ob die Kamera in den Druckereinstellungen aktiviert ist.",unknown_failure:"Kamera-Diagnose aus unbekanntem Grund fehlgeschlagen. Prüfe das Support-Log für Details."},meta:{protocol:"Protokoll",port:"Port",profile:"Profil"}}},groups:{title:"Gruppenverwaltung",subtitle:"Berechtigungsgruppen für Zugriffskontrolle verwalten",backToSettings:"Zurück zu Einstellungen",createGroup:"Gruppe erstellen",noPermission:"Sie haben keine Berechtigung, auf diese Seite zuzugreifen.",system:"System",noDescription:"Keine Beschreibung",usersCount:"{{count}} Benutzer",permissionsCount:"{{count}} Berechtigungen",edit:"Bearbeiten",delete:"Löschen",toast:{created:"Gruppe erfolgreich erstellt",updated:"Gruppe erfolgreich aktualisiert",deleted:"Gruppe erfolgreich gelöscht",enterGroupName:"Bitte geben Sie einen Gruppennamen ein"},modal:{editGroup:"Gruppe bearbeiten",createGroup:"Gruppe erstellen",cancel:"Abbrechen",saving:"Speichern...",creating:"Erstellen...",saveChanges:"Änderungen speichern"},form:{groupName:"Gruppenname",groupNamePlaceholder:"Gruppennamen eingeben",systemGroupWarning:"Systemgruppennamen können nicht geändert werden",description:"Beschreibung",descriptionPlaceholder:"Beschreibung eingeben (optional)",permissions:"Berechtigungen ({{count}} ausgewählt)"},deleteModal:{title:"Gruppe löschen",message:"Sind Sie sicher, dass Sie diese Gruppe löschen möchten? Benutzer in dieser Gruppe verlieren diese Berechtigungen.",confirm:"Gruppe löschen"},editor:{title:"Gruppe bearbeiten",createTitle:"Gruppe erstellen",search:"Berechtigungen suchen...",selectAll:"Alle auswählen",clearAll:"Alle abwählen",permissionsSelected:"{{count}} ausgewählt",noResults:"Keine Berechtigungen entsprechen Ihrer Suche"}},users:{title:"Benutzerverwaltung",subtitle:"Benutzer und deren Zugriff auf Ihre Bambuddy-Instanz verwalten",backToSettings:"Zurück zu Einstellungen",createUser:"Benutzer erstellen",noPermission:"Sie haben keine Berechtigung, auf diese Seite zuzugreifen.",admin:"Admin",noGroups:"Keine Gruppen",active:"Aktiv",inactive:"Inaktiv",edit:"Bearbeiten",delete:"Löschen",system:"System",noGroupsAvailable:"Keine Gruppen verfügbar",table:{username:"Benutzername",groups:"Gruppen",status:"Status",actions:"Aktionen"},toast:{created:"Benutzer erfolgreich erstellt",updated:"Benutzer erfolgreich aktualisiert",deleted:"Benutzer erfolgreich gelöscht",fillRequired:"Bitte füllen Sie alle Pflichtfelder aus",passwordsDoNotMatch:"Passwörter stimmen nicht überein",passwordTooShort:"Passwort muss mindestens 6 Zeichen lang sein",ldapProvisioned:'LDAP-Benutzer „{{username}}" bereitgestellt'},modal:{createUser:"Benutzer erstellen",editUser:"Benutzer bearbeiten",cancel:"Abbrechen",creating:"Erstellen...",saving:"Speichern...",saveChanges:"Änderungen speichern",advancedAuthSubtitle:"mit erweiterter Authentifizierung",tabsAriaLabel:"Benutzerquelle",localTab:"Lokal",ldapTab:"LDAP",ldapSearchLabel:"Verzeichnis durchsuchen",ldapSearchPlaceholder:"Benutzername, Name oder E-Mail eingeben...",ldapMinChars:"Mindestens 2 Zeichen für die Suche eingeben",ldapTypeToSearch:"Tippen, um das LDAP-Verzeichnis zu durchsuchen",ldapSearching:"Verzeichnis wird durchsucht...",ldapNoResults:"Keine passenden Benutzer im Verzeichnis",ldapSearchError:"Verzeichnissuche fehlgeschlagen. Bitte LDAP-Server-Status prüfen.",ldapAlreadyProvisioned:"Bereits bereitgestellt",ldapSelectedLabel:"Ausgewählt",ldapProvision:"Benutzer bereitstellen",ldapProvisioning:"Wird bereitgestellt...",ldapErrorProvision:"Bereitstellung fehlgeschlagen. Bitte LDAP-Server-Status prüfen und erneut versuchen."},form:{username:"Benutzername",usernamePlaceholder:"Benutzernamen eingeben",email:"E-Mail",emailPlaceholder:"benutzer@beispiel.de",password:"Passwort",passwordPlaceholder:"Passwort eingeben",confirmPassword:"Passwort bestätigen",confirmPasswordPlaceholder:"Passwort bestätigen",newPasswordPlaceholder:"Neues Passwort eingeben",confirmNewPasswordPlaceholder:"Neues Passwort bestätigen",leaveBlankToKeep:"leer lassen, um das aktuelle zu behalten",groups:"Gruppen",optional:"optional",autoGeneratedPassword:"Ein sicheres Passwort wird automatisch generiert und per E-Mail an den Benutzer gesendet.",passwordManagedByAdvancedAuth:'Das Passwort wird durch erweiterte Authentifizierung verwaltet. Verwenden Sie "Passwort zurücksetzen", um ein neues Passwort per E-Mail an den Benutzer zu senden.',resetPassword:"Passwort zurücksetzen",resettingPassword:"Passwort wird zurückgesetzt..."},deleteModal:{title:"Benutzer löschen",message:"Sind Sie sicher, dass Sie diesen Benutzer löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.",confirm:"Benutzer löschen"}},streamOverlay:{title:"Stream-Overlay",invalidPrinterId:"Ungültige Drucker-ID",cameraStream:"Kamera-Stream",progress:"Fortschritt",eta:"ETA",printerIdle:"Drucker ist inaktiv",printerOffline:"Drucker offline",status:{printing:"Druckt",paused:"Pausiert",finished:"Fertig",failed:"Fehlgeschlagen",idle:"Inaktiv",unknown:"Unbekannt"}},profiles:{title:"Profile",subtitle:"Verwalten Sie Ihre Slicer-Voreinstellungen und Druckvorschub-Kalibrierungen",tabs:{bambuCloud:"Bambu Cloud",orcaCloud:"Orca Cloud",local:"Lokale Profile",kprofiles:"K-Profile"},orcaCloud:{connectedAs:"Verbunden als",logout:"Trennen",noLogoutPermission:"Sie haben keine Berechtigung zum Trennen",noConnectPermission:"Sie haben keine Berechtigung, sich mit Orca Cloud zu verbinden",retry:"Erneut versuchen",back:"Andere Anmeldemethode verwenden",connect:{title:"Mit Orca Cloud verbinden",description:"Melden Sie sich bei Ihrem Orca Cloud-Konto an, um Ihre Slicer-Profile in Bambuddy zu synchronisieren."},providers:{google:"Mit Google anmelden",apple:"Mit Apple anmelden",github:"Mit GitHub anmelden",email:"Mit E-Mail und Passwort anmelden"},password:{title:"Mit E-Mail und Passwort anmelden",email:"E-Mail",emailPlaceholder:"sie@beispiel.de",password:"Passwort",submit:"Anmelden"},paste:{title:"Anmeldung abschließen",step1:"Ein neuer Tab wurde mit der Orca Cloud-Anmeldeseite geöffnet. Melden Sie sich mit Ihrem Orca-Konto an.",step2:'Ihr Browser wird zu einer "localhost"-URL umgeleitet, die nicht geladen werden kann. Das ist normal — die URL ist es, was wir brauchen.',step3:"Kopieren Sie die gesamte URL aus der Adressleiste Ihres Browsers und fügen Sie sie unten ein.",signInUrl:"Falls sich der Anmelde-Tab nicht geöffnet hat, klicken Sie auf diese URL:",label:"Callback-URL hier einfügen",placeholder:"http://localhost:41172/callback?code=...&state=...",submit:"Verbindung abschließen"},profiles:{title:"Ihre Orca Cloud-Profile ({{count}})",refresh:"Aktualisieren",empty:"Noch keine Profile in Ihrem Orca Cloud-Konto gefunden."},toast:{connected:"Mit Orca Cloud verbunden als {{email}}",disconnected:"Verbindung zu Orca Cloud getrennt"},errors:{startFailed:"Anmeldevorgang für Orca Cloud konnte nicht gestartet werden.",finishFailed:"Orca Cloud-Anmeldung konnte nicht abgeschlossen werden.",passwordFailed:"Anmeldung mit dieser E-Mail und diesem Passwort fehlgeschlagen.",passwordEmpty:"Bitte geben Sie sowohl E-Mail als auch Passwort ein.",emptyPaste:"Bitte fügen Sie die Callback-URL aus Ihrem Browser ein.",noCode:"Diese URL sieht nicht wie ein Orca Cloud-Callback aus (kein code-Parameter). Kopieren Sie die vollständige URL aus der Adressleiste."}},localProfiles:{title:"Lokale Profile",subtitle:"Slicer-Voreinstellungen aus OrcaSlicer importieren und verwalten",import:"Profile importieren",importDesc:".bbscfg-, .bbsflmt-, .orca_filament-, .zip- oder .json-Dateien hier ablegen",importing:"Importiere...",search:"Lokale Voreinstellungen durchsuchen...",noPresets:"Noch keine lokalen Voreinstellungen",noSearchResults:"Keine Voreinstellungen entsprechen deiner Suche",badge:"Lokal",edit:"Bearbeiten",delete:"Löschen",cancel:"Abbrechen",deleteConfirmTitle:"Voreinstellung löschen",deleteConfirm:"Möchten Sie diese Voreinstellung wirklich löschen? Dies kann nicht rückgängig gemacht werden.",source:"Quelle",inheritsFrom:"Erbt von",filamentType:"Typ",vendor:"Hersteller",compatiblePrinters:"Drucker",nozzleTemp:"Düsentemperatur",cost:"Kosten",density:"Dichte",pressureAdvance:"Druckvorschub",filament:"Filament",process:"Prozess",printer:"Drucker",toast:{importSuccess:"{{count}} Voreinstellung(en) importiert",importSkipped:"{{count}} Voreinstellung(en) übersprungen (Duplikate)",importError:"{{count}} Fehler beim Import",deleted:"Voreinstellung gelöscht",updated:"Voreinstellung aktualisiert"}},connectedAs:"Verbunden als",logout:"Abmelden",noLogoutPermission:"Sie haben keine Berechtigung zum Abmelden",failedToLoad:"Profile konnten nicht geladen werden",retry:"Erneut versuchen",time:{justNow:"Gerade eben",minsAgo:"vor {{count}}m",hoursAgo:"vor {{count}}h",daysAgo:"vor {{count}}d"},toast:{loggedOut:"Abgemeldet"},login:{title:"Mit Bambu Cloud verbinden",subtitle:"Synchronisieren Sie Ihre Slicer-Voreinstellungen geräteübergreifend",email:"E-Mail",password:"Passwort",region:"Region",regionGlobal:"Global",regionChina:"China",verificationCode:"Bestätigungscode",totpCode:"Authenticator-Code",checkEmail:"Prüfen Sie Ihre E-Mail ({{email}}) für einen 6-stelligen Code",enterTotpHint:"Geben Sie den 6-stelligen Code aus Ihrer Authenticator-App ein",accessToken:"Zugriffstoken",accessTokenHint:"Fügen Sie Ihr Bambu-Cloud-Zugriffstoken ein. Konten der Region China müssen diesen Weg nutzen (telefonnummerngebunden — kein E-Mail-Login). Im Wiki steht, wie Sie das Token aus den MakerWorld-Cookies auslesen.",back:"Zurück",loginButton:"Anmelden",verifyButton:"Bestätigen",setTokenButton:"Token setzen",useToken:"Stattdessen Zugriffstoken verwenden",useEmail:"Stattdessen mit E-Mail anmelden",toast:{loggedIn:"Erfolgreich angemeldet",codeSent:"Bestätigungscode an Ihre E-Mail gesendet",enterTotp:"Geben Sie den Code aus Ihrer Authenticator-App ein",tokenSet:"Token erfolgreich gesetzt"}},presets:{myPreset:"Mein Profil (bearbeitbar)",duplicate:"Duplizieren",editable:"Bearbeitbar",failedToLoadDetails:"Profil-Details konnten nicht geladen werden",deleteConfirm:"Dieses Profil löschen?",deleteWarning:'"{{name}}" wird dauerhaft aus Bambu Cloud gelöscht. Dies kann nicht rückgängig gemacht werden.',noDuplicatePermission:"Sie haben keine Berechtigung zum Duplizieren von Profilen",noEditPermission:"Sie haben keine Berechtigung zum Bearbeiten von Profilen",noDeletePermission:"Sie haben keine Berechtigung zum Löschen von Profilen",types:{filament:"Filament-Profil",printer:"Drucker-Profil",process:"Prozess-Profil"},toast:{deleted:"Profil gelöscht",created:"Profil erstellt",updated:"Profil aktualisiert",duplicated:"Profil dupliziert",fieldAdded:'Feld "{{key}}" hinzugefügt',exported:"Profil exportiert"},baseLabel:"Basis: {{name}}",currentLabel:"Aktuell: {{name}}",newPreset:"Neues Profil",editPreset:"Profil bearbeiten",duplicatePreset:"Profil duplizieren",createNewPreset:"Neues Profil erstellen",customizeSettings:"Passen Sie die Einstellungen für Ihr neues Profil an",compareWithBase:"Mit Basis-Profil vergleichen",compare:"Vergleichen",basePreset:"Basis-Profil",selectBasePreset:"Basis-Profil auswählen...",presetName:"Profilname",myCustomPreset:"Mein eigenes Profil",inheritsFrom:"Erbt von",dropJsonToImport:"JSON zum Importieren ablegen",tabs:{common:"Allgemein",allFields:"Alle Felder"},availableFields:"Verfügbare Felder",searchFieldsPlaceholder:"Felder suchen...",noMatchingFields:"Keine passenden Felder",allFieldsAdded:"Alle Felder hinzugefügt",addCustomField:"Eigenes Feld hinzufügen",yourOverrides:"Ihre Überschreibungen",noOverridesYet:"Noch keine Überschreibungen",clickFieldsToAdd:"Klicken Sie links auf Felder, um sie hinzuzufügen",saveAsTemplate:"Als Vorlage speichern",jsonTip:"Tipp: Ziehen Sie eine .json-Datei auf dieses Fenster, um Einstellungen zu importieren"},cloudView:{searchPlaceholder:"Profile suchen...",templates:"Vorlagen",refresh:"Aktualisieren",newPreset:"Neues Profil",clearFilters:"Filter zurücksetzen",compareMode:"Vergleichsmodus",selectAnotherPreset:"Wählen Sie ein weiteres {{type}}-Profil",clickTwoPresets:"Klicken Sie auf zwei Profile des gleichen Typs zum Vergleichen",selectFirst:"1. Erstes auswählen",selectSecond:"2. Zweites auswählen",compareNow:"Jetzt vergleichen",lastSynced:"Zuletzt synchronisiert:",showingCount:"{{showing}} von {{total}} Profilen",noPresetsFound:"Keine Profile gefunden",columns:{filament:"Filament",process:"Prozess",printer:"Drucker"},noFilamentPresets:"Keine Filament-Profile",noProcessPresets:"Keine Prozess-Profile",noPrinterPresets:"Keine Drucker-Profile",filters:{type:"Typ",owner:"Besitzer",printer:"Drucker",nozzle:"Düse",filament:"Filament",layer:"Schicht",all:"Alle",myPresets:"Meine Profile",builtIn:"Voreingestellt",process:"Prozess"},noTemplatesPermission:"Sie haben keine Berechtigung, Vorlagen zu verwalten",noRefreshPermission:"Sie haben keine Berechtigung, Profile zu aktualisieren",noCreatePermission:"Sie haben keine Berechtigung, Profile zu erstellen"},templates:{title:"Schnellvorlagen",noTemplates:"Noch keine Vorlagen",createFirst:"Erstellen Sie Vorlagen aus dem Preset-Editor",typeFilter:"Typ:",deleteTitle:"Vorlage löschen",deleteWarning:"Diese Aktion kann nicht rückgängig gemacht werden",deleteConfirm:'Möchten Sie "{{name}}" wirklich löschen?',namePlaceholder:"Vorlagenname",descriptionPlaceholder:"Beschreibung",settingsJson:"Einstellungen (JSON)",fieldsCount:"{{count}} Felder",shownInModals:"In Dialogen angezeigt",hiddenInModals:"In Dialogen ausgeblendet",apply:"Anwenden",toast:{deleted:"Vorlage gelöscht",updated:"Vorlage aktualisiert",created:"Vorlage erstellt",applied:"Vorlage angewendet"}}},support:{debugLoggingActive:"Debug-Protokollierung ist aktiv",manageLogs:"Verwalten",collectItem7:"Drucker-Verbindungsstatus und Firmware-Versionen",collectItem8:"Integrationsstatus (Spoolman, MQTT, HA)",collectItem9:"Netzwerkschnittstellen (nur Subnetze)",collectItem10:"Python-Paketversionen",collectItem11:"Datenbankzustandsprüfungen",collectItem12:"Docker-Umgebungsdetails",bundleGenerating:"Bundle wird erstellt...",bundleStepConnection:"Drucker-Verbindungsprüfungen werden ausgeführt",bundleStepVirtualPrinters:"Setup-Prüfungen für virtuelle Drucker werden ausgeführt",bundleStepLogScan:"Aktuelle Protokolle werden auf bekannte Probleme überprüft",bundleStepBuild:"Support-Bundle-ZIP wird erstellt"},fileManager:{title:"Dateimanager",subtitle:"Organisieren und verwalten Sie Ihre Druckdateien",uploadFiles:"Dateien hochladen",newFolder:"Neuer Ordner",folderName:"Ordnername",folderNamePlaceholder:"z.B. Funktionsteile",renameFile:"Datei umbenennen",renameFolder:"Ordner umbenennen",invalidFilenameChar:'Das Zeichen "{{char}}" ist in Druck-Dateinamen nicht erlaubt. Die SD-Karte des Druckers lehnt folgende Zeichen ab: < > : " / \\ | ? *',moveFiles:"{{count}} Datei(en) verschieben",rootNoFolder:"Stammverzeichnis (Kein Ordner)",current:"aktuell",linkFolder:"Ordner verknüpfen",linkFolderDescription:'"{{name}}" mit einem Projekt oder Archiv verknüpfen für schnellen Zugriff.',project:"Projekt",archive:"Archiv",noProjectsFound:"Keine Projekte gefunden",noArchivesFound:"Keine Archive gefunden",unlink:"Verknüpfung aufheben",link:"Verknüpfen",dragDropFiles:"Dateien hierher ziehen",dropFilesHere:"Dateien hier ablegen",orClickToBrowse:"oder klicken zum Durchsuchen",allFileTypesSupported:"Alle Dateitypen werden unterstützt. ZIP-Dateien werden extrahiert.",zipFilesDetected:"ZIP-Dateien erkannt",zipExtractOptions:"ZIP-Dateien werden extrahiert. Wählen Sie, wie die Ordnerstruktur behandelt werden soll:",preserveZipStructure:"Ordnerstruktur aus ZIP beibehalten",createFolderFromZip:"Ordner aus ZIP-Dateiname erstellen",stlThumbnailGeneration:"STL-Vorschaubildgenerierung",zipMayContainStl:"ZIP-Dateien können STL-Dateien enthalten. Vorschaubilder können während der Extraktion generiert werden.",thumbnailsCanBeGenerated:"Vorschaubilder können für STL-Dateien generiert werden. Große Modelle benötigen möglicherweise mehr Zeit.",generateThumbnailsForStl:"Vorschaubilder für STL-Dateien generieren",threemfDetected:"3MF-Dateien erkannt",threemfExtractionInfo:"Druckermodell, Material, Farbe und Druckeinstellungen werden automatisch aus 3MF-Dateien extrahiert.",willBeExtracted:"Wird extrahiert",filesExtracted:"{{count}} Dateien extrahiert",uploadComplete:"Upload abgeschlossen: {{succeeded}} erfolgreich",uploadFailed:"Hochladen fehlgeschlagen",zipFilesFailed:"{{count}} Dateien fehlgeschlagen",uploading:"Hochladen...",changeLink:"Verknüpfung ändern...",linkTo:"Verknüpfen mit...",linkToProjectOrArchive:"Mit Projekt oder Archiv verknüpfen",addToQueue:"Zur Warteschlange",schedulePrint:"Planen",generateThumbnail:"Vorschaubild generieren",generateThumbnails:"Vorschaubilder generieren",generateThumbnailsForMissing:"Vorschaubilder für STL-Dateien ohne Vorschau generieren",gridView:"Rasteransicht",listView:"Listenansicht",lowDiskSpaceWarning:"Warnung: Wenig Speicherplatz",lowDiskSpaceDetails:"Nur {{free}} frei von {{total}} gesamt. Schwellenwert ist auf {{threshold}} GB eingestellt.",files:"Dateien",folders:"Ordner",size:"Größe",free:"Frei",allFiles:"Alle Dateien",allExternal:"Extern",externalIsEmpty:"Keine externen Dateien",externalEmptyDescription:"Dateien aus deinen verknüpften externen Ordnern erscheinen hier.",wrap:"Umbrechen",enableTextWrapping:"Textumbruch aktivieren",disableTextWrapping:"Textumbruch deaktivieren",collapse:"Einklappen",collapseFoldersByDefault:"Ordner standardmäßig einklappen",expandFoldersByDefault:"Ordner standardmäßig ausklappen",dragToResizeTooltip:"Ziehen zum Ändern der Größe, Doppelklick zum Zurücksetzen",searchFiles:"Dateien suchen...",allTypes:"Alle Typen",prints:"Drucke",ascending:"Aufsteigend",descending:"Absteigend",resultsCount:"{{showing}} von {{total}} Dateien",selectAll:"Alle auswählen",deselectAll:"Auswahl aufheben",selected:"{{count}} ausgewählt",adding:"Hinzufügen...",loadingFiles:"Dateien werden geladen...",folderIsEmpty:"Ordner ist leer",noFilesYet:"Noch keine Dateien",folderEmptyDescription:"Laden Sie Dateien hoch oder verschieben Sie Dateien in diesen Ordner.",noFilesDescription:"Laden Sie Dateien hoch, um Ihre Druckdateien zu organisieren.",noMatchingFiles:"Keine passenden Dateien",noMatchingFilesDescription:"Keine Dateien entsprechen Ihren aktuellen Such- oder Filterkriterien.",clearFilters:"Filter zurücksetzen",printedCount:"{{count}}x gedruckt",uploadedBy:"Hochgeladen von",deleteFolder:"Ordner löschen",deleteFile:"Datei löschen",deleteFilesCount:"{{count}} Dateien löschen",deleteFolderConfirm:"Möchten Sie diesen Ordner wirklich löschen? Alle Dateien darin werden ebenfalls gelöscht.",deleteFileConfirm:"Möchten Sie diese Datei wirklich löschen?",deleteFilesConfirm:"Möchten Sie {{count}} ausgewählte Dateien wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.",deleting:"Wird gelöscht...",noPermissionRenameFolder:"Sie haben keine Berechtigung, Ordner umzubenennen",noPermissionLinkFolder:"Sie haben keine Berechtigung, Ordner zu verknüpfen",noPermissionDeleteFolder:"Sie haben keine Berechtigung, Ordner zu löschen",noPermissionPrint:"Sie haben keine Berechtigung zum Drucken",noPermissionSlice:"Sie haben keine Berechtigung, Dateien zu slicen",noPermissionAddToQueue:"Sie haben keine Berechtigung, zur Warteschlange hinzuzufügen",noPermissionDownload:"Sie haben keine Berechtigung, Dateien herunterzuladen",noPermissionRenameFile:"Sie haben keine Berechtigung, diese Datei umzubenennen",noPermissionGenerateThumbnail:"Sie haben keine Berechtigung, Vorschaubilder zu generieren",noPermissionDeleteFile:"Sie haben keine Berechtigung, diese Datei zu löschen",noPermissionCreateFolder:"Sie haben keine Berechtigung, Ordner zu erstellen",noPermissionUpload:"Sie haben keine Berechtigung, Dateien hochzuladen",noPermissionMoveFiles:"Sie haben keine Berechtigung, Dateien zu verschieben",noPermissionDeleteFiles:"Sie haben keine Berechtigung, Dateien zu löschen",linkExternal:"Extern verknüpfen",linkExternalFolder:"Externen Ordner verknüpfen",linkExternalFolderDescription:"Ein Host-Verzeichnis (NAS, USB, Netzlaufwerk) in den Dateimanager einbinden. Dateien werden nicht kopiert — sie werden direkt vom Originalpfad gelesen.",externalFolderNamePlaceholder:"z.B. NAS-Drucke",externalPath:"Host-Pfad",externalPathHelp:"Absoluter Pfad zum Verzeichnis auf dem Docker-Host. Muss als Bind-Mount in den Container eingebunden sein.",readOnly:"Nur Lesen",readOnlyHelp:"verhindert Uploads und Löschungen",showHiddenFiles:"Versteckte Dateien anzeigen (Punkt-Dateien)",externalFolder:"Externer Ordner",scanFolder:"Scannen",toast:{folderCreated:"Ordner erstellt",folderDeleted:"Ordner gelöscht",fileDeleted:"Datei gelöscht",filesDeleted:"{{count}} Dateien gelöscht",filesMoved:"Dateien verschoben",folderLinked:"Ordner verknüpft",folderUnlinked:"Ordnerverknüpfung aufgehoben",externalFolderLinked:"Externer Ordner verknüpft und gescannt",folderScanned:"Scan abgeschlossen: {{added}} hinzugefügt, {{removed}} entfernt",addedToQueue:"{{count}} Datei(en) zur Warteschlange hinzugefügt",addedToQueuePartial:"{{added}} Datei(en) hinzugefügt, {{failed}} fehlgeschlagen",failedToAddToQueue:"Fehler beim Hinzufügen: {{error}}",fileRenamed:"Datei umbenannt",folderRenamed:"Ordner umbenannt",thumbnailsGenerated:"{{count}} Vorschaubild(er) generiert",thumbnailsGeneratedPartial:"{{succeeded}} Vorschaubild(er) generiert, {{failed}} fehlgeschlagen",noStlMissingThumbnails:"Keine STL-Dateien ohne Vorschaubild",failedToGenerateThumbnails:"Fehler beim Generieren der Vorschaubilder: {{error}}",thumbnailGenerated:"Vorschaubild generiert",failedToGenerateThumbnail:"Fehler beim Generieren des Vorschaubildes: {{error}}"}},projects:{title:"Projekte",subtitle:"Organisieren und verfolgen Sie Ihre 3D-Druckprojekte",newProject:"Neues Projekt",editProject:"Projekt bearbeiten",deleteProject:"Projekt löschen",projectName:"Projektname",description:"Beschreibung",noProjects:"Noch keine Projekte",noProjectsFiltered:"Keine {{status}} Projekte",noProjectsFilteredHelp:"Sie haben keine {{status}} Projekte. Projekte werden hier angezeigt, wenn sich ihr Status ändert.",createFirst:"Erstellen Sie Ihr erstes Projekt, um verwandte Drucke zu organisieren, den Fortschritt zu verfolgen und Ihre Builds zu verwalten.",createFirstButton:"Erstes Projekt erstellen",create:"Erstellen",files:"Dateien",prints:"Drucke",plates:"Platten",parts:"Teile",lastModified:"Zuletzt geändert",deleteConfirm:"Möchten Sie dieses Projekt wirklich löschen? Archive und Warteschlangenelemente werden getrennt, aber nicht gelöscht.",addFiles:"Dateien hinzufügen",removeFile:"Datei entfernen",viewDetails:"Details anzeigen",namePlaceholder:"z.B. Voron 2.4 Build",descriptionPlaceholder:"Optionale Beschreibung...",urlLabel:"URL",urlPlaceholder:"https://makerworld.com/...",urlInvalid:"URL muss mit http:// oder https:// beginnen",openExternalUrl:"Projekt-URL öffnen",coverImageLabel:"Titelbild",coverImageAlt:"Projekt-Titelbild",coverImageUpload:"Hochladen",coverImageReplace:"Ersetzen",coverImageRemove:"Entfernen",color:"Farbe",targetPlates:"Ziel-Platten",targetPlatesPlaceholder:"z.B. 25",targetPlatesHelp:"Anzahl der Druckaufträge",targetParts:"Ziel-Teile",targetPartsPlaceholder:"z.B. 150",targetPartsHelp:"Benötigte Objekte insgesamt",tagsLabel:"Tags (kommagetrennt)",tagsPlaceholder:"z.B. voron, funktional, geschenk",dueDate:"Fälligkeitsdatum",priority:"Priorität",priorityLow:"Niedrig",priorityNormal:"Normal",priorityHigh:"Hoch",priorityUrgent:"Dringend",statusActive:"Aktiv",statusCompleted:"Abgeschlossen",statusArchived:"Archiviert",done:"Fertig",completed:"abgeschlossen",failed:"fehlgeschlagen",inQueue:"in Warteschlange",noPrintsYet:"Noch keine Drucke",printJobs:"Druckaufträge (Platten)",partsPrinted:"Gedruckte Teile",failedParts:"Fehlgeschlagene Teile",import:"Importieren",export:"Exportieren",importProject:"Projekt importieren",exportAll:"Alle Projekte exportieren",loading:"Projekte werden geladen...",noEditPermission:"Sie haben keine Berechtigung, Projekte zu bearbeiten",noDeletePermission:"Sie haben keine Berechtigung, Projekte zu löschen",noCreatePermission:"Sie haben keine Berechtigung, Projekte zu erstellen",noImportPermission:"Sie haben keine Berechtigung, Projekte zu importieren",noExportPermission:"Sie haben keine Berechtigung, Projekte zu exportieren",toast:{created:"Projekt erstellt",updated:"Projekt aktualisiert",deleted:"Projekt gelöscht",imported:"Projekt importiert",multipleImported:"{{count}} Projekte importiert",importFailed:"Import fehlgeschlagen",exported:"Projekte exportiert (nur Metadaten)"}},projectDetail:{notFound:"Projekt nicht gefunden",backToProjects:"Zurück zu Projekten",export:"Exportieren",exportProject:"Projekt exportieren",noExportPermission:"Sie haben keine Berechtigung, Projekte zu exportieren",noEditPermission:"Sie haben keine Berechtigung, Projekte zu bearbeiten",partOf:"Teil von:",priorityLabel:"Priorität:",noPrints:"Noch keine Drucke in diesem Projekt",status:{active:"Aktiv",completed:"Abgeschlossen",archived:"Archiviert"},priority:{low:"Niedrig",normal:"Normal",high:"Hoch",urgent:"Dringend"},dueDate:{overdue:"Überfällig",today:"Heute fällig",daysLeft:"{{count}} Tage übrig"},progress:{platesProgress:"Platten-Fortschritt",partsProgress:"Teile-Fortschritt",printJobs:"Druckaufträge",parts:"Teile",percentComplete:"{{percent}}% abgeschlossen",remaining:"{{count}} verbleibend"},stats:{printJobs:"Druckaufträge",total:"gesamt",failed:"{{count}} fehlgeschlagen",partsPrinted:"{{count}} Teile gedruckt",printTime:"Druckzeit",filamentUsed:"Filament verbraucht"},cost:{title:"Kostenverfolgung",filamentCost:"Filamentkosten",energy:"Energie",totalCost:"Gesamtkosten",total:"Gesamt",includesBom:"inkl. Stückliste",budget:"Budget",remaining:"Verbleibend"},subProjects:{title:"Unterprojekte ({{count}})"},notes:{title:"Notizen",noEditPermission:"Sie haben keine Berechtigung, Notizen zu bearbeiten",placeholder:"Notizen zu diesem Projekt hinzufügen...",empty:"Noch keine Notizen. Klicken Sie auf Bearbeiten, um Notizen hinzuzufügen."},files:{title:"Dateien",linkFolders:"Ordner aus dem Dateimanager verknüpfen",forQuickAccess:"für schnellen Zugriff auf dieses Projekt.",fileCount:"{{count}} Datei(en)",empty:"Keine Ordner verknüpft. Gehen Sie zum Dateimanager und verknüpfen Sie einen Ordner mit diesem Projekt.",noFiles:"Keine Dateien in diesem Ordner.",print:"Jetzt drucken",addToQueue:"Zur Warteschlange"},bom:{title:"Stückliste",acquired:"{{completed}}/{{total}} beschafft",showAll:"Alle anzeigen",hideDone:"Erledigte ausblenden",addPart:"Teil hinzufügen",noAddPermission:"Sie haben keine Berechtigung, Teile hinzuzufügen",partNamePlaceholder:"Teilename (z.B. M3x8 Schrauben)",partName:"Teilename",qty:"Menge",price:"Preis ({{currency}})",sourcingUrlPlaceholder:"Bezugsquelle-URL (optional)",remarksPlaceholder:"Bemerkungen (optional)",deletePart:"Teil löschen",deleteConfirm:'Möchten Sie "{{name}}" wirklich löschen?',noUpdatePermission:"Sie haben keine Berechtigung, Teile zu aktualisieren",noEditPermission:"Sie haben keine Berechtigung, Teile zu bearbeiten",noDeletePermission:"Sie haben keine Berechtigung, Teile zu löschen",totalCost:"Gesamtkosten:",empty:"Keine Teile in der Stückliste. Fügen Sie Hardware, Elektronik oder andere Komponenten hinzu, um zu verfolgen, was beschafft werden muss."},timeline:{title:"Aktivitätsverlauf",empty:"Noch keine Aktivität."},template:{saveAsTemplate:"Als Vorlage speichern",noCreatePermission:"Sie haben keine Berechtigung, Vorlagen zu erstellen"},queue:{title:"Warteschlange",viewAll:"Alle anzeigen",printing:"{{count}} druckend",queued:"{{count}} in Warteschlange"},prints:{title:"Drucke ({{count}})"},toast:{projectUpdated:"Projekt aktualisiert",partAdded:"Teil hinzugefügt",partRemoved:"Teil entfernt",exportFailed:"Export fehlgeschlagen",projectExported:"Projekt exportiert",templateCreated:"Vorlage erstellt"}},system:{title:"Systeminformationen",version:"Version",uptime:"Laufzeit",cpuUsage:"CPU-Auslastung",memoryUsage:"Speicherauslastung",diskUsage:"Festplattenauslastung",networkInfo:"Netzwerkinformationen",logs:"Protokolle",debugMode:"Debug-Modus",enableDebug:"Debug-Protokollierung aktivieren",disableDebug:"Debug-Protokollierung deaktivieren",downloadLogs:"Protokolle herunterladen",clearLogs:"Protokolle löschen",dockerInfo:"Docker-Info",containerName:"Container-Name",imageName:"Image-Name",platform:"Plattform",architecture:"Architektur"},library:{title:"Filament-Bibliothek",addFilament:"Filament hinzufügen",editFilament:"Filament bearbeiten",deleteFilament:"Filament löschen",vendor:"Hersteller",material:"Material",color:"Farbe",kFactor:"K-Faktor",temperature:"Temperatur",noFilaments:"Keine Filamente in der Bibliothek",deleteConfirm:"Möchten Sie dieses Filament wirklich löschen?",importFromPrinter:"Vom Drucker importieren",exportToFile:"In Datei exportieren"},slice:{title:"Modell slicen",action:"Slicen",actionAll:"Alle {{count}} Plates slicen",actionAllTitle:"Alle Plates in eine einzelne Multi-Plate-Ausgabe slicen (ein Archiv). Die Filamentauswahl gilt für jeden Slot des Projekts.",allPlatesToggle:"Alle {{count}} Plates slicen",slicing:"Slicen…",printer:"Drucker-Profil",process:"Prozess-Profil",filament:"Filament-Profil",filamentSlot:"Filament {{index}} – {{type}}",selectPreset:"— Profil auswählen —",loadingPresets:"Profile werden geladen…",analyzingPlateFilaments:"Plattenfilamente werden analysiert…",analyzingPlateFilamentsHint:"Es wird ein Probeschnitt ausgeführt, um die belegten AMS-Slots dieser Platte zu ermitteln. Wird zwischengespeichert — erneutes Öffnen ist sofort.",previewToast:"{{name}} wird analysiert — {{elapsed}}",previewWithProgress:"{{name}} wird analysiert — {{stage}} ({{percent}}%) — {{elapsed}}",notUsedByPlate:"— wird von dieser Platte nicht verwendet",noPresetsForSlot:"Keine Profile verfügbar",otherPrinters:"Andere Drucker",presetsLoadFailed:"Profile konnten nicht geladen werden. Importiere sie zuerst unter Einstellungen → Profile.",refreshPresets:"Aktualisieren",refreshPresetsTitle:"Profile neu laden — die aktuellen Cloud- und Bundle-Listen abrufen (nach dem Löschen eines Profils in Bambu Studio oder Bambu Handy verwenden)",allPresetsRequired:"Alle Profile müssen ausgewählt sein",bundle:"Slicer-Bundle",bundleNone:"— Keines (Profile einzeln auswählen) —",bundleAllRequired:"Bundle-Prozess und jeder Filament-Slot müssen ausgewählt sein",enqueuing:"Slice-Auftrag wird übermittelt…",queued:"In Warteschlange…",failed:"Slicen fehlgeschlagen. Logs des Slicer-Sidecars prüfen.",startedToast:"{{name}} wird im Hintergrund gesliced…",queuedToast:"Warteschlange: {{name}} — {{elapsed}}",runningToast:"{{name}} wird gesliced — {{elapsed}}",runningWithProgress:"{{name}} – {{stage}} ({{percent}} %) – {{elapsed}}",runningWithProgressMultiPlate:"Plate {{plateIndex}} von {{plateCount}} • {{name}} – {{stage}} ({{percent}} %) – {{elapsed}}",completedToast:"{{name}} wurde gesliced",failedTitle:"Slicen fehlgeschlagen",failedToast:"Slicen von {{name}} fehlgeschlagen: {{detail}}",tier:{local:"Importiert",cloud:"Bambu Cloud",orcaCloud:"Orca Cloud",standard:"Standard"},cloud:{notAuthenticated:"In Bambu Cloud anmelden (Einstellungen → Profile → Bambu Cloud), um deine Cloud-Profile zu sehen.",expired:"Bambu-Cloud-Sitzung abgelaufen — erneut anmelden, um die Cloud-Profile zu aktualisieren.",unreachable:"Bambu Cloud ist gerade nicht erreichbar. Lokale und Standard-Profile funktionieren weiterhin."},orcaCloud:{notAuthenticated:"Bei Orca Cloud anmelden (Profile → Orca Cloud), um Ihre Orca-Profile zu sehen.",expired:"Orca Cloud-Sitzung abgelaufen — erneut anmelden, um die Orca-Profile zu aktualisieren.",unreachable:"Orca Cloud ist derzeit nicht erreichbar. Andere Profile funktionieren weiterhin."},bedType:{label:"Druckbett",auto:"Auto (aus Prozess-Profil)",coolPlate:"Cool Plate",coolPlateSuperTack:"Cool Plate SuperTack",engineering:"Engineering Plate",highTemp:"High Temp Plate",texturedPEI:"Textured PEI Plate",smoothPEI:"Smooth PEI Plate"}},spoolman:{title:"Spoolman-Integration",enabled:"Spoolman aktiviert",url:"Spoolman URL",connected:"Verbunden",disconnected:"Nicht verbunden",testConnection:"Verbindung testen",sync:"Synchronisieren",syncing:"Synchronisiert...",lastSync:"Letzte Synchronisierung",linkToSpoolman:"Mit Spoolman verknüpfen",openInSpoolman:"In Spoolman öffnen",unlinkSpool:"Spule trennen",unlinkConfirmTitle:"Spule entfernen?",unlinkConfirmMessage:"Die Spule wird vom Slot entfernt. Die Spulendaten selbst bleiben unverändert.",selectSpool:"Spule auswählen",noUnlinkedSpools:"Keine nicht zugewiesenen Spulen verfügbar",linkSuccess:"Spule erfolgreich zugewiesen",linkFailed:"Spule konnte nicht zugewiesen werden",unlinkSuccess:"Spule erfolgreich entfernt",unlinkFailed:"Spule konnte nicht entfernt werden",linkedSpool:"Zugewiesene Spule",spoolId:"Spulen-ID",fillSourceLabel:"(Spoolman)",weight:"Gewicht",remaining:"Verbleibend",disableWeightSync:"AMS-Gewichtsschätzung deaktivieren",disableWeightSyncDesc:"Verbleibende Kapazität nicht aus AMS-Schätzungen aktualisieren. Verwenden Sie dies, wenn Sie die Verbrauchserfassung von Spoolman gegenüber den prozentualen AMS-Schätzungen bevorzugen. Neue Spulen verwenden weiterhin die AMS-Schätzung als Anfangsgewicht.",reportPartialUsage:"Teilverbrauch bei fehlgeschlagenen Drucken melden",reportPartialUsageDesc:"Wenn ein Druck fehlschlägt oder abgebrochen wird, den geschätzten Filamentverbrauch bis zu diesem Zeitpunkt basierend auf dem Schichtfortschritt melden."},inventory:{title:"Spulen-Inventar",subtitle:"Verwalten Sie Ihre Spulen",spoolmanMixedContentTitle:"Spoolman lässt sich nicht über HTTPS laden — Browser blockiert gemischte Inhalte",spoolmanMixedContentBody:"Bambuddy wird über HTTPS ausgeliefert (über deinen Reverse-Proxy), aber deine Spoolman-URL ist nach wie vor HTTP. Browser blockieren gemischte Inhalte aus Sicherheitsgründen, daher kann die eingebettete Spoolman-Oberfläche nicht geladen werden. Spoolman muss ebenfalls über HTTPS erreichbar sein.",spoolmanMixedContentFixReverseProxy:"Stelle Spoolman hinter denselben Reverse-Proxy wie Bambuddy (Traefik / Nginx / Caddy) mit HTTPS und aktualisiere die Spoolman-URL in den Einstellungen auf die neue HTTPS-Adresse.",spoolmanMixedContentFixOpenNewTab:"Als Workaround kannst du Spoolman in einem neuen Tab über HTTP öffnen — gemischte Inhalte werden nur innerhalb eingebetteter Frames blockiert, ein eigener Tab funktioniert weiterhin.",spoolmanOpenInNewTab:"Spoolman in neuem Tab öffnen",labels:{title:"Spulen-Etiketten drucken",selectedCount:"{{count}} ausgewählt",pickSpools:"Wählen Sie, für welche Spulen Etiketten gedruckt werden sollen:",searchPlaceholder:"Name, Marke oder #ID suchen",filterByMaterial:"Material:",allMaterials:"Alle",selectVisible:"Alle sichtbaren auswählen ({{count}})",deselectVisible:"Sichtbare abwählen",clearAll:"Alle entfernen",noSpoolsToShow:"Keine Spulen anzuzeigen. Filter anpassen und erneut versuchen.",noMatches:"Keine Spulen entsprechen der aktuellen Suche oder dem Filter.",printOne:"Etikett für diese Spule drucken",printLabels:"Etiketten drucken…",bulkTitle:"Spulen aus den aktuell angezeigten {{count}} zum Etikettieren auswählen",noSpoolsTitle:"Keine Spulen zum Etikettieren",error:"Etiketten konnten nicht erstellt werden: {{msg}}",sortBy:{label:"Sortieren:",id:"Nach ID",color:"Nach Farbe"},templates:{amsHolderSmall:{label:"AMS-Halter — klein (74 × 33 mm)",hint:"Ein Etikett pro Seite; passt zum druckbaren Etikett aus dem MakerWorld-Modell 752566 (AMS-Filament-Etikettenhalter)."},amsHolderLarge:{label:"AMS-Halter — groß (75 × 55 mm)",hint:"Ein Etikett pro Seite; passt zur Kartoneinleger-Variante des AMS-Filament-Etikettenhalters. Genug Platz für Farbprobe, Marke, Material, ID und QR-Code."},box40x30:{label:"Boxetikett (40 × 30 mm)",hint:"Ein Etikett pro Seite; gängige DK/Brother-Rollengröße, ideal für Filament-Beutel und Lager-Etiketten."},box:{label:"Box label (62 × 29 mm)",hint:"Ein Etikett pro Seite; für Brother PT/QL und Dymo-Kleinetiketten dimensioniert."},averyL7160:{label:"Avery L7160 — A4 sheet (38.1 × 63.5 mm × 21)",hint:"EU-Bogenformat; 21 Etiketten pro A4-Seite."},avery5160:{label:"Avery 5160 — US Letter sheet (25.4 × 66.7 mm × 30)",hint:"US-Bogenformat; 30 Etiketten pro Letter-Seite."}}},csv:{importButton:"CSV importieren",exportButton:"CSV exportieren",modalTitle:"Spulen aus CSV importieren",selectFile:"CSV-Datei auswählen oder hierher ziehen",dragHint:"Kopfzeile: material (erforderlich), brand, subtype, color_name, rgba, …",parsing:"Datei wird gelesen…",previewError:"CSV-Datei konnte nicht gelesen werden",validCount:"{{count}} gültig",errorCount:"{{count}} Fehler",skippedCount:"{{count}} übersprungen",colRow:"Zeile",colStatus:"Status",colColor:"Farbe",colorResolved:"Farbe aus Katalog übernommen",colorCrossMaterial:"Farbe von einem anderen Material übernommen — keine exakte Übereinstimmung im Katalog",duplicateExisting:"Eine Spule mit diesem Material, dieser Marke und Farbe existiert bereits — sie wird trotzdem als neue Spule importiert",spoolmanHint:"Im Spoolman-Modus den integrierten CSV-Import/-Export von Spoolman verwenden.",importValidRows:"{{count}} gültige Zeilen importieren",noValidRows:"Keine gültigen Zeilen",importing:"Wird importiert…",importSuccess:"{{count}} Spulen importiert",importError:"Import fehlgeschlagen",exportError:"Export fehlgeschlagen"},addSpool:"Spule hinzufügen",copySpool:"Spule kopieren",editSpool:"Spule bearbeiten",material:"Material",selectMaterial:"Material auswählen...",subtype:"Untertyp",brand:"Marke",searchBrand:"Marke suchen...",useCustomBrand:'"{{brand}}" verwenden',useCustomMaterial:"Benutzerdefiniertes Material verwenden: {{material}}",colorName:"Farbname",colorNamePlaceholder:"Jadeweiß, Feuerrot...",color:"Farbe",hexColor:"Hex-Farbe",pickColor:"Benutzerdefinierte Farbe wählen",labelWeight:"Nenngewicht",coreWeight:"Leergewicht der Spule",searchSpoolWeight:"Spulengewicht suchen...",weightUsed:"Verbraucht",currentWeight:"Restgewicht",measuredWeight:"Gemessenes Gewicht",spoolName:"Spule",costPerKg:"Kosten pro kg",storageLocation:"Lagerstandort",storageLocationPlaceholder:"z.B. Regal A, Schublade 1",openInInventory:"Im Inventar öffnen",measuredWeightError:"Das gemessene Gewicht muss zwischen {{min}}g und {{max}}g liegen.",slicerFilament:"Slicer-Filament",slicerFilamentName:"Slicer-Preset-Name",slicerPreset:"Slicer-Preset",searchPresets:"Filament-Presets suchen...",selectedPreset:"Ausgewählt",noPresetsFound:"Keine Presets gefunden",tempOverrides:"Temperatur-Überschreibungen",note:"Notiz",notePlaceholder:"Zusätzliche Notizen zu dieser Spule...",category:"Kategorie",categoryPlaceholder:"z. B. Produktion, Prototyp, Kunde A",categoryNone:"Ohne Kategorie",storageLocationNone:"Kein Lagerort",lowStockThresholdOverride:"Niedrigbestandsschwelle (diese Spule)",lowStockThresholdOverrideHelp:"Leer lassen, um den globalen Schwellenwert ({{global}}%) zu verwenden.",clearRfid:"RFID-Tag löschen",rfidCleared:"RFID-Tag gelöscht",archive:"Archivieren",restore:"Wiederherstellen",noSpools:"Noch keine Spulen. Fügen Sie Ihre erste Spule hinzu.",noAvailableSpools:"Keine Spulen verfügbar. Fügen Sie eine Spule zum Inventar hinzu oder lösen Sie eine aus einem anderen Slot.",kProfiles:"K-Profile",addKProfile:"K-Profil hinzufügen",assignSpool:"Spule zuweisen",unassignSpool:"Zuweisung aufheben",assignSuccess:"Spule zugewiesen und AMS-Slot konfiguriert",assignPendingInsert:"Zugewiesen. Slot wird beim Einsetzen der Spule konfiguriert.",assignFailed:"Spulenzuweisung fehlgeschlagen",selectSpool:"Wählen Sie eine Spule für diesen Slot",assigned:"Zugewiesen",assigning:"Wird zugewiesen...",searchSpools:"Spulen suchen...",showAllSpools:"Alle Spulen anzeigen",spoolmanSpools:"Spoolman-Spulen",allMaterials:"Alle Materialien",filterByBrand:"Nach Marke filtern...",showArchived:"Archivierte anzeigen",quickAdd:"Schnellerfassung (Lager)",quantity:"Menge",stock:"Lager",configured:"Konfiguriert",spoolsCreated:"{{count}} Spulen erstellt",spoolsPartiallyCreated:"{{created}} von {{total}} Spulen erstellt (einige fehlgeschlagen)",spoolCreated:"Spule erstellt",spoolUpdated:"Spule aktualisiert",spoolDeleted:"Spule gelöscht",deepLinkSpoolNotFound:"Spule nicht gefunden",deepLinkFetchFailed:"Spule konnte nicht geladen werden — bitte erneut versuchen",spoolArchived:"Spule archiviert",spoolRestored:"Spule wiederhergestellt",kProfileSaveFailed:"K-Profil-Einstellungen konnten nicht gespeichert werden",syncWeightSpoolNotFound:"Spule nicht gefunden — sie wurde möglicherweise gelöscht",syncWeightSpoolmanUnreachable:"Spoolman ist nicht erreichbar — bitte später erneut versuchen",syncWeightFailed:"Gewicht konnte nicht synchronisiert werden",spoolmanUnreachable:"Spoolman ist nicht erreichbar — bitte später erneut versuchen",deleteSpoolNotFound:"Spule nicht gefunden — sie wurde möglicherweise bereits gelöscht",deleteFailed:"Spule konnte nicht gelöscht werden",archiveSpoolNotFound:"Spule nicht gefunden — sie wurde möglicherweise bereits gelöscht",archiveFailed:"Spule konnte nicht archiviert werden",restoreSpoolNotFound:"Spule nicht gefunden — sie wurde möglicherweise bereits gelöscht",restoreFailed:"Spule konnte nicht wiederhergestellt werden",saveFailed:"Änderungen konnten nicht gespeichert werden",tagClearFailed:"Tag konnte nicht gelöscht werden",deleteConfirm:"Möchten Sie diese Spule wirklich löschen? Dies kann nicht rückgängig gemacht werden.",archiveConfirm:"Möchten Sie diese Spule wirklich archivieren?",advancedSettings:"Erweiterte Einstellungen",filamentInfoTab:"Filament-Info",paProfileTab:"PA-Profil",filamentInfo:"Filament",additional:"Zusätzlich",loadingPresets:"Cloud-Presets werden geladen...",cloudConnected:"Cloud verbunden",cloudNotConnected:"Cloud nicht verbunden (Standardwerte)",recentColors:"Zuletzt",searchColors:"Farben suchen...",searchResults:"Suchergebnisse",allColors:"Alle Farben",commonColors:"Häufige Farben",showLess:"Weniger",showAll:"Alle",noColorsFound:"Keine Farben gefunden",noResults:"Keine Ergebnisse",extraColorsLabel:"Zusätzliche Farben",extraColorsPlaceholder:"EC984C,#6CD4BC,A66EB9,D87694",extraColorsHint:"2 bis 8 Hex-Stops, durch Kommas getrennt. Wird als Verlauf dargestellt.",extraColorsInvalid:"Ungültige Hex-Werte ignoriert: {{tokens}}",colorEffectLabel:"Effekt",colorEffect:{none:"Keiner",sparkle:"Glitzer",wood:"Holz",marble:"Marmor",glow:"Leuchtend",matte:"Matt",silk:"Seide",galaxy:"Galaxie",rainbow:"Regenbogen",metal:"Metallic",translucent:"Lichtdurchlässig",gradient:"Verlauf",dualColor:"Zweifarbig",triColor:"Dreifarbig",multicolor:"Mehrfarbig"},selectMaterialFirst:"Bitte zuerst ein Material im Filament-Info Tab auswählen.",noPrintersConfigured:"Keine Drucker konfiguriert. Fügen Sie Drucker hinzu.",matchingFilter:"Filter",anyBrand:"Jede Marke",anyVariant:"Jede Variante",autoSelect:"Auto-Auswahl",matches:"Treffer",match:"Treffer",noMatches:"Keine Treffer",connected:"Verbunden",offline:"Offline",printerOffline:"Drucker ist offline. Verbinden Sie ihn, um Kalibrierungsprofile anzuzeigen.",noKProfilesMatch:"Keine K-Profile stimmen mit dem gewählten Filament überein.",leftNozzle:"Linke Düse",rightNozzle:"Rechte Düse",profilesSelected:"Kalibrierungsprofil(e) ausgewählt",totalInventory:"Gesamtbestand",totalConsumed:"Gesamtverbrauch",byMaterial:"Nach Material",inPrinter:"Im Drucker",lowStock:"Niedriger Bestand",sinceTracking:"Seit Beginn der Erfassung",resetConsumedCounter:"Zähler zurücksetzen",resetConsumedCounterTooltip:"Den verbrauchten Gramm-Zähler dieser Spule auf null setzen. Das Restgewicht bleibt unverändert.",resetConsumedCounterConfirm:"Verbrauchten Gramm-Zähler dieser Spule auf 0 zurücksetzen? Künftige Drucke zählen wieder ab null. Die Spule selbst, ihre Restgewichtsberechnung und Ihre Einstellungen bleiben unverändert.",resetAllConsumedCounters:"Alle Zähler zurücksetzen",resetAllConsumedCountersTooltip:"Den verbrauchten Gramm-Zähler auf jeder Spule auf null setzen. Die Restgewichte bleiben unverändert.",resetAllConsumedCountersConfirm:"Verbrauchten Gramm-Zähler auf allen {{count}} Spulen (archivierte eingeschlossen) auf 0 zurücksetzen? Das löscht den Wert „Insgesamt verbraucht“, sodass künftige Drucke wieder ab null gezählt werden. Spulen und Restgewichte bleiben unverändert.",consumedCounterReset:"Zähler zurückgesetzt",allConsumedCountersReset:"Zähler für {{count}} Spule(n) zurückgesetzt",resetConsumedCounterFailed:"Zähler konnte nicht zurückgesetzt werden",loadedInAms:"Im AMS/Ext geladen",remaining:"Verbleibend",weightCheck:"Gewichtskontrolle",lastWeighed:"Zuletzt gewogen",neverWeighed:"Nie gewogen",search:"Spulen suchen...",showing:"Zeige",to:"bis",of:"von",show:"Zeige",spools:"Spulen",spool:"Spule",page:"Seite",noSpoolsMatch:"Keine Ergebnisse",noSpoolsMatchDesc:"Versuchen Sie, Ihre Suche oder Filter anzupassen.",active:"Aktiv",archived:"Archiviert",all:"Alle",used:"Verwendet",new:"Neu",clearFilters:"Filter löschen",table:"Tabelle",cards:"Karten",net:"Netto",groupSimilar:"Gruppieren",groupedSpools:"{{count}} identische Spulen",groupedRows:"Zeilen",columns:"Spalten",configureColumns:"Spalten konfigurieren",configureColumnsDesc:"Ziehen zum Neuordnen oder Pfeile verwenden. Sichtbarkeit mit dem Augensymbol umschalten.",visible:"sichtbar",reset:"Zurücksetzen",cancel:"Abbrechen",applyChanges:"Änderungen anwenden",moveUp:"Nach oben",moveDown:"Nach unten",hideColumn:"Spalte ausblenden",showColumn:"Spalte einblenden",linkToSpool:"Mit Spule verknüpfen",tagLinked:"Tag mit Spule verknüpft",tagLinkFailed:"Tag-Verknüpfung fehlgeschlagen",tagAlreadyLinked:"Tag bereits mit anderer Spule verknüpft",unknownTag:"Unbekannter RFID-Tag erkannt",usageHistory:"Verbrauchshistorie",noUsageHistory:"Noch kein Verbrauch erfasst",printName:"Druckname",weightConsumed:"Verbrauchtes Gewicht",clearHistory:"Löschen",historyCleared:"Verbrauchshistorie gelöscht",fillSourceLabel:"(Inv)",lowStockThresholdError:"Der Schwellenwert muss zwischen 0.1 und 99.9 liegen",assignMismatchTitle:"Material stimmt nicht überein",assignMismatchMessage:'Das ausgewählte Spulenmaterial "{{spoolMaterial}}" stimmt nicht mit dem Tray-Material "{{trayMaterial}}" für {{location}} überein. Trotzdem zuweisen?',assignMismatchConfirm:"Trotzdem zuweisen",assignPartialMismatchMessage:'Das Spulenmaterial "{{spoolMaterial}}" ist ähnlich, stimmt aber nicht genau mit "{{trayMaterial}}" in {{location}} überein. Möchten Sie fortfahren?',assignProfileMismatchMessage:'Das Spulenprofil "{{spoolProfile}}" stimmt nicht mit dem Fachprofil "{{trayProfile}}" in {{location}} überein. Möchten Sie fortfahren?',assignReconfigureNote:"Der AMS-Slot wird mit dem Profil der Spule neu konfiguriert.",spoolmanFilamentCatalog:"Spoolman-Filamentkatalog",pickFromSpoolmanCatalog:"Aus Spoolman-Katalog wählen…",spoolmanFilamentSelected:"Filament aus Spoolman-Katalog ausgewählt",spoolmanFilamentUnlinked:"Verknüpfung mit Filamentkatalog aufgehoben",noSpoolmanFilaments:"Keine Filamente im Spoolman-Katalog gefunden",spoolmanFilamentColorSwatch:"Filamentfarbe",spoolWeightManagedBySpoolman:"Das Leerspulengewicht wird pro Filamenttyp in Spoolman verwaltet",spoolmanCatalogLoadFailed:"Spoolman-Filamentkatalog konnte nicht geladen werden"},timelapse:{title:"Zeitraffer",create:"Zeitraffer erstellen",download:"Herunterladen",delete:"Löschen",preview:"Vorschau",frameRate:"Bildrate",quality:"Qualität",processing:"Wird verarbeitet...",noTimelapses:"Keine Zeitraffer verfügbar"},ams:{title:"AMS",slot:"Slot",empty:"Leer",emptySlot:"Leerer Slot",slotEmpty:"Leer",slotUnconfigured:"?",emptySlotReset:"Keine Spule zugewiesen",unknown:"Unbekannt",humidity:"Luftfeuchtigkeit",temperature:"Temperatur",filamentType:"Filamenttyp",filamentColor:"Farbe",remaining:"Verbleibend",history:"AMS-Verlauf",noHistory:"Kein Verlauf verfügbar",configureSlot:"Slot konfigurieren",externalSpool:"Externe Spule",profile:"Profil",kFactor:"K-Faktor",fill:"Füllstand",configure:"Konfigurieren",used:"verwendet",remainingUnit:"verbleibend"},printModal:{title:"Druck starten",selectPrinter:"Drucker auswählen",selectPlate:"Platte auswählen",filamentMapping:"Filamentzuordnung",totalCost:"Gesamtkosten:",slotRemainingShort:" - {{grams}}g übrig",printSettings:"Druckeinstellungen",bedLeveling:"Bett-Nivellierung",flowCalibration:"Fluss-Kalibrierung",vibrationCalibration:"Vibrations-Kalibrierung",layerInspection:"Erste-Schicht-Prüfung",timelapse:"Zeitraffer",startPrint:"Druck starten",addToQueue:"Zur Warteschlange hinzufügen",cancel:"Abbrechen",noPrintersAvailable:"Keine Drucker verfügbar",printerBusy:"Drucker ist beschäftigt",printerOffline:"Drucker ist offline",sameTypeDifferentColor:"Gleicher Typ, andere Farbe",filamentTypeNotLoaded:"Filamenttyp nicht geladen",openCalendar:"Kalender öffnen",leftNozzle:"L",rightNozzle:"R",leftNozzleTooltip:"Linke Düse",rightNozzleTooltip:"Rechte Düse",filamentOverride:"Filament-Überschreibung",filamentOverrideHint:"Filamente für modellbasierte Zuweisung optional überschreiben. Der Planer wird gegen die ausgewählten Filamente statt der ursprünglichen 3MF-Werte abgleichen.",originalFilament:"Original",overrideWith:"Ersetzen mit",resetToOriginal:"Auf Original zurücksetzen",insufficientFilamentTitle:"Nicht genug Filament",insufficientFilamentMessage:"Einige zugewiesene Spulen haben weniger Filament als dieser Druck benötigt:",insufficientFilamentLine:"{{printer}} - {{slot}}: benötigt {{required}}g, verbleibend {{remaining}}g",printAnyway:"Trotzdem drucken",forceColorMatch:"Farbe erzwingen",staggerPrinterStarts:"Druckerstarts staffeln",staggerGroupSize:"Gruppengröße",staggerInterval:"Intervall (Min.)",staggerPreview:"{{printers}} Drucker → {{groups}} Gruppen à {{size}}, Start alle {{interval}} Min.",staggerLastGroup:"letzte Gruppe: {{count}}",staggerTotal:"insgesamt: {{minutes}} Min.",staggerToPrinters:"Gestaffelt an {{count}} Drucker senden",gcodeInjection:"Auto-Print G-code einfügen"},backup:{includesEncryptionKey:"Lokale Sicherungen enthalten die MFA-Schlüsseldatei (DATA_DIR/.mfa_encryption_key), damit ein Backup-ZIP selbstkonsistent ist. Behandle das ZIP als sensibel — wer Zugriff auf die Datei hat, kann die darin enthaltenen OIDC-Client-Secrets und TOTP-Geheimnisse entschlüsseln.",title:"Sichern & Wiederherstellen",createBackup:"Sicherung erstellen",restoreBackup:"Sicherung wiederherstellen",restoreDescription:"Alle Daten aus einer Sicherungsdatei ersetzen",downloadBackup:"Sicherung herunterladen",uploadBackup:"Sicherung hochladen",lastBackup:"Letzte Sicherung",autoBackup:"Automatische Sicherung",backupNow:"Jetzt sichern",restoreWarning:"Warnung: Das Wiederherstellen einer Sicherung überschreibt alle aktuellen Daten.",includeArchives:"Archive einschließen",includeSettings:"Einstellungen einschließen",includeProfiles:"Profile einschließen",backupSuccess:"Sicherung erfolgreich erstellt",restoreSuccess:"Sicherung erfolgreich wiederhergestellt",backupFailed:"Sicherung fehlgeschlagen",restoreFailed:"Wiederherstellung fehlgeschlagen",restoreNote:"Virtueller Drucker wird während der Wiederherstellung gestoppt",githubBackup:"Git-Backup",enabled:"Aktiviert",cloudLoginRequired:"Bambu Cloud Login erforderlich. Melden Sie sich unter Profile → Cloud-Profile an, um GitHub-Backup zu aktivieren.",cloudLoginRequiredShort:"Cloud-Login erforderlich",githubDescription:"Synchronisieren Sie Ihre Profile automatisch mit einem privaten GitHub-Repository für Backup und Versionsverlauf.",repoIsPrivate:"Repository ist privat — Sicherung möglich.",repoIsPublicWarning:"Das Repository ist ÖFFENTLICH. Bambuddy-Backups enthalten MQTT-Zugangsdaten, Home-Assistant-Tokens, Prometheus-Tokens, Ihre Bambu-Cloud-E-Mail-Adresse und über K-Profile auch Drucker-Zugangscodes. Speichern ist blockiert, bis Sie das Repository in den Einstellungen Ihres Anbieters auf privat stellen.",repoVisibilityUnknown:"Die Sichtbarkeit des Repositories konnte nicht bestimmt werden. Bambuddy sichert nur in Repositories, die nachweislich privat sind; Speichern wird blockiert.",repositoryUrl:"Repository-URL",repoUrlPlaceholderGitHub:"https://github.com/username/repo-name",repoUrlPlaceholderGitea:"https://gitea.example.com/username/repo-name",repoUrlPlaceholderForgejo:"https://forgejo.example.com/username/repo-name",repoUrlPlaceholderGitLab:"https://gitlab.com/username/repo-name",allowInsecureHttp:"Unsicheres HTTP erlauben",allowInsecureHttpHint:"Für selbst gehostete Instanzen in privaten Netzwerken ohne TLS aktivieren",personalAccessToken:"Persönlicher Zugriffstoken",tokenSaved:"(gespeichert)",enterNewToken:"Neuen Token eingeben zum Aktualisieren",tokenHint:"Feingranularer Token mit Lese-/Schreibberechtigung für Inhalte",branch:"Branch",provider:"Git-Anbieter",providerGitHub:"GitHub",providerGitLab:"GitLab",providerGitea:"Gitea",providerForgejo:"Forgejo",manualOnly:"Nur manuell",hourly:"Stündlich",daily:"Täglich",weekly:"Wöchentlich",includeInBackup:"In Sicherung einschließen",kProfiles:"K-Profile",kProfilesDescription:"Druckvorschub-Kalibrierung von verbundenen Druckern",noPrintersConnected:"Keine Drucker verbunden",printersConnected:"{{connected}}/{{total}} verbunden",cloudProfiles:"Cloud-Profile",cloudProfilesDescription:"Filament-, Drucker- und Prozessprofile aus der Bambu Cloud",appSettings:"App-Einstellungen",appSettingsDescription:"Bambuddy-Konfiguration (komplette Datenbank)",spoolInventory:"Spulenbestand",spoolInventoryDescription:"Filamentspulen, Nutzungsverlauf und Kostenverfolgung",printArchives:"Druckarchive",printArchivesDescription:"Druckverlauf-Metadaten (keine GCode/3MF-Dateien)",lastBackupAt:"Letzte Sicherung:",noBackupsYet:"Noch keine Sicherungen",next:"Nächste:",startingBackup:"Sicherung wird gestartet...",test:"Test",enableBackup:"Sicherung aktivieren",testConnection:"Verbindung testen",enterRepoUrl:"Repository-URL eingeben",enterRepoAndToken:"Repository-URL und Zugriffstoken eingeben",repoRequired:"Repository-URL ist erforderlich",tokenRequired:"Zugriffstoken ist erforderlich",githubBackupEnabled:"GitHub-Backup aktiviert",tokenUpdated:"Token aktualisiert",settingsSaved:"Einstellungen gespeichert",failedToSave:"Speichern fehlgeschlagen: {{message}}",backupCompleteFiles:"Sicherung abgeschlossen - {{count}} Dateien aktualisiert",backupSkippedNoChanges:"Sicherung übersprungen - keine Änderungen",backupFailed2:"Sicherung fehlgeschlagen: {{message}}",clearedLogs:"{{count}} Protokolle gelöscht",failedToClearLogs:"Protokolle löschen fehlgeschlagen: {{message}}",history:"Verlauf",clear:"Löschen",date:"Datum",status:"Status",commit:"Commit",localBackup:"Lokale Sicherung",localBackupDescription:"Erstellen Sie eine vollständige Sicherung Ihrer Bambuddy-Daten einschließlich Datenbank, Archive, Uploads und aller Dateien.",downloadBackupLabel:"Sicherung herunterladen",completeBackupZip:"Vollständige Sicherung: Datenbank + alle Dateien (ZIP)",download:"Herunterladen",preparingBackup:"Sicherung wird vorbereitet...",creatingArchive:"Sicherungsarchiv wird erstellt... Dies kann bei großen Archiven eine Weile dauern.",downloadingFile:"Sicherungsdatei wird heruntergeladen...",backupDownloaded:"Sicherung erfolgreich heruntergeladen",failedToCreateBackup:"Sicherung erstellen fehlgeschlagen: {{message}}",restore:"Wiederherstellen",restoreReplacesAll:"Wiederherstellung ersetzt alle Daten.",restoreReplacesAllDetail:"Ihre aktuelle Datenbank und Dateien werden vollständig ersetzt. Nach der Wiederherstellung ist ein Neustart erforderlich.",restoreConfirmTitle:"Sicherung wiederherstellen",restoreConfirmMessage:'Sind Sie sicher, dass Sie von "{{filename}}" wiederherstellen möchten? Dies ersetzt Ihre aktuelle Datenbank und alle Dateien vollständig. Die Anwendung muss nach der Wiederherstellung neu gestartet werden.',restoreConfirmButton:"Sicherung wiederherstellen",uploadingFile:"Sicherungsdatei wird hochgeladen...",backupRestoredRestart:"Sicherung wiederhergestellt. Bitte starten Sie Bambuddy neu.",failedToRestore:"Sicherung wiederherstellen fehlgeschlagen. Bitte überprüfen Sie das Dateiformat.",reloadNow:"Jetzt neu laden",creatingBackup:"Sicherung erstellen",restoringBackup:"Sicherung wiederherstellen",preparing:"Vorbereiten...",processing:"Verarbeiten...",doNotClosePage:"Bitte schließen Sie diese Seite nicht und navigieren Sie nicht weg. Dieser Vorgang kann bei großen Sicherungen mehrere Minuten dauern.",restoring:"Wiederherstellen...",restoreComplete:"Wiederherstellung abgeschlossen",restoreFailed2:"Wiederherstellung fehlgeschlagen",importSettings:"Einstellungen aus einer Sicherungsdatei importieren",pleaseWaitRestoring:"Bitte warten Sie, während Ihre Daten wiederhergestellt werden",selectBackupFile:"Klicken Sie, um eine Sicherungsdatei auszuwählen (.json oder .zip)",duplicateHandling:"So funktioniert die Duplikatbehandlung:",matchPrinters:"Drucker",matchPrintersBy:"abgeglichen nach Seriennummer",matchSmartPlugs:"Smart Plugs",matchSmartPlugsBy:"abgeglichen nach IP-Adresse",matchNotificationProviders:"Benachrichtigungsanbieter",matchNotificationProvidersBy:"abgeglichen nach Name",matchFilaments:"Filamente",matchFilamentsBy:"abgeglichen nach Name + Typ + Marke",matchArchives:"Archive",matchArchivesBy:"abgeglichen nach Inhaltshash (immer übersprungen)",matchPendingUploads:"Ausstehende Uploads",matchPendingUploadsBy:"abgeglichen nach Dateiname",matchSettingsTemplates:"Einstellungen & Vorlagen",matchSettingsTemplatesBy:"immer überschrieben",replaceExisting:"Vorhandene Daten ersetzen",keepExisting:"Vorhandene Daten behalten",overwriteDescription:"Bereits vorhandene Elemente mit Sicherungsdaten überschreiben",keepDescription:"Nur Elemente wiederherstellen, die noch nicht vorhanden sind",overwriteCaution:"Achtung:",overwriteWarning:"Das Überschreiben ersetzt Ihre aktuellen Konfigurationen durch Daten aus der Sicherung. Drucker-Zugangscodes werden aus Sicherheitsgründen nie überschrieben.",cancel:"Abbrechen",processingBackup:"Sicherungsdatei wird verarbeitet...",itemsRestored:"Wiederhergestellt",itemsSkipped:"Übersprungen",restored:"Wiederhergestellt",skippedAlreadyExist:"Übersprungen (bereits vorhanden)",filesCategory:"Dateien (3MF, Thumbnails, etc.)",andMore:"...und {{count}} weitere",newApiKeysGenerated:"Neue API-Schlüssel generiert",keysShownOnce:"Diese Schlüssel werden nur einmal angezeigt. Kopieren Sie sie jetzt!",copy:"Kopieren",noDataFound:"In der Sicherungsdatei wurden keine Daten zur Wiederherstellung gefunden.",close:"Schließen",scheduledBackup:"Geplante Backups",scheduledBackupDescription:"Backup-Snapshots automatisch nach Zeitplan erstellen. Ausgabeverzeichnis kann auf einen NAS oder externen Speicher gemountet werden.",frequency:"Frequenz",backupTime:"Zeit",retention:"Aufbewahrung",retentionDescription:"Anzahl der zu behaltenden Backups",outputPath:"Ausgabepfad",outputPathPlaceholder:"Standard: {{path}}",outputPathDescription:"Leer lassen für den Standardort",runNow:"Jetzt ausführen",backupFiles:"Backup-Dateien",noScheduledBackups:"Noch keine Backups",deleteBackup:"Löschen",deleteBackupConfirm:"Diese Backup-Datei löschen?",backupRunning:"Backup läuft...",scheduledBackupComplete:"Backup erfolgreich abgeschlossen",scheduledBackupFailed:"Backup fehlgeschlagen",nextBackup:"Nächstes Backup",backupSize:"Größe",localTimeHint:"Ortszeit ({{tz}})",defaultPathLabel:"Standard:",categories:{settings:"Einstellungen",notification_providers:"Benachrichtigungsanbieter",notification_templates:"Benachrichtigungsvorlagen",smart_plugs:"Smart Plugs",printers:"Drucker",filaments:"Filamente",maintenance_types:"Wartungstypen",archives:"Archive",projects:"Projekte",pending_uploads:"Ausstehende Uploads",external_links:"Externe Links",api_keys:"API-Schlüssel"}},tags:{title:"Tags",addTag:"Tag hinzufügen",editTag:"Tag bearbeiten",deleteTag:"Tag löschen",tagName:"Tag-Name",tagColor:"Tag-Farbe",noTags:"Keine Tags",deleteConfirm:"Möchten Sie diesen Tag wirklich löschen?",manageTags:"Tags verwalten"},uploadModal:{title:"3MF-Dateien hochladen",dragDrop:"3MF-Dateien hierher ziehen",or:"oder",browseFiles:"Dateien durchsuchen",extractionInfo:"Das Druckermodell wird automatisch aus den 3MF-Datei-Metadaten extrahiert.",uploaded:"hochgeladen",failed:"fehlgeschlagen",uploading:"Wird hochgeladen...",upload:"Hochladen",uploadFailed:"Hochladen fehlgeschlagen"},editArchive:{title:"Archiv bearbeiten",name:"Name",namePlaceholder:"Druckname",printer:"Drucker",noPrinter:"Kein Drucker",project:"Projekt",noProject:"Kein Projekt",itemsPrinted:"Gedruckte Teile",itemsPrintedHelp:"Anzahl der in diesem Druckauftrag produzierten Teile",notes:"Notizen",notesPlaceholder:"Notizen zu diesem Druck hinzufügen...",externalLink:"Externer Link",externalLinkPlaceholder:"https://printables.com/model/...",externalLinkHelp:"Link zu Printables, Thingiverse oder anderer Quelle",tags:"Tags",tagsPlaceholder:"Tags hinzufügen...",addMoreTags:"Weitere Tags hinzufügen...",matchingTags:'Übereinstimmend mit "{{query}}"',existingTags:"Vorhandene Tags",clickToAdd:"(zum Hinzufügen klicken)",status:"Status",failureReason:"Fehlergrund",selectReason:"Grund auswählen...",photos:"Fotos des Druckergebnisses",photosHelp:"Klicken Sie auf + um Fotos Ihres Druckergebnisses hinzuzufügen",printResult:"Druckergebnis",saving:"Wird gespeichert...",failureReasons:{adhesionFailure:"Haftungsfehler",spaghettiDetached:"Spaghetti / Abgelöst",layerShift:"Schichtversatz",cloggedNozzle:"Verstopfte Düse",filamentRunout:"Filament aufgebraucht",warping:"Verformung",stringing:"Fadenziehen",underExtrusion:"Unterextrusion",powerFailure:"Stromausfall",userCancelled:"Vom Benutzer abgebrochen",other:"Sonstiges"},statuses:{completed:"Abgeschlossen",failed:"Fehlgeschlagen",aborted:"Abgebrochen",printing:"Druckt"}},kProfiles:{title:"K-Profile",noPrintersConfigured:"Keine Drucker konfiguriert",addPrinterInSettings:"Fügen Sie einen Drucker in den Einstellungen hinzu, um K-Profile zu verwalten",noActivePrinters:"Keine aktiven Drucker",enablePrinterConnection:"Aktivieren Sie eine Druckerverbindung, um K-Profile anzuzeigen",loadingProfiles:"Lade K-Profile...",printerOffline:"Drucker offline",printerOfflineDesc:"Der ausgewählte Drucker ist nicht verbunden. Schalten Sie ihn ein, um K-Profile anzuzeigen.",noMatchingProfiles:"Keine passenden Profile",noMatchingProfilesDesc:"Keine Profile entsprechen Ihren Suchkriterien",noKProfiles:"Keine K-Profile",noKProfilesDesc:"Keine Druckvorschub-Profile für {{diameter}}mm Düse gefunden",createFirstProfile:"Erstes Profil erstellen",printer:"Drucker",nozzle:"Düse",refresh:"Aktualisieren",addProfile:"Profil hinzufügen",export:"Exportieren",import:"Importieren",select:"Auswählen",selectAll:"Alle auswählen",delete:"Löschen",searchPlaceholder:"Nach Name oder Filament suchen...",allExtruders:"Alle Extruder",leftOnly:"Nur links",rightOnly:"Nur rechts",allFlow:"Alle Flusstypen",hfOnly:"Nur HF",sOnly:"Nur S",sortName:"Sortieren: Name",sortKValue:"Sortieren: K-Wert",sortFilament:"Sortieren: Filament",leftExtruder:"Linker Extruder",rightExtruder:"Rechter Extruder",modal:{addTitle:"K-Profil hinzufügen",editTitle:"K-Profil bearbeiten",profileName:"Profilname",profileNamePlaceholder:"Mein PLA-Profil",kValue:"K-Wert",kValuePlaceholder:"0,020",kValueHelp:"Typischer Bereich: 0,01 - 0,06 für PLA, 0,02 - 0,10 für PETG",filament:"Filament",selectFilament:"Filament auswählen...",noFilamentsHelp:"Keine Filamente gefunden. Erstellen Sie zuerst ein K-Profil in Bambu Studio.",flowType:"Flusstyp",highFlow:"Hoher Durchfluss",standard:"Standard",nozzleSize:"Düsengröße",extruder:"Extruder",extruders:"Extruder",left:"Links",right:"Rechts",notes:"Notizen (lokal gespeichert)",notesPlaceholder:"Notizen zu diesem Profil hinzufügen...",notesHelp:"Notizen werden in Bambuddy gespeichert, nicht auf dem Drucker",syncing:"Synchronisiert mit Drucker...",savingExtruder:"Speichern auf Extruder {{current}}/{{total}}...",pleaseWait:"Bitte warten"},deleteConfirm:{title:"Profil löschen",cannotUndo:"Dies kann nicht rückgängig gemacht werden",message:'Möchten Sie "{{name}}" wirklich vom Drucker löschen?'},bulkDelete:{title:"Profile löschen",cannotUndo:"Dies kann nicht rückgängig gemacht werden",message:"Möchten Sie wirklich {{count}} ausgewählte Profile vom Drucker löschen?"},toast:{profileSaved:"K-Profil gespeichert",profilesSaved:"K-Profil auf {{count}} Extrudern gespeichert",selectAtLeastOneExtruder:"Bitte wählen Sie mindestens einen Extruder aus",profileDeleted:"K-Profil gelöscht",profilesDeleted:"{{count}} Profile gelöscht",exportedProfiles:"{{count}} Profile exportiert",importedProfiles:"{{count}} von {{total}} Profilen importiert",noProfilesToExport:"Keine Profile zum Exportieren",invalidFileFormat:"Ungültiges Dateiformat",failedToParseImport:"Import-Datei konnte nicht gelesen werden",failedToSaveBatch:"K-Profile konnten nicht gespeichert werden",noteSaved:"Notiz gespeichert",failedToSaveNote:"Notiz konnte nicht gespeichert werden"},permission:{noRead:"Sie haben keine Berechtigung, Profile zu aktualisieren",noCreate:"Sie haben keine Berechtigung, Profile hinzuzufügen",noUpdate:"Sie haben keine Berechtigung, K-Profile zu aktualisieren",noDelete:"Sie haben keine Berechtigung, K-Profile zu löschen",noExport:"Sie haben keine Berechtigung, Profile zu exportieren",noImport:"Sie haben keine Berechtigung, Profile zu importieren"}},virtualPrinter:{title:"Virtueller Drucker",running:"Läuft",stopped:"Gestoppt",description:{default:"Aktiviere einen virtuellen Drucker, der in Bambu Studio und OrcaSlicer erscheint. Dateien, die an diesen Drucker gesendet werden, werden direkt archiviert ohne zu drucken.",proxy:"Aktiviere einen Proxy, der Slicer-Datenverkehr an einen echten Drucker weiterleitet, um Ferndruck über jedes Netzwerk zu ermöglichen."},enable:{title:"Virtuellen Drucker aktivieren",visibleInSlicer:'Sichtbar als "Bambuddy" in der Slicer-Erkennung',proxyingTo:"Proxy zu {{name}}",notActive:"Nicht aktiv"},model:{title:"Druckermodell",description:"Wähle welches Druckermodell emuliert werden soll.",restartWarning:"Das Ändern des Modells startet den virtuellen Drucker neu"},accessCode:{title:"Zugangscode",isSet:"Zugangscode ist gesetzt",notSet:"Kein Zugangscode gesetzt - erforderlich zum Aktivieren",placeholder:"8-Zeichen-Code eingeben",placeholderChange:"Neuen Code eingeben zum Ändern",hint:"Muss genau 8 Zeichen lang sein. Wird von Slicern zur Authentifizierung verwendet.",charCount:"({{count}}/8)",inheritedFromTarget:"Vom Zieldrucker übernommen",derivedFromTargetHint:"Verwendet den Zugangscode des Zieldruckers. Die Brücke leitet die Slicer-Authentifizierung an den echten Drucker weiter, daher müssen die Codes übereinstimmen — den Druckercode in dessen Einstellungen ändern.",reveal:"Zugangscode anzeigen",hide:"Zugangscode verbergen"},targetPrinter:{title:"Zieldrucker",configured:"Proxy-Ziel konfiguriert",notConfigured:"Kein Zieldrucker ausgewählt - erforderlich für Proxy-Modus",placeholder:"Drucker auswählen...",hint:"Wähle den Drucker aus, an den der Slicer-Datenverkehr weitergeleitet werden soll. Der Drucker muss im LAN-Modus sein.",noPrinters:"Keine Drucker konfiguriert. Füge zuerst einen Drucker hinzu, um den Proxy-Modus zu verwenden."},remoteInterface:{title:"Netzwerkschnittstelle überschreiben",configured:"Schnittstellenüberschreibung aktiv",optional:"Optional - verwenden wenn die automatisch erkannte IP falsch ist (z.B. mehrere NICs, Docker, VPN)",placeholder:"Automatisch erkennen (Standard)...",hint:"Überschreibt die per SSDP beworbene und im TLS-Zertifikat verwendete IP-Adresse. Nützlich wenn Bambuddy mehrere Netzwerkschnittstellen hat."},mode:{title:"Modus",archive:"Archivieren",archiveDesc:"Dateien sofort archivieren",review:"Überprüfen",reviewDesc:"Vor dem Archivieren überprüfen",queue:"Warteschlange",queueDesc:"Archivieren und zur Warteschlange hinzufügen",proxy:"Proxy",proxyDesc:"An echten Drucker weiterleiten"},autoDispatch:{title:"Automatisch starten",description:"Drucke automatisch starten, wenn sie zur Warteschlange hinzugefügt werden. Wenn deaktiviert, warten Drucke auf manuellen Start."},queueForceColorMatch:{title:"Farbabgleich erzwingen",description:"Druckaufträge nur an Drucker senden, bei denen der genaue Filament-Typ und die genaue Farbe geladen sind. Standardmäßig deaktiviert — ohne diese Option verwendet die Warteschlange nur den Drucker-Modell-Abgleich und wählt möglicherweise einen Drucker mit der falschen Farbe."},tailscaleDisabled:{title:"Tailscale-Integration",description:"Aktivieren, um diesen VP als per Tailscale erreichbar zu markieren. Zeigt die Tailscale-Adresse des Hosts an, damit du weißt, welche IP du im Slicer eintragen musst. Der CA-Import bleibt unverändert — diese Option hat keinen Einfluss auf Zertifikate."},setupRequired:{title:"Einrichtung erforderlich",description:"Die virtuelle Druckerfunktion erfordert zusätzliche Systemkonfiguration, bevor sie funktioniert. Dies beinhaltet Portweiterleitung, Firewall-Regeln und plattformspezifische Einstellungen.",readGuide:"Lese die Einrichtungsanleitung vor dem Aktivieren"},archiveNameSource:{title:"Quelle des Archivnamens",description:'Lege fest, wie neue Archive benannt werden, wenn Dateien über den virtuellen Drucker eintreffen. "Metadaten" verwendet den im 3MF eingebetteten Titel des Slicers (Standard). "Dateiname" nutzt den Dateinamen, den Bambu Studio per FTP gesendet hat. Hinweis: Bambu Studio überschreibt den im Dialog "Zum Drucker senden" eingegebenen Namen mit dem Titelfeld der 3MF, sofern eines vorhanden ist — beide Modi liefern daher oft denselben Wert.',metadata:"Metadaten",filename:"Dateiname"},caCert:{title:"Slicer-Zertifikat",description:"Virtuelle Drucker verwenden ein TLS-Zertifikat, das von der Bambuddy-CA signiert ist. Importieren Sie dieses CA-Zertifikat einmalig in den Vertrauensspeicher Ihres Slicers, damit er die Verbindung akzeptiert — kein Abrufen über die Kommandozeile mehr nötig.",copy:"Kopieren",copied:"Kopiert",download:"Herunterladen",fingerprint:"SHA-256"},howItWorks:{title:"So funktioniert es",step1:"Im selben LAN erscheinen virtuelle Drucker automatisch in deinem Slicer (Bambu Studio / OrcaSlicer). Aus anderen Netzwerken füge sie manuell per IP-Adresse und Zugangscode hinzu.",step2:'Im Archiv-, Überprüfungs- und Warteschlangen-Modus verwende die "Senden"-Funktion im Slicer, um 3MF-Dateien an Bambuddy zu senden. Der Slicer zeigt "Druck erfolgreich" — die Datei wird gespeichert, nicht gedruckt.',step3:"Im Proxy-Modus leitet der virtuelle Drucker den gesamten Datenverkehr an einen echten Drucker weiter — Drucke starten sofort wie bei einer direkten Verbindung."},status:{title:"Status-Details",printerName:"Druckername",model:"Modell",serialNumber:"Seriennummer",mode:"Modus",pendingFiles:"Ausstehende Dateien",targetPrinter:"Zieldrucker",ftpPort:"FTP-Port",mqttPort:"MQTT-Port",ftpConnections:"FTP-Verbindungen",mqttConnections:"MQTT-Verbindungen"},toast:{updated:"Virtuelle Druckereinstellungen aktualisiert",failedToUpdate:"Einstellungen konnten nicht aktualisiert werden",copyFailed:"Kopieren fehlgeschlagen — bitte Text manuell markieren",accessCodeRequired:"Bitte zuerst einen Zugangscode setzen",targetPrinterRequired:"Bitte zuerst einen Zieldrucker auswählen",bindIpRequired:"Bitte zuerst eine Bind-IP setzen",accessCodeEmpty:"Zugangscode darf nicht leer sein",accessCodeLength:"Zugangscode muss genau 8 Zeichen lang sein",targetCodeChangedRebind:"Zugangscode wurde an den neuen Zieldrucker angepasst. Bitte dieses Gerät im Slicer neu hinzufügen, damit der neue Code übernommen wird.",created:"Virtueller Drucker erstellt",failedToCreate:"Virtueller Drucker konnte nicht erstellt werden",deleted:"Virtueller Drucker gelöscht",failedToDelete:"Virtueller Drucker konnte nicht gelöscht werden"},list:{title:"Virtuelle Drucker",add:"Hinzufügen",addFirst:"Virtuellen Drucker hinzufügen",empty:"Keine virtuellen Drucker konfiguriert. Fügen Sie einen hinzu, um zu beginnen."},bindIp:{title:"Bind-Interface",placeholder:"Interface auswählen...",hint:"Netzwerkinterface, an das dieser virtuelle Drucker gebunden wird. Muss pro Drucker eindeutig sein."},proxy:{accessCodeHint:"Im Proxy-Modus den Zugangscode des Zieldruckers im Slicer verwenden. Die Verbindung wird transparent zum echten Drucker weitergeleitet."},addDialog:{title:"Virtuellen Drucker hinzufügen",name:"Name",hint:"Sie können Zugangscode, Zieldrucker und andere Einstellungen nach dem Erstellen konfigurieren.",create:"Erstellen"},deleteConfirm:{title:"Virtuellen Drucker löschen",message:'Möchten Sie "{{name}}" wirklich löschen? Dies stoppt alle Dienste für diesen Drucker.'}},modelViewer:{openInSlicer:"Im Slicer öffnen",tabs:{model:"3D-Modell",gcode:"G-Code Vorschau"},notAvailable:"nicht verfügbar",notSliced:"nicht geslicet",plates:"Platten",allPlates:"Alle Platten",plateNumber:"Platte {{number}}",plateCount:"{{count}} Platte",plateCount_other:"{{count}} Platten",objectCount:"{{count}} Objekt",objectCount_other:"{{count}} Objekte",filamentCount:"{{count}} Filament",filamentCount_other:"{{count}} Filamente",eta:"ETA {{minutes}} Min",noPreview:"Keine Vorschau für diese Datei verfügbar",pagination:{pageOf:"Seite {{current}} von {{total}}",prev:"Zurück",next:"Weiter"},errors:{failedToLoad:"Datei konnte nicht geladen werden",noMeshes:"Keine Meshes in 3MF-Datei gefunden",unsupportedFormat:"Nicht unterstütztes Dateiformat"}},maintenanceDescriptions:{lubricateCarbonRods:"Schmiermittel auf Karbonstäbe für sanfte Bewegung auftragen",lubricateRails:"Schmiermittel auf Linearschienen für sanfte Bewegung auftragen",cleanNozzle:"Hotend und Düse reinigen, um Verstopfungen zu verhindern",checkBelts:"Riemenspannung für präzise Drucke überprüfen",cleanBuildPlate:"Druckplatte für bessere Haftung reinigen",checkExtruder:"Extruderzahnräder auf Verschleiß prüfen",checkCooling:"Sicherstellen, dass Lüfter ordnungsgemäß funktionieren",generalInspection:"Allgemeine Druckerinspektion",cleanCarbonRods:"Karbonstäbe reinigen, um Reibung zu reduzieren",lubricateSteelRods:"Schmiermittel auf Stahlstangen für sanfte Bewegung auftragen",cleanSteelRods:"Stahlstangen reinigen, um Reibung zu reduzieren",cleanLinearRails:"Linearschienen abwischen, um Staub und Schmutz zu entfernen",checkPtfeTube:"PTFE-Schlauch auf Verschleiß oder Beschädigung prüfen",replaceHepaFilter:"HEPA-Filter für Luftqualität ersetzen",replaceCarbonFilter:"Aktivkohlefilter ersetzen",lubricateLeftNozzleRail:"Linke Düsenschiene schmieren (H2-Serie)"},smartPlugs:{offline:"Offline",admin:"Admin",openPlugAdminPage:"Plug-Admin-Seite öffnen",deleteSmartPlug:"Smart Plug löschen",turnOnSmartPlug:"Smart Plug einschalten",turnOffSmartPlug:"Smart Plug ausschalten",turnOn:"Einschalten",turnOff:"Ausschalten",addSmartPlug:{scanningNetwork:"Netzwerk wird durchsucht...",chooseEntity:"Entität auswählen...",connectionFailed:"Verbindung fehlgeschlagen",searchEntities:"Entitäten suchen...",searchPowerSensors:"Leistungssensoren suchen...",searchEnergySensors:"Energiesensoren suchen...",placeholders:{plugName:"Wohnzimmer Steckdose",mqttStateOnValue:"ON, true, 1",mqttSameAsPower:"Gleich wie Leistungs-Topic oder anders"}},linkedTo:"Verbunden mit:",monitorOnly:"Nur Überwachung",alerts:"Alarme",scheduleOn:"Ein {{time}}",scheduleOff:"Aus {{time}}",on:"Ein",off:"Aus",power:"Leistung",kwhToday:"kWh Heute",settings:"Einstellungen",automationSettings:"Automatisierungseinstellungen",showInSwitchbar:"In Schaltleiste anzeigen",quickAccessSidebar:"Schnellzugriff über Seitenleiste",enabled:"Aktiviert",enableAutomation:"Automatisierung für diesen Stecker aktivieren",autoOn:"Auto Ein",autoOnDescription:"Einschalten wenn Druck startet",autoOff:"Auto Aus",autoOffDescription:"Ausschalten wenn Druck abgeschlossen (einmalig)",autoOffPersistent:"Aktiviert lassen",autoOffPersistentDescription:"Zwischen Drucken aktiviert bleiben statt einmalig",autoOffAfterDrying:"Automatisch aus nach Trocknung",autoOffAfterDryingDescription:"Ausschalten, wenn AMS-Trocknung abgeschlossen ist",delayAfterDryingMinutes:"Verzögerung nach Trocknung (Minuten)",turnOffDelayMode:"Ausschaltverzögerungsmodus",time:"Zeit",temp:"Temp.",delayMinutes:"Verzögerung (Minuten)",tempThreshold:"Temperaturschwelle (°C)",tempThresholdDescription:"Schaltet aus wenn die Düse unter diese Temperatur abkühlt",edit:"Bearbeiten",deleteConfirm:'Möchten Sie "{{name}}" wirklich löschen? Dies kann nicht rückgängig gemacht werden.',turnOnConfirm:'Möchten Sie "{{name}}" wirklich einschalten?',turnOffConfirm:'Möchten Sie "{{name}}" wirklich ausschalten? Dies unterbricht die Stromversorgung des angeschlossenen Geräts.',failedToTurn:'{{name}}" konnte nicht {{action}} werden',unknown:"Unbekannt",addTitle:"Smart Plug hinzufügen",editTitle:"Smart Plug bearbeiten",stopScanning:"Suche beenden",discoverTasmota:"Tasmota Geräte suchen",foundDevices:"{{count}} Gerät(e) gefunden - zum Auswählen klicken:",noDevicesFound:"Keine Tasmota Geräte in Ihrem Netzwerk gefunden",haNotConfigured:"Home Assistant ist nicht konfiguriert. Einrichtung unter",haSettingsPath:"Einstellungen → Netzwerk → Home Assistant",selectEntity:"Entität auswählen *",ipAddress:"IP-Adresse *",nameLabel:"Name *",username:"Benutzername",password:"Passwort",authHint:"Leer lassen, wenn Ihr Tasmota-Gerät keine Authentifizierung benötigt",linkToPrinter:"Mit Drucker verbinden",noPrinter:"Kein Drucker (nur manuelle Steuerung)",linkingDescription:"Verknüpfung ermöglicht automatisches Ein-/Ausschalten bei Druckstart/-ende",powerAlerts:"Leistungsalarme",alertAbove:"Alarm wenn über (W)",alertBelow:"Alarm wenn unter (W)",alertDescription:"Benachrichtigung wenn der Stromverbrauch diese Schwellenwerte überschreitet. Leer lassen um diese Richtung zu deaktivieren.",dailySchedule:"Tagesplan",turnOnAt:"Einschalten um",turnOffAt:"Ausschalten um",scheduleDescription:"Den Stecker automatisch täglich zu diesen Zeiten ein-/ausschalten. Leer lassen um diese Aktion zu überspringen.",showOnPrinterCard:"Auf Druckerkarte anzeigen",displayOnPrinterCard:"Schaltfläche auf Druckerkarte anzeigen",connectedResult:"Verbunden!",deviceLabel:"Gerät: {{name}} - ",stateLabel:"Status: {{state}}",test:"Test",delete:"Löschen",save:"Speichern",add:"Hinzufügen",cancel:"Abbrechen",failedToStartScan:"Suche konnte nicht gestartet werden",nameRequired:"Name ist erforderlich",entityRequired:"Entität ist für Home Assistant Stecker erforderlich",mqttTopicRequired:"Mindestens ein MQTT-Topic muss für Leistung, Energie oder Statusüberwachung konfiguriert sein",loadingEntities:"Entitäten werden geladen...",loading:"Laden...",failedToLoadEntities:"Entitäten konnten nicht geladen werden: {{error}}",noEntitiesMatching:'Keine Entitäten gefunden die "{{search}}" entsprechen',noEntitiesAvailable:"Keine Entitäten verfügbar",searchingEntities:"Alle Entitäten durchsuchen ({{count}} gefunden)",showingEntities:"Zeige switch, light, input_boolean ({{count}} verfügbar)",energyMonitoringOptional:"Energieüberwachung (Optional)",energyMonitoringHint:"Sensoren suchen und auswählen, die Leistungs-/Energiedaten liefern.",powerSensorW:"Leistungssensor (W)",energyTodayKwh:"Energie Heute (kWh)",totalEnergyKwh:"Gesamtenergie (kWh)",noMatchingSensors:"Keine passenden Sensoren",none:"Keine",mqttNotConfigured:"MQTT-Broker nicht konfiguriert. Broker-Adresse einstellen unter",mqttSettingsPath:"Einstellungen → Netzwerk → MQTT-Veröffentlichung",mqttNotConfiguredSuffix:"(Sie müssen die Veröffentlichung nicht aktivieren, nur die Broker-Details ausfüllen).",mqttMonitorOnlyDescription:"MQTT-Stecker empfangen Leistungs-/Energiedaten über MQTT-Abonnement. Ein-/Ausschalten ist nicht verfügbar - verwenden Sie Ihren MQTT-Broker oder Ihr Home-Automation-System.",powerMonitoring:"Leistungsüberwachung",energyMonitoring:"Energieüberwachung",stateMonitoring:"Statusüberwachung",optional:"optional",topic:"Thema",jsonPath:"JSON-Pfad",multiplier:"Multiplikator",onValue:"EIN-Wert",mqttPowerHint:`JSON-Pfad extrahiert Wert aus JSON-Payload (z.B. "power_l1"). Leer lassen wenn Topic rohe numerische Werte sendet.
+Multiplikator 0.001 für mW→W, 1000 für kW→W verwenden.`,mqttEnergyHint:`JSON-Pfad extrahiert Wert aus JSON-Payload. Leer lassen für rohe Werte.
+Multiplikator 0.001 für Wh→kWh, 1000 für MWh→kWh verwenden.`,mqttStateHint:`JSON-Pfad extrahiert Wert aus JSON-Payload. Leer lassen für rohe Werte.
+EIN-Wert: der genaue String der "EIN" bedeutet. Leer lassen für Auto-Erkennung (ON, true, 1).`,restControl:"Steuerung",restOnUrl:"Einschalt-URL",restOffUrl:"Ausschalt-URL",restOnBody:"EIN-Anforderungstext",restOffBody:"AUS-Anforderungstext",restMethod:"HTTP-Methode",restHeaders:"Custom Headers (JSON)",restStatusUrl:"Status-URL",restStatusPath:"JSON-Pfad für Status",restStatusOnValue:"EIN-Wert",restPowerUrl:"Strom-URL",restPowerPath:"JSON-Pfad für Leistung",restPowerMultiplier:"Power Multiplikator",restEnergyUrl:"Energie URL",restEnergyPath:"JSON-Pfad für Energie",restEnergyMultiplier:"Energie Multiplikator",restUrlRequired:"Mindestens eine URL (ON oder OFF) ist für REST-Steckdosen erforderlich",restHeadersHint:'z. B. {"Authorization": "Bearer your-token"}',restBodyHint:'z. B. ON, {"state": "on"}',restStatusHint:"URL zum Abfragen des aktuellen Status",restPathHint:"z. B. state oder data.power.status",restPowerUrlHint:"Eigene URL für Leistungsdaten (nutzt Status URL wenn leer)",restEnergyUrlHint:"Eigene URL für Energiedaten (nutzt Status URL wenn leer)",restEnergyHint:"Jeder Wert kann eine eigene URL verwenden oder auf die Status URL zurückgreifen. Multiplikatoren für Einheitenumrechnung verwenden (z.B. 0.001 für Wh zu kWh).",testConnection:"Verbindung testen",connectionSuccess:"Verbindung erfolgreich",noSwitchesInSwitchbar:"Keine Schalter in der Schaltleiste",enableSwitchbarHint:'"In Schaltleiste anzeigen" unter Einstellungen > Smart Plugs aktivieren'},notifications:{providerTypes:{callmebot:"CallMeBot/WhatsApp",ntfy:"ntfy",pushover:"Pushover",telegram:"Telegram",email:"E-Mail",discord:"Discord",webhook:"Webhook",homeassistant:"Home Assistant"},providerDescriptions:{email:"SMTP-E-Mail-Benachrichtigungen",telegram:"Benachrichtigungen über Telegram-Bot",discord:"An Discord-Kanal per Webhook senden",ntfy:"Kostenlose, selbst-hostbare Push-Benachrichtigungen",pushover:"Einfache, zuverlässige Push-Benachrichtigungen",callmebot:"Kostenlose WhatsApp-Benachrichtigungen über CallMeBot",webhook:"Generischer HTTP-POST an beliebige URL",homeassistant:"Dauerhafte Benachrichtigungen im Home Assistant Dashboard"},lastSuccess:"Zuletzt: {{date}}",error:"Fehler",printer:"Drucker:",allPrinters:"Alle Drucker",sendTestNotification:"Testbenachrichtigung senden",eventSettings:"Ereigniseinstellungen",enabled:"Aktiviert",sendFromProvider:"Benachrichtigungen von diesem Anbieter senden",printEvents:"Druckereignisse",printerStatus:"Druckerstatus",amsAlarms:"AMS-Alarme",amsHtAlarms:"AMS-HT-Alarme",printQueue:"Druckwarteschlange",start:"Start",plateCheck:"Plattenkontrolle",complete:"Abgeschlossen",failed:"Fehlgeschlagen",stopped:"Gestoppt",progress:"Fortschritt",offline:"Offline",lowFilament:"Filament niedrig",maintenance:"Wartung",amsHumidity:"AMS-Feuchtigkeit",amsTemp:"AMS-Temperatur",amsHtHumidity:"AMS-HT-Feuchtigkeit",amsHtTemp:"AMS-HT-Temperatur",bedCooled:"Bett abgekühlt",firstLayer:"Erste Schicht",quiet:"Ruhe",digest:"Zusammenfassung {{time}}",printStarted:"Druck gestartet",plateNotEmpty:"Platte nicht leer",plateNotEmptyDescription:"Objekte vor dem Druck erkannt",printCompleted:"Druck abgeschlossen",bedCooledLabel:"Bett abgekühlt",bedCooledDescription:"Bett nach dem Druck unter Schwellenwert abgekühlt",firstLayerCompleteLabel:"Erste Schicht fertig",firstLayerCompleteDescription:"Benachrichtigung mit Foto nach erster Schicht",missingSpoolAssignmentLabel:"Fehlende Spulenzuordnung",missingSpoolAssignmentDescription:"Benachrichtigen, wenn ein Druck startet und benoetigte Schaechte keine zugeordnete Spule haben",printFailed:"Druck fehlgeschlagen",printStopped:"Druck gestoppt",progressMilestones:"Fortschrittsmeilensteine",progressMilestonesDescription:"Benachrichtigung bei 25%, 50%, 75%",printerOffline:"Drucker offline",printerError:"Druckerfehler",lowFilamentLabel:"Filament niedrig",maintenanceDue:"Wartung fällig",maintenanceDueDescription:"Benachrichtigen, wenn Wartung erforderlich ist",amsHumidityHigh:"AMS-Feuchtigkeit hoch",amsHumidityHighDescription:"Normale AMS-Feuchtigkeit überschreitet Schwellenwert",amsTemperatureHigh:"AMS-Temperatur hoch",amsTemperatureHighDescription:"Normale AMS-Temperatur überschreitet Schwellenwert",amsHtHumidityHigh:"AMS-HT-Feuchtigkeit hoch",amsHtHumidityHighDescription:"AMS-HT-Feuchtigkeit überschreitet Schwellenwert",amsHtTemperatureHigh:"AMS-HT-Temperatur hoch",amsHtTemperatureHighDescription:"AMS-HT-Temperatur überschreitet Schwellenwert",inventoryAlerts:"Bestandswarnungen",stockReorderAlert:"Nachbestellungswarnung",stockReorderAlertDescription:"SKU hat seinen Nachbestellungspunkt erreicht",stockBreakAlert:"Bestandsunterbrechungswarnung",stockBreakAlertDescription:"Der Bestand wird vor dem Eintreffen der Nachbestellung aufgebraucht sein",jobAdded:"Auftrag hinzugefügt",jobAddedDescription:"Auftrag zur Warteschlange hinzugefügt",jobAssigned:"Auftrag zugewiesen",jobAssignedDescription:"Modellbasierter Auftrag einem Drucker zugewiesen",jobStarted:"Auftrag gestartet",jobStartedDescription:"Warteschlangenauftrag hat Druck begonnen",jobWaiting:"Auftrag wartet",jobWaitingDescription:"Auftrag wartet auf Filament oder Drucker",jobSkipped:"Auftrag übersprungen",jobSkippedDescription:"Auftrag übersprungen (vorheriger fehlgeschlagen)",jobFailed:"Auftrag fehlgeschlagen",jobFailedDescription:"Auftrag konnte nicht gestartet werden",queueComplete:"Warteschlange abgeschlossen",queueCompleteDescription:"Alle Warteschlangenaufträge beendet",quietHours:"Ruhezeiten",noNotificationsDuring:"Keine Benachrichtigungen während dieser Zeiten",editProviderToChangeQuietHours:"Anbieter bearbeiten, um Ruhezeiten zu ändern",dailyDigest:"Tägliche Zusammenfassung",batchNotifications:"Benachrichtigungen zu einer täglichen Zusammenfassung bündeln",sendAt:"Senden um {{time}}",editProviderToChangeDigestTime:"Anbieter bearbeiten, um Zusammenfassungszeit zu ändern",edit:"Bearbeiten",deleteProvider:"Benachrichtigungsanbieter löschen",deleteConfirm:'Sind Sie sicher, dass Sie "{{name}}" löschen möchten? Dies kann nicht rückgängig gemacht werden.',delete:"Löschen",addTitle:"Benachrichtigungsanbieter hinzufügen",editTitle:"Benachrichtigungsanbieter bearbeiten",nameLabel:"Name *",namePlaceholder:"Meine Benachrichtigungen",providerTypeLabel:"Anbietertyp *",configuration:"Konfiguration",testConfiguration:"Konfiguration testen",printerFilter:"Druckerfilter",onlyFromPrinter:"Nur Benachrichtigungen für Ereignisse von diesem Drucker senden",quietHoursDnd:"Ruhezeiten (Nicht stören)",quietStart:"Start",quietEnd:"Ende",dailyDigestLabel:"Tägliche Zusammenfassung",sendDigestAt:"Zusammenfassung senden um",digestCollected:"Ereignisse werden gesammelt und als einzelne Zusammenfassung zu dieser Zeit gesendet",notificationEvents:"Benachrichtigungsereignisse",progressPercent:"(25 %, 50 %, 75 %)",bedCooledAfterPrint:"(nach Druckabschluss)",eventPriority:{sectionTitle:"ntfy-Priorität",helpNtfy:"Wähle eine Priorität pro aktiviertem Ereignis. ntfy nutzt diese, um Hinweise (Ton, Sichtbarkeit, Push-Verhalten) zu eskalieren. Hier nicht gesetzte Stufen verwenden den ntfy-Server-Standard.",min:"Min.",low:"Niedrig",default:"Standard",high:"Hoch",urgent:"Dringend"},cancel:"Abbrechen",save:"Speichern",add:"Hinzufügen",nameRequired:"Name ist erforderlich",fieldRequired:"{{field}} ist erforderlich",phoneNumber:"Telefonnummer",apiKey:"API-Schlüssel",serverUrl:"Server-URL",topic:"Thema",authToken:"Auth-Token",userKey:"Benutzerschlüssel",appToken:"App-Token",priority:"Priorität",botToken:"Bot-Token",chatId:"Chat-ID",smtpServer:"SMTP-Server",smtpPort:"SMTP-Port",security:"Sicherheit",authentication:"Authentifizierung",username:"Benutzername",password:"Passwort",fromEmail:"Absender-E-Mail",toEmail:"Empfänger-E-Mail",webhookUrl:"Webhook-URL",payloadFormat:"Payload-Format",authorization:"Autorisierung",titleFieldName:"Titel-Feldname",messageFieldName:"Nachrichten-Feldname",editTemplate:"Vorlage bearbeiten: {{name}}",titleLabel:"Titel",bodyLabel:"Inhalt",titlePlaceholder:"Benachrichtigungstitel...",bodyPlaceholder:"Benachrichtigungsinhalt...",availableVariables:"Verfügbare Variablen",clickToInsert:"Klicken, um an Cursorposition im Inhalt einzufügen",livePreview:"Live-Vorschau",hide:"Ausblenden",show:"Anzeigen",loadingPreview:"Vorschau wird geladen...",enterTemplateContent:"Vorlageninhalt eingeben, um Vorschau zu sehen",titlePreview:"Titel:",bodyPreview:"Inhalt:",resetToDefault:"Auf Standard zurücksetzen",titleRequired:"Titel ist erforderlich",bodyRequired:"Inhalt ist erforderlich",notificationLog:"Benachrichtigungsprotokoll",showFailedOnly:"Nur fehlgeschlagene",last24Hours:"Letzte 24 Stunden",last7Days:"Letzte 7 Tage",last30Days:"Letzte 30 Tage",last90Days:"Letzte 90 Tage",justNow:"Gerade eben",noFailedNotifications:"Keine fehlgeschlagenen Benachrichtigungen",noNotificationsLogged:"Keine Benachrichtigungen protokolliert",unknownProvider:"Unbekannter Anbieter",logTitle:"Titel",logMessage:"Nachricht",logError:"Fehler",logProvider:"Anbieter: {{type}}",logTime:"Zeit: {{time}}",refresh:"Aktualisieren",clearOld:"Alte löschen",statsSummary:"Letzte {{days}} Tage:",statsNotifications:"Benachrichtigungen",statsSent:"{{count}} gesendet",statsFailed:"{{count}} fehlgeschlagen",eventTypes:{print_start:"Druck gestartet",print_complete:"Druck abgeschlossen",print_failed:"Druck fehlgeschlagen",print_stopped:"Druck gestoppt",print_progress:"Fortschritt",printer_offline:"Drucker offline",printer_error:"Druckerfehler",filament_low:"Filament niedrig",maintenance_due:"Wartung fällig",test:"Test"},userEmail:{title:"Benachrichtigungen",emailNotifications:"E-Mail-Benachrichtigungen",emailNotificationsDesc:"Erhalten Sie E-Mail-Benachrichtigungen für Ihre eigenen Druckaufträge. E-Mails werden über die in der erweiterten Authentifizierung konfigurierten SMTP-Einstellungen gesendet.",sendingTo:"Benachrichtigungen werden gesendet an",noEmailWarning:"Ihr Konto hat keine E-Mail-Adresse. Wenden Sie sich an einen Administrator, um eine hinzuzufügen.",printJobNotifications:"Druckauftrags-Benachrichtigungen",printJobNotificationsDesc:"Wählen Sie aus, welche Ereignisse E-Mail-Benachrichtigungen für von Ihnen gesendete Druckaufträge auslösen.",printJobStarts:"Druckauftrag startet",printJobStartsDesc:"Benachrichtigt werden, wenn Ihr Druckauftrag beginnt.",printJobFinishes:"Druckauftrag fertig",printJobFinishesDesc:"Benachrichtigt werden, wenn Ihr Druckauftrag erfolgreich abgeschlossen wurde.",printErrors:"Druckfehler",printErrorsDesc:"Benachrichtigt werden, wenn Ihr Druckauftrag fehlschlägt oder auf einen Fehler stößt.",printJobStops:"Druckauftrag gestoppt",printJobStopsDesc:"Benachrichtigt werden, wenn Ihr Druckauftrag abgebrochen oder gestoppt wird.",saveSuccess:"Benachrichtigungseinstellungen gespeichert.",saveError:"Benachrichtigungseinstellungen konnten nicht gespeichert werden."}},richTextEditor:{bold:"Fett",italic:"Kursiv",underline:"Unterstrichen",bulletList:"Aufzählungsliste",numberedList:"Nummerierte Liste",alignLeft:"Linksbündig",alignCenter:"Zentriert",alignRight:"Rechtsbündig",addLink:"Link hinzufügen",removeLink:"Link entfernen"},externalLinks:{noLinksConfigured:"Keine externen Links konfiguriert",deleteLink:"Link löschen",removeCustomIcon:"Benutzerdefiniertes Symbol entfernen",openInNewTab:"In neuem Tab öffnen",placeholders:{linkName:"Mein Link"}},keyboardShortcuts:{title:"Tastaturkürzel",navigation:"Navigation",archivesSection:"Archive",kProfilesSection:"K-Profile",generalSection:"Allgemein",shortcuts:{goToPrinters:"Zu Drucker gehen",goToArchives:"Zu Archiv gehen",goToQueue:"Zur Warteschlange gehen",goToStats:"Zu Statistiken gehen",goToProfiles:"Zu Cloud-Profilen gehen",goToSettings:"Zu Einstellungen gehen",focusSearch:"Suche fokussieren",openUploadModal:"Upload-Modal öffnen",clearSelection:"Auswahl löschen / Eingabe aufheben",contextMenu:"Kontextmenü auf Karten",refreshProfiles:"Profile aktualisieren",newProfile:"Neues Profil",exitSelectionMode:"Auswahlmodus beenden",showHelp:"Diese Hilfe anzeigen"},footer:"Drücken Sie Esc oder klicken Sie außerhalb, um zu schließen"},notificationLog:{title:"Benachrichtigungsprotokoll",events:{printStarted:"Druck gestartet",printComplete:"Druck abgeschlossen",printFailed:"Druck fehlgeschlagen",printStopped:"Druck gestoppt",progress:"Fortschritt",printerOffline:"Drucker offline",printerError:"Druckerfehler",lowFilament:"Wenig Filament",maintenanceDue:"Wartung fällig",test:"Test"},timeAgo:{justNow:"Gerade eben",minutesAgo:"vor {{minutes}}m",hoursAgo:"vor {{hours}}h"}},restoreBackup:{title:"Backup wiederherstellen",restoring:"Wird wiederhergestellt...",restoreComplete:"Wiederherstellung abgeschlossen",restoreFailed:"Wiederherstellung fehlgeschlagen",importSettings:"Einstellungen aus Backup-Datei importieren",pleaseWait:"Bitte warten Sie, während Ihre Daten wiederhergestellt werden",clickToSelect:"Klicken Sie, um Backup-Datei auszuwählen (.json oder .zip)",howDuplicateHandling:"So funktioniert die Duplikatbehandlung:",categories:{printers:"Drucker",smartPlugs:"Smart Plugs",notificationProviders:"Benachrichtigungsanbieter",filaments:"Filamente",archives:"Archive",pendingUploads:"Ausstehende Uploads",settingsTemplates:"Einstellungen & Vorlagen"},matchingInfo:{printers:"abgeglichen nach Seriennummer",smartPlugs:"abgeglichen nach IP-Adresse",notificationProviders:"abgeglichen nach Name",filaments:"abgeglichen nach Name + Typ + Marke",archives:"abgeglichen nach Inhalts-Hash",pendingUploads:"abgeglichen nach Dateiname",settingsTemplates:"immer überschrieben"},replaceExisting:"Vorhandene Daten ersetzen",keepExisting:"Vorhandene Daten behalten",replaceDescription:"Bereits vorhandene Elemente mit Backup-Daten überschreiben",keepDescription:"Nur Elemente wiederherstellen, die noch nicht existieren",caution:"Vorsicht:",cautionText:"Das Überschreiben ersetzt Ihre aktuellen Konfigurationen durch Backup-Daten. Drucker-Zugangscodes werden aus Sicherheitsgründen niemals überschrieben.",itemsRestored:"Wiederhergestellte Elemente",itemsSkipped:"Übersprungene Elemente",restored:"Wiederhergestellt",skipped:"Übersprungen (existieren bereits)",filesLabel:"Dateien (3MF, Thumbnails, etc.)",newApiKeysGenerated:"Neue API-Schlüssel generiert",newApiKeysWarning:"Diese Schlüssel werden nur einmal angezeigt. Kopieren Sie sie jetzt!",processingBackup:"Backup-Datei wird verarbeitet...",noDataFound:"In der Backup-Datei wurden keine wiederherzustellenden Daten gefunden.",failedToRestore:"Backup konnte nicht wiederhergestellt werden. Bitte überprüfen Sie das Dateiformat."},backupExport:{title:"Backup exportieren",selectData:"Zu exportierende Daten auswählen",selectAll:"Alle auswählen",selectNone:"Keine auswählen",categoryDescriptions:{settings:"Sprache, Theme, Update-Einstellungen",notifications:"ntfy, Pushover, Discord, usw.",templates:"Benutzerdefinierte Nachrichtenvorlagen",smartPlugs:"Tasmota-Plug-Konfigurationen",externalLinks:"Seitenleiste Links zu externen Diensten",printers:"Druckerinformationen (Zugangscodes ausgeschlossen)",plateDetection:"Leere Platten-Referenzbilder",filaments:"Filamenttypen und -kosten",maintenance:"Benutzerdefinierte Wartungspläne",archives:"Alle Druckdaten + Dateien (3MF, Thumbnails, Fotos)",projects:"Projekte, BOM-Elemente und Anhänge",pendingUploads:"Virtueller Drucker-Uploads zur Überprüfung",apiKeys:"Webhook-API-Schlüssel (neue Schlüssel bei Import generiert)"},requiresPrinters:"Drucker müssen ausgewählt sein",zipFileWarning:"ZIP-Datei wird erstellt.",zipFileDescription:"Enthält alle 3MF-Dateien, Thumbnails, Zeitraffer und Fotos. Dies kann eine Weile dauern und zu einer großen Datei führen.",includeAccessCodes:"Zugangscodes einschließen",includeAccessCodesDescription:"Für die Übertragung auf eine andere Maschine",includeAccessCodesWarning:"Zugangscodes werden im Klartext eingeschlossen. Bewahren Sie diese Backup-Datei sicher auf!",categoriesSelected:"{{selectedCount}} Kategorien ausgewählt"},pendingUploads:{placeholders:{notes:"Notizen zu diesem Druck hinzufügen..."},discardUpload:"Upload verwerfen",archiveAllUploads:"Alle Uploads archivieren",discardAllUploads:"Alle Uploads verwerfen",archive:"Archivieren",timeAgo:{justNow:"Gerade eben",minutesAgo:"vor {{minutes}}m",hoursAgo:"vor {{hours}}h",daysAgo:"vor {{days}}d"}},apiBrowser:{placeholders:{requestBody:"JSON-Anforderungstext...",searchEndpoints:"Endpunkte suchen..."}},configureAmsSlot:{title:"AMS-Slot konfigurieren",slotConfigured:"Slot konfiguriert!",configuringSlot:"Slot wird konfiguriert:",slotLabel:"{{ams}} – Slot {{slot}}",searchPresets:"Voreinstellungen suchen...",colorPlaceholder:"Farbname oder Hex (z.B. braun, FF8800)",clearCustomColor:"Benutzerdefinierte Farbe löschen",noCloudPresets:"Keine Cloud-Voreinstellungen. Melden Sie sich bei Bambu Cloud an, um zu synchronisieren.",noPresetsAvailable:"Keine Voreinstellungen verfügbar. Melden Sie sich bei Bambu Cloud an oder importieren Sie lokale Profile.",noMatchingPresets:"Keine passenden Voreinstellungen gefunden.",custom:"Benutzerdefiniert",builtin:"Integriert",settingsSentToPrinter:"Einstellungen an Drucker gesendet",filamentProfile:"Filamentprofil",kProfileLabel:"K-Profil (Pressure Advance)",filteringFor:"Filtern nach: {{material}}",noKProfile:"Kein K-Profil (Standard 0.020 verwenden)",noMatchingKProfiles:"Keine passenden K-Profile gefunden. Standard K=0.020 wird verwendet.",selectFilamentFirst:"Zuerst ein Filamentprofil auswählen",kFromCalibration:"K={{value}} aus Druckerkalibrierung",customColorLabel:"Benutzerdefinierte Farbe (optional)",presetColors:"{{name}} Farben:",showLessColors:"Weniger Farben anzeigen",showMoreColors:"Mehr Farben anzeigen",clear:"Löschen",hexLabel:"Hex – #{{hex}}",resetting:"Wird zurückgesetzt...",resetSlot:"Slot zurücksetzen",cancel:"Abbrechen",configuring:"Wird konfiguriert...",configureSlot:"Slot konfigurieren"},githubBackup:{title:"Git-Backup",history:"Verlauf",downloadBackup:"Backup herunterladen",restoreBackup:"Backup wiederherstellen",noBackupsYet:"Noch keine Backups"},emailSettings:{placeholders:{fromName:"Bambuddy"}},tagManagement:{searchTags:"Tags suchen...",renameTag:"Tag umbenennen",deleteTag:"Tag löschen"},notificationTemplates:{placeholders:{title:"Benachrichtigungstitel...",body:"Benachrichtigungstext..."}},batchTag:{placeholders:{newTag:"Neuen Tag eingeben..."}},photoGallery:{deletePhoto:"Foto löschen"},filamentHoverCard:{copySpoolUuid:"Spulen-UUID kopieren"},kProfilesView:{hasNote:"Hat Notiz",copyProfile:"Profil kopieren"},layout:{openMenu:"Menü öffnen",noPermissionSystemInfo:"Sie haben keine Berechtigung zum Anzeigen von Systeminformationen"},dashboard:{dragToReorder:"Ziehen zum Neuordnen",hideWidget:"Widget ausblenden"},notificationProviderCard:{deleteNotificationProvider:"Benachrichtigungsanbieter löschen"},fileManagerModal:{closeFileManager:"Dateimanager schließen",sortFiles:"Dateien sortieren",goToParentFolder:"Zum übergeordneten Ordner gehen",threeView:"3D-Ansicht"},embeddedCameraViewer:{refreshStream:"Stream aktualisieren",close:"Schließen",zoomOut:"Verkleinern",resetZoom:"Zoom zurücksetzen",zoomIn:"Vergrößern",dragToResize:"Ziehen zum Größe ändern"},timelapseViewer:{skipBack5s:"5s zurückspringen",skipForward5s:"5s vorspringen"},notificationProviders:{descriptions:{email:"SMTP-E-Mail-Benachrichtigungen",telegram:"Benachrichtigungen über Telegram-Bot",discord:"An Discord-Kanal über Webhook senden",ntfy:"Kostenlose, selbst hostbare Push-Benachrichtigungen",pushover:"Einfache, zuverlässige Push-Benachrichtigungen",callmebot:"Kostenlose WhatsApp-Benachrichtigungen über CallMeBot",webhook:"Generischer HTTP POST zu beliebiger URL"}},logViewer:{searchPlaceholder:"Nachricht oder Logger-Name suchen...",noLogEntries:"Keine Logeinträge gefunden"},switchbarPopover:{noSwitchesInSwitchbar:"Keine Schalter in Schalterleiste"},projectPageModal:{placeholders:{title:"Titel",designer:"Designer",license:"Lizenz",description:"Beschreibung eingeben...",profileTitle:"Profil-Titel",profileDescription:"Profilbeschreibung..."}},spoolmanSettings:{},time:{unknown:"-",waiting:"Wartend",justNow:"Gerade eben",now:"Jetzt",minsAgo:"vor {{count}}m",inMins:"in {{count}}min",hoursAgo:"vor {{count}}h",inHours:"in {{count}}Std",daysAgo:"vor {{count}}d",inDays:"in {{count}}T"},spoolbuddy:{nav:{dashboard:"Übersicht",ams:"AMS",inventory:"Inventar",writeTag:"Schreiben",settings:"Einstellungen"},status:{nfcReady:"NFC bereit",nfcOff:"NFC aus",offline:"Offline",online:"Online",noPrinters:"Keine Drucker",deviceOffline:"Gerät offline",waitingConnection:"Warte auf Geräteverbindung...",systemReady:"System bereit",status:"Status"},dashboard:{readyToScan:"Bereit zum Scannen",idleMessage:"Spule auf die Waage legen zum Identifizieren",nfcHint:"NFC-Tag wird automatisch gelesen",device:"Gerät",syncWeight:"Gewicht sync.",weightSynced:"Synchronisiert!",unknownTag:"Unbekannter Tag",newTag:"Neuer Tag erkannt",onScale:"auf der Waage",linkSpool:"Mit Spule verknüpfen",linkTagTitle:"Tag mit Spule verknüpfen",linkTag:"Tag verknüpfen",selectSpool:"Spule zum Verknüpfen auswählen:",noUntagged:"Keine Spulen ohne Tags gefunden",tagDetected:"Tag erkannt",noTag:"Kein Tag",tagId:"Tag",grossWeight:"Bruttogewicht",spoolSize:"Spulengröße",close:"Schließen",currentSpool:"Aktuelle Spule",plateReady:"Druckplatte bereit: {{name}}",plateReadyLabel:"Bereit-zum-Quittieren-Liste",plateClearAction:"Frei",plateClearedToast:"Druckplatte als geleert markiert",plateClearFailed:"Druckplatte konnte nicht als geleert markiert werden"},modal:{spoolDetected:"Spule erkannt",assignToAms:"AMS zuweisen",syncWeight:"Gewicht sync.",weightSynced:"Synchronisiert!",syncing:"Synchronisiere...",newTagDetected:"Neuer Tag erkannt",addToInventory:"Zum Inventar hinzufügen",assignToAmsTitle:"AMS zuweisen",selectSlot:"Slot auswählen",assign:"Zuweisen",assigning:"Zuweisen...",assignSuccess:"Zugewiesen!",assignPendingInsert:"Zugewiesen. Slot wird beim Einsetzen der Spule konfiguriert.",assignError:"Fehler beim Zuweisen. Bitte erneut versuchen.",noPrinterSelected:"Drucker auswählen...",noAmsDetected:"Kein AMS an diesem Drucker erkannt",slot:"Slot"},weight:{noReading:"Kein Messwert",stable:"Stabil",measuring:"Messen...",tare:"Tarieren",calibrate:"Kalibrieren"},spool:{remaining:"Verbleibend",material:"Material",brand:"Marke",color:"Farbe",coreWeight:"Kern",labelWeight:"Etikett",scaleWeight:"Waage",netWeight:"Netto",lastUsed:"Zuletzt verwendet"},ams:{noData:"Kein AMS erkannt",connectAms:"AMS anschließen um Filament-Slots zu sehen",noPrinter:"Kein Drucker ausgewählt",selectPrinter:"Drucker in der oberen Leiste auswählen",printerDisconnected:"Drucker getrennt",humidity:"Feuchtigkeit",level:"Stufe",active:"Aktiv",slot:"Slot",empty:"Leer"},inventory:{search:"Spulen suchen...",empty:"Keine Spulen im Inventar",noResults:"Keine passenden Spulen",spools:"Spulen",addSpool:"Spule hinzufügen"},settings:{tabDevice:"Gerät",tabDisplay:"Anzeige",tabScale:"Waage",tabUpdates:"Aktualisierungen",nfcReader:"NFC-Leser",type:"Typ",connection:"Verbindung",notConnected:"N/V",deviceInfo:"Geräteinfo",hostname:"Host",uptime:"Betriebszeit",systemConfig:"Backend & Auth",backendUrl:"Bambuddy Backend URL",apiToken:"API-Token",apiTokenPlaceholder:"API-Token eingeben",saveConfig:"Konfiguration speichern",systemQueued:"Konfiguration in Warteschlange.",nfcDiagnostic:"NFC-Diagnose",scaleDiagnostic:"Waagen-Diagnose",readTagDiagnostic:"Tag-Lese-Diagnose",testNfc:"Leser testen",testScale:"Genauigkeit testen",testReadTag:"Tag lesen",systemFieldsRequired:"Backend-URL ist erforderlich.",brightness:"Helligkeit",saved:"Gespeichert",noBacklight:"Keine DSI-Hintergrundbeleuchtung erkannt. Helligkeitssteuerung erfordert ein DSI-Display.",screenBlank:"Bildschirm-Abschaltzeit",screenBlankDesc:"Bildschirm schaltet sich nach Inaktivität ab. Zum Aufwecken berühren.",displayNote:"Helligkeit wird als Software-Filter angewendet.",scaleCalibration:"Waagen-Kalibrierung",currentWeight:"Aktuelles Gewicht",tareOffset:"Tara",calFactor:"Faktor",knownWeight:"Bekanntes Gewicht",calStep1:"Alle Gegenstände von der Waage entfernen und Nullpunkt setzen.",calStep2:"Bekanntes Gewicht auf die Waage legen.",setZero:"Nullpunkt setzen",calibrateNow:"Kalibrieren",calibrated:"Kalibriert",tareSet:"Tara-Befehl gesendet. Warte auf Gerät...",tareComplete:"Tara abgeschlossen!",tareTimedOut:"Tara-Zeitüberschreitung — läuft der SpoolBuddy-Daemon?",tareFailed:"Tara-Befehl fehlgeschlagen",zeroSet:"Nullpunkt gesetzt. Bekanntes Gewicht auf die Waage legen.",calibrationDone:"Kalibrierung abgeschlossen!",calibrationFailed:"Kalibrierung fehlgeschlagen",lastCalibrated:"Zuletzt kalibriert",stable:"Stabil",settling:"Stabilisierung...",firmware:"Firmware",scale:"Waage",noDevice:"Kein SpoolBuddy-Gerät gefunden",daemonVersion:"Daemon-Version",currentVersion:"Aktuell",versionPending:"Warte auf Daemon...",checking:"Prüfe...",checkUpdates:"Nach Updates suchen",updateAvailable:"Update verfügbar",updateInstructions:"Update per SSH: SpoolBuddy-Installationsskript ausführen.",upToDate:"Aktuell",includeBeta:"Beta-Versionen einschließen"},writeTag:{tabExisting:"Vorhandene Spule",tabNew:"Neue Spule",tabReplace:"Tag ersetzen",searchPlaceholder:"Suche nach Material, Farbe, Marke...",noUntaggedSpools:"Keine Spulen ohne Tags",noTaggedSpools:"Keine Spulen mit Tags",selectSpool:"Spule auswählen, dann einen NTAG auf den Leser legen",placeTag:"NTAG auf den Leser legen",tagReady:"Tag erkannt — bereit zum Schreiben",writeTag:"Tag beschreiben",replaceTag:"Tag ersetzen",writing:"Tag wird beschrieben...",waiting:"Warte auf SpoolBuddy...",writeSuccess:"Tag erfolgreich beschrieben!",writeFailed:"Schreiben fehlgeschlagen",queueFailed:"Schreibbefehl konnte nicht eingereiht werden",tryAgain:"Erneut versuchen",cancel:"Abbrechen",replaceWarning:"Alter Tag wird getrennt. Neuer Tag ersetzt ihn.",deviceOffline:"SpoolBuddy ist offline",material:"Material",colorName:"Farbname",color:"Farbe",brand:"Marke",weight:"Gewicht (g)",createSpool:"Spule erstellen",creating:"Wird erstellt...",spoolCreated:"Spule erstellt! Bereit zum Schreiben.",createFailed:"Spule konnte nicht erstellt werden",incompleteDataWarning:"Tag mit unvollständigen Spoolman-Daten geschrieben"},quickMenu:{printerPower:"Drucker-Strom",systemControls:"System",restartDaemon:"Daemon neustarten",restartBrowser:"Browser neustarten",reboot:"Neustart",shutdown:"Herunterfahren",swipeToClose:"Nach unten wischen zum Schließen",confirmTitle:"Bestätigen",confirmShutdown:"Möchten Sie das SpoolBuddy wirklich herunterfahren? Sie benötigen physischen Zugang, um es wieder einzuschalten.",confirmReboot:"Möchten Sie das SpoolBuddy wirklich neu starten?",confirmRestartDaemon:"SpoolBuddy-Daemon neustarten? NFC und Waage sind vorübergehend nicht verfügbar.",confirmRestartBrowser:"Kiosk-Browser neustarten? Das Display wird kurz schwarz.",confirm:"Bestätigen",confirmPlugOn:"{{name}} einschalten?",confirmPlugOff:"{{name}} ausschalten?",turnOn:"Einschalten",turnOff:"Ausschalten"}},diagnostic:{modalTitle:"Verbindungsdiagnose — {{name}}",running:"Diagnose läuft...",runningElapsed:"Diagnose läuft... ({{elapsed}}s)",waitingForReportHint:"Warten darauf, dass der Drucker einen Statusbericht sendet — kann bis zu {{max}} Sekunden dauern.",runFailed:"Diagnose konnte nicht ausgeführt werden: {{error}}",retry:"Erneut ausführen",runButton:"Diagnose ausführen",sectionTitle:"Verbindungsdiagnose",sectionDescription:"Prüfen, warum ein Drucker keine Verbindung herstellt oder nicht druckt — Port-Erreichbarkeit, LAN-Entwicklermodus, Docker-Netzwerkmodus und Zugangsdaten.",noPrinters:"Keine Drucker konfiguriert.",overall:{ok:"Keine Probleme gefunden — die Druckerverbindung sieht gut aus.",warnings:"Der Drucker sollte funktionieren, aber einige Punkte erfordern Aufmerksamkeit.",problems:"Probleme gefunden, die erklären, warum der Drucker keine Verbindung herstellt oder nicht druckt."},check:{port_mqtt:{title:"Steuerungsport (MQTT 8883)",pass:"Erreichbar — der Drucker akzeptiert Steuerungsverbindungen.",fail:"Port 8883 ist nicht erreichbar. Der Drucker ist ausgeschaltet, hat eine andere IP-Adresse oder eine Firewall blockiert ihn. Überprüfen Sie die Drucker-IP und dass nichts Port 8883 blockiert."},port_ftps:{title:"Dateiübertragungsport (FTPS 990)",pass:"Erreichbar — das Senden von Druckdateien funktioniert.",warn:"Port 990 ist nicht erreichbar. Die Überwachung funktioniert möglicherweise weiterhin, aber das Senden von Drucken an den Drucker schlägt fehl. Stellen Sie sicher, dass Port 990 nicht blockiert ist."},external_storage:{title:"Gesendete Dateien auf externem Speicher speichern (Installationsschritt 4)",pass:"Der Drucker meldet, dass diese Option aktiv ist — gesendete Dateien werden auf der SD-Karte gespeichert und Archive enthalten Vorschaubilder und Slicer-Metadaten.",fail:'Der Drucker meldet, dass diese Option deaktiviert ist. Aktivieren Sie "Gesendete Dateien auf externem Speicher speichern" — bei neuer Firmware (P2S 01.02 / Bambu Studio 2.6+) liegt der Schalter in den Druckeinstellungen des Druckers, bei älteren Versionen im Geräte-Tab von Bambu Studio / OrcaSlicer. Ohne diese Option fehlen jedem archivierten Druck Vorschaubild und Slicer-Metadaten.',skip:"Nicht geprüft — eine aktive MQTT-Verbindung ist erforderlich. Bei älteren Slicern, in denen diese Einstellung nur im Slicer existiert, meldet sie der Drucker nicht — diese Prüfung besteht auch dann, wenn die Option deaktiviert ist. Prüfen Sie Installationsschritt 4 in diesem Fall manuell."},port_rtsps:{title:"Kameraport (RTSPS 322)",pass:"Erreichbar — der Kamerastream funktioniert.",warn:"Port 322 ist nicht erreichbar. Die Live-Kameraansicht funktioniert nicht. Dies betrifft das Drucken nicht."},network_mode:{title:"Docker-Netzwerkmodus",pass:"Läuft im Host-Netzwerkmodus.",warn:'Bambuddy läuft im Docker-Bridge-Netzwerkmodus. Die Druckererkennung und der virtuelle Drucker benötigen den Host-Netzwerkmodus — erstellen Sie den Container mit "network_mode: host" neu.',skip:"Läuft nicht in Docker — nicht zutreffend."},subnet:{title:"Netzwerk-Subnetz",pass:"Drucker und Bambuddy befinden sich im selben Subnetz.",warn:"Der Drucker ({{printer_ip}}) und Bambuddy ({{host_ip}}) befinden sich in unterschiedlichen Subnetzen. Sie können sich möglicherweise nicht erreichen, sofern kein Routing zwischen den Subnetzen konfiguriert ist.",skip:"Subnetz konnte nicht ermittelt werden — übersprungen."},mqtt_auth:{title:"Drucker-Zugangsdaten",pass:"Der Drucker hat die Verbindung akzeptiert.",fail:"Der Drucker ist erreichbar, hat die Verbindung aber abgelehnt. Der Zugangscode oder die Seriennummer ist höchstwahrscheinlich falsch. Der Zugangscode ändert sich bei jedem Umschalten des Entwicklermodus — kopieren Sie ihn erneut vom Druckerbildschirm.",skip:"Nicht geprüft — der Drucker konnte nicht erreicht werden."},developer_mode:{title:"LAN-Entwicklermodus",pass:"Der Entwicklermodus ist aktiviert.",fail:"Der Entwicklermodus ist am Drucker AUS. Aktivieren Sie ihn in den LAN-Einstellungen des Druckers — und bestätigen Sie mit OK. Ohne ihn starten Drucke nicht.",skip:"Konnte nicht geprüft werden — erfordert eine aktive Verbindung zum Drucker."},printer_publishing:{title:"Drucker sendet Statusmeldungen",pass:"Der Drucker sendet Statusmeldungen — AMS, Filamente und K-Profile werden korrekt zum Slicer gespiegelt.",fail:"Der MQTT-Broker hat die Verbindung akzeptiert, der Drucker sendet aber keine Statusmeldungen. Fast immer liegt eine falsche oder falsch geschriebene Seriennummer vor — das Topic device//api/v1/metrics para la supervisión con Prometheus/Grafana.",bearerTokenOptional:"Bearer Token (opcional)",bearerTokenHint:"Si se establece, las solicitudes deben incluir Authorization: Bearer ",metricsConnectionStatus:"Estado de la conexión",metricsPrinterState:"Estado de la impresora (inactiva/imprimiendo/etc.)",metricsPrintProgress:"Progreso de la impresión 0-100%",metricsBedTemp:"Temperatura de la cama",metricsNozzleTemp:"Temperatura de la boquilla",metricsPrintsTotal:"Total de impresiones por resultado",metricsMore:"...y más (capas, ventiladores, cola, uso de filamento)",smartPlugsDescription:"Conecte enchufes inteligentes (Tasmota o Home Assistant) para automatizar el control de la alimentación y realizar el seguimiento del consumo de energía de sus impresoras.",allOn:"Encender todo",allOff:"Apagar todo",addSmartPlug:"Añadir enchufe inteligente",energySummary:"Resumen de energía",currentPower:"Potencia actual",plugsOnline:"{{reachable}}/{{total}} enchufes en línea",today:"Hoy",yesterday:"Ayer",total:"Total",enablePlugsForSummary:"Active enchufes para ver el resumen de energía",addNotificationProvider:"Añadir",systemBadge:"(Sistema)",creating:"Creando...",changing:"Cambiando...",deleteUserAndItems:"Eliminar el usuario Y sus elementos",deleteUserKeepItems:"Eliminar el usuario, conservar los elementos (quedan sin propietario)",ok:"Aceptar",twoFa:{totpTitle:"Aplicación de autenticación (TOTP)",totpDesc:"Use una aplicación de autenticación como Google Authenticator, Aegis o Authy.",emailOtpTitle:"OTP por correo",emailOtpDesc:"Enviar un código de un solo uso a {{email}} cuando inicie sesión.",emailOtpNoEmail:"Añada una dirección de correo a su cuenta para habilitar este método.",addEmailFirst:"Su cuenta no tiene dirección de correo. Pida a un administrador que añada una antes de activar el OTP por correo.",setupTotp:"Configurar la aplicación de autenticación",setupAuthApp:"Configurar la aplicación de autenticación",setupInstructions:"Escanee el código QR de abajo con su aplicación de autenticación y luego confirme con un código.",manualEntry:"¿No puede escanear? Introduzca este secreto manualmente:",scannedContinue:"He escaneado el código — continuar",enterCodeToConfirm:"Introduzca el código de 6 dígitos de su aplicación de autenticación para confirmar la configuración.",activate:"Activar",disableTotp:"Desactivar el autenticador",disableConfirmHint:"Introduzca un código TOTP válido o un código de respaldo para desactivar el autenticador.",totpDisabled:"Aplicación de autenticación desactivada.",emailOtpEnabled:"OTP por correo activado.",emailOtpDisabled:"OTP por correo desactivado.",smtpRequired:"Configure y pruebe primero los ajustes de SMTP.",invalidCode:"Código no válido. Inténtelo de nuevo.",enableEmailOtp:"Activar el OTP por correo",disableEmailOtp:"Desactivar el OTP por correo",emailSetupEnterCode:"Se ha enviado un código de verificación a su dirección de correo. Introdúzcalo a continuación para confirmar que es el propietario de este buzón.",verifyAndEnable:"Verificar y activar",emailDisablePasswordHint:"Introduzca la contraseña de su cuenta para confirmar la desactivación del OTP por correo.",passwordPlaceholder:"Introduzca su contraseña",backupCodesTitle:"Guarde sus códigos de respaldo",backupCodesWarning:"Guarde estos códigos en un lugar seguro. Cada código solo se puede usar una vez y no se volverán a mostrar.",backupCodesRemaining:"Quedan {{count}} códigos de respaldo",savedCodes:"He guardado mis códigos",regenBackup:"Regenerar los códigos de respaldo",regenBackupHint:"Introduzca su código TOTP actual para generar 10 códigos de respaldo nuevos. Todos los códigos de respaldo existentes quedarán invalidados.",newBackupCodes:"Nuevos códigos de respaldo",linkedAccounts:"Cuentas de SSO vinculadas",linkedAccountsDesc:"Estos proveedores de identidad externos están vinculados a su cuenta.",oidcUnlinked:"Cuenta desvinculada."},oidc:{title:"Proveedores SSO / OIDC",desc:"Configure proveedores de OpenID Connect para permitir el inicio de sesión único mediante proveedores de identidad externos.",addProvider:"Añadir proveedor",newProvider:"Nuevo proveedor",empty:"Aún no hay proveedores OIDC configurados.",created:"Proveedor creado.",updated:"Proveedor actualizado.",deleted:"Proveedor eliminado.",refreshIcon:"Actualizar icono",removeIcon:"Quitar icono",iconRefreshed:"Icono actualizado.",iconRemoved:"Icono eliminado.",iconFetchFailed:"No se pudo obtener el icono de la URL del proveedor.",deleteTitle:"Eliminar proveedor",deleteMessage:'¿Eliminar "{{name}}"? Todas las cuentas de usuario vinculadas se desconectarán.',form:{name:"Nombre visible",issuerUrl:"URL del emisor",clientId:"ID de cliente",clientSecret:"Secreto de cliente",scopes:"Ámbitos",iconUrl:"URL del icono (opcional)",enabled:"Activado",autoCreate:"Crear usuarios automáticamente",autoCreateDesc:"Crear automáticamente una cuenta local en el primer inicio de sesión.",autoLink:"Vincular cuentas existentes automáticamente",autoLinkDesc:"Vincular cuentas locales existentes haciendo coincidir el correo en el primer inicio de sesión.",secretHint:"dejar en blanco para conservar el actual",secretPlaceholder:"nuevo secreto",emailClaim:"Claim de correo",emailClaimDesc:"Claim de JWT usado como identidad de correo. Use «preferred_username» o «upn» para Azure Entra ID (que no envía email_verified). Use solo nombres de claim de confianza.",emailClaimPlaceholder:"correo",emailClaimCustomClaimAutoLinkWarning:"Los claims personalizados solo son seguros para la vinculación automática cuando el valor lo administra el inquilino (p. ej. upn / preferred_username de Azure Entra ID). No active la vinculación automática si su IdP permite a los usuarios autoasignarse este claim.",requireEmailVerified:"Requerir correo verificado",requireEmailVerifiedDesc:"Aceptar el claim de correo solo cuando el proveedor lo marca como verificado.",requireEmailVerifiedWarning:"Advertencia: el correo se aceptará incluso sin verificación. Úselo solo con proveedores de confianza.",requireEmailVerifiedAutoLink:"Desactive primero la vinculación automática para cambiar este ajuste.",defaultGroup:"Grupo predeterminado",defaultGroupDesc:"Grupo asignado a los usuarios creados automáticamente. Si no se establece, se usa Visores como alternativa.",defaultGroupViewersFallback:"Visores (predeterminado)"}},encryption:{title:"Estado del cifrado de MFA",enabledFromEnv:"Cifrado en reposo activado (clave de la variable de entorno MFA_ENCRYPTION_KEY)",enabledFromFile:"Cifrado en reposo activado (clave cargada del directorio de datos)",enabledGenerated:"Cifrado en reposo activado con una clave autogenerada",notConfigured:"Cifrado en reposo no configurado",notConfiguredDesc:"Los secretos TOTP y los client_secrets de OIDC se almacenan en texto plano. Establezca MFA_ENCRYPTION_KEY o reinicie Bambuddy con un directorio de datos con permisos de escritura para generar una automáticamente.",allEncrypted:"Todos los secretos de MFA están cifrados en reposo.",legacyRowsLabel:"Filas heredadas en texto plano",encryptedRowsLabel:"Filas cifradas",legacyRowsWarning:"Se detectaron {{count}} fila(s) heredada(s) en texto plano. Vuelva a guardar el proveedor OIDC o vuelva a registrar la aplicación de autenticación del usuario para migrar al almacenamiento cifrado.",backupHint:"La clave autogenerada se almacena en DATA_DIR/.mfa_encryption_key y se incluye en los ZIP de copia de seguridad local. Mantenga sus copias de seguridad seguras o establezca MFA_ENCRYPTION_KEY de forma explícita.",decryptionBrokenTitle:"Falta la clave de cifrado",decryptionBrokenError:"{{count}} registro(s) cifrado(s) no se pueden descifrar porque la clave de cifrado ya no está disponible. Restaure la MFA_ENCRYPTION_KEY anterior o DATA_DIR/.mfa_encryption_key para recuperarlos.",migrationErrorWarning:"{{count}} fila(s) heredada(s) no se pudieron volver a cifrar al iniciar. Revise los registros del servidor y reinicie Bambuddy para reintentarlo."}},notification:{printStarted:{title:"Impresión iniciada",body:"{{printer}}: {{filename}} ha empezado a imprimirse"},printCompleted:{title:"Impresión completada",body:"{{printer}}: {{filename}} se completó correctamente"},printFailed:{title:"Impresión fallida",body:"{{printer}}: {{filename}} ha fallado"},printStopped:{title:"Impresión detenida",body:"{{printer}}: {{filename}} se detuvo"},printProgress:{title:"Progreso de la impresión",body:"{{printer}}: {{filename}} está al {{percent}}%"},printerOffline:{title:"Impresora desconectada",body:"{{printer}} está desconectada"},printerError:{title:"Error de la impresora",body:"{{printer}}: {{error}}"},filamentLow:{title:"Filamento bajo",body:"{{printer}}: el filamento se está agotando"},maintenanceDue:{title:"Mantenimiento pendiente",body:"{{printer}}: {{items}} necesitan atención"}},errors:{generic:"Algo salió mal",networkError:"Error de red. Compruebe su conexión.",notFound:"No encontrado",unauthorized:"No autorizado",serverError:"Error del servidor",validationError:"Compruebe los datos introducidos",printerConnectionFailed:"Error al conectar con la impresora",saveFailed:"Error al guardar los cambios",deleteFailed:"Error al eliminar",loadFailed:"Error al cargar los datos"},hmsErrors:{title:"Errores - {{name}}",noErrors:"No hay errores",viewOnWiki:"Ver en la wiki de Bambu Lab",clearInstructions:"Borre los errores en la impresora para descartarlos aquí.",clearErrors:"Borrar errores",clearSuccess:"Errores HMS borrados",clearFailed:"Error al borrar los errores HMS"},mqttDebug:{title:"Registro de depuración MQTT",searchPlaceholder:"Buscar tema o carga útil...",noMessages:"Aún no se han registrado mensajes",startLoggingHint:"Haga clic en «Iniciar registro» para empezar a capturar mensajes MQTT",noMessagesMatch:"Ningún mensaje coincide con su filtro",adjustFilterHint:"Pruebe a ajustar su búsqueda o los criterios del filtro",incoming:"Entrante",outgoing:"Saliente",loggingStopped:"Registro detenido",loggingActive:"Registro activo - los mensajes se actualizarán automáticamente",startLogging:"Iniciar registro",stopLogging:"Detener registro",clearLog:"Borrar registro",topic:"Tema",timestamp:"Marca de tiempo",direction:"Dirección",all:"Todos"},printerFiles:{title:"Gestor de archivos",storageUsed:"Usado:",storageFree:"Libre:",filterPlaceholder:"Filtrar archivos...",deleteButton:"Eliminar",deleteFiles:"Eliminar {{count}} archivos",deleteFileConfirm:'¿Eliminar "{{name}}"? Esto no se puede deshacer.',deleteFilesConfirm:"¿Eliminar {{count}} archivos seleccionados? Esto no se puede deshacer.",noFiles:"No hay archivos en la impresora",loadingFiles:"Cargando archivos...",failedToLoad:"Error al cargar los archivos",toast:{filesDeleted:"Se eliminaron {{count}} archivo(s)",deleteFailed:"Error al eliminar: {{error}}"}},confirm:{delete:"¿Está seguro de que desea eliminar esto?",unsavedChanges:"Tiene cambios sin guardar. ¿Está seguro de que desea salir?",clearQueue:"¿Está seguro de que desea vaciar la cola?"},login:{title:"Inicio de sesión en Bambuddy",subtitle:"Inicie sesión en su cuenta",username:"Nombre de usuario",usernamePlaceholder:"Introduzca su nombre de usuario",usernameOrEmail:"Nombre de usuario o correo",usernameOrEmailPlaceholder:"Nombre de usuario o @ correo",password:"Contraseña",passwordPlaceholder:"Introduzca su contraseña",signIn:"Iniciar sesión",signingIn:"Iniciando sesión...",rememberMe:"Recordarme",forgotPassword:"¿Olvidó su contraseña?",loginSuccess:"Sesión iniciada correctamente",loginFailed:"Error al iniciar sesión",enterCredentials:"Introduzca el nombre de usuario y la contraseña",enterEmail:"Introduzca su dirección de correo",oidcLoginFailed:"Error en el inicio de sesión con OIDC",oidcErrors:{providerError:"El proveedor de identidad devolvió un error",missingParameters:"A la respuesta de OIDC le faltan parámetros obligatorios",invalidState:"El estado de OIDC no es válido o ya se ha usado",stateExpired:"La sesión de inicio de sesión con OIDC ha caducado — inténtelo de nuevo",providerNotFound:"Proveedor OIDC no encontrado",discoveryFailed:"Error al obtener el documento de descubrimiento de OIDC",invalidDiscovery:"El documento de descubrimiento de OIDC no es válido",networkError:"Error de red durante el intercambio de tokens de OIDC",badResponse:"Respuesta inesperada durante el intercambio de tokens de OIDC",noIdToken:"El proveedor OIDC no devolvió un token de ID",validationFailed:"Error en la validación del token de OIDC",nonceMismatch:"Discrepancia de nonce de OIDC — posible ataque de repetición",missingSubClaim:"Al token de OIDC le falta el claim sub",noLinkedAccount:"Ninguna cuenta local está vinculada a esta identidad de OIDC",accountInactive:"Su cuenta está inactiva",userResolutionFailed:"Error al resolver su cuenta",internalError:"Se produjo un error interno durante el inicio de sesión con OIDC",tokenExchangeFailed:"Error en el intercambio de tokens de OIDC"},forgotPasswordTitle:"Contraseña olvidada",forgotPasswordMessage:"Si ha olvidado su contraseña, póngase en contacto con el administrador de su sistema para restablecerla.",forgotPasswordEmailMessage:"Introduzca su dirección de correo y le enviaremos una contraseña nueva.",emailAddress:"Dirección de correo",emailPlaceholder:"su.correo@ejemplo.com",cancel:"Cancelar",sending:"Enviando...",sendResetEmail:"Enviar correo de restablecimiento",howToReset:"Cómo restablecer su contraseña:",resetStep1:"Póngase en contacto con su administrador de Bambuddy",resetStep2:"Pídale que restablezca su contraseña en la gestión de usuarios",resetStep3:"Puede establecerle una nueva contraseña temporal",resetStep4:"Inicie sesión con la nueva contraseña y cámbiela en Ajustes",gotIt:"Entendido",resetPassword:{title:"Establecer nueva contraseña",subtitle:"Introduzca y confirme su nueva contraseña a continuación.",newPassword:"Nueva contraseña",newPasswordPlaceholder:"Al menos 8 caracteres",confirmPassword:"Confirmar contraseña",confirmPasswordPlaceholder:"Repita la nueva contraseña",saving:"Guardando…",submit:"Establecer nueva contraseña",backToLogin:"Volver al inicio de sesión",passwordsDoNotMatch:"Las contraseñas no coinciden",passwordTooShort:"La contraseña debe tener al menos 8 caracteres",resetFailed:"Error al restablecer la contraseña. Es posible que el enlace haya caducado."},twoFA:{title:"Autenticación de dos factores",subtitle:"Su cuenta está protegida con 2FA. Introduzca el código de verificación a continuación.",methodAuthenticator:"Aplicación de autenticación",methodEmail:"Código por correo",methodBackup:"Código de respaldo",instructionsTotp:"Abra su aplicación de autenticación e introduzca el código de 6 dígitos para Bambuddy.",instructionsEmail:"Se ha enviado un código de 6 dígitos a su dirección de correo. Caduca en 10 minutos.",instructionsEmailNotSent:"Haga clic en el botón de abajo para recibir un código de verificación por correo.",instructionsBackup:"Introduzca uno de sus códigos de recuperación de respaldo de 8 caracteres. Cada código solo se puede usar una vez.",sendCodeButton:"Enviar código por correo",sendingCode:"Enviando...",resendCode:"Reenviar código",codeLabel:"Código de verificación",backupCodeLabel:"Código de respaldo",codePlaceholder:"000000",backupCodePlaceholder:"XXXXXXXX",verifyButton:"Verificar",verifyingButton:"Verificando...",backToLogin:"← Volver al inicio de sesión",orContinueWith:"o continuar con",signInWith:"Iniciar sesión con {{provider}}",enterCode:"Introduzca el código de verificación",sendCodeFailed:"Error al enviar el código de verificación",invalidCode:"Código no válido. Inténtelo de nuevo."}},setup:{title:"Configuración de Bambuddy",subtitle:"Configure la autenticación para su instancia de Bambuddy",enableAuth:"Activar la autenticación",adminAccount:"Cuenta de administrador",adminAccountDesc:"Si ya existen usuarios administradores, la autenticación se activará usando las cuentas de administrador existentes. Deje los campos de abajo vacíos para usar los administradores existentes, o introduzca nuevas credenciales para crear un nuevo usuario administrador.",adminUsername:"Nombre de usuario del administrador",adminPassword:"Contraseña del administrador",optionalIfAdminExists:"(opcional si existen usuarios administradores)",adminUsernamePlaceholder:"Introduzca el nombre de usuario del administrador (opcional)",adminPasswordPlaceholder:"Introduzca la contraseña del administrador (opcional)",confirmPassword:"Confirmar contraseña",confirmPasswordPlaceholder:"Confirme la contraseña del administrador",settingUp:"Configurando...",completeSetup:"Completar la configuración",toast:{authEnabledAdminCreated:"Autenticación activada y usuario administrador creado",authEnabledExistingAdmins:"Autenticación activada usando los usuarios administradores existentes",setupCompleted:"Configuración completada",enterBothCredentials:"Introduzca el nombre de usuario y la contraseña del administrador, o deje ambos vacíos para usar los usuarios administradores existentes",passwordsDoNotMatch:"Las contraseñas no coinciden",passwordTooShort:"La contraseña debe tener al menos 6 caracteres"}},changePassword:{title:"Cambiar contraseña",currentPassword:"Contraseña actual",currentPasswordPlaceholder:"Introduzca la contraseña actual",newPassword:"Nueva contraseña",newPasswordPlaceholder:"Introduzca la nueva contraseña (mín. 6 caracteres)",confirmPassword:"Confirmar nueva contraseña",confirmPasswordPlaceholder:"Confirme la nueva contraseña",passwordsDoNotMatch:"Las contraseñas no coinciden",passwordTooShort:"La contraseña debe tener al menos 6 caracteres",changing:"Cambiando...",success:"Contraseña cambiada correctamente",failed:"Error al cambiar la contraseña"},plateAlert:{title:"¡Impresión en pausa!",message:"Se han detectado objetos en la cama de impresión. La impresión se ha pausado automáticamente. Despeje la cama y reanude la impresión.",understand:"Entendido"},camera:{title:"Vista de la cámara",invalidPrinterId:"ID de impresora no válido",live:"En directo",snapshot:"Captura",restartStream:"Reiniciar la transmisión",refreshSnapshot:"Actualizar la captura",fullscreen:"Pantalla completa",exitFullscreen:"Salir de la pantalla completa",connectingToCamera:"Conectando con la cámara...",capturingSnapshot:"Capturando imagen...",connectionLost:"Conexión perdida",connectionFailed:"Error de conexión con la cámara",reconnecting:"Reconectando en {{countdown}} s... (intento {{attempt}}/{{max}})",reconnectNow:"Reconectar ahora",cameraUnavailable:"Cámara no disponible",cameraUnavailableDesc:"Asegúrese de que la impresora está encendida y conectada.",noCamera:"No hay cámara disponible",retry:"Reintentar",cameraStream:"Transmisión de la cámara",zoomOut:"Alejar",zoomIn:"Acercar",resetZoom:"Restablecer el zoom",recording:"Grabando",startRecording:"Iniciar grabación",stopRecording:"Detener grabación",chamberLight:"Conmutar la luz de la cámara",unavailable:"Cámara no disponible",diagnose:{button:"Diagnosticar",modalTitle:"Diagnóstico de la cámara",running:"Ejecutando el diagnóstico...",runFailed:"No se pudo ejecutar el diagnóstico: {{error}}",retry:"Ejecutar de nuevo",stage:{tcp_reachable:"Accesibilidad de la red",first_frame:"Captura de fotogramas",live_stream_active:"Transmisión en directo activa"},summary:{all_ok:"La cámara funciona. El diagnóstico completó todas las etapas correctamente.",live_stream_active_healthy:"La cámara está transmitiendo actualmente con fotogramas recientes — no se necesita ninguna prueba.",printer_unreachable:"La impresora no es accesible. Compruebe la dirección IP, la conexión de red y que la impresora está encendida.",camera_port_closed:"La impresora es accesible pero el puerto de la cámara está cerrado. Asegúrese de que el modo solo LAN y el modo desarrollador están activados en los ajustes de la impresora.",no_frame:"Se conectó a la cámara pero no se recibieron fotogramas. Inténtelo de nuevo o compruebe que la cámara está activada en los ajustes de la impresora.",unknown_failure:"El diagnóstico de la cámara falló por un motivo desconocido. Consulte el registro de soporte para más detalles."},meta:{protocol:"Protocolo",port:"Puerto",profile:"Perfil"}}},groups:{title:"Gestión de grupos",subtitle:"Gestione los grupos de permisos para el control de acceso",backToSettings:"Volver a Ajustes",createGroup:"Crear grupo",noPermission:"No tiene permiso para acceder a esta página.",system:"Sistema",noDescription:"Sin descripción",usersCount:"{{count}} usuarios",permissionsCount:"{{count}} permisos",edit:"Editar",delete:"Eliminar",toast:{created:"Grupo creado correctamente",updated:"Grupo actualizado correctamente",deleted:"Grupo eliminado correctamente",enterGroupName:"Introduzca un nombre de grupo"},modal:{editGroup:"Editar grupo",createGroup:"Crear grupo",cancel:"Cancelar",saving:"Guardando...",creating:"Creando...",saveChanges:"Guardar cambios"},form:{groupName:"Nombre del grupo",groupNamePlaceholder:"Introduzca el nombre del grupo",systemGroupWarning:"Los nombres de los grupos del sistema no se pueden cambiar",description:"Descripción",descriptionPlaceholder:"Introduzca una descripción (opcional)",permissions:"Permisos ({{count}} seleccionados)"},deleteModal:{title:"Eliminar grupo",message:"¿Está seguro de que desea eliminar este grupo? Los usuarios de este grupo perderán estos permisos.",confirm:"Eliminar grupo"},editor:{title:"Editar grupo",createTitle:"Crear grupo",search:"Buscar permisos...",selectAll:"Seleccionar todo",clearAll:"Borrar todo",permissionsSelected:"{{count}} seleccionados",noResults:"Ningún permiso coincide con su búsqueda"}},users:{title:"Gestión de usuarios",subtitle:"Gestione los usuarios y su acceso a su instancia de Bambuddy",backToSettings:"Volver a Ajustes",createUser:"Crear usuario",noPermission:"No tiene permiso para acceder a esta página.",admin:"Administrador",noGroups:"Sin grupos",active:"Activo",inactive:"Inactivo",edit:"Editar",delete:"Eliminar",system:"Sistema",noGroupsAvailable:"No hay grupos disponibles",table:{username:"Nombre de usuario",groups:"Grupos",status:"Estado",actions:"Acciones"},toast:{created:"Usuario creado correctamente",updated:"Usuario actualizado correctamente",deleted:"Usuario eliminado correctamente",fillRequired:"Rellene todos los campos obligatorios",passwordsDoNotMatch:"Las contraseñas no coinciden",passwordTooShort:"La contraseña debe tener al menos 6 caracteres",ldapProvisioned:'Usuario LDAP "{{username}}" aprovisionado'},modal:{createUser:"Crear usuario",editUser:"Editar usuario",cancel:"Cancelar",creating:"Creando...",saving:"Guardando...",saveChanges:"Guardar cambios",advancedAuthSubtitle:"con autenticación avanzada",tabsAriaLabel:"Origen del usuario",localTab:"Local",ldapTab:"LDAP",ldapSearchLabel:"Buscar en el directorio",ldapSearchPlaceholder:"Escriba un nombre de usuario, nombre o correo...",ldapMinChars:"Escriba al menos 2 caracteres para buscar",ldapTypeToSearch:"Empiece a escribir para buscar en el directorio LDAP",ldapSearching:"Buscando en el directorio...",ldapNoResults:"No hay usuarios coincidentes en el directorio",ldapSearchError:"Error en la búsqueda en el directorio. Compruebe el estado del servidor LDAP.",ldapAlreadyProvisioned:"Ya aprovisionado",ldapSelectedLabel:"Seleccionado",ldapProvision:"Aprovisionar usuario",ldapProvisioning:"Aprovisionando...",ldapErrorProvision:"Error en el aprovisionamiento. Compruebe el estado del servidor LDAP e inténtelo de nuevo."},form:{username:"Nombre de usuario",usernamePlaceholder:"Introduzca el nombre de usuario",email:"Correo",emailPlaceholder:"usuario@ejemplo.com",password:"Contraseña",passwordPlaceholder:"Introduzca la contraseña",confirmPassword:"Confirmar contraseña",confirmPasswordPlaceholder:"Confirme la contraseña",newPasswordPlaceholder:"Introduzca la nueva contraseña",confirmNewPasswordPlaceholder:"Confirme la nueva contraseña",leaveBlankToKeep:"dejar en blanco para conservar la actual",groups:"Grupos",optional:"opcional",autoGeneratedPassword:"Se generará automáticamente una contraseña segura y se enviará al usuario por correo.",passwordManagedByAdvancedAuth:"La contraseña la gestiona la autenticación avanzada. Use «Restablecer contraseña» para enviar una nueva contraseña al usuario por correo.",resetPassword:"Restablecer contraseña",resettingPassword:"Restableciendo la contraseña..."},deleteModal:{title:"Eliminar usuario",message:"¿Está seguro de que desea eliminar este usuario? Esta acción no se puede deshacer.",confirm:"Eliminar usuario"}},streamOverlay:{title:"Superposición de transmisión",invalidPrinterId:"ID de impresora no válido",cameraStream:"Transmisión de la cámara",progress:"Progreso",eta:"Tiempo estimado",printerIdle:"La impresora está inactiva",printerOffline:"Impresora desconectada",status:{printing:"Imprimiendo",paused:"En pausa",finished:"Finalizada",failed:"Fallida",idle:"Inactiva",unknown:"Desconocido"}},profiles:{title:"Perfiles",subtitle:"Gestione sus preajustes del laminador y las calibraciones de avance de presión",tabs:{bambuCloud:"Bambu Cloud",orcaCloud:"Orca Cloud",local:"Perfiles locales",kprofiles:"Perfiles K"},orcaCloud:{connectedAs:"Conectado como",logout:"Desconectar",noLogoutPermission:"No tienes permiso para desconectar",noConnectPermission:"No tienes permiso para conectar a Orca Cloud",retry:"Reintentar",back:"Usar otro método de inicio de sesión",connect:{title:"Conectar a Orca Cloud",description:"Inicia sesión en tu cuenta Orca Cloud para sincronizar tus perfiles de slicer en Bambuddy."},providers:{google:"Iniciar sesión con Google",apple:"Iniciar sesión con Apple",github:"Iniciar sesión con GitHub",email:"Iniciar sesión con correo y contraseña"},password:{title:"Iniciar sesión con correo y contraseña",email:"Correo electrónico",emailPlaceholder:"tu@ejemplo.com",password:"Contraseña",submit:"Iniciar sesión"},paste:{title:"Finalizar inicio de sesión",step1:"Se abrió una nueva pestaña con la página de inicio de sesión de Orca Cloud. Inicia sesión con tu cuenta de Orca.",step2:'Tu navegador será redirigido a una URL "localhost" que no se cargará. Es lo esperado — esa URL es lo que necesitamos.',step3:"Copia la URL completa desde la barra de direcciones del navegador y pégala abajo.",signInUrl:"Si la pestaña de inicio de sesión no se abrió, haz clic en esta URL:",label:"Pega aquí la URL de callback",placeholder:"http://localhost:41172/callback?code=...&state=...",submit:"Finalizar conexión"},profiles:{title:"Tus perfiles de Orca Cloud ({{count}})",refresh:"Actualizar",empty:"Aún no hay perfiles en tu cuenta de Orca Cloud."},toast:{connected:"Conectado a Orca Cloud como {{email}}",disconnected:"Desconectado de Orca Cloud"},errors:{startFailed:"No se pudo iniciar el inicio de sesión de Orca Cloud.",finishFailed:"No se pudo finalizar el inicio de sesión de Orca Cloud.",passwordFailed:"No se pudo iniciar sesión con ese correo y contraseña.",passwordEmpty:"Por favor introduce tanto tu correo como tu contraseña.",emptyPaste:"Pega la URL de callback desde tu navegador.",noCode:"Esa URL no parece un callback de Orca Cloud (sin parámetro code). Copia la URL completa desde la barra de direcciones."}},localProfiles:{title:"Perfiles locales",subtitle:"Importe y gestione preajustes del laminador desde OrcaSlicer",import:"Importar perfiles",importDesc:"Suelte aquí archivos .bbscfg, .bbsflmt, .orca_filament, .zip o .json",importing:"Importando...",search:"Buscar preajustes locales...",noPresets:"Aún no hay preajustes locales",noSearchResults:"Ningún preajuste coincide con su búsqueda",badge:"Local",edit:"Editar",delete:"Eliminar",cancel:"Cancelar",deleteConfirmTitle:"Eliminar preajuste",deleteConfirm:"¿Está seguro de que desea eliminar este preajuste? Esto no se puede deshacer.",source:"Origen",inheritsFrom:"Hereda de",filamentType:"Tipo",vendor:"Proveedor",compatiblePrinters:"Impresoras",nozzleTemp:"Temp. de la boquilla",cost:"Coste",density:"Densidad",pressureAdvance:"Avance de presión",filament:"Filamento",process:"Proceso",printer:"Impresora",toast:{importSuccess:"{{count}} preajuste(s) importado(s)",importSkipped:"{{count}} preajuste(s) omitido(s) (duplicados)",importError:"{{count}} error(es) durante la importación",deleted:"Preajuste eliminado",updated:"Preajuste actualizado"}},connectedAs:"Conectado como",logout:"Cerrar sesión",noLogoutPermission:"No tiene permiso para cerrar sesión",failedToLoad:"Error al cargar los perfiles",retry:"Reintentar",time:{justNow:"Ahora mismo",minsAgo:"hace {{count}} min",hoursAgo:"hace {{count}} h",daysAgo:"hace {{count}} d"},toast:{loggedOut:"Sesión cerrada"},login:{title:"Conectarse a Bambu Cloud",subtitle:"Sincronice sus preajustes del laminador entre dispositivos",email:"Correo",password:"Contraseña",region:"Región",regionGlobal:"Global",regionChina:"China",verificationCode:"Código de verificación",totpCode:"Código del autenticador",checkEmail:"Compruebe su correo ({{email}}) en busca de un código de 6 dígitos",enterTotpHint:"Introduzca el código de 6 dígitos de su aplicación de autenticación",accessToken:"Token de acceso",accessTokenHint:"Pegue su token de acceso de Bambu Cloud. Las cuentas de la región de China deben usar esta vía (vinculada al teléfono — inicio de sesión por correo no disponible). Consulte la wiki para saber cómo obtener el token de las cookies de MakerWorld.",back:"Atrás",loginButton:"Iniciar sesión",verifyButton:"Verificar",setTokenButton:"Establecer token",useToken:"Usar token de acceso en su lugar",useEmail:"Iniciar sesión con correo en su lugar",toast:{loggedIn:"Sesión iniciada correctamente",codeSent:"Código de verificación enviado a su correo",enterTotp:"Introduzca el código de su aplicación de autenticación",tokenSet:"Token establecido correctamente"}},presets:{myPreset:"Mi preajuste (editable)",duplicate:"Duplicar",editable:"Editable",failedToLoadDetails:"Error al cargar los detalles del preajuste",deleteConfirm:"¿Eliminar este preajuste?",deleteWarning:'Esto eliminará permanentemente "{{name}}" de Bambu Cloud. Esto no se puede deshacer.',noDuplicatePermission:"No tiene permiso para duplicar preajustes",noEditPermission:"No tiene permiso para editar preajustes",noDeletePermission:"No tiene permiso para eliminar preajustes",types:{filament:"Preajuste de filamento",printer:"Preajuste de impresora",process:"Preajuste de proceso"},toast:{deleted:"Preajuste eliminado",created:"Preajuste creado",updated:"Preajuste actualizado",duplicated:"Preajuste duplicado",fieldAdded:'Campo "{{key}}" añadido',exported:"Preajuste exportado"},baseLabel:"Base: {{name}}",currentLabel:"Actual: {{name}}",newPreset:"Nuevo preajuste",editPreset:"Editar preajuste",duplicatePreset:"Duplicar preajuste",createNewPreset:"Crear nuevo preajuste",customizeSettings:"Personalice los ajustes de su nuevo preajuste",compareWithBase:"Comparar con el preajuste base",compare:"Comparar",basePreset:"Preajuste base",selectBasePreset:"Seleccionar preajuste base...",presetName:"Nombre del preajuste",myCustomPreset:"Mi preajuste personalizado",inheritsFrom:"Hereda de",dropJsonToImport:"Suelte un JSON para importar",tabs:{common:"Común",allFields:"Todos los campos"},availableFields:"Campos disponibles",searchFieldsPlaceholder:"Buscar campos...",noMatchingFields:"No hay campos coincidentes",allFieldsAdded:"Todos los campos añadidos",addCustomField:"Añadir campo personalizado",yourOverrides:"Sus anulaciones",noOverridesYet:"Aún no hay anulaciones",clickFieldsToAdd:"Haga clic en los campos de la izquierda para añadirlos",saveAsTemplate:"Guardar como plantilla",jsonTip:"Consejo: arrastre y suelte un archivo .json en cualquier parte de esta ventana para importar ajustes"},cloudView:{searchPlaceholder:"Buscar preajustes...",templates:"Plantillas",refresh:"Actualizar",newPreset:"Nuevo preajuste",clearFilters:"Borrar filtros",compareMode:"Modo de comparación",selectAnotherPreset:"Seleccione otro preajuste de {{type}}",clickTwoPresets:"Haga clic en dos preajustes del mismo tipo para compararlos",selectFirst:"1. Seleccione el primero",selectSecond:"2. Seleccione el segundo",compareNow:"Comparar ahora",lastSynced:"Última sincronización:",showingCount:"Mostrando {{showing}} de {{total}} preajustes",noPresetsFound:"No se encontraron preajustes",columns:{filament:"Filamento",process:"Proceso",printer:"Impresora"},noFilamentPresets:"No hay preajustes de filamento",noProcessPresets:"No hay preajustes de proceso",noPrinterPresets:"No hay preajustes de impresora",filters:{type:"Tipo",owner:"Propietario",printer:"Impresora",nozzle:"Boquilla",filament:"Filamento",layer:"Capa",all:"Todos",myPresets:"Mis preajustes",builtIn:"Integrados",process:"Proceso"},noTemplatesPermission:"No tiene permiso para gestionar plantillas",noRefreshPermission:"No tiene permiso para actualizar perfiles",noCreatePermission:"No tiene permiso para crear preajustes"},templates:{title:"Plantillas rápidas",noTemplates:"Aún no hay plantillas",createFirst:"Cree plantillas desde el editor de preajustes",typeFilter:"Tipo:",deleteTitle:"Eliminar plantilla",deleteWarning:"Esta acción no se puede deshacer",deleteConfirm:'¿Está seguro de que desea eliminar "{{name}}"?',namePlaceholder:"Nombre de la plantilla",descriptionPlaceholder:"Descripción",settingsJson:"Ajustes (JSON)",fieldsCount:"{{count}} campos",shownInModals:"Mostrada en las ventanas",hiddenInModals:"Oculta en las ventanas",apply:"Aplicar",toast:{deleted:"Plantilla eliminada",updated:"Plantilla actualizada",created:"Plantilla creada",applied:"Plantilla aplicada"}}},support:{debugLoggingActive:"El registro de depuración está activo",manageLogs:"Gestionar",collectItem7:"Conectividad de la impresora y versiones de firmware",collectItem8:"Estado de las integraciones (Spoolman, MQTT, HA)",collectItem9:"Interfaces de red (solo subredes)",collectItem10:"Versiones de los paquetes de Python",collectItem11:"Comprobaciones de estado de la base de datos",collectItem12:"Detalles del entorno de Docker",bundleGenerating:"Generando paquete...",bundleStepConnection:"Ejecutando comprobaciones de conectividad de impresoras",bundleStepVirtualPrinters:"Ejecutando comprobaciones de configuración de impresoras virtuales",bundleStepLogScan:"Analizando los registros recientes en busca de problemas conocidos",bundleStepBuild:"Creando el archivo ZIP del paquete de soporte"},fileManager:{title:"Gestor de archivos",subtitle:"Organice y gestione sus archivos de impresión",uploadFiles:"Subir archivos",newFolder:"Nueva carpeta",folderName:"Nombre de la carpeta",folderNamePlaceholder:"p. ej., Piezas funcionales",renameFile:"Renombrar archivo",renameFolder:"Renombrar carpeta",invalidFilenameChar:'El carácter "{{char}}" no está permitido en nombres de archivos de impresión. La tarjeta SD de la impresora rechaza: < > : " / \\ | ? *',moveFiles:"Mover {{count}} archivo(s)",rootNoFolder:"Raíz (sin carpeta)",current:"actual",linkFolder:"Vincular carpeta",linkFolderDescription:'Vincule "{{name}}" a un proyecto o archivo para un acceso rápido.',project:"Proyecto",archive:"Archivo",noProjectsFound:"No se encontraron proyectos",noArchivesFound:"No se encontraron archivos",unlink:"Desvincular",link:"Vincular",dragDropFiles:"Arrastre y suelte archivos aquí",dropFilesHere:"Suelte archivos aquí",orClickToBrowse:"o haga clic para examinar",allFileTypesSupported:"Se admiten todos los tipos de archivo. Los archivos ZIP se extraerán.",zipFilesDetected:"Archivos ZIP detectados",zipExtractOptions:"Los archivos ZIP se extraerán. Elija cómo gestionar la estructura de carpetas:",preserveZipStructure:"Conservar la estructura de carpetas del ZIP",createFolderFromZip:"Crear una carpeta a partir del nombre del archivo ZIP",stlThumbnailGeneration:"Generación de miniaturas STL",zipMayContainStl:"Los archivos ZIP pueden contener archivos STL. Se pueden generar miniaturas durante la extracción.",thumbnailsCanBeGenerated:"Se pueden generar miniaturas para los archivos STL. Los modelos grandes pueden tardar más en procesarse.",generateThumbnailsForStl:"Generar miniaturas para los archivos STL",threemfDetected:"Archivos 3MF detectados",threemfExtractionInfo:"El modelo de impresora, el material, el color y los ajustes de impresión se extraerán automáticamente de los archivos 3MF.",willBeExtracted:"Se extraerá",filesExtracted:"{{count}} archivos extraídos",uploadComplete:"Subida completada: {{succeeded}} con éxito",uploadFailed:"Error al subir",zipFilesFailed:"{{count}} archivos fallidos",uploading:"Subiendo...",changeLink:"Cambiar enlace...",linkTo:"Vincular a...",linkToProjectOrArchive:"Vincular a un proyecto o archivo",addToQueue:"Añadir a la cola",schedulePrint:"Programar",generateThumbnail:"Generar miniatura",generateThumbnails:"Generar miniaturas",generateThumbnailsForMissing:"Generar miniaturas para los archivos STL que no las tienen",gridView:"Vista de cuadrícula",listView:"Vista de lista",lowDiskSpaceWarning:"Advertencia de poco espacio en disco",lowDiskSpaceDetails:"Solo {{free}} libres de {{total}} en total. El umbral está establecido en {{threshold}} GB en los ajustes.",files:"Archivos",folders:"Carpetas",size:"Tamaño",free:"Libre",allFiles:"Todos los archivos",allExternal:"Externos",externalIsEmpty:"Sin archivos externos",externalEmptyDescription:"Los archivos de tus carpetas externas vinculadas aparecerán aquí.",wrap:"Ajustar",enableTextWrapping:"Activar el ajuste de texto",disableTextWrapping:"Desactivar el ajuste de texto",collapse:"Contraer",collapseFoldersByDefault:"Contraer las carpetas de forma predeterminada",expandFoldersByDefault:"Expandir las carpetas de forma predeterminada",dragToResizeTooltip:"Arrastre para redimensionar, doble clic para restablecer",searchFiles:"Buscar archivos...",allTypes:"Todos los tipos",prints:"Impresiones",ascending:"Ascendente",descending:"Descendente",resultsCount:"{{showing}} de {{total}} archivos",selectAll:"Seleccionar todo",deselectAll:"Deseleccionar todo",selected:"{{count}} seleccionados",adding:"Añadiendo...",loadingFiles:"Cargando archivos...",folderIsEmpty:"La carpeta está vacía",noFilesYet:"Aún no hay archivos",folderEmptyDescription:"Suba archivos o mueva archivos a esta carpeta para empezar.",noFilesDescription:"Suba archivos para empezar a organizar sus archivos relacionados con la impresión.",noMatchingFiles:"No hay archivos coincidentes",noMatchingFilesDescription:"Ningún archivo coincide con su búsqueda o los criterios de filtro actuales.",clearFilters:"Borrar filtros",printedCount:"Impreso {{count}} veces",uploadedBy:"Subido por",deleteFolder:"Eliminar carpeta",deleteFile:"Eliminar archivo",deleteFilesCount:"Eliminar {{count}} archivos",deleteFolderConfirm:"¿Está seguro de que desea eliminar esta carpeta? Todos los archivos que contiene también se eliminarán.",deleteFileConfirm:"¿Está seguro de que desea eliminar este archivo?",deleteFilesConfirm:"¿Está seguro de que desea eliminar {{count}} archivos seleccionados? Esta acción no se puede deshacer.",deleting:"Eliminando...",noPermissionRenameFolder:"No tiene permiso para renombrar carpetas",noPermissionLinkFolder:"No tiene permiso para vincular carpetas",noPermissionDeleteFolder:"No tiene permiso para eliminar carpetas",noPermissionPrint:"No tiene permiso para imprimir",noPermissionAddToQueue:"No tiene permiso para añadir a la cola",noPermissionSlice:"No tiene permiso para laminar archivos",noPermissionDownload:"No tiene permiso para descargar archivos",noPermissionRenameFile:"No tiene permiso para renombrar este archivo",noPermissionGenerateThumbnail:"No tiene permiso para generar miniaturas",noPermissionDeleteFile:"No tiene permiso para eliminar este archivo",noPermissionCreateFolder:"No tiene permiso para crear carpetas",noPermissionUpload:"No tiene permiso para subir archivos",noPermissionMoveFiles:"No tiene permiso para mover archivos",noPermissionDeleteFiles:"No tiene permiso para eliminar archivos",linkExternal:"Vincular externa",linkExternalFolder:"Vincular carpeta externa",linkExternalFolderDescription:"Monte un directorio del host (NAS, USB, recurso compartido de red) en el gestor de archivos. Los archivos no se copian — se accede a ellos directamente desde la ruta original.",externalFolderNamePlaceholder:"p. ej., Impresiones del NAS",externalPath:"Ruta del host",externalPathHelp:"Ruta absoluta al directorio en el host de Docker. Debe estar montado por enlace en el contenedor.",readOnly:"Solo lectura",readOnlyHelp:"impide las subidas y eliminaciones",showHiddenFiles:"Mostrar archivos ocultos (con punto)",externalFolder:"Carpeta externa",scanFolder:"Escanear",toast:{folderCreated:"Carpeta creada",folderDeleted:"Carpeta eliminada",fileDeleted:"Archivo eliminado",filesDeleted:"Se eliminaron {{count}} archivos",filesMoved:"Archivos movidos",folderLinked:"Carpeta vinculada",folderUnlinked:"Carpeta desvinculada",externalFolderLinked:"Carpeta externa vinculada y escaneada",folderScanned:"Escaneo completado: {{added}} añadidos, {{removed}} eliminados",addedToQueue:"Se añadieron {{count}} archivo(s) a la cola",addedToQueuePartial:"Se añadieron {{added}} archivo(s), {{failed}} fallidos",failedToAddToQueue:"Error al añadir los archivos: {{error}}",fileRenamed:"Archivo renombrado",folderRenamed:"Carpeta renombrada",thumbnailsGenerated:"Se generaron {{count}} miniatura(s)",thumbnailsGeneratedPartial:"Se generaron {{succeeded}} miniatura(s), {{failed}} fallidas",noStlMissingThumbnails:"No hay archivos STL sin miniaturas",failedToGenerateThumbnails:"Error al generar las miniaturas: {{error}}",thumbnailGenerated:"Miniatura generada",failedToGenerateThumbnail:"Error al generar la miniatura: {{error}}"}},projects:{title:"Proyectos",subtitle:"Organice y haga el seguimiento de sus proyectos de impresión 3D",newProject:"Nuevo proyecto",editProject:"Editar proyecto",deleteProject:"Eliminar proyecto",projectName:"Nombre del proyecto",description:"Descripción",noProjects:"Aún no hay proyectos",noProjectsFiltered:"No hay proyectos {{status}}",noProjectsFilteredHelp:"No tiene ningún proyecto {{status}}. Los proyectos aparecerán aquí cuando cambie su estado.",createFirst:"Cree su primer proyecto para empezar a organizar impresiones relacionadas, hacer el seguimiento del progreso y gestionar sus construcciones.",createFirstButton:"Cree su primer proyecto",create:"Crear",files:"Archivos",prints:"Impresiones",plates:"camas",parts:"piezas",lastModified:"Última modificación",deleteConfirm:"¿Está seguro de que desea eliminar este proyecto? Los archivos y los elementos de la cola se desvincularán pero no se eliminarán.",addFiles:"Añadir archivos",removeFile:"Quitar archivo",viewDetails:"Ver detalles",namePlaceholder:"p. ej., Construcción de Voron 2.4",descriptionPlaceholder:"Descripción opcional...",urlLabel:"URL",urlPlaceholder:"https://makerworld.com/...",urlInvalid:"La URL debe empezar por http:// o https://",openExternalUrl:"Abrir la URL del proyecto",coverImageLabel:"Foto de portada",coverImageAlt:"Foto de portada del proyecto",coverImageUpload:"Subir",coverImageReplace:"Reemplazar",coverImageRemove:"Quitar",color:"Color",targetPlates:"Camas objetivo",targetPlatesPlaceholder:"p. ej., 25",targetPlatesHelp:"Número de trabajos de impresión",targetParts:"Piezas objetivo",targetPartsPlaceholder:"p. ej., 150",targetPartsHelp:"Total de objetos necesarios",tagsLabel:"Etiquetas (separadas por comas)",tagsPlaceholder:"p. ej., voron, funcional, regalo",dueDate:"Fecha límite",priority:"Prioridad",priorityLow:"Baja",priorityNormal:"Normal",priorityHigh:"Alta",priorityUrgent:"Urgente",statusActive:"Activo",statusCompleted:"Completado",statusArchived:"Archivado",done:"Hecho",completed:"completadas",failed:"fallidas",inQueue:"en cola",noPrintsYet:"Aún no hay impresiones",printJobs:"Trabajos de impresión (camas)",partsPrinted:"Piezas impresas",failedParts:"Piezas fallidas",import:"Importar",export:"Exportar",importProject:"Importar proyecto",exportAll:"Exportar todos los proyectos",loading:"Cargando proyectos...",noEditPermission:"No tiene permiso para editar proyectos",noDeletePermission:"No tiene permiso para eliminar proyectos",noCreatePermission:"No tiene permiso para crear proyectos",noImportPermission:"No tiene permiso para importar proyectos",noExportPermission:"No tiene permiso para exportar proyectos",toast:{created:"Proyecto creado",updated:"Proyecto actualizado",deleted:"Proyecto eliminado",imported:"Proyecto importado",multipleImported:"{{count}} proyectos importados",importFailed:"Error en la importación",exported:"Proyectos exportados (solo metadatos)"}},projectDetail:{notFound:"Proyecto no encontrado",backToProjects:"Volver a Proyectos",export:"Exportar",exportProject:"Exportar proyecto",noExportPermission:"No tiene permiso para exportar proyectos",noEditPermission:"No tiene permiso para editar proyectos",partOf:"Parte de:",priorityLabel:"Prioridad:",noPrints:"Aún no hay impresiones en este proyecto",status:{active:"Activo",completed:"Completado",archived:"Archivado"},priority:{low:"Baja",normal:"Normal",high:"Alta",urgent:"Urgente"},dueDate:{overdue:"Atrasado",today:"Vence hoy",daysLeft:"Quedan {{count}} días"},progress:{platesProgress:"Progreso de camas",partsProgress:"Progreso de piezas",printJobs:"trabajos de impresión",parts:"piezas",percentComplete:"{{percent}}% completado",remaining:"{{count}} restantes"},stats:{printJobs:"Trabajos de impresión",total:"total",failed:"{{count}} fallidos",partsPrinted:"{{count}} piezas impresas",printTime:"Tiempo de impresión",filamentUsed:"Filamento usado"},cost:{title:"Seguimiento de costes",filamentCost:"Coste del filamento",energy:"Energía",totalCost:"Coste total",total:"Total",includesBom:"incl. lista de materiales",budget:"Presupuesto",remaining:"Restante"},subProjects:{title:"Subproyectos ({{count}})"},notes:{title:"Notas",noEditPermission:"No tiene permiso para editar notas",placeholder:"Añada notas sobre este proyecto...",empty:"Aún no hay notas. Haga clic en Editar para añadir notas."},files:{title:"Archivos",linkFolders:"Vincule carpetas del gestor de archivos",forQuickAccess:"a este proyecto para un acceso rápido.",fileCount:"{{count}} archivo(s)",empty:"No hay carpetas vinculadas. Vaya al gestor de archivos y vincule una carpeta a este proyecto.",noFiles:"No hay archivos en esta carpeta.",print:"Imprimir ahora",addToQueue:"Añadir a la cola"},bom:{title:"Lista de materiales",acquired:"{{completed}}/{{total}} adquiridos",showAll:"Mostrar todo",hideDone:"Ocultar los hechos",addPart:"Añadir pieza",noAddPermission:"No tiene permiso para añadir piezas",partNamePlaceholder:"Nombre de la pieza (p. ej., tornillos M3x8)",partName:"Nombre de la pieza",qty:"Cant.",price:"Precio ({{currency}})",sourcingUrlPlaceholder:"URL de aprovisionamiento (opcional)",remarksPlaceholder:"Observaciones (opcional)",deletePart:"Eliminar pieza",deleteConfirm:'¿Está seguro de que desea eliminar "{{name}}"?',noUpdatePermission:"No tiene permiso para actualizar piezas",noEditPermission:"No tiene permiso para editar piezas",noDeletePermission:"No tiene permiso para eliminar piezas",totalCost:"Coste total:",empty:"No hay piezas en la lista de materiales. Añada hardware, componentes electrónicos u otros componentes para hacer el seguimiento de lo que hay que aprovisionar."},timeline:{title:"Cronología de actividad",empty:"Aún no hay actividad."},template:{saveAsTemplate:"Guardar como plantilla",noCreatePermission:"No tiene permiso para crear plantillas"},queue:{title:"Cola",viewAll:"Ver todo",printing:"{{count}} imprimiendo",queued:"{{count}} en cola"},prints:{title:"Impresiones ({{count}})"},toast:{projectUpdated:"Proyecto actualizado",partAdded:"Pieza añadida",partRemoved:"Pieza eliminada",exportFailed:"Error en la exportación",projectExported:"Proyecto exportado",templateCreated:"Plantilla creada"}},system:{title:"Información del sistema",version:"Versión",uptime:"Tiempo de actividad",cpuUsage:"Uso de la CPU",memoryUsage:"Uso de la memoria",diskUsage:"Uso del disco",networkInfo:"Información de la red",logs:"Registros",debugMode:"Modo de depuración",enableDebug:"Activar el registro de depuración",disableDebug:"Desactivar el registro de depuración",downloadLogs:"Descargar registros",clearLogs:"Borrar registros",dockerInfo:"Información de Docker",containerName:"Nombre del contenedor",imageName:"Nombre de la imagen",platform:"Plataforma",architecture:"Arquitectura"},library:{title:"Biblioteca de filamentos",addFilament:"Añadir filamento",editFilament:"Editar filamento",deleteFilament:"Eliminar filamento",vendor:"Proveedor",material:"Material",color:"Color",kFactor:"Factor K",temperature:"Temperatura",noFilaments:"No hay filamentos en la biblioteca",deleteConfirm:"¿Está seguro de que desea eliminar este filamento?",importFromPrinter:"Importar desde la impresora",exportToFile:"Exportar a un archivo"},slice:{title:"Laminar modelo",action:"Laminar",actionAll:"Laminar las {{count}} bandejas",actionAllTitle:"Laminar todas las bandejas en una salida única de varias bandejas (un solo archivo). La selección de filamento cubre cada hueco que defina el proyecto.",allPlatesToggle:"Laminar las {{count}} bandejas",slicing:"Laminando…",printer:"Perfil de impresora",process:"Perfil de proceso",filament:"Perfil de filamento",filamentSlot:"Filamento {{index}} ({{type}})",selectPreset:"— Seleccione un preajuste —",loadingPresets:"Cargando preajustes…",analyzingPlateFilaments:"Analizando los filamentos de la cama…",analyzingPlateFilamentsHint:"Ejecutando un laminado de vista previa para descubrir qué ranuras del AMS usa esta cama. Después se almacena en caché — volver a abrir es instantáneo.",previewToast:"Analizando {{name}} — {{elapsed}}",previewWithProgress:"Analizando {{name}} — {{stage}} ({{percent}}%) — {{elapsed}}",notUsedByPlate:"— no usado por esta cama",noPresetsForSlot:"No hay preajustes disponibles",otherPrinters:"Otras impresoras",presetsLoadFailed:"Error al cargar los preajustes. Abra Ajustes → Perfiles para importarlos primero.",refreshPresets:"Actualizar",refreshPresetsTitle:"Actualizar preajustes — recuperar los listados más recientes de la nube y los paquetes (úselo tras eliminar un preajuste en Bambu Studio o Bambu Handy)",allPresetsRequired:"Deben seleccionarse todos los preajustes",bundle:"Paquete del laminador",bundleNone:"— Ninguno (elegir preajustes individualmente) —",bundleAllRequired:"Deben elegirse el proceso del paquete y todas las ranuras de filamento",enqueuing:"Enviando el trabajo de laminado…",queued:"En cola…",failed:"Error al laminar. Consulte los registros del contenedor auxiliar del laminador.",startedToast:"Laminando {{name}} en segundo plano…",queuedToast:"En cola: {{name}} — {{elapsed}}",runningToast:"Laminando {{name}} — {{elapsed}}",runningWithProgress:"{{name}} — {{stage}} ({{percent}}%) — {{elapsed}}",runningWithProgressMultiPlate:"Bandeja {{plateIndex}} de {{plateCount}} • {{name}} — {{stage}} ({{percent}}%) — {{elapsed}}",completedToast:"{{name}} laminado",failedTitle:"Error al laminar",failedToast:"Error al laminar {{name}}: {{detail}}",tier:{local:"Importado",cloud:"Bambu Cloud",orcaCloud:"Orca Cloud",standard:"Estándar"},cloud:{notAuthenticated:"Inicie sesión en Bambu Cloud (Ajustes → Perfiles → Bambu Cloud) para ver sus preajustes de la nube.",expired:"La sesión de Bambu Cloud ha caducado — inicie sesión de nuevo para actualizar sus preajustes de la nube.",unreachable:"Bambu Cloud no es accesible en este momento. Los preajustes locales y estándar siguen funcionando."},orcaCloud:{notAuthenticated:"Inicia sesión en Orca Cloud (Perfiles → Orca Cloud) para ver tus preajustes Orca.",expired:"Sesión de Orca Cloud caducada — inicia sesión de nuevo para actualizar tus preajustes Orca.",unreachable:"Orca Cloud no está disponible ahora. Otros preajustes siguen funcionando."},bedType:{label:"Cama de impresión",auto:"Automático (usar el preajuste de proceso)",coolPlate:"Cool Plate",coolPlateSuperTack:"Cool Plate SuperTack",engineering:"Engineering Plate",highTemp:"High Temp Plate",texturedPEI:"Textured PEI Plate",smoothPEI:"Smooth PEI Plate"}},spoolman:{title:"Integración con Spoolman",enabled:"Spoolman activado",url:"URL de Spoolman",connected:"Conectado",disconnected:"No conectado",testConnection:"Probar conexión",sync:"Sincronizar",syncing:"Sincronizando...",lastSync:"Última sincronización",linkToSpoolman:"Vincular a Spoolman",openInSpoolman:"Abrir en Spoolman",unlinkSpool:"Desvincular bobina",unlinkConfirmTitle:"¿Desasignar la bobina?",unlinkConfirmMessage:"Esto quitará la bobina de esta ranura. Los datos de la bobina en sí permanecerán sin cambios.",selectSpool:"Seleccionar bobina",noUnlinkedSpools:"No hay bobinas sin asignar disponibles",linkSuccess:"Bobina asignada correctamente",linkFailed:"Error al asignar la bobina",unlinkSuccess:"Bobina desasignada correctamente",unlinkFailed:"Error al desasignar la bobina",linkedSpool:"Bobina asignada",spoolId:"ID de la bobina",fillSourceLabel:"(Spoolman)",weight:"Peso",remaining:"Restante",disableWeightSync:"Desactivar la sincronización del peso estimado del AMS",disableWeightSyncDesc:"No actualizar la capacidad restante a partir de las estimaciones del AMS. Use esto si prefiere el seguimiento del uso de Spoolman a las estimaciones del AMS basadas en porcentajes. Las bobinas nuevas seguirán usando la estimación del AMS como su peso inicial.",reportPartialUsage:"Informar del uso parcial en las impresiones fallidas",reportPartialUsageDesc:"Cuando una impresión falla o se cancela, informar del filamento estimado usado hasta ese punto según el progreso de las capas."},inventory:{title:"Inventario de bobinas",subtitle:"Gestione sus bobinas",spoolmanMixedContentTitle:"Spoolman no se puede cargar por HTTPS — contenido mixto bloqueado por su navegador",spoolmanMixedContentBody:"Bambuddy se sirve por HTTPS (mediante su proxy inverso), pero su URL de Spoolman sigue siendo HTTP sin cifrar. Los navegadores bloquean el contenido mixto por seguridad, por lo que la interfaz integrada de Spoolman no se puede mostrar. Spoolman debe ser accesible por HTTPS para que esto funcione.",spoolmanMixedContentFixReverseProxy:"Ponga Spoolman tras el mismo proxy inverso que Bambuddy (Traefik / Nginx / Caddy) con HTTPS y luego actualice la URL de Spoolman en Ajustes a la nueva dirección HTTPS.",spoolmanMixedContentFixOpenNewTab:"Como solución alternativa, abra Spoolman en una pestaña nueva del navegador por HTTP — las reglas de contenido mixto solo se aplican a los marcos integrados, por lo que una pestaña independiente sí funciona.",spoolmanOpenInNewTab:"Abrir Spoolman en una pestaña nueva",labels:{title:"Imprimir etiquetas de bobinas",selectedCount:"{{count}} seleccionadas",pickSpools:"Elija para qué bobinas imprimir etiquetas:",searchPlaceholder:"Buscar nombre, marca o n.º de ID",filterByMaterial:"Material:",allMaterials:"Todos",selectVisible:"Seleccionar todas las visibles ({{count}})",deselectVisible:"Deseleccionar las visibles",clearAll:"Borrar todo",noSpoolsToShow:"No hay bobinas que mostrar. Ajuste su filtro e inténtelo de nuevo.",noMatches:"Ninguna bobina coincide con la búsqueda o el filtro actuales.",printOne:"Imprimir etiqueta para esta bobina",printLabels:"Imprimir etiquetas…",bulkTitle:"Elija las bobinas para las que imprimir etiquetas de las {{count}} mostradas actualmente",noSpoolsTitle:"No hay bobinas que etiquetar",error:"No se pudieron generar las etiquetas: {{msg}}",sortBy:{label:"Ordenar:",id:"Por ID",color:"Por color"},templates:{amsHolderSmall:{label:"Soporte de AMS — pequeño (74 × 33 mm)",hint:"Una etiqueta por página; coincide con la etiqueta imprimible del modelo 752566 de MakerWorld (AMS Filament Label Holder)."},amsHolderLarge:{label:"Soporte de AMS — grande (75 × 55 mm)",hint:"Una etiqueta por página; encaja en la variante con inserto de cartulina del AMS Filament Label Holder. Lo bastante amplia para muestra de color, marca, material, ID y código QR."},box40x30:{label:"Etiqueta de caja (40 × 30 mm)",hint:"Una etiqueta por página; tamaño de rollo DK/Brother habitual, adecuado para etiquetas de bolsas de filamento y cajas de almacenamiento."},box:{label:"Box label (62 × 29 mm)",hint:"Una etiqueta por página; dimensionada para las etiquetas pequeñas de Brother PT/QL y Dymo."},averyL7160:{label:"Avery L7160 — A4 sheet (38.1 × 63.5 mm × 21)",hint:"Hojas de tamaño UE; 21 etiquetas por página A4."},avery5160:{label:"Avery 5160 — US Letter sheet (25.4 × 66.7 mm × 30)",hint:"Hojas de tamaño EE. UU.; 30 etiquetas por página Letter."}}},csv:{importButton:"Importar CSV",exportButton:"Exportar CSV",modalTitle:"Importar bobinas desde CSV",selectFile:"Elige un archivo CSV o arrástralo aquí",dragHint:"Encabezado: material (obligatorio), brand, subtype, color_name, rgba, …",parsing:"Leyendo archivo…",previewError:"No se pudo leer el archivo CSV",validCount:"{{count}} válidas",errorCount:"{{count}} con error",skippedCount:"{{count}} omitidas",colRow:"Fila",colStatus:"Estado",colColor:"Color",colorResolved:"Color rellenado desde el catálogo",colorCrossMaterial:"Color tomado de un material diferente — sin coincidencia exacta en el catálogo",duplicateExisting:"Ya existe una bobina con este material, marca y color — se importará igualmente como una bobina nueva",spoolmanHint:"En modo Spoolman, usa la importación/exportación CSV integrada de Spoolman.",importValidRows:"Importar {{count}} filas válidas",noValidRows:"Sin filas válidas",importing:"Importando…",importSuccess:"{{count}} bobinas importadas",importError:"Error al importar",exportError:"Error al exportar"},addSpool:"Añadir bobina",editSpool:"Editar bobina",copySpool:"Copiar bobina",material:"Material",selectMaterial:"Seleccionar material...",subtype:"Subtipo",brand:"Marca",searchBrand:"Buscar marca...",useCustomBrand:'Usar "{{brand}}"',useCustomMaterial:"Usar material personalizado: {{material}}",colorName:"Nombre del color",colorNamePlaceholder:"Blanco jade, Rojo fuego...",color:"Color",hexColor:"Color hexadecimal",pickColor:"Elegir color personalizado",labelWeight:"Peso de la etiqueta",coreWeight:"Peso de la bobina vacía",searchSpoolWeight:"Buscar peso de la bobina...",weightUsed:"Usado",currentWeight:"Peso restante",measuredWeight:"Peso medido",spoolName:"Bobina",costPerKg:"Coste por kg",storageLocation:"Ubicación de almacenamiento",storageLocationPlaceholder:"p. ej. Estante A, Cajón 1",openInInventory:"Abrir en el inventario",measuredWeightError:"El peso medido debe estar entre {{min}} g y {{max}} g.",slicerFilament:"Filamento del laminador",slicerFilamentName:"Nombre del preajuste del laminador",slicerPreset:"Preajuste del laminador",searchPresets:"Buscar preajustes de filamento...",selectedPreset:"Seleccionado",noPresetsFound:"No se encontraron preajustes",tempOverrides:"Anulaciones de temperatura",note:"Nota",notePlaceholder:"Cualquier nota adicional sobre esta bobina...",category:"Categoría",categoryPlaceholder:"p. ej. Producción, Prototipo, Cliente A",categoryNone:"Sin categoría",storageLocationNone:"Sin ubicación establecida",lowStockThresholdOverride:"Umbral de existencias bajas (esta bobina)",lowStockThresholdOverrideHelp:"Déjelo en blanco para usar el umbral global ({{global}}%).",clearRfid:"Borrar etiqueta RFID",rfidCleared:"Etiqueta RFID borrada",archive:"Archivar",restore:"Restaurar",noSpools:"Aún no hay bobinas. Añada su primera bobina para empezar.",noAvailableSpools:"No hay bobinas disponibles. Añada una bobina a su inventario o desasigne una de otra ranura primero.",kProfiles:"Perfiles K",addKProfile:"Añadir perfil K",assignSpool:"Asignar bobina",unassignSpool:"Desasignar",assignSuccess:"Bobina asignada y ranura del AMS configurada",assignPendingInsert:"Asignada. La ranura se configurará cuando inserte la bobina.",assignFailed:"Error al asignar la bobina",selectSpool:"Seleccione una bobina para asignar a esta ranura",assigned:"Asignada",assigning:"Asignando...",searchSpools:"Buscar bobinas...",showAllSpools:"Mostrar todas las bobinas",spoolmanSpools:"Bobinas de Spoolman",allMaterials:"Todos los materiales",filterByBrand:"Filtrar por marca...",showArchived:"Mostrar archivadas",quickAdd:"Añadir rápido (existencias)",quantity:"Cantidad",stock:"Existencias",configured:"Configurada",spoolsCreated:"{{count}} bobinas creadas",spoolsPartiallyCreated:"{{created}} de {{total}} bobinas creadas (algunas fallaron)",spoolCreated:"Bobina creada",spoolUpdated:"Bobina actualizada",spoolDeleted:"Bobina eliminada",deepLinkSpoolNotFound:"Bobina no encontrada",deepLinkFetchFailed:"No se pudo cargar la bobina — inténtelo de nuevo",spoolArchived:"Bobina archivada",spoolRestored:"Bobina restaurada",kProfileSaveFailed:"No se pudieron guardar los ajustes del perfil K",syncWeightSpoolNotFound:"Bobina no encontrada — es posible que se haya eliminado",syncWeightSpoolmanUnreachable:"Spoolman no es accesible — inténtelo más tarde",syncWeightFailed:"Error al sincronizar el peso",spoolmanUnreachable:"Spoolman no es accesible — inténtelo de nuevo más tarde",deleteSpoolNotFound:"Bobina no encontrada — es posible que ya se haya eliminado",deleteFailed:"Error al eliminar la bobina",archiveSpoolNotFound:"Bobina no encontrada — es posible que ya se haya eliminado",archiveFailed:"Error al archivar la bobina",restoreSpoolNotFound:"Bobina no encontrada — es posible que ya se haya eliminado",restoreFailed:"Error al restaurar la bobina",saveFailed:"Error al guardar los cambios",tagClearFailed:"Error al borrar la etiqueta",deleteConfirm:"¿Está seguro de que desea eliminar esta bobina? Esto no se puede deshacer.",archiveConfirm:"¿Está seguro de que desea archivar esta bobina?",advancedSettings:"Ajustes avanzados",filamentInfoTab:"Información del filamento",paProfileTab:"Perfil PA",filamentInfo:"Filamento",additional:"Adicional",loadingPresets:"Cargando preajustes de la nube...",cloudConnected:"Nube conectada",cloudNotConnected:"Nube no conectada (usando los valores predeterminados)",recentColors:"Recientes",searchColors:"Buscar colores...",searchResults:"Resultados de búsqueda",allColors:"Todos los colores",commonColors:"Colores comunes",showLess:"Mostrar menos",showAll:"Mostrar todos",noColorsFound:"Ningún color coincide con su búsqueda",noResults:"No se encontraron coincidencias",extraColorsLabel:"Colores adicionales",extraColorsPlaceholder:"EC984C,#6CD4BC,A66EB9,D87694",extraColorsHint:"Pegue de 2 a 8 paradas hexadecimales, separadas por comas. Se muestra como un degradado.",extraColorsInvalid:"Se ignoró el hexadecimal no válido: {{tokens}}",colorEffectLabel:"Efecto",colorEffect:{none:"Ninguno",sparkle:"Destellos",wood:"Madera",marble:"Mármol",glow:"Brillante en la oscuridad",matte:"Mate",silk:"Seda",galaxy:"Galaxia",rainbow:"Arcoíris",metal:"Metal",translucent:"Translúcido",gradient:"Degradado",dualColor:"Bicolor",triColor:"Tricolor",multicolor:"Multicolor"},selectMaterialFirst:"Seleccione primero un material en la pestaña de información del filamento.",noPrintersConfigured:"No hay impresoras configuradas. Añada impresoras para usar perfiles PA.",matchingFilter:"Coincidentes",anyBrand:"Cualquier marca",anyVariant:"Cualquier variante",autoSelect:"Selección automática",matches:"coincidencias",match:"coincidencia",noMatches:"Sin coincidencias",connected:"Conectada",offline:"Desconectada",printerOffline:"La impresora está desconectada. Conéctela para ver los perfiles de calibración.",noKProfilesMatch:"Ningún perfil K coincide con el filamento seleccionado.",leftNozzle:"Boquilla izquierda",rightNozzle:"Boquilla derecha",profilesSelected:"perfil(es) de calibración seleccionado(s)",totalInventory:"Inventario total",totalConsumed:"Total consumido",byMaterial:"Por material",inPrinter:"En la impresora",lowStock:"Existencias bajas",sinceTracking:"Desde que comenzó el seguimiento",resetConsumedCounter:"Restablecer contador",resetConsumedCounterTooltip:"Poner a cero el contador de gramos consumidos de esta bobina. El peso restante no cambia.",resetConsumedCounterConfirm:"¿Restablecer a 0 el contador de gramos consumidos de esta bobina? Las impresiones futuras volverán a contar desde cero. La bobina en sí, su cálculo de peso restante y sus ajustes no cambian.",resetAllConsumedCounters:"Restablecer todos los contadores",resetAllConsumedCountersTooltip:"Poner a cero el contador de gramos consumidos de todas las bobinas. Los pesos restantes no cambian.",resetAllConsumedCountersConfirm:"¿Restablecer a 0 el contador de gramos consumidos de las {{count}} bobinas (incluidas las archivadas)? Esto borra la estadística «Total consumido» para que las impresiones futuras cuenten desde cero. Las bobinas y los pesos restantes no cambian.",consumedCounterReset:"Contador restablecido",allConsumedCountersReset:"Contador restablecido para {{count}} bobina(s)",resetConsumedCounterFailed:"Error al restablecer el contador",loadedInAms:"Cargada en AMS/ext.",remaining:"Restante",weightCheck:"Comprobación de peso",lastWeighed:"Pesada por última vez",neverWeighed:"Nunca pesada",search:"Buscar bobinas...",showing:"Mostrando",to:"a",of:"de",show:"Mostrar",spools:"bobinas",spool:"bobina",page:"Página",noSpoolsMatch:"No se encontraron resultados",noSpoolsMatchDesc:"Pruebe a ajustar su búsqueda o sus filtros para encontrar lo que busca.",active:"Activas",archived:"Archivadas",all:"Todas",used:"Usada",new:"Nueva",clearFilters:"Borrar filtros",table:"Tabla",cards:"Tarjetas",net:"Neto",groupSimilar:"Agrupar",groupedSpools:"{{count}} bobinas idénticas",groupedRows:"filas",columns:"Columnas",configureColumns:"Configurar columnas",configureColumnsDesc:"Arrastre para reordenar las columnas o use las flechas. Conmute la visibilidad con el icono del ojo.",visible:"visibles",reset:"Restablecer",cancel:"Cancelar",applyChanges:"Aplicar cambios",moveUp:"Subir",moveDown:"Bajar",hideColumn:"Ocultar columna",showColumn:"Mostrar columna",linkToSpool:"Vincular a bobina",tagLinked:"Etiqueta vinculada a la bobina",tagLinkFailed:"Error al vincular la etiqueta",tagAlreadyLinked:"La etiqueta ya está vinculada a otra bobina",unknownTag:"Se detectó una etiqueta RFID desconocida",usageHistory:"Historial de uso",noUsageHistory:"Aún no se ha registrado ningún uso",printName:"Nombre de la impresión",weightConsumed:"Peso consumido",clearHistory:"Borrar",historyCleared:"Historial de uso borrado",fillSourceLabel:"(Inv.)",lowStockThresholdError:"El umbral debe estar entre 0,1 y 99,9",assignMismatchTitle:"Discrepancia de material",assignMismatchMessage:'El material de la bobina seleccionada "{{spoolMaterial}}" no coincide con el material de la bandeja "{{trayMaterial}}" de {{location}}. ¿Asignar de todos modos?',assignMismatchConfirm:"Asignar de todos modos",assignPartialMismatchMessage:'El material de la bobina "{{spoolMaterial}}" es similar pero no coincide exactamente con "{{trayMaterial}}" en {{location}}. ¿Desea continuar?',assignProfileMismatchMessage:'El perfil de la bobina "{{spoolProfile}}" no coincide con el perfil de la bandeja "{{trayProfile}}" en {{location}}. ¿Desea continuar?',assignReconfigureNote:"La ranura del AMS se reconfigurará para usar el perfil de la bobina.",spoolmanFilamentCatalog:"Catálogo de filamentos de Spoolman",pickFromSpoolmanCatalog:"Elegir del catálogo de Spoolman…",spoolmanFilamentSelected:"Filamento seleccionado del catálogo de Spoolman",spoolmanFilamentUnlinked:"Vínculo del catálogo de filamentos borrado",noSpoolmanFilaments:"No se encontraron filamentos en el catálogo de Spoolman",spoolmanFilamentColorSwatch:"Color del filamento",spoolWeightManagedBySpoolman:"El peso de la bobina vacía se gestiona por tipo de filamento en Spoolman",spoolmanCatalogLoadFailed:"Error al cargar el catálogo de filamentos de Spoolman"},timelapse:{title:"Time-lapse",create:"Crear time-lapse",download:"Descargar",delete:"Eliminar",preview:"Vista previa",frameRate:"Velocidad de fotogramas",quality:"Calidad",processing:"Procesando...",noTimelapses:"No hay time-lapses disponibles"},ams:{title:"AMS",slot:"Ranura",empty:"Vacía",emptySlot:"Ranura vacía",slotEmpty:"Vacía",slotUnconfigured:"?",emptySlotReset:"No hay filamento asignado",unknown:"Desconocido",humidity:"Humedad",temperature:"Temperatura",filamentType:"Tipo de filamento",filamentColor:"Color",remaining:"Restante",history:"Historial del AMS",noHistory:"No hay historial disponible",configureSlot:"Configurar ranura",externalSpool:"Bobina externa",profile:"Perfil",kFactor:"Factor K",fill:"Rellenar",configure:"Configurar",used:"usado",remainingUnit:"restante"},printModal:{title:"Iniciar impresión",selectPrinter:"Seleccionar impresora",selectPlate:"Seleccionar cama",filamentMapping:"Mapeo de filamentos",totalCost:"Coste total:",slotRemainingShort:" - quedan {{grams}} g",printSettings:"Ajustes de impresión",bedLeveling:"Nivelación de la cama",flowCalibration:"Calibración del flujo",vibrationCalibration:"Calibración de vibración",layerInspection:"Inspección de la primera capa",timelapse:"Time-lapse",startPrint:"Iniciar impresión",addToQueue:"Añadir a la cola",cancel:"Cancelar",noPrintersAvailable:"No hay impresoras disponibles",printerBusy:"La impresora está ocupada",printerOffline:"La impresora está desconectada",sameTypeDifferentColor:"Mismo tipo, color distinto",filamentTypeNotLoaded:"Tipo de filamento no cargado",openCalendar:"Abrir calendario",leftNozzle:"I",rightNozzle:"D",leftNozzleTooltip:"Boquilla izquierda",rightNozzleTooltip:"Boquilla derecha",filamentOverride:"Anulación de filamento",filamentOverrideHint:"Anule opcionalmente los filamentos para la asignación basada en el modelo. El planificador comparará con los filamentos que ha seleccionado en lugar de los valores originales del 3MF.",originalFilament:"Original",overrideWith:"Anular con",resetToOriginal:"Restablecer al original",insufficientFilamentTitle:"No hay suficiente filamento",insufficientFilamentMessage:"Algunas bobinas asignadas tienen menos filamento restante del que necesita esta impresión:",insufficientFilamentLine:"{{printer}} - {{slot}}: necesita {{required}} g, restante {{remaining}} g",printAnyway:"Imprimir de todos modos",forceColorMatch:"Forzar la coincidencia de color",staggerPrinterStarts:"Escalonar los inicios de las impresoras",staggerGroupSize:"Tamaño de grupo",staggerInterval:"Intervalo (min)",staggerPreview:"{{printers}} impresoras → {{groups}} grupos de {{size}}, iniciando cada {{interval}} min",staggerLastGroup:"último grupo: {{count}}",staggerTotal:"total: {{minutes}} min",staggerToPrinters:"Escalonar en {{count}} impresoras",gcodeInjection:"Inyectar G-code de impresión automática"},backup:{includesEncryptionKey:"Las copias de seguridad locales incluyen el archivo de clave de cifrado de MFA (DATA_DIR/.mfa_encryption_key) para que un ZIP de copia de seguridad sea autónomo. Trate el ZIP como información sensible — cualquiera que tenga el archivo puede descifrar los secretos de cliente de OIDC y los secretos TOTP que contiene.",title:"Copia de seguridad y restauración",createBackup:"Crear copia de seguridad",restoreBackup:"Restaurar copia de seguridad",restoreDescription:"Reemplazar todos los datos desde un archivo de copia de seguridad",downloadBackup:"Descargar copia de seguridad",uploadBackup:"Subir copia de seguridad",lastBackup:"Última copia de seguridad",autoBackup:"Copia de seguridad automática",backupNow:"Hacer copia de seguridad ahora",restoreWarning:"Advertencia: restaurar una copia de seguridad sobrescribirá todos los datos actuales.",includeArchives:"Incluir archivos",includeSettings:"Incluir ajustes",includeProfiles:"Incluir perfiles",backupSuccess:"Copia de seguridad creada correctamente",restoreSuccess:"Copia de seguridad restaurada correctamente",backupFailed:"Error en la copia de seguridad",restoreFailed:"Error en la restauración",restoreNote:"La impresora virtual se detendrá durante la restauración",githubBackup:"Copia de seguridad en Git",enabled:"Activada",cloudLoginRequired:"Se requiere iniciar sesión en Bambu Cloud. Inicie sesión en Perfiles → Perfiles en la nube para activar la copia de seguridad en GitHub.",cloudLoginRequiredShort:"Se requiere iniciar sesión en la nube",githubDescription:"Sincronice automáticamente sus perfiles con un repositorio privado de GitHub para la copia de seguridad y el historial de versiones.",repoIsPrivate:"El repositorio es privado — es seguro hacer copias de seguridad en él.",repoIsPublicWarning:"El repositorio es PÚBLICO. Las copias de seguridad de Bambuddy incluyen credenciales de MQTT, tokens de Home Assistant, tokens de Prometheus, su correo de Bambu Cloud y los códigos de acceso de las impresoras mediante los perfiles K. El guardado está bloqueado hasta que haga el repositorio privado en los ajustes de su proveedor.",repoVisibilityUnknown:"No se pudo determinar la visibilidad del repositorio. Bambuddy se niega a hacer copias de seguridad en cualquier cosa que no se confirme como privada; el guardado se bloqueará.",repositoryUrl:"URL del repositorio",repoUrlPlaceholderGitHub:"https://github.com/username/repo-name",repoUrlPlaceholderGitea:"https://gitea.example.com/username/repo-name",repoUrlPlaceholderForgejo:"https://forgejo.example.com/username/repo-name",repoUrlPlaceholderGitLab:"https://gitlab.com/username/repo-name",allowInsecureHttp:"Permitir HTTP no seguro",allowInsecureHttpHint:"Actívelo para instancias autoalojadas en redes privadas sin TLS",personalAccessToken:"Token de acceso personal",tokenSaved:"(guardado)",enterNewToken:"Introduzca un nuevo token para actualizar",tokenHint:"Token de granularidad fina con permiso de lectura/escritura de Contents",branch:"Rama",provider:"Proveedor de Git",providerGitHub:"GitHub",providerGitLab:"GitLab",providerGitea:"Gitea",providerForgejo:"Forgejo",manualOnly:"Solo manual",hourly:"Cada hora",daily:"Diaria",weekly:"Semanal",includeInBackup:"Incluir en la copia de seguridad",kProfiles:"Perfiles K",kProfilesDescription:"Calibración de avance de presión de las impresoras conectadas",noPrintersConnected:"No hay impresoras conectadas",printersConnected:"{{connected}}/{{total}} conectadas",cloudProfiles:"Perfiles en la nube",cloudProfilesDescription:"Preajustes de filamento, impresora y proceso de Bambu Cloud",appSettings:"Ajustes de la aplicación",appSettingsDescription:"Configuración de Bambuddy (base de datos completa)",spoolInventory:"Inventario de bobinas",spoolInventoryDescription:"Bobinas de filamento, historial de uso y seguimiento de costes",printArchives:"Archivos de impresión",printArchivesDescription:"Metadatos del historial de impresión (sin archivos gcode/3MF)",lastBackupAt:"Última copia de seguridad:",noBackupsYet:"Aún no hay copias de seguridad",next:"Siguiente:",startingBackup:"Iniciando la copia de seguridad...",test:"Probar",enableBackup:"Activar la copia de seguridad",testConnection:"Probar conexión",enterRepoUrl:"Introduzca la URL del repositorio",enterRepoAndToken:"Introduzca la URL del repositorio y el token de acceso",repoRequired:"La URL del repositorio es obligatoria",tokenRequired:"El token de acceso es obligatorio",githubBackupEnabled:"Copia de seguridad en GitHub activada",tokenUpdated:"Token actualizado",settingsSaved:"Ajustes guardados",failedToSave:"Error al guardar: {{message}}",backupCompleteFiles:"Copia de seguridad completada - {{count}} archivos actualizados",backupSkippedNoChanges:"Copia de seguridad omitida - sin cambios",backupFailed2:"Error en la copia de seguridad: {{message}}",clearedLogs:"Se borraron {{count}} registros",failedToClearLogs:"Error al borrar los registros: {{message}}",history:"Historial",clear:"Borrar",date:"Fecha",status:"Estado",commit:"Confirmación",localBackup:"Copia de seguridad local",localBackupDescription:"Cree una copia de seguridad completa de sus datos de Bambuddy, incluida la base de datos, los archivos, las subidas y todos los archivos.",downloadBackupLabel:"Descargar copia de seguridad",completeBackupZip:"Copia de seguridad completa: base de datos + todos los archivos (ZIP)",download:"Descargar",preparingBackup:"Preparando la copia de seguridad...",creatingArchive:"Creando el archivo de copia de seguridad... Esto puede tardar un rato para archivos grandes.",downloadingFile:"Descargando el archivo de copia de seguridad...",backupDownloaded:"Copia de seguridad descargada correctamente",failedToCreateBackup:"Error al crear la copia de seguridad: {{message}}",restore:"Restaurar",restoreReplacesAll:"La restauración reemplaza todos los datos.",restoreReplacesAllDetail:"Su base de datos y archivos actuales se reemplazarán por completo. Se requiere un reinicio tras la restauración.",restoreConfirmTitle:"Restaurar copia de seguridad",restoreConfirmMessage:'¿Está seguro de que desea restaurar desde "{{filename}}"? Esto reemplazará por completo su base de datos actual y todos los archivos. La aplicación deberá reiniciarse tras la restauración.',restoreConfirmButton:"Restaurar copia de seguridad",uploadingFile:"Subiendo el archivo de copia de seguridad...",backupRestoredRestart:"Copia de seguridad restaurada. Reinicie Bambuddy.",failedToRestore:"Error al restaurar la copia de seguridad. Compruebe el formato del archivo.",reloadNow:"Recargar ahora",creatingBackup:"Creando copia de seguridad",restoringBackup:"Restaurando copia de seguridad",preparing:"Preparando...",processing:"Procesando...",doNotClosePage:"No cierre esta página ni navegue a otra. Esta operación puede tardar varios minutos para copias de seguridad grandes.",restoring:"Restaurando...",restoreComplete:"Restauración completada",restoreFailed2:"Error en la restauración",importSettings:"Importar ajustes desde un archivo de copia de seguridad",pleaseWaitRestoring:"Espere mientras se restauran sus datos",selectBackupFile:"Haga clic para seleccionar el archivo de copia de seguridad (.json o .zip)",duplicateHandling:"Cómo funciona la gestión de duplicados:",matchPrinters:"Impresoras",matchPrintersBy:"coincidencia por número de serie",matchSmartPlugs:"Enchufes inteligentes",matchSmartPlugsBy:"coincidencia por dirección IP",matchNotificationProviders:"Proveedores de notificaciones",matchNotificationProvidersBy:"coincidencia por nombre",matchFilaments:"Filamentos",matchFilamentsBy:"coincidencia por nombre + tipo + marca",matchArchives:"Archivos",matchArchivesBy:"coincidencia por hash del contenido (siempre se omiten)",matchPendingUploads:"Subidas pendientes",matchPendingUploadsBy:"coincidencia por nombre de archivo",matchSettingsTemplates:"Ajustes y plantillas",matchSettingsTemplatesBy:"siempre se sobrescriben",replaceExisting:"Reemplazar los datos existentes",keepExisting:"Conservar los datos existentes",overwriteDescription:"Sobrescribir los elementos que ya existen con los datos de la copia de seguridad",keepDescription:"Restaurar solo los elementos que aún no existen",overwriteCaution:"Precaución:",overwriteWarning:"Sobrescribir reemplazará sus configuraciones actuales con los datos de la copia de seguridad. Los códigos de acceso de las impresoras nunca se sobrescriben por seguridad.",cancel:"Cancelar",processingBackup:"Procesando el archivo de copia de seguridad...",itemsRestored:"Elementos restaurados",itemsSkipped:"Elementos omitidos",restored:"Restaurados",skippedAlreadyExist:"Omitidos (ya existen)",filesCategory:"Archivos (3MF, miniaturas, etc.)",andMore:"...y {{count}} más",newApiKeysGenerated:"Nuevas claves API generadas",keysShownOnce:"Estas claves solo se muestran una vez. ¡Cópielas ahora!",copy:"Copiar",noDataFound:"No se encontraron datos para restaurar en el archivo de copia de seguridad.",close:"Cerrar",scheduledBackup:"Copias de seguridad programadas",scheduledBackupDescription:"Cree automáticamente instantáneas de copia de seguridad según una programación. El directorio de salida se puede montar en un NAS o en almacenamiento externo.",frequency:"Frecuencia",backupTime:"Hora",retention:"Retención",retentionDescription:"Número de copias de seguridad que conservar",outputPath:"Ruta de salida",outputPathPlaceholder:"Predeterminada: {{path}}",outputPathDescription:"Déjelo vacío para la ubicación predeterminada",runNow:"Ejecutar ahora",backupFiles:"Archivos de copia de seguridad",noScheduledBackups:"Aún no hay copias de seguridad",deleteBackup:"Eliminar",deleteBackupConfirm:"¿Eliminar este archivo de copia de seguridad?",backupRunning:"Copia de seguridad en curso...",scheduledBackupComplete:"Copia de seguridad completada correctamente",scheduledBackupFailed:"Error en la copia de seguridad",nextBackup:"Próxima copia de seguridad",backupSize:"Tamaño",localTimeHint:"Hora local ({{tz}})",defaultPathLabel:"Predeterminada:",categories:{settings:"Ajustes",notification_providers:"Proveedores de notificaciones",notification_templates:"Plantillas de notificaciones",smart_plugs:"Enchufes inteligentes",printers:"Impresoras",filaments:"Filamentos",maintenance_types:"Tipos de mantenimiento",archives:"Archivos",projects:"Proyectos",pending_uploads:"Subidas pendientes",external_links:"Enlaces externos",api_keys:"Claves API"}},tags:{title:"Etiquetas",addTag:"Añadir etiqueta",editTag:"Editar etiqueta",deleteTag:"Eliminar etiqueta",tagName:"Nombre de la etiqueta",tagColor:"Color de la etiqueta",noTags:"No hay etiquetas",deleteConfirm:"¿Está seguro de que desea eliminar esta etiqueta?",manageTags:"Gestionar etiquetas"},uploadModal:{title:"Subir archivos 3MF",dragDrop:"Arrastre y suelte archivos .3mf aquí",or:"o",browseFiles:"Examinar archivos",extractionInfo:"El modelo de impresora se extraerá automáticamente de los metadatos del archivo 3MF.",uploaded:"subidos",failed:"fallidos",uploading:"Subiendo...",upload:"Subir",uploadFailed:"Error al subir"},editArchive:{title:"Editar archivo",name:"Nombre",namePlaceholder:"Nombre de la impresión",printer:"Impresora",noPrinter:"Sin impresora",project:"Proyecto",noProject:"Sin proyecto",itemsPrinted:"Elementos impresos",itemsPrintedHelp:"Número de elementos producidos en este trabajo de impresión",notes:"Notas",notesPlaceholder:"Añada notas sobre esta impresión...",externalLink:"Enlace externo",externalLinkPlaceholder:"https://printables.com/model/...",externalLinkHelp:"Enlace a Printables, Thingiverse u otra fuente",tags:"Etiquetas",tagsPlaceholder:"Añada etiquetas...",addMoreTags:"Añada más etiquetas...",matchingTags:'Coincidentes con "{{query}}"',existingTags:"Etiquetas existentes",clickToAdd:"(haga clic para añadir)",status:"Estado",failureReason:"Motivo del fallo",selectReason:"Seleccionar motivo...",photos:"Fotos del resultado impreso",photosHelp:"Haga clic en + para añadir fotos de su resultado impreso",printResult:"Resultado de la impresión",saving:"Guardando...",failureReasons:{adhesionFailure:"Fallo de adhesión",spaghettiDetached:"Espagueti / Desprendido",layerShift:"Desplazamiento de capa",cloggedNozzle:"Boquilla obstruida",filamentRunout:"Agotamiento del filamento",warping:"Alabeo",stringing:"Hilos",underExtrusion:"Subextrusión",powerFailure:"Corte de corriente",userCancelled:"Cancelada por el usuario",other:"Otro"},statuses:{completed:"Completada",failed:"Fallida",aborted:"Cancelada",printing:"Imprimiendo"}},kProfiles:{title:"Perfiles K",noPrintersConfigured:"No hay impresoras configuradas",addPrinterInSettings:"Añada una impresora en Ajustes para gestionar perfiles K",noActivePrinters:"No hay impresoras activas",enablePrinterConnection:"Active la conexión de una impresora para ver sus perfiles K",loadingProfiles:"Cargando perfiles K...",printerOffline:"Impresora desconectada",printerOfflineDesc:"La impresora seleccionada no está conectada. Enciéndala para ver los perfiles K.",noMatchingProfiles:"No hay perfiles coincidentes",noMatchingProfilesDesc:"Ningún perfil coincide con sus criterios de búsqueda",noKProfiles:"No hay perfiles K",noKProfilesDesc:"No se encontraron perfiles de avance de presión para la boquilla de {{diameter}} mm",createFirstProfile:"Crear el primer perfil",printer:"Impresora",nozzle:"Boquilla",refresh:"Actualizar",addProfile:"Añadir perfil",export:"Exportar",import:"Importar",select:"Seleccionar",selectAll:"Seleccionar todo",delete:"Eliminar",searchPlaceholder:"Buscar por nombre o filamento...",allExtruders:"Todos los extrusores",leftOnly:"Solo izquierdo",rightOnly:"Solo derecho",allFlow:"Todos los flujos",hfOnly:"Solo flujo alto",sOnly:"Solo estándar",sortName:"Ordenar: nombre",sortKValue:"Ordenar: valor K",sortFilament:"Ordenar: filamento",leftExtruder:"Extrusor izquierdo",rightExtruder:"Extrusor derecho",modal:{addTitle:"Añadir perfil K",editTitle:"Editar perfil K",profileName:"Nombre del perfil",profileNamePlaceholder:"Mi perfil de PLA",kValue:"Valor K",kValuePlaceholder:"0,020",kValueHelp:"Rango típico: 0,01 - 0,06 para PLA, 0,02 - 0,10 para PETG",filament:"Filamento",selectFilament:"Seleccionar filamento...",noFilamentsHelp:"No se encontraron filamentos. Cree primero un perfil K en Bambu Studio.",flowType:"Tipo de flujo",highFlow:"Flujo alto",standard:"Estándar",nozzleSize:"Tamaño de la boquilla",extruder:"Extrusor",extruders:"Extrusores",left:"Izquierdo",right:"Derecho",notes:"Notas (almacenadas localmente)",notesPlaceholder:"Añada notas sobre este perfil...",notesHelp:"Las notas se guardan en Bambuddy, no en la impresora",syncing:"Sincronizando con la impresora...",savingExtruder:"Guardando en el extrusor {{current}}/{{total}}...",pleaseWait:"Espere"},deleteConfirm:{title:"Eliminar perfil",cannotUndo:"Esto no se puede deshacer",message:'¿Está seguro de que desea eliminar "{{name}}" de la impresora?'},bulkDelete:{title:"Eliminar perfiles",cannotUndo:"Esto no se puede deshacer",message:"¿Está seguro de que desea eliminar {{count}} perfiles seleccionados de la impresora?"},toast:{profileSaved:"Perfil K guardado",profilesSaved:"Perfil K guardado en {{count}} extrusores",selectAtLeastOneExtruder:"Seleccione al menos un extrusor",profileDeleted:"Perfil K eliminado",profilesDeleted:"Se eliminaron {{count}} perfiles",exportedProfiles:"Se exportaron {{count}} perfiles",importedProfiles:"Se importaron {{count}} de {{total}} perfiles",noProfilesToExport:"No hay perfiles que exportar",invalidFileFormat:"Formato de archivo no válido",failedToParseImport:"Error al analizar el archivo de importación",failedToSaveBatch:"Error al guardar los perfiles K",noteSaved:"Nota guardada",failedToSaveNote:"Error al guardar la nota"},permission:{noRead:"No tiene permiso para actualizar perfiles",noCreate:"No tiene permiso para añadir perfiles",noUpdate:"No tiene permiso para actualizar perfiles K",noDelete:"No tiene permiso para eliminar perfiles K",noExport:"No tiene permiso para exportar perfiles",noImport:"No tiene permiso para importar perfiles"}},virtualPrinter:{title:"Impresora virtual",running:"En ejecución",stopped:"Detenida",description:{default:"Active una impresora virtual que aparece en Bambu Studio y OrcaSlicer. Los archivos enviados a esta impresora se archivarán directamente sin imprimir.",proxy:"Active un proxy que retransmite el tráfico del laminador a una impresora real, permitiendo la impresión remota a través de cualquier red."},enable:{title:"Activar la impresora virtual",visibleInSlicer:'Visible como "Bambuddy" en la detección del laminador',proxyingTo:"Haciendo de proxy hacia {{name}}",notActive:"No activa"},model:{title:"Modelo de impresora",description:"Seleccione qué modelo de impresora emular.",restartWarning:"Cambiar el modelo reiniciará la impresora virtual"},accessCode:{title:"Código de acceso",isSet:"El código de acceso está establecido",notSet:"No hay código de acceso establecido - necesario para activarla",placeholder:"Introduzca un código de 8 caracteres",placeholderChange:"Introduzca un nuevo código para cambiarlo",hint:"Debe tener exactamente 8 caracteres. Los laminadores lo usan para autenticarse.",charCount:"({{count}}/8)",inheritedFromTarget:"Heredado de la impresora de destino",derivedFromTargetHint:"Usa el código de acceso de la impresora de destino. El puente reenvía la autenticación del laminador a la impresora real, por lo que los códigos deben coincidir — edita el código en los ajustes de la impresora para cambiarlo.",reveal:"Mostrar código de acceso",hide:"Ocultar código de acceso"},targetPrinter:{title:"Impresora de destino",configured:"Destino del proxy configurado",notConfigured:"No hay impresora de destino seleccionada - necesaria para el modo proxy",placeholder:"Seleccionar una impresora...",hint:"Seleccione la impresora a la que retransmitir el tráfico del laminador. La impresora debe estar en modo LAN.",noPrinters:"No hay impresoras configuradas. Añada primero una impresora para usar el modo proxy."},remoteInterface:{title:"Anulación de la interfaz de red",configured:"Anulación de la interfaz activa",optional:"Opcional - úsela si la IP detectada automáticamente es incorrecta (p. ej. varias tarjetas de red, Docker, VPN)",placeholder:"Detección automática (predeterminada)...",hint:"Anula la dirección IP anunciada mediante SSDP y usada en el certificado TLS. Útil cuando Bambuddy tiene varias interfaces de red."},mode:{title:"Modo",archive:"Archivar",archiveDesc:"Archivar los archivos inmediatamente",review:"Revisar",reviewDesc:"Revisar antes de archivar",queue:"Encolar",queueDesc:"Archivar y añadir a la cola",proxy:"Proxy",proxyDesc:"Retransmitir a una impresora real"},autoDispatch:{title:"Envío automático",description:"Iniciar automáticamente las impresiones al añadirlas a la cola. Cuando está desactivado, las impresiones esperan al envío manual."},queueForceColorMatch:{title:"Forzar la coincidencia de color",description:"Negarse a enviar a una impresora que no tiene cargados el tipo y el color exactos de filamento. Desactivado de forma predeterminada — sin esto, la cola usa la coincidencia solo por modelo y puede elegir una impresora con el color equivocado cargado."},tailscaleDisabled:{title:"Integración con Tailscale",description:"Actívelo para marcar esta IV como expuesta a través de Tailscale. Muestra la dirección de Tailscale del host para que sepa qué IP pegar en el laminador. El paso de importación de la CA no cambia — este interruptor no tiene ningún efecto sobre los certificados."},setupRequired:{title:"Configuración necesaria",description:"La función de impresora virtual requiere configuración adicional del sistema antes de funcionar. Esto incluye el reenvío de puertos, las reglas del cortafuegos y los ajustes específicos de la plataforma.",readGuide:"Lea la guía de configuración antes de activarla"},archiveNameSource:{title:"Origen del nombre del archivo",description:"Elija cómo se nombran los archivos nuevos cuando llegan a través de la impresora virtual. «Metadatos» usa el título incrustado por el laminador del 3MF (predeterminado). «Nombre de archivo» usa el nombre de archivo que Bambu Studio envió por FTP. Nota: Bambu Studio sobrescribe el nombre que escribe en el diálogo «enviar a la impresora» con el campo Título del 3MF cuando existe, por lo que ambos modos suelen producir la misma cadena.",metadata:"Metadatos",filename:"Nombre de archivo"},caCert:{title:"Certificado del laminador",description:"Las impresoras virtuales usan un certificado TLS firmado por la CA de Bambuddy. Importe este certificado de CA en el almacén de confianza de su laminador una sola vez para que acepte la conexión — sin necesidad de copiarlo desde la línea de comandos.",copy:"Copiar",copied:"Copiado",download:"Descargar",fingerprint:"SHA-256"},howItWorks:{title:"Cómo funciona",step1:"En la misma LAN, las impresoras virtuales aparecen automáticamente en su laminador (Bambu Studio / OrcaSlicer) mediante detección. Desde otras redes, añádalas manualmente por dirección IP y código de acceso.",step2:"En los modos Archivar, Revisar y Encolar, use el botón «Enviar» de su laminador para subir archivos 3MF a Bambuddy. El laminador mostrará «Impresión correcta» — el archivo se almacena, no se imprime.",step3:"En el modo Proxy, la impresora virtual retransmite todo el tráfico a una impresora real — las impresiones comienzan inmediatamente como si estuviera conectada directamente."},status:{title:"Detalles del estado",printerName:"Nombre de la impresora",model:"Modelo",serialNumber:"Número de serie",mode:"Modo",pendingFiles:"Archivos pendientes",targetPrinter:"Impresora de destino",ftpPort:"Puerto FTP",mqttPort:"Puerto MQTT",ftpConnections:"Conexiones FTP",mqttConnections:"Conexiones MQTT"},toast:{updated:"Ajustes de la impresora virtual actualizados",failedToUpdate:"Error al actualizar los ajustes",copyFailed:"Error al copiar — pruebe a seleccionar el texto manualmente",accessCodeRequired:"Establezca primero un código de acceso",targetPrinterRequired:"Seleccione primero una impresora de destino",bindIpRequired:"Establezca primero una IP de enlace",accessCodeEmpty:"El código de acceso no puede estar vacío",accessCodeLength:"El código de acceso debe tener exactamente 8 caracteres",targetCodeChangedRebind:"El código de acceso ahora coincide con la nueva impresora de destino. Vuelve a añadir este dispositivo en tu laminador para usar el nuevo código.",created:"Impresora virtual creada",failedToCreate:"Error al crear la impresora virtual",deleted:"Impresora virtual eliminada",failedToDelete:"Error al eliminar la impresora virtual"},list:{title:"Impresoras virtuales",add:"Añadir",addFirst:"Añadir impresora virtual",empty:"No hay impresoras virtuales configuradas. Añada una para empezar."},bindIp:{title:"Interfaz de enlace",placeholder:"Seleccionar interfaz...",hint:"Interfaz de red a la que se enlaza esta impresora virtual. Debe ser única por impresora."},proxy:{accessCodeHint:"En el modo proxy, use el código de acceso de su impresora de destino en el laminador. La conexión se reenvía de forma transparente a la impresora real."},addDialog:{title:"Añadir impresora virtual",name:"Nombre",hint:"Puede configurar el código de acceso, la impresora de destino y otros ajustes después de crearla.",create:"Crear"},deleteConfirm:{title:"Eliminar impresora virtual",message:'¿Está seguro de que desea eliminar "{{name}}"? Esto detendrá todos los servicios de esta impresora.'}},modelViewer:{openInSlicer:"Abrir en el laminador",tabs:{model:"Modelo 3D",gcode:"Vista previa de G-code"},notAvailable:"no disponible",notSliced:"no laminado",plates:"Camas",allPlates:"Todas las camas",plateNumber:"Cama {{number}}",plateCount:"{{count}} cama",plateCount_other:"{{count}} camas",objectCount:"{{count}} objeto",objectCount_other:"{{count}} objetos",filamentCount:"{{count}} filamento",filamentCount_other:"{{count}} filamentos",eta:"Tiempo estimado {{minutes}} min",noPreview:"No hay vista previa disponible para este archivo",pagination:{pageOf:"Página {{current}} de {{total}}",prev:"Anterior",next:"Siguiente"},errors:{failedToLoad:"Error al cargar el archivo",noMeshes:"No se encontraron mallas en el archivo 3MF",unsupportedFormat:"Formato de archivo no compatible"}},maintenanceDescriptions:{lubricateCarbonRods:"Aplique lubricante a las varillas de carbono para un movimiento suave",lubricateRails:"Aplique lubricante a las guías lineales para un movimiento suave",cleanNozzle:"Limpie el fusor y la boquilla para evitar obstrucciones",checkBelts:"Verifique la tensión de las correas para impresiones precisas",cleanBuildPlate:"Limpie la cama de impresión para una mejor adhesión",checkExtruder:"Inspeccione los engranajes del extrusor en busca de desgaste",checkCooling:"Asegúrese de que los ventiladores de refrigeración funcionan correctamente",generalInspection:"Inspección general de la impresora",cleanCarbonRods:"Limpie las varillas de carbono para reducir la fricción",lubricateSteelRods:"Aplique lubricante a las varillas de acero para un movimiento suave",cleanSteelRods:"Limpie las varillas de acero para reducir la fricción",cleanLinearRails:"Limpie las guías lineales para eliminar el polvo y los residuos",checkPtfeTube:"Inspeccione el tubo de PTFE en busca de desgaste o daños",replaceHepaFilter:"Reemplace el filtro HEPA para la calidad del aire",replaceCarbonFilter:"Reemplace el filtro de carbón activado",lubricateLeftNozzleRail:"Lubrique la guía de la boquilla izquierda (serie H2)"},smartPlugs:{offline:"Desconectado",admin:"Administración",openPlugAdminPage:"Abrir la página de administración del enchufe",deleteSmartPlug:"Eliminar enchufe inteligente",turnOnSmartPlug:"Encender el enchufe inteligente",turnOffSmartPlug:"Apagar el enchufe inteligente",turnOn:"Encender",turnOff:"Apagar",addSmartPlug:{scanningNetwork:"Escaneando la red...",chooseEntity:"Elija una entidad...",connectionFailed:"Error de conexión",searchEntities:"Buscar entidades...",searchPowerSensors:"Buscar sensores de potencia...",searchEnergySensors:"Buscar sensores de energía...",placeholders:{plugName:"Enchufe del salón",mqttStateOnValue:"ON, true, 1",mqttSameAsPower:"Igual que el tema de potencia, o distinto"}},linkedTo:"Vinculado a:",monitorOnly:"Solo supervisión",alerts:"Alertas",scheduleOn:"Encendido a las {{time}}",scheduleOff:"Apagado a las {{time}}",on:"Encendido",off:"Apagado",power:"Potencia",kwhToday:"kWh hoy",settings:"Ajustes",automationSettings:"Ajustes de automatización",showInSwitchbar:"Mostrar en la barra de interruptores",quickAccessSidebar:"Acceso rápido desde la barra lateral",enabled:"Activada",enableAutomation:"Activar la automatización para este enchufe",autoOn:"Encendido automático",autoOnDescription:"Encender cuando comienza la impresión",autoOff:"Apagado automático",autoOffDescription:"Apagar cuando se completa la impresión (una sola vez)",autoOffPersistent:"Mantener activado",autoOffPersistentDescription:"Permanecer activado entre impresiones en lugar de una sola vez",autoOffAfterDrying:"Apagado automático tras el secado",autoOffAfterDryingDescription:"Apagar cuando se completa el secado del AMS",delayAfterDryingMinutes:"Retardo de secado (minutos)",turnOffDelayMode:"Modo de retardo de apagado",time:"Tiempo",temp:"Temp.",delayMinutes:"Retardo (minutos)",tempThreshold:"Umbral de temperatura (°C)",tempThresholdDescription:"Se apaga cuando la boquilla se enfría por debajo de esta temperatura",edit:"Editar",deleteConfirm:'¿Está seguro de que desea eliminar "{{name}}"? Esto no se puede deshacer.',turnOnConfirm:'¿Está seguro de que desea encender "{{name}}"?',turnOffConfirm:'¿Está seguro de que desea apagar "{{name}}"? Esto cortará la corriente al dispositivo conectado.',failedToTurn:'Error al {{action}} "{{name}}"',unknown:"Desconocido",addTitle:"Añadir enchufe inteligente",editTitle:"Editar enchufe inteligente",stopScanning:"Detener escaneo",discoverTasmota:"Detectar dispositivos Tasmota",foundDevices:"Se encontraron {{count}} dispositivo(s) - haga clic para seleccionar:",noDevicesFound:"No se encontraron dispositivos Tasmota en su red",haNotConfigured:"Home Assistant no está configurado. Configúrelo en",haSettingsPath:"Ajustes → Red → Home Assistant",selectEntity:"Seleccionar entidad *",ipAddress:"Dirección IP *",nameLabel:"Nombre *",username:"Nombre de usuario",password:"Contraseña",authHint:"Déjelo vacío si su dispositivo Tasmota no requiere autenticación",linkToPrinter:"Vincular a una impresora",noPrinter:"Sin impresora (solo control manual)",linkingDescription:"La vinculación activa el encendido/apagado automático cuando las impresiones comienzan/terminan",powerAlerts:"Alertas de potencia",alertAbove:"Alertar si supera (W)",alertBelow:"Alertar si está por debajo (W)",alertDescription:"Reciba una notificación cuando el consumo de energía cruce estos umbrales. Déjelo vacío para desactivar esa dirección.",dailySchedule:"Programación diaria",turnOnAt:"Encender a las",turnOffAt:"Apagar a las",scheduleDescription:"Encender/apagar automáticamente el enchufe a estas horas cada día. Déjelo vacío para omitir esa acción.",showOnPrinterCard:"Mostrar en la tarjeta de la impresora",displayOnPrinterCard:"Mostrar el botón en la tarjeta de la impresora",connectedResult:"¡Conectado!",deviceLabel:"Dispositivo: {{name}} - ",stateLabel:"Estado: {{state}}",test:"Probar",delete:"Eliminar",save:"Guardar",add:"Añadir",cancel:"Cancelar",failedToStartScan:"Error al iniciar el escaneo",nameRequired:"El nombre es obligatorio",entityRequired:"La entidad es obligatoria para los enchufes de Home Assistant",mqttTopicRequired:"Debe configurarse al menos un tema MQTT para la supervisión de potencia, energía o estado",loadingEntities:"Cargando entidades...",loading:"Cargando...",failedToLoadEntities:"Error al cargar las entidades: {{error}}",noEntitiesMatching:'No se encontraron entidades que coincidan con "{{search}}"',noEntitiesAvailable:"No hay entidades disponibles",searchingEntities:"Buscando en todas las entidades ({{count}} encontradas)",showingEntities:"Mostrando switch, light, input_boolean ({{count}} disponibles)",energyMonitoringOptional:"Supervisión de energía (opcional)",energyMonitoringHint:"Busque y seleccione sensores que proporcionen datos de potencia/energía.",powerSensorW:"Sensor de potencia (W)",energyTodayKwh:"Energía de hoy (kWh)",totalEnergyKwh:"Energía total (kWh)",noMatchingSensors:"No hay sensores coincidentes",none:"Ninguno",mqttNotConfigured:"El broker MQTT no está configurado. Establezca la dirección del broker en",mqttSettingsPath:"Ajustes → Red → Publicación MQTT",mqttNotConfiguredSuffix:"(no necesita activar la publicación, solo rellenar los datos del broker).",mqttMonitorOnlyDescription:"Los enchufes MQTT reciben los datos de potencia/energía mediante una suscripción MQTT. El control de encendido/apagado no está disponible - use su broker MQTT o sistema de domótica.",powerMonitoring:"Supervisión de potencia",energyMonitoring:"Supervisión de energía",stateMonitoring:"Supervisión de estado",optional:"opcional",topic:"Tema",jsonPath:"Ruta JSON",multiplier:"Multiplicador",onValue:"Valor de ON",mqttPowerHint:`La ruta JSON extrae el valor de la carga útil JSON (p. ej., "power_l1"). Déjelo vacío si el tema publica valores numéricos sin procesar.
+Use el multiplicador 0,001 para mW→W, 1000 para kW→W.`,mqttEnergyHint:`La ruta JSON extrae el valor de la carga útil JSON. Déjelo vacío para valores sin procesar.
+Use el multiplicador 0,001 para Wh→kWh, 1000 para MWh→kWh.`,mqttStateHint:`La ruta JSON extrae el valor de la carga útil JSON. Déjelo vacío para valores sin procesar.
+Valor de ON: la cadena exacta que significa «ON». Déjelo vacío para la detección automática (ON, true, 1).`,restControl:"Control",restOnUrl:"URL de encendido",restOffUrl:"URL de apagado",restOnBody:"Cuerpo de la solicitud de encendido",restOffBody:"Cuerpo de la solicitud de apagado",restMethod:"Método HTTP",restHeaders:"Cabeceras personalizadas (JSON)",restStatusUrl:"URL de estado",restStatusPath:"Ruta JSON del estado",restStatusOnValue:"Valor de ON",restPowerUrl:"URL de potencia",restPowerPath:"Ruta JSON de la potencia",restPowerMultiplier:"Multiplicador de potencia",restEnergyUrl:"URL de energía",restEnergyPath:"Ruta JSON de la energía",restEnergyMultiplier:"Multiplicador de energía",restUrlRequired:"Se requiere al menos una URL (de encendido o apagado) para los enchufes REST",restHeadersHint:'p. ej. {"Authorization": "Bearer your-token"}',restBodyHint:'p. ej. ON, {"state": "on"}',restStatusHint:"URL para sondear el estado actual",restPathHint:"p. ej. state o data.power.status",restPowerUrlHint:"URL independiente para los datos de potencia (usa la URL de estado si está vacía)",restEnergyUrlHint:"URL independiente para los datos de energía (usa la URL de estado si está vacía)",restEnergyHint:"Cada valor puede usar su propia URL o recurrir a la URL de estado. Use multiplicadores para la conversión de unidades (p. ej. 0,001 para convertir Wh en kWh).",testConnection:"Probar conexión",connectionSuccess:"Conexión correcta",noSwitchesInSwitchbar:"No hay interruptores en la barra de interruptores",enableSwitchbarHint:"Active «Mostrar en la barra de interruptores» en Ajustes > Enchufes inteligentes"},notifications:{providerTypes:{callmebot:"CallMeBot/WhatsApp",ntfy:"ntfy",pushover:"Pushover",telegram:"Telegram",email:"Correo",discord:"Discord",webhook:"Webhook",homeassistant:"Home Assistant"},providerDescriptions:{email:"Notificaciones por correo SMTP",telegram:"Notificaciones mediante un bot de Telegram",discord:"Enviar a un canal de Discord mediante un webhook",ntfy:"Notificaciones push gratuitas y autoalojables",pushover:"Notificaciones push sencillas y fiables",callmebot:"Notificaciones de WhatsApp gratuitas mediante CallMeBot",webhook:"POST HTTP genérico a cualquier URL",homeassistant:"Notificaciones persistentes en el panel de Home Assistant"},lastSuccess:"Última: {{date}}",error:"Error",printer:"Impresora:",allPrinters:"Todas las impresoras",sendTestNotification:"Enviar notificación de prueba",eventSettings:"Ajustes de eventos",enabled:"Activado",sendFromProvider:"Enviar notificaciones desde este proveedor",printEvents:"Eventos de impresión",printerStatus:"Estado de la impresora",amsAlarms:"Alarmas del AMS",amsHtAlarms:"Alarmas del AMS-HT",printQueue:"Cola de impresión",start:"Inicio",plateCheck:"Comprobación de cama",complete:"Completada",failed:"Fallida",stopped:"Detenida",progress:"Progreso",offline:"Desconectada",lowFilament:"Filamento bajo",maintenance:"Mantenimiento",amsHumidity:"Humedad del AMS",amsTemp:"Temp. del AMS",amsHtHumidity:"Humedad del AMS-HT",amsHtTemp:"Temp. del AMS-HT",bedCooled:"Cama enfriada",firstLayer:"Primera capa",quiet:"Silencio",digest:"Resumen {{time}}",printStarted:"Impresión iniciada",plateNotEmpty:"Cama no vacía",plateNotEmptyDescription:"Objetos detectados antes de la impresión",printCompleted:"Impresión completada",bedCooledLabel:"Cama enfriada",bedCooledDescription:"La cama se enfrió por debajo del umbral tras la impresión",firstLayerCompleteLabel:"Primera capa completada",firstLayerCompleteDescription:"Notificar con una captura cuando termina la primera capa",missingSpoolAssignmentLabel:"Falta la asignación de bobina",missingSpoolAssignmentDescription:"Notificar cuando la impresión comienza y las bandejas necesarias no tienen ninguna bobina asignada",printFailed:"Impresión fallida",printStopped:"Impresión detenida",progressMilestones:"Hitos de progreso",progressMilestonesDescription:"Notificar al 25%, 50% y 75%",printerOffline:"Impresora desconectada",printerError:"Error de la impresora",lowFilamentLabel:"Filamento bajo",maintenanceDue:"Mantenimiento pendiente",maintenanceDueDescription:"Notificar cuando se necesite mantenimiento",amsHumidityHigh:"Humedad alta del AMS",amsHumidityHighDescription:"La humedad del AMS normal supera el umbral",amsTemperatureHigh:"Temperatura alta del AMS",amsTemperatureHighDescription:"La temperatura del AMS normal supera el umbral",amsHtHumidityHigh:"Humedad alta del AMS-HT",amsHtHumidityHighDescription:"La humedad del AMS-HT supera el umbral",amsHtTemperatureHigh:"Temperatura alta del AMS-HT",amsHtTemperatureHighDescription:"La temperatura del AMS-HT supera el umbral",inventoryAlerts:"Alertas de inventario",stockReorderAlert:"Alerta de reabastecimiento",stockReorderAlertDescription:"El SKU ha alcanzado su punto de reabastecimiento",stockBreakAlert:"Alerta de rotura de existencias",stockBreakAlertDescription:"Las existencias se agotarán antes de que llegue el reabastecimiento",jobAdded:"Trabajo añadido",jobAddedDescription:"Trabajo añadido a la cola",jobAssigned:"Trabajo asignado",jobAssignedDescription:"Trabajo basado en el modelo asignado a una impresora",jobStarted:"Trabajo iniciado",jobStartedDescription:"El trabajo de la cola empezó a imprimirse",jobWaiting:"Trabajo en espera",jobWaitingDescription:"Trabajo a la espera de filamento o impresora",jobSkipped:"Trabajo omitido",jobSkippedDescription:"Trabajo omitido (el anterior falló)",jobFailed:"Trabajo fallido",jobFailedDescription:"El trabajo no pudo iniciarse",queueComplete:"Cola completada",queueCompleteDescription:"Todos los trabajos de la cola han terminado",quietHours:"Horas de silencio",noNotificationsDuring:"No hay notificaciones durante estas horas",editProviderToChangeQuietHours:"Edite el proveedor para cambiar las horas de silencio",dailyDigest:"Resumen diario",batchNotifications:"Agrupar las notificaciones en un único resumen diario",sendAt:"Enviar a las {{time}}",editProviderToChangeDigestTime:"Edite el proveedor para cambiar la hora del resumen",edit:"Editar",deleteProvider:"Eliminar proveedor de notificaciones",deleteConfirm:'¿Está seguro de que desea eliminar "{{name}}"? Esto no se puede deshacer.',delete:"Eliminar",addTitle:"Añadir proveedor de notificaciones",editTitle:"Editar proveedor de notificaciones",nameLabel:"Nombre *",namePlaceholder:"Mis notificaciones",providerTypeLabel:"Tipo de proveedor *",configuration:"Configuración",testConfiguration:"Probar configuración",printerFilter:"Filtro de impresora",onlyFromPrinter:"Enviar notificaciones solo para los eventos de esta impresora",quietHoursDnd:"Horas de silencio (no molestar)",quietStart:"Inicio",quietEnd:"Fin",dailyDigestLabel:"Resumen diario",sendDigestAt:"Enviar el resumen a las",digestCollected:"Los eventos se recopilarán y se enviarán como un único resumen a esta hora",notificationEvents:"Eventos de notificación",progressPercent:"(25%, 50%, 75%)",bedCooledAfterPrint:"(después de completar la impresión)",eventPriority:{sectionTitle:"Prioridad de ntfy",helpNtfy:"Elija una prioridad para cada evento activado. ntfy las usa para escalar las alertas (sonido, visibilidad, comportamiento de las notificaciones push). Los niveles no establecidos aquí usan el valor predeterminado del servidor ntfy.",min:"Mínima",low:"Baja",default:"Predeterminada",high:"Alta",urgent:"Urgente"},cancel:"Cancelar",save:"Guardar",add:"Añadir",nameRequired:"El nombre es obligatorio",fieldRequired:"{{field}} es obligatorio",phoneNumber:"Número de teléfono",apiKey:"Clave API",serverUrl:"URL del servidor",topic:"Tema",authToken:"Token de autenticación",userKey:"Clave de usuario",appToken:"Token de la aplicación",priority:"Prioridad",botToken:"Token del bot",chatId:"ID del chat",smtpServer:"Servidor SMTP",smtpPort:"Puerto SMTP",security:"Seguridad",authentication:"Autenticación",username:"Nombre de usuario",password:"Contraseña",fromEmail:"Correo del remitente",toEmail:"Correo del destinatario",webhookUrl:"URL del webhook",payloadFormat:"Formato de la carga útil",authorization:"Autorización",titleFieldName:"Nombre del campo del título",messageFieldName:"Nombre del campo del mensaje",editTemplate:"Editar plantilla: {{name}}",titleLabel:"Título",bodyLabel:"Cuerpo",titlePlaceholder:"Título de la notificación...",bodyPlaceholder:"Cuerpo de la notificación...",availableVariables:"Variables disponibles",clickToInsert:"Haga clic para insertar en la posición del cursor en el cuerpo",livePreview:"Vista previa en directo",hide:"Ocultar",show:"Mostrar",loadingPreview:"Cargando la vista previa...",enterTemplateContent:"Introduzca el contenido de la plantilla para ver la vista previa",titlePreview:"Título:",bodyPreview:"Cuerpo:",resetToDefault:"Restablecer al valor predeterminado",titleRequired:"El título es obligatorio",bodyRequired:"El cuerpo es obligatorio",notificationLog:"Registro de notificaciones",showFailedOnly:"Solo fallidas",last24Hours:"Últimas 24 horas",last7Days:"Últimos 7 días",last30Days:"Últimos 30 días",last90Days:"Últimos 90 días",justNow:"Ahora mismo",noFailedNotifications:"No hay notificaciones fallidas",noNotificationsLogged:"No hay notificaciones registradas",unknownProvider:"Proveedor desconocido",logTitle:"Título",logMessage:"Mensaje",logError:"Error",logProvider:"Proveedor: {{type}}",logTime:"Hora: {{time}}",refresh:"Actualizar",clearOld:"Borrar antiguas",statsSummary:"Últimos {{days}} días:",statsNotifications:"notificaciones",statsSent:"{{count}} enviadas",statsFailed:"{{count}} fallidas",eventTypes:{print_start:"Impresión iniciada",print_complete:"Impresión completada",print_failed:"Impresión fallida",print_stopped:"Impresión detenida",print_progress:"Progreso",printer_offline:"Impresora desconectada",printer_error:"Error de la impresora",filament_low:"Filamento bajo",maintenance_due:"Mantenimiento pendiente",test:"Prueba"},userEmail:{title:"Notificaciones",emailNotifications:"Notificaciones por correo",emailNotificationsDesc:"Reciba notificaciones por correo de sus propios trabajos de impresión. Los correos se envían usando los ajustes de SMTP del sistema configurados en la autenticación avanzada.",sendingTo:"Las notificaciones se enviarán a",noEmailWarning:"Su cuenta no tiene una dirección de correo. Póngase en contacto con un administrador para añadir una.",printJobNotifications:"Notificaciones de trabajos de impresión",printJobNotificationsDesc:"Elija qué eventos activan las notificaciones por correo para los trabajos de impresión que envíe.",printJobStarts:"El trabajo de impresión comienza",printJobStartsDesc:"Reciba una notificación cuando su trabajo de impresión comience.",printJobFinishes:"El trabajo de impresión termina",printJobFinishesDesc:"Reciba una notificación cuando su trabajo de impresión se complete correctamente.",printErrors:"Errores de impresión",printErrorsDesc:"Reciba una notificación cuando su trabajo de impresión falle o encuentre un error.",printJobStops:"El trabajo de impresión se detiene",printJobStopsDesc:"Reciba una notificación cuando su trabajo de impresión se cancele o se detenga.",saveSuccess:"Preferencias de notificación guardadas.",saveError:"Error al guardar las preferencias de notificación."}},richTextEditor:{bold:"Negrita",italic:"Cursiva",underline:"Subrayado",bulletList:"Lista con viñetas",numberedList:"Lista numerada",alignLeft:"Alinear a la izquierda",alignCenter:"Centrar",alignRight:"Alinear a la derecha",addLink:"Añadir enlace",removeLink:"Quitar enlace"},externalLinks:{noLinksConfigured:"No hay enlaces externos configurados",deleteLink:"Eliminar enlace",removeCustomIcon:"Quitar el icono personalizado",openInNewTab:"Abrir en una pestaña nueva",placeholders:{linkName:"Mi enlace"}},keyboardShortcuts:{title:"Atajos de teclado",navigation:"Navegación",archivesSection:"Archivos",kProfilesSection:"Perfiles K",generalSection:"General",shortcuts:{goToPrinters:"Ir a Impresoras",goToArchives:"Ir a Archivos",goToQueue:"Ir a la cola",goToStats:"Ir a Estadísticas",goToProfiles:"Ir a Perfiles en la nube",goToSettings:"Ir a Ajustes",focusSearch:"Enfocar la búsqueda",openUploadModal:"Abrir la ventana de subida",clearSelection:"Borrar la selección / quitar el foco del campo",contextMenu:"Menú contextual en las tarjetas",refreshProfiles:"Actualizar perfiles",newProfile:"Nuevo perfil",exitSelectionMode:"Salir del modo de selección",showHelp:"Mostrar esta ayuda"},footer:"Pulse Esc o haga clic fuera para cerrar"},notificationLog:{title:"Registro de notificaciones",events:{printStarted:"Impresión iniciada",printComplete:"Impresión completada",printFailed:"Impresión fallida",printStopped:"Impresión detenida",progress:"Progreso",printerOffline:"Impresora desconectada",printerError:"Error de la impresora",lowFilament:"Filamento bajo",maintenanceDue:"Mantenimiento pendiente",test:"Prueba"},timeAgo:{justNow:"Ahora mismo",minutesAgo:"hace {{minutes}} min",hoursAgo:"hace {{hours}} h"}},restoreBackup:{title:"Restaurar copia de seguridad",restoring:"Restaurando...",restoreComplete:"Restauración completada",restoreFailed:"Error en la restauración",importSettings:"Importar ajustes desde un archivo de copia de seguridad",pleaseWait:"Espere mientras se restauran sus datos",clickToSelect:"Haga clic para seleccionar el archivo de copia de seguridad (.json o .zip)",howDuplicateHandling:"Cómo funciona la gestión de duplicados:",categories:{printers:"Impresoras",smartPlugs:"Enchufes inteligentes",notificationProviders:"Proveedores de notificaciones",filaments:"Filamentos",archives:"Archivos",pendingUploads:"Subidas pendientes",settingsTemplates:"Ajustes y plantillas"},matchingInfo:{printers:"coincidencia por número de serie",smartPlugs:"coincidencia por dirección IP",notificationProviders:"coincidencia por nombre",filaments:"coincidencia por nombre + tipo + marca",archives:"coincidencia por hash del contenido",pendingUploads:"coincidencia por nombre de archivo",settingsTemplates:"siempre se sobrescriben"},replaceExisting:"Reemplazar los datos existentes",keepExisting:"Conservar los datos existentes",replaceDescription:"Sobrescribir los elementos que ya existen con los datos de la copia de seguridad",keepDescription:"Restaurar solo los elementos que aún no existen",caution:"Precaución:",cautionText:"Sobrescribir reemplazará sus configuraciones actuales con los datos de la copia de seguridad. Los códigos de acceso de las impresoras nunca se sobrescriben por seguridad.",itemsRestored:"Elementos restaurados",itemsSkipped:"Elementos omitidos",restored:"Restaurados",skipped:"Omitidos (ya existen)",filesLabel:"Archivos (3MF, miniaturas, etc.)",newApiKeysGenerated:"Nuevas claves API generadas",newApiKeysWarning:"Estas claves solo se muestran una vez. ¡Cópielas ahora!",processingBackup:"Procesando el archivo de copia de seguridad...",noDataFound:"No se encontraron datos para restaurar en el archivo de copia de seguridad.",failedToRestore:"Error al restaurar la copia de seguridad. Compruebe el formato del archivo."},backupExport:{title:"Exportar copia de seguridad",selectData:"Seleccione los datos que incluir",selectAll:"Seleccionar todo",selectNone:"No seleccionar nada",categoryDescriptions:{settings:"Idioma, tema, preferencias de actualización",notifications:"ntfy, Pushover, Discord, etc.",templates:"Plantillas de mensajes personalizadas",smartPlugs:"Configuraciones de enchufes Tasmota",externalLinks:"Enlaces de la barra lateral a servicios externos",printers:"Información de las impresoras (códigos de acceso excluidos)",plateDetection:"Imágenes de referencia de la cama vacía",filaments:"Tipos y costes de filamento",maintenance:"Programaciones de mantenimiento personalizadas",archives:"Todos los datos de impresión + archivos (3MF, miniaturas, fotos)",projects:"Proyectos, elementos de la lista de materiales y adjuntos",pendingUploads:"Subidas de la impresora virtual pendientes de revisión",apiKeys:"Claves API de webhook (se generan claves nuevas al importar)"},requiresPrinters:"Requiere que se seleccionen las impresoras",zipFileWarning:"Se creará un archivo ZIP.",zipFileDescription:"Incluye todos los archivos 3MF, las miniaturas, los time-lapses y las fotos. Esto puede tardar un rato y dar como resultado un archivo grande.",includeAccessCodes:"Incluir los códigos de acceso",includeAccessCodesDescription:"Para transferir a otra máquina",includeAccessCodesWarning:"Los códigos de acceso se incluirán en texto plano. ¡Mantenga este archivo de copia de seguridad seguro!",categoriesSelected:"{{selectedCount}} categorías seleccionadas"},pendingUploads:{placeholders:{notes:"Añada notas sobre esta impresión..."},discardUpload:"Descartar subida",archiveAllUploads:"Archivar todas las subidas",discardAllUploads:"Descartar todas las subidas",archive:"Archivar",timeAgo:{justNow:"Ahora mismo",minutesAgo:"hace {{minutes}} min",hoursAgo:"hace {{hours}} h",daysAgo:"hace {{days}} d"}},apiBrowser:{placeholders:{requestBody:"Cuerpo de la solicitud JSON...",searchEndpoints:"Buscar puntos de conexión..."}},configureAmsSlot:{title:"Configurar la ranura del AMS",slotConfigured:"¡Ranura configurada!",configuringSlot:"Configurando la ranura:",slotLabel:"{{ams}} Ranura {{slot}}",searchPresets:"Buscar preajustes...",colorPlaceholder:"Nombre del color o hexadecimal (p. ej., marrón, FF8800)",clearCustomColor:"Borrar el color personalizado",noCloudPresets:"No hay preajustes de la nube. Inicie sesión en Bambu Cloud para sincronizar.",noPresetsAvailable:"No hay preajustes disponibles. Inicie sesión en Bambu Cloud o importe perfiles locales.",noMatchingPresets:"No se encontraron preajustes coincidentes.",custom:"Personalizado",builtin:"Integrado",settingsSentToPrinter:"Ajustes enviados a la impresora",filamentProfile:"Perfil de filamento",kProfileLabel:"Perfil K (avance de presión)",filteringFor:"Filtrando por: {{material}}",noKProfile:"Sin perfil K (usar el predeterminado 0,020)",noMatchingKProfiles:"No se encontraron perfiles K coincidentes. Se usará el K=0,020 predeterminado.",selectFilamentFirst:"Seleccione primero un perfil de filamento",kFromCalibration:"K={{value}} de la calibración de la impresora",customColorLabel:"Color personalizado (opcional)",presetColors:"Colores de {{name}}:",showLessColors:"Mostrar menos colores",showMoreColors:"Mostrar más colores",clear:"Borrar",hexLabel:"Hex: #{{hex}}",resetting:"Restableciendo...",resetSlot:"Restablecer ranura",cancel:"Cancelar",configuring:"Configurando...",configureSlot:"Configurar ranura"},githubBackup:{title:"Copia de seguridad en Git",history:"Historial",downloadBackup:"Descargar copia de seguridad",restoreBackup:"Restaurar copia de seguridad",noBackupsYet:"Aún no hay copias de seguridad"},emailSettings:{placeholders:{fromName:"BamBuddy"}},tagManagement:{searchTags:"Buscar etiquetas...",renameTag:"Renombrar etiqueta",deleteTag:"Eliminar etiqueta"},notificationTemplates:{placeholders:{title:"Título de la notificación...",body:"Cuerpo de la notificación..."}},batchTag:{placeholders:{newTag:"Introduzca una nueva etiqueta..."}},photoGallery:{deletePhoto:"Eliminar foto"},filamentHoverCard:{copySpoolUuid:"Copiar el UUID de la bobina"},kProfilesView:{hasNote:"Tiene nota",copyProfile:"Copiar perfil"},layout:{openMenu:"Abrir menú",noPermissionSystemInfo:"No tiene permiso para ver la información del sistema"},dashboard:{dragToReorder:"Arrastre para reordenar",hideWidget:"Ocultar widget"},notificationProviderCard:{deleteNotificationProvider:"Eliminar proveedor de notificaciones"},fileManagerModal:{closeFileManager:"Cerrar el gestor de archivos",sortFiles:"Ordenar archivos",goToParentFolder:"Ir a la carpeta superior",threeView:"Vista 3D"},embeddedCameraViewer:{refreshStream:"Actualizar la transmisión",close:"Cerrar",zoomOut:"Alejar",resetZoom:"Restablecer el zoom",zoomIn:"Acercar",dragToResize:"Arrastre para redimensionar"},timelapseViewer:{skipBack5s:"Retroceder 5 s",skipForward5s:"Avanzar 5 s"},notificationProviders:{descriptions:{email:"Notificaciones por correo SMTP",telegram:"Notificaciones mediante un bot de Telegram",discord:"Enviar a un canal de Discord mediante un webhook",ntfy:"Notificaciones push gratuitas y autoalojables",pushover:"Notificaciones push sencillas y fiables",callmebot:"Notificaciones de WhatsApp gratuitas mediante CallMeBot",webhook:"POST HTTP genérico a cualquier URL"}},logViewer:{searchPlaceholder:"Buscar mensaje o nombre del registrador...",noLogEntries:"No se encontraron entradas de registro"},switchbarPopover:{noSwitchesInSwitchbar:"No hay interruptores en la barra de interruptores"},projectPageModal:{placeholders:{title:"Título",designer:"Diseñador",license:"Licencia",description:"Introduzca una descripción...",profileTitle:"Título del perfil",profileDescription:"Descripción del perfil..."}},spoolmanSettings:{},time:{unknown:"-",waiting:"En espera",justNow:"Ahora mismo",now:"Ahora",minsAgo:"hace {{count}} min",inMins:"en {{count}} min",hoursAgo:"hace {{count}} h",inHours:"en {{count}} h",daysAgo:"hace {{count}} d",inDays:"en {{count}} d"},spoolbuddy:{nav:{dashboard:"Panel",ams:"AMS",inventory:"Inventario",writeTag:"Escribir",settings:"Ajustes"},status:{nfcReady:"NFC listo",nfcOff:"NFC apagado",offline:"Desconectado",online:"En línea",noPrinters:"No hay impresoras",deviceOffline:"Dispositivo desconectado",waitingConnection:"Esperando la conexión del dispositivo...",systemReady:"Sistema listo",status:"Estado"},dashboard:{readyToScan:"Listo para escanear",idleMessage:"Coloque una bobina en la báscula para identificarla",nfcHint:"La etiqueta NFC se leerá automáticamente",device:"Dispositivo",syncWeight:"Sincronizar peso",weightSynced:"¡Sincronizado!",unknownTag:"Etiqueta desconocida",newTag:"Nueva etiqueta detectada",onScale:"en la báscula",linkSpool:"Vincular a bobina",linkTagTitle:"Vincular la etiqueta a una bobina",linkTag:"Vincular etiqueta",selectSpool:"Seleccione una bobina a la que vincular esta etiqueta:",noUntagged:"No se encontraron bobinas sin etiquetas",tagDetected:"Etiqueta detectada",noTag:"Sin etiqueta",tagId:"Etiqueta",grossWeight:"Peso bruto",spoolSize:"Tamaño de la bobina",close:"Cerrar",currentSpool:"Bobina actual",plateReady:"Cama lista: {{name}}",plateReadyLabel:"Camas listas para despejar",plateClearAction:"Despejar",plateClearedToast:"Cama marcada como despejada",plateClearFailed:"No se pudo marcar la cama como despejada"},modal:{spoolDetected:"Bobina detectada",assignToAms:"Asignar al AMS",syncWeight:"Sincronizar peso",weightSynced:"¡Sincronizado!",syncing:"Sincronizando...",newTagDetected:"Nueva etiqueta detectada",addToInventory:"Añadir al inventario",assignToAmsTitle:"Asignar al AMS",selectSlot:"Seleccione una ranura",assign:"Asignar",assigning:"Asignando...",assignSuccess:"¡Asignada!",assignPendingInsert:"Asignada. La ranura se configurará cuando inserte la bobina.",assignError:"Error al asignar la bobina. Inténtelo de nuevo.",noPrinterSelected:"Seleccionar una impresora...",noAmsDetected:"No se detectó ningún AMS en esta impresora",slot:"Ranura"},weight:{noReading:"Sin lectura",stable:"Estable",measuring:"Midiendo...",tare:"Tara",calibrate:"Calibrar"},spool:{remaining:"Restante",material:"Material",brand:"Marca",color:"Color",coreWeight:"Núcleo",labelWeight:"Etiqueta",scaleWeight:"Báscula",netWeight:"Neto",lastUsed:"Usada por última vez"},ams:{noData:"No se detectó ningún AMS",connectAms:"Conecte un AMS para ver las ranuras de filamento",noPrinter:"No hay impresora seleccionada",selectPrinter:"Seleccione una impresora en la barra superior",printerDisconnected:"Impresora desconectada",humidity:"Humedad",level:"Nivel",active:"Activa",slot:"Ranura",empty:"Vacía"},inventory:{search:"Buscar bobinas...",empty:"No hay bobinas en el inventario",noResults:"No hay bobinas coincidentes",spools:"bobinas",addSpool:"Añadir bobina"},settings:{tabDevice:"Dispositivo",tabDisplay:"Pantalla",tabScale:"Báscula",tabUpdates:"Actualizaciones",nfcReader:"Lector NFC",type:"Tipo",connection:"Conexión",notConnected:"N/D",deviceInfo:"Información del dispositivo",hostname:"Host",uptime:"Tiempo de actividad",systemConfig:"Backend y autenticación",backendUrl:"URL del backend de Bambuddy",apiToken:"Token de API",apiTokenPlaceholder:"Introduzca el token de API",saveConfig:"Guardar configuración",systemQueued:"Configuración encolada.",nfcDiagnostic:"Diagnóstico de NFC",scaleDiagnostic:"Diagnóstico de la báscula",readTagDiagnostic:"Diagnóstico de lectura de etiqueta",testNfc:"Probar el lector",testScale:"Probar la precisión",testReadTag:"Leer etiqueta",systemFieldsRequired:"La URL del backend es obligatoria.",brightness:"Brillo",saved:"Guardado",noBacklight:"No se detectó retroiluminación DSI. El control del brillo requiere una pantalla DSI.",screenBlank:"Tiempo de espera para apagar la pantalla",screenBlankDesc:"La pantalla se apaga tras la inactividad. Toque para activarla.",displayNote:"El brillo se aplica como un filtro de software.",scaleCalibration:"Calibración de la báscula",currentWeight:"Peso actual",tareOffset:"Tara",calFactor:"Factor",knownWeight:"Peso conocido",calStep1:"Retire todos los elementos de la báscula y pulse Poner a cero.",calStep2:"Coloque el peso conocido en la báscula.",setZero:"Poner a cero",calibrateNow:"Calibrar",calibrated:"Calibrada",tareSet:"Comando de tara enviado. Esperando al dispositivo...",tareComplete:"¡Tara completada!",tareTimedOut:"Tara agotó el tiempo de espera — ¿está activo el daemon de SpoolBuddy?",tareFailed:"Error al enviar el comando de tara",zeroSet:"Punto cero establecido. Coloque el peso conocido en la báscula.",calibrationDone:"¡Calibración completada!",calibrationFailed:"Error en la calibración",lastCalibrated:"Calibrada por última vez",stable:"Estable",settling:"Estabilizando...",firmware:"Firmware",scale:"Báscula",noDevice:"No se encontró ningún dispositivo SpoolBuddy",daemonVersion:"Versión del demonio",currentVersion:"Actual",versionPending:"Esperando al demonio...",checking:"Comprobando...",checkUpdates:"Buscar actualizaciones",updateAvailable:"Actualización disponible",updateInstructions:"Actualice mediante SSH: ejecute el script de instalación de SpoolBuddy para actualizar.",upToDate:"Actualizado",includeBeta:"Incluir versiones beta"},writeTag:{tabExisting:"Bobina existente",tabNew:"Bobina nueva",tabReplace:"Reemplazar etiqueta",searchPlaceholder:"Buscar por material, color, marca...",noUntaggedSpools:"No hay bobinas sin etiquetas",noTaggedSpools:"No hay bobinas con etiquetas",selectSpool:"Seleccione una bobina y luego coloque una etiqueta NTAG en blanco en el lector",placeTag:"Coloque una etiqueta NTAG en el lector",tagReady:"Etiqueta detectada — lista para escribir",writeTag:"Escribir etiqueta",replaceTag:"Reemplazar etiqueta",writing:"Escribiendo la etiqueta...",waiting:"Esperando a SpoolBuddy...",writeSuccess:"¡Etiqueta escrita correctamente!",writeFailed:"Error al escribir",queueFailed:"Error al encolar el comando de escritura",tryAgain:"Inténtelo de nuevo",cancel:"Cancelar",replaceWarning:"La etiqueta antigua se desvinculará. La nueva etiqueta la reemplazará.",deviceOffline:"SpoolBuddy está desconectado",material:"Material",colorName:"Nombre del color",color:"Color",brand:"Marca",weight:"Peso (g)",createSpool:"Crear bobina",creating:"Creando...",spoolCreated:"¡Bobina creada! Lista para escribir.",createFailed:"Error al crear la bobina",incompleteDataWarning:"Etiqueta escrita con datos de Spoolman incompletos"},quickMenu:{printerPower:"Alimentación de la impresora",systemControls:"Sistema",restartDaemon:"Reiniciar demonio",restartBrowser:"Reiniciar navegador",reboot:"Reiniciar",shutdown:"Apagar",swipeToClose:"Deslice hacia abajo para cerrar",confirmTitle:"Confirmar",confirmShutdown:"¿Está seguro de que desea apagar el SpoolBuddy? Necesitará acceso físico para volver a encenderlo.",confirmReboot:"¿Está seguro de que desea reiniciar el SpoolBuddy?",confirmRestartDaemon:"¿Reiniciar el demonio de SpoolBuddy? El NFC y la báscula no estarán disponibles temporalmente.",confirmRestartBrowser:"¿Reiniciar el navegador del quiosco? La pantalla se quedará en negro brevemente.",confirm:"Confirmar",confirmPlugOn:"¿Encender {{name}}?",confirmPlugOff:"¿Apagar {{name}}?",turnOn:"Encender",turnOff:"Apagar"}},diagnostic:{modalTitle:"Diagnóstico de conexión — {{name}}",running:"Ejecutando el diagnóstico...",runningElapsed:"Ejecutando el diagnóstico... ({{elapsed}}s)",waitingForReportHint:"Esperando a que la impresora publique un informe de estado — puede tardar hasta {{max}} segundos.",runFailed:"No se pudo ejecutar el diagnóstico: {{error}}",retry:"Ejecutar de nuevo",runButton:"Ejecutar diagnóstico",sectionTitle:"Diagnóstico de conexión",sectionDescription:"Compruebe por qué una impresora no se conecta o no imprime — accesibilidad de los puertos, modo desarrollador LAN, modo de red de Docker y credenciales.",noPrinters:"No hay impresoras configuradas.",overall:{ok:"No se encontraron problemas — la conexión de la impresora parece correcta.",warnings:"La impresora debería funcionar, pero algunas cosas necesitan atención.",problems:"Se encontraron problemas que explican por qué la impresora no se conecta o no imprime."},check:{port_mqtt:{title:"Puerto de control (MQTT 8883)",pass:"Accesible — la impresora acepta conexiones de control.",fail:"El puerto 8883 no es accesible. La impresora está apagada, en una dirección IP distinta, o un cortafuegos lo está bloqueando. Verifique la IP de la impresora y que nada bloquee el puerto 8883."},port_ftps:{title:"Puerto de transferencia de archivos (FTPS 990)",pass:"Accesible — el envío de archivos de impresión funcionará.",warn:"El puerto 990 no es accesible. La supervisión puede seguir funcionando, pero el envío de impresiones a la impresora fallará. Asegúrese de que el puerto 990 no esté bloqueado."},external_storage:{title:"Almacenar archivos enviados en almacenamiento externo (paso 4 de instalación)",pass:"La impresora informa que esta opción está activada — los archivos enviados se guardarán en la tarjeta SD y los archivos tendrán miniaturas y metadatos del slicer.",fail:'La impresora informa que esta opción está desactivada. Active "Almacenar archivos enviados en almacenamiento externo" — en firmware reciente (P2S 01.02 / Bambu Studio 2.6+) el conmutador está en los Ajustes de Impresión de la impresora; en versiones anteriores está en la pestaña Dispositivo de Bambu Studio / OrcaSlicer. Sin esta opción, cada impresión archivada queda sin miniatura ni metadatos del slicer.',skip:"No comprobado — se necesita una conexión MQTT activa. En slicers más antiguos donde este ajuste solo existe en el slicer, la impresora no lo reporta, así que esta comprobación pasa aunque la opción esté desactivada — verifique el paso 4 de la instalación manualmente."},port_rtsps:{title:"Puerto de la cámara (RTSPS 322)",pass:"Accesible — la transmisión de la cámara funcionará.",warn:"El puerto 322 no es accesible. La vista de la cámara en directo no funcionará. Esto no afecta a la impresión."},network_mode:{title:"Modo de red de Docker",pass:"Ejecutándose en modo de red de host.",warn:'Bambuddy se está ejecutando en red de tipo bridge de Docker. La detección de impresoras y la impresora virtual necesitan el modo de red de host — vuelva a crear el contenedor con "network_mode: host".',skip:"No se está ejecutando en Docker — no aplicable."},subnet:{title:"Subred de la red",pass:"La impresora y Bambuddy están en la misma subred.",warn:"La impresora ({{printer_ip}}) y Bambuddy ({{host_ip}}) están en subredes distintas. Es posible que no se alcancen entre sí a menos que se configure el enrutamiento entre las subredes.",skip:"No se pudo determinar la subred — omitido."},mqtt_auth:{title:"Credenciales de la impresora",pass:"La impresora aceptó la conexión.",fail:"La impresora es accesible pero rechazó la conexión. Lo más probable es que el código de acceso o el número de serie sean incorrectos. El código de acceso cambia cada vez que se conmuta el modo desarrollador — vuelva a copiarlo de la pantalla de la impresora.",skip:"No comprobado — no se pudo alcanzar la impresora."},developer_mode:{title:"Modo desarrollador LAN",pass:"El modo desarrollador está activado.",fail:"El modo desarrollador está DESACTIVADO en la impresora. Actívelo en los ajustes de LAN de la impresora — y confirme con Aceptar. Sin él, las impresiones no comenzarán.",skip:"No se pudo comprobar — requiere una conexión activa con la impresora."},printer_publishing:{title:"La impresora publica estado",pass:"La impresora está publicando actualizaciones de estado — AMS, filamentos y perfiles K se reflejarán correctamente en el slicer.",fail:"El broker MQTT aceptó la conexión, pero la impresora no ha publicado ningún informe de estado. Casi siempre se trata de un número de serie incorrecto o con mayúsculas/minúsculas mal escritas — el topic device//api/v1/metrics pour la surveillance Prometheus/Grafana.",bearerTokenOptional:"Token Bearer (optionnel)",bearerTokenHint:"Si défini, les requêtes doivent inclure Authorization: Bearer ",metricsConnectionStatus:"État de connexion",metricsPrinterState:"État imprimante (idle/printing/etc)",metricsPrintProgress:"Progression impression 0-100%",metricsBedTemp:"Température du plateau",metricsNozzleTemp:"Température de la buse",metricsPrintsTotal:"Total impressions par résultat",metricsMore:"...et plus (couches, ventilateurs, file d'attente, utilisation filament)",smartPlugsDescription:"Connecter des prises connectées (Tasmota ou Home Assistant) pour automatiser le contrôle de l'alimentation et suivre la consommation d'énergie de vos imprimantes.",allOn:"Tout allumer",allOff:"Tout éteindre",addSmartPlug:"Ajouter une prise",energySummary:"Résumé énergétique",currentPower:"Puissance actuelle",plugsOnline:"{{reachable}}/{{total}} prises en ligne",today:"Aujourd'hui",yesterday:"Hier",total:"Total",enablePlugsForSummary:"Activer les prises pour voir le résumé énergétique",addNotificationProvider:"Ajouter",systemBadge:"(Système)",creating:"Création...",changing:"Modification...",deleteUserAndItems:"Supprimer l'utilisateur ET ses éléments",deleteUserKeepItems:"Supprimer l'utilisateur, garder les éléments (deviennent sans propriétaire)",ok:"OK",twoFa:{totpTitle:"Application Authenticator (TOTP)",totpDesc:"Utilisez une application comme Google Authenticator, Aegis ou Authy.",emailOtpTitle:"OTP par e-mail",emailOtpDesc:"Envoyez un code à usage unique à {{email}} lors de la connexion.",emailOtpNoEmail:"Ajoutez une adresse e-mail à votre compte pour activer cette méthode.",addEmailFirst:"Votre compte n'a pas d'adresse e-mail. Demandez à un administrateur d'en ajouter une.",setupTotp:"Configurer l'application Authenticator",setupAuthApp:"Configurer l'application Authenticator",setupInstructions:"Scannez le QR code avec votre application authenticator, puis confirmez avec un code.",manualEntry:"Impossible de scanner ? Entrez ce secret manuellement :",scannedContinue:"Code scanné — continuer",enterCodeToConfirm:"Entrez le code à 6 chiffres de votre application authenticator pour confirmer.",activate:"Activer",disableTotp:"Désactiver l'Authenticator",disableConfirmHint:"Entrez un code TOTP valide ou un code de secours pour désactiver l'authenticator.",totpDisabled:"Application Authenticator désactivée.",emailOtpEnabled:"OTP par e-mail activé.",emailOtpDisabled:"OTP par e-mail désactivé.",smtpRequired:"Veuillez d'abord configurer et tester les paramètres SMTP.",invalidCode:"Code invalide. Veuillez réessayer.",enableEmailOtp:"Activer OTP par e-mail",disableEmailOtp:"Désactiver OTP par e-mail",emailSetupEnterCode:"Un code de vérification a été envoyé à votre adresse e-mail. Entrez-le ci-dessous pour confirmer que vous possédez cette boîte de réception.",verifyAndEnable:"Vérifier et activer",emailDisablePasswordHint:"Entrez le mot de passe de votre compte pour confirmer la désactivation de l'OTP par e-mail.",passwordPlaceholder:"Entrez votre mot de passe",backupCodesTitle:"Sauvegardez vos codes de secours",backupCodesWarning:"Conservez ces codes en lieu sûr. Chaque code ne peut être utilisé qu'une seule fois et ne sera plus affiché.",backupCodesRemaining:"{{count}} codes de secours restants",savedCodes:"Codes sauvegardés",regenBackup:"Régénérer les codes de secours",regenBackupHint:"Entrez votre code TOTP actuel pour générer 10 nouveaux codes de secours. Tous les codes existants seront invalidés.",newBackupCodes:"Nouveaux codes de secours",linkedAccounts:"Comptes SSO liés",linkedAccountsDesc:"Ces fournisseurs d'identité externes sont liés à votre compte.",oidcUnlinked:"Compte dissocié."},oidc:{title:"Fournisseurs SSO / OIDC",desc:"Configurez des fournisseurs OpenID Connect pour l'authentification unique.",addProvider:"Ajouter un fournisseur",newProvider:"Nouveau fournisseur",empty:"Aucun fournisseur OIDC configuré.",created:"Fournisseur créé.",updated:"Fournisseur mis à jour.",deleted:"Fournisseur supprimé.",refreshIcon:"Actualiser l'icône",removeIcon:"Supprimer l'icône",iconRefreshed:"Icône actualisée.",iconRemoved:"Icône supprimée.",iconFetchFailed:"Impossible de récupérer l'icône depuis l'URL du fournisseur.",deleteTitle:"Supprimer le fournisseur",deleteMessage:'Supprimer "{{name}}" ? Tous les comptes liés seront déconnectés.',form:{name:"Nom d'affichage",issuerUrl:"URL de l'émetteur",clientId:"ID client",clientSecret:"Secret client",scopes:"Portées",iconUrl:"URL de l'icône (optionnel)",enabled:"Activé",autoCreate:"Créer les utilisateurs automatiquement",autoCreateDesc:"Crée automatiquement un compte local lors de la première connexion.",autoLink:"Lier automatiquement les comptes existants",autoLinkDesc:"Lie les comptes locaux existants par e-mail lors de la première connexion.",secretHint:"laisser vide pour conserver",secretPlaceholder:"nouveau secret",emailClaim:"Claim e-mail",emailClaimDesc:"Claim JWT utilisé comme identité e-mail. Utiliser 'preferred_username' ou 'upn' pour Azure Entra ID (qui n'envoie pas email_verified). Utiliser uniquement des noms de claims de confiance.",emailClaimPlaceholder:"e-mail",emailClaimCustomClaimAutoLinkWarning:"Les revendications personnalisées sont sûres pour la liaison auto uniquement lorsque la valeur est administrée par le tenant (par ex. Azure Entra ID upn / preferred_username). N'activez pas la liaison auto si votre IdP permet aux utilisateurs de s'auto-attribuer cette revendication.",requireEmailVerified:"Exiger la vérification e-mail",requireEmailVerifiedDesc:"N'accepter le claim e-mail que si le fournisseur le marque comme vérifié.",requireEmailVerifiedWarning:"Avertissement : l'e-mail sera accepté sans vérification. À utiliser uniquement avec des fournisseurs de confiance.",requireEmailVerifiedAutoLink:"Désactiver le lien automatique d'abord pour modifier ce paramètre.",defaultGroup:"Groupe par défaut",defaultGroupDesc:"Groupe attribué aux utilisateurs créés automatiquement. Repli sur Viewers si non défini.",defaultGroupViewersFallback:"Viewers (par défaut)"}},encryption:{title:"Statut du chiffrement MFA",enabledFromEnv:"Chiffrement au repos activé (clé depuis la variable d'environnement MFA_ENCRYPTION_KEY)",enabledFromFile:"Chiffrement au repos activé (clé chargée depuis le répertoire de données)",enabledGenerated:"Chiffrement au repos activé avec une clé auto-générée",notConfigured:"Chiffrement au repos non configuré",notConfiguredDesc:"Les secrets TOTP et client_secrets OIDC sont stockés en clair. Définissez MFA_ENCRYPTION_KEY ou redémarrez Bambuddy avec un répertoire de données accessible en écriture pour en générer un automatiquement.",allEncrypted:"Tous les secrets MFA sont chiffrés au repos.",legacyRowsLabel:"Lignes héritées en clair",encryptedRowsLabel:"Lignes chiffrées",legacyRowsWarning:"{{count}} ligne(s) héritée(s) en clair détectée(s). Réenregistrez le fournisseur OIDC ou réinscrivez l'application d'authentification de l'utilisateur pour migrer vers le stockage chiffré.",backupHint:"La clé auto-générée est stockée dans DATA_DIR/.mfa_encryption_key et incluse dans les ZIP de sauvegarde locale. Conservez vos sauvegardes en sécurité ou définissez MFA_ENCRYPTION_KEY explicitement.",decryptionBrokenTitle:"Clé de chiffrement manquante",decryptionBrokenError:"{{count}} enregistrement(s) chiffré(s) ne peuvent pas être déchiffrés car la clé de chiffrement n'est plus disponible. Restaurez le MFA_ENCRYPTION_KEY précédent ou DATA_DIR/.mfa_encryption_key pour récupérer.",migrationErrorWarning:"{{count}} ligne(s) ancienne(s) n'ont pas pu être rechiffrée(s) au démarrage. Vérifiez les journaux du serveur et redémarrez Bambuddy pour réessayer."},spoolbuddy:{infoTitle:"Périphériques SpoolBuddy",infoBody:"Les bornes SpoolBuddy s'enregistrent automatiquement via heartbeat. Désinscrivez ici un appareil qui n'est plus utilisé ou un doublon obsolète laissé par un crash du daemon.",duplicatesTitle:"{{count}} appareils enregistrés",duplicatesBody:"Seul le premier appareil enregistré est utilisé par l'interface du kiosk. Si l'un de ces appareils est un doublon obsolète issu d'un crash, désinscrivez-le — un appareil en ligne se ré-enregistrera automatiquement au prochain heartbeat.",empty:"Aucun appareil SpoolBuddy enregistré pour le moment.",online:"En ligne",offline:"Hors ligne",unregister:"Désinscrire",unregisterSuccess:"Appareil désinscrit",unregisterError:"Échec de la désinscription",confirmTitle:"Désinscrire l'appareil SpoolBuddy ?",confirmBody:`Cela retirera "{{hostname}}" ({{deviceId}}) de la base de données. Si l'appareil est en ligne, il se ré-enregistrera automatiquement au prochain heartbeat.`,ipAddress:"Adresse IP",firmware:"Micrologiciel",lastSeen:"Dernière activité",daemonUptime:"Uptime du daemon",systemUptime:"Uptime système",never:"jamais",nfc:"NFC",scale:"Balance",cpuTemp:"Temp. CPU",cpuLoad:"Charge CPU",memory:"Mémoire",disk:"Disque",update:"Mettre à jour",updateConfirmTitle:"Mettre à jour le daemon Spoolbuddy ?",updateConfirmBody:'Déclencher une mise à jour logicielle sur "{{hostname}}" ? Le daemon redémarrera une fois la mise à jour appliquée.',restartBrowser:"Redémarrer le navigateur",restartBrowserConfirmTitle:"Redémarrer le navigateur du kiosk ?",restartBrowserConfirmBody:`Redémarrer le navigateur du kiosk sur "{{hostname}}" ? L'écran sera momentanément vide.`,restartDaemon:"Redémarrer le daemon",restartDaemonConfirmTitle:"Redémarrer le daemon Spoolbuddy ?",restartDaemonConfirmBody:`Redémarrer le daemon Spoolbuddy sur "{{hostname}}" ? L'appareil sera hors ligne quelques secondes.`,reboot:"Redémarrer",rebootConfirmTitle:"Redémarrer l'appareil ?",rebootConfirmBody:`Redémarrer "{{hostname}}" ? L'appareil sera hors ligne pendant environ une minute.`,shutdown:"Éteindre",shutdownConfirmTitle:"Éteindre l'appareil ?",shutdownConfirmBody:`Éteindre "{{hostname}}" ? Vous aurez besoin d'un accès physique pour le rallumer.`,commandConfirm:"Confirmer",commandQueued:"Commande en file d'attente",commandError:"Échec de l'envoi de la commande"}},notification:{printStarted:{title:"Impression démarrée",body:"{{printer}} : {{filename}} commence l'impression"},printCompleted:{title:"Impression terminée",body:"{{printer}} : {{filename}} a réussi"},printFailed:{title:"Impression échouée",body:"{{printer}} : {{filename}} a échoué"},printStopped:{title:"Impression arrêtée",body:"{{printer}} : {{filename}} a été arrêtée"},printProgress:{title:"Progression d'impression",body:"{{printer}} : {{filename}} est à {{percent}}%"},printerOffline:{title:"Imprimante hors ligne",body:"{{printer}} est déconnectée"},printerError:{title:"Erreur imprimante",body:"{{printer}} : {{error}}"},filamentLow:{title:"Filament bas",body:"{{printer}} : Le filament est presque vide"},maintenanceDue:{title:"Maintenance due",body:"{{printer}} : {{items}} demandent votre attention"}},errors:{generic:"Une erreur est survenue",networkError:"Erreur réseau. Vérifiez votre connexion.",notFound:"Non trouvé",unauthorized:"Non autorisé",serverError:"Erreur serveur",validationError:"Vérifiez vos saisies",printerConnectionFailed:"Échec connexion imprimante",saveFailed:"Échec enregistrement",deleteFailed:"Échec suppression",loadFailed:"Échec chargement"},hmsErrors:{title:"Erreurs - {{name}}",noErrors:"Aucune erreur",viewOnWiki:"Voir sur le Wiki Bambu Lab",clearInstructions:"Effacez les erreurs sur l'imprimante pour les retirer ici.",clearErrors:"Effacer les erreurs",clearSuccess:"Erreurs HMS effacées",clearFailed:"Échec de l'effacement des erreurs HMS"},mqttDebug:{title:"Journal de débogage MQTT",searchPlaceholder:"Chercher topic ou message...",noMessages:"Aucun message enregistré",startLoggingHint:'Cliquez sur "Démarrer" pour capturer les messages MQTT',noMessagesMatch:"Aucun message ne correspond",adjustFilterHint:"Ajustez votre recherche",incoming:"Entrant",outgoing:"Sortant",loggingStopped:"Enregistrement arrêté",loggingActive:"Enregistrement actif - rafraîchissement auto",startLogging:"Démarrer",stopLogging:"Arrêter",clearLog:"Effacer le journal",topic:"Sujet",timestamp:"Horodatage",direction:"Direction",all:"Tous"},printerFiles:{title:"Gestionnaire de fichiers",storageUsed:"Utilisé :",storageFree:"Libre :",filterPlaceholder:"Filtrer les fichiers...",deleteButton:"Supprimer",deleteFiles:"Supprimer {{count}} fichiers",deleteFileConfirm:'Supprimer "{{name}}" ?',deleteFilesConfirm:"Supprimer les {{count}} fichiers sélectionnés ?",noFiles:"Aucun fichier sur l'imprimante",loadingFiles:"Chargement...",failedToLoad:"Échec chargement fichiers",toast:{filesDeleted:"{{count}} fichier(s) supprimé(s)",deleteFailed:"Échec suppression : {{error}}"}},confirm:{delete:"Voulez-vous vraiment supprimer cet élément ?",unsavedChanges:"Changements non sauvegardés. Voulez-vous quitter ?",clearQueue:"Voulez-vous vraiment vider la file d'attente ?"},login:{title:"Connexion Bambuddy",subtitle:"Connectez-vous à votre compte",username:"Utilisateur",usernamePlaceholder:"Entrez votre utilisateur",usernameOrEmail:"Utilisateur ou Email",usernameOrEmailPlaceholder:"Utilisateur ou @ Email",password:"Mot de passe",passwordPlaceholder:"Entrez votre mot de passe",signIn:"Se connecter",signingIn:"Connexion...",rememberMe:"Se souvenir de moi",forgotPassword:"Mot de passe oublié ?",loginSuccess:"Connecté avec succès",loginFailed:"Échec de connexion",enterCredentials:"Entrez vos identifiants",enterEmail:"Veuillez entrer votre adresse e-mail",oidcLoginFailed:"Échec de la connexion OIDC",oidcErrors:{providerError:"Le fournisseur d'identité a renvoyé une erreur",missingParameters:"Il manque des paramètres requis dans le callback OIDC",invalidState:"L'état OIDC est invalide ou a déjà été utilisé",stateExpired:"La session OIDC a expiré — veuillez réessayer",providerNotFound:"Fournisseur OIDC introuvable",discoveryFailed:"Impossible de récupérer le document de découverte OIDC",invalidDiscovery:"Le document de découverte OIDC est invalide",networkError:"Erreur réseau lors de l'échange de jeton OIDC",badResponse:"Réponse inattendue lors de l'échange de jeton OIDC",noIdToken:"Le fournisseur OIDC n'a pas renvoyé de jeton d'identité",validationFailed:"La validation du jeton OIDC a échoué",nonceMismatch:"Le nonce OIDC ne correspond pas — possible attaque par rejeu",missingSubClaim:"Le jeton OIDC est dépourvu de la revendication sub",noLinkedAccount:"Aucun compte local est lié à cette identité OIDC",accountInactive:"Votre compte est inactif",userResolutionFailed:"Impossible de résoudre votre compte",internalError:"Une erreur interne est survenue lors de la connexion OIDC",tokenExchangeFailed:"L'échange de jeton OIDC a échoué"},forgotPasswordTitle:"Mot de passe oublié",forgotPasswordMessage:"Contactez votre administrateur pour réinitialiser votre accès.",forgotPasswordEmailMessage:"Entrez votre email pour recevoir un nouveau mot de passe.",emailAddress:"Adresse Email",emailPlaceholder:"votre.email@exemple.com",cancel:"Annuler",sending:"Envoi...",sendResetEmail:"Envoyer l'email",howToReset:"Comment réinitialiser :",resetStep1:"Contactez votre admin Bambuddy",resetStep2:"Demandez une réinitialisation dans la Gestion Utilisateurs",resetStep3:"Il vous donnera un mot de passe temporaire",resetStep4:"Connectez-vous et changez-le dans les Paramètres",gotIt:"Compris",twoFA:{title:"Authentification à deux facteurs",subtitle:"Votre compte est protégé par la 2FA. Saisissez le code de vérification ci-dessous.",methodAuthenticator:"Application d'authentification",methodEmail:"Code par e-mail",methodBackup:"Code de récupération",instructionsTotp:"Ouvrez votre application d'authentification et saisissez le code à 6 chiffres pour Bambuddy.",instructionsEmail:"Un code à 6 chiffres a été envoyé à votre adresse e-mail. Il est valable 10 minutes.",instructionsEmailNotSent:"Cliquez ci-dessous pour recevoir un code de vérification par e-mail.",instructionsBackup:"Saisissez l'un de vos codes de récupération à 8 caractères. Chaque code ne peut être utilisé qu'une seule fois.",sendCodeButton:"Envoyer le code par e-mail",sendingCode:"Envoi en cours...",resendCode:"Renvoyer le code",codeLabel:"Code de vérification",backupCodeLabel:"Code de récupération",codePlaceholder:"000000",backupCodePlaceholder:"XXXXXXXX",verifyButton:"Vérifier",verifyingButton:"Vérification en cours...",backToLogin:"← Retour à la connexion",orContinueWith:"ou continuer avec",signInWith:"Se connecter avec {{provider}}",enterCode:"Veuillez entrer le code de vérification",sendCodeFailed:"Échec de l'envoi du code de vérification",invalidCode:"Code invalide. Veuillez réessayer."},resetPassword:{title:"Définir un nouveau mot de passe",subtitle:"Saisissez et confirmez votre nouveau mot de passe ci-dessous.",newPassword:"Nouveau mot de passe",newPasswordPlaceholder:"Au moins 8 caractères",confirmPassword:"Confirmer le mot de passe",confirmPasswordPlaceholder:"Répéter le nouveau mot de passe",saving:"Enregistrement…",submit:"Définir le mot de passe",backToLogin:"Retour à la connexion",passwordsDoNotMatch:"Les mots de passe ne correspondent pas",passwordTooShort:"Le mot de passe doit contenir au moins 8 caractères",resetFailed:"Échec de la réinitialisation. Le lien a peut-être expiré."}},setup:{title:"Configuration Bambuddy",subtitle:"Configurez l'authentification",enableAuth:"Activer l'authentification",adminAccount:"Compte Admin",adminAccountDesc:"Si des admins existent, ils seront utilisés. Sinon, créez-en un ci-dessous.",adminUsername:"Utilisateur Admin",adminPassword:"Mot de passe Admin",optionalIfAdminExists:"(optionnel si admin existe)",adminUsernamePlaceholder:"Nom admin (optionnel)",adminPasswordPlaceholder:"Mdp admin (optionnel)",confirmPassword:"Confirmer mdp",confirmPasswordPlaceholder:"Confirmez mdp admin",settingUp:"Configuration...",completeSetup:"Terminer la configuration",toast:{authEnabledAdminCreated:"Authentification activée et admin créé",authEnabledExistingAdmins:"Authentification activée avec admins existants",setupCompleted:"Configuration terminée",enterBothCredentials:"Entrez les deux ou laissez vide pour utiliser les admins existants",passwordsDoNotMatch:"Les mots de passe ne correspondent pas",passwordTooShort:"Minimum 6 caractères"}},changePassword:{title:"Changer le mot de passe",currentPassword:"Mot de passe actuel",currentPasswordPlaceholder:"Entrez mdp actuel",newPassword:"Nouveau mot de passe",newPasswordPlaceholder:"Nouveau mdp (min 6 char)",confirmPassword:"Confirmer nouveau mdp",confirmPasswordPlaceholder:"Confirmez nouveau mdp",passwordsDoNotMatch:"Les mots de passe ne correspondent pas",passwordTooShort:"Minimum 6 caractères",changing:"Changement...",success:"Mot de passe modifié",failed:"Échec modification"},plateAlert:{title:"Impression en Pause !",message:"Objets détectés sur le plateau. L'impression a été suspendue automatiquement. Videz le plateau avant de reprendre.",understand:"J'ai compris"},camera:{title:"Vue Caméra",invalidPrinterId:"ID imprimante invalide",live:"Direct",snapshot:"Instantané",restartStream:"Redémarrer le flux",refreshSnapshot:"Rafraîchir l'image",fullscreen:"Plein écran",exitFullscreen:"Quitter plein écran",connectingToCamera:"Connexion caméra...",capturingSnapshot:"Capture...",connectionLost:"Connexion perdue",connectionFailed:"Échec connexion caméra",reconnecting:"Reconnexion dans {{countdown}}s... (essai {{attempt}}/{{max}})",reconnectNow:"Reconnexion immédiate",cameraUnavailable:"Caméra indisponible",cameraUnavailableDesc:"Vérifiez que l'imprimante est allumée.",noCamera:"Aucune caméra disponible",retry:"Réessayer",cameraStream:"Flux caméra",zoomOut:"Zoom arrière",zoomIn:"Zoom avant",resetZoom:"Réinitialiser zoom",recording:"Enregistrement",startRecording:"Démarrer l'enregistrement",stopRecording:"Arrêter l'enregistrement",chamberLight:"Basculer lumière chambre",unavailable:"Caméra indisponible",diagnose:{button:"Diagnostic",modalTitle:"Diagnostic de la caméra",running:"Diagnostic en cours...",runFailed:"Impossible d'exécuter le diagnostic : {{error}}",retry:"Relancer",stage:{tcp_reachable:"Accessibilité réseau",first_frame:"Capture d'image",live_stream_active:"Flux en direct actif"},summary:{all_ok:"La caméra fonctionne. Toutes les étapes du diagnostic ont réussi.",live_stream_active_healthy:"La caméra diffuse actuellement avec des images récentes — aucun test nécessaire.",printer_unreachable:"L'imprimante n'est pas joignable. Vérifiez l'adresse IP, la connexion réseau et que l'imprimante est allumée.",camera_port_closed:"L'imprimante répond mais le port de la caméra est fermé. Assurez-vous que le mode LAN et le mode développeur sont activés dans les paramètres de l'imprimante.",no_frame:"Connexion à la caméra établie mais aucune image reçue. Réessayez ou vérifiez que la caméra est activée dans les paramètres de l'imprimante.",unknown_failure:"Le diagnostic de la caméra a échoué pour une raison inconnue. Consultez le journal de support pour plus de détails."},meta:{protocol:"Protocole",port:"Port",profile:"Profil"}}},groups:{title:"Gestion des Groupes",subtitle:"Gérez les permissions pour le contrôle d'accès",backToSettings:"Retour aux paramètres",createGroup:"Créer un groupe",noPermission:"Accès refusé.",system:"Système",noDescription:"Pas de description",usersCount:"{{count}} utilisateurs",permissionsCount:"{{count}} permissions",edit:"Modifier",delete:"Supprimer",toast:{created:"Groupe créé",updated:"Groupe mis à jour",deleted:"Groupe supprimé",enterGroupName:"Entrez un nom de groupe"},modal:{editGroup:"Modifier le groupe",createGroup:"Créer un groupe",cancel:"Annuler",saving:"Enregistrement...",creating:"Création...",saveChanges:"Enregistrer"},form:{groupName:"Nom du groupe",groupNamePlaceholder:"Nom du groupe",systemGroupWarning:"Les groupes système sont fixes",description:"Description",descriptionPlaceholder:"Description (optionnel)",permissions:"Permissions ({{count}} sélectionnées)"},deleteModal:{title:"Supprimer le groupe",message:"Les utilisateurs de ce groupe perdront ces permissions.",confirm:"Supprimer"},editor:{title:"Modifier le groupe",createTitle:"Créer un groupe",search:"Rechercher des permissions...",selectAll:"Tout sélectionner",clearAll:"Tout désélectionner",permissionsSelected:"{{count}} sélectionnée(s)",noResults:"Aucune permission ne correspond à votre recherche"}},users:{title:"Gestion des Utilisateurs",subtitle:"Gérez les accès à Bambuddy",backToSettings:"Retour aux paramètres",createUser:"Créer un utilisateur",noPermission:"Accès refusé.",admin:"Administrateur",noGroups:"Aucun groupe",active:"Actif",inactive:"Inactif",edit:"Modifier",delete:"Supprimer",system:"Système",noGroupsAvailable:"Aucun groupe disponible",table:{username:"Utilisateur",groups:"Groupes",status:"Statut",actions:"Actions"},toast:{created:"Utilisateur créé",updated:"Utilisateur mis à jour",deleted:"Utilisateur supprimé",fillRequired:"Remplissez les champs requis",passwordsDoNotMatch:"Les mots de passe ne correspondent pas",passwordTooShort:"Minimum 6 caractères",ldapProvisioned:'Utilisateur LDAP "{{username}}" provisionné'},modal:{createUser:"Créer utilisateur",editUser:"Modifier utilisateur",cancel:"Annuler",creating:"Création...",saving:"Enregistrement...",saveChanges:"Enregistrer",advancedAuthSubtitle:"avec Authentification Avancée",tabsAriaLabel:"Source utilisateur",localTab:"Local",ldapTab:"LDAP",ldapSearchLabel:"Rechercher dans l'annuaire",ldapSearchPlaceholder:"Tapez un nom d'utilisateur, un nom ou un e-mail...",ldapMinChars:"Tapez au moins 2 caractères pour rechercher",ldapTypeToSearch:"Commencez à taper pour rechercher dans l'annuaire LDAP",ldapSearching:"Recherche dans l'annuaire...",ldapNoResults:"Aucun utilisateur correspondant dans l'annuaire",ldapSearchError:"Échec de la recherche dans l'annuaire. Vérifiez l'état du serveur LDAP.",ldapAlreadyProvisioned:"Déjà provisionné",ldapSelectedLabel:"Sélectionné",ldapProvision:"Provisionner l'utilisateur",ldapProvisioning:"Provisionnement...",ldapErrorProvision:"Échec du provisionnement. Vérifiez l'état du serveur LDAP et réessayez."},form:{username:"Utilisateur",usernamePlaceholder:"Nom utilisateur",email:"E-mail",emailPlaceholder:"utilisateur@exemple.com",password:"Mot de passe",passwordPlaceholder:"Mot de passe",confirmPassword:"Confirmer mdp",confirmPasswordPlaceholder:"Confirmez mdp",newPasswordPlaceholder:"Nouveau mdp",confirmNewPasswordPlaceholder:"Confirmez nouveau mdp",leaveBlankToKeep:"Laissez vide pour conserver l'actuel",groups:"Groupes",optional:"optionnel",autoGeneratedPassword:"Un mot de passe sera généré et envoyé par email.",passwordManagedByAdvancedAuth:'Géré par Auth Avancée. Utilisez "Réinitialiser" pour envoyer un nouveau mdp par email.',resetPassword:"Réinitialiser le mot de passe",resettingPassword:"Réinitialisation..."},deleteModal:{title:"Supprimer utilisateur",message:"Cette action est irréversible.",confirm:"Supprimer"}},streamOverlay:{title:"Superposition Flux",invalidPrinterId:"ID invalide",cameraStream:"Flux caméra",progress:"Progression",eta:"Fin estimée",printerIdle:"Imprimante inactive",printerOffline:"Imprimante hors ligne",status:{printing:"Impression",paused:"En pause",finished:"Terminée",failed:"Échouée",idle:"Inactive",unknown:"Inconnue"}},profiles:{title:"Profils",subtitle:"Gérez vos presets slicer et calibrations Pressure Advance",tabs:{bambuCloud:"Bambu Cloud",orcaCloud:"Orca Cloud",local:"Profils Locaux",kprofiles:"Profils K"},orcaCloud:{connectedAs:"Connecté en tant que",logout:"Déconnecter",noLogoutPermission:"Vous n'avez pas la permission de vous déconnecter",noConnectPermission:"Vous n'avez pas la permission de vous connecter à Orca Cloud",retry:"Réessayer",back:"Utiliser une autre méthode de connexion",connect:{title:"Se connecter à Orca Cloud",description:"Connectez-vous à votre compte Orca Cloud pour synchroniser vos profils de slicer dans Bambuddy."},providers:{google:"Se connecter avec Google",apple:"Se connecter avec Apple",github:"Se connecter avec GitHub",email:"Se connecter avec e-mail et mot de passe"},password:{title:"Se connecter avec e-mail et mot de passe",email:"E-mail",emailPlaceholder:"vous@exemple.fr",password:"Mot de passe",submit:"Se connecter"},paste:{title:"Terminer la connexion",step1:"Un nouvel onglet s'est ouvert avec la page de connexion Orca Cloud. Connectez-vous avec votre compte Orca.",step2:`Votre navigateur sera redirigé vers une URL "localhost" qui ne se chargera pas. C'est normal — c'est cette URL qu'il nous faut.`,step3:"Copiez l'URL complète depuis la barre d'adresse de votre navigateur et collez-la ci-dessous.",signInUrl:"Si l'onglet de connexion ne s'est pas ouvert, cliquez sur cette URL :",label:"Collez l'URL de rappel ici",placeholder:"http://localhost:41172/callback?code=...&state=...",submit:"Terminer la connexion"},profiles:{title:"Vos profils Orca Cloud ({{count}})",refresh:"Actualiser",empty:"Aucun profil trouvé dans votre compte Orca Cloud pour le moment."},toast:{connected:"Connecté à Orca Cloud en tant que {{email}}",disconnected:"Déconnecté d'Orca Cloud"},errors:{startFailed:"Impossible de démarrer la connexion à Orca Cloud.",finishFailed:"Impossible de terminer la connexion à Orca Cloud.",passwordFailed:"Impossible de se connecter avec cet e-mail et ce mot de passe.",passwordEmpty:"Veuillez saisir à la fois votre e-mail et votre mot de passe.",emptyPaste:"Veuillez coller l'URL de rappel depuis votre navigateur.",noCode:"Cette URL ne ressemble pas à un rappel Orca Cloud (aucun paramètre code). Copiez l'URL complète depuis la barre d'adresse."}},localProfiles:{title:"Profils Locaux",subtitle:"Gérez vos presets OrcaSlicer",import:"Importer Profils",importDesc:"Déposez les fichiers .bbscfg, .bbsflmt, .orca_filament, .zip ou .json",importing:"Importation...",search:"Chercher un preset...",noPresets:"Aucun preset local",noSearchResults:"Aucun preset ne correspond à votre recherche",badge:"Local",edit:"Modifier",delete:"Supprimer",cancel:"Annuler",deleteConfirmTitle:"Supprimer Preset",deleteConfirm:"Supprimer définitivement ce preset ?",source:"Source",inheritsFrom:"Hérite de",filamentType:"Type",vendor:"Vendeur",compatiblePrinters:"Imprimantes",nozzleTemp:"Temp Buse",cost:"Coût",density:"Densité",pressureAdvance:"Pressure Advance",filament:"Filament",process:"Processus",printer:"Imprimante",toast:{importSuccess:"{{count}} profil(s) importé(s)",importSkipped:"{{count}} profil(s) ignoré(s) (doublons)",importError:"{{count}} erreur(s) d'import",deleted:"Preset supprimé",updated:"Preset mis à jour"}},connectedAs:"Connecté en tant que",logout:"Déconnexion",noLogoutPermission:"Pas d'autorisation de déconnexion",failedToLoad:"Échec chargement profils",retry:"Réessayer",time:{justNow:"À l'instant",minsAgo:"Il y a {{count}}m",hoursAgo:"Il y a {{count}}h",daysAgo:"Il y a {{count}}j"},toast:{loggedOut:"Déconnecté"},login:{title:"Connexion Bambu Cloud",subtitle:"Synchronisez vos presets slicer",email:"E-mail",password:"Mot de passe",region:"Région",regionGlobal:"Global",regionChina:"Chine",verificationCode:"Code de vérification",totpCode:"Code Authenticator",checkEmail:"Code envoyé à {{email}}",enterTotpHint:"Entrez le code 2FA",accessToken:"Jeton d'accès (Access Token)",accessTokenHint:"Collez votre jeton Bambu Cloud. Les comptes de la région Chine doivent passer par ici (liés à un numéro de téléphone — pas de connexion par e-mail). Le wiki explique comment récupérer le jeton depuis les cookies MakerWorld.",back:"Retour",loginButton:"Connexion",verifyButton:"Vérifier",setTokenButton:"Définir Jeton",useToken:"Utiliser jeton d'accès",useEmail:"Connexion par email",toast:{loggedIn:"Connecté avec succès",codeSent:"Code envoyé par email",enterTotp:"Entrez le code Authenticator",tokenSet:"Jeton défini"}},presets:{myPreset:"Mon preset (modifiable)",duplicate:"Dupliquer",editable:"Modifiable",failedToLoadDetails:"Échec détails preset",deleteConfirm:"Supprimer ce preset ?",deleteWarning:'Ceci supprimera "{{name}}" de Bambu Cloud définitivement.',noDuplicatePermission:"Pas d'autorisation duplication",noEditPermission:"Pas d'autorisation modification",noDeletePermission:"Pas d'autorisation suppression",types:{filament:"Preset filament",printer:"Preset imprimante",process:"Preset processus"},toast:{deleted:"Preset supprimé",created:"Preset créé",updated:"Preset mis à jour",duplicated:"Preset dupliqué",fieldAdded:'Champ "{{key}}" ajouté',exported:"Preset exporté"},baseLabel:"Base : {{name}}",currentLabel:"Actuel : {{name}}",newPreset:"Nouveau Preset",editPreset:"Modifier Preset",duplicatePreset:"Dupliquer Preset",createNewPreset:"Créer un nouveau Preset",customizeSettings:"Personnalisez vos réglages",compareWithBase:"Comparer avec la base",compare:"Comparer",basePreset:"Preset de base",selectBasePreset:"Choisir preset de base...",presetName:"Nom du preset",myCustomPreset:"Mon preset personnalisé",inheritsFrom:"Hérite de",dropJsonToImport:"Glissez JSON pour importer",tabs:{common:"Commun",allFields:"Tous les champs"},availableFields:"Champs disponibles",searchFieldsPlaceholder:"Chercher un champ...",noMatchingFields:"Aucun champ trouvé",allFieldsAdded:"Tous les champs sont ajoutés",addCustomField:"Ajouter un champ personnalisé",yourOverrides:"Vos modifications",noOverridesYet:"Aucune modification",clickFieldsToAdd:"Cliquez à gauche pour ajouter",saveAsTemplate:"Enregistrer comme modèle",jsonTip:"Conseil : Glissez un .json pour importer les réglages"},cloudView:{searchPlaceholder:"Chercher presets...",templates:"Modèles",refresh:"Rafraîchir",newPreset:"Nouveau Preset",clearFilters:"Effacer filtres",compareMode:"Mode Comparaison",selectAnotherPreset:"Choisir un autre preset {{type}}",clickTwoPresets:"Choisissez deux presets de même type",selectFirst:"1. Sélectionner premier",selectSecond:"2. Sélectionner second",compareNow:"Comparer maintenant",lastSynced:"Synchronisé :",showingCount:"{{showing}} sur {{total}} presets",noPresetsFound:"Aucun preset trouvé",columns:{filament:"Filament",process:"Processus",printer:"Imprimante"},noFilamentPresets:"Pas de preset filament",noProcessPresets:"Pas de preset processus",noPrinterPresets:"Pas de preset imprimante",filters:{type:"Type",owner:"Propriétaire",printer:"Imprimante",nozzle:"Buse",filament:"Filament",layer:"Couche",all:"Tous",myPresets:"Mes Presets",builtIn:"Inclus",process:"Processus"},noTemplatesPermission:"Pas d'autorisation modèles",noRefreshPermission:"Pas d'autorisation rafraîchissement",noCreatePermission:"Pas d'autorisation création"},templates:{title:"Modèles rapides",noTemplates:"Aucun modèle",createFirst:"Créez-en depuis l'éditeur de preset",typeFilter:"Type :",deleteTitle:"Supprimer modèle",deleteWarning:"Action irréversible",deleteConfirm:'Supprimer "{{name}}" ?',namePlaceholder:"Nom du modèle",descriptionPlaceholder:"Description",settingsJson:"Paramètres (JSON)",fieldsCount:"{{count}} champs",shownInModals:"Visible dans fenêtres",hiddenInModals:"Masqué dans fenêtres",apply:"Appliquer",toast:{deleted:"Modèle supprimé",updated:"Modèle mis à jour",created:"Modèle créé",applied:"Modèle appliqué"}}},support:{debugLoggingActive:"Débogage actif",manageLogs:"Gérer",collectItem7:"Connectivité et versions firmware",collectItem8:"Statut intégrations (Spoolman, MQTT, HA)",collectItem9:"Interfaces réseau (sous-réseaux)",collectItem10:"Versions packages Python",collectItem11:"Santé base de données",collectItem12:"Détails environnement Docker",bundleGenerating:"Génération du paquet...",bundleStepConnection:"Vérification de la connectivité des imprimantes",bundleStepVirtualPrinters:"Vérification de la configuration des imprimantes virtuelles",bundleStepLogScan:"Analyse des journaux récents pour les problèmes connus",bundleStepBuild:"Création du ZIP du paquet de support"},fileManager:{title:"Gestionnaire de fichiers",subtitle:"Organisez vos fichiers d'impression",uploadFiles:"Téléverser fichiers",newFolder:"Nouveau dossier",folderName:"Nom du dossier",folderNamePlaceholder:"ex: Pièces Utiles",renameFile:"Renommer fichier",renameFolder:"Renommer dossier",invalidFilenameChar:`Le caractère "{{char}}" n'est pas autorisé dans les noms de fichier d'impression. La carte SD de l'imprimante refuse : < > : " / \\ | ? *`,moveFiles:"Déplacer {{count}} fichier(s)",rootNoFolder:"Racine (aucun dossier)",current:"actuel",linkFolder:"Lier le dossier",linkFolderDescription:'Lier "{{name}}" à un projet ou archive.',project:"Projet",archive:"Archive",noProjectsFound:"Aucun projet trouvé",noArchivesFound:"Aucune archive trouvée",unlink:"Délier",link:"Lier",dragDropFiles:"Glissez les fichiers ici",dropFilesHere:"Déposez ici",orClickToBrowse:"ou cliquez pour parcourir",allFileTypesSupported:"Tous types supportés. ZIP extraits.",zipFilesDetected:"ZIP détectés",zipExtractOptions:"Choix de structure pour ZIP :",preserveZipStructure:"Garder structure ZIP",createFolderFromZip:"Dossier par nom du ZIP",stlThumbnailGeneration:"Vignettes STL",zipMayContainStl:"Extraction vignettes possible pour STL.",thumbnailsCanBeGenerated:"Génération vignettes (peut être long).",generateThumbnailsForStl:"Générer vignettes STL",threemfDetected:"Fichiers 3MF détectés",threemfExtractionInfo:"Réglages extraits auto du 3MF.",willBeExtracted:"Sera extrait",filesExtracted:"{{count}} fichiers extraits",uploadComplete:"Terminé : {{succeeded}} succès",uploadFailed:"Échec du téléversement",zipFilesFailed:"{{count}} fichiers échoués",uploading:"Téléversement...",changeLink:"Modifier lien...",linkTo:"Lier à...",linkToProjectOrArchive:"Lier à projet ou archive",addToQueue:"Ajouter à la file",schedulePrint:"Planifier",generateThumbnail:"Générer vignette",generateThumbnails:"Générer vignettes",generateThumbnailsForMissing:"Vignettes STL manquantes",gridView:"Grille",listView:"Liste",lowDiskSpaceWarning:"Espace disque faible",lowDiskSpaceDetails:"{{free}} libre sur {{total}}. Seuil : {{threshold}} Go.",files:"Fichiers",folders:"Dossiers",size:"Taille",free:"Libre",allFiles:"Tous les fichiers",allExternal:"Externes",externalIsEmpty:"Aucun fichier externe",externalEmptyDescription:"Les fichiers de vos dossiers externes liés apparaîtront ici.",wrap:"Retour ligne",enableTextWrapping:"Activer retour ligne",disableTextWrapping:"Désactiver retour ligne",collapse:"Réduire",collapseFoldersByDefault:"Réduire les dossiers par défaut",expandFoldersByDefault:"Développer les dossiers par défaut",dragToResizeTooltip:"Glisser pour redimensionner, double-clic reset",searchFiles:"Chercher fichiers...",allTypes:"Tous types",prints:"Impressions",ascending:"Croissant",descending:"Décroissant",resultsCount:"{{showing}} sur {{total}} fichiers",selectAll:"Tout sélectionner",deselectAll:"Tout désélectionner",selected:"{{count}} sélectionnés",adding:"Ajout...",loadingFiles:"Chargement...",folderIsEmpty:"Dossier vide",noFilesYet:"Aucun fichier",folderEmptyDescription:"Téléversez ou déplacez des fichiers ici.",noFilesDescription:"Téléversez des fichiers pour organiser.",noMatchingFiles:"Aucun fichier correspondant",noMatchingFilesDescription:"Ajustez votre recherche.",clearFilters:"Effacer filtres",printedCount:"Imprimé {{count}}x",uploadedBy:"Téléversé par",deleteFolder:"Supprimer dossier",deleteFile:"Supprimer fichier",deleteFilesCount:"Supprimer {{count}} fichiers",deleteFolderConfirm:"Supprimer le dossier et son contenu ?",deleteFileConfirm:"Supprimer ce fichier ?",deleteFilesConfirm:"Supprimer {{count}} fichiers définitivement ?",deleting:"Suppression...",noPermissionRenameFolder:"Pas d'autorisation renommage",noPermissionLinkFolder:"Pas d'autorisation lien",noPermissionDeleteFolder:"Pas d'autorisation suppression dossier",noPermissionPrint:"Pas d'autorisation impression",noPermissionSlice:"Vous n'avez pas la permission de découper des fichiers",noPermissionAddToQueue:"Pas d'autorisation file",noPermissionDownload:"Pas d'autorisation téléchargement",noPermissionRenameFile:"Pas d'autorisation renommage fichier",noPermissionGenerateThumbnail:"Pas d'autorisation vignettes",noPermissionDeleteFile:"Pas d'autorisation suppression fichier",noPermissionCreateFolder:"Pas d'autorisation nouveau dossier",noPermissionUpload:"Pas d'autorisation téléversement",noPermissionMoveFiles:"Pas d'autorisation déplacement",noPermissionDeleteFiles:"Pas d'autorisation suppression groupée",linkExternal:"Lier externe",linkExternalFolder:"Lier un dossier externe",linkExternalFolderDescription:"Monter un répertoire hôte (NAS, USB, partage réseau) dans le gestionnaire de fichiers. Les fichiers ne sont pas copiés — ils sont lus directement depuis le chemin d'origine.",externalFolderNamePlaceholder:"ex. Impressions NAS",externalPath:"Chemin hôte",externalPathHelp:"Chemin absolu du répertoire sur l'hôte Docker. Doit être monté en bind dans le conteneur.",readOnly:"Lecture seule",readOnlyHelp:"empêche les téléversements et suppressions",showHiddenFiles:"Afficher les fichiers cachés (fichiers point)",externalFolder:"Dossier externe",scanFolder:"Scanner",toast:{folderCreated:"Dossier créé",folderDeleted:"Dossier supprimé",fileDeleted:"Fichier supprimé",filesDeleted:"{{count}} fichiers supprimés",filesMoved:"Fichiers déplacés",folderLinked:"Dossier lié",folderUnlinked:"Dossier délié",externalFolderLinked:"Dossier externe lié et scanné",folderScanned:"Scan terminé : {{added}} ajoutés, {{removed}} supprimés",addedToQueue:"{{count}} fichier(s) ajouté(s)",addedToQueuePartial:"{{added}} ajoutés, {{failed}} échecs",failedToAddToQueue:"Échec ajout file : {{error}}",fileRenamed:"Fichier renommé",folderRenamed:"Dossier renommé",thumbnailsGenerated:"{{count}} vignette(s) générée(s)",thumbnailsGeneratedPartial:"{{succeeded}} succès, {{failed}} échecs",noStlMissingThumbnails:"Aucun STL sans vignette",failedToGenerateThumbnails:"Échec vignettes : {{error}}",thumbnailGenerated:"Vignette générée",failedToGenerateThumbnail:"Échec vignette : {{error}}"}},projects:{title:"Projets",subtitle:"Suivez vos projets d'impression 3D",newProject:"Nouveau Projet",editProject:"Modifier Projet",deleteProject:"Supprimer Projet",projectName:"Nom du Projet",description:"Description",noProjects:"Aucun projet",noProjectsFiltered:"Aucun projet {{status}}",noProjectsFilteredHelp:`Vous n'avez aucun projet "{{status}}". Les projets apparaîtront ici lorsque leur statut changera.`,createFirst:"Créez votre premier projet pour organiser vos builds.",createFirstButton:"Créer votre premier projet",create:"Créer",files:"Fichiers",prints:"Impressions",plates:"plateaux",parts:"pièces",lastModified:"Modifié le",deleteConfirm:"Supprimer ce projet ? Les archives seront déliées mais conservées.",addFiles:"Ajouter fichiers",removeFile:"Retirer fichier",viewDetails:"Détails",namePlaceholder:"ex: Build Voron 2.4",descriptionPlaceholder:"Description optionnelle...",urlLabel:"URL",urlPlaceholder:"https://makerworld.com/...",urlInvalid:"L'URL doit commencer par http:// ou https://",openExternalUrl:"Ouvrir l’URL du projet",coverImageLabel:"Photo de couverture",coverImageAlt:"Photo de couverture du projet",coverImageUpload:"Téléverser",coverImageReplace:"Remplacer",coverImageRemove:"Supprimer",color:"Couleur",targetPlates:"Plateaux cibles",targetPlatesPlaceholder:"ex: 25",targetPlatesHelp:"Nombre total de jobs",targetParts:"Pièces cibles",targetPartsPlaceholder:"ex: 150",targetPartsHelp:"Nombre total d'objets",tagsLabel:"Tags (séparés par virgules)",tagsPlaceholder:"ex: voron, cadeau",dueDate:"Échéance",priority:"Priorité",priorityLow:"Basse",priorityNormal:"Normale",priorityHigh:"Haute",priorityUrgent:"Urgente",statusActive:"Actif",statusCompleted:"Terminé",statusArchived:"Archivé",done:"Fait",completed:"terminé",failed:"échoué",inQueue:"en file",noPrintsYet:"Aucune impression",printJobs:"Jobs (plateaux)",partsPrinted:"Pièces imprimées",failedParts:"Pièces échouées",import:"Importer",export:"Exporter",importProject:"Importer projet",exportAll:"Exporter tous les projets",loading:"Chargement des projets...",noEditPermission:"Pas d'autorisation de modification",noDeletePermission:"Pas d'autorisation de suppression",noCreatePermission:"Pas d'autorisation de création",noImportPermission:"Pas d'autorisation d'import",noExportPermission:"Pas d'autorisation d'export",toast:{created:"Projet créé",updated:"Projet mis à jour",deleted:"Projet supprimé",imported:"Projet importé",multipleImported:"{{count}} projets importés",importFailed:"Échec d'import",exported:"Projets exportés (métadonnées)"}},projectDetail:{notFound:"Projet non trouvé",backToProjects:"Retour aux Projets",export:"Exporter",exportProject:"Exporter projet",noExportPermission:"Pas d'autorisation export",noEditPermission:"Pas d'autorisation modification",partOf:"Fait partie de :",priorityLabel:"Priorité :",noPrints:"Aucune impression dans ce projet",status:{active:"Actif",completed:"Terminé",archived:"Archivé"},priority:{low:"Basse",normal:"Normale",high:"Haute",urgent:"Urgente"},dueDate:{overdue:"En retard",today:"Aujourd'hui",daysLeft:"{{count}} jours restants"},progress:{platesProgress:"Progression Plateaux",partsProgress:"Progression Pièces",printJobs:"jobs d'impression",parts:"pièces",percentComplete:"{{percent}}% terminé",remaining:"{{count}} restant(s)"},stats:{printJobs:"Jobs d'Impression",total:"total",failed:"{{count}} échecs",partsPrinted:"{{count}} pièces imprimées",printTime:"Temps d'Impression",filamentUsed:"Filament utilisé"},cost:{title:"Suivi des coûts",filamentCost:"Coût Filament",energy:"Énergie",totalCost:"Coût Total",total:"Total",includesBom:"BOM incluse",budget:"Budget",remaining:"Restant"},subProjects:{title:"Sous-projets ({{count}})"},notes:{title:"Notes",noEditPermission:"Pas d'autorisation modification",placeholder:"Ajouter des notes...",empty:"Aucune note. Cliquez sur modifier."},files:{title:"Fichiers",linkFolders:"Liez des dossiers depuis le gestionnaire",forQuickAccess:"pour un accès rapide.",fileCount:"{{count}} fichier(s)",empty:"Aucun dossier lié.",noFiles:"Aucun fichier dans ce dossier.",print:"Imprimer maintenant",addToQueue:"Ajouter à la file"},bom:{title:"BOM (Liste matériel)",acquired:"{{completed}}/{{total}} acquis",showAll:"Tout afficher",hideDone:"Masquer acquis",addPart:"Ajouter matériel",noAddPermission:"Pas d'autorisation ajout",partNamePlaceholder:"Nom (ex: Vis M3x8)",partName:"Nom de pièce",qty:"Qté",price:"Prix ({{currency}})",sourcingUrlPlaceholder:"Lien d'achat (optionnel)",remarksPlaceholder:"Remarques (optionnel)",deletePart:"Supprimer pièce",deleteConfirm:'Supprimer "{{name}}" ?',noUpdatePermission:"Pas d'autorisation mise à jour",noEditPermission:"Pas d'autorisation modification",noDeletePermission:"Pas d'autorisation suppression",totalCost:"Coût total :",empty:"BOM vide. Ajoutez du matériel ou de l'électronique."},timeline:{title:"Historique d'activité",empty:"Aucune activité."},template:{saveAsTemplate:"Enregistrer comme modèle",noCreatePermission:"Pas d'autorisation modèle"},queue:{title:"File d'attente",viewAll:"Tout voir",printing:"{{count}} en cours",queued:"{{count}} en file"},prints:{title:"Impressions ({{count}})"},toast:{projectUpdated:"Projet mis à jour",partAdded:"Pièce ajoutée",partRemoved:"Pièce retirée",exportFailed:"Échec export",projectExported:"Projet exporté",templateCreated:"Modèle créé"}},system:{title:"Informations Système",version:"Version",uptime:"Temps de fonctionnement",cpuUsage:"Utilisation CPU",memoryUsage:"Utilisation RAM",diskUsage:"Utilisation Disque",networkInfo:"Infos Réseau",logs:"Journaux",debugMode:"Mode Débogage",enableDebug:"Activer débogage",disableDebug:"Désactiver débogage",downloadLogs:"Télécharger logs",clearLogs:"Effacer logs",dockerInfo:"Infos Docker",containerName:"Nom conteneur",imageName:"Nom image",platform:"Plateforme",architecture:"Architecture"},library:{title:"Bibliothèque Filament",addFilament:"Ajouter Filament",editFilament:"Modifier Filament",deleteFilament:"Supprimer Filament",vendor:"Vendeur",material:"Matériau",color:"Couleur",kFactor:"Facteur K",temperature:"Température",noFilaments:"Bibliothèque vide",deleteConfirm:"Supprimer ce filament ?",importFromPrinter:"Importer de l'imprimante",exportToFile:"Exporter vers fichier"},slice:{title:"Slicer le modèle",action:"Slicer",actionAll:"Slicer les {{count}} plateaux",actionAllTitle:"Slicer tous les plateaux dans une sortie multi-plateaux (une seule archive). La sélection de filament couvre chaque emplacement défini par le projet.",allPlatesToggle:"Slicer les {{count}} plateaux",slicing:"Découpage…",printer:"Profil d'imprimante",process:"Profil de processus",filament:"Profil de filament",filamentSlot:"Filament {{index}} – {{type}}",selectPreset:"— Sélectionner un préréglage —",loadingPresets:"Chargement des préréglages…",analyzingPlateFilaments:"Analyse des filaments de la plaque…",analyzingPlateFilamentsHint:"Exécution d'un découpage d'aperçu pour identifier les emplacements AMS utilisés. Mis en cache après — la réouverture est instantanée.",previewToast:"Analyse de {{name}} – {{elapsed}}",previewWithProgress:"Analyse de {{name}} – {{stage}} ({{percent}} %) – {{elapsed}}",notUsedByPlate:"— non utilisé par cette plaque",noPresetsForSlot:"Aucun préréglage disponible",otherPrinters:"Autres imprimantes",presetsLoadFailed:"Échec du chargement des préréglages. Ouvrez Paramètres → Profils pour les importer d'abord.",refreshPresets:"Actualiser",refreshPresetsTitle:"Actualiser les préréglages — récupérer les dernières listes Cloud et bundle (à utiliser après avoir supprimé un préréglage dans Bambu Studio ou Bambu Handy)",allPresetsRequired:"Tous les préréglages doivent être sélectionnés",bundle:"Pack de découpage",bundleNone:"— Aucun (choisir les préréglages individuellement) —",bundleAllRequired:"Le processus du pack et chaque emplacement de filament doivent être choisis",enqueuing:"Envoi du travail de découpage…",queued:"En file d'attente…",failed:"Échec du découpage. Vérifiez les journaux du sidecar.",startedToast:"Découpage de {{name}} en arrière-plan…",queuedToast:"En attente : {{name}} – {{elapsed}}",runningToast:"Découpage {{name}} – {{elapsed}}",runningWithProgress:"{{name}} – {{stage}} ({{percent}} %) – {{elapsed}}",runningWithProgressMultiPlate:"Plateau {{plateIndex}} sur {{plateCount}} • {{name}} – {{stage}} ({{percent}} %) – {{elapsed}}",completedToast:"{{name}} découpé",failedTitle:"Échec du découpage",failedToast:"Échec du découpage de {{name}} : {{detail}}",tier:{local:"Importé",cloud:"Bambu Cloud",orcaCloud:"Orca Cloud",standard:"Standard"},cloud:{notAuthenticated:"Connectez-vous à Bambu Cloud (Paramètres → Profils → Bambu Cloud) pour voir vos préréglages cloud.",expired:"Session Bambu Cloud expirée – reconnectez-vous pour actualiser vos préréglages cloud.",unreachable:"Bambu Cloud est inaccessible. Les préréglages locaux et standards fonctionnent encore."},orcaCloud:{notAuthenticated:"Connectez-vous à Orca Cloud (Profils → Orca Cloud) pour voir vos préréglages Orca.",expired:"Session Orca Cloud expirée — reconnectez-vous pour actualiser vos préréglages Orca.",unreachable:"Orca Cloud est indisponible pour le moment. Les autres préréglages fonctionnent toujours."},bedType:{label:"Plateau d'impression",auto:"Auto (utiliser le préréglage de processus)",coolPlate:"Cool Plate",coolPlateSuperTack:"Cool Plate SuperTack",engineering:"Engineering Plate",highTemp:"High Temp Plate",texturedPEI:"Textured PEI Plate",smoothPEI:"Smooth PEI Plate"}},spoolman:{title:"Intégration Spoolman",enabled:"Spoolman Activé",url:"URL Spoolman",connected:"Connecté",disconnected:"Non Connecté",testConnection:"Tester connexion",sync:"Synchroniser",syncing:"Sync...",lastSync:"Dernière Sync",linkToSpoolman:"Lier à Spoolman",openInSpoolman:"Ouvrir Spoolman",unlinkSpool:"Délier bobine",unlinkConfirmTitle:"Désassigner la bobine ?",unlinkConfirmMessage:"Cela retirera la bobine de cet emplacement. Les données de la bobine elles-mêmes resteront inchangées.",selectSpool:"Choisir bobine",noUnlinkedSpools:"Pas de bobine libre",linkSuccess:"Bobine assignée avec succès",linkFailed:"Échec de l’assignation",unlinkSuccess:"Bobine désassignée avec succès",unlinkFailed:"Échec du désassignement",linkedSpool:"Bobine assignée",spoolId:"ID Bobine",fillSourceLabel:"(Spoolman)",weight:"Poids",remaining:"Restant",disableWeightSync:"Désactiver Sync poids estimé AMS",disableWeightSyncDesc:"Ne pas utiliser les estimations AMS. Utile si vous préférez le suivi Spoolman.",reportPartialUsage:"Rapporter consommation partielle pour échecs",reportPartialUsageDesc:"Si l'impression échoue, rapporte le filament consommé selon les couches."},inventory:{title:"Inventaire de Bobines",subtitle:"Gérez vos bobines",spoolmanMixedContentTitle:"Spoolman ne peut pas se charger en HTTPS — contenu mixte bloqué par votre navigateur",spoolmanMixedContentBody:"Bambuddy est servi en HTTPS (via votre reverse proxy), mais votre URL Spoolman est encore en HTTP. Les navigateurs bloquent le contenu mixte pour des raisons de sécurité, donc l'interface Spoolman intégrée ne peut pas s'afficher. Spoolman doit être accessible en HTTPS.",spoolmanMixedContentFixReverseProxy:"Placez Spoolman derrière le même reverse proxy que Bambuddy (Traefik / Nginx / Caddy) en HTTPS, puis mettez à jour l'URL Spoolman dans les Paramètres avec la nouvelle adresse HTTPS.",spoolmanMixedContentFixOpenNewTab:"Alternative : ouvrez Spoolman dans un nouvel onglet en HTTP — les règles de contenu mixte ne s'appliquent qu'aux cadres intégrés, un onglet autonome fonctionne.",spoolmanOpenInNewTab:"Ouvrir Spoolman dans un nouvel onglet",labels:{title:"Imprimer étiquettes de bobines",selectedCount:"{{count}} sélectionné",pickSpools:"Choisissez les bobines pour lesquelles imprimer des étiquettes :",searchPlaceholder:"Rechercher par nom, marque ou #ID",filterByMaterial:"Matériau :",allMaterials:"Tout",selectVisible:"Sélectionner tout visible ({{count}})",deselectVisible:"Désélectionner visible",clearAll:"Tout effacer",noSpoolsToShow:"Aucune bobine à afficher. Ajustez votre filtre et réessayez.",noMatches:"Aucune bobine ne correspond à la recherche ou au filtre actuel.",printOne:"Imprimer l'étiquette de cette bobine",printLabels:"Imprimer les étiquettes…",bulkTitle:"Choisissez les bobines à étiqueter parmi les {{count}} affichées",noSpoolsTitle:"Aucune bobine à étiqueter",error:"Impossible de générer les étiquettes : {{msg}}",sortBy:{label:"Trier :",id:"Par ID",color:"Par couleur"},templates:{amsHolderSmall:{label:"Support AMS — petit (74 × 33 mm)",hint:"Une étiquette par page ; correspond à l'étiquette imprimable du modèle MakerWorld 752566 (Support d'étiquettes pour filament AMS)."},amsHolderLarge:{label:"Support AMS — grand (75 × 55 mm)",hint:"Une étiquette par page ; s'adapte à la variante carton du support d'étiquettes pour filament AMS. Assez d'espace pour pastille, marque, matériau, ID et QR code."},box40x30:{label:"Étiquette boîte (40 × 30 mm)",hint:"Une étiquette par page ; taille de rouleau DK/Brother courante, idéale pour étiqueter sachets de filament et bacs de stockage."},box:{label:"Box label (62 × 29 mm)",hint:"Une étiquette par page ; dimensionnée pour Brother PT/QL et petites étiquettes Dymo."},averyL7160:{label:"Avery L7160 — A4 sheet (38.1 × 63.5 mm × 21)",hint:"Format de feuille UE ; 21 étiquettes par page A4."},avery5160:{label:"Avery 5160 — US Letter sheet (25.4 × 66.7 mm × 30)",hint:"Format de feuille US ; 30 étiquettes par page Letter."}}},csv:{importButton:"Importer CSV",exportButton:"Exporter CSV",modalTitle:"Importer des bobines depuis un CSV",selectFile:"Choisissez un fichier CSV ou glissez-le ici",dragHint:"En-tête : material (requis), brand, subtype, color_name, rgba, …",parsing:"Lecture du fichier…",previewError:"Impossible de lire le fichier CSV",validCount:"{{count}} valides",errorCount:"{{count}} en erreur",skippedCount:"{{count}} ignorées",colRow:"Ligne",colStatus:"Statut",colColor:"Couleur",colorResolved:"Couleur remplie depuis le catalogue",colorCrossMaterial:"Couleur reprise d'un autre matériau — aucune correspondance exacte dans le catalogue",duplicateExisting:"Une bobine avec ce matériau, cette marque et cette couleur existe déjà — elle sera tout de même importée comme une nouvelle bobine",spoolmanHint:"En mode Spoolman, utilisez l'import/export CSV intégré de Spoolman.",importValidRows:"Importer {{count}} lignes valides",noValidRows:"Aucune ligne valide",importing:"Importation…",importSuccess:"{{count}} bobines importées",importError:"Échec de l'importation",exportError:"Échec de l'exportation"},addSpool:"Ajouter Bobine",editSpool:"Modifier Bobine",copySpool:"Copier Bobine",material:"Matériau",selectMaterial:"Choisir matériau...",subtype:"Sous-type",brand:"Marque",searchBrand:"Chercher marque...",useCustomBrand:'Utiliser "{{brand}}"',useCustomMaterial:"Utiliser un matériau personnalisé : {{material}}",colorName:"Nom de couleur",colorNamePlaceholder:"Blanc Jade, Rouge Feu...",color:"Couleur",hexColor:"Code Hex",pickColor:"Choisir couleur perso",labelWeight:"Poids net",coreWeight:"Poids bobine vide",searchSpoolWeight:"Chercher poids bobine...",weightUsed:"Consommé",currentWeight:"Poids restant",measuredWeight:"Poids mesuré",spoolName:"Bobine",costPerKg:"Coût par kg",storageLocation:"Emplacement de stockage",storageLocationPlaceholder:"ex. Étagère A, Tiroir 1",openInInventory:"Ouvrir dans l'inventaire",measuredWeightError:"Le poids mesuré doit être entre {{min}}g et {{max}}g.",slicerFilament:"Filament Slicer",slicerFilamentName:"Nom du Preset Slicer",slicerPreset:"Preset Slicer",searchPresets:"Chercher presets...",selectedPreset:"Sélectionné",noPresetsFound:"Aucun preset trouvé",tempOverrides:"Exceptions Température",note:"Note",notePlaceholder:"Notes additionnelles sur cette bobine...",category:"Catégorie",categoryPlaceholder:"ex. Production, Prototype, Client A",categoryNone:"Sans catégorie",storageLocationNone:"Aucun emplacement défini",lowStockThresholdOverride:"Seuil bas (cette bobine)",lowStockThresholdOverrideHelp:"Laisser vide pour utiliser le seuil global ({{global}} %).",clearRfid:"Effacer le tag RFID",rfidCleared:"Tag RFID effacé",archive:"Archiver",restore:"Restaurer",noSpools:"Aucune bobine. Ajoutez votre première bobine pour commencer.",noAvailableSpools:"Aucune bobine disponible. Ajoutez une bobine à votre inventaire ou désaffectez-en une d'un autre emplacement.",kProfiles:"Profils K",addKProfile:"Ajouter K-Profile",assignSpool:"Assigner Bobine",unassignSpool:"Désassigner",assignSuccess:"Bobine assignée et slot AMS configuré",assignPendingInsert:"Assigné. Le slot sera configuré lors de l'insertion de la bobine.",assignFailed:"Échec assignation",selectSpool:"Choisir une bobine pour ce slot",assigned:"Assigné",assigning:"Assignation...",searchSpools:"Chercher bobines...",showAllSpools:"Afficher toutes les bobines",spoolmanSpools:"Bobines Spoolman",allMaterials:"Tous Matériaux",filterByBrand:"Filtrer par marque...",showArchived:"Afficher archivées",quickAdd:"Ajout rapide (Stock)",quantity:"Quantité",stock:"Stock",configured:"Configuré",spoolsCreated:"{{count}} bobines créées",spoolsPartiallyCreated:"{{created}} sur {{total}} bobines créées (certaines ont échoué)",spoolCreated:"Bobine créée",spoolUpdated:"Bobine mise à jour",spoolDeleted:"Bobine supprimée",deepLinkSpoolNotFound:"Bobine introuvable",deepLinkFetchFailed:"Impossible de charger la bobine — réessayez",spoolArchived:"Bobine archivée",spoolRestored:"Bobine restaurée",kProfileSaveFailed:"Les paramètres de profil K n'ont pas pu être enregistrés",syncWeightSpoolNotFound:"Bobine introuvable — elle a peut-être été supprimée",syncWeightSpoolmanUnreachable:"Spoolman est inaccessible — réessayez plus tard",syncWeightFailed:"Échec de la synchronisation du poids",spoolmanUnreachable:"Spoolman est inaccessible — veuillez réessayer plus tard",deleteSpoolNotFound:"Bobine introuvable — elle a peut-être déjà été supprimée",deleteFailed:"Impossible de supprimer la bobine",archiveSpoolNotFound:"Bobine introuvable — elle a peut-être déjà été supprimée",archiveFailed:"Impossible d'archiver la bobine",restoreSpoolNotFound:"Bobine introuvable — elle a peut-être déjà été supprimée",restoreFailed:"Impossible de restaurer la bobine",saveFailed:"Impossible d'enregistrer les modifications",tagClearFailed:"Impossible de supprimer le tag",deleteConfirm:"Supprimer définitivement cette bobine ?",archiveConfirm:"Voulez-vous vraiment archiver cette bobine ?",advancedSettings:"Paramètres Avancés",filamentInfoTab:"Infos Filament",paProfileTab:"Profil PA",filamentInfo:"Filament",additional:"Additionnel",loadingPresets:"Chargement des presets cloud...",cloudConnected:"Cloud connecté",cloudNotConnected:"Cloud déconnecté (valeurs par défaut)",recentColors:"Récentes",searchColors:"Chercher couleurs...",searchResults:"Résultats",allColors:"Toutes",commonColors:"Communes",showLess:"Moins",showAll:"Toutes",noColorsFound:"Aucune couleur correspondante",noResults:"Aucun résultat",extraColorsLabel:"Couleurs supplémentaires",extraColorsPlaceholder:"EC984C,#6CD4BC,A66EB9,D87694",extraColorsHint:"Collez 2 à 8 stops hex, séparés par des virgules. Affiché en dégradé.",extraColorsInvalid:"Hex non valides ignorés : {{tokens}}",colorEffectLabel:"Effet",colorEffect:{none:"Aucun",sparkle:"Pailleté",wood:"Bois",marble:"Marbre",glow:"Lueur",matte:"Mat",silk:"Soie",galaxy:"Galaxie",rainbow:"Arc-en-ciel",metal:"Métal",translucent:"Translucide",gradient:"Dégradé",dualColor:"Bicolore",triColor:"Tricolore",multicolor:"Multicolore"},selectMaterialFirst:"Veuillez choisir un matériau dans l'onglet Infos Filament.",noPrintersConfigured:"Ajoutez une imprimante pour utiliser les profils PA.",matchingFilter:"Correspondant",anyBrand:"Toute marque",anyVariant:"Toute variante",autoSelect:"Auto-sélection",matches:"correspondances",match:"correspondance",noMatches:"Aucune correspondance",connected:"Connecté",offline:"Hors ligne",printerOffline:"Imprimante hors ligne. Connectez-vous pour voir les profils.",noKProfilesMatch:"Aucun profil K ne correspond au filament.",leftNozzle:"Buse Gauche",rightNozzle:"Buse Droite",profilesSelected:"profil(s) de calibration sélectionné(s)",totalInventory:"Total Inventaire",totalConsumed:"Total Consommé",byMaterial:"Par Matériau",inPrinter:"Dans Imprimante",lowStock:"Stock Bas",sinceTracking:"Depuis le début du suivi",resetConsumedCounter:"Réinitialiser le compteur",resetConsumedCounterTooltip:"Remettre à zéro le compteur de grammes consommés pour cette bobine. Le poids restant n'est pas modifié.",resetConsumedCounterConfirm:"Remettre à 0 le compteur de grammes consommés de cette bobine ? Les futures impressions repartiront de zéro. La bobine, son calcul de poids restant et vos paramètres ne sont pas modifiés.",resetAllConsumedCounters:"Réinitialiser tous les compteurs",resetAllConsumedCountersTooltip:"Remettre à zéro le compteur de grammes consommés sur chaque bobine. Les poids restants ne sont pas modifiés.",resetAllConsumedCountersConfirm:"Remettre à 0 le compteur de grammes consommés sur les {{count}} bobines (archivées incluses) ? Cela efface la valeur « Total Consommé » pour que les futures impressions repartent de zéro. Les bobines et les poids restants ne sont pas modifiés.",consumedCounterReset:"Compteur réinitialisé",allConsumedCountersReset:"Compteur réinitialisé pour {{count}} bobine(s)",resetConsumedCounterFailed:"Échec de la réinitialisation du compteur",loadedInAms:"Chargé dans AMS/Ext",remaining:"Restant",weightCheck:"Vérification poids",lastWeighed:"Dernière pesée",neverWeighed:"Jamais pesé",search:"Chercher bobines...",showing:"Affichage",to:"à",of:"sur",show:"Voir",spools:"bobines",spool:"bobine",page:"Page",noSpoolsMatch:"Aucun résultat trouvé",noSpoolsMatchDesc:"Ajustez votre recherche ou vos filtres.",active:"Actif",archived:"Archivé",all:"Tous",used:"Occasion",new:"Neuf",clearFilters:"Effacer filtres",table:"Tableau",cards:"Cartes",net:"Réseau",groupSimilar:"Grouper",groupedSpools:"{{count}} bobines identiques",groupedRows:"lignes",columns:"Colonnes",configureColumns:"Configurer Colonnes",configureColumnsDesc:"Glissez pour ordonner ou utilisez les flèches. Cliquez sur l'œil pour masquer.",visible:"visible",reset:"Réinitialiser",cancel:"Annuler",applyChanges:"Appliquer",moveUp:"Monter",moveDown:"Descendre",hideColumn:"Masquer",showColumn:"Afficher",linkToSpool:"Lier à une Bobine",tagLinked:"Tag lié à la bobine",tagLinkFailed:"Échec lien tag",tagAlreadyLinked:"Tag déjà lié à une autre bobine",unknownTag:"Tag RFID inconnu détecté",usageHistory:"Historique de Consommation",noUsageHistory:"Aucune consommation enregistrée",printName:"Nom Impression",weightConsumed:"Poids consommé",clearHistory:"Effacer",historyCleared:"Historique effacé",fillSourceLabel:"(Inv)",lowStockThresholdError:"Le seuil doit être compris entre 0.1 et 99.9",assignMismatchTitle:"Incompatibilité de matériau",assignMismatchMessage:'Le matériau de la bobine sélectionnée "{{spoolMaterial}}" ne correspond pas au matériau du plateau "{{trayMaterial}}" pour {{location}}. Assigner quand même ?',assignMismatchConfirm:"Assigner quand même",assignPartialMismatchMessage:'Le matériau de la bobine "{{spoolMaterial}}" est similaire, mais ne correspond pas exactement à "{{trayMaterial}}" dans {{location}}. Voulez-vous continuer ?',assignProfileMismatchMessage:'Le profil de la bobine "{{spoolProfile}}" ne correspond pas au profil du plateau "{{trayProfile}}" dans {{location}}. Voulez-vous continuer ?',assignReconfigureNote:"Le slot AMS sera reconfiguré pour utiliser le profil de la bobine.",spoolmanFilamentCatalog:"Catalogue de filaments Spoolman",pickFromSpoolmanCatalog:"Choisir dans le catalogue Spoolman…",spoolmanFilamentSelected:"Filament sélectionné depuis le catalogue Spoolman",spoolmanFilamentUnlinked:"Lien avec le catalogue de filaments supprimé",noSpoolmanFilaments:"Aucun filament trouvé dans le catalogue Spoolman",spoolmanFilamentColorSwatch:"Couleur du filament",spoolWeightManagedBySpoolman:"Le poids de la bobine vide est géré par type de filament dans Spoolman",spoolmanCatalogLoadFailed:"Impossible de charger le catalogue Spoolman"},timelapse:{title:"Time-lapse",create:"Créer Timelapse",download:"Télécharger",delete:"Supprimer",preview:"Aperçu",frameRate:"Images/sec",quality:"Qualité",processing:"Traitement...",noTimelapses:"Aucun timelapse"},ams:{title:"AMS",slot:"Emplacement",empty:"Vide",emptySlot:"Slot vide",slotEmpty:"Vide",slotUnconfigured:"?",emptySlotReset:"Aucune bobine assignée",unknown:"Inconnu",humidity:"Humidité",temperature:"Température",filamentType:"Type filament",filamentColor:"Couleur",remaining:"Restant",history:"Historique AMS",noHistory:"Aucun historique",configureSlot:"Configurer Slot",externalSpool:"Bobine externe",profile:"Profil",kFactor:"Facteur K",fill:"Remplir",configure:"Configurer",used:"utilisé",remainingUnit:"restant"},printModal:{title:"Lancer l'impression",selectPrinter:"Choisir l'imprimante",selectPlate:"Choisir le plateau",filamentMapping:"Mapping Filament",totalCost:"Coût total :",slotRemainingShort:" - {{grams}}g rest.",printSettings:"Réglages d'impression",bedLeveling:"Nivellement plateau",flowCalibration:"Calibration débit",vibrationCalibration:"Vibration (Input Shaper)",layerInspection:"Inspection 1ère couche",timelapse:"Time-lapse",startPrint:"Démarrer",addToQueue:"Ajouter à la file",cancel:"Annuler",noPrintersAvailable:"Aucune imprimante disponible",printerBusy:"L'imprimante est occupée",printerOffline:"L'imprimante est hors ligne",sameTypeDifferentColor:"Même type, couleur différente",filamentTypeNotLoaded:"Type de filament non chargé",openCalendar:"Ouvrir calendrier",leftNozzle:"G",rightNozzle:"D",leftNozzleTooltip:"Buse gauche",rightNozzleTooltip:"Buse droite",filamentOverride:"Remplacement de filament",filamentOverrideHint:"Remplacez optionnellement les filaments pour l'affectation par modèle. Le planificateur utilisera vos filaments sélectionnés au lieu des valeurs 3MF d'origine.",originalFilament:"Original",overrideWith:"Remplacer par",resetToOriginal:"Revenir à l'original",insufficientFilamentTitle:"Filament insuffisant",insufficientFilamentMessage:"Certaines bobines assignées ont moins de filament restant que nécessaire pour cette impression :",insufficientFilamentLine:"{{printer}} - {{slot}} : nécessite {{required}}g, restant {{remaining}}g",printAnyway:"Imprimer quand même",forceColorMatch:"Forcer correspondance des couleurs",staggerPrinterStarts:"Échelonner démarrages",staggerGroupSize:"Taille du groupe",staggerInterval:"Intervalle (min)",staggerPreview:"{{printers}} imprimantes → {{groups}} groupes de {{size}}, démarrage toutes les {{interval}} min",staggerLastGroup:"dernier groupe : {{count}}",staggerTotal:"total : {{minutes}} min",staggerToPrinters:"Échelonner sur {{count}} imprimantes",gcodeInjection:"Injecter le G-code auto-impression"},backup:{includesEncryptionKey:"Les sauvegardes locales incluent le fichier de clé de chiffrement MFA (DATA_DIR/.mfa_encryption_key), donc un ZIP de sauvegarde est autonome. Traitez le ZIP comme sensible — quiconque possède le fichier peut déchiffrer les secrets client OIDC et TOTP qu'il contient.",title:"Sauvegarde & Restauration",createBackup:"Créer Sauvegarde",restoreBackup:"Restaurer Sauvegarde",restoreDescription:"Remplace les données par un fichier de sauvegarde",downloadBackup:"Télécharger Sauvegarde",uploadBackup:"Téléverser Sauvegarde",lastBackup:"Dernière sauvegarde",autoBackup:"Sauvegarde auto",backupNow:"Sauvegarder maintenant",restoreWarning:"Attention : Écrase TOUTES les données actuelles.",includeArchives:"Inclure Archives",includeSettings:"Inclure Paramètres",includeProfiles:"Inclure Profils",backupSuccess:"Sauvegarde réussie",restoreSuccess:"Restauration réussie",backupFailed:"Échec sauvegarde",restoreFailed:"Échec restauration",restoreNote:"L'imprimante virtuelle sera arrêtée pendant la restauration",githubBackup:"Sauvegarde GitHub",enabled:"Activé",cloudLoginRequired:"Connexion Bambu Cloud requise. Connectez-vous sous Profils → Profils Cloud pour activer la sauvegarde GitHub.",cloudLoginRequiredShort:"Connexion Cloud requise",githubDescription:"Synchronisez automatiquement vos profils vers un dépôt GitHub privé pour la sauvegarde et l'historique des versions.",repoIsPrivate:"Le dépôt est privé — la sauvegarde peut s'y faire en toute sécurité.",repoIsPublicWarning:"Le dépôt est PUBLIC. Les sauvegardes Bambuddy contiennent les identifiants MQTT, les jetons Home Assistant, les jetons Prometheus, votre adresse Bambu Cloud, et les codes d'accès des imprimantes via les K-profils. L'enregistrement est bloqué tant que le dépôt n'est pas passé en privé dans les paramètres de votre hébergeur.",repoVisibilityUnknown:"Impossible de déterminer la visibilité du dépôt. Bambuddy refuse toute sauvegarde vers un dépôt non confirmé privé ; l'enregistrement sera bloqué.",repositoryUrl:"URL du dépôt",repoUrlPlaceholderGitHub:"https://github.com/username/repo-name",repoUrlPlaceholderGitea:"https://gitea.example.com/username/repo-name",repoUrlPlaceholderForgejo:"https://forgejo.example.com/username/repo-name",repoUrlPlaceholderGitLab:"https://gitlab.com/username/repo-name",allowInsecureHttp:"Autoriser HTTP non sécurisé",allowInsecureHttpHint:"Activer pour les instances auto-hébergées sur des réseaux privés sans TLS",personalAccessToken:"Jeton d'accès personnel",tokenSaved:"(enregistré)",enterNewToken:"Entrez un nouveau jeton pour mettre à jour",tokenHint:"Jeton à granularité fine avec permission de lecture/écriture du contenu",branch:"Branche",provider:"Fournisseur Git",providerGitHub:"GitHub",providerGitLab:"GitLab",providerGitea:"Gitea",providerForgejo:"Forgejo",manualOnly:"Manuel uniquement",hourly:"Toutes les heures",daily:"Quotidien",weekly:"Hebdomadaire",includeInBackup:"Inclure dans la sauvegarde",kProfiles:"K-Profils",kProfilesDescription:"Calibration de l'avance de pression des imprimantes connectées",noPrintersConnected:"Aucune imprimante connectée",printersConnected:"{{connected}}/{{total}} connectées",cloudProfiles:"Profils Cloud",cloudProfilesDescription:"Préréglages de filament, imprimante et processus depuis Bambu Cloud",appSettings:"Paramètres de l'application",appSettingsDescription:"Configuration Bambuddy (base de données complète)",spoolInventory:"Inventaire des bobines",spoolInventoryDescription:"Bobines de filament, historique d'utilisation et suivi des coûts",printArchives:"Archives d'impression",printArchivesDescription:"Métadonnées de l'historique d'impression (pas de fichiers gcode/3MF)",lastBackupAt:"Dernière sauvegarde :",noBackupsYet:"Aucune sauvegarde pour l'instant",next:"Prochaine :",startingBackup:"Démarrage de la sauvegarde...",test:"Tester",enableBackup:"Activer la sauvegarde",testConnection:"Tester la connexion",enterRepoUrl:"Entrez l'URL du dépôt",enterRepoAndToken:"Entrez l'URL du dépôt et le jeton d'accès",repoRequired:"L'URL du dépôt est requise",tokenRequired:"Le jeton d'accès est requis",githubBackupEnabled:"Sauvegarde GitHub activée",tokenUpdated:"Jeton mis à jour",settingsSaved:"Paramètres enregistrés",failedToSave:"Échec de l'enregistrement : {{message}}",backupCompleteFiles:"Sauvegarde terminée - {{count}} fichiers mis à jour",backupSkippedNoChanges:"Sauvegarde ignorée - aucun changement",backupFailed2:"Échec de la sauvegarde : {{message}}",clearedLogs:"{{count}} journaux supprimés",failedToClearLogs:"Échec de la suppression des journaux : {{message}}",history:"Historique",clear:"Effacer",date:"Date",status:"Statut",commit:"Commit",localBackup:"Sauvegarde locale",localBackupDescription:"Créez une sauvegarde complète de vos données Bambuddy incluant la base de données, les archives, les téléchargements et tous les fichiers.",downloadBackupLabel:"Télécharger la sauvegarde",completeBackupZip:"Sauvegarde complète : base de données + tous les fichiers (ZIP)",download:"Télécharger",preparingBackup:"Préparation de la sauvegarde...",creatingArchive:"Création de l'archive de sauvegarde... Cela peut prendre un moment pour les archives volumineuses.",downloadingFile:"Téléchargement du fichier de sauvegarde...",backupDownloaded:"Sauvegarde téléchargée avec succès",failedToCreateBackup:"Échec de la création de la sauvegarde : {{message}}",restore:"Restaurer",restoreReplacesAll:"La restauration remplace toutes les données.",restoreReplacesAllDetail:"Votre base de données et vos fichiers actuels seront complètement remplacés. Un redémarrage est nécessaire après la restauration.",restoreConfirmTitle:"Restaurer la sauvegarde",restoreConfirmMessage:`Êtes-vous sûr de vouloir restaurer depuis "{{filename}}" ? Cela remplacera complètement votre base de données et tous vos fichiers. L'application devra être redémarrée après la restauration.`,restoreConfirmButton:"Restaurer la sauvegarde",uploadingFile:"Téléchargement du fichier de sauvegarde...",backupRestoredRestart:"Sauvegarde restaurée. Veuillez redémarrer Bambuddy.",failedToRestore:"Échec de la restauration. Veuillez vérifier le format du fichier.",reloadNow:"Recharger maintenant",creatingBackup:"Création de la sauvegarde",restoringBackup:"Restauration de la sauvegarde",preparing:"Préparation...",processing:"Traitement...",doNotClosePage:"Veuillez ne pas fermer cette page ni naviguer ailleurs. Cette opération peut prendre plusieurs minutes pour les sauvegardes volumineuses.",restoring:"Restauration...",restoreComplete:"Restauration terminée",restoreFailed2:"Échec de la restauration",importSettings:"Importer les paramètres depuis un fichier de sauvegarde",pleaseWaitRestoring:"Veuillez patienter pendant la restauration de vos données",selectBackupFile:"Cliquez pour sélectionner un fichier de sauvegarde (.json ou .zip)",duplicateHandling:"Comment fonctionne la gestion des doublons :",matchPrinters:"Imprimantes",matchPrintersBy:"correspondance par numéro de série",matchSmartPlugs:"Prises connectées",matchSmartPlugsBy:"correspondance par adresse IP",matchNotificationProviders:"Fournisseurs de notifications",matchNotificationProvidersBy:"correspondance par nom",matchFilaments:"Filaments",matchFilamentsBy:"correspondance par nom + type + marque",matchArchives:"Archives",matchArchivesBy:"correspondance par hash de contenu (toujours ignoré)",matchPendingUploads:"Téléchargements en attente",matchPendingUploadsBy:"correspondance par nom de fichier",matchSettingsTemplates:"Paramètres et modèles",matchSettingsTemplatesBy:"toujours écrasés",replaceExisting:"Remplacer les données existantes",keepExisting:"Conserver les données existantes",overwriteDescription:"Écraser les éléments qui existent déjà avec les données de sauvegarde",keepDescription:"Restaurer uniquement les éléments qui n'existent pas encore",overwriteCaution:"Attention :",overwriteWarning:"L'écrasement remplacera vos configurations actuelles par les données de la sauvegarde. Les codes d'accès des imprimantes ne sont jamais écrasés pour des raisons de sécurité.",cancel:"Annuler",processingBackup:"Traitement du fichier de sauvegarde...",itemsRestored:"Éléments restaurés",itemsSkipped:"Éléments ignorés",restored:"Restaurés",skippedAlreadyExist:"Ignorés (existent déjà)",filesCategory:"Fichiers (3MF, miniatures, etc.)",andMore:"...et {{count}} de plus",newApiKeysGenerated:"Nouvelles clés API générées",keysShownOnce:"Ces clés ne sont affichées qu'une seule fois. Copiez-les maintenant !",copy:"Copier",noDataFound:"Aucune donnée à restaurer n'a été trouvée dans le fichier de sauvegarde.",close:"Fermer",scheduledBackup:"Sauvegardes planifiées",scheduledBackupDescription:"Crée automatiquement des instantanés de sauvegarde selon un planning. Le répertoire de sortie peut être monté sur un NAS ou un stockage externe.",frequency:"Fréquence",backupTime:"Temps",retention:"Rétention",retentionDescription:"Nombre de sauvegardes à conserver",outputPath:"Chemin de sortie",outputPathPlaceholder:"Par défaut : {{path}}",outputPathDescription:"Laisser vide pour l'emplacement par défaut",runNow:"Exécuter maintenant",backupFiles:"Fichiers de sauvegarde",noScheduledBackups:"Aucune sauvegarde",deleteBackup:"Supprimer",deleteBackupConfirm:"Supprimer ce fichier de sauvegarde ?",backupRunning:"Sauvegarde en cours...",scheduledBackupComplete:"Sauvegarde terminée avec succès",scheduledBackupFailed:"Échec de la sauvegarde",nextBackup:"Prochaine sauvegarde",backupSize:"Taille",localTimeHint:"Heure locale ({{tz}})",defaultPathLabel:"Par défaut :",categories:{settings:"Paramètres",notification_providers:"Fournisseurs de notifications",notification_templates:"Modèles de notifications",smart_plugs:"Prises connectées",printers:"Imprimantes",filaments:"Filaments",maintenance_types:"Types de maintenance",archives:"Archives",projects:"Projets",pending_uploads:"Téléchargements en attente",external_links:"Liens externes",api_keys:"Clés API"}},tags:{title:"Étiquettes",addTag:"Ajouter Tag",editTag:"Modifier Tag",deleteTag:"Supprimer Tag",tagName:"Nom du Tag",tagColor:"Couleur du Tag",noTags:"Aucun tag",deleteConfirm:"Supprimer ce tag ?",manageTags:"Gérer les Tags"},uploadModal:{title:"Téléverser des fichiers 3MF",dragDrop:"Glissez les fichiers .3mf ici",or:"ou",browseFiles:"Parcourir",extractionInfo:"Le modèle d'imprimante est extrait des métadonnées 3MF.",uploaded:"téléversé",failed:"échoué",uploading:"En cours...",upload:"Téléverser",uploadFailed:"Échec du téléversement"},editArchive:{title:"Modifier l'archive",name:"Nom",namePlaceholder:"Nom de l'impression",printer:"Imprimante",noPrinter:"Aucune imprimante",project:"Projet",noProject:"Aucun projet",itemsPrinted:"Nombre de pièces",itemsPrintedHelp:"Nombre d'objets produits",notes:"Notes",notesPlaceholder:"Notes sur l'impression...",externalLink:"Lien externe",externalLinkPlaceholder:"https://...",externalLinkHelp:"Lien vers Printables, Thingiverse, etc.",tags:"Étiquettes",tagsPlaceholder:"Ajouter des tags...",addMoreTags:"Plus de tags...",matchingTags:'Correspondant à "{{query}}"',existingTags:"Tags existants",clickToAdd:"(cliquer pour ajouter)",status:"Statut",failureReason:"Raison de l'échec",selectReason:"Choisir raison...",photos:"Photos du résultat",photosHelp:"Cliquez sur + pour ajouter des photos",printResult:"Résultat d'impression",saving:"Enregistrement...",failureReasons:{adhesionFailure:"Défaut d'adhésion",spaghettiDetached:"Spaghetti / Détaché",layerShift:"Décalage de couche",cloggedNozzle:"Buse bouchée",filamentRunout:"Filament fini",warping:"Warping (Déformation)",stringing:"Stringing (Cheveux d'ange)",underExtrusion:"Sous-extrusion",powerFailure:"Coupure courant",userCancelled:"Annulé par l'utilisateur",other:"Autre"},statuses:{completed:"Réussie",failed:"Échouée",aborted:"Annulée",printing:"Impression"}},kProfiles:{title:"Profils K",noPrintersConfigured:"Aucune imprimante configurée",addPrinterInSettings:"Ajoutez une imprimante pour gérer les K-profiles",noActivePrinters:"Aucune imprimante active",enablePrinterConnection:"Activez la connexion pour voir les K-profiles",loadingProfiles:"Chargement des K-Profiles...",printerOffline:"Imprimante hors ligne",printerOfflineDesc:"L'imprimante doit être allumée.",noMatchingProfiles:"Aucun profil correspondant",noMatchingProfilesDesc:"Ajustez votre recherche",noKProfiles:"Aucun K-Profile",noKProfilesDesc:"Aucun profil trouvé pour une buse de {{diameter}}mm",createFirstProfile:"Créer le premier profil",printer:"Imprimante",nozzle:"Buse",refresh:"Rafraîchir",addProfile:"Ajouter Profil",export:"Exporter",import:"Importer",select:"Choisir",selectAll:"Tout sélectionner",delete:"Supprimer",searchPlaceholder:"Nom ou filament...",allExtruders:"Tous les extrudeurs",leftOnly:"Gauche uniquement",rightOnly:"Droite uniquement",allFlow:"Tout débit",hfOnly:"HF uniquement",sOnly:"S uniquement",sortName:"Tri : Nom",sortKValue:"Tri : Valeur K",sortFilament:"Tri : Filament",leftExtruder:"Extrudeur gauche",rightExtruder:"Extrudeur droit",modal:{addTitle:"Ajouter K-Profile",editTitle:"Modifier K-Profile",profileName:"Nom du profil",profileNamePlaceholder:"ex: Mon profil PLA",kValue:"Valeur K",kValuePlaceholder:"0.020",kValueHelp:"Plage type : 0.01-0.06 (PLA), 0.02-0.10 (PETG)",filament:"Filament",selectFilament:"Choisir filament...",noFilamentsHelp:"Créez d'abord un profil dans Bambu Studio.",flowType:"Type de débit",highFlow:"Haut Débit (HF)",standard:"Standard",nozzleSize:"Taille buse",extruder:"Extrudeur",extruders:"Extrudeurs",left:"Gauche",right:"Droite",notes:"Notes (locales)",notesPlaceholder:"Notes sur ce profil...",notesHelp:"Enregistré dans Bambuddy, pas sur l'imprimante",syncing:"Sync avec l'imprimante...",savingExtruder:"Sauvegarde extrudeur {{current}}/{{total}}...",pleaseWait:"Patientez..."},deleteConfirm:{title:"Supprimer profil",cannotUndo:"Action irréversible",message:`Supprimer "{{name}}" de l'imprimante ?`},bulkDelete:{title:"Supprimer les profils",cannotUndo:"Action irréversible",message:"Supprimer les {{count}} profils de l'imprimante ?"},toast:{profileSaved:"Profil K enregistré",profilesSaved:"Profil K enregistré sur {{count}} extrudeur(s)",selectAtLeastOneExtruder:"Sélectionnez un extrudeur",profileDeleted:"Profil K supprimé",profilesDeleted:"{{count}} profils supprimés",exportedProfiles:"{{count}} profils exportés",importedProfiles:"{{count}} sur {{total}} profils importés",noProfilesToExport:"Rien à exporter",invalidFileFormat:"Format invalide",failedToParseImport:"Échec analyse fichier",failedToSaveBatch:"Échec enregistrement groupé",noteSaved:"Note enregistrée",failedToSaveNote:"Échec note"},permission:{noRead:"Pas d'autorisation lecture",noCreate:"Pas d'autorisation création",noUpdate:"Pas d'autorisation mise à jour",noDelete:"Pas d'autorisation suppression",noExport:"Pas d'autorisation export",noImport:"Pas d'autorisation import"}},virtualPrinter:{title:"Imprimante Virtuelle",running:"En cours",stopped:"Arrêtée",description:{default:"Active une imprimante qui apparaît dans Bambu Studio. Les fichiers envoyés sont archivés sans impression.",proxy:"Active un proxy qui relaie le trafic vers une imprimante réelle, permettant l'impression à distance."},enable:{title:"Activer l'imprimante virtuelle",visibleInSlicer:'Visible comme "Bambuddy" dans le Slicer',proxyingTo:"Proxy vers {{name}}",notActive:"Inactive"},model:{title:"Modèle d'imprimante",description:"Choisissez le modèle à émuler.",restartWarning:"Changer le modèle redémarrera le service"},accessCode:{title:"Code d'accès",isSet:"Code défini",notSet:"Code requis pour activer",placeholder:"Code 8 char",placeholderChange:"Entrez nouveau code",hint:"Exactement 8 caractères. Sert à l'auth du Slicer.",charCount:"({{count}}/8)",inheritedFromTarget:"Hérité de l'imprimante cible",derivedFromTargetHint:"Utilise le code d'accès de l'imprimante cible. Le pont transmet l'authentification du slicer à l'imprimante réelle, donc les codes doivent correspondre — modifiez le code dans les paramètres de l'imprimante.",reveal:"Afficher le code d'accès",hide:"Masquer le code d'accès"},targetPrinter:{title:"Imprimante cible",configured:"Cible configurée",notConfigured:"Imprimante requise pour mode Proxy",placeholder:"Choisir imprimante...",hint:"L'imprimante doit être en mode LAN.",noPrinters:"Ajoutez une imprimante réelle d'abord."},remoteInterface:{title:"Exception Interface Réseau",configured:"Override actif",optional:"Optionnel - si IP auto est fausse (VPN, Docker, multi-NIC).",placeholder:"Auto (défaut)...",hint:"Force l'IP annoncée via SSDP."},mode:{title:"Mode",archive:"Archiver",archiveDesc:"Archive immédiatement",review:"Revue",reviewDesc:"Attendre revue avant archive",queue:"File",queueDesc:"Archiver et ajouter à la file",proxy:"Proxy",proxyDesc:"Relais vers imprimante réelle"},autoDispatch:{title:"Lancement automatique",description:"Lancer automatiquement les impressions ajoutées à la file. Désactivé, les impressions attendent un lancement manuel."},queueForceColorMatch:{title:"Forcer la correspondance des couleurs",description:"Refuser l'envoi vers une imprimante qui n'a pas exactement le type de filament et la couleur chargés. Désactivé par défaut — sans cela, la file d'attente utilise uniquement la correspondance par modèle et peut choisir une imprimante avec la mauvaise couleur."},tailscaleDisabled:{title:"Intégration Tailscale",description:"Activez pour marquer ce VP comme exposé via Tailscale. Affiche l'adresse Tailscale de l'hôte pour que vous sachiez quelle IP coller dans le slicer. L'étape d'import CA est inchangée — cette bascule n'a aucun effet sur les certificats."},setupRequired:{title:"Configuration requise",description:"Nécessite des réglages système (ports, pare-feu).",readGuide:"Lire le guide de configuration"},howItWorks:{title:"Fonctionnement",step1:"Sur le même LAN, les imprimantes virtuelles apparaissent automatiquement dans votre slicer (Bambu Studio / OrcaSlicer). Depuis d'autres réseaux, ajoutez-les manuellement par adresse IP et code d'accès.",step2:`En mode Archive, Revue et File d'attente, utilisez le bouton "Envoyer" dans votre slicer pour envoyer des fichiers 3MF à Bambuddy. Le slicer affichera "Impression réussie" — le fichier est stocké, pas imprimé.`,step3:"En mode Proxy, l'imprimante virtuelle relaie tout le trafic vers une vraie imprimante — les impressions démarrent immédiatement comme en connexion directe."},status:{title:"Détails du statut",printerName:"Nom",model:"Modèle",serialNumber:"Série",mode:"Mode",pendingFiles:"Fichiers en attente",targetPrinter:"Cible",ftpPort:"Port FTP",mqttPort:"Port MQTT",ftpConnections:"Connexions FTP",mqttConnections:"Connexions MQTT"},toast:{updated:"Réglages virtuels mis à jour",failedToUpdate:"Échec mise à jour",copyFailed:"Échec de la copie — veuillez sélectionner le texte manuellement",accessCodeRequired:"Code d'accès requis",targetPrinterRequired:"Imprimante cible requise",bindIpRequired:"Veuillez d'abord définir une adresse IP",accessCodeEmpty:"Le code ne peut pas être vide",accessCodeLength:"Le code doit faire 8 caractères",targetCodeChangedRebind:"Le code d'accès correspond désormais à la nouvelle imprimante cible. Réajoutez cet appareil dans votre slicer pour récupérer le nouveau code.",created:"Imprimante virtuelle créée",failedToCreate:"Échec de la création de l'imprimante virtuelle",deleted:"Imprimante virtuelle supprimée",failedToDelete:"Échec de la suppression de l'imprimante virtuelle"},list:{title:"Imprimantes virtuelles",add:"Ajouter",addFirst:"Ajouter une imprimante virtuelle",empty:"Aucune imprimante virtuelle configurée. Ajoutez-en une pour commencer."},bindIp:{title:"Interface réseau",placeholder:"Sélectionner interface...",hint:"Interface réseau sur laquelle cette imprimante virtuelle écoute. Doit être unique par imprimante."},proxy:{accessCodeHint:"En mode proxy, utilisez le code d'accès de l'imprimante cible dans le slicer. La connexion est transmise de manière transparente à l'imprimante réelle."},addDialog:{title:"Ajouter une imprimante virtuelle",name:"Nom",hint:"Vous pourrez configurer le code d'accès, l'imprimante cible et d'autres paramètres après la création.",create:"Créer"},deleteConfirm:{title:"Supprimer l'imprimante virtuelle",message:'Êtes-vous sûr de vouloir supprimer "{{name}}" ? Cela arrêtera tous les services de cette imprimante.'},archiveNameSource:{title:"Source du nom d'archive",description:`Choisissez comment les nouvelles archives sont nommées lorsque les fichiers arrivent via l'imprimante virtuelle. "Métadonnées" utilise le titre intégré par le slicer dans le 3MF (par défaut). "Nom de fichier" utilise le nom envoyé par Bambu Studio en FTP. Note : Bambu Studio écrase le nom que vous saisissez dans la boîte "envoyer à l'imprimante" avec le champ Titre du 3MF lorsque celui-ci est présent, les deux modes produisent donc souvent la même chaîne.`,metadata:"Métadonnées",filename:"Nom de fichier"},caCert:{title:"Certificat du slicer",description:"Les imprimantes virtuelles utilisent un certificat TLS signé par l'autorité de certification Bambuddy. Importez ce certificat CA dans le magasin de confiance de votre slicer une seule fois pour qu'il accepte la connexion — plus besoin de le copier depuis la ligne de commande.",copy:"Copier",copied:"Copié",download:"Télécharger",fingerprint:"SHA-256"}},modelViewer:{openInSlicer:"Ouvrir dans le Slicer",tabs:{model:"Modèle 3D",gcode:"Aperçu G-code"},notAvailable:"indisponible",notSliced:"pas découpé",plates:"Plateaux",allPlates:"Tous les plateaux",plateNumber:"Plateau {{number}}",plateCount:"{{count}} plateau",plateCount_other:"{{count}} plateaux",objectCount:"{{count}} objet",objectCount_other:"{{count}} objets",filamentCount:"{{count}} filament",filamentCount_other:"{{count}} filaments",eta:"Fin {{minutes}} min",noPreview:"Aucun aperçu pour ce fichier",pagination:{pageOf:"Page {{current}} sur {{total}}",prev:"Préc",next:"Suiv"},errors:{failedToLoad:"Échec chargement fichier",noMeshes:"Aucun maillage trouvé dans le 3MF",unsupportedFormat:"Format non supporté"}},maintenanceDescriptions:{lubricateCarbonRods:"Appliquer du lubrifiant sur les tiges carbone pour un mouvement fluide",lubricateRails:"Appliquer du lubrifiant sur les rails linéaires",cleanNozzle:"Nettoyer buse et hotend anti-bouchage",checkBelts:"Tension des courroies pour la précision",cleanBuildPlate:"Nettoyage plateau pour l'adhésion",checkExtruder:"Usure des engrenages de l'extrudeur",checkCooling:"Bon fonctionnement des ventilateurs",generalInspection:"Inspection générale de la machine",cleanCarbonRods:"Nettoyer les tiges carbone (friction)",lubricateSteelRods:"Appliquer du lubrifiant sur les tiges en acier pour un mouvement fluide",cleanSteelRods:"Nettoyer les tiges en acier (friction)",cleanLinearRails:"Essuyer les rails linéaires (poussière/débris)",checkPtfeTube:"Usure ou dommage du tube PTFE",replaceHepaFilter:"Filtre HEPA pour la qualité de l'air",replaceCarbonFilter:"Filtre charbon actif (odeurs)",lubricateLeftNozzleRail:"Lubrifier le rail de buse gauche (Série H2)"},smartPlugs:{offline:"Hors ligne",admin:"Administrateur",openPlugAdminPage:"Page admin de la prise",deleteSmartPlug:"Supprimer la prise",turnOnSmartPlug:"Allumer la prise",turnOffSmartPlug:"Éteindre la prise",turnOn:"Allumer",turnOff:"Éteindre",addSmartPlug:{scanningNetwork:"Scan réseau...",chooseEntity:"Choisir une entité...",connectionFailed:"Échec connexion",searchEntities:"Chercher entités...",searchPowerSensors:"Capteurs puissance...",searchEnergySensors:"Capteurs énergie...",placeholders:{plugName:"Prise Salon",mqttStateOnValue:"ON, true, 1",mqttSameAsPower:"Identique au topic puissance, ou différent"}},linkedTo:"Lié à :",monitorOnly:"Surveillance uniquement",alerts:"Alertes",scheduleOn:"À {{time}}",scheduleOff:"Désactivé {{time}}",on:"On",off:"Désactivé",power:"Puissance",kwhToday:"kWh Aujourd'hui",settings:"Paramètres",automationSettings:"Paramètres d'automatisation",showInSwitchbar:"Afficher dans la barre de commutateurs",quickAccessSidebar:"Accès rapide depuis la barre latérale",enabled:"Activé",enableAutomation:"Activer l'automatisation pour cette prise",autoOn:"Auto Activé",autoOnDescription:"Allumer au démarrage de l'impression",autoOff:"Auto Désactivé",autoOffDescription:"Éteindre à la fin de l'impression (unique)",autoOffPersistent:"Garder activé",autoOffPersistentDescription:"Rester activé entre les impressions au lieu d'une seule fois",autoOffAfterDrying:"Arrêt auto après séchage",autoOffAfterDryingDescription:"Éteindre à la fin du séchage de l'AMS",delayAfterDryingMinutes:"Délai après séchage (minutes)",turnOffDelayMode:"Mode de délai d'extinction",time:"Temps",temp:"Temp.",delayMinutes:"Délai (minutes)",tempThreshold:"Seuil de température (°C)",tempThresholdDescription:"S'éteint lorsque la buse refroidit en dessous de cette température",edit:"Modifier",deleteConfirm:'Êtes-vous sûr de vouloir supprimer "{{name}}" ? Cette action est irréversible.',turnOnConfirm:'Êtes-vous sûr de vouloir allumer "{{name}}" ?',turnOffConfirm:`Êtes-vous sûr de vouloir éteindre "{{name}}" ? Cela coupera l'alimentation de l'appareil connecté.`,failedToTurn:'Impossible de {{action}} "{{name}}"',unknown:"Inconnu",addTitle:"Ajouter une prise connectée",editTitle:"Modifier la prise connectée",stopScanning:"Arrêter le scan",discoverTasmota:"Découvrir les appareils Tasmota",foundDevices:"{{count}} appareil(s) trouvé(s) - cliquez pour sélectionner :",noDevicesFound:"Aucun appareil Tasmota trouvé sur votre réseau",haNotConfigured:"Home Assistant n'est pas configuré. Configurez-le dans",haSettingsPath:"Paramètres → Réseau → Home Assistant",selectEntity:"Sélectionner l'entité *",ipAddress:"Adresse IP *",nameLabel:"Nom *",username:"Nom d'utilisateur",password:"Mot de passe",authHint:"Laissez vide si votre appareil Tasmota ne nécessite pas d'authentification",linkToPrinter:"Lier à l'imprimante",noPrinter:"Pas d'imprimante (contrôle manuel uniquement)",linkingDescription:"La liaison permet l'allumage/extinction automatique au début/fin de l'impression",powerAlerts:"Alertes de puissance",alertAbove:"Alerte si au-dessus (W)",alertBelow:"Alerte si en dessous (W)",alertDescription:"Recevoir une notification lorsque la consommation dépasse ces seuils. Laisser vide pour désactiver cette direction.",dailySchedule:"Planification quotidienne",turnOnAt:"Allumer à",turnOffAt:"Éteindre à",scheduleDescription:"Allumer/éteindre automatiquement la prise à ces heures chaque jour. Laisser vide pour ignorer cette action.",showOnPrinterCard:"Afficher sur la carte imprimante",displayOnPrinterCard:"Afficher le bouton sur la carte imprimante",connectedResult:"Connecté !",deviceLabel:"Appareil : {{name}} - ",stateLabel:"État : {{state}}",test:"Tester",delete:"Supprimer",save:"Enregistrer",add:"Ajouter",cancel:"Annuler",failedToStartScan:"Impossible de démarrer le scan",nameRequired:"Le nom est requis",entityRequired:"L'entité est requise pour les prises Home Assistant",mqttTopicRequired:"Au moins un topic MQTT doit être configuré pour la puissance, l'énergie ou la surveillance d'état",loadingEntities:"Chargement des entités...",loading:"Chargement...",failedToLoadEntities:"Échec du chargement des entités : {{error}}",noEntitiesMatching:'Aucune entité trouvée correspondant à "{{search}}"',noEntitiesAvailable:"Aucune entité disponible",searchingEntities:"Recherche de toutes les entités ({{count}} trouvées)",showingEntities:"Affichage switch, light, input_boolean ({{count}} disponibles)",energyMonitoringOptional:"Surveillance énergétique (Optionnel)",energyMonitoringHint:"Recherchez et sélectionnez les capteurs fournissant des données de puissance/énergie.",powerSensorW:"Capteur de puissance (W)",energyTodayKwh:"Énergie aujourd'hui (kWh)",totalEnergyKwh:"Énergie totale (kWh)",noMatchingSensors:"Aucun capteur correspondant",none:"Aucun",mqttNotConfigured:"Broker MQTT non configuré. Définissez l'adresse du broker dans",mqttSettingsPath:"Paramètres → Réseau → Publication MQTT",mqttNotConfiguredSuffix:"(vous n'avez pas besoin d'activer la publication, remplissez simplement les détails du broker).",mqttMonitorOnlyDescription:"Les prises MQTT reçoivent les données de puissance/énergie via un abonnement MQTT. Le contrôle on/off n'est pas disponible - utilisez votre broker MQTT ou système domotique.",powerMonitoring:"Surveillance de puissance",energyMonitoring:"Surveillance énergétique",stateMonitoring:"Surveillance d'état",optional:"optionnel",topic:"Sujet",jsonPath:"Chemin JSON",multiplier:"Multiplicateur",onValue:"Valeur ON",mqttPowerHint:`Le chemin JSON extrait la valeur du payload JSON (ex: "power_l1"). Laisser vide si le topic publie des valeurs numériques brutes.
+Utiliser le multiplicateur 0.001 pour mW→W, 1000 pour kW→W.`,mqttEnergyHint:`Le chemin JSON extrait la valeur du payload JSON. Laisser vide pour les valeurs brutes.
+Utiliser le multiplicateur 0.001 pour Wh→kWh, 1000 pour MWh→kWh.`,mqttStateHint:`Le chemin JSON extrait la valeur du payload JSON. Laisser vide pour les valeurs brutes.
+Valeur ON : la chaîne exacte signifiant "ON". Laisser vide pour la détection auto (ON, true, 1).`,restControl:"Contrôle",restOnUrl:"URL d'activation",restOffUrl:"URL de désactivation",restOnBody:"Corps de requête ON",restOffBody:"Corps de requête OFF",restMethod:"Méthode HTTP",restHeaders:"Custom Headers (JSON)",restStatusUrl:"URL de statut",restStatusPath:"Chemin JSON état",restStatusOnValue:"Valeur ON",restPowerUrl:"URL de puissance",restPowerPath:"Chemin JSON puissance",restPowerMultiplier:"Multiplicateur de puissance",restEnergyUrl:"URL d'énergie",restEnergyPath:"Chemin JSON énergie",restEnergyMultiplier:"Multiplicateur d'énergie",restUrlRequired:"Au moins une URL (ON ou OFF) est requise pour les prises REST",restHeadersHint:'par ex. {"Authorization": "Bearer your-token"}',restBodyHint:'par ex. ON, {"state": "on"}',restStatusHint:"URL pour interroger l'état actuel",restPathHint:"par ex. state ou data.power.status",restPowerUrlHint:"URL séparée pour les données de puissance (utilise l'URL de statut si vide)",restEnergyUrlHint:"URL séparée pour les données d'énergie (utilise l'URL de statut si vide)",restEnergyHint:"Chaque valeur peut utiliser sa propre URL ou se rabattre sur l'URL de statut. Utilisez les multiplicateurs pour la conversion d'unités (ex : 0.001 pour convertir Wh en kWh).",testConnection:"Tester la connexion",connectionSuccess:"Connexion réussie",noSwitchesInSwitchbar:"Aucun commutateur dans la barre",enableSwitchbarHint:'Activez "Afficher dans la barre de commutateurs" dans Paramètres > 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:"Notifications par e-mail SMTP",telegram:"Notifications via un bot Telegram",discord:"Envoyer vers un canal Discord via webhook",ntfy:"Notifications push gratuites, auto-hébergeables",pushover:"Notifications push simples et fiables",callmebot:"Notifications WhatsApp gratuites via CallMeBot",webhook:"POST HTTP générique vers n'importe quelle URL",homeassistant:"Notifications persistantes dans le tableau de bord Home Assistant"},lastSuccess:"Dernier : {{date}}",error:"Erreur",printer:"Imprimante :",allPrinters:"Toutes les imprimantes",sendTestNotification:"Envoyer une notification de test",eventSettings:"Paramètres des événements",enabled:"Activé",sendFromProvider:"Envoyer des notifications depuis ce fournisseur",printEvents:"Événements d'impression",printerStatus:"État de l'imprimante",amsAlarms:"Alarmes AMS",amsHtAlarms:"Alarmes AMS-HT",printQueue:"File d'attente d'impression",start:"Début",plateCheck:"Vérification du plateau",complete:"Terminé",failed:"Échoué",stopped:"Arrêté",progress:"Progression",offline:"Hors ligne",lowFilament:"Filament bas",maintenance:"Maintenance",amsHumidity:"Humidité AMS",amsTemp:"Temp. AMS",amsHtHumidity:"Humidité AMS-HT",amsHtTemp:"Temp. AMS-HT",bedCooled:"Plateau refroidi",firstLayer:"Première couche",quiet:"Silencieux",digest:"Résumé {{time}}",printStarted:"Impression démarrée",plateNotEmpty:"Plateau non vide",plateNotEmptyDescription:"Objets détectés avant l'impression",printCompleted:"Impression terminée",bedCooledLabel:"Plateau refroidi",bedCooledDescription:"Plateau refroidi sous le seuil après l'impression",firstLayerCompleteLabel:"Première couche terminée",firstLayerCompleteDescription:"Notification avec photo après la première couche",missingSpoolAssignmentLabel:"Affectation de bobine manquante",missingSpoolAssignmentDescription:"Notifier quand une impression démarre et que des bacs requis n'ont pas de bobine assignée",printFailed:"Impression échouée",printStopped:"Impression arrêtée",progressMilestones:"Jalons de progression",progressMilestonesDescription:"Notifier à 25 %, 50 %, 75 %",printerOffline:"Imprimante hors ligne",printerError:"Erreur de l'imprimante",lowFilamentLabel:"Filament bas",maintenanceDue:"Maintenance requise",maintenanceDueDescription:"Notifier lorsqu'une maintenance est nécessaire",amsHumidityHigh:"Humidité AMS élevée",amsHumidityHighDescription:"L'humidité de l'AMS standard dépasse le seuil",amsTemperatureHigh:"Température AMS élevée",amsTemperatureHighDescription:"La température de l'AMS standard dépasse le seuil",amsHtHumidityHigh:"Humidité AMS-HT élevée",amsHtHumidityHighDescription:"L'humidité de l'AMS-HT dépasse le seuil",amsHtTemperatureHigh:"Température AMS-HT élevée",amsHtTemperatureHighDescription:"La température de l'AMS-HT dépasse le seuil",inventoryAlerts:"Alertes de stock",stockReorderAlert:"Alerte de réapprovisionnement",stockReorderAlertDescription:"Le SKU a atteint son point de réapprovisionnement",stockBreakAlert:"Alerte de rupture de stock",stockBreakAlertDescription:"Le stock sera épuisé avant l'arrivée du réapprovisionnement",jobAdded:"Tâche ajoutée",jobAddedDescription:"Tâche ajoutée à la file d'attente",jobAssigned:"Tâche assignée",jobAssignedDescription:"Tâche basée sur le modèle assignée à l'imprimante",jobStarted:"Tâche démarrée",jobStartedDescription:"La tâche de la file a commencé l'impression",jobWaiting:"Tâche en attente",jobWaitingDescription:"Tâche en attente de filament ou imprimante",jobSkipped:"Tâche ignorée",jobSkippedDescription:"Tâche ignorée (échec précédent)",jobFailed:"Tâche échouée",jobFailedDescription:"La tâche n'a pas pu démarrer",queueComplete:"File d'attente terminée",queueCompleteDescription:"Toutes les tâches de la file sont terminées",quietHours:"Heures silencieuses",noNotificationsDuring:"Aucune notification pendant ces heures",editProviderToChangeQuietHours:"Modifier le fournisseur pour changer les heures silencieuses",dailyDigest:"Résumé quotidien",batchNotifications:"Regrouper les notifications en un seul résumé quotidien",sendAt:"Envoyer à {{time}}",editProviderToChangeDigestTime:"Modifier le fournisseur pour changer l'heure du résumé",edit:"Modifier",deleteProvider:"Supprimer le fournisseur de notifications",deleteConfirm:"Êtes-vous sûr de vouloir supprimer « {{name}} » ? Cette action est irréversible.",delete:"Supprimer",addTitle:"Ajouter un fournisseur de notifications",editTitle:"Modifier le fournisseur de notifications",nameLabel:"Nom *",namePlaceholder:"Mes notifications",providerTypeLabel:"Type de fournisseur *",configuration:"Configuration",testConfiguration:"Tester la configuration",printerFilter:"Filtre d'imprimante",onlyFromPrinter:"Envoyer uniquement les notifications pour les événements de cette imprimante",quietHoursDnd:"Heures silencieuses (Ne pas déranger)",quietStart:"Début",quietEnd:"Fin",dailyDigestLabel:"Résumé quotidien",sendDigestAt:"Envoyer le résumé à",digestCollected:"Les événements seront collectés et envoyés en un seul résumé à cette heure",notificationEvents:"Événements de notification",progressPercent:"(25 %, 50 %, 75 %)",bedCooledAfterPrint:"(après la fin de l'impression)",eventPriority:{sectionTitle:"Priorité ntfy",helpNtfy:"Choisissez une priorité pour chaque événement activé. ntfy l'utilise pour faire remonter les alertes (son, visibilité, comportement push). Les niveaux non définis ici utilisent la valeur par défaut du serveur ntfy.",min:"Min.",low:"Basse",default:"Par défaut",high:"Haute",urgent:"Urgente"},cancel:"Annuler",save:"Enregistrer",add:"Ajouter",nameRequired:"Le nom est requis",fieldRequired:"{{field}} est requis",phoneNumber:"Numéro de téléphone",apiKey:"Clé API",serverUrl:"URL du serveur",topic:"Sujet",authToken:"Jeton d'authentification",userKey:"Clé utilisateur",appToken:"Jeton d'application",priority:"Priorité",botToken:"Jeton du bot",chatId:"ID du chat",smtpServer:"Serveur SMTP",smtpPort:"Port SMTP",security:"Sécurité",authentication:"Authentification",username:"Nom d'utilisateur",password:"Mot de passe",fromEmail:"E-mail expéditeur",toEmail:"E-mail destinataire",webhookUrl:"URL du webhook",payloadFormat:"Format du payload",authorization:"Autorisation",titleFieldName:"Nom du champ titre",messageFieldName:"Nom du champ message",editTemplate:"Modifier le modèle : {{name}}",titleLabel:"Titre",bodyLabel:"Corps",titlePlaceholder:"Titre de la notification...",bodyPlaceholder:"Corps de la notification...",availableVariables:"Variables disponibles",clickToInsert:"Cliquer pour insérer à la position du curseur dans le corps",livePreview:"Aperçu en direct",hide:"Masquer",show:"Afficher",loadingPreview:"Chargement de l'aperçu...",enterTemplateContent:"Saisir le contenu du modèle pour voir l'aperçu",titlePreview:"Titre :",bodyPreview:"Corps :",resetToDefault:"Réinitialiser par défaut",titleRequired:"Le titre est requis",bodyRequired:"Le corps est requis",notificationLog:"Journal des notifications",showFailedOnly:"Échecs uniquement",last24Hours:"Dernières 24 heures",last7Days:"7 derniers jours",last30Days:"30 derniers jours",last90Days:"90 derniers jours",justNow:"À l'instant",noFailedNotifications:"Aucune notification échouée",noNotificationsLogged:"Aucune notification enregistrée",unknownProvider:"Fournisseur inconnu",logTitle:"Titre",logMessage:"Message",logError:"Erreur",logProvider:"Fournisseur : {{type}}",logTime:"Heure : {{time}}",refresh:"Actualiser",clearOld:"Purger les anciens",statsSummary:"{{days}} derniers jours :",statsNotifications:"notifications",statsSent:"{{count}} envoyées",statsFailed:"{{count}} échouées",eventTypes:{print_start:"Impression démarrée",print_complete:"Impression terminée",print_failed:"Impression échouée",print_stopped:"Impression arrêtée",print_progress:"Progression",printer_offline:"Imprimante hors ligne",printer_error:"Erreur de l'imprimante",filament_low:"Filament bas",maintenance_due:"Maintenance requise",test:"Tester"},userEmail:{title:"Notifications",emailNotifications:"Notifications par e-mail",emailNotificationsDesc:"Recevez des notifications par e-mail pour vos propres travaux d'impression. Les e-mails sont envoyés via les paramètres SMTP configurés dans l'authentification avancée.",sendingTo:"Les notifications seront envoyées à",noEmailWarning:"Votre compte n'a pas d'adresse e-mail. Contactez un administrateur pour en ajouter une.",printJobNotifications:"Notifications de travaux d'impression",printJobNotificationsDesc:"Choisissez quels événements déclenchent des notifications par e-mail pour les travaux d'impression que vous soumettez.",printJobStarts:"Démarrage du travail d'impression",printJobStartsDesc:"Être notifié quand votre travail d'impression commence.",printJobFinishes:"Fin du travail d'impression",printJobFinishesDesc:"Être notifié quand votre travail d'impression se termine avec succès.",printErrors:"Erreurs d'impression",printErrorsDesc:"Être notifié quand votre travail d'impression échoue ou rencontre une erreur.",printJobStops:"Travail d'impression arrêté",printJobStopsDesc:"Être notifié quand votre travail d'impression est annulé ou arrêté.",saveSuccess:"Préférences de notification sauvegardées.",saveError:"Impossible de sauvegarder les préférences de notification."}},richTextEditor:{bold:"Gras",italic:"Italique",underline:"Souligné",bulletList:"Liste à puces",numberedList:"Liste numérotée",alignLeft:"Aligner à gauche",alignCenter:"Centrer",alignRight:"Aligner à droite",addLink:"Ajouter lien",removeLink:"Retirer lien"},externalLinks:{noLinksConfigured:"Aucun lien externe configuré",deleteLink:"Supprimer lien",removeCustomIcon:"Retirer icône personnalisée",openInNewTab:"Ouvrir dans un nouvel onglet",placeholders:{linkName:"Mon Lien"}},keyboardShortcuts:{title:"Raccourcis Clavier",navigation:"Navigation",archivesSection:"Archives",kProfilesSection:"Profils K",generalSection:"Général",shortcuts:{goToPrinters:"Aller aux Imprimantes",goToArchives:"Aller aux Archives",goToQueue:"Aller à la File",goToStats:"Aller aux Stats",goToProfiles:"Aller aux Profils Cloud",goToSettings:"Aller aux Paramètres",focusSearch:"Focus recherche",openUploadModal:"Ouvrir téléversement",clearSelection:"Tout déselectionner",contextMenu:"Menu contextuel (cartes)",refreshProfiles:"Rafraîchir profils",newProfile:"Nouveau profil",exitSelectionMode:"Quitter mode sélection",showHelp:"Afficher cette aide"},footer:"Échap ou clic extérieur pour fermer"},notificationLog:{title:"Journal de Notification",events:{printStarted:"Début impression",printComplete:"Fin impression",printFailed:"Échec impression",printStopped:"Arrêt impression",progress:"Progression",printerOffline:"Hors ligne",printerError:"Erreur",lowFilament:"Filament bas",maintenanceDue:"Maintenance",test:"Tester"},timeAgo:{justNow:"À l'instant",minutesAgo:"Il y a {{minutes}}m",hoursAgo:"Il y a {{hours}}h"}},restoreBackup:{title:"Restaurer Sauvegarde",restoring:"Restauration...",restoreComplete:"Restauration terminée",restoreFailed:"Échec restauration",importSettings:"Importer les réglages d'un fichier",pleaseWait:"Patientez pendant la restauration",clickToSelect:"Fichier .json ou .zip",howDuplicateHandling:"Gestion des doublons :",categories:{printers:"Imprimantes",smartPlugs:"Prises",notificationProviders:"Fournisseurs",filaments:"Filaments",archives:"Archives",pendingUploads:"Téléversements en attente",settingsTemplates:"Réglages & Modèles"},matchingInfo:{printers:"par numéro de série",smartPlugs:"par adresse IP",notificationProviders:"par nom",filaments:"par nom+type+marque",archives:"par empreinte numérique (hash)",pendingUploads:"par nom de fichier",settingsTemplates:"toujours écrasés"},replaceExisting:"Remplacer existant",keepExisting:"Garder existant",replaceDescription:"Écrase les doublons avec la sauvegarde",keepDescription:"Ne restaure que les éléments absents",caution:"Attention :",cautionText:"L'écrasement remplacera vos réglages. Les codes d'accès imprimantes sont exclus par sécurité.",itemsRestored:"Éléments restaurés",itemsSkipped:"Éléments ignorés",restored:"Restaurés",skipped:"Ignorés (déjà présents)",filesLabel:"Fichiers (3MF, vignettes, etc.)",newApiKeysGenerated:"Nouvelles clés API générées",newApiKeysWarning:"Copiées maintenant, elles ne seront plus visibles !",processingBackup:"Traitement du fichier...",noDataFound:"Aucune donnée trouvée dans le fichier.",failedToRestore:"Échec restaure. Vérifiez le format."},backupExport:{title:"Exporter Sauvegarde",selectData:"Données à inclure",selectAll:"Tout sélectionner",selectNone:"Ne rien sélectionner",categoryDescriptions:{settings:"Langue, thèmes, préférences",notifications:"ntfy, Pushover, Discord, etc.",templates:"Modèles de messages personnalisés",smartPlugs:"Configuration des prises Tasmota",externalLinks:"Liens externes de la barre latérale",printers:"Infos imprimantes (codes d'accès exclus par défaut)",plateDetection:"Images références des plateaux vides",filaments:"Types et coûts filaments",maintenance:"Plannings de maintenance personnalisés",archives:"Données impressions + fichiers (3MF, vignettes, etc.)",projects:"Projets, BOM, pièces jointes",pendingUploads:"En attente revue virtuelle",apiKeys:"Clés Webhook (nouvelles clés générées à l'import)"},requiresPrinters:"Nécessite sélection des imprimantes",zipFileWarning:"Fichier ZIP créé.",zipFileDescription:"Contient tous les médias. Peut être volumineux.",includeAccessCodes:"Inclure Codes d'accès",includeAccessCodesDescription:"Pour migrer vers une autre machine",includeAccessCodesWarning:"Codes en texte clair. Sécurisez ce fichier !",categoriesSelected:"{{selectedCount}} catégories choisies"},pendingUploads:{placeholders:{notes:"Notes sur l'impression..."},discardUpload:"Rejeter",archiveAllUploads:"Tout archiver",discardAllUploads:"Tout rejeter",archive:"Archiver",timeAgo:{justNow:"À l'instant",minutesAgo:"Il y a {{minutes}}m",hoursAgo:"Il y a {{hours}}h",daysAgo:"Il y a {{days}}j"}},apiBrowser:{placeholders:{requestBody:"Corps JSON...",searchEndpoints:"Chercher endpoints..."}},configureAmsSlot:{title:"Configurer le slot AMS",slotConfigured:"Slot configuré !",configuringSlot:"Configuration du slot :",slotLabel:"{{ams}} – Emplacement {{slot}}",searchPresets:"Chercher presets...",colorPlaceholder:"Nom couleur ou hex (ex: brown, FF8800)",clearCustomColor:"Effacer couleur perso",noCloudPresets:"Profils Cloud absents. Connectez-vous.",noPresetsAvailable:"Aucun preset disponible. Connectez-vous à Bambu Cloud ou importez des profils locaux.",noMatchingPresets:"Aucun profil trouvé.",custom:"Perso",builtin:"Inclus",settingsSentToPrinter:"Réglages envoyés",filamentProfile:"Profil Filament",kProfileLabel:"Profil K (Pressure Advance)",filteringFor:"Filtrage pour : {{material}}",noKProfile:"Pas de profil K (utiliser défaut 0.020)",noMatchingKProfiles:"Aucun profil K trouvé. K=0.020 par défaut sera utilisé.",selectFilamentFirst:"Sélectionnez d'abord un profil filament",kFromCalibration:"K={{value}} de la calibration imprimante",customColorLabel:"Couleur personnalisée (optionnel)",presetColors:"Couleurs {{name}} :",showLessColors:"Moins de couleurs",showMoreColors:"Plus de couleurs",clear:"Effacer",hexLabel:"Hex : #{{hex}}",resetting:"Réinitialisation...",resetSlot:"Réinitialiser le slot",cancel:"Annuler",configuring:"Configuration...",configureSlot:"Configurer le slot"},githubBackup:{title:"Sauvegarde Git",history:"Historique",downloadBackup:"Télécharger",restoreBackup:"Restaurer",noBackupsYet:"Aucune sauvegarde"},emailSettings:{placeholders:{fromName:"Bambuddy"}},tagManagement:{searchTags:"Chercher tags...",renameTag:"Renommer tag",deleteTag:"Supprimer tag"},notificationTemplates:{placeholders:{title:"Titre notification...",body:"Message notification..."}},batchTag:{placeholders:{newTag:"Nouveau tag..."}},photoGallery:{deletePhoto:"Supprimer photo"},filamentHoverCard:{copySpoolUuid:"Copier UUID bobine"},kProfilesView:{hasNote:"A une note",copyProfile:"Copier profil"},layout:{openMenu:"Ouvrir menu",noPermissionSystemInfo:"Pas d'autorisation système"},dashboard:{dragToReorder:"Glisser pour réorganiser",hideWidget:"Masquer widget"},notificationProviderCard:{deleteNotificationProvider:"Supprimer fournisseur"},fileManagerModal:{closeFileManager:"Fermer gestionnaire",sortFiles:"Trier fichiers",goToParentFolder:"Dossier parent",threeView:"Vue 3D"},embeddedCameraViewer:{refreshStream:"Actualiser flux",close:"Fermer",zoomOut:"Zoom -",resetZoom:"Réinitialiser le zoom",zoomIn:"Zoom +",dragToResize:"Glisser pour dimension"},timelapseViewer:{skipBack5s:"-5s",skipForward5s:"+5s"},notificationProviders:{descriptions:{email:"Notifications par email SMTP",telegram:"Via bot Telegram",discord:"Via webhook Discord",ntfy:"Push auto-hébergé (ntfy)",pushover:"Push fiable (Pushover)",callmebot:"WhatsApp gratuit via CallMeBot",webhook:"Requête HTTP POST personnalisée"}},logViewer:{searchPlaceholder:"Message ou nom...",noLogEntries:"Aucune entrée journal"},switchbarPopover:{noSwitchesInSwitchbar:"Aucun interrupteur"},projectPageModal:{placeholders:{title:"Titre",designer:"Designer",license:"Licence",description:"Description...",profileTitle:"Titre du profil",profileDescription:"Description du profil..."}},spoolmanSettings:{},time:{unknown:"-",waiting:"En attente",justNow:"À l'instant",now:"Maintenant",minsAgo:"il y a {{count}}m",inMins:"dans {{count}}m",hoursAgo:"il y a {{count}}h",inHours:"dans {{count}}h",daysAgo:"il y a {{count}}j",inDays:"dans {{count}}j"},spoolbuddy:{nav:{dashboard:"Tableau de bord",ams:"AMS",inventory:"Inventaire",writeTag:"Écrire",settings:"Paramètres"},status:{nfcReady:"NFC prêt",nfcOff:"NFC désactivé",offline:"Hors ligne",online:"En ligne",noPrinters:"Aucune imprimante",deviceOffline:"Appareil hors ligne",waitingConnection:"En attente de connexion...",systemReady:"Système prêt",status:"Statut"},dashboard:{readyToScan:"Prêt à scanner",idleMessage:"Placez une bobine sur la balance pour l'identifier",nfcHint:"Le tag NFC sera lu automatiquement",device:"Appareil",syncWeight:"Sync. poids",weightSynced:"Synchronisé !",unknownTag:"Tag inconnu",newTag:"Nouveau tag détecté",onScale:"sur la balance",linkSpool:"Lier à une bobine",linkTagTitle:"Lier le tag à une bobine",linkTag:"Lier le tag",selectSpool:"Sélectionnez une bobine à lier à ce tag :",noUntagged:"Aucune bobine sans tag trouvée",tagDetected:"Tag détecté",noTag:"Pas de tag",tagId:"Étiquette",grossWeight:"Poids brut",spoolSize:"Taille bobine",close:"Fermer",currentSpool:"Bobine actuelle",plateReady:"Plateau prêt : {{name}}",plateReadyLabel:"Plateaux à libérer",plateClearAction:"Libérer",plateClearedToast:"Plateau marqué comme libéré",plateClearFailed:"Impossible de marquer le plateau comme libéré"},modal:{spoolDetected:"Bobine détectée",assignToAms:"Assigner à l'AMS",syncWeight:"Synchroniser le poids",weightSynced:"Synchronisé !",syncing:"Synchronisation...",newTagDetected:"Nouveau tag détecté",addToInventory:"Ajouter à l'inventaire",assignToAmsTitle:"Assigner à l'AMS",selectSlot:"Sélectionner un emplacement",assign:"Assigner",assigning:"Attribution...",assignSuccess:"Assigné !",assignPendingInsert:"Assigné. Le slot sera configuré lors de l'insertion de la bobine.",assignError:"Échec de l'attribution de la bobine. Veuillez réessayer.",noPrinterSelected:"Sélectionner une imprimante...",noAmsDetected:"Aucun AMS détecté sur cette imprimante",slot:"Emplacement"},weight:{noReading:"Pas de lecture",stable:"Stable",measuring:"Mesure...",tare:"Tarer",calibrate:"Calibrer"},spool:{remaining:"Restant",material:"Matériau",brand:"Marque",color:"Couleur",coreWeight:"Noyau",labelWeight:"Étiquette",scaleWeight:"Balance",netWeight:"Réseau",lastUsed:"Dernière utilisation"},ams:{noData:"Aucun AMS détecté",connectAms:"Connectez un AMS pour voir les slots",noPrinter:"Aucune imprimante sélectionnée",selectPrinter:"Sélectionnez une imprimante dans la barre supérieure",printerDisconnected:"Imprimante déconnectée",humidity:"Humidité",level:"Niveau",active:"Actif",slot:"Emplacement",empty:"Vide"},inventory:{search:"Rechercher des bobines...",empty:"Aucune bobine dans l'inventaire",noResults:"Aucune bobine correspondante",spools:"bobines",addSpool:"Ajouter une bobine"},settings:{tabDevice:"Appareil",tabDisplay:"Affichage",tabScale:"Balance",tabUpdates:"Mises à jour",nfcReader:"Lecteur NFC",type:"Type",connection:"Connexion",notConnected:"N/D",deviceInfo:"Info appareil",hostname:"Hôte",uptime:"Temps de fonctionnement",brightness:"Luminosité",saved:"Enregistré",noBacklight:"Aucun rétroéclairage DSI détecté. Le contrôle de luminosité nécessite un écran DSI.",screenBlank:"Délai d'extinction",screenBlankDesc:"L'écran s'éteint après inactivité. Touchez pour réveiller.",displayNote:"La luminosité est appliquée comme filtre logiciel.",scaleCalibration:"Calibration de la balance",currentWeight:"Poids actuel",tareOffset:"Tare",calFactor:"Facteur",knownWeight:"Poids connu",calStep1:"Retirez tout de la balance et appuyez sur Mettre à zéro.",calStep2:"Placez le poids connu sur la balance.",setZero:"Mettre à zéro",calibrateNow:"Calibrer",calibrated:"Calibré",tareSet:"Commande de tare envoyée. En attente de l'appareil...",tareComplete:"Tare terminée !",tareTimedOut:"Délai de tare dépassé — le daemon SpoolBuddy fonctionne-t-il ?",tareFailed:"Échec de l'envoi de la commande de tare",zeroSet:"Point zéro défini. Placez le poids connu sur la balance.",calibrationDone:"Calibration terminée !",calibrationFailed:"Échec de la calibration",lastCalibrated:"Dernière calibration",stable:"Stable",settling:"Stabilisation...",firmware:"Micrologiciel",scale:"Balance",noDevice:"Aucun appareil SpoolBuddy trouvé",daemonVersion:"Version du daemon",currentVersion:"Actuelle",versionPending:"En attente du daemon...",checking:"Vérification...",checkUpdates:"Vérifier les mises à jour",updateAvailable:"Mise à jour disponible",updateInstructions:"Mise à jour via SSH : exécutez le script d'installation SpoolBuddy.",upToDate:"À jour",includeBeta:"Inclure les versions bêta",systemConfig:"Backend & authentification",backendUrl:"URL du backend Bambuddy",apiToken:"Jeton d'API",apiTokenPlaceholder:"Saisir un jeton d'API",saveConfig:"Enregistrer la configuration",systemQueued:"Configuration mise en file.",systemFieldsRequired:"L'URL du backend est obligatoire.",nfcDiagnostic:"Diagnostic NFC",scaleDiagnostic:"Diagnostic balance",readTagDiagnostic:"Diagnostic lecture de tag",testNfc:"Tester le lecteur",testScale:"Tester la précision",testReadTag:"Lire un tag"},writeTag:{tabExisting:"Bobine existante",tabNew:"Nouvelle bobine",tabReplace:"Remplacer le tag",searchPlaceholder:"Rechercher par matériau, couleur, marque...",noUntaggedSpools:"Aucune bobine sans tag",noTaggedSpools:"Aucune bobine avec tag",selectSpool:"Sélectionnez une bobine, puis placez un NTAG sur le lecteur",placeTag:"Placez un NTAG sur le lecteur",tagReady:"Tag détecté — prêt à écrire",writeTag:"Écrire le tag",replaceTag:"Remplacer le tag",writing:"Écriture du tag...",waiting:"En attente de SpoolBuddy...",writeSuccess:"Tag écrit avec succès !",writeFailed:"Échec de l'écriture",queueFailed:"Impossible de mettre en file la commande d'écriture",tryAgain:"Réessayer",cancel:"Annuler",replaceWarning:"L'ancien tag sera dissocié. Le nouveau tag le remplacera.",deviceOffline:"SpoolBuddy est hors ligne",material:"Matériau",colorName:"Nom de la couleur",color:"Couleur",brand:"Marque",weight:"Poids (g)",createSpool:"Créer la bobine",creating:"Création...",spoolCreated:"Bobine créée ! Prêt à écrire.",createFailed:"Impossible de créer la bobine",incompleteDataWarning:"Tag écrit avec des données Spoolman incomplètes"},quickMenu:{printerPower:"Alimentation imprimante",systemControls:"Système",restartDaemon:"Redémarrer le daemon",restartBrowser:"Redémarrer le navigateur",reboot:"Redémarrer",shutdown:"Éteindre",swipeToClose:"Glisser vers le bas pour fermer",confirmTitle:"Confirmer",confirmShutdown:"Êtes-vous sûr de vouloir éteindre le SpoolBuddy ? Vous aurez besoin d'un accès physique pour le rallumer.",confirmReboot:"Êtes-vous sûr de vouloir redémarrer le SpoolBuddy ?",confirmRestartDaemon:"Redémarrer le daemon SpoolBuddy ? Le NFC et la balance seront temporairement indisponibles.",confirmRestartBrowser:"Redémarrer le navigateur kiosque ? L'écran sera brièvement noir.",confirm:"Confirmer",confirmPlugOn:"Allumer {{name}} ?",confirmPlugOff:"Éteindre {{name}} ?",turnOn:"Allumer",turnOff:"Éteindre"}},diagnostic:{modalTitle:"Diagnostic de connexion — {{name}}",running:"Diagnostic en cours...",runningElapsed:"Diagnostic en cours... ({{elapsed}}s)",waitingForReportHint:"En attente que l'imprimante publie un rapport d'état — cela peut prendre jusqu'à {{max}} secondes.",runFailed:"Le diagnostic n'a pas pu s'exécuter : {{error}}",retry:"Relancer",runButton:"Lancer le diagnostic",sectionTitle:"Diagnostic de connexion",sectionDescription:"Vérifiez pourquoi une imprimante ne se connecte pas ou n'imprime pas — accessibilité des ports, mode développeur LAN, mode réseau Docker et identifiants.",noPrinters:"Aucune imprimante configurée.",overall:{ok:"Aucun problème détecté — la connexion de l'imprimante semble correcte.",warnings:"L'imprimante devrait fonctionner, mais certains points nécessitent votre attention.",problems:"Des problèmes expliquant pourquoi l'imprimante ne se connecte pas ou n'imprime pas ont été détectés."},check:{port_mqtt:{title:"Port de contrôle (MQTT 8883)",pass:"Accessible — l'imprimante accepte les connexions de contrôle.",fail:"Le port 8883 est inaccessible. L'imprimante est éteinte, possède une autre adresse IP, ou un pare-feu la bloque. Vérifiez l'IP de l'imprimante et qu'aucun élément ne bloque le port 8883."},port_ftps:{title:"Port de transfert de fichiers (FTPS 990)",pass:"Accessible — l'envoi de fichiers d'impression fonctionnera.",warn:"Le port 990 est inaccessible. La surveillance peut toujours fonctionner, mais l'envoi d'impressions vers l'imprimante échouera. Assurez-vous que le port 990 n'est pas bloqué."},external_storage:{title:"Stocker les fichiers envoyés sur stockage externe (étape 4 de l'installation)",pass:"L'imprimante signale que cette option est activée — les fichiers envoyés seront stockés sur la carte SD et les archives auront des miniatures et des métadonnées slicer.",fail:"L'imprimante signale que cette option est désactivée. Activez « Stocker les fichiers envoyés sur stockage externe » — sur les firmwares récents (P2S 01.02 / Bambu Studio 2.6+) l'interrupteur se trouve dans les Paramètres d'impression de l'imprimante ; sur les versions antérieures, il est dans l'onglet Périphérique de Bambu Studio / OrcaSlicer. Sans cette option, chaque impression archivée est dépourvue de miniature et de métadonnées slicer.",skip:"Non vérifié — une connexion MQTT active est requise. Sur les slicers plus anciens où ce paramètre n'existe que dans le slicer, l'imprimante ne le signale pas, donc cette vérification passe même si l'option est désactivée — vérifiez l'étape 4 de l'installation manuellement."},port_rtsps:{title:"Port caméra (RTSPS 322)",pass:"Accessible — le flux de la caméra fonctionnera.",warn:"Le port 322 est inaccessible. La vue caméra en direct ne fonctionnera pas. Cela n'affecte pas l'impression."},network_mode:{title:"Mode réseau Docker",pass:"Fonctionne en mode réseau host.",warn:`Bambuddy fonctionne en réseau Docker bridge. La découverte d'imprimantes et l'imprimante virtuelle nécessitent le mode réseau host — recréez le conteneur avec "network_mode: host".`,skip:"Ne fonctionne pas dans Docker — non applicable."},subnet:{title:"Sous-réseau",pass:"L'imprimante et Bambuddy sont sur le même sous-réseau.",warn:"L'imprimante ({{printer_ip}}) et Bambuddy ({{host_ip}}) sont sur des sous-réseaux différents. Ils peuvent ne pas se joindre, sauf si un routage entre les sous-réseaux est configuré.",skip:"Le sous-réseau n'a pas pu être déterminé — ignoré."},mqtt_auth:{title:"Identifiants de l'imprimante",pass:"L'imprimante a accepté la connexion.",fail:"L'imprimante est accessible mais a refusé la connexion. Le code d'accès ou le numéro de série est très probablement incorrect. Le code d'accès change chaque fois que le mode développeur est activé/désactivé — recopiez-le depuis l'écran de l'imprimante.",skip:"Non vérifié — l'imprimante n'a pas pu être jointe."},developer_mode:{title:"Mode développeur LAN",pass:"Le mode développeur est activé.",fail:"Le mode développeur est DÉSACTIVÉ sur l'imprimante. Activez-le dans les paramètres LAN de l'imprimante — et confirmez avec OK. Sans lui, les impressions ne démarreront pas.",skip:"Impossible à vérifier — nécessite une connexion active à l'imprimante."},printer_publishing:{title:"L'imprimante publie son état",pass:"L'imprimante publie des mises à jour d'état — l'AMS, les filaments et les profils K seront correctement reflétés dans le slicer.",fail:"Le broker MQTT a accepté la connexion mais l'imprimante n'a publié aucun rapport d'état. Il s'agit presque toujours d'un numéro de série erroné ou mal capitalisé — le topic device//api/v1/metricsでプリンターメトリクスを公開。",bearerTokenOptional:"Bearerトークン(オプション)",bearerTokenHint:"設定時、リクエストにAuthorization: Bearer が必要",metricsConnectionStatus:"接続状態",metricsPrinterState:"プリンター状態(idle/printing等)",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:"OK",twoFa:{totpTitle:"認証アプリ (TOTP)",totpDesc:"Google Authenticator、Aegis、Authyなどのアプリを使用します。",emailOtpTitle:"メールOTP",emailOtpDesc:"ログイン時に{{email}}にワンタイムコードを送信します。",emailOtpNoEmail:"この方法を有効にするには、アカウントにメールアドレスを追加してください。",addEmailFirst:"アカウントにメールアドレスがありません。管理者に追加を依頼してください。",setupTotp:"認証アプリを設定",setupAuthApp:"認証アプリを設定",setupInstructions:"認証アプリでQRコードをスキャンし、コードで確認してください。",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:"これらの外部IDプロバイダーがあなたのアカウントにリンクされています。",oidcUnlinked:"アカウントのリンクを解除しました。"},oidc:{title:"SSO / OIDCプロバイダー",desc:"シングルサインオン用のOpenID Connectプロバイダーを設定します。",addProvider:"プロバイダーを追加",newProvider:"新しいプロバイダー",empty:"OIDCプロバイダーがまだ設定されていません。",created:"プロバイダーが作成されました。",updated:"プロバイダーが更新されました。",deleted:"プロバイダーが削除されました。",refreshIcon:"アイコンを再取得",removeIcon:"アイコンを削除",iconRefreshed:"アイコンを更新しました。",iconRemoved:"アイコンを削除しました。",iconFetchFailed:"プロバイダーURLからアイコンを取得できませんでした。",deleteTitle:"プロバイダーを削除",deleteMessage:'"{{name}}"を削除しますか?リンクされたすべてのユーザーアカウントが切断されます。',form:{name:"表示名",issuerUrl:"発行者URL",clientId:"クライアントID",clientSecret:"クライアントシークレット",scopes:"スコープ",iconUrl:"アイコンURL (任意)",enabled:"有効",autoCreate:"ユーザーを自動作成",autoCreateDesc:"初回ログイン時にローカルアカウントを自動的に作成します。",autoLink:"既存アカウントを自動リンク",autoLinkDesc:"初回ログイン時にメールアドレスで既存のローカルアカウントにリンクします。",secretHint:"空白のままで現在のものを維持",secretPlaceholder:"新しいシークレット",emailClaim:"メールクレーム",emailClaimDesc:"メールIDとして使用するJWTクレーム。Azure Entra IDには'preferred_username'または'upn'を使用(email_verifiedを送信しない)。信頼できるクレーム名のみ使用してください。",emailClaimPlaceholder:"メール",emailClaimCustomClaimAutoLinkWarning:"カスタムクレームは、値がテナント管理されている場合(Azure Entra IDのupn / preferred_usernameなど)にのみ自動リンクに安全です。IdPがユーザーにこのクレームの自己宣言を許可している場合は、自動リンクを有効にしないでください。",requireEmailVerified:"メール確認を要求",requireEmailVerifiedDesc:"プロバイダーが確認済みとしてマークした場合にのみメールクレームを受け入れます。",requireEmailVerifiedWarning:"警告:確認なしでメールが受け入れられます。信頼できるプロバイダーのみで使用してください。",requireEmailVerifiedAutoLink:"この設定を変更するには、まず自動リンクを無効にしてください。",defaultGroup:"デフォルトグループ",defaultGroupDesc:"自動作成ユーザーに割り当てられるグループ。未設定の場合はViewersにフォールバックします。",defaultGroupViewersFallback:"Viewers(デフォルト)"}},encryption:{title:"MFA暗号化ステータス",enabledFromEnv:"保存時の暗号化が有効(MFA_ENCRYPTION_KEY環境変数のキー)",enabledFromFile:"保存時の暗号化が有効(データディレクトリから読み込んだキー)",enabledGenerated:"保存時の暗号化が自動生成キーで有効",notConfigured:"保存時の暗号化が設定されていません",notConfiguredDesc:"TOTPシークレットとOIDCのclient_secretsは平文で保存されています。MFA_ENCRYPTION_KEYを設定するか、書き込み可能なデータディレクトリでBambuddyを再起動して自動生成してください。",allEncrypted:"すべてのMFAシークレットは保存時に暗号化されています。",legacyRowsLabel:"レガシー平文行",encryptedRowsLabel:"暗号化された行",legacyRowsWarning:"{{count}}件のレガシー平文行を検出。OIDCプロバイダーを再保存するか、ユーザーの認証アプリを再登録して暗号化ストレージへ移行してください。",backupHint:"自動生成キーは DATA_DIR/.mfa_encryption_key に保存され、ローカルバックアップZIPに含まれます。バックアップを安全に保管するか、MFA_ENCRYPTION_KEYを明示的に設定してください。",decryptionBrokenTitle:"暗号化キーが見つかりません",decryptionBrokenError:"{{count}}件の暗号化レコードを復号できません。暗号化キーが見つかりません。以前のMFA_ENCRYPTION_KEYまたはDATA_DIR/.mfa_encryption_keyを復元してください。",migrationErrorWarning:"{{count}} 件のレガシー行を起動時に再暗号化できませんでした。サーバーログを確認し、Bambuddy を再起動して再試行してください。"}},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:"Bambu Lab 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:"ログイン中...",rememberMe:"ログイン状態を保持する",forgotPassword:"パスワードをお忘れですか?",loginSuccess:"ログインしました",loginFailed:"ログインに失敗しました",enterCredentials:"ユーザー名とパスワードを入力してください",enterEmail:"メールアドレスを入力してください",oidcLoginFailed:"OIDCログインに失敗しました",oidcErrors:{providerError:"IDプロバイダーがエラーを返しました",missingParameters:"OIDCコールバックに必須パラメーターがありません",invalidState:"OIDCの状態が無効か、すでに使用されています",stateExpired:"OIDCログインセッションが期限切れです。もう一度お試しください",providerNotFound:"OIDCプロバイダーが見つかりません",discoveryFailed:"OIDCディスカバリードキュメントの取得に失敗しました",invalidDiscovery:"OIDCディスカバリードキュメントが無効です",networkError:"OIDCトークン交換中にネットワークエラーが発生しました",badResponse:"OIDCトークン交換中に予期しない応答を受信しました",noIdToken:"OIDCプロバイダーがIDトークンを返しませんでした",validationFailed:"OIDCトークンの検証に失敗しました",nonceMismatch:"OIDCノンスが一致しません。リプレイ攻撃の可能性があります",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文字のバックアップコードをいずれか1つ入力してください。各コードは1回のみ使用可能です。",sendCodeButton:"メールでコードを送信する",sendingCode:"送信中...",resendCode:"コードを再送する",codeLabel:"確認コード",backupCodeLabel:"バックアップコード",codePlaceholder:"000000",backupCodePlaceholder:"XXXXXXXX",verifyButton:"確認する",verifyingButton:"確認中...",backToLogin:"← ログイン画面に戻る",orContinueWith:"または以下でログイン",signInWith:"{{provider}}でログイン",enterCode:"確認コードを入力してください",sendCodeFailed:"確認コードの送信に失敗しました",invalidCode:"無効なコードです。もう一度お試しください。"},resetPassword:{title:"新しいパスワードを設定",subtitle:"下のフィールドに新しいパスワードを入力して確認してください。",newPassword:"新しいパスワード",newPasswordPlaceholder:"8文字以上",confirmPassword:"パスワードの確認",confirmPasswordPlaceholder:"新しいパスワードを再入力",saving:"保存中…",submit:"新しいパスワードを設定",backToLogin:"ログインに戻る",passwordsDoNotMatch:"パスワードが一致しません",passwordTooShort:"パスワードは8文字以上で入力してください",resetFailed:"パスワードのリセットに失敗しました。リンクが期限切れの可能性があります。"}},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:"チャンバーライト切替",unavailable:"カメラは利用できません",diagnose:{button:"診断",modalTitle:"カメラ診断",running:"診断を実行中...",runFailed:"診断を実行できませんでした: {{error}}",retry:"再実行",stage:{tcp_reachable:"ネットワーク到達性",first_frame:"フレーム取得",live_stream_active:"ライブストリーム動作中"},summary:{all_ok:"カメラは正常に動作しています。診断のすべての段階が成功しました。",live_stream_active_healthy:"カメラは現在新しいフレームを配信しています — テストは不要です。",printer_unreachable:"プリンターに到達できません。IPアドレス、ネットワーク接続、プリンターの電源が入っていることを確認してください。",camera_port_closed:"プリンターには到達できますが、カメラポートが閉じています。プリンター設定でLANのみモードと開発者モードが有効になっていることを確認してください。",no_frame:"カメラに接続できましたがフレームを受信できませんでした。再試行するか、プリンター設定でカメラが有効になっていることを確認してください。",unknown_failure:"カメラ診断が不明な理由で失敗しました。詳細はサポートログを確認してください。"},meta:{protocol:"プロトコル",port:"ポート",profile:"プロファイル"}}},groups:{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文字以上必要です",ldapProvisioned:"LDAPユーザー「{{username}}」をプロビジョニング"},modal:{createUser:"ユーザーを作成",editUser:"ユーザーを編集",cancel:"キャンセル",creating:"作成中...",saving:"保存中...",saveChanges:"変更を保存",advancedAuthSubtitle:"高度な認証を使用",tabsAriaLabel:"ユーザーソース",localTab:"ローカル",ldapTab:"LDAP",ldapSearchLabel:"ディレクトリを検索",ldapSearchPlaceholder:"ユーザー名、名前、またはメールアドレスを入力...",ldapMinChars:"検索するには2文字以上入力してください",ldapTypeToSearch:"LDAPディレクトリを検索するには入力を開始",ldapSearching:"ディレクトリを検索中...",ldapNoResults:"ディレクトリに一致するユーザーがいません",ldapSearchError:"ディレクトリ検索に失敗。LDAPサーバーの状態を確認してください。",ldapAlreadyProvisioned:"プロビジョニング済み",ldapSelectedLabel:"選択中",ldapProvision:"ユーザーをプロビジョニング",ldapProvisioning:"プロビジョニング中...",ldapErrorProvision:"プロビジョニングに失敗。LDAPサーバーの状態を確認して再試行してください。"},form:{username:"ユーザー名",usernamePlaceholder:"ユーザー名を入力",email:"メール",emailPlaceholder:"user@example.com",password:"パスワード",passwordPlaceholder:"パスワードを入力",confirmPassword:"パスワードの確認",confirmPasswordPlaceholder:"パスワードを確認",newPasswordPlaceholder:"新しいパスワードを入力",confirmNewPasswordPlaceholder:"新しいパスワードを確認",leaveBlankToKeep:"(現在のパスワードを維持する場合は空白)",groups:"グループ",optional:"オプション",autoGeneratedPassword:"安全なパスワードが自動的に生成され、ユーザーにメールで送信されます。",passwordManagedByAdvancedAuth:"パスワードは高度な認証によって管理されています。「パスワードのリセット」を使用して、メールで新しいパスワードをユーザーに送信してください。",resetPassword:"パスワードのリセット",resettingPassword:"パスワードをリセット中..."},deleteModal:{title:"ユーザーを削除",message:"このユーザーを削除してもよろしいですか?この操作は元に戻せません。",confirm:"ユーザーを削除"}},streamOverlay:{title:"ストリームオーバーレイ",invalidPrinterId:"無効なプリンターID",cameraStream:"カメラストリーム",progress:"進捗",eta:"残り時間",printerIdle:"プリンター待機中",printerOffline:"プリンターオフライン",status:{printing:"印刷中",paused:"一時停止",finished:"完了",failed:"失敗",idle:"待機中",unknown:"不明"}},profiles:{title:"フィラメントプロファイル",subtitle:"スライサープリセットと圧力キャリブレーションの管理",tabs:{bambuCloud:"Bambu Cloud",orcaCloud:"Orca Cloud",local:"ローカルプロファイル",kprofiles:"Kプロファイル"},orcaCloud:{connectedAs:"接続中",logout:"切断",noLogoutPermission:"切断する権限がありません",noConnectPermission:"Orca Cloudに接続する権限がありません",retry:"再試行",back:"別のサインイン方法を使用",connect:{title:"Orca Cloudに接続",description:"Orca Cloudアカウントにサインインして、スライサープロファイルをBambuddyに同期します。"},providers:{google:"Googleでサインイン",apple:"Appleでサインイン",github:"GitHubでサインイン",email:"メールとパスワードでサインイン"},password:{title:"メールとパスワードでサインイン",email:"メールアドレス",emailPlaceholder:"you@example.com",password:"パスワード",submit:"サインイン"},paste:{title:"サインインを完了",step1:"Orca Cloudのサインインページが新しいタブで開きました。Orcaアカウントでサインインしてください。",step2:"ブラウザは「localhost」のURLにリダイレクトされ、読み込みに失敗します。それは想定通りです — そのURLが必要です。",step3:"ブラウザのアドレスバーからURL全体をコピーして、下に貼り付けてください。",signInUrl:"サインインタブが開かなかった場合は、このURLをクリックしてください:",label:"コールバックURLをここに貼り付け",placeholder:"http://localhost:41172/callback?code=...&state=...",submit:"接続を完了"},profiles:{title:"Orca Cloudプロファイル ({{count}})",refresh:"更新",empty:"Orca Cloudアカウントにまだプロファイルがありません。"},toast:{connected:"{{email}}としてOrca Cloudに接続しました",disconnected:"Orca Cloudから切断しました"},errors:{startFailed:"Orca Cloudのサインインを開始できませんでした。",finishFailed:"Orca Cloudのサインインを完了できませんでした。",passwordFailed:"そのメールとパスワードでサインインできませんでした。",passwordEmpty:"メールアドレスとパスワードの両方を入力してください。",emptyPaste:"ブラウザからコールバックURLを貼り付けてください。",noCode:"このURLはOrca Cloudのコールバックではないようです (codeパラメータがありません)。アドレスバーから完全なURLをコピーしてください。"}},localProfiles:{title:"ローカルプロファイル",subtitle:"OrcaSlicerからスライサープリセットをインポート・管理",import:"プロファイルをインポート",importDesc:".bbscfg、.bbsflmt、.orca_filament、.zip、.jsonファイルをここにドロップ",importing:"インポート中...",search:"ローカルプリセットを検索...",noPresets:"ローカルプリセットがまだありません",noSearchResults:"検索に一致するプリセットがありません",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:"Bambuddy ログイン",subtitle:"アカウントにサインイン",email:"メールアドレス",password:"パスワード",region:"リージョン",regionGlobal:"グローバル",regionChina:"中国",verificationCode:"認証コード",totpCode:"認証アプリコード",checkEmail:"メール ({{email}}) に届いた6桁のコードを入力してください",enterTotpHint:"認証アプリの6桁のコードを入力してください",accessToken:"アクセストークン",accessTokenHint:"Bambu Cloud のアクセストークンを貼り付けてください。中国リージョンのアカウントはこの方法のみ利用可能です(電話番号認証のためメールログイン不可)。トークンの取得方法は MakerWorld の Cookie から(Wiki を参照)。",back:"戻る",loginButton:"ログイン",verifyButton:"認証",setTokenButton:"トークンを設定",useToken:"アクセストークンを使用",useEmail:"メールでログイン",toast:{loggedIn:"ログインしました",codeSent:"メールに認証コードを送信しました",enterTotp:"認証アプリのコードを入力してください",tokenSet:"トークンを設定しました"}},presets:{myPreset:"マイプリセット(編集可能)",duplicate:"複製",editable:"編集可能",failedToLoadDetails:"プリセットの詳細を読み込めませんでした",deleteConfirm:"このプロファイルを削除しますか?",deleteWarning:"「{{name}}」をBambu Cloudから完全に削除します。元に戻せません。",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:"同じタイプのプリセットを2つクリックして比較",selectFirst:"1. 最初を選択",selectSecond:"2. 2番目を選択",compareNow:"比較を実行",lastSynced:"最終同期:",showingCount:"{{total}} 件中 {{showing}} 件のプリセットを表示",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環境の詳細",bundleGenerating:"バンドルを生成中...",bundleStepConnection:"プリンターの接続確認を実行中",bundleStepVirtualPrinters:"仮想プリンターのセットアップ確認を実行中",bundleStepLogScan:"最近のログから既知の問題をスキャン中",bundleStepBuild:"サポートバンドル ZIP を作成中"},fileManager:{title:"ファイル管理",subtitle:"印刷ファイルの整理と管理",uploadFiles:"ファイルをアップロード",newFolder:"新しいフォルダ",folderName:"フォルダ名",folderNamePlaceholder:"例: 機能パーツ",renameFile:"ファイル名を変更",renameFolder:"フォルダ名を変更",invalidFilenameChar:'印刷ファイル名に "{{char}}" は使用できません。プリンターのSDカードは次の文字を拒否します: < > : " / \\ | ? *',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:"{{total}}中{{free}}の空き容量のみ。しきい値は設定で{{threshold}}GBに設定されています。",files:"ファイル",folders:"フォルダ",size:"サイズ",free:"空き:",allFiles:"すべてのファイル",allExternal:"外部",externalIsEmpty:"外部ファイルはありません",externalEmptyDescription:"リンクされた外部フォルダ内のファイルがここに表示されます。",wrap:"折り返し",enableTextWrapping:"テキスト折り返しを有効化",disableTextWrapping:"テキスト折り返しを無効化",collapse:"折りたたむ",collapseFoldersByDefault:"フォルダをデフォルトで折りたたむ",expandFoldersByDefault:"フォルダをデフォルトで展開する",dragToResizeTooltip:"ドラッグしてリサイズ、ダブルクリックでリセット",searchFiles:"ファイルを検索...",allTypes:"すべての種類",prints:"印刷回数",ascending:"昇順",descending:"降順",resultsCount:"{{total}}件中{{showing}}件",selectAll:"すべて選択",deselectAll:"すべて選択解除",selected:"{{count}}件選択中",adding:"追加中...",loadingFiles:"ファイルを読み込み中...",folderIsEmpty:"フォルダーは空です",noFilesYet:"ファイルはまだありません",folderEmptyDescription:"ファイルをアップロードするか、このフォルダーにファイルを移動して開始しましょう。",noFilesDescription:"印刷関連ファイルの整理を始めるにはファイルをアップロードしてください。",noMatchingFiles:"一致するファイルがありません",noMatchingFilesDescription:"現在の検索またはフィルター条件に一致するファイルがありません。",clearFilters:"フィルターをクリア",printedCount:"{{count}}回印刷済み",uploadedBy:"アップロード者",deleteFolder:"フォルダを削除",deleteFile:"ファイルを削除",deleteFilesCount:"{{count}}件のファイルを削除",deleteFolderConfirm:"このフォルダを削除しますか?中のファイルもすべて削除されます。",deleteFileConfirm:"このファイルを削除しますか?",deleteFilesConfirm:"選択した{{count}}件のファイルを削除しますか?この操作は元に戻せません。",deleting:"削除中...",noPermissionRenameFolder:"フォルダー名を変更する権限がありません",noPermissionLinkFolder:"フォルダーをリンクする権限がありません",noPermissionDeleteFolder:"フォルダーを削除する権限がありません",noPermissionPrint:"印刷する権限がありません",noPermissionSlice:"ファイルをスライスする権限がありません",noPermissionAddToQueue:"キューに追加する権限がありません",noPermissionDownload:"ファイルをダウンロードする権限がありません",noPermissionRenameFile:"このファイル名を変更する権限がありません",noPermissionGenerateThumbnail:"サムネイルを生成する権限がありません",noPermissionDeleteFile:"このファイルを削除する権限がありません",noPermissionCreateFolder:"フォルダーを作成する権限がありません",noPermissionUpload:"ファイルをアップロードする権限がありません",noPermissionMoveFiles:"ファイルを移動する権限がありません",noPermissionDeleteFiles:"ファイルを削除する権限がありません",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:"印刷プロジェクトを管理",newProject:"新規プロジェクト",editProject:"プロジェクトを編集",deleteProject:"プロジェクトを削除",projectName:"プロジェクト名",description:"説明",noProjects:"プロジェクトはまだありません",noProjectsFiltered:"{{status}}のプロジェクトはありません",noProjectsFilteredHelp:"{{status}}のプロジェクトがありません。ステータスが変更されるとここに表示されます。",createFirst:"最初のプロジェクトを作成して、関連する印刷の整理、進捗管理、ビルドの管理を始めましょう。",createFirstButton:"最初のプロジェクトを作成",create:"作成",files:"ファイル",prints:"印刷",plates:"プレート",parts:"パーツ",lastModified:"最終更新日",deleteConfirm:"このプロジェクトを削除しますか?アーカイブとキューアイテムはリンク解除されますが、削除されません。",addFiles:"ファイルを追加",removeFile:"ファイルを削除",viewDetails:"詳細を表示",namePlaceholder:"プロジェクト名",descriptionPlaceholder:"プロジェクトの説明(任意)",urlLabel:"URL",urlPlaceholder:"https://makerworld.com/...",urlInvalid:"URLはhttp://またはhttps://で始まる必要があります",openExternalUrl:"プロジェクトのURLを開く",coverImageLabel:"カバー画像",coverImageAlt:"プロジェクトのカバー画像",coverImageUpload:"アップロード",coverImageReplace:"置き換える",coverImageRemove:"削除",color:"色",targetPlates:"目標プレート数",targetPlatesPlaceholder:"例: 10",targetPlatesHelp:"印刷ジョブの数",targetParts:"目標パーツ数",targetPartsPlaceholder:"例: 50",targetPartsHelp:"必要なオブジェクトの総数",tagsLabel:"タグ(カンマ区切り)",tagsPlaceholder:"カンマ区切りのタグ",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:"BOM含む",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:"パーツ名",partName:"パーツ名",qty:"数量",price:"価格 ({{currency}})",sourcingUrlPlaceholder:"URL(任意)",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:"ファイルにエクスポート"},slice:{title:"モデルをスライス",action:"スライス",actionAll:"{{count}} プレートすべてをスライス",actionAllTitle:"すべてのプレートを 1 つのマルチプレート出力としてスライスします(アーカイブは 1 件)。フィラメントの選択はプロジェクトで定義されたすべてのスロットを対象とします。",allPlatesToggle:"{{count}} プレートすべてをスライス",slicing:"スライス中…",printer:"プリンタープロファイル",process:"プロセスプロファイル",filament:"フィラメントプロファイル",filamentSlot:"フィラメント {{index}}({{type}})",selectPreset:"— プリセットを選択 —",loadingPresets:"プリセットを読み込み中…",analyzingPlateFilaments:"プレートのフィラメントを分析中…",analyzingPlateFilamentsHint:"このプレートが使用するAMSスロットを検出するためにプレビュースライスを実行中。キャッシュ後は再オープンが即座になります。",previewToast:"{{name}}を分析中 – {{elapsed}}",previewWithProgress:"{{name}}を分析中 – {{stage}} ({{percent}}%) – {{elapsed}}",notUsedByPlate:"— このプレートでは使用しない",noPresetsForSlot:"プリセットなし",otherPrinters:"他のプリンター",presetsLoadFailed:"プリセットの読み込みに失敗。先に設定 → プロファイルからインポートしてください。",refreshPresets:"再読み込み",refreshPresetsTitle:"プリセットを再取得 — クラウドとバンドルの最新リストを取得します(Bambu Studio または Bambu Handy でプリセットを削除した後にお使いください)",allPresetsRequired:"すべてのプリセットを選択する必要があります",bundle:"スライサーバンドル",bundleNone:"— なし(プリセットを個別に選択)—",bundleAllRequired:"バンドルのプロセスとすべてのフィラメントスロットを選択してください",enqueuing:"スライスジョブを送信中…",queued:"待機中…",failed:"スライスに失敗。サイドカーのログを確認してください。",startedToast:"バックグラウンドで{{name}}をスライス中…",queuedToast:"待機中: {{name}} – {{elapsed}}",runningToast:"{{name}}をスライス中 – {{elapsed}}",runningWithProgress:"{{name}} – {{stage}} ({{percent}}%) – {{elapsed}}",runningWithProgressMultiPlate:"プレート {{plateIndex}} / {{plateCount}} • {{name}} – {{stage}} ({{percent}}%) – {{elapsed}}",completedToast:"{{name}}をスライス済み",failedTitle:"スライスに失敗しました",failedToast:"{{name}}のスライスに失敗: {{detail}}",tier:{local:"インポート済み",cloud:"Bambu Cloud",orcaCloud:"Orca Cloud",standard:"標準"},cloud:{notAuthenticated:"Bambu Cloudにサインイン(設定 → プロファイル → Bambu Cloud)してクラウドプリセットを表示。",expired:"Bambu Cloudセッションの有効期限切れ – クラウドプリセットを更新するには再ログインしてください。",unreachable:"Bambu Cloudに接続できません。ローカルと標準のプリセットは引き続き使用できます。"},orcaCloud:{notAuthenticated:"Orcaプリセットを表示するには、Orca Cloudにサインインしてください(プロファイル → Orca Cloud)。",expired:"Orca Cloudセッションが期限切れです — Orcaプリセットを更新するには再度サインインしてください。",unreachable:"Orca Cloudは現在到達できません。他のプリセットは引き続き動作します。"},bedType:{label:"ビルドプレート",auto:"自動(プロセスプリセットを使用)",coolPlate:"クールプレート",coolPlateSuperTack:"Cool Plate SuperTack",engineering:"Engineering Plate",highTemp:"High Temp Plate",texturedPEI:"Textured PEI Plate",smoothPEI:"Smooth PEI Plate"}},spoolman:{title:"Spoolman連携",enabled:"Spoolman有効",url:"Spoolman URL",connected:"接続中",disconnected:"未接続",testConnection:"接続テスト",sync:"同期",syncing:"同期中...",lastSync:"最終同期",linkToSpoolman:"Spoolmanに連携",openInSpoolman:"Spoolmanで開く",unlinkSpool:"スプールのリンクを解除",unlinkConfirmTitle:"スプールの割り当てを解除しますか?",unlinkConfirmMessage:"このスロットからスプールが削除されます。スプール自体のデータは変更されません。",selectSpool:"スプールを選択",noUnlinkedSpools:"割り当てられていないスプールがありません",linkSuccess:"スプールが正常に割り当てられました",linkFailed:"スプールの割り当てに失敗しました",unlinkSuccess:"スプールの割り当てが正常に解除されました",unlinkFailed:"スプールの割り当て解除に失敗しました",linkedSpool:"割り当て済みスプール",spoolId:"スプールID",fillSourceLabel:"(Spoolman)",weight:"重量",remaining:"残り",disableWeightSync:"AMS推定重量同期を無効化",disableWeightSyncDesc:"AMS推定値から残量を更新しません。AMSの割合ベースの推定よりもSpoolmanの使用量追跡を優先する場合に使用してください。新しいスプールは引き続きAMS推定値を初期重量として使用します。",reportPartialUsage:"失敗した印刷の部分使用量を報告",reportPartialUsageDesc:"印刷が失敗またはキャンセルされた場合、レイヤー進捗に基づいてその時点までの推定フィラメント使用量を報告します。"},inventory:{title:"スプール在庫管理",subtitle:"スプールを管理",spoolmanMixedContentTitle:"Spoolman を HTTPS で読み込めません — ブラウザが混在コンテンツをブロックしています",spoolmanMixedContentBody:"Bambuddy はリバースプロキシ経由で HTTPS 配信されていますが、Spoolman の URL は HTTP のままです。ブラウザはセキュリティ上の理由で混在コンテンツをブロックするため、埋め込みの Spoolman UI を表示できません。Spoolman も HTTPS でアクセスできる必要があります。",spoolmanMixedContentFixReverseProxy:"Spoolman を Bambuddy と同じリバースプロキシ(Traefik / Nginx / Caddy)の後ろに HTTPS で配置し、設定で Spoolman URL を新しい HTTPS アドレスに更新してください。",spoolmanMixedContentFixOpenNewTab:"回避策として Spoolman を新しいタブで HTTP として開くことができます — 混在コンテンツのルールは埋め込みフレームのみに適用され、独立したタブは問題なく動作します。",spoolmanOpenInNewTab:"Spoolman を新しいタブで開く",labels:{title:"スプールラベルを印刷",selectedCount:"{{count}}件選択中",pickSpools:"ラベルを印刷するスプールを選択:",searchPlaceholder:"名前、ブランド、#IDで検索",filterByMaterial:"素材:",allMaterials:"すべて",selectVisible:"表示中をすべて選択 ({{count}})",deselectVisible:"表示中を選択解除",clearAll:"すべてクリア",noSpoolsToShow:"表示するスプールはありません。フィルターを調整して再試行してください。",noMatches:"現在の検索またはフィルターに一致するスプールはありません。",printOne:"このスプールのラベルを印刷",printLabels:"ラベルを印刷…",bulkTitle:"現在表示中の{{count}}件からラベルを印刷するスプールを選択",noSpoolsTitle:"ラベル付けするスプールなし",error:"ラベルを生成できませんでした: {{msg}}",sortBy:{label:"並べ替え:",id:"ID順",color:"色順"},templates:{amsHolderSmall:{label:"AMS ホルダー — 小 (74 × 33 mm)",hint:"1ページにつき1枚;MakerWorld モデル 752566 (AMS フィラメントラベルホルダー) の印刷可能なラベルに対応します。"},amsHolderLarge:{label:"AMS ホルダー — 大 (75 × 55 mm)",hint:"1ページにつき1枚;AMS フィラメントラベルホルダーのカード紙挿入バージョンに対応します。色見本、ブランド、素材、ID、QR コードを表示できる広さです。"},box40x30:{label:"ボックスラベル (40 × 30 mm)",hint:"1ページに1枚。DK/Brother の一般的なロールサイズで、フィラメント袋や保管箱のラベルに適しています。"},box:{label:"Box label (62 × 29 mm)",hint:"1ページに1ラベル、Brother PT/QLおよびDymoの小さなラベル用サイズ。"},averyL7160:{label:"Avery L7160 — A4 sheet (38.1 × 63.5 mm × 21)",hint:"EUシート規格、A4ページに21枚のラベル。"},avery5160:{label:"Avery 5160 — US Letter sheet (25.4 × 66.7 mm × 30)",hint:"米国シート規格、Letterページに30枚のラベル。"}}},csv:{importButton:"CSVインポート",exportButton:"CSVエクスポート",modalTitle:"CSVからスプールをインポート",selectFile:"CSVファイルを選択するか、ここにドラッグ",dragHint:"ヘッダー: material(必須)、brand、subtype、color_name、rgba、…",parsing:"ファイルを読み込み中…",previewError:"CSVファイルを読み込めませんでした",validCount:"有効{{count}}件",errorCount:"エラー{{count}}件",skippedCount:"スキップ{{count}}件",colRow:"行",colStatus:"ステータス",colColor:"色",colorResolved:"カタログから色を補完",colorCrossMaterial:"別の素材から色を取得しました — カタログに完全一致なし",duplicateExisting:"この素材・ブランド・色のスプールは既に存在します — それでも新しいスプールとしてインポートされます",spoolmanHint:"Spoolmanモードでは、Spoolman内蔵のCSVインポート/エクスポートを使用してください。",importValidRows:"有効な{{count}}行をインポート",noValidRows:"有効な行がありません",importing:"インポート中…",importSuccess:"{{count}}個のスプールをインポートしました",importError:"インポートに失敗しました",exportError:"エクスポートに失敗しました"},addSpool:"スプールを追加",editSpool:"スプールを編集",copySpool:"スプールをコピー",material:"素材",selectMaterial:"素材を選択...",subtype:"サブタイプ",brand:"ブランド",searchBrand:"ブランドを検索...",useCustomBrand:"「{{brand}}」を使用",useCustomMaterial:"カスタム素材を使用: {{material}}",colorName:"色名",colorNamePlaceholder:"ジェイドホワイト、ファイアレッド...",color:"色",hexColor:"HEXカラー",pickColor:"カスタムカラーを選択",labelWeight:"表示重量",coreWeight:"空スプール重量",searchSpoolWeight:"スプール重量を検索...",weightUsed:"使用量",currentWeight:"残量",measuredWeight:"計測重量",spoolName:"スプール",costPerKg:"kgあたりのコスト",storageLocation:"保管場所",storageLocationPlaceholder:"例:棚A、引き出し1",openInInventory:"インベントリで開く",measuredWeightError:"計測重量は{{min}}gから{{max}}gの間で入力してください。",slicerFilament:"スライサーフィラメント",slicerFilamentName:"スライサープリセット名",slicerPreset:"スライサープリセット",searchPresets:"フィラメントプリセットを検索...",selectedPreset:"選択済み",noPresetsFound:"プリセットが見つかりません",tempOverrides:"温度オーバーライド",note:"メモ",notePlaceholder:"このスプールに関する追加メモ...",category:"カテゴリ",categoryPlaceholder:"例:本番、試作、クライアントA",categoryNone:"カテゴリなし",storageLocationNone:"保管場所未設定",lowStockThresholdOverride:"在庫低下のしきい値(このスプール)",lowStockThresholdOverrideHelp:"空欄の場合、グローバル設定({{global}}%)を使用します。",clearRfid:"RFIDタグをクリア",rfidCleared:"RFIDタグをクリアしました",archive:"アーカイブ",restore:"復元",noSpools:"スプールがありません。最初のスプールを追加してください。",noAvailableSpools:"利用可能なスプールがありません。インベントリにスプールを追加するか、別のスロットからスプールの割り当てを解除してください。",kProfiles:"Kプロファイル",addKProfile:"Kプロファイルを追加",assignSpool:"スプールを割り当て",unassignSpool:"割り当て解除",assignSuccess:"スプールを割り当て、AMSスロットを設定しました",assignPendingInsert:"割り当てました。スプールを挿入したときにスロットが設定されます。",assignFailed:"スプールの割り当てに失敗しました",selectSpool:"このスロットに割り当てるスプールを選択",assigned:"割り当て済み",assigning:"割り当て中...",searchSpools:"スプールを検索...",showAllSpools:"すべてのスプールを表示",spoolmanSpools:"Spoolman スプール",allMaterials:"すべての素材",filterByBrand:"ブランドで絞り込み...",showArchived:"アーカイブ済みを表示",quickAdd:"クイック追加(在庫)",quantity:"数量",stock:"在庫",configured:"設定済み",spoolsCreated:"{{count}}本のスプールを作成しました",spoolsPartiallyCreated:"{{total}}本中{{created}}本のスプールを作成しました(一部失敗)",spoolCreated:"スプールを作成しました",spoolUpdated:"スプールを更新しました",spoolDeleted:"スプールを削除しました",deepLinkSpoolNotFound:"スプールが見つかりません",deepLinkFetchFailed:"スプールを読み込めませんでした — もう一度お試しください",spoolArchived:"スプールをアーカイブしました",spoolRestored:"スプールを復元しました",kProfileSaveFailed:"Kプロファイル設定を保存できませんでした",syncWeightSpoolNotFound:"スプールが見つかりません — 削除された可能性があります",syncWeightSpoolmanUnreachable:"Spoolmanに接続できません — 後でもう一度お試しください",syncWeightFailed:"重量の同期に失敗しました",spoolmanUnreachable:"Spoolmanに接続できません — 後でもう一度お試しください",deleteSpoolNotFound:"スプールが見つかりません — すでに削除された可能性があります",deleteFailed:"スプールを削除できませんでした",archiveSpoolNotFound:"スプールが見つかりません — すでに削除された可能性があります",archiveFailed:"スプールをアーカイブできませんでした",restoreSpoolNotFound:"スプールが見つかりません — すでに削除された可能性があります",restoreFailed:"スプールを復元できませんでした",saveFailed:"変更を保存できませんでした",tagClearFailed:"タグを削除できませんでした",deleteConfirm:"このスプールを削除しますか?この操作は元に戻せません。",archiveConfirm:"このスプールをアーカイブしますか?",advancedSettings:"詳細設定",filamentInfoTab:"フィラメント情報",paProfileTab:"PAプロファイル",filamentInfo:"フィラメント",additional:"追加情報",loadingPresets:"クラウドプリセットを読み込み中...",cloudConnected:"クラウド接続済み",cloudNotConnected:"クラウド未接続(デフォルト使用)",recentColors:"最近",searchColors:"色を検索...",searchResults:"検索結果",allColors:"すべての色",commonColors:"一般的な色",showLess:"少なく表示",showAll:"すべて表示",noColorsFound:"一致する色がありません",noResults:"結果なし",extraColorsLabel:"追加の色",extraColorsPlaceholder:"EC984C,#6CD4BC,A66EB9,D87694",extraColorsHint:"2〜8個の16進数ストップをカンマで区切って貼り付けます。グラデーションとして表示されます。",extraColorsInvalid:"無効な16進数を無視: {{tokens}}",colorEffectLabel:"エフェクト",colorEffect:{none:"なし",sparkle:"スパークル",wood:"ウッド",marble:"マーブル",glow:"グロー",matte:"マット",silk:"シルク",galaxy:"ギャラクシー",rainbow:"レインボー",metal:"メタル",translucent:"半透明",gradient:"グラデーション",dualColor:"デュアルカラー",triColor:"トリカラー",multicolor:"マルチカラー"},selectMaterialFirst:"フィラメント情報タブで素材を選択してください。",noPrintersConfigured:"プリンターが設定されていません。プリンターを追加してください。",matchingFilter:"フィルター",anyBrand:"すべてのブランド",anyVariant:"すべてのバリアント",autoSelect:"自動選択",matches:"件一致",match:"件一致",noMatches:"一致なし",connected:"接続済み",offline:"オフライン",printerOffline:"プリンターがオフラインです。接続してキャリブレーションプロファイルを表示してください。",noKProfilesMatch:"選択したフィラメントに一致するKプロファイルがありません。",leftNozzle:"左ノズル",rightNozzle:"右ノズル",profilesSelected:"キャリブレーションプロファイル選択済み",totalInventory:"在庫合計",totalConsumed:"総消費量",byMaterial:"素材別",inPrinter:"プリンター内",lowStock:"残量少",sinceTracking:"追跡開始以降",resetConsumedCounter:"カウンタをリセット",resetConsumedCounterTooltip:"このスプールの消費量カウンタを0にする。残量は変更されません。",resetConsumedCounterConfirm:"このスプールの消費量カウンタを0にリセットしますか?以降の印刷は再びゼロからカウントされます。スプール自体、残量計算、設定は変更されません。",resetAllConsumedCounters:"すべてのカウンタをリセット",resetAllConsumedCountersTooltip:"すべてのスプールの消費量カウンタを0にする。残量は変更されません。",resetAllConsumedCountersConfirm:"{{count}}件すべてのスプール(アーカイブ済みを含む)の消費量カウンタを0にリセットしますか?「累計消費量」の値がクリアされ、以降の印刷はゼロからカウントされます。スプール自体と残量は変更されません。",consumedCounterReset:"カウンタをリセットしました",allConsumedCountersReset:"{{count}}件のスプールのカウンタをリセットしました",resetConsumedCounterFailed:"カウンタのリセットに失敗しました",loadedInAms:"AMS/Extに装填中",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の間でなければなりません",assignMismatchTitle:"材料の不一致",assignMismatchMessage:"選択したスプールの材料「{{spoolMaterial}}」は、{{location}} のトレイ材料「{{trayMaterial}}」と一致しません。割り当てますか?",assignMismatchConfirm:"強制的に割り当て",assignPartialMismatchMessage:"スプールの材料「{{spoolMaterial}}」は「{{trayMaterial}}」に似ていますが、{{location}} と完全には一致しません。続行しますか?",assignProfileMismatchMessage:"スプールのプロファイル「{{spoolProfile}}」は {{location}} のトレイプロファイル「{{trayProfile}}」と一致しません。続行しますか?",assignReconfigureNote:"AMSスロットはスプールのプロファイルで再構成されます。",spoolmanFilamentCatalog:"Spoolmanフィラメントカタログ",pickFromSpoolmanCatalog:"Spoolmanカタログから選択…",spoolmanFilamentSelected:"Spoolmanカタログからフィラメントを選択しました",spoolmanFilamentUnlinked:"フィラメントカタログのリンクを解除しました",noSpoolmanFilaments:"Spoolmanカタログにフィラメントが見つかりません",spoolmanFilamentColorSwatch:"フィラメントの色",spoolWeightManagedBySpoolman:"空スプールの重量はSpoolmanでフィラメントタイプごとに管理されています",spoolmanCatalogLoadFailed:"Spoolmanのフィラメントカタログを読み込めませんでした"},timelapse:{title:"タイムラプス",create:"タイムラプスを作成",download:"ダウンロード",delete:"削除",preview:"プレビュー",frameRate:"フレームレート",quality:"品質",processing:"バックアップファイルを処理中...",noTimelapses:"利用可能なタイムラプスがありません"},ams:{title:"AMS",slot:"スロット",empty:"<空>",emptySlot:"空のスロット",slotEmpty:"空",slotUnconfigured:"?",emptySlotReset:"スプール未割当",unknown:"不明",humidity:"湿度",temperature:"温度",filamentType:"フィラメントタイプ",filamentColor:"色",remaining:"残り",history:"AMS履歴",noHistory:"メンテナンス履歴がありません",configureSlot:"フィラメントプロファイルとK値でスロットを設定",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:"L",rightNozzle:"R",leftNozzleTooltip:"左ノズル",rightNozzleTooltip:"右ノズル",filamentOverride:"フィラメントオーバーライド",filamentOverrideHint:"モデルベースの割り当てに使用するフィラメントをオプションで上書きします。スケジューラは元の3MF値ではなく、選択したフィラメントに基づいてマッチングします。",originalFilament:"オリジナル",overrideWith:"変更先",resetToOriginal:"オリジナルに戻す",insufficientFilamentTitle:"フィラメントが不足しています",insufficientFilamentMessage:"割り当てられたスプールの一部は、この印刷に必要な量より残量が少ないです:",insufficientFilamentLine:"{{printer}} - {{slot}}: 必要 {{required}}g、残り {{remaining}}g",printAnyway:"それでも印刷",forceColorMatch:"カラーマッチを強制",staggerPrinterStarts:"プリンター開始を段階的に",staggerGroupSize:"グループサイズ",staggerInterval:"間隔(分)",staggerPreview:"{{printers}}台のプリンター → {{size}}台ずつ{{groups}}グループ、{{interval}}分ごとに開始",staggerLastGroup:"最終グループ: {{count}}",staggerTotal:"合計: {{minutes}}分",staggerToPrinters:"{{count}}台のプリンターに段階的に送信",gcodeInjection:"自動印刷G-codeを挿入"},backup:{includesEncryptionKey:"ローカルバックアップにはMFA暗号化キーファイル(DATA_DIR/.mfa_encryption_key)が含まれ、バックアップZIPは自己完結型です。ZIPを機密扱いしてください — ファイルを持つ人は誰でも内部のOIDCクライアントシークレットとTOTPシークレットを復号できます。",title:"バックアップと復元",createBackup:"バックアップを作成",restoreBackup:"バックアップの復元",restoreDescription:"バックアップファイルからすべてのデータを置き換える",downloadBackup:"バックアップをダウンロード",uploadBackup:"バックアップをアップロード",lastBackup:"最終バックアップ",autoBackup:"自動バックアップ",backupNow:"今すぐバックアップ",restoreWarning:"警告: バックアップの復元は現在のすべてのデータを上書きします。",includeArchives:"アーカイブを含む",includeSettings:"設定を含む",includeProfiles:"プロファイルを含む",backupSuccess:"バックアップを作成しました",restoreSuccess:"バックアップを復元しました",backupFailed:"バックアップに失敗しました",restoreFailed:"復元に失敗しました",restoreNote:"復元中、仮想プリンターは停止されます",githubBackup:"GitHubバックアップ",enabled:"有効",cloudLoginRequired:"Bambu Cloudログインが必要です。GitHubバックアップを有効にするには、プロファイル → クラウドプロファイルからサインインしてください。",cloudLoginRequiredShort:"Cloudログインが必要",githubDescription:"プロファイルをプライベートGitHubリポジトリに自動的に同期し、バックアップとバージョン履歴を保持します。",repoIsPrivate:"リポジトリはプライベートです — バックアップしても安全です。",repoIsPublicWarning:"リポジトリが公開(PUBLIC)です。Bambuddyのバックアップには MQTT 認証情報、Home Assistant トークン、Prometheus トークン、Bambu Cloud のメールアドレス、K-プロファイル経由のプリンタアクセスコードが含まれます。プロバイダー側でリポジトリをプライベートに変更するまで保存はブロックされます。",repoVisibilityUnknown:"リポジトリの公開設定を確認できませんでした。Bambuddy はプライベートと確認できないリポジトリへのバックアップを拒否します。保存はブロックされます。",repositoryUrl:"リポジトリURL",repoUrlPlaceholderGitHub:"https://github.com/username/repo-name",repoUrlPlaceholderGitea:"https://gitea.example.com/username/repo-name",repoUrlPlaceholderForgejo:"https://forgejo.example.com/username/repo-name",repoUrlPlaceholderGitLab:"https://gitlab.com/username/repo-name",allowInsecureHttp:"安全でないHTTPを許可",allowInsecureHttpHint:"TLSなしのプライベートネットワーク上のセルフホストインスタンスに対して有効化",personalAccessToken:"個人アクセストークン",tokenSaved:"(保存済み)",enterNewToken:"新しいトークンを入力して更新",tokenHint:"Contents読み書き権限を持つきめ細かいトークン",branch:"ブランチ",provider:"Gitプロバイダー",providerGitHub:"GitHub",providerGitLab:"GitLab",providerGitea:"Gitea",providerForgejo:"Forgejo",manualOnly:"手動のみ",hourly:"毎時",daily:"毎日",weekly:"毎週",includeInBackup:"バックアップに含める",kProfiles:"Kプロファイル",kProfilesDescription:"接続されたプリンターからの圧力キャリブレーション",noPrintersConnected:"プリンターが接続されていません",printersConnected:"{{connected}}/{{total}} 接続済み",cloudProfiles:"クラウドプロファイル",cloudProfilesDescription:"Bambu Cloudからのフィラメント、プリンター、プロセスプリセット",appSettings:"アプリ設定",appSettingsDescription:"Bambuddy設定(データベース全体)",spoolInventory:"スプール在庫",spoolInventoryDescription:"フィラメントスプール、使用履歴、コスト追跡",printArchives:"印刷アーカイブ",printArchivesDescription:"印刷履歴メタデータ(gcode/3MFファイルなし)",lastBackupAt:"最終バックアップ:",noBackupsYet:"バックアップはまだありません",next:"次回:",startingBackup:"バックアップを開始しています...",test:"テスト",enableBackup:"バックアップを有効化",testConnection:"接続テスト",enterRepoUrl:"リポジトリURLを入力してください",enterRepoAndToken:"リポジトリURLとアクセストークンを入力してください",repoRequired:"リポジトリURLは必須です",tokenRequired:"アクセストークンは必須です",githubBackupEnabled:"GitHubバックアップが有効になりました",tokenUpdated:"トークンが更新されました",settingsSaved:"設定が保存されました",failedToSave:"保存に失敗しました: {{message}}",backupCompleteFiles:"バックアップ完了 - {{count}}ファイルが更新されました",backupSkippedNoChanges:"バックアップをスキップ - 変更なし",backupFailed2:"バックアップに失敗しました: {{message}}",clearedLogs:"{{count}}件のログを削除しました",failedToClearLogs:"ログの削除に失敗しました: {{message}}",history:"履歴",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:"サイズ",localTimeHint:"現地時刻 ({{tz}})",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://...",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:"K-プロファイルを追加",export:"エクスポート",import:"インポート",select:"選択",selectAll:"すべて選択",delete:"削除",searchPlaceholder:"名前またはフィラメントで検索...",allExtruders:"すべてのエクストルーダー",leftOnly:"左のみ",rightOnly:"右のみ",allFlow:"すべてのフロー",hfOnly:"HFのみ",sOnly:"Sのみ",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でまずプロファイルを作成してください。",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:"エクストルーダーを1つ以上選択してください",profileDeleted:"Kプロファイルを削除しました",profilesDeleted:"{{count}}件のプロファイルを削除しました",exportedProfiles:"{{count}}件のプロファイルをエクスポートしました",importedProfiles:"{{total}} 件中 {{count}} 件のプロファイルをインポートしました",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)",inheritedFromTarget:"ターゲットプリンターから継承",derivedFromTargetHint:"ターゲットプリンターのアクセスコードを使用します。ブリッジはスライサーの認証情報を実機プリンターに転送するため、コードが一致している必要があります。変更するにはプリンターの設定でアクセスコードを編集してください。",reveal:"アクセスコードを表示",hide:"アクセスコードを隠す"},targetPrinter:{title:"ターゲットプリンター",configured:"プロキシターゲット設定済み",notConfigured:"ターゲットプリンター未選択 - プロキシモードに必要です",placeholder:"プリンターを選択...",hint:"スライサートラフィックの転送先プリンターを選択。プリンターはLANモードである必要があります。",noPrinters:"プリンターが設定されていません。プロキシモードを使用するにはまずプリンターを追加してください。"},remoteInterface:{title:"ネットワークインターフェース上書き",configured:"インターフェース上書き有効",optional:"オプション — 自動検出IPが間違っている場合に使用(複数NIC、Docker、VPNなど)",placeholder:"自動検出(デフォルト)...",hint:"SSDPで広告され、TLS証明書に使用されるIPアドレスを上書きします。Bambuddyに複数のネットワークインターフェースがある場合に便利です。"},mode:{title:"モード",archive:"アーカイブ",archiveDesc:"ファイルを即座にアーカイブ",review:"レビュー",reviewDesc:"アーカイブ前にレビュー",queue:"キュー",queueDesc:"アーカイブしてキューに追加",proxy:"プロキシ",proxyDesc:"実際のプリンターに転送"},autoDispatch:{title:"自動ディスパッチ",description:"キューに追加されたときに自動的に印刷を開始します。オフの場合、手動ディスパッチを待ちます。"},queueForceColorMatch:{title:"色の一致を強制",description:"正確なフィラメントタイプと色がロードされていないプリンターへの送信を拒否します。デフォルトはオフ — これがないと、キューはモデルのみのマッチングを使用し、間違った色がロードされたプリンターを選ぶ可能性があります。"},tailscaleDisabled:{title:"Tailscale統合",description:"このVPがTailscale経由で公開されていることをマークするには有効にしてください。スライサーに貼り付けるIPがわかるよう、ホストのTailscaleアドレスを表示します。CAインポート手順は変更されません — このトグルは証明書に影響しません。"},setupRequired:{title:"セットアップが必要です",description:"仮想プリンター機能を使用するには追加のシステム設定が必要です。ポートフォワーディング、ファイアウォールルール、プラットフォーム固有の設定が含まれます。",readGuide:"有効にする前にセットアップガイドをお読みください"},howItWorks:{title:"仕組み",step1:"同じLAN上では、仮想プリンターはスライサー(Bambu Studio / OrcaSlicer)に自動的に表示されます。他のネットワークからは、IPアドレスとアクセスコードで手動で追加してください。",step2:"アーカイブ、レビュー、キューモードでは、スライサーの「送信」ボタンを使用して3MFファイルをBambuddyにアップロードします。スライサーは「印刷成功」と表示しますが、ファイルは保存され、印刷はされません。",step3:"プロキシモードでは、仮想プリンターはすべてのトラフィックを実際のプリンターに転送します。直接接続されているかのように印刷がすぐに開始されます。"},status:{title:"ステータス詳細",printerName:"プリンター名",model:"モデル",serialNumber:"シリアル番号",mode:"モード",pendingFiles:"保留中のファイル",targetPrinter:"ターゲットプリンター",ftpPort:"FTPポート",mqttPort:"MQTTポート",ftpConnections:"FTP接続数",mqttConnections:"MQTT接続数"},toast:{updated:"仮想プリンター設定を更新しました",failedToUpdate:"設定の更新に失敗しました",copyFailed:"コピーに失敗しました — テキストを手動で選択してください",accessCodeRequired:"先にアクセスコードを設定してください",targetPrinterRequired:"先にターゲットプリンターを選択してください",bindIpRequired:"先にバインドIPを設定してください",accessCodeEmpty:"アクセスコードは空にできません",accessCodeLength:"アクセスコードは8文字である必要があります",targetCodeChangedRebind:"アクセスコードが新しいターゲットプリンターに同期されました。新しいコードを反映するには、スライサーでこのデバイスを再登録してください。",created:"仮想プリンターを作成しました",failedToCreate:"仮想プリンターの作成に失敗しました",deleted:"仮想プリンターを削除しました",failedToDelete:"仮想プリンターの削除に失敗しました"},list:{title:"仮想プリンター",add:"追加",addFirst:"仮想プリンターを追加",empty:"仮想プリンターが設定されていません。追加して始めましょう。"},bindIp:{title:"バインドインターフェース",placeholder:"インターフェースを選択...",hint:"この仮想プリンターがバインドするネットワークインターフェース。プリンターごとに一意である必要があります。"},proxy:{accessCodeHint:"プロキシモードでは、スライサーにターゲットプリンターのアクセスコードを使用してください。接続は実際のプリンターに透過的に転送されます。"},addDialog:{title:"仮想プリンターを追加",name:"名前",hint:"アクセスコード、ターゲットプリンター、その他の設定は作成後に設定できます。",create:"作成"},deleteConfirm:{title:"仮想プリンターを削除",message:"「{{name}}」を削除してもよろしいですか?このプリンターのすべてのサービスが停止されます。"},archiveNameSource:{title:"アーカイブ名のソース",description:"仮想プリンター経由でファイルが到着したときに、新しいアーカイブをどのように命名するかを選択します。「メタデータ」は3MFに埋め込まれたスライサータイトル(デフォルト)を使用します。「ファイル名」はBambu StudioがFTPで送信したファイル名を使用します。注: Bambu Studioは、3MFにタイトルフィールドが存在する場合、「プリンターに送信」ダイアログで入力した名前をその値で上書きするため、両方のモードで同じ文字列になることが多くあります。",metadata:"メタデータ",filename:"ファイル名"},caCert:{title:"スライサー証明書",description:"仮想プリンターは Bambuddy CA が署名した TLS 証明書を使用します。この CA 証明書をスライサーの信頼ストアに一度インポートすると接続が受け入れられます — コマンドラインからコピーする必要はありません。",copy:"コピー",copied:"コピーしました",download:"ダウンロード",fingerprint:"SHA-256"}},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:"左ノズルレールの潤滑"},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:"ワンショットではなく印刷間で有効のまま維持",autoOffAfterDrying:"乾燥完了後に自動オフ",autoOffAfterDryingDescription:"AMSの乾燥が完了したらオフにする",delayAfterDryingMinutes:"乾燥後の遅延(分)",turnOffDelayMode:"オフ遅延モード",time:"時間",temp:"温度",delayMinutes:"遅延(分)",tempThreshold:"温度しきい値(°C)",tempThresholdDescription:"ノズルがこの温度以下に冷却されるとオフになります",edit:"編集",deleteConfirm:'"{{name}}"を削除してもよろしいですか?この操作は取り消せません。',turnOnConfirm:'"{{name}}"をオンにしてもよろしいですか?',turnOffConfirm:'"{{name}}"をオフにしてもよろしいですか?接続されたデバイスの電源が切れます。',failedToTurn:'"{{name}}"を{{action}}できませんでした',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プラグにはエンティティIDが必要です",mqttTopicRequired:"電力、エネルギー、または状態監視用に少なくとも1つの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:"ONリクエスト本文",restOffBody:"OFFリクエスト本文",restMethod:"HTTPメソッド",restHeaders:"Custom Headers (JSON)",restStatusUrl:"ステータスURL",restStatusPath:"状態JSONパス",restStatusOnValue:"ON値",restPowerUrl:"電力URL",restPowerPath:"電力JSONパス",restPowerMultiplier:"電力乗数",restEnergyUrl:"エネルギーURL",restEnergyPath:"電力量JSONパス",restEnergyMultiplier:"エネルギー乗数",restUrlRequired:"RESTプラグには少なくとも1つの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にフォールバックできます。乗数で単位変換が可能です(例:WhからkWhへの変換は0.001)。",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:"任意のURLへの汎用HTTP POST",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:"第1層完了",quiet:"静音",digest:"ダイジェスト {{time}}",printStarted:"印刷開始",plateNotEmpty:"プレートが空でない",plateNotEmptyDescription:"印刷前にオブジェクトが検出されました",printCompleted:"印刷完了",bedCooledLabel:"ベッド冷却済み",bedCooledDescription:"印刷後にベッドがしきい値以下に冷却",firstLayerCompleteLabel:"第1層完了",firstLayerCompleteDescription:"第1層完了時にスナップショット付きで通知",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の温度がしきい値を超過",inventoryAlerts:"在庫アラート",stockReorderAlert:"発注アラート",stockReorderAlertDescription:"SKUが発注点に達しました",stockBreakAlert:"在庫切れアラート",stockBreakAlertDescription:"入荷前に在庫が枯渇する見込みです",jobAdded:"ジョブ追加",jobAddedDescription:"キューにジョブが追加されました",jobAssigned:"ジョブ割り当て",jobAssignedDescription:"モデルベースのジョブがプリンターに割り当てられました",jobStarted:"ジョブ開始",jobStartedDescription:"キュージョブの印刷が開始されました",jobWaiting:"ジョブ待機中",jobWaitingDescription:"フィラメントまたはプリンター待ちのジョブ",jobSkipped:"ジョブスキップ",jobSkippedDescription:"ジョブがスキップされました(前のジョブが失敗)",jobFailed:"ジョブ失敗",jobFailedDescription:"ジョブの開始に失敗しました",queueComplete:"キュー完了",queueCompleteDescription:"すべてのキュージョブが完了しました",quietHours:"静音時間",noNotificationsDuring:"この時間帯は通知を送信しません",editProviderToChangeQuietHours:"プロバイダーを編集して静音時間を変更",dailyDigest:"デイリーダイジェスト",batchNotifications:"通知をまとめて1日のサマリーとして送信",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:"(印刷完了後)",eventPriority:{sectionTitle:"ntfy 優先度",helpNtfy:"有効な各イベントに優先度を選択してください。ntfy はこれを使って通知の挙動(音、表示、プッシュ動作)を切り替えます。ここで設定していないレベルは ntfy サーバーのデフォルトを使用します。",min:"最小",low:"低",default:"デフォルト",high:"高",urgent:"緊急"},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:"プロジェクト、BOMアイテム、添付ファイル",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:"色名またはHex(例: 茶色、FF8800)",clearCustomColor:"カスタム色をクリア",noCloudPresets:"クラウドプリセットがありません。Bambu Cloudにログインして同期してください。",noPresetsAvailable:"プリセットがありません。Bambu Cloudにログインするか、ローカルプロファイルをインポートしてください。",noMatchingPresets:"一致するプリセットが見つかりません。",custom:"カスタム",builtin:"内蔵",settingsSentToPrinter:"設定をプリンターに送信しました",filamentProfile:"フィラメントプロファイル",kProfileLabel:"Kプロファイル(Pressure Advance)",filteringFor:"フィルター中: {{material}}",noKProfile:"Kプロファイルなし(デフォルト0.020を使用)",noMatchingKProfiles:"一致するKプロファイルが見つかりません。デフォルトK=0.020が使用されます。",selectFilamentFirst:"まずフィラメントプロファイルを選択してください",kFromCalibration:"K={{value}}(プリンターキャリブレーションから)",customColorLabel:"カスタム色(オプション)",presetColors:"{{name}}の色:",showLessColors:"色を減らす",showMoreColors:"色をもっと表示",clear:"クリア",hexLabel:"16進: #{{hex}}",resetting:"リセット中...",resetSlot:"スロットをリセット",cancel:"キャンセル",configuring:"設定中...",configureSlot:"スロットを設定"},githubBackup:{title:"Gitバックアップ",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:"任意のURLへのジェネリックHTTP POST"}},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:"現在のスプール",plateReady:"プレート準備完了: {{name}}",plateReadyLabel:"片付け待ちプレート",plateClearAction:"片付け",plateClearedToast:"プレートを片付け済みにしました",plateClearFailed:"プレートを片付け済みにできませんでした"},modal:{spoolDetected:"スプール検出",assignToAms:"AMSに割り当て",syncWeight:"重量同期",weightSynced:"同期完了!",syncing:"同期中...",newTagDetected:"新しいタグを検出",addToInventory:"インベントリに追加",assignToAmsTitle:"AMSに割り当て",selectSlot:"スロットを選択",assign:"割り当て",assigning:"割り当て中...",assignSuccess:"割り当て完了!",assignPendingInsert:"割り当てました。スプールを挿入したときにスロットが設定されます。",assignError:"スプールの割り当てに失敗しました。再試行してください。",noPrinterSelected:"プリンターを選択...",noAmsDetected:"このプリンターにAMSが検出されません",slot:"スロット"},weight:{noReading:"読み取りなし",stable:"安定",measuring:"計測中...",tare:"風袋引き",calibrate:"キャリブレーション"},spool:{remaining:"残量",material:"素材",brand:"ブランド",color:"色",coreWeight:"コア",labelWeight:"ラベル",scaleWeight:"計量",netWeight:"正味",lastUsed:"最終使用"},ams:{noData:"AMSが検出されません",connectAms:"AMSを接続してスロットを表示",noPrinter:"プリンター未選択",selectPrinter:"上部バーからプリンターを選択",printerDisconnected:"プリンター切断",humidity:"湿度",level:"レベル",active:"アクティブ",slot:"スロット",empty:"空"},inventory:{search:"スプールを検索...",empty:"インベントリにスプールがありません",noResults:"一致するスプールがありません",spools:"スプール",addSpool:"スプール追加"},settings:{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:"風袋コマンドを送信しました。デバイスを待っています...",tareComplete:"風袋が完了しました!",tareTimedOut:"風袋がタイムアウトしました — SpoolBuddy デーモンは起動していますか?",tareFailed:"風袋コマンドの送信に失敗しました",zeroSet:"ゼロ点を設定しました。既知の重量を計量台に置いてください。",calibrationDone:"キャリブレーション完了!",calibrationFailed:"キャリブレーションに失敗しました",lastCalibrated:"最終キャリブレーション",stable:"安定",settling:"安定化中...",firmware:"ファームウェア",scale:"計量",noDevice:"SpoolBuddyデバイスが見つかりません",daemonVersion:"デーモンバージョン",currentVersion:"現在",versionPending:"デーモンを待っています...",checking:"確認中...",checkUpdates:"アップデートを確認",updateAvailable:"アップデートあり",updateInstructions:"SSH経由で更新:SpoolBuddyインストールスクリプトを実行してください。",upToDate:"最新です",includeBeta:"ベータ版を含む",systemConfig:"バックエンドと認証",backendUrl:"BambuddyバックエンドURL",apiToken:"APIトークン",apiTokenPlaceholder:"APIトークンを入力",saveConfig:"設定を保存",systemQueued:"設定をキューに追加しました。",systemFieldsRequired:"バックエンドURLは必須です。",nfcDiagnostic:"NFC診断",scaleDiagnostic:"スケール診断",readTagDiagnostic:"タグ読み取り診断",testNfc:"リーダーをテスト",testScale:"精度をテスト",testReadTag:"タグを読み取り"},writeTag:{tabExisting:"既存のスプール",tabNew:"新規スプール",tabReplace:"タグ交換",searchPlaceholder:"素材、色、ブランドで検索...",noUntaggedSpools:"タグなしのスプールがありません",noTaggedSpools:"タグ付きのスプールがありません",selectSpool:"スプールを選択し、NTAGをリーダーに置いてください",placeTag:"NTAGをリーダーに置いてください",tagReady:"タグ検出 — 書込み準備完了",writeTag:"タグ書込み",replaceTag:"タグ交換",writing:"タグ書込み中...",waiting:"SpoolBuddyを待機中...",writeSuccess:"タグの書込みが完了しました!",writeFailed:"書込み失敗",queueFailed:"書込みコマンドのキューに失敗しました",tryAgain:"再試行",cancel:"キャンセル",replaceWarning:"古いタグのリンクが解除され、新しいタグに置き換わります。",deviceOffline:"SpoolBuddyはオフラインです",material:"素材",colorName:"色名",color:"色",brand:"ブランド",weight:"重量 (g)",createSpool:"スプール作成",creating:"作成中...",spoolCreated:"スプール作成完了!書込み準備ができました。",createFailed:"スプールの作成に失敗しました",incompleteDataWarning:"不完全なSpoolmanデータでタグを書き込みました"},quickMenu:{printerPower:"プリンター電源",systemControls:"システム",restartDaemon:"デーモン再起動",restartBrowser:"ブラウザ再起動",reboot:"再起動",shutdown:"シャットダウン",swipeToClose:"下にスワイプして閉じる",confirmTitle:"確認",confirmShutdown:"SpoolBuddyをシャットダウンしますか?再起動するには物理的なアクセスが必要です。",confirmReboot:"SpoolBuddyを再起動しますか?",confirmRestartDaemon:"SpoolBuddyデーモンを再起動しますか?NFCとスケールが一時的に使用できなくなります。",confirmRestartBrowser:"キオスクブラウザを再起動しますか?画面が一時的に暗くなります。",confirm:"確認",confirmPlugOn:"{{name}}をオンにしますか?",confirmPlugOff:"{{name}}をオフにしますか?",turnOn:"オン",turnOff:"オフ"}},diagnostic:{modalTitle:"接続診断 — {{name}}",running:"診断を実行中...",runningElapsed:"診断を実行中... ({{elapsed}}秒)",waitingForReportHint:"プリンターがステータスレポートを送信するのを待っています — 最大 {{max}} 秒かかる場合があります。",runFailed:"診断を実行できませんでした: {{error}}",retry:"再実行",runButton:"診断を実行",sectionTitle:"接続診断",sectionDescription:"プリンターが接続できない、または印刷できない原因を確認します — ポートの到達性、LAN開発者モード、Dockerネットワークモード、認証情報。",noPrinters:"プリンターが設定されていません。",overall:{ok:"問題は見つかりませんでした — プリンター接続は正常のようです。",warnings:"プリンターは動作するはずですが、いくつかの点に注意が必要です。",problems:"プリンターが接続できない、または印刷できない原因となる問題が見つかりました。"},check:{port_mqtt:{title:"制御ポート (MQTT 8883)",pass:"到達可能 — プリンターは制御接続を受け付けています。",fail:"ポート8883に到達できません。プリンターの電源が切れている、IPアドレスが異なる、またはファイアウォールがブロックしています。プリンターのIPと、ポート8883が何にもブロックされていないことを確認してください。"},port_ftps:{title:"ファイル転送ポート (FTPS 990)",pass:"到達可能 — 印刷ファイルの送信は機能します。",warn:"ポート990に到達できません。監視は引き続き機能する場合がありますが、プリンターへの印刷送信は失敗します。ポート990がブロックされていないことを確認してください。"},external_storage:{title:"送信ファイルを外部ストレージに保存 (インストール手順4)",pass:"プリンターはこのオプションが有効と報告しています — 送信されたファイルはSDカードに保存され、アーカイブにはサムネイルとスライサーメタデータが含まれます。",fail:"プリンターはこのオプションが無効と報告しています。「送信ファイルを外部ストレージに保存」を有効にしてください — 新しいファームウェア (P2S 01.02 / Bambu Studio 2.6以降) ではプリンター本体の印刷設定にトグルがあります。古いバージョンでは Bambu Studio / OrcaSlicer のデバイスタブにあります。この設定がないと、アーカイブされた印刷にはサムネイルもスライサーメタデータも残りません。",skip:"未確認 — アクティブなMQTT接続が必要です。古いスライサーでこの設定がスライサー側のみに存在する場合、プリンターはそれを報告しないため、オプションが無効でもこのチェックは通過します — インストール手順4を手動で確認してください。"},port_rtsps:{title:"カメラポート (RTSPS 322)",pass:"到達可能 — カメラストリームは機能します。",warn:"ポート322に到達できません。ライブカメラ表示は機能しません。これは印刷には影響しません。"},network_mode:{title:"Dockerネットワークモード",pass:"ホストネットワークモードで実行中です。",warn:'BambuddyはDockerブリッジネットワークで実行されています。プリンター検出と仮想プリンターにはホストネットワークモードが必要です — "network_mode: host" でコンテナを再作成してください。',skip:"Dockerで実行されていません — 該当しません。"},subnet:{title:"ネットワークサブネット",pass:"プリンターとBambuddyは同じサブネットにあります。",warn:"プリンター ({{printer_ip}}) とBambuddy ({{host_ip}}) は異なるサブネットにあります。サブネット間のルーティングが設定されていない限り、互いに到達できない可能性があります。",skip:"サブネットを判定できませんでした — スキップしました。"},mqtt_auth:{title:"プリンター認証情報",pass:"プリンターが接続を受け入れました。",fail:"プリンターには到達できますが、接続を拒否されました。アクセスコードまたはシリアル番号が間違っている可能性が高いです。アクセスコードは開発者モードを切り替えるたびに変わります — プリンター画面から再度コピーしてください。",skip:"未確認 — プリンターに到達できませんでした。"},developer_mode:{title:"LAN開発者モード",pass:"開発者モードは有効です。",fail:"プリンターの開発者モードがオフです。プリンターのLAN設定で有効にし、OKで確定してください。これがないと印刷は開始されません。",skip:"確認できませんでした — プリンターへのアクティブな接続が必要です。"},printer_publishing:{title:"プリンターがステータスを送信中",pass:"プリンターはステータス更新を送信しています — AMS、フィラメント、Kプロファイルがスライサーに正しくミラーされます。",fail:"MQTTブローカーは接続を受け付けましたが、プリンターはステータスレポートを一切送信していません。ほぼ常にシリアル番号の誤りまたは大文字小文字の不一致が原因です — device//api/v1/metrics per monitoraggio Prometheus/Grafana.",bearerTokenOptional:"Token Bearer (opzionale)",bearerTokenHint:"Se impostato, le richieste devono includere Authorization: Bearer ",metricsConnectionStatus:"Stato connessione",metricsPrinterState:"Stato stampante (idle/printing/ecc)",metricsPrintProgress:"Progresso stampa 0-100%",metricsBedTemp:"Temperatura piatto",metricsNozzleTemp:"Temperatura ugello",metricsPrintsTotal:"Stampe totali per risultato",metricsMore:"...e altro (strati, ventole, coda, consumo filamento)",smartPlugsDescription:"Connetti prese smart (Tasmota o Home Assistant) per automatizzare il controllo dell'alimentazione e monitorare il consumo energetico delle stampanti.",allOn:"Tutte accese",allOff:"Tutte spente",addSmartPlug:"Aggiungi presa smart",energySummary:"Riepilogo energia",currentPower:"Potenza attuale",plugsOnline:"{{reachable}}/{{total}} prese online",today:"Oggi",yesterday:"Ieri",total:"Totale",enablePlugsForSummary:"Abilita le prese per vedere il riepilogo energia",addNotificationProvider:"Aggiungi",systemBadge:"(Sistema)",creating:"Creazione...",changing:"Modifica...",deleteUserAndItems:"Elimina utente E i suoi elementi",deleteUserKeepItems:"Elimina utente, mantieni elementi (diventeranno senza proprietario)",ok:"OK",twoFa:{totpTitle:"App Authenticator (TOTP)",totpDesc:"Usa un'app come Google Authenticator, Aegis o Authy.",emailOtpTitle:"OTP via e-mail",emailOtpDesc:"Invia un codice monouso a {{email}} al momento del login.",emailOtpNoEmail:"Aggiungi un indirizzo e-mail al tuo account per abilitare questo metodo.",addEmailFirst:"Il tuo account non ha un indirizzo e-mail. Chiedi a un amministratore di aggiungerne uno.",setupTotp:"Configura app Authenticator",setupAuthApp:"Configura app Authenticator",setupInstructions:"Scansiona il codice QR con la tua app authenticator, poi conferma con un codice.",manualEntry:"Impossibile scansionare? Inserisci questo segreto manualmente:",scannedContinue:"Codice scansionato — continua",enterCodeToConfirm:"Inserisci il codice a 6 cifre dalla tua app authenticator per confermare.",activate:"Attiva",disableTotp:"Disabilita Authenticator",disableConfirmHint:"Inserisci un codice TOTP valido o un codice di backup per disabilitare l'authenticator.",totpDisabled:"App Authenticator disabilitata.",emailOtpEnabled:"OTP via e-mail abilitato.",emailOtpDisabled:"OTP via e-mail disabilitato.",smtpRequired:"Configura e testa prima le impostazioni SMTP.",invalidCode:"Codice non valido. Riprova.",enableEmailOtp:"Abilita OTP via e-mail",disableEmailOtp:"Disabilita OTP via e-mail",emailSetupEnterCode:"È stato inviato un codice di verifica al tuo indirizzo e-mail. Inseriscilo qui sotto per confermare che possiedi questa casella di posta.",verifyAndEnable:"Verifica e abilita",emailDisablePasswordHint:"Inserisci la password del tuo account per confermare la disabilitazione dell'OTP via e-mail.",passwordPlaceholder:"Inserisci la tua password",backupCodesTitle:"Salva i tuoi codici di backup",backupCodesWarning:"Conserva questi codici in un posto sicuro. Ogni codice può essere usato una sola volta.",backupCodesRemaining:"{{count}} codici di backup rimanenti",savedCodes:"Codici salvati",regenBackup:"Rigenera codici di backup",regenBackupHint:"Inserisci il tuo codice TOTP corrente per generare 10 nuovi codici di backup.",newBackupCodes:"Nuovi codici di backup",linkedAccounts:"Account SSO collegati",linkedAccountsDesc:"Questi provider di identità esterni sono collegati al tuo account.",oidcUnlinked:"Account scollegato."},oidc:{title:"Provider SSO / OIDC",desc:"Configura provider OpenID Connect per il single sign-on.",addProvider:"Aggiungi provider",newProvider:"Nuovo provider",empty:"Nessun provider OIDC configurato.",created:"Provider creato.",updated:"Provider aggiornato.",deleted:"Provider eliminato.",refreshIcon:"Aggiorna icona",removeIcon:"Rimuovi icona",iconRefreshed:"Icona aggiornata.",iconRemoved:"Icona rimossa.",iconFetchFailed:"Impossibile recuperare l'icona dall'URL del provider.",deleteTitle:"Elimina provider",deleteMessage:'Eliminare "{{name}}"? Tutti gli account collegati verranno disconnessi.',form:{name:"Nome visualizzato",issuerUrl:"URL emittente",clientId:"ID client",clientSecret:"Client secret",scopes:"Scope",iconUrl:"URL icona (opzionale)",enabled:"Abilitato",autoCreate:"Crea utenti automaticamente",autoCreateDesc:"Crea automaticamente un account locale al primo accesso.",autoLink:"Collega automaticamente gli account esistenti",autoLinkDesc:"Collega gli account locali esistenti tramite email al primo accesso.",secretHint:"lascia vuoto per mantenere",secretPlaceholder:"nuovo segreto",emailClaim:"Claim email",emailClaimDesc:"Claim JWT usato come identità email. Usare 'preferred_username' o 'upn' per Azure Entra ID (che non invia email_verified). Usare solo nomi di claim affidabili.",emailClaimPlaceholder:"e-mail",emailClaimCustomClaimAutoLinkWarning:"I claim personalizzati sono sicuri per il collegamento automatico solo se il valore è gestito dal tenant (es. Azure Entra ID upn / preferred_username). Non abilitare il collegamento automatico se il tuo IdP consente agli utenti di auto-assegnare questo claim.",requireEmailVerified:"Richiedi verifica email",requireEmailVerifiedDesc:"Accetta il claim email solo se il provider lo contrassegna come verificato.",requireEmailVerifiedWarning:"Attenzione: l'email sarà accettata senza verifica. Usare solo con provider affidabili.",requireEmailVerifiedAutoLink:"Disabilitare prima il collegamento automatico per modificare questa impostazione.",defaultGroup:"Gruppo predefinito",defaultGroupDesc:"Gruppo assegnato agli utenti creati automaticamente. Ritorno a Viewers se non impostato.",defaultGroupViewersFallback:"Viewers (predefinito)"}},encryption:{title:"Stato crittografia MFA",enabledFromEnv:"Crittografia a riposo abilitata (chiave dalla variabile d'ambiente MFA_ENCRYPTION_KEY)",enabledFromFile:"Crittografia a riposo abilitata (chiave caricata dalla directory dei dati)",enabledGenerated:"Crittografia a riposo abilitata con chiave auto-generata",notConfigured:"Crittografia a riposo non configurata",notConfiguredDesc:"I segreti TOTP e i client_secrets OIDC sono memorizzati in chiaro. Imposta MFA_ENCRYPTION_KEY o riavvia Bambuddy con una directory dati scrivibile per generarne uno automaticamente.",allEncrypted:"Tutti i segreti MFA sono crittografati a riposo.",legacyRowsLabel:"Righe legacy in chiaro",encryptedRowsLabel:"Righe crittografate",legacyRowsWarning:"Rilevate {{count}} righe legacy in chiaro. Salva di nuovo il provider OIDC o re-iscrivi l'app authenticator dell'utente per migrare allo storage crittografato.",backupHint:"La chiave generata automaticamente è memorizzata in DATA_DIR/.mfa_encryption_key ed è inclusa nei backup locali ZIP. Mantieni sicuri i tuoi backup o imposta MFA_ENCRYPTION_KEY esplicitamente.",decryptionBrokenTitle:"Chiave di crittografia mancante",decryptionBrokenError:"{{count}} record crittografati non possono essere decifrati perché la chiave di crittografia non è più disponibile. Ripristina il precedente MFA_ENCRYPTION_KEY o DATA_DIR/.mfa_encryption_key per recuperare.",migrationErrorWarning:"{{count}} riga/righe legacy non sono state ricifrate all'avvio. Controlla i log del server e riavvia Bambuddy per riprovare."},spoolbuddy:{infoTitle:"Dispositivi SpoolBuddy",infoBody:"I kiosk SpoolBuddy si registrano automaticamente tramite heartbeat. Annulla la registrazione qui se un dispositivo non è più in uso o se un duplicato obsoleto è rimasto dopo un crash del daemon.",duplicatesTitle:"{{count}} dispositivi registrati",duplicatesBody:"Solo il primo dispositivo registrato viene utilizzato dall'interfaccia kiosk. Se uno di questi è un duplicato obsoleto da un crash, annulla la sua registrazione — un dispositivo online si ri-registrerà al prossimo heartbeat.",empty:"Nessun dispositivo SpoolBuddy registrato.",online:"Online",offline:"Offline",unregister:"Annulla registrazione",unregisterSuccess:"Dispositivo deregistrato",unregisterError:"Deregistrazione non riuscita",confirmTitle:"Annullare la registrazione del dispositivo SpoolBuddy?",confirmBody:'Questo rimuoverà "{{hostname}}" ({{deviceId}}) dal database. Se il dispositivo è online, si ri-registrerà al prossimo heartbeat.',ipAddress:"Indirizzo IP",firmware:"Firmware",lastSeen:"Ultimo rilevamento",daemonUptime:"Uptime del daemon",systemUptime:"Uptime sistema",never:"mai",nfc:"NFC",scale:"Bilancia",cpuTemp:"Temp. CPU",cpuLoad:"Carico CPU",memory:"Memoria",disk:"Disco",update:"Aggiorna",updateConfirmTitle:"Aggiornare il daemon Spoolbuddy?",updateConfirmBody:`Avviare un aggiornamento software su "{{hostname}}"? Il daemon si riavvierà al termine dell'aggiornamento.`,restartBrowser:"Riavvia browser",restartBrowserConfirmTitle:"Riavviare il browser del kiosk?",restartBrowserConfirmBody:'Riavviare il browser del kiosk su "{{hostname}}"? Il display si oscurerà brevemente.',restartDaemon:"Riavvia daemon",restartDaemonConfirmTitle:"Riavviare il daemon Spoolbuddy?",restartDaemonConfirmBody:'Riavviare il daemon Spoolbuddy su "{{hostname}}"? Il dispositivo sarà offline per alcuni secondi.',reboot:"Riavvia",rebootConfirmTitle:"Riavviare il dispositivo?",rebootConfirmBody:'Riavviare "{{hostname}}"? Il dispositivo sarà offline per circa un minuto.',shutdown:"Spegni",shutdownConfirmTitle:"Spegnere il dispositivo?",shutdownConfirmBody:'Spegnere "{{hostname}}"? Sarà necessario un accesso fisico per riaccenderlo.',commandConfirm:"Conferma",commandQueued:"Comando in coda",commandError:"Invio comando non riuscito"}},notification:{printStarted:{title:"Stampa avviata",body:"{{printer}}: {{filename}} ha iniziato a stampare"},printCompleted:{title:"Stampa completata",body:"{{printer}}: {{filename}} completata con successo"},printFailed:{title:"Stampa fallita",body:"{{printer}}: {{filename}} fallita"},printStopped:{title:"Stampa interrotta",body:"{{printer}}: {{filename}} interrotta"},printProgress:{title:"Avanzamento stampa",body:"{{printer}}: {{filename}} al {{percent}}% completamento"},printerOffline:{title:"Stampante offline",body:"{{printer}} e offline"},printerError:{title:"Errore stampante",body:"{{printer}} – {{error}}"},filamentLow:{title:"Filamento in esaurimento",body:"{{printer}}: Filamento in esaurimento"},maintenanceDue:{title:"Manutenzione dovuta",body:"{{printer}}: {{items}} richiedono attenzione"}},errors:{generic:"Qualcosa e andato storto",networkError:"Errore di rete. Controlla la connessione.",notFound:"Non trovato",unauthorized:"Non autorizzato",serverError:"Errore server",validationError:"Controlla i dati inseriti",printerConnectionFailed:"Connessione alla stampante fallita",saveFailed:"Salvataggio modifiche fallito",deleteFailed:"Eliminazione fallita",loadFailed:"Caricamento dati fallito"},hmsErrors:{title:"Errori - {{name}}",noErrors:"Nessun errore",viewOnWiki:"Vedi su Bambu Lab Wiki",clearInstructions:"Cancella gli errori sulla stampante per rimuoverli qui.",clearErrors:"Cancella errori",clearSuccess:"Errori HMS cancellati",clearFailed:"Impossibile cancellare gli errori HMS"},mqttDebug:{title:"Log debug MQTT",searchPlaceholder:"Cerca topic o payload...",noMessages:"Nessun messaggio registrato",startLoggingHint:'Clicca "Avvia logging" per iniziare a catturare messaggi MQTT',noMessagesMatch:"Nessun messaggio corrisponde al filtro",adjustFilterHint:"Prova a modificare la ricerca o i filtri",incoming:"In ingresso",outgoing:"In uscita",loggingStopped:"Logging fermato",loggingActive:"Logging attivo - i messaggi si aggiornano automaticamente",startLogging:"Avvia logging",stopLogging:"Ferma logging",clearLog:"Pulisci log",topic:"Argomento",timestamp:"Timestamp",direction:"Direzione",all:"Tutti"},printerFiles:{title:"Gestore file",storageUsed:"Usato:",storageFree:"Libero:",filterPlaceholder:"Filtra file...",deleteButton:"Elimina",deleteFiles:"Elimina {{count}} file",deleteFileConfirm:'Eliminare "{{name}}"? Questa azione non può essere annullata.',deleteFilesConfirm:"Eliminare {{count}} file selezionati? Questa azione non può essere annullata.",noFiles:"Nessun file sulla stampante",loadingFiles:"Caricamento file...",failedToLoad:"Caricamento file fallito",toast:{filesDeleted:"Eliminati {{count}} file",deleteFailed:"Eliminazione fallita: {{error}}"}},confirm:{delete:"Sei sicuro di voler eliminare questo?",unsavedChanges:"Hai modifiche non salvate. Sei sicuro di voler uscire?",clearQueue:"Sei sicuro di voler svuotare la coda?"},login:{title:"Login Bambuddy",subtitle:"Accedi al tuo account",username:"Nome utente",usernamePlaceholder:"Inserisci il nome utente",usernameOrEmail:"Nome utente o email",usernameOrEmailPlaceholder:"Nome utente o @ Email",password:"Password",passwordPlaceholder:"Inserisci la password",signIn:"Accedi",signingIn:"Accesso in corso...",rememberMe:"Ricordami",forgotPassword:"Hai dimenticato la password?",loginSuccess:"Accesso riuscito",loginFailed:"Accesso fallito",enterCredentials:"Inserisci nome utente e password",enterEmail:"Inserisci il tuo indirizzo e-mail",oidcLoginFailed:"Accesso OIDC fallito",oidcErrors:{providerError:"Il provider di identità ha restituito un errore",missingParameters:"Parametri obbligatori mancanti nel callback OIDC",invalidState:"Lo stato OIDC non è valido o è già stato utilizzato",stateExpired:"La sessione OIDC è scaduta — riprovare",providerNotFound:"Provider OIDC non trovato",discoveryFailed:"Impossibile recuperare il documento di discovery OIDC",invalidDiscovery:"Il documento di discovery OIDC non è valido",networkError:"Errore di rete durante lo scambio di token OIDC",badResponse:"Risposta inattesa durante lo scambio di token OIDC",noIdToken:"Il provider OIDC non ha restituito un ID token",validationFailed:"La validazione del token OIDC non è riuscita",nonceMismatch:"Il nonce OIDC non corrisponde — possibile attacco di replay",missingSubClaim:"Il token OIDC è privo del claim sub",noLinkedAccount:"Nessun account locale è collegato a questa identità OIDC",accountInactive:"Il tuo account è inattivo",userResolutionFailed:"Impossibile risolvere il tuo account",internalError:"Si è verificato un errore interno durante il login OIDC",tokenExchangeFailed:"Lo scambio di token OIDC non è riuscito"},forgotPasswordTitle:"Password dimenticata",forgotPasswordMessage:"Se hai dimenticato la password, contatta il tuo amministratore di sistema per reimpostarla.",forgotPasswordEmailMessage:"Inserisci il tuo indirizzo email e ti invieremo una nuova password.",emailAddress:"Indirizzo email",emailPlaceholder:"tua.email@esempio.com",cancel:"Annulla",sending:"Invio...",sendResetEmail:"Invia email di reimpostazione",howToReset:"Come reimpostare la password:",resetStep1:"Contatta il tuo amministratore Bambuddy",resetStep2:"Chiedi di reimpostare la password in Gestione utenti",resetStep3:"Possono impostare una nuova password temporanea",resetStep4:"Accedi con la nuova password e cambiala in Impostazioni",gotIt:"Capito",twoFA:{title:"Autenticazione a due fattori",subtitle:"Il tuo account è protetto da 2FA. Inserisci il codice di verifica qui sotto.",methodAuthenticator:"App di autenticazione",methodEmail:"Codice via e-mail",methodBackup:"Codice di recupero",instructionsTotp:"Apri la tua app di autenticazione e inserisci il codice a 6 cifre per Bambuddy.",instructionsEmail:"Un codice a 6 cifre è stato inviato al tuo indirizzo e-mail. È valido per 10 minuti.",instructionsEmailNotSent:"Clicca il pulsante qui sotto per ricevere un codice di verifica via e-mail.",instructionsBackup:"Inserisci uno dei tuoi codici di recupero a 8 caratteri. Ogni codice può essere utilizzato una sola volta.",sendCodeButton:"Invia codice via e-mail",sendingCode:"Invio in corso...",resendCode:"Invia nuovamente il codice",codeLabel:"Codice di verifica",backupCodeLabel:"Codice di recupero",codePlaceholder:"000000",backupCodePlaceholder:"XXXXXXXX",verifyButton:"Verifica",verifyingButton:"Verifica in corso...",backToLogin:"← Torna alla pagina di accesso",orContinueWith:"oppure accedi con",signInWith:"Accedi con {{provider}}",enterCode:"Inserisci il codice di verifica",sendCodeFailed:"Invio del codice di verifica non riuscito",invalidCode:"Codice non valido. Riprova."},resetPassword:{title:"Imposta nuova password",subtitle:"Inserisci e conferma la nuova password qui sotto.",newPassword:"Nuova password",newPasswordPlaceholder:"Almeno 8 caratteri",confirmPassword:"Conferma password",confirmPasswordPlaceholder:"Ripeti la nuova password",saving:"Salvataggio…",submit:"Imposta nuova password",backToLogin:"Torna al login",passwordsDoNotMatch:"Le password non coincidono",passwordTooShort:"La password deve avere almeno 8 caratteri",resetFailed:"Reimpostazione non riuscita. Il link potrebbe essere scaduto."}},setup:{title:"Configurazione Bambuddy",subtitle:"Configura autenticazione per la tua istanza Bambuddy",enableAuth:"Abilita autenticazione",adminAccount:"Account admin",adminAccountDesc:"Se esistono già admin, l'autenticazione verrà abilitata usando gli account esistenti. Lascia i campi sotto vuoti per usare gli admin esistenti, oppure inserisci nuove credenziali per creare un nuovo utente admin.",adminUsername:"Nome utente admin",adminPassword:"Password admin",optionalIfAdminExists:"(opzionale se esistono admin)",adminUsernamePlaceholder:"Inserisci nome utente admin (opzionale)",adminPasswordPlaceholder:"Inserisci password admin (opzionale)",confirmPassword:"Conferma password",confirmPasswordPlaceholder:"Conferma password admin",settingUp:"Configurazione...",completeSetup:"Completa configurazione",toast:{authEnabledAdminCreated:"Autenticazione abilitata e utente admin creato",authEnabledExistingAdmins:"Autenticazione abilitata usando admin esistenti",setupCompleted:"Configurazione completata",enterBothCredentials:"Inserisci nome utente e password admin, oppure lascia entrambi vuoti per usare admin esistenti",passwordsDoNotMatch:"Le password non coincidono",passwordTooShort:"La password deve essere di almeno 6 caratteri"}},changePassword:{title:"Cambia password",currentPassword:"Password attuale",currentPasswordPlaceholder:"Inserisci password attuale",newPassword:"Nuova password",newPasswordPlaceholder:"Inserisci nuova password (min 6 caratteri)",confirmPassword:"Conferma nuova password",confirmPasswordPlaceholder:"Conferma nuova password",passwordsDoNotMatch:"Le password non coincidono",passwordTooShort:"La password deve essere di almeno 6 caratteri",changing:"Modifica in corso...",success:"Password cambiata con successo",failed:"Modifica password fallita"},plateAlert:{title:"Stampa in pausa!",message:"Oggetti rilevati sul piatto. La stampa è stata messa automaticamente in pausa. Svuota il piatto e riprendi la stampa.",understand:"Ho capito"},camera:{title:"Vista camera",invalidPrinterId:"ID stampante non valido",live:"Live",snapshot:"Istantanea",restartStream:"Riavvia stream",refreshSnapshot:"Aggiorna snapshot",fullscreen:"Schermo intero",exitFullscreen:"Esci da schermo intero",connectingToCamera:"Connessione alla camera...",capturingSnapshot:"Acquisizione snapshot...",connectionLost:"Connessione persa",connectionFailed:"Connessione camera fallita",reconnecting:"Riconnessione tra {{countdown}}s... (tentativo {{attempt}}/{{max}})",reconnectNow:"Riconnetti ora",cameraUnavailable:"Camera non disponibile",cameraUnavailableDesc:"Assicurati che la stampante sia accesa e connessa.",noCamera:"Nessuna camera disponibile",retry:"Riprova",cameraStream:"Stream camera",zoomOut:"Zoom indietro",zoomIn:"Zoom avanti",resetZoom:"Reimposta zoom",recording:"Registrazione",startRecording:"Avvia registrazione",stopRecording:"Ferma registrazione",chamberLight:"Accendi/Spegni luce camera",unavailable:"Telecamera non disponibile",diagnose:{button:"Diagnostica",modalTitle:"Diagnostica telecamera",running:"Diagnostica in corso...",runFailed:"Impossibile eseguire la diagnostica: {{error}}",retry:"Riesegui",stage:{tcp_reachable:"Raggiungibilità di rete",first_frame:"Acquisizione frame",live_stream_active:"Stream live attivo"},summary:{all_ok:"La telecamera funziona. La diagnostica ha completato tutte le fasi con successo.",live_stream_active_healthy:"La telecamera sta trasmettendo con frame recenti — nessun test necessario.",printer_unreachable:"La stampante non è raggiungibile. Verifica l'indirizzo IP, la connessione di rete e che la stampante sia accesa.",camera_port_closed:"La stampante risponde ma la porta della telecamera è chiusa. Assicurati che la modalità LAN e la modalità sviluppatore siano attive nelle impostazioni della stampante.",no_frame:"Connessione alla telecamera riuscita ma nessun frame ricevuto. Riprova o verifica che la telecamera sia abilitata nelle impostazioni della stampante.",unknown_failure:"Diagnostica della telecamera fallita per motivo sconosciuto. Controlla il log di supporto per i dettagli."},meta:{protocol:"Protocollo",port:"Porta",profile:"Profilo"}}},groups:{title:"Gestione gruppi",subtitle:"Gestisci gruppi permessi per controllo accesso",backToSettings:"Torna a Impostazioni",createGroup:"Crea gruppo",noPermission:"Non hai il permesso di accedere a questa pagina.",system:"Sistema",noDescription:"Nessuna descrizione",usersCount:"{{count}} utenti",permissionsCount:"{{count}} permessi",edit:"Modifica",delete:"Elimina",toast:{created:"Gruppo creato con successo",updated:"Gruppo aggiornato con successo",deleted:"Gruppo eliminato con successo",enterGroupName:"Inserisci un nome gruppo"},modal:{editGroup:"Modifica gruppo",createGroup:"Crea gruppo",cancel:"Annulla",saving:"Salvataggio...",creating:"Creazione...",saveChanges:"Salva modifiche"},form:{groupName:"Nome gruppo",groupNamePlaceholder:"Inserisci nome gruppo",systemGroupWarning:"I nomi dei gruppi di sistema non possono essere modificati",description:"Descrizione",descriptionPlaceholder:"Inserisci descrizione (opzionale)",permissions:"Permessi ({{count}} selezionati)"},deleteModal:{title:"Elimina gruppo",message:"Sei sicuro di voler eliminare questo gruppo? Gli utenti in questo gruppo perderanno questi permessi.",confirm:"Elimina gruppo"},editor:{title:"Modifica gruppo",createTitle:"Crea gruppo",search:"Cerca permessi...",selectAll:"Seleziona tutto",clearAll:"Deseleziona tutto",permissionsSelected:"{{count}} selezionati",noResults:"Nessun permesso corrisponde alla ricerca"}},users:{title:"Gestione utenti",subtitle:"Gestisci utenti e accesso alla tua istanza Bambuddy",backToSettings:"Torna a Impostazioni",createUser:"Crea utente",noPermission:"Non hai il permesso di accedere a questa pagina.",admin:"Amministratore",noGroups:"Nessun gruppo",active:"Attivo",inactive:"Inattivo",edit:"Modifica",delete:"Elimina",system:"Sistema",noGroupsAvailable:"Nessun gruppo disponibile",table:{username:"Nome utente",groups:"Gruppi",status:"Stato",actions:"Azioni"},toast:{created:"Utente creato con successo",updated:"Utente aggiornato con successo",deleted:"Utente eliminato con successo",fillRequired:"Compila tutti i campi obbligatori",passwordsDoNotMatch:"Le password non coincidono",passwordTooShort:"La password deve essere di almeno 6 caratteri",ldapProvisioned:'Utente LDAP "{{username}}" provisionato'},modal:{createUser:"Crea utente",editUser:"Modifica utente",cancel:"Annulla",creating:"Creazione...",saving:"Salvataggio...",saveChanges:"Salva modifiche",advancedAuthSubtitle:"con autenticazione avanzata",tabsAriaLabel:"Origine utente",localTab:"Locale",ldapTab:"LDAP",ldapSearchLabel:"Cerca nella directory",ldapSearchPlaceholder:"Digita un nome utente, nome o e-mail...",ldapMinChars:"Digita almeno 2 caratteri per cercare",ldapTypeToSearch:"Inizia a digitare per cercare nella directory LDAP",ldapSearching:"Ricerca nella directory...",ldapNoResults:"Nessun utente corrispondente nella directory",ldapSearchError:"Ricerca nella directory fallita. Verifica lo stato del server LDAP.",ldapAlreadyProvisioned:"Già provisionato",ldapSelectedLabel:"Selezionato",ldapProvision:"Provisiona utente",ldapProvisioning:"Provisioning...",ldapErrorProvision:"Provisioning fallito. Verifica lo stato del server LDAP e riprova."},form:{username:"Nome utente",usernamePlaceholder:"Inserisci nome utente",email:"E-mail",emailPlaceholder:"utente@esempio.com",password:"Password",passwordPlaceholder:"Inserisci password",confirmPassword:"Conferma password",confirmPasswordPlaceholder:"Conferma password",newPasswordPlaceholder:"Inserisci nuova password",confirmNewPasswordPlaceholder:"Conferma nuova password",leaveBlankToKeep:"lascia vuoto per mantenere attuale",groups:"Gruppi",optional:"opzionale",autoGeneratedPassword:"Una password sicura verrà generata automaticamente e inviata via email all'utente.",passwordManagedByAdvancedAuth:`La password è gestita dall'autenticazione avanzata. Usa "Reimposta password" per inviare una nuova password all'utente via email.`,resetPassword:"Reimposta password",resettingPassword:"Reimpostazione password..."},deleteModal:{title:"Elimina utente",message:"Sei sicuro di voler eliminare questo utente? Questa azione non può essere annullata.",confirm:"Elimina utente"}},streamOverlay:{title:"Overlay stream",invalidPrinterId:"ID stampante non valido",cameraStream:"Stream camera",progress:"Avanzamento",eta:"ETA",printerIdle:"Stampante inattiva",printerOffline:"Stampante offline",status:{printing:"In stampa",paused:"In pausa",finished:"Completata",failed:"Fallita",idle:"Inattiva",unknown:"Sconosciuto"}},profiles:{title:"Profili",subtitle:"Gestisci preset slicer e calibrazioni pressure advance",tabs:{bambuCloud:"Bambu Cloud",orcaCloud:"Orca Cloud",local:"Profili locali",kprofiles:"Profili K"},orcaCloud:{connectedAs:"Connesso come",logout:"Disconnetti",noLogoutPermission:"Non hai il permesso di disconnetterti",noConnectPermission:"Non hai il permesso di connetterti a Orca Cloud",retry:"Riprova",back:"Usa un altro metodo di accesso",connect:{title:"Connetti a Orca Cloud",description:"Accedi al tuo account Orca Cloud per sincronizzare i profili dello slicer in Bambuddy."},providers:{google:"Accedi con Google",apple:"Accedi con Apple",github:"Accedi con GitHub",email:"Accedi con email e password"},password:{title:"Accedi con email e password",email:"Email",emailPlaceholder:"tu@esempio.it",password:"Password",submit:"Accedi"},paste:{title:"Completa l'accesso",step1:"Si è aperta una nuova scheda con la pagina di accesso di Orca Cloud. Accedi con il tuo account Orca.",step2:`Il browser verrà reindirizzato a un URL "localhost" che non riuscirà a caricarsi. È normale — è proprio quell'URL che ci serve.`,step3:"Copia l'intero URL dalla barra degli indirizzi del browser e incollalo qui sotto.",signInUrl:"Se la scheda di accesso non si è aperta, clicca su questo URL:",label:"Incolla qui l'URL di callback",placeholder:"http://localhost:41172/callback?code=...&state=...",submit:"Completa la connessione"},profiles:{title:"I tuoi profili Orca Cloud ({{count}})",refresh:"Aggiorna",empty:"Nessun profilo trovato nel tuo account Orca Cloud."},toast:{connected:"Connesso a Orca Cloud come {{email}}",disconnected:"Disconnesso da Orca Cloud"},errors:{startFailed:"Impossibile avviare l'accesso a Orca Cloud.",finishFailed:"Impossibile completare l'accesso a Orca Cloud.",passwordFailed:"Impossibile accedere con quell'email e password.",passwordEmpty:"Inserisci sia l'email che la password.",emptyPaste:"Incolla l'URL di callback dal tuo browser.",noCode:"Questo URL non sembra un callback di Orca Cloud (manca il parametro code). Copia l'URL completo dalla barra degli indirizzi."}},localProfiles:{title:"Profili locali",subtitle:"Importa e gestisci preset slicer da OrcaSlicer",import:"Importa profili",importDesc:"Trascina file .bbscfg, .bbsflmt, .orca_filament, .zip o .json qui",importing:"Importazione...",search:"Cerca preset locali...",noPresets:"Nessun preset locale ancora",noSearchResults:"Nessun preset corrisponde alla ricerca",badge:"Locale",edit:"Modifica",delete:"Elimina",cancel:"Annulla",deleteConfirmTitle:"Elimina preset",deleteConfirm:"Sei sicuro di voler eliminare questo preset? Questa azione non può essere annullata.",source:"Fonte",inheritsFrom:"Eredita da",filamentType:"Tipo",vendor:"Produttore",compatiblePrinters:"Stampanti",nozzleTemp:"Temp. ugello",cost:"Costo",density:"Densità",pressureAdvance:"Pressure Advance",filament:"Filamento",process:"Processo",printer:"Stampante",toast:{importSuccess:"{{count}} preset importati",importSkipped:"{{count}} preset saltati (duplicati)",importError:"{{count}} errori durante l'importazione",deleted:"Preset eliminato",updated:"Preset aggiornato"}},connectedAs:"Connesso come",logout:"Esci",noLogoutPermission:"Non hai il permesso di disconnetterti",failedToLoad:"Caricamento profili fallito",retry:"Riprova",time:{justNow:"Proprio ora",minsAgo:"{{count}}m fa",hoursAgo:"{{count}}h fa",daysAgo:"{{count}}g fa"},toast:{loggedOut:"Disconnesso"},login:{title:"Connetti a Bambu Cloud",subtitle:"Sincronizza i preset del slicer tra dispositivi",email:"E-mail",password:"Password",region:"Regione",regionGlobal:"Globale",regionChina:"Cina",verificationCode:"Codice di verifica",totpCode:"Codice autenticatore",checkEmail:"Controlla la tua email ({{email}}) per un codice a 6 cifre",enterTotpHint:"Inserisci il codice a 6 cifre dalla tua app autenticatore",accessToken:"Token di accesso",accessTokenHint:"Incolla il tuo access token Bambu Cloud. Gli account della regione Cina devono usare questa via (vincolati al numero di telefono — login via e-mail non disponibile). Il wiki spiega come recuperare il token dai cookie di MakerWorld.",back:"Indietro",loginButton:"Accedi",verifyButton:"Verifica",setTokenButton:"Imposta token",useToken:"Usa access token invece",useEmail:"Accedi con email invece",toast:{loggedIn:"Accesso riuscito",codeSent:"Codice di verifica inviato via email",enterTotp:"Inserisci il codice dalla tua app autenticatore",tokenSet:"Token impostato con successo"}},presets:{myPreset:"Il mio preset (modificabile)",duplicate:"Duplica",editable:"Modificabile",failedToLoadDetails:"Caricamento dettagli preset fallito",deleteConfirm:"Eliminare questo preset?",deleteWarning:'Questo eliminerà definitivamente "{{name}}" da Bambu Cloud. Questa azione non può essere annullata.',noDuplicatePermission:"Non hai il permesso di duplicare preset",noEditPermission:"Non hai il permesso di modificare preset",noDeletePermission:"Non hai il permesso di eliminare preset",types:{filament:"Preset filamento",printer:"Preset stampante",process:"Preset processo"},toast:{deleted:"Preset eliminato",created:"Preset creato",updated:"Preset aggiornato",duplicated:"Preset duplicato",fieldAdded:'Campo "{{key}}" aggiunto',exported:"Preset esportato"},baseLabel:"Base: {{name}}",currentLabel:"Corrente: {{name}}",newPreset:"Nuovo preset",editPreset:"Modifica preset",duplicatePreset:"Duplica preset",createNewPreset:"Crea nuovo preset",customizeSettings:"Personalizza le impostazioni per il nuovo preset",compareWithBase:"Confronta con base",compare:"Confronta",basePreset:"Preset base",selectBasePreset:"Seleziona preset base...",presetName:"Nome preset",myCustomPreset:"Il mio preset personalizzato",inheritsFrom:"Deriva da",dropJsonToImport:"Rilascia JSON per importare",tabs:{common:"Comune",allFields:"Tutti i campi"},availableFields:"Campi disponibili",searchFieldsPlaceholder:"Cerca campi...",noMatchingFields:"Nessun campo corrispondente",allFieldsAdded:"Tutti i campi aggiunti",addCustomField:"Aggiungi campo personalizzato",yourOverrides:"Le tue override",noOverridesYet:"Nessun override ancora",clickFieldsToAdd:"Clicca i campi a sinistra per aggiungerli",saveAsTemplate:"Salva come template",jsonTip:"Suggerimento: trascina e rilascia un file .json ovunque in questa modale per importare impostazioni"},cloudView:{searchPlaceholder:"Cerca preset...",templates:"Template",refresh:"Aggiorna",newPreset:"Nuovo preset",clearFilters:"Pulisci filtri",compareMode:"Modalita confronto",selectAnotherPreset:"Seleziona un altro preset {{type}}",clickTwoPresets:"Clicca due preset dello stesso tipo per confrontare",selectFirst:"1. Seleziona il primo",selectSecond:"2. Seleziona il secondo",compareNow:"Confronta ora",lastSynced:"Ultima sincronizzazione:",showingCount:"Mostrati {{showing}} di {{total}} preset",noPresetsFound:"Nessun preset trovato",columns:{filament:"Filamento",process:"Processo",printer:"Stampante"},noFilamentPresets:"Nessun preset filamento",noProcessPresets:"Nessun preset processo",noPrinterPresets:"Nessun preset stampante",filters:{type:"Tipo",owner:"Proprietario",printer:"Stampante",nozzle:"Ugello",filament:"Filamento",layer:"Layer",all:"Tutti",myPresets:"I miei preset",builtIn:"Integrati",process:"Processo"},noTemplatesPermission:"Non hai il permesso di gestire i template",noRefreshPermission:"Non hai il permesso di aggiornare i profili",noCreatePermission:"Non hai il permesso di creare preset"},templates:{title:"Template rapidi",noTemplates:"Nessun template ancora",createFirst:"Crea template dall'editor preset",typeFilter:"Tipo:",deleteTitle:"Elimina template",deleteWarning:"Questa azione non può essere annullata",deleteConfirm:'Sei sicuro di voler eliminare "{{name}}"?',namePlaceholder:"Nome template",descriptionPlaceholder:"Descrizione",settingsJson:"Impostazioni (JSON)",fieldsCount:"{{count}} campi",shownInModals:"Mostrati nelle modali",hiddenInModals:"Nascosti nelle modali",apply:"Applica",toast:{deleted:"Template eliminato",updated:"Template aggiornato",created:"Template creato",applied:"Template applicato"}}},support:{debugLoggingActive:"Log debug attivo",manageLogs:"Gestisci",collectItem7:"Connettività stampante e versioni firmware",collectItem8:"Stato integrazioni (Spoolman, MQTT, HA)",collectItem9:"Interfacce di rete (solo subnet)",collectItem10:"Versioni dei pacchetti Python",collectItem11:"Controlli di integrità del database",collectItem12:"Dettagli dell'ambiente Docker",bundleGenerating:"Generazione del pacchetto...",bundleStepConnection:"Controlli di connettività delle stampanti in corso",bundleStepVirtualPrinters:"Controlli di configurazione delle stampanti virtuali in corso",bundleStepLogScan:"Analisi dei log recenti per problemi noti",bundleStepBuild:"Creazione dello ZIP del pacchetto di supporto"},fileManager:{title:"Gestore file",subtitle:"Organizza e gestisci i tuoi file di stampa",uploadFiles:"Carica file",newFolder:"Nuova cartella",folderName:"Nome cartella",folderNamePlaceholder:"es., Parti funzionali",renameFile:"Rinomina file",renameFolder:"Rinomina cartella",invalidFilenameChar:'Il carattere "{{char}}" non è consentito nei nomi dei file di stampa. La scheda SD della stampante rifiuta: < > : " / \\ | ? *',moveFiles:"Sposta {{count}} file",rootNoFolder:"Root (nessuna cartella)",current:"corrente",linkFolder:"Collega cartella",linkFolderDescription:'Collega "{{name}}" a un progetto o archivio per accesso rapido.',project:"Progetto",archive:"Archivio",noProjectsFound:"Nessun progetto trovato",noArchivesFound:"Nessun archivio trovato",unlink:"Scollega",link:"Collega",dragDropFiles:"Trascina e rilascia file qui",dropFilesHere:"Rilascia file qui",orClickToBrowse:"oppure clicca per sfogliare",allFileTypesSupported:"Tutti i tipi di file supportati. I file ZIP saranno estratti.",zipFilesDetected:"File ZIP rilevati",zipExtractOptions:"I file ZIP saranno estratti. Scegli come gestire la struttura cartelle:",preserveZipStructure:"Mantieni struttura cartelle dal ZIP",createFolderFromZip:"Crea cartella dal nome ZIP",stlThumbnailGeneration:"Generazione miniature STL",zipMayContainStl:"I file ZIP possono contenere STL. Le miniature possono essere generate durante l'estrazione.",thumbnailsCanBeGenerated:"Le miniature possono essere generate per file STL. I modelli grandi possono richiedere più tempo.",generateThumbnailsForStl:"Genera miniature per file STL",threemfDetected:"File 3MF rilevati",threemfExtractionInfo:"Modello stampante, materiale, colore e impostazioni stampa saranno estratti automaticamente dai file 3MF.",willBeExtracted:"Sara estratto",filesExtracted:"{{count}} file estratti",uploadComplete:"Caricamento completato: {{succeeded}} riusciti",uploadFailed:"Caricamento fallito",zipFilesFailed:"{{count}} file falliti",uploading:"Caricamento...",changeLink:"Cambia collegamento...",linkTo:"Collega a...",linkToProjectOrArchive:"Collega a progetto o archivio",addToQueue:"Aggiungi alla coda",schedulePrint:"Pianifica",generateThumbnail:"Genera miniatura",generateThumbnails:"Genera miniature",generateThumbnailsForMissing:"Genera miniature per STL senza miniatura",gridView:"Vista griglia",listView:"Vista elenco",lowDiskSpaceWarning:"Avviso spazio disco basso",lowDiskSpaceDetails:"Solo {{free}} liberi su {{total}} totali. La soglia e {{threshold}} GB nelle impostazioni.",files:"File",folders:"Cartelle",size:"Dimensione",free:"Libero",allFiles:"Tutti i file",allExternal:"Esterni",externalIsEmpty:"Nessun file esterno",externalEmptyDescription:"I file delle tue cartelle esterne collegate appariranno qui.",wrap:"A capo",enableTextWrapping:"Abilita a capo testo",disableTextWrapping:"Disabilita a capo testo",collapse:"Comprimi",collapseFoldersByDefault:"Comprimi le cartelle per impostazione predefinita",expandFoldersByDefault:"Espandi le cartelle per impostazione predefinita",dragToResizeTooltip:"Trascina per ridimensionare, doppio clic per reset",searchFiles:"Cerca file...",allTypes:"Tutti i tipi",prints:"Stampe",ascending:"Crescente",descending:"Decrescente",resultsCount:"{{showing}} di {{total}} file",selectAll:"Seleziona tutto",deselectAll:"Deseleziona tutto",selected:"{{count}} selezionati",adding:"Aggiunta...",loadingFiles:"Caricamento file...",folderIsEmpty:"La cartella e vuota",noFilesYet:"Nessun file ancora",folderEmptyDescription:"Carica file o sposta file in questa cartella per iniziare.",noFilesDescription:"Carica file per iniziare a organizzare i file di stampa.",noMatchingFiles:"Nessun file corrispondente",noMatchingFilesDescription:"Nessun file corrisponde ai criteri di ricerca o filtro.",clearFilters:"Pulisci filtri",printedCount:"Stampato {{count}}x",uploadedBy:"Caricato da",deleteFolder:"Elimina cartella",deleteFile:"Elimina file",deleteFilesCount:"Elimina {{count}} file",deleteFolderConfirm:"Sei sicuro di voler eliminare questa cartella? Tutti i file dentro saranno eliminati.",deleteFileConfirm:"Sei sicuro di voler eliminare questo file?",deleteFilesConfirm:"Sei sicuro di voler eliminare {{count}} file selezionati? Questa azione non può essere annullata.",deleting:"Eliminazione...",noPermissionRenameFolder:"Non hai il permesso di rinominare cartelle",noPermissionLinkFolder:"Non hai il permesso di collegare cartelle",noPermissionDeleteFolder:"Non hai il permesso di eliminare cartelle",noPermissionPrint:"Non hai il permesso di stampare",noPermissionSlice:"Non hai il permesso di sezionare i file",noPermissionAddToQueue:"Non hai il permesso di aggiungere alla coda",noPermissionDownload:"Non hai il permesso di scaricare file",noPermissionRenameFile:"Non hai il permesso di rinominare questo file",noPermissionGenerateThumbnail:"Non hai il permesso di generare miniature",noPermissionDeleteFile:"Non hai il permesso di eliminare questo file",noPermissionCreateFolder:"Non hai il permesso di creare cartelle",noPermissionUpload:"Non hai il permesso di caricare file",noPermissionMoveFiles:"Non hai il permesso di spostare file",noPermissionDeleteFiles:"Non hai il permesso di eliminare file",linkExternal:"Collega esterno",linkExternalFolder:"Collega cartella esterna",linkExternalFolderDescription:"Monta una directory host (NAS, USB, condivisione di rete) nel File Manager. I file non vengono copiati — vengono letti direttamente dal percorso originale.",externalFolderNamePlaceholder:"es. Stampe NAS",externalPath:"Percorso host",externalPathHelp:"Percorso assoluto della directory sull'host Docker. Deve essere montato come bind nel container.",readOnly:"Sola lettura",readOnlyHelp:"impedisce caricamenti e cancellazioni",showHiddenFiles:"Mostra file nascosti (file punto)",externalFolder:"Cartella esterna",scanFolder:"Scansiona",toast:{folderCreated:"Cartella creata",folderDeleted:"Cartella eliminata",fileDeleted:"File eliminato",filesDeleted:"Eliminati {{count}} file",filesMoved:"File spostati",folderLinked:"Cartella collegata",folderUnlinked:"Cartella scollegata",externalFolderLinked:"Cartella esterna collegata e scansionata",folderScanned:"Scansione completata: {{added}} aggiunti, {{removed}} rimossi",addedToQueue:"Aggiunti {{count}} file alla coda",addedToQueuePartial:"Aggiunti {{added}} file, {{failed}} falliti",failedToAddToQueue:"Aggiunta file fallita: {{error}}",fileRenamed:"File rinominato",folderRenamed:"Cartella rinominata",thumbnailsGenerated:"Generate {{count}} miniature",thumbnailsGeneratedPartial:"Generate {{succeeded}} miniature, {{failed}} fallite",noStlMissingThumbnails:"Nessun file STL senza miniature",failedToGenerateThumbnails:"Generazione miniature fallita: {{error}}",thumbnailGenerated:"Miniatura generata",failedToGenerateThumbnail:"Generazione miniatura fallita: {{error}}"}},projects:{title:"Progetti",subtitle:"Organizza e traccia i tuoi progetti di stampa 3D",newProject:"Nuovo progetto",editProject:"Modifica progetto",deleteProject:"Elimina progetto",projectName:"Nome progetto",description:"Descrizione",noProjects:"Nessun progetto ancora",noProjectsFiltered:"Nessun progetto {{status}}",noProjectsFilteredHelp:"Non hai progetti {{status}}. I progetti appariranno qui quando il loro stato cambia.",createFirst:"Crea il tuo primo progetto per organizzare stampe correlate, tracciare progressi e gestire i tuoi build.",createFirstButton:"Crea il tuo primo progetto",create:"Crea",files:"File",prints:"Stampe",plates:"piatti",parts:"parti",lastModified:"Ultima modifica",deleteConfirm:"Sei sicuro di voler eliminare questo progetto? Archivi e elementi in coda saranno scollegati ma non eliminati.",addFiles:"Aggiungi file",removeFile:"Rimuovi file",viewDetails:"Vedi dettagli",namePlaceholder:"es., Build Voron 2.4",descriptionPlaceholder:"Descrizione opzionale...",urlLabel:"URL",urlPlaceholder:"https://makerworld.com/...",urlInvalid:"L'URL deve iniziare con http:// o https://",openExternalUrl:"Apri URL del progetto",coverImageLabel:"Immagine di copertina",coverImageAlt:"Immagine di copertina del progetto",coverImageUpload:"Carica",coverImageReplace:"Sostituisci",coverImageRemove:"Rimuovi",color:"Colore",targetPlates:"Piatti target",targetPlatesPlaceholder:"es., 25",targetPlatesHelp:"Numero di job di stampa",targetParts:"Parti target",targetPartsPlaceholder:"es., 150",targetPartsHelp:"Totale oggetti necessari",tagsLabel:"Tag (separati da virgola)",tagsPlaceholder:"es., voron, funzionale, regalo",dueDate:"Data scadenza",priority:"Priorita",priorityLow:"Bassa",priorityNormal:"Normale",priorityHigh:"Alta",priorityUrgent:"Urgente",statusActive:"Attivo",statusCompleted:"Completato",statusArchived:"Archiviato",done:"Fatto",completed:"completato",failed:"fallito",inQueue:"in coda",noPrintsYet:"Nessuna stampa ancora",printJobs:"Job di stampa (piatti)",partsPrinted:"Parti stampate",failedParts:"Parti fallite",import:"Importa",export:"Esporta",importProject:"Importa progetto",exportAll:"Esporta tutti i progetti",loading:"Caricamento progetti...",noEditPermission:"Non hai il permesso di modificare progetti",noDeletePermission:"Non hai il permesso di eliminare progetti",noCreatePermission:"Non hai il permesso di creare progetti",noImportPermission:"Non hai il permesso di importare progetti",noExportPermission:"Non hai il permesso di esportare progetti",toast:{created:"Progetto creato",updated:"Progetto aggiornato",deleted:"Progetto eliminato",imported:"Progetto importato",multipleImported:"{{count}} progetti importati",importFailed:"Import fallito",exported:"Progetti esportati (solo metadati)"}},projectDetail:{notFound:"Progetto non trovato",backToProjects:"Torna a Progetti",export:"Esporta",exportProject:"Esporta progetto",noExportPermission:"Non hai il permesso di esportare progetti",noEditPermission:"Non hai il permesso di modificare progetti",partOf:"Parte di:",priorityLabel:"Priorita:",noPrints:"Nessuna stampa in questo progetto ancora",status:{active:"Attivo",completed:"Completato",archived:"Archiviato"},priority:{low:"Bassa",normal:"Normale",high:"Alta",urgent:"Urgente"},dueDate:{overdue:"Scaduto",today:"Scade oggi",daysLeft:"{{count}} giorni rimanenti"},progress:{platesProgress:"Avanzamento piatti",partsProgress:"Avanzamento parti",printJobs:"job di stampa",parts:"parti",percentComplete:"{{percent}}% completato",remaining:"{{count}} rimanenti"},stats:{printJobs:"Job di stampa",total:"totale",failed:"{{count}} falliti",partsPrinted:"{{count}} parti stampate",printTime:"Tempo di stampa",filamentUsed:"Filamento usato"},cost:{title:"Tracciamento costi",filamentCost:"Costo filamento",energy:"Energia",totalCost:"Costo totale",total:"Totale",includesBom:"incl. distinta materiali",budget:"Budget",remaining:"Rimanente"},subProjects:{title:"Sotto-progetti ({{count}})"},notes:{title:"Note",noEditPermission:"Non hai il permesso di modificare le note",placeholder:"Aggiungi note su questo progetto...",empty:"Nessuna nota ancora. Clicca Modifica per aggiungere note."},files:{title:"File",linkFolders:"Collega cartelle dal Gestore file",forQuickAccess:"a questo progetto per accesso rapido.",fileCount:"{{count}} file",empty:"Nessuna cartella collegata. Vai a Gestore file e collega una cartella a questo progetto.",noFiles:"Nessun file in questa cartella.",print:"Stampa ora",addToQueue:"Aggiungi alla coda"},bom:{title:"Distinta materiali",acquired:"{{completed}}/{{total}} acquisiti",showAll:"Mostra tutti",hideDone:"Nascondi completati",addPart:"Aggiungi parte",noAddPermission:"Non hai il permesso di aggiungere parti",partNamePlaceholder:"Nome parte (es., viti M3x8)",partName:"Nome parte",qty:"Qta",price:"Prezzo ({{currency}})",sourcingUrlPlaceholder:"URL fornitura (opzionale)",remarksPlaceholder:"Note (opzionale)",deletePart:"Elimina parte",deleteConfirm:'Sei sicuro di voler eliminare "{{name}}"?',noUpdatePermission:"Non hai il permesso di aggiornare parti",noEditPermission:"Non hai il permesso di modificare parti",noDeletePermission:"Non hai il permesso di eliminare parti",totalCost:"Costo totale:",empty:"Nessuna parte nella distinta materiali. Aggiungi hardware, elettronica o altri componenti da reperire."},timeline:{title:"Timeline attivita",empty:"Nessuna attivita ancora."},template:{saveAsTemplate:"Salva come template",noCreatePermission:"Non hai il permesso di creare template"},queue:{title:"Coda",viewAll:"Vedi tutto",printing:"{{count}} in stampa",queued:"{{count}} in coda"},prints:{title:"Stampe ({{count}})"},toast:{projectUpdated:"Progetto aggiornato",partAdded:"Parte aggiunta",partRemoved:"Parte rimossa",exportFailed:"Export fallito",projectExported:"Progetto esportato",templateCreated:"Template creato"}},system:{title:"Informazioni sistema",version:"Versione",uptime:"Tempo attivo",cpuUsage:"Uso CPU",memoryUsage:"Uso memoria",diskUsage:"Uso disco",networkInfo:"Info rete",logs:"Log",debugMode:"Modalita debug",enableDebug:"Abilita log debug",disableDebug:"Disabilita log debug",downloadLogs:"Scarica log",clearLogs:"Cancella log",dockerInfo:"Info Docker",containerName:"Nome container",imageName:"Nome immagine",platform:"Piattaforma",architecture:"Architettura"},library:{title:"Libreria filamenti",addFilament:"Aggiungi filamento",editFilament:"Modifica filamento",deleteFilament:"Elimina filamento",vendor:"Produttore",material:"Materiale",color:"Colore",kFactor:"Fattore K",temperature:"Temperatura",noFilaments:"Nessun filamento in libreria",deleteConfirm:"Sei sicuro di voler eliminare questo filamento?",importFromPrinter:"Importa da stampante",exportToFile:"Esporta su file"},slice:{title:"Slicing modello",action:"Slice",actionAll:"Slicia tutti i {{count}} piatti",actionAllTitle:"Slicia tutti i piatti in un unico output multi-piatto (un solo archivio). La selezione del filamento copre ogni slot definito dal progetto.",allPlatesToggle:"Slicia tutti i {{count}} piatti",slicing:"Slicing…",printer:"Profilo stampante",process:"Profilo processo",filament:"Profilo filamento",filamentSlot:"Filamento {{index}} ({{type}})",selectPreset:"— Seleziona un preset —",loadingPresets:"Caricamento preset…",analyzingPlateFilaments:"Analisi filamenti del piano…",analyzingPlateFilamentsHint:"Slicing di anteprima per scoprire quali slot AMS usa questo piano. In cache dopo — la riapertura è istantanea.",previewToast:"Analisi di {{name}} – {{elapsed}}",previewWithProgress:"Analisi di {{name}} – {{stage}} ({{percent}}%) – {{elapsed}}",notUsedByPlate:"— non usato da questo piano",noPresetsForSlot:"Nessun preset disponibile",otherPrinters:"Altre stampanti",presetsLoadFailed:"Caricamento preset fallito. Apri Impostazioni → Profili per importarli prima.",refreshPresets:"Aggiorna",refreshPresetsTitle:"Aggiorna i preset — recupera gli elenchi più recenti dal cloud e dai bundle (da usare dopo aver eliminato un preset in Bambu Studio o Bambu Handy)",allPresetsRequired:"Tutti i preset devono essere selezionati",bundle:"Bundle slicer",bundleNone:"— Nessuno (scegli i preset singolarmente) —",bundleAllRequired:"Devi scegliere il processo del bundle e ogni slot filamento",enqueuing:"Invio lavoro di slicing…",queued:"In coda…",failed:"Slicing fallito. Controlla i log del sidecar.",startedToast:"Slicing di {{name}} in background…",queuedToast:"In coda: {{name}} – {{elapsed}}",runningToast:"Slicing {{name}} – {{elapsed}}",runningWithProgress:"{{name}} – {{stage}} ({{percent}}%) – {{elapsed}}",runningWithProgressMultiPlate:"Piatto {{plateIndex}} di {{plateCount}} • {{name}} – {{stage}} ({{percent}}%) – {{elapsed}}",completedToast:"{{name}} sezionato",failedTitle:"Slicing fallito",failedToast:"Slicing di {{name}} fallito: {{detail}}",tier:{local:"Importato",cloud:"Bambu Cloud",orcaCloud:"Orca Cloud",standard:"Standard"},cloud:{notAuthenticated:"Accedi a Bambu Cloud (Impostazioni → Profili → Bambu Cloud) per vedere i preset cloud.",expired:"Sessione Bambu Cloud scaduta – accedi di nuovo per aggiornare i preset cloud.",unreachable:"Bambu Cloud non è raggiungibile. I preset locali e standard funzionano ancora."},orcaCloud:{notAuthenticated:"Accedi a Orca Cloud (Profili → Orca Cloud) per vedere i tuoi preset Orca.",expired:"Sessione Orca Cloud scaduta — accedi di nuovo per aggiornare i tuoi preset Orca.",unreachable:"Orca Cloud non è raggiungibile in questo momento. Gli altri preset continuano a funzionare."},bedType:{label:"Piano di stampa",auto:"Auto (usa preset di processo)",coolPlate:"Cool Plate",coolPlateSuperTack:"Cool Plate SuperTack",engineering:"Engineering Plate",highTemp:"High Temp Plate",texturedPEI:"Textured PEI Plate",smoothPEI:"Smooth PEI Plate"}},spoolman:{title:"Integrazione Spoolman",enabled:"Spoolman abilitato",url:"URL Spoolman",connected:"Connesso",disconnected:"Non connesso",testConnection:"Testa connessione",sync:"Sincronizza",syncing:"Sincronizzazione...",lastSync:"Ultima sincronizzazione",linkToSpoolman:"Collega a Spoolman",openInSpoolman:"Apri in Spoolman",unlinkSpool:"Scollega bobina",unlinkConfirmTitle:"Rimuovere bobina?",unlinkConfirmMessage:"Questo rimuoverà la bobina da questo slot. I dati della bobina stessa rimarranno invariati.",selectSpool:"Seleziona bobina",noUnlinkedSpools:"Nessuna bobina disponibile",linkSuccess:"Bobina assegnata con successo",linkFailed:"Impossibile assegnare la bobina",unlinkSuccess:"Bobina rimossa con successo",unlinkFailed:"Impossibile rimuovere la bobina",linkedSpool:"Bobina assegnata",spoolId:"ID bobina",fillSourceLabel:"(Spoolman)",weight:"Peso",remaining:"Rimanente",disableWeightSync:"Disabilita sync peso stimato AMS",disableWeightSyncDesc:"Non aggiornare la capacità rimanente dalle stime AMS. Usalo se preferisci il tracciamento di Spoolman rispetto alle stime AMS. Le nuove bobine useranno comunque la stima AMS come peso iniziale.",reportPartialUsage:"Segnala uso parziale per stampe fallite",reportPartialUsageDesc:"Quando una stampa fallisce o viene annullata, segnala il filamento stimato usato fino a quel punto in base all'avanzamento layer."},inventory:{title:"Inventario Bobine",subtitle:"Gestisci le tue bobine",spoolmanMixedContentTitle:"Spoolman non può essere caricato tramite HTTPS — contenuto misto bloccato dal browser",spoolmanMixedContentBody:"Bambuddy viene servito tramite HTTPS (dietro il tuo reverse proxy), ma l'URL di Spoolman è ancora HTTP. I browser bloccano il contenuto misto per motivi di sicurezza, quindi l'interfaccia Spoolman incorporata non può essere visualizzata. Anche Spoolman deve essere raggiungibile via HTTPS.",spoolmanMixedContentFixReverseProxy:"Metti Spoolman dietro lo stesso reverse proxy di Bambuddy (Traefik / Nginx / Caddy) in HTTPS, poi aggiorna l'URL di Spoolman nelle Impostazioni con il nuovo indirizzo HTTPS.",spoolmanMixedContentFixOpenNewTab:"Come alternativa, apri Spoolman in una nuova scheda via HTTP — le regole sul contenuto misto si applicano solo ai frame incorporati, una scheda autonoma funziona.",spoolmanOpenInNewTab:"Apri Spoolman in una nuova scheda",labels:{title:"Stampa etichette bobine",selectedCount:"{{count}} selezionato",pickSpools:"Scegli per quali bobine stampare le etichette:",searchPlaceholder:"Cerca per nome, marca o #ID",filterByMaterial:"Materiale:",allMaterials:"Tutto",selectVisible:"Seleziona tutti visibili ({{count}})",deselectVisible:"Deseleziona visibili",clearAll:"Cancella tutto",noSpoolsToShow:"Nessuna bobina da mostrare. Modifica il filtro e riprova.",noMatches:"Nessuna bobina corrisponde alla ricerca o al filtro corrente.",printOne:"Stampa etichetta per questa bobina",printLabels:"Stampa etichette…",bulkTitle:"Scegli le bobine da etichettare tra le {{count}} mostrate",noSpoolsTitle:"Nessuna bobina da etichettare",error:"Impossibile generare etichette: {{msg}}",sortBy:{label:"Ordina:",id:"Per ID",color:"Per colore"},templates:{amsHolderSmall:{label:"Supporto AMS — piccolo (74 × 33 mm)",hint:"Un'etichetta per pagina; corrisponde all'etichetta stampabile del modello MakerWorld 752566 (Porta-etichette filamento AMS)."},amsHolderLarge:{label:"Supporto AMS — grande (75 × 55 mm)",hint:"Un'etichetta per pagina; si adatta alla variante cartoncino del porta-etichette filamento AMS. Spazio sufficiente per campione colore, marca, materiale, ID e codice QR."},box40x30:{label:"Etichetta scatola (40 × 30 mm)",hint:"Una etichetta per pagina; misura comune DK/Brother, ideale per etichette di sacchetti filamento e contenitori."},box:{label:"Box label (62 × 29 mm)",hint:"Una etichetta per pagina; dimensionata per Brother PT/QL e piccole etichette Dymo."},averyL7160:{label:"Avery L7160 — A4 sheet (38.1 × 63.5 mm × 21)",hint:"Foglio formato UE; 21 etichette per pagina A4."},avery5160:{label:"Avery 5160 — US Letter sheet (25.4 × 66.7 mm × 30)",hint:"Foglio formato US; 30 etichette per pagina Letter."}}},csv:{importButton:"Importa CSV",exportButton:"Esporta CSV",modalTitle:"Importa bobine da CSV",selectFile:"Scegli un file CSV o trascinalo qui",dragHint:"Intestazione: material (obbligatorio), brand, subtype, color_name, rgba, …",parsing:"Lettura del file…",previewError:"Impossibile leggere il file CSV",validCount:"{{count}} valide",errorCount:"{{count}} con errore",skippedCount:"{{count}} ignorate",colRow:"Riga",colStatus:"Stato",colColor:"Colore",colorResolved:"Colore compilato dal catalogo",colorCrossMaterial:"Colore preso da un materiale diverso — nessuna corrispondenza esatta nel catalogo",duplicateExisting:"Esiste già una bobina con questo materiale, marca e colore — verrà comunque importata come nuova bobina",spoolmanHint:"In modalità Spoolman, usa l'importazione/esportazione CSV integrata di Spoolman.",importValidRows:"Importa {{count}} righe valide",noValidRows:"Nessuna riga valida",importing:"Importazione…",importSuccess:"{{count}} bobine importate",importError:"Importazione non riuscita",exportError:"Esportazione non riuscita"},addSpool:"Aggiungi Bobina",editSpool:"Modifica Bobina",copySpool:"Copia Bobina",material:"Materiale",selectMaterial:"Seleziona materiale...",subtype:"Sottotipo",brand:"Marchio",searchBrand:"Cerca marchio...",useCustomBrand:'Usa "{{brand}}"',useCustomMaterial:"Usa materiale personalizzato: {{material}}",colorName:"Nome Colore",colorNamePlaceholder:"Bianco Giada, Rosso Fuoco...",color:"Colore",hexColor:"Colore Hex",pickColor:"Scegli colore personalizzato",labelWeight:"Peso da Etichetta",coreWeight:"Peso Bobina Vuota",searchSpoolWeight:"Cerca peso bobina...",weightUsed:"Utilizzato",currentWeight:"Peso Rimanente",measuredWeight:"Peso Misurato",spoolName:"Bobina",costPerKg:"Costo per kg",storageLocation:"Posizione di archiviazione",storageLocationPlaceholder:"es. Scaffale A, Cassetto 1",openInInventory:"Apri nell'inventario",measuredWeightError:"Il peso misurato deve essere compreso tra {{min}}g e {{max}}g.",slicerFilament:"Filamento Slicer",slicerFilamentName:"Nome Preset Slicer",slicerPreset:"Preset Slicer",searchPresets:"Cerca preset filamento...",selectedPreset:"Selezionato",noPresetsFound:"Nessun preset trovato",tempOverrides:"Override Temperatura",note:"Nota",notePlaceholder:"Eventuali note aggiuntive su questa bobina...",category:"Categoria",categoryPlaceholder:"es. Produzione, Prototipo, Cliente A",categoryNone:"Senza categoria",storageLocationNone:"Nessuna posizione impostata",lowStockThresholdOverride:"Soglia scorte basse (questa bobina)",lowStockThresholdOverrideHelp:"Lascia vuoto per usare la soglia globale ({{global}}%).",clearRfid:"Cancella tag RFID",rfidCleared:"Tag RFID cancellato",archive:"Archivia",restore:"Ripristina",noSpools:"Ancora nessuna bobina. Aggiungi la tua prima bobina per iniziare.",noAvailableSpools:"Nessuna bobina disponibile. Aggiungi una bobina al tuo inventario o rimuovine l'assegnazione da un altro slot.",kProfiles:"Profili K",addKProfile:"Aggiungi K-Profile",assignSpool:"Assegna Bobina",unassignSpool:"Scollega",assignSuccess:"Bobina assegnata e slot AMS configurato",assignPendingInsert:"Assegnato. Lo slot verrà configurato all'inserimento della bobina.",assignFailed:"Assegnazione bobina fallita",selectSpool:"Seleziona una bobina da assegnare a questo slot",assigned:"Assegnato",assigning:"Assegnazione...",searchSpools:"Cerca bobine...",showAllSpools:"Mostra tutte le bobine",spoolmanSpools:"Bobine Spoolman",allMaterials:"Tutti i Materiali",filterByBrand:"Filtra per marchio...",showArchived:"Mostra archiviate",quickAdd:"Aggiunta rapida (Scorta)",quantity:"Quantità",stock:"Scorta",configured:"Configurata",spoolsCreated:"{{count}} bobine create",spoolsPartiallyCreated:"{{created}} di {{total}} bobine create (alcune non riuscite)",spoolCreated:"Bobina creata",spoolUpdated:"Bobina aggiornata",spoolDeleted:"Bobina eliminata",deepLinkSpoolNotFound:"Bobina non trovata",deepLinkFetchFailed:"Impossibile caricare la bobina — riprova",spoolArchived:"Bobina archiviata",spoolRestored:"Bobina ripristinata",kProfileSaveFailed:"Impossibile salvare le impostazioni del profilo K",syncWeightSpoolNotFound:"Bobina non trovata — potrebbe essere stata eliminata",syncWeightSpoolmanUnreachable:"Spoolman non è raggiungibile — riprovare più tardi",syncWeightFailed:"Sincronizzazione del peso non riuscita",spoolmanUnreachable:"Spoolman non è raggiungibile — riprovare più tardi",deleteSpoolNotFound:"Bobina non trovata — potrebbe essere già stata eliminata",deleteFailed:"Impossibile eliminare la bobina",archiveSpoolNotFound:"Bobina non trovata — potrebbe essere già stata eliminata",archiveFailed:"Impossibile archiviare la bobina",restoreSpoolNotFound:"Bobina non trovata — potrebbe essere già stata eliminata",restoreFailed:"Impossibile ripristinare la bobina",saveFailed:"Impossibile salvare le modifiche",tagClearFailed:"Impossibile cancellare il tag",deleteConfirm:"Sei sicuro di voler eliminare questa bobina? Questa azione non può essere annullata.",archiveConfirm:"Sei sicuro di voler archiviare questa bobina?",advancedSettings:"Impostazioni Avanzate",filamentInfoTab:"Info filamento",paProfileTab:"Profilo PA",filamentInfo:"Filamento",additional:"Aggiuntivo",loadingPresets:"Caricamento preset cloud...",cloudConnected:"Cloud connesso",cloudNotConnected:"Cloud non connesso (valori predefiniti)",recentColors:"Recenti",searchColors:"Cerca colori...",searchResults:"Risultati della ricerca",allColors:"Tutti i colori",commonColors:"Colori comuni",showLess:"Mostra meno",showAll:"Mostra tutto",noColorsFound:"Nessun colore corrisponde alla ricerca",noResults:"Nessun risultato trovato",extraColorsLabel:"Colori extra",extraColorsPlaceholder:"EC984C,#6CD4BC,A66EB9,D87694",extraColorsHint:"Incolla da 2 a 8 stop hex, separati da virgole. Visualizzato come sfumatura.",extraColorsInvalid:"Hex non validi ignorati: {{tokens}}",colorEffectLabel:"Effetto",colorEffect:{none:"Nessuno",sparkle:"Scintillante",wood:"Legno",marble:"Marmo",glow:"Bagliore",matte:"Opaco",silk:"Silk",galaxy:"Galassia",rainbow:"Arcobaleno",metal:"Metallo",translucent:"Traslucido",gradient:"Sfumatura",dualColor:"Bicolore",triColor:"Tricolore",multicolor:"Multicolore"},selectMaterialFirst:"Selezionare prima un materiale nella scheda Info filamento.",noPrintersConfigured:"Nessuna stampante configurata. Aggiungi stampanti per usare i profili PA.",matchingFilter:"Corrispondenti",anyBrand:"Qualsiasi marca",anyVariant:"Qualsiasi variante",autoSelect:"Selezione automatica",matches:"corrispondenze",match:"corrispondenza",noMatches:"Nessuna corrispondenza",connected:"Connessa",offline:"Offline",printerOffline:"La stampante è offline. Connetti per visualizzare i profili di calibrazione.",noKProfilesMatch:"Nessun profilo K corrisponde al filamento selezionato.",leftNozzle:"Ugello sinistro",rightNozzle:"Ugello destro",profilesSelected:"profili di calibrazione selezionati",totalInventory:"Inventario totale",totalConsumed:"Totale consumato",byMaterial:"Per materiale",inPrinter:"In stampante",lowStock:"Scorta bassa",sinceTracking:"Dall'inizio del tracciamento",resetConsumedCounter:"Azzera contatore",resetConsumedCounterTooltip:"Azzera il contatore di grammi consumati per questa bobina. Il peso rimanente non viene modificato.",resetConsumedCounterConfirm:"Azzerare il contatore di grammi consumati di questa bobina? Le stampe future ripartiranno da zero. La bobina, il calcolo del peso rimanente e le impostazioni non vengono modificati.",resetAllConsumedCounters:"Azzera tutti i contatori",resetAllConsumedCountersTooltip:"Azzera il contatore di grammi consumati su ogni bobina. I pesi rimanenti non vengono modificati.",resetAllConsumedCountersConfirm:'Azzerare il contatore di grammi consumati su tutte le {{count}} bobine (incluse quelle archiviate)? La statistica "Totale Consumato" verrà azzerata e le stampe future ripartiranno da zero. Bobine e pesi rimanenti restano invariati.',consumedCounterReset:"Contatore azzerato",allConsumedCountersReset:"Contatore azzerato per {{count}} bobina/e",resetConsumedCounterFailed:"Impossibile azzerare il contatore",loadedInAms:"Caricato in AMS/Est",remaining:"Rimanente",weightCheck:"Controllo Peso",lastWeighed:"Ultima pesatura",neverWeighed:"Mai pesato",search:"Cerca bobine...",showing:"Visualizzazione",to:"a",of:"di",show:"Mostra",spools:"bobine",spool:"bobina",page:"Pagina",noSpoolsMatch:"Nessun risultato trovato",noSpoolsMatchDesc:"Prova a modificare la ricerca o i filtri per trovare quello che cerchi.",active:"Attive",archived:"Archiviate",all:"Tutte",used:"Usato",new:"Nuovo",clearFilters:"Cancella filtri",table:"Tabella",cards:"Schede",net:"Netto",groupSimilar:"Raggruppa",groupedSpools:"{{count}} bobine identiche",groupedRows:"righe",columns:"Colonne",configureColumns:"Configura colonne",configureColumnsDesc:"Trascina per riordinare le colonne o usa le frecce. Attiva/disattiva la visibilità con l'icona dell'occhio.",visible:"visibili",reset:"Ripristina",cancel:"Annulla",applyChanges:"Applica modifiche",moveUp:"Sposta su",moveDown:"Sposta giù",hideColumn:"Nascondi colonna",showColumn:"Mostra colonna",linkToSpool:"Collega a bobina",tagLinked:"Tag collegato alla bobina",tagLinkFailed:"Impossibile collegare il tag",tagAlreadyLinked:"Tag già collegato a un'altra bobina",unknownTag:"Tag RFID sconosciuto rilevato",usageHistory:"Cronologia utilizzo",noUsageHistory:"Nessun utilizzo registrato",printName:"Nome stampa",weightConsumed:"Peso consumato",clearHistory:"Cancella",historyCleared:"Cronologia utilizzo cancellata",fillSourceLabel:"(Inv)",lowStockThresholdError:"La soglia deve essere tra 0.1 e 99.9",assignMismatchTitle:"Materiale non corrispondente",assignMismatchMessage:'Il materiale della bobina selezionata "{{spoolMaterial}}" non corrisponde al materiale del vassoio "{{trayMaterial}}" per {{location}}. Assegnare comunque?',assignMismatchConfirm:"Assegna comunque",assignPartialMismatchMessage:'Il materiale della bobina "{{spoolMaterial}}" è simile ma non corrisponde esattamente a "{{trayMaterial}}" in {{location}}. Vuoi procedere?',assignProfileMismatchMessage:'Il profilo della bobina "{{spoolProfile}}" non corrisponde al profilo del vassoio "{{trayProfile}}" in {{location}}. Vuoi procedere?',assignReconfigureNote:"Lo slot AMS verrà riconfigurato per utilizzare il profilo della bobina.",spoolmanFilamentCatalog:"Catalogo filamenti Spoolman",pickFromSpoolmanCatalog:"Scegli dal catalogo Spoolman…",spoolmanFilamentSelected:"Filamento selezionato dal catalogo Spoolman",spoolmanFilamentUnlinked:"Collegamento al catalogo filamenti rimosso",noSpoolmanFilaments:"Nessun filamento trovato nel catalogo Spoolman",spoolmanFilamentColorSwatch:"Colore del filamento",spoolWeightManagedBySpoolman:"Il peso della bobina vuota è gestito per tipo di filamento in Spoolman",spoolmanCatalogLoadFailed:"Impossibile caricare il catalogo Spoolman"},timelapse:{title:"Timelapse",create:"Crea timelapse",download:"Scarica",delete:"Elimina",preview:"Anteprima",frameRate:"Frame rate",quality:"Qualità",processing:"Elaborazione...",noTimelapses:"Nessun timelapse disponibile"},ams:{title:"AMS",slot:"Slot",empty:"Vuoto",emptySlot:"Slot vuoto",slotEmpty:"Vuoto",slotUnconfigured:"?",emptySlotReset:"Nessuna bobina assegnata",unknown:"Sconosciuto",humidity:"Umidità",temperature:"Temperatura",filamentType:"Tipo filamento",filamentColor:"Colore",remaining:"Rimanente",history:"Cronologia AMS",noHistory:"Nessuna cronologia disponibile",configureSlot:"Configura slot",externalSpool:"Bobina esterna",profile:"Profilo",kFactor:"Fattore K",fill:"Livello",configure:"Configura",used:"utilizzato",remainingUnit:"rimanente"},printModal:{title:"Avvia stampa",selectPrinter:"Seleziona stampante",selectPlate:"Seleziona piatto",filamentMapping:"Mappatura filamento",totalCost:"Costo totale:",slotRemainingShort:" - {{grams}}g rim.",printSettings:"Impostazioni stampa",bedLeveling:"Livellamento piatto",flowCalibration:"Calibrazione flusso",vibrationCalibration:"Calibrazione vibrazioni",layerInspection:"Ispezione primo layer",timelapse:"Timelapse",startPrint:"Avvia stampa",addToQueue:"Aggiungi alla coda",cancel:"Annulla",noPrintersAvailable:"Nessuna stampante disponibile",printerBusy:"Stampante occupata",printerOffline:"Stampante offline",sameTypeDifferentColor:"Stesso tipo, colore diverso",filamentTypeNotLoaded:"Tipo di filamento non caricato",openCalendar:"Apri calendario",leftNozzle:"L",rightNozzle:"R",leftNozzleTooltip:"Ugello sinistro",rightNozzleTooltip:"Ugello destro",filamentOverride:"Sostituzione filamento",filamentOverrideHint:"Sostituisci opzionalmente i filamenti per l'assegnazione basata sul modello. Lo scheduler abbinerà i filamenti selezionati invece dei valori 3MF originali.",originalFilament:"Originale",overrideWith:"Sostituisci con",resetToOriginal:"Ripristina originale",insufficientFilamentTitle:"Filamento insufficiente",insufficientFilamentMessage:"Alcune bobine assegnate hanno meno filamento rimanente di quanto necessario per questa stampa:",insufficientFilamentLine:"{{printer}} - {{slot}}: necessita di {{required}}g, rimanenti {{remaining}}g",printAnyway:"Stampa comunque",forceColorMatch:"Forza corrispondenza colore",staggerPrinterStarts:"Scaglionare avvii",staggerGroupSize:"Dimensione gruppo",staggerInterval:"Intervallo (min)",staggerPreview:"{{printers}} stampanti → {{groups}} gruppi di {{size}}, avvio ogni {{interval}} min",staggerLastGroup:"ultimo gruppo: {{count}}",staggerTotal:"totale: {{minutes}} min",staggerToPrinters:"Scagliona a {{count}} stampanti",gcodeInjection:"Inietta G-code auto-stampa"},backup:{includesEncryptionKey:"I backup locali includono il file della chiave di crittografia MFA (DATA_DIR/.mfa_encryption_key), quindi un backup ZIP è autonomo. Tratta lo ZIP come sensibile — chiunque abbia il file può decifrare i client secret OIDC e i segreti TOTP contenuti.",title:"Backup e ripristino",createBackup:"Crea backup",restoreBackup:"Ripristina backup",restoreDescription:"Sostituisci tutti i dati da un file di backup",downloadBackup:"Scarica backup",uploadBackup:"Carica backup",lastBackup:"Ultimo backup",autoBackup:"Backup automatico",backupNow:"Esegui backup ora",restoreWarning:"Avviso: il ripristino sovrascriverà tutti i dati attuali.",includeArchives:"Includi archivi",includeSettings:"Includi impostazioni",includeProfiles:"Includi profili",backupSuccess:"Backup creato con successo",restoreSuccess:"Backup ripristinato con successo",backupFailed:"Backup fallito",restoreFailed:"Ripristino fallito",restoreNote:"La stampante virtuale verrà fermata durante il ripristino",githubBackup:"Backup GitHub",enabled:"Abilitato",cloudLoginRequired:"Accesso Bambu Cloud richiesto. Accedi in Profili → Profili Cloud per abilitare il backup GitHub.",cloudLoginRequiredShort:"Accesso Cloud richiesto",githubDescription:"Sincronizza automaticamente i tuoi profili con un repository GitHub privato per backup e cronologia delle versioni.",repoIsPrivate:"Il repository è privato — è sicuro effettuare il backup.",repoIsPublicWarning:"Il repository è PUBBLICO. I backup di Bambuddy includono credenziali MQTT, token di Home Assistant, token di Prometheus, la tua e-mail Bambu Cloud e i codici di accesso alle stampanti tramite K-profile. Il salvataggio è bloccato finché non rendi privato il repository nelle impostazioni del tuo provider.",repoVisibilityUnknown:"Impossibile determinare la visibilità del repository. Bambuddy rifiuta di eseguire backup su qualsiasi target non confermato come privato; il salvataggio sarà bloccato.",repositoryUrl:"URL del repository",repoUrlPlaceholderGitHub:"https://github.com/username/repo-name",repoUrlPlaceholderGitea:"https://gitea.example.com/username/repo-name",repoUrlPlaceholderForgejo:"https://forgejo.example.com/username/repo-name",repoUrlPlaceholderGitLab:"https://gitlab.com/username/repo-name",allowInsecureHttp:"Consenti HTTP non sicuro",allowInsecureHttpHint:"Abilita per istanze self-hosted su reti private senza TLS",personalAccessToken:"Token di accesso personale",tokenSaved:"(salvato)",enterNewToken:"Inserisci un nuovo token per aggiornare",tokenHint:"Token a grana fine con permesso di lettura/scrittura dei contenuti",branch:"Branch",provider:"Provider Git",providerGitHub:"GitHub",providerGitLab:"GitLab",providerGitea:"Gitea",providerForgejo:"Forgejo",manualOnly:"Solo manuale",hourly:"Ogni ora",daily:"Giornaliero",weekly:"Settimanale",includeInBackup:"Includi nel backup",kProfiles:"K-Profili",kProfilesDescription:"Calibrazione dell'avanzamento pressione dalle stampanti connesse",noPrintersConnected:"Nessuna stampante connessa",printersConnected:"{{connected}}/{{total}} connesse",cloudProfiles:"Profili Cloud",cloudProfilesDescription:"Preset di filamento, stampante e processo da Bambu Cloud",appSettings:"Impostazioni App",appSettingsDescription:"Configurazione Bambuddy (database completo)",spoolInventory:"Inventario bobine",spoolInventoryDescription:"Bobine di filamento, cronologia utilizzo e tracciamento costi",printArchives:"Archivi di stampa",printArchivesDescription:"Metadati della cronologia di stampa (nessun file gcode/3MF)",lastBackupAt:"Ultimo backup:",noBackupsYet:"Nessun backup ancora",next:"Prossimo:",startingBackup:"Avvio del backup...",test:"Test",enableBackup:"Abilita backup",testConnection:"Testa connessione",enterRepoUrl:"Inserisci l'URL del repository",enterRepoAndToken:"Inserisci l'URL del repository e il token di accesso",repoRequired:"L'URL del repository è obbligatorio",tokenRequired:"Il token di accesso è obbligatorio",githubBackupEnabled:"Backup GitHub abilitato",tokenUpdated:"Token aggiornato",settingsSaved:"Impostazioni salvate",failedToSave:"Salvataggio fallito: {{message}}",backupCompleteFiles:"Backup completato - {{count}} file aggiornati",backupSkippedNoChanges:"Backup saltato - nessuna modifica",backupFailed2:"Backup fallito: {{message}}",clearedLogs:"{{count}} log eliminati",failedToClearLogs:"Eliminazione log fallita: {{message}}",history:"Cronologia",clear:"Cancella",date:"Data",status:"Stato",commit:"Commit",localBackup:"Backup locale",localBackupDescription:"Crea un backup completo dei tuoi dati Bambuddy includendo database, archivi, upload e tutti i file.",downloadBackupLabel:"Scarica backup",completeBackupZip:"Backup completo: database + tutti i file (ZIP)",download:"Scarica",preparingBackup:"Preparazione del backup...",creatingArchive:"Creazione dell'archivio di backup... Potrebbe richiedere del tempo per archivi di grandi dimensioni.",downloadingFile:"Download del file di backup...",backupDownloaded:"Backup scaricato con successo",failedToCreateBackup:"Creazione del backup fallita: {{message}}",restore:"Ripristina",restoreReplacesAll:"Il ripristino sostituisce tutti i dati.",restoreReplacesAllDetail:"Il database e i file attuali verranno completamente sostituiti. È necessario un riavvio dopo il ripristino.",restoreConfirmTitle:"Ripristina backup",restoreConfirmMessage:`Sei sicuro di voler ripristinare da "{{filename}}"? Questo sostituirà completamente il tuo database e tutti i file. L'applicazione dovrà essere riavviata dopo il ripristino.`,restoreConfirmButton:"Ripristina backup",uploadingFile:"Caricamento del file di backup...",backupRestoredRestart:"Backup ripristinato. Riavvia Bambuddy.",failedToRestore:"Ripristino del backup fallito. Controlla il formato del file.",reloadNow:"Ricarica ora",creatingBackup:"Creazione del backup",restoringBackup:"Ripristino del backup",preparing:"Preparazione...",processing:"Elaborazione...",doNotClosePage:"Non chiudere questa pagina e non navigare altrove. Questa operazione potrebbe richiedere diversi minuti per backup di grandi dimensioni.",restoring:"Ripristino in corso...",restoreComplete:"Ripristino completato",restoreFailed2:"Ripristino fallito",importSettings:"Importa impostazioni da un file di backup",pleaseWaitRestoring:"Attendere durante il ripristino dei dati",selectBackupFile:"Clicca per selezionare un file di backup (.json o .zip)",duplicateHandling:"Come funziona la gestione dei duplicati:",matchPrinters:"Stampanti",matchPrintersBy:"corrispondenza per numero di serie",matchSmartPlugs:"Smart Plug",matchSmartPlugsBy:"corrispondenza per indirizzo IP",matchNotificationProviders:"Provider di notifica",matchNotificationProvidersBy:"corrispondenza per nome",matchFilaments:"Filamenti",matchFilamentsBy:"corrispondenza per nome + tipo + marca",matchArchives:"Archivi",matchArchivesBy:"corrispondenza per hash del contenuto (sempre saltato)",matchPendingUploads:"Upload in sospeso",matchPendingUploadsBy:"corrispondenza per nome file",matchSettingsTemplates:"Impostazioni e modelli",matchSettingsTemplatesBy:"sempre sovrascritti",replaceExisting:"Sostituisci dati esistenti",keepExisting:"Mantieni dati esistenti",overwriteDescription:"Sovrascrivi gli elementi già esistenti con i dati del backup",keepDescription:"Ripristina solo gli elementi che non esistono ancora",overwriteCaution:"Attenzione:",overwriteWarning:"La sovrascrittura sostituirà le configurazioni attuali con i dati del backup. I codici di accesso delle stampanti non vengono mai sovrascritti per sicurezza.",cancel:"Annulla",processingBackup:"Elaborazione del file di backup...",itemsRestored:"Elementi ripristinati",itemsSkipped:"Elementi saltati",restored:"Ripristinati",skippedAlreadyExist:"Saltati (già esistenti)",filesCategory:"File (3MF, miniature, ecc.)",andMore:"...e altri {{count}}",newApiKeysGenerated:"Nuove chiavi API generate",keysShownOnce:"Queste chiavi vengono mostrate solo una volta. Copiale ora!",copy:"Copia",noDataFound:"Nessun dato da ripristinare trovato nel file di backup.",close:"Chiudi",scheduledBackup:"Backup pianificati",scheduledBackupDescription:"Crea automaticamente snapshot di backup secondo una pianificazione. La directory di output può essere montata su un NAS o storage esterno.",frequency:"Frequenza",backupTime:"Tempo",retention:"Conservazione",retentionDescription:"Numero di backup da conservare",outputPath:"Percorso di output",outputPathPlaceholder:"Predefinito: {{path}}",outputPathDescription:"Lasciare vuoto per la posizione predefinita",runNow:"Esegui ora",backupFiles:"File di backup",noScheduledBackups:"Nessun backup ancora",deleteBackup:"Elimina",deleteBackupConfirm:"Eliminare questo file di backup?",backupRunning:"Backup in corso...",scheduledBackupComplete:"Backup completato con successo",scheduledBackupFailed:"Backup fallito",nextBackup:"Prossimo backup",backupSize:"Dimensione",localTimeHint:"Ora locale ({{tz}})",defaultPathLabel:"Predefinito:",categories:{settings:"Impostazioni",notification_providers:"Provider di notifica",notification_templates:"Modelli di notifica",smart_plugs:"Smart Plug",printers:"Stampanti",filaments:"Filamenti",maintenance_types:"Tipi di manutenzione",archives:"Archivi",projects:"Progetti",pending_uploads:"Upload in sospeso",external_links:"Link esterni",api_keys:"Chiavi API"}},tags:{title:"Tag",addTag:"Aggiungi tag",editTag:"Modifica tag",deleteTag:"Elimina tag",tagName:"Nome tag",tagColor:"Colore tag",noTags:"Nessun tag",deleteConfirm:"Sei sicuro di voler eliminare questo tag?",manageTags:"Gestisci tag"},uploadModal:{title:"Carica file 3MF",dragDrop:"Trascina e rilascia file .3mf qui",or:"o",browseFiles:"Sfoglia file",extractionInfo:"Il modello stampante sarà estratto automaticamente dai metadati del file 3MF.",uploaded:"caricati",failed:"falliti",uploading:"Caricamento...",upload:"Carica",uploadFailed:"Caricamento fallito"},editArchive:{title:"Modifica archivio",name:"Nome",namePlaceholder:"Nome stampa",printer:"Stampante",noPrinter:"Nessuna stampante",project:"Progetto",noProject:"Nessun progetto",itemsPrinted:"Elementi stampati",itemsPrintedHelp:"Numero di elementi prodotti in questo job di stampa",notes:"Note",notesPlaceholder:"Aggiungi note su questa stampa...",externalLink:"Link esterno",externalLinkPlaceholder:"https://printables.com/model/...",externalLinkHelp:"Link a Printables, Thingiverse o altra fonte",tags:"Tag",tagsPlaceholder:"Aggiungi tag...",addMoreTags:"Aggiungi altri tag...",matchingTags:'Tag corrispondenti "{{query}}"',existingTags:"Tag esistenti",clickToAdd:"(clicca per aggiungere)",status:"Stato",failureReason:"Motivo fallimento",selectReason:"Seleziona motivo...",photos:"Foto del risultato stampato",photosHelp:"Clicca + per aggiungere foto del risultato stampato",printResult:"Risultato stampa",saving:"Salvataggio...",failureReasons:{adhesionFailure:"Fallimento adesione",spaghettiDetached:"Spaghetti / staccato",layerShift:"Spostamento layer",cloggedNozzle:"Ugello intasato",filamentRunout:"Filamento esaurito",warping:"Deformazione",stringing:"Filamento",underExtrusion:"Sotto-estrusione",powerFailure:"Mancanza corrente",userCancelled:"Annullato dall'utente",other:"Altro"},statuses:{completed:"Completato",failed:"Fallito",aborted:"Annullato",printing:"In stampa"}},kProfiles:{title:"Profili K",noPrintersConfigured:"Nessuna stampante configurata",addPrinterInSettings:"Aggiungi una stampante in Impostazioni per gestire i K-profiles",noActivePrinters:"Nessuna stampante attiva",enablePrinterConnection:"Abilita una connessione stampante per vedere i K-profiles",loadingProfiles:"Caricamento K-Profiles...",printerOffline:"Stampante offline",printerOfflineDesc:"La stampante selezionata non e connessa. Accendila per vedere i K-profiles.",noMatchingProfiles:"Nessun profilo corrispondente",noMatchingProfilesDesc:"Nessun profilo corrisponde ai criteri di ricerca",noKProfiles:"Nessun K-Profile",noKProfilesDesc:"Nessun profilo pressure advance per ugello da {{diameter}}mm",createFirstProfile:"Crea primo profilo",printer:"Stampante",nozzle:"Ugello",refresh:"Aggiorna",addProfile:"Aggiungi profilo",export:"Esporta",import:"Importa",select:"Seleziona",selectAll:"Seleziona tutto",delete:"Elimina",searchPlaceholder:"Cerca per nome o filamento...",allExtruders:"Tutti gli estrusori",leftOnly:"Solo sinistro",rightOnly:"Solo destro",allFlow:"Tutto flow",hfOnly:"Solo HF",sOnly:"Solo S",sortName:"Ordina: Nome",sortKValue:"Ordina: K-Value",sortFilament:"Ordina: Filamento",leftExtruder:"Estrusore sinistro",rightExtruder:"Estrusore destro",modal:{addTitle:"Aggiungi K-Profile",editTitle:"Modifica K-Profile",profileName:"Nome profilo",profileNamePlaceholder:"Il mio profilo PLA",kValue:"Valore K",kValuePlaceholder:"0.020",kValueHelp:"Intervallo tipico: 0.01 - 0.06 per PLA, 0.02 - 0.10 per PETG",filament:"Filamento",selectFilament:"Seleziona filamento...",noFilamentsHelp:"Nessun filamento trovato. Crea prima un K-profile in Bambu Studio.",flowType:"Tipo flow",highFlow:"Alto flusso",standard:"Standard",nozzleSize:"Dimensione ugello",extruder:"Estrusore",extruders:"Estrusori",left:"Sinistra",right:"Destra",notes:"Note (salvate localmente)",notesPlaceholder:"Aggiungi note su questo profilo...",notesHelp:"Le note sono salvate in Bambuddy, non sulla stampante",syncing:"Sincronizzazione con stampante...",savingExtruder:"Salvataggio su estrusore {{current}}/{{total}}...",pleaseWait:"Attendere"},deleteConfirm:{title:"Elimina profilo",cannotUndo:"Questo non può essere annullato",message:'Sei sicuro di voler eliminare "{{name}}" dalla stampante?'},bulkDelete:{title:"Elimina profili",cannotUndo:"Questo non può essere annullato",message:"Sei sicuro di voler eliminare {{count}} profili selezionati dalla stampante?"},toast:{profileSaved:"K-profile salvato",profilesSaved:"K-profile salvato su {{count}} estrusori",selectAtLeastOneExtruder:"Seleziona almeno un estrusore",profileDeleted:"K-profile eliminato",profilesDeleted:"Eliminati {{count}} profili",exportedProfiles:"Esportati {{count}} profili",importedProfiles:"Importati {{count}} di {{total}} profili",noProfilesToExport:"Nessun profilo da esportare",invalidFileFormat:"Formato file non valido",failedToParseImport:"Parsing file import fallito",failedToSaveBatch:"Salvataggio K-profiles fallito",noteSaved:"Nota salvata",failedToSaveNote:"Salvataggio nota fallito"},permission:{noRead:"Non hai il permesso di aggiornare i profili",noCreate:"Non hai il permesso di aggiungere profili",noUpdate:"Non hai il permesso di aggiornare K-profiles",noDelete:"Non hai il permesso di eliminare K-profiles",noExport:"Non hai il permesso di esportare profili",noImport:"Non hai il permesso di importare profili"}},virtualPrinter:{title:"Stampante virtuale",running:"In esecuzione",stopped:"Ferma",description:{default:"Abilita una stampante virtuale che appare in Bambu Studio e OrcaSlicer. I file inviati a questa stampante saranno archiviati senza stampare.",proxy:"Abilita un proxy che inoltra il traffico slicer a una stampante reale, permettendo la stampa remota su qualsiasi rete."},enable:{title:"Abilita stampante virtuale",visibleInSlicer:'Visibile come "Bambuddy" nella ricerca slicer',proxyingTo:"In proxy verso {{name}}",notActive:"Non attivo"},model:{title:"Modello stampante",description:"Seleziona il modello stampante da emulare.",restartWarning:"Cambiare il modello riavviera la stampante virtuale"},accessCode:{title:"Codice accesso",isSet:"Codice accesso impostato",notSet:"Nessun codice accesso impostato - richiesto per abilitare",placeholder:"Inserisci codice 8 caratteri",placeholderChange:"Inserisci nuovo codice per cambiare",hint:"Deve essere esattamente 8 caratteri. Usato dagli slicer per autenticarsi.",charCount:"({{count}}/8)",inheritedFromTarget:"Ereditato dalla stampante target",derivedFromTargetHint:"Usa il codice di accesso della stampante target. Il bridge inoltra l'autenticazione dello slicer alla stampante reale, quindi i codici devono corrispondere — modifica il codice nelle impostazioni della stampante per cambiarlo.",reveal:"Mostra codice accesso",hide:"Nascondi codice accesso"},targetPrinter:{title:"Stampante target",configured:"Target proxy configurato",notConfigured:"Nessuna stampante target selezionata - richiesta per modalita proxy",placeholder:"Seleziona una stampante...",hint:"Seleziona la stampante a cui fare proxy. La stampante deve essere in modalita LAN.",noPrinters:"Nessuna stampante configurata. Aggiungi una stampante per usare la modalita proxy."},remoteInterface:{title:"Sovrascrittura interfaccia di rete",configured:"Sovrascrittura interfaccia attiva",optional:"Opzionale - usare se l'IP rilevato automaticamente e sbagliato (es. piu NIC, Docker, VPN)",placeholder:"Rilevamento automatico (predefinito)...",hint:"Sovrascrive l'indirizzo IP pubblicizzato via SSDP e usato nel certificato TLS. Utile quando Bambuddy ha piu interfacce di rete."},mode:{title:"Modalita",archive:"Archivio",archiveDesc:"Archivia subito i file",review:"Revisione",reviewDesc:"Rivedi prima di archiviare",queue:"Coda",queueDesc:"Archivia e aggiungi alla coda",proxy:"Proxy",proxyDesc:"Inoltra a stampante reale"},autoDispatch:{title:"Avvio automatico",description:"Avvia automaticamente le stampe aggiunte alla coda. Se disattivato, le stampe attendono l'avvio manuale."},queueForceColorMatch:{title:"Forza corrispondenza colori",description:"Rifiuta di inviare a una stampante che non ha esattamente il tipo di filamento e il colore caricato. Disattivato per impostazione predefinita — senza questo, la coda usa solo la corrispondenza per modello e potrebbe scegliere una stampante con il colore sbagliato."},tailscaleDisabled:{title:"Integrazione Tailscale",description:"Abilita per contrassegnare questo VP come esposto tramite Tailscale. Mostra l'indirizzo Tailscale dell'host così sai quale IP incollare nello slicer. Il passo di importazione CA è invariato — questo toggle non ha effetto sui certificati."},setupRequired:{title:"Configurazione necessaria",description:"La stampante virtuale richiede configurazioni di sistema aggiuntive prima di funzionare. Include port forwarding, regole firewall e impostazioni specifiche della piattaforma.",readGuide:"Leggi la guida prima di abilitare"},howItWorks:{title:"Come funziona",step1:"Sulla stessa LAN, le stampanti virtuali appaiono automaticamente nel tuo slicer (Bambu Studio / OrcaSlicer). Da altre reti, aggiungile manualmente tramite indirizzo IP e codice di accesso.",step2:'In modalità Archivio, Revisione e Coda, usa il pulsante "Invia" nel tuo slicer per caricare file 3MF su Bambuddy. Lo slicer mostrerà "Stampa riuscita" — il file viene salvato, non stampato.',step3:"In modalità Proxy, la stampante virtuale inoltra tutto il traffico a una stampante reale — le stampe partono immediatamente come con una connessione diretta."},status:{title:"Dettagli stato",printerName:"Nome stampante",model:"Modello",serialNumber:"Numero seriale",mode:"Modalita",pendingFiles:"File in sospeso",targetPrinter:"Stampante target",ftpPort:"Porta FTP",mqttPort:"Porta MQTT",ftpConnections:"Connessioni FTP",mqttConnections:"Connessioni MQTT"},toast:{updated:"Impostazioni stampante virtuale aggiornate",failedToUpdate:"Aggiornamento impostazioni fallito",copyFailed:"Copia non riuscita — seleziona il testo manualmente",accessCodeRequired:"Imposta prima un codice accesso",targetPrinterRequired:"Seleziona prima una stampante target",bindIpRequired:"Impostare prima un indirizzo IP",accessCodeEmpty:"Il codice accesso non può essere vuoto",accessCodeLength:"Il codice accesso deve essere esattamente 8 caratteri",targetCodeChangedRebind:"Il codice di accesso ora corrisponde alla nuova stampante target. Ri-aggiungi questo dispositivo nel tuo slicer per acquisire il nuovo codice.",created:"Stampante virtuale creata",failedToCreate:"Impossibile creare la stampante virtuale",deleted:"Stampante virtuale eliminata",failedToDelete:"Impossibile eliminare la stampante virtuale"},list:{title:"Stampanti virtuali",add:"Aggiungi",addFirst:"Aggiungi stampante virtuale",empty:"Nessuna stampante virtuale configurata. Aggiungine una per iniziare."},bindIp:{title:"Interfaccia di rete",placeholder:"Seleziona interfaccia...",hint:"Interfaccia di rete a cui questa stampante virtuale si collega. Deve essere unica per stampante."},proxy:{accessCodeHint:"In modalita proxy, usa il codice di accesso della stampante di destinazione nello slicer. La connessione viene inoltrata in modo trasparente alla stampante reale."},addDialog:{title:"Aggiungi stampante virtuale",name:"Nome",hint:"Potrai configurare il codice di accesso, la stampante di destinazione e altre impostazioni dopo la creazione.",create:"Crea"},deleteConfirm:{title:"Elimina stampante virtuale",message:'Sei sicuro di voler eliminare "{{name}}"? Tutti i servizi di questa stampante verranno interrotti.'},archiveNameSource:{title:"Origine nome archivio",description:'Scegli come vengono nominati i nuovi archivi quando i file arrivano tramite la stampante virtuale. "Metadati" utilizza il titolo incorporato nello slicer dal 3MF (default). "Nome file" utilizza il nome che Bambu Studio ha inviato via FTP. Nota: Bambu Studio sovrascrive il nome digitato nella finestra "invia a stampante" con il campo Titolo del 3MF quando presente, quindi entrambe le modalità producono spesso la stessa stringa.',metadata:"Metadati",filename:"Nome file"},caCert:{title:"Certificato dello slicer",description:"Le stampanti virtuali usano un certificato TLS firmato dalla CA di Bambuddy. Importa questo certificato CA nell'archivio attendibile del tuo slicer una sola volta affinché accetti la connessione — senza doverlo copiare dalla riga di comando.",copy:"Copia",copied:"Copiato",download:"Scarica",fingerprint:"SHA-256"}},modelViewer:{openInSlicer:"Apri nello slicer",tabs:{model:"Modello 3D",gcode:"Anteprima G-code"},notAvailable:"non disponibile",notSliced:"non sezionato",plates:"Piatti",allPlates:"Tutti i piatti",plateNumber:"Piatto {{number}}",plateCount:"{{count}} piatto",plateCount_other:"{{count}} piatti",objectCount:"{{count}} oggetto",objectCount_other:"{{count}} oggetti",filamentCount:"{{count}} filamento",filamentCount_other:"{{count}} filamenti",eta:"ETA {{minutes}} min",noPreview:"Nessuna anteprima disponibile per questo file",pagination:{pageOf:"Pagina {{current}} di {{total}}",prev:"Prec",next:"Succ"},errors:{failedToLoad:"Caricamento file fallito",noMeshes:"Nessuna mesh trovata nel file 3MF",unsupportedFormat:"Formato file non supportato"}},maintenanceDescriptions:{lubricateCarbonRods:"Applica lubrificante alle aste in carbonio per un movimento fluido",lubricateRails:"Applica lubrificante alle guide lineari per un movimento fluido",cleanNozzle:"Pulisci hotend e ugello per prevenire intasamenti",checkBelts:"Verifica tensione cinghie per stampe accurate",cleanBuildPlate:"Pulisci il piatto per migliorare l'adesione",checkExtruder:"Ispeziona ingranaggi estrusore per usura",checkCooling:"Assicurati che le ventole di raffreddamento funzionino",generalInspection:"Ispezione generale stampante",cleanCarbonRods:"Pulisci le aste in carbonio per ridurre attrito",lubricateSteelRods:"Applica lubrificante alle aste in acciaio per un movimento fluido",cleanSteelRods:"Pulisci le aste in acciaio per ridurre attrito",cleanLinearRails:"Pulisci le guide lineari per rimuovere polvere e detriti",checkPtfeTube:"Ispeziona il tubo PTFE per usura o danni",replaceHepaFilter:"Sostituisci filtro HEPA per qualità aria",replaceCarbonFilter:"Sostituisci filtro a carbone attivo",lubricateLeftNozzleRail:"Lubrifica guida ugello sinistro (serie H2)"},smartPlugs:{offline:"Offline",admin:"Amministrazione",openPlugAdminPage:"Apri pagina amministrazione presa",deleteSmartPlug:"Elimina presa smart",turnOnSmartPlug:"Accendi presa smart",turnOffSmartPlug:"Spegni presa smart",turnOn:"Accendi",turnOff:"Spegni",addSmartPlug:{scanningNetwork:"Scansione rete...",chooseEntity:"Scegli un'entità...",connectionFailed:"Connessione fallita",searchEntities:"Cerca entità...",searchPowerSensors:"Cerca sensori di potenza...",searchEnergySensors:"Cerca sensori di energia...",placeholders:{plugName:"Presa soggiorno",mqttStateOnValue:"ON, true, 1",mqttSameAsPower:"Stesso del topic potenza, o diverso"}},linkedTo:"Collegato a:",monitorOnly:"Solo monitoraggio",alerts:"Avvisi",scheduleOn:"Alle {{time}}",scheduleOff:"Spento {{time}}",on:"On",off:"Spento",power:"Potenza",kwhToday:"kWh Oggi",settings:"Impostazioni",automationSettings:"Impostazioni automazione",showInSwitchbar:"Mostra nella barra interruttori",quickAccessSidebar:"Accesso rapido dalla barra laterale",enabled:"Abilitato",enableAutomation:"Abilita automazione per questa presa",autoOn:"Auto On",autoOnDescription:"Accendi quando inizia la stampa",autoOff:"Auto Off",autoOffDescription:"Spegni quando la stampa è completata (una tantum)",autoOffPersistent:"Mantieni attivo",autoOffPersistentDescription:"Resta attivo tra le stampe invece di una tantum",autoOffAfterDrying:"Spegni dopo asciugatura",autoOffAfterDryingDescription:"Spegni al termine dell'asciugatura AMS",delayAfterDryingMinutes:"Ritardo dopo asciugatura (minuti)",turnOffDelayMode:"Modalità ritardo spegnimento",time:"Tempo",temp:"Temp.",delayMinutes:"Ritardo (minuti)",tempThreshold:"Soglia temperatura (°C)",tempThresholdDescription:"Si spegne quando l'ugello si raffredda sotto questa temperatura",edit:"Modifica",deleteConfirm:'Sei sicuro di voler eliminare "{{name}}"? Questa azione non può essere annullata.',turnOnConfirm:'Sei sicuro di voler accendere "{{name}}"?',turnOffConfirm:`Sei sicuro di voler spegnere "{{name}}"? Questo interromperà l'alimentazione del dispositivo collegato.`,failedToTurn:'Impossibile {{action}} "{{name}}"',unknown:"Sconosciuto",addTitle:"Aggiungi presa smart",editTitle:"Modifica presa smart",stopScanning:"Interrompi scansione",discoverTasmota:"Scopri dispositivi Tasmota",foundDevices:"{{count}} dispositivo/i trovato/i - clicca per selezionare:",noDevicesFound:"Nessun dispositivo Tasmota trovato nella rete",haNotConfigured:"Home Assistant non è configurato. Configuralo in",haSettingsPath:"Impostazioni → Rete → Home Assistant",selectEntity:"Seleziona entità *",ipAddress:"Indirizzo IP *",nameLabel:"Nome *",username:"Nome utente",password:"Password",authHint:"Lascia vuoto se il tuo dispositivo Tasmota non richiede autenticazione",linkToPrinter:"Collega alla stampante",noPrinter:"Nessuna stampante (solo controllo manuale)",linkingDescription:"Il collegamento abilita accensione/spegnimento automatico all'inizio/fine stampa",powerAlerts:"Avvisi potenza",alertAbove:"Avviso se sopra (W)",alertBelow:"Avviso se sotto (W)",alertDescription:"Ricevi notifiche quando il consumo supera queste soglie. Lascia vuoto per disabilitare quella direzione.",dailySchedule:"Programma giornaliero",turnOnAt:"Accendi alle",turnOffAt:"Spegni alle",scheduleDescription:"Accendi/spegni automaticamente la presa a questi orari ogni giorno. Lascia vuoto per saltare quell'azione.",showOnPrinterCard:"Mostra sulla scheda stampante",displayOnPrinterCard:"Mostra pulsante sulla scheda stampante",connectedResult:"Connesso!",deviceLabel:"Dispositivo: {{name}} - ",stateLabel:"Stato: {{state}}",test:"Test",delete:"Elimina",save:"Salva",add:"Aggiungi",cancel:"Annulla",failedToStartScan:"Impossibile avviare la scansione",nameRequired:"Il nome è obbligatorio",entityRequired:"L'entità è obbligatoria per le prese Home Assistant",mqttTopicRequired:"Almeno un topic MQTT deve essere configurato per potenza, energia o monitoraggio stato",loadingEntities:"Caricamento entità...",loading:"Caricamento...",failedToLoadEntities:"Impossibile caricare le entità: {{error}}",noEntitiesMatching:'Nessuna entità trovata corrispondente a "{{search}}"',noEntitiesAvailable:"Nessuna entità disponibile",searchingEntities:"Ricerca in tutte le entità ({{count}} trovate)",showingEntities:"Mostrando switch, light, input_boolean ({{count}} disponibili)",energyMonitoringOptional:"Monitoraggio energia (Opzionale)",energyMonitoringHint:"Cerca e seleziona i sensori che forniscono dati di potenza/energia.",powerSensorW:"Sensore potenza (W)",energyTodayKwh:"Energia oggi (kWh)",totalEnergyKwh:"Energia totale (kWh)",noMatchingSensors:"Nessun sensore corrispondente",none:"Nessuno",mqttNotConfigured:"Broker MQTT non configurato. Imposta l'indirizzo del broker in",mqttSettingsPath:"Impostazioni → Rete → Pubblicazione MQTT",mqttNotConfiguredSuffix:"(non è necessario abilitare la pubblicazione, basta inserire i dettagli del broker).",mqttMonitorOnlyDescription:"Le prese MQTT ricevono dati di potenza/energia tramite sottoscrizione MQTT. Il controllo on/off non è disponibile - usa il tuo broker MQTT o sistema domotico.",powerMonitoring:"Monitoraggio potenza",energyMonitoring:"Monitoraggio energia",stateMonitoring:"Monitoraggio stato",optional:"opzionale",topic:"Argomento",jsonPath:"Percorso JSON",multiplier:"Moltiplicatore",onValue:"Valore ON",mqttPowerHint:`Il percorso JSON estrae il valore dal payload JSON (es. "power_l1"). Lascia vuoto se il topic pubblica valori numerici grezzi.
+Usa moltiplicatore 0.001 per mW→W, 1000 per kW→W.`,mqttEnergyHint:`Il percorso JSON estrae il valore dal payload JSON. Lascia vuoto per valori grezzi.
+Usa moltiplicatore 0.001 per Wh→kWh, 1000 per MWh→kWh.`,mqttStateHint:`Il percorso JSON estrae il valore dal payload JSON. Lascia vuoto per valori grezzi.
+Valore ON: la stringa esatta che significa "ON". Lascia vuoto per rilevamento auto (ON, true, 1).`,restControl:"Controllo",restOnUrl:"URL accensione",restOffUrl:"URL spegnimento",restOnBody:"Corpo richiesta ON",restOffBody:"Corpo richiesta OFF",restMethod:"Metodo HTTP",restHeaders:"Custom Headers (JSON)",restStatusUrl:"URL stato",restStatusPath:"Percorso JSON stato",restStatusOnValue:"Valore ON",restPowerUrl:"URL potenza",restPowerPath:"Percorso JSON potenza",restPowerMultiplier:"Moltiplicatore potenza",restEnergyUrl:"URL energia",restEnergyPath:"Percorso JSON energia",restEnergyMultiplier:"Moltiplicatore energia",restUrlRequired:"È richiesto almeno un URL (ON o OFF) per le prese REST",restHeadersHint:'es. {"Authorization": "Bearer your-token"}',restBodyHint:'es. ON, {"state": "on"}',restStatusHint:"URL per recuperare lo stato attuale",restPathHint:"es. state o 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:"Testa connessione",connectionSuccess:"Connessione riuscita",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:"E-mail",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",inventoryAlerts:"Avvisi di inventario",stockReorderAlert:"Avviso di riordino",stockReorderAlertDescription:"Il SKU ha raggiunto il punto di riordino",stockBreakAlert:"Avviso di esaurimento scorte",stockBreakAlertDescription:"Le scorte si esauriranno prima dell'arrivo del rifornimento",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)",eventPriority:{sectionTitle:"Priorità ntfy",helpNtfy:"Scegli una priorità per ogni evento abilitato. ntfy le usa per intensificare gli avvisi (suono, visibilità, comportamento push). I livelli non impostati qui usano l'impostazione predefinita del server ntfy.",min:"Min.",low:"Bassa",default:"Predefinita",high:"Alta",urgent:"Urgente"},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 Git",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:"Etichetta",grossWeight:"Peso lordo",spoolSize:"Dimensione bobina",close:"Chiudi",currentSpool:"Bobina attuale",plateReady:"Piatto pronto: {{name}}",plateReadyLabel:"Piatti da liberare",plateClearAction:"Libera",plateClearedToast:"Piatto contrassegnato come liberato",plateClearFailed:"Impossibile contrassegnare il piatto come liberato"},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!",assignPendingInsert:"Assegnato. Lo slot verrà configurato all'inserimento della bobina.",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/D",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...",tareComplete:"Tara completata!",tareTimedOut:"Tempo scaduto per la tara — il demone SpoolBuddy è in esecuzione?",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",systemConfig:"Backend & autenticazione",backendUrl:"URL backend Bambuddy",apiToken:"Token API",apiTokenPlaceholder:"Inserisci token API",saveConfig:"Salva configurazione",systemQueued:"Configurazione in coda.",systemFieldsRequired:"L'URL del backend è obbligatorio.",nfcDiagnostic:"Diagnostica NFC",scaleDiagnostic:"Diagnostica bilancia",readTagDiagnostic:"Diagnostica lettura tag",testNfc:"Test lettore",testScale:"Test precisione",testReadTag:"Leggi tag"},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",incompleteDataWarning:"Tag scritto con dati Spoolman incompleti"},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"}},diagnostic:{modalTitle:"Diagnostica connessione — {{name}}",running:"Diagnostica in corso...",runningElapsed:"Diagnostica in corso... ({{elapsed}}s)",waitingForReportHint:"In attesa che la stampante pubblichi un report di stato — può richiedere fino a {{max}} secondi.",runFailed:"Impossibile eseguire la diagnostica: {{error}}",retry:"Esegui di nuovo",runButton:"Esegui diagnostica",sectionTitle:"Diagnostica connessione",sectionDescription:"Verifica perché una stampante non si connette o non stampa — raggiungibilità delle porte, modalità sviluppatore LAN, modalità di rete Docker e credenziali.",noPrinters:"Nessuna stampante configurata.",overall:{ok:"Nessun problema rilevato — la connessione della stampante sembra a posto.",warnings:"La stampante dovrebbe funzionare, ma alcuni aspetti richiedono attenzione.",problems:"Sono stati rilevati problemi che spiegano perché la stampante non si connette o non stampa."},check:{port_mqtt:{title:"Porta di controllo (MQTT 8883)",pass:"Raggiungibile — la stampante accetta connessioni di controllo.",fail:"La porta 8883 non è raggiungibile. La stampante è spenta, ha un altro indirizzo IP oppure un firewall la blocca. Verifica l'IP della stampante e che nulla blocchi la porta 8883."},port_ftps:{title:"Porta trasferimento file (FTPS 990)",pass:"Raggiungibile — l'invio dei file di stampa funzionerà.",warn:"La porta 990 non è raggiungibile. Il monitoraggio potrebbe ancora funzionare, ma l'invio delle stampe alla stampante fallirà. Assicurati che la porta 990 non sia bloccata."},external_storage:{title:"Memorizza file inviati su archiviazione esterna (passo 4 dell'installazione)",pass:"La stampante segnala che questa opzione è attiva — i file inviati saranno memorizzati sulla scheda SD e gli archivi avranno miniature e metadati dello slicer.",fail:`La stampante segnala che questa opzione è disattivata. Abilita "Memorizza file inviati su archiviazione esterna" — nei firmware recenti (P2S 01.02 / Bambu Studio 2.6+) l'interruttore si trova nelle Impostazioni di stampa della stampante; nelle versioni precedenti è nella scheda Dispositivo di Bambu Studio / OrcaSlicer. Senza questa opzione, ogni stampa archiviata è priva di miniatura e di metadati dello slicer.`,skip:"Non verificato — è necessaria una connessione MQTT attiva. Negli slicer più vecchi dove questa impostazione esiste solo nello slicer, la stampante non la segnala, quindi questo controllo passa anche se l'opzione è disattivata — verifica manualmente il passo 4 dell'installazione."},port_rtsps:{title:"Porta fotocamera (RTSPS 322)",pass:"Raggiungibile — lo streaming della fotocamera funzionerà.",warn:"La porta 322 non è raggiungibile. La visualizzazione live della fotocamera non funzionerà. Questo non influisce sulla stampa."},network_mode:{title:"Modalità di rete Docker",pass:"In esecuzione in modalità di rete host.",warn:'Bambuddy è in esecuzione con la rete Docker bridge. Il rilevamento delle stampanti e la stampante virtuale richiedono la modalità di rete host — ricrea il container con "network_mode: host".',skip:"Non in esecuzione in Docker — non applicabile."},subnet:{title:"Sottorete",pass:"La stampante e Bambuddy sono nella stessa sottorete.",warn:"La stampante ({{printer_ip}}) e Bambuddy ({{host_ip}}) sono in sottoreti diverse. Potrebbero non raggiungersi a meno che non sia configurato il routing tra le sottoreti.",skip:"Impossibile determinare la sottorete — ignorato."},mqtt_auth:{title:"Credenziali stampante",pass:"La stampante ha accettato la connessione.",fail:"La stampante è raggiungibile ma ha rifiutato la connessione. Il codice di accesso o il numero di serie è molto probabilmente errato. Il codice di accesso cambia ogni volta che la modalità sviluppatore viene attivata/disattivata — ricopialo dallo schermo della stampante.",skip:"Non verificato — impossibile raggiungere la stampante."},developer_mode:{title:"Modalità sviluppatore LAN",pass:"La modalità sviluppatore è attivata.",fail:"La modalità sviluppatore è DISATTIVATA sulla stampante. Attivala nelle impostazioni LAN della stampante — e conferma con OK. Senza di essa le stampe non verranno avviate.",skip:"Impossibile verificare — richiede una connessione attiva alla stampante."},printer_publishing:{title:"La stampante pubblica lo stato",pass:"La stampante sta pubblicando aggiornamenti di stato — AMS, filamenti e profili K saranno correttamente replicati nello slicer.",fail:"Il broker MQTT ha accettato la connessione ma la stampante non ha pubblicato alcun report di stato. È quasi sempre un numero di serie errato o con maiuscole/minuscole sbagliate — il topic device//api/v1/metrics에서 프린터 메트릭을 노출합니다.",bearerTokenOptional:"베어러 토큰 (선택사항)",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:"계정에 이메일 주소가 없습니다. 이메일 OTP를 활성화하기 전에 관리자에게 추가를 요청하세요.",setupTotp:"인증 앱 설정",setupAuthApp:"인증 앱 설정",setupInstructions:"아래 QR 코드를 인증 앱으로 스캔한 후 코드로 확인하세요.",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:"이 외부 ID 제공자가 계정에 연결되어 있습니다.",oidcUnlinked:"계정 연결이 해제되었습니다."},oidc:{title:"SSO / OIDC 제공자",desc:"외부 ID 제공자를 통해 싱글 사인온을 허용하도록 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:"새 시크릿",emailClaim:"이메일 클레임",emailClaimDesc:"이메일 ID로 사용되는 JWT 클레임.",emailClaimPlaceholder:"email",emailClaimCustomClaimAutoLinkWarning:"사용자 지정 클레임은 값이 테넌트 관리인 경우에만 자동 연결에 안전합니다. IdP가 사용자가 이 클레임을 직접 주장할 수 있게 하면 자동 연결을 활성화하지 마세요.",requireEmailVerified:"이메일 확인 필요",requireEmailVerifiedDesc:"제공자가 확인된 것으로 표시한 경우에만 이메일 클레임을 수락합니다.",requireEmailVerifiedWarning:"경고: 확인 없이도 이메일이 수락됩니다. 신뢰할 수 있는 제공자에만 사용하세요.",requireEmailVerifiedAutoLink:"이 설정을 변경하려면 먼저 자동 연결을 비활성화하세요.",defaultGroup:"기본 그룹",defaultGroupDesc:"자동 생성된 사용자에게 할당되는 그룹. 설정되지 않으면 Viewers로 대체됩니다.",defaultGroupViewersFallback:"Viewers (기본값)"},refreshIcon:"아이콘 새로고침",removeIcon:"아이콘 제거",iconRefreshed:"아이콘이 새로고침되었습니다.",iconRemoved:"아이콘이 제거되었습니다.",iconFetchFailed:"공급자 URL에서 아이콘을 가져올 수 없습니다."},encryption:{title:"MFA 암호화 상태",enabledFromEnv:"저장 시 암호화 활성화됨 (MFA_ENCRYPTION_KEY 환경 변수에서 키)",enabledFromFile:"저장 시 암호화 활성화됨 (데이터 디렉토리에서 키 로드됨)",enabledGenerated:"자동 생성된 키로 저장 시 암호화 활성화됨",notConfigured:"저장 시 암호화가 설정되지 않음",notConfiguredDesc:"TOTP 시크릿 및 OIDC client_secret이 일반 텍스트로 저장됩니다. MFA_ENCRYPTION_KEY를 설정하거나 쓰기 가능한 데이터 디렉토리로 Bambuddy를 재시작하여 자동 생성하세요.",allEncrypted:"모든 MFA 시크릿이 저장 시 암호화되어 있습니다.",legacyRowsLabel:"레거시 일반 텍스트 행",encryptedRowsLabel:"암호화된 행",legacyRowsWarning:"{{count}}개 레거시 일반 텍스트 행이 감지되었습니다. 암호화된 저장소로 마이그레이션하려면 OIDC 제공자를 다시 저장하거나 사용자의 인증 앱을 재등록하세요.",backupHint:"자동 생성된 키는 DATA_DIR/.mfa_encryption_key에 저장되며 로컬 백업 ZIP에 포함됩니다. 백업을 안전하게 보관하거나 MFA_ENCRYPTION_KEY를 명시적으로 설정하세요.",decryptionBrokenTitle:"암호화 키 누락",decryptionBrokenError:"암호화 키를 더 이상 사용할 수 없어 {{count}}개의 암호화된 레코드를 복호화할 수 없습니다.",migrationErrorWarning:"시작 시 {{count}}개 레거시 행을 재암호화하지 못했습니다. 서버 로그를 확인하고 Bambuddy를 재시작하여 재시도하세요."},updateEnergyCost:"전기 요금 업데이트",updateEnergyCostDescription:"이 키가 /settings/electricity-price에 새 kWh당 전기 요금을 POST할 수 있도록 허용합니다. Home Assistant 동적 요금 자동화(Tibber, Octopus 등)에 유용합니다. API 키로 쓸 수 있는 유일한 설정 필드입니다.",energyCostBadge:"에너지",passwordRequirements:"최소 8자, 대문자, 소문자, 숫자, 특수문자 각 1개 이상 포함"},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:"Bambu Lab 위키에서 보기",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:"로그인 중...",rememberMe:"로그인 유지",forgotPassword:"비밀번호를 잊으셨나요?",loginSuccess:"성공적으로 로그인되었습니다",loginFailed:"로그인 실패",enterCredentials:"사용자명과 비밀번호를 입력하세요",enterEmail:"이메일 주소를 입력하세요",oidcLoginFailed:"OIDC 로그인 실패",oidcErrors:{providerError:"ID 제공자에서 오류가 반환되었습니다",missingParameters:"OIDC 콜백에 필수 매개변수가 없습니다",invalidState:"OIDC 상태가 잘못되었거나 이미 사용되었습니다",stateExpired:"OIDC 로그인 세션이 만료되었습니다 — 다시 시도하세요",providerNotFound:"OIDC 제공자를 찾을 수 없습니다",discoveryFailed:"OIDC 검색 문서를 가져오지 못했습니다",invalidDiscovery:"OIDC 검색 문서가 잘못되었습니다",networkError:"OIDC 토큰 교환 중 네트워크 오류",badResponse:"OIDC 토큰 교환 중 예상치 못한 응답",noIdToken:"OIDC 제공자가 ID 토큰을 반환하지 않았습니다",validationFailed:"OIDC 토큰 검증 실패",nonceMismatch:"OIDC 논스 불일치 — 재생 공격 가능성",missingSubClaim:"OIDC 토큰에 sub 클레임이 없습니다",noLinkedAccount:"OIDC ID에 연결된 로컬 계정이 없습니다",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:"계정이 2FA로 보호되어 있습니다. 아래에 인증 코드를 입력하세요.",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:"챔버 조명 전환",unavailable:"카메라 사용 불가",diagnose:{button:"진단",modalTitle:"카메라 진단",running:"진단 실행 중...",runFailed:"진단 실행 실패: {{error}}",retry:"다시 실행",stage:{tcp_reachable:"네트워크 연결 가능 여부",first_frame:"프레임 캡처",live_stream_active:"라이브 스트림 활성"},summary:{all_ok:"카메라가 정상 작동 중입니다. 모든 단계를 성공적으로 완료했습니다.",live_stream_active_healthy:"카메라가 최근 프레임으로 스트리밍 중입니다 — 테스트가 필요 없습니다.",printer_unreachable:"프린터에 연결할 수 없습니다. IP 주소, 네트워크 연결, 프린터 전원을 확인하세요.",camera_port_closed:"프린터에 연결됐지만 카메라 포트가 닫혀 있습니다. 프린터 설정에서 LAN 전용 모드와 개발자 모드가 활성화되어 있는지 확인하세요.",no_frame:"카메라에 연결됐지만 프레임이 수신되지 않았습니다. 다시 시도하거나 프린터 설정에서 카메라가 활성화되어 있는지 확인하세요.",unknown_failure:"알 수 없는 이유로 카메라 진단에 실패했습니다. 지원 로그를 확인하세요."},meta:{protocol:"프로토콜",port:"포트",profile:"프로파일"}}},groups:{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자 이상이어야 합니다",ldapProvisioned:'LDAP 사용자 "{{username}}"이(가) 생성되었습니다'},modal:{createUser:"사용자 생성",editUser:"사용자 편집",cancel:"취소",creating:"생성 중...",saving:"저장 중...",saveChanges:"변경 사항 저장",advancedAuthSubtitle:"고급 인증 사용",tabsAriaLabel:"사용자 소스",localTab:"로컬",ldapTab:"LDAP",ldapSearchLabel:"디렉터리 검색",ldapSearchPlaceholder:"사용자명, 이름, 이메일을 입력하세요...",ldapMinChars:"검색하려면 최소 2자 이상 입력하세요",ldapTypeToSearch:"LDAP 디렉터리를 검색하려면 입력을 시작하세요",ldapSearching:"디렉터리 검색 중...",ldapNoResults:"디렉터리에서 일치하는 사용자가 없습니다",ldapSearchError:"디렉터리 검색에 실패했습니다. LDAP 서버 상태를 확인하세요.",ldapAlreadyProvisioned:"이미 생성됨",ldapSelectedLabel:"선택됨",ldapProvision:"사용자 생성",ldapProvisioning:"생성 중...",ldapErrorProvision:"생성에 실패했습니다. LDAP 서버 상태를 확인하고 다시 시도하세요."},form:{username:"사용자 이름",usernamePlaceholder:"사용자 이름 입력",email:"이메일",emailPlaceholder:"user@example.com",password:"비밀번호",passwordPlaceholder:"비밀번호 입력",confirmPassword:"비밀번호 확인",confirmPasswordPlaceholder:"비밀번호 확인",newPasswordPlaceholder:"새 비밀번호 입력",confirmNewPasswordPlaceholder:"새 비밀번호 확인",leaveBlankToKeep:"현재 비밀번호 유지 시 비워두기",groups:"그룹",optional:"선택사항",autoGeneratedPassword:"안전한 비밀번호가 자동으로 생성되어 사용자에게 이메일로 전송됩니다.",passwordManagedByAdvancedAuth:'비밀번호는 고급 인증에 의해 관리됩니다. "비밀번호 재설정"을 사용하여 이메일로 새 비밀번호를 전송하세요.',resetPassword:"비밀번호 재설정",resettingPassword:"비밀번호 재설정 중..."},deleteModal:{title:"사용자 삭제",message:"이 사용자를 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.",confirm:"사용자 삭제"}},streamOverlay:{title:"스트림 오버레이",invalidPrinterId:"유효하지 않은 프린터 ID",cameraStream:"카메라 스트림",progress:"진행률",eta:"예상 완료",printerIdle:"프린터 대기 중",printerOffline:"프린터 오프라인",status:{printing:"인쇄 중",paused:"일시 중지됨",finished:"완료됨",failed:"실패",idle:"대기 중",unknown:"알 수 없음"}},profiles:{title:"프로필",subtitle:"슬라이서 프리셋 및 압력 전진 보정 관리",tabs:{bambuCloud:"Bambu Cloud",orcaCloud:"Orca Cloud",local:"로컬 프로필",kprofiles:"K-프로필"},orcaCloud:{connectedAs:"연결됨",logout:"연결 해제",noLogoutPermission:"연결을 해제할 권한이 없습니다",noConnectPermission:"Orca Cloud에 연결할 권한이 없습니다",retry:"다시 시도",back:"다른 로그인 방법 사용",connect:{title:"Orca Cloud에 연결",description:"Orca Cloud 계정에 로그인하여 슬라이서 프로필을 Bambuddy에 동기화하세요."},providers:{google:"Google로 로그인",apple:"Apple로 로그인",github:"GitHub로 로그인",email:"이메일과 비밀번호로 로그인"},password:{title:"이메일과 비밀번호로 로그인",email:"이메일",emailPlaceholder:"you@example.com",password:"비밀번호",submit:"로그인"},paste:{title:"로그인 완료",step1:"새 탭에서 Orca Cloud 로그인 페이지가 열렸습니다. Orca 계정으로 로그인하세요.",step2:'브라우저가 로드되지 않는 "localhost" URL로 리디렉션됩니다. 이것은 정상입니다 — 우리에게 필요한 것은 그 URL입니다.',step3:"브라우저의 주소 표시줄에서 전체 URL을 복사하여 아래에 붙여넣으세요.",signInUrl:"로그인 탭이 열리지 않은 경우 이 URL을 클릭하세요:",label:"여기에 콜백 URL 붙여넣기",placeholder:"http://localhost:41172/callback?code=...&state=...",submit:"연결 완료"},profiles:{title:"Orca Cloud 프로필 ({{count}})",refresh:"새로고침",empty:"Orca Cloud 계정에 아직 프로필이 없습니다."},toast:{connected:"{{email}}로 Orca Cloud에 연결됨",disconnected:"Orca Cloud 연결 해제됨"},errors:{startFailed:"Orca Cloud 로그인 흐름을 시작할 수 없습니다.",finishFailed:"Orca Cloud 로그인을 완료할 수 없습니다.",passwordFailed:"해당 이메일과 비밀번호로 로그인할 수 없습니다.",passwordEmpty:"이메일과 비밀번호를 모두 입력하세요.",emptyPaste:"브라우저에서 콜백 URL을 붙여넣으세요.",noCode:"해당 URL은 Orca Cloud 콜백이 아닌 것 같습니다 (code 매개변수 없음). 주소 표시줄에서 전체 URL을 복사하세요."}},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:"프리셋 업데이트됨"},noSearchResults:"검색어와 일치하는 프리셋이 없습니다"},connectedAs:"연결된 계정",logout:"로그아웃",noLogoutPermission:"로그아웃 권한이 없습니다",failedToLoad:"프로필 불러오기 실패",retry:"다시 시도",time:{justNow:"방금",minsAgo:"{{count}}분 전",hoursAgo:"{{count}}시간 전",daysAgo:"{{count}}일 전"},toast:{loggedOut:"로그아웃되었습니다"},login:{title:"Bambu 클라우드 연결",subtitle:"기기 간 슬라이서 프리셋 동기화",email:"이메일",password:"비밀번호",region:"지역",regionGlobal:"글로벌",regionChina:"중국",verificationCode:"인증 코드",totpCode:"인증앱 코드",checkEmail:"이메일({{email}})로 전송된 6자리 코드를 확인하세요",enterTotpHint:"인증앱에서 6자리 코드를 입력하세요",accessToken:"액세스 토큰",accessTokenHint:"Bambu Studio에서 Bambu Lab 액세스 토큰을 붙여넣으세요",back:"뒤로",loginButton:"로그인",verifyButton:"인증",setTokenButton:"토큰 설정",useToken:"액세스 토큰 대신 사용",useEmail:"이메일로 로그인",toast:{loggedIn:"성공적으로 로그인되었습니다",codeSent:"이메일로 인증 코드가 전송되었습니다",enterTotp:"인증앱에서 코드를 입력하세요",tokenSet:"토큰이 성공적으로 설정되었습니다"}},presets:{myPreset:"내 프리셋 (편집 가능)",duplicate:"복제",editable:"편집 가능",failedToLoadDetails:"프리셋 세부 정보 불러오기 실패",deleteConfirm:"이 프리셋을 삭제하시겠습니까?",deleteWarning:'Bambu 클라우드에서 "{{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:"{{total}}개 중 {{showing}}개 표시",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 환경 세부 정보",bundleGenerating:"번들 생성 중...",bundleStepConnection:"프린터 연결 확인 실행 중",bundleStepVirtualPrinters:"가상 프린터 설정 확인 실행 중",bundleStepLogScan:"알려진 문제가 있는지 최근 로그 스캔 중",bundleStepBuild:"지원 번들 ZIP 빌드 중"},fileManager:{title:"파일 관리자",subtitle:"인쇄 파일 정리 및 관리",uploadFiles:"파일 업로드",newFolder:"새 폴더",folderName:"폴더 이름",folderNamePlaceholder:"예: 기능성 부품",renameFile:"파일 이름 바꾸기",renameFolder:"폴더 이름 바꾸기",invalidFilenameChar:'"{{char}}" 문자는 인쇄 파일 이름에 허용되지 않습니다. 프린터 SD 카드가 거부하는 문자: < > : " / \\ | ? *',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:"전체 {{total}} 중 {{free}}만 남음. 임계값은 설정에서 {{threshold}}GB로 설정됩니다.",files:"파일",folders:"폴더",size:"크기",free:"여유",allFiles:"모든 파일",allExternal:"외부",externalIsEmpty:"외부 파일 없음",externalEmptyDescription:"연결된 외부 폴더의 파일이 여기에 표시됩니다.",wrap:"줄 바꿈",enableTextWrapping:"텍스트 줄 바꿈 활성화",disableTextWrapping:"텍스트 줄 바꿈 비활성화",collapse:"접기",collapseFoldersByDefault:"기본적으로 폴더 접기",expandFoldersByDefault:"기본적으로 폴더 펼치기",dragToResizeTooltip:"드래그하여 크기 조정, 더블클릭하여 초기화",searchFiles:"파일 검색...",allTypes:"모든 유형",prints:"인쇄물",ascending:"오름차순",descending:"내림차순",resultsCount:"전체 {{total}}개 중 {{showing}}개",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:"대기열 추가 권한이 없습니다",noPermissionSlice:"파일 슬라이싱 권한이 없습니다",noPermissionDownload:"파일 다운로드 권한이 없습니다",noPermissionRenameFile:"파일 이름 변경 권한이 없습니다",noPermissionGenerateThumbnail:"썸네일 생성 권한이 없습니다",noPermissionDeleteFile:"파일 삭제 권한이 없습니다",noPermissionCreateFolder:"폴더 생성 권한이 없습니다",noPermissionUpload:"파일 업로드 권한이 없습니다",noPermissionMoveFiles:"파일 이동 권한이 없습니다",noPermissionDeleteFiles:"파일 삭제 권한이 없습니다",linkExternal:"외부 연결",linkExternalFolder:"외부 폴더 연결",linkExternalFolderDescription:"호스트 디렉토리(NAS, USB, 네트워크 공유)를 파일 관리자에 마운트합니다. 파일은 복사되지 않고 원래 경로에서 직접 접근합니다.",externalFolderNamePlaceholder:"예: NAS 인쇄물",externalPath:"호스트 경로",externalPathHelp:"Docker 호스트의 디렉토리 절대 경로. 컨테이너에 바인드 마운트되어야 합니다.",readOnly:"읽기 전용",readOnlyHelp:"업로드 및 삭제 방지",showHiddenFiles:"숨김 파일 표시 (dotfiles)",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:"선택적 설명...",urlLabel:"URL",urlPlaceholder:"https://makerworld.com/...",urlInvalid:"URL은 http:// 또는 https://로 시작해야 합니다",openExternalUrl:"프로젝트 URL 열기",coverImageLabel:"커버 사진",coverImageAlt:"프로젝트 커버 사진",coverImageUpload:"업로드",coverImageReplace:"교체",coverImageRemove:"제거",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:"BOM 포함",budget:"예산",remaining:"남은 예산"},subProjects:{title:"하위 프로젝트 ({{count}})"},notes:{title:"메모",noEditPermission:"메모 편집 권한이 없습니다",placeholder:"이 프로젝트에 대한 메모 추가...",empty:"아직 메모가 없습니다. 편집을 클릭하여 메모를 추가하세요."},files:{title:"파일",linkFolders:"파일 관리자에서 폴더 연결",forQuickAccess:"빠른 접근을 위해 이 프로젝트에 연결합니다.",fileCount:"{{count}}개 파일",empty:"연결된 폴더가 없습니다. 파일 관리자로 이동하여 폴더를 이 프로젝트에 연결하세요.",noFiles:"이 폴더에 파일이 없습니다.",print:"지금 인쇄",addToQueue:"대기열에 추가"},bom:{title:"부품 목록",acquired:"{{total}}개 중 {{completed}}개 확보",showAll:"전체 표시",hideDone:"완료된 것 숨기기",addPart:"부품 추가",noAddPermission:"부품 추가 권한이 없습니다",partNamePlaceholder:"부품 이름 (예: M3x8 나사)",partName:"부품 이름",qty:"수량",price:"가격 ({{currency}})",sourcingUrlPlaceholder:"구매 URL (선택사항)",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:"파일로 내보내기"},slice:{title:"모델 슬라이싱",action:"슬라이싱",slicing:"슬라이싱 중…",printer:"프린터 프로필",process:"프로세스 프로필",filament:"필라멘트 프로필",filamentSlot:"필라멘트 {{index}} ({{type}})",selectPreset:"— 프리셋 선택 —",loadingPresets:"프리셋 불러오는 중…",analyzingPlateFilaments:"플레이트 필라멘트 분석 중…",analyzingPlateFilamentsHint:"이 플레이트가 사용하는 AMS 슬롯을 확인하기 위해 미리보기 슬라이싱을 실행합니다. 캐시 후에는 재오픈이 즉각적입니다.",previewToast:"{{name}} 분석 중 — {{elapsed}}",previewWithProgress:"{{name}} 분석 중 — {{stage}} ({{percent}}%) — {{elapsed}}",notUsedByPlate:"— 이 플레이트에서 사용되지 않음",noPresetsForSlot:"사용 가능한 프리셋 없음",presetsLoadFailed:"프리셋 불러오기 실패. 먼저 설정 → 프로필에서 가져오세요.",refreshPresets:"새로 고침",refreshPresetsTitle:"프리셋 새로 고침 — 최신 클라우드 및 번들 목록 가져오기 (Bambu Studio 또는 Bambu Handy에서 프리셋 삭제 후 사용)",allPresetsRequired:"모든 프리셋을 선택해야 합니다",enqueuing:"슬라이싱 작업 제출 중…",queued:"대기 중…",failed:"슬라이싱 실패. 슬라이서 사이드카 로그를 확인하세요.",startedToast:"백그라운드에서 {{name}} 슬라이싱 중…",queuedToast:"대기 중: {{name}} — {{elapsed}}",runningToast:"{{name}} 슬라이싱 중 — {{elapsed}}",runningWithProgress:"{{name}} — {{stage}} ({{percent}}%) — {{elapsed}}",completedToast:"{{name}} 슬라이싱 완료",failedToast:"{{name}} 슬라이싱 실패: {{detail}}",tier:{local:"가져온 것",cloud:"Bambu Cloud",orcaCloud:"Orca Cloud",standard:"표준"},cloud:{notAuthenticated:"클라우드 프리셋을 보려면 Bambu Cloud에 로그인하세요 (설정 → 프로필 → Bambu Cloud).",expired:"Bambu Cloud 세션이 만료되었습니다 — 다시 로그인하여 클라우드 프리셋을 새로고침하세요.",unreachable:"현재 Bambu Cloud에 연결할 수 없습니다. 로컬 및 표준 프리셋은 계속 작동합니다."},orcaCloud:{notAuthenticated:"Orca 프리셋을 보려면 Orca Cloud (프로필 → Orca Cloud)에 로그인하세요.",expired:"Orca Cloud 세션이 만료되었습니다 — Orca 프리셋을 새로고침하려면 다시 로그인하세요.",unreachable:"Orca Cloud에 현재 연결할 수 없습니다. 다른 프리셋은 계속 작동합니다."},actionAll:"{{count}}개 플레이트 모두 슬라이싱",actionAllTitle:"모든 플레이트를 단일 다중 플레이트 출력으로 슬라이싱합니다 (단일 아카이브). 필라멘트 선택은 프로젝트가 정의하는 모든 슬롯을 포함합니다.",allPlatesToggle:"{{count}}개 플레이트 모두 슬라이싱",otherPrinters:"다른 프린터",bundle:"슬라이서 번들",bundleNone:"— 없음 (개별로 프리셋 선택) —",bundleAllRequired:"번들 프로세스 및 모든 필라멘트 슬롯을 선택해야 합니다",runningWithProgressMultiPlate:"플레이트 {{plateIndex}}/{{plateCount}} • {{name}} — {{stage}} ({{percent}}%) — {{elapsed}}",failedTitle:"슬라이싱 실패",bedType:{label:"빌드 플레이트",auto:"자동 (프로세스 프리셋 사용)",coolPlate:"쿨 플레이트",coolPlateSuperTack:"쿨 플레이트 슈퍼택",engineering:"엔지니어링 플레이트",highTemp:"고온 플레이트",texturedPEI:"텍스처 PEI 플레이트",smoothPEI:"매끄러운 PEI 플레이트"}},spoolman:{title:"Spoolman 통합",enabled:"Spoolman 활성화됨",url:"Spoolman URL",connected:"연결됨",disconnected:"연결되지 않음",testConnection:"연결 테스트",sync:"동기화",syncing:"동기화 중...",lastSync:"마지막 동기화",linkToSpoolman:"Spoolman에 연결",openInSpoolman:"Spoolman에서 열기",unlinkSpool:"스풀 연결 해제",unlinkConfirmTitle:"스풀 할당 해제?",unlinkConfirmMessage:"이 슬롯에서 스풀을 제거합니다. 스풀 데이터 자체는 변경되지 않습니다.",selectSpool:"스풀 선택",noUnlinkedSpools:"할당되지 않은 스풀 없음",linkSuccess:"스풀이 성공적으로 할당되었습니다",linkFailed:"스풀 할당 실패",unlinkSuccess:"스풀이 성공적으로 할당 해제되었습니다",unlinkFailed:"스풀 할당 해제 실패",linkedSpool:"할당된 스풀",spoolId:"스풀 ID",fillSourceLabel:"(Spoolman)",weight:"무게",remaining:"남은 양",disableWeightSync:"AMS 예상 무게 동기화 비활성화",disableWeightSyncDesc:"AMS 추정치에서 남은 용량을 업데이트하지 않습니다. AMS 백분율 기반 추정 대신 Spoolman의 사용량 추적을 선호하는 경우 사용하세요. 새 스풀은 여전히 AMS 추정치를 초기 무게로 사용합니다.",reportPartialUsage:"실패한 인쇄물에 대한 부분 사용량 보고",reportPartialUsageDesc:"인쇄가 실패하거나 취소될 때 레이어 진행률을 기반으로 해당 시점까지 사용된 예상 필라멘트를 보고합니다."},inventory:{title:"스풀 재고",spoolmanMixedContentTitle:"HTTPS에서 Spoolman을 불러올 수 없음 — 브라우저가 혼합 콘텐츠를 차단함",spoolmanMixedContentBody:"Bambuddy가 HTTPS로 서비스되고 있지만 Spoolman URL은 여전히 HTTP입니다. 브라우저는 보안상 혼합 콘텐츠를 차단하므로 내장된 Spoolman UI가 렌더링되지 않습니다. 이 기능이 작동하려면 Spoolman이 HTTPS로 접근 가능해야 합니다.",spoolmanMixedContentFixReverseProxy:"Spoolman을 Bambuddy와 같은 리버스 프록시(Traefik / Nginx / Caddy) 뒤에 HTTPS로 배치한 다음 설정에서 Spoolman URL을 새 HTTPS 주소로 업데이트하세요.",spoolmanMixedContentFixOpenNewTab:"임시 방편으로 HTTP로 새 브라우저 탭에서 Spoolman을 여세요 — 혼합 콘텐츠 규칙은 내장 프레임에만 적용되므로 독립 탭은 여전히 작동합니다.",spoolmanOpenInNewTab:"새 탭에서 Spoolman 열기",labels:{title:"스풀 라벨 인쇄",selectedCount:"{{count}}개 선택됨",pickSpools:"라벨을 인쇄할 스풀 선택:",searchPlaceholder:"이름, 브랜드 또는 #ID 검색",filterByMaterial:"재료:",allMaterials:"전체",selectVisible:"보이는 모든 항목 선택 ({{count}})",deselectVisible:"보이는 항목 선택 해제",clearAll:"모두 초기화",noSpoolsToShow:"표시할 스풀이 없습니다. 필터를 조정하고 다시 시도하세요.",noMatches:"현재 검색 또는 필터와 일치하는 스풀이 없습니다.",printOne:"이 스풀의 라벨 인쇄",printLabels:"라벨 인쇄…",bulkTitle:"현재 표시된 {{count}}개에서 라벨을 인쇄할 스풀 선택",noSpoolsTitle:"라벨을 붙일 스풀 없음",error:"라벨을 생성할 수 없습니다: {{msg}}",templates:{box40x30:{label:"박스 라벨 (40 × 30 mm)",hint:"페이지당 단일 라벨; 일반 DK/Brother 롤 크기, 필라멘트 가방 및 보관함 라벨에 적합."},box:{label:"박스 라벨 (62 × 29 mm)",hint:"페이지당 단일 라벨; Brother PT/QL 및 Dymo 소형 라벨에 맞는 크기."},averyL7160:{label:"Avery L7160 — A4 시트 (38.1 × 63.5 mm × 21)",hint:"EU 시트; A4 페이지당 21개 라벨."},avery5160:{label:"Avery 5160 — US Letter 시트 (25.4 × 66.7 mm × 30)",hint:"US 시트; Letter 페이지당 30개 라벨."},amsHolderSmall:{label:"AMS 홀더 — 소형 (74 × 33 mm)",hint:"페이지당 단일 레이블; MakerWorld 모델 752566 (AMS 필라멘트 레이블 홀더)의 인쇄 가능 레이블과 일치합니다."},amsHolderLarge:{label:"AMS 홀더 — 대형 (75 × 55 mm)",hint:"페이지당 단일 레이블; AMS 필라멘트 레이블 홀더의 카드스톡 삽입 변형에 맞습니다. 스와치, 브랜드, 재질, ID, QR 코드에 충분한 공간이 있습니다."}},sortBy:{label:"정렬:",id:"ID 순",color:"색상 순"}},csv:{importButton:"CSV 가져오기",exportButton:"CSV 내보내기",modalTitle:"CSV에서 스풀 가져오기",selectFile:"CSV 파일을 선택하거나 여기로 끌어다 놓으세요",dragHint:"헤더: material(필수), brand, subtype, color_name, rgba, …",parsing:"파일을 읽는 중…",previewError:"CSV 파일을 읽을 수 없습니다",validCount:"유효 {{count}}개",errorCount:"오류 {{count}}개",skippedCount:"건너뜀 {{count}}개",colRow:"행",colStatus:"상태",colColor:"색상",colorResolved:"카탈로그에서 색상 채움",colorCrossMaterial:"다른 재료에서 색상을 가져옴 — 카탈로그에 정확히 일치하는 항목 없음",duplicateExisting:"이 재료, 브랜드, 색상의 스풀이 이미 존재합니다 — 그래도 새 스풀로 가져옵니다",spoolmanHint:"Spoolman 모드에서는 Spoolman의 기본 CSV 가져오기/내보내기를 사용하세요.",importValidRows:"유효한 {{count}}개 행 가져오기",noValidRows:"유효한 행 없음",importing:"가져오는 중…",importSuccess:"{{count}}개 스풀을 가져왔습니다",importError:"가져오기 실패",exportError:"내보내기 실패"},addSpool:"스풀 추가",editSpool:"스풀 편집",copySpool:"스풀 복사",material:"재료",selectMaterial:"재료 선택...",subtype:"하위 유형",brand:"브랜드",searchBrand:"브랜드 검색...",useCustomBrand:'"{{brand}}" 사용',useCustomMaterial:"사용자 지정 재료 사용: {{material}}",colorName:"색상 이름",colorNamePlaceholder:"제이드 화이트, 파이어 레드...",color:"색상",hexColor:"16진수 색상",pickColor:"사용자 지정 색상 선택",labelWeight:"라벨 무게",coreWeight:"빈 스풀 무게",searchSpoolWeight:"스풀 무게 검색...",weightUsed:"사용됨",currentWeight:"남은 무게",measuredWeight:"측정된 무게",spoolName:"스풀",costPerKg:"kg당 비용",storageLocation:"보관 위치",storageLocationPlaceholder:"예: 선반 A, 서랍 1",openInInventory:"재고에서 열기",measuredWeightError:"측정된 무게는 {{min}}g과 {{max}}g 사이여야 합니다.",slicerFilament:"슬라이서 필라멘트",slicerFilamentName:"슬라이서 프리셋 이름",slicerPreset:"슬라이서 프리셋",searchPresets:"필라멘트 프리셋 검색...",selectedPreset:"선택됨",noPresetsFound:"프리셋을 찾을 수 없음",tempOverrides:"온도 재정의",note:"메모",notePlaceholder:"이 스풀에 대한 추가 메모...",category:"카테고리",categoryPlaceholder:"예: 생산, 프로토타입, 고객 A",categoryNone:"미분류",lowStockThresholdOverride:"재고 부족 임계값 (이 스풀)",lowStockThresholdOverrideHelp:"전역 임계값({{global}}%)을 사용하려면 비워두세요.",clearRfid:"RFID 태그 초기화",rfidCleared:"RFID 태그가 초기화되었습니다",archive:"보관",restore:"복원",noSpools:"아직 스풀이 없습니다. 첫 번째 스풀을 추가하여 시작하세요.",noAvailableSpools:"사용 가능한 스풀이 없습니다. 재고에 스풀을 추가하거나 먼저 다른 슬롯에서 해제하세요.",kProfiles:"K-프로필",addKProfile:"K-프로필 추가",assignSpool:"스풀 할당",unassignSpool:"할당 해제",assignSuccess:"스풀 할당 및 AMS 슬롯 구성됨",assignPendingInsert:"할당됨. 스풀을 삽입하면 슬롯이 구성됩니다.",assignFailed:"스풀 할당 실패",selectSpool:"이 슬롯에 할당할 스풀 선택",assigned:"할당됨",assigning:"할당 중...",searchSpools:"스풀 검색...",showAllSpools:"모든 스풀 표시",spoolmanSpools:"Spoolman 스풀",allMaterials:"모든 재료",filterByBrand:"브랜드로 필터...",showArchived:"보관된 항목 표시",quickAdd:"빠른 추가 (재고)",quantity:"수량",stock:"재고",configured:"구성됨",spoolsCreated:"{{count}}개 스풀 생성됨",spoolsPartiallyCreated:"{{total}}개 중 {{created}}개 스풀 생성됨 (일부 실패)",spoolCreated:"스풀 생성됨",spoolUpdated:"스풀 업데이트됨",spoolDeleted:"스풀 삭제됨",deepLinkSpoolNotFound:"스풀을 찾을 수 없음",deepLinkFetchFailed:"스풀을 불러올 수 없음 — 다시 시도하세요",spoolArchived:"스풀 보관됨",spoolRestored:"스풀 복원됨",kProfileSaveFailed:"K-프로필 설정을 저장할 수 없습니다",syncWeightSpoolNotFound:"스풀을 찾을 수 없음 — 삭제되었을 수 있습니다",syncWeightSpoolmanUnreachable:"Spoolman에 연결할 수 없음 — 나중에 다시 시도하세요",syncWeightFailed:"무게 동기화 실패",spoolmanUnreachable:"Spoolman에 연결할 수 없습니다 — 나중에 다시 시도하세요",deleteSpoolNotFound:"스풀을 찾을 수 없음 — 이미 삭제되었을 수 있습니다",deleteFailed:"스풀 삭제 실패",archiveSpoolNotFound:"스풀을 찾을 수 없음 — 이미 삭제되었을 수 있습니다",archiveFailed:"스풀 보관 실패",restoreSpoolNotFound:"스풀을 찾을 수 없음 — 이미 삭제되었을 수 있습니다",restoreFailed:"스풀 복원 실패",saveFailed:"변경 사항 저장 실패",tagClearFailed:"태그 초기화 실패",deleteConfirm:"이 스풀을 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.",archiveConfirm:"이 스풀을 보관하시겠습니까?",advancedSettings:"고급 설정",filamentInfoTab:"필라멘트 정보",paProfileTab:"PA 프로필",filamentInfo:"필라멘트",additional:"추가",loadingPresets:"클라우드 프리셋 불러오는 중...",cloudConnected:"클라우드 연결됨",cloudNotConnected:"클라우드 연결되지 않음 (기본값 사용)",recentColors:"최근",searchColors:"색상 검색...",searchResults:"검색 결과",allColors:"모든 색상",commonColors:"일반 색상",showLess:"간략히 보기",showAll:"모두 보기",noColorsFound:"검색과 일치하는 색상 없음",noResults:"일치하는 항목 없음",extraColorsLabel:"추가 색상",extraColorsPlaceholder:"EC984C,#6CD4BC,A66EB9,D87694",extraColorsHint:"2~8개의 16진수 색상값을 쉼표로 구분하여 붙여넣으세요. 그라데이션으로 렌더링됩니다.",extraColorsInvalid:"유효하지 않은 16진수 무시됨: {{tokens}}",colorEffectLabel:"효과",colorEffect:{none:"없음",sparkle:"스파클",wood:"우드",marble:"마블",glow:"글로우",matte:"매트",silk:"실크",galaxy:"갤럭시",rainbow:"레인보우",metal:"메탈",translucent:"반투명",gradient:"그라데이션",dualColor:"듀얼 컬러",triColor:"트리 컬러",multicolor:"멀티컬러"},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 사이여야 합니다",assignMismatchTitle:"재료 불일치",assignMismatchMessage:'선택한 스풀 재료 "{{spoolMaterial}}"이(가) {{location}}의 트레이 재료 "{{trayMaterial}}"과(와) 일치하지 않습니다. 그래도 할당하시겠습니까?',assignMismatchConfirm:"그래도 할당",assignPartialMismatchMessage:'스풀 재료 "{{spoolMaterial}}"이(가) {{location}}의 "{{trayMaterial}}"과(와) 유사하지만 정확히 일치하지 않습니다. 계속하시겠습니까?',assignProfileMismatchMessage:'스풀 프로필 "{{spoolProfile}}"이(가) {{location}}의 트레이 프로필 "{{trayProfile}}"과(와) 일치하지 않습니다. 계속하시겠습니까?',assignReconfigureNote:"AMS 슬롯이 스풀의 프로필을 사용하도록 재구성됩니다.",spoolmanFilamentCatalog:"Spoolman 필라멘트 카탈로그",pickFromSpoolmanCatalog:"Spoolman 카탈로그에서 선택…",spoolmanFilamentSelected:"Spoolman 카탈로그에서 필라멘트 선택됨",spoolmanFilamentUnlinked:"필라멘트 카탈로그 연결 해제됨",noSpoolmanFilaments:"Spoolman 카탈로그에서 필라멘트를 찾을 수 없음",spoolmanFilamentColorSwatch:"필라멘트 색상",spoolWeightManagedBySpoolman:"빈 스풀 무게는 Spoolman에서 필라멘트 유형별로 관리됩니다",spoolmanCatalogLoadFailed:"Spoolman 필라멘트 카탈로그 불러오기 실패",subtitle:"스풀 관리",storageLocationNone:"위치 미설정",resetConsumedCounter:"카운터 초기화",resetConsumedCounterTooltip:"이 스풀의 소비된 그램 카운터를 0으로 초기화합니다. 잔여 무게는 변경되지 않습니다.",resetConsumedCounterConfirm:"이 스풀의 소비된 그램 카운터를 0으로 초기화하시겠습니까? 이후 인쇄는 처음부터 추적됩니다. 스풀 자체, 잔여 무게 계산 및 설정은 변경되지 않습니다.",resetAllConsumedCounters:"모든 카운터 초기화",resetAllConsumedCountersTooltip:"모든 스풀의 소비된 그램 카운터를 0으로 초기화합니다. 잔여 무게는 변경되지 않습니다.",resetAllConsumedCountersConfirm:'{{count}}개 스풀(아카이브 포함)의 소비된 그램 카운터를 모두 0으로 초기화하시겠습니까? 이는 "총 소비량" 통계를 지워 이후 인쇄가 처음부터 추적되도록 합니다. 스풀과 잔여 무게는 변경되지 않습니다.',consumedCounterReset:"카운터가 초기화되었습니다",allConsumedCountersReset:"{{count}}개 스풀의 카운터가 초기화되었습니다",resetConsumedCounterFailed:"카운터 초기화 실패"},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:"남음",slotEmpty:"비어 있음",slotUnconfigured:"?",emptySlotReset:"필라멘트가 할당되지 않음"},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:"L",rightNozzle:"R",leftNozzleTooltip:"왼쪽 노즐",rightNozzleTooltip:"오른쪽 노즐",filamentOverride:"필라멘트 재정의",filamentOverrideHint:"선택적으로 모델 기반 할당을 위해 필라멘트를 재정의합니다. 스케줄러는 원래 3MF 값 대신 선택한 필라멘트와 일치시킵니다.",originalFilament:"원래",overrideWith:"재정의",resetToOriginal:"원래대로 초기화",insufficientFilamentTitle:"필라멘트 부족",insufficientFilamentMessage:"일부 할당된 스풀에 이 인쇄에 필요한 것보다 적은 필라멘트가 남아 있습니다:",insufficientFilamentLine:"{{printer}} - {{slot}}: {{required}}g 필요, {{remaining}}g 남음",printAnyway:"그래도 인쇄",forceColorMatch:"색상 일치 강제",staggerPrinterStarts:"프린터 시작 분산",staggerGroupSize:"그룹 크기",staggerInterval:"간격 (분)",staggerPreview:"{{printers}}대 프린터 → {{size}}대씩 {{groups}}개 그룹, 매 {{interval}}분마다 시작",staggerLastGroup:"마지막 그룹: {{count}}",staggerTotal:"합계: {{minutes}}분",staggerToPrinters:"{{count}}대 프린터에 분산",gcodeInjection:"자동 인쇄 G-code 삽입"},backup:{includesEncryptionKey:"로컬 백업에는 MFA 암호화 키 파일(DATA_DIR/.mfa_encryption_key)이 포함되어 백업 ZIP이 자체 완결됩니다. ZIP 파일을 민감하게 취급하세요 — 파일을 가진 누구나 내부에 저장된 OIDC 클라이언트 비밀과 TOTP 비밀을 복호화할 수 있습니다.",title:"백업 및 복원",createBackup:"백업 만들기",restoreBackup:"백업 복원",restoreDescription:"백업 파일에서 모든 데이터 교체",downloadBackup:"백업 다운로드",uploadBackup:"백업 업로드",lastBackup:"마지막 백업",autoBackup:"자동 백업",backupNow:"지금 백업",restoreWarning:"경고: 백업을 복원하면 현재 모든 데이터를 덮어씁니다.",includeArchives:"아카이브 포함",includeSettings:"설정 포함",includeProfiles:"프로필 포함",backupSuccess:"백업이 성공적으로 생성되었습니다",restoreSuccess:"백업이 성공적으로 복원되었습니다",backupFailed:"백업 실패",restoreFailed:"복원 실패",restoreNote:"복원 중 가상 프린터가 중지됩니다",githubBackup:"Git 백업",enabled:"활성화됨",cloudLoginRequired:"Bambu 클라우드 로그인 필요. GitHub 백업을 활성화하려면 프로필 → 클라우드 프로필에서 로그인하세요.",cloudLoginRequiredShort:"클라우드 로그인 필요",githubDescription:"백업 및 버전 기록을 위해 비공개 GitHub 저장소에 프로필을 자동으로 동기화합니다.",repositoryUrl:"저장소 URL",repoUrlPlaceholderGitHub:"https://github.com/username/repo-name",repoUrlPlaceholderGitea:"https://gitea.example.com/username/repo-name",repoUrlPlaceholderForgejo:"https://forgejo.example.com/username/repo-name",repoUrlPlaceholderGitLab:"https://gitlab.com/username/repo-name",allowInsecureHttp:"비보안 HTTP 허용",allowInsecureHttpHint:"TLS가 없는 개인 네트워크의 자체 호스팅 인스턴스에 활성화",personalAccessToken:"개인 액세스 토큰",tokenSaved:"(저장됨)",enterNewToken:"업데이트하려면 새 토큰 입력",tokenHint:"콘텐츠 읽기/쓰기 권한이 있는 세분화된 토큰",branch:"브랜치",provider:"Git 제공자",providerGitHub:"GitHub",providerGitLab:"GitLab",providerGitea:"Gitea",providerForgejo:"Forgejo",manualOnly:"수동만",hourly:"매시간",daily:"매일",weekly:"매주",includeInBackup:"백업에 포함",kProfiles:"K-프로필",kProfilesDescription:"연결된 프린터의 압력 전진 보정",noPrintersConnected:"연결된 프린터 없음",printersConnected:"{{total}}개 중 {{connected}}개 연결됨",cloudProfiles:"클라우드 프로필",cloudProfilesDescription:"Bambu 클라우드의 필라멘트, 프린터 및 프로세스 프리셋",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:"크기",localTimeHint:"현지 시간 ({{tz}})",defaultPathLabel:"기본값:",categories:{settings:"설정",notification_providers:"알림 제공자",notification_templates:"알림 템플릿",smart_plugs:"스마트 플러그",printers:"프린터",filaments:"필라멘트",maintenance_types:"유지 관리 유형",archives:"아카이브",projects:"프로젝트",pending_uploads:"대기 중인 업로드",external_links:"외부 링크",api_keys:"API 키"},repoIsPrivate:"저장소가 비공개입니다 — 안전하게 백업할 수 있습니다.",repoIsPublicWarning:"저장소가 공개입니다. Bambuddy 백업에는 MQTT 자격증명, Home Assistant 토큰, Prometheus 토큰, Bambu Cloud 이메일, K-프로파일을 통한 프린터 액세스 코드가 포함됩니다. 공급자 설정에서 저장소를 비공개로 변경할 때까지 저장이 차단됩니다.",repoVisibilityUnknown:"저장소 공개 여부를 확인할 수 없습니다. Bambuddy는 비공개로 확인된 저장소에만 백업하며, 저장이 차단됩니다."},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:"HF만",sOnly:"S만",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:"{{count}}개 압출기에 K-프로필 저장됨",selectAtLeastOneExtruder:"적어도 하나의 압출기를 선택해 주세요",profileDeleted:"K-프로필 삭제됨",profilesDeleted:"{{count}}개 프로필 삭제됨",exportedProfiles:"{{count}}개 프로필 내보냄",importedProfiles:"{{total}}개 중 {{count}}개 프로필 가져옴",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)",inheritedFromTarget:"대상 프린터에서 상속됨",derivedFromTargetHint:"대상 프린터의 액세스 코드를 사용합니다. 브리지는 슬라이서 인증을 실제 프린터로 전달하므로 코드가 일치해야 합니다 — 변경하려면 프린터 설정에서 액세스 코드를 편집하세요.",reveal:"액세스 코드 표시",hide:"액세스 코드 숨기기"},targetPrinter:{title:"대상 프린터",configured:"프록시 대상 구성됨",notConfigured:"대상 프린터가 선택되지 않음 - 프록시 모드에 필요",placeholder:"프린터 선택...",hint:"슬라이서 트래픽을 프록시할 프린터를 선택하세요. 프린터는 LAN 모드여야 합니다.",noPrinters:"구성된 프린터 없음. 프록시 모드를 사용하려면 먼저 프린터를 추가하세요."},remoteInterface:{title:"네트워크 인터페이스 재정의",configured:"인터페이스 재정의 활성",optional:"선택사항 - 자동 감지된 IP가 잘못된 경우 사용 (예: 여러 NIC, Docker, VPN)",placeholder:"자동 감지 (기본값)...",hint:"SSDP를 통해 광고되고 TLS 인증서에 사용되는 IP 주소를 재정의합니다. Bambuddy에 여러 네트워크 인터페이스가 있을 때 유용합니다."},mode:{title:"모드",archive:"아카이브",archiveDesc:"파일 즉시 아카이브",review:"검토",reviewDesc:"아카이브 전 검토",queue:"대기열",queueDesc:"아카이브 후 대기열 추가",proxy:"프록시",proxyDesc:"실제 프린터로 릴레이"},autoDispatch:{title:"자동 발송",description:"대기열에 추가될 때 자동으로 인쇄를 시작합니다. 꺼져 있으면 수동 발송을 기다립니다."},queueForceColorMatch:{title:"색상 일치 강제",description:"정확한 필라멘트 유형과 색상이 장착되지 않은 프린터에는 발송을 거부합니다. 기본적으로 꺼져 있음 — 이 옵션 없이는 대기열이 모델 전용 매칭을 사용하여 잘못된 색상이 장착된 프린터를 선택할 수 있습니다."},tailscaleDisabled:{title:"Tailscale 통합",description:"이 가상 프린터가 Tailscale을 통해 노출되도록 표시하려면 활성화하세요. 슬라이서에 붙여넣을 IP를 알 수 있도록 호스트의 Tailscale 주소를 표시합니다. CA 가져오기 단계는 변경되지 않음 — 이 토글은 인증서에 영향을 미치지 않습니다."},setupRequired:{title:"설정 필요",description:"가상 프린터 기능이 작동하려면 추가 시스템 구성이 필요합니다. 여기에는 포트 포워딩, 방화벽 규칙 및 플랫폼별 설정이 포함됩니다.",readGuide:"활성화 전에 설정 가이드를 읽으세요"},archiveNameSource:{title:"아카이브 이름 출처",description:'가상 프린터를 통해 파일이 도착할 때 새 아카이브의 이름 지정 방법을 선택합니다. "메타데이터"는 3MF의 슬라이서 내장 제목을 사용합니다(기본값). "파일 이름"은 Bambu Studio가 FTP를 통해 전송한 파일 이름을 사용합니다. 참고: Bambu Studio는 3MF에 제목 필드가 있을 경우 "프린터로 보내기" 대화 상자에 입력한 이름을 해당 값으로 덮어쓰므로, 두 모드 모두 동일한 문자열이 표시되는 경우가 많습니다.',metadata:"메타데이터",filename:"파일 이름"},howItWorks:{title:"작동 방식",step1:"같은 LAN에서 가상 프린터는 검색을 통해 슬라이서(Bambu Studio / OrcaSlicer)에 자동으로 나타납니다. 다른 네트워크에서는 IP 주소와 액세스 코드로 수동으로 추가하세요.",step2:'아카이브, 검토, 대기열 모드에서 슬라이서의 "전송" 버튼을 사용하여 3MF 파일을 Bambuddy에 업로드하세요. 슬라이서는 "인쇄 성공"을 표시하지만 파일은 저장되고 인쇄되지 않습니다.',step3:"프록시 모드에서 가상 프린터는 모든 트래픽을 실제 프린터로 릴레이합니다 — 직접 연결된 것처럼 즉시 인쇄가 시작됩니다."},status:{title:"상태 세부 정보",printerName:"프린터 이름",model:"모델",serialNumber:"일련 번호",mode:"모드",pendingFiles:"대기 중인 파일",targetPrinter:"대상 프린터",ftpPort:"FTP 포트",mqttPort:"MQTT 포트",ftpConnections:"FTP 연결",mqttConnections:"MQTT 연결"},toast:{updated:"가상 프린터 설정 업데이트됨",failedToUpdate:"설정 업데이트 실패",copyFailed:"복사 실패 — 텍스트를 수동으로 선택하여 복사해 보세요",accessCodeRequired:"먼저 액세스 코드를 설정해 주세요",targetPrinterRequired:"먼저 대상 프린터를 선택해 주세요",bindIpRequired:"먼저 바인드 IP를 설정해 주세요",accessCodeEmpty:"액세스 코드는 비워둘 수 없습니다",accessCodeLength:"액세스 코드는 정확히 8자여야 합니다",targetCodeChangedRebind:"액세스 코드가 새 대상 프린터에 동기화되었습니다. 새 코드를 적용하려면 슬라이서에서 이 장치를 다시 추가하세요.",created:"가상 프린터 생성됨",failedToCreate:"가상 프린터 생성 실패",deleted:"가상 프린터 삭제됨",failedToDelete:"가상 프린터 삭제 실패"},list:{title:"가상 프린터",add:"추가",addFirst:"가상 프린터 추가",empty:"구성된 가상 프린터 없음. 하나를 추가하여 시작하세요."},bindIp:{title:"바인드 인터페이스",placeholder:"인터페이스 선택...",hint:"이 가상 프린터가 바인딩할 네트워크 인터페이스. 프린터당 고유해야 합니다."},proxy:{accessCodeHint:"프록시 모드에서는 슬라이서에서 대상 프린터의 액세스 코드를 사용하세요. 연결은 실제 프린터로 투명하게 전달됩니다."},addDialog:{title:"가상 프린터 추가",name:"이름",hint:"생성 후 액세스 코드, 대상 프린터 및 기타 설정을 구성할 수 있습니다.",create:"생성"},deleteConfirm:{title:"가상 프린터 삭제",message:'"{{name}}"을(를) 삭제하시겠습니까? 이 프린터의 모든 서비스가 중지됩니다.'},caCert:{title:"슬라이서 인증서",description:"가상 프린터는 Bambuddy CA가 서명한 TLS 인증서를 사용합니다. 이 CA 인증서를 슬라이서의 신뢰 저장소에 한 번만 가져오면 연결을 수락합니다 — 명령줄에서 복사할 필요가 없습니다.",copy:"복사",copied:"복사됨",download:"다운로드",fingerprint:"SHA-256"}},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:"{{total}}페이지 중 {{current}}",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:"인쇄 완료 시 끄기 (1회)",autoOffPersistent:"계속 활성화",autoOffPersistentDescription:"1회성 대신 인쇄 사이에 활성화 유지",turnOffDelayMode:"끄기 지연 모드",time:"시간",temp:"온도",delayMinutes:"지연 (분)",tempThreshold:"온도 임계값 (°C)",tempThresholdDescription:"노즐이 이 온도 이하로 냉각될 때 끄기",edit:"편집",deleteConfirm:'"{{name}}"을(를) 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.',turnOnConfirm:'"{{name}}"을(를) 켜시겠습니까?',turnOffConfirm:'"{{name}}"을(를) 끄시겠습니까? 연결된 장치의 전원이 차단됩니다.',failedToTurn:'"{{name}}" {{action}} 실패',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:"ON 요청 본문",restOffBody:"OFF 요청 본문",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로 대체할 수 있습니다. 단위 변환에 배수를 사용하세요 (예: Wh→kWh에 0.001).",testConnection:"연결 테스트",connectionSuccess:"연결 성공",noSwitchesInSwitchbar:"스위치바에 스위치 없음",enableSwitchbarHint:'설정 > 스마트 플러그에서 "스위치바에 표시"를 활성화하세요',autoOffAfterDrying:"건조 후 자동 끄기",autoOffAfterDryingDescription:"AMS 건조가 완료되면 끄기",delayAfterDryingMinutes:"건조 후 지연 (분)"},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:"모든 URL에 일반 HTTP POST",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 온도가 임계값 초과",inventoryAlerts:"재고 알림",stockReorderAlert:"재주문 알림",stockReorderAlertDescription:"SKU가 재주문 시점에 도달함",stockBreakAlert:"재고 소진 알림",stockBreakAlertDescription:"보충 전에 재고가 소진될 것임",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:"(인쇄 완료 후)",eventPriority:{sectionTitle:"ntfy 우선순위",helpNtfy:"각 활성화된 이벤트에 대한 우선순위를 선택하세요. ntfy는 이를 사용하여 알림을 에스컬레이션합니다(소리, 가시성, 푸시 동작). 여기서 설정되지 않은 수준은 ntfy 서버 기본값을 사용합니다.",min:"최소",low:"낮음",default:"기본값",high:"높음",urgent:"긴급"},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:"프로젝트, BOM 항목 및 첨부 파일",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:"색상 이름 또는 16진수 (예: brown, FF8800)",clearCustomColor:"사용자 지정 색상 초기화",noCloudPresets:"클라우드 프리셋 없음. Bambu 클라우드에 로그인하여 동기화하세요.",noPresetsAvailable:"사용 가능한 프리셋 없음. Bambu 클라우드에 로그인하거나 로컬 프로필을 가져오세요.",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:"16진수: #{{hex}}",resetting:"초기화 중...",resetSlot:"슬롯 초기화",cancel:"취소",configuring:"구성 중...",configureSlot:"슬롯 구성"},githubBackup:{title:"Git 백업",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:"모든 URL에 일반 HTTP POST"}},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:"현재 스풀",plateReady:"플레이트 준비됨: {{name}}",plateReadyLabel:"초기화할 플레이트",plateClearAction:"초기화",plateClearedToast:"플레이트가 초기화됨으로 표시됨",plateClearFailed:"플레이트를 초기화됨으로 표시할 수 없음"},modal:{spoolDetected:"스풀 감지됨",assignToAms:"AMS에 할당",syncWeight:"무게 동기화",weightSynced:"동기화됨!",syncing:"동기화 중...",newTagDetected:"새 태그 감지됨",addToInventory:"재고에 추가",assignToAmsTitle:"AMS에 할당",selectSlot:"슬롯 선택",assign:"할당",assigning:"할당 중...",assignSuccess:"할당됨!",assignPendingInsert:"할당됨. 스풀을 삽입하면 슬롯이 구성됩니다.",assignError:"스풀 할당 실패. 다시 시도하세요.",noPrinterSelected:"프린터 선택...",noAmsDetected:"이 프린터에서 AMS가 감지되지 않음",slot:"슬롯"},weight:{noReading:"읽기 없음",stable:"안정됨",measuring:"측정 중...",tare:"영점 조정",calibrate:"보정"},spool:{remaining:"남은 양",material:"재료",brand:"브랜드",color:"색상",coreWeight:"코어",labelWeight:"라벨",scaleWeight:"저울",netWeight:"순 무게",lastUsed:"마지막 사용"},ams:{noData:"AMS가 감지되지 않음",connectAms:"필라멘트 슬롯을 보려면 AMS를 연결하세요",noPrinter:"선택된 프린터 없음",selectPrinter:"상단 표시줄에서 프린터를 선택하세요",printerDisconnected:"프린터 연결 끊김",humidity:"습도",level:"레벨",active:"활성",slot:"슬롯",empty:"비어 있음"},inventory:{search:"스풀 검색...",empty:"재고에 스풀 없음",noResults:"일치하는 스풀 없음",spools:"스풀",addSpool:"스풀 추가"},settings:{tabDevice:"장치",tabDisplay:"화면",tabScale:"저울",tabUpdates:"업데이트",nfcReader:"NFC 리더",type:"유형",connection:"연결",notConnected:"N/A",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:"영점 조정 명령 전송됨. 장치 대기 중...",tareComplete:"영점 조정 완료!",tareTimedOut:"영점 조정 시간 초과 — SpoolBuddy 데몬이 실행 중인가요?",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:"스풀 생성 실패",incompleteDataWarning:"불완전한 Spoolman 데이터로 태그 쓰여짐"},quickMenu:{printerPower:"프린터 전원",systemControls:"시스템",restartDaemon:"데몬 재시작",restartBrowser:"브라우저 재시작",reboot:"재부팅",shutdown:"종료",swipeToClose:"아래로 스와이프하여 닫기",confirmTitle:"확인",confirmShutdown:"SpoolBuddy를 종료하시겠습니까? 다시 켜려면 물리적 접근이 필요합니다.",confirmReboot:"SpoolBuddy를 재부팅하시겠습니까?",confirmRestartDaemon:"SpoolBuddy 데몬을 재시작하시겠습니까? NFC와 저울이 일시적으로 사용 불가능합니다.",confirmRestartBrowser:"키오스크 브라우저를 재시작하시겠습니까? 화면이 잠시 꺼집니다.",confirm:"확인",confirmPlugOn:"{{name}}을(를) 켜시겠습니까?",confirmPlugOff:"{{name}}을(를) 끄시겠습니까?",turnOn:"켜기",turnOff:"끄기"}},bugReport:{title:"버그 신고",description:"설명",descriptionPlaceholder:"무엇이 잘못되었나요? 문제를 설명해 주세요...",email:"이메일 (선택사항)",emailPlaceholder:"your@email.com",emailPrivacy:"제공하면 이메일이 GitHub 이슈의 접힌 섹션에 포함되어 관리자가 후속 조치를 취할 수 있습니다.",screenshot:"스크린샷",uploadOrPaste:"이미지 업로드, 붙여넣기 또는 드래그",dataCollectedSummary:"보고서에 포함되는 데이터는?",dataIncluded:"포함됨:",dataIncludedList:"앱 버전, OS, 아키텍처, 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:"이슈 보기",unexpectedError:"예상치 못한 오류가 발생했습니다",submittingStepConnection:"프린터 연결 확인 실행 중",submittingStepVirtualPrinters:"가상 프린터 설정 확인 실행 중",submittingStepLogScan:"알려진 문제가 있는지 최근 로그 스캔 중",submittingStepSubmit:"GitHub에 보고서 제출 중",diagnosticChecking:"프린터 연결 확인 중...",diagnosticHealthy:"연결 확인 통과 — 프린터에서 문제가 발견되지 않았습니다.",diagnosticSummary:"{{total}}개 프린터 중 {{problems}}개에서 연결 문제가 있습니다",diagnosticIntro:"하나 이상의 프린터에 연결 문제가 있어 현재 문제의 원인일 수 있습니다. 아래에서 프린터를 펼쳐 수정 방법을 확인하세요 — 해결하면 버그 보고서 없이 문제가 해결될 수 있습니다. 아래에서 보고서를 제출할 수도 있습니다.",logHealthSummary:"로그에서 알려진 문제가 발견되었습니다",logHealthIntro:"최근 로그가 알려진 문제와 일치합니다. 아래 수정 방법을 확인하세요 — 해결하면 버그 보고서 없이 문제가 해결될 수 있습니다. 아래에서 보고서를 제출할 수도 있습니다."},failureDetection:{title:"AI 실패 감지",description:"자체 호스팅 Obico ML API로 인쇄를 모니터링하고 감지된 실패에 자동으로 조치합니다.",mlUrl:"Obico ML API URL",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을 통해 카메라 스냅샷을 가져옵니다. ML API 컨테이너가 Bambuddy에 도달할 수 있도록 일반 설정에서 외부 URL을 설정하세요.",perPrinterTitle:"모니터링되는 프린터",perPrinterHint:"감지 서비스가 감시할 프린터를 선택하세요.",monitorAll:"연결된 모든 프린터 모니터링",statusTitle:"상태",serviceRunning:"서비스 실행 중",thresholds:"낮음 / 높음 임계값",activePrinters:"활성 인쇄물",noActivePrints:"현재 실행 중인 인쇄물 없음.",historyTitle:"최근 감지",noHistory:"아직 감지 없음."},makerworld:{title:"MakerWorld",description:"MakerWorld 모델 URL을 붙여넣어 Bambu Handy 앱을 떠나지 않고 Bambuddy에서 직접 가져오고 인쇄하세요.",pasteUrlHeader:"MakerWorld에서 가져오기",pasteUrlPlaceholder:"https://makerworld.com/en/models/… 또는 MakerWorld 링크 붙여넣기",resolveButton:"확인",signInRequiredTitle:"다운로드하려면 Bambu 클라우드 로그인 필요",signInRequiredBody:"익명으로 모델 세부 정보를 탐색할 수 있지만 MakerWorld는 3MF 파일을 다운로드하려면 Bambu 클라우드 계정이 필요합니다.",openCloudSettings:"클라우드 설정 열기",untitledModel:"제목 없는 모델",byCreator:"{{name}} 제작",downloadsCount:"{{count}}회 다운로드",licensePrefix:"라이선스",alreadyImported:"이미 라이브러리에 있음",openOnMakerworld:"MakerWorld에서 열기",alreadyInLibrary:"이 모델이 이미 라이브러리에 있습니다 — 파일 관리자 → MakerWorld에서 찾으세요",importSuccess:"{{filename}} 가져옴 — 파일 관리자 → MakerWorld에 저장됨",platesHeader:"플레이트 ({{count}})",plateDefaultName:"플레이트 {{n}}",materialCount:"{{count}}개 필라멘트",amsRequired:"AMS 필요",slicedFor:"{{printer}}용으로 슬라이싱됨",alsoCompatible:"호환 가능으로도 표시됨: {{printers}}",importToLibrary:"저장",sliceIn:"{{slicer}}에서 저장 및 슬라이싱",disclaimer:"MakerWorld 통합은 커뮤니티가 문서화한 API 엔드포인트를 사용합니다. Bambuddy는 MakerWorld 또는 Bambu Lab과 제휴하거나 이들의 승인을 받지 않았습니다.",lastImportSuccess:"라이브러리에 가져옴",lastImportAlreadyInLibrary:"이미 라이브러리에 있음",viewInLibrary:"파일 관리자에서 보기",openInBambuStudio:"Bambu Studio에서 열기",openInOrcaSlicer:"OrcaSlicer에서 열기",importTo:"파일 관리자로 가져오기",recentImportsHeader:"최근 가져오기",phaseResolving:"확인 중",phaseDownloading:"다운로드 중",folderAuto:"MakerWorld (기본값)",importAll:"모두 가져오기",importAllProgress:"{{total}}개 중 {{current}}개 가져오는 중",openGallery:"이미지 갤러리 열기",galleryPrev:"이전 이미지",galleryNext:"다음 이미지",deleteImport:"라이브러리에서 제거",importDeleting:"제거 중…",importDeleted:"라이브러리에서 제거됨",confirmDelete:"라이브러리에서 {{filename}}을(를) 제거하시겠습니까? 로컬 파일이 삭제되지만 MakerWorld에서 다시 가져올 수 있습니다.",errors:{resolveFailed:"MakerWorld URL을 확인할 수 없습니다.",downloadFailed:"다운로드 실패. 다시 시도하세요.",deleteFailed:"라이브러리에서 파일을 제거할 수 없습니다."}},gcodeViewer:{back:"뒤로",backToArchives:"인쇄 아카이브로 돌아가기",backToFiles:"파일 관리자로 돌아가기"},libraryTrash:{title:"휴지통",headerButton:"휴지통",headerTooltip:"휴지통으로 이동된 파일 보기",backToFiles:"파일 관리자로 돌아가기",subtitleAdmin:"삭제된 파일은 {{days}}일 동안 여기에 보관된 후 자동 삭제됩니다. 이 보기는 모든 사용자의 휴지통 파일을 표시합니다.",subtitleUser:"삭제된 파일은 {{days}}일 동안 여기에 보관된 후 자동 삭제됩니다.",loading:"휴지통 불러오는 중…",loadError:"휴지통을 불러올 수 없습니다.",empty:"휴지통이 비어 있습니다.",summary:"{{count}}개 파일 · {{size}}",emptyTrash:"휴지통 비우기",restore:"복원",purgeNow:"지금 삭제",autoPurgeIn:"{{when}} 후 자동 삭제",days:"일",retentionLabel:"자동 삭제 기간",selectAll:"모두 선택",selectOne:"{{filename}} 선택",selectionCount:"{{count}}개 선택됨",bulkRestore:"선택 항목 복원",bulkPurge:"선택 항목 삭제",col:{filename:"파일",folder:"폴더",size:"크기",deleted:"휴지통 이동일",autoPurge:"자동 삭제일",owner:"소유자",actions:"작업"},confirm:{purgeTitle:"영구 삭제?",purgeBody:"{{filename}}이(가) 디스크에서 삭제되며 복원할 수 없습니다.",emptyTitle:"휴지통을 비우시겠습니까?",emptyBody:"{{count}}개의 모든 파일이 디스크에서 삭제됩니다. 이 작업은 취소할 수 없습니다.",bulkPurgeTitle:"선택한 파일을 영구 삭제하시겠습니까?",bulkPurgeBody:"선택한 {{count}}개 파일이 디스크에서 삭제되며 복원할 수 없습니다.",cta:"영구 삭제"},toast:{restored:"파일이 복원되었습니다.",restoreFailed:"파일을 복원할 수 없습니다.",purged:"파일이 영구 삭제되었습니다.",purgeFailed:"파일을 삭제할 수 없습니다.",emptied:"휴지통에서 {{count}}개 파일이 삭제되었습니다.",emptyFailed:"휴지통을 비울 수 없습니다.",retentionSaved:"자동 삭제가 {{days}}일로 설정되었습니다.",retentionFailed:"보존 설정을 저장할 수 없습니다.",bulkRestored:"{{count}}개 파일이 복원되었습니다.",bulkPurged:"{{count}}개 파일이 삭제되었습니다."}},libraryPurge:{title:"오래된 파일 삭제",headerButton:"오래된 파일 삭제",headerTooltip:"오래된 파일을 휴지통으로 일괄 이동",description:"라이브러리에서 오래된 파일을 한 번에 정리합니다. 인쇄 기록이 있는 파일은 마지막 인쇄 날짜 기준으로, 한 번도 인쇄되지 않은 파일은 업로드 날짜 기준으로 계산됩니다.",ageLabel:"다음보다 오래된 파일 이동",days:"일",includeNeverPrinted:"한 번도 인쇄되지 않은 파일 포함",effectsTitle:"삭제 클릭 시 일어나는 일",effect1:"일치하는 파일이 휴지통으로 이동됩니다 — 디스크에서 아직 삭제되지 않습니다.",effect2:"보존 기간이 만료되기 전까지 언제든 휴지통에서 복원할 수 있습니다.",effect3:"보존 기간 후 휴지통 청소기가 디스크에서 영구적으로 제거합니다.",effect4:"외부(연결된) 폴더의 파일은 건너뜁니다 — Bambuddy는 자신이 소유하지 않은 바이트는 절대 삭제하지 않습니다.",previewLoading:"일치하는 파일 수 확인 중…",previewFailed:"삭제 미리보기를 불러올 수 없습니다.",previewSummary:"{{count}}개 파일 · {{size}}이(가) 휴지통으로 이동됩니다",andMore:"…및 {{count}}개 더",warning:"휴지통 파일은 보존 기간이 만료될 때까지 저장 공간을 차지합니다. 즉시 디스크를 확보하려면 나중에 휴지통을 비우세요.",confirmCta:"{{count}}개를 휴지통으로 이동",purging:"휴지통으로 이동 중…",toast:{success:"{{count}}개 파일을 휴지통으로 이동했습니다.",failed:"파일을 삭제할 수 없습니다."}},libraryAutoPurge:{enableLabel:"오래된 파일 자동 삭제",enableDescription:"매일 한 번 관리자 삭제를 실행합니다. 파일이 먼저 휴지통으로 이동됩니다 — 즉시 삭제되지 않습니다.",ageLabel:"다음보다 오래된 파일 자동 삭제",ageDescription:"최소 7일, 최대 10년. 수동 삭제 버튼과 같은 날짜 규칙을 사용합니다.",days:"일",includeNeverPrinted:"한 번도 인쇄되지 않은 파일 포함",saveFailed:"자동 삭제 설정을 저장할 수 없습니다."},archivePurge:{headerButton:"오래된 것 삭제",headerTooltip:"오래된 아카이브 일괄 삭제",title:"오래된 아카이브 삭제",description:"오래된 인쇄 기록을 정리합니다. 각 아카이브는 가장 최근 인쇄 완료 시점 기준으로 계산됩니다 — 아카이브를 다시 인쇄하면 날짜가 새로고침되므로 활성 작업은 절대 삭제되지 않습니다.",ageLabel:"다음 기간 동안 인쇄되지 않은 아카이브 삭제",days:"일",effectsTitle:"삭제 클릭 시 일어나는 일",effect1:"일치하는 각 아카이브가 데이터베이스에서 영구적으로 제거됩니다.",effect2:"3MF, 썸네일, 타임랩스, 소스 3MF, F3D 디자인 파일 및 사진 폴더가 모두 디스크에서 삭제됩니다.",effect3:"아카이브에 대한 휴지통이 없습니다 — 삭제는 즉각적이며 취소할 수 없습니다.",effect4:"아카이브를 다시 인쇄하면 날짜 카운터가 초기화되므로 여전히 사용하는 아카이브는 안전합니다.",previewLoading:"일치하는 아카이브 수 확인 중…",previewFailed:"삭제 미리보기를 불러올 수 없습니다.",previewSummary:"{{count}}개 아카이브 · {{size}}이(가) 삭제됩니다",andMore:"…및 {{count}}개 더",warning:"영구적입니다. 계속하기 전에 보관하고 싶은 것을 다운로드하거나 즐겨찾기에 추가하세요.",confirmCta:"{{count}}개 아카이브 삭제",purging:"삭제 중…",toast:{success:"{{count}}개 아카이브가 삭제되었습니다.",failed:"아카이브를 삭제할 수 없습니다."},purgeStatsLabel:"통계에서도 제거",purgeStatsHint:"일치하는 아카이브를 빠른 통계(필라멘트, 시간, 비용, 에너지)에서 삭제합니다. 이 옵션 없이는 빠른 통계는 모든 기여를 유지하고 파일만 디스크에서 제거됩니다."},archiveAutoPurge:{enableLabel:"오래된 아카이브 자동 삭제",enableDescription:"매일 한 번, 임계값 내에 인쇄되지 않은 아카이브를 영구적으로 삭제합니다. 아카이브를 다시 인쇄하면 카운터가 초기화됩니다. 휴지통 없음 — 삭제는 즉각적입니다.",ageLabel:"다음 기간 동안 인쇄되지 않은 아카이브 자동 삭제",ageDescription:"최소 7일, 최대 10년. 가장 최근 인쇄 완료 시점 기준 — 아카이브를 다시 인쇄하면 날짜가 새로고침됩니다. 아카이브, 3MF, 썸네일, 타임랩스 및 사진을 삭제합니다.",days:"일",runNow:"지금 아카이브 삭제",saveFailed:"자동 삭제 설정을 저장할 수 없습니다.",purgeStatsLabel:"통계에서도 제거",purgeStatsDescription:"활성화되면 일일 정리 작업도 각 삭제된 아카이브를 빠른 통계(필라멘트, 시간, 비용, 에너지)에서 제거합니다. 기본값 비활성화 — 빠른 통계는 기여를 유지하고 파일만 디스크에서 제거됩니다."},cameraTokens:{title:"카메라 API 토큰",navTitle:"카메라 API 토큰",description:"Home Assistant, Frigate, 키오스크 또는 안정적인 URL이 필요한 다른 도구에 카메라 스트림을 내장하기 위한 장기 토큰. 각 토큰은 카메라 스트림 전용이며 언제든지 취소할 수 있습니다.",loading:"불러오는 중…",confirmRevoke:{title:"이 토큰을 취소하시겠습니까?",body:'"{{name}}"을(를) 사용하는 모든 장치가 즉시 접근을 잃습니다. 이 작업은 취소할 수 없습니다.',cancel:"취소",confirm:"취소"},create:{title:"새 토큰 만들기",nameLabel:"토큰 이름",namePlaceholder:"예: Home Assistant",daysLabel:"만료까지 일 수",submit:"만들기",hint:"최대 수명은 365일입니다. 토큰 값은 생성 시 한 번만 표시됩니다 — 지금 복사하세요."},created:{title:"토큰 생성됨 — 지금 복사하세요",warning:"이 토큰은 이 번만 볼 수 있습니다. 이 대화상자를 닫으면 다시는 볼 수 없습니다.",copy:"복사",dismiss:"저장했습니다"},list:{myTitle:"내 토큰",allTitle:"모든 사용자 (관리자 보기)",empty:"아직 토큰 없음.",name:"이름",owner:"소유자",prefix:"접두사",created:"생성일",expires:"만료일",lastUsed:"마지막 사용",revoke:"취소",expired:"만료됨"},toast:{created:"토큰 생성됨",createFailed:"토큰 생성 실패",revoked:"토큰 취소됨",revokeFailed:"토큰 취소 실패",loadFailed:"토큰 불러오기 실패",copied:"클립보드에 복사됨",copyFailed:"복사 실패 — 수동으로 선택하여 복사하세요"}},forecast:{title:"예측",noSpools:"활성 스풀을 찾을 수 없습니다. 예측 데이터를 보려면 재고에 스풀을 추가하세요.",noUsageData:"사용 데이터를 사용할 수 없습니다 — 재고 타임라인을 예측할 수 없습니다.",sku:"SKU",material:"재료",stock:"재고",dailyRate:"소비율",daysLeft:"남은 일수",emptyBy:"소진 예정일",reorderBy:"재주문 기한",actions:"작업",trend:"추세",estimated:"추정",noData:"데이터 없음",timeframe:"기간",chartTitle:"예상 재고 — 상위 5개 재료",dashedLinesROP:"점선 = 재주문 시점",stockLevel:"재고 수준",reorderPoint:"재주문 시점",safetyMargin:"안전 마진",trendLegend:"추세 (기록 기반, 95% 서비스 수준)",estimatedLegend:"추정 (무게 변화)",noDataLegend:"데이터 없음",ropLabel:"ROP",ssLabel:"SS",safetyStockLegend:"안전 재고",stockArrivalLegend:"재고 입고",stockoutLegend:"재고 소진",alertCount_one:"{{count}}개 알림",alertCount_other:"{{count}}개 알림",order:"주문",save:"저장",cancel:"취소",settingsSaved:"설정 저장됨",failedSaveSettings:"설정 저장 실패",globalLeadTimeSaved:"전역 리드 타임 저장됨",globalLeadTime:"전역 리드 타임",globalLeadTimeHint:"전역 리드 타임 하한값 — 모든 SKU의 재주문 시점 계산에 사용됨",skuLeadTimeOverride:"SKU 리드 타임 재정의",skuLeadTimeHint:"0 = 전역 리드 타임 사용. 이 SKU에 대해 재정의하려면 >0으로 설정.",safetyMarginLabel:"안전 마진",effectiveLeadTime:"유효 리드 타임",effectiveLeadTimeHint:"max(전역 {{global}}일, SKU {{sku}}일)",reorderPointHint:"d̄ × LT + 안전 마진 — 재고가 이 수준에 도달하면 주문",safetyMarginHint:"통계적 안전 재고 (z=1.65 × σ × √LT) + 사용자 정의 버퍼",safetyMarginHintDays:"통계적 안전 재고 위에 추가되는 버퍼.{{approx}}",safetyMarginHintDaysApprox:" ≈ 현재 소비율로 {{g}}g.",safetyMarginHintG:"통계적 안전 재고 위에 추가되는 고정 무게 버퍼.{{approx}}",safetyMarginHintGApprox:" ≈ 현재 소비율로 {{days}}일.",individualSpools:"개별 스풀",labelWeight:"라벨",spoolCount_one:"스풀 {{count}}개",spoolCount_other:"스풀 {{count}}개",stockBreakRisk:"재고 소진 위험",stockBreakDetail:"{{days}}일 남음, 리드 타임 {{lt}}일.",stockBreakBefore:"보충 전 재고 소진",reorderNow:"지금 재주문",reorderTriggerPassed:"트리거 날짜 {{date}}가 지났습니다.",shoppingList:"쇼핑 목록",shoppingListItems_one:"({{count}}개 항목)",shoppingListItems_other:"({{count}}개 항목)",shoppingListEmpty:"쇼핑 목록이 비어 있습니다. 항목을 추가하려면 행의 장바구니 아이콘을 클릭하세요.",addToCart:"쇼핑 목록에 추가",alertsSnoozed:"이 SKU의 알림 음소거",alertsEnabled:"이 SKU의 알림 음소거 해제",addedToCart:"쇼핑 목록에 추가됨",failedAddItem:"항목 추가 실패",listView:"목록",logisticsView:"물류",qty:"수량",weight:"무게",leadTime:"리드 타임",expectedRestock:"예상 재입고",status:"상태",note:"메모",pending:"대기 중",purchased:"구매됨",received:"수령됨",markPurchased:"구매됨으로 표시",markReceived:"수령됨으로 표시 — 재고에 스풀 추가",resetToPending:"대기 중으로 초기화",remove:"제거",clearAll:"모두 초기화",downloadCsv:"CSV",addToCartTitle:"쇼핑 목록에 추가",byQuantity:"수량 기준",byDuration:"기간 기준",numberOfSpools:"스풀 수",lastHowManyDays:"몇 일 동안 지속되어야 합니까?",noUsageQty:"사용 데이터 없음 — 수량을 1로 설정합니다.",noteOptional:"메모 (선택사항)",notePlaceholder:"예: 프로젝트 X용, 긴급…",addNSpools_one:"스풀 {{count}}개 추가",addNSpools_other:"스풀 {{count}}개 추가",onArrival:"입고 시",stockBreakIn:"{{days}}일 후 재고 소진.",stockRunsOutBefore:"{{lt}}일 리드 타임이 경과하기 전에 재고가 소진됩니다.",atRate:"{{rate}}g/일 소비율로",moreSpools_one:"스풀 {{count}}개 더",moreSpools_other:"스풀 {{count}}개 더",bridgeGap:"격차를 메우기 위해 필요합니다.",noReadAccess:"재고 예측을 볼 권한이 없습니다.",noWriteAccess:"예측 설정을 수정할 권한이 없습니다."},diagnostic:{modalTitle:"연결 진단 — {{name}}",running:"진단 실행 중...",runningElapsed:"진단 실행 중... ({{elapsed}}초)",waitingForReportHint:"프린터가 상태 보고를 게시하기를 기다리는 중 — 최대 {{max}}초 걸릴 수 있습니다.",runFailed:"진단 실행 실패: {{error}}",retry:"다시 실행",runButton:"진단 실행",sectionTitle:"연결 진단",sectionDescription:"프린터가 연결되지 않거나 인쇄되지 않는 이유를 확인합니다 — 포트 연결 가능 여부, LAN 개발자 모드, Docker 네트워크 모드, 자격증명.",noPrinters:"구성된 프린터가 없습니다.",overall:{ok:"문제가 발견되지 않았습니다 — 프린터 연결이 정상입니다.",warnings:"프린터가 작동하지만 일부 항목에 주의가 필요합니다.",problems:"프린터가 연결되지 않거나 인쇄되지 않는 원인이 되는 문제가 발견되었습니다."},check:{port_mqtt:{title:"제어 포트 (MQTT 8883)",pass:"연결 가능 — 프린터가 제어 연결을 수락하고 있습니다.",fail:"포트 8883에 연결할 수 없습니다. 프린터가 꺼져 있거나, IP 주소가 다르거나, 방화벽이 차단하고 있습니다. 프린터 IP를 확인하고 포트 8883이 차단되지 않았는지 확인하세요."},port_ftps:{title:"파일 전송 포트 (FTPS 990)",pass:"연결 가능 — 인쇄 파일 전송이 작동합니다.",warn:"포트 990에 연결할 수 없습니다. 모니터링은 작동할 수 있지만 프린터로 파일 전송에 실패합니다. 포트 990이 차단되지 않았는지 확인하세요."},external_storage:{title:"전송된 파일을 외부 저장소에 저장 (설치 단계 4)",pass:"프린터가 이 옵션이 켜져 있다고 보고합니다 — 전송된 파일이 SD 카드에 저장되며 아카이브에 썸네일과 슬라이서 메타데이터가 포함됩니다.",fail:'프린터가 이 옵션이 꺼져 있다고 보고합니다. "전송된 파일을 외부 저장소에 저장"을 활성화하세요 — 최신 펌웨어 (P2S 01.02 / Bambu Studio 2.6 이상)에서는 프린터의 인쇄 설정에 토글이 있고, 이전 버전에서는 Bambu Studio / OrcaSlicer의 장치 탭에 있습니다. 이 옵션이 없으면 아카이브된 모든 인쇄물에 썸네일과 슬라이서 메타데이터가 없습니다.',skip:"확인되지 않음 — 활성 MQTT 연결이 필요합니다. 이 설정이 슬라이서에만 존재하는 이전 슬라이서에서는 프린터가 보고하지 않으므로, 옵션이 꺼져 있어도 이 검사는 통과합니다 — 설치 단계 4를 수동으로 확인하세요."},port_rtsps:{title:"카메라 포트 (RTSPS 322)",pass:"연결 가능 — 카메라 스트림이 작동합니다.",warn:"포트 322에 연결할 수 없습니다. 라이브 카메라 보기가 작동하지 않습니다. 인쇄에는 영향을 주지 않습니다."},network_mode:{title:"Docker 네트워크 모드",pass:"호스트 네트워크 모드로 실행 중입니다.",warn:'Bambuddy가 Docker 브리지 네트워킹으로 실행 중입니다. 프린터 검색과 가상 프린터에는 호스트 네트워크 모드가 필요합니다 — "network_mode: host"로 컨테이너를 재생성하세요.',skip:"Docker에서 실행 중이 아닙니다 — 해당 없음."},subnet:{title:"네트워크 서브넷",pass:"프린터와 Bambuddy가 같은 서브넷에 있습니다.",warn:"프린터({{printer_ip}})와 Bambuddy({{host_ip}})가 다른 서브넷에 있습니다. 서브넷 간 라우팅이 구성되어 있지 않으면 서로 연결하지 못할 수 있습니다.",skip:"서브넷을 확인할 수 없어 건너뜁니다."},mqtt_auth:{title:"프린터 자격증명",pass:"프린터가 연결을 수락했습니다.",fail:"프린터에 연결됐지만 연결을 거부했습니다. 액세스 코드 또는 시리얼 번호가 잘못됐을 가능성이 높습니다. 개발자 모드를 토글할 때마다 액세스 코드가 변경됩니다 — 프린터 화면에서 다시 복사하세요.",skip:"확인하지 않음 — 프린터에 연결할 수 없었습니다."},developer_mode:{title:"LAN 개발자 모드",pass:"개발자 모드가 활성화되어 있습니다.",fail:"프린터에서 개발자 모드가 꺼져 있습니다. 프린터의 LAN 설정에서 활성화하고 확인을 누르세요. 이 없으면 인쇄가 시작되지 않습니다.",skip:"확인할 수 없음 — 프린터에 연결되어 있어야 합니다."},printer_publishing:{title:"프린터가 상태를 게시 중",pass:"프린터가 상태 업데이트를 게시하고 있습니다 — AMS, 필라멘트, K-프로파일이 슬라이서에 올바르게 반영됩니다.",fail:"MQTT 브로커는 연결을 수락했지만 프린터가 상태 보고를 게시하지 않았습니다. 거의 항상 시리얼 번호가 잘못되었거나 대소문자가 일치하지 않아서 발생합니다 — device//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.",refreshIcon:"Atualizar ícone",removeIcon:"Remover ícone",iconRefreshed:"Ícone atualizado.",iconRemoved:"Ícone removido.",iconFetchFailed:"Não foi possível obter o ícone da URL do provedor.",deleteTitle:"Excluir provedor",deleteMessage:'Excluir "{{name}}"? Todas as contas vinculadas serão desconectadas.',form:{name:"Nome de exibição",issuerUrl:"URL do emissor",clientId:"ID do cliente",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",emailClaim:"Claim de e-mail",emailClaimDesc:"Claim JWT usado como identidade de e-mail. Use 'preferred_username' ou 'upn' para Azure Entra ID (que não envia email_verified). Use apenas nomes de claim confiáveis.",emailClaimPlaceholder:"e-mail",emailClaimCustomClaimAutoLinkWarning:"Claims personalizadas são seguras para vinculação automática apenas quando o valor é administrado pelo tenant (ex. Azure Entra ID upn / preferred_username). Não ative a vinculação automática se seu IdP permite que usuários auto-declarem essa claim.",requireEmailVerified:"Exigir e-mail verificado",requireEmailVerifiedDesc:"Aceitar o claim de e-mail apenas quando o provedor o marcar como verificado.",requireEmailVerifiedWarning:"Aviso: o e-mail será aceito sem verificação. Use apenas com provedores confiáveis.",requireEmailVerifiedAutoLink:"Desabilite o vínculo automático primeiro para alterar esta configuração.",defaultGroup:"Grupo padrão",defaultGroupDesc:"Grupo atribuído aos usuários criados automaticamente. Retorna a Viewers se não definido.",defaultGroupViewersFallback:"Viewers (padrão)"}},encryption:{title:"Status de criptografia MFA",enabledFromEnv:"Criptografia em repouso ativa (chave da variável de ambiente MFA_ENCRYPTION_KEY)",enabledFromFile:"Criptografia em repouso ativa (chave do diretório de dados)",enabledGenerated:"Criptografia em repouso ativa com chave auto-gerada",notConfigured:"Criptografia em repouso não configurada",notConfiguredDesc:"Os segredos TOTP e client_secrets OIDC são armazenados em texto plano. Defina MFA_ENCRYPTION_KEY ou reinicie o Bambuddy com um diretório de dados gravável para gerar automaticamente.",allEncrypted:"Todos os segredos MFA são criptografados em repouso.",legacyRowsLabel:"Linhas legadas em texto plano",encryptedRowsLabel:"Linhas criptografadas",legacyRowsWarning:"{{count}} linha(s) legada(s) em texto plano detectada(s). Salve novamente o provedor OIDC ou registre novamente o autenticador do usuário para migrar ao armazenamento criptografado.",backupHint:"A chave auto-gerada é armazenada em DATA_DIR/.mfa_encryption_key e incluída em ZIPs de backup locais. Mantenha seus backups seguros ou defina MFA_ENCRYPTION_KEY explicitamente.",decryptionBrokenTitle:"Chave de criptografia ausente",decryptionBrokenError:"{{count}} registro(s) criptografado(s) não podem ser descriptografados pois a chave de criptografia não está mais disponível. Restaure o MFA_ENCRYPTION_KEY anterior ou DATA_DIR/.mfa_encryption_key para recuperar.",migrationErrorWarning:"{{count}} linha(s) antiga(s) não puderam ser recriptografadas na inicialização. Verifique os logs do servidor e reinicie o Bambuddy para tentar novamente."},spoolbuddy:{infoTitle:"Dispositivos SpoolBuddy",infoBody:"Os kiosks SpoolBuddy se registram automaticamente via heartbeat. Cancele o registro de um dispositivo aqui se não estiver mais em uso ou se um duplicado obsoleto foi deixado por uma falha do daemon.",duplicatesTitle:"{{count}} dispositivos registrados",duplicatesBody:"Apenas o primeiro dispositivo registrado é usado pela interface do kiosk. Se algum destes for um duplicado obsoleto após uma falha, cancele seu registro — um dispositivo online se registrará novamente no próximo heartbeat.",empty:"Nenhum dispositivo SpoolBuddy registrado ainda.",online:"Online",offline:"Offline",unregister:"Cancelar registro",unregisterSuccess:"Dispositivo removido",unregisterError:"Falha ao cancelar registro",confirmTitle:"Cancelar registro do dispositivo SpoolBuddy?",confirmBody:'Isso removerá "{{hostname}}" ({{deviceId}}) do banco de dados. Se o dispositivo estiver online, ele se registrará novamente no próximo heartbeat.',ipAddress:"Endereço IP",firmware:"Firmware",lastSeen:"Visto pela última vez",daemonUptime:"Tempo ativo do daemon",systemUptime:"Tempo ativo do sistema",never:"nunca",nfc:"NFC",scale:"Balança",cpuTemp:"Temp. CPU",cpuLoad:"Carga da CPU",memory:"Memória",disk:"Disco",update:"Atualizar",updateConfirmTitle:"Atualizar daemon do Spoolbuddy?",updateConfirmBody:'Iniciar uma atualização de software em "{{hostname}}"? O daemon será reiniciado após a aplicação.',restartBrowser:"Reiniciar navegador",restartBrowserConfirmTitle:"Reiniciar o navegador do kiosk?",restartBrowserConfirmBody:'Reiniciar o navegador do kiosk em "{{hostname}}"? A tela ficará em branco brevemente.',restartDaemon:"Reiniciar daemon",restartDaemonConfirmTitle:"Reiniciar daemon do Spoolbuddy?",restartDaemonConfirmBody:'Reiniciar o daemon do Spoolbuddy em "{{hostname}}"? O dispositivo ficará offline por alguns segundos.',reboot:"Reiniciar",rebootConfirmTitle:"Reiniciar o dispositivo?",rebootConfirmBody:'Reiniciar "{{hostname}}"? O dispositivo ficará offline por cerca de um minuto.',shutdown:"Desligar",shutdownConfirmTitle:"Desligar o dispositivo?",shutdownConfirmBody:'Desligar "{{hostname}}"? Será necessário acesso físico para ligá-lo novamente.',commandConfirm:"Confirmar",commandQueued:"Comando enfileirado",commandError:"Falha ao enviar comando"}},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:"Login Bambuddy",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...",rememberMe:"Lembrar de mim",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",unavailable:"Câmera indisponível",diagnose:{button:"Diagnóstico",modalTitle:"Diagnóstico da câmera",running:"Executando diagnóstico...",runFailed:"Não foi possível executar o diagnóstico: {{error}}",retry:"Executar novamente",stage:{tcp_reachable:"Conectividade de rede",first_frame:"Captura de frame",live_stream_active:"Transmissão ao vivo ativa"},summary:{all_ok:"A câmera está funcionando. O diagnóstico concluiu todas as etapas com sucesso.",live_stream_active_healthy:"A câmera está transmitindo com frames recentes — nenhum teste necessário.",printer_unreachable:"Impressora inacessível. Verifique o endereço IP, a conexão de rede e se a impressora está ligada.",camera_port_closed:"A impressora responde mas a porta da câmera está fechada. Verifique se o modo LAN e o modo desenvolvedor estão ativados nas configurações da impressora.",no_frame:"Conexão com a câmera estabelecida mas nenhum frame recebido. Tente novamente ou verifique se a câmera está habilitada nas configurações da impressora.",unknown_failure:"Diagnóstico da câmera falhou por motivo desconhecido. Consulte o log de suporte para mais detalhes."},meta:{protocol:"Protocolo",port:"Porta",profile:"Perfil"}}},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:"Administrador",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",ldapProvisioned:'Usuário LDAP "{{username}}" provisionado'},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",tabsAriaLabel:"Fonte do usuário",localTab:"Local",ldapTab:"LDAP",ldapSearchLabel:"Pesquisar diretório",ldapSearchPlaceholder:"Digite um nome de usuário, nome ou e-mail...",ldapMinChars:"Digite ao menos 2 caracteres para pesquisar",ldapTypeToSearch:"Comece a digitar para pesquisar o diretório LDAP",ldapSearching:"Pesquisando diretório...",ldapNoResults:"Nenhum usuário correspondente no diretório",ldapSearchError:"Falha na pesquisa do diretório. Verifique o status do servidor LDAP.",ldapAlreadyProvisioned:"Já provisionado",ldapSelectedLabel:"Selecionado",ldapProvision:"Provisionar usuário",ldapProvisioning:"Provisionando...",ldapErrorProvision:"Falha no provisionamento. Verifique o status do servidor LDAP e tente novamente."},form:{username:"Nome de Usuário",usernamePlaceholder:"Insira o nome de usuário",email:"E-mail",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:"Sobreposição de stream",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:{bambuCloud:"Bambu Cloud",orcaCloud:"Orca Cloud",local:"Perfis Locais",kprofiles:"K-Perfis"},orcaCloud:{connectedAs:"Conectado como",logout:"Desconectar",noLogoutPermission:"Você não tem permissão para desconectar",noConnectPermission:"Você não tem permissão para conectar ao Orca Cloud",retry:"Tentar novamente",back:"Usar outro método de login",connect:{title:"Conectar ao Orca Cloud",description:"Entre na sua conta Orca Cloud para sincronizar seus perfis de slicer no Bambuddy."},providers:{google:"Entrar com Google",apple:"Entrar com Apple",github:"Entrar com GitHub",email:"Entrar com e-mail e senha"},password:{title:"Entrar com e-mail e senha",email:"E-mail",emailPlaceholder:"voce@exemplo.com.br",password:"Senha",submit:"Entrar"},paste:{title:"Concluir login",step1:"Uma nova aba abriu com a página de login do Orca Cloud. Entre com sua conta Orca.",step2:'Seu navegador será redirecionado para uma URL "localhost" que não carregará. Isso é esperado — é dessa URL que precisamos.',step3:"Copie a URL completa da barra de endereços do navegador e cole abaixo.",signInUrl:"Se a aba de login não abriu, clique nesta URL:",label:"Cole a URL de callback aqui",placeholder:"http://localhost:41172/callback?code=...&state=...",submit:"Concluir conexão"},profiles:{title:"Seus perfis do Orca Cloud ({{count}})",refresh:"Atualizar",empty:"Nenhum perfil encontrado na sua conta Orca Cloud ainda."},toast:{connected:"Conectado ao Orca Cloud como {{email}}",disconnected:"Desconectado do Orca Cloud"},errors:{startFailed:"Não foi possível iniciar o login do Orca Cloud.",finishFailed:"Não foi possível concluir o login do Orca Cloud.",passwordFailed:"Não foi possível entrar com esse e-mail e senha.",passwordEmpty:"Insira o e-mail e a senha.",emptyPaste:"Cole a URL de callback do seu navegador.",noCode:"Essa URL não parece ser um callback do Orca Cloud (sem parâmetro code). Copie a URL completa da barra de endereços."}},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",noSearchResults:"Nenhum preset corresponde à sua busca",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:"E-mail",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 da Bambu Cloud. Contas da região China precisam usar este caminho (vinculadas ao celular — login por e-mail indisponível). Veja no wiki como obter o token dos cookies do MakerWorld.",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",bundleGenerating:"Gerando pacote...",bundleStepConnection:"Executando verificações de conectividade das impressoras",bundleStepVirtualPrinters:"Executando verificações de configuração das impressoras virtuais",bundleStepLogScan:"Analisando registros recentes em busca de problemas conhecidos",bundleStepBuild:"Criando o ZIP do pacote de suporte"},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",invalidFilenameChar:'O caractere "{{char}}" não é permitido em nomes de arquivos de impressão. O cartão SD da impressora rejeita: < > : " / \\ | ? *',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",allExternal:"Externos",externalIsEmpty:"Nenhum arquivo externo",externalEmptyDescription:"Os arquivos das suas pastas externas vinculadas aparecerão aqui.",wrap:"Quebrar texto",enableTextWrapping:"Ativar quebra de texto",disableTextWrapping:"Desativar quebra de texto",collapse:"Recolher",collapseFoldersByDefault:"Recolher pastas por padrão",expandFoldersByDefault:"Expandir pastas por padrão",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",noPermissionSlice:"Você não tem permissão para fatiar arquivos",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...",urlLabel:"URL",urlPlaceholder:"https://makerworld.com/...",urlInvalid:"A URL deve começar com http:// ou https://",openExternalUrl:"Abrir URL do projeto",coverImageLabel:"Imagem de capa",coverImageAlt:"Imagem de capa do projeto",coverImageUpload:"Enviar",coverImageReplace:"Substituir",coverImageRemove:"Remover",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:"Registros",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"},slice:{title:"Fatiar modelo",action:"Fatiar",actionAll:"Fatiar todas as {{count}} bandejas",actionAllTitle:"Fatiar todas as bandejas em uma saída multi-bandeja única (um único arquivo). A seleção de filamento cobre cada slot definido pelo projeto.",allPlatesToggle:"Fatiar todas as {{count}} bandejas",slicing:"Fatiando…",printer:"Perfil de impressora",process:"Perfil de processo",filament:"Perfil de filamento",filamentSlot:"Filamento {{index}} ({{type}})",selectPreset:"— Selecione uma predefinição —",loadingPresets:"Carregando predefinições…",analyzingPlateFilaments:"Analisando filamentos da mesa…",analyzingPlateFilamentsHint:"Executando uma fatia de pré-visualização para descobrir quais slots AMS esta mesa usa. Cacheado depois — reabrir é instantâneo.",previewToast:"Analisando {{name}} – {{elapsed}}",previewWithProgress:"Analisando {{name}} – {{stage}} ({{percent}}%) – {{elapsed}}",notUsedByPlate:"— não usado por esta mesa",noPresetsForSlot:"Nenhuma predefinição disponível",otherPrinters:"Outras impressoras",presetsLoadFailed:"Falha ao carregar predefinições. Abra Configurações → Perfis para importá-las primeiro.",refreshPresets:"Atualizar",refreshPresetsTitle:"Atualizar predefinições — buscar as listagens mais recentes da nuvem e dos pacotes (use após excluir uma predefinição no Bambu Studio ou Bambu Handy)",allPresetsRequired:"Todas as predefinições devem ser selecionadas",bundle:"Pacote do fatiador",bundleNone:"— Nenhum (escolher predefinições individualmente) —",bundleAllRequired:"O processo do pacote e cada slot de filamento devem ser escolhidos",enqueuing:"Enviando trabalho de fatiamento…",queued:"Na fila…",failed:"Falha ao fatiar. Verifique os logs do sidecar.",startedToast:"Fatiando {{name}} em segundo plano…",queuedToast:"Na fila: {{name}} – {{elapsed}}",runningToast:"Fatiando {{name}} – {{elapsed}}",runningWithProgress:"{{name}} – {{stage}} ({{percent}}%) – {{elapsed}}",runningWithProgressMultiPlate:"Bandeja {{plateIndex}} de {{plateCount}} • {{name}} – {{stage}} ({{percent}}%) – {{elapsed}}",completedToast:"{{name}} fatiado",failedTitle:"Falha ao fatiar",failedToast:"Falha ao fatiar {{name}}: {{detail}}",tier:{local:"Importado",cloud:"Bambu Cloud",orcaCloud:"Orca Cloud",standard:"Padrão"},cloud:{notAuthenticated:"Faça login no Bambu Cloud (Configurações → Perfis → Bambu Cloud) para ver as predefinições.",expired:"Sessão do Bambu Cloud expirou – faça login novamente para atualizar as predefinições.",unreachable:"Bambu Cloud está inacessível agora. Predefinições locais e padrão ainda funcionam."},orcaCloud:{notAuthenticated:"Entre no Orca Cloud (Perfis → Orca Cloud) para ver seus presets Orca.",expired:"Sessão do Orca Cloud expirada — entre novamente para atualizar seus presets Orca.",unreachable:"Orca Cloud está indisponível no momento. Outros presets continuam funcionando."},bedType:{label:"Mesa de impressão",auto:"Auto (usar predefinição de processo)",coolPlate:"Cool Plate",coolPlateSuperTack:"Cool Plate SuperTack",engineering:"Engineering Plate",highTemp:"High Temp Plate",texturedPEI:"Textured PEI Plate",smoothPEI:"Smooth PEI Plate"}},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:"Remover atribuição do carretel?",unlinkConfirmMessage:"Isso removerá o carretel deste slot. Os dados do próprio carretel permanecerão inalterados.",selectSpool:"Selecionar Carretel",noUnlinkedSpools:"Nenhum carretel não atribuído disponível",linkSuccess:"Carretel atribuído com sucesso",linkFailed:"Falha ao atribuir carretel",unlinkSuccess:"Atribuição do carretel removida com sucesso",unlinkFailed:"Falha ao remover atribuição do carretel",linkedSpool:"Carretel atribuído",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",subtitle:"Gerencie seus carretéis",spoolmanMixedContentTitle:"Spoolman não pode carregar em HTTPS — conteúdo misto bloqueado pelo navegador",spoolmanMixedContentBody:"O Bambuddy é servido via HTTPS (pelo seu reverse proxy), mas a URL do Spoolman ainda é HTTP. Os navegadores bloqueiam conteúdo misto por segurança, então a interface embutida do Spoolman não consegue carregar. O Spoolman também precisa estar acessível via HTTPS.",spoolmanMixedContentFixReverseProxy:"Coloque o Spoolman atrás do mesmo reverse proxy do Bambuddy (Traefik / Nginx / Caddy) com HTTPS e atualize a URL do Spoolman em Configurações com o novo endereço HTTPS.",spoolmanMixedContentFixOpenNewTab:"Como alternativa, abra o Spoolman em uma nova aba via HTTP — as regras de conteúdo misto só se aplicam a frames embutidos, uma aba independente funciona normalmente.",spoolmanOpenInNewTab:"Abrir Spoolman em nova aba",labels:{title:"Imprimir etiquetas de bobinas",selectedCount:"{{count}} selecionado",pickSpools:"Escolha para quais bobinas imprimir etiquetas:",searchPlaceholder:"Buscar por nome, marca ou #ID",filterByMaterial:"Material:",allMaterials:"Tudo",selectVisible:"Selecionar todos visíveis ({{count}})",deselectVisible:"Desmarcar visíveis",clearAll:"Limpar tudo",noSpoolsToShow:"Nenhuma bobina para mostrar. Ajuste o filtro e tente novamente.",noMatches:"Nenhuma bobina corresponde à pesquisa ou filtro atual.",printOne:"Imprimir etiqueta desta bobina",printLabels:"Imprimir etiquetas…",bulkTitle:"Escolha bobinas para etiquetar entre as {{count}} exibidas",noSpoolsTitle:"Nenhuma bobina para rotular",error:"Não foi possível gerar etiquetas: {{msg}}",sortBy:{label:"Ordenar:",id:"Por ID",color:"Por cor"},templates:{amsHolderSmall:{label:"Suporte AMS — pequeno (74 × 33 mm)",hint:"Uma etiqueta por página; corresponde à etiqueta imprimível do modelo MakerWorld 752566 (Suporte de etiquetas de filamento AMS)."},amsHolderLarge:{label:"Suporte AMS — grande (75 × 55 mm)",hint:"Uma etiqueta por página; encaixa na variante com inserto em cartão do Suporte de etiquetas de filamento AMS. Espaço suficiente para amostra de cor, marca, material, ID e QR code."},box40x30:{label:"Etiqueta de caixa (40 × 30 mm)",hint:"Uma etiqueta por página; tamanho comum de rolo DK/Brother, ideal para etiquetar sacos de filamento e caixas de armazenamento."},box:{label:"Box label (62 × 29 mm)",hint:"Uma etiqueta por página; tamanho para Brother PT/QL e etiquetas pequenas Dymo."},averyL7160:{label:"Avery L7160 — A4 sheet (38.1 × 63.5 mm × 21)",hint:"Formato de folha UE; 21 etiquetas por página A4."},avery5160:{label:"Avery 5160 — US Letter sheet (25.4 × 66.7 mm × 30)",hint:"Formato de folha US; 30 etiquetas por página Letter."}}},csv:{importButton:"Importar CSV",exportButton:"Exportar CSV",modalTitle:"Importar carretéis de CSV",selectFile:"Escolha um arquivo CSV ou arraste-o aqui",dragHint:"Cabeçalho: material (obrigatório), brand, subtype, color_name, rgba, …",parsing:"Lendo arquivo…",previewError:"Não foi possível ler o arquivo CSV",validCount:"{{count}} válidos",errorCount:"{{count}} com erro",skippedCount:"{{count}} ignorados",colRow:"Linha",colStatus:"Status",colColor:"Cor",colorResolved:"Cor preenchida pelo catálogo",colorCrossMaterial:"Cor obtida de um material diferente — sem correspondência exata no catálogo",duplicateExisting:"Já existe uma bobina com este material, marca e cor — ela será importada mesmo assim como uma nova bobina",spoolmanHint:"No modo Spoolman, use a importação/exportação CSV integrada do Spoolman.",importValidRows:"Importar {{count}} linhas válidas",noValidRows:"Nenhuma linha válida",importing:"Importando…",importSuccess:"{{count}} carretéis importados",importError:"Falha na importação",exportError:"Falha na exportação"},addSpool:"Adicionar Carretel",editSpool:"Editar Carretel",copySpool:"Copiar 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:"Branco Jade, Vermelho Fogo...",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",storageLocation:"Local de armazenamento",storageLocationPlaceholder:"ex. Prateleira A, Gaveta 1",openInInventory:"Abrir no inventário",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...",category:"Categoria",categoryPlaceholder:"ex. Produção, Protótipo, Cliente A",categoryNone:"Sem categoria",storageLocationNone:"Sem local definido",lowStockThresholdOverride:"Limite de estoque baixo (este carretel)",lowStockThresholdOverrideHelp:"Deixe em branco para usar o limite global ({{global}}%).",clearRfid:"Limpar tag RFID",rfidCleared:"Tag RFID limpa",archive:"Arquivar",restore:"Restaurar",noSpools:"Nenhum carretel ainda. Adicione seu primeiro carretel para começar.",noAvailableSpools:"Nenhum carretel disponível. Adicione um carretel ao seu inventário ou desatribua um de outro slot primeiro.",kProfiles:"K-Perfis",addKProfile:"Adicionar K-Perfil",assignSpool:"Atribuir Carretel",unassignSpool:"Desatribuir",assignSuccess:"Carretel atribuído e slot AMS configurado",assignPendingInsert:"Atribuído. O slot será configurado quando você inserir o carretel.",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",spoolmanSpools:"Bobinas Spoolman",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",spoolsPartiallyCreated:"{{created}} de {{total}} carretéis criados (alguns falharam)",spoolCreated:"Carretel criado",spoolUpdated:"Carretel atualizado",spoolDeleted:"Carretel excluído",deepLinkSpoolNotFound:"Carretel não encontrado",deepLinkFetchFailed:"Não foi possível carregar o carretel — tente novamente",spoolArchived:"Carretel arquivado",spoolRestored:"Carretel restaurado",kProfileSaveFailed:"Não foi possível salvar as configurações do perfil K",syncWeightSpoolNotFound:"Carretel não encontrado — pode ter sido excluído",syncWeightSpoolmanUnreachable:"Spoolman está inacessível — tente novamente mais tarde",syncWeightFailed:"Falha ao sincronizar o peso",spoolmanUnreachable:"Spoolman está inacessível — tente novamente mais tarde",deleteSpoolNotFound:"Carretel não encontrado — pode já ter sido excluído",deleteFailed:"Falha ao excluir carretel",archiveSpoolNotFound:"Carretel não encontrado — pode já ter sido excluído",archiveFailed:"Falha ao arquivar carretel",restoreSpoolNotFound:"Carretel não encontrado — pode já ter sido excluído",restoreFailed:"Falha ao restaurar carretel",saveFailed:"Falha ao salvar as alterações",tagClearFailed:"Falha ao limpar a tag",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",extraColorsLabel:"Cores extras",extraColorsPlaceholder:"EC984C,#6CD4BC,A66EB9,D87694",extraColorsHint:"Cole 2 a 8 paradas hex, separadas por vírgulas. Renderizado como gradiente.",extraColorsInvalid:"Hex inválidos ignorados: {{tokens}}",colorEffectLabel:"Efeito",colorEffect:{none:"Nenhum",sparkle:"Brilho",wood:"Madeira",marble:"Mármore",glow:"Brilho",matte:"Fosco",silk:"Silk",galaxy:"Galáxia",rainbow:"Arco-íris",metal:"Metal",translucent:"Translúcido",gradient:"Gradiente",dualColor:"Dupla cor",triColor:"Tricolor",multicolor:"Multicolor"},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",resetConsumedCounter:"Zerar contador",resetConsumedCounterTooltip:"Zerar o contador de gramas consumidas desta bobina. O peso restante não é alterado.",resetConsumedCounterConfirm:"Zerar o contador de gramas consumidas desta bobina? As impressões futuras voltarão a contar do zero. A bobina em si, o cálculo do peso restante e as configurações não são alterados.",resetAllConsumedCounters:"Zerar todos os contadores",resetAllConsumedCountersTooltip:"Zerar o contador de gramas consumidas em todas as bobinas. Os pesos restantes não são alterados.",resetAllConsumedCountersConfirm:'Zerar o contador de gramas consumidas nas {{count}} bobinas (incluindo as arquivadas)? Isso limpa o "Total Consumido" para que as impressões futuras contem do zero. Bobinas e pesos restantes não são alterados.',consumedCounterReset:"Contador zerado",allConsumedCountersReset:"Contador zerado em {{count}} bobina(s)",resetConsumedCounterFailed:"Falha ao zerar o contador",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?',assignReconfigureNote:"O slot do AMS será reconfigurado para usar o perfil do carretel.",spoolmanFilamentCatalog:"Catálogo de filamentos Spoolman",pickFromSpoolmanCatalog:"Escolher do catálogo Spoolman…",spoolmanFilamentSelected:"Filamento selecionado do catálogo Spoolman",spoolmanFilamentUnlinked:"Vínculo com o catálogo de filamentos removido",noSpoolmanFilaments:"Nenhum filamento encontrado no catálogo Spoolman",spoolmanFilamentColorSwatch:"Cor do filamento",spoolWeightManagedBySpoolman:"O peso do carretel vazio é gerenciado por tipo de filamento no Spoolman",spoolmanCatalogLoadFailed:"Falha ao carregar catálogo de filamentos do Spoolman"},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",slotEmpty:"Vazio",slotUnconfigured:"?",emptySlotReset:"Nenhum carretel atribuído",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:"Escalonar inícios",staggerGroupSize:"Tamanho do grupo",staggerInterval:"Intervalo (min)",staggerPreview:"{{printers}} impressoras → {{groups}} grupos de {{size}}, iniciando a cada {{interval}} min",staggerLastGroup:"último grupo: {{count}}",staggerTotal:"total: {{minutes}} min",staggerToPrinters:"Escalonar para {{count}} impressoras",gcodeInjection:"Injetar G-code de auto-impressão"},backup:{includesEncryptionKey:"Backups locais incluem o arquivo da chave de criptografia MFA (DATA_DIR/.mfa_encryption_key), então o backup ZIP é autossuficiente. Trate o ZIP como sensível — quem tiver o arquivo pode descriptografar os client secrets OIDC e os segredos TOTP armazenados.",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:"Backup automático",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.",repoIsPrivate:"O repositório é privado — seguro para backup.",repoIsPublicWarning:"O repositório está PÚBLICO. Os backups do Bambuddy incluem credenciais MQTT, tokens do Home Assistant, tokens do Prometheus, seu e-mail do Bambu Cloud e os códigos de acesso das impressoras via K-profiles. Salvar está bloqueado até que você torne o repositório privado nas configurações do seu provedor.",repoVisibilityUnknown:"Não foi possível determinar a visibilidade do repositório. O Bambuddy se recusa a fazer backup em qualquer destino não confirmado como privado; salvar será bloqueado.",repositoryUrl:"URL do repositório",repoUrlPlaceholderGitHub:"https://github.com/username/repo-name",repoUrlPlaceholderGitea:"https://gitea.example.com/username/repo-name",repoUrlPlaceholderForgejo:"https://forgejo.example.com/username/repo-name",repoUrlPlaceholderGitLab:"https://gitlab.com/username/repo-name",allowInsecureHttp:"Permitir HTTP inseguro",allowInsecureHttpHint:"Ativar para instâncias auto-hospedadas em redes privadas sem TLS",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",provider:"Provedor Git",providerGitHub:"GitHub",providerGitLab:"GitLab",providerGitea:"Gitea",providerForgejo:"Forgejo",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:"Tomadas inteligentes",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:"Backups agendados",scheduledBackupDescription:"Cria automaticamente snapshots de backup conforme agendamento. O diretório de saída pode ser montado em um NAS ou armazenamento externo.",frequency:"Frequência",backupTime:"Tempo",retention:"Retenção",retentionDescription:"Número de backups a manter",outputPath:"Caminho de saída",outputPathPlaceholder:"Padrão: {{path}}",outputPathDescription:"Deixe em branco para o local padrão",runNow:"Executar agora",backupFiles:"Arquivos de backup",noScheduledBackups:"Sem backups ainda",deleteBackup:"Excluir",deleteBackupConfirm:"Excluir este arquivo de backup?",backupRunning:"Backup em andamento...",scheduledBackupComplete:"Backup concluído com sucesso",scheduledBackupFailed:"Falha no backup",nextBackup:"Próximo backup",backupSize:"Tamanho",localTimeHint:"Horário local ({{tz}})",defaultPathLabel:"Padrão:",categories:{settings:"Configurações",notification_providers:"Provedores de notificação",notification_templates:"Modelos de notificação",smart_plugs:"Tomadas inteligentes",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:"Etiquetas",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:"Etiquetas",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:"Empenamento",stringing:"Fios",underExtrusion:"Subextrusão",powerFailure:"Falha de energia",userCancelled:"Cancelado pelo usuário",other:"Outro"},statuses:{completed:"Concluído",failed:"Falhou",aborted:"Cancelado",printing:"Imprimindo"}},kProfiles:{title:"Perfis K",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)",inheritedFromTarget:"Herdado da impressora alvo",derivedFromTargetHint:"Usa o código de acesso da impressora alvo. A ponte encaminha a autenticação do slicer para a impressora real, então os códigos precisam corresponder — edite o código nas configurações da impressora para alterá-lo.",reveal:"Mostrar código de acesso",hide:"Ocultar código de acesso"},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."},queueForceColorMatch:{title:"Forçar correspondência de cor",description:"Recusa enviar para uma impressora que não tenha exatamente o tipo e cor de filamento carregados. Desativado por padrão — sem isto, a fila usa apenas correspondência por modelo e pode escolher uma impressora com a cor errada carregada."},tailscaleDisabled:{title:"Integração Tailscale",description:"Ative para marcar este VP como exposto via Tailscale. Mostra o endereço Tailscale do host para você saber qual IP colar no fatiador. A etapa de importação CA é inalterada — este toggle não afeta certificados."},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",copyFailed:"Falha ao copiar — selecione o texto manualmente",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",targetCodeChangedRebind:"O código de acesso agora corresponde à nova impressora alvo. Adicione este dispositivo novamente no seu slicer para usar o novo código.",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.'},archiveNameSource:{title:"Origem do nome do arquivo",description:'Escolha como os novos arquivos são nomeados quando chegam pela impressora virtual. "Metadados" usa o título embutido pelo slicer no 3MF (padrão). "Nome do arquivo" usa o nome que o Bambu Studio enviou via FTP. Nota: o Bambu Studio sobrescreve o nome digitado no diálogo "enviar para impressora" com o campo Título do 3MF quando presente, portanto ambos os modos costumam produzir a mesma string.',metadata:"Metadados",filename:"Nome do arquivo"},caCert:{title:"Certificado do slicer",description:"As impressoras virtuais usam um certificado TLS assinado pela CA do Bambuddy. Importe este certificado CA para o armazenamento de confiança do seu slicer uma única vez para que ele aceite a conexão — sem precisar copiá-lo pela linha de comando.",copy:"Copiar",copied:"Copiado",download:"Baixar",fingerprint:"SHA-256"}},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:"Administrador",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",autoOffAfterDrying:"Desligar Após Secagem",autoOffAfterDryingDescription:"Desligar quando a secagem do AMS terminar",delayAfterDryingMinutes:"Atraso após secagem (minutos)",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:"Controle",restOnUrl:"URL para ligar",restOffUrl:"URL para desligar",restOnBody:"Corpo da requisição ON",restOffBody:"Corpo da requisição OFF",restMethod:"Método HTTP",restHeaders:"Custom Headers (JSON)",restStatusUrl:"URL de status",restStatusPath:"Caminho JSON de estado",restStatusOnValue:"Valor ON",restPowerUrl:"URL de potência",restPowerPath:"Caminho JSON de energia",restPowerMultiplier:"Multiplicador de potência",restEnergyUrl:"URL de energia",restEnergyPath:"Caminho JSON de energia",restEnergyMultiplier:"Multiplicador de energia",restUrlRequired:"Ao menos uma URL (ON ou OFF) é necessária para tomadas REST",restHeadersHint:'ex. {"Authorization": "Bearer your-token"}',restBodyHint:'ex. ON, {"state": "on"}',restStatusHint:"URL para consultar o estado atual",restPathHint:"ex. state ou 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:"Testar conexão",connectionSuccess:"Conexão bem-sucedida",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",inventoryAlerts:"Alertas de Estoque",stockReorderAlert:"Alerta de Reposição",stockReorderAlertDescription:"O SKU atingiu seu ponto de reposição",stockBreakAlert:"Alerta de Ruptura de Estoque",stockBreakAlertDescription:"O estoque se esgotará antes da chegada do reabastecimento",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)",eventPriority:{sectionTitle:"Prioridade ntfy",helpNtfy:"Escolha uma prioridade para cada evento habilitado. O ntfy usa isso para escalar alertas (som, visibilidade, comportamento push). Níveis não definidos aqui usam o padrão do servidor ntfy.",min:"Mín",low:"Baixa",default:"Padrão",high:"Alta",urgent:"Urgente"},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:"Perfis K",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 Git",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:"Etiqueta",grossWeight:"Peso bruto",spoolSize:"Tamanho do carretel",close:"Fechar",currentSpool:"Carretel Atual",plateReady:"Mesa pronta: {{name}}",plateReadyLabel:"Mesas para liberar",plateClearAction:"Liberar",plateClearedToast:"Mesa marcada como limpa",plateClearFailed:"Não foi possível marcar a mesa como limpa"},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!",assignPendingInsert:"Atribuído. O slot será configurado quando você inserir o carretel.",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/D",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...",tareComplete:"Tara concluída!",tareTimedOut:"Tempo esgotado para a tara — o daemon do SpoolBuddy está em execução?",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",systemConfig:"Backend e autenticação",backendUrl:"URL do backend Bambuddy",apiToken:"Token de API",apiTokenPlaceholder:"Insira o token de API",saveConfig:"Salvar configuração",systemQueued:"Configuração enfileirada.",systemFieldsRequired:"URL do backend é obrigatória.",nfcDiagnostic:"Diagnóstico NFC",scaleDiagnostic:"Diagnóstico da balança",readTagDiagnostic:"Diagnóstico de leitura de tag",testNfc:"Testar leitor",testScale:"Testar precisão",testReadTag:"Ler tag"},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",incompleteDataWarning:"Tag gravada com dados Spoolman incompletos"},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"}},diagnostic:{modalTitle:"Diagnóstico de conexão — {{name}}",running:"Executando diagnóstico...",runningElapsed:"Executando diagnóstico... ({{elapsed}}s)",waitingForReportHint:"Aguardando a impressora publicar um relatório de status — pode levar até {{max}} segundos.",runFailed:"Não foi possível executar o diagnóstico: {{error}}",retry:"Executar novamente",runButton:"Executar diagnóstico",sectionTitle:"Diagnóstico de conexão",sectionDescription:"Verifique por que uma impressora não conecta ou não imprime — acessibilidade das portas, modo desenvolvedor LAN, modo de rede Docker e credenciais.",noPrinters:"Nenhuma impressora configurada.",overall:{ok:"Nenhum problema encontrado — a conexão da impressora parece saudável.",warnings:"A impressora deve funcionar, mas alguns pontos exigem atenção.",problems:"Foram encontrados problemas que explicam por que a impressora não conecta ou não imprime."},check:{port_mqtt:{title:"Porta de controle (MQTT 8883)",pass:"Acessível — a impressora está aceitando conexões de controle.",fail:"A porta 8883 está inacessível. A impressora está desligada, em outro endereço IP, ou um firewall está bloqueando. Verifique o IP da impressora e se nada bloqueia a porta 8883."},port_ftps:{title:"Porta de transferência de arquivos (FTPS 990)",pass:"Acessível — o envio de arquivos de impressão funcionará.",warn:"A porta 990 está inacessível. O monitoramento ainda pode funcionar, mas o envio de impressões para a impressora falhará. Verifique se a porta 990 não está bloqueada."},external_storage:{title:"Armazenar arquivos enviados no armazenamento externo (passo 4 da instalação)",pass:"A impressora informa que esta opção está ligada — os arquivos enviados serão armazenados no cartão SD e os arquivos terão miniaturas e metadados do fatiador.",fail:'A impressora informa que esta opção está desligada. Ative "Armazenar arquivos enviados no armazenamento externo" — em firmwares recentes (P2S 01.02 / Bambu Studio 2.6+) o interruptor fica nas Configurações de Impressão da impressora; em versões mais antigas, está na aba Dispositivo do Bambu Studio / OrcaSlicer. Sem essa opção, cada impressão arquivada fica sem miniatura nem metadados do fatiador.',skip:"Não verificado — é necessária uma conexão MQTT ativa. Em fatiadores mais antigos onde essa configuração existe apenas no fatiador, a impressora não a reporta, então esta verificação passa mesmo com a opção desligada — verifique o passo 4 da instalação manualmente."},port_rtsps:{title:"Porta da câmera (RTSPS 322)",pass:"Acessível — o streaming da câmera funcionará.",warn:"A porta 322 está inacessível. A visualização ao vivo da câmera não funcionará. Isso não afeta a impressão."},network_mode:{title:"Modo de rede Docker",pass:"Executando no modo de rede host.",warn:'O Bambuddy está sendo executado em rede Docker bridge. A descoberta de impressoras e a impressora virtual precisam do modo de rede host — recrie o contêiner com "network_mode: host".',skip:"Não está sendo executado no Docker — não aplicável."},subnet:{title:"Sub-rede",pass:"A impressora e o Bambuddy estão na mesma sub-rede.",warn:"A impressora ({{printer_ip}}) e o Bambuddy ({{host_ip}}) estão em sub-redes diferentes. Eles podem não se alcançar, a menos que o roteamento entre as sub-redes esteja configurado.",skip:"Não foi possível determinar a sub-rede — ignorado."},mqtt_auth:{title:"Credenciais da impressora",pass:"A impressora aceitou a conexão.",fail:"A impressora está acessível mas recusou a conexão. O código de acesso ou o número de série provavelmente está incorreto. O código de acesso muda toda vez que o Modo Desenvolvedor é alternado — copie-o novamente da tela da impressora.",skip:"Não verificado — não foi possível alcançar a impressora."},developer_mode:{title:"Modo Desenvolvedor LAN",pass:"O Modo Desenvolvedor está ativado.",fail:"O Modo Desenvolvedor está DESLIGADO na impressora. Ative-o nas configurações de LAN da impressora — e confirme com OK. Sem ele, as impressões não iniciarão.",skip:"Não foi possível verificar — requer uma conexão ativa com a impressora."},printer_publishing:{title:"Impressora publicando status",pass:"A impressora está publicando atualizações de status — AMS, filamentos e perfis K serão espelhados corretamente para o slicer.",fail:"O broker MQTT aceitou a conexão, mas a impressora não publicou nenhum relatório de status. Quase sempre é um número de série errado ou com maiúsculas/minúsculas incorretas — o tópico device//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:"提供商已删除。",refreshIcon:"刷新图标",removeIcon:"移除图标",iconRefreshed:"图标已刷新。",iconRemoved:"图标已移除。",iconFetchFailed:"无法从提供商 URL 获取图标。",deleteTitle:"删除提供商",deleteMessage:'删除"{{name}}"?所有关联账户将断开连接。',form:{name:"显示名称",issuerUrl:"颁发者 URL",clientId:"客户端 ID",clientSecret:"客户端密钥",scopes:"作用域",iconUrl:"图标 URL(可选)",enabled:"已启用",autoCreate:"自动创建用户",autoCreateDesc:"首次登录时自动创建本地账户。",autoLink:"自动关联已有账户",autoLinkDesc:"首次登录时通过邮箱匹配现有本地账户并自动关联。",secretHint:"留空以保留当前",secretPlaceholder:"新密钥",emailClaim:"邮箱声明",emailClaimDesc:"用作邮箱身份的 JWT 声明。Azure Entra ID 请使用 'preferred_username' 或 'upn'(不发送 email_verified)。仅使用可信的声明名称。",emailClaimPlaceholder:"邮箱",emailClaimCustomClaimAutoLinkWarning:"自定义声明仅在值由租户管理时(例如 Azure Entra ID 的 upn / preferred_username)对自动关联安全。如果您的 IdP 允许用户自我声明此声明,请勿启用自动关联。",requireEmailVerified:"要求邮箱已验证",requireEmailVerifiedDesc:"仅在提供商将邮箱声明标记为已验证时才接受。",requireEmailVerifiedWarning:"警告:将在未经验证的情况下接受邮箱。仅对受信任的提供商使用。",requireEmailVerifiedAutoLink:"请先禁用自动关联以更改此设置。",defaultGroup:"默认组",defaultGroupDesc:"自动创建用户时分配的组。未设置时回退到 Viewers。",defaultGroupViewersFallback:"Viewers(默认)"}},encryption:{title:"MFA 加密状态",enabledFromEnv:"已启用静态加密(密钥来自 MFA_ENCRYPTION_KEY 环境变量)",enabledFromFile:"已启用静态加密(密钥从数据目录加载)",enabledGenerated:"使用自动生成的密钥启用静态加密",notConfigured:"未配置静态加密",notConfiguredDesc:"TOTP 密钥和 OIDC client_secrets 以明文存储。请设置 MFA_ENCRYPTION_KEY 或使用可写数据目录重启 Bambuddy 以自动生成。",allEncrypted:"所有 MFA 密钥均已静态加密。",legacyRowsLabel:"旧版明文行",encryptedRowsLabel:"已加密行",legacyRowsWarning:"检测到 {{count}} 个旧版明文行。请重新保存 OIDC 提供商或重新注册用户的身份验证器应用,以迁移到加密存储。",backupHint:"自动生成的密钥存储在 DATA_DIR/.mfa_encryption_key 中,并包含在本地备份 ZIP 中。请保护备份安全或显式设置 MFA_ENCRYPTION_KEY。",decryptionBrokenTitle:"加密密钥缺失",decryptionBrokenError:"无法解密 {{count}} 条加密记录,因为加密密钥不再可用。请恢复以前的 MFA_ENCRYPTION_KEY 或 DATA_DIR/.mfa_encryption_key 以恢复访问。",migrationErrorWarning:"{{count}} 行旧数据在启动时未能重新加密。请检查服务器日志并重启 Bambuddy 以重试。"}},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:"登录中...",rememberMe:"记住我",forgotPassword:"忘记密码?",loginSuccess:"登录成功",loginFailed:"登录失败",enterCredentials:"请输入用户名和密码",enterEmail:"请输入您的电子邮件地址",oidcLoginFailed:"OIDC 登录失败",oidcErrors:{providerError:"身份提供商返回了一个错误",missingParameters:"OIDC 回调缺少必要参数",invalidState:"OIDC 状态无效或已被使用",stateExpired:"OIDC 登录会话已过期,请重试",providerNotFound:"未找到 OIDC 提供商",discoveryFailed:"无法获取 OIDC 发现文档",invalidDiscovery:"OIDC 发现文档无效",networkError:"OIDC 令牌交换时出现网络错误",badResponse:"OIDC 令牌交换时收到意外响应",noIdToken:"OIDC 提供商未返回 ID 令牌",validationFailed:"OIDC 令牌验证失败",nonceMismatch:"OIDC nonce 不匹配,可能存在重放攻击",missingSubClaim:"OIDC 令牌缺少 sub 声明",noLinkedAccount:"没有与此 OIDC 身份关联的本地帐户",accountInactive:"您的帐户已被停用",userResolutionFailed:"无法解析您的帐户",internalError:"OIDC 登录过程中发生内部错误",tokenExchangeFailed:"OIDC 令牌交换失败"},forgotPasswordTitle:"忘记密码",forgotPasswordMessage:"如果您忘记了密码,请联系系统管理员进行重置。",forgotPasswordEmailMessage:"输入您的邮箱地址,我们将向您发送新密码。",emailAddress:"邮箱地址",emailPlaceholder:"your.email@example.com",cancel:"取消",sending:"发送中...",sendResetEmail:"发送重置邮件",howToReset:"如何重置密码:",resetStep1:"联系您的 Bambuddy 管理员",resetStep2:"请他们在用户管理中重置您的密码",resetStep3:"他们可以为您设置一个临时密码",resetStep4:"使用新密码登录并在设置中修改密码",gotIt:"知道了",resetPassword:{title:"设置新密码",subtitle:"请在下方输入并确认您的新密码。",newPassword:"新密码",newPasswordPlaceholder:"至少 8 个字符",confirmPassword:"确认密码",confirmPasswordPlaceholder:"重复输入新密码",saving:"保存中…",submit:"设置新密码",backToLogin:"返回登录",passwordsDoNotMatch:"密码不匹配",passwordTooShort:"密码至少需要 8 个字符",resetFailed:"密码重置失败。链接可能已过期。"},twoFA:{title:"两步验证",subtitle:"您的账户已启用两步验证。请在下方输入验证码。",methodAuthenticator:"身份验证器应用",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:"切换腔室灯",unavailable:"摄像头不可用",diagnose:{button:"诊断",modalTitle:"摄像头诊断",running:"正在运行诊断...",runFailed:"无法运行诊断: {{error}}",retry:"重新运行",stage:{tcp_reachable:"网络可达性",first_frame:"画面捕获",live_stream_active:"直播流正在进行"},summary:{all_ok:"摄像头工作正常。诊断已成功完成所有阶段。",live_stream_active_healthy:"摄像头正在传输最新画面 — 无需测试。",printer_unreachable:"无法访问打印机。请检查 IP 地址、网络连接以及打印机是否已开机。",camera_port_closed:"打印机可访问,但摄像头端口已关闭。请确保打印机设置中已启用仅 LAN 模式和开发者模式。",no_frame:"已连接到摄像头,但未收到画面。请重试或检查打印机设置中摄像头是否已启用。",unknown_failure:"摄像头诊断因未知原因失败。请查看支持日志了解详情。"},meta:{protocol:"协议",port:"端口",profile:"配置"}}},groups:{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 个字符",ldapProvisioned:"已创建 LDAP 用户「{{username}}」"},modal:{createUser:"创建用户",editUser:"编辑用户",cancel:"取消",creating:"创建中...",saving:"保存中...",saveChanges:"保存更改",advancedAuthSubtitle:"使用高级认证",tabsAriaLabel:"用户来源",localTab:"本地",ldapTab:"LDAP",ldapSearchLabel:"搜索目录",ldapSearchPlaceholder:"输入用户名、姓名或电子邮件...",ldapMinChars:"输入至少 2 个字符以搜索",ldapTypeToSearch:"开始输入以搜索 LDAP 目录",ldapSearching:"搜索目录中...",ldapNoResults:"目录中没有匹配的用户",ldapSearchError:"目录搜索失败。请检查 LDAP 服务器状态。",ldapAlreadyProvisioned:"已创建",ldapSelectedLabel:"已选",ldapProvision:"创建用户",ldapProvisioning:"创建中...",ldapErrorProvision:"创建失败。请检查 LDAP 服务器状态后重试。"},form:{username:"用户名",usernamePlaceholder:"输入用户名",email:"邮箱",emailPlaceholder:"user@example.com",password:"密码",passwordPlaceholder:"输入密码",confirmPassword:"确认密码",confirmPasswordPlaceholder:"确认密码",newPasswordPlaceholder:"输入新密码",confirmNewPasswordPlaceholder:"确认新密码",leaveBlankToKeep:"留空以保持当前值",groups:"组",optional:"可选",autoGeneratedPassword:"将自动生成安全密码并通过邮件发送给用户。",passwordManagedByAdvancedAuth:'密码由高级认证管理。使用"重置密码"通过邮件向用户发送新密码。',resetPassword:"重置密码",resettingPassword:"重置密码中..."},deleteModal:{title:"删除用户",message:"确定要删除此用户吗?此操作无法撤销。",confirm:"删除用户"}},streamOverlay:{title:"流叠加层",invalidPrinterId:"无效的打印机 ID",cameraStream:"摄像头流",progress:"进度",eta:"预计完成时间",printerIdle:"打印机空闲",printerOffline:"打印机离线",status:{printing:"打印中",paused:"已暂停",finished:"已完成",failed:"失败",idle:"空闲",unknown:"未知"}},profiles:{title:"配置文件",subtitle:"管理您的切片预设和压力推进校准",tabs:{bambuCloud:"Bambu Cloud",orcaCloud:"Orca Cloud",local:"本地配置文件",kprofiles:"K 值配置"},orcaCloud:{connectedAs:"已连接",logout:"断开连接",noLogoutPermission:"您没有断开连接的权限",noConnectPermission:"您没有连接到 Orca Cloud 的权限",retry:"重试",back:"使用其他登录方式",connect:{title:"连接到 Orca Cloud",description:"登录您的 Orca Cloud 账户,将切片机配置同步到 Bambuddy。"},providers:{google:"使用 Google 登录",apple:"使用 Apple 登录",github:"使用 GitHub 登录",email:"使用邮箱和密码登录"},password:{title:"使用邮箱和密码登录",email:"邮箱",emailPlaceholder:"you@example.com",password:"密码",submit:"登录"},paste:{title:"完成登录",step1:"已在新标签页中打开 Orca Cloud 登录页面。请使用您的 Orca 账户登录。",step2:'您的浏览器将被重定向到一个 "localhost" URL,该 URL 无法加载。这是正常的 — 我们需要的就是这个 URL。',step3:"从浏览器的地址栏复制整个 URL,粘贴到下方。",signInUrl:"如果登录标签页未打开,请点击此 URL:",label:"在此处粘贴回调 URL",placeholder:"http://localhost:41172/callback?code=...&state=...",submit:"完成连接"},profiles:{title:"您的 Orca Cloud 配置文件 ({{count}})",refresh:"刷新",empty:"您的 Orca Cloud 账户中尚无配置文件。"},toast:{connected:"已以 {{email}} 身份连接到 Orca Cloud",disconnected:"已从 Orca Cloud 断开连接"},errors:{startFailed:"无法启动 Orca Cloud 登录流程。",finishFailed:"无法完成 Orca Cloud 登录。",passwordFailed:"无法使用该邮箱和密码登录。",passwordEmpty:"请输入邮箱和密码。",emptyPaste:"请从浏览器粘贴回调 URL。",noCode:"该 URL 不像 Orca Cloud 回调 (缺少 code 参数)。请从地址栏复制完整 URL。"}},localProfiles:{title:"本地配置文件",subtitle:"从 OrcaSlicer 导入和管理切片预设",import:"导入配置文件",importDesc:"将 .bbscfg、.bbsflmt、.orca_filament、.zip 或 .json 文件拖放到此处",importing:"导入中...",search:"搜索本地预设...",noPresets:"暂无本地预设",noSearchResults:"没有与搜索匹配的预设",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:"粘贴您的拓竹云访问令牌。中国大陆账号(绑定手机号、无邮箱登录)只能使用此方式登录。可从 MakerWorld 浏览器 Cookie 中获取令牌,详见 Wiki。",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 环境详情",bundleGenerating:"正在生成包...",bundleStepConnection:"正在执行打印机连接性检查",bundleStepVirtualPrinters:"正在执行虚拟打印机设置检查",bundleStepLogScan:"正在扫描最近的日志以查找已知问题",bundleStepBuild:"正在构建支持包 ZIP 文件"},fileManager:{title:"文件管理器",subtitle:"组织和管理您的打印文件",uploadFiles:"上传文件",newFolder:"新建文件夹",folderName:"文件夹名称",folderNamePlaceholder:"例如:功能零件",renameFile:"重命名文件",renameFolder:"重命名文件夹",invalidFilenameChar:'打印文件名中不允许使用字符 "{{char}}"。打印机 SD 卡拒绝以下字符: < > : " / \\ | ? *',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:"所有文件",allExternal:"外部",externalIsEmpty:"没有外部文件",externalEmptyDescription:"关联的外部文件夹中的文件将在此显示。",wrap:"换行",enableTextWrapping:"启用文本换行",disableTextWrapping:"禁用文本换行",collapse:"折叠",collapseFoldersByDefault:"默认折叠文件夹",expandFoldersByDefault:"默认展开文件夹",dragToResizeTooltip:"拖动调整大小,双击重置",searchFiles:"搜索文件...",allTypes:"所有类型",prints:"打印",ascending:"升序",descending:"降序",resultsCount:"{{showing}} / {{total}} 个文件",selectAll:"全选",deselectAll:"取消全选",selected:"已选择 {{count}} 个",adding:"添加中...",loadingFiles:"加载文件中...",folderIsEmpty:"文件夹为空",noFilesYet:"暂无文件",folderEmptyDescription:"上传文件或将文件移入此文件夹以开始使用。",noFilesDescription:"上传文件以开始组织您的打印相关文件。",noMatchingFiles:"没有匹配的文件",noMatchingFilesDescription:"没有文件匹配您当前的搜索或筛选条件。",clearFilters:"清除筛选",printedCount:"已打印 {{count}} 次",uploadedBy:"上传者",deleteFolder:"删除文件夹",deleteFile:"删除文件",deleteFilesCount:"删除 {{count}} 个文件",deleteFolderConfirm:"确定要删除此文件夹吗?其中的所有文件也将被删除。",deleteFileConfirm:"确定要删除此文件吗?",deleteFilesConfirm:"确定要删除 {{count}} 个选中的文件吗?此操作无法撤销。",deleting:"删除中...",noPermissionRenameFolder:"您没有重命名文件夹的权限",noPermissionLinkFolder:"您没有链接文件夹的权限",noPermissionDeleteFolder:"您没有删除文件夹的权限",noPermissionPrint:"您没有打印的权限",noPermissionSlice:"您没有切片文件的权限",noPermissionAddToQueue:"您没有添加到队列的权限",noPermissionDownload:"您没有下载文件的权限",noPermissionRenameFile:"您没有重命名此文件的权限",noPermissionGenerateThumbnail:"您没有生成缩略图的权限",noPermissionDeleteFile:"您没有删除此文件的权限",noPermissionCreateFolder:"您没有创建文件夹的权限",noPermissionUpload:"您没有上传文件的权限",noPermissionMoveFiles:"您没有移动文件的权限",noPermissionDeleteFiles:"您没有删除文件的权限",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:"可选描述...",urlLabel:"网址",urlPlaceholder:"https://makerworld.com/...",urlInvalid:"网址必须以 http:// 或 https:// 开头",openExternalUrl:"打开项目网址",coverImageLabel:"封面图片",coverImageAlt:"项目封面图片",coverImageUpload:"上传",coverImageReplace:"替换",coverImageRemove:"移除",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:"导出到文件"},slice:{title:"切片模型",action:"切片",actionAll:"切片全部 {{count}} 个盘面",actionAllTitle:"将所有盘面切片为单个多盘面输出(一个归档)。耗材选择覆盖项目定义的每个槽位。",allPlatesToggle:"切片全部 {{count}} 个盘面",slicing:"切片中…",printer:"打印机配置",process:"工艺配置",filament:"耗材配置",filamentSlot:"耗材 {{index}}({{type}})",selectPreset:"— 选择预设 —",loadingPresets:"加载预设中…",analyzingPlateFilaments:"分析打印板耗材中…",analyzingPlateFilamentsHint:"正在运行预览切片以发现此打印板使用的 AMS 插槽。之后会缓存 — 重新打开是即时的。",previewToast:"分析 {{name}} — {{elapsed}}",previewWithProgress:"分析 {{name}} — {{stage}} ({{percent}}%) — {{elapsed}}",notUsedByPlate:"— 此打印板未使用",noPresetsForSlot:"无可用预设",otherPrinters:"其他打印机",presetsLoadFailed:"加载预设失败。请先打开设置 → 配置文件以导入。",refreshPresets:"刷新",refreshPresetsTitle:"刷新预设 — 获取最新的云端和打包配置列表(在 Bambu Studio 或 Bambu Handy 中删除预设后使用)",allPresetsRequired:"必须选择所有预设",bundle:"切片器套装",bundleNone:"— 无(单独选择预设)—",bundleAllRequired:"必须选择套装的工艺和每个耗材槽",enqueuing:"提交切片任务中…",queued:"已排队…",failed:"切片失败。请检查切片器 sidecar 日志。",startedToast:"在后台切片 {{name}}…",queuedToast:"已排队:{{name}} — {{elapsed}}",runningToast:"切片 {{name}} — {{elapsed}}",runningWithProgress:"{{name}} – {{stage}} ({{percent}}%) – {{elapsed}}",runningWithProgressMultiPlate:"盘面 {{plateIndex}} / {{plateCount}} • {{name}} – {{stage}} ({{percent}}%) – {{elapsed}}",completedToast:"已切片 {{name}}",failedTitle:"切片失败",failedToast:"切片 {{name}} 失败:{{detail}}",tier:{local:"已导入",cloud:"Bambu Cloud",orcaCloud:"Orca Cloud",standard:"标准"},cloud:{notAuthenticated:"登录 Bambu Cloud(设置 → 配置文件 → Bambu Cloud)以查看云端预设。",expired:"Bambu Cloud 会话已过期 — 请重新登录以刷新云端预设。",unreachable:"目前无法访问 Bambu Cloud。本地和标准预设仍可使用。"},orcaCloud:{notAuthenticated:"登录 Orca Cloud(配置文件 → Orca Cloud)以查看您的 Orca 预设。",expired:"Orca Cloud 会话已过期 — 请重新登录以刷新您的 Orca 预设。",unreachable:"Orca Cloud 当前无法访问。其他预设仍可正常使用。"},bedType:{label:"打印板",auto:"自动(使用工艺预设)",coolPlate:"冷板",coolPlateSuperTack:"Cool Plate SuperTack",engineering:"Engineering Plate",highTemp:"High Temp Plate",texturedPEI:"Textured PEI Plate",smoothPEI:"Smooth PEI Plate"}},spoolman:{title:"Spoolman 集成",enabled:"Spoolman 已启用",url:"Spoolman URL",connected:"已连接",disconnected:"未连接",testConnection:"测试连接",sync:"同步",syncing:"同步中...",lastSync:"上次同步",linkToSpoolman:"链接到 Spoolman",openInSpoolman:"在 Spoolman 中打开",unlinkSpool:"取消链接耗材",unlinkConfirmTitle:"取消分配料盘?",unlinkConfirmMessage:"这将从此插槽中移除料盘。料盘本身的数据将保持不变。",selectSpool:"选择耗材",noUnlinkedSpools:"无未分配的料盘",linkSuccess:"料盘分配成功",linkFailed:"料盘分配失败",unlinkSuccess:"料盘取消分配成功",unlinkFailed:"料盘取消分配失败",linkedSpool:"已分配料盘",spoolId:"耗材 ID",fillSourceLabel:"(Spoolman)",weight:"重量",remaining:"剩余",disableWeightSync:"禁用 AMS 估计重量同步",disableWeightSyncDesc:"不从 AMS 估计值更新剩余容量。如果您更喜欢 Spoolman 的用量追踪而非 AMS 百分比估计,请使用此选项。新耗材仍将使用 AMS 估计值作为初始重量。",reportPartialUsage:"报告失败打印的部分用量",reportPartialUsageDesc:"当打印失败或被取消时,根据层进度报告估计的耗材使用量。"},inventory:{title:"耗材库存",subtitle:"管理您的料盘",spoolmanMixedContentTitle:"Spoolman 无法通过 HTTPS 加载 — 浏览器已阻止混合内容",spoolmanMixedContentBody:"Bambuddy 通过您的反向代理以 HTTPS 提供服务,但您的 Spoolman 地址仍为 HTTP。出于安全考虑,浏览器会阻止混合内容,因此嵌入式 Spoolman 界面无法加载。Spoolman 也必须通过 HTTPS 访问。",spoolmanMixedContentFixReverseProxy:"请将 Spoolman 置于与 Bambuddy 相同的反向代理(Traefik / Nginx / Caddy)之后并启用 HTTPS,然后在设置中将 Spoolman URL 更新为新的 HTTPS 地址。",spoolmanMixedContentFixOpenNewTab:"作为变通方案,可在新标签页中通过 HTTP 打开 Spoolman — 混合内容规则仅适用于嵌入式框架,独立标签页仍可正常使用。",spoolmanOpenInNewTab:"在新标签页中打开 Spoolman",labels:{title:"打印线材标签",selectedCount:"已选 {{count}} 项",pickSpools:"选择要打印标签的线材:",searchPlaceholder:"按名称、品牌或 #ID 搜索",filterByMaterial:"材料:",allMaterials:"全部",selectVisible:"选择所有可见 ({{count}})",deselectVisible:"取消选择可见",clearAll:"全部清除",noSpoolsToShow:"没有要显示的线材。请调整筛选条件后重试。",noMatches:"没有线材符合当前搜索或筛选。",printOne:"打印此线材的标签",printLabels:"打印标签…",bulkTitle:"从当前显示的 {{count}} 个线材中选择要打印标签的",noSpoolsTitle:"没有要打标签的线材",error:"无法生成标签:{{msg}}",sortBy:{label:"排序:",id:"按 ID",color:"按颜色"},templates:{amsHolderSmall:{label:"AMS 支架 — 小 (74 × 33 mm)",hint:"每页一个标签;适配 MakerWorld 模型 752566 (AMS 耗材标签支架) 中可打印的标签。"},amsHolderLarge:{label:"AMS 支架 — 大 (75 × 55 mm)",hint:"每页一个标签;适配 AMS 耗材标签支架的卡片插入款。空间充足,可放置色板、品牌、材料、ID 与二维码。"},box40x30:{label:"盒标签 (40 × 30 mm)",hint:"每页一张;常见的 DK/Brother 卷尺寸,适合给耗材袋和储物盒贴标签。"},box:{label:"Box label (62 × 29 mm)",hint:"每页一个标签;适配 Brother PT/QL 和 Dymo 小标签。"},averyL7160:{label:"Avery L7160 — A4 sheet (38.1 × 63.5 mm × 21)",hint:"欧洲规格纸张;每张 A4 页 21 个标签。"},avery5160:{label:"Avery 5160 — US Letter sheet (25.4 × 66.7 mm × 30)",hint:"美国规格纸张;每张 Letter 页 30 个标签。"}}},csv:{importButton:"导入 CSV",exportButton:"导出 CSV",modalTitle:"从 CSV 导入耗材",selectFile:"选择 CSV 文件或拖放到此处",dragHint:"表头:material(必填)、brand、subtype、color_name、rgba、…",parsing:"正在读取文件…",previewError:"无法读取 CSV 文件",validCount:"{{count}} 个有效",errorCount:"{{count}} 个错误",skippedCount:"{{count}} 个跳过",colRow:"行",colStatus:"状态",colColor:"颜色",colorResolved:"已从目录填充颜色",colorCrossMaterial:"颜色取自其他材料 — 目录中无精确匹配",duplicateExisting:"已存在具有此材料、品牌和颜色的料卷 — 仍会作为新料卷导入",spoolmanHint:"在 Spoolman 模式下,请使用 Spoolman 内置的 CSV 导入/导出。",importValidRows:"导入 {{count}} 个有效行",noValidRows:"没有有效行",importing:"正在导入…",importSuccess:"已导入 {{count}} 个耗材",importError:"导入失败",exportError:"导出失败"},addSpool:"添加耗材",editSpool:"编辑耗材",copySpool:"复制耗材",material:"材料",selectMaterial:"选择材料...",subtype:"子类型",brand:"品牌",searchBrand:"搜索品牌...",useCustomBrand:'使用"{{brand}}"',useCustomMaterial:"使用自定义材料:{{material}}",colorName:"颜色名称",colorNamePlaceholder:"翡翠白、烈焰红...",color:"颜色",hexColor:"十六进制颜色",pickColor:"选择自定义颜色",labelWeight:"标签重量",coreWeight:"空盘重量",searchSpoolWeight:"搜索耗材重量...",weightUsed:"已使用",currentWeight:"剩余重量",measuredWeight:"称量重量",spoolName:"线轴",costPerKg:"每公斤成本",storageLocation:"存放位置",storageLocationPlaceholder:"例如:货架A,抽屉1",openInInventory:"在库存中查看",measuredWeightError:"称量重量必须在 {{min}}g 到 {{max}}g 之间。",slicerFilament:"切片耗材",slicerFilamentName:"切片预设名称",slicerPreset:"切片预设",searchPresets:"搜索耗材预设...",selectedPreset:"已选择",noPresetsFound:"未找到预设",tempOverrides:"温度覆盖",note:"备注",notePlaceholder:"关于此耗材的任何备注...",category:"类别",categoryPlaceholder:"例如:生产、原型、客户A",categoryNone:"未分类",storageLocationNone:"未设置位置",lowStockThresholdOverride:"低库存阈值(此料盘)",lowStockThresholdOverrideHelp:"留空以使用全局阈值({{global}}%)。",clearRfid:"清除 RFID 标签",rfidCleared:"RFID 标签已清除",archive:"归档",restore:"恢复",noSpools:"暂无耗材。添加您的第一个耗材开始使用。",noAvailableSpools:"没有可用的耗材。请先向库存中添加耗材,或从其他槽位取消分配一个耗材。",kProfiles:"K 值配置",addKProfile:"添加 K 值配置",assignSpool:"分配耗材",unassignSpool:"取消分配",assignSuccess:"耗材已分配,AMS 槽位已配置",assignPendingInsert:"已分配。插入耗材后将配置槽位。",assignFailed:"分配耗材失败",assignMismatchTitle:"材料不匹配",assignMismatchMessage:'所选线轴材料 "{{spoolMaterial}}" 与 {{location}} 的料槽材料 "{{trayMaterial}}" 不匹配。仍要分配吗?',assignMismatchConfirm:"仍然分配",assignPartialMismatchMessage:'线轴材料 "{{spoolMaterial}}" 与 {{location}} 的 "{{trayMaterial}}" 相近但不完全一致。是否继续?',assignProfileMismatchMessage:'线轴配置 "{{spoolProfile}}" 与 {{location}} 的料槽配置 "{{trayProfile}}" 不一致。是否继续?',assignReconfigureNote:"AMS 槽位将重新配置为使用线轴的配置。",selectSpool:"选择要分配到此槽位的耗材",assigned:"已分配",assigning:"分配中...",searchSpools:"搜索耗材...",showAllSpools:"显示所有耗材",spoolmanSpools:"Spoolman 线轴",allMaterials:"所有材料",filterByBrand:"按品牌筛选...",showArchived:"显示已归档",quickAdd:"快速添加(库存)",quantity:"数量",stock:"库存",configured:"已配置",spoolsCreated:"已创建 {{count}} 个耗材",spoolsPartiallyCreated:"已创建 {{created}} / {{total}} 个耗材(部分失败)",spoolCreated:"耗材已创建",spoolUpdated:"耗材已更新",spoolDeleted:"耗材已删除",deepLinkSpoolNotFound:"未找到耗材",deepLinkFetchFailed:"无法加载耗材 — 请重试",spoolArchived:"耗材已归档",spoolRestored:"耗材已恢复",kProfileSaveFailed:"K值配置文件设置无法保存",syncWeightSpoolNotFound:"未找到耗材 — 可能已被删除",syncWeightSpoolmanUnreachable:"Spoolman 无法访问 — 请稍后再试",syncWeightFailed:"重量同步失败",spoolmanUnreachable:"Spoolman 无法访问 — 请稍后再试",deleteSpoolNotFound:"未找到耗材 — 可能已被删除",deleteFailed:"删除耗材失败",archiveSpoolNotFound:"未找到耗材 — 可能已被删除",archiveFailed:"归档耗材失败",restoreSpoolNotFound:"未找到耗材 — 可能已被删除",restoreFailed:"恢复耗材失败",saveFailed:"保存更改失败",tagClearFailed:"清除标签失败",deleteConfirm:"确定要删除此耗材吗?此操作无法撤销。",archiveConfirm:"确定要归档此耗材吗?",advancedSettings:"高级设置",filamentInfoTab:"耗材信息",paProfileTab:"PA 配置",filamentInfo:"耗材",additional:"附加",loadingPresets:"加载云端预设中...",cloudConnected:"云端已连接",cloudNotConnected:"云端未连接(使用默认值)",recentColors:"最近",searchColors:"搜索颜色...",searchResults:"搜索结果",allColors:"所有颜色",commonColors:"常用颜色",showLess:"显示更少",showAll:"显示全部",noColorsFound:"没有颜色匹配您的搜索",noResults:"未找到匹配项",extraColorsLabel:"附加颜色",extraColorsPlaceholder:"EC984C,#6CD4BC,A66EB9,D87694",extraColorsHint:"粘贴 2 到 8 个十六进制色值,以逗号分隔。将渲染为渐变。",extraColorsInvalid:"已忽略无效的十六进制值:{{tokens}}",colorEffectLabel:"效果",colorEffect:{none:"无",sparkle:"闪光",wood:"木纹",marble:"大理石",glow:"夜光",matte:"哑光",silk:"丝光",galaxy:"星空",rainbow:"彩虹",metal:"金属",translucent:"半透明",gradient:"渐变",dualColor:"双色",triColor:"三色",multicolor:"多色"},selectMaterialFirst:"请先在耗材信息选项卡中选择材料。",noPrintersConfigured:"未配置打印机。添加打印机以使用 PA 配置。",matchingFilter:"匹配",anyBrand:"任何品牌",anyVariant:"任何变体",autoSelect:"自动选择",matches:"匹配",match:"匹配",noMatches:"无匹配",connected:"已连接",offline:"离线",printerOffline:"打印机离线。连接后查看校准配置。",noKProfilesMatch:"没有 K 值配置匹配所选耗材。",leftNozzle:"左喷嘴",rightNozzle:"右喷嘴",profilesSelected:"个校准配置已选择",totalInventory:"总库存",totalConsumed:"总消耗",byMaterial:"按材料",inPrinter:"在打印机中",lowStock:"库存不足",sinceTracking:"自开始追踪",resetConsumedCounter:"重置计数器",resetConsumedCounterTooltip:"将此料盘的已消耗克数计数器清零。剩余重量保持不变。",resetConsumedCounterConfirm:"将此料盘的已消耗克数计数器重置为 0?后续打印将从零开始计数。料盘本身、剩余重量计算和您的设置不会改变。",resetAllConsumedCounters:"重置所有计数器",resetAllConsumedCountersTooltip:"将每个料盘的已消耗克数计数器清零。剩余重量保持不变。",resetAllConsumedCountersConfirm:'将全部 {{count}} 个料盘(含已归档)的已消耗克数计数器重置为 0?这将清空"累计消耗"统计值,后续打印从零开始计数。料盘和剩余重量不会改变。',consumedCounterReset:"计数器已重置",allConsumedCountersReset:"已重置 {{count}} 个料盘的计数器",resetConsumedCounterFailed:"重置计数器失败",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 之间",spoolmanFilamentCatalog:"Spoolman 耗材目录",pickFromSpoolmanCatalog:"从 Spoolman 目录选择…",spoolmanFilamentSelected:"已从 Spoolman 目录选择耗材",spoolmanFilamentUnlinked:"已解除耗材目录关联",noSpoolmanFilaments:"Spoolman 目录中未找到耗材",spoolmanFilamentColorSwatch:"耗材颜色",spoolWeightManagedBySpoolman:"空线轴重量在 Spoolman 中按耗材类型管理",spoolmanCatalogLoadFailed:"无法加载 Spoolman 耗材目录"},timelapse:{title:"延时摄影",create:"创建延时摄影",download:"下载",delete:"删除",preview:"预览",frameRate:"帧率",quality:"质量",processing:"处理中...",noTimelapses:"无可用延时摄影"},ams:{title:"AMS",slot:"槽位",empty:"空",emptySlot:"空槽位",slotEmpty:"空",slotUnconfigured:"?",emptySlotReset:"未分配料盘",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:{includesEncryptionKey:"本地备份包含 MFA 加密密钥文件(DATA_DIR/.mfa_encryption_key),因此备份 ZIP 是自包含的。请将 ZIP 视为敏感文件 — 任何拥有该文件的人都可以解密内部存储的 OIDC 客户端密钥和 TOTP 密钥。",title:"备份与恢复",createBackup:"创建备份",restoreBackup:"恢复备份",restoreDescription:"从备份文件替换所有数据",downloadBackup:"下载备份",uploadBackup:"上传备份",lastBackup:"上次备份",autoBackup:"自动备份",backupNow:"立即备份",restoreWarning:"警告:恢复备份将覆盖所有当前数据。",includeArchives:"包含归档",includeSettings:"包含设置",includeProfiles:"包含配置文件",backupSuccess:"备份创建成功",restoreSuccess:"备份恢复成功",backupFailed:"备份失败",restoreFailed:"恢复失败",restoreNote:"恢复期间虚拟打印机将停止",githubBackup:"GitHub 备份",enabled:"已启用",cloudLoginRequired:"需要登录 Bambu Cloud。请在 配置文件 → 云配置文件 中登录以启用 GitHub 备份。",cloudLoginRequiredShort:"需要Cloud登录",githubDescription:"自动将您的配置文件同步到私有 GitHub 仓库以进行备份和版本历史记录。",repoIsPrivate:"仓库为私有 — 可以安全备份。",repoIsPublicWarning:"仓库为公开(PUBLIC)。Bambuddy 备份包含 MQTT 凭据、Home Assistant 令牌、Prometheus 令牌、您的 Bambu Cloud 邮箱以及通过 K-profile 暴露的打印机访问代码。在您于提供商设置中将仓库改为私有之前,保存将被阻止。",repoVisibilityUnknown:"无法确定仓库的可见性。Bambuddy 拒绝向任何未确认为私有的目标进行备份;保存将被阻止。",repositoryUrl:"仓库 URL",repoUrlPlaceholderGitHub:"https://github.com/username/repo-name",repoUrlPlaceholderGitea:"https://gitea.example.com/username/repo-name",repoUrlPlaceholderForgejo:"https://forgejo.example.com/username/repo-name",repoUrlPlaceholderGitLab:"https://gitlab.com/username/repo-name",allowInsecureHttp:"允许不安全的 HTTP",allowInsecureHttpHint:"为无 TLS 的私有网络自托管实例启用",personalAccessToken:"个人访问令牌",tokenSaved:"(已保存)",enterNewToken:"输入新令牌以更新",tokenHint:"具有内容读写权限的细粒度令牌",branch:"分支",provider:"Git 提供商",providerGitHub:"GitHub",providerGitLab:"GitLab",providerGitea:"Gitea",providerForgejo:"Forgejo",manualOnly:"仅手动",hourly:"每小时",daily:"每天",weekly:"每周",includeInBackup:"包含在备份中",kProfiles:"K 配置文件",kProfilesDescription:"来自已连接打印机的压力推进校准",noPrintersConnected:"没有打印机连接",printersConnected:"{{connected}}/{{total}} 已连接",cloudProfiles:"云配置文件",cloudProfilesDescription:"来自 Bambu Cloud 的耗材、打印机和工艺预设",appSettings:"应用设置",appSettingsDescription:"Bambuddy 配置(完整数据库)",spoolInventory:"耗材库存",spoolInventoryDescription:"耗材卷轴、使用记录和成本追踪",printArchives:"打印档案",printArchivesDescription:"打印历史元数据(不含 gcode/3MF 文件)",lastBackupAt:"上次备份:",noBackupsYet:"尚无备份",next:"下次:",startingBackup:"正在启动备份...",test:"测试",enableBackup:"启用备份",testConnection:"测试连接",enterRepoUrl:"请输入仓库 URL",enterRepoAndToken:"请输入仓库 URL 和访问令牌",repoRequired:"仓库 URL 为必填项",tokenRequired:"访问令牌为必填项",githubBackupEnabled:"GitHub 备份已启用",tokenUpdated:"令牌已更新",settingsSaved:"设置已保存",failedToSave:"保存失败:{{message}}",backupCompleteFiles:"备份完成 - {{count}} 个文件已更新",backupSkippedNoChanges:"备份已跳过 - 无更改",backupFailed2:"备份失败:{{message}}",clearedLogs:"已清除 {{count}} 条日志",failedToClearLogs:"清除日志失败:{{message}}",history:"历史记录",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:"大小",localTimeHint:"本地时间 ({{tz}})",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)",inheritedFromTarget:"继承自目标打印机",derivedFromTargetHint:"使用目标打印机的访问码。桥接会将切片软件的认证转发到实际打印机,因此两个访问码必须匹配 — 如需更改,请在打印机设置中编辑访问码。",reveal:"显示访问码",hide:"隐藏访问码"},targetPrinter:{title:"目标打印机",configured:"代理目标已配置",notConfigured:"未选择目标打印机 - 代理模式需要设置",placeholder:"选择打印机...",hint:"选择要将切片软件流量代理到的打印机。打印机必须处于局域网模式。",noPrinters:"未配置打印机。请先添加打印机以使用代理模式。"},remoteInterface:{title:"网络接口覆盖",configured:"接口覆盖已激活",optional:"可选 - 当自动检测的 IP 不正确时使用(例如多网卡、Docker、VPN)",placeholder:"自动检测(默认)...",hint:"覆盖通过 SSDP 广播并在 TLS 证书中使用的 IP 地址。在 Bambuddy 有多个网络接口时很有用。"},mode:{title:"模式",archive:"归档",archiveDesc:"立即归档文件",review:"审核",reviewDesc:"归档前审核",queue:"队列",queueDesc:"归档并添加到队列",proxy:"代理",proxyDesc:"中继到真实打印机"},autoDispatch:{title:"自动派发",description:"添加到队列时自动开始打印。关闭后,打印任务等待手动派发。"},queueForceColorMatch:{title:"强制颜色匹配",description:"拒绝派发到没有完全相同耗材类型和颜色的打印机。默认关闭 — 不启用时,队列仅按型号匹配,可能选到颜色错误的打印机。"},tailscaleDisabled:{title:"Tailscale 集成",description:"启用以将此 VP 标记为通过 Tailscale 公开。显示主机的 Tailscale 地址,以便您知道要粘贴到切片器中的 IP。CA 导入步骤保持不变 — 此开关对证书无影响。"},setupRequired:{title:"需要设置",description:"虚拟打印机功能需要额外的系统配置才能工作。包括端口转发、防火墙规则和平台特定设置。",readGuide:"启用前请阅读设置指南"},archiveNameSource:{title:"存档名称来源",description:'选择通过虚拟打印机接收文件时新存档的命名方式。"元数据"使用 3MF 中嵌入的切片标题(默认)。"文件名"使用 Bambu Studio 通过 FTP 发送的文件名。注意:当 3MF 包含标题字段时,Bambu Studio 会用该字段覆盖您在"发送到打印机"对话框中输入的名称,因此两种模式通常会产生相同的字符串。',metadata:"元数据",filename:"文件名"},caCert:{title:"切片软件证书",description:"虚拟打印机使用由 Bambuddy CA 签发的 TLS 证书。将此 CA 证书导入切片软件的信任库一次,切片软件即可接受连接 — 无需再通过命令行获取。",copy:"复制",copied:"已复制",download:"下载",fingerprint:"SHA-256"},howItWorks:{title:"工作原理",step1:"在同一局域网中,虚拟打印机会通过发现机制自动出现在您的切片软件(Bambu Studio / OrcaSlicer)中。从其他网络,通过 IP 地址和访问码手动添加。",step2:'在归档、审核和队列模式下,使用切片软件中的"发送"按钮将 3MF 文件上传到 Bambuddy。切片软件会显示"打印成功"— 文件已存储,未打印。',step3:"在代理模式下,虚拟打印机将所有流量中继到真实打印机 — 打印会立即开始,就像直接连接一样。"},status:{title:"状态详情",printerName:"打印机名称",model:"型号",serialNumber:"序列号",mode:"模式",pendingFiles:"待处理文件",targetPrinter:"目标打印机",ftpPort:"FTP 端口",mqttPort:"MQTT 端口",ftpConnections:"FTP 连接",mqttConnections:"MQTT 连接"},toast:{updated:"虚拟打印机设置已更新",failedToUpdate:"更新设置失败",copyFailed:"复制失败 — 请手动选中文本",accessCodeRequired:"请先设置访问码",targetPrinterRequired:"请先选择目标打印机",bindIpRequired:"请先设置绑定 IP",accessCodeEmpty:"访问码不能为空",accessCodeLength:"访问码必须恰好 8 个字符",targetCodeChangedRebind:"访问码已同步到新的目标打印机。请在切片软件中重新添加此设备以使用新的访问码。",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:"在打印之间保持启用而非一次性",autoOffAfterDrying:"干燥完成后自动关闭",autoOffAfterDryingDescription:"AMS 干燥完成后关闭",delayAfterDryingMinutes:"干燥后延迟(分钟)",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:"Custom Headers (JSON)",restStatusUrl:"状态 URL",restStatusPath:"状态 JSON 路径",restStatusOnValue:"开启值",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 温度超过阈值",inventoryAlerts:"库存警报",stockReorderAlert:"补货警报",stockReorderAlertDescription:"SKU 已达到补货点",stockBreakAlert:"断货警报",stockBreakAlertDescription:"库存将在补货到达前耗尽",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:"(打印完成后)",eventPriority:{sectionTitle:"ntfy 优先级",helpNtfy:"为每个已启用的事件选择优先级。ntfy 使用它来升级提醒(声音、可见性、推送行为)。此处未设置的级别将使用 ntfy 服务器默认值。",min:"最低",low:"低",default:"默认",high:"高",urgent:"紧急"},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:"Git 备份",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:"当前耗材",plateReady:"热床就绪: {{name}}",plateReadyLabel:"待清理的热床",plateClearAction:"清理",plateClearedToast:"已将热床标记为已清理",plateClearFailed:"无法将热床标记为已清理"},modal:{spoolDetected:"检测到耗材",assignToAms:"分配到 AMS",syncWeight:"同步重量",weightSynced:"已同步!",syncing:"同步中...",newTagDetected:"检测到新标签",addToInventory:"添加到库存",assignToAmsTitle:"分配到 AMS",selectSlot:"选择槽位",assign:"分配",assigning:"分配中...",assignSuccess:"已分配!",assignPendingInsert:"已分配。插入耗材后将配置槽位。",assignError:"分配耗材失败。请重试。",noPrinterSelected:"选择打印机...",noAmsDetected:"此打印机未检测到 AMS",slot:"槽位"},weight:{noReading:"无读数",stable:"稳定",measuring:"测量中...",tare:"去皮",calibrate:"校准"},spool:{remaining:"剩余",material:"材料",brand:"品牌",color:"颜色",coreWeight:"空盘",labelWeight:"标签",scaleWeight:"秤重",netWeight:"净重",lastUsed:"上次使用"},ams:{noData:"未检测到 AMS",connectAms:"连接 AMS 以查看耗材槽位",noPrinter:"未选择打印机",selectPrinter:"从顶部栏选择打印机",printerDisconnected:"打印机已断开",humidity:"湿度",level:"余量",active:"活跃",slot:"槽位",empty:"空"},inventory:{search:"搜索耗材...",empty:"库存中没有耗材",noResults:"没有匹配的耗材",spools:"个耗材",addSpool:"添加耗材"},settings:{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:"去皮命令已发送。等待设备响应...",tareComplete:"去皮完成!",tareTimedOut:"去皮超时 — SpoolBuddy 守护进程是否正在运行?",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:"创建耗材失败",incompleteDataWarning:"已使用不完整的Spoolman数据写入标签"},quickMenu:{printerPower:"打印机电源",systemControls:"系统",restartDaemon:"重启守护进程",restartBrowser:"重启浏览器",reboot:"重启",shutdown:"关机",swipeToClose:"向下滑动关闭",confirmTitle:"确认",confirmShutdown:"确定要关闭SpoolBuddy吗?您需要物理访问才能重新开启。",confirmReboot:"确定要重启SpoolBuddy吗?",confirmRestartDaemon:"重启SpoolBuddy守护进程?NFC和秤将暂时不可用。",confirmRestartBrowser:"重启kiosk浏览器?屏幕将短暂变黑。",confirm:"确认",confirmPlugOn:"开启 {{name}}?",confirmPlugOff:"关闭 {{name}}?",turnOn:"开启",turnOff:"关闭"}},diagnostic:{modalTitle:"连接诊断 — {{name}}",running:"正在运行诊断...",runningElapsed:"正在运行诊断... ({{elapsed}}秒)",waitingForReportHint:"正在等待打印机发布状态报告 — 最长可能需要 {{max}} 秒。",runFailed:"无法运行诊断:{{error}}",retry:"重新运行",runButton:"运行诊断",sectionTitle:"连接诊断",sectionDescription:"检查打印机无法连接或无法打印的原因 — 端口可达性、LAN 开发者模式、Docker 网络模式和凭据。",noPrinters:"未配置打印机。",overall:{ok:"未发现问题 — 打印机连接看起来正常。",warnings:"打印机应该可以工作,但有些事项需要注意。",problems:"发现了可解释打印机无法连接或无法打印的问题。"},check:{port_mqtt:{title:"控制端口(MQTT 8883)",pass:"可达 — 打印机正在接受控制连接。",fail:"端口 8883 不可达。打印机已关机、IP 地址不同,或被防火墙阻止。请核实打印机 IP,并确保没有任何东西阻止端口 8883。"},port_ftps:{title:"文件传输端口(FTPS 990)",pass:"可达 — 发送打印文件将正常工作。",warn:"端口 990 不可达。监控可能仍然有效,但向打印机发送打印任务将失败。请确保端口 990 未被阻止。"},external_storage:{title:"将发送的文件存储在外部存储中(安装步骤 4)",pass:"打印机报告此选项已开启 — 发送的文件将存储在 SD 卡上,归档将包含缩略图和切片机元数据。",fail:'打印机报告此选项已关闭。请启用"将发送的文件存储在外部存储中" — 在较新固件 (P2S 01.02 / Bambu Studio 2.6+) 中,开关位于打印机的打印设置中;在较旧版本中位于 Bambu Studio / OrcaSlicer 的设备选项卡中。如果不启用此选项,每次归档的打印都将没有缩略图也没有切片机元数据。',skip:"未检查 — 需要有效的 MQTT 连接。在该设置仅存在于切片机中的较旧切片机上,打印机不会报告此设置,因此即使选项已关闭,此检查也会通过 — 请手动验证安装步骤 4。"},port_rtsps:{title:"摄像头端口(RTSPS 322)",pass:"可达 — 摄像头视频流将正常工作。",warn:"端口 322 不可达。实时摄像头视图将无法工作。这不影响打印。"},network_mode:{title:"Docker 网络模式",pass:"正在以 host 网络模式运行。",warn:'Bambuddy 正在以 Docker bridge 网络运行。打印机发现和虚拟打印机需要 host 网络模式 — 请使用 "network_mode: host" 重新创建容器。',skip:"未在 Docker 中运行 — 不适用。"},subnet:{title:"网络子网",pass:"打印机和 Bambuddy 位于同一子网。",warn:"打印机({{printer_ip}})和 Bambuddy({{host_ip}})位于不同的子网。除非配置了子网之间的路由,否则它们可能无法相互访问。",skip:"无法确定子网 — 已跳过。"},mqtt_auth:{title:"打印机凭据",pass:"打印机已接受连接。",fail:"打印机可达,但拒绝了连接。访问代码或序列号很可能有误。每次切换开发者模式时访问代码都会更改 — 请从打印机屏幕重新复制。",skip:"未检查 — 无法连接到打印机。"},developer_mode:{title:"LAN 开发者模式",pass:"开发者模式已启用。",fail:"打印机上的开发者模式已关闭。请在打印机的 LAN 设置中启用它 — 并按 OK 确认。否则打印将无法开始。",skip:"无法检查 — 需要与打印机的实时连接。"},printer_publishing:{title:"打印机正在发布状态",pass:"打印机正在发布状态更新 — AMS、耗材和 K 配置将正确镜像到切片软件。",fail:"MQTT 代理已接受连接,但打印机未发布任何状态报告。这几乎总是因为序列号错误或大小写不一致 — device//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:"提供者已刪除。",refreshIcon:"重新整理圖示",removeIcon:"移除圖示",iconRefreshed:"圖示已重新整理。",iconRemoved:"圖示已移除。",iconFetchFailed:"無法從提供者 URL 取得圖示。",deleteTitle:"刪除提供者",deleteMessage:'刪除"{{name}}"?所有連結帳戶將斷開連線。',form:{name:"顯示名稱",issuerUrl:"頒發者 URL",clientId:"客戶端 ID",clientSecret:"客戶端金鑰",scopes:"作用域",iconUrl:"圖示 URL(可選)",enabled:"已啟用",autoCreate:"自動建立使用者",autoCreateDesc:"首次登入時自動建立本機帳戶。",autoLink:"自動連結已有帳戶",autoLinkDesc:"首次登入時透過信箱匹配現有本機帳戶並自動連結。",emailClaim:"電子郵件聲明",emailClaimDesc:"用作電子郵件身份的 JWT 聲明。Azure Entra ID 請使用 'preferred_username' 或 'upn'(不發送 email_verified)。僅使用可信的聲明名稱。",emailClaimPlaceholder:"電子郵件",emailClaimCustomClaimAutoLinkWarning:"自訂宣告僅在值由租用戶管理時(例如 Azure Entra ID 的 upn / preferred_username)對自動關聯安全。如果您的 IdP 允許使用者自我宣告此宣告,請勿啟用自動關聯。",requireEmailVerified:"要求電子郵件已驗證",requireEmailVerifiedDesc:"僅在提供商將電子郵件聲明標記為已驗證時才接受。",requireEmailVerifiedWarning:"警告:將在未經驗證的情況下接受電子郵件。僅對受信任的提供商使用。",requireEmailVerifiedAutoLink:"請先停用自動連結以變更此設定。",secretHint:"留空以保留目前",secretPlaceholder:"新金鑰",defaultGroup:"預設群組",defaultGroupDesc:"自動建立使用者時分配的群組。未設定時回退到 Viewers。",defaultGroupViewersFallback:"Viewers(預設)"}},encryption:{title:"MFA 加密狀態",enabledFromEnv:"已啟用靜態加密(金鑰來自 MFA_ENCRYPTION_KEY 環境變數)",enabledFromFile:"已啟用靜態加密(金鑰從資料目錄載入)",enabledGenerated:"使用自動產生的金鑰啟用靜態加密",notConfigured:"未設定靜態加密",notConfiguredDesc:"TOTP 機密和 OIDC client_secrets 以明文儲存。請設定 MFA_ENCRYPTION_KEY 或使用可寫資料目錄重新啟動 Bambuddy 以自動產生。",allEncrypted:"所有 MFA 機密皆已靜態加密。",legacyRowsLabel:"舊版明文列",encryptedRowsLabel:"已加密列",legacyRowsWarning:"偵測到 {{count}} 個舊版明文列。請重新儲存 OIDC 供應商或重新註冊使用者的身份驗證器應用程式,以遷移到加密儲存。",backupHint:"自動產生的金鑰儲存在 DATA_DIR/.mfa_encryption_key 中,並包含在本機備份 ZIP 中。請保護備份安全或顯式設定 MFA_ENCRYPTION_KEY。",decryptionBrokenTitle:"加密金鑰遺失",decryptionBrokenError:"無法解密 {{count}} 條加密記錄,因為加密金鑰不再可用。請還原先前的 MFA_ENCRYPTION_KEY 或 DATA_DIR/.mfa_encryption_key 以恢復存取。",migrationErrorWarning:"{{count}} 行舊資料在啟動時未能重新加密。請檢查伺服器日誌並重新啟動 Bambuddy 以重試。"}},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:"登入中...",rememberMe:"記住我",forgotPassword:"忘記密碼?",loginSuccess:"登入成功",loginFailed:"登入失敗",enterCredentials:"請輸入使用者名稱和密碼",enterEmail:"請輸入您的電子郵件地址",oidcLoginFailed:"OIDC 登入失敗",oidcErrors:{providerError:"身份提供者返回了一個錯誤",missingParameters:"OIDC 回呼缺少必要引數",invalidState:"OIDC 狀態無效或已被使用",stateExpired:"OIDC 登入會話已過期,請重試",providerNotFound:"未找到 OIDC 提供者",discoveryFailed:"無法獲取 OIDC 探索文件",invalidDiscovery:"OIDC 探索文件無效",networkError:"OIDC 權杖交換時出現網路錯誤",badResponse:"OIDC 權杖交換時收到意外回應",noIdToken:"OIDC 提供者未返回 ID 權杖",validationFailed:"OIDC 權杖驗證失敗",nonceMismatch:"OIDC nonce 不符,可能存在重放攻擊",missingSubClaim:"OIDC 權杖缺少 sub 宣告",noLinkedAccount:"沒有與此 OIDC 身份連結的本機帳戶",accountInactive:"您的帳戶已被停用",userResolutionFailed:"無法解析您的帳戶",internalError:"OIDC 登入過程中發生內部錯誤",tokenExchangeFailed:"OIDC 權杖交換失敗"},forgotPasswordTitle:"忘記密碼",forgotPasswordMessage:"如果您忘記了密碼,請聯絡系統管理員進行重設。",forgotPasswordEmailMessage:"輸入您的信箱地址,我們將向您傳送新密碼。",emailAddress:"信箱地址",emailPlaceholder:"your.email@example.com",cancel:"取消",sending:"傳送中...",sendResetEmail:"傳送重設郵件",howToReset:"如何重設密碼:",resetStep1:"聯絡您的 Bambuddy 管理員",resetStep2:"請他們在使用者管理中重設您的密碼",resetStep3:"他們可以為您設定一個臨時密碼",resetStep4:"使用新密碼登入並在設定中修改密碼",gotIt:"知道了",resetPassword:{title:"設定新密碼",subtitle:"請在下方輸入並確認您的新密碼。",newPassword:"新密碼",newPasswordPlaceholder:"至少 8 個字元",confirmPassword:"確認密碼",confirmPasswordPlaceholder:"重複輸入新密碼",saving:"儲存中…",submit:"設定新密碼",backToLogin:"回到登入",passwordsDoNotMatch:"密碼不符",passwordTooShort:"密碼至少需要 8 個字元",resetFailed:"密碼重設失敗。連結可能已過期。"},twoFA:{title:"兩步驗證",subtitle:"您的帳戶已啟用兩步驗證。請在下方輸入驗證碼。",methodAuthenticator:"身份驗證器 App",methodEmail:"信箱驗證碼",methodBackup:"備用恢復碼",instructionsTotp:"請開啟您的身份驗證器 App,輸入 Bambuddy 的 6 位驗證碼。",instructionsEmail:"6 位驗證碼已傳送至您的信箱,有效期為 10 分鐘。",instructionsEmailNotSent:"點選下方按鈕,透過郵件獲取驗證碼。",instructionsBackup:"請輸入您的一個 8 位備用恢復碼。每個恢復碼只能使用一次。",sendCodeButton:"傳送信箱驗證碼",sendingCode:"傳送中...",resendCode:"重新傳送驗證碼",codeLabel:"驗證碼",backupCodeLabel:"備用恢復碼",codePlaceholder:"000000",backupCodePlaceholder:"XXXXXXXX",verifyButton:"驗證",verifyingButton:"驗證中...",backToLogin:"← 回到登入頁面",orContinueWith:"或透過以下方式登入",signInWith:"使用 {{provider}} 登入",enterCode:"請輸入驗證碼",sendCodeFailed:"驗證碼傳送失敗",invalidCode:"無效驗證碼,請重試。"}},setup:{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:"切換腔室燈",unavailable:"攝影機無法使用",diagnose:{button:"診斷",modalTitle:"攝影機診斷",running:"正在執行診斷...",runFailed:"無法執行診斷: {{error}}",retry:"重新執行",stage:{tcp_reachable:"網路可達性",first_frame:"畫面擷取",live_stream_active:"直播串流進行中"},summary:{all_ok:"攝影機運作正常。診斷已成功完成所有階段。",live_stream_active_healthy:"攝影機正在傳輸最新畫面 — 無需測試。",printer_unreachable:"無法存取印表機。請檢查 IP 位址、網路連線以及印表機是否已開機。",camera_port_closed:"印表機可存取,但攝影機連接埠已關閉。請確認印表機設定中已啟用僅 LAN 模式與開發者模式。",no_frame:"已連線到攝影機,但未收到畫面。請重試或檢查印表機設定中攝影機是否已啟用。",unknown_failure:"攝影機診斷因不明原因失敗。請查看支援日誌了解詳情。"},meta:{protocol:"協定",port:"連接埠",profile:"設定檔"}}},groups:{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 個字元",ldapProvisioned:"已建立 LDAP 使用者「{{username}}」"},modal:{createUser:"建立使用者",editUser:"編輯使用者",cancel:"取消",creating:"建立中...",saving:"儲存中...",saveChanges:"儲存更改",advancedAuthSubtitle:"使用進階認證",tabsAriaLabel:"使用者來源",localTab:"本機",ldapTab:"LDAP",ldapSearchLabel:"搜尋目錄",ldapSearchPlaceholder:"輸入使用者名稱、姓名或電子郵件...",ldapMinChars:"輸入至少 2 個字元以搜尋",ldapTypeToSearch:"開始輸入以搜尋 LDAP 目錄",ldapSearching:"搜尋目錄中...",ldapNoResults:"目錄中沒有符合的使用者",ldapSearchError:"目錄搜尋失敗。請檢查 LDAP 伺服器狀態。",ldapAlreadyProvisioned:"已建立",ldapSelectedLabel:"已選",ldapProvision:"建立使用者",ldapProvisioning:"建立中...",ldapErrorProvision:"建立失敗。請檢查 LDAP 伺服器狀態後重試。"},form:{username:"使用者名稱",usernamePlaceholder:"輸入使用者名稱",email:"信箱",emailPlaceholder:"user@example.com",password:"密碼",passwordPlaceholder:"輸入密碼",confirmPassword:"確認密碼",confirmPasswordPlaceholder:"確認密碼",newPasswordPlaceholder:"輸入新密碼",confirmNewPasswordPlaceholder:"確認新密碼",leaveBlankToKeep:"留空以保持目前值",groups:"群組",optional:"可選",autoGeneratedPassword:"將自動產生安全密碼並透過郵件傳送給使用者。",passwordManagedByAdvancedAuth:'密碼由進階認證管理。使用"重設密碼"透過郵件向使用者傳送新密碼。',resetPassword:"重設密碼",resettingPassword:"重設密碼中..."},deleteModal:{title:"刪除使用者",message:"確定要刪除此使用者嗎?此操作無法復原。",confirm:"刪除使用者"}},streamOverlay:{title:"流疊加層",invalidPrinterId:"無效的印表機 ID",cameraStream:"攝影機流",progress:"進度",eta:"預計完成時間",printerIdle:"印表機空閒",printerOffline:"印表機離線",status:{printing:"列印中",paused:"已暫停",finished:"已完成",failed:"失敗",idle:"空閒",unknown:"未知"}},profiles:{title:"設定檔案",subtitle:"管理您的切片預設和壓力推進校準",tabs:{bambuCloud:"Bambu Cloud",orcaCloud:"Orca Cloud",local:"本機設定檔案",kprofiles:"K 值設定"},orcaCloud:{connectedAs:"已連接",logout:"中斷連線",noLogoutPermission:"您沒有中斷連線的權限",noConnectPermission:"您沒有連接到 Orca Cloud 的權限",retry:"重試",back:"使用其他登入方式",connect:{title:"連接到 Orca Cloud",description:"登入您的 Orca Cloud 帳號,將切片機設定檔同步到 Bambuddy。"},providers:{google:"使用 Google 登入",apple:"使用 Apple 登入",github:"使用 GitHub 登入",email:"使用電子郵件和密碼登入"},password:{title:"使用電子郵件和密碼登入",email:"電子郵件",emailPlaceholder:"you@example.com",password:"密碼",submit:"登入"},paste:{title:"完成登入",step1:"已在新分頁中開啟 Orca Cloud 登入頁面。請使用您的 Orca 帳號登入。",step2:'您的瀏覽器將被重新導向到一個 "localhost" URL,該 URL 無法載入。這是正常的 — 我們需要的就是這個 URL。',step3:"從瀏覽器的網址列複製整個 URL,貼到下方。",signInUrl:"若登入分頁未開啟,請點擊此 URL:",label:"在此貼上回呼 URL",placeholder:"http://localhost:41172/callback?code=...&state=...",submit:"完成連接"},profiles:{title:"您的 Orca Cloud 設定檔 ({{count}})",refresh:"重新整理",empty:"您的 Orca Cloud 帳號中尚無設定檔。"},toast:{connected:"已以 {{email}} 身分連接到 Orca Cloud",disconnected:"已從 Orca Cloud 中斷連線"},errors:{startFailed:"無法啟動 Orca Cloud 登入流程。",finishFailed:"無法完成 Orca Cloud 登入。",passwordFailed:"無法使用該電子郵件和密碼登入。",passwordEmpty:"請輸入電子郵件和密碼。",emptyPaste:"請從瀏覽器貼上回呼 URL。",noCode:"該 URL 不像 Orca Cloud 回呼 (缺少 code 參數)。請從網址列複製完整 URL。"}},localProfiles:{title:"本機設定檔案",subtitle:"從 OrcaSlicer 匯入和管理切片預設",import:"匯入設定檔案",importDesc:"將 .bbscfg、.bbsflmt、.orca_filament、.zip 或 .json 檔案拖放到此處",importing:"匯入中...",search:"搜尋本機預設...",noPresets:"尚無本機預設",noSearchResults:"沒有符合搜尋的預設",badge:"本機",edit:"編輯",delete:"刪除",cancel:"取消",deleteConfirmTitle:"刪除預設",deleteConfirm:"確定要刪除此預設嗎?此操作無法復原。",source:"來源",inheritsFrom:"繼承自",filamentType:"類型",vendor:"廠商",compatiblePrinters:"相容印表機",nozzleTemp:"噴嘴溫度",cost:"成本",density:"密度",pressureAdvance:"壓力推進",filament:"耗材",process:"工藝",printer:"印表機",toast:{importSuccess:"已匯入 {{count}} 個預設",importSkipped:"跳過 {{count}} 個預設(重複)",importError:"匯入時出現 {{count}} 個錯誤",deleted:"預設已刪除",updated:"預設已更新"}},connectedAs:"已連線為",logout:"登出",noLogoutPermission:"您沒有登出的權限",failedToLoad:"載入設定檔案失敗",retry:"重試",time:{justNow:"剛剛",minsAgo:"{{count}} 分鐘前",hoursAgo:"{{count}} 小時前",daysAgo:"{{count}} 天前"},toast:{loggedOut:"已登出"},login:{title:"連線到拓竹雲",subtitle:"跨裝置同步您的切片預設",email:"信箱",password:"密碼",region:"地區",regionGlobal:"全球",regionChina:"中國",verificationCode:"驗證碼",totpCode:"驗證器驗證碼",checkEmail:"檢查您的信箱 ({{email}}) 獲取 6 位驗證碼",enterTotpHint:"輸入驗證器 App 中的 6 位驗證碼",accessToken:"存取權杖",accessTokenHint:"貼上您的拓竹雲端存取權杖。中國大陸帳號(綁定手機號碼、無 Email 登入)僅能使用此方式登入。可從 MakerWorld 瀏覽器 Cookie 取得權杖,詳見 Wiki。",back:"返回",loginButton:"登入",verifyButton:"驗證",setTokenButton:"設定權杖",useToken:"改用存取權杖",useEmail:"改用信箱登入",toast:{loggedIn:"登入成功",codeSent:"驗證碼已傳送到您的信箱",enterTotp:"輸入驗證器 App 中的程式碼",tokenSet:"權杖設定成功"}},presets:{myPreset:"我的預設(可編輯)",duplicate:"複製",editable:"可編輯",failedToLoadDetails:"載入預設詳情失敗",deleteConfirm:"刪除此預設?",deleteWarning:'這將從拓竹雲中永久刪除"{{name}}"。此操作無法復原。',noDuplicatePermission:"您沒有複製預設的權限",noEditPermission:"您沒有編輯預設的權限",noDeletePermission:"您沒有刪除預設的權限",types:{filament:"耗材預設",printer:"印表機預設",process:"工藝預設"},toast:{deleted:"預設已刪除",created:"預設已建立",updated:"預設已更新",duplicated:"預設已複製",fieldAdded:'欄位"{{key}}"已新增',exported:"預設已匯出"},baseLabel:"基礎:{{name}}",currentLabel:"目前:{{name}}",newPreset:"新增預設",editPreset:"編輯預設",duplicatePreset:"複製預設",createNewPreset:"建立新預設",customizeSettings:"自訂新預設的設定",compareWithBase:"與基礎預設比較",compare:"比較",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 環境詳情",bundleGenerating:"正在產生套件...",bundleStepConnection:"正在執行印表機連線檢查",bundleStepVirtualPrinters:"正在執行虛擬印表機設定檢查",bundleStepLogScan:"正在掃描最近的日誌以尋找已知問題",bundleStepBuild:"正在建立支援套件 ZIP 檔案"},fileManager:{title:"檔案管理器",subtitle:"組織和管理您的列印檔案",uploadFiles:"上傳檔案",newFolder:"新增資料夾",folderName:"資料夾名稱",folderNamePlaceholder:"例如:功能零件",renameFile:"重新命名檔案",renameFolder:"重新命名資料夾",invalidFilenameChar:'列印檔案名稱中不允許使用字元 "{{char}}"。印表機 SD 卡拒絕以下字元: < > : " / \\ | ? *',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:"所有檔案",allExternal:"外部",externalIsEmpty:"沒有外部檔案",externalEmptyDescription:"已連結的外部資料夾中的檔案將顯示於此。",wrap:"換行",enableTextWrapping:"啟用文字換行",disableTextWrapping:"停用文字換行",collapse:"折疊",collapseFoldersByDefault:"預設折疊資料夾",expandFoldersByDefault:"預設展開資料夾",dragToResizeTooltip:"拖曳調整大小,雙擊重設",searchFiles:"搜尋檔案...",allTypes:"所有類型",prints:"列印",ascending:"升序",descending:"降序",resultsCount:"{{showing}} / {{total}} 個檔案",selectAll:"全選",deselectAll:"取消全選",selected:"已選擇 {{count}} 個",adding:"新增中...",loadingFiles:"載入檔案中...",folderIsEmpty:"資料夾為空",noFilesYet:"尚無檔案",folderEmptyDescription:"上傳檔案或將檔案移入此資料夾以開始使用。",noFilesDescription:"上傳檔案以開始組織您的列印相關檔案。",noMatchingFiles:"沒有匹配的檔案",noMatchingFilesDescription:"沒有檔案匹配您目前的搜尋或篩選條件。",clearFilters:"清除篩選",printedCount:"已列印 {{count}} 次",uploadedBy:"上傳者",deleteFolder:"刪除資料夾",deleteFile:"刪除檔案",deleteFilesCount:"刪除 {{count}} 個檔案",deleteFolderConfirm:"確定要刪除此資料夾嗎?其中的所有檔案也將被刪除。",deleteFileConfirm:"確定要刪除此檔案嗎?",deleteFilesConfirm:"確定要刪除 {{count}} 個選中的檔案嗎?此操作無法復原。",deleting:"刪除中...",noPermissionRenameFolder:"您沒有重新命名資料夾的權限",noPermissionLinkFolder:"您沒有連結資料夾的權限",noPermissionDeleteFolder:"您沒有刪除資料夾的權限",noPermissionPrint:"您沒有列印的權限",noPermissionSlice:"您沒有切片檔案的權限",noPermissionAddToQueue:"您沒有新增到佇列的權限",noPermissionDownload:"您沒有下載檔案的權限",noPermissionRenameFile:"您沒有重新命名此檔案的權限",noPermissionGenerateThumbnail:"您沒有產生縮圖的權限",noPermissionDeleteFile:"您沒有刪除此檔案的權限",noPermissionCreateFolder:"您沒有建立資料夾的權限",noPermissionUpload:"您沒有上傳檔案的權限",noPermissionMoveFiles:"您沒有移動檔案的權限",noPermissionDeleteFiles:"您沒有刪除檔案的權限",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 構建",urlLabel:"網址",urlPlaceholder:"https://makerworld.com/...",urlInvalid:"網址必須以 http:// 或 https:// 開頭",openExternalUrl:"開啟專案網址",coverImageLabel:"封面圖片",coverImageAlt:"專案封面圖片",coverImageUpload:"上傳",coverImageReplace:"替換",coverImageRemove:"移除",descriptionPlaceholder:"可選描述...",color:"顏色",targetPlates:"目標板數",targetPlatesPlaceholder:"例如:25",targetPlatesHelp:"列印任務數量",targetParts:"目標零件數",targetPartsPlaceholder:"例如:150",targetPartsHelp:"所需零件總數",tagsLabel:"標籤(逗號分隔)",tagsPlaceholder:"例如:voron、功能件、禮物",dueDate:"截止日期",priority:"優先順序",priorityLow:"低",priorityNormal:"普通",priorityHigh:"高",priorityUrgent:"緊急",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:"匯出到檔案"},slice:{title:"切片模型",action:"切片",actionAll:"切片全部 {{count}} 個盤面",actionAllTitle:"將所有盤面切片為單一的多盤面輸出(單一封存)。線材選擇涵蓋專案定義的每個槽位。",allPlatesToggle:"切片全部 {{count}} 個盤面",slicing:"切片中…",printer:"印表機設定檔",process:"製程設定檔",filament:"耗材設定檔",filamentSlot:"耗材 {{index}}({{type}})",selectPreset:"— 選擇預設 —",loadingPresets:"載入預設中…",analyzingPlateFilaments:"分析列印板耗材中…",analyzingPlateFilamentsHint:"正在執行預覽切片以發現此列印板使用的 AMS 插槽。之後會快取 — 重新開啟是即時的。",previewToast:"分析 {{name}} — {{elapsed}}",previewWithProgress:"分析 {{name}} — {{stage}} ({{percent}}%) — {{elapsed}}",notUsedByPlate:"— 此列印板未使用",noPresetsForSlot:"無可用預設",otherPrinters:"其他印表機",presetsLoadFailed:"載入預設失敗。請先開啟設定 → 設定檔以匯入。",refreshPresets:"重新整理",refreshPresetsTitle:"重新整理預設 — 擷取最新的雲端與打包設定清單(在 Bambu Studio 或 Bambu Handy 中刪除預設後使用)",allPresetsRequired:"必須選擇所有預設",bundle:"切片器套裝",bundleNone:"— 無(單獨選擇預設)—",bundleAllRequired:"必須選擇套裝的製程和每個耗材槽",enqueuing:"提交切片任務中…",queued:"已排隊…",failed:"切片失敗。請檢查切片器 sidecar 日誌。",startedToast:"在背景切片 {{name}}…",queuedToast:"已排隊:{{name}} — {{elapsed}}",runningToast:"切片 {{name}} — {{elapsed}}",runningWithProgress:"{{name}} – {{stage}} ({{percent}}%) – {{elapsed}}",runningWithProgressMultiPlate:"盤面 {{plateIndex}} / {{plateCount}} • {{name}} – {{stage}} ({{percent}}%) – {{elapsed}}",completedToast:"已切片 {{name}}",failedTitle:"切片失敗",failedToast:"切片 {{name}} 失敗:{{detail}}",tier:{local:"已匯入",cloud:"Bambu Cloud",orcaCloud:"Orca Cloud",standard:"標準"},cloud:{notAuthenticated:"登入 Bambu Cloud(設定 → 設定檔 → Bambu Cloud)以查看雲端預設。",expired:"Bambu Cloud 工作階段已過期 — 請重新登入以重新整理雲端預設。",unreachable:"目前無法存取 Bambu Cloud。本機和標準預設仍可使用。"},orcaCloud:{notAuthenticated:"登入 Orca Cloud(設定檔 → Orca Cloud)以查看您的 Orca 預設。",expired:"Orca Cloud 工作階段已過期 — 請重新登入以重新整理您的 Orca 預設。",unreachable:"Orca Cloud 目前無法存取。其他預設仍可正常使用。"},bedType:{label:"列印板",auto:"自動(使用製程預設)",coolPlate:"冷板",coolPlateSuperTack:"Cool Plate SuperTack",engineering:"Engineering Plate",highTemp:"High Temp Plate",texturedPEI:"Textured PEI Plate",smoothPEI:"Smooth PEI Plate"}},spoolman:{title:"Spoolman 整合",enabled:"Spoolman 已啟用",url:"Spoolman URL",connected:"已連線",disconnected:"未連線",testConnection:"測試連線",sync:"同步",syncing:"同步中...",lastSync:"上次同步",linkToSpoolman:"連結到 Spoolman",openInSpoolman:"在 Spoolman 中開啟",unlinkSpool:"取消連結耗材",unlinkConfirmTitle:"取消指派料盤?",unlinkConfirmMessage:"這將從此插槽中移除料盤。料盤本身的資料將保持不變。",selectSpool:"選擇耗材",noUnlinkedSpools:"無未指派的料盤",linkSuccess:"料盤指派成功",linkFailed:"料盤指派失敗",unlinkSuccess:"料盤取消指派成功",unlinkFailed:"料盤取消指派失敗",linkedSpool:"已指派料盤",spoolId:"耗材 ID",fillSourceLabel:"(Spoolman)",weight:"重量",remaining:"剩餘",disableWeightSync:"停用 AMS 估計重量同步",disableWeightSyncDesc:"不從 AMS 估計值更新剩餘容量。如果您更喜歡 Spoolman 的用量追蹤而非 AMS 百分比估計,請使用此選項。新耗材仍將使用 AMS 估計值作為初始重量。",reportPartialUsage:"報告失敗列印的部分用量",reportPartialUsageDesc:"當列印失敗或被取消時,根據層進度報告估計的耗材使用量。"},inventory:{title:"耗材庫存",subtitle:"管理您的料盤",spoolmanMixedContentTitle:"Spoolman 無法透過 HTTPS 載入 — 瀏覽器已封鎖混合內容",spoolmanMixedContentBody:"Bambuddy 透過您的反向代理以 HTTPS 提供服務,但您的 Spoolman 位址仍為 HTTP。基於安全考量,瀏覽器會封鎖混合內容,因此內嵌的 Spoolman 介面無法載入。Spoolman 也必須可透過 HTTPS 存取。",spoolmanMixedContentFixReverseProxy:"請將 Spoolman 置於與 Bambuddy 相同的反向代理(Traefik / Nginx / Caddy)之後並啟用 HTTPS,然後在設定中將 Spoolman URL 更新為新的 HTTPS 位址。",spoolmanMixedContentFixOpenNewTab:"作為替代方案,可在新分頁以 HTTP 開啟 Spoolman — 混合內容規則僅適用於內嵌框架,獨立分頁仍可正常運作。",spoolmanOpenInNewTab:"在新分頁開啟 Spoolman",labels:{title:"列印線材標籤",selectedCount:"已選 {{count}} 項",pickSpools:"選擇要列印標籤的線材:",searchPlaceholder:"按名稱、品牌或 #ID 搜尋",filterByMaterial:"材料:",allMaterials:"全部",selectVisible:"選擇所有可見 ({{count}})",deselectVisible:"取消選擇可見",clearAll:"全部清除",noSpoolsToShow:"沒有要顯示的線材。請調整篩選條件後重試。",noMatches:"沒有線材符合目前搜尋或篩選。",printOne:"列印此線材的標籤",printLabels:"列印標籤…",bulkTitle:"從目前顯示的 {{count}} 個線材中選擇要列印標籤的",noSpoolsTitle:"沒有要貼標籤的線材",error:"無法產生標籤:{{msg}}",sortBy:{label:"排序:",id:"按 ID",color:"按顏色"},templates:{amsHolderSmall:{label:"AMS 支架 — 小 (74 × 33 mm)",hint:"每頁一個標籤;對應 MakerWorld 模型 752566 (AMS 耗材標籤支架) 中可列印的標籤。"},amsHolderLarge:{label:"AMS 支架 — 大 (75 × 55 mm)",hint:"每頁一個標籤;對應 AMS 耗材標籤支架的紙卡插入款。空間足夠放置色塊、品牌、材質、ID 與 QR 碼。"},box40x30:{label:"盒標籤 (40 × 30 mm)",hint:"每頁一張;常見的 DK/Brother 捲尺寸,適合用於耗材袋與儲物盒標籤。"},box:{label:"Box label (62 × 29 mm)",hint:"每頁一個標籤;適配 Brother PT/QL 和 Dymo 小標籤。"},averyL7160:{label:"Avery L7160 — A4 sheet (38.1 × 63.5 mm × 21)",hint:"歐洲規格紙張;每張 A4 頁 21 個標籤。"},avery5160:{label:"Avery 5160 — US Letter sheet (25.4 × 66.7 mm × 30)",hint:"美國規格紙張;每張 Letter 頁 30 個標籤。"}}},csv:{importButton:"匯入 CSV",exportButton:"匯出 CSV",modalTitle:"從 CSV 匯入耗材",selectFile:"選擇 CSV 檔案或拖放到此處",dragHint:"標頭:material(必填)、brand、subtype、color_name、rgba、…",parsing:"正在讀取檔案…",previewError:"無法讀取 CSV 檔案",validCount:"{{count}} 個有效",errorCount:"{{count}} 個錯誤",skippedCount:"{{count}} 個略過",colRow:"列",colStatus:"狀態",colColor:"顏色",colorResolved:"已從目錄填入顏色",colorCrossMaterial:"顏色取自其他材料 — 目錄中無精確匹配",duplicateExisting:"已存在具有此材料、品牌和顏色的線材卷 — 仍會作為新線材卷匯入",spoolmanHint:"在 Spoolman 模式下,請使用 Spoolman 內建的 CSV 匯入/匯出。",importValidRows:"匯入 {{count}} 個有效列",noValidRows:"沒有有效列",importing:"正在匯入…",importSuccess:"已匯入 {{count}} 個耗材",importError:"匯入失敗",exportError:"匯出失敗"},addSpool:"新增耗材",editSpool:"編輯耗材",copySpool:"複製耗材",material:"材料",selectMaterial:"選擇材料...",subtype:"子類型",brand:"品牌",searchBrand:"搜尋品牌...",useCustomBrand:'使用"{{brand}}"',useCustomMaterial:"使用自訂材料:{{material}}",colorName:"顏色名稱",colorNamePlaceholder:"翡翠白、烈焰紅...",color:"顏色",hexColor:"十六進位顏色",pickColor:"選擇自訂顏色",labelWeight:"標籤重量",coreWeight:"空盤重量",searchSpoolWeight:"搜尋耗材重量...",weightUsed:"已使用",currentWeight:"剩餘重量",measuredWeight:"稱量重量",spoolName:"料盤",costPerKg:"每公斤成本",storageLocation:"存放位置",storageLocationPlaceholder:"例如:貨架A,抽屜1",openInInventory:"在庫存中查看",measuredWeightError:"稱量重量必須在 {{min}}g 到 {{max}}g 之間。",slicerFilament:"切片耗材",slicerFilamentName:"切片預設名稱",slicerPreset:"切片預設",searchPresets:"搜尋耗材預設...",selectedPreset:"已選擇",noPresetsFound:"未找到預設",tempOverrides:"溫度覆蓋",note:"備註",notePlaceholder:"關於此耗材的任何備註...",category:"類別",categoryPlaceholder:"例如:生產、原型、客戶A",categoryNone:"未分類",storageLocationNone:"未設定位置",lowStockThresholdOverride:"低庫存閾值(此料盤)",lowStockThresholdOverrideHelp:"留空以使用全域閾值({{global}}%)。",clearRfid:"清除 RFID 標籤",rfidCleared:"RFID 標籤已清除",archive:"歸檔",restore:"恢復",noSpools:"尚無耗材。新增您的第一個耗材開始使用。",noAvailableSpools:"沒有可用的耗材。請先向庫存中新增耗材,或從其他槽位取消指派一個耗材。",kProfiles:"K 值設定",addKProfile:"新增 K 值設定",assignSpool:"分配耗材",unassignSpool:"取消分配",assignSuccess:"耗材已分配,AMS 槽位已設定",assignPendingInsert:"已分配。插入耗材後將設定槽位。",assignFailed:"分配耗材失敗",assignMismatchTitle:"材料不符",assignMismatchMessage:'所選料盤材料 "{{spoolMaterial}}" 與 {{location}} 的料槽材料 "{{trayMaterial}}" 不符。仍要分配嗎?',assignMismatchConfirm:"仍然分配",assignPartialMismatchMessage:'料盤材料 "{{spoolMaterial}}" 與 {{location}} 的 "{{trayMaterial}}" 相近但不完全一致。是否繼續?',assignProfileMismatchMessage:'料盤設定 "{{spoolProfile}}" 與 {{location}} 的料槽設定 "{{trayProfile}}" 不一致。是否繼續?',assignReconfigureNote:"AMS 槽位將重新設定為使用料盤的設定。",selectSpool:"選擇要分配到此槽位的耗材",assigned:"已分配",assigning:"分配中...",searchSpools:"搜尋耗材...",showAllSpools:"顯示所有耗材",spoolmanSpools:"Spoolman 線軸",allMaterials:"所有材料",filterByBrand:"按品牌篩選...",showArchived:"顯示已歸檔",quickAdd:"快速新增(庫存)",quantity:"數量",stock:"庫存",configured:"已設定",spoolsCreated:"已建立 {{count}} 個耗材",spoolsPartiallyCreated:"已建立 {{created}} / {{total}} 個耗材(部分失敗)",spoolCreated:"耗材已建立",spoolUpdated:"耗材已更新",spoolDeleted:"耗材已刪除",deepLinkSpoolNotFound:"找不到耗材",deepLinkFetchFailed:"無法載入耗材 — 請重試",spoolArchived:"耗材已歸檔",spoolRestored:"耗材已恢復",kProfileSaveFailed:"K值設定檔設定無法儲存",syncWeightSpoolNotFound:"找不到耗材 — 可能已被刪除",syncWeightSpoolmanUnreachable:"Spoolman 無法存取 — 請稍後再試",syncWeightFailed:"重量同步失敗",spoolmanUnreachable:"Spoolman 無法存取 — 請稍後再試",deleteSpoolNotFound:"找不到耗材 — 可能已被刪除",deleteFailed:"刪除耗材失敗",archiveSpoolNotFound:"找不到耗材 — 可能已被刪除",archiveFailed:"歸檔耗材失敗",restoreSpoolNotFound:"找不到耗材 — 可能已被刪除",restoreFailed:"恢復耗材失敗",saveFailed:"儲存變更失敗",tagClearFailed:"清除標籤失敗",deleteConfirm:"確定要刪除此耗材嗎?此操作無法復原。",archiveConfirm:"確定要歸檔此耗材嗎?",advancedSettings:"進階設定",filamentInfoTab:"耗材資訊",paProfileTab:"PA 設定",filamentInfo:"耗材",additional:"附加",loadingPresets:"載入雲端預設中...",cloudConnected:"雲端已連線",cloudNotConnected:"雲端未連線(使用預設值)",recentColors:"最近",searchColors:"搜尋顏色...",searchResults:"搜尋結果",allColors:"所有顏色",commonColors:"常用顏色",showLess:"顯示更少",showAll:"顯示全部",noColorsFound:"沒有顏色匹配您的搜尋",noResults:"未找到匹配項",extraColorsLabel:"附加顏色",extraColorsPlaceholder:"EC984C,#6CD4BC,A66EB9,D87694",extraColorsHint:"貼上 2 至 8 個十六進位色值,以逗號分隔。將以漸層方式呈現。",extraColorsInvalid:"已略過無效的十六進位值:{{tokens}}",colorEffectLabel:"效果",colorEffect:{none:"無",sparkle:"閃光",wood:"木紋",marble:"大理石",glow:"夜光",matte:"霧面",silk:"絲光",galaxy:"星空",rainbow:"彩虹",metal:"金屬",translucent:"半透明",gradient:"漸層",dualColor:"雙色",triColor:"三色",multicolor:"多色"},selectMaterialFirst:"請先在耗材資訊分頁中選擇材料。",noPrintersConfigured:"未設定印表機。新增印表機以使用 PA 設定。",matchingFilter:"匹配",anyBrand:"任何品牌",anyVariant:"任何變體",autoSelect:"自動選擇",matches:"匹配",match:"匹配",noMatches:"無匹配",connected:"已連線",offline:"離線",printerOffline:"印表機離線。連線後檢視校準設定。",noKProfilesMatch:"沒有 K 值設定匹配所選耗材。",leftNozzle:"左噴嘴",rightNozzle:"右噴嘴",profilesSelected:"個校準設定已選擇",totalInventory:"總庫存",totalConsumed:"總消耗",byMaterial:"按材料",inPrinter:"在印表機中",lowStock:"庫存不足",sinceTracking:"自開始追蹤",resetConsumedCounter:"重置計數器",resetConsumedCounterTooltip:"將此料盤的已消耗克數計數器歸零。剩餘重量不會變更。",resetConsumedCounterConfirm:"將此料盤的已消耗克數計數器重置為 0?後續列印將從零開始計算。料盤本身、剩餘重量計算與您的設定均不會變更。",resetAllConsumedCounters:"重置所有計數器",resetAllConsumedCountersTooltip:"將每個料盤的已消耗克數計數器歸零。剩餘重量不會變更。",resetAllConsumedCountersConfirm:"將全部 {{count}} 個料盤(含已封存)的已消耗克數計數器重置為 0?這將清空「累計消耗」統計值,後續列印從零開始計算。料盤與剩餘重量不會變更。",consumedCounterReset:"計數器已重置",allConsumedCountersReset:"已重置 {{count}} 個料盤的計數器",resetConsumedCounterFailed:"重置計數器失敗",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 之間",spoolmanFilamentCatalog:"Spoolman 耗材目錄",pickFromSpoolmanCatalog:"從 Spoolman 目錄選擇…",spoolmanFilamentSelected:"已從 Spoolman 目錄選擇耗材",spoolmanFilamentUnlinked:"已解除耗材目錄關聯",noSpoolmanFilaments:"Spoolman 目錄中未找到耗材",spoolmanFilamentColorSwatch:"耗材顏色",spoolWeightManagedBySpoolman:"空線軸重量在 Spoolman 中按耗材類型管理",spoolmanCatalogLoadFailed:"無法載入 Spoolman 耗材目錄"},timelapse:{title:"縮時攝影",create:"建立縮時攝影",download:"下載",delete:"刪除",preview:"預覽",frameRate:"幀率",quality:"品質",processing:"處理中...",noTimelapses:"無可用縮時攝影"},ams:{title:"AMS",slot:"槽位",empty:"空",emptySlot:"空槽位",slotEmpty:"空",slotUnconfigured:"?",emptySlotReset:"未指派線材",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:{includesEncryptionKey:"本機備份包含 MFA 加密金鑰檔案(DATA_DIR/.mfa_encryption_key),因此備份 ZIP 是自包含的。請將 ZIP 視為敏感檔案 — 任何擁有該檔案的人都可以解密內部儲存的 OIDC 用戶端機密和 TOTP 機密。",title:"備份與恢復",createBackup:"建立備份",restoreBackup:"恢復備份",restoreDescription:"從備份檔案替換所有資料",downloadBackup:"下載備份",uploadBackup:"上傳備份",lastBackup:"上次備份",autoBackup:"自動備份",backupNow:"立即備份",restoreWarning:"警告:恢復備份將覆蓋所有目前資料。",includeArchives:"包含歸檔",includeSettings:"包含設定",includeProfiles:"包含設定檔案",backupSuccess:"備份建立成功",restoreSuccess:"備份恢復成功",backupFailed:"備份失敗",restoreFailed:"恢復失敗",restoreNote:"恢復期間虛擬印表機將停止",githubBackup:"GitHub 備份",enabled:"已啟用",cloudLoginRequired:"需要登入 Bambu Cloud。請在 設定檔案 → 雲設定檔案 中登入以啟用 GitHub 備份。",cloudLoginRequiredShort:"需要雲端登入",githubDescription:"自動將您的設定檔案同步到私有 GitHub 倉庫以進行備份和版本歷史紀錄。",repoIsPrivate:"儲存庫為私有 — 可安全備份。",repoIsPublicWarning:"儲存庫為公開(PUBLIC)。Bambuddy 備份包含 MQTT 認證、Home Assistant 權杖、Prometheus 權杖、您的 Bambu Cloud 電子郵件,以及透過 K-profile 暴露的印表機存取碼。在您於服務商設定中將儲存庫改為私有之前,儲存將被阻擋。",repoVisibilityUnknown:"無法確認儲存庫的可見性。Bambuddy 拒絕向任何未確認為私有的目標進行備份;儲存將被阻擋。",repositoryUrl:"倉庫 URL",repoUrlPlaceholderGitHub:"https://github.com/username/repo-name",repoUrlPlaceholderGitea:"https://gitea.example.com/username/repo-name",repoUrlPlaceholderForgejo:"https://forgejo.example.com/username/repo-name",repoUrlPlaceholderGitLab:"https://gitlab.com/username/repo-name",allowInsecureHttp:"允許不安全的 HTTP",allowInsecureHttpHint:"為無 TLS 的私人網路自托管執行個體啟用",personalAccessToken:"個人存取權杖",tokenSaved:"(已儲存)",enterNewToken:"輸入新權杖以更新",tokenHint:"具有內容讀寫權限的細粒度權杖",branch:"分支",provider:"Git 供應商",providerGitHub:"GitHub",providerGitLab:"GitLab",providerGitea:"Gitea",providerForgejo:"Forgejo",manualOnly:"僅手動",hourly:"每小時",daily:"每天",weekly:"每週",includeInBackup:"包含在備份中",kProfiles:"K 設定檔案",kProfilesDescription:"來自已連線印表機的壓力推進校準",noPrintersConnected:"沒有印表機連線",printersConnected:"{{connected}}/{{total}} 已連線",cloudProfiles:"雲設定檔案",cloudProfilesDescription:"來自 Bambu Cloud 的耗材、印表機和工藝預設",appSettings:"應用程式設定",appSettingsDescription:"Bambuddy 設定(完整資料庫)",spoolInventory:"耗材庫存",spoolInventoryDescription:"耗材卷軸、使用紀錄和成本追蹤",printArchives:"列印檔案",printArchivesDescription:"列印歷史中繼資料(不含 gcode/3MF 檔案)",lastBackupAt:"上次備份:",noBackupsYet:"尚無備份",next:"下次:",startingBackup:"正在啟動備份...",test:"測試",enableBackup:"啟用備份",testConnection:"測試連線",enterRepoUrl:"請輸入倉庫 URL",enterRepoAndToken:"請輸入倉庫 URL 和存取權杖",repoRequired:"倉庫 URL 為必填項",tokenRequired:"存取權杖為必填項",githubBackupEnabled:"GitHub 備份已啟用",tokenUpdated:"權杖已更新",settingsSaved:"設定已儲存",failedToSave:"儲存失敗:{{message}}",backupCompleteFiles:"備份完成 - {{count}} 個檔案已更新",backupSkippedNoChanges:"備份已跳過 - 無更改",backupFailed2:"備份失敗:{{message}}",clearedLogs:"已清除 {{count}} 條日誌",failedToClearLogs:"清除日誌失敗:{{message}}",history:"歷史紀錄",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:"大小",localTimeHint:"本地時間 ({{tz}})",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)",inheritedFromTarget:"繼承自目標印表機",derivedFromTargetHint:"使用目標印表機的存取碼。橋接會將切片軟體的認證轉發到實際印表機,因此兩個存取碼必須相符 — 如需變更,請在印表機設定中編輯存取碼。",reveal:"顯示存取碼",hide:"隱藏存取碼"},targetPrinter:{title:"目標印表機",configured:"代理目標已設定",notConfigured:"未選擇目標印表機 - 代理模式需要設定",placeholder:"選擇印表機...",hint:"選擇要將切片軟體流量代理到的印表機。印表機必須處於區域網路模式。",noPrinters:"未設定印表機。請先新增印表機以使用代理模式。"},remoteInterface:{title:"網路介面覆蓋",configured:"介面覆蓋已啟用",optional:"可選 - 當自動檢測的 IP 不正確時使用(例如多網路卡、Docker、VPN)",placeholder:"自動檢測(預設)...",hint:"覆蓋透過 SSDP 廣播並在 TLS 憑證中使用的 IP 位址。在 Bambuddy 有多個網路介面時很有用。"},mode:{title:"模式",archive:"歸檔",archiveDesc:"立即歸檔檔案",review:"審核",reviewDesc:"歸檔前審核",queue:"佇列",queueDesc:"歸檔並新增到佇列",proxy:"代理",proxyDesc:"中繼到真實印表機"},autoDispatch:{title:"自動派發",description:"新增到佇列時自動開始列印。關閉後,列印任務等待手動派發。"},queueForceColorMatch:{title:"強制顏色匹配",description:"拒絕派發到沒有完全相同耗材類型和顏色的印表機。預設關閉 — 不啟用時,佇列僅按型號匹配,可能選到顏色錯誤的印表機。"},tailscaleDisabled:{title:"Tailscale 整合",description:"啟用以將此 VP 標記為透過 Tailscale 公開。顯示主機的 Tailscale 位址,以便您知道要貼上到切片器中的 IP。CA 匯入步驟保持不變 — 此切換對憑證無影響。"},setupRequired:{title:"需要設定",description:"虛擬印表機功能需要額外的系統設定才能工作。包括埠轉發、防火牆規則和平臺特定設定。",readGuide:"啟用前請閱讀設定指南"},archiveNameSource:{title:"存檔名稱來源",description:'選擇透過虛擬印表機接收檔案時新存檔的命名方式。"元資料"使用 3MF 中嵌入的切片標題(預設)。"檔名"使用 Bambu Studio 透過 FTP 傳送的檔案名稱。注意:當 3MF 包含標題欄位時,Bambu Studio 會以該欄位覆寫您在"傳送到印表機"對話方塊中輸入的名稱,因此兩種模式通常會產生相同的字串。',metadata:"元資料",filename:"檔名"},caCert:{title:"切片軟體憑證",description:"虛擬印表機使用由 Bambuddy CA 簽發的 TLS 憑證。將此 CA 憑證匯入切片軟體的信任庫一次,切片軟體即可接受連線 — 無需再透過命令列取得。",copy:"複製",copied:"已複製",download:"下載",fingerprint:"SHA-256"},howItWorks:{title:"工作原理",step1:"在同一區域網路中,虛擬印表機會透過發現機制自動出現在您的切片軟體(Bambu Studio / OrcaSlicer)中。從其他網路,透過 IP 位址和存取碼手動新增。",step2:'在歸檔、審核和佇列模式下,使用切片軟體中的"傳送"按鈕將 3MF 檔案上傳到 Bambuddy。切片軟體會顯示"列印成功"— 檔案已儲存,未列印。',step3:"在代理模式下,虛擬印表機將所有流量中繼到真實印表機 — 列印會立即開始,就像直接連線一樣。"},status:{title:"狀態詳情",printerName:"印表機名稱",model:"型號",serialNumber:"序列號",mode:"模式",pendingFiles:"待處理檔案",targetPrinter:"目標印表機",ftpPort:"FTP 連接埠",mqttPort:"MQTT 連接埠",ftpConnections:"FTP 連線",mqttConnections:"MQTT 連線"},toast:{updated:"虛擬印表機設定已更新",failedToUpdate:"更新設定失敗",copyFailed:"複製失敗 — 請手動選取文字",accessCodeRequired:"請先設定存取碼",targetPrinterRequired:"請先選擇目標印表機",bindIpRequired:"請先設定繫結 IP",accessCodeEmpty:"存取碼不能為空",accessCodeLength:"存取碼必須恰好 8 個字元",targetCodeChangedRebind:"存取碼已同步到新的目標印表機。請在切片軟體中重新加入此裝置以使用新的存取碼。",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:"在列印之間保持啟用而非一次性",autoOffAfterDrying:"乾燥完成後自動關閉",autoOffAfterDryingDescription:"AMS 乾燥完成後關閉",delayAfterDryingMinutes:"乾燥後延遲(分鐘)",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 溫度超過閾值",inventoryAlerts:"庫存警報",stockReorderAlert:"補貨警報",stockReorderAlertDescription:"SKU 已達到補貨點",stockBreakAlert:"斷貨警報",stockBreakAlertDescription:"庫存將在補貨到達前耗盡",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:"(列印完成後)",eventPriority:{sectionTitle:"ntfy 優先級",helpNtfy:"為每個已啟用的事件選擇優先級。ntfy 使用它來升級提醒(聲音、可見性、推播行為)。此處未設定的級別將使用 ntfy 伺服器預設值。",min:"最低",low:"低",default:"預設",high:"高",urgent:"緊急"},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:"Git 備份",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:"目前耗材",plateReady:"熱床就緒: {{name}}",plateReadyLabel:"待清理的熱床",plateClearAction:"清理",plateClearedToast:"已將熱床標記為已清理",plateClearFailed:"無法將熱床標記為已清理"},modal:{spoolDetected:"偵測到耗材",assignToAms:"分配到 AMS",syncWeight:"同步重量",weightSynced:"已同步!",syncing:"同步中...",newTagDetected:"偵測到新標籤",addToInventory:"新增到庫存",assignToAmsTitle:"分配到 AMS",selectSlot:"選擇槽位",assign:"分配",assigning:"分配中...",assignSuccess:"已分配!",assignPendingInsert:"已分配。插入耗材後將設定槽位。",assignError:"分配耗材失敗。請重試。",noPrinterSelected:"選擇印表機...",noAmsDetected:"此印表機未偵測到 AMS",slot:"槽位"},weight:{noReading:"無讀數",stable:"穩定",measuring:"測量中...",tare:"去皮",calibrate:"校準"},spool:{remaining:"剩餘",material:"材料",brand:"品牌",color:"顏色",coreWeight:"軸心重",labelWeight:"標籤重",scaleWeight:"磅秤重",netWeight:"淨重",lastUsed:"上次使用"},ams:{noData:"未偵測到 AMS",connectAms:"連線 AMS 以檢視耗材槽位",noPrinter:"未選擇印表機",selectPrinter:"從頂部欄選擇印表機",printerDisconnected:"印表機已斷開",humidity:"濕度",level:"餘量",active:"活躍",slot:"槽位",empty:"空"},inventory:{search:"搜尋耗材...",empty:"庫存中沒有耗材",noResults:"沒有匹配的耗材",spools:"個耗材",addSpool:"新增耗材"},settings:{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:"去皮命令已傳送。等待裝置回應...",tareComplete:"去皮完成!",tareTimedOut:"去皮逾時 — SpoolBuddy 守護程序是否正在執行?",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:"建立耗材失敗",incompleteDataWarning:"已使用不完整的Spoolman資料寫入標籤"},quickMenu:{printerPower:"印表機電源",systemControls:"系統",restartDaemon:"重新啟動守護程式",restartBrowser:"重新啟動瀏覽器",reboot:"重新開機",shutdown:"關機",swipeToClose:"向下滑動關閉",confirmTitle:"確認",confirmShutdown:"確定要關閉 SpoolBuddy 嗎?您需要實體存取才能重新開啟。",confirmReboot:"確定要重新開機 SpoolBuddy 嗎?",confirmRestartDaemon:"重新啟動 SpoolBuddy 守護程式?NFC 和磅秤將暫時不可用。",confirmRestartBrowser:"重新啟動kiosk瀏覽器?螢幕將短暫變黑。",confirm:"確認",confirmPlugOn:"開啟 {{name}}?",confirmPlugOff:"關閉 {{name}}?",turnOn:"開啟",turnOff:"關閉"}},diagnostic:{modalTitle:"連線診斷 — {{name}}",running:"正在執行診斷...",runningElapsed:"正在執行診斷... ({{elapsed}}秒)",waitingForReportHint:"正在等待印表機發佈狀態報告 — 最長可能需要 {{max}} 秒。",runFailed:"無法執行診斷:{{error}}",retry:"重新執行",runButton:"執行診斷",sectionTitle:"連線診斷",sectionDescription:"檢查印表機無法連線或無法列印的原因 — 連接埠可達性、LAN 開發者模式、Docker 網路模式與認證資訊。",noPrinters:"未設定印表機。",overall:{ok:"未發現問題 — 印表機連線看起來正常。",warnings:"印表機應該可以運作,但有些項目需要注意。",problems:"發現了可解釋印表機無法連線或無法列印的問題。"},check:{port_mqtt:{title:"控制連接埠(MQTT 8883)",pass:"可達 — 印表機正在接受控制連線。",fail:"連接埠 8883 無法連線。印表機已關機、IP 位址不同,或被防火牆封鎖。請核實印表機 IP,並確保沒有任何東西封鎖連接埠 8883。"},port_ftps:{title:"檔案傳輸連接埠(FTPS 990)",pass:"可達 — 傳送列印檔案將正常運作。",warn:"連接埠 990 無法連線。監控可能仍然有效,但向印表機傳送列印工作將失敗。請確保連接埠 990 未被封鎖。"},external_storage:{title:"將傳送的檔案儲存在外部儲存中(安裝步驟 4)",pass:"印表機回報此選項已開啟 — 傳送的檔案將儲存在 SD 卡上,封存將包含縮圖和切片機中繼資料。",fail:"印表機回報此選項已關閉。請啟用「將傳送的檔案儲存在外部儲存中」 — 在較新韌體 (P2S 01.02 / Bambu Studio 2.6+) 中,開關位於印表機的列印設定中;在較舊版本中位於 Bambu Studio / OrcaSlicer 的裝置分頁中。如果未啟用此選項,每次封存的列印都將沒有縮圖也沒有切片機中繼資料。",skip:"未檢查 — 需要有效的 MQTT 連線。在該設定僅存在於切片機中的較舊切片機上,印表機不會回報此設定,因此即使選項已關閉,此檢查也會通過 — 請手動驗證安裝步驟 4。"},port_rtsps:{title:"攝影機連接埠(RTSPS 322)",pass:"可達 — 攝影機串流將正常運作。",warn:"連接埠 322 無法連線。即時攝影機檢視將無法運作。這不影響列印。"},network_mode:{title:"Docker 網路模式",pass:"正在以 host 網路模式執行。",warn:'Bambuddy 正在以 Docker bridge 網路執行。印表機探索與虛擬印表機需要 host 網路模式 — 請使用 "network_mode: host" 重新建立容器。',skip:"未在 Docker 中執行 — 不適用。"},subnet:{title:"網路子網路",pass:"印表機與 Bambuddy 位於同一子網路。",warn:"印表機({{printer_ip}})與 Bambuddy({{host_ip}})位於不同的子網路。除非設定了子網路之間的路由,否則它們可能無法互相連線。",skip:"無法判定子網路 — 已略過。"},mqtt_auth:{title:"印表機認證資訊",pass:"印表機已接受連線。",fail:"印表機可達,但拒絕了連線。存取碼或序號很可能有誤。每次切換開發者模式時存取碼都會變更 — 請從印表機螢幕重新複製。",skip:"未檢查 — 無法連線到印表機。"},developer_mode:{title:"LAN 開發者模式",pass:"開發者模式已啟用。",fail:"印表機上的開發者模式已關閉。請在印表機的 LAN 設定中啟用它 — 並按 OK 確認。否則列印將無法開始。",skip:"無法檢查 — 需要與印表機的即時連線。"},printer_publishing:{title:"印表機正在發佈狀態",pass:"印表機正在發佈狀態更新 — AMS、耗材和 K 配置將正確鏡像到切片軟體。",fail:"MQTT 代理已接受連線,但印表機未發佈任何狀態報告。這幾乎總是因為序號錯誤或大小寫不一致 — device//api/v1/metrics adresinde sun.",bearerTokenOptional:"Bearer Belirteci (isteğe bağlı)",bearerTokenHint:"Ayarlandıysa, isteklerin Authorization: Bearer içermesi gerekir",metricsConnectionStatus:"Bağlantı durumu",metricsPrinterState:"Yazıcı durumu (boşta/yazdırılıyor/vb.)",metricsPrintProgress:"Baskı ilerlemesi 0-100%",metricsBedTemp:"Tabla sıcaklığı",metricsNozzleTemp:"Nozul sıcaklığı",metricsPrintsTotal:"Sonuca göre toplam baskılar",metricsMore:"...ve daha fazlası (katmanlar, fanlar, kuyruk, filament kullanımı)",smartPlugsDescription:"Güç kontrolünü otomatikleştirmek ve yazıcılarınız için enerji kullanımını takip etmek üzere akıllı prizleri (Tasmota veya Home Assistant) bağlayın.",allOn:"Tümü Açık",allOff:"Tümü Kapalı",addSmartPlug:"Akıllı Priz Ekle",energySummary:"Enerji Özeti",currentPower:"Mevcut Güç",plugsOnline:"{{reachable}}/{{total}} priz çevrimiçi",today:"Bugün",yesterday:"Dün",total:"Toplam",enablePlugsForSummary:"Enerji özetini görmek için prizleri etkinleştirin",addNotificationProvider:"Ekle",systemBadge:"(Sistem)",creating:"Oluşturuluyor...",changing:"Değiştiriliyor...",deleteUserAndItems:"Kullanıcıyı VE öğelerini sil",deleteUserKeepItems:"Kullanıcıyı sil, öğeleri tut (sahipsiz olur)",ok:"Tamam",twoFa:{totpTitle:"Doğrulayıcı Uygulama (TOTP)",totpDesc:"Google Authenticator, Aegis veya Authy gibi bir doğrulayıcı uygulama kullanın.",emailOtpTitle:"E-posta OTP",emailOtpDesc:"Giriş yaptığınızda {{email}} adresine tek seferlik bir kod gönder.",emailOtpNoEmail:"Bu yöntemi etkinleştirmek için hesabınıza bir e-posta adresi ekleyin.",addEmailFirst:"Hesabınızın e-posta adresi yok. E-posta OTP'yi etkinleştirmeden önce bir yöneticiden eklemesini isteyin.",setupTotp:"Doğrulayıcı Uygulamayı Ayarla",setupAuthApp:"Doğrulayıcı Uygulamayı Ayarla",setupInstructions:"Aşağıdaki QR kodunu doğrulayıcı uygulamanızla tarayın, ardından bir kodla onaylayın.",manualEntry:"Tarayamıyor musunuz? Bu gizli anahtarı manuel olarak girin:",scannedContinue:"Kodu taradım — devam et",enterCodeToConfirm:"Kurulumu onaylamak için doğrulayıcı uygulamanızdan 6 haneli kodu girin.",activate:"Etkinleştir",disableTotp:"Doğrulayıcıyı Devre Dışı Bırak",disableConfirmHint:"Doğrulayıcıyı devre dışı bırakmak için geçerli bir TOTP kodu veya yedek kod girin.",totpDisabled:"Doğrulayıcı uygulama devre dışı bırakıldı.",emailOtpEnabled:"E-posta OTP etkinleştirildi.",emailOtpDisabled:"E-posta OTP devre dışı bırakıldı.",smtpRequired:"Lütfen önce SMTP ayarlarını yapılandırın ve test edin.",invalidCode:"Geçersiz kod. Lütfen tekrar deneyin.",enableEmailOtp:"E-posta OTP'yi Etkinleştir",disableEmailOtp:"E-posta OTP'yi Devre Dışı Bırak",emailSetupEnterCode:"E-posta adresinize bir doğrulama kodu gönderildi. Bu kutunun sahibi olduğunuzu onaylamak için aşağıya girin.",verifyAndEnable:"Doğrula ve Etkinleştir",emailDisablePasswordHint:"E-posta OTP'yi devre dışı bırakmayı onaylamak için hesap parolanızı girin.",passwordPlaceholder:"Parolanızı girin",backupCodesTitle:"Yedek kodlarınızı kaydedin",backupCodesWarning:"Bu kodları güvenli bir yere kaydedin. Her kod yalnızca bir kez kullanılabilir ve tekrar gösterilmeyecektir.",backupCodesRemaining:"{{count}} yedek kod kaldı",savedCodes:"Kodlarımı kaydettim",regenBackup:"Yedek Kodları Yeniden Oluştur",regenBackupHint:"10 yeni yedek kod oluşturmak için mevcut TOTP kodunuzu girin. Mevcut tüm yedek kodlar geçersiz kılınacak.",newBackupCodes:"Yeni yedek kodlar",linkedAccounts:"Bağlı SSO Hesapları",linkedAccountsDesc:"Bu harici kimlik sağlayıcıları hesabınıza bağlıdır.",oidcUnlinked:"Hesap bağlantısı kaldırıldı."},oidc:{title:"SSO / OIDC Sağlayıcıları",desc:"Harici kimlik sağlayıcılar aracılığıyla tek oturum açmaya izin vermek için OpenID Connect sağlayıcılarını yapılandırın.",addProvider:"Sağlayıcı Ekle",newProvider:"Yeni Sağlayıcı",empty:"Henüz yapılandırılmış OIDC sağlayıcısı yok.",created:"Sağlayıcı oluşturuldu.",updated:"Sağlayıcı güncellendi.",deleted:"Sağlayıcı silindi.",refreshIcon:"Simgeyi yenile",removeIcon:"Simgeyi kaldır",iconRefreshed:"Simge yenilendi.",iconRemoved:"Simge kaldırıldı.",iconFetchFailed:"Simge sağlayıcı URL'sinden alınamadı.",deleteTitle:"Sağlayıcıyı Sil",deleteMessage:'"{{name}}" silinsin mi? Tüm bağlı kullanıcı hesaplarının bağlantısı kaldırılacak.',form:{name:"Görünen Ad",issuerUrl:"Yayıncı URL",clientId:"İstemci Kimliği",clientSecret:"İstemci Gizli Anahtarı",scopes:"Kapsamlar",iconUrl:"Simge URL (isteğe bağlı)",enabled:"Etkin",autoCreate:"Kullanıcıları otomatik oluştur",autoCreateDesc:"İlk girişte otomatik olarak yerel bir hesap oluştur.",autoLink:"Mevcut hesapları otomatik bağla",autoLinkDesc:"İlk girişte mevcut yerel hesapları e-posta eşleştirerek bağla.",secretHint:"mevcut olanı korumak için boş bırakın",secretPlaceholder:"yeni gizli anahtar",emailClaim:"E-posta İddiası",emailClaimDesc:"E-posta kimliği olarak kullanılan JWT iddiası. Azure Entra ID için 'preferred_username' veya 'upn' kullanın (email_verified göndermez). Yalnızca güvenilir iddia adlarını kullanın.",emailClaimPlaceholder:"email",emailClaimCustomClaimAutoLinkWarning:"Özel iddialar yalnızca değer kiracı tarafından yönetildiğinde otomatik bağlantı için güvenlidir (örn. Azure Entra ID upn / preferred_username). Kimlik sağlayıcınız kullanıcıların bu iddiayı kendi kendine onaylamasına izin veriyorsa otomatik bağlantıyı etkinleştirmeyin.",requireEmailVerified:"E-posta doğrulamasını gerektir",requireEmailVerifiedDesc:"E-posta iddiasını yalnızca sağlayıcı doğrulanmış olarak işaretlediğinde kabul et.",requireEmailVerifiedWarning:"Uyarı: e-posta doğrulama olmadan bile kabul edilecek. Yalnızca güvenilir sağlayıcılarla kullanın.",requireEmailVerifiedAutoLink:"Bu ayarı değiştirmek için önce otomatik bağlantıyı devre dışı bırakın.",defaultGroup:"Varsayılan Grup",defaultGroupDesc:"Otomatik oluşturulan kullanıcılara atanan grup. Ayarlanmazsa Viewers'a geri döner.",defaultGroupViewersFallback:"Viewers (varsayılan)"}},encryption:{title:"MFA Şifreleme Durumu",enabledFromEnv:"Sabit şifreleme etkin (anahtar MFA_ENCRYPTION_KEY ortam değişkeninden)",enabledFromFile:"Sabit şifreleme etkin (anahtar veri dizininden yüklendi)",enabledGenerated:"Sabit şifreleme otomatik oluşturulan anahtarla etkin",notConfigured:"Sabit şifreleme yapılandırılmamış",notConfiguredDesc:"TOTP gizli anahtarları ve OIDC client_secrets düz metin olarak saklanır. MFA_ENCRYPTION_KEY ayarlayın veya Bambuddy'yi otomatik olarak oluşturmak için yazılabilir bir veri dizini ile yeniden başlatın.",allEncrypted:"Tüm MFA gizli anahtarları sabit olarak şifrelenmiş durumda.",legacyRowsLabel:"Eski düz metin satırlar",encryptedRowsLabel:"Şifrelenmiş satırlar",legacyRowsWarning:"{{count}} eski düz metin satır algılandı. Şifrelenmiş depolamaya geçmek için OIDC sağlayıcısını yeniden kaydedin veya kullanıcının doğrulayıcı uygulamasını yeniden kaydedin.",backupHint:"Otomatik oluşturulan anahtar DATA_DIR/.mfa_encryption_key konumunda saklanır ve yerel yedek ZIP'lere dahil edilir. Yedeklerinizi güvende tutun veya MFA_ENCRYPTION_KEY'i açıkça ayarlayın.",decryptionBrokenTitle:"Şifreleme anahtarı eksik",decryptionBrokenError:"Şifreleme anahtarı artık mevcut olmadığından {{count}} şifrelenmiş kayıt şifresi çözülemiyor. Kurtarmak için önceki MFA_ENCRYPTION_KEY veya DATA_DIR/.mfa_encryption_key'i geri yükleyin.",migrationErrorWarning:"Başlangıçta {{count}} eski satır yeniden şifrelenemedi. Sunucu günlüklerini kontrol edin ve yeniden denemek için Bambuddy'yi yeniden başlatın."}},notification:{printStarted:{title:"Baskı Başladı",body:"{{printer}}: {{filename}} yazdırmaya başladı"},printCompleted:{title:"Baskı Tamamlandı",body:"{{printer}}: {{filename}} başarıyla tamamlandı"},printFailed:{title:"Baskı Başarısız",body:"{{printer}}: {{filename}} başarısız oldu"},printStopped:{title:"Baskı Durduruldu",body:"{{printer}}: {{filename}} durduruldu"},printProgress:{title:"Baskı İlerlemesi",body:"{{printer}}: {{filename}} %{{percent}} tamamlandı"},printerOffline:{title:"Yazıcı Çevrimdışı",body:"{{printer}} çevrimdışı"},printerError:{title:"Yazıcı Hatası",body:"{{printer}}: {{error}}"},filamentLow:{title:"Az Filament",body:"{{printer}}: Filament azalıyor"},maintenanceDue:{title:"Bakım Zamanı",body:"{{printer}}: {{items}} dikkat gerektiriyor"}},errors:{generic:"Bir şeyler ters gitti",networkError:"Ağ hatası. Lütfen bağlantınızı kontrol edin.",notFound:"Bulunamadı",unauthorized:"Yetkisiz",serverError:"Sunucu hatası",validationError:"Lütfen girdinizi kontrol edin",printerConnectionFailed:"Yazıcıya bağlanılamadı",saveFailed:"Değişiklikler kaydedilemedi",deleteFailed:"Silme başarısız",loadFailed:"Veri yüklenemedi"},hmsErrors:{title:"Hatalar - {{name}}",noErrors:"Hata yok",viewOnWiki:"Bambu Lab Wiki'de görüntüle",clearInstructions:"Buradan kapatmak için yazıcıdaki hataları temizleyin.",clearErrors:"Hataları Temizle",clearSuccess:"HMS hataları temizlendi",clearFailed:"HMS hataları temizlenemedi"},mqttDebug:{title:"MQTT Hata Ayıklama Günlüğü",searchPlaceholder:"Konu veya yük ara...",noMessages:"Henüz mesaj kaydedilmedi",startLoggingHint:'MQTT mesajlarını yakalamaya başlamak için "Kaydetmeye Başla"ya tıklayın',noMessagesMatch:"Filtrenizle eşleşen mesaj yok",adjustFilterHint:"Arama veya filtre kriterlerinizi ayarlamayı deneyin",incoming:"Gelen",outgoing:"Giden",loggingStopped:"Kaydetme durduruldu",loggingActive:"Kaydetme aktif - mesajlar otomatik olarak yenilenecek",startLogging:"Kaydetmeye Başla",stopLogging:"Kaydetmeyi Durdur",clearLog:"Günlüğü Temizle",topic:"Konu",timestamp:"Zaman damgası",direction:"Yön",all:"Tümü"},printerFiles:{title:"Dosya Yöneticisi",storageUsed:"Kullanılan:",storageFree:"Boş:",filterPlaceholder:"Dosyaları filtrele...",deleteButton:"Sil",deleteFiles:"{{count}} Dosya Sil",deleteFileConfirm:'"{{name}}" silinsin mi? Bu geri alınamaz.',deleteFilesConfirm:"Seçilen {{count}} dosya silinsin mi? Bu geri alınamaz.",noFiles:"Yazıcıda dosya yok",loadingFiles:"Dosyalar yükleniyor...",failedToLoad:"Dosyalar yüklenemedi",toast:{filesDeleted:"{{count}} dosya silindi",deleteFailed:"Silme başarısız: {{error}}"}},confirm:{delete:"Bunu silmek istediğinizden emin misiniz?",unsavedChanges:"Kaydedilmemiş değişiklikleriniz var. Çıkmak istediğinizden emin misiniz?",clearQueue:"Kuyruğu temizlemek istediğinizden emin misiniz?"},login:{title:"Bambuddy Giriş",subtitle:"Hesabınıza giriş yapın",username:"Kullanıcı Adı",usernamePlaceholder:"Kullanıcı adınızı girin",usernameOrEmail:"Kullanıcı Adı veya E-posta",usernameOrEmailPlaceholder:"Kullanıcı adı veya @ E-posta",password:"Parola",passwordPlaceholder:"Parolanızı girin",signIn:"Giriş yap",signingIn:"Giriş yapılıyor...",rememberMe:"Beni Hatırla",forgotPassword:"Parolanızı mı unuttunuz?",loginSuccess:"Başarıyla giriş yapıldı",loginFailed:"Giriş başarısız",enterCredentials:"Lütfen kullanıcı adı ve parola girin",enterEmail:"Lütfen e-posta adresinizi girin",oidcLoginFailed:"OIDC girişi başarısız",oidcErrors:{providerError:"Kimlik sağlayıcısı bir hata döndürdü",missingParameters:"OIDC geri arama gerekli parametreleri eksik",invalidState:"OIDC durumu geçersiz veya zaten kullanılmış",stateExpired:"OIDC giriş oturumu süresi doldu — lütfen tekrar deneyin",providerNotFound:"OIDC sağlayıcısı bulunamadı",discoveryFailed:"OIDC keşif belgesi alınamadı",invalidDiscovery:"OIDC keşif belgesi geçersiz",networkError:"OIDC belirteç değişimi sırasında ağ hatası",badResponse:"OIDC belirteç değişimi sırasında beklenmeyen yanıt",noIdToken:"OIDC sağlayıcısı bir ID belirteci döndürmedi",validationFailed:"OIDC belirteç doğrulaması başarısız",nonceMismatch:"OIDC nonce uyuşmazlığı — olası tekrar saldırısı",missingSubClaim:"OIDC belirteci sub iddiasını içermiyor",noLinkedAccount:"Bu OIDC kimliğine bağlı yerel hesap yok",accountInactive:"Hesabınız aktif değil",userResolutionFailed:"Hesabınız çözümlenemedi",internalError:"OIDC girişi sırasında dahili bir hata oluştu",tokenExchangeFailed:"OIDC belirteç değişimi başarısız"},forgotPasswordTitle:"Parolayı Unuttum",forgotPasswordMessage:"Parolanızı unuttuysanız, sıfırlamak için lütfen sistem yöneticinizle iletişime geçin.",forgotPasswordEmailMessage:"E-posta adresinizi girin, size yeni bir parola göndereceğiz.",emailAddress:"E-posta Adresi",emailPlaceholder:"eposta.adresi@example.com",cancel:"İptal",sending:"Gönderiliyor...",sendResetEmail:"Sıfırlama E-postası Gönder",howToReset:"Parolanızı nasıl sıfırlarsınız:",resetStep1:"Bambuddy yöneticinizle iletişime geçin",resetStep2:"Kullanıcı Yönetiminde parolanızı sıfırlamasını isteyin",resetStep3:"Sizin için yeni bir geçici parola belirleyebilirler",resetStep4:"Yeni parolayla giriş yapın ve Ayarlarda değiştirin",gotIt:"Anladım",resetPassword:{title:"Yeni Parola Belirle",subtitle:"Aşağıya yeni parolanızı girin ve onaylayın.",newPassword:"Yeni Parola",newPasswordPlaceholder:"En az 8 karakter",confirmPassword:"Parolayı Onayla",confirmPasswordPlaceholder:"Yeni parolayı tekrarlayın",saving:"Kaydediliyor…",submit:"Yeni Parola Belirle",backToLogin:"Girişe dön",passwordsDoNotMatch:"Parolalar eşleşmiyor",passwordTooShort:"Parola en az 8 karakter olmalı",resetFailed:"Parola sıfırlama başarısız. Bağlantının süresi dolmuş olabilir."},twoFA:{title:"İki Faktörlü Kimlik Doğrulama",subtitle:"Hesabınız 2FA ile korunuyor. Aşağıya doğrulama kodunu girin.",methodAuthenticator:"Doğrulayıcı Uygulama",methodEmail:"E-posta Kodu",methodBackup:"Yedek Kod",instructionsTotp:"Doğrulayıcı uygulamanızı açın ve Bambuddy için 6 haneli kodu girin.",instructionsEmail:"E-posta adresinize 6 haneli bir kod gönderildi. 10 dakika içinde sona erer.",instructionsEmailNotSent:"E-posta yoluyla bir doğrulama kodu almak için aşağıdaki düğmeye tıklayın.",instructionsBackup:"8 karakterlik yedek kurtarma kodlarınızdan birini girin. Her kod yalnızca bir kez kullanılabilir.",sendCodeButton:"E-posta ile Kod Gönder",sendingCode:"Gönderiliyor...",resendCode:"Kodu yeniden gönder",codeLabel:"Doğrulama Kodu",backupCodeLabel:"Yedek Kod",codePlaceholder:"000000",backupCodePlaceholder:"XXXXXXXX",verifyButton:"Doğrula",verifyingButton:"Doğrulanıyor...",backToLogin:"← Girişe dön",orContinueWith:"veya şununla devam edin",signInWith:"{{provider}} ile giriş yap",enterCode:"Lütfen doğrulama kodunu girin",sendCodeFailed:"Doğrulama kodu gönderilemedi",invalidCode:"Geçersiz kod. Lütfen tekrar deneyin."}},setup:{title:"Bambuddy Kurulumu",subtitle:"Bambuddy örneğiniz için kimlik doğrulamayı yapılandırın",enableAuth:"Kimlik Doğrulamayı Etkinleştir",adminAccount:"Yönetici Hesabı",adminAccountDesc:"Yönetici kullanıcılar zaten varsa, kimlik doğrulama mevcut yönetici hesapları kullanılarak etkinleştirilecek. Mevcut yöneticileri kullanmak için aşağıdaki alanları boş bırakın veya yeni bir yönetici kullanıcı oluşturmak için yeni kimlik bilgileri girin.",adminUsername:"Yönetici Kullanıcı Adı",adminPassword:"Yönetici Parolası",optionalIfAdminExists:"(yönetici kullanıcılar varsa isteğe bağlı)",adminUsernamePlaceholder:"Yönetici kullanıcı adı girin (isteğe bağlı)",adminPasswordPlaceholder:"Yönetici parolası girin (isteğe bağlı)",confirmPassword:"Parolayı Onayla",confirmPasswordPlaceholder:"Yönetici parolasını onayla",settingUp:"Kuruluyor...",completeSetup:"Kurulumu Tamamla",toast:{authEnabledAdminCreated:"Kimlik doğrulama etkinleştirildi ve yönetici kullanıcı oluşturuldu",authEnabledExistingAdmins:"Mevcut yönetici kullanıcılar kullanılarak kimlik doğrulama etkinleştirildi",setupCompleted:"Kurulum tamamlandı",enterBothCredentials:"Lütfen hem yönetici kullanıcı adı hem de parola girin veya mevcut yönetici kullanıcıları kullanmak için her ikisini de boş bırakın",passwordsDoNotMatch:"Parolalar eşleşmiyor",passwordTooShort:"Parola en az 6 karakter olmalı"}},changePassword:{title:"Parolayı Değiştir",currentPassword:"Mevcut Parola",currentPasswordPlaceholder:"Mevcut parolayı girin",newPassword:"Yeni Parola",newPasswordPlaceholder:"Yeni parolayı girin (en az 6 karakter)",confirmPassword:"Yeni Parolayı Onayla",confirmPasswordPlaceholder:"Yeni parolayı onayla",passwordsDoNotMatch:"Parolalar eşleşmiyor",passwordTooShort:"Parola en az 6 karakter olmalı",changing:"Değiştiriliyor...",success:"Parola başarıyla değiştirildi",failed:"Parola değiştirilemedi"},plateAlert:{title:"Baskı Duraklatıldı!",message:"Baskı plakasında nesneler algılandı. Baskı otomatik olarak duraklatıldı. Lütfen plakayı temizleyin ve baskıya devam edin.",understand:"Anladım"},camera:{title:"Kamera Görünümü",invalidPrinterId:"Geçersiz yazıcı ID'si",live:"Canlı",snapshot:"Anlık Görüntü",restartStream:"Akışı yeniden başlat",refreshSnapshot:"Anlık görüntüyü yenile",fullscreen:"Tam ekran",exitFullscreen:"Tam ekrandan çık",connectingToCamera:"Kameraya bağlanılıyor...",capturingSnapshot:"Anlık görüntü yakalanıyor...",connectionLost:"Bağlantı kesildi",connectionFailed:"Kamera bağlantısı başarısız",reconnecting:"{{countdown}}sn içinde yeniden bağlanılıyor... (deneme {{attempt}}/{{max}})",reconnectNow:"Şimdi yeniden bağlan",cameraUnavailable:"Kamera kullanılamıyor",cameraUnavailableDesc:"Yazıcının açık ve bağlı olduğundan emin olun.",noCamera:"Kamera yok",retry:"Yeniden dene",cameraStream:"Kamera akışı",zoomOut:"Uzaklaştır",zoomIn:"Yakınlaştır",resetZoom:"Yakınlaştırmayı sıfırla",recording:"Kaydediyor",startRecording:"Kaydı Başlat",stopRecording:"Kaydı Durdur",chamberLight:"Hazne ışığını aç/kapat",unavailable:"Kamera kullanılamıyor",diagnose:{button:"Tanıla",modalTitle:"Kamera tanılaması",running:"Tanılama çalışıyor...",runFailed:"Tanılama çalıştırılamadı: {{error}}",retry:"Tekrar çalıştır",stage:{tcp_reachable:"Ağ erişilebilirliği",first_frame:"Kare yakalama",live_stream_active:"Canlı akış aktif"},summary:{all_ok:"Kamera çalışıyor. Tanılama tüm aşamaları başarıyla tamamladı.",live_stream_active_healthy:"Kamera şu anda son karelerle akış yapıyor — teste gerek yok.",printer_unreachable:"Yazıcıya erişilemiyor. IP adresini, ağ bağlantısını ve yazıcının açık olduğunu kontrol edin.",camera_port_closed:"Yazıcıya erişilebilir ancak kamera portu kapalı. Yazıcı ayarlarında yalnızca LAN modunun ve Geliştirici Modunun etkin olduğundan emin olun.",no_frame:"Kameraya bağlanıldı ancak hiç kare alınmadı. Tekrar deneyin veya yazıcı ayarlarında kameranın etkin olduğunu kontrol edin.",unknown_failure:"Kamera tanılaması bilinmeyen bir nedenle başarısız oldu. Ayrıntılar için destek günlüğüne bakın."},meta:{protocol:"Protokol",port:"Port",profile:"Profil"}}},groups:{title:"Grup Yönetimi",subtitle:"Erişim kontrolü için izin gruplarını yönetin",backToSettings:"Ayarlara Dön",createGroup:"Grup Oluştur",noPermission:"Bu sayfaya erişim izniniz yok.",system:"Sistem",noDescription:"Açıklama yok",usersCount:"{{count}} kullanıcı",permissionsCount:"{{count}} izin",edit:"Düzenle",delete:"Sil",toast:{created:"Grup başarıyla oluşturuldu",updated:"Grup başarıyla güncellendi",deleted:"Grup başarıyla silindi",enterGroupName:"Lütfen bir grup adı girin"},modal:{editGroup:"Grubu Düzenle",createGroup:"Grup Oluştur",cancel:"İptal",saving:"Kaydediliyor...",creating:"Oluşturuluyor...",saveChanges:"Değişiklikleri Kaydet"},form:{groupName:"Grup Adı",groupNamePlaceholder:"Grup adını girin",systemGroupWarning:"Sistem grubu adları değiştirilemez",description:"Açıklama",descriptionPlaceholder:"Açıklama girin (isteğe bağlı)",permissions:"İzinler ({{count}} seçildi)"},deleteModal:{title:"Grubu Sil",message:"Bu grubu silmek istediğinizden emin misiniz? Bu gruptaki kullanıcılar bu izinleri kaybedecek.",confirm:"Grubu Sil"},editor:{title:"Grubu Düzenle",createTitle:"Grup Oluştur",search:"İzinlerde ara...",selectAll:"Tümünü Seç",clearAll:"Tümünü Temizle",permissionsSelected:"{{count}} seçildi",noResults:"Aramanızla eşleşen izin yok"}},users:{title:"Kullanıcı Yönetimi",subtitle:"Kullanıcıları ve Bambuddy örneğinize erişimlerini yönetin",backToSettings:"Ayarlara Dön",createUser:"Kullanıcı Oluştur",noPermission:"Bu sayfaya erişim izniniz yok.",admin:"Yönetici",noGroups:"Grup yok",active:"Aktif",inactive:"Pasif",edit:"Düzenle",delete:"Sil",system:"Sistem",noGroupsAvailable:"Kullanılabilir grup yok",table:{username:"Kullanıcı Adı",groups:"Gruplar",status:"Durum",actions:"İşlemler"},toast:{created:"Kullanıcı başarıyla oluşturuldu",updated:"Kullanıcı başarıyla güncellendi",deleted:"Kullanıcı başarıyla silindi",fillRequired:"Lütfen tüm zorunlu alanları doldurun",passwordsDoNotMatch:"Parolalar eşleşmiyor",passwordTooShort:"Parola en az 6 karakter olmalı",ldapProvisioned:'"{{username}}" LDAP kullanıcısı tedarik edildi'},modal:{createUser:"Kullanıcı Oluştur",editUser:"Kullanıcıyı Düzenle",cancel:"İptal",creating:"Oluşturuluyor...",saving:"Kaydediliyor...",saveChanges:"Değişiklikleri Kaydet",advancedAuthSubtitle:"Gelişmiş Kimlik Doğrulama ile",tabsAriaLabel:"Kullanıcı kaynağı",localTab:"Yerel",ldapTab:"LDAP",ldapSearchLabel:"Dizinde ara",ldapSearchPlaceholder:"Bir kullanıcı adı, isim veya e-posta yazın...",ldapMinChars:"Aramak için en az 2 karakter yazın",ldapTypeToSearch:"LDAP dizininde aramak için yazmaya başlayın",ldapSearching:"Dizinde aranıyor...",ldapNoResults:"Dizinde eşleşen kullanıcı yok",ldapSearchError:"Dizin araması başarısız. LDAP sunucu durumunu kontrol edin.",ldapAlreadyProvisioned:"Zaten tedarik edildi",ldapSelectedLabel:"Seçildi",ldapProvision:"Kullanıcıyı tedarik et",ldapProvisioning:"Tedarik ediliyor...",ldapErrorProvision:"Tedarik başarısız. LDAP sunucu durumunu kontrol edin ve tekrar deneyin."},form:{username:"Kullanıcı Adı",usernamePlaceholder:"Kullanıcı adını girin",email:"E-posta",emailPlaceholder:"kullanici@example.com",password:"Parola",passwordPlaceholder:"Parolayı girin",confirmPassword:"Parolayı Onayla",confirmPasswordPlaceholder:"Parolayı onayla",newPasswordPlaceholder:"Yeni parolayı girin",confirmNewPasswordPlaceholder:"Yeni parolayı onayla",leaveBlankToKeep:"mevcut olanı korumak için boş bırakın",groups:"Gruplar",optional:"isteğe bağlı",autoGeneratedPassword:"Güvenli bir parola otomatik olarak oluşturulacak ve kullanıcıya e-posta ile gönderilecek.",passwordManagedByAdvancedAuth:'Parola Gelişmiş Kimlik Doğrulama tarafından yönetilir. Kullanıcıya e-posta yoluyla yeni bir parola göndermek için "Parolayı Sıfırla"yı kullanın.',resetPassword:"Parolayı Sıfırla",resettingPassword:"Parola Sıfırlanıyor..."},deleteModal:{title:"Kullanıcıyı Sil",message:"Bu kullanıcıyı silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.",confirm:"Kullanıcıyı Sil"}},streamOverlay:{title:"Akış Bindirmesi",invalidPrinterId:"Geçersiz yazıcı ID'si",cameraStream:"Kamera akışı",progress:"İlerleme",eta:"ETA",printerIdle:"Yazıcı boşta",printerOffline:"Yazıcı çevrimdışı",status:{printing:"Yazdırılıyor",paused:"Duraklatıldı",finished:"Tamamlandı",failed:"Başarısız",idle:"Boşta",unknown:"Bilinmiyor"}},profiles:{title:"Profiller",subtitle:"Dilimleyici ön ayarlarını ve basınç ilerleme kalibrasyonlarını yönetin",tabs:{bambuCloud:"Bambu Cloud",orcaCloud:"Orca Cloud",local:"Yerel Profiller",kprofiles:"K-Profilleri"},orcaCloud:{connectedAs:"Bağlı kullanıcı",logout:"Bağlantıyı kes",noLogoutPermission:"Bağlantıyı kesme izniniz yok",noConnectPermission:"Orca Cloud'a bağlanma izniniz yok",retry:"Yeniden dene",back:"Farklı bir giriş yöntemi kullan",connect:{title:"Orca Cloud'a bağlan",description:"Dilimleyici profillerinizi Bambuddy ile senkronize etmek için Orca Cloud hesabınıza giriş yapın."},providers:{google:"Google ile giriş yap",apple:"Apple ile giriş yap",github:"GitHub ile giriş yap",email:"E-posta ve şifre ile giriş yap"},password:{title:"E-posta ve şifre ile giriş yap",email:"E-posta",emailPlaceholder:"sen@ornek.com",password:"Şifre",submit:"Giriş yap"},paste:{title:"Girişi tamamla",step1:"Yeni bir sekme Orca Cloud giriş sayfasıyla açıldı. Orca hesabınızla giriş yapın.",step2:`Tarayıcınız yüklenemeyen bir "localhost" URL'sine yönlendirilecektir. Bu beklenen bir durumdur — bize gereken URL budur.`,step3:"Tarayıcınızın adres çubuğundaki URL'nin tamamını kopyalayın ve aşağıya yapıştırın.",signInUrl:"Giriş sekmesi açılmadıysa bu URL'ye tıklayın:",label:"Geri çağrı URL'sini buraya yapıştırın",placeholder:"http://localhost:41172/callback?code=...&state=...",submit:"Bağlantıyı tamamla"},profiles:{title:"Orca Cloud profilleriniz ({{count}})",refresh:"Yenile",empty:"Orca Cloud hesabınızda henüz profil bulunamadı."},toast:{connected:"{{email}} olarak Orca Cloud'a bağlanıldı",disconnected:"Orca Cloud bağlantısı kesildi"},errors:{startFailed:"Orca Cloud giriş akışı başlatılamadı.",finishFailed:"Orca Cloud girişi tamamlanamadı.",passwordFailed:"Bu e-posta ve şifreyle giriş yapılamadı.",passwordEmpty:"Lütfen hem e-postanızı hem de şifrenizi girin.",emptyPaste:"Lütfen tarayıcınızdan geri çağrı URL'sini yapıştırın.",noCode:"Bu URL bir Orca Cloud geri çağrısına benzemiyor (code parametresi yok). Tam URL'yi adres çubuğundan kopyalayın."}},localProfiles:{title:"Yerel Profiller",subtitle:"OrcaSlicer'dan dilimleyici ön ayarlarını içe aktar ve yönet",import:"Profilleri İçe Aktar",importDesc:".bbscfg, .bbsflmt, .orca_filament, .zip veya .json dosyalarını buraya bırakın",importing:"İçe aktarılıyor...",search:"Yerel ön ayarlarda ara...",noPresets:"Henüz yerel ön ayar yok",noSearchResults:"Aramanızla eşleşen ön ayar yok",badge:"Yerel",edit:"Düzenle",delete:"Sil",cancel:"İptal",deleteConfirmTitle:"Ön Ayarı Sil",deleteConfirm:"Bu ön ayarı silmek istediğinizden emin misiniz? Bu geri alınamaz.",source:"Kaynak",inheritsFrom:"Miras alır",filamentType:"Tür",vendor:"Satıcı",compatiblePrinters:"Yazıcılar",nozzleTemp:"Nozul Sıcaklığı",cost:"Maliyet",density:"Yoğunluk",pressureAdvance:"Basınç İlerlemesi",filament:"Filament",process:"İşlem",printer:"Yazıcı",toast:{importSuccess:"{{count}} ön ayar içe aktarıldı",importSkipped:"{{count}} ön ayar atlandı (yinelenenler)",importError:"İçe aktarma sırasında {{count}} hata",deleted:"Ön ayar silindi",updated:"Ön ayar güncellendi"}},connectedAs:"Bağlı kullanıcı",logout:"Çıkış",noLogoutPermission:"Çıkış yapma izniniz yok",failedToLoad:"Profiller yüklenemedi",retry:"Yeniden dene",time:{justNow:"Az önce",minsAgo:"{{count}}dk önce",hoursAgo:"{{count}}sa önce",daysAgo:"{{count}}g önce"},toast:{loggedOut:"Çıkış yapıldı"},login:{title:"Bambu Cloud'a Bağlan",subtitle:"Dilimleyici ön ayarlarınızı cihazlar arasında senkronize edin",email:"E-posta",password:"Parola",region:"Bölge",regionGlobal:"Global",regionChina:"Çin",verificationCode:"Doğrulama Kodu",totpCode:"Doğrulayıcı Kodu",checkEmail:"E-postanızı ({{email}}) 6 haneli kod için kontrol edin",enterTotpHint:"Doğrulayıcı uygulamanızdan 6 haneli kodu girin",accessToken:"Erişim Belirteci",accessTokenHint:"Bambu Cloud erişim belirtecinizi yapıştırın. Çin bölgesi hesapları bu yolu kullanmalıdır (telefon bağımlı — e-posta girişi kullanılamaz). MakerWorld çerezlerinden belirteci nasıl alacağınız için wiki'ye bakın.",back:"Geri",loginButton:"Giriş",verifyButton:"Doğrula",setTokenButton:"Belirteç Ayarla",useToken:"Erişim belirteci kullan",useEmail:"E-posta ile giriş yap",toast:{loggedIn:"Başarıyla giriş yapıldı",codeSent:"Doğrulama kodu e-postanıza gönderildi",enterTotp:"Doğrulayıcı uygulamanızdan kod girin",tokenSet:"Belirteç başarıyla ayarlandı"}},presets:{myPreset:"Ön ayarım (düzenlenebilir)",duplicate:"Çoğalt",editable:"Düzenlenebilir",failedToLoadDetails:"Ön ayar ayrıntıları yüklenemedi",deleteConfirm:"Bu ön ayar silinsin mi?",deleteWarning:`Bu, "{{name}}" ön ayarını Bambu Cloud'dan kalıcı olarak silecek. Bu geri alınamaz.`,noDuplicatePermission:"Ön ayarları çoğaltma izniniz yok",noEditPermission:"Ön ayarları düzenleme izniniz yok",noDeletePermission:"Ön ayarları silme izniniz yok",types:{filament:"Filament ön ayarı",printer:"Yazıcı ön ayarı",process:"İşlem ön ayarı"},toast:{deleted:"Ön ayar silindi",created:"Ön ayar oluşturuldu",updated:"Ön ayar güncellendi",duplicated:"Ön ayar çoğaltıldı",fieldAdded:'"{{key}}" alanı eklendi',exported:"Ön ayar dışa aktarıldı"},baseLabel:"Taban: {{name}}",currentLabel:"Mevcut: {{name}}",newPreset:"Yeni Ön Ayar",editPreset:"Ön Ayarı Düzenle",duplicatePreset:"Ön Ayarı Çoğalt",createNewPreset:"Yeni Ön Ayar Oluştur",customizeSettings:"Yeni ön ayarınız için ayarları özelleştirin",compareWithBase:"Taban ön ayarla karşılaştır",compare:"Karşılaştır",basePreset:"Taban Ön Ayar",selectBasePreset:"Taban ön ayar seç...",presetName:"Ön Ayar Adı",myCustomPreset:"Özel ön ayarım",inheritsFrom:"Miras alır",dropJsonToImport:"İçe aktarmak için JSON bırakın",tabs:{common:"Ortak",allFields:"Tüm Alanlar"},availableFields:"Kullanılabilir Alanlar",searchFieldsPlaceholder:"Alanlarda ara...",noMatchingFields:"Eşleşen alan yok",allFieldsAdded:"Tüm alanlar eklendi",addCustomField:"Özel alan ekle",yourOverrides:"Geçersiz Kılmalarınız",noOverridesYet:"Henüz geçersiz kılma yok",clickFieldsToAdd:"Eklemek için soldaki alanlara tıklayın",saveAsTemplate:"Şablon olarak kaydet",jsonTip:"İpucu: Ayarları içe aktarmak için bu modalin herhangi bir yerine .json dosyasını sürükleyip bırakın"},cloudView:{searchPlaceholder:"Ön ayarlarda ara...",templates:"Şablonlar",refresh:"Yenile",newPreset:"Yeni Ön Ayar",clearFilters:"Filtreleri temizle",compareMode:"Karşılaştırma Modu",selectAnotherPreset:"Başka bir {{type}} ön ayarı seç",clickTwoPresets:"Karşılaştırmak için aynı türden iki ön ayara tıklayın",selectFirst:"1. İlkini seç",selectSecond:"2. İkincisini seç",compareNow:"Şimdi Karşılaştır",lastSynced:"Son senkronizasyon:",showingCount:"{{total}} ön ayardan {{showing}} tanesi gösteriliyor",noPresetsFound:"Ön ayar bulunamadı",columns:{filament:"Filament",process:"İşlem",printer:"Yazıcı"},noFilamentPresets:"Filament ön ayarı yok",noProcessPresets:"İşlem ön ayarı yok",noPrinterPresets:"Yazıcı ön ayarı yok",filters:{type:"Tür",owner:"Sahip",printer:"Yazıcı",nozzle:"Nozul",filament:"Filament",layer:"Katman",all:"Tümü",myPresets:"Ön Ayarlarım",builtIn:"Yerleşik",process:"İşlem"},noTemplatesPermission:"Şablonları yönetme izniniz yok",noRefreshPermission:"Profilleri yenileme izniniz yok",noCreatePermission:"Ön ayar oluşturma izniniz yok"},templates:{title:"Hızlı Şablonlar",noTemplates:"Henüz şablon yok",createFirst:"Ön ayar düzenleyicisinden şablonlar oluşturun",typeFilter:"Tür:",deleteTitle:"Şablonu Sil",deleteWarning:"Bu işlem geri alınamaz",deleteConfirm:'"{{name}}" silmek istediğinizden emin misiniz?',namePlaceholder:"Şablon adı",descriptionPlaceholder:"Açıklama",settingsJson:"Ayarlar (JSON)",fieldsCount:"{{count}} alan",shownInModals:"Modallerde gösterilir",hiddenInModals:"Modallerde gizli",apply:"Uygula",toast:{deleted:"Şablon silindi",updated:"Şablon güncellendi",created:"Şablon oluşturuldu",applied:"Şablon uygulandı"}}},support:{debugLoggingActive:"Hata ayıklama kaydı aktif",manageLogs:"Yönet",collectItem7:"Yazıcı bağlantısı ve firmware sürümleri",collectItem8:"Entegrasyon durumu (Spoolman, MQTT, HA)",collectItem9:"Ağ arayüzleri (yalnızca alt ağlar)",collectItem10:"Python paket sürümleri",collectItem11:"Veritabanı sağlık kontrolleri",collectItem12:"Docker ortam ayrıntıları",bundleGenerating:"Paket oluşturuluyor...",bundleStepConnection:"Yazıcı bağlantı kontrolleri çalıştırılıyor",bundleStepVirtualPrinters:"Sanal yazıcı kurulum kontrolleri çalıştırılıyor",bundleStepLogScan:"Son günlüklerde bilinen sorunlar taranıyor",bundleStepBuild:"Destek paketi ZIP oluşturuluyor"},fileManager:{title:"Dosya Yöneticisi",subtitle:"Baskı dosyalarınızı organize edin ve yönetin",uploadFiles:"Dosya Yükle",newFolder:"Yeni Klasör",folderName:"Klasör Adı",folderNamePlaceholder:"örn., Fonksiyonel Parçalar",renameFile:"Dosyayı Yeniden Adlandır",renameFolder:"Klasörü Yeniden Adlandır",invalidFilenameChar:'Baskı dosya adlarında "{{char}}" karakterine izin verilmiyor. Yazıcının SD kartı şu karakterleri reddeder: < > : " / \\ | ? *',moveFiles:"{{count}} Dosyayı Taşı",rootNoFolder:"Kök (Klasör Yok)",current:"mevcut",linkFolder:"Klasörü Bağla",linkFolderDescription:'Hızlı erişim için "{{name}}" klasörünü bir projeye veya arşive bağla.',project:"Proje",archive:"Arşiv",noProjectsFound:"Proje bulunamadı",noArchivesFound:"Arşiv bulunamadı",unlink:"Bağlantıyı Kaldır",link:"Bağla",dragDropFiles:"Dosyaları buraya sürükleyip bırakın",dropFilesHere:"Dosyaları buraya bırakın",orClickToBrowse:"veya göz atmak için tıklayın",allFileTypesSupported:"Tüm dosya türleri desteklenir. ZIP dosyaları çıkarılacak.",zipFilesDetected:"ZIP dosyaları algılandı",zipExtractOptions:"ZIP dosyaları çıkarılacak. Klasör yapısını nasıl yöneteceğinizi seçin:",preserveZipStructure:"ZIP'ten klasör yapısını koru",createFolderFromZip:"ZIP dosya adından klasör oluştur",stlThumbnailGeneration:"STL küçük resim oluşturma",zipMayContainStl:"ZIP dosyaları STL dosyaları içerebilir. Küçük resimler çıkarma sırasında oluşturulabilir.",thumbnailsCanBeGenerated:"STL dosyaları için küçük resimler oluşturulabilir. Büyük modellerin işlenmesi daha uzun sürebilir.",generateThumbnailsForStl:"STL dosyaları için küçük resim oluştur",threemfDetected:"3MF dosyaları algılandı",threemfExtractionInfo:"Yazıcı modeli, malzeme, renk ve baskı ayarları 3MF dosyalarından otomatik olarak çıkarılacak.",willBeExtracted:"Çıkarılacak",filesExtracted:"{{count}} dosya çıkarıldı",uploadComplete:"Yükleme tamamlandı: {{succeeded}} başarılı",uploadFailed:"Yükleme başarısız",zipFilesFailed:"{{count}} dosya başarısız",uploading:"Yükleniyor...",changeLink:"Bağlantıyı Değiştir...",linkTo:"Şuna bağla...",linkToProjectOrArchive:"Projeye veya arşive bağla",addToQueue:"Kuyruğa Ekle",schedulePrint:"Zamanla",generateThumbnail:"Küçük Resim Oluştur",generateThumbnails:"Küçük Resimler Oluştur",generateThumbnailsForMissing:"Eksik olan STL dosyaları için küçük resimler oluştur",gridView:"Izgara görünümü",listView:"Liste görünümü",lowDiskSpaceWarning:"Düşük disk alanı uyarısı",lowDiskSpaceDetails:"Toplam {{total}} alandan yalnızca {{free}} boş. Eşik ayarlarda {{threshold}} GB olarak ayarlanmış.",files:"Dosyalar",folders:"Klasörler",size:"Boyut",free:"Boş",allFiles:"Tüm Dosyalar",allExternal:"Harici",externalIsEmpty:"Harici dosya yok",externalEmptyDescription:"Bağlı harici klasörlerinizdeki dosyalar burada görünecek.",wrap:"Sar",enableTextWrapping:"Metin sarmayı etkinleştir",disableTextWrapping:"Metin sarmayı devre dışı bırak",collapse:"Daralt",collapseFoldersByDefault:"Klasörleri varsayılan olarak daralt",expandFoldersByDefault:"Klasörleri varsayılan olarak genişlet",dragToResizeTooltip:"Yeniden boyutlandırmak için sürükleyin, sıfırlamak için çift tıklayın",searchFiles:"Dosyalarda ara...",allTypes:"Tüm türler",prints:"Baskılar",ascending:"Artan",descending:"Azalan",resultsCount:"{{total}} dosyadan {{showing}} tanesi",selectAll:"Tümünü Seç",deselectAll:"Seçimi Kaldır",selected:"{{count}} seçildi",adding:"Ekleniyor...",loadingFiles:"Dosyalar yükleniyor...",folderIsEmpty:"Klasör boş",noFilesYet:"Henüz dosya yok",folderEmptyDescription:"Başlamak için bu klasöre dosya yükleyin veya dosyaları taşıyın.",noFilesDescription:"Baskıyla ilgili dosyalarınızı organize etmeye başlamak için dosya yükleyin.",noMatchingFiles:"Eşleşen dosya yok",noMatchingFilesDescription:"Mevcut arama veya filtre kriterlerinizle eşleşen dosya yok.",clearFilters:"Filtreleri temizle",printedCount:"{{count}}x yazdırıldı",uploadedBy:"Yükleyen",deleteFolder:"Klasörü Sil",deleteFile:"Dosyayı Sil",deleteFilesCount:"{{count}} Dosya Sil",deleteFolderConfirm:"Bu klasörü silmek istediğinizden emin misiniz? İçindeki tüm dosyalar da silinecek.",deleteFileConfirm:"Bu dosyayı silmek istediğinizden emin misiniz?",deleteFilesConfirm:"{{count}} seçili dosyayı silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.",deleting:"Siliniyor...",noPermissionRenameFolder:"Klasörleri yeniden adlandırma izniniz yok",noPermissionLinkFolder:"Klasörleri bağlama izniniz yok",noPermissionDeleteFolder:"Klasörleri silme izniniz yok",noPermissionPrint:"Yazdırma izniniz yok",noPermissionAddToQueue:"Kuyruğa ekleme izniniz yok",noPermissionSlice:"Dosyaları dilimleme izniniz yok",noPermissionDownload:"Dosyaları indirme izniniz yok",noPermissionRenameFile:"Bu dosyayı yeniden adlandırma izniniz yok",noPermissionGenerateThumbnail:"Küçük resim oluşturma izniniz yok",noPermissionDeleteFile:"Bu dosyayı silme izniniz yok",noPermissionCreateFolder:"Klasör oluşturma izniniz yok",noPermissionUpload:"Dosya yükleme izniniz yok",noPermissionMoveFiles:"Dosyaları taşıma izniniz yok",noPermissionDeleteFiles:"Dosyaları silme izniniz yok",linkExternal:"Harici Bağla",linkExternalFolder:"Harici Klasör Bağla",linkExternalFolderDescription:"Bir ana bilgisayar dizinini (NAS, USB, ağ paylaşımı) Dosya Yöneticisine bağla. Dosyalar kopyalanmaz — orijinal yoldan doğrudan erişilir.",externalFolderNamePlaceholder:"örn., NAS Baskıları",externalPath:"Ana Bilgisayar Yolu",externalPathHelp:"Docker ana bilgisayarındaki dizinin mutlak yolu. Konteynere bind-mount edilmiş olmalıdır.",readOnly:"Salt Okunur",readOnlyHelp:"yüklemeleri ve silmeleri engeller",showHiddenFiles:"Gizli dosyaları göster (nokta dosyaları)",externalFolder:"Harici Klasör",scanFolder:"Tara",toast:{folderCreated:"Klasör oluşturuldu",folderDeleted:"Klasör silindi",fileDeleted:"Dosya silindi",filesDeleted:"{{count}} dosya silindi",filesMoved:"Dosyalar taşındı",folderLinked:"Klasör bağlandı",folderUnlinked:"Klasör bağlantısı kaldırıldı",externalFolderLinked:"Harici klasör bağlandı ve tarandı",folderScanned:"Tarama tamamlandı: {{added}} eklendi, {{removed}} kaldırıldı",addedToQueue:"Kuyruğa {{count}} dosya eklendi",addedToQueuePartial:"{{added}} dosya eklendi, {{failed}} başarısız",failedToAddToQueue:"Dosyalar eklenemedi: {{error}}",fileRenamed:"Dosya yeniden adlandırıldı",folderRenamed:"Klasör yeniden adlandırıldı",thumbnailsGenerated:"{{count}} küçük resim oluşturuldu",thumbnailsGeneratedPartial:"{{succeeded}} küçük resim oluşturuldu, {{failed}} başarısız",noStlMissingThumbnails:"Küçük resmi eksik STL dosyası yok",failedToGenerateThumbnails:"Küçük resimler oluşturulamadı: {{error}}",thumbnailGenerated:"Küçük resim oluşturuldu",failedToGenerateThumbnail:"Küçük resim oluşturulamadı: {{error}}"}},projects:{title:"Projeler",subtitle:"3D baskı projelerinizi organize edin ve takip edin",newProject:"Yeni Proje",editProject:"Projeyi Düzenle",deleteProject:"Projeyi Sil",projectName:"Proje Adı",description:"Açıklama",noProjects:"Henüz proje yok",noProjectsFiltered:"{{status}} proje yok",noProjectsFilteredHelp:"Hiç {{status}} projeniz yok. Projeler durumları değiştiğinde burada görünecek.",createFirst:"İlgili baskıları organize etmeye, ilerlemeyi takip etmeye ve yapımlarınızı yönetmeye başlamak için ilk projenizi oluşturun.",createFirstButton:"İlk Projenizi Oluşturun",create:"Oluştur",files:"Dosyalar",prints:"Baskılar",plates:"plaka",parts:"parça",lastModified:"Son Değiştirme",deleteConfirm:"Bu projeyi silmek istediğinizden emin misiniz? Arşivler ve kuyruk öğelerinin bağlantısı kaldırılacak ancak silinmeyecek.",addFiles:"Dosya Ekle",removeFile:"Dosyayı Kaldır",viewDetails:"Detayları Görüntüle",namePlaceholder:"örn., Voron 2.4 Yapımı",descriptionPlaceholder:"İsteğe bağlı açıklama...",urlLabel:"URL",urlPlaceholder:"https://makerworld.com/...",urlInvalid:"URL http:// veya https:// ile başlamalı",openExternalUrl:"Proje URL'sini aç",coverImageLabel:"Kapak fotoğrafı",coverImageAlt:"Proje kapak fotoğrafı",coverImageUpload:"Yükle",coverImageReplace:"Değiştir",coverImageRemove:"Kaldır",color:"Renk",targetPlates:"Hedef Plakalar",targetPlatesPlaceholder:"örn., 25",targetPlatesHelp:"Baskı işi sayısı",targetParts:"Hedef Parçalar",targetPartsPlaceholder:"örn., 150",targetPartsHelp:"Gereken toplam nesne",tagsLabel:"Etiketler (virgülle ayrılmış)",tagsPlaceholder:"örn., voron, fonksiyonel, hediye",dueDate:"Son Tarih",priority:"Öncelik",priorityLow:"Düşük",priorityNormal:"Normal",priorityHigh:"Yüksek",priorityUrgent:"Acil",statusActive:"Aktif",statusCompleted:"Tamamlandı",statusArchived:"Arşivlendi",done:"Tamamlandı",completed:"tamamlandı",failed:"başarısız",inQueue:"kuyrukta",noPrintsYet:"Henüz baskı yok",printJobs:"Baskı işleri (plakalar)",partsPrinted:"Yazdırılan parçalar",failedParts:"Başarısız parçalar",import:"İçe Aktar",export:"Dışa Aktar",importProject:"Projeyi içe aktar",exportAll:"Tüm projeleri dışa aktar",loading:"Projeler yükleniyor...",noEditPermission:"Projeleri düzenleme izniniz yok",noDeletePermission:"Projeleri silme izniniz yok",noCreatePermission:"Proje oluşturma izniniz yok",noImportPermission:"Projeleri içe aktarma izniniz yok",noExportPermission:"Projeleri dışa aktarma izniniz yok",toast:{created:"Proje oluşturuldu",updated:"Proje güncellendi",deleted:"Proje silindi",imported:"Proje içe aktarıldı",multipleImported:"{{count}} proje içe aktarıldı",importFailed:"İçe aktarma başarısız",exported:"Projeler dışa aktarıldı (yalnızca meta veriler)"}},projectDetail:{notFound:"Proje bulunamadı",backToProjects:"Projelere Dön",export:"Dışa Aktar",exportProject:"Projeyi dışa aktar",noExportPermission:"Projeleri dışa aktarma izniniz yok",noEditPermission:"Projeleri düzenleme izniniz yok",partOf:"Şunun parçası:",priorityLabel:"Öncelik:",noPrints:"Bu projede henüz baskı yok",status:{active:"Aktif",completed:"Tamamlandı",archived:"Arşivlendi"},priority:{low:"Düşük",normal:"Normal",high:"Yüksek",urgent:"Acil"},dueDate:{overdue:"Gecikmiş",today:"Bugün teslim",daysLeft:"{{count}} gün kaldı"},progress:{platesProgress:"Plaka İlerlemesi",partsProgress:"Parça İlerlemesi",printJobs:"baskı işi",parts:"parça",percentComplete:"%{{percent}} tamamlandı",remaining:"{{count}} kaldı"},stats:{printJobs:"Baskı İşleri",total:"toplam",failed:"{{count}} başarısız",partsPrinted:"{{count}} parça yazdırıldı",printTime:"Baskı Süresi",filamentUsed:"Kullanılan Filament"},cost:{title:"Maliyet Takibi",filamentCost:"Filament Maliyeti",energy:"Enerji",totalCost:"Toplam Maliyet",total:"Toplam",includesBom:"BOM dahil",budget:"Bütçe",remaining:"Kalan"},subProjects:{title:"Alt projeler ({{count}})"},notes:{title:"Notlar",noEditPermission:"Notları düzenleme izniniz yok",placeholder:"Bu proje hakkında notlar ekleyin...",empty:"Henüz not yok. Not eklemek için Düzenle'ye tıklayın."},files:{title:"Dosyalar",linkFolders:"Dosya Yöneticisinden klasörleri bağla",forQuickAccess:"hızlı erişim için bu projeye.",fileCount:"{{count}} dosya",empty:"Bağlı klasör yok. Dosya Yöneticisine gidin ve bu projeye bir klasör bağlayın.",noFiles:"Bu klasörde dosya yok.",print:"Şimdi Yazdır",addToQueue:"Kuyruğa Ekle"},bom:{title:"Malzeme Listesi",acquired:"{{completed}}/{{total}} edinildi",showAll:"Tümünü göster",hideDone:"Tamamlananları gizle",addPart:"Parça Ekle",noAddPermission:"Parça ekleme izniniz yok",partNamePlaceholder:"Parça adı (örn., M3x8 vidalar)",partName:"Parça adı",qty:"Adet",price:"Fiyat ({{currency}})",sourcingUrlPlaceholder:"Kaynak URL'si (isteğe bağlı)",remarksPlaceholder:"Notlar (isteğe bağlı)",deletePart:"Parçayı Sil",deleteConfirm:'"{{name}}" silmek istediğinizden emin misiniz?',noUpdatePermission:"Parçaları güncelleme izniniz yok",noEditPermission:"Parçaları düzenleme izniniz yok",noDeletePermission:"Parçaları silme izniniz yok",totalCost:"Toplam maliyet:",empty:"Malzeme listesinde parça yok. Nelerin tedarik edilmesi gerektiğini takip etmek için donanım, elektronik veya diğer bileşenler ekleyin."},timeline:{title:"Etkinlik Zaman Çizelgesi",empty:"Henüz etkinlik yok."},template:{saveAsTemplate:"Şablon Olarak Kaydet",noCreatePermission:"Şablon oluşturma izniniz yok"},queue:{title:"Kuyruk",viewAll:"Tümünü görüntüle",printing:"{{count}} yazdırılıyor",queued:"{{count}} kuyrukta"},prints:{title:"Baskılar ({{count}})"},toast:{projectUpdated:"Proje güncellendi",partAdded:"Parça eklendi",partRemoved:"Parça kaldırıldı",exportFailed:"Dışa aktarma başarısız",projectExported:"Proje dışa aktarıldı",templateCreated:"Şablon oluşturuldu"}},system:{title:"Sistem Bilgisi",version:"Sürüm",uptime:"Çalışma Süresi",cpuUsage:"CPU Kullanımı",memoryUsage:"Bellek Kullanımı",diskUsage:"Disk Kullanımı",networkInfo:"Ağ Bilgisi",logs:"Günlükler",debugMode:"Hata Ayıklama Modu",enableDebug:"Hata Ayıklama Kaydını Etkinleştir",disableDebug:"Hata Ayıklama Kaydını Devre Dışı Bırak",downloadLogs:"Günlükleri İndir",clearLogs:"Günlükleri Temizle",dockerInfo:"Docker Bilgisi",containerName:"Konteyner Adı",imageName:"İmaj Adı",platform:"Platform",architecture:"Mimari"},library:{title:"Filament Kütüphanesi",addFilament:"Filament Ekle",editFilament:"Filamenti Düzenle",deleteFilament:"Filamenti Sil",vendor:"Satıcı",material:"Malzeme",color:"Renk",kFactor:"K Faktörü",temperature:"Sıcaklık",noFilaments:"Kütüphanede filament yok",deleteConfirm:"Bu filamenti silmek istediğinizden emin misiniz?",importFromPrinter:"Yazıcıdan İçe Aktar",exportToFile:"Dosyaya Dışa Aktar"},slice:{title:"Modeli dilimle",action:"Dilimle",actionAll:"Tüm {{count}} plakayı dilimle",actionAllTitle:"Her plakayı tek bir çok plakalı çıktıya dilimle (tek arşiv). Filament seçimi projenin tanımladığı her yuvayı kapsar.",allPlatesToggle:"Tüm {{count}} plakayı dilimle",slicing:"Dilimleniyor…",printer:"Yazıcı profili",process:"İşlem profili",filament:"Filament profili",filamentSlot:"Filament {{index}} ({{type}})",selectPreset:"— Bir ön ayar seçin —",loadingPresets:"Ön ayarlar yükleniyor…",analyzingPlateFilaments:"Plaka filamentleri analiz ediliyor…",analyzingPlateFilamentsHint:"Bu plakanın hangi AMS yuvalarını kullandığını keşfetmek için bir önizleme dilimleme çalıştırılıyor. Sonradan önbelleğe alınır — yeniden açma anlıktır.",previewToast:"{{name}} analiz ediliyor — {{elapsed}}",previewWithProgress:"{{name}} analiz ediliyor — {{stage}} (%{{percent}}) — {{elapsed}}",notUsedByPlate:"— bu plaka tarafından kullanılmıyor",noPresetsForSlot:"Kullanılabilir ön ayar yok",otherPrinters:"Diğer yazıcılar",presetsLoadFailed:"Ön ayarlar yüklenemedi. Önce içe aktarmak için Ayarlar → Profiller'i açın.",refreshPresets:"Yenile",refreshPresetsTitle:"Ön ayarları yenile — en güncel bulut ve paketli listeleri getir (Bambu Studio veya Bambu Handy'de bir ön ayar sildikten sonra kullanın)",allPresetsRequired:"Tüm ön ayarlar seçilmelidir",bundle:"Dilimleyici paketi",bundleNone:"— Hiçbiri (ön ayarları ayrı ayrı seçin) —",bundleAllRequired:"Paket işlemi ve her filament yuvası seçilmelidir",enqueuing:"Dilimleme işi gönderiliyor…",queued:"Kuyrukta…",failed:"Dilimleme başarısız. Dilimleyici yardımcı bileşen günlüklerini kontrol edin.",startedToast:"{{name}} arka planda dilimleniyor…",queuedToast:"Kuyrukta: {{name}} — {{elapsed}}",runningToast:"{{name}} dilimleniyor — {{elapsed}}",runningWithProgress:"{{name}} — {{stage}} (%{{percent}}) — {{elapsed}}",runningWithProgressMultiPlate:"{{plateCount}}/{{plateIndex}} plaka • {{name}} — {{stage}} (%{{percent}}) — {{elapsed}}",completedToast:"{{name}} dilimlendi",failedTitle:"Dilimleme başarısız",failedToast:"{{name}} dilimleme başarısız: {{detail}}",tier:{local:"İçe aktarılmış",cloud:"Bambu Cloud",orcaCloud:"Orca Cloud",standard:"Standart"},cloud:{notAuthenticated:"Bulut ön ayarlarınızı görmek için Bambu Cloud'a giriş yapın (Ayarlar → Profiller → Bambu Cloud).",expired:"Bambu Cloud oturumu süresi doldu — bulut ön ayarlarınızı yenilemek için tekrar giriş yapın.",unreachable:"Bambu Cloud şu anda erişilemez. Yerel ve standart ön ayarlar hâlâ çalışıyor."},orcaCloud:{notAuthenticated:"Orca ön ayarlarınızı görmek için Orca Cloud'a giriş yapın (Profiller → Orca Cloud).",expired:"Orca Cloud oturumu sona erdi — Orca ön ayarlarınızı yenilemek için tekrar giriş yapın.",unreachable:"Orca Cloud şu anda erişilemez. Diğer ön ayarlar çalışmaya devam ediyor."},bedType:{label:"Baskı plakası",auto:"Otomatik (işlem ön ayarı kullan)",coolPlate:"Soğuk Plaka",coolPlateSuperTack:"Soğuk Plaka SuperTack",engineering:"Mühendislik Plakası",highTemp:"Yüksek Sıcaklık Plakası",texturedPEI:"Dokulu PEI Plakası",smoothPEI:"Düz PEI Plakası"}},spoolman:{title:"Spoolman Entegrasyonu",enabled:"Spoolman Etkin",url:"Spoolman URL",connected:"Bağlı",disconnected:"Bağlı Değil",testConnection:"Bağlantıyı Test Et",sync:"Senkronize Et",syncing:"Senkronize ediliyor...",lastSync:"Son Senkronizasyon",linkToSpoolman:"Spoolman'a Bağla",openInSpoolman:"Spoolman'da Aç",unlinkSpool:"Makara Bağlantısını Kaldır",unlinkConfirmTitle:"Makara Atamasını Kaldır?",unlinkConfirmMessage:"Bu, makarayı bu yuvadan kaldıracak. Makara verisinin kendisi değişmeyecek.",selectSpool:"Makara Seç",noUnlinkedSpools:"Atanmamış makara yok",linkSuccess:"Makara başarıyla atandı",linkFailed:"Makara atanamadı",unlinkSuccess:"Makara ataması başarıyla kaldırıldı",unlinkFailed:"Makara ataması kaldırılamadı",linkedSpool:"Atanan makara",spoolId:"Makara ID",fillSourceLabel:"(Spoolman)",weight:"Ağırlık",remaining:"Kalan",disableWeightSync:"AMS Tahmini Ağırlık Senkronizasyonunu Devre Dışı Bırak",disableWeightSyncDesc:"AMS tahminlerinden kalan kapasiteyi güncelleme. AMS yüzde tabanlı tahminler yerine Spoolman'ın kullanım takibini tercih ediyorsanız bunu kullanın. Yeni makaralar yine de başlangıç ağırlığı olarak AMS tahminini kullanacak.",reportPartialUsage:"Başarısız Baskılar için Kısmi Kullanımı Bildir",reportPartialUsageDesc:"Bir baskı başarısız olduğunda veya iptal edildiğinde, katman ilerlemesine göre o noktaya kadar kullanılan tahmini filamenti bildir."},inventory:{title:"Makara Envanteri",subtitle:"Makaralarınızı yönetin",spoolmanMixedContentTitle:"Spoolman HTTPS üzerinden yüklenemiyor — tarayıcınız tarafından karışık içerik engellendi",spoolmanMixedContentBody:"Bambuddy HTTPS üzerinden sunuluyor (ters proxy'niz aracılığıyla), ancak Spoolman URL'niz hâlâ düz HTTP. Tarayıcılar güvenlik için karışık içeriği engeller, bu nedenle gömülü Spoolman arayüzü oluşturulamaz. Bunun çalışması için Spoolman'in HTTPS üzerinden erişilebilir olması gerekiyor.",spoolmanMixedContentFixReverseProxy:"Spoolman'i Bambuddy ile aynı ters proxy'nin (Traefik / Nginx / Caddy) arkasına HTTPS ile koyun, ardından Ayarlardaki Spoolman URL'sini yeni HTTPS adresine güncelleyin.",spoolmanMixedContentFixOpenNewTab:"Geçici bir çözüm olarak, Spoolman'i HTTP üzerinden yeni bir tarayıcı sekmesinde açın — karışık içerik kuralları yalnızca gömülü çerçevelere uygulanır, bu nedenle bağımsız bir sekme yine çalışır.",spoolmanOpenInNewTab:"Spoolman'i yeni sekmede aç",labels:{title:"Makara etiketleri yazdır",selectedCount:"{{count}} seçildi",pickSpools:"Hangi makaralar için etiket yazdırılacağını seçin:",searchPlaceholder:"Ad, marka veya #ID ara",filterByMaterial:"Malzeme:",allMaterials:"Tümü",selectVisible:"Görünen tümünü seç ({{count}})",deselectVisible:"Görünenleri seçimden kaldır",clearAll:"Tümünü temizle",noSpoolsToShow:"Gösterilecek makara yok. Filtrenizi ayarlayın ve tekrar deneyin.",noMatches:"Mevcut arama veya filtreyle eşleşen makara yok.",printOne:"Bu makara için etiket yazdır",printLabels:"Etiketleri yazdır…",bulkTitle:"Şu anda gösterilen {{count}} makaradan etiket yazdırılacak olanları seçin",noSpoolsTitle:"Etiketlenecek makara yok",error:"Etiketler oluşturulamadı: {{msg}}",sortBy:{label:"Sırala:",id:"ID'ye göre",color:"Renge göre"},templates:{amsHolderSmall:{label:"AMS tutucu — küçük (74 × 33 mm)",hint:"Sayfa başına tek etiket; MakerWorld model 752566 (AMS Filament Etiket Tutucu) yazdırılabilir etiketle eşleşir."},amsHolderLarge:{label:"AMS tutucu — büyük (75 × 55 mm)",hint:"Sayfa başına tek etiket; AMS Filament Etiket Tutucu'nun karton uçlu varyantına uyar. Numune, marka, malzeme, ID ve QR kod için yeterli yer."},box40x30:{label:"Kutu etiketi (40 × 30 mm)",hint:"Sayfa başına tek etiket; yaygın DK/Brother rulo boyutu, filament torbası ve depolama kutusu etiketleri için iyi."},box:{label:"Kutu etiketi (62 × 29 mm)",hint:"Sayfa başına tek etiket; Brother PT/QL ve Dymo küçük etiketleri için boyutlandırılmış."},averyL7160:{label:"Avery L7160 — A4 sayfa (38.1 × 63.5 mm × 21)",hint:"AB sayfa stoğu; A4 sayfa başına 21 etiket."},avery5160:{label:"Avery 5160 — US Letter sayfa (25.4 × 66.7 mm × 30)",hint:"ABD sayfa stoğu; Letter sayfası başına 30 etiket."}}},csv:{importButton:"CSV İçe Aktar",exportButton:"CSV Dışa Aktar",modalTitle:"CSV'den makara içe aktar",selectFile:"Bir CSV dosyası seçin veya buraya sürükleyin",dragHint:"Başlık: material (zorunlu), brand, subtype, color_name, rgba, …",parsing:"Dosya okunuyor…",previewError:"CSV dosyası okunamadı",validCount:"{{count}} geçerli",errorCount:"{{count}} hatalı",skippedCount:"{{count}} atlandı",colRow:"Satır",colStatus:"Durum",colColor:"Renk",colorResolved:"Renk katalogdan dolduruldu",colorCrossMaterial:"Renk farklı bir malzemeden alındı — katalogda tam eşleşme yok",duplicateExisting:"Bu malzeme, marka ve renkte bir makara zaten var — yine de yeni makara olarak içe aktarılacak",spoolmanHint:"Spoolman modunda Spoolman'ın yerleşik CSV içe/dışa aktarımını kullanın.",importValidRows:"{{count}} geçerli satırı içe aktar",noValidRows:"Geçerli satır yok",importing:"İçe aktarılıyor…",importSuccess:"{{count}} makara içe aktarıldı",importError:"İçe aktarma başarısız",exportError:"Dışa aktarma başarısız"},addSpool:"Makara Ekle",editSpool:"Makarayı Düzenle",copySpool:"Makarayı Kopyala",material:"Malzeme",selectMaterial:"Malzeme seç...",subtype:"Alt tür",brand:"Marka",searchBrand:"Marka ara...",useCustomBrand:'"{{brand}}" kullan',useCustomMaterial:"Özel malzeme kullan: {{material}}",colorName:"Renk Adı",colorNamePlaceholder:"Yeşim Beyazı, Ateş Kırmızısı...",color:"Renk",hexColor:"Hex Renk",pickColor:"Özel renk seç",labelWeight:"Etiket Ağırlığı",coreWeight:"Boş Makara Ağırlığı",searchSpoolWeight:"Makara ağırlığı ara...",weightUsed:"Kullanılan",currentWeight:"Kalan Ağırlık",measuredWeight:"Ölçülen Ağırlık",spoolName:"Makara",costPerKg:"kg başına maliyet",storageLocation:"Depolama Konumu",storageLocationPlaceholder:"örn. Raf A, Çekmece 1",openInInventory:"Envanterde Aç",measuredWeightError:"Ölçülen ağırlık {{min}}g ile {{max}}g arasında olmalı.",slicerFilament:"Dilimleyici Filamenti",slicerFilamentName:"Dilimleyici Ön Ayar Adı",slicerPreset:"Dilimleyici Ön Ayarı",searchPresets:"Filament ön ayarlarında ara...",selectedPreset:"Seçildi",noPresetsFound:"Ön ayar bulunamadı",tempOverrides:"Sıcaklık Geçersiz Kılmaları",note:"Not",notePlaceholder:"Bu makara hakkında ek notlar...",category:"Kategori",categoryPlaceholder:"örn. Üretim, Prototip, Müşteri A",categoryNone:"Kategorisiz",storageLocationNone:"Konum ayarlanmamış",lowStockThresholdOverride:"Düşük stok eşiği (bu makara)",lowStockThresholdOverrideHelp:"Global eşiği kullanmak için boş bırakın (%{{global}}).",clearRfid:"RFID Etiketini Temizle",rfidCleared:"RFID etiketi temizlendi",archive:"Arşivle",restore:"Geri Yükle",noSpools:"Henüz makara yok. Başlamak için ilk makaranızı ekleyin.",noAvailableSpools:"Kullanılabilir makara yok. Envanterinize bir makara ekleyin veya önce başka bir yuvadan atamayı kaldırın.",kProfiles:"K-Profilleri",addKProfile:"K-Profili Ekle",assignSpool:"Makara Ata",unassignSpool:"Atamayı Kaldır",assignSuccess:"Makara atandı ve AMS yuvası yapılandırıldı",assignPendingInsert:"Atandı. Makarayı yerleştirdiğinizde yuva yapılandırılacak.",assignFailed:"Makara atanamadı",selectSpool:"Bu yuvaya atamak için bir makara seçin",assigned:"Atandı",assigning:"Atanıyor...",searchSpools:"Makaralarda ara...",showAllSpools:"Tüm makaraları göster",spoolmanSpools:"Spoolman Makaraları",allMaterials:"Tüm Malzemeler",filterByBrand:"Markaya göre filtrele...",showArchived:"Arşivlenmişleri göster",quickAdd:"Hızlı Ekle (Stok)",quantity:"Miktar",stock:"Stok",configured:"Yapılandırıldı",spoolsCreated:"{{count}} makara oluşturuldu",spoolsPartiallyCreated:"{{total}} makaradan {{created}} tanesi oluşturuldu (bazıları başarısız)",spoolCreated:"Makara oluşturuldu",spoolUpdated:"Makara güncellendi",spoolDeleted:"Makara silindi",deepLinkSpoolNotFound:"Makara bulunamadı",deepLinkFetchFailed:"Makara yüklenemedi — tekrar deneyin",spoolArchived:"Makara arşivlendi",spoolRestored:"Makara geri yüklendi",kProfileSaveFailed:"K-profili ayarları kaydedilemedi",syncWeightSpoolNotFound:"Makara bulunamadı — silinmiş olabilir",syncWeightSpoolmanUnreachable:"Spoolman'a erişilemiyor — daha sonra tekrar deneyin",syncWeightFailed:"Ağırlık senkronize edilemedi",spoolmanUnreachable:"Spoolman erişilebilir değil — lütfen daha sonra tekrar deneyin",deleteSpoolNotFound:"Makara bulunamadı — zaten silinmiş olabilir",deleteFailed:"Makara silinemedi",archiveSpoolNotFound:"Makara bulunamadı — zaten silinmiş olabilir",archiveFailed:"Makara arşivlenemedi",restoreSpoolNotFound:"Makara bulunamadı — zaten silinmiş olabilir",restoreFailed:"Makara geri yüklenemedi",saveFailed:"Değişiklikler kaydedilemedi",tagClearFailed:"Etiket temizlenemedi",deleteConfirm:"Bu makarayı silmek istediğinizden emin misiniz? Bu geri alınamaz.",archiveConfirm:"Bu makarayı arşivlemek istediğinizden emin misiniz?",advancedSettings:"Gelişmiş Ayarlar",filamentInfoTab:"Filament Bilgisi",paProfileTab:"PA Profili",filamentInfo:"Filament",additional:"Ek",loadingPresets:"Bulut ön ayarları yükleniyor...",cloudConnected:"Bulut bağlı",cloudNotConnected:"Bulut bağlı değil (varsayılanlar kullanılıyor)",recentColors:"Son Kullanılan",searchColors:"Renklerde ara...",searchResults:"Arama sonuçları",allColors:"Tüm renkler",commonColors:"Yaygın renkler",showLess:"Daha az göster",showAll:"Tümünü göster",noColorsFound:"Aramanızla eşleşen renk yok",noResults:"Eşleşme bulunamadı",extraColorsLabel:"Ekstra renkler",extraColorsPlaceholder:"EC984C,#6CD4BC,A66EB9,D87694",extraColorsHint:"Virgülle ayrılmış 2 ile 8 arası hex durağı yapıştırın. Bir gradyan olarak görüntülenir.",extraColorsInvalid:"Geçersiz hex yok sayıldı: {{tokens}}",colorEffectLabel:"Efekt",colorEffect:{none:"Yok",sparkle:"Parıltı",wood:"Ahşap",marble:"Mermer",glow:"Parlama",matte:"Mat",silk:"İpek",galaxy:"Galaksi",rainbow:"Gökkuşağı",metal:"Metal",translucent:"Yarı saydam",gradient:"Gradyan",dualColor:"Çift Renk",triColor:"Üç Renk",multicolor:"Çok Renkli"},selectMaterialFirst:"Lütfen önce Filament Bilgisi sekmesinde bir malzeme seçin.",noPrintersConfigured:"Yapılandırılmış yazıcı yok. PA profillerini kullanmak için yazıcı ekleyin.",matchingFilter:"Eşleşen",anyBrand:"Herhangi marka",anyVariant:"Herhangi varyant",autoSelect:"Otomatik seç",matches:"eşleşme",match:"eşleşme",noMatches:"Eşleşme yok",connected:"Bağlı",offline:"Çevrimdışı",printerOffline:"Yazıcı çevrimdışı. Kalibrasyon profillerini görüntülemek için bağlanın.",noKProfilesMatch:"Seçilen filamentle eşleşen K-profili yok.",leftNozzle:"Sol Nozul",rightNozzle:"Sağ Nozul",profilesSelected:"kalibrasyon profili seçildi",totalInventory:"Toplam Envanter",totalConsumed:"Toplam Tüketim",byMaterial:"Malzemeye Göre",inPrinter:"Yazıcıda",lowStock:"Düşük Stok",sinceTracking:"Takip başladığından beri",resetConsumedCounter:"Sayacı sıfırla",resetConsumedCounterTooltip:"Bu makara için tüketilen gram sayacını sıfırla. Kalan ağırlık değişmez.",resetConsumedCounterConfirm:"Bu makaranın tüketilen gram sayacı 0'a sıfırlansın mı? Gelecekteki baskılar sıfırdan tekrar takip edilecek. Makaranın kendisi, kalan ağırlık hesaplaması ve ayarlarınız değiştirilmez.",resetAllConsumedCounters:"Tüm sayaçları sıfırla",resetAllConsumedCountersTooltip:"Her makarada tüketilen gram sayacını sıfırla. Kalan ağırlıklar değişmez.",resetAllConsumedCountersConfirm:`Tüm {{count}} makaradaki (arşivlenmişler dahil) tüketilen gram sayacı 0'a sıfırlansın mı? Bu, "Toplam Tüketim" istatistiğini temizler, böylece gelecekteki baskılar sıfırdan takip edilir. Makaralar ve kalan ağırlıklar değiştirilmez.`,consumedCounterReset:"Sayaç sıfırlandı",allConsumedCountersReset:"{{count}} makaranın sayacı sıfırlandı",resetConsumedCounterFailed:"Sayaç sıfırlanamadı",loadedInAms:"AMS/Ext'te Yüklü",remaining:"Kalan",weightCheck:"Ağırlık Kontrolü",lastWeighed:"Son tartım",neverWeighed:"Hiç tartılmadı",search:"Makaralarda ara...",showing:"Gösterilen",to:"-",of:"/",show:"Göster",spools:"makara",spool:"makara",page:"Sayfa",noSpoolsMatch:"Sonuç bulunamadı",noSpoolsMatchDesc:"Aradığınızı bulmak için aramanızı veya filtrelerinizi ayarlamayı deneyin.",active:"Aktif",archived:"Arşivlendi",all:"Tümü",used:"Kullanılmış",new:"Yeni",clearFilters:"Filtreleri temizle",table:"Tablo",cards:"Kartlar",net:"Net",groupSimilar:"Grupla",groupedSpools:"{{count}} aynı makara",groupedRows:"satır",columns:"Sütunlar",configureColumns:"Sütunları Yapılandır",configureColumnsDesc:"Sütunları yeniden sıralamak için sürükleyin veya okları kullanın. Göz simgesiyle görünürlüğü değiştirin.",visible:"görünür",reset:"Sıfırla",cancel:"İptal",applyChanges:"Değişiklikleri Uygula",moveUp:"Yukarı taşı",moveDown:"Aşağı taşı",hideColumn:"Sütunu gizle",showColumn:"Sütunu göster",linkToSpool:"Makaraya Bağla",tagLinked:"Etiket makaraya bağlandı",tagLinkFailed:"Etiket bağlanamadı",tagAlreadyLinked:"Etiket zaten başka bir makaraya bağlı",unknownTag:"Bilinmeyen RFID etiketi algılandı",usageHistory:"Kullanım Geçmişi",noUsageHistory:"Henüz kullanım kaydedilmedi",printName:"Baskı Adı",weightConsumed:"Tüketilen Ağırlık",clearHistory:"Temizle",historyCleared:"Kullanım geçmişi temizlendi",fillSourceLabel:"(Env)",lowStockThresholdError:"Eşik 0.1 ile 99.9 arasında olmalı",assignMismatchTitle:"Malzeme uyumsuzluğu",assignMismatchMessage:'Seçilen makara malzemesi "{{spoolMaterial}}", {{location}} için tepsi malzemesi "{{trayMaterial}}" ile eşleşmiyor. Yine de atansın mı?',assignMismatchConfirm:"Yine de Ata",assignPartialMismatchMessage:'Makara malzemesi "{{spoolMaterial}}", {{location}} konumundaki "{{trayMaterial}}" ile benzer ancak tam olarak eşleşmiyor. Devam etmek istiyor musunuz?',assignProfileMismatchMessage:'Makara profili "{{spoolProfile}}", {{location}} konumundaki tepsi profili "{{trayProfile}}" ile eşleşmiyor. Devam etmek istiyor musunuz?',assignReconfigureNote:"AMS yuvası, makaranın profilini kullanacak şekilde yeniden yapılandırılacak.",spoolmanFilamentCatalog:"Spoolman Filament Kataloğu",pickFromSpoolmanCatalog:"Spoolman kataloğundan seç…",spoolmanFilamentSelected:"Filament Spoolman kataloğundan seçildi",spoolmanFilamentUnlinked:"Filament katalog bağlantısı temizlendi",noSpoolmanFilaments:"Spoolman kataloğunda filament bulunamadı",spoolmanFilamentColorSwatch:"Filament rengi",spoolWeightManagedBySpoolman:"Boş makara ağırlığı Spoolman'de filament türü başına yönetilir",spoolmanCatalogLoadFailed:"Spoolman filament kataloğu yüklenemedi"},timelapse:{title:"Zaman Atlamalı Video",create:"Zaman Atlamalı Video Oluştur",download:"İndir",delete:"Sil",preview:"Önizleme",frameRate:"Kare Hızı",quality:"Kalite",processing:"İşleniyor...",noTimelapses:"Kullanılabilir zaman atlamalı video yok"},ams:{title:"AMS",slot:"Yuva",empty:"Boş",emptySlot:"Boş yuva",slotEmpty:"Boş",slotUnconfigured:"?",emptySlotReset:"Atanmış filament yok",unknown:"Bilinmiyor",humidity:"Nem",temperature:"Sıcaklık",filamentType:"Filament Türü",filamentColor:"Renk",remaining:"Kalan",history:"AMS Geçmişi",noHistory:"Geçmiş mevcut değil",configureSlot:"Yuvayı Yapılandır",externalSpool:"Harici Makara",profile:"Profil",kFactor:"K Faktörü",fill:"Doldur",configure:"Yapılandır",used:"kullanılan",remainingUnit:"kalan"},printModal:{title:"Baskıyı Başlat",selectPrinter:"Yazıcı Seç",selectPlate:"Plaka Seç",filamentMapping:"Filament Eşlemesi",totalCost:"Toplam maliyet:",slotRemainingShort:" - {{grams}}g kaldı",printSettings:"Baskı Ayarları",bedLeveling:"Tabla Seviyelendirme",flowCalibration:"Akış Kalibrasyonu",vibrationCalibration:"Titreşim Kalibrasyonu",layerInspection:"İlk Katman Denetimi",timelapse:"Zaman Atlamalı Video",startPrint:"Baskıyı Başlat",addToQueue:"Kuyruğa Ekle",cancel:"İptal",noPrintersAvailable:"Kullanılabilir yazıcı yok",printerBusy:"Yazıcı meşgul",printerOffline:"Yazıcı çevrimdışı",sameTypeDifferentColor:"Aynı tür, farklı renk",filamentTypeNotLoaded:"Filament türü yüklenmedi",openCalendar:"Takvimi aç",leftNozzle:"S",rightNozzle:"R",leftNozzleTooltip:"Sol nozul",rightNozzleTooltip:"Sağ nozul",filamentOverride:"Filament Geçersiz Kılma",filamentOverrideHint:"Model tabanlı atama için isteğe bağlı olarak filamentleri geçersiz kıl. Planlayıcı, orijinal 3MF değerleri yerine seçtiğiniz filamentlere göre eşleşecek.",originalFilament:"Orijinal",overrideWith:"Şununla geçersiz kıl",resetToOriginal:"Orijinale sıfırla",insufficientFilamentTitle:"Yeterli filament yok",insufficientFilamentMessage:"Bazı atanmış makaralarda bu baskının ihtiyaç duyduğundan daha az filament kaldı:",insufficientFilamentLine:"{{printer}} - {{slot}}: {{required}}g gerekli, {{remaining}}g kaldı",printAnyway:"Yine de yazdır",forceColorMatch:"Renk eşleşmesini zorla",staggerPrinterStarts:"Yazıcı başlangıçlarını kademelendir",staggerGroupSize:"Grup boyutu",staggerInterval:"Aralık (dk)",staggerPreview:"{{printers}} yazıcı → {{size}} kişilik {{groups}} grup, her {{interval}} dk'da bir başlatılıyor",staggerLastGroup:"son grup: {{count}}",staggerTotal:"toplam: {{minutes}} dk",staggerToPrinters:"{{count}} yazıcıya kademelendir",gcodeInjection:"Otomatik baskı G-kodu enjekte et"},backup:{includesEncryptionKey:"Yerel yedekler, yedek ZIP'nin kendi içinde tamamlanmış olması için MFA şifreleme anahtarı dosyasını (DATA_DIR/.mfa_encryption_key) içerir. ZIP'yi hassas olarak değerlendirin — dosyaya sahip olan herkes içinde saklanan OIDC istemci gizli anahtarlarını ve TOTP gizli anahtarlarını çözebilir.",title:"Yedekleme ve Geri Yükleme",createBackup:"Yedek Oluştur",restoreBackup:"Yedeği Geri Yükle",restoreDescription:"Tüm verileri bir yedek dosyasından değiştir",downloadBackup:"Yedeği İndir",uploadBackup:"Yedek Yükle",lastBackup:"Son Yedek",autoBackup:"Otomatik Yedekleme",backupNow:"Şimdi Yedekle",restoreWarning:"Uyarı: Bir yedeği geri yüklemek tüm mevcut verilerin üzerine yazacak.",includeArchives:"Arşivleri Dahil Et",includeSettings:"Ayarları Dahil Et",includeProfiles:"Profilleri Dahil Et",backupSuccess:"Yedek başarıyla oluşturuldu",restoreSuccess:"Yedek başarıyla geri yüklendi",backupFailed:"Yedekleme başarısız",restoreFailed:"Geri yükleme başarısız",restoreNote:"Geri yükleme sırasında Sanal Yazıcı durdurulacak",githubBackup:"Git Yedekleme",enabled:"Etkin",cloudLoginRequired:"Bambu Cloud girişi gerekli. GitHub yedeklemesini etkinleştirmek için Profiller → Bulut Profilleri altında giriş yapın.",cloudLoginRequiredShort:"Bulut girişi gerekli",githubDescription:"Yedekleme ve sürüm geçmişi için profillerinizi otomatik olarak özel bir GitHub deposuna senkronize et.",repoIsPrivate:"Depo özel — yedeklemek için güvenli.",repoIsPublicWarning:"Depo HERKESE AÇIK. Bambuddy yedekleri MQTT kimlik bilgilerini, Home Assistant belirteçlerini, Prometheus belirteçlerini, Bambu Cloud e-postanızı ve K-profilleri aracılığıyla yazıcı erişim kodlarını içerir. Sağlayıcınızın ayarlarında depoyu özel hale getirene kadar kaydetme engellenir.",repoVisibilityUnknown:"Depo görünürlüğü belirlenemedi. Bambuddy, özel olarak onaylanmamış hiçbir şeye yedekleme yapmayı reddeder; kaydetme engellenecek.",repositoryUrl:"Depo URL'si",repoUrlPlaceholderGitHub:"https://github.com/username/repo-name",repoUrlPlaceholderGitea:"https://gitea.example.com/username/repo-name",repoUrlPlaceholderForgejo:"https://forgejo.example.com/username/repo-name",repoUrlPlaceholderGitLab:"https://gitlab.com/username/repo-name",allowInsecureHttp:"Güvensiz HTTP'ye izin ver",allowInsecureHttpHint:"TLS olmadan özel ağlarda kendi barındırılan örnekler için etkinleştir",personalAccessToken:"Kişisel Erişim Belirteci",tokenSaved:"(kaydedildi)",enterNewToken:"Güncellemek için yeni belirteç girin",tokenHint:"Contents okuma/yazma izni olan ayrıntılı belirteç",branch:"Dal",provider:"Git Sağlayıcısı",providerGitHub:"GitHub",providerGitLab:"GitLab",providerGitea:"Gitea",providerForgejo:"Forgejo",manualOnly:"Yalnızca manuel",hourly:"Saatlik",daily:"Günlük",weekly:"Haftalık",includeInBackup:"Yedeğe dahil et",kProfiles:"K-Profilleri",kProfilesDescription:"Bağlı yazıcılardan basınç ilerleme kalibrasyonu",noPrintersConnected:"Bağlı yazıcı yok",printersConnected:"{{connected}}/{{total}} bağlı",cloudProfiles:"Bulut Profilleri",cloudProfilesDescription:"Bambu Cloud'dan filament, yazıcı ve işlem ön ayarları",appSettings:"Uygulama Ayarları",appSettingsDescription:"Bambuddy yapılandırması (tam veritabanı)",spoolInventory:"Makara Envanteri",spoolInventoryDescription:"Filament makaraları, kullanım geçmişi ve maliyet takibi",printArchives:"Baskı Arşivleri",printArchivesDescription:"Baskı geçmişi meta verileri (gcode/3MF dosyaları yok)",lastBackupAt:"Son yedek:",noBackupsYet:"Henüz yedek yok",next:"Sonraki:",startingBackup:"Yedekleme başlatılıyor...",test:"Test",enableBackup:"Yedeklemeyi Etkinleştir",testConnection:"Bağlantıyı Test Et",enterRepoUrl:"Depo URL'sini girin",enterRepoAndToken:"Depo URL'si ve erişim belirteci girin",repoRequired:"Depo URL'si gerekli",tokenRequired:"Erişim belirteci gerekli",githubBackupEnabled:"GitHub yedeklemesi etkinleştirildi",tokenUpdated:"Belirteç güncellendi",settingsSaved:"Ayarlar kaydedildi",failedToSave:"Kaydedilemedi: {{message}}",backupCompleteFiles:"Yedekleme tamamlandı - {{count}} dosya güncellendi",backupSkippedNoChanges:"Yedekleme atlandı - değişiklik yok",backupFailed2:"Yedekleme başarısız: {{message}}",clearedLogs:"{{count}} günlük temizlendi",failedToClearLogs:"Günlükler temizlenemedi: {{message}}",history:"Geçmiş",clear:"Temizle",date:"Tarih",status:"Durum",commit:"Commit",localBackup:"Yerel Yedekleme",localBackupDescription:"Veritabanı, arşivler, yüklemeler ve tüm dosyalar dahil Bambuddy verilerinizin tam bir yedeğini oluşturun.",downloadBackupLabel:"Yedeği İndir",completeBackupZip:"Tam yedek: veritabanı + tüm dosyalar (ZIP)",download:"İndir",preparingBackup:"Yedek hazırlanıyor...",creatingArchive:"Yedek arşivi oluşturuluyor... Büyük arşivler için bu biraz zaman alabilir.",downloadingFile:"Yedek dosyası indiriliyor...",backupDownloaded:"Yedek başarıyla indirildi",failedToCreateBackup:"Yedek oluşturulamadı: {{message}}",restore:"Geri Yükle",restoreReplacesAll:"Geri yükleme tüm verilerin yerine geçer.",restoreReplacesAllDetail:"Mevcut veritabanınız ve dosyalarınız tamamen değiştirilecek. Geri yüklemeden sonra yeniden başlatma gerekli.",restoreConfirmTitle:"Yedeği Geri Yükle",restoreConfirmMessage:'"{{filename}}" dosyasından geri yüklemek istediğinizden emin misiniz? Bu, mevcut veritabanınızı ve tüm dosyaları tamamen değiştirecek. Geri yüklemeden sonra uygulamanın yeniden başlatılması gerekecek.',restoreConfirmButton:"Yedeği Geri Yükle",uploadingFile:"Yedek dosyası yükleniyor...",backupRestoredRestart:"Yedek geri yüklendi. Lütfen Bambuddy'yi yeniden başlatın.",failedToRestore:"Yedek geri yüklenemedi. Lütfen dosya formatını kontrol edin.",reloadNow:"Şimdi Yeniden Yükle",creatingBackup:"Yedek Oluşturuluyor",restoringBackup:"Yedek Geri Yükleniyor",preparing:"Hazırlanıyor...",processing:"İşleniyor...",doNotClosePage:"Lütfen bu sayfayı kapatmayın veya başka bir yere gitmeyin. Büyük yedekler için bu işlem birkaç dakika sürebilir.",restoring:"Geri yükleniyor...",restoreComplete:"Geri Yükleme Tamamlandı",restoreFailed2:"Geri Yükleme Başarısız",importSettings:"Ayarları bir yedek dosyasından içe aktar",pleaseWaitRestoring:"Verileriniz geri yüklenirken lütfen bekleyin",selectBackupFile:"Yedek dosyası seçmek için tıklayın (.json veya .zip)",duplicateHandling:"Yinelenen yönetiminin nasıl çalıştığı:",matchPrinters:"Yazıcılar",matchPrintersBy:"seri numarasına göre eşleşti",matchSmartPlugs:"Akıllı Prizler",matchSmartPlugsBy:"IP adresine göre eşleşti",matchNotificationProviders:"Bildirim Sağlayıcıları",matchNotificationProvidersBy:"ada göre eşleşti",matchFilaments:"Filamentler",matchFilamentsBy:"ad + tür + markaya göre eşleşti",matchArchives:"Arşivler",matchArchivesBy:"içerik hash'ine göre eşleşti (her zaman atlanır)",matchPendingUploads:"Bekleyen Yüklemeler",matchPendingUploadsBy:"dosya adına göre eşleşti",matchSettingsTemplates:"Ayarlar ve Şablonlar",matchSettingsTemplatesBy:"her zaman üzerine yazılır",replaceExisting:"Mevcut veriyi değiştir",keepExisting:"Mevcut veriyi koru",overwriteDescription:"Zaten mevcut olan öğeleri yedek verisiyle üzerine yaz",keepDescription:"Yalnızca zaten mevcut olmayan öğeleri geri yükle",overwriteCaution:"Dikkat:",overwriteWarning:"Üzerine yazma, mevcut yapılandırmalarınızı yedekten gelen verilerle değiştirecek. Güvenlik için yazıcı erişim kodları asla üzerine yazılmaz.",cancel:"İptal",processingBackup:"Yedek dosyası işleniyor...",itemsRestored:"Geri Yüklenen Öğeler",itemsSkipped:"Atlanan Öğeler",restored:"Geri yüklendi",skippedAlreadyExist:"Atlandı (zaten mevcut)",filesCategory:"Dosyalar (3MF, küçük resimler, vb.)",andMore:"...ve {{count}} daha",newApiKeysGenerated:"Yeni API Anahtarları Oluşturuldu",keysShownOnce:"Bu anahtarlar yalnızca bir kez gösterilir. Şimdi kopyalayın!",copy:"Kopyala",noDataFound:"Yedek dosyasında geri yüklenecek veri bulunamadı.",close:"Kapat",scheduledBackup:"Zamanlanmış Yedekler",scheduledBackupDescription:"Zamanlamaya göre otomatik olarak yedek anlık görüntüleri oluşturun. Çıktı dizini bir NAS veya harici depolama alanına bağlanabilir.",frequency:"Sıklık",backupTime:"Saat",retention:"Saklama",retentionDescription:"Saklanacak yedek sayısı",outputPath:"Çıktı Yolu",outputPathPlaceholder:"Varsayılan: {{path}}",outputPathDescription:"Varsayılan konum için boş bırakın",runNow:"Şimdi Çalıştır",backupFiles:"Yedek Dosyaları",noScheduledBackups:"Henüz yedek yok",deleteBackup:"Sil",deleteBackupConfirm:"Bu yedek dosyası silinsin mi?",backupRunning:"Yedekleme devam ediyor...",scheduledBackupComplete:"Yedekleme başarıyla tamamlandı",scheduledBackupFailed:"Yedekleme başarısız",nextBackup:"Sonraki yedek",backupSize:"Boyut",localTimeHint:"Yerel saat ({{tz}})",defaultPathLabel:"Varsayılan:",categories:{settings:"Ayarlar",notification_providers:"Bildirim Sağlayıcıları",notification_templates:"Bildirim Şablonları",smart_plugs:"Akıllı Prizler",printers:"Yazıcılar",filaments:"Filamentler",maintenance_types:"Bakım Türleri",archives:"Arşivler",projects:"Projeler",pending_uploads:"Bekleyen Yüklemeler",external_links:"Harici Bağlantılar",api_keys:"API Anahtarları"}},tags:{title:"Etiketler",addTag:"Etiket Ekle",editTag:"Etiketi Düzenle",deleteTag:"Etiketi Sil",tagName:"Etiket Adı",tagColor:"Etiket Rengi",noTags:"Etiket yok",deleteConfirm:"Bu etiketi silmek istediğinizden emin misiniz?",manageTags:"Etiketleri Yönet"},uploadModal:{title:"3MF Dosyalarını Yükle",dragDrop:".3mf dosyalarını buraya sürükleyip bırakın",or:"veya",browseFiles:"Dosyalara Göz At",extractionInfo:"Yazıcı modeli, 3MF dosya meta verilerinden otomatik olarak çıkarılacak.",uploaded:"yüklendi",failed:"başarısız",uploading:"Yükleniyor...",upload:"Yükle",uploadFailed:"Yükleme başarısız"},editArchive:{title:"Arşivi Düzenle",name:"Ad",namePlaceholder:"Baskı adı",printer:"Yazıcı",noPrinter:"Yazıcı yok",project:"Proje",noProject:"Proje yok",itemsPrinted:"Yazdırılan Öğeler",itemsPrintedHelp:"Bu baskı işinde üretilen öğe sayısı",notes:"Notlar",notesPlaceholder:"Bu baskı hakkında notlar ekleyin...",externalLink:"Harici Bağlantı",externalLinkPlaceholder:"https://printables.com/model/...",externalLinkHelp:"Printables, Thingiverse veya başka bir kaynağa bağlantı",tags:"Etiketler",tagsPlaceholder:"Etiketler ekle...",addMoreTags:"Daha fazla etiket ekle...",matchingTags:'"{{query}}" ile eşleşen',existingTags:"Mevcut etiketler",clickToAdd:"(eklemek için tıklayın)",status:"Durum",failureReason:"Başarısızlık Nedeni",selectReason:"Neden seç...",photos:"Yazdırılan Sonuç Fotoğrafları",photosHelp:"Yazdırılan sonuçunuzun fotoğraflarını eklemek için + tıklayın",printResult:"Baskı sonucu",saving:"Kaydediliyor...",failureReasons:{adhesionFailure:"Yapışma başarısız",spaghettiDetached:"Spagetti / Ayrılmış",layerShift:"Katman kayması",cloggedNozzle:"Tıkalı nozul",filamentRunout:"Filament bitti",warping:"Bükülme",stringing:"İplik oluşumu",underExtrusion:"Az ekstrüzyon",powerFailure:"Güç kesintisi",userCancelled:"Kullanıcı iptal etti",other:"Diğer"},statuses:{completed:"Tamamlandı",failed:"Başarısız",aborted:"İptal edildi",printing:"Yazdırılıyor"}},kProfiles:{title:"K-Profilleri",noPrintersConfigured:"Yapılandırılmış Yazıcı Yok",addPrinterInSettings:"K-profillerini yönetmek için Ayarlarda bir yazıcı ekleyin",noActivePrinters:"Aktif Yazıcı Yok",enablePrinterConnection:"K-profillerini görüntülemek için bir yazıcı bağlantısını etkinleştirin",loadingProfiles:"K-Profilleri yükleniyor...",printerOffline:"Yazıcı Çevrimdışı",printerOfflineDesc:"Seçilen yazıcı bağlı değil. K-profillerini görüntülemek için açın.",noMatchingProfiles:"Eşleşen Profil Yok",noMatchingProfilesDesc:"Arama kriterlerinizle eşleşen profil yok",noKProfiles:"K-Profili Yok",noKProfilesDesc:"{{diameter}}mm nozul için basınç ilerleme profili bulunamadı",createFirstProfile:"İlk Profili Oluştur",printer:"Yazıcı",nozzle:"Nozul",refresh:"Yenile",addProfile:"Profil Ekle",export:"Dışa Aktar",import:"İçe Aktar",select:"Seç",selectAll:"Tümünü Seç",delete:"Sil",searchPlaceholder:"Ad veya filamente göre ara...",allExtruders:"Tüm Ekstrüderler",leftOnly:"Yalnızca Sol",rightOnly:"Yalnızca Sağ",allFlow:"Tüm Akış",hfOnly:"Yalnızca HF",sOnly:"Yalnızca S",sortName:"Sırala: Ad",sortKValue:"Sırala: K-Değeri",sortFilament:"Sırala: Filament",leftExtruder:"Sol Ekstrüder",rightExtruder:"Sağ Ekstrüder",modal:{addTitle:"K-Profili Ekle",editTitle:"K-Profilini Düzenle",profileName:"Profil Adı",profileNamePlaceholder:"PLA Profilim",kValue:"K-Değeri",kValuePlaceholder:"0.020",kValueHelp:"Tipik aralık: PLA için 0.01 - 0.06, PETG için 0.02 - 0.10",filament:"Filament",selectFilament:"Filament seç...",noFilamentsHelp:"Filament bulunamadı. Önce Bambu Studio'da bir K-profili oluşturun.",flowType:"Akış Türü",highFlow:"Yüksek Akış",standard:"Standart",nozzleSize:"Nozul Boyutu",extruder:"Ekstrüder",extruders:"Ekstrüderler",left:"Sol",right:"Sağ",notes:"Notlar (yerel olarak saklanır)",notesPlaceholder:"Bu profil hakkında notlar ekleyin...",notesHelp:"Notlar yazıcıda değil, Bambuddy'de kaydedilir",syncing:"Yazıcıyla senkronize ediliyor...",savingExtruder:"Ekstrüdere kaydediliyor {{current}}/{{total}}...",pleaseWait:"Lütfen bekleyin"},deleteConfirm:{title:"Profili Sil",cannotUndo:"Bu geri alınamaz",message:'"{{name}}" yazıcıdan silmek istediğinizden emin misiniz?'},bulkDelete:{title:"Profilleri Sil",cannotUndo:"Bu geri alınamaz",message:"Yazıcıdan seçili {{count}} profili silmek istediğinizden emin misiniz?"},toast:{profileSaved:"K-profili kaydedildi",profilesSaved:"{{count}} ekstrüdere K-profili kaydedildi",selectAtLeastOneExtruder:"Lütfen en az bir ekstrüder seçin",profileDeleted:"K-profili silindi",profilesDeleted:"{{count}} profil silindi",exportedProfiles:"{{count}} profil dışa aktarıldı",importedProfiles:"{{total}} profilden {{count}} tanesi içe aktarıldı",noProfilesToExport:"Dışa aktarılacak profil yok",invalidFileFormat:"Geçersiz dosya formatı",failedToParseImport:"İçe aktarma dosyası ayrıştırılamadı",failedToSaveBatch:"K-profilleri kaydedilemedi",noteSaved:"Not kaydedildi",failedToSaveNote:"Not kaydedilemedi"},permission:{noRead:"Profilleri yenileme izniniz yok",noCreate:"Profil ekleme izniniz yok",noUpdate:"K-profillerini güncelleme izniniz yok",noDelete:"K-profillerini silme izniniz yok",noExport:"Profilleri dışa aktarma izniniz yok",noImport:"Profilleri içe aktarma izniniz yok"}},virtualPrinter:{title:"Sanal Yazıcı",running:"Çalışıyor",stopped:"Durduruldu",description:{default:"Bambu Studio ve OrcaSlicer'da görünen bir sanal yazıcı etkinleştirin. Bu yazıcıya gönderilen dosyalar yazdırılmadan doğrudan arşivlenecek.",proxy:"Dilimleyici trafiğini gerçek bir yazıcıya ileten bir proxy etkinleştirin, böylece herhangi bir ağ üzerinden uzaktan baskı yapabilirsiniz."},enable:{title:"Sanal Yazıcıyı Etkinleştir",visibleInSlicer:'Dilimleyici keşfinde "Bambuddy" olarak görünür',proxyingTo:"{{name}} cihazına proxy yapılıyor",notActive:"Aktif değil"},model:{title:"Yazıcı Modeli",description:"Öykünülecek yazıcı modelini seçin.",restartWarning:"Modeli değiştirmek sanal yazıcıyı yeniden başlatacak"},accessCode:{title:"Erişim Kodu",isSet:"Erişim kodu ayarlandı",notSet:"Erişim kodu ayarlanmadı - etkinleştirmek için gerekli",placeholder:"8 karakterli kodu girin",placeholderChange:"Değiştirmek için yeni kodu girin",hint:"Tam olarak 8 karakter olmalı. Dilimleyiciler tarafından kimlik doğrulama için kullanılır.",charCount:"({{count}}/8)",inheritedFromTarget:"Hedef yazıcıdan devralındı",derivedFromTargetHint:"Hedef yazıcının erişim kodunu kullanır. Köprü, dilimleyicinin kimlik doğrulamasını gerçek yazıcıya iletir, bu nedenle kodlar eşleşmelidir — değiştirmek için yazıcının ayarlarında erişim kodunu düzenleyin.",reveal:"Erişim kodunu göster",hide:"Erişim kodunu gizle"},targetPrinter:{title:"Hedef Yazıcı",configured:"Proxy hedefi yapılandırıldı",notConfigured:"Hedef yazıcı seçilmedi - proxy modu için gerekli",placeholder:"Bir yazıcı seçin...",hint:"Dilimleyici trafiğine proxy yapmak için yazıcıyı seçin. Yazıcı LAN modunda olmalıdır.",noPrinters:"Yapılandırılmış yazıcı yok. Proxy modunu kullanmak için önce bir yazıcı ekleyin."},remoteInterface:{title:"Ağ Arayüzü Geçersiz Kılma",configured:"Arayüz geçersiz kılma aktif",optional:"İsteğe bağlı - otomatik algılanan IP yanlışsa kullanın (örn. birden fazla NIC, Docker, VPN)",placeholder:"Otomatik algıla (varsayılan)...",hint:"SSDP üzerinden tanıtılan ve TLS sertifikasında kullanılan IP adresini geçersiz kıl. Bambuddy birden fazla ağ arayüzüne sahip olduğunda kullanışlıdır."},mode:{title:"Mod",archive:"Arşiv",archiveDesc:"Dosyaları hemen arşivle",review:"İnceleme",reviewDesc:"Arşivlemeden önce incele",queue:"Kuyruk",queueDesc:"Arşivle ve kuyruğa ekle",proxy:"Proxy",proxyDesc:"Gerçek yazıcıya ilet"},autoDispatch:{title:"Otomatik sevk",description:"Kuyruğa eklendiğinde baskıları otomatik olarak başlat. Kapalıyken, baskılar manuel sevki bekler."},queueForceColorMatch:{title:"Renk eşleşmesini zorla",description:"Tam olarak doğru filament türü ve rengi yüklü olmayan bir yazıcıya sevk etmeyi reddet. Varsayılan olarak kapalı — bu olmadan kuyruk yalnızca model eşleşmesi kullanır ve yanlış renk yüklü bir yazıcı seçebilir."},tailscaleDisabled:{title:"Tailscale entegrasyonu",description:"Bu VP'yi Tailscale üzerinden açıkta olarak işaretlemek için etkinleştirin. Dilimleyiciye hangi IP'yi yapıştıracağınızı bilmeniz için ana bilgisayarın Tailscale adresini gösterir. CA içe aktarma adımı değişmedi — bu anahtarın sertifikalar üzerinde etkisi yoktur."},setupRequired:{title:"Kurulum Gerekli",description:"Sanal yazıcı özelliği çalışmadan önce ek sistem yapılandırması gerektirir. Bu, port yönlendirme, güvenlik duvarı kuralları ve platforma özgü ayarları içerir.",readGuide:"Etkinleştirmeden önce kurulum kılavuzunu okuyun"},archiveNameSource:{title:"Arşiv ad kaynağı",description:`Dosyalar sanal yazıcı aracılığıyla geldiğinde yeni arşivlerin nasıl adlandırılacağını seçin. "Meta veri" 3MF'den dilimleyici-gömülü başlığı kullanır (varsayılan). "Dosya adı" Bambu Studio'nun FTP üzerinden gönderdiği dosya adını kullanır. Not: Bambu Studio, 3MF'de bir Başlık alanı varsa "yazıcıya gönder" iletişim kutusunda yazdığınız adı bu alanla geçersiz kılar, bu nedenle her iki mod da genellikle aynı dizeyi üretir.`,metadata:"Meta veri",filename:"Dosya adı"},caCert:{title:"Dilimleyici sertifikası",description:"Sanal yazıcılar Bambuddy CA tarafından imzalanmış bir TLS sertifikası kullanır. Bağlantıyı kabul etmesi için bu CA sertifikasını dilimleyicinizin güven deposuna bir kez içe aktarın — komut satırından kopyalamaya gerek yok.",copy:"Kopyala",copied:"Kopyalandı",download:"İndir",fingerprint:"SHA-256"},howItWorks:{title:"Nasıl çalışır",step1:"Aynı LAN'da, sanal yazıcılar dilimleyicinizde (Bambu Studio / OrcaSlicer) keşif yoluyla otomatik olarak görünür. Diğer ağlardan, IP adresi ve erişim koduyla manuel olarak ekleyin.",step2:`3MF dosyalarını Bambuddy'ye yüklemek için Arşiv, İnceleme ve Kuyruk modlarında dilimleyicinizdeki "Gönder" düğmesini kullanın. Dilimleyici "Baskı başarılı" gösterecek — dosya saklanır, yazdırılmaz.`,step3:"Proxy modunda, sanal yazıcı tüm trafiği gerçek bir yazıcıya iletir — baskılar doğrudan bağlıymış gibi hemen başlar."},status:{title:"Durum Ayrıntıları",printerName:"Yazıcı Adı",model:"Model",serialNumber:"Seri Numarası",mode:"Mod",pendingFiles:"Bekleyen Dosyalar",targetPrinter:"Hedef Yazıcı",ftpPort:"FTP Portu",mqttPort:"MQTT Portu",ftpConnections:"FTP Bağlantıları",mqttConnections:"MQTT Bağlantıları"},toast:{updated:"Sanal yazıcı ayarları güncellendi",failedToUpdate:"Ayarlar güncellenemedi",copyFailed:"Kopyalama başarısız — metni manuel olarak seçmeyi deneyin",accessCodeRequired:"Lütfen önce bir erişim kodu ayarlayın",targetPrinterRequired:"Lütfen önce bir hedef yazıcı seçin",bindIpRequired:"Lütfen önce bir bind IP'si ayarlayın",accessCodeEmpty:"Erişim kodu boş olamaz",accessCodeLength:"Erişim kodu tam olarak 8 karakter olmalı",targetCodeChangedRebind:"Erişim kodu artık yeni hedef yazıcıyla eşleşiyor. Yeni kodu almak için bu cihazı dilimleyicinizde yeniden ekleyin.",created:"Sanal yazıcı oluşturuldu",failedToCreate:"Sanal yazıcı oluşturulamadı",deleted:"Sanal yazıcı silindi",failedToDelete:"Sanal yazıcı silinemedi"},list:{title:"Sanal Yazıcılar",add:"Ekle",addFirst:"Sanal Yazıcı Ekle",empty:"Yapılandırılmış sanal yazıcı yok. Başlamak için bir tane ekleyin."},bindIp:{title:"Bind Arayüzü",placeholder:"Arayüz seç...",hint:"Bu sanal yazıcının bağlanacağı ağ arayüzü. Yazıcı başına benzersiz olmalıdır."},proxy:{accessCodeHint:"Proxy modunda, dilimleyicide hedef yazıcınızın erişim kodunu kullanın. Bağlantı şeffaf olarak gerçek yazıcıya iletilir."},addDialog:{title:"Sanal Yazıcı Ekle",name:"Ad",hint:"Oluşturduktan sonra erişim kodunu, hedef yazıcıyı ve diğer ayarları yapılandırabilirsiniz.",create:"Oluştur"},deleteConfirm:{title:"Sanal Yazıcıyı Sil",message:'"{{name}}" silmek istediğinizden emin misiniz? Bu, bu yazıcı için tüm servisleri durduracak.'}},modelViewer:{openInSlicer:"Dilimleyicide Aç",tabs:{model:"3B Model",gcode:"G-kod Önizleme"},notAvailable:"mevcut değil",notSliced:"dilimlenmemiş",plates:"Plakalar",allPlates:"Tüm Plakalar",plateNumber:"Plaka {{number}}",plateCount:"{{count}} plaka",plateCount_other:"{{count}} plaka",objectCount:"{{count}} nesne",objectCount_other:"{{count}} nesne",filamentCount:"{{count}} filament",filamentCount_other:"{{count}} filament",eta:"ETA {{minutes}} dk",noPreview:"Bu dosya için önizleme yok",pagination:{pageOf:"{{total}} sayfadan {{current}} tanesi",prev:"Önceki",next:"Sonraki"},errors:{failedToLoad:"Dosya yüklenemedi",noMeshes:"3MF dosyasında ağ bulunamadı",unsupportedFormat:"Desteklenmeyen dosya formatı"}},maintenanceDescriptions:{lubricateCarbonRods:"Düzgün hareket için karbon çubuklara yağ uygula",lubricateRails:"Düzgün hareket için lineer raylara yağ uygula",cleanNozzle:"Tıkanmaları önlemek için hotend ve nozulu temizle",checkBelts:"Doğru baskılar için kayış gerginliğini kontrol et",cleanBuildPlate:"Daha iyi yapışma için baskı plakasını temizle",checkExtruder:"Aşınma için ekstrüder dişlilerini inceleyin",checkCooling:"Soğutma fanlarının düzgün çalıştığından emin ol",generalInspection:"Genel yazıcı denetimi",cleanCarbonRods:"Sürtünmeyi azaltmak için karbon çubukları temizle",lubricateSteelRods:"Düzgün hareket için çelik çubuklara yağ uygula",cleanSteelRods:"Sürtünmeyi azaltmak için çelik çubukları temizle",cleanLinearRails:"Toz ve kalıntıları temizlemek için lineer rayları sil",checkPtfeTube:"Aşınma veya hasar için PTFE tüpünü incele",replaceHepaFilter:"Hava kalitesi için HEPA filtresini değiştir",replaceCarbonFilter:"Aktif karbon filtresini değiştir",lubricateLeftNozzleRail:"Sol nozul rayını yağla (H2 serisi)"},smartPlugs:{offline:"Çevrimdışı",admin:"Yönetici",openPlugAdminPage:"Priz yönetici sayfasını aç",deleteSmartPlug:"Akıllı Prizi Sil",turnOnSmartPlug:"Akıllı Prizi Aç",turnOffSmartPlug:"Akıllı Prizi Kapat",turnOn:"Aç",turnOff:"Kapat",addSmartPlug:{scanningNetwork:"Ağ taranıyor...",chooseEntity:"Bir varlık seçin...",connectionFailed:"Bağlantı başarısız",searchEntities:"Varlıklarda ara...",searchPowerSensors:"Güç sensörlerinde ara...",searchEnergySensors:"Enerji sensörlerinde ara...",placeholders:{plugName:"Oturma Odası Prizi",mqttStateOnValue:"ON, true, 1",mqttSameAsPower:"Güç konusuyla aynı veya farklı"}},linkedTo:"Bağlı:",monitorOnly:"Yalnızca İzle",alerts:"Uyarılar",scheduleOn:"{{time}} Açık",scheduleOff:"{{time}} Kapalı",on:"Açık",off:"Kapalı",power:"Güç",kwhToday:"Bugün kWh",settings:"Ayarlar",automationSettings:"Otomasyon Ayarları",showInSwitchbar:"Anahtar Çubuğunda Göster",quickAccessSidebar:"Kenar çubuğundan hızlı erişim",enabled:"Etkin",enableAutomation:"Bu priz için otomasyonu etkinleştir",autoOn:"Otomatik Aç",autoOnDescription:"Baskı başladığında aç",autoOff:"Otomatik Kapat",autoOffDescription:"Baskı tamamlandığında kapat (tek seferlik)",autoOffPersistent:"Etkin Tut",autoOffPersistentDescription:"Tek seferlik yerine baskılar arasında etkin kal",autoOffAfterDrying:"Kurutmadan Sonra Otomatik Kapat",autoOffAfterDryingDescription:"AMS kurutması tamamlandığında kapat",delayAfterDryingMinutes:"Kurutma gecikmesi (dakika)",turnOffDelayMode:"Kapatma Gecikme Modu",time:"Süre",temp:"Sıcaklık",delayMinutes:"Gecikme (dakika)",tempThreshold:"Sıcaklık eşiği (°C)",tempThresholdDescription:"Nozul bu sıcaklığın altına soğuduğunda kapanır",edit:"Düzenle",deleteConfirm:'"{{name}}" silmek istediğinizden emin misiniz? Bu geri alınamaz.',turnOnConfirm:'"{{name}}" açmak istediğinizden emin misiniz?',turnOffConfirm:'"{{name}}" kapatmak istediğinizden emin misiniz? Bu, bağlı cihazın gücünü kesecek.',failedToTurn:'"{{name}}" {{action}} başarısız',unknown:"Bilinmiyor",addTitle:"Akıllı Priz Ekle",editTitle:"Akıllı Prizi Düzenle",stopScanning:"Taramayı Durdur",discoverTasmota:"Tasmota Cihazlarını Keşfet",foundDevices:"{{count}} cihaz bulundu - seçmek için tıklayın:",noDevicesFound:"Ağınızda Tasmota cihazı bulunamadı",haNotConfigured:"Home Assistant yapılandırılmamış. Şuradan ayarlayın:",haSettingsPath:"Ayarlar → Ağ → Home Assistant",selectEntity:"Varlık Seç *",ipAddress:"IP Adresi *",nameLabel:"Ad *",username:"Kullanıcı Adı",password:"Parola",authHint:"Tasmota cihazınız kimlik doğrulama gerektirmiyorsa boş bırakın",linkToPrinter:"Yazıcıya Bağla",noPrinter:"Yazıcı yok (yalnızca manuel kontrol)",linkingDescription:"Bağlama, baskılar başladığında/tamamlandığında otomatik açma/kapamayı etkinleştirir",powerAlerts:"Güç Uyarıları",alertAbove:"Üstündeyse uyar (W)",alertBelow:"Altındaysa uyar (W)",alertDescription:"Güç tüketimi bu eşikleri geçtiğinde bildirim alın. O yönü devre dışı bırakmak için boş bırakın.",dailySchedule:"Günlük Zamanlama",turnOnAt:"Şu saatte aç",turnOffAt:"Şu saatte kapat",scheduleDescription:"Prizi günlük olarak bu saatlerde otomatik aç/kapat. O eylemi atlamak için boş bırakın.",showOnPrinterCard:"Yazıcı Kartında Göster",displayOnPrinterCard:"Yazıcı kartında düğme göster",connectedResult:"Bağlandı!",deviceLabel:"Cihaz: {{name}} - ",stateLabel:"Durum: {{state}}",test:"Test",delete:"Sil",save:"Kaydet",add:"Ekle",cancel:"İptal",failedToStartScan:"Tarama başlatılamadı",nameRequired:"Ad gerekli",entityRequired:"Home Assistant prizleri için varlık gerekli",mqttTopicRequired:"Güç, enerji veya durum izleme için en az bir MQTT konusu yapılandırılmalı",loadingEntities:"Varlıklar yükleniyor...",loading:"Yükleniyor...",failedToLoadEntities:"Varlıklar yüklenemedi: {{error}}",noEntitiesMatching:'"{{search}}" ile eşleşen varlık bulunamadı',noEntitiesAvailable:"Kullanılabilir varlık yok",searchingEntities:"Tüm varlıklar aranıyor ({{count}} bulundu)",showingEntities:"switch, light, input_boolean gösteriliyor ({{count}} mevcut)",energyMonitoringOptional:"Enerji İzleme (İsteğe Bağlı)",energyMonitoringHint:"Güç/enerji verisi sağlayan sensörleri arayın ve seçin.",powerSensorW:"Güç Sensörü (W)",energyTodayKwh:"Bugünkü Enerji (kWh)",totalEnergyKwh:"Toplam Enerji (kWh)",noMatchingSensors:"Eşleşen sensör yok",none:"Hiçbiri",mqttNotConfigured:"MQTT brokerı yapılandırılmamış. Şurada broker adresini ayarlayın:",mqttSettingsPath:"Ayarlar → Ağ → MQTT Yayınlama",mqttNotConfiguredSuffix:"(yayınlamayı etkinleştirmenize gerek yok, yalnızca broker ayrıntılarını doldurun).",mqttMonitorOnlyDescription:"MQTT prizleri MQTT aboneliği aracılığıyla güç/enerji verisi alır. Açma/kapama kontrolü kullanılamaz - MQTT brokerınızı veya ev otomasyon sisteminizi kullanın.",powerMonitoring:"Güç İzleme",energyMonitoring:"Enerji İzleme",stateMonitoring:"Durum İzleme",optional:"isteğe bağlı",topic:"Konu",jsonPath:"JSON Yolu",multiplier:"Çarpan",onValue:"ON Değeri",mqttPowerHint:`JSON yolu JSON yükten değer çıkarır (örn., "power_l1"). Konu ham sayısal değerler yayınlıyorsa boş bırakın.
+mW→W için 0.001, kW→W için 1000 çarpanı kullanın.`,mqttEnergyHint:`JSON yolu JSON yükten değer çıkarır. Ham değerler için boş bırakın.
+Wh→kWh için 0.001, MWh→kWh için 1000 çarpanı kullanın.`,mqttStateHint:`JSON yolu JSON yükten değer çıkarır. Ham değerler için boş bırakın.
+ON değeri: "ON" anlamına gelen tam string. Otomatik algılama için boş bırakın (ON, true, 1).`,restControl:"Kontrol",restOnUrl:"AÇ URL'si",restOffUrl:"KAPAT URL'si",restOnBody:"AÇ İstek Gövdesi",restOffBody:"KAPAT İstek Gövdesi",restMethod:"HTTP Yöntemi",restHeaders:"Özel Başlıklar (JSON)",restStatusUrl:"Durum URL'si",restStatusPath:"Durum JSON Yolu",restStatusOnValue:"ON Değeri",restPowerUrl:"Güç URL'si",restPowerPath:"Güç JSON Yolu",restPowerMultiplier:"Güç Çarpanı",restEnergyUrl:"Enerji URL'si",restEnergyPath:"Enerji JSON Yolu",restEnergyMultiplier:"Enerji Çarpanı",restUrlRequired:"REST prizleri için en az bir URL (ON veya OFF) gerekli",restHeadersHint:'örn. {"Authorization": "Bearer your-token"}',restBodyHint:'örn. ON, {"state": "on"}',restStatusHint:"Mevcut durumu sorgulamak için URL",restPathHint:"örn. state veya data.power.status",restPowerUrlHint:"Güç verisi için ayrı URL (boşsa Durum URL'sini kullanır)",restEnergyUrlHint:"Enerji verisi için ayrı URL (boşsa Durum URL'sini kullanır)",restEnergyHint:"Her değer kendi URL'sini kullanabilir veya Durum URL'sine geri dönebilir. Birim dönüşümü için çarpanları kullanın (örn. Wh'yi kWh'ye dönüştürmek için 0.001).",testConnection:"Bağlantıyı Test Et",connectionSuccess:"Bağlantı başarılı",noSwitchesInSwitchbar:"Anahtar çubuğunda anahtar yok",enableSwitchbarHint:`Ayarlar > Akıllı Prizler'de "Anahtar Çubuğunda Göster"i etkinleştirin`},notifications:{providerTypes:{callmebot:"CallMeBot/WhatsApp",ntfy:"ntfy",pushover:"Pushover",telegram:"Telegram",email:"E-posta",discord:"Discord",webhook:"Webhook",homeassistant:"Home Assistant"},providerDescriptions:{email:"SMTP e-posta bildirimleri",telegram:"Telegram botu üzerinden bildirimler",discord:"Webhook üzerinden Discord kanalına gönder",ntfy:"Ücretsiz, kendi barındırılabilir push bildirimleri",pushover:"Basit, güvenilir push bildirimleri",callmebot:"CallMeBot üzerinden ücretsiz WhatsApp bildirimleri",webhook:"Herhangi bir URL'ye genel HTTP POST",homeassistant:"Home Assistant gösterge panelinde kalıcı bildirimler"},lastSuccess:"Son: {{date}}",error:"Hata",printer:"Yazıcı:",allPrinters:"Tüm yazıcılar",sendTestNotification:"Test Bildirimi Gönder",eventSettings:"Olay Ayarları",enabled:"Etkin",sendFromProvider:"Bu sağlayıcıdan bildirim gönder",printEvents:"Baskı Olayları",printerStatus:"Yazıcı Durumu",amsAlarms:"AMS Alarmları",amsHtAlarms:"AMS-HT Alarmları",printQueue:"Baskı Kuyruğu",start:"Başlangıç",plateCheck:"Plaka Kontrolü",complete:"Tamamlandı",failed:"Başarısız",stopped:"Durduruldu",progress:"İlerleme",offline:"Çevrimdışı",lowFilament:"Az Filament",maintenance:"Bakım",amsHumidity:"AMS Nemi",amsTemp:"AMS Sıcaklığı",amsHtHumidity:"AMS-HT Nemi",amsHtTemp:"AMS-HT Sıcaklığı",bedCooled:"Tabla Soğudu",firstLayer:"İlk Katman",quiet:"Sessiz",digest:"Özet {{time}}",printStarted:"Baskı Başladı",plateNotEmpty:"Plaka Boş Değil",plateNotEmptyDescription:"Baskıdan önce nesneler algılandı",printCompleted:"Baskı Tamamlandı",bedCooledLabel:"Tabla Soğudu",bedCooledDescription:"Baskıdan sonra tabla eşiğin altına soğudu",firstLayerCompleteLabel:"İlk Katman Tamamlandı",firstLayerCompleteDescription:"İlk katman bittiğinde anlık görüntüyle bildir",missingSpoolAssignmentLabel:"Eksik Makara Ataması",missingSpoolAssignmentDescription:"Baskı başladığında ve gerekli tepsilerin atanmış makarası olmadığında bildir",printFailed:"Baskı Başarısız",printStopped:"Baskı Durduruldu",progressMilestones:"İlerleme Kilometre Taşları",progressMilestonesDescription:"%25, %50, %75'te bildir",printerOffline:"Yazıcı Çevrimdışı",printerError:"Yazıcı Hatası",lowFilamentLabel:"Az Filament",maintenanceDue:"Bakım Zamanı",maintenanceDueDescription:"Bakım gerektiğinde bildir",amsHumidityHigh:"AMS Nemi Yüksek",amsHumidityHighDescription:"Normal AMS nemi eşiği aşıyor",amsTemperatureHigh:"AMS Sıcaklığı Yüksek",amsTemperatureHighDescription:"Normal AMS sıcaklığı eşiği aşıyor",amsHtHumidityHigh:"AMS-HT Nemi Yüksek",amsHtHumidityHighDescription:"AMS-HT nemi eşiği aşıyor",amsHtTemperatureHigh:"AMS-HT Sıcaklığı Yüksek",amsHtTemperatureHighDescription:"AMS-HT sıcaklığı eşiği aşıyor",inventoryAlerts:"Envanter Uyarıları",stockReorderAlert:"Yeniden Sipariş Uyarısı",stockReorderAlertDescription:"SKU yeniden sipariş noktasına ulaştı",stockBreakAlert:"Stok Tükenme Uyarısı",stockBreakAlertDescription:"Yenileme gelmeden stok tükenecek",jobAdded:"İş Eklendi",jobAddedDescription:"İş kuyruğa eklendi",jobAssigned:"İş Atandı",jobAssignedDescription:"Model tabanlı iş yazıcıya atandı",jobStarted:"İş Başladı",jobStartedDescription:"Kuyruk işi yazdırmaya başladı",jobWaiting:"İş Bekliyor",jobWaitingDescription:"İş filament veya yazıcı için bekliyor",jobSkipped:"İş Atlandı",jobSkippedDescription:"İş atlandı (önceki başarısız oldu)",jobFailed:"İş Başarısız",jobFailedDescription:"İş başlatılamadı",queueComplete:"Kuyruk Tamamlandı",queueCompleteDescription:"Tüm kuyruk işleri bitti",quietHours:"Sessiz Saatler",noNotificationsDuring:"Bu saatler arasında bildirim yok",editProviderToChangeQuietHours:"Sessiz saatleri değiştirmek için sağlayıcıyı düzenleyin",dailyDigest:"Günlük Özet",batchNotifications:"Bildirimleri tek bir günlük özette topla",sendAt:"{{time}}'de gönder",editProviderToChangeDigestTime:"Özet saatini değiştirmek için sağlayıcıyı düzenleyin",edit:"Düzenle",deleteProvider:"Bildirim Sağlayıcısını Sil",deleteConfirm:'"{{name}}" silmek istediğinizden emin misiniz? Bu geri alınamaz.',delete:"Sil",addTitle:"Bildirim Sağlayıcısı Ekle",editTitle:"Bildirim Sağlayıcısını Düzenle",nameLabel:"Ad *",namePlaceholder:"Bildirimlerim",providerTypeLabel:"Sağlayıcı Türü *",configuration:"Yapılandırma",testConfiguration:"Yapılandırmayı Test Et",printerFilter:"Yazıcı Filtresi",onlyFromPrinter:"Yalnızca bu yazıcının olayları için bildirim gönder",quietHoursDnd:"Sessiz Saatler (Rahatsız Etme)",quietStart:"Başlangıç",quietEnd:"Bitiş",dailyDigestLabel:"Günlük Özet",sendDigestAt:"Özeti şu saatte gönder",digestCollected:"Olaylar toplanacak ve bu saatte tek bir özet olarak gönderilecek",notificationEvents:"Bildirim Olayları",progressPercent:"(%25, %50, %75)",bedCooledAfterPrint:"(baskı tamamlandıktan sonra)",eventPriority:{sectionTitle:"ntfy Önceliği",helpNtfy:"Her etkin olay için bir öncelik seçin. ntfy uyarıları kademelendirmek için bunları kullanır (ses, görünürlük, push davranışı). Burada ayarlanmamış seviyeler ntfy sunucu varsayılanını kullanır.",min:"Min",low:"Düşük",default:"Varsayılan",high:"Yüksek",urgent:"Acil"},cancel:"İptal",save:"Kaydet",add:"Ekle",nameRequired:"Ad gerekli",fieldRequired:"{{field}} gerekli",phoneNumber:"Telefon Numarası",apiKey:"API Anahtarı",serverUrl:"Sunucu URL",topic:"Konu",authToken:"Yetkilendirme Belirteci",userKey:"Kullanıcı Anahtarı",appToken:"Uygulama Belirteci",priority:"Öncelik",botToken:"Bot Belirteci",chatId:"Sohbet ID",smtpServer:"SMTP Sunucusu",smtpPort:"SMTP Portu",security:"Güvenlik",authentication:"Kimlik Doğrulama",username:"Kullanıcı Adı",password:"Parola",fromEmail:"Gönderen E-posta",toEmail:"Alıcı E-posta",webhookUrl:"Webhook URL",payloadFormat:"Yük Formatı",authorization:"Yetkilendirme",titleFieldName:"Başlık Alanı Adı",messageFieldName:"Mesaj Alanı Adı",editTemplate:"Şablonu Düzenle: {{name}}",titleLabel:"Başlık",bodyLabel:"Gövde",titlePlaceholder:"Bildirim başlığı...",bodyPlaceholder:"Bildirim gövdesi...",availableVariables:"Kullanılabilir Değişkenler",clickToInsert:"Gövdede imleç konumuna eklemek için tıklayın",livePreview:"Canlı Önizleme",hide:"Gizle",show:"Göster",loadingPreview:"Önizleme yükleniyor...",enterTemplateContent:"Önizlemeyi görmek için şablon içeriğini girin",titlePreview:"Başlık:",bodyPreview:"Gövde:",resetToDefault:"Varsayılana Sıfırla",titleRequired:"Başlık gerekli",bodyRequired:"Gövde gerekli",notificationLog:"Bildirim Günlüğü",showFailedOnly:"Yalnızca başarısız",last24Hours:"Son 24 saat",last7Days:"Son 7 gün",last30Days:"Son 30 gün",last90Days:"Son 90 gün",justNow:"Az önce",noFailedNotifications:"Başarısız bildirim yok",noNotificationsLogged:"Kaydedilen bildirim yok",unknownProvider:"Bilinmeyen Sağlayıcı",logTitle:"Başlık",logMessage:"Mesaj",logError:"Hata",logProvider:"Sağlayıcı: {{type}}",logTime:"Saat: {{time}}",refresh:"Yenile",clearOld:"Eskileri Temizle",statsSummary:"Son {{days}} gün:",statsNotifications:"bildirim",statsSent:"{{count}} gönderildi",statsFailed:"{{count}} başarısız",eventTypes:{print_start:"Baskı Başladı",print_complete:"Baskı Tamamlandı",print_failed:"Baskı Başarısız",print_stopped:"Baskı Durduruldu",print_progress:"İlerleme",printer_offline:"Yazıcı Çevrimdışı",printer_error:"Yazıcı Hatası",filament_low:"Az Filament",maintenance_due:"Bakım Zamanı",test:"Test"},userEmail:{title:"Bildirimler",emailNotifications:"E-posta Bildirimleri",emailNotificationsDesc:"Kendi baskı işleriniz için e-posta bildirimleri alın. E-postalar Gelişmiş Kimlik Doğrulamada yapılandırılan sistem SMTP ayarları kullanılarak gönderilir.",sendingTo:"Bildirimler şuraya gönderilecek",noEmailWarning:"Hesabınızın e-posta adresi yok. Eklemek için bir yöneticiyle iletişime geçin.",printJobNotifications:"Baskı İşi Bildirimleri",printJobNotificationsDesc:"Gönderdiğiniz baskı işleri için hangi olayların e-posta bildirimlerini tetikleyeceğini seçin.",printJobStarts:"Baskı İşi Başlar",printJobStartsDesc:"Baskı işiniz başladığında bildirim alın.",printJobFinishes:"Baskı İşi Biter",printJobFinishesDesc:"Baskı işiniz başarıyla tamamlandığında bildirim alın.",printErrors:"Baskı Hataları",printErrorsDesc:"Baskı işiniz başarısız olduğunda veya bir hatayla karşılaştığında bildirim alın.",printJobStops:"Baskı İşi Durur",printJobStopsDesc:"Baskı işiniz iptal edildiğinde veya durdurulduğunda bildirim alın.",saveSuccess:"Bildirim tercihleri kaydedildi.",saveError:"Bildirim tercihleri kaydedilemedi."}},richTextEditor:{bold:"Kalın",italic:"İtalik",underline:"Altı Çizili",bulletList:"Madde İşaretli Liste",numberedList:"Numaralı Liste",alignLeft:"Sola Hizala",alignCenter:"Ortaya Hizala",alignRight:"Sağa Hizala",addLink:"Bağlantı Ekle",removeLink:"Bağlantıyı Kaldır"},externalLinks:{noLinksConfigured:"Yapılandırılmış harici bağlantı yok",deleteLink:"Bağlantıyı Sil",removeCustomIcon:"Özel simgeyi kaldır",openInNewTab:"Yeni sekmede aç",placeholders:{linkName:"Bağlantım"}},keyboardShortcuts:{title:"Klavye Kısayolları",navigation:"Navigasyon",archivesSection:"Arşivler",kProfilesSection:"K-Profilleri",generalSection:"Genel",shortcuts:{goToPrinters:"Yazıcılara Git",goToArchives:"Arşivlere Git",goToQueue:"Kuyruğa Git",goToStats:"İstatistiklere Git",goToProfiles:"Bulut Profillerine Git",goToSettings:"Ayarlara Git",focusSearch:"Aramaya odaklan",openUploadModal:"Yükleme modalini aç",clearSelection:"Seçimi temizle / odağı kaldır",contextMenu:"Kartlarda bağlam menüsü",refreshProfiles:"Profilleri yenile",newProfile:"Yeni profil",exitSelectionMode:"Seçim modundan çık",showHelp:"Bu yardımı göster"},footer:"Kapatmak için Esc'ye basın veya dışarı tıklayın"},notificationLog:{title:"Bildirim Günlüğü",events:{printStarted:"Baskı Başladı",printComplete:"Baskı Tamamlandı",printFailed:"Baskı Başarısız",printStopped:"Baskı Durduruldu",progress:"İlerleme",printerOffline:"Yazıcı Çevrimdışı",printerError:"Yazıcı Hatası",lowFilament:"Az Filament",maintenanceDue:"Bakım Zamanı",test:"Test"},timeAgo:{justNow:"Az önce",minutesAgo:"{{minutes}}dk önce",hoursAgo:"{{hours}}sa önce"}},restoreBackup:{title:"Yedeği Geri Yükle",restoring:"Geri yükleniyor...",restoreComplete:"Geri Yükleme Tamamlandı",restoreFailed:"Geri Yükleme Başarısız",importSettings:"Ayarları bir yedek dosyasından içe aktar",pleaseWait:"Verileriniz geri yüklenirken lütfen bekleyin",clickToSelect:"Yedek dosyası seçmek için tıklayın (.json veya .zip)",howDuplicateHandling:"Yinelenen yönetiminin nasıl çalıştığı:",categories:{printers:"Yazıcılar",smartPlugs:"Akıllı Prizler",notificationProviders:"Bildirim Sağlayıcıları",filaments:"Filamentler",archives:"Arşivler",pendingUploads:"Bekleyen Yüklemeler",settingsTemplates:"Ayarlar ve Şablonlar"},matchingInfo:{printers:"seri numarasına göre eşleşti",smartPlugs:"IP adresine göre eşleşti",notificationProviders:"ada göre eşleşti",filaments:"ad + tür + markaya göre eşleşti",archives:"içerik hash'ine göre eşleşti",pendingUploads:"dosya adına göre eşleşti",settingsTemplates:"her zaman üzerine yazılır"},replaceExisting:"Mevcut veriyi değiştir",keepExisting:"Mevcut veriyi koru",replaceDescription:"Zaten mevcut olan öğeleri yedek verisiyle üzerine yaz",keepDescription:"Yalnızca zaten mevcut olmayan öğeleri geri yükle",caution:"Dikkat:",cautionText:"Üzerine yazma, mevcut yapılandırmalarınızı yedek verisiyle değiştirecek. Güvenlik için yazıcı erişim kodları asla üzerine yazılmaz.",itemsRestored:"Geri Yüklenen Öğeler",itemsSkipped:"Atlanan Öğeler",restored:"Geri yüklendi",skipped:"Atlandı (zaten mevcut)",filesLabel:"Dosyalar (3MF, küçük resimler, vb.)",newApiKeysGenerated:"Yeni API Anahtarları Oluşturuldu",newApiKeysWarning:"Bu anahtarlar yalnızca bir kez gösterilir. Şimdi kopyalayın!",processingBackup:"Yedek dosyası işleniyor...",noDataFound:"Yedek dosyasında geri yüklenecek veri bulunamadı.",failedToRestore:"Yedek geri yüklenemedi. Lütfen dosya formatını kontrol edin."},backupExport:{title:"Yedeği Dışa Aktar",selectData:"Dahil edilecek veriyi seçin",selectAll:"Tümünü Seç",selectNone:"Hiçbirini Seçme",categoryDescriptions:{settings:"Dil, tema, güncelleme tercihleri",notifications:"ntfy, Pushover, Discord, vb.",templates:"Özel mesaj şablonları",smartPlugs:"Tasmota priz yapılandırmaları",externalLinks:"Harici servislere kenar çubuğu bağlantıları",printers:"Yazıcı bilgisi (erişim kodları hariç)",plateDetection:"Boş plaka referans görüntüleri",filaments:"Filament türleri ve maliyetleri",maintenance:"Özel bakım programları",archives:"Tüm baskı verileri + dosyalar (3MF, küçük resimler, fotoğraflar)",projects:"Projeler, BOM öğeleri ve ekler",pendingUploads:"İnceleme bekleyen sanal yazıcı yüklemeleri",apiKeys:"Webhook API anahtarları (içe aktarımda yeni anahtarlar oluşturulur)"},requiresPrinters:"Yazıcıların seçili olması gerekir",zipFileWarning:"ZIP dosyası oluşturulacak.",zipFileDescription:"Tüm 3MF dosyalarını, küçük resimleri, zaman atlamalı videoları ve fotoğrafları içerir. Bu biraz zaman alabilir ve büyük bir dosya oluşturabilir.",includeAccessCodes:"Erişim Kodlarını Dahil Et",includeAccessCodesDescription:"Başka bir makineye aktarmak için",includeAccessCodesWarning:"Erişim kodları düz metin olarak dahil edilecek. Bu yedek dosyasını güvende tutun!",categoriesSelected:"{{selectedCount}} kategori seçildi"},pendingUploads:{placeholders:{notes:"Bu baskı hakkında notlar ekleyin..."},discardUpload:"Yüklemeyi At",archiveAllUploads:"Tüm Yüklemeleri Arşivle",discardAllUploads:"Tüm Yüklemeleri At",archive:"Arşivle",timeAgo:{justNow:"Az önce",minutesAgo:"{{minutes}}dk önce",hoursAgo:"{{hours}}sa önce",daysAgo:"{{days}}g önce"}},apiBrowser:{placeholders:{requestBody:"JSON istek gövdesi...",searchEndpoints:"Uç noktalarda ara..."}},configureAmsSlot:{title:"AMS Yuvasını Yapılandır",slotConfigured:"Yuva Yapılandırıldı!",configuringSlot:"Yuva yapılandırılıyor:",slotLabel:"{{ams}} Yuva {{slot}}",searchPresets:"Ön ayarlarda ara...",colorPlaceholder:"Renk adı veya hex (örn., kahverengi, FF8800)",clearCustomColor:"Özel rengi temizle",noCloudPresets:"Bulut ön ayarı yok. Senkronize etmek için Bambu Cloud'a giriş yapın.",noPresetsAvailable:"Kullanılabilir ön ayar yok. Bambu Cloud'a giriş yapın veya yerel profilleri içe aktarın.",noMatchingPresets:"Eşleşen ön ayar bulunamadı.",custom:"Özel",builtin:"Yerleşik",settingsSentToPrinter:"Ayarlar yazıcıya gönderildi",filamentProfile:"Filament Profili",kProfileLabel:"K Profili (Basınç İlerlemesi)",filteringFor:"Şu için filtreleniyor: {{material}}",noKProfile:"K profili yok (varsayılan 0.020 kullan)",noMatchingKProfiles:"Eşleşen K profili bulunamadı. Varsayılan K=0.020 kullanılacak.",selectFilamentFirst:"Önce bir filament profili seçin",kFromCalibration:"Yazıcı kalibrasyonundan K={{value}}",customColorLabel:"Özel Renk (isteğe bağlı)",presetColors:"{{name}} renkleri:",showLessColors:"Daha az renk göster",showMoreColors:"Daha fazla renk göster",clear:"Temizle",hexLabel:"Hex: #{{hex}}",resetting:"Sıfırlanıyor...",resetSlot:"Yuvayı Sıfırla",cancel:"İptal",configuring:"Yapılandırılıyor...",configureSlot:"Yuvayı Yapılandır"},githubBackup:{title:"Git Yedekleme",history:"Geçmiş",downloadBackup:"Yedeği İndir",restoreBackup:"Yedeği Geri Yükle",noBackupsYet:"Henüz yedek yok"},emailSettings:{placeholders:{fromName:"BamBuddy"}},tagManagement:{searchTags:"Etiketlerde ara...",renameTag:"Etiketi yeniden adlandır",deleteTag:"Etiketi sil"},notificationTemplates:{placeholders:{title:"Bildirim başlığı...",body:"Bildirim gövdesi..."}},batchTag:{placeholders:{newTag:"Yeni etiket girin..."}},photoGallery:{deletePhoto:"Fotoğrafı Sil"},filamentHoverCard:{copySpoolUuid:"Makara UUID'sini kopyala"},kProfilesView:{hasNote:"Notu var",copyProfile:"Profili kopyala"},layout:{openMenu:"Menüyü aç",noPermissionSystemInfo:"Sistem bilgisini görüntüleme izniniz yok"},dashboard:{dragToReorder:"Yeniden sıralamak için sürükleyin",hideWidget:"Widget'ı gizle"},notificationProviderCard:{deleteNotificationProvider:"Bildirim Sağlayıcısını Sil"},fileManagerModal:{closeFileManager:"Dosya yöneticisini kapat",sortFiles:"Dosyaları sırala",goToParentFolder:"Üst klasöre git",threeView:"3B Görünüm"},embeddedCameraViewer:{refreshStream:"Akışı yenile",close:"Kapat",zoomOut:"Uzaklaştır",resetZoom:"Yakınlaştırmayı sıfırla",zoomIn:"Yakınlaştır",dragToResize:"Yeniden boyutlandırmak için sürükleyin"},timelapseViewer:{skipBack5s:"5 sn geri al",skipForward5s:"5 sn ileri al"},notificationProviders:{descriptions:{email:"SMTP e-posta bildirimleri",telegram:"Telegram botu üzerinden bildirimler",discord:"Webhook üzerinden Discord kanalına gönder",ntfy:"Ücretsiz, kendi barındırılabilir push bildirimleri",pushover:"Basit, güvenilir push bildirimleri",callmebot:"CallMeBot üzerinden ücretsiz WhatsApp bildirimleri",webhook:"Herhangi bir URL'ye genel HTTP POST"}},logViewer:{searchPlaceholder:"Mesaj veya günlükçü adı ara...",noLogEntries:"Günlük kaydı bulunamadı"},switchbarPopover:{noSwitchesInSwitchbar:"Anahtar çubuğunda anahtar yok"},projectPageModal:{placeholders:{title:"Başlık",designer:"Tasarımcı",license:"Lisans",description:"Açıklama girin...",profileTitle:"Profil Başlığı",profileDescription:"Profil açıklaması..."}},spoolmanSettings:{},time:{unknown:"-",waiting:"Bekliyor",justNow:"Az önce",now:"Şimdi",minsAgo:"{{count}}dk önce",inMins:"{{count}}dk sonra",hoursAgo:"{{count}}sa önce",inHours:"{{count}}sa sonra",daysAgo:"{{count}}g önce",inDays:"{{count}}g sonra"},spoolbuddy:{nav:{dashboard:"Gösterge Paneli",ams:"AMS",inventory:"Envanter",writeTag:"Yaz",settings:"Ayarlar"},status:{nfcReady:"NFC Hazır",nfcOff:"NFC Kapalı",offline:"Çevrimdışı",online:"Çevrimiçi",noPrinters:"Yazıcı yok",deviceOffline:"Cihaz Çevrimdışı",waitingConnection:"Cihaz bağlantısı bekleniyor...",systemReady:"Sistem Hazır",status:"Durum"},dashboard:{readyToScan:"Taramaya hazır",idleMessage:"Tanımlamak için bir makarayı tartıya yerleştirin",nfcHint:"NFC etiketi otomatik olarak okunacak",device:"Cihaz",syncWeight:"Ağırlığı Senkronize Et",weightSynced:"Senkronize edildi!",unknownTag:"Bilinmeyen Etiket",newTag:"Yeni Etiket Algılandı",onScale:"tartıda",linkSpool:"Makaraya Bağla",linkTagTitle:"Etiketi Makaraya Bağla",linkTag:"Etiketi Bağla",selectSpool:"Bu etiketi bağlamak için bir makara seçin:",noUntagged:"Etiketsiz makara bulunamadı",tagDetected:"Etiket algılandı",noTag:"Etiket yok",tagId:"Etiket",grossWeight:"Brüt ağırlık",spoolSize:"Makara boyutu",close:"Kapat",currentSpool:"Mevcut Makara",plateReady:"Plaka hazır: {{name}}",plateReadyLabel:"Temizlenmeye hazır plakalar",plateClearAction:"Temizle",plateClearedToast:"Plaka temizlendi olarak işaretlendi",plateClearFailed:"Plaka temizlendi olarak işaretlenemedi"},modal:{spoolDetected:"Makara Algılandı",assignToAms:"AMS'e Ata",syncWeight:"Ağırlığı Senkronize Et",weightSynced:"Senkronize edildi!",syncing:"Senkronize ediliyor...",newTagDetected:"Yeni Etiket Algılandı",addToInventory:"Envantere Ekle",assignToAmsTitle:"AMS'e Ata",selectSlot:"Bir yuva seçin",assign:"Ata",assigning:"Atanıyor...",assignSuccess:"Atandı!",assignPendingInsert:"Atandı. Makarayı yerleştirdiğinizde yuva yapılandırılacak.",assignError:"Makara atanamadı. Lütfen tekrar deneyin.",noPrinterSelected:"Bir yazıcı seçin...",noAmsDetected:"Bu yazıcıda AMS algılanmadı",slot:"Yuva"},weight:{noReading:"Okuma yok",stable:"Kararlı",measuring:"Ölçülüyor...",tare:"Dara",calibrate:"Kalibre Et"},spool:{remaining:"Kalan",material:"Malzeme",brand:"Marka",color:"Renk",coreWeight:"Çekirdek",labelWeight:"Etiket",scaleWeight:"Tartı",netWeight:"Net",lastUsed:"Son kullanım"},ams:{noData:"AMS algılanmadı",connectAms:"Filament yuvalarını görmek için bir AMS bağlayın",noPrinter:"Yazıcı seçilmedi",selectPrinter:"Üst çubuktan bir yazıcı seçin",printerDisconnected:"Yazıcı bağlantısı kesildi",humidity:"Nem",level:"Seviye",active:"Aktif",slot:"Yuva",empty:"Boş"},inventory:{search:"Makaralarda ara...",empty:"Envanterde makara yok",noResults:"Eşleşen makara yok",spools:"makara",addSpool:"Makara Ekle"},settings:{tabDevice:"Cihaz",tabDisplay:"Görüntü",tabScale:"Tartı",tabUpdates:"Güncellemeler",nfcReader:"NFC Okuyucu",type:"Tür",connection:"Bağlantı",notConnected:"N/A",deviceInfo:"Cihaz Bilgisi",hostname:"Ana Bilgisayar",uptime:"Çalışma Süresi",systemConfig:"Arka Uç ve Kimlik Doğrulama",backendUrl:"Bambuddy Arka Uç URL'si",apiToken:"API Belirteci",apiTokenPlaceholder:"API belirtecini girin",saveConfig:"Yapılandırmayı Kaydet",systemQueued:"Yapılandırma kuyruğa alındı.",nfcDiagnostic:"NFC Tanılaması",scaleDiagnostic:"Tartı Tanılaması",readTagDiagnostic:"Etiket Okuma Tanılaması",testNfc:"Okuyucuyu test et",testScale:"Doğruluğu test et",testReadTag:"Etiket oku",systemFieldsRequired:"Arka uç URL'si gerekli.",brightness:"Parlaklık",saved:"Kaydedildi",noBacklight:"DSI arka ışık algılanmadı. Parlaklık kontrolü DSI ekran gerektirir.",screenBlank:"Ekran Kapanma Zaman Aşımı",screenBlankDesc:"Hareketsizlik sonrası ekran kapanır. Uyandırmak için dokunun.",displayNote:"Parlaklık bir yazılım filtresi olarak uygulanır.",scaleCalibration:"Tartı Kalibrasyonu",currentWeight:"Mevcut ağırlık",tareOffset:"Dara",calFactor:"Faktör",knownWeight:"Bilinen ağırlık",calStep1:"Tartıdan tüm öğeleri kaldırın ve Sıfır Ayarla'ya basın.",calStep2:"Bilinen ağırlığı tartıya yerleştirin.",setZero:"Sıfır Ayarla",calibrateNow:"Kalibre Et",calibrated:"Kalibre edildi",tareSet:"Dara komutu gönderildi. Cihaz bekleniyor...",tareComplete:"Dara tamam!",tareTimedOut:"Dara zaman aşımına uğradı — SpoolBuddy daemon çalışıyor mu?",tareFailed:"Dara komutu gönderilemedi",zeroSet:"Sıfır noktası ayarlandı. Bilinen ağırlığı tartıya yerleştirin.",calibrationDone:"Kalibrasyon tamamlandı!",calibrationFailed:"Kalibrasyon başarısız",lastCalibrated:"Son kalibrasyon",stable:"Kararlı",settling:"Sabitleniyor...",firmware:"Firmware",scale:"Tartı",noDevice:"SpoolBuddy cihazı bulunamadı",daemonVersion:"Daemon Sürümü",currentVersion:"Mevcut",versionPending:"Daemon bekleniyor...",checking:"Kontrol ediliyor...",checkUpdates:"Güncellemeleri Kontrol Et",updateAvailable:"Güncelleme mevcut",updateInstructions:"SSH üzerinden güncelle: yükseltmek için SpoolBuddy yükleme betiğini çalıştırın.",upToDate:"Güncel",includeBeta:"Beta sürümleri dahil et"},writeTag:{tabExisting:"Mevcut Makara",tabNew:"Yeni Makara",tabReplace:"Etiketi Değiştir",searchPlaceholder:"Malzeme, renk, marka ile ara...",noUntaggedSpools:"Etiketsiz makara yok",noTaggedSpools:"Etiketli makara yok",selectSpool:"Bir makara seçin, ardından okuyucuya boş bir NTAG yerleştirin",placeTag:"Okuyucuya bir NTAG yerleştirin",tagReady:"Etiket algılandı — yazmaya hazır",writeTag:"Etiketi Yaz",replaceTag:"Etiketi Değiştir",writing:"Etiket yazılıyor...",waiting:"SpoolBuddy bekleniyor...",writeSuccess:"Etiket başarıyla yazıldı!",writeFailed:"Yazma başarısız",queueFailed:"Yazma komutu kuyruğa alınamadı",tryAgain:"Tekrar Dene",cancel:"İptal",replaceWarning:"Eski etiket bağlantısı kaldırılacak. Yeni etiket yerini alacak.",deviceOffline:"SpoolBuddy çevrimdışı",material:"Malzeme",colorName:"Renk Adı",color:"Renk",brand:"Marka",weight:"Ağırlık (g)",createSpool:"Makara Oluştur",creating:"Oluşturuluyor...",spoolCreated:"Makara oluşturuldu! Yazmaya hazır.",createFailed:"Makara oluşturulamadı",incompleteDataWarning:"Etiket eksik Spoolman verisiyle yazıldı"},quickMenu:{printerPower:"Yazıcı Gücü",systemControls:"Sistem",restartDaemon:"Daemon'u Yeniden Başlat",restartBrowser:"Tarayıcıyı Yeniden Başlat",reboot:"Yeniden Başlat",shutdown:"Kapat",swipeToClose:"Kapatmak için aşağı kaydır",confirmTitle:"Onayla",confirmShutdown:"SpoolBuddy'yi kapatmak istediğinizden emin misiniz? Tekrar açmak için fiziksel erişime ihtiyacınız olacak.",confirmReboot:"SpoolBuddy'yi yeniden başlatmak istediğinizden emin misiniz?",confirmRestartDaemon:"SpoolBuddy daemon yeniden başlatılsın mı? NFC ve tartı geçici olarak kullanılamayacak.",confirmRestartBrowser:"Kiosk tarayıcısı yeniden başlatılsın mı? Ekran kısa bir süre kararacak.",confirm:"Onayla",confirmPlugOn:"{{name}} açılsın mı?",confirmPlugOff:"{{name}} kapatılsın mı?",turnOn:"Aç",turnOff:"Kapat"}},diagnostic:{modalTitle:"Bağlantı tanılaması — {{name}}",running:"Tanılama çalışıyor...",runningElapsed:"Tanılama çalışıyor... ({{elapsed}}s)",waitingForReportHint:"Yazıcının durum raporu yayınlamasını bekliyor — bu işlem en fazla {{max}} saniye sürebilir.",runFailed:"Tanılama çalıştırılamadı: {{error}}",retry:"Tekrar çalıştır",runButton:"Tanılamayı çalıştır",sectionTitle:"Bağlantı Tanılaması",sectionDescription:"Bir yazıcının neden bağlanmadığını veya yazdırmadığını kontrol edin — port erişilebilirliği, LAN geliştirici modu, Docker ağ modu ve kimlik bilgileri.",noPrinters:"Yapılandırılmış yazıcı yok.",overall:{ok:"Sorun bulunamadı — yazıcı bağlantısı sağlıklı görünüyor.",warnings:"Yazıcı çalışmalı, ancak bazı şeyler dikkat gerektiriyor.",problems:"Yazıcının neden bağlanmadığını veya yazdırmadığını açıklayan sorunlar bulundu."},check:{port_mqtt:{title:"Kontrol portu (MQTT 8883)",pass:"Erişilebilir — yazıcı kontrol bağlantılarını kabul ediyor.",fail:"Port 8883 erişilemez. Yazıcı kapalı, farklı bir IP adresinde veya bir güvenlik duvarı engelliyor. Yazıcı IP'sini ve hiçbir şeyin port 8883'ü engellemediğini doğrulayın."},port_ftps:{title:"Dosya aktarım portu (FTPS 990)",pass:"Erişilebilir — baskı dosyaları gönderme çalışacak.",warn:"Port 990 erişilemez. İzleme yine çalışabilir, ancak yazıcıya baskı gönderme başarısız olacak. Port 990'ın engellenmediğinden emin olun."},external_storage:{title:"Gönderilen dosyaları harici depolamada sakla (kurulum adımı 4)",pass:"Yazıcı bu seçeneğin açık olduğunu bildiriyor — gönderilen dosyalar SD kartta saklanacak ve arşivler küçük resim ve dilimleyici meta verileri içerecek.",fail:`Yazıcı bu seçeneğin kapalı olduğunu bildiriyor. "Gönderilen dosyaları harici depolamada sakla" seçeneğini etkinleştirin — yeni donanım yazılımlarında (P2S 01.02 / Bambu Studio 2.6+) düğme yazıcının Baskı Ayarları'nda; eski sürümlerde Bambu Studio / OrcaSlicer'in Cihaz sekmesindedir. Bu seçenek olmadan, arşivlenen her baskıda küçük resim ve dilimleyici meta verisi olmayacak.`,skip:"Kontrol edilmedi — etkin bir MQTT bağlantısı gerekli. Bu ayarın yalnızca dilimleyicide bulunduğu eski dilimleyicilerde yazıcı bunu bildirmez, bu nedenle seçenek kapalı olsa bile bu kontrol geçer — kurulum adımı 4'ü manuel olarak doğrulayın."},port_rtsps:{title:"Kamera portu (RTSPS 322)",pass:"Erişilebilir — kamera akışı çalışacak.",warn:"Port 322 erişilemez. Canlı kamera görünümü çalışmayacak. Bu, baskıyı etkilemez."},network_mode:{title:"Docker ağ modu",pass:"Ana bilgisayar ağ modunda çalışıyor.",warn:'Bambuddy, Docker köprü ağı kullanılarak çalışıyor. Yazıcı keşfi ve Sanal Yazıcı, ana bilgisayar ağ modu gerektirir — konteyneri "network_mode: host" ile yeniden oluşturun.',skip:"Docker'da çalışmıyor — uygulanamaz."},subnet:{title:"Ağ alt ağı",pass:"Yazıcı ve Bambuddy aynı alt ağda.",warn:"Yazıcı ({{printer_ip}}) ve Bambuddy ({{host_ip}}) farklı alt ağlarda. Alt ağlar arasında yönlendirme yapılandırılmazsa birbirlerine erişemeyebilirler.",skip:"Alt ağ belirlenemedi — atlandı."},mqtt_auth:{title:"Yazıcı kimlik bilgileri",pass:"Yazıcı bağlantıyı kabul etti.",fail:"Yazıcı erişilebilir ancak bağlantıyı reddetti. Büyük olasılıkla erişim kodu veya seri numarası yanlış. Erişim kodu, Geliştirici Modu her açılıp kapatıldığında değişir — yazıcı ekranından yeniden kopyalayın.",skip:"Kontrol edilmedi — yazıcıya erişilemedi."},developer_mode:{title:"LAN Geliştirici Modu",pass:"Geliştirici Modu etkin.",fail:"Yazıcıda Geliştirici Modu KAPALI. Yazıcının LAN ayarlarında etkinleştirin — ve OK ile onaylayın. Bu olmadan baskılar başlamayacak.",skip:"Kontrol edilemedi — yazıcıya canlı bir bağlantı gerektirir."},printer_publishing:{title:"Yazıcı durum yayını yapıyor",pass:"Yazıcı durum güncellemelerini yayınlıyor — AMS, filamentler ve K profilleri dilimleyiciye doğru şekilde yansıtılacak.",fail:"MQTT aracısı bağlantıyı kabul etti, ancak yazıcı hiç durum raporu yayınlamadı. Bu neredeyse her zaman yanlış ya da büyük/küçük harf hatalı bir seri numarasından kaynaklanır — device/