diff --git a/.cspell/frigate-dictionary.txt b/.cspell/frigate-dictionary.txt index 6e66a4704..f2bcf417a 100644 --- a/.cspell/frigate-dictionary.txt +++ b/.cspell/frigate-dictionary.txt @@ -22,6 +22,7 @@ autotrack autotracked autotracker autotracking +backchannel balena Beelink BGRA @@ -191,6 +192,7 @@ ONVIF openai opencv openvino +overfitting OWASP paddleocr paho @@ -315,4 +317,4 @@ yolo yolonas yolox zeep -zerolatency \ No newline at end of file +zerolatency 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/.github/DISCUSSION_TEMPLATE/beta-support.yml b/.github/DISCUSSION_TEMPLATE/beta-support.yml new file mode 100644 index 000000000..e342127a0 --- /dev/null +++ b/.github/DISCUSSION_TEMPLATE/beta-support.yml @@ -0,0 +1,129 @@ +title: "[Beta Support]: " +labels: ["support", "triage", "beta"] +body: + - type: markdown + attributes: + value: | + Thank you for testing Frigate beta versions! Use this form for support with beta releases. + + **Note:** Beta versions may have incomplete features, known issues, or unexpected behavior. Please check the [release notes](https://github.com/blakeblackshear/frigate/releases) and [recent discussions][discussions] for known beta issues before submitting. + + Before submitting, read the [beta documentation][docs]. + + [docs]: https://deploy-preview-19787--frigate-docs.netlify.app/ + - type: textarea + id: description + attributes: + label: Describe the problem you are having + description: Please be as detailed as possible. Include what you expected to happen vs what actually happened. + validations: + required: true + - type: input + id: version + attributes: + label: Beta Version + description: Visible on the System page in the Web UI. Please include the full version including the build identifier (eg. 0.17.0-beta1) + placeholder: "0.17.0-beta1" + validations: + required: true + - type: dropdown + id: issue-category + attributes: + label: Issue Category + description: What area is your issue related to? This helps us understand the context. + options: + - Object Detection / Detectors + - Hardware Acceleration + - Configuration / Setup + - WebUI / Frontend + - Recordings / Storage + - Notifications / Events + - Integration (Home Assistant, etc) + - Performance / Stability + - Installation / Updates + - Other + validations: + required: true + - type: textarea + id: config + attributes: + label: Frigate config file + description: This will be automatically formatted into code, so no need for backticks. Remove any sensitive information like passwords or URLs. + render: yaml + validations: + required: true + - type: textarea + id: frigatelogs + attributes: + label: Relevant Frigate log output + description: Please copy and paste any relevant Frigate log output. Include logs before and after your exact error when possible. This will be automatically formatted into code, so no need for backticks. + render: shell + validations: + required: true + - type: textarea + id: go2rtclogs + attributes: + label: Relevant go2rtc log output (if applicable) + description: If your issue involves cameras, streams, or playback, please include go2rtc logs. Logs can be viewed via the Frigate UI, Docker, or the go2rtc dashboard. This will be automatically formatted into code, so no need for backticks. + render: shell + - type: dropdown + id: install-method + attributes: + label: Install method + options: + - Home Assistant Add-on + - Docker Compose + - Docker CLI + - Proxmox via Docker + - Proxmox via TTeck Script + - Windows WSL2 + validations: + required: true + - type: textarea + id: docker + attributes: + label: docker-compose file or Docker CLI command + description: This will be automatically formatted into code, so no need for backticks. Include relevant environment variables and device mappings. + render: yaml + validations: + required: true + - type: dropdown + id: os + attributes: + label: Operating system + options: + - Home Assistant OS + - Debian + - Ubuntu + - Other Linux + - Proxmox + - UNRAID + - Windows + - Other + validations: + required: true + - type: input + id: hardware + attributes: + label: CPU / GPU / Hardware + description: Provide details about your hardware (e.g., Intel i5-9400, NVIDIA RTX 3060, Raspberry Pi 4, etc) + placeholder: "Intel i7-10700, NVIDIA GTX 1660" + - type: textarea + id: screenshots + attributes: + label: Screenshots + description: Screenshots of the issue, System metrics pages, or any relevant UI. Drag and drop or paste images directly. + - type: textarea + id: steps-to-reproduce + attributes: + label: Steps to reproduce + description: If applicable, provide detailed steps to reproduce the issue + placeholder: | + 1. Go to '...' + 2. Click on '...' + 3. See error + - type: textarea + id: other + attributes: + label: Any other information that may be helpful + description: Additional context, related issues, when the problem started appearing, etc. diff --git a/.github/DISCUSSION_TEMPLATE/report-a-bug.yml b/.github/DISCUSSION_TEMPLATE/report-a-bug.yml index a32ee5938..de870ac0f 100644 --- a/.github/DISCUSSION_TEMPLATE/report-a-bug.yml +++ b/.github/DISCUSSION_TEMPLATE/report-a-bug.yml @@ -6,6 +6,8 @@ body: value: | Use this form to submit a reproducible bug in Frigate or Frigate's UI. + **⚠️ If you are running a beta version (0.17.0-beta or similar), please use the [Beta Support template](https://github.com/blakeblackshear/frigate/discussions/new?category=beta-support) instead.** + Before submitting your bug report, please ask the AI with the "Ask AI" button on the [official documentation site][ai] about your issue, [search the discussions][discussions], look at recent open and closed [pull requests][prs], read the [official Frigate documentation][docs], and read the [Frigate FAQ][faq] pinned at the Discussion page to see if your bug has already been fixed by the developers or reported by the community. **If you are unsure if your issue is actually a bug or not, please submit a support request first.** diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 000000000..f053abe3f --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,385 @@ +# GitHub Copilot Instructions for Frigate NVR + +This document provides coding guidelines and best practices for contributing to Frigate NVR, a complete and local NVR designed for Home Assistant with AI object detection. + +## Project Overview + +Frigate NVR is a realtime object detection system for IP cameras that uses: + +- **Backend**: Python 3.13+ with FastAPI, OpenCV, TensorFlow/ONNX +- **Frontend**: React with TypeScript, Vite, TailwindCSS +- **Architecture**: Multiprocessing design with ZMQ and MQTT communication +- **Focus**: Minimal resource usage with maximum performance + +## Code Review Guidelines + +When reviewing code, do NOT comment on: + +- Missing imports - Static analysis tooling catches these +- Code formatting - Ruff (Python) and Prettier (TypeScript/React) handle formatting +- Minor style inconsistencies already enforced by linters + +## Python Backend Standards + +### Python Requirements + +- **Compatibility**: Python 3.13+ +- **Language Features**: Use modern Python features: + - Pattern matching + - Type hints (comprehensive typing preferred) + - f-strings (preferred over `%` or `.format()`) + - Dataclasses + - Async/await patterns + +### Code Quality Standards + +- **Formatting**: Ruff (configured in `pyproject.toml`) +- **Linting**: Ruff with rules defined in project config +- **Type Checking**: Use type hints consistently +- **Testing**: unittest framework - use `python3 -u -m unittest` to run tests +- **Language**: American English for all code, comments, and documentation + +### Logging Standards + +- **Logger Pattern**: Use module-level logger + + ```python + import logging + + logger = logging.getLogger(__name__) + ``` + +- **Format Guidelines**: + - No periods at end of log messages + - No sensitive data (keys, tokens, passwords) + - Use lazy logging: `logger.debug("Message with %s", variable)` +- **Log Levels**: + - `debug`: Development and troubleshooting information + - `info`: Important runtime events (startup, shutdown, state changes) + - `warning`: Recoverable issues that should be addressed + - `error`: Errors that affect functionality but don't crash the app + - `exception`: Use in except blocks to include traceback + +### Error Handling + +- **Exception Types**: Choose most specific exception available +- **Try/Catch Best Practices**: + - Only wrap code that can throw exceptions + - Keep try blocks minimal - process data after the try/except + - Avoid bare exceptions except in background tasks + + Bad pattern: + + ```python + try: + data = await device.get_data() # Can throw + # ❌ Don't process data inside try block + processed = data.get("value", 0) * 100 + result = processed + except DeviceError: + logger.error("Failed to get data") + ``` + + Good pattern: + + ```python + try: + data = await device.get_data() # Can throw + except DeviceError: + logger.error("Failed to get data") + return + + # ✅ Process data outside try block + processed = data.get("value", 0) * 100 + result = processed + ``` + +### Async Programming + +- **External I/O**: All external I/O operations must be async +- **Best Practices**: + - Avoid sleeping in loops - use `asyncio.sleep()` not `time.sleep()` + - Avoid awaiting in loops - use `asyncio.gather()` instead + - No blocking calls in async functions + - Use `asyncio.create_task()` for background operations +- **Thread Safety**: Use proper synchronization for shared state + +### Documentation Standards + +- **Module Docstrings**: Concise descriptions at top of files + ```python + """Utilities for motion detection and analysis.""" + ``` +- **Function Docstrings**: Required for public functions and methods + + ```python + async def process_frame(frame: ndarray, config: Config) -> Detection: + """Process a video frame for object detection. + + Args: + frame: The video frame as numpy array + config: Detection configuration + + Returns: + Detection results with bounding boxes + """ + ``` + +- **Comment Style**: + - Explain the "why" not just the "what" + - Keep lines under 88 characters when possible + - Use clear, descriptive comments + +### File Organization + +- **API Endpoints**: `frigate/api/` - FastAPI route handlers +- **Configuration**: `frigate/config/` - Configuration parsing and validation +- **Detectors**: `frigate/detectors/` - Object detection backends +- **Events**: `frigate/events/` - Event management and storage +- **Utilities**: `frigate/util/` - Shared utility functions + +## Frontend (React/TypeScript) Standards + +### Internationalization (i18n) + +- **CRITICAL**: Never write user-facing strings directly in components +- **Always use react-i18next**: Import and use the `t()` function + + ```tsx + import { useTranslation } from "react-i18next"; + + function MyComponent() { + const { t } = useTranslation(["views/live"]); + return
-
+
-
+
annotation_offset per ajustar-ho.",
+ "millisecondsToOffset": "Millisegons per l'òfset de detecció d'anotacions per. Per defecte: 0",
+ "tips": "Reduïu el valor si la reproducció del vídeo es troba per davant dels quadres i els punts de ruta, i augmenteu-lo si es troba per darrere. Aquest valor pot ser negatiu.",
+ "toast": {
+ "success": "El desplaçament de l'anotació per {{camera}} s'ha desat al fitxer de configuració."
+ }
+ }
+ },
+ "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..d2a5fcf34 100644
--- a/web/public/locales/ca/views/faceLibrary.json
+++ b/web/public/locales/ca/views/faceLibrary.json
@@ -12,13 +12,14 @@
"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",
+ "titleShort": "Recent"
},
"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 +55,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",
@@ -67,7 +68,7 @@
"toast": {
"success": {
"trainedFace": "Rostre entrenat amb èxit.",
- "updatedFaceScore": "Puntació de rostre actualitzada amb èxit.",
+ "updatedFaceScore": "S'ha actualitzat correctament la puntuació de la cara a {{name}} ({{score}}).",
"uploadedImage": "Imatge pujada amb èxit.",
"addFaceLibrary": "{{name}} s'ha afegit amb èxit a la biblioteca de rostres!",
"deletedName_one": "{{count}} rostre s'ha suprimit amb èxit.",
diff --git a/web/public/locales/ca/views/live.json b/web/public/locales/ca/views/live.json
index f4d20fc70..d9245fe7c 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,20 @@
"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",
+ "restricted": {
+ "title": "No hi ha càmeres disponibles",
+ "description": "No teniu permís per veure cap càmera en aquest grup."
+ }
}
}
diff --git a/web/public/locales/ca/views/search.json b/web/public/locales/ca/views/search.json
index 3f5940348..71f333180 100644
--- a/web/public/locales/ca/views/search.json
+++ b/web/public/locales/ca/views/search.json
@@ -15,7 +15,8 @@
"max_speed": "Velocitat màxima",
"recognized_license_plate": "Matrícula reconeguda",
"has_clip": "Té Clip",
- "has_snapshot": "Té instantània"
+ "has_snapshot": "Té instantània",
+ "attributes": "Atributs"
},
"searchType": {
"thumbnail": "Miniatura",
@@ -55,12 +56,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..88b75bca6 100644
--- a/web/public/locales/ca/views/settings.json
+++ b/web/public/locales/ca/views/settings.json
@@ -7,9 +7,11 @@
"authentication": "Configuració d'autenticació - Frigate",
"camera": "Paràmetres de càmera - Frigate",
"masksAndZones": "Editor de màscares i zones - Frigate",
- "general": "Paràmetres Generals - Frigate",
+ "general": "Configuració de la interfície d'usuari - Fragata",
"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": {
@@ -34,7 +39,7 @@
"noCamera": "Cap càmera"
},
"general": {
- "title": "Paràmetres generals",
+ "title": "Paràmetres de la interfície d'usuari",
"liveDashboard": {
"title": "Panell en directe",
"automaticLiveView": {
@@ -44,6 +49,14 @@
"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."
+ },
+ "liveFallbackTimeout": {
+ "label": "Temps d'espera per a la reserva del jugador en directe",
+ "desc": "Quan el flux en viu d'alta qualitat d'una càmera no està disponible, torneu al mode d'amplada de banda baixa després d'aquests molts segons. Per defecte: 3."
}
},
"storedLayouts": {
@@ -109,7 +122,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 +172,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 en aquesta càmera."
},
"label": "Zones",
"desc": {
@@ -185,7 +199,7 @@
},
"clickDrawPolygon": "Fes click per a dibuixar un polígon a la imatge.",
"toast": {
- "success": "La zona {{zoneName}} ha estat desada. Reinicia Frigate per a aplicar els canvis."
+ "success": "S'ha desat la zona ({{zoneName}})."
}
},
"filter": {
@@ -215,8 +229,8 @@
"clickDrawPolygon": "Fes click per a dibuixar un polígon a la imatge.",
"toast": {
"success": {
- "title": "{{polygonName}} s'ha desat. Reinicia Frigate per a aplicar els canvis.",
- "noName": "La màscara de moviment ha estat desada. Reinicia Frigate per aplicar els canvis."
+ "title": "{{polygonName}} s'ha desat.",
+ "noName": "La màscara de moviment ha estat desada."
}
}
},
@@ -240,8 +254,8 @@
"clickDrawPolygon": "Fes click per a dibuixar un polígon a la imatge.",
"toast": {
"success": {
- "title": "{{polygonName}} s'ha desat. Reinicia Frigate per a aplicar els canvis.",
- "noName": "La màscara d'objectes ha estat desada. Reincia Frigate per a aplicar els canvis."
+ "title": "{{polygonName}} s'ha desat.",
+ "noName": "La màscara d'objectes ha estat desada."
}
},
"context": "Les màscares de filtratge d’objectes s’utilitzen per descartar falsos positius d’un tipus d’objecte concret segons la seva ubicació."
@@ -470,7 +484,7 @@
"users": {
"table": {
"username": "Usuari",
- "password": "Contrasenya",
+ "password": "Restableix la contrasenya",
"deleteUser": "Suprimir usuari",
"noUsers": "No s'han trobat usuaris.",
"changeRole": "Canviar la funció d’usuari",
@@ -513,7 +527,16 @@
"notMatch": "Les contrasenyes no coincideixen",
"match": "Les contrasenyes coincideixen",
"placeholder": "Introdueix la contrasenya",
- "title": "Contrasenya"
+ "title": "Contrasenya",
+ "show": "Mostra contrasenya",
+ "hide": "Amaga contrasenya",
+ "requirements": {
+ "title": "Requisits contrasenya:",
+ "length": "Com a mínim 8 carácters",
+ "uppercase": "Com a mínim una majúscula",
+ "digit": "Com a mínim un digit",
+ "special": "Com a mínim un carácter especial (!@#$%^&*(),.?\":{}|<>)"
+ }
},
"newPassword": {
"title": "Nova contrasenya",
@@ -523,14 +546,23 @@
}
},
"usernameIsRequired": "El nom d'usuari és obligatori",
- "passwordIsRequired": "La contrasenya és obligatoria"
+ "passwordIsRequired": "La contrasenya és obligatoria",
+ "currentPassword": {
+ "title": "Constrasenya actual",
+ "placeholder": "Entra l'actual contrasenya"
+ }
},
"passwordSetting": {
"updatePassword": "Contrasenya actualitzada per {{username}}",
"setPassword": "Estableix Contrasenya",
"cannotBeEmpty": "La contrasenya no pot ser buida",
"doNotMatch": "Les contrasenyes no coincideixen",
- "desc": "Crea un nova contrasenya segura per protegir aquest compte."
+ "desc": "Crea un nova contrasenya segura per protegir aquest compte.",
+ "currentPasswordRequired": "L'actual contrasenya es requerida",
+ "incorrectCurrentPassword": "L'actual contrasenya es incorrecte",
+ "passwordVerificationFailed": "Falla en la verificació de la contrasenya",
+ "multiDeviceWarning": "Serà necesari loguejarte en qualsevol altre dispositiu en que estiguis loguejat en {{refresh_time}}.",
+ "multiDeviceAdmin": "També pots forçar a tots els usuaris a tornar a autenticar-se immediatament rotant el teu secret JWT."
},
"deleteUser": {
"title": "Suprimir usuari",
@@ -563,7 +595,7 @@
"title": "Gestió d'usuaris",
"desc": "Gestioneu els comptes d'usuari d'aquesta instància de Frigate."
},
- "updatePassword": "Actualitzar contrasenya"
+ "updatePassword": "Restableix la contrasenya"
},
"frigatePlus": {
"snapshotConfig": {
@@ -664,7 +696,7 @@
"title": "Classificació d'ocells",
"desc": "La classificació d’ocells identifica ocells coneguts mitjançant un model TensorFlow quantitzat. Quan es reconeix un ocell conegut, el seu nom comú s’afegeix com a subetiqueta. Aquesta informació es mostra a la interfície d’usuari, als filtres i també a les notificacions."
},
- "title": "Parmàmetres complementaris",
+ "title": "Configuració dels enriquiments",
"toast": {
"error": "No s'han pogut guardar els canvis de configuració: {{errorMessage}}",
"success": "Els paràmetres complementaris s'han desat. Reinicia Frigate per aplicar els canvis."
@@ -689,7 +721,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 +741,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 +773,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 +804,31 @@
},
"documentTitle": "Disparadors",
"management": {
- "title": "Gestió de disparadors",
- "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."
+ "title": "Activadors",
+ "desc": "Gestionar els disparadors de {{camera}}. Usa els 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 +880,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}} l'usuari assignat a aquest rol s'ha actualitzat a 'visor', que té accés a totes les càmeres.",
+ "userRolesUpdated_many": "{{count}} usuaris assignats a aquest rol s'han actualitzat a 'visor', que té accés a totes les càmeres.",
+ "userRolesUpdated_other": "{{count}} usuaris assignats a aquest rol s'han actualitzat a 'visor', que té accés a totes les càmeres."
},
"error": {
"createRoleFailed": "Error al crear el rol: {{errorMessage}}",
@@ -825,5 +891,358 @@
"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",
+ "probeOrSnapshot": "Prova o instantània"
+ },
+ "step1": {
+ "cameraBrand": "Marca de la càmera",
+ "description": "Introduïu els detalls de la càmera i trieu provar la càmera o seleccionar manualment la marca.",
+ "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..."
+ },
+ "connectionSettings": "Configuració de la connexió",
+ "detectionMethod": "Mètode de detecció de flux",
+ "onvifPort": "ONVIF Port",
+ "probeMode": "Càmera de prova",
+ "manualMode": "Selecció manual",
+ "detectionMethodDescription": "Proveu la càmera amb ONVIF (si és compatible) per trobar URL de flux de càmera, o seleccioneu manualment la marca de càmera per utilitzar URL predefinits. Per a introduir un URL RTSP personalitzat, trieu el mètode manual i seleccioneu \"Altres\".",
+ "onvifPortDescription": "Per a les càmeres que suporten ONVIF, això sol ser 80 o 8080.",
+ "useDigestAuth": "Utilitza l'autenticació digest",
+ "useDigestAuthDescription": "Usa l'autenticació de resum HTTP per a ONVIF. Algunes càmeres poden requerir un nom d'usuari/contrasenya ONVIF dedicat en lloc de l'usuari administrador estàndard."
+ },
+ "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": "Proveu la càmera per als fluxos disponibles o configureu la configuració manual basada en el mètode de detecció seleccionat.",
+ "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 connexió correcta!",
+ "testFailed": "Ha fallat la prova de connexió. Si us plau, comproveu la vostra entrada i torneu-ho a provar.",
+ "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",
+ "streamDetails": "Detalls del flux",
+ "probing": "Provant càmera...",
+ "retry": "Intentar de nou",
+ "testing": {
+ "probingMetadata": "S'estan provant les metadades de la càmera...",
+ "fetchingSnapshot": "S'està recuperant la instantània de la càmera..."
+ },
+ "probeFailed": "No s'ha pogut provar la càmera: {{error}}",
+ "probingDevice": "Provant dispositiu...",
+ "probeSuccessful": "Prova exitosa",
+ "probeError": "Error de prova",
+ "probeNoSuccess": "La prova no ha tingut èxit",
+ "deviceInfo": "Informació del dispositiu",
+ "manufacturer": "Fabricant",
+ "model": "Model",
+ "firmware": "Firmware",
+ "profiles": "Perfils",
+ "ptzSupport": "Suport PTZ",
+ "autotrackingSupport": "Implementació de seguiment automàtic",
+ "presets": "Predefinits",
+ "rtspCandidates": "Candidats RTSP",
+ "rtspCandidatesDescription": "S'han trobat els següents URL RTSP de la sonda de la càmera. Proveu la connexió per a veure les metadades del flux.",
+ "noRtspCandidates": "No s'ha trobat cap URL RTSP a la càmera. Les vostres credencials poden ser incorrectes, o la càmera pot no admetre ONVIF o el mètode utilitzat per recuperar els URL RTSP. Torneu enrere i introduïu l'URL RTSP manualment.",
+ "candidateStreamTitle": "Candidat {{number}}",
+ "useCandidate": "Utilitza",
+ "uriCopy": "Copia",
+ "uriCopied": "URI copiat al porta-retalls",
+ "testConnection": "Prova la connexió",
+ "toggleUriView": "Feu clic per a commutar la vista completa de l'URI",
+ "errors": {
+ "hostRequired": "Es requereix l'adreça de l'amfitrió/IP"
+ }
+ },
+ "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": "Configura els rols de flux i afegeix fluxos addicionals per a la càmera.",
+ "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.",
+ "streamsTitle": "Fluxos de la càmera",
+ "addStream": "Afegeix un flux",
+ "addAnotherStream": "Afegeix un altre flux",
+ "streamUrl": "URL del flux",
+ "streamUrlPlaceholder": "rtsp://usuari:contrasenya@host:port/ruta",
+ "selectStream": "Selecciona un flux",
+ "searchCandidates": "Cerca candidats...",
+ "noStreamFound": "No s'ha trobat cap 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": "Roles 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."
+ }
+ },
+ "step4": {
+ "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 connecta.",
+ "streamUnavailable": "La vista prèvia del flux no està disponible",
+ "reload": "Torna a carregar",
+ "connecting": "S'està connectant...",
+ "streamTitle": "Flux {{number}}",
+ "valid": "Vàlid",
+ "failed": "Ha fallat",
+ "notTested": "No provat",
+ "connectStream": "Connecta",
+ "connectingStream": "Connectant",
+ "disconnectStream": "Desconnecta",
+ "estimatedBandwidth": "Amplada de banda estimada",
+ "roles": "Roles",
+ "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.",
+ "none": "Cap",
+ "error": "Error",
+ "streamValidated": "El flux {{number}} s'ha validat correctament",
+ "streamValidationFailed": "Ha fallat la validació del flux {{number}}",
+ "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}}.",
+ "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.",
+ "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.",
+ "brands": {
+ "reolink-rtsp": "No és racomana utilitzar Reolink RSTP. Activeu HTTP a la configuració del microprogramari de la càmera i reinicieu l'assistent.",
+ "reolink-http": "Els fluxos HTTP de reenllaç haurien d'utilitzar FFmpeg per a una millor compatibilitat. Habilita «Utilitza el mode de compatibilitat del flux» per a aquest flux."
+ },
+ "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."
+ }
+ }
+ }
+ },
+ "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.{{label}}?"
+ }
+ }
}
}
}
diff --git a/web/public/locales/da/components/filter.json b/web/public/locales/da/components/filter.json
index 096374f16..3d16c1eb1 100644
--- a/web/public/locales/da/components/filter.json
+++ b/web/public/locales/da/components/filter.json
@@ -10,8 +10,41 @@
},
"labels": {
"all": {
- "short": "Labels"
+ "short": "Labels",
+ "title": "Alle etiketter"
},
- "count_one": "{{count}} Label"
+ "count_one": "{{count}} Label",
+ "label": "Etiketter"
+ },
+ "zones": {
+ "label": "Zoner",
+ "all": {
+ "title": "Alle zoner",
+ "short": "Zoner"
+ }
+ },
+ "more": "Flere filtre",
+ "sort": {
+ "label": "Sortér",
+ "dateAsc": "Dato (Stigende)",
+ "dateDesc": "Dato (Faldende)",
+ "speedAsc": "Anslået hastighed (Stigende)",
+ "speedDesc": "Anslået hastighed (Faldende)",
+ "relevance": "Relevans"
+ },
+ "dates": {
+ "selectPreset": "Vælg en forudindstilling…",
+ "all": {
+ "title": "Alle datoer",
+ "short": "Datoer"
+ }
+ },
+ "reset": {
+ "label": "Nulstille filtre til standardværdier"
+ },
+ "timeRange": "Tidsinterval",
+ "estimatedSpeed": "Anslået hastighed ({{unit}})",
+ "features": {
+ "hasVideoClip": "Har et videoklip"
}
}
diff --git a/web/public/locales/da/components/input.json b/web/public/locales/da/components/input.json
index 9d3f04a7f..0a8c89716 100644
--- a/web/public/locales/da/components/input.json
+++ b/web/public/locales/da/components/input.json
@@ -1,7 +1,10 @@
{
"button": {
"downloadVideo": {
- "label": "Download Video"
+ "label": "Download Video",
+ "toast": {
+ "success": "Din video til gennemgang er begyndt at blive downloadet."
+ }
}
}
}
diff --git a/web/public/locales/da/components/player.json b/web/public/locales/da/components/player.json
index 0a4adcc0e..099369052 100644
--- a/web/public/locales/da/components/player.json
+++ b/web/public/locales/da/components/player.json
@@ -1,5 +1,15 @@
{
- "noRecordingsFoundForThisTime": "Ingen optagelser fundet i det angivet tidsrum",
+ "noRecordingsFoundForThisTime": "Ingen optagelser fundet i det angivne tidsrum",
"noPreviewFound": "Ingen forhåndsvisning fundet",
- "cameraDisabled": "Kamera er deaktiveret"
+ "cameraDisabled": "Kamera er deaktiveret",
+ "noPreviewFoundFor": "Ingen forhåndsvisning fundet for {{cameraName}}",
+ "submitFrigatePlus": {
+ "title": "Indsend denne frame til Frigate+?",
+ "submit": "Indsend"
+ },
+ "livePlayerRequiredIOSVersion": "iOS 17.1 eller nyere kræves for denne type livestream.",
+ "streamOffline": {
+ "title": "Stream offline",
+ "desc": "Der er ikke modtaget nogen frames på {{cameraName}}-detect-streamen, tjek fejlloggene."
+ }
}
diff --git a/web/public/locales/da/views/classificationModel.json b/web/public/locales/da/views/classificationModel.json
new file mode 100644
index 000000000..a3aa81f28
--- /dev/null
+++ b/web/public/locales/da/views/classificationModel.json
@@ -0,0 +1,18 @@
+{
+ "documentTitle": "Klassifikationsmodeller",
+ "details": {
+ "scoreInfo": "Scoren repræsenterer den gennemsnitlige klassifikationssikkerhed på tværs af alle registreringer af dette objekt.",
+ "unknown": "Ukendt"
+ },
+ "description": {
+ "invalidName": "Ugyldigt navn. Navne må kun indeholde bogstaver, tal, mellemrum, apostroffer, understregninger og bindestreger."
+ },
+ "button": {
+ "deleteClassificationAttempts": "Slet klassifikationsbilleder",
+ "renameCategory": "Omdøb klasse",
+ "deleteCategory": "Slet klasse",
+ "deleteImages": "Slet billeder",
+ "trainModel": "Træn model",
+ "addClassification": "Tilføj klassifikation"
+ }
+}
diff --git a/web/public/locales/da/views/configEditor.json b/web/public/locales/da/views/configEditor.json
index 9d8a9a87f..ba1d6a715 100644
--- a/web/public/locales/da/views/configEditor.json
+++ b/web/public/locales/da/views/configEditor.json
@@ -2,5 +2,9 @@
"documentTitle": "Konfigurationsstyring - Frigate",
"copyConfig": "Kopiér konfiguration",
"saveAndRestart": "Gem & Genstart",
- "saveOnly": "Kun gem"
+ "saveOnly": "Kun gem",
+ "configEditor": "Konfigurationseditor",
+ "safeConfigEditor": "Konfigurationseditor (Sikker tilstand)",
+ "safeModeDescription": "Frigate er i sikker tilstand på grund af en fejl ved validering af konfigurationen.",
+ "confirm": "Afslut uden at gemme?"
}
diff --git a/web/public/locales/da/views/events.json b/web/public/locales/da/views/events.json
index 9f065c38e..f59b2f356 100644
--- a/web/public/locales/da/views/events.json
+++ b/web/public/locales/da/views/events.json
@@ -7,5 +7,10 @@
},
"allCameras": "Alle kameraer",
"timeline": "Tidslinje",
- "camera": "Kamera"
+ "camera": "Kamera",
+ "empty": {
+ "alert": "Der er ingen advarsler at gennemgå",
+ "detection": "Der er ingen registreringer at gennemgå",
+ "motion": "Ingen bevægelsesdata fundet"
+ }
}
diff --git a/web/public/locales/da/views/explore.json b/web/public/locales/da/views/explore.json
index ec8a805e8..afe962aea 100644
--- a/web/public/locales/da/views/explore.json
+++ b/web/public/locales/da/views/explore.json
@@ -13,7 +13,17 @@
"exploreIsUnavailable": {
"embeddingsReindexing": {
"startingUp": "Starter…",
- "estimatedTime": "Estimeret tid tilbage:"
- }
+ "estimatedTime": "Estimeret tid tilbage:",
+ "context": "Udforsk kan bruges, når genindekseringen af de sporede objektindlejringer er fuldført.",
+ "finishingShortly": "Afsluttes om lidt",
+ "step": {
+ "thumbnailsEmbedded": "Miniaturer indlejret: "
+ }
+ },
+ "title": "Udforsk er ikke tilgængelig"
+ },
+ "exploreMore": "Udforsk flere {{label}}-objekter",
+ "details": {
+ "timestamp": "Tidsstempel"
}
}
diff --git a/web/public/locales/da/views/exports.json b/web/public/locales/da/views/exports.json
index ea9879a11..8c5f119c4 100644
--- a/web/public/locales/da/views/exports.json
+++ b/web/public/locales/da/views/exports.json
@@ -4,6 +4,9 @@
"deleteExport.desc": "Er du sikker på at du vil slette {{exportName}}?",
"editExport": {
"title": "Omdøb Eksport",
- "saveExport": "Gem Eksport"
- }
+ "saveExport": "Gem Eksport",
+ "desc": "Indtast et nyt navn for denne eksport."
+ },
+ "noExports": "Ingen eksporter fundet",
+ "deleteExport": "Slet eksport"
}
diff --git a/web/public/locales/da/views/faceLibrary.json b/web/public/locales/da/views/faceLibrary.json
index e826586f6..f309e6fa0 100644
--- a/web/public/locales/da/views/faceLibrary.json
+++ b/web/public/locales/da/views/faceLibrary.json
@@ -1,10 +1,19 @@
{
"selectItem": "Vælg {{item}}",
"description": {
- "addFace": "Gennemgang af tilføjelse til ansigts bibliotek",
- "placeholder": "Angiv et navn for bibliotek"
+ "addFace": "Tilføj en ny samling til ansigtsbiblioteket ved at uploade dit første billede.",
+ "placeholder": "Angiv et navn for bibliotek",
+ "invalidName": "Ugyldigt navn. Navne må kun indeholde bogstaver, tal, mellemrum, apostroffer, understregninger og bindestreger."
},
"details": {
- "person": "Person"
+ "person": "Person",
+ "timestamp": "Tidsstempel",
+ "unknown": "Ukendt",
+ "scoreInfo": "Scoren er et vægtet gennemsnit af alle ansigtsscorer, vægtet efter ansigtets størrelse på hvert billede."
+ },
+ "documentTitle": "Ansigtsbibliotek - Frigate",
+ "uploadFaceImage": {
+ "title": "Upload ansigtsbillede",
+ "desc": "Upload et billede for at scanne efter ansigter og inkludere det for {{pageToggle}}"
}
}
diff --git a/web/public/locales/da/views/live.json b/web/public/locales/da/views/live.json
index 73cf941c1..254539b38 100644
--- a/web/public/locales/da/views/live.json
+++ b/web/public/locales/da/views/live.json
@@ -8,5 +8,14 @@
"cameraAudio": {
"enable": "Aktivér kameralyd",
"disable": "Deaktivér kamera lyd"
+ },
+ "lowBandwidthMode": "Lavbåndbredde-tilstand",
+ "ptz": {
+ "move": {
+ "clickMove": {
+ "label": "Klik i billedrammen for at centrere kameraet",
+ "enable": "Aktivér klik for at flytte"
+ }
+ }
}
}
diff --git a/web/public/locales/da/views/recording.json b/web/public/locales/da/views/recording.json
index a78f4c793..4028727ac 100644
--- a/web/public/locales/da/views/recording.json
+++ b/web/public/locales/da/views/recording.json
@@ -5,7 +5,8 @@
"filters": "Filtere",
"toast": {
"error": {
- "endTimeMustAfterStartTime": "Sluttidspunkt skal være efter starttidspunkt"
+ "endTimeMustAfterStartTime": "Sluttidspunkt skal være efter starttidspunkt",
+ "noValidTimeSelected": "Intet gyldigt tidsinterval valgt"
}
}
}
diff --git a/web/public/locales/da/views/search.json b/web/public/locales/da/views/search.json
index 5aea579ee..1cdc1460b 100644
--- a/web/public/locales/da/views/search.json
+++ b/web/public/locales/da/views/search.json
@@ -6,6 +6,7 @@
"save": "Gem søgning",
"delete": "Slet gemt søgning",
"filterInformation": "Filter information",
- "filterActive": "Filtre aktiv"
+ "filterActive": "Filtre aktiv",
+ "clear": "Ryd søgning"
}
}
diff --git a/web/public/locales/da/views/settings.json b/web/public/locales/da/views/settings.json
index 4563a1a76..61fce336f 100644
--- a/web/public/locales/da/views/settings.json
+++ b/web/public/locales/da/views/settings.json
@@ -3,6 +3,12 @@
"default": "Indstillinger - Frigate",
"authentication": "Bruger Indstillinger - Frigate",
"camera": "Kamera indstillinger - Frigate",
- "object": "Debug - Frigate"
+ "object": "Debug - Frigate",
+ "cameraManagement": "Administrér kameraer - Frigate",
+ "cameraReview": "Indstillinger for kameragennemgang - Frigate",
+ "enrichments": "Indstillinger for berigelser - Frigate",
+ "masksAndZones": "Maske- og zoneeditor - Frigate",
+ "motionTuner": "Bevægelsesjustering - Frigate",
+ "general": "Brugergrænsefladeindstillinger - Frigate"
}
}
diff --git a/web/public/locales/da/views/system.json b/web/public/locales/da/views/system.json
index 4fe2ea265..31d7ac946 100644
--- a/web/public/locales/da/views/system.json
+++ b/web/public/locales/da/views/system.json
@@ -6,7 +6,98 @@
"frigate": "Frigate Logs - Frigate",
"go2rtc": "Go2RTC Logs - Frigate",
"nginx": "Nginx Logs - Frigate"
+ },
+ "general": "Generelle statistikker - Frigate",
+ "enrichments": "Beredningsstatistikker - Frigate"
+ },
+ "title": "System",
+ "logs": {
+ "copy": {
+ "label": "Kopier til udklipsholder",
+ "success": "Logs er kopieret til udklipsholder",
+ "error": "Kunne ikke kopiere logs til udklipsholder"
+ },
+ "type": {
+ "label": "Type",
+ "timestamp": "Tidsstempel",
+ "message": "Besked",
+ "tag": "Tag"
+ },
+ "tips": "Logs bliver streamet fra serveren",
+ "toast": {
+ "error": {
+ "fetchingLogsFailed": "Fejl ved indhentning af logs: {{errorMessage}}",
+ "whileStreamingLogs": "Fejl ved streaming af logs: {{errorMessage}}"
+ }
+ },
+ "download": {
+ "label": "Download logs"
}
},
- "title": "System"
+ "general": {
+ "title": "Generelt",
+ "hardwareInfo": {
+ "gpuUsage": "GPU forbrug",
+ "gpuMemory": "GPU hukommelse",
+ "gpuEncoder": "GPU indkoder",
+ "gpuDecoder": "GPU afkoder",
+ "title": "Hardware information",
+ "gpuInfo": {
+ "closeInfo": {
+ "label": "Luk GPU information"
+ },
+ "copyInfo": {
+ "label": "Kopier GPU information"
+ },
+ "toast": {
+ "success": "Kopierede GPU information til udklipsholder"
+ }
+ },
+ "npuUsage": "NPU forbrug",
+ "npuMemory": "NPU hukommelse"
+ },
+ "detector": {
+ "title": "Detektorer",
+ "inferenceSpeed": "Detektorinferenshastighed",
+ "temperature": "Detektor temperatur",
+ "cpuUsage": "Detektor CPU forbrug",
+ "cpuUsageInformation": "CPU brugt til at forberede input- og outputdata til/fra detektionsmodeller. Denne værdi måler ikke inferensforbrug, selvom der bruges en GPU eller accelerator.",
+ "memoryUsage": "Detektorhummelsesforbrug"
+ },
+ "otherProcesses": {
+ "title": "Andre processer",
+ "processCpuUsage": "Proces CPU forbrug",
+ "processMemoryUsage": "Proceshukommelsesforbrug"
+ }
+ },
+ "metrics": "System metrikker",
+ "storage": {
+ "title": "Lagring",
+ "overview": "Overblik",
+ "recordings": {
+ "title": "Optagelser",
+ "tips": "Denne værdi repræsenterer den samlede lagerplads, der bruges af optagelserne i Frigates database. Frigate sporer ikke lagerpladsforbruget for alle filer på din disk.",
+ "earliestRecording": "Tidligste optagelse til rådighed:"
+ },
+ "shm": {
+ "title": "SHM (delt hukommelse) tildeling",
+ "warning": "Den nuværende SHM størrelse af {{total}}MB er for lille. Øg den til minimum {{min_shm}}MB."
+ },
+ "cameraStorage": {
+ "title": "Kamera lagring",
+ "camera": "Kamera",
+ "unusedStorageInformation": "Ubrugt lagringsinformation",
+ "storageUsed": "Lagring",
+ "percentageOfTotalUsed": "Procentandel af total",
+ "bandwidth": "Båndbredde",
+ "unused": {
+ "title": "Ubrugt",
+ "tips": "Denne værdi repræsenterer muligvis ikke nøjagtigt den ledige plads, der er tilgængelig for Frigate, hvis du har andre filer gemt på dit drev ud over Frigates optagelser. Frigate sporer ikke lagerforbrug ud over sine optagelser."
+ }
+ }
+ },
+ "cameras": {
+ "title": "Kameraer",
+ "overview": "Overblik"
+ }
}
diff --git a/web/public/locales/de/audio.json b/web/public/locales/de/audio.json
index 0e0e50935..4b1877501 100644
--- a/web/public/locales/de/audio.json
+++ b/web/public/locales/de/audio.json
@@ -296,7 +296,7 @@
"doorbell": "Türklingel",
"ding-dong": "BimBam",
"sliding_door": "Schiebetür",
- "slam": "Knall",
+ "slam": "zuknallen",
"knock": "Klopfen",
"tap": "Schlag",
"squeak": "Quietschen",
@@ -355,7 +355,7 @@
"shatter": "Zerspringen",
"silence": "Stille",
"environmental_noise": "Umgebungsgeräusch",
- "static": "Rauschen",
+ "static": "Statisch",
"pink_noise": "Rosa Rauschen",
"television": "Fernsehgerät",
"radio": "Radio",
@@ -425,5 +425,79 @@
"sanding": "Schleifen",
"machine_gun": "Maschinengewehr",
"boom": "Dröhnen",
- "field_recording": "Außenaufnahme"
+ "field_recording": "Außenaufnahme",
+ "liquid": "Flüssigkeit",
+ "splash": "Spritzer",
+ "slosh": "Schwenken",
+ "squish": "Quetschen",
+ "drip": "Tropfen",
+ "pour": "Gießen",
+ "trickle": "Tröpfeln",
+ "fill": "Füllen",
+ "spray": "Sprühen",
+ "pump": "Pumpen",
+ "stir": "Umrühren",
+ "boiling": "Köchelnd",
+ "arrow": "Pfeil",
+ "electronic_tuner": "Elektronischer Tuner",
+ "effects_unit": "Effekteinheit",
+ "chorus_effect": "Chorus-Effekt",
+ "sodeling": "Verfilzen",
+ "chird": "Akkord",
+ "change_ringing": "Wechsle RingRing",
+ "shofar": "Schofar",
+ "gush": "sprudeln",
+ "sonar": "Sonar",
+ "whoosh": "Rauschen",
+ "thump": "Ruck",
+ "basketball_bounce": "Basketball Abbraller",
+ "bang": "Knall",
+ "slap": "Ohrfeige",
+ "whack": "verhauen",
+ "smash": "zerschlagen",
+ "breaking": "zerbrechen",
+ "bouncing": "Abbraller",
+ "whip": "Peitsche",
+ "flap": "Lasche",
+ "scratch": "Kratzer",
+ "scrape": "Abfall",
+ "rub": "scheuern",
+ "roll": "rollen",
+ "crushing": "Stauchen",
+ "crumpling": "zerknüllen",
+ "tearing": "Reißen",
+ "beep": "Piep",
+ "ping": "Ping",
+ "ding": "klingeln",
+ "thunk": "dumpfes Geräusch",
+ "clang": "Geklirr",
+ "squeal": "Ausruf",
+ "creak": "Knarren",
+ "rustle": "Geknister",
+ "whir": "schwirren",
+ "clatter": "Geratter",
+ "sizzle": "brutzeln",
+ "clicking": "Klicken",
+ "clickety_clack": "Klappergeräuschen",
+ "rumble": "Grollen",
+ "plop": "plumpsen",
+ "hum": "Brummen",
+ "zing": "Schwung",
+ "boing": "ferderndes Geräusch",
+ "crunch": "knirschendes",
+ "sine_wave": "Sinus Kurve",
+ "harmonic": "harmonisch",
+ "chirp_tone": "Frequenzwobbelung",
+ "pulse": "Takt",
+ "inside": "drinnen",
+ "outside": "draußen",
+ "reverberation": "Widerhall",
+ "echo": "Echo",
+ "noise": "Lärm",
+ "mains_hum": "Netzbrummen",
+ "distortion": "Verzerrung",
+ "sidetone": "Nebengeräusch",
+ "cacophony": "Dissonanz",
+ "throbbing": "Pochen",
+ "vibration": "Vibration"
}
diff --git a/web/public/locales/de/common.json b/web/public/locales/de/common.json
index 2d20c7f0c..a9d13566e 100644
--- a/web/public/locales/de/common.json
+++ b/web/public/locales/de/common.json
@@ -12,7 +12,7 @@
"24hours": "24 Stunden",
"month_one": "{{time}} Monat",
"month_other": "{{time}} Monate",
- "d": "{{time}} Tag",
+ "d": "{{time}} Tg.",
"day_one": "{{time}} Tag",
"day_other": "{{time}} Tage",
"m": "{{time}} Min",
@@ -37,12 +37,12 @@
"30minutes": "30 Minuten",
"1hour": "1 Stunde",
"lastWeek": "Letzte Woche",
- "h": "{{time}} Stunde",
+ "h": "{{time}} Std.",
"ago": "vor {{timeAgo}}",
"untilRestart": "Bis zum Neustart",
"justNow": "Gerade",
"pm": "nachmittags",
- "mo": "{{time}}Monat",
+ "mo": "{{time}} Mon.",
"formattedTimestamp": {
"12hour": "d. MMM, hh:mm:ss aaa",
"24hour": "dd. MMM, hh:mm:ss aaa"
@@ -81,7 +81,10 @@
"formattedTimestampMonthDayYear": {
"12hour": "d. MMM yyyy",
"24hour": "d. MMM yyyy"
- }
+ },
+ "inProgress": "Im Gange",
+ "invalidStartTime": "Ungültige Startzeit",
+ "invalidEndTime": "Ungültige Endzeit"
},
"button": {
"save": "Speichern",
@@ -118,10 +121,17 @@
"pictureInPicture": "Bild in Bild",
"on": "AN",
"suspended": "Pausierte",
- "unsuspended": "fortsetzen"
+ "unsuspended": "fortsetzen",
+ "continue": "Weiter"
},
"label": {
- "back": "Zurück"
+ "back": "Zurück",
+ "hide": "Verstecke {{item}}",
+ "show": "Zeige {{item}}",
+ "ID": "ID",
+ "none": "Nichts",
+ "all": "Alle",
+ "other": "andere"
},
"menu": {
"configurationEditor": "Konfigurationseditor",
@@ -222,7 +232,8 @@
"logout": "Abmelden"
},
"uiPlayground": "Testgebiet für Benutzeroberfläche",
- "export": "Exportieren"
+ "export": "Exportieren",
+ "classification": "Klassifizierung"
},
"unit": {
"speed": {
@@ -232,6 +243,14 @@
"length": {
"feet": "Fuß",
"meters": "Meter"
+ },
+ "data": {
+ "kbps": "kB/s",
+ "mbps": "MB/s",
+ "gbps": "GB/s",
+ "kbph": "kB/Stunde",
+ "mbph": "MB/Stunde",
+ "gbph": "GB/Stunde"
}
},
"toast": {
@@ -273,5 +292,17 @@
"desc": "Du hast keine Berechtigung diese Seite anzuzeigen.",
"documentTitle": "Zugang verweigert - Frigate",
"title": "Zugang verweigert"
+ },
+ "information": {
+ "pixels": "{{area}}px"
+ },
+ "field": {
+ "optional": "Optional",
+ "internalID": "Die interne ID, die Frigate in der Konfiguration und Datenbank verwendet"
+ },
+ "list": {
+ "two": "{{0}} und {{1}}",
+ "many": "{{items}}, und {{last}}",
+ "separatorWithSpace": ", "
}
}
diff --git a/web/public/locales/de/components/auth.json b/web/public/locales/de/components/auth.json
index 8cbd1ff8c..2c4886641 100644
--- a/web/public/locales/de/components/auth.json
+++ b/web/public/locales/de/components/auth.json
@@ -10,6 +10,7 @@
"unknownError": "Unbekannter Fehler. Prüfe Logs."
},
"user": "Benutzername",
- "password": "Kennwort"
+ "password": "Kennwort",
+ "firstTimeLogin": "Ist dies der erste Loginversuch? Die Zugangsdaten werden in den Frigate Logs angezeigt."
}
}
diff --git a/web/public/locales/de/components/dialog.json b/web/public/locales/de/components/dialog.json
index 578f02773..464db5adf 100644
--- a/web/public/locales/de/components/dialog.json
+++ b/web/public/locales/de/components/dialog.json
@@ -66,7 +66,8 @@
"failed": "Fehler beim Starten des Exports: {{error}}",
"noVaildTimeSelected": "Kein gültiger Zeitraum ausgewählt"
},
- "success": "Export erfolgreich gestartet. Die Datei befindet sich im Ordner /exports."
+ "success": "Export erfolgreich gestartet. Die Datei befindet sich auf der Exportseite.",
+ "view": "Ansicht"
},
"fromTimeline": {
"saveExport": "Export speichern",
@@ -117,7 +118,8 @@
"button": {
"export": "Exportieren",
"markAsReviewed": "Als geprüft markieren",
- "deleteNow": "Jetzt löschen"
+ "deleteNow": "Jetzt löschen",
+ "markAsUnreviewed": "Als ungeprüft markieren"
}
},
"imagePicker": {
@@ -125,6 +127,7 @@
"search": {
"placeholder": "Nach Label oder Unterlabel suchen..."
},
- "noImages": "Kein Vorschaubild für diese Kamera gefunden"
+ "noImages": "Kein Vorschaubild für diese Kamera gefunden",
+ "unknownLabel": "Gespeichertes Triggerbild"
}
}
diff --git a/web/public/locales/de/components/filter.json b/web/public/locales/de/components/filter.json
index 193877603..d593080cd 100644
--- a/web/public/locales/de/components/filter.json
+++ b/web/public/locales/de/components/filter.json
@@ -132,5 +132,9 @@
},
"count_one": "{{count}} Klasse",
"count_other": "{{count}} Klassen"
+ },
+ "attributes": {
+ "label": "Klassifizierungsattribute",
+ "all": "Alle Attribute"
}
}
diff --git a/web/public/locales/de/components/player.json b/web/public/locales/de/components/player.json
index a6b251f01..56a195053 100644
--- a/web/public/locales/de/components/player.json
+++ b/web/public/locales/de/components/player.json
@@ -24,7 +24,7 @@
"title": "Latenz:",
"value": "{{seconds}} Sekunden",
"short": {
- "title": "Lazenz",
+ "title": "Latenz",
"value": "{{seconds}} s"
}
},
diff --git a/web/public/locales/de/objects.json b/web/public/locales/de/objects.json
index 57fb35617..f3fdbd370 100644
--- a/web/public/locales/de/objects.json
+++ b/web/public/locales/de/objects.json
@@ -27,7 +27,7 @@
"donut": "Donut",
"cake": "Kuchen",
"chair": "Stuhl",
- "couch": "Couch",
+ "couch": "Sofa",
"bed": "Bett",
"dining_table": "Esstisch",
"toilet": "Toilette",
diff --git a/web/public/locales/de/views/classificationModel.json b/web/public/locales/de/views/classificationModel.json
new file mode 100644
index 000000000..2de77e73e
--- /dev/null
+++ b/web/public/locales/de/views/classificationModel.json
@@ -0,0 +1,188 @@
+{
+ "documentTitle": "Klassifikationsmodelle - Frigate",
+ "details": {
+ "scoreInfo": "Die Punktzahl gibt die durchschnittliche Konfidenz aller Erkennungen dieses Objekts wieder.",
+ "none": "Keiner",
+ "unknown": "Unbekannt"
+ },
+ "button": {
+ "deleteClassificationAttempts": "Lösche klassifizierte Bilder",
+ "renameCategory": "Klasse umbenennen",
+ "deleteCategory": "Klasse löschen",
+ "deleteImages": "Bilder löschen",
+ "trainModel": "Modell trainieren",
+ "addClassification": "Klassifikationsmodell hinzufügen",
+ "deleteModels": "Modell löschen",
+ "editModel": "Modell bearbeiten"
+ },
+ "tooltip": {
+ "trainingInProgress": "Modell wird gerade trainiert",
+ "noNewImages": "Keine weiteren Bilder zum trainieren. Bitte klassifiziere weitere Bilder im Datensatz.",
+ "noChanges": "Keine Veränderungen des Datensatzes seit dem letzten Training.",
+ "modelNotReady": "Modell ist nicht bereit für das Training"
+ },
+ "toast": {
+ "success": {
+ "deletedCategory": "Klasse gelöscht",
+ "deletedImage": "Bilder gelöscht",
+ "deletedModel_one": "{{count}} Modell erfolgreich gelöscht",
+ "deletedModel_other": "{{count}} Modelle erfolgreich gelöscht",
+ "categorizedImage": "Erfolgreich klassifizierte Bilder",
+ "trainedModel": "Modell erfolgreich trainiert.",
+ "trainingModel": "Modelltraining erfolgreich gestartet.",
+ "updatedModel": "Modellkonfiguration erfolgreich aktualisiert",
+ "renamedCategory": "Klasse erfolgreich in {{name}} umbenannt"
+ },
+ "error": {
+ "deleteImageFailed": "Löschen fehlgeschlagen: {{errorMessage}}",
+ "deleteCategoryFailed": "Löschen der Klasse fehlgeschlagen: {{errorMessage}}",
+ "deleteModelFailed": "Model konnte nicht gelöscht werden: {{errorMessage}}",
+ "trainingFailedToStart": "Modelltraining konnte nicht gestartet werden: {{errorMessage}}",
+ "updateModelFailed": "Aktualisierung des Modells fehlgeschlagen: {{errorMessage}}",
+ "renameCategoryFailed": "Umbenennung der Klasse fehlgeschlagen: {{errorMessage}}",
+ "categorizeFailed": "Bildkategorisierung fehlgeschlagen: {{errorMessage}}",
+ "trainingFailed": "Modelltraining fehlgeschlagen. Details sind in den Frigate-Protokollen zu finden."
+ }
+ },
+ "deleteCategory": {
+ "title": "Klasse löschen",
+ "desc": "Möchten Sie die Klasse {{name}} wirklich löschen? Dadurch werden alle zugehörigen Bilder dauerhaft gelöscht und das Modell muss neu trainiert werden.",
+ "minClassesTitle": "Klasse kann nicht gelöscht werden",
+ "minClassesDesc": "Ein Klassifizierungsmodell benötigt mindestens zwei Klassen. Fügen Sie eine weitere Klasse hinzu, bevor Sie diese löschen."
+ },
+ "deleteModel": {
+ "title": "Klassifizierungsmodell löschen",
+ "single": "Möchten Sie {{name}} wirklich löschen? Dadurch werden alle zugehörigen Daten, einschließlich Bilder und Trainingsdaten, dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.",
+ "desc_one": "Möchtest du {{count}} Modell wirklich löschen? Dadurch werden alle zugehörigen Daten, einschließlich Bilder und Trainingsdaten, dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.",
+ "desc_other": "Möchtest du {{count}} Modelle wirklich löschen? Dadurch werden alle zugehörigen Daten, einschließlich Bilder und Trainingsdaten, dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden."
+ },
+ "edit": {
+ "title": "Klassifikationsmodell bearbeiten",
+ "descriptionState": "Bearbeite die Klassen für dieses Zustandsklassifikationsmodell. Änderungen erfordern ein erneutes Trainieren des Modells.",
+ "descriptionObject": "Bearbeite den Objekttyp und Klassifizierungstyp für dieses Objektklassifikationsmodell.",
+ "stateClassesInfo": "Hinweis: Die Änderung der Statusklassen erfordert ein erneutes Trainieren des Modells mit den aktualisierten Klassen."
+ },
+ "deleteDatasetImages": {
+ "title": "Datensatz Bilder löschen",
+ "desc_one": "Bist du sicher, dass {{count}} Bild von {{dataset}} gelöscht werden sollen? Diese Aktion kann nicht rückgängig gemacht werden und erfordert ein erneutes Trainieren des Modells.",
+ "desc_other": "Bist du sicher, dass {{count}} Bilder von {{dataset}} gelöscht werden sollen? Diese Aktion kann nicht rückgängig gemacht werden und erfordert ein erneutes Trainieren des Modells."
+ },
+ "deleteTrainImages": {
+ "title": "Trainingsbilder löschen",
+ "desc_one": "Bist du sicher, dass du {{count}} Bild löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.",
+ "desc_other": "Bist du sicher, dass du {{count}} Bilder löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden."
+ },
+ "renameCategory": {
+ "title": "Klasse umbenennen",
+ "desc": "Neuen Namen für {{name}} eingeben. Das Modell muss neu trainiert werden, damit die Änderungen wirksam werden."
+ },
+ "description": {
+ "invalidName": "Ungültiger Name. Namen dürfen nur Buchstaben, Zahlen, Leerzeichen, Apostrophe, Unterstriche und Bindestriche enthalten."
+ },
+ "train": {
+ "title": "Neue Klassifizierungen",
+ "titleShort": "frisch",
+ "aria": "Neue Klassifizierungen auswählen"
+ },
+ "categories": "Klassen",
+ "createCategory": {
+ "new": "Neue Klasse erstellen"
+ },
+ "categorizeImageAs": "Bild klassifizieren als:",
+ "categorizeImage": "Bild klassifizieren",
+ "menu": {
+ "objects": "Objekte",
+ "states": "Zustände"
+ },
+ "noModels": {
+ "object": {
+ "title": "Keine Objektklassifikationsmodelle",
+ "description": "Erstelle ein benutzerdefiniertes Objektklassifikationsmodell, um erkannte Objekte zu klassifizieren.",
+ "buttonText": "Objektklassifikationsmodell erstellen"
+ },
+ "state": {
+ "title": "Keine Zustandsklassifikationsmodelle",
+ "description": "Erstellen Sie ein benutzerdefiniertes Zustandsklassifikationsmodell, um Zustandsänderungen in bestimmten Kamerabereichen zu überwachen und zu klassifizieren.",
+ "buttonText": "Zustandsklassifikationsmodell erstellen"
+ }
+ },
+ "wizard": {
+ "title": "Neues Klassifikationsmodell erstellen",
+ "steps": {
+ "nameAndDefine": "Benennen und definieren",
+ "stateArea": "Überwachungsbereich",
+ "chooseExamples": "Beispiel auswählen"
+ },
+ "step1": {
+ "description": "Zustandsmodelle überwachen fest definierte Kamerabereiche auf Veränderungen (z. B. Tür offen/geschlossen). Objektmodelle klassifizieren erkannte Objekte genauer (z. B. in bekannte Tiere, Lieferanten usw.).",
+ "name": "Name",
+ "namePlaceholder": "Modellname eingeben ...",
+ "type": "Typ",
+ "typeState": "Zustand",
+ "typeObject": "Objekt",
+ "objectLabel": "Objektbezeichnung",
+ "objectLabelPlaceholder": "Auswahl Objekt Typ...",
+ "classificationType": "Klassifizierungstyp",
+ "classificationTypeTip": "Etwas über Klassifizierungstyp lernen",
+ "classificationTypeDesc": "Unterbezeichnungen fügen dem Objektnamen zusätzlichen Text hinzu (z. B. „Person: UPS“). Attribute sind durchsuchbare Metadaten, die separat in den Objektmetadaten gespeichert sind.",
+ "classificationSubLabel": "Unterlabel",
+ "classificationAttribute": "Attribut",
+ "classes": "Klassen",
+ "states": "Zustände",
+ "classesTip": "Mehr über Klassen erfahren",
+ "classesStateDesc": "Definieren Sie die verschiedenen Zustände, in denen sich Ihr Kamerabereich befinden kann. Beispiel: „offen” und „geschlossen” für ein Garagentor.",
+ "classesObjectDesc": "Definieren Sie die verschiedenen Kategorien, in die erkannte Objekte klassifiziert werden sollen. Beispiel: „Lieferant“, „Bewohner“, „Fremder“ für die Klassifizierung von Personen.",
+ "classPlaceholder": "Klassenbezeichnung eingeben...",
+ "errors": {
+ "nameRequired": "Der Modellname ist erforderlich",
+ "nameLength": "Der Modellname darf maximal 64 Zeichen lang sein",
+ "nameOnlyNumbers": "Der Modellname darf nicht nur aus Zahlen bestehen",
+ "classRequired": "Mindestens eine Klasse ist erforderlich",
+ "classesUnique": "Der Klassenname muss eindeutig sein",
+ "stateRequiresTwoClasses": "Zustandsmodelle erfordern mindestens zwei Klassen",
+ "objectLabelRequired": "Bitte wähle eine Objektbeschriftung",
+ "objectTypeRequired": "Bitte wählen Sie einen Klassifizierungstyp aus",
+ "noneNotAllowed": "Die Klasse „none“ ist nicht zulässig"
+ }
+ },
+ "step2": {
+ "description": "Wählen Sie Kameras aus und legen Sie für jede Kamera den zu überwachenden Bereich fest. Das Modell klassifiziert den Zustand dieser Bereiche.",
+ "cameras": "Kameras",
+ "selectCamera": "Kamera auswählen",
+ "noCameras": "Klicke + zum Hinzufügen von Kameras",
+ "selectCameraPrompt": "Wählen Sie eine Kamera aus der Liste aus, um ihren Überwachungsbereich festzulegen"
+ },
+ "step3": {
+ "selectImagesPrompt": "Wählen Sie alle Bilder mit: {{className}}",
+ "selectImagesDescription": "Klicken Sie auf die Bilder, um sie auszuwählen. Klicken Sie auf „Weiter“, wenn Sie mit dieser Klasse fertig sind.",
+ "allImagesRequired_one": "Bitte klassifizieren Sie alle Bilder. {{count}} Bild verbleibend.",
+ "allImagesRequired_other": "Bitte klassifizieren Sie alle Bilder. {{count}} Bilder verbleiben.",
+ "generating": {
+ "title": "Beispielbilder generieren",
+ "description": "Frigate extrahiert repräsentative Bilder aus Ihren Aufnahmen. Dies kann einen Moment dauern..."
+ },
+ "training": {
+ "title": "Trainiere Modell",
+ "description": "Ihr Modell wird im Hintergrund trainiert. Schließen Sie diesen Dialog, und Ihr Modell wird ausgeführt, sobald das Training abgeschlossen ist."
+ },
+ "retryGenerate": "Generierung wiederholen",
+ "noImages": "Keine Bilder generiert",
+ "classifying": "Klassifizieren und Trainieren...",
+ "trainingStarted": "Training wurde erfolgreich gestartet",
+ "errors": {
+ "noCameras": "Keine Kameras konfiguriert",
+ "noObjectLabel": "Kein Objektlabel ausgewählt",
+ "generateFailed": "Beispiele konnten nicht generiert werden: {{error}}",
+ "generationFailed": "Generierung fehlgeschlagen. Bitte versuchen Sie es erneut.",
+ "classifyFailed": "Bilder konnten nicht klassifiziert werden: {{error}}"
+ },
+ "generateSuccess": "Erfolgreich generierte Beispielbilder",
+ "modelCreated": "Modell erfolgreich erstellt. Verwenden Sie die Ansicht „Aktuelle Klassifizierungen“, um Bilder für fehlende Zustände hinzuzufügen und trainieren Sie dann das Modell erneut.",
+ "missingStatesWarning": {
+ "title": "Beispiele für fehlende Zustände",
+ "description": "Es wird empfohlen für alle Zustände Beispiele auszuwählen. Das Modell wird erst trainiert, wenn für alle Zustände Bilder vorhanden sind. Fahren Sie fort und verwenden Sie die Ansicht „Aktuelle Klassifizierungen“, um Bilder für die fehlenden Zustände zu klassifizieren. Trainieren Sie anschließend das Modell."
+ }
+ }
+ },
+ "none": "Keiner"
+}
diff --git a/web/public/locales/de/views/events.json b/web/public/locales/de/views/events.json
index e9bdcf4ff..963482073 100644
--- a/web/public/locales/de/views/events.json
+++ b/web/public/locales/de/views/events.json
@@ -8,7 +8,11 @@
"empty": {
"alert": "Es gibt keine zu prüfenden Alarme",
"detection": "Es gibt keine zu prüfenden Erkennungen",
- "motion": "Keine Bewegungsdaten gefunden"
+ "motion": "Keine Bewegungsdaten gefunden",
+ "recordingsDisabled": {
+ "title": "Aufzeichnungen müssen aktiviert sein",
+ "description": "Überprüfungselemente können nur für eine Kamera erstellt werden, wenn Aufzeichnungen für diese Kamera aktiviert sind."
+ }
},
"timeline": "Zeitleiste",
"timeline.aria": "Zeitleiste auswählen",
@@ -36,5 +40,28 @@
"selected_other": "{{count}} ausgewählt",
"detected": "erkannt",
"suspiciousActivity": "Verdächtige Aktivität",
- "threateningActivity": "Bedrohliche Aktivität"
+ "threateningActivity": "Bedrohliche Aktivität",
+ "zoomIn": "Hereinzoomen",
+ "zoomOut": "Herauszoomen",
+ "detail": {
+ "label": "Detail",
+ "aria": "Detailansicht umschalten",
+ "trackedObject_one": "{{count}} Objekt",
+ "trackedObject_other": "{{count}} Objekte",
+ "noObjectDetailData": "Keine detaillierten Daten des Objekt verfügbar.",
+ "noDataFound": "Keine Detaildaten zur Überprüfung",
+ "settings": "Detailansicht Einstellungen",
+ "alwaysExpandActive": {
+ "desc": "Immer die Objektdetails vom aktivem Überprüfungselement erweitern, sofern verfügbar.",
+ "title": "Immer aktiv erweitern"
+ }
+ },
+ "objectTrack": {
+ "trackedPoint": "Verfolgter Punkt",
+ "clickToSeek": "Klicke, um zu dieser Zeit zu springen"
+ },
+ "normalActivity": "normal",
+ "needsReview": "benötigt Überprüfung",
+ "securityConcern": "Sicherheitsbedenken",
+ "select_all": "alle"
}
diff --git a/web/public/locales/de/views/explore.json b/web/public/locales/de/views/explore.json
index 96d64e167..273c568a2 100644
--- a/web/public/locales/de/views/explore.json
+++ b/web/public/locales/de/views/explore.json
@@ -18,13 +18,15 @@
"updatedSublabel": "Unterkategorie erfolgreich aktualisiert.",
"updatedLPR": "Nummernschild erfolgreich aktualisiert.",
"regenerate": "Eine neue Beschreibung wurde von {{provider}} angefordert. Je nach Geschwindigkeit des Anbieters kann es einige Zeit dauern, bis die neue Beschreibung generiert ist.",
- "audioTranscription": "Audio Transkription erfolgreich angefordert."
+ "audioTranscription": "Die Audio-Transkription wurde erfolgreich angefordert. Je nach Geschwindigkeit Ihres Frigate-Servers kann die Transkription einige Zeit in Anspruch nehmen.",
+ "updatedAttributes": "Attribute erfolgreich aktualisiert."
},
"error": {
"regenerate": "Der Aufruf von {{provider}} für eine neue Beschreibung ist fehlgeschlagen: {{errorMessage}}",
"updatedSublabelFailed": "Untekategorie konnte nicht aktualisiert werden: {{errorMessage}}",
"updatedLPRFailed": "Aktualisierung des Kennzeichens fehlgeschlagen: {{errorMessage}}",
- "audioTranscription": "Die Anforderung der Audio Transkription ist fehlgeschlagen: {{errorMessage}}"
+ "audioTranscription": "Die Anforderung der Audio Transkription ist fehlgeschlagen: {{errorMessage}}",
+ "updatedAttributesFailed": "Attribute konnten nicht aktualisiert werden: {{errorMessage}}"
}
}
},
@@ -72,6 +74,14 @@
},
"score": {
"label": "Ergebnis"
+ },
+ "editAttributes": {
+ "title": "Attribute bearbeiten",
+ "desc": "Wählen Sie Klassifizierungsattribute für dieses {{label}} aus"
+ },
+ "attributes": "Klassifizierungsattribute",
+ "title": {
+ "label": "Titel"
}
},
"documentTitle": "Erkunde - Frigate",
@@ -158,7 +168,9 @@
"details": "Details",
"video": "Video",
"object_lifecycle": "Objekt-Lebenszyklus",
- "snapshot": "Snapshot"
+ "snapshot": "Snapshot",
+ "thumbnail": "Vorschaubild",
+ "tracking_details": "Nachverfolgungs-Details"
},
"itemMenu": {
"downloadSnapshot": {
@@ -195,12 +207,26 @@
"addTrigger": {
"aria": "Einen Trigger für dieses verfolgte Objekt hinzufügen",
"label": "Trigger hinzufügen"
+ },
+ "viewTrackingDetails": {
+ "label": "Details zum Verfolgen anzeigen",
+ "aria": "Details zum Verfolgen anzeigen"
+ },
+ "showObjectDetails": {
+ "label": "Objektpfad anzeigen"
+ },
+ "hideObjectDetails": {
+ "label": "Objektpfad verbergen"
+ },
+ "downloadCleanSnapshot": {
+ "label": "Bereinigte Momentaufnahme herunterladen",
+ "aria": "Bereinigte Momentaufnahme herunterladen"
}
},
"dialog": {
"confirmDelete": {
"title": "Löschen bestätigen",
- "desc": "Beim Löschen dieses verfolgten Objekts werden der Schnappschuss, alle gespeicherten Einbettungen und alle zugehörigen Objektlebenszykluseinträge entfernt. Aufgezeichnetes Filmmaterial dieses verfolgten Objekts in der Verlaufsansicht wird NICHT gelöscht. 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."
+ "success": "Annotation offset for {{camera}} has been saved to the config file."
}
}
},
@@ -102,12 +104,14 @@
"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."
+ "updatedAttributes": "Successfully updated attributes.",
+ "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}}",
"updatedSublabelFailed": "Failed to update sub label: {{errorMessage}}",
"updatedLPRFailed": "Failed to update license plate: {{errorMessage}}",
+ "updatedAttributesFailed": "Failed to update attributes: {{errorMessage}}",
"audioTranscription": "Failed to request audio transcription: {{errorMessage}}"
}
}
@@ -123,6 +127,10 @@
"desc": "Enter a new license plate value for this {{label}}",
"descNoLabel": "Enter a new license plate value for this tracked object"
},
+ "editAttributes": {
+ "title": "Edit attributes",
+ "desc": "Select classification attributes for this {{label}}"
+ },
"snapshotScore": {
"label": "Snapshot Score"
},
@@ -134,6 +142,7 @@
"label": "Score"
},
"recognizedLicensePlate": "Recognized License Plate",
+ "attributes": "Classification Attributes",
"estimatedSpeed": "Estimated Speed",
"objects": "Objects",
"camera": "Camera",
@@ -157,6 +166,9 @@
"tips": {
"descriptionSaved": "Successfully saved description",
"saveDescriptionFailed": "Failed to update the description: {{errorMessage}}"
+ },
+ "title": {
+ "label": "Title"
}
},
"itemMenu": {
@@ -168,9 +180,13 @@
"label": "Download snapshot",
"aria": "Download snapshot"
},
- "viewObjectLifecycle": {
- "label": "View object lifecycle",
- "aria": "Show the object lifecycle"
+ "downloadCleanSnapshot": {
+ "label": "Download clean snapshot",
+ "aria": "Download clean snapshot"
+ },
+ "viewTrackingDetails": {
+ "label": "View tracking details",
+ "aria": "Show the tracking details"
},
"findSimilar": {
"label": "Find similar",
@@ -194,12 +210,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.mode: {{effectiveRetainMode}}, so this on-demand recording will only keep segments with {{effectiveRetainModeName}}."
+ }
},
"editLayout": {
"label": "Edit Layout",
@@ -170,8 +175,22 @@
"exitEdit": "Exit Editing"
},
"noCameras": {
- "title": "No Cameras Set Up",
- "description": "Get started by connecting a camera.",
- "buttonText": "Add Camera"
+ "title": "No Cameras Configured",
+ "description": "Get started by connecting a camera to Frigate.",
+ "buttonText": "Add Camera",
+ "restricted": {
+ "title": "No Cameras Available",
+ "description": "You don't have permission to view any cameras in this group."
+ },
+ "default": {
+ "title": "No Cameras Configured",
+ "description": "Get started by connecting a camera to Frigate.",
+ "buttonText": "Add Camera"
+ },
+ "group": {
+ "title": "No Cameras in Group",
+ "description": "This camera group has no assigned or enabled cameras.",
+ "buttonText": "Manage Groups"
+ }
}
}
diff --git a/web/public/locales/en/views/search.json b/web/public/locales/en/views/search.json
index 22da7721f..dae622c70 100644
--- a/web/public/locales/en/views/search.json
+++ b/web/public/locales/en/views/search.json
@@ -16,6 +16,7 @@
"labels": "Labels",
"zones": "Zones",
"sub_labels": "Sub Labels",
+ "attributes": "Attributes",
"search_type": "Search Type",
"time_range": "Time Range",
"before": "Before",
diff --git a/web/public/locales/en/views/settings.json b/web/public/locales/en/views/settings.json
index 912d4f693..9f211a442 100644
--- a/web/public/locales/en/views/settings.json
+++ b/web/public/locales/en/views/settings.json
@@ -2,19 +2,21 @@
"documentTitle": {
"default": "Settings - Frigate",
"authentication": "Authentication Settings - Frigate",
- "camera": "Camera Settings - Frigate",
+ "cameraManagement": "Manage Cameras - Frigate",
+ "cameraReview": "Camera Review Settings - Frigate",
"enrichments": "Enrichments Settings - Frigate",
"masksAndZones": "Mask and Zone Editor - Frigate",
"motionTuner": "Motion Tuner - Frigate",
"object": "Debug - Frigate",
- "general": "General Settings - Frigate",
+ "general": "UI Settings - Frigate",
"frigatePlus": "Frigate+ Settings - Frigate",
"notifications": "Notification Settings - Frigate"
},
"menu": {
"ui": "UI",
"enrichments": "Enrichments",
- "cameras": "Camera Settings",
+ "cameraManagement": "Management",
+ "cameraReview": "Review",
"masksAndZones": "Masks / Zones",
"motionTuner": "Motion Tuner",
"triggers": "Triggers",
@@ -35,7 +37,7 @@
"noCamera": "No Camera"
},
"general": {
- "title": "General Settings",
+ "title": "UI Settings",
"liveDashboard": {
"title": "Live Dashboard",
"automaticLiveView": {
@@ -45,6 +47,14 @@
"playAlertVideos": {
"label": "Play Alert Videos",
"desc": "By default, recent alerts on the Live dashboard play as small looping videos. Disable this option to only show a static image of recent alerts on this device/browser."
+ },
+ "displayCameraNames": {
+ "label": "Always Show Camera Names",
+ "desc": "Always show the camera names in a chip in the multi-camera live view dashboard."
+ },
+ "liveFallbackTimeout": {
+ "label": "Live Player Fallback Timeout",
+ "desc": "When a camera's high quality live stream is unavailable, fall back to low bandwidth mode after this many seconds. Default: 3."
}
},
"storedLayouts": {
@@ -143,19 +153,244 @@
"error": "Failed to save config changes: {{errorMessage}}"
}
},
- "camera": {
- "title": "Camera Settings",
+ "cameraWizard": {
+ "title": "Add Camera",
+ "description": "Follow the steps below to add a new camera to your Frigate installation.",
+ "steps": {
+ "nameAndConnection": "Name & Connection",
+ "probeOrSnapshot": "Probe or Snapshot",
+ "streamConfiguration": "Stream Configuration",
+ "validationAndTesting": "Validation & Testing"
+ },
+ "save": {
+ "success": "Successfully saved new camera {{cameraName}}.",
+ "failure": "Error saving {{cameraName}}."
+ },
+ "testResultLabels": {
+ "resolution": "Resolution",
+ "video": "Video",
+ "audio": "Audio",
+ "fps": "FPS"
+ },
+ "commonErrors": {
+ "noUrl": "Please provide a valid stream URL",
+ "testFailed": "Stream test failed: {{error}}"
+ },
+ "step1": {
+ "description": "Enter your camera details and choose to probe the camera or manually select the brand.",
+ "cameraName": "Camera Name",
+ "cameraNamePlaceholder": "e.g., front_door or Back Yard Overview",
+ "host": "Host/IP Address",
+ "port": "Port",
+ "username": "Username",
+ "usernamePlaceholder": "Optional",
+ "password": "Password",
+ "passwordPlaceholder": "Optional",
+ "selectTransport": "Select transport protocol",
+ "cameraBrand": "Camera Brand",
+ "selectBrand": "Select camera brand for URL template",
+ "customUrl": "Custom Stream URL",
+ "brandInformation": "Brand information",
+ "brandUrlFormat": "For cameras with the RTSP URL format as: {{exampleUrl}}",
+ "customUrlPlaceholder": "rtsp://username:password@host:port/path",
+ "connectionSettings": "Connection Settings",
+ "detectionMethod": "Stream Detection Method",
+ "onvifPort": "ONVIF Port",
+ "probeMode": "Probe camera",
+ "manualMode": "Manual selection",
+ "detectionMethodDescription": "Probe the camera with ONVIF (if supported) to find camera stream URLs, or manually select the camera brand to use pre-defined URLs. To enter a custom RTSP URL, choose the manual method and select \"Other\".",
+ "onvifPortDescription": "For cameras that support ONVIF, this is usually 80 or 8080.",
+ "useDigestAuth": "Use digest authentication",
+ "useDigestAuthDescription": "Use HTTP digest authentication for ONVIF. Some cameras may require a dedicated ONVIF username/password instead of the standard admin user.",
+ "errors": {
+ "brandOrCustomUrlRequired": "Either select a camera brand with host/IP or choose 'Other' with a custom URL",
+ "nameRequired": "Camera name is required",
+ "nameLength": "Camera name must be 64 characters or less",
+ "invalidCharacters": "Camera name contains invalid characters",
+ "nameExists": "Camera name already exists",
+ "customUrlRtspRequired": "Custom URLs must begin with \"rtsp://\". Manual configuration is required for non-RTSP camera streams."
+ }
+ },
+ "step2": {
+ "description": "Probe the camera for available streams or configure manual settings based on your selected detection method.",
+ "testSuccess": "Connection test successful!",
+ "testFailed": "Connection test failed. Please check your input and try again.",
+ "testFailedTitle": "Test Failed",
+ "streamDetails": "Stream Details",
+ "probing": "Probing camera...",
+ "retry": "Retry",
+ "testing": {
+ "probingMetadata": "Probing camera metadata...",
+ "fetchingSnapshot": "Fetching camera snapshot..."
+ },
+ "probeFailed": "Failed to probe camera: {{error}}",
+ "probingDevice": "Probing device...",
+ "probeSuccessful": "Probe successful",
+ "probeError": "Probe Error",
+ "probeNoSuccess": "Probe unsuccessful",
+ "deviceInfo": "Device Information",
+ "manufacturer": "Manufacturer",
+ "model": "Model",
+ "firmware": "Firmware",
+ "profiles": "Profiles",
+ "ptzSupport": "PTZ Support",
+ "autotrackingSupport": "Autotracking Support",
+ "presets": "Presets",
+ "rtspCandidates": "RTSP Candidates",
+ "rtspCandidatesDescription": "The following RTSP URLs were found from the camera probe. Test the connection to view stream metadata.",
+ "noRtspCandidates": "No RTSP URLs were found from the camera. Your credentials may be incorrect, or the camera may not support ONVIF or the method used to retrieve RTSP URLs. Go back and enter the RTSP URL manually.",
+ "candidateStreamTitle": "Candidate {{number}}",
+ "useCandidate": "Use",
+ "uriCopy": "Copy",
+ "uriCopied": "URI copied to clipboard",
+ "testConnection": "Test Connection",
+ "toggleUriView": "Click to toggle full URI view",
+ "connected": "Connected",
+ "notConnected": "Not Connected",
+ "errors": {
+ "hostRequired": "Host/IP address is required"
+ }
+ },
+ "step3": {
+ "description": "Configure stream roles and add additional streams for your camera.",
+ "streamsTitle": "Camera Streams",
+ "addStream": "Add Stream",
+ "addAnotherStream": "Add Another Stream",
+ "streamTitle": "Stream {{number}}",
+ "streamUrl": "Stream URL",
+ "streamUrlPlaceholder": "rtsp://username:password@host:port/path",
+ "selectStream": "Select a stream",
+ "searchCandidates": "Search candidates...",
+ "noStreamFound": "No stream found",
+ "url": "URL",
+ "resolution": "Resolution",
+ "selectResolution": "Select resolution",
+ "quality": "Quality",
+ "selectQuality": "Select quality",
+ "roles": "Roles",
+ "roleLabels": {
+ "detect": "Object Detection",
+ "record": "Recording",
+ "audio": "Audio"
+ },
+ "testStream": "Test Connection",
+ "testSuccess": "Stream test successful!",
+ "testFailed": "Stream test failed",
+ "testFailedTitle": "Test Failed",
+ "connected": "Connected",
+ "notConnected": "Not Connected",
+ "featuresTitle": "Features",
+ "go2rtc": "Reduce connections to camera",
+ "detectRoleWarning": "At least one stream must have the \"detect\" role to proceed.",
+ "rolesPopover": {
+ "title": "Stream Roles",
+ "detect": "Main feed for object detection.",
+ "record": "Saves segments of the video feed based on configuration settings.",
+ "audio": "Feed for audio based detection."
+ },
+ "featuresPopover": {
+ "title": "Stream Features",
+ "description": "Use go2rtc restreaming to reduce connections to your camera."
+ }
+ },
+ "step4": {
+ "description": "Final validation and analysis before saving your new camera. Connect each stream before saving.",
+ "validationTitle": "Stream Validation",
+ "connectAllStreams": "Connect All Streams",
+ "reconnectionSuccess": "Reconnection successful.",
+ "reconnectionPartial": "Some streams failed to reconnect.",
+ "streamUnavailable": "Stream preview unavailable",
+ "reload": "Reload",
+ "connecting": "Connecting...",
+ "streamTitle": "Stream {{number}}",
+ "valid": "Valid",
+ "failed": "Failed",
+ "notTested": "Not tested",
+ "connectStream": "Connect",
+ "connectingStream": "Connecting",
+ "disconnectStream": "Disconnect",
+ "estimatedBandwidth": "Estimated Bandwidth",
+ "roles": "Roles",
+ "ffmpegModule": "Use stream compatibility mode",
+ "ffmpegModuleDescription": "If the stream does not load after several attempts, try enabling this. When enabled, Frigate will use the ffmpeg module with go2rtc. This may provide better compatibility with some camera streams.",
+ "none": "None",
+ "error": "Error",
+ "streamValidated": "Stream {{number}} validated successfully",
+ "streamValidationFailed": "Stream {{number}} validation failed",
+ "saveAndApply": "Save New Camera",
+ "saveError": "Invalid configuration. Please check your settings.",
+ "issues": {
+ "title": "Stream Validation",
+ "videoCodecGood": "Video codec is {{codec}}.",
+ "audioCodecGood": "Audio codec is {{codec}}.",
+ "resolutionHigh": "A resolution of {{resolution}} may cause increased resource usage.",
+ "resolutionLow": "A resolution of {{resolution}} may be too low for reliable detection of small objects.",
+ "noAudioWarning": "No audio detected for this stream, recordings will not have audio.",
+ "audioCodecRecordError": "The AAC audio codec is required to support audio in recordings.",
+ "audioCodecRequired": "An audio stream is required to support audio detection.",
+ "restreamingWarning": "Reducing connections to the camera for the record stream may increase CPU usage slightly.",
+ "brands": {
+ "reolink-rtsp": "Reolink RTSP is not recommended. Enable HTTP in the camera's firmware settings and restart the wizard.",
+ "reolink-http": "Reolink HTTP streams should use FFmpeg for better compatibility. Enable 'Use stream compatibility mode' for this stream."
+ },
+ "dahua": {
+ "substreamWarning": "Substream 1 is locked to a low resolution. Many Dahua / Amcrest / EmpireTech cameras support additional substreams that need to be enabled in the camera's settings. It is recommended to check and utilize those streams if available."
+ },
+ "hikvision": {
+ "substreamWarning": "Substream 1 is locked to a low resolution. Many Hikvision cameras support additional substreams that need to be enabled in the camera's settings. It is recommended to check and utilize those streams if available."
+ }
+ }
+ }
+ },
+ "cameraManagement": {
+ "title": "Manage Cameras",
+ "addCamera": "Add New Camera",
+ "editCamera": "Edit Camera:",
+ "selectCamera": "Select a Camera",
+ "backToSettings": "Back to Camera Settings",
"streams": {
- "title": "Streams",
+ "title": "Enable / Disable Cameras",
"desc": "Temporarily disable a camera until Frigate restarts. Disabling a camera completely stops Frigate's processing of this camera's streams. Detection, recording, and debugging will be unavailable.{{label}}?",
+ "ask_an": "Kas see objekt on {{label}}?",
+ "ask_full": "Kas see objekt on {{untranslatedLabel}} ({{translatedLabel}})?",
+ "label": "Kinnita see silt Frigate+ teenuse jaoks"
+ }
+ },
+ "submitToPlus": {
+ "label": "Saada teenusesse Frigate+",
+ "desc": "Objektid asukohtades, mida sa tahad vältida, pole valepositiivsed. Kui sa neid sellistena saadad teenusele, siis see ainult ajab tehisaru mudeli sassi."
+ }
+ }
+ },
+ "export": {
+ "time": {
+ "fromTimeline": "Vali ajajoonelt",
+ "lastHour_one": "Viimase tunni jooksul",
+ "lastHour_other": "Viimase {{count}} tunni jooksul",
+ "custom": "Sinu valitud ajavahemik",
+ "start": {
+ "title": "Algusaeg",
+ "label": "Vali algusaeg"
+ },
+ "end": {
+ "title": "Lõpuaeg",
+ "label": "Vali lõpuaeg"
+ }
+ },
+ "name": {
+ "placeholder": "Sisesta ekspordifaili nimi"
+ },
+ "select": "Vali",
+ "export": "Ekspordi",
+ "selectOrExport": "Vali või ekspordi",
+ "toast": {
+ "success": "Eksportimise käivitamine õnnestus. Faili leiad eksportimise lehelt.",
+ "view": "Vaata",
+ "error": {
+ "failed": "Eksportimise käivitamine ei õnnestunud: {{error}}",
+ "endTimeMustAfterStartTime": "Ajavahemiku lõpp peab olema peale algust",
+ "noVaildTimeSelected": "Ühtegi kehtivat ajavahemikku pole valitud"
+ }
+ },
+ "fromTimeline": {
+ "saveExport": "Salvesta eksporditud sisu",
+ "previewExport": "Eksporditud sisu eelvaade"
+ }
+ },
+ "streaming": {
+ "label": "Voogedastus",
+ "restreaming": {
+ "disabled": "Voogedastuse kordus pole selle kaamera puhul kasutatav.",
+ "desc": {
+ "title": "Kui tahad selle kaameraga kasutada täiendavaid otseeetri ja helivõimalusi, siis seadista go2rtc."
+ }
+ },
+ "debugView": "Veaotsinguvaade",
+ "showStats": {
+ "label": "Näita voogedastuse statistikat",
+ "desc": "Lülita see eelistus sisse, kui soovid kaamerapildi ülekattena näha voogedastuse statistikat."
+ }
+ },
+ "recording": {
+ "button": {
+ "export": "Ekspordi",
+ "markAsReviewed": "Märgi ülevaadatuks",
+ "markAsUnreviewed": "Märgi mitteülevaadatuks",
+ "deleteNow": "Kustuta kohe"
+ },
+ "confirmDelete": {
+ "title": "Kinnita kustutamine",
+ "desc": {
+ "selected": "Kas sa oled kindel et soovid selle kõik ülevaadatava objektiga seotud kirjed kustutada?detect-tüüpi voogedastusest pole tulnud ühtegi kaadrit. Täpsemat teavet leiad vealogidest"
+ },
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "Kaadri saatmine Frigate+ teenusesse õnnestus"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "Kaadri saatmine Frigate+ teenusesse ei õnnestunud"
+ }
+ }
+}
diff --git a/web/public/locales/et/objects.json b/web/public/locales/et/objects.json
new file mode 100644
index 000000000..19830deaf
--- /dev/null
+++ b/web/public/locales/et/objects.json
@@ -0,0 +1,120 @@
+{
+ "person": "Inimene",
+ "bicycle": "Jalgratas",
+ "car": "Auto",
+ "motorcycle": "Mootorratas",
+ "airplane": "Lennuk",
+ "bus": "Buss",
+ "train": "Rong",
+ "boat": "Väike laev",
+ "traffic_light": "Valgusfoor",
+ "fire_hydrant": "Tuletõrjehüdrant",
+ "street_sign": "Liiklusmärk",
+ "stop_sign": "Stoppmärk",
+ "parking_meter": "Parkimispiletite automaat",
+ "bench": "Istepink",
+ "bird": "Lind",
+ "cat": "Kass",
+ "dog": "Koer",
+ "horse": "Hobune",
+ "sheep": "Lammas",
+ "cow": "Lehm",
+ "elephant": "Elevant",
+ "bear": "Karu",
+ "zebra": "Sebra",
+ "giraffe": "Kaelkirjak",
+ "hat": "Müts",
+ "backpack": "Seljakott",
+ "umbrella": "Vihmavari",
+ "shoe": "King",
+ "eye_glasses": "Prillid",
+ "handbag": "Käekott",
+ "tie": "Lips",
+ "suitcase": "Kohver",
+ "frisbee": "Lendav taldrik",
+ "skis": "Suusad",
+ "snowboard": "Lumelaud",
+ "sports_ball": "Pall",
+ "kite": "Tuulelohe",
+ "baseball_bat": "Pesapallikurikas",
+ "baseball_glove": "Pesapallikinnas",
+ "skateboard": "Rula",
+ "surfboard": "Surfilaud",
+ "tennis_racket": "Tennisereket",
+ "animal": "Loom",
+ "bottle": "Pudel",
+ "plate": "Taldrik",
+ "wine_glass": "Veiniklaas",
+ "cup": "Kruus",
+ "fork": "Kahvel",
+ "knife": "Nuga",
+ "spoon": "Lusikas",
+ "bowl": "Kauss",
+ "banana": "Banaan",
+ "apple": "Õun",
+ "sandwich": "Võileib",
+ "orange": "Apelsin",
+ "broccoli": "Spargelkapsas",
+ "carrot": "Porgand",
+ "hot_dog": "Viinerisai",
+ "pizza": "Pitsa",
+ "donut": "Sõõrik",
+ "cake": "Kook",
+ "chair": "Tool",
+ "couch": "Kušett",
+ "potted_plant": "Potilill",
+ "bed": "Voodi",
+ "mirror": "Peegel",
+ "dining_table": "Söögilaud",
+ "window": "Aken",
+ "desk": "Kirjutuslaud",
+ "toilet": "Tualett",
+ "door": "Uks",
+ "tv": "Teler",
+ "laptop": "Sülearvuti",
+ "mouse": "Hiir",
+ "remote": "Kaugjuhtimispult",
+ "keyboard": "Klahvistik",
+ "cell_phone": "Mobiiltelefon",
+ "microwave": "Mikrolaineahi",
+ "oven": "Ahi",
+ "toaster": "Röster",
+ "sink": "Kraanikauss",
+ "refrigerator": "Külmkapp",
+ "blender": "Kannmikser",
+ "book": "Raamat",
+ "clock": "Kell",
+ "vase": "Vaas",
+ "scissors": "Käärid",
+ "teddy_bear": "Mängukaru",
+ "hair_dryer": "Föön",
+ "toothbrush": "Hambahari",
+ "hair_brush": "Juuksehari",
+ "vehicle": "Sõiduk",
+ "squirrel": "Orav",
+ "deer": "Hirv",
+ "bark": "Puukoor",
+ "fox": "Rebane",
+ "goat": "Kits",
+ "rabbit": "Jänes",
+ "raccoon": "Pesukaru",
+ "robot_lawnmower": "Robotmuruniiduk",
+ "waste_bin": "Prügikast",
+ "on_demand": "Nõudmisel",
+ "face": "Nägu",
+ "license_plate": "Sõiduki numbrimärk",
+ "package": "Pakett",
+ "bbq_grill": "Väligrill",
+ "amazon": "Amazoni sõiduk",
+ "usps": "USPS-i sõiduk",
+ "ups": "UPS-i sõiduk",
+ "fedex": "FedExi sõiduk",
+ "dhl": "DHL-i sõiduk",
+ "an_post": "An Posti sõiduk",
+ "purolator": "Purolatori sõiduk",
+ "postnl": "PostNL-i sõiduk",
+ "nzpost": "NZPost-i sõiduk",
+ "postnord": "PostNordi sõiduk",
+ "gls": "GLS-i sõiduk",
+ "dpd": "DPD sõiduk"
+}
diff --git a/web/public/locales/et/views/classificationModel.json b/web/public/locales/et/views/classificationModel.json
new file mode 100644
index 000000000..93db04cba
--- /dev/null
+++ b/web/public/locales/et/views/classificationModel.json
@@ -0,0 +1,47 @@
+{
+ "toast": {
+ "success": {
+ "deletedModel_one": "{{count}} mudeli kustutamine õnnestus",
+ "deletedModel_other": "{{count}} mudeli kustutamine õnnestus"
+ }
+ },
+ "documentTitle": "Klassifitseerimise mudelid - Frigate",
+ "details": {
+ "scoreInfo": "Skoor näitab selle objekti kõigi tuvastuste keskmist klassifitseerimise usaldusväärsust.",
+ "none": "Puudub",
+ "unknown": "Pole teada"
+ },
+ "button": {
+ "deleteClassificationAttempts": "Kustuta klassifitseerimispildid",
+ "renameCategory": "Muuda klassi nimi",
+ "deleteCategory": "Kustuta klass",
+ "deleteImages": "Kustuta pildid",
+ "addClassification": "Lisa klassifikatsioon",
+ "deleteModels": "Kustuta mudelid",
+ "editModel": "Muuda mudelit"
+ },
+ "description": {
+ "invalidName": "Vigane nimi. Nimed võivad sisaldada ainult tähti, numbreid, tühikuid, ülakomasid, alakriipse ja sidekriipse."
+ },
+ "deleteModel": {
+ "desc_one": "Kas oled kindel, et soovid kustutada {{count}} mudeli? Järgnevaga kustuvad jäädavalt kõik seotud andmed, sealhulgas pildid ja koolitusandmed. Seda tegevust ei saa tagasi pöörata.",
+ "desc_other": "Kas oled kindel, et soovid kustutada {{count}} mudelit? Järgnevaga kustuvad jäädavalt kõik seotud andmed, sealhulgas pildid ja koolitusandmed. Seda tegevust ei saa tagasi pöörata."
+ },
+ "deleteDatasetImages": {
+ "desc_one": "Kas oled kindel, et soovid kustutada {{count}} pildi {{dataset}} andmekogust? Seda tegevust ei saa tagasi pöörata ja hiljem on vaja mudelit uuesti koolitada.",
+ "desc_other": "Kas oled kindel, et soovid kustutada {{count}} pilti {{dataset}} andmekogust? Seda tegevust ei saa tagasi pöörata ja hiljem on vaja mudelit uuesti koolitada."
+ },
+ "deleteTrainImages": {
+ "desc_one": "Kas oled kindel, et soovid kustutada {{count}} pildi? Seda tegevust ei saa tagasi pöörata.",
+ "desc_other": "Kas oled kindel, et soovid kustutada {{count}} pilti? Seda tegevust ei saa tagasi pöörata."
+ },
+ "wizard": {
+ "step3": {
+ "allImagesRequired_one": "Palun klassifitseeri kõik pildid. Jäänud on veel {{count}} pilt.",
+ "allImagesRequired_other": "Palun klassifitseeri kõik pildid. Jäänud on veel {{count}} pilti."
+ }
+ },
+ "tooltip": {
+ "trainingInProgress": "Mudel on parasjagu õppimas"
+ }
+}
diff --git a/web/public/locales/et/views/configEditor.json b/web/public/locales/et/views/configEditor.json
new file mode 100644
index 000000000..56371cd04
--- /dev/null
+++ b/web/public/locales/et/views/configEditor.json
@@ -0,0 +1,18 @@
+{
+ "toast": {
+ "error": {
+ "savingError": "Viga seadistuse salvestamisel"
+ },
+ "success": {
+ "copyToClipboard": "Seadistused on kopeeritud lõikelauale."
+ }
+ },
+ "documentTitle": "Seadistuste haldus - Frigate",
+ "safeConfigEditor": "Seadistuste haldus (ohutusrežiim)",
+ "configEditor": "Seadistuste haldus",
+ "safeModeDescription": "Seadistuste vea tõttu on Frigate hetkel ohutusrežiimis.",
+ "copyConfig": "Kopeeri seadistused",
+ "saveAndRestart": "Salvesta ja käivita uuesti",
+ "saveOnly": "Vaid salvesta",
+ "confirm": "Kas väljud ilma salvestamata?"
+}
diff --git a/web/public/locales/et/views/events.json b/web/public/locales/et/views/events.json
new file mode 100644
index 000000000..75e4a3d5c
--- /dev/null
+++ b/web/public/locales/et/views/events.json
@@ -0,0 +1,65 @@
+{
+ "alerts": "Häired",
+ "allCameras": "Kõik kaamerad",
+ "detail": {
+ "settings": "Üksikasjaliku vaate seadistused",
+ "label": "Üksikasjad",
+ "noDataFound": "Ülevaatamiseks pole üksikasjalikke andmeid",
+ "aria": "Lülita üksikasjalik vaade sisse/välja",
+ "trackedObject_one": "{{count}} objekt",
+ "trackedObject_other": "{{count}} objekti",
+ "noObjectDetailData": "Objekti üksikasjalikke andmeid pole saadaval.",
+ "alwaysExpandActive": {
+ "title": "Alati laienda aktiivse kirje andmeid",
+ "desc": "Kui vähegi saadaval, siis alati laienda aktiivse ülevaatamisel kirje andmeid."
+ }
+ },
+ "detections": "Tuvastamise tulemused",
+ "motion": {
+ "label": "Liikumine",
+ "only": "Vaid liikumine"
+ },
+ "empty": {
+ "alert": "Ülevaatamiseks ei leidu ühtegi häiret",
+ "detection": "Ülevaatamiseks ei leidu ühtegi tuvastamist",
+ "motion": "Liikumise andmeid ei leidu",
+ "recordingsDisabled": {
+ "title": "Salvestamine peab olema sisse lülitatud",
+ "description": "Objekte saad määrata ülevaadatamiseks vaid siis, kui selle kaamera puhul on salvestamine lülitatud sisse."
+ }
+ },
+ "select_all": "Kõik",
+ "camera": "Kaamera",
+ "detected": "tuvastatud",
+ "normalActivity": "Tavaline",
+ "needsReview": "Vajab ülevaatamist",
+ "securityConcern": "Võib olla turvaprobleem",
+ "timeline": "Ajajoon",
+ "timeline.aria": "Vali ajajoon",
+ "zoomIn": "Suumi sisse",
+ "zoomOut": "Suumi välja",
+ "events": {
+ "label": "Sündmused",
+ "aria": "Vali sündmused",
+ "noFoundForTimePeriod": "Selle ajavahemiku kohta ei leidu sündmusi."
+ },
+ "selected_one": "{{count}} valitud",
+ "selected_other": "{{count}} valitud",
+ "markAsReviewed": "Märgi ülevaadatuks",
+ "markTheseItemsAsReviewed": "Märgi need kirjed ülevaadatuks",
+ "newReviewItems": {
+ "label": "Vaata uusi ülevaatamiseks mõeldud kirjeid",
+ "button": "Uued ülevaatamiseks mõeldud kirjed"
+ },
+ "documentTitle": "Ülevaatamine - Frigate",
+ "recordings": {
+ "documentTitle": "Salvestised - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "Viimased 24 tundi"
+ },
+ "objectTrack": {
+ "clickToSeek": "Klõpsa siia ajapunkti kerimiseks",
+ "trackedPoint": "Jälgitav punkt"
+ }
+}
diff --git a/web/public/locales/et/views/explore.json b/web/public/locales/et/views/explore.json
new file mode 100644
index 000000000..76592a97d
--- /dev/null
+++ b/web/public/locales/et/views/explore.json
@@ -0,0 +1,74 @@
+{
+ "trackedObjectsCount_one": "{{count}} jälgitav objekt ",
+ "trackedObjectsCount_other": "{{count}} jälgitavat objekti ",
+ "fetchingTrackedObjectsFailed": "Viga jälgitavate objektide laadimisel: {{errorMessage}}",
+ "noTrackedObjects": "Ühtegi jälgitavat objekti ei leidunud",
+ "itemMenu": {
+ "findSimilar": {
+ "aria": "Otsi sarnaseid jälgitavaid objekte"
+ },
+ "downloadSnapshot": {
+ "label": "Laadi hetkvõte alla",
+ "aria": "Laadi hetkvõte alla"
+ },
+ "downloadCleanSnapshot": {
+ "label": "Laadi puhas hetkvõte alla",
+ "aria": "Laadi puhas hetkvõte alla"
+ }
+ },
+ "trackingDetails": {
+ "annotationSettings": {
+ "showAllZones": {
+ "title": "Näita kõiki tsoone",
+ "desc": "Kui objekt on sisenenud tsooni, siis alati näida tsooni märgistust."
+ }
+ },
+ "lifecycleItemDesc": {
+ "attribute": {
+ "other": "{{label}} on tuvastatud kui {{attribute}}"
+ },
+ "stationary": "{{label}} jäi paigale",
+ "active": "{{label}} muutus aktiivseks",
+ "entered_zone": "{{label}} sisenes tsooni {{zones}}",
+ "visible": "{{label}} on tuvastatud"
+ },
+ "title": "Jälgimise üksikasjad",
+ "noImageFound": "Selle ajatempli kohta ei leidu pilti.",
+ "createObjectMask": "Loo objektimask"
+ },
+ "documentTitle": "Avasta - Frigate",
+ "generativeAI": "Generatiivne tehisaru",
+ "exploreMore": "Avasta rohkem {{label}}-tüüpi objekte",
+ "exploreIsUnavailable": {
+ "embeddingsReindexing": {
+ "step": {
+ "thumbnailsEmbedded": "Pisipildid on lõimitud: ",
+ "descriptionsEmbedded": "Kirjeldused on lõimitud: ",
+ "trackedObjectsProcessed": "Jälgitud objektid on töödeldud: "
+ },
+ "startingUp": "Käivitun…",
+ "estimatedTime": "Hinnanguliselt jäänud aega:",
+ "finishingShortly": "Lõpetan õige pea"
+ }
+ },
+ "type": {
+ "details": "üksikasjad",
+ "thumbnail": "pisipilt",
+ "snapshot": "hetkvõte",
+ "video": "video",
+ "tracking_details": "jälgimise üksikasjad"
+ },
+ "details": {
+ "item": {
+ "tips": {
+ "mismatch_one": "Tuvastasin {{count}} võõra objekti ja need on lisatud ülevaatamiseks. Need objektid kas ei ole piisavad häire või tuvastamise jaoks, aga ka võivad juba olla eemaldatud või kustutatud.",
+ "mismatch_other": "Tuvastasin {{count}} võõrast objekti ja need on lisatud ülevaatamiseks. Need objektid kas ei ole piisavad häire või tuvastamise jaoks, aga ka võivad juba olla eemaldatud või kustutatud."
+ }
+ },
+ "snapshotScore": {
+ "label": "Hetkvõttete punktiskoor"
+ },
+ "regenerateFromSnapshot": "Loo uuesti hetkvõttest",
+ "timestamp": "Ajatampel"
+ }
+}
diff --git a/web/public/locales/et/views/exports.json b/web/public/locales/et/views/exports.json
new file mode 100644
index 000000000..56814537e
--- /dev/null
+++ b/web/public/locales/et/views/exports.json
@@ -0,0 +1,23 @@
+{
+ "documentTitle": "Eksport Frigate'ist",
+ "search": "Otsi",
+ "noExports": "Eksporditud sisu ei leidu",
+ "deleteExport": "Kustuta eksporditud sisu",
+ "deleteExport.desc": "Kas sa oled kindel et soovid „{{exportName}}“ kustutada?",
+ "editExport": {
+ "title": "Muuda eksporditud sisu nime",
+ "desc": "Sisesta eksporditud sisu jaoks uus nimi.",
+ "saveExport": "Salvesta eksporditud sisu"
+ },
+ "tooltip": {
+ "shareExport": "Jaga eksporditud sisu",
+ "downloadVideo": "Laadi video alla",
+ "editName": "Muuda nime",
+ "deleteExport": "Kustuta eksporditud sisu"
+ },
+ "toast": {
+ "error": {
+ "renameExportFailed": "Eksporditud sisu nime muutmine ei õnnestunud: {{errorMessage}}"
+ }
+ }
+}
diff --git a/web/public/locales/et/views/faceLibrary.json b/web/public/locales/et/views/faceLibrary.json
new file mode 100644
index 000000000..42c795a06
--- /dev/null
+++ b/web/public/locales/et/views/faceLibrary.json
@@ -0,0 +1,38 @@
+{
+ "button": {
+ "uploadImage": "Laadi pilt üles"
+ },
+ "collections": "Kogumikud",
+ "description": {
+ "placeholder": "Sisesta nimi selle kogumiku jaoks",
+ "invalidName": "Vigane nimi. Nimed võivad sisaldada ainult tähti, numbreid, tühikuid, ülakomasid, alakriipse ja sidekriipse.",
+ "addFace": "Laadides üles oma esimese pildi saad lisada uue kogumiku Näoteeki."
+ },
+ "documentTitle": "Näoteek - Frigate",
+ "createFaceLibrary": {
+ "new": "Lisa uus nägu"
+ },
+ "deleteFaceLibrary": {
+ "title": "Kustuta nimi"
+ },
+ "toast": {
+ "error": {
+ "addFaceLibraryFailed": "Näo sidumine nimega ei õnnestunud: {{errorMessage}}"
+ },
+ "success": {
+ "addFaceLibrary": "Lisamine Näoteeki õnnestus: {{name}}!",
+ "deletedFace_one": "{{count}} näo kustutamine õnnestus.",
+ "deletedFace_other": "{{count}} näo kustutamine õnnestus.",
+ "deletedName_one": "{{count}} näo kustutamine õnnestus.",
+ "deletedName_other": "{{count}} näo kustutamine õnnestus."
+ }
+ },
+ "deleteFaceAttempts": {
+ "desc_one": "Kas oled kindel, et soovid kustutada {{count}} näo? Seda tegevust ei saa tagasi pöörata.",
+ "desc_other": "Kas oled kindel, et soovid kustutada {{count}} nägu? Seda tegevust ei saa tagasi pöörata."
+ },
+ "details": {
+ "timestamp": "Ajatampel",
+ "unknown": "Pole teada"
+ }
+}
diff --git a/web/public/locales/et/views/live.json b/web/public/locales/et/views/live.json
new file mode 100644
index 000000000..9ba1ba125
--- /dev/null
+++ b/web/public/locales/et/views/live.json
@@ -0,0 +1,134 @@
+{
+ "muteCameras": {
+ "enable": "Summuta kõik kaamerad",
+ "disable": "Lõpeta kõikide kaamerate summutamine"
+ },
+ "streamingSettings": "Voogedastuse seadistused",
+ "cameraSettings": {
+ "title": "Seadistused: {{camera}}",
+ "cameraEnabled": "Kaamera on kasutusel",
+ "objectDetection": "Objektide tuvastamine",
+ "audioDetection": "Heli tuvastus",
+ "transcription": "Heli üleskirjutus",
+ "snapshots": "Hetkvõtted"
+ },
+ "documentTitle": "Otseülekanne - Frigate",
+ "documentTitle.withCamera": "{{camera}} - Otseülekanne - Frigate",
+ "lowBandwidthMode": "Väikese ribalaiusega režiim",
+ "twoWayTalk": {
+ "enable": "Lülita kahepoolne kõneside sisse",
+ "disable": "Lülita kahepoolne kõneside välja"
+ },
+ "cameraAudio": {
+ "enable": "Lülita kaamera heli sisse",
+ "disable": "Lülita kaamera heli välja"
+ },
+ "ptz": {
+ "move": {
+ "clickMove": {
+ "label": "Kaamerapildi joondamiseks keskele klõpsa kaadris",
+ "enable": "Kasuta klõpsamisega teisaldamist",
+ "disable": "Ära kasuta klõpsamisega teisaldamist"
+ },
+ "left": {
+ "label": "Pööra liigutatavat kaamerat vasakule"
+ },
+ "up": {
+ "label": "Pööra liigutatavat kaamerat üles"
+ },
+ "down": {
+ "label": "Pööra liigutatavat kaamerat alla"
+ },
+ "right": {
+ "label": "Pööra liigutatavat kaamerat paremale"
+ }
+ },
+ "zoom": {
+ "in": {
+ "label": "Suumi liigutatavat kaamerat sisse"
+ },
+ "out": {
+ "label": "Suumi liigutatavat kaamerat välja"
+ }
+ },
+ "focus": {
+ "in": {
+ "label": "Fookusta liigutatavat kaamerat sisse"
+ },
+ "out": {
+ "label": "Fookusta liigutatavat kaamerat välja"
+ }
+ },
+ "presets": "Liigutatava kaamera eelseadistused",
+ "frame": {
+ "center": {
+ "label": "Klõpsa kaadrit liigutatava kaamera pildi sättimiseks keskele"
+ }
+ }
+ },
+ "camera": {
+ "enable": "Lülita kaamera sisse",
+ "disable": "Lülita kaamera välja"
+ },
+ "detect": {
+ "enable": "Lülita tuvastamine sisse",
+ "disable": "Lülita tuvastamine välja"
+ },
+ "recording": {
+ "enable": "Lülita salvestamine sisse",
+ "disable": "Lülita salvestamine välja"
+ },
+ "snapshots": {
+ "enable": "Lülita hetkvõtted sisse",
+ "disable": "Lülita hetkvõtted välja"
+ },
+ "streamStats": {
+ "enable": "Näita voogedastuse statistikat",
+ "disable": "Peida voogedastuse statistika"
+ },
+ "stream": {
+ "twoWayTalk": {
+ "available": "Kahepoolne kõneside on selle voogedastuse puhul saadaval",
+ "unavailable": "Kahepoolne kõneside pole selle voogedastuse puhul saadaval",
+ "tips": "Sinu seadme peab seda funktsionaalsust toetama ja WebRTC peab olema kahepoolse kõneside jaoks seadistatud."
+ },
+ "playInBackground": {
+ "label": "Esita taustal",
+ "tips": "Selle eelistusega saad määrata, et voogedastus jääb tööle ka siis, kui meesiaesitaja on suletud."
+ }
+ },
+ "notifications": "Teavitused",
+ "audio": "Heli",
+ "snapshot": {
+ "takeSnapshot": "Laadi hetkvõte alla",
+ "noVideoSource": "Hetkvõtte tegemiseks pole saadaval ühtegi videoallikat.",
+ "captureFailed": "Hetkvõtte jäädvustamine ei õnnestunud.",
+ "downloadStarted": "Hetkvõtte allalaadimine algas."
+ },
+ "audioDetect": {
+ "enable": "Lülita helituvastus sisse",
+ "disable": "Lülita helituvastus välja"
+ },
+ "transcription": {
+ "enable": "Lülita reaalajas heli üleskirjutus sisse",
+ "disable": "Lülita reaalajas heli üleskirjutus välja"
+ },
+ "autotracking": {
+ "enable": "Lülita automaatne jälgimine sisse",
+ "disable": "Lülita automaatne jälgimine välja"
+ },
+ "manualRecording": {
+ "title": "Nõudmisel",
+ "playInBackground": {
+ "label": "Esita taustal",
+ "desc": "Kasuta seda valikut, kui tahad voogedastuse jätkumist ka siis, kui pildivaade on peidetud."
+ }
+ },
+ "noCameras": {
+ "buttonText": "Lisa kaamera",
+ "restricted": {
+ "title": "Ühtegi kaamerat pole saadaval",
+ "description": "Sul pole õigust ühegi selle grupi kaamera vaatamiseks."
+ }
+ }
+}
diff --git a/web/public/locales/et/views/recording.json b/web/public/locales/et/views/recording.json
new file mode 100644
index 000000000..57ed97509
--- /dev/null
+++ b/web/public/locales/et/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "export": "Ekspordi",
+ "calendar": "Kalender",
+ "filter": "Filter",
+ "filters": "Filtrid",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "Ühtegi kehtivat ajavahemikku pole valitud",
+ "endTimeMustAfterStartTime": "Ajavahemiku lõpp peab olema peale algust"
+ }
+ }
+}
diff --git a/web/public/locales/et/views/search.json b/web/public/locales/et/views/search.json
new file mode 100644
index 000000000..52b917d22
--- /dev/null
+++ b/web/public/locales/et/views/search.json
@@ -0,0 +1,23 @@
+{
+ "placeholder": {
+ "search": "Otsi…"
+ },
+ "search": "Otsi",
+ "savedSearches": "Salvestatud otsingud",
+ "searchFor": "Otsi: {{inputValue}}",
+ "button": {
+ "clear": "Tühjenda otsing",
+ "save": "Salvesta otsing",
+ "delete": "Kustuta salvestatud otsing",
+ "filterInformation": "Filtri teave"
+ },
+ "filter": {
+ "label": {
+ "has_snapshot": "Leidub hetkvõte",
+ "cameras": "Kaamerad",
+ "labels": "Sildid",
+ "zones": "Tsoonid",
+ "sub_labels": "Alamsildid"
+ }
+ }
+}
diff --git a/web/public/locales/et/views/settings.json b/web/public/locales/et/views/settings.json
new file mode 100644
index 000000000..c3398cf7b
--- /dev/null
+++ b/web/public/locales/et/views/settings.json
@@ -0,0 +1,193 @@
+{
+ "cameraWizard": {
+ "step1": {
+ "password": "Salasõna",
+ "passwordPlaceholder": "Valikuline",
+ "customUrlPlaceholder": "rtsp://kasutajanimi:salasõna@host:port/asukoht",
+ "connectionSettings": "Ühenduse seadistused"
+ },
+ "step3": {
+ "streamUrlPlaceholder": "rtsp://kasutajanimi:salasõna@host:port/asukoht"
+ },
+ "steps": {
+ "probeOrSnapshot": "Võta proov või tee hetkvõte"
+ },
+ "step2": {
+ "testing": {
+ "fetchingSnapshot": "Laadin kaamera hetkvõtet alla..."
+ }
+ }
+ },
+ "users": {
+ "updatePassword": "Lähtesta salasõna",
+ "toast": {
+ "success": {
+ "updatePassword": "Salasõna muutmine õnnestus."
+ },
+ "error": {
+ "setPasswordFailed": "Salasõna salvestamine ei õnnestunud: {{errorMessage}}"
+ }
+ },
+ "table": {
+ "password": "Lähtesta salasõna"
+ },
+ "dialog": {
+ "form": {
+ "password": {
+ "title": "Salasõna",
+ "placeholder": "Sisesta salasõna",
+ "confirm": {
+ "title": "Korda salasõna",
+ "placeholder": "Korda salasõna"
+ },
+ "strength": {
+ "title": "Salasõna tugevus: ",
+ "weak": "Nõrk",
+ "medium": "Keskmime",
+ "strong": "Tugev",
+ "veryStrong": "Väga tugev"
+ },
+ "match": "Salasõnad klapivad omavahel",
+ "notMatch": "Salasõnad ei klapi omavahel",
+ "show": "Näita salasõna",
+ "hide": "Peida salasõna",
+ "requirements": {
+ "title": "Salasõna reeglid:",
+ "length": "Vähemalt 8 tähemärki",
+ "uppercase": "Vähemalt üks suurtäht",
+ "digit": "Vähemalt üks number",
+ "special": "Vähemalt üks erimärk (!@#$%^&*(),.?\":{}|<>)"
+ }
+ },
+ "newPassword": {
+ "title": "Uus salasõna",
+ "placeholder": "Sisesta uus salasõna",
+ "confirm": {
+ "placeholder": "Sisesta uus salasõna uuesti"
+ }
+ },
+ "passwordIsRequired": "Salasõna on vajalik",
+ "currentPassword": {
+ "title": "Senine salasõna",
+ "placeholder": "Sisesta oma senine salasõna"
+ }
+ },
+ "createUser": {
+ "confirmPassword": "Palun kinnita oma uus salasõna"
+ },
+ "passwordSetting": {
+ "cannotBeEmpty": "Salasõna ei või jääda tühjaks",
+ "doNotMatch": "Salasõnad ei klapi omavahel",
+ "updatePassword": "Muuda kasutaja {{username}} salasõna",
+ "setPassword": "Sisesta salasõna",
+ "desc": "Selle kasutajakonto turvalisuse tagamiseks lisa tugev salasõna.",
+ "currentPasswordRequired": "Senine salasõna on vajalik",
+ "incorrectCurrentPassword": "Senine salasõna pole õige",
+ "passwordVerificationFailed": "Salasõna kontrollimine ei õnnestunud"
+ }
+ }
+ },
+ "debug": {
+ "boundingBoxes": {
+ "desc": "Näita jälgitavate objektide ümber märgiskaste"
+ }
+ },
+ "documentTitle": {
+ "default": "Seadistused - Frigate",
+ "authentication": "Autentimise seadistused - Frigate",
+ "cameraReview": "Kaamerate kordusvaatuste seadistused - Frigate",
+ "general": "Kasutajaliidese seadistused - Frigate",
+ "frigatePlus": "Frigate+ seadistused - Frigate",
+ "notifications": "Teavituste seadistused - Frigate",
+ "cameraManagement": "Kaamerate haldus - Frigate",
+ "masksAndZones": "Maskide ja tsoonide haldus - Frigate",
+ "object": "Silumine ja veaotsing - Frigate"
+ },
+ "general": {
+ "title": "Kasutajaliidese seadistused",
+ "cameraGroupStreaming": {
+ "clearAll": "Kustuta kõik voogedastuse seadistused"
+ },
+ "liveDashboard": {
+ "title": "Töölaud reaalajas",
+ "automaticLiveView": {
+ "label": "Automaatne otseülekande vaade"
+ }
+ }
+ },
+ "cameraManagement": {
+ "backToSettings": "Tagasi kaameraseadistuste juurde"
+ },
+ "notification": {
+ "notificationSettings": {
+ "title": "Teavituste seadistused"
+ },
+ "globalSettings": {
+ "title": "Üldseadistused"
+ },
+ "deviceSpecific": "Seadmekohased seadistused",
+ "toast": {
+ "success": {
+ "settingSaved": "Teavituste seadistused on salvestatud."
+ }
+ }
+ },
+ "frigatePlus": {
+ "title": "Frigate+ seadistused",
+ "unsavedChanges": "Frigate+ seadistuste muudatused on salvestamata",
+ "toast": {
+ "success": "Frigate+ seadistuste muudatused on salvestatud. Muudatuste kasutuselevõtmiseks käivita Frigate uuesti."
+ },
+ "snapshotConfig": {
+ "title": "Hetkvõtte seadistused",
+ "table": {
+ "snapshots": "Hetkvõtted",
+ "cleanCopySnapshots": "clean_copy Hetkvõtted",
+ "camera": "Kaamera"
+ }
+ }
+ },
+ "masksAndZones": {
+ "zones": {
+ "point_one": "{{count}} punkt",
+ "point_other": "{{count}} punkti"
+ },
+ "motionMasks": {
+ "point_one": "{{count}} punkt",
+ "point_other": "{{count}} punkti"
+ },
+ "objectMasks": {
+ "point_one": "{{count}} punkt",
+ "point_other": "{{count}} punkti"
+ }
+ },
+ "roles": {
+ "toast": {
+ "success": {
+ "userRolesUpdated_one": "{{count}} selle rolliga kasutaja on nüüd määratud Vaatajaks, kellel on ligipääs kõikidele kaameratele.",
+ "userRolesUpdated_other": "{{count}} selle rolliga kasutajat on nüüd määratud Vaatajaks, kellel on ligipääs kõikidele kaameratele."
+ }
+ }
+ },
+ "menu": {
+ "ui": "Kasutajaliides",
+ "cameraManagement": "Haldus",
+ "masksAndZones": "Maskid ja tsoonid",
+ "triggers": "Päästikud",
+ "debug": "Silumine ja veaotsing",
+ "users": "Kasutajad",
+ "roles": "Rollid",
+ "notifications": "Teavitused",
+ "frigateplus": "Frigate+"
+ },
+ "dialog": {
+ "unsavedChanges": {
+ "title": "Sul on salvestamata muudatusi.",
+ "desc": "Kas soovid muudatused enne jätkamist salvestada?"
+ }
+ },
+ "cameraSetting": {
+ "camera": "Kaamera",
+ "noCamera": "Kaamerat pole"
+ }
+}
diff --git a/web/public/locales/et/views/system.json b/web/public/locales/et/views/system.json
new file mode 100644
index 000000000..b3bbb33aa
--- /dev/null
+++ b/web/public/locales/et/views/system.json
@@ -0,0 +1,17 @@
+{
+ "documentTitle": {
+ "general": "Üldine statistika - Frigate",
+ "cameras": "Kaamerate statistika - Frigate",
+ "storage": "Andmeruumi statistika - Frigate"
+ },
+ "logs": {
+ "download": {
+ "label": "Laadi logid alla"
+ },
+ "copy": {
+ "label": "Kopeeri lõikelauale",
+ "success": "Logid on kopeeritud lõikelauale"
+ }
+ },
+ "title": "Süsteem"
+}
diff --git a/web/public/locales/fa/audio.json b/web/public/locales/fa/audio.json
index 965460f7f..b3e547006 100644
--- a/web/public/locales/fa/audio.json
+++ b/web/public/locales/fa/audio.json
@@ -23,5 +23,481 @@
"bus": "اتوبوس",
"motorcycle": "موتور سیکلت",
"train": "قطار",
- "bicycle": "دوچرخه"
+ "bicycle": "دوچرخه",
+ "child_singing": "آواز خواندن کودک",
+ "snort": "خرناس",
+ "cough": "سرفه",
+ "throat_clearing": "صاف کردن گلو",
+ "sneeze": "عطسه",
+ "sniff": "بو کشیدن",
+ "run": "دویدن",
+ "synthetic_singing": "آواز مصنوعی",
+ "rapping": "رپخوانی",
+ "humming": "هومخوانی",
+ "sheep": "گوسفند",
+ "groan": "ناله",
+ "grunt": "غرغر",
+ "whistling": "سوت زدن",
+ "breathing": "تنفس",
+ "wheeze": "خِسخِس",
+ "snoring": "خروپف",
+ "gasp": "به نفسنفس افتادن",
+ "pant": "نفسنفسزدن",
+ "shuffle": "پخش تصادفی",
+ "footsteps": "صدای قدمها",
+ "chewing": "جویدن",
+ "biting": "گاز گرفتن",
+ "camera": "دوربین",
+ "gargling": "غرغره کردنغرغره کردن",
+ "stomach_rumble": "قاروقور شکم",
+ "burping": "آروغ زدن",
+ "skateboard": "اسکیتبورد",
+ "yip": "ییپ",
+ "howl": "زوزه",
+ "growling": "درحال غرغر",
+ "meow": "میو",
+ "caterwaul": "جیغوداد",
+ "livestock": "دام",
+ "clip_clop": "تقتق",
+ "cattle": "گوساله",
+ "cowbell": "زنگولهٔ گاو",
+ "mouse": "موش",
+ "oink": "خِرخِر",
+ "keyboard": "صفحهکلید",
+ "goat": "بز",
+ "sink": "سینک",
+ "cluck": "قُدقُد",
+ "turkey": "بوقلمون",
+ "quack": "قاقا",
+ "scissors": "قیچی",
+ "honk": "بوق",
+ "hair_dryer": "سشوار",
+ "roar": "غرش",
+ "vehicle": "وسیلهٔ نقلیه",
+ "chirp": "جیکجیک",
+ "squawk": "جیغ زدن",
+ "coo": "قوقو",
+ "crow": "کلاغ",
+ "owl": "جغد",
+ "dogs": "سگها",
+ "patter": "شرشر",
+ "mosquito": "پشه",
+ "buzz": "وزوز",
+ "frog": "قورباغه",
+ "snake": "مار",
+ "rattle": "جغجغه کردن",
+ "music": "موسیقی",
+ "musical_instrument": "ساز موسیقی",
+ "guitar": "گیتار",
+ "electric_guitar": "گیتار برقی",
+ "acoustic_guitar": "گیتار آکوستیک",
+ "steel_guitar": "گیتار استیل",
+ "banjo": "بانجو",
+ "sitar": "سیتار",
+ "hiccup": "سکسکه",
+ "fart": "باد معده",
+ "finger_snapping": "بشکن زدن",
+ "clapping": "دست زدن",
+ "heartbeat": "ضربان قلب",
+ "heart_murmur": "سوفل قلبی",
+ "applause": "تشویق",
+ "chatter": "وراجی",
+ "crowd": "جمعیت",
+ "children_playing": "بازی کردن کودکان",
+ "animal": "حیوان",
+ "pets": "حیوانات خانگی",
+ "bark": "پارس",
+ "bow_wow": "هاپهاپ",
+ "whimper_dog": "نالیدن سگ",
+ "purr": "خرخر",
+ "hiss": "هیس",
+ "neigh": "شیهه",
+ "door": "در",
+ "moo": "ماغ",
+ "pig": "خوک",
+ "bleat": "بعبع",
+ "fowl": "ماکیان",
+ "cock_a_doodle_doo": "قدقدیقدقد",
+ "blender": "مخلوطکن",
+ "chicken": "مرغ",
+ "gobble": "قورت دادن",
+ "clock": "ساعت",
+ "duck": "اردک",
+ "goose": "غاز",
+ "wild_animals": "حیوانات وحشی",
+ "toothbrush": "مسواک",
+ "roaring_cats": "غرش گربهها",
+ "pigeon": "کبوتر",
+ "hoot": "هوهو",
+ "flapping_wings": "بالبال زدن",
+ "rats": "موشها",
+ "insect": "حشره",
+ "cricket": "جیرجیرک",
+ "fly": "مگس",
+ "croak": "قارقار",
+ "whale_vocalization": "آواز نهنگ",
+ "plucked_string_instrument": "ساز زهی زخمهای",
+ "bass_guitar": "گیتار باس",
+ "tapping": "ضربهزدن",
+ "strum": "زخمهزدن",
+ "mandolin": "ماندولین",
+ "zither": "زیتر",
+ "ukulele": "یوکللی",
+ "piano": "پیانو",
+ "electric_piano": "پیانوی الکتریکی",
+ "organ": "ارگ",
+ "electronic_organ": "ارگ الکترونیکی",
+ "hammond_organ": "ارگ هموند",
+ "synthesizer": "سینتیسایزر",
+ "sampler": "سمپلر",
+ "harpsichord": "هارپسیکورد",
+ "percussion": "سازهای کوبهای",
+ "drum_kit": "ست درام",
+ "drum_machine": "درام ماشین",
+ "drum": "درام",
+ "snare_drum": "درام اسنیر",
+ "rimshot": "ریمشات",
+ "drum_roll": "درام رول",
+ "bass_drum": "درام باس",
+ "timpani": "تیمپانی",
+ "tabla": "طبلا",
+ "cymbal": "سنج",
+ "hi_hat": "هایهت",
+ "wood_block": "بلوک چوبی",
+ "tambourine": "تامبورین",
+ "maraca": "ماراکا",
+ "gong": "گونگ",
+ "tubular_bells": "ناقوسهای لولهای",
+ "mallet_percussion": "سازهای کوبهای مالت",
+ "marimba": "ماریمبا",
+ "glockenspiel": "گلوکناشپیل",
+ "vibraphone": "ویبرافون",
+ "steelpan": "استیلپن",
+ "orchestra": "ارکستر",
+ "brass_instrument": "ساز بادی برنجی",
+ "french_horn": "هورن فرانسوی",
+ "trumpet": "ترومپت",
+ "trombone": "ترومبون",
+ "bowed_string_instrument": "ساز زهی آرشهای",
+ "string_section": "بخش سازهای زهی",
+ "violin": "ویولن",
+ "pizzicato": "پیتزیکاتو",
+ "cello": "ویولنسل",
+ "double_bass": "کنترباس",
+ "wind_instrument": "ساز بادی",
+ "flute": "فلوت",
+ "saxophone": "ساکسوفون",
+ "clarinet": "کلارینت",
+ "harp": "چنگ",
+ "bell": "ناقوس",
+ "church_bell": "ناقوس کلیسا",
+ "jingle_bell": "زنگوله",
+ "bicycle_bell": "زنگ دوچرخه",
+ "tuning_fork": "دیاپازون",
+ "chime": "زنگ",
+ "wind_chime": "زنگ باد",
+ "harmonica": "سازدهنی",
+ "accordion": "آکاردئون",
+ "bagpipes": "نیانبان",
+ "didgeridoo": "دیجریدو",
+ "theremin": "ترمین",
+ "singing_bowl": "کاسهٔ آوازخوان",
+ "scratching": "خراشیدن",
+ "pop_music": "موسیقی پاپ",
+ "hip_hop_music": "موسیقی هیپهاپ",
+ "beatboxing": "بیتباکس",
+ "rock_music": "موسیقی راک",
+ "heavy_metal": "هوی متال",
+ "punk_rock": "پانک راک",
+ "grunge": "گرانج",
+ "progressive_rock": "راک پراگرسیو",
+ "rock_and_roll": "راک اند رول",
+ "psychedelic_rock": "راک روانگردان",
+ "rhythm_and_blues": "ریتم اند بلوز",
+ "soul_music": "موسیقی سول",
+ "reggae": "رگی",
+ "country": "کانتری",
+ "swing_music": "موسیقی سوئینگ",
+ "bluegrass": "بلوگرس",
+ "funk": "فانک",
+ "folk_music": "موسیقی فولک",
+ "jazz": "جاز",
+ "disco": "دیسکو",
+ "classical_music": "موسیقی کلاسیک",
+ "opera": "اپرا",
+ "electronic_music": "موسیقی الکترونیک",
+ "house_music": "موسیقی هاوس",
+ "techno": "تکنو",
+ "dubstep": "داباستپ",
+ "drum_and_bass": "درام اند بیس",
+ "electronica": "الکترونیکا",
+ "electronic_dance_music": "موسیقی رقص الکترونیک",
+ "ambient_music": "موسیقی امبینت",
+ "trance_music": "موسیقی ترنس",
+ "music_of_latin_america": "موسیقی آمریکای لاتین",
+ "salsa_music": "موسیقی سالسا",
+ "flamenco": "فلامنکو",
+ "blues": "بلوز",
+ "music_for_children": "موسیقی برای کودکان",
+ "new-age_music": "موسیقی نیو ایج",
+ "vocal_music": "موسیقی آوازی",
+ "a_capella": "آکاپلا",
+ "music_of_africa": "موسیقی آفریقا",
+ "afrobeat": "آفروبیت",
+ "christian_music": "موسیقی مسیحی",
+ "gospel_music": "موسیقی گاسپل",
+ "music_of_asia": "موسیقی آسیا",
+ "carnatic_music": "موسیقی کارناتیک",
+ "music_of_bollywood": "موسیقی بالیوود",
+ "ska": "اسکا",
+ "traditional_music": "موسیقی سنتی",
+ "independent_music": "موسیقی مستقل",
+ "song": "آهنگ",
+ "background_music": "موسیقی پسزمینه",
+ "theme_music": "موسیقی تم",
+ "soundtrack_music": "موسیقی متن",
+ "lullaby": "لالایی",
+ "video_game_music": "موسیقی بازیهای ویدیویی",
+ "christmas_music": "موسیقی کریسمس",
+ "dance_music": "موسیقی رقص",
+ "wedding_music": "موسیقی عروسی",
+ "happy_music": "موسیقی شاد",
+ "sad_music": "موسیقی غمگین",
+ "tender_music": "موسیقی لطیف",
+ "angry_music": "موسیقی خشمگین",
+ "exciting_music": "موسیقی هیجانانگیز",
+ "scary_music": "موسیقی ترسناک",
+ "wind": "باد",
+ "rustling_leaves": "خشخش برگها",
+ "wind_noise": "صدای باد",
+ "thunderstorm": "طوفان تندری",
+ "thunder": "رعد",
+ "water": "آب",
+ "rain": "باران",
+ "raindrop": "قطرهٔ باران",
+ "rain_on_surface": "باران روی سطح",
+ "waterfall": "آبشار",
+ "ocean": "اقیانوس",
+ "waves": "امواج",
+ "steam": "بخار",
+ "gurgling": "قلقل",
+ "motorboat": "قایق موتوری",
+ "ship": "کشتی",
+ "motor_vehicle": "وسیلهٔ نقلیهٔ موتوری",
+ "toot": "توت",
+ "car_alarm": "دزدگیر خودرو",
+ "truck": "کامیون",
+ "air_brake": "ترمز بادی",
+ "air_horn": "بوق بادی",
+ "reversing_beeps": "بوق دندهعقب",
+ "ice_cream_truck": "کامیون بستنیفروشی",
+ "traffic_noise": "صدای ترافیک",
+ "rail_transport": "حملونقل ریلی",
+ "train_whistle": "سوت قطار",
+ "train_horn": "بوق قطار",
+ "jet_engine": "موتور جت",
+ "propeller": "ملخ",
+ "helicopter": "بالگرد",
+ "fixed-wing_aircraft": "هواپیمای بالثابت",
+ "medium_engine": "موتور متوسط",
+ "heavy_engine": "موتور سنگین",
+ "engine_knocking": "تقتق موتور",
+ "engine_starting": "روشن شدن موتور",
+ "idling": "درجا کار کردن",
+ "slam": "محکم کوبیدن",
+ "knock": "در زدن",
+ "tap": "ضربهٔ آرام",
+ "squeak": "جیرجیر",
+ "cupboard_open_or_close": "باز یا بسته شدن کمد",
+ "microwave_oven": "مایکروفر",
+ "water_tap": "شیر آب",
+ "bathtub": "وان حمام",
+ "toilet_flush": "سیفون توالت",
+ "keys_jangling": "جرینگجرینگ کلیدها",
+ "coin": "سکه",
+ "electric_shaver": "ریشتراش برقی",
+ "shuffling_cards": "بر زدنِ کارتها",
+ "telephone_bell_ringing": "زنگ خوردن تلفن",
+ "ringtone": "زنگ تماس",
+ "telephone_dialing": "شمارهگیری تلفن",
+ "dial_tone": "بوق آزاد",
+ "busy_signal": "بوق اشغال",
+ "alarm_clock": "ساعت زنگدار",
+ "fire_alarm": "هشدار آتشسوزی",
+ "foghorn": "بوق مه",
+ "whistle": "سوت",
+ "steam_whistle": "سوت بخار",
+ "mechanisms": "سازوکارها",
+ "pulleys": "قرقرهها",
+ "sewing_machine": "چرخ خیاطی",
+ "mechanical_fan": "پنکهٔ مکانیکی",
+ "air_conditioning": "تهویهٔ مطبوع",
+ "cash_register": "صندوق فروش",
+ "jackhammer": "چکش بادی",
+ "sawing": "ارهکردن",
+ "drill": "دریل",
+ "sanding": "سنبادهکاری",
+ "power_tool": "ابزار برقی",
+ "filing": "سوهانکاری",
+ "artillery_fire": "آتش توپخانه",
+ "cap_gun": "تفنگ ترقهای",
+ "fireworks": "آتشبازی",
+ "firecracker": "ترقه",
+ "burst": "ترکیدن",
+ "crack": "ترک",
+ "glass": "شیشه",
+ "chink": "جرینگ",
+ "shatter": "خُرد شدن",
+ "silence": "سکوت",
+ "television": "تلویزیون",
+ "radio": "رادیو",
+ "field_recording": "ضبط میدانی",
+ "scream": "جیغ",
+ "chird": "جیرجیر",
+ "change_ringing": "زنگ خوردن پول خرد",
+ "shofar": "شوفار",
+ "liquid": "مایع",
+ "splash": "پاشیدن",
+ "gush": "فوران",
+ "fill": "پر کردن",
+ "spray": "اسپری",
+ "pump": "پمپ",
+ "stir": "هم زدن",
+ "thunk": "صدای افتادن",
+ "electronic_tuner": "تیونر الکترونیکی",
+ "effects_unit": "واحد افکتها",
+ "chorus_effect": "افکت کُر",
+ "basketball_bounce": "پرش توپ بسکتبال",
+ "bouncing": "پرش",
+ "whip": "شلاق",
+ "flap": "بالبال زدن",
+ "scratch": "خراشیدن",
+ "scrape": "ساییدن",
+ "beep": "بیپ",
+ "ping": "پینگ",
+ "ding": "دینگ",
+ "clang": "تق",
+ "squeal": "جیغ",
+ "clicking": "کلیککردن",
+ "clickety_clack": "تَقتَق",
+ "rumble": "غرّش",
+ "plop": "پَت",
+ "chirp_tone": "صدای جیک",
+ "pulse": "پالس",
+ "inside": "داخل",
+ "outside": "بیرون",
+ "reverberation": "پژواک",
+ "cacophony": "همهمه",
+ "throbbing": "تپش",
+ "vibration": "لرزش",
+ "hands": "دستها",
+ "cheering": "تشویق کردن",
+ "caw": "قارقار",
+ "jingle": "جینگل",
+ "middle_eastern_music": "موسیقی خاورمیانهای",
+ "stream": "جریان",
+ "fire": "آتش",
+ "crackle": "ترقتروق",
+ "sailboat": "قایق بادبانی",
+ "rowboat": "قایق پارویی",
+ "power_windows": "شیشهبالابر برقی",
+ "skidding": "سرخوردن",
+ "tire_squeal": "جیغ لاستیک",
+ "car_passing_by": "عبور خودرو",
+ "race_car": "خودروی مسابقه",
+ "emergency_vehicle": "خودروی امدادی",
+ "police_car": "خودروی پلیس",
+ "vacuum_cleaner": "جاروبرقی",
+ "zipper": "زیپ",
+ "typing": "تایپ کردن",
+ "typewriter": "ماشین تحریر",
+ "computer_keyboard": "صفحهکلید رایانه",
+ "writing": "نوشتن",
+ "alarm": "هشدار",
+ "telephone": "تلفن",
+ "siren": "آژیر",
+ "civil_defense_siren": "آژیر دفاع مدنی",
+ "buzzer": "بیزر",
+ "smoke_detector": "آشکارساز دود",
+ "ratchet": "جغجغه",
+ "tick-tock": "تیکتاک",
+ "gears": "چرخدندهها",
+ "printer": "چاپگر",
+ "single-lens_reflex_camera": "دوربین تکلنزی بازتابی",
+ "tools": "ابزارها",
+ "hammer": "چکش",
+ "explosion": "انفجار",
+ "gunshot": "شلیک",
+ "machine_gun": "مسلسل",
+ "fusillade": "رگبار",
+ "eruption": "فوران",
+ "boom": "بوم",
+ "wood": "چوب",
+ "sound_effect": "جلوهٔ صوتی",
+ "splinter": "تراشه",
+ "environmental_noise": "نویز محیطی",
+ "static": "ساکن",
+ "white_noise": "نویز سفید",
+ "squish": "فشردن",
+ "drip": "چکه",
+ "pour": "ریختن",
+ "trickle": "چکیدن",
+ "boiling": "جوشیدن",
+ "thump": "کوبیدن",
+ "bang": "بنگ",
+ "slap": "سیلی",
+ "whack": "ضربه",
+ "smash": "خرد کردن",
+ "roll": "غلتیدن",
+ "crushing": "خرد کردن",
+ "crumpling": "چروک شدن",
+ "tearing": "پاره کردن",
+ "creak": "جیرجیر",
+ "clatter": "قارقار",
+ "sizzle": "جوشیدن",
+ "hum": "زمزمه",
+ "zing": "زنگ",
+ "boing": "بویینگ",
+ "crunch": "خرد کردن",
+ "noise": "نویز",
+ "mains_hum": "زمزمهٔ برق",
+ "distortion": "اعوجاج",
+ "sidetone": "صدای گوشی",
+ "ambulance": "آمبولانس",
+ "fire_engine": "خودروی آتشنشانی",
+ "railroad_car": "واگن راهآهن",
+ "train_wheels_squealing": "جیرجیر چرخهای قطار",
+ "subway": "مترو",
+ "aircraft": "هوانورد",
+ "aircraft_engine": "موتور هواپیما",
+ "engine": "موتور",
+ "light_engine": "موتور سبک",
+ "dental_drill's_drill": "متهٔ دندانپزشکی",
+ "lawn_mower": "چمنزن",
+ "chainsaw": "ارهٔ زنجیری",
+ "accelerating": "شتابگیری",
+ "doorbell": "زنگ در",
+ "ding-dong": "دینگدونگ",
+ "sliding_door": "در کشویی",
+ "drawer_open_or_close": "باز یا بسته شدن کشو",
+ "dishes": "ظروف",
+ "cutlery": "قاشق و چنگال",
+ "chopping": "خرد کردن",
+ "frying": "سرخ کردن",
+ "electric_toothbrush": "مسواک برقی",
+ "tick": "تیک",
+ "chop": "خرد کردن",
+ "pink_noise": "نویز صورتی",
+ "sodeling": "سودلینگ",
+ "slosh": "پاشیدن",
+ "sonar": "سونار",
+ "arrow": "پیکان",
+ "whoosh": "ووش",
+ "breaking": "شکستن",
+ "rub": "مالیدن",
+ "rustle": "خشخش",
+ "whir": "وزوز",
+ "sine_wave": "موج سینوسی",
+ "harmonic": "هارمونیک",
+ "echo": "پژواک"
}
diff --git a/web/public/locales/fa/common.json b/web/public/locales/fa/common.json
index e3b44ba55..3b9e02617 100644
--- a/web/public/locales/fa/common.json
+++ b/web/public/locales/fa/common.json
@@ -2,6 +2,296 @@
"time": {
"untilForTime": "تا {{time}}",
"untilForRestart": "تا زمانی که فریگیت دوباره شروع به کار کند.",
- "untilRestart": "تا زمان ریاستارت"
+ "untilRestart": "تا زمان ریاستارت",
+ "ago": "{{timeAgo}} قبل",
+ "justNow": "هم اکنون",
+ "today": "امروز",
+ "yesterday": "دیروز",
+ "last7": "۷ روز گذشته",
+ "last14": "۱۴ روز گذشته",
+ "last30": "۳۰ روز گذشته",
+ "thisWeek": "این هفته",
+ "lastWeek": "هفتهٔ گذشته",
+ "thisMonth": "این ماه",
+ "lastMonth": "ماه گذشته",
+ "5minutes": "۵ دقیقه",
+ "10minutes": "۱۰ دقیقه",
+ "day_one": "{{time}} روز",
+ "day_other": "{{time}} روز",
+ "h": "{{time}}س",
+ "hour_one": "{{time}} ساعت",
+ "hour_other": "{{time}} ساعت",
+ "m": "{{time}} دقیقه",
+ "minute_one": "{{time}} دقیقه",
+ "minute_other": "{{time}} دقیقه",
+ "s": "{{time}}ث",
+ "30minutes": "۳۰ دقیقه",
+ "1hour": "۱ ساعت",
+ "12hours": "۱۲ ساعت",
+ "24hours": "۲۴ ساعت",
+ "pm": "ب.ظ.",
+ "am": "ق.ظ.",
+ "yr": "{{time}} سال",
+ "year_one": "{{time}} سال",
+ "year_other": "{{time}} سال",
+ "mo": "{{time}} ماه",
+ "month_one": "{{time}} ماه",
+ "month_other": "{{time}} ماه",
+ "d": "{{time}} روز",
+ "second_one": "{{time}} ثانیه",
+ "second_other": "{{time}} ثانیه",
+ "formattedTimestamp": {
+ "12hour": "MMM d، h:mm:ss aaa",
+ "24hour": "MMM d، HH:mm:ss"
+ },
+ "formattedTimestamp2": {
+ "12hour": "MM/dd h:mm:ssa",
+ "24hour": "d MMM HH:mm:ssd MMM، HH:mm:ss"
+ },
+ "formattedTimestampHourMinute": {
+ "12hour": "h:mm aaa",
+ "24hour": "HH:mm"
+ },
+ "formattedTimestampHourMinuteSecond": {
+ "12hour": "h:mm:ss aaa",
+ "24hour": "HH:mm:ss"
+ },
+ "formattedTimestampMonthDayHourMinute": {
+ "12hour": "d MMM, h:mm aaa",
+ "24hour": "d MMM, HH:mm"
+ },
+ "formattedTimestampMonthDayYear": {
+ "12hour": "d MMM, yyyy",
+ "24hour": "d MMM, yyyy"
+ },
+ "formattedTimestampMonthDayYearHourMinute": {
+ "12hour": "d MMM yyyy, h:mm aaa",
+ "24hour": "yyyy MMM d, HH:mm"
+ },
+ "formattedTimestampMonthDay": "d MMM",
+ "formattedTimestampFilename": {
+ "12hour": "MM-dd-yy-h-mm-ss-a",
+ "24hour": "MM-dd-yy-HH-mm-ss"
+ },
+ "inProgress": "در حال انجام",
+ "invalidStartTime": "زمان شروع نامعتبر است",
+ "invalidEndTime": "زمان پایان نامعتبر است"
+ },
+ "unit": {
+ "length": {
+ "feet": "فوت",
+ "meters": "متر"
+ },
+ "data": {
+ "kbps": "kB/s",
+ "gbps": "GB/s",
+ "mbph": "مگابایت/ساعت",
+ "gbph": "گیگابایت/ساعت",
+ "mbps": "مگابایت/ثانیه",
+ "kbph": "کیلوبایت/ساعت"
+ },
+ "speed": {
+ "mph": "مایل/ساعت",
+ "kph": "کیلومتر/ساعت"
+ }
+ },
+ "label": {
+ "hide": "پنهان کردن {{item}}",
+ "ID": "شناسه",
+ "all": "همه",
+ "back": "برگشت به قبل",
+ "show": "نمایش {{item}}",
+ "none": "هیچکدام"
+ },
+ "list": {
+ "many": "{{items}}، و {{last}}",
+ "two": "{{0}} و {{1}}",
+ "separatorWithSpace": ", · "
+ },
+ "field": {
+ "internalID": "شناسهٔ داخلیای که Frigate در پیکربندی و پایگاهداده استفاده میکند",
+ "optional": "اختیاری"
+ },
+ "button": {
+ "apply": "اعمال",
+ "done": "انجام شد",
+ "enable": "فعال کردن",
+ "disabled": "غیرفعال",
+ "cancel": "لغو",
+ "close": "بستن",
+ "back": "بازگشت",
+ "fullscreen": "تمامصفحه",
+ "exitFullscreen": "خروج از حالت تمامصفحه",
+ "twoWayTalk": "مکالمهٔ دوطرفه",
+ "cameraAudio": "صدای دوربین",
+ "off": "خاموش",
+ "delete": "حذف",
+ "download": "دانلود",
+ "unsuspended": "برداشتن تعلیق",
+ "unselect": "لغو انتخاب",
+ "export": "خروجی گرفتن",
+ "next": "بعدی",
+ "reset": "بازنشانی",
+ "enabled": "فعال",
+ "disable": "غیرفعال کردن",
+ "save": "ذخیره",
+ "saving": "در حال ذخیره…",
+ "copy": "کپی",
+ "history": "تاریخچه",
+ "pictureInPicture": "تصویر در تصویر",
+ "copyCoordinates": "کپی مختصات",
+ "yes": "بله",
+ "no": "خیر",
+ "info": "اطلاعات",
+ "play": "پخش",
+ "deleteNow": "حذف فوری",
+ "continue": "ادامه",
+ "on": "روشن",
+ "edit": "ویرایش",
+ "suspended": "تعلیقشده"
+ },
+ "menu": {
+ "systemMetrics": "شاخصهای سیستم",
+ "configuration": "پیکربندی",
+ "settings": "تنظیمات",
+ "language": {
+ "en": "انگلیسی (English)",
+ "hi": "هندی (Hindi)",
+ "fr": "فرانسوی (French)",
+ "ptBR": "پرتغالیِ برزیل (Brazilian Portuguese)",
+ "ru": "روسی (Russian)",
+ "es": "اسپانیایی (زبان اسپانیایی)",
+ "zhCN": "چینی سادهشده (چینی ساده)",
+ "ar": "عربی (زبان عربی)",
+ "pt": "پرتغالی (زبان پرتغالی)",
+ "de": "آلمانی (زبان آلمانی)",
+ "ja": "ژاپنی (زبان ژاپنی)",
+ "tr": "ترکی (زبان ترکی)",
+ "it": "ایتالیایی (زبان ایتالیایی)",
+ "nl": "هلندی (زبان هلندی)",
+ "sv": "سوئدی (زبان سوئدی)",
+ "cs": "چکی (زبان چکی)",
+ "nb": "بوکمل نروژیایی (بوکمل نروژی)",
+ "ko": "کرهای (زبان کرهای)",
+ "vi": "ویتنامی (زبان ویتنامی)",
+ "fa": "فارسی (زبان فارسی)",
+ "pl": "لهستانی (زبان لهستانی)",
+ "uk": "اوکراینی (زبان اوکراینی)",
+ "he": "عبری (زبان عبری)",
+ "el": "یونانی (زبان یونانی)",
+ "ro": "رومانیایی (زبان رومانیایی)",
+ "hu": "مجاری (زبان مجاری)",
+ "fi": "فنلاندی (زبان فنلاندی)",
+ "da": "دانمارکی (زبان دانمارکی)",
+ "sk": "اسلواکی (زبان اسلواکی)",
+ "yue": "کانتونی (زبان کانتونی)",
+ "th": "تایلندی (زبان تایلندی)",
+ "ca": "کاتالانی (زبان کاتالانی)",
+ "sr": "صربی (زبان صربی)",
+ "sl": "اسلوونیایی (زبان اسلوونیایی)",
+ "lt": "لیتوانیایی (زبان لیتوانیایی)",
+ "bg": "بلغاری (زبان بلغاری)",
+ "gl": "گالیسیایی (زبان گالیسیایی)",
+ "id": "اندونزیایی (زبان اندونزیایی)",
+ "ur": "اردو (زبان اردو)",
+ "withSystem": {
+ "label": "برای زبان از تنظیمات سامانه استفاده کنید"
+ }
+ },
+ "system": "سامانه",
+ "systemLogs": "لاگهای سامانه",
+ "configurationEditor": "ویرایشگر پیکربندی",
+ "languages": "زبانها",
+ "appearance": "ظاهر",
+ "darkMode": {
+ "label": "حالت تاریک",
+ "light": "روشنایی",
+ "dark": "تاریک",
+ "withSystem": {
+ "label": "برای حالت روشن یا تاریک از تنظیمات سامانه استفاده کنید"
+ }
+ },
+ "withSystem": "سامانه",
+ "theme": {
+ "label": "پوسته",
+ "blue": "آبی",
+ "green": "سبز",
+ "nord": "نورد",
+ "red": "قرمز",
+ "highcontrast": "کنتراست بالا",
+ "default": "پیشفرض"
+ },
+ "help": "راهنما",
+ "documentation": {
+ "title": "مستندات",
+ "label": "مستندات Frigate"
+ },
+ "restart": "راهاندازی مجدد Frigate",
+ "live": {
+ "title": "زنده",
+ "allCameras": "همهٔ دوربینها",
+ "cameras": {
+ "title": "دوربینها",
+ "count_one": "{{count}} دوربین",
+ "count_other": "{{count}} دوربین"
+ }
+ },
+ "review": "بازبینی",
+ "explore": "کاوش",
+ "export": "خروجی گرفتن",
+ "uiPlayground": "محیط آزمایشی UI",
+ "faceLibrary": "کتابخانهٔ چهره",
+ "classification": "طبقهبندی",
+ "user": {
+ "title": "کاربر",
+ "account": "حساب کاربری",
+ "current": "کاربر فعلی: {{user}}",
+ "anonymous": "ناشناس",
+ "logout": "خروج",
+ "setPassword": "تنظیم گذرواژه"
+ }
+ },
+ "toast": {
+ "copyUrlToClipboard": "نشانی اینترنتی در کلیپبورد کپی شد.",
+ "save": {
+ "title": "ذخیره",
+ "error": {
+ "title": "ذخیرهٔ تغییرات پیکربندی ناموفق بود: {{errorMessage}}",
+ "noMessage": "ذخیرهٔ تغییرات پیکربندی ناموفق بود"
+ }
+ }
+ },
+ "role": {
+ "title": "نقش",
+ "admin": "مدیر",
+ "viewer": "بیننده",
+ "desc": "مدیران به همهٔ ویژگیها در رابط کاربری Frigate دسترسی کامل دارند. بینندهها فقط میتوانند دوربینها، موارد بازبینی و ویدیوهای تاریخی را در رابط کاربری مشاهده کنند."
+ },
+ "pagination": {
+ "label": "صفحهبندی",
+ "previous": {
+ "title": "قبلی",
+ "label": "رفتن به صفحهٔ قبلی"
+ },
+ "next": {
+ "title": "بعدی",
+ "label": "رفتن به صفحهٔ بعدی"
+ },
+ "more": "صفحههای بیشتر"
+ },
+ "accessDenied": {
+ "documentTitle": "دسترسی ممنوع - Frigate",
+ "title": "دسترسی ممنوع",
+ "desc": "شما اجازهٔ مشاهدهٔ این صفحه را ندارید."
+ },
+ "notFound": {
+ "documentTitle": "یافت نشد - Frigate",
+ "title": "۴۰۴",
+ "desc": "صفحه پیدا نشد"
+ },
+ "selectItem": "انتخاب {{item}}",
+ "readTheDocumentation": "مستندات را بخوانید",
+ "information": {
+ "pixels": "{{area}}px"
}
}
diff --git a/web/public/locales/fa/components/auth.json b/web/public/locales/fa/components/auth.json
index b74e4b03f..3c4e021b2 100644
--- a/web/public/locales/fa/components/auth.json
+++ b/web/public/locales/fa/components/auth.json
@@ -2,6 +2,15 @@
"form": {
"user": "نام کاربری",
"password": "رمز عبور",
- "login": "ورود"
+ "login": "ورود",
+ "firstTimeLogin": "اولین باز است وارد می شود؟ اطلاعات هویتی در ثبت رخداد های فریگیت چاپ خواهد شد.",
+ "errors": {
+ "usernameRequired": "وارد کردن نام کاربری الزامی است",
+ "passwordRequired": "وارد کردن رمز عبور الزامی است",
+ "loginFailed": "ورود ناموفق بود",
+ "unknownError": "خطای ناشناخته. گزارشها را بررسی کنید.",
+ "webUnknownError": "خطای ناشناخته. گزارشهای کنسول را بررسی کنید.",
+ "rateLimit": "از حد مجاز درخواستها فراتر رفت. بعداً دوباره تلاش کنید."
+ }
}
}
diff --git a/web/public/locales/fa/components/camera.json b/web/public/locales/fa/components/camera.json
index b5567927b..35f7ec517 100644
--- a/web/public/locales/fa/components/camera.json
+++ b/web/public/locales/fa/components/camera.json
@@ -2,6 +2,85 @@
"group": {
"label": "گروههای دوربین",
"add": "افزودن گروه دوربین",
- "edit": "ویرایش گروه دوربین"
+ "edit": "ویرایش گروه دوربین",
+ "delete": {
+ "label": "حذف گروه دوربین ها",
+ "confirm": {
+ "title": "تأیید حذف",
+ "desc": "آیا مطمئن هستید که میخواهید گروه دوربین «{{name}}» را حذف کنید؟"
+ }
+ },
+ "name": {
+ "label": "نام",
+ "placeholder": "یک نام وارد کنید…",
+ "errorMessage": {
+ "mustLeastCharacters": "نام گروه دوربین باید حداقل ۲ کاراکتر باشد.",
+ "exists": "نام گروه دوربین از قبل وجود دارد.",
+ "nameMustNotPeriod": "نام گروه دوربین نباید شامل نقطه باشد.",
+ "invalid": "نام گروه دوربین نامعتبر است."
+ }
+ },
+ "cameras": {
+ "desc": "دوربینهای این گروه را انتخاب کنید.",
+ "label": "دوربینها"
+ },
+ "icon": "آیکون",
+ "success": "گروه دوربین ({{name}}) ذخیره شد.",
+ "camera": {
+ "setting": {
+ "streamMethod": {
+ "method": {
+ "noStreaming": {
+ "label": "بدون پخش",
+ "desc": "تصاویر دوربین فقط هر یک دقیقه یکبار بهروزرسانی میشوند و هیچ پخش زندهای انجام نخواهد شد."
+ },
+ "smartStreaming": {
+ "label": "پخش هوشمند (پیشنهادی)",
+ "desc": "پخش هوشمند زمانی که فعالیت قابل تشخیصی وجود ندارد برای صرفهجویی در پهنای باند و منابع، تصویر دوربین شما را هر یک دقیقه یکبار بهروزرسانی میکند. وقتی فعالیت تشخیص داده شود، تصویر بهطور یکپارچه به پخش زنده تغییر میکند."
+ },
+ "continuousStreaming": {
+ "label": "پخش پیوسته",
+ "desc": {
+ "title": "تصویر دوربین وقتی در داشبورد قابل مشاهده باشد همیشه پخش زنده خواهد بود، حتی اگر هیچ فعالیتی تشخیص داده نشود.",
+ "warning": "پخش پیوسته ممکن است باعث مصرف بالای پهنایباند و مشکلات عملکردی شود. با احتیاط استفاده کنید."
+ }
+ }
+ },
+ "label": "روش پخش",
+ "placeholder": "یک روش پخش را انتخاب کنید"
+ },
+ "label": "تنظیمات پخش دوربین",
+ "title": "تنظیمات پخش {{cameraName}}",
+ "audioIsAvailable": "صدا برای این پخش در دسترس است",
+ "audioIsUnavailable": "صدا برای این پخش در دسترس نیست",
+ "audio": {
+ "tips": {
+ "title": "برای این پخش، صدا باید از دوربین شما خروجی گرفته شود و در go2rtc پیکربندی شده باشد."
+ }
+ },
+ "stream": "جریان",
+ "placeholder": "یک جریان را برگزینید",
+ "compatibilityMode": {
+ "label": "حالت سازگاری",
+ "desc": "این گزینه را فقط زمانی فعال کنید که پخش زندهٔ دوربین شما دچار آثار رنگی (artifact) است و در سمت راست تصویر یک خط مورب دیده میشود."
+ },
+ "desc": "گزینههای پخش زنده را برای داشبورد این گروه دوربین تغییر دهید. این تنظیمات مخصوص دستگاه/مرورگر هستند. "
+ },
+ "birdseye": "نمای پرنده"
+ }
+ },
+ "debug": {
+ "options": {
+ "label": "تنظیمات",
+ "title": "گزینهها",
+ "showOptions": "نمایش گزینهها",
+ "hideOptions": "پنهان کردن گزینهها"
+ },
+ "boundingBox": "کادر محدوده",
+ "timestamp": "مهر زمانی",
+ "zones": "ناحیهها",
+ "mask": "ماسک",
+ "motion": "حرکت",
+ "regions": "مناطق"
}
}
diff --git a/web/public/locales/fa/components/dialog.json b/web/public/locales/fa/components/dialog.json
index 05f66ce60..99095fc9d 100644
--- a/web/public/locales/fa/components/dialog.json
+++ b/web/public/locales/fa/components/dialog.json
@@ -1,9 +1,122 @@
{
"restart": {
- "title": "آیا از ریاستارت فریگیت اطمینان دارید؟",
+ "title": "آیا برای راه اندازی مجدد Frigate مطمئن هستید؟",
"button": "ریاستارت",
"restarting": {
- "title": "فریگیت در حال ریاستارت شدن"
+ "title": "فریگیت در حال ریاستارت شدن",
+ "content": "صفحه تا {{countdown}} ثانیه دیگر مجددا بارگزاری خواهد شد.",
+ "button": "بارگزاری مجدد هم اکنون اجرا شود"
}
+ },
+ "explore": {
+ "plus": {
+ "submitToPlus": {
+ "label": "ارسال به Frigate+",
+ "desc": "اشیایی که در مکانهایی هستند که میخواهید از آنها اجتناب کنید، «مثبت کاذب» محسوب نمیشوند. ارسال آنها بهعنوان مثبت کاذب باعث میشود مدل دچار سردرگمی شود."
+ },
+ "review": {
+ "question": {
+ "label": "این برچسب را برای Frigate Plus تأیید کنید",
+ "ask_a": "آیا این شیء {{label}} است؟",
+ "ask_an": "آیا این شیء یک {{label}} است؟",
+ "ask_full": "آیا این شیء یک {{untranslatedLabel}} ({{translatedLabel}}) است؟"
+ },
+ "state": {
+ "submitted": "ارسال شد"
+ }
+ }
+ },
+ "video": {
+ "viewInHistory": "مشاهده در تاریخچه"
+ }
+ },
+ "export": {
+ "time": {
+ "fromTimeline": "انتخاب از خط زمانی",
+ "lastHour_one": "ساعت گذشته",
+ "lastHour_other": "آخرین {{count}} ساعت",
+ "custom": "سفارشی",
+ "start": {
+ "title": "زمان شروع",
+ "label": "زمان شروع را انتخاب کنید"
+ },
+ "end": {
+ "title": "زمان پایان",
+ "label": "زمان پایان را انتخاب کنید"
+ }
+ },
+ "toast": {
+ "error": {
+ "endTimeMustAfterStartTime": "زمان پایان باید بعد از زمان شروع باشد",
+ "noVaildTimeSelected": "بازهٔ زمانی معتبر انتخاب نشده است",
+ "failed": "شروع خروجیگیری ناموفق بود: {{error}}"
+ },
+ "success": "ساخت خروجی با موفقیت آغاز شد. فایل را در صفحه خروجیها مشاهده کنید.",
+ "view": "مشاهده"
+ },
+ "fromTimeline": {
+ "saveExport": "ذخیرهٔ خروجی",
+ "previewExport": "پیشنمایش خروجی"
+ },
+ "name": {
+ "placeholder": "برای خروجی نام بگذارید"
+ },
+ "select": "انتخاب",
+ "export": "خروجی",
+ "selectOrExport": "انتخاب یا خروجی"
+ },
+ "streaming": {
+ "label": "جریان",
+ "restreaming": {
+ "disabled": "بازپخش برای این دوربین فعال نیست.",
+ "desc": {
+ "title": "برای گزینههای بیشتر نمایش زنده و صدا برای این دوربین، go2rtc را تنظیم کنید."
+ }
+ },
+ "showStats": {
+ "label": "نمایش آمار جریان",
+ "desc": "این گزینه را فعال کنید تا آمار جریان بهصورت پوششی روی تصویر دوربین نمایش داده شود."
+ },
+ "debugView": "نمای اشکالزدایی"
+ },
+ "search": {
+ "saveSearch": {
+ "label": "ذخیره جستوجو",
+ "desc": "برای این جستوجوی ذخیرهشده یک نام وارد کنید.",
+ "placeholder": "برای جستجوی خود یک نام وارد کنید",
+ "success": "جستجو ({{searchName}}) ذخیره شد.",
+ "button": {
+ "save": {
+ "label": "ذخیرهٔ این جستجو"
+ }
+ },
+ "overwrite": "{{searchName}} موجود است. ذخیره سازی منجر به بازنویسی مقدار موجود خواهد شد."
+ }
+ },
+ "recording": {
+ "confirmDelete": {
+ "title": "تأیید حذف",
+ "desc": {
+ "selected": "آیا مطمئن هستید که میخواهید همهٔ ویدیوهای ضبطشدهٔ مرتبط با این مورد بازبینی را حذف کنید؟detect دوربین {{cameraName}} دریافت نشده است، گزارشهای خطا را بررسی کنید"
+ },
+ "cameraDisabled": "دوربین غیرفعال است",
+ "stats": {
+ "streamType": {
+ "title": "نوع جریان:",
+ "short": "نوع"
+ },
+ "bandwidth": {
+ "title": "پهنای باند:",
+ "short": "پهنای باند"
+ },
+ "latency": {
+ "title": "تأخیر:",
+ "value": "{{seconds}} ثانیهها",
+ "short": {
+ "title": "تأخیر",
+ "value": "{{seconds}} ثانیه"
+ }
+ },
+ "totalFrames": "مجموع فریمها:",
+ "droppedFrames": {
+ "title": "فریمهای از دسترفته:",
+ "short": {
+ "title": "از دسترفته",
+ "value": "{{droppedFrames}} فریم"
+ }
+ },
+ "decodedFrames": "فریمهای رمزگشاییشده:",
+ "droppedFrameRate": "نرخ فریمهای از دسترفته:"
+ },
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "فریم با موفقیت به Frigate+ ارسال شد"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "ارسال فریم به Frigate+ ناموفق بود"
+ }
+ }
}
diff --git a/web/public/locales/fa/objects.json b/web/public/locales/fa/objects.json
index 278086db2..c2ce4e4cf 100644
--- a/web/public/locales/fa/objects.json
+++ b/web/public/locales/fa/objects.json
@@ -16,5 +16,105 @@
"bird": "پرنده",
"cat": "گربه",
"dog": "سگ",
- "horse": "اسب"
+ "horse": "اسب",
+ "shoe": "کفش",
+ "eye_glasses": "عینک",
+ "handbag": "کیف دستی",
+ "tie": "کراوات",
+ "suitcase": "چمدان",
+ "frisbee": "فریزبی",
+ "sheep": "گوسفند",
+ "cow": "گاو",
+ "elephant": "فیل",
+ "bear": "خرس",
+ "zebra": "گورخر",
+ "giraffe": "زرافه",
+ "hat": "کلاه",
+ "umbrella": "چتر",
+ "skis": "اسکی",
+ "snowboard": "اسنوبورد",
+ "sports_ball": "توپ ورزشی",
+ "kite": "بادبادک",
+ "baseball_bat": "برای استفاده از چند فیلتر، آنها را یکی پس از دیگری با یک فاصله از هم اضافه کنید.چوب بیسبال",
+ "baseball_glove": "دستکش بیسبال",
+ "skateboard": "اسکیتبورد",
+ "hot_dog": "هاتداگ",
+ "cake": "کیک",
+ "couch": "مبل",
+ "bed": "تخت",
+ "dining_table": "میز ناهارخوری",
+ "toilet": "توالت",
+ "tv": "تلویزیون",
+ "mouse": "موش",
+ "keyboard": "صفحهکلید",
+ "goat": "بز",
+ "oven": "فر",
+ "sink": "سینک",
+ "refrigerator": "یخچال",
+ "book": "کتاب",
+ "vase": "گلدان",
+ "scissors": "قیچی",
+ "hair_dryer": "سشوار",
+ "hair_brush": "برس مو",
+ "vehicle": "وسیلهٔ نقلیه",
+ "deer": "گوزن",
+ "fox": "روباه",
+ "raccoon": "راکون",
+ "on_demand": "در صورت نیاز",
+ "license_plate": "پلاک خودرو",
+ "package": "بسته",
+ "amazon": "آمازون",
+ "usps": "USPS",
+ "fedex": "FedEx",
+ "dhl": "DHL",
+ "purolator": "پرولاتور",
+ "postnord": "PostNord",
+ "backpack": "کولهپشتی",
+ "tennis_racket": "راکت تنیس",
+ "bottle": "بطری",
+ "plate": "پلاک",
+ "wine_glass": "جام شراب",
+ "cup": "فنجان",
+ "fork": "چنگال",
+ "knife": "چاقو",
+ "spoon": "قاشق",
+ "bowl": "کاسه",
+ "banana": "موز",
+ "apple": "سیب",
+ "animal": "حیوان",
+ "sandwich": "ساندویچ",
+ "orange": "پرتقال",
+ "broccoli": "بروکلی",
+ "bark": "پارس",
+ "carrot": "هویج",
+ "pizza": "پیتزا",
+ "donut": "دونات",
+ "chair": "صندلی",
+ "potted_plant": "گیاه گلدانی",
+ "mirror": "آینه",
+ "window": "پنجره",
+ "desk": "میز",
+ "door": "در",
+ "laptop": "لپتاپ",
+ "remote": "ریموت",
+ "cell_phone": "گوشی موبایل",
+ "microwave": "مایکروویو",
+ "toaster": "توستر",
+ "blender": "مخلوطکن",
+ "clock": "ساعت",
+ "teddy_bear": "خرس عروسکی",
+ "toothbrush": "مسواک",
+ "squirrel": "سنجاب",
+ "rabbit": "خرگوش",
+ "robot_lawnmower": "چمنزن رباتی",
+ "waste_bin": "سطل زباله",
+ "face": "چهره",
+ "bbq_grill": "گریل کباب",
+ "ups": "یوپیاس",
+ "an_post": "آن پُست",
+ "postnl": "پستاِناِل",
+ "nzpost": "اِنزد پُست",
+ "gls": "جیاِلاِس",
+ "dpd": "دیپیدی",
+ "surfboard": "تخته موج سواری"
}
diff --git a/web/public/locales/fa/views/classificationModel.json b/web/public/locales/fa/views/classificationModel.json
new file mode 100644
index 000000000..b61d55e4d
--- /dev/null
+++ b/web/public/locales/fa/views/classificationModel.json
@@ -0,0 +1,187 @@
+{
+ "button": {
+ "deleteClassificationAttempts": "حذف تصاویر طبقه بندی",
+ "renameCategory": "تغییر نام کلاس",
+ "deleteCategory": "حذف کردن کلاس",
+ "deleteImages": "حذف کردن عکس ها",
+ "trainModel": "مدل آموزش",
+ "addClassification": "افزودن دستهبندی",
+ "deleteModels": "حذف مدلها",
+ "editModel": "ویرایش مدل"
+ },
+ "toast": {
+ "success": {
+ "deletedCategory": "کلاس حذف شده",
+ "deletedImage": "عکس های حذف شده",
+ "categorizedImage": "تصویر طبقه بندی شده",
+ "trainedModel": "مدل آموزش دیده شده.",
+ "trainingModel": "آموزش دادن مدل با موفقیت شروع شد.",
+ "deletedModel_one": "{{count}} مدل با موفقیت حذف شد",
+ "deletedModel_other": "{{count}} مدل با موفقیت حذف شدند",
+ "updatedModel": "پیکربندی مدل با موفقیت بهروزرسانی شد",
+ "renamedCategory": "نام کلاس با موفقیت به {{name}} تغییر یافت"
+ },
+ "error": {
+ "deleteImageFailed": "حذف نشد: {{errorMessage}}",
+ "deleteCategoryFailed": "کلاس حذف نشد: {{errorMessage}}",
+ "deleteModelFailed": "حذف مدل ناموفق بود: {{errorMessage}}",
+ "categorizeFailed": "دستهبندی تصویر ناموفق بود: {{errorMessage}}",
+ "trainingFailed": "آموزش مدل ناموفق بود. برای جزئیات، گزارشهای Frigate را بررسی کنید.",
+ "trainingFailedToStart": "شروع آموزش مدل ناموفق بود: {{errorMessage}}",
+ "updateModelFailed": "بهروزرسانی مدل ناموفق بود: {{errorMessage}}",
+ "renameCategoryFailed": "تغییر نام کلاس ناموفق بود: {{errorMessage}}"
+ }
+ },
+ "documentTitle": "دسته بندی مدل ها - فریگیت",
+ "description": {
+ "invalidName": "نام نامعتبر، نام ها فقط می توانند شامل حروف، اعداد، فاصله، آپستروف، زیرخط و خط فاصله باشند."
+ },
+ "details": {
+ "none": "هیچکدام",
+ "scoreInfo": "امتیاز، نشان دهنده میانگین دقت در تشخیص و دسته بندی این شیء در بین تمام تشخیصهاست.",
+ "unknown": "ناشناخته"
+ },
+ "tooltip": {
+ "trainingInProgress": "مدل در حال آموزش است",
+ "noNewImages": "هیچ تصویر جدیدی برای آموزش وجود ندارد. ابتدا تصاویر بیشتری را در مجموعهداده دستهبندی کنید.",
+ "noChanges": "از آخرین آموزش، هیچ تغییری در مجموعهداده ایجاد نشده است.",
+ "modelNotReady": "مدل برای آموزش آماده نیست"
+ },
+ "deleteCategory": {
+ "title": "(pending)",
+ "desc": "آیا مطمئن هستید که میخواهید کلاس {{name}} را حذف کنید؟ این کار همهٔ تصاویر مرتبط را برای همیشه حذف میکند و نیاز به آموزش مجدد مدل دارد.",
+ "minClassesTitle": "امکان حذف کلاس وجود ندارد",
+ "minClassesDesc": "یک مدل دستهبندی باید دستکم ۲ کلاس داشته باشد. پیش از حذف این مورد، یک کلاس دیگر اضافه کنید."
+ },
+ "train": {
+ "titleShort": "اخیر",
+ "title": "طبقهبندیهای اخیر",
+ "aria": "انتخاب طبقهبندیهای اخیر"
+ },
+ "deleteModel": {
+ "title": "حذف مدل دستهبندی",
+ "single": "آیا مطمئن هستید که میخواهید {{name}} را حذف کنید؟ این کار همهٔ دادههای مرتبط از جمله تصاویر و دادههای آموزش را برای همیشه حذف میکند. این عمل قابل بازگشت نیست.",
+ "desc_one": "آیا مطمئن هستید که میخواهید این {{count}} مدل را حذف کنید؟ این کار همهٔ دادههای مرتبط از جمله تصاویر و دادههای آموزشی را برای همیشه حذف میکند. این عمل قابل بازگشت نیست.",
+ "desc_other": "آیا مطمئن هستید که میخواهید {{count}} مدل را حذف کنید؟ این کار همهٔ دادههای مرتبط از جمله تصاویر و دادههای آموزشی را برای همیشه حذف میکند. این عمل قابل بازگشت نیست."
+ },
+ "categorizeImage": "طبقهبندی تصویر",
+ "menu": {
+ "states": "حالتها",
+ "objects": "اشیاء"
+ },
+ "noModels": {
+ "object": {
+ "description": "یک مدل سفارشی ایجاد کنید تا اشیای شناساییشده را طبقهبندی کند.",
+ "title": "هیچ مدل طبقهبندی شیء وجود ندارد",
+ "buttonText": "ایجاد مدل شیء"
+ },
+ "state": {
+ "title": "هیچ مدل طبقهبندی حالت وجود ندارد",
+ "description": "یک مدل سفارشی ایجاد کنید تا تغییرات وضعیت را در نواحی مشخصِ دوربین پایش و طبقهبندی کند.",
+ "buttonText": "ایجاد مدل وضعیت"
+ }
+ },
+ "wizard": {
+ "title": "ایجاد طبقهبندی جدید",
+ "steps": {
+ "stateArea": "ناحیهٔ حالت",
+ "nameAndDefine": "نامگذاری و تعریف",
+ "chooseExamples": "انتخاب نمونهها"
+ },
+ "step1": {
+ "description": "مدلهای حالت نواحی ثابت دوربین را برای تغییرات پایش میکنند (مثلاً درِ باز/بسته). مدلهای شیء به اشیای شناساییشده طبقهبندی اضافه میکنند (مثلاً حیوانات شناختهشده، مأموران تحویل، و غیره).",
+ "namePlaceholder": "نام مدل را وارد کنید...",
+ "type": "نوع",
+ "typeObject": "شیء",
+ "objectLabelPlaceholder": "نوع شیء را انتخاب کنید...",
+ "classificationTypeDesc": "زیربرچسبها متن اضافی به برچسب شیء اضافه میکنند (مثلاً «Person: UPS»). ویژگیها فرادادهٔ قابل جستوجو هستند که جداگانه در فرادادهٔ شیء ذخیره میشوند.",
+ "classificationAttribute": "ویژگی",
+ "classes": "کلاسها",
+ "classesTip": "دربارهٔ کلاسها بیشتر بدانید",
+ "classesObjectDesc": "دستهبندیهای مختلف را برای طبقهبندی اشیای شناساییشده تعریف کنید. برای نمونه: «delivery_person»، «resident»، «stranger» برای طبقهبندی افراد.",
+ "errors": {
+ "nameLength": "نام مدل باید ۶۴ نویسه یا کمتر باشد",
+ "classesUnique": "نام کلاسها باید یکتا باشند",
+ "stateRequiresTwoClasses": "مدلهای حالت دستکم به ۲ کلاس نیاز دارند",
+ "objectLabelRequired": "لطفاً یک برچسب شیء را انتخاب کنید",
+ "nameRequired": "نام مدل الزامی است",
+ "nameOnlyNumbers": "نام مدل نمیتواند فقط شامل عدد باشد",
+ "noneNotAllowed": "کلاس «none» مجاز نیست",
+ "classRequired": "حداقل ۱ کلاس لازم است",
+ "objectTypeRequired": "لطفاً یک نوع طبقهبندی را انتخاب کنید"
+ },
+ "name": "نام",
+ "typeState": "وضعیت",
+ "objectLabel": "برچسب شیء",
+ "classificationType": "نوع طبقهبندی",
+ "classificationSubLabel": "زیربرچسب",
+ "classificationTypeTip": "دربارهٔ انواع طبقهبندی بیشتر بدانید",
+ "states": "وضعیتها",
+ "classesStateDesc": "حالتهای مختلفی را که ناحیهٔ دوربین شما میتواند در آن باشد تعریف کنید. برای مثال: «باز» و «بسته» برای یک درِ گاراژ.",
+ "classPlaceholder": "نام کلاس را وارد کنید…"
+ },
+ "step2": {
+ "description": "دوربینها را انتخاب کنید و ناحیهای را که باید برای هر دوربین پایش شود تعریف کنید. مدل، وضعیت این ناحیهها را طبقهبندی میکند.",
+ "cameras": "دوربینها",
+ "noCameras": "برای افزودن دوربینها روی + کلیک کنید",
+ "selectCamera": "انتخاب دوربین",
+ "selectCameraPrompt": "برای تعریف ناحیهٔ پایش، یک دوربین را از فهرست انتخاب کنید"
+ },
+ "step3": {
+ "selectImagesDescription": "برای انتخاب، روی تصاویر کلیک کنید. وقتی کارتان با این کلاس تمام شد روی «ادامه» کلیک کنید.",
+ "generating": {
+ "description": "Frigate در حال استخراج تصاویر نماینده از ضبطهای شماست. ممکن است کمی زمان ببرد…",
+ "title": "در حال تولید تصاویر نمونه"
+ },
+ "retryGenerate": "تلاش دوباره برای تولید",
+ "classifying": "در حال طبقهبندی و آموزش…",
+ "trainingStarted": "آموزش با موفقیت شروع شد",
+ "errors": {
+ "noCameras": "هیچ دوربینی پیکربندی نشده است",
+ "noObjectLabel": "هیچ برچسب شیئی انتخاب نشده است",
+ "generationFailed": "تولید ناموفق بود. لطفاً دوباره تلاش کنید.",
+ "classifyFailed": "طبقهبندی تصاویر ناموفق بود: {{error}}",
+ "generateFailed": "تولید نمونهها ناموفق بود: {{error}}"
+ },
+ "missingStatesWarning": {
+ "title": "نمونههای وضعیتِ جاافتاده",
+ "description": "برای بهترین نتیجه، توصیه میشود برای همهٔ حالتها نمونه انتخاب کنید. میتوانید بدون انتخاب همهٔ حالتها ادامه دهید، اما تا زمانی که همهٔ حالتها تصویر نداشته باشند مدل آموزش داده نمیشود. پس از ادامه، از نمای «طبقهبندیهای اخیر» برای طبقهبندی تصاویرِ حالتهای جاافتاده استفاده کنید، سپس مدل را آموزش دهید."
+ },
+ "allImagesRequired_one": "لطفاً همهٔ تصاویر را طبقهبندی کنید. {{count}} تصویر باقی مانده است.",
+ "allImagesRequired_other": "لطفاً همهٔ تصاویر را طبقهبندی کنید. {{count}} تصویر باقی مانده است.",
+ "training": {
+ "title": "در حال آموزش مدل",
+ "description": "مدل شما در پسزمینه در حال آموزش است. این پنجره را ببندید؛ بهمحض تکمیل آموزش، مدل شما شروع به اجرا میکند."
+ },
+ "noImages": "هیچ تصویر نمونهای تولید نشد",
+ "modelCreated": "مدل با موفقیت ایجاد شد. از نمای «طبقهبندیهای اخیر» برای افزودن تصاویرِ وضعیتهایِ جاافتاده استفاده کنید، سپس مدل را آموزش دهید.",
+ "generateSuccess": "تصاویر نمونه با موفقیت تولید شد",
+ "selectImagesPrompt": "همهٔ تصاویر با {{className}} را انتخاب کنید"
+ }
+ },
+ "edit": {
+ "title": "ویرایش مدل طبقهبندی",
+ "descriptionState": "کلاسهای این مدل طبقهبندی حالت را ویرایش کنید. اعمال تغییرات نیاز به بازآموزی مدل دارد.",
+ "descriptionObject": "نوع شیء و نوع طبقهبندی را برای این مدل طبقهبندی شیء ویرایش کنید.",
+ "stateClassesInfo": "توجه: تغییر کلاسهای وضعیت نیازمند بازآموزی مدل با کلاسهای بهروزرسانیشده است."
+ },
+ "deleteDatasetImages": {
+ "title": "حذف تصاویر مجموعهداده",
+ "desc_one": "آیا مطمئن هستید که میخواهید این {{count}} تصویر را از {{dataset}} حذف کنید؟ این عمل قابل بازگشت نیست و نیاز به بازآموزی مدل دارد.",
+ "desc_other": "آیا مطمئن هستید که میخواهید {{count}} تصویر را از {{dataset}} حذف کنید؟ این عمل قابل بازگشت نیست و نیاز به بازآموزی مدل دارد."
+ },
+ "deleteTrainImages": {
+ "title": "حذف تصاویر آموزش",
+ "desc_one": "آیا مطمئن هستید که میخواهید این {{count}} تصویر را حذف کنید؟ این عمل قابل بازگشت نیست.",
+ "desc_other": "آیا مطمئن هستید که میخواهید {{count}} تصویر را حذف کنید؟ این عمل قابل بازگشت نیست."
+ },
+ "renameCategory": {
+ "title": "تغییر نام کلاس",
+ "desc": "یک نام جدید برای {{name}} وارد کنید. برای اعمال تغییر نام، لازم است مدل را بازآموزی کنید."
+ },
+ "categories": "کلاسها",
+ "createCategory": {
+ "new": "ایجاد کلاس جدید"
+ },
+ "categorizeImageAs": "طبقهبندی تصویر بهعنوان:"
+}
diff --git a/web/public/locales/fa/views/configEditor.json b/web/public/locales/fa/views/configEditor.json
index 0a57836db..c43489dbb 100644
--- a/web/public/locales/fa/views/configEditor.json
+++ b/web/public/locales/fa/views/configEditor.json
@@ -1,4 +1,18 @@
{
"documentTitle": "ویرایشگر کانفیگ - فریگیت",
- "configEditor": "ویرایشگر کانفیگ"
+ "configEditor": "ویرایشگر کانفیگ",
+ "safeConfigEditor": "ویرایشگر تنظیمات (حالت امن)",
+ "safeModeDescription": "فریگیت به دلیل خطا در صحت سنجی پیکربندی، در حالت امن می باشد.",
+ "copyConfig": "کپی پیکربندی",
+ "saveAndRestart": "ذخیره و راهاندازی مجدد",
+ "saveOnly": "فقط ذخیره",
+ "confirm": "بدون ذخیره خارج میشوید؟",
+ "toast": {
+ "success": {
+ "copyToClipboard": "پیکربندی در کلیپبورد کپی شد."
+ },
+ "error": {
+ "savingError": "خطا در ذخیرهسازی پیکربندی"
+ }
+ }
}
diff --git a/web/public/locales/fa/views/events.json b/web/public/locales/fa/views/events.json
index 4fc9338d6..cf3ca7871 100644
--- a/web/public/locales/fa/views/events.json
+++ b/web/public/locales/fa/views/events.json
@@ -2,6 +2,64 @@
"alerts": "هشدارها",
"detections": "تشخیصها",
"motion": {
- "label": "حرکت"
- }
+ "label": "حرکت",
+ "only": "فقط حرکتی"
+ },
+ "allCameras": "همه دوربینها",
+ "empty": {
+ "alert": "هیچ هشداری برای بازبینی وجود ندارد",
+ "detection": "هیچ تشخیصی برای بازبینی وجود ندارد",
+ "motion": "هیچ دادهای از حرکت پیدا نشد",
+ "recordingsDisabled": {
+ "title": "ضبطها بایستی فعال باشند",
+ "description": "موارد بازبینی برای یک دوربین تنها درصورتی امکان ساخت دارند که ضبطها برای آن دورین فعال باشد."
+ }
+ },
+ "timeline": "خط زمانی",
+ "timeline.aria": "انتخاب خط زمانی",
+ "zoomIn": "بزرگنمایی",
+ "zoomOut": "کوچکنمایی",
+ "events": {
+ "aria": "انتخاب رویدادها",
+ "noFoundForTimePeriod": "برای این بازهٔ زمانی هیچ رویدادی یافت نشد.",
+ "label": "رویدادها"
+ },
+ "recordings": {
+ "documentTitle": "ضبطها - فریگیت"
+ },
+ "calendarFilter": {
+ "last24Hours": "۲۴ ساعت گذشته"
+ },
+ "markAsReviewed": "علامتگذاری بهعنوان بازبینیشده",
+ "markTheseItemsAsReviewed": "این موارد را بهعنوان بازبینیشده علامتگذاری کنید",
+ "newReviewItems": {
+ "label": "مشاهدهٔ موارد جدید برای بازبینی",
+ "button": "موارد جدید برای بازبینی"
+ },
+ "detail": {
+ "label": "جزئیات",
+ "noDataFound": "دادهای برای بازبینیِ جزئیات وجود ندارد",
+ "aria": "تغییر وضعیتِ نمای جزئیات",
+ "trackedObject_one": "{{count}} شیء",
+ "trackedObject_other": "{{count}} اشیاء",
+ "noObjectDetailData": "دادهٔ جزئیات شیء در دسترس نیست.",
+ "settings": "تنظیمات نمای جزئیات",
+ "alwaysExpandActive": {
+ "title": "همیشه فعال را باز کنید",
+ "desc": "در صورت امکان، همیشه جزئیات شیء مربوط به موردِ بازبینیِ فعال را باز کنید."
+ }
+ },
+ "objectTrack": {
+ "trackedPoint": "نقطهٔ ردیابیشده",
+ "clickToSeek": "برای رفتن به این زمان کلیک کنید"
+ },
+ "documentTitle": "بازبینی - Frigate",
+ "selected_one": "{{count}} انتخاب شد",
+ "selected_other": "{{count}} انتخاب شدند",
+ "select_all": "همه",
+ "camera": "دوربین",
+ "detected": "گزینههاشناسایی شد",
+ "normalActivity": "عادی",
+ "needsReview": "نیاز به بازبینی",
+ "securityConcern": "نگرانی امنیتی"
}
diff --git a/web/public/locales/fa/views/explore.json b/web/public/locales/fa/views/explore.json
index f98ef706f..d532878c4 100644
--- a/web/public/locales/fa/views/explore.json
+++ b/web/public/locales/fa/views/explore.json
@@ -1,3 +1,248 @@
{
- "generativeAI": "هوش مصنوعی تولید کننده"
+ "generativeAI": "هوش مصنوعی تولید کننده",
+ "documentTitle": "کاوش - فریگیت",
+ "exploreMore": "نمایش اشیا {{label}} بیشتر",
+ "details": {
+ "timestamp": "زمان دقیق",
+ "item": {
+ "desc": "بررسی جزئیات مورد",
+ "button": {
+ "viewInExplore": "مشاهده در کاوش",
+ "share": "اشتراکگذاری این مورد بازبینی"
+ },
+ "tips": {
+ "hasMissingObjects": "اگر میخواهید Frigate اشیای ردیابیشده را برای برچسبهای زیر ذخیره کند، پیکربندی خود را تنظیم کنید: {{objects}} ",
+ "mismatch_one": "{{count}} شیء غیرقابلدسترس شناسایی شد و در این مورد بازبینی گنجانده شد. این اشیا یا شرایط لازم برای هشدار یا تشخیص را نداشتند یا قبلاً پاکسازی/حذف شدهاند.",
+ "mismatch_other": "{{count}} شیء غیرقابلدسترس شناسایی شدند و در این مورد بازبینی گنجانده شدند. این اشیا یا شرایط لازم برای هشدار یا تشخیص را نداشتند یا قبلاً پاکسازی/حذف شدهاند."
+ },
+ "toast": {
+ "success": {
+ "regenerate": "یک توضیح جدید از {{provider}} درخواست شد. بسته به سرعت ارائهدهندهٔ شما، بازتولیدِ توضیح جدید ممکن است کمی زمان ببرد.",
+ "updatedLPR": "پلاک با موفقیت بهروزرسانی شد.",
+ "audioTranscription": "درخواست تبدیل گفتارِ صوت با موفقیت ثبت شد. بسته به سرعت سرور Frigate شما، تکمیل تبدیل گفتار ممکن است کمی زمان ببرد.",
+ "updatedSublabel": "زیر برچسب با موفقیت بهروزرسانی شد.",
+ "updatedAttributes": "ویژگیها با موفقیت بهروزرسانی شد."
+ },
+ "error": {
+ "updatedSublabelFailed": "بهروزرسانی زیربرچسب ناموفق بود: {{errorMessage}}",
+ "updatedAttributesFailed": "بهروزرسانی ویژگیها ناموفق بود: {{errorMessage}}",
+ "regenerate": "فراخوانی {{provider}} برای توضیح جدید ناموفق بود: {{errorMessage}}",
+ "updatedLPRFailed": "بهروزرسانی پلاک ناموفق بود: {{errorMessage}}",
+ "audioTranscription": "درخواست رونویسی صدا ناموفق بود: {{errorMessage}}"
+ }
+ },
+ "title": "جزئیات مورد بازبینی"
+ },
+ "editSubLabel": {
+ "title": "ویرایش زیربرچسب",
+ "descNoLabel": "برای این شیء ردیابیشده یک زیربرچسب جدید وارد کنید",
+ "desc": "برای این {{label}} یک زیربرچسب جدید وارد کنید"
+ },
+ "editLPR": {
+ "desc": "برای {{label}} یک مقدار جدید برای پلاک وارد کنید",
+ "descNoLabel": "برای این شیء ردیابیشده یک مقدار جدید برای پلاک وارد کنید",
+ "title": "ویرایش پلاک"
+ },
+ "editAttributes": {
+ "desc": "ویژگیهای طبقهبندی را برای {{label}} انتخاب کنید",
+ "title": "ویرایش ویژگیها"
+ },
+ "topScore": {
+ "label": "بالاترین امتیاز",
+ "info": "بالاترین امتیاز، بالاترین امتیاز میانه برای شیء ردیابیشده است؛ بنابراین ممکن است با امتیازی که روی تصویر بندانگشتیِ نتیجهٔ جستوجو نمایش داده میشود متفاوت باشد."
+ },
+ "recognizedLicensePlate": "پلاک شناساییشده",
+ "estimatedSpeed": "سرعت تخمینی",
+ "objects": "اشیا",
+ "zones": "ناحیهها",
+ "button": {
+ "regenerate": {
+ "title": "بازتولید",
+ "label": "بازسازی توضیح شیء ردیابیشده"
+ },
+ "findSimilar": "یافتن مشابه"
+ },
+ "description": {
+ "placeholder": "توضیحِ شیء ردیابیشده",
+ "label": "توضیحات",
+ "aiTips": "Frigate تا زمانی که چرخهٔ عمر شیء ردیابیشده پایان نیابد، از ارائهدهندهٔ هوش مصنوعی مولد شما درخواست توضیح نمیکند."
+ },
+ "expandRegenerationMenu": "باز کردن منوی بازتولید",
+ "regenerateFromSnapshot": "بازتولید از اسنپشات",
+ "tips": {
+ "descriptionSaved": "توضیح با موفقیت ذخیره شد",
+ "saveDescriptionFailed": "بهروزرسانی توضیح ناموفق بود: {{errorMessage}}"
+ },
+ "label": "برچسب",
+ "snapshotScore": {
+ "label": "امتیاز عکس فوری"
+ },
+ "score": {
+ "label": "امتیاز"
+ },
+ "attributes": "ویژگیهای طبقهبندی",
+ "camera": "دوربین",
+ "regenerateFromThumbnails": "بازسازی از تصاویر بندانگشتی",
+ "title": {
+ "label": "عنوان"
+ }
+ },
+ "exploreIsUnavailable": {
+ "title": "کاوش کردن در دسترس نیست",
+ "embeddingsReindexing": {
+ "startingUp": "درحال شروع…",
+ "context": "پس از اینکه جاسازیهای شیء ردیابیشده، نمایهسازی مجدد را به پایان رساندند، میتوان از کاوش استفاده کرد.",
+ "estimatedTime": "زمان تخمینی باقیمانده:",
+ "finishingShortly": "بهزودی تمام میشود",
+ "step": {
+ "thumbnailsEmbedded": "تصاویر بندانگشتی جاسازیشده: ",
+ "descriptionsEmbedded": "توضیحات جاسازیشده: ",
+ "trackedObjectsProcessed": "اشیای ردیابیشدهٔ پردازششده: "
+ }
+ },
+ "downloadingModels": {
+ "context": "Frigate در حال دانلود مدلهای بردارسازی لازم برای پشتیبانی از قابلیت «جستوجوی معنایی» است. بسته به سرعت اتصال شبکه شما، این کار ممکن است چند دقیقه طول بکشد.",
+ "setup": {
+ "visionModel": "مدل بینایی",
+ "visionModelFeatureExtractor": "استخراجکنندهٔ ویژگیهای مدل بینایی",
+ "textModel": "مدل متنی",
+ "textTokenizer": "توکنساز متن"
+ },
+ "tips": {
+ "context": "ممکن است بخواهید پس از دانلود مدلها، تعبیههای اشیای ردیابیشدهٔ خود را دوباره ایندکس کنید."
+ },
+ "error": "خطایی رخ داده است. گزارشهای Frigate را بررسی کنید."
+ }
+ },
+ "trackingDetails": {
+ "adjustAnnotationSettings": "تنظیمات حاشیهنویسی را تنظیم کنید",
+ "scrollViewTips": "برای مشاهدهٔ لحظههای مهم چرخهٔ زندگی این شیء کلیک کنید.",
+ "autoTrackingTips": "موقعیت کادرها برای دوربینهای ردیابی خودکار دقیق نخواهد بود.",
+ "count": "{{first}} از {{second}}",
+ "trackedPoint": "نقطهٔ ردیابیشده",
+ "lifecycleItemDesc": {
+ "visible": "{{label}} شناسایی شد",
+ "entered_zone": "{{label}} وارد {{zones}} شد",
+ "active": "{{label}} فعال شد",
+ "stationary": "{{label}} ساکن شد",
+ "attribute": {
+ "faceOrLicense_plate": "{{attribute}} برای {{label}} شناسایی شد",
+ "other": "{{label}} بهعنوان {{attribute}} شناسایی شد"
+ },
+ "gone": "{{label}} خارج شد",
+ "heard": "{{label}} شنیده شد",
+ "external": "{{label}} شناسایی شد",
+ "header": {
+ "zones": "ناحیهها",
+ "ratio": "نسبت",
+ "area": "مساحت",
+ "score": "امتیاز"
+ }
+ },
+ "title": "جزئیات ردیابی",
+ "noImageFound": "برای این برچسب زمانی هیچ تصویری یافت نشد.",
+ "createObjectMask": "ایجاد ماسک شیء",
+ "annotationSettings": {
+ "title": "تنظیمات حاشیهنویسی",
+ "showAllZones": {
+ "title": "نمایش همهٔ مناطق",
+ "desc": "همیشه مناطق را روی فریمهایی که اشیا وارد یک منطقه شدهاند نمایش دهید."
+ },
+ "offset": {
+ "toast": {
+ "success": "افست حاشیهنویسی برای {{camera}} در فایل پیکربندی ذخیره شد."
+ },
+ "label": "افست حاشیهنویسی",
+ "desc": "این داده از فید تشخیص دوربین شما میآید، اما روی تصاویر فید ضبطشده قرار میگیرد. بعید است این دو جریان کاملاً همزمان باشند. در نتیجه، کادر محدوده و ویدیو دقیقاً روی هم منطبق نخواهند بود. میتوانید با این تنظیمات، حاشیهنویسیها را در زمان به جلو یا عقب جابهجا کنید تا با ویدئوی ضبطشده بهتر همتراز شوند.",
+ "millisecondsToOffset": "میلیثانیه برای جابهجایی حاشیهنویسیهای تشخیص. پیشفرض: 0 ",
+ "tips": "اگر پخش ویدیو جلوتر از کادرها و نقاط مسیر است مقدار را کمتر کنید و اگر پخش ویدیو عقبتر از آنهاست مقدار را بیشتر کنید. این مقدار میتواند منفی باشد."
+ }
+ },
+ "carousel": {
+ "previous": "اسلاید قبلی",
+ "next": "اسلاید بعدی"
+ }
+ },
+ "trackedObjectDetails": "جزئیات شیء ردیابیشده",
+ "type": {
+ "details": "جزئیاتها",
+ "snapshot": "عکس فوری",
+ "thumbnail": "پیشنمایش",
+ "video": "ویدیو",
+ "tracking_details": "جزئیات ردیابی"
+ },
+ "itemMenu": {
+ "downloadVideo": {
+ "aria": "دانلود ویدئو",
+ "label": "دانلود ویدیو"
+ },
+ "downloadSnapshot": {
+ "label": "دانلود اسنپشات",
+ "aria": "دانلود عکس"
+ },
+ "downloadCleanSnapshot": {
+ "label": "دانلود اسنپشاتِ بدون کادر",
+ "aria": "دانلود عکس فوری بدون کادر"
+ },
+ "viewTrackingDetails": {
+ "aria": "نمایش جزئیات ردیابی",
+ "label": "مشاهدهٔ جزئیات ردیابی"
+ },
+ "findSimilar": {
+ "label": "یافتن مشابه",
+ "aria": "یافتن اشیای ردیابیشدهٔ مشابه"
+ },
+ "addTrigger": {
+ "label": "افزودن تریگر",
+ "aria": "افزودن تریگر برای این شیء ردیابیشده"
+ },
+ "audioTranscription": {
+ "aria": "درخواست رونویسیِ صوتی",
+ "label": "رونویسی"
+ },
+ "submitToPlus": {
+ "aria": "ارسال به Frigate Plus",
+ "label": "ارسال به Frigate+"
+ },
+ "viewInHistory": {
+ "label": "مشاهده در تاریخچه",
+ "aria": "مشاهده در تاریخچه"
+ },
+ "showObjectDetails": {
+ "label": "نمایش مسیر شیء"
+ },
+ "hideObjectDetails": {
+ "label": "پنهان کردن مسیر شیء"
+ },
+ "deleteTrackedObject": {
+ "label": "حذف این شیء ردیابیشده"
+ }
+ },
+ "noTrackedObjects": "هیچ شیء ردیابیشدهای پیدا نشد",
+ "fetchingTrackedObjectsFailed": "خطا در دریافت اشیای ردیابیشده: {{errorMessage}}",
+ "trackedObjectsCount_one": "{{count}} شیء ردیابیشده ",
+ "trackedObjectsCount_other": "{{count}} اشیای ردیابیشده ",
+ "dialog": {
+ "confirmDelete": {
+ "title": "تأیید حذف",
+ "desc": "حذف این شیء ردیابیشده عکس فوری، هرگونه امبدینگ ذخیرهشده و هر ورودی مرتبط با جزئیات ردیابی را حذف میکند. فیلم ضبطشدهٔ این شیء ردیابیشده در نمای تاریخ حذف نخواهد شد.جعبههای حرکت
جعبههای قرمز روی نواحی فریمی که در حال حاضر حرکت در آنها تشخیص داده میشود نمایش داده میشوند
" + }, + "paths": { + "desc": "نقاط مهم مسیر شیء ردیابیشده را نشان میدهد", + "tips": "مسیرها
خطها و دایرهها نقاط مهمی را که شیء ردیابیشده در طول چرخهٔ عمر خود طی کرده است نشان میدهند.
", + "title": "مسیرها" + }, + "objectShapeFilterDrawing": { + "title": "رسم فیلتر شکل شیء", + "desc": "برای مشاهدهٔ جزئیات مساحت و نسبت، روی تصویر یک مستطیل رسم کنید", + "tips": "این گزینه را فعال کنید تا بتوانید روی تصویر دوربین یک مستطیل رسم کنید و مساحت و نسبت آن را ببینید. سپس میتوان از این مقادیر برای تنظیم پارامترهای فیلتر شکل شیء در پیکربندی شما استفاده کرد.", + "score": "امتیاز", + "ratio": "نسبت", + "area": "مساحت" + }, + "openCameraWebUI": "رابط وبِ {{camera}} را باز کنید", + "debugging": "انجام اشکالزدایی", + "objectList": "فهرست اشیا", + "noObjects": "هیچ شیئی وجود ندارد", + "timestamp": { + "title": "مهر زمان", + "desc": "نمایش مهر زمان روی تصویر" + }, + "regions": { + "title": "مناطق", + "desc": "نمایش جعبهٔ ناحیهٔ مورد علاقهٔ ارسالشده به تشخیصدهندهٔ شیء", + "tips": "جعبههای ناحیه
جعبههای سبز روشن روی نواحی مورد علاقه در فریم که به تشخیصدهندهٔ شیء ارسال میشوند نمایش داده میشوند.
" + } + }, + "users": { + "management": { + "desc": "حسابهای کاربری این نمونهٔ Frigate را مدیریت کنید.", + "title": "مدیریت کاربران" + }, + "addUser": "افزودن کاربر", + "updatePassword": "بازنشانی گذرواژه", + "toast": { + "success": { + "createUser": "کاربر {{user}} با موفقیت ایجاد شد", + "deleteUser": "کاربر {{user}} با موفقیت حذف شد", + "updatePassword": "گذرواژه با موفقیت بهروزرسانی شد.", + "roleUpdated": "نقش برای {{user}} بهروزرسانی شد" + }, + "error": { + "setPasswordFailed": "ذخیرهٔ گذرواژه ناموفق بود: {{errorMessage}}", + "createUserFailed": "ایجاد کاربر ناموفق بود: {{errorMessage}}", + "deleteUserFailed": "حذف کاربر ناموفق بود: {{errorMessage}}", + "roleUpdateFailed": "بهروزرسانی نقش ناموفق بود: {{errorMessage}}" + } + }, + "table": { + "changeRole": "تغییر نقش کاربر", + "password": "بازنشانی گذرواژه", + "deleteUser": "حذف کاربر", + "username": "نام کاربری", + "actions": "اقدامات", + "role": "نقش", + "noUsers": "هیچ کاربری یافت نشد." + }, + "dialog": { + "form": { + "user": { + "title": "نام کاربری", + "desc": "فقط حروف، اعداد، نقطه و زیرخط مجاز هستند.", + "placeholder": "نام کاربری را وارد کنید" + }, + "password": { + "confirm": { + "title": "تأیید گذرواژه", + "placeholder": "تأیید گذرواژه" + }, + "strength": { + "title": "قدرت گذرواژه: · ", + "weak": "ضعیف", + "medium": "متوسط", + "strong": "قوی", + "veryStrong": "خیلی قوی" + }, + "requirements": { + "digit": "حداقل یک رقم", + "special": "حداقل یک نویسهٔ ویژه (!@#$%^&*(),.?\":{}|<>)", + "title": "الزامات رمز عبور:", + "length": "حداقل ۸ کاراکتر", + "uppercase": "حداقل یک حرف بزرگ" + }, + "match": "گذرواژهها مطابقت دارند", + "notMatch": "گذرواژهها مطابقت ندارند", + "show": "نمایش رمز عبور", + "hide": "پنهان کردن رمز عبور", + "title": "رمز عبور", + "placeholder": "رمز عبور را وارد کنید" + }, + "newPassword": { + "title": "گذرواژهٔ جدید", + "confirm": { + "placeholder": "رمز عبور جدید را دوباره وارد کنید" + }, + "placeholder": "رمز عبور جدید را وارد کنید" + }, + "passwordIsRequired": "گذرواژه الزامی است", + "currentPassword": { + "title": "رمز عبور فعلی", + "placeholder": "رمز عبور فعلی خود را وارد کنید" + }, + "usernameIsRequired": "نام کاربری الزامی است" + }, + "createUser": { + "title": "ایجاد کاربر جدید", + "desc": "یک حساب کاربری جدید اضافه کنید و یک نقش برای دسترسی به بخشهای رابط کاربری Frigate تعیین کنید.", + "usernameOnlyInclude": "نام کاربری فقط میتواند شامل حروف، اعداد، . یا _ باشد", + "confirmPassword": "لطفاً گذرواژهٔ خود را تأیید کنید" + }, + "passwordSetting": { + "currentPasswordRequired": "گذرواژهٔ فعلی الزامی است", + "incorrectCurrentPassword": "گذرواژهٔ فعلی نادرست است", + "passwordVerificationFailed": "اعتبارسنجی گذرواژه ناموفق بود", + "updatePassword": "بهروزرسانی گذرواژه برای {{username}}", + "setPassword": "تنظیم گذرواژه", + "desc": "برای ایمنسازی این حساب، یک گذرواژهٔ قوی بسازید.", + "doNotMatch": "رمزهای عبور مطابقت ندارند", + "multiDeviceWarning": "هر دستگاه دیگری که در آن وارد شدهاید باید ظرف {{refresh_time}} دوباره وارد شود.", + "multiDeviceAdmin": "همچنین میتوانید با چرخش رمز JWT خود، همهٔ کاربران را فوراً مجبور به احراز هویت مجدد کنید.", + "cannotBeEmpty": "رمز عبور نمیتواند خالی باشد" + }, + "changeRole": { + "desc": "بهروزرسانی مجوزها برای {{username}} ", + "roleInfo": { + "intro": "نقش مناسب برای این کاربر را انتخاب کنید:", + "admin": "مدیر", + "adminDesc": "دسترسی کامل به همهٔ قابلیتها.", + "viewer": "بیننده", + "customDesc": "نقش سفارشی با دسترسی مشخص به دوربین.", + "viewerDesc": "محدود به داشبوردهای زنده، بررسی، کاوش و خروجیگیری فقط." + }, + "title": "تغییر نقش کاربر", + "select": "یک نقش انتخاب کنید" + }, + "deleteUser": { + "title": "حذف کاربر", + "desc": "این عمل قابل بازگشت نیست. این کار حساب کاربری را بهطور دائم حذف میکند و همهٔ دادههای مرتبط را حذف میکند.", + "warn": "آیا مطمئن هستید که میخواهید {{username}} را حذف کنید؟" + } + }, + "title": "کاربران" + }, + "roles": { + "table": { + "role": "نقش", + "cameras": "دوربینها", + "actions": "اقدامها", + "noRoles": "هیچ نقش سفارشیای یافت نشد.", + "editCameras": "ویرایش دوربینها", + "deleteRole": "حذف نقش" + }, + "toast": { + "success": { + "createRole": "نقش {{role}} با موفقیت ایجاد شد", + "updateCameras": "دوربینها برای نقش {{role}} بهروزرسانی شدند", + "deleteRole": "نقش {{role}} با موفقیت حذف شد", + "userRolesUpdated_one": "{{count}} کاربری که به این نقش اختصاص داده شده بود به «بیننده» تغییر یافت و اکنون به همهٔ دوربینها دسترسی دارد.", + "userRolesUpdated_other": "{{count}} کاربری که به این نقش اختصاص داده شده بودند به «بیننده» تغییر یافتند و اکنون به همهٔ دوربینها دسترسی دارند." + }, + "error": { + "createRoleFailed": "ایجاد نقش ناموفق بود: {{errorMessage}}", + "updateCamerasFailed": "بهروزرسانی دوربینها ناموفق بود: {{errorMessage}}", + "deleteRoleFailed": "حذف نقش ناموفق بود: {{errorMessage}}", + "userUpdateFailed": "بهروزرسانی نقشهای کاربر ناموفق بود: {{errorMessage}}" + } + }, + "dialog": { + "createRole": { + "title": "ایجاد نقش جدید", + "desc": "یک نقش جدید اضافه کنید و سطح دسترسی به دوربینها را تعیین کنید." + }, + "form": { + "role": { + "roleExists": "نقشی با این نام از قبل وجود دارد.", + "placeholder": "نام نقش را وارد کنید", + "desc": "فقط حروف، اعداد، نقطه و زیرخط مجاز است.", + "roleIsRequired": "نام نقش الزامی است", + "roleOnlyInclude": "نام نقش فقط میتواند شامل حروف، اعداد، . یا _ باشد", + "title": "نام نقش" + }, + "cameras": { + "title": "دوربینها", + "desc": "دوربینهایی را که این نقش به آنها دسترسی دارد انتخاب کنید. حداقل یک دوربین لازم است.", + "required": "حداقل باید یک دوربین انتخاب شود." + } + }, + "editCameras": { + "title": "ویرایش دوربینهای نقش", + "desc": "بهروزرسانی دسترسی به دوربین برای نقش {{role}} ." + }, + "deleteRole": { + "title": "حذف نقش", + "desc": "این عمل قابل بازگشت نیست. این کار نقش را بهطور دائم حذف میکند و همهٔ کاربرانی که این نقش را دارند به نقش 'بیننده' اختصاص میدهد که دسترسی بیننده به همهٔ دوربینها را میدهد.", + "warn": "آیا مطمئن هستید که میخواهید {{role}} را حذف کنید؟", + "deleting": "در حال حذف…" + } + }, + "management": { + "title": "مدیریت نقش بیننده", + "desc": "مدیریت نقشهای بینندهٔ سفارشی و مجوزهای دسترسی به دوربین آنها برای این نمونهٔ Frigate." + }, + "addRole": "افزودن نقش" + }, + "notification": { + "title": "اعلانها", + "notificationSettings": { + "title": "تنظیمات اعلانها", + "desc": "Frigate میتواند بهصورت بومی وقتی در مرورگر اجرا میشود یا بهعنوان PWA نصب شده است، اعلانهای پوش را به دستگاه شما ارسال کند." + }, + "notificationUnavailable": { + "title": "اعلانها در دسترس نیستند", + "desc": "اعلانهای پوش وب نیاز به یک بستر امن دارند (https://… ). این محدودیت مرورگر است. برای استفاده از اعلانها، بهصورت امن به Frigate دسترسی پیدا کنید."
+ },
+ "globalSettings": {
+ "title": "تنظیمات عمومی",
+ "desc": "بهطور موقت اعلانها را برای دوربینهای مشخص در همهٔ دستگاههای ثبتشده متوقف کنید."
+ },
+ "sendTestNotification": "ارسال اعلان آزمایشی",
+ "unsavedRegistrations": "ثبتنامهای اعلان ذخیرهنشده",
+ "unsavedChanges": "تغییرات اعلان ذخیرهنشده",
+ "active": "اعلانها فعال هستند",
+ "suspended": "اعلانها تعلیق شدهاند {{time}}",
+ "suspendTime": {
+ "suspend": "تعلیق",
+ "5minutes": "تعلیق به مدت ۵ دقیقه",
+ "10minutes": "تعلیق به مدت ۱۰ دقیقه",
+ "30minutes": "تعلیق به مدت ۳۰ دقیقه",
+ "1hour": "تعلیق به مدت ۱ ساعت",
+ "24hours": "متوقف کردن به مدت ۲۴ ساعت",
+ "untilRestart": "متوقف کردن تا راهاندازی مجدد",
+ "12hours": "متوقف کردن به مدت ۱۲ ساعت"
+ },
+ "email": {
+ "title": "ایمیل",
+ "placeholder": "مثلاً example@email.com",
+ "desc": "یک ایمیل معتبر الزامی است و در صورت بروز مشکل در سرویس push برای اطلاعرسانی به شما استفاده میشود."
+ },
+ "cameras": {
+ "title": "دوربینها",
+ "noCameras": "هیچ دوربینی در دسترس نیست",
+ "desc": "انتخاب کنید که برای کدام دوربینها اعلان فعال شود."
+ },
+ "cancelSuspension": "لغو توقف",
+ "toast": {
+ "success": {
+ "registered": "با موفقیت برای اعلانها ثبت شد. راهاندازی مجدد Frigate قبل از ارسال هر اعلانی (از جمله اعلان آزمایشی) الزامی است.",
+ "settingSaved": "تنظیمات اعلان ذخیره شد."
+ },
+ "error": {
+ "registerFailed": "ذخیرهٔ ثبتنام اعلان ناموفق بود."
+ }
+ },
+ "deviceSpecific": "تنظیمات خاص دستگاه",
+ "registerDevice": "ثبت این دستگاه",
+ "unregisterDevice": "لغو ثبت این دستگاه"
+ },
+ "frigatePlus": {
+ "apiKey": {
+ "notValidated": "کلید API Frigate+ شناسایی نشده یا معتبرسازی نشده است",
+ "desc": "کلید API Frigate+ امکان یکپارچهسازی با سرویس Frigate+ را فراهم میکند.",
+ "plusLink": "دربارهٔ Frigate+ بیشتر بخوانید",
+ "title": "کلید API فرigate+",
+ "validated": "کلید API فرigate+ شناسایی و تأیید شد"
+ },
+ "snapshotConfig": {
+ "title": "پیکربندی عکس فوری",
+ "desc": "ارسال به Frigate+ نیازمند فعال بودنِ هم «عکسهای فوری» و هم عکسهای فوریِ clean_copy در پیکربندی شماست.",
+ "cleanCopyWarning": "برای برخی دوربینها عکس فوری فعال است اما clean copy غیرفعال است. برای اینکه بتوانید تصاویر این دوربینها را به Frigate+ ارسال کنید، باید clean_copy را در پیکربندی عکس فوری خود فعال کنید.",
+ "table": {
+ "camera": "دوربین",
+ "snapshots": "عکسهای فوری",
+ "cleanCopySnapshots": "عکسهای فوریِ clean_copy "
+ }
+ },
+ "modelInfo": {
+ "title": "اطلاعات مدل",
+ "loadingAvailableModels": "در حال بارگذاری مدلهای موجود…",
+ "modelSelect": "مدلهای موجود شما در Frigate+ را میتوان از اینجا انتخاب کرد. توجه داشته باشید که فقط مدلهای سازگار با پیکربندی فعلی آشکارساز شما قابل انتخاب هستند.",
+ "modelType": "نوع مدل",
+ "cameras": "دوربینها",
+ "loading": "در حال بارگذاری اطلاعات مدل…",
+ "error": "بارگذاری اطلاعات مدل ناموفق بود",
+ "availableModels": "مدلهای موجود",
+ "trainDate": "تاریخ آموزش",
+ "baseModel": "مدل پایه",
+ "plusModelType": {
+ "baseModel": "مدل پایه",
+ "userModel": "بهینهشده"
+ },
+ "supportedDetectors": "تشخیصدهندههای پشتیبانیشده"
+ },
+ "unsavedChanges": "تغییرات تنظیمات Frigate+ ذخیرهنشده",
+ "restart_required": "نیاز به راهاندازی مجدد (مدل Frigate+ تغییر کرد)",
+ "toast": {
+ "success": "تنظیمات Frigate+ ذخیره شد. برای اعمال تغییرات، Frigate را راهاندازی مجدد کنید.",
+ "error": "ذخیرهٔ تغییرات پیکربندی ناموفق بود: {{errorMessage}}"
+ },
+ "title": "تنظیمات Frigate+"
+ },
+ "triggers": {
+ "documentTitle": "تریگرها",
+ "semanticSearch": {
+ "title": "جستجوی معنایی غیرفعال است",
+ "desc": "برای استفاده از تریگرها باید جستجوی معنایی فعال باشد."
+ },
+ "management": {
+ "title": "تریگرها",
+ "desc": "مدیریت محرکها برای {{camera}}. از نوع بندانگشتی برای فعالسازی روی بندانگشتیهای مشابه به شیء ردیابیشدهٔ انتخابیتان استفاده کنید، و از نوع توضیحات برای فعالسازی روی توضیحات مشابه به متنی که مشخص میکنید."
+ },
+ "table": {
+ "lastTriggered": "آخرین بار فعالشده",
+ "noTriggers": "هیچ محرکی برای این دوربین پیکربندی نشده است.",
+ "edit": "ویرایش",
+ "deleteTrigger": "حذف محرک",
+ "name": "نام",
+ "type": "نوع",
+ "content": "محتوا",
+ "threshold": "آستانه",
+ "actions": "اقدامات"
+ },
+ "type": {
+ "thumbnail": "پیشنمایش",
+ "description": "توضیحات"
+ },
+ "actions": {
+ "notification": "ارسال اعلان",
+ "sub_label": "افزودن زیربرچسب",
+ "attribute": "افزودن ویژگی"
+ },
+ "dialog": {
+ "createTrigger": {
+ "title": "ایجاد تریگر",
+ "desc": "برای دوربین {{camera}} یک تریگر ایجاد کنید"
+ },
+ "editTrigger": {
+ "title": "ویرایش تریگر",
+ "desc": "تنظیمات تریگر روی دوربین {{camera}} را ویرایش کنید"
+ },
+ "deleteTrigger": {
+ "title": "حذف تریگر",
+ "desc": "آیا مطمئن هستید که میخواهید تریگر {{triggerName}} را حذف کنید؟ این عمل قابل بازگشت نیست."
+ },
+ "form": {
+ "name": {
+ "title": "نام",
+ "placeholder": "این تریگر را نامگذاری کنید",
+ "description": "یک نام یا توضیح یکتا وارد کنید تا این تریگر قابل شناسایی باشد",
+ "error": {
+ "minLength": "فیلد باید حداقل ۲ کاراکتر باشد.",
+ "invalidCharacters": "فیلد فقط میتواند شامل حروف، اعداد، زیرخط (_) و خط تیره (-) باشد.",
+ "alreadyExists": "تریگری با این نام از قبل برای این دوربین وجود دارد."
+ }
+ },
+ "enabled": {
+ "description": "این تریگر را فعال یا غیرفعال کنید"
+ },
+ "type": {
+ "title": "نوع",
+ "placeholder": "نوع تریگر را انتخاب کنید",
+ "description": "وقتی توضیحی مشابهِ شیء ردیابیشده تشخیص داده شود تریگر شود",
+ "thumbnail": "وقتی بندانگشتیِ مشابهِ شیء ردیابیشده تشخیص داده شود تریگر شود"
+ },
+ "content": {
+ "title": "محتوا",
+ "imagePlaceholder": "یک بندانگشتی انتخاب کنید",
+ "textPlaceholder": "محتوای متنی را وارد کنید",
+ "imageDesc": "فقط ۱۰۰ بندانگشتیِ آخر نمایش داده میشوند. اگر بندانگشتیِ موردنظر خود را پیدا نمیکنید، لطفاً اشیای قدیمیتر را در Explore مرور کنید و از همانجا از منو یک تریگر تنظیم کنید.",
+ "textDesc": "متنی وارد کنید تا وقتی توضیحی مشابهِ شیء ردیابیشده تشخیص داده شد، این اقدام تریگر شود.",
+ "error": {
+ "required": "محتوا الزامی است."
+ }
+ },
+ "threshold": {
+ "title": "آستانه",
+ "desc": "آستانهٔ شباهت را برای این تریگر تعیین کنید. آستانهٔ بالاتر یعنی برای فعال شدن تریگر، تطابق نزدیکتری لازم است.",
+ "error": {
+ "min": "آستانه باید حداقل ۰ باشد",
+ "max": "آستانه باید حداکثر ۱ باشد"
+ }
+ },
+ "actions": {
+ "title": "اقدامها",
+ "desc": "بهطور پیشفرض، Frigate برای همهٔ تریگرها یک پیام MQTT ارسال میکند. زیربرچسبها نام تریگر را به برچسب شیء اضافه میکنند. ویژگیها فرادادههای قابل جستجو هستند که جداگانه در فرادادهٔ شیء ردیابیشده ذخیره میشوند.",
+ "error": {
+ "min": "حداقل باید یک اقدام انتخاب شود."
+ }
+ }
+ }
+ },
+ "wizard": {
+ "title": "ایجاد تریگر",
+ "step1": {
+ "description": "تنظیمات پایهٔ تریگر خود را پیکربندی کنید."
+ },
+ "step2": {
+ "description": "محتوایی را که این اقدام را فعال میکند تنظیم کنید."
+ },
+ "step3": {
+ "description": "آستانه و اقدامهای این تریگر را پیکربندی کنید."
+ },
+ "steps": {
+ "nameAndType": "نام و نوع",
+ "configureData": "پیکربندی دادهها",
+ "thresholdAndActions": "آستانه و اقدامها"
+ }
+ },
+ "toast": {
+ "success": {
+ "createTrigger": "تریگر {{name}} با موفقیت ایجاد شد.",
+ "updateTrigger": "تریگر {{name}} با موفقیت بهروزرسانی شد.",
+ "deleteTrigger": "تریگر {{name}} با موفقیت حذف شد."
+ },
+ "error": {
+ "createTriggerFailed": "ایجاد تریگر ناموفق بود: {{errorMessage}}",
+ "updateTriggerFailed": "بهروزرسانی تریگر ناموفق بود: {{errorMessage}}",
+ "deleteTriggerFailed": "حذف تریگر ناموفق بود: {{errorMessage}}"
+ }
+ },
+ "addTrigger": "افزودن محرک"
}
}
diff --git a/web/public/locales/fa/views/system.json b/web/public/locales/fa/views/system.json
index 4cc9550d7..090d4a97f 100644
--- a/web/public/locales/fa/views/system.json
+++ b/web/public/locales/fa/views/system.json
@@ -2,6 +2,200 @@
"documentTitle": {
"cameras": "آمار دوربینها - فریگیت",
"storage": "آمار حافظه - فریگیت",
- "general": "آمار عمومی - فریگیت"
- }
+ "general": "آمار عمومی - فریگیت",
+ "enrichments": "آمار بهینه سازی - فریگیت",
+ "logs": {
+ "frigate": "ثبت رخدادهای فریگیت - فریگیت",
+ "go2rtc": "گزارشهای Go2RTC - فریگیت",
+ "nginx": "گزارشهای Nginx - فریگیت"
+ }
+ },
+ "title": "سیستم",
+ "metrics": "شاخصهای سیستم",
+ "logs": {
+ "download": {
+ "label": "دانلود گزارشها"
+ },
+ "copy": {
+ "label": "کپی در کلیپبورد",
+ "success": "گزارشها در کلیپبورد کپی شدند",
+ "error": "نمیتوان گزارشها را در کلیپبورد کپی کرد"
+ },
+ "type": {
+ "label": "نوع",
+ "timestamp": "برچسب زمانی",
+ "tag": "تگ",
+ "message": "پیام"
+ },
+ "tips": "گزارشها از سرور بهصورت زنده در حال دریافت هستند",
+ "toast": {
+ "error": {
+ "fetchingLogsFailed": "خطا در دریافت گزارشها: {{errorMessage}}",
+ "whileStreamingLogs": "خطا هنگام پخش زندهٔ گزارشها: {{errorMessage}}"
+ }
+ }
+ },
+ "general": {
+ "hardwareInfo": {
+ "title": "اطلاعات سختافزار",
+ "gpuUsage": "مصرف GPU",
+ "gpuMemory": "حافظهٔ GPU",
+ "gpuEncoder": "رمزگذار GPU",
+ "gpuDecoder": "رمزگشای GPU",
+ "gpuInfo": {
+ "vainfoOutput": {
+ "title": "خروجی Vainfo",
+ "returnCode": "کد بازگشتی: {{code}}",
+ "processOutput": "خروجی فرایند:",
+ "processError": "خطای فرایند:"
+ },
+ "nvidiaSMIOutput": {
+ "title": "خروجی Nvidia SMI",
+ "name": "ذخیرهٔ جستوجونام: {{name}}",
+ "driver": "درایور: {{driver}}",
+ "cudaComputerCapability": "قابلیت محاسباتی CUDA: {{cuda_compute}}",
+ "vbios": "اطلاعات VBios: {{vbios}}"
+ },
+ "closeInfo": {
+ "label": "بستن اطلاعات GPU"
+ },
+ "copyInfo": {
+ "label": "کپی اطلاعات GPU"
+ },
+ "toast": {
+ "success": "اطلاعات GPU در کلیپبورد کپی شد"
+ }
+ },
+ "npuUsage": "میزان استفاده از NPU",
+ "npuMemory": "حافظهٔ NPU",
+ "intelGpuWarning": {
+ "title": "هشدار آمار GPU اینتل",
+ "message": "آمار GPU در دسترس نیست",
+ "description": "این یک باگ شناختهشده در ابزارهای گزارشدهی آمار GPU اینتل (intel_gpu_top) است که باعث میشود از کار بیفتد و حتی در مواردی که شتابدهی سختافزاری و تشخیص شیء بهدرستی روی (i)GPU اجرا میشوند، بهطور مکرر میزان استفادهٔ GPU را ۰٪ برگرداند. این مشکل مربوط به Frigate نیست. میتوانید میزبان را ریاستارت کنید تا موقتاً مشکل برطرف شود و تأیید کنید که GPU درست کار میکند. این موضوع روی عملکرد تأثیری ندارد."
+ }
+ },
+ "title": "عمومی",
+ "detector": {
+ "title": "آشکارسازها",
+ "inferenceSpeed": "سرعت استنتاج آشکارساز",
+ "temperature": "دمای آشکارساز",
+ "cpuUsage": "مصرف CPU آشکارساز",
+ "cpuUsageInformation": "CPU برای آمادهسازی دادههای ورودی و خروجی به/از مدلهای تشخیص استفاده میشود. این مقدار مصرف استنتاج را اندازهگیری نمیکند، حتی اگر از GPU یا شتابدهنده استفاده شود.",
+ "memoryUsage": "مصرف حافظهٔ آشکارساز"
+ },
+ "otherProcesses": {
+ "title": "فرایندهای دیگر",
+ "processCpuUsage": "میزان استفادهٔ CPU فرایند",
+ "processMemoryUsage": "میزان استفادهٔ حافظهٔ فرایند"
+ }
+ },
+ "storage": {
+ "recordings": {
+ "earliestRecording": "قدیمیترین ضبط موجود:",
+ "title": "ضبطها",
+ "tips": "این مقدار نشاندهندهٔ کل فضای ذخیرهسازیِ استفادهشده توسط ضبطها در پایگاهدادهٔ Frigate است. Frigate میزان استفاده از فضای ذخیرهسازیِ همهٔ فایلهای روی دیسک شما را ردیابی نمیکند."
+ },
+ "shm": {
+ "warning": "اندازهٔ فعلی SHM برابر {{total}}MB خیلی کوچک است. آن را دستکم به {{min_shm}}MB افزایش دهید.",
+ "title": "اختصاص SHM (حافظهٔ اشتراکی)"
+ },
+ "cameraStorage": {
+ "title": "ذخیرهسازی دوربین",
+ "unusedStorageInformation": "اطلاعات فضای ذخیرهسازیِ استفادهنشده",
+ "percentageOfTotalUsed": "درصد از کل",
+ "unused": {
+ "title": "استفادهنشده",
+ "tips": "اگر فایلهای دیگری غیر از ضبطهای Frigate روی دیسک شما ذخیره شده باشد، این مقدار ممکن است فضای آزادِ در دسترس برای Frigate را دقیق نشان ندهد. Frigate میزان استفاده از فضای ذخیرهسازی خارج از ضبطهای خودش را ردیابی نمیکند."
+ },
+ "camera": "دوربین",
+ "storageUsed": "ذخیرهسازی",
+ "bandwidth": "پهنای باند"
+ },
+ "title": "ذخیرهسازی",
+ "overview": "نمای کلی"
+ },
+ "cameras": {
+ "overview": "نمای کلی",
+ "info": {
+ "cameraProbeInfo": "اطلاعات پروب دوربین {{camera}}",
+ "fetching": "در حال دریافت دادههای دوربین",
+ "video": "ویدئو:",
+ "fps": "FPS:",
+ "audio": "صدا:",
+ "aspectRatio": "نسبت تصویر",
+ "streamDataFromFFPROBE": "دادههای جریان با ffprobe بهدست میآید.",
+ "stream": "جریان {{idx}}",
+ "codec": "کدک:",
+ "resolution": "وضوح:",
+ "unknown": "نامشخص",
+ "error": "خطا: {{error}}",
+ "tips": {
+ "title": "اطلاعات بررسی دوربین"
+ }
+ },
+ "framesAndDetections": "فریمها / تشخیصها",
+ "label": {
+ "detect": "تشخیص",
+ "capture": "گرفتن",
+ "overallDetectionsPerSecond": "مجموع تشخیصها در ثانیه",
+ "cameraCapture": "گرفتن {{camName}}",
+ "cameraDetectionsPerSecond": "تشخیصها در ثانیهٔ {{camName}}",
+ "camera": "دوربین",
+ "skipped": "رد شد",
+ "ffmpeg": "FFmpeg",
+ "overallFramesPerSecond": "نرخ کلی فریم بر ثانیه",
+ "overallSkippedDetectionsPerSecond": "نرخ کلی تشخیصهای ردشده بر ثانیه",
+ "cameraDetect": "تشخیص {{camName}}",
+ "cameraFfmpeg": "{{camName}} FFmpeg",
+ "cameraFramesPerSecond": "{{camName}} فریم بر ثانیه",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} تشخیصهای ردشده در ثانیه"
+ },
+ "toast": {
+ "error": {
+ "unableToProbeCamera": "پروبِ دوربین ناموفق بود: {{errorMessage}}"
+ },
+ "success": {
+ "copyToClipboard": "دادههای بررسی در کلیپبورد کپی شد."
+ }
+ },
+ "title": "دوربینها"
+ },
+ "stats": {
+ "ffmpegHighCpuUsage": "{{camera}} استفادهٔ CPU بالایی برای FFmpeg دارد ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} استفادهٔ CPU بالایی برای تشخیص دارد ({{detectAvg}}%)",
+ "reindexingEmbeddings": "بازتولید نمایهٔ embeddingها ({{processed}}% تکمیل شده)",
+ "cameraIsOffline": "{{camera}} آفلاین است",
+ "detectIsVerySlow": "{{detect}} بسیار کند است ({{speed}} ms)",
+ "shmTooLow": "اختصاص /dev/shm ({{total}} MB) باید دستکم تا {{min}} MB افزایش یابد.",
+ "healthy": "سامانه سالم است",
+ "detectIsSlow": "{{detect}} کند است ( {{speed}} میلیثانیه )"
+ },
+ "enrichments": {
+ "infPerSecond": "استنتاجها در ثانیه",
+ "embeddings": {
+ "text_embedding": "امبدینگ متن",
+ "image_embedding_speed": "سرعت امبدینگ تصویر",
+ "plate_recognition_speed": "سرعت تشخیص پلاک",
+ "yolov9_plate_detection": "تشخیص پلاک YOLOv9",
+ "review_description_events_per_second": "توضیح بازبینی",
+ "object_description": "توضیح شیء",
+ "image_embedding": "امبدینگ تصویر",
+ "face_recognition": "شناسایی چهره",
+ "plate_recognition": "شناسایی پلاک",
+ "face_embedding_speed": "سرعت امبدینگ چهره",
+ "face_recognition_speed": "سرعت شناسایی چهره",
+ "text_embedding_speed": "سرعت امبدینگ متن",
+ "yolov9_plate_detection_speed": "سرعت تشخیص پلاک YOLOv9",
+ "review_description": "توضیحات بازبینی",
+ "review_description_speed": "سرعت توضیحات بازبینی",
+ "object_description_speed": "سرعت توضیحات شیء",
+ "object_description_events_per_second": "توضیحات شیء",
+ "classification": "طبقهبندی {{name}}",
+ "classification_speed": "سرعت طبقهبندی {{name}}",
+ "classification_events_per_second": "رویدادهای طبقهبندی {{name}} در ثانیه"
+ },
+ "title": "غنیسازیها",
+ "averageInf": "میانگین زمان استنتاج"
+ },
+ "lastRefreshed": "آخرین بهروزرسانی: · "
}
diff --git a/web/public/locales/fi/views/classificationModel.json b/web/public/locales/fi/views/classificationModel.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fi/views/classificationModel.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fr/audio.json b/web/public/locales/fr/audio.json
index b773f026b..b34615853 100644
--- a/web/public/locales/fr/audio.json
+++ b/web/public/locales/fr/audio.json
@@ -1,10 +1,10 @@
{
- "speech": "Conversation",
+ "speech": "Parole",
"babbling": "Babillage",
- "yell": "Crier",
+ "yell": "Cri",
"bicycle": "Vélo",
"car": "Voiture",
- "bellow": "Ci-dessous",
+ "bellow": "Beuglement",
"whispering": "Chuchotement",
"laughter": "Rires",
"snicker": "Ricanement",
@@ -13,7 +13,7 @@
"bus": "Bus",
"train": "Train",
"motorcycle": "Moto",
- "whoop": "Cri",
+ "whoop": "Cri strident",
"sigh": "Soupir",
"singing": "Chant",
"choir": "Chorale",
@@ -22,7 +22,7 @@
"mantra": "Mantra",
"child_singing": "Chant d'enfant",
"bird": "Oiseau",
- "cat": "chat",
+ "cat": "Chat",
"synthetic_singing": "Chant synthétique",
"rapping": "Rap",
"horse": "Cheval",
@@ -31,15 +31,15 @@
"whistling": "Sifflement",
"breathing": "Respiration",
"snoring": "Ronflement",
- "gasp": "Souffle",
+ "gasp": "Souffle coupé",
"pant": "halètement",
- "snort": "Reniflement",
+ "snort": "Ébrouement",
"camera": "Caméra",
- "cough": "Toussotement",
+ "cough": "Toux",
"groan": "Gémissement",
"grunt": "Grognement",
- "throat_clearing": "Éclaircissement de la gorge",
- "wheeze": "Respiration bruyante",
+ "throat_clearing": "Raclement de gorge",
+ "wheeze": "Respiration sifflante",
"sneeze": "Éternuement",
"sniff": "Reniflement",
"chewing": "Mastication",
@@ -72,7 +72,7 @@
"burping": "Rots",
"fart": "Pet",
"crowd": "Foule",
- "children_playing": "Enfants en train de jouer",
+ "children_playing": "Jeux d'enfants",
"animal": "Animal",
"bark": "Aboiement",
"pig": "Cochon",
@@ -80,7 +80,7 @@
"chicken": "Poulet",
"turkey": "Dinde",
"duck": "Canard",
- "goose": "Dindon",
+ "goose": "Oie",
"wild_animals": "Animaux Sauvages",
"crow": "Corbeau",
"dogs": "Chiens",
@@ -99,31 +99,31 @@
"vehicle": "Véhicule",
"skateboard": "Skateboard",
"door": "Porte",
- "blender": "Mixer",
- "hair_dryer": "Sèche cheveux",
+ "blender": "Mixeur",
+ "hair_dryer": "Sèche-cheveux",
"toothbrush": "Brosse à dents",
- "sink": "Lavabo",
- "scissors": "Paire de ciseaux",
+ "sink": "Évier",
+ "scissors": "Ciseaux",
"humming": "Bourdonnement",
- "shuffle": "Mélanger",
- "footsteps": "Pas",
+ "shuffle": "Pas traînants",
+ "footsteps": "Bruits de pas",
"hiccup": "Hoquet",
"finger_snapping": "Claquement de doigts",
"clapping": "Claquements",
"applause": "Applaudissements",
"heartbeat": "Battements de coeur",
- "cheering": "Applaudissement",
+ "cheering": "Acclamations",
"electric_shaver": "Rasoir électrique",
"truck": "Camion",
- "run": "Démarrer",
+ "run": "Course",
"biting": "Mordre",
"stomach_rumble": "Gargouillements d'estomac",
"hands": "Mains",
"heart_murmur": "Souffle au cœur",
- "chatter": "Bavarder",
+ "chatter": "Bavardage",
"pets": "Animaux de compagnie",
- "yip": "Ouais",
- "howl": "Hurler",
+ "yip": "Jappement",
+ "howl": "Hurlement",
"growling": "Grondement",
"whimper_dog": "Gémissements de chien",
"purr": "Ronronnements",
@@ -132,8 +132,8 @@
"livestock": "Bétail",
"neigh": "Hennissement",
"quack": "Coin-coin",
- "honk": "Klaxon",
- "roaring_cats": "Feulements",
+ "honk": "Cacardement",
+ "roaring_cats": "Rugissement de félins",
"roar": "Rugissements",
"chirp": "Gazouillis",
"squawk": "Braillement",
@@ -191,7 +191,7 @@
"steelpan": "Pan",
"orchestra": "Orchestre",
"brass_instrument": "Cuivres",
- "french_horn": "Cor français",
+ "french_horn": "Cor d'harmonie",
"trumpet": "Trompette",
"bowed_string_instrument": "Instrument à cordes frottées",
"string_section": "Section des cordes",
@@ -247,7 +247,7 @@
"sad_music": "Musique triste",
"tender_music": "Musique tendre",
"exciting_music": "Musique stimulante",
- "angry_music": "Musique énervée",
+ "angry_music": "Musique agressive",
"scary_music": "Musique effrayante",
"wind": "Vent",
"rustling_leaves": "Bruissements de feuilles",
@@ -277,7 +277,7 @@
"skidding": "Dérapage",
"tire_squeal": "Crissements de pneu",
"car_passing_by": "Passage de voiture",
- "race_car": "Course de voitures",
+ "race_car": "Voiture de course",
"air_brake": "Frein pneumatique",
"air_horn": "Klaxon à air",
"reversing_beeps": "Bips de marche arrière",
@@ -311,7 +311,7 @@
"squeak": "Grincement",
"cupboard_open_or_close": "Ouverture ou fermeture de placard",
"drawer_open_or_close": "Ouverture ou fermeture de tiroir",
- "dishes": "Plats",
+ "dishes": "Bruit de vaisselle",
"cutlery": "Couverts",
"chopping": "Hacher",
"frying": "Friture",
@@ -324,7 +324,7 @@
"zipper": "Fermeture éclair",
"keys_jangling": "Tintements de clés",
"coin": "Pièce de monnaie",
- "shuffling_cards": "Mélange de cartes",
+ "shuffling_cards": "Battement de cartes",
"typing": "Frappe au clavier",
"typewriter": "Machine à écrire",
"writing": "Écriture",
@@ -414,16 +414,90 @@
"idling": "Ralenti",
"radio": "Radio",
"telephone": "Téléphone",
- "bow_wow": "Ouaf ouaf",
+ "bow_wow": "Aboiement",
"hiss": "Sifflement",
"clip_clop": "Clic-clac",
"cattle": "Bétail",
"moo": "Meuglement",
"cowbell": "Clochette",
"oink": "Grouin-grouin",
- "bleat": "Bêler",
+ "bleat": "Bêlement",
"fowl": "Volaille",
"cluck": "Gloussement",
"cock_a_doodle_doo": "Cocorico",
- "gobble": "Glouglou"
+ "gobble": "Glouglou",
+ "chird": "Accord",
+ "change_ringing": "Carillon de cloches",
+ "sodeling": "Sodèle",
+ "shofar": "Choffar",
+ "liquid": "Liquide",
+ "splash": "Éclaboussure",
+ "slosh": "Clapotis",
+ "squish": "Bruit de pataugeage",
+ "drip": "Goutte à goutte",
+ "trickle": "Filet",
+ "gush": "Jet",
+ "fill": "Remplir",
+ "spray": "Pulvérisation",
+ "pump": "Pompe",
+ "stir": "Remuer",
+ "boiling": "Ébullition",
+ "arrow": "Flèche",
+ "pour": "Verser",
+ "sonar": "Sonar",
+ "whoosh": "Whoosh",
+ "thump": "Coup sourd",
+ "thunk": "Bruit sourd",
+ "electronic_tuner": "Accordeur électronique",
+ "effects_unit": "Unité d'effets",
+ "chorus_effect": "Effet de chœur",
+ "basketball_bounce": "Rebond de basket-ball",
+ "bang": "Détonation",
+ "slap": "Gifle",
+ "whack": "Coup sec",
+ "smash": "Fracasser",
+ "breaking": "Bruit de casse",
+ "bouncing": "Rebondissement",
+ "whip": "Fouet",
+ "flap": "Battement",
+ "scratch": "Grattement",
+ "scrape": "Raclement",
+ "rub": "Frottement",
+ "roll": "Roulement",
+ "crushing": "Écrasement",
+ "crumpling": "Froissement",
+ "tearing": "Déchirure",
+ "beep": "Bip",
+ "ping": "Ping",
+ "ding": "Ding",
+ "clang": "Bruit métallique",
+ "squeal": "Grincement",
+ "creak": "Craquer",
+ "rustle": "Bruissement",
+ "whir": "Vrombissement",
+ "clatter": "Bruit",
+ "sizzle": "Grésillement",
+ "clicking": "Cliquetis",
+ "clickety_clack": "Clic-clac",
+ "rumble": "Grondement",
+ "plop": "Ploc",
+ "hum": "Hum",
+ "harmonic": "Harmonique",
+ "outside": "Extérieur",
+ "reverberation": "Réverbération",
+ "echo": "Écho",
+ "distortion": "Distorsion",
+ "vibration": "Vibration",
+ "zing": "Sifflement",
+ "crunch": "Croque",
+ "sine_wave": "Onde sinusoïdale",
+ "chirp_tone": "Gazouillis",
+ "pulse": "Impulsion",
+ "inside": "Intérieur",
+ "noise": "Bruit",
+ "mains_hum": "Bourdonnement du secteur",
+ "sidetone": "Retour de voix",
+ "cacophony": "Cacophonie",
+ "throbbing": "Pulsation",
+ "boing": "Boing"
}
diff --git a/web/public/locales/fr/common.json b/web/public/locales/fr/common.json
index 960dd1d0d..a1132a01e 100644
--- a/web/public/locales/fr/common.json
+++ b/web/public/locales/fr/common.json
@@ -1,6 +1,6 @@
{
"time": {
- "untilForRestart": "Jusqu'au redémarrage de Frigate.",
+ "untilForRestart": "Jusqu'au redémarrage de Frigate",
"untilRestart": "Jusqu'au redémarrage",
"untilForTime": "Jusqu'à {{time}}",
"justNow": "À l'instant",
@@ -22,10 +22,10 @@
"pm": "PM",
"am": "AM",
"yr": "{{time}} a",
- "year_one": "{{time}} année",
- "year_many": "{{time}} années",
- "year_other": "{{time}} années",
- "mo": "{{time}} m",
+ "year_one": "{{time}} an",
+ "year_many": "{{time}} ans",
+ "year_other": "{{time}} ans",
+ "mo": "{{time}} mois",
"month_one": "{{time}} mois",
"month_many": "{{time}} mois",
"month_other": "{{time}} mois",
@@ -33,7 +33,7 @@
"second_one": "{{time}} seconde",
"second_many": "{{time}} secondes",
"second_other": "{{time}} secondes",
- "m": "{{time}} mn",
+ "m": "{{time}} min",
"hour_one": "{{time}} heure",
"hour_many": "{{time}} heures",
"hour_other": "{{time}} heures",
@@ -65,29 +65,32 @@
},
"formattedTimestampHourMinute": {
"24hour": "HH:mm",
- "12hour": "HH:mm aaa"
+ "12hour": "HH:mm"
},
"formattedTimestampMonthDay": "d MMM",
"formattedTimestampFilename": {
- "12hour": "dd-MM-yy-HH-mm-ss-a",
+ "12hour": "dd-MM-yy-HH-mm-ss",
"24hour": "dd-MM-yy-HH-mm-ss"
},
"formattedTimestampMonthDayHourMinute": {
- "12hour": "d MMM, HH:mm aaa",
+ "12hour": "d MMM, HH:mm",
"24hour": "d MMM, HH:mm"
},
"formattedTimestampHourMinuteSecond": {
"24hour": "HH:mm:ss",
- "12hour": "HH:mm:ss aaa"
+ "12hour": "HH:mm:ss"
},
"formattedTimestampMonthDayYearHourMinute": {
- "12hour": "d MMM yyyy, HH:mm aaa",
+ "12hour": "d MMM yyyy, HH:mm",
"24hour": "d MMM yyyy, HH:mm"
},
"formattedTimestampMonthDayYear": {
"12hour": "d MMM, yyyy",
"24hour": "d MMM,yyyy"
- }
+ },
+ "inProgress": "En cours",
+ "invalidStartTime": "Heure de début invalide",
+ "invalidEndTime": "Heure de fin invalide"
},
"button": {
"apply": "Appliquer",
@@ -98,16 +101,16 @@
"close": "Fermer",
"copy": "Copier",
"back": "Retour",
- "history": "Historique",
- "pictureInPicture": "Image en incrustation",
+ "history": "Chronologie",
+ "pictureInPicture": "Image dans l'image",
"twoWayTalk": "Conversation bidirectionnelle",
- "off": "Inactif",
- "edit": "Editer",
+ "off": "OFF",
+ "edit": "Modifier",
"copyCoordinates": "Copier les coordonnées",
"delete": "Supprimer",
"yes": "Oui",
"no": "Non",
- "unsuspended": "Reprendre",
+ "unsuspended": "Réactiver",
"play": "Lire",
"unselect": "Désélectionner",
"suspended": "Suspendu",
@@ -120,11 +123,12 @@
"next": "Suivant",
"exitFullscreen": "Sortir du mode plein écran",
"cameraAudio": "Son de la caméra",
- "on": "Actif",
+ "on": "ON",
"export": "Exporter",
"deleteNow": "Supprimer maintenant",
"download": "Télécharger",
- "done": "Terminé"
+ "done": "Terminé",
+ "continue": "Continuer"
},
"menu": {
"configuration": "Configuration",
@@ -142,14 +146,14 @@
"nl": "Nederlands (Néerlandais)",
"sv": "Svenska (Suédois)",
"cs": "Čeština (Tchèque)",
- "nb": "Norsk Bokmål (Bokmål Norvégien)",
+ "nb": "Norsk Bokmål (Norvégien Bokmål)",
"ko": "한국어 (Coréen)",
- "fa": "فارسی (Perse)",
+ "fa": "فارسی (Persan)",
"pl": "Polski (Polonais)",
"el": "Ελληνικά (Grec)",
"ro": "Română (Roumain)",
"hu": "Magyar (Hongrois)",
- "he": "עברית (Hebreu)",
+ "he": "עברית (Hébreu)",
"ru": "Русский (Russe)",
"de": "Deutsch (Allemand)",
"es": "Español (Espagnol)",
@@ -163,14 +167,14 @@
"yue": "粵語 (Cantonais)",
"th": "ไทย (Thai)",
"ca": "Català (Catalan)",
- "ptBR": "Português brasileiro (portugais brésilien)",
+ "ptBR": "Português brasileiro (Portugais brésilien)",
"sr": "Српски (Serbe)",
- "sl": "Slovenščina (slovène)",
- "lt": "Lietuvių (lithuanien)",
- "bg": "Български (bulgare)",
- "gl": "Galego (galicien)",
- "id": "Bahasa Indonesia (indonésien)",
- "ur": "اردو (ourdou)"
+ "sl": "Slovenščina (Slovène)",
+ "lt": "Lietuvių (Lithuanien)",
+ "bg": "Български (Bulgare)",
+ "gl": "Galego (Galicien)",
+ "id": "Bahasa Indonesia (Indonésien)",
+ "ur": "اردو (Ourdou)"
},
"appearance": "Apparence",
"darkMode": {
@@ -181,7 +185,7 @@
},
"label": "Mode sombre"
},
- "review": "Revue d'événements",
+ "review": "Activités",
"explore": "Explorer",
"export": "Exporter",
"user": {
@@ -199,18 +203,18 @@
},
"system": "Système",
"help": "Aide",
- "configurationEditor": "Editeur de configuration",
+ "configurationEditor": "Éditeur de configuration",
"theme": {
"contrast": "Contraste élevé",
"blue": "Bleu",
"green": "Vert",
"nord": "Nord",
"red": "Rouge",
- "default": "Défaut",
+ "default": "Par défaut",
"label": "Thème",
"highcontrast": "Contraste élevé"
},
- "systemMetrics": "Indicateurs systèmes",
+ "systemMetrics": "Métriques du système",
"settings": "Paramètres",
"withSystem": "Système",
"restart": "Redémarrer Frigate",
@@ -224,25 +228,26 @@
"allCameras": "Toutes les caméras",
"title": "Direct"
},
- "uiPlayground": "Gestion de l'interface",
+ "uiPlayground": "Bac à sable de l'interface",
"faceLibrary": "Bibliothèque de visages",
- "languages": "Langues"
+ "languages": "Langues",
+ "classification": "Classification"
},
"toast": {
"save": {
"title": "Enregistrer",
"error": {
"noMessage": "Echec lors de l'enregistrement des changements de configuration",
- "title": "Echec lors de l'enregistrement des changements de configuration : {{errorMessage}}"
+ "title": "Échec de l'enregistrement des changements de configuration : {{errorMessage}}"
}
},
- "copyUrlToClipboard": "Lien copié dans le presse-papier."
+ "copyUrlToClipboard": "URL copiée dans le presse-papiers"
},
"role": {
"title": "Rôle",
"viewer": "Observateur",
"admin": "Administrateur",
- "desc": "Les administrateurs accèdent à l'ensemble des fonctionnalités de l'interface Frigate. Les observateurs sont limités à la consultation des caméras, de la revue d'événements, et à l'historique des enregistrements dans l'interface utilisateur."
+ "desc": "Les administrateurs ont un accès complet à toutes les fonctionnalités de l'interface Frigate. Les observateurs sont limités à la consultation des caméras, des activités, et à l'historique des enregistrements dans l'interface."
},
"pagination": {
"next": {
@@ -266,10 +271,15 @@
"accessDenied": {
"title": "Accès refusé",
"documentTitle": "Accès refusé - Frigate",
- "desc": "Vous n'avez pas l'autorisation de voir cette page."
+ "desc": "Vous n'avez pas l'autorisation de consulter cette page."
},
"label": {
- "back": "Retour"
+ "back": "Retour",
+ "hide": "Masquer {{item}}",
+ "show": "Afficher {{item}}",
+ "ID": "ID",
+ "none": "Aucun",
+ "all": "Tous"
},
"unit": {
"speed": {
@@ -279,6 +289,26 @@
"length": {
"feet": "pieds",
"meters": "mètres"
+ },
+ "data": {
+ "kbps": "ko/s",
+ "mbps": "Mo/s",
+ "gbps": "Go/s",
+ "kbph": "ko/heure",
+ "mbph": "Mo/heure",
+ "gbph": "Go/heure"
}
+ },
+ "information": {
+ "pixels": "{{area}}px"
+ },
+ "field": {
+ "optional": "Facultatif",
+ "internalID": "L'ID interne utilisée par Frigate dans la configuration et la base de donnêes"
+ },
+ "list": {
+ "two": "{{0}} et {{1}}",
+ "many": "{{items}}, et {{last}}",
+ "separatorWithSpace": ", "
}
}
diff --git a/web/public/locales/fr/components/auth.json b/web/public/locales/fr/components/auth.json
index 65e26691b..3e600fb71 100644
--- a/web/public/locales/fr/components/auth.json
+++ b/web/public/locales/fr/components/auth.json
@@ -1,15 +1,16 @@
{
"form": {
"password": "Mot de passe",
- "login": "Identifiant",
+ "login": "Connexion",
"user": "Nom d'utilisateur",
"errors": {
"unknownError": "Erreur inconnue. Vérifiez les journaux.",
"webUnknownError": "Erreur inconnue. Vérifiez les journaux de la console.",
- "passwordRequired": "Un mot de passe est requis",
+ "passwordRequired": "Mot de passe est requis",
"loginFailed": "Échec de l'authentification",
- "usernameRequired": "Un nom d'utilisateur est requis",
- "rateLimit": "Nombre d'essais dépassé. Réessayez plus tard."
- }
+ "usernameRequired": "Nom d'utilisateur requis",
+ "rateLimit": "Trop de tentatives. Veuillez réessayer plus tard."
+ },
+ "firstTimeLogin": "Première connexion ? Vos identifiants se trouvent dans les journaux de Frigate."
}
}
diff --git a/web/public/locales/fr/components/camera.json b/web/public/locales/fr/components/camera.json
index 8595697bc..0e95c70e3 100644
--- a/web/public/locales/fr/components/camera.json
+++ b/web/public/locales/fr/components/camera.json
@@ -1,38 +1,38 @@
{
"group": {
- "edit": "Éditer le groupe de caméras",
- "label": "Groupe de caméras",
+ "edit": "Modifier le groupe de caméras",
+ "label": "Groupes de caméras",
"add": "Ajouter un groupe de caméras",
"delete": {
"label": "Supprimer le groupe de caméras",
"confirm": {
- "title": "Confirmer la suppression",
+ "title": "Confirmez la suppression",
"desc": "Êtes-vous sûr de vouloir supprimer le groupe de caméras {{name}} ?"
}
},
"name": {
- "placeholder": "Saisissez un nom…",
+ "placeholder": "Saisissez un nom.",
"label": "Nom",
"errorMessage": {
"mustLeastCharacters": "Le nom du groupe de caméras doit comporter au moins 2 caractères.",
"exists": "Le nom du groupe de caméras existe déjà.",
- "nameMustNotPeriod": "Le nom de groupe de caméras ne doit pas contenir de période.",
- "invalid": "Nom de groupe de caméras invalide."
+ "nameMustNotPeriod": "Le nom de groupe de caméras ne doit pas contenir de point.",
+ "invalid": "Nom de groupe de caméras invalide"
}
},
"cameras": {
"label": "Caméras",
- "desc": "Sélectionner les caméras pour ce groupe."
+ "desc": "Sélectionnez les caméras pour ce groupe."
},
"success": "Le groupe de caméras ({{name}}) a été enregistré.",
"icon": "Icône",
"camera": {
"setting": {
- "label": "Paramètres de flux de caméra",
- "title": "Paramètres de flux de {{cameraName}}",
- "audioIsUnavailable": "L'audio n'est pas disponible pour ce flux",
- "audioIsAvailable": "L'audio est disponible pour ce flux",
- "desc": "Modifie les options du flux temps réel pour le tableau de bord de ce groupe de caméras. Ces paramètres sont spécifiques à un périphérique et/ou navigateur.",
+ "label": "Paramètres du flux de la caméra",
+ "title": "Paramètres du flux de {{cameraName}}",
+ "audioIsUnavailable": "L'audio n'est pas disponible pour ce flux.",
+ "audioIsAvailable": "L'audio est disponible pour ce flux.",
+ "desc": "Modifier les options du flux temps réel pour le tableau de bord de ce groupe de caméras. Ces paramètres sont spécifiques à l'appareil ou au navigateur.",
"audio": {
"tips": {
"document": "Lire la documentation ",
@@ -40,32 +40,32 @@
}
},
"streamMethod": {
- "label": "Méthode de streaming",
+ "label": "Méthode de diffusion",
"method": {
"noStreaming": {
- "label": "Pas de diffusion",
- "desc": "Les images provenant de la caméra ne seront mises à jour qu'une fois par minute et il n'y aura pas de diffusion en direct."
+ "label": "Aucune diffusion",
+ "desc": "Les images provenant de la caméra ne seront mises à jour qu'une fois par minute et il n'y aura aucune diffusion en direct."
},
"smartStreaming": {
- "label": "Diffusion intelligente (recommandé)",
- "desc": "La diffusion intelligente mettra à jour les images de la caméra une fois par minute lorsqu'aucune activité n'est détectée afin de conserver la bande-passante et les ressources. Quand une activité est détectée, le flux bascule automatiquement en diffusion temps réel."
+ "label": "Diffusion intelligente (recommandée)",
+ "desc": "La diffusion intelligente mettra à jour l'image de la caméra une fois par minute lorsqu'aucune activité n'est détectée, afin de préserver la bande passante et les ressources. Quand une activité est détectée, l'image bascule automatiquement en flux temps réel."
},
"continuousStreaming": {
"label": "Diffusion en continu",
"desc": {
"title": "L'image de la caméra sera toujours un flux temps réel lorsqu'elle est visible dans le tableau de bord, même si aucune activité n'est détectée.",
- "warning": "La diffusion en continu peut engendrer une bande-passante élevée et des problèmes de performance. A utiliser avec précaution."
+ "warning": "La diffusion en continu peut entraîner une consommation de bande passante élevée et des problèmes de performance. À utiliser avec prudence."
}
}
},
- "placeholder": "Choisissez une méthode de diffusion"
+ "placeholder": "Choisissez une méthode de diffusion."
},
"compatibilityMode": {
"label": "Mode de compatibilité",
- "desc": "Activer cette option uniquement si votre flux temps réel affiche des erreurs chromatiques et a une ligne diagonale sur le côté droit de l'image."
+ "desc": "Activez cette option uniquement si votre flux temps réel affiche des artefacts chromatiques et présente une ligne diagonale sur le côté droit de l'image."
},
"stream": "Flux",
- "placeholder": "Choisissez un flux"
+ "placeholder": "Choisissez un flux."
},
"birdseye": "Birdseye"
}
@@ -80,7 +80,7 @@
"label": "Paramètres",
"hideOptions": "Masquer les options"
},
- "boundingBox": "Boîte de délimitation",
+ "boundingBox": "Cadre de détection",
"zones": "Zones",
"regions": "Régions"
}
diff --git a/web/public/locales/fr/components/dialog.json b/web/public/locales/fr/components/dialog.json
index 111baf88c..f0b542b70 100644
--- a/web/public/locales/fr/components/dialog.json
+++ b/web/public/locales/fr/components/dialog.json
@@ -2,8 +2,8 @@
"restart": {
"title": "Êtes-vous sûr de vouloir redémarrer Frigate ?",
"restarting": {
- "title": "Frigate redémarre",
- "content": "Actualisation de la page dans {{countdown}} secondes.",
+ "title": "Redémarrage de Frigate en cours",
+ "content": "Cette page sera rechargée dans {{countdown}} secondes.",
"button": "Forcer l'actualisation maintenant"
},
"button": "Redémarrer"
@@ -31,10 +31,10 @@
"submitted": "Soumis"
},
"question": {
- "label": "Confirmez ce libellé pour Frigate+",
- "ask_an": "Est-ce que cet objet est un(e) {{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,26 @@
"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.",
+ "view": "Vue"
},
"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 +89,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 +103,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..0926f4cd6
--- /dev/null
+++ b/web/public/locales/fr/views/classificationModel.json
@@ -0,0 +1,193 @@
+{
+ "documentTitle": "Modèles de classification - Frigate",
+ "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",
+ "renamedCategory": "Classe renommée en {{name}} 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": "L'entraînement du modèle a échoué. Consultez les journaux de Frigate pour plus de détails.",
+ "deleteModelFailed": "Impossible de supprimer le modèle : {{errorMessage}}",
+ "updateModelFailed": "Impossible de mettre à jour le modèle : {{errorMessage}}",
+ "renameCategoryFailed": "Impossible de renommer la classe : {{errorMessage}}",
+ "trainingFailedToStart": "Impossible de démarrer l'entraînement du 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.",
+ "minClassesTitle": "Impossible de supprimer la classe",
+ "minClassesDesc": "Un modèle de classification doit avoir au moins 2 classes. Ajoutez une autre classe avant de supprimer celle-ci."
+ },
+ "deleteDatasetImages": {
+ "title": "Supprimer les images du jeu de données",
+ "desc_one": "Êtes-vous sûr de vouloir supprimer {{count}} image du jeu de données {{dataset}} ? Cette action est irréversible et nécessitera un réentraînement du modèle.",
+ "desc_many": "Ê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.",
+ "desc_other": "Ê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_one": "Êtes-vous sûr de vouloir supprimer {{count}} image ? Cette action est irréversible.",
+ "desc_many": "Êtes-vous sûr de vouloir supprimer {{count}} images ? Cette action est irréversible.",
+ "desc_other": "Ê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.",
+ "noneNotAllowed": "La classe 'aucun' n'est pas autorisée."
+ },
+ "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",
+ "allImagesRequired_one": "Veuillez classifier toutes les images. {{count}} image restante.",
+ "allImagesRequired_many": "Veuillez classifier toutes les images. {{count}} images restantes.",
+ "allImagesRequired_other": "Veuillez classifier toutes les images. {{count}} images restantes.",
+ "modelCreated": "Modèle créé avec succès. Utilisez la vue Classifications récentes pour ajouter des images pour les états manquants, puis entraînez le modèle.",
+ "missingStatesWarning": {
+ "title": "Exemples d'états manquants",
+ "description": "Pour des résultats optimaux, il est recommandé de sélectionner des exemples pour tous les états. Vous pouvez continuer sans cette étape, mais le modèle ne sera entraîné que lorsque chaque état disposera d'images. Continuez, puis utilisez la vue Classifications récentes pour classer les images manquantes et lancer l'entraînement."
+ }
+ }
+ },
+ "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_one": "Voulez-vous vraiment supprimer {{count}} modèle ? 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_many": "Voulez-vous vraiment supprimer {{count}} modèles ? 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_other": "Voulez-vous vraiment supprimer {{count}} modèles ? 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.",
+ "none": "Aucun",
+ "unknown": "Inconnu"
+ },
+ "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."
+ },
+ "tooltip": {
+ "trainingInProgress": "Modèle en cours d'entraînement",
+ "noNewImages": "Aucune nouvelle image pour l'entraînement. Veuillez d'abord classifier plus d'images dans le jeu de données.",
+ "modelNotReady": "Le modèle n'est pas prêt pour l'entraînement.",
+ "noChanges": "Aucune modification du jeu de données depuis le dernier entraînement"
+ },
+ "none": "Aucun"
+}
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..6baaf9b93 100644
--- a/web/public/locales/fr/views/events.json
+++ b/web/public/locales/fr/views/events.json
@@ -2,22 +2,26 @@
"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",
- "motion": "Aucune donnée de mouvement trouvée"
+ "alert": "Aucune alerte à traiter",
+ "detection": "Aucune détection à traiter",
+ "motion": "Aucune donnée de mouvement trouvée",
+ "recordingsDisabled": {
+ "title": "Les enregistrements doivent être activés.",
+ "description": "Les activités ne peuvent être générées pour une caméra que si l'enregistrement est activé pour celle-ci."
+ }
},
"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": "Activités - Frigate",
"recordings": {
"documentTitle": "Enregistrements - Frigate"
},
@@ -25,17 +29,40 @@
"last24Hours": "Dernières 24 heures"
},
"timeline.aria": "Sélectionner une chronologie",
- "markAsReviewed": "Marqué comme passé en revue",
+ "markAsReviewed": "Marquer comme traitê",
"newReviewItems": {
- "button": "Nouveaux éléments à passer en revue",
- "label": "Afficher les nouveaux éléments de la revue d'événements"
+ "button": "Nouvelles activités à traiter",
+ "label": "Afficher les nouvelles activités"
},
"camera": "Caméra",
- "markTheseItemsAsReviewed": "Marquer ces éléments comme passés en revue",
+ "markTheseItemsAsReviewed": "Marquer ces activités comme traitées",
"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 à traiter",
+ "aria": "Activer/désactiver la vue détaillée",
+ "trackedObject_one": "{{count}} objet",
+ "trackedObject_other": "{{count}} 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 pour l'activité en cours"
+ }
+ },
+ "objectTrack": {
+ "trackedPoint": "Point suivi",
+ "clickToSeek": "Cliquez pour atteindre ce moment."
+ },
+ "zoomIn": "Zoom avant",
+ "zoomOut": "Zoom arrière",
+ "normalActivity": "Normal",
+ "needsReview": "À traiter",
+ "securityConcern": "Problème de sécurité",
+ "select_all": "Tous"
}
diff --git a/web/public/locales/fr/views/explore.json b/web/public/locales/fr/views/explore.json
index 064a71a37..637936450 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,52 @@
},
"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'activité",
"button": {
- "share": "Partager cet élément de la revue d'événements",
+ "share": "Partager cette activité",
"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. Selon la vitesse de votre serveur Frigate, la transcription peut prendre un certain temps.",
+ "updatedAttributes": "Attributs mis à jour 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}}",
+ "updatedAttributesFailed": "Échec de la mise à jour des attributs : {{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 cette activité. 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 cette activité. 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 cette activité. 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'activité"
},
- "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 +88,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",
@@ -103,13 +105,23 @@
},
"score": {
"label": "Score"
+ },
+ "editAttributes": {
+ "title": "Modifier les attributs",
+ "desc": "Sélectionnez les attributs de classification pour : {{label}}"
+ },
+ "attributes": "Attributs de classification",
+ "title": {
+ "label": "Titre"
}
},
"type": {
"details": "détails",
"video": "vidéo",
"object_lifecycle": "cycle de vie de l'objet",
- "snapshot": "instantané"
+ "snapshot": "instantané",
+ "thumbnail": "Miniature",
+ "tracking_details": "Détails du suivi"
},
"objectLifecycle": {
"title": "Cycle de vie de l'objet",
@@ -120,8 +132,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 +141,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 +151,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 +187,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 +208,26 @@
"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"
+ },
+ "downloadCleanSnapshot": {
+ "label": "Télécharger l'instantané vierge",
+ "aria": "Télécharger l'instantané vierge"
}
},
"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 +180,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 +196,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 +340,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 +365,7 @@
},
"snapPoints": {
"true": "Points d'accrochage",
- "false": "Ne cassez pas les points"
+ "false": "Ne pas réunir les points"
}
},
"loiteringTime": {
@@ -366,7 +380,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 +394,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 sur cette caméra."
},
"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,11 +425,11 @@
"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": {
- "success": "La zone ({{zoneName}}) a été enregistrée. Redémarrez Frigate pour appliquer les modifications."
+ "success": "La zone ({{zoneName}}) a été enregistrée."
},
"objects": {
"title": "Objets",
@@ -426,7 +440,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."
@@ -443,8 +457,8 @@
"clickDrawPolygon": "Cliquer pour dessiner un polygone sur l'image.",
"toast": {
"success": {
- "title": "{{polygonName}} a été enregistré. Redémarrez Frigate pour appliquer les modifications.",
- "noName": "Le masque de mouvement a été enregistré. Redémarrez Frigate pour appliquer les modifications."
+ "title": "{{polygonName}} a été enregistré.",
+ "noName": "Le masque de mouvement a été enregistré."
}
},
"desc": {
@@ -454,7 +468,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."
@@ -468,15 +482,15 @@
},
"toast": {
"success": {
- "noName": "Le masque d'objet a été enregistré. Redémarrez Frigate pour appliquer les modifications.",
- "title": "{{polygonName}} a été enregistré. Redémarrez Frigate pour appliquer les modifications."
+ "noName": "Le masque d'objet a été enregistré.",
+ "title": "{{polygonName}} a été enregistré."
}
},
"point_one": "{{count}} point",
"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 +512,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 +535,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 +578,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 +589,7 @@ "currentRMS": "RMS actuel", "currentdbFS": "dbFS actuel" }, - "openCameraWebUI": "Ouvre l'interface Web de {{camera}}" + "openCameraWebUI": "Ouvrir l'interface Web de {{camera}}" }, "users": { "title": "Utilisateurs", @@ -584,7 +598,7 @@ "desc": "Gérez les comptes utilisateurs de cette instance Frigate." }, "addUser": "Ajouter un utilisateur", - "updatePassword": "Mettre à jour le mot de passe", + "updatePassword": "Réinitialiser le mot de passe", "toast": { "success": { "roleUpdated": "Rôle mis à jour pour {{user}}", @@ -604,7 +618,7 @@ "actions": "Actions", "noUsers": "Aucun utilisateur trouvé.", "changeRole": "Changer le rôle d'utilisateur", - "password": "Mot de passe", + "password": "Réinitialiser le mot de passe", "deleteUser": "Supprimer un utilisateur", "role": "Rôle" }, @@ -612,35 +626,48 @@ "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" + }, + "show": "Afficher le mot de passe", + "hide": "Masquer le mot de passe", + "requirements": { + "title": "Critères du mot de passe :", + "length": "Au moins 8 caractères", + "uppercase": "Au moins une lettre majuscule", + "digit": "Au moins un chiffre", + "special": "Au moins un caractère spécial (!@#$%^&*(),.?\":{}|<>)" } }, "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", - "passwordIsRequired": "Mot de passe requis" + "usernameIsRequired": "Nom d'utilisateur requis", + "passwordIsRequired": "Mot de passe requis", + "currentPassword": { + "title": "Mot de passe actuel", + "placeholder": "Saisissez votre mot de passe actuel" + } }, "deleteUser": { "title": "Supprimer un utilisateur", @@ -649,10 +676,15 @@ }, "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" + "cannotBeEmpty": "Le mot de passe ne peut être vide", + "currentPasswordRequired": "Le mot de passe actuel est requis.", + "incorrectCurrentPassword": "Le mot de passe actuel est incorrect", + "passwordVerificationFailed": "Échec de la vérification du mot de passe", + "multiDeviceWarning": "Tout autre appareil connecté devra se reconnecter dans un délai de {{refresh_time}}.", + "multiDeviceAdmin": "Vous pouvez également forcer la ré-authentification immédiate de tous les utilisateurs en renouvelant votre clé de sécurité JWT." }, "changeRole": { "title": "Changer le rôle de l'utilisateur", @@ -662,7 +694,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, Activités, Explorer et Exports.", "customDesc": "Rôle personnalisé avec accès spécifique à la caméra" }, "select": "Sélectionnez un rôle" @@ -670,7 +702,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 +711,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 +738,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 permet de retrouver des objets suivis au sein de vos activités en utilisant l'image elle-même, une description personnalisée ou une description générée automatiquement." }, "unsavedChanges": "Modifications non enregistrées des paramètres d'enrichissements", "faceRecognition": { @@ -714,33 +746,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 +783,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 +793,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 +803,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 +813,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 +845,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 +873,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 +907,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 +915,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}} utilisateur affecté à ce rôle a été mis à jour avec des droits \"Observateur\", et a accès à toutes les caméras.", + "userRolesUpdated_many": "{{count}} utilisateurs affectés à ce rôle ont été mis à jour avec des droits \"Observateur\", et ont accès à toutes les caméras.", + "userRolesUpdated_other": "{{count}} utilisateurs affectés à ce rôle ont été mis à jour avec des droits \"Observateur\", et ont accès à toutes les caméras." }, "error": { "createRoleFailed": "Échec dans la création du rôle : {{errorMessage}}", @@ -866,22 +932,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 +957,358 @@ } } } + }, + "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", + "probeOrSnapshot": "Sondage ou Instantané" + }, + "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 choisissez d'interroger la caméra ou de sélectionner manuellement la marque.", + "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..." + }, + "connectionSettings": "Paramètres de connexion", + "detectionMethod": "Méthode de détection du flux", + "onvifPort": "Port ONVIF", + "probeMode": "Interroger la caméra", + "manualMode": "Sélection manuelle", + "detectionMethodDescription": "Interrogez la caméra avec ONVIF (si pris en charge) pour trouver les URL de flux de la caméra, ou sélectionnez manuellement la marque de la caméra pour utiliser des URL prédéfinies. Pour saisir une URL RTSP personnalisée, choisissez la méthode manuelle et sélectionnez \"Autre\".", + "onvifPortDescription": "Pour les caméras prenant en charge ONVIF, il s'agit généralement de 80 ou 8080.", + "useDigestAuth": "Utiliser l'authentification Digest", + "useDigestAuthDescription": "Utilisez l'authentification Digest HTTP pour ONVIF. Certaines caméras peuvent nécessiter un nom d'utilisateur/mot de passe ONVIF dédié au lieu de l'utilisateur administrateur standard." + }, + "step2": { + "description": "Interrogez la caméra pour les flux disponibles ou configurez des paramètres manuels en fonction de la méthode de détection sélectionnée.", + "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 de connexion réussi !", + "testFailed": "Échec du test de connexion. Veuillez vérifier votre saisie et réessayer.", + "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." + }, + "streamDetails": "Détails du flux", + "probing": "Interrogation de la caméra en cours...", + "retry": "Réessayer", + "testing": { + "probingMetadata": "Interrogation des métadonnées de la caméra en cours...", + "fetchingSnapshot": "Récupération de l'instantané de la caméra en cours..." + }, + "probeFailed": "Impossible d'interroger la caméra : {{error}}", + "probingDevice": "Interrogation de l'appareil en cours...", + "probeSuccessful": "Interrogation réussie", + "probeError": "Erreur d'interrogation", + "probeNoSuccess": "Échec de l'interrogation", + "deviceInfo": "Informations sur l'appareil", + "manufacturer": "Fabricant", + "model": "Modèle", + "firmware": "Micrologiciel", + "profiles": "Profils", + "ptzSupport": "Prise en charge PTZ", + "autotrackingSupport": "Prise en charge du suivi automatique", + "presets": "Préréglages", + "rtspCandidates": "Candidats RTSP", + "rtspCandidatesDescription": "Les URL RTSP suivantes ont été trouvées lors de l'interrogation de la caméra. Testez la connexion pour afficher les métadonnées du flux.", + "noRtspCandidates": "Aucune URL RTSP n'a été trouvée sur la caméra. Vos identifiants sont peut-être incorrects, ou la caméra ne prend peut-être pas en charge ONVIF ou la méthode utilisée pour récupérer les URL RTSP. Revenez en arrière et saisissez l'URL RTSP manuellement.", + "candidateStreamTitle": "Candidat {{number}}", + "useCandidate": "Utiliser", + "uriCopy": "Copier", + "uriCopied": "URI copiée dans le presse-papiers", + "testConnection": "Tester la connexion", + "toggleUriView": "Cliquer pour basculer l'affichage de l'URI complet", + "errors": { + "hostRequired": "L'hôte/adresse IP est requis." + } + }, + "step3": { + "description": "Configurez les rôles des flux et ajoutez des flux supplémentaires pour votre caméra.", + "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.", + "streamsTitle": "Flux de la caméra", + "addStream": "Ajouter un flux", + "addAnotherStream": "Ajouter un autre flux", + "streamUrl": "URL du flux", + "streamUrlPlaceholder": "rtsp://nomdutilisateur:motdepasse@hote:port/chemin", + "selectStream": "Sélectionner un flux", + "searchCandidates": "Rechercher des candidats", + "noStreamFound": "Aucun flux trouvé", + "url": "URL", + "resolution": "Résolution", + "selectResolution": "Sélectionner la résolution", + "quality": "Qualité", + "selectQuality": "Sélectionner la qualité", + "roleLabels": { + "detect": "Détection d'objet", + "record": "Enregistrement", + "audio": "Audio" + }, + "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": "Fonctionnalités", + "go2rtc": "Réduire les connexions à la caméra", + "detectRoleWarning": "Au moins un flux doit avoir le rôle 'détection' pour continuer.", + "rolesPopover": { + "title": "Rôles du flux", + "detect": "Flux principal pour la détection d'objet", + "record": "Enregistre des segments du flux vidéo en fonction des paramètres de configuration", + "audio": "Flux pour la détection basée sur l'audio" + }, + "featuresPopover": { + "title": "Fonctionnalités du flux", + "description": "Utiliser la rediffusion go2rtc pour réduire les connexions à votre caméra" + } + }, + "step4": { + "description": "Validation et analyse finales avant d'enregistrer votre nouvelle caméra. Connectez chaque flux avant d'enregistrer.", + "validationTitle": "Validation du flux", + "connectAllStreams": "Connecter tous les flux", + "reconnectionSuccess": "Reconnexion réussie", + "reconnectionPartial": "Certains flux n'ont pas réussi à se reconnecter.", + "streamUnavailable": "Aperçu du flux non disponible", + "reload": "Recharger", + "connecting": "En cours de connexion...", + "streamTitle": "Flux {{number}}", + "valid": "Valide", + "failed": "Échec", + "notTested": "Non testé", + "connectStream": "Connecter", + "connectingStream": "En cours de connexion", + "disconnectStream": "Déconnecter", + "estimatedBandwidth": "Bande passante estimée", + "roles": "Rôles", + "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.", + "none": "Aucun", + "error": "Erreur", + "streamValidated": "Flux {{number}} validé avec succès", + "streamValidationFailed": "Échec de la validation du flux {{number}}", + "saveAndApply": "Enregistrer la 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}}.", + "resolutionHigh": "Une résolution de {{resolution}} peut entraîner une utilisation accrue des ressources.", + "resolutionLow": "Une résolution de {{resolution}} peut être trop faible pour une détection fiable des petits objets.", + "noAudioWarning": "Aucun audio détecté pour ce flux, les enregistrements n'auront pas de son.", + "audioCodecRecordError": "Le codec audio AAC est requis pour prendre en charge l'audio dans les enregistrements.", + "audioCodecRequired": "Un flux audio est requis pour prendre en charge la détection audio.", + "restreamingWarning": "Réduire les connexions à la caméra pour le flux d'enregistrement peut légèrement augmenter l'utilisation du processeur.", + "brands": { + "reolink-rtsp": "Le RTSP Reolink n'est pas recommandé. Activez HTTP dans les paramètres du micrologiciel de la caméra et redémarrez l'assistant.", + "reolink-http": "Les flux HTTP de Reolink devraient utiliser FFmpeg pour une meilleure compatibilité. Activez 'Utiliser le mode de compatibilité du flux' pour ce flux." + }, + "dahua": { + "substreamWarning": "Le sous-flux 1 est limité à une basse résolution. De nombreuses caméras Dahua / Amcrest / EmpireTech prennent en charge des sous-flux supplémentaires qui doivent être activés dans les paramètres de la caméra. Il est recommandé de vérifier et d'utiliser ces flux s'ils sont disponibles." + }, + "hikvision": { + "substreamWarning": "Le sous-flux 1 est limité à une basse résolution. De nombreuses caméras Hikvision prennent en charge des sous-flux supplémentaires qui doivent être activés dans les paramètres de la caméra. Il est recommandé de vérifier et d'utiliser ces flux s'ils sont disponibles." + } + } + } + }, + "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'interroger 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}} : charge CPU 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,17 +179,27 @@
"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",
- "yolov9_plate_detection_speed": "Vitesse de détection de plaques d'immatriculation YOLOv9"
- }
+ "text_embedding": "Vitesse d'embedding de visage",
+ "yolov9_plate_detection_speed": "Vitesse de détection de plaques d'immatriculation YOLOv9",
+ "review_description": "Description de l'activité",
+ "review_description_speed": "Vitesse de description des activités",
+ "review_description_events_per_second": "Description de l'activité",
+ "object_description": "Description de l'objet",
+ "object_description_speed": "Vitesse de la description d'objet",
+ "object_description_events_per_second": "Description de l'objet",
+ "classification": "Classification {{name}}",
+ "classification_speed": "Vitesse de classification {{name}}",
+ "classification_events_per_second": "Événements de classification par seconde {{name}}"
+ },
+ "averageInf": "Temps d'inférence moyen"
}
}
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..711a8d338 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": "סיטאר",
@@ -94,7 +94,7 @@
"electronic_organ": "אורגן חשמלי",
"hammond_organ": "עוגב המונד",
"synthesizer": "סינתיסייזר",
- "sampler": "דגם",
+ "sampler": "דוגם",
"harpsichord": "צֶ'מבָּלוֹ",
"percussion": "הַקָשָׁה",
"boat": "סירה",
@@ -102,7 +102,7 @@
"motorcycle": "אופנוע",
"bus": "אוטובוס",
"bicycle": "אופניים",
- "train": "למד פנים",
+ "train": "אימון",
"skateboard": "סקייטבורד",
"camera": "מצלמה",
"howl": "יללה",
@@ -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,79 @@
"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": "לְגַרֵד",
+ "scrape": "סריקה",
+ "rub": "שפשוף",
+ "roll": "גלגול",
+ "crushing": "מעיכה",
+ "crumpling": "קימוט",
+ "tearing": "קריעה",
+ "beep": "ביפ",
+ "ping": "פינג",
+ "ding": "דינג",
+ "clang": "צלצול מתכתי",
+ "squeal": "חריקה",
+ "creak": "חריקה",
+ "rustle": "רשרוש",
+ "whir": "זמזום",
+ "clatter": "רעש נקישות",
+ "chird": "Chird",
+ "sizzle": "צליל חריכה",
+ "clicking": "נקישות",
+ "clickety_clack": "נקישות רצופות",
+ "rumble": "רעם נמוך",
+ "plop": "פלופ",
+ "hum": "המהום",
+ "zing": "זמזום חד",
+ "boing": "בּוֹאִינְג (צליל קפיצי / אלסטי)",
+ "crunch": "חריקה / פיצוח"
}
diff --git a/web/public/locales/he/common.json b/web/public/locales/he/common.json
index 813d44e51..1059ae300 100644
--- a/web/public/locales/he/common.json
+++ b/web/public/locales/he/common.json
@@ -78,7 +78,10 @@
"12hour": "MMM d, yyyy"
},
"30minutes": "30 דקות",
- "thisMonth": "החודש"
+ "thisMonth": "החודש",
+ "inProgress": "בתהליך",
+ "invalidStartTime": "זמן התחלה לא תקין",
+ "invalidEndTime": "זמן סיום לא תקין"
},
"unit": {
"speed": {
@@ -88,10 +91,24 @@
"length": {
"feet": "רגל",
"meters": "מטרים"
+ },
+ "data": {
+ "kbps": "kB/s",
+ "mbps": "MB/s",
+ "gbps": "GB/s",
+ "kbph": "kB/hour",
+ "mbph": "MB/hour",
+ "gbph": "GB/hour"
}
},
"label": {
- "back": "אחורה"
+ "back": "אחורה",
+ "hide": "הסתר {{item}}",
+ "show": "הצג {{item}}",
+ "ID": "ID",
+ "none": "ללא",
+ "all": "הכל",
+ "other": "אחר"
},
"button": {
"apply": "החל",
@@ -128,7 +145,8 @@
"on": "פעיל",
"download": "הורדה",
"info": "מידע",
- "next": "הבא"
+ "next": "הבא",
+ "continue": "המשך"
},
"menu": {
"system": "מערכת",
@@ -229,7 +247,8 @@
"current": "משתמש מחובר: {{user}}",
"setPassword": "קביעת סיסמה",
"title": "משתמש"
- }
+ },
+ "classification": "סיווג"
},
"toast": {
"copyUrlToClipboard": "כתובת האתר המועתקת.",
@@ -270,5 +289,17 @@
"desc": "דף לא נמצא"
},
"selectItem": "בחירה:{{item}}",
- "readTheDocumentation": "קרא את התיעוד"
+ "readTheDocumentation": "קרא את התיעוד",
+ "list": {
+ "two": "{{0}} ו־{{1}}",
+ "many": "{{items}}, ו־{{last}}",
+ "separatorWithSpace": ", "
+ },
+ "field": {
+ "optional": "אופציונלי",
+ "internalID": "המזהה הפנימי ש־Frigate משתמש בו בהגדרות ובמסד הנתונים"
+ },
+ "information": {
+ "pixels": "{{area}}px"
+ }
}
diff --git a/web/public/locales/he/components/auth.json b/web/public/locales/he/components/auth.json
index 17b28cba1..0f6caf3cf 100644
--- a/web/public/locales/he/components/auth.json
+++ b/web/public/locales/he/components/auth.json
@@ -10,6 +10,7 @@
"webUnknownError": "שגיאה לא ידועה, בדוק את הלוגים.",
"rateLimit": "חרגת מהמגבלת בקשות. נסה שוב מאוחר יותר.",
"loginFailed": "ההתחברות נכשלה"
- }
+ },
+ "firstTimeLogin": "מתחבר בפעם הראשונה? פרטי ההתחברות מודפסים בלוגים של פריגייט."
}
}
diff --git a/web/public/locales/he/components/camera.json b/web/public/locales/he/components/camera.json
index f9de9a6c1..184b192bd 100644
--- a/web/public/locales/he/components/camera.json
+++ b/web/public/locales/he/components/camera.json
@@ -41,7 +41,8 @@
"label": "מצב תאימות",
"desc": "הפעל אפשרות זו רק אם השידור החי של המצלמה שלך מציג עיוותים בצבע ויש לו קו אלכסוני בצד ימין של התמונה."
}
- }
+ },
+ "birdseye": "מבט על"
},
"edit": "ערכית קבוצת מצלמות",
"delete": {
diff --git a/web/public/locales/he/components/dialog.json b/web/public/locales/he/components/dialog.json
index 472d3d541..85353b993 100644
--- a/web/public/locales/he/components/dialog.json
+++ b/web/public/locales/he/components/dialog.json
@@ -15,7 +15,8 @@
"failed": "נכשל בהתחלת הייצוא: {{error}}",
"noVaildTimeSelected": "לא נבחר טווח זמן תקף"
},
- "success": "הייצוא הוחל בהצלחה. הצג את הקובץ בתיקייה /ייצוא."
+ "success": "הייצוא התחיל בהצלחה. ניתן לצפות בקובץ בעמוד הייצוא.",
+ "view": "תצוגה"
},
"time": {
"end": {
@@ -108,7 +109,16 @@
"button": {
"export": "ייצוא",
"markAsReviewed": "סמן כסוקר",
- "deleteNow": "מחיקה כעת"
+ "deleteNow": "מחיקה כעת",
+ "markAsUnreviewed": "סימון כלא נבדק"
}
+ },
+ "imagePicker": {
+ "selectImage": "בחר תמונה ממוזערת של אובייקט במעקב",
+ "unknownLabel": "תמונת הטריגר נשמרה",
+ "search": {
+ "placeholder": "חיפוש לפי תווית או תווית משנה…"
+ },
+ "noImages": "לא נמצאו תמונות ממוזערות עבור מצלמה זו"
}
}
diff --git a/web/public/locales/he/components/filter.json b/web/public/locales/he/components/filter.json
index 2316722ca..b11aba954 100644
--- a/web/public/locales/he/components/filter.json
+++ b/web/public/locales/he/components/filter.json
@@ -1,11 +1,11 @@
{
- "filter": "לסנן",
+ "filter": "מסנן",
"features": {
"submittedToFrigatePlus": {
"tips": "עליך תחילה לסנן לפי אובייקטים במעקב שיש להם תמונת מצב.נתיבים
קווים ועיגולים יציינו נקודות משמעותיות שבהן האובייקט במעקב נע במהלך מחזור חייו.
" + } }, "users": { "title": "משתמשים", @@ -431,7 +458,7 @@ "desc": "נהל את חשבונות המשתמשים של מופע Frigate זה." }, "addUser": "הוספת משתמש", - "updatePassword": "עדכון סיסמה", + "updatePassword": "איפוס סיסמה", "toast": { "success": { "createUser": "המשתמש {{user}} נוצר בהצלחה", @@ -451,7 +478,7 @@ "role": "הרשאות", "noUsers": "לא נמצאו משתמשים.", "changeRole": "שינוי הרשאות משתמש", - "password": "סיסמה", + "password": "איפוס סיסמה", "deleteUser": "מחיקת משתמש", "username": "שם משתמש" }, @@ -477,7 +504,16 @@ "veryStrong": "מאוד חזק" }, "match": "סיסמאות תואמות", - "notMatch": "הסיסמאות אינן תואמות." + "notMatch": "הסיסמאות אינן תואמות.", + "show": "הצג סיסמה", + "hide": "הסתר סיסמה", + "requirements": { + "title": "דרישות סיסמה:", + "length": "לפחות 8 תווים", + "uppercase": "לפחות אות גדולה אחת", + "digit": "לפחות ספרה אחת", + "special": "לפחות תו מיוחד אחד (!@#$%^&*(),.?\":{}|<>)" + } }, "newPassword": { "title": "סיסמה חדשה", @@ -487,7 +523,11 @@ } }, "usernameIsRequired": "נדרש שם משתמש", - "passwordIsRequired": "נדרשת סיסמה" + "passwordIsRequired": "נדרשת סיסמה", + "currentPassword": { + "title": "סיסמה נוכחית", + "placeholder": "הזן את הסיסמה הנוכחית שלך" + } }, "createUser": { "title": "יצירת משתמש חדש", @@ -505,7 +545,12 @@ "doNotMatch": "הסיסמאות אינן תואמות", "updatePassword": "עדכון סיסמה עבור {{username}}", "setPassword": "קבע סיסמה", - "desc": "צור סיסמה חזקה כדי לאבטח חשבון זה." + "desc": "צור סיסמה חזקה כדי לאבטח חשבון זה.", + "currentPasswordRequired": "נדרשת הסיסמה הנוכחית", + "incorrectCurrentPassword": "הסיסמה הנוכחית שגויה", + "passwordVerificationFailed": "נכשל באימות הסיסמה", + "multiDeviceWarning": "כל מכשיר אחר שבו אתה מחובר יידרש להתחבר מחדש בתוך {{refresh_time}}.", + "multiDeviceAdmin": "ניתן גם לאלץ את כל המשתמשים להתחבר מחדש באופן מיידי על־ידי החלפת מפתח ה־JWT שלך." }, "changeRole": { "title": "שינוי הרשאות משתמש", @@ -516,7 +561,8 @@ "admin": "מנהל", "adminDesc": "גישה מלאה לכל התכונות.", "viewer": "צופה", - "viewerDesc": "מוגבל לדשבורד שידור חי, סקירה, גילוי וייצוא בלבד." + "viewerDesc": "מוגבל לדשבורד שידור חי, סקירה, גילוי וייצוא בלבד.", + "customDesc": "תפקיד מותאם אישית עם גישה למצלמות מסוימות." } } } @@ -619,5 +665,454 @@ "success": "הגדרות Frigate+ נשמרו. הפעל מחדש את Frigate כדי להחיל את השינויים.", "error": "שמירת שינויי התצורה נכשלה: {{errorMessage}}" } + }, + "cameraWizard": { + "step1": { + "brandInformation": "פרטי יצרן", + "brandUrlFormat": "למצלמות עם פורמט כתובת RTSP כמו: {{exampleUrl}}", + "connectionSettings": "הגדרות חיבור", + "detectionMethod": "שיטת זיהוי זרם", + "onvifPort": "פורט ONVIF", + "probeMode": "בדיקת מצלמה", + "manualMode": "בחירה ידנית", + "detectionMethodDescription": "בדוק את המצלמה באמצעות ONVIF (אם נתמך) כדי למצוא את כתובות הזרמים שלה, או בחר ידנית את יצרן המצלמה כדי להשתמש בכתובות מוגדרות מראש.\nכדי להזין כתובת RTSP מותאמת אישית, בחר בשיטה ידנית ואז בחר \"אחר\".", + "onvifPortDescription": "במצלמות שתומכות ב-ONVIF, זה בדרך כלל 80 או 8080.", + "useDigestAuth": "שימוש באימות Digest", + "useDigestAuthDescription": "השתמש באימות HTTP Digest עבור ONVIF. בחלק מהמצלמות נדרש שם משתמש/סיסמה ייעודיים ל-ONVIF, ולא משתמש ה-Admin הרגיל.", + "errors": { + "brandOrCustomUrlRequired": "בחר יצרן מצלמה והזן Host/IP, או בחר “אחר” והזן כתובת מותאמת אישית", + "nameRequired": "שם המצלמה הוא שדה חובה", + "nameLength": "שם המצלמה חייב להיות באורך של עד 64 תווים", + "invalidCharacters": "שם המצלמה מכיל תווים לא חוקיים", + "nameExists": "שם המצלמה כבר קיים", + "customUrlRtspRequired": "כתובות מותאמות אישית חייבות להתחיל ב־\"rtsp://\". עבור זרמי מצלמה שאינם RTSP נדרשת הגדרה ידנית." + }, + "description": "הזן את פרטי המצלמה ובחר אם לבצע בדיקה למצלמה או לבחור ידנית את היצרן.", + "cameraName": "שם מצלמה", + "cameraNamePlaceholder": "לדוגמה: front_door או סקירת החצר האחורית", + "host": "HOST / כתובת IP", + "port": "פורט", + "username": "שם משתמש", + "usernamePlaceholder": "אופציונלי", + "password": "סיסמה", + "passwordPlaceholder": "אופציונלי", + "selectTransport": "בחר פרוטוקול תעבורה", + "cameraBrand": "יצרן מצלמה", + "selectBrand": "בחר יצרן מצלמה עבור תבנית כתובת ה-URL", + "customUrl": "כתובת (URL) זרם מותאמת אישית", + "customUrlPlaceholder": "rtsp://username:password@host:port/path" + }, + "step2": { + "description": "בדוק את המצלמה כדי לאתר זרמים זמינים, או הגדר ידנית את ההגדרות לפי שיטת הזיהוי שבחרת.", + "testSuccess": "בדיקת החיבור הצליחה!", + "testFailed": "בדיקת החיבור נכשלה. בדוק את הנתונים שהזנת ונסה שוב.", + "testFailedTitle": "הבדיקה נכשלה", + "streamDetails": "פרטי זרם", + "probing": "בודק מצלמה...", + "retry": "נסה שוב", + "testing": { + "probingMetadata": "בודק את נתוני המטא של המצלמה…", + "fetchingSnapshot": "שולף תמונת מצב מהמצלמה…" + }, + "probeFailed": "בדיקת המצלמה נכשלה: {{error}}", + "probingDevice": "בודק את ההתקן…", + "probeSuccessful": "הבדיקה הצליחה", + "probeError": "בדיקה נכשלה", + "probeNoSuccess": "הבדיקה לא הצליחה", + "deviceInfo": "מידע על ההתקן", + "manufacturer": "יצרן", + "model": "דגם", + "firmware": "קושחה", + "profiles": "פרופילים", + "ptzSupport": "תמיכה ב-PTZ", + "autotrackingSupport": "תמיכה ב-Autotracking", + "presets": "פריסטים", + "rtspCandidates": "כתובות RTSP מוצעות", + "rtspCandidatesDescription": "כתובות ה־RTSP הבאות נמצאו בבדיקת המצלמה. בצע בדיקת חיבור כדי לצפות בנתוני הזרם (Metadata).", + "noRtspCandidates": "לא נמצאו כתובות RTSP מהמצלמה. ייתכן שפרטי ההתחברות שגויים, או שהמצלמה לא תומכת ב-ONVIF, או שהשיטה שבה השתמשנו לשליפת כתובות RTSP אינה נתמכת. חזור אחורה והזן את כתובת ה-RTSP ידנית.", + "candidateStreamTitle": "אפשרות {{number}}", + "useCandidate": "השתמש", + "uriCopy": "העתק", + "uriCopied": "הכתובת (URI) הועתקה ללוח", + "testConnection": "בדיקת חיבור", + "toggleUriView": "לחץ כדי להציג/להסתיר את הכתובת המלאה", + "connected": "מחובר", + "notConnected": "לא מחובר", + "errors": { + "hostRequired": "כתובת Host/IP היא שדה חובה" + } + }, + "step3": { + "description": "הגדר תפקידי זרם (Roles) והוסף זרמים נוספים למצלמה שלך.", + "streamsTitle": "זרמי מצלמה", + "addStream": "הוסף זרם", + "addAnotherStream": "הוסף זרם נוסף", + "streamTitle": "זרם {{number}}", + "streamUrl": "כתובת הזרם (URL)", + "selectStream": "בחר זרם", + "searchCandidates": "חיפוש אפשרויות…", + "noStreamFound": "לא נמצא זרם", + "url": "URL", + "resolution": "רזולוציה", + "selectResolution": "בחר רזולוציה", + "quality": "איכות", + "selectQuality": "בחר איכות", + "roles": "תפקידים", + "roleLabels": { + "detect": "זיהוי אובייקטים", + "record": "הקלטה", + "audio": "קול (Audio)" + }, + "testStream": "בדיקת חיבור", + "testSuccess": "בדיקת הזרם הצליחה!", + "testFailed": "בדיקת הזרם נכשלה", + "testFailedTitle": "הבדיקה נכשלה", + "connected": "מחובר", + "notConnected": "לא מחובר", + "featuresTitle": "תכונות", + "go2rtc": "הפחתת חיבורים למצלמה", + "detectRoleWarning": "כדי להמשיך, לפחות זרם אחד חייב להיות עם ייעוד \"detect\".", + "rolesPopover": { + "title": "ייעודי הזרם", + "detect": "הזרם הראשי לזיהוי אובייקטים.", + "record": "שומר קטעים מזרם הווידאו לפי הגדרות התצורה.", + "audio": "זרם לזיהוי מבוסס אודיו." + }, + "featuresPopover": { + "title": "תכונות הזרם", + "description": "השתמש ב־go2rtc לריסטרים (Restream) כדי להפחית את מספר החיבורים למצלמה שלך." + }, + "streamUrlPlaceholder": "rtsp://username:password@host:port/path" + }, + "step4": { + "description": "אימות וניתוח סופיים לפני שמירת המצלמה החדשה. התחבר לכל זרם לפני השמירה.", + "validationTitle": "אימות הזרם", + "connectAllStreams": "התחברות לכל הזרמים", + "reconnectionSuccess": "חיבור מחדש הצליח.", + "reconnectionPartial": "חלק מהזרמים לא הצליחו להתחבר מחדש.", + "streamUnavailable": "תצוגה מקדימה של הזרם אינה זמינה", + "reload": "טעינה מחדש", + "connecting": "מתחבר...", + "streamTitle": "זרם {{number}}", + "valid": "תקין", + "failed": "נכשל", + "notTested": "לא נבדק", + "connectStream": "התחבר", + "connectingStream": "מתחבר", + "disconnectStream": "נתק", + "estimatedBandwidth": "רוחב־פס משוער", + "roles": "ייעודים", + "ffmpegModule": "שימוש במצב תאימות לזרם", + "ffmpegModuleDescription": "אם הזרם לא נטען אחרי כמה ניסיונות, נסה להפעיל את זה. כשהאפשרות פעילה, Frigate ישתמש במודול ffmpeg יחד עם go2rtc. זה עשוי לשפר תאימות עם זרמים של חלק מהמצלמות.", + "none": "ללא", + "error": "שגיאה", + "streamValidated": "הזרם {{number}} אומת בהצלחה", + "streamValidationFailed": "אימות הזרם {{number}} נכשל", + "saveAndApply": "שמירת מצלמה חדשה", + "saveError": "תצורה לא תקינה. בדוק את ההגדרות שלך.", + "issues": { + "title": "אימות הזרם", + "videoCodecGood": "קידוד הווידאו הוא {{codec}}.", + "audioCodecGood": "קידוד האודיו הוא {{codec}}.", + "resolutionHigh": "רזולוציה של {{resolution}} עשויה לגרום לשימוש מוגבר במשאבים.", + "resolutionLow": "רזולוציה של {{resolution}} עשויה להיות נמוכה מדי לזיהוי אמין של אובייקטים קטנים.", + "noAudioWarning": "לא זוהה אודיו בזרם הזה, ולכן ההקלטות יהיו ללא שמע.", + "audioCodecRecordError": "כדי לכלול אודיו בהקלטות נדרש קידוד שמע AAC.", + "audioCodecRequired": "כדי לאפשר זיהוי אודיו נדרש זרם שמע.", + "restreamingWarning": "הפחתת מספר החיבורים למצלמה עבור זרם ההקלטה (record) עשויה להעלות מעט את השימוש ב־CPU.", + "brands": { + "reolink-rtsp": "RTSP של Reolink לא מומלץ. הפעל HTTP בהגדרות הקושחה של המצלמה, ואז הפעל מחדש את אשף ההגדרה.", + "reolink-http": "בזרמי HTTP של Reolink מומלץ להשתמש ב־FFmpeg לתאימות טובה יותר. הפעל עבור הזרם הזה את האפשרות “שימוש במצב תאימות לזרם”." + }, + "dahua": { + "substreamWarning": "זרם משנה 1 נעול לרזולוציה נמוכה. מצלמות רבות של Dahua / Amcrest / EmpireTech תומכות בזרמי משנה נוספים שצריך להפעיל בהגדרות המצלמה מומלץ לבדוק אם קיימים זרמי משנה כאלה ולהשתמש בהם במידה וזמינים." + }, + "hikvision": { + "substreamWarning": "זרם משנה 1 נעול לרזולוציה נמוכה. מצלמות רבות של Hikvision תומכות בזרמי משנה נוספים שצריך להפעיל בהגדרות המצלמה. מומלץ לבדוק אם קיימים זרמי משנה כאלה ולהשתמש בהם, אם הם זמינים." + } + } + }, + "title": "הוסף מצלמה", + "description": "בצע את השלבים הבאים כדי להוסיף מצלמה חדשה להתקנת ה־Frigate שלך.", + "steps": { + "nameAndConnection": "שם וחיבור", + "probeOrSnapshot": "בדיקה (Probe) או צילום תמונה (Snapshot)", + "streamConfiguration": "הגדרות זרם", + "validationAndTesting": "אימות ובדיקה" + }, + "save": { + "success": "המצלמה החדשה {{cameraName}} נשמרה בהצלחה.", + "failure": "שגיאה בשמירת {{cameraName}}." + }, + "testResultLabels": { + "resolution": "רזולוציה", + "video": "וידיאו", + "audio": "אודיו", + "fps": "FPS" + }, + "commonErrors": { + "noUrl": "אנא ספק כתובת URL תקינה לזרם", + "testFailed": "בדיקת הזרם נכשלה: {{error}}" + } + }, + "cameraManagement": { + "title": "ניהול מצלמות", + "addCamera": "הוספת מצלמה חדשה", + "editCamera": "עריכת מצלמה:", + "selectCamera": "בחירת מצלמה", + "backToSettings": "חזרה להגדרות מצלמה", + "streams": { + "title": "הפעלה / השבתה של מצלמות", + "desc": "השבת מצלמה זמנית עד ש־Frigate יופעל מחדש. השבתת מצלמה עוצרת לחלוטין את העיבוד של Frigate עבור זרמי המצלמה הזו. זיהוי, הקלטה וניפוי שגיאות לא יהיו זמינים.{{label}}?",
+ "ask_an": "Da li je ovaj objekt {{label}}?",
+ "ask_full": "Da li je ovaj objekt {{untranslatedLabel}} ({{translatedLabel}})?"
+ },
+ "state": {
+ "submitted": "Poslano"
+ }
+ }
+ },
+ "video": {
+ "viewInHistory": "Pogledaj u povijesti"
+ }
+ },
+ "export": {
+ "time": {
+ "lastHour_one": "Zadnji sat",
+ "lastHour_few": "Zadnja {{count}} sata",
+ "lastHour_other": "Zadnjih {{count}} sati",
+ "start": {
+ "title": "Vrijeme početka",
+ "label": "Odaberi vrijeme početka"
+ },
+ "end": {
+ "title": "Vrijeme kraja",
+ "label": "Odaberi vrijeme kraja"
+ },
+ "fromTimeline": "Izaberi sa vremenske crte",
+ "custom": "Prilagođeno"
+ },
+ "name": {
+ "placeholder": "Imenuj Izvoz"
+ },
+ "select": "Odaberi",
+ "export": "Izvoz",
+ "selectOrExport": "Odaberi ili Izvezi",
+ "toast": {
+ "success": "Izvoz je uspješno pokrenut. Datoteku možete pregledati na stranici za izvoz.",
+ "view": "Prikaz",
+ "error": {
+ "failed": "Nije uspjelo pokretanje izvoza: {{error}}",
+ "endTimeMustAfterStartTime": "Vrijeme završetka mora biti nakon vremena početka",
+ "noVaildTimeSelected": "Nema odabranog valjanog vremenskog raspona"
+ }
+ },
+ "fromTimeline": {
+ "saveExport": "Spremi Izvoz",
+ "previewExport": "Pregledaj Izvoz"
+ }
+ },
+ "streaming": {
+ "label": "Emitiraj",
+ "restreaming": {
+ "disabled": "Ponovno emitiranje nije omogućeno za ovu kameru.",
+ "desc": {
+ "title": "Postavi go2rtc za opcije dodatnog prikaza uživo i zvuk za ovu kameru."
+ }
+ },
+ "showStats": {
+ "label": "Pokaži statistike emitiranja",
+ "desc": "Omogući ovu opciju za prikaz statistike emitiranja kao proziran prozor na slici kamere."
+ },
+ "debugView": "Debug Prikaz"
+ },
+ "search": {
+ "saveSearch": {
+ "label": "Spremi Pretragu",
+ "desc": "Dodaj ime za ovu spremljenu pretragu.",
+ "placeholder": "Unesi ime za svoju pretragu",
+ "overwrite": "{{searchName}} već postoji. Spremanje će prepisati postojeću vrijednost.",
+ "success": "Pretraga ({{searchName}}) je spremljena.",
+ "button": {
+ "save": {
+ "label": "Spremi ovu pretragu"
+ }
+ }
+ }
+ },
+ "recording": {
+ "confirmDelete": {
+ "title": "Potvrdi Brisanje",
+ "desc": {
+ "selected": "Jeste li sigurni da želite izbrisati sav snimljen video povezan s ovom preglednom stavkom?detect stream-a, provjeri logove"
+ },
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "Kadar je uspješno poslan u Frigate+"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "Neuspješno slanje kadra u Frigate+"
+ }
+ }
}
diff --git a/web/public/locales/hr/objects.json b/web/public/locales/hr/objects.json
index afc133807..955ebe0cd 100644
--- a/web/public/locales/hr/objects.json
+++ b/web/public/locales/hr/objects.json
@@ -1,3 +1,120 @@
{
- "person": "Osoba"
+ "person": "Osoba",
+ "bicycle": "Bicikl",
+ "car": "Automobil",
+ "motorcycle": "Motocikl",
+ "airplane": "Zrakoplov",
+ "bus": "Autobus",
+ "train": "Vlak",
+ "boat": "ÄŒamac",
+ "traffic_light": "Semafor",
+ "fire_hydrant": "Hidrant",
+ "street_sign": "Prometni znak",
+ "stop_sign": "Znak stop",
+ "bench": "Klupa",
+ "bird": "Ptica",
+ "cat": "MaÄka",
+ "dog": "Pas",
+ "horse": "Konj",
+ "sheep": "Ovca",
+ "cow": "Krava",
+ "parking_meter": "Parkirni Automat",
+ "elephant": "Slon",
+ "bear": "Medvjed",
+ "zebra": "Zebra",
+ "giraffe": "Žirafa",
+ "hat": "Kapa",
+ "backpack": "Ruksak",
+ "umbrella": "Kišobran",
+ "shoe": "Cipela",
+ "eye_glasses": "Naočale",
+ "handbag": "Ručna torba",
+ "tie": "Kravata",
+ "suitcase": "Kovčeg",
+ "frisbee": "Frizbi",
+ "skis": "Skije",
+ "snowboard": "Snowboard",
+ "sports_ball": "Sportska Lopta",
+ "kite": "Zmaj",
+ "baseball_bat": "Baseball Palica",
+ "baseball_glove": "Baseball Rukavica",
+ "skateboard": "Skejtboard",
+ "surfboard": "Daska za surfanje",
+ "tennis_racket": "Teniski reket",
+ "bottle": "Boca",
+ "plate": "Tanjur",
+ "wine_glass": "Vinska Čaša",
+ "cup": "Šalica",
+ "fork": "Vilica",
+ "knife": "Nož",
+ "spoon": "Žlica",
+ "bowl": "Zdjela",
+ "banana": "Banana",
+ "apple": "Jabuka",
+ "sandwich": "Sendvič",
+ "orange": "Naranča",
+ "broccoli": "Brokula",
+ "carrot": "Mrkva",
+ "hot_dog": "Hot Dog",
+ "pizza": "Pizza",
+ "donut": "Krafna",
+ "cake": "Torta",
+ "chair": "Stolica",
+ "couch": "Kauč",
+ "potted_plant": "Biljka u Loncu",
+ "bed": "Krevet",
+ "mirror": "Ogledalo",
+ "dining_table": "Blagovaonski Stol",
+ "window": "Prozor",
+ "desk": "Radni Stol",
+ "toilet": "WC",
+ "door": "Vrata",
+ "tv": "TV",
+ "laptop": "Laptop",
+ "mouse": "Miš",
+ "remote": "Daljinski",
+ "keyboard": "Tipkovnica",
+ "cell_phone": "Mobilni Telefon",
+ "microwave": "Mikrovalna",
+ "oven": "Pećnica",
+ "toaster": "Toster",
+ "sink": "Sudoper",
+ "refrigerator": "Frižider",
+ "blender": "Blender",
+ "book": "Knjiga",
+ "clock": "Sat",
+ "vase": "Vaza",
+ "scissors": "Škare",
+ "teddy_bear": "Plišani Medo",
+ "hair_dryer": "Fen",
+ "toothbrush": "Četkica za zube",
+ "hair_brush": "Četka za kosu",
+ "vehicle": "Vozilo",
+ "squirrel": "Vjeverica",
+ "deer": "Jelen",
+ "animal": "Životinja",
+ "bark": "Kora",
+ "fox": "Lisica",
+ "goat": "Koza",
+ "rabbit": "Zec",
+ "raccoon": "Rakun",
+ "robot_lawnmower": "Robotska Kosilica",
+ "waste_bin": "Kanta za smeće",
+ "on_demand": "Na Zahtjev",
+ "face": "Lice",
+ "license_plate": "Registracijska oznaka",
+ "package": "Paket",
+ "bbq_grill": "Roštilj",
+ "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/hr/views/classificationModel.json b/web/public/locales/hr/views/classificationModel.json
new file mode 100644
index 000000000..a588d5607
--- /dev/null
+++ b/web/public/locales/hr/views/classificationModel.json
@@ -0,0 +1,72 @@
+{
+ "documentTitle": "Klasifikacijski modeli - Frigate",
+ "button": {
+ "deleteImages": "Obriši slike",
+ "trainModel": "Treniraj model",
+ "addClassification": "Dodaj klasifikaciju",
+ "deleteModels": "Obriši modele",
+ "editModel": "Uredi model",
+ "deleteClassificationAttempts": "Izbriši Klasifikacijske Slike",
+ "renameCategory": "Preimenuj klasu",
+ "deleteCategory": "Izbriši Klasu"
+ },
+ "tooltip": {
+ "trainingInProgress": "Model se trenutno trenira",
+ "modelNotReady": "Model nije spreman za treniranje",
+ "noNewImages": "Nema novih slika za treniranje. Prvo klasificirajte više slika u skupu podataka.",
+ "noChanges": "Nema promjena u skupu podataka od posljednjeg treniranja."
+ },
+ "details": {
+ "unknown": "Nepoznato",
+ "none": "Nijedan",
+ "scoreInfo": "Rezultat predstavlja prosječnu klasifikacijsku pouzdanost kroz sve detekcije ovog objekta."
+ },
+ "toast": {
+ "success": {
+ "deletedImage": "Obrisane slike",
+ "deletedCategory": "Izbrisana Klasa",
+ "deletedModel_one": "Uspješno izbrisan {{count}} model",
+ "deletedModel_few": "Uspješno izbrisana {{count}} modela",
+ "deletedModel_other": "Uspješno izbrisano {{count}} modela",
+ "categorizedImage": "Uspješno klasificirana slika",
+ "trainedModel": "Uspješno treniran model.",
+ "trainingModel": "Uspješno započeto treniranje modela.",
+ "updatedModel": "Uspješno ažurirana konfiguracija modela",
+ "renamedCategory": "Uspješno preimenovana klasa na {{name}}"
+ },
+ "error": {
+ "deleteImageFailed": "Neuspješno brisanje: {{errorMessage}}",
+ "deleteCategoryFailed": "Neuspješno brisanje klase: {{errorMessage}}",
+ "deleteModelFailed": "Nije uspjelo brisanje modela: {{errorMessage}}",
+ "categorizeFailed": "Nije uspjelo kategoriziranje slike: {{errorMessage}}"
+ }
+ },
+ "description": {
+ "invalidName": "Nevaljano ime. Ime može samo uključivati slova, brojeve, razmake, navodnike, podcrte i crtice."
+ },
+ "train": {
+ "titleShort": "Nedavno"
+ },
+ "deleteModel": {
+ "desc_one": "Jeste li sigurni da želite izbrisati {{count}} model? Ovo će trajno izbrisati sve povezane podatke, uključujući slike i podatke za treniranje. Ova radnja se ne može poništiti.",
+ "desc_few": "Jeste li sigurni da želite izbrisati {{count}} modela? Ovo će trajno izbrisati sve povezane podatke, uključujući slike i podatke za treniranje. Ova radnja se ne može poništiti.",
+ "desc_other": "Jeste li sigurni da želite izbrisati {{count}} modela? Ovo će trajno izbrisati sve povezane podatke, uključujući slike i podatke za treniranje. Ova radnja se ne može poništiti."
+ },
+ "deleteDatasetImages": {
+ "desc_one": "Jeste li sigurni da želite izbrisati {{count}} sliku iz {{dataset}}? Ova radnja se ne može poništiti i zahtijevat će ponovno treniranje modela.",
+ "desc_few": "Jeste li sigurni da želite izbrisati {{count}} slike iz {{dataset}}? Ova radnja se ne može poništiti i zahtijevat će ponovno treniranje modela.",
+ "desc_other": "Jeste li sigurni da želite izbrisati {{count}} slika iz {{dataset}}? Ova radnja se ne može poništiti i zahtijevat će ponovno treniranje modela."
+ },
+ "deleteTrainImages": {
+ "desc_one": "Jeste li sigurni da želite izbrisati {{count}} sliku? Ova radnja se ne može poništiti.",
+ "desc_few": "Jeste li sigurni da želite izbrisati {{count}} slike? Ova radnja se ne može poništiti.",
+ "desc_other": "Jeste li sigurni da želite izbrisati {{count}} slika? Ova radnja se ne može poništiti."
+ },
+ "wizard": {
+ "step3": {
+ "allImagesRequired_one": "Molimo klasificirajte sve slike. Preostala je {{count}} slika.",
+ "allImagesRequired_few": "Molimo klasificirajte sve slike. Preostale su {{count}} slike.",
+ "allImagesRequired_other": "Molimo klasificirajte sve slike. Preostalo je {{count}} slika."
+ }
+ }
+}
diff --git a/web/public/locales/hr/views/configEditor.json b/web/public/locales/hr/views/configEditor.json
index 6443eaa83..1a5f2d23e 100644
--- a/web/public/locales/hr/views/configEditor.json
+++ b/web/public/locales/hr/views/configEditor.json
@@ -1,3 +1,18 @@
{
- "documentTitle": "Uređivač konfiguracije - Frigate"
+ "documentTitle": "Uređivač konfiguracije - Frigate",
+ "copyConfig": "Kopiraj konfiguraciju",
+ "saveAndRestart": "Spremi i pokreni ponovno",
+ "saveOnly": "Samo spremi",
+ "confirm": "Izađi bez spremanja?",
+ "toast": {
+ "error": {
+ "savingError": "Greška pri spremanju konfiguracije"
+ },
+ "success": {
+ "copyToClipboard": "Konfiguracija je kopirana u međuspremnik."
+ }
+ },
+ "configEditor": "Uređivač konfiguracije",
+ "safeModeDescription": "Frigate je u sigurnom načinu zbog greške u validaciji konfiguracije.",
+ "safeConfigEditor": "Uređivač konfiguracije (Siguran Način)"
}
diff --git a/web/public/locales/hr/views/events.json b/web/public/locales/hr/views/events.json
index b38704712..3bafeee22 100644
--- a/web/public/locales/hr/views/events.json
+++ b/web/public/locales/hr/views/events.json
@@ -1,3 +1,65 @@
{
- "alerts": "Upozorenja"
+ "alerts": "Upozorenja",
+ "detections": "Detekcije",
+ "motion": {
+ "label": "Kretnja",
+ "only": "Samo kretnje"
+ },
+ "allCameras": "Sve kamere",
+ "empty": {
+ "alert": "Nema uzbuna za pregledati",
+ "detection": "Nema detekcija za pregled",
+ "motion": "Nema podataka o pokretu",
+ "recordingsDisabled": {
+ "title": "Snimanja moraju biti uključena",
+ "description": "Stavke za pregled mogu biti stvorene za kameru jedino kada su snimanja uključena za tu kameru."
+ }
+ },
+ "timeline": "Vremenska linija",
+ "timeline.aria": "Odaberi vremensku liniju",
+ "zoomOut": "Udalji",
+ "events": {
+ "label": "Događaji",
+ "aria": "Odaberi događaje",
+ "noFoundForTimePeriod": "Nema pronađenih događaja za ovaj vremenski period."
+ },
+ "zoomIn": "Približi",
+ "detail": {
+ "label": "Detalji",
+ "noDataFound": "Nema detaljnih podataka za pregled",
+ "aria": "Uključi/isključi prikaz detalja",
+ "trackedObject_one": "{{count}} objekt",
+ "trackedObject_other": "{{count}} objekta",
+ "noObjectDetailData": "Nema dostupnih detaljnih podataka o objektu.",
+ "settings": "Postavke detaljnog prikaza",
+ "alwaysExpandActive": {
+ "title": "Uvijek proširi aktivno",
+ "desc": "Uvijek proširite detalje objekta aktivnog pregledanog stavka kada su dostupni."
+ }
+ },
+ "objectTrack": {
+ "trackedPoint": "Praćena točka",
+ "clickToSeek": "Kliknite za pomicanje na ovo vrijeme"
+ },
+ "documentTitle": "Pregled - Frigate",
+ "recordings": {
+ "documentTitle": "Snimke - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "Zadnja 24 sata"
+ },
+ "markAsReviewed": "Označi kao Pregledano",
+ "markTheseItemsAsReviewed": "Označi ove stavke kao pregledane",
+ "newReviewItems": {
+ "label": "Pogledaj nove stavke za pregled",
+ "button": "Nove stavke za pregled"
+ },
+ "selected_one": "{{count}} odabran",
+ "selected_other": "{{count}} odabrano",
+ "select_all": "Sve",
+ "camera": "Kamera",
+ "detected": "detektirano",
+ "normalActivity": "Normalno",
+ "needsReview": "Potreban pregled",
+ "securityConcern": "Sigurnosna zabrinutost"
}
diff --git a/web/public/locales/hr/views/explore.json b/web/public/locales/hr/views/explore.json
index c4f84e742..83a7412b0 100644
--- a/web/public/locales/hr/views/explore.json
+++ b/web/public/locales/hr/views/explore.json
@@ -1,3 +1,59 @@
{
- "documentTitle": "Istražite - Frigate"
+ "documentTitle": "Istražite - Frigate",
+ "generativeAI": "Generativni AI",
+ "exploreIsUnavailable": {
+ "title": "Istraživanje je nedostupno",
+ "embeddingsReindexing": {
+ "startingUp": "Pokretanje…",
+ "finishingShortly": "Završava uskoro",
+ "estimatedTime": "Procjenjeno preostalo vrijeme:",
+ "context": "Istraživanje se može koristiti nakon što je završeno ponovno indeksiranje ugrađivanja praćenih objekata.",
+ "step": {
+ "thumbnailsEmbedded": "Ugrađene sličice: ",
+ "descriptionsEmbedded": "Ugrađeni opisi: ",
+ "trackedObjectsProcessed": "Procesirani praćeni objekti: "
+ }
+ },
+ "downloadingModels": {
+ "setup": {
+ "textModel": "Tekstualni model",
+ "visionModel": "Model za vid",
+ "visionModelFeatureExtractor": "Ekstraktor značajki modela vizije",
+ "textTokenizer": "Tokenizator teksta"
+ },
+ "context": "Frigate preuzima potrebne modele ugrađivanja (embeddings) kako bi podržao značajku semantičkog pretraživanja. To može potrajati nekoliko minuta, ovisno o brzini vaše mrežne veze.",
+ "tips": {
+ "context": "Možda ćete htjeti ponovno indeksirati ugrađivanja (embeddings) svojih praćenih objekata kada se modeli preuzmu."
+ },
+ "error": "Došlo je do pogreške. Provjerite Frigate logove."
+ }
+ },
+ "details": {
+ "timestamp": "Vremenska oznaka",
+ "item": {
+ "tips": {
+ "mismatch_one": "{{count}} nedostupan objekt je otkriven i uključen u ovaj pregledni stavak. Ti objekti ili nisu kvalificirani kao upozorenje ili detekcija, ili su već uklonjeni/izbrisani.",
+ "mismatch_few": "{{count}} nedostupna objekta su otkrivena i uključena u ovaj pregledni stavak. Ti objekti ili nisu kvalificirani kao upozorenje ili detekcija, ili su već uklonjeni/izbrisani.",
+ "mismatch_other": "{{count}} nedostupnih objekata je otkriveno i uključeno u ovaj pregledni stavak. Ti objekti ili nisu kvalificirani kao upozorenje ili detekcija, ili su već uklonjeni/izbrisani."
+ }
+ }
+ },
+ "trackedObjectDetails": "Detalji praćenog objekta",
+ "type": {
+ "details": "detalji",
+ "snapshot": "snimka",
+ "thumbnail": "Sličica",
+ "video": "video",
+ "tracking_details": "detalji praćenja"
+ },
+ "exploreMore": "Istraži više {{label}} objekata",
+ "trackingDetails": {
+ "title": "Detalji Praćenja",
+ "noImageFound": "Slika nije nađena za ovaj vremenski zapis.",
+ "createObjectMask": "Napravi Masku Objekta",
+ "adjustAnnotationSettings": "Podesi postavke anotacije"
+ },
+ "trackedObjectsCount_one": "{{count}} praćeni objekt ",
+ "trackedObjectsCount_few": "{{count}} praćena objekta ",
+ "trackedObjectsCount_other": "{{count}} praćenih objekata "
}
diff --git a/web/public/locales/hr/views/exports.json b/web/public/locales/hr/views/exports.json
index 529e7c42e..0762ed6c7 100644
--- a/web/public/locales/hr/views/exports.json
+++ b/web/public/locales/hr/views/exports.json
@@ -1,4 +1,23 @@
{
"documentTitle": "Izvoz - Frigate",
- "search": "Pretraga"
+ "search": "Pretraga",
+ "deleteExport.desc": "Da li si siguran da želiš obrisati {{exportName}}?",
+ "editExport": {
+ "saveExport": "Spremi izvoz",
+ "title": "Preimenuj izvoz",
+ "desc": "Unesite novo ime ovog izvoza."
+ },
+ "tooltip": {
+ "shareExport": "Podijeli izvoz",
+ "downloadVideo": "Preuzmi video",
+ "editName": "Uredi ime",
+ "deleteExport": "Obriši izvoz"
+ },
+ "noExports": "Izvozi nisu pronađeni",
+ "deleteExport": "Obriši izvoz",
+ "toast": {
+ "error": {
+ "renameExportFailed": "Neuspjeh preimenovanja izvoza: {{errorMessage}}"
+ }
+ }
}
diff --git a/web/public/locales/hr/views/faceLibrary.json b/web/public/locales/hr/views/faceLibrary.json
index 242c150b1..29883ae67 100644
--- a/web/public/locales/hr/views/faceLibrary.json
+++ b/web/public/locales/hr/views/faceLibrary.json
@@ -1,5 +1,93 @@
{
"description": {
- "addFace": "Vodič za dodavanje nove kolekcije u Biblioteku lica."
- }
+ "addFace": "Dodaj novu kolekcije u Biblioteku lica učitavanjem prve slike.",
+ "placeholder": "Unesi ime za ovu kolekciju",
+ "invalidName": "Nevaljano ime. Ime može samo uključivati slova, brojeve, razmake, navodnike, podcrte i crtice."
+ },
+ "steps": {
+ "faceName": "Unesi Ime Lica",
+ "uploadFace": "Prenesi Sliku Lica",
+ "nextSteps": "Sljedeći Koraci",
+ "description": {
+ "uploadFace": "Prenesite sliku {{name}} koja prikazuje njezino lice iz prednjeg kuta. Slika ne mora biti obrezana samo na njezino lice."
+ }
+ },
+ "train": {
+ "title": "Nedavna Prepoznavanja",
+ "aria": "Odaberite nedavna prepoznavanja",
+ "empty": "Nema nedavnih pokušaja prepoznavanja lica",
+ "titleShort": "Nedavno"
+ },
+ "deleteFaceLibrary": {
+ "title": "Izbriši Ime",
+ "desc": "Jeste li sigurni da želite izbrisati kolekciju {{name}}? Ovim će se trajno izbrisati sva povezana lica."
+ },
+ "deleteFaceAttempts": {
+ "title": "Izbriši Lica",
+ "desc_one": "Jeste li sigurni da želite izbrisati {{count}} lice? Ova se radnja ne može poništiti.",
+ "desc_few": "Jeste li sigurni da želite izbrisati {{count}} lica? Ova se radnja ne može poništiti.",
+ "desc_other": "Jeste li sigurni da želite izbrisati {{count}} lica? Ova se radnja ne može poništiti."
+ },
+ "details": {
+ "timestamp": "Vremenska oznaka",
+ "unknown": "Nepoznato",
+ "scoreInfo": "Rezultat je ponderirani prosjek svih rezultata lica, pri čemu su ponderi određeni veličinom lica na svakoj slici."
+ },
+ "documentTitle": "Biblioteka lica - Frigate",
+ "uploadFaceImage": {
+ "title": "Učitaj sliku lica",
+ "desc": "Učitaj sliku za skeniranje lica i uključi za {{pageToggle}}"
+ },
+ "collections": "Kolekcije",
+ "createFaceLibrary": {
+ "new": "Stvori novo lice",
+ "nextSteps": "Kako biste izgradili čvrste temelje:{{label}}?"
+ "ask_a": "Apakah objek ini adalah sebuah{{label}}?",
+ "ask_an": "Apakah objek ini {{label}}?",
+ "ask_full": "Apakah ini object {{untranslatedLabel}} ({{translatedLabel}})?"
}
}
}
diff --git a/web/public/locales/id/components/filter.json b/web/public/locales/id/components/filter.json
index 0ea01e61b..070963bad 100644
--- a/web/public/locales/id/components/filter.json
+++ b/web/public/locales/id/components/filter.json
@@ -15,5 +15,13 @@
"title": "Semua Zona",
"short": "Zona"
}
+ },
+ "classes": {
+ "label": "Kelas",
+ "all": {
+ "title": "Semua Kelas"
+ },
+ "count_one": "{{count}} Kelas",
+ "count_other": "{{count}} Kelas"
}
}
diff --git a/web/public/locales/id/components/player.json b/web/public/locales/id/components/player.json
index 097e50a68..151fd41ce 100644
--- a/web/public/locales/id/components/player.json
+++ b/web/public/locales/id/components/player.json
@@ -14,7 +14,8 @@
"cameraDisabled": "Kamera dinonaktifkan",
"stats": {
"streamType": {
- "title": "Tipe stream:"
+ "title": "Tipe stream:",
+ "short": "Jenis"
}
}
}
diff --git a/web/public/locales/id/objects.json b/web/public/locales/id/objects.json
index bfeeca8ea..43d98cdde 100644
--- a/web/public/locales/id/objects.json
+++ b/web/public/locales/id/objects.json
@@ -16,5 +16,6 @@
"horse": "Kuda",
"goat": "Kambing",
"sheep": "Domba",
- "bird": "Burung"
+ "bird": "Burung",
+ "street_sign": "Rambu Jalan"
}
diff --git a/web/public/locales/id/views/classificationModel.json b/web/public/locales/id/views/classificationModel.json
new file mode 100644
index 000000000..6ea3a7915
--- /dev/null
+++ b/web/public/locales/id/views/classificationModel.json
@@ -0,0 +1,16 @@
+{
+ "documentTitle": "Klasifikasi Model - Frigate",
+ "details": {
+ "scoreInfo": "Skor tersebut mewakili rata-rata kepercayaan klasifikasi di seluruh deteksi objek ini."
+ },
+ "button": {
+ "deleteClassificationAttempts": "Hapus Gambar Klasifikasi",
+ "renameCategory": "Ubah Nama Kelas",
+ "deleteCategory": "Hapus Kelas",
+ "deleteImages": "Hapus Gambar",
+ "trainModel": "Latih Model",
+ "addClassification": "Tambah Klasifikasi",
+ "deleteModels": "Hapus Model",
+ "editModel": "Ubah Model"
+ }
+}
diff --git a/web/public/locales/id/views/configEditor.json b/web/public/locales/id/views/configEditor.json
index 3577999ab..a4d7baeaa 100644
--- a/web/public/locales/id/views/configEditor.json
+++ b/web/public/locales/id/views/configEditor.json
@@ -13,5 +13,6 @@
}
},
"confirm": "Keluar tanpa menyimpan?",
- "safeModeDescription": "Frigate sedang dalam mode aman karena kesalahan validasi konfigurasi."
+ "safeModeDescription": "Frigate sedang dalam mode aman karena kesalahan validasi konfigurasi.",
+ "safeConfigEditor": "Editor Konfigurasi(Mode Aman)"
}
diff --git a/web/public/locales/id/views/events.json b/web/public/locales/id/views/events.json
index f320bae8f..94ee3d47d 100644
--- a/web/public/locales/id/views/events.json
+++ b/web/public/locales/id/views/events.json
@@ -12,5 +12,48 @@
"motion": "Data gerakan tidak ditemukan"
},
"timeline.aria": "Pilih timeline",
- "timeline": "Linimasa"
+ "timeline": "Linimasa",
+ "zoomIn": "Perbesar",
+ "zoomOut": "Perkecil",
+ "events": {
+ "label": "Peristiwa-Peristiwa",
+ "aria": "Pilih peristiwa",
+ "noFoundForTimePeriod": "Tidak ada peristiwa dalam periode waktu berikut."
+ },
+ "detail": {
+ "label": "Detil",
+ "noDataFound": "Tidak ada detil data untuk di review",
+ "aria": "Beralih tampilan detil",
+ "trackedObject_one": "objek",
+ "trackedObject_other": "objek-objek",
+ "noObjectDetailData": "Tidak ada data objek detil tersedia.",
+ "settings": "Pengaturan Tampilan Detil",
+ "alwaysExpandActive": {
+ "title": "Selalu lebarkan yang aktif",
+ "desc": "Selalu perluas detil objek item tinjauan aktif jika tersedia."
+ }
+ },
+ "objectTrack": {
+ "trackedPoint": "Titik terlacak",
+ "clickToSeek": "Klik untuk mencari waktu ini"
+ },
+ "documentTitle": "Tinjauan - Frigate",
+ "recordings": {
+ "documentTitle": "Rekaman - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "24 Jam Terakhir"
+ },
+ "markAsReviewed": "Tandai sebagai sudah ditinjau",
+ "markTheseItemsAsReviewed": "Tandai item-item berikut sebagai sudah ditinjau",
+ "newReviewItems": {
+ "button": "Item Batu Untuk Ditinjau",
+ "label": "Lihat item ulasan baru"
+ },
+ "selected_one": "{{count}} terpilih",
+ "selected_other": "{{count}} terpilih",
+ "camera": "Kamera",
+ "detected": "terdeteksi",
+ "suspiciousActivity": "Aktivitas Mencurigakan",
+ "threateningActivity": "Aktivitas yang Mengancam"
}
diff --git a/web/public/locales/id/views/explore.json b/web/public/locales/id/views/explore.json
index de062e132..979ceaf7b 100644
--- a/web/public/locales/id/views/explore.json
+++ b/web/public/locales/id/views/explore.json
@@ -9,7 +9,8 @@
"estimatedTime": "Perkiraan waktu tersisa:",
"finishingShortly": "Selesai sesaat lagi",
"step": {
- "thumbnailsEmbedded": "Keluku dilampirkan "
+ "thumbnailsEmbedded": "Keluku dilampirkan ",
+ "descriptionsEmbedded": "Deskripsi terlampir: "
}
}
},
diff --git a/web/public/locales/id/views/exports.json b/web/public/locales/id/views/exports.json
index ebb88a9f7..043c313de 100644
--- a/web/public/locales/id/views/exports.json
+++ b/web/public/locales/id/views/exports.json
@@ -1,17 +1,23 @@
{
"documentTitle": "Expor - Frigate",
"search": "Cari",
- "noExports": "Tidak bisa mengekspor",
+ "noExports": "Ekspor tidak ditemukan",
"deleteExport": "Hapus Ekspor",
"deleteExport.desc": "Apakah Anda yakin ingin menghapus {{exportName}}?",
"editExport": {
- "title": "Ganti Nama saat Ekspor",
- "desc": "Masukkan nama baru untuk mengekspor.",
+ "title": "Ganti Nama Ekspor",
+ "desc": "Masukkan nama baru untuk ekspor ini.",
"saveExport": "Simpan Ekspor"
},
"toast": {
"error": {
- "renameExportFailed": "Gagal mengganti nama export: {{errorMessage}}"
+ "renameExportFailed": "Gagal mengganti nama ekspor: {{errorMessage}}"
}
+ },
+ "tooltip": {
+ "shareExport": "Bagikan Ekspor",
+ "downloadVideo": "Unduh Video",
+ "editName": "Ubah nama",
+ "deleteExport": "Hapus ekspor"
}
}
diff --git a/web/public/locales/id/views/faceLibrary.json b/web/public/locales/id/views/faceLibrary.json
index ff1fd4b61..bde637fa0 100644
--- a/web/public/locales/id/views/faceLibrary.json
+++ b/web/public/locales/id/views/faceLibrary.json
@@ -1,6 +1,6 @@
{
"description": {
- "addFace": "Tambah ke koleksi Pustaka Wajah.",
+ "addFace": "Tambah ke koleksi Pustaka Wajah dengan men-upload gambar pertama anda.",
"placeholder": "Masukkan Nama untuk koleksi ini",
"invalidName": "Nama tidak valid. Nama hanya dapat berisi huruf, angka, spasi, apostrof, garis bawah, dan tanda hubung."
},
@@ -18,13 +18,75 @@
"createFaceLibrary": {
"desc": "Buat koleksi baru",
"title": "Buat Koleksi",
- "nextSteps": "Untuk membangun fondasi yang kuat:ffprobe.",
- "cameraProbeInfo": "Informazioni flussi telecamera {{camera}}",
+ "cameraProbeInfo": "Informazioni analisi telecamera {{camera}}",
"stream": "Flusso {{idx}}",
"video": "Video:",
"codec": "Codec:",
@@ -113,7 +135,7 @@
"audio": "Audio:",
"error": "Errore: {{error}}",
"tips": {
- "title": "Informazioni flussi telecamera"
+ "title": "Informazioni analisi telecamera"
},
"aspectRatio": "rapporto d'aspetto"
},
diff --git a/web/public/locales/ja/audio.json b/web/public/locales/ja/audio.json
index c546c09b2..43811ed76 100644
--- a/web/public/locales/ja/audio.json
+++ b/web/public/locales/ja/audio.json
@@ -57,7 +57,7 @@
"animal": "動物",
"pets": "ペット",
"dog": "犬",
- "bark": "樹皮",
+ "bark": "吠え声",
"yip": "キャンキャン鳴く声",
"howl": "遠吠え",
"bow_wow": "ワンワン",
@@ -425,5 +425,79 @@
"television": "テレビ",
"radio": "ラジオ",
"field_recording": "フィールド録音",
- "scream": "悲鳴"
+ "scream": "悲鳴",
+ "sodeling": "ソデリング",
+ "chird": "チャープ",
+ "change_ringing": "着信音の変更",
+ "shofar": "ショファー",
+ "liquid": "液体",
+ "splash": "水しぶき",
+ "slosh": "水が揺れる音",
+ "squish": "ぐちゃっという音",
+ "drip": "滴る音",
+ "pour": "注ぐ",
+ "trickle": "ちょろちょろ流れる音",
+ "gush": "勢いよく噴き出す",
+ "fill": "満たす",
+ "spray": "噴霧",
+ "pump": "ポンプ",
+ "stir": "かき混ぜる",
+ "boiling": "沸騰",
+ "sonar": "ソナー",
+ "arrow": "矢",
+ "whoosh": "ヒューという音",
+ "thump": "ドンという音",
+ "thunk": "鈍い衝撃音",
+ "electronic_tuner": "電子チューナー",
+ "effects_unit": "エフェクター",
+ "chorus_effect": "コーラス効果",
+ "basketball_bounce": "バスケットボールのバウンド",
+ "bang": "バンという音",
+ "slap": "平手打ち",
+ "whack": "強打",
+ "smash": "粉砕",
+ "breaking": "破壊",
+ "bouncing": "跳ねる音",
+ "whip": "ムチの音",
+ "flap": "はためく音",
+ "scratch": "引っかく音",
+ "scrape": "こする音",
+ "rub": "こする",
+ "roll": "転がる",
+ "crushing": "押しつぶす",
+ "crumpling": "くしゃくしゃにする音",
+ "tearing": "引き裂く音",
+ "beep": "ビープ音",
+ "ping": "ピン音",
+ "ding": "ディン音",
+ "clang": "金属音",
+ "squeal": "きしむ音",
+ "creak": "きしみ",
+ "rustle": "かさかさ音",
+ "whir": "ブーンという音",
+ "clatter": "ガタガタ音",
+ "sizzle": "ジュージュー音",
+ "clicking": "クリック音",
+ "clickety_clack": "カチカチ音",
+ "rumble": "ゴロゴロ音",
+ "plop": "ポチャン",
+ "hum": "ハム音",
+ "zing": "ジーン音",
+ "boing": "ボイン音",
+ "crunch": "バリバリ音",
+ "sine_wave": "正弦波",
+ "harmonic": "倍音",
+ "chirp_tone": "チャープ音",
+ "pulse": "パルス",
+ "inside": "内側",
+ "outside": "外側",
+ "reverberation": "残響",
+ "echo": "エコー",
+ "noise": "ノイズ",
+ "mains_hum": "電源ハム",
+ "distortion": "歪み",
+ "sidetone": "サイドトーン",
+ "cacophony": "不協和音",
+ "throbbing": "脈動",
+ "vibration": "振動"
}
diff --git a/web/public/locales/ja/common.json b/web/public/locales/ja/common.json
index 90eeba7ef..7cef62aa5 100644
--- a/web/public/locales/ja/common.json
+++ b/web/public/locales/ja/common.json
@@ -66,7 +66,10 @@
"formattedTimestampFilename": {
"12hour": "MM-dd-yy-h-mm-ss-a",
"24hour": "MM-dd-yy-HH-mm-ss"
- }
+ },
+ "inProgress": "処理中",
+ "invalidStartTime": "開始時刻が無効です",
+ "invalidEndTime": "終了時刻が無効です"
},
"readTheDocumentation": "ドキュメントを見る",
"unit": {
@@ -77,10 +80,23 @@
"length": {
"feet": "フィート",
"meters": "メートル"
+ },
+ "data": {
+ "gbph": "GB/hour",
+ "gbps": "GB/s",
+ "kbph": "kB/hour",
+ "kbps": "kB/s",
+ "mbph": "MB/hour",
+ "mbps": "MB/s"
}
},
"label": {
- "back": "戻る"
+ "back": "戻る",
+ "hide": "{{item}} を非表示",
+ "show": "{{item}} を表示",
+ "ID": "ID",
+ "none": "なし",
+ "all": "すべて"
},
"button": {
"apply": "適用",
@@ -117,7 +133,8 @@
"unselect": "選択解除",
"export": "書き出し",
"deleteNow": "今すぐ削除",
- "next": "次へ"
+ "next": "次へ",
+ "continue": "続行"
},
"menu": {
"system": "システム",
@@ -216,7 +233,8 @@
"withSystem": {
"label": "システム設定に従う"
}
- }
+ },
+ "classification": "分類"
},
"toast": {
"copyUrlToClipboard": "URLをクリップボードにコピーしました。",
@@ -256,5 +274,17 @@
"title": "404",
"desc": "ページが見つかりません"
},
- "selectItem": "{{item}} を選択"
+ "selectItem": "{{item}} を選択",
+ "information": {
+ "pixels": "{{area}}ピクセル"
+ },
+ "list": {
+ "two": "{{0}} と {{1}}",
+ "many": "{{items}}と {{last}}",
+ "separatorWithSpace": ", "
+ },
+ "field": {
+ "optional": "任意",
+ "internalID": "Frigate が設定で使用する内部 ID です"
+ }
}
diff --git a/web/public/locales/ja/components/auth.json b/web/public/locales/ja/components/auth.json
index b9ff98325..d767e3282 100644
--- a/web/public/locales/ja/components/auth.json
+++ b/web/public/locales/ja/components/auth.json
@@ -10,6 +10,7 @@
"loginFailed": "ログインに失敗しました",
"unknownError": "不明なエラー。ログを確認してください。",
"webUnknownError": "不明なエラー。コンソールログを確認してください。"
- }
+ },
+ "firstTimeLogin": "初めてログインしますか?認証情報は Frigate のログに表示されています。"
}
}
diff --git a/web/public/locales/ja/components/dialog.json b/web/public/locales/ja/components/dialog.json
index c97fc475b..629474548 100644
--- a/web/public/locales/ja/components/dialog.json
+++ b/web/public/locales/ja/components/dialog.json
@@ -51,12 +51,13 @@
"export": "書き出し",
"selectOrExport": "選択または書き出し",
"toast": {
- "success": "書き出しを開始しました。/exports フォルダでファイルを確認できます。",
+ "success": "書き出しを開始しました。出力ページでファイルを確認できます。",
"error": {
"failed": "書き出しの開始に失敗しました: {{error}}",
"endTimeMustAfterStartTime": "終了時間は開始時間より後である必要があります",
"noVaildTimeSelected": "有効な時間範囲が選択されていません"
- }
+ },
+ "view": "表示"
},
"fromTimeline": {
"saveExport": "書き出しを保存",
@@ -105,7 +106,8 @@
"button": {
"export": "書き出し",
"markAsReviewed": "レビュー済みにする",
- "deleteNow": "今すぐ削除"
+ "deleteNow": "今すぐ削除",
+ "markAsUnreviewed": "未レビューに戻す"
}
},
"imagePicker": {
@@ -113,6 +115,7 @@
"search": {
"placeholder": "ラベルまたはサブラベルで検索…"
},
- "noImages": "このカメラのサムネイルは見つかりません"
+ "noImages": "このカメラのサムネイルは見つかりません",
+ "unknownLabel": "保存済みトリガー画像"
}
}
diff --git a/web/public/locales/ja/components/filter.json b/web/public/locales/ja/components/filter.json
index 66a52a29e..bbcc3149d 100644
--- a/web/public/locales/ja/components/filter.json
+++ b/web/public/locales/ja/components/filter.json
@@ -132,5 +132,9 @@
"selectPlatesFromList": "リストから1件以上選択してください。",
"selectAll": "すべて選択",
"clearAll": "すべてクリア"
+ },
+ "attributes": {
+ "label": "分類属性",
+ "all": "すべての属性"
}
}
diff --git a/web/public/locales/ja/objects.json b/web/public/locales/ja/objects.json
index c8b24e800..c3e41af3f 100644
--- a/web/public/locales/ja/objects.json
+++ b/web/public/locales/ja/objects.json
@@ -6,7 +6,7 @@
"airplane": "飛行機",
"animal": "動物",
"dog": "犬",
- "bark": "樹皮",
+ "bark": "吠え声",
"cat": "猫",
"horse": "馬",
"goat": "ヤギ",
diff --git a/web/public/locales/ja/views/classificationModel.json b/web/public/locales/ja/views/classificationModel.json
new file mode 100644
index 000000000..e16f1fce5
--- /dev/null
+++ b/web/public/locales/ja/views/classificationModel.json
@@ -0,0 +1,182 @@
+{
+ "documentTitle": "分類モデル - Frigate",
+ "button": {
+ "deleteImages": "画像を削除",
+ "deleteClassificationAttempts": "分類画像を削除",
+ "renameCategory": "クラス名を変更",
+ "deleteCategory": "クラスを削除",
+ "trainModel": "モデルを学習",
+ "addClassification": "分類を追加",
+ "deleteModels": "モデルを削除",
+ "editModel": "モデルを編集"
+ },
+ "toast": {
+ "success": {
+ "deletedImage": "削除された画像",
+ "categorizedImage": "画像の分類に成功しました",
+ "trainedModel": "モデルを正常に学習させました。",
+ "trainingModel": "モデルのトレーニングを正常に開始しました。",
+ "deletedCategory": "クラスを削除しました",
+ "deletedModel_other": "{{count}} 件のモデルを削除しました",
+ "updatedModel": "モデル設定を更新しました",
+ "renamedCategory": "クラス名を {{name}} に変更しました"
+ },
+ "error": {
+ "deleteImageFailed": "削除に失敗しました: {{errorMessage}}",
+ "deleteCategoryFailed": "クラスの削除に失敗しました: {{errorMessage}}",
+ "deleteModelFailed": "モデルの削除に失敗しました: {{errorMessage}}",
+ "categorizeFailed": "画像の分類に失敗しました: {{errorMessage}}",
+ "trainingFailed": "モデルの学習に失敗しました。Frigate のログを確認してください。",
+ "trainingFailedToStart": "モデルの学習を開始できませんでした: {{errorMessage}}",
+ "updateModelFailed": "モデルの更新に失敗しました: {{errorMessage}}",
+ "renameCategoryFailed": "クラス名の変更に失敗しました: {{errorMessage}}"
+ }
+ },
+ "train": {
+ "titleShort": "Classifications,最近の分類結果を選択,,False,train.aria,,",
+ "title": "最近の分類結果",
+ "aria": "最近の分類結果を選択"
+ },
+ "wizard": {
+ "step1": {
+ "typeObject": "Classification",
+ "typeState": "Classification",
+ "description": "状態モデルは固定カメラ領域の状態変化(例:ドアの開閉)を監視し、オブジェクトモデルは検出されたオブジェクトに分類(例:既知の動物や配達員など)を追加します。",
+ "name": "名前",
+ "namePlaceholder": "モデル名を入力...",
+ "type": "タイプ",
+ "objectLabel": "オブジェクトラベル",
+ "objectLabelPlaceholder": "オブジェクトタイプを選択...",
+ "classificationType": "分類タイプ",
+ "classificationTypeTip": "分類タイプについて",
+ "classificationTypeDesc": "サブラベルはオブジェクトのラベルに追加のテキストを追加します(例:「人: UPS」)。属性は、オブジェクトのメタデータとは別に保存される、検索可能なメタデータです。",
+ "classificationSubLabel": "サブラベル",
+ "classificationAttribute": "属性",
+ "classes": "クラス",
+ "states": "状態",
+ "classesTip": "クラスについて",
+ "classesStateDesc": "カメラ領域の状態を定義します。例: ガレージドアの「開」「閉」。",
+ "classesObjectDesc": "検出されたオブジェクトを分類するための、異なるカテゴリを定義します。例:人物の分類として「delivery_person」「resident」「stranger」など。",
+ "classPlaceholder": "クラス名を入力...",
+ "errors": {
+ "nameRequired": "モデル名は必須です",
+ "nameLength": "モデル名は 64 文字以内で入力してください",
+ "nameOnlyNumbers": "モデル名を数字のみにはできません",
+ "classRequired": "少なくとも 1 つのクラスが必要です",
+ "classesUnique": "クラス名は一意である必要があります",
+ "noneNotAllowed": "「none」というクラス名は使用できません",
+ "stateRequiresTwoClasses": "状態モデルには少なくとも 2 つのクラスが必要です",
+ "objectLabelRequired": "オブジェクトラベルを選択してください",
+ "objectTypeRequired": "分類タイプを選択してください"
+ }
+ },
+ "title": "新しい分類を作成",
+ "steps": {
+ "nameAndDefine": "名前と定義",
+ "stateArea": "状態エリア",
+ "chooseExamples": "例を選択"
+ },
+ "step2": {
+ "description": "カメラを選択し、それぞれの監視エリアを定義します。モデルはこれらのエリアの状態を分類します。",
+ "cameras": "カメラ",
+ "selectCamera": "カメラを選択",
+ "noCameras": "+ をクリックしてカメラを追加",
+ "selectCameraPrompt": "リストからカメラを選択して監視エリアを定義します"
+ },
+ "step3": {
+ "selectImagesPrompt": "{{className}} の画像をすべて選択",
+ "selectImagesDescription": "画像をクリックして選択します。このクラスの作業が完了したら「続行」をクリックしてください。",
+ "allImagesRequired_other": "すべての画像を分類してください。残り {{count}} 枚です。",
+ "generating": {
+ "title": "サンプル画像を生成中",
+ "description": "Frigate が録画から代表的な画像を抽出しています。しばらくお待ちください..."
+ },
+ "training": {
+ "title": "モデルを学習中",
+ "description": "モデルはバックグラウンドで学習されています。このダイアログを閉じると、学習完了後すぐにモデルが有効になります。"
+ },
+ "retryGenerate": "再生成",
+ "noImages": "サンプル画像が生成されませんでした",
+ "classifying": "分類・学習中...",
+ "trainingStarted": "学習を開始しました",
+ "modelCreated": "モデルを作成しました。不足している状態の画像を「最近の分類」から追加し、モデルを学習してください。",
+ "errors": {
+ "noCameras": "カメラが設定されていません",
+ "noObjectLabel": "オブジェクトラベルが選択されていません",
+ "generateFailed": "例の生成に失敗しました: {{error}}",
+ "generationFailed": "生成に失敗しました。もう一度お試しください。",
+ "classifyFailed": "画像の分類に失敗しました: {{error}}"
+ },
+ "generateSuccess": "サンプル画像を生成しました",
+ "missingStatesWarning": {
+ "title": "状態の例が不足しています",
+ "description": "最良の結果を得るため、すべての状態の例を選択することを推奨します。すべてを選択しなくても続行できますが、全状態に画像が揃うまでモデルは学習されません。続行後、「最近の分類」から不足分を分類し、学習を行ってください。"
+ }
+ }
+ },
+ "details": {
+ "scoreInfo": "このスコアは、このオブジェクトに対するすべての検出結果の分類信頼度の平均を表します。",
+ "none": "なし",
+ "unknown": "不明"
+ },
+ "tooltip": {
+ "trainingInProgress": "モデルは現在学習中です",
+ "noNewImages": "学習に使用できる新しい画像がありません。先にデータセット内の画像を分類してください。",
+ "noChanges": "前回の学習以降、データセットに変更はありません。",
+ "modelNotReady": "モデルはまだ学習可能な状態ではありません"
+ },
+ "deleteCategory": {
+ "title": "クラスを削除",
+ "desc": "クラス {{name}} を削除してもよろしいですか?関連するすべての画像が完全に削除され、モデルの再学習が必要になります。",
+ "minClassesTitle": "クラスを削除できません",
+ "minClassesDesc": "分類モデルには少なくとも 2 つのクラスが必要です。別のクラスを追加してから削除してください。"
+ },
+ "deleteModel": {
+ "title": "分類モデルを削除",
+ "single": "{{name}} を削除してもよろしいですか?画像や学習データを含むすべての関連データが完全に削除され、この操作は元に戻せません。",
+ "desc_other": "{{count}} 件のモデルを削除してもよろしいですか?関連するすべてのデータが完全に削除され、この操作は元に戻せません。"
+ },
+ "edit": {
+ "title": "分類モデルを編集",
+ "descriptionState": "この状態分類モデルのクラスを編集します。変更を反映するにはモデルの再学習が必要です。",
+ "descriptionObject": "このオブジェクト分類モデルのオブジェクトタイプおよび分類タイプを編集します。",
+ "stateClassesInfo": "注意: 状態クラスを変更すると、更新後のクラスでモデルを再学習する必要があります。"
+ },
+ "deleteDatasetImages": {
+ "title": "データセット画像を削除",
+ "desc_other": "{{dataset}} から {{count}} 枚の画像を削除してもよろしいですか?この操作は元に戻せず、モデルの再学習が必要になります。"
+ },
+ "deleteTrainImages": {
+ "title": "学習用画像を削除",
+ "desc_other": "{{count}} 枚の画像を削除してもよろしいですか?この操作は元に戻すことができません。"
+ },
+ "renameCategory": {
+ "title": "クラス名を変更",
+ "desc": "{{name}} の新しい名前を入力してください。変更を有効にするにはモデルの再学習が必要です。"
+ },
+ "description": {
+ "invalidName": "無効な名前です。使用できるのは、英数字、空白、アポストロフィ、アンダースコア、ハイフンのみです。"
+ },
+ "categories": "クラス",
+ "createCategory": {
+ "new": "新しいクラスを作成"
+ },
+ "categorizeImageAs": "画像を次として分類:",
+ "categorizeImage": "画像を分類",
+ "menu": {
+ "objects": "オブジェクト",
+ "states": "状態"
+ },
+ "noModels": {
+ "object": {
+ "title": "オブジェクト分類モデルがありません",
+ "description": "検出されたオブジェクトを分類するためのカスタムモデルを作成します。",
+ "buttonText": "オブジェクトモデルを作成"
+ },
+ "state": {
+ "title": "状態分類モデルがありません",
+ "description": "特定のカメラ領域の状態変化を監視・分類するためのカスタムモデルを作成します。",
+ "buttonText": "状態モデルを作成"
+ }
+ }
+}
diff --git a/web/public/locales/ja/views/events.json b/web/public/locales/ja/views/events.json
index b19ad9553..544412974 100644
--- a/web/public/locales/ja/views/events.json
+++ b/web/public/locales/ja/views/events.json
@@ -8,7 +8,11 @@
"empty": {
"detection": "レビューする検出はありません",
"alert": "レビューするアラートはありません",
- "motion": "モーションデータは見つかりません"
+ "motion": "モーションデータは見つかりません",
+ "recordingsDisabled": {
+ "title": "録画を有効にする必要があります",
+ "description": "カメラの録画が有効になっている場合にのみ、そのカメラに対してレビューアイテムを作成できます。"
+ }
},
"camera": "カメラ",
"allCameras": "全カメラ",
@@ -36,5 +40,28 @@
"selected_other": "{{count}} 件選択",
"detected": "検出",
"suspiciousActivity": "不審なアクティビティ",
- "threateningActivity": "脅威となるアクティビティ"
+ "threateningActivity": "脅威となるアクティビティ",
+ "zoomIn": "ズームイン",
+ "zoomOut": "ズームアウト",
+ "detail": {
+ "label": "詳細",
+ "noDataFound": "確認する詳細データはありません",
+ "aria": "詳細表示を切り替え",
+ "trackedObject_one": "{{count}} 件のオブジェクト",
+ "trackedObject_other": "{{count}} 件のオブジェクト",
+ "noObjectDetailData": "オブジェクトの詳細データがありません。",
+ "settings": "詳細表示設定",
+ "alwaysExpandActive": {
+ "title": "アクティブ項目を常に展開",
+ "desc": "利用可能な場合、アクティブなレビュー項目のオブジェクト詳細を常に展開する。"
+ }
+ },
+ "objectTrack": {
+ "trackedPoint": "追跡ポイント",
+ "clickToSeek": "クリックしてこの時点に移動"
+ },
+ "select_all": "すべて",
+ "normalActivity": "通常",
+ "needsReview": "要確認",
+ "securityConcern": "セキュリティ上の懸念"
}
diff --git a/web/public/locales/ja/views/explore.json b/web/public/locales/ja/views/explore.json
index 5be336cfa..35265cc50 100644
--- a/web/public/locales/ja/views/explore.json
+++ b/web/public/locales/ja/views/explore.json
@@ -19,13 +19,15 @@
"regenerate": "{{provider}} に新しい説明をリクエストしました。プロバイダの速度により再生成に時間がかかる場合があります。",
"updatedSublabel": "サブラベルを更新しました。",
"updatedLPR": "ナンバープレートを更新しました。",
- "audioTranscription": "音声文字起こしをリクエストしました。"
+ "audioTranscription": "音声文字起こしのリクエストは正常に送信されました。Frigate サーバーの処理速度によっては、文字起こしの完了までにしばらく時間がかかる場合があります。",
+ "updatedAttributes": "属性が正常に更新されました。"
},
"error": {
"regenerate": "{{provider}} への新しい説明の呼び出しに失敗しました: {{errorMessage}}",
"updatedSublabelFailed": "サブラベルの更新に失敗しました: {{errorMessage}}",
"updatedLPRFailed": "ナンバープレートの更新に失敗しました: {{errorMessage}}",
- "audioTranscription": "音声文字起こしのリクエストに失敗しました: {{errorMessage}}"
+ "audioTranscription": "音声文字起こしのリクエストに失敗しました: {{errorMessage}}",
+ "updatedAttributesFailed": "属性の更新に失敗しました: {{errorMessage}}"
}
}
},
@@ -73,6 +75,14 @@
"tips": {
"descriptionSaved": "説明を保存しました",
"saveDescriptionFailed": "説明の更新に失敗しました: {{errorMessage}}"
+ },
+ "editAttributes": {
+ "title": "属性を編集",
+ "desc": "この {{label}} の分類属性を選択してください"
+ },
+ "attributes": "分類属性",
+ "title": {
+ "label": "タイトル"
}
},
"exploreMore": "{{label}} のオブジェクトをさらに探索",
@@ -90,7 +100,7 @@
}
},
"downloadingModels": {
- "context": "Frigate はセマンティック検索をサポートするために必要な埋め込みモデルをダウンロードしています。ネットワーク速度により数分かかる場合があります。",
+ "context": "Frigate はセマンティック検索(意味理解型画像検索)をサポートするために必要な埋め込みモデルをダウンロードしています。ネットワーク速度により数分かかる場合があります。",
"setup": {
"visionModel": "ビジョンモデル",
"visionModelFeatureExtractor": "ビジョンモデル特徴抽出器",
@@ -108,7 +118,9 @@
"details": "詳細",
"snapshot": "スナップショット",
"video": "動画",
- "object_lifecycle": "オブジェクトのライフサイクル"
+ "object_lifecycle": "オブジェクトのライフサイクル",
+ "thumbnail": "サムネイル",
+ "tracking_details": "追跡詳細"
},
"objectLifecycle": {
"title": "オブジェクトのライフサイクル",
@@ -193,12 +205,26 @@
},
"deleteTrackedObject": {
"label": "この追跡オブジェクトを削除"
+ },
+ "downloadCleanSnapshot": {
+ "label": "クリーンなスナップショットをダウンロード",
+ "aria": "クリーンなスナップショットをダウンロード"
+ },
+ "viewTrackingDetails": {
+ "label": "追跡詳細を表示",
+ "aria": "追跡詳細を表示"
+ },
+ "showObjectDetails": {
+ "label": "オブジェクトの移動経路を表示"
+ },
+ "hideObjectDetails": {
+ "label": "オブジェクトの移動経路を非表示"
}
},
"dialog": {
"confirmDelete": {
"title": "削除の確認",
- "desc": "この追跡オブジェクトを削除すると、スナップショット、保存された埋め込み、および関連するライフサイクル項目が削除されます。履歴ビューの録画映像は削除されません。감지(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..712e004cf 100644
--- a/web/public/locales/lt/common.json
+++ b/web/public/locales/lt/common.json
@@ -78,7 +78,10 @@
"formattedTimestampFilename": {
"12hour": "MM-dd-yy-h-mm-ss-a",
"24hour": "MM-dd-yy-HH-mm-ss"
- }
+ },
+ "inProgress": "Apdorojama",
+ "invalidStartTime": "Netinkamas pradžios laikas",
+ "invalidEndTime": "Netinkamas pabaigos laikas"
},
"unit": {
"speed": {
@@ -88,10 +91,20 @@
"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": {
- "back": "Eiti atgal"
+ "back": "Eiti atgal",
+ "hide": "Slėpti {{item}}",
+ "show": "Rodyti {{item}}"
},
"button": {
"apply": "Pritaikyti",
@@ -270,5 +283,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/camera.json b/web/public/locales/lt/components/camera.json
index 7f4f5d857..2e3ef8a87 100644
--- a/web/public/locales/lt/components/camera.json
+++ b/web/public/locales/lt/components/camera.json
@@ -77,7 +77,7 @@
"showOptions": "Rodyti Pasirinkimus",
"hideOptions": "Slėpti Pasirinkimus"
},
- "boundingBox": "Ribojantis Kvadratas",
+ "boundingBox": "Apribojantis Stačiakampis",
"timestamp": "Laiko žymė",
"zones": "Zonos",
"mask": "Maskuotė",
diff --git a/web/public/locales/lt/components/dialog.json b/web/public/locales/lt/components/dialog.json
index 84b98af86..ae5760132 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": {
@@ -71,19 +71,21 @@
"export": "Eksportuoti",
"selectOrExport": "Pasirinkti ar Eksportuoti",
"toast": {
- "success": "Sėkmingai pradėtas eksportavimas. Įrašą galima peržiūrėti /exports kataloge.",
+ "success": "Sėkmingai pradėtas eksportavimas. Peržiūrėti įrašą exports puslapyje.",
"error": {
"failed": "Nepavyko pradėti eksportavimo: {{error}}",
"endTimeMustAfterStartTime": "Pabaigos Laikas privalo būti vėliau nei pradžios laikas",
"noVaildTimeSelected": "Nėra pasirinkto tinkamo laikotarpio"
- }
+ },
+ "view": "Žiūrėti"
}
},
"recording": {
"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": {
@@ -115,6 +117,7 @@
"search": {
"placeholder": "Ieškoti pagal etiketę arba sub etiketę..."
},
- "noImages": "Šiai kamerai miniatiūrų nerasta"
+ "noImages": "Šiai kamerai miniatiūrų nerasta",
+ "unknownLabel": "Išsaugotas Trigerio Paveiksliukas"
}
}
diff --git a/web/public/locales/lt/components/filter.json b/web/public/locales/lt/components/filter.json
index f5beaf8d2..0f276efc9 100644
--- a/web/public/locales/lt/components/filter.json
+++ b/web/public/locales/lt/components/filter.json
@@ -132,5 +132,9 @@
"selectPlatesFromList": "Pasirinkti vieną ar daugiau numerių iš sąrašo.",
"selectAll": "Pasirinkti viską",
"clearAll": "Išvalyti viską"
+ },
+ "attributes": {
+ "label": "Klasifikavimo Atributai",
+ "all": "Visi Atributai"
}
}
diff --git a/web/public/locales/lt/views/classificationModel.json b/web/public/locales/lt/views/classificationModel.json
new file mode 100644
index 000000000..df38fe0eb
--- /dev/null
+++ b/web/public/locales/lt/views/classificationModel.json
@@ -0,0 +1,125 @@
+{
+ "documentTitle": "Klasifikavimo Modeliai - Frigate",
+ "button": {
+ "deleteClassificationAttempts": "Trinti Klasisifikavimo Nuotraukas",
+ "renameCategory": "Pervadinti Klasę",
+ "deleteCategory": "Trinti Klasę",
+ "deleteImages": "Trinti Nuotraukas",
+ "trainModel": "Treniruoti Modelį",
+ "addClassification": "Pridėti Klasifikatorių",
+ "deleteModels": "Ištrinti Modelius",
+ "editModel": "Koreguoti 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.",
+ "deletedModel_one": "Sėkmingai ištrintas {{count}} modelis",
+ "deletedModel_few": "Sėkmingai ištrinti {{count}} modeliai",
+ "deletedModel_other": "Sėkmingai ištrinta {{count}} modelių",
+ "updatedModel": "Modelio nustatymai atnaujinti sėkmingai",
+ "renamedCategory": "Klasifikatorius sėkmingai pervadintas į {{name}}"
+ },
+ "error": {
+ "deleteImageFailed": "Nepavyko ištrinti:{{errorMessage}}",
+ "deleteCategoryFailed": "Nepavyko ištrinti klasės:{{errorMessage}}",
+ "categorizeFailed": "Nepavyko kategorizuoti nuotraukos:{{errorMessage}}",
+ "trainingFailed": "Modelio treniravimas nepavyko. Patikrinkite Frigate log'ų detales.",
+ "deleteModelFailed": "Nepavyko ištrinti modelio: {{errorMessage}}",
+ "trainingFailedToStart": "Nepavyko pradėti modelio treniravimo: {{errorMessage}}",
+ "updateModelFailed": "Nepavyko atnaujinti modelio: {{errorMessage}}",
+ "renameCategoryFailed": "Nepavyko pervadinti klasifikatoriaus: {{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į.",
+ "minClassesTitle": "Negalima Ištrinti Klasifikatoriaus",
+ "minClassesDesc": "Klasifikavimo modelis turi turėti bent 2 klasifikatorius. Pridėkite dar vieną klasifikatoriu prieš ištrinant šį."
+ },
+ "deleteDatasetImages": {
+ "title": "Ištrinti Imties Nuotraukas",
+ "desc_one": "Esate įsitikinę norite ištrinti {{count}} nautrauką iš {{dataset}}? Šis veiksmas negrįžtamas ir reikės iš naujo apmokinti modelį.",
+ "desc_few": "Esate įsitikinę norite ištrinti {{count}} nautraukas iš {{dataset}}? Šis veiksmas negrįžtamas ir reikės iš naujo apmokinti modelį.",
+ "desc_other": "Esate įsitikinę norite ištrinti {{count}} nautraukų iš {{dataset}}? Šis veiksmas negrįžtamas ir reikės iš naujo apmokinti modelį."
+ },
+ "deleteTrainImages": {
+ "title": "Ištrinti Apmokymo Nuotraukas",
+ "desc_one": "Ar esate įsitikinę, kad norite ištrinti {{count}} nuotrauką? Šis veiksmas negrįžtamas.",
+ "desc_few": "Ar esate įsitikinę, kad norite ištrinti {{count}} nuotraukas? Šis veiksmas negrįžtamas.",
+ "desc_other": "Ar esate įsitikinę, kad norite ištrinti {{count}} nuotraukų? Šis veiksmas negrįžtamas."
+ },
+ "renameCategory": {
+ "title": "Pervadinti Klasę",
+ "desc": "Įveskite naują vardą vietoje {{name}}. Jums reikės iš naujo apmokinti modelį, kad pavadinimas į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",
+ "titleShort": "Paskutiniai"
+ },
+ "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ų",
+ "description": "Sukurti individualų modelį sekti ir klasifikuoti būsenų pokyčius konkrečiuose kameros plotuose.",
+ "buttonText": "Sukurti Būsenos Modelį"
+ }
+ },
+ "details": {
+ "scoreInfo": "Įvertinimas atspindi vidutinį klasivikavimo pasitikėjimą tarp visų šio objekto atpažinimų.",
+ "none": "Nėra",
+ "unknown": "Nežinoma"
+ },
+ "tooltip": {
+ "trainingInProgress": "Šiuo metu vyksta modelio apmokymas",
+ "noNewImages": "Nėra naujų paveikslėlių apmokymui. Pradžiai suklasifikuokite daugiau paveikslėlių duomenų rinkinyje.",
+ "noChanges": "Po paskutinio apmokymo duomenų rinkinyje pakeitimų nėra.",
+ "modelNotReady": "Modelis neparuoštas apmokymui"
+ },
+ "deleteModel": {
+ "title": "Ištrinti Klasifikavimo Modelį",
+ "single": "Ar įsitikinę kad norite trinti {{name}}? Tai negrįžtamai ištrins ir susijusius paveikslėlius bei apmokymo duomenis. Tai negali būti sugražinta.",
+ "desc_one": "Ar esate įsitikinę kad norite ištrinti {{count}} modelį? Tai negrįžtamai ištrins ir susijusius paveikslėlius bei apmokymo duomenis. Tai negali būti sugražinta.",
+ "desc_few": "Ar esate įsitikinę kad norite ištrinti {{count}} modelius? Tai negrįžtamai ištrins ir susijusius paveikslėlius bei apmokymo duomenis. Tai negali būti sugražinta.",
+ "desc_other": "Ar esate įsitikinę kad norite ištrinti {{count}} modelių? Tai negrįžtamai ištrins ir susijusius paveikslėlius bei apmokymo duomenis. Tai negali būti sugražinta."
+ },
+ "edit": {
+ "title": "Koreguoti Klasifikavimo Modelį",
+ "descriptionState": "Koreguoti klasifikatorius šiam būklės klasifikavimo modeliui. Pokyčiams reikės išnaujo apmokinti modelį.",
+ "descriptionObject": "Koreguoti objekto tipą ir klasifikavimo tipą šiam objektų klasifikavimo modeliui.",
+ "stateClassesInfo": "Pastaba: Keičiant statuso klasifikatorius privaloma iš naujo apmokinti modelį."
+ },
+ "wizard": {
+ "step3": {
+ "allImagesRequired_one": "Prašom klasifikuoti visus paveikslėlius. Liko {{count}} paveikslėlis.",
+ "allImagesRequired_few": "Prašom klasifikuoti visus paveikslėlius. Liko {{count}} paveikslėliai.",
+ "allImagesRequired_other": "Prašom klasifikuoti visus paveikslėlius. Liko {{count}} paveikslėlių."
+ },
+ "title": "Sukurti Naują Klasifikavimą",
+ "steps": {
+ "nameAndDefine": "Pavadinimas ir Apibūdinimas",
+ "stateArea": "Būsenos Plotas"
+ }
+ },
+ "menu": {
+ "objects": "Objektai",
+ "states": "Būsenos"
+ }
+}
diff --git a/web/public/locales/lt/views/events.json b/web/public/locales/lt/views/events.json
index 79a222371..c3e670a16 100644
--- a/web/public/locales/lt/views/events.json
+++ b/web/public/locales/lt/views/events.json
@@ -22,7 +22,11 @@
"empty": {
"alert": "Nėra pranešimų peržiūrai",
"detection": "Nėra aptikimų peržiūrai",
- "motion": "Duomenų apie judesius nėra"
+ "motion": "Duomenų apie judesius nėra",
+ "recordingsDisabled": {
+ "title": "Įrašai privalo būti įjungti",
+ "description": "Peržiūros gali būti kuriamos tik tada kai kamerai yra aktyvuoti įrašymai."
+ }
},
"documentTitle": "Peržiūros - Frigate",
"recordings": {
@@ -36,5 +40,28 @@
},
"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": "{{count}} objektas",
+ "trackedObject_other": "{{count}} objektai",
+ "noObjectDetailData": "Nėra objekto detalių duomenų.",
+ "label": "Detalės",
+ "settings": "Vaizdo Nustatymai Detaliau",
+ "alwaysExpandActive": {
+ "title": "Visada išskleisti aktyvų",
+ "desc": "Aktyviai peržiūrimam įrašui visada išskleisti objekto detales jei jos yra."
+ }
+ },
+ "objectTrack": {
+ "trackedPoint": "Susektas taškas",
+ "clickToSeek": "Spustelkite perkelti į šį laiką"
+ },
+ "zoomIn": "Priartinti",
+ "zoomOut": "Patolinti",
+ "select_all": "Viską",
+ "normalActivity": "Normali veikla",
+ "needsReview": "Reikalinga peržiūra",
+ "securityConcern": "Saugumo rūpestis"
}
diff --git a/web/public/locales/lt/views/explore.json b/web/public/locales/lt/views/explore.json
index 0186e7365..b68a3233b 100644
--- a/web/public/locales/lt/views/explore.json
+++ b/web/public/locales/lt/views/explore.json
@@ -49,7 +49,8 @@
"regenerate": "Gauta nauja užklausa iš {{provider}} naujam aprašymui. Priklausomai nuo jūsų tiekėjo greičio, naują aprašymą sukurti gali užtrukti.",
"updatedSublabel": "Sėkmingai atnaujinta sub etiketė.",
"updatedLPR": "Sėkmingai atnaujinti registracijos numeriai.",
- "audioTranscription": "Sėkmingai užklausta garso aprašymo."
+ "audioTranscription": "Sėkmingai užklausta garso aprašymo. Priklausomai nuo jūsų Frigate serverio pajėgumų, tai gali užtrukti.",
+ "updatedAttributes": "Atributai sekmingai užkelti."
},
"error": {
"regenerate": "Nepavyko pakviesti {{provider}} naujam aprašymui: {{errorMessage}}",
@@ -158,7 +159,7 @@
},
"dialog": {
"confirmDelete": {
- "desc": "Trinant šį sekamą objektą taip pat bus pašalintos momentinės iškarpos, išsaugoti įterpiai, priskirti objekto gyvavimo ciklo įrašai. Šių sekamų objektų įrašyta filmuota medžiaga Istorijos vaizde ištrinta NEBUS.{{label}}?",
+ "ask_an": "Vai šis objekts ir{{label}}?",
+ "ask_full": "Vai šis objekts{{untranslatedLabel}} ({{translatedLabel}})?"
+ },
+ "state": {
+ "submitted": "Iesniegts"
+ }
+ }
+ },
+ "video": {
+ "viewInHistory": "Skatīt vēsturē"
+ }
+ },
+ "export": {
+ "time": {
+ "fromTimeline": "Izvēlieties no laika skalas",
+ "lastHour_zero": "Pēdējās stundas",
+ "lastHour_one": "Pēdējās{{count}}stundas",
+ "lastHour_other": "Pēdējās {{count}} stundas",
+ "custom": "Pielāgots",
+ "start": {
+ "title": "Sākuma laiks",
+ "label": "Izvēlieties Sākuma laiks"
+ },
+ "end": {
+ "title": "Beigu laiks",
+ "label": "Atlasiet Beigu laiks"
+ }
+ },
+ "name": {
+ "placeholder": "Ievadiet eksporta nosaukumu"
+ },
+ "select": "Izvēlieties",
+ "export": "Eksportēt",
+ "selectOrExport": "Atlasīt vai Eksportēt",
+ "toast": {
+ "success": "Eksportēšana veiksmīgi sākta. Skatiet failu eksportēšanas lapā.",
+ "view": "Skatīt",
+ "error": {
+ "failed": "Neizdevās sākt eksportēšanu: {{error}}",
+ "endTimeMustAfterStartTime": "Beigu laikam ir jābūt pēc sākuma laika",
+ "noVaildTimeSelected": "Nav izvēlēts derīgs laika diapazons"
+ }
+ },
+ "fromTimeline": {
+ "saveExport": "Saglabāt Eksportu",
+ "previewExport": "Priekšskatīt Eksportu"
+ }
+ },
+ "streaming": {
+ "label": "Straume",
+ "restreaming": {
+ "disabled": "Šai kamerai nav iespējota atkārtota straumēšana.",
+ "desc": {
+ "title": "Konfigurējiet go2rtc, lai šai kamerai varētu piekļūt papildu tiešraides skatīšanās un audio opcijām."
+ }
+ },
+ "showStats": {
+ "label": "Rādīt straumes statistiku",
+ "desc": "Iespējojiet šo opciju, lai straumes statistika tiktu rādīta kā pārklājums kameras attēlam."
+ },
+ "debugView": "Atkļūdošanas režīms"
+ },
+ "search": {
+ "saveSearch": {
+ "label": "Saglabāt meklēšanu",
+ "desc": "Norādiet šīs saglabātās meklēšanas nosaukumu.",
+ "placeholder": "Ievadiet meklēšanas nosaukumu",
+ "overwrite": "{{searchName}} jau pastāv. Saglabājot, esošā vērtība tiks pārrakstīta.",
+ "success": "Meklēšanas ({{searchName}}) ir saglabāts.",
+ "button": {
+ "save": {
+ "label": "Saglabāt šo meklēšanu"
+ }
+ }
+ }
+ },
+ "recording": {
+ "confirmDelete": {
+ "title": "Apstipriniet dzēšanu",
+ "desc": {
+ "selected": "Vai tiešām vēlaties dzēst visus ierakstītos video, kas saistīti ar šo pārskata vienumu?detect straumes netika saņemti kadri, pārbaudiet kļūdu žurnālus."
+ },
+ "cameraDisabled": "Kamera ir izslēgta",
+ "stats": {
+ "streamType": {
+ "title": "Straumes veids:",
+ "short": "Tips"
+ },
+ "bandwidth": {
+ "title": "Joslas platums:",
+ "short": "Joslas platums"
+ },
+ "latency": {
+ "title": "Latentums:",
+ "value": "{{seconds}} sekundes",
+ "short": {
+ "title": "Latentums",
+ "value": "{{seconds}} sek"
+ }
+ },
+ "totalFrames": "Kopējais kadru skaits:",
+ "droppedFrames": {
+ "title": "Izlaisti kadri:",
+ "short": {
+ "title": "Izlaisti",
+ "value": "{{droppedFrames}} kadri"
+ }
+ },
+ "decodedFrames": "Dekodētie kadri:",
+ "droppedFrameRate": "Kadru nomaiņas ātruma kritums:"
+ },
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "Kadrs veiksmīgi iesniegts pakalpojumam Frigate+"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "Neizdevās iesniegt kadru Frigate+"
+ }
+ }
+}
diff --git a/web/public/locales/lv/objects.json b/web/public/locales/lv/objects.json
new file mode 100644
index 000000000..981d5cb44
--- /dev/null
+++ b/web/public/locales/lv/objects.json
@@ -0,0 +1,19 @@
+{
+ "person": "Persona",
+ "bicycle": "Velosipēds",
+ "car": "Automašīna",
+ "motorcycle": "Motocikls",
+ "airplane": "Lidmašīna",
+ "bus": "Autobuss",
+ "train": "Vilciens",
+ "package": "Paciņa",
+ "bbq_grill": "Grils",
+ "amazon": "Amazon",
+ "usps": "USPS",
+ "ups": "UPS",
+ "fedex": "FedEx",
+ "dhl": "DHL",
+ "postnl": "PostNL",
+ "dpd": "DPD",
+ "boat": "Laiva"
+}
diff --git a/web/public/locales/lv/views/classificationModel.json b/web/public/locales/lv/views/classificationModel.json
new file mode 100644
index 000000000..5d26d5b74
--- /dev/null
+++ b/web/public/locales/lv/views/classificationModel.json
@@ -0,0 +1,36 @@
+{
+ "documentTitle": "Klassifikācijas modeļi",
+ "details": {
+ "scoreInfo": "Rezultāts atbilst vidējai klasifikācijas ticamībai no visām objekta detektēšanas reizēm.",
+ "none": "Nav",
+ "unknown": "Nezināms"
+ },
+ "description": {
+ "invalidName": "Nederīgs nosaukums. Nosaukumi drīkst saturēt tikai burtus, ciparus, atstarpes, apostrofus, pasvītras un defises."
+ },
+ "button": {
+ "deleteClassificationAttempts": "Dzēst klasifikācijas attēlus",
+ "renameCategory": "Pārdēvēt klasi",
+ "deleteCategory": "Dzēst klasi",
+ "deleteImages": "Dzēst attēlus"
+ },
+ "wizard": {
+ "step3": {
+ "training": {
+ "title": "Trenē modeli",
+ "description": "Tavs modelis tiek trenēts. Aizver šo paziņojumu, un tavs modelis tiks izmantots, tiklīdz trenēšana ir pabeigta."
+ },
+ "retryGenerate": "Atkārtot ģenerēšanu",
+ "classifying": "Klasificē un trenē...",
+ "trainingStarted": "Trenēšana veiksmīgi uzsākta",
+ "errors": {
+ "generateFailed": "Neizdevās ģenerēt piemērus: {{error}}",
+ "generationFailed": "Ģenerēšana neizdevās. Mēģini vēlreiz.",
+ "classifyFailed": "Neizdevās klasificēt attēlus: {{error}}"
+ }
+ }
+ },
+ "train": {
+ "titleShort": "Pēdējās"
+ }
+}
diff --git a/web/public/locales/lv/views/configEditor.json b/web/public/locales/lv/views/configEditor.json
new file mode 100644
index 000000000..286da8e9a
--- /dev/null
+++ b/web/public/locales/lv/views/configEditor.json
@@ -0,0 +1,18 @@
+{
+ "documentTitle": "Konfigurācijas rediģēšana - Frigate",
+ "configEditor": "Konfigurācijas redaktors",
+ "safeConfigEditor": "Konfigurācijas redaktors (drošais režīms)",
+ "safeModeDescription": "Frigate ir drošajā režīmā konfigurācijas pārbaudes kļūdas dēļ.",
+ "copyConfig": "Kopēt konfigurāciju",
+ "saveAndRestart": "Saglabāt un pārstartēt",
+ "saveOnly": "Tikai saglabāt",
+ "confirm": "Vai iziet, nesaglabājot?",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Konfigurācija ir kopēta starpliktuvē."
+ },
+ "error": {
+ "savingError": "Saglabājot konfigurāciju, radās kļūda"
+ }
+ }
+}
diff --git a/web/public/locales/lv/views/events.json b/web/public/locales/lv/views/events.json
new file mode 100644
index 000000000..77d4d34e5
--- /dev/null
+++ b/web/public/locales/lv/views/events.json
@@ -0,0 +1,61 @@
+{
+ "alerts": "Paziņojumi",
+ "detections": "Atklājumi",
+ "motion": {
+ "label": "Kustība",
+ "only": "Tikai kustība"
+ },
+ "allCameras": "Visas kameras",
+ "empty": {
+ "alert": "Nav paziņojumu, kurus pārskatīt",
+ "detection": "Nav apskatāmu konstatējumu",
+ "motion": "Nav atrasti kustības dati"
+ },
+ "timeline": "Laika skala",
+ "timeline.aria": "Izvēlieties laika skalu",
+ "zoomIn": "Pietuvināt",
+ "zoomOut": "Tālināt",
+ "events": {
+ "label": "Notikumi",
+ "aria": "Izvēlieties notikumus",
+ "noFoundForTimePeriod": "Šajā laika periodā nav atrasts neviens notikums."
+ },
+ "detail": {
+ "label": "Detaļas",
+ "noDataFound": "Nav detalizētu datu pārskatīšanai",
+ "aria": "Pārslēgt detalizēto skatu",
+ "trackedObject_one": "{{count}} objekts",
+ "trackedObject_other": "{{count}} objekti",
+ "noObjectDetailData": "Nav pieejami objekta detalizēti dati.",
+ "settings": "Detaļas skata iestatījumi",
+ "alwaysExpandActive": {
+ "title": "Vienmēr izvērst aktīvs",
+ "desc": "Vienmēr izvērsiet aktīvā pārskata vienuma objekta informāciju, ja tāda ir pieejama."
+ }
+ },
+ "objectTrack": {
+ "trackedPoint": "Izsekots punkts",
+ "clickToSeek": "Noklikšķiniet, lai pārietu uz šo laiku"
+ },
+ "documentTitle": "Pārskats - Frigate",
+ "recordings": {
+ "documentTitle": "Ieraksti - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "Pēdējās 24 stundas"
+ },
+ "markAsReviewed": "Atzīmēt kā pārskatītu",
+ "markTheseItemsAsReviewed": "Atzīmēt šos vienumus kā pārskatītus",
+ "newReviewItems": {
+ "label": "Skatīt jaunus atsauksmju vienumus",
+ "button": "Jauni vienumi, kas jāpārskata"
+ },
+ "selected_one": "atlasīts {{count}}",
+ "selected_other": "atlasīts {{count}}",
+ "select_all": "Viss",
+ "camera": "Kamera",
+ "detected": "atklāts",
+ "normalActivity": "Normāls",
+ "needsReview": "Nepieciešama pārskatīšana",
+ "securityConcern": "Drošības jautājums"
+}
diff --git a/web/public/locales/lv/views/explore.json b/web/public/locales/lv/views/explore.json
new file mode 100644
index 000000000..63a2d2cbc
--- /dev/null
+++ b/web/public/locales/lv/views/explore.json
@@ -0,0 +1,49 @@
+{
+ "documentTitle": "Notikumu meklēšana - Frigate",
+ "generativeAI": "Ģeneratīvs AI",
+ "exploreMore": "Paskatīt vairāk objektu{{label}}",
+ "details": {
+ "timestamp": "Laika zīmogs"
+ },
+ "exploreIsUnavailable": {
+ "title": "Notikumu meklēšana nav pieejama",
+ "embeddingsReindexing": {
+ "context": "Meklēšana būs pieejama pēc tam, kad būs pabeigta izsekoto objektu atkārtota indeksēšana.",
+ "startingUp": "Notiek palaišana…",
+ "estimatedTime": "Paredzamais atlikušais laiks:"
+ }
+ },
+ "itemMenu": {
+ "findSimilar": {
+ "label": "Atrast līdzīgus",
+ "aria": "Atrast līdzīgus izsekotos priekšmetus"
+ },
+ "submitToPlus": {
+ "label": "Iesniegt Frigate+",
+ "aria": "Iesniegt Frigate Plus"
+ },
+ "viewInHistory": {
+ "label": "Atrast vēsturē"
+ },
+ "deleteTrackedObject": {
+ "label": "Dzēst šo izsekoto priekšmetu"
+ }
+ },
+ "dialog": {
+ "confirmDelete": {
+ "title": "Apstiprināt dzēšanu"
+ }
+ },
+ "searchResult": {
+ "nextTrackedObject": "Nākamais izsekotais objekts",
+ "deleteTrackedObject": {
+ "toast": {
+ "success": "Izsekotais objekts veiksmīgi izdzēsts.",
+ "error": "Neizdevās izdzēst izsekoto objektu: {{errorMessage}}"
+ }
+ }
+ },
+ "aiAnalysis": {
+ "title": "MI analīze"
+ }
+}
diff --git a/web/public/locales/lv/views/exports.json b/web/public/locales/lv/views/exports.json
new file mode 100644
index 000000000..73209ce9e
--- /dev/null
+++ b/web/public/locales/lv/views/exports.json
@@ -0,0 +1,23 @@
+{
+ "documentTitle": "Eksportēt - Frigate",
+ "search": "Meklēt",
+ "noExports": "Eksporti nav atrasti",
+ "deleteExport": "Dzēst eksportu",
+ "deleteExport.desc": "Vai esi pārliecināts, ka vēlies izdzēst{{exportName}}?",
+ "editExport": {
+ "title": "Pārdēvēt eksportu",
+ "desc": "Ievadiet jaunu nosaukumu šim eksportam.",
+ "saveExport": "Saglabāt eksportu"
+ },
+ "tooltip": {
+ "shareExport": "Kopīgot eksportu",
+ "downloadVideo": "Lejupielādēt video",
+ "editName": "Rediģēt nosaukumu",
+ "deleteExport": "Eksporta dzēšana"
+ },
+ "toast": {
+ "error": {
+ "renameExportFailed": "Neizdevās pārdēvēt eksporta failu: {{errorMessage}}"
+ }
+ }
+}
diff --git a/web/public/locales/lv/views/faceLibrary.json b/web/public/locales/lv/views/faceLibrary.json
new file mode 100644
index 000000000..f6e254c22
--- /dev/null
+++ b/web/public/locales/lv/views/faceLibrary.json
@@ -0,0 +1,93 @@
+{
+ "description": {
+ "addFace": "Pievienojiet savai seju bibliotēkai jaunu kolekciju, augšupielādējot savu pirmo attēlu.",
+ "placeholder": "Ievadi kolekcijas nosaukumu",
+ "invalidName": "Nederīgs nosaukums. Nosaukumi drīkst saturēt tikai burtus, ciparus, atstarpes, apostrofus, pasvītras un defises."
+ },
+ "details": {
+ "timestamp": "Laika zīmogs",
+ "unknown": "Nezināms",
+ "scoreInfo": "Rezultāts ir visu seju rezultāta vidējais, svērts pēc sejas izmēra katrā attēlā."
+ },
+ "documentTitle": "Seju bibliotēka - Frigate",
+ "uploadFaceImage": {
+ "title": "Augšupielādējiet sejas attēlu",
+ "desc": "Augšupielādējiet attēlu, lai skenētu sejas un iekļautu to lapā {{pageToggle}}"
+ },
+ "collections": "Kolekcijas",
+ "createFaceLibrary": {
+ "new": "Izveidojiet jaunu seju",
+ "nextSteps": "Lai izveidotu stabilu pamatu:{{label}}?",
"ask_a": "Er dette objektet en {{label}}?",
"ask_full": "Er dette objekt en {{untranslatedLabel}} ({{translatedLabel}})?"
@@ -56,12 +56,13 @@
}
},
"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",
"endTimeMustAfterStartTime": "Sluttid må være etter starttid"
- }
+ },
+ "view": "Vis"
},
"fromTimeline": {
"previewExport": "Forhåndsvis eksport",
@@ -117,14 +118,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..eb0684619 100644
--- a/web/public/locales/nb-NO/components/filter.json
+++ b/web/public/locales/nb-NO/components/filter.json
@@ -1,30 +1,30 @@
{
"filter": "Filter",
"labels": {
- "label": "Merkelapper",
+ "label": "Etiketter",
"all": {
- "title": "Alle masker / soner",
- "short": "Merkelapper"
+ "title": "Alle etiketter",
+ "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",
"submittedToFrigatePlus": {
"label": "Sendt til Frigate+",
- "tips": "Du må først filtrere på sporede objekter som har et øyeblikksbilde.detekt strømmen, sjekk feilloggene"
+ "desc": "Ingen bilder er mottatt på {{cameraName}} detekt-strømmen, sjekk feilloggene"
},
"cameraDisabled": "Kameraet er deaktivert",
"toast": {
diff --git a/web/public/locales/nb-NO/objects.json b/web/public/locales/nb-NO/objects.json
index d292b63b8..5c7c5edd2 100644
--- a/web/public/locales/nb-NO/objects.json
+++ b/web/public/locales/nb-NO/objects.json
@@ -101,7 +101,7 @@
"raccoon": "Vaskebjørn",
"robot_lawnmower": "Robotgressklipper",
"waste_bin": "Avfallsbeholder",
- "on_demand": "På forespørsel",
+ "on_demand": "Manuelt opptak",
"face": "Ansikt",
"license_plate": "Kjennemerke",
"package": "Pakke",
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..e7ee73f08
--- /dev/null
+++ b/web/public/locales/nb-NO/views/classificationModel.json
@@ -0,0 +1,185 @@
+{
+ "documentTitle": "Klassifiseringsmodeller - Frigate",
+ "button": {
+ "deleteClassificationAttempts": "Slett klassifiseringsbilder",
+ "renameCategory": "Omdøp klasse",
+ "deleteCategory": "Slett klasse",
+ "deleteImages": "Slett bilder",
+ "trainModel": "Tren modell",
+ "addClassification": "Legg til klassifisering",
+ "deleteModels": "Slett modeller",
+ "editModel": "Rediger modell"
+ },
+ "toast": {
+ "success": {
+ "deletedCategory": "Klasse slettet",
+ "deletedImage": "Bilder slettet",
+ "categorizedImage": "Klassifiserte bildet",
+ "trainedModel": "Modellen ble trent.",
+ "trainingModel": "Modelltrening startet.",
+ "deletedModel_one": "{{count}} modell ble slettet",
+ "deletedModel_other": "{{count}} modeller ble slettet",
+ "updatedModel": "Modellkonfigurasjonen ble oppdatert",
+ "renamedCategory": "Klassen ble omdøpt til {{name}}"
+ },
+ "error": {
+ "deleteImageFailed": "Kunne ikke slette: {{errorMessage}}",
+ "deleteCategoryFailed": "Kunne ikke slette klasse: {{errorMessage}}",
+ "categorizeFailed": "Kunne ikke klassifisere bilde: {{errorMessage}}",
+ "trainingFailed": "Modelltrening mislyktes. Sjekk Frigate-loggene for detaljer.",
+ "deleteModelFailed": "Kunne ikke slette modell: {{errorMessage}}",
+ "trainingFailedToStart": "Kunne ikke starte modelltrening: {{errorMessage}}",
+ "updateModelFailed": "Kunne ikke oppdatere modell: {{errorMessage}}",
+ "renameCategoryFailed": "Kunne ikke omdøpe klasse: {{errorMessage}}"
+ }
+ },
+ "deleteCategory": {
+ "title": "Slett klasse",
+ "desc": "Er du sikker på at du vil slette klassen {{name}}? Dette vil permanent slette alle tilknyttede bilder og kreve at modellen trenes på nytt.",
+ "minClassesTitle": "Kan ikke slette klasse",
+ "minClassesDesc": "En klassifiseringsmodell må ha minst 2 klasser. Legg til en ny klasse før du sletter denne."
+ },
+ "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": "Omdøp klasse",
+ "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": "Nylige"
+ },
+ "categories": "Klasser",
+ "createCategory": {
+ "new": "Opprett ny klasse"
+ },
+ "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": "Klasser",
+ "classesTip": "Lær om klasser",
+ "classesStateDesc": "Definer de ulike tilstandene kamerasonen kan være i. For eksempel: 'åpen' og 'lukket' for en garasjeport.",
+ "classesObjectDesc": "Definer klassene du vil klassifisere oppdagede objekter i. For eksempel: 'bud', 'beboer', 'fremmed' for personklassifisering.",
+ "classPlaceholder": "Skriv inn klassenavn...",
+ "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 klasse er påkrevd",
+ "classesUnique": "Klassenavn må være unike",
+ "stateRequiresTwoClasses": "Tilstandsmodeller krever minst 2 klasser",
+ "objectLabelRequired": "Velg en objektetikett",
+ "objectTypeRequired": "Velg en klassifiseringstype",
+ "noneNotAllowed": "Klassen 'ingen' er ikke tillatt"
+ },
+ "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 klassen.",
+ "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",
+ "allImagesRequired_one": "Vennligst klassifiser alle bildene. {{count}} bilde gjenstår.",
+ "allImagesRequired_other": "Vennligst klassifiser alle bildene. {{count}} bilder gjenstår.",
+ "modelCreated": "Modellen ble opprettet. Bruk visningen Nylige klassifiseringer for å legge til bilder for manglende tilstander, og tren deretter modellen.",
+ "missingStatesWarning": {
+ "title": "Manglende tilstandseksempler",
+ "description": "Det anbefales å velge eksempler for alle tilstander for å oppnå best mulig resultat. Du kan fortsette uten å velge alle tilstander, men modellen vil ikke bli trent før alle tilstander har bilder. Etter at du har gått videre, bruk visningen Nylige klassifiseringer for å klassifisere bilder for de manglende tilstandene, og tren deretter modellen."
+ }
+ }
+ },
+ "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": "Score representerer gjennomsnittlig klassifiseringskonfidens på tvers av alle deteksjoner av dette objektet.",
+ "none": "Ingen",
+ "unknown": "Ukjent"
+ },
+ "tooltip": {
+ "trainingInProgress": "Modellen trenes nå",
+ "noNewImages": "Ingen nye bilder å trene på. Klassifiser flere bilder i datasettet først.",
+ "noChanges": "Ingen endringer i datasettet siden forrige trening.",
+ "modelNotReady": "Modellen er ikke klar til å trenes"
+ },
+ "edit": {
+ "title": "Rediger klassifiseringsmodell",
+ "descriptionState": "Rediger klassene for denne tilstandsklassifiseringsmodellen. Endringer vil kreve at modellen trenes på nytt.",
+ "descriptionObject": "Rediger objekttypen og klassifiseringstypen for denne objektklassifiseringsmodellen.",
+ "stateClassesInfo": "Merk: Endring av tilstandsklasser krever at modellen trenes på nytt med de oppdaterte klassene."
+ },
+ "none": "Ingen"
+}
diff --git a/web/public/locales/nb-NO/views/events.json b/web/public/locales/nb-NO/views/events.json
index e333fb5ef..5e77f38ed 100644
--- a/web/public/locales/nb-NO/views/events.json
+++ b/web/public/locales/nb-NO/views/events.json
@@ -3,7 +3,11 @@
"empty": {
"alert": "Det er ingen varsler å inspisere",
"detection": "Det er ingen deteksjoner å inspisere",
- "motion": "Ingen bevegelsesdata funnet"
+ "motion": "Ingen bevegelsesdata funnet",
+ "recordingsDisabled": {
+ "title": "Opptak må være aktivert",
+ "description": "Inspeksjonselementer kan kun opprettes for et kamera når opptak er aktivert for det kameraet."
+ }
},
"timeline": "Tidslinje",
"events": {
@@ -23,7 +27,7 @@
},
"allCameras": "Alle kameraer",
"timeline.aria": "Velg tidslinje",
- "documentTitle": "Inspiser - Frigate",
+ "documentTitle": "Inspeksjon - Frigate",
"recordings": {
"documentTitle": "Opptak - Frigate"
},
@@ -36,5 +40,28 @@
"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": "{{count}} objekt",
+ "trackedObject_other": "{{count}} 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",
+ "normalActivity": "Normal",
+ "needsReview": "Trenger inspeksjon",
+ "securityConcern": "Sikkerhetsrisiko",
+ "select_all": "Alle"
}
diff --git a/web/public/locales/nb-NO/views/explore.json b/web/public/locales/nb-NO/views/explore.json
index 9f14df89f..a9fe5230a 100644
--- a/web/public/locales/nb-NO/views/explore.json
+++ b/web/public/locales/nb-NO/views/explore.json
@@ -19,7 +19,7 @@
"visionModel": "Visjonsmodell",
"visionModelFeatureExtractor": "Funksjonsekstraktor for visjonsmodell",
"textModel": "Tekstmodell",
- "textTokenizer": "Tekst symbolbygger"
+ "textTokenizer": "Tekst-tokeniserer"
},
"context": "Frigate laster ned de nødvendige vektorrepresentasjonsmodellene for å støtte funksjonen for semantisk søk. Dette kan ta flere minutter, avhengig av hastigheten på nettverksforbindelsen din.",
"tips": {
@@ -87,28 +87,30 @@
},
"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."
+ "audioTranscription": "Lydtranskripsjon ble forespurt. Avhengig av ytelsen på din Frigate server kan transkripsjonen ta noe tid å fullføre.",
+ "updatedAttributes": "Attributter ble oppdatert."
},
"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}}",
- "audioTranscription": "Forespørsel om lydtranskripsjon feilet: {{errorMessage}}"
+ "updatedSublabelFailed": "Feil ved oppdatering av underetikett: {{errorMessage}}",
+ "audioTranscription": "Forespørsel om lydtranskripsjon feilet: {{errorMessage}}",
+ "updatedAttributesFailed": "Kunne ikke oppdatere attributter: {{errorMessage}}"
}
},
"desc": "Detaljer for inspeksjonselement",
"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": {
- "info": "Den høyeste poengsummen er den høyeste medianverdi for det sporede objektet, så denne kan avvike fra poengsummen som vises på miniatyrbildet for søkeresultatet.",
- "label": "Høyeste poengsum"
+ "info": "Toppscoren er den høyeste medianverdien for det sporede objektet, så denne kan avvike fra scoren som vises på miniatyrbildet i søkeresultatet.",
+ "label": "Toppscore"
},
"estimatedSpeed": "Estimert hastighet",
"objects": "Objekter",
@@ -126,10 +128,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",
@@ -140,17 +142,25 @@
"zones": "Soner",
"timestamp": "Tidsstempel",
"expandRegenerationMenu": "Utvid regenereringsmenyen",
- "regenerateFromSnapshot": "Regenerer fra øyeblikksbilde",
+ "regenerateFromSnapshot": "Regenerer fra stillbilde",
"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"
+ "label": "Stillbilde score"
},
"score": {
- "label": "Poengsum"
+ "label": "Score"
+ },
+ "editAttributes": {
+ "title": "Rediger attributter",
+ "desc": "Velg klassifiseringsattributter for denne {{label}}"
+ },
+ "attributes": "Klassifiseringsattributter",
+ "title": {
+ "label": "Tittel"
}
},
"itemMenu": {
@@ -163,8 +173,8 @@
"label": "Last ned video"
},
"downloadSnapshot": {
- "label": "Last ned øyeblikksbilde",
- "aria": "Last ned øyeblikksbilde"
+ "label": "Last ned stillbilde",
+ "aria": "Last ned stillbilde"
},
"viewObjectLifecycle": {
"label": "Vis objektets livssyklus",
@@ -188,28 +198,46 @@
"audioTranscription": {
"label": "Transkriber",
"aria": "Forespør lydtranskripsjon"
+ },
+ "showObjectDetails": {
+ "label": "Vis objektets sti"
+ },
+ "hideObjectDetails": {
+ "label": "Skjul objektets sti"
+ },
+ "viewTrackingDetails": {
+ "label": "Vis sporingsdetaljer",
+ "aria": "Vis sporingsdetaljene"
+ },
+ "downloadCleanSnapshot": {
+ "label": "Last ned rent stillbilde",
+ "aria": "Last ned stillbilde uten markeringer"
}
},
"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}}%"
+ "tooltip": "Samsvarer {{type}} til {{confidence}}%",
+ "previousTrackedObject": "Forrige sporede objekt",
+ "nextTrackedObject": "Neste sporede objekt"
},
"trackedObjectDetails": "Detaljer om sporet objekt",
"type": {
"details": "detaljer",
- "snapshot": "øyeblikksbilde",
+ "snapshot": "stillbilde",
"video": "video",
- "object_lifecycle": "objektets livssyklus"
+ "object_lifecycle": "objektets livssyklus",
+ "thumbnail": "miniatyrbilde",
+ "tracking_details": "sporingsdetaljer"
},
"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.clean_copy-øyeblikksbilder er aktivert i konfigurasjonen din.",
+ "title": "Konfigurasjon av stillbilde",
+ "desc": "Innsending til Frigate+ krever at både stillbilder og clean_copy-stillbilder er aktivert i konfigurasjonen din.",
"documentation": "Se dokumentasjonen",
"table": {
"camera": "Kamera",
- "snapshots": "Øyeblikksbilder",
- "cleanCopySnapshots": "clean_copy-øyeblikksbilder"
+ "snapshots": "Stillbilder",
+ "cleanCopySnapshots": "clean_copy-stillbilder"
},
- "cleanCopyWarning": "Noen kameraer har øyeblikksbilder aktivert, men ren kopi er deaktivert. Du må aktivere clean_copy i øyeblikksbilde-konfigurasjonen for å kunne sende bilder fra disse kameraene til Frigate+."
+ "cleanCopyWarning": "Noen kameraer har stillbilder aktivert, men ren kopi er deaktivert. Du må aktivere clean_copy i stillbilde-konfigurasjonen for å kunne sende bilder fra disse kameraene til Frigate+."
},
"toast": {
"success": "Frigate+ innstillingene er lagret. Start Frigate på nytt for å aktivere endringene.",
@@ -675,12 +707,12 @@
"enrichments": {
"title": "Innstillinger for utvidelser",
"licensePlateRecognition": {
- "desc": "Frigate kan gjenkjenne kjennemerker på kjøretøy og automatisk legge til de oppdagede tegnene i feltet \"recognized_license_plate\", eller et kjent navn som en under-merkelapp på objekter av typen bil. Et vanlig brukstilfelle kan være å lese kjennemerker på biler som kjører inn i en innkjørsel eller biler som passerer på en gate.",
+ "desc": "Frigate kan gjenkjenne kjennemerker på kjøretøy og automatisk legge til de oppdagede tegnene i feltet \"recognized_license_plate\", eller et kjent navn som en underetikett på objekter av typen bil. Et vanlig brukstilfelle kan være å lese kjennemerker på biler som kjører inn i en innkjørsel eller biler som passerer på en gate.",
"title": "Kjennemerke gjenkjenning",
"readTheDocumentation": "Se dokumentasjonen"
},
"birdClassification": {
- "desc": "Fugleklassifisering identifiserer kjente fugler ved hjelp av en kvantisert TensorFlow-modell. Når en fugl gjenkjennes, vil det vanlige navnet legges til som en under-merkelapp. Denne informasjonen vises i brukergrensesnittet, filtre, samt i meldingsvarsler.",
+ "desc": "Fugleklassifisering identifiserer kjente fugler ved hjelp av en kvantisert TensorFlow-modell. Når en fugl gjenkjennes, vil det vanlige navnet legges til som en underetikett. Denne informasjonen vises i brukergrensesnittet, filtre, samt i meldingsvarsler.",
"title": "Klassifisering av fugler"
},
"semanticSearch": {
@@ -724,7 +756,7 @@
}
},
"title": "Ansiktsgjenkjenning",
- "desc": "Ansiktsgjenkjenning gjør det mulig å tildele navn til personer, og når ansiktet deres gjenkjennes, vil Frigate tildele personens navn som en under-merkelapp. Denne informasjonen vises i brukergrensesnittet, filtre, samt i meldingsvarsler.",
+ "desc": "Ansiktsgjenkjenning gjør det mulig å tildele navn til personer, og når ansiktet deres gjenkjennes, vil Frigate tildele personens navn som en underetikett. Denne informasjonen vises i brukergrensesnittet, filtre, samt i meldingsvarsler.",
"readTheDocumentation": "Se dokumentasjonen"
},
"unsavedChanges": "Ulagrede endringer i innstillinger for utvidelser",
@@ -737,10 +769,10 @@
"triggers": {
"documentTitle": "Utløsere",
"management": {
- "title": "Utløserhåndtering",
+ "title": "Utløser",
"desc": "Administrer utløsere for {{camera}}. Bruk miniatyrbilde-type for å utløse på lignende miniatyrbilder som det sporede objektet du har valgt, og beskrivelsestype for å utløse på lignende beskrivelser basert på teksten du spesifiserer."
},
- "addTrigger": "Legg til utløser",
+ "addTrigger": "Legg til utløser",
"table": {
"name": "Navn",
"type": "Type",
@@ -758,7 +790,9 @@
},
"actions": {
"alert": "Marker som varsel",
- "notification": "Send meldingsvarsel"
+ "notification": "Send meldingsvarsel",
+ "sub_label": "Legg til underetikett",
+ "attribute": "Legg til attributt"
},
"dialog": {
"createTrigger": {
@@ -776,25 +810,28 @@
"form": {
"name": {
"title": "Navn",
- "placeholder": "Skriv inn navn på utløser",
+ "placeholder": "Navngi denne utløseren",
"error": {
- "minLength": "Navnet må være minst 2 tegn langt.",
- "invalidCharacters": "Navnet kan bare inneholde bokstaver, tall, understreker og bindestreker.",
+ "minLength": "Feltet må være minst 2 tegn langt.",
+ "invalidCharacters": "Feltet kan bare inneholde bokstaver, tall, understreker og bindestreker.",
"alreadyExists": "En utløser med dette navnet finnes allerede for dette kameraet."
- }
+ },
+ "description": "Skriv inn et unikt navn eller beskrivelse for å identifisere denne utløseren"
},
"enabled": {
"description": "Aktiver eller deaktiver denne utløseren"
},
"type": {
"title": "Type",
- "placeholder": "Velg utløsertype"
+ "placeholder": "Velg utløsertype",
+ "description": "Utløs når en lignende sporet objektbeskrivelse blir detektert",
+ "thumbnail": "Utløs når et lignende sporet miniatyrbilde blir detektert"
},
"content": {
"title": "Innhold",
- "imagePlaceholder": "Velg et bilde",
+ "imagePlaceholder": "Velg et miniatyrbilde",
"textPlaceholder": "Skriv inn tekstinnhold",
- "imageDesc": "Velg et bilde for å utløse denne handlingen når et lignende bilde oppdages.",
+ "imageDesc": "Kun de siste 100 miniatyrbildene vises. Hvis du ikke finner ønsket miniatyrbilde, kan du se gjennom tidligere objekter i Utforsk og opprette en utløser fra menyen der.",
"textDesc": "Skriv inn tekst for å utløse denne handlingen når en lignende beskrivelse av et sporet objekt oppdages.",
"error": {
"required": "Innhold er påkrevd."
@@ -805,14 +842,20 @@
"error": {
"min": "Terskelverdien må minst være 0",
"max": "Terskelverdien kan maksimum være 1"
- }
+ },
+ "desc": "Angi likhetsgrensen for denne utløseren. En høyere grense betyr at et høyere samsvar kreves for å utløse hendelsen."
},
"actions": {
"title": "Handlinger",
- "desc": "Som standard sender Frigate en MQTT-melding for alle utløsere. Velg en ekstra handling som skal utføres når denne utløseren aktiveres.",
+ "desc": "Som standard sender Frigate en MQTT-melding for alle utløsere. Underetiketter legger til navnet på utløseren i objektetiketten. Attributter er søkbare metadata som lagres separat i objektets sporingsmetadata.",
"error": {
"min": "Minst én handling må velges."
}
+ },
+ "friendly_name": {
+ "description": "Et valgfritt brukervennlig navn eller beskrivende tekst for denne utløseren.",
+ "title": "Brukervennlig navn",
+ "placeholder": "Navngi eller beskriv denne utløseren"
}
}
},
@@ -827,6 +870,27 @@
"updateTriggerFailed": "Kunne ikke oppdatere utløser: {{errorMessage}}",
"deleteTriggerFailed": "Kunne ikke slette utløser: {{errorMessage}}"
}
+ },
+ "semanticSearch": {
+ "title": "Semantisk søk er deaktivert",
+ "desc": "Semantisk søk må aktiveres for å bruke utløsere."
+ },
+ "wizard": {
+ "title": "Opprett utløser",
+ "step1": {
+ "description": "Konfigurer grunnleggende innstillinger for utløseren."
+ },
+ "step2": {
+ "description": "Sett opp innholdet som skal utløse denne handlingen."
+ },
+ "step3": {
+ "description": "Konfigurer terskelen og handlingene for denne utløseren."
+ },
+ "steps": {
+ "nameAndType": "Navn og type",
+ "configureData": "Konfigurer data",
+ "thresholdAndActions": "Terskel og handlinger"
+ }
}
},
"roles": {
@@ -848,7 +912,8 @@
"createRole": "Rollen {{role}} ble opprettet",
"updateCameras": "Kameraer oppdatert for rollen {{role}}",
"deleteRole": "Rollen {{role}} ble slettet",
- "userRolesUpdated": "{{count}} bruker(e) som var tildelt denne rollen er oppdatert til \"visningsbruker\", som har tilgang til alle kameraer."
+ "userRolesUpdated_one": "{{count}} bruker tildelt denne rollen er oppdatert til \"visningsbruker\", som har tilgang til alle kameraer.",
+ "userRolesUpdated_other": "{{count}} brukere tildelt denne rollen er oppdatert til \"visningsbruker\", som har tilgang til alle kameraer."
},
"error": {
"createRoleFailed": "Kunne ikke opprette rolle: {{errorMessage}}",
@@ -888,5 +953,358 @@
}
}
}
+ },
+ "cameraWizard": {
+ "title": "Legg til kamera",
+ "description": "Følg trinnene nedenfor for å legge til et nytt kamera i din Frigate-installasjon.",
+ "steps": {
+ "nameAndConnection": "Navn og tilkobling",
+ "streamConfiguration": "Strømkonfigurasjon",
+ "validationAndTesting": "Validering og testing",
+ "probeOrSnapshot": "Sjekk eller stillbilde"
+ },
+ "save": {
+ "success": "Lagret nytt kamera {{cameraName}}.",
+ "failure": "Feil ved lagring av {{cameraName}}."
+ },
+ "testResultLabels": {
+ "resolution": "Oppløsning",
+ "video": "Video",
+ "audio": "Lyd",
+ "fps": "FPS"
+ },
+ "commonErrors": {
+ "noUrl": "Vennligst oppgi en gyldig strøm-URL",
+ "testFailed": "Strømmetest feilet: {{error}}"
+ },
+ "step1": {
+ "description": "Skriv inn kameradetaljene dine og velg å sjekke kameraet eller manuelt velg produsent.",
+ "cameraName": "Kameranavn",
+ "cameraNamePlaceholder": "f.eks. front_dor eller Hageoversikt",
+ "host": "Vert/IP-adresse",
+ "port": "Port",
+ "username": "Brukernavn",
+ "usernamePlaceholder": "Valgfritt",
+ "password": "Passord",
+ "passwordPlaceholder": "Valgfritt",
+ "selectTransport": "Velg transportprotokoll",
+ "cameraBrand": "Kameramerke",
+ "selectBrand": "Velg kameramerke for URL-mal",
+ "customUrl": "Egendefinert strømme-URL",
+ "brandInformation": "Merkevare-informasjon",
+ "brandUrlFormat": "For kameraer med RTSP URL-format som: {{exampleUrl}}",
+ "customUrlPlaceholder": "rtsp://brukernavn:passord@vert:port/sti",
+ "testConnection": "Test tilkobling",
+ "testSuccess": "Tilkoblingstesten var vellykket!",
+ "testFailed": "Tilkoblingstesten feilet. Vennligst sjekk inntastingen din og prøv igjen.",
+ "streamDetails": "Strømdetaljer",
+ "warnings": {
+ "noSnapshot": "Kunne ikke hente et øyeblikksbilde fra den konfigurerte strømmen."
+ },
+ "errors": {
+ "brandOrCustomUrlRequired": "Enten velg et kameramerke med vert/IP eller velg 'Annet' med en egendefinert URL",
+ "nameRequired": "Kameranavn er påkrevd",
+ "nameLength": "Kameranavnet må være 64 tegn eller mindre",
+ "invalidCharacters": "Kameranavnet inneholder ugyldige tegn",
+ "nameExists": "Kameranavnet finnes allerede",
+ "brands": {
+ "reolink-rtsp": "Reolink RTSP anbefales ikke. Aktiver HTTP i kameraets fastvare-innstillinger og start kameraveiviseren på nytt."
+ },
+ "customUrlRtspRequired": "Egendefinerte URL-er må begynne med \"rtsp://\". Manuell konfigurering kreves for kamerastrømmer som ikke bruker RTSP."
+ },
+ "docs": {
+ "reolink": "https://docs.frigate.video/configuration/camera_specific.html#reolink-cameras"
+ },
+ "testing": {
+ "probingMetadata": "Henter kamerametadata…",
+ "fetchingSnapshot": "Henter øyeblikksbilde for kamera..."
+ },
+ "connectionSettings": "Tilkoblingsinnstillinger",
+ "detectionMethod": "Metode for strømdeteksjon",
+ "onvifPort": "ONVIF-port",
+ "probeMode": "Sjekk kamera",
+ "manualMode": "Manuelt valg",
+ "detectionMethodDescription": "Sjekk kameraet med ONVIF (hvis støttet) for å finne kameraets strømme-URL-er, eller velg kameramerke manuelt for å bruke forhåndsdefinerte URL-er. For å skrive inn en egendefinert RTSP URL, velg manuell metode og velg \"Annet\".",
+ "onvifPortDescription": "For kameraer som støtter ONVIF, er dette vanligvis 80 eller 8080.",
+ "useDigestAuth": "Bruk digest-autentisering",
+ "useDigestAuthDescription": "Bruk HTTP digest-autentisering for ONVIF. Noen kameraer kan kreve et dedikert ONVIF brukernavn/passord i stedet for standard administrator-bruker."
+ },
+ "step2": {
+ "description": "Sjekk kameraet for tilgjengelige strømmer eller konfigurer manuelle innstillinger basert på valgt deteksjonsmetode.",
+ "streamsTitle": "Kamerastrømmer",
+ "addStream": "Legg til strøm",
+ "addAnotherStream": "Legg til en annen strøm",
+ "streamTitle": "Strøm {{number}}",
+ "streamUrl": "Strøm-URL",
+ "streamUrlPlaceholder": "rtsp://brukernavn:passord@vert:port/sti",
+ "url": "URL",
+ "resolution": "Oppløsning",
+ "selectResolution": "Velg oppløsning",
+ "quality": "Kvalitet",
+ "selectQuality": "Velg kvalitet",
+ "roles": "Roller",
+ "roleLabels": {
+ "detect": "Objektdeteksjon",
+ "record": "Opptak",
+ "audio": "Lyd"
+ },
+ "testStream": "Test tilkobling",
+ "testSuccess": "Tilkoblingstest vellykket!",
+ "testFailed": "Tilkoblingstest feilet. Vennligst sjekk inndataene dine og prøv igjen.",
+ "testFailedTitle": "Test feilet",
+ "connected": "Tilkoblet",
+ "notConnected": "Ikke tilkoblet",
+ "featuresTitle": "Funksjoner",
+ "go2rtc": "Reduser tilkoblinger til kameraet",
+ "detectRoleWarning": "Minst én strøm må ha rollen «deteksjon» for å fortsette.",
+ "rolesPopover": {
+ "title": "Strømroller",
+ "detect": "Hovedstrøm for objektdeteksjon.",
+ "record": "Lagrer segmenter av videostrømmen basert på konfigurasjonsinnstillinger.",
+ "audio": "Strøm for lydbasert deteksjon."
+ },
+ "featuresPopover": {
+ "title": "Strømfunksjoner",
+ "description": "Bruk go2rtc-restrømming for å redusere antall tilkoblinger til kameraet ditt."
+ },
+ "streamDetails": "Strømdetaljer",
+ "probing": "Test kamera...",
+ "retry": "Prøv på nytt",
+ "testing": {
+ "probingMetadata": "Sjekker metadata for kamera...",
+ "fetchingSnapshot": "Henter stillbilde fra kamera..."
+ },
+ "probeFailed": "Kunne ikke å sjekke kamera: {{error}}",
+ "probingDevice": "Tester enhet...",
+ "probeSuccessful": "Sjekk vellykket",
+ "probeError": "Sjekk feilet",
+ "probeNoSuccess": "Sjekk mislyktes",
+ "deviceInfo": "Enhetsinformasjon",
+ "manufacturer": "Produsent",
+ "model": "Modell",
+ "firmware": "Fastvare",
+ "profiles": "Profiler",
+ "ptzSupport": "PTZ-støtte",
+ "autotrackingSupport": "Autosporing-støtte",
+ "presets": "Forhåndsinnstillinger",
+ "rtspCandidates": "RTSP-kandidater",
+ "rtspCandidatesDescription": "Følgende RTSP URL-er ble funnet ved sjekk av kameraet. Test tilkoblingen for å se strømmetadata.",
+ "noRtspCandidates": "Ingen RTSP URL-er ble funnet fra kameraet. Det kan hende at påloggingsinformasjonen din er feil, eller at kameraet ikke støtter ONVIF eller metoden som brukes for å hente RTSP URL-er. Gå tilbake og skriv inn RTSP URL-en manuelt.",
+ "candidateStreamTitle": "Kandidat {{number}}",
+ "useCandidate": "Bruk",
+ "uriCopy": "Kopier",
+ "uriCopied": "URI kopiert til utklippstavlen",
+ "testConnection": "Test tilkobling",
+ "toggleUriView": "Klikk for å vise/skjule full URI",
+ "errors": {
+ "hostRequired": "Vert/IP-adresse er påkrevd"
+ }
+ },
+ "step3": {
+ "description": "Konfigurer strømroller og legg til flere strømmer for kameraet ditt.",
+ "validationTitle": "Strømvalidering",
+ "connectAllStreams": "Koble til alle strømmer",
+ "reconnectionSuccess": "Gjenoppkobling vellykket.",
+ "reconnectionPartial": "Noen strømmer kunne ikke gjenoppkobles.",
+ "streamUnavailable": "Forhåndsvisning av strøm utilgjengelig",
+ "reload": "Last inn på nytt",
+ "connecting": "Kobler til...",
+ "streamTitle": "Strøm {{number}}",
+ "valid": "Gyldig",
+ "failed": "Feilet",
+ "notTested": "Ikke testet",
+ "connectStream": "Koble til",
+ "connectingStream": "Kobler til",
+ "disconnectStream": "Koble fra",
+ "estimatedBandwidth": "Estimert båndbredde",
+ "roles": "Roller",
+ "none": "Ingen",
+ "error": "Feil",
+ "streamValidated": "Strøm {{number}} ble validert",
+ "streamValidationFailed": "Validering av strøm {{number}} feilet",
+ "saveAndApply": "Lagre nytt kamera",
+ "saveError": "Ugyldig konfigurasjon. Vennligst sjekk innstillingene dine.",
+ "issues": {
+ "title": "Strømvalidering",
+ "videoCodecGood": "Video-kodek er {{codec}}.",
+ "audioCodecGood": "Lyd-kodek er {{codec}}.",
+ "noAudioWarning": "Ingen lyd oppdaget for denne strømmen, opptak vil ikke ha lyd.",
+ "audioCodecRecordError": "AAC lyd-kodek er påkrevd for å støtte lyd i opptak.",
+ "audioCodecRequired": "En lydstrøm er påkrevd for å støtte lyddeteksjon.",
+ "restreamingWarning": "Å redusere tilkoblinger til kameraet for opptaksstrømmen kan øke CPU-bruken noe.",
+ "dahua": {
+ "substreamWarning": "Substrøm 1 er låst til lav oppløsning. Mange Dahua / Amcrest / EmpireTech-kameraer støtter flere substrømmer som må aktiveres i kameraets innstillinger. Det anbefales å sjekke og benytte disse strømmene hvis de er tilgjengelige."
+ },
+ "hikvision": {
+ "substreamWarning": "Substrøm 1 er låst til lav oppløsning. Mange Hikvision-kameraer støtter flere substrømmer som må aktiveres i kameraets innstillinger. Det anbefales å sjekke og benytte disse strømmene hvis de er tilgjengelige."
+ },
+ "resolutionHigh": "En oppløsning på {{resolution}} kan føre til økt ressursbruk.",
+ "resolutionLow": "En oppløsning på {{resolution}} kan være for lav for pålitelig deteksjon av små objekter."
+ },
+ "ffmpegModuleDescription": "Hvis strømmen ikke lastes inn etter flere forsøk, kan du prøve å aktivere dette. Når det er aktivert, vil Frigate bruke ffmpeg-modulen sammen med go2rtc. Dette kan gi bedre kompatibilitet med enkelte kamerastrømmer.",
+ "ffmpegModule": "Bruk kompatibilitetsmodus for strøm",
+ "streamsTitle": "Kamerastrømmer",
+ "addStream": "Legg til strøm",
+ "addAnotherStream": "Legg til en annen strøm",
+ "streamUrl": "Strøm-URL",
+ "streamUrlPlaceholder": "rtsp://brukernavn:passord@vert:port/sti",
+ "selectStream": "Velg en strøm",
+ "searchCandidates": "Søk blant kandidater...",
+ "noStreamFound": "Ingen strøm funnet",
+ "url": "URL",
+ "resolution": "Oppløsning",
+ "selectResolution": "Velg oppløsning",
+ "quality": "Kvalitet",
+ "selectQuality": "Velg kvalitet",
+ "roleLabels": {
+ "detect": "Objektdeteksjon",
+ "record": "Opptak",
+ "audio": "Lyd"
+ },
+ "testStream": "Test tilkobling",
+ "testSuccess": "Strømmetest vellykket!",
+ "testFailed": "Strømmetest feilet",
+ "testFailedTitle": "Test feilet",
+ "connected": "Tilkoblet",
+ "notConnected": "Ikke tilkoblet",
+ "featuresTitle": "Funksjoner",
+ "go2rtc": "Reduser antall tilkoblinger til kamera",
+ "detectRoleWarning": "Minst én strøm må ha \"deteksjon\"-rollen for å fortsette.",
+ "rolesPopover": {
+ "title": "Strømroller",
+ "detect": "Hovedstrøm for objektdeteksjon.",
+ "record": "Lagrer segmenter av videostrømmen basert på konfigurasjonsinnstillinger.",
+ "audio": "Strøm for lydbasert deteksjon."
+ },
+ "featuresPopover": {
+ "title": "Strømfunksjoner",
+ "description": "Bruk go2rtc-restrømming for å redusere antall tilkoblinger til kameraet."
+ }
+ },
+ "step4": {
+ "description": "Endelig validering og analyse før du lagrer det nye kameraet. Koble til hver strøm før du lagrer.",
+ "validationTitle": "Strømvalidering",
+ "connectAllStreams": "Koble til alle strømmer",
+ "reconnectionSuccess": "Tilkobling vellykket.",
+ "reconnectionPartial": "Noen strømmer kunne ikke koble til på nytt.",
+ "streamUnavailable": "Forhåndsvisning av strøm utilgjengelig",
+ "reload": "Last på nytt",
+ "connecting": "Kobler til...",
+ "streamTitle": "Strøm {{number}}",
+ "valid": "Gyldig",
+ "failed": "Feilet",
+ "notTested": "Ikke testet",
+ "connectStream": "Koble til",
+ "connectingStream": "Kobler til",
+ "disconnectStream": "Koble fra",
+ "estimatedBandwidth": "Estimert båndbredde",
+ "roles": "Roller",
+ "ffmpegModule": "Bruk kompatibilitetsmodus for strøm",
+ "ffmpegModuleDescription": "Hvis strømmen ikke lastes etter flere forsøk, prøv å aktivere dette. Når aktivert, vil Frigate bruke ffmpeg-modulen med go2rtc. Dette kan gi bedre kompatibilitet med noen kamerastrømmer.",
+ "none": "Ingen",
+ "error": "Feil",
+ "streamValidated": "Strøm {{number}} validert",
+ "streamValidationFailed": "Validering av strøm {{number}} feilet",
+ "saveAndApply": "Lagre nytt kamera",
+ "saveError": "Ugyldig konfigurasjon. Vennligst sjekk innstillingene dine.",
+ "issues": {
+ "title": "Strømvalidering",
+ "videoCodecGood": "Videokodek er {{codec}}.",
+ "audioCodecGood": "Lydkodek er {{codec}}.",
+ "resolutionHigh": "En oppløsning på {{resolution}} kan føre til økt ressursbruk.",
+ "resolutionLow": "En oppløsning på {{resolution}} kan være for lav for pålitelig deteksjon av små objekter.",
+ "noAudioWarning": "Ingen lyd oppdaget for denne strømmen, opptak vil ikke ha lyd.",
+ "audioCodecRecordError": "AAC-lydkodeken kreves for å støtte lyd i opptak.",
+ "audioCodecRequired": "En lydstrøm kreves for å støtte lyddeteksjon.",
+ "restreamingWarning": "Å redusere tilkoblinger til kameraet for opptaksstrømmen kan øke CPU-bruken noe.",
+ "brands": {
+ "reolink-rtsp": "Reolink RTSP anbefales ikke. Aktiver HTTP i kameraets fastvareinnstillinger og start veiviseren på nytt.",
+ "reolink-http": "Reolink HTTP-strømmer bør bruke FFmpeg for bedre kompatibilitet. Aktiver 'Bruk kompatibilitetsmodus for strøm' for denne strømmen."
+ },
+ "dahua": {
+ "substreamWarning": "Substrøm 1 er låst til lav oppløsning. Mange Dahua / Amcrest / EmpireTech-kameraer støtter flere substrømmer som må aktiveres i kameraets innstillinger. Det anbefales å sjekke og benytte disse strømmene hvis de er tilgjengelige."
+ },
+ "hikvision": {
+ "substreamWarning": "Substrøm 1 er låst til lav oppløsning. Mange Hikvision-kameraer støtter flere substrømmer som må aktiveres i kameraets innstillinger. Det anbefales å sjekke og benytte disse strømmene hvis de er tilgjengelige."
+ }
+ }
+ }
+ },
+ "cameraManagement": {
+ "title": "Administrer kameraer",
+ "addCamera": "Legg til nytt kamera",
+ "editCamera": "Rediger kamera:",
+ "selectCamera": "Velg et kamera",
+ "backToSettings": "Tilbake til kamerainnstillinger",
+ "streams": {
+ "title": "Aktiver / Deaktiver kameraer",
+ "desc": "Midlertidig deaktiver et kamera til Frigate startes på nytt. Deaktivering av et kamera stopper Frigates behandling av dette kameraets strømmer fullstendig. Deteksjon, opptak og feilsøking vil være utilgjengelig.ffprobe.",
"video": "Wideo:",
"codec": "Kodek:",
@@ -113,12 +125,12 @@
},
"title": "Magazyn kamery",
"camera": "Kamera",
- "storageUsed": "Wykorzystany magazyn",
+ "storageUsed": "Wykorzystana przestrzeń",
"percentageOfTotalUsed": "Procent całości",
"bandwidth": "Przepustowość",
"unusedStorageInformation": "Informacja o niewykorzystanym magazynie"
},
- "title": "Magazyn",
+ "title": "Przestrzeń dyskowa",
"overview": "Przegląd",
"recordings": {
"title": "Nagrania",
@@ -180,7 +192,17 @@
"yolov9_plate_detection_speed": "Prędkość detekcji rejestracji samochodowych YOLOv9",
"yolov9_plate_detection": "Detekcja rejestracji samochodowych YOLOv9",
"text_embedding": "Osadzenie tekstu",
- "face_recognition": "Rozpoznawanie twarzy"
- }
+ "face_recognition": "Rozpoznawanie twarzy",
+ "classification_events_per_second": "{{name}} Klasyfikacja zdarzeń na sekundę",
+ "classification_speed": "{{name}} Szybkość klasyfikacji",
+ "classification": "{{name}} Klasyfikacja",
+ "review_description": "Opis recenzji",
+ "review_description_speed": "Szybkość opisu recenzji",
+ "review_description_events_per_second": "Opis recenzji",
+ "object_description": "Opis obiektu",
+ "object_description_speed": "Szybkość opisu obiektu",
+ "object_description_events_per_second": "Opis obiektu"
+ },
+ "averageInf": "Średni czas wnioskowania"
}
}
diff --git a/web/public/locales/pt-BR/audio.json b/web/public/locales/pt-BR/audio.json
index 74140c039..b36f09902 100644
--- a/web/public/locales/pt-BR/audio.json
+++ b/web/public/locales/pt-BR/audio.json
@@ -425,5 +425,9 @@
"artillery_fire": "Fogo de Artilharia",
"cap_gun": "Espoleta",
"fireworks": "Fogos de Artifício",
- "firecracker": "Rojões"
+ "firecracker": "Rojões",
+ "noise": "Ruído",
+ "distortion": "Distorção",
+ "cacophony": "Cacofonia",
+ "vibration": "Vibração"
}
diff --git a/web/public/locales/pt-BR/common.json b/web/public/locales/pt-BR/common.json
index 69e50231c..e1ab1e525 100644
--- a/web/public/locales/pt-BR/common.json
+++ b/web/public/locales/pt-BR/common.json
@@ -89,6 +89,14 @@
"length": {
"feet": "pés",
"meters": "metros"
+ },
+ "data": {
+ "kbps": "kB/s",
+ "mbps": "MB/s",
+ "gbps": "GB/s",
+ "kbph": "kB/hora",
+ "mbph": "MB/hora",
+ "gbph": "GB/hora"
}
},
"label": {
@@ -270,5 +278,8 @@
"title": "404",
"desc": "Página não encontrada"
},
- "readTheDocumentation": "Leia a documentação"
+ "readTheDocumentation": "Leia a documentação",
+ "information": {
+ "pixels": "{{area}}px"
+ }
}
diff --git a/web/public/locales/pt-BR/components/auth.json b/web/public/locales/pt-BR/components/auth.json
index 7172acaae..27775812f 100644
--- a/web/public/locales/pt-BR/components/auth.json
+++ b/web/public/locales/pt-BR/components/auth.json
@@ -10,6 +10,7 @@
"loginFailed": "Falha no Login",
"unknownError": "Erro desconhecido. Checar registros.",
"webUnknownError": "Erro desconhecido. Verifique os logs do console."
- }
+ },
+ "firstTimeLogin": "Fazendo login pela primeira vez? As credenciais estão escritas nos logs do Frigate."
}
}
diff --git a/web/public/locales/pt-BR/components/dialog.json b/web/public/locales/pt-BR/components/dialog.json
index 2e0670622..6f15f9855 100644
--- a/web/public/locales/pt-BR/components/dialog.json
+++ b/web/public/locales/pt-BR/components/dialog.json
@@ -108,7 +108,8 @@
"button": {
"markAsReviewed": "Marcar como revisado",
"export": "Exportar",
- "deleteNow": "Deletar Agora"
+ "deleteNow": "Deletar Agora",
+ "markAsUnreviewed": "Marcar como não revisado"
}
},
"imagePicker": {
diff --git a/web/public/locales/pt-BR/views/classificationModel.json b/web/public/locales/pt-BR/views/classificationModel.json
new file mode 100644
index 000000000..c90529873
--- /dev/null
+++ b/web/public/locales/pt-BR/views/classificationModel.json
@@ -0,0 +1,55 @@
+{
+ "documentTitle": "Modelos de Classificação",
+ "button": {
+ "deleteClassificationAttempts": "Apagar Imagens de Classificação",
+ "renameCategory": "Renomear Classe",
+ "deleteCategory": "Apagar Classe",
+ "deleteImages": "Apagar Imagens",
+ "trainModel": "Treinar Modelo",
+ "addClassification": "Adicionar classificação",
+ "deleteModels": "Excluir modelos",
+ "editModel": "Editar Modelo"
+ },
+ "toast": {
+ "success": {
+ "deletedCategory": "Classe Apagada",
+ "deletedImage": "Imagens Apagadas",
+ "categorizedImage": "Imagem Classificada com Sucesso",
+ "trainedModel": "Modelo treinado com sucesso.",
+ "trainingModel": "Treinamento do modelo iniciado com sucesso.",
+ "deletedModel_one": "{{count}} modelo excluído com sucesso",
+ "deletedModel_many": "{{count}} modelos excluídos com sucesso",
+ "deletedModel_other": "{{count}} modelos excluídos com sucesso",
+ "updatedModel": "Configuração do modelo atualizada com sucesso",
+ "renamedCategory": "Classe renomeada para {{name}} com sucesso"
+ },
+ "error": {
+ "deleteImageFailed": "Falha ao deletar:{{errorMessage}}",
+ "deleteCategoryFailed": "Falha ao deletar classe:{{errorMessage}}",
+ "categorizeFailed": "Falha ao categorizar imagem:{{errorMessage}}",
+ "deleteModelFailed": "Falha ao excluir o modelo: {{errorMessage}}",
+ "trainingFailed": "Falha ao iniciar o treinamento do modelo: {{errorMessage}}",
+ "trainingFailedToStart": "Falha ao iniciar o treinamento do modelo: {{errorMessage}}",
+ "updateModelFailed": "Falha ao atualizar modelo: {{errorMessage}}",
+ "renameCategoryFailed": "Falha ao renomear classe: {{errorMessage}}"
+ }
+ },
+ "deleteCategory": {
+ "title": "Excluir Classe",
+ "desc": "Tem certeza de que deseja excluir a classe {{name}}? Isso excluirá permanentemente todas as imagens associadas e exigirá o treinamento do modelo novamente.",
+ "minClassesTitle": "Não é possível apagar a classe"
+ },
+ "deleteModel": {
+ "title": "Deletar modelo de classificação",
+ "single": "Tem certeza de que deseja excluir {{name}}? Isso excluirá permanentemente todos os dados associados, incluindo imagens e dados de treinamento. Esta ação não pode ser desfeita."
+ },
+ "details": {
+ "scoreInfo": "A pontuação representa a média de confiança da classificação de todas as detecções deste objeto."
+ },
+ "tooltip": {
+ "trainingInProgress": "O modelo está sendo treinado",
+ "noNewImages": "Nenhuma nova imagem para treinar. Classifique mais imagens para treinar mais.",
+ "noChanges": "Nenhuma alteração ao conjunto de dados desde o último treinamento.",
+ "modelNotReady": "O modelo não está pronto para treinamento"
+ }
+}
diff --git a/web/public/locales/pt-BR/views/events.json b/web/public/locales/pt-BR/views/events.json
index 2e7eac4cb..37785ab13 100644
--- a/web/public/locales/pt-BR/views/events.json
+++ b/web/public/locales/pt-BR/views/events.json
@@ -36,5 +36,23 @@
"camera": "Câmera",
"detected": "detectado",
"suspiciousActivity": "Atividade Suspeita",
- "threateningActivity": "Atividade de Ameaça"
+ "threateningActivity": "Atividade de Ameaça",
+ "detail": {
+ "noDataFound": "Nenhum dado de detalhe para revisar",
+ "aria": "Alternar visualização de detalhe",
+ "trackedObject_one": "{{count}} objeto(s)",
+ "trackedObject_other": "{{count}} objetos",
+ "noObjectDetailData": "Nenhum dado de detalhe de objeto disponível.",
+ "label": "Detalhe",
+ "settings": "Configurações de visualização detalhada",
+ "alwaysExpandActive": {
+ "title": "Expandir sempre o modo ativo"
+ }
+ },
+ "objectTrack": {
+ "trackedPoint": "Ponto rastreado",
+ "clickToSeek": "Clique para ir para esse horário"
+ },
+ "zoomIn": "Ampliar",
+ "zoomOut": "Diminuir o zoom"
}
diff --git a/web/public/locales/pt-BR/views/explore.json b/web/public/locales/pt-BR/views/explore.json
index 9de511f9d..bb3e6fdab 100644
--- a/web/public/locales/pt-BR/views/explore.json
+++ b/web/public/locales/pt-BR/views/explore.json
@@ -111,7 +111,8 @@
"details": "detalhes",
"snapshot": "captura de imagem",
"video": "vídeo",
- "object_lifecycle": "ciclo de vida do objeto"
+ "object_lifecycle": "ciclo de vida do objeto",
+ "thumbnail": "thumbnail"
},
"objectLifecycle": {
"title": "Ciclo de Vida do Objeto",
diff --git a/web/public/locales/pt-BR/views/exports.json b/web/public/locales/pt-BR/views/exports.json
index 892f719d2..12a6dce45 100644
--- a/web/public/locales/pt-BR/views/exports.json
+++ b/web/public/locales/pt-BR/views/exports.json
@@ -13,5 +13,11 @@
"error": {
"renameExportFailed": "Falha ao renomear exportação: {{errorMessage}}"
}
+ },
+ "tooltip": {
+ "shareExport": "Compartilhar exportação",
+ "downloadVideo": "Baixar vídeo",
+ "editName": "Editar nome",
+ "deleteExport": "Apagar exportação"
}
}
diff --git a/web/public/locales/pt-BR/views/faceLibrary.json b/web/public/locales/pt-BR/views/faceLibrary.json
index 912236cf4..ee3ccde38 100644
--- a/web/public/locales/pt-BR/views/faceLibrary.json
+++ b/web/public/locales/pt-BR/views/faceLibrary.json
@@ -15,7 +15,7 @@
},
"maxSize": "Tamanho máximo: {{size}}MB",
"dropActive": "Solte a imagem aqui…",
- "dropInstructions": "Arraste e solte uma imagem aqui, ou clique para selecionar"
+ "dropInstructions": "Arraste e solte ou cole uma imagem aqui ou clique para selecionar"
},
"deleteFaceLibrary": {
"title": "Apagar Nome",
@@ -33,7 +33,7 @@
"new": "Criar Novo Rosto",
"title": "Criar Coleção",
"desc": "Criar uma nova coleção",
- "nextSteps": "Para construir uma base forte: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": {
@@ -104,13 +106,15 @@
"regenerate": "O nouă descriere a fost solicitată de la {{provider}}. În funcție de viteza furnizorului tău, regenerarea noii descrieri poate dura ceva timp.",
"updatedSublabel": "Subeticheta a fost actualizată cu succes.",
"updatedLPR": "Plăcuța de înmatriculare a fost actualizată cu succes.",
- "audioTranscription": "Transcrierea audio a fost solicitată cu succes."
+ "audioTranscription": "Transcrierea audio a fost solicitată cu succes. În funcție de viteza serverului dumneavoastră Frigate, transcrierea poate dura ceva timp până la finalizare.",
+ "updatedAttributes": "Atributele au fost actualizate cu succes."
},
"error": {
"updatedSublabelFailed": "Nu s-a putut actualiza sub-etichetarea: {{errorMessage}}",
"updatedLPRFailed": "Plăcuța de înmatriculare nu a putut fi actualizată: {{errorMessage}}",
"regenerate": "Eroare la apelarea {{provider}} pentru o nouă descriere: {{errorMessage}}",
- "audioTranscription": "Solicitarea transcrierii audio a eșuat: {{errorMessage}}"
+ "audioTranscription": "Solicitarea transcrierii audio a eșuat: {{errorMessage}}",
+ "updatedAttributesFailed": "Actualizarea atributelor a eșuat: {{errorMessage}}"
}
}
},
@@ -158,6 +162,14 @@
"regenerateFromThumbnails": "Regenerează din miniaturi",
"score": {
"label": "Scor"
+ },
+ "editAttributes": {
+ "title": "Editează atribute",
+ "desc": "Selectează atributele de clasificare pentru acest {{label}}"
+ },
+ "attributes": "Atribute de clasificare",
+ "title": {
+ "label": "Titlu"
}
},
"exploreMore": "Explorează mai multe obiecte cu {{label}}",
@@ -200,12 +212,26 @@
"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"
+ },
+ "downloadCleanSnapshot": {
+ "label": "Descarcă un snapshot curat",
+ "aria": "Descarcă snapshot curat"
}
},
"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.ffprobe.",
"aspectRatio": "raport aspect",
"fetching": "Se preiau datele camerei",
@@ -140,7 +162,7 @@
"audio": "Sunet:",
"error": "Eroare:{{error}}",
"tips": {
- "title": "Informații sondă cameră"
+ "title": "Informații test cameră"
},
"fps": "Cadre/s:",
"unknown": "Necunoscut"
@@ -166,10 +188,10 @@
"framesAndDetections": "Cadre / Detecții",
"toast": {
"success": {
- "copyToClipboard": "Datele sondei au fost copiate."
+ "copyToClipboard": "Datele testului au fost copiate."
},
"error": {
- "unableToProbeCamera": "Sondarea camerei nu a fost posibilă: {{errorMessage}}"
+ "unableToProbeCamera": "Testarea camerei nu a fost posibilă: {{errorMessage}}"
}
}
},
diff --git a/web/public/locales/ru/audio.json b/web/public/locales/ru/audio.json
index 9f5e58530..e9e6bfc21 100644
--- a/web/public/locales/ru/audio.json
+++ b/web/public/locales/ru/audio.json
@@ -315,7 +315,7 @@
"slam": "Хлопок",
"knock": "Стук",
"tap": "Небольшой стук",
- "squeak": "Скрип",
+ "squeak": "Писк",
"cupboard_open_or_close": "Открытие или закрытие шкафа",
"drawer_open_or_close": "Открытие или закрытие ящика",
"dishes": "Тарелки",
@@ -425,5 +425,79 @@
"pink_noise": "Розовый шум",
"hammer": "Молоток",
"firecracker": "Петарда",
- "television": "Телевидение"
+ "television": "Телевидение",
+ "echo": "Эхо",
+ "noise": "Шум",
+ "mains_hum": "Гул сети",
+ "cacophony": "Какофония",
+ "throbbing": "Пульсирующий",
+ "vibration": "Вибрация",
+ "sodeling": "Соделинг",
+ "chird": "Чирд",
+ "change_ringing": "Перезвон",
+ "shofar": "Шофар",
+ "liquid": "Жидкость",
+ "splash": "Брызги",
+ "slosh": "Плеск",
+ "squish": "Хлюпанье",
+ "drip": "Капля",
+ "pour": "Литьё",
+ "trickle": "Струйка",
+ "gush": "Бурный поток",
+ "fill": "Наполнение",
+ "spray": "Распыление",
+ "pump": "Насос",
+ "stir": "Перемешивание",
+ "boiling": "Кипение",
+ "sonar": "Сонар",
+ "arrow": "Стрела",
+ "whoosh": "Вжух",
+ "thump": "Глухой удар",
+ "thunk": "Тупой удар",
+ "electronic_tuner": "Электронный тюнер",
+ "effects_unit": "Блок эффектов",
+ "chorus_effect": "Эффект хоруса",
+ "basketball_bounce": "Отскок баскетбольного мяча",
+ "bang": "Бах",
+ "slap": "Шлепок",
+ "whack": "Удар",
+ "smash": "Разбивание",
+ "breaking": "Разрушение",
+ "bouncing": "Отскок",
+ "whip": "Хлыст",
+ "flap": "Хлопание",
+ "scratch": "Царапанье",
+ "scrape": "Скребок",
+ "rub": "Трение",
+ "roll": "Качение",
+ "crushing": "Дробление",
+ "crumpling": "Сминание",
+ "tearing": "Разрывание",
+ "beep": "Бип",
+ "ping": "Пинг",
+ "ding": "Динь",
+ "clang": "Лязг",
+ "squeal": "Визг",
+ "creak": "Скрипение",
+ "rustle": "Шуршание",
+ "whir": "Жужжание",
+ "clatter": "Грохот",
+ "sizzle": "Шипение",
+ "clicking": "Щелканье",
+ "clickety_clack": "Щелчок-Клак",
+ "rumble": "Грохотать",
+ "plop": "Плюх",
+ "hum": "Гул",
+ "zing": "Зинг",
+ "boing": "Боинг",
+ "crunch": "Хруст",
+ "sine_wave": "Синусоида",
+ "harmonic": "Гармоника",
+ "chirp_tone": "Тон чириканья",
+ "pulse": "Импульс",
+ "inside": "Внутри",
+ "outside": "Снаружи",
+ "reverberation": "Реверберация",
+ "distortion": "Искажение",
+ "sidetone": "Боковой тон"
}
diff --git a/web/public/locales/ru/common.json b/web/public/locales/ru/common.json
index ee4a0df10..0de87d293 100644
--- a/web/public/locales/ru/common.json
+++ b/web/public/locales/ru/common.json
@@ -87,9 +87,12 @@
"formattedTimestampMonthDayYear": {
"12hour": "d MMM, yyyy",
"24hour": "d MMM, yyyy"
- }
+ },
+ "inProgress": "В процессе",
+ "invalidStartTime": "Некорректное время начала",
+ "invalidEndTime": "Некорректное время окончания"
},
- "selectItem": "Выбор {{item}}",
+ "selectItem": "Выбрать {{item}}",
"button": {
"apply": "Применить",
"done": "Готово",
@@ -125,10 +128,16 @@
"unselect": "Снять выбор",
"export": "Экспортировать",
"deleteNow": "Удалить сейчас",
- "next": "Следующий"
+ "next": "Следующий",
+ "continue": "Продолжить"
},
"label": {
- "back": "Вернуться"
+ "back": "Вернуться",
+ "hide": "Скрыть {{item}}",
+ "show": "Показать {{item}}",
+ "ID": "ID",
+ "all": "Все",
+ "none": "Ничего"
},
"unit": {
"speed": {
@@ -138,6 +147,14 @@
"length": {
"meters": "метры",
"feet": "футы"
+ },
+ "data": {
+ "kbps": "кБ/с",
+ "mbps": "МБ/с",
+ "gbps": "ГБ/с",
+ "kbph": "кБ/час",
+ "mbph": "МБ/час",
+ "gbph": "ГБ/час"
}
},
"menu": {
@@ -240,7 +257,8 @@
"logout": "Выход",
"setPassword": "Установить пароль"
},
- "appearance": "Внешний вид"
+ "appearance": "Внешний вид",
+ "classification": "Распознование"
},
"pagination": {
"label": "пагинация",
@@ -280,6 +298,17 @@
"viewer": "Наблюдатель",
"desc": "Администраторы имеют полный доступ ко всем функциям в интерфейсе Frigate. Наблюдатели ограничены просмотром камер, элементов просмотра и архивных записей."
},
- "selectItem": "Выбрать {{item}}",
- "readTheDocumentation": "Читать документацию"
+ "readTheDocumentation": "Читать документацию",
+ "information": {
+ "pixels": "{{area}}px"
+ },
+ "list": {
+ "two": "{{0}} и {{1}}",
+ "many": "{{items}}, и {{last}}",
+ "separatorWithSpace": ", "
+ },
+ "field": {
+ "optional": "Необязательный",
+ "internalID": "Внутренний идентификатор Frigate, используемый в конфигурации и базе данных"
+ }
}
diff --git a/web/public/locales/ru/components/auth.json b/web/public/locales/ru/components/auth.json
index b227af835..17b983914 100644
--- a/web/public/locales/ru/components/auth.json
+++ b/web/public/locales/ru/components/auth.json
@@ -10,6 +10,7 @@
"loginFailed": "Ошибка входа",
"unknownError": "Неизвестная ошибка. Проверьте логи.",
"webUnknownError": "Неизвестная ошибка. Проверьте логи консоли."
- }
+ },
+ "firstTimeLogin": "Пытаетесь войти в систему впервые? Учетные данные указаны в логах Frigate."
}
}
diff --git a/web/public/locales/ru/components/dialog.json b/web/public/locales/ru/components/dialog.json
index 748d079db..b935670c2 100644
--- a/web/public/locales/ru/components/dialog.json
+++ b/web/public/locales/ru/components/dialog.json
@@ -65,12 +65,13 @@
"export": "Экспорт",
"selectOrExport": "Выбрать или экспортировать",
"toast": {
- "success": "Экспорт успешно запущен. Файл доступен в папке /exports.",
+ "success": "Экспорт успешно запущен. Файл доступен на странице экспорта.",
"error": {
"failed": "Не удалось запустить экспорт: {{error}}",
"noVaildTimeSelected": "Не выбран допустимый временной диапазон",
"endTimeMustAfterStartTime": "Время окончания должно быть после времени начала"
- }
+ },
+ "view": "Просмотр"
},
"fromTimeline": {
"saveExport": "Сохранить экспорт",
@@ -120,7 +121,8 @@
"button": {
"export": "Экспорт",
"markAsReviewed": "Пометить как просмотренное",
- "deleteNow": "Удалить сейчас"
+ "deleteNow": "Удалить сейчас",
+ "markAsUnreviewed": "Отметить как непросмотренное"
}
},
"imagePicker": {
@@ -128,6 +130,7 @@
"placeholder": "Искать по метке..."
},
"selectImage": "Выбор миниатюры отслеживаемого объекта",
- "noImages": "Не обнаружено миниатюр для этой камеры"
+ "noImages": "Не обнаружено миниатюр для этой камеры",
+ "unknownLabel": "Сохраненное изображение триггера"
}
}
diff --git a/web/public/locales/ru/components/filter.json b/web/public/locales/ru/components/filter.json
index 0b75d2347..095ea91ba 100644
--- a/web/public/locales/ru/components/filter.json
+++ b/web/public/locales/ru/components/filter.json
@@ -133,5 +133,9 @@
},
"count_one": "{{count}} класс",
"count_other": "{{count}} классы"
+ },
+ "attributes": {
+ "label": "Атрибуты классификации",
+ "all": "Все атрибуты"
}
}
diff --git a/web/public/locales/ru/views/classificationModel.json b/web/public/locales/ru/views/classificationModel.json
new file mode 100644
index 000000000..b5b7e2222
--- /dev/null
+++ b/web/public/locales/ru/views/classificationModel.json
@@ -0,0 +1,193 @@
+{
+ "documentTitle": "Классификация моделей - Frigate",
+ "details": {
+ "scoreInfo": "Оценка представляет собой среднюю степень достоверности классификации по всем обнаружениям данного объекта.",
+ "none": "Нет",
+ "unknown": "Неизвестно"
+ },
+ "button": {
+ "deleteClassificationAttempts": "Удалить изображения классификации",
+ "renameCategory": "Переименовать класс",
+ "deleteCategory": "Удалить класс",
+ "deleteImages": "Удалить изображения",
+ "trainModel": "Тренировать модель",
+ "addClassification": "Добавить классификацию",
+ "deleteModels": "Удалить модели",
+ "editModel": "Редактировать модель"
+ },
+ "toast": {
+ "success": {
+ "deletedCategory": "Класс удалён",
+ "deletedImage": "Изображения удалены",
+ "deletedModel_one": "Успешно удалена {{count}} модель",
+ "deletedModel_few": "Успешно удалены {{count}} модели",
+ "deletedModel_many": "Успешно удалены {{count}} моделей",
+ "categorizedImage": "Изображение успешно классифицировано",
+ "trainedModel": "Модель успешно обучена.",
+ "trainingModel": "Обучение модели успешно запущено.",
+ "updatedModel": "Конфигурация модели успешно обновлена",
+ "renamedCategory": "Класс успешно переименован в {{name}}"
+ },
+ "error": {
+ "deleteImageFailed": "Не удалось удалить: {{errorMessage}}",
+ "deleteCategoryFailed": "Не удалось удалить класс: {{errorMessage}}",
+ "deleteModelFailed": "Не удалось удалить модель: {{errorMessage}}",
+ "categorizeFailed": "Не удалось классифицировать изображение: {{errorMessage}}",
+ "trainingFailed": "Ошибка обучения модели. Проверьте логи Frigate для получения подробной информации.",
+ "updateModelFailed": "Не удалось обновить модель: {{errorMessage}}",
+ "renameCategoryFailed": "Не удалось переименовать класс: {{errorMessage}}",
+ "trainingFailedToStart": "Не удалось начать обучение модели: {{errorMessage}}"
+ }
+ },
+ "deleteCategory": {
+ "title": "Удалить класс",
+ "desc": "Вы уверены, что хотите удалить класс {{name}}? Это приведёт к безвозвратному удалению всех связанных с ним изображений и потребует повторного обучения модели.",
+ "minClassesTitle": "Не удалось удалить класс",
+ "minClassesDesc": "Модель классификации должна содержать как минимум 2 класса. Добавьте ещё один класс перед удалением этого."
+ },
+ "deleteModel": {
+ "title": "Удалить модель классификации",
+ "single": "Вы уверены, что хотите удалить {{name}}? Это приведёт к безвозвратному удалению всех связанных данных, включая изображения и данные обучения. Это действие нельзя отменить.",
+ "desc_one": "Вы уверены, что хотите удалить {{count}} модель? Это приведёт к безвозвратному удалению всех связанных данных, включая изображения и данные обучения. Это действие нельзя отменить.",
+ "desc_few": "Вы уверены, что хотите удалить {{count}} модели? Это приведёт к безвозвратному удалению всех связанных данных, включая изображения и данные обучения. Это действие нельзя отменить.",
+ "desc_many": "Вы уверены, что хотите удалить {{count}} моделей? Это приведёт к безвозвратному удалению всех связанных данных, включая изображения и данные обучения. Это действие нельзя отменить."
+ },
+ "edit": {
+ "title": "Редактировать модель классификации",
+ "descriptionState": "Редактировать классы для этой модели классификации состояний. Изменения потребуют повторного обучения модели.",
+ "descriptionObject": "Редактировать тип объекта и тип классификации для этой модели классификации объектов.",
+ "stateClassesInfo": "Примечание: изменение классов состояний требует повторного обучения модели с обновлёнными классами."
+ },
+ "deleteDatasetImages": {
+ "title": "Удалить изображения набора данных",
+ "desc_one": "Вы уверены, что хотите удалить {{count}} изображение из {{dataset}}? Это действие нельзя отменить и потребует повторного обучения модели.",
+ "desc_few": "Вы уверены, что хотите удалить {{count}} изображения из {{dataset}}? Это действие нельзя отменить и потребует повторного обучения модели.",
+ "desc_many": "Вы уверены, что хотите удалить {{count}} изображений из {{dataset}}? Это действие нельзя отменить и потребует повторного обучения модели."
+ },
+ "deleteTrainImages": {
+ "title": "Удалить обучающие изображения",
+ "desc_one": "Вы уверены, что хотите удалить {{count}} изображение? Это действие нельзя отменить.",
+ "desc_few": "Вы уверены, что хотите удалить {{count}} изображения? Это действие нельзя отменить.",
+ "desc_many": "Вы уверены, что хотите удалить {{count}} изображений? Это действие нельзя отменить."
+ },
+ "renameCategory": {
+ "title": "Переименовать класс",
+ "desc": "Введите новое имя для {{name}}. Вам потребуется повторно обучить модель, чтобы изменение имени вступило в силу."
+ },
+ "description": {
+ "invalidName": "Недопустимое имя. Имена могут содержать только буквы, цифры, пробелы, апострофы, подчёркивания и дефисы."
+ },
+ "train": {
+ "title": "Недавние классификации",
+ "titleShort": "Недавнее",
+ "aria": "Выбрать недавние классификации"
+ },
+ "categories": "Классы",
+ "createCategory": {
+ "new": "Создать новый класс"
+ },
+ "categorizeImageAs": "Классифицировать изображение как:",
+ "categorizeImage": "Классифицировать изображение",
+ "menu": {
+ "objects": "Объекты",
+ "states": "Состояния"
+ },
+ "noModels": {
+ "object": {
+ "title": "Нет моделей классификации объектов",
+ "description": "Создайте пользовательскую модель для классификации обнаруженных объектов.",
+ "buttonText": "Создать модель объекта"
+ },
+ "state": {
+ "title": "Нет моделей классификации состояний",
+ "description": "Создайте пользовательскую модель для мониторинга и классификации изменений состояний в определённых областях камеры.",
+ "buttonText": "Создать модель состояния"
+ }
+ },
+ "wizard": {
+ "title": "Создать новую классификацию",
+ "steps": {
+ "nameAndDefine": "Имя и определение",
+ "stateArea": "Область состояния",
+ "chooseExamples": "Выбрать примеры"
+ },
+ "step1": {
+ "description": "Модели состояний отслеживают фиксированные области камеры на предмет изменений (например, дверь открыта/закрыта). Модели объектов добавляют классификации к обнаруженным объектам (например, известные животные, курьеры и т.д.).",
+ "name": "Имя",
+ "namePlaceholder": "Введите имя модели…",
+ "type": "Тип",
+ "typeState": "Состояние",
+ "typeObject": "Объект",
+ "objectLabel": "Метка объекта",
+ "objectLabelPlaceholder": "Выберите тип объекта…",
+ "classificationType": "Тип классификации",
+ "classificationTypeTip": "Узнать о типах классификации",
+ "classificationTypeDesc": "Подметки добавляют дополнительный текст к метке объекта (например, 'Человек: UPS'). Атрибуты — это доступные для поиска метаданные, хранящиеся отдельно в метаданных объекта.",
+ "classificationSubLabel": "Подметка",
+ "classificationAttribute": "Атрибут",
+ "classes": "Классы",
+ "states": "Состояния",
+ "classesTip": "Узнать о классах",
+ "classesStateDesc": "Определите различные состояния, в которых может находиться область вашей камеры. Например: 'открыто' и 'закрыто' для гаражных ворот.",
+ "classesObjectDesc": "Определите различные категории для классификации обнаруженных объектов. Например: 'курьер', 'житель', 'незнакомец' для классификации людей.",
+ "classPlaceholder": "Введите имя класса…",
+ "errors": {
+ "nameRequired": "Имя модели обязательно",
+ "nameLength": "Имя модели должно содержать не более 64 символов",
+ "nameOnlyNumbers": "Имя модели не может состоять только из цифр",
+ "classRequired": "Требуется хотя бы 1 класс",
+ "classesUnique": "Имена классов должны быть уникальными",
+ "stateRequiresTwoClasses": "Модели состояний требуют не менее 2 классов",
+ "objectLabelRequired": "Пожалуйста, выберите метку объекта",
+ "objectTypeRequired": "Пожалуйста, выберите тип классификации",
+ "noneNotAllowed": "Класс 'нет' не допускается"
+ }
+ },
+ "step2": {
+ "description": "Выберите камеры и определите область для мониторинга для каждой камеры. Модель будет классифицировать состояние этих областей.",
+ "cameras": "Камеры",
+ "selectCamera": "Выбрать камеру",
+ "noCameras": "Нажмите +, чтобы добавить камеры",
+ "selectCameraPrompt": "Выберите камеру из списка, чтобы определить область её мониторинга"
+ },
+ "step3": {
+ "selectImagesPrompt": "Выберите все изображения с {{className}}",
+ "selectImagesDescription": "Нажмите на изображения, чтобы выбрать их. Нажмите Продолжить, когда закончите с этим классом.",
+ "generating": {
+ "title": "Генерация примеров изображений",
+ "description": "Frigate извлекает репрезентативные изображения из ваших записей. Это может занять некоторое время…"
+ },
+ "training": {
+ "title": "Обучение модели",
+ "description": "Ваша модель обучается в фоновом режиме. Закройте это диалоговое окно, и ваша модель начнёт работать, как только обучение будет завершено."
+ },
+ "retryGenerate": "Повторить генерацию",
+ "noImages": "Примеры изображений не сгенерированы",
+ "classifying": "Классификация и обучение…",
+ "trainingStarted": "Обучение успешно запущено",
+ "errors": {
+ "noCameras": "Камеры не настроены",
+ "noObjectLabel": "Метка объекта не выбрана",
+ "generateFailed": "Не удалось сгенерировать примеры: {{error}}",
+ "generationFailed": "Генерация не удалась. Пожалуйста, попробуйте снова.",
+ "classifyFailed": "Не удалось классифицировать изображения: {{error}}"
+ },
+ "generateSuccess": "Примеры изображений успешно сгенерированы",
+ "allImagesRequired_one": "Пожалуйста, классифицируйте все изображения. Осталось {{count}} изображение.",
+ "allImagesRequired_few": "Пожалуйста, классифицируйте все изображения. Осталось {{count}} изображения.",
+ "allImagesRequired_many": "Пожалуйста, классифицируйте все изображения. Осталось {{count}} изображений.",
+ "modelCreated": "Модель успешно создана. Используйте раздел \"Последние классификации\", чтобы добавить изображения для отсутствующих состояний, а затем обучите модель.",
+ "missingStatesWarning": {
+ "title": "Примеры отсутствующих состояний",
+ "description": "Рекомендуется выбрать примеры для всех состояний для достижения наилучших результатов. Вы можете продолжить, не выбрав все состояния, но модель не будет обучена, пока для всех состояний не появятся изображения. После продолжения используйте раздел «Последние классификации», чтобы классифицировать изображения для отсутствующих состояний, а затем обучите модель."
+ }
+ }
+ },
+ "tooltip": {
+ "trainingInProgress": "Модель в данный момент обучается",
+ "noNewImages": "Нет новых изображений для обучения. Сначала классифицируйте больше изображений в наборе данных.",
+ "noChanges": "В наборе данных не было изменений с момента последнего обучения.",
+ "modelNotReady": "Модель не готова к обучению"
+ },
+ "none": "Нет"
+}
diff --git a/web/public/locales/ru/views/events.json b/web/public/locales/ru/views/events.json
index 3104cac40..16fe307ca 100644
--- a/web/public/locales/ru/views/events.json
+++ b/web/public/locales/ru/views/events.json
@@ -37,5 +37,28 @@
"selected_other": "{{count}} выбрано",
"detected": "обнаружен",
"suspiciousActivity": "Подозрительная активность",
- "threateningActivity": "Угрожающая активность"
+ "threateningActivity": "Угрожающая активность",
+ "detail": {
+ "noDataFound": "Нет данных для просмотра",
+ "aria": "Переключить подробный режим просмотра",
+ "trackedObject_one": "{{count}} объект",
+ "trackedObject_other": "{{count}} объекта",
+ "noObjectDetailData": "Данные о деталях объекта недоступны.",
+ "label": "Деталь",
+ "settings": "Настройки подробного просмотра",
+ "alwaysExpandActive": {
+ "title": "Всегда раскрывать активный",
+ "desc": "Всегда раскрывать сведения об объекте активного элемента обзора, если они доступны."
+ }
+ },
+ "objectTrack": {
+ "trackedPoint": "Отслеживаемая точка",
+ "clickToSeek": "Перейти к этому моменту"
+ },
+ "zoomIn": "Увеличить",
+ "zoomOut": "Отдалить",
+ "select_all": "Всё",
+ "normalActivity": "Нормальный",
+ "needsReview": "Требуется ревью",
+ "securityConcern": "Вопрос безопасности"
}
diff --git a/web/public/locales/ru/views/explore.json b/web/public/locales/ru/views/explore.json
index 833dc3095..3247544f5 100644
--- a/web/public/locales/ru/views/explore.json
+++ b/web/public/locales/ru/views/explore.json
@@ -49,13 +49,15 @@
"updatedSublabel": "Успешно обновлена дополнительная метка.",
"updatedLPR": "Номерной знак успешно обновлён.",
"regenerate": "Новое описание запрошено у {{provider}}. В зависимости от скорости работы вашего провайдера, генерация нового описания может занять некоторое время.",
- "audioTranscription": "Запрос на транскрипцию звука успешно выполнен."
+ "audioTranscription": "Запрос на расшифровку аудио успешно отправлен. В зависимости от скорости вашего сервера Frigate, расшифровка может занять некоторое время.",
+ "updatedAttributes": "Атрибуты успешно обновлены."
},
"error": {
"updatedSublabelFailed": "Не удалось обновить дополнительную метку: {{errorMessage}}",
"updatedLPRFailed": "Не удалось обновить номерной знак: {{errorMessage}}",
"regenerate": "Не удалось запросить новое описание у {{provider}}: {{errorMessage}}",
- "audioTranscription": "Не удалось запросить транскрипцию аудио: {{errorMessage}}"
+ "audioTranscription": "Не удалось запросить транскрипцию аудио: {{errorMessage}}",
+ "updatedAttributesFailed": "Не удалось обновить атрибуты: {{errorMessage}}"
}
}
},
@@ -102,15 +104,22 @@
"label": "Оценка снимка"
},
"score": {
- "label": "Балл"
- }
+ "label": "Оценка"
+ },
+ "editAttributes": {
+ "title": "Редактировать атрибуты",
+ "desc": "Выберите атрибуты классификации для этого {{label}}"
+ },
+ "attributes": "Атрибуты классификации"
},
"trackedObjectDetails": "Детали объекта",
"type": {
"details": "детали",
"snapshot": "снимок",
"video": "видео",
- "object_lifecycle": "жизненный цикл объекта"
+ "object_lifecycle": "жизненный цикл объекта",
+ "thumbnail": "миниатюра",
+ "tracking_details": "подробности отслеживания"
},
"objectLifecycle": {
"title": "Жизненный цикл объекта",
@@ -196,16 +205,30 @@
"audioTranscription": {
"label": "Транскрибировать",
"aria": "Запросить аудиотранскрипцию"
+ },
+ "viewTrackingDetails": {
+ "label": "Просмотреть детали отслеживания",
+ "aria": "Показать детали отслеживания"
+ },
+ "showObjectDetails": {
+ "label": "Показать путь объекта"
+ },
+ "hideObjectDetails": {
+ "label": "Скрыть путь объекта"
+ },
+ "downloadCleanSnapshot": {
+ "label": "Скачать чистый снимок",
+ "aria": "Скачать чистый снимок"
}
},
"dialog": {
"confirmDelete": {
"title": "Подтвердить удаление",
- "desc": "Удаление этого отслеживаемого объекта приведёт к удалению его снимка, всех сохранённых эмбеддингов и записей жизненного цикла. Сами записи в разделе История НЕ будут удалены.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", + "probeOrSnapshot": "Probe alebo Snapshot" + }, + "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..." + }, + "connectionSettings": "Nastavenie pripojenia", + "detectionMethod": "Stream Detekcia Metóda", + "onvifPort": "ONVIF Port", + "probeMode": "Probe kamera", + "manualMode": "Ručný výber", + "detectionMethodDescription": "Vyskúša cez ONVIF (ak je podporovaný) nájsť kamery streamové adresy, alebo ručne vyberte značku kamery a jej preddefinované URL. Ak chcete zadať vlastnú URL RTSP, vyberte manuálne zadanie a označte \"Ostatné\".", + "onvifPortDescription": "Pre kamery, ktoré podporujú ONVIF, to je zvyčajne 80 alebo 8080.", + "useDigestAuth": "Použite overenie súhrnu", + "useDigestAuthDescription": "Použite HTTP stráviteľné overenie pre ONVIF. Niektoré kamery môžu vyžadovať vyhradený ONVIF užívateľské meno/password namiesto štandardného správcu." + }, + "step2": { + "description": "Vyhľadajte dostupné streamy z kamery alebo nakonfigurujte manuálne nastavenia na základe zvolenej metódy detekcie.", + "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": "Test pripojenia bol úspešný!", + "testFailed": "Test pripojenia zlyhal. Skontrolujte zadané údaje a skúste to znova.", + "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." + }, + "streamDetails": "Detaily vysielania", + "probing": "Skúmajúca kamera...", + "retry": "Skúste to znova", + "testing": { + "probingMetadata": "Skúmanie metadát kamery...", + "fetchingSnapshot": "Načítava sa snímka z fotoaparátu..." + }, + "probeFailed": "Nepodarilo sa otestovať kameru: {{error}}", + "probingDevice": "Snímacie zariadenie...", + "probeSuccessful": "Sonda úspešná", + "probeError": "Chyba sondy", + "probeNoSuccess": "Sonda neúspešná", + "deviceInfo": "Informácie o zariadení", + "manufacturer": "Výrobca", + "model": "Model", + "firmware": "Firmvér", + "profiles": "Profily", + "ptzSupport": "PTZ Podpora", + "autotrackingSupport": "Podpora automatického sledovania", + "presets": "Prestavby", + "rtspCandidates": "RTSP kandidátov", + "rtspCandidatesDescription": "Z kamery boli nájdené nasledujúce adresy URL RTSP. Otestujte pripojenie a zobrazte metadáta streamu.", + "noRtspCandidates": "Z kamery sa nenašli žiadne URL adresy RTSP. Vaše prihlasovacie údaje môžu byť nesprávne alebo kamera nepodporuje protokol ONVIF alebo metódu použitú na získanie URL adries RTSP. Vráťte sa späť a zadajte URL adresu RTSP manuálne.", + "candidateStreamTitle": "Kandidát {{number}}", + "useCandidate": "Použitie", + "uriCopy": "Kopírovať", + "uriCopied": "URI skopírované do schránky", + "testConnection": "Testovacie pripojenie", + "toggleUriView": "Kliknutím prepnete zobrazenie celého URI", + "errors": { + "hostRequired": "Vyžaduje sa hostiteľská/IP adresa" + } + }, + "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": "Nakonfigurujte role streamov a pridajte ďalšie streamy pre vašu kameru.", + "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é", + "streamsTitle": "Kamerové prúdy", + "addStream": "Pridať Stream", + "addAnotherStream": "Pridať ďalší Stream", + "streamUrl": "Stream URL", + "streamUrlPlaceholder": "rtsp://username:password@host:port/path", + "selectStream": "Vyberte stream", + "searchCandidates": "Hľadať kandidátov...", + "noStreamFound": "Nenašiel sa žiadny stream", + "url": "URL", + "resolution": "Rozlíšenie", + "selectResolution": "Vyberte rozlíšenie", + "quality": "Kvalita", + "selectQuality": "Vyberte kvalitu", + "roleLabels": { + "detect": "Detekcia objektov", + "record": "Nahrávanie", + "audio": "Zvuk" + }, + "testStream": "Testovanie pripojenia", + "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." + } + }, + "step4": { + "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é", + "connectStream": "Pripojiť", + "connectingStream": "Pripája", + "disconnectStream": "Odpojiť", + "estimatedBandwidth": "Odhadovaná šírka pásma", + "roles": "Roly", + "ffmpegModule": "Použite režim kompatibility prúdu", + "ffmpegModuleDescription": "Ak sa stream nenačíta ani po niekoľkých pokusoch, skúste túto funkciu povoliť. Keď je táto funkcia povolená, Frigate použije modul ffmpeg s go2rtc. To môže poskytnúť lepšiu kompatibilitu s niektorými streammi z kamier.", + "none": "Žiadne", + "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": "Platnosť Streamu", + "videoCodecGood": "Kód videa je {{codec}}.", + "audioCodecGood": "Audio kódc je {{codec}}.", + "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.", + "noAudioWarning": "Žiadne audio nebolo detekovane 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.", + "brands": { + "reolink-rtsp": "Reolink RTSP sa neodporúča. Odporúča sa povoliť HTTP v nastavení kamery a reštartovať sprievodca kamery." + }, + "dahua": { + "substreamWarning": "Čiastkový stream 1 je uzamknutý na nízke rozlíšenie. Mnoho kamier Dahua / Amcrest / EmpireTech podporuje ďalšie čiastkové streamy, ktoré je potrebné povoliť v nastaveniach kamery. Odporúča sa skontrolovať a využiť tieto streamy, ak sú k dispozícii." + }, + "hikvision": { + "substreamWarning": "Čiastkový stream 1 je uzamknutý na nízke rozlíšenie. Mnoho kamier Hikvision podporuje ďalšie čiastkové streamy, ktoré je potrebné povoliť v nastaveniach kamery. Odporúča sa skontrolovať a využiť tieto streamy, ak sú k dispozícii." + } + } + } + }, + "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..94afc9111 100644
--- a/web/public/locales/sk/views/system.json
+++ b/web/public/locales/sk/views/system.json
@@ -76,7 +76,12 @@
}
},
"npuUsage": "Použitie NPU",
- "npuMemory": "Pamäť NPU"
+ "npuMemory": "Pamäť NPU",
+ "intelGpuWarning": {
+ "title": "Intel GPU Stats Upozornenie",
+ "message": "Štatistiky GPU nedostupné",
+ "description": "Toto je známa chyba v Štatistike správ Intel (intel_gpu_top) kde sa rozpadne a opakovane vráti používanie GPU 0% aj v prípadoch, keď hardvér detekcie objektov správne beží na (i)GPU. Toto nie je Frigate chyba. Môžete reštartovať a tak dočasne opraviť problém a potvrdiť, že GPU funguje správne. Toto nemá vplyv na výkon."
+ }
},
"otherProcesses": {
"title": "Iné procesy",
@@ -138,7 +143,56 @@
"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",
+ "review_description": "Popis recenzie",
+ "review_description_speed": "Popis recenzie Rýchlosťi",
+ "review_description_events_per_second": "Popis",
+ "object_description": "Popis objektu",
+ "object_description_speed": "Popis objektu Rýchlosť",
+ "object_description_events_per_second": "Popis objektu"
+ },
+ "averageInf": "Priemerný čas inferencie"
}
}
diff --git a/web/public/locales/sl/common.json b/web/public/locales/sl/common.json
index 4468781f5..25bc0644e 100644
--- a/web/public/locales/sl/common.json
+++ b/web/public/locales/sl/common.json
@@ -51,7 +51,7 @@
"h": "{{time}}h",
"m": "{{time}}m",
"s": "{{time}}s",
- "yr": "le",
+ "yr": "{{time}}l.",
"formattedTimestamp": {
"12hour": "d MMM, h:mm:ss aaa",
"24hour": "d MMM, HH:mm:ss"
@@ -84,7 +84,10 @@
"formattedTimestampFilename": {
"12hour": "dd-MM-yy-h-mm-ss-a",
"24hour": "dd-MM-yy-HH-mm-ss"
- }
+ },
+ "invalidStartTime": "Napačen čas začetka",
+ "invalidEndTime": "Napačen čas konca",
+ "inProgress": "V teku"
},
"menu": {
"live": {
@@ -152,7 +155,13 @@
"bg": "Български (bulgarščina)",
"withSystem": {
"label": "Uporabi sistemske nastavitve za jezik"
- }
+ },
+ "ptBR": "Português brasileiro (Brazilska portugalščina)",
+ "ca": "Català (Katalonščina)",
+ "lt": "Lietuvių (Litovščina)",
+ "gl": "Galego (Galicijščina)",
+ "id": "Bahasa Indonesia (Indonezijščina)",
+ "ur": "اردو (Urdujščina)"
},
"appearance": "Izgled",
"darkMode": {
@@ -179,7 +188,9 @@
"anonymous": "anonimen",
"logout": "Odjava",
"setPassword": "Nastavi Geslo"
- }
+ },
+ "uiPlayground": "UI Peskovnik",
+ "classification": "Klasifikacija"
},
"button": {
"apply": "Uporabi",
@@ -216,7 +227,8 @@
"unselect": "Odznači",
"export": "Izvoz",
"deleteNow": "Izbriši Zdaj",
- "next": "Naprej"
+ "next": "Naprej",
+ "continue": "Nadaljuj"
},
"unit": {
"speed": {
@@ -226,10 +238,23 @@
"length": {
"feet": "čevelj",
"meters": "metri"
+ },
+ "data": {
+ "kbps": "kB/s",
+ "mbps": "MB/s",
+ "gbps": "GB/s",
+ "kbph": "kB/uro",
+ "mbph": "MB/uro",
+ "gbph": "GB/uro"
}
},
"label": {
- "back": "Pojdi nazaj"
+ "back": "Pojdi nazaj",
+ "hide": "Skrij {{item}}",
+ "show": "Prikaži {{item}}",
+ "ID": "ID",
+ "none": "Brez",
+ "all": "Vse"
},
"pagination": {
"next": {
@@ -270,5 +295,17 @@
"title": "404",
"desc": "Stran ni najdena"
},
- "readTheDocumentation": "Preberite dokumentacijo"
+ "readTheDocumentation": "Preberite dokumentacijo",
+ "list": {
+ "two": "{{0}} in {{1}}",
+ "many": "{{items}}, in {{last}}",
+ "separatorWithSpace": ", "
+ },
+ "field": {
+ "optional": "Izbirno",
+ "internalID": "Interni ID, ki ga Frigate uporablja v konfiguraciji in podatkovni bazi"
+ },
+ "information": {
+ "pixels": "{{area}}px"
+ }
}
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..3ba3e676d
--- /dev/null
+++ b/web/public/locales/sl/views/classificationModel.json
@@ -0,0 +1,55 @@
+{
+ "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",
+ "deleteClassificationAttempts": "Izbriši klasifikacijske slike"
+ },
+ "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"
+ }
+ },
+ "documentTitle": "Klasifikacijski modeli - fregate",
+ "details": {
+ "scoreInfo": "Razultat predstavlja povprečno stopnjo sigurnosti čez vsa zaznavynja objekta."
+ }
+}
diff --git a/web/public/locales/sl/views/faceLibrary.json b/web/public/locales/sl/views/faceLibrary.json
index 9d5324759..c41520fa5 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: https://…). Detta är en begränsning i webbläsaren. Få säker åtkomst till Frigate för att använda meddelanden."
@@ -634,7 +666,8 @@
"createRole": "Roll {{role}} skapad",
"updateCameras": "Kameror uppdaterade för roll {{role}}",
"deleteRole": "Roll {{role}} raderad",
- "userRolesUpdated": "{{count}} användare som tilldelats den här rollen har uppdaterats till 'tittare', vilket har åtkomst till alla kameror."
+ "userRolesUpdated_one": "{{count}} användare som tilldelats den här rollen har uppdaterats till 'tittare', vilket har åtkomst till alla kameror.",
+ "userRolesUpdated_other": "{{count}} användare som tilldelats den här rollen har uppdaterats till 'tittare', vilket har åtkomst till alla kameror."
},
"error": {
"createRoleFailed": "Misslyckades att skapa roll: {{errorMessage}}",
@@ -725,7 +758,7 @@
"triggers": {
"documentTitle": "Utlösare",
"management": {
- "title": "Utlösare hantering",
+ "title": "Utlösare",
"desc": "Hantera utlösare för {{camera}}. Använd miniatyrtypen för att utlösa liknande miniatyrer som ditt valda spårade objekt och beskrivningstypen för att utlösa liknande beskrivningar av text du anger."
},
"addTrigger": "Lägg till utlösare",
@@ -746,7 +779,9 @@
},
"actions": {
"notification": "Skicka avisering",
- "alert": "Markera som varning"
+ "alert": "Markera som Varning",
+ "sub_label": "Lägg till underetikett",
+ "attribute": "Lägg till attribut"
},
"dialog": {
"createTrigger": {
@@ -764,25 +799,28 @@
"form": {
"name": {
"title": "Namn",
- "placeholder": "Ange utlösarens namn",
+ "placeholder": "Namnge denna utlösare",
"error": {
- "minLength": "Namnet måste vara minst 2 tecken lång.",
- "invalidCharacters": "Namnet får bara innehålla bokstäver, siffror, understreck, och bindestreck.",
+ "minLength": "Fältet måste vara minst 2 tecken långt.",
+ "invalidCharacters": "Fältet får bara innehålla bokstäver, siffror, understreck och bindestreck.",
"alreadyExists": "En utlösare med detta namn finns redan för den här kameran."
- }
+ },
+ "description": "Ange ett unikt namn eller en unik beskrivning för att identifiera den här utlösaren"
},
"enabled": {
"description": "Aktivera eller inaktivera den här utlösaren"
},
"type": {
"title": "Typ",
- "placeholder": "Välj utlösartyp"
+ "placeholder": "Välj utlösartyp",
+ "description": "Utlöses när en liknande beskrivning av spårat objekt detekteras",
+ "thumbnail": "Utlöses när en liknande miniatyrbild av ett spårat objekt upptäcks"
},
"content": {
"title": "Innehåll",
- "imagePlaceholder": "Välj en bild",
+ "imagePlaceholder": "Välj en miniatyrbild",
"textPlaceholder": "Ange textinnehåll",
- "imageDesc": "Välj en bild för att utlösa den här åtgärden när en liknande bild upptäcks.",
+ "imageDesc": "Endast de senaste 100 miniatyrerna visas. Om du inte hittar önskad miniatyr kan du granska tidigare objekt i Utforska och skapa en utlösare från menyn där.",
"textDesc": "Ange text för att utlösa den här åtgärden när en liknande beskrivning av spårat objekt upptäcks.",
"error": {
"required": "Innehåll krävs."
@@ -793,14 +831,20 @@
"error": {
"min": "Tröskelvärdet måste vara minst 0",
"max": "Tröskelvärdet får vara högst 1"
- }
+ },
+ "desc": "Ställ in likhetströskeln för denna utlösare. En högre tröskel innebär att en bättre matchning krävs för att utlösaren ska aktiveras."
},
"actions": {
"title": "Åtgärder",
- "desc": "Som standard utlöser Frigate ett MQTT-meddelande för alla utlösare. Välj en ytterligare åtgärd att utföra när den här utlösaren utlöses.",
+ "desc": "Som standard utlöser Frigate ett MQTT-meddelande för alla utlösare. Underetiketter lägger till utlösarnamnet till objektetiketten. Attribut är sökbara metadata som lagras separat i de spårade objektmetadata.",
"error": {
"min": "Minst en åtgärd måste väljas."
}
+ },
+ "friendly_name": {
+ "title": "Vänligt namn",
+ "placeholder": "Namnge eller beskriv denna utlösare",
+ "description": "Ett valfritt vänligt namn eller en beskrivande text för denna utlösare."
}
}
},
@@ -815,6 +859,380 @@
"updateTriggerFailed": "Misslyckades med att uppdatera utlösaren: {{errorMessage}}",
"deleteTriggerFailed": "Misslyckades med att ta bort utlösaren: {{errorMessage}}"
}
+ },
+ "semanticSearch": {
+ "title": "Semantisk sökning är inaktiverad",
+ "desc": "Semantisk sökning måste vara aktiverad för att använda Utlösare."
+ },
+ "wizard": {
+ "title": "Skapa utlösare",
+ "step1": {
+ "description": "Konfigurera grundinställningarna för din trigger."
+ },
+ "step2": {
+ "description": "Ställ in innehållet som ska utlösa den här åtgärden."
+ },
+ "step3": {
+ "description": "Konfigurera tröskelvärdet och åtgärderna för den här utlösaren."
+ },
+ "steps": {
+ "nameAndType": "Namn och typ",
+ "configureData": "Konfigurera data",
+ "thresholdAndActions": "Tröskelvärde och åtgärder"
+ }
+ }
+ },
+ "cameraWizard": {
+ "title": "Lägg till kamera",
+ "description": "Följ stegen nedan för att lägga till en ny kamera i din Frigate-installation.",
+ "steps": {
+ "nameAndConnection": "Namn och anslutning",
+ "streamConfiguration": "Strömkonfiguration",
+ "validationAndTesting": "Validering och testning",
+ "probeOrSnapshot": "Prob eller ögonblicksbild"
+ },
+ "save": {
+ "success": "Ny kamera {{cameraName}} har sparats.",
+ "failure": "Fel vid sparning av {{cameraName}}."
+ },
+ "testResultLabels": {
+ "resolution": "Upplösning",
+ "video": "Video",
+ "audio": "Ljud",
+ "fps": "FPS"
+ },
+ "commonErrors": {
+ "noUrl": "Ange en giltig strömnings länk",
+ "testFailed": "Strömtest misslyckades: {{error}}"
+ },
+ "step1": {
+ "description": "Ange dina kamerauppgifter och välj att undersöka kameran eller manuellt välja märke.",
+ "cameraName": "Kameranamn",
+ "cameraNamePlaceholder": "t.ex. ytterdörr eller Översikt över bakgård",
+ "host": "Värd-/IP-adress",
+ "port": "Portnummer",
+ "username": "Användarnamn",
+ "usernamePlaceholder": "Frivillig",
+ "password": "Lösenord",
+ "passwordPlaceholder": "Frivillig",
+ "selectTransport": "Välj transportprotokoll",
+ "cameraBrand": "Kameramärke",
+ "selectBrand": "Välj kameramärke för URL-mall",
+ "customUrl": "Anpassad ström länk",
+ "brandInformation": "Varumärkesinformation",
+ "brandUrlFormat": "För kameror med RTSP URL-formatet: {{exampleUrl}}",
+ "customUrlPlaceholder": "rtsp://användarnamn:passord@värd:port/text",
+ "testConnection": "Testa anslutning",
+ "testSuccess": "Anslutningstestet lyckades!",
+ "testFailed": "Anslutningstestet misslyckades. Kontrollera dina indata och försök igen.",
+ "streamDetails": "Streamdetaljer",
+ "warnings": {
+ "noSnapshot": "Det gick inte att hämta en ögonblicksbild från den konfigurerade strömmen."
+ },
+ "errors": {
+ "brandOrCustomUrlRequired": "Välj antingen ett kameramärke med värd/IP eller välj \"Annat\" med en anpassad URL",
+ "nameRequired": "Kameranamn krävs",
+ "nameLength": "Kameranamnet måste vara högst 64 tecken långt",
+ "invalidCharacters": "Kameranamnet innehåller ogiltiga tecken",
+ "nameExists": "Kameranamnet finns redan",
+ "brands": {
+ "reolink-rtsp": "Reolink RTSP rekommenderas inte. Aktivera HTTP i kamerans firmwareinställningar och starta om guiden."
+ },
+ "customUrlRtspRequired": "Anpassade webbadresser måste börja med \"rtsp://\". Manuell konfiguration krävs för kameraströmmar som inte använder RTSP."
+ },
+ "docs": {
+ "reolink": "https://docs.frigate.video/configuration/camera_specific.html#reolink-cameras"
+ },
+ "testing": {
+ "probingMetadata": "Undersöker kamerans metadata...",
+ "fetchingSnapshot": "Hämtar kamerabild..."
+ },
+ "connectionSettings": "Anslutningsinställningar",
+ "detectionMethod": "Strömdetekteringsmetod",
+ "onvifPort": "ONVIF-port",
+ "probeMode": "Undersök kameran",
+ "manualMode": "Manuellt val",
+ "detectionMethodDescription": "Undersök kameran med ONVIF (om det stöds) för att hitta kameraströms-URL:er, eller välj kameramärke manuellt för att använda fördefinierade URL:er. För att ange en anpassad RTSP-URL, välj den manuella metoden och välj \"Annat\".",
+ "onvifPortDescription": "För kameror som stöder ONVIF är detta vanligtvis 80 eller 8080.",
+ "useDigestAuth": "Använd digest-autentisering",
+ "useDigestAuthDescription": "Använd HTTP-sammanfattningsautentisering för ONVIF. Vissa kameror kan kräva ett dedikerat ONVIF-användarnamn/lösenord istället för standardadministratörsanvändaren."
+ },
+ "step2": {
+ "description": "Undersök kameran efter tillgängliga strömmar eller konfigurera manuella inställningar baserat på din valda detekteringsmetod.",
+ "streamsTitle": "Kameraströmmar",
+ "addStream": "Lägg till ström",
+ "addAnotherStream": "Lägg till ytterligare en ström",
+ "streamTitle": "Ström {{number}}",
+ "streamUrl": "Ström URL",
+ "streamUrlPlaceholder": "rtsp://användarnamn:lösenord@värd:portnummer/plats",
+ "url": "URL",
+ "resolution": "Upplösning",
+ "selectResolution": "Välj upplösning",
+ "quality": "Kvalitet",
+ "selectQuality": "Välj kvalitet",
+ "roles": "Roller",
+ "roleLabels": {
+ "detect": "Objektdetektering",
+ "record": "Inspelning",
+ "audio": "Ljud"
+ },
+ "testStream": "Testa anslutning",
+ "testSuccess": "Anslutningstestet lyckades!",
+ "testFailed": "Anslutningstestet misslyckades. Kontrollera dina indata och försök igen.",
+ "testFailedTitle": "Testet misslyckades",
+ "connected": "Ansluten",
+ "notConnected": "Inte ansluten",
+ "featuresTitle": "Funktioner",
+ "go2rtc": "Minska anslutningar till kameran",
+ "detectRoleWarning": "Minst en ström måste ha rollen \"upptäcka\" för att fortsätta.",
+ "rolesPopover": {
+ "title": "Ström-roller",
+ "detect": "Huvud video ström för objektdetektering.",
+ "record": "Sparar segment av videoflödet baserat på konfigurationsinställningar.",
+ "audio": "Flöde för ljudbaserad detektering."
+ },
+ "featuresPopover": {
+ "title": "Strömfunktioner",
+ "description": "Använd go2rtc-omströmning för att minska anslutningar till din kamera."
+ },
+ "streamDetails": "Streamdetaljer",
+ "probing": "Undersöker kameran...",
+ "retry": "Försöka igen",
+ "testing": {
+ "probingMetadata": "Undersöker kamerans metadata...",
+ "fetchingSnapshot": "Hämtar kamerabild..."
+ },
+ "probeFailed": "Misslyckades med att undersöka kameran: {{error}}",
+ "probingDevice": "Undersöker enheten...",
+ "probeSuccessful": "Kontroll lyckades",
+ "probeError": "Kontroll fel",
+ "probeNoSuccess": "Kontroll misslyckades",
+ "deviceInfo": "Enhetsinformation",
+ "manufacturer": "Tillverkare",
+ "model": "Modell",
+ "firmware": "Inbyggd programvara",
+ "profiles": "Profiler",
+ "ptzSupport": "PTZ-stöd",
+ "autotrackingSupport": "Stöd för Autospårning",
+ "presets": "Förinställningar",
+ "rtspCandidates": "RTSP-kandidater",
+ "rtspCandidatesDescription": "Följande RTSP-URL:er hittades från kamera kontrollen. Testa anslutningen för att visa strömmetadata.",
+ "noRtspCandidates": "Inga RTSP-URL:er hittades från kameran. Dina inloggningsuppgifter kan vara felaktiga, eller så kanske kameran inte stöder ONVIF eller metoden som används för att hämta RTSP-URL:er. Gå tillbaka och ange RTSP-URL:en manuellt.",
+ "candidateStreamTitle": "Kandidat {{number}}",
+ "useCandidate": "Använda",
+ "uriCopy": "Kopiera",
+ "uriCopied": "URI kopierad till urklipp",
+ "testConnection": "Testa anslutning",
+ "toggleUriView": "Klicka för att växla mellan fullständig URI-vy",
+ "errors": {
+ "hostRequired": "Värd-/IP-adress krävs"
+ }
+ },
+ "step3": {
+ "description": "Konfigurera strömningsroller och lägg till ytterligare strömmar för din kamera.",
+ "validationTitle": "Strömvalidering",
+ "connectAllStreams": "Anslut alla strömmar",
+ "reconnectionSuccess": "Återanslutningen lyckades.",
+ "reconnectionPartial": "Vissa strömmar kunde inte återanslutas.",
+ "streamUnavailable": "Förhandsgranskning av strömmen är inte tillgänglig",
+ "reload": "Ladda om",
+ "connecting": "Ansluter...",
+ "streamTitle": "Ström {{number}}",
+ "valid": "Giltig",
+ "failed": "Misslyckades",
+ "notTested": "Inte testad",
+ "connectStream": "Ansluta",
+ "connectingStream": "Ansluter",
+ "disconnectStream": "Koppla från",
+ "estimatedBandwidth": "Uppskattad bandbredd",
+ "roles": "Roller",
+ "none": "Ingen",
+ "error": "Fel",
+ "streamValidated": "Ström {{number}} har validerats",
+ "streamValidationFailed": "Validering av ström {{number}} misslyckades",
+ "saveAndApply": "Spara ny kamera",
+ "saveError": "Ogiltig konfiguration. Kontrollera dina inställningar.",
+ "issues": {
+ "title": "Strömvalidering",
+ "videoCodecGood": "Videokodeken är {{codec}}.",
+ "audioCodecGood": "Ljudkodeken är {{codec}}.",
+ "noAudioWarning": "Inget ljud upptäcktes för den här strömmen, inspelningarna kommer inte att ha något ljud.",
+ "audioCodecRecordError": "AAC-ljudkodeken krävs för att stödja ljud i inspelningar.",
+ "audioCodecRequired": "En ljudström krävs för att stödja ljuddetektering.",
+ "restreamingWarning": "Att minska anslutningarna till kameran för inspelningsströmmen kan öka CPU-användningen något.",
+ "dahua": {
+ "substreamWarning": "Delström 1 är låst till en låg upplösning. Många Dahua / Amcrest / EmpireTech kameror stöder ytterligare delströmmar som måste aktiveras i kamerans inställningar. Det rekommenderas att kontrollera och använda dessa strömmar om de är tillgängliga."
+ },
+ "hikvision": {
+ "substreamWarning": "Delström 1 är låst till en låg upplösning. Många Hikvision kameror stöder ytterligare delströmmar som måste aktiveras i kamerans inställningar. Det rekommenderas att kontrollera och använda dessa strömmar om de är tillgängliga."
+ },
+ "resolutionHigh": "En upplösning på {{resolution}} kan orsaka ökad resursanvändning.",
+ "resolutionLow": "En upplösning på {{resolution}} kan vara för låg för tillförlitlig detektering av små objekt."
+ },
+ "ffmpegModule": "Använd läge för strömkompatibilitet",
+ "ffmpegModuleDescription": "Om strömmen inte läses in efter flera försök, prova att aktivera detta. När det är aktiverat kommer Frigate att använda ffmpeg-modulen med go2rtc. Detta kan ge bättre kompatibilitet med vissa kameraströmmar.",
+ "streamsTitle": "Kameraströmmar",
+ "addStream": "Lägg till ström",
+ "addAnotherStream": "Lägg till ytterligare en ström",
+ "streamUrl": "Stream-URL",
+ "streamUrlPlaceholder": "rtsp://användarnamn:lösenord@värd:portnummer/plats",
+ "selectStream": "Välj en ström",
+ "searchCandidates": "Sök kandidater...",
+ "noStreamFound": "Ingen ström hittades",
+ "url": "URL",
+ "resolution": "Upplösning",
+ "selectResolution": "Välj upplösning",
+ "quality": "Kvalitet",
+ "selectQuality": "Välj kvalitet",
+ "roleLabels": {
+ "detect": "Objektdetektering",
+ "record": "Inspelning",
+ "audio": "Ljud"
+ },
+ "testStream": "Testa anslutning",
+ "testSuccess": "Streamtestet lyckades!",
+ "testFailed": "Strömtestet misslyckades",
+ "testFailedTitle": "Testet misslyckades",
+ "connected": "Ansluten",
+ "notConnected": "Inte ansluten",
+ "featuresTitle": "Funktioner",
+ "go2rtc": "Minska anslutningar till kameran",
+ "detectRoleWarning": "Minst en ström måste ha rollen \"upptäck\" för att fortsätta.",
+ "rolesPopover": {
+ "title": "Stream-roller",
+ "detect": "Huvud kamera flöde för objektdetektering.",
+ "record": "Sparar segment av videoflödet baserat på konfigurationsinställningar.",
+ "audio": "Flöde för ljudbaserad detektering."
+ },
+ "featuresPopover": {
+ "title": "Streamfunktioner",
+ "description": "Använd go2rtc-omströmning för att minska anslutningar till din kamera."
+ }
+ },
+ "step4": {
+ "description": "Slutgiltig validering och analys innan du sparar din nya kamera. Anslut varje ström innan du sparar.",
+ "validationTitle": "Ström validering",
+ "connectAllStreams": "Anslut alla strömmar",
+ "reconnectionSuccess": "Återanslutningen lyckades.",
+ "reconnectionPartial": "Vissa strömmar kunde inte återanslutas.",
+ "streamUnavailable": "Förhandsgranskning av strömmen är inte tillgänglig",
+ "reload": "Ladda om",
+ "connecting": "Ansluter...",
+ "streamTitle": "Ström {{number}}",
+ "valid": "Giltig",
+ "failed": "Misslyckades",
+ "notTested": "Inte testad",
+ "connectStream": "Ansluta",
+ "connectingStream": "Ansluter",
+ "disconnectStream": "Koppla från",
+ "estimatedBandwidth": "Uppskattad bandbredd",
+ "roles": "Roller",
+ "ffmpegModule": "Använd strömkompatibilitetsläge",
+ "ffmpegModuleDescription": "Om strömmen inte laddas efter flera försök, försök att aktivera detta. När det är aktiverat kommer Frigate att använda ffmpeg-modulen med go2rtc. Detta kan ge bättre kompatibilitet med vissa kameraströmmar.",
+ "none": "Ingen",
+ "error": "Fel",
+ "streamValidated": "Ström {{number}} har validerats",
+ "streamValidationFailed": "Validering av ström {{number}} misslyckades",
+ "saveAndApply": "Spara ny kamera",
+ "saveError": "Ogiltig konfiguration. Kontrollera dina inställningar.",
+ "issues": {
+ "title": "Ström validering",
+ "videoCodecGood": "Videokodeken är {{codec}}.",
+ "audioCodecGood": "Ljudkodeken är {{codec}}.",
+ "resolutionHigh": "En upplösning på {{resolution}} kan orsaka ökad resursanvändning.",
+ "resolutionLow": "En upplösning på {{resolution}} kan vara för låg för tillförlitlig detektering av små objekt.",
+ "noAudioWarning": "Inget ljud upptäcktes för den här strömmen, inspelningarna kommer inte att ha ljud.",
+ "audioCodecRecordError": "AAC-ljudkodeken krävs för att stödja ljud i inspelningar.",
+ "audioCodecRequired": "En ljudström krävs för att stödja ljuddetektering.",
+ "restreamingWarning": "Att minska anslutningarna till kameran för inspelningsströmmen kan öka CPU-användningen något.",
+ "brands": {
+ "reolink-rtsp": "Reolink RTSP rekommenderas inte. Aktivera HTTP i kamerans firmwareinställningar och starta om guiden.",
+ "reolink-http": "Reolink HTTP-strömmar bör använda FFmpeg för bättre kompatibilitet. Aktivera \"Använd strömkompatibilitetsläge\" för den här strömmen."
+ },
+ "dahua": {
+ "substreamWarning": "Delström 1 är låst till en låg upplösning. Många Dahua/Amcrest/EmpireTech-kameror stöder ytterligare delströmmar som måste aktiveras i kamerans inställningar. Det rekommenderas att kontrollera och använda dessa strömmar om de är tillgängliga."
+ },
+ "hikvision": {
+ "substreamWarning": "Delström 1 är låst till en låg upplösning. Många Hikvision-kameror stöder ytterligare delströmmar som måste aktiveras i kamerans inställningar. Det rekommenderas att kontrollera och använda dessa strömmar om de är tillgängliga."
+ }
+ }
+ }
+ },
+ "cameraManagement": {
+ "title": "Hantera kameror",
+ "addCamera": "Lägg till ny kamera",
+ "editCamera": "Redigera kamera:",
+ "selectCamera": "Välj en kamera",
+ "backToSettings": "Tillbaka till kamerainställningar",
+ "streams": {
+ "title": "Aktivera/avaktivera kameror",
+ "desc": "Inaktivera tillfälligt en kamera tills Frigate startar om. Om du inaktiverar en kamera helt stoppas Frigates bearbetning av kamerans strömmar. Detektering, inspelning och felsökning kommer inte att vara tillgängliga.軌跡
線條同圓圈會標示追蹤物件整個生命周期中移動過的重要點。
" } }, "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 對該鏡頭串流的處理。偵測、錄影及除錯功能將無法使用。mode: {{effectiveRetainMode}},因此此按需录制将仅保留包含 {{effectiveRetainModeName}} 的片段。"
},
@@ -167,5 +170,20 @@
"transcription": {
"enable": "启用实时音频转录",
"disable": "关闭实时音频转录"
+ },
+ "noCameras": {
+ "title": "未设置摄像头",
+ "description": "准备开始连接摄像头至 Frigate 。",
+ "buttonText": "添加摄像头",
+ "restricted": {
+ "title": "无可用摄像头",
+ "description": "你没有权限查看此分组中的任何摄像头。"
+ }
+ },
+ "snapshot": {
+ "takeSnapshot": "下载即时快照",
+ "noVideoSource": "当前无可用于快照的视频源。",
+ "captureFailed": "捕获快照失败。",
+ "downloadStarted": "快照下载已开始。"
}
}
diff --git a/web/public/locales/zh-CN/views/search.json b/web/public/locales/zh-CN/views/search.json
index 8a25c11f5..51fe47c8e 100644
--- a/web/public/locales/zh-CN/views/search.json
+++ b/web/public/locales/zh-CN/views/search.json
@@ -26,7 +26,8 @@
"max_speed": "最高速度",
"recognized_license_plate": "识别的车牌",
"has_clip": "包含片段",
- "has_snapshot": "包含快照"
+ "has_snapshot": "包含快照",
+ "attributes": "属性"
},
"searchType": {
"thumbnail": "缩略图",
diff --git a/web/public/locales/zh-CN/views/settings.json b/web/public/locales/zh-CN/views/settings.json
index 6cf6baad9..a9a2ee567 100644
--- a/web/public/locales/zh-CN/views/settings.json
+++ b/web/public/locales/zh-CN/views/settings.json
@@ -5,25 +5,30 @@
"camera": "摄像头设置 - Frigate",
"classification": "分类设置 - Frigate",
"masksAndZones": "遮罩和区域编辑器 - Frigate",
- "motionTuner": "运动调整器 - Frigate",
+ "motionTuner": "画面变动调整 - Frigate",
"object": "调试 - Frigate",
- "general": "常规设置 - Frigate",
+ "general": "页面设置 - Frigate",
"frigatePlus": "Frigate+ 设置 - Frigate",
"notifications": "通知设置 - Frigate",
- "enrichments": "增强功能设置 - Frigate"
+ "enrichments": "增强功能设置 - Frigate",
+ "cameraManagement": "管理摄像头 - Frigate",
+ "cameraReview": "摄像头核查设置 - Frigate"
},
"menu": {
"ui": "界面设置",
"classification": "分类设置",
"cameras": "摄像头设置",
"masksAndZones": "遮罩/ 区域",
- "motionTuner": "运动调整器",
+ "motionTuner": "画面变动调整",
"debug": "调试",
"users": "用户",
"notifications": "通知",
"frigateplus": "Frigate+",
"enrichments": "增强功能",
- "triggers": "触发器"
+ "triggers": "触发器",
+ "roles": "权限组",
+ "cameraManagement": "管理",
+ "cameraReview": "核查"
},
"dialog": {
"unsavedChanges": {
@@ -36,7 +41,7 @@
"noCamera": "没有摄像头"
},
"general": {
- "title": "常规设置",
+ "title": "页面设置",
"liveDashboard": {
"title": "实时监控面板",
"automaticLiveView": {
@@ -46,6 +51,14 @@
"playAlertVideos": {
"label": "播放警报视频",
"desc": "默认情况下,实时监控页面上的最新警报会以一小段循环视频的形式进行播放。禁用此选项将仅显示浏览器本地缓存的静态图片。"
+ },
+ "displayCameraNames": {
+ "label": "始终显示摄像头名称",
+ "desc": "在有多摄像头情况下的实时监控页面,将始终显示摄像头名称标签。"
+ },
+ "liveFallbackTimeout": {
+ "label": "实时监控播放器回退超时",
+ "desc": "当摄像头的高清实时监控流不可用时,将在此时间后回退到低带宽模式。默认值:3秒。"
}
},
"storedLayouts": {
@@ -238,7 +251,8 @@
"mustNotBeSameWithCamera": "区域名称不能与摄像头名称相同。",
"alreadyExists": "该摄像头已有相同的区域名称。",
"mustNotContainPeriod": "区域名称不能包含句点。",
- "hasIllegalCharacter": "区域名称包含非法字符。"
+ "hasIllegalCharacter": "区域名称包含非法字符。",
+ "mustHaveAtLeastOneLetter": "区域名称必须至少包含一个字母。"
}
},
"distance": {
@@ -295,7 +309,7 @@
"name": {
"title": "区域名称",
"inputPlaceHolder": "请输入名称…",
- "tips": "名称至少包含两个字符,且不能和摄像头或其他区域同名。运动区域框
将在当前检测到运动的区域内显示红色区域框。
" + "title": "画面变动区域框", + "desc": "在检测到画面变动的区域显示区域框", + "tips": "画面变动区域框
将在当前检测到画面变动的区域内显示红色区域框。
" }, "regions": { "title": "范围", - "desc": "显示发送到运动检测器感兴趣范围的框", + "desc": "显示发送给目标检测器感兴趣的区域框", "tips": "范围框
将在帧中发送到目标检测器的感兴趣范围上叠加绿色框。
" }, "objectShapeFilterDrawing": { - "title": "允许绘制“对象形状过滤器”", + "title": "允许绘制“目标形状过滤器”", "desc": "在图像上绘制矩形,以查看区域和比例详细信息", - "tips": "启用此选项,能够在摄像头图像上绘制矩形,将显示其区域和比例。然后,您可以使用这些值在配置中设置对象形状过滤器参数。", + "tips": "启用此选项,能够在摄像头画面上绘制矩形,将显示其区域和比例。你可以通过使用这些值在配置中设置目标形状过滤器的参数。", "document": "阅读文档 ", "score": "分数", "ratio": "比例", "area": "区域" }, "paths": { - "title": "运动轨迹", - "desc": "显示被追踪目标的运动轨迹关键点", - "tips": "运动轨迹
将使用线条和圆圈标示被追踪目标在其活动周期内移动的关键位置点。
" + "title": "行动轨迹", + "desc": "显示被追踪目标的行动轨迹关键点", + "tips": "行动轨迹
将使用线条和点来标示被追踪目标在其活动周期内移动的关键位置点。
" }, "audio": { "title": "音频", @@ -499,7 +513,7 @@ "role": "权限组", "noUsers": "未找到用户。", "changeRole": "更改用户角色", - "password": "密码", + "password": "修改密码", "deleteUser": "删除用户" }, "dialog": { @@ -524,7 +538,16 @@ "veryStrong": "非常强" }, "match": "密码匹配", - "notMatch": "密码不匹配" + "notMatch": "密码不匹配", + "show": "显示密码", + "hide": "隐藏密码", + "requirements": { + "title": "密码要求:", + "length": "至少8个字符", + "uppercase": "至少一个大写字母", + "digit": "至少一位数字", + "special": "至少一个特殊符号 (!@#$%^&*(),.?\":{}|<>)" + } }, "newPassword": { "title": "新密码", @@ -534,7 +557,11 @@ } }, "usernameIsRequired": "用户名为必填项", - "passwordIsRequired": "必须输入密码" + "passwordIsRequired": "必须输入密码", + "currentPassword": { + "title": "当前密码", + "placeholder": "请输入当前密码" + } }, "createUser": { "title": "创建新用户", @@ -552,7 +579,12 @@ "setPassword": "设置密码", "desc": "创建一个强密码来保护此账户。", "doNotMatch": "两次输入密码不匹配", - "cannotBeEmpty": "密码不能为空" + "cannotBeEmpty": "密码不能为空", + "currentPasswordRequired": "当前密码为必填", + "incorrectCurrentPassword": "当前密码错误", + "passwordVerificationFailed": "验证密码失败", + "multiDeviceWarning": "其他已登录的设备将需要在 {{refresh_time}} 内重新登录。", + "multiDeviceAdmin": "你也可以通过轮换你的 JWT 密钥,强制所有用户立即重新登录验证。" }, "changeRole": { "title": "更改用户权限组", @@ -672,12 +704,12 @@ "enrichments": { "title": "增强功能设置", "birdClassification": { - "desc": "鸟类分类通过量化的TensorFlow模型识别已知鸟类。当识别到已知鸟类时,其通用名称将作为子标签(sub_label)添加。此信息包含在用户界面、筛选器以及通知中。", + "desc": "鸟类分类通过量化的 TensorFlow 模型识别已知鸟类。当识别到已知鸟类时,其通用名称将作为子标签(sub_label)添加。此信息包含在用户界面、筛选器以及通知中。", "title": "鸟类分类" }, "semanticSearch": { "reindexNow": { - "desc": "重建索引将为所有追踪目标重新生成特征向量信息。该过程将在后台进行,可能会使CPU满载,所需时间取决于追踪目标的数量。", + "desc": "重建索引将为所有追踪的目标重新生成特征向量信息。该过程将在后台进行,期间可能会使 CPU 满载,所需时间取决于追踪目标的数量。", "label": "立即重建索引", "confirmTitle": "确认重建索引", "confirmDesc": "确定要为所有追踪目标重建特征向量索引信息吗?此过程将在后台进行,但可能会导致CPU满载并耗费较长时间。您可以在 浏览 页面查看进度。", @@ -691,19 +723,19 @@ "desc": "用于语义搜索的语言模型大小。", "small": { "title": "小", - "desc": "将使用 小模型。该模型将使用少量的内存,在CPU上也能较快的运行,质量较好。" + "desc": "将使用 小模型。该模型使用的内存较少,在 CPU 上也能较快的运行,质量较好。" }, "large": { "title": "大", - "desc": "将使用 大模型。该选项使用了完整的Jina模型,在合适的时候将自动使用GPU。" + "desc": "将使用 大模型。该选项使用了完整的 Jina 模型,条件允许的情况下将自动使用 GPU 运行。" } }, "title": "分类搜索", - "desc": "Frigate中的语义搜索功能允许您通过图片、用户自定义的文本描述,或自动生成的文本描述等方式在核查项目中查找目标/物体。", + "desc": "Frigate 中的语义搜索功能将能够让你通过图片、用户自定义的文本描述,或自动生成的文本描述等方式在核查项目中查找目标/物体。", "readTheDocumentation": "阅读文档" }, "licensePlateRecognition": { - "desc": "Frigate 可以识别车辆的车牌,并自动将检测到的字符添加到 recognized_license_plate 字段中,或将已知车牌对应的名称作为子标签添加到该车辆目标中。一般常用于读取驶入车道的车辆车牌或经过街道的车辆车牌。", + "desc": "Frigate 可以识别车辆的车牌,并自动将检测到的字符添加到 识别的车牌(recognized_license_plate)字段中,或将已知车牌对应的名称作为子标签添加到该车辆目标中。该功能常用于识别驶入车道的车辆车牌或经过街道的车辆车牌。", "title": "车牌识别", "readTheDocumentation": "阅读文档" }, @@ -716,11 +748,11 @@ "desc": "用于人脸识别的模型大小。", "small": { "title": "小", - "desc": "将使用小模型。该选项采用FaceNet人脸特征提取模型,可在大多数CPU上高效运行。" + "desc": "将使用小模型。该选项采用 FaceNet 人脸特征提取模型,可在大多数 CPU 上高效运行。" }, "large": { "title": "大", - "desc": "将使用大模型。该选项使用ArcFace人脸特征提取模型,在需要的时候自动使用GPU运行。" + "desc": "将使用大模型。该选项使用 ArcFace 人脸特征提取模型,条件允许的情况下将自动使用 GPU 运行。" } } }, @@ -734,8 +766,8 @@ "triggers": { "documentTitle": "触发器", "management": { - "title": "触发器管理", - "desc": "管理 {{camera}} 的触发器。您可以使用“缩略图”类型,基于与所选追踪对象相似的缩略图来触发;也可以使用“描述”类型,基于与您指定的文本相似的描述来触发。" + "title": "触发器", + "desc": "管理 {{camera}} 的触发器。你可以选择“缩略图”类型,将通过与追踪目标相似的缩略图来触发;也可以通过“描述”类型,与你描述的文本相似来触发(中文描述需要使用 jina v2模型,对配置要求更高)。" }, "addTrigger": "添加触发器", "table": { @@ -755,7 +787,9 @@ }, "actions": { "alert": "标记为警报", - "notification": "发送通知" + "notification": "发送通知", + "sub_label": "添加子标签", + "attribute": "添加属性" }, "dialog": { "createTrigger": { @@ -773,26 +807,29 @@ "form": { "name": { "title": "名称", - "placeholder": "输入触发器名称", + "placeholder": "触发器名称", "error": { - "minLength": "名称至少要两个字符。", - "invalidCharacters": "名称只能包含字母、数字、下划线和连字符。", + "minLength": "该字段至少需要两个字符。", + "invalidCharacters": "该字段只能包含字母、数字、下划线和连字符。", "alreadyExists": "此摄像头已存在同名触发器。" - } + }, + "description": "请输入用于识别此触发器的唯一名称或描述" }, "enabled": { "description": "开启/关闭此触发器" }, "type": { "title": "类型", - "placeholder": "选择触发类型" + "placeholder": "选择触发类型", + "description": "当检测到相似的追踪目标描述时触发", + "thumbnail": "当检测到相似的追踪目标缩略图时触发" }, "content": { "title": "内容", "imagePlaceholder": "选择图片", "textPlaceholder": "输入文字内容", - "imageDesc": "选择一张图片,当检测到相似图片时触发此操作。", - "textDesc": "输入文本,当检测到相似的追踪对象描述时触发此操作。", + "imageDesc": "仅显示最近的 100 张缩略图。如果找不到需要的图片,请前往“浏览”页面查看更早的目标,并从菜单中设置触发器。", + "textDesc": "输入文本,当检测到相似的追踪目标描述时触发此操作。", "error": { "required": "内容为必填项。" } @@ -802,14 +839,20 @@ "error": { "min": "阈值必须大于 0", "max": "阈值必须小于 1" - } + }, + "desc": "设置此触发器的相似度阈值。阈值越高,触发所需的匹配就越精确。" }, "actions": { "title": "动作", - "desc": "默认情况下,Frigate 会为所有触发器发送 MQTT 消息。请选择此触发器触发时需要执行的附加操作。", + "desc": "默认情况下,Frigate 会为所有触发器发送 MQTT 消息。子标签会将触发器名称添加到目标标签中。属性是可搜索的元数据,独立存储在追踪目标的元数据中。", "error": { "min": "必须至少选择一项动作。" } + }, + "friendly_name": { + "title": "友好名称", + "placeholder": "为此触发器命名或添加描述", + "description": "(可选)为触发器添加友好名称或描述。" } } }, @@ -824,6 +867,27 @@ "updateTriggerFailed": "更新触发器失败:{{errorMessage}}", "deleteTriggerFailed": "删除触发器失败:{{errorMessage}}" } + }, + "semanticSearch": { + "title": "语义搜索已关闭", + "desc": "必须启用语义搜索功能才能使用触发器。" + }, + "wizard": { + "title": "创建触发器", + "step1": { + "description": "配置触发器的基础设置。" + }, + "step2": { + "description": "设置触发此操作的内容。" + }, + "step3": { + "description": "配置此触发器的相似度阈值与执行动作。" + }, + "steps": { + "nameAndType": "名称与类型", + "configureData": "配置数据", + "thresholdAndActions": "阈值与动作" + } } }, "roles": { @@ -845,7 +909,7 @@ "createRole": "权限组 {{role}} 创建成功", "updateCameras": "已更新摄像头至 {{role}} 权限组", "deleteRole": "已删除 {{role}} 权限组", - "userRolesUpdated": "已将分配到此权限组的 {{count}} 位用户更新为 “成员”,该权限组可访问所有摄像头。" + "userRolesUpdated_other": "已将分配到此权限组的 {{count}} 位用户更新为 “成员”,该权限组可访问所有摄像头。" }, "error": { "createRoleFailed": "创建权限组失败:{{errorMessage}}", @@ -879,9 +943,364 @@ "roleExists": "该权限组名称已存在。" }, "cameras": { - "title": "摄像头" + "title": "摄像头", + "desc": "请选择该权限组能够访问的摄像头。至少需要选择一个摄像头。", + "required": "至少要选择一个摄像头。" } } } + }, + "cameraWizard": { + "title": "添加摄像头", + "description": "请按照以下步骤添加摄像头至 Frigate 中。", + "steps": { + "nameAndConnection": "名称与连接", + "streamConfiguration": "视频流配置", + "validationAndTesting": "验证与测试", + "probeOrSnapshot": "探测或快照" + }, + "save": { + "success": "已保存新摄像头 {{cameraName}}。", + "failure": "保存摄像头 {{cameraName}} 遇到了错误。" + }, + "testResultLabels": { + "resolution": "分辨率", + "video": "视频", + "audio": "音频", + "fps": "帧率" + }, + "commonErrors": { + "noUrl": "请提供正确的视频流地址", + "testFailed": "视频流测试失败:{{error}}" + }, + "step1": { + "description": "请输入你的摄像头信息,并选择是自动探测摄像头信息还是手动指定品牌。", + "cameraName": "摄像头名称", + "cameraNamePlaceholder": "例如:大门,后院等", + "host": "主机/IP地址", + "port": "端口号", + "username": "用户名", + "usernamePlaceholder": "可选", + "password": "密码", + "passwordPlaceholder": "可选", + "selectTransport": "选择传输协议", + "cameraBrand": "摄像头品牌", + "selectBrand": "选择摄像头品牌用于生成URL地址模板", + "customUrl": "自定义视频流地址", + "brandInformation": "品牌信息", + "brandUrlFormat": "对于采用RTSP URL格式的摄像头,其格式为:{{exampleUrl}}", + "customUrlPlaceholder": "rtsp://用户名:密码@主机或IP地址:端口/路径", + "testConnection": "测试连接", + "testSuccess": "连接测试通过!", + "testFailed": "连接测试失败。请检查输入是否正确并重试。", + "streamDetails": "视频流信息", + "warnings": { + "noSnapshot": "无法从配置的视频流中获取快照。" + }, + "errors": { + "brandOrCustomUrlRequired": "请选择摄像头品牌并配置主机/IP地址,或选择“其他”后手动配置视频流地址", + "nameRequired": "摄像头名称为必填项", + "nameLength": "摄像头名称要少于64个字符", + "invalidCharacters": "摄像头名称内有不允许使用的字符", + "nameExists": "该摄像头名称已存在", + "brands": { + "reolink-rtsp": "不建议使用萤石 RTSP 协议。建议在摄像头设置中启用 HTTP 协议,并重新运行摄像头添加向导。" + }, + "customUrlRtspRequired": "自定义URL必须以“rtsp://”开头;对于非 RTSP 协议的摄像头流,需手动添加至配置文件。" + }, + "docs": { + "reolink": "https://docs.frigate-cn.video/configuration/camera_specific.html#reolink-cameras" + }, + "testing": { + "probingMetadata": "正在获取摄像头基本数据……", + "fetchingSnapshot": "正在获取摄像头快照……" + }, + "connectionSettings": "连接设置", + "detectionMethod": "视频流检测方法", + "onvifPort": "ONVIF 端口", + "probeMode": "探测摄像头", + "manualMode": "手动选择", + "detectionMethodDescription": "如果摄像头支持 ONVIF 协议,将使用该协议探测摄像头,以自动获取摄像头视频流地址;若不支持,也可手动选择摄像头品牌来使用预设地址。如需输入自定义RTSP地址,请选择“手动选择”并选择“其他”选项。", + "onvifPortDescription": "对于支持ONVIF协议的摄像头,该端口通常为80或8080。", + "useDigestAuth": "使用摘要认证", + "useDigestAuthDescription": "为ONVIF协议启用HTTP摘要认证。部分摄像头可能需要专用的 ONVIF 用户名/密码,而非默认的admin账户。" + }, + "step2": { + "description": "将根据你选择的检测方式,将会自动查找摄像头可用流配置,或进行手动配置。", + "streamsTitle": "摄像头视频流", + "addStream": "添加视频流", + "addAnotherStream": "添加另一个视频流", + "streamTitle": "{{number}} 号视频流", + "streamUrl": "视频流地址", + "streamUrlPlaceholder": "rtsp://用户名:密码@主机或IP:端口/路径", + "url": "URL地址", + "resolution": "分辨率", + "selectResolution": "选择分辨率", + "quality": "质量", + "selectQuality": "选择质量", + "roles": "功能", + "roleLabels": { + "detect": "目标/物体检测", + "record": "录制", + "audio": "音频" + }, + "testStream": "测试连接", + "testSuccess": "连接测试通过!", + "testFailed": "连接测试失败,请检查输入项后重试。", + "testFailedTitle": "测试失败", + "connected": "已连接", + "notConnected": "未连接", + "featuresTitle": "特殊功能", + "go2rtc": "减少摄像头连接数", + "detectRoleWarning": "至少需要一个视频流分配\"detect\"功能才能继续。", + "rolesPopover": { + "title": "视频流功能", + "detect": "目标/物体的主数据流。", + "record": "根据配置设置保存视频流的片段。", + "audio": "用于音频的检测的输入流。" + }, + "featuresPopover": { + "title": "视频流特殊功能", + "description": "将使用go2rtc的转流功能来减少摄像头连接数。" + }, + "streamDetails": "视频流详情", + "probing": "正在检测摄像头中……", + "retry": "重试", + "testing": { + "probingMetadata": "正在查询摄像头参数……", + "fetchingSnapshot": "正在获取摄像头快照……" + }, + "probeFailed": "检测摄像头失败:{{error}}", + "probingDevice": "寻找设备中……", + "probeSuccessful": "检测成功", + "probeError": "检测遇到错误", + "probeNoSuccess": "检测未成功", + "deviceInfo": "设备信息", + "manufacturer": "制造商", + "model": "型号", + "firmware": "固件", + "profiles": "配置文件", + "ptzSupport": "支持 PTZ", + "autotrackingSupport": "支持自动追踪", + "presets": "预设配置", + "rtspCandidates": "RTSP候选地址", + "rtspCandidatesDescription": "通过摄像头自动检测发现了以下RTSP地址。测试连接以查看视频流参数。", + "noRtspCandidates": "未从摄像头检测到任何 RTSP 地址。可能是你的账号密码错误,或者摄像头不支持 ONVIF 协议,亦或是当前采用的 RTSP 地址获取方式无效。请返回上一步,尝试手动输入RTSP地址。", + "candidateStreamTitle": "候选{{number}}", + "useCandidate": "使用", + "uriCopy": "复制", + "uriCopied": "地址已复制到剪贴板", + "testConnection": "测试连接", + "toggleUriView": "点击切换完整 URI 显示", + "errors": { + "hostRequired": "主机/IP地址为必填" + } + }, + "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被锁定为低分辨率。多数大华的摄像头支持额外的子码流,但需要在摄像头设置中手动开启。如果可以,建议检查并使用这些子码流。" + }, + "hikvision": { + "substreamWarning": "子码流1被锁定为低分辨率。多数海康威视的摄像头支持额外的子码流,但需要在摄像头设置中手动开启。如果可以,建议检查并使用这些子码流。" + }, + "resolutionHigh": "使用 {{resolution}} 分辨率可能会导致占用更多的系统资源。", + "resolutionLow": "使用 {{resolution}} 分辨率可能过低,难以检测较小的物体。" + }, + "ffmpegModule": "使用视频流兼容模式", + "ffmpegModuleDescription": "如果多次尝试后视频流仍无法加载,可以尝试启用此功能。启用后,Frigate 将使用集成 go2rtc 的 ffmpeg 模块,这可能会提高与某些摄像头视频流的兼容性。", + "streamsTitle": "摄像头视频流", + "addStream": "添加视频流", + "addAnotherStream": "添加其他视频流", + "streamUrl": "视频流地址", + "streamUrlPlaceholder": "rtsp://用户名:密码@主机:端口/路径", + "selectStream": "选择一个视频流", + "searchCandidates": "搜索候选项……", + "noStreamFound": "没有找到视频流", + "url": "URL地址", + "resolution": "分辨率", + "selectResolution": "选择分辨率", + "quality": "质量", + "selectQuality": "选择质量", + "roleLabels": { + "detect": "目标检测", + "record": "录制", + "audio": "音频检测" + }, + "testStream": "测试连接", + "testSuccess": "视频流测试成功!", + "testFailed": "视频流测试失败", + "testFailedTitle": "测试失败", + "connected": "已连接", + "notConnected": "未连接", + "featuresTitle": "功能特性", + "go2rtc": "减少与摄像头的连接数", + "detectRoleWarning": "必须得有一个视频流设置了“检测”功能才能继续操作。", + "rolesPopover": { + "title": "视频流功能", + "detect": "用于目标检测的主码流。", + "record": "根据配置设置保存视频流片段。", + "audio": "用于音频检测的音视频流。" + }, + "featuresPopover": { + "title": "视频流功能特性", + "description": "使用 go2rtc 中继转流功能,减少与摄像头的网络连接数,提升效率。" + } + }, + "step4": { + "description": "将进行保存新摄像头配置前的最终验证与分析,请在保存前确保所有视频流均已连接。", + "validationTitle": "视频流验证", + "connectAllStreams": "连接所有视频流", + "reconnectionSuccess": "重新连接成功。", + "reconnectionPartial": "部分视频流重新连接失败。", + "streamUnavailable": "视频流预览不可用", + "reload": "重新加载", + "connecting": "连接中……", + "streamTitle": "视频流 {{number}}", + "valid": "通过", + "failed": "失败", + "notTested": "未测试", + "connectStream": "连接", + "connectingStream": "连接中", + "disconnectStream": "断开连接", + "estimatedBandwidth": "预估带宽", + "roles": "功能", + "ffmpegModule": "使用视频流兼容模式", + "ffmpegModuleDescription": "若多次尝试后仍无法加载视频流,可尝试启用此功能。启用后,Frigate 将通过 go2rtc 调用 ffmpeg 模块。这可能会提升与部分摄像头视频流的兼容性。", + "none": "无", + "error": "错误", + "streamValidated": "视频流 {{number}} 验证成功", + "streamValidationFailed": "视频流 {{number}} 验证失败", + "saveAndApply": "保存新摄像头", + "saveError": "配置无效,请检查您的设置。", + "issues": { + "title": "视频流验证", + "videoCodecGood": "视频编解码器为 {{codec}}。", + "audioCodecGood": "音频编解码器为 {{codec}}。", + "resolutionHigh": "使用 {{resolution}} 分辨率可能导致资源使用率增加。", + "resolutionLow": "{{resolution}} 分辨率可能过低,难以可靠检测小型目标或物体。", + "noAudioWarning": "检测到该视频流无音频信号,录制视频将没有声音。", + "audioCodecRecordError": "录制功能需要 AAC 音频编解码器以实现音频支持。", + "audioCodecRequired": "要实现音频检测功能,必须要有音频流。", + "restreamingWarning": "为录制流开启“减少与摄像头的连接数”可能会略微增加 CPU 使用率。", + "brands": { + "reolink-rtsp": "不建议使用 Reolink 的 RTSP 协议。请在摄像头后台设置中启用 HTTP协议,并重新启动向导。", + "reolink-http": "Reolink HTTP 视频流应该使用 FFmpeg 以获得更好的兼容性,为此视频流启用“使用流兼容模式”。" + }, + "dahua": { + "substreamWarning": "子码流1当前被锁定为低分辨率。多数大华、安讯士、EmpireTech品牌的摄像头都支持额外的子码流,这些子码流需要在摄像头设置中手动启用。如果你的设备支持,建议你检查并使用这些高分辨率子码流。" + }, + "hikvision": { + "substreamWarning": "子码流1当前被锁定为低分辨率。多数海康威视的摄像头都支持额外的子码流,这些子码流需要在摄像头设置中手动启用。如果你的设备支持,建议你检查并使用这些高分辨率子码流。" + } + } + } + }, + "cameraManagement": { + "title": "管理摄像头", + "addCamera": "添加新摄像头", + "editCamera": "编辑摄像头:", + "selectCamera": "选择摄像头", + "backToSettings": "返回摄像头设置", + "streams": { + "title": "开启或关闭摄像头", + "desc": "将临时禁用摄像头,直至 Frigate 重启。禁用摄像头将完全停止 Frigate 对该摄像头视频流的处理,届时检测、录制及调试功能均不可用。ffprobe获取。",
"fetching": "正在获取摄像头数据",
"stream": "视频流{{idx}}",
@@ -162,7 +175,8 @@
"reindexingEmbeddings": "正在重新索引嵌入(已完成 {{processed}}%)",
"detectIsSlow": "{{detect}} 运行缓慢({{speed}}毫秒)",
"detectIsVerySlow": "{{detect}} 运行非常缓慢({{speed}}毫秒)",
- "cameraIsOffline": "{{camera}} 已离线"
+ "cameraIsOffline": "{{camera}} 已离线",
+ "shmTooLow": "/dev/shm 的分配空间过低(当前 {{total}} MB),应至少增加到 {{min}} MB。"
},
"enrichments": {
"title": "增强功能",
@@ -178,7 +192,17 @@
"face_recognition": "人脸特征提取",
"plate_recognition": "车牌识别",
"yolov9_plate_detection_speed": "YOLOv9 车牌检测速度",
- "yolov9_plate_detection": "YOLOv9 车牌检测"
- }
+ "yolov9_plate_detection": "YOLOv9 车牌检测",
+ "review_description": "核查总结",
+ "review_description_speed": "核查总结速度",
+ "review_description_events_per_second": "核查总结",
+ "object_description": "目标描述",
+ "object_description_speed": "目标描述速度",
+ "object_description_events_per_second": "目标描述",
+ "classification": "分类 {{name}}",
+ "classification_speed": "{{name}} 的分类速度",
+ "classification_events_per_second": "{{name}} 的每秒分类速度"
+ },
+ "averageInf": "平均推理时间"
}
}
diff --git a/web/public/locales/zh-Hant/audio.json b/web/public/locales/zh-Hant/audio.json
index 78613a56e..9a458ce9c 100644
--- a/web/public/locales/zh-Hant/audio.json
+++ b/web/public/locales/zh-Hant/audio.json
@@ -65,5 +65,17 @@
"gargling": "漱口",
"stomach_rumble": "腸胃蠕動",
"burping": "打嗝",
- "hiccup": "打噎"
+ "hiccup": "打噎",
+ "fart": "放屁",
+ "hands": "手",
+ "finger_snapping": "彈手指聲",
+ "clapping": "拍手",
+ "heartbeat": "心跳聲",
+ "heart_murmur": "心臟雜音",
+ "cheering": "歡呼聲",
+ "applause": "掌聲",
+ "chatter": "嘈雜聲",
+ "crowd": "人群聲",
+ "children_playing": "兒童嬉鬧聲",
+ "pets": "寵物"
}
diff --git a/web/public/locales/zh-Hant/common.json b/web/public/locales/zh-Hant/common.json
index 41659ba91..17a60efaa 100644
--- a/web/public/locales/zh-Hant/common.json
+++ b/web/public/locales/zh-Hant/common.json
@@ -39,8 +39,8 @@
"24hour": "M 月 d 日 HH:mm:ss"
},
"formattedTimestamp2": {
- "12hour": "MM 月 dd 日 ah:mm:ss",
- "24hour": "MM 月 dd 日 HH:mm:ss"
+ "12hour": "MM/dd h:mm:ssa",
+ "24hour": "d MMM HH:mm:ss"
},
"formattedTimestampHourMinute": {
"12hour": "a h:mm",
@@ -64,9 +64,12 @@
},
"formattedTimestampMonthDay": "M 月 d 日",
"formattedTimestampFilename": {
- "12hour": "yy年MM月dd日 ah時mm分ss秒",
+ "12hour": "yy年MM月dd日 h時mm分ss秒",
"24hour": "yy年MM月dd日 HH時mm分ss秒"
- }
+ },
+ "inProgress": "處理中",
+ "invalidStartTime": "無效的起始時間",
+ "invalidEndTime": "無效的結束時間"
},
"unit": {
"speed": {
@@ -76,10 +79,23 @@
"length": {
"feet": "英尺",
"meters": "公尺"
+ },
+ "data": {
+ "kbps": "kB/s",
+ "mbps": "MB/s",
+ "gbps": "GB/s",
+ "kbph": "kB/小時",
+ "mbph": "MB/小時",
+ "gbph": "GB/小時"
}
},
"label": {
- "back": "返回"
+ "back": "返回",
+ "hide": "隱藏{{item}}",
+ "show": "顯示{{item}}",
+ "ID": "ID",
+ "none": "無",
+ "all": "全部"
},
"button": {
"apply": "套用",
@@ -89,8 +105,8 @@
"enable": "啟用",
"disabled": "已停用",
"disable": "停用",
- "save": "保存",
- "saving": "保存中…",
+ "save": "儲存",
+ "saving": "儲存中…",
"cancel": "取消",
"close": "關閉",
"copy": "複製",
@@ -116,7 +132,8 @@
"unselect": "取消選取",
"export": "匯出",
"deleteNow": "立即刪除",
- "next": "繼續"
+ "next": "繼續",
+ "continue": "繼續"
},
"menu": {
"system": "系統",
@@ -160,7 +177,15 @@
"ca": "Català (加泰隆尼亞文)",
"withSystem": {
"label": "使用系統語言設定"
- }
+ },
+ "ptBR": "Português brasileiro (巴西葡萄牙文)",
+ "sr": "Српски (塞爾維亞文)",
+ "sl": "Slovenščina (斯洛文尼亞文)",
+ "lt": "Lietuvių (立陶宛文)",
+ "bg": "Български (保加利亞文)",
+ "gl": "Galego (加利西亞文)",
+ "id": "Bahasa Indonesia (印尼文)",
+ "ur": "اردو (烏爾都文)"
},
"appearance": "外觀",
"darkMode": {
@@ -207,7 +232,8 @@
"anonymous": "匿名",
"logout": "登出",
"setPassword": "設定密碼"
- }
+ },
+ "classification": "標籤分類"
},
"toast": {
"copyUrlToClipboard": "已複製連結至剪貼簿。",
@@ -248,5 +274,17 @@
"desc": "找不到頁面"
},
"selectItem": "選擇 {{item}}",
- "readTheDocumentation": "閱讀文件"
+ "readTheDocumentation": "閱讀文件",
+ "list": {
+ "two": "{{0}}和{{1}}",
+ "many": "{{items}}和{{last}}",
+ "separatorWithSpace": ", "
+ },
+ "field": {
+ "optional": "可選的",
+ "internalID": "在Frigate 設定檔和資料庫使用的內部ID"
+ },
+ "information": {
+ "pixels": "{{area}}px"
+ }
}
diff --git a/web/public/locales/zh-Hant/components/auth.json b/web/public/locales/zh-Hant/components/auth.json
index 34b97ef78..fbc70c4d4 100644
--- a/web/public/locales/zh-Hant/components/auth.json
+++ b/web/public/locales/zh-Hant/components/auth.json
@@ -10,6 +10,7 @@
"rateLimit": "超過次數限制,請稍後再試。",
"loginFailed": "登入失敗",
"unknownError": "未知錯誤,請檢查日誌。"
- }
+ },
+ "firstTimeLogin": "首次嘗試登入嗎?請從 Frigate 的日誌中查找產生的登入密碼等相關資訊。"
}
}
diff --git a/web/public/locales/zh-Hant/components/dialog.json b/web/public/locales/zh-Hant/components/dialog.json
index a29b487e1..b28ccca48 100644
--- a/web/public/locales/zh-Hant/components/dialog.json
+++ b/web/public/locales/zh-Hant/components/dialog.json
@@ -51,12 +51,13 @@
"export": "匯出",
"selectOrExport": "選擇或匯出",
"toast": {
- "success": "成功開始匯出。請至 /exports 資料夾查看匯出資料。",
+ "success": "成功開始匯出。至 /exports 頁查看匯出資料。",
"error": {
"failed": "匯出失敗:{{error}}",
"endTimeMustAfterStartTime": "結束時間必須要在開始時間之後",
"noVaildTimeSelected": "沒有選取有效的時間範圍"
- }
+ },
+ "view": "查看"
},
"fromTimeline": {
"saveExport": "保存匯出資料",
@@ -80,7 +81,7 @@
},
"search": {
"saveSearch": {
- "label": "保存搜尋",
+ "label": "儲存搜尋",
"desc": "替此保存的搜尋命名。",
"placeholder": "請輸入搜尋的名稱",
"overwrite": "{{searchName}} 已存在。保存將會覆蓋現有資料。",
@@ -106,7 +107,16 @@
"button": {
"export": "匯出",
"markAsReviewed": "標記為已審核",
- "deleteNow": "立即刪除"
+ "deleteNow": "立即刪除",
+ "markAsUnreviewed": "標記為未審核"
}
+ },
+ "imagePicker": {
+ "selectImage": "選取追蹤物件預覽圖",
+ "unknownLabel": "已儲存觸發圖片",
+ "search": {
+ "placeholder": "以標籤或子標籤搜尋..."
+ },
+ "noImages": "未找到此攝影機的縮圖"
}
}
diff --git a/web/public/locales/zh-Hant/components/filter.json b/web/public/locales/zh-Hant/components/filter.json
index 29ccaa5c2..1cbef2fd3 100644
--- a/web/public/locales/zh-Hant/components/filter.json
+++ b/web/public/locales/zh-Hant/components/filter.json
@@ -121,7 +121,9 @@
"loading": "讀取已辨識車牌中…",
"placeholder": "輸入以搜尋車牌…",
"noLicensePlatesFound": "未找到車牌。",
- "selectPlatesFromList": "從列表中選擇一個或多個車牌。"
+ "selectPlatesFromList": "從列表中選擇一個或多個車牌。",
+ "selectAll": "全選",
+ "clearAll": "全部清除"
},
"classes": {
"label": "類別",
@@ -130,5 +132,9 @@
},
"count_one": "{{count}} 個類別",
"count_other": "{{count}} 個類別"
+ },
+ "attributes": {
+ "label": "分類屬性",
+ "all": "所有屬性"
}
}
diff --git a/web/public/locales/zh-Hant/components/input.json b/web/public/locales/zh-Hant/components/input.json
index df3ed93c0..ed7eee77c 100644
--- a/web/public/locales/zh-Hant/components/input.json
+++ b/web/public/locales/zh-Hant/components/input.json
@@ -3,7 +3,7 @@
"downloadVideo": {
"label": "下載影片",
"toast": {
- "success": "你的審查影片已開始下載。"
+ "success": "你的審查項目影片已開始下載。"
}
}
}
diff --git a/web/public/locales/zh-Hant/views/classificationModel.json b/web/public/locales/zh-Hant/views/classificationModel.json
new file mode 100644
index 000000000..32fce2423
--- /dev/null
+++ b/web/public/locales/zh-Hant/views/classificationModel.json
@@ -0,0 +1,104 @@
+{
+ "toast": {
+ "success": {
+ "deletedImage": "已刪除的圖片",
+ "deletedModel_other": "已成功刪除 {{count}} 個模型",
+ "deletedCategory": "已刪除分類",
+ "categorizedImage": "成功分類圖片",
+ "trainedModel": "訓練模型成功。",
+ "trainingModel": "已開始訓練模型。",
+ "updatedModel": "已更新模型配置",
+ "renamedCategory": "成功修改分類名稱為{{name}}"
+ },
+ "error": {
+ "deleteImageFailed": "刪除失敗:{{errorMessage}}",
+ "deleteCategoryFailed": "刪除分類標籤失敗: {{errorMessage}}",
+ "deleteModelFailed": "刪除模型失敗: {{errorMessage}}",
+ "categorizeFailed": "圖片分類失敗: {{errorMessage}}",
+ "trainingFailed": "模型訓練失敗。請至Frigate 日誌查看詳情。",
+ "trainingFailedToStart": "模型訓練啟動失敗: {{errorMessage}}",
+ "updateModelFailed": "模型更新失敗: {{errorMessage}}",
+ "renameCategoryFailed": "類別重新命名失敗: {{errorMessage}}"
+ }
+ },
+ "documentTitle": "分類模型",
+ "details": {
+ "scoreInfo": "分數表示該目標所有偵測結果的平均分類置信度。",
+ "none": "沒有",
+ "unknown": "未知"
+ },
+ "button": {
+ "deleteClassificationAttempts": "刪除分類圖片",
+ "renameCategory": "重新命名分類",
+ "deleteCategory": "刪除分類",
+ "deleteImages": "刪除圖片",
+ "trainModel": "訓練模型",
+ "addClassification": "添加分類",
+ "deleteModels": "刪除模型",
+ "editModel": "編輯模型"
+ },
+ "tooltip": {
+ "trainingInProgress": "模型正在訓練中",
+ "noNewImages": "沒有新的圖片可用於訓練。請先對數據集中的更多圖片進行分類。",
+ "noChanges": "自上次訓練以來,數據集未作任何更改。",
+ "modelNotReady": "模型尚未準備好進行訓練"
+ },
+ "deleteCategory": {
+ "title": "刪除類別",
+ "desc": "你確定要刪除類別{{name}}嗎? 這將刪除所有有關的圖片並需要重新訓練模型。",
+ "minClassesTitle": "無法刪除此類別",
+ "minClassesDesc": "分類模型必須至少擁有2個類別,新增一個新的類別已刪除這個。"
+ },
+ "deleteModel": {
+ "title": "刪除分類模型",
+ "single": "你確定要刪除{{name}}嗎? 這將永久刪除包含圖片和訓練資料在內的所有相關資料。這個操作無法被復原。",
+ "desc_other": "你確定要刪除{{count}}個模型? 這將永久刪除包含圖片和訓練資料在內的所有相關資料。這個操作無法被復原。"
+ },
+ "edit": {
+ "title": "編輯分類模型",
+ "descriptionState": "編輯這個狀態分類模型的類別,變更將需要重新訓練模型。",
+ "descriptionObject": "編輯這個物件分類模型的物件種類與分類種類。",
+ "stateClassesInfo": "注意: 變更狀態類別後需要以更新後的類別重新訓練模型。"
+ },
+ "deleteDatasetImages": {
+ "title": "刪除圖片資料集合",
+ "desc_other": "你確定要從{{dataset}}中刪除{{count}}個圖片嗎? 這個操作將無法被復原且將需要重新訓練模型。"
+ },
+ "deleteTrainImages": {
+ "title": "刪除訓練圖片",
+ "desc_other": "你確定要刪除{{count}}個圖片? 這個操作無法被復原。"
+ },
+ "renameCategory": {
+ "title": "重新命名類別",
+ "desc": "輸入 {{name}} 的新名稱。您需要在名稱變更後重新訓練模型以套用變更。"
+ },
+ "description": {
+ "invalidName": "無效的名稱。名稱只能包涵英數字、空格、撇(')、底線(_)及連字號(-)。"
+ },
+ "train": {
+ "title": "最近的分類紀錄",
+ "titleShort": "最近",
+ "aria": "選取最近的分類紀錄"
+ },
+ "categories": "類別",
+ "createCategory": {
+ "new": "建立新的類別"
+ },
+ "wizard": {
+ "step1": {
+ "objectLabel": "物件標籤",
+ "objectLabelPlaceholder": "請選擇物件類型...",
+ "classificationType": "分類類型",
+ "classificationTypeTip": "學習更多有關分類類型",
+ "description": "狀態模型監視固定攝像頭區域的變化(例如:開關門)。物件模型為檢測到的物件(例如:已知動物、送貨員等等)添加分類。",
+ "name": "名稱",
+ "namePlaceholder": "請輸入模型名稱...",
+ "type": "類別",
+ "typeState": "狀態",
+ "typeObject": "物件"
+ },
+ "steps": {
+ "chooseExamples": "選擇範本"
+ }
+ }
+}
diff --git a/web/public/locales/zh-Hant/views/events.json b/web/public/locales/zh-Hant/views/events.json
index 8571ea39f..c8883f420 100644
--- a/web/public/locales/zh-Hant/views/events.json
+++ b/web/public/locales/zh-Hant/views/events.json
@@ -8,7 +8,11 @@
"empty": {
"motion": "未找到移動資料",
"alert": "沒有警告需要審核",
- "detection": "沒有偵測到的內容需要審核"
+ "detection": "沒有偵測到的內容需要審核",
+ "recordingsDisabled": {
+ "title": "必須啟用錄製功能",
+ "description": "僅當該攝影機啟用錄製功能時,才能為該攝影機建立審查項目。"
+ }
},
"timeline": "時間線",
"timeline.aria": "選擇時間線",
@@ -36,5 +40,27 @@
"camera": "鏡頭",
"detected": "已偵測",
"suspiciousActivity": "可疑的活動",
- "threateningActivity": "有威脅性的活動"
+ "threateningActivity": "有威脅性的活動",
+ "zoomIn": "放大",
+ "zoomOut": "縮小",
+ "detail": {
+ "label": "詳細資訊",
+ "noDataFound": "沒有可供檢視的詳細資訊",
+ "aria": "開關詳細資訊視圖",
+ "trackedObject_one": "{{count}} 個物件",
+ "trackedObject_other": "{{count}} 個物件",
+ "noObjectDetailData": "沒有可用物件細節。",
+ "settings": "細節視圖設定",
+ "alwaysExpandActive": {
+ "title": "總是展開",
+ "desc": "在可用時總是展開當前物件的詳細資訊。"
+ }
+ },
+ "objectTrack": {
+ "trackedPoint": "追蹤點",
+ "clickToSeek": "點擊從此時間點尋找"
+ },
+ "normalActivity": "正常",
+ "needsReview": "待審核",
+ "securityConcern": "安全隱憂"
}
diff --git a/web/public/locales/zh-Hant/views/explore.json b/web/public/locales/zh-Hant/views/explore.json
index 6997b08dd..598700963 100644
--- a/web/public/locales/zh-Hant/views/explore.json
+++ b/web/public/locales/zh-Hant/views/explore.json
@@ -47,12 +47,16 @@
"success": {
"regenerate": "已從 {{provider}} 請求新的說明。根據提供者的速度,生成新的說明可能會需要一段時間。",
"updatedSublabel": "成功更新子標籤。",
- "updatedLPR": "成功更新車牌。"
+ "updatedLPR": "成功更新車牌。",
+ "updatedAttributes": "已成功更新屬性。",
+ "audioTranscription": "已成功送出音訊轉錄請求。轉錄完成所需時間會依您的 Frigate 伺服器速度而定,可能需要一段時間。"
},
"error": {
"regenerate": "請求 {{provider}} 生成新的說明失敗:{{errorMessage}}",
"updatedSublabelFailed": "更新子標籤失敗:{{errorMessage}}",
- "updatedLPRFailed": "更新車牌失敗:{{errorMessage}}"
+ "updatedLPRFailed": "更新車牌失敗:{{errorMessage}}",
+ "updatedAttributesFailed": "更新屬性失敗:{{errorMessage}}",
+ "audioTranscription": "請求音訊轉錄失敗:{{errorMessage}}"
}
}
},
@@ -97,6 +101,17 @@
"tips": {
"descriptionSaved": "成功保存說明",
"saveDescriptionFailed": "更新說明失敗:{{errorMessage}}"
+ },
+ "editAttributes": {
+ "title": "編輯屬性",
+ "desc": "為此 {{label}} 選擇分類屬性"
+ },
+ "score": {
+ "label": "分數"
+ },
+ "attributes": "分類屬性",
+ "title": {
+ "label": "標題"
}
},
"trackedObjectDetails": "追蹤物件詳情",
@@ -104,7 +119,9 @@
"details": "詳情",
"snapshot": "截圖",
"video": "影片",
- "object_lifecycle": "物件生命週期"
+ "object_lifecycle": "物件生命週期",
+ "thumbnail": "預覽圖",
+ "tracking_details": "追蹤詳情"
},
"objectLifecycle": {
"title": "物件生命週期",
@@ -182,12 +199,34 @@
},
"deleteTrackedObject": {
"label": "刪除此追蹤物件"
+ },
+ "hideObjectDetails": {
+ "label": "隱藏物件路徑"
+ },
+ "showObjectDetails": {
+ "label": "顯示物件路徑"
+ },
+ "addTrigger": {
+ "label": "新增觸發器",
+ "aria": "為此追蹤物件新增觸發器"
+ },
+ "audioTranscription": {
+ "label": "轉錄",
+ "aria": "請求音訊轉錄"
+ },
+ "downloadCleanSnapshot": {
+ "label": "下載乾淨的快照",
+ "aria": "下載乾淨的快照"
+ },
+ "viewTrackingDetails": {
+ "label": "檢視追蹤詳細資訊",
+ "aria": "顯示追蹤詳細資訊"
}
},
"dialog": {
"confirmDelete": {
"title": "確認刪除",
- "desc": "刪除此追蹤物件將移除截圖、所有已保存的嵌入,以及所有相關的物件生命週期紀錄。歷史記錄中的錄影不會被刪除。+ {t("form.firstTimeLogin")} +
+ + {t("readTheDocumentation", { ns: "common" })} +