{{label}} 인가요?",
+ "ask_an": "이 것은 {{label}} 인가요?",
+ "ask_full": "이 것은 {{untranslatedLabel}} ({{translatedLabel}}) 인가요?"
+ },
+ "state": {
+ "submitted": "제출됨"
}
}
},
@@ -26,7 +33,7 @@
"export": {
"time": {
"fromTimeline": "타임라인에서 선택하기",
- "lastHour_other": "지난 시간",
+ "lastHour_other": "지난 {{count}} 시간",
"custom": "커스텀",
"start": {
"title": "시작 시간",
@@ -44,12 +51,13 @@
"export": "내보내기",
"selectOrExport": "선택 또는 내보내기",
"toast": {
- "success": "내보내기가 성공적으로 시작되었습니다. /exports 폴더에서 파일을 보실 수 있습니다.",
+ "success": "내보내기가 성공적으로 시작되었습니다. 내보내기 페이지에서 파일을 보실 수 있습니다.",
"error": {
"failed": "내보내기 시작 실패:{{error}}",
"endTimeMustAfterStartTime": "종료 시간은 시작 시간보다 뒤에 있어야합니다",
"noVaildTimeSelected": "유효한 시간 범위가 선택되지 않았습니다"
- }
+ },
+ "view": "보기"
},
"fromTimeline": {
"saveExport": "내보내기 저장",
@@ -86,7 +94,19 @@
},
"recording": {
"confirmDelete": {
- "title": "삭제 확인"
+ "title": "삭제 확인",
+ "desc": {
+ "selected": "이 리뷰 항목과 관련된 모든 녹화된 영상을 삭제하시겠습니까?Casete de mișcare
Casetele roșii vor fi suprapuse pe zonele din cadru unde este detectată în prezent mișcare
", - "title": "Casete de mișcare", - "desc": "Arată chenarele în jurul zonelor unde este detectată mișcare" + "tips": "Chenare de mișcare
Chenare roșii vor fi suprapuse pe zonele din cadru unde este detectată mișcare în prezent
", + "title": "Chenare de mișcare", + "desc": "Afișează chenare în zonele unde este detectată mișcare" }, "regions": { - "tips": "Casete de regiune
Casetele verde deschis vor fi suprapuse pe zonele de interes din cadru care sunt trimise către detectorul de obiecte.
", + "tips": "Chenare de regiune
Chenare verzi aprinse vor fi suprapuse pe zonele de interes din cadru care sunt trimise către detectorul de obiecte.
", "title": "Regiuni", - "desc": "Arată o casetă a regiunii de interes trimise detectorului de obiecte" + "desc": "Afișează regiunea de interes trimisă către detectorul de obiecte" }, - "desc": "Vizualizarea de depanare îți arată o vizualizare în timp real a obiectelor urmărite și a statisticilor acestora. Lista de obiecte afișează un rezumat întârziat al obiectelor detectate.", + "desc": "Vizualizarea de depanare arată în timp real obiectele urmărite și statisticile lor. Lista de obiecte arată un rezumat al obiectelor detectate.", "objectShapeFilterDrawing": { "document": "Citește documentația ", - "area": "Suprafață", + "area": "Arie", "title": "Desenare filtru formă obiect", - "desc": "Desenează un dreptunghi pe imagine pentru a vizualiza detaliile zonei și ale raportului", - "tips": "Activează această opțiune pentru a desena un dreptunghi pe imaginea camerei, pentru a-i arăta zona și raportul. Aceste valori pot fi apoi utilizate pentru a seta parametrii de filtrare a formei obiectelor în configurația ta.", + "desc": "Desenază un dreptunghi pe imagine pentru a vedea detaliile despre arie și raport", + "tips": "Activează această opțiune pentru a desena un dreptunghi pe imaginea camerei și a vedea aria și raportul acestuia. Aceste valori pot fi folosite ulterior pentru a seta parametrii filtrului de formă în configurație.", "score": "Scor", "ratio": "Raport" }, - "noObjects": "Nici un obiect", + "noObjects": "Niciun obiect", "boundingBoxes": { - "title": "Casete de delimitare", - "desc": "Afișează casete de delimitare în jurul obiectelor urmărite", + "title": "Chenare de încadrare", + "desc": "Afișează chenarele de încadrare în jurul obiectelor urmărite", "colors": { - "label": "Culori pentru casetele de delimitare ale obiectelor", - "info": "Căi
Liniile și cercurile vor indica punctele semnificative prin care obiectul urmărit s-a deplasat pe parcursul ciclului său de viață.
" + "tips": "Trasee
Liniile și cercurile vor indica punctele semnificative prin care obiectul urmărit a trecut în timpul existenței sale.
" }, "audio": { "title": "Audio", "noAudioDetections": "Nicio detecție audio", "score": "scor", - "currentRMS": "RMS curent", - "currentdbFS": "dbFS curent" + "currentRMS": "RMS actual", + "currentdbFS": "dbFS actual" }, - "openCameraWebUI": "Deschide interfața web pentru {{camera}}" + "openCameraWebUI": "Deschide interfața web a camerei {{camera}}" }, "users": { "dialog": { "deleteUser": { - "warn": "Ești sigur că vrei să ștergi utilizatorul {{username}}?", - "title": "Șterge utilizatorul", - "desc": "Această acțiune nu poate fi anulată. Aceasta va șterge definitiv contul de utilizator și va elimina toate datele asociate." + "warn": "Sigur vrei să ștergi utilizatorul {{username}}?", + "title": "Șterge utilizator", + "desc": "Această acțiune nu poate fi anulată. Contul va fi șters definitiv împreună cu toate datele asociate." }, "changeRole": { "desc": "Actualizează permisiunile pentru {{username}}", "roleInfo": { - "intro": "Selectează rolul potrivit pentru acest utilizator:", + "intro": "Selectează rolul corespunzător pentru acest utilizator:", "admin": "Administrator", "adminDesc": "Acces complet la toate funcțiile.", "viewer": "Vizualizator", - "viewerDesc": "Limitat doar la tablourile de bord Live, Revizuire, Explorare și Exporturi.", - "customDesc": "Rol personalizat cu acces specific la cameră." + "viewerDesc": "Limitat la tablouri de bord Live, Recenzii, Explorare și Exporturi.", + "customDesc": "Rol personalizat cu acces la camere specifice." }, "select": "Selectează un rol", "title": "Schimbă rolul utilizatorului" @@ -496,7 +578,7 @@ "password": { "strength": { "weak": "Slabă", - "title": "Putere parolă: ", + "title": "Complexitate parolă: ", "veryStrong": "Foarte puternică", "medium": "Medie", "strong": "Puternică" @@ -509,7 +591,7 @@ "title": "Parolă", "match": "Parolele se potrivesc", "notMatch": "Parolele nu se potrivesc", - "show": "Afișează parola", + "show": "Arată parola", "hide": "Ascunde parola", "requirements": { "title": "Cerințe parolă:", @@ -519,48 +601,48 @@ "special": "Cel puțin un caracter special (!@#$%^&*(),.?\":{}|<>)" } }, - "passwordIsRequired": "Este nevoie de parolă", + "passwordIsRequired": "Parola este obligatorie", "user": { - "placeholder": "Introdu nume utilizator", + "placeholder": "Introdu numele de utilizator", "title": "Nume utilizator", - "desc": "Sunt permise doar litere, cifre, puncte și subliniere." + "desc": "Sunt permise doar litere, cifre, puncte și sublinieri." }, "newPassword": { "title": "Parolă nouă", - "placeholder": "Introdu parola nouă", + "placeholder": "Introdu noua parolă", "confirm": { - "placeholder": "Re-introdu parola nouă" + "placeholder": "Introdu din nou noua parolă" } }, - "usernameIsRequired": "Este nevoie de numele de utilizator", + "usernameIsRequired": "Numele de utilizator este obligatoriu", "currentPassword": { - "title": "Parola curentă", - "placeholder": "Introduceți parola curentă" + "title": "Parola actuală", + "placeholder": "Introdu parola actuală" } }, "createUser": { - "confirmPassword": "Te rog să confirmi parola", - "title": "Crează un utilizator nou", - "desc": "Adaugă un cont de utilizator nou și specifică un rol pentru accesul la anumite zone ale interfeței Frigate.", - "usernameOnlyInclude": "Numele de utilizator poate conține doar litere, cifre, . sau _" + "confirmPassword": "Te rugăm să confirmi parola", + "title": "Creează utilizator nou", + "desc": "Adaugă un cont nou și specifică un rol pentru accesul în interfața Frigate.", + "usernameOnlyInclude": "Numele de utilizator poate conține doar litere, cifre, puncte (.) sau sublinieri (_)" }, "passwordSetting": { "cannotBeEmpty": "Parola nu poate fi goală", "doNotMatch": "Parolele nu se potrivesc", "updatePassword": "Actualizează parola pentru {{username}}", - "setPassword": "Schimbă parola", + "setPassword": "Setează parola", "desc": "Creează o parolă puternică pentru a securiza acest cont.", - "currentPasswordRequired": "Parola curentă este obligatorie", - "incorrectCurrentPassword": "Parola curentă incorectă", - "passwordVerificationFailed": "Nu s-a putut verifica parola", - "multiDeviceWarning": "Orice alte dispozitive pe care ești autentificat vor trebui să se autentifice din nou în termen de {{refresh_time}}.", - "multiDeviceAdmin": "De asemenea, poți forța toți utilizatorii să se reautentifice imediat prin rotirea secretului tău JWT." + "currentPasswordRequired": "Parola actuală este obligatorie", + "incorrectCurrentPassword": "Parola actuală este incorectă", + "passwordVerificationFailed": "Verificarea parolei a eșuat", + "multiDeviceWarning": "Orice alt dispozitiv pe care ești autentificat va necesita reautentificarea în {{refresh_time}}.", + "multiDeviceAdmin": "Poți de asemenea să forțezi toți utilizatorii să se reautentifice imediat prin rotirea secretului JWT." } }, "addUser": "Adaugă utilizator", "management": { "desc": "Gestionează conturile de utilizator ale acestei instanțe Frigate.", - "title": "Gestionare utilizatori" + "title": "Administrare utilizatori" }, "toast": { "success": { @@ -570,10 +652,10 @@ "deleteUser": "Utilizatorul {{user}} a fost șters cu succes" }, "error": { - "setPasswordFailed": "Salvarea parolei a eșuat: {{errorMessage}}", - "createUserFailed": "Crearea utilizatorului a eșuat: {{errorMessage}}", - "roleUpdateFailed": "Actualizarea rolului a eșuat: {{errorMessage}}", - "deleteUserFailed": "Ștergerea utilizatorului a eșuat: {{errorMessage}}" + "setPasswordFailed": "Eroare la salvarea parolei: {{errorMessage}}", + "createUserFailed": "Eroare la crearea utilizatorului: {{errorMessage}}", + "roleUpdateFailed": "Eroare la actualizarea rolului: {{errorMessage}}", + "deleteUserFailed": "Eroare la ștergerea utilizatorului: {{errorMessage}}" } }, "updatePassword": "Resetează parola", @@ -582,7 +664,7 @@ "username": "Nume utilizator", "actions": "Acțiuni", "role": "Rol", - "noUsers": "Nu a fost găsit niciun utilizator.", + "noUsers": "Niciun utilizator găsit.", "changeRole": "Schimbă rolul utilizatorului", "deleteUser": "Șterge utilizatorul", "password": "Resetează parola" @@ -590,120 +672,127 @@ }, "notification": { "notificationSettings": { - "title": "Setări pentru notificări", - "desc": "Frigate poate trimite nativ notificări push către dispozitivul tău atunci când rulează în browser sau este instalat ca PWA.", + "title": "Setări Notificări", + "desc": "Frigate poate trimite notificări push direct pe dispozitivul tău când rulează în browser sau este instalat ca PWA.", "documentation": "Citește documentația" }, "globalSettings": { - "desc": "Suspendă temporar notificările pentru camerele specifice pe toate dispozitivele înregistrate.", - "title": "Setări globale" + "desc": "Suspendă temporar notificările pentru anumite camere pe toate dispozitivele înregistrate.", + "title": "Setări Globale" }, "email": { - "placeholder": "ex. exemplu@email.com", - "desc": "Este necesar un email valid, care va fi folosit pentru a te notifica în cazul în care apar probleme cu serviciul de push.", + "placeholder": "ex: exemplu@email.com", + "desc": "E necesară o adresă de email validă pentru a te anunța dacă apar probleme cu serviciul de push.", "title": "Email" }, "notificationUnavailable": { "documentation": "Citește documentația", - "desc": "Notificările push web necesită un context securizat (https://…). Aceasta este o limitare a browserului. Accesează Frigate în mod securizat pentru a putea folosi notificările.",
- "title": "Notificările nu sunt disponibile"
+ "desc": "Notificările push web necesită un context securizat (https://…). Aceasta este o limitare a browserului. Accesează Frigate în mod securizat pentru a utiliza notificările.",
+ "title": "Notificări Indisponibile"
},
"cameras": {
"title": "Camere",
- "desc": "Selectează camerele pentru care dorești să activezi notificările.",
- "noCameras": "Nu există camere disponibile"
+ "desc": "Alege camerele pentru care vrei să activezi notificările.",
+ "noCameras": "Nicio cameră disponibilă"
},
- "deviceSpecific": "Setări specifice dispozitivului",
- "registerDevice": "Înregistrează acest dispozitiv",
- "unregisterDevice": "Deregistrează acest dispozitiv",
+ "deviceSpecific": "Setări Specifice Dispozitivului",
+ "registerDevice": "Înregistrează acest Dispozitiv",
+ "unregisterDevice": "Anulează Înregistrarea Dispozitivului",
"sendTestNotification": "Trimite o notificare de test",
"suspendTime": {
"12hours": "Suspendă pentru 12 ore",
"suspend": "Suspendă",
"5minutes": "Suspendă pentru 5 minute",
"10minutes": "Suspendă pentru 10 minute",
- "24hours": "Suspendă pentru 24 de ore",
- "untilRestart": "Suspendă până la restart",
- "1hour": "Suspendă pentru 1 oră",
+ "24hours": "Suspendă pentru 24 ore",
+ "untilRestart": "Suspendă până la repornire",
+ "1hour": "Suspendă pentru o oră",
"30minutes": "Suspendă pentru 30 minute"
},
"toast": {
"success": {
- "registered": "Înregistrarea pentru notificări a fost realizată cu succes. Este necesară repornirea Frigate înainte ca orice notificare (inclusiv o notificare de test) să poată fi trimisă.",
- "settingSaved": "Setările notificărilor au fost salvate."
+ "registered": "Înregistrarea pentru notificări a reușit. Este necesară repornirea Frigate înainte de a putea trimite orice notificare (inclusiv cea de test).",
+ "settingSaved": "Setările pentru notificări au fost salvate."
},
"error": {
- "registerFailed": "Eroare la salvarea înregistrării notificării."
+ "registerFailed": "Eroare la salvarea înregistrării notificărilor."
}
},
"suspended": "Notificări suspendate {{time}}",
- "active": "Notificări active",
- "unsavedRegistrations": "Înregistrări notificări nesalvate",
- "unsavedChanges": "Modificări ale notificărilor nesalvate",
+ "active": "Notificări Active",
+ "unsavedRegistrations": "Înregistrări de notificări nesalvate",
+ "unsavedChanges": "Modificări de notificări nesalvate",
"title": "Notificări",
- "cancelSuspension": "Anulează suspendarea"
+ "cancelSuspension": "Anulează Suspendarea"
},
"frigatePlus": {
"apiKey": {
- "plusLink": "Citește mai mult despre Frigate+",
+ "plusLink": "Citește mai multe despre Frigate+",
"desc": "Cheia API Frigate+ permite integrarea cu serviciul Frigate+.",
- "validated": "Frigate+ API key a fost detectată și validată",
- "title": "Frigate+ API Key",
- "notValidated": "Frigate+ API key nu a fost detectată sau nu a fost validată"
+ "validated": "Cheia API Frigate+ a fost detectată și validată",
+ "title": "Cheie API Frigate+",
+ "notValidated": "Cheia API Frigate+ nu este detectată sau validată"
},
"snapshotConfig": {
- "title": "Configurație snapshot-uri",
+ "title": "Configurare snapshot-uri",
"table": {
"snapshots": "Snapshot-uri",
"cleanCopySnapshots": "Snapshot-uri clean_copy",
"camera": "Cameră"
},
"documentation": "Citește documentația",
- "cleanCopyWarning": "Unele camere au snapshot-uri activate, dar copia curată (clean_copy) este dezactivată. Trebuie să activați clean_copy în configurația instantaneelor pentru a putea trimite imagini de la aceste camere către Frigate+.",
- "desc": "Trimiterea către Frigate+ necesită ca atât snapshot-urile, cât și snapshot-urile clean_copy să fie activate în configurația ta."
+ "cleanCopyWarning": "Unele camere au snapshot-uri activate, dar au copia curată dezactivată. Trebuie să activezi clean_copy în configurația snapshot-urilor pentru a putea trimite imagini de la aceste camere către Frigate+.",
+ "desc": "Trimiterea către Frigate+ necesită ca ambele opțiuni, snapshot-uri și clean_copy, să fie activate în configurație."
},
"modelInfo": {
- "title": "Informații model",
- "supportedDetectors": "Detectoare suportate",
+ "title": "Informații Model",
+ "supportedDetectors": "Detectoare Suportate",
"plusModelType": {
- "baseModel": "Model de bază",
- "userModel": "Reglat-fin"
+ "baseModel": "Model de Bază",
+ "userModel": "Reglat fin"
},
"loadingAvailableModels": "Se încarcă modelele disponibile…",
- "modelSelect": "Modelele disponibile pe Frigate+ pot fi selectate aici. Rețineți că pot fi selectate doar modelele compatibile cu configurația actuală a detectorului dumneavoastră.",
- "baseModel": "Model de bază",
- "loading": "Se încarcă informațiile modelului…",
- "error": "Încărcarea informațiilor modelului a eșuat",
- "availableModels": "Modele disponibile",
- "modelType": "Tip model",
- "trainDate": "Dată antrenare",
+ "modelSelect": "Poți selecta modelele tale disponibile pe Frigate+ aici. Reține că pot fi selectate doar modelele compatibile cu configurația actuală a detectorului.",
+ "baseModel": "Model de Bază",
+ "loading": "Se încarcă informațiile despre model…",
+ "error": "Eroare la încărcarea informațiilor despre model",
+ "availableModels": "Modele Disponibile",
+ "modelType": "Tip Model",
+ "trainDate": "Data Antrenării",
"cameras": "Camere"
},
"toast": {
- "error": "Nu s-au putut salva modificările configurației: {{errorMessage}}",
- "success": "Setările Frigate+ au fost salvate. Reporniti Frigate pentru a aplica modificările."
+ "error": "Eroare la salvarea modificărilor de config: {{errorMessage}}",
+ "success": "Setările Frigate+ au fost salvate. Repornește Frigate pentru a aplica modificările."
},
- "restart_required": "Repornire necesară (model Frigate+ schimbat)",
- "unsavedChanges": "Modificări nesalvate ale setărilor Frigate+",
- "title": "Setări Frigate+"
+ "restart_required": "Repornire necesară (modelul Frigate+ a fost schimbat)",
+ "unsavedChanges": "Modificări Frigate+ nesalvate",
+ "title": "Setări Frigate+",
+ "description": "Frigate+ este un serviciu pe bază de abonament care oferă funcții suplimentare, inclusiv posibilitatea de a folosi modele personalizate de detecție obiecte, antrenate pe propriile date. Poți gestiona setările modelului Frigate+ aici.",
+ "cardTitles": {
+ "api": "API",
+ "currentModel": "Model Actual",
+ "otherModels": "Alte Modele",
+ "configuration": "Configurație"
+ }
},
"motionDetectionTuner": {
- "unsavedChanges": "Modificări nesalvate la reglajul de mișcare pentru {{camera}}",
+ "unsavedChanges": "Modificări nesalvate la reglajul de mișcare ({{camera}})",
"Threshold": {
"title": "Prag",
- "desc": "Valoarea pragului determină cât de mare trebuie să fie schimbarea luminozității unui pixel pentru a fi considerată mișcare. Implicit: 30"
+ "desc": "Valoarea pragului dictează cât de mult trebuie să se schimbe luminanța unui pixel pentru a fi considerat mișcare. Implicit: 30"
},
"contourArea": {
- "desc": "Valoarea suprafeței conturului este folosită pentru a decide care grupuri de pixeli modificați se califică ca mișcare. Implicit: 10",
- "title": "Suprafața conturului"
+ "desc": "Valoarea ariei conturului este folosită pentru a decide care grupuri de pixeli modificați se califică drept mișcare. Implicit: 10",
+ "title": "Aria conturului"
},
"improveContrast": {
"title": "Îmbunătățire contrast",
- "desc": "Îmbunătățește contrastul pentru scene întunecate. Implicit: ACTIVAT"
+ "desc": "Îmbunătățește contrastul pentru scenele întunecate. Implicit: ACTIVAT"
},
"desc": {
- "title": "Frigate utilizează detecția mișcării ca o primă verificare, pentru a vedea dacă există ceva semnificativ în cadru care merită verificat cu detecția de obiecte.",
- "documentation": "Citește ghidul pentru reglajul mișcării"
+ "title": "Frigate folosește detecția de mișcare ca prim pas pentru a verifica dacă se întâmplă ceva în cadru ce merită verificat cu detecția de obiecte.",
+ "documentation": "Citește Ghidul de reglare a mișcării"
},
"toast": {
"success": "Setările de mișcare au fost salvate."
@@ -711,21 +800,21 @@
"title": "Reglaj detecție mișcare"
},
"triggers": {
- "documentTitle": "Declanșatoare",
+ "documentTitle": "Triggere",
"management": {
- "title": "Declanșatoare",
- "desc": "Gestionează declanșatoarele pentru {{camera}}. Folosește tipul miniatură pentru a declanșa pe miniaturi similare cu obiectul urmărit selectat și tipul descriere pentru a declanșa pe descrieri similare textului pe care îl specifici."
+ "title": "Triggere",
+ "desc": "Gestionează triggerele pentru {{camera}}. Folosește tipul „thumbnail” pentru a declanșa la miniaturi similare cu obiectul urmărit, și tipul „descriere” pentru a declanșa la descrieri similare cu textul specificat."
},
- "addTrigger": "Adaugă declanșator",
+ "addTrigger": "Adaugă Trigger",
"table": {
"name": "Nume",
"type": "Tip",
"content": "Conținut",
"threshold": "Prag",
"actions": "Acțiuni",
- "noTriggers": "Nu sunt configurate declanșatoare pentru această cameră.",
+ "noTriggers": "Nu există triggere configurate pentru această cameră.",
"edit": "Editează",
- "deleteTrigger": "Elimină declanșatorul",
+ "deleteTrigger": "Șterge Trigger",
"lastTriggered": "Ultima declanșare"
},
"type": {
@@ -734,64 +823,64 @@
},
"actions": {
"alert": "Marchează ca alertă",
- "notification": "Trimite notificare",
- "sub_label": "Adaugă subeticheta",
- "attribute": "Adaugă atribut"
+ "notification": "Trimite Notificare",
+ "sub_label": "Adaugă Sub-etichetă",
+ "attribute": "Adaugă Atribut"
},
"dialog": {
"createTrigger": {
- "title": "Crează declanșator",
- "desc": "Creează un declanșator pentru camera {{camera}}"
+ "title": "Creează Trigger",
+ "desc": "Creează un trigger pentru camera {{camera}}"
},
"editTrigger": {
- "title": "Editează declanșatorul",
- "desc": "Editează setările pentru declanșatorul de pe camera {{camera}}"
+ "title": "Editează Trigger",
+ "desc": "Editează setările pentru triggerul de pe camera {{camera}}"
},
"deleteTrigger": {
- "title": "Elimină declanșatorul",
- "desc": "Ești sigur că vrei să ștergi declanșatorul {{triggerName}}? Această acțiune nu poate fi anulată."
+ "title": "Șterge Trigger",
+ "desc": "Sigur vrei să ștergi triggerul {{triggerName}}? Această acțiune nu poate fi anulată."
},
"form": {
"name": {
"title": "Nume",
- "placeholder": "Denumește acest declanșator",
+ "placeholder": "Pune un nume acestui trigger",
"error": {
"minLength": "Câmpul trebuie să aibă cel puțin 2 caractere.",
- "invalidCharacters": "Câmpul poate conține doar litere, cifre, underscore-uri și cratime.",
- "alreadyExists": "Un declanșator cu acest nume există deja pentru această cameră."
+ "invalidCharacters": "Câmpul poate conține doar litere, cifre, underscore (_) și cratime (-).",
+ "alreadyExists": "Un trigger cu acest nume există deja pentru această cameră."
},
- "description": "Introduceți un nume sau o descriere unică pentru a identifica acest declanșator"
+ "description": "Introdu un nume unic sau o descriere pentru a identifica acest trigger"
},
"enabled": {
- "description": "Activează sau dezactivează acest declanșator"
+ "description": "Activează sau dezactivează acest trigger"
},
"type": {
"title": "Tip",
- "placeholder": "Selectează tipul de declanșator",
- "description": "Declanșează atunci când este detectată o descriere de obiect urmărit similară",
- "thumbnail": "Declanșează atunci când este detectată o miniatură de obiect urmărit similară"
+ "placeholder": "Selectează tipul triggerului",
+ "description": "Declanșează când este detectată o descriere similară a obiectului urmărit",
+ "thumbnail": "Declanșează când este detectată o miniatură similară a obiectului urmărit"
},
"content": {
"title": "Conținut",
"imagePlaceholder": "Selectează o miniatură",
- "textPlaceholder": "Introdu conținutul textului",
- "imageDesc": "Sunt afișate doar ultimele 100 de miniaturi. Dacă nu găsiți miniatura dorită, vă rugăm să verificați obiectele anterioare în Explorator și să configurați un declanșator din meniul de acolo.",
- "textDesc": "Introduceți textul pentru a declanșa această acțiune atunci când este detectată o descriere de obiect urmărit similară.",
+ "textPlaceholder": "Introdu textul",
+ "imageDesc": "Sunt afișate doar cele mai recente 100 de miniaturi. Dacă nu găsești miniatura dorită, verifică obiectele anterioare în secțiunea Explore și configurează un trigger de acolo.",
+ "textDesc": "Introdu textul pentru a declanșa acțiunea atunci când este detectată o descriere similară a obiectului urmărit.",
"error": {
"required": "Conținutul este obligatoriu."
}
},
"threshold": {
- "title": "Prag",
+ "title": "Prag (Threshold)",
"error": {
"min": "Pragul trebuie să fie cel puțin 0",
- "max": "Pragul trebuie să fie cel mult 1"
+ "max": "Pragul trebuie să fie maxim 1"
},
- "desc": "Setați pragul de similitudine pentru acest declanșator. Un prag mai mare înseamnă că este necesară o potrivire mai apropiată pentru declanșarea acestuia."
+ "desc": "Setează pragul de similitudine. Un prag mai mare înseamnă că este necesară o potrivire mai exactă pentru a declanșa."
},
"actions": {
"title": "Acțiuni",
- "desc": "În mod implicit, Frigate trimite un mesaj MQTT pentru toate declanșatoarele. Subetichetele adaugă numele declanșatorului la eticheta obiectului. Atributele sunt metadate căutabile, stocate separat în metadatele obiectului urmărit.",
+ "desc": "În mod implicit, Frigate trimite un mesaj MQTT pentru toate triggerele. Sub-etichetele adaugă numele triggerului la eticheta obiectului. Atributele sunt metadate căutabile stocate separat.",
"error": {
"min": "Trebuie selectată cel puțin o acțiune."
}
@@ -805,66 +894,66 @@
},
"toast": {
"success": {
- "createTrigger": "Declanșatorul {{name}} a fost creat cu succes.",
- "updateTrigger": "Declanșatorul {{name}} a fost actualizat cu succes.",
- "deleteTrigger": "Declanșatorul {{name}} a fost eliminat cu succes."
+ "createTrigger": "Triggerul {{name}} a fost creat cu succes.",
+ "updateTrigger": "Triggerul {{name}} a fost actualizat cu succes.",
+ "deleteTrigger": "Triggerul {{name}} a fost șters."
},
"error": {
- "createTriggerFailed": "Crearea declanșatorului a eșuat: {{errorMessage}}",
- "updateTriggerFailed": "Actualizarea declanșatorului a eșuat: {{errorMessage}}",
- "deleteTriggerFailed": "Eliminarea declanșatorului a eșuat: {{errorMessage}}"
+ "createTriggerFailed": "Eroare la crearea triggerului: {{errorMessage}}",
+ "updateTriggerFailed": "Eroare la actualizarea triggerului: {{errorMessage}}",
+ "deleteTriggerFailed": "Eroare la ștergerea triggerului: {{errorMessage}}"
}
},
"semanticSearch": {
- "title": "Căutarea semantică este dezactivată",
- "desc": "Căutarea semantică trebuie să fie activată pentru a utiliza declanșatoarele."
+ "title": "Căutarea Semantică este dezactivată",
+ "desc": "Căutarea Semantică trebuie să fie activată pentru a folosi Triggere."
},
"wizard": {
- "title": "Creează declanșator",
+ "title": "Creează Trigger",
"step1": {
- "description": "Configurează setările de bază pentru declanșatorul tău."
+ "description": "Configurează setările de bază pentru trigger."
},
"step2": {
- "description": "Configurează conținutul care va declanșa această acțiune."
+ "description": "Setează conținutul care va declanșa această acțiune."
},
"step3": {
- "description": "Configurează pragul și acțiunile pentru acest declanșator."
+ "description": "Configurează pragul și acțiunile pentru acest trigger."
},
"steps": {
"nameAndType": "Nume și Tip",
- "configureData": "Configurează datele",
+ "configureData": "Configurare Date",
"thresholdAndActions": "Prag și Acțiuni"
}
}
},
"roles": {
"management": {
- "title": "Gestionare rol vizualizator",
- "desc": "Gestionează rolurile personalizate de vizualizator și permisiunile lor de acces la cameră pentru această instanță Frigate."
+ "title": "Administrare roluri vizualizator",
+ "desc": "Gestionează rolurile de vizualizator personalizate și permisiunile de acces la camere pentru această instanță Frigate."
},
"addRole": "Adaugă rol",
"table": {
"role": "Rol",
"cameras": "Camere",
"actions": "Acțiuni",
- "noRoles": "Nu au fost găsite roluri personalizate.",
+ "noRoles": "Nu s-au găsit roluri personalizate.",
"editCameras": "Editează camerele",
- "deleteRole": "Șterge rol"
+ "deleteRole": "Șterge rolul"
},
"toast": {
"success": {
"createRole": "Rolul {{role}} a fost creat cu succes",
"updateCameras": "Camerele au fost actualizate pentru rolul {{role}}",
"deleteRole": "Rolul {{role}} a fost șters cu succes",
- "userRolesUpdated_one": "{{count}} utilizator atribuit acestui rol a fost actualizat la „vizualizator”, care are acces la toate camerele.",
- "userRolesUpdated_few": "{{count}} utilizatori atribuiți acestui rol au fost actualizați la „vizualizatori”, care are acces la toate camerele.",
- "userRolesUpdated_other": "{{count}} de utilizatori atribuiți acestui rol au fost actualizați la „vizualizatori”, care are acces la toate camerele."
+ "userRolesUpdated_one": "{{count}} utilizator atribuit acestui rol a fost actualizat la 'vizualizator', care are acces la toate camerele.",
+ "userRolesUpdated_few": "{{count}} utilizatori atribuiți acestui rol au fost actualizați la 'vizualizator', care are acces la toate camerele.",
+ "userRolesUpdated_other": "{{count}} de utilizatori atribuiți acestui rol au fost actualizați la 'vizualizator', care are acces la toate camerele."
},
"error": {
- "createRoleFailed": "Crearea rolului a eșuat: {{errorMessage}}",
- "updateCamerasFailed": "Actualizarea camerelor a eșuat: {{errorMessage}}",
- "deleteRoleFailed": "Ștergerea rolului a eșuat: {{errorMessage}}",
- "userUpdateFailed": "Actualizarea rolurilor utilizatorilor a eșuat: {{errorMessage}}"
+ "createRoleFailed": "Eroare la crearea rolului: {{errorMessage}}",
+ "updateCamerasFailed": "Eroare la actualizarea camerelor: {{errorMessage}}",
+ "deleteRoleFailed": "Eroare la ștergerea rolului: {{errorMessage}}",
+ "userUpdateFailed": "Eroare la actualizarea rolurilor utilizatorilor: {{errorMessage}}"
}
},
"dialog": {
@@ -877,39 +966,39 @@
"desc": "Actualizează accesul la camere pentru rolul {{role}}."
},
"deleteRole": {
- "title": "Șterge rolul",
- "desc": "Această acțiune nu poate fi anulată. Aceasta va șterge permanent rolul și va atribui orice utilizatori cu acest rol la rolul „vizualizator”, care va oferi acces vizualizator la toate camerele.",
- "warn": "Ești sigur că vrei să ștergi {{role}}?",
+ "title": "Șterge Rolul",
+ "desc": "Această acțiune este ireversibilă. Rolul va fi șters definitiv, iar utilizatorii cu acest rol vor primi rolul de „viewer”, având acces de vizualizare la toate camerele.",
+ "warn": "Sigur vrei să ștergi {{role}}?",
"deleting": "Se șterge..."
},
"form": {
"role": {
- "title": "Nume rol",
- "placeholder": "Introduceți numele rolului",
- "desc": "Sunt permise doar litere, cifre, puncte și linii de subliniere.",
+ "title": "Nume Rol",
+ "placeholder": "Introdu numele rolului",
+ "desc": "Sunt permise doar litere, cifre, puncte și caractere de subliniere (_).",
"roleIsRequired": "Numele rolului este obligatoriu",
- "roleOnlyInclude": "Numele rolului poate include doar litere, cifre, . sau _",
- "roleExists": "Un rol cu acest nume există deja."
+ "roleOnlyInclude": "Numele rolului poate conține doar litere, cifre, . sau _",
+ "roleExists": "Există deja un rol cu acest nume."
},
"cameras": {
"title": "Camere",
- "desc": "Selectați camerele la care acest rol are acces. Este necesară cel puțin o cameră.",
+ "desc": "Selectează camerele la care are acces acest rol. Este necesară cel puțin o cameră.",
"required": "Trebuie selectată cel puțin o cameră."
}
}
}
},
"cameraWizard": {
- "title": "Adaugă cameră",
- "description": "Urmează pașii de mai jos pentru a adăuga o cameră nouă la sistemul tău Frigate.",
+ "title": "Adaugă Cameră",
+ "description": "Urmează pașii de mai jos pentru a adăuga o cameră nouă în instalația Frigate.",
"steps": {
"nameAndConnection": "Nume și Conexiune",
- "streamConfiguration": "Configurare streaming",
+ "streamConfiguration": "Configurare Stream",
"validationAndTesting": "Validare și Testare",
- "probeOrSnapshot": "Sondează sau fă snapshot"
+ "probeOrSnapshot": "Sondare sau snapshot"
},
"save": {
- "success": "Camera nouă {{cameraName}} a fost salvată cu succes.",
+ "success": "Camera {{cameraName}} a fost salvată cu succes.",
"failure": "Eroare la salvarea {{cameraName}}."
},
"testResultLabels": {
@@ -919,26 +1008,26 @@
"fps": "FPS"
},
"commonErrors": {
- "noUrl": "Te rog să furnizezi un URL de streaming valid",
- "testFailed": "Testul de streaming a eșuat: {{error}}"
+ "noUrl": "Te rog introdu un URL de stream valid",
+ "testFailed": "Testul stream-ului a eșuat: {{error}}"
},
"step1": {
- "description": "Introduceți detaliile camerei și alegeți să testați camera sau să selectați manual marca.",
- "cameraName": "Nume cameră",
- "cameraNamePlaceholder": "ex. usă_intrare sau Vedere Curte Spate",
- "host": "Gazdă/Adresă IP",
+ "description": "Introdu detaliile camerei și alege să o scanezi automat sau să selectezi manual marca.",
+ "cameraName": "Nume Cameră",
+ "cameraNamePlaceholder": "ex: usa_intrare sau Curte Spate",
+ "host": "Host/Adresă IP",
"port": "Port",
- "username": "Nume de utilizator",
+ "username": "Utilizator",
"usernamePlaceholder": "Opțional",
"password": "Parolă",
"passwordPlaceholder": "Opțional",
"selectTransport": "Selectează protocolul de transport",
- "cameraBrand": "Brand cameră",
- "selectBrand": "Selectează marca camerei pentru șablonul de URL",
- "customUrl": "URL Streaming Personalizat",
- "brandInformation": "Informații despre brand",
- "brandUrlFormat": "Pentru camere cu formatul URL RTSP ca: {{exampleUrl}}",
- "customUrlPlaceholder": "rtsp://utilizator:parolă@gazdă:port/cale",
+ "cameraBrand": "Marca Camerei",
+ "selectBrand": "Alege marca pentru șablonul de URL",
+ "customUrl": "URL Stream Personalizat",
+ "brandInformation": "Informații marcă",
+ "brandUrlFormat": "Pentru camere cu formatul de URL RTSP: {{exampleUrl}}",
+ "customUrlPlaceholder": "rtsp://utilizator:parola@host:port/cale",
"testConnection": "Testează Conexiunea",
"testSuccess": "Testul de conexiune a reușit!",
"testFailed": "Testul de conexiune a eșuat. Te rog să verifici datele introduse și să încerci din nou.",
@@ -947,15 +1036,15 @@
"noSnapshot": "Nu se poate obține un snapshot de pe stream-ul configurat."
},
"errors": {
- "brandOrCustomUrlRequired": "Ori selectează un brand de cameră cu adresă gazdă/IP, ori alege „Alta” cu un URL personalizat",
+ "brandOrCustomUrlRequired": "Selectează o marcă cu host/IP sau alege 'Other' cu un URL personalizat",
"nameRequired": "Numele camerei este obligatoriu",
- "nameLength": "Numele camerei trebuie să aibă 64 de caractere sau mai puțin",
- "invalidCharacters": "Numele camerei conține caractere nevalide",
+ "nameLength": "Numele camerei trebuie să aibă maxim 64 de caractere",
+ "invalidCharacters": "Numele camerei conține caractere nepermise",
"nameExists": "Numele camerei există deja",
"brands": {
"reolink-rtsp": "RTSP Reolink nu este recomandat. Activează HTTP în setările firmware ale camerei și repornește asistentul."
},
- "customUrlRtspRequired": "URL-urile personalizate trebuie să înceapă cu \"rtsp://\". Este necesară configurare manuală pentru stream-urile de cameră non-RTSP."
+ "customUrlRtspRequired": "URL-urile personalizate trebuie să înceapă cu „rtsp://”. Configurarea manuală este necesară pentru stream-urile care nu sunt RTSP."
},
"docs": {
"reolink": "https://docs.frigate.video/configuration/camera_specific.html#reolink-cameras"
@@ -964,18 +1053,18 @@
"probingMetadata": "Sondare metadate cameră...",
"fetchingSnapshot": "Preluare snapshot cameră..."
},
- "connectionSettings": "Setări conexiune",
- "detectionMethod": "Metoda de detecție stream",
+ "connectionSettings": "Setări Conexiune",
+ "detectionMethod": "Metodă Detecție Stream",
"onvifPort": "Port ONVIF",
- "probeMode": "Sondare cameră",
+ "probeMode": "Scanează camera",
"manualMode": "Selecție manuală",
- "detectionMethodDescription": "Sondează camera cu ONVIF (dacă este suportat) pentru a găsi URL-urile de stream ale camerei, sau selectează manual marca camerei pentru a utiliza URL-uri predefinite. Pentru a introduce un URL RTSP personalizat, alege metoda manuală și selectează \"Altele\".",
- "onvifPortDescription": "Pentru camerele care suportă ONVIF, acesta este de obicei 80 sau 8080.",
- "useDigestAuth": "Utilizați autentificarea digest",
- "useDigestAuthDescription": "Utilizați autentificarea HTTP digest pentru ONVIF. Unele camere pot necesita un nume de utilizator/parolă ONVIF dedicat în locul utilizatorului standard de administrare."
+ "detectionMethodDescription": "Scanează camera prin ONVIF (dacă e suportat) pentru a găsi URL-urile stream-urilor, sau alege manual marca pentru a folosi URL-uri predefinite. Pentru un URL RTSP personalizat, alege metoda manuală și selectează \"Other\".",
+ "onvifPortDescription": "Pentru camerele cu suport ONVIF, acesta este de obicei 80 sau 8080.",
+ "useDigestAuth": "Folosește autentificare digest",
+ "useDigestAuthDescription": "Folosește autentificarea HTTP digest pentru ONVIF. Unele camere pot necesita un utilizator/parolă dedicat pentru ONVIF, diferit de cel de admin."
},
"step2": {
- "description": "Testează camera pentru fluxurile disponibile sau configurează setările manuale pe baza metodei de detectare selectate.",
+ "description": "Testează camera pentru stream-uri disponibile sau configurează manual setările în funcție de metoda de detecție aleasă.",
"streamsTitle": "Stream-uri cameră",
"addStream": "Adaugă stream",
"addAnotherStream": "Adaugă un alt stream",
@@ -994,9 +1083,9 @@
"audio": "Audio"
},
"testStream": "Testează conexiunea",
- "testSuccess": "Testul de conexiune a fost realizat cu succes!",
+ "testSuccess": "Testul de conexiune a reușit!",
"testFailed": "Testul de conexiune a eșuat. Verifică datele introduse și încearcă din nou.",
- "testFailedTitle": "Test eșuat",
+ "testFailedTitle": "Test Eșuat",
"connected": "Conectat",
"notConnected": "Neconectat",
"featuresTitle": "Funcționalități",
@@ -1013,40 +1102,40 @@
"description": "Folosește restreaming go2rtc pentru a reduce conexiunile la cameră."
},
"streamDetails": "Detalii stream",
- "probing": "Se sondează camera...",
- "retry": "Reîncercare",
+ "probing": "Se testează camera...",
+ "retry": "Reîncearcă",
"testing": {
- "probingMetadata": "Se sondează metadatele camerei...",
- "fetchingSnapshot": "Se aduce snapshot cameră..."
+ "probingMetadata": "Se extrag metadatele camerei...",
+ "fetchingSnapshot": "Se preia snapshot-ul..."
},
- "probeFailed": "Sondarea camerei a eșuat: {{error}}",
- "probingDevice": "Se sondează dispozitivul...",
- "probeSuccessful": "Sondare reușită",
- "probeError": "Eroare la sondare",
- "probeNoSuccess": "Sondare nereușită",
- "deviceInfo": "Informații dispozitiv",
+ "probeFailed": "Eșec la testarea camerei: {{error}}",
+ "probingDevice": "Se testează dispozitivul...",
+ "probeSuccessful": "Test reușit",
+ "probeError": "Eroare la testare",
+ "probeNoSuccess": "Testul nu a avut succes",
+ "deviceInfo": "Informații Dispozitiv",
"manufacturer": "Producător",
"model": "Model",
"firmware": "Firmware",
"profiles": "Profiluri",
"ptzSupport": "Suport PTZ",
- "autotrackingSupport": "Suport autourmărire",
+ "autotrackingSupport": "Suport Auto-tracking",
"presets": "Presetări",
- "rtspCandidates": "Candidați RTSP",
- "rtspCandidatesDescription": "Următoarele URL-uri RTSP au fost găsite în urma sondării camerei. Testați conexiunea pentru a vizualiza metadatele stream-ului.",
- "noRtspCandidates": "Nu au fost găsite URL-uri RTSP de la cameră. Este posibil ca datele dumneavoastră de autentificare să fie incorecte, sau este posibil ca aparatul foto să nu suporte ONVIF sau metoda utilizată pentru a prelua URL-urile RTSP. Întoarceți-vă și introduceți URL-ul RTSP manual.",
+ "rtspCandidates": "Candidate RTSP",
+ "rtspCandidatesDescription": "Următoarele URL-uri RTSP au fost găsite în urma testării camerei. Testează conexiunea pentru a vedea metadatele stream-ului.",
+ "noRtspCandidates": "Nu au fost găsite URL-uri RTSP pentru această cameră. E posibil ca datele de autentificare să fie greșite sau camera să nu suporte ONVIF. Mergi înapoi și introdu URL-ul RTSP manual.",
"candidateStreamTitle": "Candidat {{number}}",
"useCandidate": "Folosește",
"uriCopy": "Copiază",
"uriCopied": "URI copiat în clipboard",
- "testConnection": "Testează conexiunea",
- "toggleUriView": "Click pentru a comuta vizualizarea URI completă",
+ "testConnection": "Testează Conexiunea",
+ "toggleUriView": "Click pentru a vedea URI-ul complet",
"errors": {
- "hostRequired": "Gazdă/adresaIP este necesară"
+ "hostRequired": "Adresa Host/IP este obligatorie"
}
},
"step3": {
- "description": "Configurează rolurile stream-ului și adaugă stream-uri suplimentare pentru camera ta.",
+ "description": "Configurează rolurile stream-urilor și adaugă stream-uri suplimentare pentru camera ta.",
"validationTitle": "Validare stream",
"connectAllStreams": "Conectează toate stream-urile",
"reconnectionSuccess": "Reconectare reușită.",
@@ -1054,7 +1143,7 @@
"streamUnavailable": "Previzualizare streaming indisponibilă",
"reload": "Reîncarcă",
"connecting": "Conectare...",
- "streamTitle": "Stream {{number}}",
+ "streamTitle": "Stream-ul {{number}}",
"valid": "Valid",
"failed": "Eșuat",
"notTested": "Netestat",
@@ -1089,12 +1178,12 @@
"ffmpegModule": "Folosește modul de compatibilitate pentru stream-uri",
"ffmpegModuleDescription": "Dacă fluxul nu se încarcă după mai multe încercări, activați această opțiune. Când este activată, Frigate va folosi modulul ffmpeg împreună cu go2rtc. Aceasta poate oferi o compatibilitate mai bună cu unele fluxuri de camere.",
"streamsTitle": "Stream-uri cameră",
- "addStream": "Adaugă stream",
- "addAnotherStream": "Adaugă alt stream",
+ "addStream": "Adaugă un stream",
+ "addAnotherStream": "Mai adaugă un stream",
"streamUrl": "URL stream",
- "streamUrlPlaceholder": "rtsp://utilizator:parolă@adresaIP:port/cale",
- "selectStream": "Selectați un flux",
- "searchCandidates": "Căutați candidați...",
+ "streamUrlPlaceholder": "rtsp://utilizator:parola@host:port/cale",
+ "selectStream": "Selectează un stream",
+ "searchCandidates": "Caută candidați...",
"noStreamFound": "Niciun stream găsit",
"url": "URL",
"resolution": "Rezoluție",
@@ -1102,154 +1191,431 @@
"selectResolution": "Selectează rezoluția",
"selectQuality": "Selectează calitatea",
"roleLabels": {
- "detect": "Detecție Obiect",
+ "detect": "Detecție Obiecte",
"record": "Înregistrare",
"audio": "Audio"
},
- "testStream": "Testează conexiunea",
- "testSuccess": "Testul stream-ului a avut succes!",
+ "testStream": "Testează Conexiunea",
+ "testSuccess": "Testul stream-ului a reușit!",
"testFailed": "Testul stream-ului a eșuat",
- "testFailedTitle": "Testul a eșuat",
+ "testFailedTitle": "Test Eșuat",
"connected": "Conectat",
"notConnected": "Neconectat",
- "featuresTitle": "Funcționalități",
- "go2rtc": "Reduceți conexiunile la cameră",
- "detectRoleWarning": "Cel puțin un stream trebuie să aibă rolul \"detect\" pentru a continua.",
+ "featuresTitle": "Funcții",
+ "go2rtc": "Redu conexiunile către cameră",
+ "detectRoleWarning": "Cel puțin un stream trebuie să aibă rolul „detect” pentru a continua.",
"rolesPopover": {
- "title": "Roluri stream",
- "detect": "Stream principal pentru detecția obiectelor.",
- "record": "Salvează segmente ale stream-ului video pe baza setărilor de configurare.",
- "audio": "Stream pentru detecția bazată pe audio."
+ "title": "Roluri de stream",
+ "detect": "Fluxul principal pentru detecția obiectelor.",
+ "record": "Salvează segmente video conform setărilor de configurare.",
+ "audio": "Flux pentru detecția bazată pe sunet."
},
"featuresPopover": {
- "title": "Funcționalități stream",
- "description": "Utilizați go2rtc restreaming pentru a reduce conexiunile la cameră."
+ "title": "Caracteristici stream",
+ "description": "Folosește restreaming prin go2rtc pentru a reduce numărul de conexiuni directe către cameră."
}
},
"step4": {
- "description": "Validare finală și analiză înainte de a salva noua cameră. Conectați fiecare stream înainte de a salva.",
+ "description": "Validare finală și analiză înainte de salvare. Conectează fiecare stream înainte de a salva.",
"validationTitle": "Validare stream",
- "connectAllStreams": "Conectează toate stream-urile",
+ "connectAllStreams": "Conectează Toate stream-urile",
"reconnectionSuccess": "Reconectare reușită.",
- "reconnectionPartial": "Unele stream-uri nu au reușit să se reconecteze.",
- "streamUnavailable": "Previzualizare flux indisponibilă",
+ "reconnectionPartial": "Unele stream-uri nu s-au putut reconecta.",
+ "streamUnavailable": "Previzualizarea stream-ului este indisponibilă",
"reload": "Reîncarcă",
- "connecting": "Conectare...",
- "streamTitle": "Stream {{number}}",
+ "connecting": "Se conectează...",
+ "streamTitle": "stream-ul {{number}}",
"valid": "Valid",
"failed": "Eșuat",
"notTested": "Netestat",
- "connectStream": "Conectare",
+ "connectStream": "Conectează",
"connectingStream": "Se conectează",
- "disconnectStream": "Deconectare",
+ "disconnectStream": "Deconectează",
"estimatedBandwidth": "Lățime de bandă estimată",
"roles": "Roluri",
- "ffmpegModule": "Utilizează modul de compatibilitate stream",
- "ffmpegModuleDescription": "Dacă stream-ul nu se încarcă după câteva încercări, activați această opțiune. Când este activată, Frigate va utiliza modulul ffmpeg cu go2rtc. Acest lucru poate oferi o compatibilitate mai bună cu unele stream-uri de cameră.",
- "none": "Niciuna",
+ "ffmpegModule": "Folosește modul de compatibilitate de stream-uri",
+ "ffmpegModuleDescription": "Dacă stream-ul nu se încarcă după mai multe încercări, activează asta. Frigate va folosi modulul ffmpeg cu go2rtc, ceea ce poate ajuta la compatibilitatea cu anumite camere.",
+ "none": "Niciunul",
"error": "Eroare",
- "streamValidated": "Stream-ul {{number}} validat cu succes",
+ "streamValidated": "Stream-ul {{number}} a fost validat cu succes",
"streamValidationFailed": "Validarea stream-ului {{number}} a eșuat",
- "saveAndApply": "Salvează camera nouă",
- "saveError": "Configurație nevalidă. Vă rugăm să vă verificați setările.",
+ "saveAndApply": "Salvează Camera Nouă",
+ "saveError": "Configurație nevalidă. Verifică setările.",
"issues": {
"title": "Validare stream",
- "videoCodecGood": "Codecul video: {{codec}}.",
- "audioCodecGood": "Codecul audio: {{codec}}.",
- "resolutionHigh": "O rezoluție de {{resolution}} poate cauza o utilizare crescută a resurselor.",
- "resolutionLow": "O rezoluție de {{resolution}} ar putea fi prea mică pentru detectarea fiabilă a obiectelor mici.",
- "noAudioWarning": "Nu a fost detectat audio pentru acest stream, înregistrările nu vor avea audio.",
- "audioCodecRecordError": "Codec-ul audio AAC este necesar pentru a suporta audio în înregistrări.",
- "audioCodecRequired": "Este necesar un stream audio pentru a suporta detecția audio.",
- "restreamingWarning": "Reducerea conexiunilor la cameră pentru stream-ul de înregistrare poate crește ușor utilizarea procesorului (CPU).",
+ "videoCodecGood": "Codecul video este {{codec}}.",
+ "audioCodecGood": "Codecul audio este {{codec}}.",
+ "resolutionHigh": "O rezoluție de {{resolution}} poate crește consumul de resurse.",
+ "resolutionLow": "O rezoluție de {{resolution}} ar putea fi prea mică pentru detecția sigură a obiectelor mici.",
+ "noAudioWarning": "Nu s-a detectat audio pentru acest stream; înregistrările nu vor avea sunet.",
+ "audioCodecRecordError": "Codecul audio AAC este necesar pentru a avea sunet în înregistrări.",
+ "audioCodecRequired": "Un stream audio este necesar pentru suportul detecției audio.",
+ "restreamingWarning": "Reducerea conexiunilor către cameră pentru stream-ul de înregistrare poate crește ușor utilizarea procesorului (CPU).",
"brands": {
- "reolink-rtsp": "RTSP Reolink nu este recomandat. Activați HTTP în setările de firmware ale camerei și reporniți asistentul.",
- "reolink-http": "Stream-urile HTTP Reolink ar trebui să folosească FFmpeg pentru o compatibilitate mai bună. Activează 'Use stream compatibility mode' pentru acest stream."
+ "reolink-rtsp": "Reolink RTSP nu este recomandat. Activează HTTP în setările camerei și repornește asistentul.",
+ "reolink-http": "Stream-urile Reolink HTTP ar trebui să folosească FFmpeg pentru o mai bună compatibilitate. Activează „Folosește modul de compatibilitate de stream” pentru acest stream."
},
"dahua": {
- "substreamWarning": "Substream-ul 1 este blocat la o rezoluție scăzută. Multe camere Dahua / Amcrest / EmpireTech suportă stream-uri secundare suplimentare care trebuie activate în setările camerei. Se recomandă să verificați și să utilizați aceste stream-uri dacă sunt disponibile."
+ "substreamWarning": "Substream 1 este limitat la o rezoluție mică. Multe camere Dahua / Amcrest / EmpireTech suportă substream-uri adiționale care trebuie activate din setările camerei. Se recomandă verificarea și utilizarea acestora."
},
"hikvision": {
- "substreamWarning": "Substream-ul 1 este blocat la o rezoluție scăzută. Multe camere Hikvision suportă stream-uri secundare suplimentare care trebuie activate în setările camerei. Se recomandă să verificați și să utilizați aceste stream-uri dacă sunt disponibile."
+ "substreamWarning": "Substream 1 este limitat la o rezoluție mică. Multe camere Hikvision suportă substream-uri adiționale care trebuie activate din setările camerei. Se recomandă verificarea și utilizarea acestora."
}
}
}
},
"cameraManagement": {
- "title": "Administrează Camerele",
- "addCamera": "Adaugă cameră nouă",
- "editCamera": "Editează cameră:",
- "selectCamera": "Selectează o cameră",
- "backToSettings": "Înapoi la setările camerei",
+ "title": "Gestionare Camere",
+ "addCamera": "Adaugă Cameră Nouă",
+ "editCamera": "Editează Camera:",
+ "selectCamera": "Selectează o Cameră",
+ "backToSettings": "Înapoi la Setări Cameră",
"streams": {
- "title": "Activează / dezactivează camere",
- "desc": "Dezactivează temporar o cameră până la repornirea Frigate. Dezactivarea unei camere oprește complet procesarea streamingului acestei camere de către Frigate. Detecția, înregistrarea și depanarea vor fi indisponibile.ffprobe.",
"aspectRatio": "raport aspect",
"fetching": "Se preiau datele camerei",
"stream": "Stream {{idx}}",
"video": "Video:",
- "audio": "Sunet:",
- "error": "Eroare:{{error}}",
+ "audio": "Audio:",
+ "error": "Eroare: {{error}}",
"tips": {
- "title": "Informații test cameră"
+ "title": "Info Sondă Cameră"
},
- "fps": "Cadre/s:",
+ "fps": "FPS:",
"unknown": "Necunoscut"
},
"label": {
- "capture": "capturare",
- "skipped": "sărite",
- "overallSkippedDetectionsPerSecond": "Detecții totale sărite pe secundă",
+ "capture": "captură",
+ "skipped": "sărit",
+ "overallSkippedDetectionsPerSecond": "detecții sărite pe secundă total",
"cameraCapture": "captură {{camName}}",
- "cameraDetect": "detectare {{camName}}",
+ "cameraDetect": "detecție {{camName}}",
"cameraFramesPerSecond": "cadre pe secundă {{camName}}",
"cameraDetectionsPerSecond": "detecții pe secundă {{camName}}",
"cameraSkippedDetectionsPerSecond": "detecții sărite pe secundă {{camName}}",
- "overallFramesPerSecond": "Cadre totale pe secundă",
- "overallDetectionsPerSecond": "Detecții totale pe secundă",
- "detect": "detectare",
- "cameraFfmpeg": "{{camName}} FFmpeg",
- "camera": "camere",
+ "overallFramesPerSecond": "cadre pe secundă total",
+ "overallDetectionsPerSecond": "detecții pe secundă total",
+ "detect": "detectează",
+ "cameraFfmpeg": "FFmpeg {{camName}}",
+ "camera": "cameră",
"ffmpeg": "FFmpeg"
},
"title": "Camere",
@@ -188,22 +217,34 @@
"framesAndDetections": "Cadre / Detecții",
"toast": {
"success": {
- "copyToClipboard": "Datele testului au fost copiate."
+ "copyToClipboard": "Am copiat datele sondei în clipboard."
},
"error": {
- "unableToProbeCamera": "Testarea camerei nu a fost posibilă: {{errorMessage}}"
+ "unableToProbeCamera": "Nu s-a putut sonda camera: {{errorMessage}}"
}
+ },
+ "connectionQuality": {
+ "title": "Calitate Conexiune",
+ "excellent": "Excelentă",
+ "fair": "Acceptabilă",
+ "poor": "Slabă",
+ "unusable": "Inutilizabilă",
+ "fps": "FPS",
+ "expectedFps": "FPS așteptat",
+ "reconnectsLastHour": "Reconectări (ultima oră)",
+ "stallsLastHour": "Blocaje (ultima oră)"
}
},
"stats": {
- "reindexingEmbeddings": "Reindexare încorporări ({{processed}}% completă)",
+ "reindexingEmbeddings": "Se reindexează înglobările ({{processed}}% gata)",
"detectIsVerySlow": "{{detect}} este foarte lent ({{speed}} ms)",
"detectIsSlow": "{{detect}} este lent ({{speed}} ms)",
- "detectHighCpuUsage": "Camera {{camera}} are o utilizare ridicată a procesorului pentru detecție ({{detectAvg}}%)",
- "ffmpegHighCpuUsage": "Camera {{camera}} are o utilizare ridicată a procesorului FFmpeg ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} are o utilizare ridicată CPU detecție ({{detectAvg}}%)",
+ "ffmpegHighCpuUsage": "{{camera}} are o utilizare ridicată CPU FFmpeg ({{ffmpegAvg}}%)",
"cameraIsOffline": "{{camera}} este offline",
- "healthy": "Sistemul funcționează normal",
- "shmTooLow": "Alocarea /dev/shm ({{total}} MB) ar trebui mărită la cel puțin {{min}} MB."
+ "healthy": "Sistemul este sănătos",
+ "shmTooLow": "Alocarea /dev/shm ({{total}} MB) ar trebui mărită la cel puțin {{min}} MB.",
+ "debugReplayActive": "Sesiunea de reluare de depanare este activă"
},
- "lastRefreshed": "Ultima reîmprospătare: "
+ "lastRefreshed": "Ultima actualizare: "
}
diff --git a/web/public/locales/ru/config/cameras.json b/web/public/locales/ru/config/cameras.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ru/config/cameras.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ru/config/global.json b/web/public/locales/ru/config/global.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ru/config/global.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ru/config/groups.json b/web/public/locales/ru/config/groups.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ru/config/groups.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ru/config/validation.json b/web/public/locales/ru/config/validation.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ru/config/validation.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sk/config/cameras.json b/web/public/locales/sk/config/cameras.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sk/config/cameras.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sk/config/global.json b/web/public/locales/sk/config/global.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sk/config/global.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sk/config/groups.json b/web/public/locales/sk/config/groups.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sk/config/groups.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sk/config/validation.json b/web/public/locales/sk/config/validation.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sk/config/validation.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sl/config/cameras.json b/web/public/locales/sl/config/cameras.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sl/config/cameras.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sl/config/global.json b/web/public/locales/sl/config/global.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sl/config/global.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sl/config/groups.json b/web/public/locales/sl/config/groups.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sl/config/groups.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sl/config/validation.json b/web/public/locales/sl/config/validation.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sl/config/validation.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/audio.json b/web/public/locales/sq/audio.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/audio.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/common.json b/web/public/locales/sq/common.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/common.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/components/auth.json b/web/public/locales/sq/components/auth.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/components/auth.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/components/camera.json b/web/public/locales/sq/components/camera.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/components/camera.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/components/dialog.json b/web/public/locales/sq/components/dialog.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/components/dialog.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/components/filter.json b/web/public/locales/sq/components/filter.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/components/filter.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/components/icons.json b/web/public/locales/sq/components/icons.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/components/icons.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/components/input.json b/web/public/locales/sq/components/input.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/components/input.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/components/player.json b/web/public/locales/sq/components/player.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/components/player.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/config/cameras.json b/web/public/locales/sq/config/cameras.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/config/cameras.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/config/global.json b/web/public/locales/sq/config/global.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/config/global.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/config/groups.json b/web/public/locales/sq/config/groups.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/config/groups.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/config/validation.json b/web/public/locales/sq/config/validation.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/config/validation.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/objects.json b/web/public/locales/sq/objects.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/objects.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/views/classificationModel.json b/web/public/locales/sq/views/classificationModel.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/views/classificationModel.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/views/configEditor.json b/web/public/locales/sq/views/configEditor.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/views/configEditor.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/views/events.json b/web/public/locales/sq/views/events.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/views/events.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/views/explore.json b/web/public/locales/sq/views/explore.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/views/explore.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/views/exports.json b/web/public/locales/sq/views/exports.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/views/exports.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/views/faceLibrary.json b/web/public/locales/sq/views/faceLibrary.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/views/faceLibrary.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/views/live.json b/web/public/locales/sq/views/live.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/views/live.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/views/recording.json b/web/public/locales/sq/views/recording.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/views/recording.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/views/search.json b/web/public/locales/sq/views/search.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/views/search.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/views/settings.json b/web/public/locales/sq/views/settings.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/views/settings.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sq/views/system.json b/web/public/locales/sq/views/system.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sq/views/system.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sr/config/cameras.json b/web/public/locales/sr/config/cameras.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sr/config/cameras.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sr/config/global.json b/web/public/locales/sr/config/global.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sr/config/global.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sr/config/groups.json b/web/public/locales/sr/config/groups.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sr/config/groups.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sr/config/validation.json b/web/public/locales/sr/config/validation.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sr/config/validation.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sv/common.json b/web/public/locales/sv/common.json
index d6c185dff..a60cfb2af 100644
--- a/web/public/locales/sv/common.json
+++ b/web/public/locales/sv/common.json
@@ -43,7 +43,7 @@
"minute_other": "{{time}} minuter",
"s": "{{time}}s",
"formattedTimestamp": {
- "12hour": "d MMM, kl. h:mm:ss a",
+ "12hour": "d MMM, 'kl.' h:mm:ss a",
"24hour": "d MMM, HH:mm:ss"
},
"formattedTimestamp2": {
@@ -51,7 +51,7 @@
"24hour": "d MMM HH:mm:ss"
},
"formattedTimestampHourMinute": {
- "12hour": "kl. h:mm a",
+ "12hour": "'kl.' h:mm a",
"24hour": "HH:mm"
},
"formattedTimestampHourMinuteSecond": {
diff --git a/web/public/locales/sv/components/dialog.json b/web/public/locales/sv/components/dialog.json
index 66d8503b9..4b8899a2c 100644
--- a/web/public/locales/sv/components/dialog.json
+++ b/web/public/locales/sv/components/dialog.json
@@ -7,7 +7,7 @@
"button": "Tvinga omladdning nu"
},
"title": "Är du säker på att du vill starta om Frigate?",
- "description": "Detta kommer att stoppa Frigate kort medan det startar om."
+ "description": "Frigate stoppas tillfälligt under omstarten."
},
"explore": {
"plus": {
diff --git a/web/public/locales/sv/config/cameras.json b/web/public/locales/sv/config/cameras.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sv/config/cameras.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sv/config/global.json b/web/public/locales/sv/config/global.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sv/config/global.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sv/config/groups.json b/web/public/locales/sv/config/groups.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sv/config/groups.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sv/config/validation.json b/web/public/locales/sv/config/validation.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/sv/config/validation.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/sv/views/system.json b/web/public/locales/sv/views/system.json
index 27eb9b844..0d6eac76a 100644
--- a/web/public/locales/sv/views/system.json
+++ b/web/public/locales/sv/views/system.json
@@ -39,10 +39,10 @@
"title": "Generellt",
"detector": {
"title": "Detektorer",
- "inferenceSpeed": "Detektorns inferenshastighet",
+ "inferenceSpeed": "Detektorns inferenstid",
"temperature": "Detektor temperatur",
"cpuUsage": "Detektorns CPU-användning",
- "memoryUsage": "Detektor minnes användning",
+ "memoryUsage": "Detektorns minnesanvändning",
"cpuUsageInformation": "CPU som används för att förbereda in- och utdata till/från detekteringsmodeller. Detta värde mäter inte inferensanvändning, även om en GPU eller accelerator används."
},
"hardwareInfo": {
diff --git a/web/public/locales/th/config/cameras.json b/web/public/locales/th/config/cameras.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/th/config/cameras.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/th/config/global.json b/web/public/locales/th/config/global.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/th/config/global.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/th/config/groups.json b/web/public/locales/th/config/groups.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/th/config/groups.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/th/config/validation.json b/web/public/locales/th/config/validation.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/th/config/validation.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/tr/config/cameras.json b/web/public/locales/tr/config/cameras.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/tr/config/cameras.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/tr/config/global.json b/web/public/locales/tr/config/global.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/tr/config/global.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/tr/config/groups.json b/web/public/locales/tr/config/groups.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/tr/config/groups.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/tr/config/validation.json b/web/public/locales/tr/config/validation.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/tr/config/validation.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/config/cameras.json b/web/public/locales/uk/config/cameras.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/config/cameras.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/config/global.json b/web/public/locales/uk/config/global.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/config/global.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/config/groups.json b/web/public/locales/uk/config/groups.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/config/groups.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/config/validation.json b/web/public/locales/uk/config/validation.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/config/validation.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ur/config/cameras.json b/web/public/locales/ur/config/cameras.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ur/config/cameras.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ur/config/global.json b/web/public/locales/ur/config/global.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ur/config/global.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ur/config/groups.json b/web/public/locales/ur/config/groups.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ur/config/groups.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ur/config/validation.json b/web/public/locales/ur/config/validation.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ur/config/validation.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uz/config/cameras.json b/web/public/locales/uz/config/cameras.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uz/config/cameras.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uz/config/global.json b/web/public/locales/uz/config/global.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uz/config/global.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uz/config/groups.json b/web/public/locales/uz/config/groups.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uz/config/groups.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uz/config/validation.json b/web/public/locales/uz/config/validation.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uz/config/validation.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/vi/config/cameras.json b/web/public/locales/vi/config/cameras.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/vi/config/cameras.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/vi/config/global.json b/web/public/locales/vi/config/global.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/vi/config/global.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/vi/config/groups.json b/web/public/locales/vi/config/groups.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/vi/config/groups.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/vi/config/validation.json b/web/public/locales/vi/config/validation.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/vi/config/validation.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/yue-Hant/common.json b/web/public/locales/yue-Hant/common.json
index c1fec067c..5a0f44976 100644
--- a/web/public/locales/yue-Hant/common.json
+++ b/web/public/locales/yue-Hant/common.json
@@ -135,7 +135,18 @@
"download": "下載",
"unsuspended": "取消暫停",
"unselect": "取消選取",
- "continue": "繼續"
+ "continue": "繼續",
+ "add": "新增",
+ "undo": "復原",
+ "copiedToClipboard": "已複製到剪貼簿",
+ "modified": "已修改",
+ "overridden": "已覆寫",
+ "resetToGlobal": "重設為全域設定",
+ "resetToDefault": "重設為預設值",
+ "saveAll": "全部儲存",
+ "savingAll": "正在儲存全部…",
+ "undoAll": "全部復原",
+ "applying": "套用中…"
},
"menu": {
"system": "系統",
@@ -237,7 +248,9 @@
"setPassword": "設定密碼"
},
"help": "幫助",
- "classification": "分類"
+ "classification": "分類",
+ "actions": "行動",
+ "chat": "聊天"
},
"role": {
"admin": "管理員",
diff --git a/web/public/locales/yue-Hant/components/dialog.json b/web/public/locales/yue-Hant/components/dialog.json
index 83b010d60..908f2c155 100644
--- a/web/public/locales/yue-Hant/components/dialog.json
+++ b/web/public/locales/yue-Hant/components/dialog.json
@@ -63,6 +63,10 @@
"fromTimeline": {
"saveExport": "儲存匯出",
"previewExport": "預覽匯出"
+ },
+ "case": {
+ "label": "案例",
+ "placeholder": "選擇案例"
}
},
"streaming": {
diff --git a/web/public/locales/yue-Hant/views/system.json b/web/public/locales/yue-Hant/views/system.json
index bbbca1d0c..8f578d5c5 100644
--- a/web/public/locales/yue-Hant/views/system.json
+++ b/web/public/locales/yue-Hant/views/system.json
@@ -80,7 +80,9 @@
"title": "Intel GPU 狀態警告",
"message": "GPU 狀態不可用",
"description": "這是 Intel GPU 統計工具已知問題,可能顯示 0% 使用率,但不影響效能。可重新啟動主機暫時修復。"
- }
+ },
+ "gpuTemperature": "GPU 溫度",
+ "npuTemperature": "NPU 溫度"
},
"otherProcesses": {
"title": "其他程序",
@@ -165,6 +167,17 @@
"error": {
"unableToProbeCamera": "無法取得鏡頭資料:{{errorMessage}}"
}
+ },
+ "connectionQuality": {
+ "title": "連線品質",
+ "excellent": "極佳",
+ "fair": "一般",
+ "poor": "差",
+ "unusable": "無法使用",
+ "fps": "每秒幀數",
+ "expectedFps": "預期每秒幀數",
+ "reconnectsLastHour": "重新連線次數(過去一小時)",
+ "stallsLastHour": "卡頓次數(過去一小時)"
}
},
"lastRefreshed": "最後更新: ",
diff --git a/web/public/locales/yue_Hant/config/cameras.json b/web/public/locales/yue_Hant/config/cameras.json
new file mode 100644
index 000000000..ea83d0596
--- /dev/null
+++ b/web/public/locales/yue_Hant/config/cameras.json
@@ -0,0 +1,605 @@
+{
+ "zones": {
+ "label": "區域"
+ },
+ "label": "鏡頭設定",
+ "name": {
+ "label": "鏡頭名稱",
+ "description": "必須填寫鏡頭名稱"
+ },
+ "friendly_name": {
+ "label": "顯示名稱",
+ "description": "在 Frigate 介面顯示的鏡頭名稱"
+ },
+ "enabled": {
+ "label": "已啟用",
+ "description": "已啟用"
+ },
+ "audio": {
+ "label": "聲音事件",
+ "description": "此鏡頭用於聲音事件偵測的設定。",
+ "enabled": {
+ "label": "啟用聲音偵測",
+ "description": "啟用或停用此鏡頭的聲音事件偵測。"
+ },
+ "max_not_heard": {
+ "label": "結束逾時",
+ "description": "當指定聲音類型消失多少秒後,聲音事件會結束。"
+ },
+ "min_volume": {
+ "label": "最低音量",
+ "description": "執行聲音偵測所需的最低 RMS 音量閾值;數值越低靈敏度越高(例如:200 高、500 中、1000 低)。"
+ },
+ "listen": {
+ "label": "監聽聲音類型",
+ "description": "要偵測的聲音事件類型清單(例如:狗吠、火警、尖叫、說話、大叫)。"
+ },
+ "filters": {
+ "label": "聲音過濾器",
+ "description": "針對每種聲音類型的過濾設定,例如信心值門檻,用來減少誤判。"
+ },
+ "enabled_in_config": {
+ "label": "原始聲音偵測狀態",
+ "description": "表示在原始靜態設定檔中是否已啟用聲音偵測。"
+ },
+ "num_threads": {
+ "label": "偵測執行緒數量",
+ "description": "用於聲音偵測處理的執行緒數量。"
+ }
+ },
+ "audio_transcription": {
+ "label": "聲音轉錄",
+ "description": "用於事件及即時字幕的語音與即時聲音轉錄設定。",
+ "enabled": {
+ "label": "啟用語音轉錄",
+ "description": "啟用或停用手動觸發的聲音事件轉錄。"
+ },
+ "enabled_in_config": {
+ "label": "原始轉錄狀態"
+ },
+ "live_enabled": {
+ "label": "即時轉錄",
+ "description": "在接收聲音時啟用串流即時轉錄。"
+ }
+ },
+ "birdseye": {
+ "label": "Birdseye",
+ "description": "Birdseye 合成畫面的設定,可將多個鏡頭畫面合併成單一佈局。",
+ "enabled": {
+ "label": "啟用 Birdseye",
+ "description": "啟用或停用 Birdseye 功能。"
+ },
+ "mode": {
+ "label": "追蹤模式",
+ "description": "鏡頭在 Birdseye 中的顯示模式:objects(物件)、motion(動作)、continuous(持續)。"
+ },
+ "order": {
+ "label": "位置",
+ "description": "控制鏡頭在 Birdseye 佈局中排序的數值位置。"
+ }
+ },
+ "detect": {
+ "label": "物件偵測",
+ "description": "用於執行物件偵測及初始化追蹤器的 detect 角色設定。",
+ "enabled": {
+ "label": "啟用偵測",
+ "description": "啟用或停用此鏡頭的物件偵測。必須啟用偵測才能進行物件追蹤。"
+ },
+ "height": {
+ "label": "偵測高度",
+ "description": "偵測串流所使用影像幀的高度(像素);留空會使用原始解析度。"
+ },
+ "width": {
+ "label": "偵測闊度",
+ "description": "偵測串流所使用影像幀的闊度(像素);留空會使用原始解析度。"
+ },
+ "fps": {
+ "label": "偵測 FPS",
+ "description": "每秒執行偵測的幀數;數值越低 CPU 使用量越少(建議值為 5,只有在追蹤非常快速移動物件時才提高,最多 10)。"
+ },
+ "min_initialized": {
+ "label": "最少初始化幀數",
+ "description": "建立追蹤物件前所需的連續偵測幀數。提高數值可減少誤初始化。預設值為 fps 的一半。"
+ },
+ "max_disappeared": {
+ "label": "最大消失幀數",
+ "description": "當連續多少幀沒有偵測到物件後,該追蹤物件會被視為消失。"
+ },
+ "stationary": {
+ "label": "靜止物件設定",
+ "description": "用於偵測及管理長時間保持靜止的物件。",
+ "interval": {
+ "label": "靜止檢查間隔",
+ "description": "每隔多少幀執行一次偵測檢查以確認物件是否靜止。"
+ },
+ "threshold": {
+ "label": "靜止判定幀數",
+ "description": "當物件位置在多少幀內沒有變化時,會被標記為靜止。"
+ },
+ "max_frames": {
+ "label": "最大幀數",
+ "description": "限制靜止物件被追蹤的最長幀數,之後會被移除。",
+ "default": {
+ "label": "預設最大幀數",
+ "description": "預設追蹤靜止物件的最大幀數。"
+ },
+ "objects": {
+ "label": "物件最大幀數",
+ "description": "針對不同物件設定追蹤靜止物件的最大幀數。"
+ }
+ },
+ "classifier": {
+ "label": "啟用視覺分類器",
+ "description": "使用視覺分類器在邊界框抖動時仍能偵測真正靜止的物件。"
+ }
+ },
+ "annotation_offset": {
+ "label": "標註時間偏移",
+ "description": "用於調整偵測標註的毫秒偏移,使時間線上的框與錄影更準確對齊,可為正或負值。"
+ }
+ },
+ "face_recognition": {
+ "label": "人臉識別",
+ "description": "此鏡頭的人臉偵測與識別設定。",
+ "enabled": {
+ "label": "啟用人臉識別",
+ "description": "啟用或停用人臉識別。"
+ },
+ "min_area": {
+ "label": "最小人臉面積",
+ "description": "嘗試識別前所需的人臉偵測框最小面積(像素)。"
+ }
+ },
+ "ffmpeg": {
+ "label": "FFmpeg 設定",
+ "description": "FFmpeg 設定,包括程式路徑、參數、硬件加速選項及不同角色的輸出參數。",
+ "path": {
+ "label": "FFmpeg 路徑",
+ "description": "FFmpeg 可執行檔路徑或版本別名(例如 \"5.0\" 或 \"7.0\")。"
+ },
+ "global_args": {
+ "label": "FFmpeg 全域參數",
+ "description": "傳遞給 FFmpeg 程序的全域參數。"
+ },
+ "hwaccel_args": {
+ "label": "硬件加速參數",
+ "description": "FFmpeg 硬件加速參數,建議使用對應供應商的預設設定。"
+ },
+ "input_args": {
+ "label": "輸入參數",
+ "description": "套用於 FFmpeg 輸入串流的參數。"
+ },
+ "output_args": {
+ "label": "輸出參數",
+ "description": "不同 FFmpeg 角色(例如 detect、record)使用的預設輸出參數。",
+ "detect": {
+ "label": "偵測輸出參數",
+ "description": "detect 角色串流的預設輸出參數。"
+ },
+ "record": {
+ "label": "錄影輸出參數",
+ "description": "record 角色串流的預設輸出參數。"
+ }
+ },
+ "retry_interval": {
+ "label": "FFmpeg 重試時間",
+ "description": "當鏡頭串流失敗後,等待多少秒再嘗試重新連線。預設為 10。"
+ },
+ "apple_compatibility": {
+ "label": "Apple 相容模式",
+ "description": "在錄製 H.265 時啟用 HEVC 標記,以改善 Apple 播放器相容性。"
+ },
+ "gpu": {
+ "label": "GPU 編號",
+ "description": "若可用,硬件加速所使用的預設 GPU 編號。"
+ },
+ "inputs": {
+ "label": "鏡頭輸入",
+ "description": "此鏡頭的輸入串流定義清單(路徑及角色)。",
+ "path": {
+ "label": "輸入路徑",
+ "description": "鏡頭輸入串流 URL 或路徑。"
+ },
+ "roles": {
+ "label": "輸入角色",
+ "description": "此輸入串流的角色。"
+ },
+ "global_args": {
+ "label": "FFmpeg 全域參數",
+ "description": "此輸入串流的 FFmpeg 全域參數。"
+ },
+ "hwaccel_args": {
+ "label": "硬件加速參數",
+ "description": "此輸入串流的硬件加速參數。"
+ },
+ "input_args": {
+ "label": "輸入參數",
+ "description": "此串流專用的輸入參數。"
+ }
+ }
+ },
+ "live": {
+ "label": "即時播放",
+ "description": "Web UI 用來控制即時串流選擇、解析度及品質的設定。",
+ "streams": {
+ "label": "即時串流名稱",
+ "description": "將設定的串流名稱對應到 restream / go2rtc 名稱以供即時播放。"
+ },
+ "height": {
+ "label": "即時畫面高度",
+ "description": "在 Web UI 顯示 jsmpeg 即時串流的高度(像素);必須小於或等於偵測串流高度。"
+ },
+ "quality": {
+ "label": "即時畫面品質",
+ "description": "jsmpeg 串流的編碼品質(1 最高,31 最低)。"
+ }
+ },
+ "lpr": {
+ "label": "車牌識別",
+ "description": "車牌識別設定,包括偵測閾值、格式化及已知車牌。",
+ "enabled": {
+ "label": "啟用車牌識別",
+ "description": "啟用或停用此鏡頭的車牌識別。"
+ },
+ "expire_time": {
+ "label": "過期秒數",
+ "description": "當車牌在指定秒數內沒有再次出現時會從追蹤器中過期(只適用於專用 LPR 鏡頭)。"
+ },
+ "min_area": {
+ "label": "最小車牌面積",
+ "description": "嘗試識別所需的最小車牌面積(像素)。"
+ },
+ "enhancement": {
+ "label": "增強等級",
+ "description": "在 OCR 前對車牌裁剪圖像套用的增強等級(0-10);數值越高不一定效果更好,5 以上通常只對夜間車牌有效,需小心使用。"
+ }
+ },
+ "motion": {
+ "label": "移動偵測",
+ "description": "此鏡頭的預設移動偵測設定。",
+ "enabled": {
+ "label": "啟用移動偵測",
+ "description": "啟用或停用此鏡頭的移動偵測。"
+ },
+ "threshold": {
+ "label": "移動閾值",
+ "description": "移動偵測使用的像素差異閾值;數值越高靈敏度越低(範圍 1-255)。"
+ },
+ "lightning_threshold": {
+ "label": "閃光閾值",
+ "description": "用於偵測並忽略短暫光線變化的閾值(數值越低越敏感,範圍 0.3 至 1.0)。這不會完全阻止移動偵測;當超過閾值時偵測器只會停止分析額外影像幀。"
+ },
+ "skip_motion_threshold": {
+ "label": "跳過移動閾值",
+ "description": "如果單一影像幀有超過此比例的畫面改變,偵測器會不回傳移動框並立即重新校準。這可在閃電、暴風雨等情況節省 CPU 並減少誤判,但可能會錯過真正事件,例如 PTZ 鏡頭自動追蹤物件。這是在丟失少量錄影資料與需要檢查一些短片之間的取捨。"
+ },
+ "improve_contrast": {
+ "label": "改善對比",
+ "description": "在進行移動分析前改善影像對比以協助偵測。"
+ },
+ "contour_area": {
+ "label": "輪廓面積",
+ "description": "移動輪廓被計算所需的最小像素面積。"
+ },
+ "delta_alpha": {
+ "label": "Delta alpha 值",
+ "description": "用於影像差分計算移動時的 alpha 混合係數。"
+ },
+ "frame_alpha": {
+ "label": "影像幀 alpha 值",
+ "description": "用於移動預處理時影像幀混合的 alpha 值。"
+ },
+ "frame_height": {
+ "label": "影像幀高度",
+ "description": "在計算移動時縮放影像幀的高度(像素)。"
+ },
+ "mask": {
+ "label": "遮罩座標",
+ "description": "定義移動遮罩多邊形的 x,y 座標順序,用於包含或排除特定區域。"
+ },
+ "mqtt_off_delay": {
+ "label": "MQTT 關閉延遲",
+ "description": "最後一次移動後等待多少秒才發佈 MQTT 的「off」狀態。"
+ },
+ "enabled_in_config": {
+ "label": "原始移動偵測狀態",
+ "description": "表示在原始靜態設定中是否已啟用移動偵測。"
+ },
+ "raw_mask": {
+ "label": "原始遮罩"
+ }
+ },
+ "objects": {
+ "label": "物件",
+ "description": "物件追蹤的預設設定,包括要追蹤的標籤及每個物件的過濾器。",
+ "track": {
+ "label": "要追蹤的物件",
+ "description": "此鏡頭要追蹤的物件標籤清單。"
+ },
+ "filters": {
+ "label": "物件過濾器",
+ "description": "套用於偵測物件的過濾器以減少誤判(面積、比例、信心值)。",
+ "min_area": {
+ "label": "最小物件面積",
+ "description": "此物件類型所需的最小偵測框面積(像素或百分比)。可以是像素(整數)或百分比(介於 0.000001 和 0.99 之間的浮點數)。"
+ },
+ "max_area": {
+ "label": "最大物件面積",
+ "description": "此物件類型允許的最大偵測框面積(像素或百分比)。可以是像素(整數)或百分比(介於 0.000001 和 0.99 之間的浮點數)。"
+ },
+ "min_ratio": {
+ "label": "最小長寬比",
+ "description": "偵測框符合條件所需的最小寬高比。"
+ },
+ "max_ratio": {
+ "label": "最大長寬比",
+ "description": "偵測框允許的最大寬高比。"
+ },
+ "threshold": {
+ "label": "信心值閾值",
+ "description": "物件被視為真正偵測結果所需的平均信心值閾值。"
+ },
+ "min_score": {
+ "label": "最低信心值",
+ "description": "物件被計算所需的單一影像幀最低信心值。"
+ },
+ "mask": {
+ "label": "過濾遮罩",
+ "description": "定義此過濾器在畫面中生效位置的多邊形座標。"
+ },
+ "raw_mask": {
+ "label": "原始遮罩"
+ }
+ },
+ "mask": {
+ "label": "物件遮罩",
+ "description": "用於防止在指定區域進行物件偵測的遮罩多邊形。"
+ },
+ "raw_mask": {
+ "label": "原始遮罩"
+ },
+ "genai": {
+ "label": "GenAI 物件設定",
+ "description": "用於描述被追蹤物件並傳送影像幀作生成用途的 GenAI 設定。",
+ "enabled": {
+ "label": "啟用 GenAI",
+ "description": "預設為被追蹤物件啟用 GenAI 描述生成功能。"
+ },
+ "use_snapshot": {
+ "label": "使用快照",
+ "description": "使用物件快照而不是縮圖來生成 GenAI 描述。"
+ },
+ "prompt": {
+ "label": "描述提示詞",
+ "description": "使用 GenAI 生成描述時使用的預設提示模板。"
+ },
+ "object_prompts": {
+ "label": "物件提示詞",
+ "description": "為特定物件標籤自訂 GenAI 輸出的提示詞。"
+ },
+ "objects": {
+ "label": "GenAI 物件",
+ "description": "預設會傳送到 GenAI 的物件標籤清單。"
+ },
+ "required_zones": {
+ "label": "必要區域",
+ "description": "物件必須進入的區域,才會生成 GenAI 描述。"
+ },
+ "debug_save_thumbnails": {
+ "label": "儲存縮圖",
+ "description": "儲存傳送到 GenAI 的縮圖以供除錯及檢視。"
+ },
+ "send_triggers": {
+ "label": "GenAI 觸發條件",
+ "description": "定義何時將影像幀傳送到 GenAI(例如結束時、更新後等)。",
+ "tracked_object_end": {
+ "label": "結束時傳送",
+ "description": "當追蹤物件結束時向 GenAI 發送請求。"
+ },
+ "after_significant_updates": {
+ "label": "提前 GenAI 觸發",
+ "description": "當追蹤物件出現指定數量的重要更新後向 GenAI 發送請求。"
+ }
+ },
+ "enabled_in_config": {
+ "label": "原始 GenAI 狀態",
+ "description": "表示在原始靜態設定中是否啟用了 GenAI。"
+ }
+ }
+ },
+ "record": {
+ "label": "錄影",
+ "description": "此鏡頭的錄影及保存設定。",
+ "enabled": {
+ "label": "啟用錄影",
+ "description": "啟用或停用此鏡頭錄影。"
+ },
+ "expire_interval": {
+ "label": "錄影清理間隔",
+ "description": "清理過期錄影片段的間隔時間(分鐘)。"
+ },
+ "continuous": {
+ "label": "持續錄影保存",
+ "description": "無論是否有物件或移動都保留錄影的天數。如果只想保留警報和偵測記錄,請設定為 0。",
+ "days": {
+ "label": "保存日數",
+ "description": "錄影保存日數。"
+ }
+ },
+ "motion": {
+ "label": "移動錄影保存",
+ "description": "由動作觸發的錄影保存日數(不論是否有追蹤物件)。如果只想保留警報和偵測記錄,請設定為 0。",
+ "days": {
+ "label": "保存日數",
+ "description": "錄影保存日數。"
+ }
+ },
+ "detections": {
+ "label": "偵測錄影保存",
+ "description": "偵測事件錄影的保存設定,包括事件前後錄影時間。",
+ "pre_capture": {
+ "label": "事件前錄影秒數",
+ "description": "在偵測事件前包含於錄影中的秒數。"
+ },
+ "post_capture": {
+ "label": "事件後錄影秒數",
+ "description": "在偵測事件後包含於錄影中的秒數。"
+ },
+ "retain": {
+ "label": "事件保存",
+ "description": "偵測事件錄影的保存設定。",
+ "days": {
+ "label": "保存日數",
+ "description": "偵測事件錄影保存日數。"
+ },
+ "mode": {
+ "label": "保存模式",
+ "description": "保存模式:all(保存所有片段)、motion(保存有移動的片段)、active_objects(保存有移動物件的片段)。"
+ }
+ }
+ },
+ "alerts": {
+ "label": "警報錄影保存",
+ "description": "警報事件錄影保存設定,包括事件前後錄影時間。",
+ "pre_capture": {
+ "label": "事件前錄影秒數",
+ "description": "在偵測事件前包含於錄影中的秒數。"
+ },
+ "post_capture": {
+ "label": "事件後錄影秒數",
+ "description": "在偵測事件後包含於錄影中的秒數。"
+ },
+ "retain": {
+ "label": "事件保存",
+ "description": "偵測事件錄影保存設定。",
+ "days": {
+ "label": "保存日數",
+ "description": "偵測事件錄影保存日數。"
+ },
+ "mode": {
+ "label": "保存模式",
+ "description": "保存模式:all(保存所有片段)、motion(保存有移動的片段)、active_objects(保存有移動物件的片段)。"
+ }
+ }
+ },
+ "export": {
+ "label": "匯出設定",
+ "description": "匯出錄影(例如縮時影片)時使用的設定,包括硬件加速。",
+ "hwaccel_args": {
+ "label": "匯出硬件加速參數",
+ "description": "用於匯出或轉碼操作的硬件加速參數。"
+ }
+ },
+ "preview": {
+ "label": "預覽設定",
+ "description": "控制 UI 中錄影預覽品質的設定。",
+ "quality": {
+ "label": "預覽品質",
+ "description": "預覽品質等級(very_low、low、medium、high、very_high)。"
+ }
+ },
+ "enabled_in_config": {
+ "label": "原始錄影狀態",
+ "description": "表示在原始靜態設定中是否已啟用錄影。"
+ }
+ },
+ "review": {
+ "label": "審查",
+ "description": "控制警報、偵測及 GenAI 檢視摘要的設定,供 UI 與儲存使用。",
+ "alerts": {
+ "label": "警報設定",
+ "description": "哪些追蹤物件會產生警報以及警報保存方式的設定。",
+ "enabled": {
+ "label": "啟用警報",
+ "description": "啟用或停用此鏡頭的警報產生。"
+ },
+ "labels": {
+ "label": "警報標籤",
+ "description": "符合警報條件的物件標籤清單(例如 car、person)。"
+ },
+ "required_zones": {
+ "label": "必要區域",
+ "description": "物件必須進入的區域才會被視為警報;留空表示任何區域都可以。"
+ },
+ "enabled_in_config": {
+ "label": "原始警報狀態",
+ "description": "追蹤原始靜態設定中是否啟用了警報。"
+ },
+ "cutoff_time": {
+ "label": "警報截止時間",
+ "description": "在沒有觸發警報活動後等待多少秒才結束警報。"
+ }
+ },
+ "detections": {
+ "label": "偵測設定",
+ "description": "建立偵測事件(非警報)及其保存時間的設定。",
+ "enabled": {
+ "label": "啟用偵測事件",
+ "description": "啟用或停用此鏡頭的偵測事件。"
+ },
+ "labels": {
+ "label": "偵測標籤",
+ "description": "符合偵測事件條件的物件標籤清單。"
+ },
+ "required_zones": {
+ "label": "必要區域",
+ "description": "物件必須進入的區域才會被視為偵測事件;留空表示任何區域。"
+ },
+ "cutoff_time": {
+ "label": "偵測截止時間",
+ "description": "在沒有觸發偵測活動後等待多少秒才結束偵測事件。"
+ },
+ "enabled_in_config": {
+ "label": "原始偵測狀態",
+ "description": "追蹤原始靜態設定中是否啟用了偵測事件。"
+ }
+ },
+ "genai": {
+ "label": "GenAI 設定",
+ "enabled_in_config": {
+ "label": "原始 GenAI 狀態"
+ },
+ "preferred_language": {
+ "label": "偏好語言",
+ "description": "向 GenAI 服務請求生成回應時使用的偏好語言。"
+ },
+ "activity_context_prompt": {
+ "label": "活動情境提示",
+ "description": "用於描述哪些行為屬於或不屬於可疑活動的自訂提示詞,以提供 GenAI 摘要情境。"
+ }
+ }
+ },
+ "semantic_search": {
+ "label": "語意搜尋",
+ "description": "語意搜尋設定,用於建立及查詢物件嵌入向量以找出相似項目。",
+ "triggers": {
+ "label": "觸發器",
+ "friendly_name": {
+ "label": "顯示名稱"
+ }
+ }
+ },
+ "snapshots": {
+ "label": "快照",
+ "description": "此鏡頭保存追蹤物件 JPEG 快照的設定。",
+ "enabled": {
+ "label": "啟用快照",
+ "description": "啟用或停用此鏡頭保存快照。"
+ },
+ "clean_copy": {
+ "label": "保存原始副本",
+ "description": "啟用或停用此鏡頭保存快照。"
+ },
+ "timestamp": {
+ "label": "時間戳疊加",
+ "description": "在保存的快照上顯示時間戳。"
+ },
+ "bounding_box": {
+ "label": "偵測框疊加",
+ "description": "在保存的快照上顯示追蹤物件的邊界框。"
+ },
+ "crop": {
+ "label": "裁剪快照"
+ }
+ }
+}
diff --git a/web/public/locales/yue_Hant/config/global.json b/web/public/locales/yue_Hant/config/global.json
new file mode 100644
index 000000000..ce6b72665
--- /dev/null
+++ b/web/public/locales/yue_Hant/config/global.json
@@ -0,0 +1,564 @@
+{
+ "audio": {
+ "label": "聲音事件",
+ "enabled": {
+ "label": "啟用聲音偵測"
+ },
+ "max_not_heard": {
+ "label": "結束逾時",
+ "description": "當指定聲音類型消失多少秒後,聲音事件會結束。"
+ },
+ "min_volume": {
+ "label": "最低音量",
+ "description": "執行聲音偵測所需的最低 RMS 音量閾值;數值越低靈敏度越高(例如:200 高、500 中、1000 低)。"
+ },
+ "listen": {
+ "label": "監聽聲音類型",
+ "description": "要偵測的聲音事件類型清單(例如:狗吠、火警、尖叫、說話、大叫)。"
+ },
+ "filters": {
+ "label": "聲音過濾器",
+ "description": "針對每種聲音類型的過濾設定,例如信心值門檻,用來減少誤判。"
+ },
+ "enabled_in_config": {
+ "label": "原始聲音偵測狀態",
+ "description": "表示在原始靜態設定檔中是否已啟用聲音偵測。"
+ },
+ "num_threads": {
+ "label": "偵測執行緒數量",
+ "description": "用於聲音偵測處理的執行緒數量。"
+ }
+ },
+ "audio_transcription": {
+ "label": "聲音轉錄",
+ "description": "用於事件及即時字幕的語音與即時聲音轉錄設定。",
+ "live_enabled": {
+ "label": "即時轉錄",
+ "description": "在接收聲音時啟用串流即時轉錄。"
+ }
+ },
+ "birdseye": {
+ "label": "Birdseye",
+ "description": "Birdseye 合成畫面的設定,可將多個鏡頭畫面合併成單一佈局。",
+ "enabled": {
+ "label": "啟用 Birdseye",
+ "description": "啟用或停用 Birdseye 功能。"
+ },
+ "mode": {
+ "label": "追蹤模式",
+ "description": "鏡頭在 Birdseye 中的顯示模式:objects(物件)、motion(動作)、continuous(持續)。"
+ },
+ "order": {
+ "label": "位置",
+ "description": "控制鏡頭在 Birdseye 佈局中排序的數值位置。"
+ }
+ },
+ "detect": {
+ "label": "物件偵測",
+ "description": "用於執行物件偵測及初始化追蹤器的 detect 角色設定。",
+ "enabled": {
+ "label": "啟用偵測"
+ },
+ "height": {
+ "label": "偵測高度",
+ "description": "偵測串流所使用影像幀的高度(像素);留空會使用原始解析度。"
+ },
+ "width": {
+ "label": "偵測闊度",
+ "description": "偵測串流所使用影像幀的闊度(像素);留空會使用原始解析度。"
+ },
+ "fps": {
+ "label": "偵測 FPS",
+ "description": "每秒執行偵測的幀數;數值越低 CPU 使用量越少(建議值為 5,只有在追蹤非常快速移動物件時才提高,最多 10)。"
+ },
+ "min_initialized": {
+ "label": "最少初始化幀數",
+ "description": "建立追蹤物件前所需的連續偵測幀數。提高數值可減少誤初始化。預設值為 fps 的一半。"
+ },
+ "max_disappeared": {
+ "label": "最大消失幀數",
+ "description": "當連續多少幀沒有偵測到物件後,該追蹤物件會被視為消失。"
+ },
+ "stationary": {
+ "label": "靜止物件設定",
+ "description": "用於偵測及管理長時間保持靜止的物件。",
+ "interval": {
+ "label": "靜止檢查間隔",
+ "description": "每隔多少幀執行一次偵測檢查以確認物件是否靜止。"
+ },
+ "threshold": {
+ "label": "靜止判定幀數",
+ "description": "當物件位置在多少幀內沒有變化時,會被標記為靜止。"
+ },
+ "max_frames": {
+ "label": "最大幀數",
+ "description": "限制靜止物件被追蹤的最長幀數,之後會被移除。",
+ "default": {
+ "label": "預設最大幀數",
+ "description": "預設追蹤靜止物件的最大幀數。"
+ },
+ "objects": {
+ "label": "物件最大幀數",
+ "description": "針對不同物件設定追蹤靜止物件的最大幀數。"
+ }
+ },
+ "classifier": {
+ "label": "啟用視覺分類器",
+ "description": "使用視覺分類器在邊界框抖動時仍能偵測真正靜止的物件。"
+ }
+ },
+ "annotation_offset": {
+ "label": "標註時間偏移",
+ "description": "用於調整偵測標註的毫秒偏移,使時間線上的框與錄影更準確對齊,可為正或負值。"
+ }
+ },
+ "face_recognition": {
+ "label": "人臉識別",
+ "enabled": {
+ "label": "啟用人臉識別"
+ },
+ "min_area": {
+ "label": "最小人臉面積",
+ "description": "嘗試識別前所需的人臉偵測框最小面積(像素)。"
+ }
+ },
+ "ffmpeg": {
+ "label": "FFmpeg 設定",
+ "description": "FFmpeg 設定,包括程式路徑、參數、硬件加速選項及不同角色的輸出參數。",
+ "path": {
+ "label": "FFmpeg 路徑",
+ "description": "FFmpeg 可執行檔路徑或版本別名(例如 \"5.0\" 或 \"7.0\")。"
+ },
+ "global_args": {
+ "label": "FFmpeg 全域參數",
+ "description": "傳遞給 FFmpeg 程序的全域參數。"
+ },
+ "hwaccel_args": {
+ "label": "硬件加速參數",
+ "description": "FFmpeg 硬件加速參數,建議使用對應供應商的預設設定。"
+ },
+ "input_args": {
+ "label": "輸入參數",
+ "description": "套用於 FFmpeg 輸入串流的參數。"
+ },
+ "output_args": {
+ "label": "輸出參數",
+ "description": "不同 FFmpeg 角色(例如 detect、record)使用的預設輸出參數。",
+ "detect": {
+ "label": "偵測輸出參數",
+ "description": "detect 角色串流的預設輸出參數。"
+ },
+ "record": {
+ "label": "錄影輸出參數",
+ "description": "record 角色串流的預設輸出參數。"
+ }
+ },
+ "retry_interval": {
+ "label": "FFmpeg 重試時間",
+ "description": "當鏡頭串流失敗後,等待多少秒再嘗試重新連線。預設為 10。"
+ },
+ "apple_compatibility": {
+ "label": "Apple 相容模式",
+ "description": "在錄製 H.265 時啟用 HEVC 標記,以改善 Apple 播放器相容性。"
+ },
+ "gpu": {
+ "label": "GPU 編號",
+ "description": "若可用,硬件加速所使用的預設 GPU 編號。"
+ },
+ "inputs": {
+ "label": "鏡頭輸入",
+ "description": "此鏡頭的輸入串流定義清單(路徑及角色)。",
+ "path": {
+ "label": "輸入路徑",
+ "description": "鏡頭輸入串流 URL 或路徑。"
+ },
+ "roles": {
+ "label": "輸入角色",
+ "description": "此輸入串流的角色。"
+ },
+ "global_args": {
+ "label": "FFmpeg 全域參數",
+ "description": "此輸入串流的 FFmpeg 全域參數。"
+ },
+ "hwaccel_args": {
+ "label": "硬件加速參數",
+ "description": "此輸入串流的硬件加速參數。"
+ },
+ "input_args": {
+ "label": "輸入參數",
+ "description": "此串流專用的輸入參數。"
+ }
+ }
+ },
+ "live": {
+ "label": "即時播放",
+ "streams": {
+ "label": "即時串流名稱",
+ "description": "將設定的串流名稱對應到 restream / go2rtc 名稱以供即時播放。"
+ },
+ "height": {
+ "label": "即時畫面高度",
+ "description": "在 Web UI 顯示 jsmpeg 即時串流的高度(像素);必須小於或等於偵測串流高度。"
+ },
+ "quality": {
+ "label": "即時畫面品質",
+ "description": "jsmpeg 串流的編碼品質(1 最高,31 最低)。"
+ }
+ },
+ "lpr": {
+ "label": "車牌識別",
+ "description": "車牌識別設定,包括偵測閾值、格式化及已知車牌。",
+ "enabled": {
+ "label": "啟用車牌識別"
+ },
+ "expire_time": {
+ "label": "過期秒數",
+ "description": "當車牌在指定秒數內沒有再次出現時會從追蹤器中過期(只適用於專用 LPR 鏡頭)。"
+ },
+ "min_area": {
+ "label": "最小車牌面積",
+ "description": "嘗試識別所需的最小車牌面積(像素)。"
+ },
+ "enhancement": {
+ "label": "增強等級",
+ "description": "在 OCR 前對車牌裁剪圖像套用的增強等級(0-10);數值越高不一定效果更好,5 以上通常只對夜間車牌有效,需小心使用。"
+ }
+ },
+ "motion": {
+ "label": "移動偵測",
+ "enabled": {
+ "label": "啟用移動偵測"
+ },
+ "threshold": {
+ "label": "移動閾值",
+ "description": "移動偵測使用的像素差異閾值;數值越高靈敏度越低(範圍 1-255)。"
+ },
+ "lightning_threshold": {
+ "label": "閃光閾值",
+ "description": "用於偵測並忽略短暫光線變化的閾值(數值越低越敏感,範圍 0.3 至 1.0)。這不會完全阻止移動偵測;當超過閾值時偵測器只會停止分析額外影像幀。"
+ },
+ "skip_motion_threshold": {
+ "label": "跳過移動閾值",
+ "description": "如果單一影像幀有超過此比例的畫面改變,偵測器會不回傳移動框並立即重新校準。這可在閃電、暴風雨等情況節省 CPU 並減少誤判,但可能會錯過真正事件,例如 PTZ 鏡頭自動追蹤物件。這是在丟失少量錄影資料與需要檢查一些短片之間的取捨。"
+ },
+ "improve_contrast": {
+ "label": "改善對比",
+ "description": "在進行移動分析前改善影像對比以協助偵測。"
+ },
+ "contour_area": {
+ "label": "輪廓面積",
+ "description": "移動輪廓被計算所需的最小像素面積。"
+ },
+ "delta_alpha": {
+ "label": "Delta alpha 值",
+ "description": "用於影像差分計算移動時的 alpha 混合係數。"
+ },
+ "frame_alpha": {
+ "label": "影像幀 alpha 值",
+ "description": "用於移動預處理時影像幀混合的 alpha 值。"
+ },
+ "frame_height": {
+ "label": "影像幀高度",
+ "description": "在計算移動時縮放影像幀的高度(像素)。"
+ },
+ "mask": {
+ "label": "遮罩座標",
+ "description": "定義移動遮罩多邊形的 x,y 座標順序,用於包含或排除特定區域。"
+ },
+ "mqtt_off_delay": {
+ "label": "MQTT 關閉延遲",
+ "description": "最後一次移動後等待多少秒才發佈 MQTT 的「off」狀態。"
+ },
+ "enabled_in_config": {
+ "label": "原始移動偵測狀態",
+ "description": "表示在原始靜態設定中是否已啟用移動偵測。"
+ },
+ "raw_mask": {
+ "label": "原始遮罩"
+ }
+ },
+ "objects": {
+ "label": "物件",
+ "description": "物件追蹤的預設設定,包括要追蹤的標籤及每個物件的過濾器。",
+ "track": {
+ "label": "要追蹤的物件"
+ },
+ "filters": {
+ "label": "物件過濾器",
+ "description": "套用於偵測物件的過濾器以減少誤判(面積、比例、信心值)。",
+ "min_area": {
+ "label": "最小物件面積",
+ "description": "此物件類型所需的最小偵測框面積(像素或百分比)。可以是像素(整數)或百分比(介於 0.000001 和 0.99 之間的浮點數)。"
+ },
+ "max_area": {
+ "label": "最大物件面積",
+ "description": "此物件類型允許的最大偵測框面積(像素或百分比)。可以是像素(整數)或百分比(介於 0.000001 和 0.99 之間的浮點數)。"
+ },
+ "min_ratio": {
+ "label": "最小長寬比",
+ "description": "偵測框符合條件所需的最小寬高比。"
+ },
+ "max_ratio": {
+ "label": "最大長寬比",
+ "description": "偵測框允許的最大寬高比。"
+ },
+ "threshold": {
+ "label": "信心值閾值",
+ "description": "物件被視為真正偵測結果所需的平均信心值閾值。"
+ },
+ "min_score": {
+ "label": "最低信心值",
+ "description": "物件被計算所需的單一影像幀最低信心值。"
+ },
+ "mask": {
+ "label": "過濾遮罩",
+ "description": "定義此過濾器在畫面中生效位置的多邊形座標。"
+ },
+ "raw_mask": {
+ "label": "原始遮罩"
+ }
+ },
+ "mask": {
+ "label": "物件遮罩",
+ "description": "用於防止在指定區域進行物件偵測的遮罩多邊形。"
+ },
+ "raw_mask": {
+ "label": "原始遮罩"
+ },
+ "genai": {
+ "label": "GenAI 物件設定",
+ "description": "用於描述被追蹤物件並傳送影像幀作生成用途的 GenAI 設定。",
+ "enabled": {
+ "label": "啟用 GenAI",
+ "description": "預設為被追蹤物件啟用 GenAI 描述生成功能。"
+ },
+ "use_snapshot": {
+ "label": "使用快照",
+ "description": "使用物件快照而不是縮圖來生成 GenAI 描述。"
+ },
+ "prompt": {
+ "label": "描述提示詞",
+ "description": "使用 GenAI 生成描述時使用的預設提示模板。"
+ },
+ "object_prompts": {
+ "label": "物件提示詞",
+ "description": "為特定物件標籤自訂 GenAI 輸出的提示詞。"
+ },
+ "objects": {
+ "label": "GenAI 物件",
+ "description": "預設會傳送到 GenAI 的物件標籤清單。"
+ },
+ "required_zones": {
+ "label": "必要區域",
+ "description": "物件必須進入的區域,才會生成 GenAI 描述。"
+ },
+ "debug_save_thumbnails": {
+ "label": "儲存縮圖",
+ "description": "儲存傳送到 GenAI 的縮圖以供除錯及檢視。"
+ },
+ "send_triggers": {
+ "label": "GenAI 觸發條件",
+ "description": "定義何時將影像幀傳送到 GenAI(例如結束時、更新後等)。",
+ "tracked_object_end": {
+ "label": "結束時傳送",
+ "description": "當追蹤物件結束時向 GenAI 發送請求。"
+ },
+ "after_significant_updates": {
+ "label": "提前 GenAI 觸發",
+ "description": "當追蹤物件出現指定數量的重要更新後向 GenAI 發送請求。"
+ }
+ },
+ "enabled_in_config": {
+ "label": "原始 GenAI 狀態",
+ "description": "表示在原始靜態設定中是否啟用了 GenAI。"
+ }
+ }
+ },
+ "record": {
+ "label": "錄影",
+ "enabled": {
+ "label": "啟用錄影"
+ },
+ "expire_interval": {
+ "label": "錄影清理間隔",
+ "description": "清理過期錄影片段的間隔時間(分鐘)。"
+ },
+ "continuous": {
+ "label": "持續錄影保存",
+ "description": "無論是否有物件或移動都保留錄影的天數。如果只想保留警報和偵測記錄,請設定為 0。",
+ "days": {
+ "label": "保存日數",
+ "description": "錄影保存日數。"
+ }
+ },
+ "motion": {
+ "label": "移動錄影保存",
+ "description": "由動作觸發的錄影保存日數(不論是否有追蹤物件)。如果只想保留警報和偵測記錄,請設定為 0。",
+ "days": {
+ "label": "保存日數",
+ "description": "錄影保存日數。"
+ }
+ },
+ "detections": {
+ "label": "偵測錄影保存",
+ "description": "偵測事件錄影的保存設定,包括事件前後錄影時間。",
+ "pre_capture": {
+ "label": "事件前錄影秒數",
+ "description": "在偵測事件前包含於錄影中的秒數。"
+ },
+ "post_capture": {
+ "label": "事件後錄影秒數",
+ "description": "在偵測事件後包含於錄影中的秒數。"
+ },
+ "retain": {
+ "label": "事件保存",
+ "description": "偵測事件錄影的保存設定。",
+ "days": {
+ "label": "保存日數",
+ "description": "偵測事件錄影保存日數。"
+ },
+ "mode": {
+ "label": "保存模式",
+ "description": "保存模式:all(保存所有片段)、motion(保存有移動的片段)、active_objects(保存有移動物件的片段)。"
+ }
+ }
+ },
+ "alerts": {
+ "label": "警報錄影保存",
+ "description": "警報事件錄影保存設定,包括事件前後錄影時間。",
+ "pre_capture": {
+ "label": "事件前錄影秒數",
+ "description": "在偵測事件前包含於錄影中的秒數。"
+ },
+ "post_capture": {
+ "label": "事件後錄影秒數",
+ "description": "在偵測事件後包含於錄影中的秒數。"
+ },
+ "retain": {
+ "label": "事件保存",
+ "description": "偵測事件錄影保存設定。",
+ "days": {
+ "label": "保存日數",
+ "description": "偵測事件錄影保存日數。"
+ },
+ "mode": {
+ "label": "保存模式",
+ "description": "保存模式:all(保存所有片段)、motion(保存有移動的片段)、active_objects(保存有移動物件的片段)。"
+ }
+ }
+ },
+ "export": {
+ "label": "匯出設定",
+ "description": "匯出錄影(例如縮時影片)時使用的設定,包括硬件加速。",
+ "hwaccel_args": {
+ "label": "匯出硬件加速參數",
+ "description": "用於匯出或轉碼操作的硬件加速參數。"
+ }
+ },
+ "preview": {
+ "label": "預覽設定",
+ "description": "控制 UI 中錄影預覽品質的設定。",
+ "quality": {
+ "label": "預覽品質",
+ "description": "預覽品質等級(very_low、low、medium、high、very_high)。"
+ }
+ },
+ "enabled_in_config": {
+ "label": "原始錄影狀態",
+ "description": "表示在原始靜態設定中是否已啟用錄影。"
+ }
+ },
+ "review": {
+ "label": "審查",
+ "alerts": {
+ "label": "警報設定",
+ "description": "哪些追蹤物件會產生警報以及警報保存方式的設定。",
+ "enabled": {
+ "label": "啟用警報"
+ },
+ "labels": {
+ "label": "警報標籤",
+ "description": "符合警報條件的物件標籤清單(例如 car、person)。"
+ },
+ "required_zones": {
+ "label": "必要區域",
+ "description": "物件必須進入的區域才會被視為警報;留空表示任何區域都可以。"
+ },
+ "enabled_in_config": {
+ "label": "原始警報狀態",
+ "description": "追蹤原始靜態設定中是否啟用了警報。"
+ },
+ "cutoff_time": {
+ "label": "警報截止時間",
+ "description": "在沒有觸發警報活動後等待多少秒才結束警報。"
+ }
+ },
+ "detections": {
+ "label": "偵測設定",
+ "description": "建立偵測事件(非警報)及其保存時間的設定。",
+ "enabled": {
+ "label": "啟用偵測事件"
+ },
+ "labels": {
+ "label": "偵測標籤",
+ "description": "符合偵測事件條件的物件標籤清單。"
+ },
+ "required_zones": {
+ "label": "必要區域",
+ "description": "物件必須進入的區域才會被視為偵測事件;留空表示任何區域。"
+ },
+ "cutoff_time": {
+ "label": "偵測截止時間",
+ "description": "在沒有觸發偵測活動後等待多少秒才結束偵測事件。"
+ },
+ "enabled_in_config": {
+ "label": "原始偵測狀態",
+ "description": "追蹤原始靜態設定中是否啟用了偵測事件。"
+ }
+ },
+ "genai": {
+ "label": "GenAI 設定",
+ "enabled_in_config": {
+ "label": "原始 GenAI 狀態"
+ },
+ "preferred_language": {
+ "label": "偏好語言",
+ "description": "向 GenAI 服務請求生成回應時使用的偏好語言。"
+ },
+ "activity_context_prompt": {
+ "label": "活動情境提示",
+ "description": "用於描述哪些行為屬於或不屬於可疑活動的自訂提示詞,以提供 GenAI 摘要情境。"
+ }
+ }
+ },
+ "semantic_search": {
+ "label": "語意搜尋",
+ "triggers": {
+ "label": "觸發器",
+ "friendly_name": {
+ "label": "顯示名稱"
+ }
+ }
+ },
+ "snapshots": {
+ "label": "快照",
+ "enabled": {
+ "label": "啟用快照"
+ },
+ "clean_copy": {
+ "label": "保存原始副本",
+ "description": "啟用或停用此鏡頭保存快照。"
+ },
+ "timestamp": {
+ "label": "時間戳疊加",
+ "description": "在保存的快照上顯示時間戳。"
+ },
+ "bounding_box": {
+ "label": "偵測框疊加",
+ "description": "在保存的快照上顯示追蹤物件的邊界框。"
+ },
+ "crop": {
+ "label": "裁剪快照"
+ }
+ }
+}
diff --git a/web/public/locales/yue_Hant/config/groups.json b/web/public/locales/yue_Hant/config/groups.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/yue_Hant/config/groups.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/yue_Hant/config/validation.json b/web/public/locales/yue_Hant/config/validation.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/yue_Hant/config/validation.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/zh-Hans/config/validation.json b/web/public/locales/zh-Hans/config/validation.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/zh-Hans/config/validation.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/zh_Hans/config/cameras.json b/web/public/locales/zh_Hans/config/cameras.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/zh_Hans/config/cameras.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/zh_Hans/config/global.json b/web/public/locales/zh_Hans/config/global.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/zh_Hans/config/global.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/zh_Hans/config/groups.json b/web/public/locales/zh_Hans/config/groups.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/zh_Hans/config/groups.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/zh_Hant/config/cameras.json b/web/public/locales/zh_Hant/config/cameras.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/zh_Hant/config/cameras.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/zh_Hant/config/global.json b/web/public/locales/zh_Hant/config/global.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/zh_Hant/config/global.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/zh_Hant/config/groups.json b/web/public/locales/zh_Hant/config/groups.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/zh_Hant/config/groups.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/zh_Hant/config/validation.json b/web/public/locales/zh_Hant/config/validation.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/zh_Hant/config/validation.json
@@ -0,0 +1 @@
+{}
diff --git a/web/src/App.tsx b/web/src/App.tsx
index 21babc2b9..01c415de4 100644
--- a/web/src/App.tsx
+++ b/web/src/App.tsx
@@ -11,7 +11,6 @@ import { Redirect } from "./components/navigation/Redirect";
import { cn } from "./lib/utils";
import { isPWA } from "./utils/isPWA";
import ProtectedRoute from "@/components/auth/ProtectedRoute";
-import { AuthProvider } from "@/context/auth-context";
import useSWR from "swr";
import { FrigateConfig } from "./types/frigateConfig";
import ActivityIndicator from "@/components/indicators/activity-indicator";
@@ -39,13 +38,11 @@ function App() {
return (
+