Compare commits

..
11 Commits
Author SHA1 Message Date
Josh HawkinsandGitHub c2f8de94e8 Add languages (#19447) 2025-08-10 06:27:47 -06:00
f46560d2bf Translated using Weblate (Dutch)
Currently translated at 100.0% (352 of 352 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-settings/nl/
Translation: Frigate NVR/views-settings
2025-08-10 06:24:00 -06:00
a1acb504ee Translated using Weblate (Hungarian)
Currently translated at 100.0% (352 of 352 strings)

Translated using Weblate (Hungarian)

Currently translated at 100.0% (24 of 24 strings)

Translated using Weblate (Hungarian)

Currently translated at 100.0% (50 of 50 strings)

Translated using Weblate (Hungarian)

Currently translated at 100.0% (183 of 183 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Zsolt Fojtyik <zsozso830316@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/hu/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/hu/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/hu/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/hu/
Translation: Frigate NVR/common
Translation: Frigate NVR/components-dialog
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-settings
2025-08-10 06:24:00 -06:00
3d79eef227 Translated using Weblate (Romanian)
Currently translated at 100.0% (114 of 114 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (352 of 352 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (115 of 115 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (66 of 66 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (50 of 50 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (118 of 118 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (427 of 427 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: lukasig <lukasig@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/ro/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/ro/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/ro/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/objects/ro/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/ro/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/ro/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/ro/
Translation: Frigate NVR/audio
Translation: Frigate NVR/components-dialog
Translation: Frigate NVR/components-filter
Translation: Frigate NVR/objects
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2025-08-10 06:24:00 -06:00
efe0d2a931 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (114 of 114 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (352 of 352 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (48 of 48 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (62 of 62 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (66 of 66 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (50 of 50 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (427 of 427 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 88.5% (378 of 427 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 96.5% (340 of 352 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (62 of 62 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (115 of 115 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (25 of 25 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (183 of 183 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 88.5% (378 of 427 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 59.3% (209 of 352 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 59.3% (209 of 352 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (183 of 183 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (183 of 183 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 50.5% (216 of 427 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 50.5% (216 of 427 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Marcelo Popper Costa <marcelo_popper@hotmail.com>
Co-authored-by: Rogério Mendes <rogeriomendes.mg@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-player/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-search/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/pt_BR/
Translation: Frigate NVR/audio
Translation: Frigate NVR/common
Translation: Frigate NVR/components-dialog
Translation: Frigate NVR/components-filter
Translation: Frigate NVR/components-player
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-facelibrary
Translation: Frigate NVR/views-search
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2025-08-10 06:24:00 -06:00
cbd5bdfd88 Translated using Weblate (Galician)
Currently translated at 6.1% (7 of 114 strings)

Translated using Weblate (Galician)

Currently translated at 6.1% (7 of 114 strings)

Translated using Weblate (Galician)

Currently translated at 1.9% (7 of 352 strings)

Translated using Weblate (Galician)

Currently translated at 1.9% (7 of 352 strings)

Translated using Weblate (Galician)

Currently translated at 14.5% (7 of 48 strings)

Translated using Weblate (Galician)

Currently translated at 14.5% (7 of 48 strings)

Translated using Weblate (Galician)

Currently translated at 83.3% (5 of 6 strings)

Translated using Weblate (Galician)

Currently translated at 8.0% (5 of 62 strings)

Translated using Weblate (Galician)

Currently translated at 8.0% (5 of 62 strings)

Translated using Weblate (Galician)

Currently translated at 66.6% (6 of 9 strings)

Translated using Weblate (Galician)

Currently translated at 66.6% (6 of 9 strings)

Translated using Weblate (Galician)

Currently translated at 75.0% (6 of 8 strings)

Translated using Weblate (Galician)

Currently translated at 75.0% (6 of 8 strings)

Translated using Weblate (Galician)

Currently translated at 24.0% (6 of 25 strings)

Translated using Weblate (Galician)

Currently translated at 24.0% (6 of 25 strings)

Translated using Weblate (Galician)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Galician)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Galician)

Currently translated at 14.0% (7 of 50 strings)

Translated using Weblate (Galician)

Currently translated at 14.0% (7 of 50 strings)

Translated using Weblate (Galician)

Currently translated at 25.0% (6 of 24 strings)

Translated using Weblate (Galician)

Currently translated at 25.0% (6 of 24 strings)

Translated using Weblate (Galician)

Currently translated at 13.5% (16 of 118 strings)

Translated using Weblate (Galician)

Currently translated at 13.5% (16 of 118 strings)

Translated using Weblate (Galician)

Currently translated at 66.6% (6 of 9 strings)

Translated using Weblate (Galician)

Currently translated at 66.6% (6 of 9 strings)

Translated using Weblate (Galician)

Currently translated at 8.7% (7 of 80 strings)

Translated using Weblate (Galician)

Currently translated at 8.7% (7 of 80 strings)

Translated using Weblate (Galician)

Currently translated at 3.9% (17 of 427 strings)

Translated using Weblate (Galician)

Currently translated at 3.9% (17 of 427 strings)

Translated using Weblate (Galician)

Currently translated at 5.2% (6 of 115 strings)

Translated using Weblate (Galician)

Currently translated at 5.2% (6 of 115 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (2 of 2 strings)

Translated using Weblate (Galician)

Currently translated at 17.3% (8 of 46 strings)

Translated using Weblate (Galician)

Currently translated at 17.3% (8 of 46 strings)

Translated using Weblate (Galician)

Currently translated at 4.9% (9 of 183 strings)

Translated using Weblate (Galician)

Currently translated at 4.9% (9 of 183 strings)

Translated using Weblate (Galician)

Currently translated at 0.8% (1 of 114 strings)

Translated using Weblate (Galician)

Currently translated at 0.2% (1 of 352 strings)

Translated using Weblate (Galician)

Currently translated at 4.1% (2 of 48 strings)

Translated using Weblate (Galician)

Currently translated at 50.0% (3 of 6 strings)

Translated using Weblate (Galician)

Currently translated at 3.2% (2 of 62 strings)

Translated using Weblate (Galician)

Currently translated at 22.2% (2 of 9 strings)

Translated using Weblate (Galician)

Currently translated at 25.0% (2 of 8 strings)

Translated using Weblate (Galician)

Currently translated at 8.0% (2 of 25 strings)

Translated using Weblate (Galician)

Currently translated at 3.0% (2 of 66 strings)

Translated using Weblate (Galician)

Currently translated at 4.0% (2 of 50 strings)

Translated using Weblate (Galician)

Currently translated at 8.3% (2 of 24 strings)

Translated using Weblate (Galician)

Currently translated at 1.6% (2 of 118 strings)

Translated using Weblate (Galician)

Currently translated at 22.2% (2 of 9 strings)

Translated using Weblate (Galician)

Currently translated at 2.5% (2 of 80 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (2 of 2 strings)

Translated using Weblate (Galician)

Currently translated at 0.7% (3 of 427 strings)

Translated using Weblate (Galician)

Currently translated at 1.7% (2 of 115 strings)

Translated using Weblate (Galician)

Currently translated at 50.0% (1 of 2 strings)

Translated using Weblate (Galician)

Currently translated at 4.3% (2 of 46 strings)

Translated using Weblate (Galician)

Currently translated at 1.0% (2 of 183 strings)

Added translation using Weblate (Galician)

Added translation using Weblate (Galician)

Added translation using Weblate (Galician)

Update translation files

Updated by "Squash Git commits" add-on in Weblate.

Update translation files

Updated by "Squash Git commits" add-on in Weblate.

Co-authored-by: Alexandre Espinosa Menor <aemenor@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Co-authored-by: seryeb - <seryeb@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/gl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/gl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-auth/gl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-camera/gl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/gl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/gl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-icons/gl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-input/gl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-player/gl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/objects/gl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-configeditor/gl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/gl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/gl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-exports/gl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/gl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/gl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-recording/gl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-search/gl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/gl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/gl/
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-icons
Translation: Frigate NVR/components-input
Translation: Frigate NVR/components-player
Translation: Frigate NVR/objects
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-recording
Translation: Frigate NVR/views-search
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2025-08-10 06:24:00 -06:00
GuoQing LiuandGitHub 6f2e6c4cb2 Fix if search word is number will be crash (#19426)
* fix: fix if filterValues is number will be crash

* chore: use String function cover filterValues
2025-08-08 09:22:08 -06:00
Josh HawkinsandGitHub 84f48ee3eb Ensure arrayKeys remains a stable array reference (#19428)
fixes infinite loop and react crash from changes in #19406
2025-08-08 05:54:03 -06:00
Nicolas MowenandGitHub 49793aa655 Don't use memo on subscribable (#19424) 2025-08-07 22:28:53 -05:00
4869f46ab6 Fixes (#19420)
* Remove torch install

* notification fixes

the pubkey was not being returned if notifications was not enabled at the global level

* Put back

* single condition check for fetching and disabling button

---------

Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
2025-08-07 15:34:25 -06:00
Nicolas MowenandGitHub 5e5beb9837 Fixes (#19414)
* Don't assume video is 16 / 9

* Don't apply docker constraints for rockchp toolkit
2025-08-07 12:08:33 -05:00
52 changed files with 1122 additions and 151 deletions
+1
View File
@@ -13,6 +13,7 @@ RUN sed -i "/https:\/\//d" /requirements-wheels.txt
RUN sed -i "/onnxruntime/d" /requirements-wheels.txt RUN sed -i "/onnxruntime/d" /requirements-wheels.txt
RUN pip3 wheel --wheel-dir=/rk-wheels -c /requirements-wheels.txt -r /requirements-wheels-rk.txt RUN pip3 wheel --wheel-dir=/rk-wheels -c /requirements-wheels.txt -r /requirements-wheels-rk.txt
RUN rm -rf /rk-wheels/opencv_python-* RUN rm -rf /rk-wheels/opencv_python-*
RUN rm -rf /rk-wheels/torch-*
FROM deps AS rk-frigate FROM deps AS rk-frigate
ARG TARGETARCH ARG TARGETARCH
+6 -1
View File
@@ -21,7 +21,12 @@ router = APIRouter(tags=[Tags.notifications])
@router.get("/notifications/pubkey") @router.get("/notifications/pubkey")
def get_vapid_pub_key(request: Request): def get_vapid_pub_key(request: Request):
if not request.app.frigate_config.notifications.enabled: config = request.app.frigate_config
notifications_enabled = config.notifications.enabled
camera_notifications_enabled = [
c for c in config.cameras.values() if c.enabled and c.notifications.enabled
]
if not (notifications_enabled or camera_notifications_enabled):
return JSONResponse( return JSONResponse(
content=({"success": False, "message": "Notifications are not enabled."}), content=({"success": False, "message": "Notifications are not enabled."}),
status_code=400, status_code=400,
+8
View File
@@ -140,6 +140,7 @@
"fr": "Français (French)", "fr": "Français (French)",
"ar": "العربية (Arabic)", "ar": "العربية (Arabic)",
"pt": "Português (Portuguese)", "pt": "Português (Portuguese)",
"ptBR": "Português brasileiro (Brazilian Portuguese)",
"ru": "Русский (Russian)", "ru": "Русский (Russian)",
"de": "Deutsch (German)", "de": "Deutsch (German)",
"ja": "日本語 (Japanese)", "ja": "日本語 (Japanese)",
@@ -164,6 +165,13 @@
"yue": "粵語 (Cantonese)", "yue": "粵語 (Cantonese)",
"th": "ไทย (Thai)", "th": "ไทย (Thai)",
"ca": "Català (Catalan)", "ca": "Català (Catalan)",
"sr": "Српски (Serbian)",
"sl": "Slovenščina (Slovenian)",
"lt": "Lietuvių (Lithuanian)",
"bg": "Български (Bulgarian)",
"gl": "Galego (Galician)",
"id": "Bahasa Indonesia (Indonesian)",
"ur": "اردو (Urdu)",
"withSystem": { "withSystem": {
"label": "Use the system settings for language" "label": "Use the system settings for language"
} }
+19
View File
@@ -0,0 +1,19 @@
{
"speech": "Fala",
"babbling": "Balbuxo",
"bicycle": "Bicicleta",
"yell": "Berro",
"car": "Coche",
"crying": "Chorando",
"sigh": "Suspiro",
"singing": "Cantando",
"motorcycle": "Motocicleta",
"bus": "Bus",
"train": "Tren",
"boat": "Bote",
"bird": "Paxaro",
"cat": "Gato",
"bellow": "Abaixo",
"whoop": "Ei carballeira",
"whispering": "Murmurando"
}
+13
View File
@@ -0,0 +1,13 @@
{
"time": {
"untilForTime": "Até {{time}}",
"untilForRestart": "Até que se reinicie Frigate.",
"justNow": "Xusto agora",
"last7": "Últimos 7 días",
"last14": "Últimos 14 días",
"thisWeek": "Esta semana",
"today": "Hoxe",
"untilRestart": "Ata o reinicio",
"ago": "Fai {{timeAgo}}"
}
}
@@ -0,0 +1,12 @@
{
"form": {
"user": "Usuario/a",
"password": "Contrasinal",
"errors": {
"passwordRequired": "Contrasinal obrigatorio",
"unknownError": "Erro descoñecido. Revisa os logs.",
"usernameRequired": "Usuario/a obrigatorio"
},
"login": "Iniciar sesión"
}
}
@@ -0,0 +1,20 @@
{
"group": {
"label": "Grupos de cámaras",
"add": "Engadir Grupo de cámaras",
"delete": {
"confirm": {
"title": "Confirma o borrado",
"desc": "Seguro/a que queres borrar o Grupo de cámaras <em>{{name}}</em>?"
},
"label": "Borrar o Grupo de Cámaras"
},
"name": {
"placeholder": "Introduce un nome…",
"errorMessage": {
"nameMustNotPeriod": "Grupo de Cámaras non debe conter un punto."
}
},
"edit": "Editar o Grupo de Cámaras"
}
}
@@ -0,0 +1,21 @@
{
"restart": {
"title": "Estás seguro/a que queres reiniciar Frigate?",
"button": "Reiniciar",
"restarting": {
"button": "Forzar reinicio",
"content": "Esta páxina recargarase en {{countdown}} segundos.",
"title": "Frigate está Reiniciando"
}
},
"explore": {
"plus": {
"review": {
"question": {
"label": "Confirma esta etiqueta para Frigate Plus",
"ask_an": "E isto un obxecto <code>{{label}}</code>?"
}
}
}
}
}
@@ -0,0 +1,16 @@
{
"filter": "Filtrar",
"labels": {
"label": "Etiquetas",
"count_one": "{{count}} Etiqueta",
"all": {
"short": "Etiquetas",
"title": "Todas as Etiquetas"
}
},
"zones": {
"all": {
"title": "Tódalas zonas"
}
}
}
@@ -0,0 +1,8 @@
{
"iconPicker": {
"selectIcon": "Selecciona unha icona",
"search": {
"placeholder": "Pesquisar unha icona…"
}
}
}
@@ -0,0 +1,10 @@
{
"button": {
"downloadVideo": {
"label": "Descargar vídeo",
"toast": {
"success": "O teu vídeo de revisión comezou a descargarse."
}
}
}
}
@@ -0,0 +1,14 @@
{
"noRecordingsFoundForThisTime": "Non se atoparon grabacións para ese período",
"noPreviewFound": "Non se atopou previsualización",
"submitFrigatePlus": {
"submit": "Enviar",
"title": "Enviar este frame a Frigate+?"
},
"stats": {
"streamType": {
"title": "Tipo de emisión:"
}
},
"noPreviewFoundFor": "Vista Previa non atopada para {{cameraName}}"
}
+18
View File
@@ -0,0 +1,18 @@
{
"person": "Persoa",
"bicycle": "Bicicleta",
"airplane": "Avión",
"motorcycle": "Motocicleta",
"bus": "Bus",
"train": "Tren",
"boat": "Bote",
"traffic_light": "Luces de tráfico",
"fire_hydrant": "Boca de incendio",
"street_sign": "Sinal de tráfico",
"stop_sign": "Sinal de Stop",
"parking_meter": "Parquímetro",
"bench": "Banco",
"bird": "Paxaro",
"cat": "Gato",
"car": "Coche"
}
@@ -0,0 +1,12 @@
{
"documentTitle": "Editor de configuración - Frigate",
"configEditor": "Editor de Preferencias",
"saveOnly": "Só gardar",
"toast": {
"error": {
"savingError": "Erro gardando configuración"
}
},
"saveAndRestart": "Gardar e Reiniciar",
"copyConfig": "Copiar Configuración"
}
+10
View File
@@ -0,0 +1,10 @@
{
"alerts": "Alertas",
"detections": "Deteccións",
"allCameras": "Tódalas cámaras",
"timeline.aria": "Selecciona liña de tempo",
"motion": {
"only": "Só movemento",
"label": "Movemento"
}
}
+12
View File
@@ -0,0 +1,12 @@
{
"documentTitle": "Explorar - Frigate",
"generativeAI": "IA xenerativa",
"exploreMore": "Explorar máis obxectos {{label}}",
"exploreIsUnavailable": {
"title": "Explorar non está Dispoñible",
"embeddingsReindexing": {
"finishingShortly": "Rematando ceo",
"startingUp": "Comezando…"
}
}
}
+10
View File
@@ -0,0 +1,10 @@
{
"documentTitle": "Exportar - Frigate",
"search": "Pesquisar",
"deleteExport.desc": "Seguro que queres borrar {{exportName}}?",
"editExport": {
"saveExport": "Garda exportación"
},
"deleteExport": "Borrar exportación",
"noExports": "Non se atoparon exportacións"
}
@@ -0,0 +1,11 @@
{
"description": {
"addFace": "Navegar para engadir unha nova colección á Libraría de Caras.",
"placeholder": "Introduce un nome para esta colección",
"invalidName": "Nome non válido. Os nomes só poden incluír letras, números, espazos, apóstrofes, guións baixos e guións."
},
"details": {
"unknown": "Descoñecido",
"person": "Persoa"
}
}
+19
View File
@@ -0,0 +1,19 @@
{
"documentTitle": "Directo - Frigate",
"documentTitle.withCamera": "{{camera}} - Directo - Frigate",
"twoWayTalk": {
"disable": "Deshabilita a Conversa de dous sentidos",
"enable": "Habilitar a Conversa de dous sentidos"
},
"ptz": {
"move": {
"clickMove": {
"label": "Pincha no frame para centrar a cámara"
}
}
},
"cameraAudio": {
"enable": "Habilitar Audio de cámara"
},
"lowBandwidthMode": "Modo de Baixa Banda Ancha"
}
@@ -0,0 +1,11 @@
{
"filter": "Filtrar",
"export": "Exportar",
"calendar": "Calendario",
"toast": {
"error": {
"noValidTimeSelected": "Rango de tempo inválido"
}
},
"filters": "Filtros"
}
+15
View File
@@ -0,0 +1,15 @@
{
"search": "Pesquisar",
"savedSearches": "Pesquisas gardadas",
"button": {
"save": "Gardar pesquisa",
"filterActive": "Filtros activos",
"clear": "Borrar pesquisa"
},
"filter": {
"label": {
"cameras": "Cámaras"
}
},
"searchFor": "Procurar por {{inputValue}}"
}
+11
View File
@@ -0,0 +1,11 @@
{
"documentTitle": {
"default": "Preferencias - Frigate",
"authentication": "Configuracións de Autenticación - Frigate",
"camera": "Configuracións da Cámara - Frigate",
"general": "Configuracións xerais - Frigate",
"notifications": "Configuración de Notificacións - Frigate",
"enrichments": "Configuración complementarias - Frigate",
"masksAndZones": "Editor de máscaras e zonas - Frigate"
}
}
+17
View File
@@ -0,0 +1,17 @@
{
"documentTitle": {
"cameras": "Estatísticas de cámaras - Frigate",
"storage": "Estatísticas de Almacenamento - Frigate",
"general": "Estatísticas Xerais - Frigate",
"enrichments": "Estatísticas complementarias - Frigate",
"logs": {
"frigate": "Rexistros de Frigate - Frigate"
}
},
"title": "Sistema",
"logs": {
"download": {
"label": "Descargar logs"
}
}
}
+21 -21
View File
@@ -5,7 +5,7 @@
"untilForRestart": "Amíg a Frigate újraindul.", "untilForRestart": "Amíg a Frigate újraindul.",
"untilRestart": "Amíg újraindul", "untilRestart": "Amíg újraindul",
"justNow": "Most", "justNow": "Most",
"ago": "{{timeAgo}} ezelőtt", "ago": "Ennyi ideje: {{timeAgo}}",
"today": "Ma", "today": "Ma",
"yesterday": "Tegnap", "yesterday": "Tegnap",
"last7": "Elmúlt 7 nap", "last7": "Elmúlt 7 nap",
@@ -14,15 +14,15 @@
"thisWeek": "Ezen a héten", "thisWeek": "Ezen a héten",
"lastWeek": "Előző héten", "lastWeek": "Előző héten",
"thisMonth": "Ebben a hónapban", "thisMonth": "Ebben a hónapban",
"lastMonth": "Előző hónap", "lastMonth": "Előző hónapban",
"5minutes": "5 perc", "5minutes": "5 perc",
"10minutes": "10 perc", "10minutes": "10 perc",
"30minutes": "30 perc", "30minutes": "30 perc",
"1hour": "1 óra", "1hour": "1 óra",
"12hours": "12 óra", "12hours": "12 óra",
"24hours": "24 óra", "24hours": "24 óra",
"pm": "PM", "pm": "du",
"am": "AM", "am": "de",
"yr": "{{time}} év", "yr": "{{time}} év",
"mo": "{{time}} hónap", "mo": "{{time}} hónap",
"d": "{{time}} nap", "d": "{{time}} nap",
@@ -41,38 +41,38 @@
"day_one": "{{time}} nap", "day_one": "{{time}} nap",
"day_other": "{{time}} napok", "day_other": "{{time}} napok",
"formattedTimestamp": { "formattedTimestamp": {
"24hour": "HHH n, ÓÓ:pp:mm", "24hour": "MMM d, HH:mm:ss",
"12hour": "HHH d, ó:pp:mm aaa" "12hour": "MMM d, h:mm:ss aaa"
}, },
"formattedTimestampMonthDayYear": { "formattedTimestampMonthDayYear": {
"12hour": "HHH d, éééé", "12hour": "MMM d, yyyy",
"24hour": "HHH n, éééé" "24hour": "MMM d, yyyy"
}, },
"formattedTimestampHourMinute": { "formattedTimestampHourMinute": {
"24hour": "ÓÓ:pp", "24hour": "HH:mm",
"12hour": "ó:pp aaa" "12hour": "h:mm aaa"
}, },
"formattedTimestamp2": { "formattedTimestamp2": {
"24hour": "n HHH ÓÓ:pp:mm", "24hour": "d MMM HH:mm:ss",
"12hour": "HH/NN ó:pp:mma" "12hour": "MM/dd h:mm:ssa"
}, },
"formattedTimestampHourMinuteSecond": { "formattedTimestampHourMinuteSecond": {
"24hour": "ÓÓ:pp:mm", "24hour": "HH:mm:ss",
"12hour": "ó:pp:mm aaa" "12hour": "h:mm:ss aaa"
}, },
"formattedTimestampMonthDayYearHourMinute": { "formattedTimestampMonthDayYearHourMinute": {
"24hour": "HHH n éééé, ÓÓ:pp", "24hour": "MMM d yyyy, HH:mm",
"12hour": "HHH n éééé, ó:pp aaa" "12hour": "MMM d yyyy, h:mm aaa"
}, },
"formattedTimestampFilename": { "formattedTimestampFilename": {
"24hour": "HH-nn-éé-ÓÓ-pp-mm", "24hour": "yy-MM-dd-HH-mm-ss",
"12hour": "HH-nn-éé-ó-pp-mm-a" "12hour": "yy-MM-dd-h-mm-ss-a"
}, },
"formattedTimestampMonthDayHourMinute": { "formattedTimestampMonthDayHourMinute": {
"24hour": "HHH n, ÓÓ:pp", "24hour": "MMM d, HH:mm",
"12hour": "HHH n, ó:pp aaa" "12hour": "MMM d, h:mm aaa"
}, },
"formattedTimestampMonthDay": "HHH n" "formattedTimestampMonthDay": "MMM d"
}, },
"menu": { "menu": {
"darkMode": { "darkMode": {
+1 -1
View File
@@ -22,7 +22,7 @@
"ask_a": "Ez a tárgy egy <code>{{label}}</code>?", "ask_a": "Ez a tárgy egy <code>{{label}}</code>?",
"label": "Erősítse meg ezt a cimkét a Frigate plus felé", "label": "Erősítse meg ezt a cimkét a Frigate plus felé",
"ask_an": "Ez a tárgy egy <code>{{label}}</code>?", "ask_an": "Ez a tárgy egy <code>{{label}}</code>?",
"ask_full": "Ez egy <code>{{untranslatedLabel}}</code>{{translatedLabel}} tárgy?" "ask_full": "Ez a tárgy egy <code>{{untranslatedLabel}}</code> ({{translatedLabel}})?"
} }
} }
}, },
+1 -1
View File
@@ -31,7 +31,7 @@
"recordings": { "recordings": {
"documentTitle": "Felvételek - Frigate" "documentTitle": "Felvételek - Frigate"
}, },
"markTheseItemsAsReviewed": "Ezen elwmek megjelölése áttekintettként", "markTheseItemsAsReviewed": "Ezen elemek megjelölése áttekintettként",
"markAsReviewed": "Megjelölés Áttekintettként", "markAsReviewed": "Megjelölés Áttekintettként",
"selected_one": "{{count}} kiválasztva", "selected_one": "{{count}} kiválasztva",
"selected_other": "{{count}} kiválasztva" "selected_other": "{{count}} kiválasztva"
+2 -2
View File
@@ -6,7 +6,7 @@
"classification": "Osztályozási beállítások - Frigate", "classification": "Osztályozási beállítások - Frigate",
"masksAndZones": "Maszk és zónaszerkesztő - Frigate", "masksAndZones": "Maszk és zónaszerkesztő - Frigate",
"object": "Hibakeresés - Frigate", "object": "Hibakeresés - Frigate",
"general": "Áltlános beállítások - Frigate", "general": "Áltlános Beállítások - Frigate",
"frigatePlus": "Frigate+ beállítások - Frigate", "frigatePlus": "Frigate+ beállítások - Frigate",
"notifications": "Értesítések beállítása - Frigate", "notifications": "Értesítések beállítása - Frigate",
"motionTuner": "Mozgás Hangoló - Frigate", "motionTuner": "Mozgás Hangoló - Frigate",
@@ -143,7 +143,7 @@
"success": "A kiegészítő beállítások elmentésre kerültek. A módosítások alkalmazásához indítsa újra a Frigate-et." "success": "A kiegészítő beállítások elmentésre kerültek. A módosítások alkalmazásához indítsa újra a Frigate-et."
}, },
"unsavedChanges": "Mentetlen gazdagítási beállítás változtatások", "unsavedChanges": "Mentetlen gazdagítási beállítás változtatások",
"title": "Kiegészítés Beállítások", "title": "Kiegészítők Beállítása",
"restart_required": "Újraindítás szükséges (a kiegészítő beállítások megváltoztak)" "restart_required": "Újraindítás szükséges (a kiegészítő beállítások megváltoztak)"
}, },
"notification": { "notification": {
+1 -1
View File
@@ -644,7 +644,7 @@
} }
}, },
"title": "Semantisch zoeken", "title": "Semantisch zoeken",
"desc": "Semantische zoektocht in Frigate laat je opsporingsberichten vinden binnen je beoordelingsvoorwerpen met het beeld zelf, een gebruiker-definieerde tekstbeschrijving, of een automatisch gegen.", "desc": "Semantisch zoeken in Frigate stelt je in staat om getraceerde objecten binnen je review-items te vinden, met behulp van de afbeelding zelf, een door de gebruiker gedefinieerde tekstbeschrijving of een automatisch gegenereerde beschrijving.",
"readTheDocumentation": "Lees de documentatie" "readTheDocumentation": "Lees de documentatie"
}, },
"faceRecognition": { "faceRecognition": {
+267 -5
View File
@@ -6,7 +6,7 @@
"chant": "Canto", "chant": "Canto",
"babbling": "Balbuciando", "babbling": "Balbuciando",
"bellow": "Abaixo", "bellow": "Abaixo",
"whoop": "Grito", "whoop": "Grito de Felicidade",
"whispering": "Sussurrando", "whispering": "Sussurrando",
"laughter": "Risada", "laughter": "Risada",
"snicker": "Risada", "snicker": "Risada",
@@ -69,7 +69,7 @@
"bark": "Latido", "bark": "Latido",
"yip": "Latido / Grito Agudo", "yip": "Latido / Grito Agudo",
"howl": "Uivado", "howl": "Uivado",
"bow_wow": "Bow Wow", "bow_wow": "Latido",
"growling": "Rosnado", "growling": "Rosnado",
"whimper_dog": "Choro de Cachorro", "whimper_dog": "Choro de Cachorro",
"purr": "Ronronado", "purr": "Ronronado",
@@ -129,7 +129,7 @@
"frog": "Sapo", "frog": "Sapo",
"croak": "Coaxado", "croak": "Coaxado",
"snake": "Cobra", "snake": "Cobra",
"rattle": "Guizo", "rattle": "Chocalho",
"whale_vocalization": "Vocalização de Baleia", "whale_vocalization": "Vocalização de Baleia",
"music": "Música", "music": "Música",
"musical_instrument": "Instrumento Musical", "musical_instrument": "Instrumento Musical",
@@ -139,7 +139,7 @@
"bass_guitar": "Baixo", "bass_guitar": "Baixo",
"acoustic_guitar": "Violão Acústico", "acoustic_guitar": "Violão Acústico",
"steel_guitar": "Guitarra Havaiana", "steel_guitar": "Guitarra Havaiana",
"tapping": "Tapping", "tapping": "Batidas Leves",
"strum": "Dedilhado", "strum": "Dedilhado",
"banjo": "Banjo", "banjo": "Banjo",
"sitar": "Sitar", "sitar": "Sitar",
@@ -163,5 +163,267 @@
"drum_roll": "Tambores Rufando", "drum_roll": "Tambores Rufando",
"bass_drum": "Bumbo", "bass_drum": "Bumbo",
"timpani": "Tímpanos (Instrumento Musical)", "timpani": "Tímpanos (Instrumento Musical)",
"tabla": "Tabla" "tabla": "Tabla",
"wood_block": "Bloco de Madeira",
"bagpipes": "Gaita de Fole",
"pop_music": "Música Pop",
"grunge": "Grunge",
"middle_eastern_music": "Música do Oriente Médio",
"jazz": "Jazz",
"disco": "Disco",
"classical_music": "Música Clássica",
"opera": "Ópera",
"electronic_music": "Música Eletrónica",
"house_music": "Música House",
"techno": "Techno",
"dubstep": "Dubstep",
"drum_and_bass": "Drum and Bass",
"electronica": "Eletrónica",
"cymbal": "Címbalo",
"hi_hat": "Chimbau",
"tambourine": "Pandeiro",
"maraca": "Maraca",
"gong": "Gongo",
"tubular_bells": "Sinos Tubulares",
"mallet_percussion": "Percussão de Martelo",
"marimba": "Marimba",
"glockenspiel": "Glockenspiel",
"vibraphone": "Vibrafone",
"steelpan": "Panela de Aço",
"orchestra": "Orquestra",
"brass_instrument": "Instrumento de Metal",
"french_horn": "Trompa Francesa",
"trumpet": "Trombeta",
"trombone": "Trombone",
"bowed_string_instrument": "Instrumento de Cordas Friccionadas",
"string_section": "Seção de Cordas",
"violin": "Violino",
"pizzicato": "Pizzicato",
"cello": "Violoncelo",
"double_bass": "Contrabaixo",
"wind_instrument": "Instrumento de Sopro",
"flute": "Flauta",
"saxophone": "Saxofone",
"clarinet": "Clarinete",
"harp": "Harpa",
"bell": "Sino",
"church_bell": "Sino de Igreja",
"jingle_bell": "Guizo",
"bicycle_bell": "Campainha de Bicicleta",
"tuning_fork": "Diapasão",
"chime": "Carrilhão",
"wind_chime": "Sinos de Vento",
"harmonica": "Gaita",
"accordion": "Acordeão",
"didgeridoo": "Didjeridu",
"theremin": "Teremim",
"scratching": "Arranhado",
"hip_hop_music": "Música Hip-Hop",
"beatboxing": "Beatbox",
"rock_music": "Rock",
"heavy_metal": "Heavy Metal",
"punk_rock": "Punk Rock",
"progressive_rock": "Rock Progressivo",
"rock_and_roll": "Rock and Roll",
"psychedelic_rock": "Rock Psicodélico",
"rhythm_and_blues": "Rhythm and Blues",
"soul_music": "Música Soul",
"music_of_latin_america": "Music of Latin America",
"salsa_music": "Música Salsa",
"flamenco": "Flamenco",
"blues": "Blues",
"music_for_children": "Música para Crianças",
"new-age_music": "Música New Age",
"vocal_music": "Música Vocal",
"a_capella": "A Capella",
"music_of_africa": "Music of Africa",
"afrobeat": "Afrobeat",
"christian_music": "Música Cristã",
"gospel_music": "Música Gospel",
"music_of_asia": "Music of Asia",
"carnatic_music": "Música Carnática",
"music_of_bollywood": "Música de Bollywood",
"ska": "Ska",
"traditional_music": "Música Tradicional",
"independent_music": "Música Independente",
"song": "Música",
"thunderstorm": "Tempestade",
"thunder": "Trovão",
"water": "Água",
"rain": "Chuva",
"raindrop": "Gota de Chuva",
"rain_on_surface": "Chuva na Superfície",
"stream": "Transmissão",
"waterfall": "Cachoeira",
"ocean": "Oceano",
"waves": "Ondas",
"steam": "Vapor",
"gurgling": "Borbulhado",
"fire": "Fogo",
"crackle": "Estalo",
"sailboat": "Veleiro",
"rowboat": "Barco a Remo",
"motorboat": "Lancha",
"ship": "Navio",
"motor_vehicle": "Veículo Motorizado",
"toot": "Buzinado",
"car_alarm": "Alarme de Carro",
"power_windows": "Vidros Elétricos",
"skidding": "Derrapado",
"singing_bowl": "Tigela Tibetana",
"reggae": "Reggae",
"country": "País",
"swing_music": "Música Swing",
"bluegrass": "Música Bluegrass",
"funk": "Funk",
"folk_music": "Música Folk",
"electronic_dance_music": "Música Eletrônica",
"ambient_music": "Música Ambiente",
"trance_music": "Música Trance",
"background_music": "Música de Fundo",
"theme_music": "Música Tema",
"jingle": "Jingle",
"soundtrack_music": "Música de Trilha Sonora",
"lullaby": "Canção de Ninar",
"video_game_music": "Música de Video Game",
"christmas_music": "Música Natalina",
"dance_music": "Música Dance",
"wedding_music": "Música de Casamento",
"happy_music": "Música Feliz",
"sad_music": "Música Triste",
"tender_music": "Música Suave",
"exciting_music": "Música Empolgante",
"angry_music": "Música Raivosa",
"scary_music": "Música Assustadora",
"wind": "Vento",
"rustling_leaves": "Folhas Farfalhantes",
"fixed-wing_aircraft": "Aeronave de Asa Fixa",
"engine": "Motor",
"light_engine": "Motor Leve",
"dental_drill's_drill": "Broca Odontológica",
"lawn_mower": "Cortador de Grama",
"chainsaw": "Motosserra",
"medium_engine": "Motor Médio",
"heavy_engine": "Motor Pesado",
"engine_knocking": "Motor Batendo",
"engine_starting": "Motor Partindo",
"idling": "Marcha Lenta",
"chopping": "Cortando",
"frying": "Fritando",
"microwave_oven": "Forno Microondas",
"water_tap": "Torneira de Água",
"bathtub": "Banheira",
"toilet_flush": "Descarga de Vaso Sanitário",
"computer_keyboard": "Teclado de Computador",
"writing": "Escrita",
"alarm": "Alarme",
"telephone": "Telefone",
"telephone_bell_ringing": "Telefone Tocando",
"ringtone": "Toque de Celular",
"telephone_dialing": "Telefone Discando",
"dial_tone": "Tom de Discagem",
"busy_signal": "Sinal de Ocupado",
"alarm_clock": "Despertador",
"siren": "Sirene",
"civil_defense_siren": "Sirene de Defesa Civil",
"wind_noise": "Ruído de Vento",
"tire_squeal": "Pneus Cantando",
"car_passing_by": "Carro Passando",
"race_car": "Carro de Corrida",
"truck": "Pickup / Caminhão",
"air_brake": "Freios a Ar",
"air_horn": "Buzina a Ar",
"reversing_beeps": "Alarme de Ré",
"ice_cream_truck": "Carro de Sorvete",
"emergency_vehicle": "Veículo de Emergência",
"police_car": "Carro de Polícia",
"ambulance": "Ambulância",
"fire_engine": "Caminhão de Bombeiros",
"traffic_noise": "Barulho de Tráfego",
"rail_transport": "Transporte Ferroviário",
"train_whistle": "Apito de Trem",
"train_horn": "Buzina de Trem",
"railroad_car": "Vagão de Trem",
"train_wheels_squealing": "Rodas de Trem Rangendo",
"subway": "Metrô",
"aircraft": "Aeronave",
"aircraft_engine": "Motor de Aeronave",
"jet_engine": "Motor a Jato",
"propeller": "Hélice",
"helicopter": "Helicóptero",
"accelerating": "Acelerando",
"doorbell": "Campainha",
"ding-dong": "Toque de Campainha",
"sliding_door": "Porta de Correr",
"slam": "Batida Forte",
"knock": "Batida na Porta",
"burst": "Estouro / Rajada",
"eruption": "Erupção",
"boom": "Estrondo",
"wood": "Madeira",
"chop": "Barulho de Corte",
"splinter": "Lascado",
"crack": "Rachado",
"glass": "Vidro",
"chink": "Fenda",
"shatter": "Estilhaçado",
"silence": "Silêncio",
"sound_effect": "Efeito Sonoro",
"environmental_noise": "Ruido Ambiente",
"static": "Estático",
"white_noise": "Ruido Branco",
"pink_noise": "Ruido Rosa",
"television": "Televisão",
"radio": "Rádio",
"field_recording": "Gravação de Campo",
"scream": "Grito",
"tap": "Toque",
"squeak": "Rangido",
"cupboard_open_or_close": "Cristaleira Abrindo ou Fechando",
"drawer_open_or_close": "Gaveteiro Abrindo ou Fechando",
"dishes": "Pratos",
"cutlery": "Talheres",
"electric_toothbrush": "Escova de Dentes Elétrica",
"vacuum_cleaner": "Aspirador de Pó",
"zipper": "Zíper",
"keys_jangling": "Chaves Chacoalhando",
"coin": "Moeda",
"electric_shaver": "Barbeador Elétrico",
"shuffling_cards": "Embaralhar de Cartas",
"typing": "Digitação",
"typewriter": "Máquina de Escrever",
"buzzer": "Zumbador",
"smoke_detector": "Detector de Fumaça",
"fire_alarm": "Alarme de Incêndio",
"foghorn": "Buzina de Nevoeiro",
"whistle": "Apito",
"steam_whistle": "Apito a Vapor",
"mechanisms": "Mecanismos",
"ratchet": "Catraca",
"tick": "Tique",
"tick-tock": "Tique-Toque",
"gears": "Engrenagens",
"pulleys": "Polias",
"sewing_machine": "Máquina de Costura",
"mechanical_fan": "Ventilador Mecânico",
"air_conditioning": "Ar-Condicionado",
"cash_register": "Caixa Registradora",
"printer": "Impressora",
"single-lens_reflex_camera": "Câmera Single-Lens Reflex",
"tools": "Ferramentas",
"hammer": "Martelo",
"jackhammer": "Britadeira",
"sawing": "Som de Serra",
"filing": "Som de Lima",
"sanding": "Lixamento",
"power_tool": "Ferramenta Elétrica",
"drill": "Furadeira",
"explosion": "Explosão",
"gunshot": "Tiro",
"machine_gun": "Metralhadora",
"fusillade": "Fuzilamento",
"artillery_fire": "Fogo de Artilharia",
"cap_gun": "Espoleta",
"fireworks": "Fogos de Artifício",
"firecracker": "Rojões"
} }
+66 -8
View File
@@ -25,27 +25,27 @@
"yr": "{{time}}ano", "yr": "{{time}}ano",
"year_one": "{{time}} ano", "year_one": "{{time}} ano",
"year_many": "{{time}} anos", "year_many": "{{time}} anos",
"year_other": "", "year_other": "{{time}} anos",
"mo": "{{time}}mês", "mo": "{{time}}mês",
"month_one": "{{time}} mês", "month_one": "{{time}} mês",
"month_many": "{{time}} meses", "month_many": "{{time}} meses",
"month_other": "", "month_other": "{{time}} meses",
"d": "{{time}} dia", "d": "{{time}} dia",
"day_one": "{{time}} dia", "day_one": "{{time}} dia",
"day_many": "{{time}} dias", "day_many": "{{time}} dias",
"day_other": "", "day_other": "{{time}} dias",
"h": "{{time}}h", "h": "{{time}}h",
"hour_one": "{{time}} hora", "hour_one": "{{time}} hora",
"hour_many": "{{time}} horas", "hour_many": "{{time}} horas",
"hour_other": "", "hour_other": "{{time}} horas",
"m": "{{time}}m", "m": "{{time}}m",
"minute_one": "{{time}} minuto", "minute_one": "{{time}} minuto",
"minute_many": "{{time}} minutos", "minute_many": "{{time}} minutos",
"minute_other": "", "minute_other": "{{time}} minutos",
"s": "{{time}}s", "s": "{{time}}s",
"second_one": "{{time}} segundo", "second_one": "{{time}} segundo",
"second_many": "{{time}} segundos", "second_many": "{{time}} segundos",
"second_other": "", "second_other": "{{time}} segundos",
"formattedTimestamp": { "formattedTimestamp": {
"12hour": "d MMM,h:mm:ss aaa", "12hour": "d MMM,h:mm:ss aaa",
"24hour": "d MMM, HH:mm:ss" "24hour": "d MMM, HH:mm:ss"
@@ -83,7 +83,7 @@
"selectItem": "Selecione {{item}}", "selectItem": "Selecione {{item}}",
"unit": { "unit": {
"speed": { "speed": {
"mph": "mph", "mph": "mi/h",
"kph": "km/h" "kph": "km/h"
}, },
"length": { "length": {
@@ -201,7 +201,65 @@
}, },
"restart": "Reiniciar o Frigate", "restart": "Reiniciar o Frigate",
"live": { "live": {
"title": "Ao Vivo" "title": "Ao Vivo",
"allCameras": "Todas as câmeras",
"cameras": {
"title": "Câmeras",
"count_one": "{{count}} Câmera",
"count_many": "{{count}} Câmeras",
"count_other": "{{count}} Câmeras"
}
},
"review": "Revisão",
"explore": "Explorar",
"export": "Exportar",
"uiPlayground": "Playground da UI",
"faceLibrary": "Biblioteca de Rostos",
"user": {
"title": "Usuário",
"account": "Conta",
"current": "Usuário Atual: {{user}}",
"anonymous": "anônimo",
"logout": "Sair",
"setPassword": "Definir Senha"
} }
},
"toast": {
"copyUrlToClipboard": "URL copiada para a área de transferência.",
"save": {
"title": "Salvar",
"error": {
"title": "Falha ao salvar as alterações de configuração: {{errorMessage}}",
"noMessage": "Falha ao salvar as alterações de configuração"
}
}
},
"role": {
"title": "Papel",
"admin": "Administrador",
"viewer": "Espectador",
"desc": "Administradores possuem acesso total a todos os recursos da interface do Frigate. Espectadores são limitados a ver as câmeras, revisar itens, e filmagens históricas na interface."
},
"pagination": {
"label": "paginação",
"previous": {
"title": "Anterior",
"label": "Ir para a página anterior"
},
"next": {
"title": "Próximo",
"label": "Ir para a próxima página"
},
"more": "Mais páginas"
},
"accessDenied": {
"documentTitle": "Acesso Negado - Frigate",
"title": "Acesso Negado",
"desc": "Você não possui permissão para visualizar essa página."
},
"notFound": {
"documentTitle": "Não Encontrado - Frigate",
"title": "404",
"desc": "Página não encontrada"
} }
} }
@@ -16,7 +16,7 @@
}, },
"review": { "review": {
"question": { "question": {
"label": "Confirmar essa etiqueta para Frigate Plus", "label": "Confirmar esse rótulo para Frigate Plus",
"ask_a": "Este objeto é um <code>{{label}}</code>?", "ask_a": "Este objeto é um <code>{{label}}</code>?",
"ask_an": "Este objeto é um<code>{{label}}</code>?", "ask_an": "Este objeto é um<code>{{label}}</code>?",
"ask_full": "Este objeto é um<code>{{untranslatedLabel}}</code> ({{translatedLabel}})?" "ask_full": "Este objeto é um<code>{{untranslatedLabel}}</code> ({{translatedLabel}})?"
@@ -3,11 +3,11 @@
"labels": { "labels": {
"label": "Rótulos", "label": "Rótulos",
"all": { "all": {
"title": "Todas as Etiquetas", "title": "Todos os Rótulos",
"short": "Etiquetas" "short": "Rótulos"
}, },
"count_one": "{{count}} Etiqueta", "count_one": "{{count}} Rótulo",
"count_other": "{{count}} Etiquetas" "count_other": "{{count}} Rótulos"
}, },
"zones": { "zones": {
"label": "Zonas", "label": "Zonas",
@@ -29,8 +29,8 @@
}, },
"timeRange": "Intervalo de Tempo", "timeRange": "Intervalo de Tempo",
"subLabels": { "subLabels": {
"label": "Sub-etiquetas", "label": "Sub-Rótulos",
"all": "Todas as Sub-etiquetas" "all": "Todos os Sub-Rótulos"
}, },
"score": "Pontuação", "score": "Pontuação",
"estimatedSpeed": "Velocidade Estimada {{unit}}", "estimatedSpeed": "Velocidade Estimada {{unit}}",
@@ -26,7 +26,7 @@
"value": "{{seconds}} segundos", "value": "{{seconds}} segundos",
"short": { "short": {
"title": "Latência", "title": "Latência",
"value": "{{seconds}} segundos" "value": "{{seconds}} s"
} }
}, },
"totalFrames": "Total de Quadros:", "totalFrames": "Total de Quadros:",
+3 -3
View File
@@ -41,8 +41,8 @@
}, },
"tips": { "tips": {
"mismatch_one": "{{count}} objeto indisponível foi detectado e incluido nesse item de revisão. Esse objeto ou não se qualifica para um alerta ou detecção, ou já foi limpo/deletado.", "mismatch_one": "{{count}} objeto indisponível foi detectado e incluido nesse item de revisão. Esse objeto ou não se qualifica para um alerta ou detecção, ou já foi limpo/deletado.",
"mismatch_many": "{{count}} objetos indisponíveis foram detectados e incluídos nesse item de revisão. Esses objetos ou não se qualificam para um alerta ou detecção, ou já foi limpo/deletado.", "mismatch_many": "{{count}} objetos indisponíveis foram detectados e incluídos nesse item de revisão. Esses objetos ou não se qualificam para um alerta ou detecção, ou já foram limpos/deletados.",
"mismatch_other": "", "mismatch_other": "{{count}} objetos indisponíveis foram detectados e incluídos nesse item de revisão. Esses objetos ou não se qualificam para um alerta ou detecção, ou já foram limpos/deletados.",
"hasMissingObjects": "Ajustar a sua configuração se quiser que o Frigate salve objetos rastreados com as seguintes categorias: <em>{{objects}}</em>" "hasMissingObjects": "Ajustar a sua configuração se quiser que o Frigate salve objetos rastreados com as seguintes categorias: <em>{{objects}}</em>"
}, },
"toast": { "toast": {
@@ -196,7 +196,7 @@
"fetchingTrackedObjectsFailed": "Erro ao buscar por objetos rastreados: {{errorMessage}}", "fetchingTrackedObjectsFailed": "Erro ao buscar por objetos rastreados: {{errorMessage}}",
"trackedObjectsCount_one": "{{count}} objeto rastreado ", "trackedObjectsCount_one": "{{count}} objeto rastreado ",
"trackedObjectsCount_many": "{{count}} objetos rastreados ", "trackedObjectsCount_many": "{{count}} objetos rastreados ",
"trackedObjectsCount_other": "", "trackedObjectsCount_other": "{{count}} objetos rastreados ",
"searchResult": { "searchResult": {
"tooltip": "Correspondência com {{type}} de {{confidence}}%", "tooltip": "Correspondência com {{type}} de {{confidence}}%",
"deleteTrackedObject": { "deleteTrackedObject": {
@@ -3,8 +3,8 @@
"person": "Pessoa", "person": "Pessoa",
"unknown": "Desconhecido", "unknown": "Desconhecido",
"face": "Detalhes do Rosto", "face": "Detalhes do Rosto",
"subLabelScore": "Pontuação do sub-rótulo", "subLabelScore": "Pontuação do Sub-Rótulo",
"scoreInfo": "A pontuação da sub etiqueta é a pontuação ponderada de todas as confidências faciais reconhecidas, então a pontuação pode ser diferente da mostrada na foto instantânea.", "scoreInfo": "A pontuação do sub-rótulo é a pontuação ponderada de todas as confidências faciais reconhecidas, então a pontuação pode ser diferente da mostrada na foto instantânea.",
"faceDesc": "Detalhes do objeto rastreado que gerou este rosto", "faceDesc": "Detalhes do objeto rastreado que gerou este rosto",
"timestamp": "Carimbo de data e hora" "timestamp": "Carimbo de data e hora"
}, },
@@ -53,7 +53,7 @@
"faceName": "Digite o Nome do Rosto", "faceName": "Digite o Nome do Rosto",
"uploadFace": "Enviar Imagem de Rosto", "uploadFace": "Enviar Imagem de Rosto",
"description": { "description": {
"uploadFace": "Faça o upload de uma imagem de {{name}} que mostre mostre seu rosto visto de frente. A imagem não precisa estar recortada apenas com o rosto." "uploadFace": "Faça o upload de uma imagem de {{name}} que mostre seu rosto visto de frente. A imagem não precisa estar recortada apenas com o rosto."
} }
}, },
"description": { "description": {
@@ -87,7 +87,7 @@
"renamedFace": "O rosto foi renomeado com sucesso para {{name}}", "renamedFace": "O rosto foi renomeado com sucesso para {{name}}",
"deletedName_one": "{{count}} rosto foi deletado com sucesso.", "deletedName_one": "{{count}} rosto foi deletado com sucesso.",
"deletedName_many": "{{count}} rostos foram deletados com sucesso.", "deletedName_many": "{{count}} rostos foram deletados com sucesso.",
"deletedName_other": "" "deletedName_other": "{{count}} rostos foram deletados com sucesso."
}, },
"error": { "error": {
"uploadingImageFailed": "Falha ao enviar a imagem: {{errorMessage}}", "uploadingImageFailed": "Falha ao enviar a imagem: {{errorMessage}}",
+2 -2
View File
@@ -13,7 +13,7 @@
"filter": { "filter": {
"label": { "label": {
"cameras": "Câmeras", "cameras": "Câmeras",
"labels": "Etiquetas", "labels": "Rótulos",
"zones": "Zonas", "zones": "Zonas",
"before": "Antes", "before": "Antes",
"after": "Depois", "after": "Depois",
@@ -21,7 +21,7 @@
"max_score": "Pontuação Máxima", "max_score": "Pontuação Máxima",
"min_speed": "Velocidade Mínima", "min_speed": "Velocidade Mínima",
"max_speed": "Velocidade Máxima", "max_speed": "Velocidade Máxima",
"sub_labels": "Sub-etiquetas", "sub_labels": "Sub-Rótulos",
"search_type": "Tipo de Busca", "search_type": "Tipo de Busca",
"time_range": "Intervalo de Tempo", "time_range": "Intervalo de Tempo",
"recognized_license_plate": "Placa de Carro Reconhecida", "recognized_license_plate": "Placa de Carro Reconhecida",
+345 -5
View File
@@ -5,7 +5,7 @@
"camera": "Configurações de Câmera - Frigate", "camera": "Configurações de Câmera - Frigate",
"enrichments": "Configurações de Enriquecimento - Frigate", "enrichments": "Configurações de Enriquecimento - Frigate",
"masksAndZones": "Editor de Máscara e Zona - Frigate", "masksAndZones": "Editor de Máscara e Zona - Frigate",
"motionTuner": "Virada de Movimento - Frigate", "motionTuner": "Ajuste de Movimento - Frigate",
"object": "Debug - Frigate", "object": "Debug - Frigate",
"general": "Configurações Gerais - Frigate", "general": "Configurações Gerais - Frigate",
"frigatePlus": "Frigate+ Configurações- Frigate", "frigatePlus": "Frigate+ Configurações- Frigate",
@@ -18,8 +18,8 @@
"users": "Usuários", "users": "Usuários",
"notifications": "Notificações", "notifications": "Notificações",
"frigateplus": "Frigate+", "frigateplus": "Frigate+",
"motionTuner": "Ajuste de Detecção de Movimento", "motionTuner": "Ajuste de Movimento",
"debug": "Depuração", "debug": "Depurar",
"enrichments": "Melhorias" "enrichments": "Melhorias"
}, },
"dialog": { "dialog": {
@@ -254,7 +254,7 @@
"edit": "Editar Zona", "edit": "Editar Zona",
"point_one": "{{count}} ponto", "point_one": "{{count}} ponto",
"point_many": "{{count}} pontos", "point_many": "{{count}} pontos",
"point_other": "", "point_other": "{{count}} pontos",
"clickDrawPolygon": "Clique para desenhar um polígono na imagem.", "clickDrawPolygon": "Clique para desenhar um polígono na imagem.",
"name": { "name": {
"title": "Nome", "title": "Nome",
@@ -275,8 +275,348 @@
}, },
"allObjects": "Todos os Objetos", "allObjects": "Todos os Objetos",
"speedEstimation": { "speedEstimation": {
"title": "Estimativa de Velocidade" "title": "Estimativa de Velocidade",
"desc": "Habilitar estimativa de velocidade para objetos nesta zona. A zona deve ter exatamente 4 pontos.",
"docs": "Leia a documentação",
"lineADistance": "Distância da linha A ({{unit}})",
"lineBDistance": "Distância da Linha B ({{unit}})",
"lineCDistance": "Distância da linha C ({{unit}})",
"lineDDistance": "Distância da linha D ({{unit}})"
},
"speedThreshold": {
"title": "Limiar de Velocidade ({{unit}})",
"desc": "Especifique a velocidade mínima para o objeto ser considerado nessa zona.",
"toast": {
"error": {
"pointLengthError": "A estimativa de velocidade foi desativada para essa zona. Zonas com estimação de velocidade devem ter exatamente 4 pontos.",
"loiteringTimeError": "Zonas com tempo de permanência acima de 0 não devem ser usadas com estimativa de velocidade."
}
}
},
"toast": {
"success": "A zona ({{zoneName}}) foi salva. Reinicie o Frigate para aplicar as mudanças."
} }
},
"objectMasks": {
"objects": {
"allObjectTypes": "Todos os tipos de objetos",
"title": "Objetos",
"desc": "O tipo de objeto que se aplica para essa máscara de objeto."
},
"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."
}
},
"label": "Máscaras de Objeto",
"documentTitle": "Editar Máscara de Objeto - Frigate",
"desc": {
"title": "Máscaras de filtro de objetos são usadas para filtrar falsos positivos para um determinado tipo de objeto baseado na localização.",
"documentation": "Documentação"
},
"add": "Adicionar Máscara de Objeto",
"edit": "Editar Máscara de Objeto",
"context": "Filtro de máscaras de objeto são usados para filtrar falsos positivos para um dado tipo de objeto baseado na localização.",
"point_one": "{{count}} ponto",
"point_many": "{{count}} pontos",
"point_other": "{{count}} pontos",
"clickDrawPolygon": "Clique para desenhar um polígono na imagem."
},
"motionMasks": {
"label": "Máscara de Movimento",
"documentTitle": "Editar Máscara de Movimento - Frigate",
"desc": {
"title": "Máscaras de movimento são usadas para prevenir tipos de movimento de ativarem uma detecção. Excesso de mascaramento tornará mais difícil que objetos sejam rastreados.",
"documentation": "Documentação"
},
"add": "Nova Máscara de Movimento",
"edit": "Editar Máscara de Movimento",
"context": {
"title": "Máscaras de movimento são usadas para prevenir typos de movimento não desejados de ativarem uma detecção (exemplo: galhos de árvores, timestamps de câmeras). Máscaras de movimento devem ser usadas com <em> muita parcimônia</em>, excesso de mascaramento tornará mais difícil de objetos serem rastreados.",
"documentation": "Leia a documentação"
},
"point_one": "{{count}} ponto",
"point_many": "{{count}} pontos",
"point_other": "{{count}} pontos",
"clickDrawPolygon": "Clique para desenhar um polígono na imagem.",
"polygonAreaTooLarge": {
"title": "A máscara de movimento está cobrindo {{polygonArea}}% do quadro da câmera. Máscaras de movimento grandes não são recomendadas.",
"tips": "Máscaras de movimento não previnem objetos de serem detectados. Em vez disso você deve usar uma zona obrigatória.",
"documentation": "Leia a documentação"
},
"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."
}
}
}
},
"motionDetectionTuner": {
"desc": {
"title": "O Frigate usa a detecção de movimento como uma verificação de primeira linha para ver se há algo acontecendo no quadro que valha a pena verificar com a detecção de objetos.",
"documentation": "Leia o Guia de Ajuste de Movimento"
},
"Threshold": {
"title": "Limite",
"desc": "O valor do limiar dita o quanto de mudança na luminância de um pixel é requerida para ser considerada movimento. <em>Padrão: 30</em>"
},
"contourArea": {
"title": "Área de contorno",
"desc": "O valor do contorno da área é usado para decidir quais grupos de mudança de pixel se qualificam como movimento. <em>Padrão: 10</em>"
},
"improveContrast": {
"title": "Melhorar o contraste",
"desc": "Melhorar contraste para cenas escuras. <em>Padrão: ON</em>"
},
"toast": {
"success": "As configurações de movimento foram salvas."
},
"title": "Ajuste de Detecção de Movimento",
"unsavedChanges": "Alterações do Ajuste de Movimento Não Salvas ({{camera}})"
},
"debug": {
"detectorDesc": "O Frigate usa seus detectores ({{detectors}}) para detectar objetos no fluxo de vídeo da sua câmera.",
"desc": "A visualização de depuração mostra uma visão em tempo real dos objetos rastreados e suas estatísticas. A lista de objetos mostra um resumo com atraso de tempo dos objetos detectados.",
"objectList": "Lista de Objetos",
"boundingBoxes": {
"desc": "Mostrar caixas delimitadoras ao redor de objetos rastreados",
"colors": {
"label": "Cores da caixa delimitadora de objetos",
"info": "<li>Na inicialização, cores diferentes serão atribuídas a cada rótulo de objeto</li><li>Uma linha fina azul escura indica que o objeto não foi detectado neste momento</li><li>Uma linha fina cinza indica que o objeto foi detectado como estacionário</li><li>Uma linha grossa indica que o objeto está sujeito ao rastreamento automático (quando ativado)</li>"
},
"title": "Caixas delimitadoras"
},
"zones": {
"title": "Zonas",
"desc": "Mostrar um esboço de quaisquer zonas definidas"
},
"mask": {
"title": "Máscaras de movimento",
"desc": "Mostrar polígonos de máscara de movimento"
},
"motion": {
"title": "Caixas de movimento",
"desc": "Mostrar caixas ao redor das áreas onde o movimento é detectado",
"tips": "<p><strong>Caixas de movimento</strong></p><br><p>Caixas vermelhas serão sobrepostas em áreas do quadro onde o movimento está sendo detectado</p>"
},
"regions": {
"title": "Regiões",
"desc": "Mostrar uma caixa da região de interesse enviada ao detector de objetos",
"tips": "<p><strong>Caixas de Região</strong></p><br><p>Caixas verdes claras serão sobrepostas em áreas de interesse no quadro que está sendo enviado ao detector de objetos.</p>"
},
"title": "Depuração",
"debugging": "Depuração",
"objectShapeFilterDrawing": {
"desc": "Desenhe um retângulo na imagem para ver os detalhes da área e proporções",
"tips": "Habilite essa opção para desenhar um retângulo na imagem da camera para mostrar a sua área e proporção. Esses valores podem ser usados para estabelecer parâmetros de filtro de formato de objetos na sua configuração.",
"document": "Leia a documentação ",
"score": "Pontuação",
"ratio": "Proporção",
"area": "Área",
"title": "Desenho de Filtro de Formato de Objeto"
},
"noObjects": "Nenhum Objeto",
"timestamp": {
"title": "Timestamp",
"desc": "Sobreponha um timestamp na imagem"
}
},
"users": {
"title": "Usuários",
"management": {
"title": "Gerenciamento de Usuário",
"desc": "Gerencias as contas de usuário dessa instância do Frigate."
},
"addUser": "Adicionar Usuário",
"updatePassword": "Atualizar Senha",
"toast": {
"success": {
"createUser": "Usuário {{user}} criado com sucesso",
"deleteUser": "Usuário {{user}} deletado com sucesso",
"updatePassword": "Senha atualizada com sucesso.",
"roleUpdated": "Papel atualizado para {{user}}"
},
"error": {
"setPasswordFailed": "Falha ao salvar a senha: {{errorMessage}}",
"createUserFailed": "Falha ao criar usuário: {{errorMessage}}",
"deleteUserFailed": "Falha ao deletar usuário: {{errorMessage}}",
"roleUpdateFailed": "Falha ao atualizar papel: {{errorMessage}}"
}
},
"dialog": {
"form": {
"password": {
"match": "As senhas correspondem",
"notMatch": "As senhas são diferentes",
"title": "Senha",
"placeholder": "Digita a senha",
"confirm": {
"title": "Confirmar Senha",
"placeholder": "Confirmar Senha"
},
"strength": {
"title": "Nível de segurança da senha: ",
"weak": "Fraca",
"medium": "Mediana",
"strong": "Forte",
"veryStrong": "Muito Forte"
}
},
"newPassword": {
"title": "Senha Nova",
"placeholder": "Digite uma senha nova",
"confirm": {
"placeholder": "Digite a senha novamente"
}
},
"usernameIsRequired": "Nome de usuário requerido",
"passwordIsRequired": "Senha requerida",
"user": {
"title": "Nome de Usuário",
"desc": "Apenas letras, números, pontos e sublinhados são permitidos.",
"placeholder": "Digite o nome de usuário"
}
},
"createUser": {
"title": "Criar Novo Usuário",
"desc": "Adicionar um novo usuário e especificar um papel para acesso às áreas da interface do Frigate.",
"usernameOnlyInclude": "O nome de usuário pode conter apenas letras, números, . ou _",
"confirmPassword": "Por favor confirme a sua senha"
},
"deleteUser": {
"title": "Deletar Usuário",
"desc": "Essa ação não pode ser desfeita. Isso irá deletar permanentemente a conta do usuário e remover todos os dados associados.",
"warn": "Tem certeza que quer deletar <strong>{{username}}</strong>?"
},
"passwordSetting": {
"cannotBeEmpty": "A senha não pode estar vazia",
"doNotMatch": "As senhas não correspondem",
"updatePassword": "Atualizar Senha para {{username}}",
"setPassword": "Definir Senha",
"desc": "Crie uma senha forte para proteger essa conta."
},
"changeRole": {
"title": "Alterar Papel do Usuário",
"select": "Selecionar um papel",
"desc": "Atualizar permissões para <strong>{{username}}</strong>",
"roleInfo": {
"intro": "Selecione o papel apropriado para esse usuário:",
"admin": "Administrador",
"adminDesc": "Acesso total a todos os recursos.",
"viewer": "Espectador",
"viewerDesc": "Limitado aos Painéis ao Vivo, Revisar, Explorar, e Exportar somente."
}
}
},
"table": {
"username": "Nome de Usuário",
"actions": "Ações",
"role": "Papel",
"noUsers": "Nenhum usuário encontrado.",
"changeRole": "Mudar papel do usuário",
"password": "Senha",
"deleteUser": "Deletar usuário"
}
},
"notification": {
"suspendTime": {
"10minutes": "Suspender por 10 minutos",
"30minutes": "Suspender por 30 minutos",
"1hour": "Suspender por 1 hora",
"12hours": "Suspender por 12 horas",
"24hours": "Suspender por 24 horas",
"untilRestart": "Suspender até reiniciar",
"suspend": "Suspender",
"5minutes": "Suspender por 5 minutos"
},
"cancelSuspension": "Cancelar Suspensão",
"toast": {
"success": {
"registered": "Registrados para notificações com sucesso. É necessário reiniciar o Frigate para que as notificações possam ser enviadas (incluindo a notificação de teste).",
"settingSaved": "As configurações de notificações foram salvas."
},
"error": {
"registerFailed": "Falha ao salvar o registro para notificações."
}
},
"title": "Notificações",
"notificationSettings": {
"title": "Configurações de Notificação",
"desc": "O Frigate pode enviar notificações push nativamente ao seu dispositivo quando estiver sendo executado no navegador ou instalado como um PWA.",
"documentation": "Leia a Documentação"
},
"notificationUnavailable": {
"title": "Notificações Indisponíveis",
"desc": "Notificações push da Web exigem um contexto seguro (<code>https://…</code>). Essa é uma limitação do navegador. Acesse o Frigate com seguraça para usar as notificações.",
"documentation": "Leia a Documentação"
},
"globalSettings": {
"title": "Configurações Globais",
"desc": "Suspender as notificações temporáriamente para câmeras específicas em todos os dispositivos registrados."
},
"email": {
"title": "Email",
"placeholder": "ex: exemplo@email.com",
"desc": "Um email válido é requerido e será usado para notificar você caso haja algum problema com o serviço push."
},
"cameras": {
"title": "Câmeras",
"noCameras": "Nenhuma câmera disponível",
"desc": "Selecionar para quais câmeras habilitar as notificações."
},
"deviceSpecific": "Configurações Específicas do Dispositivo",
"registerDevice": "Registre Esse Dispositivo",
"unregisterDevice": "Cancelar Registro Desse Dispositivo",
"sendTestNotification": "Enviar uma notificação de teste",
"unsavedRegistrations": "Registros de Notificações Não Salvos",
"unsavedChanges": "Alterações de Notificações Não Salvas",
"active": "Notificações Ativas",
"suspended": "Notificações suspensas {{time}}"
},
"frigatePlus": {
"title": "Configurações do Frigate+",
"apiKey": {
"title": "Chave de API do Frigate+",
"validated": "A chave de API do Frigate+ detectada e validada",
"notValidated": "A chave de API do Frigate+ não detectada ou não validada",
"desc": "A chave de API do Frigate+ habilita a integração com o serviço do Frigate+.",
"plusLink": "Leia mais sobre o Frigate+"
},
"modelInfo": {
"plusModelType": {
"baseModel": "Modelo Base",
"userModel": "Ajuste Refinado"
},
"supportedDetectors": "Detectores Suportados",
"cameras": "Câmeras",
"loading": "Carregando informações do modelo…",
"error": "Falha ao carregar as informações do modelo",
"availableModels": "Modelos Disponíveis",
"loadingAvailableModels": "Carregando modelos disponíveis…",
"title": "Informação do Modelo",
"modelType": "Tipo de Modelo",
"trainDate": "Data do Treinamento",
"baseModel": "Modelo Base",
"modelSelect": "Os seus modelos disponíveis no Frigate+ podem ser selecionados aqui. Note que apenas modelos compatíveis com a sua configuração atual de detector podem ser selecionados."
},
"snapshotConfig": {
"title": "Configuração de Captura de Imagem",
"desc": "Enviar ao Frigate+ requer tanto a captura de imagem quanto a captura de imagem <code>clean_copy</code> estarem habilitadas na sua configuração.",
"documentation": "Leia a documentação",
"cleanCopyWarning": "Algumas câmeras possuem captura de imagem habilitada porém têm a cópia limpa desabilitada. Você precisa habilitar a <code>clean_copy</code> nas suas configurações de captura de imagem para poder submeter imagems dessa câmera ao Frigate+.",
"table": {
"camera": "Câmera",
"snapshots": "Capturas de Imagem",
"cleanCopySnapshots": "Capturas de Imagem <code>clean_copy</code>"
}
},
"unsavedChanges": "Alterações de configurações do Frigate+ não salvas",
"restart_required": "Reinicialização necessária (modelo do Frigate+ foi alterado)",
"toast": {
"success": "As configurações do Frigate+ foram salvas. Reinicie o Frigate para aplicar as alterações.",
"error": "Falha ao salvar as alterações de configuração: {{errorMessage}}"
} }
} }
} }
+7 -7
View File
@@ -24,7 +24,7 @@
"type": { "type": {
"label": "Tipo", "label": "Tipo",
"timestamp": "Marca temporal", "timestamp": "Marca temporal",
"tag": "Etiqueta", "tag": "Marcador",
"message": "Mensagem" "message": "Mensagem"
}, },
"tips": "Os Registros estão sendo transmitidos do servidor", "tips": "Os Registros estão sendo transmitidos do servidor",
@@ -157,7 +157,7 @@
"detectHighCpuUsage": "{{camera}} possui alta utilização de CPU para detecção ({{detectAvg}}%)", "detectHighCpuUsage": "{{camera}} possui alta utilização de CPU para detecção ({{detectAvg}}%)",
"healthy": "O sistema está saudável", "healthy": "O sistema está saudável",
"cameraIsOffline": "{{camera}} está offline", "cameraIsOffline": "{{camera}} está offline",
"reindexingEmbeddings": "Reindexando embeddings ({{processed}}% completado)", "reindexingEmbeddings": "Reindexando os vetores de característica de imagens ({{processed}}% completado)",
"detectIsSlow": "{{detect}} está lento ({{speed}} ms)" "detectIsSlow": "{{detect}} está lento ({{speed}} ms)"
}, },
"enrichments": { "enrichments": {
@@ -167,13 +167,13 @@
"face_recognition": "Reconhecimento Facial", "face_recognition": "Reconhecimento Facial",
"plate_recognition": "Reconhecimento de Placa", "plate_recognition": "Reconhecimento de Placa",
"plate_recognition_speed": "Velocidade de Reconhecimento de Placas", "plate_recognition_speed": "Velocidade de Reconhecimento de Placas",
"text_embedding_speed": "Velocidade de Incorporação de Textos", "text_embedding_speed": "Velocidade de Geração de Vetores de Texto",
"yolov9_plate_detection_speed": "Velocidade de Reconhecimento de Placas do YOLOv9", "yolov9_plate_detection_speed": "Velocidade de Reconhecimento de Placas do YOLOv9",
"yolov9_plate_detection": "Detecção de Placas do YOLOv9", "yolov9_plate_detection": "Detecção de Placas do YOLOv9",
"image_embedding": "Incorporação de Imagem", "image_embedding": "Vetores de Características de Imagens",
"text_embedding": "Incorporação de Texto", "text_embedding": "Vetor de Característica de Texto",
"image_embedding_speed": "Velocidade de Incorporação de Imagem", "image_embedding_speed": "Velocidade de Geração de Vetores de Imagem",
"face_embedding_speed": "Velocidade de Incorporação de Rosto", "face_embedding_speed": "Velocidade de Geração de Vetores de Rostos",
"face_recognition_speed": "Velocidade de Reconhecimento de Rostos" "face_recognition_speed": "Velocidade de Reconhecimento de Rostos"
} }
} }
+3 -3
View File
@@ -9,15 +9,15 @@
"horse": "Cal", "horse": "Cal",
"bird": "Pasare", "bird": "Pasare",
"sheep": "Oaie", "sheep": "Oaie",
"boat": "Barca", "boat": "Barcă",
"motorcycle": "Motocicleta", "motorcycle": "Motocicletă",
"bus": "Autobuz", "bus": "Autobuz",
"train": "Tren", "train": "Tren",
"skateboard": "Skateboard", "skateboard": "Skateboard",
"camera": "Camera foto", "camera": "Camera foto",
"bicycle": "Bicicletă", "bicycle": "Bicicletă",
"car": "Mașină", "car": "Mașină",
"cat": "Pisica", "cat": "Pisică",
"animal": "Animal", "animal": "Animal",
"goat": "Capra", "goat": "Capra",
"keyboard": "Orga", "keyboard": "Orga",
+2 -2
View File
@@ -4,8 +4,8 @@
"button": "Repornește", "button": "Repornește",
"restarting": { "restarting": {
"title": "Frigate repornește", "title": "Frigate repornește",
"content": "Această pagină se va reâncărca în {{countdown}} secunde.", "content": "Această pagină se va reâncărca automat în {{countdown}} secunde.",
"button": "Forteaza Reincarcarea Acum" "button": "Forțează acum reîncărcarea"
} }
}, },
"explore": { "explore": {
+3 -3
View File
@@ -61,7 +61,7 @@
"label": "Filtru camere" "label": "Filtru camere"
}, },
"review": { "review": {
"showReviewed": "Afișează revizuitele" "showReviewed": "Afișează cele revizuite"
}, },
"motion": { "motion": {
"showMotionOnly": "Afișează doar mișcarea" "showMotionOnly": "Afișează doar mișcarea"
@@ -98,10 +98,10 @@
"label": "Filtrează nivelul jurnalului", "label": "Filtrează nivelul jurnalului",
"filterBySeverity": "Filtrează jurnalele după severitate", "filterBySeverity": "Filtrează jurnalele după severitate",
"loading": { "loading": {
"title": "Se încarcă", "title": "Încărcare continuă",
"desc": "Când panoul de jurnale este derulat până jos, noile jurnale sunt afișate automat pe măsură ce sunt adăugate." "desc": "Când panoul de jurnale este derulat până jos, noile jurnale sunt afișate automat pe măsură ce sunt adăugate."
}, },
"disableLogStreaming": "Dezactivează fluxul jurnalelor", "disableLogStreaming": "Dezactivează încărcarea continuă",
"allLogs": "Toate jurnalele" "allLogs": "Toate jurnalele"
}, },
"trackedObjectDelete": { "trackedObjectDelete": {
+4 -4
View File
@@ -5,17 +5,17 @@
"airplane": "Avion", "airplane": "Avion",
"bus": "Autobuz", "bus": "Autobuz",
"train": "Tren", "train": "Tren",
"boat": "Barca", "boat": "Barcă",
"fire_hydrant": "Hidrant", "fire_hydrant": "Hidrant",
"street_sign": "Semn de Circulatie", "street_sign": "Semn de Circulatie",
"stop_sign": "Semn de Stop", "stop_sign": "Semn de Stop",
"parking_meter": "Automat de Parcare", "parking_meter": "Automat de Parcare",
"bench": "Bancheta", "bench": "Bancheta",
"bird": "Pasare", "bird": "Pasare",
"cat": "Pisica", "cat": "Pisică",
"dog": "Câine", "dog": "Câine",
"horse": "Cal", "horse": "Cal",
"cow": "Vaca", "cow": "Vacă",
"elephant": "Elefant", "elephant": "Elefant",
"bear": "Urs", "bear": "Urs",
"giraffe": "Girafa", "giraffe": "Girafa",
@@ -46,7 +46,7 @@
"bowl": "Castron", "bowl": "Castron",
"banana": "Banana", "banana": "Banana",
"apple": "Mar", "apple": "Mar",
"motorcycle": "Motocicleta", "motorcycle": "Motocicletă",
"traffic_light": "Semafor", "traffic_light": "Semafor",
"sheep": "Oaie", "sheep": "Oaie",
"zebra": "Zebra", "zebra": "Zebra",
+2 -2
View File
@@ -37,7 +37,7 @@
}, },
"objectLifecycle": { "objectLifecycle": {
"lifecycleItemDesc": { "lifecycleItemDesc": {
"visible": "{{label}} detectata", "visible": "S-a detectat {{label}}",
"active": "{{label}} a devenit activ", "active": "{{label}} a devenit activ",
"entered_zone": "{{label}} a intrat în {{zones}}", "entered_zone": "{{label}} a intrat în {{zones}}",
"stationary": "{{label}} a devenit staționar", "stationary": "{{label}} a devenit staționar",
@@ -50,7 +50,7 @@
"ratio": "Raport", "ratio": "Raport",
"area": "Suprafață" "area": "Suprafață"
}, },
"gone": "{{label}} a ieșit", "gone": "{{label}} a părasit cadrul",
"heard": "{{label}} auzit(ă)", "heard": "{{label}} auzit(ă)",
"external": "{{label}} detectat(ă)" "external": "{{label}} detectat(ă)"
}, },
+1 -1
View File
@@ -67,7 +67,7 @@
"title": "Calendar", "title": "Calendar",
"firstWeekday": { "firstWeekday": {
"label": "Prima zi a săptămânii", "label": "Prima zi a săptămânii",
"desc": "Ziua în care încep săptămânile calendarului de revizuire.", "desc": "Ziua cu care încep săptămânile calendarului de revizuire.",
"sunday": "Duminică", "sunday": "Duminică",
"monday": "Luni" "monday": "Luni"
} }
+4 -4
View File
@@ -66,7 +66,7 @@
}, },
"title": "Spațiu stocare", "title": "Spațiu stocare",
"cameraStorage": { "cameraStorage": {
"title": "Spațiu tocare camere", "title": "Spațiu stocare camere",
"camera": "Camera", "camera": "Camera",
"unusedStorageInformation": "Informații despre stocarea neutilizată", "unusedStorageInformation": "Informații despre stocarea neutilizată",
"storageUsed": "Spațiu stocare", "storageUsed": "Spațiu stocare",
@@ -86,12 +86,12 @@
}, },
"copy": { "copy": {
"label": "Copiază", "label": "Copiază",
"success": "Copiază jurnalul", "success": "Jurnalul a fost copiat",
"error": "Jurnalul nu s-a putut copia" "error": "Jurnalul nu s-a putut copia"
}, },
"type": { "type": {
"label": "Tip", "label": "Tip",
"timestamp": "Marca tempora", "timestamp": "Data / ora",
"tag": "Etichetă", "tag": "Etichetă",
"message": "Mesaj" "message": "Mesaj"
}, },
@@ -110,7 +110,7 @@
"image_embedding": "Încorporare imagini", "image_embedding": "Încorporare imagini",
"text_embedding": "Încorporare text", "text_embedding": "Încorporare text",
"plate_recognition": "Recunoaștere numere de înmatriculare", "plate_recognition": "Recunoaștere numere de înmatriculare",
"image_embedding_speed": "Viteză încorporarei imaginii", "image_embedding_speed": "Viteză încorporare imagini",
"face_recognition": "Recunoaștere facială", "face_recognition": "Recunoaștere facială",
"face_recognition_speed": "Viteză recunoaștere facială", "face_recognition_speed": "Viteză recunoaștere facială",
"plate_recognition_speed": "Viteză recunoaștere numere de înmatriculare", "plate_recognition_speed": "Viteză recunoaștere numere de înmatriculare",
+3 -3
View File
@@ -420,11 +420,11 @@ export default function InputWithTags({
? t("button.yes", { ns: "common" }) ? t("button.yes", { ns: "common" })
: t("button.no", { ns: "common" }); : t("button.no", { ns: "common" });
} else if (filterType === "labels") { } else if (filterType === "labels") {
return getTranslatedLabel(filterValues as string); return getTranslatedLabel(String(filterValues));
} else if (filterType === "search_type") { } else if (filterType === "search_type") {
return t("filter.searchType." + (filterValues as string)); return t("filter.searchType." + String(filterValues));
} else { } else {
return (filterValues as string).replaceAll("_", " "); return String(filterValues).replaceAll("_", " ");
} }
} }
@@ -85,6 +85,7 @@ export default function GeneralSettings({ className }: GeneralSettingsProps) {
"nb-NO": "nb", "nb-NO": "nb",
"yue-Hant": "yue", "yue-Hant": "yue",
"zh-CN": "zhCN", "zh-CN": "zhCN",
"pt-BR": "ptBR",
}; };
return supportedLanguageKeys.map((key) => { return supportedLanguageKeys.map((key) => {
+1
View File
@@ -10,6 +10,7 @@ const localeMap: Record<string, () => Promise<Locale>> = {
fr: () => import("date-fns/locale/fr").then((module) => module.fr), fr: () => import("date-fns/locale/fr").then((module) => module.fr),
ar: () => import("date-fns/locale/ar").then((module) => module.ar), ar: () => import("date-fns/locale/ar").then((module) => module.ar),
pt: () => import("date-fns/locale/pt").then((module) => module.pt), pt: () => import("date-fns/locale/pt").then((module) => module.pt),
"pt-BR": () => import("date-fns/locale/pt").then((module) => module.pt),
ru: () => import("date-fns/locale/ru").then((module) => module.ru), ru: () => import("date-fns/locale/ru").then((module) => module.ru),
de: () => import("date-fns/locale/de").then((module) => module.de), de: () => import("date-fns/locale/de").then((module) => module.de),
ja: () => import("date-fns/locale/ja").then((module) => module.ja), ja: () => import("date-fns/locale/ja").then((module) => module.ja),
+2 -2
View File
@@ -17,7 +17,7 @@ export function useVideoDimensions(
}); });
const videoAspectRatio = useMemo(() => { const videoAspectRatio = useMemo(() => {
return videoResolution.width / videoResolution.height || 16 / 9; return videoResolution.width / videoResolution.height;
}, [videoResolution]); }, [videoResolution]);
const containerAspectRatio = useMemo(() => { const containerAspectRatio = useMemo(() => {
@@ -25,7 +25,7 @@ export function useVideoDimensions(
}, [containerWidth, containerHeight]); }, [containerWidth, containerHeight]);
const videoDimensions = useMemo(() => { const videoDimensions = useMemo(() => {
if (!containerWidth || !containerHeight) if (!containerWidth || !containerHeight || !videoAspectRatio)
return { width: "100%", height: "100%" }; return { width: "100%", height: "100%" };
if (containerAspectRatio > videoAspectRatio) { if (containerAspectRatio > videoAspectRatio) {
const height = containerHeight; const height = containerHeight;
+1
View File
@@ -2,6 +2,7 @@ export const supportedLanguageKeys = [
"en", "en",
"es", "es",
"pt", "pt",
"pt-BR",
"fr", "fr",
"de", "de",
"it", "it",
+10 -7
View File
@@ -26,6 +26,15 @@ import { useDocDomain } from "@/hooks/use-doc-domain";
const API_LIMIT = 25; const API_LIMIT = 25;
// always parse these as string arrays
const SEARCH_FILTER_ARRAY_KEYS = [
"cameras",
"labels",
"sub_labels",
"recognized_license_plate",
"zones",
];
export default function Explore() { export default function Explore() {
// search field handler // search field handler
@@ -58,13 +67,7 @@ export default function Explore() {
const [search, setSearch] = useState(""); const [search, setSearch] = useState("");
const [searchFilter, setSearchFilter, searchSearchParams] = const [searchFilter, setSearchFilter, searchSearchParams] =
useApiFilterArgs<SearchFilter>([ useApiFilterArgs<SearchFilter>(SEARCH_FILTER_ARRAY_KEYS);
"cameras",
"labels",
"sub_labels",
"recognized_license_plate",
"zones",
]);
const searchTerm = useMemo( const searchTerm = useMemo(
() => searchSearchParams?.["query"] || "", () => searchSearchParams?.["query"] || "",
@@ -118,50 +118,6 @@ export default function NotificationView({
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, [changedValue]); }, [changedValue]);
// notification key handling
const { data: publicKey } = useSWR(
config?.notifications?.enabled ? "notifications/pubkey" : null,
{ revalidateOnFocus: false },
);
const subscribeToNotifications = useCallback(
(registration: ServiceWorkerRegistration) => {
if (registration) {
addMessage(
"notification_settings",
t("notification.unsavedRegistrations"),
undefined,
"registration",
);
registration.pushManager
.subscribe({
userVisibleOnly: true,
applicationServerKey: publicKey,
})
.then((pushSubscription) => {
axios
.post("notifications/register", {
sub: pushSubscription,
})
.catch(() => {
toast.error(t("notification.toast.error.registerFailed"), {
position: "top-center",
});
pushSubscription.unsubscribe();
registration.unregister();
setRegistration(null);
});
toast.success(t("notification.toast.success.registered"), {
position: "top-center",
});
});
}
},
[publicKey, addMessage, t],
);
// notification state // notification state
const [registration, setRegistration] = const [registration, setRegistration] =
@@ -206,8 +162,70 @@ export default function NotificationView({
}, },
}); });
const watchAllEnabled = form.watch("allEnabled");
const watchCameras = form.watch("cameras"); const watchCameras = form.watch("cameras");
const anyCameraNotificationsEnabled = useMemo(
() =>
config &&
Object.values(config.cameras).some(
(c) =>
c.enabled_in_config &&
c.notifications &&
c.notifications.enabled_in_config,
),
[config],
);
const shouldFetchPubKey = Boolean(
config &&
(config.notifications?.enabled || anyCameraNotificationsEnabled) &&
(watchAllEnabled ||
(Array.isArray(watchCameras) && watchCameras.length > 0)),
);
const { data: publicKey } = useSWR(
shouldFetchPubKey ? "notifications/pubkey" : null,
{ revalidateOnFocus: false },
);
const subscribeToNotifications = useCallback(
(registration: ServiceWorkerRegistration) => {
if (registration) {
addMessage(
"notification_settings",
t("notification.unsavedRegistrations"),
undefined,
"registration",
);
registration.pushManager
.subscribe({
userVisibleOnly: true,
applicationServerKey: publicKey,
})
.then((pushSubscription) => {
axios
.post("notifications/register", {
sub: pushSubscription,
})
.catch(() => {
toast.error(t("notification.toast.error.registerFailed"), {
position: "top-center",
});
pushSubscription.unsubscribe();
registration.unregister();
setRegistration(null);
});
toast.success(t("notification.toast.success.registered"), {
position: "top-center",
});
});
}
},
[publicKey, addMessage, t],
);
useEffect(() => { useEffect(() => {
if (watchCameras.length > 0) { if (watchCameras.length > 0) {
form.setValue("allEnabled", false); form.setValue("allEnabled", false);
@@ -521,13 +539,7 @@ export default function NotificationView({
</Heading> </Heading>
<Button <Button
aria-label={t("notification.registerDevice")} aria-label={t("notification.registerDevice")}
disabled={ disabled={!shouldFetchPubKey || publicKey == undefined}
(!config?.notifications.enabled &&
notificationCameras.length === 0 &&
!form.watch("allEnabled") &&
form.watch("cameras").length === 0) ||
publicKey == undefined
}
onClick={() => { onClick={() => {
if (registration == null) { if (registration == null) {
Notification.requestPermission().then((permission) => { Notification.requestPermission().then((permission) => {