@camstack/addon-admin-ui 1.2.494 → 1.2.496
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/assets/{AddonAssetIcon-CgWjLKk-.js → AddonAssetIcon-DIGI0J-I.js} +1 -1
- package/dist/assets/{Addons-DvVQLHYU.js → Addons-BXBVaw0C.js} +1 -1
- package/dist/assets/{AdminPage-C0r5zsSv.js → AdminPage-rM4C_UeK.js} +1 -1
- package/dist/assets/{AdminSectionedPage-DwsUo4EW.js → AdminSectionedPage-hs_sRKSH.js} +1 -1
- package/dist/assets/{AiProfiles-CCNMFTxn.js → AiProfiles-FyDOlZrB.js} +1 -1
- package/dist/assets/BrokerEditorDialog-CpjjEowc.js +1 -0
- package/dist/assets/{Build-CtmT_R8_.js → Build-BHWi77ox.js} +1 -1
- package/dist/assets/{Calendars-Ao-tS0PF.js → Calendars-DpfM0tWi.js} +1 -1
- package/dist/assets/{Cluster-CE81o26H.js → Cluster-CGbK_RcF.js} +1 -1
- package/dist/assets/{CompositionBlockEditor-B8u93ElJ.js → CompositionBlockEditor-C-oGyTOT.js} +1 -1
- package/dist/assets/{CompositionEditorPage-6AUfHY1o.js → CompositionEditorPage--pC-fQTK.js} +1 -1
- package/dist/assets/{Data-CqaMZGAp.js → Data-5YjPSX0u.js} +1 -1
- package/dist/assets/{DeviceDetail-2kN5rJi9.js → DeviceDetail-MgYrZi-H.js} +2 -2
- package/dist/assets/{DeviceDoActionFields-DjenLQhb.js → DeviceDoActionFields-C8dC5weu.js} +1 -1
- package/dist/assets/{Devices-Dr7eLqzX.js → Devices-BDxPWKee.js} +1 -1
- package/dist/assets/{EmbedPlayerPage-BLEcd92w.js → EmbedPlayerPage-CXfoZEoy.js} +1 -1
- package/dist/assets/{HelperWizard-ORnD7Go1.js → HelperWizard-DPb6SH1D.js} +1 -1
- package/dist/assets/{History-C5IUXh_z.js → History-CgY-ADwx.js} +1 -1
- package/dist/assets/{Identity-CgLht7I_.js → Identity-CngM910j.js} +1 -1
- package/dist/assets/{IntegrationDetail-D4V0UFvA.js → IntegrationDetail-tLO3mmbA.js} +1 -1
- package/dist/assets/{IntegrationHub-DYPM9n0O.js → IntegrationHub-M6BlF8kI.js} +1 -1
- package/dist/assets/{Integrations-DR8lOmp_.js → Integrations-CEbaKS2K.js} +1 -1
- package/dist/assets/{Integrations-CZIgGa_n.js → Integrations-lFHvSwS1.js} +1 -1
- package/dist/assets/{Library-BGVlY4Gb.js → Library-owv8dCJn.js} +1 -1
- package/dist/assets/{Locations-Bs7rPoST.js → Locations-CIbPLu6Y.js} +1 -1
- package/dist/assets/{Logs-Chpfmf_U.js → Logs-BkVwtIoJ.js} +1 -1
- package/dist/assets/{MaskShapeCanvas-CEO3VTVU.js → MaskShapeCanvas-BdJHOhru.js} +1 -1
- package/dist/assets/{MotionZonesSettings-Dxe-b_w-.js → MotionZonesSettings-eigY1-yb.js} +1 -1
- package/dist/assets/{MyAccess-BzV_CLiS.js → MyAccess-kMqHvFdO.js} +1 -1
- package/dist/assets/{Network-CXXF6pmK.js → Network-DNgds3SY.js} +1 -1
- package/dist/assets/{NodeAddonsSettingsPanel-CK8tFXrH.js → NodeAddonsSettingsPanel-BTLr6xzq.js} +1 -1
- package/dist/assets/{Notifications-CT_wLBqJ.js → Notifications-3HA167No.js} +1 -1
- package/dist/assets/{Pipeline-BmVY_rER.js → Pipeline-Duxnzw0u.js} +1 -1
- package/dist/assets/{PrivacyMaskSettings--AmTjVWH.js → PrivacyMaskSettings-DQxuAo8I.js} +1 -1
- package/dist/assets/{Recordings-eoBn0hvv.js → Recordings-DNM6KFbT.js} +1 -1
- package/dist/assets/{ScanNetworkModal-I91r0-sE.js → ScanNetworkModal-DGxeTl6N.js} +1 -1
- package/dist/assets/{SceneMonitorEditor-BwCuyEh-.js → SceneMonitorEditor-D7lPRwkb.js} +1 -1
- package/dist/assets/{SessionsList-BOUHWu5D.js → SessionsList-v1GWS7lS.js} +1 -1
- package/dist/assets/{Showroom-NWNa0awE.js → Showroom-BQjG5SEZ.js} +1 -1
- package/dist/assets/{System-CQBZlh0y.js → System-1vAVXVvO.js} +1 -1
- package/dist/assets/{Terminal-BfKVG_Bt.js → Terminal-CAeZSUkp.js} +1 -1
- package/dist/assets/{Viewer-CkBtCp_Y.js → Viewer-CoaaY2ah.js} +1 -1
- package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-C14xaSJf.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-Dt6nbTOI.js} +1 -1
- package/dist/assets/{addon-icons-context-OCEvLUMR.js → addon-icons-context-B-CR3D5Y.js} +1 -1
- package/dist/assets/{archive-BbyhgjWL.js → archive-Caq0fiUd.js} +1 -1
- package/dist/assets/{assignment-candidates-DUP2GOWL.js → assignment-candidates-oUf0MmfV.js} +1 -1
- package/dist/assets/{authed-media-cTjpVxGV.js → authed-media-rsowuJD_.js} +1 -1
- package/dist/assets/{bell-off-BSZr41wl.js → bell-off-7NO0NCk5.js} +1 -1
- package/dist/assets/{board-model-D7qG11hh.js → board-model-CXoBU-My.js} +1 -1
- package/dist/assets/{boxes-C9MrE-GD.js → boxes-CfX2DaXN.js} +1 -1
- package/dist/assets/circle-slash-CNw3qaX5.js +1 -0
- package/dist/assets/client-UkFHArbd.js +648 -0
- package/dist/assets/{cloud-upload-DQNky4H3.js → cloud-upload-Bha3MQZ0.js} +1 -1
- package/dist/assets/crop-KD442bNz.js +1 -0
- package/dist/assets/{device-integration-icon-C7KbduhE.js → device-integration-icon-Ca6J7BrE.js} +1 -1
- package/dist/assets/device-picker-model-C0bjqXeS.js +1 -0
- package/dist/assets/{dist-ByomGInQ.js → dist-Bm86l9VH.js} +1 -1
- package/dist/assets/dist-Db-bCS6Y.js +648 -0
- package/dist/assets/{eraser-CUFimZpD.js → eraser-DcRrD8r0.js} +1 -1
- package/dist/assets/{format-C6yn9uIb.js → format-B-Mz_Gp5.js} +1 -1
- package/dist/assets/{hard-drive-download-BObH6Vyd.js → hard-drive-download-Ds3LLqZ_.js} +1 -1
- package/dist/assets/{hostInit-CCQcehf1.js → hostInit-CLJxS8C0.js} +1 -1
- package/dist/assets/i18n-Dodsa0QQ.js +1 -0
- package/dist/assets/{icons-oE92iMVl.js → icons-CxLU2kUU.js} +1 -1
- package/dist/assets/index-BPZW59_u.css +2 -0
- package/dist/assets/index-DAYRmkvA.js +4 -0
- package/dist/assets/{key-JyYB9gnI.js → key-CPCN1bXO.js} +1 -1
- package/dist/assets/{key-round-CBNBBS9z.js → key-round-DSSlw3bb.js} +1 -1
- package/dist/assets/{layers-BSjuwfeB.js → layers-Au38YP9x.js} +1 -1
- package/dist/assets/{linked-devices-model-CDombuta.js → linked-devices-model-CAcKgihZ.js} +1 -1
- package/dist/assets/{list-ordered-BNIrg43G.js → list-ordered-BcEAxRcq.js} +1 -1
- package/dist/assets/{location-owned-usage-Ci-dk4hV.js → location-owned-usage-DC8YfZHt.js} +1 -1
- package/dist/assets/{log-in-CMkgyQRs.js → log-in-BIF-VHyB.js} +1 -1
- package/dist/assets/{memory-stick-wHF0f3FH.js → memory-stick-dd2TtD8X.js} +1 -1
- package/dist/assets/{message-square-plus-DkMEFxkw.js → message-square-plus--EqwnnsY.js} +1 -1
- package/dist/assets/{mf-entry-bootstrap-0-ca9b1086.js → mf-entry-bootstrap-0-d8302735.js} +2 -2
- package/dist/assets/{mic-off-8IZcOYj3.js → mic-off-C4AEP_LS.js} +1 -1
- package/dist/assets/{monitor-off-CLYkAPWS.js → monitor-off-BMFLRGf9.js} +1 -1
- package/dist/assets/{monitor-smartphone-BAM_Pnvy.js → monitor-smartphone-BKJ1_LnF.js} +1 -1
- package/dist/assets/mount-C0bjqXeS.js +1 -0
- package/dist/assets/{player-overlays-C0MwGGCz.js → player-overlays-DVETFMIk.js} +1 -1
- package/dist/assets/{recycle-C1WW7862.js → recycle-BayFw4ej.js} +1 -1
- package/dist/assets/remoteEntry-BkQqqD-X.js +1 -0
- package/dist/assets/{scan-eye-Dt5KUwOk.js → scan-eye-BrzMkZIm.js} +1 -1
- package/dist/assets/{scissors-BDs6D_EV.js → scissors-Cdea5FpP.js} +1 -1
- package/dist/assets/{search-x-D22Vg4Xu.js → search-x-D5U75yFR.js} +1 -1
- package/dist/assets/{send-DdEV1Nk_.js → send-DdLpBXJo.js} +1 -1
- package/dist/assets/{settings-2-B7DN8MZt.js → settings-2-E7MRkJ8L.js} +1 -1
- package/dist/assets/{sigma-B9KtLJQ5.js → sigma-DQ448qdQ.js} +1 -1
- package/dist/assets/{speaker-vP0Jzm3D.js → speaker-8vDFm1aL.js} +1 -1
- package/dist/assets/src-CJMN3ac7.js +67 -0
- package/dist/assets/{step-inspector-model-Dww7BytV.js → step-inspector-model-DrrErQ-Z.js} +1 -1
- package/dist/assets/{table-2-BTRcysei.js → table-2-BWAe4fOI.js} +1 -1
- package/dist/assets/{timer-reset-Byxo5HZN.js → timer-reset-BlrgM8RC.js} +1 -1
- package/dist/assets/{ungroup-DHuQH4zo.js → ungroup-D9nsaCkT.js} +1 -1
- package/dist/assets/{unlink-CLur1WlL.js → unlink-BZggCuRp.js} +1 -1
- package/dist/assets/{usb-6aY8GAbW.js → usb-CnowURs8.js} +1 -1
- package/dist/assets/{use-scenes-feed-D_SlfxL2.js → use-scenes-feed-CKTWN5k9.js} +1 -1
- package/dist/assets/{use-stationary-objects-C0B5p2V8.js → use-stationary-objects-CFZh0JGL.js} +1 -1
- package/dist/assets/useEventInvalidation-C0bjqXeS.js +1 -0
- package/dist/assets/{useNodeUrlSelection-BMV4SR7x.js → useNodeUrlSelection-CPhmr6x9.js} +1 -1
- package/dist/assets/user-round-DX7v4O3o.js +1 -0
- package/dist/assets/{user-x-4Hfj3QdW.js → user-x-S0MRC6zp.js} +1 -1
- package/dist/assets/{video-6lAlm9YD.js → video-oLlCkBIP.js} +1 -1
- package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-rJFxt79Z.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-Ddnry646.js} +2 -2
- package/dist/index.html +10 -10
- package/dist/server/addon.js +676 -76
- package/package.json +1 -1
- package/dist/assets/BrokerEditorDialog-C0wwGmOj.js +0 -1
- package/dist/assets/circle-slash-kaaJHDJP.js +0 -1
- package/dist/assets/client-CoTSmvjZ.js +0 -358
- package/dist/assets/crop-CPejcRNN.js +0 -1
- package/dist/assets/device-picker-model-H2_vXoQ4.js +0 -1
- package/dist/assets/dist-yzJdpluK.js +0 -358
- package/dist/assets/i18n-DxqJiWy8.js +0 -1
- package/dist/assets/index-BVZuhx_2.js +0 -4
- package/dist/assets/index-DrkhFGtr.css +0 -2
- package/dist/assets/mount-H2_vXoQ4.js +0 -1
- package/dist/assets/remoteEntry-BxPdbRHH.js +0 -1
- package/dist/assets/src-Cxyx0zt_.js +0 -67
- package/dist/assets/useEventInvalidation-H2_vXoQ4.js +0 -1
- package/dist/assets/user-round-Cktilqeo.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./useTranslation-BJr-n0es.js";var t=e=>typeof e==`string`,n=()=>{let e,t,n=new Promise((n,r)=>{e=n,t=r});return n.resolve=e,n.reject=t,n},r=e=>e==null?``:String(e),i=(e,t,n)=>{e.forEach(e=>{t[e]&&(n[e]=t[e])})},a=/###/g,o=e=>e&&e.includes(`###`)?e.replace(a,`.`):e,s=e=>!e||t(e),c=(e,n,r)=>{let i=t(n)?n.split(`.`):n,a=0;for(;a<i.length-1;){if(s(e))return{};let t=o(i[a]);!e[t]&&r&&(e[t]=new r),e=Object.prototype.hasOwnProperty.call(e,t)?e[t]:{},++a}return s(e)?{}:{obj:e,k:o(i[a])}},l=(e,t,n)=>{let{obj:r,k:i}=c(e,t,Object);if(r!==void 0||t.length===1){r[i]=n;return}let a=t[t.length-1],o=t.slice(0,t.length-1),s=c(e,o,Object);for(;s.obj===void 0&&o.length;)a=`${o[o.length-1]}.${a}`,o=o.slice(0,o.length-1),s=c(e,o,Object),s?.obj&&s.obj[`${s.k}.${a}`]!==void 0&&(s.obj=void 0);s.obj[`${s.k}.${a}`]=n},u=(e,t,n,r)=>{let{obj:i,k:a}=c(e,t,Object);i[a]=i[a]||[],i[a].push(n)},d=(e,t)=>{let{obj:n,k:r}=c(e,t);if(n&&Object.prototype.hasOwnProperty.call(n,r))return n[r]},f=(e,t,n)=>{let r=d(e,n);return r===void 0?d(t,n):r},p=(e,n,r)=>{for(let i in n)i!==`__proto__`&&i!==`constructor`&&(i in e?t(e[i])||e[i]instanceof String||t(n[i])||n[i]instanceof String?r&&(e[i]=n[i]):p(e[i],n[i],r):e[i]=n[i]);return e},m=e=>e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,`\\$&`),h={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`,"/":`/`},g=e=>t(e)?e.replace(/[&<>"'\/]/g,e=>h[e]):e,_=class{constructor(e){this.capacity=e,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(e){let t=this.regExpMap.get(e);if(t!==void 0)return t;let n=new RegExp(e);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(e,n),this.regExpQueue.push(e),n}},v=[` `,`,`,`?`,`!`,`;`],y=new _(20),b=(e,t,n)=>{t||=``,n||=``;let r=v.filter(e=>!t.includes(e)&&!n.includes(e));if(r.length===0)return!0;let i=y.getRegExp(`(${r.map(e=>e===`?`?`\\?`:e).join(`|`)})`),a=!i.test(e);if(!a){let t=e.indexOf(n);t>0&&!i.test(e.substring(0,t))&&(a=!0)}return a},x=(e,t,n=`.`)=>{if(!e)return;if(e[t])return Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0;let r=t.split(n),i=e;for(let e=0;e<r.length;){if(!i||typeof i!=`object`)return;let t,a=``;for(let o=e;o<r.length;++o)if(o!==e&&(a+=n),a+=r[o],t=i[a],t!==void 0){if([`string`,`number`,`boolean`].includes(typeof t)&&o<r.length-1)continue;e+=o-e+1;break}i=t}return i},S=e=>e?.replace(/_/g,`-`),C={type:`logger`,log(e){this.output(`log`,e)},warn(e){this.output(`warn`,e)},error(e){this.output(`error`,e)},output(e,t){console?.[e]?.apply?.(console,t)}},w=new class e{constructor(e,t={}){this.init(e,t)}init(e,t={}){this.prefix=t.prefix||`i18next:`,this.logger=e||C,this.options=t,this.debug=t.debug}log(...e){return this.forward(e,`log`,``,!0)}warn(...e){return this.forward(e,`warn`,``,!0)}error(...e){return this.forward(e,`error`,``)}deprecate(...e){return this.forward(e,`warn`,`WARNING DEPRECATED: `,!0)}forward(e,n,r,i){return i&&!this.debug?null:(e=e.map(e=>t(e)?e.replace(/[\r\n\x00-\x1F\x7F]/g,` `):e),t(e[0])&&(e[0]=`${r}${this.prefix} ${e[0]}`),this.logger[n](e))}create(t){return new e(this.logger,{prefix:`${this.prefix}:${t}:`,...this.options})}clone(t){return t||=this.options,t.prefix=t.prefix||this.prefix,new e(this.logger,t)}},T=class{constructor(){this.observers={}}on(e,t){return e.split(` `).forEach(e=>{this.observers[e]||(this.observers[e]=new Map);let n=this.observers[e].get(t)||0;this.observers[e].set(t,n+1)}),this}off(e,t){if(this.observers[e]){if(!t){delete this.observers[e];return}this.observers[e].delete(t)}}once(e,t){let n=(...r)=>{t(...r),this.off(e,n)};return this.on(e,n),this}emit(e,...t){this.observers[e]&&Array.from(this.observers[e].entries()).forEach(([e,n])=>{for(let r=0;r<n;r++)e(...t)}),this.observers[`*`]&&Array.from(this.observers[`*`].entries()).forEach(([n,r])=>{for(let i=0;i<r;i++)n(e,...t)})}},E=class extends T{constructor(e,t={ns:[`translation`],defaultNS:`translation`}){super(),this.data=e||{},this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator=`.`),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(e){this.options.ns.includes(e)||this.options.ns.push(e)}removeNamespaces(e){let t=this.options.ns.indexOf(e);t>-1&&this.options.ns.splice(t,1)}getResource(e,n,r,i={}){let a=i.keySeparator===void 0?this.options.keySeparator:i.keySeparator,o=i.ignoreJSONStructure===void 0?this.options.ignoreJSONStructure:i.ignoreJSONStructure,s;e.includes(`.`)?s=e.split(`.`):(s=[e,n],r&&(Array.isArray(r)?s.push(...r):t(r)&&a?s.push(...r.split(a)):s.push(r)));let c=d(this.data,s);return!c&&!n&&!r&&e.includes(`.`)&&(e=s[0],n=s[1],r=s.slice(2).join(`.`)),c||!o||!t(r)?c:x(this.data?.[e]?.[n],r,a)}addResource(e,t,n,r,i={silent:!1}){let a=i.keySeparator===void 0?this.options.keySeparator:i.keySeparator,o=[e,t];n&&(o=o.concat(a?n.split(a):n)),e.includes(`.`)&&(o=e.split(`.`),r=t,t=o[1]),this.addNamespaces(t),l(this.data,o,r),i.silent||this.emit(`added`,e,t,n,r)}addResources(e,n,r,i={silent:!1}){for(let i in r)(t(r[i])||Array.isArray(r[i]))&&this.addResource(e,n,i,r[i],{silent:!0});i.silent||this.emit(`added`,e,n,r)}addResourceBundle(e,t,n,r,i,a={silent:!1,skipCopy:!1}){let o=[e,t];e.includes(`.`)&&(o=e.split(`.`),r=n,n=t,t=o[1]),this.addNamespaces(t);let s=d(this.data,o)||{};a.skipCopy||(n=JSON.parse(JSON.stringify(n))),r?p(s,n,i):s={...s,...n},l(this.data,o,s),a.silent||this.emit(`added`,e,t,n)}removeResourceBundle(e,t){this.hasResourceBundle(e,t)&&delete this.data[e][t],this.removeNamespaces(t),this.emit(`removed`,e,t)}hasResourceBundle(e,t){return this.getResource(e,t)!==void 0}getResourceBundle(e,t){return t||=this.options.defaultNS,this.getResource(e,t)}getDataByLanguage(e){return this.data[e]}hasLanguageSomeTranslations(e){let t=this.getDataByLanguage(e);return!!(t&&Object.keys(t)||[]).find(e=>t[e]&&Object.keys(t[e]).length>0)}toJSON(){return this.data}},D={processors:{},addPostProcessor(e){this.processors[e.name]=e},handle(e,t,n,r,i){return e.forEach(e=>{t=this.processors[e]?.process(t,n,r,i)??t}),t}},O=Symbol(`i18next/PATH_KEY`);function k(){let e=[],t=Object.create(null),n;return t.get=(r,i)=>(n?.revoke?.(),i===O?e:(e.push(i),n=Proxy.revocable(r,t),n.proxy)),Proxy.revocable(Object.create(null),t).proxy}function A(e,t){let{[O]:n}=e(k()),r=t?.keySeparator??`.`,i=t?.nsSeparator??`:`,a=t?.enableSelector===`strict`;if(n.length>1&&i){let e=t?.ns,o=a?Array.isArray(e)?e:e?[e]:null:Array.isArray(e)?e:null;if(o&&(a?o:o.length>1?o.slice(1):[]).includes(n[0]))return`${n[0]}${i}${n.slice(1).join(r)}`}return n.join(r)}var j=e=>!t(e)&&typeof e!=`boolean`&&typeof e!=`number`,M=class e extends T{constructor(e,t={}){super(),i([`resourceStore`,`languageUtils`,`pluralResolver`,`interpolator`,`backendConnector`,`i18nFormat`,`utils`],e,this),this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator=`.`),this.logger=w.create(`translator`),this.checkedLoadedFor={}}changeLanguage(e){e&&(this.language=e)}exists(e,t={interpolation:{}}){let n={...t};if(e==null)return!1;let r=this.resolve(e,n);if(r?.res===void 0)return!1;let i=j(r.res);return!(n.returnObjects===!1&&i)}extractFromKey(e,n){let r=n.nsSeparator===void 0?this.options.nsSeparator:n.nsSeparator;r===void 0&&(r=`:`);let i=n.keySeparator===void 0?this.options.keySeparator:n.keySeparator,a=n.ns||this.options.defaultNS||[],o=r&&e.includes(r),s=!this.options.userDefinedKeySeparator&&!n.keySeparator&&!this.options.userDefinedNsSeparator&&!n.nsSeparator&&!b(e,r,i);if(o&&!s){let n=e.match(this.interpolator.nestingRegexp);if(n&&n.length>0)return{key:e,namespaces:t(a)?[a]:a};let o=e.split(r);(r!==i||r===i&&this.options.ns.includes(o[0]))&&(a=o.shift()),e=o.join(i)}return{key:e,namespaces:t(a)?[a]:a}}translate(n,r,i){let a=typeof r==`object`?{...r}:r;if(typeof a!=`object`&&this.options.overloadTranslationOptionHandler&&(a=this.options.overloadTranslationOptionHandler(arguments)),typeof a==`object`&&(a={...a}),a||={},n==null)return``;typeof n==`function`&&(n=A(n,{...this.options,...a})),Array.isArray(n)||(n=[String(n)]),n=n.map(e=>typeof e==`function`?A(e,{...this.options,...a}):String(e));let o=a.returnDetails===void 0?this.options.returnDetails:a.returnDetails,s=a.keySeparator===void 0?this.options.keySeparator:a.keySeparator,{key:c,namespaces:l}=this.extractFromKey(n[n.length-1],a),u=l[l.length-1],d=a.nsSeparator===void 0?this.options.nsSeparator:a.nsSeparator;d===void 0&&(d=`:`);let f=a.lng||this.language,p=a.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(f?.toLowerCase()===`cimode`)return p?o?{res:`${u}${d}${c}`,usedKey:c,exactUsedKey:c,usedLng:f,usedNS:u,usedParams:this.getUsedParamsDetails(a)}:`${u}${d}${c}`:o?{res:c,usedKey:c,exactUsedKey:c,usedLng:f,usedNS:u,usedParams:this.getUsedParamsDetails(a)}:c;let m=this.resolve(n,a),h=m?.res,g=m?.usedKey||c,_=m?.exactUsedKey||c,v=[`[object Number]`,`[object Function]`,`[object RegExp]`],y=a.joinArrays===void 0?this.options.joinArrays:a.joinArrays,b=!this.i18nFormat||this.i18nFormat.handleAsObject,x=a.count!==void 0&&!t(a.count),S=e.hasDefaultValue(a),C=x?this.pluralResolver.getSuffix(f,a.count,a):``,w=a.ordinal&&x?this.pluralResolver.getSuffix(f,a.count,{ordinal:!1}):``,T=x&&!a.ordinal&&a.count===0,E=T&&a[`defaultValue${this.options.pluralSeparator}zero`]||a[`defaultValue${C}`]||a[`defaultValue${w}`]||a.defaultValue,D=h;b&&!h&&S&&(D=E);let O=j(D),k=Object.prototype.toString.apply(D);if(b&&D&&O&&!v.includes(k)&&!(t(y)&&Array.isArray(D))){if(!a.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn(`accessing an object - but returnObjects options is not enabled!`);let e=this.options.returnedObjectHandler?this.options.returnedObjectHandler(g,D,{...a,ns:l}):`key '${c} (${this.language})' returned an object instead of string.`;return o?(m.res=e,m.usedParams=this.getUsedParamsDetails(a),m):e}if(s){let e=Array.isArray(D),t=e?[]:{},n=e?_:g;for(let e in D)if(Object.prototype.hasOwnProperty.call(D,e)){let r=`${n}${s}${e}`;S&&!h?t[e]=this.translate(r,{...a,defaultValue:j(E)?E[e]:void 0,joinArrays:!1,ns:l}):t[e]=this.translate(r,{...a,joinArrays:!1,ns:l}),t[e]===r&&(t[e]=D[e])}h=t}}else if(b&&t(y)&&Array.isArray(h))h=h.join(y),h&&=this.extendTranslation(h,n,a,i);else{let e=!1,t=!1;!this.isValidLookup(h)&&S&&(e=!0,h=E),this.isValidLookup(h)||(t=!0,h=c);let r=(a.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&t?void 0:h,o=S&&E!==h&&this.options.updateMissing;if(t||e||o){if(this.logger.log(o?`updateKey`:`missingKey`,f,u,x&&!o?`${c}${this.pluralResolver.getSuffix(f,a.count,a)}`:c,o?E:h),s){let e=this.resolve(c,{...a,keySeparator:!1});e&&e.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 e=[],t=this.languageUtils.getFallbackCodes(this.options.fallbackLng,a.lng||this.language);if(this.options.saveMissingTo===`fallback`&&t&&t[0])for(let n=0;n<t.length;n++)e.push(t[n]);else this.options.saveMissingTo===`all`?e=this.languageUtils.toResolveHierarchy(a.lng||this.language):e.push(a.lng||this.language);let n=(e,t,n)=>{let i=S&&n!==h?n:r;this.options.missingKeyHandler?this.options.missingKeyHandler(e,u,t,i,o,a):this.backendConnector?.saveMissing&&this.backendConnector.saveMissing(e,u,t,i,o,a),this.emit(`missingKey`,e,u,t,h)};this.options.saveMissing&&(this.options.saveMissingPlurals&&x?e.forEach(e=>{let t=this.pluralResolver.getSuffixes(e,a);T&&a[`defaultValue${this.options.pluralSeparator}zero`]&&!t.includes(`${this.options.pluralSeparator}zero`)&&t.push(`${this.options.pluralSeparator}zero`),t.forEach(t=>{n([e],c+t,a[`defaultValue${t}`]||E)})}):n(e,c,E))}h=this.extendTranslation(h,n,a,m,i),t&&h===c&&this.options.appendNamespaceToMissingKey&&(h=`${u}${d}${c}`),(t||e)&&this.options.parseMissingKeyHandler&&(h=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${u}${d}${c}`:c,e?h:void 0,a))}return o?(m.res=h,m.usedParams=this.getUsedParamsDetails(a),m):h}extendTranslation(e,n,r,i,a){if(this.i18nFormat?.parse)e=this.i18nFormat.parse(e,{...this.options.interpolation.defaultVariables,...r},r.lng||this.language||i.usedLng,i.usedNS,i.usedKey,{resolved:i});else if(!r.skipInterpolation){r.interpolation&&this.interpolator.init({...r,interpolation:{...this.options.interpolation,...r.interpolation}});let o=t(e)&&(r?.interpolation?.skipOnVariables===void 0?this.options.interpolation.skipOnVariables:r.interpolation.skipOnVariables),s;if(o){let t=e.match(this.interpolator.nestingRegexp);s=t&&t.length}let c=r.replace&&!t(r.replace)?r.replace:r;if(this.options.interpolation.defaultVariables&&(c={...this.options.interpolation.defaultVariables,...c}),e=this.interpolator.interpolate(e,c,r.lng||this.language||i.usedLng,r),o){let t=e.match(this.interpolator.nestingRegexp),n=t&&t.length;s<n&&(r.nest=!1)}!r.lng&&i&&i.res&&(r.lng=this.language||i.usedLng),r.nest!==!1&&(e=this.interpolator.nest(e,(...e)=>a?.[0]===e[0]&&!r.context?(this.logger.warn(`It seems you are nesting recursively key: ${e[0]} in key: ${n[0]}`),null):this.translate(...e,n),r)),r.interpolation&&this.interpolator.reset()}let o=r.postProcess||this.options.postProcess,s=t(o)?[o]:o;return e!=null&&s?.length&&r.applyPostProcessor!==!1&&(e=D.handle(s,e,n,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...i,usedParams:this.getUsedParamsDetails(r)},...r}:r,this)),e}resolve(e,n={}){let r,i,a,o,s;return t(e)&&(e=[e]),Array.isArray(e)&&(e=e.map(e=>typeof e==`function`?A(e,{...this.options,...n}):e)),e.forEach(e=>{if(this.isValidLookup(r))return;let c=this.extractFromKey(e,n),l=c.key;i=l;let u=c.namespaces;this.options.fallbackNS&&(u=u.concat(this.options.fallbackNS));let d=n.count!==void 0&&!t(n.count),f=d&&!n.ordinal&&n.count===0,p=n.context!==void 0&&(t(n.context)||typeof n.context==`number`)&&n.context!==``,m=n.lngs?n.lngs:this.languageUtils.toResolveHierarchy(n.lng||this.language,n.fallbackLng);u.forEach(e=>{this.isValidLookup(r)||(s=e,!this.checkedLoadedFor[`${m[0]}-${e}`]&&this.utils?.hasLoadedNamespace&&!this.utils?.hasLoadedNamespace(s)&&(this.checkedLoadedFor[`${m[0]}-${e}`]=!0,this.logger.warn(`key "${i}" for languages "${m.join(`, `)}" won't get resolved as namespace "${s}" 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!!!`)),m.forEach(t=>{if(this.isValidLookup(r))return;o=t;let i=[l];if(this.i18nFormat?.addLookupKeys)this.i18nFormat.addLookupKeys(i,l,t,e,n);else{let e;d&&(e=this.pluralResolver.getSuffix(t,n.count,n));let r=`${this.options.pluralSeparator}zero`,a=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(d&&(n.ordinal&&e.startsWith(a)&&i.push(l+e.replace(a,this.options.pluralSeparator)),i.push(l+e),f&&i.push(l+r)),p){let t=`${l}${this.options.contextSeparator||`_`}${n.context}`;i.push(t),d&&(n.ordinal&&e.startsWith(a)&&i.push(t+e.replace(a,this.options.pluralSeparator)),i.push(t+e),f&&i.push(t+r))}}let s;for(;s=i.pop();)this.isValidLookup(r)||(a=s,r=this.getResource(t,e,s,n))}))})}),{res:r,usedKey:i,exactUsedKey:a,usedLng:o,usedNS:s}}isValidLookup(e){return e!==void 0&&!(!this.options.returnNull&&e===null)&&!(!this.options.returnEmptyString&&e===``)}getResource(e,t,n,r={}){return this.i18nFormat?.getResource?this.i18nFormat.getResource(e,t,n,r):this.resourceStore.getResource(e,t,n,r)}getUsedParamsDetails(e={}){let n=[`defaultValue`,`ordinal`,`context`,`replace`,`lng`,`lngs`,`fallbackLng`,`ns`,`keySeparator`,`nsSeparator`,`returnObjects`,`returnDetails`,`joinArrays`,`postProcess`,`interpolation`],r=e.replace&&!t(e.replace),i=r?e.replace:e;if(r&&e.count!==void 0&&(i.count=e.count),this.options.interpolation.defaultVariables&&(i={...this.options.interpolation.defaultVariables,...i}),!r){i={...i};for(let e of n)delete i[e]}return i}static hasDefaultValue(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t)&&t.startsWith(`defaultValue`)&&e[t]!==void 0)return!0;return!1}},N=class{constructor(e){this.options=e,this.supportedLngs=this.options.supportedLngs||!1,this.logger=w.create(`languageUtils`)}getScriptPartFromCode(e){if(e=S(e),!e||!e.includes(`-`))return null;let t=e.split(`-`);return t.length===2||(t.pop(),t[t.length-1].toLowerCase()===`x`)?null:this.formatLanguageCode(t.join(`-`))}getLanguagePartFromCode(e){if(e=S(e),!e||!e.includes(`-`))return e;let t=e.split(`-`);return this.formatLanguageCode(t[0])}formatLanguageCode(e){if(t(e)&&e.includes(`-`)){let t;try{t=Intl.getCanonicalLocales(e)[0]}catch{}return t&&this.options.lowerCaseLng&&(t=t.toLowerCase()),t||(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.includes(e)}getBestMatchFromCodes(e){if(!e)return null;let t;return e.forEach(e=>{if(t)return;let n=this.formatLanguageCode(e);(!this.options.supportedLngs||this.isSupportedCode(n))&&(t=n)}),!t&&this.options.supportedLngs&&e.forEach(e=>{if(t)return;let n=this.getScriptPartFromCode(e);if(this.isSupportedCode(n))return t=n;let r=this.getLanguagePartFromCode(e);if(this.isSupportedCode(r))return t=r;t=this.options.supportedLngs.find(e=>e===r?!0:!e.includes(`-`)&&!r.includes(`-`)?!1:!!(e.includes(`-`)&&!r.includes(`-`)&&e.slice(0,e.indexOf(`-`))===r||e.startsWith(r)&&r.length>1))}),t||=this.getFallbackCodes(this.options.fallbackLng)[0],t}getFallbackCodes(e,n){if(!e)return[];if(typeof e==`function`&&(e=e(n)),t(e)&&(e=[e]),Array.isArray(e))return e;if(!n)return e.default||[];let r=e[n];return r||=e[this.getScriptPartFromCode(n)],r||=e[this.formatLanguageCode(n)],r||=e[this.getLanguagePartFromCode(n)],r||=e.default,r||[]}toResolveHierarchy(e,n){let r=this.getFallbackCodes((n===!1?[]:n)||this.options.fallbackLng||[],e),i=[],a=e=>{e&&(this.isSupportedCode(e)?i.push(e):this.logger.warn(`rejecting language code not found in supportedLngs: ${e}`))};return t(e)&&(e.includes(`-`)||e.includes(`_`))?(this.options.load!==`languageOnly`&&a(this.formatLanguageCode(e)),this.options.load!==`languageOnly`&&this.options.load!==`currentOnly`&&a(this.getScriptPartFromCode(e)),this.options.load!==`currentOnly`&&a(this.getLanguagePartFromCode(e))):t(e)&&a(this.formatLanguageCode(e)),r.forEach(e=>{i.includes(e)||a(this.formatLanguageCode(e))}),i}},P={zero:0,one:1,two:2,few:3,many:4,other:5},F={select:e=>e===1?`one`:`other`,resolvedOptions:()=>({pluralCategories:[`one`,`other`]})},I=class{constructor(e,t={}){this.languageUtils=e,this.options=t,this.logger=w.create(`pluralResolver`),this.pluralRulesCache={}}clearCache(){this.pluralRulesCache={}}getRule(e,t={}){let n=S(e===`dev`?`en`:e),r=t.ordinal?`ordinal`:`cardinal`,i=JSON.stringify({cleanedCode:n,type:r});if(i in this.pluralRulesCache)return this.pluralRulesCache[i];let a;try{a=new Intl.PluralRules(n,{type:r})}catch{if(typeof Intl>`u`)return this.logger.error(`No Intl support, please use an Intl polyfill!`),F;if(!e.match(/-|_/))return F;let n=this.languageUtils.getLanguagePartFromCode(e);a=this.getRule(n,t)}return this.pluralRulesCache[i]=a,a}needsPlural(e,t={}){let n=this.getRule(e,t);return n||=this.getRule(`dev`,t),n?.resolvedOptions().pluralCategories.length>1}getPluralFormsOfKey(e,t,n={}){return this.getSuffixes(e,n).map(e=>`${t}${e}`)}getSuffixes(e,t={}){let n=this.getRule(e,t);return n||=this.getRule(`dev`,t),n?n.resolvedOptions().pluralCategories.sort((e,t)=>P[e]-P[t]).map(e=>`${this.options.prepend}${t.ordinal?`ordinal${this.options.prepend}`:``}${e}`):[]}getSuffix(e,t,n={}){let r=this.getRule(e,n);return r?`${this.options.prepend}${n.ordinal?`ordinal${this.options.prepend}`:``}${r.select(t)}`:(this.logger.warn(`no plural rule found for: ${e}`),this.getSuffix(`dev`,t,n))}},L=(e,n,r,i=`.`,a=!0)=>{let o=f(e,n,r);return!o&&a&&t(r)&&(o=x(e,r,i),o===void 0&&(o=x(n,r,i))),o},R=e=>e.replace(/\$/g,`$$$$`),z=class{constructor(e={}){this.logger=w.create(`interpolator`),this.options=e,this.format=e?.interpolation?.format||(e=>e),this.init(e)}init(e={}){e.interpolation||={escapeValue:!0};let{escape:t,escapeValue:n,useRawValueToEscape:r,prefix:i,prefixEscaped:a,suffix:o,suffixEscaped:s,formatSeparator:c,unescapeSuffix:l,unescapePrefix:u,nestingPrefix:d,nestingPrefixEscaped:f,nestingSuffix:p,nestingSuffixEscaped:h,nestingOptionsSeparator:_,maxReplaces:v,alwaysFormat:y}=e.interpolation;this.escape=t===void 0?g:t,this.escapeValue=n===void 0?!0:n,this.useRawValueToEscape=r===void 0?!1:r,this.prefix=i?m(i):a||`{{`,this.suffix=o?m(o):s||`}}`,this.formatSeparator=c||`,`,this.unescapePrefix=l?``:u?m(u):`-`,this.unescapeSuffix=this.unescapePrefix?``:l?m(l):``,this.nestingPrefix=d?m(d):f||m(`$t(`),this.nestingSuffix=p?m(p):h||m(`)`),this.nestingOptionsSeparator=_||`,`,this.maxReplaces=v||1e3,this.alwaysFormat=y===void 0?!1:y,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){let e=(e,t)=>e?.source===t?(e.lastIndex=0,e):new RegExp(t,`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,n,i,a){let o,s,c,l=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},u=e=>{if(!e.includes(this.formatSeparator)){let t=L(n,l,e,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(t,void 0,i,{...a,...n,interpolationkey:e}):t}let t=e.split(this.formatSeparator),r=t.shift().trim(),o=t.join(this.formatSeparator).trim();return this.format(L(n,l,r,this.options.keySeparator,this.options.ignoreJSONStructure),o,i,{...a,...n,interpolationkey:r})};this.resetRegExp(),!this.escapeValue&&typeof e==`string`&&/\$t\([^)]*\{[^}]*\{\{/.test(e)&&this.logger.warn(`nesting options string contains interpolated variables with escapeValue: false — if any of those values are attacker-controlled they can inject additional nesting options (e.g. redirect lng/ns). Sanitise untrusted input before passing it to t(), or keep escapeValue: true.`);let d=a?.missingInterpolationHandler||this.options.missingInterpolationHandler,f=a?.interpolation?.skipOnVariables===void 0?this.options.interpolation.skipOnVariables:a.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:e=>R(e)},{regex:this.regexp,safeValue:e=>this.escapeValue?R(this.escape(e)):R(e)}].forEach(n=>{for(c=0;o=n.regex.exec(e);){let i=o[1].trim();if(s=u(i),s===void 0)if(typeof d==`function`){let n=d(e,o,a);s=t(n)?n:``}else if(a&&Object.prototype.hasOwnProperty.call(a,i))s=``;else if(f){s=o[0];continue}else this.logger.warn(`missed to pass in variable ${i} for interpolating ${e}`),s=``;else !t(s)&&!this.useRawValueToEscape&&(s=r(s));let l=n.safeValue(s);if(e=e.replace(o[0],l),f?(n.regex.lastIndex+=s.length,n.regex.lastIndex-=o[0].length):n.regex.lastIndex=0,c++,c>=this.maxReplaces)break}}),e}nest(e,n,i={}){let a,o,s,c=(e,t)=>{let n=this.nestingOptionsSeparator;if(!e.includes(n))return e;let r=e.split(RegExp(`${m(n)}[ ]*{`)),i=`{${r[1]}`;e=r[0],i=this.interpolate(i,s);let a=i.match(/'/g),o=i.match(/"/g);((a?.length??0)%2==0&&!o||(o?.length??0)%2!=0)&&(i=i.replace(/'/g,`"`));try{s=JSON.parse(i),t&&(s={...t,...s})}catch(t){return this.logger.warn(`failed parsing options string in nesting for key ${e}`,t),`${e}${n}${i}`}return s.defaultValue&&s.defaultValue.includes(this.prefix)&&delete s.defaultValue,e};for(;a=this.nestingRegexp.exec(e);){let l=[];s={...i},s=s.replace&&!t(s.replace)?s.replace:s,s.applyPostProcessor=!1,delete s.defaultValue;let u=/{.*}/.test(a[1])?a[1].lastIndexOf(`}`)+1:a[1].indexOf(this.formatSeparator);if(u!==-1&&(l=a[1].slice(u).split(this.formatSeparator).map(e=>e.trim()).filter(Boolean),a[1]=a[1].slice(0,u)),o=n(c.call(this,a[1].trim(),s),s),o&&a[0]===e&&!t(o))return o;t(o)||(o=r(o)),o||=(this.logger.warn(`missed to resolve ${a[1]} for nesting ${e}`),``),l.length&&(o=l.reduce((e,t)=>this.format(e,t,i.lng,{...i,interpolationkey:a[1].trim()}),o.trim())),e=e.replace(a[0],o),this.regexp.lastIndex=0}return e}},B=e=>{let t=e.toLowerCase().trim(),n={};if(e.includes(`(`)){let r=e.split(`(`);t=r[0].toLowerCase().trim();let i=r[1].slice(0,-1);t===`currency`&&!i.includes(`:`)?n.currency||=i.trim():t===`relativetime`&&!i.includes(`:`)?n.range||=i.trim():i.split(`;`).forEach(e=>{if(e){let[t,...r]=e.split(`:`),i=r.join(`:`).trim().replace(/^'+|'+$/g,``),a=t.trim();n[a]||(n[a]=i),i===`false`&&(n[a]=!1),i===`true`&&(n[a]=!0),isNaN(i)||(n[a]=parseInt(i,10))}})}return{formatName:t,formatOptions:n}},V=e=>{let t={};return(n,r,i)=>{let a=i;i&&i.interpolationkey&&i.formatParams&&i.formatParams[i.interpolationkey]&&i[i.interpolationkey]&&(a={...a,[i.interpolationkey]:void 0});let o=r+JSON.stringify(a),s=t[o];return s||(s=e(S(r),i),t[o]=s),s(n)}},H=e=>(t,n,r)=>e(S(n),r)(t),U=class{constructor(e={}){this.logger=w.create(`formatter`),this.options=e,this.init(e)}init(e,t={interpolation:{}}){this.formatSeparator=t.interpolation.formatSeparator||`,`;let n=t.cacheInBuiltFormats?V:H;this.formats={number:n((e,t)=>{let n=new Intl.NumberFormat(e,{...t});return e=>n.format(e)}),currency:n((e,t)=>{let n=new Intl.NumberFormat(e,{...t,style:`currency`});return e=>n.format(e)}),datetime:n((e,t)=>{let n=new Intl.DateTimeFormat(e,{...t});return e=>n.format(e)}),relativetime:n((e,t)=>{let n=new Intl.RelativeTimeFormat(e,{...t});return e=>n.format(e,t.range||`day`)}),list:n((e,t)=>{let n=new Intl.ListFormat(e,{...t});return e=>n.format(e)})}}add(e,t){this.formats[e.toLowerCase().trim()]=t}addCached(e,t){this.formats[e.toLowerCase().trim()]=V(t)}format(e,t,n,r={}){if(!t||e==null)return e;let i=t.split(this.formatSeparator);if(i.length>1&&i[0].indexOf(`(`)>1&&!i[0].includes(`)`)&&i.find(e=>e.includes(`)`))){let e=i.findIndex(e=>e.includes(`)`));i[0]=[i[0],...i.splice(1,e)].join(this.formatSeparator)}return i.reduce((e,t)=>{let{formatName:i,formatOptions:a}=B(t);if(this.formats[i]){let t=e;try{let o=r?.formatParams?.[r.interpolationkey]||{},s=o.locale||o.lng||r.locale||r.lng||n;t=this.formats[i](e,s,{...a,...r,...o})}catch(e){this.logger.warn(e)}return t}else this.logger.warn(`there was no format function for ${i}`);return e},e)}},W=(e,t)=>{e.pending[t]!==void 0&&(delete e.pending[t],e.pendingCount--)},G=class extends T{constructor(e,t,n,r={}){super(),this.backend=e,this.store=t,this.services=n,this.languageUtils=n.languageUtils,this.options=r,this.logger=w.create(`backendConnector`),this.waitingReads=[],this.maxParallelReads=r.maxParallelReads||10,this.readingCalls=0,this.maxRetries=r.maxRetries>=0?r.maxRetries:5,this.retryTimeout=r.retryTimeout>=1?r.retryTimeout:350,this.state={},this.queue=[],this.backend?.init?.(n,r.backend,r)}queueLoad(e,t,n,r){let i={},a={},o={},s={};return e.forEach(e=>{let r=!0;t.forEach(t=>{let o=`${e}|${t}`;!n.reload&&this.store.hasResourceBundle(e,t)?this.state[o]=2:this.state[o]<0||(this.state[o]===1?a[o]===void 0&&(a[o]=!0):(this.state[o]=1,r=!1,a[o]===void 0&&(a[o]=!0),i[o]===void 0&&(i[o]=!0),s[t]===void 0&&(s[t]=!0)))}),r||(o[e]=!0)}),(Object.keys(i).length||Object.keys(a).length)&&this.queue.push({pending:a,pendingCount:Object.keys(a).length,loaded:{},errors:[],callback:r}),{toLoad:Object.keys(i),pending:Object.keys(a),toLoadLanguages:Object.keys(o),toLoadNamespaces:Object.keys(s)}}loaded(e,t,n){let r=e.split(`|`),i=r[0],a=r[1];t&&this.emit(`failedLoading`,i,a,t),!t&&n&&this.store.addResourceBundle(i,a,n,void 0,void 0,{skipCopy:!0}),this.state[e]=t?-1:2,t&&n&&(this.state[e]=0);let o={};this.queue.forEach(n=>{u(n.loaded,[i],a),W(n,e),t&&n.errors.push(t),n.pendingCount===0&&!n.done&&(Object.keys(n.loaded).forEach(e=>{o[e]||(o[e]={});let t=n.loaded[e];t.length&&t.forEach(t=>{o[e][t]===void 0&&(o[e][t]=!0)})}),n.done=!0,n.errors.length?n.callback(n.errors):n.callback())}),this.emit(`loaded`,o),this.queue=this.queue.filter(e=>!e.done)}read(e,t,n,r=0,i=this.retryTimeout,a){if(!e.length)return a(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:e,ns:t,fcName:n,tried:r,wait:i,callback:a});return}this.readingCalls++;let o=(o,s)=>{if(this.readingCalls--,this.waitingReads.length>0){let e=this.waitingReads.shift();this.read(e.lng,e.ns,e.fcName,e.tried,e.wait,e.callback)}if(o&&s&&r<this.maxRetries){setTimeout(()=>{this.read(e,t,n,r+1,i*2,a)},i);return}a(o,s)},s=this.backend[n].bind(this.backend);if(s.length===2){try{let n=s(e,t);n&&typeof n.then==`function`?n.then(e=>o(null,e)).catch(o):o(null,n)}catch(e){o(e)}return}return s(e,t,o)}prepareLoading(e,n,r={},i){if(!this.backend)return this.logger.warn(`No backend was added via i18next.use. Will not load resources.`),i&&i();t(e)&&(e=this.languageUtils.toResolveHierarchy(e)),t(n)&&(n=[n]);let a=this.queueLoad(e,n,r,i);if(!a.toLoad.length)return a.pending.length||i(),null;a.toLoad.forEach(e=>{this.loadOne(e)})}load(e,t,n){this.prepareLoading(e,t,{},n)}reload(e,t,n){this.prepareLoading(e,t,{reload:!0},n)}loadOne(e,t=``){let n=e.split(`|`),r=n[0],i=n[1];this.read(r,i,`read`,void 0,void 0,(n,a)=>{n&&this.logger.warn(`${t}loading namespace ${i} for language ${r} failed`,n),!n&&a&&this.logger.log(`${t}loaded namespace ${i} for language ${r}`,a),this.loaded(e,n,a)})}saveMissing(e,t,n,r,i,a={},o=()=>{}){if(this.services?.utils?.hasLoadedNamespace&&!this.services?.utils?.hasLoadedNamespace(t)){this.logger.warn(`did not save key "${n}" as the namespace "${t}" 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!!!`);return}if(!(n==null||n===``)){if(this.backend?.create){let s={...a,isUpdate:i},c=this.backend.create.bind(this.backend);if(c.length<6)try{let i;i=c.length===5?c(e,t,n,r,s):c(e,t,n,r),i&&typeof i.then==`function`?i.then(e=>o(null,e)).catch(o):o(null,i)}catch(e){o(e)}else c(e,t,n,r,o,s)}!e||!e[0]||this.store.addResource(e[0],t,n,r)}}},K=()=>({debug:!1,initAsync:!0,ns:[`translation`],defaultNS:[`translation`],fallbackLng:[`dev`],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:`all`,preload:!1,keySeparator:`.`,nsSeparator:`:`,pluralSeparator:`_`,contextSeparator:`_`,enableSelector:!1,partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:`fallback`,saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:e=>{let n={};if(typeof e[1]==`object`&&(n=e[1]),t(e[1])&&(n.defaultValue=e[1]),t(e[2])&&(n.tDescription=e[2]),typeof e[2]==`object`||typeof e[3]==`object`){let t=e[3]||e[2];Object.keys(t).forEach(e=>{n[e]=t[e]})}return n},interpolation:{escapeValue:!0,prefix:`{{`,suffix:`}}`,formatSeparator:`,`,unescapePrefix:`-`,nestingPrefix:`$t(`,nestingSuffix:`)`,nestingOptionsSeparator:`,`,maxReplaces:1e3,skipOnVariables:!0},cacheInBuiltFormats:!0}),q=e=>(t(e.ns)&&(e.ns=[e.ns]),t(e.fallbackLng)&&(e.fallbackLng=[e.fallbackLng]),t(e.fallbackNS)&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&!e.supportedLngs.includes(`cimode`)&&(e.supportedLngs=e.supportedLngs.concat([`cimode`])),e),J=()=>{},Y=e=>{Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(t=>{typeof e[t]==`function`&&(e[t]=e[t].bind(e))})},X=class e extends T{constructor(e={},t){if(super(),this.options=q(e),this.services={},this.logger=w,this.modules={external:[]},Y(this),t&&!this.isInitialized&&!e.isClone){if(!this.options.initAsync)return this.init(e,t),this;setTimeout(()=>{this.init(e,t)},0)}}init(e={},r){this.isInitializing=!0,typeof e==`function`&&(r=e,e={}),e.defaultNS==null&&e.ns&&(t(e.ns)?e.defaultNS=e.ns:e.ns.includes(`translation`)||(e.defaultNS=e.ns[0]));let i=K();this.options={...i,...this.options,...q(e)},this.options.interpolation={...i.interpolation,...this.options.interpolation},e.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=e.keySeparator),e.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=e.nsSeparator),typeof this.options.overloadTranslationOptionHandler!=`function`&&(this.options.overloadTranslationOptionHandler=i.overloadTranslationOptionHandler);let a=e=>e?typeof e==`function`?new e:e:null;if(!this.options.isClone){this.modules.logger?w.init(a(this.modules.logger),this.options):w.init(null,this.options);let e;e=this.modules.formatter?this.modules.formatter:U;let t=new N(this.options);this.store=new E(this.options.resources,this.options);let n=this.services;n.logger=w,n.resourceStore=this.store,n.languageUtils=t,n.pluralResolver=new I(t,{prepend:this.options.pluralSeparator}),e&&(n.formatter=a(e),n.formatter.init&&n.formatter.init(n,this.options),this.options.interpolation.format=n.formatter.format.bind(n.formatter)),n.interpolator=new z(this.options),n.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},n.backendConnector=new G(a(this.modules.backend),n.resourceStore,n,this.options),n.backendConnector.on(`*`,(e,...t)=>{this.emit(e,...t)}),this.modules.languageDetector&&(n.languageDetector=a(this.modules.languageDetector),n.languageDetector.init&&n.languageDetector.init(n,this.options.detection,this.options)),this.modules.i18nFormat&&(n.i18nFormat=a(this.modules.i18nFormat),n.i18nFormat.init&&n.i18nFormat.init(this)),this.translator=new M(this.services,this.options),this.translator.on(`*`,(e,...t)=>{this.emit(e,...t)}),this.modules.external.forEach(e=>{e.init&&e.init(this)})}if(this.format=this.options.interpolation.format,r||=J,this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){let e=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);e.length>0&&e[0]!==`dev`&&(this.options.lng=e[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn(`init: no languageDetector is used and no lng is defined`),[`getResource`,`hasResourceBundle`,`getResourceBundle`,`getDataByLanguage`].forEach(e=>{this[e]=(...t)=>this.store[e](...t)}),[`addResource`,`addResources`,`addResourceBundle`,`removeResourceBundle`].forEach(e=>{this[e]=(...t)=>(this.store[e](...t),this)});let o=n(),s=()=>{let e=(e,t)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn(`init: i18next is already initialized. You should call init just once!`),this.isInitialized=!0,this.options.isClone||this.logger.log(`initialized`,this.options),this.emit(`initialized`,this.options),o.resolve(t),r(e,t)};if((this.languages||this.isLanguageChangingTo)&&!this.isInitialized)return e(null,this.t.bind(this));this.changeLanguage(this.options.lng,e)};return this.options.resources||!this.options.initAsync?s():setTimeout(s,0),o}loadResources(e,n=J){let r=n,i=t(e)?e:this.language;if(typeof e==`function`&&(r=e),!this.options.resources||this.options.partialBundledLanguages){if(i?.toLowerCase()===`cimode`&&(!this.options.preload||this.options.preload.length===0))return r();let e=[],t=t=>{t&&t!==`cimode`&&this.services.languageUtils.toResolveHierarchy(t).forEach(t=>{t!==`cimode`&&(e.includes(t)||e.push(t))})};i?t(i):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(e=>t(e)),this.options.preload?.forEach?.(e=>t(e)),this.services.backendConnector.load(e,this.options.ns,e=>{!e&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),r(e)})}else r(null)}reloadResources(e,t,r){let i=n();return typeof e==`function`&&(r=e,e=void 0),typeof t==`function`&&(r=t,t=void 0),e||=this.languages,t||=this.options.ns,r||=J,this.services.backendConnector.reload(e,t,e=>{i.resolve(),r(e)}),i}use(e){if(!e)throw Error(`You are passing an undefined module! Please check the object you are passing to i18next.use()`);if(!e.type)throw Error(`You are passing a wrong module! Please check the object you are passing to i18next.use()`);return e.type===`backend`&&(this.modules.backend=e),(e.type===`logger`||e.log&&e.warn&&e.error)&&(this.modules.logger=e),e.type===`languageDetector`&&(this.modules.languageDetector=e),e.type===`i18nFormat`&&(this.modules.i18nFormat=e),e.type===`postProcessor`&&D.addPostProcessor(e),e.type===`formatter`&&(this.modules.formatter=e),e.type===`3rdParty`&&this.modules.external.push(e),this}setResolvedLanguage(e){if(!(!e||!this.languages)&&![`cimode`,`dev`].includes(e)){for(let e=0;e<this.languages.length;e++){let t=this.languages[e];if(![`cimode`,`dev`].includes(t)&&this.store.hasLanguageSomeTranslations(t)){this.resolvedLanguage=t;break}}!this.resolvedLanguage&&!this.languages.includes(e)&&this.store.hasLanguageSomeTranslations(e)&&(this.resolvedLanguage=e,this.languages.unshift(e))}}changeLanguage(e,r){this.isLanguageChangingTo=e;let i=n();this.emit(`languageChanging`,e);let a=e=>{this.language=e,this.languages=this.services.languageUtils.toResolveHierarchy(e),this.resolvedLanguage=void 0,this.setResolvedLanguage(e)},o=(t,n)=>{n?this.isLanguageChangingTo===e&&(a(n),this.translator.changeLanguage(n),this.isLanguageChangingTo=void 0,this.emit(`languageChanged`,n),this.logger.log(`languageChanged`,n)):this.isLanguageChangingTo=void 0,i.resolve((...e)=>this.t(...e)),r&&r(t,(...e)=>this.t(...e))},s=n=>{!e&&!n&&this.services.languageDetector&&(n=[]);let r=t(n)?n:n&&n[0],i=this.store.hasLanguageSomeTranslations(r)?r:this.services.languageUtils.getBestMatchFromCodes(t(n)?[n]:n);i&&(this.language||a(i),this.translator.language||this.translator.changeLanguage(i),this.services.languageDetector?.cacheUserLanguage?.(i)),this.loadResources(i,e=>{o(e,i)})};return!e&&this.services.languageDetector&&!this.services.languageDetector.async?s(this.services.languageDetector.detect()):!e&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(s):this.services.languageDetector.detect(s):s(e),i}getFixedT(e,n,r,i){let a=i?.scopeNs,o=(e,t,...n)=>{let i;i=typeof t==`object`?{...t}:this.options.overloadTranslationOptionHandler([e,t].concat(n)),i.lng=i.lng||o.lng,i.lngs=i.lngs||o.lngs;let s=i.ns!==void 0&&i.ns!==null;i.ns=i.ns||o.ns,i.keyPrefix!==``&&(i.keyPrefix=i.keyPrefix||r||o.keyPrefix);let c={...this.options,...i};Array.isArray(a)&&!s&&(c.ns=a),typeof i.keyPrefix==`function`&&(i.keyPrefix=A(i.keyPrefix,c));let l=this.options.keySeparator||`.`,u;return i.keyPrefix&&Array.isArray(e)?u=e.map(e=>(typeof e==`function`&&(e=A(e,c)),`${i.keyPrefix}${l}${e}`)):(typeof e==`function`&&(e=A(e,c)),u=i.keyPrefix?`${i.keyPrefix}${l}${e}`:e),this.t(u,i)};return t(e)?o.lng=e:o.lngs=e,o.ns=n,o.keyPrefix=r,o}t(...e){return this.translator?.translate(...e)}exists(...e){return this.translator?.exists(...e)}setDefaultNamespace(e){this.options.defaultNS=e}hasLoadedNamespace(e,t={}){if(!this.isInitialized)return this.logger.warn(`hasLoadedNamespace: i18next was not initialized`,this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn(`hasLoadedNamespace: i18n.languages were undefined or empty`,this.languages),!1;let n=t.lng||this.resolvedLanguage||this.languages[0],r=this.options?this.options.fallbackLng:!1,i=this.languages[this.languages.length-1];if(n.toLowerCase()===`cimode`)return!0;let a=(e,t)=>{let n=this.services.backendConnector.state[`${e}|${t}`];return n===-1||n===0||n===2};if(t.precheck){let e=t.precheck(this,a);if(e!==void 0)return e}return!!(this.hasResourceBundle(n,e)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||a(n,e)&&(!r||a(i,e)))}loadNamespaces(e,r){let i=n();return this.options.ns?(t(e)&&(e=[e]),e.forEach(e=>{this.options.ns.includes(e)||this.options.ns.push(e)}),this.loadResources(e=>{i.resolve(),r&&r(e)}),i):(r&&r(),Promise.resolve())}loadLanguages(e,r){let i=n();t(e)&&(e=[e]);let a=this.options.preload||[],o=e.filter(e=>!a.includes(e)&&this.services.languageUtils.isSupportedCode(e));return o.length?(this.options.preload=a.concat(o),this.loadResources(e=>{i.resolve(),r&&r(e)}),i):(r&&r(),Promise.resolve())}dir(e){if(e||=this.resolvedLanguage||(this.languages?.length>0?this.languages[0]:this.language),!e)return`rtl`;try{let t=new Intl.Locale(e);if(t&&t.getTextInfo){let e=t.getTextInfo();if(e&&e.direction)return e.direction}}catch{}let t=`ar.shu.sqr.ssh.xaa.yhd.yud.aao.abh.abv.acm.acq.acw.acx.acy.adf.ads.aeb.aec.afb.ajp.apc.apd.arb.arq.ars.ary.arz.auz.avl.ayh.ayl.ayn.ayp.bbz.pga.he.iw.ps.pbt.pbu.pst.prp.prd.ug.ur.ydd.yds.yih.ji.yi.hbo.men.xmn.fa.jpr.peo.pes.prs.dv.sam.ckb`.split(`.`),n=this.services?.languageUtils||new N(K());return e.toLowerCase().indexOf(`-latn`)>1?`ltr`:t.includes(n.getLanguagePartFromCode(e))||e.toLowerCase().indexOf(`-arab`)>1?`rtl`:`ltr`}static createInstance(t={},n){let r=new e(t,n);return r.createInstance=e.createInstance,r}cloneInstance(t={},n=J){let r=t.forkResourceStore;r&&delete t.forkResourceStore;let i={...this.options,...t,isClone:!0},a=new e(i);if((t.debug!==void 0||t.prefix!==void 0)&&(a.logger=a.logger.clone(t)),[`store`,`services`,`language`].forEach(e=>{a[e]=this[e]}),a.services={...this.services},a.services.utils={hasLoadedNamespace:a.hasLoadedNamespace.bind(a)},r&&(a.store=new E(Object.keys(this.store.data).reduce((e,t)=>(e[t]={...this.store.data[t]},e[t]=Object.keys(e[t]).reduce((n,r)=>(n[r]={...e[t][r]},n),e[t]),e),{}),i),a.services.resourceStore=a.store),t.interpolation){let e={...K().interpolation,...this.options.interpolation,...t.interpolation},n={...i,interpolation:e};a.services.interpolator=new z(n)}return a.translator=new M(a.services,i),a.translator.on(`*`,(e,...t)=>{a.emit(e,...t)}),a.init(i,n),a.translator.options=i,a.translator.backendConnector.services.utils={hasLoadedNamespace:a.hasLoadedNamespace.bind(a)},a}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}}.createInstance();X.createInstance,X.dir,X.init,X.loadResources,X.reloadResources,X.use,X.changeLanguage,X.getFixedT,X.t,X.exists,X.setDefaultNamespace,X.hasLoadedNamespace,X.loadNamespaces,X.loadLanguages;var Z={nav:{integrations:`Integrations`,metrics:`Metrics`,detectionSection:`Detection`,detectionIntelligence:`People`,vehicles:`Vehicles`,events:`Library`,library:`Library`,clusterSection:`Cluster`,nodes:`Nodes`,pipeline:`Pipeline`,addonPages:`Addon Pages`,build:`Build-your-self`,devices:`Devices`,locations:`Locations`,recordings:`Recordings`,viewer:`Viewer`,history:`History`,notInstalled:`{{page}} — not installed`},system:JSON.parse(`{"title":"Administration","addons":"Addons","agents":"Agents","processes":"Processes","logs":"Logs","users":"Users","settings":"Settings","repl":"REPL","models":"Models","integrations":"Connectivity","serverManagement":"Server","systemNav":"System","secrets":"Secrets","reconnectOverlay":{"frameworkUpdated":"Framework updated","isNow":"{{packageName}} is now {{fromTo}}.","serverRestarted":"Server restarted","manualRestartByCompleted":"Manual restart by {{requestedBy}} completed.","manualRestartCompleted":"Manual restart completed."},"access":{"loginSessions":"Login sessions","linkedApps":"Linked apps","tokens":"Tokens","signInLinks":"Sign-in links","audit":"Audit","credentialKinds":"Credential kinds","newToken":"New token"},"addressesCard":{"address":"Address","noneNoTunnelOrTailscale":"none (no tunnel or Tailscale)","alsoAddedAsACustom":"also added as a custom address","unlikelyUsable":"Unlikely usable","kind":"Kind","inUseAutomatically":"{{title}}: in use automatically. {{help}}","thisAddressCannotBeUsed":"This address cannot be used for this.","remove":"Remove {{baseUrl}}","removeThisCustomAddressIts":"Remove this custom address (its roles turn automatic)","addresses":"Addresses","everyAddressThisHubIs":"Every address this hub is reached at, detected or added by you. Tick what each one is used for.","whatAreRoles":"What are roles?","automatic":"(automatic)","setByYou":"(set by you)","useAutomatic":"Use automatic","useHttpAnyway":"Use http anyway","noAddressesAvailable":"No addresses available.","customAddress":"Custom address","labelOptional":"Label (optional)","customAddressLabel":"Custom address label","addCustomAddress":"Add custom address","kindIpv4":"IPv4","kindIpv6":"IPv6","kindPublic":"Public","kindAppLink":"App link","kindCustom":"Custom","kindLoopback":"Loopback"},"aiModelPicker":{"unslothQwen3635bA3b":"unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_M","sizeGb":"{{value}} GB"},"aiProfilesTab":{"toggle":"toggle {{name}}","testOk":"{{text}} ({{tokens}} tok, {{ms}}ms)"},"aiTestChat":{"tokMs":"{{model}} · {{value2}} tok · {{value3}} ms","sentToTheModel":"sent to the model"},"authentication":{"authenticationProviders":"Authentication providers","about":"About","setupSteps":"Setup steps","myAccess":"My access","users":"Users","pageViaActionsRemove2fa":"page via Actions → “Remove 2FA”.","sectionTitle":"Authentication","sectionSubtitle":"Login providers (local password, OIDC, SAML) and second-factor providers (passkeys / WebAuthn). They run in parallel — enable or disable each independently; disabling one only removes that method, local password login is unaffected.","sectionEmptyTitle":"No authentication providers registered","sectionEmptyDescription":"Local auth should always be available — if this list is empty the local-auth builtin failed to register. Check the Addons page for load errors.","sectionInstall":"Add provider","totpNote":"TOTP / 2FA is self-service: each user enrols from their own profile page — <access>My access</access> → Sign-in & security → “Two-factor authentication” → Enable 2FA. Admins can only remove a user’s active enrollment (lost device) from the <users>Users</users> page via Actions → “Remove 2FA”."},"backup":{"restartServerNow":"Restart server now?","activeConnectionsWillDropAnd":"Active connections will drop and the apply-backup hook will run before boot.","restart":"Restart","backUpNow":"Back up now","restore":"Restore…","newEntry":"New entry","restoreScheduledRestartTheServer":"Restore scheduled. Restart the server to apply.","restartNow":"Restart Now"},"capabilities":{"isNowActive":"{{capName}} → {{addonId}} is now active.","nowInheritsTheGlobalDefault":"{{capName}} @ {{nodeId}} now inherits the global default.","providerSEnabled":"{{capName}}: {{length}} provider(s) enabled.","capabilities":"Capabilities","chooseWhichProviderIsActive":"Choose which provider is active for each system capability. Singleton caps pick exactly one provider; collection caps enable a set.","failedToLoadCapabilities":"Failed to load capabilities","unknownError":"Unknown error","noCapabilitiesRegistered":"No capabilities registered.","singletonPickOneProvider":"Singleton — pick one provider","collectionEnableASet":"Collection — enable a set","failedToSet":"Failed to set {{cap}}: {{error}}","failedToSetOnNode":"Failed to set {{cap}} @ {{node}}: {{error}}","failedToClearOnNode":"Failed to clear {{cap}} @ {{node}}: {{error}}","failedToUpdate":"Failed to update {{cap}}: {{error}}","providerHub":"{{addonId}} (hub)"},"capabilityCatalog":{"installed":"Installed","install":"Install","couldNotSearchTheNpm":"Could not search the npm catalog right now. Try again in a moment.","searchingTheNpmCatalog":"Searching the npm catalog…","noPublishedAddonDeclaresThe":"No published addon declares the \\"{{capability}}\\" capability.","everyPublishedAddonThatDeclares":"Every published addon that declares \\"{{capability}}\\" is already installed.","availableToInstall":"Available to install"},"localAccess":{"lanHttp":"LAN HTTP","nativeAppsOnThisWi":"Native apps on this Wi-Fi use http:// and skip the private certificate. The tunnel and this admin UI stay on HTTPS.","certificate":"Certificate","certificateMoved":"The HTTPS certificate and the local CA are managed under","certificateMovedLink":"Identity → Certificates","couldNotReadTlsStatus":"Could not read TLS status.","certificateReissue":"Certificate reissue","restartRequired":"Restart required","theHttpsListenerStillServes":"The HTTPS listener still serves the previous certificate. Restart the hub to apply it.","mode":"Mode","validTo":"Valid to","leafSha256":"Leaf SHA-256","caSha256":"CA SHA-256","issuerNotIncludedInThe":"Issuer not included in the upload (not the local CA)","regenerate":"Regenerate","issueANewLeaf":"Issue a new leaf?","issuesANewLeafUnder":"Issues a new leaf under the current local CA. Clients that trust the CA keep working. The HTTPS listener reloads.","upload":"Upload","downloadCa":"Download CA","revertToGenerated":"Revert to generated","dropTheUploadedCertificate":"Drop the uploaded certificate?","revert":"Revert","certificateOrFullChainPem":"Certificate or full chain (PEM)","privateKeyPem":"Private key (PEM)","saveCertificate":"Save certificate","uploadFailed":"Upload failed","caPemRequired":"CA (PEM) - required unless the certificate comes from a public CA","keepsTheUploadedPair":"Returns to the generated local CA. The uploaded certificate and its CA stay stored here; you can select them again.","revertTitle":"Switch back to the generated certificate?","useUploaded":"Use uploaded certificate","useUploadedTitle":"Serve the stored upload again?","useUploadedDescription":"The stored uploaded certificate replaces the generated one on the HTTPS listener. The generated certificate stays stored.","caMissingTitle":"CA missing - devices cannot trust this hub","caMissingBody":"The uploaded certificate was not issued by a public CA and no CA was stored with it, so Download CA has nothing to hand out. Upload the certificate again together with its CA (for mkcert, the rootCA.pem in the folder \`mkcert -CAROOT\` prints).","caReplacedTitle":"The local CA was replaced - re-install it on your devices","caReplacedBody":"The previous local CA had no name constraints: if its key ever leaked it could vouch for any website. The hub now uses a CA limited to private addresses and local names. Download it again and trust it on every phone and computer that used the old one (replaced {{when}}).","storedUpload":"Stored upload","storedUploadValue":"valid to {{validTo}}, {{ca}}","storedUploadWithCa":"with its CA","storedUploadNoCa":"no CA"},"logging":{"logDestinations":"Log destinations","destinations":"Destinations","everyRegisteredLogDestinationEntries":"Every registered log destination. Entries are fanned to all enabled destinations at once — enabling one does not disable another.","noLogDestinationsRegistered":"No log destinations registered","thisShouldNotHappenThe":"This should not happen — the console and rotated-file destinations are builtins. If the list is empty, the node is still booting."},"meshNetworks":{"meshNetworks":"Mesh networks","addMesh":"Add mesh","status":"Status","meshNetworks2":"Mesh Networks","privateVpnMeshesThatConnect":"Private VPN meshes that connect CamStack to your other devices (Tailscale, Headscale, …). Each provider can also expose this hub publicly via its ingress (Tailscale Funnel).","noMeshNetworkProvidersInstalled":"No mesh-network providers installed","installAMeshAddonE":"Install a mesh addon (e.g. @camstack/addon-tailscale) to join this hub into a private VPN mesh.","joined":"Joined","notJoined":"Not joined","disconnect":"Disconnect","logOut":"Log out","connect":"Connect","endpoints":"Endpoints","tenant":"Tenant","user":"User","controlPlane":"Control plane","meshIp":"Mesh IP","magicdns":"MagicDNS","dnsSuffix":"DNS suffix","peers":"Peers","keyExpiry":"Key expiry","hostname":"Hostname","unknown":"(unknown)","copyMagicdns":"Copy MagicDNS","copyIp":"Copy IP","connection":"Connection","routes":"Routes","txRx":"TX / RX","lastSeen":"Last seen","noPeersVisibleYourTailnet":"No peers visible — your tailnet may be empty or the host is not joined.","expiredAgo":"Expired {{when}}","expiryDays":"in {{count}} days","expiryHours":"in {{count}}h","expiryMin":"in {{count}} min","justNow":"just now","agoMin":"{{count}}m ago","agoHour":"{{count}}h ago","agoDay":"{{count}}d ago"},"networkAddresses":{"pinWhichHostInterfacesExist":"Pin which host interfaces exist, then tick what each address is used for. Add a custom address when this hub is reached at one it cannot detect.","allowedAddresses":"Allowed addresses","reRunTheAutoDetection":"Re-run the auto-detection heuristic + overwrite the current allowlist with the best matches.","detecting":"Detecting…","bestMatch":"Best match","clear":"Clear","discard":"Discard","saving":"Saving…","autoEveryNonLoopbackNon":"Auto — every non-loopback / non-link-local interface participates.","pinned":"{{value1}} pinned","loadingInterfaces":"Loading interfaces…","noInterfacesDetected":"No interfaces detected."},"networkDiagnostics":{"loadingCameras":"Loading cameras…","noCameras":"No cameras","pickACamera":"Pick a camera","camera":"Camera"},"notificationAlarm":{"couldNotChangeFor":"Could not change {{name}} for {{value2}}: {{error}}","alarm":"Alarm","panelDelaysAndModeCoverage":"Panel delays and mode coverage.","alarmSettingsAreNotAvailable":"Alarm settings are not available","thisHubHasNotBeen":"This hub has not been updated to serve the alarm configuration yet.","thisInstallationHasNoAlarm":"This installation has no alarm panel. The panel is created by the Notification Center on the hub — if this is the hub, its creation failed and the server log says why.","thePanelWhatEachMode":"The panel, what each mode arms, and who hears about it.","couldNotSave":"Could not save","couldNotUpdateProfile":"Could not update profile","notApplied":"Not applied","theHubDidNotApply":"The hub did not apply this change — another editor may have changed it, or the hub needs an update","refused":"Saving {{name}} ({{mode}}) — wait for it to finish.","notLanded":"The hub did not apply this change — another editor may have changed it, or the hub needs an update ({{name}}, {{mode}})."},"notificationCalendarEventsEditor":{"newCalendarEvents":"New calendar events","basics":"Basics","name":"Name","horizonDays":"Horizon (days)","priority":"Priority","enabled":"Enabled","deliverWhenEmpty":"Deliver when empty","schedule":"Schedule","oneSendTimePerRow":"One send time per row. The digest fires at that minute.","calendars":"Calendars","targets":"Targets","template":"Template","optionalLeaveBlankForThe":"Optional. Leave blank for the default digest body (tomorrow highlighted, then later days). Variables:","title":"Title","body":"Body","templateVars":"{{ruleVar}}, {{countVar}}, {{horizonVar}}, {{eventsVar}}."},"notificationCalendarEventsPage":{"calendarEventsRulesAreNot":"Calendar-events rules are not available on this hub","theHubAnsweredSomethingThis":"The hub answered something this admin build does not understand. Update both and reload.","thisHubHasNotBeen":"This hub has not been updated to serve calendar-events rules yet. Deploy addon-post-analysis and reload — the rules themselves are untouched.","couldNotDeleteTheRule":"Could not delete the rule","noCalendarEventsRulesYet":"No calendar-events rules yet — create one, and upcoming calendar events arrive on schedule.","calendarEvents":"Calendar events","newCalendarEvents":"New calendar events","rule":"Rule","when":"When","horizon":"Horizon","calendars":"Calendars","targets":"Targets","lastRun":"Last run","on":"On","toggle":"toggle {{name}}","deleteThisCalendarEventsRule":"Delete this calendar-events rule?","thisWillPermanentlyDeleteThis":"This will permanently delete \\"{{name}}\\". This action cannot be undone.","delete":"delete {{name}}"},"notificationHistory":{"body":"Body","when":"When","status":"Status","rule":"Rule","device":"Device","kind":"Kind","deliveryHistory":"Delivery history","aSearchableLogOfEvery":"A searchable log of every notification the rules delivered (or failed to deliver).","camera":"Camera","allCameras":"All cameras","window":"Window","limit":"Limit","deliveryHistoryRequiresAServer":"Delivery history requires a server update","theHistoryQueryIsNot":"The history query is not available on this hub yet. It becomes queryable after the next server update ships the notification-center history endpoint. Rules still deliver and record their outcome in the meantime.","noDeliveriesMatchTheseFilters":"No deliveries match these filters.","notification":"Notification","detail":"Detail","windowLastHour":"Last hour","windowLast24h":"Last 24 hours","windowLast7d":"Last 7 days","windowAllTime":"All time","statusAny":"Any status","statusPending":"Pending","statusSent":"Sent","statusDead":"Dead","cameraFallback":"Camera #{{deviceId}}"},"notificationProducerRules":{"couldNotDeleteTheRule":"Could not delete the rule","theTestRunFailed":"The test run failed","whichCamera":"Which camera","nothingWasProduced":"Nothing was produced:","dismiss":"Dismiss","summaryUnavailableTitle":"Summary rules are not available on this hub","summaryUnavailableMessage":"This hub has not been updated to serve summary rules yet. Deploy addon-post-analysis and reload — nothing is lost in the meantime.","timelapseUnavailableTitle":"Timelapse rules are not available on this hub","timelapseUnavailableMessage":"This hub has not been updated to serve timelapse rules yet. Deploy addon-post-analysis and reload — the rules themselves are untouched.","calendarEventsUnavailableTitle":"Calendar-events rules are not available on this hub","calendarEventsUnavailableMessage":"This hub has not been updated to serve calendar-events rules yet. Deploy addon-post-analysis and reload — the rules themselves are untouched.","unreadableMessage":"The hub answered something this admin build does not understand. Update both and reload.","digestCount_one":"{{count}} digest","digestCount_other":"{{count}} digests","tileCount_one":"{{count}} tile","tileCount_other":"{{count}} tiles","cameraCount_one":"{{count}} camera","cameraCount_other":"{{count}} cameras","tracksMatched_one":"{{count}} track matched","tracksMatched_other":"{{count}} tracks matched","notificationsSent_one":"{{count}} notification sent","notificationsSent_other":"{{count}} notifications sent","videoCount_one":"{{count}} video","videoCount_other":"{{count}} videos","summaryProduced":"Produced {{digests}} — {{tiles}} from {{cameras}}, {{matched}}, {{sent}}.","droppedStationary_one":"{{count}} parked object left out.","droppedStationary_other":"{{count}} parked objects left out.","timelapseProduced":"Produced {{videos}}, {{sent}}.","timelapseProducedCoverage":"Produced {{videos}} — {{percent}}% of the window had footage, {{sent}}."},"notificationRuleActions":{"buttonsOnTheNotification":"Buttons on the notification","eachButtonRunsOneShared":"Each button runs one shared sequence when tapped.","createASequenceOnThe":"Create a sequence on the Sequences tab first — a button runs one, it does not define its own steps.","noButtonsTheNotificationArrives":"No buttons. The notification arrives with nothing to tap.","nothingOnThisEdge":"Nothing on this edge.","sequence":"Sequence","id":"Id","label":"Label","icon":"Icon","button":"Button","singleAction":"Single action","buttonLinkNote":"A button's link travels inside the notification. The link is the only authority: anyone holding the notification can run the button <b>once</b>, within 15 minutes."},"notificationRuleColumns":{"rule":"Rule","trigger":"Trigger","targets":"Targets","lastRun":"Last run","priority":"Priority","on":"On","toggle":"toggle {{name}}","openInTheSimulatorDescribe":"Open in the simulator — describe an event and tune it before injecting","simulate":"simulate {{name}}","duplicate":"Duplicate","recreateAsOneRulePer":"Recreate as one rule per family","events":"Events","scope":"Scope","cooldown":"Cooldown"},"notificationRuleConditions":{"addValue":"Add value…","anyPhase":"— any phase —","authoredElsewhereAndPreservedThis":"Authored elsewhere and preserved — this admin editor cannot change it yet.","notEditableHereYetThis":"Not editable here yet — this condition has no admin editor."},"notificationRuleLastRun":{"lastRunLoading":"Last run loading","lastRunCouldNotBe":"Last run could not be read: {{reason}}","historyThisRuleSDeliveries":"History — this rule's deliveries","historyOf":"history of {{name}}"},"notificationRuleSnoozeControl":{"thisRuleConcernsOrTriggers":"This rule concerns — or triggers — the alarm panel, so no snooze window can silence it.","silenceThisRuleForIt":"Silence this rule for {{value1}} — it appears under \\"Silenced right now\\"","snooze":"snooze {{ruleName}}","silenceThisRuleNow":"Silence this rule now","opensARealSnoozeWindow":"Opens a real snooze window right now — distinct from the buttons above, which only choose the durations this rule's NOTIFICATION offers. It appears under \\"Silenced right now\\" and can be ended from there."},"notificationRuleStatus":{"nextWindowOpens":"Next window opens {{value1}}","noFurtherWindowOpensIn":"No further window opens in the next nine days","settled":"rendered {{minutes}} min after it closes, so the footage has settled","cameraFallback":"camera {{deviceId}}"},"notificationRuleTestButton":{"testNowFiresThisRule":"Test now — fires this rule and really sends the notification","testNow":"test {{ruleName}} now","testNow2":"Test now"},"notificationRules":{"newRule":"New rule","rules":"Rules","failedToLoadRules":"Failed to load rules","unknownError":"Unknown error","noRulesYet":"No rules yet.","chooseARuleType":"Choose a rule type","edit":"Edit {{name}}","newNotificationRule":"New notification rule","saveChanges":"Save changes","createRule":"Create rule","name":"Name","eGFrontDoorPackage":"e.g. Front door package","enabled":"Enabled","trigger":"Trigger","deliveryTargets":"Delivery targets","noDeliveryTargetsConfiguredAdd":"No delivery targets configured. Add one under the Targets tab first.","notifyUsers":"Notify users","deliversToTheTargetsEach":"Delivers to the targets each user owns, only for cameras that user can access.","noUsersToNotify":"No users to notify.","searchUsers":"Search users…","cooldownSeconds":"Cooldown (seconds)","aCameraThatFlapsOr":"A camera that flaps, or a node that reconnects every minute, would otherwise send one notification per flap. The cooldown is the shortest gap between two deliveries of this rule.","theShortestGapBetweenTwo":"The shortest gap between two deliveries of this rule, counted as chosen below.","cooldownCounted":"Cooldown counted","perDeviceADeliveryAbout":"Per device: a delivery about one camera (or node) does not hold back another. Whole rule: one delivery per cooldown, whichever device matched.","acrossObjectClasses":"Across object classes","separateDefaultADogAfter":"Separate (default): a dog after a cat is delivered at once, a second cat still waits. Shared: a cat holds back the next dog for the cooldown. Sounds always count per class.","allowGlobalSnooze":"allow global snooze","anyoneMaySnoozeThisRule":"Anyone may snooze this rule for everyone","aSnoozeIsPersonalBy":"A snooze is personal by default — it silences only the person who set it. Turn this on for a rule where silencing the whole household is legitimate (the gardener is here all afternoon). Admins can always do it.","snoozeButtons":"Snooze buttons","notSetTheNotificationOffers":"Not set — the notification offers the defaults ({{value1}}). A pause opened from a button silences this camera for this class of subject, only for whoever received the notification, and sends no summary.","noSnoozeButtonsOnThis":"No snooze buttons on this rule. That is an explicit choice: the notification cannot be silenced from the lock screen.","fourAtMostEverySnooze":"Four at most. Every snooze button takes space from the rule’s action buttons — ntfy accepts three in total.","backToTheDefaults":"Back to the defaults","silenceItNow":"Silence it now","priority":"Priority","aSystemEventCarriesNo":"A system event carries no image: there is no camera frame behind \\"a node went offline\\". This rule sends text only.","attachAGifAroundThe":"Attach a GIF around the event","attachAnMp4ClipAround":"Attach an MP4 clip around the event","videoQuality":"Video quality","aNotificationIsWatchedOn":"A notification is watched on a phone — the cheapest stream is normally the right one, and the high profile only costs CPU to render.","playbackSpeed":"Playback speed","aNotificationClipIsGlanced":"A notification clip is glanced at, not watched: at 2× the recipient sees the whole passage in half the time and the file is half the size. Real time is there when the detail matters more than the glance.","linkedCameras":"Linked cameras","whenTheSensorIsLinked":"When the sensor is linked to several cameras, all of them are photographed the moment it fires. Cameras that are offline or asleep are left out.","notificationTitle":"Notification title","notificationBody":"Notification body","leaveBothBlankForThe":"Leave both blank for the hub's own wording (editable on the Texts tab).","whichSystemEvents":"Which system events","conditions":"Conditions","thisIsASoundRule":"This is a SOUND rule: it fires on a confirmed sampling window of audio, never on a picture. Name the sounds and/or keep a level threshold — with neither it can never match. Everything else below still composes (a camera scope, a schedule).","thisIsAnOccupancyRule":"This is an OCCUPANCY rule: it fires when the count in a camera frame or a zone crosses your threshold and holds. Pick the camera on the Devices tab first — the zone list is that camera's.","pickTheEventsThisRule":"Pick the events this rule reacts to, then narrow them if you want. Nothing else on a system rule is a condition — there is no detection behind it.","conditionCatalogUnavailableThisRule":"Condition catalog unavailable — this rule matches on its trigger and targets alone.","testThisRuleForReal":"Test this rule for real","buildsTheEventThisRule":"Builds the event this rule is about, runs the REAL evaluation and delivery, and sends the notification to every target — marked [TEST] in the body. The cooldown and the camera mute are bypassed (neither window is consumed); the rule's actions are never run. Saved conditions only: save first to test an edit.","testRule":"Test rule","dryRunLast60Min":"Dry-run (last 60 min)","evaluateTheCurrentUnsavedRule":"Evaluate the CURRENT (unsaved) rule against recently persisted records — no notification is sent.","rule":"Rule","targets":"Targets","deviceEventRulesCannotBe":"Device-event rules cannot be dry-run: the sensor-event store has no cross-device scan surface, so a test returns no candidate records. The rule still fires live on a matching doorbell press / sensor change.","noRecordsInTheLast":"No records in the last 60 minutes matched — nothing to evaluate.","savingDrops_one":"Saving drops {{count}} condition this kind of rule cannot use:","savingDrops_other":"Saving drops {{count}} conditions this kind of rule cannot use:","cooldownRange":"Any whole number from 0 (deliver every match) to {{max}} (24 hours).","unsupportedTrigger":"This rule uses the trigger <code>{{trigger}}</code>, which this version of the admin UI cannot author. It is shown exactly as stored and nothing here can change it — editing it with an editor that does not know the trigger would rewrite it. Update the server bundle, or edit this rule from the viewer app.","wouldFire_one":"{{firing}} of {{count}} evaluated record would fire.","wouldFire_other":"{{firing}} of {{count}} evaluated records would fire.","targetsFallback":"targets","objectFallback":"object","notificationImage":"Image","showTriggerZone":"Draw the zone that triggered the rule","showTriggerZoneHelp":"Outlines the zone on the scene. Not drawn on a subject crop.","showSubjectPath":"Show the subject's path","showSubjectPathHelp":"Draws the line the subject walked, up to the moment of the picture. On a crop, only the part inside it.","askVerdict":"Ask me to confirm detections","askVerdictAria":"ask me to confirm detections","askVerdictHint":"The notification carries Correct and Wrong. A tap marks the detection for retraining, the same mark as in the Library, and records who was asked and when. Channels with no buttons (email, Pushover, Gotify, WhatsApp, Discord) get the same two choices as links."},"notificationSequences":{"name":"Name","minDelayS":"Min delay (s)","step":"Step","steps":"Steps","deleteThisSequence":"Delete this sequence?","willBeRemovedRulesAnd":"“{{name}}” will be removed. Rules and buttons that bind to it keep the id until you re-point them.","delete":"Delete {{name}}","sequences":"Sequences","namedStepListsSharedBy":"Named step lists shared by notification rules and buttons. A rule binds to one by id; two rules sharing a gate share its throttle.","couldNotReadSequences":"Could not read sequences","noSequencesYetCreateOne":"No sequences yet. Create one, then bind it from a rule's Actions tab.","edit":"Edit {{value1}}","newSequence":"New sequence","saving":"Saving…","seconds":"Seconds","stepDo":"Do","stepWait":"Wait","stepsLabel_one":"{{count}} step","stepsLabel_other":"{{count}} steps","stepsDelay_one":"{{count}} step · min delay {{delay}}s","stepsDelay_other":"{{count}} steps · min delay {{delay}}s"},"notificationSimulate":{"simulateAnEvent":"Simulate an event","injectASyntheticDetectionDoorbell":"Inject a synthetic detection, doorbell press or occupancy edge and see exactly which rules match it, which condition each one fails on, and what would be delivered. Nothing is persisted — no track, no event row, no media.","failedToLoadCameras":"Failed to load cameras","unknownError":"Unknown error","ruleToSimulate":"Rule to simulate","pickARuleToPrefill":"— pick a rule to prefill trigger + conditions —","picksTheTriggerThatRule":"Picks the trigger that rule listens for and fills the fields from its conditions. Edit any value below, then inject.","camera":"Camera","loadingCameras":"Loading cameras…","pickACamera":"— pick a camera —","theCameraTheEventIs":"The camera the event is attributed to — what a notification shows.","trigger":"Trigger","quality":"Quality","everyFieldHereCanBe":"Every field here can be left EMPTY, and empty is a real state: a rule with a minimum confidence FAILS on a subject that carries none. Leave one blank to reproduce exactly that.","labelIdentityNamePlateSubclass":"Label (identity name / plate / subclass)","eGMarcoAb123cd":"e.g. Marco, AB123CD","detectionConfidence":"Detection confidence","labelMatchConfidence":"Label-match confidence","importance":"Importance","dwellSeconds":"Dwell (seconds)","howToRunIt":"How to run it","ignoreTheCooldown":"Ignore the cooldown","aRuleThatAlreadyFired":"A rule that already fired recently is normally silenced. Turn this on to fire anyway; leave it off to SEE the suppression.","ignoreMutesAndSnoozes":"Ignore mutes and snoozes","aMutedCameraOrA":"A muted camera or a snoozed rule drops the event before any rule is consulted.","runTheRuleSActions":"Run the rule's actions — this actuates real devices","aMatchedRuleSOntrigger":"A matched rule's onTrigger sequences run for real: locks unlock, lights switch, sirens sound. Off unless you mean it.","stillImage":"Still image","liveSnapshotOfTheCamera":"Live snapshot of the camera","noImage":"No image","evaluateOnlyOneRule":"Evaluate only one rule","everyEnabledRule":"— every enabled rule —","nothingIsPersistedNoTrack":"Nothing is persisted: no track, no event row, no stored media. Delivery is real.","injectEvent":"Inject event","theHubAnsweredButThis":"The hub answered, but this build could not read the answer. That is what a hub older than the simulator looks like — update the server, then re-run.","seededFrom":"Seeded from the rule <b>{{rule}}</b>. Only that rule will be evaluated — clear \\"Evaluate only one rule\\" below to run the whole rule set.","onlyRulesWhoseTrigger":"Only rules whose trigger is <b>{{delivery}}</b> are candidates.","ruleNotInList":"Rule <code>{{id}}</code> is not in the current list — it may have been deleted. The run will find no candidate."},"notificationSimulateFields":{"whatHappened":"What happened","audioClasses":"Audio classes","audioClassId":"Audio class id…","zones":"Zones","detectedClasses":"Detected classes","classIdPersonCar":"Class id (person, car…)","zonesTheSubjectIsIn":"Zones the subject is in","packagePhase":"Package phase","none":"— none —","delivered":"Delivered","pickedUp":"Picked up","eventKind":"Event kind","loadingKinds":"Loading kinds…","pickAKind":"— pick a kind —","pickACameraFirstSensor":"Pick a camera first — sensor and control kinds come from the devices linked to it.","thisCameraHasNoLinked":"This camera has no linked sensor or control device, so it can produce no device event. Link one on the camera page first.","sourceDevice":"Source device","theCameraItself":"the camera itself","theLinkedDeviceWhoseState":"The linked device whose state changed. Filled in for you when you pick a kind.","filledInFromContributedBy":"Filled in from \\"{{label}}\\" — contributed by device #{{deviceId}} via the {{capName}} capability.","eventTypeToken":"Event type token","pressPressLong":"press, press_long…","onlyEventEmitterSourcesCarry":"Only event-emitter sources carry one. A passive sensor emits none, and a rule gating on a token would fail closed for it.","zone":"Zone","leaveEmptyForTheWhole":"Leave empty for the whole frame.","class":"Class","anyClass":"— any class —","countNow":"Count now","countBefore":"Count before","threshold":"Threshold","occupied":"Occupied","advanced":"Advanced","zoneCrossing":"zone crossing","thisEventIsAConfirmed":"This event is a confirmed zone crossing","enteredTheZone":"Entered the zone","leftTheZone":"Left the zone","boundingBox":"bounding box","carryABoundingBox":"Carry a bounding box","normalized01TopLeft":"Normalized 0–1, top-left origin. Feeds the \`customZones\` condition and decides how the still is cropped or boxed.","happenedAt":"Happened at","set":"Set","now":"Now","emptyNowSetItTo":"Empty = now. Set it to a time inside (or outside) a rule's schedule window to test the schedule without waiting for the hour.","detectionSource":"Detection source","unsetReadsAsPipeline":"— unset (reads as pipeline) —","pipeline":"Pipeline","onboardCamera":"Onboard (camera)","sensor":"Sensor","audio":"Audio","actuatesDevices":"actuates devices","occupiedLabel":"occupied"},"notificationSimulateResult":{"copyRecordId":"Copy record id","didNotMatchTheEngine":"Did not match. The engine reported no failing condition id.","noRuleEvaluated":"No rule was evaluated. Either no enabled rule declares the <b>{{delivery}}</b> delivery, or the ones that do were filtered out before evaluation — the notes above say which.","failingCondition":"Did not match — first failing condition <code>{{condition}}</code>.","enqueued_one":"{{count}} outbox row enqueued","enqueued_other":"{{count}} outbox rows enqueued","noTargetResolved":"no target resolved, so nothing will be delivered","matchedOn":"matched on: {{on}}","delivery":"delivery <b>{{value}}</b>","candidates":"candidates <b>{{value}}</b>","still":"still <b>{{value}}</b>","droppedBy":"dropped: {{by}}"},"notificationSnoozes":{"silencedRightNow":"Silenced right now","nothingIsSilencedASnooze":"Nothing is silenced. A snooze opened from the app or from a notification button appears here until its clock runs out.","noSummary":"no summary","endNow":"End now","setBy":"set by {{user}} · {{remaining}}","remEnding":"ending","remMin":"{{count}}m left","remHour":"{{count}}h left","remHourMin":"{{hours}}h {{minutes}}m left"},"notificationSummaries":{"summaryRulesAreNotAvailable":"Summary rules are not available on this hub","theHubAnsweredSomethingThis":"The hub answered something this admin build does not understand. Update both and reload.","thisHubHasNotBeen":"This hub has not been updated to serve summary rules yet. Deploy addon-post-analysis and reload — nothing is lost in the meantime.","couldNotDeleteTheRule":"Could not delete the rule","theTestRunFailed":"The test run failed","nothingWasProduced":"Nothing was produced:","dismiss":"Dismiss","noSummaryRulesYetCreate":"No summary rules yet — create one, and every window it covers arrives as a single picture.","summaries":"Summaries","newSummary":"New summary","digest":"Digest","aiOff":"AI off","cameras":"Cameras","window":"Window","keeps":"Keeps","mosaic":"Mosaic","targets":"Targets","lastRun":"Last run","on":"On","toggle":"toggle {{name}}","produceThisDigestNowAnd":"Produce this digest now and DELIVER it","test":"test {{name}}","deleteThisSummary":"Delete this summary?","thisWillPermanentlyDeleteThis":"This will permanently delete \\"{{name}}\\". This action cannot be undone.","delete":"delete {{name}}","tilesRank_one":"{{count}} tile · {{rank}}","tilesRank_other":"{{count}} tiles · {{rank}}"},"notificationSummaryEditor":{"newSummary":"New summary","edit":"Edit {{name}}","whatItIs":"What it is","oneWindowOnePictureThe":"One window, one picture: the best shot of every track the window held, laid out as one mosaic and delivered once.","name":"Name","eGOvernightSweep":"e.g. Overnight sweep","enabled":"Enabled","cameras":"Cameras","everyCameraInTheDigest":"Every camera in the digest gets at least one tile when it contributed anything — a digest in which two of six cameras never appear is not multi-camera.","theFirstCameraSelectedOwns":"The first camera selected owns the delivered notification.","whenTheWindowCloses":"When the window closes","window":"Window","motionOpenedAndClosedBy":"Motion — opened and closed by activity","scheduleFixedWeeklyWindows":"Schedule — fixed weekly windows","quietPeriodSeconds":"Quiet period (seconds)","theWindowOpensOnThe":"The window opens on the first motion on any of these cameras and stays open while more arrives. This much silence closes it.","longestWindowSeconds":"Longest window (seconds)","aPermanentlyBusyDrivewayWould":"A permanently busy driveway would otherwise never deliver. At this bound the window closes with whatever it holds.","weeklyWindows":"Weekly windows","theDigestIsProducedWhen":"The digest is produced when a window CLOSES, and covers exactly that window. The first one is the first window that closes after you save — nothing is backfilled.","waitForOpenTracksSeconds":"Wait for open tracks (seconds)","aTrackSBestShot":"A track's best shot is written when the track ENDS. Rendering the instant the window closes would show every still-moving subject with no picture. 0 disables the wait.","whatGoesIn":"What goes in","evaluatedOnTracksOnePassage":"Evaluated on tracks: one passage is one tile.","classes":"Classes","emptyEveryClassOnlyThe":"Empty = every class. Only the macro classes are offered: a digest matches the class stored on the track, and tracks store macros — a sub-type would match nothing, forever.","excludedClasses":"Excluded classes","zones":"Zones","zonesAreScopedPerCamera":"Zones are scoped per camera: picking a zone on one camera does not mute the others, which keep matching on the whole frame.","minimumImportance":"Minimum importance","thePipelineSOwnScore":"The pipeline's own score, 0–1. Empty keeps everything.","minimumStaySeconds":"Minimum stay (seconds)","dropsThePassagesTooBrief":"Drops the passages too brief to be worth a tile.","includeParkedObjects":"Include parked objects","offByDefaultACar":"Off by default. A car left in the drive is tracked until it is recognised as parked, and it stays parked for as long as it is there — with this on, a digest fills up with the same stationary object instead of the passages. Parked objects remain on the Events page either way.","theMosaic":"The mosaic","tiles":"Tiles","9A33Grid":"9 (a 3×3 grid) is the most a phone lock-screen thumbnail can carry and still be read.","whenThereAreMoreTracks":"When there are more tracks than tiles","everyContributingCameraKeepsIts":"Every contributing camera keeps its single best tile first; the remaining slots go to this ranking.","textOnTheMosaic":"Text on the mosaic","imagesOnlyIsTheDefault":"Images only is the default, and it is what a rule with nothing set here does. Anything drawn is burnt into the picture for good — a label covers the bottom of the tile, which is where feet, wheels and parcels are, and a caption from a detection that was wrong cannot be un-drawn. Nothing downstream needs the words: the written summary reads the frames themselves and is told the camera, the class and the time in its prompt.","captionBurnedOntoTheMosaic":"Caption burned onto the mosaic","leaveEmptyForNoCaption":"Leave empty for no caption","acrossTheTopBand":"Across the top band.","onlyDrawnWithTileLabels":"Only drawn with “tile labels and a caption across the top”. What you type here is kept either way.","writtenSummary":"Written summary","oneVisionCallOverThe":"One vision call over the window's best frames TOGETHER, so the answer is an account of what happened rather than a list of pictures. The sentence goes in the notification body.","haveAModelDescribeThe":"Have a model describe the window","offByDefaultTheMosaic":"Off by default. The mosaic and the counts are delivered either way.","theSwitchAboveIsOff":"The switch above is off, so nothing below it can be edited. Everything you already set is kept — turning it on hands the fields back exactly as you left them.","visionProfile":"Vision profile","theHubSDefaultVision":"The hub's default vision profile","thisHubDidNotAnswer":"This hub did not answer with a profile list — the digest will use whatever the AI addon resolves for the “ai-summary” consumer.","noVisionCapableProfileOn":"No vision-capable profile on this hub yet. Add one under AI → Profiles; until then the digest delivers without text.","onlyVisionCapableProfilesAre":"Only vision-capable profiles are offered — a vision call against a text profile is refused, never degraded.","answerIn":"Answer in","donTAskForA":"Don’t ask for a language","nothingIsAddedToThe":"Nothing is added to the prompt unless you pick one, and these models answer in English on their own.","yourQuestionOptional":"Your question (optional)","eGTellMeWhether":"e.g. Tell me whether anybody approached the gate, and whether a parcel was left.","leaveBlankForWhatHappened":"Leave blank for “what happened during this period?”. Your words are the only free text the model is given: what the cameras are called and what the pipeline classified are reduced to plain labels first, and anything written INSIDE a frame — a sign, a plate, an overlay — is treated as scenery, never as an instruction.","framesTheModelMayLook":"Frames the model may look at","theHighestRankedTilesSent":"The highest-ranked tiles, sent as ONE question. Bounded separately from the tile budget — one is bounded by pixels, the other by the model's time — and never larger than it.","timeLimitSeconds":"Time limit (seconds)","nobodyIsWaitingOnA":"Nobody is waiting on a phone for a digest, so this is generous. At the bound the generation is cancelled, not merely abandoned.","frameSizeSentPixels":"Frame size sent (pixels)","longestEdge448IsThe":"Longest edge. 448 is the native tile size of these vision encoders — larger costs tokens and latency without adding detail the encoder can see.","ifTheModelGivesNo":"If the model gives no answer","aColdModelAnUnreachable":"A cold model, an unreachable endpoint or an answer the hub cannot parse are all this case. The default delivers: the mosaic and the counts are worth more than silence, and a closed window does not come back.","delivery":"Delivery","priority":"Priority","deliverAWindowThatMatched":"Deliver a window that matched nothing","offByDefaultANightly":"Off by default: a nightly '0 events' is a line nobody reads, and it costs the lines beside it their reader.","create":"Create","aiToken":"<code>{{token}}</code> is the written summary. A body that never names it still gets the sentence, appended on its own line — a template written before the AI pass existed must not make the feature look broken."},"notificationSystemEventDelivery":{"delivery":"Delivery","instantANotificationPerEvent":"Instant — a notification per event","summaryOnScheduleTheCurrent":"Summary on schedule — the current state, at set times","nothingIsSentPerEvent":"Nothing is sent per event. At each time below, one notification lists what is still true for the kinds and filters of this rule — low batteries, consumables, devices or streams offline, updates available — or one notification per category, if you choose so below. Nothing to report sends nothing. Time zone:","theHubS":"the hub’s","howTheSummaryIsSent":"How the summary is sent","oneMessageWithEveryCategory":"One message with every category","oneNotificationPerCategoryBatteries":"One notification per category (batteries, consumables, devices…)","readingTheState":"Reading the state…","previewTheSummaryNow":"Preview the summary now"},"notificationTargets":{"target":"Target","kind":"Kind","owner":"Owner","on":"On","toggle":"toggle {{name}}","test":"Test","duplicate":"Duplicate","notificationTargets":"Notification Targets","deliverNotificationsToNtfyPushover":"Deliver notifications to ntfy, Pushover, Telegram, Home Assistant and more. Each target's kind declares its capabilities; the test panel shows exactly what a message degrades to.","addTarget":"Add target","failedToLoadTargets":"Failed to load targets","unknownError":"Unknown error","noNotificationTargetsYetClick":"No notification targets yet. Click \\"Add target\\" to configure one.","chooseANotificationKind":"Choose a notification kind","noNotificationProvidersAreInstalled":"No notification providers are installed. Install the notifiers addon (or connect Home Assistant) to add targets.","saveChanges":"Save changes","createTarget":"Create target","name":"Name","systemSharedAdminManaged":"System (shared, admin-managed)","aUserOwnedTargetBelongs":"A user-owned target belongs to that user: it shows in their viewer and their own rules may deliver to it. System targets stay admin-managed.","storedSecretsLoadIntoThe":"Stored secrets load into the masked fields (eye to reveal). Clear a field to leave the stored value unchanged on save; type a new value to replace it.","testConnection":"Test connection","connected":"Connected — {{value1}}","connectionFailed":"Connection failed","findDevices":"Find devices","discoverTitle":"Devices found","discoverHelp":"These devices are available on your connected accounts and have no target yet. Tick the ones to add.","discoverSearching":"Looking for devices…","discoverNone":"Every device that was found already has a target.","discoverFailed":"Could not look for {{kind}}: {{message}}","discoverAdd":"Add selected ({{count}})","discoverPick":"Add {{name}}"},"notificationTestPanel":{"level":"Level","deriveFromPriority":"— derive from priority —","requiresTargetConfig":"Requires target config:","priorityOrdinal":"Priority (ordinal):","format":"Format","title":"Title","mode":"(mode:","mb":", ≤{{value1}}MB","url":"{{mt}} URL","clickUrl":"Click URL","sound":"Sound","ttlSeconds":"TTL (seconds)","tag":"Tag","payloadPreview":"Payload preview","sendTest":"Send test","delivered":"Delivered","failed":"Failed","resolvedLevel":"Resolved level","formatSent":"Format sent","attachmentsSent":"Attachments sent","actionsSent":"Actions sent","truncated":"Truncated","dropped":"Dropped","testTitle":"Test \\"{{name}}\\" ({{kind}})","qualitative":"qualitative","body":"Body","overflow":"overflow","attachments":"Attachments","attachmentsMeta":"(mode: {{mode}}, max {{max}})","attachmentsMetaMb":"(mode: {{mode}}, max {{max}}, ≤{{mb}}MB)","actionsUpTo":"Actions (up to {{max}})","critical":"critical","silent":"silent","priority":"priority","actionLabelPlaceholder":"label","actionUrlPlaceholder":"url","presetText":"Text only","presetImage":"With image","presetGif":"With GIF","presetVideo":"With video","presetAudio":"With audio","presetActions":"With buttons","presetCritical":"Critical","presetOverflow":"Overflow (advanced)","testFailed":"Test failed"},"notificationTexts":{"englishFallback":"English fallback","resetToTheShippedWording":"Reset to the shipped wording","shipped":"Shipped:","texts":"Texts","theNotificationTextCatalogIs":"The notification text catalog is not available on this hub","theHubAnsweredSomethingThis":"The hub answered something this admin build does not understand. Update both and reload.","thisHubHasNotBeen":"This hub has not been updated to serve the notification text catalog yet. Deploy addon-post-analysis and reload — nothing is lost in the meantime: notifications keep using the shipped wording.","couldNotChangeTheLanguage":"Could not change the language","couldNotSave":"Could not save","hubLanguage":"Hub language","everyNotificationIsWrittenIn":"Every notification is written in this language.","editing":"Editing","ofTextsCustomised":"{{overriddenCount}} of {{length}} texts customised.","thisHubDoesNotSpeak":"This hub does not speak this language — these words are not in use yet.","aRuleThatWritesIts":"A rule that writes its own title or body still overrides everything here — this page is the wording used when a rule does not.","searchAKeyOrA":"Search a key or a sentence…","save":"Save {{pending}}","noTextMatchesThatSearch":"No text matches that search."},"notificationTimelapseEditor":{"newTimelapse":"New timelapse","edit":"Edit {{name}}","whatItIs":"What it is","oneVideoPerCameraAssembled":"One video per camera, assembled from that camera's RECORDED footage when the window closes.","name":"Name","eGNightDriveway":"e.g. Night driveway","enabled":"Enabled","cameras":"Cameras","eachCameraRendersAndDelivers":"Each camera renders and delivers its own video. Recording must be ON for a camera — a timelapse is cut from recorded footage, and the hub refuses a rule for a camera that does not record.","when":"When","weeklyWindows":"Weekly windows","theVideoCoversExactlyOne":"The video covers exactly one window and is delivered when it CLOSES. A window that crosses midnight (21:00 → 07:00) is the ordinary case for a night timelapse.","sampling":"Sampling","twoRatesABaseRate":"Two rates: a base rate for the whole window, and a denser one inside the ranges where something was detected.","baseCadenceSeconds":"Base cadence (seconds)","oneFrameEveryNSeconds":"One frame every N seconds across the quiet parts of the window.","outputFrameRateFps":"Output frame rate (fps)","howFastTheAssembledVideo":"How fast the assembled video plays.","denseCadenceNearTheDetections":"Dense cadence, near the detections","automaticS":"Automatic ({{seconds}}s)","setItMyself":"Set it myself","minimumSecondsOfVideoPer":"Minimum seconds of video per detection (optional)","stateTheStayAndLet":"State the stay and let the renderer solve for the cadence. It only ever samples DENSER, down to the recording's own frame interval — a passage too short to reach it is rendered with every frame that exists and no more.","theNotification":"The notification","preview":"Preview","priority":"Priority","captionOnThePreviewFrame":"Caption on the preview frame","shippedDefault":"{{DEFAULT_TIMELAPSE_PREVIEW_TEXT}} (shipped default)","emptyAndSetThePreview":"Empty and set: the preview frame carries NO caption.","leaveUntouchedForTheShipped":"Leave untouched for the shipped caption ({{DEFAULT_TIMELAPSE_PREVIEW_TEXT}}).","backToTheShippedCaption":"Back to the shipped caption","create":"Create","denseHint":"Lower = slower near the detections. At {{seconds}}s and {{fps}} fps a {{passage}}-second passage lasts {{onScreen}}s on screen; halving the cadence doubles that, and the quiet parts of the night do not change length.","denseDerived":"Automatic keeps tracking the base cadence (base ÷ 30, never below 1s).","denseFixed":"Fixed at this value — the hub cannot unset the field, so going back to Automatic writes the derived number ({{seconds}}s) explicitly.","detectionSummaryNote":"With no body of your own the detection summary is appended automatically, and only when the count is non-zero. With one, nothing is appended — ask for it with <code>{{token}}</code>."},"notificationTimelapses":{"timelapseRulesAreNotAvailable":"Timelapse rules are not available on this hub","theHubAnsweredSomethingThis":"The hub answered something this admin build does not understand. Update both and reload.","thisHubHasNotBeen":"This hub has not been updated to serve timelapse rules yet. Deploy addon-post-analysis and reload — the rules themselves are untouched.","couldNotDeleteTheRule":"Could not delete the rule","theTestRunFailed":"The test run failed","nothingWasProduced":"Nothing was produced:","dismiss":"Dismiss","noTimelapseRulesYetCreate":"No timelapse rules yet — create one, and each night's recorded footage arrives as a short video.","whichCamera":"Which camera","timelapses":"Timelapses","newTimelapse":"New timelapse","timelapse":"Timelapse","cameras":"Cameras","cameras2":"{{length}} cameras","window":"Window","sampling":"Sampling","targets":"Targets","lastRun":"Last run","on":"On","toggle":"toggle {{name}}","renderThisRuleSLast":"Render this rule's last closed window now and DELIVER it","test":"test {{name}}","deleteThisTimelapse":"Delete this timelapse?","thisWillPermanentlyDeleteThis":"This will permanently delete \\"{{name}}\\". This action cannot be undone.","delete":"delete {{name}}","ruleSummary":"{{cadence}}s · {{fps}}fps · dense {{dense}}s","ruleSummaryAuto":"{{cadence}}s · {{fps}}fps · dense {{dense}}s (auto)","ruleDwell":"≥{{sec}}s/detection"},"oidcSettingsConnections":{"deleteOidcConnection":"Delete OIDC connection?","removeTheLoginButtonAnd":"Remove “{{displayName}}” ({{id}}). The login button and IdP credentials for this id are dropped.","id":"Id","name":"Name","issuer":"Issuer","status":"Status","configured":"Configured","notConfigured":"Not configured","delete":"Delete {{displayName}}","eachRowIsOneIdp":"Each row is one IdP. Redirect URI:","addConnection":"Add connection","couldNotLoadConnections":"Could not load connections.","noOidcConnectionsYetAdd":"No OIDC connections yet. Add one to register an IdP.","addOidcConnection":"Add OIDC connection","edit":"Edit {{value1}}","saving":"Saving…","instanceId":"Instance id","urlSlugAppearsInAddon":"URL slug — appears in /addon/{{addonId}}/<id>/callback. Stable; renaming is not supported after save.","instanceId2":"Instance id:","loadingForm":"Loading form…"},"pemField":{"chooseFile":"Choose file"},"remoteAccess":{"remoteAccess":"Remote access","addTunnel":"Add tunnel","remoteAccess2":"Remote Access","publicFacingTunnelsThatExpose":"Public-facing tunnels that expose this hub to the internet (Cloudflare Tunnel, ngrok, …).","noRemoteAccessProvidersInstalled":"No remote-access providers installed","installATunnelAddonE":"Install a tunnel addon (e.g. @camstack/addon-cloudflare) to expose this hub publicly.","connected":"Connected","disconnected":"Disconnected","stop":"Stop","start":"Start"},"storage":{"disable":"Disable \\"{{displayName}}\\"?","nothingIsDeletedSetThe":"{{consequence}} Nothing is deleted — set the location back to Read-only or Active to bring its footage back.","deleteLocation":"Delete location \\"{{displayName}}\\"?","thisRemovesTheLocationRecord":"This removes the location record. Files on disk are not deleted; the underlying directory or remote path stays untouched.","deleteAnyway":"Delete anyway?","forceDelete":"Force delete","loadingLocations":"Loading locations…","failedToLoadStorageLocations":"Failed to load storage locations.","noStorageLocationsDeclaredBy":"No storage locations declared by any installed addon.","forcingNote":"{{error}}\\n\\nForcing the delete removes the record only. Anything still on that location becomes unreachable — index rows naming it stop resolving, and playback of those segments goes silently black rather than erroring."},"system":{"settings":"Settings","secrets":"Secrets","capabilities":"Capabilities"},"turnServers":{"turnProviders":"TURN providers","addProvider":"Add provider","discoveredIceServers":"Discovered ICE servers","turnServers":"TURN Servers","iceServersUsedForWebrtc":"ICE servers used for WebRTC NAT traversal. Multiple providers can coexist — the WebRTC layer concatenates servers from all enabled providers per session.","noTurnProvidersInstalled":"No TURN providers installed","installATurnAddonE":"Install a TURN addon (e.g. @camstack/addon-cloudflare) to enable WebRTC behind restrictive NATs.","combinedIceServerListAll":"Combined ICE server list — all enabled providers","noServersFromEnabledProviders":"No servers from enabled providers."},"wasteSettingsSources":{"countryService":"Country & service","country":"Country","selectCountry":"Select country…","service":"Service","pickACountryFirst":"Pick a country first","selectService":"Select service…","newSource":"New source","deleteWasteSource":"Delete waste source?","removeItsCalendarUnderSystem":"Remove “{{label}}” ({{id}}). Its calendar under System → Calendars is dropped.","label":"Label","module":"Module","enabled":"Enabled","on":"On","off":"Off","delete":"Delete {{label}}","pickACountryAndA":"Pick a country and a service — configuration fields come from that HACS source.","addSource":"Add source","couldNotLoadSources":"Could not load sources.","noWasteSourcesYetAdd":"No waste sources yet. Add one to register a municipal service.","addWasteSource":"Add waste source","edit":"Edit {{value1}}","saving":"Saving…","loadingFields":"Loading fields…","chooseACountryAndService":"Choose a country and service to see the required fields."},"alarmLiveCard":{"panel":"Panel","thisHubDoesNotReport":"This hub does not report the panel's live state yet — update it to arm from here.","disarm":"Disarm","thePanelDidNotDo":"The panel did not do that","armAnyway":"Arm anyway","eachOpenDeviceIsIgnored":"Each open device is ignored until it closes, then monitored again.","excludedSensors":"Excluded sensors","noSensorIsExcluded":"No sensor is excluded.","arm":"Arm {{mode}}"},"alarmModeCard":{"armsNothingNoEnabledRule":"Arms nothing — no enabled rule is gated on this mode","checkingWhichDevicesAreOpenings":"Checking which devices are openings…","usesTheSystemDefaultS":"Uses the system default ({{value1}} s)","default":"Default","useTheDefault":"Use the default","useTheDefault2":"{{label}}: use the default","afterTrigger":"After trigger","usesTheSystemDefault":"Uses the system default","afterTriggerUseTheDefault":"After trigger: use the default","activationSchedule":"Activation schedule","whenThisModeMayBe":"When this mode may be armed. Empty means any day and time.","noSensorIsCoveredBy":"No sensor is covered by a rule of this mode.","checksSensors_one":"Checks {{count}} sensor","checksSensors_other":"Checks {{count}} sensors","notNotified":"{{count}} not notified","openingsCheckFailed":"Couldn't check which devices are openings ({{error}}).","postRearm":"Re-arm after","postDisarm":"Disarm after","postNothing":"Do nothing (stay triggered)","delaysHint":"Blank delay fields use the system defaults (exit 30 s, entry 20 s, re-arm after {{seconds}} s)."},"alarmProfileBar":{"profile":"Profile","deleteThisProfile":"Delete this profile","newName":"New name","newProfileName":"New profile name","rename":"Rename","createWithSystemDefaults":"Create with system defaults","create":"Create","cloneTheSelectedProfile":"Clone the selected profile","clone":"Clone","createStartsFromSystemDefaults":"Create starts from system defaults. Clone copies the selected profile (sensors, secure-on-arm, delays). Switching applies that profile for the next arm.","defaultSuffix":"default"},"alarmSensorTable":{"name":"Name","type":"Type","state":"State","checkedWhenArming":"Checked when arming","blocksArming":"Blocks arming","blocksArming2":"Blocks arming: {{name}}","closeLockOrTurnOff":"Close, lock, or turn off when this mode arms","secureOnArm":"Secure on arm","secureOnArmCloseLock":"Secure on arm (close/lock/off): {{name}}","couldNotReadTheSensor":"Could not read the sensor states.","searchSensors":"Search sensors","cellChecking":"Checking…","cellUnknown":"Unknown","cellHubTooOld":"This hub does not report sensor states — update the hub","cellReadFailedError":"Could not read: {{error}}","cellOfflineLastKnown":"Offline — last known","cellNotAnswered":"Not answered","cellReadFailed":"Could not read","cellNoState":"No state reported","cellNotOpening":"Not an opening","cellRemoved":"Removed","cellRemovedNote":"No longer in the device list","listedUncovered":"Not checked by this mode — switch on to remove the entry","cellNo":"No","cellYes":"Yes","detectionOff":"detection off","cellSkipped":"Skipped","cellSkippedNote":"Blocks arming; notifications skipped: {{why}}","cellAllDevices":"All-devices","cellNeverBlocks":"Never blocks this mode"},"notificationClassScopeField":{"addValue":"Add value…"},"notificationConditionWidgets":{"remove":"remove {{v}}","customValueClickToRemove":"Custom value — click to remove","eventToken":"Event token…","subTypeNeverCountsAlways":"{{stored}} — sub-type, never counts (always 0)","loadingZones":"Loading zones…","wholeFrame":"— whole frame —","anyClass":"— any class —","threshold":"Threshold","count":"Count","holdFor":"Hold for","clear":"Clear","noCameraPickedOnThe":"No camera picked on the Devices tab: this watches EVERY camera's occupancy, and no zone can be offered until you choose one — a zone id belongs to a camera.","countsConfirmedTrackedObjectsFrom":"Counts confirmed tracked objects from zone analytics. The change must hold for the sustain window before it fires; with no snapshot for the camera or zone the rule never fires.","storedByTheRuleNot":"Stored by the rule — not offered by this hub","keptFromTheRuleUnknown":"Kept from the rule, unknown to this hub:","confirmAfter":"Confirm after","louderThan":"Louder than","hits":"Hits","withNeitherASoundNor":"With neither a sound nor a level threshold this can never match — every sample would be a hit, so the engine refuses it rather than notifying on silence.","plateText":"Plate text…","seen":"Seen:","maxDistance":"Max distance","noDeviceGate":"— no device gate —","thisDeviceReportsNoState":"This device reports no state the gate can read, so it cannot arm a rule.","theRuleIsSilentWhile":"The rule is silent while the device is in any other state — including when its state cannot be read at all.","opBecameOccupied":"Became occupied","opBecameFree":"Became free","opCountAtLeast":"Count ≥","opCountAtMost":"Count ≤","audioModeLabel":"Sounds — fires at once","audioModeLevel":"Volume — over a window","audioConfirmHint":"Fires when that many labelled frames land inside the window (default {{hits}} in {{window}} s). A single-frame false positive never reaches 2; a real episode usually labels two or three frames. The rule's cooldown is the other throttle.","hitsPercentDefault":"% (default {{value}})","over":"over","secondsDefault":"s (default {{value}})","dbfsHint":"dBFS is negative-going: 0 is full scale, {{min}} is silence — so a HIGHER number is a narrower filter. Measured on this hub, a baby crying reads −55 to −26 dBFS, so a floor above −55 excludes most of it. The window must be FULL before it can match.","frames":"frames","within":"within"},"notificationDigestFields":{"thisRuleCouldNeverProduce":"This rule could never produce anything, so it cannot be saved:","worthKnowing":"Worth knowing:","noDeliveryTargetIsConfigured":"No delivery target is configured. Add one on the Targets tab first — without one the artefact is rendered and thrown away.","notificationTitle":"Notification title","notificationBody":"Notification body","leaveBothBlankToUse":"Leave both blank to use the hub's own wording (editable on the Texts tab).","sendARealNotificationNow":"Send a real notification now?","itDoesNotConsumeThe":"It does not consume the schedule: the next scheduled run still happens.","sending":"Sending…","produceAndSend":"Produce and send","confirmSend":"\\"{{rule}}\\" will be produced over {{window}} and DELIVERED to {{target}} — on every phone that target reaches, right now. This is not a dry run."},"notificationRulePickers":{"customValueClickToRemove":"Custom value — click to remove"},"notificationScheduleField":{"activeOutsideTheWindows":"Active outside the windows","invertedScheduleShownAsBands":"Inverted schedule — shown as bands. Clear the invert flag (or the windows) to author punctual times.","shownAsSendAtTimes":"Shown as send-at times from each window's end (when the summary fires). Edit or save to store them as punctual one-minute windows.","noTimesYetAddOne":"No times yet — add one to send on those days at that clock time.","removeWindow":"Remove window","at":"At","removeTime":"Remove time","addWindow":"Add window","addTime":"Add a time"},"notificationSystemEventField":{"summaryClassHint":"At the scheduled time you get the list of what is in the bad state, not each change.","instantClassHint":"A paired event tells you both when it goes wrong and when it comes back.","noSnapshot":"no state snapshot, reports nothing","theBatteryThresholdAndThe":"The battery threshold and the reminder interval are cluster settings (the consumable threshold is this rule’s own, below):","settingsBatteryOfflineAlerts":"Settings → Battery & offline alerts","alarmSettings":"Alarm settings","couldNotCheckWhetherThis":"Could not check whether this hub’s server knows per-rule consumable thresholds and tank alerts.","consumableLowAt":"Consumable low at (%)","deviceTypes":"Device types","deviceType":"Device type…","batteryAndConsumableAlertsAre":"Battery and consumable alerts are narrowed by device type here. Batteries and consumables belong to sensors, containers, vacuums and mowers — rarely to a camera — so a type filter meant for liveness silences them. Leave the types empty, or put these kinds in a rule of their own.","nodes":"Nodes","packages":"Packages","thisRuleIsNotOne":"This rule is not one kind of system rule — its events span device events, system and alarm, or it names none. It keeps firing as it is, but it cannot be edited here: recreate it as one rule per kind.","kindOfSystemRule":"Kind of system rule","oneRuleAnswersOneQuestion":"One rule answers one question: about devices, about the installation, or about the alarm. Changing it starts the event list over.","alarmPictures":"— when a rule sets the alarm off, this notification carries that rule's pictures.","hubOutdated":"This hub's server predates per-rule consumable thresholds and tank alerts: it drops a rule's threshold when the rule is saved (the rule then judges at {{percent}}%) and refuses tank events. Update the server (@camstack/server) on every node first."},"scopePickers":{"theNodeHistoryCouldNot":"The node history could not be read — offline nodes may be missing from this list.","roleHub":"Hub","roleAgents":"Agents","roleNodes":"Nodes","pkgServer":"Server","pkgFramework":"Framework","pkgWrapper":"Wrapper","pkgAddons":"Addons","pkgPackages":"Packages","offlineSuffix":"{{role}} · offline"},"targetSecretNotice":{"theHubNeedsTheSecret":"The hub needs the secret again — nothing was saved.","changed":"You changed {{fields}}. If that changes where this target sends, the hub will not reuse the stored secret. {{toType}}"},"unifiedRulesColumns":{"when":"When","type":"Type"},"cluster":{"unlockFromAgentFailed":"Unlock from agent failed:","loadingClusterTopology":"Loading cluster topology..."},"keychainAuditTable":{"colWhen":"When","colAction":"Action","colActor":"Actor","colRef":"Ref","colDetail":"Detail","range":"{{from}}–{{to}} of {{total}}","rangeRecent":"{{from}}–{{to}} of {{total}} most recent"},"alarmDelay":{"exitLabel":"Exit delay","exitHint":"Time between arming and the mode taking effect — long enough to leave.","exitZero":"arms immediately","entryLabel":"Entry delay","entryHint":"Time between a trigger and the alarm firing — long enough to reach the keypad.","entryZero":"fires immediately","sirenLabel":"After (seconds)","sirenHint":"How long the alarm stays triggered before the after-trigger action runs. Ignored when the action is “do nothing”.","sirenZero":"runs the action immediately","rangeError":"Enter a whole number of seconds from 0 to {{max}}."},"connectivity":{"exporters":"Exporters","exportersInstall":"Add export","exportersEmptyTitle":"No device exporters installed","exportersEmptyDescription":"Install an export addon to publish devices to Alexa, HomeKit, Google Home or Home Assistant.","email":"Email","emailInstall":"Add email provider","emailEmptyTitle":"No email providers installed","emailEmptyDescription":"Install an SMTP or Gmail addon to send notification email from this hub.","brokers":"Brokers","brokersInstall":"Add broker addon","brokersEmptyTitle":"No message brokers installed","brokersEmptyDescription":"Install a broker addon to connect Home Assistant, Homematic, MQTT, Matter and similar systems.","calendars":"Calendars","calendarsInstall":"Add calendar source","calendarsEmptyTitle":"No calendar sources installed","calendarsEmptyDescription":"Install a calendar-source addon (Google Calendar, waste collections, …) to feed System → Calendars.","connections_one":"{{count}} connection","connections_other":"{{count}} connections","connectionsConnected_one":"{{count}} connection · {{connected}} connected","connectionsConnected_other":"{{count}} connections · {{connected}} connected"},"ai":"AI","calendars":"Calendars","data":"Data","identity":"Identity & Access","myAccess":"My access","network":"Network","notifications":"Notifications","terminal":"Terminal","aiRuntimes":{"sizeGb":"{{value}} GB"}}`),common:{save:`Save`,cancel:`Cancel`,delete:`Delete`,enable:`Enable`,disable:`Disable`,edit:`Edit`,add:`Add`,remove:`Remove`,confirm:`Confirm`,close:`Close`,back:`Back`,next:`Next`,search:`Search`,filter:`Filter`,reset:`Reset`,apply:`Apply`,submit:`Submit`,loading:`Loading…`,error:`Error`,success:`Success`,warning:`Warning`,info:`Info`,noData:`No data available`,noResults:`No results found`,retry:`Retry`,refresh:`Refresh`,copy:`Copy`,copied:`Copied!`,yes:`Yes`,no:`No`,logs:`Logs`,events:`Events`,state:`State`,assign:`Assign`,all:`All`,select:`Select`,name:`Name`,settings:`Settings`,restart:`Restart`,step:`Step`,compile:`Compile`,unknownError:`Unknown error`,targetCount_one:`{{count}} target`,targetCount_other:`{{count}} targets`,enrolledOn:`Enrolled on {{when}}`,logsOf:`Logs — <code>{{id}}</code>`,readOnly:`read-only`,deviceOrphans_one:`{{count}} device pointing at integrations no longer registered`,deviceOrphans_other:`{{count}} devices pointing at integrations no longer registered`,days:`days`,online:`online`,offline:`offline`,hubWord:`hub`,live:`live`,off:`off`,none:`none`,selectedCount:`{{count}} selected`,coresCount_one:`{{count}} core`,coresCount_other:`{{count}} cores`,onlineCount:`{{count}} online`,offlineCount:`{{count}} offline`,synced:`synced`,unbound:`unbound`,never:`never`,auto:`auto`,copiedLower:`copied`,unavailable:`unavailable`,unreachable:`unreachable`,on:`on`,deprecated:`deprecated`,current:`current`,dismiss:`dismiss`,valueWord:`value`,true:`true`,false:`false`,cluster:`cluster`,failedWord:`failed`,connected:`connected`,missing:`missing`,unknownWord:`unknown`,muted:`muted`,override:`override`,skipped:`skipped`,unchanged:`unchanged`,defaultWord:`default`,edited:`edited {{when}}`,nextRun:`next {{when}}`,moreCount:`+{{count}} more`,onlineOfTotal:`<b>{{online}}</b>/{{total}} online`,fpsWord:`fps`,stored:`{{count}} stored`,current2:`current`,unset:`unset`,disabled:`disabled`,open:`open`,everyone:`everyone`,systemWord:`system`,customised:`customised`,pending:`pending`,matches_one:`{{count}} match`,matches_other:`{{count}} matches`,labels_one:`{{count}} label`,labels_other:`{{count}} labels`,peers_one:`{{count}} peer`,peers_other:`{{count}} peers`,self:`self`,sessionsCount_one:`{{count}} session`,sessionsCount_other:`{{count}} sessions`,runningOfTotal:`<b>{{running}}</b>/{{total}} running`,sessionsLabel:`sessions`,tokensLabel:`tokens`,empty:`empty`,rooms_one:`{{count}} room`,rooms_other:`{{count}} rooms`,parkedSince:`parked {{since}}`,motionWord:`motion`,stale:`stale`},connection:{disconnected:`Server unreachable — reconnecting…`,connected:`Connected`,reconnecting:`Reconnecting…`,degraded:`Live connection interrupted — hub is online (a cluster node may be unresponsive), re-establishing…`,degradedNodes_one:`Cluster degraded — node {{nodes}} not responding. Hub is online, live link re-establishing…`,degradedNodes_other:`Cluster degraded — nodes {{nodes}} not responding. Hub is online, live link re-establishing…`,degradedCount_one:`Cluster degraded — {{count}} cluster node offline. Hub is online, live link re-establishing…`,degradedCount_other:`Cluster degraded — {{count}} cluster nodes offline. Hub is online, live link re-establishing…`,sessionExpired:`Session expired — please sign in again.`,signIn:`Sign in`},passkeyPrompt:{message:`Save a passkey for faster sign-in?`,enrollNow:`Enroll now`,notNow:`Not now`},status:{online:`Online`,offline:`Offline`,connecting:`Connecting`,error:`Error`,disabled:`Disabled`,enabled:`Enabled`,active:`Active`,inactive:`Inactive`,running:`Running`,stopped:`Stopped`,pending:`Pending`,unknown:`Unknown`},auth:{login:`Login`,logout:`Logout`,username:`Username`,password:`Password`,signIn:`Sign In`,invalidCredentials:`Invalid username or password`,authAuditSection:{authenticationAudit:`Authentication audit`,loadingAuditTrail:`Loading audit trail…`,couldNotLoadTheAudit:`Could not load the audit trail:`,requestFailed:`Request failed`,noAuthenticationEventsRecordedYet:`No authentication events recorded yet.`,thisTrailRecordsAdminToken:`This trail records admin-token create/use/revoke, trusted-network 2FA skips, and credential revokes (including single share-link revoke). Browser password logins are not listed here.`,latest:`Latest {{count}}, newest first`},mySessionsSection:{signOutThisSession:`Sign out this session`,willHaveToSignIn:`{{label}} will have to sign in again.`,signOut:`Sign out`,signOutEverywhere:`Sign out everywhere`,everySessionOfYourAccount:`Every session of your account ends, this browser included: you will be signed out here too and every device has to sign in again.`,activeSessions:`Active sessions`,theBrowsersAndAppsSigned:`The browsers and apps signed in to your account. Signing one out ends it at once.`},reauthDialog:{confirmItSYou:`Confirm it’s you`,currentPassword:`Current password`,useAPasskey:`Use a passkey`,needsPassword:`{{action}} needs your password or a passkey, even though you are signed in.`},sessionsList:{loadingSessions:`Loading sessions…`,couldNotLoadSessions:`Could not load sessions:`,thisDevice:`This device`,ipUnknown:`IP unknown`,signOut:`Sign out`,lastActive:`Last active {{when}}`,expires:`Expires {{when}}`},tokenModals:{token:`Token: {{label}}`,copyThisTokenNowOnce:`Copy this token now. Once you close this dialog the secret cannot be displayed again.`,done:`Done`},adminTokenNoticeFull:`A token with all permissions acts as a <strong>full administrator</strong> for scripts, e.g. <code>node scripts/hub/hub.mjs --token-file /path/to/token …</code>. Anyone holding it can do anything an admin can.`,adminTokenNoticeShort:`A token with all permissions acts as a <strong>full administrator</strong>. Anyone holding it can do anything an admin can. Creating one asks you to confirm it is you.`,expiryInvalid:`Expiry must be a whole number of days, 1 to {{max}}.`,expiryHint:`Whole number of days, 1 to {{max}}.`},theme:{dark:`Dark`,light:`Light`,system:`System`},language:{select:`Language`,en:`English`,it:`Italian`},pages:{viewer:{frameTitle:`CamStack viewer`,underMountTitle:`The viewer cannot be shown through this relay`,underMountBody:`This admin UI is served under {{mount}}. The viewer app only runs at the hub’s own address — open it there, in a new tab.`},integrations:{title:`Integrations`,subtitle:`Manage camera sources and provider connections`},metrics:{title:`Metrics`,subtitle:`System performance and usage statistics`},agents:{title:`Agents`,subtitle:`Manage distributed processing agents`},addons:{title:`Addons`,subtitle:`Extend functionality with addon modules`},settings:{title:`Settings`,subtitle:`Configure system-wide preferences`},users:{title:`Users`,subtitle:`Manage user accounts and permissions`},logs:{title:`Logs`,subtitle:`View system and device logs`}},integrations:{preview:`Preview`,snapshotUnavailable:`Snapshot unavailable`,noSnapshot:`No snapshot`,lastSnapshot:`Last snapshot:`,offline:`Offline`,active:`Active`,available:`Available`,noDevices:`No devices.`,addFirstDevice:`Add your first device to get started.`,import:`+ Import`,noProviders:`No providers available. Install a provider addon.`,manage:`Manage`,integrationName:`Integration name`,integrationNamePlaceholder:`e.g. Garage Server`,nameRequired:`Name is required`,nameRequiredSubmit:`Enter a name before continuing.`,connectionSuccess:`Connection successful!`,errorPrefix:`Error:`,back:`Back`,testing:`Testing...`,testConnection:`Test connection`,forward:`Next`,searchingDevices:`Searching for devices...`,foundDevices:`Found {{count}} devices. Select the ones to import.`,noDevicesFound:`No devices found.`,skip:`Skip`,importSelected:`Import selected`,newIntegration:`New Integration`,configureIntegration:`Configure Integration`,importDevices:`Import Devices`,addDevice:`Add device`,name:`Name`,namePlaceholder:`e.g. Entrance Camera`,snapshotUrlOptional:`Snapshot URL (optional)`,streamUrls:`Stream URLs`,addStream:`Add stream`,cancel:`Cancel`,saving:`Saving...`,save:`Save`,saveAndNew:`Save and new`,test:`Test`,stream:`Stream {{number}}:`,devices:`devices`,rediscover:`Rediscover`,config:`Config`,integrationNotFound:`Integration not found.`,configComingSoon:`Config coming soon.`,providerConfig:`Provider Config`,editConfig:`Edit configuration`,relinkBrokerHelp:`Choose the broker this integration connects through. Picking a different broker re-points it and restarts the addon.`,currentBroker:`Current broker`,relinkFailed:`Failed to update broker link.`,noBrokerKind:`This integration declares device-adoption but its addon manifest has no brokerKind.`,connectionInconclusive:`Could not be checked:`,connectionUntestable:`This integration cannot be tested before it is created.`,addDeviceDialog:{providerUnavailable:`Provider unavailable`,testLogs:`Test logs`,required:`Required: {{value1}}`,testAll:`Test All`,notReady:`The addon <mono>{{addonId}}</mono> is not ready or does not support manual device creation. Check that the integration is online and try again.`},adoptDevicesModal:{deselect:`Deselect`,select:`Select`,discoveryGranularity:`Discovery granularity`,collapse:`Collapse`,expand:`Expand`,showChild:`Show child`,hideChild:`Hide child`,showAfterAdopt:`Show after adopt`,hideAfterAdopt:`Hide after adopt`,defaultFilter:`Devices`},alexaLoginStep:{loginProxyReturnedAnError:`Login proxy returned an error`,accountName:`Account name`,alexaAccount:`Alexa account`,amazonRegion:`Amazon region`,startingLoginProxy:`Starting login proxy…`,waitingForProxyToBe:`Waiting for proxy to be ready…`,savingCredentials:`Saving credentials…`,openTheLinkBelowTo:`Open the link below to log in to your Amazon account`,afterCompletingTheLoginAnd:`After completing the login and any 2FA steps, this wizard will continue automatically.`,loginToAmazon:`Login to Amazon`,note:`Note:`,waitingForAmazonLoginTo:`Waiting for Amazon login to complete…`,cancelLogin:`Cancel login`,startLogin:`Start login`,proxyNote:`<b>Note:</b> The login proxy runs directly on the hub. If the link does not open or the page does not load, make sure the hub's proxy host and port are reachable from your browser. You can configure <code>proxyHost</code> in the Alexa addon settings and ensure the proxy port is published (Docker port mapping).`},brokerStep:{loginInteractively:`Login interactively`,useExisting:`Use existing`,pasteCookie:`Paste cookie`,createNew:`Create new`,failedToLoadBrokers:`Failed to load brokers:`,unknownError:`Unknown error`,toRegisterOne:`to register one.`,useThisBroker:`Use this broker`,name:`Name`,myHomeAssistant:`My Home Assistant`,creating:`Creating…`,createBroker:`Create broker`,enterANameBeforeCreating:`Enter a name before creating.`,back:`Back`,loadingBrokers:`Loading brokers…`,noBrokers:`No brokers of this kind yet. Switch to <b>{{mode}}</b> to register one.`},scanNetworkModal:{alreadyAdded:`Already added`,added:`Added`,reScan:`Re-scan`,scanningTheLocalNetwork:`Scanning the local network…`,noDevicesRespondedToThe:`No devices responded to the scan.`,scanning:`Scanning…`,scan:`Scan`,theScanFailedTryAgain:`The scan failed. Try again.`,found_one:`Found {{count}} device on the network.`,found_other:`Found {{count}} devices on the network.`,foundShort_one:`Found {{count}} device.`,foundShort_other:`Found {{count}} devices.`},snapshotPopover:{disabled:`Disabled`},integrationColumns:{collapse:`Collapse`,expand:`Expand`,integration:`Integration`,devices:`Devices`,status:`Status`,deviceCount_one:`{{count}} device`,deviceCount_other:`{{count}} devices`},scanTheLocalNetworkFor:`Scan the local network for devices`,scanNetwork:`Scan network`,noIntegrationsConfigured:`No integrations configured.`,clickNewIntegrationToConnect:`Click "New Integration" to connect cameras and devices.`,addDeviceLoading:`Loading…`,addSelected:`Add selected`,adoptAlready:`Adopted`,adoptColName:`Name`,adoptColType:`Type`,adoptDevices:`Adopt devices`,adoptDevicesHint:`Preview the candidate devices and add the ones you want.`,adoptJobAdded:`added`,adoptJobCancel:`Stop`,adoptJobFailed:`failed`,adoptJobProcessed:`processed`,adoptJobSkipped:`already there`,adoptNoCandidates:`No candidate devices found.`,adoptRefresh:`Refresh`,adoptRefreshFailed:`Could not discover devices.`,adoptRefreshTitle:`Re-scan Home Assistant for devices`,adoptSearch:`Search candidates…`,alreadyAdded:`Already added`,alreadyAddedHint:`Already added as "{{name}}" — re-adding would overwrite its settings.`,backToList:`Back to integrations`,childrenLoadError:`Failed to load children`,close:`Close`,closeAndRefresh:`Close`,confirmDelete:`Delete integration`,connectBroker:`Connect a broker`,creating:`Creating integration…`,creatingHint:`Waiting for the addon to restart and register`,creatingOverdue:`This is taking longer than expected. The integration may already have been created — close this dialog and refresh to check.`,delete:`Delete`,deleteTitle:`Delete integration?`,deleteWarning:`This removes the integration "{{name}}" and its {{count}} device(s). The addon will restart. This cannot be undone.`,empty:`No integrations found.`,importLocations:`Import locations from the integration`,integrationNotFoundHint:`The integration "{{id}}" does not exist. It may have been deleted, or the URL may be wrong.`,loading:`Loading…`,logs:`View logs`,noProvidersMatch:`No integrations match your search.`,search:`Search integrations…`,searchProviders:`Search integrations…`,settings:`Settings`,toggleHint:`Click to toggle`,open:`Open`,loadFailed:`Integrations could not be loaded.`,viewTable:`Table`,viewGrid:`Grid`,viewLabel:`Layout`,openNamed:`Open {{name}}`,addMatter:{title:`Add Matter device`,help:`In Home Assistant, open the device and choose Share device. Paste the numeric code or the MT: code here. The device stays in Home Assistant.`,noBroker:`Create the Matter fabric from this integration’s settings first.`,code:`Pairing code`,progress:`Commissioning progress`,working:`Adding…`,submit:`Add device`,failure:{expired:`The pairing code expired. Share the device again and paste the new code.`,notFound:`No Matter device with that code was found on the network.`,wrongCode:`The pairing code was rejected.`,invalid:`Enter an 11-digit or 21-digit manual code, or a code that starts with MT:.`,unknown:`Commissioning failed.`},phase:{discovering:`Looking for the device`,pase:`Opening a secure session`,commissioning:`Adding it to CamStack`,done:`Added`},broker:`Matter fabric`}},ai:{addProfile:`Add profile`,attachSnapshot:`Camera snapshot`,attachTrack:`Recent track`,chatEmpty:`Pick a profile, optionally attach a camera snapshot or a recent track, and send a message. Nothing here is saved.`,chatFailed:`The test call failed`,chooseKind:`Choose a profile type`,clearChat:`Clear`,colAvgMs:`Avg ms`,colCalls:`Calls`,colConsumer:`Consumer`,colDay:`Day`,colDisk:`On disk`,colError:`Error`,colKind:`Kind`,colModel:`Model`,colNode:`Node`,colOkErr:`OK / err`,colOn:`On`,colProfile:`Profile`,colState:`State`,colTokens:`In / out tok`,colVision:`Vision`,createProfile:`Create profile`,defaultDisabled:`This default profile is disabled — callers resolve to no profile.`,defaultMissing:`This default names a profile that no longer exists.`,defaultText:`Default text profile`,defaultVision:`Default vision profile`,editProfile:`Edit {{name}}`,lastDays:`Last {{days}} days`,loadFailed:`Failed to load profiles`,message:`Message`,messagePlaceholder:`Ask the model something…`,model:`Model`,name:`Name`,newProfile:`New {{kind}} profile`,noCameras:`No camera found.`,noEnabledProfiles:`No enabled profile. Add one on the Profiles tab.`,noKinds:`No AI provider is installed.`,noProfiles:`No AI profiles yet. Click "Add profile" to configure one.`,noRuntimes:`No node advertises the llm-runtime capability.`,noTracks:`No track in the last 6 hours.`,noUsage:`No AI calls in this window.`,none:`None`,notVision:`This profile is not vision-capable — an attached image will be refused before anything is read.`,pickModelFirst:`pick a model`,appleNode:`Mac that runs it`,appleAsking:`Asking the nodes…`,appleHint:`Text only for now — notification titles and summaries. Apple refuses prompts framed as surveillance; when it does, the next profile in the chain answers instead.`,colFeatures:`Features`,featureApple:`apple`,featureAppleImages:`apple images`,featureGpu:`GPU`,appleAvailable:`available`,appleUnknown:`unknown`,appleNotMac:`not a Mac`,appleNotEligible:`not eligible`,appleIntelligenceOff:`Apple Intelligence off`,appleModelNotReady:`model downloading`,appleOsTooOld:`macOS too old`,appleHelperMissing:`helper missing`,appleHelperCrashed:`helper crashed`,profile:`Profile`,profilesSubtitle:`One row = one usable model endpoint. The defaults below decide who answers when a feature names no profile.`,profilesTitle:`AI profiles`,ready:`ready`,runtimesFailed:`Failed to read runtime nodes`,runtimesSubtitle:`Nodes advertising the llm-runtime capability: what each has loaded, what it is downloading, and how much model data sits on its disk.`,runtimesTitle:`Managed runtimes`,saveChanges:`Save changes`,saveFailed:`Save failed`,secretHint:`A stored API key is never shown. Leave it as-is to keep it; type a new value to replace it.`,selectModel:`Select a model…`,selectProfile:`Select a profile…`,send:`Send`,snapshotOf:`Snapshot of {{name}}`,stop:`Stop`,streamNote:`The answer streams as the model produces it. A cold model can take a while to load — the status line says which phase it is in.`,systemPlaceholder:`Answer in one short sentence.`,systemPrompt:`System prompt (optional)`,tabProfiles:`Profiles`,tabRuntimes:`Runtimes`,tabTest:`Test`,tabUsage:`Usage`,test:`Test`,testSubtitle:`A throwaway conversation with one profile. Attach a live camera snapshot or a recent track to check the model can actually read a picture. Nothing is saved — only the usage row.`,testTitle:`Test chat`,trackOf:`{{class}} on {{name}}`,unreachable:`unreachable`,usageFailed:`Failed to read usage`,usageSubtitle:`Server-side rollup per day, consumer and profile — never raw call rows. Errors are counted, so a profile that always fails is visible here before a feature reports it.`,usageTitle:`Usage`,vision:`vision`,window:`Window`,defaultsTitle:`Defaults`,hfCheck:`Check`,hfDownloading:`{{file}} ({{index}}/{{count}}) — {{done}}{{total}}`,hfExtras:`Also downloads: {{files}}`,hfHint:`Paste a GGUF file URL, or type org/repo — add :QUANT (e.g. unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_M) when the repo publishes more than one quantization.`,hfInstall:`Download to {{node}}`,hfInstalled:`Downloaded`,hfOverride:`Install anyway ({{size}})`,hfTitle:`Add a model from Hugging Face`,hfVerifying:`verifying {{file}}…`,newChat:`New chat`,onNode:`{{file}} · {{size}} · on {{node}}`,profilesList:`Profiles`,runtimesList:`Nodes`,saveConversation:`Save conversation`,throwawayMode:`Throwaway`,usageList:`Rollup`,presenceUnknownTitle:`Could not check whether AI is installed`,presenceUnknown:`The hub did not answer the capability check. Reload the page to try again.`,absentTitle:`AI is not installed`,absentDescription:`Install the AI addon from System → Addons to add model profiles.`,noProfilesTitle:`No AI profiles yet`,deleteProfileTitle:`Delete profile?`,deleteProfileMessage:`Delete "{{name}}". Features that name it will no longer get an answer from it.`,noRuntimesTitle:`No runtime nodes`,testSetup:`Setup`,chatMode:`Conversation mode`,testConversation:`Conversation`,removeAttachment:`Remove attachment`,chatEmptyTitle:`No messages yet`,testSubtitlePersistent:`Conversations are saved for you and can be reopened. Throwaway mode is still available.`,changeKind:`Change type`,sectionConnection:`Connection`,sectionModel:`Model`,sectionGeneration:`Generation`,sectionAdvanced:`Advanced`,verifyModels:`Verify & load models`,modelsFound_one:`{{count}} model found`,modelsFound_other:`{{count}} models found`,listAuth:`Credentials refused`,listNetwork:`Endpoint unreachable`,listUnsupported:`No model list`,listInvalid:`Connection incomplete`,customModel:`Model id`,customModelHint:`Pick one from the list, or type any model id the provider accepts.`,featureVision:`vision`,featureTools:`tools`,featureStreaming:`streaming`,supportsVision:`Supports vision`,supportsVisionHint:`A vision call against a text-only profile is refused, never downgraded.`,unknownWidget:`This provider needs an editor part this build does not have ({{id}}).`,missingRequired:`required: {{fields}}`,completeProvider:`complete the provider settings`},logging:{levels:{title:`Levels`,subtitle:`Cluster → node, most specific wins. The floor gates what reaches the log destinations; the in-memory viewer keeps every line either way.`,scope:`Scope`,cluster:`Cluster`,effective:`In force here`,fromDefault:`nothing is set anywhere — this is the default`,fromLayer:`decided by the {{source}} layer`,notPersisted:`The settings store could not be read or written — what you see is live, but it would not survive a restart.`,inForce:`in force`,inherits:`inherits — nothing set at this layer`,setHere:`set here: {{level}}`,clear:`Clear`,componentNote:`A per-component layer is planned and not resolvable yet — nothing on this page inherits from one.`,component:`Component`,noComponent:`None`,opsLogRetention:`Retention audit trail`,opsLogRetentionNote:`How long the record of what retention deleted is kept. Cluster-wide, and deliberately longer than any camera window — it is the history of the sweep, not of the camera, and it is what makes a storage leak explainable after the fact. 0 keeps it forever.`},diagnostics:{title:`Diagnostics`,subtitle:`Diagnostics are armed for a window, never switched on. Each carries a deadline and expires by itself — one left running is an incident of its own.`,expiresIn:`expires in {{left}}`,disarmed:`disarmed`,notPersisted:`not persisted — will not survive a restart`,disarm:`Disarm`,camerasPlaceholder:`all cameras`,channels:`Component channels`,channelsSubtitle:`Declared by the addons that own them — this list is not maintained by hand. Arming a channel opens a window with a deadline; it closes by itself.`,noChannels:`No addon on this cluster declares a log channel, or none could be reached right now.`,notPerCamera:`not filterable per camera`}},clusterLoad:{sourceNote:"Drawn from the `metrics.node-processes-snapshot` event this node already emits on a fixed cadence — this page adds no sampling of its own. It is read back through `metricsProvider.getLoadSeries`, the ONE reader over both retention tiers: the node keeps its last 180 snapshots in memory, and the hub keeps the operator retention on disk.",durableYes:`The durable tier answered, so this window survives closing the page AND a node restart.`,durableNo:`The durable tier did NOT answer — this window is the in-memory ring alone (about an hour) and a node restart clears it.`,windowSince:`Showing from {{since}}.`,reduced:`{{samples}} raw snapshots, reduced to one point per {{bucket}}s. A point carries its bucket MAXIMUM, never a mean — a mean would smear away the spike this chart exists to find.`,unreduced:`{{samples}} raw snapshots, one point each.`,noThreadSplit:`No thread-level CPU split on this node — /proc/<pid>/task is Linux-only, and the first sample after a restart has no window to measure. CPU below falls back to the ps lifetime AVERAGE, which is not a rate.`,loadingRetained:`Reading the retained series from this node…`,waitingFirstSample:`No retained samples for this node — waiting for the next snapshot. The chart needs two to draw a rate.`,bucketRoot:`Node supervisor`,bucketUnattributed:`Unattributed processes`,processCount:`{{count}} process(es)`,cpuTitle:`CPU % of one core`,cpuTitleLifetime:`CPU % (ps lifetime average)`,seriesMain:`Main threads`,seriesGc:`GC / V8 helpers`,cpuUnavailable:`No thread split on this node. Lifetime average: {{avg}}%`,memoryTitle:`Memory RSS`,memoryUnavailable:`No memory samples yet.`,captionBucket:`1 point = {{bucket}}s (bucket MAXIMUM, not a mean)`,captionRaw:`1 point = 1 snapshot`,clearFilter:`All runners`,noMatches:`No runner matches this search on {{count}} present. The node is reporting — the filter is hiding them.`,searchLabel:`Find a runner`,searchPlaceholder:`Find a runner…`,sortBy:`Sort by`,sortCpu:`CPU`,sortMemory:`Memory`,sortName:`Name`},cameraAttribution:{title:`Per-camera load — what can be attributed`,intro:`This table is the gate for the charts above, not a footnote to them: a family is drawn per camera only when it is genuinely measured AND readable today. Detection runs on a pool shared by every camera and can only be counted, never measured — it is shown as one shared total and never divided. Streaming is per-camera by construction and still unreadable, because only an ffmpeg-backed source spawns a child. A chart of a number the system cannot attribute is worse than no chart.`,measured:`Measurable per camera`,accounted:`Countable only (shared pool)`,unattributable:`Not attributable`,colFamily:`Load`,colAttribution:`Attribution`,colUnit:`Unit of work`,colChartable:`Chartable today`,colMissing:`What is missing`,unitNotSortable:`No meaningful order — the cell describes a mechanism, not a value.`,missingNotSortable:`No meaningful order — the cell is an explanation, not a value.`,evidence:`Evidence ({{count}})`},cameraLoad:{title:`Per-camera load — measured, on this node`,intro:"Each addon reports its OWN cost through the `load-contribution` capability — the recorder does not have to be told which camera its ffmpeg serves, it spawned it. Nothing here joins a pid to a camera. Only families that are measured AND readable today are drawn ({{roles}}); the rest are named below rather than estimated.",windowNote:`CPU is a DELTA of the cumulative counters, over the same fixed cadence the node already emits its process snapshot on — this panel adds no sampling and reads nothing while it is closed. Contributions are not stored anywhere, so unlike the per-addon charts above this window starts when you open this panel.`,windowSince:`Differencing since {{since}} ({{count}} windows).`,readFailed:`Could not read the load contributions: {{error}}. This is a failed read, NOT an idle cluster.`,loading:`Reading what the addons report…`,waitingWindow:`No per-camera window yet. A rate needs two readings, and the second arrives with the next process snapshot. A node running no decode, transcode or recording child stays empty — which is the truth, not a failure.`,deviceLabel:`Camera {{deviceId}}`,unitCount:`{{count}} unit(s): {{roles}}`,cpuTitle:`CPU % of one core (delta)`,cpuUnavailable:`No measurable window yet — every window so far contained a unit that started, stopped or reported no counter.`,memoryTitle:`Memory RSS`,memoryUnavailable:`No memory reported for this camera.`,coverage:`Addons claim {{claimed}} of the {{observed}} camstack processes this node reports.`,coverageUnknown:`No process snapshot from this node yet, so nothing can be said about what is unclaimed. That is different from "everything is claimed".`,noUnclaimed:`Nothing is unclaimed on this node.`,unclaimed:`{{count}} process(es) nobody claims, holding {{rss}}. Either a leak or a cost family nobody has taught to report — they stay in their own bucket and are never folded into a camera. CPU is unknown for them: the observer measures RSS and reports no cumulative CPU seconds.`,sharedTitle:`Shared — declared as belonging to no camera`,sharedNote:`Reported so the shared cost is visible as shared instead of invisible. It is NOT divided across the cameras present: the inference pool is one process serving all of them, and an apportioned share is an estimate, not a measurement. These totals are cumulative since each unit started — not a rate.`,sharedRow:`{{roles}} — {{units}} unit(s), {{cpu}} CPU-seconds, {{rss}}`,refusedTitle:`Reported per camera, and still not charted`,refusedRow:`— {{count}} entr(ies) from {{addons}}. {{reason}}`,unclaimedBadge:`{{count}} unclaimed · {{rss}}`},deviceMigrate:{title:`Migrate to…`,subtitle:`Replace this camera with other hardware you have already adopted. The new camera inherits number {{deviceId}}, so recordings, rules and integrations follow it.`,pickerLabel:`Replacement camera`,pickerPlaceholder:`Select a camera…`,pickerPending:`Reading the fleet…`,noTargets:`No other camera is adopted, so there is nothing to migrate to.`,action:`Migrate`,running:`Migrating…`,confirmTitle:`Replace “{{source}}” with “{{target}}”?`,confirmMessage:`“{{target}}” takes over number {{sourceId}}. That number is what every recording, event, rule, zone and home-automation export of “{{source}}” is filed under, so all of it follows the number to the new hardware and keeps working. “{{source}}” is switched off and handed number {{targetId}} in exchange. This swaps two device identities and cannot be undone from here.`,confirmAction:`Migrate`,failed:`Migration failed: {{error}}`,swapped:`The replacement now answers on number {{inheritedId}}; the old camera was handed number {{retiredId}}.`,quiet:`Every function on the replaced camera was switched off — the old hardware is quiet.`,stillLive:`The replaced camera could not be reached, so these functions are STILL RUNNING on the old hardware. Nothing here failed to migrate — but until you unplug it or reach it physically, it can still produce data.`,neverOffered:`The replaced camera never offered these, so there was nothing to switch off. They are not running.`},locations:{filter:{searchPlaceholder:`Search by name…`,typesLabel:`Filter by type`,clear:`Clear filters`,noMatch:`No device matches this filter.`},unassigned:{searchLabel:`Search devices not in a room`},room:{searchLabel:`Search devices in {{room}}`,add:`Add`,addTo:`Add devices to {{room}}`,addDialogTitle:`Add devices to {{room}}`,alreadyHere:`Already in this room`,suggestedUnassigned:`Not in a room yet`},roomPicker:{label:`Room`,placeholder:`Choose a room`,unassigned:`Unassigned`},addDialog:{cancel:`Cancel`,confirm:`Add {{count}}`,nonePicked:`Nothing picked yet`},links:{noRoom:`No rooms yet. Add one on the Locations tab.`,noCameras:`No camera is assigned to “{{room}}”.`,loading:`Reading linked devices…`,unreadable:`Linked devices could not be read: {{reason}}`,unsupported:`This camera does not keep a linked-devices list.`,none:`No linked devices.`,implied:`automatic`,edit:`Edit links`,addNamed:`Link devices to {{camera}}`,pickTitle:`Link devices to {{camera}}`,alreadyLinked:`Already linked`,suggested:`Suggested · {{room}}`},columns:{device:`Device`,type:`Type`,status:`Status`,noSort:`Accessories follow their parent — this list keeps its order.`},rebuildLinkedDevices:`Rebuild linked devices`,noCameraIsAssignedTo:`No camera is assigned to “{{room}}”.`,replaceTheLinkedDeviceList:`Replace the linked-device list of every camera in “{{room}}” with what the room contains? {{lines}} Anything linked by hand that is not in this room is lost.`,rebuild:`Rebuild`,notRebuilt:`Not rebuilt: {{value1}}`,deleteLocation:`Delete location`,deleteTheLocation:`Delete the location “{{name}}”?{{extra}}`,deleteZone:`Delete zone`,deleteTheZoneTheRooms:`Delete the zone “{{name}}”? The rooms in it are kept.`,loadingLocationsAndDevices:`Loading locations and devices…`,everyTopLevelDeviceHas:`Every top-level device has a room.`,noLocationsYetAddFrontDoor:`No locations yet. Add Front door, Hall, Kitchen…`,locations:`Locations`,roomsAndAreasOfThe:`Rooms and areas of the site. Assign any device here — storage disks are under Data → Storage.`,cameraLinks:`Camera links`,zones:`Zones`,locationCard:{rename:`Rename`,rebuildLinkedDevices:`Rebuild linked devices`,rename2:`Rename {{name}}`,cancelRename:`Cancel rename`,actionsFor:`Actions for {{name}}`,nothingHereYetAssignA:`Nothing here yet — assign a device from the table below.`,expandAccessories:`Expand {{count}} companion device(s) of {{name}}`,collapseAccessories:`Collapse {{count}} companion device(s) of {{name}}`},locationDescriptionField:{whatIsThere:`What is there`,surfacesBoundariesWhatIsNormally:`Surfaces, boundaries, what is normally parked or stored here.`,givenToTheAiWith:`Given to the AI with the pictures, so it knows what it is looking at. Describe the PLACE, not what happens in it — events change, the ground does not.`},locationZoneField:{none:`— none —`,zone:`Zone`},newLocationButton:{newLocation:`New location`,frontDoorHallKitchen:`Front door, Hall, Kitchen…`,newLocationName:`New location name`,cancelNewLocation:`Cancel new location`},newZoneButton:{newZone:`New zone`,zonaGiornoZonaNotte:`Zona giorno, Night zone…`,newZoneName:`New zone name`,cancelNewZone:`Cancel new zone`},siteZonesPanel:{icon:`Icon`,zone:`Zone`,rename:`Rename {{label}}`,renameTheZone:`Rename the zone`,rooms:`Rooms`,actions:`Actions`,delete:`Delete {{label}}`,deleteTheZoneTheRooms:`Delete the zone — the rooms in it are kept`,noZonesYetAZone:`No zones yet. A zone groups rooms — “Night zone” for the bedrooms — and shows up before them in the app’s camera filter.`},unassignedTable:{clearSelection:`Clear selection`,selectAllUnassignedDevices:`Select all unassigned devices`,select:`Select {{name}}`,device:`Device`,type:`Type`,status:`Status`,accessoriesInTow:`Accessories in tow`,assignTo:`Assign to`,locationFor:`Location for {{name}}`,notInARoom:`Not in a room`,topLevelDevicesOnlyAccessories:`Top-level devices only — accessories move with their parent.`,bulkAssignment:`Bulk assignment`,assignSelectedDevicesTo:`Assign selected devices to`,assignTo2:`Assign to…`,assign:`Assign`,clear:`Clear`,unknownRoom:`unknown room “{{room}}”`,selected:`{{count}} selected`,accessoriesInTowCount:`{{count}} accessories in tow`},deviceGlyphs:{aria:`{{name}}: {{state}}`},rebuildEntry_one:`• {{name}}: {{count}} device`,rebuildEntry_other:`• {{name}}: {{count}} devices`},deviceDisplay:{title:`Display`,icon:`Icon`,label:`Label`,unit:`Unit`,precision:`Precision`,precisionInherit:`inherit`,hidden:`Hidden`,hideFromLists:`Hide from device lists`,unitSource:`Source{{unit}}`,inherited:`Default ({{name}})`,inheritedContainer:`Default (the primary child's icon)`,pickIcon:`Change the icon of {{name}}`,iconFor:`Icon for {{name}}`,iconSearchPlaceholder:`Search icons`,iconNoMatches:`No icon matches that`,iconCategory:{devices:`Devices`,home:`Home`,security:`Security`,buildings:`Buildings`,connectivity:`Connectivity`,multimedia:`Multimedia`,nature:`Nature`,weather:`Weather`,transportation:`Transport`,animals:`Animals`,accessibility:`Accessibility`,account:`Account`,arrows:`Arrows`,brands:`Brands`,charts:`Charts`,communication:`Communication`,cursors:`Cursors`,design:`Design`,development:`Development`,emoji:`Emoji`,files:`Files`,finance:`Finance`,"food-beverage":`Food and drink`,gaming:`Gaming`,layout:`Layout`,mail:`Mail`,math:`Math`,medical:`Medical`,navigation:`Navigation`,notifications:`Notifications`,photography:`Photography`,science:`Science`,shapes:`Shapes`,shopping:`Shopping`,social:`Social`,sports:`Sports`,sustainability:`Sustainability`,text:`Text`,time:`Time`,tools:`Tools`,travel:`Travel`},setRoleDefault:`Set as default for all {{role}} sensors`,setRoleDefaultTitle:`Apply this unit / precision / icon as the default for every {{role}} sensor`,inheritedRoleDefault:`Default ({{icon}} — the {{role}} role default)`},customize:JSON.parse(`{"loadingDevice":"Loading the device…","deviceUnreadable":"The device could not be read","noSuchDevice":"No device {{deviceId}} exists.","composerAbsent":"The composer is not running on this hub: customizations are stored, but nothing computes them.","status":{"pending":"Reading this device's customization…","unknownTitle":"The customization could not be read","notLoaded":"Customizations are not loaded yet: {{reason}}","off":"Off","composerUnreachable":"The composer did not answer: {{reason}}"},"blockStatus":{"stopped":"Stopped","starting":"Starting","running":"Customization active","degraded":"Degraded","failed":"Failed","incomplete":"Incomplete"},"remove":{"button":"Remove customization","title":"Remove this customization?","message":"Every added function is removed and every replaced field goes back to the integration's own value, exactly as before.","confirm":"Remove"},"composed":{"body":"This device is composed: every field comes from its composition.","edit":"Edit its composition","missingBlock":"This composed device has no block id.","loadFailed":"Could not read the composition","notFound":"Composition block not found.","noDelete":"Delete the composed device from Build, not here."},"identity":{"title":"Identity","role":"Role","noRole":"— none —","name":"Name","room":"Room","hidden":"Hidden","type":"Type"},"picker":{"search":"Search a device","loadingDevices":"Loading devices…","devicesFailed":"The devices could not be listed","loadingFields":"Reading this device's fields…","fieldsFailed":"This device's fields could not be read","valuesFailed":"Live values could not be read: {{reason}}","fields":"Fields","hidden_one":"{{count}} field is not {{kind}} and cannot be used here","hidden_other":"{{count}} fields are not {{kind}} and cannot be used here","cancel":"Cancel"},"kinds":{"number":"a number","string":"text","boolean":"true/false","enum":"one of a list"},"event":{"pulseBody":"Each time the sensor turns on counts as one ring; rings within the debounce count once.","spanBody":"Motion starts when a sensor turns on and ends when it turns off or after the timeout.","debounce":"Debounce (seconds)","timeout":"Timeout (seconds)","cooldown":"Cooldown (seconds)","notAnEdge":"this field has no transition time, so it cannot pulse","levelPending":"Waiting for the level…","alreadyHigh":"Already high — not a new edge","lastEdge":"Rising edge","lastEdgeAt":"Last edge {{at}}","levelInactive":"Quiet","noEdge":"No edge yet","clear":"Remove","checking":"Checking…","spanOpen":"Span open","spanQuiet":"Span quiet","timeoutSeconds":"Timeout {{seconds}} s","badge":{"active":"Active","stale":"Stale","released":"Released","unavailable":"Unavailable"},"previewWaiting":"Waiting for the sensor…","previewAlreadyOn":"Sensor is already on — that does not count as a new ring.","previewCounted":"Last ring would count now.","previewQuiet":"Sensor is off.","previewMotionOn":"Motion is on for this camera.","previewSensorOn":"Sensor is on but motion has ended.","previewMotionOff":"No motion.","motionNow":{"pending":"Now: …","unknown":"Now: unknown","quiet":"Now: no motion","active":"Now: motion for {{seconds}} s"},"doorbellLast":{"none":"No ring seen since {{when}}","ring":"Last ring: {{when}}","unknown":"Last ring: unknown"},"doorbellCount":"{{count}} rings since restart","edge":"Edge","edgeValue":{"rising":"Rising edge","button":"Button press","native-event":"Native event"}},"doorbell":{"title":"Doorbell","add":"+ Add source","active":"Active","pickTitle":"Add doorbell source","removeWhat":"The doorbell source {{name}}","otherFormula":"Composed by another formula — edit it in Advanced"},"motion":{"title":"Motion","add":"+ Add sensor","pickTitle":"Add motion sensor","camera":"Camera motion","cameraState":{"always":"always included","when-confirmed":"only when confirmed","never":"replaced","passes":"passes through"},"mode":{"in-addition":"In addition","confirm":"Confirm","replace":"Replace"},"modeFor":"Mode of {{name}}","reading":"Reading the attached sensors…","unreadable":"The attached sensors could not be read: {{reason}}","notForwarded":{"onboard-not-listed":"Sensors are not forwarded: its detection does not list its onboard motion. The camera's own motion passes through.","no-active-detection":"Sensors are not forwarded: it has no active detection. The camera's own motion passes through."},"notEnforced":"This camera's provider does not support Confirm and Replace yet: the camera's own motion passes through until it is updated","state":{"offline":"offline","missing":"not found","unsupported":"cannot drive motion","unreadable":"could not be read"},"removeWhat":"The sensor {{name}}","olderOrchestrator":"This camera's orchestrator is older than sensor modes: update it to change the attached sensors","refetchFailed":"The attached sensors could not be re-read after the change: reload to edit them again","cameraLevelUnknown":"Unknown: the orchestrator has not heard the camera itself since it started, or is older than this view","cameraLevelOwn":"The camera's own motion, as it last said it ({{at}}) — not what the sensors make of it","tooMany":"A camera takes at most {{max}} sensors","modeLine":{"in-addition":"Its motion counts as this camera's motion too.","confirm":"The camera's own motion counts only while this sensor is active.","replace":"While this sensor is ready, the camera's own motion no longer counts on its own."},"unreadableBare":"The attached sensors could not be read."},"assign":{"search":"Search a device","filtersLabel":"Filter by kind","loadingDevices":"Loading devices…","devicesFailed":"The devices could not be listed","noCompatible":"No compatible device","showMore_one":"Show {{count}} more","showMore_other":"Show {{count}} more","cancel":"Cancel","addCount_one":"Add {{count}}","addCount_other":"Add {{count}}","add":"Add","change":"change","stepDevice":"1 · Device","stepField":"2 · Field","stepDetails":"3 · Name","filters":{"motion":"Motion & presence","contact":"Contacts","all":"All compatible"},"value":{"active":"active","inactive":"inactive","open":"open","closed":"closed"},"checking":"Checking…","unknown":"Could not be checked: {{reason}}","removeNamed":"Remove {{name}}","none":"None","missingKept":"Device not found — kept until you remove it","devicesUnreadable":"The devices could not be listed: {{reason}}","native":"Native","replaces":"replaces","adds":"added","pickUnusable":"This field cannot be used here","removeConfirm":{"title":"Remove this?","message":"{{what}} will be removed.","last":"It is the last function of this customization: the whole customization is removed, and every field goes back to its integration's own value.","confirm":"Remove"}},"saveInFlight":"Another change is still being saved — try again in a moment","battery":{"title":"Battery","native":"Native battery","replace":"Replace with another field","add":"+ Add battery","otherFormula":"Composed by another formula — edit it in Advanced","removeWhat":"The battery from {{name}}","nativeReplaced":"Native · replaced"},"running":{"title":"Running","native":"Native running state","replace":"Replace with another field","add":"+ Add running","otherFormula":"Composed by another formula — edit it in Advanced","removeWhat":"The running assignment from {{name}}","nativeReplaced":"Native · replaced","invert":"Treat off as running (invert boolean)","threshold":"Power threshold (watts) — compared to the field as reported","startDelay":"Start delay (seconds) above threshold","stopDelay":"Stop delay (seconds) below threshold"},"consumables":{"title":"Consumables","add":"+ Add consumable","pickTitle":"Add consumable","name":"Name","unit":"Unit","units":{"percent":"%","days":"days","hours":"hours","cycles":"cycles"},"removeWhat":"The consumable {{name}}","otherFormula":"Composed by another formula — edit it in Advanced","takenBy":"An item with this name exists: {{name}}","keyless":"The name needs at least one letter or digit","outOfRange":"Not added: the field reads {{value}}, outside the unit's range (% is 0–100, a count is 0 or more) — pick another field or unit","builtIn":"Reported by the device","builtInUnreadable":"What the device reports could not be read: {{reason}}","fields":{"salt":"Salt","rinseAid":"Rinse aid"}},"linked":{"title":"Linked devices","add":"+ Link","pickTitle":"Link devices","device":"Device","type":"Type","controls":"Controls with the camera","controlsAlways":"Every linked device's controls show with the camera","yes":"Yes","tracked":"On camera timeline","trackFor":"Show {{name}} on this camera's timeline","trackedHint":"Timeline rows only — notifications photograph every linked camera without this switch.","health":{"missing":"not found","foreign":"not readable by its owner","unavailable":"not a valid link now"},"removeWhat":"The link to {{name}}","notLinked":"no longer linked — still on timeline"},"advancedLink":"Advanced — expression editor","suggest":{"heading":"Suggested · {{location}}","hint_one":"{{count}} suggested · {{location}}","hint_other":"{{count}} suggested · {{location}}","in":"in {{container}}","add":"Add","addNamed":"Add {{name}}","addAll":"Add all {{count}}","use":"Use","useNamed":"Use {{name}}"},"scalar":{"caps":{"battery":"Battery","running-state":"Running","power-meter":"Power and energy"},"add":"+ Add","change":"Change","remove":"Remove","save":"Save","cancel":"Cancel","addTitle":"Add {{title}}","changeTitle":"Change {{title}} source","changeDevice":"Change","noOverride":"Not added","effective":"Current value","override":"Source: {{name}} · {{field}}","checking":"Checking capabilities...","unreadable":"Could not read customization","sourceUnreadable":"Could not read the source field","sourceHeld":"{{name}} did not answer. The last assigned value is held.","released":"The assigned source no longer exists. Native state is active.","chooseAnother":"Choose another source","removeWhat":"The override from {{name}}","otherFormula":"Composed by another formula — edit it in Advanced.","stepDevice":"Source device","stepField":"Field","stepTransform":"Transform","preview":"Live preview","previewDwell":"Source {{value}} · {{level}} · {{countdown}}","thresholdActive":"threshold active","thresholdClear":"threshold clear","runningIn":"running in {{seconds}} s","stopsAfter":"stops after {{seconds}} s","invert":"Treat off as running","threshold":"Running at or above ({{unit}})","startDwell":"Start after (seconds)","stopDwell":"Stop after (seconds)","scale":"Scale","offset":"Offset","badge":{"native":"Native","assigned":"Assigned · {{source}}","released":"Native · source missing","pending":"pending","unknown":"unknown"},"fit":{"kind":"Not compatible","unit":"Not compatible","unit-unknown":"Not compatible"},"transform":{"identity":"Copy the value","invert":"Invert","threshold":"Threshold","linear":"Linear scale"},"previewFailure":{"compile":"Could not compile the preview.","dwell":"Threshold preview is shown in the transform step.","no-value":"No live value from the source yet.","empty":"No preview value."},"comparison":"Comparison","comparisonValue":{"gte":"At or above","lte":"At or below"},"clampMin":"Minimum","clampMax":"Maximum"},"keyed":{"title":{"consumables":"Consumables"},"add":"Add item","change":"Change","remove":"Remove","save":"Save","addTitle":"Add item","changeTitle":"Change item","name":"Name","key":"Key","assignField":"Field","unit":"Unit","unmapped":"Not mapped","assigned":"Assigned","field":{"level":"Level","remaining":"Remaining","status":"Status"},"trait":{"kind":"Kind","form":"Form"},"value":{"wear":"Wear","supply":"Supply","waste":"Waste","part":"Part","tank":"Tank","product":"Product","bin":"Bin","days":"Days","hours":"Hours","cycles":"Cycles","ok":"OK","low":"Low","empty":"Empty","full":"Full","replace":"Replace"},"badge":{"native":"Native","assigned":"{{count}} assigned","pending":"Checking","unknown":"Unreadable"},"duplicateKey":"An item with key \\"{{key}}\\" already exists."},"fieldsCard":{"removeWhat":"Remove the {{cap}} customization?","from":"From {{name}} · {{field}}","unknownDevice":"Unknown device","now":"now","aggregate":{"avg":"average, 1 decimal","latest":"latest"},"removeField":"Remove {{field}}","removeFeature":"Remove the {{cap}} feature"},"override":{"fromDevice":"From a device","formula":"Formula","convertUnit":"Convert unit","convertTitle":"Convert unit","convertSummary":"{{from}} → {{to}}","selfNative":"This device's native value","targetUnit":"Target unit","publish":"Publish converted value","none":"No override","add":"+ Add override","save":"Save override"},"sourceSelector":{"pickDevice":"Pick the source for {{title}}","notCompatibleDevices":"{{count}} not compatible","otherValues":"Other values (not compatible)","direct":"direct","withConversion":"with {{name}}","backToDevices":"Back to devices","noDevice":"Pick a device on the left.","noStateField":"This device has no on/off reading this extension can use.","backToDevice":"Back to {{name}}","done":"Done","pickedCount_one":"{{count}} selected","pickedCount_other":"{{count}} selected"}}`),compositionEditor:{now:`the time of this evaluation (ms)`,builtins:{min:`smallest number`,max:`largest number`,abs:`absolute value`,floor:`round down`,ceil:`round up`,sqrt:`square root`,round:`round to digits`,pow:`x to the power y`,clamp:`keep x between lo and hi`,avg:`average, ignores nulls`,sum:`sum`,coalesce:`first value that is not null`,age:`ms since ts`,convert:`convert between units of one kind`,any:`true if one is true`,all:`true if all are true`,within:`true if ts is at most ms ago`,number:`a number from a number or numeric text, else null`,latest:`the most recent timestamp`,rose:`time of the last rise of a level (has memory)`,count:`how many times x advanced (has memory)`,dwell:`stays on or off only after it has held for the given milliseconds (has memory)`,latchedAt:`time the value last changed (has memory)`,schmitt:`turns on at the high edge and off at the low edge, and holds in between; optional delays before each change (has memory)`},pageTitle:`Composed device`,loading:`Loading the composition…`,loadFailed:`The composition could not be read`,notFound:`No composition {{blockId}}.`,notComposition:`This block is not a composition.`,customizationUnknownDevice:`This is the customization of a device the composer has not reported yet.`,openOnDevice:`Open it on the device page`,existingTarget:`Customization of {{name}}: add functions or replace single fields; the rest stays its integration's.`,name:`Name`,required:`required`,takeFrom:`Take from…`,formula:`Formula`,formulaFor:`Formula for {{path}}`,clear:`Clear`,addSource:`+ Add source`,removeBinding:`Remove binding {{name}}`,copyFeature:`Copy the whole feature from…`,replaces:`replaces`,replaceIn:`Replace a field of {{cap}}`,removeFeature:`Remove {{cap}}`,suggestions:`Suggestions`,save:`Save`,cancel:`Cancel`,steps:{target:`1 · Target`,features:`2 · Features`,fieldsOf:`3 · Fields — {{cap}}`,verify:`4 · Verify and save`},verify:{checking:`Checking with the server…`,ok:`✓ No problems: types, sources, cycles and ownership all check out.`,unknown:`Could not check: {{reason}}`},preview:{label:`Live preview`,waiting:`waiting for {{sources}}`,runtimeOnly:`evaluated by the composer (this formula has memory)`,devicesFailed:`the device list could not be read: {{reason}}`,unknownDevice:`no device is registered for {{sources}}`},reading:`Reading this device's fields…`,checking:`Checking what this device can be given…`,unknown:`Some functions could not be checked: {{reason}}`,added:`+ added`,targetType:`Type`,templates:{label:`Start from`,room:`Room`,"converted-sensor":`Converted sensor`,"derived-binary":`Derived binary`,confirmTitle:`Replace your draft?`,confirmMessage:`Applying a template discards unsaved edits in this editor.`,confirmApply:`Apply template`},openComposedDevice:`Open composed device #{{id}}`,toFill:`To fill`},notificationRules:{groups:{system:`System events`,class:`Detections`,zones:`Zones`,label:`Faces, plates & labels`,quality:`Quality`,scope:`Only while`,device:`Device event`,package:`Package`,occupancy:`Occupancy`,audio:`Sound`,schedule:`Schedule`},labels:{classes:`Object classes`,zones:`Zones`,faces:`Known faces`,labels:`Labels`,crossing:`Zone crossing`,source:`Detection source`,add:`Add a label…`},crossing:{enter:`Entering`,exit:`Leaving`,any:`Entering or leaving`,hint:`Which way the subject crosses the zone.`},zones:{group:`Zones`,noCameras:`This rule covers no camera, so it has no zones.`},faces:{group:`Known faces`,anyKnown:`Any known face — nobody in particular`},scene:{hint:`Only fire while a scene is matched or diverged.`,noGate:`— no scene gate —`,none:`No scenes yet — create one on the Scenes page.`,onlyWhile:`Only while it is`,read:`Read`,readOwn:`The scene's own setting`,rightNow:`Right now:`,missing:`This scene no longer exists — pick another or remove the gate.`},snooze:{title:`Silence this rule for {{minutes}} minutes`,failed:`The snooze could not be changed.`,aria:`snooze {{name}}`},delete:{confirm:`Delete this rule?`,message:`This will permanently delete "{{name}}". This action cannot be undone.`,aria:`delete {{name}}`},columns:{snooze:`Snooze`},devices:{compatLoading:`Checking which devices this rule's kind can use…`,compatFailed:`Couldn't check which devices this rule's kind can use — every device is listed. The hub still refuses an incompatible one on save.`},status:{grouped:{unknown:`Open windows unknown — {{reason}}`,none:`No window open`,windows_one:`{{count}} open window`,windows_other:`{{count}} open windows`,waiting:`{{count}} waiting`,windowLine:`{{camera}} · {{members}} in the window · {{pending}} waiting · closes within {{seconds}} s`}},grouping:{choice:`Immediate, grouped`,seconds:`Group for (seconds)`,hint:`Immediate, grouped — waits up to {{n}} s for subjects to be recognised, then sends one message with a mosaic, one picture per subject. Closes earlier when every subject is final.`,plainRecognitionHint:`Fires only if the name is already known when an event is written — choose Immediate, grouped to wait for it.`,scopedHint:`A subject not recognised within {{n}} s is not notified.`,minNote:`At least 5 s: subjects arriving together share one message.`},alarmNotify:{title:`Notifications in this mode`,duringEntryDelay:`Notify during the entry delay`,duringEntryDelayHint:`Off: the entry-delay notification is the only one until the alarm triggers. On: each match of an alarm rule is its own "Intrusion — <location>" notification.`,rewatched:`Notify “watched again”`,rewatchedHint:`A bypassed sensor that closed and opened again is watched once more. Never sent when that same opening starts the entry delay.`,ignored:`Notify ignored sensors`,ignoredHint:`A bypassed sensor that really moved while armed set nothing off. Never sent for a sensor that was simply still open, came back after a dropout, or repeated itself.`},systemEventKinds:{"device-offline":`Device offline`,"device-online":`Device online`,"device-disabled":`Device switched off`,"device-enabled":`Device switched on`,"stream-offline":`Stream offline`,"stream-online":`Stream online`,"device-battery-low":`Battery low`,"device-battery-normal":`Battery recovered`,"device-consumable-low":`Consumable running low`,"device-consumable-normal":`Consumable replaced`,"detection-blind":`Motion for 10+ minutes, detector found nothing`,"motion-noisy":`Camera seeing motion without a subject`,"motion-calm":`Motion calmed down`,"package-llm-silent":`Package confirm not answering`,"package-llm-answered":`Package confirm answering again`,"recording-stalled":`Recording stalled`,"recording-healthy":`Recording healthy again`,"recording-degraded":`Recording degraded`,"device-attention-required":`Device needs attention`,"device-attention-resolved":`Device attention resolved`,"storage-location-low":`Storage location low on space`,"storage-location-critical":`Storage location critically full`,"storage-location-ok":`Storage location space back to normal`,"node-offline":`Node offline`,"node-online":`Node online`,"node-restarting":`Node restarting`,"node-updating":`Node updating (restart imminent)`,"node-inference-unavailable":`Node has no usable inference device`,"addon-crash-loop":`Addon crash loop (runner gave up)`,"addon-update-available":`Addon update available`,"addon-updated":`Addons updated`,"server-update-available":`Server update available`,"server-updated":`Server updated`,"wrapper-update-available":`Container image update available`,"export-completed":`Export completed`,"backup-completed":`Backup completed`,"alert-critical":`Critical alert raised`,"alert-error":`Error alert raised`,"alert-critical-resolved":`Critical alert resolved`,"rule-broken":`Notification rule broken`,"rule-repaired":`Notification rule repaired`,"alarm-arm-refused":`Alarm arming refused`,"alarm-check-failed":`Alarm armed without checking openings`,"alarm-arming":`Alarm arming`,"alarm-armed":`Alarm armed`,"alarm-pending":`Alarm entry delay started`,"alarm-triggered":`Alarm triggered`,"alarm-rearmed":`Alarm re-armed`,"alarm-sensor-bypass":`Alarm sensor bypassed or restored`,"alarm-disarmed":`Alarm disarmed`},systemEventGroups:{"device-state":`Device state`,streams:`Streams`,battery:`Battery`,consumables:`Consumables`,"detection-blind":`Detecting nothing`,"motion-noise":`Motion without a subject`,"package-llm":`Package confirm`,recording:`Recording`,"device-attention":`Needs attention`,nodes:`Nodes`,addons:`Addons stopped`,"addon-updates":`Addon updates`,updates:`Server & container updates`,"backups-exports":`Backups & exports`,storage:`Storage locations`,alerts:`Alerts`,"rule-health":`Notification rules`,alarm:`Alarm`},systemEventHints:{"device-state":`A device the hub can no longer reach, or that came back. Switched off / on is a device an operator turned off or back on — not a fault, a choice.`,streams:`A stream that stopped or came back.`,battery:`A battery below the cluster threshold, and (optionally) its return to normal. Devices with a binary low-battery indicator are judged by the indicator, not by the percentage.`,consumables:`A consumable — filter, brush, bag, supply or waste tank — at or below this rule’s threshold, or that the device reports as due for replacement, and (optionally) its return to normal after a change. A device that only says "replace" is judged by that, not by a percentage.`,"detection-blind":`A camera that MOVED — at least 10 minutes of motion over 3 sessions — was analysed, and whose detector produced nothing at all, not even a candidate under the confidence floor.`,"motion-noise":`A camera whose motion fires constantly with no subject for an hour — a quarter of the time in motion, or 40 sessions — and (optionally) its return to calm. The detector is fine; tune the motion zones or sensitivity.`,"package-llm":`A camera whose package confirm stopped answering — three checks in a row with no answer from the vision model, so possible packages are not announced — and its return when the model answers again.`,recording:`A camera whose recording is on but no footage is landing (stall), a writer that burned its restart budget (degraded), and (optionally) the return to healthy writing.`,"device-attention":`A device whose own addon raised a critical alert because it needs the operator (a missing or rejected PIN), and the return to normal.`,nodes:`An agent or worker node joining or leaving the cluster, or an online node whose inference devices all went away.`,addons:`An addon the hub has stopped restarting after repeated crashes.`,"addon-updates":`A newer version of an addon, or an addon update that just finished.`,updates:`A newer version of the server itself, or of the container / app the node runs inside, is available — or a server update just finished.`,"backups-exports":`A scheduled or manual backup of the hub finished, or a footage export finished rendering.`,storage:`A storage location running low or critical on free space — or whose capacity probe failed — and (optionally) its return to ok.`,alerts:`A critical or error alert opening — a runner that failed or was refused, a recording location out of space, an expired sign-in — and (optionally) a critical alert resolving. One notification per alert episode.`,"rule-health":`A notification rule that cannot work — it no longer loads, or still names a device or destination that was deleted — and (optionally) its repair.`,alarm:`The alarm panel refusing to arm, arming, armed, counting down to a siren, going off, re-arming, excluding an open sensor, or being disarmed.`}},ruleScope:{mode:{all:`All`,only:`Only these`,except:`All except these`},which:`Which {{items}}`,items:{devices:`devices`,classes:`classes`,zones:`zones`,faces:`faces`,labels:`labels`},every:{devices:`Every device — no restriction.`,classes:`Every class — no restriction.`,zones:`Every zone — no restriction.`,faces:`Every face — no restriction.`,labels:`Every label — no restriction.`},legacy:`This rule also excludes {{items}} — kept when you save.`,removeExclusions:`Remove exclusions`,cleared:`Saving in this mode clears {{items}} from the rule.`},inlineEdit:{editName:`Edit name`,editLocation:`Edit location`,save:`Save`,cancel:`Cancel`},connectPhone:{title:`Connect a phone`,description:`Scan the code with your phone to open the CamStack app (or the web viewer) on this hub. The link carries only the hub address — no token, no credentials.`,signInHint:`The app then signs in with your usual login: password (and TOTP code, if enabled) or "Sign in with CamStack".`,addressLabel:`Hub address for the phone`,copyLink:`Copy link`,linkLabel:`Pairing link`,qrAlt:`QR code that opens the CamStack app on this hub`,loading:`Reading this hub's addresses…`,error:`Could not read this hub's addresses: {{message}}`,retry:`Retry`,empty:`This hub advertises no address a phone can reach (no tunnel, no mesh, no LAN interface). Check Cluster → Network.`,insecure:`Plain HTTP address: the app can use it on this network, but the browser fallback page only accepts https hubs. Prefer the tunnel or the mesh address when one exists.`,implausible:`The hub marks this address as unlikely to be reachable from a phone.`,tier:{public:`Public tunnel`,mesh:`Tailscale (MagicDNS)`,lan:`Local network`,"lan-ipv6":`Local network (IPv6)`}},storage:{addLocationWizard:{type:`Type:`,loadingProviders:`Loading providers…`,node:`Node`,path:`Path`,connectionOk:`Connection OK.`,testFailed:`Test failed: {{value1}}`,testing:`Testing…`,testConnection:`Test connection`,displayName:`Display name`,on:`{{type}} on {{displayName}}`,autoDerivedOverrideIfNeeded:`— auto-derived; override if needed`,format:`Format:`,typeSlug:`<type>:<slug>`,enableImmediately:`Enable immediately`,aDisabledLocationReceivesNo:`A disabled location receives no writes until enabled — reads and age-based retention still work, nothing new lands here. Leave this off to register the disk now and start using it later.`,saving:`Saving…`,noProvider:`No storage-provider supports type "{{type}}". Install a compatible addon (e.g. <code>remote-storage</code>) to enable it.`,idLabel:`Id`},drainProgressLine:{thisLocationIsDrainingThe:`This location is draining. The hub has not reported how much is left yet — either the drain has just been set, or this hub predates the drain-progress report.`,drainingRemainingNotReportedYet:`Draining · remaining not reported yet`,everythingThatWasHereHas:`Everything that was here has been moved. The location is still in drain mode — it receives no new writes until you change that.`,drainedNothingLeftToMove:`Drained · nothing left to move`,drainProgress:`Drain progress`,theDrainIsPacedBy:`The drain is paced by how fast this class of data is still growing, and that has not been observed yet. There is no date to give.`,emptyTimeNotKnownYet:`· empty time not known yet`,left:`{{size}} left`,moved:`{{percent}}% moved`,empty:`empty {{when}}`},editLocationModal:{displayName:`Display name`,node:`Node`,path:`Path`,connectionOk:`Connection OK.`,testFailed:`Test failed: {{value1}}`,testing:`Testing…`,testConnection:`Test connection`,saving:`Saving…`,title:`Edit {{name}}`,providerGone:`Provider <code>{{id}}</code> is no longer registered. Field schema unavailable; raw config is preserved on save.`},pathBrowser:{newFolder:`new folder`,create:`Create`,free:`{{free}} free / {{total}}`},protectionPolicyField:{protectedFreeSpace:`Protected free space`,protectionUnit:`Protection unit`,ofTheVolume:`% of the volume`,gbOfFreeSpace:`GB of free space`,legacyMax:`This location also stores a maximum used size of {{gb}} GB. That limit is managed by the system now and is no longer editable here; it is kept as it is.`},locationCapacityBar:{capacityUnknown:`Capacity unknown`,capacityUnknownCamstackHolds:`Capacity unknown · CamStack holds {{owned}}`},locationCard:{deleteLocation:`Delete location`},locationDiscardControl:{discardLeftoversOn:`Discard leftovers on "{{displayName}}"?`,permanentlyDeletesLeftoverFilesAnd:`Permanently deletes leftover files and records on this location. Other locations are not affected. This cannot be undone and may take hours.`,discardLeftovers:`Discard leftovers`,permanentlyDeleteLeftoverFilesOn:`Permanently delete leftover files on this location. Other locations are not affected.`,camsProgress:`{{done}}/{{total}} cam`,rowsDeleted_one:`{{count}} row`,rowsDeleted_other:`{{count}} rows`},locationGroup:{singleOneLocationPerType:`Single — one location per type. Edit the existing entry; it can't be split.`,noLocationRegisteredClickAdd:`No location registered. Click "Add" to register one.`,noLocationRegisteredYetShould:`No location registered yet — should be auto-seeded at next boot.`},locationModeSelector:{locationState:`Location state`,locationStateChoices:`Location state choices`,closeLocationStateChoices:`Close location state choices`}},pipeline:JSON.parse(`{"cameraAssignmentsTable":{"camera":"Camera","placement":"Placement","rolesHere":"Roles here","runningOn":"Running on","status":"Status","filterByCameraActivity":"Filter by camera activity"},"cameraStatusStrip":{"cameras":"Cameras","fpsMsInferQ":"{{name}} · {{label}} · {{value3}} fps · {{value4}}ms infer · q={{queueDepth}}"},"clusterDetail":{"clusterOrchestration":"Cluster Orchestration","cameraAssignmentsLoadBalancingThe":"Camera assignments, load balancing, the detector recommendation, cluster roles, settings and the display palette.","tabAssignments":"Assignments","tabLoadBalancing":"Load balancing","tabAutoTune":"Auto tune","tabRoles":"Roles","tabPalette":"Palette"},"clusterStepModel":{"oneValueForTheWhole":"One value for the whole cluster — this step writes into a shared vector index, where two encoders make similarity scores meaningless.","changeInClusterSettings":"Change in Cluster → Settings ›","oneModelForEveryNode":"One model for every node and camera:","clusterWide":"cluster-wide","indexNote":"{{index}} only matches vectors from the model that made them.","noBuild":"This accelerator's engine ({{engine}}) ships no build of <b>{{model}}</b>. It refuses this step rather than run a different encoder — a substitute would put a second feature space into {{index}}."},"liveLoadPanel":{"liveLoad":"Live load","activeAttached":"Active / Attached","avgInferMs":"Avg infer ms","queue":"Queue","audio":"Audio","totalAgents":"Total agents","totalFps":"Total FPS","avgInferenceMs":"Avg inference ms","queueDepth":"Queue depth","agent":"Agent","cameras":"Cameras","inferenceMs":"Inference ms","noCameraMetricsReceivedYet":"No camera metrics received yet"},"nodeCameraAssignmentsTable":{"moveDetectionTo":"Move detection to {{name}}","moveAudioTo":"Move audio to {{name}}","unpinDetection":"Unpin detection","unpinAudio":"Unpin audio","camera":"Camera","rolesHere":"Roles here","status":"Status","move":"Move {{deviceName}}","loadingCameras":"Loading cameras…","noCameraRunsOnThis":"No camera runs on this node right now"},"nodeDetail":{"assignments":"Assignments","pipeline":"Pipeline","warmInstances":"Warm instances","logs":"Logs"},"nodeDetailHeader":{"nodeNotFound":"Node not found:","cameras":"{{attached}} cameras ({{active}} active)","avgInference":"{{ms}}ms avg inference","queue":"queue {{depth}}"},"nodeList":{"cluster":"Cluster","assignmentsLoadBalancingRoles":"Assignments, load balancing, roles","pipelineEnabled":"Pipeline: enabled","pipelineNotEnabledAgentCapability":"Pipeline: not enabled (agent capability)","pipe":"Pipe","audioEnabled":"Audio: enabled","audioNotEnabledAgentCapability":"Audio: not enabled (agent capability)","aud":"Aud"},"nodeLoadOverview":{"nodeLoad":"Node load","reading":"reading…","noClusterNodesReportedYet":"No cluster nodes reported yet.","noDetect":"no detect","onlineButItDidNot":"Online, but it did not answer the last load read — its numbers below are unknown, not zero.","runningAttached":"Running / attached","sessionsInInferenceNowCameras":"Sessions in inference now / cameras attached to this runner (the balancer's committed load) / operator cap.","targetShare":"Target share","theNodeShareAutomaticOr":"The node share (automatic or manual) normalised over the nodes the balancer actually ranks (online AND detect-enabled).","actualShare1H":"Actual share (1 h)","timeWeightedShareOfThe":"Time-weighted share of the cluster's PARALLEL detection sessions this node carried over the last hour — the quantity a share holds. '—' = no session ran here in the window.","peakYields":"Peak · yields","mostSessionsThisNodeRan":"Most sessions this node ran at once in the last hour, and how many share turns it handed to another node because it was full or drowning.","scoreQueue":"Score · queue","theCapacityScoreBalanceMinimises":"The capacity score balance() minimises (attached + queue depth), and the raw queue depth.","capFill":"Cap fill","attachedMaxcameras":"attached / maxCameras.","avgInfer":"Avg infer","meanInferenceTimeAcrossThis":"Mean inference time across this node's attached cameras.","decode":"Decode","thisNodeSProbedDecode":"This node's probed decode hwaccel.","acceleratorsNotReadYet":"Accelerators not read yet.","accelerators":"Accelerators","noDeviceIsACamera":"No device is a camera-root candidate on this node — sessions run on the runner's default (CPU) pool.","noneInPlayRunnerDefault":"none in play · runner default pool","notKnownTheNodeDid":"Not known: the node did not report, or runs a session no device accounts for.","atItsMaxsessionsCapThe":"At its maxSessions cap — the balancer skips it until a session ends.","atCap":"· at cap","summaryLine":"{{active}} running · {{attached}} attached · {{reading}}","readingAge":"{{age}} old","noReading":"no reading","excludedWith":"excluded — {{reason}}","sharePct":"{{pct}}% share","exclusion":{"disabled":"switched off — not a dispatch target","unavailable":"the node probe does not see it (unplugged or still provisioning)","cannotHostCameraRoot":"its engine format has no object-detection root model","acceleratorPreferred":"CPU fallback — it never competes while an accelerator is serving"}},"settingsPanel":{"saving":"Saving…"},"clusterAssignmentsTab":{"cameraPlacement":"Camera placement","pinACameraToA":"Pin a camera to a node, or to one accelerator of its node; Auto lets each session pick. Decode always runs with detection. Load, shares and caps are on Load balancing."},"clusterAutoTuneTab":{"notChanged":"Not changed","device":"Device","capacity":"Capacity","detector":"Detector","why":"Why","nodeSettings":"Node settings","noChange":"No change.","stepDefault":"step default","none":"None.","anotherApplyIsAlreadyRunning":"Another apply is already running.","theConfigurationChangedSinceThe":"The configuration changed since the plan was shown. Review the updated plan below and apply again.","aModelCouldNotBe":"A model could not be downloaded: nothing was changed.","autoTune":"Auto tune","picksForEveryAcceleratorThe":"Picks, for every accelerator, the most accurate YOLOv9 detector that still carries at least the chosen number of cameras at once, from the node's hardware and measured speeds. Nothing is measured or estimated about your cameras' activity. Applying it sets those models on the accelerators and clears their threshold overrides, so each model runs its own default thresholds. Cameras carry no model or threshold of their own. Enabled steps, devices, pins, recording, notifications, zones and rules are not touched. There is no undo.","keepFree":"Keep free","shareOfEachAcceleratorKept":"Share of each accelerator kept free","ofEachAccelerator":"{{value1}}% of each accelerator","atLeast":"At least","minimumParallelSessionsPerDevice":"Minimum parallel sessions per device","computing":"Computing…","computePlan":"Compute plan","recompute":"Recompute","apply":"Apply…","applyAutoTune":"Apply auto tune?","theseAreAllTheChanges":"These are all the changes. Every override listed is removed and cannot be restored.","applying":"Applying…","sessionsAtFps_one":"{{count}} session at {{fps}} fps","sessionsAtFps_other":"{{count}} sessions at {{fps}} fps","fpsKeptFree":"{{fps}} fps, {{percent}}% kept free","thresholdReset":"{{step}}: reset {{keys}} to the model default","defaultModel":"default","camerasAtOnce_one":"{{count}} camera at once per accelerator","camerasAtOnce_other":"{{count}} cameras at once per accelerator","planSummary":"{{modelChanges}} model change(s), {{thresholdClears}} node threshold reset(s)."},"clusterEventsTab":{"postProcessingNode":"Post-processing node","theSingleNodeThatRuns":"The single node that runs detection post-processing (events, media, audio & motion). Every other node stays inert — no multi-node balancing. Takes effect on addon restart.","hubDefault":"hub (default)","eventsFolder":"Events folder","whereEventCropsFullFrames":"Where event crops / full frames are stored. A single folder — no collection / equal-splitting."},"clusterLoadBalancingTab":{"nodeShares":"Node shares","shareSource":"Share source","suggesting":"Suggesting…","suggestFromBenchmark":"Suggest from benchmark","suggestFromHardware":"Suggest from hardware","autoTune":"Auto tune","moveStandingAlwaysOnCameras":"Move standing (always-on) cameras that are no longer on their best node. Pinned cameras never move; on-motion sessions are placed per session anyway.","rebalancing":"Rebalancing…","rebalance":"Rebalance","policy":"Policy:","honourShares":"honour shares","automaticSharesAreBeingComputed":"Automatic shares are being computed from the cluster's measured capacity; the stored values are used meanwhile.","benchmarkEachNodeSShare":"Benchmark: each node's share follows its measured capacity from node benchmark results (hardware capacity where it has none)","hardwareEachNodeSShare":"Hardware: each node's share follows its capacity at its Auto tune model, from the measured speed of its hardware","recomputedWheneverANodeOr":", recomputed whenever a node or accelerator is added, removed, switched on or off, or changes model","maxConcurrentSessionsAdvanced":"Max concurrent sessions (advanced)","maxConcurrentSessionsFor":"Max concurrent sessions for {{name}}","aHardCapOnThe":"A hard cap on the sessions a node runs at once (always-on cameras count too). A node at its cap is never chosen; under shares its turn goes to a free node. Empty = unlimited.","accelerators":"Accelerators","noDetectCapableNodes":"No detect-capable nodes","enableDetectionOnANode":"Enable detection on a node in Roles & nodes to configure its accelerators.","suggestedFromBenchmark":"Suggested from benchmark","suggestedFromHardware":"Suggested from hardware","applySuggestedShares":"Apply suggested shares","notPartOfTheSuggestion":"not part of the suggestion — {{skippedReason}}","parallelSessions":"≈ {{capacitySessions}} parallel sessions · {{value2}}","measuredByNodeBenchmarksOr":"measured by node benchmarks, or from the hardware table where a node has no results","atTheModelsAutoTune":"at the models Auto tune picks (at least {{minSessionsPerDevice}} per accelerator), from the measured speed of each node's hardware","applyingWritesTheNodeAnd":"Applying writes the node and accelerator shares; the caps are advisory — apply each from its accelerator row.","automaticSharesAlreadyFollowThis":"Automatic shares already follow this; the caps are advisory — apply each from its accelerator row.","staleDevicePins":"Stale device pins","clearPin":"Clear pin","clusterPeak_one":"cluster peak {{count}} parallel session in the last hour","clusterPeak_other":"cluster peak {{count}} parallel sessions in the last hour","leastLoadedNote":"under least-loaded an idle node always wins, so shares only bite once nodes are busy","lastAt":"— last at {{time}}","lastAtTrigger":"— last at {{time}} ({{trigger}})","switchFailed":"Failed to switch shares: {{message}}","saveFailed":"Failed to save shares: {{message}}","suggestionFailed":"Suggestion failed: {{message}}","sharesIntro":"Shares in proportion to each node's capacity in parallel sessions — {{basis}}, counted in {{fps}} fps sessions with {{headroom}}% kept free. No load is measured or estimated."},"clusterOrchestratorLogsTab":{"orchestratorLogs":"Orchestrator logs","dispatchDecisionsBalancerMovesAnd":"Dispatch decisions, balancer moves and failover events from the pipeline orchestrator. Streaming live; the device chip on a line tells which camera it refers to."},"clusterRecordingTab":{"recordingNode":"Recording node","theSingleNodeThatRecords":"The single node that records (continuous & events) and serves playback. Every other node stays inert — no multi-node balancing. Takes effect on addon restart.","hubDefault":"hub (default)","recordingsFolders":"Recordings folders","whereRecordingsAreStoredMulti":"Where recordings are stored. Multi-location collections — segments are split across the locations of a type. Add a location to grow capacity; mark one default per type.","hubOnlyNote":"The stream-broker is hub-only — an agent recorder pulls streams from the hub over the network. The hub's RTSP restream port must be reachable from <b>{{node}}</b>. If the auto-derived host doesn't work, set the recorder's <b>recordingHubHostname</b> global setting."},"clusterRolesNodesTab":{"loading":"Loading","clusterRoles":"Cluster roles","oneNodeHoldsEachRole":"One node holds each role for every camera. Detection shares and caps are on Load balancing.","nodeCapabilities":"Node capabilities"},"clusterSettingsTab":{"notAvailableTheAddonThat":"Not available — the addon that owns these settings did not answer."},"nodeCamerasTab":{"theRolesEachCameraRuns":"The roles each camera runs here right now. Move a role or unpin it from the row menu; pins for every camera are on Cluster → Assignments.","camerasOn":"Cameras on {{node}}"},"nodeEnginesTab":{"killEngine":"Kill engine","inferenceEnginesOnThisNode":"Inference engines on this node","kind":"Kind","runtimeBackendDevice":"Runtime / Backend / Device","models":"Models","poolPid":"Pool PID","autoKill":"Auto-kill","inUse":"In use","kill":"Kill","noEnginesResidentTheFactory":"No engines resident — the factory spins up on the first pipeline run.","summary":"{{engines}} engine(s) resident in RAM. {{cameras}} camera(s) attached, {{active}} actively dispatching frames. Refreshes every 5s.","legend":"<strong>runtime</strong>: main camera-serving engine; never auto-killed while cameras attached. <strong>warm</strong>: benchmark/test override held in cache for fast re-use; auto-disposed after the idle TTL. <strong>pool</strong>: a per-device balanced inference pool (one per enabled accelerator, running concurrently); reaper-managed on its own idle TTL.","killFailed":"Kill failed: {{message}}","pool":"pool","runtime":"runtime","idleLeft":"{{idle}}s idle · {{left}}s left"},"nodeLiveTab":{"liveStatus":"Live status","runtimeMetricsForTheRunner":"Runtime metrics for the runner instance on this node. Refreshes every 2s.","inferenceLatency":"Inference latency","activeCameras":"Active cameras","throttled":"Throttled","queueDepth":"Queue depth","camera":"Camera","phase":"Phase","actualFps":"Actual FPS","queue":"Queue","inferenceMs":"Inference ms","noCamerasAttachedToThis":"No cameras attached to this runner"},"nodeLogsTab":{"runnerLogs":"Runner logs","description":"pipeline-runner activity on {{node}} — camera attach/detach, engine phases and pipeline errors. Streaming live; the device chip on a line tells which camera it refers to."},"nodePipelineTab":{"resetToHardwareAwareDefaults":"Reset {{nodeName}} to hardware-aware defaults?","thisClearsEveryPerDevice":"This clears every per-device model default on this node (back to the format default) and every per-camera step override scoped to it. Existing per-camera customisations on this node are lost.","resetFailed":"Reset failed","clearThisNodeSPer":"Clear this node's per-device model defaults + per-camera overrides scoped to this node","resetting":"Resetting…","resetToDefault":"Reset to default"},"storageLocationsPanel":{"disable":"Disable \\"{{displayName}}\\"?","nothingIsDeletedSetThe":"{{consequence}} Nothing is deleted — set the location back to Read-only or Active to bring its footage back.","deleteLocation":"Delete location \\"{{displayName}}\\"?","removesTheRecordFilesOn":"Removes the record; files on disk are untouched.","deleteAnyway":"Delete anyway?","forceDelete":"Force delete","noStorageLocationsDeclaredFor":"No storage locations declared for this purpose.","forcingNote":"{{error}}\\n\\nForcing removes the record only. Anything still on that location becomes unreachable."},"pipelineView":"Pipeline view","nodes":"Nodes","cameras":"Cameras","pipeline":"Pipeline","detectionPlacementLoadAndPer":"Detection placement, load and per-camera runtime across the cluster.","hide":"Hide","show":"Show","flowStrip":{"decode":"Decode","motion":"Motion","detect":"Detect","audioAnalyze":"Audio Analyze","audioClassify":"Audio Classify","analyze":"Analyze","notify":"Notify","unbound":"unbound","stepAria":"{{label}}: {{state}}"},"clusterRowCells":{"brokersTitle":"{{device}} — stream brokers & clients"},"placementControls":{"notEnabled":"{{name}} (not enabled)"},"camerasOverview":{"activelyInferring":"<b>{{count}}</b> actively inferring","camerasTotal":"<b>{{count}}</b> cameras"},"nodeInferenceDevices":{"rootModel":"root model <mono>{{model}}</mono>","accelerators":"{{count}} accelerators","cap":"cap","use":"use {{value}}"},"hideNodeList":"Hide node list","showNodeList":"Show node list","assignmentStatusCell":{"configuredFps":"/{{fps}} fps","drops":"drops {{count}}"},"cameraPipelineCard":{"recMode":"rec {{mode}}","healthHealthy":"Healthy","healthIdle":"Idle","healthError":"Error"},"configBlocks":{"fpsDefault":"default","fpsNative":"native (no throttle)"},"palette":{"custom":"Custom","presets":"Presets","pending":"Reading the cluster palette…","unknown":"The stored palette cannot be read ({{reason}}). Boxes use the bundled CamStack preset.","valid":"Every colour is distinct on both themes.","invalid":"This palette is refused: {{reason}}","save":"Save custom palette","preview":"Timeline marks","subclasses":"Subclasses","sourceUnconfigured":"CamStack preset (cluster default)"}}`),assignments:{assignmentStatusCell:{noMetricsInTheLast:`No metrics in the last 10 s — the camera has no session running`,noLiveData:`no live data`},clusterRowCells:{inferenceDevicePinNoNode:`Inference device pin (no node yet)`,anAcceleratorIsPinnedOn:`An accelerator is pinned on the camera's node; this camera has not run on one yet.`,anyAccelerator:`Any accelerator`,noSessionYet:`— no session yet`,anUnpinnedCameraIsPlaced:`An unpinned camera is placed again at every session start, so this can change between sessions.`,idleLastSession:`{{how}} · idle, last session`,streamBrokersOf:`Stream brokers of {{deviceName}}`,streamBrokersClients:`Stream brokers & clients`},placementControls:{nodePin:`Node pin`,autoLetsEachSessionPick:`Auto lets each session pick its node; a pin keeps the camera on one node.`,accelerator:`accelerator: …`,anyAccelerator:`Any accelerator`,inferenceDevicePin:`Inference device pin`,pinDetectionToOneAccelerator:`Pin detection to one accelerator of the node, or let each session pick.`}},cameras:{cameraPipelineCard:{pipelineStatus:`{{name}} pipeline status`,objectDetectionMode:`Object detection mode`,detectionOff:`detection off`,recording:`Recording ({{mode}})`,recordingMode:`Recording mode`,noPipelineStatusYetThe:`No pipeline status yet — the orchestrator has not composed a snapshot for this camera.`},camerasOverview:{loadingCameraPipelines:`Loading camera pipelines…`,noCamerasFound:`No cameras found`,withIssues:`with issues`,polledEvery5SDetection:`polled every 5 s · detection metrics live at 1 Hz`},cardPrimitives:{deviceLevelOverrideActive:`Device-level override active`},configBlocks:{manuallyPinned:`Manually pinned`,persistedSettingsPinForThis:`Persisted settings pin for this role`,whereItRuns:`Where it runs`,detection:`Detection`,decoder:`Decoder`,audio:`Audio`,source:`Source`,detectionPlacementPin:`Detection placement pin`,autoLoadBalanced:`Auto (load balanced)`,streamsMotion:`Streams & motion`,detectStream:`Detect stream`,detectFps:`Detect FPS`,motionSrc:`Motion src`,cameraSensors:`Camera sensors`,motionStream:`Motion stream`,motionFps:`Motion FPS`,cooldown:`Cooldown`,noStreamsRegistered:`No streams registered`,pipelineSteps:`Pipeline steps`,resolving:`Resolving…`,noStepsConfigured:`No steps configured`,audioClass:`Audio class.`,autoReason:`auto · {{reason}}`,capacity:`capacity`,pinDetection:`Pin detection → {{node}}`,none:`none`,inactive:`inactive`,liveFps:`live {{fps}}`,running:`running`,off:`off`,unassigned:`unassigned`,manual:`manual`,defaultValue:`default`},runtimeBlocks:{detectionRuntime:`Detection runtime`,mode:`Mode`,detectionStageInactiveOrUnreachable:`Detection stage inactive or unreachable`,inference:`Inference`,engine:`Engine`,provisioning:`Provisioning`,streamBroker:`Stream broker`,brokerStageInactiveOrUnreachable:`Broker stage inactive or unreachable`,noBrokerProfiles:`No broker profiles`,subscribers:`Subscribers`,decoder:`Decoder`,decoderStageInactiveOrUnreachable:`Decoder stage inactive or unreachable`,node:`Node`,queue:`· queue {{depth}}`,drops:`· drops {{count}}`,webrtc:`WebRTC {{count}}`,restreamOn:`restream on`,restreamOff:`restream off`,configuredFps:`/ {{fps}} configured`,fpsValue:`{{value}}fps`},streamsTab:{streamProfiles:`Stream Profiles`,autoAssign:`Auto-assign`,noStreamsAvailable:`No streams available`,notAssigned:`— Not assigned —`,availableStreams:`Available Streams`,reProbe:`Re-probe`,rtspRestream:`RTSP Restream`,host:`Host:`,rtspRestreamProviderNotAvailable:`RTSP restream provider not available — capability may not be loaded yet`,restreamEnabledClickToDisable:`Restream enabled — click to disable`,restreamDisabledClickToEnable:`Restream disabled — click to enable`,regenerateRtspToken:`Regenerate RTSP Token`,regenerateRtspTokenForThe:`Regenerate RTSP token for {{profileLabel}}? The current URL will stop working and a new one will be generated.`,regenerate:`Regenerate`,regenerateRtspTokenCurrentUrl:`Regenerate RTSP token (current URL will change)`,muted:`Muted`,videoOnlyNoAudio:`Video only — no audio`,restreamDisabledRtspClientsWill:`Restream disabled — RTSP clients will receive 403`,clickToCopy:`Click to copy: {{url}}`,resolution:`Resolution`,codec:`Codec`,frameRate:`Frame Rate`,noMetadataAvailableClickRe:`No metadata available — click Re-probe to detect stream properties`,sourceUrl:`Source URL`}},placementBoard:{nodeCapabilitiesTable:{node:`Node`,on:`{{label}} on {{name}}`,noClusterNodesReportingYet:`No cluster nodes reporting yet.`},nodeInferenceDevices:{probingAccelerators:`Probing accelerators…`,noInferenceDevicesReportedBy:`No inference devices reported by this node's platform probe.`,maxConcurrentSessionsFor:`Max concurrent sessions for {{label}}`,enable:`Enable {{label}}`,acceleratorShare:`Accelerator share`,dragToShiftTheShare:`Drag to shift the share of detection sessions each accelerator handles; lock one to pin its share while the others rebalance. Shares always sum to 100%.`,failedToSaveInferenceDevices:`Failed to save inference devices:`,advisoryCapFromTheMeasured:`Advisory cap from the measured throughput at the suggested model, with the headroom kept free. Applying it writes this device's cap.`,nodeUnreachable:`Node unreachable`,thePlatformProbeCouldnT:`The platform probe couldn't be reached, so its live accelerator set is unavailable. Settings resume once the node reconnects.`,colDevice:`Device`,colState:`State`,colShare:`Share`,colSessions:`Sessions`,colCap:`Max sessions`,colEnabled:`Enabled`,capNotSortable:`An editable field: sort by Sessions instead.`,enabledNotSortable:`A switch: sort by State instead.`,atCap:`at cap`,forget:`Forget`,forgetTitle:`Forget {{label}} on {{node}}?`,forgetDescription:`Its stored settings (switch, weight, cap, step models) are deleted. If the device comes back it starts from the defaults.`,rescan:`Rescan`,rescanTitle:`Probe this node for accelerators now (a Coral plugged in or pulled out). The node also re-probes every minute.`,rescanNoChange:`Rescanned: no change.`,rescanChanged:`Rescanned: appeared {{appeared}} · disappeared {{disappeared}}`,sourceBenchmark:`benchmark`,sourceHardware:`hardware`,sourceManual:`manual`,shareConfigured:`set {{pct}}%`,state:{active:`in use`,disabled:`switched off`,absent:`absent`,unknown:`unknown`,unavailable:`unavailable`,backoff:`pool down`,rootIncapable:`no root model`,standby:`fallback`},stateHint:{active:`A camera-root candidate: placement may start sessions on it.`,disabled:`Switched off: it takes no sessions.`,absent:`The node no longer reports this device (unplugged, or moved to another node). Its settings are kept; it is never used. Forget it to delete them.`,unknown:`The node's probe did not answer, so whether the device is there is not known.`,unavailable:`On the node, but the probe reports it unusable.`,backoff:`Reported by the node, but its inference pool is down or backing off.`,rootIncapable:`Its format cannot run the camera root detector; it serves enrichment steps only.`,standby:`The CPU fallback: it takes no sessions while an accelerator is serving this node.`}},reachableHostInput:{reachableHostFor:`Reachable host for {{nodeId}}`,saveReachableHostFor:`Save reachable host for {{nodeId}}`,saveReachableHost:`Save reachable host`,saved:`Saved`,failedToSaveReachableHost:`Failed to save reachable host`},roleControls:{default:`{{name}} (default)`,node:`{{value1}} node`},weightSliderStack:{noDetectEnabledNodesEnable:`No detect-enabled nodes. Enable “Detect” on a node above to distribute detection weight.`,for:`{{weightLabel}} for {{name}}`,unlockAllowRebalancing:`Unlock — allow rebalancing`,lockThisShareWhenOthers:`Lock this share when others change`,draggingOneSliderSplitsThe:`Dragging one slider splits the rest equally across the unlocked nodes; lock a node to pin its share — locked nodes never move and the total always stays at 100%, so a drag is bounded by the room the unlocked nodes leave. Detection only distributes across nodes that can source a camera’s frames.`},boardModel:{detectLabel:`Detect`,detectHint:`Runs the detection pipeline (decode + inference) for assigned cameras`,audioLabel:`Audio`,audioHint:`Runs audio analysis sessions for cameras assigned to this node`,roleIngest:`Ingest`,roleRecording:`Recording`,roleAudio:`Audio`,rolePostProcessing:`Post-processing`,roleMotion:`Motion`,hintIngest:`Connects to every camera and serves its stream to the others`,hintRecording:`Writes the recordings`,hintAudio:`Runs audio analysis for every camera`,hintPostProcessing:`Builds events and their media from detections, audio and motion`,hintMotion:`Runs software motion detection; cameras with onboard motion are unaffected`,saveFailed:`Failed to save`}},stepInspector:{clusterOwnedSettings:{clusterWideSettings:`Cluster-wide settings`,editInClusterSettings:`Edit in Cluster → Settings ›`,oneValueForEveryNode:`One value for every node and camera — this step writes into a shared index.`},effectiveModelSummary:{toChangeAModelOpen:`To change a model, open that accelerator's cell in the table.`,changeOnAccelerator:`Change on the accelerator ›`},nodeStepInspector:{loadingPipeline:`Loading pipeline…`,catalogUnavailable:`Catalog unavailable.`,accelerators:`Accelerators:`,noneEnabled:`none enabled`,off:`— off:`,clusterLoadBalancing:`Cluster → Load balancing ›`,detectionSteps:`Detection steps`,noStepSelected:`No step selected.`,itRunsOnInstead:`It runs on {{shortLabel}} instead.`,itDoesNotRunHere:`It does not run here.`,runOn:`Run on`,autoThisAcceleratorOrThe:`Auto (this accelerator, or the next one that can run it)`,routesThisStepAndIts:`Routes this step (and its child steps) to another accelerator of this node.`,baseForEveryCameraThat:`{{slot}} · {{format}} · base for every camera that lands here`,everyAcceleratorOf:`{{slot}} · every accelerator of {{nodeName}}`,model:`Model`,enableOneInClusterLoad:`enable one in Cluster → Load balancing`,settings:`Settings`,noBuild:`No {{format}} build of this step.`,noAcceleratorEnabled:`No accelerator is enabled on this node — <link>enable one in Cluster → Load balancing</link>.`,nodeWideSettings:`Node-wide: these settings apply on every accelerator of {{node}}.`,acceleratorSettings:`This accelerator ({{accelerator}}): confidence thresholds belong to the model that runs here.`,thresholdsPerAccelerator:`Confidence thresholds belong to the model, so they are set per accelerator: open that accelerator's cell.`,nodeLayer:`Node`,acceleratorLayer:`This accelerator`},stepMatrixFrame:{discardUnsavedChanges:`Discard unsaved changes?`,thisStepHasChangesThat:`This step has changes that are not saved yet.`,discard:`Discard`,filterStepsOrSettings:`Filter steps or settings /`,filterStepsOrSettings2:`Filter steps or settings`,stepSettings:`Step settings`,showDisabled:`Show disabled accelerators ({{count}})`,staleStep:`The link names a step this pipeline does not have ({{id}}).`,noStepMatches:`No step matches “{{query}}”.`}},detectionIntelligence:JSON.parse(`{"assignDialog":{"assignFacesToPerson":"Assign {{value1}} faces to person","assignFaceToPerson":"Assign face to person","selectAnExistingPersonOr":"Select an existing person or create a new one.","newPersonName":"New person name…","newPerson":"+ New person…","createAssign":"Create & assign","samples":"{{count}} samples"},"assignPlateDialog":{"assignPlatesToVehicle":"Assign {{value1}} plates to vehicle","assignPlateToVehicle":"Assign plate to vehicle","selectAnExistingVehicleOr":"Select an existing vehicle or create a new one.","newVehicleName":"New vehicle name…","newVehicle":"+ New vehicle…","createAssign":"Create & assign","plates":"{{count}} plates"},"cameraMultiSelect":{"clearSelection":"Clear selection"},"copyUrlChips":{"copyTheMediaUrl":"Copy the media URL","clipboardAccessWasRefusedSelect":"Clipboard access was refused. Select the URL below and copy it manually.","url":"{{label}} URL","copyUrl":"Copy {{label}} URL","copied":"Copied","local":"Local","copyLanUrl":"Copy LAN URL — {{AUTH_HINT}}","public":"Public","copyPublicUrl":"Copy public URL — {{AUTH_HINT}}"},"dateRangeFilter":{"fromDate":"From date","toDate":"To date"},"eventCard":{"eventFrom":"Event from {{cameraName}}","keyEventMediaUnavailable":"Key-event media unavailable","noKeyEventMedia":"No key-event media","deselect":"Deselect","select":"Select","clipSemanticMatchScore":"CLIP semantic-match score","markedForTraining":"Marked for training","trainingComplete":"Training complete","flaggedForDebug":"Flagged for debug","favourited":"Favourited"},"eventDetailPanel":{"snapshotCheckpointClickToView":"Snapshot checkpoint — click to view this frame","clipUnavailable":"Clip unavailable","couldNotResolveClipPlayback":"Could not resolve clip playback. Check the server logs.","deleteTrack":"Delete track","deleteThisTrackAndEvery":"Delete this track and every image and clip captured for it? This cannot be undone.","deleteFailed":"Delete failed","failedToDeleteThisTrack":"Failed to delete this track. Check the server logs.","eventDetail":"Event detail","keyFrameFrom":"Key frame from {{cameraName}}","keyFrameMediaUnavailable":"Key-frame media unavailable","viewClip":"View clip","bestShot":"Best shot","camera":"Camera","class":"Class","label":"Label","subLabel":"Sub-label","importance":"Importance","zonesVisited":"Zones visited","audioHeard":"Audio heard","totalDistance":"Total distance","firstSeen":"First seen","lastSeen":"Last seen","detectedOn":"Detected on","openedOn":"Opened on","closedOn":"Closed on","track":"Track"},"eventKindFilter":{"kinds":"Kinds ({{value1}})","kinds2":"Kinds","searchKinds":"Search kinds…","clear":"Clear","loadingKinds":"Loading kinds…","noKindMatchesThatSearch":"No kind matches that search.","theseCamerasAdvertiseNoEvent":"These cameras advertise no event kinds.","expand":"Expand"},"eventsSection":{"someTracksWereNotDeleted":"Some tracks were not deleted","failedToDeleteTracksOn":"Failed to delete tracks on: {{names}}. They remain selected — retry, or check the server logs.","minScore":"Min score","minimumImportance":"Minimum importance","ofEvents":"{{value1}} of {{value2}} events","newEventsRefresh":"New events — refresh","nothingMatchesTheFilter":"Nothing matches the filter","noKeyEventsInThis":"No key events in this window","widenTheDateRangeClear":"Widen the date range, clear cameras or kinds, or lower the min score.","capturedTracksAppearHereWhen":"Captured tracks appear here when the pipeline scores a key event.","sortImportance":"Importance","sortRecent":"Recent","deleteTitle_one":"Delete {{count}} track","deleteTitle_other":"Delete {{count}} tracks","deleteMessage_one":"Delete {{count}} track and every image and clip captured for it? This cannot be undone.","deleteMessage_other":"Delete {{count}} tracks and every image and clip captured for them? This cannot be undone.","eventCount_one":"{{count}} event","eventCount_other":"{{count}} events"},"faceDetailPanel":{"face":"Face","faceDetail":"Face detail","fullFrameWithDetectedFace":"Full frame with detected face","detectedFace":"Detected face","noImage":"No image","theCropMediaForThis":"The crop media for this face could not be resolved (a pre-fix orphan). Safe to delete.","camera":"Camera","captured":"Captured","track":"Track","identity":"Identity"},"peopleList":{"loadingSamples":"Loading samples…","noSamplesYet":"No samples yet.","sample":"Sample","enrolledFromAnUploadedPhoto":"Enrolled from an uploaded photo","removeSample":"Remove sample","person":"Person","samples":"Samples","edit":"Edit {{name}}","delete":"Delete {{name}}","name":"Name","personName":"Person name…","trainingSamples":"Training samples","removeASampleToDrop":"Remove a sample to drop it from recognition training for this person.","deletePerson":"Delete person","deleteAndAllTheirSamples":"Delete {{name}} and all their samples? This cannot be undone.","loadingPeople":"Loading people…","addPerson":"Add person","enrolFromAPhoto":"Enrol from a photo","nothingMatchesTheFilter":"Nothing matches the filter","noPeopleEnrolledYet":"No people enrolled yet","clearTheSearchOrTry":"Clear the search or try another name.","addAPersonOrEnrol":"Add a person, or enrol faces from a photo.","noPeopleEnrolledYet2":"No people enrolled yet."},"photoEnrollDialog":{"ignoreThisFace":"Ignore this face","newPerson":"+ New person…","face":"Face {{value1}}","assignFace":"Assign face {{value1}}","notUsable":"Not usable","thisPhotoCouldNotBe":"This photo could not be analysed:","unknownError":"unknown error","noFacesWereFoundIn":"No faces were found in this photo. A face has to be reasonably large and facing the camera for the detector to measure it.","newPersonNameTypeThe":"New person name… (type the same name under another face to reuse it)","enrolFromPhotos":"Enrol from photos","everyPhotoIsAnalysedWith":"Every photo is analysed with the same face detector the cameras use, and all the faces found are reviewed below in one pass, grouped by photo. Assign each face to a person, or leave it ignored.","atLeast3PhotosPer":"at least 3 photos per person","choosePhotos":"Choose photos","analysing":"analysing…","facesAnalysedOn_one":"{{count}} face · analysed on {{node}}","facesAnalysedOn_other":"{{count}} faces · analysed on {{node}}","faceN":"Face {{n}}","reliableRecognition":"For reliable recognition use <strong>at least 3 photos per person</strong>, taken at different times, with different poses and lighting — you can select them all at once. Several frames from the same moment count as one — they do not add information.","enrolFaces_one":"Enrol {{count}} face","enrolFaces_other":"Enrol {{count}} faces","photosAnalysed_one":"{{done}}/{{count}} photo analysed","photosAnalysed_other":"{{done}}/{{count}} photos analysed"},"plateDetailPanel":{"plate":"Plate","plateDetail":"Plate detail","fullFrameWithDetectedPlate":"Full frame with detected plate","detectedPlate":"Detected plate","noImage":"No image","theCropMediaForThis":"The crop media for this plate could not be resolved. Safe to delete.","plateText":"Plate text","saveCorrectedText":"Save corrected text","correctTheOcrReading":"Correct the OCR reading","camera":"Camera","captured":"Captured","confidence":"Confidence","vehicle":"Vehicle","track":"Track"},"recentPlates":{"plateFrom":"Plate {{text}} from {{cameraName}}","noCropImageThePlate":"No crop image — the plate's crop media is missing. Safe to delete.","noCrop":"No crop","deselect":"Deselect","select":"Select","manuallyCorrected":"Manually corrected","detachPlate":"Detach plate","detach":"Detach","assignPlateToVehicle":"Assign plate to vehicle","assignToVehicle":"Assign to vehicle","deletePlate":"Delete plate","ofPlates":"{{value1}} of {{value2}} plates","nothingMatchesTheFilter":"Nothing matches the filter","noPlatesRecognizedYet":"No plates recognized yet","widenTheDateRangeOr":"Widen the date range or clear the camera filter.","plateReadsAppearHereWhen":"Plate reads appear here when the detection pipeline OCRs a vehicle.","fixed":"Fixed","filterAssigned":"Assigned","filterUnassigned":"Unassigned","plateCount_one":"{{count}} plate","plateCount_other":"{{count}} plates"},"retrainTabCallout":{"trainingFromThisFeed":"Training from this feed","markATrackWithThe":"Mark a track with the graduation-cap control on its card. On Training you correct frames, build collections, and start cloud fine-tunes.","openTraining":"Open Training"},"semanticEventSearch":{"semanticSearchDescribeWhatYou":"Semantic search — describe what you're looking for…","semanticEventSearch":"Semantic event search","clearSearch":"Clear search","camera":"Camera","filterByCamera":"Filter by camera","all":"All","match":"Match","searchFailed":"Search failed:","unknownError":"unknown error","noSemanticMatchesForTry":"No semantic matches for “{{debounced}}”. Try a looser match threshold or a different phrasing.","looseLabel":"Loose","looseTitle":"The search model's own floor","balancedLabel":"Balanced","balancedTitle":"1.25× the search model's floor","strictLabel":"Strict","strictTitle":"1.5× the search model's floor"},"similarGroupsModal":{"faceFrom":"Face from {{cameraName}}","noCrop":"No crop","includeFace":"Include face","excludeFace":"Exclude face","include":"Include","exclude":"Exclude","deleteFace":"Delete face","permanentlyDeletesThisFaceCrop":"Permanently deletes this face crop. This cannot be undone.","lookAlikeGroups":"Look-alike groups","threshold":"Threshold","minSize":"Min size","reAnalyze":"Re-analyze","noLookAlikeGroupsAt":"No look-alike groups at this threshold.","selectInGallery":"Select in gallery","clusterMeta":"{{count}} faces · {{percent}}% alike","title":"Look-alike groups","finding":"Finding similar faces…","hiddenCount":"{{count}} not loaded — excluded from actions","adopt":"Adopt ({{count}})"},"stationarySection":{"parkedOn":"Parked {{className}} on {{cameraName}}","stationary":"Stationary","parkedObjectsKeptOutOf":"Parked objects — kept out of the event feed","unreadable_one":"{{count}} camera could not be read","unreadable_other":"{{count}} cameras could not be read"},"trackFlagToggles":{"couldNotUpdateThisTrack":"Could not update this track","couldNotUpdateThisTrack2":"Could not update this track. Check the server logs.","markForTraining":"Mark for training","keepsThisTrackAndIts":"Keeps this track and its media past retention","debug":"Debug","flagThisTrackForDiagnostic":"Flag this track for diagnostic attention","favourited":"Favourited"},"unassignedFaces":{"faceFrom":"Face from {{cameraName}}","noCropImageTheFace":"No crop image — the face's crop media is missing (a pre-fix orphan). Safe to delete.","noCrop":"No crop","deselect":"Deselect","select":"Select","detachFace":"Detach face","detach":"Detach","assignFaceToPerson":"Assign face to person","assignToPerson":"Assign to person","deleteFace":"Delete face","selectEveryVisibleFaceWhose":"Select every visible face whose crop image is missing so you can delete the orphans in one pass","ofFaces":"{{value1}} of {{value2}} faces","nothingMatchesTheFilter":"Nothing matches the filter","noFacesFoundForThis":"No faces found for this filter","widenTheDateRangeOr":"Widen the date range or clear the camera filter.","faceCropsAppearHereWhen":"Face crops appear here when the detection pipeline captures them.","filterUnassigned":"Unassigned","filterRecognized":"Recognized","similarGroups":"Similar groups","selectCropless":"Select {{count}} crop-less","faceCount_one":"{{count}} face","faceCount_other":"{{count}} faces"},"vehiclesList":{"loadingPlates":"Loading plates…","noPlatesYet":"No plates yet.","removePlateSample":"Remove plate sample","vehicle":"Vehicle","plates":"Plates","edit":"Edit {{name}}","delete":"Delete {{name}}","name":"Name","vehicleName":"Vehicle name…","plateSamples":"Plate samples","removeAPlateCropTo":"Remove a plate crop to drop it from recognition for this vehicle. Assign new plates from Recent recognized plates.","deleteVehicle":"Delete vehicle","deleteAndAllItsPlate":"Delete {{name}} and all its plate samples? This cannot be undone.","loadingVehicles":"Loading vehicles…","addVehicle":"Add vehicle","nothingMatchesTheFilter":"Nothing matches the filter","noVehiclesEnrolledYet":"No vehicles enrolled yet","clearTheSearchOrTry":"Clear the search or try another name.","addAVehicleThenAssign":"Add a vehicle, then assign plate crops from Recent recognized plates.","noVehiclesEnrolledYet2":"No vehicles enrolled yet."},"people":"People","enrolledIdentitiesUsedForFace":"Enrolled identities used for face recognition. Open a person to rename them or remove training samples.","recentDetectedFaces":"Recent detected faces","faceCropsCapturedByThe":"Face crops captured by the detection pipeline. Assign them to a person to build recognition training data.","detailPanel":{"fullFrame":"Full frame","crop":"Crop","detach":"Detach"},"assignCount":"Assign {{count}}","cameraFallback":"Camera #{{id}}"}`),recordings:JSON.parse(`{"activitySection":{"when":"When","domain":"Domain","operation":"Operation","reason":"Reason","camera":"Camera","items":"Items","reclaimed":"Reclaimed","loadingActivity":"Loading activity…","activityCouldNotBeRead":"Activity could not be read","theOpsLogDidNot":"The {{value1}} ops log did not answer. This is not \\"nothing happened\\" — retry, or check the node that owns it.","noActivityYet":"No activity yet","pruneDeleteAndRescanOperations":"Prune, delete and rescan operations across recordings and events show up here.","thatDomain":"that domain","thoseDomains":"those domains","domainRecordings":"Recordings","domainsMissing_one":"{{names}} did not answer — rows from that domain are missing below.","domainsMissing_other":"{{names}} did not answer — rows from those domains are missing below."},"cameraRecordingSettingsSection":{"noCameras":"No cameras","addACameraFirst":"Add a camera first.","perCameraRecordingRetention":"Per-camera recording & retention","recordingModeScheduleBandsAnd":"Recording mode, schedule bands and the retention policy for one camera — the same controls as the camera's own Recording tab. Retention is one policy over footage and analytics; per-camera event deletion lives on the Events tab.","camera":"Camera"},"cleanupSection":{"couldNotCheckWhetherStorage":"Could not check whether storage cleanup is installed on this hub.","runStorageCleanup":"Run storage cleanup?","reclaimsLeftoverAnalyticsRowsAnd":"Reclaims leftover analytics rows and files, debug stills/filmstrips, and ghost footage rows on frozen locations. Safe to re-run.","reclaimsLeftoverAnalyticsRowsAnd2":"Reclaims leftover analytics rows and files, and ghost footage rows on frozen locations. Debug stills are left alone. Safe to re-run.","runCleanup":"Run cleanup","cancelCleanup":"Cancel cleanup?","stopsAfterTheCurrentStep":"Stops after the current step. Work already done stays done.","cancelCleanup2":"Cancel cleanup","cleanup":"Cleanup","onePassOverLeftoverAnalytics":"One pass over leftover analytics (database + files) and ghost footage rows on frozen locations. Does not time out — progress updates here until it finishes.","alsoRemoveDebugMediaMotion":"Also remove debug media (motion stills and track filmstrips)","phase":"Phase:"},"diskReconcileSection":{"reconcileStorageFromDisk":"Reconcile storage from disk?","makesTheDatabaseMatchThe":"Makes the database match the filesystem: recordings index, tracks, events and media whose files are gone. Favourited tracks without files are deleted. Snapshot-less motion/audio events are deleted. Enrolled identities stay. This cannot be undone.","reconcile":"Reconcile","diskReconcile":"Disk reconcile","deletesDatabaseRowsWhoseFiles":"Deletes database rows whose files are gone. Enrolled identities stay.","lastRun":"Last run:","failed":", {{value1}} failed ({{value2}})","reconcileFailed":"Reconcile failed:","summary":"{{completed}} camera(s) — dropped {{tracks}} tracks, {{events}} events, {{media}} media"},"eventsManagementSection":{"permanentlyDeletesEveryEventMotion":"Permanently deletes every event (motion / object / audio) older than the cutoff across all cameras, and their media. This cannot be undone.","pruneEvents":"Prune events","deleteAllEventsFor":"Delete all events for {{label}}?","deleteEvents":"Delete events","camera":"Camera","events":"Events","media":"Media","deleteAllEventsForThis":"Delete all events for this camera","loadingEventStoreFootprint":"Loading event-store footprint…","noEventData":"No event data","pipelineAnalyticsHasNotReported":"Pipeline analytics has not reported any event-store footprint yet.","totalEvents":"Total events","eventMediaOnDisk":"Event media on disk","pruneEventsOlderThan":"Prune events older than","pruneNow":"Prune now","noStoredEvents":"No stored events","noCameraHasPersistedEvents":"No camera has persisted events yet.","ageDays_one":"{{count}} day","ageDays_other":"{{count}} days","pruneTitle_one":"Prune events older than {{count}} day?","pruneTitle_other":"Prune events older than {{count}} days?","deleteRowsMessage_one":"Permanently deletes {{count}} event ({{size}} of media) for this camera. This cannot be undone.","deleteRowsMessage_other":"Permanently deletes {{count}} events ({{size}} of media) for this camera. This cannot be undone.","removedCamera":"Removed camera #{{id}}"},"eventsSection":{"eventStore":"Event store","whatTheDurableEventStore":"What the durable event store occupies, per camera, with fleet-wide prune-by-age and delete-all-events.","postProcessingNodeFolders":"Post-processing node & folders","theSingleNodeThatWrites":"The single node that writes event crops, and the storage location they land in."},"exportsSection":{"cancelThisExport":"Cancel this export?","stopsTheRenderThePartial":"Stops the render. The partial file is discarded.","cancelExport":"Cancel export","deleteThisExport":"Delete this export?","permanentlyRemovesTheRenderedFile":"Permanently removes the rendered file and its history row.","camera":"Camera","range":"Range","variant":"Variant","state":"State","expires":"Expires","size":"Size","downloadMp4":"Download MP4","download":"Download","cancelRender":"Cancel render","deleteExport":"Delete export","loadingExports":"Loading exports…","newExport":"New export","noExportsYet":"No exports yet","createOneHereNewExport":"Create one here (New export) or from a camera's timeline in the viewer. Rendered clips show up here to download or manage.","queued":"queued","rendering":"rendering","ready":"ready","failed":"failed","expired":"expired","deleted":"deleted"},"maintenanceAuditSection":{"reclaimOrphanedAnalyticsRows":"Reclaim orphaned analytics rows?","deletesIndexRowsAndTheir":"Deletes index rows (and their blobs) whose owning track, event or group is already gone. Enrolled gallery media is skipped.","reclaimOrphans":"Reclaim orphans","reclaimDebugMedia":"Reclaim debug media?","deletesMotionVisitStillsAnd":"Deletes motion-visit stills and track filmstrips. Key frames and enrolled gallery stay. Paced at 2 MB/s — you can leave this page.","reclaimDebugMedia2":"Reclaim debug media","forgetGhostRowsOn":"Forget ghost rows on {{locationId}}?","dropsDurableHourRowsWhose":"Drops durable hour rows whose files are not on disk. Files the ledger does not name are reported, never deleted.","forgetGhosts":"Forget ghosts","countLeftovers":"Count leftovers","orphanAnalyticsRowsDebugStills":"Orphan analytics rows, debug stills/filmstrips, and ghost hours on a frozen recordings folder. Counts only — Reclaim or Forget deletes after you confirm.","auditing":"Auditing…","runAudit":"Run audit","orphansAlreadyRunningRequestIgnored":"Orphans: already running — request ignored.","debugMediaAlreadyRunningShowing":"Debug media: already running — showing last pass.","forgot":", forgot {{value1}}","orphanFilesLeftOnDisk":", {{value1}} orphan files left on disk","noFrozenLocationSkipped":"No frozen location — skipped.","orphansSummary_one":"Orphans: {{count}} orphan","orphansSummary_other":"Orphans: {{count}} orphans","orphansReclaimed_one":"Orphans: {{count}} orphan, reclaimed {{reclaimed}}","orphansReclaimed_other":"Orphans: {{count}} orphans, reclaimed {{reclaimed}}","debugEligible":"Debug media: {{count}} eligible","debugEligibleSize":"Debug media: {{count}} eligible ({{size}})","walkRefused":"{{location}}: walk refused — {{reason}}.","ghosts_one":"{{location}}: {{count}} ghost","ghosts_other":"{{location}}: {{count}} ghosts"},"newExportModal":{"newExport":"New export","camera":"Camera","profile":"Profile","from":"From","to":"To","speed":"Speed","titleOptional":"Title (optional)","eGCourierAtThe":"e.g. courier at the gate","fromMustBeBeforeTo":"\\"From\\" must be before \\"To\\".","queuing":"Queuing…","createExport":"Create export","speedRealTime":"Real time (1×)","includeAudio":"Include audio","includeAudioRealtimeOnly":"Include audio (real-time only)"},"recordingsManagementSection":{"moveStorage":"Move storage","copyRecordingsLowResRecordings":"Copy recordings, low-res recordings or event media to a new location, verify, then repoint the default. Applies to every camera."},"recordingsStorageSection":{"footageOnDisk":"Footage on disk","whatRecordedFootageOccupiesPer":"What recorded footage occupies, per camera and per volume, with prune-by-policy and delete-all-footage.","recordingNodeFolders":"Recording node & folders","theSingleNodeThatRecords":"The single node that records and serves playback, and the storage locations footage is written to."},"storageSection":{"prune":"Prune {{label}}?","appliesTheRetentionPolicyNow":"Applies the retention policy now (reason: {{reason}}). Footage beyond the policy is permanently deleted.","pruneNow":"Prune now","deleteAllFootageFor":"Delete all footage for {{label}}?","permanentlyDeletesOfRecordedFootage":"Permanently deletes {{value1}} of recorded footage for this camera. This cannot be undone.","delete":"Delete {{value1}}","camera":"Camera","disk":"Disk","theOnlyRecordingsVolumeOn":"The only recordings volume on this node — this camera can only be here.","theRecordingsDefaultThisNode":"The recordings DEFAULT. This node has several recordings volumes and the per-camera placement is not reported by recording.getStorageUsage, so this is where footage lands by default rather than a per-camera fact.","default":"(default)","used":"Used","oldestFootage":"Oldest footage","theOldestSegmentTheArchive":"The oldest segment the ARCHIVE holds for this camera — the per-camera answer to 'is retention actually holding?'.","applyRetentionPolicyNow":"Apply retention policy now","prune2":"Prune","deleteAllFootage":"Delete all footage","loadingStorageUsage":"Loading storage usage…","noStorageData":"No storage data","theRecordingNodeHasNot":"The recording node has not reported any storage usage yet.","totalUsed":"Total used","freeOnRecordingsVolumes":"Free on recordings volumes","disk2":"Disk: {{label}}","volumeFillEverythingOnThe":"Volume fill — everything on the disk, not only recordings. Warn at 85%, critical at 95%.","pruneReason":"Prune reason","perCameraUsageUnavailable":"Per-camera usage unavailable","noRecordedFootage":"No recorded footage","thisRecordingNodeHasNo":"This recording node has no footage ledger, so it refused to answer the per-camera table rather than report what it happens to hold in memory. The disk totals above are unaffected.","noCameraHasRecordedFootage":"No camera has recorded footage on this node yet.","pruneRetention":"Retention policy","pruneQuota":"Quota / disk pressure","pruneOperator":"Operator","defaultRoot":"default root"},"recordedFootageAndTheDurable":"Recorded footage and the durable event store — what each occupies, where it is written, and the operations that move or reconcile both.","recordings":"Recordings","events":"Events","cameras":"Cameras","export":"Export","activity":"Activity","management":"Management","storageMigrationSection":{"classRecordings":"Recordings","classRecordingsLow":"Low-res recordings","classEventMedia":"Event media","classFrom":"{{label}} from","classTo":"{{label}} to","readOnly":"read-only","residueUnknown":"amount unknown — the archive could not be read","residueRows_one":"{{items}} row","residueRows_other":"{{items}} rows","residueSegments_one":"{{items}} segment · {{size}}","residueSegments_other":"{{items}} segments · {{size}}"}}`),migration:{storageMigrationSection:{checkingWhetherStorageMigrationIs:`Checking whether storage migration is installed…`,couldnTCheckWhetherStorage:`Couldn't check whether storage migration is installed`,theCapabilityRegistryDidNot:`The capability registry did not answer, so this panel has nothing to report either way — it is not a statement that the capability is missing. Reload to ask again.`,storageMigrationNotInstalled:`Storage migration not installed`,theCapabilityRegistryAnsweredNo:`The capability registry answered: no addon in this cluster provides storage-migration. Once one is deployed, this panel moves recordings, low-res recordings and event media to new storage locations in one coordinated, verified operation.`,startStorageMigration:`Start storage migration?`,copiesTheSelectedClassesFrom:`Copies the selected classes from the chosen source to the destination, verifies, then either makes the destination the default (if the source was) or disables the source. Safe to re-run if interrupted.`,startMigration:`Start migration`,cancelMigration:`Cancel migration?`,stopsTheInProgressMigration:`Stops the in-progress migration. Data already moved and verified stays at the destination; anything already repointed is not reverted.`,cancelMigration2:`Cancel migration`,storageMigration:`Storage migration`,moveRecordingsLowResRecordings:`Move recordings, low-res recordings and/or event media from one location to another: copies via the recorder / pipeline-analytics movers, verifies, then either repoints the default (when the source was the default) or disables the source (when it was not). Skip a class with an empty destination.`,skip:`— skip —`,plan:`Plan`,nothingToMoveSelectedDestinations:`Nothing to move — selected destinations match the current defaults.`,migrationStatus:`Migration status`,phase:`Phase:`,paused:`Paused:`,migrationHistory:`Migration history`,drainRemaining:`Drain remaining {{storageClass}}?`,drainRemaining2:`Drain remaining`,leftOnTheOldLocation:`Left on the old location`,measured:`Measured {{value1}}`,measuredNever:`Measured — never`,counting:`Counting…`,aMigrationRepointsFirstAnd:`A migration repoints first and drains behind. If the drain was cancelled, failed, or was interrupted by a restart, the data below is still on the source — readable, but not where the defaults now point. Draining moves it; it changes no default and pauses nothing.`,thisCountIsTakenOn:`This count is taken on demand: measuring it walks the whole media collection, so it is not refreshed on a timer. Press Refresh after a drain finishes.`,moversRunningOutsideAMigration:`Movers running outside a migration`}},deviceDoAction:{deviceDoActionFields:{target:`Target`,specificDevice:`Specific device`,theDeviceThatTriggeredThis:`The device that triggered this run`,sameFamilyOnlyTheAction:`Same family only — the action runs on each selected device.`,action:`Action`,pickADeviceFirst:`Pick a device first`,loadingActions:`Loading actions…`,noActionsForThisDevice:`No actions for this device`,selectAnAction:`Select an action…`,couldNotReadThisDevice:`Could not read this device’s capabilities.`},deviceLabel_one:`Device`,deviceLabel_other:`Devices`,customLabel:`Custom: {{name}}`},device:{cameraFunctionSwitches:{cameraFunctions:`Camera functions`,functions:`Functions`,offCount:`{{count}} off`},deviceConfigPanel:{failedToLoadDeviceConfiguration:`Failed to load device configuration.`,noConfigurationAvailableForThis:`No configuration available for this device.`,saving:`Saving...`},deviceNotificationMute:{notifications:`Notifications`,notificationMuteStateUnknownThe:`Notification mute — state unknown; the notification centre did not answer.`,muted:`Muted. {{costWhenOff}}`,notifyingMutingIt:`Notifying. Muting it: {{costWhenOff}}`,unknown:`Unknown`,muted2:`Muted`,notifying:`Notifying`,writeFailed:`Write failed: {{failure}}`,theNotificationCentreDidNot:`The notification centre did not answer, so this device’s mute state is unknown.`,cameraCostWhenOff:`This camera never notifies — no rule, no target, no alarm. Existing events, tracks and recordings are unaffected.`,deviceCostWhenOff:`This device never notifies — no rule, no target, no alarm.`},intercomPanel:{mic:`Mic:`,audioPath:`Audio path:`,micNote:`<b>Mic:</b> your browser will ask for permission on first use. The mic stays active only while you're talking and is released when you stop.`,audioPathNote:`<b>Audio path:</b> your voice is encoded as Opus, decoded server-side, and forwarded to the camera as IMA ADPCM over the camera's dedicated talk channel.`,state:{idle:`Press to talk`,requestingMic:`Requesting mic…`,starting:`Opening session…`,connecting:`Connecting…`,talking:`Talking — release to stop`,stopping:`Stopping…`,error:`Error`},hint:{idle:`Click to open a two-way audio session.`,requestingMic:`Allow microphone access to continue.`,starting:`Server is opening the camera talk channel.`,connecting:`WebRTC handshake in progress.`,talking:`Audio is flowing. Click again to stop.`,stopping:`Closing the session.`,error:`Click to retry. Check that the camera is online and the audio-codec addon is installed.`}},panelContent:{reboot:`Reboot "{{deviceName}}"?`,theDeviceWillGoOffline:`The device will go offline for ~30 seconds while the firmware restarts.`,reboot2:`Reboot`,restartAddon:`Restart addon "{{addonId}}"?`,everyDeviceServedByThis:`Every device served by this addon disconnects briefly and reconnects.`,restart:`Restart`,restartDevice:`Restart device`,rebootTheFirmware30sOffline:`Reboot the firmware. ~30s offline.`,restartAddon2:`Restart addon`,perAgentRestartComingWith:`Per-agent restart — coming with the agent-process supervisor.`,restartAgent:`Restart agent`,disabledAgentProcessSupervisorNot:`Disabled — agent-process supervisor not yet wired.`,notLoaded:`Device #{{id}} not loaded.`,bouncesAddon:`Bounces every device served by <code>{{addonId}}</code>.`},resyncButton:{reSync:`Re-sync`,reAlignThisDeviceS:`Re-align this device's type, role, capabilities and units with its source.`,reSyncing:`Re-syncing…`},bindingsTab:{failedToLoadBindings:`Failed to load bindings:`,noCapabilityProvidersApplicableTo:`No capability providers applicable to this device yet.`,nativeProvidersShowUpHere:`Native providers show up here as soon as the owning addon registers them.`,capability:`Capability`,kind:`Kind`,activeProvider:`Active Provider`,node:`Node`,native:`Native`,wrapper:`Wrapper`,noneAvailable:`none available`,clickToDeactivateRevertTo:`Click to deactivate (revert to native)`,activateWrapper:`Activate wrapper {{wrapperId}}`,boundSummary_one:`<b>{{bound}}</b> of {{count}} capability bound — rows marked <em>unbound</em> have a wrapper available you can activate.`,boundSummary_other:`<b>{{bound}}</b> of {{count}} capabilities bound — rows marked <em>unbound</em> have a wrapper available you can activate.`,kindNative:`native`,wrapped:`wrapped`,linked:`linked`},cameraStepInspector:{loadingPipeline:`Loading pipeline…`,noPipelineNodeIsOnline:`No pipeline node is online.`,catalogUnavailable:`Catalog unavailable.`,detectionStepsOfThisCamera:`Detection steps of this camera`,noCameraSettings:`This step has no settings on this camera.`,appliesToAllAcceleratorsOf:`Applies to: all accelerators of this camera.`,thisCamera:`{{name}} · this camera`,saveFailed:`Save failed`,modelsChosenByAccelerators:`Models are chosen by the accelerators that run this camera — <nodes>Pipeline › Nodes</nodes>`,offBecauseParent:`Off because its parent is off`,kindDetector:`detector`,kindCropper:`cropper`,kindClassifier:`classifier`,kindRefiner:`refiner`,kindAudio:`audio`,layerCamera:`This camera`,layerNode:`Node`,thresholdsAreTheAccelerators:`Confidence thresholds belong to the model, so they are set on the accelerator that runs it (Pipeline → Nodes), not per camera.`},detectionPipelineTab:{steps:`Steps`,settings:`Settings`},detectionSourceControl:{rootDetector:`Root detector`,thisNode:`This node`,cameraOnboardAi:`Camera onboard AI`,none:`None`,saving:`Saving…`,oneRoot:`A camera runs one root detector at a time.`},deviceAggregateSection:{loadingDeviceAggregate:`Loading device aggregate…`,noAggregateContributionsForThis:`No aggregate contributions for this device.`,metadataNotLoaded:`Device metadata not loaded yet`},deviceLiveInfoSection:{loadingLiveInfo:`Loading live info…`,liveInfo:`Live Info`},eventsTab:{eventTimeline:`Event Timeline`,"0Events":`0 events`,noEvents:`No events`,deviceEventsWillAppearHere:`Device events will appear here as they occur`},overviewTab:{streamNetwork:`Stream Network`,nominal:`Nominal`,observed:`Observed`,peak:`Peak`,packetLoss:`Packet Loss`},tracksTab:{backendPending:`Backend pending`,zones:`Zones:`,time:`Time`,bindings:`Bindings`,analytics:`Analytics`,activeTracks:`Active tracks`,pipelineanalyticsGetactivetracks:`pipelineAnalytics.getActiveTracks`,noActiveTracks:`No active tracks`,tracksAppearWhenObjectsAre:`Tracks appear when objects are currently moving`,historicalTracks:`Historical tracks`,pipelineanalyticsListtracks:`pipelineAnalytics.listTracks`,noCompletedTracksYet:`No completed tracks yet`,tracksAreArchivedWhenTheir:`Tracks are archived when their TTL expires`,routeUnavailable:`{{label}} route is not available yet`,trackingHint:`Tracking is enabled per-camera in the <b>Bindings</b> tab (<code>pipeline-analytics</code> wrapper). TTL, snapshot interval, and retention are tuned on the <b>Analytics</b> device settings section.`,points:`{{count}} pts`,liveCount:`{{count}} live`,trackCount_one:`{{count}} track`,trackCount_other:`{{count}} tracks`},floatingPanels:{repl:`REPL`,ptz:`PTZ`,intercom:`Intercom`},eventsAndTrailsTab:{events:`Events`,tracks:`Tracks`,notAvailable:`Device #{{id}} not available.`},logsTab:{notAvailable:`Device #{{id}} not available.`},accessories:`Accessories`,adoptedDevices:`Adopted devices`,children:`Children`,disabledSection:`Disabled`},hero:{buttonHero:{justPressed:`Just pressed`,idle:`Idle`,lastPress:`Last press {{value1}}`,unknown:`Unknown`,awaitingState:`Awaiting state…`,ringsToday_one:`{{count}} ring today`,ringsToday_other:`{{count}} rings today`},eventEmitterHero:{noPressRecorded:`No press recorded`,button:`Button {{value1}}`,awaitingState:`Awaiting state…`,waitingForTheFirstEvent:`Waiting for the first event`,sinceStart_one:`{{count}} event since start`,sinceStart_other:`{{count}} events since start`},genericHero:{noLiveViewForThis:`No live view for this device type. Use the Config tab or the shortcut row to interact.`},hubHero:{discovered:`Discovered`,adopted:`Adopted`,available:`Available`,discover:`Discover`,online:`{{online}} online`,sleeping:`{{sleeping}} sleeping`,offline:`{{offline}} offline`,unknown:`{{unknown}} unknown`},lightHero:{awaitingState:`Awaiting state…`,turnOff:`Turn off {{deviceName}}`,turnOn:`Turn on {{deviceName}}`,brightness:`Brightness`,brightnessUnavailable:`Brightness unavailable`,on:`On`,off:`Off`,unknown:`Unknown`,changed:`Changed {{value1}}`},motionTriggerToggle:{awaitingState:`Awaiting state…`,disableTriggerOnMotion:`Disable trigger on motion`,enableTriggerOnMotion:`Enable trigger on motion`},sensorHero:{motionDetected:`Motion detected`,idle:`Idle`,triggered:`Triggered`,unknown:`Unknown`,lastTrip:`Last trip {{value1}}`,awaitingState:`Awaiting state…`},switchHero:{awaitingState:`Awaiting state…`,turnOff:`Turn off {{deviceName}}`,turnOn:`Turn on {{deviceName}}`,on:`On`,off:`Off`,unknown:`Unknown`,changed:`Changed {{value1}}`}},overviewAdapters:{deviceInfoAdapter:{deviceInfo:`Device Info`,identity:`Identity`,hardware:`Hardware`,type:`Type`,provider:`Provider`,capabilities:`Capabilities`,none:`None`,autoPopulatedByTheDriver:`Auto-populated by the driver on every connect. Read-only.`,integration:`Integration`,parent:`Parent`}},shared:{primaryChildRow:{primaryChild:`Primary child`},addressSelector:{noAddressesAvailable:`No addresses available.`,autoPreferred:`Auto-preferred`,alwaysIncluded:`Always included`,unlikelyUsable:`Unlikely usable`},replTerminal:{thinking:`…thinking`,text:`>`},webRtcPlayer:{connecting:`Connecting…`,connectionFailed:`Connection failed`,streamDisconnected:`Stream disconnected`,reconnect:`Reconnect`,unmute:`Unmute`,mute:`Mute`},locationRow:{roomAreaOrLeaveEmpty:`Room / area (or leave empty to clear)`,create:`Create`},staleNodeNotice:{notice:`This link named node <b>{{id}}</b>, which is not in this cluster. Showing <b>{{name}}</b> instead.`}},formBuilder:{formBuilder:{searchOrAdd:`Search or add…`,searchToAdd:`Search to add…`},formSaveBar:{saving:`Saving…`},modelSelector:{models:`Models ({{length}})`,customPath:`Custom Path`,noPredefinedModelsAvailableUse:`No predefined models available. Use the Custom Path tab to specify a model file path or URL.`,enterPathLikeDataModels:`Enter path like /data/models/custom.onnx or https://...`,acceptedFormats:`Accepted formats:`,howToConvertYourModel:`How to convert your model`},searchableMultiSelectField:{searchToAdd:`Search to add…`},saveBar:{unsavedChanges_one:`{{count}} unsaved change`,unsavedChanges_other:`{{count}} unsaved changes`}},backup:{archiveList:{deleteThisArchive:`Delete this archive?`,permanentlyDeletesAndFrees:`Permanently deletes "{{value1}}" and frees {{value2}}.`,loadingArchives:`Loading archives…`,failedToReadManifestFor:`Failed to read manifest for this destination`,noArchivesAtThisDestination:`No archives at this destination yet.`,when:`When`,label:`Label`,encryptedRestoreNeedsBackupKey:`encrypted — restore needs backup key {{keyId}}`,databases:`Databases`,files:`Files`,size:`Size`,downloadArchive:`Download archive`,download:`Download`,restoreFromThisArchive:`Restore from this archive`,restore:`Restore`,delete:`Delete {{value1}}`},backupDatabasePicker:{whatToBackUp:`What to back up`},backupEncryptionCard:{thisKeyIsShownOnly:`This key is shown only once. CamStack does not keep it — not the hub, not its database, not its backups. Without it, an encrypted backup cannot be restored by anyone, including you. Store it in a password manager or print it, away from this server.`,copied:`Copied`,downloadAsFile:`Download as file`,iHaveStoredThisKey:`I have stored this key somewhere safe, off this server.`,iHaveStoredIt:`I have stored it`,replaceTheBackupKey:`Replace the backup key`,encryptBackups:`Encrypt backups`,aNewKeyIsGenerated:`A new key is generated and shown once; new backups are encrypted to it. Older backups keep needing the key they were made with — keep that one too.`,aBackupKeyIsGenerated:`A backup key is generated and shown once. Every new backup is encrypted to it, and restoring one will ask for it. Existing backups stay as they are.`,generateANewKey:`Generate a new key`,generateTheKey:`Generate the key`,turnBackupEncryptionOff:`Turn backup encryption off`,newBackupsWillBeWritten:`New backups will be written unencrypted. Existing encrypted backups still need their key to be restored.`,turnOff:`Turn off`,encryption:`Encryption`,onKeySince:`On — key {{keyId}}, since {{value2}}`,offBackupsAreNotEncrypted:`Off — backups are not encrypted`,replaceKey:`Replace key`,enableEncryption:`Enable encryption`,archivesAreEncryptedOnThis:`Archives are encrypted on this server before they reach any destination. The server keeps only a public key, so it can encrypt scheduled backups but cannot decrypt them — only your backup key can. Covers the database snapshot, config.yaml, addon data (HomeKit pairing, Matter fabric, Tailscale state) and TLS.`,olderKeysBackupsMadeWith:`Older keys (backups made with them still need them):`},backupEntriesTable:{loadingBackupEntries:`Loading backup entries…`,failedToLoadBackupEntries:`Failed to load backup entries`,unknownError:`Unknown error`,noBackupEntriesYet:`No backup entries yet`,createOneToScheduleBackups:`Create one to schedule backups across one or more storage locations.`,hideArchives:`Hide archives`,showArchives:`Show archives`,entry:`Entry`,unnamed:`(unnamed)`,enabled:`Enabled`,backsUp:`Backs up`,locations:`Locations`,retention:`Retention`,schedule:`Schedule`,noLocations:`No locations`,manual:`Manual`,enable:`Enable {{value1}}`,retentionFor:`Retention for {{value1}}`,deleteBackupEntry:`Delete backup entry?`,willStopRunningExistingArchives:`"{{value1}}" will stop running. Existing archives are kept.`,runThisEntryNow:`Run this entry now`,runNow:`Run now`,edit:`Edit {{value1}}`,delete:`Delete {{value1}}`,thisEntryHasNoLocations:`This entry has no locations selected.`,lastRun:`last run {{when}}`,archivesFor:`Archives for {{name}}`},backupEntryModal:{editBackupEntry:`Edit backup entry`,newBackupEntry:`New backup entry`,createEntry:`Create entry`,name:`Name`,nightlyOffsite:`Nightly offsite`,locationsSelected:`Locations ({{value1}} selected)`,loadingLocations:`Loading locations…`,noBackupsStorageLocationsConfigured:"No `backups` storage locations configured. Add one in Settings → Storage first.",retentionArchivesKept:`Retention (archives kept)`,enabled:`Enabled`,runOnScheduleWhenChecked:`Run on schedule when checked.`,runOnSchedule:`Run on schedule`,schedule:`Schedule`},backupNowDialog:{backUpNow:`Back up now`,runsOnceAndWritesThe:`Runs once and writes the archive to every enabled backup location.`},backupRunsPanel:{cancelQueuedBackupRun:`Cancel queued backup run?`,thisRunHasNotStarted:`This run has not started. Cancelling removes it from the queue — nothing has been written, nothing is deleted.`,cancelRun:`Cancel run`,stopThisBackupRun:`Stop this backup run?`,theHalfWrittenStagingArchive:`The half-written staging archive is deleted and the destination currently uploading discards its partial copy. {{keptSentence}}`,stopRun:`Stop run`,runs:`Runs`,aBackupRunIsIn:`A backup run is in progress`,oneRunExecutesAtA:`One run executes at a time — queued runs wait in line.`,checkingForBackupRuns:`Checking for backup runs…`,couldNotReadBackupRuns:`Could not read backup runs — the orchestrator did not answer.`,noBackupRunsYetRuns:`No backup runs yet. Runs appear here the moment one starts — manual or scheduled.`,run:`Run`,state:`State`,progress:`Progress`,destinations:`Destinations`,timing:`Timing`,actions:`Actions`,removeThisRunFromThe:`Remove this run from the queue before it starts`,stopThisRunTheHalf:`Stop this run — the half-written archive is discarded`,stop:`Stop`,queued:`Queued`,uploading:`Uploading`,buildingArchive:`Building archive`,succeeded:`Succeeded`,failed:`Failed`,stoppedBeforeCompletingEveryDestination:`Stopped before completing every destination — not a success`,stopped:`Stopped`,inLine:`in line`,waitingItsTurn:`waiting its turn`,stagedSoFar:`staged so far`,toCurrentDestination:`to current destination`,notResolvedYet:`not resolved yet`,keptTheirArchive:`Kept their archive: {{value1}}`,failed2:`Failed: {{value1}}`},cronEditor:{schedulePreset:`Schedule preset`,custom:`Custom…`,cronExpression5FieldPosix:`Cron expression (5-field POSIX)`,format:`Format:`,validating:`Validating…`,invalidCronExpression:`Invalid cron expression`,noFutureRunsMatchThis:`No future runs match this expression.`,nextRuns:`Next runs`,presetManual:`Manual only`,presetHourly:`Every hour`,presetHourlyDesc:`On the hour`,preset3h:`Every 3 hours`,preset6h:`Every 6 hours`,presetDaily:`Daily at 03:00`,presetDailyDesc:`Every night at 3 AM`,presetWeekly:`Weekly Sunday 03:00`,presetWeeklyDesc:`Sunday morning at 3 AM`,formatLine:`<code>minute hour day-of-month month day-of-week</code> · all times server-local`},restoreWizard:{restoreBackup:`Restore Backup`,pickSource:`pick source`,pickLocations:`pick locations`,scheduleRestore:`Schedule Restore`,destination:`Destination`,selectDestination:`Select destination…`,archive:`Archive`,pickADestinationFirst:`Pick a destination first.`,readingArchives:`Reading archives…`,noArchivesAvailableAtThis:`No archives available at this destination.`,encryptedKey:`encrypted (key {{keyId}})`,databasesInThisArchive:`Databases in this archive`,snapshotsOnlyRestoringThisArchive:`Snapshots only: restoring this archive replaces just these databases. It does NOT touch configuration, addons, addon data or certificates.`,loadingArchiveManifestIfThis:`Loading archive manifest… If this persists, the archive may predate manifests — restoring will apply everything in the tarball.`,selectedEntriesWillOverwriteLive:`Selected entries will overwrite live data on the next server restart. Unchecked entries stay current.`,restoreIsAppliedAtNext:`Restore is applied at next server boot. Active connections will drop when you restart.`,backupKey:`Backup key`,camstackBackupSecretV1:`camstack-backup-secret-v1:…`,stepOf:`Step {{step}} of 3 — {{name}}`,confirmStep:`confirm`,encryptedTo:`This archive is encrypted to backup key <mono>{{keyId}}</mono>. Paste the secret key shown when that key was created. It is used to decrypt the archive on this server and is not stored.`,databases:`Databases`},encryptionCard:{yourKey:`Your backup key ({{keyId}})`},runsPanel:{runningFor:`running for {{elapsed}}`,queuedAgo:`queued {{elapsed}} ago`,took:`took {{elapsed}}`,live:`live`,manual:`manual`,archiveSize:`{{size}} archive`,targets_one:`{{count}} target`,targets_other:`{{count}} targets`,completed:`✓ {{count}} completed`,failedCount:`✗ {{count}} failed`}},graph:{clusterGraphView:{filterByNodeRunnerCap:`Filter by node / runner / cap…`,expandAll:`Expand all`,collapseAll:`Collapse all`,restoreTheAutomaticLayoutDiscarding:`Restore the automatic layout, discarding dragged positions`,resetLayout:`Reset layout`},nodeBox:{lastSeen:`last seen {{relativeLastSeen}}`,openNodeDetail:`Open node detail`,noProcesses:`No processes`},runnerBlock:{restartAddon:`Restart addon`,logs:`Logs`}},pairing:{agentStateBadge:{notConnected:`not connected`},agentsFoundSection:{unpairFailed:`Unpair failed: {{message}}`,unpair:`Unpair {{nodeId}}`,sCertificatesAreRevokedAt:`{{nodeId}}'s certificates are revoked at once and it is disconnected from the mesh. It must be paired again before it can rejoin.`,unpair2:`Unpair`,node:`Node`,address:`Address`,version:`Version`,state:`State`,certificate:`Certificate`,pair:`Pair`,agentsFoundOnTheNetwork:`Agents found on the network`,scan:`Scan`,addByAddress:`Add by address`,anAgentHoldsNoSecret:`An agent holds no secret: pairing issues it a certificate after you confirm the same six digits on this page and on the agent. Discovery needs the agent on its own IP or host networking; a Docker bridge hides it — add it by address.`,addAgentByAddress:`Add agent by address`,aPrivateOrLocalAddress:`A private or local address only.`,agentAddress:`Agent address`,port:`Port`,optional:`Optional.`,agentPort:`Agent port`,couldNotListAgents:`Could not list agents`,requestFailed:`Request failed`,lookingForAgents:`Looking for agents…`,noAgentsFound:`No agents found`,nothingIsAdvertisingOnThis:`Nothing is advertising on this network. Start the agent on its own IP (or host networking), or add it by address.`},pairingDialog:{eachScreenShowsACode:`Each screen shows a code; you type the code from the OTHER screen. Agent at {{value1}}`,couldNotStartThePairing:`Could not start the pairing`,reject:`Reject`,codeOnThisHub:`Code on this hub`,codeOnThisHubRead:`Code on this hub — read it out to the agent`,onTheAgentEnterThis:`On the agent, enter this code and the agent’s local PIN (shown on the agent’s console or log, or on its own screen).`,codeShownOnTheAgent:`Code shown on the agent`,typeTheSixDigitsThe:`Type the six digits the agent displays. Do not copy the code above.`,youConfirmedHereTheAgent:`You confirmed here. The agent still has to enter the hub code and its PIN.`,working:`Working…`,hubConfirmed:`Hub: confirmed`,hubNotConfirmed:`Hub: not confirmed`,agentConfirmed:`Agent: confirmed`,agentNotConfirmed:`Agent: not confirmed`,joinedAndRegisteredItsCapabilities:`{{nodeId}} joined and registered its capabilities.`,holdsItsCertificateWaitingFor:`{{nodeId}} holds its certificate. Waiting for it to connect and register its capabilities…`,openNode:`Open node`,title:`Pair agent {{node}}`,expiresIn:`Expires in {{countdown}}`}},cluster:{forksTab:{setLogLevel:`Set log level`,restartProcess:`Restart process`,showLogsFor:`Show logs for {{addonId}}`,showEventsFor:`Show events for {{addonId}}`,restart:`Restart {{addonId}}`,noServices:`No services`,noProcessesOnThisNode:`No processes on this node`,cpu:`{{percent}}% CPU`},nodeDetailCapabilitiesTab:{noCapabilitiesOnThisNode:`No capabilities on this node`,capability:`Capability`,boundProvider:`Bound provider`,onlyOneProviderInstalledChoice:`Only one provider installed — choice becomes available once a second addon registers this capability`},nodeDetailSettingsTab:{noAddonsOnThisNode:`No addons on this node`},nodeInfoTab:{rename:`Rename`,hub:`Hub`,agent:`Agent`,gb:`{{value1}} GB`,cores_one:`{{count}} core`,cores_other:`{{count}} cores`,installedRuntimes:`Installed runtimes`,installedRuntimesHint:`Inference runtimes installed on this node. Its live inference devices are on Pipeline → Load balancing.`},processesTab:{class:`Class`,addon:`Addon`,command:`Command`,cpu:`CPU%`,uptime:`Uptime`,scanning:`Scanning…`},nodeCard:{unpair:`Unpair {{name}}`,unpairItDisconnectsAndMust:`Unpair {{name}}? It disconnects and must be paired again.`,unpair2:`Unpair`,unpairThisNodeRevokesIts:`Unpair this node — revokes its certificates; it must be paired again to rejoin`,unpairing:`Unpairing…`,gb:`{{value1}}GB`,forgetThisNodeRemovesIts:`Forget this node — removes its saved history and pipeline assignments`,forgetting:`Forgetting…`,forgetNode:`Forget node`,openThisAgentSStatus:`Open this agent's status dashboard (unlocks with a short-lived hub ticket)`,opening:`Opening…`,openDashboard:`Open dashboard`,general:`General`,forks:`Forks ({{length}})`,processes:`Processes`,load:`Load`,settings:`Settings`,capabilities:`Capabilities`,lastSeen:`Last seen {{when}} —`,addonsAssigned_one:`{{count}} addon assigned; will resume when node reconnects`,addonsAssigned_other:`{{count}} addons assigned; will resume when node reconnects`,forgetFailed:`Forget failed: {{error}}`,unpairFailed:`Unpair failed: {{error}}`},noNodes:`No nodes in this cluster yet.`,subtitle:`One node at a time — topology and packages. Agents join by pairing (certificate, no shared secret).`},access:{accessSection:{dismiss:`Dismiss`},createTokenModal:{createToken:`Create token`,issueToken:`Issue token`,fullAdministrator:`full administrator`,onBehalfOfUser:`On behalf of user`,scopes:`Scopes`,eachScopePicksACap:`Each scope picks a (cap or addon) target + one or more access flavours. The token can access ONLY what's listed.`,never:`Never (until revoked)`,days_one:`{{count}} day`,days_other:`{{count}} days`,whatItMayDo:`What it may do`,reachScopes:`Scopes`,reachViewLink:`View link`,reachAll:`All permissions`,label:`Label`,cameras:`Cameras`,viewKind:`Shows`,viewGrid:`Live grid`,viewEvents:`Events`,talk:`Allow talk-back on these cameras`,expires:`Expires after`},credentialTable:{couldNotLoad:`Could not load {{label}}`,noMatchTheFilters:`No {{label}} match the filters.`,clearSelection:`Clear selection`,loading:`Loading {{label}}…`,selectAllShown:`Select all {{count}} shown`,revoke:`Revoke {{what}}…`,selectedLabel:`{{what}} selected`,groupStatus:`Status`,groupOwner:`Owner`,groupKind:`Kind`,searchPlaceholder:`Search {{label}}…`,searchLabel:`Search {{label}}`,facetsLabel:`Filter {{label}}`,clearFilters:`Clear filters`,pagesLabel:`{{label}} pages`,previousPage:`Previous page`,nextPage:`Next page`,range:`{{from}}–{{to}} of {{total}}`,rowLabel:`Select {{name}} ({{owner}})`,pageLabel:`Select every {{noun}} on this page`},linkedAppsSection:{revokeTheLink:`Revoke the "{{name}}" link?`,losesAccessForOnIts:`{{name}} loses access for {{ownerName}} on its next call. Linking it again needs the account-link flow from the start.`,revoke:`Revoke`,linkedApps:`Linked apps`,externalIntegrationsAlexaLinkedTo:`External integrations (Alexa, …) linked to this hub through OAuth. Revoking one stops that integration on its next call. Already-revoked rows can be selected and removed from the list.`,linkedApps2:`linked apps`,selectRevoked:`Select revoked`,allDevices:`all devices`,allTarget:`all {{target}}`},loginSessionsSection:{signOutThisSession:`Sign out this session`,onWillHaveToSign:`{{ownerName}} on {{name}} will have to sign in again.`,signOut:`Sign out`,loginSessions:`Login sessions`,everyBrowserAndAppSigned:`Every browser and app signed in to this hub, for every user. Signing one out ends it at once; it has to sign in again. Your own current session is marked and never included in a bulk sign-out.`},tokensSection:{revoke:`Revoke "{{name}}"?`,everyScriptUsingItLoses:`Every script using it loses access immediately. This cannot be undone.`,revoke2:`Revoke`,tokens:`Tokens`,stopsWorking:`Whoever holds it loses access immediately. This cannot be undone.`,oneFormat:`Every token is its scopes: a few permissions for a script, all permissions for an admin script, or a view of some cameras for a share link. Revoking one stops it on its next use.`,noTokens:`No tokens.`,myTokens:`My tokens`,everyAddonRoutes:`every addon's routes`},credentialColumns:{name:`Name`,owner:`Owner`,kindScope:`Kind / scope`,status:`Status`,created:`Created`,lastUsed:`Last used`,expires:`Expires`,statusActive:`Active`,statusExpired:`Expired`,statusRevoked:`Revoked`,statusCurrent:`This session`,actionOn:`{{action}} {{name}}`,actionsHeader:`Actions`,never:`Never`},externalIdentitiesSection:{removeSignInLink:`Remove sign-in link`,willNoLongerBeAble:`"{{ownerName}}" will no longer be able to sign in with this {{kind}} account.`,signInLinks:`Sign-in links`,externalAccountsSingleSignOn:`External accounts (single sign-on) each user linked to their CamStack account. Only the owner can link one, from their profile; an admin can remove it.`},nouns:{shareLink_one:`share link`,shareLink_other:`share links`,adminToken_one:`admin token`,adminToken_other:`admin tokens`,session_one:`session`,session_other:`sessions`,linkedApp_one:`linked app`,linkedApp_other:`linked apps`,token_one:`token`,token_other:`tokens`,device_one:`device`,device_other:`devices`},bulk:{countOf:`{{count}} {{noun}}`,skipCurrentSession:`your current session`,skipNotActive:`already gone`,statusCount:`{{count}} {{status}}`,previewIntro:`{{what}} ({{breakdown}}) stop working at once. This cannot be undone.`,previewMore:`…and {{count}} more`,confirmTitle:`Revoke {{what}}?`,confirmLabel:`Type {{expected}} to confirm`,confirmButton:`Revoke {{expected}}`,confirmMismatch:`Type {{expected}} — the number of {{noun}} selected`,revoked:`Revoked {{what}}.`,revokedSkipped:`Revoked {{what}}. Skipped {{count}}: {{reasons}}.`,revokeFailed:`The revoke failed: {{error}}. The list below is reloaded — check what is left.`,requestFailed:`request failed`,eachPartial:`Revoked {{what}}; {{count}} failed — {{details}}. The list is reloaded — check what is left.`,eachPartialMore:`Revoked {{what}}; {{count}} failed — {{details}}; …. The list is reloaded — check what is left.`}},users:{linkedSignInsSection:{unlinkSignInAccount:`Unlink sign-in account`,stopSigningInWithThis:`Stop signing in with this {{label}} account?`,unlink:`Unlink`,linkedSignInAccounts:`Linked sign-in accounts`,signInWithAnExternal:`Sign in with an external account instead of your password. Only accounts you link here can sign you in; your two-factor authentication still applies.`,providerUnavailable:`provider unavailable`},totpModal:{remove2fa:`Remove 2FA`,removeTwoFactorAuthenticationFor:`Remove two-factor authentication for "{{username}}"? They'll be able to log in with just their password until they re-enroll from their own profile page.`,twoFactorAuthentication:`Two-factor authentication`,user:`User:`,checkingStatus:`Checking status…`,"2faNotEnrolled":`2FA not enrolled`,onlyTheUserThemselvesCan:`Only the user themselves can enable 2FA, from their own profile page.`,"2faIsActive":`2FA is active`,removingHereClearsTheServer:`Removing here clears the server-side secret. Use this only when the user has lost access — they'll have to re-enroll from their profile page afterwards.`},totpQrCode:{qrRenderingUnavailableUseThe:`QR rendering unavailable — use the secret below.`,generating:`Generating…`},userAccessModal:{title:`Access — {{name}}`,role:`Role`,admin:`Admin`,adminDescription:`Everything, on every device — users, settings and the whole system.`,viewer:`Viewer`,viewerDescription:`Uses the viewer app on the devices below, plus the features you tick.`,cannotDemoteSelf:`You cannot remove your own admin role.`,noAccessYet:`No access yet`,noAccessYetDetail:`{{name}} cannot see anything until you save a role.`,devices:`Devices`,whichDevices:`Which devices`,modeExcept:`All devices except…`,modeOnly:`Only these devices…`,pickAllowedDevice:`Pick at least one allowed device, or turn on All devices.`,features:`Features`,saveAccess:`Save access`},userSessionsModal:{signOutThisSession:`Sign out this session`,onWillHaveToSign:`"{{username}}" on {{label}} will have to sign in again.`,signOut:`Sign out`,signOutEverywhere:`Sign out everywhere`,everySessionOfYourOwn:`Every session of your own account ends, this browser included: you will be signed out here too.`,everySessionOfEndsAt:`Every session of "{{username}}" ends at once; each device has to sign in again.`,activeSessions:`Active sessions`,user:`User:`},externalIdentitiesModal:{removeSignInLink:`Remove sign-in link`,willNoLongerBeAble:`"{{username}}" will no longer be able to sign in with this {{label}} account.`,linkedSignInAccounts:`Linked sign-in accounts`,user:`User:`,noLinkedAccountsOnlyThe:`No linked accounts. Only the user can link one, from their own profile page.`,providerUnavailable:`provider unavailable`},linkedSignIns:{linkedNotice:`Linked your {{provider}} account.`,linkedOn:`{{label}} · linked {{date}}`,link:`Link {{provider}}`},rolePreview:{resolving:`Counting devices…`,couldNotResolve:`Could not count the devices. Saving still works — the hub applies the same rules.`,everyDevice_one:`Every device — {{count}} today`,everyDevice_other:`Every device — {{count}} today`,devicesVisible_one:`{{count}} device visible`,devicesVisible_other:`{{count}} devices visible`,devicesVisibleOf_one:`{{count}} of {{total}} devices visible`,devicesVisibleOf_other:`{{count}} of {{total}} devices visible`,noDevice:`This person will not see any device.`},accessSummary:{admin:`Admin`,viewer:`Viewer`,allDevices:`all devices`,devices_one:`{{count}} device`,devices_other:`{{count}} devices`,blocked_one:`{{count}} blocked`,blocked_other:`{{count}} blocked`,features_one:`{{count}} feature`,features_other:`{{count}} features`},viewerFeatures:{"face-assignment":{label:`Faces`,description:`See recognised people and assign, rename, merge or delete faces.`},"plate-assignment":{label:`License plates`,description:`See plates and vehicles, correct plate text, assign or delete plates.`},retrain:{label:`Training data`,description:`Pick and annotate frames for retraining and manage their collections.`},scenes:{label:`Scenes`,description:`Create, check and reset monitored scenes.`}}},addons:{addonCard:{updating:`Updating…`,updateTo:`Update to {{target}}`,update:`Update`,selectVersionToInstall:`Select version to install`,installedUpdateAvailableSelectedTap:`Installed {{version}} — update available. Selected {{target}}; tap to choose another version.`,versionTapToViewAll:`Version {{version}} — tap to view all versions`,unknownError:`Unknown error`,resetRetryCounterAndForce:`Reset retry counter and force immediate reload`,retryNow:`Retry now`,systemPackageUpdatingRestartsThe:`System package — updating restarts the hub`,system:`System`,restart:`Restart`,logs:`Logs`,settings:`Settings`,clusterDeployment:`Cluster Deployment`,events:`Events`,clusterWideSettingsOneValue:`Cluster-wide settings — one value for every node. Per-node settings live under Cluster → the node → Settings.`,thisAddonExposesNoCluster:`This addon exposes no cluster-wide settings. Anything it can configure is per-node — open it from Cluster → the node → Settings.`,deviceExport:`Device export`,autoUpdate:`Auto-Update`,installedOn:`Installed on`,hubLocal:`Hub (local)`,installOnMoreAgents:`Install on more agents`,addAgent:`Add agent`,noAvailableAgents:`No available agents`,failedToLoad:`Failed to load (attempt #{{attempt}})`,processProblem:{failed:`The runner gave up after repeated crashes. Restart to retry.`,refused:`The addon refused to start.`,missing:`No runner process exists for this addon.`,crashed:`The runner crashed and is waiting to be restarted.`},autoRetryAt:`Auto-retry at {{time}}`,settingsTitle:`{{name}} Settings`,components:`Components ({{count}})`,forked:`forked`,inProcess:`in-process`,outdated:`outdated`},addonRow:{systemPackage:`System package`,changesRequireAHubRestart:`Changes require a hub restart`,requiresRestart:`requires restart`,update:`Update`,restart:`Restart`,uninstall:`Uninstall`},addonUninstallControls:{uninstalled:`{{displayName}} uninstalled`,notEveryNodeWasCleaned:`{{displayName}}: not every node was cleaned`,uninstallFailed:`Uninstall {{displayName}} failed`,uninstallFrom:`Uninstall {{displayName}} from {{name}}?`,uninstall:`Uninstall`,cannotListTheNodes:`Cannot list the nodes`,theHubDidNotAnswer:`The hub did not answer which nodes have this package — nothing was removed.`,uninstallEverywhere:`Uninstall {{displayName}} everywhere?`,uninstallFromNodeS:`Uninstall from {{length}} node(s)`,uninstallFrom2:`Uninstall from {{name}}`,removing:`Removing...`,uninstallFromEveryNodeThat:`Uninstall from every node that has it`},addonUploadZone:{uploading:`Uploading...`,upload:`Upload`},capabilityMap:{noActiveProvider:`No active provider`,noProviders:`No providers`,noCapabilitiesRegistered:`No capabilities registered`,inheritGlobal:`Inherit global`,inheritGlobalWith:`Inherit global ({{provider}})`},nodeOnlyPackagesPanel:{installedOnAgentsButNot:`Installed on agents but not on the hub`,installedOnButNotOn:`Installed on {{name}} but not on the hub`,unreachable:`Could not ask {{nodes}} — its packages are not listed.`},updatesList:{checking:`Checking…`,checkForUpdates:`Check for updates`,allPackagesAreUpTo:`All packages are up to date`,restart:`Restart`,hotSwap:`Hot-swap`,update:`Update`,updateAll:`Update all ({{count}})`},versionPicker:{versions:`Versions`,uploadedCopy:`Uploaded copy`,localCopy:`Local copy`,loadingVersions:`Loading versions...`,select:`Select {{version}}`,reInstallFromNpm:`Re-install {{version}} from npm`,install:`Install {{version}}`,noVersionsFound:`No versions found`,inPlace:`{{kind}} in place.`,reinstall:`Re-install <mono>{{version}}</mono> from npm to track upstream releases again.`,showOlder:`Show older versions ({{count}})`,hideOlder:`Hide older versions`,registryError:`Could not load versions from the registry.`},addonRowBadge:{queued:`queued`,updating:`updating`,pendingRestart:`pending restart`,done:`done`,failed:`failed`},uninstallControls:{everywhere:`Everywhere`,everywhereCount:`Everywhere ({{count}})`},jobProgress:{queued:`queued`,fetching:`fetching`,staged:`staged`,validating:`validating`,applying:`applying`,restarting:`restarting`,finalizing:`finalizing`,updated:`updated`,failed:`failed`,skipped:`skipped`},installDialog:{loadingDocument:`Loading…`,couldNotLoadDocument:`Could not load this file from the registry.`,documentError:`Could not load this file. {{message}}`,title:`Install {{name}}`,version:`Version`,deprecatedVersion:`{{version}} (deprecated)`,readme:`README`,changelog:`CHANGELOG`,missingReadme:`This package has no README.`,missingChangelog:`This package has no CHANGELOG.`,install:`Install`}},brokers:{brokerForm:{failedToLoadSettingsSchema:`Failed to load settings schema:`,unknownError:`Unknown error`,connectionOk:`Connection OK.`,testFailed:`Test failed: {{value1}}`,testing:`Testing…`,testConnection:`Test connection`,loadingSchema:`Loading schema…`,noSchema:`No settings schema available for kind <code>{{kind}}</code>. Its broker addon may not be installed or running.`,advanced:`Advanced`},brokerManager:{addBroker:`Add broker`,registerAMessageBrokerFor:`Register a message broker for exporters and automations.`,adding:`Adding…`,edit:`Edit {{name}}`,saving:`Saving…`,deleteBroker:`Delete broker`,deleteBrokerIntegrationsThatDepend:`Delete broker "{{name}}"? Integrations that depend on it will stop working.`,signInOpensAPopup:`Sign in — opens a popup that closes when done`,signOutClearsTheLinked:`Sign out — clears the linked Google account on this broker`,testConnection:`Test connection`,test:`Test`,noBrokerProvidersAvailable:`No broker providers available`,name:`Name`,kind:`Kind`,status:`Status`,actions:`Actions`,failedToLoadBrokers:`Failed to load brokers:`,unknownError:`Unknown error`,noBrokersRegisteredYetAdd:`No brokers registered yet. Add one to publish device events for downstream automations.`,loadingSettings:`Loading settings…`,loadSettingsFailed:`Failed to load settings: {{message}}`,signIn:`Sign in`,signOut:`Sign out`,loadingBrokers:`Loading brokers…`},signIn:{intro:`Sign in to the account; the technical settings below are filled for you.`,start:`Sign in`,starting:`Starting the sign-in…`,saving:`Saving the account…`,openLink:`Open the link to sign in to your account`,afterLogin:`Enter your email, password and any one-time code on that page. This dialog continues by itself when you are done.`,openLoginPage:`Open the sign-in page`,reachability:`The link must be reachable from your browser. On a containerised hub, publish the sign-in proxy port.`,waitingForProxy:`Waiting for the sign-in page to be ready…`,waitingForLogin:`Waiting for you to sign in…`,cancel:`Cancel sign-in`,proxyError:`The sign-in service returned an error`},editor:{createTitle:`Add broker`,createSubtitle:`Register a connection that integrations and automations can use.`,loadingKinds:`Loading broker types…`,noProvider:`No broker provider is available.`,create:`Create broker`,creating:`Creating…`},picker:{loading:`Loading brokers…`,loadFailed:`Failed to load brokers: {{message}}`,none:`No broker yet. Create one to continue.`,createNew:`Create new…`}},integrationHub:{addonIntegrationBody:{settings:`Settings`,activity:`Activity`,activityStream:`Activity stream`},integrationHub:{integrations:`{{title}} integrations`},integrationSection:{linkTo:`Link to {{title}}`},addonControls:{enabled:`Enabled`,disabled:`Disabled`,restart:`Restart`,restart2:`Restart "{{displayName}}"?`,restartingTheAddonBouncesIts:`Restarting the addon bounces its subprocess — the provider will briefly drop and reconnect automatically.`},staleIntegration:{notice:`This link named <mono>{{id}}</mono>, which is not installed here.`,showing:`Showing <b>{{name}}</b> instead.`}},app:{bootProbeFailed:`Boot probe failed:`,connecting:`Connecting…`},galleryPager:{previousPage:`Previous page`,nextPage:`Next page`,showing:`Showing {{from}}–{{to}} of {{total}} {{noun}}`},login:{primaryLoginMethods:{orContinueWith:`Or continue with`},returningToTheApp:`Returning to the app…`,couldNotPrepareTheSign:`Could not prepare the sign-in handoff. You are logged in — retry below.`,preparingAOneTimeSign:`Preparing a one-time sign-in code…`,ifTheAppDoesNot:`If the app does not open automatically, tap below (the code expires in 60s).`,openCamstack:`Open CamStack`,camstackAdmin:`CamStack Admin`,username:`Username`,password:`Password`,logIn:`Log in`,loggingIn:`Logging in...`,twoFactorAuthentication:`Two-factor authentication`,finishSigningIn:`Finish signing in.`,passkeyVerificationIsnTAvailable:`Passkey verification isn't available on this address. Open the hub via its domain URL to complete sign-in.`,authenticationCode:`Authentication code`,verifyAndSignIn:`Verify and sign in`,verifying:`Verifying...`,methodsPending:`Loading other sign-in options...`,backToUsernamePassword:`Back to username + password`,signInTo:`Sign in to <b>{{name}}</b>`,finishSigningInAs:`Finish signing in as <mono>{{username}}</mono>.`,version:`CamStack v{{version}}`,primaryMethods:{loadFailed:`A sign-in method could not be loaded — reload the page to retry.`}},metrics:{agentLoad:{agentLoad:`Agent Load`,loading:`Loading...`,failedToLoadData:`Failed to load data`,activeTasks_one:`<b>{{count}}</b> active task`,activeTasks_other:`<b>{{count}}</b> active tasks`,idle:`idle`,taskCount_one:`{{count}} task`,taskCount_other:`{{count}} tasks`},integrationUsage:{integrationUsage:`Integration Usage`,loading:`Loading...`,failedToLoadData:`Failed to load data`,count:`<b>{{count}}</b> integrations`},processResources:{processResources:`Process Resources`,loading:`Loading...`,failedToLoadData:`Failed to load data`,cpu:`CPU:`,mem:`Mem:`,process:`Process`,memory:`Memory`,uptime:`Uptime`,rst:`Rst`}},notifications:{templateField:{noVariablesForThisField:`No variables for this field.`,class:`{{name}}<class>`,previewExampleValues:`Preview (example values)`,willBeEmpty:`{{names}} will be empty in this notification.`}},search:{globalSearch:{clearSearch:`Clear search`},resultsList:{devices:`Devices`,pages:`Pages`,integrations:`Integrations`,noResults:`No results for “{{query}}”`},placeholder:`Search devices, pages, integrations…`,truncatedResults:`Showing first {{shown}} of {{total}} — refine your search.`},settings:{nodeAddonsSettingsPanel:{theCurrentSelection:`the current selection`,saveFailed:`Save failed:`,nothingToConfigureHereFor:`Nothing to configure here for this node.`,noAddonsIn:`No addons in {{scope}} expose {{level}}-level settings on this node.`},siteLocationCard:{siteLocation:`Site location`,setByYou:`Set by you`,derivedFromIp:`Derived from IP`,notConfigured:`Not configured`,automaticDetectionFromThePublic:`Automatic detection from the public IP did not succeed`,itIsNotRetriedOn:`It is not retried on its own — enter the coordinates, or press Detect.`,latitude:`Latitude`,longitude:`Longitude`,detectFromIp:`Detect from IP`,clear:`Clear`,wgs84DecimalDegreesDetectAsks:`WGS84 decimal degrees. Detect asks a public geo-IP service once and will not overwrite a value you typed — clear it first.`,detectedNear:`Detected near {{place}}.`}},secrets:{keychainAuditTable:{nothingHasBeenAuditedYet:`Nothing has been audited yet.`,previousPage:`Previous page`,nextPage:`Next page`},keychainNoticeContent:{resetKeychain:`Reset keychain`,dismiss:`Dismiss`,download:`Download`,rotate:`Rotate`,review:`Review`,noValueCanBeRead:`No value can be read or stored. If the master key is lost for good, Reset archives every stored value and starts a new keychain; every secret field then reads “not set”.`,withoutACopyOfThe:`Without a copy of the master key, the stored values cannot be recovered.`,theKeychainUnlockedWithA:`The keychain unlocked with a previous key. Rotate to move onto the configured one.`,backupKeyFile:`CamStack’s own backups leave the key out, but a backup of the whole data directory (an appdata tar) carries both. Point <code>keychain.keyFile</code> in config.yaml at a file outside the data volume, keep the old one as <code>keychain.previousKeyFile</code>, restart, then rotate.`,resetByTrigger:`the RESET_KEYCHAIN trigger file`,resetByAdmin:`an admin ({{actor}})`,resetDetail:`Reset on {{when}} by {{by}}. {{archived}} stored value(s) were archived — unreadable without the lost master key. Everyone was signed out once.`},keychainNotices:{keychainNotices:`Keychain notices`,showLess:`Show less`,more:`{{hidden}} more`,details:`Details`},keychainStatusCard:{keychain:`Keychain`,rotateKey:`Rotate key`,downloadRecoveryKey:`Download recovery key`,state:`State`,locked:`Locked`,unlocked:`Unlocked`,keySource:`Key source`,fingerprint:`Fingerprint`,recoveryKey:`Recovery key`,notTaken:`Not taken`,purge_one:`Purge {{count}} retired wrap`,purge_other:`Purge {{count}} retired wraps`,taken:`Taken {{when}}`},revealDialog:{hide:`Hide`,recorded:`This reveal is recorded in the keychain audit. Hides in {{seconds}}s.`},secretsTable:{filterByUsage:`Filter by usage`,noValueIsStoredIn:`No value is stored in the keychain yet.`,noStoredValueMatchesThis:`No stored value matches this filter.`,hubSystem:`Hub (system)`,owner:`Owner`,scope:`Scope`,field:`Field`,updated:`Updated`,lastRead:`Last read`,status:`Status`,reveal:`Reveal {{fieldPath}}`,theKeychainIsLocked:`The keychain is locked`,revealAudited:`Reveal (audited)`,reveal2:`Reveal`},secretsTableState:{usageOrphan:`Orphan`,usageOrphanHint:`No setting points at this value any more.`,usageUnknown:`Unavailable`,usageUnknownHint:`Its owner's settings could not be read, so whether it is in use is unknown. Never deleted as an orphan.`,usageInUse:`In use`,usageInUseHint:`A setting points at this value.`,filterOrphans:`Orphans`,deleteOrphans_one:`Delete {{count}} orphan`,deleteOrphans_other:`Delete {{count}} orphans`},useKeychainActions:{downloadTitle:`Download the recovery key`,downloadMessage:`This shows the MASTER key. Anyone holding it and a copy of the database can read every secret. Store it in a password manager, not on this machine.`,downloadConfirm:`Show the key`,downloadRefused:`Download refused`,recoveryTitle:`Recovery key (fingerprint {{fingerprint}})`,recoveryMessage:`Copy it now. It is not shown again until you ask for it again (audited).`,recoveryDone:`Done`,rotateTitle:`Rotate the master key`,rotateMessage:`The data key is re-wrapped under the configured master key; no value is re-encrypted. The previous wrap is kept until you purge it.`,rotateConfirm:`Rotate`,rotateRefused:`Rotation refused`,rotatedTitle:`Rotated`,rotatedMessage:`New fingerprint {{fingerprint}}. Take a new recovery copy.`,purgeTitle:`Purge retired key wraps`,purgeMessage:`Copies of the data key wrapped under a previous master key are deleted. After this, the previous master key opens nothing.`,purgeConfirm:`Purge`,purgeRefused:`Purge refused`,resetTitle:`Reset the keychain`,resetMessage:`Every stored value is archived (unreadable without the lost key) and every secret field reads "not set". A new session signing key signs everyone out. Type {{confirmation}} to confirm.`,resetConfirm:`Reset`,resetMismatch:`Type the confirmation exactly`,resetRefused:`Reset refused`,dismissFailed:`Could not dismiss`,orphansTitle_one:`Delete {{count}} orphaned value`,orphansTitle_other:`Delete {{count}} orphaned values`,orphansMessage:`No setting points at these values any more. The hub checks each one again before deleting; anything found in use is kept.`,orphansConfirm:`Delete`,orphansRefused:`Delete refused`,keptTitle:`Some values were kept`,keptMessage:`{{deleted}} deleted; {{kept}} kept because they are in use again or their owner could not be read.`}},ui:{alertBell:{markAsRead:`Mark as read`,dismiss:`Dismiss`,alerts:`Alerts`,showRead:`Show read`,markAllRead:`Mark all read`,noUnreadAlerts:`No unread alerts`,noAlerts:`No alerts`,inProgress:`In Progress`,urgent:`Urgent`,alertsUnread:`Alerts ({{count}})`,showRead_one:`Show {{count}} read alert`,showRead_other:`Show {{count}} read alerts`},criticalAlertsPanel:{title:`Urgent alerts`,subtitle:`These need your attention.`,close:`Close`}},layouts:{addonPageLoader:{addonPageNotFound:`Addon page not found`,loading:`Loading page`,failedTitle:`This page could not be shown`,listFailed:`The page list could not be loaded.`,listStalled:`The hub did not send the page list. Try again in a moment.`,remoteStalled:`The page did not load. Its addon may be starting or unreachable.`},protectedRoute:{loading:`Loading...`},appLayout:{camstackAdmin:`CamStack Admin`,expandSidebar:`Expand sidebar`,collapseSidebar:`Collapse sidebar`,logout:`Logout`,user:`User`,adminUiV:`admin-ui v{{__APP_VERSION__}}`,openMenu:`Open menu`,camstack:`CamStack`}},build:{automationsScriptsAndComposedDevices:`Automations, scripts and composed devices — what this installation does on its own.`,automationsTab:{automation:`Automation`,couldNotReadTheAutomations:`Could not read the automations`,loadingAutomations:`Loading automations…`,noAutomationsYet:`No automations yet.`,edit:`Edit {{name}}`,newAutomation:`New automation`},blockEditor:{loadExample:`Load example`,replaceTheCurrentEditorContents:`Replace the current editor contents with this example?`,replace:`Replace`,name:`Name`,whatThisScriptDoes:`What this script does`,integrationOptional:`Integration (optional)`,leaveEmptyForTheShared:`Leave empty for the shared system integration`,startFrom:`Start from`,runsOn:`Runs on`,failed:`Failed`,renameFile:`Rename file`,doubleClickToRename:`Double-click to rename`,file:`+ file`,useThisFileAsThe:`Use this file as the compile entry`,setAsEntry:`Set as entry`,loadingTheNodeSType:`Loading the node's type definitions…`,theNodeReturnedNoType:`The node returned no type definitions, so this code is NOT being checked against the system's types. The server-side compile still applies on save.`,theCodeDoesNotCompile:`the code does not compile`,couldNotReachTheCompiler:`Could not reach the compiler:`,typeCheckOnTheNode:`Type-check on the node without saving`,stopTheProcessAndLet:`Stop the process and let the supervisor bring it back`,restart:`Restart`,showThisScriptSProcess:`Show this script's process logs`,nameRequired:`Name required`,logsAppearOnceTheScript:`Logs appear once the script has been saved and started.`,hubOnlyWarning:`Block execution is hub-only today. Saved with this placement the block will be stored and compiled, but it will report <strong>Failed</strong> instead of running.`,entry:`entry`,errorsCannotSave_one:`{{count}} error — the block cannot be saved.`,errorsCannotSave_other:`{{count}} errors — the block cannot be saved.`,moreErrors:`…and {{count}} more.`,compiledOk:`The node compiled this code. Nothing was saved.`,errorLine:`line {{line}}:`,unsavedChanges:`unsaved changes`,errorsCount:`errors: {{count}}`,logsOf:`Logs — <code>{{id}}</code>`,diagnosticLine:`line {{line}}: {{message}}`},customDeviceTab:{couldNotReadTheCompositions:`Could not read the compositions`,loadingCompositions:`Loading compositions…`,theCompositionStoreHasNot:`The composition store has not been read yet.`,thisIsNotTheSame:`This is not the same as having none — the list appears once the hub has read it (`,newComposedDevice:`New composed device`,editComposedDevice:`Edit composed device`,showingTheLastAnswerThe:`Showing the last answer — the latest refresh failed:`,deviceNamesAreShownAs:`Device names are shown as references:`,composedDevices:`Composed devices`,aNewDeviceWhoseState:`A new device whose state is derived from other devices.`,noComposedDevices:`No composed devices.`,customizations:`Customizations`,fieldsAddedToOrReplaced:`Fields added to or replaced on an existing device — one per device, edited from the device.`,noCustomizations:`No customizations.`,type:`Type`,state:`State`,sources:`Sources`,deviceMissing:`device missing`,notReported:`{{name}} — device not reported yet`,deviceListUnreadable:`the device list could not be read ({{error}})`,deviceListPending:`the device list has not answered yet`,deleteThisComposedDevice:`Delete this composed device?`,deleteMessage:`{{name}} will be deleted. This cannot be undone.`},scriptDevicesPanel:{couldNotListDevices:`Could not list devices:`,devices:`Devices`,declaredByThisScriptUnder:`Declared by this script under the shared Blocks integration (`,openDeviceDetail:`Open device detail`,loading:`Loading devices owned by this script…`,declaredBy:`Declared by this script under the shared Blocks integration (<code>{{addonId}}</code>). Open a device for its export section.`,noDevices:`No devices yet. Call <code>reconcileBlockDevices(ctx, …)</code> from the script (and Restart) to declare them.`},scriptSettingsPanel:{couldNotLoadSettings:`Could not load settings:`,settings:`Settings`,saveSettings:`Save settings`,loading:`Loading script settings…`,declaredBy:`Declared by this script's <code>settingsSchema</code> export.`,enableChannel:`Script enabled so the channel catalog can scrape.`,enableTv:`Script enabled so the TV schedule can send.`,enableNord:`Script enabled so the NordVPN catalog can refresh.`,enableItaly:`Script enabled so Italy stations can be probed.`,enableVpn:`Script enabled so the VPN endpoint can be tested.`,enableUnifi:`Script enabled so UniFi IDs can be fetched.`},scriptsTab:{name:`Name`,deleteThisScript:`Delete this script?`,restart:`Restart`,enableItInsteadADisabled:`Enable it instead — a disabled script has no process`,logs:`Logs`,couldNotReadTheScripts:`Could not read the scripts`,noScriptsYetAScript:`No scripts yet. A script is TypeScript the hub runs in its own process.`,loadingScripts:`Loading scripts…`,noScriptsYet:`No scripts yet.`,edit:`Edit {{name}}`,newScript:`New script`,deleteMessage:`{{name}} and its source will be deleted. This cannot be undone.`}},automation:{actionList:{noActionsYetAnAutomation:`No actions yet. An automation that does nothing is not an automation.`,step:`Step`,runThisStepEarlier:`Run this step earlier`,runThisStepLater:`Run this step later`,removeThisStep:`Remove this step`,seconds:`Seconds`,code:`Code`,stepsRunInOrderAnd:`Steps run in order and stop at the first failure.`,kindCap:`Do something`,kindWait:`Wait`,kindCode:`Run code`,codeHint:`Compiled into this automation's own block by the same compiler as a script — not evaluated at run time. <code>ctx</code> and <code>vars</code> are in scope.`,addStep:`Step`},automationEditor:{runsOnTheHub:`runs on the hub`,name:`Name`,whatThisAutomationDoes:`What this automation does`,when:`When`,anyOneOfTheseStarts:`Any one of these starts a run.`,andOnlyIf:`And only if`,checkedAfterATriggerFires:`Checked after a trigger fires. Nothing runs unless this is true.`,then:`Then`,inThisOrderStoppingAt:`In this order, stopping at the first failure.`,logsAppearOnceTheAutomation:`Logs appear once the automation has been saved and started`,showThisAutomationSProcess:`Show this automation's process logs`,nameRequired:`Name required`},automationList:{deleteThisAutomation:`Delete this automation?`,thisBlockCannotBeOpened:`This block cannot be opened visually`,runActions:`Run actions`,runningAnAutomationByHand:`Running an automation by hand needs the automation-control authority, which is not wired up yet. There is deliberately no second way to execute one.`,logs:`Logs`,noAutomationsYet:`No automations yet.`,anAutomationIsATrigger:`An automation is a trigger, a set of conditions and a list of actions. It compiles to an ordinary block and runs in its own supervised process — there is no separate engine, so anything that goes wrong shows up here with a reason.`,newAutomation:`New automation`,deleteMessage:`{{name}} will be deleted. This cannot be undone.`},conditionRow:{comparison:`Comparison`,value:`Value`},conditionTree:{andOnlyIf:`And only if`,noConditionsTheActionsRun:`No conditions. The actions run every time a trigger fires.`,compareOneDeviceFieldTo:`Compare one device field to a value`,arithmeticAcrossDeviceFieldsThe:`Arithmetic across device fields — the bounded expression engine`,allSelectedRowsMustBe:`All selected rows must be true`,groupAsAll:`Group as ALL`,anyOneOfTheSelected:`Any one of the selected rows is enough`,groupAsAny:`Group as ANY`,invertTheSelectedRow:`Invert the selected row`,selectThisRowForGrouping:`Select this row for grouping`,dissolveThisGroupKeepingIts:`Dissolve this group, keeping its rows`,deleteThisGroupAndEverything:`Delete this group and everything in it`,removeTheNotKeepingThe:`Remove the NOT, keeping the row`,removeThisCondition:`Remove this condition`,allOf:`ALL of`,anyOf:`ANY of`,addCondition:`Condition`,addExpression:`Expression`,ungroup:`Ungroup`,removeNot:`Remove NOT`,budget:`depth {{depth}}/{{depthLimit}} · {{leaves}}/{{leafLimit}} conditions`,selectOneNegate:`select exactly one row to negate`},expressionLeafRow:{expression:`Expression`,indoorOutdoor5:`indoor - outdoor > 5`,mustEvaluateToTrueOr:`Must evaluate to true or false. Every name in it has to be bound below — an unbound name is refused when the automation is saved, not when it runs.`,noNamesBoundYetAn:`No names bound yet. An expression reads devices only through these.`,name:`Name`,reads:`Reads`,aDeviceField:`A device field`,aConstant:`A constant`,constant:`Constant`,removeThisName:`Remove this name`,aliasExample:`indoor`},fieldPicker:{device:`Device`,selectADevice:`Select a device…`,capability:`Capability`,field:`Field`,noReadableFields:`No readable fields`,selectAField:`Select a field…`,pickDeviceFirst:`Pick a device first`,readingDevice:`Reading this device…`,noReadableCaps:`This device reports no readable capabilities`,selectCap:`Select a capability…`},generatedCodePanel:{ejectToCodeThisCannot:`Eject to code — this cannot be undone`,theRecipeIsRemovedFrom:`The recipe is removed from the block and it becomes an ordinary script. The visual editor will no longer open it, and there is no way back to it except authoring a new automation from scratch. The code itself is kept exactly as it is now.`,ejectToCode:`Eject to code`,keepItVisual:`Keep it visual`,generatedCode:`Generated code`,derivedFromTheRecipeAbove:`Derived from the recipe above — regenerated on every save, never edited here.`,takePermanentOwnershipOfThis:`Take permanent ownership of this code as a script`,saveTheAutomationFirstThere:`Save the automation first — there is no stored block to eject yet`,theRecipeIsNotComplete:`The recipe is not complete enough to generate a block yet.`,eject:`Eject to code`},triggerEditor:{noTriggersYetWithoutOne:`No triggers yet. Without one nothing can ever start this automation — not even "Run actions", which needs a manual trigger to have somewhere to arrive.`,addAnotherWayThisAutomation:`Add another way this automation can start`,when:`When`,orWhen:`or when`,trigger:`Trigger`,removeThisTrigger:`Remove this trigger`,cronExpression:`Cron expression`,runActions:`Run actions`,becomes:`Becomes`,anyChange:`any change`,onlyOnAChange:`only on a change`,heldForS:`Held for (s)`,debounceS:`Debounce (s)`,eventCategory:`Event category`,selectAnEvent:`Select an event…`,fromDevice:`From device`,anyDevice:`Any device`,cronHint:`Six fields, seconds first. <code>0 30 23 * * *</code> is every night at 23:30.`,manualHint:`Runs only when someone presses <b>Run actions</b>. The conditions are still evaluated — a manual run is a run, not an override.`},valueInput:{oneTwoThree:`one, two, three`},editor:{listUnreadable:`Its recipe cannot be read ({{reason}}), so it cannot be opened visually. The code is intact and still running — edit it as a script.`}},accessDenied:{accessDenied:`Access Denied`,youDonTHavePermission:`You don't have permission to access this page.`,goToDevices:`Go to Devices`},changePassword:{camstackAdmin:`CamStack Admin`,setANewPassword:`Set a new password`,youMustRotateTheSeed:`You must rotate the seed password before continuing.`,chooseANewPasswordFor:`Choose a new password for your account.`,newPassword:`New password`,confirmNewPassword:`Confirm new password`,saving:`Saving…`,saveAndContinue:`Save and continue`,signOutInstead:`Sign out instead`,currentPassword:`Current password`,enterCurrent:`Enter your current password`,errorWrongCurrent:`The current password is incorrect.`,errorSessionEnded:`Your session ended before the change was confirmed. Sign in again — try the new password first.`,errorConnectionLost:`The connection to the hub dropped before it confirmed the change. Sign in again — try the new password first.`},deviceDetail:{invalidDeviceId:`Invalid device id`,isNotANumber:`is not a number.`,backToIntegrations:`Back to Integrations`,deviceNotFound:`Device not found`,integrations:`Integrations`,openParentDevice:`Open parent device {{name}}`,disable:`Disable "{{name}}"?`,theDeviceWillStopProcessing:`The device will stop processing streams and events. You can re-enable it later.`,disableDevice:`Disable device`,enableDevice:`Enable device`,updating:`Updating…`,enabled:`Enabled`,disabled:`Disabled`,takeSnapshot:`Take snapshot`,fetchAFreshFrameAnd:`Fetch a fresh frame and download it.`,rebootDevice:`Reboot device`,cameraGoesOfflineFor30:`Camera goes offline for ~30 seconds.`,reboot:`Reboot "{{name}}"?`,theCameraWillGoOffline:`The camera will go offline for around 30 seconds while the firmware reboots.`,reboot2:`Reboot`,restartAddon:`Restart addon`,bouncesEveryDeviceServedBy:`Bounces every device served by {{servingAddonLabel}}.`,restart:`Restart "{{servingAddonLabel}}"?`,restartingTheAddonWillBriefly:`Restarting the addon will briefly disconnect every device served by it (not just "{{name}}"). Streams will reconnect automatically.`,restart2:`Restart`,deleteDevice:`Delete device`,removeTheDeviceAndAll:`Remove the device and all its settings.`,delete:`Delete "{{name}}"?`,thisWillRemoveTheDevice:`This will remove the device and all its settings. This action cannot be undone.`,dragToResize:`Drag to resize`,currentAudioLevelDbfs:`Current audio level (dBFS)`,repl:`REPL`,invalidSegment:`The URL segment <code>{{segment}}</code> is not a number.`,noDeviceWithId:`No device with ID <code>#{{id}}</code>`,loadingIntegration:`Loading integration…`,missingIntegration:`Missing integration`,noIntegration:`No integration`},devices:{orphanDevices:`Orphan devices`,theseDevicesReferenceAnIntegration:"These devices reference an integration that is no longer registered (their `integrationId`, or — for older devices without one — their `addonId`). Delete them, or re-install the missing integration to bring them back online. The provider badge beside each row is the addon that serves it."},embedPlayerPage:{embedConfigError:`Embed config error:`,failedToInitialiseTheEmbed:`Failed to initialise the embed player`},events:{feed:`Feed`,debug:`Debug`},eventsDebug:{noAnomalyFound:`no anomaly found`,analysing:`analysing…`,notAnalysed:`not analysed`,noMediaOfAnyKind:`no media of any kind`,allCameras:`All cameras`,selectAll:`Select all`,keep:`Keep`,analyzed:`Analyzed`,couldNotLoadTheMarked:`Could not load the marked tracks.`,aCameraFilledThePer:`A camera filled the per-camera cap — some marked tracks are not listed. Un-mark a few, or filter to one camera.`,noTrackIsMarkedFor:`No track is marked for debug`,markOneFromATrack:`Mark one from a track's actions on the Feed to see it here.`,reportCounts:`{{media}} media · {{events}} events · {{positions}} positions`,exportAll:`Export all ({{count}})`,debugMarkNote:`A <code>debug</code> mark does not pin retention — this lists the marked tracks that still exist. A track whose media was evicted shows as missing media. Use <strong>Keep</strong> to hold a selection against pruning while you investigate, and <strong>Analyzed</strong> to un-mark the ones you are finished with.`,vanished:`{{count}} marked track(s) were evicted between the list and the analysis.`,markedAnalyzed:`{{count}} track(s) marked analyzed and removed from this list.`,undo:`Undo`,cameraFallback:`Camera {{deviceId}}`},eventsDebugTapes:{trackingTapes:`Tracking tapes`,recordTheTrackHistory:`Record the track history`,loadingCameraStatus:`Loading camera status…`,camera:`Camera`,state:`State`,framesMin:`Frames/min`,lastHour:`Last hour`,held:`Held`,gaps:`Gaps`,segmentsUnknown:`{{value1}} (segments unknown)`,loadingPromotedTapes:`Loading promoted tapes…`,scenario:`Scenario`,window:`Window`,tracks:`Tracks`,review:`Review {{scenario}}`,review2:`Review`,download:`Download {{scenario}}`,release:`Release`,release2:`Release {{scenario}}?`,releasingReturnsThisTapeS:`Releasing returns this tape's pinned tracks to ordinary retention — they can be pruned from then on. The promoted bundle itself is kept until deleted.`,delete:`Delete {{scenario}}?`,deletingRemovesThePromotedBundle:`Deleting removes the promoted bundle and its index row for good. Its tracks' pins are released first — this cannot be undone.`,intro:`A camera records while its <b>Record the track history</b> switch (camera settings → Tracking) is on; segments are kept 24 h. Promote a window worth keeping, label it in the review, mark it reviewed, download it and turn it into a test case with <code>npm run tracking-bench -- case</code>.`,segsHeld:`{{count}} seg · {{size}}`,promoteWindow:`Promote window`,reviewed:`reviewed`,released:`released`,storedOf:`{{stored}}/{{total}} stored`,dayMode:`day`,reviewLanes:`{{id}} — {{count}} tracks`,laneFrames:`{{range}} · {{count}} frames`},eventsDebugTapesPromoteForm:{camera:`Camera`,from:`From`,to:`To`,scenario:`Scenario`,note:`Note`,optionalNote:`optional note`,lighting:`Lighting`,lightingAuto:`Lighting: auto`,aPromotedTapeMayBe:`A promoted tape may be shared as a test case — keep the scenario slug and note free of names or other personal data.`},eventsDebugTapesReview:{loadingTheTape:`Loading the tape…`,sameSubject:`Same subject`,differentSubjects:`Different subjects`,changedAtSFromTape:`Changed at (s from tape start)`,changedAtS:`changed at s`,mixed:`Mixed`,notASubject:`Not a subject`,markNotReviewed:`Mark not reviewed`,markReviewed:`Mark reviewed`,select:`select {{trackId}}`,notStoredMarkedThroughThe:`not stored — marked through the tape`},integrationDetail:{integrations:`Integrations`,scanTheNetworkForDevices:`Scan the network for devices (incl. a different subnet)`,scanNetwork:`Scan network`,disableIntegration:`Disable integration`,enableIntegration:`Enable integration`,enabled:`Enabled`,disabled:`Disabled`,restart:`Restart`,restart2:`Restart "{{name}}"?`,restartingTheAddonWillBriefly:`Restarting the addon will briefly disconnect every device backed by it ({{topLevelCountLabel}} active). Streams will reconnect automatically.`},library:{peopleVehiclesCapturedEventsAnd:`People, vehicles, captured events and scenes — what detection has recognised.`,people:`People`,vehicles:`Vehicles`,events:`Events`,scenes:`Scenes`},plates:{vehicles:`Vehicles`,enrolledVehicleIdentitiesUsedFor:`Enrolled vehicle identities used for plate recognition. Open a vehicle to rename it or remove plate samples.`,recentRecognizedPlates:`Recent recognized plates`,licensePlatesReadByThe:`License plates read by the detection pipeline. Assign them to a vehicle, correct the OCR text, or delete.`},scenes:{scene:`Scene`,camera:`Camera`,state:`State`,whatItSays:`What it says`,variants:`Variants`,lastChange:`Last change`,open:`Open`,aSceneWatchesOneRegion:`A scene watches one region of one camera and tells you when it stops looking like the picture you captured — a wheelie bin, a gate, a parking space.`,newScene:`New scene`,loadingScenes:`Loading scenes…`,nothingMatchesTheFilter:`Nothing matches the filter`,noScenesYetPressNew:`No scenes yet. Press “New scene”, pick a camera, then draw a box around the thing you want watched.`,whichCamera:`Which camera?`,continue:`Continue`,aSceneLivesOnOne:`A scene lives on one camera. Pick the one that can see the thing.`,scenes:`Scenes — {{editingName}}`,drawABoxNameIt:`Draw a box, name it, then capture what “normal” looks like. Daylight is enough — the night reference is optional, and “Settings” on each scene tunes how fussy and how often it checks.`,loadingTheEditor:`Loading the editor…`,unreachable_one:`{{count}} camera could not be asked about scenes. Those cameras are missing from this list — this is not the same as having no scenes.`,unreachable_other:`{{count}} cameras could not be asked about scenes. Those cameras are missing from this list — this is not the same as having no scenes.`,transitionAgo:`{{duration}} ago`},ssoComplete:{nothingToFinishHereGo:`Nothing to finish here — go to sign-in`,closeThisWindow:`Close this window`,finishingSignIn:`Finishing sign-in…`},oauthLanding:{brand:`CamStack`,errorTitle:`Sign-in did not finish`,successTitle:`Signed in`,successBody:`The account is connected. Returning to CamStack…`,signedOutTitle:`Signed out`,signedOutBody:`The account was disconnected from this hub.`,back:`Back to CamStack`,close:`Close this window`,reason:{access_denied:`Access was denied, so nothing was connected.`,invalid_state:`This sign-in link expired or was already used. Start the sign-in again.`,invalid_request:`The request was not valid for this hub. Start the link again from the beginning.`,unknown_broker:`That connection no longer exists. Add it again, then sign in.`,not_configured:`The connection is missing its client ID or secret. Fill them in, save, then sign in.`,exchange_failed:`The provider did not accept the sign-in. Check the client ID and secret, then try again.`,no_refresh_token:`The provider returned no long-lived access. Remove CamStack from the account’s connected apps, then sign in again.`,unavailable:`The hub is still starting this integration. Wait a moment and try again.`,unknown:`Something went wrong. Try again in a moment.`}},admin:{system:{integrations:{connectivity:`Connectivity`,externalSystemsThisHubTalks:`External systems this hub talks to — exporters, email, brokers and calendar sources.`,devices:`Devices`,connections:`Connections`,exposed:`{{linkState}} · {{exposedDeviceCount}} exposed`},logs:{viewer:`Viewer`,destinations:`Destinations`,levels:`Levels`,diagnostics:`Diagnostics`},secrets:{revealRefused:`Reveal refused`,secrets:`Secrets`,passwordsTokensAndKeysEncrypted:`Passwords, tokens and keys, encrypted in the hub keychain. Values leave the hub only through an audited reveal.`,storedValues:`Stored values`,audit:`Audit`},settings:{loadingHubTopology:`Loading hub topology…`,noOnlineHubNodeFound:`No online hub node found.`,settingsWillAppearOnceThe:`Settings will appear once the hub is reachable.`,noAddonsInstalledOnThe:`No addons installed on the hub yet.`},users:{deleteUser:`Delete user`,permanentlyDeleteUserThisCannot:`Permanently delete user "{{username}}"? This cannot be undone — any active sessions will be revoked on next request.`,resetPassword:`Reset password`,setANewPasswordFor:`Set a new password for "{{username}}".`,newPassword:`New password`,atLeast8Characters:`At least 8 characters`,continue:`Continue`,resetThePasswordForThey:`Reset the password for "{{username}}"? They will need to use the new password on their next login.`,username:`Username`,admin:`Admin`,access:`Access`,configureAccess:`Configure access`,created:`Created`,actions:`Actions`,editUser:`Edit user`,removeTwoFactorAuthentication:`Remove two-factor authentication`,remove2fa:`Remove 2FA`,linkedSignInAccounts:`Linked sign-in accounts`,signInLinks:`Sign-in links`,activeSessions:`Active sessions`,sessions:`Sessions`,users:`Users`,hubAccountsAdminFlagAccess:`Hub accounts, admin flag, access scopes, sessions and sign-in links.`,createUser:`Create User`,couldNotLoadUsers:`Could not load users`,noUsersYet:`No users yet`,createAUserToGrant:`Create a user to grant hub access.`,edit:`Edit {{value1}}`,create:`Create`,saving:`Saving…`,password:`Password`,atLeastCharacters:`At least {{value1}} characters.`,unrestrictedAccessToEveryCapability:`Unrestricted access to every capability and device.`,toChangeThePasswordUse:`To change the password, use Reset password on the user's row. Access scopes are configured from the Access column.`,noAccess:`No access`,genericError:`Something went wrong`,passwordTooShort:`Password must be at least {{min}} characters.`},addons:{sort:`Sort:`,bundlesFirst:`Bundles first`,name:`Name`,installSource:`Install source`,view:`View:`,groupMultiAddonPackagesInto:`Group multi-addon packages into a bundle card`,showEveryAddonAsIts:`Show every addon as its own card`,autoUpdate:`Auto-Update:`,checkEvery:`Check every:`,updating:`Updating…`,updateAll:`Update All ({{nonSystemUpdateCount}})`,filterInstalledAddons:`Filter installed addons`,filter:`Filter:`,inError:`In error ({{count}})`,updatable:`Updatable`,dev:`Dev`,searchAddonsOnNpm:`Search addons on npm...`,searchAddonsOnNpm2:`Search addons on npm`,filteringByCapability:`Filtering by capability:`,clear:`Clear`,installed:`Installed`,bulkUpdateCompleted:`Bulk update completed`,systemPackagesUpdatedHubRestarted:`System packages updated — hub restarted successfully.`,noAddonsInstalled:`No addons installed`,noInstalledAddonDeclaresThe:`No installed addon declares the "{{capabilityFilter}}" capability. Any addon you can install appears under "Available to install" above.`,noAddonsCompatibleWithPlacement:`No addons compatible with {{name}} (placement filter active)`,reFetchAddonsCheckNpm:`Re-fetch addons + check npm for new versions`,checkForUpdates:`Check for updates`,failedToLoadAddons:`Failed to load addons`,loadingInstalled:`Loading installed addons…`}}},systemPage:{myAccess:{notSignedIn:`Not signed in.`,subtitle:`Your account, how you sign in, where you are signed in, and your tokens.`,sectionsLabel:`My access sections`,sections:{profile:`Profile`,signIn:`Sign-in & security`,sessions:`Sessions & devices`,tokens:`Tokens`},administrator:`Administrator`,user:`User`,unrestrictedAccess:`Unrestricted access`,adminSessionsBypassThePer:`Admin sessions bypass the per-call scope check. Every protected endpoint is reachable regardless of the list below.`,grantedScopes:`Granted scopes`,bakedIntoYourSessionToken:`Baked into your session token at login; sign out + back in to refresh after changes.`,type:`Type`,target:`Target`,access:`Access`,can:`Can {{a}}`,cannot:`Cannot {{a}}`,signOut:`Sign out`,changePassword:`Change password`,currentPassword:`Current password`,newPassword:`New password`,atLeast8Characters:`At least 8 characters.`,confirmNewPassword:`Confirm new password`,passwordsDoNotMatch:`Passwords do not match.`,newPasswordMustBeAt:`New password must be at least 8 characters.`,updatePassword:`Update password`,twoFactorAuthentication:`Two-factor authentication`,checkingStatus:`Checking status…`,"2faIsnTActiveOn":`2FA isn't active on your account. Enable it to require a 6-digit code from your authenticator app at every login.`,enable2fa:`Enable 2FA`,secretManualEntry:`Secret (manual entry)`,copied:`Copied`,"2faIsActive":`2FA is active`,disable2fa:`Disable 2FA`,sessionId:`· session id <mono>{{id}}…</mono>`,scanQr:`Scan the QR code (or enter the secret manually) into your authenticator app for <mono>{{username}}</mono>, then enter the 6-digit code below to confirm.`},identity:{pairADevice:`Pair a device`,users:`Users`,tokensSessions:`Tokens & sessions`,certificates:`Certificates`,authentication:`Authentication`},network:{localAccess:`Local access`,networkAddresses:`Network Addresses`,remoteAccess:`Remote Access`,meshNetworks:`Mesh Networks`,turnServers:`TURN Servers`,diagnostics:`Diagnostics`},data:{storage:`Storage`,records:`Records`,backup:`Backup`,viewKinds:`Record kinds`,viewDeletedDevices:`Deleted devices`,recordsUnifiedIntro:`Every declared record kind on this hub. Entry kinds can be added, edited and deleted; the rest are read-only. Secret fields are redacted.`},notifications:{settings:`Settings`,settingsHint:`Alert storage and retention. Alerts are notified only through notification rules on the alert kinds.`,newRule:`New rule`,addTarget:`Add target`,newSequence:`New sequence`,targets:`Targets`,rules:`Rules`,sequences:`Sequences`,simulate:`Simulate`,history:`History`,alarm:`Alarm`,texts:`Texts`},calendars:{when:`When`,calendar:`Calendar`,location:`Location`,description:`Description`,month:`Month`,week:`Week`,day:`Day`,calendarView:`Calendar view`,calendars:`Calendars`,show:`Show {{name}}`,colourFor:`Colour for {{name}}`,noEventsOnThisDay:`No events on this day.`,loadingCalendars:`Loading calendars…`,couldNotListCalendars:`Could not list calendars:`,openConnectivityCalendars:`Open Connectivity → Calendars`,toInstallOrConnectA:`to install or connect a source (Google Calendar, waste collections, Home Assistant, …).`,allCalendarsAreHiddenTurn:`All calendars are hidden. Turn one on in the legend to see events.`,previous:`Previous`,today:`Today`,loadingEvents:`Loading events…`,couldNotListEvents:`Could not list events:`,calendarsFromConnectedSourcesUsed:`Calendars from connected sources. Used by Calendar events notification rules.`,unavailableAtSource:`unavailable at source`,emptySources:`No calendar sources yet. <link>Open Connectivity → Calendars</link> to install or connect a source (Google Calendar, waste collections, Home Assistant, …).`,allDay:`All day`,dayAllDay:`{{date}} · All day`,rangeAllDay:`{{from}} – {{to}} · All day`},terminal:{executable:`Executable`,workingDirectory:`Working directory`,argumentsOnePerLine:`Arguments (one per line)`,environmentNameValueOnePer:`Environment NAME=value (one per line)`,terminal:`Terminal`,openLiveSessionsOrExplicitly:`Open live sessions or explicitly create Terminal camera instances from available profiles.`,terminalConfiguration:`Terminal configuration`,thisNodeOffersNoTerminal:`This node offers no terminal profile. Enable BTM, Top or Glances below, or add a custom profile.`,couldnTLoadProfiles:`Couldn't load profiles`,theTerminalSessionCapabilityMay:`The terminal-session capability may be disabled or unconfigured.`,availableTerminalProfile:`Available terminal profile`,noProfilesAvailable:`No profiles available`,openSession:`Open session`,terminalName:`Terminal name`,optionalCameraName:`Optional camera name`,createTerminalCamera:`Create Terminal camera`,terminalInstances:`Terminal instances`,onlyTheseExplicitInstancesDeclare:`Only these explicit instances declare cameras. Closing a live session does not delete an instance.`,noTerminalCamerasHaveBeen:`No Terminal cameras have been created.`,deleteTerminal:`Delete Terminal`,name:`Name`,saveAndRestart:`Save and restart`,legacyAutomaticCameras:`Legacy automatic cameras`,theseCamerasPredateExplicitTerminal:`These cameras predate explicit Terminal instances. They are intentionally untouched: confirm each migration before deleting one. Only BTM cameras can retain their legacy identity by being adopted below; create new instances for Top or Glances first.`,adoptBtm:`Adopt BTM`,liveSessions:`Live sessions`,noSessionsRunningOpenOne:`No sessions running. Open one above to begin.`,attached:`Attached`,attach:`Attach`},deletedDevices:{intro:`Data that still belongs to devices that were deleted before deletions were recorded: footage, events, history and per-addon settings. Scanning deletes nothing; deleting asks first and shows what goes.`,scan:`Scan`,delete:`Delete the data of {{count}} devices…`,confirmTitle:`Delete the data of deleted devices?`,confirmLabel:`Delete`,device:`Device`,stores:`Data held`,none:`No data belongs to a deleted device.`,skipped:`Nothing was listed or deleted: the device list could not be trusted ({{reason}}). Try again.`,cleaned:`Deleted {{rows}} items of {{count}} devices.`,found:`{{count}} deleted devices still hold {{rows}} items.`,unreachable:`Not asked (unreachable): {{names}}`},addons:{updateFailed:`Failed to update {{name}}`,npmResults:`npm results ({{count}})`,installedCount:`{{count}} installed`},meshNetworks:{loadingPeers:`Loading peers…`}},certificates:{caStrip:{localHttpsCaSha256:`Local HTTPS CA (SHA-256)`,downloadCa:`Download CA`,clusterCaSha256:`Cluster CA (SHA-256)`,clusterCaValidUntil:`Cluster CA valid until`,nodeListener:`Node listener`,open:`Open`,notStarted:`Not started`,theCertificateRegistryIsNot:`The certificate registry is not up, so the node list below is incomplete.`,unavailable:`Unavailable - {{reason}}`,closedSince:`Closed since {{when}} - every node is refused.`},deviceCaCard:{deviceCertificateAuthority:`Device certificate authority`,signsTheCertificateEachPaired:`Signs the certificate each paired device holds. It is created the first time a device is paired.`,state:`State`,ready:`Ready`,notCreatedYet:`Not created yet`,unavailable:`Unavailable`,subject:`Subject`,fingerprintSha256:`Fingerprint (SHA-256)`,validUntil:`Valid until`,reason:`Reason`},deviceSettingsRow:{usersCanEnrollTheirOwn:`Users can enroll their own devices`,allowedAUserSignedIn:`Allowed - a user signed in on a phone can keep it signed in. Pairing by QR works either way.`,disabledOnlyAnAdminCan:`Disabled - only an admin can pair a device, with a QR code.`},devicesCard:{revoke:`Revoke "{{name}}"?`,sDeviceStopsSigningIn:`{{ownerName}}'s device stops signing in at once and its open sessions end. To use it again it has to be paired anew. This cannot be undone.`,revoke2:`Revoke`,delete:`Delete "{{name}}"?`,isRemovedFromTheList:`{{name}} is removed from the list. The audit trail keeps the revocation.`,renameDevice:`Rename device`,deviceName:`Device name`,rename:`Rename`,devices:`Devices`,phonesThatStaySignedIn:`Phones that stay signed in with a certificate instead of a login. Revoking one signs it out at once; it has to be paired again.`,label:`devices`},myDevicesSection:{revoke:`Revoke "{{name}}"?`,theDeviceStopsSigningIn:`The device stops signing in at once and its open sessions end. To use it again you have to pair it anew. This cannot be undone.`,revoke2:`Revoke`,myDevices:`My devices`,phonesThatStaySignedIn:`Phones that stay signed in to your account with a certificate. If one is lost, revoke it here and it is signed out at once.`},nodesCard:{newCertificateIssuedRestartThe:`{{nodeId}}: new certificate issued. Restart the node to serve it.`,newCertificateIssuedAndServed:`{{nodeId}}: new certificate issued and served.`,renewHttpsOn:`Renew HTTPS on "{{nodeId}}"?`,aNewCertificateIsIssued:`A new certificate is issued from the local CA. Clients that trust the CA keep working.`,theNodeMakesANew:`The node makes a new key, the hub signs it and the node switches over without a restart. It keeps serving what it had if anything fails.`,renew:`Renew`,revokeTheIdentityOf:`Revoke the identity of "{{nodeId}}"?`,isDisconnectedAtOnceAnd:`{{nodeId}} is disconnected at once and can no longer connect. To bring it back it must be paired again from System → Cluster → Agents. It stays in the node list until you forget it on the Cluster page. This cannot be undone.`,revokeAndDisconnect:`Revoke and disconnect`,nodes:`Nodes`,eachNodeHoldsTwoCertificates:`Each node holds two certificates: one it serves over HTTPS, one that proves its identity to the hub. Renewing replaces a certificate without a gap; revoking an identity cuts the node off until it re-joins.`,noNodesReported:`No nodes reported.`,theCertificateRegistryIsNot:`The certificate registry is not available yet, so nodes cannot be listed.`},pairDeviceDialog:{pairADevice:`Pair a device`,createPairingCode:`Create pairing code`,done:`Done`,createsAOneTimeCode:`Creates a one-time code for a phone you hold. Scan it with the CamStack app on that phone; the phone then stays signed in as the chosen user until you revoke it.`,user:`User`,deviceName:`Device name`,howThisPhoneIsListed:`How this phone is listed, e.g. Anna's iPhone.`,annaSIphone:`Anna's iPhone`,enrollmentQrCode:`Enrollment QR code`,openTheCamstackAppOn:`Open the CamStack app on the phone and scan this code. It works once.`,expiredCreateANewCode:`Expired - create a new code`,expiresIn:`Expires in {{label}}`,theHubCouldNotName:`The hub could not name an address for this link, so the app must already know it.`,newCode:`New code`},queryBody:{couldNotRead:`Could not read {{what}}`,requestFailed:`Request failed`,reading:`Reading {{what}}…`},nodesColumns:{served:`Served`,unreadable:`Unreadable`,notServed:`Not served`,noneRecorded:`None recorded`,offline:`Offline`,noPresentsAnother:`No - presents another`,managedByTheHub:`Managed by the hub`,renewHttps:`Renew HTTPS`,renewTheCertificateOn:`Renew the certificate on {{nodeId}}`,renewing:`Renewing…`,renewIdentity:`Renew identity`,renewTheClusterCertificateOf:`Renew the cluster certificate of {{nodeId}}`,revokeIdentity:`Revoke identity`,revokeTheClusterCertificateOf:`Revoke the cluster certificate of {{nodeId}}`,node:`Node`,httpsExpires:`HTTPS expires`,identity:`Identity`,identityExpires:`Identity expires`,inUse:`In use`,actions:`Actions`,earlier:`{{count}} earlier`}},serverName:{title:`Name this server`,description:`Pick a name for this hub. It shows in the admin UI and on the apps’ sign-in screen. You can change it later in System settings.`,label:`Server name`,later:`Later`,invalid:`Not a valid name`},capabilityBadges:{streaming:`Streaming`,detection:`Detection`,recording:`Recording`,audio:`Audio`,snapshot:`Snapshot`,motion:`Motion`,ptz:`PTZ`,webrtc:`WebRTC`,onvif:`ONVIF`,analytics:`Analytics`,battery:`Battery`,nativeSnapshot:`Native Snapshot`,twoWayAudio:`Two-way Audio`,doorbell:`Doorbell`,rebootable:`Rebootable`,map:`Map`,aiObstacle:`AI Obstacle`,targetedMowing:`Targeted Mowing`},terminal:{panel:{exited:`Session exited with code {{code}}.`,exitedSignal:`Session exited with code {{code}} (signal {{signal}}).`}},terminalPage:{profilesNote:`Which profiles exist on <mono>{{node}}</mono>, their binaries and their arguments. Every setting is per node.`},deviceQuickDetail:{discard:`Discard`,historyUnknown:`Could not tell whether this device has recorded history.`,leaveMessage:`Unsaved edits on this device will be discarded.`,leaveTitle:`Discard unsaved changes?`,nameRequired:`Name is required`,openFull:`Open full detail`,openHistory:`Open full history`,save:`Save`,saving:`Saving…`,tabDisplay:`Display`,tabExport:`Export`,tabHistory:`History`,tabInfo:`Device info`},nodes:{general:{nodeColour:`Node colour`,nodeColourGroup:`Node colour`,reachableHost:`Reachable host`}},serverManagement:{bootBaked:`baked image seed`,bootDataRoot:`runtime-updatable`,bootWorkspace:`dev workspace`,checkForUpdate:`Check for update`,confirmRestartAction:`Restart`,confirmRestartBody:`Restart "{{node}}"? In-flight requests to this node are dropped.`,confirmRestartTitle:`Restart node`,confirmUpdateAction:`Update & restart`,confirmUpdateAllAction:`Update all & restart`,confirmUpdateAllBody:`Update and restart every online node, agents first, hub last. Up-to-date nodes are skipped; this page reconnects when the hub comes back.`,confirmUpdateAllTitle:`Update all nodes`,confirmUpdateBody:`Install {{pkg}}@{{version}} on "{{node}}" and restart to apply.`,confirmUpdateTitle:`Update node root package`,imageContractDiverged:`Container image diverges from the deployment contract`,imageSeedShort:`Seed`,installedVersion:`Installed on disk (runs after restart)`,lastChecked:`Last checked: {{when}}`,lastReportedVersion:`Last reported version`,latestVersionShort:`Latest`,loadError:`Could not load the node root-package status.`,nodeRestarting:`The node is restarting to apply the change…`,nodeRuntimeVersionShort:`Node.js`,outcomeDropped:`The connection dropped and the result could not be confirmed. The node may be restarting — re-check the version above.`,outcomeNoTarget:`No target version is known for this node — run "Check for update" first.`,pendingVersion:`Staged (applies on restart)`,restart:`Restart`,runningVersionShort:`Running`,stateChecking:`checking…`,statePending:`restart pending`,stateRestartRequired:`restart required`,stateStaging:`updating…`,stateUpToDate:`up to date`,stateUpdateAvailable:`update available`,updateAll:`Update all nodes`,updateAllHint:`Sequenced agents-first, hub-last — up-to-date nodes are skipped.`,updateTo:`Update to {{version}}`,workspaceNote:`Development workspace detected — runtime updates are disabled (the dev loop resolves code from the workspace).`},uiLibrary:JSON.parse(`{"accountSignIn":{"again":"Sign in again","choose":"Choose","noLink":"The sign-in page could not be opened. Try again.","open":"Open the sign-in page","paste":"Redirect address or code","rejected":"The sign-in was not accepted. Start again.","signInWith":"Sign in with {{provider}}","signOut":"Sign out","signedIn":"Signed in as {{account}}","signedInCount":"Signed in as {{account}} · {{detail}}","working":"Working…","yourAccount":"your account"},"runningBadge":{"running":"Running","idle":"Idle"},"runningStatus":{"unknown":"Unknown","idle":"Idle","running":"Running","runningForMinutes":"Running for {{count}} min","runningForHours":"Running for {{count}} h","withPhase":"{{state}} · {{phase}}"},"recordEntries":{"add":"Add","addTitle":"Add entry","colName":"Name","colUpdated":"Updated","deleteConfirm":"Delete","deleteDescription":"Remove \\"{{name}}\\" permanently?","deleteTitle":"Delete entry","editTitle":"Edit entry","emptyDescription":"Add the first row for this kind.","emptyTitle":"No entries yet","loadFailed":"Could not load entries","save":"Save","saveFailed":"Save failed","saveUnavailable":"Nothing to save","jsonObject":"JSON object"},"storageRecords":{"colAt":"At","colDevice":"Device","colId":"Id","colUpdated":"Updated","emptyDescription":"No rows match the current filter.","emptyTitle":"No rows","entryKind":"Entry","inspectTitle":"Record","loadFailed":"Could not load records"},"eventStream":{"kindStarted":"Started","kindInstalled":"Installed","kindRestarted":"Restarted","kindUpdated":"Updated","kindStopped":"Stopped","kindUninstalled":"Uninstalled","kindCrashed":"Crashed","kindError":"Error","kindPhase":"Phase","kindDetection":"Detection","kindEvent":"Event","kindCameraAi":"Camera AI","kindMotion":"Motion","kindMotionAnalysis":"Motion analysis","kindMotionZones":"Motion zones","kindProviderDet":"Provider Det","kindAudio":"Audio","kindAgentOnline":"Agent Online","kindAgentOffline":"Agent Offline","kindRegistered":"Registered","kindUnregistered":"Unregistered","kindState":"State","title":"Events","auto":"Auto","paused":"Paused","pickEvents":"Pick events to track","filter":"Filter ({{label}})","resetTitle":"Reset filters to defaults","reset":"Reset","clearTitle":"Clear visible entries","clear":"Clear","copyAllTitle":"Copy all visible events","copied":"Copied!","copy":"Copy","search":"Search…","clearSearch":"Clear search","loading":"Loading events...","empty":"No events found","filterCategories":"Filter categories…","all":"All","none":"None","defaults":"Defaults","noMatches":"No matches","copyOne":"Copy this event","live":"+{{count}} live","summary":{"sessionBySensor":"Detection session started by {{who}} motion — phase active","sessionStarted":"Detection session started — phase active","sensorFallback":"sensor #{{id}}","sessionEnded":"Detection session ended — phase watching","motionActive":"Motion detected — phase active{{suffix}}","cooldownExpired":"Cooldown expired — phase watching{{suffix}}","phaseChange":"Phase: {{from}} → {{to}}{{suffix}}","cooldown":"{{source}}, {{seconds}}s cooldown","motionStart":"motion start","motionStop":"motion stop"}},"appShell":{"openMenu":"Open menu"},"audioWaveform":{"summary":"{{duration}}s · {{rate}}kHz · {{samples}} samples"},"eventHeatmap":{"bucketTitle":"{{time}} · motion {{motion}} · object {{object}}","title":"Event density","kind":{"motion":"motion","object":"object","audio":"audio"}},"codeBlock":{"copy":"Copy code"},"detectionCanvas":{"noImage":"No image loaded"},"containerPrimaryHero":{"empty":"No child entities to display."},"thermostatHeroCard":{"mode":"Mode","setTo":"set {{value}}°"},"deviceBatchActionsBar":{"actions":"Actions · {{count}}"},"multiSelect":{"clear":"Clear selection"},"selectedChip":{"remove":"Remove {{label}}"},"errorBox":{"retry":"Retry"},"nodePicker":{"offline":"{{name}} (offline)"},"qrCode":{"alt":"QR code"},"streamBrokerSelector":{"auto":"Auto (best available)","preferred":"Preferred stream","loading":"Loading available streams…","loadFailed":"Could not load streams — only Auto available.","noneEnabled":"No enabled streams found — only Auto available."},"confirmDialog":{"cancel":"Cancel","ok":"OK","confirm":"Confirm"},"fanPanel":{"speed":"Fan speed","preset":"Fan preset"},"switchHeroCard":{"on":"On","off":"Off"},"tapToggle":{"turnOff":"Turn off","turnOn":"Turn on"},"deviceQuickDetail":{"label":"Quick detail"},"optionSelect":{"noMatches":"No matches for “{{query}}”","use":"Use “{{value}}”"},"responseLog":{"kb":"{{size}} KB","bytes":"{{count}} bytes"},"stepInspector":{"saving":"Saving…","unsaved_one":"{{count}} unsaved change","unsaved_other":"{{count}} unsaved changes","saved":"Saved","saveFailed":"Save failed","noChanges":"No unsaved changes","discard":"Discard","save":"Save"},"dialog":{"close":"Close"},"trainingBaseModelPicker":{"selectAll":"Select all roots","selectRoot":"Select cluster root","clear":"Clear"},"deviceStepMatrix":{"node":"Node","step":"Step"},"detectionResultTree":{"none":"No detections","title":"Detections ({{count}})","alternates_one":"Alternates ({{count}} source)","alternates_other":"Alternates ({{count}} sources)"},"audioClassificationList":{"processing":"Classifying audio...","empty":"No classifications yet","title":"Audio Classifications","showing":"showing {{shown}} of {{total}}"},"coverInline":{"open":"Open","stop":"Stop","close":"Close"},"deviceItem":{"select":"Select {{name}}"},"agentStepEditor":{"clusterHint":"Admission knobs for this step live in Pipeline → Cluster → Settings → Enrichment models. They apply to every camera — a per-device copy would fill the shared index from two policies.","rootSupplied":"<0>Model: {{name}}</0> (the root model). This step's own model{{stepModel}} is kept and runs again whenever the root model cannot supply the step.","model":"Model"},"addonGlobalSettings":{"loading":"Loading {{name}}…","unavailable":"{{name}} not available on {{node}}.","override":"Benchmark override — applies to this run only. The addon's saved settings are not changed.","saving":"Saving…"},"consumablesPanel":{"days_one":"{{count}} day","days_other":"{{count}} days","hours_one":"{{count}} hour","hours_other":"{{count}} hours","cycles_one":"{{count}} cycle","cycles_other":"{{count}} cycles","replaced":"Replaced","replace":"Replace","ok":"OK","replacedOn":"Replaced {{date}}","title":"Consumables","empty":"No consumables reported.","loading":"Reading consumables…","allOk":"All OK","okAndUnknown":"{{ok}} OK · {{unknown}} unknown","noneReported":"None reported","needAttention_one":"{{count}} needs attention","needAttention_other":"{{count}} need attention","refillSoon":"Refill soon","refillNow":"Refill now"},"maskShapeCanvas":{"hintLine":"Click to set the start point, click again to complete the line","hintRect":"Click to drop a rectangle, then drag the corner to resize","hintGrid":"Click to add the grid, then paint cells","hintPoints":"Click to add points (min 3). Double-click or click the first point to close.","hintMore":"Continue adding points. Double-click or click the first point to close."},"buttonControl":{"press":"Press","pressButton":"Press button"},"lockPanel":{"unlock":"Unlock","lock":"Lock","openDoorTitle":"Open door?","unlockTitle":"Unlock device?","openDoorBody":"This will release the latch and open the door.","unlockBody":"This will unlock the device.","confirmOpen":"Confirm open","confirmUnlock":"Confirm unlock","jammed":"Jammed","openDoor":"Open door","open":"Open","cancel":"Cancel"},"deviceItemActions":{"awaiting":"Awaiting state…","motionOn":"Motion-trigger: on (click to disable)","motionOff":"Motion-trigger: off (click to enable)","ptz":"PTZ controls"},"deviceTable":{"name":"Name","type":"Type","hardware":"Hardware","features":"Features","preview":"Preview"},"loginForm":{"logo":"Logo","username":"Username","password":"Password","failed":"Login failed. Please try again.","submitting":"Logging in...","submit":"Log in"},"sensorHeroCard":{"occupied":"Occupied","clear":"Clear","awaiting":"Awaiting state…"},"filterChips":{"type":"Type","clearFilters":"Clear filters","integrationCount":"Integration · {{count}}","integration":"Integration","clearSelection":"Clear selection"},"layeredSettings":{"modelDefault":"model default","default":"default","forModel":" (for {{model}})","pinnedHint":"Stored by an older editor as a copy of the value below. It changes nothing today, but it stops later changes below from reaching this camera.","pinned":"pinned at the {{source}} value","resetTo":"Reset to {{target}}","title":"Settings","editing":"editing: {{target}}"},"homePresetPicker":{"label":"Home preset","notSet":"Not set — Home is refused","ownHome":"{{name}} (camera’s own home)","setHere":"Set home here","returnIdle":"Return home when idle","after":"After (s)"},"fanHeroCard":{"preset":"Preset","fanPreset":"Fan preset","oscillate":"Oscillate","on":"On","off":"Off"},"updateControl":{"updating":"Updating…","update":"Update","upToDate":"Up to date","installing":"Installing…","install":"Install update"},"batchToolbar":{"disable":"Disable","enable":"Enable","delete":"Delete","clear":"Clear","selectedCount":"{{count}} selected","deleteTitle":"Delete {{count}} devices?","deleteMessage":"{{count}} selected devices will be deleted. This cannot be undone."},"modelPicker":{"unresolved":"Current pin (<0>{{value}}</0>) is not offered for this device. The runtime tries it as a custom model and refuses it if it cannot serve it. Pick a replacement and Save.","useDefault":"Use default (<0>{{id}}</0>) — then Save","provider":"Provider","none":"No model is published for this engine format."},"controlPanel":{"decrement":"Decrement","numeric":"Numeric value","increment":"Increment","value":"Control value"},"inferenceConfig":{"agent":"Agent","runtime":"Runtime","unavailable":"{{label}} (unavailable)","backend":"Backend","model":"Model","noModels":"No compatible models"},"sceneReferenceGallery":{"empty":"No photographs captured yet. Press “Capture daylight” to take the one this scene will judge everything against.","deleteLabel":"Delete the {{variant}} photograph from {{date}}","delete":"Delete","lastWarning":"This is the only photograph this scene has. Delete it and the scene no longer knows what normal looks like — it stops judging until you capture again.","missingPicture":"The picture for this reference is no longer stored. The reference itself is intact and still being scored against.","noPicture":"no picture","deleteTitle":"Delete the only photograph?"},"pipelineMatrix":{"slotDetector":"detector","slotCropper":"cropper","slotClassifier":"classifier","slotRefiner":"refiner","slotAudioClassifier":"audio classifier","override":"override","ovr":"ovr","root":"root","cluster":"cluster","rootModelTitle":"Uses the root model {{model}} — this step's own model does not run here","clusterTitle":"One value for the whole cluster — this step writes into a shared vector index","runsOn":"runs on {{target}}","off":"off","autoJump":"no build for this device — auto-jumps to {{target}}","skipTitle":"Gated on for this camera, but no compatible model on this node — click to provision","skip":"⚠ skip"},"groupedModelSelector":{"family":"Family","size":"{{family}} — size","resolution":"Resolution","nativeTitle":"native (best accuracy)","fasterTitle":"{{size}}×{{size}} (faster)","variant":"Variant","formatsSize":"{{formats}} · ~{{size}} MB","sizeSuffix":" · ~{{size}} MB","native":"native","approxSize":"~{{size}} MB"},"retrainReviewBadge":{"added":"Added","removed":"Removed","reclassified":"Reclassified","adjusted":"Adjusted","unchanged":"Unchanged","modelError":"Model error","draft":"Draft","approximate":"{{label}} (approximate)"},"timelineControls":{"day":"Select recording day","earlierTitle":"Earlier (pan back)","earlier":"Pan earlier","laterTitle":"Later (pan forward)","later":"Pan later","zoomOut":"Zoom out","zoomIn":"Zoom in"},"autotrack":{"title":"Autotrack","loading":"Loading autotrack…","enabled":"Enabled","disabled":"Disabled","targetType":"Target type","stopDelay":"Stop delay (s)","disappearDelay":"Disappear delay (s)","note":"Settings save on blur. Vendor support varies — Reolink honours all three; Hikvision honours target type + stop delay only (disappear delay is accepted but ignored at firmware push)."},"deviceSelectField":{"all":"All","select":"— Select device —","remove":"Remove {{label}}","location":"Location","type":"Type","max":"Max {{count}} selected","search":"Search devices…","noDevices":"No matching devices","noMatches":"No matches for “{{query}}”"},"statusBadge":{"online":"Online","offline":"Offline","degraded":"Degraded","unknown":"Unknown","running":"Running","stopped":"Stopped","error":"Error","idle":"Idle","enabled":"Enabled","disabled":"Disabled"},"ptzOverlay":{"deleteTitle":"Delete preset","deleteMessage":"Delete PTZ preset \\"{{label}}\\"? This removes it from the camera.","delete":"Delete","updateTitle":"Update preset","updateMessage":"Overwrite preset \\"{{label}}\\" with the camera's current position?","update":"Update","error":"PTZ: {{error}}","zoomIn":"Zoom in","zoomOut":"Zoom out","noHome":"No home preset set for this camera — pick one in PTZ settings","goHome":"Go home","presets":"Presets","noPresets":"No presets yet","overwriteTitle":"Overwrite \\"{{name}}\\" with current position","deletePreset":"Delete preset {{name}}","newPreset":"New preset name","limitTitle":"Camera preset limit reached ({{max}})","saveTitle":"Save current position as a new preset","limit":"Preset limit reached ({{max}})."},"discoveryPanel":{"title":"Discovered devices","intro":"Channels behind this hub. Click <0>Add</0> to promote a channel to a managed device, or <1>Remove</1> to detach.","refresh":"Refresh","refreshFailed":"Last refresh failed: {{error}}","empty":"No channels reported by the hub yet. Click Refresh to enumerate.","available":"Available to add","adopted":"Already adopted","lastRefreshed":"Last refreshed {{when}}","doorbell":"Doorbell","battery":"Battery","multifocal":"Multifocal","openTitle":"Open device detail","open":"Open","remove":"Remove","add":"Add","online":"online","sleeping":"sleeping","offline":"offline","unknown":"unknown"},"endpointTest":{"colEndpoint":"Endpoint","colMapped":"Mapped (srflx)","none":"none","colRelay":"Relay","colProto":"Relay protocol","colConnect":"Relay connect","colUrl":"Event url","colNote":"Note","allocated":"allocated","connected":"connected","failed":"failed","na":"n/a","timedOut":"gathering timed out","natIndependent":"Endpoint-independent mapping","natDependent":"Symmetric NAT (endpoint-dependent)","natUnknown":"Unknown","natMapping":"NAT mapping","why":"Why","mappings":"Mappings seen","stunQueried":"STUN queried","error":"Error","results":"Per-endpoint results","natTitle":"NAT mapping (this browser)","iceCount":"ICE servers ({{count}})","ice":"ICE servers","reload":"Reload","checkNat":"Check NAT","testEach":"Test each endpoint","loadFailed":"Failed to load ICE servers: {{error}}","loading":"Loading…","noServers":"No ICE servers configured. Add a TURN provider under TURN Servers."},"hubSessionTest":{"policyAll":"ICE policy all","policyRelay":"ICE policy relay (TURN only)","title":"Hub session test","run":"Run test ({{seconds}} s)","stop":"Stop","stream":"Stream (pinned)","pickCamera":"Pick a camera first","noStream":"No pinned stream","hint":"Opens a real live session from this browser twice — first with every candidate type, then TURN relay only — and reads both ends of it.","progress":"Run {{index}} of {{total}} · {{policy}}","elapsed":"{{elapsed}} s of {{total}} s","runTitle":"Run {{index}} · {{policy}}","noRun":"No run yet."},"recordingTimeline":{"modeLive":"Live","modeLoading":"Loading…","modePlaying":"Playing","modePaused":"Paused","modeGap":"No footage","modeEnded":"Ended","modeError":"Error","motionClip":"Motion ({{count}})","audioClip":"Audio","recorderUnavailable":"Recorder unavailable — the recording service may not be running for this node.","availabilityUnreadable":"CamStack could not be asked about this camera's recordings — this bar shows nothing, which is not the same as no footage.","hlsMode":"HLS mode","resumeTitle":"Resume playback","pauseTitle":"Pause playback","resume":"Resume","pause":"Pause","liveTitle":"Return to the live stream","goLive":"Go live","hlsTitle":"Play recordings through the HLS player instead of the live WebRTC session","recorded":"Recorded","noRecordings":"No recordings for this window.","density":"Events · density","helpFramePush":"Click or drag the coverage bar to play from any point (frames play in the main player above), or click a density bar to browse that window’s events.","helpHls":"Click the coverage bar to play from any point, or a density bar to browse that window’s events."},"valveControl":{"open":"Open","opening":"Opening","closing":"Closing","closed":"Closed","stopped":"Stopped","unknown":"Unknown","drag":"Drag to set position","openSuffix":"open","stop":"Stop","close":"Close","position":"Position"},"deviceSelectorPicker":{"tabAll":"All","tabTypes":"By type","tabRooms":"By room","tabChosen":"Chosen","everyDevice":"Every device in this deployment — {{count}} right now.","laterCovered":"Devices added later are covered automatically.","noTypes":"No devices to pick a type from.","typesFootnote":"Devices of a checked type are covered automatically as they are added.","noRooms":"No device has a room assigned yet.","roomsFootnote":"A device with no room set is never covered by a room rule.","search":"Search devices…","noMatch":"No device matches.","fixedList":"A fixed list — a device added later is <0>not</0> covered until you edit this.","includeLinked":"Include linked devices","linkedOn":"Accessories attached to a granted camera — siren, floodlight, PIR — are covered too.","linkedOff":"Only the devices selected above. An operator granted a camera will <0>not</0> be able to trigger the siren or light attached to it.","allDevices":"All devices","noDevice":"No device chosen","deviceCount_one":"{{count}} device","deviceCount_other":"{{count}} devices","noType":"No type chosen","noRoom":"No room chosen"},"mediaPlayerPanel":{"repeatOff":"Off","repeatAll":"All","repeatOne":"One","play":"Play","pause":"Pause","previous":"Previous","next":"Next","vol":"Vol","volume":"Volume","unmute":"Unmute","mute":"Mute","source":"Source","shuffle":"Shuffle","repeat":"Repeat"},"mediaPlayerHero":{"nothing":"Nothing playing","seek":"Seek","previous":"Previous","play":"Play","pause":"Pause","next":"Next","unmute":"Unmute","mute":"Mute","volume":"Volume"},"acPanel":{"modeCool":"Cool","modeHeat":"Heat","modeAuto":"Auto","modeHeatCool":"Heat·Cool","modeFan":"Fan","modeDry":"Dry","modeOff":"Off","now":"· {{temp}}° now","swing":"Swing","fan":"Fan","preset":"Preset","vertical":"Vertical","horizontal":"Horizontal","swingAxis":"{{axis}} swing","decrease":"Decrease target","increase":"Increase target","mode":"Mode","setpoint":"Setpoint"},"heatingValveReadout":{"valve":"Valve"},"dishwasher":{"running":"Running","paused":"Paused","finished":"Finished","error":"Error","unavailable":"Unavailable","idle":"Idle","unknown":"Unknown","doorOpen":"Door open","start":"Start","pause":"Pause","stop":"Stop","powerOff":"Power off","power":"Power","errorCode":"Error {{code}}","program":"Program","halfLoad":"Half load","hygienePlus":"Hygiene plus","extraDry":"Extra dry","intensiveZone":"Intensive zone","varioSpeedPlus":"VarioSpeed+","childLock":"Child lock","offline":"Offline","descriptionMissing":"Waiting for the appliance profile","resume":"Resume","remaining":"{{time}} left","startsIn":"Starts in {{time}}","unknownValue":"—","durationSeconds":"{{n}} s","durationMinutes":"{{n}} min","durationHours":"{{n}} h","durationHoursMinutes":"{{h}} h {{m}} min","op":{"inactive":"Inactive","ready":"Ready","delayedStart":"Delayed start","run":"Running","pause":"Paused","actionRequired":"Action required","finished":"Finished","error":"Error","aborting":"Stopping"}},"humidifier":{"turnOff":"Turn off","turnOn":"Turn on","current":"Current: {{value}}","on":"On","off":"Off","target":"Target","targetHumidity":"Target humidity","mode":"Mode"},"cameraStreamPlayer":{"connecting":"Connecting…","failed":"Connection failed","disconnected":"Disconnected","reconnect":"Reconnect","unmute":"Unmute","mute":"Mute","snapshot":"Take snapshot","pip":"Picture-in-Picture","exitFullscreen":"Exit fullscreen","fullscreen":"Fullscreen"},"petFeeder":{"offline":"Offline","feedNow":"Feed now","feed":"Feed","inBowl":"g in bowl","desiccant":"{{days}}d desiccant","onBattery":"On battery","feeding":"Feeding…","lowFood":"Low food","ready":"Ready","hopper1":"Hopper 1","hopper2":"Hopper 2","manualFeed":"Manual feed","callPet":"Call pet","resetDesiccant":"Reset desiccant","markRefilled":"Mark refilled","cancelFeed":"Cancel feed","settings":"Settings","childLock":"Child lock","light":"Light","feedSound":"Feed sound","volume":"Volume","decreaseVolume":"Decrease volume","increaseVolume":"Increase volume","levelUnknown":"Food level unknown","gramsInBowl":"{{grams}} grams in bowl","decreasePortion":"Decrease {{label}} portion","increasePortion":"Increase {{label}} portion"},"recordingBands":{"mon":"Mon","tue":"Tue","wed":"Wed","thu":"Thu","fri":"Fri","sat":"Sat","sun":"Sun","continuous":"Continuous","events":"Events","empty":"No bands — nothing is recorded. Add one to start.","add":"Add band","sensors":"Sensors","sensorsHint":"Sensors whose ACTIVE edge starts a recording — a contact opening, a PIR firing. Same-location devices are suggested first.","addSensor":"Add a sensor…","start":"Band start","end":"Band end","audio":"Band audio","silentTitle":"Silent — this band records the video-only stream.","soundTitle":"With sound — this band records the camera’s audio.","silent":"Silent","sound":"Sound","remove":"Remove band","everyDay":"every day","motion":"Motion","audioAbove":"Audio above threshold","threshold":"Audio threshold dBFS","objects":"Objects","triggerOn":"Trigger on {{class}}","postBuffer":"Post-buffer"},"deviceExport":{"linked":"Linked","unlinked":"Unlinked","error":"Error","hideValue":"Hide value","revealValue":"Reveal value","setup":"Setup","qr":"Pairing QR code","unexposeDevice":"Unexpose {{name}}","exposeDevice":"Expose {{name}}","stopTitle":"Stop exposing to \\"{{addon}}\\"","exposeTitle":"Expose to \\"{{addon}}\\"","exposed":"Exposed","expose":"Expose","bulkExposed_one":"Exposed {{done}} of {{count}} selected device.","bulkExposed_other":"Exposed {{done}} of {{count}} selected devices.","bulkUnexposed_one":"Unexposed {{done}} of {{count}} selected device.","bulkUnexposed_other":"Unexposed {{done}} of {{count}} selected devices.","dismissAria":"Dismiss export result","dismiss":"Dismiss","succeeded":"Succeeded: {{devices}}","failed":"Failed: {{device}} — {{message}}","select":"Select {{name}}","colType":"Type","colName":"Name","colExport":"Export","selected":"{{count}} selected","exposeN":"Expose {{count}}","unexposeN":"Unexpose {{count}}","filterRole":"Role","filterProvider":"Provider","selectShown":"Select {{count}} shown","deselectShown":"Deselect shown","clear":"Clear","title":"Exported devices","exposedCount":"{{count}} exposed","loading":"Loading exportable devices…","search":"Search by name or stableId","noMatch":"No device matches this search.","emptyTitle":"No exportable devices","emptyKinds":"No devices of the supported kinds ({{kinds}}) are available to expose to \\"{{addon}}\\".","emptyNoKinds":"\\"{{addon}}\\" reports no exportable device kinds yet."},"motionZones":{"title":"Motion Zones","unsupported":"This camera doesn't expose an on-board motion zones grid.","loading":"Loading the camera's grid…","intro":"Toggle <0>Edit grid</0> to paint the region directly on the live frame, then <1>Save</1> to push the mask to the camera. Pick a bigger <2>Cell size</2> for quicker, broad-stroke painting — it's resampled to the camera's native {{width}}×{{height}} grid on save (×1 is the finest).","doneEditing":"Done editing","editGrid":"Edit grid","allOn":"All on","allOff":"All off","invert":"Invert","cellSize":"Cell size","cameraGrid":"Camera grid {{width}}×{{height}} (finest)","paintingGrid":"{{width}}×{{height}} painting grid · cells ×{{factor}} bigger","cells":"{{active}} / {{total}} cells · {{width}}×{{height}}","paintSuffix":" · paint {{width}}×{{height}}","revert":"Revert","saving":"Saving…","save":"Save"},"cameraGridLayout":{"title":"Grid layout","loading":"Loading the layout…","unreadable":"The Camera Grids addon did not answer, so this layout is unknown — not empty.","notGrid":"This camera is not a grid.","autofillTitle":"Tile every cell over the whole canvas, leaving no gap","autofill":"Autofill","save":"Save","noCells":"No cells yet — add one below.","addCell":"Cell","published":"Published profiles","publish":"publish {{profile}}","composed":"composed from every source’s {{profile}}","serviceable":"serviceable, not published","noCellsOffer":"not offered — this grid has no cells yet","missing":"not offered — no {{profile}} on {{sources}}","cellN":"Cell {{index}}","source":"Source","visiblePart":"Visible part of the camera","wholeFrame":"Whole frame","noSnapshot":"No snapshot from this camera yet — the numbers below still apply.","cropX":"Crop x","cropY":"Crop y","cropWidth":"Crop width","cropHeight":"Crop height"},"vacuum":{"cleaning":"Cleaning","paused":"Paused","returning":"Returning","docked":"Docked","drying":"Drying","idle":"Idle","error":"Error","unknown":"Unknown","errorCode":"Error {{code}}","fanSpeed":"Fan speed","start":"Start","pause":"Pause","returnToBase":"Return to base","stop":"Stop","locate":"Locate"},"sceneMonitor":{"newSceneLabel":"New scene","unsupported":"Scene monitoring is not available for this camera.","intro":"A scene watches one region of this camera and tells you when it stops looking like the picture you captured. Draw a box around the thing you care about — a wheelie bin, a gate, a parking space — then capture what “normal” looks like. Daylight is enough to start: the night reference is optional, and without it the scene simply sits the infrared hours out instead of reporting a problem.","cancel":"Cancel","newScene":"+ New scene","refresh":"Refresh frame","draftHint":"Click on the frame to drop a box, then drag its corner to fit it around the thing you want watched.","nameHint":"Name it, then create. You capture what “normal” looks like next.","tooLarge":"That box covers most of the frame. A scene that big is dominated by the weather, the sky and passing cars — it will quietly stop noticing the thing you actually care about. Draw it tighter.","placeholder":"e.g. Immondizia prelevata","create":"Create","empty":"No scenes on this camera yet.","optionalTitle":"Optional. Without a night reference the checks in infrared are simply skipped — the scene keeps working in daylight and nothing is reported as broken.","captureTitle":"Take a fresh photo now and store it as the {{variant}} reference","capture":"Capture {{variant}}","optional":"(optional)","resetTitle":"Clear the flag and re-photograph what normal looks like right now","reset":"Reset","checkNow":"Check now","settingsFor":"Settings for {{label}}","settings":"Settings","variant":{"day":"Daylight","ir":"Night (IR)","night":"Night","dawn":"Dawn","dusk":"Dusk"},"coverage":{"empty":"{{parts}} — nothing captured yet, so this scene is not watching.","judgeAnyway":"{{parts}} — {{names}} judged against the references you do have.","skip":"{{parts}} — optional; checks in {{names}} are skipped.","namesJoin":"{{first}} and {{second}}"},"suspension":"Paused — nothing was captured in {{light}}, so checks are on hold until the light changes back. Capture {{light}} if you want it watched around the clock.","unavailable":{"no_reference_for_condition":"can’t tell — nothing has been captured for this scene yet. Press “Capture daylight” to photograph what normal looks like.","view_shifted":"can’t tell — the camera view has moved since the reference was captured. Re-capture it.","no_vision_profile":"can’t tell — the vision model is unreachable, so the change is on hold.","encoder_model_changed":"can’t tell — the embedding model changed, so the stored references are unreadable. Re-capture them.","no_snapshot":"can’t tell — this camera did not return a frame."},"status":{"notArmed":"Not armed yet — capture the initial state to start watching.","cantTellNow":"can’t tell right now.","heldFor":"for {{duration}}","changedLatched":"CHANGED{{held}} — press Reset when you have dealt with it.","backToNormal":"Back to normal, but still flagged as changed{{held}}. Press Reset to clear it.","changed":"CHANGED{{held}}","normal":"Normal{{held}}"},"badge":{"notArmed":"Not armed","changed":"Changed","paused":"Paused","cantTell":"Can’t tell","normal":"Normal"}},"audioLevelWaveform":{"readout_one":"{{dbfs}} dBFS · {{count}} sample","readout_other":"{{dbfs}} dBFS · {{count}} samples"},"batteryBadge":{"titleUnknown":"Battery: unknown","unknown":"Unknown","titleLow":"Battery: low","titleNormal":"Battery: normal","low":"Low","normal":"Normal","titlePercent":"Battery: {{percent}}%","charging":"charging ({{source}})","sleeping":"sleeping"},"coverageTrack":{"ariaLabel":"Recorded coverage timeline"},"eventBucketStrip":{"loading":"Loading events…","empty":"No events in this window.","shown":"({{count}} shown)","loadMore":"Load more"},"navigationPanel":{"turnLeft":"Turn left","forward":"Forward","turnRight":"Turn right","turnAround":"Turn around","notLoaded":"Device #{{deviceId}} not loaded.","title":"Navigation","following":"following","lightOn":"light on","driveHold":"Drive (hold)","stop":"Stop","actions":"Actions","sounds":"Sounds","fillLight":"Fill light","on":"On","off":"Off","lightMode":"Light mode","auto":"Auto","manual":"Manual","lightLevel":"Light level"},"privacyMaskSettings":{"zoneN":"Zone {{id}}","title":"Privacy Mask","unsupported":"This camera doesn't support an on-board privacy mask.","unreadable":"This camera hasn't answered, so what it currently masks is unknown — the editor stays closed rather than showing an empty frame you could save over. A battery camera answers once it wakes; otherwise check that it is reachable.","loading":"Loading the camera's privacy mask…","help":"Toggle <0>Edit mask</0> to draw blanked-out zones on the live frame, then <1>Save</1> to push them to the camera. Drag a rectangle to move, its corner to resize; drag polygon vertices, click an edge midpoint to add one, or right-click a vertex to remove it.","doneEditing":"Done editing","editMask":"Edit mask","maskOn":"Mask on","maskOff":"Mask off","maxZones":"Maximum zones reached","addRect":"Add a rectangle zone","addPolygon":"Add a polygon zone","rectButton":"+ Rect","polygonButton":"+ Polygon","zoneCount":"{{active}} / {{max}} zones","revert":"Revert","saving":"Saving…","save":"Save","deleteZoneN":"Delete zone {{id}}","deleteZone":"Delete zone","micTitleUnknown":"Microphone — state unknown; the camera did not answer.","micTitleOn":"The camera is capturing sound. Turning it off: {{cost}}","micTitleOff":"The camera is silent. {{cost}}","micUnknown":"Microphone unknown","micOn":"Microphone on","micOff":"Microphone off","writeFailed":"Write failed: {{reason}}","micNotReported":"The camera did not report its microphone, so this state is unknown."},"ptzPanel":{"autofocus":"Autofocus","on":"On","off":"Off","notLoaded":"Device #{{deviceId}} not loaded."},"recordingPanel":{"settings":"Settings","loadingSettings":"Loading settings…","recording":"Recording","rescanStorage":"Rescan storage","status":"Status","nodeFooter":"node: {{nodeId}}","recordingContinuous":"Recording (continuous)","idle":"Idle","storage":"Storage","recorded24h":"Recorded (24h)","nobodyCouldLook":"nobody could look","segmentRange_one":"{{count}} segment range","segmentRange_other":"{{count}} segment ranges","recorderUnavailable":"Recorder unavailable — the recording service may not be running for this node.","playbackHint":"Recordings play in the main player above — switch back to live from there."},"recordingSettings":{"modeOff":"Off","modeEvents":"Events","modeContinuous":"Continuous","modeDeviceDecides":"Device decides","noteChecking":"checking the camera…","noteAbsent":"this camera does not report when it needs recording","noteUnknown":"could not check the camera","mode":"Mode:","modeAria":"Mode {{label}}","deviceDecides":"The DEVICE decides: this camera records for as long as it reports it is in function — a robot while it cleans — and one job is one clip. There is nothing to schedule, so this mode has no bands.","bands":"Recording bands","bandsHint":"A band says WHEN to record and HOW. Nothing is recorded outside every band — an empty table means this camera is off.","profiles":"Profiles:","noStreams":"No assigned streams to record yet.","segment":"Segment","default":"default","retention":"Retention (empty = node default)","maxAge":"Max age","days":"days","maxSize":"Max size","save":"Save"},"sceneSettingsForm":{"whatItWatches":"What it watches","name":"Name","watching":"Watching","watchingHint":"Turned off, the scene keeps its region, its references and its flag — it simply stops checking. Nothing is lost by pausing one for a while.","whenToLook":"When to look","triggerBoth":"On the clock and after motion settles","triggerPeriodic":"On the clock only","triggerOnMotion":"After motion settles only","checkEvery":"Check every (seconds)","intervalHint":"60 s suits “is the bin still out”. Every check costs one photograph and one encode, so going below about 30 s buys latency you almost never need and multiplies the cost by the number of scenes you own.","howSure":"How sure it has to be","thresholdHint":"How closely the region still has to resemble the photograph to count as unchanged. Higher means fussier: at 0.95 a passing cloud can read as a change; at 0.60 the bin can be taken and the scene will shrug. 0.80 is a sensible start — if it cries wolf, lower it; if it misses the thing you care about, raise it.","agreeingChecks":"Agreeing checks before it changes its mind","agreeingHint":"One bad photograph must never be able to flip a scene. 3 agreeing checks at 60 s is about four minutes of latency and is what makes the answer trustworthy — leaving a state costs exactly the same as entering one.","quietFor":"Quiet for (seconds) before a check counts","quietHint":"A check taken while something is moving is a photograph of the van parked in front of the bin, so it is discarded rather than merely delayed. 0 disables the gate.","minGap":"Minimum gap between counted checks (seconds)","minGapHint":"Spreads the agreeing checks over real time instead of letting three adjacent polls inside one long occlusion be mistaken for three independent opinions.","lighting":"Lighting","noReference":"When a light has no reference of its own","uncoveredSkip":"Skip the check (recommended)","uncoveredJudge":"Judge against the other light anyway","whatYouGetTold":"What you get told","notificationsFollow":"Notifications follow","emitLatched":"The flag — told once, still visible at breakfast","emitLive":"The live state — follows the region as it changes","emitHint":"“Is the bin gone” is a flag: you want to be told once and still see it later. “Is the gate open” is a live state.","autoRestore":"Clear the flag by itself when things look normal again","autoRestoreHint":"Off by default, so an alarm never silently clears itself. The “back to normal” moment is recorded either way, so an automation can still react to it.","aiDoubleCheck":"AI double-check","askVision":"Ask a vision model before changing the answer","question":"The question to ask","questionPlaceholder":"e.g. Is the wheelie bin still there?","triggerHintPeriodic":"Only on the clock. Predictable, and it notices a change even on a camera nothing ever moves in front of.","triggerHintOnMotion":"Only after the camera has been still again for the quiet window below. Cheapest, but a change nobody walks past is never seen.","triggerHintBoth":"Both — the clock is the safety net that lets the motion path miss. This is the right answer for almost every scene.","uncoveredHintSkip":"Sit that light out. No verdict, no alarm, no flag touched — it picks itself back up when a light it knows returns. This is why the night capture is optional.","uncoveredHintJudge":"Compare against the references you do have. Only correct when the two lights genuinely look alike (a floodlit driveway, an indoor lamp) — against a real infrared frame it will report a change that did not happen.","matchThreshold":"Match threshold — <0>{{value}}</0>","confirmHint":"The model is asked <0>only</0> when the region has already changed enough to flip the answer — roughly twice a week for a bin, not once a minute. It reasons about the object rather than the pixels, so rain, shadows and a repositioned bin stop counting as the thing being taken. If it cannot be reached, the change is held rather than announced."},"clipBandBar":{"eventsDensity":"Events · density"},"clipPanel":{"quality":"Quality","preparing":"Preparing the clip — the file is fetched and muxed once…","prepareFailed":"This clip could not be prepared","download":"Download this clip","noReasonGiven":"no reason given","servedFallback":"Served the <0>{{served}}</0> stream — this clip has no {{profile}} twin."},"clipTile":{"loadingStill":"Loading the still","recording":"Recording…","notPlayable":"Not playable — {{reason}}","noReason":"the source gave no reason","refusal":{"sleeping":"The camera is asleep — a still would cost a wake","no_keyframe":"No decodable frame inside this window","unsupported":"This source cannot produce stills","queue_full":"Waiting for the camera — its still queue is full","camera_backoff":"The camera is resting after refusing — trying again shortly","no_catalog_row":"This clip is no longer in the catalog","unknown_device":"This camera is not served here","uid_missing":"The camera’s id is not known yet","camera_refused":"The camera refused — {{reason}}"},"noStill":"This clip carries no still and offered none"},"clipsSection":{"asking":"Asking the registry whether this cluster serves clips…","unknownTitle":"Clip sources unknown","absentTitle":"No provider of videoclips in this cluster","clips":"Clips","source":"Source","oneProvider":"This camera is bound to one clip provider today.","expand":"Expand to the visible window","tooWideTitle":"That period is too wide to list","listFailed":"The clip list could not be read","silentSources_one":"One source contributed nothing to this list","silentSources_other":"{{count}} sources contributed nothing to this list","intro":"Every source this camera has, side by side — CamStack's own recordings and whatever the camera or an export keeps of its own. A source is listed because it exists, not because it was switched on here; pick sources to narrow the view.","periodHint":"The list follows the period selected on the timebar below — the recording section's own control. Zoom out to widen it, pan or pick a day to move it, click a density bar to narrow it to that window.","unknownMessage":"The capability registry could not be reached, so whether this camera has clip sources is unknown — not absent.","absentDescription":"Nothing is installed that could list a camera's stored clips.","tooWideMessage":"{{band}} covers {{days}} local days, and a clip listing is asked one local day at a time — at most {{max}}. Nothing was asked for; narrow the band and the list follows it.","loadingFor":"Loading clips for {{band}}…","noSourceAnswered":"No source could answer for {{band}}","noClips":"No clips in {{band}}","asked":"Asked {{sources}}.","itemNoun":"clips"},"configFormField":{"selectNode":"Select node…","test":"Test","remove":"Remove","loadingOptions":"Loading options…","select":"— Select —","auto":"Auto","clickToSet":"{{label}} — click to set manually","decreaseBy":"Decrease by {{step}}","decrement":"Decrement","increaseBy":"Increase by {{step}}","increment":"Increment","resetTo":"Reset to {{label}}","searchOrAdd":"Search or add…","nodeOffline":"{{name}} (offline)","noEntries":"No entries","minRows_one":"At least {{count}} row required","minRows_other":"At least {{count}} rows required","removeRow":"Remove this row","add":"Add","limit":"(limit: {{max}})","processing":"Processing...","fillPrerequisites":"Fill the prerequisite fields above first.","noOptions":"No options returned.","working":"Working…","probeNoResult":"Probe handler returned no result","row":"Row {{n}}"},"confirmActionButton":{"cancel":"Cancel","defaultTitle":"Confirm action"},"copyButton":{"copied":"Copied","copy":"Copy {{what}}","value":"value"},"devShell":{"devMode":"DEV MODE","logout":"Logout","themeDark":"Dark","themeLight":"Light","themeSystem":"System","theme":"Theme: {{mode}}"},"deviceActivityPanel":{"logs":"Logs","events":"Events","state":"State"},"alarmHeroCard":{"disarm":"Disarm","alarmMode":"Alarm mode","dismiss":"Dismiss","modeHome":"Home","modeAway":"Away","modeNight":"Night","modeVacation":"Vacation","modeBypass":"Bypass","stateDisarmed":"Disarmed","stateArmedHome":"Armed Home","stateArmedAway":"Armed Away","stateArmedNight":"Armed Night","stateArmedVacation":"Armed Vacation","stateArmedBypass":"Armed (Bypass)","stateArming":"Arming…","stateDisarming":"Disarming…","statePending":"Pending","stateTriggered":"Triggered"},"deviceControlAtoms":{"decrement":"Decrement","increment":"Increment"},"brightnessPanel":{"brightness":"Brightness"},"climatePanel":{"decreaseTarget":"Decrease target","increaseTarget":"Increase target","mode":"Mode","low":"Low","targetLow":"Target low","high":"High","targetHigh":"Target high","fan":"Fan","fanMode":"Fan mode","preset":"Preset","humidity":"Humidity","targetHumidity":"Target humidity"},"coverHeroCard":{"open":"Open","stop":"Stop","close":"Close","position":"Position","tilt":"Tilt","tiltPosition":"Tilt position","dragToSet":"Drag to set position","openWord":"open"},"coverPanel":{"open":"Open","stop":"Stop","close":"Close","position":"Position"},"dummyHeroCard":{"comingSoon":"Controls coming soon"},"imageControl":{"zoomOut":"Zoom out","zoomIn":"Zoom in","resetZoom":"Reset zoom","close":"Close","noImage":"No image","viewImage":"View image","image":"Image"},"lawnMowerControl":{"mow":"Mow","pause":"Pause","dock":"Dock","startMowing":"Start mowing","mowing":"Mowing","paused":"Paused","docked":"Docked","idle":"Idle","error":"Error","unknown":"Unknown","code":"Code {{code}}"},"lightHeroCard":{"brightness":"Brightness","colourTemperature":"Colour temperature","on":"On","off":"Off"},"lockHeroCard":{"open":"Open","openUnlatch":"Open (unlatch)"},"offlineBadge":{"unavailable":"Unavailable","lastSeen":"last seen {{when}}"},"scriptAutomationControls":{"automationEnabled":"Automation enabled","trigger":"Trigger","justNow":"just now","minAgo":"{{count}} min ago","hAgo":"{{count}} h ago","stop":"Stop","run":"Run","running":"Running","idle":"Idle","neverRun":"never run","neverTriggered":"never triggered","enabled":"Enabled","disabled":"Disabled","runNow":"Run this automation now"},"switchPanel":{"turnOff":"Turn off","turnOn":"Turn on"},"waterHeaterControl":{"operationMode":"Operation mode","target":"Target: {{value}}","disableAway":"Disable away mode","enableAway":"Enable away mode","awayOn":"Away on","awayOff":"Away off"},"weatherControl":{"humidity":"Humidity","wind":"Wind","pressure":"Pressure","sunny":"Sunny","clearNight":"Clear night","partlyCloudy":"Partly cloudy","cloudy":"Cloudy","rainy":"Rainy","pouring":"Pouring","snowy":"Snowy","sleet":"Sleet","lightning":"Lightning","thunderstorm":"Thunderstorm","fog":"Fog","windy":"Windy","hail":"Hail","exceptional":"Exceptional","unknown":"Unknown"},"adminLinkQuickAction":{"open":"Open {{label}} for this device"},"childrenAccordion":{"adoptedDevices":"Adopted devices","accessories":"Accessories","online":"Online","offline":"Offline","awaitingState":"Awaiting state…","turnOff":"Turn off","turnOn":"Turn on","motionTriggerOn":"Motion-trigger: on (click to disable)","motionTriggerOff":"Motion-trigger: off (click to enable)"},"deviceDeleteAction":{"title":"Delete device?","message":"This will remove \\"{{label}}\\" and all its settings. This action cannot be undone.","confirm":"Delete","deleteDevice":"Delete device"},"deviceItemFeatures":{"adoptedAndAccessories_one":"{{adopted}} adopted · {{count}} accessory","adoptedAndAccessories_other":"{{adopted}} adopted · {{count}} accessories","adopted":"{{count}} adopted","accessories_one":"{{count}} accessory","accessories_other":"{{count}} accessories","features":"Features","markerTitle":"Informational marker (no cap registered)","marker":"marker"},"deviceItemHeader":{"collapseChildren":"Collapse children","expandChildren":"Expand children","openParent":"Open parent: {{name}} (#{{id}})","under":"Under: {{name}}"},"rebootQuickAction":{"rebootDevice":"Reboot device","rebootDeviceQuestion":"Reboot device?","cancel":"Cancel","reboot":"Reboot","description":"This will restart {{deviceName}}. It may be unavailable for a moment."},"pageSizeSelect":{"perPage":"Per page","all":"All"},"pagination":{"previous":"Previous page","next":"Next page","showing":"Showing {{start}}–{{end}} of {{total}} {{noun}}","devices":"devices"},"deviceListEmptyState":{"clearFilters":"Clear filters","noDevices":"No devices yet","noMatch":"No devices match the current filters","loadingIntegrations":"Loading integrations…"},"genericModeList":{"loading":"Loading…","total":"{{count}} total","rowsPerPage":"Rows per page"},"deviceModeList":{"done":"Done","select":"Select","deviceCount_one":"{{count}} device","deviceCount_other":"{{count}} devices","devicesPerPage":"Devices per page","showingFiltered_one":"Showing {{shown}} of {{count}} device · filtered by <0>{{names}}</0>","showingFiltered_other":"Showing {{shown}} of {{count}} devices · filtered by <0>{{names}}</0>","showing_one":"Showing {{shown}} of {{count}} device","showing_other":"Showing {{shown}} of {{count}} devices","searchPlaceholder":"Search by name or stableId","searchAria":"Search devices by name or stableId"},"devicePicker":{"nounCamera":"camera","nounDevice":"device","nounNode":"node","nounPackage":"package","nounClass":"class","nounZone":"zone","nounFace":"face","nounCalendar":"calendar","pluralCameras":"cameras","pluralDevices":"devices","pluralNodes":"nodes","pluralPackages":"packages","pluralClasses":"classes","pluralZones":"zones","pluralFaces":"faces","pluralCalendars":"calendars","nodeUnknown":"Node {{id}} — unknown to the hub","nodeId":"Node {{id}}","packageNotInstalled":"{{id}} — not installed","classNotListed":"{{id}} — not in the class list","zoneNotFound":"{{id}} — zone not found","zoneUnavailable":"{{id}} — zone unavailable","faceNotInGallery":"{{id}} — not in the face gallery","calendarNotFound":"{{id}} — calendar not found","deviceRemoved":"Device #{{id}} — removed","deviceId":"Device #{{id}}","widenWarning":"No {{noun}} selected: the rule will apply to ALL {{plural}}.","loading":"Loading {{noun}}…","failed":"The hub did not return its {{noun}} — selected ones are listed by id so they can still be removed.","all":"All","clear":"Clear","noneAvailable":"No {{plural}} available.","noCamerasAvailable":"No cameras available — the rule applies to all devices.","noneAvailableAll":"No {{plural}} available — the rule applies to every {{noun}}.","alreadyAdded":"Already added","everyNoRestriction":"Every {{noun}} — no restriction","noneSelected":"None selected","moreChips":"+{{count}} more","showFewer":"Show fewer","done":"Done","addPlural":"Add {{plural}}…","edit":"Edit…","searchDevice":"Search by name, room or type…","searchClass":"Search by class or category…","searchZone":"Search by camera or zone…","searchDefault":"Search by name or id…","searchDevices":"Search devices","searchPlural":"Search {{plural}}","shownOf":"{{shown}} of {{total}} shown · {{selected}} selected","noDeviceMatches":"No device matches.","noNounMatches":"No {{noun}} matches.","showMore":"Show {{count}} more ({{left}} left)","hiddenSelected":"{{count}} selected hidden by filters","noZone":"No zone","noLocation":"No location","noRoom":"No room","parentDetail":"in {{parent}}","shownOfSingle":"{{shown}} of {{total}} shown"},"deviceFilterBar":{"groupBy":"Group by","resetFilters":"Reset filters","zoneFilterPaused":"Zone filter paused — zones not loaded","noType":"No type","noZone":"No zone","noLocation":"No location","zone":"Zone","location":"Location","none":"None","type":"Type","all":"All","nSelected":"{{count}} selected","loadingZones":"loading zones…","zonesUnavailable":"zones unavailable","zonesLoadingNote":"Loading zones — grouped by location for now","zonesUnavailableNote":"Zones unavailable — grouped by location"},"doorbellRecentPanel":{"recentPresses":"Recent presses","justNow":"just now","minutesAgo":"{{count}}m ago","hoursAgo":"{{count}}h ago","daysAgo":"{{count}}d ago"},"filterBar":{"filters":"Filters","search":"Search..."},"associationSlotCard":{"noDevicesPicked":"No devices picked.","alwaysLinked":"Always linked (device tree):","alwaysLinkedAria":"Always linked","produceTracked":"Produce tracked events on this camera (opt-in):","edit":"Edit","pickedDevices":"Picked devices","loadingCandidates":"Loading candidates…","suggested":"Suggested — added only if you click them:","suggestions":"Suggestions","searchDevices":"Search devices","searchPlaceholder":"Search devices by name, location or type","searchResults":"Search results","cancel":"Cancel","save":"Save","healthOk":"OK","healthMissing":"Missing","healthForeign":"Other owner","healthUnavailable":"Not a valid source","deviceN":"Device {{id}}","trackedEvents":"Tracked events","active":"Active","inactive":"Inactive","unknown":"Unknown","setBy":"set by {{authority}}","originImplied":"always linked","originNotLinked":"not linked any more — untick to remove","trackedFrom":"Tracked events from {{name}}","storedIn":"Stored in {{authority}}","removeN":"Remove {{name}}","candidatesError":"Candidates could not be read: {{message}}","addN":"Add {{name}}","inParent":"in {{name}}","notSaved":"Not saved: {{reason}}"},"extensionsPanel":{"unknownTitle":"Extensions could not be read","none":"No extensions are offered on this device.","filteredToNothing":"None of these extensions is offered on this device.","unknownSlot":"Unknown slot","unreachable":"Unreachable","unreachableHint":"The extensions this component owns are unknown until it answers.","title":"Extensions","unknownMessage":"Nothing is known about this device’s extensions yet: {{reason}}","loading":"Loading this device’s extensions…","disagree":"The admin UI and the server disagree: the server offers a slot this admin UI does not know. Update the admin UI, or the server."},"logStream":{"logs":"Logs","searchPlaceholder":"Search…","clearSearch":"Clear search","close":"Close","addon":"Addon:","device":"Device:","jumpTitle":"Jump to the newest log line and resume following","jumpToLatest":"Jump to latest","loading":"Loading logs...","noLogs":"No logs found","copyRow":"Copy this row","scopeAgent":"agent","scopeAddon":"addon","scopeDevice":"device","following":"Following","paused":"Paused","collapse":"Collapse","expand":"Expand","copied":"Copied!","copy":"Copy","clear":"Clear","live":"+{{count}} live","all":"all","deviceTitle":"device {{id}}","source":"Log source","sourceName":"Source: {{name}}","searching":"Searching older logs… ({{mb}} MB scanned)","cancel":"Cancel","retry":"Retry","beginning":"Beginning of logs","loadOlder":"Load older"},"modelBoundSlider":{"resetToDefault":"Reset to model default","resetThresholds":"Reset thresholds to model defaults","sourceOverride":"Override for this model","sourceModelDefault":"Model default","sourceGlobalDefault":"Default — not tuned for this model","staleOverride":"The override {{value}} was set for {{modelId}} and does not apply to this model."},"networkLinkBadge":{"ethernet":"Network: ethernet","typeSsid":"Network: {{type}} ({{ssid}})","type":"Network: {{type}}","signal":"signal {{percent}}%"},"notificationTargetsField":{"loading":"Loading targets…","defaultEmpty":"No delivery target is configured. Add one on the Targets tab first — without one the notification is rendered and thrown away.","note":"note","select":"Select…","searchTargets":"Search targets…","loadError":"Could not load targets: {{message}}","noneConfigured":"No delivery target is configured. Add one under Notification Center → Targets first."},"pipelineBuilder":{"slotCropper":"Slot: Cropper / Classifier","slotRecognizer":"Slot: Recognizer","slotLabel":"Slot: {{label}}"},"pipelineRuntimeSelector":{"best":"Best"},"pipelineStep":{"model":"Model","default":"default","noEffect":"No effect with the selected model — {{reason}}"},"rootModelSource":{"notProduced":"Not produced by this model: {{classes}}.","packageNote":"The root model's own package boxes become the package result at this step's threshold; this step's zone-crop view is not used, so small parcels the full-frame model misses stay missed.","labelNote":"This step's class list decides which of the root's labels become the fine class; a switched-off class stays at its macro.","maskNote":"Masks come from the root model: each detection carries the root's own instance mask, so this step's model does not run. A root mask follows the model's mask grid (a quarter of its input), coarser than this step's own per-crop mask.","faceNote":"Face boxes come from the root model. Each is re-found by this step's face detector in a square around it before recognition, so only a face it finds is recognised; a box with no face in it is dropped.","plateNote":"Plate boxes come from the root model and the plate reader reads them. The crop margin around a root plate box has not been measured for this model yet.","inactiveTooSmall":"the current root model ({{name}}) sees the frame too small to find faces reliably (it needs an input of 640 px or more).","inactiveCannot":"the current root model ({{name}}) cannot supply this.","inactive":"Use the root model: inactive — {{reason}} The step runs its own model.","use":"Use the root model ({{name}})"},"addProviderEntryDialog":{"providerType":"Provider type","name":"Name","cancel":"Cancel","create":"Create","title":"Add provider entry","description":"Pick a provider type and name this credential set.","noTypes":"No provider types are available yet. Install a training provider addon first.","namePlaceholder":"Production"},"snapshotButton":{"snapshot":"Snapshot","title":"Click to download · long-press to copy"},"scopePicker":{"automatic":"Automatic (view inherits)","alwaysIncluded":"Always included","neverIncluded":"Never included","accessView":"View","accessViewHint":"Read-only — queries + subscriptions","accessCreate":"Create","accessCreateHint":"Mutations that create or update","accessDelete":"Delete","accessDeleteHint":"Destructive ops (delete/revoke/reset/…)","notGranted":"{{hint}} — not granted by your scope","linkedDevices":"Linked devices","pickType":"— pick {{type}} —","removeScope":"Remove scope","addScope":"Add scope","pickTarget":"Scope {{type}}: pick a target","pickAccess":"Scope {{type}}:{{target}}: pick at least one access","pickDevice":"Scope device: pick at least one device","pickDeviceType":"Scope device: pick at least one device type","pickRoom":"Scope device: pick at least one room"},"stateValuesStream":{"state":"State","pickCaps":"Pick caps to show","resetFilters":"Reset filters","reset":"Reset","copyTitle":"Copy visible state as JSON","search":"Search…","clearSearch":"Clear search","rereadTitle":"Re-read raw upstream state","refresh":"Refresh","noRawState":"No raw state","loading":"Loading device state...","noRuntimeState":"No runtime state","noCapsMatch":"No caps match the filter","noMatches":"No matches","filterAll":"All","scopeDevice":"device","filter":"Filter ({{label}})","copied":"Copied!","copy":"Copy","live":"live","source":"source: {{source}}","normalized":"Normalized","raw":"Raw","keys_one":"{{count}} key","keys_other":"{{count}} keys","updated":"updated {{age}}","emptySlice":"empty slice","emptyArray":"empty array","emptyObject":"empty object","justNow":"just now","secondsAgo":"{{count}}s ago","minutesAgo":"{{count}}m ago","hoursAgo":"{{count}}h ago","filterCaps":"Filter caps…","all":"All","none":"None","defaults":"Defaults"},"gateControl":{"zones":"Zones","zoneDrivenTitle":"Runs where this camera has package zones — set on the Zones tab","runsOnCamera":"Runs on this camera","catalogDefault":"Catalog default: {{state}}","on":"on","off":"off","autoLabel":"Auto","onLabel":"On","offLabel":"Off","defaultState":"default: {{state}}","zonesBadge":"zones","setForCamera":"Set for this camera","catalogDefaultTitle":"Catalog default"},"stepModelRow":{"reset":"Reset","changeModelFor":"Change model for {{label}}","done":"Done","change":"Change","route":"Route"},"stepTimings":{"timings":"Timings","total":"Total"},"stepDetailDock":{"steps":"Steps"},"streamDebugOverlay":{"waiting":"waiting for the first answer…","sessionNotFound":"session not found on the server — it ended, or this node never had it","yes":"yes","no":"no","msAgo":"{{value}}ms ago","sAgo":"{{value}}s ago","msAgoLong":"{{minutes}}m{{seconds}}s ago","staleUpper":"STALE","stale":"stale","candidatePair":"candidate pair","notWired":"not wired on this surface — this player was mounted without <0>getSessionDebug</0>, so the server half cannot be asked","servedRung":"served rung","sourceKind":"source kind","ingestNode":"ingest node","remote":"· remote","egressLeg":"egress leg","bitrate":"· bitrate","inputFps":"· input fps","trackMode":"track mode","ladderMove":"ladder move","when":"· when","tierFailures":"tier failures","held":"held","neverMoved":"never moved"},"timezoneSelector":{"select":"— Select timezone —"},"sendFrameToTraining":{"theCollection":"the collection","playFirst":"Play back a recording first — the frame at the playhead is the one sent","addFrame":"Add the frame at the playhead to a training collection","button":"Send frame to training","title":"Send this frame to training","description":"The camera's frame at {{time}} is taken from the recording at full resolution and added to the collection. Annotate it on the Retrain page — including what the model missed.","reused":"That moment was already in the dataset; it is now in {{collection}}.","added":"Added to {{collection}}.","done":"Done","cancel":"Cancel","send":"Send"},"trainingCollectionPicker":{"create":"Create","collection":"Collection","choose":"Choose a collection…","reading":"Reading the collections…","none":"No collection yet — create one.","newName":"New collection name","newPlaceholder":"New collection (e.g. missed at night)","emptyName":"Give the collection a name.","duplicateName":"A collection with that name already exists."},"floatingPanel":{"restore":"Restore","minimize":"Minimize","close":"Close"},"runReport":{"hubCandidates":"Hub candidates","timeline":"Timeline","path":"Path","media":"Media","flagPublicPath":"has a public path (srflx / relay / public host)","flagPrivateOnly":"LAN/Tailscale only, no srflx/relay","flagNone":"answered with no candidate","flagUnknown":"no answer received","unknown":"unknown","none":"none","offered":"Offered","source":"Source","sourceCounts":"{{sdp}} in the answer SDP · {{trickled}} trickled","gatheringDone":"gathering done","firstFrame":"First frame","selectedPair":"Selected pair","browserOffered":"Browser offered","relayOver":"relay over {{protocols}}","hubSent":"Hub sent","rtpPackets":"{{value}} RTP packets","browserGot":"Browser got","packets":"{{value}} packets","framesDecoded":"Frames decoded","lossFreezes":"Loss · freezes","reconnects":"Player reconnects: {{count}}","playerError":"Player error: {{message}}","serverDebug":"Server debug: {{message}}","sessions":"Sessions: {{ids}} · {{seconds}} s","pairType":"{{type}} (local/remote)"},"streamPanel":{"intercom":"Intercom","forceRefresh":"Force snapshot refresh","snapshot":"Snapshot","moreControls":"More controls","input":"Input","uptime":"Uptime","bitrate":"Bitrate","phase":"Phase","detection":"Detection","inference":"Inference","noSnapshot":"No snapshot available","retry":"Retry","playLive":"Play Live","closeIntercom":"Close intercom","openIntercom":"Open intercom","returnToLive":"Return to live","stopStream":"Stop stream","startStream":"Start stream","live":"Live","stop":"Stop","play":"Play","active":"Active","watching":"Watching","showDetections":"Show detections","moving":"…moving","stationary":"…stationary","showMotion":"Show motion","ptzControls":"PTZ controls","cameraSnapshot":"Camera snapshot"},"addonGlobalSettingsForm":{"hide":"hide","edit":"edit"},"humidifierControl":{"targetWord":"target"},"pipelineMatrixShared":{"offWord":"off"},"endpointTestCard":{"authWord":"auth"},"roleNodePill":{"pinned":"pinned"},"deviceMeta":{"type":{"camera":"Camera","hub":"Hub","light":"Light","siren":"Siren","switch":"Switch","sensor":"Sensor","thermostat":"Thermostat","climate":"Air conditioner","button":"Button","eventEmitter":"Event Emitter","update":"Update","generic":"Generic","notifier":"Notifier","script":"Script","automation":"Automation","lock":"Lock","cover":"Cover","valve":"Valve","humidifier":"Humidifier","waterHeater":"Water heater","fan":"Fan","mediaPlayer":"Media player","alarmPanel":"Alarm panel","control":"Control","presence":"Presence","weather":"Weather","vacuum":"Vacuum","lawnMower":"Lawn mower","container":"Container","image":"Image","petFeeder":"Pet feeder","dishwasher":"Dishwasher","washer":"Washing machine","dryer":"Dryer"},"role":{"siren":"Siren","floodlight":"Floodlight","spotlight":"Spotlight","pirSensor":"PIR sensor","chime":"Chime","autotrack":"Auto-track","nightvision":"Night vision","privacyMask":"Privacy mask","doorbell":"Doorbell","binaryHelper":"Binary helper","outlet":"Outlet","motionSensor":"Motion sensor","contactSensor":"Contact sensor","leakSensor":"Leak sensor","smokeSensor":"Smoke sensor","cOSensor":"CO sensor","gasSensor":"Gas sensor","tamperSensor":"Tamper sensor","vibrationSensor":"Vibration sensor","connectivitySensor":"Connectivity","soundSensor":"Sound sensor","binarySensor":"Binary sensor","temperatureSensor":"Temperature","humiditySensor":"Humidity","ambientLightSensor":"Ambient light","pressureSensor":"Pressure","windSensor":"Wind","rainSensor":"Rain","uvSensor":"UV index","solarRadiationSensor":"Solar radiation","soilMoistureSensor":"Soil moisture","powerSensor":"Power","energySensor":"Energy","voltageSensor":"Voltage","currentSensor":"Current","airQualitySensor":"Air quality","batterySensor":"Battery","numericSensor":"Numeric sensor","enumSensor":"Enum sensor","dateTimeSensor":"Date / time","genericSensor":"Sensor","numericControl":"Numeric control","selectControl":"Select control","textControl":"Text control","dateTimeControl":"Date / time control","mobilePushNotifier":"Mobile push","messagingNotifier":"Messaging","emailNotifier":"Email","genericNotifier":"Notifier","coverBlind":"Blind","coverShutter":"Shutter","coverAwning":"Awning","coverCurtain":"Curtain","coverGarage":"Garage door","coverGate":"Gate","coverDoor":"Door","coverWindow":"Window"},"noun":{"role":{"siren":"Siren","floodlight":"Floodlight","spotlight":"Spotlight","pirSensor":"PIR","chime":"Chime","autotrack":"Auto-track","nightvision":"Night","privacyMask":"Privacy","doorbell":"Doorbell","coverBlind":"Blind","coverShutter":"Shutter","coverAwning":"Awning","coverCurtain":"Curtain","coverGarage":"Garage","coverGate":"Gate","coverDoor":"Door","coverWindow":"Window","binaryHelper":"Helper","outlet":"Outlet","motionSensor":"Motion","contactSensor":"Contact","leakSensor":"Leak","smokeSensor":"Smoke","cOSensor":"CO","gasSensor":"Gas","tamperSensor":"Tamper","vibrationSensor":"Vibration","connectivitySensor":"Connectivity","soundSensor":"Sound","binarySensor":"Binary","temperatureSensor":"Temperature","humiditySensor":"Humidity","ambientLightSensor":"Light","pressureSensor":"Pressure","windSensor":"Wind","rainSensor":"Rain","uvSensor":"UV index","solarRadiationSensor":"Solar radiation","soilMoistureSensor":"Soil moisture","powerSensor":"Power","energySensor":"Energy","voltageSensor":"Voltage","currentSensor":"Current","airQualitySensor":"Air quality","batterySensor":"Battery","numericSensor":"Value","enumSensor":"State","dateTimeSensor":"Time","genericSensor":"Sensor","numericControl":"Number","selectControl":"Select","textControl":"Text","dateTimeControl":"Time","mobilePushNotifier":"Push","messagingNotifier":"Messaging","emailNotifier":"Email","genericNotifier":"Notifier"},"type":{"camera":"Camera","hub":"Hub","light":"Light","siren":"Siren","switch":"Switch","sensor":"Sensor","thermostat":"Thermostat","climate":"Climate","button":"Button","eventEmitter":"Event","update":"Update","generic":"Generic","notifier":"Notifier","script":"Script","automation":"Automation","lock":"Lock","cover":"Cover","valve":"Valve","humidifier":"Humidifier","waterHeater":"Heater","fan":"Fan","mediaPlayer":"Player","alarmPanel":"Alarm","control":"Control","presence":"Presence","weather":"Weather","vacuum":"Vacuum","lawnMower":"Mower","container":"Container","image":"Image","petFeeder":"Feeder","dishwasher":"Dishwasher"},"fallback":"Device"}},"clipThumbnail":{"httpStatus":"HTTP {{status}}","noReason":"no reason given"},"clipSource":{"state":{"ok":"Answering","sleeping":"Asleep — showing the catalog read while it was awake","unreachable":"Could not be reached — its clips are missing from this list","no_storage":"No storage card — this camera keeps nothing of its own","index_empty":"The camera's calendar marks these days, and its own index lists nothing"},"age":{"underMinute":"under a minute ago","minutes":"{{count}} min ago","hours":"{{count}} h ago","days":"{{count}} d ago"}},"clipView":{"clipsFailed":"The clip list could not be read","sourcesFailed":"The source list could not be read"},"sessionVerdict":{"state":{"unknown":"unknown"},"transport":{"noAnswer":"ICE {{state}}; the hub never answered the offer, so no hub candidate was seen","noCandidate":"ICE {{state}}; the hub answered but offered no candidate","relayPrivateOnly":"ICE {{state}}; this browser was limited to TURN relay candidates and the hub offered only LAN/Tailscale addresses (no srflx/relay) — a relayed client cannot reach it","privateOnly":"ICE {{state}}; the hub offered only LAN/Tailscale addresses (no srflx/relay) — reachable only from inside those networks","noPair":"ICE {{state}}; no candidate pair between this browser and the hub succeeded","title":"Transport (ICE) failed"},"mediaUnknown":{"title":"Media unknown","detail":"the browser reported no inbound video statistics"},"nothingReceived":{"title":"Nothing received","detail":"the browser received no packets and the hub's own count is unknown"},"blackHole":{"title":"Media black-hole","detail":"the hub sent {{sent}} RTP packets and this browser received none — media is lost between them after DTLS"},"hubNotSending":{"title":"Hub not sending","detail":"the session is connected but the hub sent no RTP — the source or the broker is not producing"},"decodeUnknown":{"title":"Decode unknown","detail":"packets arrive; the browser reported no decode count"},"lossKeyframe":{"title":"Loss / keyframe size","noFrame":"packets arrive but no frame decoded — a keyframe never completes over this path","lossy":"frames decode but the path is lossy: {{signals}}"},"signals":"{{pli}} PLI, {{freezes}} freezes, {{loss}} loss","decoding":{"title":"Decoding","detail":"frames decode; the browser reported no loss signal to judge"},"healthy":{"title":"Healthy","detail":"connected, receiving and decoding: {{signals}}"},"dtls":{"title":"DTLS stuck (hub side)","detail":"ICE connected but DTLS stayed {{state}} — the hub never completed the handshake"}},"phase":{"idle":"Idle","active":"Active","watching":"Watching","loadShed":"Load-Shed","paused":"Paused"},"statusDot":{"disabled":"Disabled","online":"Online","recordingAlways":"Recording · always","recordingMotion":"Recording · on motion","offline":"Offline","offlineLastSeen":"Offline · last seen {{lastSeen}}"},"lastSeen":{"justNow":"just now","minutes":"{{count}}m ago","hours":"{{count}}h ago","days":"{{count}}d ago"},"natMapping":{"needTwo":"needs two STUN destinations to compare; only one was queried","noSrflx":"no server-reflexive candidate: STUN unreachable or blocked from this browser","symmetric":"one local socket got {{count}} different public mappings — symmetric NAT: only a TURN relay reaches this browser","confirmedSame":"two STUN destinations saw the same public mapping","likelySame":"one public mapping across the STUN destinations (the browser drops an identical second candidate, so the second answer cannot be told from no answer)"},"hlsQuality":{"level":"Level {{n}}","auto":"Auto"},"pipelineMirror":{"noSource":"no source entry","notInCatalog":"addon not in target catalog","noModel":"no compatible model for target format"},"sensor":{"presence":{"home":"Home","away":"Away"}},"providerEntryPills":{"status":{"ok":"OK","warning":"Warning","error":"Error","unknown":"Unknown"},"addProvider":"Add provider"},"configSecretField":{"removedOnSave":"Removed on save","cannotReveal":"This stored value cannot be revealed here — type to replace it"},"extensions":{"requestFailed":"the request failed"},"dataRecords":{"actionColumn":"Actions","badgeEntry":"Entry","badgeRecord":"Record","clearFilters":"Clear filters","colClass":"Class","colDatabase":"DB","colKind":"Kind","colRows":"Rows","colSize":"Est. size","colState":"State","colType":"Type","contentsEmpty":"Empty","contentsHasRows":"Has rows","contentsUnknown":"Count unknown","entryKindMissing":"This entry kind is not served by the entries service.","entryKindsFailed":"Could not load entry kinds","facetClass":"Class","facetContents":"Contents","facetDatabase":"Database","facetKind":"Kind","facetOwner":"Owner","facetState":"State","facetType":"Type","facetsLabel":"Filter record kinds","kindsFailed":"Could not load record kinds","manage":"Manage","noKindsDescription":"No addon has declared a record kind on this hub yet.","noKindsTitle":"No record kinds","noMatch":"No kinds match the filter","search":"Search kinds…","searchLabel":"Search record kinds","typeEntry":"Entries (editable)","typeRecord":"Records (read-only)","viewRows":"View rows"},"charts":{"noState":"nothing recorded","stateSummary":"{{title}}, {{from}} to {{to}}: {{parts}}","loading":"Loading…","empty":"Nothing was recorded in this window.","unknown":"unknown","seriesSummaryNoRange":"{{title}}: {{parts}}","seriesSummary":"{{title}}, {{from}} to {{to}}: {{parts}}","barSummary":"{{title}}, {{from}} to {{to}}: total {{total}}","total":"Total {{value}}"},"history":{"window":"Time window","window24h":"24 h","window7d":"7 d","window30d":"30 d","window1y":"1 y","windowCustom":"Custom","from":"From","to":"To","compare":"Compare with previous period","presenceUnknownTitle":"Could not reach the hub","presenceUnknown":"The hub did not say whether device history is installed. Try again in a moment.","absentTitle":"Device history is not running on this hub","absent":"Nothing is recorded until the device-history system addon is enabled.","listFailedTitle":"History could not be read","emptyTitle":"Nothing recorded for this device yet","empty":"A value appears here once it changes, or at the next five-minute check.","showHidden_one":"Show {{count}} hidden chart","showHidden_other":"Show {{count}} hidden charts","chartCount_one":"{{count}} chart","chartCount_other":"{{count}} charts","chartMenu":"Chart actions","openInHistory":"Open in History","hide":"Hide","state":{"open":"open","closed":"closed","online":"online","offline":"offline","detected":"detected","clear":"clear","on":"on","off":"off"},"previousOf":"{{label}} (previous period)","wholeFrame":"Whole frame","filterZone":"Zone","allZones":"All zones","filterClass":"Class","allClasses":"All classes","readFailed":"This history could not be read: {{error}}"},"consumableLevel":{"ok":"OK","low":"Low","empty":"Empty","full":"Full","unknown":"Unknown"}}`),helpers:JSON.parse(`{"ruleFormParsers":{"immediate":"Immediate","immediateHint":"Fires on the first matching detection of a track (lowest latency).","trackEnd":"Track end","trackEndHint":"Evaluates the finalised track record when it closes.","deviceEvent":"Device event","deviceEventHint":"Doorbell press, sensor state change, or an occupancy edge on a linked device.","packageEvent":"Package event","packageEventHint":"A parcel delivery or pick-up.","systemEvent":"System event","systemEventHint":"The installation itself: a camera or stream going offline, a node leaving the cluster, an addon or server update becoming available.","groupedHint":"Waits for subjects to be recognised, then sends one message with a mosaic, one picture per subject.","sec_all_label":"All rules","sec_all_blurb":"Every notification rule — event-driven and scheduled producers. Tabs filter this same list; pick the type under New rule when creating from here.","sec_all_new":"New rule","sec_all_empty":"No rules yet. Click \\"New rule\\" and pick a kind (Detection, Summary, Calendar events, …).","sec_detection_label":"Detections","sec_detection_blurb":"Rules driven by what the cameras SEE — detections, tracks and package events. Doorbell presses and other sensor changes have their own section now (operator ruling, 2026-10-01).","sec_detection_new":"New detection rule","sec_detection_empty":"No detection rules yet. Click \\"New detection rule\\" to author one.","sec_sensor_label":"Sensors","sec_sensor_blurb":"Rules driven by a device or sensor CHANGING STATE — a doorbell press, a linked sensor opening or closing. The picture is one snapshot of the camera the sensor is attributed to; there is no media choice to make.","sec_sensor_new":"New sensor rule","sec_sensor_empty":"No sensor rules yet. Click \\"New sensor rule\\" to be told when a doorbell is pressed or a linked sensor changes.","sec_audio_label":"Sound","sec_audio_blurb":"Rules on what the cameras HEAR: a sustained window of sound loud enough, or classified as one of the sounds you name. A sound rule is an immediate rule carrying the sound condition — it fires only on a confirmed sampling window, never on a picture.","sec_audio_new":"New sound rule","sec_audio_empty":"No sound rules yet. Click \\"New sound rule\\" — it opens on the sound condition already filled in with a level threshold, so you only have to name the sounds and the targets.","sec_occupancy_label":"Occupancy","sec_occupancy_blurb":"Rules on how many objects are in a camera frame or a zone, and for how long: \\"the driveway became occupied\\", \\"the garden emptied\\". An occupancy rule is a device-event rule carrying the occupancy condition.","sec_occupancy_new":"New occupancy rule","sec_occupancy_empty":"No occupancy rules yet. Click \\"New occupancy rule\\" — it opens on the occupancy condition; pick the camera on the Devices tab, then the zone and the count.","sec_deviceEvents_label":"Device events","sec_deviceEvents_blurb":"Rules about your devices: offline or back, switched off or on, a stream dropping, a battery or consumable running low, a camera detecting nothing. These carry no image.","sec_deviceEvents_new":"New device-event rule","sec_deviceEvents_empty":"No device-event rules yet. Click \\"New device-event rule\\" to be told when a device drops, a battery runs low or a camera goes blind.","sec_system_label":"System events","sec_system_blurb":"Rules about the installation itself: a node leaving the cluster, an addon crash-looping, an update available or installed, a backup or export finishing. These carry no image and are not tied to a detection.","sec_system_new":"New system rule","sec_system_empty":"No system rules yet. Click \\"New system rule\\" to be told when a node leaves, an update lands or a backup finishes.","sec_alarm_label":"Alarm","sec_alarm_blurb":"Rules about the alarm panel: arming, armed, triggered, disarmed, and the refusals in between.","sec_alarm_new":"New alarm rule","sec_alarm_empty":"No alarm rules yet. Click \\"New alarm rule\\" to be told when the alarm arms, goes off or is disarmed.","sec_mixed_label":"To recreate","sec_mixed_blurb":"System rules authored before the three families existed. Each mixes families and keeps firing as it is, but it cannot be edited: recreate it as one rule per family (Device events, System events, Alarm). Open none of them: Delete each once its replacements exist.","sec_mixed_new":"New rule","sec_mixed_empty":"Nothing to recreate.","scopeDevice":"Per device","scopeRule":"Whole rule (one window for every device)","granPerClass":"Separate windows per class (default)","granShared":"Shared across classes","linkedDefault":"Mosaic of every linked camera (default)","linkedMosaic":"Mosaic of every linked camera","linkedEach":"One image per camera (first camera where only one is allowed)","profileLowest":"Lowest available","profileLow":"Low","profileMid":"Medium","profileHigh":"High","srcAny":"Any source","srcPipeline":"Pipeline","srcOnboard":"Onboard (camera)","srcSensor":"Sensor","phaseDelivered":"Delivered","phasePickedUp":"Picked up","phaseBoth":"Both","stBoth":"It triggers and when it clears","stRaised":"Only when it triggers","stCleared":"Only when it clears","crossEnter":"Entering","crossExit":"Leaving","crossAny":"Entering or leaving","prioMin":"1 — Min","prioLow":"2 — Low","prioDefault":"3 — Default","prioHigh":"4 — High","prioMax":"5 — Max","speedDefault":"Default (2×)","speedReal":"1× — real time","cdNone":"No cooldown","cd1m":"1 minute","cd1h":"1 hour","cdHours_one":"{{count}} hour","cdHours_other":"{{count}} hours","cdMinutes_one":"{{count}} minute","cdMinutes_other":"{{count}} minutes","cdSeconds_one":"{{count}} second","cdSeconds_other":"{{count}} seconds","imageSceneBoxes":"Scene with boxes","imageSceneBoxesDesc":"The whole scene at the moment of the event: the subject outlined, every other tracked object outlined thin, each with its class and confidence.","imageCrop":"Subject crop","imageCropDesc":"The subject cut out of the frame at the moment of the event.","imageClean":"Clean scene","imageCleanDesc":"The whole scene at the moment of the event, with nothing drawn on it.","imageNone":"No image","imageNoneDesc":"Send the notification with no image."},"notificationRuleActions":{"onActivationTitle":"On activation","onActivationHint":"Runs when the rule is turned on.","onDeactivationTitle":"On deactivation","onDeactivationHint":"Runs when the rule is turned off.","onTriggerTitle":"On trigger","onTriggerHint":"Runs on a positive / raised match.","onTriggerOffTitle":"On trigger off","onTriggerOffHint":"Runs on a clear / leave match. Delivery types without a clear edge never fire this.","tooMany":"{{title}} has more than 4 bindings.","hookUnknownSeq":"{{title}} points at a sequence that does not exist.","dupButton":"Two buttons share the id \\"{{id}}\\". The id is what the audit line names when one is tapped.","buttonUnknownSeq":"\\"{{label}}\\" points at a sequence that does not exist. It would never appear on a notification.","newButtonLabel":"Action","icon_acknowledge":"Acknowledge","icon_dismiss":"Dismiss","icon_silence":"Silence","icon_snooze":"Snooze","icon_view":"View","icon_play":"Play","icon_camera":"Camera","icon_open":"Open","icon_close":"Close","icon_unlock":"Unlock","icon_lock":"Lock","icon_disarm":"Disarm","icon_arm":"Arm","icon_arm_home":"Arm — home","icon_arm_away":"Arm — away","icon_arm_night":"Arm — night","icon_light":"Light","icon_alert":"Alert","presetAlarm":"Trigger the alarm","presetAlarmHint":"Presses {{name}}. The panel's entry delay still runs, and a disarm during it cancels the alarm.","presetSiren":"Sound {{name}}","presetSirenHint":"On, {{seconds}} seconds, off."},"notificationRulesArea":{"sumLabel":"Summaries","sumBlurb":"One window, one picture: every camera's best moments as a single mosaic, delivered once when the window closes.","sumNew":"New summary","sumEmpty":"No summary rules yet. Use \\"New summary\\" (or pick Summary under New rule) to author one.","tlLabel":"Timelapses","tlBlurb":"A night of recorded footage, assembled into one short video per camera when the window closes.","tlNew":"New timelapse","tlEmpty":"No timelapse rules yet. Use \\"New timelapse\\" (or pick Timelapse under New rule) to author one.","calLabel":"Calendar events","calBlurb":"At schedule time, send the upcoming events from selected calendars for the next N days.","calNew":"New calendar events","calEmpty":"No calendar-events rules yet. Use \\"New calendar events\\" (or pick Calendar events under New rule) to author one.","opt_detection_label":"Detection","opt_detection_hint":"Fire on what the cameras see — detections, tracks and package events.","opt_sensor_label":"Sensor","opt_sensor_hint":"A doorbell press or linked sensor changing state.","opt_audio_label":"Sound","opt_audio_hint":"Sustained sound level or a named sound class.","opt_occupancy_label":"Occupancy","opt_occupancy_hint":"How many objects are in a frame or zone, and for how long.","opt_deviceEvents_label":"Device events","opt_deviceEvents_hint":"Offline, battery low, stream drop, camera blind.","opt_system_label":"System events","opt_system_hint":"Node, addon, update, backup or export events.","opt_alarm_label":"Alarm","opt_alarm_hint":"Arming, armed, triggered, disarmed.","opt_summary_label":"Summary","opt_summary_hint":"One mosaic of the best moments across cameras for a window.","opt_timelapse_label":"Timelapse","opt_timelapse_hint":"One short video per camera from recorded footage.","opt_calendarEvents_label":"Calendar events","opt_calendarEvents_hint":"Upcoming calendar events for the next N days, at schedule time."},"notificationSimulateHelpers":{"objectLabel":"Object detection","objectHint":"A detection on a live track — what an \\"Immediate\\" rule sees.","trackEndLabel":"Track end","trackEndHint":"A finalised track: importance, dwell and label confidence exist only here.","deviceEventLabel":"Device event","deviceEventHint":"A doorbell press or a linked sensor changing state.","packageEventLabel":"Package event","packageEventHint":"A parcel delivered or picked up.","audioEventLabel":"Audio event","audioEventHint":"A classified audio episode. Rides the Immediate delivery, gated by the audio classes.","occupancyEdgeLabel":"Occupancy edge","occupancyEdgeHint":"A zone count crossing its threshold. Rides the Device-event delivery.","caveatDevice":"This rule is gated on device #{{deviceId}} being in a given state. The gate reads the REAL device — put it in that state first, or the simulation fails closed exactly as production would.","caveatScene":"This rule is gated on a scene being {{state}}. The gate reads the scene's REAL state — put the scene in that state first (or reset it), or the simulation fails closed exactly as production would.","caveatZones":"This rule matches viewer-drawn polygons against the subject bbox. The bbox below is enabled but centred — move it over the polygon, or the condition fails.","dropped":"Dropped before evaluation ({{reason}}) — no rule was consulted.","noCandidates":"No enabled rule declares the \\"{{delivery}}\\" delivery, so nothing was evaluated.","noneMatched_one":"{{count}} candidate rule evaluated, none matched.","noneMatched_other":"{{count}} candidate rules evaluated, none matched.","ruleNoun_one":"rule","ruleNoun_other":"rules","notifNoun_one":"notification","notifNoun_other":"notifications","matchedSummary":"{{matched}} of {{candidates}} candidate $t(helpers.notificationSimulateHelpers.ruleNoun, {\\"count\\": {{candidates}}}) matched — {{enqueued}} $t(helpers.notificationSimulateHelpers.notifNoun, {\\"count\\": {{enqueued}}}) enqueued."},"eventsDebugTapes":{"actionFailed":"The action failed.","alreadyReleased":"This tape was already released.","notFound":"That tape no longer exists — it may have been released or deleted elsewhere.","pinsOwed":"Refused: this tape still names pins not yet taken back. Try again shortly — the ledger settles them automatically.","unavailable":"Unavailable on this node: {{reason}}","truncatedMarks":"Showing the first {{count}} marks — more exist for this window.","statusOff":"Off","statusRecording":"Recording","unknownReason":"unknown reason","statusRefused":"Refused: {{reason}}","statusFailing":"Failing: {{reason}}","statusUnknown":"Unknown: {{reason}}","sizeKb":"{{value}} KB","sizeMb":"{{value}} MB","exportUnknown":"This tape no longer exists on this node (unknown tape).","tapesUnavailable":"Tapes are unavailable on this node.","exportUnreadable":"The export could not be read (the tape may have just been released or deleted).","downloadFailed":"Download failed ({{status}})."},"compositionRows":{"fieldsUnavailable_one":"{{count}} field unavailable","fieldsUnavailable_other":"{{count}} fields unavailable","fieldsStale_one":"{{count}} field stale","fieldsStale_other":"{{count}} fields stale","noReason":"no reason recorded","running":"Running","degradedReason":"Running with a field handed back to the device; no reason recorded.","degraded":"Degraded","starting":"Starting","failed":"Failed","failedReason":"Failed with no reason recorded — check the composer logs.","notRunning":"Not running","notRunningReason":"Enabled but the composer is not running it.","off":"Off","unknown":"Unknown","unreachable":"The composer could not be asked: {{error}}","notReported":"Not reported yet","noRecord":"The composer holds no record of this block yet (stored status: {{stored}}).","featureOff":"{{cap}} (off)"},"recipeOps":{"rowGone":"that row is no longer there","selectTwo":"select at least two rows — a group of one is just the row","differentGroups":"those rows are in different groups — a group can only be made from rows side by side","rootGroup":"the root list cannot be grouped into itself","insideNot":"those rows are inside a NOT — remove it before grouping them","selectedGone":"one of the selected rows is no longer there","outerNotGroup":"the outer list is not a group — there is nothing to dissolve","groupGone":"that group is no longer there","rowIsCondition":"that row is a condition, not a group","noParent":"that group has no parent to dissolve into","groupInNot":"a group inside a NOT cannot be dissolved in place"},"coreBlockStatus":{"disabled":"Disabled","disabledDetail":"Not started — the block is turned off.","running":"Running","runningDetail":"One process, supervised.","starting":"Starting","startingDetail":"Waiting for the process to report ready.","failed":"Failed","failedDetail":"Failed with no reason recorded — check the node logs.","notRunning":"Not running","notRunningDetail":"Enabled but no process is running. The supervisor reconciles every 15s; if this persists, the node may not be running a block supervisor.","noBlocks":"No blocks yet.","blocks_one":"{{count}} block","blocks_other":"{{count}} blocks","runningCount":"{{count}} running","notRunningCount":"{{count}} NOT running"},"unifiedRulesModel":{"kind_detection":"Detection","kind_sensor":"Sensor","kind_sound":"Sound","kind_occupancy":"Occupancy","kind_device_events":"Device events","kind_system":"System","kind_alarm":"Alarm","kind_mixed":"To recreate","kind_summary":"Summary","kind_timelapse":"Timelapse","kind_calendar_events":"Calendar events"},"recipeParts":{"op_eq":"is","op_ne":"is not","op_gt":"is above","op_gte":"is at least","op_lt":"is below","op_lte":"is at most","op_contains":"contains","op_in":"is one of","trigger_device_state":"A device field changes","trigger_device_event":"An event happens","trigger_schedule":"On a schedule","trigger_manual":"Only when run by hand"},"notificationCalendarEvents":{"tab_basics":"Basics","tab_schedule":"Schedule","tab_calendars":"Calendars","tab_targets":"Targets","tab_template":"Template","scheduleAt":"At {{time}}{{more}}","horizon_one":"next {{count}} day","horizon_other":"next {{count}} days","calendars_one":"{{count}} calendar","calendars_other":"{{count}} calendars","allExcept":"all except {{count}}","allCalendars":"all calendars"},"notificationRuleStatus":{"lessThanMinute":"less than a minute","durMin":"{{count}} min","durH":"{{count}} h","durHMin":"{{hours}} h {{minutes}} min","durD":"{{count}} d","durDH":"{{days}} d {{hours}} h","sizeKb":"{{value}} kB","sizeMb":"{{value}} MB","sizeGb":"{{value}} GB","tlRendering":"{{camera}}: rendering for {{duration}} — the window {{from}} → {{to}}","tlNever":"{{camera}}: never produced a video yet","tlGone":"{{camera}}: last produced {{when}} — the video is no longer on the shelf","tlLast":"{{camera}}: last produced {{when}} · {{size}}"},"notificationSummaries":{"tab_rule":"Rule","tab_window":"Window","tab_content":"What goes in","tab_mosaic":"Mosaic","tab_delivery":"Delivery","winMotion":"Motion · {{quiet}} quiet · max {{max}}","winUnsupported":"Unsupported window ({{raw}}) — authored on a newer hub","winSchedule":"Schedule · {{schedule}}","allPassages":"All passages","filterNot":"not {{classes}}","filterZones_one":"{{count}} zone","filterZones_other":"{{count}} zones","filterImportance":"importance ≥ {{value}}","filterStay":"stay ≥ {{value}}","filterParked":"incl. parked"},"notificationAlarm":{"delayMin":"{{minutes}} min","delayMinSec":"{{minutes}} min {{seconds}} s","armsNothing":"Arms nothing — no enabled rule is gated on this mode.","allExcept":"All devices except {{count}}: {{names}}","everyDevice_one":"Every device — {{count}} rule with no device scope.","everyDevice_other":"Every device — {{count}} rules with no device scope.","noRestriction_one":"{{count}} rule, no device restriction.","noRestriction_other":"{{count}} rules, no device restriction.","skipped":"{{count}} excluded: {{parts}}","phaseOpen":"ignored until it closes","phaseClosed":"closed — monitored at next open"},"notificationRuleTest":{"dropped":"Nothing was evaluated ({{reason}}) — the event was dropped before any rule was consulted.","notCandidate":"This rule was not a candidate for a {{trigger}} event — check its trigger, and that it is enabled.","noMatchOwn":"The rule did not match the event built from its own conditions.","noMatchCond":"The rule did not match — the “{{condition}}” condition refused the event.","matchedNoQueue":"The rule matched, but no notification was queued: every target is opted out of it, or it addresses none.","stillLive":"with a live snapshot","stillUnavailable":"(the camera returned no snapshot, so it ships text-only)","stillUnattachable":"(this kind of rule carries no picture in production either)","notifNoun_one":"notification","notifNoun_other":"notifications","targetNoun_one":"target","targetNoun_other":"targets","matched":"Matched — {{queued}} $t(helpers.notificationRuleTest.notifNoun, {\\"count\\": {{queued}}}) queued to {{targets}} $t(helpers.notificationRuleTest.targetNoun, {\\"count\\": {{targets}}}){{still}}. It is marked [TEST] in the body.","unavailable":"unavailable","noneOpen":"none open","nothingToReport":"Nothing to report right now ({{reads}}) — nothing was sent, exactly as the scheduled summary would send nothing.","summaryNoQueue":"The summary was built, but no notification was queued: the rule reaches no target (its users are not admins, or every target is opted out).","perCategory":"one per category: {{sections}}","markedTest_one":"It is marked [TEST] in the body.","markedTest_other":"They are marked [TEST] in the body.","summaryBuilt":"Summary built now — {{queued}} $t(helpers.notificationRuleTest.notifNoun, {\\"count\\": {{queued}}}) queued{{perCategory}} to {{targets}} $t(helpers.notificationRuleTest.targetNoun, {\\"count\\": {{targets}}}). $t(helpers.notificationRuleTest.markedTest, {\\"count\\": {{queued}}})"},"notificationRuleLastRun":{"unknownError":"unknown error","notInDay_one":"Not in the last day","notInDay_other":"Not in the last {{count}} days","notInHour_one":"Not in the last hour","notInHour_other":"Not in the last {{count}} hours","notInMinute_one":"Not in the last minute","notInMinute_other":"Not in the last {{count}} minutes","noDelivery":"No delivery on record","notInWindow":"Not in the window read"},"notificationSystemEventDelivery":{"wd_mon":"Mon","wd_tue":"Tue","wd_wed":"Wed","wd_thu":"Thu","wd_fri":"Fri","wd_sat":"Sat","wd_sun":"Sun","dropped":"Left out by this rule's filters or a camera mute: {{parts}}."},"aiPage":{"appleDetailImages":"macOS {{version}} · text + images","appleDetailText":"macOS {{version}} · text only"},"notificationTestComposer":{"actionN":"Action {{n}}","presetText":"Test notification — text only.","presetImage":"Test notification with an image.","presetGif":"Test notification with an animation.","presetVideo":"Test notification with a video.","presetAudio":"Test notification with audio.","presetActions":"Test notification with action buttons.","presetCritical":"Critical test notification."},"ruleFormTabs":{"tab_rule":"Rule","tab_devices":"Devices","tab_conditions":"Conditions","tab_notification":"Notification","tab_actions":"Actions","tab_advanced":"Advanced","condSound":"Sound","condOccupancy":"Occupancy"},"pemFile":{"isCert":"This is a certificate, not a private key.","notKey":"Not a PEM private key — expected -----BEGIN … PRIVATE KEY-----.","encrypted":"The private key is password-protected. Export it without a passphrase.","isKey":"This is a private key, not a certificate.","notCert":"Not a PEM certificate — expected -----BEGIN CERTIFICATE-----.","certHasKey":"This file also contains a private key. Pick the certificate file, and the key in its own field."},"restartGate":{"saveFirstNoProcess":"Save the script first — there is no process to restart yet.","saving":"Saving…","restarting":"Restarting…","saveFirstDirty":"Save first — a restart now would run the last SAVED code, not what is on screen.","disabled":"This script is disabled. Enable it instead of restarting it."},"aiTestChat":{"providerError":"the provider returned an error","phaseImage":"fetching the picture…","phaseConnecting":"connecting to the provider…","phaseWaitUpTo":"the model is loading / thinking — a cold load can take minutes (up to {{seconds}}s)","phaseWait":"the model is loading / thinking — a cold load can take minutes","phaseAnswering":"answering…"},"addressTableModel":{"appConnectionsTitle":"App connections","appConnectionsHelp":"Addresses the CamStack apps try when connecting; tick several. Automatic: LAN addresses plus your public tunnel. Each LAN address also has an HTTPS row (the hub's secure port): a phone that trusts the hub's local certificate uses it, any other skips it — untick it to stop offering it.","notificationTapsTitle":"Notification taps","notificationTapsHelp":"Only where tapping a notification opens; one address. Automatic: the CamStack app link (opens the app if installed, otherwise the web app).","publicEndpointTitle":"Public endpoint","publicEndpointHelp":"Every link that must work away from home: sign-in, single sign-on and account linking, passkeys, and the buttons, attachments and admin links in notifications; one address. Automatic: your public tunnel, then Tailscale, then the LAN. Changing it invalidates registered passkeys.","internalTitle":"Internal","internalHelp":"Where other CamStack machines and LAN devices download addons, models and media from; one address. Automatic: the hub's LAN address."},"alarmNonblocking":{"refusedNoName":"Not armed — the hub refused without naming an open device.","refusedOpen":"Not armed — these are open:"},"notificationTimelapse":{"tab_rule":"Rule","tab_window":"Window","tab_sampling":"Sampling","tab_delivery":"Delivery"},"recipeFromCode":{"noLiteral":"this block carries no AUTOMATION_RECIPE literal","badJson":"the embedded recipe is not readable JSON: {{detail}}","schemaMismatch":"the embedded recipe does not match the recipe schema","schemaMismatchAt":"the embedded recipe does not match the recipe schema at {{path}}: {{message}}"},"connectivityModel":{"running":"running","stopped":"stopped"},"notificationTargets":{"copyOf":"{{name}} Copy","keepSecret":"•••••••• (leave blank to keep)"},"ruleFormState":{"snoozeHours":"{{count}} h","snoozeMin":"{{count}} min","summaryWarnNone":"This body names none of the summary ({{token}} or a section variable) — the hub appends {{token}} to it when it sends.","summaryWarnSplit":"Sent one per category: this body names no {{token}}, so on every other category’s notification the hub appends {{token}} (that category’s lines)."},"notificationDigest":{"noWindow":"No window","ago":"{{duration}} ago"},"notificationHistory":{"deletedRule":"Deleted rule ({{id}})","allRules":"All rules"},"notificationPrunes":{"lastDevice":"Disabled on {{when}}: its last device (#{{subject}}) was deleted.","lastTarget":"Disabled on {{when}}: its last delivery target ({{subject}}) was deleted."},"notificationTexts":{"pluralWarning":"This text has one form per count ({{categories}}). An override replaces all of them with a single sentence."},"automationEditor":{"incomplete":"this automation is not complete yet"},"buildExamples":{"blankDescription":"Minimal hello + timer disposer"},"classPickerItems":{"other":"Other"},"notificationSystemEvents":{"noneSelected":"No event selected"},"certificateModel":{"unknown":"Unknown","today":"today","inDays_one":"in {{count}} day","inDays_other":"in {{count}} days","daysAgo_one":"{{count}} day ago","daysAgo_other":"{{count}} days ago","nodeOffline":"The node is offline - it cannot be renewed now.","uploadedCert":"This certificate was uploaded by an operator. Replace it where it was uploaded (Network → Local access), or revert to the generated one there.","tlsDisabled":"TLS is disabled on the hub - there is no certificate.","stage":{"prepare":"asking the node for a key","issue":"issuing the new certificate","install":"installing it on the node","reconnect":"waiting for the node to reconnect","confirm":"confirming the node presents the new certificate"},"renewed":"{{nodeId}}: new cluster certificate {{serial}} installed; the previous one was revoked.","keptPrevious":"The node keeps its previous certificate - nothing was broken.","maybeNoCert":"The node may be without a valid certificate: check it and renew again.","renewalFailed":"{{nodeId}}: renewal failed while {{stage}} - {{reason}}. {{kept}}"},"nodesModel":{"hubReissued":"The hub's own cluster certificate is re-issued at every boot; there is nothing to renew or revoke.","noCertRecorded":"No cluster certificate is recorded for this node."},"brokerIdentitySchema":{"title":"Broker","kind":"Kind","name":"Name","namePlaceholder":"My Home Assistant","restore":"Restore a broker that was removed, under its original id","restoreHint":"Devices remember the broker id they were discovered under, so restoring the original id reconnects them instead of needing re-discovery. An id that is still in use is refused.","originalId":"Original broker id"},"detectionSettingsGroups":{"objectDetection":"Object detection","tracking":"Tracking","motion":"Motion","stationary":"Stationary","zones":"Zones","audio":"Audio","cluster":"Cluster"},"structuralTabs":{"overview":"Overview","config":"Config","customize":"Customize","detectionPipeline":"Detection pipeline","bindings":"Bindings","history":"History"},"authAuditWording":{"prefix":"Prefix {{prefix}}…","tokenCreated":"Admin token \\"{{name}}\\" created","expires":"Expires {{at}}","tokenUsed":"Admin token \\"{{name}}\\" used","call":"Call {{path}}","tokenRevoked":"Admin token \\"{{name}}\\" revoked","bulkNoun":{"shareLink":"share links","adminToken":"admin tokens","loginSession":"login sessions","credential":"credentials"},"bulkRevoked":"{{n}} {{noun}} revoked in bulk","skipped":"{{count}} skipped","ids":"Ids {{ids}}","secondFactorSkipped":"Second factor skipped on a trusted network","signedInWith":"Signed in with {{method}}","skippedFactors":"Skipped: {{factors}}","tokenMinted":"Token \\"{{name}}\\" created","anyTokenRevoked":"Token \\"{{name}}\\" revoked"},"sessionClient":{"unknownDevice":"Unknown device","browserOnSystem":"{{browser}} on {{system}}","method":{"password":"Password","passkey":"Passkey","sso":"Single sign-on","handoff":"App hand-off","exchange":"Session exchange"}},"relativeTime":{"justNow":"just now","secondsAgo":"{{count}}s ago","minutesAgo":"{{count}}m ago","hoursAgo":"{{count}}h ago","daysAgo":"{{count}}d ago","now":"now","inSeconds":"in {{count}}s","inMinutes":"in {{count}}m","inHours":"in {{count}}h","inDays":"in {{count}}d"},"eventEmitterFormat":{"buttonHeadline":"Button {{channel}} · {{eventType}}"},"backupDatabases":{"settings":{"label":"Configuration & files","short":"Settings","description":"Configuration database, addons, addon data and certificates. Nightly."},"events":{"label":"Events & detections","short":"Events","description":"Tracks, detections and notification history. Statistical: weekly is enough."},"history":{"label":"History (statistics)","short":"History","description":"Long-term statistics and ledgers. Statistical: weekly is enough."},"notCreated":"Created when this feature is enabled"},"customize":{"requestFailed":"the request failed"},"customizationRead":{"notAComposition":"block {{id}} is not a composition"},"liveValue":{"unreadable":"the value could not be read"},"customizationSave":{"notReadYet":"the customization has not been read yet — try again"},"assignmentAvailability":{"sensorsUnchecked":"camera sensors could not be checked"},"fieldsTableRows":{"composerNotReported":"the composer has not reported this customization yet","noValue":"the composer reports no value for this field","stateUnreadable":"the device state could not be read","notReported":"not reported"},"clusterUpdateAll":{"noAnswer":"no answer","unknown":"unknown","landed":"Connection dropped, and the node confirms the update landed (state {{state}}, running {{version}}).","unchanged":"Connection dropped and the node came back unchanged (still {{version}}, update still available). Nothing was staged.","unconfirmed":"Connection dropped and the node could not be confirmed after {{attempts}} attempts ({{error}}). It may be restarting — re-check this node."},"ssoReturn":{"signInFallback":"sign-in","notLinked":"This {{provider}} account is not linked to a CamStack user. Sign in normally and link it from your profile.","state":"That sign-in could not be finished here — it was started in another browser, or already used. Start it again from this page.","link":{"expired":"The link request expired or was already used. Press Link again.","provider":"The sign-in finished at a different provider than the one you chose. Press Link again.","session":"The sign-in did not finish in the browser session that started it. Sign in to CamStack here and press Link again.","conflict":"That sign-in account is already linked to another CamStack user.","state":"The sign-in could not be matched to this browser, or was already used. Press Link again.","failed":"Linking the sign-in account failed. Try again."}},"photoEnroll":{"refusal":{"noEmbedding":"Too small or too indistinct for the recognizer to measure — try a photo where this face is larger.","noModelId":"The recognizer did not report which model it used, so this face cannot be enrolled safely.","noAlignedCrop":"The recognizer produced no aligned crop for this face, so there is nothing to store.","magnitude":"Refused by the quality gate: the features look degenerate, and a sample like this matches everybody.","default":"This face is not usable as a sample."}},"photoEnrollBatch":{"newPersonNoName":"{{filename}}: face {{face}} is set to a new person but has no name.","photoFallback":"photo {{n}}","faceLabel":"{{filename}}, face {{face}}"},"searchItems":{"disabled":"{{addonId}} · disabled"},"fieldPreview":{"codeFields":"code fields arrive in slice 4","notReported":"{{path}} is not reported"},"mediaProvenance":{"standin":{"label":"stand-in","title":"Stand-in: this tile is a face or plate detail crop copied in because no frame of the subject was captured. It is not a best shot."},"raster":{"label":"low-res","title":"Raster crop: a sub-native cut of the subject, not a native capture. Honest, but lower resolution than a best shot."},"miss":{"noKeyFrame":"No key frame existed at close, so no native tile could be cut.","noBestSeenBbox":"No subject box was ever recorded, so there was nothing to cut around.","deriveReturnedNull":"The close-time crop was attempted and produced nothing.","deriveThrew":"The close-time crop failed with an error.","deriveNotWired":"No close-time crop was wired on this node.","noMediaStore":"The node was shutting down mid-close.","noThumbnail":"The track closed with no tile of any kind.","standinTile":"The track closed with a detail crop standing in for the subject.","rasterTile":"The track closed with a sub-native raster crop of the subject.","nativeTile":"The track closed with a native tile."}},"cameraSwitchRows":{"off":"Off: {{list}}","unknown":"Unknown: {{list}}","allOn":"All camera functions on"},"streamLabels":{"quality":"{{base}} Quality"},"autoTuneViewModel":{"sessions_one":"{{count}} session","sessions_other":"{{count}} sessions","capacity":"Capacity {{sessions}} ≥ min {{min}}.","tieFaster":"As accurate as {{over}} (within {{recall}} recall) and faster.","steppedDown":"{{from}} would not fit the load on {{limitedBy}}; {{to}} is the most accurate that does.","noFitLightest":"No model reaches {{min}} per device; the one with the most capacity ({{sessions}}) is used.","derivedLatency":"{{modelId}}: latency estimated from a similar chip, not measured on this one.","cpuDevice":"CPU fallback device: picked on its own.","deviceDisabled":"Disabled: not changed.","deviceUnavailable":"Not available on the node right now: not changed.","nodeOffline":"Node offline: nothing on it will change.","noHardwareFacts":"Hardware could not be read: nothing on this node will change.","noMeasuredData":"This hardware has no measured data: nothing on this node will change.","noFamilyBuild":"No YOLOv9 build for the {{format}} format: not changed.","keptCustomPin":"Custom model {{modelId}} is pinned on {{deviceKey}}: Auto tune skips this device.","customPinNode":"{{node}}: custom model {{modelId}} pinned on {{deviceKey}} — Auto tune skips this node device.","customRegistryUnreadable":"The custom-model registry could not be read ({{error}}): every pin to a model outside the measured catalog is kept.","latencyMeasured":"measured on this node, {{date}}","latencyEstimated":"estimated from {{hardware}} — benchmark this node to measure it","latencyTable":"from the latency table — benchmark this node to measure it"},"cameraCardModel":{"provisioningFailedWith":"Engine provisioning failed: {{error}}","provisioningFailed":"Engine provisioning failed on the detection node","blackHole":"Detection phase is ACTIVE but 0 fps are being processed — frames are not reaching the detector (cross-node black-hole signature)","unassigned":"Not placed on any detection node — no pipeline is running for this camera","statusUnreadable":"Could not read {{stages}} for this camera — those blocks are unknown, not empty (a switch read that failed does NOT mean nothing is switched off)","brokerStalled":"Broker profile \\"{{profile}}\\" reports streaming but 0 in-fps — the source pull may be stalled","sensorMissing":"Camera sensor {{addonId}}/{{stableId}} is missing","sensorOffline":"Camera sensor {{name}} (#{{deviceId}}) is {{reason}}","sensorUnsupported":"Camera sensor {{name}} (#{{deviceId}}) cannot drive motion: {{reason}}","sensorUnreadable":"Camera sensor {{addonId}}/{{stableId}} is unreadable: {{reason}}","sensorsUnreadable":"Camera sensors unreadable: {{reason}}","notEnforced":"Confirm / Replace cannot suppress this camera's own motion until its provider is updated","notForwardedOnboard":"Camera sensors are attached but never fire: add \\"Camera sensors\\" (onboard) to this camera's motion sources","notForwardedNoDetection":"Camera sensors are attached but never fire: this camera has no active detection","summaryUnavailable":"status unavailable from this node","summaryNone":"none attached","summaryUnknown":"unknown — {{reason}}","summaryUnsupported":"{{name}} (#{{deviceId}}) — unsupported"},"detectionSourceModel":{"badgeCameraAi":"Camera AI","badgeNoRoot":"No root","badgeIdle":"Idle","explainPipeline":"This node detects: the root step runs on decoded frames and every step below it applies.","explainOnboard":"The camera detects: its own boxes replace the root step, so the accelerator is not asked. The steps below it still run on crops from this node's frames.","explainNone":"No root detector: nothing is detected on this camera, so every video step below the root is idle.","geometryWhileStreaming":"Its boxes ride the stream that is already open, so they exist only while the camera is awake; between wake-ups it reports nothing.","geometryFlagOnly":"Its onboard AI reports a class with no bounding box, so it cannot be the root detector.","geometryUnknown":"This camera has not said whether its detections carry a bounding box; without one it cannot be the root detector.","noticeOnboard":"Not running here: this camera's own detector is the root, so this node's root step is never asked. These settings apply again if you switch the root detector back to this node.","noticeNoRoot":"Not running here: this camera has no root detector.","noticeIdle":"Idle: this camera has no root detector, so there is nothing for this step to work on."},"clusterSettingsSections":{"facesTitle":"Faces & recognition","facesHint":"The face encoder for every node, the smallest faces worth embedding, keeping and auto-assigning, and how a face is matched to a person.","semanticTitle":"Semantic search","semanticHint":"The image encoder behind \\"search by description\\". One for the whole cluster: changing it hides existing results until the index is rebuilt.","cropTitle":"Enrichment crop","cropHint":"How the crop handed to face, plate and search models is cut from the frame.","nativeTitle":"Full-resolution crops","nativeHint":"How long each camera keeps full-resolution pixels so a late crop (snapshot, face, plate) is sharp instead of cut from the small detection frame.","runnerTitle":"Runner defaults","runnerHint":"Values every node's detection runner and audio analyzer use. A node's own decode limits (Engine & decoder) take precedence.","loadTitle":"Load balancer","loadHint":"How a new detection session picks its node and device, and what happens when a node falls behind.","failoverTitle":"Failover","failoverHint":"What happens to cameras when a node disconnects and comes back."},"loadBalancingViewModel":{"stalePinDisabled":"{{deviceKey}} is not enabled on any node — sessions ignore this pin","stalePinMissing":"no node offers {{deviceKey}} — sessions ignore this pin","shareNote_one":"{{names}} cannot take sessions — its share goes to the others: {{into}}","shareNote_other":"{{names}} cannot take sessions — their shares go to the others: {{into}}","hardwareLabel":"Hardware","hardwareHint":"Each node’s share follows what its accelerators can carry at their Auto tune models, from the measured speed of its hardware. No load is measured or estimated.","benchmarkLabel":"Benchmark","benchmarkHint":"Each node’s share follows its own node-benchmark results. A node without results uses its hardware capacity instead, and says so.","manualLabel":"Manual","manualHint":"The sliders below, as you set them.","fallbackNone":"no benchmark results yet — sized from hardware","fallbackPartial":"benchmark results miss some of its accelerators — sized from hardware"},"locationCapacityBar":{"unknownSummary":"Capacity unknown — nothing measured this volume from here. A remote share, a location on another node, or a mount that did not answer.","unknownSummaryOwned":"Capacity unknown — nothing measured this volume from here. A remote share, a location on another node, or a mount that did not answer. CamStack holds {{size}} here.","reserveKept":"{{size}} kept free","ownedOfRecordings":"{{size}} of recordings ({{percent}})","capDrain":"{{size}} drain target (managed by CamStack)","capCap":"{{size}} cap (managed by CamStack)","summaryFree":"{{free}} free of {{total}} ({{percent}} free)","summaryOwned":"CamStack holds {{owned}}","summaryReserveShort":"{{reserve}} — less free than that right now, the oldest data here is being deleted","summaryCapBelow":"{{cap}} — already below what is stored here, the oldest is being deleted","legendKeptFree":"Kept free","legendCamstack":"CamStack","legendUsed":"Used","legendOtherData":"Other data","legendFree":"Free","legendDrainTarget":"Drain target","legendCap":"Cap","legendCapValue":"{{size}} · managed by CamStack"},"locationMode":{"activeLabel":"Active","activeConsequence":"New data is written here, and the oldest is deleted when the disk fills up.","readonlyLabel":"Read-only","readonlyConsequence":"Nothing new is written and nothing is ever deleted. A frozen archive that stays on the timeline.","drainLabel":"Drain","drainConsequence":"Nothing new is written. The oldest data here is deleted, a little at a time, until this location is empty.","disabledLabel":"Disabled","disabledConsequence":"Nothing is written and nothing is read: the footage stored here disappears from the timeline until you turn it back on. Nothing is deleted."},"locationProtection":{"unitGb":"GB to keep free","unitPercent":"% of the volume to keep free","targetDefault":"{{percent}}% of the volume (the default)","targetGb":"{{value}} GB","targetPercent":"{{value}}% of the volume","helpText":"CamStack keeps {{target}} free on this disk. As it fills up, the OLDEST data stored here is deleted to hold that much free space; if it cannot be held any more, new data goes to another location of the same type instead of filling the disk. Leave the value empty for the default ({{percent}}%)."},"keychainNotices":{"lockedKeyMissing":"no master key could be loaded","lockedWrongKey":"the master key does not match","lockedKeyFileUnreadable":"the key file cannot be read","lockedStoreUnavailable":"the keychain tables cannot be read","lockedNotInitialized":"still starting","lockedDecryptFailed":"a value did not decrypt","locked":"Keychain locked: {{reason}}","resetPending_one":"Keychain was reset: {{count}} field to re-enter","resetPending_other":"Keychain was reset: {{count}} fields to re-enter","resetDone":"Keychain was reset: every archived field holds a value again","sharesBackup":"The master key sits next to the database in whole-volume backups","recoveryKey":"No recovery copy of the master key has been taken","rotationPending":"The configured master key is not in use yet","orphans_one":"{{count}} stored value no setting points at","orphans_other":"{{count}} stored values no setting points at"},"keychainRevealHost":{"forbidden":"Only an admin can reveal a stored secret.","failedWith":"Could not reveal: {{message}}","failed":"Could not reveal the stored value."},"assignmentRows":{"cameraFallback":"Camera {{id}}","auto":"Auto","pinTo":"Pin → {{node}}"},"cameraActivity":{"active":"Active","recentlyActive":"Recently active","inactive":"Inactive"},"exportFormat":{"expired":"expired","inMinutes":"in {{n}}m","inHours":"in {{n}}h","inDays":"in {{n}}d"},"maxCameras":{"label":"Max cameras","description":"Hard cap on cameras the balancer may assign to this node.","unlimited":"Unlimited"},"cameraDisk":{"defaultRoot":"default root"},"aiProfileForm":{"temperature":"Temperature","temperatureHint":"The judging gates pin this to 0 per call regardless of the profile.","topP":"Top-p","topK":"Top-k","maxTokens":"Max output tokens","contextLength":"Context length","contextLengthHint":"Advisory: the provider enforces its own window.","systemPrompt":"Default system prompt","systemPromptHint":"A caller that sends its own system prompt REPLACES this one.","timeoutTotal":"Total (ms)","timeoutTotalHint":"The whole generation. The only bound a non-streaming call has.","timeoutConnect":"Connect (ms)","timeoutConnectHint":"The TCP handshake — \\"is the port even open\\".","timeoutFirstToken":"First token (ms)","timeoutFirstTokenHint":"Accepted but silent. A cold model load lives here and can take minutes.","timeoutIdle":"Idle (ms)","timeoutIdleHint":"Output started, then stopped.","retry":"Retry on failure","retryHint":"Per-consumer policy still wins: the notification gates never retry.","retryMaxAttempts":"Max attempts","toolsEnabled":"Enable tools","toolsEnabledHint":"Lets this profile make tool calls. No tools are registered yet.","generation":"Generation","bounds":"Timeouts and policy"}}`),history:{picker:{series:`Series`,unit:`Unit`,subject:`Source`,devices:`Devices`,nodes:`Nodes`,room:`Room`,noRoom:`No room`,metricType:`Unit`,noUnit:`States & counts`,search:`Search device, room, metric or node…`,searchLabel:`Search series`,facets:`Filters`,clear:`Clear`,count:`{{count}} of {{max}} selected`,loading:`Reading the series of every device…`,emptyFiltered:`No series match these filters.`,empty:`Nothing is recorded yet.`,selectPage:`Select every series on this page`,title:`Series`,wholeFrame:`Whole frame`},page:{emptyTitle:`Pick series to compare`,emptyHint:`Choose up to 24 series on the left, or start from a panel above.`,readFailed:`History could not be read`,someFailed:`Some series could not be read`,lines:`Measurements`,energy:`Energy`,states:`States`,saveTitle:`Save as panel`,saveName:`Panel name`,save:`Save`,deleteTitle:`Delete panel`,deleteMessage:`The panel "{{name}}" is removed from your account.`,delete:`Delete`,title:`History`,subtitle:`What devices, nodes and storage recorded over time, side by side.`,presenceUnknownTitle:`Could not reach the hub`,presenceUnknown:`The hub did not say whether device history is installed. Try again in a moment.`,absentTitle:`Device history is not running on this hub`,absent:`Nothing is recorded until the device-history system addon is enabled.`,panels:`Panels`,deleteNamed:`Delete panel {{name}}`,overlay:`Overlay`,clear:`Clear`,missing_one:`{{count}} selected series is no longer recorded.`,missing_other:`{{count}} selected series are no longer recorded.`},panels:{energy:`Total energy`,temperatures:`Temperatures by room`,nodes:`Cluster nodes`,storage:`Storage locations`},orphans:{deviceRemoved:`#{{id}} (removed)`,deviceId:`#{{id}}`,undeclared:`No longer declared`,deviceGone:`Device removed`,colSeries:`Series`,colReason:`Reason`,colSpan:`Recorded`,colResult:`Result`,deleted_one:`Deleted · {{points}} point`,deleted_other:`Deleted · {{points}} points`,refusedNotOrphan:`Kept: no longer orphan`,refusedNotFound:`Already gone`,refusedFailed:`The hub could not delete it`,requestFailed:`Not sent: {{message}}`,confirmTitle_one:`Delete {{count}} series`,confirmTitle_other:`Delete {{count}} series`,confirmMessage:`Every recorded point of these series is removed from the hub. This cannot be undone.`,confirmLabel:`Delete`,title:`Series no longer linked to a device`,intro:`Nothing records into these series any more: their device was removed, or no capability declares them now. Select the ones to delete.`,truncated:`More series are unlinked than are listed here. Delete these, then load the rest.`,loadAgain:`Load again`,summary_one:`{{count}} series deleted ({{points}} points), {{refused}} kept.`,summary_other:`{{count}} series deleted ({{points}} points), {{refused}} kept.`,empty:`Every series is linked to a device.`,selectAll:`Select every listed series`,selected_one:`{{count}} selected`,selected_other:`{{count}} selected`,close:`Close`,deleteSelected:`Delete selected`,checkFailedTitle:`Could not check for unlinked series`,noticeMore_one:`More than {{count}} series are no longer linked to a device.`,noticeMore_other:`More than {{count}} series are no longer linked to a device.`,notice_one:`{{count}} series is no longer linked to a device.`,notice_other:`{{count}} series are no longer linked to a device.`,review:`Review`,since:`since {{date}}`,colRaw:`Raw points`,col5m:`5 min`,col1h:`1 h`,col1d:`1 day`}},releaseIdentity:{both:`{{product}} · server {{server}}`,serverOnly:`server {{version}}`,fallback:`v{{version}}`},helper:JSON.parse(`{"group":{"readings":"Readings","binary":"Binary sensors","actuators":"Actuators","appliances":"Appliances","history":"History","math":"Math"},"template":{"temperature":"Temperature","temperatureSummary":"Average, lowest, highest or total of several temperature sensors.","humidity":"Humidity","humiditySummary":"Average, lowest, highest or total of several humidity sensors.","pressure":"Pressure","pressureSummary":"Average, lowest, highest or total of several pressure sensors.","illuminance":"Illuminance","illuminanceSummary":"Average, lowest, highest or total of several light sensors.","power":"Power","powerSummary":"Total, average, lowest or highest of several power readings.","energy":"Energy","energySummary":"Total, average, lowest or highest of several energy readings.","battery":"Battery","batterySummary":"Average, lowest or highest charge of several batteries.","numeric":"Numeric","numericSummary":"Average, lowest, highest or total of sensors that share one kind of reading.","motion":"Motion","motionSummary":"On when any (or all) of the motion sensors detect motion.","contact":"Contact","contactSummary":"On when any (or all) of the contacts are open.","leak":"Leak","leakSummary":"On when any (or all) of the leak sensors detect water.","smoke":"Smoke","smokeSummary":"On when any (or all) of the smoke sensors detect smoke.","occupancy":"Occupancy","occupancySummary":"On when any (or all) of the sensors say someone is there.","binary":"Binary","binarySummary":"On when any (or all) of the sensors are on.","switch":"Switch group","switchSummary":"On when at least one is on, or only when every one is. Offline members stay out of that decision and still receive the command.","light":"Light group","lightSummary":"Same as a switch group. Brightness and colour appear only when every light has them.","appliance":"Appliance from a smart plug","applianceSummary":"One power reading. Running while power stays above a threshold, long enough that a wash pause is not the end of the cycle.","statistic":"Statistics","integral":"Energy from power","threshold":"Threshold","sum":"Sum","difference":"Difference","ratio":"Ratio","expression":"Expression","derivative":"Rate of change","fan":"Fan","cover":"Cover","valve":"Valve","lock":"Lock","media-player":"Media player","climate":"Climate","fanSummary":"Same as a switch group. Speed, preset, direction and oscillation appear only when every fan has them.","coverSummary":"Open when at least one cover is open, or only when all are. Position and tilt appear only when every cover has them.","valveSummary":"Open when at least one valve is open, or only when all are. Position appears only when every valve has it.","lockSummary":"Locked when at least one lock is locked, or only when all are. Unlocking the group always asks for a confirmation.","media-playerSummary":"Playing when at least one player is playing, or only when all are. Volume appears only when every player has it.","climateSummary":"Running when at least one device is not off, or only when all are. Target temperature and fan appear only when every device has them."},"aggregate":{"mean":"Mean","median":"Median","min":"Minimum","max":"Maximum","sum":"Sum","any":"Any","all":"All"},"blank":"Blank composition","newHelper":"New helper","back":"Back","next":"Next","save":"Save","step":{"template":"Choose what the helper reports.","parameters":"Name it and choose how members combine.","members":"Choose the members.","appliance":"Name it and choose the appliance.","applianceMembers":"Choose the plug's power reading.","historyParameters":"Choose the range and name it.","historySource":"Choose the reading.","math":{"threshold":{"parameters":"Set the two edges, the optional delays and a name.","members":"Pick the one reading to watch."},"arithmetic":{"parameters":"Give it a name.","members":"Pick the readings. They must measure the same quantity."},"expression":{"parameters":"Choose what it publishes and name it.","members":"Pick the readings, name them, then write the formula."},"derivative":{"parameters":"Choose the window and the unit of time, and name it.","members":"Pick the one reading, which must keep a history."}}},"reducer":"Combine by","name":"Name","room":"Room","pickMembers":"Members","pickMembersHint":"Select a device to see its current reading.","maxMembers":"A group can include at most {{max}} members.","noUsableValue":"This device does not report a value this helper can use.","valueUnknown":"Unknown","checking":"Checking the helper…","unreadable":"This helper cannot be opened as its template.","statusTitle":"Group","outputPending":"Reading the value…","outputUnavailable":"Could not read the helper","noReading":"No reading","on":"On","off":"Off","reporting":"{{included}} of {{total}} members reporting","reportingPending":"Checking how many members are reporting…","reportingAbsent":"The member count has not arrived yet.","excluded":"Left out","excludedPending":"Reading which members are left out…","excludedUnnamed":"Some members are left out, and their names are not in this reading.","offlineCounted":"Sensors that are offline are left out and counted.","criterion":"Active when","active":{"at-least-one":"At least one is on","all":"All are on"},"sharedCaps":"Shared controls","sharedPending":"Checking what every member can do.","sharedUnavailable":"A member's capabilities could not be read.","sharedNone":"No optional control is shared by every member.","commandTitle":"Last command","commandNone":"No command sent yet.","commandOk":"Sent","commandFailed":"Failed","cap":{"switch":"Switch","brightness":"Brightness","color":"Colour","fan-control":"Fan controls","cover":"Cover controls","valve":"Valve controls","lock-control":"Lock controls","media-player":"Player controls","climate-control":"Climate controls"},"mode":{"light-color-rgb":"Colour","light-color-hsv":"Hue","light-color-mired":"White"},"newComposition":"New composition","saveOpen":"Save and open device","saveMore":"Save and create more","created":"<device>{{name}}</device> was created.","supportedOperations":"Supported operations","detailsOf":"Details for {{name}}","devicePending":"The new device is not in the list yet.","noTemplates":"No helper types are available.","newTitle":{"temperature":"New temperature sensor","humidity":"New humidity sensor","pressure":"New pressure sensor","illuminance":"New light sensor","power":"New power meter","energy":"New energy meter","battery":"New battery sensor","numeric":"New numeric sensor","motion":"New motion sensor","contact":"New contact sensor","leak":"New leak sensor","smoke":"New smoke sensor","occupancy":"New occupancy sensor","binary":"New binary sensor","switch":"New switch group","light":"New light group","washer":"New washing machine","dryer":"New dryer","dishwasher":"New dishwasher","statistic":"New statistics","integral":"New energy meter","threshold":"New threshold","sum":"New sum","difference":"New difference","ratio":"New ratio","expression":"New expression","derivative":"New rate of change","fan":"New fan group","cover":"New cover group","valve":"New valve group","lock":"New lock group","media-player":"New media player group","climate":"New climate group"},"appliance":{"washer":"Washing machine","dryer":"Dryer","dishwasher":"Dishwasher"},"applianceType":"Appliance","threshold":"Threshold (W)","startDwell":"Starts after (min)","stopDwell":"Stops after (min)","detail":{"statistic":"Minimum, maximum, time-weighted mean, sum, count or change over a range, read from history. Sum is for a counter; a gauge's sum is the integral.","integral":"Power becomes energy. A flow becomes volume. Any other instantaneous reading becomes a meter in unit-seconds, growing until the reset.","history":"The source must record history. A gap is left out and is never counted as zero. The range cannot be longer than that history is kept.","threshold":"Turns on when a reading reaches the high edge and off when it falls to the low edge, and holds in between so it does not flicker. Optional delays wait before each change.","sum":"Adds readings of the same quantity. An input that is offline or unknown is left out and counted, never read as zero.","difference":"The first reading minus the second, both of the same quantity. If either is unknown the result is unknown.","ratio":"The first reading over the second, as a plain number. A zero or unknown second reading gives unknown, never infinity.","expression":"Your own formula over named readings, for anything the other tiles do not cover.","expressionStale":"Unlike the groups, an expression keeps using an input's last value when that input goes offline.","derivative":"How fast a reading rises or falls over a window, per second, minute or hour.","lockConfirm":"Unlocking the group always asks for a confirmation, and nothing is sent without it."},"stat":"Statistic","statName":{"min":"Minimum","max":"Maximum","mean":"Mean","sum":"Sum","count":"Count","change":"Change"},"range":"Range","rangeKind":{"rolling":"Rolling","calendar":"Calendar"},"span":"Length","spanName":{"1h":"1 hour","24h":"24 hours","2d":"2 days","7d":"7 days","30d":"30 days","custom":"Custom"},"period":"Period","periodName":{"today":"Today","yesterday":"Yesterday","this-week":"This week","this-month":"This month"},"reset":"Reset","resetName":{"never":"Never","daily":"Daily","weekly":"Weekly","monthly":"Monthly"},"customMinutes":"Minutes","noHistory":"This reading has no history, so it cannot be the source.","output":"Reading","gaps":"{{count}} intervals were left out","hint":{"threshold":"Exactly one reading.","sum":"Two or more readings of one quantity.","difference":"Exactly two readings. The first is the one subtracted from.","ratio":"Exactly two readings. The first is divided by the second."},"highEdge":"Turn on at or above","lowEdge":"Turn off at or below","onDelay":"Wait before turning on (seconds)","offDelay":"Wait before turning off (seconds)","edgesReversed":"The turn-off value is above the turn-on value.","per":"Rate per","perName":{"second":"Second","minute":"Minute","hour":"Hour"},"exprOutput":"It publishes","exprOutputName":{"number":"A number","boolean":"A yes or no"},"inputName":"Input name","expr":"Formula","method":{"switch":{"setState":"On or off"},"brightness":{"setBrightness":"Brightness"},"color":{"setColor":"Colour"},"fan-control":{"setPercentage":"Speed","setPreset":"Preset","setDirection":"Direction","setOscillating":"Oscillation"},"cover":{"open":"Open","close":"Close","stop":"Stop","setPosition":"Position","setTiltPosition":"Tilt"},"valve":{"open":"Open","close":"Close","setPosition":"Position"},"lock-control":{"lock":"Lock","unlock":"Unlock"},"media-player":{"play":"Play","pause":"Pause","setVolume":"Volume"},"climate-control":{"setMode":"Mode","setTarget":"Target temperature","setFanMode":"Fan"}},"state":{"cover":{"on":"Open","off":"Closed"},"valve":{"on":"Open","off":"Closed"},"lock":{"on":"Locked","off":"Unlocked"},"media-player":{"on":"Playing","off":"Not playing"},"climate":{"on":"Running","off":"Off"}},"lockAll":"Lock all","unlockAll":"Unlock all","unlockTitle":"Unlock every lock in this group?","unlockBody":"Every lock in the group will be told to unlock. A lock that cannot be reached is reported and the rest still unlock.","unlockConfirm":"Unlock all"}`),pageRequires:{unknownTitle:`Could not check whether this page is available`,unknown:`The hub did not answer the capability check. Reload the page to try again.`,absentTitle:`{{page}} is not installed`,absentDescription:`The addon that provides this page is not installed. Install it from System → Addons.`,openAddons:`Open Addons`}},ee={nav:{integrations:`Integrazioni`,metrics:`Metriche`,detectionSection:`Detection`,detectionIntelligence:`Persone`,vehicles:`Veicoli`,events:`Libreria`,library:`Libreria`,clusterSection:`Cluster`,nodes:`Nodi`,pipeline:`Pipeline`,addonPages:`Pagine degli addon`,build:`Costruisci`,devices:`Dispositivi`,locations:`Posizioni`,recordings:`Registrazioni`,viewer:`Viewer`,history:`Cronologia`,notInstalled:`{{page}} — non installato`},system:JSON.parse(`{"title":"Amministrazione","addons":"Addon","agents":"Agenti","processes":"Processi","logs":"Log","users":"Utenti","settings":"Impostazioni","repl":"REPL","models":"Modelli","integrations":"Connettività","serverManagement":"Server","systemNav":"Sistema","secrets":"Segreti","reconnectOverlay":{"frameworkUpdated":"Framework aggiornato","isNow":"{{packageName}} è ora {{fromTo}}.","serverRestarted":"Server riavviato","manualRestartByCompleted":"Riavvio manuale richiesto da {{requestedBy}} completato.","manualRestartCompleted":"Riavvio manuale completato."},"access":{"loginSessions":"Sessioni di accesso","linkedApps":"App collegate","tokens":"Token","signInLinks":"Link di accesso","audit":"Audit","credentialKinds":"Tipi di credenziali","newToken":"Nuovo token"},"addressesCard":{"address":"Indirizzo","noneNoTunnelOrTailscale":"nessuno (niente tunnel né Tailscale)","alsoAddedAsACustom":"aggiunto anche come indirizzo personalizzato","unlikelyUsable":"Probabilmente inutilizzabile","kind":"Tipo","inUseAutomatically":"{{title}}: in uso automaticamente. {{help}}","thisAddressCannotBeUsed":"Questo indirizzo non può essere usato per questo scopo.","remove":"Rimuovi {{baseUrl}}","removeThisCustomAddressIts":"Rimuovi questo indirizzo personalizzato (i suoi ruoli diventano automatici)","addresses":"Indirizzi","everyAddressThisHubIs":"Ogni indirizzo con cui questo hub è raggiungibile, rilevato o aggiunto da te. Spunta a cosa serve ciascuno.","whatAreRoles":"Cosa sono i ruoli?","automatic":"(automatico)","setByYou":"(impostato da te)","useAutomatic":"Usa automatico","useHttpAnyway":"Usa comunque http","noAddressesAvailable":"Nessun indirizzo disponibile.","customAddress":"Indirizzo personalizzato","labelOptional":"Etichetta (facoltativa)","customAddressLabel":"Etichetta indirizzo personalizzato","addCustomAddress":"Aggiungi indirizzo personalizzato","kindIpv4":"IPv4","kindIpv6":"IPv6","kindPublic":"Pubblico","kindAppLink":"Link app","kindCustom":"Personalizzato","kindLoopback":"Loopback"},"aiModelPicker":{"unslothQwen3635bA3b":"unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_M","sizeGb":"{{value}} GB"},"aiProfilesTab":{"toggle":"attiva/disattiva {{name}}","testOk":"{{text}} ({{tokens}} tok, {{ms}}ms)"},"aiTestChat":{"tokMs":"{{model}} · {{value2}} tok · {{value3}} ms","sentToTheModel":"inviato al modello"},"authentication":{"authenticationProviders":"Provider di autenticazione","about":"Informazioni","setupSteps":"Passaggi di configurazione","myAccess":"Il mio accesso","users":"Utenti","pageViaActionsRemove2fa":"pagina tramite Azioni → “Rimuovi 2FA”.","sectionTitle":"Autenticazione","sectionSubtitle":"Provider di accesso (password locale, OIDC, SAML) e provider del secondo fattore (passkey / WebAuthn). Funzionano in parallelo — abilita o disabilita ciascuno in modo indipendente; disabilitarne uno rimuove solo quel metodo, l'accesso con password locale non cambia.","sectionEmptyTitle":"Nessun provider di autenticazione registrato","sectionEmptyDescription":"L'autenticazione locale dovrebbe essere sempre disponibile — se questo elenco è vuoto il built-in local-auth non si è registrato. Controlla la pagina Addon per errori di caricamento.","sectionInstall":"Aggiungi provider","totpNote":"TOTP / 2FA è in autoservizio: ogni utente si registra dalla propria pagina del profilo — <access>Il mio accesso</access> → Accesso e sicurezza → “Autenticazione a due fattori” → Abilita 2FA. Gli admin possono solo rimuovere la registrazione attiva di un utente (dispositivo perso) dalla pagina <users>Utenti</users> tramite Azioni → “Rimuovi 2FA”."},"backup":{"restartServerNow":"Riavviare il server ora?","activeConnectionsWillDropAnd":"Le connessioni attive cadranno e l'hook di applicazione del backup verrà eseguito prima dell'avvio.","restart":"Riavvia","backUpNow":"Esegui backup ora","restore":"Ripristina…","newEntry":"Nuova voce","restoreScheduledRestartTheServer":"Ripristino pianificato. Riavvia il server per applicarlo.","restartNow":"Riavvia ora"},"capabilities":{"isNowActive":"{{capName}} → {{addonId}} è ora attivo.","nowInheritsTheGlobalDefault":"{{capName}} @ {{nodeId}} ora eredita il valore predefinito globale.","providerSEnabled":"{{capName}}: {{length}} provider abilitati.","capabilities":"Capability","chooseWhichProviderIsActive":"Scegli quale provider è attivo per ogni capability di sistema. Le capability singleton scelgono esattamente un provider; quelle di tipo collezione ne abilitano un insieme.","failedToLoadCapabilities":"Impossibile caricare le capability","unknownError":"Errore sconosciuto","noCapabilitiesRegistered":"Nessuna capability registrata.","singletonPickOneProvider":"Singleton — scegli un provider","collectionEnableASet":"Collezione — abilita un insieme","failedToSet":"Impossibile impostare {{cap}}: {{error}}","failedToSetOnNode":"Impossibile impostare {{cap}} @ {{node}}: {{error}}","failedToClearOnNode":"Impossibile rimuovere {{cap}} @ {{node}}: {{error}}","failedToUpdate":"Impossibile aggiornare {{cap}}: {{error}}","providerHub":"{{addonId}} (hub)"},"capabilityCatalog":{"installed":"Installato","install":"Installa","couldNotSearchTheNpm":"Impossibile cercare nel catalogo npm in questo momento. Riprova tra un attimo.","searchingTheNpmCatalog":"Ricerca nel catalogo npm…","noPublishedAddonDeclaresThe":"Nessun addon pubblicato dichiara la capability \\"{{capability}}\\".","everyPublishedAddonThatDeclares":"Ogni addon pubblicato che dichiara \\"{{capability}}\\" è già installato.","availableToInstall":"Disponibili per l'installazione"},"localAccess":{"lanHttp":"HTTP in LAN","nativeAppsOnThisWi":"Le app native su questa rete Wi-Fi usano http:// e saltano il certificato privato. Il tunnel e questa UI di amministrazione restano su HTTPS.","certificate":"Certificato","certificateMoved":"Il certificato HTTPS e la CA locale si gestiscono in","certificateMovedLink":"Identità → Certificati","couldNotReadTlsStatus":"Impossibile leggere lo stato TLS.","certificateReissue":"Riemissione del certificato","restartRequired":"Riavvio necessario","theHttpsListenerStillServes":"Il listener HTTPS serve ancora il certificato precedente. Riavvia l'hub per applicarlo.","mode":"Modalità","validTo":"Valido fino al","leafSha256":"SHA-256 foglia","caSha256":"SHA-256 CA","issuerNotIncludedInThe":"Emittente non incluso nel caricamento (non è la CA locale)","regenerate":"Rigenera","issueANewLeaf":"Emettere un nuovo certificato foglia?","issuesANewLeafUnder":"Emette un nuovo certificato foglia sotto la CA locale corrente. I client che si fidano della CA continuano a funzionare. Il listener HTTPS si ricarica.","upload":"Carica","downloadCa":"Scarica CA","revertToGenerated":"Torna al generato","dropTheUploadedCertificate":"Scartare il certificato caricato?","revert":"Ripristina","certificateOrFullChainPem":"Certificato o catena completa (PEM)","privateKeyPem":"Chiave privata (PEM)","saveCertificate":"Salva certificato","uploadFailed":"Caricamento fallito","caPemRequired":"CA (PEM) - obbligatoria salvo che il certificato provenga da una CA pubblica","keepsTheUploadedPair":"Torna alla CA locale generata. Il certificato caricato e la sua CA restano conservati qui: puoi selezionarli di nuovo.","revertTitle":"Tornare al certificato generato?","useUploaded":"Usa il certificato caricato","useUploadedTitle":"Servire di nuovo il certificato conservato?","useUploadedDescription":"Il certificato caricato e conservato sostituisce quello generato sul listener HTTPS. Il certificato generato resta conservato.","caMissingTitle":"CA mancante - i dispositivi non possono fidarsi di questo hub","caMissingBody":"Il certificato caricato non è emesso da una CA pubblica e con esso non è stata conservata nessuna CA, quindi Scarica CA non ha nulla da fornire. Carica di nuovo il certificato insieme alla sua CA (per mkcert, il rootCA.pem nella cartella indicata da \`mkcert -CAROOT\`).","caReplacedTitle":"La CA locale è stata sostituita - reinstallala sui tuoi dispositivi","caReplacedBody":"La CA locale precedente non aveva vincoli di nome: se la sua chiave fosse trapelata avrebbe potuto garantire per qualsiasi sito web. L'hub ora usa una CA limitata a indirizzi privati e nomi locali. Scaricala di nuovo e rendila attendibile su ogni telefono e computer che usava la vecchia (sostituita {{when}}).","storedUpload":"Caricamento conservato","storedUploadValue":"valido fino al {{validTo}}, {{ca}}","storedUploadWithCa":"con la sua CA","storedUploadNoCa":"senza CA"},"logging":{"logDestinations":"Destinazioni dei log","destinations":"Destinazioni","everyRegisteredLogDestinationEntries":"Ogni destinazione di log registrata. Le voci vengono inviate a tutte le destinazioni abilitate contemporaneamente — abilitarne una non ne disabilita un'altra.","noLogDestinationsRegistered":"Nessuna destinazione di log registrata","thisShouldNotHappenThe":"Non dovrebbe succedere — le destinazioni console e file a rotazione sono integrate. Se l'elenco è vuoto, il nodo è ancora in avvio."},"meshNetworks":{"meshNetworks":"Reti mesh","addMesh":"Aggiungi mesh","status":"Stato","meshNetworks2":"Reti mesh","privateVpnMeshesThatConnect":"Mesh VPN private che collegano CamStack ai tuoi altri dispositivi (Tailscale, Headscale, …). Ogni provider può anche esporre questo hub pubblicamente tramite il suo ingress (Tailscale Funnel).","noMeshNetworkProvidersInstalled":"Nessun provider di rete mesh installato","installAMeshAddonE":"Installa un addon mesh (es. @camstack/addon-tailscale) per unire questo hub a una mesh VPN privata.","joined":"Unito","notJoined":"Non unito","disconnect":"Disconnetti","logOut":"Esci","connect":"Connetti","endpoints":"Endpoint","tenant":"Tenant","user":"Utente","controlPlane":"Control plane","meshIp":"IP mesh","magicdns":"MagicDNS","dnsSuffix":"Suffisso DNS","peers":"Peer","keyExpiry":"Scadenza chiave","hostname":"Hostname","unknown":"(sconosciuto)","copyMagicdns":"Copia MagicDNS","copyIp":"Copia IP","connection":"Connessione","routes":"Route","txRx":"TX / RX","lastSeen":"Ultimo accesso","noPeersVisibleYourTailnet":"Nessun peer visibile — il tuo tailnet potrebbe essere vuoto o l'host non è unito.","expiredAgo":"Scaduto {{when}}","expiryDays":"tra {{count}} giorni","expiryHours":"tra {{count}}h","expiryMin":"tra {{count}} min","justNow":"proprio ora","agoMin":"{{count}}m fa","agoHour":"{{count}}h fa","agoDay":"{{count}}g fa"},"networkAddresses":{"pinWhichHostInterfacesExist":"Fissa quali interfacce dell'host esistono, poi spunta a cosa serve ciascun indirizzo. Aggiungi un indirizzo personalizzato quando questo hub è raggiungibile a uno che non riesce a rilevare.","allowedAddresses":"Indirizzi consentiti","reRunTheAutoDetection":"Riesegui il rilevamento automatico e sovrascrivi la lista consentita corrente con le corrispondenze migliori.","detecting":"Rilevamento…","bestMatch":"Migliore corrispondenza","clear":"Svuota","discard":"Scarta","saving":"Salvataggio…","autoEveryNonLoopbackNon":"Auto — partecipa ogni interfaccia non loopback e non link-local.","pinned":"{{value1}} fissati","loadingInterfaces":"Caricamento interfacce…","noInterfacesDetected":"Nessuna interfaccia rilevata."},"networkDiagnostics":{"loadingCameras":"Caricamento telecamere…","noCameras":"Nessuna telecamera","pickACamera":"Scegli una telecamera","camera":"Telecamera"},"notificationAlarm":{"couldNotChangeFor":"Impossibile modificare {{name}} per {{value2}}: {{error}}","alarm":"Allarme","panelDelaysAndModeCoverage":"Ritardi del pannello e copertura delle modalità.","alarmSettingsAreNotAvailable":"Le impostazioni dell'allarme non sono disponibili","thisHubHasNotBeen":"Questo hub non è ancora stato aggiornato per servire la configurazione dell'allarme.","thisInstallationHasNoAlarm":"Questa installazione non ha un pannello allarme. Il pannello viene creato dal Centro notifiche sull'hub — se questo è l'hub, la creazione è fallita e il log del server ne spiega il motivo.","thePanelWhatEachMode":"Il pannello, cosa arma ogni modalità e chi ne viene informato.","couldNotSave":"Impossibile salvare","couldNotUpdateProfile":"Impossibile aggiornare il profilo","notApplied":"Non applicato","theHubDidNotApply":"L'hub non ha applicato questa modifica — un altro editor potrebbe averla cambiata, oppure l'hub richiede un aggiornamento","refused":"Salvataggio di {{name}} ({{mode}}) in corso — attendi che finisca.","notLanded":"L'hub non ha applicato questa modifica — un altro editor potrebbe averla cambiata, oppure l'hub richiede un aggiornamento ({{name}}, {{mode}})."},"notificationCalendarEventsEditor":{"newCalendarEvents":"Nuovi eventi del calendario","basics":"Generale","name":"Nome","horizonDays":"Orizzonte (giorni)","priority":"Priorità","enabled":"Abilitata","deliverWhenEmpty":"Invia anche se vuoto","schedule":"Pianificazione","oneSendTimePerRow":"Un orario di invio per riga. Il riepilogo parte a quel minuto.","calendars":"Calendari","targets":"Target","template":"Modello","optionalLeaveBlankForThe":"Facoltativo. Lascia vuoto per il corpo predefinito del riepilogo (domani in evidenza, poi i giorni successivi). Variabili:","title":"Titolo","body":"Corpo","templateVars":"{{ruleVar}}, {{countVar}}, {{horizonVar}}, {{eventsVar}}."},"notificationCalendarEventsPage":{"calendarEventsRulesAreNot":"Le regole per eventi del calendario non sono disponibili su questo hub","theHubAnsweredSomethingThis":"L'hub ha risposto con qualcosa che questa versione dell'admin non comprende. Aggiorna entrambi e ricarica.","thisHubHasNotBeen":"Questo hub non è ancora stato aggiornato per servire le regole per eventi del calendario. Distribuisci addon-post-analysis e ricarica — le regole stesse non sono toccate.","couldNotDeleteTheRule":"Impossibile eliminare la regola","noCalendarEventsRulesYet":"Ancora nessuna regola per eventi del calendario — creane una e i prossimi eventi arriveranno secondo la pianificazione.","calendarEvents":"Eventi del calendario","newCalendarEvents":"Nuovi eventi del calendario","rule":"Regola","when":"Quando","horizon":"Orizzonte","calendars":"Calendari","targets":"Target","lastRun":"Ultima esecuzione","on":"Attiva","toggle":"attiva/disattiva {{name}}","deleteThisCalendarEventsRule":"Eliminare questa regola per eventi del calendario?","thisWillPermanentlyDeleteThis":"Eliminerà definitivamente \\"{{name}}\\". Questa azione non può essere annullata.","delete":"elimina {{name}}"},"notificationHistory":{"body":"Corpo","when":"Quando","status":"Stato","rule":"Regola","device":"Dispositivo","kind":"Tipo","deliveryHistory":"Cronologia degli invii","aSearchableLogOfEvery":"Un registro consultabile di ogni notifica che le regole hanno inviato (o non sono riuscite a inviare).","camera":"Telecamera","allCameras":"Tutte le telecamere","window":"Intervallo","limit":"Limite","deliveryHistoryRequiresAServer":"La cronologia degli invii richiede un aggiornamento del server","theHistoryQueryIsNot":"La query della cronologia non è ancora disponibile su questo hub. Lo diventerà quando il prossimo aggiornamento del server includerà l'endpoint della cronologia del centro notifiche. Nel frattempo le regole continuano a inviare e a registrare l'esito.","noDeliveriesMatchTheseFilters":"Nessun invio corrisponde a questi filtri.","notification":"Notifica","detail":"Dettaglio","windowLastHour":"Ultima ora","windowLast24h":"Ultime 24 ore","windowLast7d":"Ultimi 7 giorni","windowAllTime":"Sempre","statusAny":"Qualsiasi stato","statusPending":"In attesa","statusSent":"Inviata","statusDead":"Fallita","cameraFallback":"Telecamera #{{deviceId}}"},"notificationProducerRules":{"couldNotDeleteTheRule":"Impossibile eliminare la regola","theTestRunFailed":"L'esecuzione del test è fallita","whichCamera":"Quale telecamera","nothingWasProduced":"Non è stato prodotto nulla:","dismiss":"Chiudi","summaryUnavailableTitle":"Le regole di riepilogo non sono disponibili su questo hub","summaryUnavailableMessage":"Questo hub non è ancora stato aggiornato per gestire le regole di riepilogo. Distribuisci addon-post-analysis e ricarica — nel frattempo non si perde nulla.","timelapseUnavailableTitle":"Le regole timelapse non sono disponibili su questo hub","timelapseUnavailableMessage":"Questo hub non è ancora stato aggiornato per gestire le regole timelapse. Distribuisci addon-post-analysis e ricarica — le regole in sé non sono toccate.","calendarEventsUnavailableTitle":"Le regole degli eventi del calendario non sono disponibili su questo hub","calendarEventsUnavailableMessage":"Questo hub non è ancora stato aggiornato per gestire le regole degli eventi del calendario. Distribuisci addon-post-analysis e ricarica — le regole in sé non sono toccate.","unreadableMessage":"L'hub ha risposto qualcosa che questa versione dell'admin non capisce. Aggiorna entrambi e ricarica.","digestCount_one":"{{count}} riepilogo","digestCount_other":"{{count}} riepiloghi","tileCount_one":"{{count}} riquadro","tileCount_other":"{{count}} riquadri","cameraCount_one":"{{count}} telecamera","cameraCount_other":"{{count}} telecamere","tracksMatched_one":"{{count}} traccia corrispondente","tracksMatched_other":"{{count}} tracce corrispondenti","notificationsSent_one":"{{count}} notifica inviata","notificationsSent_other":"{{count}} notifiche inviate","videoCount_one":"{{count}} video","videoCount_other":"{{count}} video","summaryProduced":"Generati {{digests}} — {{tiles}} da {{cameras}}, {{matched}}, {{sent}}.","droppedStationary_one":"{{count}} oggetto parcheggiato escluso.","droppedStationary_other":"{{count}} oggetti parcheggiati esclusi.","timelapseProduced":"Generati {{videos}}, {{sent}}.","timelapseProducedCoverage":"Generati {{videos}} — il {{percent}}% della finestra aveva filmati, {{sent}}."},"notificationRuleActions":{"buttonsOnTheNotification":"Pulsanti sulla notifica","eachButtonRunsOneShared":"Ogni pulsante esegue una sequenza condivisa quando viene toccato.","createASequenceOnThe":"Crea prima una sequenza nella scheda Sequenze — un pulsante ne esegue una, non definisce i propri passaggi.","noButtonsTheNotificationArrives":"Nessun pulsante. La notifica arriva senza nulla da toccare.","nothingOnThisEdge":"Nulla su questo collegamento.","sequence":"Sequenza","id":"Id","label":"Etichetta","icon":"Icona","button":"Pulsante","singleAction":"Azione singola","buttonLinkNote":"Il link di un pulsante viaggia dentro la notifica. Il link è l'unica autorità: chiunque abbia la notifica può eseguire il pulsante <b>una volta</b>, entro 15 minuti."},"notificationRuleColumns":{"rule":"Regola","trigger":"Trigger","targets":"Target","lastRun":"Ultima esecuzione","priority":"Priorità","on":"Attiva","toggle":"attiva/disattiva {{name}}","openInTheSimulatorDescribe":"Apri nel simulatore — descrivi un evento e regolalo prima di iniettarlo","simulate":"simula {{name}}","duplicate":"Duplica","recreateAsOneRulePer":"Ricrea come una regola per famiglia","events":"Eventi","scope":"Ambito","cooldown":"Cooldown"},"notificationRuleConditions":{"addValue":"Aggiungi valore…","anyPhase":"— qualsiasi fase —","authoredElsewhereAndPreservedThis":"Creata altrove e conservata — questo editor admin non può ancora modificarla.","notEditableHereYetThis":"Non ancora modificabile qui — questa condizione non ha un editor admin."},"notificationRuleLastRun":{"lastRunLoading":"Caricamento ultima esecuzione","lastRunCouldNotBe":"Impossibile leggere l'ultima esecuzione: {{reason}}","historyThisRuleSDeliveries":"Cronologia — gli invii di questa regola","historyOf":"cronologia di {{name}}"},"notificationRuleSnoozeControl":{"thisRuleConcernsOrTriggers":"Questa regola riguarda — o attiva — il pannello allarme, quindi nessuna finestra di posticipo può silenziarla.","silenceThisRuleForIt":"Silenzia questa regola per {{value1}} — comparirà in \\"Silenziate ora\\"","snooze":"posticipa {{ruleName}}","silenceThisRuleNow":"Silenzia questa regola ora","opensARealSnoozeWindow":"Apre subito una vera finestra di posticipo — diversa dai pulsanti qui sopra, che scelgono solo le durate offerte dalla NOTIFICA di questa regola. Compare in \\"Silenziate ora\\" e da lì si può terminare."},"notificationRuleStatus":{"nextWindowOpens":"La prossima finestra si apre {{value1}}","noFurtherWindowOpensIn":"Nessuna altra finestra si apre nei prossimi nove giorni","settled":"generato {{minutes}} min dopo la chiusura, così i filmati si sono assestati","cameraFallback":"telecamera {{deviceId}}"},"notificationRuleTestButton":{"testNowFiresThisRule":"Testa ora — attiva questa regola e invia davvero la notifica","testNow":"testa {{ruleName}} ora","testNow2":"Testa ora"},"notificationRules":{"newRule":"Nuova regola","rules":"Regole","failedToLoadRules":"Impossibile caricare le regole","unknownError":"Errore sconosciuto","noRulesYet":"Ancora nessuna regola.","chooseARuleType":"Scegli un tipo di regola","edit":"Modifica {{name}}","newNotificationRule":"Nuova regola di notifica","saveChanges":"Salva modifiche","createRule":"Crea regola","name":"Nome","eGFrontDoorPackage":"es. Pacco alla porta d'ingresso","enabled":"Abilitata","trigger":"Trigger","deliveryTargets":"Target di consegna","noDeliveryTargetsConfiguredAdd":"Nessun target di consegna configurato. Aggiungine prima uno nella scheda Target.","notifyUsers":"Notifica gli utenti","deliversToTheTargetsEach":"Invia ai target di ciascun utente, solo per le telecamere a cui quell'utente ha accesso.","noUsersToNotify":"Nessun utente da notificare.","searchUsers":"Cerca utenti…","cooldownSeconds":"Cooldown (secondi)","aCameraThatFlapsOr":"Una telecamera che va e viene, o un nodo che si riconnette ogni minuto, altrimenti invierebbe una notifica a ogni oscillazione. Il cooldown è l'intervallo minimo tra due invii di questa regola.","theShortestGapBetweenTwo":"L'intervallo minimo tra due invii di questa regola, conteggiato come scelto qui sotto.","cooldownCounted":"Conteggio del cooldown","perDeviceADeliveryAbout":"Per dispositivo: un invio su una telecamera (o nodo) non ne blocca un altro. Intera regola: un invio per cooldown, qualunque dispositivo abbia corrisposto.","acrossObjectClasses":"Tra le classi di oggetti","separateDefaultADogAfter":"Separato (predefinito): un cane dopo un gatto viene inviato subito, un secondo gatto attende. Condiviso: un gatto blocca il cane successivo per la durata del cooldown. I suoni contano sempre per classe.","allowGlobalSnooze":"consenti posticipo globale","anyoneMaySnoozeThisRule":"Chiunque può posticipare questa regola per tutti","aSnoozeIsPersonalBy":"Un posticipo è personale per impostazione predefinita — silenzia solo chi lo ha impostato. Attivalo per una regola in cui silenziare l'intera famiglia è legittimo (il giardiniere è qui tutto il pomeriggio). Gli admin possono sempre farlo.","snoozeButtons":"Pulsanti di posticipo","notSetTheNotificationOffers":"Non impostato — la notifica offre i valori predefiniti ({{value1}}). Una pausa aperta da un pulsante silenzia questa telecamera per questa classe di soggetto, solo per chi ha ricevuto la notifica, e non invia alcun riepilogo.","noSnoozeButtonsOnThis":"Nessun pulsante di posticipo su questa regola. È una scelta esplicita: la notifica non può essere silenziata dalla schermata di blocco.","fourAtMostEverySnooze":"Al massimo quattro. Ogni pulsante di posticipo toglie spazio ai pulsanti di azione della regola — ntfy ne accetta tre in totale.","backToTheDefaults":"Torna ai valori predefiniti","silenceItNow":"Silenzia ora","priority":"Priorità","aSystemEventCarriesNo":"Un evento di sistema non porta immagini: non c'è alcun frame di telecamera dietro \\"un nodo è andato offline\\". Questa regola invia solo testo.","attachAGifAroundThe":"Allega una GIF attorno all'evento","attachAnMp4ClipAround":"Allega una clip MP4 attorno all'evento","videoQuality":"Qualità video","aNotificationIsWatchedOn":"Una notifica si guarda su un telefono — di norma lo stream più leggero è quello giusto, e il profilo alto costa solo CPU per il rendering.","playbackSpeed":"Velocità di riproduzione","aNotificationClipIsGlanced":"Una clip di notifica si guarda al volo, non si guarda per intero: a 2× il destinatario vede l'intero passaggio in metà tempo e il file pesa la metà. Il tempo reale serve quando il dettaglio conta più del colpo d'occhio.","linkedCameras":"Telecamere collegate","whenTheSensorIsLinked":"Quando il sensore è collegato a più telecamere, tutte vengono fotografate nel momento in cui scatta. Le telecamere offline o in sospensione sono escluse.","notificationTitle":"Titolo della notifica","notificationBody":"Corpo della notifica","leaveBothBlankForThe":"Lascia vuoti entrambi per usare il testo dell'hub (modificabile nella scheda Testi).","whichSystemEvents":"Quali eventi di sistema","conditions":"Condizioni","thisIsASoundRule":"Questa è una regola AUDIO: scatta su una finestra di campionamento audio confermata, mai su un'immagine. Indica i suoni e/o mantieni una soglia di livello — senza nessuno dei due non può mai corrispondere. Tutto il resto qui sotto si combina comunque (ambito telecamere, pianificazione).","thisIsAnOccupancyRule":"Questa è una regola di OCCUPAZIONE: scatta quando il conteggio in un'inquadratura o in una zona supera la soglia e vi resta. Scegli prima la telecamera nella scheda Dispositivi — l'elenco delle zone è quello di quella telecamera.","pickTheEventsThisRule":"Scegli gli eventi a cui reagisce questa regola, poi restringili se vuoi. Nient'altro in una regola di sistema è una condizione — dietro non c'è alcuna detection.","conditionCatalogUnavailableThisRule":"Catalogo condizioni non disponibile — questa regola corrisponde solo in base al suo trigger e ai target.","testThisRuleForReal":"Testa questa regola per davvero","buildsTheEventThisRule":"Costruisce l'evento a cui si riferisce questa regola, esegue la valutazione e l'invio REALI, e manda la notifica a ogni target — con [TEST] nel corpo. Il cooldown e il silenziamento della telecamera sono ignorati (nessuna finestra viene consumata); le azioni della regola non vengono mai eseguite. Solo condizioni salvate: salva prima per testare una modifica.","testRule":"Testa regola","dryRunLast60Min":"Simulazione (ultimi 60 min)","evaluateTheCurrentUnsavedRule":"Valuta la regola CORRENTE (non salvata) sui record persistiti di recente — nessuna notifica viene inviata.","rule":"Regola","targets":"Target","deviceEventRulesCannotBe":"Le regole per eventi di dispositivo non possono essere simulate: l'archivio degli eventi dei sensori non ha una superficie di scansione tra dispositivi, quindi un test non restituisce record candidati. La regola continua a scattare dal vivo alla pressione di un campanello o al cambio di un sensore corrispondente.","noRecordsInTheLast":"Nessun record negli ultimi 60 minuti corrisponde — niente da valutare.","savingDrops_one":"Salvando viene scartata {{count}} condizione che questo tipo di regola non può usare:","savingDrops_other":"Salvando vengono scartate {{count}} condizioni che questo tipo di regola non può usare:","cooldownRange":"Qualsiasi numero intero da 0 (consegna ogni corrispondenza) a {{max}} (24 ore).","unsupportedTrigger":"Questa regola usa il trigger <code>{{trigger}}</code>, che questa versione dell'interfaccia admin non sa creare. È mostrata esattamente come memorizzata e nulla qui può modificarla — modificarla con un editor che non conosce il trigger la riscriverebbe. Aggiorna il bundle del server, oppure modifica questa regola dall'app viewer.","wouldFire_one":"{{firing}} su {{count}} record valutato scatterebbe.","wouldFire_other":"{{firing}} su {{count}} record valutati scatterebbero.","targetsFallback":"target","objectFallback":"oggetto","notificationImage":"Immagine","showTriggerZone":"Disegna la zona che ha attivato la regola","showTriggerZoneHelp":"Evidenzia la zona sulla scena. Non viene disegnata su un ritaglio del soggetto.","showSubjectPath":"Mostra il percorso del soggetto","showSubjectPathHelp":"Disegna la linea percorsa dal soggetto fino al momento della foto. Su un ritaglio, solo la parte al suo interno.","askVerdict":"Chiedimi di confermare le rilevazioni","askVerdictAria":"chiedimi di confermare le rilevazioni","askVerdictHint":"La notifica porta Corretto e Sbagliato. Un tocco segna la rilevazione per il riaddestramento, lo stesso segno della Libreria, e registra a chi è stato chiesto e quando. I canali senza pulsanti (email, Pushover, Gotify, WhatsApp, Discord) ricevono le stesse due scelte come link."},"notificationSequences":{"name":"Nome","minDelayS":"Ritardo min. (s)","step":"Passaggio","steps":"Passaggi","deleteThisSequence":"Eliminare questa sequenza?","willBeRemovedRulesAnd":"“{{name}}” verrà rimossa. Le regole e i pulsanti collegati mantengono l'id finché non li riassegni.","delete":"Elimina {{name}}","sequences":"Sequenze","namedStepListsSharedBy":"Elenchi di passaggi con nome condivisi da regole e pulsanti di notifica. Una regola ne usa uno tramite id; due regole che condividono un gate ne condividono il throttle.","couldNotReadSequences":"Impossibile leggere le sequenze","noSequencesYetCreateOne":"Ancora nessuna sequenza. Creane una, poi collegala dalla scheda Azioni di una regola.","edit":"Modifica {{value1}}","newSequence":"Nuova sequenza","saving":"Salvataggio…","seconds":"Secondi","stepDo":"Esegui","stepWait":"Attendi","stepsLabel_one":"{{count}} passo","stepsLabel_other":"{{count}} passi","stepsDelay_one":"{{count}} passo · ritardo min {{delay}}s","stepsDelay_other":"{{count}} passi · ritardo min {{delay}}s"},"notificationSimulate":{"simulateAnEvent":"Simula un evento","injectASyntheticDetectionDoorbell":"Inietta una detection sintetica, la pressione di un campanello o un cambio di occupazione e vedi esattamente quali regole corrispondono, su quale condizione ciascuna fallisce e cosa verrebbe inviato. Nulla viene salvato — nessuna track, nessuna riga evento, nessun media.","failedToLoadCameras":"Impossibile caricare le telecamere","unknownError":"Errore sconosciuto","ruleToSimulate":"Regola da simulare","pickARuleToPrefill":"— scegli una regola per precompilare trigger e condizioni —","picksTheTriggerThatRule":"Sceglie il trigger a cui la regola è in ascolto e compila i campi dalle sue condizioni. Modifica qualsiasi valore qui sotto, poi inietta.","camera":"Telecamera","loadingCameras":"Caricamento telecamere…","pickACamera":"— scegli una telecamera —","theCameraTheEventIs":"La telecamera a cui è attribuito l'evento — ciò che mostra una notifica.","trigger":"Trigger","quality":"Qualità","everyFieldHereCanBe":"Ogni campo qui può essere lasciato VUOTO, e vuoto è uno stato reale: una regola con confidenza minima FALLISCE su un soggetto che non ne ha. Lascia un campo vuoto per riprodurre esattamente questo caso.","labelIdentityNamePlateSubclass":"Etichetta (nome identità / targa / sottoclasse)","eGMarcoAb123cd":"es. Marco, AB123CD","detectionConfidence":"Confidenza della detection","labelMatchConfidence":"Confidenza di corrispondenza dell'etichetta","importance":"Importanza","dwellSeconds":"Permanenza (secondi)","howToRunIt":"Come eseguirlo","ignoreTheCooldown":"Ignora il cooldown","aRuleThatAlreadyFired":"Una regola scattata da poco di norma viene silenziata. Attiva per farla scattare comunque; lascia disattivato per VEDERE la soppressione.","ignoreMutesAndSnoozes":"Ignora silenziamenti e posticipi","aMutedCameraOrA":"Una telecamera silenziata o una regola posticipata scarta l'evento prima di consultare qualsiasi regola.","runTheRuleSActions":"Esegui le azioni della regola — aziona dispositivi reali","aMatchedRuleSOntrigger":"Le sequenze onTrigger di una regola corrispondente vengono eseguite davvero: le serrature si aprono, le luci si accendono, le sirene suonano. Disattivato a meno che non lo vuoi davvero.","stillImage":"Immagine fissa","liveSnapshotOfTheCamera":"Snapshot live della telecamera","noImage":"Nessuna immagine","evaluateOnlyOneRule":"Valuta solo una regola","everyEnabledRule":"— tutte le regole abilitate —","nothingIsPersistedNoTrack":"Nulla viene salvato: nessuna track, nessuna riga evento, nessun media archiviato. L'invio è reale.","injectEvent":"Inietta evento","theHubAnsweredButThis":"L'hub ha risposto, ma questa versione non è riuscita a leggere la risposta. È così che appare un hub più vecchio del simulatore — aggiorna il server, poi riesegui.","seededFrom":"Precompilato dalla regola <b>{{rule}}</b>. Verrà valutata solo quella regola — deseleziona \\"Valuta una sola regola\\" qui sotto per eseguire l'intero insieme di regole.","onlyRulesWhoseTrigger":"Sono candidate solo le regole il cui trigger è <b>{{delivery}}</b>.","ruleNotInList":"La regola <code>{{id}}</code> non è nell'elenco attuale — potrebbe essere stata eliminata. L'esecuzione non troverà alcuna candidata."},"notificationSimulateFields":{"whatHappened":"Cosa è successo","audioClasses":"Classi audio","audioClassId":"Id classe audio…","zones":"Zone","detectedClasses":"Classi rilevate","classIdPersonCar":"Id classe (person, car…)","zonesTheSubjectIsIn":"Zone in cui si trova il soggetto","packagePhase":"Fase del pacco","none":"— nessuna —","delivered":"Consegnato","pickedUp":"Ritirato","eventKind":"Tipo di evento","loadingKinds":"Caricamento tipi…","pickAKind":"— scegli un tipo —","pickACameraFirstSensor":"Scegli prima una telecamera — i tipi di sensore e di controllo provengono dai dispositivi collegati.","thisCameraHasNoLinked":"Questa telecamera non ha sensori o dispositivi di controllo collegati, quindi non può produrre eventi di dispositivo. Collegane uno prima dalla pagina della telecamera.","sourceDevice":"Dispositivo sorgente","theCameraItself":"la telecamera stessa","theLinkedDeviceWhoseState":"Il dispositivo collegato il cui stato è cambiato. Compilato automaticamente quando scegli un tipo.","filledInFromContributedBy":"Compilato da \\"{{label}}\\" — fornito dal dispositivo #{{deviceId}} tramite la capability {{capName}}.","eventTypeToken":"Token del tipo di evento","pressPressLong":"press, press_long…","onlyEventEmitterSourcesCarry":"Solo le sorgenti che emettono eventi ne hanno uno. Un sensore passivo non ne emette, e una regola che filtra su un token fallirebbe per esso.","zone":"Zona","leaveEmptyForTheWhole":"Lascia vuoto per l'intera inquadratura.","class":"Classe","anyClass":"— qualsiasi classe —","countNow":"Conteggio attuale","countBefore":"Conteggio precedente","threshold":"Soglia","occupied":"Occupato","advanced":"Avanzate","zoneCrossing":"attraversamento di zona","thisEventIsAConfirmed":"Questo evento è un attraversamento di zona confermato","enteredTheZone":"Entrato nella zona","leftTheZone":"Uscito dalla zona","boundingBox":"bounding box","carryABoundingBox":"Includi una bounding box","normalized01TopLeft":"Normalizzata 0–1, origine in alto a sinistra. Alimenta la condizione \`customZones\` e decide come l'immagine viene ritagliata o riquadrata.","happenedAt":"Avvenuto alle","set":"Imposta","now":"Adesso","emptyNowSetItTo":"Vuoto = adesso. Impostalo a un orario dentro (o fuori) la finestra di pianificazione di una regola per testarla senza aspettare l'ora.","detectionSource":"Sorgente della detection","unsetReadsAsPipeline":"— non impostata (equivale a pipeline) —","pipeline":"Pipeline","onboardCamera":"A bordo (telecamera)","sensor":"Sensore","audio":"Audio","actuatesDevices":"aziona dispositivi","occupiedLabel":"occupato"},"notificationSimulateResult":{"copyRecordId":"Copia id record","didNotMatchTheEngine":"Nessuna corrispondenza. Il motore non ha riportato alcun id di condizione fallita.","noRuleEvaluated":"Nessuna regola è stata valutata. O nessuna regola abilitata dichiara la consegna <b>{{delivery}}</b>, oppure quelle che lo fanno sono state filtrate prima della valutazione — le note sopra dicono quale.","failingCondition":"Non corrisponde — prima condizione non soddisfatta <code>{{condition}}</code>.","enqueued_one":"{{count}} riga di outbox accodata","enqueued_other":"{{count}} righe di outbox accodate","noTargetResolved":"nessun target risolto, quindi nulla verrà consegnato","matchedOn":"corrisponde su: {{on}}","delivery":"consegna <b>{{value}}</b>","candidates":"candidate <b>{{value}}</b>","still":"ancora <b>{{value}}</b>","droppedBy":"scartata: {{by}}"},"notificationSnoozes":{"silencedRightNow":"Silenziate ora","nothingIsSilencedASnooze":"Nulla è silenziato. Un posticipo aperto dall'app o da un pulsante di notifica compare qui finché il suo timer non scade.","noSummary":"nessun riepilogo","endNow":"Termina ora","setBy":"impostato da {{user}} · {{remaining}}","remEnding":"in scadenza","remMin":"{{count}}m rimasti","remHour":"{{count}}h rimaste","remHourMin":"{{hours}}h {{minutes}}m rimasti"},"notificationSummaries":{"summaryRulesAreNotAvailable":"Le regole di riepilogo non sono disponibili su questo hub","theHubAnsweredSomethingThis":"L'hub ha risposto con qualcosa che questa versione dell'admin non comprende. Aggiorna entrambi e ricarica.","thisHubHasNotBeen":"Questo hub non è ancora stato aggiornato per servire le regole di riepilogo. Distribuisci addon-post-analysis e ricarica — nel frattempo non si perde nulla.","couldNotDeleteTheRule":"Impossibile eliminare la regola","theTestRunFailed":"L'esecuzione del test è fallita","nothingWasProduced":"Non è stato prodotto nulla:","dismiss":"Chiudi","noSummaryRulesYetCreate":"Ancora nessuna regola di riepilogo — creane una e ogni finestra che copre arriverà come un'unica immagine.","summaries":"Riepiloghi","newSummary":"Nuovo riepilogo","digest":"Riepilogo","aiOff":"AI disattivata","cameras":"Telecamere","window":"Finestra","keeps":"Conserva","mosaic":"Mosaico","targets":"Target","lastRun":"Ultima esecuzione","on":"Attivo","toggle":"attiva/disattiva {{name}}","produceThisDigestNowAnd":"Produci questo riepilogo ora e INVIALO","test":"testa {{name}}","deleteThisSummary":"Eliminare questo riepilogo?","thisWillPermanentlyDeleteThis":"Eliminerà definitivamente \\"{{name}}\\". Questa azione non può essere annullata.","delete":"elimina {{name}}","tilesRank_one":"{{count}} riquadro · {{rank}}","tilesRank_other":"{{count}} riquadri · {{rank}}"},"notificationSummaryEditor":{"newSummary":"Nuovo riepilogo","edit":"Modifica {{name}}","whatItIs":"Di cosa si tratta","oneWindowOnePictureThe":"Una finestra, un'immagine: il miglior scatto di ogni track contenuta nella finestra, disposto in un unico mosaico e inviato una sola volta.","name":"Nome","eGOvernightSweep":"es. Controllo notturno","enabled":"Abilitato","cameras":"Telecamere","everyCameraInTheDigest":"Ogni telecamera del riepilogo ottiene almeno un riquadro se ha contribuito con qualcosa — un riepilogo in cui due telecamere su sei non compaiono mai non è multi-telecamera.","theFirstCameraSelectedOwns":"La prima telecamera selezionata è la titolare della notifica inviata.","whenTheWindowCloses":"Quando si chiude la finestra","window":"Finestra","motionOpenedAndClosedBy":"Movimento — aperta e chiusa dall'attività","scheduleFixedWeeklyWindows":"Pianificazione — finestre settimanali fisse","quietPeriodSeconds":"Periodo di quiete (secondi)","theWindowOpensOnThe":"La finestra si apre al primo movimento su una di queste telecamere e resta aperta finché ne arriva altro. Questo intervallo di silenzio la chiude.","longestWindowSeconds":"Finestra massima (secondi)","aPermanentlyBusyDrivewayWould":"Un vialetto sempre trafficato altrimenti non invierebbe mai nulla. A questo limite la finestra si chiude con ciò che contiene.","weeklyWindows":"Finestre settimanali","theDigestIsProducedWhen":"Il riepilogo viene prodotto quando una finestra SI CHIUDE e copre esattamente quella finestra. La prima è la prima che si chiude dopo il salvataggio — nulla viene recuperato dal passato.","waitForOpenTracksSeconds":"Attendi le track aperte (secondi)","aTrackSBestShot":"Il miglior scatto di una track viene scritto quando la track TERMINA. Renderizzare nell'istante in cui la finestra si chiude mostrerebbe ogni soggetto ancora in movimento senza immagine. 0 disattiva l'attesa.","whatGoesIn":"Cosa include","evaluatedOnTracksOnePassage":"Valutato sulle track: un passaggio è un riquadro.","classes":"Classi","emptyEveryClassOnlyThe":"Vuoto = ogni classe. Sono offerte solo le macro classi: un riepilogo corrisponde alla classe memorizzata sulla track, e le track memorizzano macro classi — un sottotipo non corrisponderebbe mai a nulla.","excludedClasses":"Classi escluse","zones":"Zone","zonesAreScopedPerCamera":"Le zone sono per telecamera: sceglierne una su una telecamera non silenzia le altre, che continuano a corrispondere sull'intera inquadratura.","minimumImportance":"Importanza minima","thePipelineSOwnScore":"Il punteggio della pipeline stessa, 0–1. Vuoto conserva tutto.","minimumStaySeconds":"Permanenza minima (secondi)","dropsThePassagesTooBrief":"Scarta i passaggi troppo brevi per meritare un riquadro.","includeParkedObjects":"Includi oggetti parcheggiati","offByDefaultACar":"Disattivato per impostazione predefinita. Un'auto lasciata nel vialetto viene tracciata finché non è riconosciuta come parcheggiata, e resta parcheggiata finché c'è — con questa opzione attiva, un riepilogo si riempie dello stesso oggetto fermo invece dei passaggi. Gli oggetti parcheggiati restano comunque nella pagina Eventi.","theMosaic":"Il mosaico","tiles":"Riquadri","9A33Grid":"9 (una griglia 3×3) è il massimo che la miniatura sulla schermata di blocco del telefono può contenere restando leggibile.","whenThereAreMoreTracks":"Quando ci sono più track che riquadri","everyContributingCameraKeepsIts":"Ogni telecamera che contribuisce mantiene per prima il suo miglior riquadro; i posti rimanenti vanno secondo questa classifica.","textOnTheMosaic":"Testo sul mosaico","imagesOnlyIsTheDefault":"Solo immagini è il valore predefinito, ed è ciò che fa una regola senza nulla di impostato qui. Tutto ciò che viene disegnato resta impresso nell'immagine per sempre — un'etichetta copre la parte bassa del riquadro, dove ci sono piedi, ruote e pacchi, e una didascalia da una detection sbagliata non si può più cancellare. Nulla a valle ha bisogno delle parole: il riepilogo scritto legge i frame stessi e riceve nel prompt la telecamera, la classe e l'ora.","captionBurnedOntoTheMosaic":"Didascalia impressa sul mosaico","leaveEmptyForNoCaption":"Lascia vuoto per nessuna didascalia","acrossTheTopBand":"Lungo la fascia superiore.","onlyDrawnWithTileLabels":"Disegnata solo con “etichette sui riquadri e una didascalia in alto”. Quello che scrivi qui viene conservato comunque.","writtenSummary":"Riepilogo scritto","oneVisionCallOverThe":"Una sola chiamata di visione sui migliori frame della finestra INSIEME, così la risposta è un resoconto di ciò che è successo e non un elenco di immagini. La frase va nel corpo della notifica.","haveAModelDescribeThe":"Fai descrivere la finestra a un modello","offByDefaultTheMosaic":"Disattivato per impostazione predefinita. Il mosaico e i conteggi vengono inviati comunque.","theSwitchAboveIsOff":"L'interruttore qui sopra è disattivato, quindi nulla sotto di esso è modificabile. Tutto ciò che hai già impostato viene conservato — riattivandolo i campi tornano esattamente come li avevi lasciati.","visionProfile":"Profilo di visione","theHubSDefaultVision":"Il profilo di visione predefinito dell'hub","thisHubDidNotAnswer":"Questo hub non ha risposto con un elenco di profili — il riepilogo userà ciò che l'addon AI risolve per il consumer “ai-summary”.","noVisionCapableProfileOn":"Ancora nessun profilo con capacità di visione su questo hub. Aggiungine uno in AI → Profili; fino ad allora il riepilogo viene inviato senza testo.","onlyVisionCapableProfilesAre":"Sono offerti solo profili con capacità di visione — una chiamata di visione su un profilo testuale viene rifiutata, mai degradata.","answerIn":"Rispondi in","donTAskForA":"Non richiedere una lingua","nothingIsAddedToThe":"Nulla viene aggiunto al prompt a meno che tu ne scelga una, e questi modelli rispondono in inglese di loro.","yourQuestionOptional":"La tua domanda (facoltativa)","eGTellMeWhether":"es. Dimmi se qualcuno si è avvicinato al cancello e se è stato lasciato un pacco.","leaveBlankForWhatHappened":"Lascia vuoto per “cosa è successo in questo periodo?”. Le tue parole sono l'unico testo libero che riceve il modello: i nomi delle telecamere e ciò che la pipeline ha classificato vengono prima ridotti a etichette semplici, e qualsiasi cosa scritta DENTRO un frame — un cartello, una targa, un overlay — è trattata come scenario, mai come istruzione.","framesTheModelMayLook":"Frame che il modello può guardare","theHighestRankedTilesSent":"I riquadri meglio classificati, inviati come UNA sola domanda. Limitato separatamente dal numero di riquadri — uno è limitato dai pixel, l'altro dal tempo del modello — e mai superiore ad esso.","timeLimitSeconds":"Limite di tempo (secondi)","nobodyIsWaitingOnA":"Nessuno aspetta un riepilogo sul telefono, quindi è generoso. Al limite la generazione viene annullata, non semplicemente abbandonata.","frameSizeSentPixels":"Dimensione dei frame inviati (pixel)","longestEdge448IsThe":"Lato più lungo. 448 è la dimensione nativa dei riquadri di questi encoder di visione — valori maggiori costano token e latenza senza aggiungere dettaglio visibile all'encoder.","ifTheModelGivesNo":"Se il modello non dà risposta","aColdModelAnUnreachable":"Un modello freddo, un endpoint irraggiungibile o una risposta che l'hub non riesce a interpretare rientrano tutti in questo caso. Il valore predefinito invia: il mosaico e i conteggi valgono più del silenzio, e una finestra chiusa non torna.","delivery":"Consegna","priority":"Priorità","deliverAWindowThatMatched":"Invia una finestra senza corrispondenze","offByDefaultANightly":"Disattivato per impostazione predefinita: un “0 eventi” notturno è una riga che nessuno legge, e toglie il lettore alle righe accanto.","create":"Crea","aiToken":"<code>{{token}}</code> è il riepilogo scritto. Un corpo che non lo nomina riceve comunque la frase, aggiunta su una riga a parte — un modello scritto prima dell'esistenza del passaggio IA non deve far sembrare la funzione rotta."},"notificationSystemEventDelivery":{"delivery":"Consegna","instantANotificationPerEvent":"Immediata — una notifica per evento","summaryOnScheduleTheCurrent":"Riepilogo pianificato — lo stato attuale, a orari stabiliti","nothingIsSentPerEvent":"Nulla viene inviato per singolo evento. A ciascun orario qui sotto, una notifica elenca ciò che è ancora vero per i tipi e i filtri di questa regola — batterie scariche, materiali di consumo, dispositivi o stream offline, aggiornamenti disponibili — oppure una notifica per categoria, se lo scegli qui sotto. Se non c'è nulla da segnalare, non viene inviato nulla. Fuso orario:","theHubS":"quello dell'hub","howTheSummaryIsSent":"Come viene inviato il riepilogo","oneMessageWithEveryCategory":"Un messaggio con tutte le categorie","oneNotificationPerCategoryBatteries":"Una notifica per categoria (batterie, materiali di consumo, dispositivi…)","readingTheState":"Lettura dello stato…","previewTheSummaryNow":"Anteprima del riepilogo ora"},"notificationTargets":{"target":"Target","kind":"Tipo","owner":"Proprietario","on":"Attivo","toggle":"attiva/disattiva {{name}}","test":"Test","duplicate":"Duplica","notificationTargets":"Target di notifica","deliverNotificationsToNtfyPushover":"Invia le notifiche a ntfy, Pushover, Telegram, Home Assistant e altro. Il tipo di ogni target dichiara le sue capability; il pannello di test mostra esattamente a cosa degrada un messaggio.","addTarget":"Aggiungi target","failedToLoadTargets":"Impossibile caricare i target","unknownError":"Errore sconosciuto","noNotificationTargetsYetClick":"Ancora nessun target di notifica. Clicca \\"Aggiungi target\\" per configurarne uno.","chooseANotificationKind":"Scegli un tipo di notifica","noNotificationProvidersAreInstalled":"Nessun provider di notifica installato. Installa l'addon notifiers (o collega Home Assistant) per aggiungere target.","saveChanges":"Salva modifiche","createTarget":"Crea target","name":"Nome","systemSharedAdminManaged":"Sistema (condiviso, gestito dagli admin)","aUserOwnedTargetBelongs":"Un target di proprietà di un utente appartiene a quell'utente: compare nel suo viewer e le sue regole possono inviarvi. I target di sistema restano gestiti dagli admin.","storedSecretsLoadIntoThe":"I segreti memorizzati vengono caricati nei campi mascherati (occhio per mostrarli). Svuota un campo per lasciare invariato il valore memorizzato al salvataggio; digita un nuovo valore per sostituirlo.","testConnection":"Test connessione","connected":"Connesso — {{value1}}","connectionFailed":"Connessione fallita","findDevices":"Trova dispositivi","discoverTitle":"Dispositivi trovati","discoverHelp":"Questi dispositivi sono disponibili sugli account collegati e non hanno ancora una destinazione. Spunta quelli da aggiungere.","discoverSearching":"Ricerca dei dispositivi in corso…","discoverNone":"Ogni dispositivo trovato ha già una destinazione.","discoverFailed":"Impossibile cercare {{kind}}: {{message}}","discoverAdd":"Aggiungi selezionati ({{count}})","discoverPick":"Aggiungi {{name}}"},"notificationTestPanel":{"level":"Livello","deriveFromPriority":"— ricava dalla priorità —","requiresTargetConfig":"Richiede la configurazione del target:","priorityOrdinal":"Priorità (ordinale):","format":"Formato","title":"Titolo","mode":"(modalità:","mb":", ≤{{value1}}MB","url":"URL {{mt}}","clickUrl":"URL al clic","sound":"Suono","ttlSeconds":"TTL (secondi)","tag":"Tag","payloadPreview":"Anteprima del payload","sendTest":"Invia test","delivered":"Consegnato","failed":"Fallito","resolvedLevel":"Livello risolto","formatSent":"Formato inviato","attachmentsSent":"Allegati inviati","actionsSent":"Azioni inviate","truncated":"Troncato","dropped":"Scartato","testTitle":"Prova \\"{{name}}\\" ({{kind}})","qualitative":"qualitativo","body":"Corpo","overflow":"eccesso","attachments":"Allegati","attachmentsMeta":"(modalità: {{mode}}, max {{max}})","attachmentsMetaMb":"(modalità: {{mode}}, max {{max}}, ≤{{mb}}MB)","actionsUpTo":"Azioni (fino a {{max}})","critical":"critico","silent":"silenzioso","priority":"priorità","actionLabelPlaceholder":"etichetta","actionUrlPlaceholder":"url","presetText":"Solo testo","presetImage":"Con immagine","presetGif":"Con GIF","presetVideo":"Con video","presetAudio":"Con audio","presetActions":"Con pulsanti","presetCritical":"Critica","presetOverflow":"Overflow (avanzato)","testFailed":"Test non riuscito"},"notificationTexts":{"englishFallback":"Fallback in inglese","resetToTheShippedWording":"Ripristina il testo originale","shipped":"Originale:","texts":"Testi","theNotificationTextCatalogIs":"Il catalogo dei testi di notifica non è disponibile su questo hub","theHubAnsweredSomethingThis":"L'hub ha risposto con qualcosa che questa versione dell'admin non comprende. Aggiorna entrambi e ricarica.","thisHubHasNotBeen":"Questo hub non è ancora stato aggiornato per servire il catalogo dei testi di notifica. Distribuisci addon-post-analysis e ricarica — nel frattempo non si perde nulla: le notifiche continuano a usare il testo originale.","couldNotChangeTheLanguage":"Impossibile cambiare la lingua","couldNotSave":"Impossibile salvare","hubLanguage":"Lingua dell'hub","everyNotificationIsWrittenIn":"Ogni notifica è scritta in questa lingua.","editing":"Modifica di","ofTextsCustomised":"{{overriddenCount}} testi su {{length}} personalizzati.","thisHubDoesNotSpeak":"Questo hub non parla questa lingua — queste parole non sono ancora in uso.","aRuleThatWritesIts":"Una regola che scrive un proprio titolo o corpo prevale comunque su tutto ciò che c'è qui — questa pagina contiene il testo usato quando una regola non ne ha uno.","searchAKeyOrA":"Cerca una chiave o una frase…","save":"Salva {{pending}}","noTextMatchesThatSearch":"Nessun testo corrisponde a questa ricerca."},"notificationTimelapseEditor":{"newTimelapse":"Nuovo timelapse","edit":"Modifica {{name}}","whatItIs":"Di cosa si tratta","oneVideoPerCameraAssembled":"Un video per telecamera, assemblato dal girato REGISTRATO di quella telecamera alla chiusura della finestra.","name":"Nome","eGNightDriveway":"es. Vialetto di notte","enabled":"Abilitato","cameras":"Telecamere","eachCameraRendersAndDelivers":"Ogni telecamera renderizza e invia il proprio video. La registrazione deve essere ATTIVA per una telecamera — un timelapse viene ricavato dal girato registrato, e l'hub rifiuta una regola per una telecamera che non registra.","when":"Quando","weeklyWindows":"Finestre settimanali","theVideoCoversExactlyOne":"Il video copre esattamente una finestra e viene inviato quando SI CHIUDE. Una finestra che attraversa la mezzanotte (21:00 → 07:00) è il caso ordinario di un timelapse notturno.","sampling":"Campionamento","twoRatesABaseRate":"Due frequenze: una di base per l'intera finestra e una più fitta negli intervalli in cui è stato rilevato qualcosa.","baseCadenceSeconds":"Cadenza di base (secondi)","oneFrameEveryNSeconds":"Un frame ogni N secondi nelle parti tranquille della finestra.","outputFrameRateFps":"Frame rate di output (fps)","howFastTheAssembledVideo":"Quanto velocemente viene riprodotto il video assemblato.","denseCadenceNearTheDetections":"Cadenza fitta, vicino alle detection","automaticS":"Automatica ({{seconds}}s)","setItMyself":"La imposto io","minimumSecondsOfVideoPer":"Secondi minimi di video per detection (facoltativo)","stateTheStayAndLet":"Indica la permanenza e lascia che il renderer calcoli la cadenza. Campiona sempre e solo più FITTO, fino all'intervallo tra frame della registrazione — un passaggio troppo breve per raggiungerlo viene renderizzato con tutti i frame esistenti e non di più.","theNotification":"La notifica","preview":"Anteprima","priority":"Priorità","captionOnThePreviewFrame":"Didascalia sul frame di anteprima","shippedDefault":"{{DEFAULT_TIMELAPSE_PREVIEW_TEXT}} (predefinito originale)","emptyAndSetThePreview":"Vuoto e impostato: il frame di anteprima NON ha didascalia.","leaveUntouchedForTheShipped":"Lascia invariato per la didascalia originale ({{DEFAULT_TIMELAPSE_PREVIEW_TEXT}}).","backToTheShippedCaption":"Torna alla didascalia originale","create":"Crea","denseHint":"Più basso = più lento vicino ai rilevamenti. A {{seconds}}s e {{fps}} fps un passaggio di {{passage}} secondi dura {{onScreen}}s a schermo; dimezzare la cadenza raddoppia questo valore, e le parti tranquille della notte non cambiano durata.","denseDerived":"Automatico continua a seguire la cadenza di base (base ÷ 30, mai sotto 1s).","denseFixed":"Fissato a questo valore — l'hub non può azzerare il campo, quindi tornare ad Automatico scrive esplicitamente il numero derivato ({{seconds}}s).","detectionSummaryNote":"Senza un corpo tuo il riepilogo dei rilevamenti viene aggiunto automaticamente, e solo se il conteggio non è zero. Con un corpo tuo non viene aggiunto nulla — chiedilo con <code>{{token}}</code>."},"notificationTimelapses":{"timelapseRulesAreNotAvailable":"Le regole timelapse non sono disponibili su questo hub","theHubAnsweredSomethingThis":"L'hub ha risposto con qualcosa che questa versione dell'admin non comprende. Aggiorna entrambi e ricarica.","thisHubHasNotBeen":"Questo hub non è ancora stato aggiornato per servire le regole timelapse. Distribuisci addon-post-analysis e ricarica — le regole stesse non sono toccate.","couldNotDeleteTheRule":"Impossibile eliminare la regola","theTestRunFailed":"L'esecuzione del test è fallita","nothingWasProduced":"Non è stato prodotto nulla:","dismiss":"Chiudi","noTimelapseRulesYetCreate":"Ancora nessuna regola timelapse — creane una e il girato registrato di ogni notte arriverà come breve video.","whichCamera":"Quale telecamera","timelapses":"Timelapse","newTimelapse":"Nuovo timelapse","timelapse":"Timelapse","cameras":"Telecamere","cameras2":"{{length}} telecamere","window":"Finestra","sampling":"Campionamento","targets":"Target","lastRun":"Ultima esecuzione","on":"Attivo","toggle":"attiva/disattiva {{name}}","renderThisRuleSLast":"Renderizza ora l'ultima finestra chiusa di questa regola e INVIALA","test":"testa {{name}}","deleteThisTimelapse":"Eliminare questo timelapse?","thisWillPermanentlyDeleteThis":"Eliminerà definitivamente \\"{{name}}\\". Questa azione non può essere annullata.","delete":"elimina {{name}}","ruleSummary":"{{cadence}}s · {{fps}}fps · denso {{dense}}s","ruleSummaryAuto":"{{cadence}}s · {{fps}}fps · denso {{dense}}s (auto)","ruleDwell":"≥{{sec}}s/rilevamento"},"oidcSettingsConnections":{"deleteOidcConnection":"Eliminare la connessione OIDC?","removeTheLoginButtonAnd":"Rimuovi “{{displayName}}” ({{id}}). Il pulsante di login e le credenziali IdP per questo id vengono eliminati.","id":"Id","name":"Nome","issuer":"Emittente","status":"Stato","configured":"Configurata","notConfigured":"Non configurata","delete":"Elimina {{displayName}}","eachRowIsOneIdp":"Ogni riga è un IdP. URI di reindirizzamento:","addConnection":"Aggiungi connessione","couldNotLoadConnections":"Impossibile caricare le connessioni.","noOidcConnectionsYetAdd":"Ancora nessuna connessione OIDC. Aggiungine una per registrare un IdP.","addOidcConnection":"Aggiungi connessione OIDC","edit":"Modifica {{value1}}","saving":"Salvataggio…","instanceId":"Id istanza","urlSlugAppearsInAddon":"Slug URL — compare in /addon/{{addonId}}/<id>/callback. Stabile; dopo il salvataggio non può essere rinominato.","instanceId2":"Id istanza:","loadingForm":"Caricamento modulo…"},"pemField":{"chooseFile":"Scegli file"},"remoteAccess":{"remoteAccess":"Accesso remoto","addTunnel":"Aggiungi tunnel","remoteAccess2":"Accesso remoto","publicFacingTunnelsThatExpose":"Tunnel pubblici che espongono questo hub a internet (Cloudflare Tunnel, ngrok, …).","noRemoteAccessProvidersInstalled":"Nessun provider di accesso remoto installato","installATunnelAddonE":"Installa un addon tunnel (es. @camstack/addon-cloudflare) per esporre pubblicamente questo hub.","connected":"Connesso","disconnected":"Disconnesso","stop":"Ferma","start":"Avvia"},"storage":{"disable":"Disabilitare \\"{{displayName}}\\"?","nothingIsDeletedSetThe":"{{consequence}} Nulla viene eliminato — riporta la posizione a Sola lettura o Attiva per recuperarne i filmati.","deleteLocation":"Eliminare la posizione \\"{{displayName}}\\"?","thisRemovesTheLocationRecord":"Rimuove il record della posizione. I file su disco non vengono eliminati; la directory o il percorso remoto sottostante resta intatto.","deleteAnyway":"Eliminare comunque?","forceDelete":"Forza eliminazione","loadingLocations":"Caricamento posizioni…","failedToLoadStorageLocations":"Impossibile caricare le posizioni di archiviazione.","noStorageLocationsDeclaredBy":"Nessuna posizione di archiviazione dichiarata da alcun addon installato.","forcingNote":"{{error}}\\n\\nForzare l'eliminazione rimuove solo il record. Tutto ciò che è ancora su quella posizione diventa irraggiungibile — le righe di indice che la nominano smettono di risolversi e la riproduzione di quei segmenti diventa silenziosamente nera invece di dare errore."},"system":{"settings":"Impostazioni","secrets":"Segreti","capabilities":"Capability"},"turnServers":{"turnProviders":"Provider TURN","addProvider":"Aggiungi provider","discoveredIceServers":"Server ICE rilevati","turnServers":"Server TURN","iceServersUsedForWebrtc":"Server ICE usati per l'attraversamento NAT di WebRTC. Più provider possono coesistere — il livello WebRTC concatena, per ogni sessione, i server di tutti i provider abilitati.","noTurnProvidersInstalled":"Nessun provider TURN installato","installATurnAddonE":"Installa un addon TURN (es. @camstack/addon-cloudflare) per abilitare WebRTC dietro NAT restrittivi.","combinedIceServerListAll":"Elenco combinato dei server ICE — tutti i provider abilitati","noServersFromEnabledProviders":"Nessun server dai provider abilitati."},"wasteSettingsSources":{"countryService":"Paese e servizio","country":"Paese","selectCountry":"Seleziona paese…","service":"Servizio","pickACountryFirst":"Scegli prima un paese","selectService":"Seleziona servizio…","newSource":"Nuova sorgente","deleteWasteSource":"Eliminare la sorgente rifiuti?","removeItsCalendarUnderSystem":"Rimuovi “{{label}}” ({{id}}). Il suo calendario in Sistema → Calendari viene eliminato.","label":"Etichetta","module":"Modulo","enabled":"Abilitata","on":"Attiva","off":"Disattiva","delete":"Elimina {{label}}","pickACountryAndA":"Scegli un paese e un servizio — i campi di configurazione provengono da quella sorgente HACS.","addSource":"Aggiungi sorgente","couldNotLoadSources":"Impossibile caricare le sorgenti.","noWasteSourcesYetAdd":"Ancora nessuna sorgente rifiuti. Aggiungine una per registrare un servizio comunale.","addWasteSource":"Aggiungi sorgente rifiuti","edit":"Modifica {{value1}}","saving":"Salvataggio…","loadingFields":"Caricamento campi…","chooseACountryAndService":"Scegli un paese e un servizio per vedere i campi richiesti."},"alarmLiveCard":{"panel":"Pannello","thisHubDoesNotReport":"Questo hub non riporta ancora lo stato live del pannello — aggiornalo per armare da qui.","disarm":"Disarma","thePanelDidNotDo":"Il pannello non lo ha eseguito","armAnyway":"Arma comunque","eachOpenDeviceIsIgnored":"Ogni dispositivo aperto viene ignorato finché non si chiude, poi torna monitorato.","excludedSensors":"Sensori esclusi","noSensorIsExcluded":"Nessun sensore escluso.","arm":"Inserisci {{mode}}"},"alarmModeCard":{"armsNothingNoEnabledRule":"Non arma nulla — nessuna regola abilitata dipende da questa modalità","checkingWhichDevicesAreOpenings":"Verifica di quali dispositivi sono aperture…","usesTheSystemDefaultS":"Usa il valore predefinito di sistema ({{value1}} s)","default":"Predefinito","useTheDefault":"Usa il predefinito","useTheDefault2":"{{label}}: usa il predefinito","afterTrigger":"Dopo il trigger","usesTheSystemDefault":"Usa il valore predefinito di sistema","afterTriggerUseTheDefault":"Dopo il trigger: usa il predefinito","activationSchedule":"Pianificazione di attivazione","whenThisModeMayBe":"Quando questa modalità può essere armata. Vuoto significa qualsiasi giorno e ora.","noSensorIsCoveredBy":"Nessun sensore è coperto da una regola di questa modalità.","checksSensors_one":"Controlla {{count}} sensore","checksSensors_other":"Controlla {{count}} sensori","notNotified":"{{count}} non notificati","openingsCheckFailed":"Impossibile verificare quali dispositivi sono aperture ({{error}}).","postRearm":"Riattiva dopo","postDisarm":"Disattiva dopo","postNothing":"Non fare nulla (resta scattato)","delaysHint":"I campi di ritardo vuoti usano i valori predefiniti del sistema (uscita 30 s, ingresso 20 s, riattivazione dopo {{seconds}} s)."},"alarmProfileBar":{"profile":"Profilo","deleteThisProfile":"Elimina questo profilo","newName":"Nuovo nome","newProfileName":"Nome del nuovo profilo","rename":"Rinomina","createWithSystemDefaults":"Crea con i valori predefiniti di sistema","create":"Crea","cloneTheSelectedProfile":"Clona il profilo selezionato","clone":"Clona","createStartsFromSystemDefaults":"Crea parte dai valori predefiniti di sistema. Clona copia il profilo selezionato (sensori, messa in sicurezza all'armamento, ritardi). Il cambio applica quel profilo al prossimo armamento.","defaultSuffix":"predefinito"},"alarmSensorTable":{"name":"Nome","type":"Tipo","state":"Stato","checkedWhenArming":"Verificato all'armamento","blocksArming":"Blocca l'armamento","blocksArming2":"Blocca l'armamento: {{name}}","closeLockOrTurnOff":"Chiudi, blocca o spegni quando questa modalità arma","secureOnArm":"Metti in sicurezza all'armamento","secureOnArmCloseLock":"Metti in sicurezza all'armamento (chiudi/blocca/spegni): {{name}}","couldNotReadTheSensor":"Impossibile leggere lo stato dei sensori.","searchSensors":"Cerca sensori","cellChecking":"Controllo…","cellUnknown":"Sconosciuto","cellHubTooOld":"Questo hub non riporta lo stato dei sensori: aggiorna l'hub","cellReadFailedError":"Lettura non riuscita: {{error}}","cellOfflineLastKnown":"Offline: ultimo stato noto","cellNotAnswered":"Nessuna risposta","cellReadFailed":"Lettura non riuscita","cellNoState":"Nessuno stato riportato","cellNotOpening":"Non è un'apertura","cellRemoved":"Rimosso","cellRemovedNote":"Non più nell'elenco dei dispositivi","listedUncovered":"Non controllato da questa modalità: attivalo per rimuovere la voce","cellNo":"No","cellYes":"Sì","detectionOff":"rilevazione spenta","cellSkipped":"Saltato","cellSkippedNote":"Blocca l'inserimento; notifiche saltate: {{why}}","cellAllDevices":"Tutti i dispositivi","cellNeverBlocks":"Non blocca mai questa modalità"},"notificationClassScopeField":{"addValue":"Aggiungi valore…"},"notificationConditionWidgets":{"remove":"rimuovi {{v}}","customValueClickToRemove":"Valore personalizzato — clicca per rimuoverlo","eventToken":"Token evento…","subTypeNeverCountsAlways":"{{stored}} — sottotipo, non viene mai conteggiato (sempre 0)","loadingZones":"Caricamento zone…","wholeFrame":"— intera inquadratura —","anyClass":"— qualsiasi classe —","threshold":"Soglia","count":"Conteggio","holdFor":"Mantieni per","clear":"Svuota","noCameraPickedOnThe":"Nessuna telecamera scelta nella scheda Dispositivi: questa regola osserva l'occupazione di OGNI telecamera, e non si può offrire alcuna zona finché non ne scegli una — l'id di una zona appartiene a una telecamera.","countsConfirmedTrackedObjectsFrom":"Conta gli oggetti tracciati confermati dalle analitiche di zona. La variazione deve durare per l'intera finestra di sostegno prima di scattare; senza snapshot per la telecamera o la zona la regola non scatta mai.","storedByTheRuleNot":"Memorizzato dalla regola — non offerto da questo hub","keptFromTheRuleUnknown":"Conservato dalla regola, sconosciuto a questo hub:","confirmAfter":"Conferma dopo","louderThan":"Più forte di","hits":"Rilevamenti","withNeitherASoundNor":"Senza né un suono né una soglia di livello non può mai corrispondere — ogni campione sarebbe un rilevamento, quindi il motore lo rifiuta invece di notificare il silenzio.","plateText":"Testo della targa…","seen":"Visti:","maxDistance":"Distanza massima","noDeviceGate":"— nessun gate di dispositivo —","thisDeviceReportsNoState":"Questo dispositivo non riporta alcuno stato che il gate possa leggere, quindi non può armare una regola.","theRuleIsSilentWhile":"La regola resta silenziosa mentre il dispositivo è in qualsiasi altro stato — anche quando il suo stato non può essere letto affatto.","opBecameOccupied":"Diventata occupata","opBecameFree":"Diventata libera","opCountAtLeast":"Conteggio ≥","opCountAtMost":"Conteggio ≤","audioModeLabel":"Suoni — scatta subito","audioModeLevel":"Volume — su una finestra","audioConfirmHint":"Scatta quando tanti fotogrammi etichettati cadono dentro la finestra (predefinito {{hits}} in {{window}} s). Un falso positivo su un solo fotogramma non arriva mai a 2; un episodio reale di solito etichetta due o tre fotogrammi. Il tempo di attesa della regola è l'altro freno.","hitsPercentDefault":"% (predefinito {{value}})","over":"su","secondsDefault":"s (predefinito {{value}})","dbfsHint":"I dBFS vanno verso il negativo: 0 è il fondo scala, {{min}} è il silenzio — quindi un numero PIÙ ALTO è un filtro più stretto. Misurato su questo hub, il pianto di un neonato è tra −55 e −26 dBFS, quindi una soglia sopra −55 ne esclude la maggior parte. La finestra deve essere PIENA prima di poter corrispondere.","frames":"fotogrammi","within":"entro"},"notificationDigestFields":{"thisRuleCouldNeverProduce":"Questa regola non potrebbe mai produrre nulla, quindi non può essere salvata:","worthKnowing":"Da sapere:","noDeliveryTargetIsConfigured":"Nessun target di consegna configurato. Aggiungine prima uno nella scheda Target — senza, il risultato viene prodotto e poi scartato.","notificationTitle":"Titolo della notifica","notificationBody":"Corpo della notifica","leaveBothBlankToUse":"Lascia vuoti entrambi per usare il testo dell'hub (modificabile nella scheda Testi).","sendARealNotificationNow":"Inviare ora una notifica reale?","itDoesNotConsumeThe":"Non consuma la pianificazione: la prossima esecuzione pianificata avviene comunque.","sending":"Invio…","produceAndSend":"Produci e invia","confirmSend":"\\"{{rule}}\\" verrà prodotto su {{window}} e CONSEGNATO a {{target}} — su ogni telefono raggiunto da quel target, adesso. Non è una prova a vuoto."},"notificationRulePickers":{"customValueClickToRemove":"Valore personalizzato — clicca per rimuoverlo"},"notificationScheduleField":{"activeOutsideTheWindows":"Attiva fuori dalle finestre","invertedScheduleShownAsBands":"Pianificazione invertita — mostrata come fasce. Disattiva il flag di inversione (o le finestre) per impostare orari puntuali.","shownAsSendAtTimes":"Mostrati come orari di invio dalla fine di ciascuna finestra (quando parte il riepilogo). Modifica o salva per memorizzarli come finestre puntuali di un minuto.","noTimesYetAddOne":"Ancora nessun orario — aggiungine uno per inviare in quei giorni a quell'ora.","removeWindow":"Rimuovi finestra","at":"Alle","removeTime":"Rimuovi orario","addWindow":"Aggiungi finestra","addTime":"Aggiungi un orario"},"notificationSystemEventField":{"summaryClassHint":"All'ora programmata ricevi l'elenco di ciò che è nello stato di errore, non ogni cambiamento.","instantClassHint":"Un evento in coppia ti avvisa sia quando qualcosa si guasta sia quando torna a posto.","noSnapshot":"nessuna istantanea dello stato, non riporta nulla","theBatteryThresholdAndThe":"La soglia della batteria e l'intervallo dei promemoria sono impostazioni del cluster (la soglia dei materiali di consumo è propria di questa regola, qui sotto):","settingsBatteryOfflineAlerts":"Impostazioni → Avvisi batteria e offline","alarmSettings":"Impostazioni allarme","couldNotCheckWhetherThis":"Impossibile verificare se il server di questo hub conosce le soglie dei materiali di consumo per regola e gli avvisi sui serbatoi.","consumableLowAt":"Materiale di consumo basso al (%)","deviceTypes":"Tipi di dispositivo","deviceType":"Tipo di dispositivo…","batteryAndConsumableAlertsAre":"Gli avvisi di batteria e materiali di consumo sono qui ristretti per tipo di dispositivo. Batterie e materiali di consumo appartengono a sensori, contenitori, aspirapolvere e tagliaerba — raramente a una telecamera — quindi un filtro di tipo pensato per la raggiungibilità li silenzia. Lascia vuoti i tipi, oppure metti questi eventi in una regola a parte.","nodes":"Nodi","packages":"Pacchetti","thisRuleIsNotOne":"Questa regola non è di un solo tipo di regola di sistema — i suoi eventi coprono eventi di dispositivo, sistema e allarme, oppure non ne indica nessuno. Continua a scattare così com'è, ma non può essere modificata qui: ricreala come una regola per tipo.","kindOfSystemRule":"Tipo di regola di sistema","oneRuleAnswersOneQuestion":"Una regola risponde a una domanda: sui dispositivi, sull'installazione o sull'allarme. Cambiarla riparte da un elenco eventi vuoto.","alarmPictures":"— quando una regola fa scattare l'allarme, questa notifica porta le immagini di quella regola.","hubOutdated":"Il server di questo hub è precedente alle soglie dei consumabili per regola e agli avvisi dei serbatoi: scarta la soglia di una regola al salvataggio (la regola giudica poi al {{percent}}%) e rifiuta gli eventi dei serbatoi. Aggiorna prima il server (@camstack/server) su ogni nodo."},"scopePickers":{"theNodeHistoryCouldNot":"Impossibile leggere la cronologia dei nodi — i nodi offline potrebbero mancare da questo elenco.","roleHub":"Hub","roleAgents":"Agenti","roleNodes":"Nodi","pkgServer":"Server","pkgFramework":"Framework","pkgWrapper":"Wrapper","pkgAddons":"Addon","pkgPackages":"Pacchetti","offlineSuffix":"{{role}} · offline"},"targetSecretNotice":{"theHubNeedsTheSecret":"L'hub ha di nuovo bisogno del segreto — nulla è stato salvato.","changed":"Hai modificato {{fields}}. Se questo cambia dove invia questo target, l'hub non riutilizzerà il segreto memorizzato. {{toType}}"},"unifiedRulesColumns":{"when":"Quando","type":"Tipo"},"cluster":{"unlockFromAgentFailed":"Sblocco dall'agent non riuscito:","loadingClusterTopology":"Caricamento della topologia del cluster..."},"keychainAuditTable":{"colWhen":"Quando","colAction":"Azione","colActor":"Autore","colRef":"Rif.","colDetail":"Dettaglio","range":"{{from}}–{{to}} di {{total}}","rangeRecent":"{{from}}–{{to}} di {{total}} più recenti"},"alarmDelay":{"exitLabel":"Ritardo di uscita","exitHint":"Tempo tra l'inserimento e l'effettiva attivazione della modalità — abbastanza per uscire.","exitZero":"si attiva subito","entryLabel":"Ritardo di ingresso","entryHint":"Tempo tra uno scatto e l'allarme che suona — abbastanza per raggiungere la tastiera.","entryZero":"scatta subito","sirenLabel":"Dopo (secondi)","sirenHint":"Per quanto tempo l'allarme resta scattato prima che venga eseguita l'azione successiva. Ignorato quando l'azione è “non fare nulla”.","sirenZero":"esegue subito l'azione","rangeError":"Inserisci un numero intero di secondi da 0 a {{max}}."},"connectivity":{"exporters":"Esportatori","exportersInstall":"Aggiungi esportatore","exportersEmptyTitle":"Nessun esportatore di dispositivi installato","exportersEmptyDescription":"Installa un addon di esportazione per pubblicare i dispositivi su Alexa, HomeKit, Google Home o Home Assistant.","email":"Email","emailInstall":"Aggiungi provider email","emailEmptyTitle":"Nessun provider email installato","emailEmptyDescription":"Installa un addon SMTP o Gmail per inviare email di notifica da questo hub.","brokers":"Broker","brokersInstall":"Aggiungi addon broker","brokersEmptyTitle":"Nessun broker di messaggi installato","brokersEmptyDescription":"Installa un addon broker per collegare Home Assistant, Homematic, MQTT, Matter e sistemi simili.","calendars":"Calendari","calendarsInstall":"Aggiungi fonte di calendario","calendarsEmptyTitle":"Nessuna fonte di calendario installata","calendarsEmptyDescription":"Installa un addon fonte di calendario (Google Calendar, raccolta rifiuti, …) per alimentare Sistema → Calendari.","connections_one":"{{count}} connessione","connections_other":"{{count}} connessioni","connectionsConnected_one":"{{count}} connessione · {{connected}} connessa","connectionsConnected_other":"{{count}} connessioni · {{connected}} connesse"},"ai":"IA","calendars":"Calendari","data":"Dati","identity":"Identità e accesso","myAccess":"Il mio accesso","network":"Rete","notifications":"Notifiche","terminal":"Terminale","aiRuntimes":{"sizeGb":"{{value}} GB"}}`),common:{save:`Salva`,cancel:`Annulla`,delete:`Elimina`,enable:`Abilita`,disable:`Disabilita`,edit:`Modifica`,add:`Aggiungi`,remove:`Rimuovi`,confirm:`Conferma`,close:`Chiudi`,back:`Indietro`,next:`Avanti`,search:`Cerca`,filter:`Filtra`,reset:`Reimposta`,apply:`Applica`,submit:`Invia`,loading:`Caricamento…`,error:`Errore`,success:`Successo`,warning:`Avviso`,info:`Info`,noData:`Nessun dato disponibile`,noResults:`Nessun risultato trovato`,retry:`Riprova`,refresh:`Aggiorna`,copy:`Copia`,copied:`Copiato!`,yes:`Sì`,no:`No`,logs:`Log`,events:`Eventi`,state:`Stato`,assign:`Assegna`,all:`Tutti`,select:`Seleziona`,name:`Nome`,settings:`Impostazioni`,restart:`Riavvia`,step:`Passaggio`,compile:`Compila`,unknownError:`Errore sconosciuto`,targetCount_one:`{{count}} target`,targetCount_other:`{{count}} target`,enrolledOn:`Registrato il {{when}}`,logsOf:`Log — <code>{{id}}</code>`,readOnly:`sola lettura`,deviceOrphans_one:`{{count}} dispositivo che punta a integrazioni non più registrate`,deviceOrphans_other:`{{count}} dispositivi che puntano a integrazioni non più registrate`,days:`giorni`,online:`online`,offline:`offline`,hubWord:`hub`,live:`live`,off:`spento`,none:`nessuno`,selectedCount:`{{count}} selezionati`,coresCount_one:`{{count}} core`,coresCount_other:`{{count}} core`,onlineCount:`{{count}} online`,offlineCount:`{{count}} offline`,synced:`sincronizzato`,unbound:`non associato`,never:`mai`,auto:`auto`,copiedLower:`copiato`,unavailable:`non disponibile`,unreachable:`irraggiungibile`,on:`acceso`,deprecated:`deprecato`,current:`attuale`,dismiss:`chiudi`,valueWord:`valore`,true:`vero`,false:`falso`,cluster:`cluster`,failedWord:`fallito`,connected:`connesso`,missing:`mancante`,unknownWord:`sconosciuto`,muted:`silenziato`,override:`override`,skipped:`saltato`,unchanged:`invariato`,defaultWord:`predefinito`,edited:`modificato {{when}}`,nextRun:`prossima {{when}}`,moreCount:`+{{count}} altri`,onlineOfTotal:`<b>{{online}}</b>/{{total}} online`,fpsWord:`fps`,stored:`{{count}} memorizzati`,current2:`attuale`,unset:`non impostato`,disabled:`disabilitato`,open:`apri`,everyone:`tutti`,systemWord:`sistema`,customised:`personalizzato`,pending:`in sospeso`,matches_one:`{{count}} corrispondenza`,matches_other:`{{count}} corrispondenze`,labels_one:`{{count}} etichetta`,labels_other:`{{count}} etichette`,peers_one:`{{count}} peer`,peers_other:`{{count}} peer`,self:`questo nodo`,sessionsCount_one:`{{count}} sessione`,sessionsCount_other:`{{count}} sessioni`,runningOfTotal:`<b>{{running}}</b>/{{total}} in esecuzione`,sessionsLabel:`sessioni`,tokensLabel:`token`,empty:`vuota`,rooms_one:`{{count}} stanza`,rooms_other:`{{count}} stanze`,parkedSince:`parcheggiato {{since}}`,motionWord:`movimento`,stale:`obsoleto`},connection:{disconnected:`Server non raggiungibile — riconnessione in corso…`,connected:`Connesso`,reconnecting:`Riconnessione in corso…`,degraded:`Connessione live interrotta — l'hub è online (un nodo del cluster potrebbe non rispondere), ripristino in corso…`,degradedNodes_one:`Cluster degradato — il nodo {{nodes}} non risponde. L'hub è online, ripristino del collegamento live…`,degradedNodes_other:`Cluster degradato — i nodi {{nodes}} non rispondono. L'hub è online, ripristino del collegamento live…`,degradedCount_one:`Cluster degradato — {{count}} nodo del cluster offline. L'hub è online, ripristino del collegamento live…`,degradedCount_other:`Cluster degradato — {{count}} nodi del cluster offline. L'hub è online, ripristino del collegamento live…`,sessionExpired:`Sessione scaduta — effettua di nuovo l'accesso.`,signIn:`Accedi`},passkeyPrompt:{message:`Vuoi salvare una passkey per accedere più velocemente?`,enrollNow:`Registra ora`,notNow:`Non ora`},status:{online:`Online`,offline:`Offline`,connecting:`Connessione in corso`,error:`Errore`,disabled:`Disabilitato`,enabled:`Abilitato`,active:`Attivo`,inactive:`Inattivo`,running:`In esecuzione`,stopped:`Fermato`,pending:`In attesa`,unknown:`Sconosciuto`},auth:{login:`Accesso`,logout:`Esci`,username:`Nome utente`,password:`Password`,signIn:`Accedi`,invalidCredentials:`Nome utente o password non validi`,authAuditSection:{authenticationAudit:`Audit di autenticazione`,loadingAuditTrail:`Caricamento audit…`,couldNotLoadTheAudit:`Impossibile caricare l'audit:`,requestFailed:`Richiesta fallita`,noAuthenticationEventsRecordedYet:`Nessun evento di autenticazione registrato finora.`,thisTrailRecordsAdminToken:`Questo audit registra creazione/uso/revoca dei token admin, i salti del 2FA su rete attendibile e le revoche di credenziali (inclusa la revoca di un singolo link di condivisione). Gli accessi con password dal browser non sono elencati qui.`,latest:`Ultimi {{count}}, i più recenti per primi`},mySessionsSection:{signOutThisSession:`Disconnetti questa sessione`,willHaveToSignIn:`{{label}} dovrà accedere di nuovo.`,signOut:`Disconnetti`,signOutEverywhere:`Disconnetti ovunque`,everySessionOfYourAccount:`Tutte le sessioni del tuo account terminano, questo browser incluso: verrai disconnesso anche qui e ogni dispositivo dovrà accedere di nuovo.`,activeSessions:`Sessioni attive`,theBrowsersAndAppsSigned:`I browser e le app connessi al tuo account. Disconnetterne uno lo termina subito.`},reauthDialog:{confirmItSYou:`Conferma la tua identità`,currentPassword:`Password attuale`,useAPasskey:`Usa una passkey`,needsPassword:`{{action}} richiede la tua password o una passkey, anche se hai già effettuato l'accesso.`},sessionsList:{loadingSessions:`Caricamento sessioni…`,couldNotLoadSessions:`Impossibile caricare le sessioni:`,thisDevice:`Questo dispositivo`,ipUnknown:`IP sconosciuto`,signOut:`Disconnetti`,lastActive:`Ultima attività {{when}}`,expires:`Scade {{when}}`},tokenModals:{token:`Token: {{label}}`,copyThisTokenNowOnce:`Copia questo token adesso. Una volta chiusa questa finestra il segreto non potrà più essere mostrato.`,done:`Fatto`},adminTokenNoticeFull:`Un token con tutti i permessi agisce come <strong>amministratore completo</strong> per gli script, ad es. <code>node scripts/hub/hub.mjs --token-file /path/to/token …</code>. Chiunque lo possieda può fare tutto ciò che può fare un admin.`,adminTokenNoticeShort:`Un token con tutti i permessi agisce come <strong>amministratore completo</strong>. Chiunque lo possieda può fare tutto ciò che può fare un admin. Crearne uno richiede di confermare la tua identità.`,expiryInvalid:`La scadenza deve essere un numero intero di giorni, da 1 a {{max}}.`,expiryHint:`Numero intero di giorni, da 1 a {{max}}.`},theme:{dark:`Scuro`,light:`Chiaro`,system:`Sistema`},language:{select:`Lingua`,en:`Inglese`,it:`Italiano`},pages:{viewer:{frameTitle:`Viewer CamStack`,underMountTitle:`Il viewer non può essere mostrato attraverso questo relay`,underMountBody:`Questa admin UI è servita sotto {{mount}}. L’app viewer funziona solo all’indirizzo proprio dell’hub — aprila lì, in una nuova scheda.`},integrations:{title:`Integrazioni`,subtitle:`Gestisci le sorgenti video e le connessioni ai provider`},metrics:{title:`Metriche`,subtitle:`Statistiche di prestazioni e utilizzo del sistema`},agents:{title:`Agenti`,subtitle:`Gestisci gli agenti di elaborazione distribuita`},addons:{title:`Addon`,subtitle:`Estendi le funzionalità con moduli addon`},settings:{title:`Impostazioni`,subtitle:`Configura le preferenze di sistema`},users:{title:`Utenti`,subtitle:`Gestisci gli account utente e i permessi`},logs:{title:`Log`,subtitle:`Visualizza i log di sistema e dei dispositivi`}},integrations:{preview:`Anteprima`,snapshotUnavailable:`Snapshot non disponibile`,noSnapshot:`Nessuno snapshot`,lastSnapshot:`Ultimo snapshot:`,offline:`Offline`,active:`Attivi`,available:`Disponibili`,noDevices:`Nessun dispositivo.`,addFirstDevice:`Aggiungi il primo dispositivo per iniziare.`,import:`+ Importa`,noProviders:`Nessun provider disponibile. Installa un addon provider.`,manage:`Gestisci`,integrationName:`Nome integrazione`,integrationNamePlaceholder:`es. Server Garage`,nameRequired:`Il nome è obbligatorio`,nameRequiredSubmit:`Inserisci un nome prima di continuare.`,connectionSuccess:`Connessione riuscita!`,errorPrefix:`Errore:`,back:`Indietro`,testing:`Test...`,testConnection:`Test connessione`,forward:`Avanti`,searchingDevices:`Ricerca dispositivi in corso...`,foundDevices:`Trovati {{count}} dispositivi. Seleziona quelli da importare.`,noDevicesFound:`Nessun dispositivo trovato.`,skip:`Salta`,importSelected:`Importa selezionati`,newIntegration:`Nuova Integrazione`,configureIntegration:`Configura Integrazione`,importDevices:`Importa Dispositivi`,addDevice:`Aggiungi dispositivo`,name:`Nome`,namePlaceholder:`es. Front door`,snapshotUrlOptional:`Snapshot URL (opzionale)`,streamUrls:`Stream URLs`,addStream:`Aggiungi stream`,cancel:`Annulla`,saving:`Salvataggio...`,save:`Salva`,saveAndNew:`Salva e nuova`,test:`Test`,stream:`Stream {{number}}:`,devices:`dispositivi`,rediscover:`Riscopri`,config:`Config`,integrationNotFound:`Integrazione non trovata.`,configComingSoon:`Config coming soon.`,providerConfig:`Provider Config`,editConfig:`Modifica configurazione`,relinkBrokerHelp:`Scegli il broker tramite cui questa integrazione si connette. Selezionando un broker diverso la si ricollega e riavvia l’addon.`,currentBroker:`Broker attuale`,relinkFailed:`Aggiornamento del collegamento al broker non riuscito.`,noBrokerKind:`Questa integrazione dichiara device-adoption ma il manifest dell’addon non ha un brokerKind.`,connectionInconclusive:`Non è stato possibile verificare:`,connectionUntestable:`Questa integrazione non può essere testata prima di essere creata.`,addDeviceDialog:{providerUnavailable:`Provider non disponibile`,testLogs:`Log del test`,required:`Obbligatorio: {{value1}}`,testAll:`Testa tutto`,notReady:`L'addon <mono>{{addonId}}</mono> non è pronto o non supporta la creazione manuale di dispositivi. Verifica che l'integrazione sia online e riprova.`},adoptDevicesModal:{deselect:`Deseleziona`,select:`Seleziona`,discoveryGranularity:`Granularità del rilevamento`,collapse:`Comprimi`,expand:`Espandi`,showChild:`Mostra figlio`,hideChild:`Nascondi figlio`,showAfterAdopt:`Mostra dopo l'adozione`,hideAfterAdopt:`Nascondi dopo l'adozione`,defaultFilter:`Dispositivi`},alexaLoginStep:{loginProxyReturnedAnError:`Il proxy di accesso ha restituito un errore`,accountName:`Nome account`,alexaAccount:`Account Alexa`,amazonRegion:`Regione Amazon`,startingLoginProxy:`Avvio del proxy di accesso…`,waitingForProxyToBe:`In attesa che il proxy sia pronto…`,savingCredentials:`Salvataggio credenziali…`,openTheLinkBelowTo:`Apri il link qui sotto per accedere al tuo account Amazon`,afterCompletingTheLoginAnd:`Dopo aver completato l'accesso e gli eventuali passaggi 2FA, questa procedura continuerà automaticamente.`,loginToAmazon:`Accedi ad Amazon`,note:`Nota:`,waitingForAmazonLoginTo:`In attesa del completamento dell'accesso ad Amazon…`,cancelLogin:`Annulla accesso`,startLogin:`Avvia accesso`,proxyNote:`<b>Nota:</b> il proxy di accesso gira direttamente sull'hub. Se il link non si apre o la pagina non si carica, assicurati che host e porta del proxy dell'hub siano raggiungibili dal tuo browser. Puoi configurare <code>proxyHost</code> nelle impostazioni dell'addon Alexa e verificare che la porta del proxy sia pubblicata (mappatura porte Docker).`},brokerStep:{loginInteractively:`Accedi in modo interattivo`,useExisting:`Usa esistente`,pasteCookie:`Incolla cookie`,createNew:`Crea nuovo`,failedToLoadBrokers:`Impossibile caricare i broker:`,unknownError:`Errore sconosciuto`,toRegisterOne:`per registrarne uno.`,useThisBroker:`Usa questo broker`,name:`Nome`,myHomeAssistant:`Il mio Home Assistant`,creating:`Creazione…`,createBroker:`Crea broker`,enterANameBeforeCreating:`Inserisci un nome prima di creare.`,back:`Indietro`,loadingBrokers:`Caricamento broker…`,noBrokers:`Ancora nessun broker di questo tipo. Passa a <b>{{mode}}</b> per registrarne uno.`},scanNetworkModal:{alreadyAdded:`Già aggiunto`,added:`Aggiunto`,reScan:`Scansiona di nuovo`,scanningTheLocalNetwork:`Scansione della rete locale…`,noDevicesRespondedToThe:`Nessun dispositivo ha risposto alla scansione.`,scanning:`Scansione…`,scan:`Scansiona`,theScanFailedTryAgain:`Scansione fallita. Riprova.`,found_one:`Trovato {{count}} dispositivo sulla rete.`,found_other:`Trovati {{count}} dispositivi sulla rete.`,foundShort_one:`Trovato {{count}} dispositivo.`,foundShort_other:`Trovati {{count}} dispositivi.`},snapshotPopover:{disabled:`Disabilitato`},integrationColumns:{collapse:`Comprimi`,expand:`Espandi`,integration:`Integrazione`,devices:`Dispositivi`,status:`Stato`,deviceCount_one:`{{count}} dispositivo`,deviceCount_other:`{{count}} dispositivi`},scanTheLocalNetworkFor:`Cerca dispositivi sulla rete locale`,scanNetwork:`Scansiona rete`,noIntegrationsConfigured:`Nessuna integrazione configurata.`,clickNewIntegrationToConnect:`Clicca "Nuova integrazione" per collegare telecamere e dispositivi.`,addDeviceLoading:`Caricamento…`,addSelected:`Aggiungi selezionati`,adoptAlready:`Adottato`,adoptColName:`Nome`,adoptColType:`Tipo`,adoptDevices:`Adotta dispositivi`,adoptDevicesHint:`Visualizza in anteprima i dispositivi candidati e aggiungi quelli che vuoi.`,adoptJobAdded:`aggiunti`,adoptJobCancel:`Ferma`,adoptJobFailed:`falliti`,adoptJobProcessed:`elaborati`,adoptJobSkipped:`già presenti`,adoptNoCandidates:`Nessun dispositivo candidato trovato.`,adoptRefresh:`Aggiorna`,adoptRefreshFailed:`Impossibile rilevare i dispositivi.`,adoptRefreshTitle:`Riesegui la scansione dei dispositivi di Home Assistant`,adoptSearch:`Cerca candidati…`,alreadyAdded:`Già aggiunto`,alreadyAddedHint:`Già aggiunto come "{{name}}" — aggiungerlo di nuovo ne sovrascriverebbe le impostazioni.`,backToList:`Torna alle integrazioni`,childrenLoadError:`Impossibile caricare i figli`,close:`Chiudi`,closeAndRefresh:`Chiudi`,confirmDelete:`Elimina integrazione`,connectBroker:`Collega un broker`,creating:`Creazione dell'integrazione…`,creatingHint:`In attesa che l'addon si riavvii e si registri`,creatingOverdue:`Sta richiedendo più tempo del previsto. L'integrazione potrebbe essere già stata creata — chiudi questa finestra e aggiorna per verificare.`,delete:`Elimina`,deleteTitle:`Eliminare l'integrazione?`,deleteWarning:`Questo rimuove l'integrazione "{{name}}" e i suoi {{count}} dispositivo/i. L'addon verrà riavviato. L'operazione non può essere annullata.`,empty:`Nessuna integrazione trovata.`,importLocations:`Importa le posizioni dall'integrazione`,integrationNotFoundHint:`L'integrazione "{{id}}" non esiste. Potrebbe essere stata eliminata, oppure l'URL è sbagliato.`,loading:`Caricamento…`,logs:`Vedi i log`,noProvidersMatch:`Nessuna integrazione corrisponde alla ricerca.`,search:`Cerca integrazioni…`,searchProviders:`Cerca integrazioni…`,settings:`Impostazioni`,toggleHint:`Clic per commutare`,open:`Apri`,loadFailed:`Impossibile caricare le integrazioni.`,viewTable:`Tabella`,viewGrid:`Griglia`,viewLabel:`Vista`,openNamed:`Apri {{name}}`,addMatter:{title:`Aggiungi dispositivo Matter`,help:`In Home Assistant apri il dispositivo e scegli Condividi dispositivo. Incolla qui il codice numerico o il codice MT:. Il dispositivo resta anche in Home Assistant.`,noBroker:`Crea prima il fabric Matter dalle impostazioni di questa integrazione.`,code:`Codice di abbinamento`,progress:`Avanzamento dell'abbinamento`,working:`Aggiunta in corso…`,submit:`Aggiungi dispositivo`,failure:{expired:`Il codice di abbinamento è scaduto. Condividi di nuovo il dispositivo e incolla il nuovo codice.`,notFound:`Nessun dispositivo Matter con quel codice trovato sulla rete.`,wrongCode:`Il codice di abbinamento è stato rifiutato.`,invalid:`Inserisci un codice manuale di 11 o 21 cifre, oppure un codice che inizia con MT:.`,unknown:`Abbinamento non riuscito.`},phase:{discovering:`Ricerca del dispositivo`,pase:`Apertura di una sessione sicura`,commissioning:`Aggiunta a CamStack`,done:`Aggiunto`},broker:`Fabric Matter`}},serverManagement:{title:`Gestione server`,subtitle:`Pacchetti radice aggiornabili a runtime per ogni nodo — gli aggiornamenti si installano nella data directory del nodo e si applicano al riavvio con rollback automatico.`,nodeHub:`hub`,nodeAgent:`agent`,nodeOffline:`offline`,lastReportedVersion:`Ultima versione riportata`,nodeRestarting:`Il nodo si sta riavviando per applicare la modifica…`,topologyError:`Impossibile caricare l'elenco dei nodi del cluster — viene mostrato solo il hub.`,checkForUpdate:`Controlla aggiornamenti`,updateTo:`Aggiorna a {{version}}`,rollback:`Ripristina {{version}}`,runningVersion:`Versione in esecuzione`,latestVersion:`Ultima sul registry`,previousVersion:`Precedente (destinazione rollback)`,seedVersion:`Versione seed immagine`,pendingVersion:`In attesa (si applica al riavvio)`,stateUpToDate:`aggiornato`,stateUpdateAvailable:`aggiornamento disponibile`,stateChecking:`controllo…`,stateStaging:`aggiornamento…`,statePending:`riavvio in sospeso`,stateAwaitingConfirmation:`in attesa di conferma`,stateRolledBack:`rollback eseguito (aggiornamento fallito)`,bootDataRoot:`aggiornabile a runtime`,bootWorkspace:`workspace di sviluppo`,bootBaked:`seed dell'immagine`,bakedSeed:`il seed dell'immagine`,lastChecked:`Ultimo controllo: {{when}}`,loadError:`Impossibile caricare lo stato del pacchetto radice del nodo.`,workspaceNote:`Workspace di sviluppo rilevato — gli aggiornamenti runtime sono disabilitati.`,rolledBackDetail:`Aggiornamento a {{from}} fallito, rollback a {{to}}: {{reason}}`,confirmUpdateTitle:`Aggiorna pacchetto radice del nodo`,confirmUpdateBody:`Installa {{pkg}}@{{version}} sul nodo "{{node}}" e riavvialo per applicarlo. La nuova versione parte in prova: se non raggiunge lo stato ready, il nodo torna automaticamente alla versione corrente. Richiede un supervisore che riavvii sempre il processo (restart policy Docker "unless-stopped" o "always"), altrimenti il nodo resta spento dopo essere uscito per applicare l'aggiornamento.`,confirmUpdateAction:`Aggiorna e riavvia`,confirmRollbackTitle:`Ripristina pacchetto radice del nodo`,confirmRollbackBody:`Riavviare il nodo "{{node}}" sulla versione precedente ({{version}})?`,confirmRollbackAction:`Ripristina e riavvia`,restart:`Riavvia`,nodeRuntimeVersion:`Runtime Node.js`,confirmRestartTitle:`Riavvia nodo`,confirmRestartBody:`Riavviare ora il nodo "{{node}}"? Il processo esce e il suo supervisore lo riavvia sulla stessa versione. Le richieste in corso verso questo nodo vengono interrotte.`,confirmRestartAction:`Riavvia`,updateAll:`Aggiorna tutti i nodi`,updateAllHint:`In sequenza: prima gli agent, l'hub per ultimo — i nodi già aggiornati vengono saltati.`,confirmUpdateAllTitle:`Aggiorna tutti i nodi`,confirmUpdateAllBody:`Aggiorna in sequenza ogni nodo online all'ultima versione pubblicata — prima gli agent, l'hub per ultimo. Ogni nodo installa il suo pacchetto radice (solo se più recente di quello in esecuzione) e riparte in prova con rollback automatico; i nodi già aggiornati vengono saltati. L'hub riparte per ultimo, quindi questa pagina si riconnetterà successivamente.`,confirmUpdateAllAction:`Aggiorna tutti e riavvia`,awaitingConfirmationWarning:`Questo nodo è ripartito su {{version}} e sta confermando lo stato di boot — evita di riavviarlo ora. Aggiornamento e rollback sono temporaneamente non disponibili finché il boot in prova non viene confermato; un riavvio manuale in questa finestra causerebbe il rollback automatico dell'aggiornamento.`,stateCorruptWarning:`Il file di stato server-root su questo nodo è corrotto — il nodo è partito dal seed dell'immagine e le versioni installate nella data directory vengono ignorate. Applicare un aggiornamento riscriverà il file di stato.`,phase2Note:`Fase 2: l'aggiornamento riguarda solo il processo principale di ciascun nodo (hub + agent docker) — i runner degli addon restano sull'overlay /data/framework e l'agent Electron resta legato al bundle fino alle fasi successive. Non assumere coerenza dell'intero stack da un singolo Update.`,imageContractDiverged:`L'immagine del container diverge dal contratto di deployment`,imageSeedShort:`Seed`,installedVersion:`Installata su disco (attiva dopo il riavvio)`,latestVersionShort:`Ultima`,nodeRuntimeVersionShort:`Node.js`,outcomeDropped:`La connessione è caduta e il risultato non ha potuto essere confermato. Il nodo potrebbe essere in riavvio — ricontrolla la versione qui sopra.`,outcomeNoTarget:`Nessuna versione di destinazione nota per questo nodo — esegui prima "Cerca aggiornamenti".`,runningVersionShort:`In esecuzione`,stateRestartRequired:`riavvio necessario`},ai:{addProfile:`Aggiungi profilo`,attachSnapshot:`Snapshot telecamera`,attachTrack:`Traccia recente`,chatEmpty:`Scegli un profilo, allega se vuoi uno snapshot di una telecamera o una traccia recente, e invia un messaggio. Niente di tutto questo viene salvato.`,chatFailed:`La chiamata di test è fallita`,chooseKind:`Scegli un tipo di profilo`,clearChat:`Pulisci`,colAvgMs:`ms medi`,colCalls:`Chiamate`,colConsumer:`Consumatore`,colDay:`Giorno`,colDisk:`Su disco`,colError:`Errore`,colKind:`Tipo`,colModel:`Modello`,colNode:`Nodo`,colOkErr:`OK / err`,colOn:`Attivo`,colProfile:`Profilo`,colState:`Stato`,colTokens:`Token in / out`,colVision:`Vision`,createProfile:`Crea profilo`,defaultDisabled:`Questo profilo predefinito è disabilitato — i chiamanti non risolvono alcun profilo.`,defaultMissing:`Questo predefinito indica un profilo che non esiste più.`,defaultText:`Profilo testo predefinito`,defaultVision:`Profilo vision predefinito`,editProfile:`Modifica {{name}}`,lastDays:`Ultimi {{days}} giorni`,loadFailed:`Impossibile caricare i profili`,message:`Messaggio`,messagePlaceholder:`Chiedi qualcosa al modello…`,model:`Modello`,name:`Nome`,newProfile:`Nuovo profilo {{kind}}`,noCameras:`Nessuna telecamera trovata.`,noEnabledProfiles:`Nessun profilo abilitato. Aggiungine uno nella scheda Profili.`,noKinds:`Nessun provider AI installato.`,noProfiles:`Nessun profilo AI. Premi "Aggiungi profilo" per configurarne uno.`,noRuntimes:`Nessun nodo espone la capability llm-runtime.`,noTracks:`Nessuna traccia nelle ultime 6 ore.`,noUsage:`Nessuna chiamata AI in questo intervallo.`,none:`Nessuno`,notVision:`Questo profilo non supporta la vision — un'immagine allegata verrà rifiutata prima di leggere qualsiasi cosa.`,pickModelFirst:`scegli un modello`,appleNode:`Mac su cui gira`,appleAsking:`Interrogo i nodi…`,appleHint:`Per ora solo testo: titoli e riassunti delle notifiche. Apple rifiuta le richieste formulate come sorveglianza; in quel caso risponde il profilo successivo della catena.`,colFeatures:`Funzionalità`,featureApple:`apple`,featureAppleImages:`apple immagini`,featureGpu:`GPU`,appleAvailable:`disponibile`,appleUnknown:`sconosciuto`,appleNotMac:`non è un Mac`,appleNotEligible:`non idoneo`,appleIntelligenceOff:`Apple Intelligence disattivata`,appleModelNotReady:`modello in download`,appleOsTooOld:`macOS troppo vecchio`,appleHelperMissing:`helper mancante`,appleHelperCrashed:`helper andato in crash`,profile:`Profilo`,profilesSubtitle:`Una riga = un endpoint di modello utilizzabile. I predefiniti qui sotto decidono chi risponde quando una funzione non nomina alcun profilo.`,profilesTitle:`Profili AI`,ready:`pronto`,runtimesFailed:`Impossibile leggere i nodi di esecuzione`,runtimesSubtitle:`Nodi che espongono la capability llm-runtime: cosa ha caricato ciascuno, cosa sta scaricando e quanti dati di modello occupa su disco.`,runtimesTitle:`Runtime gestiti`,saveChanges:`Salva modifiche`,saveFailed:`Salvataggio fallito`,secretHint:`Una chiave API salvata non viene mai mostrata. Lasciala com'è per conservarla; digita un nuovo valore per sostituirla.`,selectModel:`Scegli un modello…`,selectProfile:`Scegli un profilo…`,send:`Invia`,snapshotOf:`Snapshot di {{name}}`,stop:`Ferma`,streamNote:`La risposta arriva in streaming mentre il modello la produce. Un modello a freddo può metterci un po' a caricarsi — la riga di stato dice in quale fase si trova.`,systemPlaceholder:`Rispondi con una frase breve.`,systemPrompt:`System prompt (opzionale)`,tabProfiles:`Profili`,tabRuntimes:`Runtime`,tabTest:`Test`,tabUsage:`Utilizzo`,test:`Prova`,testSubtitle:`Una conversazione usa e getta con un solo profilo. Allega uno snapshot dal vivo o una traccia recente per verificare che il modello sappia davvero leggere un'immagine. Non viene salvato nulla — solo la riga di utilizzo.`,testTitle:`Chat di test`,trackOf:`{{class}} su {{name}}`,unreachable:`irraggiungibile`,usageFailed:`Impossibile leggere l'utilizzo`,usageSubtitle:`Aggregato lato server per giorno, consumatore e profilo — mai le singole chiamate. Gli errori sono contati, così un profilo che fallisce sempre è visibile qui prima che una funzione lo segnali.`,usageTitle:`Utilizzo`,vision:`vision`,window:`Intervallo`,defaultsTitle:`Predefiniti`,hfCheck:`Verifica`,hfDownloading:`{{file}} ({{index}}/{{count}}) — {{done}}{{total}}`,hfExtras:`Scarica anche: {{files}}`,hfHint:`Incolla l'URL di un file GGUF, oppure scrivi org/repo — aggiungi :QUANT (es. unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_M) quando il repo pubblica più di una quantizzazione.`,hfInstall:`Scarica su {{node}}`,hfInstalled:`Scaricato`,hfOverride:`Installa comunque ({{size}})`,hfTitle:`Aggiungi un modello da Hugging Face`,hfVerifying:`verifica di {{file}}…`,newChat:`Nuova chat`,onNode:`{{file}} · {{size}} · su {{node}}`,profilesList:`Profili`,runtimesList:`Nodi`,saveConversation:`Salva conversazione`,throwawayMode:`Usa e getta`,usageList:`Riepilogo`,presenceUnknownTitle:`Impossibile verificare se l'IA è installata`,presenceUnknown:`L'hub non ha risposto alla verifica della capability. Ricarica la pagina per riprovare.`,absentTitle:`L'IA non è installata`,absentDescription:`Installa l'addon AI da Sistema → Addon per aggiungere profili di modello.`,noProfilesTitle:`Ancora nessun profilo IA`,deleteProfileTitle:`Eliminare il profilo?`,deleteProfileMessage:`Elimina "{{name}}". Le funzioni che lo indicano non riceveranno più risposte da questo profilo.`,noRuntimesTitle:`Nessun nodo runtime`,testSetup:`Configurazione`,chatMode:`Modalità conversazione`,testConversation:`Conversazione`,removeAttachment:`Rimuovi allegato`,chatEmptyTitle:`Ancora nessun messaggio`,testSubtitlePersistent:`Le conversazioni vengono salvate per te e possono essere riaperte. La modalità usa e getta resta disponibile.`,changeKind:`Cambia tipo`,sectionConnection:`Connessione`,sectionModel:`Modello`,sectionGeneration:`Generazione`,sectionAdvanced:`Avanzate`,verifyModels:`Verifica e carica modelli`,modelsFound_one:`{{count}} modello trovato`,modelsFound_other:`{{count}} modelli trovati`,listAuth:`Credenziali rifiutate`,listNetwork:`Endpoint non raggiungibile`,listUnsupported:`Nessun elenco modelli`,listInvalid:`Connessione incompleta`,customModel:`Id modello`,customModelHint:`Scegline uno dall’elenco, o scrivi un qualsiasi id modello accettato dal provider.`,featureVision:`visione`,featureTools:`strumenti`,featureStreaming:`streaming`,supportsVision:`Supporta la visione`,supportsVisionHint:`Una richiesta con immagini a un profilo solo testo viene rifiutata, mai declassata.`,unknownWidget:`Questo provider richiede una parte dell’editor che questa versione non ha ({{id}}).`,missingRequired:`obbligatori: {{fields}}`,completeProvider:`completa le impostazioni del provider`},logging:{levels:{title:`Livelli`,subtitle:`Cluster → nodo, vince il più specifico. La soglia filtra ciò che arriva alle destinazioni; il visualizzatore in memoria conserva comunque ogni riga.`,scope:`Ambito`,cluster:`Cluster`,effective:`In vigore qui`,fromDefault:`non è impostato nulla da nessuna parte — questo è il valore predefinito`,fromLayer:`deciso dal livello {{source}}`,notPersisted:`Impossibile leggere o scrivere le impostazioni — quanto vedi è attivo ora, ma non sopravvivrebbe a un riavvio.`,inForce:`in vigore`,inherits:`eredita — nulla impostato a questo livello`,setHere:`impostato qui: {{level}}`,clear:`Azzera`,componentNote:`Un livello per componente è previsto e non ancora risolvibile — nulla in questa pagina eredita da uno.`,component:`Componente`,noComponent:`Nessuno`,opsLogRetention:`Registro di audit della conservazione`,opsLogRetentionNote:`Per quanto tempo viene conservato il registro di ciò che la conservazione ha eliminato. Valido per tutto il cluster e volutamente più lungo di qualsiasi finestra di telecamera — è la storia della pulizia, non della telecamera, ed è ciò che rende spiegabile a posteriori una perdita di spazio. 0 lo conserva per sempre.`},diagnostics:{title:`Diagnostica`,subtitle:`Le diagnostiche si armano per una finestra, non si accendono. Ognuna porta una scadenza e scade da sola — una lasciata accesa è essa stessa un incidente.`,expiresIn:`scade tra {{left}}`,disarmed:`disarmata`,notPersisted:`non persistita — non sopravvive a un riavvio`,disarm:`Disarma`,camerasPlaceholder:`tutte le telecamere`,channels:`Canali dei componenti`,channelsSubtitle:`Dichiarati dagli addon che li possiedono — questo elenco non è mantenuto a mano. Armare un canale apre una finestra con una scadenza; si chiude da sola.`,noChannels:`Nessun addon di questo cluster dichiara un canale di log, oppure nessuno è raggiungibile ora.`,notPerCamera:`non filtrabile per telecamera`}},clusterLoad:{sourceNote:"Ricavato dall'evento `metrics.node-processes-snapshot` che questo nodo emette già a cadenza fissa — questa pagina non aggiunge campionamenti propri. Viene riletto attraverso `metricsProvider.getLoadSeries`, l'UNICO lettore su entrambi i livelli di ritenzione: il nodo conserva in memoria i suoi ultimi 180 snapshot, l'hub conserva su disco la ritenzione decisa dall'operatore.",durableYes:`Il livello durevole ha risposto: questa finestra sopravvive alla chiusura della pagina E al riavvio del nodo.`,durableNo:`Il livello durevole NON ha risposto — questa finestra è il solo anello in memoria (circa un'ora) e un riavvio del nodo la azzera.`,windowSince:`Mostrato da {{since}}.`,reduced:`{{samples}} campioni grezzi, ridotti a un punto ogni {{bucket}}s. Un punto porta il MASSIMO del suo intervallo, mai una media — una media spalmerebbe via il picco che questo grafico esiste per trovare.`,unreduced:`{{samples}} campioni grezzi, un punto ciascuno.`,noThreadSplit:`Nessuna ripartizione CPU per thread su questo nodo — /proc/<pid>/task esiste solo su Linux, e il primo campione dopo un riavvio non ha una finestra da misurare. La CPU qui sotto ripiega sulla MEDIA di vita di ps, che non è una velocità.`,loadingRetained:`Lettura della serie conservata da questo nodo…`,waitingFirstSample:`Nessun campione conservato per questo nodo — in attesa del prossimo snapshot. Al grafico ne servono due per disegnare una velocità.`,bucketRoot:`Supervisore del nodo`,bucketUnattributed:`Processi non attribuiti`,processCount:`{{count}} process(i)`,cpuTitle:`CPU % di un core`,cpuTitleLifetime:`CPU % (media di vita ps)`,seriesMain:`Thread principali`,seriesGc:`GC / helper V8`,cpuUnavailable:`Nessuna ripartizione per thread su questo nodo. Media di vita: {{avg}}%`,memoryTitle:`Memoria RSS`,memoryUnavailable:`Ancora nessun campione di memoria.`,captionBucket:`1 punto = {{bucket}}s (MASSIMO del bucket, non una media)`,captionRaw:`1 punto = 1 istantanea`,clearFilter:`Tutti i runner`,noMatches:`Nessun runner corrisponde a questa ricerca su {{count}} presenti. Il nodo sta riportando — il filtro li nasconde.`,searchLabel:`Trova un runner`,searchPlaceholder:`Trova un runner…`,sortBy:`Ordina per`,sortCpu:`CPU`,sortMemory:`Memoria`,sortName:`Nome`},cameraAttribution:{title:`Carico per telecamera — cosa è attribuibile`,intro:`Questa tabella è il cancello dei grafici qui sopra, non una nota a piè di pagina: una famiglia viene disegnata per telecamera solo quando è davvero misurata E leggibile oggi. La detection gira su un pool condiviso da tutte le telecamere e può solo essere contata, mai misurata — viene mostrata come un unico totale condiviso e mai divisa. Lo streaming è per telecamera per costruzione e resta illeggibile, perché solo una sorgente basata su ffmpeg genera un figlio. Un grafico di un numero che il sistema non sa attribuire è peggio di nessun grafico.`,measured:`Misurabile per telecamera`,accounted:`Solo contabilizzabile (pool condiviso)`,unattributable:`Non attribuibile`,colFamily:`Carico`,colAttribution:`Attribuzione`,colUnit:`Unità di lavoro`,colChartable:`Graficabile oggi`,colMissing:`Cosa manca`,unitNotSortable:`Nessun ordinamento sensato — la cella descrive un meccanismo, non un valore.`,missingNotSortable:`Nessun ordinamento sensato — la cella è una spiegazione, non un valore.`,evidence:`Prove ({{count}})`},cameraLoad:{title:`Carico per telecamera — misurato, su questo nodo`,intro:"Ogni addon dichiara il PROPRIO costo attraverso la capability `load-contribution` — al recorder non serve che qualcuno gli dica quale telecamera serve il suo ffmpeg: l'ha generato lui. Qui nessuno unisce un pid a una telecamera. Vengono disegnate solo le famiglie misurate E leggibili oggi ({{roles}}); le altre sono nominate qui sotto invece che stimate.",windowNote:`La CPU è un DELTA dei contatori cumulativi, sulla stessa cadenza fissa con cui il nodo emette già il suo snapshot dei processi — questo pannello non aggiunge campionamenti e non legge nulla mentre è chiuso. I contributi non vengono conservati da nessuna parte, quindi a differenza dei grafici per addon qui sopra questa finestra parte quando apri il pannello.`,windowSince:`Differenze da {{since}} ({{count}} finestre).`,readFailed:`Impossibile leggere i contributi di carico: {{error}}. È una lettura fallita, NON un cluster inattivo.`,loading:`Lettura di ciò che gli addon dichiarano…`,waitingWindow:`Ancora nessuna finestra per telecamera. Una velocità ha bisogno di due letture, e la seconda arriva col prossimo snapshot dei processi. Un nodo che non esegue alcun figlio di decode, transcode o registrazione resta vuoto — ed è la verità, non un guasto.`,deviceLabel:`Telecamera {{deviceId}}`,unitCount:`{{count}} unità: {{roles}}`,cpuTitle:`CPU % di un core (delta)`,cpuUnavailable:`Ancora nessuna finestra misurabile — finora ogni finestra conteneva un'unità che è partita, si è fermata o non ha riportato un contatore.`,memoryTitle:`Memoria RSS`,memoryUnavailable:`Nessuna memoria riportata per questa telecamera.`,coverage:`Gli addon rivendicano {{claimed}} dei {{observed}} processi camstack che questo nodo riporta.`,coverageUnknown:`Nessuno snapshot dei processi da questo nodo, quindi non si può dire nulla su ciò che non è rivendicato. È diverso da «tutto è rivendicato».`,noUnclaimed:`Nulla è non rivendicato su questo nodo.`,unclaimed:`{{count}} process(i) che nessuno rivendica, con {{rss}} occupati. O una perdita o una famiglia di costo che nessuno ha insegnato a dichiararsi — restano nel loro secchio e non vengono mai ripiegati su una telecamera. La loro CPU è sconosciuta: l'osservatore misura la RSS e non riporta secondi di CPU cumulativi.`,sharedTitle:`Condiviso — dichiarato come non appartenente ad alcuna telecamera`,sharedNote:`Riportato perché il costo condiviso sia visibile come condiviso invece che invisibile. NON viene diviso fra le telecamere presenti: il pool di inferenza è un processo solo che le serve tutte, e una quota ripartita è una stima, non una misura. Questi totali sono cumulativi dall'avvio di ciascuna unità — non una velocità.`,sharedRow:`{{roles}} — {{units}} unità, {{cpu}} secondi di CPU, {{rss}}`,refusedTitle:`Dichiarato per telecamera, e comunque non disegnato`,refusedRow:`— {{count}} voci da {{addons}}. {{reason}}`,unclaimedBadge:`{{count}} non assegnati · {{rss}}`},deviceMigrate:{title:`Migra verso…`,subtitle:`Sostituisci questa telecamera con un altro dispositivo già adottato. La nuova telecamera eredita il numero {{deviceId}}, così registrazioni, regole e integrazioni la seguono.`,pickerLabel:`Telecamera sostitutiva`,pickerPlaceholder:`Scegli una telecamera…`,pickerPending:`Lettura del parco dispositivi…`,noTargets:`Nessun'altra telecamera è adottata, quindi non c'è nulla verso cui migrare.`,action:`Migra`,running:`Migrazione in corso…`,confirmTitle:`Sostituire “{{source}}” con “{{target}}”?`,confirmMessage:`“{{target}}” prende il numero {{sourceId}}. Sotto quel numero sono archiviati tutte le registrazioni, gli eventi, le regole, le zone e le esportazioni verso la domotica di “{{source}}”: tutto segue il numero sul nuovo hardware e continua a funzionare. “{{source}}” viene spenta e riceve in cambio il numero {{targetId}}. Questa operazione scambia due identità di dispositivo e da qui non è annullabile.`,confirmAction:`Migra`,failed:`Migrazione fallita: {{error}}`,swapped:`La sostituta risponde ora sul numero {{inheritedId}}; alla vecchia telecamera è stato assegnato il numero {{retiredId}}.`,quiet:`Tutte le funzioni della telecamera sostituita sono state spente: il vecchio hardware è silenzioso.`,stillLive:`La telecamera sostituita non è stata raggiunta, quindi queste funzioni sono ANCORA ATTIVE sul vecchio hardware. Nulla qui ha impedito la migrazione, ma finché non la scolleghi o non la raggiungi fisicamente può continuare a produrre dati.`,neverOffered:`La telecamera sostituita non ha mai offerto queste funzioni, quindi non c'era nulla da spegnere. Non sono attive.`},locations:{filter:{searchPlaceholder:`Cerca per nome…`,typesLabel:`Filtra per tipo`,clear:`Azzera filtri`,noMatch:`Nessun dispositivo corrisponde a questo filtro.`},unassigned:{searchLabel:`Cerca tra i dispositivi senza stanza`},room:{searchLabel:`Cerca tra i dispositivi in {{room}}`,add:`Aggiungi`,addTo:`Aggiungi dispositivi a {{room}}`,addDialogTitle:`Aggiungi dispositivi a {{room}}`,alreadyHere:`Già in questa stanza`,suggestedUnassigned:`Ancora senza stanza`},roomPicker:{label:`Stanza`,placeholder:`Scegli una stanza`,unassigned:`Senza stanza`},addDialog:{cancel:`Annulla`,confirm:`Aggiungi {{count}}`,nonePicked:`Nessun dispositivo scelto`},links:{noRoom:`Nessuna stanza. Aggiungine una nella scheda Locations.`,noCameras:`Nessuna telecamera assegnata a “{{room}}”.`,loading:`Lettura dei dispositivi collegati…`,unreadable:`Impossibile leggere i dispositivi collegati: {{reason}}`,unsupported:`Questa telecamera non ha una lista di dispositivi collegati.`,none:`Nessun dispositivo collegato.`,implied:`automatico`,edit:`Modifica collegamenti`,addNamed:`Collega dispositivi a {{camera}}`,pickTitle:`Collega dispositivi a {{camera}}`,alreadyLinked:`Già collegato`,suggested:`Suggeriti · {{room}}`},columns:{device:`Dispositivo`,type:`Tipo`,status:`Stato`,noSort:`Gli accessori seguono il loro dispositivo: questa lista mantiene l'ordine.`},rebuildLinkedDevices:`Ricostruisci i dispositivi collegati`,noCameraIsAssignedTo:`Nessuna telecamera è assegnata a “{{room}}”.`,replaceTheLinkedDeviceList:`Sostituire l'elenco dei dispositivi collegati di ogni telecamera in “{{room}}” con quello che contiene la stanza? {{lines}} Tutto ciò che è stato collegato a mano e non è in questa stanza andrà perso.`,rebuild:`Ricostruisci`,notRebuilt:`Non ricostruite: {{value1}}`,deleteLocation:`Elimina posizione`,deleteTheLocation:`Eliminare la posizione “{{name}}”?{{extra}}`,deleteZone:`Elimina zona`,deleteTheZoneTheRooms:`Eliminare la zona “{{name}}”? Le stanze al suo interno restano.`,loadingLocationsAndDevices:`Caricamento di posizioni e dispositivi…`,everyTopLevelDeviceHas:`Ogni dispositivo di primo livello ha una stanza.`,noLocationsYetAddFrontDoor:`Ancora nessuna posizione. Aggiungi Front door, Hall, Kitchen…`,locations:`Posizioni`,roomsAndAreasOfThe:`Stanze e aree del sito. Assegna qui qualsiasi dispositivo: i dischi di archiviazione sono in Dati → Archiviazione.`,cameraLinks:`Collegamenti telecamere`,zones:`Zone`,locationCard:{rename:`Rinomina`,rebuildLinkedDevices:`Ricostruisci i dispositivi collegati`,rename2:`Rinomina {{name}}`,cancelRename:`Annulla la rinomina`,actionsFor:`Azioni per {{name}}`,nothingHereYetAssignA:`Ancora nulla qui: assegna un dispositivo dalla tabella qui sotto.`,expandAccessories:`Espandi {{count}} dispositivo/i collegato/i di {{name}}`,collapseAccessories:`Comprimi {{count}} dispositivo/i collegato/i di {{name}}`},locationDescriptionField:{whatIsThere:`Cosa c'è`,surfacesBoundariesWhatIsNormally:`Superfici, confini, cosa viene normalmente parcheggiato o riposto qui.`,givenToTheAiWith:`Viene dato all'IA insieme alle immagini, così sa cosa sta guardando. Descrivi il LUOGO, non ciò che vi accade: gli eventi cambiano, il terreno no.`},locationZoneField:{none:`— nessuna —`,zone:`Zona`},newLocationButton:{newLocation:`Nuova posizione`,frontDoorHallKitchen:`Front door, Hall, Kitchen…`,newLocationName:`Nome della nuova posizione`,cancelNewLocation:`Annulla la nuova posizione`},newZoneButton:{newZone:`Nuova zona`,zonaGiornoZonaNotte:`Zona giorno, Zona notte…`,newZoneName:`Nome della nuova zona`,cancelNewZone:`Annulla la nuova zona`},siteZonesPanel:{icon:`Icona`,zone:`Zona`,rename:`Rinomina {{label}}`,renameTheZone:`Rinomina la zona`,rooms:`Stanze`,actions:`Azioni`,delete:`Elimina {{label}}`,deleteTheZoneTheRooms:`Elimina la zona: le stanze al suo interno restano`,noZonesYetAZone:`Ancora nessuna zona. Una zona raggruppa stanze (“Zona notte” per le camere da letto) e compare prima di esse nel filtro telecamere dell'app.`},unassignedTable:{clearSelection:`Cancella la selezione`,selectAllUnassignedDevices:`Seleziona tutti i dispositivi non assegnati`,select:`Seleziona {{name}}`,device:`Dispositivo`,type:`Tipo`,status:`Stato`,accessoriesInTow:`Accessori al seguito`,assignTo:`Assegna a`,locationFor:`Posizione per {{name}}`,notInARoom:`Non in una stanza`,topLevelDevicesOnlyAccessories:`Solo dispositivi di primo livello: gli accessori seguono il dispositivo principale.`,bulkAssignment:`Assegnazione multipla`,assignSelectedDevicesTo:`Assegna i dispositivi selezionati a`,assignTo2:`Assegna a…`,assign:`Assegna`,clear:`Cancella`,unknownRoom:`stanza sconosciuta “{{room}}”`,selected:`{{count}} selezionati`,accessoriesInTowCount:`{{count}} accessori al seguito`},deviceGlyphs:{aria:`{{name}}: {{state}}`},rebuildEntry_one:`• {{name}}: {{count}} dispositivo`,rebuildEntry_other:`• {{name}}: {{count}} dispositivi`},deviceDisplay:{title:`Aspetto`,icon:`Icona`,label:`Etichetta`,unit:`Unità`,precision:`Precisione`,precisionInherit:`ereditata`,hidden:`Nascosto`,hideFromLists:`Nascondi dagli elenchi dei dispositivi`,unitSource:`Sorgente{{unit}}`,inherited:`Predefinita ({{name}})`,inheritedContainer:`Predefinita (l'icona del figlio principale)`,pickIcon:`Cambia l'icona di {{name}}`,iconFor:`Icona di {{name}}`,iconSearchPlaceholder:`Cerca icone`,iconNoMatches:`Nessuna icona corrisponde`,iconCategory:{devices:`Dispositivi`,home:`Casa`,security:`Sicurezza`,buildings:`Edifici`,connectivity:`Connettività`,multimedia:`Multimedia`,nature:`Natura`,weather:`Meteo`,transportation:`Trasporti`,animals:`Animali`,accessibility:`Accessibilità`,account:`Account`,arrows:`Frecce`,brands:`Marchi`,charts:`Grafici`,communication:`Comunicazione`,cursors:`Cursori`,design:`Design`,development:`Sviluppo`,emoji:`Emoji`,files:`File`,finance:`Finanza`,"food-beverage":`Cibo e bevande`,gaming:`Giochi`,layout:`Layout`,mail:`Posta`,math:`Matematica`,medical:`Medicina`,navigation:`Navigazione`,notifications:`Notifiche`,photography:`Fotografia`,science:`Scienza`,shapes:`Forme`,shopping:`Acquisti`,social:`Social`,sports:`Sport`,sustainability:`Sostenibilità`,text:`Testo`,time:`Tempo`,tools:`Strumenti`,travel:`Viaggi`},setRoleDefault:`Imposta come predefinito per tutti i sensori {{role}}`,setRoleDefaultTitle:`Applica questa unità / precisione / icona come predefinita per ogni sensore {{role}}`,inheritedRoleDefault:`Predefinita ({{icon}} — il predefinito del ruolo {{role}})`},customize:JSON.parse(`{"loadingDevice":"Caricamento del dispositivo…","deviceUnreadable":"Impossibile leggere il dispositivo","noSuchDevice":"Il dispositivo {{deviceId}} non esiste.","composerAbsent":"Il composer non è in esecuzione su questo hub: le personalizzazioni sono salvate, ma niente le calcola.","status":{"pending":"Lettura della personalizzazione di questo dispositivo…","unknownTitle":"Impossibile leggere la personalizzazione","notLoaded":"Le personalizzazioni non sono ancora caricate: {{reason}}","off":"Spenta","composerUnreachable":"Il composer non ha risposto: {{reason}}"},"blockStatus":{"stopped":"Ferma","starting":"In avvio","running":"Personalizzazione attiva","degraded":"Degradata","failed":"Errore","incomplete":"Incompleto"},"remove":{"button":"Rimuovi personalizzazione","title":"Rimuovere questa personalizzazione?","message":"Ogni funzione aggiunta viene tolta e ogni campo sostituito torna al valore dell'integrazione, esattamente come prima.","confirm":"Rimuovi"},"composed":{"body":"Questo dispositivo è composto: ogni campo viene dalla sua composizione.","edit":"Modifica la composizione","missingBlock":"Questo dispositivo composto non ha un id blocco.","loadFailed":"Impossibile leggere la composizione","notFound":"Blocco composizione non trovato.","noDelete":"Elimina il dispositivo composto da Build, non da qui."},"identity":{"title":"Identità","role":"Ruolo","noRole":"— nessuno —","name":"Nome","room":"Stanza","hidden":"Nascosto","type":"Tipo"},"picker":{"search":"Cerca un dispositivo","loadingDevices":"Caricamento dei dispositivi…","devicesFailed":"Impossibile elencare i dispositivi","loadingFields":"Lettura dei campi del dispositivo…","fieldsFailed":"Impossibile leggere i campi del dispositivo","valuesFailed":"Impossibile leggere i valori attuali: {{reason}}","fields":"Campi","hidden_one":"{{count}} campo non è {{kind}} e non si può usare qui","hidden_other":"{{count}} campi non sono {{kind}} e non si possono usare qui","cancel":"Annulla"},"kinds":{"number":"un numero","string":"testo","boolean":"vero/falso","enum":"uno di un elenco"},"event":{"pulseBody":"Ogni volta che il sensore si accende conta come un campanello; i suoni entro il debounce contano come uno.","spanBody":"Il movimento inizia quando un sensore si accende e finisce quando si spegne o allo scadere del timeout.","debounce":"Debounce (secondi)","timeout":"Timeout (secondi)","cooldown":"Pausa (secondi)","notAnEdge":"questo campo non ha un orario di transizione, quindi non può dare un impulso","levelPending":"In attesa del livello…","alreadyHigh":"Già alto — non è un fronte nuovo","lastEdge":"Fronte di salita","lastEdgeAt":"Ultimo fronte {{at}}","levelInactive":"Quieto","noEdge":"Nessun fronte ancora","clear":"Rimuovi","checking":"Controllo…","spanOpen":"Intervallo aperto","spanQuiet":"Intervallo quieto","timeoutSeconds":"Timeout {{seconds}} s","badge":{"active":"Attivo","stale":"Non aggiornato","released":"Rilasciato","unavailable":"Non disponibile"},"previewWaiting":"In attesa del sensore…","previewAlreadyOn":"Il sensore è già acceso — non conta come un nuovo campanello.","previewCounted":"L’ultimo campanello conterebbe ora.","previewQuiet":"Sensore spento.","previewMotionOn":"Movimento attivo su questa telecamera.","previewSensorOn":"Sensore acceso ma il movimento è finito.","previewMotionOff":"Nessun movimento.","motionNow":{"pending":"Ora: …","unknown":"Ora: sconosciuto","quiet":"Ora: nessun movimento","active":"Ora: movimento da {{seconds}} s"},"doorbellLast":{"none":"Nessun campanello dal {{when}}","ring":"Ultimo campanello: {{when}}","unknown":"Ultimo campanello: sconosciuto"},"doorbellCount":"{{count}} campanelli dall’avvio","edge":"Fronte","edgeValue":{"rising":"Fronte di salita","button":"Pressione","native-event":"Evento nativo"}},"doorbell":{"title":"Campanello","add":"+ Aggiungi sorgente","active":"Attivo","pickTitle":"Aggiungi sorgente del campanello","removeWhat":"La sorgente del campanello {{name}}","otherFormula":"Composto da un'altra formula — modificalo in Avanzate"},"motion":{"title":"Movimento","add":"+ Aggiungi sensore","pickTitle":"Aggiungi sensore di movimento","camera":"Movimento della camera","cameraState":{"always":"sempre incluso","when-confirmed":"solo se confermato","never":"sostituito","passes":"passa invariato"},"mode":{"in-addition":"In aggiunta","confirm":"Conferma","replace":"Sostituisci"},"modeFor":"Modalità di {{name}}","reading":"Lettura dei sensori collegati…","unreadable":"Impossibile leggere i sensori collegati: {{reason}}","notForwarded":{"onboard-not-listed":"I sensori non vengono inoltrati: la sua detection non elenca il movimento della camera. Il movimento della camera passa invariato.","no-active-detection":"I sensori non vengono inoltrati: non ha una detection attiva. Il movimento della camera passa invariato."},"notEnforced":"Il provider di questa camera non supporta ancora Conferma e Sostituisci: il movimento della camera passa invariato finché non viene aggiornato","state":{"offline":"offline","missing":"non trovato","unsupported":"non può generare movimento","unreadable":"non leggibile"},"removeWhat":"Il sensore {{name}}","olderOrchestrator":"L'orchestratore di questa camera è più vecchio delle modalità dei sensori: aggiornalo per cambiare i sensori collegati","refetchFailed":"Non è stato possibile rileggere i sensori collegati dopo la modifica: ricarica per modificarli di nuovo","cameraLevelUnknown":"Sconosciuto: l'orchestratore non ha sentito la camera stessa da quando è partito, oppure è più vecchio di questa vista","cameraLevelOwn":"Il movimento della camera stessa, come l'ha detto l'ultima volta ({{at}}) — non quello che ne fanno i sensori","tooMany":"Una camera accetta al massimo {{max}} sensori","modeLine":{"in-addition":"Il suo movimento conta anche come movimento di questa camera.","confirm":"Il movimento della camera conta solo mentre questo sensore è attivo.","replace":"Finché questo sensore è pronto, il movimento della camera da solo non conta."},"unreadableBare":"I sensori collegati non si sono potuti leggere."},"assign":{"search":"Cerca un dispositivo","filtersLabel":"Filtra per tipo","loadingDevices":"Caricamento dispositivi…","devicesFailed":"Impossibile elencare i dispositivi","noCompatible":"Nessun dispositivo compatibile","showMore_one":"Mostra altri {{count}}","showMore_other":"Mostra altri {{count}}","cancel":"Annulla","addCount_one":"Aggiungi {{count}}","addCount_other":"Aggiungi {{count}}","add":"Aggiungi","change":"cambia","stepDevice":"1 · Dispositivo","stepField":"2 · Campo","stepDetails":"3 · Come si chiama","filters":{"motion":"Movimento e presenza","contact":"Contatti","all":"Tutti i compatibili"},"value":{"active":"attivo","inactive":"inattivo","open":"aperto","closed":"chiuso"},"checking":"Verifica in corso…","unknown":"Impossibile verificare: {{reason}}","removeNamed":"Rimuovi {{name}}","none":"Nessuno","missingKept":"Dispositivo non trovato — resta finché non lo rimuovi","devicesUnreadable":"Impossibile elencare i dispositivi: {{reason}}","native":"Nativo","replaces":"sostituisce","adds":"aggiunto","pickUnusable":"Questo campo non può essere usato qui","removeConfirm":{"title":"Rimuovere?","message":"{{what}} verrà rimosso.","last":"È l'ultima funzione di questa personalizzazione: viene rimossa l'intera personalizzazione, e ogni campo torna al valore della sua integrazione.","confirm":"Rimuovi"}},"saveInFlight":"Un'altra modifica è ancora in salvataggio — riprova tra un momento","battery":{"title":"Batteria","native":"Batteria nativa","replace":"Sostituisci con un altro campo","add":"+ Aggiungi batteria","otherFormula":"Composta da un'altra formula — modificala in Avanzate","removeWhat":"La batteria da {{name}}","nativeReplaced":"Nativa · sostituita"},"running":{"title":"In esecuzione","native":"Stato di esecuzione nativo","replace":"Sostituisci con un altro campo","add":"+ Aggiungi esecuzione","otherFormula":"Composta da un'altra formula — modificala in Avanzate","removeWhat":"L'assegnazione di esecuzione da {{name}}","nativeReplaced":"Nativo · sostituito","invert":"Considera spento come in esecuzione (booleano invertito)","threshold":"Soglia di potenza (watt) — confrontata con il valore riportato dal campo","startDelay":"Ritardo di avvio (secondi) sopra la soglia","stopDelay":"Ritardo di stop (secondi) sotto la soglia"},"consumables":{"title":"Consumabili","add":"+ Aggiungi consumabile","pickTitle":"Aggiungi consumabile","name":"Nome","unit":"Unità","units":{"percent":"%","days":"giorni","hours":"ore","cycles":"cicli"},"removeWhat":"Il consumabile {{name}}","otherFormula":"Composto da un'altra formula — modificalo in Avanzate","takenBy":"Esiste già una voce con questo nome: {{name}}","keyless":"Il nome deve contenere almeno una lettera o una cifra","outOfRange":"Non aggiunto: il campo vale {{value}}, fuori dall'intervallo dell'unità (% va da 0 a 100, un conteggio da 0 in su) — scegli un altro campo o unità","builtIn":"Segnalato dal dispositivo","builtInUnreadable":"Impossibile leggere cosa segnala il dispositivo: {{reason}}","fields":{"salt":"Sale","rinseAid":"Brillantante"}},"linked":{"title":"Dispositivi collegati","add":"+ Collega","pickTitle":"Collega dispositivi","device":"Dispositivo","type":"Tipo","controls":"Controlli con la camera","controlsAlways":"I controlli di ogni dispositivo collegato compaiono con la camera","yes":"Sì","tracked":"In timeline camera","trackFor":"Mostra {{name}} nella timeline di questa camera","trackedHint":"Solo le righe in timeline — le notifiche fotografano ogni dispositivo collegato senza questo interruttore.","health":{"missing":"non trovato","foreign":"non leggibile dal suo proprietario","unavailable":"non è un collegamento valido ora"},"removeWhat":"Il collegamento a {{name}}","notLinked":"non più collegato — ancora in timeline"},"advancedLink":"Avanzate — editor delle espressioni","suggest":{"heading":"Suggeriti · {{location}}","hint_one":"{{count}} suggerito · {{location}}","hint_other":"{{count}} suggeriti · {{location}}","in":"in {{container}}","add":"Aggiungi","addNamed":"Aggiungi {{name}}","addAll":"Aggiungi tutti ({{count}})","use":"Usa","useNamed":"Usa {{name}}"},"scalar":{"caps":{"battery":"Batteria","running-state":"In esecuzione","power-meter":"Potenza ed energia"},"add":"+ Aggiungi","change":"Cambia","remove":"Rimuovi","save":"Salva","cancel":"Annulla","addTitle":"Aggiungi {{title}}","changeTitle":"Cambia la sorgente di {{title}}","changeDevice":"Cambia","noOverride":"Non aggiunto","effective":"Valore attuale","override":"Sorgente: {{name}} · {{field}}","checking":"Controllo delle capacità...","unreadable":"Impossibile leggere la personalizzazione","sourceUnreadable":"Impossibile leggere il campo sorgente","sourceHeld":"{{name}} non ha risposto. Resta l'ultimo valore assegnato.","released":"La sorgente assegnata non esiste più. È attivo lo stato nativo.","chooseAnother":"Scegli un'altra sorgente","removeWhat":"L'override da {{name}}","otherFormula":"Composta da un'altra formula — modificala in Avanzate.","stepDevice":"Dispositivo sorgente","stepField":"Campo","stepTransform":"Trasformazione","preview":"Anteprima","previewDwell":"Sorgente {{value}} · {{level}} · {{countdown}}","thresholdActive":"soglia attiva","thresholdClear":"soglia non attiva","runningIn":"in esecuzione tra {{seconds}} s","stopsAfter":"si ferma dopo {{seconds}} s","invert":"Considera spento come in esecuzione","threshold":"In esecuzione da ({{unit}})","startDwell":"Avvio dopo (secondi)","stopDwell":"Stop dopo (secondi)","scale":"Scala","offset":"Scostamento","badge":{"native":"Nativo","assigned":"Assegnato · {{source}}","released":"Nativo · sorgente mancante","pending":"in attesa","unknown":"sconosciuto"},"fit":{"kind":"Non compatibile","unit":"Non compatibile","unit-unknown":"Non compatibile"},"transform":{"identity":"Copia il valore","invert":"Inverti","threshold":"Soglia","linear":"Scala lineare"},"previewFailure":{"compile":"Impossibile compilare l'anteprima.","dwell":"L'anteprima soglia è nel passo trasformazione.","no-value":"Nessun valore live dalla sorgente.","empty":"Nessun valore in anteprima."},"comparison":"Confronto","comparisonValue":{"gte":"Maggiore o uguale","lte":"Minore o uguale"},"clampMin":"Minimo","clampMax":"Massimo"},"keyed":{"title":{"consumables":"Consumabili"},"add":"Aggiungi elemento","change":"Modifica","remove":"Rimuovi","save":"Salva","addTitle":"Aggiungi elemento","changeTitle":"Modifica elemento","name":"Nome","key":"Chiave","assignField":"Campo","unit":"Unità","unmapped":"Non mappato","assigned":"Assegnato","field":{"level":"Livello","remaining":"Rimanente","status":"Stato"},"trait":{"kind":"Tipo","form":"Forma"},"value":{"wear":"Usura","supply":"Rifornimento","waste":"Scarto","part":"Parte","tank":"Serbatoio","product":"Prodotto","bin":"Contenitore","days":"Giorni","hours":"Ore","cycles":"Cicli","ok":"OK","low":"Basso","empty":"Vuoto","full":"Pieno","replace":"Da sostituire"},"badge":{"native":"Nativo","assigned":"{{count}} assegnati","pending":"Verifica","unknown":"Illeggibile"},"duplicateKey":"Esiste già un elemento con chiave \\"{{key}}\\"."},"fieldsCard":{"removeWhat":"Rimuovere la personalizzazione {{cap}}?","from":"Da {{name}} · {{field}}","unknownDevice":"Dispositivo sconosciuto","now":"adesso","aggregate":{"avg":"media, 1 decimale","latest":"il più recente"},"removeField":"Rimuovi {{field}}","removeFeature":"Rimuovi la funzione {{cap}}"},"override":{"fromDevice":"Da un dispositivo","formula":"Formula","convertUnit":"Converti unità","convertTitle":"Converti unità","convertSummary":"{{from}} → {{to}}","selfNative":"Il valore nativo di questo dispositivo","targetUnit":"Unità di destinazione","publish":"Pubblica il valore convertito","none":"Nessun override","add":"+ Aggiungi override","save":"Salva override"},"sourceSelector":{"pickDevice":"Scegli la sorgente per {{title}}","notCompatibleDevices":"{{count}} non compatibili","otherValues":"Altri valori (non compatibili)","direct":"diretto","withConversion":"con {{name}}","backToDevices":"Torna ai dispositivi","noDevice":"Scegli un dispositivo a sinistra.","noStateField":"Questo dispositivo non ha una lettura acceso/spento che questa estensione possa usare.","backToDevice":"Torna a {{name}}","done":"Fatto","pickedCount_one":"{{count}} selezionato","pickedCount_other":"{{count}} selezionati"}}`),compositionEditor:{now:`l'istante di questa valutazione (ms)`,builtins:{min:`il numero più piccolo`,max:`il numero più grande`,abs:`valore assoluto`,floor:`arrotonda per difetto`,ceil:`arrotonda per eccesso`,sqrt:`radice quadrata`,round:`arrotonda alle cifre`,pow:`x elevato a y`,clamp:`tiene x fra lo e hi`,avg:`media, ignora i null`,sum:`somma`,coalesce:`il primo valore non null`,age:`ms trascorsi da ts`,convert:`converte fra unità dello stesso tipo`,any:`vero se uno è vero`,all:`vero se tutti sono veri`,within:`vero se ts è di al più ms fa`,number:`un numero da un numero o da testo numerico, altrimenti null`,latest:`il timestamp più recente`,rose:`istante dell'ultima salita di un livello (ha memoria)`,count:`quante volte x è avanzato (ha memoria)`,dwell:`resta acceso o spento solo dopo averlo tenuto per i millisecondi indicati (ha memoria)`,latchedAt:`istante dell'ultimo cambio del valore (ha memoria)`,schmitt:`si accende al limite alto e si spegne al limite basso, e resta com'è nel mezzo; ritardi opzionali prima di ogni cambio (ha memoria)`},pageTitle:`Dispositivo composto`,loading:`Caricamento della composizione…`,loadFailed:`Impossibile leggere la composizione`,notFound:`Nessuna composizione {{blockId}}.`,notComposition:`Questo blocco non è una composizione.`,customizationUnknownDevice:`È la personalizzazione di un dispositivo che il composer non ha ancora riportato.`,openOnDevice:`Aprila nella pagina del dispositivo`,existingTarget:`Personalizzazione di {{name}}: aggiungi funzioni o sostituisci singoli campi; il resto resta dell'integrazione.`,name:`Nome`,required:`obbligatorio`,takeFrom:`Prendi da…`,formula:`Formula`,formulaFor:`Formula per {{path}}`,clear:`Svuota`,addSource:`+ Aggiungi sorgente`,removeBinding:`Rimuovi binding {{name}}`,copyFeature:`Copia l'intera funzione da…`,replaces:`sostituisce`,replaceIn:`Sostituisci un campo di {{cap}}`,removeFeature:`Rimuovi {{cap}}`,suggestions:`Suggerimenti`,save:`Salva`,cancel:`Annulla`,steps:{target:`1 · Destinazione`,features:`2 · Funzioni`,fieldsOf:`3 · Campi — {{cap}}`,verify:`4 · Verifica e salva`},verify:{checking:`Verifica col server…`,ok:`✓ Nessun problema: tipi, sorgenti, cicli e proprietà dei campi sono a posto.`,unknown:`Impossibile verificare: {{reason}}`},preview:{label:`Anteprima dal vivo`,waiting:`in attesa di {{sources}}`,runtimeOnly:`calcolata dal composer (questa formula ha memoria)`,devicesFailed:`impossibile leggere l'elenco dei dispositivi: {{reason}}`,unknownDevice:`nessun dispositivo registrato per {{sources}}`},reading:`Lettura dei campi del dispositivo…`,checking:`Verifica di cosa si può dare a questo dispositivo…`,unknown:`Alcune funzioni non si sono potute verificare: {{reason}}`,added:`+ aggiunta`,targetType:`Tipo`,templates:{label:`Parti da`,room:`Stanza`,"converted-sensor":`Sensore convertito`,"derived-binary":`Binario derivato`,confirmTitle:`Sostituire la bozza?`,confirmMessage:`Applicare un modello scarta le modifiche non salvate in questo editor.`,confirmApply:`Applica modello`},openComposedDevice:`Apri dispositivo composto #{{id}}`,toFill:`Da compilare`},notificationRules:{groups:{system:`Eventi di sistema`,class:`Rilevamenti`,zones:`Zone`,label:`Volti, targhe ed etichette`,quality:`Qualità`,scope:`Solo mentre`,device:`Evento dispositivo`,package:`Pacco`,occupancy:`Occupazione`,audio:`Suono`,schedule:`Orari`},labels:{classes:`Classi di oggetti`,zones:`Zone`,faces:`Volti noti`,labels:`Etichette`,crossing:`Attraversamento zona`,source:`Sorgente del rilevamento`,add:`Aggiungi un'etichetta…`},crossing:{enter:`In entrata`,exit:`In uscita`,any:`In entrata o in uscita`,hint:`In che direzione il soggetto attraversa la zona.`},zones:{group:`Zone`,noCameras:`Questa regola non copre nessuna telecamera, quindi non ha zone.`},faces:{group:`Volti noti`,anyKnown:`Qualsiasi volto noto — nessuno in particolare`},scene:{hint:`Notifica solo mentre una scena corrisponde o è diversa.`,noGate:`— nessun vincolo di scena —`,none:`Nessuna scena — creane una nella pagina Scene.`,onlyWhile:`Solo mentre è`,read:`Leggi`,readOwn:`L'impostazione della scena`,rightNow:`Adesso:`,missing:`Questa scena non esiste più — scegline un'altra o rimuovi il vincolo.`},snooze:{title:`Silenzia questa regola per {{minutes}} minuti`,failed:`Impossibile modificare la pausa.`,aria:`metti in pausa {{name}}`},delete:{confirm:`Eliminare questa regola?`,message:`Questa azione eliminerà definitivamente "{{name}}". Non si può annullare.`,aria:`elimina {{name}}`},columns:{snooze:`Pausa`},devices:{compatLoading:`Verifica dei dispositivi utilizzabili da questo tipo di regola…`,compatFailed:`Impossibile verificare quali dispositivi può usare questo tipo di regola — sono elencati tutti. L'hub rifiuta comunque al salvataggio un dispositivo incompatibile.`},status:{grouped:{unknown:`Finestre aperte sconosciute — {{reason}}`,none:`Nessuna finestra aperta`,windows_one:`{{count}} finestra aperta`,windows_other:`{{count}} finestre aperte`,waiting:`{{count}} in attesa`,windowLine:`{{camera}} · {{members}} nella finestra · {{pending}} in attesa · si chiude entro {{seconds}} s`}},grouping:{choice:`Immediata raggruppata`,seconds:`Raggruppa per (secondi)`,hint:`Immediata raggruppata — attende fino a {{n}} s che i soggetti vengano riconosciuti e invia un solo messaggio con un mosaico, uno per soggetto. Si chiude prima se tutti sono già definitivi.`,plainRecognitionHint:`Scatta solo se il nome è già noto quando l'evento viene scritto — scegli Immediata raggruppata per attenderlo.`,scopedHint:`Un soggetto non riconosciuto entro {{n}} s non viene notificato.`,minNote:`Almeno 5 s: i soggetti che arrivano insieme condividono un messaggio.`},alarmNotify:{title:`Notifiche in questa modalità`,duringEntryDelay:`Notifica durante il ritardo di ingresso`,duringEntryDelayHint:`Spento: la notifica del ritardo di ingresso è l’unica finché l’allarme non scatta. Acceso: ogni corrispondenza di una regola d’allarme è una notifica "Intrusione — <luogo>".`,rewatched:`Notifica “di nuovo sorvegliato”`,rewatchedHint:`Un sensore bypassato che si è chiuso e riaperto torna sorvegliato. Mai inviata quando la stessa apertura avvia il ritardo di ingresso.`,ignored:`Notifica sensori ignorati`,ignoredHint:`Un sensore bypassato si è davvero mosso ad allarme inserito e non ha fatto scattare nulla. Mai inviata per un sensore rimasto semplicemente aperto, tornato dopo un'interruzione o ripetuto.`},systemEventKinds:{"device-offline":`Dispositivo offline`,"device-online":`Dispositivo online`,"device-disabled":`Dispositivo spento`,"device-enabled":`Dispositivo acceso`,"stream-offline":`Flusso offline`,"stream-online":`Flusso online`,"device-battery-low":`Batteria scarica`,"device-battery-normal":`Batteria ripristinata`,"device-consumable-low":`Consumabile in esaurimento`,"device-consumable-normal":`Consumabile sostituito`,"detection-blind":`Movimento da 10+ minuti, rilevatore senza output`,"motion-noisy":`Telecamera con movimento senza soggetto`,"motion-calm":`Movimento tornato calmo`,"package-llm-silent":`Conferma pacchi senza risposta`,"package-llm-answered":`Conferma pacchi di nuovo attiva`,"recording-stalled":`Registrazione ferma`,"recording-healthy":`Registrazione ripristinata`,"recording-degraded":`Registrazione degradata`,"device-attention-required":`Dispositivo richiede intervento`,"device-attention-resolved":`Intervento sul dispositivo risolto`,"storage-location-low":`Spazio in esaurimento su un archivio`,"storage-location-critical":`Archivio quasi pieno`,"storage-location-ok":`Spazio archivio tornato normale`,"node-offline":`Nodo offline`,"node-online":`Nodo online`,"node-restarting":`Nodo in riavvio`,"node-updating":`Nodo in aggiornamento (riavvio imminente)`,"node-inference-unavailable":`Nodo senza dispositivi di inferenza utilizzabili`,"addon-crash-loop":`Crash loop addon (runner arreso)`,"addon-update-available":`Aggiornamento addon disponibile`,"addon-updated":`Addon aggiornati`,"server-update-available":`Aggiornamento server disponibile`,"server-updated":`Server aggiornato`,"wrapper-update-available":`Aggiornamento immagine container disponibile`,"export-completed":`Export completato`,"backup-completed":`Backup completato`,"alert-critical":`Avviso critico aperto`,"alert-error":`Avviso di errore aperto`,"alert-critical-resolved":`Avviso critico risolto`,"rule-broken":`Regola di notifica rotta`,"rule-repaired":`Regola di notifica riparata`,"alarm-arm-refused":`Inserimento allarme rifiutato`,"alarm-check-failed":`Allarme inserito senza verifica aperture`,"alarm-arming":`Allarme in inserimento`,"alarm-armed":`Allarme inserito`,"alarm-pending":`Ritardo di ingresso allarme avviato`,"alarm-triggered":`Allarme scattato`,"alarm-rearmed":`Allarme reinserito`,"alarm-sensor-bypass":`Sensore allarme escluso o ripristinato`,"alarm-disarmed":`Allarme disinserito`},systemEventGroups:{"device-state":`Stato del dispositivo`,streams:`Flussi`,battery:`Batteria`,consumables:`Consumabili`,"detection-blind":`Nessun rilevamento`,"motion-noise":`Movimento senza soggetto`,"package-llm":`Conferma pacchi`,recording:`Registrazione`,"device-attention":`Richiede intervento`,nodes:`Nodi`,addons:`Addon fermi`,"addon-updates":`Aggiornamenti addon`,updates:`Aggiornamenti server e container`,"backups-exports":`Backup ed export`,storage:`Archivi`,alerts:`Avvisi`,"rule-health":`Regole di notifica`,alarm:`Allarme`},systemEventHints:{"device-state":`Un dispositivo che l’hub non raggiunge più, o che è tornato. Spento / acceso è un dispositivo che un operatore ha spento o riacceso — non un guasto, una scelta.`,streams:`Un flusso che si è interrotto o è tornato.`,battery:`Una batteria sotto la soglia del cluster e, se vuoi, il ritorno alla normalità. I dispositivi con un indicatore binario di batteria scarica sono giudicati da quello, non dalla percentuale.`,consumables:`Un consumabile — filtro, spazzola, sacchetto, scorta o serbatoio di scarto — alla soglia di questa regola o segnalato dal dispositivo come da sostituire, e se vuoi il ritorno alla normalità dopo il cambio. Un dispositivo che dice solo «sostituisci» è giudicato da quello, non da una percentuale.`,"detection-blind":`Una telecamera che si è MOSSA — almeno 10 minuti di movimento in 3 sessioni — è stata analizzata, e il cui rilevatore non ha prodotto nulla, nemmeno un candidato sotto la soglia di confidenza.`,"motion-noise":`Una telecamera il cui movimento scatta di continuo senza un soggetto per un’ora — un quarto del tempo in movimento, o 40 sessioni — e se vuoi il ritorno alla calma. Il rilevatore va bene; regola le zone o la sensibilità del movimento.`,"package-llm":`Una telecamera la cui conferma pacchi ha smesso di rispondere — tre controlli di fila senza risposta dal modello di visione, quindi i possibili pacchi non vengono annunciati — e il ritorno quando il modello risponde di nuovo.`,recording:`Una telecamera la cui registrazione è accesa ma non arriva filmato (ferma), uno scrittore che ha esaurito i riavvii (degradata) e, se vuoi, il ritorno a una scrittura sana.`,"device-attention":`Un dispositivo il cui addon ha aperto un avviso critico perché serve l’operatore (un PIN mancante o rifiutato), e il ritorno alla normalità.`,nodes:`Un nodo agente o worker che entra o esce dal cluster, o un nodo online i cui dispositivi di inferenza sono tutti spariti.`,addons:`Un addon che l’hub ha smesso di riavviare dopo crash ripetuti.`,"addon-updates":`Una versione più nuova di un addon, o un aggiornamento addon appena finito.`,updates:`È disponibile una versione più nuova del server, o del container / dell’app in cui gira il nodo — oppure un aggiornamento del server è appena finito.`,"backups-exports":`Un backup pianificato o manuale dell’hub è finito, o un export di filmati ha finito il rendering.`,storage:`Un archivio con spazio libero basso o critico — o la cui sonda di capacità è fallita — e se vuoi il ritorno allo stato ok.`,alerts:`Un avviso critico o di errore che si apre — un runner fallito o rifiutato, un archivio di registrazione senza spazio, un accesso scaduto — e se vuoi un avviso critico che si chiude. Una notifica per episodio.`,"rule-health":`Una regola di notifica che non può funzionare — non si carica più, o nomina ancora un dispositivo o una destinazione cancellati — e se vuoi la sua riparazione.`,alarm:`La centrale che rifiuta l’inserimento, che si sta inserendo, inserita, in conto alla rovescia verso la sirena, scattata, reinserita, con un sensore aperto escluso, o disinserita.`}},ruleScope:{mode:{all:`Tutti`,only:`Solo i selezionati`,except:`Tutti tranne i selezionati`},which:`Quali {{items}}`,items:{devices:`dispositivi`,classes:`classi`,zones:`zone`,faces:`volti`,labels:`etichette`},every:{devices:`Tutti i dispositivi — nessuna restrizione.`,classes:`Tutte le classi — nessuna restrizione.`,zones:`Tutte le zone — nessuna restrizione.`,faces:`Tutti i volti — nessuna restrizione.`,labels:`Tutte le etichette — nessuna restrizione.`},legacy:`Questa regola esclude anche {{items}} — mantenuti al salvataggio.`,removeExclusions:`Rimuovi le esclusioni`,cleared:`Salvando in questa modalità si rimuovono {{items}} dalla regola.`},inlineEdit:{editName:`Modifica nome`,editLocation:`Modifica posizione`,save:`Salva`,cancel:`Annulla`},connectPhone:{title:`Collega un telefono`,description:`Inquadra il codice con il telefono per aprire l'app CamStack (o il viewer web) su questo hub. Il link contiene solo l'indirizzo dell'hub — nessun token, nessuna credenziale.`,signInHint:`L'app poi accede con il login abituale: password (e codice TOTP, se attivo) oppure "Accedi con CamStack".`,addressLabel:`Indirizzo dell'hub per il telefono`,copyLink:`Copia link`,linkLabel:`Link di collegamento`,qrAlt:`Codice QR che apre l'app CamStack su questo hub`,loading:`Lettura degli indirizzi di questo hub…`,error:`Impossibile leggere gli indirizzi di questo hub: {{message}}`,retry:`Riprova`,empty:`Questo hub non pubblica alcun indirizzo raggiungibile da un telefono (nessun tunnel, nessuna mesh, nessuna interfaccia LAN). Controlla Cluster → Network.`,insecure:`Indirizzo HTTP non cifrato: l'app può usarlo su questa rete, ma la pagina di fallback nel browser accetta solo hub https. Preferisci il tunnel o l'indirizzo mesh quando disponibili.`,implausible:`L'hub segnala questo indirizzo come difficilmente raggiungibile da un telefono.`,tier:{public:`Tunnel pubblico`,mesh:`Tailscale (MagicDNS)`,lan:`Rete locale`,"lan-ipv6":`Rete locale (IPv6)`}},storage:{addLocationWizard:{type:`Tipo:`,loadingProviders:`Caricamento dei provider…`,node:`Nodo`,path:`Percorso`,connectionOk:`Connessione riuscita.`,testFailed:`Test fallito: {{value1}}`,testing:`Test in corso…`,testConnection:`Test connessione`,displayName:`Nome visualizzato`,on:`{{type}} su {{displayName}}`,autoDerivedOverrideIfNeeded:`— derivato automaticamente; modificalo se serve`,format:`Formato:`,typeSlug:`<type>:<slug>`,enableImmediately:`Abilita subito`,aDisabledLocationReceivesNo:`Una posizione disabilitata non riceve scritture finché non viene abilitata: le letture e la retention per età continuano a funzionare, ma nulla di nuovo viene salvato qui. Lascia disattivato per registrare il disco ora e iniziare a usarlo più tardi.`,saving:`Salvataggio…`,noProvider:`Nessun provider di archiviazione supporta il tipo "{{type}}". Installa un addon compatibile (es. <code>remote-storage</code>) per abilitarlo.`,idLabel:`Id`},drainProgressLine:{thisLocationIsDrainingThe:`Questa posizione si sta svuotando. L'hub non ha ancora indicato quanto resta: lo svuotamento è appena stato impostato, oppure questo hub è precedente al report di avanzamento.`,drainingRemainingNotReportedYet:`Svuotamento · residuo non ancora indicato`,everythingThatWasHereHas:`Tutto ciò che c'era è stato spostato. La posizione è ancora in modalità svuotamento: non riceve nuove scritture finché non la cambi.`,drainedNothingLeftToMove:`Svuotata · niente da spostare`,drainProgress:`Avanzamento dello svuotamento`,theDrainIsPacedBy:`Lo svuotamento procede alla velocità con cui questa classe di dati continua a crescere, e questa non è ancora stata osservata. Non c'è una data da indicare.`,emptyTimeNotKnownYet:`· tempo di svuotamento non ancora noto`,left:`{{size}} rimanenti`,moved:`{{percent}}% spostato`,empty:`vuoto {{when}}`},editLocationModal:{displayName:`Nome visualizzato`,node:`Nodo`,path:`Percorso`,connectionOk:`Connessione riuscita.`,testFailed:`Test fallito: {{value1}}`,testing:`Test in corso…`,testConnection:`Test connessione`,saving:`Salvataggio…`,title:`Modifica {{name}}`,providerGone:`Il provider <code>{{id}}</code> non è più registrato. Schema dei campi non disponibile; la configurazione grezza viene mantenuta al salvataggio.`},pathBrowser:{newFolder:`nuova cartella`,create:`Crea`,free:`{{free}} liberi / {{total}}`},protectionPolicyField:{protectedFreeSpace:`Spazio libero protetto`,protectionUnit:`Unità di protezione`,ofTheVolume:`% del volume`,gbOfFreeSpace:`GB di spazio libero`,legacyMax:`Questa posizione memorizza anche una dimensione massima utilizzata di {{gb}} GB. Quel limite è ora gestito dal sistema e non è più modificabile qui; viene mantenuto così com'è.`},locationCapacityBar:{capacityUnknown:`Capacità sconosciuta`,capacityUnknownCamstackHolds:`Capacità sconosciuta · CamStack occupa {{owned}}`},locationCard:{deleteLocation:`Elimina posizione`},locationDiscardControl:{discardLeftoversOn:`Scartare gli avanzi su "{{displayName}}"?`,permanentlyDeletesLeftoverFilesAnd:`Elimina definitivamente i file e i record avanzati su questa posizione. Le altre posizioni non sono toccate. L'operazione non si può annullare e può richiedere ore.`,discardLeftovers:`Scarta gli avanzi`,permanentlyDeleteLeftoverFilesOn:`Elimina definitivamente i file avanzati su questa posizione. Le altre posizioni non sono toccate.`,camsProgress:`{{done}}/{{total}} cam`,rowsDeleted_one:`{{count}} riga`,rowsDeleted_other:`{{count}} righe`},locationGroup:{singleOneLocationPerType:`Singola: una posizione per tipo. Modifica quella esistente; non si può dividere.`,noLocationRegisteredClickAdd:`Nessuna posizione registrata. Fai clic su "Aggiungi" per registrarne una.`,noLocationRegisteredYetShould:`Nessuna posizione registrata: dovrebbe essere creata automaticamente al prossimo avvio.`},locationModeSelector:{locationState:`Stato della posizione`,locationStateChoices:`Scelte dello stato della posizione`,closeLocationStateChoices:`Chiudi le scelte dello stato della posizione`}},pipeline:JSON.parse(`{"cameraAssignmentsTable":{"camera":"Telecamera","placement":"Posizionamento","rolesHere":"Ruoli qui","runningOn":"In esecuzione su","status":"Stato","filterByCameraActivity":"Filtra per attività della telecamera"},"cameraStatusStrip":{"cameras":"Telecamere","fpsMsInferQ":"{{name}} · {{label}} · {{value3}} fps · {{value4}}ms infer · q={{queueDepth}}"},"clusterDetail":{"clusterOrchestration":"Orchestrazione del cluster","cameraAssignmentsLoadBalancingThe":"Assegnazione delle telecamere, bilanciamento del carico, raccomandazione del rilevatore, ruoli del cluster, impostazioni e tavolozza.","tabAssignments":"Assegnazioni","tabLoadBalancing":"Bilanciamento del carico","tabAutoTune":"Auto-ottimizzazione","tabRoles":"Ruoli","tabPalette":"Tavolozza"},"clusterStepModel":{"oneValueForTheWhole":"Un unico valore per tutto il cluster — questo step scrive in un indice vettoriale condiviso, dove due encoder rendono i punteggi di similarità privi di significato.","changeInClusterSettings":"Modifica in Cluster → Impostazioni ›","oneModelForEveryNode":"Un unico modello per ogni nodo e telecamera:","clusterWide":"a livello di cluster","indexNote":"{{index}} corrisponde solo ai vettori del modello che li ha generati.","noBuild":"Il motore di questo acceleratore ({{engine}}) non fornisce una build di <b>{{model}}</b>. Rifiuta questo passaggio invece di eseguire un encoder diverso — un sostituto introdurrebbe un secondo spazio di feature in {{index}}."},"liveLoadPanel":{"liveLoad":"Carico live","activeAttached":"Attive / Collegate","avgInferMs":"Infer medio ms","queue":"Coda","audio":"Audio","totalAgents":"Agenti totali","totalFps":"FPS totali","avgInferenceMs":"Inferenza media ms","queueDepth":"Profondità coda","agent":"Agente","cameras":"Telecamere","inferenceMs":"Inferenza ms","noCameraMetricsReceivedYet":"Nessuna metrica ricevuta dalle telecamere"},"nodeCameraAssignmentsTable":{"moveDetectionTo":"Sposta la detection su {{name}}","moveAudioTo":"Sposta l'audio su {{name}}","unpinDetection":"Rimuovi vincolo detection","unpinAudio":"Rimuovi vincolo audio","camera":"Telecamera","rolesHere":"Ruoli qui","status":"Stato","move":"Sposta {{deviceName}}","loadingCameras":"Caricamento telecamere…","noCameraRunsOnThis":"Nessuna telecamera è in esecuzione su questo nodo al momento"},"nodeDetail":{"assignments":"Assegnazioni","pipeline":"Pipeline","warmInstances":"Istanze attive","logs":"Log"},"nodeDetailHeader":{"nodeNotFound":"Nodo non trovato:","cameras":"{{attached}} telecamere ({{active}} attive)","avgInference":"{{ms}}ms inferenza media","queue":"coda {{depth}}"},"nodeList":{"cluster":"Cluster","assignmentsLoadBalancingRoles":"Assegnazioni, bilanciamento del carico, ruoli","pipelineEnabled":"Pipeline: abilitata","pipelineNotEnabledAgentCapability":"Pipeline: non abilitata (capability dell'agente)","pipe":"Pipe","audioEnabled":"Audio: abilitato","audioNotEnabledAgentCapability":"Audio: non abilitato (capability dell'agente)","aud":"Aud"},"nodeLoadOverview":{"nodeLoad":"Carico dei nodi","reading":"lettura…","noClusterNodesReportedYet":"Nessun nodo del cluster ha ancora riferito.","noDetect":"no detect","onlineButItDidNot":"Online, ma non ha risposto all'ultima lettura del carico — i suoi valori qui sotto sono sconosciuti, non zero.","runningAttached":"In esecuzione / collegate","sessionsInInferenceNowCameras":"Sessioni in inferenza ora / telecamere collegate a questo runner (il carico impegnato del bilanciatore) / limite impostato dall'operatore.","targetShare":"Quota obiettivo","theNodeShareAutomaticOr":"La quota del nodo (automatica o manuale) normalizzata sui nodi che il bilanciatore considera davvero (online E con detect abilitato).","actualShare1H":"Quota effettiva (1 h)","timeWeightedShareOfThe":"Quota, pesata nel tempo, delle sessioni di detection PARALLELE del cluster svolte da questo nodo nell'ultima ora — la grandezza che una quota governa. '—' = nessuna sessione eseguita qui nella finestra.","peakYields":"Picco · cessioni","mostSessionsThisNodeRan":"Il massimo di sessioni eseguite insieme da questo nodo nell'ultima ora, e quanti turni di quota ha ceduto a un altro nodo perché pieno o in affanno.","scoreQueue":"Punteggio · coda","theCapacityScoreBalanceMinimises":"Il punteggio di capacità che balance() minimizza (collegate + profondità della coda) e la profondità grezza della coda.","capFill":"Riempimento limite","attachedMaxcameras":"collegate / maxCameras.","avgInfer":"Infer medio","meanInferenceTimeAcrossThis":"Tempo medio di inferenza sulle telecamere collegate a questo nodo.","decode":"Decode","thisNodeSProbedDecode":"L'accelerazione hardware di decode rilevata su questo nodo.","acceleratorsNotReadYet":"Acceleratori non ancora letti.","accelerators":"Acceleratori","noDeviceIsACamera":"Nessun dispositivo è candidato come radice telecamera su questo nodo — le sessioni girano sul pool predefinito (CPU) del runner.","noneInPlayRunnerDefault":"nessuno in uso · pool predefinito del runner","notKnownTheNodeDid":"Sconosciuto: il nodo non ha riferito, oppure esegue una sessione che nessun dispositivo giustifica.","atItsMaxsessionsCapThe":"Al limite maxSessions — il bilanciatore lo salta finché una sessione non termina.","atCap":"· al limite","summaryLine":"{{active}} in esecuzione · {{attached}} collegate · {{reading}}","readingAge":"{{age}} fa","noReading":"nessuna lettura","excludedWith":"escluso — {{reason}}","sharePct":"quota {{pct}}%","exclusion":{"disabled":"disattivato — non è una destinazione di assegnazione","unavailable":"la sonda del nodo non lo vede (scollegato o ancora in preparazione)","cannotHostCameraRoot":"il formato del suo motore non ha un modello radice di rilevamento oggetti","acceleratorPreferred":"ripiego su CPU — non compete mai mentre un acceleratore è in servizio"}},"settingsPanel":{"saving":"Salvataggio…"},"clusterAssignmentsTab":{"cameraPlacement":"Posizionamento delle telecamere","pinACameraToA":"Vincola una telecamera a un nodo, o a un acceleratore del suo nodo; Auto lascia scegliere a ogni sessione. Il decode gira sempre insieme alla detection. Carico, quote e limiti sono in Bilanciamento del carico."},"clusterAutoTuneTab":{"notChanged":"Non modificato","device":"Dispositivo","capacity":"Capacità","detector":"Detector","why":"Motivo","nodeSettings":"Impostazioni del nodo","noChange":"Nessuna modifica.","stepDefault":"predefinito dello step","none":"Nessuno.","anotherApplyIsAlreadyRunning":"Un'altra applicazione è già in corso.","theConfigurationChangedSinceThe":"La configurazione è cambiata da quando il piano è stato mostrato. Controlla il piano aggiornato qui sotto e applica di nuovo.","aModelCouldNotBe":"Impossibile scaricare un modello: nulla è stato modificato.","autoTune":"Auto tune","picksForEveryAcceleratorThe":"Sceglie, per ogni acceleratore, il detector YOLOv9 più accurato che regga comunque almeno il numero di telecamere indicato contemporaneamente, in base all'hardware del nodo e alle velocità misurate. Non viene misurato né stimato nulla sull'attività delle tue telecamere. Applicandolo si impostano quei modelli sugli acceleratori e si rimuovono i loro override di soglia, così ogni modello usa le proprie soglie predefinite. Le telecamere non hanno un modello o una soglia propri. Step abilitati, dispositivi, vincoli, registrazione, notifiche, zone e regole non vengono toccati. Non è possibile annullare.","keepFree":"Mantieni libero","shareOfEachAcceleratorKept":"Quota di ogni acceleratore mantenuta libera","ofEachAccelerator":"{{value1}}% di ogni acceleratore","atLeast":"Almeno","minimumParallelSessionsPerDevice":"Sessioni parallele minime per dispositivo","computing":"Calcolo…","computePlan":"Calcola piano","recompute":"Ricalcola","apply":"Applica…","applyAutoTune":"Applicare l'auto tune?","theseAreAllTheChanges":"Queste sono tutte le modifiche. Ogni override elencato viene rimosso e non può essere ripristinato.","applying":"Applicazione…","sessionsAtFps_one":"{{count}} sessione a {{fps}} fps","sessionsAtFps_other":"{{count}} sessioni a {{fps}} fps","fpsKeptFree":"{{fps}} fps, {{percent}}% lasciato libero","thresholdReset":"{{step}}: {{keys}} riportato al valore predefinito del modello","defaultModel":"predefinito","camerasAtOnce_one":"{{count}} telecamera alla volta per acceleratore","camerasAtOnce_other":"{{count}} telecamere alla volta per acceleratore","planSummary":"{{modelChanges}} modifica/che di modello, {{thresholdClears}} ripristino/i di soglia del nodo."},"clusterEventsTab":{"postProcessingNode":"Nodo di post-elaborazione","theSingleNodeThatRuns":"L'unico nodo che esegue la post-elaborazione della detection (eventi, media, audio e movimento). Ogni altro nodo resta inattivo — nessun bilanciamento multi-nodo. Ha effetto al riavvio dell'addon.","hubDefault":"hub (predefinito)","eventsFolder":"Cartella degli eventi","whereEventCropsFullFrames":"Dove vengono salvati i ritagli e i frame completi degli eventi. Una sola cartella — nessuna collezione / divisione equa."},"clusterLoadBalancingTab":{"nodeShares":"Quote dei nodi","shareSource":"Origine delle quote","suggesting":"Calcolo del suggerimento…","suggestFromBenchmark":"Suggerisci dal benchmark","suggestFromHardware":"Suggerisci dall'hardware","autoTune":"Auto tune","moveStandingAlwaysOnCameras":"Sposta le telecamere fisse (sempre attive) che non sono più sul loro nodo migliore. Le telecamere vincolate non si spostano mai; le sessioni su movimento vengono comunque posizionate per sessione.","rebalancing":"Riequilibrio…","rebalance":"Riequilibra","policy":"Policy:","honourShares":"rispetta le quote","automaticSharesAreBeingComputed":"Le quote automatiche vengono calcolate dalla capacità misurata del cluster; nel frattempo si usano i valori salvati.","benchmarkEachNodeSShare":"Benchmark: la quota di ogni nodo segue la sua capacità misurata dai risultati dei benchmark dei nodi (capacità hardware dove mancano)","hardwareEachNodeSShare":"Hardware: la quota di ogni nodo segue la sua capacità al modello di Auto tune, dalla velocità misurata del suo hardware","recomputedWheneverANodeOr":", ricalcolata ogni volta che un nodo o un acceleratore viene aggiunto, rimosso, attivato o disattivato, o cambia modello","maxConcurrentSessionsAdvanced":"Sessioni simultanee massime (avanzato)","maxConcurrentSessionsFor":"Sessioni simultanee massime per {{name}}","aHardCapOnThe":"Un limite rigido alle sessioni che un nodo esegue insieme (contano anche le telecamere sempre attive). Un nodo al limite non viene mai scelto; con le quote il suo turno passa a un nodo libero. Vuoto = illimitato.","accelerators":"Acceleratori","noDetectCapableNodes":"Nessun nodo in grado di fare detect","enableDetectionOnANode":"Abilita la detection su un nodo in Ruoli e nodi per configurarne gli acceleratori.","suggestedFromBenchmark":"Suggerito dal benchmark","suggestedFromHardware":"Suggerito dall'hardware","applySuggestedShares":"Applica le quote suggerite","notPartOfTheSuggestion":"escluso dal suggerimento — {{skippedReason}}","parallelSessions":"≈ {{capacitySessions}} sessioni parallele · {{value2}}","measuredByNodeBenchmarksOr":"misurato dai benchmark dei nodi, o dalla tabella hardware dove un nodo non ha risultati","atTheModelsAutoTune":"ai modelli scelti da Auto tune (almeno {{minSessionsPerDevice}} per acceleratore), dalla velocità misurata dell'hardware di ogni nodo","applyingWritesTheNodeAnd":"Applicando si scrivono le quote di nodi e acceleratori; i limiti sono indicativi — applicali uno a uno dalla riga del rispettivo acceleratore.","automaticSharesAlreadyFollowThis":"Le quote automatiche seguono già questo valore; i limiti sono indicativi — applicali uno a uno dalla riga del rispettivo acceleratore.","staleDevicePins":"Vincoli dispositivo obsoleti","clearPin":"Rimuovi vincolo","clusterPeak_one":"picco del cluster: {{count}} sessione parallela nell'ultima ora","clusterPeak_other":"picco del cluster: {{count}} sessioni parallele nell'ultima ora","leastLoadedNote":"con least-loaded vince sempre un nodo inattivo, quindi le quote contano solo quando i nodi sono occupati","lastAt":"— ultimo alle {{time}}","lastAtTrigger":"— ultimo alle {{time}} ({{trigger}})","switchFailed":"Impossibile cambiare le quote: {{message}}","saveFailed":"Impossibile salvare le quote: {{message}}","suggestionFailed":"Suggerimento non riuscito: {{message}}","sharesIntro":"Quote proporzionali alla capacità di ogni nodo in sessioni parallele — {{basis}}, calcolate su sessioni a {{fps}} fps con il {{headroom}}% lasciato libero. Nessun carico viene misurato o stimato."},"clusterOrchestratorLogsTab":{"orchestratorLogs":"Log dell'orchestrator","dispatchDecisionsBalancerMovesAnd":"Decisioni di dispatch, spostamenti del bilanciatore ed eventi di failover dell'orchestrator della pipeline. In streaming live; il chip del dispositivo su una riga indica a quale telecamera si riferisce."},"clusterRecordingTab":{"recordingNode":"Nodo di registrazione","theSingleNodeThatRecords":"L'unico nodo che registra (continuo ed eventi) e serve la riproduzione. Ogni altro nodo resta inattivo — nessun bilanciamento multi-nodo. Ha effetto al riavvio dell'addon.","hubDefault":"hub (predefinito)","recordingsFolders":"Cartelle delle registrazioni","whereRecordingsAreStoredMulti":"Dove vengono salvate le registrazioni. Collezioni multi-posizione — i segmenti sono distribuiti tra le posizioni di un tipo. Aggiungi una posizione per aumentare la capacità; segnane una come predefinita per tipo.","hubOnlyNote":"Lo stream-broker è solo sull'hub — un recorder su agent preleva gli stream dall'hub via rete. La porta di restream RTSP dell'hub deve essere raggiungibile da <b>{{node}}</b>. Se l'host derivato automaticamente non funziona, imposta l'impostazione globale <b>recordingHubHostname</b> del recorder."},"clusterRolesNodesTab":{"loading":"Caricamento","clusterRoles":"Ruoli del cluster","oneNodeHoldsEachRole":"Un nodo ricopre ciascun ruolo per tutte le telecamere. Quote e limiti della detection sono in Bilanciamento del carico.","nodeCapabilities":"Capability dei nodi"},"clusterSettingsTab":{"notAvailableTheAddonThat":"Non disponibile — l'addon che gestisce queste impostazioni non ha risposto."},"nodeCamerasTab":{"theRolesEachCameraRuns":"I ruoli che ogni telecamera esegue qui in questo momento. Sposta un ruolo o rimuovi il vincolo dal menu della riga; i vincoli di tutte le telecamere sono in Cluster → Assegnazioni.","camerasOn":"Telecamere su {{node}}"},"nodeEnginesTab":{"killEngine":"Termina engine","inferenceEnginesOnThisNode":"Engine di inferenza su questo nodo","kind":"Tipo","runtimeBackendDevice":"Runtime / Backend / Dispositivo","models":"Modelli","poolPid":"PID del pool","autoKill":"Auto-terminazione","inUse":"In uso","kill":"Termina","noEnginesResidentTheFactory":"Nessun engine residente — la factory ne avvia uno alla prima esecuzione della pipeline.","summary":"{{engines}} motore/i residente/i in RAM. {{cameras}} telecamera/e collegata/e, {{active}} che inviano attivamente fotogrammi. Si aggiorna ogni 5s.","legend":"<strong>runtime</strong>: motore principale che serve le telecamere; mai terminato automaticamente finché ci sono telecamere collegate. <strong>warm</strong>: override di benchmark/test tenuto in cache per un riuso rapido; rimosso automaticamente dopo il TTL di inattività. <strong>pool</strong>: un pool di inferenza bilanciato per dispositivo (uno per acceleratore abilitato, in esecuzione in parallelo); gestito dal reaper con un proprio TTL di inattività.","killFailed":"Arresto non riuscito: {{message}}","pool":"pool","runtime":"runtime","idleLeft":"{{idle}}s inattivo · {{left}}s rimasti"},"nodeLiveTab":{"liveStatus":"Stato live","runtimeMetricsForTheRunner":"Metriche di runtime dell'istanza runner su questo nodo. Si aggiorna ogni 2s.","inferenceLatency":"Latenza di inferenza","activeCameras":"Telecamere attive","throttled":"Limitate","queueDepth":"Profondità coda","camera":"Telecamera","phase":"Fase","actualFps":"FPS effettivi","queue":"Coda","inferenceMs":"Inferenza ms","noCamerasAttachedToThis":"Nessuna telecamera collegata a questo runner"},"nodeLogsTab":{"runnerLogs":"Log del runner","description":"attività del pipeline-runner su {{node}} — collegamento/scollegamento delle telecamere, fasi dei motori ed errori della pipeline. In streaming dal vivo; il chip del dispositivo su una riga indica a quale telecamera si riferisce."},"nodePipelineTab":{"resetToHardwareAwareDefaults":"Reimpostare {{nodeName}} ai valori predefiniti basati sull'hardware?","thisClearsEveryPerDevice":"Questo rimuove ogni modello predefinito per dispositivo su questo nodo (si torna al predefinito del formato) e ogni override di step per telecamera riferito a questo nodo. Le personalizzazioni per telecamera esistenti su questo nodo andranno perse.","resetFailed":"Reimpostazione fallita","clearThisNodeSPer":"Rimuove i modelli predefiniti per dispositivo di questo nodo + gli override per telecamera riferiti a questo nodo","resetting":"Reimpostazione…","resetToDefault":"Ripristina predefiniti"},"storageLocationsPanel":{"disable":"Disabilitare \\"{{displayName}}\\"?","nothingIsDeletedSetThe":"{{consequence}} Nulla viene eliminato — riporta la posizione su Sola lettura o Attiva per riavere le sue registrazioni.","deleteLocation":"Eliminare la posizione \\"{{displayName}}\\"?","removesTheRecordFilesOn":"Rimuove il record; i file su disco non vengono toccati.","deleteAnyway":"Eliminare comunque?","forceDelete":"Elimina forzatamente","noStorageLocationsDeclaredFor":"Nessuna posizione di archiviazione dichiarata per questo scopo.","forcingNote":"{{error}}\\n\\nForzare rimuove solo il record. Tutto ciò che è ancora su quella posizione diventa irraggiungibile."},"pipelineView":"Vista pipeline","nodes":"Nodi","cameras":"Telecamere","pipeline":"Pipeline","detectionPlacementLoadAndPer":"Posizionamento della detection, carico e runtime per telecamera nel cluster.","hide":"Nascondi","show":"Mostra","flowStrip":{"decode":"Decodifica","motion":"Movimento","detect":"Rilevamento","audioAnalyze":"Analisi audio","audioClassify":"Classificazione audio","analyze":"Analisi","notify":"Notifica","unbound":"non associato","stepAria":"{{label}}: {{state}}"},"clusterRowCells":{"brokersTitle":"{{device}} — stream broker e client"},"placementControls":{"notEnabled":"{{name}} (non abilitato)"},"camerasOverview":{"activelyInferring":"<b>{{count}}</b> in inferenza attiva","camerasTotal":"<b>{{count}}</b> telecamere"},"nodeInferenceDevices":{"rootModel":"modello radice <mono>{{model}}</mono>","accelerators":"{{count}} acceleratori","cap":"limite","use":"usa {{value}}"},"hideNodeList":"Nascondi elenco nodi","showNodeList":"Mostra elenco nodi","assignmentStatusCell":{"configuredFps":"/{{fps}} fps","drops":"scarti {{count}}"},"cameraPipelineCard":{"recMode":"reg. {{mode}}","healthHealthy":"Integra","healthIdle":"Inattiva","healthError":"Errore"},"configBlocks":{"fpsDefault":"predefinito","fpsNative":"nativo (nessuna limitazione)"},"palette":{"custom":"Personalizzata","presets":"Preimpostazioni","pending":"Lettura della tavolozza del cluster…","unknown":"La tavolozza salvata non si legge ({{reason}}). I riquadri usano la preimpostazione CamStack inclusa.","valid":"Ogni colore è distinto su entrambi i temi.","invalid":"Questa tavolozza è rifiutata: {{reason}}","save":"Salva la tavolozza personalizzata","preview":"Segni della timeline","subclasses":"Sottoclassi","sourceUnconfigured":"Preimpostazione CamStack (predefinita del cluster)"}}`),assignments:{assignmentStatusCell:{noMetricsInTheLast:`Nessuna metrica negli ultimi 10 s — la telecamera non ha sessioni in esecuzione`,noLiveData:`nessun dato live`},clusterRowCells:{inferenceDevicePinNoNode:`Vincolo dispositivo di inferenza (ancora nessun nodo)`,anAcceleratorIsPinnedOn:`Un acceleratore è vincolato sul nodo della telecamera; questa telecamera non ne ha ancora usato uno.`,anyAccelerator:`Qualsiasi acceleratore`,noSessionYet:`— nessuna sessione ancora`,anUnpinnedCameraIsPlaced:`Una telecamera non vincolata viene riposizionata a ogni avvio di sessione, quindi può cambiare da una sessione all'altra.`,idleLastSession:`{{how}} · inattiva, ultima sessione`,streamBrokersOf:`Stream broker di {{deviceName}}`,streamBrokersClients:`Stream broker e client`},placementControls:{nodePin:`Vincolo nodo`,autoLetsEachSessionPick:`Auto lascia che ogni sessione scelga il proprio nodo; un vincolo mantiene la telecamera su un solo nodo.`,accelerator:`acceleratore: …`,anyAccelerator:`Qualsiasi acceleratore`,inferenceDevicePin:`Vincolo dispositivo di inferenza`,pinDetectionToOneAccelerator:`Vincola la detection a un acceleratore del nodo, oppure lascia scegliere a ogni sessione.`}},cameras:{cameraPipelineCard:{pipelineStatus:`Stato della pipeline di {{name}}`,objectDetectionMode:`Modalità di object detection`,detectionOff:`detection disattivata`,recording:`Registrazione ({{mode}})`,recordingMode:`Modalità di registrazione`,noPipelineStatusYetThe:`Ancora nessuno stato della pipeline — l'orchestrator non ha composto uno snapshot per questa telecamera.`},camerasOverview:{loadingCameraPipelines:`Caricamento pipeline delle telecamere…`,noCamerasFound:`Nessuna telecamera trovata`,withIssues:`con problemi`,polledEvery5SDetection:`interrogate ogni 5 s · metriche di detection live a 1 Hz`},cardPrimitives:{deviceLevelOverrideActive:`Override a livello di dispositivo attivo`},configBlocks:{manuallyPinned:`Vincolato manualmente`,persistedSettingsPinForThis:`Vincolo salvato nelle impostazioni per questo ruolo`,whereItRuns:`Dove viene eseguito`,detection:`Detection`,decoder:`Decoder`,audio:`Audio`,source:`Sorgente`,detectionPlacementPin:`Vincolo di posizionamento della detection`,autoLoadBalanced:`Auto (bilanciato)`,streamsMotion:`Stream e movimento`,detectStream:`Stream di detection`,detectFps:`FPS detection`,motionSrc:`Sorgente mov.`,cameraSensors:`Sensori della telecamera`,motionStream:`Stream del movimento`,motionFps:`FPS movimento`,cooldown:`Cooldown`,noStreamsRegistered:`Nessuno stream registrato`,pipelineSteps:`Step della pipeline`,resolving:`Risoluzione…`,noStepsConfigured:`Nessuno step configurato`,audioClass:`Classe audio.`,autoReason:`auto · {{reason}}`,capacity:`capacità`,pinDetection:`Fissa il rilevamento → {{node}}`,none:`nessuno`,inactive:`inattivo`,liveFps:`in tempo reale {{fps}}`,running:`in esecuzione`,off:`spento`,unassigned:`non assegnato`,manual:`manuale`,defaultValue:`predefinito`},runtimeBlocks:{detectionRuntime:`Runtime di detection`,mode:`Modalità`,detectionStageInactiveOrUnreachable:`Fase di detection inattiva o non raggiungibile`,inference:`Inferenza`,engine:`Engine`,provisioning:`Provisioning`,streamBroker:`Stream broker`,brokerStageInactiveOrUnreachable:`Fase broker inattiva o non raggiungibile`,noBrokerProfiles:`Nessun profilo broker`,subscribers:`Sottoscrittori`,decoder:`Decoder`,decoderStageInactiveOrUnreachable:`Fase decoder inattiva o non raggiungibile`,node:`Nodo`,queue:`· coda {{depth}}`,drops:`· scarti {{count}}`,webrtc:`WebRTC {{count}}`,restreamOn:`restream attivo`,restreamOff:`restream spento`,configuredFps:`/ {{fps}} configurati`,fpsValue:`{{value}} fps`},streamsTab:{streamProfiles:`Profili stream`,autoAssign:`Assegna automaticamente`,noStreamsAvailable:`Nessuno stream disponibile`,notAssigned:`— Non assegnato —`,availableStreams:`Stream disponibili`,reProbe:`Rileva di nuovo`,rtspRestream:`Restream RTSP`,host:`Host:`,rtspRestreamProviderNotAvailable:`Provider di restream RTSP non disponibile — la capability potrebbe non essere ancora caricata`,restreamEnabledClickToDisable:`Restream abilitato — clicca per disabilitare`,restreamDisabledClickToEnable:`Restream disabilitato — clicca per abilitare`,regenerateRtspToken:`Rigenera token RTSP`,regenerateRtspTokenForThe:`Rigenerare il token RTSP per {{profileLabel}}? L'URL attuale smetterà di funzionare e ne verrà generato uno nuovo.`,regenerate:`Rigenera`,regenerateRtspTokenCurrentUrl:`Rigenera token RTSP (l'URL attuale cambierà)`,muted:`Audio disattivato`,videoOnlyNoAudio:`Solo video — nessun audio`,restreamDisabledRtspClientsWill:`Restream disabilitato — i client RTSP riceveranno 403`,clickToCopy:`Clicca per copiare: {{url}}`,resolution:`Risoluzione`,codec:`Codec`,frameRate:`Frame rate`,noMetadataAvailableClickRe:`Nessun metadato disponibile — clicca Rileva di nuovo per rilevare le proprietà dello stream`,sourceUrl:`URL sorgente`}},placementBoard:{nodeCapabilitiesTable:{node:`Nodo`,on:`{{label}} su {{name}}`,noClusterNodesReportingYet:`Nessun nodo del cluster ha ancora riferito.`},nodeInferenceDevices:{probingAccelerators:`Rilevamento acceleratori…`,noInferenceDevicesReportedBy:`Nessun dispositivo di inferenza riportato dal rilevamento della piattaforma di questo nodo.`,maxConcurrentSessionsFor:`Sessioni simultanee massime per {{label}}`,enable:`Abilita {{label}}`,acceleratorShare:`Quota acceleratore`,dragToShiftTheShare:`Trascina per spostare la quota di sessioni di detection gestita da ogni acceleratore; bloccane uno per fissarne la quota mentre gli altri si riequilibrano. Le quote sommano sempre a 100%.`,failedToSaveInferenceDevices:`Impossibile salvare i dispositivi di inferenza:`,advisoryCapFromTheMeasured:`Limite indicativo calcolato dal throughput misurato al modello suggerito, lasciando libero il margine. Applicandolo si scrive il limite di questo dispositivo.`,nodeUnreachable:`Nodo non raggiungibile`,thePlatformProbeCouldnT:`Il rilevamento della piattaforma non è raggiungibile, quindi l'insieme di acceleratori live non è disponibile. Le impostazioni riprendono quando il nodo si riconnette.`,colDevice:`Dispositivo`,colState:`Stato`,colShare:`Quota`,colSessions:`Sessioni`,colCap:`Sessioni max`,colEnabled:`Attivo`,capNotSortable:`Un campo modificabile: ordina per Sessioni.`,enabledNotSortable:`Un interruttore: ordina per Stato.`,atCap:`al limite`,forget:`Dimentica`,forgetTitle:`Dimenticare {{label}} su {{node}}?`,forgetDescription:`Le sue impostazioni salvate (interruttore, peso, limite, modelli degli step) vengono eliminate. Se il dispositivo torna, riparte dai valori predefiniti.`,rescan:`Rileva di nuovo`,rescanTitle:`Rileva ora gli acceleratori di questo nodo (una Coral collegata o scollegata). Il nodo li rileva comunque ogni minuto.`,rescanNoChange:`Rilevamento ripetuto: nessuna modifica.`,rescanChanged:`Rilevamento ripetuto: comparsi {{appeared}} · scomparsi {{disappeared}}`,sourceBenchmark:`benchmark`,sourceHardware:`hardware`,sourceManual:`manuale`,shareConfigured:`impostata {{pct}}%`,state:{active:`in uso`,disabled:`spento`,absent:`assente`,unknown:`sconosciuto`,unavailable:`non disponibile`,backoff:`pool fermo`,rootIncapable:`nessun modello root`,standby:`riserva`},stateHint:{active:`Candidato root della camera: il posizionamento può avviarvi sessioni.`,disabled:`Spento: non riceve sessioni.`,absent:`Il nodo non segnala più questo dispositivo (scollegato o spostato su un altro nodo). Le impostazioni restano; non viene mai usato. Dimenticalo per eliminarle.`,unknown:`Il rilevamento del nodo non ha risposto: non si sa se il dispositivo ci sia.`,unavailable:`Presente sul nodo, ma il rilevamento lo segnala inutilizzabile.`,backoff:`Segnalato dal nodo, ma il suo pool di inferenza è fermo o in attesa.`,rootIncapable:`Il suo formato non può eseguire il rilevatore root della camera; serve solo gli step di arricchimento.`,standby:`La CPU di riserva: non riceve sessioni finché un acceleratore serve questo nodo.`}},reachableHostInput:{reachableHostFor:`Host raggiungibile per {{nodeId}}`,saveReachableHostFor:`Salva host raggiungibile per {{nodeId}}`,saveReachableHost:`Salva host raggiungibile`,saved:`Salvato`,failedToSaveReachableHost:`Impossibile salvare l'host raggiungibile`},roleControls:{default:`{{name}} (predefinito)`,node:`nodo {{value1}}`},weightSliderStack:{noDetectEnabledNodesEnable:`Nessun nodo con detect abilitato. Abilita “Detect” su un nodo qui sopra per distribuire il peso della detection.`,for:`{{weightLabel}} per {{name}}`,unlockAllowRebalancing:`Sblocca — consenti il riequilibrio`,lockThisShareWhenOthers:`Blocca questa quota quando gli altri cambiano`,draggingOneSliderSplitsThe:`Trascinando uno slider, il resto viene diviso in parti uguali tra i nodi sbloccati; blocca un nodo per fissarne la quota — i nodi bloccati non si spostano mai e il totale resta sempre al 100%, quindi il trascinamento è limitato dallo spazio che lasciano i nodi sbloccati. La detection si distribuisce solo tra i nodi che possono fornire i frame di una telecamera.`},boardModel:{detectLabel:`Rilevamento`,detectHint:`Esegue la pipeline di rilevamento (decodifica + inferenza) per le camere assegnate`,audioLabel:`Audio`,audioHint:`Esegue le sessioni di analisi audio per le camere assegnate a questo nodo`,roleIngest:`Acquisizione`,roleRecording:`Registrazione`,roleAudio:`Audio`,rolePostProcessing:`Post-elaborazione`,roleMotion:`Movimento`,hintIngest:`Si connette a ogni camera e ne distribuisce il flusso agli altri`,hintRecording:`Scrive le registrazioni`,hintAudio:`Esegue l’analisi audio per ogni camera`,hintPostProcessing:`Costruisce gli eventi e i relativi media da rilevamenti, audio e movimento`,hintMotion:`Esegue il rilevamento del movimento software; le camere con movimento integrato non sono interessate`,saveFailed:`Salvataggio non riuscito`}},stepInspector:{clusterOwnedSettings:{clusterWideSettings:`Impostazioni di tutto il cluster`,editInClusterSettings:`Modifica in Cluster → Impostazioni ›`,oneValueForEveryNode:`Un unico valore per ogni nodo e telecamera — questo step scrive in un indice condiviso.`},effectiveModelSummary:{toChangeAModelOpen:`Per cambiare un modello, apri la cella di quell'acceleratore nella tabella.`,changeOnAccelerator:`Cambia sull'acceleratore ›`},nodeStepInspector:{loadingPipeline:`Caricamento pipeline…`,catalogUnavailable:`Catalogo non disponibile.`,accelerators:`Acceleratori:`,noneEnabled:`nessuno abilitato`,off:`— disattivato:`,clusterLoadBalancing:`Cluster → Bilanciamento del carico ›`,detectionSteps:`Step di detection`,noStepSelected:`Nessuno step selezionato.`,itRunsOnInstead:`Viene eseguito invece su {{shortLabel}}.`,itDoesNotRunHere:`Non viene eseguito qui.`,runOn:`Esegui su`,autoThisAcceleratorOrThe:`Auto (questo acceleratore, o il successivo in grado di eseguirlo)`,routesThisStepAndIts:`Instrada questo step (e i suoi step figli) su un altro acceleratore di questo nodo.`,baseForEveryCameraThat:`{{slot}} · {{format}} · base per ogni telecamera che arriva qui`,everyAcceleratorOf:`{{slot}} · ogni acceleratore di {{nodeName}}`,model:`Modello`,enableOneInClusterLoad:`abilitane uno in Cluster → Bilanciamento del carico`,settings:`Impostazioni`,noBuild:`Nessuna build {{format}} di questo passaggio.`,noAcceleratorEnabled:`Nessun acceleratore è abilitato su questo nodo — <link>abilitane uno in Cluster → Bilanciamento del carico</link>.`,nodeWideSettings:`A livello di nodo: queste impostazioni valgono per ogni acceleratore di {{node}}.`,acceleratorSettings:`Questo acceleratore ({{accelerator}}): le soglie di confidenza appartengono al modello che gira qui.`,thresholdsPerAccelerator:`Le soglie di confidenza appartengono al modello, quindi si impostano per acceleratore: apri la cella di quell'acceleratore.`,nodeLayer:`Nodo`,acceleratorLayer:`Questo acceleratore`},stepMatrixFrame:{discardUnsavedChanges:`Scartare le modifiche non salvate?`,thisStepHasChangesThat:`Questo step ha modifiche non ancora salvate.`,discard:`Scarta`,filterStepsOrSettings:`Filtra step o impostazioni /`,filterStepsOrSettings2:`Filtra step o impostazioni`,stepSettings:`Impostazioni dello step`,showDisabled:`Mostra acceleratori disabilitati ({{count}})`,staleStep:`Il link indica un passaggio che questa pipeline non ha ({{id}}).`,noStepMatches:`Nessun passaggio corrisponde a “{{query}}”.`}},detectionIntelligence:JSON.parse(`{"assignDialog":{"assignFacesToPerson":"Assegna {{value1}} volti a una persona","assignFaceToPerson":"Assegna il volto a una persona","selectAnExistingPersonOr":"Scegli una persona esistente o creane una nuova.","newPersonName":"Nome della nuova persona…","newPerson":"+ Nuova persona…","createAssign":"Crea e assegna","samples":"{{count}} campioni"},"assignPlateDialog":{"assignPlatesToVehicle":"Assegna {{value1}} targhe a un veicolo","assignPlateToVehicle":"Assegna la targa a un veicolo","selectAnExistingVehicleOr":"Scegli un veicolo esistente o creane uno nuovo.","newVehicleName":"Nome del nuovo veicolo…","newVehicle":"+ Nuovo veicolo…","createAssign":"Crea e assegna","plates":"{{count}} targhe"},"cameraMultiSelect":{"clearSelection":"Cancella selezione"},"copyUrlChips":{"copyTheMediaUrl":"Copia l'URL del media","clipboardAccessWasRefusedSelect":"Accesso agli appunti negato. Seleziona l'URL qui sotto e copialo a mano.","url":"URL {{label}}","copyUrl":"Copia URL {{label}}","copied":"Copiato","local":"Locale","copyLanUrl":"Copia URL LAN — {{AUTH_HINT}}","public":"Pubblico","copyPublicUrl":"Copia URL pubblico — {{AUTH_HINT}}"},"dateRangeFilter":{"fromDate":"Data di inizio","toDate":"Data di fine"},"eventCard":{"eventFrom":"Evento da {{cameraName}}","keyEventMediaUnavailable":"Media dell'evento chiave non disponibile","noKeyEventMedia":"Nessun media dell'evento chiave","deselect":"Deseleziona","select":"Seleziona","clipSemanticMatchScore":"Punteggio di corrispondenza semantica CLIP","markedForTraining":"Segnato per l'addestramento","trainingComplete":"Addestramento completato","flaggedForDebug":"Segnalato per debug","favourited":"Preferito"},"eventDetailPanel":{"snapshotCheckpointClickToView":"Punto di controllo dello snapshot — clicca per vedere questo frame","clipUnavailable":"Clip non disponibile","couldNotResolveClipPlayback":"Impossibile risolvere la riproduzione della clip. Controlla i log del server.","deleteTrack":"Elimina track","deleteThisTrackAndEvery":"Eliminare questo track e ogni immagine e clip acquisita per esso? L'operazione non può essere annullata.","deleteFailed":"Eliminazione fallita","failedToDeleteThisTrack":"Impossibile eliminare questo track. Controlla i log del server.","eventDetail":"Dettaglio evento","keyFrameFrom":"Key frame da {{cameraName}}","keyFrameMediaUnavailable":"Media del key frame non disponibile","viewClip":"Guarda clip","bestShot":"Miglior scatto","camera":"Telecamera","class":"Classe","label":"Etichetta","subLabel":"Sotto-etichetta","importance":"Importanza","zonesVisited":"Zone visitate","audioHeard":"Audio rilevato","totalDistance":"Distanza totale","firstSeen":"Visto per la prima volta","lastSeen":"Visto per l'ultima volta","detectedOn":"Rilevata su","openedOn":"Aperta su","closedOn":"Chiusa su","track":"Track"},"eventKindFilter":{"kinds":"Tipi ({{value1}})","kinds2":"Tipi","searchKinds":"Cerca tipi…","clear":"Cancella","loadingKinds":"Caricamento tipi…","noKindMatchesThatSearch":"Nessun tipo corrisponde alla ricerca.","theseCamerasAdvertiseNoEvent":"Queste telecamere non dichiarano alcun tipo di evento.","expand":"Espandi"},"eventsSection":{"someTracksWereNotDeleted":"Alcuni track non sono stati eliminati","failedToDeleteTracksOn":"Impossibile eliminare i track su: {{names}}. Restano selezionati — riprova, oppure controlla i log del server.","minScore":"Punteggio minimo","minimumImportance":"Importanza minima","ofEvents":"{{value1}} di {{value2}} eventi","newEventsRefresh":"Nuovi eventi — aggiorna","nothingMatchesTheFilter":"Nessun risultato per il filtro","noKeyEventsInThis":"Nessun evento chiave in questo intervallo","widenTheDateRangeClear":"Amplia l'intervallo di date, deseleziona telecamere o tipi, oppure abbassa il punteggio minimo.","capturedTracksAppearHereWhen":"I track acquisiti compaiono qui quando la pipeline assegna un punteggio a un evento chiave.","sortImportance":"Importanza","sortRecent":"Recenti","deleteTitle_one":"Elimina {{count}} traccia","deleteTitle_other":"Elimina {{count}} tracce","deleteMessage_one":"Eliminare {{count}} traccia e ogni immagine e clip acquisita per essa? L'operazione non può essere annullata.","deleteMessage_other":"Eliminare {{count}} tracce e ogni immagine e clip acquisita per esse? L'operazione non può essere annullata.","eventCount_one":"{{count}} evento","eventCount_other":"{{count}} eventi"},"faceDetailPanel":{"face":"Volto","faceDetail":"Dettaglio volto","fullFrameWithDetectedFace":"Frame intero con il volto rilevato","detectedFace":"Volto rilevato","noImage":"Nessuna immagine","theCropMediaForThis":"Impossibile risolvere il media del ritaglio di questo volto (un orfano precedente alla correzione). Si può eliminare senza rischi.","camera":"Telecamera","captured":"Acquisito","track":"Track","identity":"Identità"},"peopleList":{"loadingSamples":"Caricamento campioni…","noSamplesYet":"Ancora nessun campione.","sample":"Campione","enrolledFromAnUploadedPhoto":"Registrato da una foto caricata","removeSample":"Rimuovi campione","person":"Persona","samples":"Campioni","edit":"Modifica {{name}}","delete":"Elimina {{name}}","name":"Nome","personName":"Nome della persona…","trainingSamples":"Campioni di addestramento","removeASampleToDrop":"Rimuovi un campione per escluderlo dall'addestramento del riconoscimento per questa persona.","deletePerson":"Elimina persona","deleteAndAllTheirSamples":"Eliminare {{name}} e tutti i suoi campioni? L'operazione non può essere annullata.","loadingPeople":"Caricamento persone…","addPerson":"Aggiungi persona","enrolFromAPhoto":"Registra da una foto","nothingMatchesTheFilter":"Nessun risultato per il filtro","noPeopleEnrolledYet":"Nessuna persona ancora registrata","clearTheSearchOrTry":"Cancella la ricerca o prova con un altro nome.","addAPersonOrEnrol":"Aggiungi una persona, oppure registra i volti da una foto.","noPeopleEnrolledYet2":"Nessuna persona ancora registrata."},"photoEnrollDialog":{"ignoreThisFace":"Ignora questo volto","newPerson":"+ Nuova persona…","face":"Volto {{value1}}","assignFace":"Assegna il volto {{value1}}","notUsable":"Non utilizzabile","thisPhotoCouldNotBe":"Impossibile analizzare questa foto:","unknownError":"errore sconosciuto","noFacesWereFoundIn":"Nessun volto trovato in questa foto. Un volto deve essere abbastanza grande e rivolto verso la fotocamera perché il detector possa misurarlo.","newPersonNameTypeThe":"Nome della nuova persona… (scrivi lo stesso nome sotto un altro volto per riutilizzarlo)","enrolFromPhotos":"Registra da foto","everyPhotoIsAnalysedWith":"Ogni foto viene analizzata con lo stesso detector di volti usato dalle telecamere, e tutti i volti trovati vengono rivisti qui sotto in un unico passaggio, raggruppati per foto. Assegna ogni volto a una persona, oppure lascialo ignorato.","atLeast3PhotosPer":"almeno 3 foto per persona","choosePhotos":"Scegli foto","analysing":"analisi in corso…","facesAnalysedOn_one":"{{count}} volto · analizzato su {{node}}","facesAnalysedOn_other":"{{count}} volti · analizzati su {{node}}","faceN":"Volto {{n}}","reliableRecognition":"Per un riconoscimento affidabile usa <strong>almeno 3 foto per persona</strong>, scattate in momenti diversi, con pose e illuminazione diverse — puoi selezionarle tutte insieme. Più fotogrammi dello stesso momento contano come uno — non aggiungono informazioni.","enrolFaces_one":"Registra {{count}} volto","enrolFaces_other":"Registra {{count}} volti","photosAnalysed_one":"{{done}}/{{count}} foto analizzata","photosAnalysed_other":"{{done}}/{{count}} foto analizzate"},"plateDetailPanel":{"plate":"Targa","plateDetail":"Dettaglio targa","fullFrameWithDetectedPlate":"Frame intero con la targa rilevata","detectedPlate":"Targa rilevata","noImage":"Nessuna immagine","theCropMediaForThis":"Impossibile risolvere il media del ritaglio di questa targa. Si può eliminare senza rischi.","plateText":"Testo della targa","saveCorrectedText":"Salva testo corretto","correctTheOcrReading":"Correggi la lettura OCR","camera":"Telecamera","captured":"Acquisita","confidence":"Confidenza","vehicle":"Veicolo","track":"Track"},"recentPlates":{"plateFrom":"Targa {{text}} da {{cameraName}}","noCropImageThePlate":"Nessuna immagine del ritaglio — manca il media del ritaglio della targa. Si può eliminare senza rischi.","noCrop":"Nessun ritaglio","deselect":"Deseleziona","select":"Seleziona","manuallyCorrected":"Corretta manualmente","detachPlate":"Scollega targa","detach":"Scollega","assignPlateToVehicle":"Assegna la targa a un veicolo","assignToVehicle":"Assegna a un veicolo","deletePlate":"Elimina targa","ofPlates":"{{value1}} di {{value2}} targhe","nothingMatchesTheFilter":"Nessun risultato per il filtro","noPlatesRecognizedYet":"Nessuna targa ancora riconosciuta","widenTheDateRangeOr":"Amplia l'intervallo di date o cancella il filtro telecamera.","plateReadsAppearHereWhen":"Le letture delle targhe compaiono qui quando la pipeline di detection esegue l'OCR su un veicolo.","fixed":"Corretta","filterAssigned":"Assegnate","filterUnassigned":"Non assegnate","plateCount_one":"{{count}} targa","plateCount_other":"{{count}} targhe"},"retrainTabCallout":{"trainingFromThisFeed":"Addestramento da questo feed","markATrackWithThe":"Segna un track con il controllo a cappello da laurea sulla sua scheda. In Addestramento correggi i frame, costruisci collezioni e avvia fine-tuning nel cloud.","openTraining":"Apri Addestramento"},"semanticEventSearch":{"semanticSearchDescribeWhatYou":"Ricerca semantica — descrivi cosa stai cercando…","semanticEventSearch":"Ricerca semantica degli eventi","clearSearch":"Cancella ricerca","camera":"Telecamera","filterByCamera":"Filtra per telecamera","all":"Tutte","match":"Corrispondenza","searchFailed":"Ricerca fallita:","unknownError":"errore sconosciuto","noSemanticMatchesForTry":"Nessuna corrispondenza semantica per “{{debounced}}”. Prova una soglia di corrispondenza più bassa o una formulazione diversa.","looseLabel":"Largo","looseTitle":"La soglia minima del modello di ricerca","balancedLabel":"Bilanciato","balancedTitle":"1,25× la soglia minima del modello di ricerca","strictLabel":"Rigoroso","strictTitle":"1,5× la soglia minima del modello di ricerca"},"similarGroupsModal":{"faceFrom":"Volto da {{cameraName}}","noCrop":"Nessun ritaglio","includeFace":"Includi volto","excludeFace":"Escludi volto","include":"Includi","exclude":"Escludi","deleteFace":"Elimina volto","permanentlyDeletesThisFaceCrop":"Elimina definitivamente il ritaglio di questo volto. L'operazione non può essere annullata.","lookAlikeGroups":"Gruppi di volti simili","threshold":"Soglia","minSize":"Dimensione minima","reAnalyze":"Rianalizza","noLookAlikeGroupsAt":"Nessun gruppo di volti simili a questa soglia.","selectInGallery":"Seleziona nella galleria","clusterMeta":"{{count}} volti · {{percent}}% simili","title":"Gruppi di volti simili","finding":"Ricerca di volti simili…","hiddenCount":"{{count}} non caricati — esclusi dalle azioni","adopt":"Adotta ({{count}})"},"stationarySection":{"parkedOn":"{{className}} parcheggiato su {{cameraName}}","stationary":"Fermi","parkedObjectsKeptOutOf":"Oggetti parcheggiati — tenuti fuori dal feed degli eventi","unreadable_one":"{{count}} telecamera non è stato possibile leggerla","unreadable_other":"{{count}} telecamere non è stato possibile leggerle"},"trackFlagToggles":{"couldNotUpdateThisTrack":"Impossibile aggiornare questo track","couldNotUpdateThisTrack2":"Impossibile aggiornare questo track. Controlla i log del server.","markForTraining":"Segna per l'addestramento","keepsThisTrackAndIts":"Conserva questo track e i suoi media oltre la retention","debug":"Debug","flagThisTrackForDiagnostic":"Segnala questo track per un'attenzione diagnostica","favourited":"Preferito"},"unassignedFaces":{"faceFrom":"Volto da {{cameraName}}","noCropImageTheFace":"Nessuna immagine del ritaglio — manca il media del ritaglio del volto (un orfano precedente alla correzione). Si può eliminare senza rischi.","noCrop":"Nessun ritaglio","deselect":"Deseleziona","select":"Seleziona","detachFace":"Scollega volto","detach":"Scollega","assignFaceToPerson":"Assegna il volto a una persona","assignToPerson":"Assegna a una persona","deleteFace":"Elimina volto","selectEveryVisibleFaceWhose":"Seleziona ogni volto visibile la cui immagine del ritaglio manca, per eliminare gli orfani in un solo passaggio","ofFaces":"{{value1}} di {{value2}} volti","nothingMatchesTheFilter":"Nessun risultato per il filtro","noFacesFoundForThis":"Nessun volto trovato per questo filtro","widenTheDateRangeOr":"Amplia l'intervallo di date o cancella il filtro telecamera.","faceCropsAppearHereWhen":"I ritagli dei volti compaiono qui quando la pipeline di detection li acquisisce.","filterUnassigned":"Non assegnati","filterRecognized":"Riconosciuti","similarGroups":"Gruppi simili","selectCropless":"Seleziona {{count}} senza ritaglio","faceCount_one":"{{count}} volto","faceCount_other":"{{count}} volti"},"vehiclesList":{"loadingPlates":"Caricamento targhe…","noPlatesYet":"Ancora nessuna targa.","removePlateSample":"Rimuovi campione di targa","vehicle":"Veicolo","plates":"Targhe","edit":"Modifica {{name}}","delete":"Elimina {{name}}","name":"Nome","vehicleName":"Nome del veicolo…","plateSamples":"Campioni di targa","removeAPlateCropTo":"Rimuovi il ritaglio di una targa per escluderlo dal riconoscimento di questo veicolo. Assegna nuove targhe da Ultime targhe riconosciute.","deleteVehicle":"Elimina veicolo","deleteAndAllItsPlate":"Eliminare {{name}} e tutti i suoi campioni di targa? L'operazione non può essere annullata.","loadingVehicles":"Caricamento veicoli…","addVehicle":"Aggiungi veicolo","nothingMatchesTheFilter":"Nessun risultato per il filtro","noVehiclesEnrolledYet":"Nessun veicolo ancora registrato","clearTheSearchOrTry":"Cancella la ricerca o prova con un altro nome.","addAVehicleThenAssign":"Aggiungi un veicolo, poi assegna i ritagli delle targhe da Ultime targhe riconosciute.","noVehiclesEnrolledYet2":"Nessun veicolo ancora registrato."},"people":"Persone","enrolledIdentitiesUsedForFace":"Identità registrate usate per il riconoscimento facciale. Apri una persona per rinominarla o rimuovere i campioni di addestramento.","recentDetectedFaces":"Volti rilevati di recente","faceCropsCapturedByThe":"Ritagli di volti acquisiti dalla pipeline di detection. Assegnali a una persona per costruire i dati di addestramento del riconoscimento.","detailPanel":{"fullFrame":"Fotogramma intero","crop":"Ritaglio","detach":"Scollega"},"assignCount":"Assegna {{count}}","cameraFallback":"Telecamera #{{id}}"}`),recordings:JSON.parse(`{"activitySection":{"when":"Quando","domain":"Dominio","operation":"Operazione","reason":"Motivo","camera":"Telecamera","items":"Elementi","reclaimed":"Recuperato","loadingActivity":"Caricamento attività…","activityCouldNotBeRead":"Impossibile leggere l'attività","theOpsLogDidNot":"Il log delle operazioni di {{value1}} non ha risposto. Questo non significa \\"non è successo nulla\\" — riprova, oppure controlla il nodo che ne è responsabile.","noActivityYet":"Ancora nessuna attività","pruneDeleteAndRescanOperations":"Le operazioni di pulizia, eliminazione e nuova scansione su registrazioni ed eventi compaiono qui.","thatDomain":"quel dominio","thoseDomains":"quei domini","domainRecordings":"Registrazioni","domainsMissing_one":"{{names}} non ha risposto — le righe di quel dominio mancano qui sotto.","domainsMissing_other":"{{names}} non hanno risposto — le righe di quei domini mancano qui sotto."},"cameraRecordingSettingsSection":{"noCameras":"Nessuna telecamera","addACameraFirst":"Aggiungi prima una telecamera.","perCameraRecordingRetention":"Registrazione e retention per telecamera","recordingModeScheduleBandsAnd":"Modalità di registrazione, fasce orarie e policy di retention per una telecamera — gli stessi controlli della scheda Registrazione della telecamera. La retention è un'unica policy su filmati e analisi; l'eliminazione degli eventi per telecamera è nella scheda Eventi.","camera":"Telecamera"},"cleanupSection":{"couldNotCheckWhetherStorage":"Impossibile verificare se la pulizia dello storage è installata su questo hub.","runStorageCleanup":"Eseguire la pulizia dello storage?","reclaimsLeftoverAnalyticsRowsAnd":"Recupera righe e file di analisi residui, still/filmstrip di debug e righe di filmati fantasma sulle posizioni congelate. Si può rieseguire senza rischi.","reclaimsLeftoverAnalyticsRowsAnd2":"Recupera righe e file di analisi residui e righe di filmati fantasma sulle posizioni congelate. Gli still di debug non vengono toccati. Si può rieseguire senza rischi.","runCleanup":"Esegui pulizia","cancelCleanup":"Annullare la pulizia?","stopsAfterTheCurrentStep":"Si ferma dopo lo step in corso. Il lavoro già fatto resta fatto.","cancelCleanup2":"Annulla pulizia","cleanup":"Pulizia","onePassOverLeftoverAnalytics":"Un passaggio su analisi residue (database + file) e righe di filmati fantasma sulle posizioni congelate. Non va in timeout — l'avanzamento si aggiorna qui fino al termine.","alsoRemoveDebugMediaMotion":"Rimuovi anche i media di debug (still di movimento e filmstrip dei track)","phase":"Fase:"},"diskReconcileSection":{"reconcileStorageFromDisk":"Riconciliare lo storage con il disco?","makesTheDatabaseMatchThe":"Allinea il database al filesystem: indice delle registrazioni, track, eventi e media i cui file non esistono più. I track preferiti senza file vengono eliminati. Gli eventi di movimento/audio senza snapshot vengono eliminati. Le identità registrate restano. L'operazione non può essere annullata.","reconcile":"Riconcilia","diskReconcile":"Riconciliazione con il disco","deletesDatabaseRowsWhoseFiles":"Elimina le righe del database i cui file non esistono più. Le identità registrate restano.","lastRun":"Ultima esecuzione:","failed":", {{value1}} falliti ({{value2}})","reconcileFailed":"Riconciliazione fallita:","summary":"{{completed}} telecamera/e — eliminati {{tracks}} tracce, {{events}} eventi, {{media}} media"},"eventsManagementSection":{"permanentlyDeletesEveryEventMotion":"Elimina definitivamente ogni evento (movimento / oggetto / audio) più vecchio del limite su tutte le telecamere, insieme ai loro media. L'operazione non può essere annullata.","pruneEvents":"Elimina eventi","deleteAllEventsFor":"Eliminare tutti gli eventi di {{label}}?","deleteEvents":"Elimina eventi","camera":"Telecamera","events":"Eventi","media":"Media","deleteAllEventsForThis":"Elimina tutti gli eventi di questa telecamera","loadingEventStoreFootprint":"Caricamento occupazione dell'archivio eventi…","noEventData":"Nessun dato sugli eventi","pipelineAnalyticsHasNotReported":"Pipeline analytics non ha ancora riportato l'occupazione dell'archivio eventi.","totalEvents":"Eventi totali","eventMediaOnDisk":"Media degli eventi su disco","pruneEventsOlderThan":"Elimina gli eventi più vecchi di","pruneNow":"Elimina ora","noStoredEvents":"Nessun evento archiviato","noCameraHasPersistedEvents":"Nessuna telecamera ha ancora eventi salvati.","ageDays_one":"{{count}} giorno","ageDays_other":"{{count}} giorni","pruneTitle_one":"Eliminare gli eventi più vecchi di {{count}} giorno?","pruneTitle_other":"Eliminare gli eventi più vecchi di {{count}} giorni?","deleteRowsMessage_one":"Elimina definitivamente {{count}} evento ({{size}} di media) di questa telecamera. L'operazione non può essere annullata.","deleteRowsMessage_other":"Elimina definitivamente {{count}} eventi ({{size}} di media) di questa telecamera. L'operazione non può essere annullata.","removedCamera":"Camera rimossa #{{id}}"},"eventsSection":{"eventStore":"Archivio eventi","whatTheDurableEventStore":"Quanto occupa l'archivio eventi persistente, per telecamera, con eliminazione per età e cancellazione di tutti gli eventi su tutta la flotta.","postProcessingNodeFolders":"Nodo di post-elaborazione e cartelle","theSingleNodeThatWrites":"L'unico nodo che scrive i ritagli degli eventi, e la posizione di archiviazione in cui finiscono."},"exportsSection":{"cancelThisExport":"Annullare questa esportazione?","stopsTheRenderThePartial":"Interrompe il rendering. Il file parziale viene scartato.","cancelExport":"Annulla esportazione","deleteThisExport":"Eliminare questa esportazione?","permanentlyRemovesTheRenderedFile":"Rimuove definitivamente il file renderizzato e la sua riga nello storico.","camera":"Telecamera","range":"Intervallo","variant":"Variante","state":"Stato","expires":"Scade","size":"Dimensione","downloadMp4":"Scarica MP4","download":"Scarica","cancelRender":"Annulla rendering","deleteExport":"Elimina esportazione","loadingExports":"Caricamento esportazioni…","newExport":"Nuova esportazione","noExportsYet":"Ancora nessuna esportazione","createOneHereNewExport":"Creane una qui (Nuova esportazione) o dalla timeline di una telecamera nel viewer. Le clip renderizzate compaiono qui per essere scaricate o gestite.","queued":"in coda","rendering":"elaborazione","ready":"pronto","failed":"fallito","expired":"scaduto","deleted":"eliminato"},"maintenanceAuditSection":{"reclaimOrphanedAnalyticsRows":"Recuperare le righe di analisi orfane?","deletesIndexRowsAndTheir":"Elimina le righe dell'indice (e i loro blob) il cui track, evento o gruppo di appartenenza non esiste più. I media della galleria registrata vengono saltati.","reclaimOrphans":"Recupera orfani","reclaimDebugMedia":"Recuperare i media di debug?","deletesMotionVisitStillsAnd":"Elimina gli still delle visite di movimento e le filmstrip dei track. Key frame e galleria registrata restano. Procede a 2 MB/s — puoi lasciare questa pagina.","reclaimDebugMedia2":"Recupera media di debug","forgetGhostRowsOn":"Dimenticare le righe fantasma su {{locationId}}?","dropsDurableHourRowsWhose":"Elimina le righe orarie persistenti i cui file non sono su disco. I file che il registro non nomina vengono segnalati, mai eliminati.","forgetGhosts":"Dimentica fantasmi","countLeftovers":"Conta residui","orphanAnalyticsRowsDebugStills":"Righe di analisi orfane, still/filmstrip di debug e ore fantasma su una cartella di registrazioni congelata. Solo conteggi — Recupera o Dimentica elimina dopo la tua conferma.","auditing":"Verifica in corso…","runAudit":"Esegui verifica","orphansAlreadyRunningRequestIgnored":"Orfani: già in esecuzione — richiesta ignorata.","debugMediaAlreadyRunningShowing":"Media di debug: già in esecuzione — mostro l'ultimo passaggio.","forgot":", dimenticati {{value1}}","orphanFilesLeftOnDisk":", {{value1}} file orfani lasciati su disco","noFrozenLocationSkipped":"Nessuna posizione congelata — saltato.","orphansSummary_one":"Orfani: {{count}} orfano","orphansSummary_other":"Orfani: {{count}} orfani","orphansReclaimed_one":"Orfani: {{count}} orfano, recuperati {{reclaimed}}","orphansReclaimed_other":"Orfani: {{count}} orfani, recuperati {{reclaimed}}","debugEligible":"Media di debug: {{count}} idonei","debugEligibleSize":"Media di debug: {{count}} idonei ({{size}})","walkRefused":"{{location}}: scansione rifiutata — {{reason}}.","ghosts_one":"{{location}}: {{count}} fantasma","ghosts_other":"{{location}}: {{count}} fantasmi"},"newExportModal":{"newExport":"Nuova esportazione","camera":"Telecamera","profile":"Profilo","from":"Da","to":"A","speed":"Velocità","titleOptional":"Titolo (facoltativo)","eGCourierAtThe":"es. corriere al cancello","fromMustBeBeforeTo":"\\"Da\\" deve precedere \\"A\\".","queuing":"Messa in coda…","createExport":"Crea esportazione","speedRealTime":"Tempo reale (1×)","includeAudio":"Includi audio","includeAudioRealtimeOnly":"Includi audio (solo in tempo reale)"},"recordingsManagementSection":{"moveStorage":"Sposta storage","copyRecordingsLowResRecordings":"Copia registrazioni, registrazioni a bassa risoluzione o media degli eventi in una nuova posizione, verifica, poi riassegna il predefinito. Vale per ogni telecamera."},"recordingsStorageSection":{"footageOnDisk":"Filmati su disco","whatRecordedFootageOccupiesPer":"Quanto occupano i filmati registrati, per telecamera e per volume, con pulizia secondo policy ed eliminazione di tutti i filmati.","recordingNodeFolders":"Nodo di registrazione e cartelle","theSingleNodeThatRecords":"L'unico nodo che registra e serve la riproduzione, e le posizioni di archiviazione su cui vengono scritti i filmati."},"storageSection":{"prune":"Pulire {{label}}?","appliesTheRetentionPolicyNow":"Applica subito la policy di retention (motivo: {{reason}}). I filmati oltre la policy vengono eliminati definitivamente.","pruneNow":"Pulisci ora","deleteAllFootageFor":"Eliminare tutti i filmati di {{label}}?","permanentlyDeletesOfRecordedFootage":"Elimina definitivamente {{value1}} di filmati registrati di questa telecamera. L'operazione non può essere annullata.","delete":"Elimina {{value1}}","camera":"Telecamera","disk":"Disco","theOnlyRecordingsVolumeOn":"L'unico volume di registrazioni su questo nodo — questa telecamera può stare solo qui.","theRecordingsDefaultThisNode":"Il PREDEFINITO delle registrazioni. Questo nodo ha più volumi di registrazioni e il posizionamento per telecamera non è riportato da recording.getStorageUsage, quindi questo è dove i filmati finiscono per impostazione predefinita, non un dato per telecamera.","default":"(predefinito)","used":"Usato","oldestFootage":"Filmato più vecchio","theOldestSegmentTheArchive":"Il segmento più vecchio che l'ARCHIVIO conserva per questa telecamera — la risposta per telecamera a 'la retention sta davvero tenendo?'.","applyRetentionPolicyNow":"Applica subito la policy di retention","prune2":"Pulisci","deleteAllFootage":"Elimina tutti i filmati","loadingStorageUsage":"Caricamento utilizzo dello storage…","noStorageData":"Nessun dato sullo storage","theRecordingNodeHasNot":"Il nodo di registrazione non ha ancora riportato alcun utilizzo dello storage.","totalUsed":"Totale usato","freeOnRecordingsVolumes":"Libero sui volumi delle registrazioni","disk2":"Disco: {{label}}","volumeFillEverythingOnThe":"Riempimento del volume — tutto ciò che c'è sul disco, non solo le registrazioni. Avviso all'85%, critico al 95%.","pruneReason":"Motivo della pulizia","perCameraUsageUnavailable":"Utilizzo per telecamera non disponibile","noRecordedFootage":"Nessun filmato registrato","thisRecordingNodeHasNo":"Questo nodo di registrazione non ha un registro dei filmati, quindi ha rifiutato di rispondere alla tabella per telecamera invece di riportare ciò che ha in memoria. I totali del disco qui sopra non sono toccati.","noCameraHasRecordedFootage":"Nessuna telecamera ha ancora registrato filmati su questo nodo.","pruneRetention":"Politica di conservazione","pruneQuota":"Quota / pressione sul disco","pruneOperator":"Operatore","defaultRoot":"radice predefinita"},"recordedFootageAndTheDurable":"Filmati registrati e archivio eventi durevole — cosa occupa ciascuno, dove viene scritto e le operazioni che spostano o riconciliano entrambi.","recordings":"Registrazioni","events":"Eventi","cameras":"Telecamere","export":"Esporta","activity":"Attività","management":"Gestione","storageMigrationSection":{"classRecordings":"Registrazioni","classRecordingsLow":"Registrazioni a bassa risoluzione","classEventMedia":"Media degli eventi","classFrom":"{{label}} da","classTo":"{{label}} verso","readOnly":"sola lettura","residueUnknown":"quantità sconosciuta: l’archivio non è stato leggibile","residueRows_one":"{{items}} riga","residueRows_other":"{{items}} righe","residueSegments_one":"{{items}} segmento · {{size}}","residueSegments_other":"{{items}} segmenti · {{size}}"}}`),migration:{storageMigrationSection:{checkingWhetherStorageMigrationIs:`Verifica che la migrazione dello storage sia installata…`,couldnTCheckWhetherStorage:`Impossibile verificare se la migrazione dello storage è installata`,theCapabilityRegistryDidNot:`Il registro delle capability non ha risposto, quindi questo pannello non ha nulla da riportare in nessun senso — non significa che la capability manchi. Ricarica per chiedere di nuovo.`,storageMigrationNotInstalled:`Migrazione dello storage non installata`,theCapabilityRegistryAnsweredNo:`Il registro delle capability ha risposto: nessun addon di questo cluster fornisce storage-migration. Quando ne verrà distribuito uno, questo pannello sposterà registrazioni, registrazioni a bassa risoluzione e media degli eventi su nuove posizioni di archiviazione in un'unica operazione coordinata e verificata.`,startStorageMigration:`Avviare la migrazione dello storage?`,copiesTheSelectedClassesFrom:`Copia le classi selezionate dalla sorgente scelta alla destinazione, verifica, poi rende la destinazione il predefinito (se lo era la sorgente) oppure disabilita la sorgente. Si può rieseguire senza rischi se interrotta.`,startMigration:`Avvia migrazione`,cancelMigration:`Annullare la migrazione?`,stopsTheInProgressMigration:`Interrompe la migrazione in corso. I dati già spostati e verificati restano nella destinazione; ciò che è già stato riassegnato non viene ripristinato.`,cancelMigration2:`Annulla migrazione`,storageMigration:`Migrazione dello storage`,moveRecordingsLowResRecordings:`Sposta registrazioni, registrazioni a bassa risoluzione e/o media degli eventi da una posizione a un'altra: copia tramite i mover del recorder / pipeline-analytics, verifica, poi riassegna il predefinito (se la sorgente lo era) oppure disabilita la sorgente (se non lo era). Salta una classe lasciando vuota la destinazione.`,skip:`— salta —`,plan:`Piano`,nothingToMoveSelectedDestinations:`Nulla da spostare — le destinazioni selezionate coincidono con i predefiniti attuali.`,migrationStatus:`Stato della migrazione`,phase:`Fase:`,paused:`In pausa:`,migrationHistory:`Storico migrazioni`,drainRemaining:`Svuotare il {{storageClass}} rimanente?`,drainRemaining2:`Svuota il rimanente`,leftOnTheOldLocation:`Rimasto sulla vecchia posizione`,measured:`Misurato {{value1}}`,measuredNever:`Misurato — mai`,counting:`Conteggio…`,aMigrationRepointsFirstAnd:`Una migrazione riassegna prima e svuota dopo. Se lo svuotamento è stato annullato, è fallito o è stato interrotto da un riavvio, i dati qui sotto sono ancora sulla sorgente — leggibili, ma non dove puntano ora i predefiniti. Lo svuotamento li sposta; non cambia alcun predefinito e non mette nulla in pausa.`,thisCountIsTakenOn:`Questo conteggio viene eseguito su richiesta: misurarlo scorre l'intera collezione di media, quindi non si aggiorna a intervalli. Premi Aggiorna al termine di uno svuotamento.`,moversRunningOutsideAMigration:`Mover in esecuzione fuori da una migrazione`}},deviceDoAction:{deviceDoActionFields:{target:`Destinazione`,specificDevice:`Dispositivo specifico`,theDeviceThatTriggeredThis:`Il dispositivo che ha attivato questa esecuzione`,sameFamilyOnlyTheAction:`Solo della stessa famiglia — l'azione viene eseguita su ogni dispositivo selezionato.`,action:`Azione`,pickADeviceFirst:`Scegli prima un dispositivo`,loadingActions:`Caricamento azioni…`,noActionsForThisDevice:`Nessuna azione per questo dispositivo`,selectAnAction:`Scegli un'azione…`,couldNotReadThisDevice:`Impossibile leggere le capability di questo dispositivo.`},deviceLabel_one:`Dispositivo`,deviceLabel_other:`Dispositivi`,customLabel:`Personalizzata: {{name}}`},device:{cameraFunctionSwitches:{cameraFunctions:`Funzioni della telecamera`,functions:`Funzioni`,offCount:`{{count}} spenti`},deviceConfigPanel:{failedToLoadDeviceConfiguration:`Impossibile caricare la configurazione del dispositivo.`,noConfigurationAvailableForThis:`Nessuna configurazione disponibile per questo dispositivo.`,saving:`Salvataggio...`},deviceNotificationMute:{notifications:`Notifiche`,notificationMuteStateUnknownThe:`Silenziamento notifiche — stato sconosciuto; il centro notifiche non ha risposto.`,muted:`Silenziato. {{costWhenOff}}`,notifyingMutingIt:`Notifica attiva. Silenziandolo: {{costWhenOff}}`,unknown:`Sconosciuto`,muted2:`Silenziato`,notifying:`Notifica attiva`,writeFailed:`Scrittura fallita: {{failure}}`,theNotificationCentreDidNot:`Il centro notifiche non ha risposto, quindi lo stato di silenziamento di questo dispositivo è sconosciuto.`,cameraCostWhenOff:`Questa telecamera non notifica mai — nessuna regola, nessun destinatario, nessun allarme. Eventi, tracce e registrazioni esistenti non cambiano.`,deviceCostWhenOff:`Questo dispositivo non notifica mai — nessuna regola, nessun destinatario, nessun allarme.`},intercomPanel:{mic:`Microfono:`,audioPath:`Percorso audio:`,micNote:`<b>Microfono:</b> il browser chiederà il permesso al primo utilizzo. Il microfono resta attivo solo mentre parli e viene rilasciato quando smetti.`,audioPathNote:`<b>Percorso audio:</b> la tua voce viene codificata in Opus, decodificata lato server e inoltrata alla telecamera come IMA ADPCM sul canale di conversazione dedicato della telecamera.`,state:{idle:`Premi per parlare`,requestingMic:`Richiesta del microfono…`,starting:`Apertura della sessione…`,connecting:`Connessione…`,talking:`Parlando — rilascia per fermare`,stopping:`Arresto…`,error:`Errore`},hint:{idle:`Clicca per aprire una sessione audio bidirezionale.`,requestingMic:`Consenti l'accesso al microfono per continuare.`,starting:`Il server sta aprendo il canale vocale della telecamera.`,connecting:`Handshake WebRTC in corso.`,talking:`L'audio è in corso. Clicca di nuovo per fermare.`,stopping:`Chiusura della sessione.`,error:`Clicca per riprovare. Verifica che la telecamera sia online e che l'addon del codec audio sia installato.`}},panelContent:{reboot:`Riavviare "{{deviceName}}"?`,theDeviceWillGoOffline:`Il dispositivo resterà offline per circa 30 secondi mentre il firmware si riavvia.`,reboot2:`Riavvia`,restartAddon:`Riavviare l'addon "{{addonId}}"?`,everyDeviceServedByThis:`Ogni dispositivo servito da questo addon si disconnette per un attimo e si riconnette.`,restart:`Riavvia`,restartDevice:`Riavvia dispositivo`,rebootTheFirmware30sOffline:`Riavvia il firmware. ~30s offline.`,restartAddon2:`Riavvia addon`,perAgentRestartComingWith:`Riavvio per agente — in arrivo con il supervisore dei processi agente.`,restartAgent:`Riavvia agente`,disabledAgentProcessSupervisorNot:`Disabilitato — il supervisore dei processi agente non è ancora collegato.`,notLoaded:`Dispositivo #{{id}} non caricato.`,bouncesAddon:`Riavvia ogni dispositivo servito da <code>{{addonId}}</code>.`},resyncButton:{reSync:`Risincronizza`,reAlignThisDeviceS:`Riallinea tipo, ruolo, capability e unità di questo dispositivo alla sua sorgente.`,reSyncing:`Risincronizzazione…`},bindingsTab:{failedToLoadBindings:`Impossibile caricare i binding:`,noCapabilityProvidersApplicableTo:`Ancora nessun provider di capability applicabile a questo dispositivo.`,nativeProvidersShowUpHere:`I provider nativi compaiono qui non appena l'addon che li gestisce li registra.`,capability:`Capability`,kind:`Tipo`,activeProvider:`Provider attivo`,node:`Nodo`,native:`Nativo`,wrapper:`Wrapper`,noneAvailable:`nessuno disponibile`,clickToDeactivateRevertTo:`Clicca per disattivare (torna al nativo)`,activateWrapper:`Attiva il wrapper {{wrapperId}}`,boundSummary_one:`<b>{{bound}}</b> capability su {{count}} associata — le righe contrassegnate <em>non associata</em> hanno un wrapper disponibile che puoi attivare.`,boundSummary_other:`<b>{{bound}}</b> capability su {{count}} associate — le righe contrassegnate <em>non associata</em> hanno un wrapper disponibile che puoi attivare.`,kindNative:`nativo`,wrapped:`wrapper`,linked:`collegato`},cameraStepInspector:{loadingPipeline:`Caricamento pipeline…`,noPipelineNodeIsOnline:`Nessun nodo pipeline è online.`,catalogUnavailable:`Catalogo non disponibile.`,detectionStepsOfThisCamera:`Step di detection di questa telecamera`,noCameraSettings:`Questo step non ha impostazioni su questa telecamera.`,appliesToAllAcceleratorsOf:`Si applica a: tutti gli acceleratori di questa telecamera.`,thisCamera:`{{name}} · questa telecamera`,saveFailed:`Salvataggio non riuscito`,modelsChosenByAccelerators:`I modelli li scelgono gli acceleratori che eseguono questa telecamera — <nodes>Pipeline › Nodi</nodes>`,offBecauseParent:`Spento perché lo step padre è spento`,kindDetector:`rilevatore`,kindCropper:`ritaglio`,kindClassifier:`classificatore`,kindRefiner:`raffinatore`,kindAudio:`audio`,layerCamera:`Questa telecamera`,layerNode:`Nodo`,thresholdsAreTheAccelerators:`Le soglie di confidenza appartengono al modello, quindi si impostano sull'acceleratore che lo esegue (Pipeline → Nodi), non per telecamera.`},detectionPipelineTab:{steps:`Step`,settings:`Impostazioni`},detectionSourceControl:{rootDetector:`Detector radice`,thisNode:`Questo nodo`,cameraOnboardAi:`AI integrata nella telecamera`,none:`Nessuno`,saving:`Salvataggio…`,oneRoot:`Una telecamera esegue un solo rilevatore radice alla volta.`},deviceAggregateSection:{loadingDeviceAggregate:`Caricamento aggregato del dispositivo…`,noAggregateContributionsForThis:`Nessun contributo aggregato per questo dispositivo.`,metadataNotLoaded:`Metadati del dispositivo non ancora caricati`},deviceLiveInfoSection:{loadingLiveInfo:`Caricamento info live…`,liveInfo:`Info live`},eventsTab:{eventTimeline:`Timeline eventi`,"0Events":`0 eventi`,noEvents:`Nessun evento`,deviceEventsWillAppearHere:`Gli eventi del dispositivo compariranno qui man mano che si verificano`},overviewTab:{streamNetwork:`Rete dello stream`,nominal:`Nominale`,observed:`Osservato`,peak:`Picco`,packetLoss:`Perdita di pacchetti`},tracksTab:{backendPending:`Backend in sospeso`,zones:`Zone:`,time:`Ora`,bindings:`Binding`,analytics:`Analisi`,activeTracks:`Track attivi`,pipelineanalyticsGetactivetracks:`pipelineAnalytics.getActiveTracks`,noActiveTracks:`Nessun track attivo`,tracksAppearWhenObjectsAre:`I track compaiono quando degli oggetti si stanno muovendo`,historicalTracks:`Track storici`,pipelineanalyticsListtracks:`pipelineAnalytics.listTracks`,noCompletedTracksYet:`Ancora nessun track completato`,tracksAreArchivedWhenTheir:`I track vengono archiviati alla scadenza del loro TTL`,routeUnavailable:`La route {{label}} non è ancora disponibile`,trackingHint:`Il tracciamento si abilita per telecamera nella scheda <b>Binding</b> (wrapper <code>pipeline-analytics</code>). TTL, intervallo degli snapshot e conservazione si regolano nella sezione impostazioni dispositivo <b>Analisi</b>.`,points:`{{count}} pt`,liveCount:`{{count}} live`,trackCount_one:`{{count}} traccia`,trackCount_other:`{{count}} tracce`},floatingPanels:{repl:`REPL`,ptz:`PTZ`,intercom:`Interfono`},eventsAndTrailsTab:{events:`Eventi`,tracks:`Tracce`,notAvailable:`Dispositivo #{{id}} non disponibile.`},logsTab:{notAvailable:`Dispositivo #{{id}} non disponibile.`},accessories:`Accessori`,adoptedDevices:`Dispositivi adottati`,children:`Figli`,disabledSection:`Disabilitati`},hero:{buttonHero:{justPressed:`Appena premuto`,idle:`Inattivo`,lastPress:`Ultima pressione {{value1}}`,unknown:`Sconosciuto`,awaitingState:`In attesa dello stato…`,ringsToday_one:`{{count}} suonata oggi`,ringsToday_other:`{{count}} suonate oggi`},eventEmitterHero:{noPressRecorded:`Nessuna pressione registrata`,button:`Pulsante {{value1}}`,awaitingState:`In attesa dello stato…`,waitingForTheFirstEvent:`In attesa del primo evento`,sinceStart_one:`{{count}} evento dall'avvio`,sinceStart_other:`{{count}} eventi dall'avvio`},genericHero:{noLiveViewForThis:`Nessuna vista live per questo tipo di dispositivo. Usa la scheda Config o la riga di scorciatoie per interagire.`},hubHero:{discovered:`Rilevati`,adopted:`Adottati`,available:`Disponibili`,discover:`Rileva`,online:`{{online}} online`,sleeping:`{{sleeping}} in standby`,offline:`{{offline}} offline`,unknown:`{{unknown}} sconosciuti`},lightHero:{awaitingState:`In attesa dello stato…`,turnOff:`Spegni {{deviceName}}`,turnOn:`Accendi {{deviceName}}`,brightness:`Luminosità`,brightnessUnavailable:`Luminosità non disponibile`,on:`Acceso`,off:`Spento`,unknown:`Sconosciuto`,changed:`Cambiato {{value1}}`},motionTriggerToggle:{awaitingState:`In attesa dello stato…`,disableTriggerOnMotion:`Disabilita il trigger su movimento`,enableTriggerOnMotion:`Abilita il trigger su movimento`},sensorHero:{motionDetected:`Movimento rilevato`,idle:`Inattivo`,triggered:`Attivato`,unknown:`Sconosciuto`,lastTrip:`Ultima attivazione {{value1}}`,awaitingState:`In attesa dello stato…`},switchHero:{awaitingState:`In attesa dello stato…`,turnOff:`Spegni {{deviceName}}`,turnOn:`Accendi {{deviceName}}`,on:`Acceso`,off:`Spento`,unknown:`Sconosciuto`,changed:`Cambiato {{value1}}`}},overviewAdapters:{deviceInfoAdapter:{deviceInfo:`Info dispositivo`,identity:`Identità`,hardware:`Hardware`,type:`Tipo`,provider:`Provider`,capabilities:`Capability`,none:`Nessuna`,autoPopulatedByTheDriver:`Compilato automaticamente dal driver a ogni connessione. Sola lettura.`,integration:`Integrazione`,parent:`Padre`}},shared:{primaryChildRow:{primaryChild:`Figlio principale`},addressSelector:{noAddressesAvailable:`Nessun indirizzo disponibile.`,autoPreferred:`Preferito automaticamente`,alwaysIncluded:`Sempre incluso`,unlikelyUsable:`Probabilmente inutilizzabile`},replTerminal:{thinking:`…elaborazione`,text:`>`},webRtcPlayer:{connecting:`Connessione…`,connectionFailed:`Connessione fallita`,streamDisconnected:`Stream disconnesso`,reconnect:`Riconnetti`,unmute:`Attiva audio`,mute:`Disattiva audio`},locationRow:{roomAreaOrLeaveEmpty:`Stanza / area (o lascia vuoto per cancellare)`,create:`Crea`},staleNodeNotice:{notice:`Questo link indicava il nodo <b>{{id}}</b>, che non è in questo cluster. Viene mostrato <b>{{name}}</b> al suo posto.`}},formBuilder:{formBuilder:{searchOrAdd:`Cerca o aggiungi…`,searchToAdd:`Cerca per aggiungere…`},formSaveBar:{saving:`Salvataggio…`},modelSelector:{models:`Modelli ({{length}})`,customPath:`Percorso personalizzato`,noPredefinedModelsAvailableUse:`Nessun modello predefinito disponibile. Usa la scheda Percorso personalizzato per indicare il percorso o l'URL di un file di modello.`,enterPathLikeDataModels:`Inserisci un percorso come /data/models/custom.onnx o https://...`,acceptedFormats:`Formati accettati:`,howToConvertYourModel:`Come convertire il tuo modello`},searchableMultiSelectField:{searchToAdd:`Cerca per aggiungere…`},saveBar:{unsavedChanges_one:`{{count}} modifica non salvata`,unsavedChanges_other:`{{count}} modifiche non salvate`}},backup:{archiveList:{deleteThisArchive:`Eliminare questo archivio?`,permanentlyDeletesAndFrees:`Elimina definitivamente "{{value1}}" e libera {{value2}}.`,loadingArchives:`Caricamento archivi…`,failedToReadManifestFor:`Impossibile leggere il manifest per questa destinazione`,noArchivesAtThisDestination:`Ancora nessun archivio in questa destinazione.`,when:`Quando`,label:`Etichetta`,encryptedRestoreNeedsBackupKey:`cifrato — il ripristino richiede la chiave di backup {{keyId}}`,databases:`Database`,files:`File`,size:`Dimensione`,downloadArchive:`Scarica archivio`,download:`Scarica`,restoreFromThisArchive:`Ripristina da questo archivio`,restore:`Ripristina`,delete:`Elimina {{value1}}`},backupDatabasePicker:{whatToBackUp:`Cosa salvare nel backup`},backupEncryptionCard:{thisKeyIsShownOnly:`Questa chiave viene mostrata una sola volta. CamStack non la conserva — né l'hub, né il suo database, né i suoi backup. Senza di essa un backup cifrato non può essere ripristinato da nessuno, te compreso. Salvala in un password manager o stampala, lontano da questo server.`,copied:`Copiato`,downloadAsFile:`Scarica come file`,iHaveStoredThisKey:`Ho conservato questa chiave in un posto sicuro, fuori da questo server.`,iHaveStoredIt:`L'ho conservata`,replaceTheBackupKey:`Sostituisci la chiave di backup`,encryptBackups:`Cifra i backup`,aNewKeyIsGenerated:`Viene generata una nuova chiave e mostrata una volta sola; i nuovi backup sono cifrati con essa. I backup precedenti richiedono ancora la chiave con cui sono stati creati — conserva anche quella.`,aBackupKeyIsGenerated:`Viene generata una chiave di backup e mostrata una volta sola. Ogni nuovo backup è cifrato con essa, e per ripristinarne uno verrà richiesta. I backup esistenti restano come sono.`,generateANewKey:`Genera una nuova chiave`,generateTheKey:`Genera la chiave`,turnBackupEncryptionOff:`Disattiva la cifratura dei backup`,newBackupsWillBeWritten:`I nuovi backup verranno scritti non cifrati. I backup cifrati esistenti richiedono comunque la loro chiave per essere ripristinati.`,turnOff:`Disattiva`,encryption:`Cifratura`,onKeySince:`Attiva — chiave {{keyId}}, dal {{value2}}`,offBackupsAreNotEncrypted:`Disattivata — i backup non sono cifrati`,replaceKey:`Sostituisci chiave`,enableEncryption:`Attiva la cifratura`,archivesAreEncryptedOnThis:`Gli archivi vengono cifrati su questo server prima di raggiungere qualsiasi destinazione. Il server conserva solo una chiave pubblica, quindi può cifrare i backup pianificati ma non decifrarli — solo la tua chiave di backup può farlo. Copre lo snapshot del database, config.yaml, i dati degli addon (abbinamento HomeKit, fabric Matter, stato Tailscale) e TLS.`,olderKeysBackupsMadeWith:`Chiavi precedenti (i backup creati con esse le richiedono ancora):`},backupEntriesTable:{loadingBackupEntries:`Caricamento voci di backup…`,failedToLoadBackupEntries:`Impossibile caricare le voci di backup`,unknownError:`Errore sconosciuto`,noBackupEntriesYet:`Ancora nessuna voce di backup`,createOneToScheduleBackups:`Creane una per pianificare backup su una o più posizioni di archiviazione.`,hideArchives:`Nascondi archivi`,showArchives:`Mostra archivi`,entry:`Voce`,unnamed:`(senza nome)`,enabled:`Abilitata`,backsUp:`Salva`,locations:`Posizioni`,retention:`Retention`,schedule:`Pianificazione`,noLocations:`Nessuna posizione`,manual:`Manuale`,enable:`Abilita {{value1}}`,retentionFor:`Retention per {{value1}}`,deleteBackupEntry:`Eliminare la voce di backup?`,willStopRunningExistingArchives:`"{{value1}}" smetterà di essere eseguita. Gli archivi esistenti vengono conservati.`,runThisEntryNow:`Esegui questa voce ora`,runNow:`Esegui ora`,edit:`Modifica {{value1}}`,delete:`Elimina {{value1}}`,thisEntryHasNoLocations:`Questa voce non ha posizioni selezionate.`,lastRun:`ultima esecuzione {{when}}`,archivesFor:`Archivi di {{name}}`},backupEntryModal:{editBackupEntry:`Modifica voce di backup`,newBackupEntry:`Nuova voce di backup`,createEntry:`Crea voce`,name:`Nome`,nightlyOffsite:`Notturno offsite`,locationsSelected:`Posizioni ({{value1}} selezionate)`,loadingLocations:`Caricamento posizioni…`,noBackupsStorageLocationsConfigured:"Nessuna posizione di archiviazione `backups` configurata. Aggiungine una prima in Impostazioni → Storage.",retentionArchivesKept:`Retention (archivi conservati)`,enabled:`Abilitata`,runOnScheduleWhenChecked:`Se selezionato, viene eseguita secondo la pianificazione.`,runOnSchedule:`Esegui secondo pianificazione`,schedule:`Pianificazione`},backupNowDialog:{backUpNow:`Esegui backup ora`,runsOnceAndWritesThe:`Viene eseguito una volta e scrive l'archivio in ogni posizione di backup abilitata.`},backupRunsPanel:{cancelQueuedBackupRun:`Annullare l'esecuzione di backup in coda?`,thisRunHasNotStarted:`Questa esecuzione non è ancora iniziata. Annullandola la rimuovi dalla coda — nulla è stato scritto, nulla viene eliminato.`,cancelRun:`Annulla esecuzione`,stopThisBackupRun:`Fermare questa esecuzione di backup?`,theHalfWrittenStagingArchive:`L'archivio di staging scritto a metà viene eliminato e la destinazione in caricamento scarta la sua copia parziale. {{keptSentence}}`,stopRun:`Ferma esecuzione`,runs:`Esecuzioni`,aBackupRunIsIn:`Un'esecuzione di backup è in corso`,oneRunExecutesAtA:`Viene eseguita una sola esecuzione alla volta — le altre attendono in coda.`,checkingForBackupRuns:`Ricerca delle esecuzioni di backup…`,couldNotReadBackupRuns:`Impossibile leggere le esecuzioni di backup — l'orchestrator non ha risposto.`,noBackupRunsYetRuns:`Ancora nessuna esecuzione di backup. Le esecuzioni compaiono qui nel momento in cui ne parte una — manuale o pianificata.`,run:`Esecuzione`,state:`Stato`,progress:`Avanzamento`,destinations:`Destinazioni`,timing:`Tempi`,actions:`Azioni`,removeThisRunFromThe:`Rimuovi questa esecuzione dalla coda prima che parta`,stopThisRunTheHalf:`Ferma questa esecuzione — l'archivio scritto a metà viene scartato`,stop:`Ferma`,queued:`In coda`,uploading:`Caricamento`,buildingArchive:`Creazione archivio`,succeeded:`Riuscita`,failed:`Fallita`,stoppedBeforeCompletingEveryDestination:`Fermata prima di completare ogni destinazione — non è un successo`,stopped:`Fermata`,inLine:`in coda`,waitingItsTurn:`in attesa del proprio turno`,stagedSoFar:`preparati finora`,toCurrentDestination:`verso la destinazione corrente`,notResolvedYet:`non ancora risolto`,keptTheirArchive:`Hanno conservato il loro archivio: {{value1}}`,failed2:`Fallite: {{value1}}`},cronEditor:{schedulePreset:`Preset di pianificazione`,custom:`Personalizzata…`,cronExpression5FieldPosix:`Espressione cron (POSIX a 5 campi)`,format:`Formato:`,validating:`Validazione…`,invalidCronExpression:`Espressione cron non valida`,noFutureRunsMatchThis:`Nessuna esecuzione futura corrisponde a questa espressione.`,nextRuns:`Prossime esecuzioni`,presetManual:`Solo manuale`,presetHourly:`Ogni ora`,presetHourlyDesc:`Allo scattare dell'ora`,preset3h:`Ogni 3 ore`,preset6h:`Ogni 6 ore`,presetDaily:`Ogni giorno alle 03:00`,presetDailyDesc:`Ogni notte alle 3`,presetWeekly:`Ogni domenica alle 03:00`,presetWeeklyDesc:`Domenica mattina alle 3`,formatLine:`<code>minuto ora giorno-del-mese mese giorno-della-settimana</code> · tutti gli orari sono del fuso del server`},restoreWizard:{restoreBackup:`Ripristina backup`,pickSource:`scegli sorgente`,pickLocations:`scegli posizioni`,scheduleRestore:`Pianifica ripristino`,destination:`Destinazione`,selectDestination:`Scegli la destinazione…`,archive:`Archivio`,pickADestinationFirst:`Scegli prima una destinazione.`,readingArchives:`Lettura archivi…`,noArchivesAvailableAtThis:`Nessun archivio disponibile in questa destinazione.`,encryptedKey:`cifrato (chiave {{keyId}})`,databasesInThisArchive:`Database in questo archivio`,snapshotsOnlyRestoringThisArchive:`Solo snapshot: il ripristino di questo archivio sostituisce soltanto questi database. NON tocca configurazione, addon, dati degli addon o certificati.`,loadingArchiveManifestIfThis:`Caricamento del manifest dell'archivio… Se persiste, l'archivio potrebbe essere precedente ai manifest — il ripristino applicherà tutto il contenuto del tarball.`,selectedEntriesWillOverwriteLive:`Le voci selezionate sovrascriveranno i dati live al prossimo riavvio del server. Le voci deselezionate restano aggiornate.`,restoreIsAppliedAtNext:`Il ripristino viene applicato al prossimo avvio del server. Le connessioni attive cadranno al riavvio.`,backupKey:`Chiave di backup`,camstackBackupSecretV1:`camstack-backup-secret-v1:…`,stepOf:`Passaggio {{step}} di 3 — {{name}}`,confirmStep:`conferma`,encryptedTo:`Questo archivio è cifrato con la chiave di backup <mono>{{keyId}}</mono>. Incolla la chiave segreta mostrata alla creazione di quella chiave. Serve a decifrare l'archivio su questo server e non viene memorizzata.`,databases:`Database`},encryptionCard:{yourKey:`La tua chiave di backup ({{keyId}})`},runsPanel:{runningFor:`in corso da {{elapsed}}`,queuedAgo:`in coda da {{elapsed}}`,took:`durata {{elapsed}}`,live:`live`,manual:`manuale`,archiveSize:`archivio da {{size}}`,targets_one:`{{count}} destinazione`,targets_other:`{{count}} destinazioni`,completed:`✓ {{count}} completati`,failedCount:`✗ {{count}} falliti`}},graph:{clusterGraphView:{filterByNodeRunnerCap:`Filtra per nodo / runner / cap…`,expandAll:`Espandi tutto`,collapseAll:`Comprimi tutto`,restoreTheAutomaticLayoutDiscarding:`Ripristina il layout automatico, scartando le posizioni trascinate`,resetLayout:`Reimposta layout`},nodeBox:{lastSeen:`visto l'ultima volta {{relativeLastSeen}}`,openNodeDetail:`Apri dettaglio nodo`,noProcesses:`Nessun processo`},runnerBlock:{restartAddon:`Riavvia addon`,logs:`Log`}},pairing:{agentStateBadge:{notConnected:`non connesso`},agentsFoundSection:{unpairFailed:`Disaccoppiamento fallito: {{message}}`,unpair:`Disaccoppia {{nodeId}}`,sCertificatesAreRevokedAt:`I certificati di {{nodeId}} vengono revocati subito e il nodo viene disconnesso dalla mesh. Dovrà essere accoppiato di nuovo prima di potersi riunire.`,unpair2:`Disaccoppia`,node:`Nodo`,address:`Indirizzo`,version:`Versione`,state:`Stato`,certificate:`Certificato`,pair:`Accoppia`,agentsFoundOnTheNetwork:`Agenti trovati sulla rete`,scan:`Scansiona`,addByAddress:`Aggiungi per indirizzo`,anAgentHoldsNoSecret:`Un agente non conserva alcun segreto: l'accoppiamento gli rilascia un certificato dopo che hai confermato le stesse sei cifre su questa pagina e sull'agente. Il rilevamento richiede che l'agente abbia un proprio IP o la rete host; un bridge Docker lo nasconde — aggiungilo per indirizzo.`,addAgentByAddress:`Aggiungi agente per indirizzo`,aPrivateOrLocalAddress:`Solo un indirizzo privato o locale.`,agentAddress:`Indirizzo agente`,port:`Porta`,optional:`Facoltativo.`,agentPort:`Porta agente`,couldNotListAgents:`Impossibile elencare gli agenti`,requestFailed:`Richiesta fallita`,lookingForAgents:`Ricerca agenti…`,noAgentsFound:`Nessun agente trovato`,nothingIsAdvertisingOnThis:`Nessuno si sta annunciando su questa rete. Avvia l'agente con un proprio IP (o rete host), oppure aggiungilo per indirizzo.`},pairingDialog:{eachScreenShowsACode:`Ogni schermata mostra un codice; digiti il codice dell'ALTRA schermata. Agente a {{value1}}`,couldNotStartThePairing:`Impossibile avviare l'accoppiamento`,reject:`Rifiuta`,codeOnThisHub:`Codice su questo hub`,codeOnThisHubRead:`Codice su questo hub — leggilo all'agente`,onTheAgentEnterThis:`Sull'agente, inserisci questo codice e il PIN locale dell'agente (mostrato sulla console o nel log dell'agente, oppure sul suo schermo).`,codeShownOnTheAgent:`Codice mostrato sull'agente`,typeTheSixDigitsThe:`Digita le sei cifre mostrate dall'agente. Non copiare il codice qui sopra.`,youConfirmedHereTheAgent:`Hai confermato qui. L'agente deve ancora inserire il codice dell'hub e il suo PIN.`,working:`Elaborazione…`,hubConfirmed:`Hub: confermato`,hubNotConfirmed:`Hub: non confermato`,agentConfirmed:`Agente: confermato`,agentNotConfirmed:`Agente: non confermato`,joinedAndRegisteredItsCapabilities:`{{nodeId}} si è unito e ha registrato le proprie capability.`,holdsItsCertificateWaitingFor:`{{nodeId}} ha il suo certificato. In attesa che si connetta e registri le proprie capability…`,openNode:`Apri nodo`,title:`Associa agent {{node}}`,expiresIn:`Scade tra {{countdown}}`}},cluster:{forksTab:{setLogLevel:`Imposta livello di log`,restartProcess:`Riavvia processo`,showLogsFor:`Mostra i log di {{addonId}}`,showEventsFor:`Mostra gli eventi di {{addonId}}`,restart:`Riavvia {{addonId}}`,noServices:`Nessun servizio`,noProcessesOnThisNode:`Nessun processo su questo nodo`,cpu:`{{percent}}% CPU`},nodeDetailCapabilitiesTab:{noCapabilitiesOnThisNode:`Nessuna capability su questo nodo`,capability:`Capability`,boundProvider:`Provider associato`,onlyOneProviderInstalledChoice:`È installato un solo provider — la scelta sarà disponibile quando un secondo addon registrerà questa capability`},nodeDetailSettingsTab:{noAddonsOnThisNode:`Nessun addon su questo nodo`},nodeInfoTab:{rename:`Rinomina`,hub:`Hub`,agent:`Agente`,gb:`{{value1}} GB`,cores_one:`{{count}} core`,cores_other:`{{count}} core`,installedRuntimes:`Runtime installati`,installedRuntimesHint:`Runtime di inferenza installati su questo nodo. I dispositivi di inferenza attivi sono in Pipeline → Bilanciamento del carico.`},processesTab:{class:`Classe`,addon:`Addon`,command:`Comando`,cpu:`CPU%`,uptime:`Uptime`,scanning:`Scansione…`},nodeCard:{unpair:`Dissocia {{name}}`,unpairItDisconnectsAndMust:`Dissociare {{name}}? Viene disconnesso e va associato di nuovo.`,unpair2:`Dissocia`,unpairThisNodeRevokesIts:`Dissocia questo nodo: ne revoca i certificati; va associato di nuovo per riunirsi`,unpairing:`Dissociazione…`,gb:`{{value1}} GB`,forgetThisNodeRemovesIts:`Dimentica questo nodo: ne rimuove lo storico salvato e le assegnazioni della pipeline`,forgetting:`Rimozione…`,forgetNode:`Dimentica nodo`,openThisAgentSStatus:`Apri il pannello di stato di questo agent (si sblocca con un ticket dell'hub di breve durata)`,opening:`Apertura…`,openDashboard:`Apri il pannello`,general:`Generale`,forks:`Fork ({{length}})`,processes:`Processi`,load:`Carico`,settings:`Impostazioni`,capabilities:`Capability`,lastSeen:`Visto l'ultima volta {{when}} —`,addonsAssigned_one:`{{count}} addon assegnato; riprenderà quando il nodo si riconnette`,addonsAssigned_other:`{{count}} addon assegnati; riprenderanno quando il nodo si riconnette`,forgetFailed:`Rimozione non riuscita: {{error}}`,unpairFailed:`Scollegamento non riuscito: {{error}}`},noNodes:`Ancora nessun nodo in questo cluster.`,subtitle:`Un nodo alla volta — topologia e pacchetti. Gli agent entrano tramite associazione (certificato, nessun segreto condiviso).`},access:{accessSection:{dismiss:`Ignora`},createTokenModal:{createToken:`Crea token`,issueToken:`Emetti token`,fullAdministrator:`amministratore completo`,onBehalfOfUser:`A nome dell'utente`,scopes:`Scope`,eachScopePicksACap:`Ogni scope sceglie un target (cap o addon) + uno o più tipi di accesso. Il token può accedere SOLO a ciò che è elencato.`,never:`Mai (fino alla revoca)`,days_one:`{{count}} giorno`,days_other:`{{count}} giorni`,whatItMayDo:`Cosa può fare`,reachScopes:`Scope`,reachViewLink:`Link di visione`,reachAll:`Tutti i permessi`,label:`Etichetta`,cameras:`Telecamere`,viewKind:`Mostra`,viewGrid:`Griglia live`,viewEvents:`Eventi`,talk:`Consenti la risposta audio su queste telecamere`,expires:`Scade dopo`},credentialTable:{couldNotLoad:`Impossibile caricare {{label}}`,noMatchTheFilters:`Nessun elemento di {{label}} corrisponde ai filtri.`,clearSelection:`Deseleziona`,loading:`Caricamento di {{label}}…`,selectAllShown:`Seleziona tutti i {{count}} mostrati`,revoke:`Revoca {{what}}…`,selectedLabel:`{{what}} selezionati`,groupStatus:`Stato`,groupOwner:`Proprietario`,groupKind:`Tipo`,searchPlaceholder:`Cerca {{label}}…`,searchLabel:`Cerca {{label}}`,facetsLabel:`Filtra {{label}}`,clearFilters:`Azzera filtri`,pagesLabel:`Pagine di {{label}}`,previousPage:`Pagina precedente`,nextPage:`Pagina successiva`,range:`{{from}}–{{to}} di {{total}}`,rowLabel:`Seleziona {{name}} ({{owner}})`,pageLabel:`Seleziona ogni {{noun}} di questa pagina`},linkedAppsSection:{revokeTheLink:`Revocare il collegamento "{{name}}"?`,losesAccessForOnIts:`{{name}} perde l'accesso per {{ownerName}} alla prossima chiamata. Per collegarla di nuovo serve ripartire dal flusso di collegamento dell'account.`,revoke:`Revoca`,linkedApps:`App collegate`,externalIntegrationsAlexaLinkedTo:`Integrazioni esterne (Alexa, …) collegate a questo hub tramite OAuth. Revocarne una ferma quell'integrazione alla prossima chiamata. Le righe già revocate possono essere selezionate e rimosse dall'elenco.`,linkedApps2:`app collegate`,selectRevoked:`Seleziona revocati`,allDevices:`tutti i dispositivi`,allTarget:`tutti: {{target}}`},loginSessionsSection:{signOutThisSession:`Disconnetti questa sessione`,onWillHaveToSign:`{{ownerName}} su {{name}} dovrà accedere di nuovo.`,signOut:`Disconnetti`,loginSessions:`Sessioni di accesso`,everyBrowserAndAppSigned:`Tutti i browser e le app connessi a questo hub, per ogni utente. Disconnetterne uno lo termina subito; dovrà accedere di nuovo. La tua sessione corrente è contrassegnata e non è mai inclusa in una disconnessione multipla.`},tokensSection:{revoke:`Revocare "{{name}}"?`,everyScriptUsingItLoses:`Ogni script che lo usa perde subito l'accesso. L'operazione non può essere annullata.`,revoke2:`Revoca`,tokens:`Token`,stopsWorking:`Chi lo possiede perde subito l'accesso. L'operazione non può essere annullata.`,oneFormat:`Ogni token è i suoi scope: alcuni permessi per uno script, tutti i permessi per uno script da amministratore, o la visione di alcune telecamere per un link condiviso. Revocarne uno lo ferma al prossimo utilizzo.`,noTokens:`Nessun token.`,myTokens:`I miei token`,everyAddonRoutes:`le route di ogni addon`},credentialColumns:{name:`Nome`,owner:`Proprietario`,kindScope:`Tipo / scope`,status:`Stato`,created:`Creato`,lastUsed:`Ultimo utilizzo`,expires:`Scadenza`,statusActive:`Attivo`,statusExpired:`Scaduto`,statusRevoked:`Revocato`,statusCurrent:`Questa sessione`,actionOn:`{{action}} {{name}}`,actionsHeader:`Azioni`,never:`Mai`},externalIdentitiesSection:{removeSignInLink:`Rimuovi collegamento di accesso`,willNoLongerBeAble:`"{{ownerName}}" non potrà più accedere con questo account {{kind}}.`,signInLinks:`Collegamenti di accesso`,externalAccountsSingleSignOn:`Account esterni (accesso unico) che ogni utente ha collegato al proprio account CamStack. Solo il proprietario può collegarne uno, dal suo profilo; un amministratore può rimuoverlo.`},nouns:{shareLink_one:`link di condivisione`,shareLink_other:`link di condivisione`,adminToken_one:`token amministratore`,adminToken_other:`token amministratore`,session_one:`sessione`,session_other:`sessioni`,linkedApp_one:`app collegata`,linkedApp_other:`app collegate`,token_one:`token`,token_other:`token`,device_one:`dispositivo`,device_other:`dispositivi`},bulk:{countOf:`{{count}} {{noun}}`,skipCurrentSession:`la tua sessione corrente`,skipNotActive:`già non attiva`,statusCount:`{{count}} {{status}}`,previewIntro:`{{what}} ({{breakdown}}) smettono di funzionare subito. L'operazione non può essere annullata.`,previewMore:`…e altri {{count}}`,confirmTitle:`Revocare {{what}}?`,confirmLabel:`Digita {{expected}} per confermare`,confirmButton:`Revoca {{expected}}`,confirmMismatch:`Digita {{expected}} — il numero di {{noun}} selezionati`,revoked:`Revocati: {{what}}.`,revokedSkipped:`Revocati: {{what}}. Saltati {{count}}: {{reasons}}.`,revokeFailed:`La revoca non è riuscita: {{error}}. L'elenco qui sotto è stato ricaricato — controlla cosa resta.`,requestFailed:`richiesta non riuscita`,eachPartial:`Revocati: {{what}}; {{count}} falliti — {{details}}. L'elenco è stato ricaricato — controlla cosa resta.`,eachPartialMore:`Revocati: {{what}}; {{count}} falliti — {{details}}; …. L'elenco è stato ricaricato — controlla cosa resta.`}},users:{linkedSignInsSection:{unlinkSignInAccount:`Scollega account di accesso`,stopSigningInWithThis:`Smettere di accedere con questo account {{label}}?`,unlink:`Scollega`,linkedSignInAccounts:`Account di accesso collegati`,signInWithAnExternal:`Accedi con un account esterno invece che con la password. Solo gli account che colleghi qui possono farti accedere; la tua autenticazione a due fattori continua ad applicarsi.`,providerUnavailable:`provider non disponibile`},totpModal:{remove2fa:`Rimuovi 2FA`,removeTwoFactorAuthenticationFor:`Rimuovere l'autenticazione a due fattori per "{{username}}"? Potrà accedere con la sola password finché non si registra di nuovo dalla propria pagina profilo.`,twoFactorAuthentication:`Autenticazione a due fattori`,user:`Utente:`,checkingStatus:`Verifica dello stato…`,"2faNotEnrolled":`2FA non attivato`,onlyTheUserThemselvesCan:`Solo l'utente stesso può abilitare il 2FA, dalla propria pagina profilo.`,"2faIsActive":`2FA attivo`,removingHereClearsTheServer:`Rimuoverlo qui cancella il segreto lato server. Usalo solo se l'utente ha perso l'accesso — dovrà registrarsi di nuovo dalla pagina profilo.`},totpQrCode:{qrRenderingUnavailableUseThe:`Rendering del QR non disponibile — usa il segreto qui sotto.`,generating:`Generazione…`},userAccessModal:{title:`Accesso — {{name}}`,role:`Ruolo`,admin:`Amministratore`,adminDescription:`Tutto, su ogni dispositivo — utenti, impostazioni e l’intero sistema.`,viewer:`Visualizzatore`,viewerDescription:`Usa l’app viewer sui dispositivi qui sotto, più le funzioni che selezioni.`,cannotDemoteSelf:`Non puoi rimuovere il tuo ruolo di amministratore.`,noAccessYet:`Nessun accesso`,noAccessYetDetail:`{{name}} non vede nulla finché non salvi un ruolo.`,devices:`Dispositivi`,whichDevices:`Quali dispositivi`,modeExcept:`Tutti i dispositivi tranne…`,modeOnly:`Solo questi dispositivi…`,pickAllowedDevice:`Scegli almeno un dispositivo consentito, oppure attiva Tutti i dispositivi.`,features:`Funzioni`,saveAccess:`Salva accesso`},userSessionsModal:{signOutThisSession:`Disconnetti questa sessione`,onWillHaveToSign:`"{{username}}" su {{label}} dovrà accedere di nuovo.`,signOut:`Disconnetti`,signOutEverywhere:`Disconnetti ovunque`,everySessionOfYourOwn:`Tutte le sessioni del tuo account terminano, questo browser incluso: verrai disconnesso anche qui.`,everySessionOfEndsAt:`Tutte le sessioni di "{{username}}" terminano subito; ogni dispositivo dovrà accedere di nuovo.`,activeSessions:`Sessioni attive`,user:`Utente:`},externalIdentitiesModal:{removeSignInLink:`Rimuovi collegamento di accesso`,willNoLongerBeAble:`"{{username}}" non potrà più accedere con questo account {{label}}.`,linkedSignInAccounts:`Account di accesso collegati`,user:`Utente:`,noLinkedAccountsOnlyThe:`Nessun account collegato. Solo l'utente può collegarne uno, dalla propria pagina del profilo.`,providerUnavailable:`provider non disponibile`},linkedSignIns:{linkedNotice:`Account {{provider}} collegato.`,linkedOn:`{{label}} · collegato il {{date}}`,link:`Collega {{provider}}`},rolePreview:{resolving:`Conteggio dei dispositivi…`,couldNotResolve:`Impossibile contare i dispositivi. Il salvataggio funziona comunque — l’hub applica le stesse regole.`,everyDevice_one:`Ogni dispositivo — {{count}} oggi`,everyDevice_other:`Ogni dispositivo — {{count}} oggi`,devicesVisible_one:`{{count}} dispositivo visibile`,devicesVisible_other:`{{count}} dispositivi visibili`,devicesVisibleOf_one:`{{count}} di {{total}} dispositivi visibile`,devicesVisibleOf_other:`{{count}} di {{total}} dispositivi visibili`,noDevice:`Questa persona non vedrà alcun dispositivo.`},accessSummary:{admin:`Amministratore`,viewer:`Visualizzatore`,allDevices:`tutti i dispositivi`,devices_one:`{{count}} dispositivo`,devices_other:`{{count}} dispositivi`,blocked_one:`{{count}} bloccato`,blocked_other:`{{count}} bloccati`,features_one:`{{count}} funzione`,features_other:`{{count}} funzioni`},viewerFeatures:{"face-assignment":{label:`Volti`,description:`Vedere le persone riconosciute e assegnare, rinominare, unire o eliminare i volti.`},"plate-assignment":{label:`Targhe`,description:`Vedere targhe e veicoli, correggere il testo, assegnare o eliminare le targhe.`},retrain:{label:`Dati di addestramento`,description:`Scegliere e annotare i fotogrammi per il riaddestramento e gestirne le raccolte.`},scenes:{label:`Scene`,description:`Creare, verificare e reimpostare le scene monitorate.`}}},addons:{addonCard:{updating:`Aggiornamento…`,updateTo:`Aggiorna a {{target}}`,update:`Aggiorna`,selectVersionToInstall:`Seleziona la versione da installare`,installedUpdateAvailableSelectedTap:`Installata {{version}} — aggiornamento disponibile. Selezionata {{target}}; tocca per scegliere un'altra versione.`,versionTapToViewAll:`Versione {{version}} — tocca per vedere tutte le versioni`,unknownError:`Errore sconosciuto`,resetRetryCounterAndForce:`Azzera il contatore dei tentativi e forza un ricaricamento immediato`,retryNow:`Riprova ora`,systemPackageUpdatingRestartsThe:`Pacchetto di sistema — l'aggiornamento riavvia l'hub`,system:`Sistema`,restart:`Riavvia`,logs:`Log`,settings:`Impostazioni`,clusterDeployment:`Distribuzione nel cluster`,events:`Eventi`,clusterWideSettingsOneValue:`Impostazioni a livello di cluster — un solo valore per ogni nodo. Le impostazioni per nodo si trovano in Cluster → il nodo → Impostazioni.`,thisAddonExposesNoCluster:`Questo addon non espone impostazioni a livello di cluster. Tutto ciò che si può configurare è per nodo — aprilo da Cluster → il nodo → Impostazioni.`,deviceExport:`Esportazione dispositivi`,autoUpdate:`Aggiornamento automatico`,installedOn:`Installato su`,hubLocal:`Hub (locale)`,installOnMoreAgents:`Installa su altri agenti`,addAgent:`Aggiungi agente`,noAvailableAgents:`Nessun agente disponibile`,failedToLoad:`Caricamento non riuscito (tentativo n. {{attempt}})`,processProblem:{failed:`Il runner si è arreso dopo crash ripetuti. Riavvia per riprovare.`,refused:`L'addon ha rifiutato di avviarsi.`,missing:`Non esiste un processo runner per questo addon.`,crashed:`Il runner è andato in crash e attende il riavvio.`},autoRetryAt:`Nuovo tentativo automatico alle {{time}}`,settingsTitle:`Impostazioni di {{name}}`,components:`Componenti ({{count}})`,forked:`fork`,inProcess:`in-process`,outdated:`non aggiornato`},addonRow:{systemPackage:`Pacchetto di sistema`,changesRequireAHubRestart:`Le modifiche richiedono il riavvio dell'hub`,requiresRestart:`richiede riavvio`,update:`Aggiorna`,restart:`Riavvia`,uninstall:`Disinstalla`},addonUninstallControls:{uninstalled:`{{displayName}} disinstallato`,notEveryNodeWasCleaned:`{{displayName}}: non tutti i nodi sono stati ripuliti`,uninstallFailed:`Disinstallazione di {{displayName}} fallita`,uninstallFrom:`Disinstallare {{displayName}} da {{name}}?`,uninstall:`Disinstalla`,cannotListTheNodes:`Impossibile elencare i nodi`,theHubDidNotAnswer:`L'hub non ha indicato quali nodi hanno questo pacchetto — non è stato rimosso nulla.`,uninstallEverywhere:`Disinstallare {{displayName}} ovunque?`,uninstallFromNodeS:`Disinstalla da {{length}} nodo/i`,uninstallFrom2:`Disinstalla da {{name}}`,removing:`Rimozione...`,uninstallFromEveryNodeThat:`Disinstalla da ogni nodo che lo ha`},addonUploadZone:{uploading:`Caricamento...`,upload:`Carica`},capabilityMap:{noActiveProvider:`Nessun provider attivo`,noProviders:`Nessun provider`,noCapabilitiesRegistered:`Nessuna capability registrata`,inheritGlobal:`Eredita globale`,inheritGlobalWith:`Eredita globale ({{provider}})`},nodeOnlyPackagesPanel:{installedOnAgentsButNot:`Installati sugli agenti ma non sull'hub`,installedOnButNotOn:`Installato su {{name}} ma non sull'hub`,unreachable:`Impossibile interrogare {{nodes}} — i suoi pacchetti non sono elencati.`},updatesList:{checking:`Verifica…`,checkForUpdates:`Cerca aggiornamenti`,allPackagesAreUpTo:`Tutti i pacchetti sono aggiornati`,restart:`Riavvia`,hotSwap:`Hot-swap`,update:`Aggiorna`,updateAll:`Aggiorna tutto ({{count}})`},versionPicker:{versions:`Versioni`,uploadedCopy:`Copia caricata`,localCopy:`Copia locale`,loadingVersions:`Caricamento versioni...`,select:`Seleziona {{version}}`,reInstallFromNpm:`Reinstalla {{version}} da npm`,install:`Installa {{version}}`,noVersionsFound:`Nessuna versione trovata`,inPlace:`{{kind}} in uso.`,reinstall:`Reinstalla <mono>{{version}}</mono> da npm per tornare a seguire le release upstream.`,showOlder:`Mostra le versioni precedenti ({{count}})`,hideOlder:`Nascondi le versioni precedenti`,registryError:`Impossibile caricare le versioni dal registry.`},addonRowBadge:{queued:`in coda`,updating:`aggiornamento`,pendingRestart:`riavvio in sospeso`,done:`completato`,failed:`fallito`},uninstallControls:{everywhere:`Ovunque`,everywhereCount:`Ovunque ({{count}})`},jobProgress:{queued:`in coda`,fetching:`scaricamento`,staged:`preparato`,validating:`verifica`,applying:`applicazione`,restarting:`riavvio`,finalizing:`finalizzazione`,updated:`aggiornato`,failed:`fallito`,skipped:`saltato`},installDialog:{loadingDocument:`Caricamento…`,couldNotLoadDocument:`Impossibile caricare questo file dal registry.`,documentError:`Impossibile caricare questo file. {{message}}`,title:`Installa {{name}}`,version:`Versione`,deprecatedVersion:`{{version}} (deprecata)`,readme:`README`,changelog:`CHANGELOG`,missingReadme:`Questo pacchetto non ha un README.`,missingChangelog:`Questo pacchetto non ha un CHANGELOG.`,install:`Installa`}},brokers:{brokerForm:{failedToLoadSettingsSchema:`Impossibile caricare lo schema delle impostazioni:`,unknownError:`Errore sconosciuto`,connectionOk:`Connessione OK.`,testFailed:`Test fallito: {{value1}}`,testing:`Test in corso…`,testConnection:`Test connessione`,loadingSchema:`Caricamento dello schema…`,noSchema:`Nessuno schema delle impostazioni disponibile per il tipo <code>{{kind}}</code>. Il suo addon broker potrebbe non essere installato o non essere in esecuzione.`,advanced:`Avanzate`},brokerManager:{addBroker:`Aggiungi broker`,registerAMessageBrokerFor:`Registra un message broker per esportatori e automazioni.`,adding:`Aggiunta…`,edit:`Modifica {{name}}`,saving:`Salvataggio…`,deleteBroker:`Elimina broker`,deleteBrokerIntegrationsThatDepend:`Eliminare il broker "{{name}}"? Le integrazioni che ne dipendono smetteranno di funzionare.`,signInOpensAPopup:`Accedi — apre un popup che si chiude al termine`,signOutClearsTheLinked:`Disconnetti — scollega l'account Google collegato a questo broker`,testConnection:`Test connessione`,test:`Test`,noBrokerProvidersAvailable:`Nessun provider di broker disponibile`,name:`Nome`,kind:`Tipo`,status:`Stato`,actions:`Azioni`,failedToLoadBrokers:`Impossibile caricare i broker:`,unknownError:`Errore sconosciuto`,noBrokersRegisteredYetAdd:`Nessun broker registrato. Aggiungine uno per pubblicare gli eventi dei dispositivi alle automazioni a valle.`,loadingSettings:`Caricamento impostazioni…`,loadSettingsFailed:`Impossibile caricare le impostazioni: {{message}}`,signIn:`Accedi`,signOut:`Esci`,loadingBrokers:`Caricamento broker…`},signIn:{intro:`Accedi all'account: le impostazioni tecniche qui sotto vengono compilate per te.`,start:`Accedi`,starting:`Avvio dell'accesso…`,saving:`Salvataggio dell'account…`,openLink:`Apri il link per accedere al tuo account`,afterLogin:`Inserisci email, password ed eventuale codice monouso in quella pagina. Questa finestra prosegue da sola al termine.`,openLoginPage:`Apri la pagina di accesso`,reachability:`Il link deve essere raggiungibile dal tuo browser. Su un hub in container, pubblica la porta del proxy di accesso.`,waitingForProxy:`In attesa che la pagina di accesso sia pronta…`,waitingForLogin:`In attesa del tuo accesso…`,cancel:`Annulla l'accesso`,proxyError:`Il servizio di accesso ha restituito un errore`},editor:{createTitle:`Aggiungi broker`,createSubtitle:`Registra una connessione che integrazioni e automazioni possono usare.`,loadingKinds:`Caricamento dei tipi di broker…`,noProvider:`Nessun provider di broker disponibile.`,create:`Crea broker`,creating:`Creazione…`},picker:{loading:`Caricamento dei broker…`,loadFailed:`Impossibile caricare i broker: {{message}}`,none:`Nessun broker ancora. Creane uno per continuare.`,createNew:`Crea nuovo…`}},integrationHub:{addonIntegrationBody:{settings:`Impostazioni`,activity:`Attività`,activityStream:`Flusso di attività`},integrationHub:{integrations:`Integrazioni {{title}}`},integrationSection:{linkTo:`Collega a {{title}}`},addonControls:{enabled:`Abilitato`,disabled:`Disabilitato`,restart:`Riavvia`,restart2:`Riavviare "{{displayName}}"?`,restartingTheAddonBouncesIts:`Riavviare l'addon riavvia il suo sottoprocesso — il provider si disconnetterà brevemente e si riconnetterà in automatico.`},staleIntegration:{notice:`Questo link indicava <mono>{{id}}</mono>, che non è installato qui.`,showing:`Viene mostrato <b>{{name}}</b> al suo posto.`}},app:{bootProbeFailed:`Verifica di avvio fallita:`,connecting:`Connessione…`},galleryPager:{previousPage:`Pagina precedente`,nextPage:`Pagina successiva`,showing:`Mostrati {{from}}–{{to}} di {{total}} {{noun}}`},login:{primaryLoginMethods:{orContinueWith:`Oppure continua con`},returningToTheApp:`Ritorno all'app…`,couldNotPrepareTheSign:`Impossibile preparare il passaggio dell'accesso. Hai effettuato l'accesso: riprova qui sotto.`,preparingAOneTimeSign:`Preparazione di un codice di accesso monouso…`,ifTheAppDoesNot:`Se l'app non si apre da sola, tocca qui sotto (il codice scade tra 60 s).`,openCamstack:`Apri CamStack`,camstackAdmin:`CamStack Admin`,username:`Nome utente`,password:`Password`,logIn:`Accedi`,loggingIn:`Accesso in corso...`,twoFactorAuthentication:`Autenticazione a due fattori`,finishSigningIn:`Completa l'accesso.`,passkeyVerificationIsnTAvailable:`La verifica con passkey non è disponibile a questo indirizzo. Apri l'hub dal suo indirizzo di dominio per completare l'accesso.`,authenticationCode:`Codice di autenticazione`,verifyAndSignIn:`Verifica e accedi`,verifying:`Verifica in corso...`,methodsPending:`Caricamento delle altre opzioni di accesso...`,backToUsernamePassword:`Torna a nome utente + password`,signInTo:`Accedi a <b>{{name}}</b>`,finishSigningInAs:`Completa l'accesso come <mono>{{username}}</mono>.`,version:`CamStack v{{version}}`,primaryMethods:{loadFailed:`Impossibile caricare un metodo di accesso — ricarica la pagina per riprovare.`}},metrics:{agentLoad:{agentLoad:`Carico agenti`,loading:`Caricamento...`,failedToLoadData:`Impossibile caricare i dati`,activeTasks_one:`<b>{{count}}</b> attività attiva`,activeTasks_other:`<b>{{count}}</b> attività attive`,idle:`inattivo`,taskCount_one:`{{count}} attività`,taskCount_other:`{{count}} attività`},integrationUsage:{integrationUsage:`Utilizzo integrazioni`,loading:`Caricamento...`,failedToLoadData:`Impossibile caricare i dati`,count:`<b>{{count}}</b> integrazioni`},processResources:{processResources:`Risorse dei processi`,loading:`Caricamento...`,failedToLoadData:`Impossibile caricare i dati`,cpu:`CPU:`,mem:`Mem:`,process:`Processo`,memory:`Memoria`,uptime:`Uptime`,rst:`Rst`}},notifications:{templateField:{noVariablesForThisField:`Nessuna variabile per questo campo.`,class:`{{name}}<class>`,previewExampleValues:`Anteprima (valori di esempio)`,willBeEmpty:`{{names}} sarà vuoto in questa notifica.`}},search:{globalSearch:{clearSearch:`Cancella ricerca`},resultsList:{devices:`Dispositivi`,pages:`Pagine`,integrations:`Integrazioni`,noResults:`Nessun risultato per “{{query}}”`},placeholder:`Cerca dispositivi, pagine, integrazioni…`,truncatedResults:`Mostrati i primi {{shown}} di {{total}} — affina la ricerca.`},settings:{nodeAddonsSettingsPanel:{theCurrentSelection:`la selezione corrente`,saveFailed:`Salvataggio fallito:`,nothingToConfigureHereFor:`Nulla da configurare qui per questo nodo.`,noAddonsIn:`Nessun addon in {{scope}} espone impostazioni di livello {{level}} su questo nodo.`},siteLocationCard:{siteLocation:`Posizione del sito`,setByYou:`Impostata da te`,derivedFromIp:`Ricavata dall'IP`,notConfigured:`Non configurata`,automaticDetectionFromThePublic:`Il rilevamento automatico dall'IP pubblico non è riuscito`,itIsNotRetriedOn:`Non viene ritentato da solo — inserisci le coordinate oppure premi Rileva.`,latitude:`Latitudine`,longitude:`Longitudine`,detectFromIp:`Rileva dall'IP`,clear:`Cancella`,wgs84DecimalDegreesDetectAsks:`Gradi decimali WGS84. Rileva interroga una sola volta un servizio pubblico di geo-IP e non sovrascrive un valore che hai digitato — cancellalo prima.`,detectedNear:`Rilevato vicino a {{place}}.`}},secrets:{keychainAuditTable:{nothingHasBeenAuditedYet:`Nulla è stato ancora registrato in audit.`,previousPage:`Pagina precedente`,nextPage:`Pagina successiva`},keychainNoticeContent:{resetKeychain:`Reimposta keychain`,dismiss:`Ignora`,download:`Scarica`,rotate:`Ruota`,review:`Rivedi`,noValueCanBeRead:`Nessun valore può essere letto o memorizzato. Se la chiave master è persa per sempre, Reimposta archivia tutti i valori memorizzati e avvia una nuova keychain; ogni campo segreto risulterà quindi “non impostato”.`,withoutACopyOfThe:`Senza una copia della chiave master, i valori memorizzati non possono essere recuperati.`,theKeychainUnlockedWithA:`La keychain è stata sbloccata con una chiave precedente. Ruota per passare a quella configurata.`,backupKeyFile:`I backup di CamStack lasciano fuori la chiave, ma un backup dell'intera directory dati (un tar di appdata) porta con sé entrambe. Punta <code>keychain.keyFile</code> in config.yaml a un file fuori dal volume dati, conserva la vecchia come <code>keychain.previousKeyFile</code>, riavvia, poi ruota.`,resetByTrigger:`il file trigger RESET_KEYCHAIN`,resetByAdmin:`un admin ({{actor}})`,resetDetail:`Reimpostato il {{when}} da {{by}}. {{archived}} valore/i memorizzato/i sono stati archiviati — illeggibili senza la chiave principale persa. Tutti sono stati disconnessi una volta.`},keychainNotices:{keychainNotices:`Avvisi keychain`,showLess:`Mostra meno`,more:`altri {{hidden}}`,details:`Dettagli`},keychainStatusCard:{keychain:`Keychain`,rotateKey:`Ruota chiave`,downloadRecoveryKey:`Scarica chiave di recupero`,state:`Stato`,locked:`Bloccata`,unlocked:`Sbloccata`,keySource:`Origine della chiave`,fingerprint:`Impronta`,recoveryKey:`Chiave di recupero`,notTaken:`Non scaricata`,purge_one:`Elimina {{count}} wrap ritirato`,purge_other:`Elimina {{count}} wrap ritirati`,taken:`Scaricata {{when}}`},revealDialog:{hide:`Nascondi`,recorded:`Questa visualizzazione è registrata nell'audit del portachiavi. Si nasconde tra {{seconds}}s.`},secretsTable:{filterByUsage:`Filtra per utilizzo`,noValueIsStoredIn:`Nessun valore è ancora memorizzato nella keychain.`,noStoredValueMatchesThis:`Nessun valore memorizzato corrisponde a questo filtro.`,hubSystem:`Hub (sistema)`,owner:`Proprietario`,scope:`Scope`,field:`Campo`,updated:`Aggiornato`,lastRead:`Ultima lettura`,status:`Stato`,reveal:`Mostra {{fieldPath}}`,theKeychainIsLocked:`La keychain è bloccata`,revealAudited:`Mostra (con audit)`,reveal2:`Mostra`},secretsTableState:{usageOrphan:`Orfano`,usageOrphanHint:`Nessuna impostazione punta più a questo valore.`,usageUnknown:`Non disponibile`,usageUnknownHint:`Le impostazioni del suo proprietario non sono leggibili, quindi non si sa se sia in uso. Non viene mai eliminato come orfano.`,usageInUse:`In uso`,usageInUseHint:`Un'impostazione punta a questo valore.`,filterOrphans:`Orfani`,deleteOrphans_one:`Elimina {{count}} orfano`,deleteOrphans_other:`Elimina {{count}} orfani`},useKeychainActions:{downloadTitle:`Scarica la chiave di ripristino`,downloadMessage:`Mostra la chiave MASTER. Chiunque la possieda insieme a una copia del database può leggere ogni segreto. Conservala in un gestore di password, non su questa macchina.`,downloadConfirm:`Mostra la chiave`,downloadRefused:`Download rifiutato`,recoveryTitle:`Chiave di ripristino (impronta {{fingerprint}})`,recoveryMessage:`Copiala ora. Non verrà mostrata di nuovo finché non la richiedi ancora (con registrazione di audit).`,recoveryDone:`Fatto`,rotateTitle:`Ruota la chiave master`,rotateMessage:`La chiave dati viene reimpacchettata con la chiave master configurata; nessun valore viene ricifrato. L’involucro precedente viene conservato finché non lo elimini.`,rotateConfirm:`Ruota`,rotateRefused:`Rotazione rifiutata`,rotatedTitle:`Ruotata`,rotatedMessage:`Nuova impronta {{fingerprint}}. Crea una nuova copia di ripristino.`,purgeTitle:`Elimina gli involucri di chiavi ritirate`,purgeMessage:`Le copie della chiave dati impacchettate con una chiave master precedente vengono eliminate. Dopo di che, la chiave master precedente non apre più nulla.`,purgeConfirm:`Elimina`,purgeRefused:`Eliminazione rifiutata`,resetTitle:`Reimposta il portachiavi`,resetMessage:`Ogni valore memorizzato viene archiviato (illeggibile senza la chiave persa) e ogni campo segreto risulta «non impostato». Una nuova chiave di firma delle sessioni disconnette tutti. Digita {{confirmation}} per confermare.`,resetConfirm:`Reimposta`,resetMismatch:`Digita la conferma esattamente`,resetRefused:`Reimpostazione rifiutata`,dismissFailed:`Impossibile chiudere`,orphansTitle_one:`Elimina {{count}} valore orfano`,orphansTitle_other:`Elimina {{count}} valori orfani`,orphansMessage:`Nessuna impostazione punta più a questi valori. L’hub ricontrolla ciascuno prima di eliminarlo; ciò che risulta in uso viene mantenuto.`,orphansConfirm:`Elimina`,orphansRefused:`Eliminazione rifiutata`,keptTitle:`Alcuni valori sono stati mantenuti`,keptMessage:`{{deleted}} eliminati; {{kept}} mantenuti perché di nuovo in uso o perché il loro proprietario non è leggibile.`}},ui:{alertBell:{markAsRead:`Segna come letto`,dismiss:`Ignora`,alerts:`Avvisi`,showRead:`Mostra letti`,markAllRead:`Segna tutti come letti`,noUnreadAlerts:`Nessun avviso non letto`,noAlerts:`Nessun avviso`,inProgress:`In corso`,urgent:`Urgente`,alertsUnread:`Avvisi ({{count}})`,showRead_one:`Mostra {{count}} avviso letto`,showRead_other:`Mostra {{count}} avvisi letti`},criticalAlertsPanel:{title:`Avvisi urgenti`,subtitle:`Richiedono la tua attenzione.`,close:`Chiudi`}},layouts:{addonPageLoader:{addonPageNotFound:`Pagina addon non trovata`,loading:`Caricamento pagina`,failedTitle:`Impossibile mostrare questa pagina`,listFailed:`Impossibile caricare l'elenco delle pagine.`,listStalled:`L'hub non ha inviato l'elenco delle pagine. Riprova tra poco.`,remoteStalled:`La pagina non si è caricata. Il suo addon potrebbe essere in avvio o non raggiungibile.`},protectedRoute:{loading:`Caricamento...`},appLayout:{camstackAdmin:`CamStack Admin`,expandSidebar:`Espandi la barra laterale`,collapseSidebar:`Comprimi la barra laterale`,logout:`Esci`,user:`Utente`,adminUiV:`admin-ui v{{__APP_VERSION__}}`,openMenu:`Apri il menu`,camstack:`CamStack`}},build:{automationsScriptsAndComposedDevices:`Automazioni, script e dispositivi composti — ciò che questa installazione fa da sola.`,automationsTab:{automation:`Automazione`,couldNotReadTheAutomations:`Impossibile leggere le automazioni`,loadingAutomations:`Caricamento automazioni…`,noAutomationsYet:`Nessuna automazione.`,edit:`Modifica {{name}}`,newAutomation:`Nuova automazione`},blockEditor:{loadExample:`Carica esempio`,replaceTheCurrentEditorContents:`Sostituire il contenuto attuale dell'editor con questo esempio?`,replace:`Sostituisci`,name:`Nome`,whatThisScriptDoes:`Cosa fa questo script`,integrationOptional:`Integrazione (facoltativa)`,leaveEmptyForTheShared:`Lascia vuoto per l'integrazione di sistema condivisa`,startFrom:`Parti da`,runsOn:`Eseguito su`,failed:`Fallito`,renameFile:`Rinomina file`,doubleClickToRename:`Doppio clic per rinominare`,file:`+ file`,useThisFileAsThe:`Usa questo file come punto di ingresso della compilazione`,setAsEntry:`Imposta come ingresso`,loadingTheNodeSType:`Caricamento delle definizioni di tipo del nodo…`,theNodeReturnedNoType:`Il nodo non ha restituito definizioni di tipo, quindi questo codice NON viene verificato rispetto ai tipi del sistema. La compilazione lato server si applica comunque al salvataggio.`,theCodeDoesNotCompile:`il codice non compila`,couldNotReachTheCompiler:`Impossibile raggiungere il compilatore:`,typeCheckOnTheNode:`Verifica dei tipi sul nodo senza salvare`,stopTheProcessAndLet:`Ferma il processo e lascia che il supervisor lo riporti su`,restart:`Riavvia`,showThisScriptSProcess:`Mostra i log del processo di questo script`,nameRequired:`Nome obbligatorio`,logsAppearOnceTheScript:`I log compaiono dopo che lo script è stato salvato e avviato.`,hubOnlyWarning:`Oggi i blocchi vengono eseguiti solo sull'hub. Salvato con questo posizionamento il blocco verrà memorizzato e compilato, ma segnalerà <strong>Fallito</strong> invece di essere eseguito.`,entry:`ingresso`,errorsCannotSave_one:`{{count}} errore — il blocco non può essere salvato.`,errorsCannotSave_other:`{{count}} errori — il blocco non può essere salvato.`,moreErrors:`…e altri {{count}}.`,compiledOk:`Il nodo ha compilato questo codice. Non è stato salvato nulla.`,errorLine:`riga {{line}}:`,unsavedChanges:`modifiche non salvate`,errorsCount:`errori: {{count}}`,logsOf:`Log — <code>{{id}}</code>`,diagnosticLine:`riga {{line}}: {{message}}`},customDeviceTab:{couldNotReadTheCompositions:`Impossibile leggere le composizioni`,loadingCompositions:`Caricamento composizioni…`,theCompositionStoreHasNot:`L'archivio delle composizioni non è ancora stato letto.`,thisIsNotTheSame:`Non equivale ad averne zero — l'elenco compare quando l'hub lo ha letto (`,newComposedDevice:`Nuovo dispositivo composto`,editComposedDevice:`Modifica dispositivo composto`,showingTheLastAnswerThe:`Viene mostrata l'ultima risposta — l'ultimo aggiornamento è fallito:`,deviceNamesAreShownAs:`I nomi dei dispositivi sono mostrati come riferimenti:`,composedDevices:`Dispositivi composti`,aNewDeviceWhoseState:`Un nuovo dispositivo il cui stato deriva da altri dispositivi.`,noComposedDevices:`Nessun dispositivo composto.`,customizations:`Personalizzazioni`,fieldsAddedToOrReplaced:`Campi aggiunti o sostituiti su un dispositivo esistente — uno per dispositivo, modificato dal dispositivo.`,noCustomizations:`Nessuna personalizzazione.`,type:`Tipo`,state:`Stato`,sources:`Sorgenti`,deviceMissing:`dispositivo mancante`,notReported:`{{name}} — dispositivo non ancora segnalato`,deviceListUnreadable:`impossibile leggere l'elenco dei dispositivi ({{error}})`,deviceListPending:`l'elenco dei dispositivi non ha ancora risposto`,deleteThisComposedDevice:`Eliminare questo dispositivo composto?`,deleteMessage:`{{name}} verrà eliminato. L'operazione non può essere annullata.`},scriptDevicesPanel:{couldNotListDevices:`Impossibile elencare i dispositivi:`,devices:`Dispositivi`,declaredByThisScriptUnder:`Dichiarati da questo script nell'integrazione Blocks condivisa (`,openDeviceDetail:`Apri dettaglio dispositivo`,loading:`Caricamento dei dispositivi di questo script…`,declaredBy:`Dichiarati da questo script nell'integrazione Blocks condivisa (<code>{{addonId}}</code>). Apri un dispositivo per la sua sezione di esportazione.`,noDevices:`Ancora nessun dispositivo. Chiama <code>reconcileBlockDevices(ctx, …)</code> dallo script (e riavvia) per dichiararli.`},scriptSettingsPanel:{couldNotLoadSettings:`Impossibile caricare le impostazioni:`,settings:`Impostazioni`,saveSettings:`Salva impostazioni`,loading:`Caricamento delle impostazioni dello script…`,declaredBy:`Dichiarate dall'export <code>settingsSchema</code> di questo script.`,enableChannel:`Script abilitato così il catalogo canali può essere acquisito.`,enableTv:`Script abilitato così la programmazione TV può essere inviata.`,enableNord:`Script abilitato così il catalogo NordVPN può aggiornarsi.`,enableItaly:`Script abilitato così le stazioni italiane possono essere verificate.`,enableVpn:`Script abilitato così l'endpoint VPN può essere testato.`,enableUnifi:`Script abilitato così gli ID UniFi possono essere recuperati.`},scriptsTab:{name:`Nome`,deleteThisScript:`Eliminare questo script?`,restart:`Riavvia`,enableItInsteadADisabled:`Abilitalo invece — uno script disabilitato non ha un processo`,logs:`Log`,couldNotReadTheScripts:`Impossibile leggere gli script`,noScriptsYetAScript:`Nessuno script. Uno script è TypeScript che l'hub esegue nel proprio processo.`,loadingScripts:`Caricamento script…`,noScriptsYet:`Nessuno script.`,edit:`Modifica {{name}}`,newScript:`Nuovo script`,deleteMessage:`{{name}} e il suo sorgente verranno eliminati. L'operazione non può essere annullata.`}},automation:{actionList:{noActionsYetAnAutomation:`Nessuna azione. Un'automazione che non fa nulla non è un'automazione.`,step:`Passo`,runThisStepEarlier:`Esegui questo passo prima`,runThisStepLater:`Esegui questo passo dopo`,removeThisStep:`Rimuovi questo passo`,seconds:`Secondi`,code:`Codice`,stepsRunInOrderAnd:`I passi vengono eseguiti in ordine e si fermano al primo errore.`,kindCap:`Fai qualcosa`,kindWait:`Attendi`,kindCode:`Esegui codice`,codeHint:`Compilato nel blocco proprio di questa automazione dallo stesso compilatore di uno script — non valutato a runtime. <code>ctx</code> e <code>vars</code> sono disponibili.`,addStep:`Passaggio`},automationEditor:{runsOnTheHub:`eseguito sull'hub`,name:`Nome`,whatThisAutomationDoes:`Cosa fa questa automazione`,when:`Quando`,anyOneOfTheseStarts:`Uno qualsiasi di questi avvia un'esecuzione.`,andOnlyIf:`E solo se`,checkedAfterATriggerFires:`Verificato dopo che un trigger scatta. Non viene eseguito nulla se non è vero.`,then:`Allora`,inThisOrderStoppingAt:`In quest'ordine, fermandosi al primo errore.`,logsAppearOnceTheAutomation:`I log compaiono dopo che l'automazione è stata salvata e avviata`,showThisAutomationSProcess:`Mostra i log del processo di questa automazione`,nameRequired:`Nome obbligatorio`},automationList:{deleteThisAutomation:`Eliminare questa automazione?`,thisBlockCannotBeOpened:`Questo blocco non può essere aperto in modo visuale`,runActions:`Esegui azioni`,runningAnAutomationByHand:`Eseguire un'automazione a mano richiede l'autorità automation-control, non ancora collegata. Volutamente non esiste un secondo modo per eseguirla.`,logs:`Log`,noAutomationsYet:`Nessuna automazione.`,anAutomationIsATrigger:`Un'automazione è un trigger, un insieme di condizioni e un elenco di azioni. Viene compilata in un normale blocco ed eseguita nel proprio processo supervisionato — non esiste un motore separato, quindi qualsiasi problema compare qui con un motivo.`,newAutomation:`Nuova automazione`,deleteMessage:`{{name}} verrà eliminata. L'operazione non può essere annullata.`},conditionRow:{comparison:`Confronto`,value:`Valore`},conditionTree:{andOnlyIf:`E solo se`,noConditionsTheActionsRun:`Nessuna condizione. Le azioni vengono eseguite ogni volta che un trigger scatta.`,compareOneDeviceFieldTo:`Confronta un campo di un dispositivo con un valore`,arithmeticAcrossDeviceFieldsThe:`Aritmetica tra campi di dispositivi — il motore di espressioni limitato`,allSelectedRowsMustBe:`Tutte le righe selezionate devono essere vere`,groupAsAll:`Raggruppa come TUTTE`,anyOneOfTheSelected:`Basta una qualsiasi delle righe selezionate`,groupAsAny:`Raggruppa come QUALSIASI`,invertTheSelectedRow:`Inverti la riga selezionata`,selectThisRowForGrouping:`Seleziona questa riga per il raggruppamento`,dissolveThisGroupKeepingIts:`Sciogli questo gruppo, mantenendo le sue righe`,deleteThisGroupAndEverything:`Elimina questo gruppo e tutto il suo contenuto`,removeTheNotKeepingThe:`Rimuovi il NOT, mantenendo la riga`,removeThisCondition:`Rimuovi questa condizione`,allOf:`TUTTE le`,anyOf:`ALMENO UNA delle`,addCondition:`Condizione`,addExpression:`Espressione`,ungroup:`Separa`,removeNot:`Rimuovi NOT`,budget:`profondità {{depth}}/{{depthLimit}} · {{leaves}}/{{leafLimit}} condizioni`,selectOneNegate:`seleziona esattamente una riga da negare`},expressionLeafRow:{expression:`Espressione`,indoorOutdoor5:`indoor - outdoor > 5`,mustEvaluateToTrueOr:`Deve valere vero o falso. Ogni nome al suo interno deve essere associato qui sotto — un nome non associato viene rifiutato al salvataggio dell'automazione, non durante l'esecuzione.`,noNamesBoundYetAn:`Nessun nome associato. Un'espressione legge i dispositivi solo attraverso questi.`,name:`Nome`,reads:`Legge`,aDeviceField:`Un campo di dispositivo`,aConstant:`Una costante`,constant:`Costante`,removeThisName:`Rimuovi questo nome`,aliasExample:`interno`},fieldPicker:{device:`Dispositivo`,selectADevice:`Seleziona un dispositivo…`,capability:`Capability`,field:`Campo`,noReadableFields:`Nessun campo leggibile`,selectAField:`Seleziona un campo…`,pickDeviceFirst:`Scegli prima un dispositivo`,readingDevice:`Lettura del dispositivo…`,noReadableCaps:`Questo dispositivo non riporta capacità leggibili`,selectCap:`Seleziona una capacità…`},generatedCodePanel:{ejectToCodeThisCannot:`Converti in codice — l'operazione non può essere annullata`,theRecipeIsRemovedFrom:`La ricetta viene rimossa dal blocco, che diventa un normale script. L'editor visuale non lo aprirà più e l'unico modo per tornare indietro è creare una nuova automazione da zero. Il codice resta esattamente com'è ora.`,ejectToCode:`Converti in codice`,keepItVisual:`Mantieni visuale`,generatedCode:`Codice generato`,derivedFromTheRecipeAbove:`Derivato dalla ricetta qui sopra — rigenerato a ogni salvataggio, mai modificato qui.`,takePermanentOwnershipOfThis:`Prendi definitivamente possesso di questo codice come script`,saveTheAutomationFirstThere:`Salva prima l'automazione — non c'è ancora un blocco salvato da convertire`,theRecipeIsNotComplete:`La ricetta non è ancora abbastanza completa per generare un blocco.`,eject:`Converti in codice`},triggerEditor:{noTriggersYetWithoutOne:`Nessun trigger. Senza non può mai partire nulla — nemmeno "Esegui azioni", che ha bisogno di un trigger manuale a cui arrivare.`,addAnotherWayThisAutomation:`Aggiungi un altro modo in cui questa automazione può partire`,when:`Quando`,orWhen:`oppure quando`,trigger:`Trigger`,removeThisTrigger:`Rimuovi questo trigger`,cronExpression:`Espressione cron`,runActions:`Esegui azioni`,becomes:`Diventa`,anyChange:`qualsiasi cambiamento`,onlyOnAChange:`solo a un cambiamento`,heldForS:`Mantenuto per (s)`,debounceS:`Debounce (s)`,eventCategory:`Categoria evento`,selectAnEvent:`Seleziona un evento…`,fromDevice:`Dal dispositivo`,anyDevice:`Qualsiasi dispositivo`,cronHint:`Sei campi, prima i secondi. <code>0 30 23 * * *</code> significa ogni notte alle 23:30.`,manualHint:`Viene eseguito solo quando qualcuno preme <b>Esegui azioni</b>. Le condizioni vengono comunque valutate — un'esecuzione manuale è un'esecuzione, non un override.`},valueInput:{oneTwoThree:`uno, due, tre`},editor:{listUnreadable:`La sua ricetta non è leggibile ({{reason}}), quindi non può essere aperta in modo visuale. Il codice è intatto e ancora in esecuzione — modificalo come script.`}},accessDenied:{accessDenied:`Accesso negato`,youDonTHavePermission:`Non hai i permessi per accedere a questa pagina.`,goToDevices:`Vai ai Dispositivi`},changePassword:{camstackAdmin:`CamStack Admin`,setANewPassword:`Imposta una nuova password`,youMustRotateTheSeed:`Devi cambiare la password iniziale prima di continuare.`,chooseANewPasswordFor:`Scegli una nuova password per il tuo account.`,newPassword:`Nuova password`,confirmNewPassword:`Conferma nuova password`,saving:`Salvataggio…`,saveAndContinue:`Salva e continua`,signOutInstead:`Disconnetti invece`,currentPassword:`Password attuale`,enterCurrent:`Inserisci la password attuale`,errorWrongCurrent:`La password attuale non è corretta.`,errorSessionEnded:`La sessione è terminata prima che la modifica fosse confermata. Accedi di nuovo — prova prima con la nuova password.`,errorConnectionLost:`La connessione con l'hub si è interrotta prima che la modifica fosse confermata. Accedi di nuovo — prova prima con la nuova password.`},deviceDetail:{invalidDeviceId:`ID dispositivo non valido`,isNotANumber:`non è un numero.`,backToIntegrations:`Torna alle Integrazioni`,deviceNotFound:`Dispositivo non trovato`,integrations:`Integrazioni`,openParentDevice:`Apri il dispositivo padre {{name}}`,disable:`Disabilitare "{{name}}"?`,theDeviceWillStopProcessing:`Il dispositivo smetterà di elaborare stream ed eventi. Potrai riabilitarlo in seguito.`,disableDevice:`Disabilita dispositivo`,enableDevice:`Abilita dispositivo`,updating:`Aggiornamento…`,enabled:`Abilitato`,disabled:`Disabilitato`,takeSnapshot:`Scatta snapshot`,fetchAFreshFrameAnd:`Ottieni un frame aggiornato e scaricalo.`,rebootDevice:`Riavvia dispositivo`,cameraGoesOfflineFor30:`La telecamera va offline per circa 30 secondi.`,reboot:`Riavviare "{{name}}"?`,theCameraWillGoOffline:`La telecamera andrà offline per circa 30 secondi durante il riavvio del firmware.`,reboot2:`Riavvia`,restartAddon:`Riavvia addon`,bouncesEveryDeviceServedBy:`Riavvia ogni dispositivo servito da {{servingAddonLabel}}.`,restart:`Riavviare "{{servingAddonLabel}}"?`,restartingTheAddonWillBriefly:`Riavviare l'addon disconnetterà brevemente tutti i dispositivi serviti da esso (non solo "{{name}}"). Gli stream si riconnetteranno automaticamente.`,restart2:`Riavvia`,deleteDevice:`Elimina dispositivo`,removeTheDeviceAndAll:`Rimuove il dispositivo e tutte le sue impostazioni.`,delete:`Eliminare "{{name}}"?`,thisWillRemoveTheDevice:`Il dispositivo e tutte le sue impostazioni verranno rimossi. L'operazione non può essere annullata.`,dragToResize:`Trascina per ridimensionare`,currentAudioLevelDbfs:`Livello audio attuale (dBFS)`,repl:`REPL`,invalidSegment:`Il segmento URL <code>{{segment}}</code> non è un numero.`,noDeviceWithId:`Nessun dispositivo con ID <code>#{{id}}</code>`,loadingIntegration:`Caricamento integrazione…`,missingIntegration:`Integrazione mancante`,noIntegration:`Nessuna integrazione`},devices:{orphanDevices:`Dispositivi orfani`,theseDevicesReferenceAnIntegration:"Questi dispositivi fanno riferimento a un'integrazione non più registrata (il loro `integrationId` oppure, per i dispositivi più vecchi che non ne hanno uno, il loro `addonId`). Eliminali, oppure reinstalla l'integrazione mancante per riportarli online. Il badge del provider accanto a ogni riga è l'addon che lo serve."},embedPlayerPage:{embedConfigError:`Errore di configurazione dell'embed:`,failedToInitialiseTheEmbed:`Impossibile inizializzare il player embed`},events:{feed:`Feed`,debug:`Debug`},eventsDebug:{noAnomalyFound:`nessuna anomalia trovata`,analysing:`analisi in corso…`,notAnalysed:`non analizzato`,noMediaOfAnyKind:`nessun media di alcun tipo`,allCameras:`Tutte le telecamere`,selectAll:`Seleziona tutto`,keep:`Mantieni`,analyzed:`Analizzato`,couldNotLoadTheMarked:`Impossibile caricare le tracce contrassegnate.`,aCameraFilledThePer:`Una telecamera ha raggiunto il limite per telecamera — alcune tracce contrassegnate non sono elencate. Rimuovi il contrassegno ad alcune, oppure filtra su una sola telecamera.`,noTrackIsMarkedFor:`Nessuna traccia è contrassegnata per il debug`,markOneFromATrack:`Contrassegnane una dalle azioni di una traccia nel Feed per vederla qui.`,reportCounts:`{{media}} media · {{events}} eventi · {{positions}} posizioni`,exportAll:`Esporta tutto ({{count}})`,debugMarkNote:`Un contrassegno <code>debug</code> non blocca la conservazione — qui sono elencate le tracce contrassegnate che esistono ancora. Una traccia i cui media sono stati rimossi appare senza media. Usa <strong>Mantieni</strong> per proteggere una selezione dalla pulizia mentre indaghi, e <strong>Analizzato</strong> per togliere il contrassegno a quelle che hai finito.`,vanished:`{{count}} traccia/e contrassegnata/e rimossa/e tra l'elenco e l'analisi.`,markedAnalyzed:`{{count}} traccia/e contrassegnata/e come analizzata/e e rimossa/e da questo elenco.`,undo:`Annulla`,cameraFallback:`Telecamera {{deviceId}}`},eventsDebugTapes:{trackingTapes:`Nastri di tracking`,recordTheTrackHistory:`Registra la cronologia delle tracce`,loadingCameraStatus:`Caricamento stato telecamere…`,camera:`Telecamera`,state:`Stato`,framesMin:`Frame/min`,lastHour:`Ultima ora`,held:`Trattenuti`,gaps:`Lacune`,segmentsUnknown:`{{value1}} (segmenti sconosciuti)`,loadingPromotedTapes:`Caricamento nastri promossi…`,scenario:`Scenario`,window:`Finestra`,tracks:`Tracce`,review:`Rivedi {{scenario}}`,review2:`Rivedi`,download:`Scarica {{scenario}}`,release:`Rilascia`,release2:`Rilasciare {{scenario}}?`,releasingReturnsThisTapeS:`Rilasciare riporta le tracce bloccate di questo nastro alla retention ordinaria — da quel momento possono essere eliminate. Il bundle promosso resta fino a quando non viene eliminato.`,delete:`Eliminare {{scenario}}?`,deletingRemovesThePromotedBundle:`Eliminare rimuove definitivamente il bundle promosso e la sua riga nell'indice. Prima vengono rilasciati i blocchi delle sue tracce — l'operazione non può essere annullata.`,intro:`Una telecamera registra finché il suo interruttore <b>Registra la cronologia delle tracce</b> (impostazioni telecamera → Tracciamento) è attivo; i segmenti vengono conservati 24 h. Promuovi una finestra che vale la pena tenere, etichettala nella revisione, contrassegnala come rivista, scaricala e trasformala in un caso di test con <code>npm run tracking-bench -- case</code>.`,segsHeld:`{{count}} seg · {{size}}`,promoteWindow:`Promuovi finestra`,reviewed:`rivista`,released:`rilasciata`,storedOf:`{{stored}}/{{total}} memorizzate`,dayMode:`giorno`,reviewLanes:`{{id}} — {{count}} tracce`,laneFrames:`{{range}} · {{count}} fotogrammi`},eventsDebugTapesPromoteForm:{camera:`Telecamera`,from:`Da`,to:`A`,scenario:`Scenario`,note:`Nota`,optionalNote:`nota facoltativa`,lighting:`Illuminazione`,lightingAuto:`Illuminazione: auto`,aPromotedTapeMayBe:`Un nastro promosso può essere condiviso come caso di test — tieni lo slug dello scenario e la nota privi di nomi o altri dati personali.`},eventsDebugTapesReview:{loadingTheTape:`Caricamento del nastro…`,sameSubject:`Stesso soggetto`,differentSubjects:`Soggetti diversi`,changedAtSFromTape:`Cambiato a (s dall'inizio del nastro)`,changedAtS:`cambiato a s`,mixed:`Misto`,notASubject:`Non è un soggetto`,markNotReviewed:`Segna come non rivisto`,markReviewed:`Segna come rivisto`,select:`seleziona {{trackId}}`,notStoredMarkedThroughThe:`non memorizzato — contrassegnato tramite il nastro`},integrationDetail:{integrations:`Integrazioni`,scanTheNetworkForDevices:`Cerca dispositivi sulla rete (anche in una sottorete diversa)`,scanNetwork:`Scansiona rete`,disableIntegration:`Disabilita integrazione`,enableIntegration:`Abilita integrazione`,enabled:`Abilitata`,disabled:`Disabilitata`,restart:`Riavvia`,restart2:`Riavviare "{{name}}"?`,restartingTheAddonWillBriefly:`Riavviare l'addon disconnetterà brevemente tutti i dispositivi che ne dipendono ({{topLevelCountLabel}} attivi). Gli stream si riconnetteranno automaticamente.`},library:{peopleVehiclesCapturedEventsAnd:`Persone, veicoli, eventi acquisiti e scene — ciò che la detection ha riconosciuto.`,people:`Persone`,vehicles:`Veicoli`,events:`Eventi`,scenes:`Scene`},plates:{vehicles:`Veicoli`,enrolledVehicleIdentitiesUsedFor:`Identità di veicoli registrate usate per il riconoscimento delle targhe. Apri un veicolo per rinominarlo o rimuovere i campioni di targa.`,recentRecognizedPlates:`Targhe riconosciute di recente`,licensePlatesReadByThe:`Targhe lette dalla pipeline di detection. Assegnale a un veicolo, correggi il testo OCR oppure eliminale.`},scenes:{scene:`Scena`,camera:`Telecamera`,state:`Stato`,whatItSays:`Cosa dice`,variants:`Varianti`,lastChange:`Ultima modifica`,open:`Apri`,aSceneWatchesOneRegion:`Una scena osserva una regione di una telecamera e ti avvisa quando smette di somigliare all'immagine che hai acquisito — un bidone, un cancello, un posto auto.`,newScene:`Nuova scena`,loadingScenes:`Caricamento scene…`,nothingMatchesTheFilter:`Nessun risultato per il filtro`,noScenesYetPressNew:`Nessuna scena. Premi “Nuova scena”, scegli una telecamera, poi disegna un riquadro attorno a ciò che vuoi tenere d'occhio.`,whichCamera:`Quale telecamera?`,continue:`Continua`,aSceneLivesOnOne:`Una scena appartiene a una telecamera. Scegli quella che vede l'oggetto.`,scenes:`Scene — {{editingName}}`,drawABoxNameIt:`Disegna un riquadro, dagli un nome, poi acquisisci l'aspetto “normale”. La luce diurna basta — il riferimento notturno è facoltativo, e “Impostazioni” su ogni scena regola quanto è esigente e ogni quanto controlla.`,loadingTheEditor:`Caricamento dell'editor…`,unreachable_one:`{{count}} telecamera non ha potuto essere interrogata sulle scene. Quelle telecamere mancano da questo elenco — non equivale ad avere zero scene.`,unreachable_other:`{{count}} telecamere non hanno potuto essere interrogate sulle scene. Quelle telecamere mancano da questo elenco — non equivale ad avere zero scene.`,transitionAgo:`{{duration}} fa`},ssoComplete:{nothingToFinishHereGo:`Nulla da completare qui — vai all'accesso`,closeThisWindow:`Chiudi questa finestra`,finishingSignIn:`Completamento dell'accesso…`},oauthLanding:{brand:`CamStack`,errorTitle:`Accesso non completato`,successTitle:`Accesso eseguito`,successBody:`L’account è collegato. Ritorno a CamStack…`,signedOutTitle:`Disconnesso`,signedOutBody:`L’account è stato scollegato da questo hub.`,back:`Torna a CamStack`,close:`Chiudi questa finestra`,reason:{access_denied:`L’accesso è stato negato, quindi non è stato collegato nulla.`,invalid_state:`Questo link di accesso è scaduto o è già stato usato. Ripeti l’accesso.`,invalid_request:`La richiesta non era valida per questo hub. Ricomincia il collegamento dall’inizio.`,unknown_broker:`Quella connessione non esiste più. Aggiungila di nuovo, poi accedi.`,not_configured:`Alla connessione mancano ID client o segreto. Compilali, salva, poi accedi.`,exchange_failed:`Il provider non ha accettato l’accesso. Controlla ID client e segreto, poi riprova.`,no_refresh_token:`Il provider non ha restituito un accesso di lunga durata. Rimuovi CamStack dalle app collegate dell’account, poi accedi di nuovo.`,unavailable:`L’hub sta ancora avviando questa integrazione. Attendi un momento e riprova.`,unknown:`Qualcosa è andato storto. Riprova tra un momento.`}},admin:{system:{integrations:{connectivity:`Connettività`,externalSystemsThisHubTalks:`Sistemi esterni con cui questo hub comunica — exporter, email, broker e sorgenti di calendario.`,devices:`Dispositivi`,connections:`Connessioni`,exposed:`{{linkState}} · {{exposedDeviceCount}} esposti`},logs:{viewer:`Visualizzatore`,destinations:`Destinazioni`,levels:`Livelli`,diagnostics:`Diagnostica`},secrets:{revealRefused:`Rivelazione rifiutata`,secrets:`Segreti`,passwordsTokensAndKeysEncrypted:`Password, token e chiavi, cifrati nel keychain dell'hub. I valori lasciano l'hub solo tramite una rivelazione sottoposta ad audit.`,storedValues:`Valori memorizzati`,audit:`Audit`},settings:{loadingHubTopology:`Caricamento topologia dell'hub…`,noOnlineHubNodeFound:`Nessun nodo hub online trovato.`,settingsWillAppearOnceThe:`Le impostazioni compariranno quando l'hub sarà raggiungibile.`,noAddonsInstalledOnThe:`Ancora nessun addon installato sull'hub.`},users:{deleteUser:`Elimina utente`,permanentlyDeleteUserThisCannot:`Eliminare definitivamente l'utente "{{username}}"? L'azione non può essere annullata — le sessioni attive verranno revocate alla richiesta successiva.`,resetPassword:`Reimposta password`,setANewPasswordFor:`Imposta una nuova password per "{{username}}".`,newPassword:`Nuova password`,atLeast8Characters:`Almeno 8 caratteri`,continue:`Continua`,resetThePasswordForThey:`Reimpostare la password di "{{username}}"? Dovrà usare la nuova password al prossimo accesso.`,username:`Nome utente`,admin:`Admin`,access:`Accesso`,configureAccess:`Configura accesso`,created:`Creato`,actions:`Azioni`,editUser:`Modifica utente`,removeTwoFactorAuthentication:`Rimuovi autenticazione a due fattori`,remove2fa:`Rimuovi 2FA`,linkedSignInAccounts:`Account di accesso collegati`,signInLinks:`Link di accesso`,activeSessions:`Sessioni attive`,sessions:`Sessioni`,users:`Utenti`,hubAccountsAdminFlagAccess:`Account dell'hub, flag admin, scope di accesso, sessioni e link di accesso.`,createUser:`Crea utente`,couldNotLoadUsers:`Impossibile caricare gli utenti`,noUsersYet:`Ancora nessun utente`,createAUserToGrant:`Crea un utente per concedere l'accesso all'hub.`,edit:`Modifica {{value1}}`,create:`Crea`,saving:`Salvataggio…`,password:`Password`,atLeastCharacters:`Almeno {{value1}} caratteri.`,unrestrictedAccessToEveryCapability:`Accesso illimitato a ogni capability e dispositivo.`,toChangeThePasswordUse:`Per cambiare la password, usa Reimposta password sulla riga dell'utente. Gli scope di accesso si configurano dalla colonna Accesso.`,noAccess:`Nessun accesso`,genericError:`Qualcosa è andato storto`,passwordTooShort:`La password deve avere almeno {{min}} caratteri.`},addons:{sort:`Ordina:`,bundlesFirst:`Prima i pacchetti`,name:`Nome`,installSource:`Origine di installazione`,view:`Vista:`,groupMultiAddonPackagesInto:`Raggruppa i pacchetti con più addon in una scheda unica`,showEveryAddonAsIts:`Mostra ogni addon come scheda a sé`,autoUpdate:`Aggiornamento automatico:`,checkEvery:`Controlla ogni:`,updating:`Aggiornamento…`,updateAll:`Aggiorna tutti ({{nonSystemUpdateCount}})`,filterInstalledAddons:`Filtra gli addon installati`,filter:`Filtro:`,inError:`In errore ({{count}})`,updatable:`Aggiornabili`,dev:`Sviluppo`,searchAddonsOnNpm:`Cerca addon su npm...`,searchAddonsOnNpm2:`Cerca addon su npm`,filteringByCapability:`Filtro per capability:`,clear:`Cancella`,installed:`Installati`,bulkUpdateCompleted:`Aggiornamento di massa completato`,systemPackagesUpdatedHubRestarted:`Pacchetti di sistema aggiornati: hub riavviato con successo.`,noAddonsInstalled:`Nessun addon installato`,noInstalledAddonDeclaresThe:`Nessun addon installato dichiara la capability "{{capabilityFilter}}". Ogni addon installabile compare sopra in "Disponibili da installare".`,noAddonsCompatibleWithPlacement:`Nessun addon compatibile con {{name}} (filtro di posizionamento attivo)`,reFetchAddonsCheckNpm:`Ricarica gli addon e controlla su npm le nuove versioni`,checkForUpdates:`Controlla aggiornamenti`,failedToLoadAddons:`Impossibile caricare gli addon`,loadingInstalled:`Caricamento degli addon installati…`}}},systemPage:{myAccess:{notSignedIn:`Non hai effettuato l'accesso.`,subtitle:`Il tuo account, come accedi, dove hai effettuato l'accesso e i tuoi token.`,sectionsLabel:`Sezioni di Il mio accesso`,sections:{profile:`Profilo`,signIn:`Accesso e sicurezza`,sessions:`Sessioni e dispositivi`,tokens:`Token`},administrator:`Amministratore`,user:`Utente`,unrestrictedAccess:`Accesso illimitato`,adminSessionsBypassThePer:`Le sessioni admin saltano il controllo degli scope per chiamata. Ogni endpoint protetto è raggiungibile a prescindere dall'elenco qui sotto.`,grantedScopes:`Scope concessi`,bakedIntoYourSessionToken:`Inseriti nel token di sessione al login; esci e rientra per aggiornarli dopo le modifiche.`,type:`Tipo`,target:`Destinazione`,access:`Accesso`,can:`Può {{a}}`,cannot:`Non può {{a}}`,signOut:`Esci`,changePassword:`Cambia password`,currentPassword:`Password attuale`,newPassword:`Nuova password`,atLeast8Characters:`Almeno 8 caratteri.`,confirmNewPassword:`Conferma nuova password`,passwordsDoNotMatch:`Le password non coincidono.`,newPasswordMustBeAt:`La nuova password deve avere almeno 8 caratteri.`,updatePassword:`Aggiorna password`,twoFactorAuthentication:`Autenticazione a due fattori`,checkingStatus:`Verifica dello stato…`,"2faIsnTActiveOn":`La 2FA non è attiva sul tuo account. Abilitala per richiedere a ogni accesso un codice di 6 cifre dalla tua app di autenticazione.`,enable2fa:`Abilita 2FA`,secretManualEntry:`Segreto (inserimento manuale)`,copied:`Copiato`,"2faIsActive":`La 2FA è attiva`,disable2fa:`Disabilita 2FA`,sessionId:`· id sessione <mono>{{id}}…</mono>`,scanQr:`Inquadra il codice QR (o inserisci il segreto manualmente) nella tua app di autenticazione per <mono>{{username}}</mono>, poi inserisci qui sotto il codice a 6 cifre per confermare.`},identity:{pairADevice:`Associa un dispositivo`,users:`Utenti`,tokensSessions:`Token e sessioni`,certificates:`Certificati`,authentication:`Autenticazione`},network:{localAccess:`Accesso locale`,networkAddresses:`Indirizzi di rete`,remoteAccess:`Accesso remoto`,meshNetworks:`Reti mesh`,turnServers:`Server TURN`,diagnostics:`Diagnostica`},data:{storage:`Archiviazione`,records:`Record`,backup:`Backup`,viewKinds:`Tipi di record`,viewDeletedDevices:`Dispositivi eliminati`,recordsUnifiedIntro:`Ogni tipo di record dichiarato su questo hub. I tipi voce si possono aggiungere, modificare ed eliminare; gli altri sono in sola lettura. I campi segreti sono oscurati.`},notifications:{settings:`Impostazioni`,settingsHint:`Archiviazione e conservazione degli avvisi. Gli avvisi vengono notificati solo tramite regole di notifica sui tipi di avviso.`,newRule:`Nuova regola`,addTarget:`Aggiungi target`,newSequence:`Nuova sequenza`,targets:`Target`,rules:`Regole`,sequences:`Sequenze`,simulate:`Simula`,history:`Cronologia`,alarm:`Allarme`,texts:`Testi`},calendars:{when:`Quando`,calendar:`Calendario`,location:`Luogo`,description:`Descrizione`,month:`Mese`,week:`Settimana`,day:`Giorno`,calendarView:`Vista calendario`,calendars:`Calendari`,show:`Mostra {{name}}`,colourFor:`Colore per {{name}}`,noEventsOnThisDay:`Nessun evento in questo giorno.`,loadingCalendars:`Caricamento calendari…`,couldNotListCalendars:`Impossibile elencare i calendari:`,openConnectivityCalendars:`Apri Connettività → Calendari`,toInstallOrConnectA:`per installare o collegare una sorgente (Google Calendar, raccolta rifiuti, Home Assistant, …).`,allCalendarsAreHiddenTurn:`Tutti i calendari sono nascosti. Attivane uno nella legenda per vedere gli eventi.`,previous:`Precedente`,today:`Oggi`,loadingEvents:`Caricamento eventi…`,couldNotListEvents:`Impossibile elencare gli eventi:`,calendarsFromConnectedSourcesUsed:`Calendari delle sorgenti collegate. Usati dalle regole di notifica per eventi del calendario.`,unavailableAtSource:`non disponibile alla fonte`,emptySources:`Ancora nessuna fonte di calendario. <link>Apri Connettività → Calendari</link> per installare o collegare una fonte (Google Calendar, raccolta rifiuti, Home Assistant, …).`,allDay:`Tutto il giorno`,dayAllDay:`{{date}} · Tutto il giorno`,rangeAllDay:`{{from}} – {{to}} · Tutto il giorno`},terminal:{executable:`Eseguibile`,workingDirectory:`Directory di lavoro`,argumentsOnePerLine:`Argomenti (uno per riga)`,environmentNameValueOnePer:`Ambiente NOME=valore (uno per riga)`,terminal:`Terminale`,openLiveSessionsOrExplicitly:`Apri sessioni live o crea esplicitamente istanze di telecamere Terminale dai profili disponibili.`,terminalConfiguration:`Configurazione del terminale`,thisNodeOffersNoTerminal:`Questo nodo non offre alcun profilo terminale. Abilita BTM, Top o Glances qui sotto, oppure aggiungi un profilo personalizzato.`,couldnTLoadProfiles:`Impossibile caricare i profili`,theTerminalSessionCapabilityMay:`La capability terminal-session potrebbe essere disabilitata o non configurata.`,availableTerminalProfile:`Profilo terminale disponibile`,noProfilesAvailable:`Nessun profilo disponibile`,openSession:`Apri sessione`,terminalName:`Nome del terminale`,optionalCameraName:`Nome della telecamera (facoltativo)`,createTerminalCamera:`Crea telecamera Terminale`,terminalInstances:`Istanze terminale`,onlyTheseExplicitInstancesDeclare:`Solo queste istanze esplicite dichiarano telecamere. Chiudere una sessione live non elimina un'istanza.`,noTerminalCamerasHaveBeen:`Nessuna telecamera Terminale è stata creata.`,deleteTerminal:`Elimina terminale`,name:`Nome`,saveAndRestart:`Salva e riavvia`,legacyAutomaticCameras:`Telecamere automatiche legacy`,theseCamerasPredateExplicitTerminal:`Queste telecamere precedono le istanze Terminale esplicite. Sono volutamente intatte: conferma ogni migrazione prima di eliminarne una. Solo le telecamere BTM possono mantenere la loro identità legacy venendo adottate qui sotto; crea prima nuove istanze per Top o Glances.`,adoptBtm:`Adotta BTM`,liveSessions:`Sessioni live`,noSessionsRunningOpenOne:`Nessuna sessione in esecuzione. Aprine una qui sopra per iniziare.`,attached:`Collegata`,attach:`Collega`},deletedDevices:{intro:`Dati che appartengono ancora a dispositivi eliminati prima che le eliminazioni venissero registrate: registrazioni, eventi, storico e impostazioni degli addon. La scansione non elimina nulla; l'eliminazione chiede conferma e mostra cosa verrà rimosso.`,scan:`Scansiona`,delete:`Elimina i dati di {{count}} dispositivi…`,confirmTitle:`Eliminare i dati dei dispositivi eliminati?`,confirmLabel:`Elimina`,device:`Dispositivo`,stores:`Dati presenti`,none:`Nessun dato appartiene a un dispositivo eliminato.`,skipped:`Nulla è stato elencato o eliminato: l'elenco dei dispositivi non è affidabile ({{reason}}). Riprova.`,cleaned:`Eliminati {{rows}} elementi di {{count}} dispositivi.`,found:`{{count}} dispositivi eliminati contengono ancora {{rows}} elementi.`,unreachable:`Non interrogati (non raggiungibili): {{names}}`},addons:{updateFailed:`Aggiornamento di {{name}} non riuscito`,npmResults:`risultati npm ({{count}})`,installedCount:`{{count}} installati`},meshNetworks:{loadingPeers:`Caricamento dei peer…`}},certificates:{caStrip:{localHttpsCaSha256:`CA HTTPS locale (SHA-256)`,downloadCa:`Scarica la CA`,clusterCaSha256:`CA del cluster (SHA-256)`,clusterCaValidUntil:`CA del cluster valida fino al`,nodeListener:`Listener del nodo`,open:`Aperto`,notStarted:`Non avviato`,theCertificateRegistryIsNot:`Il registro dei certificati non è attivo, quindi l'elenco dei nodi qui sotto è incompleto.`,unavailable:`Non disponibile - {{reason}}`,closedSince:`Chiuso dal {{when}} - ogni nodo viene rifiutato.`},deviceCaCard:{deviceCertificateAuthority:`Autorità di certificazione dei dispositivi`,signsTheCertificateEachPaired:`Firma il certificato che ogni dispositivo associato conserva. Viene creata la prima volta che si associa un dispositivo.`,state:`Stato`,ready:`Pronta`,notCreatedYet:`Non ancora creata`,unavailable:`Non disponibile`,subject:`Soggetto`,fingerprintSha256:`Impronta (SHA-256)`,validUntil:`Valida fino al`,reason:`Motivo`},deviceSettingsRow:{usersCanEnrollTheirOwn:`Gli utenti possono registrare i propri dispositivi`,allowedAUserSignedIn:`Consentito: un utente connesso da un telefono può mantenerlo connesso. L'associazione tramite QR funziona in entrambi i casi.`,disabledOnlyAnAdminCan:`Disattivato: solo un amministratore può associare un dispositivo, con un codice QR.`},devicesCard:{revoke:`Revocare "{{name}}"?`,sDeviceStopsSigningIn:`Il dispositivo di {{ownerName}} smette subito di accedere e le sue sessioni aperte terminano. Per usarlo di nuovo va associato da capo. L'operazione non si può annullare.`,revoke2:`Revoca`,delete:`Eliminare "{{name}}"?`,isRemovedFromTheList:`{{name}} viene rimosso dall'elenco. Il registro di audit conserva la revoca.`,renameDevice:`Rinomina dispositivo`,deviceName:`Nome del dispositivo`,rename:`Rinomina`,devices:`Dispositivi`,phonesThatStaySignedIn:`Telefoni che restano connessi con un certificato invece di un login. Revocarne uno lo disconnette subito; va associato di nuovo.`,label:`dispositivi`},myDevicesSection:{revoke:`Revocare "{{name}}"?`,theDeviceStopsSigningIn:`Il dispositivo smette subito di accedere e le sue sessioni aperte terminano. Per usarlo di nuovo devi associarlo da capo. L'operazione non si può annullare.`,revoke2:`Revoca`,myDevices:`I miei dispositivi`,phonesThatStaySignedIn:`Telefoni che restano connessi al tuo account con un certificato. Se uno va perso, revocalo qui e verrà disconnesso subito.`},nodesCard:{newCertificateIssuedRestartThe:`{{nodeId}}: nuovo certificato emesso. Riavvia il nodo per usarlo.`,newCertificateIssuedAndServed:`{{nodeId}}: nuovo certificato emesso e in uso.`,renewHttpsOn:`Rinnovare l'HTTPS su "{{nodeId}}"?`,aNewCertificateIsIssued:`Viene emesso un nuovo certificato dalla CA locale. I client che si fidano della CA continuano a funzionare.`,theNodeMakesANew:`Il nodo genera una nuova chiave, l'hub la firma e il nodo passa al nuovo certificato senza riavviarsi. Se qualcosa fallisce continua a usare quello che aveva.`,renew:`Rinnova`,revokeTheIdentityOf:`Revocare l'identità di "{{nodeId}}"?`,isDisconnectedAtOnceAnd:`{{nodeId}} viene disconnesso subito e non può più connettersi. Per riportarlo va associato di nuovo da Sistema → Cluster → Agent. Resta nell'elenco dei nodi finché non lo dimentichi dalla pagina Cluster. L'operazione non si può annullare.`,revokeAndDisconnect:`Revoca e disconnetti`,nodes:`Nodi`,eachNodeHoldsTwoCertificates:`Ogni nodo ha due certificati: uno che serve via HTTPS, uno che prova la sua identità all'hub. Il rinnovo sostituisce un certificato senza interruzioni; revocare un'identità esclude il nodo finché non si ricollega.`,noNodesReported:`Nessun nodo segnalato.`,theCertificateRegistryIsNot:`Il registro dei certificati non è ancora disponibile, quindi i nodi non possono essere elencati.`},pairDeviceDialog:{pairADevice:`Associa un dispositivo`,createPairingCode:`Crea codice di associazione`,done:`Fatto`,createsAOneTimeCode:`Crea un codice monouso per un telefono che hai in mano. Inquadralo con l'app CamStack su quel telefono; il telefono resta poi connesso come l'utente scelto finché non lo revochi.`,user:`Utente`,deviceName:`Nome del dispositivo`,howThisPhoneIsListed:`Come appare questo telefono nell'elenco, ad es. iPhone di Anna.`,annaSIphone:`iPhone di Anna`,enrollmentQrCode:`Codice QR di registrazione`,openTheCamstackAppOn:`Apri l'app CamStack sul telefono e inquadra questo codice. Funziona una sola volta.`,expiredCreateANewCode:`Scaduto: crea un nuovo codice`,expiresIn:`Scade tra {{label}}`,theHubCouldNotName:`L'hub non ha potuto indicare un indirizzo per questo link, quindi l'app deve già conoscerlo.`,newCode:`Nuovo codice`},queryBody:{couldNotRead:`Impossibile leggere {{what}}`,requestFailed:`Richiesta non riuscita`,reading:`Lettura di {{what}}…`},nodesColumns:{served:`In uso`,unreadable:`Illeggibile`,notServed:`Non in uso`,noneRecorded:`Nessuno registrato`,offline:`Offline`,noPresentsAnother:`No: presenta un altro`,managedByTheHub:`Gestito dall'hub`,renewHttps:`Rinnova HTTPS`,renewTheCertificateOn:`Rinnova il certificato su {{nodeId}}`,renewing:`Rinnovo…`,renewIdentity:`Rinnova identità`,renewTheClusterCertificateOf:`Rinnova il certificato del cluster di {{nodeId}}`,revokeIdentity:`Revoca identità`,revokeTheClusterCertificateOf:`Revoca il certificato del cluster di {{nodeId}}`,node:`Nodo`,httpsExpires:`Scadenza HTTPS`,identity:`Identità`,identityExpires:`Scadenza identità`,inUse:`In uso`,actions:`Azioni`,earlier:`{{count}} precedenti`}},serverName:{title:`Dai un nome a questo server`,description:`Scegli un nome per questo hub. Compare nell’interfaccia di amministrazione e nella schermata di accesso delle app. Puoi cambiarlo più tardi nelle impostazioni di Sistema.`,label:`Nome del server`,later:`Più tardi`,invalid:`Nome non valido`},capabilityBadges:{streaming:`Streaming`,detection:`Rilevamento`,recording:`Registrazione`,audio:`Audio`,snapshot:`Snapshot`,motion:`Movimento`,ptz:`PTZ`,webrtc:`WebRTC`,onvif:`ONVIF`,analytics:`Analisi`,battery:`Batteria`,nativeSnapshot:`Snapshot nativo`,twoWayAudio:`Audio bidirezionale`,doorbell:`Campanello`,rebootable:`Riavviabile`,map:`Mappa`,aiObstacle:`Ostacoli IA`,targetedMowing:`Taglio mirato`},terminal:{panel:{exited:`Sessione terminata con codice {{code}}.`,exitedSignal:`Sessione terminata con codice {{code}} (segnale {{signal}}).`}},terminalPage:{profilesNote:`Quali profili esistono su <mono>{{node}}</mono>, i loro binari e i loro argomenti. Ogni impostazione è per nodo.`},deviceQuickDetail:{discard:`Annulla`,historyUnknown:`Non è stato possibile sapere se questo dispositivo ha una cronologia registrata.`,leaveMessage:`Le modifiche non salvate di questo dispositivo verranno scartate.`,leaveTitle:`Annullare le modifiche non salvate?`,nameRequired:`Il nome è obbligatorio`,openFull:`Apri il dettaglio completo`,openHistory:`Apri la cronologia completa`,save:`Salva`,saving:`Salvataggio…`,tabDisplay:`Visualizzazione`,tabExport:`Esportazione`,tabHistory:`Storico`,tabInfo:`Info dispositivo`},nodes:{general:{nodeColour:`Colore del nodo`,nodeColourGroup:`Colore del nodo`,reachableHost:`Host raggiungibile`}},uiLibrary:JSON.parse(`{"accountSignIn":{"again":"Accedi di nuovo","choose":"Scegli","noLink":"Non è stato possibile aprire la pagina di accesso. Riprova.","open":"Apri la pagina di accesso","paste":"Indirizzo di reindirizzamento o codice","rejected":"L'accesso non è stato accettato. Ricomincia.","signInWith":"Accedi con {{provider}}","signOut":"Esci","signedIn":"Accesso effettuato come {{account}}","signedInCount":"Accesso effettuato come {{account}} · {{detail}}","working":"Operazione in corso…","yourAccount":"il tuo account"},"runningBadge":{"running":"In funzione","idle":"Fermo"},"runningStatus":{"unknown":"Sconosciuto","idle":"Fermo","running":"In funzione","runningForMinutes":"In funzione da {{count}} min","runningForHours":"In funzione da {{count}} h","withPhase":"{{state}} · {{phase}}"},"recordEntries":{"add":"Aggiungi","addTitle":"Aggiungi voce","colName":"Nome","colUpdated":"Aggiornato","deleteConfirm":"Elimina","deleteDescription":"Rimuovere \\"{{name}}\\" in modo permanente?","deleteTitle":"Elimina voce","editTitle":"Modifica voce","emptyDescription":"Aggiungi la prima riga per questo tipo.","emptyTitle":"Nessuna voce","loadFailed":"Impossibile caricare le voci","save":"Salva","saveFailed":"Salvataggio non riuscito","saveUnavailable":"Niente da salvare","jsonObject":"Oggetto JSON"},"storageRecords":{"colAt":"Quando","colDevice":"Dispositivo","colId":"Id","colUpdated":"Aggiornato","emptyDescription":"Nessuna riga corrisponde al filtro attuale.","emptyTitle":"Nessuna riga","entryKind":"Voce","inspectTitle":"Record","loadFailed":"Impossibile caricare i record"},"eventStream":{"kindStarted":"Avviato","kindInstalled":"Installato","kindRestarted":"Riavviato","kindUpdated":"Aggiornato","kindStopped":"Arrestato","kindUninstalled":"Disinstallato","kindCrashed":"Andato in crash","kindError":"Errore","kindPhase":"Fase","kindDetection":"Rilevamento","kindEvent":"Evento","kindCameraAi":"IA telecamera","kindMotion":"Movimento","kindMotionAnalysis":"Analisi movimento","kindMotionZones":"Zone di movimento","kindProviderDet":"Rilevamento provider","kindAudio":"Audio","kindAgentOnline":"Agent online","kindAgentOffline":"Agent offline","kindRegistered":"Registrato","kindUnregistered":"Non registrato","kindState":"Stato","title":"Eventi","auto":"Auto","paused":"In pausa","pickEvents":"Scegli gli eventi da seguire","filter":"Filtro ({{label}})","resetTitle":"Ripristina i filtri predefiniti","reset":"Ripristina","clearTitle":"Cancella le voci visibili","clear":"Cancella","copyAllTitle":"Copia tutti gli eventi visibili","copied":"Copiato!","copy":"Copia","search":"Cerca…","clearSearch":"Cancella ricerca","loading":"Caricamento eventi...","empty":"Nessun evento trovato","filterCategories":"Filtra categorie…","all":"Tutti","none":"Nessuno","defaults":"Predefiniti","noMatches":"Nessun risultato","copyOne":"Copia questo evento","live":"+{{count}} live","summary":{"sessionBySensor":"Sessione di rilevamento avviata dal movimento di {{who}} — fase attiva","sessionStarted":"Sessione di rilevamento avviata — fase attiva","sensorFallback":"sensore n. {{id}}","sessionEnded":"Sessione di rilevamento terminata — fase di controllo","motionActive":"Movimento rilevato — fase attiva{{suffix}}","cooldownExpired":"Raffreddamento scaduto — fase di controllo{{suffix}}","phaseChange":"Fase: {{from}} → {{to}}{{suffix}}","cooldown":"{{source}}, raffreddamento {{seconds}}s","motionStart":"inizio movimento","motionStop":"fine movimento"}},"appShell":{"openMenu":"Apri il menu"},"audioWaveform":{"summary":"{{duration}}s · {{rate}}kHz · {{samples}} campioni"},"eventHeatmap":{"bucketTitle":"{{time}} · movimento {{motion}} · oggetti {{object}}","title":"Densità degli eventi","kind":{"motion":"movimento","object":"oggetto","audio":"audio"}},"codeBlock":{"copy":"Copia il codice"},"detectionCanvas":{"noImage":"Nessuna immagine caricata"},"containerPrimaryHero":{"empty":"Nessuna entità figlia da mostrare."},"thermostatHeroCard":{"mode":"Modalità","setTo":"imposta {{value}}°"},"deviceBatchActionsBar":{"actions":"Azioni · {{count}}"},"multiSelect":{"clear":"Cancella selezione"},"selectedChip":{"remove":"Rimuovi {{label}}"},"errorBox":{"retry":"Riprova"},"nodePicker":{"offline":"{{name}} (offline)"},"qrCode":{"alt":"Codice QR"},"streamBrokerSelector":{"auto":"Auto (migliore disponibile)","preferred":"Stream preferito","loading":"Caricamento degli stream disponibili…","loadFailed":"Impossibile caricare gli stream: è disponibile solo Auto.","noneEnabled":"Nessuno stream abilitato: è disponibile solo Auto."},"confirmDialog":{"cancel":"Annulla","ok":"OK","confirm":"Conferma"},"fanPanel":{"speed":"Velocità ventola","preset":"Preset ventola"},"switchHeroCard":{"on":"Acceso","off":"Spento"},"tapToggle":{"turnOff":"Spegni","turnOn":"Accendi"},"deviceQuickDetail":{"label":"Dettaglio rapido"},"optionSelect":{"noMatches":"Nessun risultato per “{{query}}”","use":"Usa “{{value}}”"},"responseLog":{"kb":"{{size}} KB","bytes":"{{count}} byte"},"stepInspector":{"saving":"Salvataggio…","unsaved_one":"{{count}} modifica non salvata","unsaved_other":"{{count}} modifiche non salvate","saved":"Salvato","saveFailed":"Salvataggio non riuscito","noChanges":"Nessuna modifica non salvata","discard":"Annulla modifiche","save":"Salva"},"dialog":{"close":"Chiudi"},"trainingBaseModelPicker":{"selectAll":"Seleziona tutte le radici","selectRoot":"Seleziona la radice del cluster","clear":"Cancella"},"deviceStepMatrix":{"node":"Nodo","step":"Step"},"detectionResultTree":{"none":"Nessun rilevamento","title":"Rilevamenti ({{count}})","alternates_one":"Alternative ({{count}} sorgente)","alternates_other":"Alternative ({{count}} sorgenti)"},"audioClassificationList":{"processing":"Classificazione audio...","empty":"Nessuna classificazione al momento","title":"Classificazioni audio","showing":"{{shown}} di {{total}}"},"coverInline":{"open":"Apri","stop":"Ferma","close":"Chiudi"},"deviceItem":{"select":"Seleziona {{name}}"},"agentStepEditor":{"clusterHint":"I parametri di ammissione di questo step si trovano in Pipeline → Cluster → Impostazioni → Modelli di arricchimento. Valgono per tutte le telecamere: una copia per dispositivo riempirebbe l'indice condiviso con due criteri.","rootSupplied":"<0>Modello: {{name}}</0> (il modello radice). Il modello proprio di questo step{{stepModel}} viene conservato e torna in uso quando il modello radice non può servire lo step.","model":"Modello"},"addonGlobalSettings":{"loading":"Caricamento di {{name}}…","unavailable":"{{name}} non è disponibile su {{node}}.","override":"Override del benchmark: vale solo per questa esecuzione. Le impostazioni salvate dell'addon non cambiano.","saving":"Salvataggio…"},"consumablesPanel":{"days_one":"{{count}} giorno","days_other":"{{count}} giorni","hours_one":"{{count}} ora","hours_other":"{{count}} ore","cycles_one":"{{count}} ciclo","cycles_other":"{{count}} cicli","replaced":"Sostituito","replace":"Da sostituire","ok":"OK","replacedOn":"Sostituito il {{date}}","title":"Materiali di consumo","empty":"Nessun materiale di consumo segnalato.","loading":"Lettura dei consumabili…","allOk":"Tutto OK","okAndUnknown":"{{ok}} OK · {{unknown}} sconosciuti","noneReported":"Nessuno segnalato","needAttention_one":"{{count}} richiede attenzione","needAttention_other":"{{count}} richiedono attenzione","refillSoon":"Da ricaricare presto","refillNow":"Da ricaricare ora"},"maskShapeCanvas":{"hintLine":"Clicca per impostare il punto iniziale, clicca di nuovo per completare la linea","hintRect":"Clicca per posizionare un rettangolo, poi trascina l'angolo per ridimensionarlo","hintGrid":"Clicca per aggiungere la griglia, poi colora le celle","hintPoints":"Clicca per aggiungere punti (minimo 3). Doppio clic o clic sul primo punto per chiudere.","hintMore":"Continua ad aggiungere punti. Doppio clic o clic sul primo punto per chiudere."},"buttonControl":{"press":"Premi","pressButton":"Pulsante di pressione"},"lockPanel":{"unlock":"Sblocca","lock":"Blocca","openDoorTitle":"Aprire la porta?","unlockTitle":"Sbloccare il dispositivo?","openDoorBody":"Questo rilascerà il chiavistello e aprirà la porta.","unlockBody":"Questo sbloccherà il dispositivo.","confirmOpen":"Conferma apertura","confirmUnlock":"Conferma sblocco","jammed":"Inceppata","openDoor":"Apri la porta","open":"Apri","cancel":"Annulla"},"deviceItemActions":{"awaiting":"In attesa dello stato…","motionOn":"Trigger di movimento: attivo (clicca per disattivare)","motionOff":"Trigger di movimento: disattivo (clicca per attivare)","ptz":"Controlli PTZ"},"deviceTable":{"name":"Nome","type":"Tipo","hardware":"Hardware","features":"Funzioni","preview":"Anteprima"},"loginForm":{"logo":"Logo","username":"Nome utente","password":"Password","failed":"Accesso non riuscito. Riprova.","submitting":"Accesso in corso...","submit":"Accedi"},"sensorHeroCard":{"occupied":"Occupato","clear":"Libero","awaiting":"In attesa dello stato…"},"filterChips":{"type":"Tipo","clearFilters":"Cancella filtri","integrationCount":"Integrazione · {{count}}","integration":"Integrazione","clearSelection":"Cancella selezione"},"layeredSettings":{"modelDefault":"default del modello","default":"default","forModel":" (per {{model}})","pinnedHint":"Salvato da un editor precedente come copia del valore sottostante. Oggi non cambia nulla, ma impedisce alle modifiche successive qui sotto di raggiungere questa telecamera.","pinned":"bloccato al valore {{source}}","resetTo":"Ripristina a {{target}}","title":"Impostazioni","editing":"in modifica: {{target}}"},"homePresetPicker":{"label":"Preset home","notSet":"Non impostato: Home viene rifiutato","ownHome":"{{name}} (home della telecamera)","setHere":"Imposta qui come home","returnIdle":"Torna alla home se inattiva","after":"Dopo (s)"},"fanHeroCard":{"preset":"Preset","fanPreset":"Preset ventola","oscillate":"Oscillazione","on":"Acceso","off":"Spento"},"updateControl":{"updating":"Aggiornamento…","update":"Aggiornamento","upToDate":"Aggiornato","installing":"Installazione…","install":"Installa aggiornamento"},"batchToolbar":{"disable":"Disabilita","enable":"Abilita","delete":"Elimina","clear":"Cancella","selectedCount":"{{count}} selezionati","deleteTitle":"Eliminare {{count}} dispositivi?","deleteMessage":"{{count}} dispositivi selezionati verranno eliminati. L'operazione non può essere annullata."},"modelPicker":{"unresolved":"Il modello fissato (<0>{{value}}</0>) non è offerto per questo dispositivo. Il runtime lo prova come modello personalizzato e lo rifiuta se non può servirlo. Scegli un sostituto e salva.","useDefault":"Usa il predefinito (<0>{{id}}</0>) — poi salva","provider":"Provider","none":"Nessun modello è pubblicato per questo formato di motore."},"controlPanel":{"decrement":"Diminuisci","numeric":"Valore numerico","increment":"Aumenta","value":"Valore del controllo"},"inferenceConfig":{"agent":"Agent","runtime":"Runtime","unavailable":"{{label}} (non disponibile)","backend":"Backend","model":"Modello","noModels":"Nessun modello compatibile"},"sceneReferenceGallery":{"empty":"Nessuna fotografia acquisita. Premi “Acquisisci luce diurna” per scattare quella con cui la scena giudicherà tutto il resto.","deleteLabel":"Elimina la fotografia {{variant}} del {{date}}","delete":"Elimina","lastWarning":"È l'unica fotografia di questa scena. Se la elimini, la scena non sa più com'è la normalità e smette di giudicare finché non ne acquisisci un'altra.","missingPicture":"L'immagine di questo riferimento non è più memorizzata. Il riferimento in sé è intatto e viene ancora usato per il confronto.","noPicture":"nessuna immagine","deleteTitle":"Eliminare l'unica fotografia?"},"pipelineMatrix":{"slotDetector":"rilevatore","slotCropper":"ritaglio","slotClassifier":"classificatore","slotRefiner":"raffinatore","slotAudioClassifier":"classificatore audio","override":"override","ovr":"ovr","root":"radice","cluster":"cluster","rootModelTitle":"Usa il modello radice {{model}}: il modello proprio di questo step qui non viene eseguito","clusterTitle":"Un solo valore per l'intero cluster: questo step scrive in un indice vettoriale condiviso","runsOn":"eseguito su {{target}}","off":"off","autoJump":"nessuna build per questo dispositivo: passa automaticamente a {{target}}","skipTitle":"Attivo per questa telecamera, ma nessun modello compatibile su questo nodo: clicca per installarlo","skip":"⚠ saltato"},"groupedModelSelector":{"family":"Famiglia","size":"{{family}} — dimensione","resolution":"Risoluzione","nativeTitle":"nativa (massima precisione)","fasterTitle":"{{size}}×{{size}} (più veloce)","variant":"Variante","formatsSize":"{{formats}} · ~{{size}} MB","sizeSuffix":" · ~{{size}} MB","native":"nativa","approxSize":"~{{size}} MB"},"retrainReviewBadge":{"added":"Aggiunto","removed":"Rimosso","reclassified":"Riclassificato","adjusted":"Modificato","unchanged":"Invariato","modelError":"Errore del modello","draft":"Bozza","approximate":"{{label}} (approssimato)"},"timelineControls":{"day":"Seleziona il giorno di registrazione","earlierTitle":"Prima (scorri indietro)","earlier":"Scorri indietro","laterTitle":"Dopo (scorri avanti)","later":"Scorri avanti","zoomOut":"Riduci zoom","zoomIn":"Aumenta zoom"},"autotrack":{"title":"Autotrack","loading":"Caricamento autotrack…","enabled":"Abilitato","disabled":"Disabilitato","targetType":"Tipo di bersaglio","stopDelay":"Ritardo di arresto (s)","disappearDelay":"Ritardo di scomparsa (s)","note":"Le impostazioni si salvano all'uscita dal campo. Il supporto varia per produttore: Reolink rispetta tutti e tre i valori; Hikvision solo tipo di bersaglio e ritardo di arresto (il ritardo di scomparsa è accettato ma ignorato all'invio al firmware)."},"deviceSelectField":{"all":"Tutti","select":"— Seleziona dispositivo —","remove":"Rimuovi {{label}}","location":"Posizione","type":"Tipo","max":"Massimo {{count}} selezionati","search":"Cerca dispositivi…","noDevices":"Nessun dispositivo corrispondente","noMatches":"Nessun risultato per “{{query}}”"},"statusBadge":{"online":"Online","offline":"Offline","degraded":"Degradato","unknown":"Sconosciuto","running":"In esecuzione","stopped":"Arrestato","error":"Errore","idle":"Inattivo","enabled":"Abilitato","disabled":"Disabilitato"},"ptzOverlay":{"deleteTitle":"Elimina preset","deleteMessage":"Eliminare il preset PTZ \\"{{label}}\\"? Verrà rimosso dalla telecamera.","delete":"Elimina","updateTitle":"Aggiorna preset","updateMessage":"Sovrascrivere il preset \\"{{label}}\\" con la posizione attuale della telecamera?","update":"Aggiorna","error":"PTZ: {{error}}","zoomIn":"Aumenta zoom","zoomOut":"Riduci zoom","noHome":"Nessun preset home impostato per questa telecamera: sceglierne uno nelle impostazioni PTZ","goHome":"Vai alla home","presets":"Preset","noPresets":"Nessun preset","overwriteTitle":"Sovrascrivi \\"{{name}}\\" con la posizione attuale","deletePreset":"Elimina il preset {{name}}","newPreset":"Nome del nuovo preset","limitTitle":"Limite di preset della telecamera raggiunto ({{max}})","saveTitle":"Salva la posizione attuale come nuovo preset","limit":"Limite di preset raggiunto ({{max}})."},"discoveryPanel":{"title":"Dispositivi rilevati","intro":"Canali dietro questo hub. Clicca <0>Aggiungi</0> per promuovere un canale a dispositivo gestito, oppure <1>Rimuovi</1> per scollegarlo.","refresh":"Aggiorna","refreshFailed":"Ultimo aggiornamento non riuscito: {{error}}","empty":"Nessun canale segnalato dall'hub. Clicca Aggiorna per rilevarli.","available":"Disponibili da aggiungere","adopted":"Già adottati","lastRefreshed":"Ultimo aggiornamento {{when}}","doorbell":"Campanello","battery":"Batteria","multifocal":"Multifocale","openTitle":"Apri il dettaglio del dispositivo","open":"Apri","remove":"Rimuovi","add":"Aggiungi","online":"online","sleeping":"in standby","offline":"offline","unknown":"sconosciuto"},"endpointTest":{"colEndpoint":"Endpoint","colMapped":"Mappato (srflx)","none":"nessuno","colRelay":"Relay","colProto":"Protocollo relay","colConnect":"Connessione relay","colUrl":"URL evento","colNote":"Nota","allocated":"allocato","connected":"connesso","failed":"non riuscito","na":"n/d","timedOut":"raccolta scaduta","natIndependent":"Mapping indipendente dall'endpoint","natDependent":"NAT simmetrico (dipendente dall'endpoint)","natUnknown":"Sconosciuto","natMapping":"Mapping NAT","why":"Motivo","mappings":"Mapping osservati","stunQueried":"STUN interrogati","error":"Errore","results":"Risultati per endpoint","natTitle":"Mapping NAT (questo browser)","iceCount":"Server ICE ({{count}})","ice":"Server ICE","reload":"Ricarica","checkNat":"Verifica NAT","testEach":"Testa ogni endpoint","loadFailed":"Impossibile caricare i server ICE: {{error}}","loading":"Caricamento…","noServers":"Nessun server ICE configurato. Aggiungi un provider TURN in Server TURN."},"hubSessionTest":{"policyAll":"Policy ICE: tutti","policyRelay":"Policy ICE: solo relay (solo TURN)","title":"Test sessione hub","run":"Avvia test ({{seconds}} s)","stop":"Ferma","stream":"Stream (fissato)","pickCamera":"Scegli prima una telecamera","noStream":"Nessuno stream fissato","hint":"Apre due volte una vera sessione live da questo browser (prima con ogni tipo di candidato, poi solo con relay TURN) e legge entrambe le estremità.","progress":"Esecuzione {{index}} di {{total}} · {{policy}}","elapsed":"{{elapsed}} s di {{total}} s","runTitle":"Esecuzione {{index}} · {{policy}}","noRun":"Nessuna esecuzione al momento."},"recordingTimeline":{"modeLive":"Live","modeLoading":"Caricamento…","modePlaying":"In riproduzione","modePaused":"In pausa","modeGap":"Nessun filmato","modeEnded":"Terminato","modeError":"Errore","motionClip":"Movimento ({{count}})","audioClip":"Audio","recorderUnavailable":"Registratore non disponibile: il servizio di registrazione potrebbe non essere in esecuzione su questo nodo.","availabilityUnreadable":"Non è stato possibile interrogare CamStack sulle registrazioni di questa telecamera: questa barra non mostra nulla, il che non equivale ad assenza di filmati.","hlsMode":"Modalità HLS","resumeTitle":"Riprendi la riproduzione","pauseTitle":"Metti in pausa la riproduzione","resume":"Riprendi","pause":"Pausa","liveTitle":"Torna allo stream live","goLive":"Vai al live","hlsTitle":"Riproduci le registrazioni con il player HLS invece che con la sessione WebRTC live","recorded":"Registrato","noRecordings":"Nessuna registrazione in questo intervallo.","density":"Eventi · densità","helpFramePush":"Clicca o trascina la barra di copertura per riprodurre da qualsiasi punto (i fotogrammi vengono riprodotti nel player principale qui sopra), oppure clicca una barra di densità per sfogliare gli eventi di quell'intervallo.","helpHls":"Clicca la barra di copertura per riprodurre da qualsiasi punto, oppure una barra di densità per sfogliare gli eventi di quell'intervallo."},"valveControl":{"open":"Apri","opening":"Apertura","closing":"Chiusura","closed":"Chiusa","stopped":"Ferma","unknown":"Sconosciuto","drag":"Trascina per impostare la posizione","openSuffix":"aperta","stop":"Ferma","close":"Chiudi","position":"Posizione"},"deviceSelectorPicker":{"tabAll":"Tutti","tabTypes":"Per tipo","tabRooms":"Per stanza","tabChosen":"Scelti","everyDevice":"Ogni dispositivo di questa installazione: {{count}} al momento.","laterCovered":"I dispositivi aggiunti in seguito sono inclusi automaticamente.","noTypes":"Nessun dispositivo da cui scegliere un tipo.","typesFootnote":"I dispositivi di un tipo selezionato sono inclusi automaticamente man mano che vengono aggiunti.","noRooms":"Nessun dispositivo ha ancora una stanza assegnata.","roomsFootnote":"Un dispositivo senza stanza non è mai incluso da una regola per stanza.","search":"Cerca dispositivi…","noMatch":"Nessun dispositivo corrispondente.","fixedList":"Un elenco fisso: un dispositivo aggiunto in seguito <0>non</0> è incluso finché non lo modifichi.","includeLinked":"Includi i dispositivi collegati","linkedOn":"Anche gli accessori collegati a una telecamera autorizzata (sirena, faro, PIR) sono inclusi.","linkedOff":"Solo i dispositivi selezionati qui sopra. Un operatore con accesso a una telecamera <0>non</0> potrà attivare la sirena o la luce collegate.","allDevices":"Tutti i dispositivi","noDevice":"Nessun dispositivo scelto","deviceCount_one":"{{count}} dispositivo","deviceCount_other":"{{count}} dispositivi","noType":"Nessun tipo scelto","noRoom":"Nessuna stanza scelta"},"mediaPlayerPanel":{"repeatOff":"No","repeatAll":"Tutti","repeatOne":"Uno","play":"Riproduci","pause":"Pausa","previous":"Precedente","next":"Successivo","vol":"Vol","volume":"Volume","unmute":"Riattiva audio","mute":"Disattiva audio","source":"Sorgente","shuffle":"Casuale","repeat":"Ripeti"},"mediaPlayerHero":{"nothing":"Nessuna riproduzione","seek":"Posizione","previous":"Precedente","play":"Riproduci","pause":"Pausa","next":"Successivo","unmute":"Riattiva audio","mute":"Disattiva audio","volume":"Volume"},"acPanel":{"modeCool":"Raffredda","modeHeat":"Riscalda","modeAuto":"Auto","modeHeatCool":"Caldo·Freddo","modeFan":"Ventola","modeDry":"Deumidifica","modeOff":"Spento","now":"· {{temp}}° ora","swing":"Oscillazione","fan":"Ventola","preset":"Preset","vertical":"Verticale","horizontal":"Orizzontale","swingAxis":"Oscillazione {{axis}}","decrease":"Diminuisci obiettivo","increase":"Aumenta obiettivo","mode":"Modalità","setpoint":"Setpoint"},"heatingValveReadout":{"valve":"Valvola"},"dishwasher":{"running":"In esecuzione","paused":"In pausa","finished":"Completato","error":"Errore","unavailable":"Non disponibile","idle":"Inattivo","unknown":"Sconosciuto","doorOpen":"Porta aperta","start":"Avvia","pause":"Pausa","stop":"Stop","powerOff":"Spento","power":"Alimentazione","errorCode":"Errore {{code}}","program":"Programma","halfLoad":"Mezzo carico","hygienePlus":"Igiene plus","extraDry":"Asciugatura extra","intensiveZone":"Zona intensiva","varioSpeedPlus":"VarioSpeed+","childLock":"Blocco bambini","offline":"Non raggiungibile","descriptionMissing":"In attesa del profilo dell'elettrodomestico","resume":"Riprendi","remaining":"{{time}} rimanenti","startsIn":"Parte tra {{time}}","unknownValue":"—","durationSeconds":"{{n}} s","durationMinutes":"{{n}} min","durationHours":"{{n}} h","durationHoursMinutes":"{{h}} h {{m}} min","op":{"inactive":"Inattiva","ready":"Pronta","delayedStart":"Avvio ritardato","run":"In esecuzione","pause":"In pausa","actionRequired":"Azione richiesta","finished":"Completato","error":"Errore","aborting":"Arresto in corso"}},"humidifier":{"turnOff":"Spegni","turnOn":"Accendi","current":"Attuale: {{value}}","on":"Acceso","off":"Spento","target":"Obiettivo","targetHumidity":"Umidità obiettivo","mode":"Modalità"},"cameraStreamPlayer":{"connecting":"Connessione…","failed":"Connessione non riuscita","disconnected":"Disconnesso","reconnect":"Riconnetti","unmute":"Riattiva audio","mute":"Disattiva audio","snapshot":"Scatta un'istantanea","pip":"Picture-in-Picture","exitFullscreen":"Esci da schermo intero","fullscreen":"Schermo intero"},"petFeeder":{"offline":"Offline","feedNow":"Eroga ora","feed":"Eroga","inBowl":"g nella ciotola","desiccant":"{{days}} g di essiccante","onBattery":"A batteria","feeding":"Erogazione…","lowFood":"Cibo in esaurimento","ready":"Pronto","hopper1":"Serbatoio 1","hopper2":"Serbatoio 2","manualFeed":"Erogazione manuale","callPet":"Chiama l'animale","resetDesiccant":"Azzera essiccante","markRefilled":"Segna come rifornito","cancelFeed":"Annulla erogazione","settings":"Impostazioni","childLock":"Blocco bambini","light":"Luce","feedSound":"Suono di erogazione","volume":"Volume","decreaseVolume":"Abbassa il volume","increaseVolume":"Alza il volume","levelUnknown":"Livello del cibo sconosciuto","gramsInBowl":"{{grams}} grammi nella ciotola","decreasePortion":"Riduci la porzione {{label}}","increasePortion":"Aumenta la porzione {{label}}"},"recordingBands":{"mon":"Lun","tue":"Mar","wed":"Mer","thu":"Gio","fri":"Ven","sat":"Sab","sun":"Dom","continuous":"Continua","events":"Eventi","empty":"Nessuna fascia: non viene registrato nulla. Aggiungine una per iniziare.","add":"Aggiungi fascia","sensors":"Sensori","sensorsHint":"Sensori il cui fronte ATTIVO avvia una registrazione, ad esempio l'apertura di un contatto o un PIR che scatta. I dispositivi nella stessa posizione vengono suggeriti per primi.","addSensor":"Aggiungi un sensore…","start":"Inizio fascia","end":"Fine fascia","audio":"Audio della fascia","silentTitle":"Silenziosa: questa fascia registra lo stream solo video.","soundTitle":"Con audio: questa fascia registra l'audio della telecamera.","silent":"Silenzioso","sound":"Audio","remove":"Rimuovi fascia","everyDay":"ogni giorno","motion":"Movimento","audioAbove":"Audio sopra la soglia","threshold":"Soglia audio in dBFS","objects":"Oggetti","triggerOn":"Attiva su {{class}}","postBuffer":"Post-buffer"},"deviceExport":{"linked":"Collegato","unlinked":"Non collegato","error":"Errore","hideValue":"Nascondi il valore","revealValue":"Mostra il valore","setup":"Configurazione","qr":"Codice QR di abbinamento","unexposeDevice":"Rimuovi {{name}} dall'esposizione","exposeDevice":"Esponi {{name}}","stopTitle":"Smetti di esporre a \\"{{addon}}\\"","exposeTitle":"Esponi a \\"{{addon}}\\"","exposed":"Esposto","expose":"Esponi","bulkExposed_one":"Esposto {{done}} dispositivo selezionato su {{count}}.","bulkExposed_other":"Esposti {{done}} dispositivi selezionati su {{count}}.","bulkUnexposed_one":"Rimosso dall'esposizione {{done}} dispositivo selezionato su {{count}}.","bulkUnexposed_other":"Rimossi dall'esposizione {{done}} dispositivi selezionati su {{count}}.","dismissAria":"Chiudi il risultato dell'esportazione","dismiss":"Chiudi","succeeded":"Riusciti: {{devices}}","failed":"Non riuscito: {{device}} — {{message}}","select":"Seleziona {{name}}","colType":"Tipo","colName":"Nome","colExport":"Esporta","selected":"{{count}} selezionati","exposeN":"Esponi {{count}}","unexposeN":"Rimuovi {{count}} dall'esposizione","filterRole":"Ruolo","filterProvider":"Provider","selectShown":"Seleziona {{count}} mostrati","deselectShown":"Deseleziona mostrati","clear":"Cancella","title":"Dispositivi esportati","exposedCount":"{{count}} esposti","loading":"Caricamento dei dispositivi esportabili…","search":"Cerca per nome o stableId","noMatch":"Nessun dispositivo corrisponde a questa ricerca.","emptyTitle":"Nessun dispositivo esportabile","emptyKinds":"Nessun dispositivo dei tipi supportati ({{kinds}}) è disponibile da esporre a \\"{{addon}}\\".","emptyNoKinds":"\\"{{addon}}\\" non segnala ancora alcun tipo di dispositivo esportabile."},"motionZones":{"title":"Zone di movimento","unsupported":"Questa telecamera non espone una griglia di zone di movimento a bordo.","loading":"Caricamento della griglia della telecamera…","intro":"Attiva <0>Modifica griglia</0> per dipingere la regione direttamente sul fotogramma live, poi <1>Salva</1> per inviare la maschera alla telecamera. Scegli una <2>Dimensione cella</2> maggiore per dipingere più in fretta con tratti ampi: al salvataggio viene ricampionata sulla griglia nativa della telecamera {{width}}×{{height}} (×1 è la più fine).","doneEditing":"Fine modifica","editGrid":"Modifica griglia","allOn":"Tutte attive","allOff":"Tutte spente","invert":"Inverti","cellSize":"Dimensione cella","cameraGrid":"Griglia della telecamera {{width}}×{{height}} (la più fine)","paintingGrid":"Griglia di disegno {{width}}×{{height}} · celle ×{{factor}} più grandi","cells":"{{active}} / {{total}} celle · {{width}}×{{height}}","paintSuffix":" · disegno {{width}}×{{height}}","revert":"Ripristina","saving":"Salvataggio…","save":"Salva"},"cameraGridLayout":{"title":"Layout della griglia","loading":"Caricamento del layout…","unreadable":"L'addon Camera Grids non ha risposto: il layout è sconosciuto, non vuoto.","notGrid":"Questa telecamera non è una griglia.","autofillTitle":"Distribuisci le celle su tutta l'area, senza spazi vuoti","autofill":"Riempi automaticamente","save":"Salva","noCells":"Ancora nessuna cella: aggiungine una qui sotto.","addCell":"Cella","published":"Profili pubblicati","publish":"pubblica {{profile}}","composed":"composto dal profilo {{profile}} di ogni sorgente","serviceable":"disponibile, non pubblicato","noCellsOffer":"non offerto: questa griglia non ha ancora celle","missing":"non offerto: nessun profilo {{profile}} su {{sources}}","cellN":"Cella {{index}}","source":"Sorgente","visiblePart":"Parte visibile della telecamera","wholeFrame":"Fotogramma intero","noSnapshot":"Ancora nessuna istantanea da questa telecamera: i valori qui sotto restano validi.","cropX":"Ritaglio x","cropY":"Ritaglio y","cropWidth":"Larghezza ritaglio","cropHeight":"Altezza ritaglio"},"vacuum":{"cleaning":"In pulizia","paused":"In pausa","returning":"In rientro","docked":"Alla base","drying":"In asciugatura","idle":"Inattivo","error":"Errore","unknown":"Sconosciuto","errorCode":"Errore {{code}}","fanSpeed":"Velocità ventola","start":"Avvia","pause":"Pausa","returnToBase":"Torna alla base","stop":"Ferma","locate":"Localizza"},"sceneMonitor":{"newSceneLabel":"Nuova scena","unsupported":"Il monitoraggio delle scene non è disponibile per questa telecamera.","intro":"Una scena osserva una regione di questa telecamera e ti avvisa quando smette di assomigliare all'immagine acquisita. Disegna un riquadro attorno a ciò che ti interessa (un bidone, un cancello, un posto auto) poi acquisisci come appare la “normalità”. La luce diurna basta per iniziare: il riferimento notturno è facoltativo e, senza, la scena salta semplicemente le ore a infrarossi invece di segnalare un problema.","cancel":"Annulla","newScene":"+ Nuova scena","refresh":"Aggiorna fotogramma","draftHint":"Clicca sul fotogramma per posizionare un riquadro, poi trascina l'angolo per adattarlo a ciò che vuoi osservare.","nameHint":"Dagli un nome, poi crea. Subito dopo acquisirai come appare la “normalità”.","tooLarge":"Questo riquadro copre quasi tutto il fotogramma. Una scena così grande è dominata da meteo, cielo e auto di passaggio: smetterà silenziosamente di accorgersi di ciò che ti interessa davvero. Disegnalo più stretto.","placeholder":"es. Immondizia prelevata","create":"Crea","empty":"Nessuna scena su questa telecamera.","optionalTitle":"Facoltativo. Senza un riferimento notturno i controlli a infrarossi vengono semplicemente saltati: la scena continua a funzionare di giorno e nulla viene segnalato come guasto.","captureTitle":"Scatta subito una nuova foto e salvala come riferimento {{variant}}","capture":"Acquisisci {{variant}}","optional":"(facoltativo)","resetTitle":"Cancella la segnalazione e fotografa di nuovo come appare la normalità adesso","reset":"Ripristina","checkNow":"Controlla ora","settingsFor":"Impostazioni di {{label}}","settings":"Impostazioni","variant":{"day":"Luce diurna","ir":"Notte (IR)","night":"Notte","dawn":"Alba","dusk":"Tramonto"},"coverage":{"empty":"{{parts}} — nulla acquisito finora, quindi questa scena non sta controllando.","judgeAnyway":"{{parts}} — {{names}} valutati rispetto ai riferimenti che hai.","skip":"{{parts}} — facoltativo; i controlli in {{names}} vengono saltati.","namesJoin":"{{first}} e {{second}}"},"suspension":"In pausa — nulla è stato acquisito in {{light}}, quindi i controlli sono sospesi finché la luce non cambia. Acquisisci {{light}} se vuoi che sia sorvegliata sempre.","unavailable":{"no_reference_for_condition":"non posso dirlo — per questa scena non è stato ancora acquisito nulla. Premi “Acquisisci luce diurna” per fotografare l’aspetto normale.","view_shifted":"non posso dirlo — l’inquadratura della telecamera è cambiata dall’acquisizione del riferimento. Acquisiscilo di nuovo.","no_vision_profile":"non posso dirlo — il modello di visione non è raggiungibile, quindi il rilevamento è sospeso.","encoder_model_changed":"non posso dirlo — il modello di embedding è cambiato, quindi i riferimenti salvati non sono leggibili. Acquisiscili di nuovo.","no_snapshot":"non posso dirlo — questa telecamera non ha restituito un fotogramma."},"status":{"notArmed":"Non ancora armata — acquisisci lo stato iniziale per iniziare a controllare.","cantTellNow":"non posso dirlo in questo momento.","heldFor":"da {{duration}}","changedLatched":"CAMBIATA{{held}} — premi Reimposta quando te ne sei occupato.","backToNormal":"Tornata normale, ma ancora segnalata come cambiata{{held}}. Premi Reimposta per cancellare la segnalazione.","changed":"CAMBIATA{{held}}","normal":"Normale{{held}}"},"badge":{"notArmed":"Non armata","changed":"Cambiata","paused":"In pausa","cantTell":"Non so dirlo","normal":"Normale"}},"audioLevelWaveform":{"readout_one":"{{dbfs}} dBFS · {{count}} campione","readout_other":"{{dbfs}} dBFS · {{count}} campioni"},"batteryBadge":{"titleUnknown":"Batteria: sconosciuta","unknown":"Sconosciuta","titleLow":"Batteria: scarica","titleNormal":"Batteria: normale","low":"Scarica","normal":"Normale","titlePercent":"Batteria: {{percent}}%","charging":"in carica ({{source}})","sleeping":"in sospensione"},"coverageTrack":{"ariaLabel":"Timeline della copertura registrata"},"eventBucketStrip":{"loading":"Caricamento eventi…","empty":"Nessun evento in questa finestra.","shown":"({{count}} mostrati)","loadMore":"Carica altri"},"navigationPanel":{"turnLeft":"Gira a sinistra","forward":"Avanti","turnRight":"Gira a destra","turnAround":"Gira su sé stesso","notLoaded":"Dispositivo #{{deviceId}} non caricato.","title":"Navigazione","following":"in inseguimento","lightOn":"luce accesa","driveHold":"Guida (tieni premuto)","stop":"Stop","actions":"Azioni","sounds":"Suoni","fillLight":"Luce di riempimento","on":"Acceso","off":"Spento","lightMode":"Modalità luce","auto":"Automatica","manual":"Manuale","lightLevel":"Livello luce"},"privacyMaskSettings":{"zoneN":"Zona {{id}}","title":"Maschera privacy","unsupported":"Questa telecamera non supporta una maschera privacy integrata.","unreadable":"Questa telecamera non ha risposto, quindi ciò che maschera al momento è sconosciuto: l'editor resta chiuso invece di mostrare un riquadro vuoto su cui potresti salvare. Una telecamera a batteria risponde appena si riattiva; altrimenti verifica che sia raggiungibile.","loading":"Caricamento della maschera privacy della telecamera…","help":"Attiva <0>Modifica maschera</0> per disegnare zone oscurate sul fotogramma live, poi <1>Salva</1> per inviarle alla telecamera. Trascina un rettangolo per spostarlo, il suo angolo per ridimensionarlo; trascina i vertici del poligono, clicca il punto medio di un lato per aggiungerne uno oppure clicca con il tasto destro su un vertice per rimuoverlo.","doneEditing":"Fine modifica","editMask":"Modifica maschera","maskOn":"Maschera attiva","maskOff":"Maschera disattivata","maxZones":"Numero massimo di zone raggiunto","addRect":"Aggiungi una zona rettangolare","addPolygon":"Aggiungi una zona poligonale","rectButton":"+ Rettangolo","polygonButton":"+ Poligono","zoneCount":"{{active}} / {{max}} zone","revert":"Ripristina","saving":"Salvataggio…","save":"Salva","deleteZoneN":"Elimina zona {{id}}","deleteZone":"Elimina zona","micTitleUnknown":"Microfono: stato sconosciuto; la telecamera non ha risposto.","micTitleOn":"La telecamera sta captando l'audio. Spegnendolo: {{cost}}","micTitleOff":"La telecamera è silenziosa. {{cost}}","micUnknown":"Microfono sconosciuto","micOn":"Microfono attivo","micOff":"Microfono disattivato","writeFailed":"Scrittura non riuscita: {{reason}}","micNotReported":"La telecamera non ha segnalato il proprio microfono, quindi questo stato è sconosciuto."},"ptzPanel":{"autofocus":"Messa a fuoco automatica","on":"Attivo","off":"Disattivo","notLoaded":"Dispositivo #{{deviceId}} non caricato."},"recordingPanel":{"settings":"Impostazioni","loadingSettings":"Caricamento impostazioni…","recording":"Registrazione","rescanStorage":"Riesamina archiviazione","status":"Stato","nodeFooter":"nodo: {{nodeId}}","recordingContinuous":"Registrazione (continua)","idle":"Inattivo","storage":"Archiviazione","recorded24h":"Registrato (24h)","nobodyCouldLook":"nessuno ha potuto verificare","segmentRange_one":"{{count}} intervallo di segmenti","segmentRange_other":"{{count}} intervalli di segmenti","recorderUnavailable":"Registratore non disponibile: il servizio di registrazione potrebbe non essere in esecuzione su questo nodo.","playbackHint":"Le registrazioni vengono riprodotte nel player principale qui sopra: da lì puoi tornare al live."},"recordingSettings":{"modeOff":"Off","modeEvents":"Eventi","modeContinuous":"Continua","modeDeviceDecides":"Decide il dispositivo","noteChecking":"verifica della telecamera…","noteAbsent":"questa telecamera non segnala quando serve registrare","noteUnknown":"impossibile verificare la telecamera","mode":"Modalità:","modeAria":"Modalità {{label}}","deviceDecides":"Decide il DISPOSITIVO: questa telecamera registra finché segnala di essere in funzione (un robot mentre pulisce) e un lavoro corrisponde a una clip. Non c'è nulla da pianificare, quindi questa modalità non ha fasce.","bands":"Fasce di registrazione","bandsHint":"Una fascia indica QUANDO e COME registrare. Fuori da ogni fascia non si registra nulla: una tabella vuota significa che questa telecamera è spenta.","profiles":"Profili:","noStreams":"Nessuno stream assegnato da registrare.","segment":"Segmento","default":"predefinito","retention":"Conservazione (vuoto = predefinito del nodo)","maxAge":"Età massima","days":"giorni","maxSize":"Dimensione massima","save":"Salva"},"sceneSettingsForm":{"whatItWatches":"Cosa osserva","name":"Nome","watching":"Sorveglianza attiva","watchingHint":"Se disattivata, la scena conserva la sua regione, i riferimenti e il suo flag: semplicemente smette di controllare. Non si perde nulla mettendola in pausa per un po'","whenToLook":"Quando controllare","triggerBoth":"A intervalli regolari e dopo che il movimento si ferma","triggerPeriodic":"Solo a intervalli regolari","triggerOnMotion":"Solo dopo che il movimento si ferma","checkEvery":"Controlla ogni (secondi)","intervalHint":"60 s va bene per «il bidone è ancora fuori». Ogni controllo costa una fotografia e una codifica: scendere sotto i 30 s circa compra una latenza che quasi mai serve e moltiplica il costo per il numero di scene che hai.","howSure":"Quanto deve essere sicura","thresholdHint":"Quanto la regione deve ancora somigliare alla fotografia per essere considerata invariata. Più alto significa più esigente: a 0,95 una nuvola di passaggio può sembrare un cambiamento; a 0,60 il bidone può sparire e la scena non se ne accorge. 0,80 è un buon punto di partenza: se dà falsi allarmi abbassalo, se perde ciò che ti interessa alzalo.","agreeingChecks":"Controlli concordi prima di cambiare idea","agreeingHint":"Una sola fotografia sbagliata non deve mai poter ribaltare una scena. 3 controlli concordi a 60 s sono circa quattro minuti di latenza e rendono la risposta affidabile: uscire da uno stato costa esattamente quanto entrarci.","quietFor":"Quiete per (secondi) prima che un controllo conti","quietHint":"Un controllo fatto mentre qualcosa si muove è la fotografia del furgone parcheggiato davanti al bidone, quindi viene scartato e non solo ritardato. 0 disattiva il filtro.","minGap":"Intervallo minimo tra controlli conteggiati (secondi)","minGapHint":"Distribuisce i controlli concordi nel tempo reale, invece di lasciare che tre letture adiacenti durante un'unica lunga occlusione passino per tre pareri indipendenti.","lighting":"Illuminazione","noReference":"Quando una luce non ha un riferimento proprio","uncoveredSkip":"Salta il controllo (consigliato)","uncoveredJudge":"Valuta comunque rispetto all'altra luce","whatYouGetTold":"Cosa ti viene comunicato","notificationsFollow":"Le notifiche seguono","emitLatched":"Il flag: comunicato una volta, ancora visibile a colazione","emitLive":"Lo stato live: segue la regione mentre cambia","emitHint":"«Il bidone è sparito» è un flag: vuoi essere avvisato una volta e poterlo rivedere dopo. «Il cancello è aperto» è uno stato live.","autoRestore":"Azzera il flag da solo quando tutto torna normale","autoRestoreHint":"Disattivato per impostazione predefinita, così un allarme non si azzera mai in silenzio. Il momento del «ritorno alla normalità» viene comunque registrato, quindi un'automazione può comunque reagire.","aiDoubleCheck":"Doppio controllo con IA","askVision":"Chiedi a un modello di visione prima di cambiare la risposta","question":"La domanda da porre","questionPlaceholder":"es. Il bidone è ancora lì?","triggerHintPeriodic":"Solo a intervalli regolari. Prevedibile, e nota un cambiamento anche su una telecamera davanti alla quale non si muove mai nulla.","triggerHintOnMotion":"Solo dopo che la telecamera è tornata ferma per la finestra di quiete qui sotto. Il più economico, ma un cambiamento davanti a cui nessuno passa non viene mai visto.","triggerHintBoth":"Entrambi: l'intervallo regolare è la rete di sicurezza per quando il percorso del movimento fallisce. È la scelta giusta per quasi tutte le scene.","uncoveredHintSkip":"Salta quella luce. Nessun verdetto, nessun allarme, nessun flag toccato: riprende da sola quando torna una luce che conosce. Per questo la cattura notturna è facoltativa.","uncoveredHintJudge":"Confronta con i riferimenti che hai. Corretto solo quando le due luci sono davvero simili (un vialetto illuminato, una lampada interna): contro un vero fotogramma a infrarossi segnalerà un cambiamento che non è avvenuto.","matchThreshold":"Soglia di corrispondenza — <0>{{value}}</0>","confirmHint":"Il modello viene interpellato <0>solo</0> quando la regione è già cambiata abbastanza da ribaltare la risposta: circa due volte a settimana per un bidone, non una volta al minuto. Ragiona sull'oggetto e non sui pixel, quindi pioggia, ombre e un bidone spostato non contano più come la cosa portata via. Se non è raggiungibile, il cambiamento viene trattenuto invece di essere annunciato."},"clipBandBar":{"eventsDensity":"Eventi · densità"},"clipPanel":{"quality":"Qualità","preparing":"Preparazione della clip: il file viene recuperato e mutato una sola volta…","prepareFailed":"Impossibile preparare questa clip","download":"Scarica questa clip","noReasonGiven":"nessun motivo indicato","servedFallback":"Servito lo stream <0>{{served}}</0>: questa clip non ha una versione {{profile}}."},"clipTile":{"loadingStill":"Caricamento dell'anteprima","recording":"Registrazione…","notPlayable":"Non riproducibile: {{reason}}","noReason":"la sorgente non ha indicato un motivo","refusal":{"sleeping":"La telecamera è in sospensione: un’immagine fissa la sveglierebbe","no_keyframe":"Nessun fotogramma decodificabile in questa finestra","unsupported":"Questa sorgente non può produrre immagini fisse","queue_full":"In attesa della telecamera: la coda delle immagini fisse è piena","camera_backoff":"La telecamera è in pausa dopo il rifiuto: nuovo tentativo a breve","no_catalog_row":"Questa clip non è più nel catalogo","unknown_device":"Questa telecamera non è gestita qui","uid_missing":"L’ID della telecamera non è ancora noto","camera_refused":"La telecamera ha rifiutato: {{reason}}"},"noStill":"Questa clip non ha un’immagine fissa e non ne ha offerta una"},"clipsSection":{"asking":"Verifica nel registro se questo cluster fornisce clip…","unknownTitle":"Sorgenti clip sconosciute","absentTitle":"Nessun fornitore di videoclip in questo cluster","clips":"Clip","source":"Sorgente","oneProvider":"Al momento questa telecamera è associata a un solo fornitore di clip.","expand":"Espandi alla finestra visibile","tooWideTitle":"Questo periodo è troppo ampio per essere elencato","listFailed":"Impossibile leggere l'elenco delle clip","silentSources_one":"Una sorgente non ha contribuito con nulla a questo elenco","silentSources_other":"{{count}} sorgenti non hanno contribuito con nulla a questo elenco","intro":"Tutte le sorgenti di questa telecamera, affiancate: le registrazioni di CamStack e ciò che la telecamera o un'esportazione conserva per conto proprio. Una sorgente è elencata perché esiste, non perché è stata attivata qui; scegli le sorgenti per restringere la vista.","periodHint":"L'elenco segue il periodo selezionato nella barra temporale qui sotto, il controllo della sezione registrazioni. Riduci lo zoom per ampliarlo, trascina o scegli un giorno per spostarlo, clicca una barra di densità per restringerlo a quella finestra.","unknownMessage":"Il registro delle capability non è raggiungibile, quindi non si sa se questa telecamera abbia sorgenti di clip: non significa che manchino.","absentDescription":"Non è installato nulla in grado di elencare le clip archiviate di una telecamera.","tooWideMessage":"{{band}} copre {{days}} giorni locali, mentre l'elenco delle clip viene richiesto un giorno locale alla volta, al massimo {{max}}. Non è stato richiesto nulla: restringi la fascia e l'elenco la segue.","loadingFor":"Caricamento delle clip per {{band}}…","noSourceAnswered":"Nessuna sorgente ha potuto rispondere per {{band}}","noClips":"Nessuna clip in {{band}}","asked":"Interpellate: {{sources}}.","itemNoun":"clip"},"configFormField":{"selectNode":"Seleziona nodo…","test":"Prova","remove":"Rimuovi","loadingOptions":"Caricamento opzioni…","select":"— Seleziona —","auto":"Auto","clickToSet":"{{label}} — clicca per impostare manualmente","decreaseBy":"Diminuisci di {{step}}","decrement":"Diminuisci","increaseBy":"Aumenta di {{step}}","increment":"Aumenta","resetTo":"Ripristina a {{label}}","searchOrAdd":"Cerca o aggiungi…","nodeOffline":"{{name}} (offline)","noEntries":"Nessuna voce","minRows_one":"È richiesta almeno {{count}} riga","minRows_other":"Sono richieste almeno {{count}} righe","removeRow":"Rimuovi questa riga","add":"Aggiungi","limit":"(limite: {{max}})","processing":"Elaborazione...","fillPrerequisites":"Compila prima i campi richiesti qui sopra.","noOptions":"Nessuna opzione restituita.","working":"Operazione in corso…","probeNoResult":"Il gestore del test non ha restituito alcun risultato","row":"Riga {{n}}"},"confirmActionButton":{"cancel":"Annulla","defaultTitle":"Conferma azione"},"copyButton":{"copied":"Copiato","copy":"Copia {{what}}","value":"valore"},"devShell":{"devMode":"MODALITÀ SVILUPPO","logout":"Esci","themeDark":"Scuro","themeLight":"Chiaro","themeSystem":"Sistema","theme":"Tema: {{mode}}"},"deviceActivityPanel":{"logs":"Log","events":"Eventi","state":"Stato"},"alarmHeroCard":{"disarm":"Disattiva","alarmMode":"Modalità allarme","dismiss":"Chiudi","modeHome":"Casa","modeAway":"Fuori casa","modeNight":"Notte","modeVacation":"Vacanza","modeBypass":"Esclusione","stateDisarmed":"Disattivato","stateArmedHome":"Attivo (casa)","stateArmedAway":"Attivo (fuori casa)","stateArmedNight":"Attivo (notte)","stateArmedVacation":"Attivo (vacanza)","stateArmedBypass":"Attivo (con esclusioni)","stateArming":"Attivazione…","stateDisarming":"Disattivazione…","statePending":"In attesa","stateTriggered":"Scattato"},"deviceControlAtoms":{"decrement":"Diminuisci","increment":"Aumenta"},"brightnessPanel":{"brightness":"Luminosità"},"climatePanel":{"decreaseTarget":"Diminuisci target","increaseTarget":"Aumenta target","mode":"Modalità","low":"Min","targetLow":"Target minimo","high":"Max","targetHigh":"Target massimo","fan":"Ventola","fanMode":"Modalità ventola","preset":"Preset","humidity":"Umidità","targetHumidity":"Umidità target"},"coverHeroCard":{"open":"Apri","stop":"Stop","close":"Chiudi","position":"Posizione","tilt":"Inclinazione","tiltPosition":"Posizione inclinazione","dragToSet":"Trascina per impostare la posizione","openWord":"aperto"},"coverPanel":{"open":"Apri","stop":"Stop","close":"Chiudi","position":"Posizione"},"dummyHeroCard":{"comingSoon":"Controlli in arrivo"},"imageControl":{"zoomOut":"Riduci zoom","zoomIn":"Aumenta zoom","resetZoom":"Reimposta zoom","close":"Chiudi","noImage":"Nessuna immagine","viewImage":"Visualizza immagine","image":"Immagine"},"lawnMowerControl":{"mow":"Falcia","pause":"Pausa","dock":"Base","startMowing":"Avvia taglio","mowing":"Taglio in corso","paused":"In pausa","docked":"In base","idle":"Inattivo","error":"Errore","unknown":"Sconosciuto","code":"Codice {{code}}"},"lightHeroCard":{"brightness":"Luminosità","colourTemperature":"Temperatura colore","on":"Acceso","off":"Spento"},"lockHeroCard":{"open":"Apri","openUnlatch":"Apri (sblocca il chiavistello)"},"offlineBadge":{"unavailable":"Non disponibile","lastSeen":"visto per ultimo {{when}}"},"scriptAutomationControls":{"automationEnabled":"Automazione abilitata","trigger":"Avvia","justNow":"adesso","minAgo":"{{count}} min fa","hAgo":"{{count}} h fa","stop":"Stop","run":"Esegui","running":"In esecuzione","idle":"Inattivo","neverRun":"mai eseguito","neverTriggered":"mai avviata","enabled":"Abilitata","disabled":"Disabilitata","runNow":"Esegui subito questa automazione"},"switchPanel":{"turnOff":"Spegni","turnOn":"Accendi"},"waterHeaterControl":{"operationMode":"Modalità di funzionamento","target":"Target: {{value}}","disableAway":"Disattiva modalità assenza","enableAway":"Attiva modalità assenza","awayOn":"Assenza attiva","awayOff":"Assenza disattivata"},"weatherControl":{"humidity":"Umidità","wind":"Vento","pressure":"Pressione","sunny":"Soleggiato","clearNight":"Notte serena","partlyCloudy":"Parzialmente nuvoloso","cloudy":"Nuvoloso","rainy":"Piovoso","pouring":"Pioggia battente","snowy":"Nevoso","sleet":"Nevischio","lightning":"Fulmini","thunderstorm":"Temporale","fog":"Nebbia","windy":"Ventoso","hail":"Grandine","exceptional":"Eccezionale","unknown":"Sconosciuto"},"adminLinkQuickAction":{"open":"Apri {{label}} per questo dispositivo"},"childrenAccordion":{"adoptedDevices":"Dispositivi adottati","accessories":"Accessori","online":"Online","offline":"Offline","awaitingState":"In attesa dello stato…","turnOff":"Spegni","turnOn":"Accendi","motionTriggerOn":"Trigger di movimento: attivo (clicca per disattivare)","motionTriggerOff":"Trigger di movimento: disattivo (clicca per attivare)"},"deviceDeleteAction":{"title":"Eliminare il dispositivo?","message":"Verrà rimosso \\"{{label}}\\" insieme a tutte le sue impostazioni. L'azione non può essere annullata.","confirm":"Elimina","deleteDevice":"Elimina dispositivo"},"deviceItemFeatures":{"adoptedAndAccessories_one":"{{adopted}} adottati · {{count}} accessorio","adoptedAndAccessories_other":"{{adopted}} adottati · {{count}} accessori","adopted":"{{count}} adottati","accessories_one":"{{count}} accessorio","accessories_other":"{{count}} accessori","features":"Funzionalità","markerTitle":"Indicatore informativo (nessuna capability registrata)","marker":"indicatore"},"deviceItemHeader":{"collapseChildren":"Comprimi elementi figli","expandChildren":"Espandi elementi figli","openParent":"Apri il genitore: {{name}} (#{{id}})","under":"Sotto: {{name}}"},"rebootQuickAction":{"rebootDevice":"Riavvia dispositivo","rebootDeviceQuestion":"Riavviare il dispositivo?","cancel":"Annulla","reboot":"Riavvia","description":"{{deviceName}} verrà riavviato e potrebbe non essere disponibile per qualche istante."},"pageSizeSelect":{"perPage":"Per pagina","all":"Tutti"},"pagination":{"previous":"Pagina precedente","next":"Pagina successiva","showing":"Visualizzati {{start}}–{{end}} di {{total}} {{noun}}","devices":"dispositivi"},"deviceListEmptyState":{"clearFilters":"Cancella filtri","noDevices":"Ancora nessun dispositivo","noMatch":"Nessun dispositivo corrisponde ai filtri attuali","loadingIntegrations":"Caricamento integrazioni…"},"genericModeList":{"loading":"Caricamento…","total":"{{count}} in totale","rowsPerPage":"Righe per pagina"},"deviceModeList":{"done":"Fine","select":"Seleziona","deviceCount_one":"{{count}} dispositivo","deviceCount_other":"{{count}} dispositivi","devicesPerPage":"Dispositivi per pagina","showingFiltered_one":"Visualizzati {{shown}} di {{count}} dispositivo · filtrati per <0>{{names}}</0>","showingFiltered_other":"Visualizzati {{shown}} di {{count}} dispositivi · filtrati per <0>{{names}}</0>","showing_one":"Visualizzati {{shown}} di {{count}} dispositivo","showing_other":"Visualizzati {{shown}} di {{count}} dispositivi","searchPlaceholder":"Cerca per nome o stableId","searchAria":"Cerca dispositivi per nome o stableId"},"devicePicker":{"nounCamera":"telecamera","nounDevice":"dispositivo","nounNode":"nodo","nounPackage":"pacchetto","nounClass":"classe","nounZone":"zona","nounFace":"volto","nounCalendar":"calendario","pluralCameras":"telecamere","pluralDevices":"dispositivi","pluralNodes":"nodi","pluralPackages":"pacchetti","pluralClasses":"classi","pluralZones":"zone","pluralFaces":"volti","pluralCalendars":"calendari","nodeUnknown":"Nodo {{id}} — sconosciuto all'hub","nodeId":"Nodo {{id}}","packageNotInstalled":"{{id}} — non installato","classNotListed":"{{id}} — non presente nell'elenco delle classi","zoneNotFound":"{{id}} — zona non trovata","zoneUnavailable":"{{id}} — zona non disponibile","faceNotInGallery":"{{id}} — non presente nella galleria dei volti","calendarNotFound":"{{id}} — calendario non trovato","deviceRemoved":"Dispositivo #{{id}} — rimosso","deviceId":"Dispositivo #{{id}}","widenWarning":"Nessun elemento selezionato ({{noun}}): la regola si applicherà a TUTTI ({{plural}}).","loading":"Caricamento ({{noun}})…","failed":"L'hub non ha restituito l'elenco ({{noun}}): gli elementi selezionati sono mostrati per id così da poter essere comunque rimossi.","all":"Tutti","clear":"Cancella","noneAvailable":"Nessun elemento disponibile ({{plural}}).","noCamerasAvailable":"Nessuna telecamera disponibile: la regola si applica a tutti i dispositivi.","noneAvailableAll":"Nessun elemento disponibile ({{plural}}): la regola si applica a ogni {{noun}}.","alreadyAdded":"Già aggiunto","everyNoRestriction":"Ogni {{noun}} — nessuna restrizione","noneSelected":"Nessuna selezione","moreChips":"+{{count}} altri","showFewer":"Mostra meno","done":"Fine","addPlural":"Aggiungi ({{plural}})…","edit":"Modifica…","searchDevice":"Cerca per nome, stanza o tipo…","searchClass":"Cerca per classe o categoria…","searchZone":"Cerca per telecamera o zona…","searchDefault":"Cerca per nome o id…","searchDevices":"Cerca dispositivi","searchPlural":"Cerca ({{plural}})","shownOf":"{{shown}} di {{total}} mostrati · {{selected}} selezionati","noDeviceMatches":"Nessun dispositivo corrisponde.","noNounMatches":"Nessun elemento corrisponde ({{noun}}).","showMore":"Mostra altri {{count}} (ne restano {{left}})","hiddenSelected":"{{count}} selezionati nascosti dai filtri","noZone":"Nessuna zona","noLocation":"Nessuna posizione","noRoom":"Nessuna stanza","parentDetail":"in {{parent}}","shownOfSingle":"{{shown}} di {{total}} mostrati"},"deviceFilterBar":{"groupBy":"Raggruppa per","resetFilters":"Reimposta filtri","zoneFilterPaused":"Filtro zone in pausa: zone non caricate","noType":"Nessun tipo","noZone":"Nessuna zona","noLocation":"Nessuna posizione","zone":"Zona","location":"Posizione","none":"Nessuno","type":"Tipo","all":"Tutti","nSelected":"{{count}} selezionati","loadingZones":"caricamento zone…","zonesUnavailable":"zone non disponibili","zonesLoadingNote":"Caricamento zone: per ora raggruppate per posizione","zonesUnavailableNote":"Zone non disponibili: raggruppate per posizione"},"doorbellRecentPanel":{"recentPresses":"Pressioni recenti","justNow":"adesso","minutesAgo":"{{count}} min fa","hoursAgo":"{{count}} h fa","daysAgo":"{{count}} g fa"},"filterBar":{"filters":"Filtri","search":"Cerca..."},"associationSlotCard":{"noDevicesPicked":"Nessun dispositivo scelto.","alwaysLinked":"Sempre collegati (albero dei dispositivi):","alwaysLinkedAria":"Sempre collegati","produceTracked":"Produci eventi tracciati su questa telecamera (facoltativo):","edit":"Modifica","pickedDevices":"Dispositivi scelti","loadingCandidates":"Caricamento candidati…","suggested":"Suggeriti: vengono aggiunti solo se li selezioni:","suggestions":"Suggerimenti","searchDevices":"Cerca dispositivi","searchPlaceholder":"Cerca dispositivi per nome, posizione o tipo","searchResults":"Risultati della ricerca","cancel":"Annulla","save":"Salva","healthOk":"OK","healthMissing":"Mancante","healthForeign":"Altro proprietario","healthUnavailable":"Sorgente non valida","deviceN":"Dispositivo {{id}}","trackedEvents":"Eventi tracciati","active":"Attivo","inactive":"Inattivo","unknown":"Sconosciuto","setBy":"impostato da {{authority}}","originImplied":"sempre collegato","originNotLinked":"non più collegato: deseleziona per rimuovere","trackedFrom":"Eventi tracciati da {{name}}","storedIn":"Memorizzato in {{authority}}","removeN":"Rimuovi {{name}}","candidatesError":"Impossibile leggere i candidati: {{message}}","addN":"Aggiungi {{name}}","inParent":"in {{name}}","notSaved":"Non salvato: {{reason}}"},"extensionsPanel":{"unknownTitle":"Impossibile leggere le estensioni","none":"Nessuna estensione disponibile su questo dispositivo.","filteredToNothing":"Nessuna di queste estensioni è disponibile su questo dispositivo.","unknownSlot":"Slot sconosciuto","unreachable":"Non raggiungibile","unreachableHint":"Le estensioni di questo componente restano sconosciute finché non risponde.","title":"Estensioni","unknownMessage":"Non si sa ancora nulla delle estensioni di questo dispositivo: {{reason}}","loading":"Caricamento delle estensioni di questo dispositivo…","disagree":"L'interfaccia di amministrazione e il server non concordano: il server offre uno slot che questa interfaccia non conosce. Aggiorna l'interfaccia o il server."},"logStream":{"logs":"Log","searchPlaceholder":"Cerca…","clearSearch":"Cancella ricerca","close":"Chiudi","addon":"Addon:","device":"Dispositivo:","jumpTitle":"Vai all'ultima riga di log e riprendi a seguire","jumpToLatest":"Vai all'ultima","loading":"Caricamento log...","noLogs":"Nessun log trovato","copyRow":"Copia questa riga","scopeAgent":"agent","scopeAddon":"addon","scopeDevice":"dispositivo","following":"In seguimento","paused":"In pausa","collapse":"Comprimi","expand":"Espandi","copied":"Copiato!","copy":"Copia","clear":"Cancella","live":"+{{count}} live","all":"tutti","deviceTitle":"dispositivo {{id}}","source":"Sorgente log","sourceName":"Sorgente: {{name}}","searching":"Ricerca nei log più vecchi… ({{mb}} MB analizzati)","cancel":"Annulla","retry":"Riprova","beginning":"Inizio dei log","loadOlder":"Carica più vecchi"},"modelBoundSlider":{"resetToDefault":"Ripristina il valore predefinito del modello","resetThresholds":"Ripristina le soglie ai valori predefiniti del modello","sourceOverride":"Valore personalizzato per questo modello","sourceModelDefault":"Predefinito del modello","sourceGlobalDefault":"Predefinito: non calibrato per questo modello","staleOverride":"Il valore personalizzato {{value}} era stato impostato per {{modelId}} e non si applica a questo modello."},"networkLinkBadge":{"ethernet":"Rete: ethernet","typeSsid":"Rete: {{type}} ({{ssid}})","type":"Rete: {{type}}","signal":"segnale {{percent}}%"},"notificationTargetsField":{"loading":"Caricamento destinazioni…","defaultEmpty":"Nessuna destinazione di consegna configurata. Aggiungine una nella scheda Destinazioni: senza, la notifica viene generata e poi scartata.","note":"nota","select":"Seleziona…","searchTargets":"Cerca destinazioni…","loadError":"Impossibile caricare le destinazioni: {{message}}","noneConfigured":"Nessuna destinazione di consegna configurata. Aggiungine una prima in Centro notifiche → Destinazioni."},"pipelineBuilder":{"slotCropper":"Slot: ritaglio / classificatore","slotRecognizer":"Slot: riconoscitore","slotLabel":"Slot: {{label}}"},"pipelineRuntimeSelector":{"best":"Migliore"},"pipelineStep":{"model":"Modello","default":"predefinito","noEffect":"Nessun effetto con il modello selezionato: {{reason}}"},"rootModelSource":{"notProduced":"Non prodotte da questo modello: {{classes}}.","packageNote":"I riquadri dei pacchi del modello radice diventano il risultato dei pacchi alla soglia di questo passo; la vista ritagliata per zona di questo passo non viene usata, quindi i pacchi piccoli che il modello a tutto fotogramma non vede restano non rilevati.","labelNote":"L'elenco delle classi di questo passo decide quali etichette della radice diventano la classe fine; una classe disattivata resta alla sua macro-classe.","maskNote":"Le maschere provengono dal modello radice: ogni rilevamento porta la maschera di istanza della radice, quindi il modello di questo passo non viene eseguito. Una maschera della radice segue la griglia del modello (un quarto del suo input), più grossolana della maschera per ritaglio di questo passo.","faceNote":"I riquadri dei volti provengono dal modello radice. Ognuno viene ricercato dal rilevatore di volti di questo passo in un quadrato attorno prima del riconoscimento: solo un volto che trova viene riconosciuto, un riquadro senza volto viene scartato.","plateNote":"I riquadri delle targhe provengono dal modello radice e il lettore di targhe li legge. Il margine di ritaglio attorno a un riquadro targa della radice non è ancora stato misurato per questo modello.","inactiveTooSmall":"il modello radice attuale ({{name}}) vede il fotogramma troppo piccolo per trovare i volti in modo affidabile (serve un input di almeno 640 px).","inactiveCannot":"il modello radice attuale ({{name}}) non può fornirlo.","inactive":"Usa il modello radice: inattivo — {{reason}} Il passo esegue il proprio modello.","use":"Usa il modello radice ({{name}})"},"addProviderEntryDialog":{"providerType":"Tipo di provider","name":"Nome","cancel":"Annulla","create":"Crea","title":"Aggiungi voce provider","description":"Scegli un tipo di provider e assegna un nome a questo insieme di credenziali.","noTypes":"Nessun tipo di provider è ancora disponibile. Installa prima un addon provider di training.","namePlaceholder":"Produzione"},"snapshotButton":{"snapshot":"Istantanea","title":"Clic per scaricare · pressione prolungata per copiare"},"scopePicker":{"automatic":"Automatico (eredita dalla visualizzazione)","alwaysIncluded":"Sempre inclusi","neverIncluded":"Mai inclusi","accessView":"Visualizza","accessViewHint":"Sola lettura: query e sottoscrizioni","accessCreate":"Crea","accessCreateHint":"Mutazioni che creano o aggiornano","accessDelete":"Elimina","accessDeleteHint":"Operazioni distruttive (elimina/revoca/reimposta/…)","notGranted":"{{hint}} — non concesso dal tuo ambito","linkedDevices":"Dispositivi collegati","pickType":"— scegli {{type}} —","removeScope":"Rimuovi ambito","addScope":"Aggiungi ambito","pickTarget":"Ambito {{type}}: scegli una destinazione","pickAccess":"Ambito {{type}}:{{target}}: scegli almeno un accesso","pickDevice":"Ambito dispositivo: scegli almeno un dispositivo","pickDeviceType":"Ambito dispositivo: scegli almeno un tipo di dispositivo","pickRoom":"Ambito dispositivo: scegli almeno una stanza"},"stateValuesStream":{"state":"Stato","pickCaps":"Scegli le capability da mostrare","resetFilters":"Reimposta filtri","reset":"Reimposta","copyTitle":"Copia lo stato visibile come JSON","search":"Cerca…","clearSearch":"Cancella ricerca","rereadTitle":"Rileggi lo stato grezzo a monte","refresh":"Aggiorna","noRawState":"Nessuno stato grezzo","loading":"Caricamento stato del dispositivo...","noRuntimeState":"Nessuno stato di runtime","noCapsMatch":"Nessuna capability corrisponde al filtro","noMatches":"Nessuna corrispondenza","filterAll":"Tutte","scopeDevice":"dispositivo","filter":"Filtro ({{label}})","copied":"Copiato!","copy":"Copia","live":"live","source":"sorgente: {{source}}","normalized":"Normalizzato","raw":"Grezzo","keys_one":"{{count}} chiave","keys_other":"{{count}} chiavi","updated":"aggiornato {{age}}","emptySlice":"sezione vuota","emptyArray":"array vuoto","emptyObject":"oggetto vuoto","justNow":"adesso","secondsAgo":"{{count}} s fa","minutesAgo":"{{count}} min fa","hoursAgo":"{{count}} h fa","filterCaps":"Filtra capability…","all":"Tutte","none":"Nessuna","defaults":"Predefinite"},"gateControl":{"zones":"Zone","zoneDrivenTitle":"Viene eseguito dove questa telecamera ha zone pacco: si imposta nella scheda Zone","runsOnCamera":"Eseguito su questa telecamera","catalogDefault":"Predefinito del catalogo: {{state}}","on":"attivo","off":"disattivo","autoLabel":"Auto","onLabel":"On","offLabel":"Off","defaultState":"predefinito: {{state}}","zonesBadge":"zone","setForCamera":"Impostato per questa telecamera","catalogDefaultTitle":"Predefinito del catalogo"},"stepModelRow":{"reset":"Reimposta","changeModelFor":"Cambia modello per {{label}}","done":"Fine","change":"Cambia","route":"Instrada"},"stepTimings":{"timings":"Tempi","total":"Totale"},"stepDetailDock":{"steps":"Passi"},"streamDebugOverlay":{"waiting":"in attesa della prima risposta…","sessionNotFound":"sessione non trovata sul server: è terminata oppure questo nodo non l'ha mai avuta","yes":"sì","no":"no","msAgo":"{{value}} ms fa","sAgo":"{{value}} s fa","msAgoLong":"{{minutes}} min {{seconds}} s fa","staleUpper":"OBSOLETO","stale":"obsoleto","candidatePair":"coppia di candidati","notWired":"non collegato su questa superficie: questo player è stato montato senza <0>getSessionDebug</0>, quindi non si può interrogare il lato server","servedRung":"livello servito","sourceKind":"tipo di sorgente","ingestNode":"nodo di ingresso","remote":"· remoto","egressLeg":"tratta in uscita","bitrate":"· bitrate","inputFps":"· fps in ingresso","trackMode":"modalità traccia","ladderMove":"spostamento di livello","when":"· quando","tierFailures":"errori di livello","held":"trattenuto","neverMoved":"mai spostato"},"timezoneSelector":{"select":"— Seleziona fuso orario —"},"sendFrameToTraining":{"theCollection":"la raccolta","playFirst":"Riproduci prima una registrazione: viene inviato il fotogramma alla posizione di riproduzione","addFrame":"Aggiungi il fotogramma alla posizione di riproduzione a una raccolta di training","button":"Invia fotogramma al training","title":"Invia questo fotogramma al training","description":"Il fotogramma della telecamera alle {{time}} viene prelevato dalla registrazione a piena risoluzione e aggiunto alla raccolta. Annotalo nella pagina Riaddestramento, inclusi gli elementi che il modello ha mancato.","reused":"Quel momento era già nel dataset; ora è in {{collection}}.","added":"Aggiunto a {{collection}}.","done":"Fine","cancel":"Annulla","send":"Invia"},"trainingCollectionPicker":{"create":"Crea","collection":"Raccolta","choose":"Scegli una raccolta…","reading":"Lettura delle raccolte…","none":"Nessuna raccolta: creane una.","newName":"Nome della nuova raccolta","newPlaceholder":"Nuova raccolta (es. mancati di notte)","emptyName":"Dai un nome alla raccolta.","duplicateName":"Esiste già una raccolta con questo nome."},"floatingPanel":{"restore":"Ripristina","minimize":"Riduci a icona","close":"Chiudi"},"runReport":{"hubCandidates":"Candidati dell'hub","timeline":"Timeline","path":"Percorso","media":"Media","flagPublicPath":"ha un percorso pubblico (srflx / relay / host pubblico)","flagPrivateOnly":"solo LAN/Tailscale, nessun srflx/relay","flagNone":"ha risposto senza candidati","flagUnknown":"nessuna risposta ricevuta","unknown":"sconosciuto","none":"nessuno","offered":"Offerti","source":"Origine","sourceCounts":"{{sdp}} nell'SDP di risposta · {{trickled}} in trickle","gatheringDone":"raccolta completata","firstFrame":"Primo fotogramma","selectedPair":"Coppia selezionata","browserOffered":"Offerti dal browser","relayOver":"relay su {{protocols}}","hubSent":"Inviato dall'hub","rtpPackets":"{{value}} pacchetti RTP","browserGot":"Ricevuto dal browser","packets":"{{value}} pacchetti","framesDecoded":"Fotogrammi decodificati","lossFreezes":"Perdita · blocchi","reconnects":"Riconnessioni del player: {{count}}","playerError":"Errore del player: {{message}}","serverDebug":"Debug del server: {{message}}","sessions":"Sessioni: {{ids}} · {{seconds}} s","pairType":"{{type}} (locale/remoto)"},"streamPanel":{"intercom":"Interfono","forceRefresh":"Forza aggiornamento istantanea","snapshot":"Istantanea","moreControls":"Altri controlli","input":"Ingresso","uptime":"Tempo di attività","bitrate":"Bitrate","phase":"Fase","detection":"Rilevamento","inference":"Inferenza","noSnapshot":"Nessuna istantanea disponibile","retry":"Riprova","playLive":"Riproduci live","closeIntercom":"Chiudi interfono","openIntercom":"Apri interfono","returnToLive":"Torna al live","stopStream":"Ferma stream","startStream":"Avvia stream","live":"Live","stop":"Stop","play":"Riproduci","active":"Attiva","watching":"In osservazione","showDetections":"Mostra rilevamenti","moving":"…in movimento","stationary":"…fermi","showMotion":"Mostra movimento","ptzControls":"Controlli PTZ","cameraSnapshot":"Istantanea della telecamera"},"addonGlobalSettingsForm":{"hide":"nascondi","edit":"modifica"},"humidifierControl":{"targetWord":"obiettivo"},"pipelineMatrixShared":{"offWord":"spento"},"endpointTestCard":{"authWord":"auth"},"roleNodePill":{"pinned":"fissato"},"deviceMeta":{"type":{"camera":"Telecamera","hub":"Hub","light":"Luce","siren":"Sirena","switch":"Interruttore","sensor":"Sensore","thermostat":"Termostato","climate":"Condizionatore","button":"Pulsante","eventEmitter":"Emettitore di eventi","update":"Aggiornamento","generic":"Generico","notifier":"Notificatore","script":"Script","automation":"Automazione","lock":"Serratura","cover":"Copertura","valve":"Valvola","humidifier":"Umidificatore","waterHeater":"Scaldabagno","fan":"Ventilatore","mediaPlayer":"Lettore multimediale","alarmPanel":"Pannello allarme","control":"Controllo","presence":"Presenza","weather":"Meteo","vacuum":"Aspirapolvere","lawnMower":"Tagliaerba","container":"Contenitore","image":"Immagine","petFeeder":"Distributore di cibo per animali","dishwasher":"Lavastoviglie","washer":"Lavatrice","dryer":"Asciugatrice"},"role":{"siren":"Sirena","floodlight":"Faro","spotlight":"Faretto","pirSensor":"Sensore PIR","chime":"Campanello","autotrack":"Auto-tracking","nightvision":"Visione notturna","privacyMask":"Maschera privacy","doorbell":"Campanello video","binaryHelper":"Helper binario","outlet":"Presa","motionSensor":"Sensore di movimento","contactSensor":"Sensore di contatto","leakSensor":"Sensore di perdite","smokeSensor":"Sensore di fumo","cOSensor":"Sensore di CO","gasSensor":"Sensore di gas","tamperSensor":"Sensore antimanomissione","vibrationSensor":"Sensore di vibrazione","connectivitySensor":"Connettività","soundSensor":"Sensore acustico","binarySensor":"Sensore binario","temperatureSensor":"Temperatura","humiditySensor":"Umidità","ambientLightSensor":"Luce ambientale","pressureSensor":"Pressione","windSensor":"Vento","rainSensor":"Pioggia","uvSensor":"Indice UV","solarRadiationSensor":"Radiazione solare","soilMoistureSensor":"Umidità del suolo","powerSensor":"Potenza","energySensor":"Energia","voltageSensor":"Tensione","currentSensor":"Corrente","airQualitySensor":"Qualità dell’aria","batterySensor":"Batteria","numericSensor":"Sensore numerico","enumSensor":"Sensore a stati","dateTimeSensor":"Data / ora","genericSensor":"Sensore","numericControl":"Controllo numerico","selectControl":"Controllo a selezione","textControl":"Controllo testo","dateTimeControl":"Controllo data / ora","mobilePushNotifier":"Push su mobile","messagingNotifier":"Messaggistica","emailNotifier":"Email","genericNotifier":"Notificatore","coverBlind":"Tapparella","coverShutter":"Persiana","coverAwning":"Tenda da sole","coverCurtain":"Tenda","coverGarage":"Porta del garage","coverGate":"Cancello","coverDoor":"Porta","coverWindow":"Finestra"},"noun":{"role":{"siren":"Sirena","floodlight":"Faro","spotlight":"Faretto","pirSensor":"PIR","chime":"Campanello","autotrack":"Auto-tracking","nightvision":"Notturna","privacyMask":"Privacy","doorbell":"Campanello video","coverBlind":"Tapparella","coverShutter":"Persiana","coverAwning":"Tenda da sole","coverCurtain":"Tenda","coverGarage":"Garage","coverGate":"Cancello","coverDoor":"Porta","coverWindow":"Finestra","binaryHelper":"Helper","outlet":"Presa","motionSensor":"Movimento","contactSensor":"Contatto","leakSensor":"Perdita","smokeSensor":"Fumo","cOSensor":"CO","gasSensor":"Gas","tamperSensor":"Manomissione","vibrationSensor":"Vibrazione","connectivitySensor":"Connettività","soundSensor":"Suono","binarySensor":"Binario","temperatureSensor":"Temperatura","humiditySensor":"Umidità","ambientLightSensor":"Luce","pressureSensor":"Pressione","windSensor":"Vento","rainSensor":"Pioggia","uvSensor":"Indice UV","solarRadiationSensor":"Radiazione solare","soilMoistureSensor":"Umidità del suolo","powerSensor":"Potenza","energySensor":"Energia","voltageSensor":"Tensione","currentSensor":"Corrente","airQualitySensor":"Qualità dell’aria","batterySensor":"Batteria","numericSensor":"Numerico","enumSensor":"Stato","dateTimeSensor":"Ora","genericSensor":"Sensore","numericControl":"Numero","selectControl":"Selezione","textControl":"Testo","dateTimeControl":"Ora","mobilePushNotifier":"Push","messagingNotifier":"Messaggistica","emailNotifier":"Email","genericNotifier":"Notificatore"},"type":{"camera":"Telecamera","hub":"Hub","light":"Luce","siren":"Sirena","switch":"Interruttore","sensor":"Sensore","thermostat":"Termostato","climate":"Condizionatore","button":"Pulsante","eventEmitter":"Evento","update":"Aggiornamento","generic":"Generico","notifier":"Notificatore","script":"Script","automation":"Automazione","lock":"Serratura","cover":"Copertura","valve":"Valvola","humidifier":"Umidificatore","waterHeater":"Scaldabagno","fan":"Ventilatore","mediaPlayer":"Lettore","alarmPanel":"Allarme","control":"Controllo","presence":"Presenza","weather":"Meteo","vacuum":"Aspirapolvere","lawnMower":"Tagliaerba","container":"Contenitore","image":"Immagine","petFeeder":"Distributore","dishwasher":"Lavastoviglie"},"fallback":"Dispositivo"}},"clipThumbnail":{"httpStatus":"HTTP {{status}}","noReason":"nessun motivo indicato"},"clipSource":{"state":{"ok":"In risposta","sleeping":"In sospensione: mostra il catalogo letto quando era attiva","unreachable":"Non raggiungibile: le sue clip mancano da questo elenco","no_storage":"Nessuna scheda di memoria: questa telecamera non conserva nulla di suo","index_empty":"Il calendario della telecamera segna questi giorni, ma il suo indice non elenca nulla"},"age":{"underMinute":"meno di un minuto fa","minutes":"{{count}} min fa","hours":"{{count}} h fa","days":"{{count}} g fa"}},"clipView":{"clipsFailed":"Impossibile leggere l’elenco delle clip","sourcesFailed":"Impossibile leggere l’elenco delle sorgenti"},"sessionVerdict":{"state":{"unknown":"sconosciuto"},"transport":{"noAnswer":"ICE {{state}}; l’hub non ha mai risposto all’offerta, quindi non è stato visto alcun candidato dell’hub","noCandidate":"ICE {{state}}; l’hub ha risposto ma non ha offerto alcun candidato","relayPrivateOnly":"ICE {{state}}; questo browser era limitato ai candidati TURN relay e l’hub ha offerto solo indirizzi LAN/Tailscale (nessun srflx/relay): un client in relay non può raggiungerlo","privateOnly":"ICE {{state}}; l’hub ha offerto solo indirizzi LAN/Tailscale (nessun srflx/relay): raggiungibile solo dall’interno di quelle reti","noPair":"ICE {{state}}; nessuna coppia di candidati tra questo browser e l’hub ha avuto successo","title":"Trasporto (ICE) non riuscito"},"mediaUnknown":{"title":"Media sconosciuto","detail":"il browser non ha riportato statistiche sul video in ingresso"},"nothingReceived":{"title":"Nulla ricevuto","detail":"il browser non ha ricevuto pacchetti e il conteggio dell’hub è sconosciuto"},"blackHole":{"title":"Buco nero dei media","detail":"l’hub ha inviato {{sent}} pacchetti RTP e questo browser non ne ha ricevuto nessuno: i media si perdono tra i due dopo il DTLS"},"hubNotSending":{"title":"L’hub non invia","detail":"la sessione è connessa ma l’hub non ha inviato RTP: la sorgente o il broker non sta producendo"},"decodeUnknown":{"title":"Decodifica sconosciuta","detail":"i pacchetti arrivano; il browser non ha riportato il conteggio di decodifica"},"lossKeyframe":{"title":"Perdita / dimensione keyframe","noFrame":"i pacchetti arrivano ma nessun fotogramma è stato decodificato: un keyframe non si completa mai su questo percorso","lossy":"i fotogrammi vengono decodificati ma il percorso perde pacchetti: {{signals}}"},"signals":"{{pli}} PLI, {{freezes}} blocchi, {{loss}} di perdita","decoding":{"title":"Decodifica in corso","detail":"i fotogrammi vengono decodificati; il browser non ha riportato segnali di perdita da valutare"},"healthy":{"title":"Funzionante","detail":"connesso, in ricezione e in decodifica: {{signals}}"},"dtls":{"title":"DTLS bloccato (lato hub)","detail":"ICE connesso ma il DTLS è rimasto {{state}}: l’hub non ha mai completato l’handshake"}},"phase":{"idle":"Inattiva","active":"Attiva","watching":"In controllo","loadShed":"Riduzione carico","paused":"In pausa"},"statusDot":{"disabled":"Disattivato","online":"Online","recordingAlways":"Registrazione · sempre","recordingMotion":"Registrazione · al movimento","offline":"Offline","offlineLastSeen":"Offline · visto {{lastSeen}}"},"lastSeen":{"justNow":"adesso","minutes":"{{count}}m fa","hours":"{{count}}h fa","days":"{{count}}g fa"},"natMapping":{"needTwo":"servono due destinazioni STUN per il confronto; ne è stata interrogata solo una","noSrflx":"nessun candidato server-reflexive: STUN non raggiungibile o bloccato da questo browser","symmetric":"un socket locale ha ottenuto {{count}} mappature pubbliche diverse — NAT simmetrico: solo un relay TURN raggiunge questo browser","confirmedSame":"due destinazioni STUN hanno visto la stessa mappatura pubblica","likelySame":"una sola mappatura pubblica sulle destinazioni STUN (il browser scarta un secondo candidato identico, quindi la seconda risposta non si distingue dall’assenza di risposta)"},"hlsQuality":{"level":"Livello {{n}}","auto":"Auto"},"pipelineMirror":{"noSource":"nessuna voce di origine","notInCatalog":"addon assente dal catalogo di destinazione","noModel":"nessun modello compatibile con il formato di destinazione"},"sensor":{"presence":{"home":"A casa","away":"Fuori casa"}},"providerEntryPills":{"status":{"ok":"OK","warning":"Avviso","error":"Errore","unknown":"Sconosciuto"},"addProvider":"Aggiungi provider"},"configSecretField":{"removedOnSave":"Verrà rimosso al salvataggio","cannotReveal":"Questo valore salvato non può essere mostrato qui: digita per sostituirlo"},"extensions":{"requestFailed":"la richiesta non è riuscita"},"dataRecords":{"actionColumn":"Azioni","badgeEntry":"Voce","badgeRecord":"Record","clearFilters":"Azzera filtri","colClass":"Classe","colDatabase":"DB","colKind":"Tipo","colRows":"Righe","colSize":"Dim. stimata","colState":"Stato","colType":"Natura","contentsEmpty":"Vuoti","contentsHasRows":"Con righe","contentsUnknown":"Conteggio sconosciuto","entryKindMissing":"Questo tipo di voce non è servito dal servizio delle voci.","entryKindsFailed":"Impossibile caricare i tipi di voce","facetClass":"Classe","facetContents":"Contenuto","facetDatabase":"Database","facetKind":"Tipo","facetOwner":"Proprietario","facetState":"Stato","facetType":"Natura","facetsLabel":"Filtra i tipi di record","kindsFailed":"Impossibile caricare i tipi di record","manage":"Gestisci","noKindsDescription":"Nessun addon ha ancora dichiarato un tipo di record su questo hub.","noKindsTitle":"Nessun tipo di record","noMatch":"Nessun tipo corrisponde al filtro","search":"Cerca tipi…","searchLabel":"Cerca tipi di record","typeEntry":"Voci (modificabili)","typeRecord":"Record (sola lettura)","viewRows":"Vedi righe"},"charts":{"noState":"nulla di registrato","stateSummary":"{{title}}, da {{from}} a {{to}}: {{parts}}","loading":"Caricamento…","empty":"In questa finestra non è stato registrato nulla.","unknown":"sconosciuto","seriesSummaryNoRange":"{{title}}: {{parts}}","seriesSummary":"{{title}}, da {{from}} a {{to}}: {{parts}}","barSummary":"{{title}}, da {{from}} a {{to}}: totale {{total}}","total":"Totale {{value}}"},"history":{"window":"Finestra temporale","window24h":"24 h","window7d":"7 g","window30d":"30 g","window1y":"1 a","windowCustom":"Personalizzata","from":"Da","to":"A","compare":"Confronta con il periodo precedente","presenceUnknownTitle":"Impossibile raggiungere l’hub","presenceUnknown":"L’hub non ha detto se la cronologia dei dispositivi è installata. Riprova tra poco.","absentTitle":"La cronologia dei dispositivi non è attiva su questo hub","absent":"Non viene registrato nulla finché l’addon di sistema device-history non è abilitato.","listFailedTitle":"Impossibile leggere la cronologia","emptyTitle":"Ancora nulla di registrato per questo dispositivo","empty":"Un valore compare qui appena cambia, o al prossimo controllo ogni cinque minuti.","showHidden_one":"Mostra {{count}} grafico nascosto","showHidden_other":"Mostra {{count}} grafici nascosti","chartCount_one":"{{count}} grafico","chartCount_other":"{{count}} grafici","chartMenu":"Azioni del grafico","openInHistory":"Apri in Cronologia","hide":"Nascondi","state":{"open":"aperto","closed":"chiuso","online":"online","offline":"offline","detected":"rilevato","clear":"libero","on":"acceso","off":"spento"},"previousOf":"{{label}} (periodo precedente)","wholeFrame":"Inquadratura intera","filterZone":"Zona","allZones":"Tutte le zone","filterClass":"Classe","allClasses":"Tutte le classi","readFailed":"Impossibile leggere questa cronologia: {{error}}"},"consumableLevel":{"ok":"OK","low":"Basso","empty":"Esaurito","full":"Pieno","unknown":"Sconosciuto"}}`),helpers:JSON.parse(`{"ruleFormParsers":{"immediate":"Immediato","immediateHint":"Scatta alla prima rilevazione corrispondente di una traccia (latenza minima).","trackEnd":"Fine traccia","trackEndHint":"Valuta il record definitivo della traccia quando si chiude.","deviceEvent":"Evento dispositivo","deviceEventHint":"Pressione del campanello, cambio di stato di un sensore o transizione di occupazione su un dispositivo collegato.","packageEvent":"Evento pacco","packageEventHint":"Consegna o ritiro di un pacco.","systemEvent":"Evento di sistema","systemEventHint":"L'installazione stessa: una telecamera o uno stream che va offline, un nodo che lascia il cluster, un aggiornamento di addon o server disponibile.","groupedHint":"Attende che i soggetti vengano riconosciuti, poi invia un solo messaggio con un mosaico, una foto per soggetto.","sec_all_label":"Tutte le regole","sec_all_blurb":"Ogni regola di notifica: produttori guidati da eventi e pianificati. Le schede filtrano questa stessa lista; scegli il tipo sotto Nuova regola quando crei da qui.","sec_all_new":"Nuova regola","sec_all_empty":"Nessuna regola per ora. Clicca \\"Nuova regola\\" e scegli un tipo (Rilevazione, Riepilogo, Eventi del calendario, …).","sec_detection_label":"Rilevazioni","sec_detection_blurb":"Regole guidate da ciò che le telecamere VEDONO: rilevazioni, tracce ed eventi pacco. Le pressioni del campanello e altri cambi di sensore hanno ora una sezione propria.","sec_detection_new":"Nuova regola di rilevazione","sec_detection_empty":"Nessuna regola di rilevazione. Clicca \\"Nuova regola di rilevazione\\" per crearne una.","sec_sensor_label":"Sensori","sec_sensor_blurb":"Regole guidate dal CAMBIO DI STATO di un dispositivo o sensore: una pressione del campanello, l'apertura o chiusura di un sensore collegato. L'immagine è un solo scatto della telecamera a cui è associato il sensore; non c'è scelta del media.","sec_sensor_new":"Nuova regola sensore","sec_sensor_empty":"Nessuna regola sensore. Clicca \\"Nuova regola sensore\\" per essere avvisato quando suona un campanello o cambia un sensore collegato.","sec_audio_label":"Audio","sec_audio_blurb":"Regole su ciò che le telecamere SENTONO: una finestra sostenuta di suono abbastanza forte, o classificata come uno dei suoni indicati. Una regola audio è una regola immediata con la condizione audio: scatta solo su una finestra di campionamento confermata, mai su un'immagine.","sec_audio_new":"Nuova regola audio","sec_audio_empty":"Nessuna regola audio. Clicca \\"Nuova regola audio\\": si apre sulla condizione audio già compilata con una soglia di livello, ti basta indicare i suoni e le destinazioni.","sec_occupancy_label":"Occupazione","sec_occupancy_blurb":"Regole su quanti oggetti ci sono nell'inquadratura o in una zona, e per quanto tempo: \\"il vialetto si è occupato\\", \\"il giardino si è svuotato\\". Una regola di occupazione è una regola di evento dispositivo con la condizione di occupazione.","sec_occupancy_new":"Nuova regola di occupazione","sec_occupancy_empty":"Nessuna regola di occupazione. Clicca \\"Nuova regola di occupazione\\": si apre sulla condizione di occupazione; scegli la telecamera nella scheda Dispositivi, poi la zona e il conteggio.","sec_deviceEvents_label":"Eventi dispositivo","sec_deviceEvents_blurb":"Regole sui tuoi dispositivi: offline o tornato online, spento o acceso, uno stream che cade, una batteria o un materiale di consumo in esaurimento, una telecamera che non rileva nulla. Non portano immagini.","sec_deviceEvents_new":"Nuova regola evento dispositivo","sec_deviceEvents_empty":"Nessuna regola evento dispositivo. Clicca \\"Nuova regola evento dispositivo\\" per essere avvisato quando un dispositivo cade, una batteria si scarica o una telecamera diventa cieca.","sec_system_label":"Eventi di sistema","sec_system_blurb":"Regole sull'installazione stessa: un nodo che lascia il cluster, un addon in crash loop, un aggiornamento disponibile o installato, un backup o un'esportazione terminati. Non portano immagini e non sono legate a una rilevazione.","sec_system_new":"Nuova regola di sistema","sec_system_empty":"Nessuna regola di sistema. Clicca \\"Nuova regola di sistema\\" per essere avvisato quando un nodo se ne va, arriva un aggiornamento o termina un backup.","sec_alarm_label":"Allarme","sec_alarm_blurb":"Regole sul pannello dell'allarme: inserimento, inserito, scattato, disinserito e i rifiuti nel mezzo.","sec_alarm_new":"Nuova regola allarme","sec_alarm_empty":"Nessuna regola allarme. Clicca \\"Nuova regola allarme\\" per essere avvisato quando l'allarme si inserisce, scatta o si disinserisce.","sec_mixed_label":"Da ricreare","sec_mixed_blurb":"Regole di sistema create prima che esistessero le tre famiglie. Ognuna mescola più famiglie e continua a scattare così com'è, ma non è modificabile: ricreala come una regola per famiglia (Eventi dispositivo, Eventi di sistema, Allarme). Non aprirne nessuna: eliminale una volta create le sostitute.","sec_mixed_new":"Nuova regola","sec_mixed_empty":"Niente da ricreare.","scopeDevice":"Per dispositivo","scopeRule":"Intera regola (una finestra per tutti i dispositivi)","granPerClass":"Finestre separate per classe (predefinito)","granShared":"Condivisa tra le classi","linkedDefault":"Mosaico di ogni telecamera collegata (predefinito)","linkedMosaic":"Mosaico di ogni telecamera collegata","linkedEach":"Un'immagine per telecamera (la prima dove ne è ammessa una sola)","profileLowest":"Il più basso disponibile","profileLow":"Basso","profileMid":"Medio","profileHigh":"Alto","srcAny":"Qualsiasi sorgente","srcPipeline":"Pipeline","srcOnboard":"Integrato (telecamera)","srcSensor":"Sensore","phaseDelivered":"Consegnato","phasePickedUp":"Ritirato","phaseBoth":"Entrambi","stBoth":"Quando scatta e quando rientra","stRaised":"Solo quando scatta","stCleared":"Solo quando rientra","crossEnter":"In ingresso","crossExit":"In uscita","crossAny":"In ingresso o in uscita","prioMin":"1 — Minima","prioLow":"2 — Bassa","prioDefault":"3 — Predefinita","prioHigh":"4 — Alta","prioMax":"5 — Massima","speedDefault":"Predefinita (2×)","speedReal":"1× — tempo reale","cdNone":"Nessun intervallo","cd1m":"1 minuto","cd1h":"1 ora","cdHours_one":"{{count}} ora","cdHours_other":"{{count}} ore","cdMinutes_one":"{{count}} minuto","cdMinutes_other":"{{count}} minuti","cdSeconds_one":"{{count}} secondo","cdSeconds_other":"{{count}} secondi","imageSceneBoxes":"Scena con riquadri","imageSceneBoxesDesc":"L'intera scena al momento dell'evento: il soggetto evidenziato, ogni altro oggetto tracciato con un riquadro sottile, ciascuno con classe e confidenza.","imageCrop":"Ritaglio del soggetto","imageCropDesc":"Il soggetto ritagliato dal fotogramma al momento dell'evento.","imageClean":"Scena pulita","imageCleanDesc":"L'intera scena al momento dell'evento, senza nulla disegnato sopra.","imageNone":"Nessuna immagine","imageNoneDesc":"Invia la notifica senza immagine."},"notificationRuleActions":{"onActivationTitle":"Attivazione","onActivationHint":"Viene eseguito quando la regola viene attivata.","onDeactivationTitle":"Disattivazione","onDeactivationHint":"Viene eseguito quando la regola viene disattivata.","onTriggerTitle":"Scatto","onTriggerHint":"Viene eseguito su una corrispondenza positiva / rilevata.","onTriggerOffTitle":"Fine scatto","onTriggerOffHint":"Viene eseguito su una corrispondenza di rientro / uscita. I tipi di consegna senza fronte di rientro non lo eseguono mai.","tooMany":"{{title}} ha più di 4 associazioni.","hookUnknownSeq":"{{title}} punta a una sequenza che non esiste.","dupButton":"Due pulsanti hanno lo stesso id \\"{{id}}\\". L'id è ciò che la riga di audit nomina quando se ne tocca uno.","buttonUnknownSeq":"\\"{{label}}\\" punta a una sequenza che non esiste. Non apparirebbe mai in una notifica.","newButtonLabel":"Azione","icon_acknowledge":"Conferma","icon_dismiss":"Ignora","icon_silence":"Silenzia","icon_snooze":"Posticipa","icon_view":"Visualizza","icon_play":"Riproduci","icon_camera":"Telecamera","icon_open":"Apri","icon_close":"Chiudi","icon_unlock":"Sblocca","icon_lock":"Blocca","icon_disarm":"Disinserisci","icon_arm":"Inserisci","icon_arm_home":"Inserisci — casa","icon_arm_away":"Inserisci — fuori casa","icon_arm_night":"Inserisci — notte","icon_light":"Luce","icon_alert":"Avviso","presetAlarm":"Fai scattare l'allarme","presetAlarmHint":"Preme {{name}}. Il ritardo di ingresso del pannello resta attivo e un disinserimento in quel lasso annulla l'allarme.","presetSiren":"Suona {{name}}","presetSirenHint":"Accesa, {{seconds}} secondi, spenta."},"notificationRulesArea":{"sumLabel":"Riepiloghi","sumBlurb":"Una finestra, un'immagine: i momenti migliori di ogni telecamera in un solo mosaico, consegnato una volta alla chiusura della finestra.","sumNew":"Nuovo riepilogo","sumEmpty":"Nessuna regola di riepilogo. Usa \\"Nuovo riepilogo\\" (o scegli Riepilogo sotto Nuova regola) per crearne una.","tlLabel":"Timelapse","tlBlurb":"Una notte di registrazioni, assemblata in un breve video per telecamera alla chiusura della finestra.","tlNew":"Nuovo timelapse","tlEmpty":"Nessuna regola timelapse. Usa \\"Nuovo timelapse\\" (o scegli Timelapse sotto Nuova regola) per crearne una.","calLabel":"Eventi del calendario","calBlurb":"All'orario pianificato, invia i prossimi eventi dei calendari selezionati per i successivi N giorni.","calNew":"Nuovi eventi del calendario","calEmpty":"Nessuna regola di eventi del calendario. Usa \\"Nuovi eventi del calendario\\" (o scegli Eventi del calendario sotto Nuova regola) per crearne una.","opt_detection_label":"Rilevazione","opt_detection_hint":"Scatta su ciò che le telecamere vedono: rilevazioni, tracce ed eventi pacco.","opt_sensor_label":"Sensore","opt_sensor_hint":"Una pressione del campanello o un sensore collegato che cambia stato.","opt_audio_label":"Audio","opt_audio_hint":"Livello sonoro sostenuto o una classe di suono indicata.","opt_occupancy_label":"Occupazione","opt_occupancy_hint":"Quanti oggetti ci sono in un'inquadratura o zona, e per quanto tempo.","opt_deviceEvents_label":"Eventi dispositivo","opt_deviceEvents_hint":"Offline, batteria scarica, stream interrotto, telecamera cieca.","opt_system_label":"Eventi di sistema","opt_system_hint":"Eventi di nodo, addon, aggiornamento, backup o esportazione.","opt_alarm_label":"Allarme","opt_alarm_hint":"Inserimento, inserito, scattato, disinserito.","opt_summary_label":"Riepilogo","opt_summary_hint":"Un mosaico dei momenti migliori tra le telecamere per una finestra.","opt_timelapse_label":"Timelapse","opt_timelapse_hint":"Un breve video per telecamera dalle registrazioni.","opt_calendarEvents_label":"Eventi del calendario","opt_calendarEvents_hint":"Prossimi eventi del calendario per i successivi N giorni, all'orario pianificato."},"notificationSimulateHelpers":{"objectLabel":"Rilevazione oggetto","objectHint":"Una rilevazione su una traccia in corso: ciò che vede una regola \\"Immediato\\".","trackEndLabel":"Fine traccia","trackEndHint":"Una traccia conclusa: importanza, permanenza e confidenza dell'etichetta esistono solo qui.","deviceEventLabel":"Evento dispositivo","deviceEventHint":"Una pressione del campanello o un sensore collegato che cambia stato.","packageEventLabel":"Evento pacco","packageEventHint":"Un pacco consegnato o ritirato.","audioEventLabel":"Evento audio","audioEventHint":"Un episodio audio classificato. Viaggia sulla consegna Immediata, filtrato dalle classi audio.","occupancyEdgeLabel":"Transizione di occupazione","occupancyEdgeHint":"Il conteggio di una zona che supera la soglia. Viaggia sulla consegna Evento dispositivo.","caveatDevice":"Questa regola è condizionata dal dispositivo #{{deviceId}} in un dato stato. La condizione legge il dispositivo REALE: portalo prima in quello stato, altrimenti la simulazione fallisce in modo chiuso esattamente come in produzione.","caveatScene":"Questa regola è condizionata da una scena nello stato {{state}}. La condizione legge lo stato REALE della scena: portala prima in quello stato (o reimpostala), altrimenti la simulazione fallisce in modo chiuso esattamente come in produzione.","caveatZones":"Questa regola confronta i poligoni disegnati nel viewer con il riquadro del soggetto. Il riquadro qui sotto è attivo ma centrato: spostalo sul poligono, altrimenti la condizione fallisce.","dropped":"Scartato prima della valutazione ({{reason}}): nessuna regola è stata consultata.","noCandidates":"Nessuna regola attiva dichiara la consegna \\"{{delivery}}\\", quindi nulla è stato valutato.","noneMatched_one":"{{count}} regola candidata valutata, nessuna corrispondente.","noneMatched_other":"{{count}} regole candidate valutate, nessuna corrispondente.","ruleNoun_one":"regola candidata","ruleNoun_other":"regole candidate","notifNoun_one":"notifica","notifNoun_other":"notifiche","matchedSummary":"Corrispondenza per {{matched}} su {{candidates}} $t(helpers.notificationSimulateHelpers.ruleNoun, {\\"count\\": {{candidates}}}): {{enqueued}} $t(helpers.notificationSimulateHelpers.notifNoun, {\\"count\\": {{enqueued}}}) in coda."},"eventsDebugTapes":{"actionFailed":"Azione non riuscita.","alreadyReleased":"Questo nastro è già stato rilasciato.","notFound":"Questo nastro non esiste più: potrebbe essere stato rilasciato o eliminato altrove.","pinsOwed":"Rifiutato: questo nastro nomina ancora pin non ancora restituiti. Riprova a breve: il registro li salda automaticamente.","unavailable":"Non disponibile su questo nodo: {{reason}}","truncatedMarks":"Mostro i primi {{count}} segni: per questa finestra ne esistono altri.","statusOff":"Spento","statusRecording":"In registrazione","unknownReason":"motivo sconosciuto","statusRefused":"Rifiutato: {{reason}}","statusFailing":"In errore: {{reason}}","statusUnknown":"Sconosciuto: {{reason}}","sizeKb":"{{value}} KB","sizeMb":"{{value}} MB","exportUnknown":"Questo nastro non esiste più su questo nodo (nastro sconosciuto).","tapesUnavailable":"I nastri non sono disponibili su questo nodo.","exportUnreadable":"Impossibile leggere l'esportazione (il nastro potrebbe essere stato appena rilasciato o eliminato).","downloadFailed":"Download non riuscito ({{status}})."},"compositionRows":{"fieldsUnavailable_one":"{{count}} campo non disponibile","fieldsUnavailable_other":"{{count}} campi non disponibili","fieldsStale_one":"{{count}} campo obsoleto","fieldsStale_other":"{{count}} campi obsoleti","noReason":"nessun motivo registrato","running":"In esecuzione","degradedReason":"In esecuzione con un campo restituito al dispositivo; nessun motivo registrato.","degraded":"Degradato","starting":"In avvio","failed":"Fallito","failedReason":"Fallito senza motivo registrato: controlla i log del composer.","notRunning":"Non in esecuzione","notRunningReason":"Abilitato ma il composer non lo sta eseguendo.","off":"Spento","unknown":"Sconosciuto","unreachable":"Non è stato possibile interrogare il composer: {{error}}","notReported":"Non ancora riportato","noRecord":"Il composer non ha ancora alcun record di questo blocco (stato memorizzato: {{stored}}).","featureOff":"{{cap}} (spento)"},"recipeOps":{"rowGone":"quella riga non esiste più","selectTwo":"seleziona almeno due righe: un gruppo di una è solo la riga","differentGroups":"quelle righe sono in gruppi diversi: un gruppo si può creare solo da righe affiancate","rootGroup":"la lista principale non può essere raggruppata in se stessa","insideNot":"quelle righe sono dentro un NOT: rimuovilo prima di raggrupparle","selectedGone":"una delle righe selezionate non esiste più","outerNotGroup":"la lista esterna non è un gruppo: non c'è nulla da sciogliere","groupGone":"quel gruppo non esiste più","rowIsCondition":"quella riga è una condizione, non un gruppo","noParent":"quel gruppo non ha un genitore in cui sciogliersi","groupInNot":"un gruppo dentro un NOT non può essere sciolto sul posto"},"coreBlockStatus":{"disabled":"Disabilitato","disabledDetail":"Non avviato: il blocco è spento.","running":"In esecuzione","runningDetail":"Un processo, supervisionato.","starting":"In avvio","startingDetail":"In attesa che il processo segnali di essere pronto.","failed":"Fallito","failedDetail":"Fallito senza motivo registrato: controlla i log del nodo.","notRunning":"Non in esecuzione","notRunningDetail":"Abilitato ma nessun processo è in esecuzione. Il supervisore riconcilia ogni 15 s; se persiste, il nodo potrebbe non eseguire un supervisore di blocchi.","noBlocks":"Ancora nessun blocco.","blocks_one":"{{count}} blocco","blocks_other":"{{count}} blocchi","runningCount":"{{count}} in esecuzione","notRunningCount":"{{count}} NON in esecuzione"},"unifiedRulesModel":{"kind_detection":"Rilevazione","kind_sensor":"Sensore","kind_sound":"Audio","kind_occupancy":"Occupazione","kind_device_events":"Eventi dispositivo","kind_system":"Sistema","kind_alarm":"Allarme","kind_mixed":"Da ricreare","kind_summary":"Riepilogo","kind_timelapse":"Timelapse","kind_calendar_events":"Eventi del calendario"},"recipeParts":{"op_eq":"è","op_ne":"non è","op_gt":"è sopra","op_gte":"è almeno","op_lt":"è sotto","op_lte":"è al massimo","op_contains":"contiene","op_in":"è uno tra","trigger_device_state":"Cambia un campo di un dispositivo","trigger_device_event":"Accade un evento","trigger_schedule":"A orario pianificato","trigger_manual":"Solo quando eseguita a mano"},"notificationCalendarEvents":{"tab_basics":"Generale","tab_schedule":"Pianificazione","tab_calendars":"Calendari","tab_targets":"Destinazioni","tab_template":"Modello","scheduleAt":"Alle {{time}}{{more}}","horizon_one":"prossimo {{count}} giorno","horizon_other":"prossimi {{count}} giorni","calendars_one":"{{count}} calendario","calendars_other":"{{count}} calendari","allExcept":"tutti tranne {{count}}","allCalendars":"tutti i calendari"},"notificationRuleStatus":{"lessThanMinute":"meno di un minuto","durMin":"{{count}} min","durH":"{{count}} h","durHMin":"{{hours}} h {{minutes}} min","durD":"{{count}} g","durDH":"{{days}} g {{hours}} h","sizeKb":"{{value}} kB","sizeMb":"{{value}} MB","sizeGb":"{{value}} GB","tlRendering":"{{camera}}: rendering da {{duration}} — finestra {{from}} → {{to}}","tlNever":"{{camera}}: nessun video prodotto finora","tlGone":"{{camera}}: ultimo prodotto {{when}} — il video non è più disponibile","tlLast":"{{camera}}: ultimo prodotto {{when}} · {{size}}"},"notificationSummaries":{"tab_rule":"Regola","tab_window":"Finestra","tab_content":"Cosa include","tab_mosaic":"Mosaico","tab_delivery":"Consegna","winMotion":"Movimento · {{quiet}} di quiete · max {{max}}","winUnsupported":"Finestra non supportata ({{raw}}): creata su un hub più recente","winSchedule":"Pianificazione · {{schedule}}","allPassages":"Tutti i passaggi","filterNot":"non {{classes}}","filterZones_one":"{{count}} zona","filterZones_other":"{{count}} zone","filterImportance":"importanza ≥ {{value}}","filterStay":"permanenza ≥ {{value}}","filterParked":"inclusi parcheggiati"},"notificationAlarm":{"delayMin":"{{minutes}} min","delayMinSec":"{{minutes}} min {{seconds}} s","armsNothing":"Non inserisce nulla: nessuna regola attiva è condizionata da questa modalità.","allExcept":"Tutti i dispositivi tranne {{count}}: {{names}}","everyDevice_one":"Ogni dispositivo: {{count}} regola senza ambito dispositivo.","everyDevice_other":"Ogni dispositivo: {{count}} regole senza ambito dispositivo.","noRestriction_one":"{{count}} regola, nessuna restrizione sui dispositivi.","noRestriction_other":"{{count}} regole, nessuna restrizione sui dispositivi.","skipped":"{{count}} esclusi: {{parts}}","phaseOpen":"ignorato finché non si chiude","phaseClosed":"chiuso: monitorato alla prossima apertura"},"notificationRuleTest":{"dropped":"Nulla è stato valutato ({{reason}}): l'evento è stato scartato prima di consultare qualsiasi regola.","notCandidate":"Questa regola non era candidata per un evento {{trigger}}: controlla il suo trigger e che sia attiva.","noMatchOwn":"La regola non corrisponde all'evento costruito dalle sue stesse condizioni.","noMatchCond":"La regola non corrisponde: la condizione “{{condition}}” ha rifiutato l'evento.","matchedNoQueue":"La regola corrisponde, ma nessuna notifica è stata messa in coda: ogni destinazione l'ha esclusa, oppure non ne indirizza nessuna.","stillLive":"con uno snapshot dal vivo","stillUnavailable":"(la telecamera non ha restituito snapshot, quindi parte solo testo)","stillUnattachable":"(questo tipo di regola non porta immagini nemmeno in produzione)","notifNoun_one":"notifica","notifNoun_other":"notifiche","targetNoun_one":"destinazione","targetNoun_other":"destinazioni","matched":"Corrisponde: {{queued}} $t(helpers.notificationRuleTest.notifNoun, {\\"count\\": {{queued}}}) in coda per {{targets}} $t(helpers.notificationRuleTest.targetNoun, {\\"count\\": {{targets}}}){{still}}. È contrassegnata con [TEST] nel corpo.","unavailable":"non disponibile","noneOpen":"nessuna aperta","nothingToReport":"Niente da riportare ora ({{reads}}): non è stato inviato nulla, esattamente come farebbe il riepilogo pianificato.","summaryNoQueue":"Il riepilogo è stato creato, ma nessuna notifica è stata messa in coda: la regola non raggiunge nessuna destinazione (i suoi utenti non sono admin, oppure ogni destinazione l'ha esclusa).","perCategory":"una per categoria: {{sections}}","markedTest_one":"È contrassegnata con [TEST] nel corpo.","markedTest_other":"Sono contrassegnate con [TEST] nel corpo.","summaryBuilt":"Riepilogo creato ora: {{queued}} $t(helpers.notificationRuleTest.notifNoun, {\\"count\\": {{queued}}}) in coda{{perCategory}} per {{targets}} $t(helpers.notificationRuleTest.targetNoun, {\\"count\\": {{targets}}}). $t(helpers.notificationRuleTest.markedTest, {\\"count\\": {{queued}}})"},"notificationRuleLastRun":{"unknownError":"errore sconosciuto","notInDay_one":"Non nell'ultimo giorno","notInDay_other":"Non negli ultimi {{count}} giorni","notInHour_one":"Non nell'ultima ora","notInHour_other":"Non nelle ultime {{count}} ore","notInMinute_one":"Non nell'ultimo minuto","notInMinute_other":"Non negli ultimi {{count}} minuti","noDelivery":"Nessuna consegna registrata","notInWindow":"Non nella finestra letta"},"notificationSystemEventDelivery":{"wd_mon":"Lun","wd_tue":"Mar","wd_wed":"Mer","wd_thu":"Gio","wd_fri":"Ven","wd_sat":"Sab","wd_sun":"Dom","dropped":"Escluso dai filtri di questa regola o dal silenziamento di una telecamera: {{parts}}."},"aiPage":{"appleDetailImages":"macOS {{version}} · testo + immagini","appleDetailText":"macOS {{version}} · solo testo"},"notificationTestComposer":{"actionN":"Azione {{n}}","presetText":"Notifica di prova: solo testo.","presetImage":"Notifica di prova con un'immagine.","presetGif":"Notifica di prova con un'animazione.","presetVideo":"Notifica di prova con un video.","presetAudio":"Notifica di prova con audio.","presetActions":"Notifica di prova con pulsanti azione.","presetCritical":"Notifica di prova critica."},"ruleFormTabs":{"tab_rule":"Regola","tab_devices":"Dispositivi","tab_conditions":"Condizioni","tab_notification":"Notifica","tab_actions":"Azioni","tab_advanced":"Avanzate","condSound":"Audio","condOccupancy":"Occupazione"},"pemFile":{"isCert":"Questo è un certificato, non una chiave privata.","notKey":"Non è una chiave privata PEM: atteso -----BEGIN … PRIVATE KEY-----.","encrypted":"La chiave privata è protetta da password. Esportala senza passphrase.","isKey":"Questa è una chiave privata, non un certificato.","notCert":"Non è un certificato PEM: atteso -----BEGIN CERTIFICATE-----.","certHasKey":"Questo file contiene anche una chiave privata. Scegli il file del certificato e la chiave nel suo campo."},"restartGate":{"saveFirstNoProcess":"Salva prima lo script: non c'è ancora un processo da riavviare.","saving":"Salvataggio…","restarting":"Riavvio…","saveFirstDirty":"Salva prima: un riavvio ora eseguirebbe l'ultimo codice SALVATO, non quello a schermo.","disabled":"Questo script è disabilitato. Abilitalo invece di riavviarlo."},"aiTestChat":{"providerError":"il provider ha restituito un errore","phaseImage":"recupero l'immagine…","phaseConnecting":"connessione al provider…","phaseWaitUpTo":"il modello sta caricando / pensando: un caricamento a freddo può richiedere minuti (fino a {{seconds}}s)","phaseWait":"il modello sta caricando / pensando: un caricamento a freddo può richiedere minuti","phaseAnswering":"risposta in corso…"},"addressTableModel":{"appConnectionsTitle":"Connessioni delle app","appConnectionsHelp":"Indirizzi che le app CamStack provano per connettersi; puoi sceglierne diversi. Automatico: indirizzi LAN più il tunnel pubblico. Ogni indirizzo LAN ha anche una riga HTTPS (la porta sicura dell'hub): un telefono che si fida del certificato locale dell'hub la usa, gli altri la saltano; deselezionala per smettere di proporla.","notificationTapsTitle":"Tocco sulle notifiche","notificationTapsHelp":"Solo dove si apre toccando una notifica; un solo indirizzo. Automatico: il link dell'app CamStack (apre l'app se installata, altrimenti l'app web).","publicEndpointTitle":"Endpoint pubblico","publicEndpointHelp":"Ogni link che deve funzionare fuori casa: accesso, single sign-on e collegamento account, passkey, e i pulsanti, gli allegati e i link admin nelle notifiche; un solo indirizzo. Automatico: il tuo tunnel pubblico, poi Tailscale, poi la LAN. Cambiarlo invalida le passkey registrate.","internalTitle":"Interno","internalHelp":"Da dove le altre macchine CamStack e i dispositivi LAN scaricano addon, modelli e media; un solo indirizzo. Automatico: l'indirizzo LAN dell'hub."},"alarmNonblocking":{"refusedNoName":"Non inserito: l'hub ha rifiutato senza nominare un dispositivo aperto.","refusedOpen":"Non inserito: questi sono aperti:"},"notificationTimelapse":{"tab_rule":"Regola","tab_window":"Finestra","tab_sampling":"Campionamento","tab_delivery":"Consegna"},"recipeFromCode":{"noLiteral":"questo blocco non contiene alcun literal AUTOMATION_RECIPE","badJson":"la ricetta incorporata non è JSON leggibile: {{detail}}","schemaMismatch":"la ricetta incorporata non corrisponde allo schema delle ricette","schemaMismatchAt":"la ricetta incorporata non corrisponde allo schema delle ricette in {{path}}: {{message}}"},"connectivityModel":{"running":"in esecuzione","stopped":"fermo"},"notificationTargets":{"copyOf":"{{name}} (copia)","keepSecret":"•••••••• (lascia vuoto per mantenere)"},"ruleFormState":{"snoozeHours":"{{count}} h","snoozeMin":"{{count}} min","summaryWarnNone":"Questo corpo non cita nulla del riepilogo ({{token}} o una variabile di sezione): l'hub vi aggiunge {{token}} quando lo invia.","summaryWarnSplit":"Inviato uno per categoria: questo corpo non cita {{token}}, quindi nella notifica di ogni altra categoria l'hub aggiunge {{token}} (le righe di quella categoria)."},"notificationDigest":{"noWindow":"Nessuna finestra","ago":"{{duration}} fa"},"notificationHistory":{"deletedRule":"Regola eliminata ({{id}})","allRules":"Tutte le regole"},"notificationPrunes":{"lastDevice":"Disattivata il {{when}}: il suo ultimo dispositivo (#{{subject}}) è stato eliminato.","lastTarget":"Disattivata il {{when}}: la sua ultima destinazione di consegna ({{subject}}) è stata eliminata."},"notificationTexts":{"pluralWarning":"Questo testo ha una forma per ogni conteggio ({{categories}}). Una sostituzione le rimpiazza tutte con una sola frase."},"automationEditor":{"incomplete":"questa automazione non è ancora completa"},"buildExamples":{"blankDescription":"Esempio minimo: saluto + timer con disposer"},"classPickerItems":{"other":"Altro"},"notificationSystemEvents":{"noneSelected":"Nessun evento selezionato"},"certificateModel":{"unknown":"Sconosciuto","today":"oggi","inDays_one":"tra {{count}} giorno","inDays_other":"tra {{count}} giorni","daysAgo_one":"{{count}} giorno fa","daysAgo_other":"{{count}} giorni fa","nodeOffline":"Il nodo è offline: non può essere rinnovato ora.","uploadedCert":"Questo certificato è stato caricato da un operatore. Sostituiscilo dove è stato caricato (Rete → Accesso locale), oppure torna a quello generato.","tlsDisabled":"TLS è disattivato sull'hub: non c'è nessun certificato.","stage":{"prepare":"richiesta di una chiave al nodo","issue":"emissione del nuovo certificato","install":"installazione sul nodo","reconnect":"attesa della riconnessione del nodo","confirm":"verifica che il nodo presenti il nuovo certificato"},"renewed":"{{nodeId}}: nuovo certificato del cluster {{serial}} installato; il precedente è stato revocato.","keptPrevious":"Il nodo mantiene il certificato precedente: non si è rotto nulla.","maybeNoCert":"Il nodo potrebbe essere senza un certificato valido: controllalo e rinnova di nuovo.","renewalFailed":"{{nodeId}}: rinnovo non riuscito durante {{stage}} - {{reason}}. {{kept}}"},"nodesModel":{"hubReissued":"Il certificato del cluster dell'hub viene riemesso a ogni avvio: non c'è nulla da rinnovare o revocare.","noCertRecorded":"Nessun certificato del cluster registrato per questo nodo."},"brokerIdentitySchema":{"title":"Broker","kind":"Tipo","name":"Nome","namePlaceholder":"Il mio Home Assistant","restore":"Ripristina un broker rimosso, con il suo id originale","restoreHint":"I dispositivi ricordano l'id del broker con cui sono stati scoperti: ripristinando l'id originale si riconnettono senza dover essere riscoperti. Un id ancora in uso viene rifiutato.","originalId":"Id originale del broker"},"detectionSettingsGroups":{"objectDetection":"Rilevamento oggetti","tracking":"Tracciamento","motion":"Movimento","stationary":"Statici","zones":"Zone","audio":"Audio","cluster":"Cluster"},"structuralTabs":{"overview":"Panoramica","config":"Configurazione","customize":"Personalizza","detectionPipeline":"Pipeline di rilevamento","bindings":"Associazioni","history":"Cronologia"},"authAuditWording":{"prefix":"Prefisso {{prefix}}…","tokenCreated":"Token admin \\"{{name}}\\" creato","expires":"Scade il {{at}}","tokenUsed":"Token admin \\"{{name}}\\" usato","call":"Chiamata {{path}}","tokenRevoked":"Token admin \\"{{name}}\\" revocato","bulkNoun":{"shareLink":"link di condivisione","adminToken":"token admin","loginSession":"sessioni di accesso","credential":"credenziali"},"bulkRevoked":"{{n}} {{noun}} revocati in blocco","skipped":"{{count}} saltati","ids":"Id {{ids}}","secondFactorSkipped":"Secondo fattore saltato su una rete attendibile","signedInWith":"Accesso eseguito con {{method}}","skippedFactors":"Saltati: {{factors}}","tokenMinted":"Token \\"{{name}}\\" creato","anyTokenRevoked":"Token \\"{{name}}\\" revocato"},"sessionClient":{"unknownDevice":"Dispositivo sconosciuto","browserOnSystem":"{{browser}} su {{system}}","method":{"password":"Password","passkey":"Passkey","sso":"Single sign-on","handoff":"Passaggio dall'app","exchange":"Scambio di sessione"}},"relativeTime":{"justNow":"adesso","secondsAgo":"{{count}}s fa","minutesAgo":"{{count}}m fa","hoursAgo":"{{count}}h fa","daysAgo":"{{count}}g fa","now":"ora","inSeconds":"tra {{count}}s","inMinutes":"tra {{count}}m","inHours":"tra {{count}}h","inDays":"tra {{count}}g"},"eventEmitterFormat":{"buttonHeadline":"Pulsante {{channel}} · {{eventType}}"},"backupDatabases":{"settings":{"label":"Configurazione e file","short":"Impostazioni","description":"Database di configurazione, addon, dati degli addon e certificati. Ogni notte."},"events":{"label":"Eventi e rilevamenti","short":"Eventi","description":"Tracce, rilevamenti e storico delle notifiche. Dati statistici: basta una volta a settimana."},"history":{"label":"Storico (statistiche)","short":"Cronologia","description":"Statistiche a lungo termine e registri. Dati statistici: basta una volta a settimana."},"notCreated":"Creato quando questa funzione viene attivata"},"customize":{"requestFailed":"la richiesta non è riuscita"},"customizationRead":{"notAComposition":"il blocco {{id}} non è una composizione"},"liveValue":{"unreadable":"impossibile leggere il valore"},"customizationSave":{"notReadYet":"la personalizzazione non è ancora stata letta: riprova"},"assignmentAvailability":{"sensorsUnchecked":"impossibile verificare i sensori della telecamera"},"fieldsTableRows":{"composerNotReported":"il compositore non ha ancora riportato questa personalizzazione","noValue":"il compositore non riporta alcun valore per questo campo","stateUnreadable":"impossibile leggere lo stato del dispositivo","notReported":"non riportato"},"clusterUpdateAll":{"noAnswer":"nessuna risposta","unknown":"sconosciuta","landed":"Connessione interrotta; il nodo conferma che l'aggiornamento è andato a buon fine (stato {{state}}, versione in esecuzione {{version}}).","unchanged":"Connessione interrotta e il nodo è tornato invariato (ancora {{version}}, aggiornamento ancora disponibile). Nulla è stato preparato.","unconfirmed":"Connessione interrotta e il nodo non è stato confermato dopo {{attempts}} tentativi ({{error}}). Potrebbe essere in riavvio: ricontrolla questo nodo."},"ssoReturn":{"signInFallback":"accesso","notLinked":"Questo account {{provider}} non è collegato a nessun utente CamStack. Accedi normalmente e collegalo dal tuo profilo.","state":"Impossibile completare qui questo accesso: è stato avviato in un altro browser o è già stato usato. Riavvialo da questa pagina.","link":{"expired":"La richiesta di collegamento è scaduta o è già stata usata. Premi di nuovo Collega.","provider":"L'accesso si è concluso presso un provider diverso da quello scelto. Premi di nuovo Collega.","session":"L'accesso non si è concluso nella sessione del browser che lo ha avviato. Accedi qui a CamStack e premi di nuovo Collega.","conflict":"Quell'account di accesso è già collegato a un altro utente CamStack.","state":"Impossibile associare l'accesso a questo browser, oppure è già stato usato. Premi di nuovo Collega.","failed":"Collegamento dell'account di accesso non riuscito. Riprova."}},"photoEnroll":{"refusal":{"noEmbedding":"Troppo piccolo o poco nitido perché il riconoscitore lo misuri: prova con una foto in cui il volto è più grande.","noModelId":"Il riconoscitore non ha indicato quale modello ha usato, quindi questo volto non può essere registrato in sicurezza.","noAlignedCrop":"Il riconoscitore non ha prodotto un ritaglio allineato per questo volto, quindi non c'è nulla da salvare.","magnitude":"Rifiutato dal controllo di qualità: le caratteristiche risultano degenerate e un campione così corrisponde a tutti.","default":"Questo volto non è utilizzabile come campione."}},"photoEnrollBatch":{"newPersonNoName":"{{filename}}: il volto {{face}} è impostato su una nuova persona ma non ha un nome.","photoFallback":"foto {{n}}","faceLabel":"{{filename}}, volto {{face}}"},"searchItems":{"disabled":"{{addonId}} · disattivata"},"fieldPreview":{"codeFields":"i campi di codice arriveranno nella slice 4","notReported":"{{path}} non è riportato"},"mediaProvenance":{"standin":{"label":"sostituto","title":"Sostituto: questa miniatura è un ritaglio di dettaglio di un volto o di una targa copiato perché non è stato catturato alcun fotogramma del soggetto. Non è uno scatto migliore."},"raster":{"label":"bassa ris.","title":"Ritaglio raster: un taglio sotto-nativo del soggetto, non una cattura nativa. Fedele, ma a risoluzione inferiore rispetto a uno scatto migliore."},"miss":{"noKeyFrame":"Alla chiusura non esisteva alcun key frame, quindi non è stato possibile ritagliare una miniatura nativa.","noBestSeenBbox":"Non è mai stato registrato un riquadro del soggetto, quindi non c'era nulla attorno a cui ritagliare.","deriveReturnedNull":"Il ritaglio alla chiusura è stato tentato ma non ha prodotto nulla.","deriveThrew":"Il ritaglio alla chiusura è fallito con un errore.","deriveNotWired":"Su questo nodo non era collegato alcun ritaglio alla chiusura.","noMediaStore":"Il nodo si stava spegnendo durante la chiusura.","noThumbnail":"La traccia si è chiusa senza alcuna miniatura.","standinTile":"La traccia si è chiusa con un ritaglio di dettaglio al posto del soggetto.","rasterTile":"La traccia si è chiusa con un ritaglio raster sotto-nativo del soggetto.","nativeTile":"La traccia si è chiusa con una miniatura nativa."}},"cameraSwitchRows":{"off":"Disattivate: {{list}}","unknown":"Sconosciute: {{list}}","allOn":"Tutte le funzioni della telecamera attive"},"streamLabels":{"quality":"Qualità {{base}}"},"autoTuneViewModel":{"sessions_one":"{{count}} sessione","sessions_other":"{{count}} sessioni","capacity":"Capacità {{sessions}} ≥ min {{min}}.","tieFaster":"Accurato quanto {{over}} (entro {{recall}} di recall) e più veloce.","steppedDown":"{{from}} non reggerebbe il carico su {{limitedBy}}; {{to}} è il più accurato che lo regge.","noFitLightest":"Nessun modello raggiunge {{min}} per dispositivo; viene usato quello con più capacità ({{sessions}}).","derivedLatency":"{{modelId}}: latenza stimata da un chip simile, non misurata su questo.","cpuDevice":"Dispositivo CPU di ripiego: scelto da solo.","deviceDisabled":"Disabilitato: non modificato.","deviceUnavailable":"Non disponibile sul nodo al momento: non modificato.","nodeOffline":"Nodo offline: nulla su di esso cambierà.","noHardwareFacts":"Impossibile leggere l’hardware: nulla su questo nodo cambierà.","noMeasuredData":"Questo hardware non ha dati misurati: nulla su questo nodo cambierà.","noFamilyBuild":"Nessuna build YOLOv9 per il formato {{format}}: non modificato.","keptCustomPin":"Il modello personalizzato {{modelId}} è fissato su {{deviceKey}}: l’Auto tune salta questo dispositivo.","customPinNode":"{{node}}: modello personalizzato {{modelId}} fissato su {{deviceKey}}: l’Auto tune salta questo dispositivo del nodo.","customRegistryUnreadable":"Impossibile leggere il registro dei modelli personalizzati ({{error}}): ogni fissaggio a un modello fuori dal catalogo misurato viene mantenuto.","latencyMeasured":"misurato su questo nodo, {{date}}","latencyEstimated":"stimato da {{hardware}}: esegui un benchmark su questo nodo per misurarlo","latencyTable":"dalla tabella delle latenze: esegui un benchmark su questo nodo per misurarla"},"cameraCardModel":{"provisioningFailedWith":"Provisioning del motore non riuscito: {{error}}","provisioningFailed":"Provisioning del motore non riuscito sul nodo di rilevamento","blackHole":"La fase di rilevamento è ATTIVA ma vengono elaborati 0 fps: i frame non raggiungono il rilevatore (firma di buco nero tra nodi)","unassigned":"Non assegnata a nessun nodo di rilevamento: nessuna pipeline è in esecuzione per questa camera","statusUnreadable":"Impossibile leggere {{stages}} per questa camera: quei blocchi sono sconosciuti, non vuoti (una lettura di interruttore fallita NON significa che nulla è spento)","brokerStalled":"Il profilo broker «{{profile}}» risulta in streaming ma con 0 fps in ingresso: il prelievo dalla sorgente potrebbe essere bloccato","sensorMissing":"Il sensore camera {{addonId}}/{{stableId}} manca","sensorOffline":"Il sensore camera {{name}} (#{{deviceId}}) è {{reason}}","sensorUnsupported":"Il sensore camera {{name}} (#{{deviceId}}) non può generare movimento: {{reason}}","sensorUnreadable":"Il sensore camera {{addonId}}/{{stableId}} non è leggibile: {{reason}}","sensorsUnreadable":"Sensori camera non leggibili: {{reason}}","notEnforced":"Conferma / Sostituisci non può sopprimere il movimento proprio di questa camera finché il suo provider non viene aggiornato","notForwardedOnboard":"I sensori camera sono collegati ma non scattano mai: aggiungi «Sensori camera» (integrati) alle sorgenti di movimento di questa camera","notForwardedNoDetection":"I sensori camera sono collegati ma non scattano mai: questa camera non ha un rilevamento attivo","summaryUnavailable":"stato non disponibile da questo nodo","summaryNone":"nessuno collegato","summaryUnknown":"sconosciuto — {{reason}}","summaryUnsupported":"{{name}} (#{{deviceId}}) — non supportato"},"detectionSourceModel":{"badgeCameraAi":"IA della camera","badgeNoRoot":"Nessuna radice","badgeIdle":"Inattivo","explainPipeline":"Questo nodo rileva: lo step radice gira sui frame decodificati e ogni step sotto di esso si applica.","explainOnboard":"La camera rileva: i suoi riquadri sostituiscono lo step radice, quindi l’acceleratore non viene interpellato. Gli step sotto di esso girano comunque sui ritagli dei frame di questo nodo.","explainNone":"Nessun rilevatore radice: su questa camera non viene rilevato nulla, quindi ogni step video sotto la radice è inattivo.","geometryWhileStreaming":"I suoi riquadri viaggiano sul flusso già aperto, quindi esistono solo mentre la camera è sveglia; tra un risveglio e l’altro non riporta nulla.","geometryFlagOnly":"La sua IA integrata riporta una classe senza riquadro, quindi non può essere il rilevatore radice.","geometryUnknown":"Questa camera non ha detto se i suoi rilevamenti hanno un riquadro; senza di esso non può essere il rilevatore radice.","noticeOnboard":"Non in esecuzione qui: il rilevatore della camera è la radice, quindi lo step radice di questo nodo non viene mai interpellato. Queste impostazioni valgono di nuovo se riporti il rilevatore radice su questo nodo.","noticeNoRoot":"Non in esecuzione qui: questa camera non ha un rilevatore radice.","noticeIdle":"Inattivo: questa camera non ha un rilevatore radice, quindi questo step non ha nulla su cui lavorare."},"clusterSettingsSections":{"facesTitle":"Volti e riconoscimento","facesHint":"L’encoder dei volti per ogni nodo, i volti più piccoli che valgono la pena di essere incorporati, conservati e assegnati in automatico, e come un volto viene associato a una persona.","semanticTitle":"Ricerca semantica","semanticHint":"L’encoder di immagini dietro la «ricerca per descrizione». Uno per tutto il cluster: cambiarlo nasconde i risultati esistenti finché l’indice non viene ricostruito.","cropTitle":"Ritaglio di arricchimento","cropHint":"Come viene ritagliato dal frame il ritaglio consegnato ai modelli di volti, targhe e ricerca.","nativeTitle":"Ritagli a piena risoluzione","nativeHint":"Per quanto tempo ogni camera conserva i pixel a piena risoluzione, così un ritaglio tardivo (snapshot, volto, targa) è nitido invece di essere ricavato dal piccolo frame di rilevamento.","runnerTitle":"Valori predefiniti del runner","runnerHint":"Valori usati dal runner di rilevamento e dall’analizzatore audio di ogni nodo. I limiti di decodifica propri del nodo (Motore e decoder) hanno la precedenza.","loadTitle":"Bilanciamento del carico","loadHint":"Come una nuova sessione di detection sceglie nodo e dispositivo, e cosa succede quando un nodo resta indietro.","failoverTitle":"Failover","failoverHint":"Cosa succede alle camere quando un nodo si disconnette e poi torna."},"loadBalancingViewModel":{"stalePinDisabled":"{{deviceKey}} non è abilitato su nessun nodo: le sessioni ignorano questo fissaggio","stalePinMissing":"nessun nodo offre {{deviceKey}}: le sessioni ignorano questo fissaggio","shareNote_one":"{{names}} non può accettare sessioni: la sua quota va agli altri: {{into}}","shareNote_other":"{{names}} non possono accettare sessioni: le loro quote vanno agli altri: {{into}}","hardwareLabel":"Hardware","hardwareHint":"La quota di ogni nodo segue ciò che i suoi acceleratori possono reggere con i modelli dell’Auto tune, in base alla velocità misurata del suo hardware. Nessun carico viene misurato o stimato.","benchmarkLabel":"Benchmark","benchmarkHint":"La quota di ogni nodo segue i risultati del proprio benchmark. Un nodo senza risultati usa invece la capacità del suo hardware, e lo dichiara.","manualLabel":"Manuale","manualHint":"I cursori qui sotto, come li imposti.","fallbackNone":"ancora nessun risultato di benchmark: dimensionato dall’hardware","fallbackPartial":"i risultati del benchmark non coprono alcuni suoi acceleratori: dimensionato dall’hardware"},"locationCapacityBar":{"unknownSummary":"Capacità sconosciuta: da qui nessuno ha misurato questo volume. Una condivisione remota, una posizione su un altro nodo o un mount che non ha risposto.","unknownSummaryOwned":"Capacità sconosciuta: da qui nessuno ha misurato questo volume. Una condivisione remota, una posizione su un altro nodo o un mount che non ha risposto. CamStack occupa {{size}} qui.","reserveKept":"{{size}} tenuti liberi","ownedOfRecordings":"{{size}} di registrazioni ({{percent}})","capDrain":"{{size}} di obiettivo di svuotamento (gestito da CamStack)","capCap":"{{size}} di limite (gestito da CamStack)","summaryFree":"{{free}} liberi su {{total}} ({{percent}} liberi)","summaryOwned":"CamStack occupa {{owned}}","summaryReserveShort":"{{reserve}}: in questo momento c’è meno spazio libero, i dati più vecchi qui vengono eliminati","summaryCapBelow":"{{cap}}: già sotto ciò che è memorizzato qui, i dati più vecchi vengono eliminati","legendKeptFree":"Tenuto libero","legendCamstack":"CamStack","legendUsed":"Usato","legendOtherData":"Altri dati","legendFree":"Libero","legendDrainTarget":"Obiettivo di svuotamento","legendCap":"Limite","legendCapValue":"{{size}} · gestito da CamStack"},"locationMode":{"activeLabel":"Attiva","activeConsequence":"Qui vengono scritti i nuovi dati e, quando il disco si riempie, vengono eliminati i più vecchi.","readonlyLabel":"Sola lettura","readonlyConsequence":"Non viene scritto nulla di nuovo e non viene mai eliminato nulla. Un archivio congelato che resta sulla timeline.","drainLabel":"Svuota","drainConsequence":"Non viene scritto nulla di nuovo. I dati più vecchi qui vengono eliminati, poco alla volta, finché questa posizione non è vuota.","disabledLabel":"Disabilitata","disabledConsequence":"Non viene scritto né letto nulla: i filmati memorizzati qui spariscono dalla timeline finché non la riattivi. Non viene eliminato nulla."},"locationProtection":{"unitGb":"GB da tenere liberi","unitPercent":"% del volume da tenere libero","targetDefault":"{{percent}}% del volume (il valore predefinito)","targetGb":"{{value}} GB","targetPercent":"{{value}}% del volume","helpText":"CamStack tiene liberi {{target}} su questo disco. Man mano che si riempie, i dati PIÙ VECCHI qui memorizzati vengono eliminati per mantenere quello spazio libero; se non si riesce più a mantenerlo, i nuovi dati vanno in un’altra posizione dello stesso tipo invece di riempire il disco. Lascia vuoto il valore per usare quello predefinito ({{percent}}%)."},"keychainNotices":{"lockedKeyMissing":"impossibile caricare alcuna chiave master","lockedWrongKey":"la chiave master non corrisponde","lockedKeyFileUnreadable":"il file della chiave non è leggibile","lockedStoreUnavailable":"le tabelle del portachiavi non sono leggibili","lockedNotInitialized":"ancora in avvio","lockedDecryptFailed":"un valore non è stato decifrato","locked":"Portachiavi bloccato: {{reason}}","resetPending_one":"Il portachiavi è stato reimpostato: {{count}} campo da reinserire","resetPending_other":"Il portachiavi è stato reimpostato: {{count}} campi da reinserire","resetDone":"Il portachiavi è stato reimpostato: ogni campo archiviato ha di nuovo un valore","sharesBackup":"La chiave master sta accanto al database nei backup dell’intero volume","recoveryKey":"Non è stata fatta alcuna copia di ripristino della chiave master","rotationPending":"La chiave master configurata non è ancora in uso","orphans_one":"{{count}} valore memorizzato a cui nessuna impostazione punta","orphans_other":"{{count}} valori memorizzati a cui nessuna impostazione punta"},"keychainRevealHost":{"forbidden":"Solo un amministratore può rivelare un segreto memorizzato.","failedWith":"Impossibile rivelare: {{message}}","failed":"Impossibile rivelare il valore memorizzato."},"assignmentRows":{"cameraFallback":"Camera {{id}}","auto":"Auto","pinTo":"Fissa → {{node}}"},"cameraActivity":{"active":"Attiva","recentlyActive":"Attiva di recente","inactive":"Inattiva"},"exportFormat":{"expired":"scaduto","inMinutes":"tra {{n}} min","inHours":"tra {{n}} h","inDays":"tra {{n}} g"},"maxCameras":{"label":"Camere massime","description":"Limite massimo di camere che il bilanciatore può assegnare a questo nodo.","unlimited":"Illimitato"},"cameraDisk":{"defaultRoot":"radice predefinita"},"aiProfileForm":{"temperature":"Temperatura","temperatureHint":"I gate di giudizio la fissano a 0 per ogni chiamata, indipendentemente dal profilo.","topP":"Top-p","topK":"Top-k","maxTokens":"Token di output massimi","contextLength":"Lunghezza del contesto","contextLengthHint":"Indicativo: il provider applica la propria finestra.","systemPrompt":"Prompt di sistema predefinito","systemPromptHint":"Un chiamante che invia il proprio prompt di sistema SOSTITUISCE questo.","timeoutTotal":"Totale (ms)","timeoutTotalHint":"L'intera generazione. L'unico limite di una chiamata non in streaming.","timeoutConnect":"Connessione (ms)","timeoutConnectHint":"L'handshake TCP — \\"la porta è almeno aperta\\".","timeoutFirstToken":"Primo token (ms)","timeoutFirstTokenHint":"Accettata ma silenziosa. Il caricamento a freddo di un modello ricade qui e può richiedere minuti.","timeoutIdle":"Inattività (ms)","timeoutIdleHint":"L'output è iniziato, poi si è fermato.","retry":"Riprova in caso di errore","retryHint":"La policy del singolo consumer prevale comunque: i gate delle notifiche non riprovano mai.","retryMaxAttempts":"Tentativi massimi","toolsEnabled":"Abilita gli strumenti","toolsEnabledHint":"Consente a questo profilo di chiamare strumenti. Nessuno strumento è ancora registrato.","generation":"Generazione","bounds":"Timeout e policy"}}`),history:{picker:{series:`Serie`,unit:`Unità`,subject:`Origine`,devices:`Dispositivi`,nodes:`Nodi`,room:`Stanza`,noRoom:`Nessuna stanza`,metricType:`Unità`,noUnit:`Stati e conteggi`,search:`Cerca dispositivo, stanza, metrica o nodo…`,searchLabel:`Cerca serie`,facets:`Filtri`,clear:`Azzera`,count:`{{count}} di {{max}} selezionate`,loading:`Lettura delle serie di ogni dispositivo…`,emptyFiltered:`Nessuna serie corrisponde a questi filtri.`,empty:`Ancora nulla di registrato.`,selectPage:`Seleziona tutte le serie di questa pagina`,title:`Serie`,wholeFrame:`Inquadratura intera`},page:{emptyTitle:`Scegli le serie da confrontare`,emptyHint:`Scegli fino a 24 serie a sinistra, o parti da un pannello qui sopra.`,readFailed:`Impossibile leggere la cronologia`,someFailed:`Alcune serie non sono state lette`,lines:`Misure`,energy:`Energia`,states:`Stati`,saveTitle:`Salva come pannello`,saveName:`Nome del pannello`,save:`Salva`,deleteTitle:`Elimina pannello`,deleteMessage:`Il pannello "{{name}}" viene rimosso dal tuo account.`,delete:`Elimina`,title:`Cronologia`,subtitle:`Ciò che dispositivi, nodi e archivi hanno registrato nel tempo, fianco a fianco.`,presenceUnknownTitle:`Impossibile raggiungere l’hub`,presenceUnknown:`L’hub non ha detto se la cronologia dei dispositivi è installata. Riprova tra poco.`,absentTitle:`La cronologia dei dispositivi non è attiva su questo hub`,absent:`Non viene registrato nulla finché l’addon di sistema device-history non è abilitato.`,panels:`Pannelli`,deleteNamed:`Elimina il pannello {{name}}`,overlay:`Sovrapposizione`,clear:`Azzera`,missing_one:`{{count}} serie selezionata non è più registrata.`,missing_other:`{{count}} serie selezionate non sono più registrate.`},panels:{energy:`Energia totale`,temperatures:`Temperature per stanza`,nodes:`Nodi del cluster`,storage:`Posizioni di archiviazione`},orphans:{deviceRemoved:`#{{id}} (rimosso)`,deviceId:`#{{id}}`,undeclared:`Non più dichiarata`,deviceGone:`Dispositivo rimosso`,colSeries:`Serie`,colReason:`Motivo`,colSpan:`Registrata`,colResult:`Esito`,deleted_one:`Eliminata · {{points}} punto`,deleted_other:`Eliminata · {{points}} punti`,refusedNotOrphan:`Mantenuta: non è più orfana`,refusedNotFound:`Già rimossa`,refusedFailed:`L'hub non è riuscito a eliminarla`,requestFailed:`Non inviata: {{message}}`,confirmTitle_one:`Elimina {{count}} serie`,confirmTitle_other:`Elimina {{count}} serie`,confirmMessage:`Ogni punto registrato di queste serie viene rimosso dall'hub. L'operazione non si può annullare.`,confirmLabel:`Elimina`,title:`Serie non più collegate a un dispositivo`,intro:`Nessuno registra più in queste serie: il loro dispositivo è stato rimosso, oppure nessuna capability le dichiara più. Seleziona quelle da eliminare.`,truncated:`Ci sono più serie scollegate di quelle elencate qui. Elimina queste, poi carica le altre.`,loadAgain:`Ricarica`,summary_one:`{{count}} serie eliminata ({{points}} punti), {{refused}} mantenute.`,summary_other:`{{count}} serie eliminate ({{points}} punti), {{refused}} mantenute.`,empty:`Ogni serie è collegata a un dispositivo.`,selectAll:`Seleziona tutte le serie elencate`,selected_one:`{{count}} selezionata`,selected_other:`{{count}} selezionate`,close:`Chiudi`,deleteSelected:`Elimina selezionate`,checkFailedTitle:`Impossibile verificare le serie scollegate`,noticeMore_one:`Più di {{count}} serie non è più collegata a un dispositivo.`,noticeMore_other:`Più di {{count}} serie non sono più collegate a un dispositivo.`,notice_one:`{{count}} serie non è più collegata a un dispositivo.`,notice_other:`{{count}} serie non sono più collegate a un dispositivo.`,review:`Rivedi`,since:`dal {{date}}`,colRaw:`Punti grezzi`,col5m:`5 min`,col1h:`1 h`,col1d:`1 giorno`}},releaseIdentity:{both:`{{product}} · server {{server}}`,serverOnly:`server {{version}}`,fallback:`v{{version}}`},helper:JSON.parse(`{"group":{"readings":"Letture","binary":"Sensori binari","actuators":"Attuatori","appliances":"Elettrodomestici","history":"Storico","math":"Calcoli"},"template":{"temperature":"Temperatura","temperatureSummary":"Media, minimo, massimo o totale di più sensori di temperatura.","humidity":"Umidità","humiditySummary":"Media, minimo, massimo o totale di più sensori di umidità.","pressure":"Pressione","pressureSummary":"Media, minimo, massimo o totale di più sensori di pressione.","illuminance":"Illuminamento","illuminanceSummary":"Media, minimo, massimo o totale di più sensori di luce.","power":"Potenza","powerSummary":"Totale, media, minimo o massimo di più letture di potenza.","energy":"Energia","energySummary":"Totale, media, minimo o massimo di più letture di energia.","battery":"Batteria","batterySummary":"Media, minimo o massimo della carica di più batterie.","numeric":"Numerico","numericSummary":"Media, minimo, massimo o totale di sensori che misurano la stessa cosa.","motion":"Movimento","motionSummary":"Acceso quando uno (o tutti) i sensori di movimento rilevano movimento.","contact":"Contatto","contactSummary":"Acceso quando uno (o tutti) i contatti sono aperti.","leak":"Perdita","leakSummary":"Acceso quando uno (o tutti) i sensori rilevano una perdita.","smoke":"Fumo","smokeSummary":"Acceso quando uno (o tutti) i sensori rilevano fumo.","occupancy":"Occupazione","occupancySummary":"Acceso quando uno (o tutti) i sensori segnalano una presenza.","binary":"Binario","binarySummary":"Acceso quando uno (o tutti) i sensori sono accesi.","switch":"Gruppo di interruttori","switchSummary":"Acceso se almeno uno lo è, oppure solo se lo sono tutti. I membri offline restano fuori da quella decisione e ricevono comunque il comando.","light":"Gruppo di luci","lightSummary":"Come un gruppo di interruttori. Luminosità e colore compaiono solo se ogni luce li ha.","appliance":"Elettrodomestico da una presa intelligente","applianceSummary":"Una lettura di potenza. In funzione finché la potenza resta sopra una soglia, abbastanza a lungo da non scambiare una pausa di lavaggio per la fine del ciclo.","statistic":"Statistiche","integral":"Energia dalla potenza","threshold":"Soglia","sum":"Somma","difference":"Differenza","ratio":"Rapporto","expression":"Espressione","derivative":"Variazione nel tempo","fan":"Ventilatore","cover":"Tapparella","valve":"Valvola","lock":"Serratura","media-player":"Lettore multimediale","climate":"Clima","fanSummary":"Come un gruppo di interruttori. Velocità, preset, direzione e oscillazione compaiono solo se ogni ventilatore le ha.","coverSummary":"Aperta se almeno una tapparella è aperta, oppure solo se lo sono tutte. Posizione e inclinazione compaiono solo se ogni tapparella le ha.","valveSummary":"Aperta se almeno una valvola è aperta, oppure solo se lo sono tutte. La posizione compare solo se ogni valvola la ha.","lockSummary":"Chiusa se almeno una serratura è chiusa, oppure solo se lo sono tutte. Aprire il gruppo chiede sempre una conferma.","media-playerSummary":"In riproduzione se almeno un lettore riproduce, oppure solo se lo fanno tutti. Il volume compare solo se ogni lettore lo ha.","climateSummary":"Attivo se almeno un dispositivo non è spento, oppure solo se lo sono tutti. Temperatura obiettivo e ventola compaiono solo se ogni dispositivo le ha."},"aggregate":{"mean":"Media","median":"Mediana","min":"Minimo","max":"Massimo","sum":"Somma","any":"Almeno uno","all":"Tutti"},"blank":"Composizione vuota","newHelper":"Nuovo helper","back":"Indietro","next":"Avanti","save":"Salva","step":{"template":"Scegli cosa riporta l'helper.","parameters":"Dagli un nome e scegli come combinare i membri.","members":"Scegli i membri.","appliance":"Dagli un nome e scegli l'elettrodomestico.","applianceMembers":"Scegli la lettura di potenza della presa.","historyParameters":"Scegli l'intervallo e dagli un nome.","historySource":"Scegli la lettura.","math":{"threshold":{"parameters":"Imposta i due limiti, i ritardi opzionali e un nome.","members":"Scegli la lettura da osservare."},"arithmetic":{"parameters":"Dagli un nome.","members":"Scegli le letture. Devono misurare la stessa grandezza."},"expression":{"parameters":"Scegli cosa pubblica e dagli un nome.","members":"Scegli le letture, dai loro un nome, poi scrivi la formula."},"derivative":{"parameters":"Scegli la finestra e l'unità di tempo e dagli un nome.","members":"Scegli la lettura, che deve avere uno storico."}}},"reducer":"Combina con","name":"Nome","room":"Stanza","pickMembers":"Membri","pickMembersHint":"Seleziona un dispositivo per vedere la lettura attuale.","maxMembers":"Un gruppo può avere al massimo {{max}} membri.","noUsableValue":"Questo dispositivo non riporta un valore utilizzabile da questo helper.","valueUnknown":"Sconosciuto","checking":"Controllo l'helper…","unreadable":"Questo helper non si può aprire come template.","statusTitle":"Gruppo","outputPending":"Lettura del valore…","outputUnavailable":"Impossibile leggere l'helper","noReading":"Nessuna lettura","on":"Attivo","off":"Spento","reporting":"{{included}} di {{total}} membri rispondono","reportingPending":"Controllo quanti membri rispondono…","reportingAbsent":"Il conteggio dei membri non è ancora arrivato.","excluded":"Esclusi","excludedPending":"Lettura di quali membri sono esclusi…","excludedUnnamed":"Alcuni membri sono esclusi e i loro nomi non sono in questa lettura.","offlineCounted":"I sensori offline restano fuori e vengono contati.","criterion":"Attivo quando","active":{"at-least-one":"Almeno uno è acceso","all":"Tutti sono accesi"},"sharedCaps":"Comandi in comune","sharedPending":"Controllo di cosa sa fare ogni membro.","sharedUnavailable":"Non è stato possibile leggere le capacità di un membro.","sharedNone":"Nessun comando opzionale è in comune a tutti i membri.","commandTitle":"Ultimo comando","commandNone":"Nessun comando inviato.","commandOk":"Inviato","commandFailed":"Non riuscito","cap":{"switch":"Interruttore","brightness":"Luminosità","color":"Colore","fan-control":"Controlli del ventilatore","cover":"Controlli della tapparella","valve":"Controlli della valvola","lock-control":"Controlli della serratura","media-player":"Controlli del lettore","climate-control":"Controlli del clima"},"mode":{"light-color-rgb":"Colore","light-color-hsv":"Tinta","light-color-mired":"Bianco"},"newComposition":"Nuova composizione","saveOpen":"Salva e apri il dispositivo","saveMore":"Salva e creane un altro","created":"<device>{{name}}</device> è stato creato.","supportedOperations":"Operazioni disponibili","detailsOf":"Dettagli di {{name}}","devicePending":"Il nuovo dispositivo non è ancora nell'elenco.","noTemplates":"Nessun tipo di helper è disponibile.","newTitle":{"temperature":"Nuovo sensore di temperatura","humidity":"Nuovo sensore di umidità","pressure":"Nuovo sensore di pressione","illuminance":"Nuovo sensore di luminosità","power":"Nuovo misuratore di potenza","energy":"Nuovo misuratore di energia","battery":"Nuovo sensore di batteria","numeric":"Nuovo sensore numerico","motion":"Nuovo sensore di movimento","contact":"Nuovo sensore di contatto","leak":"Nuovo sensore di perdite","smoke":"Nuovo sensore di fumo","occupancy":"Nuovo sensore di presenza","binary":"Nuovo sensore binario","switch":"Nuovo gruppo di interruttori","light":"Nuovo gruppo di luci","washer":"Nuova lavatrice","dryer":"Nuova asciugatrice","dishwasher":"Nuova lavastoviglie","statistic":"Nuove statistiche","integral":"Nuovo contatore di energia","threshold":"Nuova soglia","sum":"Nuova somma","difference":"Nuova differenza","ratio":"Nuovo rapporto","expression":"Nuova espressione","derivative":"Nuova variazione nel tempo","fan":"Nuovo gruppo di ventilatori","cover":"Nuovo gruppo di tapparelle","valve":"Nuovo gruppo di valvole","lock":"Nuovo gruppo di serrature","media-player":"Nuovo gruppo di lettori multimediali","climate":"Nuovo gruppo di clima"},"appliance":{"washer":"Lavatrice","dryer":"Asciugatrice","dishwasher":"Lavastoviglie"},"applianceType":"Elettrodomestico","threshold":"Soglia (W)","startDwell":"Parte dopo (min)","stopDwell":"Si ferma dopo (min)","detail":{"statistic":"Minimo, massimo, media pesata nel tempo, somma, conteggio o variazione su un intervallo, letti dallo storico. La somma è per un contatore; la somma di un valore istantaneo è l'integrale.","integral":"La potenza diventa energia. Una portata diventa un volume. Ogni altra lettura istantanea diventa un contatore in unità per secondo, che cresce fino all'azzeramento.","history":"La sorgente deve registrare lo storico. Un buco viene escluso e non è mai contato come zero. L'intervallo non può essere più lungo di quanto lo storico viene conservato.","threshold":"Si accende quando una lettura raggiunge il limite alto e si spegne quando scende al limite basso, e resta com'è nel mezzo per non lampeggiare. Ritardi opzionali attendono prima di ogni cambio.","sum":"Somma letture della stessa grandezza. Un ingresso offline o sconosciuto viene escluso e contato, mai letto come zero.","difference":"La prima lettura meno la seconda, della stessa grandezza. Se una delle due è sconosciuta lo è anche il risultato.","ratio":"La prima lettura divisa per la seconda, come numero puro. Una seconda lettura nulla o sconosciuta dà sconosciuto, mai infinito.","expression":"La tua formula su letture con nome, per quello che le altre schede non coprono.","expressionStale":"A differenza dei gruppi, un'espressione continua a usare l'ultimo valore di un ingresso quando va offline.","derivative":"Quanto velocemente una lettura sale o scende su una finestra, al secondo, al minuto o all'ora.","lockConfirm":"Aprire il gruppo chiede sempre una conferma e senza non viene inviato nulla."},"stat":"Statistica","statName":{"min":"Minimo","max":"Massimo","mean":"Media","sum":"Somma","count":"Conteggio","change":"Variazione"},"range":"Intervallo","rangeKind":{"rolling":"Scorrevole","calendar":"Calendario"},"span":"Durata","spanName":{"1h":"1 ora","24h":"24 ore","2d":"2 giorni","7d":"7 giorni","30d":"30 giorni","custom":"Personalizzata"},"period":"Periodo","periodName":{"today":"Oggi","yesterday":"Ieri","this-week":"Questa settimana","this-month":"Questo mese"},"reset":"Azzeramento","resetName":{"never":"Mai","daily":"Ogni giorno","weekly":"Ogni settimana","monthly":"Ogni mese"},"customMinutes":"Minuti","noHistory":"Questa lettura non ha uno storico, quindi non può essere la sorgente.","output":"Lettura","gaps":"{{count}} intervalli esclusi","hint":{"threshold":"Una sola lettura.","sum":"Due o più letture della stessa grandezza.","difference":"Esattamente due letture. La prima è quella da cui si sottrae.","ratio":"Esattamente due letture. La prima è divisa per la seconda."},"highEdge":"Accendi da questo valore in su","lowEdge":"Spegni da questo valore in giù","onDelay":"Attesa prima di accendere (secondi)","offDelay":"Attesa prima di spegnere (secondi)","edgesReversed":"Il valore di spegnimento è sopra quello di accensione.","per":"Variazione per","perName":{"second":"Secondo","minute":"Minuto","hour":"Ora"},"exprOutput":"Pubblica","exprOutputName":{"number":"Un numero","boolean":"Un sì o no"},"inputName":"Nome dell'ingresso","expr":"Formula","method":{"switch":{"setState":"Acceso o spento"},"brightness":{"setBrightness":"Luminosità"},"color":{"setColor":"Colore"},"fan-control":{"setPercentage":"Velocità","setPreset":"Preset","setDirection":"Direzione","setOscillating":"Oscillazione"},"cover":{"open":"Apri","close":"Chiudi","stop":"Ferma","setPosition":"Posizione","setTiltPosition":"Inclinazione"},"valve":{"open":"Apri","close":"Chiudi","setPosition":"Posizione"},"lock-control":{"lock":"Chiudi","unlock":"Apri"},"media-player":{"play":"Riproduci","pause":"Pausa","setVolume":"Volume"},"climate-control":{"setMode":"Modalità","setTarget":"Temperatura obiettivo","setFanMode":"Ventola"}},"state":{"cover":{"on":"Aperta","off":"Chiusa"},"valve":{"on":"Aperta","off":"Chiusa"},"lock":{"on":"Chiusa","off":"Aperta"},"media-player":{"on":"In riproduzione","off":"Non in riproduzione"},"climate":{"on":"Attivo","off":"Spento"}},"lockAll":"Chiudi tutte","unlockAll":"Apri tutte","unlockTitle":"Aprire tutte le serrature di questo gruppo?","unlockBody":"A ogni serratura del gruppo verrà ordinato di aprire. Una serratura non raggiungibile viene segnalata e le altre si aprono comunque.","unlockConfirm":"Apri tutte"}`),pageRequires:{unknownTitle:`Impossibile verificare se questa pagina è disponibile`,unknown:`L'hub non ha risposto al controllo. Ricarica la pagina per riprovare.`,absentTitle:`{{page}} non è installato`,absentDescription:`L'addon che fornisce questa pagina non è installato. Installalo da Sistema → Addon.`,openAddons:`Apri Addon`}},Q=`camstack_language`,$=typeof localStorage>`u`?null:localStorage,te=$?.getItem(Q)??`en`;X.use(e).init({resources:{en:{translation:Z},it:{translation:ee}},lng:te,fallbackLng:`en`,interpolation:{escapeValue:!1}}),X.on(`languageChanged`,e=>{$?.setItem(Q,e),typeof document<`u`&&(document.documentElement.lang=e)}),typeof document<`u`&&(document.documentElement.lang=X.language);var ne=X;export{A as n,ne as t};
|