diff --git a/.cursor/rules/frontend-always-use-translation-files.mdc b/.cursor/rules/frontend-always-use-translation-files.mdc new file mode 100644 index 000000000..35034069b --- /dev/null +++ b/.cursor/rules/frontend-always-use-translation-files.mdc @@ -0,0 +1,6 @@ +--- +globs: ["**/*.ts", "**/*.tsx"] +alwaysApply: false +--- + +Never write strings in the frontend directly, always write to and reference the relevant translations file. \ No newline at end of file diff --git a/.gitignore b/.gitignore index 8456d9be0..660a378b0 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ frigate/version.py web/build web/node_modules web/coverage +web/.env core !/web/**/*.ts .idea/* diff --git a/LICENSE b/LICENSE index bd7c18a7f..0c1fc1f53 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License -Copyright (c) 2020 Blake Blackshear +Copyright (c) 2025 Frigate LLC (Frigate™) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +SOFTWARE. diff --git a/Makefile b/Makefile index 2baac5aad..d1427b6df 100644 --- a/Makefile +++ b/Makefile @@ -14,6 +14,7 @@ push-boards: $(BOARDS:%=push-%) version: echo 'VERSION = "$(VERSION)-$(COMMIT_HASH)"' > frigate/version.py + echo 'VITE_GIT_COMMIT_HASH=$(COMMIT_HASH)' > web/.env local: version docker buildx build --target=frigate --file docker/main/Dockerfile . \ diff --git a/README.md b/README.md index 35e8cb7e9..b1eab6c53 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,10 @@
-
+
annotation_offset per ajustar-ho.",
+ "millisecondsToOffset": "Millisegons per l'òfset de detecció d'anotacions per. Per defecte: 0",
+ "tips": "CONSELL: Imagineu-vos que hi ha un clip d'esdeveniment amb una persona caminant d'esquerra a dreta. Si el quadre delimitador de la cronologia de l'esdeveniment està constantment a l'esquerra de la persona, aleshores s'hauria de disminuir el valor. De la mateixa manera, si una persona camina d'esquerra a dreta i el quadre delimitador està constantment per davant de la persona, aleshores s'hauria d'augmentar el valor.",
+ "toast": {
+ "success": "L'Òfset d'anotació per a {{camera}} s'ha desat al fitxer de configuració. Reinicieu Frigate per aplicar els canvis."
+ }
+ }
+ },
+ "carousel": {
+ "previous": "Diapositiva anterior",
+ "next": "Dispositiva posterior"
+ }
}
}
diff --git a/web/public/locales/ca/views/exports.json b/web/public/locales/ca/views/exports.json
index dfe5de963..dec2726ff 100644
--- a/web/public/locales/ca/views/exports.json
+++ b/web/public/locales/ca/views/exports.json
@@ -13,5 +13,11 @@
"error": {
"renameExportFailed": "Error al canviar el nom de l’exportació: {{errorMessage}}"
}
+ },
+ "tooltip": {
+ "shareExport": "Comparteix l'exportació",
+ "downloadVideo": "Baixa el vídeo",
+ "editName": "Edita el nom",
+ "deleteExport": "Suprimeix l'exportació"
}
}
diff --git a/web/public/locales/ca/views/faceLibrary.json b/web/public/locales/ca/views/faceLibrary.json
index 356691315..f99629bdb 100644
--- a/web/public/locales/ca/views/faceLibrary.json
+++ b/web/public/locales/ca/views/faceLibrary.json
@@ -12,13 +12,13 @@
"collections": "Col·leccions",
"train": {
"empty": "No hi ha intents recents de reconeixement de rostres",
- "title": "Entrenar",
- "aria": "Seleccionar entrenament"
+ "title": "Reconeixements recents",
+ "aria": "Selecciona els reconeixements recents"
},
"description": {
- "addFace": "Guia per a agregar una nova colecció a la biblioteca de rostres.",
+ "addFace": "Afegiu una col·lecció nova a la biblioteca de cares pujant la vostra primera imatge.",
"placeholder": "Introduïu un nom per a aquesta col·lecció",
- "invalidName": "Nom no vàlid. Els noms només poden incloure lletres, números, espais, apòstrofs, guions baixos i guionets."
+ "invalidName": "Nom no vàlid. Els noms només poden incloure lletres, números, espais, apòstrofs, guions baixos i guions."
},
"documentTitle": "Biblioteca de rostres - Frigate",
"uploadFaceImage": {
@@ -54,7 +54,7 @@
"selectImage": "Siusplau, selecciona un fixer d'imatge."
},
"maxSize": "Mida màxima: {{size}}MB",
- "dropInstructions": "Arrastra una imatge aquí, o fes clic per a selccionar-ne una"
+ "dropInstructions": "Arrossegueu i deixeu anar o enganxeu una imatge aquí, o feu clic per seleccionar"
},
"button": {
"uploadImage": "Pujar imatge",
diff --git a/web/public/locales/ca/views/live.json b/web/public/locales/ca/views/live.json
index f4d20fc70..f98b33d62 100644
--- a/web/public/locales/ca/views/live.json
+++ b/web/public/locales/ca/views/live.json
@@ -86,8 +86,8 @@
"disable": "Amaga estadístiques de la transmissió"
},
"manualRecording": {
- "title": "Gravació sota demanda",
- "tips": "Iniciar un event manual basat en els paràmetres de retenció de gravació per aquesta càmera.",
+ "title": "Sota demanda",
+ "tips": "Baixeu una instantània o inicieu un esdeveniment manual basat en la configuració de retenció d'enregistrament d'aquesta càmera.",
"playInBackground": {
"label": "Reproduir en segon pla",
"desc": "Habilita aquesta opció per a continuar la transmissió quan el reproductor està amagat."
@@ -130,6 +130,9 @@
"playInBackground": {
"label": "Reproduir en segon pla",
"tips": "Habilita aquesta opció per a contiuar la transmissió tot i que el reproductor estigui ocult."
+ },
+ "debug": {
+ "picker": "Selecció de stream no disponible en mode debug. La vista debug sempre fa servir el stream assignat pel rol de detecció."
}
},
"streamingSettings": "Paràmetres de transmissió",
@@ -167,5 +170,16 @@
"transcription": {
"enable": "Habilita la transcripció d'àudio en temps real",
"disable": "Deshabilita la transcripció d'àudio en temps real"
+ },
+ "snapshot": {
+ "takeSnapshot": "Descarregar una instantània",
+ "noVideoSource": "No hi ha cap font de video per fer una instantània.",
+ "captureFailed": "Error capturant una instantània.",
+ "downloadStarted": "Inici de baixada d'instantània."
+ },
+ "noCameras": {
+ "title": "No s'ha configurat cap càmera",
+ "description": "Comenceu connectant una càmera a Frigate.",
+ "buttonText": "Afegeix una càmera"
}
}
diff --git a/web/public/locales/ca/views/search.json b/web/public/locales/ca/views/search.json
index 3f5940348..dec453728 100644
--- a/web/public/locales/ca/views/search.json
+++ b/web/public/locales/ca/views/search.json
@@ -55,12 +55,12 @@
"searchFor": "Buscar {{inputValue}}",
"button": {
"clear": "Netejar cerca",
- "save": "Desar la cerca",
- "delete": "Suprimeix la recerca desada",
- "filterInformation": "Informació de filtre",
+ "save": "Desa la cerca",
+ "delete": "Elimina la recerca desada",
+ "filterInformation": "Informació del filtre",
"filterActive": "Filtres actius"
},
- "trackedObjectId": "ID d'objecte rastrejat",
+ "trackedObjectId": "ID de l'objecte rastrejat",
"placeholder": {
"search": "Cercar…"
},
diff --git a/web/public/locales/ca/views/settings.json b/web/public/locales/ca/views/settings.json
index 900c6b3c0..36a041510 100644
--- a/web/public/locales/ca/views/settings.json
+++ b/web/public/locales/ca/views/settings.json
@@ -9,7 +9,9 @@
"masksAndZones": "Editor de màscares i zones - Frigate",
"general": "Paràmetres Generals - Frigate",
"frigatePlus": "Paràmetres de Frigate+ - Frigate",
- "notifications": "Paràmetres de notificació - Frigate"
+ "notifications": "Paràmetres de notificació - Frigate",
+ "cameraManagement": "Gestionar càmeres - Frigate",
+ "cameraReview": "Configuració Revisió de Càmeres - Frigate"
},
"menu": {
"ui": "Interfície d'usuari",
@@ -21,7 +23,10 @@
"debug": "Depuració",
"frigateplus": "Frigate+",
"enrichments": "Enriquiments",
- "triggers": "Disparadors"
+ "triggers": "Disparadors",
+ "cameraManagement": "Gestió",
+ "cameraReview": "Revisió",
+ "roles": "Rols"
},
"dialog": {
"unsavedChanges": {
@@ -44,6 +49,10 @@
"playAlertVideos": {
"label": "Reproduir vídeos d’alerta",
"desc": "Per defecte, les alertes recents al tauler en directe es reprodueixen com a vídeos petits en bucle. Desactiva aquesta opció per mostrar només una imatge estàtica de les alertes recents en aquest dispositiu/navegador."
+ },
+ "displayCameraNames": {
+ "label": "Mostra sempre els noms de la càmera",
+ "desc": "Mostra sempre els noms de les càmeres en un xip al tauler de visualització en directe multicàmera."
}
},
"storedLayouts": {
@@ -109,7 +118,8 @@
"mustBeAtLeastTwoCharacters": "El nom de la zona ha de contenir com a mínim 2 caràcters.",
"mustNotContainPeriod": "El nom de la zona no pot contenir punts.",
"alreadyExists": "Ja existeix una zona amb aquest nom per a aquesta càmera.",
- "mustNotBeSameWithCamera": "El nom de la zona no pot ser el mateix que el nom de la càmera."
+ "mustNotBeSameWithCamera": "El nom de la zona no pot ser el mateix que el nom de la càmera.",
+ "mustHaveAtLeastOneLetter": "El nom de la zona ha de tenir almenys una lletra."
}
},
"inertia": {
@@ -158,7 +168,7 @@
"name": {
"inputPlaceHolder": "Introduïu un nom…",
"title": "Nom",
- "tips": "El nom ha de tenir almenys 2 caràcters i no pot coincidir amb el nom d'una càmera ni amb el d'una altra zona."
+ "tips": "El nom ha de tenir almenys 2 caràcters, ha de tenir almenys una lletra, i no ha de ser el nom d'una càmera o una altra zona."
},
"label": "Zones",
"desc": {
@@ -689,7 +699,9 @@
},
"actions": {
"alert": "Marcar com Alerta",
- "notification": "Enviar Notificació"
+ "notification": "Enviar Notificació",
+ "sub_label": "Afegeix una subetiqueta",
+ "attribute": "Afegeix un atribut"
},
"dialog": {
"createTrigger": {
@@ -707,25 +719,28 @@
"form": {
"name": {
"title": "Nom",
- "placeholder": "Entrar el nom del disparador",
+ "placeholder": "Anomena aquest activador",
"error": {
- "minLength": "El nom ha de tenir almenys 2 caràcters de llargada.",
- "invalidCharacters": "El nom només pot contenir lletres, números, guions i guinons baixos.",
+ "minLength": "El camp ha de tenir almenys 2 caràcters.",
+ "invalidCharacters": "El camp només pot contenir lletres, números, guions baixos i guions.",
"alreadyExists": "El disparador amb aquest nom ja existeix per aquesta càmera."
- }
+ },
+ "description": "Introduïu un nom o una descripció únics per a identificar aquest activador"
},
"enabled": {
"description": "Activar o desactivar aquest disparador"
},
"type": {
"title": "Tipus",
- "placeholder": "Selecciona un tipus de disparador"
+ "placeholder": "Selecciona un tipus de disparador",
+ "description": "Activa quan es detecta una descripció similar d'un objecte rastrejat",
+ "thumbnail": "Activa quan es detecti una miniatura d'objecte rastrejada similar"
},
"content": {
"title": "Contingut",
- "imagePlaceholder": "Selecciona una imatge",
+ "imagePlaceholder": "Selecciona una miniatura",
"textPlaceholder": "Entra el contingut de text",
- "imageDesc": "Selecciona una imatge per disparar aquesta acció quan una imatge similar sigui detectada.",
+ "imageDesc": "Només es mostren les 100 miniatures més recents. Si no podeu trobar la miniatura desitjada, reviseu els objectes anteriors a Explora i configureu un activador des del menú.",
"textDesc": "Entra el text per disparar aquesta acció quan es detecti una descripció d'objecte a rastrejar similar.",
"error": {
"required": "Contigunt requerit."
@@ -736,14 +751,20 @@
"error": {
"min": "El llindar ha de ser mínim 0",
"max": "El llindar ha de ser máxim 1"
- }
+ },
+ "desc": "Estableix el llindar de similitud per a aquest activador. Un llindar més alt significa que es requereix una coincidència més propera per disparar el disparador."
},
"actions": {
"title": "Accions",
- "desc": "Per defecte, Frigate dispara un missatge MQTT per tots els disparadors. Tria una acció adicional per realitzar quan aquest disparador dispari.",
+ "desc": "Per defecte, Frigate dispara un missatge MQTT per a tots els activadors. Subetiquetes afegeix el nom de l'activador a l'etiqueta de l'objecte. Els atributs són metadades cercables emmagatzemades per separat a les metadades de l'objecte rastrejat.",
"error": {
"min": "S'ha de seleccionar una acció com a mínim."
}
+ },
+ "friendly_name": {
+ "title": "Nom amistós",
+ "placeholder": "Nom o descripció d'aquest disparador",
+ "description": "Un nom opcional amistós o text descriptiu per a aquest activador."
}
}
},
@@ -761,10 +782,31 @@
},
"documentTitle": "Disparadors",
"management": {
- "title": "Gestió de disparadors",
+ "title": "Activadors",
"desc": "Gestionar els disparadors de {{camera}}. Usa les tipus de miniatures per disparar miniatures similars a l'objecte a seguir seleccionat, i el tipus de descripció per disparar en cas de descripcions similars a l'especificada."
},
- "addTrigger": "Afegir disaprador"
+ "addTrigger": "Afegir disaprador",
+ "semanticSearch": {
+ "desc": "La cerca semàntica ha d'estar activada per a utilitzar els activadors.",
+ "title": "La cerca semàntica està desactivada"
+ },
+ "wizard": {
+ "title": "Crea un activador",
+ "step1": {
+ "description": "Configura la configuració bàsica per al vostre activador."
+ },
+ "step2": {
+ "description": "Configura el contingut que activarà aquesta acció."
+ },
+ "step3": {
+ "description": "Configura el llindar i les accions d'aquest activador."
+ },
+ "steps": {
+ "nameAndType": "Nom i tipus",
+ "configureData": "Configura les dades",
+ "thresholdAndActions": "Llindar i accions"
+ }
+ }
},
"roles": {
"dialog": {
@@ -816,7 +858,9 @@
"createRole": "Rol {{role}} creat exitosament",
"updateCameras": "Càmeres actualitzades per al rol {{role}}",
"deleteRole": "Rol {{role}} eliminat exitosament",
- "userRolesUpdated": "{{count}} usuari(s) asignats a aquest rol s'han actualitzat a 'visor', i tenen accés a totes les càmeres."
+ "userRolesUpdated_one": "{{count}} usuari(s) asignats a aquest rol s'han actualitzat a 'visor', i tenen accés a totes les càmeres.",
+ "userRolesUpdated_many": "",
+ "userRolesUpdated_other": ""
},
"error": {
"createRoleFailed": "Error al crear el rol: {{errorMessage}}",
@@ -825,5 +869,231 @@
"userUpdateFailed": "Error a l'actualitzar els ros d'usuari: {{errorMessage}}"
}
}
+ },
+ "cameraWizard": {
+ "title": "Afegir C àmera",
+ "description": "Seguiu els passos de sota per afegir una nova càmera a la instal·lació.",
+ "steps": {
+ "nameAndConnection": "Nom i connexió",
+ "streamConfiguration": "Configuració de stream",
+ "validationAndTesting": "Validació i proves"
+ },
+ "step1": {
+ "cameraBrand": "Marca de la càmera",
+ "description": "Introduïu els detalls de la càmera i proveu la connexió.",
+ "cameraName": "Nom de la càmera",
+ "cameraNamePlaceholder": "p. ex., vista general de la porta davantera o de la barra posterior",
+ "host": "Adreça de l'amfitrió/IP",
+ "port": "Port",
+ "username": "Nom d'usuari",
+ "usernamePlaceholder": "Opcional",
+ "password": "Contrasenya",
+ "passwordPlaceholder": "Opcional",
+ "selectTransport": "Selecciona el protocol de transport",
+ "brandInformation": "Informació de marca",
+ "brandUrlFormat": "Per a càmeres amb el format d'URL RTSP com: {{exampleUrl}}",
+ "customUrlPlaceholder": "rtsp://usuari:contrasenya@host:port/ruta",
+ "testConnection": "Prova la connexió",
+ "testSuccess": "Prova de connexió correcta!",
+ "testFailed": "Ha fallat la prova de connexió. Si us plau, comproveu la vostra entrada i torneu-ho a provar.",
+ "streamDetails": "Detalls del flux",
+ "warnings": {
+ "noSnapshot": "No s'ha pogut obtenir una instantània del flux configurat."
+ },
+ "errors": {
+ "brandOrCustomUrlRequired": "Seleccioneu una marca de càmera amb host/IP o trieu 'Altres' amb un URL personalitzat",
+ "nameRequired": "Es requereix el nom de la càmera",
+ "nameLength": "El nom de la càmera ha de tenir 64 caràcters o menys",
+ "invalidCharacters": "El nom de la càmera conté caràcters no vàlids",
+ "nameExists": "El nom de la càmera ja existeix",
+ "brands": {
+ "reolink-rtsp": "No es recomana Reolink RST. Es recomana habilitar HTTP a la configuració de la càmera i reiniciar l'assistent de la càmera."
+ },
+ "customUrlRtspRequired": "Els URL personalitzats han de començar amb \"rtsp://\". Es requereix configuració manual per a fluxos de càmera no RTSP."
+ },
+ "selectBrand": "Seleccioneu la marca de la càmera per a la plantilla d'URL",
+ "customUrl": "URL de flux personalitzat",
+ "docs": {
+ "reolink": "https://docs.frigate.video/configuration/camera_specific.html#reolink-cameras"
+ },
+ "testing": {
+ "probingMetadata": "S'estan provant les metadades de la càmera...",
+ "fetchingSnapshot": "S'està recuperant la instantània de la càmera..."
+ }
+ },
+ "save": {
+ "failure": "SS'ha produït un error en desar {{cameraName}}.",
+ "success": "S'ha desat correctament la càmera nova {{cameraName}}."
+ },
+ "testResultLabels": {
+ "resolution": "Resolució",
+ "video": "Vídeo",
+ "audio": "Àudio",
+ "fps": "FPS"
+ },
+ "commonErrors": {
+ "noUrl": "Proporcioneu un URL de flux vàlid",
+ "testFailed": "Ha fallat la prova de flux: {{error}}"
+ },
+ "step2": {
+ "description": "Configura els rols de flux i afegeix fluxos addicionals per a la càmera.",
+ "streamsTitle": "Fluxos de la càmera",
+ "addStream": "Afegeix un flux",
+ "addAnotherStream": "Afegeix un altre flux",
+ "streamTitle": "Flux {{number}}",
+ "streamUrl": "URL del flux",
+ "url": "URL",
+ "resolution": "Resolució",
+ "selectResolution": "Selecciona la resolució",
+ "quality": "Qualitat",
+ "selectQuality": "Selecciona la qualitat",
+ "roleLabels": {
+ "detect": "Detecció d'objectes",
+ "record": "Enregistrament",
+ "audio": "Àudio"
+ },
+ "testStream": "Prova la connexió",
+ "testSuccess": "Prova de flux amb èxit!",
+ "testFailed": "Ha fallat la prova del flux",
+ "testFailedTitle": "Ha fallat la prova",
+ "connected": "Connectat",
+ "notConnected": "No connectat",
+ "featuresTitle": "Característiques",
+ "go2rtc": "Redueix les connexions a la càmera",
+ "detectRoleWarning": "Almenys un flux ha de tenir el rol de \"detecte\" per continuar.",
+ "rolesPopover": {
+ "title": "Rols de flux",
+ "detect": "Canal principal per a la detecció d'objectes.",
+ "record": "Desa els segments del canal de vídeo basats en la configuració.",
+ "audio": "Canal per a la detecció basada en àudio."
+ },
+ "featuresPopover": {
+ "title": "Característiques del flux",
+ "description": "Utilitzeu el restreaming go2rtc per reduir les connexions a la càmera."
+ },
+ "roles": "Rols",
+ "streamUrlPlaceholder": "rtsp://usuari:contrasenya@host:port/ruta"
+ },
+ "step3": {
+ "none": "Cap",
+ "error": "Error",
+ "saveAndApply": "Desa una càmera nova",
+ "saveError": "Configuració no vàlida. Si us plau, comproveu la configuració.",
+ "issues": {
+ "title": "Validació del flux",
+ "videoCodecGood": "El còdec de vídeo és {{codec}}.",
+ "audioCodecGood": "El còdec d'àudio és {{codec}}.",
+ "noAudioWarning": "No s'ha detectat cap àudio per a aquest flux, els enregistraments no tindran àudio.",
+ "audioCodecRecordError": "El còdec d'àudio AAC és necessari per a suportar l'àudio en els enregistraments.",
+ "audioCodecRequired": "Es requereix un flux d'àudio per admetre la detecció d'àudio.",
+ "restreamingWarning": "Reduir les connexions a la càmera per al flux de registre pot augmentar lleugerament l'ús de la CPU.",
+ "dahua": {
+ "substreamWarning": "El substream 1 està bloquejat a una resolució baixa. Moltes càmeres Dahua / Amcrest / EmpireTech suporten subfluxos addicionals que han d'estar habilitats a la configuració de la càmera. Es recomana comprovar i utilitzar aquests corrents si estan disponibles."
+ },
+ "hikvision": {
+ "substreamWarning": "El substream 1 està bloquejat a una resolució baixa. Moltes càmeres Hikvision suporten subfluxos addicionals que han d'estar habilitats a la configuració de la càmera. Es recomana comprovar i utilitzar aquests corrents si estan disponibles."
+ },
+ "resolutionHigh": "Una resolució de {{resolution}} pot causar un ús més gran dels recursos.",
+ "resolutionLow": "Una resolució de {{resolution}} pot ser massa baixa per a la detecció fiable d'objectes petits."
+ },
+ "description": "Validació i anàlisi final abans de desar la nova càmera. Connecta cada flux abans de desar-lo.",
+ "validationTitle": "Validació del flux",
+ "connectAllStreams": "Connecta tots els fluxos",
+ "reconnectionSuccess": "S'ha reconnectat correctament.",
+ "reconnectionPartial": "Alguns fluxos no s'han pogut tornar a connectar.",
+ "streamUnavailable": "La vista prèvia del flux no està disponible",
+ "reload": "Torna a carregar",
+ "connecting": "Connectant...",
+ "streamTitle": "Flux {{number}}",
+ "valid": "Vàlid",
+ "failed": "Ha fallat",
+ "notTested": "No provat",
+ "connectStream": "Connecta",
+ "connectingStream": "Connectant",
+ "disconnectStream": "Desconnecta",
+ "estimatedBandwidth": "Amplada de banda estimad",
+ "roles": "Rols",
+ "streamValidated": "El flux {{number}} s'ha validat correctament",
+ "streamValidationFailed": "Ha fallat la validació del flux {{number}}",
+ "ffmpegModule": "Usa el mode de compatibilitat del flux",
+ "ffmpegModuleDescription": "Si el flux no es carrega després de diversos intents, proveu d'activar-ho. Quan està activat, Frigate utilitzarà el mòdul ffmpeg amb go2rtc. Això pot proporcionar una millor compatibilitat amb alguns fluxos de càmera."
+ }
+ },
+ "cameraManagement": {
+ "title": "Gestiona les càmeres",
+ "addCamera": "Afegeix una càmera nova",
+ "editCamera": "Edita la càmera:",
+ "selectCamera": "Selecciona una càmera",
+ "backToSettings": "Torna a la configuració de la càmera",
+ "streams": {
+ "title": "Habilita / Inhabilita les càmeres",
+ "desc": "Inhabilita temporalment una càmera fins que es reiniciï la fragata. La inhabilitació d'una càmera atura completament el processament de Frigate dels fluxos d'aquesta càmera. La detecció, l'enregistrament i la depuració no estaran disponibles.annotation_offset field can be used to adjust this.",
+ "desc": "This data comes from your camera's detect feed but is overlayed on images from the the record feed. It is unlikely that the two streams are perfectly in sync. As a result, the bounding box and the footage will not line up perfectly. You can use this setting to offset the annotations forward or backward in time to better align them with the recorded footage.",
"millisecondsToOffset": "Milliseconds to offset detect annotations by. Default: 0",
- "tips": "TIP: Imagine there is an event clip with a person walking from left to right. If the event timeline bounding box is consistently to the left of the person then the value should be decreased. Similarly, if a person is walking from left to right and the bounding box is consistently ahead of the person then the value should be increased.",
+ "tips": "Lower the value if the video playback is ahead of the boxes and path points, and increase the value if the video playback is behind them. This value can be negative.",
"toast": {
"success": "Annotation offset for {{camera}} has been saved to the config file. Restart Frigate to apply your changes."
}
@@ -102,7 +103,7 @@
"regenerate": "A new description has been requested from {{provider}}. Depending on the speed of your provider, the new description may take some time to regenerate.",
"updatedSublabel": "Successfully updated sub label.",
"updatedLPR": "Successfully updated license plate.",
- "audioTranscription": "Successfully requested audio transcription."
+ "audioTranscription": "Successfully requested audio transcription. Depending on the speed of your Frigate server, the transcription may take some time to complete."
},
"error": {
"regenerate": "Failed to call {{provider}} for a new description: {{errorMessage}}",
@@ -168,9 +169,9 @@
"label": "Download snapshot",
"aria": "Download snapshot"
},
- "viewObjectLifecycle": {
- "label": "View object lifecycle",
- "aria": "Show the object lifecycle"
+ "viewTrackingDetails": {
+ "label": "View tracking details",
+ "aria": "Show the tracking details"
},
"findSimilar": {
"label": "Find similar",
@@ -194,12 +195,18 @@
},
"deleteTrackedObject": {
"label": "Delete this tracked object"
+ },
+ "showObjectDetails": {
+ "label": "Show object path"
+ },
+ "hideObjectDetails": {
+ "label": "Hide object path"
}
},
"dialog": {
"confirmDelete": {
"title": "Confirm Delete",
- "desc": "Deleting this tracked object removes the snapshot, any saved embeddings, and any associated object lifecycle entries. Recorded footage of this tracked object in History view will NOT be deleted.{{label}} ?",
- "ask_a": "Est-ce que cet objet est un(e) {{label}} ?",
- "ask_full": "Est-ce-que cet objet est un(e) {{translatedLabel}} ?"
+ "label": "Confirmez cette étiquette pour Frigate+.",
+ "ask_an": "Cet objet est-il un(e) {{label}} ?",
+ "ask_a": "Cet objet est-il un(e) {{label}} ?",
+ "ask_full": "Cet objet est-il un(e) {{translatedLabel}} ?"
}
}
},
@@ -61,25 +61,25 @@
"selectOrExport": "Sélectionner ou exporter",
"toast": {
"error": {
- "failed": "Échec du démarrage de l'export : {{error}}",
- "endTimeMustAfterStartTime": "L'heure de fin doit être postérieure à l'heure de début",
- "noVaildTimeSelected": "La plage horaire sélectionnée n'est pas valide"
+ "failed": "Échec du démarrage de l'exportation : {{error}}",
+ "endTimeMustAfterStartTime": "L'heure de fin doit être postérieure à l'heure de début.",
+ "noVaildTimeSelected": "La plage horaire sélectionnée n'est pas valide."
},
- "success": "Exportation démarrée avec succès. Consultez le fichier dans le dossier /exports."
+ "success": "Exportation démarrée avec succès. Consultez le fichier sur la page des exportations."
},
"select": "Sélectionner",
"name": {
- "placeholder": "Nommer l'export"
+ "placeholder": "Nommer l'exportation"
},
"export": "Exporter",
"fromTimeline": {
- "saveExport": "Enregistrer l'export",
- "previewExport": "Prévisualiser l'export"
+ "saveExport": "Enregistrer l'exportation",
+ "previewExport": "Aperçu de l'exportation"
}
},
"search": {
"saveSearch": {
- "desc": "Donnez un nom à cette recherche enregistrée.",
+ "desc": "Saisissez un nom pour cette recherche enregistrée.",
"label": "Enregistrer la recherche",
"success": "La recherche ({{searchName}}) a été enregistrée.",
"button": {
@@ -88,7 +88,7 @@
}
},
"overwrite": "{{searchName}} existe déjà. L'enregistrement écrasera la recherche existante.",
- "placeholder": "Saisissez un nom pour votre recherche"
+ "placeholder": "Saisissez un nom pour votre recherche."
}
},
"streaming": {
@@ -102,32 +102,34 @@
},
"showStats": {
"label": "Afficher les statistiques du flux",
- "desc": "Activez cette option pour montrer les statistiques de diffusion en incrustation sur le flux vidéo de la caméra."
+ "desc": "Activez cette option pour afficher les statistiques de diffusion en incrustation sur le flux vidéo de la caméra."
},
"debugView": "Affichage de débogage"
},
"recording": {
"confirmDelete": {
"desc": {
- "selected": "Êtes-vous sûr(e) de vouloir supprimer toutes les vidéos enregistrées associées à cet élément de la revue d'événements ? détection de la caméra {{cameraName}}. Vérifiez le journal d'erreurs."
},
- "livePlayerRequiredIOSVersion": "iOS 17.1 ou une version supérieure est requis pour ce type de flux en direct.",
- "cameraDisabled": "La caméra est désactivée",
+ "livePlayerRequiredIOSVersion": "iOS 17.1 ou une version supérieure est requise pour ce type de flux en direct.",
+ "cameraDisabled": "La caméra est désactivée.",
"stats": {
"streamType": {
"title": "Type de flux :",
@@ -37,7 +37,7 @@
"title": "Images perdues :"
},
"decodedFrames": "Images décodées :",
- "droppedFrameRate": "Proportion d'images perdues :",
+ "droppedFrameRate": "Taux d'images perdues :",
"totalFrames": "Total images :"
},
"toast": {
diff --git a/web/public/locales/fr/objects.json b/web/public/locales/fr/objects.json
index d959a8e42..9c9d5a6cf 100644
--- a/web/public/locales/fr/objects.json
+++ b/web/public/locales/fr/objects.json
@@ -9,17 +9,17 @@
"boat": "Bateau",
"traffic_light": "Feu de circulation",
"fire_hydrant": "Bouche d'incendie",
- "street_sign": "Plaque de rue",
+ "street_sign": "Panneau de signalisation",
"parking_meter": "Parcmètre",
"bench": "Banc",
"bird": "Oiseau",
- "cat": "chat",
+ "cat": "Chat",
"stop_sign": "Panneau de stop",
"dog": "Chien",
"horse": "Cheval",
"sheep": "Mouton",
"cow": "Vache",
- "elephant": "Eléphant",
+ "elephant": "Éléphant",
"bear": "Ours",
"zebra": "Zèbre",
"hat": "Chapeau",
@@ -27,10 +27,10 @@
"suitcase": "Valise",
"frisbee": "Frisbee",
"skis": "Skis",
- "snowboard": "Surf des neiges",
- "sports_ball": "Ballon des sports",
+ "snowboard": "Snowboard",
+ "sports_ball": "Ballon de sport",
"kite": "Cerf-volant",
- "baseball_bat": "Batte de base-ball",
+ "baseball_bat": "Batte de baseball",
"umbrella": "Parapluie",
"giraffe": "Girafe",
"eye_glasses": "Lunettes",
@@ -42,7 +42,7 @@
"baseball_glove": "Gant de baseball",
"skateboard": "Skateboard",
"surfboard": "Planche de surf",
- "tennis_racket": "Raquette de Tennis",
+ "tennis_racket": "Raquette de tennis",
"plate": "Assiette",
"cup": "Tasse",
"banana": "Banane",
@@ -63,7 +63,7 @@
"toaster": "Grille-pain",
"book": "Livre",
"teddy_bear": "Ours en peluche",
- "blender": "Mixer",
+ "blender": "Mixeur",
"toothbrush": "Brosse à dents",
"hair_brush": "Brosse à cheveux",
"vehicle": "Véhicule",
@@ -92,7 +92,7 @@
"refrigerator": "Réfrigérateur",
"bark": "Aboiement",
"oven": "Four",
- "scissors": "Paire de ciseaux",
+ "scissors": "Ciseaux",
"toilet": "Toilettes",
"carrot": "Carotte",
"bed": "Lit",
@@ -100,11 +100,11 @@
"fork": "Fourchette",
"squirrel": "Écureuil",
"microwave": "Micro-ondes",
- "hair_dryer": "Sèche cheveux",
+ "hair_dryer": "Sèche-cheveux",
"bowl": "Bol",
"spoon": "Cuillère",
"sandwich": "Sandwich",
- "sink": "Lavabo",
+ "sink": "Évier",
"broccoli": "Brocoli",
"knife": "Couteau",
"nzpost": "NZPost",
diff --git a/web/public/locales/fr/views/classificationModel.json b/web/public/locales/fr/views/classificationModel.json
new file mode 100644
index 000000000..7d7d93ba3
--- /dev/null
+++ b/web/public/locales/fr/views/classificationModel.json
@@ -0,0 +1,164 @@
+{
+ "documentTitle": "Modèles de classification",
+ "button": {
+ "deleteClassificationAttempts": "Supprimer les images de classification",
+ "renameCategory": "Renommer la classe",
+ "deleteCategory": "Supprimer la classe",
+ "deleteImages": "Supprimer les images",
+ "trainModel": "Entraîner le modèle",
+ "addClassification": "Ajouter une classification",
+ "deleteModels": "Supprimer les modèles",
+ "editModel": "Modifier le modèle"
+ },
+ "toast": {
+ "success": {
+ "deletedCategory": "Classe supprimée",
+ "deletedImage": "Images supprimées",
+ "categorizedImage": "Image classifiée avec succès",
+ "trainedModel": "Modèle entraîné avec succès.",
+ "trainingModel": "L'entraînement du modèle a démarré avec succès.",
+ "deletedModel_one": "{{count}} modèle supprimé avec succès",
+ "deletedModel_many": "{{count}} modèles supprimés avec succès",
+ "deletedModel_other": "{{count}} modèles supprimés avec succès",
+ "updatedModel": "Configuration du modèle mise à jour avec succès"
+ },
+ "error": {
+ "deleteImageFailed": "Échec de la suppression : {{errorMessage}}",
+ "deleteCategoryFailed": "Échec de la suppression de la classe : {{errorMessage}}",
+ "categorizeFailed": "Échec de la catégorisation de l'image : {{errorMessage}}",
+ "trainingFailed": "Échec du démarrage de l'entraînement du modèle : {{errorMessage}}",
+ "deleteModelFailed": "Impossible de supprimer le modèle : {{errorMessage}}",
+ "updateModelFailed": "Impossible de mettre à jour le modèle : {{errorMessage}}"
+ }
+ },
+ "deleteCategory": {
+ "title": "Supprimer la classe",
+ "desc": "Êtes-vous sûr de vouloir supprimer la classe {{name}} ? Cette action supprimera définitivement toutes les images associées et nécessitera un réentraînement du modèle."
+ },
+ "deleteDatasetImages": {
+ "title": "Supprimer les images du jeu de données",
+ "desc": "Êtes-vous sûr de vouloir supprimer {{count}} images du jeu de données {{dataset}} ? Cette action est irréversible et nécessitera un réentraînement du modèle."
+ },
+ "deleteTrainImages": {
+ "title": "Supprimer les images d'entraînement",
+ "desc": "Êtes-vous sûr de vouloir supprimer {{count}} images ? Cette action est irréversible."
+ },
+ "renameCategory": {
+ "title": "Renommer la classe",
+ "desc": "Saisissez un nouveau nom pour {{name}}. Vous devrez réentraîner le modèle pour que le changement de nom prenne effet."
+ },
+ "description": {
+ "invalidName": "Nom invalide. Les noms ne peuvent contenir que des lettres, des chiffres, des espaces, des apostrophes, des traits de soulignement et des tirets."
+ },
+ "train": {
+ "title": "Classifications récentes",
+ "aria": "Sélectionner des classifications récentes",
+ "titleShort": "Récent"
+ },
+ "categories": "Classes",
+ "createCategory": {
+ "new": "Créer une nouvelle classe"
+ },
+ "categorizeImageAs": "Classifier comme :",
+ "categorizeImage": "Classifier l'image",
+ "noModels": {
+ "object": {
+ "title": "Aucun modèle de classification d'objets",
+ "description": "Créer un modèle personnalisé pour classifier les objets détectés",
+ "buttonText": "Créer un modèle d'objets"
+ },
+ "state": {
+ "title": "Aucun modèle de classification d'états",
+ "description": "Créer un modèle personnalisé pour surveiller et classifier les changements d'état dans des zones de caméra spécifiques",
+ "buttonText": "Créer un modèle d'états"
+ }
+ },
+ "wizard": {
+ "title": "Créer une nouvelle classification",
+ "steps": {
+ "nameAndDefine": "Nom et définition",
+ "stateArea": "Zone d'état",
+ "chooseExamples": "Choisir des exemples"
+ },
+ "step1": {
+ "description": "Les modèles d'état surveillent des zones de caméra fixes pour détecter des changements (par ex., porte ouverte/fermée). Les modèles d'objets ajoutent des classifications aux objets détectés (par ex., animaux connus, livreurs, etc.).",
+ "name": "Nom",
+ "namePlaceholder": "Saisissez un nom de modèle.",
+ "type": "Type",
+ "typeState": "État",
+ "typeObject": "Objet",
+ "objectLabel": "Étiquette d'objet",
+ "objectLabelPlaceholder": "Sélectionnez un type d'objet.",
+ "classificationType": "Type de classification",
+ "classificationTypeTip": "En savoir plus sur les types de classification",
+ "classificationTypeDesc": "Les sous-étiquettes ajoutent du texte supplémentaire à l'étiquette d'objet (par ex., « Personne : UPS »). Les attributs sont des métadonnées recherchables stockées séparément dans les métadonnées de l'objet.",
+ "classificationSubLabel": "Sous-étiquette",
+ "classificationAttribute": "Attribut",
+ "classes": "Classes",
+ "classesTip": "En savoir plus sur les classes",
+ "classesStateDesc": "Définissez les différents états que votre zone de caméra peut avoir. Par exemple : « ouvert » et « fermé » pour une porte de garage.",
+ "classesObjectDesc": "Définissez les différentes catégories pour classifier les objets détectés. Par exemple : « livreur », « résident », « inconnu » pour la classification des personnes.",
+ "classPlaceholder": "Saisissez le nom de la classe.",
+ "errors": {
+ "nameRequired": "Le nom du modèle est requis.",
+ "nameLength": "Le nom du modèle ne doit pas dépasser 64 caractères.",
+ "nameOnlyNumbers": "Le nom du modèle ne peut pas contenir uniquement des chiffres.",
+ "classRequired": "Au moins une classe est requise.",
+ "classesUnique": "Les noms de classe doivent être uniques.",
+ "stateRequiresTwoClasses": "Les modèles d'état nécessitent au moins deux classes.",
+ "objectLabelRequired": "Veuillez sélectionner une étiquette d'objet.",
+ "objectTypeRequired": "Veuillez sélectionner un type de classification."
+ },
+ "states": "États"
+ },
+ "step2": {
+ "description": "Sélectionnez les caméras et définissez la zone à surveiller pour chaque caméra. Le modèle classifiera l'état de ces zones.",
+ "cameras": "Caméras",
+ "selectCamera": "Sélectionner une caméra",
+ "noCameras": "Cliquez sur + pour ajouter des caméras.",
+ "selectCameraPrompt": "Sélectionnez une caméra dans la liste pour définir sa zone de surveillance."
+ },
+ "step3": {
+ "selectImagesPrompt": "Sélectionner toutes les images contenant : {{className}}",
+ "selectImagesDescription": "Cliquez sur les images pour les sélectionner. Cliquez sur Continuer lorsque vous avez terminé avec cette classe.",
+ "generating": {
+ "title": "Génération d'images d'exemple en cours",
+ "description": "Frigate récupère des images représentatives à partir de vos enregistrements. Cela peut prendre un moment..."
+ },
+ "training": {
+ "title": "Entraînement du modèle",
+ "description": "Votre modèle est en cours d'entraînement en arrière-plan. Fermez cette boîte de dialogue. Votre modèle se lancera dès que l'entraînement sera terminé."
+ },
+ "retryGenerate": "Réessayer la génération",
+ "noImages": "Aucune image d'exemple générée",
+ "classifying": "Classification et entraînement en cours...",
+ "trainingStarted": "Entraînement démarré avec succès",
+ "errors": {
+ "noCameras": "Aucune caméra n'est configurée.",
+ "noObjectLabel": "Aucune étiquette d'objet sélectionnée",
+ "generateFailed": "Échec de la génération des exemples : {{error}}",
+ "generationFailed": "Échec de la génération. Veuillez réessayer.",
+ "classifyFailed": "Échec de la classification des images : {{error}}"
+ },
+ "generateSuccess": "Génération des images d'exemple réussie"
+ }
+ },
+ "deleteModel": {
+ "title": "Supprimer le modèle de classification",
+ "single": "Voulez-vous vraiment supprimer {{name}} ? Cela supprimera définitivement toutes les données associées, y compris les images et les données d'entraînement. Cette action est irréversible.",
+ "desc": "Voulez-vous vraiment supprimer {{count}} modèle(s) ? Cela supprimera définitivement toutes les données associées, y compris les images et les données d'entraînement. Cette action est irréversible."
+ },
+ "menu": {
+ "objects": "Objets",
+ "states": "États"
+ },
+ "details": {
+ "scoreInfo": "Le score représente la moyenne de la confiance de classification pour toutes les détections de cet objet."
+ },
+ "edit": {
+ "title": "Modifier le modèle de classification",
+ "descriptionState": "Modifier les classes pour ce modèle de classification d'état. Les modifications nécessiteront un réentraînement du modèle.",
+ "descriptionObject": "Modifier le type d'objet et le type de classification pour ce modèle de classification d'objet",
+ "stateClassesInfo": "Note : La modification des classes d'état nécessite un réentraînement du modèle avec les classes mises à jour."
+ }
+}
diff --git a/web/public/locales/fr/views/configEditor.json b/web/public/locales/fr/views/configEditor.json
index ce4c3292e..0ab9b2c40 100644
--- a/web/public/locales/fr/views/configEditor.json
+++ b/web/public/locales/fr/views/configEditor.json
@@ -2,7 +2,7 @@
"configEditor": "Éditeur de configuration",
"documentTitle": "Éditeur de configuration - Frigate",
"copyConfig": "Copier la configuration",
- "saveOnly": "Enregistrer seulement",
+ "saveOnly": "Enregistrer uniquement",
"saveAndRestart": "Enregistrer et redémarrer",
"toast": {
"success": {
diff --git a/web/public/locales/fr/views/events.json b/web/public/locales/fr/views/events.json
index cf4f5e142..c32ffec3c 100644
--- a/web/public/locales/fr/views/events.json
+++ b/web/public/locales/fr/views/events.json
@@ -2,22 +2,22 @@
"detections": "Détections",
"motion": {
"label": "Mouvement",
- "only": "Mouvement seulement"
+ "only": "Mouvement uniquement"
},
"alerts": "Alertes",
"allCameras": "Toutes les caméras",
"empty": {
- "alert": "Il n'y a aucune alerte à passer en revue",
- "detection": "Il n'y a aucune détection à passer en revue",
+ "alert": "Il n'y a aucune alerte à examiner.",
+ "detection": "Il n'y a aucune détection à examiner.",
"motion": "Aucune donnée de mouvement trouvée"
},
"timeline": "Chronologie",
"events": {
"label": "Événements",
"aria": "Sélectionner les événements",
- "noFoundForTimePeriod": "Aucun événement trouvé pour cette plage de temps."
+ "noFoundForTimePeriod": "Aucun événement n'a été trouvé pour cette plage de temps."
},
- "documentTitle": "Revue d'événements -Frigate",
+ "documentTitle": "Événements - Frigate",
"recordings": {
"documentTitle": "Enregistrements - Frigate"
},
@@ -25,17 +25,36 @@
"last24Hours": "Dernières 24 heures"
},
"timeline.aria": "Sélectionner une chronologie",
- "markAsReviewed": "Marqué comme passé en revue",
+ "markAsReviewed": "Marquer comme vérifié",
"newReviewItems": {
- "button": "Nouveaux éléments à passer en revue",
- "label": "Afficher les nouveaux éléments de la revue d'événements"
+ "button": "Nouveaux événements à examiner",
+ "label": "Afficher les nouveaux événements"
},
"camera": "Caméra",
- "markTheseItemsAsReviewed": "Marquer ces éléments comme passés en revue",
+ "markTheseItemsAsReviewed": "Marquer ces éléments comme vérifiés",
"selected": "{{count}} sélectionné(s)",
"selected_other": "{{count}} sélectionné(s)",
"selected_one": "{{count}} sélectionné(s)",
"detected": "détecté",
"suspiciousActivity": "Activité suspecte",
- "threateningActivity": "Activité menaçante"
+ "threateningActivity": "Activité menaçante",
+ "detail": {
+ "noDataFound": "Aucun détail à examiner",
+ "aria": "Activer/désactiver la vue détaillée",
+ "trackedObject_one": "objet",
+ "trackedObject_other": "objets",
+ "noObjectDetailData": "Aucun détail d'objet disponible",
+ "label": "Détail",
+ "settings": "Paramètres de la vue Détail",
+ "alwaysExpandActive": {
+ "title": "Toujours développer l'élément actif",
+ "desc": "Toujours développer les détails de l'objet de l'événement actif si disponibles"
+ }
+ },
+ "objectTrack": {
+ "trackedPoint": "Point suivi",
+ "clickToSeek": "Cliquez pour atteindre ce moment."
+ },
+ "zoomIn": "Zoom avant",
+ "zoomOut": "Zoom arrière"
}
diff --git a/web/public/locales/fr/views/explore.json b/web/public/locales/fr/views/explore.json
index 064a71a37..015d7560b 100644
--- a/web/public/locales/fr/views/explore.json
+++ b/web/public/locales/fr/views/explore.json
@@ -5,17 +5,17 @@
"title": "L'exploration est indisponible",
"embeddingsReindexing": {
"estimatedTime": "Temps restant estimé :",
- "finishingShortly": "Termine bientôt",
- "context": "L'exploration peut être utilisée une fois la réindexation des représentations numériques des objets suivis terminée.",
+ "finishingShortly": "Bientôt fini",
+ "context": "L'exploration peut être utilisée une fois la réindexation des embeddings des objets suivis terminée.",
"startingUp": "Démarrage…",
"step": {
- "thumbnailsEmbedded": "Miniatures intégrées : ",
- "descriptionsEmbedded": "Descriptions intégrées : ",
+ "thumbnailsEmbedded": "Embeddings des miniatures : ",
+ "descriptionsEmbedded": "Embeddings des descriptions : ",
"trackedObjectsProcessed": "Objets suivis traités : "
}
},
"downloadingModels": {
- "context": "Frigate télécharge les modèles de représentations numériques nécessaires pour prendre en charge la fonctionnalité de recherche sémantique. Cette opération peut prendre plusieurs minutes selon la vitesse de votre connexion réseau.",
+ "context": "Frigate télécharge les modèles d'embeddings nécessaires pour prendre en charge la fonctionnalité de recherche sémantique. Cette opération peut prendre plusieurs minutes selon la vitesse de votre connexion réseau.",
"setup": {
"visionModelFeatureExtractor": "Extracteur de caractéristiques de modèle de vision",
"textTokenizer": "Tokeniseur de texte",
@@ -24,50 +24,50 @@
},
"tips": {
"documentation": "Lire la documentation",
- "context": "Une fois les modèles téléchargés, il est conseillé de réindexer vos objets suivis."
+ "context": "Une fois les modèles téléchargés, il est conseillé de réindexer les embeddings de vos objets suivis."
},
- "error": "Une erreur est survenue. Vérifier les journaux Frigate."
+ "error": "Une erreur est survenue. Vérifiez les journaux Frigate."
}
},
"details": {
"timestamp": "Horodatage",
"item": {
- "title": "Détails de l'élément de la revue d'événements",
+ "title": "Détails de l'événement",
"button": {
- "share": "Partager cet élément de la revue d'événements",
+ "share": "Partager cet événement",
"viewInExplore": "Afficher dans Explorer"
},
"toast": {
"success": {
"regenerate": "Une nouvelle description a été demandée à {{provider}}. Selon la vitesse de votre fournisseur, la régénération de la nouvelle description peut prendre un certain temps.",
- "updatedSublabel": "Sous-libellé mis à jour avec succès.",
- "updatedLPR": "Plaque d'immatriculation mise à jour avec succès.",
- "audioTranscription": "Requête de la transcription audio réussie."
+ "updatedSublabel": "Sous-étiquette mise à jour avec succès",
+ "updatedLPR": "Plaque d'immatriculation mise à jour avec succès",
+ "audioTranscription": "Transcription audio demandée avec succès"
},
"error": {
"regenerate": "Échec de l'appel de {{provider}} pour une nouvelle description : {{errorMessage}}",
- "updatedSublabelFailed": "Échec de la mise à jour du sous-libellé : {{errorMessage}}",
+ "updatedSublabelFailed": "Échec de la mise à jour de la sous-étiquette : {{errorMessage}}",
"updatedLPRFailed": "Échec de la mise à jour de la plaque d'immatriculation : {{errorMessage}}",
- "audioTranscription": "Échec de la requête de transcription audio : {{errorMessage}}"
+ "audioTranscription": "Échec de la demande de transcription audio : {{errorMessage}}"
}
},
"tips": {
- "mismatch_one": "{{count}} objet indisponible a été détecté et intégré dans cet élément de la revue d'événements. Cet objet n'a pas été qualifié comme une alerte ou une détection, ou a déjà été nettoyé / supprimé.",
- "mismatch_many": "{{count}} objets indisponibles ont été détectés et intégrés dans cet élément de la revue d'événements. Ces objets n'ont pas été qualifiés comme une alerte ou une détection, ou ont déjà été nettoyés / supprimés.",
- "mismatch_other": "{{count}} objets indisponibles ont été détectés et intégrés dans cet élément de la revue d'événements. Ces objets n'ont pas été qualifiés comme une alerte ou une détection, ou ont déjà été nettoyés / supprimés.",
- "hasMissingObjects": "Ajustez votre configuration si vous souhaitez que Frigate enregistre les objets suivis pour les libellés suivants : {{objects}}"
+ "mismatch_one": "{{count}} objet indisponible a été détecté et intégré dans cet événement. Cet objet n'a pas été qualifié comme une alerte ou une détection, ou a déjà été nettoyé / supprimé.",
+ "mismatch_many": "{{count}} objets indisponibles ont été détectés et intégrés dans cet événement. Ces objets n'ont pas été qualifiés comme une alerte ou une détection, ou ont déjà été nettoyés / supprimés.",
+ "mismatch_other": "{{count}} objets indisponibles ont été détectés et intégrés dans cet événement. Ces objets n'ont pas été qualifiés comme une alerte ou une détection, ou ont déjà été nettoyés / supprimés.",
+ "hasMissingObjects": "Ajustez votre configuration si vous souhaitez que Frigate enregistre les objets suivis pour les étiquettes suivantes : {{objects}}"
},
- "desc": "Détails de l'élément de la revue d'événements"
+ "desc": "Détails de l'événement"
},
- "label": "Libellé",
+ "label": "Étiquette",
"editSubLabel": {
- "title": "Modifier le sous-libellé",
- "desc": "Saisissez un nouveau sous-libellé pour {{label}}",
- "descNoLabel": "Entrer un nouveau sous-libellé pour cet objet suivi"
+ "title": "Modifier la sous-étiquette",
+ "desc": "Saisissez une nouvelle sous-étiquette pour {{label}}.",
+ "descNoLabel": "Saisissez une nouvelle sous-étiquette pour cet objet suivi."
},
"topScore": {
"label": "Meilleur score",
- "info": "Le score le plus élevé est le score médian le plus haut pour l'objet suivi ; il peut donc différer du score affiché sur la miniature du résultat de recherche."
+ "info": "Le meilleur score correspond au score médian le plus élevé de l'objet suivi, il peut donc différer du score affiché sur la miniature du résultat de recherche."
},
"objects": "Objets",
"button": {
@@ -86,8 +86,8 @@
"regenerateFromThumbnails": "Générer à nouveau à partir des miniatures",
"editLPR": {
"title": "Modifier la plaque d'immatriculation",
- "desc": "Saisissez une nouvelle valeur de plaque d'immatriculation pour {{label}}",
- "descNoLabel": "Saisir une nouvelle valeur de plaque d'immatriculation pour cet objet suivi"
+ "desc": "Saisissez une nouvelle valeur de plaque d'immatriculation pour {{label}}.",
+ "descNoLabel": "Saisissez une nouvelle valeur de plaque d'immatriculation pour cet objet suivi."
},
"recognizedLicensePlate": "Plaque d'immatriculation reconnue",
"estimatedSpeed": "Vitesse estimée",
@@ -109,7 +109,8 @@
"details": "détails",
"video": "vidéo",
"object_lifecycle": "cycle de vie de l'objet",
- "snapshot": "instantané"
+ "snapshot": "instantané",
+ "thumbnail": "Miniature"
},
"objectLifecycle": {
"title": "Cycle de vie de l'objet",
@@ -120,8 +121,8 @@
"autoTrackingTips": "Les positions des cadres englobants seront imprécises pour les caméras à suivi automatique.",
"lifecycleItemDesc": {
"visible": "{{label}} détecté",
- "entered_zone": "{{label}} est entré dans {{zones}}",
- "stationary": "{{label}} est devenu stationnaire",
+ "entered_zone": "{{label}} est entré dans {{zones}}.",
+ "stationary": "{{label}} est devenu stationnaire.",
"attribute": {
"other": "{{label}} reconnu comme {{attribute}}",
"faceOrLicense_plate": "{{attribute}} détecté pour {{label}}"
@@ -129,7 +130,7 @@
"gone": "{{label}} parti",
"heard": "{{label}} entendu",
"external": "{{label}} détecté",
- "active": "{{label}} est devenu actif",
+ "active": "{{label}} est devenu actif.",
"header": {
"zones": "Zones",
"area": "Aire",
@@ -139,7 +140,7 @@
"annotationSettings": {
"title": "Paramètres d'annotation",
"showAllZones": {
- "title": "Montrer toutes les zones",
+ "title": "Afficher toutes les zones",
"desc": "Afficher systématiquement les zones sur les images quand des objets y sont entrés"
},
"offset": {
@@ -175,8 +176,8 @@
"label": "Visualiser le cycle de vie de l'objet"
},
"viewInHistory": {
- "label": "Afficher dans l'historique",
- "aria": "Afficher dans l'historique"
+ "label": "Afficher dans la chronologie",
+ "aria": "Afficher dans la chronologie"
},
"downloadVideo": {
"label": "Télécharger la vidéo",
@@ -196,12 +197,22 @@
"audioTranscription": {
"label": "Transcrire",
"aria": "Demander une transcription audio"
+ },
+ "showObjectDetails": {
+ "label": "Afficher le parcours de l'objet"
+ },
+ "hideObjectDetails": {
+ "label": "Masquer le parcours de l'objet"
+ },
+ "viewTrackingDetails": {
+ "label": "Voir les détails du suivi",
+ "aria": "Afficher les détails du suivi"
}
},
"dialog": {
"confirmDelete": {
"title": "Confirmer la suppression",
- "desc": "La suppression de cet objet suivi supprime l'instantané, les représentations numériques enregistrées et les entrées du cycle de vie de l'objet associé. Les images enregistrées de cet objet suivi dans la vue Historique NE seront PAS supprimées.cameras:front_door label:person before:01012024 time_range:3:00PM-4:00PM ",
"step": "clean_copy soient activés dans votre configuration.",
- "title": "Configuration de l'instantané",
+ "desc": "La soumission à Frigate+ nécessite à la fois que les instantanés et les instantanés clean_copy soient activés dans votre configuration.",
+ "title": "Configuration des instantanés",
"table": {
"snapshots": "Instantanés",
"camera": "Caméra",
- "cleanCopySnapshots": "clean_copy Instantanés"
+ "cleanCopySnapshots": "Instantanés clean_copy"
},
"cleanCopyWarning": "Certaines caméras ont des instantanés activés, mais la copie propre est désactivée. Vous devez activer clean_copy dans votre configuration d'instantanés pour pouvoir envoyer les images de ces caméras à Frigate+."
},
@@ -167,7 +176,7 @@
"supportedDetectors": "Détecteurs pris en charge",
"loading": "Chargement des informations du modèle…",
"title": "Informations sur le modèle",
- "trainDate": "Date d'entrainement",
+ "trainDate": "Date d'entraînement",
"error": "Échec du chargement des informations du modèle",
"availableModels": "Modèles disponibles",
"dimensions": "Dimensions",
@@ -183,7 +192,7 @@
"error": "Échec de l'enregistrement des modifications de configuration : {{errorMessage}}"
},
"restart_required": "Redémarrage requis (modèle Frigate+ changé)",
- "unsavedChanges": "Modifications de paramètres de Frigate+ non enregistrés"
+ "unsavedChanges": "Modifications de paramètres de Frigate+ non enregistrées"
},
"classification": {
"title": "Paramètres de classification",
@@ -327,7 +336,8 @@
"mustNotBeSameWithCamera": "Le nom de la zone ne doit pas être le même que le nom de la caméra.",
"mustNotContainPeriod": "Le nom de la zone ne doit pas contenir de points.",
"hasIllegalCharacter": "Le nom de la zone contient des caractères interdits.",
- "alreadyExists": "Une zone portant ce nom existe déjà pour cette caméra."
+ "alreadyExists": "Une zone portant ce nom existe déjà pour cette caméra.",
+ "mustHaveAtLeastOneLetter": "Le nom de la zone doit comporter au moins une lettre."
}
},
"distance": {
@@ -351,7 +361,7 @@
},
"snapPoints": {
"true": "Points d'accrochage",
- "false": "Ne cassez pas les points"
+ "false": "Ne pas réunir les points"
}
},
"loiteringTime": {
@@ -366,7 +376,7 @@
},
"speed": {
"error": {
- "mustBeGreaterOrEqualTo": "Le seuil de vitesse soit être égal ou supérieur à 0.1."
+ "mustBeGreaterOrEqualTo": "Le seuil de vitesse doit être supérieur ou égal à 0.1."
}
}
},
@@ -380,12 +390,12 @@
"edit": "Modifier une zone",
"name": {
"title": "Nom",
- "inputPlaceHolder": "Entrer un nom…",
- "tips": "Le nom doit comporter au moins 2 caractères et ne doit pas être le nom d'une caméra ou d'une autre zone."
+ "inputPlaceHolder": "Saisissez un nom.",
+ "tips": "Le nom doit comporter au moins 2 caractères, dont une lettre, et ne doit pas être le nom d'une caméra ou d'une autre zone."
},
"loiteringTime": {
"desc": "Définit une durée minimale en secondes pendant laquelle l'objet doit rester dans la zone pour qu'elle s'active. Par défaut : 0",
- "title": "Temps de latence"
+ "title": "Temps de maraudage"
},
"speedEstimation": {
"title": "Estimation de la vitesse",
@@ -411,7 +421,7 @@
"point_other": "{{count}} points",
"label": "Zones",
"inertia": {
- "desc": "Spécifie le nombre d'images qu'un objet doit avoir dans une zone avant d'être considéré comme faisant partie de la zone. Par défaut : 3",
+ "desc": "Spécifie le nombre d'images pendant lesquelles un objet doit être dans une zone avant d'être considéré comme y étant. Par défaut : 3",
"title": "Inertie"
},
"toast": {
@@ -426,7 +436,7 @@
},
"motionMasks": {
"label": "Masque de mouvement",
- "documentTitle": "Modifier masque de mouvement - Frigate",
+ "documentTitle": "Modifier le masque de mouvement - Frigate",
"context": {
"documentation": "Lire la documentation",
"title": "Les masques de mouvement servent à empêcher les mouvements indésirables de déclencher la détection (par exemple : branches d'arbres, horodatage des caméras). Ils doivent être utilisés avec parcimonie, car un surmasquage complique le suivi des objets."
@@ -454,7 +464,7 @@
"add": "Nouveau masque de mouvement"
},
"objectMasks": {
- "label": "Masques de l'objet",
+ "label": "Masques d'objet",
"desc": {
"documentation": "Documentation",
"title": "Les masques de filtrage d'objets sont utilisés pour filtrer les faux positifs pour un type d'objet donné en fonction de l'emplacement."
@@ -476,7 +486,7 @@
"point_many": "{{count}} points",
"point_other": "{{count}} points",
"add": "Ajouter un masque d'objet",
- "documentTitle": "Modifier le masque de l'objet - Frigate",
+ "documentTitle": "Modifier le masque d'objet - Frigate",
"context": "Les masques de filtrage d'objets sont utilisés pour filtrer les faux positifs pour un type d'objet donné en fonction de l'emplacement."
},
"filter": {
@@ -498,7 +508,7 @@
"title": "Réglage de la détection de mouvement",
"desc": {
"documentation": "Lisez le guide de réglage de mouvement",
- "title": "Frigate utilise la détection de mouvement comme première ligne de contrôle pour voir s'il se passe quelque chose dans l'image qui mérite d'être vérifié avec la détection d'objet."
+ "title": "Frigate utilise la détection de mouvement comme première ligne de contrôle pour voir s'il se passe quelque chose dans l'image qui mérite d'être vérifié avec la détection d'objets."
},
"Threshold": {
"title": "Seuil",
@@ -521,12 +531,12 @@
"debugging": "Débogage",
"objectList": "Liste d'objets",
"boundingBoxes": {
- "title": "Cadres de délimitation",
+ "title": "Cadres de détection",
"colors": {
- "label": "Couleurs du cadre de délimitation d'un objet",
- "info": "Cadres de mouvement
Des cadres rouges seront superposées sur les zones de l'image où un mouvement est actuellement détecté
" + "tips": "Cadres de mouvement
Des cadres rouges seront superposés sur les zones de l'image où un mouvement est actuellement détecté
" }, "regions": { "title": "Régions", - "desc": "Afficher une boîte de la région d'intérêt envoyée au détecteur d'objet", + "desc": "Afficher un cadre de la région d'intérêt envoyée au détecteur d'objet", "tips": "Cadres de région
Des cadres verts lumineux seront superposés sur les zones d'intérêt de l'image qui sont envoyées au détecteur d'objets.
" }, "objectShapeFilterDrawing": { @@ -564,9 +574,9 @@ "detectorDesc": "Frigate utilise vos détecteurs ({{detectors}}) pour détecter les objets dans le flux vidéo de votre caméra.", "desc": "La vue de débogage affiche en temps réel les objets suivis et leurs statistiques. La liste des objets affiche un résumé différé des objets détectés.", "paths": { - "title": "Chemins", - "desc": "Montrer les points notables du chemin de l'objet suivi", - "tips": "Chemins
Les lignes et les cercles indiqueront les points notables des déplacements de l'objet suivi pendant son cycle de vie.
" + "title": "Trajets", + "desc": "Afficher les points notables du trajet de l'objet suivi", + "tips": "Trajets
Les lignes et les cercles indiqueront les points notables où l'objet suivi s'est déplacé pendant son cycle de vie.
" }, "audio": { "title": "Audio", @@ -575,7 +585,7 @@ "currentRMS": "RMS actuel", "currentdbFS": "dbFS actuel" }, - "openCameraWebUI": "Ouvre l'interface Web de {{camera}}" + "openCameraWebUI": "Ouvrir l'interface Web de {{camera}}" }, "users": { "title": "Utilisateurs", @@ -612,34 +622,34 @@ "form": { "user": { "title": "Nom d'utilisateur", - "placeholder": "Entrez le nom d'utilisateur", + "placeholder": "Saisir le nom d'utilisateur", "desc": "Seules les lettres, les chiffres, les points et les traits de soulignement sont autorisés." }, "password": { "strength": { "weak": "Faible", - "title": "Sécurité du mot de passe : ", + "title": "Niveau de sécurité du mot de passe : ", "medium": "Moyen", "strong": "Fort", "veryStrong": "Très fort" }, "match": "Les mots de passe correspondent", - "notMatch": "Les mots de passe ne correspondent pas", - "placeholder": "Entrez le mot de passe", + "notMatch": "Les mots de passe ne correspondent pas.", + "placeholder": "Saisir le mot de passe", "title": "Mot de passe", "confirm": { - "title": "Confirmez le mot de passe", - "placeholder": "Confirmez le mot de passe" + "title": "Confirmer le mot de passe", + "placeholder": "Confirmer le mot de passe" } }, "newPassword": { "title": "Nouveau mot de passe", - "placeholder": "Entrez le nouveau mot de passe", + "placeholder": "Saisissez le nouveau mot de passe.", "confirm": { - "placeholder": "Ré-entrez le nouveau mot de passe" + "placeholder": "Confirmez le nouveau mot de passe." } }, - "usernameIsRequired": "Le nom d'utilisateur est requis", + "usernameIsRequired": "Nom d'utilisateur requis", "passwordIsRequired": "Mot de passe requis" }, "deleteUser": { @@ -649,7 +659,7 @@ }, "passwordSetting": { "updatePassword": "Mettre à jour le mot de passe pour {{username}}", - "setPassword": "Définir le mot de passe", + "setPassword": "Configurer un mot de passe", "desc": "Créez un mot de passe fort pour sécuriser ce compte.", "doNotMatch": "Les mots de passe ne correspondent pas", "cannotBeEmpty": "Le mot de passe ne peut être vide" @@ -662,7 +672,7 @@ "admin": "Administrateur", "adminDesc": "Accès complet à l'ensemble des fonctionnalités.", "viewer": "Observateur", - "viewerDesc": "Limité aux tableaux de bord Direct, Revue d'événements, Explorer et Exports.", + "viewerDesc": "Limité aux tableaux de bord Direct, Événements, Explorer et Exports.", "customDesc": "Rôle personnalisé avec accès spécifique à la caméra" }, "select": "Sélectionnez un rôle" @@ -670,7 +680,7 @@ "createUser": { "title": "Créer un nouvel utilisateur", "desc": "Ajoutez un nouveau compte utilisateur et spécifiez un rôle pour accéder aux zones de l'interface utilisateur Frigate.", - "usernameOnlyInclude": "Le nom d'utilisateur ne peut inclure que des lettres, des chiffres, . ou _", + "usernameOnlyInclude": "Le nom d'utilisateur ne peut inclure que des lettres, des chiffres, des points (.) ou des traits de soulignement (_).", "confirmPassword": "Veuillez confirmer votre mot de passe" } } @@ -679,26 +689,26 @@ "title": "Paramètres d'enrichissements", "birdClassification": { "title": "Identification des oiseaux", - "desc": "L'identification des oiseaux est réalisée à l'aide d'un modèle TensorFlow quantifié. Lorsqu'un oiseau est reconnu, son nom commun est automatiquement ajouté comme sous-libellé. Cette information est intégréesà l'interface utilisateur, aux filtres de recherche et aux notifications." + "desc": "L'identification des oiseaux est réalisée à l'aide d'un modèle TensorFlow quantifié. Lorsqu'un oiseau est reconnu, son nom commun est automatiquement ajouté comme sous-étiquette. Cette information est intégrée à l'interface utilisateur, aux filtres de recherche et aux notifications." }, "semanticSearch": { "title": "Recherche sémantique", "readTheDocumentation": "Lire la documentation", "reindexNow": { "label": "Réindexer maintenant", - "desc": "La réindexation va régénérer les représentations numériques pour tous les objets suivis. Ce processus s'exécute en arrière-plan et peut saturer votre processeur et prendre un temps considérable, en fonction du nombre d'objets suivis.", - "confirmTitle": "Confirmez la réindexation", + "desc": "La réindexation va régénérer les embeddings pour tous les objets suivis. Ce processus s'exécute en arrière-plan et peut saturer votre processeur et prendre un temps considérable en fonction du nombre d'objets suivis.", + "confirmTitle": "Confirmer la réindexation", "confirmButton": "Réindexer", "success": "La réindexation a démarré avec succès.", "alreadyInProgress": "La réindexation est déjà en cours.", "error": "Échec du démarrage de la réindexation : {{errorMessage}}", - "confirmDesc": "Êtes-vous sûr de vouloir réindexer tous les représentations numériques des objets suivis ? Ce processus s'exécutera en arrière-plan, mais il pourrait saturer votre processeur et prendre un temps considérable. Vous pouvez suivre la progression sur la page Explorer." + "confirmDesc": "Êtes-vous sûr de vouloir réindexer tous les embeddings des objets suivis ? Ce processus s'exécutera en arrière-plan, mais il pourrait saturer votre processeur et prendre un temps considérable. Vous pouvez suivre la progression sur la page Explorer." }, "modelSize": { - "desc": "La taille du modèle utilisé pour les représentations numériques de recherche sémantique.", + "desc": "La taille du modèle utilisé pour les embeddings de recherche sémantique", "small": { "title": "petit", - "desc": "Utiliser petit emploie une version quantifiée du modèle qui utilise moins de mémoire et s'exécute plus rapidement sur le processeur avec une différence négligeable dans la qualité des représentations numériques." + "desc": "Utiliser petit emploie une version quantifiée du modèle qui utilise moins de mémoire et s'exécute plus rapidement sur le processeur avec une différence négligeable dans la qualité des embeddings." }, "large": { "title": "grand", @@ -706,7 +716,7 @@ }, "label": "Taille du modèle" }, - "desc": "La recherche sémantique de Frigate vous permet de retrouver les objets suivis dans votre revue d'évènements en utilisant soit l'image elle-même, soit une description textuelle définie par l'utilisateur, soit une description générée automatiquement." + "desc": "La recherche sémantique de Frigate vous permet de retrouver les objets suivis dans vos événements en utilisant soit l'image elle-même, soit une description textuelle définie par l'utilisateur, soit une description générée automatiquement." }, "unsavedChanges": "Modifications non enregistrées des paramètres d'enrichissements", "faceRecognition": { @@ -714,33 +724,33 @@ "readTheDocumentation": "Lire la documentation", "modelSize": { "label": "Taille du modèle", - "desc": "La taille du modèle utilisé pour la reconnaissance faciale.", + "desc": "La taille du modèle utilisé pour la reconnaissance faciale", "small": { "title": "petit", - "desc": "Utiliser petit emploie un modèle de représentation numérique faciale FaceNet qui s'exécute efficacement sur la plupart des processeurs." + "desc": "Utiliser petit emploie un modèle d'embedding facial FaceNet qui s'exécute efficacement sur la plupart des processeurs." }, "large": { "title": "grand", - "desc": "Utiliser grand emploie un modèle de représentation numérique faciale ArcFace et s'exécutera automatiquement sur le GPU si disponible." + "desc": "Utiliser grand emploie un modèle d'embedding facial ArcFace et s'exécutera automatiquement sur le GPU si disponible." } }, - "desc": "La reconnaissance faciale permet à Frigate d'identifier les individus par leur nom. Dès qu'un visage est reconnu, Frigate associe ce nom comme sous-libellé à l'événement. Ces informations sont ensuite intégrées dans l'interface utilisateur, les options de filtrage et les notifications." + "desc": "La reconnaissance faciale permet à Frigate d'identifier les individus par leur nom. Dès qu'un visage est reconnu, Frigate associe ce nom comme sous-étiquette à l'événement. Ces informations sont ensuite intégrées dans l'interface utilisateur, les options de filtrage et les notifications." }, "licensePlateRecognition": { "title": "Reconnaissance des plaques d'immatriculation", "readTheDocumentation": "Lire la documentation", - "desc": "Frigate identifie les plaques d'immatriculation des véhicules et peut automatiquement insérer les caractères détectés dans le champ recognized_license_plate. Il est également capable d'assigner un nom familier comme sous-libellé aux objets de type \"voiture\". Par exemple, cette fonction est souvent utilisée pour lire les plaques des véhicules empruntant une allée ou une rue." + "desc": "Frigate identifie les plaques d'immatriculation des véhicules et peut automatiquement insérer les caractères détectés dans le champ recognized_license_plate. Il est également capable d'assigner un nom familier comme sous-étiquette aux objets de type \"voiture\". Par exemple, cette fonction est souvent utilisée pour lire les plaques des véhicules empruntant une allée ou une rue." }, "toast": { "error": "Échec de l'enregistrement des modifications de configuration : {{errorMessage}}", - "success": "Les paramètres d'enrichissements ont été enregistrés. Redémarrez Frigate pour appliquer les modifications." + "success": "Les paramètres d'enrichissements ont été enregistrés. Redémarrez Frigate pour appliquer vos modifications." }, "restart_required": "Redémarrage nécessaire (paramètres d'enrichissements modifiés)" }, "triggers": { "documentTitle": "Déclencheurs", "management": { - "title": "Gestion des déclencheurs", + "title": "Déclencheurs", "desc": "Gérer les déclencheurs pour {{camera}}. Utilisez le type vignette pour déclencher à partir de vignettes similaires à l'objet suivi sélectionné. Utilisez le type description pour déclencher à partir de textes de description similaires que vous avez spécifiés." }, "addTrigger": "Ajouter un déclencheur", @@ -751,7 +761,7 @@ "threshold": "Seuil", "actions": "Actions", "noTriggers": "Aucun déclencheur configuré pour cette caméra.", - "edit": "Éditer", + "edit": "Modifier", "deleteTrigger": "Supprimer le déclencheur", "lastTriggered": "Dernier déclencheur" }, @@ -761,7 +771,9 @@ }, "actions": { "alert": "Marquer comme alerte", - "notification": "Envoyer une notification" + "notification": "Envoyer une notification", + "sub_label": "Ajouter une sous-étiquette", + "attribute": "Ajouter un attribut" }, "dialog": { "createTrigger": { @@ -769,8 +781,8 @@ "desc": "Créer un déclencheur pour la caméra {{camera}}" }, "editTrigger": { - "title": "Éditer le déclencheur", - "desc": "Éditer les paramètres du déclencheur de la caméra {{camera}}" + "title": "Modifier le déclencheur", + "desc": "Modifier les paramètres du déclencheur de la caméra {{camera}}" }, "deleteTrigger": { "title": "Supprimer le déclencheur", @@ -779,25 +791,28 @@ "form": { "name": { "title": "Nom", - "placeholder": "Entrez le nom du déclencheur", + "placeholder": "Nommez ce déclencheur", "error": { - "minLength": "Le nom soit comporter au moins deux caractères.", - "invalidCharacters": "Le nom peut contenir uniquement des lettres, des nombres, des tirets bas, et des tirets.", + "minLength": "Le champ doit comporter au moins deux caractères.", + "invalidCharacters": "Le champ peut contenir uniquement des lettres, des nombres, des tirets bas, et des tirets.", "alreadyExists": "Un déclencheur avec le même nom existe déjà pour cette caméra." - } + }, + "description": "Saisissez un nom ou une description unique pour identifier ce déclencheur." }, "enabled": { "description": "Activer ou désactiver ce déclencheur" }, "type": { "title": "Type", - "placeholder": "Sélectionner un type de déclencheur" + "placeholder": "Sélectionner un type de déclencheur", + "description": "Déclencher lorsqu'une description d'objet suivi similaire est détectée", + "thumbnail": "Déclencher lorsqu'une vignette d'objet suivi similaire est détectée" }, "content": { "title": "Contenu", - "imagePlaceholder": "Sélectionner une image", + "imagePlaceholder": "Sélectionner une vignette", "textPlaceholder": "Saisir le contenu du texte", - "imageDesc": "Sélectionnez une image pour déclencher cette action lorsqu'une image similaire est détectée.", + "imageDesc": "Seules les 100 vignettes les plus récentes sont affichées. Si vous ne trouvez pas la vignette souhaitée, veuillez consulter les objets précédents dans Explorer et configurer un déclencheur à partir de ce menu.", "textDesc": "Entrez un texte pour déclencher cette action lorsqu'une description similaire d'objet suivi est détectée.", "error": { "required": "Le contenu est requis." @@ -808,14 +823,20 @@ "error": { "min": "Le seuil doit être au moins 0", "max": "Le seuil peut être au plus 1" - } + }, + "desc": "Définissez le seuil de similarité pour ce déclencheur. Un seuil plus élevé signifie qu'une correspondance plus exacte est requise pour activer le déclencheur." }, "actions": { "title": "Actions", - "desc": "Par défaut, Frigate publie un message MQTT à chaque déclenchement. Sélectionnez une action complémentaire à exécuter lors de ce déclenchement.", + "desc": "Par défaut, Frigate envoie un message MQTT pour tous les déclencheurs. Les sous-étiquettes ajoutent le nom du déclencheur à l'étiquette de l'objet. Les attributs sont des métadonnées recherchables stockées séparément dans les métadonnées de l'objet suivi.", "error": { "min": "Au moins une action doit être sélectionnée." } + }, + "friendly_name": { + "title": "Nom convivial", + "placeholder": "Nommez ou décrivez ce déclencheur", + "description": "Nom convivial ou texte descriptif facultatif pour ce déclencheur." } } }, @@ -830,12 +851,33 @@ "updateTriggerFailed": "Échec de la mise à jour du déclencheur : {{errorMessage}}", "deleteTriggerFailed": "Échec de la suppression du déclencheur : {{errorMessage}}" } + }, + "semanticSearch": { + "title": "La recherche sémantique est désactivée", + "desc": "La recherche sémantique doit être activée pour utiliser les déclencheurs." + }, + "wizard": { + "title": "Créer un déclencheur", + "step1": { + "description": "Configurez les paramètres de base pour votre déclencheur." + }, + "step2": { + "description": "Configurez le contenu qui déclenchera cette action." + }, + "step3": { + "description": "Configurez le seuil et les actions pour ce déclencheur." + }, + "steps": { + "nameAndType": "Nom et type", + "configureData": "Configuration des données", + "thresholdAndActions": "Seuil et actions" + } } }, "roles": { "management": { - "title": "Gestion des rôles de visionnage", - "desc": "Gérer les rôles personnalisés de visionnage et leurs permissions d'accès aux caméras pour cette instance de Frigate." + "title": "Gestion des rôles Observateur", + "desc": "Gérer les rôles Observateur personnalisés et leurs permissions d'accès aux caméras pour cette instance de Frigate." }, "addRole": "Ajouter un rôle", "table": { @@ -843,7 +885,7 @@ "cameras": "Caméras", "actions": "Actions", "noRoles": "Aucun rôle personnalisé trouvé.", - "editCameras": "Éditer les caméras", + "editCameras": "Modifier les caméras", "deleteRole": "Supprimer le rôle" }, "toast": { @@ -851,7 +893,9 @@ "createRole": "Rôle {{role}} créé avec succès", "updateCameras": "Caméras mis à jour pour le rôle {{role}}", "deleteRole": "Rôle {{role}} supprimé avec succès", - "userRolesUpdated": "{{count}} utilisateurs affectés à ce rôle ont été mis à jour avec des droits 'visionnage', et ont accès à toutes les caméras." + "userRolesUpdated_one": "{{count}} utilisateurs affectés à ce rôle ont été mis à jour avec des droits \"Observateur\", et ont accès à toutes les caméras.", + "userRolesUpdated_many": "", + "userRolesUpdated_other": "" }, "error": { "createRoleFailed": "Échec dans la création du rôle : {{errorMessage}}", @@ -866,22 +910,22 @@ "desc": "Ajouter un nouveau rôle et définir les permissions d'accès à la caméra." }, "editCameras": { - "title": "Editer les caméras du rôle", + "title": "Modifier les caméras du rôle", "desc": "Mettre à jour les accès aux caméras pour le rôle {{role}}." }, "deleteRole": { "title": "Suppression du rôle", - "desc": "Cette action est irréversible. Elle supprimera définitivement le rôle et tous les utilisateurs associés seront affectés au rôle 'visionnage', avec un accès à toutes les caméras.", + "desc": "Cette action est irréversible. Elle supprimera définitivement le rôle et tous les utilisateurs associés seront affectés au rôle \"Observateur\", avec un accès à toutes les caméras.", "warn": "Êtes-vous sûr de vouloir supprimer {{role}} ?", "deleting": "En cours de suppression..." }, "form": { "role": { "title": "Nom du rôle", - "placeholder": "Saisissez un nom de rôle", - "desc": "Seuls les lettres, nombres, points et tirets bas sont autorisés.", + "placeholder": "Saisissez un nom de rôle.", + "desc": "Seuls les lettres, les chiffres, les points et les traits de soulignement sont autorisés.", "roleIsRequired": "Un nom de rôle est requis", - "roleOnlyInclude": "Le nom de rôle peut uniquement contenir des lettres, nombres, . ou _", + "roleOnlyInclude": "Le nom de rôle ne peut inclure que des lettres, des chiffres, des points (.) ou des traits de soulignement (_).", "roleExists": "Un rôle avec ce nom existe déjà." }, "cameras": { @@ -891,5 +935,231 @@ } } } + }, + "cameraWizard": { + "title": "Ajouter une caméra", + "description": "Suivez les étapes ci-dessous pour ajouter une nouvelle caméra à votre installation Frigate.", + "steps": { + "nameAndConnection": "Nom et connexion", + "streamConfiguration": "Configuration du flux", + "validationAndTesting": "Validation et tests" + }, + "save": { + "success": "Nouvelle caméra {{cameraName}} enregistrée avec succès", + "failure": "Échec lors de l'enregistrement de {{cameraName}}" + }, + "testResultLabels": { + "resolution": "Résolution", + "video": "Vidéo", + "audio": "Audio", + "fps": "FPS" + }, + "commonErrors": { + "noUrl": "Veuillez saisir une URL de flux valide.", + "testFailed": "Échec du test de flux : {{error}}" + }, + "step1": { + "description": "Saisissez les détails de votre caméra et testez la connexion.", + "cameraName": "Nom de la caméra", + "cameraNamePlaceholder": "par ex., porte_entree ou apercu_cour_arriere", + "host": "Hôte / Adresse IP", + "port": "Port", + "username": "Nom d'utilisateur", + "usernamePlaceholder": "Facultatif", + "password": "Mot de passe", + "passwordPlaceholder": "Facultatif", + "selectTransport": "Sélectionnez le protocole de transport.", + "cameraBrand": "Marque de la caméra", + "selectBrand": "Sélectionnez la marque de la caméra pour déterminer la forme de l'URL.", + "customUrl": "URL de flux personnalisé", + "brandInformation": "Information sur la marque", + "brandUrlFormat": "Pour les caméras avec un format d'URL RTSP comme : {{exampleUrl}}", + "customUrlPlaceholder": "rtsp://nomutilisateur:motdepasse@hote:port/chemin", + "testConnection": "Tester la connexion", + "testSuccess": "Test de connexion réussi !", + "testFailed": "Échec du test de connexion. Veuillez vérifier votre saisie et réessayez.", + "streamDetails": "Détails du flux", + "warnings": { + "noSnapshot": "Impossible de récupérer un instantané à partir du flux configuré" + }, + "errors": { + "brandOrCustomUrlRequired": "Sélectionnez une marque de caméra avec hôte/IP ou choisissez « Autre » avec une URL personnalisée.", + "nameRequired": "Le nom de la caméra est requis.", + "nameLength": "Le nom de la caméra ne doit pas dépasser 64 caractères.", + "invalidCharacters": "Le nom de la caméra contient des caractères invalides.", + "nameExists": "Ce nom de caméra est déjà utilisé.", + "brands": { + "reolink-rtsp": "Le protocole RTSP de Reolink est déconseillé. Activez le protocole HTTP dans les paramètres du firmware de la caméra, puis relancez l'assistant." + }, + "customUrlRtspRequired": "Les URL personnalisées doivent commencer par \"rtsp://\". Une configuration manuelle est requise pour les flux de caméra non-RTSP." + }, + "docs": { + "reolink": "https://docs.frigate.video/configuration/camera_specific.html#reolink-cameras" + }, + "testing": { + "probingMetadata": "Vérification des métadonnées de la caméra en cours...", + "fetchingSnapshot": "Récupération de l'instantané de la caméra en cours..." + } + }, + "step2": { + "description": "Définissez les rôles du flux et ajoutez des flux supplémentaires pour votre caméra.", + "streamsTitle": "Flux de caméra", + "addStream": "Ajouter un flux", + "addAnotherStream": "Ajouter un autre flux", + "streamTitle": "Flux {{number}}", + "streamUrl": "URL du flux", + "streamUrlPlaceholder": "rtsp://nomutilisateur:motdepasse@hote:port/chemin", + "url": "URL", + "resolution": "Résolution", + "selectResolution": "Sélectionnez la résolution.", + "quality": "Qualité", + "selectQuality": "Sélectionnez la qualité.", + "roles": "Rôles", + "roleLabels": { + "record": "Enregistrement", + "audio": "Audio", + "detect": "Détection d'objets" + }, + "testStream": "Tester la connexion", + "testSuccess": "Test du flux réussi !", + "testFailed": "Échec du test du flux", + "testFailedTitle": "Échec du test", + "connected": "Connecté", + "notConnected": "Non connecté", + "featuresTitle": "Caractéristiques", + "go2rtc": "Réduire le nombre de connexions à la caméra", + "detectRoleWarning": "Pour continuer, au moins un flux doit avoir le rôle \"détection\".", + "rolesPopover": { + "title": "Rôles du flux", + "detect": "Flux principal pour la détection d'objets", + "record": "Enregistre des extraits du flux vidéo en fonction des paramètres de configuration.", + "audio": "Flux pour la détection audio" + }, + "featuresPopover": { + "title": "Fonctionnalités du flux", + "description": "Utilisez la rediffusion du flux go2rtc pour réduire le nombre de connexions à votre caméra." + } + }, + "step3": { + "description": "Validation et analyse finales avant l'enregistrement de votre nouvelle caméra. Connectez chaque flux avant d'enregistrer.", + "validationTitle": "Validation du flux", + "connectAllStreams": "Connecter tous les flux", + "reconnectionSuccess": "Reconnexion réussie.", + "reconnectionPartial": "La reconnexion de certains flux a échoué.", + "streamUnavailable": "Aperçu du flux indisponible", + "reload": "Recharger", + "connecting": "Connexion en cours...", + "streamTitle": "Flux {{number}}", + "failed": "Échec", + "notTested": "Non testé", + "connectStream": "Connecter", + "connectingStream": "Connexion en cours", + "disconnectStream": "Déconnecter", + "estimatedBandwidth": "Débit estimé", + "roles": "Rôles", + "none": "Aucun", + "error": "Erreur", + "streamValidated": "Flux {{number}} validé avec succès", + "streamValidationFailed": "La validation du flux {{number}} a échoué", + "saveAndApply": "Enregistrer une nouvelle caméra", + "saveError": "Configuration invalide. Veuillez vérifier vos paramètres.", + "issues": { + "title": "Validation du flux", + "videoCodecGood": "Le codec vidéo est {{codec}}.", + "audioCodecGood": "Le codec audio est {{codec}}.", + "noAudioWarning": "Aucun son n'est détecté sur ce flux, les enregistrements seront muets.", + "audioCodecRecordError": "Le codec audio AAC est requis pour la prise en charge du son dans les enregistrements.", + "audioCodecRequired": "Un flux audio est requis pour prendre en charge la détection audio.", + "restreamingWarning": "La réduction des connexions à la caméra pour le flux d'enregistrement peut augmenter légèrement l'utilisation du processeur.", + "dahua": { + "substreamWarning": "Le flux secondaire 1 est limité en basse résolution. De nombreuses caméras (Dahua, Amcrest, EmpireTech...) proposent des flux supplémentaires qu'il suffit d'activer dans leurs propres paramètres. Il est recommandé de vérifier leur disponibilité et de les utiliser." + }, + "hikvision": { + "substreamWarning": "Le flux secondaire 1 est limité en basse résolution. De nombreuses caméras Hikvision proposent des flux supplémentaires qu'il suffit d'activer dans leurs propres paramètres. Il est recommandé de vérifier leur disponibilité et de les utiliser." + }, + "resolutionHigh": "La résolution {{resolution}} risque d'augmenter l'utilisation des ressources.", + "resolutionLow": "La résolution {{resolution}} risque d'être trop faible pour détecter les petits objets de manière fiable." + }, + "valid": "Valide", + "ffmpegModule": "Utiliser le mode de compatibilité du flux", + "ffmpegModuleDescription": "Si le flux ne se charge pas après plusieurs tentatives, essayez d'activer cette option. Lorsqu'elle est activée, Frigate utilisera le module ffmpeg avec go2rtc. Cela peut offrir une meilleure compatibilité avec certains flux de caméra." + } + }, + "cameraManagement": { + "title": "Gérer les caméras", + "addCamera": "Ajouter une nouvelle caméra", + "editCamera": "Modifier la caméra :", + "selectCamera": "Sélectionnez une caméra", + "backToSettings": "Retour aux paramètres de la caméra", + "streams": { + "title": "Activer / désactiver les caméras", + "desc": "Désactive temporairement une caméra jusqu'au redémarrage de Frigate. La désactivation d'une caméra interrompt complètement le traitement des flux de la caméra par Frigate. La détection, l'enregistrement et le débogage deviennent alors indisponibles.ffprobe.",
+ "streamDataFromFFPROBE": "Les données du flux sont obtenues avec ffprobe.",
"resolution": "Résolution :",
"error": "Erreur : {{error}}",
"codec": "Codec :",
"video": "Vidéo :",
- "aspectRatio": "ratio d'aspect"
+ "aspectRatio": "rapport d'aspect"
},
"framesAndDetections": "Images / Détections",
"label": {
"camera": "caméra",
- "detect": "Détecter",
- "skipped": "ignoré",
+ "detect": "détection",
+ "skipped": "ignorées",
"ffmpeg": "FFmpeg",
"capture": "capture",
"cameraFfmpeg": "{{camName}} FFmpeg",
- "cameraSkippedDetectionsPerSecond": "{{camName}} détections manquées par seconde",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} détections ignorées par seconde",
"overallDetectionsPerSecond": "Moyenne de détections par seconde",
- "overallFramesPerSecond": "Moyenne d'images par seconde",
- "overallSkippedDetectionsPerSecond": "Moyenne de détections manquées par seconde",
+ "overallFramesPerSecond": "Moyenne d'images par seconde (IPS)",
+ "overallSkippedDetectionsPerSecond": "Moyenne de détections ignorées par seconde",
"cameraCapture": "{{camName}} capture",
"cameraDetect": "{{camName}} détection",
- "cameraFramesPerSecond": "{{camName}} images par seconde",
+ "cameraFramesPerSecond": "{{camName}} images par seconde (IPS)",
"cameraDetectionsPerSecond": "{{camName}} détections par seconde"
},
"overview": "Vue d'ensemble",
"toast": {
"success": {
- "copyToClipboard": "Données récupérées copiées dans le presse-papier."
+ "copyToClipboard": "Données de la sonde copiées dans le presse-papiers"
},
"error": {
- "unableToProbeCamera": "Impossible de récupérer des infos depuis la caméra : {{errorMessage}}"
+ "unableToProbeCamera": "Impossible d'inspecter la caméra : {{errorMessage}}"
}
}
},
"lastRefreshed": "Dernier rafraichissement : ",
"stats": {
"ffmpegHighCpuUsage": "{{camera}} a un taux élevé d'utilisation processeur par FFmpeg ({{ffmpegAvg}}%)",
- "detectHighCpuUsage": "{{camera}} a un taux élevé d'utilisation processeur ({{detectAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} a une utilisation CPU de détection élevée ({{detectAvg}}%)",
"healthy": "Le système est sain",
- "reindexingEmbeddings": "Réindexation des représentations numériques ({{processed}}% complété)",
+ "reindexingEmbeddings": "Réindexation des embeddings ({{processed}} % terminée)",
"cameraIsOffline": "{{camera}} est hors ligne",
"detectIsSlow": "{{detect}} est lent ({{speed}} ms)",
"detectIsVerySlow": "{{detect}} est très lent ({{speed}} ms)",
@@ -170,16 +170,16 @@
"title": "Enrichissements",
"infPerSecond": "Inférences par seconde",
"embeddings": {
- "face_embedding_speed": "Vitesse de capture des données complémentaires de visage",
- "text_embedding_speed": "Vitesse de capture des données complémentaire de texte",
- "image_embedding_speed": "Vitesse de capture des données complémentaires à l'image",
+ "face_embedding_speed": "Vitesse de vectorisation des visages",
+ "text_embedding_speed": "Vitesse d'embedding de texte",
+ "image_embedding_speed": "Vitesse d'embedding d'image",
"plate_recognition_speed": "Vitesse de reconnaissance des plaques d'immatriculation",
"face_recognition_speed": "Vitesse de reconnaissance faciale",
"plate_recognition": "Reconnaissance de plaques d'immatriculation",
- "image_embedding": "Représentations numériques d'image",
+ "image_embedding": "Embedding d'image",
"yolov9_plate_detection": "Détection de plaques d'immatriculation YOLOv9",
"face_recognition": "Reconnaissance faciale",
- "text_embedding": "Représentation numérique de texte",
+ "text_embedding": "Vitesse d'embedding de visage",
"yolov9_plate_detection_speed": "Vitesse de détection de plaques d'immatriculation YOLOv9"
}
}
diff --git a/web/public/locales/gl/views/classificationModel.json b/web/public/locales/gl/views/classificationModel.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/gl/views/classificationModel.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/he/audio.json b/web/public/locales/he/audio.json
index f7369853c..841dfa83b 100644
--- a/web/public/locales/he/audio.json
+++ b/web/public/locales/he/audio.json
@@ -18,7 +18,7 @@
"humming": "זמזום",
"groan": "אנקה",
"grunt": "לנחור",
- "whistling": "שריקה",
+ "whistling": "לשרוק",
"breathing": "נשימה",
"wheeze": "גניחה",
"snoring": "נחירה",
@@ -69,7 +69,7 @@
"fly": "זבוב",
"buzz": "זמזם.",
"frog": "צפרדע",
- "croak": "קרקור.",
+ "croak": "קִרקוּר",
"snake": "נחש",
"rattle": "טרטור",
"whale_vocalization": "קולות לוויתן",
@@ -81,7 +81,7 @@
"bass_guitar": "גיטרה בס",
"acoustic_guitar": "גיטרה אקוסטית",
"steel_guitar": "גיטרה פלדה",
- "tapping": "הקשה.",
+ "tapping": "להקיש",
"strum": "פריטה",
"banjo": "בנג'ו",
"sitar": "סיטאר",
@@ -189,7 +189,7 @@
"church_bell": "פעמון כנסיה",
"jingle_bell": "ג'ינגל בל",
"bicycle_bell": "פעמון אופניים",
- "chime": "צלצול",
+ "chime": "צִלצוּל",
"wind_chime": "פעמון רוח",
"harmonica": "הרמוניקה",
"accordion": "אקורדיון",
@@ -341,7 +341,7 @@
"microwave_oven": "מיקרוגל",
"water_tap": "ברז מים",
"bathtub": "אמבטיה",
- "dishes": "כלים.",
+ "dishes": "מנות",
"scissors": "מספריים",
"toothbrush": "מברשת שיניים",
"toilet_flush": "הורדת מים לאסלה",
@@ -355,7 +355,7 @@
"computer_keyboard": "מקלדת מחשב",
"writing": "כתיבה",
"telephone_bell_ringing": "צלצול טלפון",
- "ringtone": "צליל חיוג.",
+ "ringtone": "צלצול",
"clock": "שעון",
"telephone_dialing": "טלפון מחייג",
"dial_tone": "צליל חיוג",
@@ -425,5 +425,54 @@
"slam": "טריקה",
"telephone": "טלפון",
"tuning_fork": "מזלג כוונון",
- "raindrop": "טיפות גשם"
+ "raindrop": "טיפות גשם",
+ "smash": "רסק",
+ "boiling": "רותח",
+ "sonar": "סונר",
+ "arrow": "חץ",
+ "whack": "מַהֲלוּמָה",
+ "sine_wave": "גל סינוס",
+ "harmonic": "הרמוניה",
+ "chirp_tone": "צליל ציוץ",
+ "pulse": "דוֹפֶק",
+ "inside": "בְּתוֹך",
+ "outside": "בחוץ",
+ "reverberation": "הִדהוּד",
+ "echo": "הד",
+ "noise": "רעש",
+ "mains_hum": "זמזום ראשי",
+ "distortion": "סַלְפָנוּת",
+ "sidetone": "צליל צדדי",
+ "cacophony": "קָקוֹפוֹניָה",
+ "throbbing": "פְּעִימָה",
+ "vibration": "רֶטֶט",
+ "sodeling": "מיזוג",
+ "change_ringing": "שינוי צלצול",
+ "shofar": "שופר",
+ "liquid": "נוזל",
+ "splash": "התזה",
+ "slosh": "שכשוך",
+ "squish": "מעיכה",
+ "drip": "טפטוף",
+ "pour": "לִשְׁפּוֹך",
+ "trickle": "לְטַפטֵף",
+ "gush": "פֶּרֶץ",
+ "fill": "מילוי",
+ "spray": "ריסוס",
+ "pump": "משאבה",
+ "stir": "בחישה",
+ "whoosh": "מהיר",
+ "thump": "חֲבָטָה",
+ "thunk": "תרועה",
+ "electronic_tuner": "מכוון אלקטרוני",
+ "effects_unit": "יחידת אפקטים",
+ "chorus_effect": "אפקט מקהלה",
+ "basketball_bounce": "קפיצת כדורסל",
+ "bang": "לִדפּוֹק",
+ "slap": "סְטִירָה",
+ "breaking": "שְׁבִירָה",
+ "bouncing": "הַקפָּצָה",
+ "whip": "שׁוֹט",
+ "flap": "מַדָף",
+ "scratch": "לְגַרֵד"
}
diff --git a/web/public/locales/he/components/filter.json b/web/public/locales/he/components/filter.json
index 2316722ca..17f7914cf 100644
--- a/web/public/locales/he/components/filter.json
+++ b/web/public/locales/he/components/filter.json
@@ -1,5 +1,5 @@
{
- "filter": "לסנן",
+ "filter": "מסנן",
"features": {
"submittedToFrigatePlus": {
"tips": "עליך תחילה לסנן לפי אובייקטים במעקב שיש להם תמונת מצב.감지(detect) 스트림의 프레임을 얻지 못했습니다. 에러 로그를 확인하세요"
+ },
+ "cameraDisabled": "카메라를 이용할 수 없습니다",
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "Frigate+에 프레임이 성공적으로 제출됐습니다"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "Frigate+에 프레임을 보내지 못했습니다"
+ }
+ }
}
diff --git a/web/public/locales/ko/objects.json b/web/public/locales/ko/objects.json
index 769a51276..e3506b15d 100644
--- a/web/public/locales/ko/objects.json
+++ b/web/public/locales/ko/objects.json
@@ -2,5 +2,119 @@
"person": "사람",
"bicycle": "자전거",
"car": "차량",
- "motorcycle": "원동기"
+ "motorcycle": "원동기",
+ "airplane": "비행기",
+ "bus": "버스",
+ "train": "기차",
+ "boat": "보트",
+ "traffic_light": "신호등",
+ "fire_hydrant": "소화전",
+ "street_sign": "도로 표지판",
+ "stop_sign": "정지 표지판",
+ "parking_meter": "주차 요금 정산기",
+ "bench": "벤치",
+ "bird": "새",
+ "cat": "고양이",
+ "dog": "강아지",
+ "horse": "말",
+ "sheep": "양",
+ "cow": "소",
+ "elephant": "코끼리",
+ "bear": "곰",
+ "zebra": "얼룩말",
+ "giraffe": "기린",
+ "hat": "모자",
+ "backpack": "백팩",
+ "umbrella": "우산",
+ "shoe": "신발",
+ "eye_glasses": "안경",
+ "handbag": "핸드백",
+ "tie": "타이",
+ "suitcase": "슈트케이스",
+ "frisbee": "프리스비",
+ "skis": "스키",
+ "snowboard": "스노우보드",
+ "sports_ball": "스포츠 볼",
+ "kite": "연",
+ "baseball_bat": "야구 방망이",
+ "baseball_glove": "야구 글로브",
+ "skateboard": "스케이트보드",
+ "surfboard": "서핑보드",
+ "tennis_racket": "테니스 라켓",
+ "bottle": "병",
+ "plate": "번호판",
+ "wine_glass": "와인잔",
+ "cup": "컵",
+ "fork": "포크",
+ "knife": "칼",
+ "spoon": "숟가락",
+ "bowl": "보울",
+ "banana": "바나나",
+ "apple": "사과",
+ "sandwich": "샌드위치",
+ "orange": "오렌지",
+ "broccoli": "브로콜리",
+ "carrot": "당근",
+ "hot_dog": "핫도그",
+ "pizza": "피자",
+ "donut": "도넛",
+ "cake": "케이크",
+ "chair": "의자",
+ "couch": "소파",
+ "potted_plant": "화분",
+ "bed": "침대",
+ "mirror": "거울",
+ "dining_table": "식탁",
+ "window": "창문",
+ "desk": "책상",
+ "toilet": "화장실",
+ "door": "문",
+ "tv": "TV",
+ "laptop": "랩탑",
+ "mouse": "마우스",
+ "remote": "리모콘",
+ "keyboard": "키보드",
+ "cell_phone": "휴대폰",
+ "microwave": "전자레인지",
+ "oven": "오븐",
+ "toaster": "토스터기",
+ "sink": "싱크대",
+ "refrigerator": "냉장고",
+ "blender": "블렌더",
+ "book": "책",
+ "clock": "벽시계",
+ "vase": "꽃병",
+ "scissors": "가위",
+ "teddy_bear": "테디베어",
+ "hair_dryer": "헤어 드라이어",
+ "toothbrush": "칫솔",
+ "hair_brush": "빗",
+ "vehicle": "탈 것",
+ "squirrel": "다람쥐",
+ "deer": "사슴",
+ "animal": "동물",
+ "bark": "개",
+ "fox": "여우",
+ "goat": "염소",
+ "rabbit": "토끼",
+ "raccoon": "라쿤",
+ "robot_lawnmower": "로봇 잔디깎기",
+ "waste_bin": "쓰레기통",
+ "on_demand": "수동",
+ "face": "얼굴",
+ "license_plate": "차량 번호판",
+ "package": "패키지",
+ "bbq_grill": "바베큐 그릴",
+ "amazon": "Amazon",
+ "usps": "USPS",
+ "ups": "UPS",
+ "fedex": "FedEx",
+ "dhl": "DHL",
+ "an_post": "An Post",
+ "purolator": "Purolator",
+ "postnl": "PostNL",
+ "nzpost": "NZPost",
+ "postnord": "PostNord",
+ "gls": "GLS",
+ "dpd": "DPD"
}
diff --git a/web/public/locales/ko/views/classificationModel.json b/web/public/locales/ko/views/classificationModel.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ko/views/classificationModel.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ko/views/configEditor.json b/web/public/locales/ko/views/configEditor.json
index 30311c9b7..bb8a84c2a 100644
--- a/web/public/locales/ko/views/configEditor.json
+++ b/web/public/locales/ko/views/configEditor.json
@@ -1,5 +1,18 @@
{
"documentTitle": "설정 편집기 - Frigate",
"configEditor": "설정 편집기",
- "safeConfigEditor": "설정 편집기 (안전 모드)"
+ "safeConfigEditor": "설정 편집기 (안전 모드)",
+ "safeModeDescription": "설정 오류로 인해 Frigate가 안전 모드로 전환되었습니다.",
+ "copyConfig": "설정 복사",
+ "saveAndRestart": "저장 & 재시작",
+ "saveOnly": "저장만 하기",
+ "confirm": "저장 없이 나갈까요?",
+ "toast": {
+ "success": {
+ "copyToClipboard": "설정이 클립보드에 저장되었습니다."
+ },
+ "error": {
+ "savingError": "설정 저장 오류"
+ }
+ }
}
diff --git a/web/public/locales/ko/views/events.json b/web/public/locales/ko/views/events.json
index c5b16d90f..971494a81 100644
--- a/web/public/locales/ko/views/events.json
+++ b/web/public/locales/ko/views/events.json
@@ -1,8 +1,51 @@
{
- "alerts": "알림",
- "detections": "탐지",
+ "alerts": "경보",
+ "detections": "대상 감지",
"motion": {
- "label": "움직임",
- "only": "움직임만"
- }
+ "label": "움직임 감지",
+ "only": "움직임 감지만"
+ },
+ "allCameras": "모든 카메라",
+ "empty": {
+ "alert": "다시 볼 '경보' 영상이 없습니다",
+ "detection": "다시 볼 '대상 감지' 영상이 없습니다",
+ "motion": "움직임 감지 데이터가 없습니다"
+ },
+ "timeline": "타임라인",
+ "timeline.aria": "타임라인 선택",
+ "events": {
+ "label": "이벤트",
+ "aria": "이벤트 선택",
+ "noFoundForTimePeriod": "이 시간대에 이벤트가 없습니다."
+ },
+ "detail": {
+ "noDataFound": "다시 볼 상세 데이터가 없습니다",
+ "aria": "상세 보기",
+ "trackedObject_one": "추적 대상",
+ "trackedObject_other": "추적 대상",
+ "noObjectDetailData": "상세 보기 데이터가 없습니다."
+ },
+ "objectTrack": {
+ "trackedPoint": "추적 포인트",
+ "clickToSeek": "이 시점으로 이동"
+ },
+ "documentTitle": "다시 보기 - Frigate",
+ "recordings": {
+ "documentTitle": "녹화 - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "최근 24시간"
+ },
+ "markAsReviewed": "'다시 봤음'으로 표시",
+ "markTheseItemsAsReviewed": "이 영상들을 '다시 봤음'으로 표시",
+ "newReviewItems": {
+ "label": "새로운 '다시 보기' 영상 보기",
+ "button": "새로운 '다시 보기' 영상"
+ },
+ "selected_one": "{{count}} 선택됨",
+ "selected_other": "{{count}} 선택됨",
+ "camera": "카메라",
+ "detected": "감지됨",
+ "suspiciousActivity": "수상한 행동",
+ "threateningActivity": "위협적인 행동"
}
diff --git a/web/public/locales/ko/views/explore.json b/web/public/locales/ko/views/explore.json
index 17aee9232..231eade30 100644
--- a/web/public/locales/ko/views/explore.json
+++ b/web/public/locales/ko/views/explore.json
@@ -1,4 +1,31 @@
{
"documentTitle": "탐색 - Frigate",
- "generativeAI": "생성형 AI"
+ "generativeAI": "생성형 AI",
+ "exploreMore": "{{label}} 더 많은 감지 대상 탐색하기",
+ "exploreIsUnavailable": {
+ "title": "탐색을 사용할 수 없습니다",
+ "embeddingsReindexing": {
+ "context": "감지 정보 재처리가 완료되면 탐색할 수 있습니다.",
+ "startingUp": "시작 중…",
+ "estimatedTime": "예상 남은시간:",
+ "finishingShortly": "곧 완료됩니다",
+ "step": {
+ "thumbnailsEmbedded": "처리된 썸네일: ",
+ "descriptionsEmbedded": "처리된 설명: ",
+ "trackedObjectsProcessed": "처리된 추적 감지: "
+ }
+ },
+ "downloadingModels": {
+ "context": "Frigate가 시맨틱 검색 기능을 지원하기 위해 필요한 임베딩 모델을 다운로드하고 있습니다. 네트워크 연결 속도에 따라 몇 분 정도 소요될 수 있습니다.",
+ "setup": {
+ "visionModel": "Vision model",
+ "visionModelFeatureExtractor": "Vision model feature extractor",
+ "textModel": "Text model",
+ "textTokenizer": "Text tokenizer"
+ }
+ }
+ },
+ "details": {
+ "timestamp": "시간 기록"
+ }
}
diff --git a/web/public/locales/ko/views/exports.json b/web/public/locales/ko/views/exports.json
index adc9fc3b1..f4c902602 100644
--- a/web/public/locales/ko/views/exports.json
+++ b/web/public/locales/ko/views/exports.json
@@ -2,7 +2,7 @@
"documentTitle": "내보내기 - Frigate",
"search": "검색",
"noExports": "내보내기가 없습니다",
- "deleteExport": "내보내기 제거",
+ "deleteExport": "내보내기 삭제",
"deleteExport.desc": "{{exportName}}을 지우시겠습니까?",
"editExport": {
"title": "내보내기 이름 변경",
diff --git a/web/public/locales/ko/views/faceLibrary.json b/web/public/locales/ko/views/faceLibrary.json
index 09b5d1a2a..e1204d852 100644
--- a/web/public/locales/ko/views/faceLibrary.json
+++ b/web/public/locales/ko/views/faceLibrary.json
@@ -1,10 +1,84 @@
{
"description": {
"placeholder": "이 모음집의 이름을 입력해주세요",
- "addFace": "얼굴 라이브러리에 새 컬렉션 추가하는 방법을 단계별로 알아보세요.",
+ "addFace": "얼굴 라이브러리에 새 모음집 추가하는 방법을 단계별로 알아보세요.",
"invalidName": "잘못된 이름입니다. 이름은 문자, 숫자, 공백, 따옴표 ('), 밑줄 (_), 그리고 붙임표 (-)만 포함이 가능합니다."
},
"details": {
- "person": "사람"
+ "person": "사람",
+ "subLabelScore": "보조 레이블 신뢰도",
+ "face": "얼굴 상세정보",
+ "timestamp": "시간 기록",
+ "unknown": "알 수 없음"
+ },
+ "selectItem": "{{item}} 선택",
+ "documentTitle": "얼굴 라이브러리 - Frigate",
+ "uploadFaceImage": {
+ "title": "얼굴 사진 올리기"
+ },
+ "collections": "모음집",
+ "createFaceLibrary": {
+ "title": "모음집 만들기",
+ "desc": "새로운 모음집 만들기",
+ "new": "새 얼굴 만들기"
+ },
+ "steps": {
+ "faceName": "얼굴 이름 입력",
+ "uploadFace": "얼굴 사진 올리기",
+ "nextSteps": "다음 단계"
+ },
+ "train": {
+ "title": "학습",
+ "aria": "학습 선택"
+ },
+ "selectFace": "얼굴 선택",
+ "deleteFaceLibrary": {
+ "title": "이름 삭제"
+ },
+ "deleteFaceAttempts": {
+ "title": "얼굴 삭제"
+ },
+ "renameFace": {
+ "title": "얼굴 이름 바꾸기",
+ "desc": "{{name}}의 새 이름을 입력하세요"
+ },
+ "button": {
+ "deleteFaceAttempts": "얼굴 삭제",
+ "addFace": "얼굴 추가",
+ "renameFace": "얼굴 이름 바꾸기",
+ "deleteFace": "얼굴 삭제",
+ "uploadImage": "이미지 올리기",
+ "reprocessFace": "얼굴 재조정"
+ },
+ "imageEntry": {
+ "validation": {
+ "selectImage": "이미지 파일을 선택해주세요."
+ },
+ "dropActive": "여기에 이미지 놓기…",
+ "dropInstructions": "이미지를 끌어다 놓거나 여기에 붙여넣으세요. 선택할 수도 있습니다.",
+ "maxSize": "최대 용량: {{size}}MB"
+ },
+ "nofaces": "얼굴을 찾을 수 없습니다",
+ "pixels": "{{area}}px",
+ "trainFaceAs": "얼굴을 다음과 같이 훈련하기:",
+ "trainFace": "얼굴 훈련하기",
+ "toast": {
+ "success": {
+ "uploadedImage": "이미지 업로드에 성공했습니다.",
+ "addFaceLibrary": "{{name}} 을 성공적으로 얼굴 라이브러리에 추가했습니다!",
+ "deletedFace_other": "{{count}} 얼굴을 성공적으로 삭제했습니다.",
+ "renamedFace": "얼굴 이름을 {{name}} 으로 성공적으로 바꿨습니다",
+ "trainedFace": "얼굴 훈련을 성공적으로 마쳤습니다.",
+ "updatedFaceScore": "얼굴 신뢰도를 성공적으로 업데이트 했습니다."
+ },
+ "error": {
+ "uploadingImageFailed": "이미지 업로드 실패:{{errorMessage}}",
+ "addFaceLibraryFailed": "얼굴 이름 설정 실패:{{errorMessage}}",
+ "deleteFaceFailed": "삭제 실패:{{errorMessage}}",
+ "deleteNameFailed": "이름 삭제 실패:{{errorMessage}}",
+ "renameFaceFailed": "이름 바꾸기 실패:{{errorMessage}}",
+ "trainFailed": "훈련 실패:{{errorMessage}}",
+ "updateFaceScoreFailed": "얼굴 신뢰도 업데이트 실패:{{errorMessage}}"
+ }
}
}
diff --git a/web/public/locales/ko/views/live.json b/web/public/locales/ko/views/live.json
index 835a4a7f9..bfc44d18f 100644
--- a/web/public/locales/ko/views/live.json
+++ b/web/public/locales/ko/views/live.json
@@ -1,8 +1,183 @@
{
- "documentTitle": "실시간 - Frigate",
- "documentTitle.withCamera": "실시간 - {{camera}} - Frigate",
+ "documentTitle": "실시간 보기 - Frigate",
+ "documentTitle.withCamera": "{{camera}} - 실시간 보기 - Frigate",
"lowBandwidthMode": "저대역폭 모드",
"twoWayTalk": {
- "enable": "양방향 말하기 활성화"
+ "enable": "양방향 말하기 활성화",
+ "disable": "양방향 말하기 비활성화"
+ },
+ "cameraAudio": {
+ "enable": "카메라 오디오 활성화",
+ "disable": "카메라 오디오 비활성화"
+ },
+ "ptz": {
+ "move": {
+ "clickMove": {
+ "label": "클릭해서 카메라 중앙 배치",
+ "enable": "클릭해서 움직이기 기능 활성화",
+ "disable": "클릭해서 움직이기 기능 비활성화"
+ },
+ "left": {
+ "label": "PTZ 카메라 왼쪽으로 이동"
+ },
+ "up": {
+ "label": "PTZ 카메라 위로 이동"
+ },
+ "down": {
+ "label": "PTZ 카메라 아래로 이동"
+ },
+ "right": {
+ "label": "PTZ 카메라 오른쪽으로 이동"
+ }
+ },
+ "zoom": {
+ "in": {
+ "label": "PTZ 카메라 확대"
+ },
+ "out": {
+ "label": "PTZ 카메라 축소"
+ }
+ },
+ "focus": {
+ "in": {
+ "label": "PTZ 카메라 포커스 인"
+ },
+ "out": {
+ "label": "PTZ 카메라 포커스 아웃"
+ }
+ },
+ "frame": {
+ "center": {
+ "label": "클릭해서 PTZ 카메라 중앙 배치"
+ }
+ },
+ "presets": "PTZ 카메라 프리셋"
+ },
+ "camera": {
+ "enable": "카메라 활성화",
+ "disable": "카메라 비활성화"
+ },
+ "muteCameras": {
+ "enable": "모든 카메라 음소거",
+ "disable": "모든 카메라 음소거 해제"
+ },
+ "detect": {
+ "enable": "감지 활성화",
+ "disable": "감지 비활성화"
+ },
+ "recording": {
+ "enable": "녹화 활성화",
+ "disable": "녹화 비활성화"
+ },
+ "snapshots": {
+ "enable": "스냅샷 활성화",
+ "disable": "스냅샷 비활성화"
+ },
+ "audioDetect": {
+ "enable": "오디오 감지 활성화",
+ "disable": "오디오 감지 비활성화"
+ },
+ "transcription": {
+ "enable": "실시간 오디오 자막 활성화",
+ "disable": "실시간 오디오 자막 비활성화"
+ },
+ "autotracking": {
+ "enable": "자동 추적 활성화",
+ "disable": "자동 추적 비활성화"
+ },
+ "streamStats": {
+ "enable": "스트림 통계 보기",
+ "disable": "스트림 통계 숨기기"
+ },
+ "manualRecording": {
+ "title": "수동 녹화",
+ "tips": "이 카메라의 녹화 보관 설정에 따라 인스턴트 스냅샷을 다운로드하거나 수동 녹화를 시작할 수 있습니다.",
+ "playInBackground": {
+ "label": "백그라운드에서 재생",
+ "desc": "이 옵션을 활성화하면 플레이어가 숨겨져도 계속 스트리밍됩니다."
+ },
+ "showStats": {
+ "label": "통계 보기",
+ "desc": "이 옵션을 활성화하면 카메라 피드에 스트림 통계가 나타납니다."
+ },
+ "debugView": "디버그 보기",
+ "start": "수동 녹화 시작",
+ "started": "수동 녹화 시작되었습니다.",
+ "failedToStart": "수동 녹화 시작이 실패했습니다.",
+ "recordDisabledTips": "이 카메라 설정에서 녹화가 비활성화 되었거나 제한되어 있어 스냅샷만 저장됩니다.",
+ "end": "수동 녹화 종료",
+ "ended": "수동 녹화가 종료되었습니다.",
+ "failedToEnd": "수동 녹화 종료가 실패했습니다."
+ },
+ "streamingSettings": "스트리밍 설정",
+ "notifications": "알림",
+ "audio": "오디오",
+ "suspend": {
+ "forTime": "일시정지 시간: "
+ },
+ "stream": {
+ "title": "스트림",
+ "audio": {
+ "available": "이 스트림에서 오디오를 사용할 수 있습니다",
+ "unavailable": "이 스트림에서 오디오를 사용할 수 없습니다",
+ "tips": {
+ "title": "이 스트림에서 오디오를 사용하려면 카메라에서 오디오를 출력하고 go2rtc에서 설정해야 합니다."
+ }
+ },
+ "debug": {
+ "picker": "디버그 모드에선 스트림 모드를 선택할 수 없습니다. 디버그 뷰에서는 항상 감지(Detect) 역할로 설정한 스트림을 사용합니다."
+ },
+ "twoWayTalk": {
+ "tips": "양방향 말하기 기능을 사용하려면 기기에서 기능을 지원해야하며 WebRTC를 설정해야합니다.",
+ "available": "이 기기는 양방향 말하기 기능을 사용할 수 있습니다",
+ "unavailable": "이 기기는 양방향 말하기 기능을 사용할 수 없습니다"
+ },
+ "lowBandwidth": {
+ "tips": "버퍼링 또는 스트림 오류로 실시간 화면을 저대역폭 모드로 변경되었습니다.",
+ "resetStream": "스트림 리셋"
+ },
+ "playInBackground": {
+ "label": "백그라운드에서 재생",
+ "tips": "이 옵션을 활성화하면 플레이어가 숨겨져도 스트리밍이 지속됩니다."
+ }
+ },
+ "cameraSettings": {
+ "title": "{{camera}} 설정",
+ "cameraEnabled": "카메라 활성화",
+ "objectDetection": "대상 감지",
+ "recording": "녹화",
+ "snapshots": "스냅샷",
+ "audioDetection": "오디오 감지",
+ "transcription": "오디오 자막",
+ "autotracking": "자동 추적"
+ },
+ "history": {
+ "label": "이전 영상 보기"
+ },
+ "effectiveRetainMode": {
+ "modes": {
+ "all": "전체",
+ "motion": "움직임 감지",
+ "active_objects": "활성 대상"
+ },
+ "notAllTips": "{{source}} 녹화 보관 설정이 mode: {{effectiveRetainMode}}로 되어 있어, 이 수동 녹화는 {{effectiveRetainModeName}}이(가) 있는 구간만 저장됩니다."
+ },
+ "editLayout": {
+ "label": "레이아웃 편집",
+ "group": {
+ "label": "카메라 그룹 편집"
+ },
+ "exitEdit": "편집 종료"
+ },
+ "noCameras": {
+ "title": "설정된 카메라 없음",
+ "description": "카메라를 연결해 시작하세요.",
+ "buttonText": "카메라 추가"
+ },
+ "snapshot": {
+ "takeSnapshot": "인스턴트 스냅샷 다운로드",
+ "noVideoSource": "스냅샷 찍을 비디오 소스가 없습니다.",
+ "captureFailed": "스냅샷 캡쳐를 하지 못했습니다.",
+ "downloadStarted": "스냅샷 다운로드가 시작됐습니다."
}
}
diff --git a/web/public/locales/ko/views/recording.json b/web/public/locales/ko/views/recording.json
index aa2715665..2aa9934de 100644
--- a/web/public/locales/ko/views/recording.json
+++ b/web/public/locales/ko/views/recording.json
@@ -1,5 +1,12 @@
{
"filter": "필터",
"export": "내보내기",
- "calendar": "달력"
+ "calendar": "날짜",
+ "filters": "필터",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "올바른 시간 범위를 선택하세요",
+ "endTimeMustAfterStartTime": "종료 시간은 시작 시간보다 뒤에 있어야합니다"
+ }
+ }
}
diff --git a/web/public/locales/ko/views/settings.json b/web/public/locales/ko/views/settings.json
index 90d864e5d..a5b1d5580 100644
--- a/web/public/locales/ko/views/settings.json
+++ b/web/public/locales/ko/views/settings.json
@@ -24,11 +24,99 @@
"documentTitle": {
"default": "설정 - Frigate",
"authentication": "인증 설정 - Frigate",
- "camera": "카메라 설정 - Frigate"
+ "camera": "카메라 설정 - Frigate",
+ "enrichments": "고급 설정 - Frigate",
+ "masksAndZones": "마스크와 구역 편집기 - Frigate",
+ "motionTuner": "움직임 감지 조정 - Frigate",
+ "object": "디버그 - Frigate",
+ "general": "일반 설정 - Frigate",
+ "frigatePlus": "Frigate+ 설정 - Frigate",
+ "notifications": "알림 설정 - Frigate",
+ "cameraManagement": "카메라 관리 - Frigate",
+ "cameraReview": "카메라 다시보기 설정 - Frigate"
},
"users": {
"table": {
"actions": "액션"
}
+ },
+ "menu": {
+ "ui": "UI",
+ "enrichments": "고급",
+ "cameras": "카메라 설정",
+ "masksAndZones": "마스크 / 구역",
+ "motionTuner": "움직임 감지 조정",
+ "triggers": "트리거",
+ "debug": "디버그",
+ "users": "사용자",
+ "roles": "역할",
+ "notifications": "알림",
+ "frigateplus": "Frigate+",
+ "cameraManagement": "관리",
+ "cameraReview": "다시보기"
+ },
+ "dialog": {
+ "unsavedChanges": {
+ "title": "저장되지 않은 변경 사항이 있습니다.",
+ "desc": "계속하기 전에 변경 사항을 저장하시겠습니까?"
+ }
+ },
+ "cameraSetting": {
+ "camera": "카메라",
+ "noCamera": "카메라 없음"
+ },
+ "general": {
+ "title": "일반 세팅",
+ "liveDashboard": {
+ "title": "실시간 보기 대시보드",
+ "automaticLiveView": {
+ "label": "자동으로 실시간 보기 전환",
+ "desc": "활동이 감지되면 자동으로 실시간 보기로 전환합니다. 이 옵션을 끄면 대시보드의 카메라 화면은 1분마다 한 번만 갱신됩니다."
+ },
+ "playAlertVideos": {
+ "label": "경보 영상 보기",
+ "desc": "기본적으로 실시간 보기 대시보드의 최근 경보 영상을 작은 반복 영상으로 재생됩니다. 이 옵션을 끄면 이 기기(또는 브라우저)에서는 정적 이미지로만 표시됩니다."
+ }
+ },
+ "storedLayouts": {
+ "title": "저장된 레이아웃",
+ "desc": "카메라 그룹의 화면 배치는 드래그하거나 크기를 조정할 수 있습니다. 변경된 위치는 브라우저의 로컬 저장소에 저장됩니다.",
+ "clearAll": "레이아웃 지우기"
+ },
+ "cameraGroupStreaming": {
+ "title": "카메라 그룹 스트리밍 설정",
+ "desc": "각각의 카메라 그룹의 스트리밍 설정은 브라우저의 로컬 저장소에 저장됩니다.",
+ "clearAll": "스트리밍 설정 모두 지우기"
+ },
+ "recordingsViewer": {
+ "title": "녹화 영상 보기",
+ "defaultPlaybackRate": {
+ "label": "기본으로 설정된 다시보기 배속",
+ "desc": "다시보기 영상 재생할 때 기본 배속을 설정합니다."
+ }
+ },
+ "calendar": {
+ "title": "캘린더",
+ "firstWeekday": {
+ "label": "주 첫째날",
+ "desc": "다시보기 캘린더에서 주가 시작되는 첫째날을 설정합니다.",
+ "sunday": "일요일",
+ "monday": "월요일"
+ }
+ },
+ "toast": {
+ "success": {
+ "clearStoredLayout": "{{cameraName}}의 레이아웃을 지웠습니다",
+ "clearStreamingSettings": "모든 카메라 그룹 스트리밍 설정을 지웠습니다."
+ },
+ "error": {
+ "clearStoredLayoutFailed": "레이아웃 지우기에 실패했습니다:{{errorMessage}}",
+ "clearStreamingSettingsFailed": "카메라 스트리밍 설정 지우기에 실패했습니다:{{errorMessage}}"
+ }
+ }
+ },
+ "enrichments": {
+ "title": "고급 설정",
+ "unsavedChanges": "변경된 고급 설정을 저장하지 않았습니다"
}
}
diff --git a/web/public/locales/ko/views/system.json b/web/public/locales/ko/views/system.json
index b6cae8635..4ed89d1ce 100644
--- a/web/public/locales/ko/views/system.json
+++ b/web/public/locales/ko/views/system.json
@@ -1,7 +1,186 @@
{
"documentTitle": {
"cameras": "카메라 통계 - Frigate",
- "storage": "스토리지 통계 - Frigate",
- "general": "기본 통계 - Frigate"
+ "storage": "저장소 통계 - Frigate",
+ "general": "기본 통계 - Frigate",
+ "enrichments": "고급 통계 - Frigate",
+ "logs": {
+ "frigate": "Frigate 로그 -Frigate",
+ "go2rtc": "Go2RTC 로그 - Frigate",
+ "nginx": "Nginx 로그 - Frigate"
+ }
+ },
+ "title": "시스템",
+ "metrics": "시스템 통계",
+ "logs": {
+ "download": {
+ "label": "다운로드 로그"
+ },
+ "copy": {
+ "label": "클립보드에 복사하기",
+ "success": "클립보드에 로그가 복사되었습니다",
+ "error": "클립보드에 로그를 저장할 수 없습니다"
+ },
+ "type": {
+ "label": "타입",
+ "timestamp": "시간 기록",
+ "tag": "태그",
+ "message": "메시지"
+ },
+ "tips": "서버에서 로그 스트리밍 중",
+ "toast": {
+ "error": {
+ "fetchingLogsFailed": "로그 가져오기 오류: {{errorMessage}}",
+ "whileStreamingLogs": "스크리밍 로그 중 오류: {{errorMessage}}"
+ }
+ }
+ },
+ "general": {
+ "title": "기본",
+ "detector": {
+ "title": "감지기",
+ "inferenceSpeed": "감지 추론 속도",
+ "temperature": "감지기 온도",
+ "cpuUsage": "감지기 CPU 사용률",
+ "memoryUsage": "감지기 메모리 사용률",
+ "cpuUsageInformation": "감지 모델로 데이터를 입력/출력하기 위한 전처리 과정에서 사용되는 CPU 사용량입니다. GPU나 가속기를 사용하는 경우에도 추론 자체의 사용량은 포함되지 않습니다."
+ },
+ "hardwareInfo": {
+ "title": "하드웨어 정보",
+ "gpuUsage": "GPU 사용률",
+ "gpuMemory": "GPU 메모리",
+ "gpuEncoder": "GPU 인코더",
+ "gpuDecoder": "GPU 디코더",
+ "gpuInfo": {
+ "vainfoOutput": {
+ "title": "Vainfo 출력",
+ "processOutput": "프로세스 출력:",
+ "processError": "프로세스 오류:",
+ "returnCode": "리턴 코드:{{code}}"
+ },
+ "nvidiaSMIOutput": {
+ "title": "Nvidia SMI 출력",
+ "name": "이름:{{name}}",
+ "driver": "드라이버:{{driver}}",
+ "cudaComputerCapability": "CUDA Compute Capability:{{cuda_compute}}",
+ "vbios": "VBios Info: {{vbios}}"
+ },
+ "copyInfo": {
+ "label": "GPU 정보 복사"
+ },
+ "toast": {
+ "success": "GPU 정보가 클립보드에 복사되었습니다"
+ },
+ "closeInfo": {
+ "label": "GPU 정보 닫기"
+ }
+ },
+ "npuUsage": "NPU 사용률",
+ "npuMemory": "NPU 메모리"
+ },
+ "otherProcesses": {
+ "title": "다른 프로세스들",
+ "processCpuUsage": "사용중인 CPU 사용률",
+ "processMemoryUsage": "사용중인 메모리 사용률"
+ }
+ },
+ "storage": {
+ "title": "스토리지",
+ "overview": "전체 현황",
+ "recordings": {
+ "title": "녹화",
+ "tips": "이 값은 Frigate 데이터베이스의 녹화 영상이 사용 중인 전체 저장 공간입니다. Frigate는 디스크 내 다른 파일들의 저장 공간은 추적하지 않습니다.",
+ "earliestRecording": "가장 오래된 녹화 영상:"
+ },
+ "cameraStorage": {
+ "title": "카메라 저장소",
+ "camera": "카메라",
+ "unusedStorageInformation": "미사용 저장소 정보",
+ "storageUsed": "용량",
+ "percentageOfTotalUsed": "전체 대비 비율",
+ "bandwidth": "대역폭",
+ "unused": {
+ "title": "미사용",
+ "tips": "드라이브에 Frigate 녹화 영상 외에 다른 파일이 저장되어 있는 경우, 이 값은 Frigate에서 실제 사용 가능한 여유 공간을 정확히 나타내지 않을 수 있습니다. Frigate는 녹화 영상 외의 저장 공간 사용량을 추적하지 않습니다."
+ }
+ },
+ "shm": {
+ "title": "SHM (공유 메모리) 할당량",
+ "warning": "현재 SHM 사이즈가 {{total}}MB로 너무 적습니다. 최소 {{min_shm}}MB 이상 올려주세요."
+ }
+ },
+ "cameras": {
+ "title": "카메라",
+ "overview": "전체 현황",
+ "info": {
+ "aspectRatio": "종횡비",
+ "fetching": "카메라 데이터 수집 중",
+ "stream": "스트림 {{idx}}",
+ "streamDataFromFFPROBE": "스트림 데이터는 ffprobe에서 받습니다.",
+ "video": "비디오:",
+ "codec": "코덱:",
+ "resolution": "해상도:",
+ "fps": "FPS:",
+ "unknown": "알 수 없음",
+ "audio": "오디오:",
+ "error": "오류:{{error}}",
+ "cameraProbeInfo": "{{camera}} 카메라 장치 정보",
+ "tips": {
+ "title": "카메라 장치 정보"
+ }
+ },
+ "framesAndDetections": "프레임 / 감지 (Detections)",
+ "label": {
+ "camera": "카메라",
+ "detect": "감지",
+ "skipped": "건너뜀",
+ "ffmpeg": "FFmpeg",
+ "capture": "캡쳐",
+ "overallFramesPerSecond": "전체 초당 프레임",
+ "overallDetectionsPerSecond": "전체 초당 감지",
+ "overallSkippedDetectionsPerSecond": "전체 초당 건너뛴 감지",
+ "cameraFfmpeg": "{{camName}} FFmpeg",
+ "cameraCapture": "{{camName}} 캡쳐",
+ "cameraDetect": "{{camName}} 감지",
+ "cameraFramesPerSecond": "{{camName}} 초당 프레임",
+ "cameraDetectionsPerSecond": "{{camName}} 초당 감지",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} 초당 건너뛴 감지"
+ },
+ "toast": {
+ "success": {
+ "copyToClipboard": "데이터 정보가 클립보드에 복사되었습니다."
+ },
+ "error": {
+ "unableToProbeCamera": "카메라 정보 알 수 없음: {{errorMessage}}"
+ }
+ }
+ },
+ "lastRefreshed": "마지막 새로고침: ",
+ "stats": {
+ "ffmpegHighCpuUsage": "{{camera}} FFmpeg CPU 사용량이 높습니다 ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} 감지 CPU 사용량이 높습니다 ({{detectAvg}}%)",
+ "healthy": "시스템 정상",
+ "reindexingEmbeddings": "Reindexing embeddings ({{processed}}% complete)",
+ "cameraIsOffline": "{{camera}} 오프라인입니다",
+ "detectIsSlow": "{{detect}} (이/가) 느립니다 ({{speed}} ms)",
+ "detectIsVerySlow": "{{detect}} (이/가) 매우 느립니다 ({{speed}} ms)",
+ "shmTooLow": "/dev/shm 할당량을 ({{total}} MB) 최소 {{min}} MB 이상 증가시켜야합니다."
+ },
+ "enrichments": {
+ "title": "추가 분석 정보",
+ "infPerSecond": "초당 추론 속도",
+ "embeddings": {
+ "image_embedding": "이미지 임베딩",
+ "text_embedding": "텍스트 임베딩",
+ "face_recognition": "얼굴 인식",
+ "plate_recognition": "번호판 인식",
+ "image_embedding_speed": "이미지 임베딩 속도",
+ "face_embedding_speed": "얼굴 임베딩 속도",
+ "face_recognition_speed": "얼굴 인식 속도",
+ "plate_recognition_speed": "번호판 인식 속도",
+ "text_embedding_speed": "텍스트 임베딩 속도",
+ "yolov9_plate_detection_speed": "YOLOv9 플레이트 감지 속도",
+ "yolov9_plate_detection": "YOLOv9 플레이트 감지"
+ }
}
}
diff --git a/web/public/locales/lt/audio.json b/web/public/locales/lt/audio.json
index a1b599904..2e8d481ce 100644
--- a/web/public/locales/lt/audio.json
+++ b/web/public/locales/lt/audio.json
@@ -366,7 +366,7 @@
"busy_signal": "Užimtas Signalas",
"dial_tone": "Numerio Rinkimo Tonas",
"telephone_dialing": "Telefono Rinkimas",
- "ringtone": "Skambutis",
+ "ringtone": "Skambėjimo Tonas",
"telephone_bell_ringing": "Skamba Telefonas",
"alarm": "Signalizacija",
"computer_keyboard": "Kopiuterio Klaviatūra",
diff --git a/web/public/locales/lt/common.json b/web/public/locales/lt/common.json
index 936cb217a..0930c68da 100644
--- a/web/public/locales/lt/common.json
+++ b/web/public/locales/lt/common.json
@@ -88,6 +88,14 @@
"length": {
"feet": "pėdos",
"meters": "metrai"
+ },
+ "data": {
+ "kbps": "kB/s",
+ "mbps": "MB/s",
+ "gbps": "GB/s",
+ "kbph": "kB/val",
+ "mbph": "MB/val",
+ "gbph": "GB/val"
}
},
"label": {
@@ -270,5 +278,8 @@
"desc": "Puslapis nerastas"
},
"selectItem": "Pasirinkti {{item}}",
- "readTheDocumentation": "Skaityti dokumentaciją"
+ "readTheDocumentation": "Skaityti dokumentaciją",
+ "information": {
+ "pixels": "{{area}}px"
+ }
}
diff --git a/web/public/locales/lt/components/auth.json b/web/public/locales/lt/components/auth.json
index 7b3737040..3ba7d103b 100644
--- a/web/public/locales/lt/components/auth.json
+++ b/web/public/locales/lt/components/auth.json
@@ -10,6 +10,7 @@
"loginFailed": "Prisijungti nepavyko",
"unknownError": "Nežinoma klaida. Patikrinkite įrašus.",
"webUnknownError": "Nežinoma klaida. Patikrinkite konsolės įrašus."
- }
+ },
+ "firstTimeLogin": "Bandote prisijungti pirmą kartą? Prisijungimo informaciją rasite Frigate loguose."
}
}
diff --git a/web/public/locales/lt/components/dialog.json b/web/public/locales/lt/components/dialog.json
index 84b98af86..28069cb91 100644
--- a/web/public/locales/lt/components/dialog.json
+++ b/web/public/locales/lt/components/dialog.json
@@ -42,7 +42,7 @@
"label": "Rodyti transliacijos statistiką",
"desc": "Įjungti šią galimybę rodyti transliacijos statistiką kaip pridėtinę informaciją kameros vaizde."
},
- "debugView": "Derinimo Vaizdas"
+ "debugView": "Debug Vaizdas"
},
"export": {
"time": {
@@ -83,7 +83,8 @@
"button": {
"markAsReviewed": "Žymėti kaip peržiūrėtą",
"export": "Eksportuoti",
- "deleteNow": "Ištrinti Dabar"
+ "deleteNow": "Ištrinti Dabar",
+ "markAsUnreviewed": "Pažymėti kaip nematytą"
},
"confirmDelete": {
"desc": {
diff --git a/web/public/locales/lt/views/classificationModel.json b/web/public/locales/lt/views/classificationModel.json
new file mode 100644
index 000000000..f797f69d0
--- /dev/null
+++ b/web/public/locales/lt/views/classificationModel.json
@@ -0,0 +1,64 @@
+{
+ "documentTitle": "Klasifikavimo Modeliai",
+ "button": {
+ "deleteClassificationAttempts": "Trinti Klasisifikavimo Nuotraukas",
+ "renameCategory": "Pervadinti Klasę",
+ "deleteCategory": "Trinti Klasę",
+ "deleteImages": "Trinti Nuotraukas",
+ "trainModel": "Treniruoti Modelį"
+ },
+ "toast": {
+ "success": {
+ "deletedCategory": "Ištrinta Klasę",
+ "deletedImage": "Ištrinti Nuotraukas",
+ "categorizedImage": "Sekmingai Klasifikuotas Nuotrauka",
+ "trainedModel": "Modelis sėkmingai apmokytas.",
+ "trainingModel": "Sėkmingai pradėtas modelio apmokymas."
+ },
+ "error": {
+ "deleteImageFailed": "Nepavyko ištrinti:{{errorMessage}}",
+ "deleteCategoryFailed": "Nepavyko ištrinti klasės:{{errorMessage}}",
+ "categorizeFailed": "Nepavyko kategorizuoti nuotraukos:{{errorMessage}}",
+ "trainingFailed": "Nepavyko pradėti modelio apmokymo:{{errorMessage}}"
+ }
+ },
+ "deleteCategory": {
+ "title": "Trinti Klasę",
+ "desc": "Esate įsitikinę, norite ištrinti klasę {{name}}? Tai negrįžtamai ištrins visas susijusias nuotraukas ir reikės iš naujo apmokinti modelį."
+ },
+ "deleteDatasetImages": {
+ "title": "Ištrinti Imties Nuotraukas",
+ "desc": "Esate įsitikinę norite ištrinti {{count}} nautraukas iš {{dataset}}? Šis veiksmas negrįžtamas ir reikės iš naujo apmokinti modelį."
+ },
+ "deleteTrainImages": {
+ "title": "Ištrinti Apmokymo Nuotraukas",
+ "desc": "Ar esate įsitikinę, kad norite ištrinti {{count}} nuotraukas? Šis veiksmas negrįžtamas."
+ },
+ "renameCategory": {
+ "title": "Pervadinti Klasę",
+ "desc": "Įveskite naują vardą vietoje {{name}}. Jums reikės iš naujo apmokinti modelį, kad vardas įsigaliotų."
+ },
+ "description": {
+ "invalidName": "Netinkamas vardas. Vardas gali būti sudarytas tik iš raidžiū, skaičių, tarpų, apostrofų, pabraukimų ar brūkšnelių."
+ },
+ "train": {
+ "title": "Pastarosios Klasifikacijos",
+ "aria": "Pasirinkti Pastarasias Klasifikacijas"
+ },
+ "categories": "Klasės",
+ "createCategory": {
+ "new": "Sukurti Naują Klasę"
+ },
+ "categorizeImageAs": "Klasifikuoti Nuotrauką Kaip:",
+ "categorizeImage": "Klasifikuoti Nuotrauką",
+ "noModels": {
+ "object": {
+ "title": "Nėra Objektų Klasifikavimo Modelių",
+ "description": "Sukurti individualų modelį ištrintų objektų klasifikavimui.",
+ "buttonText": "Sukurti Objekto Modelį"
+ },
+ "state": {
+ "title": "Nėra Būklės Klasifikavimo Modelių"
+ }
+ }
+}
diff --git a/web/public/locales/lt/views/events.json b/web/public/locales/lt/views/events.json
index 79a222371..bd4ab2895 100644
--- a/web/public/locales/lt/views/events.json
+++ b/web/public/locales/lt/views/events.json
@@ -36,5 +36,17 @@
},
"detected": "aptikta",
"suspiciousActivity": "Įtartina Veikla",
- "threateningActivity": "Grėsminga Veikla"
+ "threateningActivity": "Grėsminga Veikla",
+ "detail": {
+ "noDataFound": "Peržiūrai informacijos nėra",
+ "aria": "Perjungti į detalų vaizdą",
+ "trackedObject_one": "objektas",
+ "trackedObject_other": "objektai",
+ "noObjectDetailData": "Nėra objekto detalių duomenų.",
+ "label": "Detalės"
+ },
+ "objectTrack": {
+ "trackedPoint": "Susektas taškas",
+ "clickToSeek": "Spustelkite perkelti į šį laiką"
+ }
}
diff --git a/web/public/locales/lt/views/faceLibrary.json b/web/public/locales/lt/views/faceLibrary.json
index b2cb8d332..721e119ce 100644
--- a/web/public/locales/lt/views/faceLibrary.json
+++ b/web/public/locales/lt/views/faceLibrary.json
@@ -1,8 +1,8 @@
{
"description": {
- "addFace": "Apžiūrėkite naujų kolekcijų pridėjimą prie Veidų Bibliotekos.",
+ "addFace": "Pridėkite naują kolekciją į Veidų Kolekciją įkeldami savo pirmą nuotrauką.",
"placeholder": "Įveskite pavadinimą šiai kolekcijai",
- "invalidName": "Netinkamas vardas. Vardai gali turėti tik raides, numerius, tarpus, apostrofus, pabraukimus ir brukšnelius."
+ "invalidName": "Netinkamas vardas. Vardas gali būti sudarytas tik iš raidžiū, skaičių, tarpų, apostrofų, pabraukimų ar brūkšnelių."
},
"details": {
"person": "Žmogus",
@@ -45,7 +45,7 @@
}
},
"createFaceLibrary": {
- "nextSteps": "Kad sukurtumėte stiprų pagrindą:{{label}}?",
"ask_a": "Er dette objektet en {{label}}?",
"ask_full": "Er dette objekt en {{untranslatedLabel}} ({{translatedLabel}})?"
@@ -56,7 +56,7 @@
}
},
"toast": {
- "success": "Eksporten startet. Se filen i /exports-mappen.",
+ "success": "Eksport startet. Se filen på eksportsiden.",
"error": {
"failed": "Klarte ikke å starte eksport: {{error}}",
"noVaildTimeSelected": "Ingen gyldig tidsperiode valgt",
@@ -117,14 +117,16 @@
"button": {
"export": "Eksportér",
"markAsReviewed": "Merk som inspisert",
- "deleteNow": "Slett nå"
+ "deleteNow": "Slett nå",
+ "markAsUnreviewed": "Merk som ikke inspisert"
}
},
"imagePicker": {
"selectImage": "Velg et sporet objekts miniatyrbilde",
"search": {
- "placeholder": "Søk etter (under-)merkelapp..."
+ "placeholder": "Søk etter (under-)etikett..."
},
- "noImages": "Ingen miniatyrbilder funnet for dette kameraet"
+ "noImages": "Ingen miniatyrbilder funnet for dette kameraet",
+ "unknownLabel": "Lagret utløserbilde"
}
}
diff --git a/web/public/locales/nb-NO/components/filter.json b/web/public/locales/nb-NO/components/filter.json
index b7b81da9b..241102e08 100644
--- a/web/public/locales/nb-NO/components/filter.json
+++ b/web/public/locales/nb-NO/components/filter.json
@@ -1,14 +1,14 @@
{
"filter": "Filter",
"labels": {
- "label": "Merkelapper",
+ "label": "Etiketter",
"all": {
"title": "Alle masker / soner",
- "short": "Merkelapper"
+ "short": "Etiketter"
},
"count": "{{count}} merkelapper",
- "count_other": "{{count}} Merkelapper",
- "count_one": "{{count}} Merkelapp"
+ "count_other": "{{count}} Etiketter",
+ "count_one": "{{count}} Etikett"
},
"features": {
"hasVideoClip": "Har et videoklipp",
@@ -39,7 +39,7 @@
"title": "Innstillinger",
"defaultView": {
"title": "Standard visning",
- "desc": "Når ingen filtre er valgt, vis et sammendrag av de nyeste sporede objektene per merkelapp, eller vis et ufiltrert rutenett.",
+ "desc": "Når ingen filtre er valgt, vis et sammendrag av de nyeste sporede objektene per etikett, eller vis et ufiltrert rutenett.",
"summary": "Sammendrag",
"unfilteredGrid": "Ufiltrert rutenett"
},
@@ -101,8 +101,8 @@
},
"timeRange": "Tidsrom",
"subLabels": {
- "label": "Under-Merkelapper",
- "all": "Alle under-Merkelapper"
+ "label": "Underetiketter",
+ "all": "Alle underetiketter"
},
"score": "Poengsum",
"estimatedSpeed": "Estimert hastighet ({{unit}})",
diff --git a/web/public/locales/nb-NO/views/classificationModel.json b/web/public/locales/nb-NO/views/classificationModel.json
new file mode 100644
index 000000000..0dc06ea32
--- /dev/null
+++ b/web/public/locales/nb-NO/views/classificationModel.json
@@ -0,0 +1,154 @@
+{
+ "documentTitle": "Klassifiseringsmodeller",
+ "button": {
+ "deleteClassificationAttempts": "Slett klassifiseringsbilder",
+ "renameCategory": "Gi nytt navn til kategori",
+ "deleteCategory": "Slett kategori",
+ "deleteImages": "Slett bilder",
+ "trainModel": "Tren modell",
+ "addClassification": "Legg til klassifisering",
+ "deleteModels": "Slett modeller"
+ },
+ "toast": {
+ "success": {
+ "deletedCategory": "Kategori slettet",
+ "deletedImage": "Bilder slettet",
+ "categorizedImage": "Bildet ble klassifisert",
+ "trainedModel": "Modellen ble trent.",
+ "trainingModel": "Modelltrening startet.",
+ "deletedModel_one": "{{count}} modell(er) ble slettet",
+ "deletedModel_other": ""
+ },
+ "error": {
+ "deleteImageFailed": "Kunne ikke slette: {{errorMessage}}",
+ "deleteCategoryFailed": "Kunne ikke slette kategori: {{errorMessage}}",
+ "categorizeFailed": "Kunne ikke klassifisere bilde: {{errorMessage}}",
+ "trainingFailed": "Kunne ikke starte modelltrening: {{errorMessage}}",
+ "deleteModelFailed": "Kunne ikke slette modell: {{errorMessage}}"
+ }
+ },
+ "deleteCategory": {
+ "title": "Slett kategori",
+ "desc": "Er du sikker på at du vil slette kategorien {{name}}? Dette vil permanent slette alle tilknyttede bilder og kreve at modellen trenes på nytt."
+ },
+ "deleteDatasetImages": {
+ "title": "Slett datasettbilder",
+ "desc": "Er du sikker på at du vil slette {{count}} bilder fra {{dataset}}? Denne handlingen kan ikke angres og krever at modellen trenes på nytt."
+ },
+ "deleteTrainImages": {
+ "title": "Slett treningsbilder",
+ "desc": "Er du sikker på at du vil slette {{count}} bilder? Denne handlingen kan ikke angres."
+ },
+ "renameCategory": {
+ "title": "Gi nytt navn til kategori",
+ "desc": "Skriv inn et nytt navn for {{name}}. Du må trene modellen på nytt for at navneendringen skal tre i kraft."
+ },
+ "description": {
+ "invalidName": "Ugyldig navn. Navn kan kun inneholde bokstaver, tall, mellomrom, apostrof, understrek og bindestrek."
+ },
+ "train": {
+ "title": "Nylige klassifiseringer",
+ "aria": "Velg nylige klassifiseringer",
+ "titleShort": "Nylig"
+ },
+ "categories": "Kategorier",
+ "createCategory": {
+ "new": "Opprett ny kategori"
+ },
+ "categorizeImageAs": "Klassifiser bilde som:",
+ "categorizeImage": "Klassifiser bilde",
+ "noModels": {
+ "object": {
+ "title": "Ingen objektklassifiseringsmodeller",
+ "description": "Opprett en tilpasset modell for å klassifisere oppdagede objekter.",
+ "buttonText": "Opprett objektmodell"
+ },
+ "state": {
+ "title": "Ingen tilstandsklassifiseringsmodeller",
+ "description": "Opprett en tilpasset modell for å overvåke og klassifisere tilstandsendringer i spesifikke kamerasoner.",
+ "buttonText": "Opprett tilstandsmodell"
+ }
+ },
+ "wizard": {
+ "title": "Opprett ny klassifisering",
+ "steps": {
+ "nameAndDefine": "Navn og definér",
+ "stateArea": "Tilstandsområde",
+ "chooseExamples": "Velg eksempler"
+ },
+ "step1": {
+ "description": "Tilstandsmodeller overvåker faste kamerasoner for endringer (f.eks. dør åpen/lukket). Objektmodeller legger til klassifiseringer for oppdagede objekter (f.eks. kjente dyr, bud, osv.).",
+ "name": "Navn",
+ "namePlaceholder": "Skriv inn modellnavn...",
+ "type": "Type",
+ "typeState": "Tilstand",
+ "typeObject": "Objekt",
+ "objectLabel": "Objektetikett",
+ "objectLabelPlaceholder": "Velg objekttype...",
+ "classificationType": "Klassifiseringstype",
+ "classificationTypeTip": "Lær om klassifiseringstyper",
+ "classificationTypeDesc": "Underetiketter legger til ekstra tekst på objektetiketten (f.eks. 'Person: Posten'). Attributter er søkbare metadata som lagres separat i objektets metadata.",
+ "classificationSubLabel": "Underetikett",
+ "classificationAttribute": "Attributt",
+ "classes": "Kategorier",
+ "classesTip": "Lær om kategorier",
+ "classesStateDesc": "Definer de ulike tilstandene kamerasonen kan være i. For eksempel: 'åpen' og 'lukket' for en garasjeport.",
+ "classesObjectDesc": "Definer kategoriene du vil klassifisere oppdagede objekter i. For eksempel: 'bud', 'beboer', 'fremmed' for personklassifisering.",
+ "classPlaceholder": "Skriv inn kategorinavn...",
+ "errors": {
+ "nameRequired": "Modellnavn er påkrevd",
+ "nameLength": "Modellnavn må være på 64 tegn eller mindre",
+ "nameOnlyNumbers": "Modellnavn kan ikke bare inneholde tall",
+ "classRequired": "Minst én kategori er påkrevd",
+ "classesUnique": "Kategorinavn må være unike",
+ "stateRequiresTwoClasses": "Tilstandsmodeller krever minst to kategorier",
+ "objectLabelRequired": "Velg en objektetikett",
+ "objectTypeRequired": "Velg en klassifiseringstype"
+ },
+ "states": "Tilstander"
+ },
+ "step2": {
+ "description": "Velg kameraer og definer området som skal overvåkes for hvert kamera. Modellen vil klassifisere tilstanden til disse områdene.",
+ "cameras": "Kameraer",
+ "selectCamera": "Velg kamera",
+ "noCameras": "Klikk + for å legge til kameraer",
+ "selectCameraPrompt": "Velg et kamera fra listen for å definere overvåkingsområdet"
+ },
+ "step3": {
+ "selectImagesPrompt": "Velg alle bilder med: {{className}}",
+ "selectImagesDescription": "Klikk på bilder for å velge dem. Klikk Fortsett når du er ferdig med denne kategorien.",
+ "generating": {
+ "title": "Genererer eksempelbilder",
+ "description": "Frigate henter representative bilder fra opptakene dine. Dette kan ta litt tid..."
+ },
+ "training": {
+ "title": "Trener modell",
+ "description": "Modellen din trenes i bakgrunnen. Lukk dette vinduet, så starter modellen når treningen er ferdig."
+ },
+ "retryGenerate": "Prøv å generere på nytt",
+ "noImages": "Ingen eksempelbilder generert",
+ "classifying": "Klassifiserer og trener...",
+ "trainingStarted": "Trening startet",
+ "errors": {
+ "noCameras": "Ingen kameraer konfigurert",
+ "noObjectLabel": "Ingen objektetikett valgt",
+ "generateFailed": "Kunne ikke generere eksempler: {{error}}",
+ "generationFailed": "Generering mislyktes. Prøv igjen.",
+ "classifyFailed": "Kunne ikke klassifisere bilder: {{error}}"
+ },
+ "generateSuccess": "Eksempelbilder ble generert"
+ }
+ },
+ "deleteModel": {
+ "title": "Slett klassifiseringsmodell",
+ "single": "Er du sikker på at du vil slette {{name}}? Dette vil permanent slette alle tilknyttede data, inkludert bilder og treningsdata. Denne handlingen kan ikke angres.",
+ "desc": "Er du sikker på at du vil slette {{count}} modell(er)? Dette vil permanent slette alle tilknyttede data, inkludert bilder og treningsdata. Denne handlingen kan ikke angres."
+ },
+ "menu": {
+ "objects": "Objekter",
+ "states": "Tilstander"
+ },
+ "details": {
+ "scoreInfo": "Poengsummen representerer gjennomsnittlig klassifiseringskonfidens på tvers av alle deteksjoner av dette objektet."
+ }
+}
diff --git a/web/public/locales/nb-NO/views/events.json b/web/public/locales/nb-NO/views/events.json
index e333fb5ef..f28a06a0c 100644
--- a/web/public/locales/nb-NO/views/events.json
+++ b/web/public/locales/nb-NO/views/events.json
@@ -36,5 +36,24 @@
"selected_other": "{{count}} valgt",
"detected": "detektert",
"suspiciousActivity": "Mistenkelig aktivitet",
- "threateningActivity": "Truende aktivitet"
+ "threateningActivity": "Truende aktivitet",
+ "detail": {
+ "noDataFound": "Ingen detaljer å inspisere",
+ "aria": "Vis/skjul detaljvisning",
+ "trackedObject_one": "objekt",
+ "trackedObject_other": "objekter",
+ "noObjectDetailData": "Ingen detaljdata for objektet tilgjengelig.",
+ "label": "Detalj",
+ "settings": "Detaljvisning – innstillinger",
+ "alwaysExpandActive": {
+ "desc": "Utvid alltid objektdetaljene for det aktive gjennomgangselementet når tilgjengelig.",
+ "title": "Utvid alltid for aktive"
+ }
+ },
+ "objectTrack": {
+ "trackedPoint": "Sporingspunkt",
+ "clickToSeek": "Klikk for å gå til dette tidspunktet"
+ },
+ "zoomIn": "Zoom inn",
+ "zoomOut": "Zoom ut"
}
diff --git a/web/public/locales/nb-NO/views/explore.json b/web/public/locales/nb-NO/views/explore.json
index 9f14df89f..bfa70cde3 100644
--- a/web/public/locales/nb-NO/views/explore.json
+++ b/web/public/locales/nb-NO/views/explore.json
@@ -87,7 +87,7 @@
},
"toast": {
"success": {
- "updatedSublabel": "Under-merkelapp oppdatert med suksess.",
+ "updatedSublabel": "Underetikett ble oppdatert.",
"updatedLPR": "Vellykket oppdatering av kjennemerke.",
"regenerate": "En ny beskrivelse har blitt anmodet fra {{provider}}. Avhengig av hastigheten til leverandøren din, kan den nye beskrivelsen ta litt tid å regenerere.",
"audioTranscription": "Lydtranskripsjon ble forespurt."
@@ -95,7 +95,7 @@
"error": {
"regenerate": "Feil ved anrop til {{provider}} for en ny beskrivelse: {{errorMessage}}",
"updatedLPRFailed": "Oppdatering av kjennemerke feilet: {{errorMessage}}",
- "updatedSublabelFailed": "Feil ved oppdatering av under-merkelapp: {{errorMessage}}",
+ "updatedSublabelFailed": "Feil ved oppdatering av underetikett: {{errorMessage}}",
"audioTranscription": "Forespørsel om lydtranskripsjon feilet: {{errorMessage}}"
}
},
@@ -103,7 +103,7 @@
"tips": {
"mismatch_one": "{{count}} utilgjengelig objekt ble oppdaget og inkludert i dette inspeksjonselementet. Disse objektene kvalifiserte ikke som et varsel eller deteksjon, eller har allerede blitt ryddet opp/slettet.",
"mismatch_other": "{{count}} utilgjengelige objekter ble oppdaget og inkludert i dette inspeksjonselementet. Disse objektene kvalifiserte ikke som et varsel eller deteksjon, eller har allerede blitt ryddet opp/slettet.",
- "hasMissingObjects": "Juster konfigurasjonen hvis du vil at Frigate skal lagre sporede objekter for følgende merkelapper: {{objects}}"
+ "hasMissingObjects": "Juster konfigurasjonen hvis du vil at Frigate skal lagre sporede objekter for følgende etiketter: {{objects}}"
}
},
"topScore": {
@@ -126,10 +126,10 @@
},
"regenerateFromThumbnails": "Regenerer fra miniatyrbilder",
"tips": {
- "descriptionSaved": "Beskrivelse lagret med suksess",
+ "descriptionSaved": "Beskrivelsen ble lagret",
"saveDescriptionFailed": "Feil ved lagring av beskrivelse: {{errorMessage}}"
},
- "label": "Merkelapp",
+ "label": "Etikett",
"editLPR": {
"title": "Rediger kjennemerke",
"descNoLabel": "Skriv inn et nytt kjennemerke for dette sporede objekt",
@@ -142,9 +142,9 @@
"expandRegenerationMenu": "Utvid regenereringsmenyen",
"regenerateFromSnapshot": "Regenerer fra øyeblikksbilde",
"editSubLabel": {
- "title": "Rediger under-merkelapp",
- "desc": "Angi en ny under-merkelapp for denne {{label}}",
- "descNoLabel": "Angi en ny under-merkelapp for dette sporede objektet"
+ "title": "Rediger underetikett",
+ "desc": "Angi en ny underetikett for \"{{label}}\"",
+ "descNoLabel": "Angi en ny underetikett for dette sporede objektet"
},
"snapshotScore": {
"label": "Øyeblikksbilde poengsum"
@@ -188,13 +188,23 @@
"audioTranscription": {
"label": "Transkriber",
"aria": "Forespør lydtranskripsjon"
+ },
+ "showObjectDetails": {
+ "label": "Vis objektets sti"
+ },
+ "hideObjectDetails": {
+ "label": "Gjem objektets sti"
+ },
+ "viewTrackingDetails": {
+ "label": "Vis sporingsdetaljer",
+ "aria": "Vis sporingsdetaljene"
}
},
"searchResult": {
"deleteTrackedObject": {
"toast": {
"error": "Feil ved sletting av sporet objekt: {{errorMessage}}",
- "success": "Sporet objekt ble slettet med suksess."
+ "success": "Sporet objekt ble slettet."
}
},
"tooltip": "Samsvarer {{type}} til {{confidence}}%"
@@ -204,12 +214,13 @@
"details": "detaljer",
"snapshot": "øyeblikksbilde",
"video": "video",
- "object_lifecycle": "objektets livssyklus"
+ "object_lifecycle": "objektets livssyklus",
+ "thumbnail": "miniatyrbilde"
},
"dialog": {
"confirmDelete": {
"title": "Bekreft sletting",
- "desc": "Sletting av dette sporede objektet fjerner øyeblikksbildet, eventuelle lagrede vektorrepresentasjoner og alle tilknyttede livssykloppføringer for objektet. Opptak av dette sporede objektet i Historikk-visningen vil IKKE bli slettet.annotation_offset poate fi folosit pentru a ajusta acest lucru.",
+ "desc": "Aceste date provin din stream-ul de detecție al camerei tale, dar sunt suprapuse pe imaginile din stream-ul de înregistrare. Este puțin probabil ca cele două stream-uri să fie perfect sincronizate. Ca urmare, caseta de delimitare și materialul video nu se vor potrivi perfect. Totuși, câmpul annotation_offset poate fi folosit pentru a ajusta acest lucru.",
"millisecondsToOffset": "Millisecondele cu care să compensezi adnotările de detecție. Implicit: 0",
"tips": "SFAT: Imaginează-ți că există un clip de eveniment cu o persoană care merge de la stânga la dreapta. Dacă caseta de delimitare de pe linia temporală a evenimentului este constant în partea stângă a persoanei, atunci valoarea ar trebui să fie scăzută. În mod similar, dacă persoana merge de la stânga la dreapta și caseta de delimitare este constant înaintea persoanei, atunci valoarea ar trebui să fie crescută.",
"toast": {
@@ -200,12 +201,22 @@
"audioTranscription": {
"label": "Transcrie",
"aria": "Solicită transcrierea audio"
+ },
+ "viewTrackingDetails": {
+ "label": "Vizualizați detaliile de urmărire",
+ "aria": "Vizualizați detaliile de urmărire"
+ },
+ "showObjectDetails": {
+ "label": "Afișează traseul obiectului"
+ },
+ "hideObjectDetails": {
+ "label": "Ascunde traseul obiectului"
}
},
"dialog": {
"confirmDelete": {
"title": "Confirmă ștergerea",
- "desc": "Ștergerea acestui obiect urmărit elimină instantaneul, orice încorporări salvate și orice intrări asociate ciclului de viață al obiectului. Materialul video înregistrat al acestui obiect urmărit în vizualizarea Istoric NU va fi șters.Boxy pohybu
Červené boxy budú prekryté na miestach snímky, kde je práve detekovaný pohyb.
" + }, + "regions": { + "title": "Regióny", + "desc": "Zobraziť rámček oblasti záujmu odoslaný do detektora objektov", + "tips": "Oblasti regiónov
Jasnozelené políčka budú prekrývať oblasti záujmu v zábere, ktoré sa odosielajú do detektora objektov.
" + }, + "paths": { + "title": "Cesty", + "desc": "Zobraziť významné body dráhy sledovaného objektu", + "tips": "Cesty
Čiary a kruhy označujú významné body, ktorými sa sledovaný objekt počas svojho životného cyklu pohyboval.
" + }, + "objectShapeFilterDrawing": { + "title": "Výkres filtra tvaru objektu", + "desc": "Nakreslite na obrázok obdĺžnik, aby ste zobrazili podrobnosti o ploche a pomere", + "tips": "Povolením tejto možnosti nakreslíte na obraze kamery obdĺžnik, ktorý zobrazuje jeho plochu a pomer strán. Tieto hodnoty sa potom dajú použiť na nastavenie parametrov filtra tvaru objektu vo vašej konfigurácii.", + "score": "Skóre", + "ratio": "Pomer", + "area": "Oblasť" + } + }, + "cameraWizard": { + "title": "Pridať kameru", + "description": "Postupujte podľa pokynov nižšie a pridajte novú kameru na inštaláciu Frigate.", + "steps": { + "nameAndConnection": "Meno a pripojenie", + "streamConfiguration": "Konfigurácia prúdu", + "validationAndTesting": "Platnosť a testovanie" + }, + "save": { + "success": "Úspešne zachránil novú kameru {{cameraName}}.", + "failure": "Úspora chýb {{cameraName}}." + }, + "testResultLabels": { + "resolution": "Rozlíšenie", + "video": "Video", + "audio": "Zvuk", + "fps": "FPS" + }, + "commonErrors": { + "noUrl": "Uveďte platnú adresu streamu", + "testFailed": "Test Stream zlyhal: {{error}}" + }, + "step1": { + "description": "Zadajte detaily kamery a vyskúšajte pripojenie.", + "cameraName": "Názov kamery", + "cameraNamePlaceholder": "e.g., front_door alebo Back Yard Prehľad", + "host": "Hostia / IP adresa", + "port": "Prístav", + "username": "Používateľské meno", + "usernamePlaceholder": "Voliteľné", + "password": "Heslo", + "passwordPlaceholder": "Voliteľné", + "selectTransport": "Vyberte dopravný protokol", + "cameraBrand": "Značka kamery", + "selectBrand": "Vyberte značku kamery pre URL šablónu", + "customUrl": "Vlastné Stream URL", + "brandInformation": "Informácie o značke", + "brandUrlFormat": "Pre kamery s formátom RTSP URL ako: {{exampleUrl}}", + "customUrlPlaceholder": "rtsp://username:password@host:port/path", + "testConnection": "Testovacie pripojenie", + "testSuccess": "Test pripojenia úspešný!", + "testFailed": "Test pripojenia zlyhal. Skontrolujte svoj vstup a skúste to znova.", + "streamDetails": "Detaily vysielania", + "warnings": { + "noSnapshot": "Nemožno načítať snímku z konfigurovaného vysielania." + }, + "errors": { + "brandOrCustomUrlRequired": "Buď vyberte značku kamery s hostiteľom / IP alebo si vyberte \"Iný\" s vlastnou URL", + "nameRequired": "Názov kamery je povinný", + "nameLength": "Názov kamery musí byť 64 znakov alebo menej", + "invalidCharacters": "Názov kamery obsahuje neplatné znaky", + "nameExists": "Názov kamery už existuje", + "brands": { + "reolink-rtsp": "Reolink RTSP sa neodporúča. Odporúča sa povoliť HTTP v nastavení kamery a reštartovať sprievodca kamery." + }, + "customUrlRtspRequired": "Vlastné URL musia začať s \"rtsp / \"\". Manuálna konfigurácia je potrebná pre non-RTSP kamerové prúdy." + }, + "docs": { + "reolink": "https://docs.frigate.video/configuration/camera_specific.html#reolink-cameras" + }, + "testing": { + "probingMetadata": "Skúmanie metadát kamery...", + "fetchingSnapshot": "Načítava sa snímka z kamery..." + } + }, + "step2": { + "description": "Konfigurovať prúdové role a pridať ďalšie prúdy pre vašu kameru.", + "streamsTitle": "Kamerové prúdy", + "addStream": "Pridať Stream", + "addAnotherStream": "Pridať ďalší Stream", + "streamTitle": "Stream {{number}}", + "streamUrl": "Stream URL", + "streamUrlPlaceholder": "rtsp://username:password@host:port/path", + "url": "URL", + "resolution": "Rozlíšenie", + "selectResolution": "Vyberte rozlíšenie", + "quality": "Kvalita", + "selectQuality": "Vyberte kvalitu", + "roles": "Roly", + "roleLabels": { + "detect": "Detekcia objektov", + "record": "Nahrávanie", + "audio": "Zvuk" + }, + "testStream": "Testovacie pripojenie", + "testSuccess": "Stream test úspešné!", + "testFailed": "Stream test zlyhal", + "testFailedTitle": "Test Zlyhal", + "connected": "Pripojené", + "notConnected": "Nie je pripojený", + "featuresTitle": "Vlastnosti", + "go2rtc": "Znížte počet pripojení ku kamere", + "detectRoleWarning": "Aspoň jeden prúd musí mať \"detekt\" úlohu pokračovať.", + "rolesPopover": { + "title": "Roly streamu", + "detect": "Hlavné krmivo pre detekciu objektu.", + "record": "Ukladá segmenty video kanála na základe nastavení konfigurácie.", + "audio": "Kŕmenie pre detekciu zvuku." + }, + "featuresPopover": { + "title": "Funkcie streamu", + "description": "Použite prekrytie go2rtc na zníženie pripojenia k fotoaparátu." + } + }, + "step3": { + "connectStream": "Pripojiť", + "connectingStream": "Pripája", + "disconnectStream": "Odpojiť", + "estimatedBandwidth": "Odhadovaná šírka pásma", + "roles": "Roly", + "none": "Žiadny", + "error": "Chyba", + "streamValidated": "Stream {{number}} úspešne overený", + "streamValidationFailed": "Stream {{number}} validácia zlyhala", + "saveAndApply": "Uložiť novú kameru", + "saveError": "Neplatná konfigurácia. Skontrolujte nastavenia.", + "issues": { + "title": "Stream Platnosť", + "videoCodecGood": "Kód videa {{codec}}.", + "audioCodecGood": "Audio kódc je {{codec}}.", + "noAudioWarning": "Žiadne audio zistené pre tento prúd, nahrávanie nebude mať audio.", + "audioCodecRecordError": "AAC audio kodek je potrebný na podporu audio v záznamoch.", + "audioCodecRequired": "Zvukový prúd je povinný podporovať detekciu zvuku.", + "restreamingWarning": "Zníženie pripojenia ku kamery pre rekordný prúd môže mierne zvýšiť využitie CPU.", + "dahua": { + "substreamWarning": "Substream 1 je uzamknutý na nízke rozlíšenie. Mnoho Dahua / Amcrest / EmpireTech kamery podporujú ďalšie podstreamy, ktoré musia byť povolené v nastavení kamery. Odporúča sa skontrolovať a využiť tie prúdy, ak je k dispozícii." + }, + "hikvision": { + "substreamWarning": "Substream 1 je uzamknutý na nízke rozlíšenie. Mnoho Hikvision kamery podporujú ďalšie podstreamy, ktoré musia byť povolené v nastavení kamery. Odporúča sa skontrolovať a využiť tie prúdy, ak je k dispozícii." + }, + "resolutionHigh": "Rozlíšenie {{resolution}} môže spôsobiť zvýšenú spotrebu zdrojov.", + "resolutionLow": "Rozlíšenie {{resolution}} môže byť príliš nízka pre spoľahlivú detekciu malých objektov." + }, + "description": "Záverečné overenie a analýza pred uložením nového fotoaparátu. Pripojte každý prúd pred uložením.", + "validationTitle": "Stream Platnosť", + "connectAllStreams": "Pripojte všetky prúdy", + "reconnectionSuccess": "Opätovné pripojenie bolo úspešné.", + "reconnectionPartial": "Niektoré prúdy sa nepodarilo prepojiť.", + "streamUnavailable": "Ukážka streamu nie je k dispozícii", + "reload": "Znovu načítať", + "connecting": "Pripája...", + "streamTitle": "Stream {{number}}", + "valid": "Platné", + "failed": "Zlyhanie", + "notTested": "Netestované" + } + }, + "cameraManagement": { + "title": "Správa kamier", + "addCamera": "Pridať novu kameru", + "editCamera": "Upraviť kameru:", + "selectCamera": "Vyberte kameru", + "backToSettings": "Späť na nastavenia kamery", + "streams": { + "title": "Enable / Disable kamery", + "desc": "Dočasne deaktivujte kameru, kým sa Frigate nereštartuje. Deaktivácia kamery úplne zastaví spracovanie streamov z tejto kamery aplikáciou Frigate. Detekcia, nahrávanie a ladenie nebudú k dispozícii.https://…). Ide o obmedzenie prehliadača. Ak chcete používať notifikácie, pristupujte k Frigate bezpečne."
+ },
+ "globalSettings": {
+ "title": "Globálne nastavenia",
+ "desc": "Dočasne pozastaviť upozornenia pre konkrétne kamery na všetkých registrovaných zariadeniach."
+ },
+ "email": {
+ "title": "E-mail",
+ "placeholder": "e.g. príklad@email.com",
+ "desc": "Vyžaduje sa platný e-mail, ktorý bude použitý na upozornenie v prípade akýchkoľvek problémov so službou push."
+ },
+ "cameras": {
+ "title": "Kamery",
+ "noCameras": "K dispozícii nie sú žiadne kamery",
+ "desc": "Vyberte, na ktoré kamery umožňujú notifikácie."
+ },
+ "deviceSpecific": "Špecifické nastavenia zariadenia",
+ "registerDevice": "Registrovať toto zariadenie",
+ "unregisterDevice": "Zrušte registráciu tohto zariadenia",
+ "sendTestNotification": "Odoslať testovacie oznámenie",
+ "unsavedRegistrations": "Neuložené registrácie oznámení",
+ "unsavedChanges": "Neuložené zmeny upozornení",
+ "active": "Upozornenia sú aktívne",
+ "suspended": "Oznámenie pozastavuju {{time}}",
+ "suspendTime": {
+ "suspend": "Pozastaviť",
+ "5minutes": "Pozastaviť na 5 minút",
+ "10minutes": "Pozastaviť na 10 minút",
+ "30minutes": "Pozastaviť na 30 minút",
+ "1hour": "Pozastaviť na 1 hodinu",
+ "12hours": "Pozastaviť na 12 hodín",
+ "24hours": "Pozastaviť na 24 hodín",
+ "untilRestart": "Pozastaviť do reštartovania"
+ },
+ "cancelSuspension": "Zrušiť pozastavenie",
+ "toast": {
+ "success": {
+ "registered": "Úspešne zaregistrované pre upozornenia. Pred odoslaním akýchkoľvek upozornení (vrátane testovacieho upozornenia) je potrebné reštartovať Frigate.",
+ "settingSaved": "Nastavenie oznámenia boli uložené."
+ },
+ "error": {
+ "registerFailed": "Uloženie registrácie upozornenia zlyhalo."
+ }
+ }
+ },
+ "frigatePlus": {
+ "title": "Nastavenie Frigate+",
+ "apiKey": {
+ "title": "Frigate + API kľúč",
+ "validated": "Frigate + API kľúč je detekovaný a overený",
+ "notValidated": "Frigate + API kľúč nie je detekovaný alebo nie je overený",
+ "desc": "Frigate+ API kľúč umožňuje integráciu s Frigate+ služby.",
+ "plusLink": "Prečítajte si viac o Frigate+"
+ },
+ "snapshotConfig": {
+ "title": "Konfigurácia snímky",
+ "desc": "Odosielanie do Frigate+ vyžaduje, aby boli v konfigurácii povolené snímky aj snímky clean_copy.",
+ "cleanCopyWarning": "Niektoré kamery majú povolené snímky, ale voľba clean_copy je zakázaná. Pre možnosť odosielania snímok z týchto kamier do služby Frigate+ je nutné túto voľbu povoliť v konfigurácii snímok.",
+ "table": {
+ "camera": "Kamera",
+ "snapshots": "Snímky",
+ "cleanCopySnapshots": "clean_copy Snímky"
+ }
+ },
+ "modelInfo": {
+ "title": "Informácie o Modele",
+ "modelType": "Typ Modelu",
+ "trainDate": "Dátum Tréningu",
+ "baseModel": "Základný Model",
+ "plusModelType": {
+ "baseModel": "Základný Model",
+ "userModel": "Doladené"
+ },
+ "supportedDetectors": "Podporované Detektory",
+ "cameras": "Kamery",
+ "loading": "Načítavam informácie o modeli…",
+ "error": "Chyba načítania informácií o modeli",
+ "availableModels": "Dostupné Moduly",
+ "loadingAvailableModels": "Načítavam dostupné modely…",
+ "modelSelect": "Tu môžete vybrať dostupné modely zo služby Frigate+. Upozorňujeme, že je možné zvoliť iba modely kompatibilné s aktuálnou konfiguráciou detektora."
+ },
+ "unsavedChanges": "Neuložené zmeny nastavenia Frigate+",
+ "restart_required": "Vyžadovaný reštart (model Frigate+ zmenený)",
+ "toast": {
+ "success": "Nastavenia Frigate+ boli uložené. Reštartujte Frigate+ pre aplikovanie zmien.",
+ "error": "Chyba pri ukladaní zmien konfigurácie: {{errorMessage}}"
+ }
+ },
+ "triggers": {
+ "documentTitle": "Spúšťače",
+ "semanticSearch": {
+ "title": "Sémantické vyhľadávanie je vypnuté",
+ "desc": "Na používanie spúšťačov musí byť povolené sémantické vyhľadávanie."
+ },
+ "management": {
+ "title": "Spúšťače",
+ "desc": "Správa spúšťa {{camera}}. Použite typ miniatúry, aby ste spustili na podobných miniatúr na vybraných tracked objekt, a typ popisu, aby ste spustili podobné popisy na text, ktorý určíte."
+ },
+ "addTrigger": "Pridať Spúšťač",
+ "table": {
+ "name": "Meno",
+ "type": "Typ",
+ "content": "Obsah",
+ "threshold": "Prah",
+ "actions": "Akcie",
+ "noTriggers": "Pre túto kameru nie sú nakonfigurované žiadne spúšťače.",
+ "edit": "Upraviť",
+ "deleteTrigger": "Odstrániť spúšťač",
+ "lastTriggered": "Naposledy spustené"
+ },
+ "type": {
+ "thumbnail": "Náhľad",
+ "description": "Popis"
+ },
+ "actions": {
+ "notification": "Poslať upozornenie",
+ "sub_label": "Pridať vedľajší štítok",
+ "attribute": "Pridať atribút"
+ },
+ "dialog": {
+ "createTrigger": {
+ "title": "Vytvoriť spúšťač",
+ "desc": "Vytvorte spúšť pre kameru {{camera}}"
+ },
+ "editTrigger": {
+ "title": "Upraviť spúšťač",
+ "desc": "Upraviť nastavenia spúšťača na kamere {{camera}}"
+ },
+ "deleteTrigger": {
+ "title": "Odstrániť spúšťač",
+ "desc": "Naozaj chcete odstrániť spúšťač {{triggerName}}? Túto akciu nie je možné vrátiť späť."
+ },
+ "form": {
+ "name": {
+ "title": "Meno",
+ "placeholder": "Zadajte meno pre spúšťača",
+ "description": "Zadajte jedinečné meno alebo popis na identifikáciu tohto spúšťania",
+ "error": {
+ "minLength": "Názov musí mať aspoň 2 znaky.",
+ "invalidCharacters": "Meno môže obsahovať iba písmená, číslice, podčiarkovníky a pomlčky.",
+ "alreadyExists": "Spúšťač s týmto názvom už pre túto kameru existuje."
+ }
+ },
+ "enabled": {
+ "description": "Povoliť alebo zakázať tento spúšťač"
+ },
+ "type": {
+ "title": "Typ",
+ "placeholder": "Vybrať typ spúšťača",
+ "description": "Spustiť, keď sa zistí podobný popis sledovaného objektu",
+ "thumbnail": "Spustiť, keď sa zistí podobná miniatúra sledovaného objektu"
+ },
+ "content": {
+ "title": "Obsah",
+ "imagePlaceholder": "Vyberte miniatúru",
+ "textPlaceholder": "Zadajte obsah textu",
+ "imageDesc": "Zobrazujú sa iba posledné 100 miniatúr. Ak nemôžete nájsť požadovanú miniatúru, prečítajte si skôr objekty v preskúmať a nastaviť spúšťací z ponuky tam.",
+ "textDesc": "Zadajte text, aby ste spustili túto akciu, keď je detekovaný podobný popis objektu.",
+ "error": {
+ "required": "Obsah je potrebný."
+ }
+ },
+ "threshold": {
+ "title": "Prah",
+ "desc": "Nastavte prah podobnosti pre tento spúšťač. Vyšší prah znamená, že na spustenie spúšťača je potrebná bližšia zhoda.",
+ "error": {
+ "min": "Threshold musí byť aspoň 0",
+ "max": "Threshold musí byť na väčšine 1"
+ }
+ },
+ "actions": {
+ "title": "Akcie",
+ "desc": "V predvolenom nastavení Frigate odosiela MQTT správu pre všetky spúšťače. Zvoľte dodatočnú akciu, ktorá sa má vykonať, keď sa tento spúšťač aktivuje.",
+ "error": {
+ "min": "Musí byť vybraná aspoň jedna akcia."
+ }
+ }
+ }
+ },
+ "wizard": {
+ "title": "Vytvoriť spúšťač",
+ "step1": {
+ "description": "Konfigurujte základné nastavenia pre vašu spúšť."
+ },
+ "step2": {
+ "description": "Nastavte obsah, ktorý spustí túto akciu."
+ },
+ "step3": {
+ "description": "Konfigurovať prah a akcie pre tento spúšťač."
+ },
+ "steps": {
+ "nameAndType": "Meno a typ",
+ "configureData": "Konfigurovať údaje",
+ "thresholdAndActions": "Prah a akcie"
+ }
+ },
+ "toast": {
+ "success": {
+ "createTrigger": "Spúšťač {{name}} bol úspešne vytvorený.",
+ "updateTrigger": "Spúšťač {{name}} bol úspešne aktualizovaný.",
+ "deleteTrigger": "Spúšťač {{name}} bol úspešne zmazaný."
+ },
+ "error": {
+ "createTriggerFailed": "Nepodarilo sa vytvoriť spúšťač: {{errorMessage}}",
+ "updateTriggerFailed": "Nepodarilo sa aktualizovať spúšťač: {{errorMessage}}",
+ "deleteTriggerFailed": "Nepodarilo sa zmazať spúšťač: {{errorMessage}}"
+ }
}
}
}
diff --git a/web/public/locales/sk/views/system.json b/web/public/locales/sk/views/system.json
index 2ff91c9ee..e2ea330e6 100644
--- a/web/public/locales/sk/views/system.json
+++ b/web/public/locales/sk/views/system.json
@@ -138,7 +138,49 @@
"capture": "zachytiť",
"cameraFfmpeg": "{{camName}} FFmpeg",
"cameraCapture": "zachytiť{{camName}}",
- "cameraDetect": "Detekcia {{camName}}"
+ "cameraDetect": "Detekcia {{camName}}",
+ "overallFramesPerSecond": "celkový počet snímok za sekundu",
+ "overallDetectionsPerSecond": "celkový počet detekcií za sekundu",
+ "overallSkippedDetectionsPerSecond": "celkový počet vynechaných detekcií za sekundu",
+ "cameraFramesPerSecond": "{{camName}}snimky za sekundu",
+ "cameraDetectionsPerSecond": "{{camName}}detekcie za sekundu",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} vynechaných detekcií za sekundu"
+ },
+ "toast": {
+ "success": {
+ "copyToClipboard": "Dáta sondy boli skopírované do schránky."
+ },
+ "error": {
+ "unableToProbeCamera": "Nepodarilo sa overiť kameru: {{errorMessage}}"
+ }
+ }
+ },
+ "lastRefreshed": "Naposledy obnovené: ",
+ "stats": {
+ "ffmpegHighCpuUsage": "{{camera}} má vysoké využitie CPU vo formáte FFmpeg ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} má vysoké využitie CPU pri detekcii ({{detectAvg}}%)",
+ "healthy": "Systém je zdravý",
+ "reindexingEmbeddings": "Preindexovanie vložených prvkov (dokončené na {{processed}} %)",
+ "cameraIsOffline": "{{camera}} je offline",
+ "detectIsSlow": "{{detect}} je pomalý ({{speed}} ms)",
+ "detectIsVerySlow": "{{detect}} je veľmi pomalý ({{speed}} ms)",
+ "shmTooLow": "Alokácia /dev/shm ({{total}} MB) by sa mala zvýšiť aspoň na {{min}} MB."
+ },
+ "enrichments": {
+ "title": "Obohatenia",
+ "infPerSecond": "Inferencie za sekundu",
+ "embeddings": {
+ "image_embedding": "Vkladanie obrázkov",
+ "text_embedding": "Vkladanie textu",
+ "face_recognition": "Rozpoznávanie tváre",
+ "plate_recognition": "Rozpoznávanie ŠPZ",
+ "image_embedding_speed": "Rýchlosť vkladania obrázkov",
+ "face_embedding_speed": "Rýchlosť vkladania tváre",
+ "face_recognition_speed": "Rýchlosť rozpoznávania tváre",
+ "plate_recognition_speed": "Rýchlosť rozpoznávania ŠPZ",
+ "text_embedding_speed": "Rýchlosť vkladania textu",
+ "yolov9_plate_detection_speed": "YOLOv9 rýchlosť detekcie ŠPZ",
+ "yolov9_plate_detection": "YOLOv9 Detekcia ŠPZ"
}
}
}
diff --git a/web/public/locales/sl/components/dialog.json b/web/public/locales/sl/components/dialog.json
index 46d1dfad8..f0284ee0f 100644
--- a/web/public/locales/sl/components/dialog.json
+++ b/web/public/locales/sl/components/dialog.json
@@ -32,7 +32,7 @@
},
"export": {
"time": {
- "lastHour_one": "Zadnja ura",
+ "lastHour_one": "Zadnja {{count}} ura",
"lastHour_two": "Zadnji {{count}} uri",
"lastHour_few": "Zadnje {{count}} ure",
"lastHour_other": "Zadnjih {{count}} ur",
@@ -54,7 +54,7 @@
"export": "Izvoz",
"selectOrExport": "Izberi ali Izvozi",
"toast": {
- "success": "Izvoz se je uspešno začel. Datoteko si oglejte v mapi /exports.",
+ "success": "Izvoz se je uspešno začel. Datoteko si oglejte v izvozih.",
"error": {
"failed": "Npaka pri začetku izvoza: {{error}}",
"endTimeMustAfterStartTime": "Končni čas mora biti po začetnem čase",
@@ -109,7 +109,8 @@
"button": {
"export": "Izvoz",
"markAsReviewed": "Označi kot pregledano",
- "deleteNow": "Izbriši Zdaj"
+ "deleteNow": "Izbriši Zdaj",
+ "markAsUnreviewed": "Označi kot nepregledano"
}
},
"imagePicker": {
diff --git a/web/public/locales/sl/components/filter.json b/web/public/locales/sl/components/filter.json
index 1f4962b00..5a33b9709 100644
--- a/web/public/locales/sl/components/filter.json
+++ b/web/public/locales/sl/components/filter.json
@@ -129,6 +129,8 @@
"loading": "Nalaganje prepoznanih registrskih tablic…",
"placeholder": "Iskanje registrskih tablic…",
"noLicensePlatesFound": "Nobena registrska tablica ni bila najdena.",
- "selectPlatesFromList": "Na seznamu izberite eno ali več registrskih tablic."
+ "selectPlatesFromList": "Na seznamu izberite eno ali več registrskih tablic.",
+ "selectAll": "Izberi vse",
+ "clearAll": "Počisti vse"
}
}
diff --git a/web/public/locales/sl/views/classificationModel.json b/web/public/locales/sl/views/classificationModel.json
new file mode 100644
index 000000000..aceedb094
--- /dev/null
+++ b/web/public/locales/sl/views/classificationModel.json
@@ -0,0 +1,50 @@
+{
+ "description": {
+ "invalidName": "Neveljavno ime. Ime lahko vsebuje črke, števila, presledke, narekovaje, podčrtaje in pomišljaje."
+ },
+ "categories": "Razredi",
+ "createCategory": {
+ "new": "Naredi nov razred"
+ },
+ "button": {
+ "renameCategory": "Preimenuj razred",
+ "deleteCategory": "Zbriši razred",
+ "deleteImages": "Zbriši slike",
+ "trainModel": "Treniraj model"
+ },
+ "toast": {
+ "success": {
+ "deletedCategory": "Izbrisan razred",
+ "deletedImage": "Zbrisane slike",
+ "trainedModel": "Uspešno treniranje modela.",
+ "trainingModel": "Uspešen začetek treniranje modela."
+ },
+ "error": {
+ "deleteImageFailed": "Neuspešno brisanje: {{errorMessage}}",
+ "deleteCategoryFailed": "Neuspešno brisanje razreda: {{errorMessage}}",
+ "trainingFailed": "Neuspešen začetek treniranje modela: {{errorMessage}}"
+ }
+ },
+ "deleteCategory": {
+ "title": "Zbriši razred"
+ },
+ "deleteTrainImages": {
+ "title": "Zbriši slike za treniranje",
+ "desc": "Ali ste prepričani, da želite izbrisati {{count}} slik? Tega dejanja ni mogoče razveljaviti."
+ },
+ "renameCategory": {
+ "title": "Preimenuj razred",
+ "desc": "Vnesite novo ime za {{name}}. Model bo treba znova naučiti, da bo sprememba imena začela veljati."
+ },
+ "train": {
+ "title": "Nedavne razvrstitve",
+ "aria": "Izberi nedavne razvrstitve"
+ },
+ "categorizeImageAs": "Razvrsti sliko kot:",
+ "categorizeImage": "Razvrsti sliko",
+ "noModels": {
+ "object": {
+ "title": "Ni modelov za razvrščanje objektov"
+ }
+ }
+}
diff --git a/web/public/locales/sl/views/faceLibrary.json b/web/public/locales/sl/views/faceLibrary.json
index 9d5324759..be219cdf1 100644
--- a/web/public/locales/sl/views/faceLibrary.json
+++ b/web/public/locales/sl/views/faceLibrary.json
@@ -1,6 +1,6 @@
{
"description": {
- "addFace": "Sprehodite se skozi dodajanje nove zbirke v knjižnico obrazov.",
+ "addFace": "Dodajanje nove zbirke v knjižnico obrazov z nalaganjem slike",
"placeholder": "Vnesite ime za to zbirko",
"invalidName": "Neveljavno ime. Ime lahko vsebuje črke, števila, presledke, narekovaje, podčrtaje in pomišljaje."
},
@@ -55,7 +55,8 @@
"createFaceLibrary": {
"title": "Ustvari Zbirko",
"desc": "Ustvari novo zbirko",
- "new": "Ustvari Nov Obraz"
+ "new": "Ustvari Nov Obraz",
+ "nextSteps": "Za vzpoztavitev trdnih osnov: 軌跡
線條同圓圈會標示追蹤物件整個生命周期中移動過的重要點。
" } }, "users": { @@ -502,7 +558,8 @@ "adminDesc": "可使用所有功能。", "viewer": "觀看者", "viewerDesc": "只限使用即時儀表板、審查、瀏覽及匯出功能。", - "admin": "管理員" + "admin": "管理員", + "customDesc": "自訂角色,具特定鏡頭存取權限。" }, "select": "選擇角色" }, @@ -676,5 +733,386 @@ "success": "進階功能設定已儲存。請重新啟動 Frigate 以套用你的更改。", "error": "儲存設定變更失敗:{{errorMessage}}" } + }, + "roles": { + "management": { + "title": "觀察者角色管理", + "desc": "管理自訂觀察者角色及其對此 Frigate 實例的鏡頭存取權限。" + }, + "addRole": "新增角色", + "table": { + "role": "角色", + "cameras": "鏡頭", + "actions": "操作", + "noRoles": "未找到自訂角色。", + "editCameras": "編輯鏡頭", + "deleteRole": "刪除角色" + }, + "toast": { + "success": { + "createRole": "角色 {{role}} 已成功建立", + "updateCameras": "角色 {{role}} 的鏡頭已更新", + "deleteRole": "角色 {{role}} 已成功刪除", + "userRolesUpdated_other": "{{count}} 位使用者被更新為「觀察者」角色,將可存取所有鏡頭。" + }, + "error": { + "createRoleFailed": "建立角色失敗:{{errorMessage}}", + "updateCamerasFailed": "更新鏡頭失敗:{{errorMessage}}", + "deleteRoleFailed": "刪除角色失敗:{{errorMessage}}", + "userUpdateFailed": "更新使用者角色失敗:{{errorMessage}}" + } + }, + "dialog": { + "createRole": { + "title": "建立新角色", + "desc": "新增角色,並指定鏡頭存取權限。" + }, + "editCameras": { + "title": "編輯角色鏡頭", + "desc": "更新角色 {{role}} 的鏡頭存取權限。" + }, + "deleteRole": { + "title": "刪除角色", + "desc": "此操作無法復原。將永久刪除該角色,並將使用此角色的所有使用者改為「觀察者」角色,可存取所有鏡頭。", + "warn": "你確定要刪除 {{role}} 嗎?", + "deleting": "正在刪除…" + }, + "form": { + "role": { + "title": "角色名稱", + "placeholder": "輸入角色名稱", + "desc": "只允許字母、數字、句號或底線。", + "roleIsRequired": "必須填寫角色名稱", + "roleOnlyInclude": "角色名稱只可包含字母、數字、句號或底線", + "roleExists": "已有相同名稱的角色存在。" + }, + "cameras": { + "title": "鏡頭", + "desc": "選擇此角色可存取的鏡頭。至少需要選擇一個鏡頭。", + "required": "至少需要選擇一個鏡頭。" + } + } + } + }, + "triggers": { + "documentTitle": "觸發器", + "semanticSearch": { + "title": "語意搜尋已停用", + "desc": "必須啟用語意搜尋才能使用觸發器。" + }, + "management": { + "title": "觸發器管理", + "desc": "管理 {{camera}} 的觸發器。使用縮圖類型可對與所選追蹤物件相似的縮圖觸發,使用描述類型可對與你指定文字描述相似的事件觸發。" + }, + "addTrigger": "新增觸發器", + "table": { + "name": "名稱", + "type": "類型", + "content": "內容", + "threshold": "閾值", + "actions": "操作", + "noTriggers": "此鏡頭尚未設定任何觸發器。", + "edit": "編輯", + "deleteTrigger": "刪除觸發器", + "lastTriggered": "上次觸發" + }, + "type": { + "thumbnail": "縮圖", + "description": "描述" + }, + "actions": { + "alert": "標記為警報", + "notification": "發送通知" + }, + "dialog": { + "createTrigger": { + "title": "建立觸發器", + "desc": "為鏡頭 {{camera}} 建立觸發器" + }, + "editTrigger": { + "title": "編輯觸發器", + "desc": "編輯鏡頭 {{camera}} 的觸發器設定" + }, + "deleteTrigger": { + "title": "刪除觸發器", + "desc": "你確定要刪除觸發器 {{triggerName}} 嗎?此操作無法復原。" + }, + "form": { + "name": { + "title": "名稱", + "placeholder": "輸入觸發器名稱", + "error": { + "minLength": "名稱至少需 2 個字元。", + "invalidCharacters": "名稱只可包含字母、數字、底線及連字符。", + "alreadyExists": "此鏡頭已有相同名稱的觸發器。" + } + }, + "enabled": { + "description": "啟用或停用此觸發器" + }, + "type": { + "title": "類型", + "placeholder": "選擇觸發器類型" + }, + "friendly_name": { + "title": "顯示名稱", + "placeholder": "為此觸發器命名或描述", + "description": "此觸發器的可選顯示名稱或描述文字。" + }, + "content": { + "title": "內容", + "imagePlaceholder": "選擇圖片", + "textPlaceholder": "輸入文字內容", + "imageDesc": "選擇圖片,當偵測到相似圖片時觸發此動作。", + "textDesc": "輸入文字,當偵測到相似追蹤物件描述時觸發此動作。", + "error": { + "required": "必須提供內容。" + } + }, + "threshold": { + "title": "閾值", + "error": { + "min": "閾值至少為 0", + "max": "閾值最多為 1" + } + }, + "actions": { + "title": "操作", + "desc": "預設情況下,Frigate 會對所有觸發器發送 MQTT 訊息。可選擇額外操作,在觸發器觸發時執行。", + "error": { + "min": "至少需要選擇一個操作。" + } + } + } + }, + "toast": { + "success": { + "createTrigger": "觸發器 {{name}} 已成功建立。", + "updateTrigger": "觸發器 {{name}} 已成功更新。", + "deleteTrigger": "觸發器 {{name}} 已成功刪除。" + }, + "error": { + "createTriggerFailed": "建立觸發器失敗:{{errorMessage}}", + "updateTriggerFailed": "更新觸發器失敗:{{errorMessage}}", + "deleteTriggerFailed": "刪除觸發器失敗:{{errorMessage}}" + } + } + }, + "cameraWizard": { + "title": "新增鏡頭", + "description": "請依照以下步驟,將新鏡頭加入 Frigate。", + "steps": { + "nameAndConnection": "名稱與連線", + "streamConfiguration": "串流設定", + "validationAndTesting": "驗證與測試" + }, + "save": { + "success": "已成功儲存新鏡頭 {{cameraName}}。", + "failure": "儲存 {{cameraName}} 時發生錯誤。" + }, + "testResultLabels": { + "resolution": "解析度", + "video": "影像", + "audio": "音訊", + "fps": "每秒影格數" + }, + "commonErrors": { + "noUrl": "請輸入有效的串流網址", + "testFailed": "串流測試失敗:{{error}}" + }, + "step1": { + "description": "輸入鏡頭詳細資料並測試連線。", + "cameraName": "鏡頭名稱", + "cameraNamePlaceholder": "例如:front_door 或 back_yard_overview", + "host": "主機名稱/IP 位址", + "port": "連接埠", + "username": "用戶名稱", + "usernamePlaceholder": "可選", + "password": "密碼", + "passwordPlaceholder": "選擇傳輸協定", + "selectTransport": "選擇傳輸協定", + "cameraBrand": "鏡頭品牌", + "selectBrand": "選擇鏡頭品牌以套用 URL 模板", + "customUrl": "自訂串流網址", + "brandInformation": "品牌資訊", + "brandUrlFormat": "適用於 RTSP 網址格式如下的鏡頭:{{exampleUrl}}", + "customUrlPlaceholder": "rtsp://username:password@host:port/path", + "testConnection": "測試連線", + "testSuccess": "連線測試成功!", + "testFailed": "連線測試失敗,請檢查輸入內容後再試一次。", + "streamDetails": "串流詳情", + "warnings": { + "noSnapshot": "無法從設定的串流中擷取快照。" + }, + "errors": { + "brandOrCustomUrlRequired": "請選擇包含主機/IP 的鏡頭品牌,或選擇「其他」並輸入自訂網址", + "nameRequired": "必須輸入鏡頭名稱", + "nameLength": "鏡頭名稱長度不得超過 64 個字元", + "invalidCharacters": "鏡頭名稱包含無效字元", + "nameExists": "鏡頭名稱已存在", + "brands": { + "reolink-rtsp": "不建議使用 Reolink RTSP。建議在鏡頭設定中啟用 HTTP,並重新啟動鏡頭設定精靈。" + } + }, + "docs": { + "reolink": "https://docs.frigate.video/configuration/camera_specific.html#reolink-cameras" + } + }, + "step2": { + "description": "設定鏡頭的串流角色,並可新增額外串流。", + "streamsTitle": "鏡頭串流", + "addStream": "新增串流", + "addAnotherStream": "新增另一個串流", + "streamTitle": "串流 {{number}}", + "streamUrl": "串流網址", + "streamUrlPlaceholder": "rtsp://username:password@host:port/path", + "url": "網址", + "resolution": "解析度", + "selectResolution": "選擇解析度", + "quality": "畫質", + "selectQuality": "選擇畫質", + "roles": "角色", + "roleLabels": { + "detect": "物件偵測", + "record": "錄影", + "audio": "音訊" + }, + "testStream": "測試連線", + "testSuccess": "串流測試成功!", + "testFailed": "串流測試失敗", + "testFailedTitle": "測試失敗", + "connected": "已連線", + "notConnected": "未連線", + "featuresTitle": "功能", + "go2rtc": "減少與鏡頭的連線數", + "detectRoleWarning": "至少需有一個串流設定為「偵測」角色才能繼續。", + "rolesPopover": { + "title": "串流角色", + "detect": "用於物件偵測的主要影像來源。", + "record": "根據設定儲存影片片段。", + "audio": "用於音訊偵測的來源。" + }, + "featuresPopover": { + "title": "串流功能", + "description": "使用 go2rtc 轉串流以減少與鏡頭的直接連線。" + } + }, + "step3": { + "description": "在儲存新鏡頭前進行最後驗證與分析。請先連線所有串流後再儲存。", + "validationTitle": "串流驗證", + "connectAllStreams": "連線所有串流", + "reconnectionSuccess": "重新連線成功。", + "reconnectionPartial": "部分串流重新連線失敗。", + "streamUnavailable": "無法預覽串流", + "reload": "重新載入", + "connecting": "正在連線...", + "streamTitle": "串流 {{number}}", + "valid": "有效", + "failed": "失敗", + "notTested": "未測試", + "connectStream": "連線", + "connectingStream": "連線中", + "disconnectStream": "中斷連線", + "estimatedBandwidth": "預計頻寬", + "roles": "角色", + "none": "無", + "error": "錯誤", + "streamValidated": "串流 {{number}} 驗證成功", + "streamValidationFailed": "串流 {{number}} 驗證失敗", + "saveAndApply": "儲存新鏡頭", + "saveError": "設定無效,請檢查你的設定。", + "issues": { + "title": "串流驗證", + "videoCodecGood": "影片編碼格式為 {{codec}}。", + "audioCodecGood": "音訊編碼格式為 {{codec}}。", + "noAudioWarning": "此串流未偵測到音訊,錄影將不會有聲音。", + "audioCodecRecordError": "錄影要支援音訊,必須使用 AAC 編碼。", + "audioCodecRequired": "要支援音訊偵測,必須有音訊串流。", + "restreamingWarning": "若減少錄影串流與鏡頭的連線,CPU 使用率可能會略微增加。", + "dahua": { + "substreamWarning": "子串流 1 被鎖定為低解析度。許多 Dahua / Amcrest / EmpireTech 鏡頭支援額外子串流,需要在鏡頭設定中啟用。建議如有可用,檢查並使用這些子串流。" + }, + "hikvision": { + "substreamWarning": "子串流 1 被鎖定為低解析度。許多 Hikvision 鏡頭支援額外子串流,需要在鏡頭設定中啟用。建議如有可用,檢查並使用這些子串流。" + } + } + } + }, + "cameraManagement": { + "title": "管理鏡頭", + "addCamera": "新增鏡頭", + "editCamera": "編輯鏡頭:", + "selectCamera": "選擇鏡頭", + "backToSettings": "返回鏡頭設定", + "streams": { + "title": "啟用/停用鏡頭", + "desc": "暫時停用鏡頭,直到 Frigate 重新啟動。停用鏡頭會完全停止 Frigate 對該鏡頭串流的處理。偵測、錄影及除錯功能將無法使用。+ {t("form.firstTimeLogin")} +
+ + {t("readTheDocumentation", { ns: "common" })} +
setImageLoaded(true)}
+ />
+ + {t("wizard.step3.training.description")} +
++ {t("wizard.step3.generating.description")} +
++ {t("wizard.step3.selectImagesDescription")} +
++ {t("wizard.step3.noImages")} +
+ ++ {t("wizard.step3.classifying")} +
++ {t("wizard.step3.errors.generationFailed")} +
+ +