Compare commits

...

14 Commits

Author SHA1 Message Date
Weblate (bot)
156d49f445
Merge 7ddf88f823 into 0a8f499640 2026-01-18 13:37:02 +00:00
Hosted Weblate
7ddf88f823
Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (215 of 215 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: OverTheHillsAndFarAway <prosjektx@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/nb_NO/
Translation: Frigate NVR/common
2026-01-18 14:36:47 +01:00
Hosted Weblate
c9719d32d2
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (43 of 43 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: wolfish1 <fish20488@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/zh_Hant/
Translation: Frigate NVR/views-events
2026-01-18 14:36:46 +01:00
Hosted Weblate
4e71d88e53
Translated using Weblate (Uzbek)
Currently translated at 1.3% (1 of 74 strings)

Translated using Weblate (Uzbek)

Currently translated at 1.8% (1 of 55 strings)

Translated using Weblate (Uzbek)

Currently translated at 0.1% (1 of 501 strings)

Translated using Weblate (Uzbek)

Currently translated at 50.0% (1 of 2 strings)

Translated using Weblate (Uzbek)

Currently translated at 16.6% (1 of 6 strings)

Translated using Weblate (Uzbek)

Currently translated at 0.8% (1 of 118 strings)

Translated using Weblate (Uzbek)

Currently translated at 0.4% (1 of 215 strings)

Translated using Weblate (Uzbek)

Currently translated at 4.0% (1 of 25 strings)

Translated using Weblate (Uzbek)

Currently translated at 0.7% (1 of 136 strings)

Translated using Weblate (Uzbek)

Currently translated at 10.0% (1 of 10 strings)

Added translation using Weblate (Uzbek)

Added translation using Weblate (Uzbek)

Added translation using Weblate (Uzbek)

Added translation using Weblate (Uzbek)

Added translation using Weblate (Uzbek)

Added translation using Weblate (Uzbek)

Added translation using Weblate (Uzbek)

Added translation using Weblate (Uzbek)

Added translation using Weblate (Uzbek)

Added translation using Weblate (Uzbek)

Added translation using Weblate (Uzbek)

Added translation using Weblate (Uzbek)

Added translation using Weblate (Uzbek)

Added translation using Weblate (Uzbek)

Added translation using Weblate (Uzbek)

Added translation using Weblate (Uzbek)

Added translation using Weblate (Uzbek)

Added translation using Weblate (Uzbek)

Added translation using Weblate (Uzbek)

Added translation using Weblate (Uzbek)

Added translation using Weblate (Uzbek)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Shohruh Ismoilov <shohruh.genius@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/uz/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/uz/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-auth/uz/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/uz/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/uz/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-input/uz/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-player/uz/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/objects/uz/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/uz/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-recording/uz/
Translation: Frigate NVR/audio
Translation: Frigate NVR/common
Translation: Frigate NVR/components-auth
Translation: Frigate NVR/components-dialog
Translation: Frigate NVR/components-filter
Translation: Frigate NVR/components-input
Translation: Frigate NVR/components-player
Translation: Frigate NVR/objects
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-recording
2026-01-18 14:36:45 +01:00
Hosted Weblate
c3e9be2b0e
Translated using Weblate (Serbian)
Currently translated at 94.5% (52 of 55 strings)

Translated using Weblate (Serbian)

Currently translated at 100.0% (49 of 49 strings)

Translated using Weblate (Serbian)

Currently translated at 7.6% (50 of 654 strings)

Translated using Weblate (Serbian)

Currently translated at 55.4% (51 of 92 strings)

Translated using Weblate (Serbian)

Currently translated at 44.0% (52 of 118 strings)

Translated using Weblate (Serbian)

Currently translated at 37.5% (51 of 136 strings)

Translated using Weblate (Serbian)

Currently translated at 18.6% (40 of 215 strings)

Translated using Weblate (Serbian)

Currently translated at 12.9% (65 of 501 strings)

Translated using Weblate (Serbian)

Currently translated at 36.0% (49 of 136 strings)

Translated using Weblate (Serbian)

Currently translated at 100.0% (46 of 46 strings)

Translated using Weblate (Serbian)

Currently translated at 96.2% (51 of 53 strings)

Translated using Weblate (Serbian)

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Serbian)

Currently translated at 42.6% (52 of 122 strings)

Translated using Weblate (Serbian)

Currently translated at 31.9% (39 of 122 strings)

Translated using Weblate (Serbian)

Currently translated at 16.2% (35 of 215 strings)

Translated using Weblate (Serbian)

Currently translated at 10.3% (52 of 501 strings)

Translated using Weblate (Serbian)

Currently translated at 71.6% (38 of 53 strings)

Translated using Weblate (Serbian)

Currently translated at 42.3% (39 of 92 strings)

Translated using Weblate (Serbian)

Currently translated at 27.9% (38 of 136 strings)

Translated using Weblate (Serbian)

Currently translated at 32.2% (38 of 118 strings)

Translated using Weblate (Serbian)

Currently translated at 84.7% (39 of 46 strings)

Translated using Weblate (Serbian)

Currently translated at 70.9% (39 of 55 strings)

Translated using Weblate (Serbian)

Currently translated at 90.6% (39 of 43 strings)

Translated using Weblate (Serbian)

Currently translated at 28.6% (39 of 136 strings)

Translated using Weblate (Serbian)

Currently translated at 79.5% (39 of 49 strings)

Translated using Weblate (Serbian)

Currently translated at 5.5% (36 of 654 strings)

Translated using Weblate (Serbian)

Currently translated at 14.8% (32 of 215 strings)

Translated using Weblate (Serbian)

Currently translated at 100.0% (10 of 10 strings)

Translated using Weblate (Serbian)

Currently translated at 56.6% (30 of 53 strings)

Translated using Weblate (Serbian)

Currently translated at 72.0% (31 of 43 strings)

Translated using Weblate (Serbian)

Currently translated at 22.7% (31 of 136 strings)

Translated using Weblate (Serbian)

Currently translated at 100.0% (74 of 74 strings)

Translated using Weblate (Serbian)

Currently translated at 67.3% (31 of 46 strings)

Translated using Weblate (Serbian)

Currently translated at 25.4% (31 of 122 strings)

Translated using Weblate (Serbian)

Currently translated at 100.0% (13 of 13 strings)

Translated using Weblate (Serbian)

Currently translated at 100.0% (10 of 10 strings)

Translated using Weblate (Serbian)

Currently translated at 56.3% (31 of 55 strings)

Translated using Weblate (Serbian)

Currently translated at 100.0% (25 of 25 strings)

Translated using Weblate (Serbian)

Currently translated at 8.5% (43 of 501 strings)

Translated using Weblate (Serbian)

Currently translated at 63.2% (31 of 49 strings)

Translated using Weblate (Serbian)

Currently translated at 32.6% (30 of 92 strings)

Translated using Weblate (Serbian)

Currently translated at 26.2% (31 of 118 strings)

Translated using Weblate (Serbian)

Currently translated at 22.0% (30 of 136 strings)

Translated using Weblate (Serbian)

Currently translated at 4.5% (30 of 654 strings)

Co-authored-by: Aleksandar Jevremovic <aleksandar@jevremovic.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-auth/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-camera/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-player/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/objects/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-configeditor/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-exports/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-search/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/sr/
Translation: Frigate NVR/audio
Translation: Frigate NVR/common
Translation: Frigate NVR/components-auth
Translation: Frigate NVR/components-camera
Translation: Frigate NVR/components-dialog
Translation: Frigate NVR/components-filter
Translation: Frigate NVR/components-player
Translation: Frigate NVR/objects
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-configeditor
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-exports
Translation: Frigate NVR/views-facelibrary
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-search
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2026-01-18 14:36:44 +01:00
Hosted Weblate
035376f04f
Translated using Weblate (Finnish)
Currently translated at 76.9% (10 of 13 strings)

Translated using Weblate (Finnish)

Currently translated at 32.8% (215 of 654 strings)

Translated using Weblate (Finnish)

Currently translated at 4.0% (5 of 122 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Niko Järvinen <nbjarvinen@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/fi/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-exports/fi/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/fi/
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-exports
Translation: Frigate NVR/views-settings
2026-01-18 14:36:43 +01:00
Hosted Weblate
891f8e21f0
Translated using Weblate (Dutch)
Currently translated at 100.0% (122 of 122 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Marijn <168113859+Marijn0@users.noreply.github.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/nl/
Translation: Frigate NVR/views-classificationmodel
2026-01-18 14:36:42 +01:00
Hosted Weblate
f67f09dbec
Translated using Weblate (Indonesian)
Currently translated at 13.9% (17 of 122 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: ariska <ariska@databisnis.id>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/id/
Translation: Frigate NVR/views-classificationmodel
2026-01-18 14:36:41 +01:00
Hosted Weblate
2c0dddba1d
Translated using Weblate (Polish)
Currently translated at 100.0% (215 of 215 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Mateusz Kulis <kulis.matis@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/pl/
Translation: Frigate NVR/common
2026-01-18 14:36:40 +01:00
Hosted Weblate
203fe7c871
Translated using Weblate (Hungarian)
Currently translated at 20.4% (25 of 122 strings)

Translated using Weblate (Hungarian)

Currently translated at 88.9% (121 of 136 strings)

Translated using Weblate (Hungarian)

Currently translated at 85.4% (428 of 501 strings)

Translated using Weblate (Hungarian)

Currently translated at 93.9% (202 of 215 strings)

Translated using Weblate (Hungarian)

Currently translated at 68.3% (93 of 136 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Peter Bartfai <pbartfai@stardust.hu>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/hu/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/hu/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/hu/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/hu/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/hu/
Translation: Frigate NVR/audio
Translation: Frigate NVR/common
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-system
2026-01-18 14:36:40 +01:00
Hosted Weblate
b1d8ffdffc
Translated using Weblate (Portuguese)
Currently translated at 90.5% (48 of 53 strings)

Translated using Weblate (Portuguese)

Currently translated at 76.9% (10 of 13 strings)

Translated using Weblate (Portuguese)

Currently translated at 28.6% (35 of 122 strings)

Co-authored-by: Carlos Santos <c.santos00@hotmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/pt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-exports/pt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/pt/
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-exports
Translation: Frigate NVR/views-facelibrary
2026-01-18 14:36:39 +01:00
Hosted Weblate
e1bbb9ed21
Translated using Weblate (Czech)
Currently translated at 100.0% (53 of 53 strings)

Translated using Weblate (Czech)

Currently translated at 93.4% (86 of 92 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Czech)

Currently translated at 96.3% (53 of 55 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (74 of 74 strings)

Translated using Weblate (Czech)

Currently translated at 64.9% (425 of 654 strings)

Translated using Weblate (Czech)

Currently translated at 74.2% (101 of 136 strings)

Translated using Weblate (Czech)

Currently translated at 32.7% (40 of 122 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Martin Brož <code@martin-broz.cz>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/cs/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/cs/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/cs/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/cs/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/cs/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/cs/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/cs/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/cs/
Translation: Frigate NVR/components-dialog
Translation: Frigate NVR/components-filter
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-facelibrary
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-settings
2026-01-18 14:36:38 +01:00
Hosted Weblate
c90ece33cd
Translated using Weblate (Portuguese (Brazil))
Currently translated at 96.3% (53 of 55 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 68.6% (449 of 654 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 78.6% (107 of 136 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 43.4% (53 of 122 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (53 of 53 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 77.9% (106 of 136 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 96.7% (89 of 92 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 40.9% (50 of 122 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: cvroque <carlos.vroque@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/pt_BR/
Translation: Frigate NVR/components-dialog
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-facelibrary
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-settings
2026-01-18 14:36:37 +01:00
Josh Hawkins
0a8f499640
Miscellaneous fixes (0.17 beta) (#21683)
Some checks failed
CI / AMD64 Build (push) Has been cancelled
CI / ARM Build (push) Has been cancelled
CI / Jetson Jetpack 6 (push) Has been cancelled
CI / AMD64 Extra Build (push) Has been cancelled
CI / ARM Extra Build (push) Has been cancelled
CI / Synaptics Build (push) Has been cancelled
CI / Assemble and push default build (push) Has been cancelled
* misc triggers tweaks

i18n fixes
fix toaster color
fix clicking on labels selecting incorrect checkbox

* update copilot instructions

* lpr docs tweaks

* add retry params to gemini

* i18n fix

* ensure users only see recognized plates from accessible cameras in explore

* ensure all zone filters are converted to pixels

zone-level filters were never converted from percentage area to pixels. RuntimeFilterConfig was only applied to filters at the camera level, not zone.filters.

Fixes https://github.com/blakeblackshear/frigate/discussions/21694

* add test for percentage based zone filters

* use export id for key instead of name

* update gemini docs
2026-01-18 06:36:27 -07:00
81 changed files with 1576 additions and 135 deletions

View File

@ -1,2 +1,3 @@
Never write strings in the frontend directly, always write to and reference the relevant translations file.
Always conform new and refactored code to the existing coding style in the project.
- For Frigate NVR, never write strings in the frontend directly. Since the project uses `react-i18next`, use `t()` and write the English string in the relevant translations file in `web/public/locales/en`.
- Always conform new and refactored code to the existing coding style in the project.
- Always have a way to test your work and confirm your changes. When running backend tests, use `python3 -u -m unittest`.

View File

@ -66,8 +66,6 @@ Some models are labeled as **hybrid** (capable of both thinking and instruct tas
**Recommendation:**
Always select the `-instruct` or documented instruct/tagged variant of any model you use in your Frigate configuration. If in doubt, refer to your model providers documentation or model library for guidance on the correct model variant to use.
### Supported Models
You must use a vision capable model with Frigate. Current model variants can be found [in their model library](https://ollama.com/search?c=vision). Note that Frigate will not automatically download the model you specify in your config, you must download the model to your local instance of Ollama first i.e. by running `ollama pull qwen3-vl:2b-instruct` on your Ollama server/Docker container. Note that the model specified in Frigate's config must match the downloaded model tag.
@ -93,7 +91,7 @@ genai:
## Google Gemini
Google Gemini has a free tier allowing [15 queries per minute](https://ai.google.dev/pricing) to the API, which is more than sufficient for standard Frigate usage.
Google Gemini has a [free tier](https://ai.google.dev/pricing) for the API, however the limits may not be sufficient for standard Frigate usage. Choose a plan appropriate for your installation.
### Supported Models
@ -114,7 +112,7 @@ To start using Gemini, you must first get an API key from [Google AI Studio](htt
genai:
provider: gemini
api_key: "{FRIGATE_GEMINI_API_KEY}"
model: gemini-2.0-flash
model: gemini-2.5-flash
```
:::note

View File

@ -68,8 +68,8 @@ Fine-tune the LPR feature using these optional parameters at the global level of
- Default: `1000` pixels. Note: this is intentionally set very low as it is an _area_ measurement (length x width). For reference, 1000 pixels represents a ~32x32 pixel square in your camera image.
- Depending on the resolution of your camera's `detect` stream, you can increase this value to ignore small or distant plates.
- **`device`**: Device to use to run license plate detection _and_ recognition models.
- Default: `CPU`
- This can be `CPU`, `GPU`, or the GPU's device number. For users without a model that detects license plates natively, using a GPU may increase performance of the YOLOv9 license plate detector model. See the [Hardware Accelerated Enrichments](/configuration/hardware_acceleration_enrichments.md) documentation. However, for users who run a model that detects `license_plate` natively, there is little to no performance gain reported with running LPR on GPU compared to the CPU.
- Default: `None`
- This is auto-selected by Frigate and can be `CPU`, `GPU`, or the GPU's device number. For users without a model that detects license plates natively, using a GPU may increase performance of the YOLOv9 license plate detector model. See the [Hardware Accelerated Enrichments](/configuration/hardware_acceleration_enrichments.md) documentation. However, for users who run a model that detects `license_plate` natively, there is little to no performance gain reported with running LPR on GPU compared to the CPU.
- **`model_size`**: The size of the model used to identify regions of text on plates.
- Default: `small`
- This can be `small` or `large`.
@ -432,6 +432,6 @@ If you are using a model that natively detects `license_plate`, add an _object m
If you are not using a model that natively detects `license_plate` or you are using dedicated LPR camera mode, only a _motion mask_ over your text is required.
### I see "Error running ... model" in my logs. How can I fix this?
### I see "Error running ... model" in my logs, or my inference time is very high. How can I fix this?
This usually happens when your GPU is unable to compile or use one of the LPR models. Set your `device` to `CPU` and try again. GPU acceleration only provides a slight performance increase, and the models are lightweight enough to run without issue on most CPUs.

View File

@ -23,7 +23,12 @@ from markupsafe import escape
from peewee import SQL, fn, operator
from pydantic import ValidationError
from frigate.api.auth import allow_any_authenticated, allow_public, require_role
from frigate.api.auth import (
allow_any_authenticated,
allow_public,
get_allowed_cameras_for_filter,
require_role,
)
from frigate.api.defs.query.app_query_parameters import AppTimelineHourlyQueryParameters
from frigate.api.defs.request.app_body import AppConfigSetBody
from frigate.api.defs.tags import Tags
@ -687,13 +692,19 @@ def plusModels(request: Request, filterByCurrentModelDetector: bool = False):
@router.get(
"/recognized_license_plates", dependencies=[Depends(allow_any_authenticated())]
)
def get_recognized_license_plates(split_joined: Optional[int] = None):
def get_recognized_license_plates(
split_joined: Optional[int] = None,
allowed_cameras: List[str] = Depends(get_allowed_cameras_for_filter),
):
try:
query = (
Event.select(
SQL("json_extract(data, '$.recognized_license_plate') AS plate")
)
.where(SQL("json_extract(data, '$.recognized_license_plate') IS NOT NULL"))
.where(
(SQL("json_extract(data, '$.recognized_license_plate') IS NOT NULL"))
& (Event.camera << allowed_cameras)
)
.distinct()
)
recognized_license_plates = [row[0] for row in query.tuples()]

View File

@ -662,6 +662,13 @@ class FrigateConfig(FrigateBaseModel):
# generate zone contours
if len(camera_config.zones) > 0:
for zone in camera_config.zones.values():
if zone.filters:
for object_name, filter_config in zone.filters.items():
zone.filters[object_name] = RuntimeFilterConfig(
frame_shape=camera_config.frame_shape,
**filter_config.model_dump(exclude_unset=True),
)
zone.generate_contour(camera_config.frame_shape)
# Set live view stream if none is set

View File

@ -24,6 +24,14 @@ class GeminiClient(GenAIClient):
http_options_dict = {
"api_version": "v1",
"timeout": int(self.timeout * 1000), # requires milliseconds
"retry_options": types.HttpRetryOptions(
attempts=3,
initial_delay=1.0,
max_delay=60.0,
exp_base=2.0,
jitter=1.0,
http_status_codes=[429, 500, 502, 503, 504],
),
}
if isinstance(self.genai_config.provider_options, dict):

View File

@ -632,6 +632,49 @@ class TestConfig(unittest.TestCase):
)
assert frigate_config.cameras["back"].zones["test"].color != (0, 0, 0)
def test_zone_filter_area_percent_converts_to_pixels(self):
config = {
"mqtt": {"host": "mqtt"},
"record": {
"alerts": {
"retain": {
"days": 20,
}
}
},
"cameras": {
"back": {
"ffmpeg": {
"inputs": [
{"path": "rtsp://10.0.0.1:554/video", "roles": ["detect"]}
]
},
"detect": {
"height": 1080,
"width": 1920,
"fps": 5,
},
"zones": {
"notification": {
"coordinates": "0.03,1,0.025,0,0.626,0,0.643,1",
"objects": ["person"],
"filters": {"person": {"min_area": 0.1}},
}
},
}
},
}
frigate_config = FrigateConfig(**config)
expected_min_area = int(1080 * 1920 * 0.1)
assert (
frigate_config.cameras["back"]
.zones["notification"]
.filters["person"]
.min_area
== expected_min_area
)
def test_zone_relative_matches_explicit(self):
config = {
"mqtt": {"host": "mqtt"},

View File

@ -67,12 +67,13 @@
"export": "Exportovat",
"selectOrExport": "Vybrat pro Export",
"toast": {
"success": "Export úspěšně spuštěn. Soubor najdete v adresáři /exports.",
"success": "Export úspěšně spuštěn. Soubor najdete na stránce exportů.",
"error": {
"failed": "Chyba spuštění exportu: {{error}}",
"endTimeMustAfterStartTime": "Čas konce musí být po čase začátku",
"noVaildTimeSelected": "Není vybráno žádné platné časové období"
}
},
"view": "Zobrazení"
},
"fromTimeline": {
"saveExport": "Uložit export",

View File

@ -132,5 +132,9 @@
},
"count_one": "Třída {{count}}",
"count_other": "Třídy {{count}}"
},
"attributes": {
"label": "Atributy Klasifikace",
"all": "Všechny Atributy"
}
}

View File

@ -38,10 +38,41 @@
"deleteImageFailed": "Chyba při mazání: {{errorMessage}}",
"deleteCategoryFailed": "Chyba při mazání třídy: {{errorMessage}}",
"deleteModelFailed": "Chyba při mazání modelu: {{errorMessage}}",
"categorizeFailed": "Chyba při mazání obrázku: {{errorMessage}}"
"categorizeFailed": "Chyba při mazání obrázku: {{errorMessage}}",
"trainingFailed": "Trénování modelu selhalo. Zkontrolujte logy Frigate pro zjištění detailů.",
"trainingFailedToStart": "Chyba spuštění trénování modelu: {{errorMessage}}",
"updateModelFailed": "Chyba aktualizace modelu: {{errorMessage}}",
"renameCategoryFailed": "Chyba přejmenování třídy: {{errorMessage}}"
}
},
"train": {
"titleShort": "Nedávný"
},
"deleteModel": {
"desc_one": "Jste si jistí, že chcete odstranit {{count}} model? Tím trvale odstraníte všechny související data včetně obrázků a tréninkových dat. Tato akce je nevratná.",
"desc_few": "Jste si jistí, že chcete odstranit {{count}} modely? Tím trvale odstraníte všechny související data včetně obrázků a tréninkových dat. Tato akce je nevratná.",
"desc_other": "Jste si jistí, že chcete odstranit {{count}} modelů? Tím trvale odstraníte všechny související data včetně obrázků a tréninkových dat. Tato akce je nevratná."
},
"deleteDatasetImages": {
"desc_one": "Opravdu chcete odstranit {{count}} obrázek z {{dataset}}? Tato akce je nevratná a vyžaduje přetrénování modelu.",
"desc_few": "Opravdu chcete odstranit {{count}} obrázky z {{dataset}}? Tato akce je nevratná a vyžaduje přetrénování modelu.",
"desc_other": "Opravdu chcete odstranit {{count}} obrázků z {{dataset}}? Tato akce je nevratná a vyžaduje přetrénování modelu."
},
"deleteTrainImages": {
"desc_one": "Opravdu chcete odstranit {{count}} obrázek? Tato akce je nevratná.",
"desc_few": "Opravdu chcete odstranit {{count}} obrázky? Tato akce je nevratná.",
"desc_other": "Opravdu chcete odstranit {{count}} obrázků? Tato akce je nevratná."
},
"wizard": {
"step3": {
"allImagesRequired_one": "Prosím, zařaďte všechny obrázky. Zbývá {{count}} obrázek.",
"allImagesRequired_few": "Prosím, zařaďte všechny obrázky. Zbývají {{count}} obrázky.",
"allImagesRequired_other": "Prosím, zařaďte všechny obrázky. Zbývá {{count}} obrázků.",
"trainingStarted": "Trénování úspěšně spuštěno",
"generateSuccess": "Vzorové obrázky byly úspěšně vytvořeny"
}
},
"deleteCategory": {
"title": "Smazat Třídu"
}
}

View File

@ -9,14 +9,18 @@
"empty": {
"alert": "Nejsou žádné výstrahy na kontrolu",
"detection": "Nejsou žádné detekce na kontrolu",
"motion": "Nenalezena žádná data o pohybu"
"motion": "Nenalezena žádná data o pohybu",
"recordingsDisabled": {
"title": "Nahrávání musí být povoleno",
"description": "Položky revize lze pro kameru vytvořit pouze tehdy, je-li pro ni povoleno nahrávání."
}
},
"timeline": "Časová osa",
"timeline.aria": "Zvolit časovou osu",
"events": {
"label": "Události",
"aria": "Zvolit události",
"noFoundForTimePeriod": "Pro toto období nebyly nalezeny žádné události."
"noFoundForTimePeriod": "Pro toto časové období nebyly nalezeny žádné události."
},
"documentTitle": "Revize - Frigate",
"camera": "Kamera",
@ -26,8 +30,8 @@
"markAsReviewed": "Označit jako zkontrolované",
"markTheseItemsAsReviewed": "Označit tyto položky jako zkontrolované",
"newReviewItems": {
"label": "Zobrazit nové položky na kontrolu",
"button": "Nové položky na kontrolu"
"label": "Zobrazit nové položky revize",
"button": "Nové položky revize"
},
"recordings": {
"documentTitle": "Záznamy - Frigate"
@ -42,8 +46,22 @@
"detail": {
"label": "Detail",
"noDataFound": "Žádná detailní data k prohlédnutí",
"aria": "Přepnout detailní zobrazení",
"aria": "Přepnout zobrazení detailů",
"trackedObject_other": "{{count}} objektů",
"trackedObject_one": "{{count}} objektů"
}
"trackedObject_one": "{{count}} objekt",
"noObjectDetailData": "Nejsou k dispozici žádné podrobné údaje o objektu.",
"settings": "Nastavení Detailního Zobrazení",
"alwaysExpandActive": {
"title": "Vždy rozbalit aktivní",
"desc": "Vždy zobrazit podrobnosti objektu aktivní položky revize, pokud jsou k dispozici."
}
},
"objectTrack": {
"trackedPoint": "Sledovaný bod",
"clickToSeek": "Kliknutím přeskočte na tento čas"
},
"select_all": "Vše",
"normalActivity": "Normální",
"needsReview": "Potřebuje revizi",
"securityConcern": "Obava o bezpečnost"
}

View File

@ -24,7 +24,8 @@
"regenerate": "Od {{provider}} byl vyžádán nový popis. V závislosti na rychlosti vašeho poskytovatele může obnovení nového popisu nějakou dobu trvat.",
"updatedSublabel": "Úspěšně aktualizovaný podružný štítek.",
"updatedLPR": "Úspěšně aktualizovaná SPZ.",
"audioTranscription": "Požádání o přepis zvuku bylo úspěšné."
"audioTranscription": "Požádání o přepis zvuku bylo úspěšné. V závislosti na rychlosti Vašeho Frigate serveru může přepis trvat nějaký čas než bude dokončen.",
"updatedAttributes": "Atributy byly úspěšně aktualizovány."
},
"error": {
"regenerate": "Chyba volání {{provider}} pro nový popis: {{errorMessage}}",
@ -206,7 +207,7 @@
"dialog": {
"confirmDelete": {
"title": "Potvrdit smazání",
"desc": "Odstraněním tohoto sledovaného objektu se odstraní snímek, všechna uložená vložení a všechny související položky životního cyklu objektu. Zaznamenaný záznam tohoto sledovaného objektu v zobrazení Historie <em>NEBUDE</em> smazán.<br /><br />Opravdu chcete pokračovat?"
"desc": "Odstraněním tohoto sledovaného objektu se odstraní snímek, všechna uložená vložení a všechny související položky s podrobnostmi o sledování. Zaznamenaný záznam tohoto sledovaného objektu v zobrazení Historie <em>NEBUDE</em> smazán.<br /><br />Opravdu chcete pokračovat?"
}
},
"trackedObjectDetails": "Detaily sledovaných objektů",
@ -214,7 +215,9 @@
"details": "detaily",
"snapshot": "snímek",
"video": "video",
"object_lifecycle": "životní cyklus objektu"
"object_lifecycle": "životní cyklus objektu",
"thumbnail": "Náhled",
"tracking_details": "detaily sledování"
},
"noTrackedObjects": "Žádné sledované objekty nebyly nalezeny",
"fetchingTrackedObjectsFailed": "Chyba při načítání sledovaných objektů: {{errorMessage}}",
@ -224,5 +227,18 @@
},
"concerns": {
"label": "Obavy"
},
"trackingDetails": {
"title": "Detaily Sledování",
"noImageFound": "Nebyl nalezen obrázek pro tuto časovou značku.",
"createObjectMask": "Vytvořit Masku Objektu",
"adjustAnnotationSettings": "Upravte nastavení poznámek",
"scrollViewTips": "Klikněte pro zobrazení významných okamžiků z životního cyklu tohoto objektu.",
"autoTrackingTips": "Pozice ohraničujících rámečků budou nepřesné pro kamery s automatickým sledováním.",
"count": "{{first}} z {{second}}",
"trackedPoint": "Sledovaný Bod",
"lifecycleItemDesc": {
"visible": "Detekován {{label}}"
}
}
}

View File

@ -1,6 +1,6 @@
{
"imageEntry": {
"dropInstructions": "Přetáhněte obrázek zde, nebo klikněte na výběr",
"dropInstructions": "Přetáhněte obrázek sem, nebo klikněte na výběr",
"maxSize": "Maximální velikost: {{size}}MB",
"dropActive": "Přetáhněte obrázek zde…",
"validation": {
@ -10,7 +10,7 @@
"createFaceLibrary": {
"new": "Vytvořit nový obličej",
"desc": "Vytvořit novou kolekci",
"nextSteps": "Chcete-li vybudovat pevný základ:<li>Použijte kartu Trénování k výběru a trénování na snímcích pro každou detekovanou osobu.</li><li>Pro nejlepší výsledky se zaměřte na přímé snímky; vyhněte se trénování snímků, které zachycují obličeje pod úhlem.</li></ul>",
"nextSteps": "Chcete-li vybudovat pevný základ:<li>Použijte kartu Nedávná Rozpoznání k výběru a trénování na snímcích pro každou detekovanou osobu.</li><li>Pro nejlepší výsledky se zaměřte na přímé snímky; vyhněte se trénování snímků, které zachycují obličeje pod úhlem.</li></ul>",
"title": "Vytvořit kolekci"
},
"details": {

View File

@ -86,7 +86,7 @@
"enable": "Ukázat statistiky streamu"
},
"manualRecording": {
"title": "Nahrávání na vyžádání",
"title": "Na požádání",
"playInBackground": {
"label": "Přehrát na pozadí",
"desc": "Povolte tuto volbu pro pokračování streamování i když je přehrávač skrytý."
@ -103,7 +103,7 @@
"started": "Manuálně spuštěno nahrávání na požádání.",
"ended": "Ukončeno manuální nahrávání na vyžádání.",
"recordDisabledTips": "Protože je v konfiguraci této kamery nahrávání zakázáno nebo omezeno, bude uložen pouze snímek.",
"tips": "Spustit ruční událost na základě nastavení uchovávání záznamů této kamery."
"tips": "Stáhněte si aktuální snímek nebo spusťte ruční událost na základě nastavení uchování záznamu této kamery."
},
"streamingSettings": "Nastavení Streamování",
"audio": "Zvuk",
@ -167,5 +167,11 @@
"transcription": {
"enable": "Povolit živý přepis zvuku",
"disable": "Zakázat živý přepis zvuku"
},
"snapshot": {
"takeSnapshot": "Stáhnout aktuální snímek",
"noVideoSource": "Pro snímek není k dispozici žádné video.",
"captureFailed": "Zachycení snímku selhalo.",
"downloadStarted": "Stažení snímku spuštěno."
}
}

View File

@ -134,7 +134,7 @@
"name": {
"inputPlaceHolder": "Zadejte jméno…",
"title": "Jméno",
"tips": "Název musí mít alespoň 2 znaky a nesmí být shodný s názvem kamery nebo jiné zóny."
"tips": "Název musí mít alespoň 2 znaky, musí obsahovat alespoň jedno písmeno a nesmí být shodný s názvem kamery nebo jiné zóny této kamery."
},
"inertia": {
"title": "Setrvačnost",
@ -160,7 +160,7 @@
}
},
"toast": {
"success": "Zóna {{zoneName}} byla uložena. Restartujte Frigate pro aplikování změn."
"success": "Zóna {{zoneName}} byla uložena."
},
"label": "Zóny",
"desc": {
@ -199,8 +199,8 @@
"clickDrawPolygon": "Kliknutím nakreslíte polygon do obrázku.",
"toast": {
"success": {
"title": "{{polygonName}} byl uložen. Restartujte Frigate pro aplikování změn.",
"noName": "Maska Detekce pohybu byla uložena. Restartujte Frigate pro aplikování změn."
"title": "{{polygonName}} byl uložen.",
"noName": "Maska Detekce pohybu byla uložena."
}
}
},
@ -284,8 +284,8 @@
"clickDrawPolygon": "Kliknutím nakreslete polygon do obrázku.",
"toast": {
"success": {
"title": "{{polygonName}} byl uložen. Restartujte Frigate pro aplikování změn.",
"noName": "Maska Objektu byla uložena. Restartujte Frigate pro aplikování změn."
"title": "{{polygonName}} byl uložen.",
"noName": "Maska Objektu byla uložena."
}
},
"point_one": "{{count}} bod",
@ -322,7 +322,7 @@
"noCamera": "Žádná Kamera"
},
"general": {
"title": "Hlavní nastavení",
"title": "Nastavení rozhraní",
"liveDashboard": {
"title": "Živý dashboard",
"automaticLiveView": {
@ -629,11 +629,11 @@
"actions": "Akce",
"noUsers": "Žádní uživatelé nebyli nalezeni.",
"changeRole": "Změnit roli uživatele",
"password": "Heslo",
"password": "Resetovat Heslo",
"deleteUser": "Smazat uživatele",
"role": "Role"
},
"updatePassword": "Aktualizovat heslo",
"updatePassword": "Resetovat heslo",
"toast": {
"success": {
"createUser": "Uživatel {{user}} úspěšně vytvořen",
@ -743,7 +743,7 @@
"triggers": {
"documentTitle": "Spouštěče",
"management": {
"title": "Správa spouštěčů",
"title": "Spouštěče",
"desc": "Spravovat spouštěče pro {{camera}}. Použít typ miniatury ke spuštění u miniatur podobných vybranému sledovanému objektu a typ popisu ke spuštění u popisů podobných zadanému textu."
},
"addTrigger": "Přidat spouštěč",
@ -782,10 +782,10 @@
"form": {
"name": {
"title": "Název",
"placeholder": "Zadejte název spouštěče",
"placeholder": "Pojmenujte tento spouštěč",
"error": {
"minLength": "Název musí mít alespoň 2 znaky.",
"invalidCharacters": "Jméno může obsahovat pouze písmena, číslice, podtržítka a pomlčky.",
"minLength": "Pole musí mít alespoň 2 znaky.",
"invalidCharacters": "Pole může obsahovat pouze písmena, číslice, podtržítka a pomlčky.",
"alreadyExists": "Spouštěč s tímto názvem již pro tuto kameru existuje."
}
},
@ -798,9 +798,9 @@
},
"content": {
"title": "Obsah",
"imagePlaceholder": "Vybrat obrázek",
"imagePlaceholder": "Vyberte miniaturu",
"textPlaceholder": "Zadat textový obsah",
"imageDesc": "Vybrat obrázek, který spustí tuto akci, když bude detekován podobný obrázek.",
"imageDesc": "Je zobrazeno pouze posledních 100 miniatur. Pokud nemůžete najít požadovanou miniaturu, prosím zkontrolujte dřívější objekty v Prozkoumat a nastavte spouštěč ze tamějšího menu.",
"textDesc": "Zadejte text, který spustí tuto akci, když bude zjištěn podobný popis sledovaného objektu.",
"error": {
"required": "Obsah je povinný."
@ -808,7 +808,7 @@
},
"actions": {
"title": "Akce",
"desc": "Ve výchozím nastavení Frigate odesílá MQTT zprávu pro všechny spouštěče. Zvolte dodatečnou akci, která se má provést, když se tento spouštěč aktivuje.",
"desc": "Ve výchozím nastavení Frigate odesílá MQTT zprávu pro všechny spouštěče. Podřazené popisky přidávají název spouštěče k popisku objektu. Atributy jsou prohledávatelná metadata uložená samostatně v metadatech sledovaného objektu.",
"error": {
"min": "Musí být vybrána alespoň jedna akce."
}
@ -850,9 +850,9 @@
"createRole": "Role {{role}} byla úspěšně vytvořena",
"updateCameras": "Kamery byly aktualizovány pro roli {{role}}",
"deleteRole": "Role {{role}} byla úspěšně smazána",
"userRolesUpdated_one": "{{count}} uživatel(ů) přiřazených k této roli bylo aktualizováno na „Divák“, který má přístup ke všem kamerám.",
"userRolesUpdated_few": "",
"userRolesUpdated_other": ""
"userRolesUpdated_one": "{{count}} uživatel přiřazený k této roli byl aktualizován na „diváka“, který má přístup ke všem kamerám.",
"userRolesUpdated_few": "{{count}} uživatelé přiřazení k této roli bylo aktualizováno na „diváky“, kteří mají přístup ke všem kamerám.",
"userRolesUpdated_other": "{{count}} uživatelů přiřazených k této roli bylo aktualizováno na „diváky“, kteří mají přístup ke všem kamerám."
},
"error": {
"createRoleFailed": "Nepodařilo se vytvořit roli: {{errorMessage}}",
@ -896,5 +896,36 @@
"title": "Správa role diváka",
"desc": "Spravujte vlastní role diváků a jejich oprávnění k přístupu ke kamerám pro tuto instanci Frigate."
}
},
"cameraWizard": {
"save": {
"success": "Nová kamera {{cameraName}} úspěšně uložena."
},
"step2": {
"testSuccess": "Test připojení v pořádku!",
"probeSuccessful": "Sonda úspěšná",
"probeNoSuccess": "Sonda neúspěšná"
},
"step3": {
"testSuccess": "Test streamu v pořádku!"
},
"step4": {
"reconnectionSuccess": "Opakované připojení úspěšné.",
"streamValidated": "Stream {{number}} úspěšně ověřený"
}
},
"cameraManagement": {
"cameraConfig": {
"toast": {
"success": "Kamera {{cameraName}} úspěšně uložena"
}
}
},
"cameraReview": {
"reviewClassification": {
"toast": {
"success": "Konfigurace Klasifikací Revizí byla uložena. Restartujte Frigate pro aplikování změn."
}
}
}
}

View File

@ -3,6 +3,7 @@
"untilForTime": "Until {{time}}",
"untilForRestart": "Until Frigate restarts.",
"untilRestart": "Until restart",
"never": "Never",
"ago": "{{timeAgo}} ago",
"justNow": "Just now",
"today": "Today",

View File

@ -1 +1,11 @@
{}
{
"documentTitle": "Luokittelumallit - Frigate",
"details": {
"scoreInfo": "Pistemäärä edustaa tämän objektin kaikkien havaintojen keskimääräistä luokitteluvarmuutta.",
"none": "Ei mitään"
},
"button": {
"deleteImages": "Poista kuvat",
"trainModel": "Kouluta malli"
}
}

View File

@ -13,5 +13,8 @@
"title": "Nimeä uudelleen",
"desc": "Anna uusi nimi viedylle kohteelle.",
"saveExport": "Tallenna vienti"
},
"tooltip": {
"editName": "Muokkaa nimeä"
}
}

View File

@ -10,7 +10,8 @@
"object": "Virheenjäljitys - Frigate",
"authentication": "Autentikointiuasetukset - Frigate",
"notifications": "Ilmoitusasetukset - Frigate",
"enrichments": "Laajennusasetukset Frigate"
"enrichments": "Laajennusasetukset Frigate",
"cameraManagement": "Hallitse Kameroita - Frigate"
},
"menu": {
"ui": "Käyttöliittymä",

View File

@ -425,5 +425,6 @@
"crack": "Törés",
"chink": "Csörömpölés",
"shatter": "Összetörés",
"field_recording": "Helyszíni felvétel"
"field_recording": "Helyszíni felvétel",
"noise": "Zaj"
}

View File

@ -72,7 +72,9 @@
"24hour": "MMM d, HH:mm",
"12hour": "MMM d, h:mm aaa"
},
"formattedTimestampMonthDay": "MMM d"
"formattedTimestampMonthDay": "MMM d",
"inProgress": "Folyamatban",
"invalidStartTime": "Érvénytelen kezdeti idő"
},
"menu": {
"darkMode": {
@ -269,7 +271,8 @@
"next": "Következő"
},
"label": {
"back": "Vissza"
"back": "Vissza",
"all": "Mind"
},
"readTheDocumentation": "Olvassa el a dokumentációt",
"information": {

View File

@ -43,5 +43,8 @@
"noNewImages": "Nincsenek új képek a betanításhoz. Először osztályozzon több képet az adathalmazban.",
"noChanges": "Az adathalmazban nem történt változás az utolsó betanítás óta.",
"modelNotReady": "A modell nem áll készen a betanításra"
},
"menu": {
"objects": "Objektumok"
}
}

View File

@ -222,5 +222,19 @@
},
"concerns": {
"label": "Aggodalmak"
},
"trackingDetails": {
"lifecycleItemDesc": {
"active": "{{label}} aktív lett",
"attribute": {
"other": "{{label}} felismerve mint {{attribute}}"
},
"external": "{{label}} érzékelve",
"header": {
"zones": "Zónák",
"ratio": "Arány",
"area": "Terület"
}
}
}
}

View File

@ -121,12 +121,19 @@
"gpuEncoder": "GPU Enkóder",
"gpuDecoder": "GPU Dekóder",
"npuUsage": "NPU Kihasználtság",
"npuMemory": "NPU Memória"
"npuMemory": "NPU Memória",
"intelGpuWarning": {
"message": "GPU statisztika nem érhető el"
}
},
"otherProcesses": {
"processMemoryUsage": "Folyamat Memória Kihasználtság",
"title": "Egyéb Folyamatok",
"processCpuUsage": "Folyamat CPU Kihasználtság"
"processCpuUsage": "Folyamat CPU Kihasználtság",
"series": {
"go2rtc": "go2rtc",
"recording": "felvétel"
}
}
},
"storage": {

View File

@ -12,5 +12,22 @@
"addClassification": "Tambah Klasifikasi",
"deleteModels": "Hapus Model",
"editModel": "Ubah Model"
},
"tooltip": {
"trainingInProgress": "Model dalam training"
},
"toast": {
"success": {
"deletedCategory": "Kelas dihapus",
"deletedImage": "Image dihapus"
},
"error": {
"updateModelFailed": "Gagal melakukan perubahan pada model: {{errorMessage}}",
"renameCategoryFailed": "Gagal merubah penamaan kelas: {{errorMessage}}"
}
},
"deleteCategory": {
"title": "Kelas dihapus",
"minClassesTitle": "Dilarang menghapus Kelas"
}
}

View File

@ -263,7 +263,7 @@
"ID": "ID",
"none": "Ingen",
"all": "Alle",
"other": "Andre"
"other": "Annet"
},
"toast": {
"copyUrlToClipboard": "Nettadresse kopiert til utklippstavlen.",

View File

@ -169,7 +169,7 @@
},
"details": {
"scoreInfo": "Score geeft het gemiddelde classificatievertrouwen weer over alle detecties van dit object.",
"none": "Geen overeenkomst",
"none": "Geen herkenning",
"unknown": "Onbekend"
},
"edit": {

View File

@ -116,7 +116,8 @@
"show": "Pokaż {{item}}",
"ID": "ID",
"none": "Brak",
"all": "Wszystko"
"all": "Wszystko",
"other": "Inne"
},
"button": {
"apply": "Zastosuj",

View File

@ -53,7 +53,7 @@
"export": "Exportar",
"selectOrExport": "Selecionar ou Exportar",
"toast": {
"success": "Exportação iniciada com sucesso. Veja o arquivo na pasta /exports.",
"success": "Exportação iniciada com sucesso. Veja o arquivo na tela exportar.",
"error": {
"failed": "Falha em iniciar exportação: {{error}}",
"endTimeMustAfterStartTime": "Tempo de finalização deve ser após tempo de início",

View File

@ -1,5 +1,5 @@
{
"documentTitle": "Modelos de Classificação",
"documentTitle": "Modelos de Classificação - Frigate",
"button": {
"deleteClassificationAttempts": "Apagar Imagens de Classificação",
"renameCategory": "Renomear Classe",
@ -28,7 +28,7 @@
"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}}",
"trainingFailed": "Treinamento do modelo falhou. Verifique os logs do Frigate para mais detalhes.",
"trainingFailedToStart": "Falha ao iniciar o treinamento do modelo: {{errorMessage}}",
"updateModelFailed": "Falha ao atualizar modelo: {{errorMessage}}",
"renameCategoryFailed": "Falha ao renomear classe: {{errorMessage}}"
@ -44,12 +44,50 @@
"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."
"scoreInfo": "A pontuação representa a média de confiança da classificação de todas as detecções deste objeto.",
"none": "Nenhum",
"unknown": "Desconhecido"
},
"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"
},
"deleteTrainImages": {
"desc_one": "Tem certeza que deseja deletar {{count}} imagem? Esta ação não pode ser desfeita.",
"desc_many": "Tem certeza que deseja deletar {{count}} imagens? Esta ação não pode ser desfeita.",
"desc_other": "Tem certeza que deseja deletar {{count}} imagens? Esta ação não pode ser desfeita.",
"title": "Apagar Imagens de Treinamento"
},
"renameCategory": {
"title": "Renomear Classe",
"desc": "Insira um novo nome para {{name}}. O modelo deverá ser treinado novamente para a mudança de nome ter efeito."
},
"description": {
"invalidName": "Nome inválido. Nomes podem conter letras, números, espacos, apóstrofos, sublinhado e hífens."
},
"train": {
"title": "Classificações Recentes",
"titleShort": "Recente",
"aria": "Selecionar Classificações Recentes"
},
"categories": "Classes",
"createCategory": {
"new": "Criar Nova Classe"
},
"categorizeImageAs": "Classificar Imagem Como:",
"categorizeImage": "Classificar Imagem",
"menu": {
"objects": "Objetos",
"states": "Estados"
},
"noModels": {
"object": {
"title": "Nenhum Modelo de Classificação de Objetos"
}
},
"deleteDatasetImages": {
"title": "Deletar Imagens do Dataset"
}
}

View File

@ -50,7 +50,7 @@
"regenerate": "Uma nova descrição foi solicitada do {{provider}}. Dependendo da velocidade do seu fornecedor, a nova descrição pode levar algum tempo para regenerar.",
"updatedSublabel": "Sub-rótulo atualizado com sucesso.",
"updatedLPR": "Placa de identificação atualizada com sucesso.",
"audioTranscription": "Transcrição de áudio requisitada com sucesso."
"audioTranscription": "Transcrição de áudio requisitada com sucesso. Dependendo da velocidade de seu servidor Frigate, a transcrição pode demorar um tempo para completar."
},
"error": {
"regenerate": "Falha ao ligar para {{provider}} para uma descrição nova: {{errorMessage}}",
@ -112,7 +112,8 @@
"snapshot": "captura de imagem",
"video": "vídeo",
"object_lifecycle": "ciclo de vida do objeto",
"thumbnail": "thumbnail"
"thumbnail": "thumbnail",
"tracking_details": "detalhes de rastreamento"
},
"objectLifecycle": {
"title": "Ciclo de Vida do Objeto",
@ -203,7 +204,7 @@
"dialog": {
"confirmDelete": {
"title": "Confirmar Exclusão",
"desc": "Deletar esse objeto rastreado remove a captura de imagem, quaisquer embeddings salvos, e quaisquer entradas de ciclo de vida de objeto associadas. Gravações desse objeto rastreado na visualização de Histórico <em>NÃO</em> serão deletadas.<br /><br />Tem certeza que quer prosseguir?"
"desc": "Deletar esse objeto rastreado remove a captura de imagem, os embeddings salvos, e os detalhes de rastreamento associados. Gravações desse objeto rastreado na visualização de Histórico <em>NÃO</em> serão deletadas.<br /><br />Tem certeza que deseja prosseguir?"
}
},
"noTrackedObjects": "Nenhum Objeto Rastreado Encontrado",
@ -225,5 +226,35 @@
},
"concerns": {
"label": "Preocupações"
},
"trackingDetails": {
"lifecycleItemDesc": {
"gone": "{{label}} saiu",
"visible": "{{label}} detectado(a)",
"entered_zone": "{{label}} entrou em {{zones}}",
"active": "{{label}} em movimento",
"stationary": "{{label}} parou",
"attribute": {
"faceOrLicense_plate": "{{attribute}} detectado para {{label}}",
"other": "{{label}} reconhecido como {{attribute}}"
},
"heard": "Som de {{label}} detectado",
"external": "{{label}} detectado(a)",
"header": {
"zones": "Zonas",
"area": "Área"
}
},
"title": "Detalhes de Rastreamento",
"createObjectMask": "Criar máscara de objeto",
"annotationSettings": {
"showAllZones": {
"title": "Mostrar todas as Zonas"
}
},
"carousel": {
"previous": "Slide anterior",
"next": "Próximo slide"
}
}
}

View File

@ -59,7 +59,7 @@
"description": {
"placeholder": "Informe um nome para esta coleção",
"addFace": "Adicione uma nova coleção à Biblioteca Facial subindo a sua primeira imagem.",
"invalidName": "Nome inválido. Nomes podem incluir apenas letras, números, espaços, apóstrofos, sublinhados e hífenes."
"invalidName": "Nome inválido. Nomes podem conter letras, números, espacos, apóstrofos, sublinhado e hífens."
},
"documentTitle": "Biblioteca de rostos - Frigate",
"uploadFaceImage": {
@ -70,7 +70,8 @@
"train": {
"title": "Reconhecimentos Recentes",
"aria": "Selecionar reconhecimentos recentes",
"empty": "Não há tentativas recentes de reconhecimento facial"
"empty": "Não há tentativas recentes de reconhecimento facial",
"titleShort": "Recente"
},
"selectFace": "Selecionar Rosto",
"trainFaceAs": "Treinar Rosto como:",
@ -83,7 +84,7 @@
"deletedFace_many": "{{count}} rostos apagados com sucesso.",
"deletedFace_other": "{{count}} rostos apagados com sucesso.",
"trainedFace": "Rosto treinado com sucesso.",
"updatedFaceScore": "Pontuação de rosto atualizada com sucesso.",
"updatedFaceScore": "Pontuação de rosto atualizada com sucesso para {{name}}{{score}}.",
"renamedFace": "O rosto foi renomeado com sucesso para {{name}}",
"deletedName_one": "{{count}} rosto foi deletado com sucesso.",
"deletedName_many": "{{count}} rostos foram deletados com sucesso.",

View File

@ -173,7 +173,7 @@
},
"noCameras": {
"title": "Nenhuma Câmera Configurada",
"description": "Inicie conectando uma câmera ao Frigate",
"description": "Inicie conectando uma câmera ao Frigate.",
"buttonText": "Adicionar Câmera"
},
"snapshot": {

View File

@ -39,7 +39,7 @@
"noCamera": "Sem Câmera"
},
"general": {
"title": "Opções Gerais",
"title": "Configurações de Interface",
"liveDashboard": {
"title": "Painel em Tempo Real",
"automaticLiveView": {
@ -278,7 +278,7 @@
},
"snapPoints": {
"true": "Pontos de encaixe",
"false": "Não encaixar os ponts"
"false": "Não encaixar os pontos"
},
"delete": {
"title": "Confirmar Deletar",
@ -306,7 +306,7 @@
"name": {
"title": "Nome",
"inputPlaceHolder": "Digite um nome…",
"tips": "O nome deve ter no mínimo 2 caracteres e não pode ter o nome de uma câmera ou outra zona."
"tips": "O nome deve ter no mínimo 2 caracteres, deve ter ao menos uma letra e não pode ter o nome de uma câmera ou outra zona nesta câmera."
},
"inertia": {
"title": "Inércia",
@ -341,7 +341,7 @@
}
},
"toast": {
"success": "A zona ({{zoneName}}) foi salva. Reinicie o Frigate para aplicar as mudanças."
"success": "A zona ({{zoneName}}) foi salva."
}
},
"objectMasks": {
@ -352,8 +352,8 @@
},
"toast": {
"success": {
"title": "{{polygonName}} foi salvo. Reinicie o Frigate para aplicar as alterações.",
"noName": "A máscara de objeto foi salva. Reinicie o Frigate para aplicar as alterações."
"title": "{{polygonName}} foi salvo.",
"noName": "A máscara de objeto foi salva."
}
},
"label": "Máscaras de Objeto",
@ -394,8 +394,8 @@
},
"toast": {
"success": {
"title": "{{polygonName}} foi salvo. Reinicie o Frigate para aplicar as alterações.",
"noName": "Máscara de Movimento salva. Reinicie o Frigate para aplicar as alterações."
"title": "{{polygonName}} foi salvo.",
"noName": "Máscara de Movimento salva."
}
}
}
@ -490,7 +490,7 @@
"desc": "Gerenciar as contas de usuário dessa instância do Frigate."
},
"addUser": "Adicionar Usuário",
"updatePassword": "Atualizar Senha",
"updatePassword": "Resetar Senha",
"toast": {
"success": {
"createUser": "Usuário {{user}} criado com sucesso",
@ -577,7 +577,7 @@
"role": "Papel",
"noUsers": "Nenhum usuário encontrado.",
"changeRole": "Mudar papel do usuário",
"password": "Senha",
"password": "Resetar Senha",
"deleteUser": "Deletar usuário"
}
},
@ -683,7 +683,7 @@
"triggers": {
"documentTitle": "Gatilhos",
"management": {
"title": "Gerenciamento de Gatilhos",
"title": "Gatilhos",
"desc": "Gerenciar gatilhos para {{camera}}. Use o tipo de miniatura para acionar miniaturas semelhantes para os seus objetos rastreados selecionados, e o tipo de descrição para acionar descrições semelhantes para textos que você especifica."
},
"addTrigger": "Adicionar Gatilho",
@ -722,10 +722,10 @@
"form": {
"name": {
"title": "Nome",
"placeholder": "Digite o nome do gatilho",
"placeholder": "Nomeie este gatilho",
"error": {
"minLength": "O nome precisa ter no mínimo 2 caracteres.",
"invalidCharacters": "O nome pode contar apenas letras, números, sublinhados, e hífens.",
"minLength": "O campo precisa ter no mínimo 2 caracteres.",
"invalidCharacters": "O campo pode contar apenas letras, números, sublinhados, e hifens.",
"alreadyExists": "Um gatilho com esse nome já existe para essa câmera."
}
},
@ -738,7 +738,7 @@
},
"content": {
"title": "Conteúdo",
"imagePlaceholder": "Selecionar uma imagem",
"imagePlaceholder": "Selecionar um thumbnail",
"textPlaceholder": "Digitar conteúdo do texto",
"imageDesc": "Selecionar uma imagem para acionar essa ação quando uma imagem semelhante for detectada.",
"textDesc": "Digite o texto para ativar essa ação quando uma descrição semelhante de objeto rastreado for detectada.",
@ -803,9 +803,9 @@
"createRole": "Papel {{role}} criado com sucesso",
"updateCameras": "Câmeras atualizados para o papel {{role}}",
"deleteRole": "Papel {{role}} apagado com sucesso",
"userRolesUpdated_one": "{{count}} usuário(os) atribuídos a esse papel foram atualizados para 'visualizador', que possui acesso a todas as câmeras.",
"userRolesUpdated_many": "",
"userRolesUpdated_other": ""
"userRolesUpdated_one": "{{count}} usuário atribuído a essa função foi atualizado para 'visualizador', com acesso a todas as câmeras.",
"userRolesUpdated_many": "{{count}} usuários atribuídos a essa função foram atualizados para 'visualizador', com acesso a todas as câmeras.",
"userRolesUpdated_other": "{{count}} usuários atribuídos a esse papel foram atualizados para 'visualizador', com acesso a todas as câmeras."
},
"error": {
"createRoleFailed": "Falha ao criar papel: {{errorMessage}}",
@ -869,7 +869,7 @@
"testFailed": "Teste de stream falhou: {{error}}"
},
"step1": {
"description": "Adicione os detalhes da sua câmera e teste a conexão.",
"description": "Insira os detalhes da sua câmera e escolha entre sondar a câmera ou selecionar a marca manualmente.",
"cameraName": "Nome da Câmera",
"cameraNamePlaceholder": "ex., porta_entrada ou Visão Geral do Quintal",
"host": "Host/Endereço IP",

View File

@ -46,5 +46,6 @@
"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 excluir a classe",
"minClassesDesc": "Um modelo de classificação deve ter pelo menos duas classes. Adicione outra classe antes de excluir esta."
}
},
"documentTitle": "Modelos de Classificação Frigate"
}

View File

@ -13,5 +13,8 @@
"renameExportFailed": "Falha ao renomear exportação: {{errorMessage}}"
}
},
"deleteExport.desc": "Tem a certeza de que deseja excluir {{exportName}}?"
"deleteExport.desc": "Tem a certeza de que deseja excluir {{exportName}}?",
"tooltip": {
"shareExport": "Partilhar exportação"
}
}

View File

@ -27,7 +27,7 @@
},
"train": {
"aria": "Selecionar treino",
"title": "Treinar",
"title": "Reconhecimentos Recentes",
"empty": "Não há tentativas recentes de reconhecimento facial"
},
"selectItem": "Selecionar {{item}}",
@ -55,7 +55,7 @@
"trainFace": "Treinar rosto",
"toast": {
"success": {
"updatedFaceScore": "Pontuação facial atualizada com sucesso.",
"updatedFaceScore": "Pontuação facial atualizada com sucesso para {{name}} ({{score}}).",
"trainedFace": "Rosto treinado com sucesso.",
"deletedFace_one": "{{count}} rosto excluído com sucesso.",
"deletedFace_many": "{{count}} rostos excluídos com sucesso.",

View File

@ -13,5 +13,55 @@
"laughter": "Smeh",
"train": "Voz",
"boat": "Brod",
"crying": "Plač"
"crying": "Plač",
"sigh": "Уздах",
"singing": "Пријављивање",
"choir": "Збор",
"yodeling": "Јодловање",
"chant": "Певање",
"mantra": "Мантра",
"bird": "Птица",
"snicker": "Кикот",
"child_singing": "Дечје певање",
"cat": "Мачка",
"synthetic_singing": "Синтетичко певање",
"dog": "Пас",
"rapping": "Реповање",
"horse": "Коњ",
"humming": "Брундање",
"sheep": "Овца",
"groan": "Стењање",
"grunt": "Мрмљање",
"whistling": "Звиждање",
"breathing": "Дисање",
"wheeze": "Шиштање",
"snoring": "Хркање",
"gasp": "Задиханост",
"pant": "Задиханост",
"snort": "Шмркање",
"cough": "Кашаљ",
"throat_clearing": "Прочишћавање грла",
"sneeze": "Кијање",
"sniff": "Њушкање",
"run": "Трчање",
"shuffle": "Насумично",
"footsteps": "Корачање",
"chewing": "Жвакање",
"biting": "Угриз",
"gargling": "Гргорење",
"stomach_rumble": "Крчање стомака",
"camera": "Камера",
"burping": "Подригивање",
"skateboard": "Скејтборд",
"hiccup": "Штуцање",
"fart": "Прдеж",
"hands": "Руке",
"finger_snapping": "Пуцање прстима",
"clapping": "Пљескање",
"heartbeat": "Откуцаји срца",
"cheering": "Навијање",
"applause": "Аплауз",
"chatter": "Жамор",
"crowd": "Маса",
"children_playing": "Деца се играју"
}

View File

@ -23,10 +23,57 @@
"pm": "pm",
"am": "am",
"yr": "{{time}}god",
"year_one": "1,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21...",
"year_few": "2,3,4,22,23,24,32,33,34,42,...",
"year_other": "",
"mo": "{{time}}mes"
"year_one": "{{time}} година",
"year_few": "{{time}} године",
"year_other": "{{time}} година",
"mo": "{{time}}mes",
"month_one": "{{time}} месец",
"month_few": "{{time}} месеца",
"month_other": "{{time}} месеци",
"d": "{{time}}d",
"day_one": "{{time}} дан",
"day_few": "{{time}} дана",
"day_other": "{{time}} дана",
"h": "{{time}}h",
"hour_one": "{{time}} сат",
"hour_few": "{{time}} сата",
"hour_other": "{{time}} сати",
"m": "{{time}}m",
"minute_one": "{{time}} минут",
"minute_few": "{{time}} минута",
"minute_other": "{{time}} минута",
"s": "{{time}}s",
"second_one": "{{time}} секунда",
"second_few": "{{time}} секунде",
"second_other": "{{time}} секунди",
"formattedTimestampHourMinute": {
"24hour": "HH:mm"
},
"formattedTimestampHourMinuteSecond": {
"12hour": "h:mm:ss aaa",
"24hour": "HH:mm:ss"
},
"formattedTimestampMonthDayHourMinute": {
"12hour": "MMM d, h:mm aaa",
"24hour": "MMM d, HH:mm"
},
"formattedTimestampMonthDayYear": {
"12hour": "MMM d, yyyy",
"24hour": "MMM d, yyyy"
},
"formattedTimestampMonthDayYearHourMinute": {
"12hour": "MMM d yyyy, h:mm aaa",
"24hour": "MMM d yyyy, HH:mm"
},
"formattedTimestamp": {
"12hour": "MMM d, h:mm:ss aaa",
"24hour": "MMM d, HH:mm:ss"
},
"formattedTimestampMonthDay": "MMM d",
"formattedTimestampFilename": {
"12hour": "MM-dd-yy-h-mm-ss-a",
"24hour": "MM-dd-yy-HH-mm-ss"
}
},
"readTheDocumentation": "Прочитајте документацију"
}

View File

@ -10,6 +10,7 @@
"loginFailed": "Prijava nije uspela",
"unknownError": "Nepoznata greška. Proveri logove.",
"webUnknownError": "Nepoznata greška. Proveri logove u konzoli."
}
},
"firstTimeLogin": "Пријављујете се по први пут? Креденцијали су одштампани у логовима Фригејта."
}
}

View File

@ -14,8 +14,73 @@
"label": "Ime",
"placeholder": "Unesite ime…",
"errorMessage": {
"mustLeastCharacters": "Naziv grupe kamera mora imati bar 2 karaktera."
"mustLeastCharacters": "Naziv grupe kamera mora imati bar 2 karaktera.",
"exists": "Група камера са тим именом већ постоји.",
"nameMustNotPeriod": "Назив групе камера не сме да садржи запету.",
"invalid": "Назив групе камера није исправан."
}
},
"cameras": {
"label": "Камере",
"desc": "Изаберите камере за ову групу."
},
"icon": "Иконица",
"success": "Група камера ({{name}}) је сачувана.",
"camera": {
"birdseye": "Птичије око",
"setting": {
"label": "Подешавање стримовања камере",
"title": "{{cameraName}} подешавања стримовања",
"desc": "Промена опција за стримовање уживо за контролну таблу групе камера. <em>Ова подешавања су везана за уређај/браузер.</em>",
"audioIsAvailable": "Звук је доступан у овом стриму",
"audioIsUnavailable": "Звук није доступан за овај стрим",
"audio": {
"tips": {
"title": "Звук мора бити излаз из ваше камере и подешен у go2rtc за овај стрим."
}
},
"stream": "Стрим",
"placeholder": "Изаберите стрим",
"streamMethod": {
"label": "Метод стриминга",
"placeholder": "Изаберите метод стриминга",
"method": {
"noStreaming": {
"label": "Нема стриминга",
"desc": "Слике камере ће бити ажуриране једном у минуту и неће се приказати стриминг уживо."
},
"smartStreaming": {
"label": "Паметан стриминг (препоручено)",
"desc": "Паметан стриминг ће ажурирати слике камере једном у минуту, када нема детектоване активности, да би се уштедело на мрежном саобраћају и ресурсима. Када је детектована активност, слика ће аутоматски прећи на стриминг уживо."
},
"continuousStreaming": {
"label": "Непрекидно стримовање",
"desc": {
"title": "Слика камере ће увек бити стрим уживо када је видљива на контролној табли, чак и када активност није детектована.",
"warning": "Непрекидно стримовање може проузроковати високу употребу мрежу и проблеме са перформансама. Користити опрезно."
}
}
}
},
"compatibilityMode": {
"label": "Режим компатибилности",
"desc": "Омогућите ову опцију само ако репродукција стрима уживо на камери приказује обојене артифекте и има дијагоналну линију на десној страни слице."
}
}
}
},
"debug": {
"options": {
"label": "Подешавања",
"title": "Опције",
"showOptions": "Приказ опција",
"hideOptions": "Скривање опција"
},
"boundingBox": "Оквир",
"timestamp": "Временски тренутак",
"zones": "Зоне",
"mask": "Маска",
"motion": "Покрет",
"regions": "Региони"
}
}

View File

@ -16,9 +16,103 @@
},
"review": {
"question": {
"ask_a": "Da li je ovaj objekat <code>{{label}}</code>?"
"ask_a": "Da li je ovaj objekat <code>{{label}}</code>?",
"label": "Потврдите ову ознаку за Фригејт+",
"ask_an": "Да ли је овај објекат <code>{{label}}</code>?",
"ask_full": "Да ли је овај објекат <code>{{untranslatedLabel}}</code> ({{translatedLabel}})?"
},
"state": {
"submitted": "Послато"
}
}
},
"video": {
"viewInHistory": "Преглед у историји"
}
},
"export": {
"time": {
"fromTimeline": "Изаберите са временске линије",
"lastHour_one": "Последњи {{count}} сат",
"lastHour_few": "Последња {{count}} сата",
"lastHour_other": "Последњих {{count}} сати",
"custom": "Прилагођено",
"start": {
"title": "Почетно време",
"label": "Изаберите почетно време"
},
"end": {
"title": "Коначно време",
"label": "Изаберите завршно време"
}
},
"name": {
"placeholder": "Назив извоза"
},
"select": "Избор",
"export": "Извоз",
"selectOrExport": "Избор или извоз",
"toast": {
"success": "Извоз је успешно започет. Прегледајте фајл на страници са извозима.",
"view": "Преглед",
"error": {
"failed": "Неуспешан почетак извоза: {{error}}",
"endTimeMustAfterStartTime": "Завршно време мора бити након почетног времена",
"noVaildTimeSelected": "Није изабран валидан временски распон"
}
},
"fromTimeline": {
"saveExport": "Чување извоза",
"previewExport": "Преглед извоза"
}
},
"streaming": {
"label": "Стрим",
"restreaming": {
"disabled": "Поновни стриминг није омогућен за ову камеру.",
"desc": {
"title": "Подесите go2rtc за додатне опције репродукције слике и звука уживо за ову камеру."
}
},
"showStats": {
"label": "Приказ статистике стримовања",
"desc": "Омогућите ову опцију за приказ статистике стримовања као надслој на преноса са камере."
},
"debugView": "Приказ за дебаговање"
},
"search": {
"saveSearch": {
"label": "Сачувати претрагу",
"desc": "Обезбедите назив за ову сачувану претрагу.",
"placeholder": "Унесите име за вашу претрагу",
"overwrite": "{{searchName}} већ постоји. Чување ће преписати постојећу вредност.",
"success": "Претрага ({{searchName}}) је сачувана.",
"button": {
"save": {
"label": "Чување ове претраге"
}
}
}
},
"recording": {
"confirmDelete": {
"title": "Потврдите брисање",
"desc": {
"selected": "Да ли сте сигурни да желите да обришете све видео снимке повезане са овом ставком? <br /><br /> Држите притиснут <em>Shift</em> тастер да прескочите овај дијалог у будућности."
},
"toast": {
"success": "Видео снимак повезан са изабраним ставкама за преглед успешно је обрисан.",
"error": "Неуспешно брисање: {{error}}"
}
},
"button": {
"export": "Извоз",
"markAsReviewed": "Означити као прегледано",
"markAsUnreviewed": "Означити као непрегледано",
"deleteNow": "Обрисати сада"
}
},
"imagePicker": {
"selectImage": "Избор сличице за праћени објекат"
}
}

View File

@ -1,7 +1,7 @@
{
"filter": "Filter",
"labels": {
"label": "Labele",
"label": "Ознаке",
"all": {
"title": "Sve oznake",
"short": "Oznake"
@ -15,5 +15,126 @@
"title": "Sve zone",
"short": "Zone"
}
},
"classes": {
"label": "Класе",
"all": {
"title": "Све класе"
},
"count_one": "{{count}} класа",
"count_other": "{{count}} класа"
},
"dates": {
"selectPreset": "Изаберите предефинисано…",
"all": {
"title": "Сви датуми",
"short": "Датуми"
}
},
"more": "Још филтера",
"reset": {
"label": "Ресетовање филтера на подразумеване вредности"
},
"timeRange": "Распон времена",
"subLabels": {
"label": "Под-ознаке",
"all": "Све под-ознаке"
},
"attributes": {
"label": "Атрибути класификације",
"all": "Сви атрибути"
},
"score": "Резултат",
"estimatedSpeed": "Процењена брзина ({{unit}})",
"features": {
"label": "Особине",
"hasSnapshot": "Постоји снимак",
"hasVideoClip": "Постоји видео клип",
"submittedToFrigatePlus": {
"label": "Послато у Frigate+",
"tips": "Прво морате филтрирати праћене објекте који имају снимак. <br /><br />Праћени објекти без снимка не могу бити послати у Frigate+."
}
},
"sort": {
"label": "Сортирање",
"dateAsc": "Датум (растући)",
"dateDesc": "Дату (опадајући)",
"scoreAsc": "Резултат објекта (растући)",
"scoreDesc": "Резултат објекта (опадајући)",
"speedAsc": "Процењена брзина (растућа)",
"speedDesc": "Процењена брзина (опадајућа)",
"relevance": "Значај"
},
"cameras": {
"label": "Филтери камера",
"all": {
"title": "Све камере",
"short": "Камере"
}
},
"review": {
"showReviewed": "Прикажи прегледане"
},
"motion": {
"showMotionOnly": "Прикажи само покрете"
},
"explore": {
"settings": {
"title": "Подешавања",
"defaultView": {
"title": "Подразумевани приказ",
"desc": "Када нису изабрани филтери приказати сажето најскорије праћене објекте по ознакама или приказати нефилтрирану табелу.",
"summary": "Сумарно",
"unfilteredGrid": "Нефилтрирана табела"
},
"gridColumns": {
"title": "Колоне табеле",
"desc": "Изаберите број колона табеле које ће се приказати."
},
"searchSource": {
"label": "Извор претраге",
"desc": "Изаберите да ли да се претражују сличице или описи праћених објеката.",
"options": {
"thumbnailImage": "Сличица",
"description": "Опис"
}
}
},
"date": {
"selectDateBy": {
"label": "Изаберите датум по ком ће се филтрирати"
}
}
},
"logSettings": {
"label": "Ниво логовања филтера",
"filterBySeverity": "Филтрирање логова по озбиљности",
"loading": {
"title": "Учитавање",
"desc": "Када се лог панел скролује до дна, нови записи се аутоматски приказују чим су додати."
},
"disableLogStreaming": "Искључивање ажурирања лога",
"allLogs": "Сви логови"
},
"trackedObjectDelete": {
"title": "Потврдите брисање",
"desc": "Брисање ових {{objectLength}} праћених објеката уклања снимке, све сачуване ембединге, као и све повезанезаписе везане за животни циклус објекта. Снимци праћених објеката у Историји <em>НЕЋЕ</em> бити избрисани.<br /><br />Да ли сте сигурни да желите да наставите?<br /><br />Држите притиснут <em>Shift</em> тастер да прескочите овај дијалог у будућности.",
"toast": {
"success": "Праћени објекти су успешно обрисани.",
"error": "Брисање праћених објеката није успело: {{errorMessage}}"
}
},
"zoneMask": {
"filterBy": "Филтрирање по маскама зоне"
},
"recognizedLicensePlates": {
"title": "Препознате регистарске таблице",
"loadFailed": "Учитавање препознатих регистарских таблица није успело.",
"loading": "Учитавање препознатих регистарских таблица…",
"placeholder": "Претражите регистарске таблице…",
"noLicensePlatesFound": "Регистарске таблице нису пронађене.",
"selectPlatesFromList": "Изаберите једне или више таблица са листе.",
"selectAll": "Изаберите све",
"clearAll": "Почистите све"
}
}

View File

@ -8,6 +8,44 @@
},
"livePlayerRequiredIOSVersion": "Za ovaj tip prenosa uživo potreban je iOS 17.1 ili noviji.",
"streamOffline": {
"title": "Strim je oflajn"
"title": "Strim je oflajn",
"desc": "Ни један фрејм није добијен од {{cameraName}} <code>detect</code>, проверите лог грешака"
},
"cameraDisabled": "Камера је онемогућена",
"stats": {
"streamType": {
"title": "Тип стрима:",
"short": "Тип"
},
"bandwidth": {
"title": "Пропусни опсег:",
"short": "Ширина опсега"
},
"latency": {
"title": "Кашњење:",
"value": "{{seconds}} секунди",
"short": {
"title": "Кашњење",
"value": "{{seconds}}s"
}
},
"totalFrames": "Укупно фрејмова:",
"droppedFrames": {
"title": "Изгубљени фрејмови:",
"short": {
"title": "Испуштено",
"value": "{{droppedFrames}} фрејмова"
}
},
"decodedFrames": "Декодовани фрејмови:",
"droppedFrameRate": "Однос испуштених фрејмова:"
},
"toast": {
"success": {
"submittedFrigatePlus": "Фрејм је успешно послат у Фригејт+"
},
"error": {
"submitFrigatePlusFailed": "Неуспешно слање фрејма у Фригејт+"
}
}
}

View File

@ -6,5 +6,49 @@
"airplane": "Avion",
"bus": "Autobus",
"train": "Voz",
"boat": "Brod"
"boat": "Brod",
"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": "Спортска лопта",
"baseball_bat": "Палица за бејзбол",
"baseball_glove": "Рукавица за бејзбол",
"kite": "Змај",
"skateboard": "Скејтборд",
"surfboard": "Даска за сурфовање",
"tennis_racket": "Тениски рекет",
"bottle": "Боца",
"plate": "Тањир",
"wine_glass": "Чаша за вино",
"cup": "Шоља",
"fork": "Виљушка",
"knife": "Нож",
"spoon": "Кашика",
"bowl": "Посуда",
"banana": "Банана",
"apple": "Јабука"
}

View File

@ -1 +1,90 @@
{}
{
"documentTitle": "Класификациони модели - Фригејт",
"details": {
"scoreInfo": "Резултат представља просечно поверење у класификацију код свих откривања овог објекта.",
"none": "Ниједан",
"unknown": "Непознато"
},
"button": {
"deleteClassificationAttempts": "Брисање класификационих слика",
"renameCategory": "Преименовање класе",
"deleteCategory": "Брисање класе",
"deleteImages": "Брисање слика",
"trainModel": "Модел за тренирање",
"addClassification": "Додавање класификације",
"deleteModels": "Брисање модела",
"editModel": "Уређивање модела"
},
"tooltip": {
"trainingInProgress": "Модел се тренутно тренира",
"noNewImages": "Нема нових слика за тренирање. Класификујте више слика прво у датасету.",
"noChanges": "Нема измена у датасету од последњег тренирања.",
"modelNotReady": "Модел није спреман за тренирање"
},
"toast": {
"success": {
"deletedCategory": "Обрисана класа",
"deletedImage": "Обрисане слике",
"deletedModel_one": "Успешно је обрисан {{count}} модел",
"deletedModel_few": "Успешно су обрисана {{count}} модела",
"deletedModel_other": "Успешно је обрисано {{count}} модела",
"categorizedImage": "Успешно класификована слика",
"trainedModel": "Успешно трениран модел.",
"trainingModel": "Тренирање модела је успешно започето.",
"updatedModel": "Успешно је ажурирана конфигурација модела",
"renamedCategory": "Класа је успешно преименована у {{name}}"
},
"error": {
"deleteImageFailed": "Неуспешно брисање: {{errorMessage}}",
"deleteCategoryFailed": "Неуспешно брисање класе: {{errorMessage}}",
"deleteModelFailed": "Неуспешно брисање модела: {{errorMessage}}",
"categorizeFailed": "Неуспешна категоризација слике: {{errorMessage}}",
"trainingFailed": "Неуспешно тренирање модела. Проверите Фригејт логове за детаље.",
"trainingFailedToStart": "Неуспешан почетак тренирања модела: {{errorMessage}}",
"updateModelFailed": "Неуспешно ажурирање модела: {{errorMessage}}",
"renameCategoryFailed": "Неуспешно преименовање класе: {{errorMessage}}"
}
},
"train": {
"titleShort": "Скорашње",
"title": "Скорашње класификације"
},
"deleteCategory": {
"title": "Брисање класе",
"desc": "Да ли сте сигурни да желите да обришете класу {{name}}? Тиме ће трајно бити обрисане и све придружене слике и биће потребно поновно тренирање модела.",
"minClassesTitle": "Није могуће обрисати класу",
"minClassesDesc": "Класификациони модел мора имати најмање две класе. Додајте нову класу пре него што избришете ову."
},
"deleteModel": {
"title": "Брисање класификационог модела",
"single": "Да ли сте сигурни да желите да обришете {{name}}? Ово ће трајно обрисати све повезане податке, укључујући слике и податке за тренирање. Ова акција се не може накнадно опозвати.",
"desc_one": "Да ли сте сигурни да желите да обришете {{count}} модел? Ово ће трајно обрисати све повезане податке, укључујући и слике и податке за тренирање. Ова акција не може бити опозвана накнадно.",
"desc_few": "Да ли сте сигурни да желите да обришете {{count}} модела? Ово ће трајно обрисати све повезане податке, укључујући и слике и податке за тренирање. Ова акција не може бити опозвана накнадно.",
"desc_other": "Да ли сте сигурни да желите да обришете {{count}} модела? Ово ће трајно обрисати све повезане податке, укључујући и слике и податке за тренирање. Ова акција не може бити опозвана накнадно."
},
"edit": {
"title": "Уређивање класификационог модела",
"descriptionState": "Уређивање класа за класификациони модел овог стања. Измене ће захтевати поновно тренирање модела.",
"descriptionObject": "Уређивање типа објекта и типа касификације за овај објекат класификационог модела.",
"stateClassesInfo": "Напомена: Измена класа стања захтева поновно тренирање модела са ажурираним класама."
},
"deleteDatasetImages": {
"title": "Брисање слика датасета",
"desc_one": "Да ли сте сигурни да желите да обришете {{count}} слику из {{dataset}}? Ова акција се не може накнадно опозвати и захтева поновно тренирање модела.",
"desc_few": "Да ли сте сигурни да желите да обришете {{count}} слике из {{dataset}}? Ова акција се не може накнадно опозвати и захтева поновно тренирање модела.",
"desc_other": "Да ли сте сигурни да желите да обришете {{count}} слика из {{dataset}}? Ова акција се не може накнадно опозвати и захтева поновно тренирање модела."
},
"deleteTrainImages": {
"title": "Брисање слика за тренирање",
"desc_one": "Да ли сте сигурни да желите да избришете {{count}} слику? Ова акција не може бити накнадно опозвана.",
"desc_few": "Да ли сте сигурни да желите да избришете {{count}} слике? Ова акција не може бити накнадно опозвана.",
"desc_other": "Да ли сте сигурни да желите да избришете {{count}} слика? Ова акција не може бити накнадно опозвана."
},
"renameCategory": {
"title": "Преименовање класе",
"desc": "Унесите ново име за {{name}}. Мораћете поново да тренирате модел да би промена имала ефекта."
},
"description": {
"invalidName": "Неисправно име. Имена могу да садрже само слова, цифре, размаке, апострофе, доње црте и повлаке."
}
}

View File

@ -8,6 +8,11 @@
"toast": {
"success": {
"copyToClipboard": "Konfiguracija je kopirana u clipboard."
},
"error": {
"savingError": "Грешка при чувању конфигурације"
}
}
},
"safeConfigEditor": "Уређивач конфигурације (безбедан режим)",
"safeModeDescription": "Фригејт је у безбедном режиму због грешке при провери исправности конфигурације."
}

View File

@ -9,6 +9,57 @@
"empty": {
"alert": "Nema upozorenja za pregled",
"detection": "Nema detekcija za pregled",
"motion": "Nema podataka o pokretu"
}
"motion": "Nema podataka o pokretu",
"recordingsDisabled": {
"title": "Снимање мора бити омогућено",
"description": "Преглед ставки може бити креиран само за камеру када је омогућено снимање за њу."
}
},
"timeline": "Временска линија",
"timeline.aria": "Изаберите временску линију",
"zoomIn": "Зумирање",
"zoomOut": "Одзумирање",
"events": {
"label": "Догађаји",
"aria": "Изаберите догађаје",
"noFoundForTimePeriod": "Нису пронађени догађају у овом периоду."
},
"detail": {
"label": "Детаљ",
"noDataFound": "Нема детаљних података за преглед",
"aria": "Промена детаљности прегледа",
"trackedObject_one": "{{count}} објеката",
"trackedObject_other": "{{count}} објеката",
"noObjectDetailData": "Нема података о детаљима објекта.",
"settings": "Подешавање приказа детаља",
"alwaysExpandActive": {
"title": "Увек проширити активан",
"desc": "Увек прошири детаље кативног прегледа објекта, уколико су доступни."
}
},
"objectTrack": {
"trackedPoint": "Праћена тачка",
"clickToSeek": "Кликните да претражите у ово време"
},
"documentTitle": "Преглед - Фригејт",
"recordings": {
"documentTitle": "Снимци - Фригејт"
},
"calendarFilter": {
"last24Hours": "Последња 24 часа"
},
"markAsReviewed": "Означавање да је прегледано",
"markTheseItemsAsReviewed": "Означи ове ставке као прегледане",
"newReviewItems": {
"label": "Приказ нових ставки за прегледање",
"button": "Нове ставке за преглед"
},
"selected_one": "{{count}} изабрано",
"selected_other": "{{count}} изабрано",
"select_all": "Све",
"camera": "Камера",
"detected": "детектовано",
"normalActivity": "Нормално",
"needsReview": "Потребан је преглед",
"securityConcern": "Безбедносно питање"
}

View File

@ -7,7 +7,73 @@
"embeddingsReindexing": {
"context": "Istraživanje se može koristiti nakon što se završi reindeksiranje ugrađivanja praćenih objekata.",
"startingUp": "Pokretanje…",
"estimatedTime": "Procenjeno preostalo vreme:"
"estimatedTime": "Procenjeno preostalo vreme:",
"finishingShortly": "Завршава се ускоро",
"step": {
"thumbnailsEmbedded": "Угњеждене сличице: ",
"descriptionsEmbedded": "Угњеждени описи: ",
"trackedObjectsProcessed": "Обрађени праћени објекти: "
}
},
"downloadingModels": {
"context": "Фригејт преузима неопходне <em>embedding</em> моделе за подршку могућности Семантичке претраге. Ово може потрајати неколико минута, зависно од брзине Ваше мрежне везе.",
"setup": {
"visionModel": "Модел визије",
"visionModelFeatureExtractor": "Екстрактор особина модела визије",
"textModel": "Модел текста",
"textTokenizer": "Токенизатор текста"
},
"tips": {
"context": "Можда ћете желети да реиндексујете ембединге праћених објеката када модели буду преузети."
},
"error": "Дошло је до грешке. Проверите логове."
}
},
"details": {
"timestamp": "Временски тренутак"
},
"trackedObjectDetails": "Детаљи праћеног објекта",
"type": {
"details": "детаљи",
"snapshot": "снимак",
"thumbnail": "сличица",
"video": "видео",
"tracking_details": "детаљи праћења"
},
"trackingDetails": {
"title": "Детаљи праћења",
"noImageFound": "Нема слике за овај временски тренутак.",
"createObjectMask": "Креирање маске објекта",
"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": "Резултат"
}
},
"annotationSettings": {
"title": "Подешавања анотације",
"showAllZones": {
"title": "Приказ свих зона",
"desc": "Увек приказати зоне на фрејмовима у којима су објекти ушли у зону."
}
}
}
}

View File

@ -8,5 +8,16 @@
"title": "Preimenuj izvoz",
"desc": "Unesite novo ime za ovaj izvoz.",
"saveExport": "Sačuvaj izvoz"
},
"tooltip": {
"shareExport": "Дељење експорта",
"downloadVideo": "Преузимање видео-снимка",
"editName": "Уређивање имена",
"deleteExport": "Брисање извоза"
},
"toast": {
"error": {
"renameExportFailed": "Промена назива извоза није успела: {{errorMessage}}"
}
}
}

View File

@ -1,14 +1,96 @@
{
"description": {
"addFace": "Prođite kroz dodavanje nove kolekcije u biblioteku lica.",
"addFace": "Додавање нове колекције у библиотеку лица отпремањем прве слике.",
"placeholder": "Unesite ime za ovu kolekciju",
"invalidName": "Nevažeće ime. Imena mogu da sadrže samo slova, brojeve, razmake, apostrofe, donje crte i crtice."
"invalidName": "Неисправно име. Имена могу да садрже само слова, цифре, размаке, апострофе, доње црте и повлаке."
},
"details": {
"person": "Osoba",
"subLabelScore": "Sub Label Skor",
"scoreInfo": "Rezultat podoznake je otežan rezultat za sve prepoznate pouzdanosti lica, tako da se može razlikovati od rezultata prikazanog na snimku.",
"face": "Detalji lica",
"faceDesc": "Detalji praćenog objekta koji je generisao ovo lice"
"faceDesc": "Detalji praćenog objekta koji je generisao ovo lice",
"timestamp": "Временски тренутак",
"unknown": "Непознато"
},
"documentTitle": "Библиотека лица - Фригејт",
"uploadFaceImage": {
"title": "Отпремање слике лица",
"desc": "Орпремање слике за скенирање за лица и укључивање у {{pageToggle}}"
},
"collections": "Колекције",
"createFaceLibrary": {
"new": "Креирање новог лика",
"nextSteps": "За изградњу снажне основе: <li>Користите картицу \"Скорашња препознавања\" да бисте изабрали и тренирали на сликама за сваку од откривених особа.</li><li>За најбоље резултате фокусирајте се на фронталне слике; избегавајте тренирање на сликама где су лица приказана под углом.</li></ul>"
},
"steps": {
"faceName": "Унесите назив лица",
"uploadFace": "Отпремање слике лица",
"nextSteps": "Следећи кораци",
"description": {
"uploadFace": "Отпремите слику {{name}} која приказује његово/њено лице спреда. Слика не мора да садржи само лице."
}
},
"train": {
"title": "Скорашња препознавања",
"titleShort": "Скорашње",
"aria": "Изаберите скорашња препознавања",
"empty": "Нема скорашњих покушаја препознавања лица"
},
"deleteFaceLibrary": {
"title": "Брисање имена",
"desc": "Да ли сте сигурни да желите да обришете колекцију {{name}}? То ће трајно обрисати и сва придружена лица."
},
"deleteFaceAttempts": {
"title": "Обрисана лица",
"desc_one": "Да ли сте сигурни да желите да обришете {{count}} лице? Ова акција се не може опозвати накнадно.",
"desc_few": "Да ли сте сигурни да желите да обришете {{count}} лица? Ова акција се не може опозвати накнадно.",
"desc_other": "Да ли сте сигурни да желите да обришете {{count}} лица? Ова акција се не може опозвати накнадно."
},
"renameFace": {
"title": "Преименовање лица",
"desc": "Унесите ново име за {{name}}"
},
"button": {
"deleteFaceAttempts": "Брисање лица",
"addFace": "Додавање лица",
"renameFace": "Преименовање лица",
"deleteFace": "Брисање лица",
"uploadImage": "Отпремање слике",
"reprocessFace": "Поново обради лице"
},
"imageEntry": {
"validation": {
"selectImage": "Изаберите фајл са сликом."
},
"dropActive": "Превуците слику овде…",
"dropInstructions": "Превуците или пејстујте слику овде, или кликните за избор",
"maxSize": "Максимална величина: {{size}}MB"
},
"nofaces": "Нема доступних лица",
"trainFaceAs": "Тренирање лица као:",
"trainFace": "Тренирање лица",
"toast": {
"success": {
"uploadedImage": "Слика је успешно отпремљена.",
"addFaceLibrary": "{{name}} је успешно додат у библиотеку лица!",
"deletedFace_one": "Успешно је обрисано {{count}} лице.",
"deletedFace_few": "Успешно је обрисано {{count}} лица.",
"deletedFace_other": "Успешно је обрисано {{count}} лица.",
"deletedName_one": "{{count}} лице је успешно обрисано.",
"deletedName_few": "{{count}} лица су успешно обрисана.",
"deletedName_other": "{{count}} лица је успешно обрисано.",
"renamedFace": "Лице је успешно преименовано у {{name}}",
"trainedFace": "Лице је успешно истренирано.",
"updatedFaceScore": "Успешно је ажуриран резултат лица за {{name}} ({{score}})."
},
"error": {
"uploadingImageFailed": "Неуспешно отпремање слике: {{errorMessage}}",
"addFaceLibraryFailed": "Неуспешно постављање имена лица: {{errorMessage}}",
"deleteFaceFailed": "Неуспешно брисање: {{errorMessage}}",
"deleteNameFailed": "Неуспешно брисање имена: {{errorMessage}}",
"renameFaceFailed": "Неуспешна промена назива лица: {{errorMessage}}",
"trainFailed": "Неуспешно тренирање: {{errorMessage}}"
}
}
}

View File

@ -13,8 +13,101 @@
"ptz": {
"move": {
"clickMove": {
"label": "Kliknite na sliku da bi centrirali kameru"
"label": "Kliknite na sliku da bi centrirali kameru",
"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": "Онемогућивање снепшотова"
},
"snapshot": {
"takeSnapshot": "Преузимање тренутног снимка",
"noVideoSource": "Нема доступних извора за снепшот.",
"captureFailed": "Неуспешно прављење снепшота.",
"downloadStarted": "Преузимање снепшота је започето."
},
"audioDetect": {
"enable": "Омогућавање детектовања звука",
"disable": "Онемогућавање детекције звука"
},
"transcription": {
"enable": "Омогућавање транскрибовања звука уживо",
"disable": "Искључивање транскрибовања звука уживо"
},
"autotracking": {
"enable": "Омогућавање аутоматског праћења",
"disable": "Онемогућити аутоматско праћење"
},
"streamStats": {
"enable": "Приказ статистике стримовања",
"disable": "Скривање статистике стримовања"
},
"manualRecording": {
"title": "На захтев",
"tips": "Преузимање тренутног снепшота или ручно покретање догађаја засновано на подешавањима задржавања снимања ове камере.",
"playInBackground": {
"label": "Пустити у позадини",
"desc": "Укључите ову опцију да наставите стримовање када је плејер скривен."
},
"showStats": {
"label": "Приказ статистике"
},
"debugView": "Приказ за дебаговање",
"start": "Почетак снимања на захтев",
"started": "Ручно снимање на захтев је започето.",
"failedToStart": "Неуспешно покретање ручног снимања на захтев."
}
}

View File

@ -4,9 +4,70 @@
"searchFor": "Pretraži {{inputValue}}",
"button": {
"clear": "Obriši pretragu",
"save": "Sačuvaj pretragu",
"save": "Чување претраге",
"delete": "Izbrišite sačuvanu pretragu",
"filterInformation": "Filtriraj informacije",
"filterActive": "Aktivni filteri"
},
"trackedObjectId": "ID праћеног објекта",
"filter": {
"label": {
"cameras": "Камере",
"labels": "Ознаке",
"zones": "Зоне",
"sub_labels": "Под-ознаке",
"attributes": "Атрибути",
"search_type": "Тип претраге",
"time_range": "Временски распон",
"before": "Пре",
"after": "Након",
"min_score": "Најнижи резултат",
"max_score": "Најбољи резултат",
"min_speed": "Најнижа брзина",
"max_speed": "Највиша брзина",
"recognized_license_plate": "Препознате регистарске таблице",
"has_clip": "Има клип",
"has_snapshot": "Има снепшот"
},
"searchType": {
"thumbnail": "Сличица",
"description": "Опис"
},
"toast": {
"error": {
"beforeDateBeLaterAfter": "Датум 'пре' мора бити након датума 'после'.",
"afterDatebeEarlierBefore": "Датум 'после' мора бити пре датума 'пре'.",
"minScoreMustBeLessOrEqualMaxScore": "'min_score' мора бити нижи или један 'max_score'.",
"maxScoreMustBeGreaterOrEqualMinScore": "'max_score' мора бити већи или једнак од 'min_score'.",
"minSpeedMustBeLessOrEqualMaxSpeed": "'min_speed' мора бити мања или једнака 'max_speed'.",
"maxSpeedMustBeGreaterOrEqualMinSpeed": "'max_speed' мора бити већа или једнака 'min_speed'."
}
},
"tips": {
"title": "Како да се користе филтери за текст",
"desc": {
"text": "Филтери Вам помажу да сузите резултате претраге. Ево како да их користите у пољима за унос:",
"step1": "Откуцајте назив кључа филтера а затим две тачке (нпр. \"cameras:\").",
"step2": "Изаберите предложену или сопствену вредност.",
"step3": "Примените више филтера тако што ћете их додати један за другим са размаком између.",
"step4": "Филтери за датум (пре: и касније:) користе {{DateFormat}} формат.",
"step5": "Филтер за временски распон користи {{exampleTime}} формат.",
"step6": "Уклоните филтере кликом на 'x' поред њих.",
"exampleLabel": "Пример:"
}
},
"header": {
"currentFilterType": "Филтрирање вредности",
"noFilters": "Филтери",
"activeFilters": "Активни филтери"
}
},
"similaritySearch": {
"title": "Претрага сличности",
"active": "Претрага по сличности је активна",
"clear": "Почистити претрагу сличности"
},
"placeholder": {
"search": "Претрага…"
}
}

View File

@ -6,6 +6,82 @@
"enrichments": "Podešavanja obogaćivanja - Frigate",
"masksAndZones": "Uređivač maski i zona - Frigate",
"motionTuner": "Tjuner pokreta - Frigate",
"general": "Generalna podešavanja - Frigate"
"general": "Подењавања UI - Фригејт",
"cameraManagement": "Управљање камерама - Фригејт",
"cameraReview": "Преглед подешавања камере - Фригејт",
"object": "Дебаговање - Фригејт",
"frigatePlus": "Подешавања за Фригејт+ - Фригејт",
"notifications": "Подешавања обавештавања - Фригејт"
},
"menu": {
"ui": "UI",
"enrichments": "Обогаћивања",
"cameraManagement": "Управљање",
"cameraReview": "Преглед",
"masksAndZones": "Маске / Зоне",
"motionTuner": "Подешавач покрета",
"triggers": "Окидачи",
"debug": "Дебаговање",
"users": "Корисници",
"roles": "Улоге",
"notifications": "Нотификације",
"frigateplus": "Фригејт+"
},
"dialog": {
"unsavedChanges": {
"title": "Имате несачуване измене.",
"desc": "Да ли желите да сачувате измене пре наставка?"
}
},
"cameraSetting": {
"camera": "Камера",
"noCamera": "Нема камере"
},
"general": {
"title": "UI подешавања",
"liveDashboard": {
"title": "Контролна табла уживо",
"automaticLiveView": {
"label": "Аутоматси преглед уживо",
"desc": "Аутоматско пребацивање на преглед камере уживо када је активност детектована. Онемогућавање ове опције доводи до тога да се слике камере на контролној тапли ажурирају једном у минуту."
},
"playAlertVideos": {
"label": "Репродукуј видео за узбуну",
"desc": "Скорашњa упозорења се на контролној табли подразумевано репродукују као мали видеи који се понављају. Онемогућите ову опцију за приказивање само статичке слике скорашњих упозорења (на овом уређају/браузеру)."
},
"displayCameraNames": {
"label": "Увек приказивати називе камера",
"desc": "Увек приказивати називе камера у чипу у репродукцији уживо више камера на контролној табли."
},
"liveFallbackTimeout": {
"desc": "Када стрим високог квалитета није доступан за камеру, спусти се на режим споре мреже након оволико секунди. Подразумевано 3."
}
},
"storedLayouts": {
"title": "Сачувани распореди",
"desc": "Распоред камера у групи може бити превлачен и може му се променити величина. Позиције су складиштене у локалном Веб браузеру.",
"clearAll": "Чишћење свих распореда"
},
"cameraGroupStreaming": {
"title": "Подешавање стримовања за групу камера",
"desc": "Подешавања стримовања за сваку групу камера чувају се у локалном браузеру.",
"clearAll": "Чишћење свих подешавања стримовања"
},
"recordingsViewer": {
"title": "Преглед снимака",
"defaultPlaybackRate": {
"label": "Подразумевана брзина репродукције",
"desc": "Подразумевана брзина репродукције за снимке."
}
},
"calendar": {
"title": "Календар",
"firstWeekday": {
"label": "Први дан у недељи",
"desc": "Дан којим недеље у календару прегледа почињу.",
"sunday": "Недеља",
"monday": "Понедељак"
}
}
}
}

View File

@ -2,7 +2,7 @@
"documentTitle": {
"cameras": "Statusi kamera - Frigate",
"storage": "Statistika skladištenja - Frigate",
"general": "Opšta statistika - Frigate",
"general": "Општа статистика - Фригејт",
"enrichments": "Statistika obogaćivanja - Frigate",
"logs": {
"frigate": "Frigate logovi - Frigate",
@ -10,5 +10,83 @@
"nginx": "Nginx logovi - Frigate"
}
},
"title": "Sistem"
"title": "Sistem",
"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-а",
"cpuUsageInformation": "CPU коришћен за припрему улаза и излаза података у/из модела детекције. Ова вредност не мери коришћење инференције, чак ни када користи GPU или акселератор.",
"memoryUsage": "Употреба меморије од стране детектора"
},
"hardwareInfo": {
"title": "Информације о хардверу",
"gpuUsage": "Употреба GPU",
"gpuMemory": "GPU меморија",
"gpuEncoder": "GPU енкодер",
"gpuDecoder": "GPU декодер",
"gpuInfo": {
"vainfoOutput": {
"title": "Vainfo Output",
"returnCode": "Повратни код: {{code}}",
"processOutput": "Обрада излаза:",
"processError": "Грешка у обради:"
},
"nvidiaSMIOutput": {
"title": "Nvidia SMI излаз",
"name": "Назив: {{name}}",
"driver": "Драјвер: {{driver}}",
"cudaComputerCapability": "Способност CUDA рачунања: {{cuda_compute}}",
"vbios": "VBios Info: {{vbios}}"
},
"closeInfo": {
"label": "Затварање GPU информација"
},
"copyInfo": {
"label": "Копирање GPU ифнормација"
},
"toast": {
"success": "Копиране су GPU информације у клипборд"
}
},
"npuUsage": "Употреба NPU",
"npuMemory": "NPU меморија",
"intelGpuWarning": {
"title": "Упозорење за Intel GPU статистику",
"message": "GPU статистика није доступна",
"description": "Ово је познати баг у алатима за извештавање статистике код Intel GPU (intel_gpu_top) где се јавља пуцање и враћа 0% као GPU искоришћење, чак и у случајевима када хардверска акцелерација и детектовање објекта регуларно раде на (i)GPU. Ово није баг у Фригејту. Можете рестартовати хост да привремено поправите проблем и потврдите да GPU ради исправно. Ово не утиче на перформансе."
}
},
"otherProcesses": {
"title": "Остали процеси",
"processCpuUsage": "Процесна употреба CPU",
"processMemoryUsage": "Процесна употреба меморије"
}
}
}

View File

@ -0,0 +1,3 @@
{
"speech": "So'zlashuv"
}

View File

@ -0,0 +1,5 @@
{
"time": {
"untilForTime": "{{time}} vaqtgacha"
}
}

View File

@ -0,0 +1,5 @@
{
"form": {
"user": "Foydalanuvchi nomi"
}
}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1,5 @@
{
"restart": {
"title": "Frigate dasturini qayta ishga tushirishga aminmisiz?"
}
}

View File

@ -0,0 +1,3 @@
{
"filter": "Filtr"
}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1,7 @@
{
"button": {
"downloadVideo": {
"label": "Videoni yuklab olish"
}
}
}

View File

@ -0,0 +1,3 @@
{
"noRecordingsFoundForThisTime": "Ushbu vaqt uchun hech qanday qayd mavjud emas"
}

View File

@ -0,0 +1,3 @@
{
"person": "Shaxs"
}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1,3 @@
{
"documentTitle": "Frigate dasturi bilan tanishish"
}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1,3 @@
{
"filter": "Filtr"
}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -62,5 +62,6 @@
},
"normalActivity": "正常",
"needsReview": "待審核",
"securityConcern": "安全隱憂"
"securityConcern": "安全隱憂",
"select_all": "全選"
}

View File

@ -268,7 +268,7 @@ export default function CreateTriggerDialog({
<FormItem className="flex flex-row items-center justify-between">
<div className="space-y-0.5">
<FormLabel className="text-base">
{t("enabled", { ns: "common" })}
{t("button.enabled", { ns: "common" })}
</FormLabel>
<div className="text-sm text-muted-foreground">
{t("triggers.dialog.form.enabled.description")}
@ -394,7 +394,10 @@ export default function CreateTriggerDialog({
</FormLabel>
<div className="space-y-2">
{availableActions.map((action) => (
<div key={action} className="flex items-center space-x-2">
<label
key={action}
className="flex cursor-pointer items-center space-x-2"
>
<FormControl>
<Checkbox
checked={form
@ -416,10 +419,10 @@ export default function CreateTriggerDialog({
}}
/>
</FormControl>
<FormLabel className="text-sm font-normal">
<span className="text-sm font-normal">
{t(`triggers.actions.${action}`)}
</FormLabel>
</div>
</span>
</label>
))}
</div>
<FormDescription>

View File

@ -142,7 +142,10 @@ export default function Step3ThresholdAndActions({
<FormLabel>{t("triggers.dialog.form.actions.title")}</FormLabel>
<div className="space-y-2">
{availableActions.map((action) => (
<div key={action} className="flex items-center space-x-2">
<label
key={action}
className="flex cursor-pointer items-center space-x-2"
>
<FormControl>
<Checkbox
checked={form
@ -164,10 +167,10 @@ export default function Step3ThresholdAndActions({
}}
/>
</FormControl>
<FormLabel className="text-sm font-normal">
<span className="text-sm font-normal">
{t(`triggers.actions.${action}`)}
</FormLabel>
</div>
</span>
</label>
))}
</div>
<FormDescription>
@ -197,9 +200,7 @@ export default function Step3ThresholdAndActions({
{isLoading && <ActivityIndicator className="mr-2 size-5" />}
{isLoading
? t("button.saving", { ns: "common" })
: t("triggers.dialog.form.save", {
defaultValue: "Save Trigger",
})}
: t("button.save", { ns: "common" })}
</Button>
</div>
</form>

View File

@ -206,7 +206,7 @@ function Exports() {
>
{Object.values(exports).map((item) => (
<ExportCard
key={item.name}
key={item.id}
className={
search == "" || filteredExports.includes(item) ? "" : "hidden"
}

View File

@ -1,6 +1,7 @@
import { useCallback, useEffect, useMemo, useState } from "react";
import { Trans, useTranslation } from "react-i18next";
import { Toaster, toast } from "sonner";
import { toast } from "sonner";
import { Toaster } from "@/components/ui/sonner";
import useSWR from "swr";
import axios from "axios";
import { Button } from "@/components/ui/button";
@ -598,7 +599,7 @@ export default function TriggerView({
date_style: "medium",
},
)
: "Never"}
: t("never", { ns: "common" })}
</span>
{trigger_status?.triggers[trigger.name]
?.triggering_event_id && (
@ -663,7 +664,9 @@ export default function TriggerView({
<TableHeader className="sticky top-0 bg-muted/50">
<TableRow>
<TableHead className="w-4"></TableHead>
<TableHead>{t("name", { ns: "common" })}</TableHead>
<TableHead>
{t("name", { ns: "triggers.table.name" })}
</TableHead>
<TableHead>{t("triggers.table.type")}</TableHead>
<TableHead>
{t("triggers.table.lastTriggered")}
@ -759,7 +762,7 @@ export default function TriggerView({
date_style: "medium",
},
)
: "Never"}
: t("time.never", { ns: "common" })}
</span>
{trigger_status?.triggers[trigger.name]
?.triggering_event_id && (