diff --git a/.cspell/frigate-dictionary.txt b/.cspell/frigate-dictionary.txt
index dbab9600e..6e66a4704 100644
--- a/.cspell/frigate-dictionary.txt
+++ b/.cspell/frigate-dictionary.txt
@@ -108,8 +108,8 @@ imagestream
imdecode
imencode
imread
-imutils
imwrite
+inpoint
interp
iostat
iotop
@@ -265,6 +265,7 @@ tensorrt
tflite
thresholded
timelapse
+titlecase
tmpfs
tobytes
toggleable
diff --git a/.github/DISCUSSION_TEMPLATE/camera-support.yml b/.github/DISCUSSION_TEMPLATE/camera-support.yml
index a76fd5caf..521d65ded 100644
--- a/.github/DISCUSSION_TEMPLATE/camera-support.yml
+++ b/.github/DISCUSSION_TEMPLATE/camera-support.yml
@@ -73,7 +73,7 @@ body:
attributes:
label: Operating system
options:
- - HassOS
+ - Home Assistant OS
- Debian
- Other Linux
- Proxmox
@@ -87,7 +87,7 @@ body:
attributes:
label: Install method
options:
- - HassOS Addon
+ - Home Assistant Add-on
- Docker Compose
- Docker CLI
- Proxmox via Docker
diff --git a/.github/DISCUSSION_TEMPLATE/config-support.yml b/.github/DISCUSSION_TEMPLATE/config-support.yml
index 4934d7936..575f7f640 100644
--- a/.github/DISCUSSION_TEMPLATE/config-support.yml
+++ b/.github/DISCUSSION_TEMPLATE/config-support.yml
@@ -59,7 +59,7 @@ body:
attributes:
label: Operating system
options:
- - HassOS
+ - Home Assistant OS
- Debian
- Other Linux
- Proxmox
@@ -73,7 +73,7 @@ body:
attributes:
label: Install method
options:
- - HassOS Addon
+ - Home Assistant Add-on
- Docker Compose
- Docker CLI
- Proxmox via Docker
diff --git a/.github/DISCUSSION_TEMPLATE/detector-support.yml b/.github/DISCUSSION_TEMPLATE/detector-support.yml
index 442b2527a..fb994500f 100644
--- a/.github/DISCUSSION_TEMPLATE/detector-support.yml
+++ b/.github/DISCUSSION_TEMPLATE/detector-support.yml
@@ -53,7 +53,7 @@ body:
attributes:
label: Install method
options:
- - HassOS Addon
+ - Home Assistant Add-on
- Docker Compose
- Docker CLI
- Proxmox via Docker
diff --git a/.github/DISCUSSION_TEMPLATE/general-support.yml b/.github/DISCUSSION_TEMPLATE/general-support.yml
index 7af52bdf5..0b9f225b6 100644
--- a/.github/DISCUSSION_TEMPLATE/general-support.yml
+++ b/.github/DISCUSSION_TEMPLATE/general-support.yml
@@ -73,7 +73,7 @@ body:
attributes:
label: Install method
options:
- - HassOS Addon
+ - Home Assistant Add-on
- Docker Compose
- Docker CLI
- Proxmox via Docker
diff --git a/.github/DISCUSSION_TEMPLATE/hardware-acceleration-support.yml b/.github/DISCUSSION_TEMPLATE/hardware-acceleration-support.yml
index 43fb3503b..861156696 100644
--- a/.github/DISCUSSION_TEMPLATE/hardware-acceleration-support.yml
+++ b/.github/DISCUSSION_TEMPLATE/hardware-acceleration-support.yml
@@ -69,7 +69,7 @@ body:
attributes:
label: Install method
options:
- - HassOS Addon
+ - Home Assistant Add-on
- Docker Compose
- Docker CLI
- Proxmox via Docker
diff --git a/.github/DISCUSSION_TEMPLATE/report-a-bug.yml b/.github/DISCUSSION_TEMPLATE/report-a-bug.yml
index dba6d695e..21e4f746f 100644
--- a/.github/DISCUSSION_TEMPLATE/report-a-bug.yml
+++ b/.github/DISCUSSION_TEMPLATE/report-a-bug.yml
@@ -97,7 +97,7 @@ body:
attributes:
label: Operating system
options:
- - HassOS
+ - Home Assistant OS
- Debian
- Other Linux
- Proxmox
@@ -111,7 +111,7 @@ body:
attributes:
label: Install method
options:
- - HassOS Addon
+ - Home Assistant Add-on
- Docker Compose
- Docker CLI
validations:
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 69425b735..3204244a6 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -2,12 +2,12 @@
@@ -24,7 +24,7 @@
## Additional information
- This PR fixes or closes issue: fixes #
-- This PR is related to issue:
+- This PR is related to issue:
## Checklist
@@ -35,4 +35,5 @@
- [ ] The code change is tested and works locally.
- [ ] Local tests pass. **Your PR cannot be merged unless tests pass**
- [ ] There is no commented out code in this PR.
+- [ ] UI changes including text have used i18n keys and have been added to the `en` locale.
- [ ] The code has been formatted using Ruff (`ruff format frigate`)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 5778d32d1..6c19ca6cb 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -39,14 +39,14 @@ jobs:
STABLE_TAG=${BASE}:stable
PULL_TAG=${BASE}:${BUILD_TAG}
docker run --rm -v $HOME/.docker/config.json:/config.json quay.io/skopeo/stable:latest copy --authfile /config.json --multi-arch all docker://${PULL_TAG} docker://${VERSION_TAG}
- for variant in standard-arm64 tensorrt tensorrt-jp5 tensorrt-jp6 rk h8l rocm; do
+ for variant in standard-arm64 tensorrt tensorrt-jp6 rk rocm; do
docker run --rm -v $HOME/.docker/config.json:/config.json quay.io/skopeo/stable:latest copy --authfile /config.json --multi-arch all docker://${PULL_TAG}-${variant} docker://${VERSION_TAG}-${variant}
done
# stable tag
if [[ "${BUILD_TYPE}" == "stable" ]]; then
docker run --rm -v $HOME/.docker/config.json:/config.json quay.io/skopeo/stable:latest copy --authfile /config.json --multi-arch all docker://${PULL_TAG} docker://${STABLE_TAG}
- for variant in standard-arm64 tensorrt tensorrt-jp5 tensorrt-jp6 rk h8l rocm; do
+ for variant in standard-arm64 tensorrt tensorrt-jp6 rk rocm; do
docker run --rm -v $HOME/.docker/config.json:/config.json quay.io/skopeo/stable:latest copy --authfile /config.json --multi-arch all docker://${PULL_TAG}-${variant} docker://${STABLE_TAG}-${variant}
done
fi
diff --git a/README.md b/README.md
index 5b67c86c3..35e8cb7e9 100644
--- a/README.md
+++ b/README.md
@@ -4,9 +4,15 @@
# Frigate - NVR With Realtime Object Detection for IP Cameras
+
+
+
+
+\[English\] | [简体中文](https://github.com/blakeblackshear/frigate/blob/dev/README_CN.md)
+
A complete and local NVR designed for [Home Assistant](https://www.home-assistant.io) with AI object detection. Uses OpenCV and Tensorflow to perform realtime object detection locally for IP cameras.
-Use of a [Google Coral Accelerator](https://coral.ai/products/) is optional, but highly recommended. The Coral will outperform even the best CPUs and can process 100+ FPS with very little overhead.
+Use of a GPU or AI accelerator such as a [Google Coral](https://coral.ai/products/) or [Hailo](https://hailo.ai/) is highly recommended. AI accelerators will outperform even the best CPUs with very little overhead.
- Tight integration with Home Assistant via a [custom component](https://github.com/blakeblackshear/frigate-hass-integration)
- Designed to minimize resource use and maximize performance by only looking for objects when and where it is necessary
@@ -30,21 +36,33 @@ If you would like to make a donation to support development, please use [Github
## Screenshots
### Live dashboard
+
+
+
разпознаване на {{cameraName}}, проверете лог файловете за грешки",
+ "title": "Потокът е офлайн"
+ },
+ "submitFrigatePlus": {
+ "title": "Да се изпрати ли този кадър към Frigate+?",
+ "submit": "Изпрати"
+ },
+ "noPreviewFound": "Не е намерен предварителен преглед",
+ "noRecordingsFoundForThisTime": "За това време не са намерени записи",
+ "livePlayerRequiredIOSVersion": "За този тип поток на живо се изисква iOS 17.1 или по-нова версия.",
+ "cameraDisabled": "Камерата е изключена",
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "Успешно изпратен кадър към Frigate+"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "Неуспешно изпратен кадър към Frigate+"
+ }
+ }
+}
diff --git a/web/public/locales/bg/objects.json b/web/public/locales/bg/objects.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/bg/objects.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/bg/views/configEditor.json b/web/public/locales/bg/views/configEditor.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/bg/views/configEditor.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/bg/views/events.json b/web/public/locales/bg/views/events.json
new file mode 100644
index 000000000..c355c8bec
--- /dev/null
+++ b/web/public/locales/bg/views/events.json
@@ -0,0 +1,13 @@
+{
+ "timeline.aria": "Избери хронология",
+ "timeline": "Хронология",
+ "calendarFilter": {
+ "last24Hours": "Последните 24 часа"
+ },
+ "events": {
+ "label": "Събития",
+ "aria": "Избери събития",
+ "noFoundForTimePeriod": "Няма намерени събития за този времеви период."
+ },
+ "allCameras": "Всички камери"
+}
diff --git a/web/public/locales/bg/views/explore.json b/web/public/locales/bg/views/explore.json
new file mode 100644
index 000000000..ab04d4746
--- /dev/null
+++ b/web/public/locales/bg/views/explore.json
@@ -0,0 +1,12 @@
+{
+ "details": {
+ "item": {
+ "tips": {
+ "mismatch_one": "{{count}} недостъпен обект беше открит и включен в този елемент за преглед. Тези обекти или не са квалифицирани като предупреждение или откриване, или вече са били изчистени/изтрити.",
+ "mismatch_other": "{{count}} недостъпни обекта бяха открити и включени в този елемент за преглед. Тези обекти или не са квалифицирани като предупреждение или откриване, или вече са били изчистени/изтрити."
+ }
+ }
+ },
+ "trackedObjectsCount_one": "{{count}} проследен обект ",
+ "trackedObjectsCount_other": "{{count}} проследени обекта "
+}
diff --git a/web/public/locales/bg/views/exports.json b/web/public/locales/bg/views/exports.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/bg/views/exports.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/bg/views/faceLibrary.json b/web/public/locales/bg/views/faceLibrary.json
new file mode 100644
index 000000000..a461ee3df
--- /dev/null
+++ b/web/public/locales/bg/views/faceLibrary.json
@@ -0,0 +1,14 @@
+{
+ "deleteFaceAttempts": {
+ "desc_one": "Сигурни ли сте, че искате да изтриете {{count}} лице? Това действие не може да бъде отменено.",
+ "desc_other": "Сигурни ли сте, че искате да изтриете {{count}} лица? Това действие не може да бъде отменено."
+ },
+ "toast": {
+ "success": {
+ "deletedFace_one": "Успешно изтрито {{count}} лице.",
+ "deletedFace_other": "Успешно изтрити {{count}} лица.",
+ "deletedName_one": "{{count}} лице бе изтрито успешно.",
+ "deletedName_other": "{{count}} лица бяха изтрити успешно."
+ }
+ }
+}
diff --git a/web/public/locales/bg/views/live.json b/web/public/locales/bg/views/live.json
new file mode 100644
index 000000000..c1b6ac1dc
--- /dev/null
+++ b/web/public/locales/bg/views/live.json
@@ -0,0 +1,67 @@
+{
+ "stream": {
+ "playInBackground": {
+ "tips": "Активирайте тази опция, за да продължите поточното предаване, когато плейърът е скрит."
+ }
+ },
+ "cameraAudio": {
+ "enable": "Включи звука на камерата",
+ "disable": "Изключи звука на камерата"
+ },
+ "twoWayTalk": {
+ "enable": "Включи двупосочен разговор",
+ "disable": "Изключи двупосочен разговор"
+ },
+ "ptz": {
+ "move": {
+ "clickMove": {
+ "enable": "Включи кликване за преместване",
+ "disable": "Изключи кликване за преместване"
+ }
+ }
+ },
+ "muteCameras": {
+ "enable": "Заглушаване на всички камери",
+ "disable": "Включване на звука на всички камери"
+ },
+ "recording": {
+ "enable": "Включи запис",
+ "disable": "Изключи запис"
+ },
+ "snapshots": {
+ "enable": "Включи моментни снимки",
+ "disable": "Изключи моментни снимки"
+ },
+ "audioDetect": {
+ "enable": "Включи аудио разпознаване",
+ "disable": "Изключи аудио разпознаване"
+ },
+ "camera": {
+ "enable": "Включи камера",
+ "disable": "Изключи камера"
+ },
+ "detect": {
+ "enable": "Включи разпознаване",
+ "disable": "Изключи разпознаване"
+ },
+ "autotracking": {
+ "enable": "Включи автоматично проследяване",
+ "disable": "Изключи автоматично проследяване"
+ },
+ "streamStats": {
+ "enable": "Показване на статистика на потока",
+ "disable": "Скриване на статистиката на потока"
+ },
+ "manualRecording": {
+ "playInBackground": {
+ "desc": "Активирайте тази опция, за да продължите поточното предаване, когато плейърът е скрит."
+ },
+ "showStats": {
+ "desc": "Активирайте тази опция, за да покажете статистиката на потока като наслагване върху канала на камерата."
+ },
+ "recordDisabledTips": "Тъй като записът е изключен или ограничен в конфигурацията за тази камера, ще бъде запазена само моментна снимка."
+ },
+ "cameraSettings": {
+ "cameraEnabled": "Камерата е включена"
+ }
+}
diff --git a/web/public/locales/bg/views/recording.json b/web/public/locales/bg/views/recording.json
new file mode 100644
index 000000000..e600636d4
--- /dev/null
+++ b/web/public/locales/bg/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "filter": "Филтър",
+ "export": "Експорт",
+ "calendar": "Календар",
+ "filters": "Филтри",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "Не е избран валиден времеви диапазон",
+ "endTimeMustAfterStartTime": "Крайното време трябва да бъде след началеният час"
+ }
+ }
+}
diff --git a/web/public/locales/bg/views/search.json b/web/public/locales/bg/views/search.json
new file mode 100644
index 000000000..8f710c14b
--- /dev/null
+++ b/web/public/locales/bg/views/search.json
@@ -0,0 +1,5 @@
+{
+ "button": {
+ "save": "Запазване на търсенето"
+ }
+}
diff --git a/web/public/locales/bg/views/settings.json b/web/public/locales/bg/views/settings.json
new file mode 100644
index 000000000..830e0ffe8
--- /dev/null
+++ b/web/public/locales/bg/views/settings.json
@@ -0,0 +1,16 @@
+{
+ "masksAndZones": {
+ "motionMasks": {
+ "point_one": "{{count}} точка",
+ "point_other": "{{count}} точки"
+ },
+ "objectMasks": {
+ "point_one": "{{count}} точка",
+ "point_other": "{{count}} точки"
+ },
+ "zones": {
+ "point_one": "{{count}} точка",
+ "point_other": "{{count}} точки"
+ }
+ }
+}
diff --git a/web/public/locales/bg/views/system.json b/web/public/locales/bg/views/system.json
new file mode 100644
index 000000000..39c14cb20
--- /dev/null
+++ b/web/public/locales/bg/views/system.json
@@ -0,0 +1,5 @@
+{
+ "stats": {
+ "healthy": "Системата е изправна"
+ }
+}
diff --git a/web/public/locales/ca/audio.json b/web/public/locales/ca/audio.json
new file mode 100644
index 000000000..dba3c5120
--- /dev/null
+++ b/web/public/locales/ca/audio.json
@@ -0,0 +1,429 @@
+{
+ "speech": "Parla",
+ "babbling": "Balbuceig",
+ "yell": "Crit",
+ "whispering": "Xiuxiuejant",
+ "laughter": "Riure",
+ "snicker": "Rialleta",
+ "crying": "Plor",
+ "bellow": "Bram",
+ "sigh": "Suspir",
+ "singing": "Cant",
+ "choir": "Cor",
+ "yodeling": "Cant Tirolès",
+ "chant": "Càntic",
+ "mantra": "Mantra",
+ "child_singing": "Cant Infantil",
+ "synthetic_singing": "Cant Sintètic",
+ "rapping": "Rap",
+ "humming": "Taral·leig",
+ "groan": "Gemec",
+ "grunt": "Grunyo",
+ "whistling": "Xiulet",
+ "wheeze": "Sibilància",
+ "snoring": "Ronc",
+ "gasp": "Jadeig",
+ "cat": "Gat",
+ "dog": "Gos",
+ "animal": "Animal",
+ "bark": "Escorça",
+ "horse": "Cavall",
+ "sheep": "Ovella",
+ "goat": "Cabra",
+ "bird": "Ocell",
+ "mouse": "Ratolí",
+ "keyboard": "Teclat",
+ "vehicle": "Vehicle",
+ "boat": "Vaixell",
+ "car": "Cotxe",
+ "motorcycle": "Motocicleta",
+ "bus": "Autobús",
+ "bicycle": "Bicicleta",
+ "train": "Tren",
+ "skateboard": "Monopatí",
+ "door": "Porta",
+ "hair_dryer": "Assecador de cabell",
+ "sink": "Aigüera",
+ "blender": "Batedora",
+ "toothbrush": "Raspall de dents",
+ "scissors": "Tisores",
+ "clock": "Rellotge",
+ "breathing": "Respiració",
+ "fart": "Pet",
+ "stomach_rumble": "Barbolló d'estómac",
+ "hands": "Mans",
+ "burping": "Eructe",
+ "hiccup": "Singlot",
+ "whoop": "Crit d'alegria",
+ "pant": "Esbufec",
+ "snort": "Esbufec nasal",
+ "cough": "Tos",
+ "throat_clearing": "Carraspeig",
+ "sneeze": "Esternut",
+ "sniff": "Fregit nasal",
+ "run": "Córrer",
+ "shuffle": "Passos arrossegats",
+ "footsteps": "Passos",
+ "chewing": "Masticació",
+ "biting": "Mossegada",
+ "gargling": "Gàrgares",
+ "finger_snapping": "Claqueig de dits",
+ "heartbeat": "Batec del cor",
+ "heart_murmur": "Sospit cardíac",
+ "cheering": "Ovacions",
+ "applause": "Aplaudiments",
+ "clapping": "Cop de mans",
+ "chatter": "Xerrameca",
+ "crowd": "Multitud",
+ "children_playing": "Nens jugant",
+ "pets": "Animals de companyia",
+ "camera": "Càmera",
+ "wild_animals": "Animals salvatges",
+ "heavy_engine": "Motor pesat",
+ "wedding_music": "Música de casament",
+ "yip": "Crit agut",
+ "howl": "Udol",
+ "bow_wow": "Lladruc",
+ "growling": "Grunyit",
+ "whimper_dog": "Gemec de gos",
+ "purr": "Ronroneig",
+ "meow": "Miol",
+ "hiss": "Siseig",
+ "caterwaul": "Udol estrident",
+ "livestock": "Bestiar",
+ "clip_clop": "Clip-clop",
+ "neigh": "Relinxo",
+ "cattle": "Bestiar boví",
+ "moo": "Mugir",
+ "cowbell": "Esquellot",
+ "pig": "Porc",
+ "oink": "Oink",
+ "bleat": "Brama",
+ "fowl": "Au de corral",
+ "chicken": "Pollastre",
+ "cluck": "Cloqueig",
+ "cock_a_doodle_doo": "Quiquiriquí",
+ "turkey": "Gall dindi",
+ "gobble": "Gorgoriteig",
+ "duck": "Ànec",
+ "quack": "Quac",
+ "goose": "Oca",
+ "honk": "Cluc-cluc",
+ "roaring_cats": "Gats que rugen",
+ "roar": "Rugit",
+ "chirp": "Piulet",
+ "squawk": "Xerric",
+ "pigeon": "Colom",
+ "coo": "Arruix",
+ "crow": "Corb",
+ "caw": "Cric",
+ "owl": "Mussol",
+ "hoot": "Ulul",
+ "flapping_wings": "Batuda d’ales",
+ "dogs": "Gossos",
+ "rats": "Rates",
+ "patter": "Repic",
+ "insect": "Insecte",
+ "cricket": "Grill",
+ "mosquito": "Mosquit",
+ "fly": "Mosca",
+ "buzz": "Brunzit",
+ "frog": "Granota",
+ "croak": "Grall",
+ "snake": "Serp",
+ "rattle": "Cascavell",
+ "whale_vocalization": "Vocalització de balena",
+ "music": "Música",
+ "musical_instrument": "Instrument musical",
+ "plucked_string_instrument": "Instrument de corda pinçada",
+ "guitar": "Guitarra",
+ "electric_guitar": "Guitarra elèctrica",
+ "bass_guitar": "Baix",
+ "acoustic_guitar": "Guitarra acústica",
+ "steel_guitar": "Guitarra steel",
+ "tapping": "Tapping",
+ "strum": "Rasgueig",
+ "banjo": "Banjo",
+ "sitar": "Sitar",
+ "mandolin": "Mandolina",
+ "zither": "Cítara",
+ "ukulele": "Ukulele",
+ "piano": "Piano",
+ "electric_piano": "Piano elèctric",
+ "organ": "Orgue",
+ "electronic_organ": "Orgue electrònic",
+ "hammond_organ": "Orgue Hammond",
+ "synthesizer": "Sintetitzador",
+ "sampler": "Sampler",
+ "harpsichord": "Clavicèmbal",
+ "percussion": "Percussió",
+ "drum_kit": "Bateria",
+ "drum_machine": "Caixa de ritmes",
+ "drum": "Tambor",
+ "snare_drum": "Caixa",
+ "rimshot": "Rimshot",
+ "drum_roll": "Rul·lat de tambor",
+ "bass_drum": "Bombo",
+ "timpani": "Timpani",
+ "tabla": "Tabla",
+ "cymbal": "Plat",
+ "hi_hat": "Charles",
+ "wood_block": "Bloc de fusta",
+ "tambourine": "Pandereta",
+ "maraca": "Maraca",
+ "gong": "Gong",
+ "tubular_bells": "Campanes tubulars",
+ "mallet_percussion": "Percussió amb baquetes",
+ "marimba": "Marimba",
+ "glockenspiel": "Carilló",
+ "vibraphone": "Vibràfon",
+ "steelpan": "Steelpan",
+ "orchestra": "Orquestra",
+ "brass_instrument": "Instrument de metall",
+ "french_horn": "Corn francès",
+ "trumpet": "Trompeta",
+ "trombone": "Trombó",
+ "bowed_string_instrument": "Instrument de corda fregada",
+ "string_section": "Secció de corda",
+ "violin": "Violí",
+ "pizzicato": "Pizzicato",
+ "cello": "Violoncel",
+ "double_bass": "Contrabaix",
+ "wind_instrument": "Instrument de vent",
+ "flute": "Flauta",
+ "saxophone": "Saxòfon",
+ "clarinet": "Clarinet",
+ "harp": "Arpa",
+ "bell": "Campana",
+ "church_bell": "Campana d'església",
+ "jingle_bell": "Campaneta",
+ "bicycle_bell": "Timbre de bicicleta",
+ "tuning_fork": "Diapasó",
+ "chime": "Timbre",
+ "wind_chime": "Campanes de vent",
+ "harmonica": "Harmònica",
+ "accordion": "Acordió",
+ "bagpipes": "Gaites",
+ "didgeridoo": "Didgeridoo",
+ "theremin": "Theremin",
+ "singing_bowl": "Bol tibetà",
+ "scratching": "Esgarrapar",
+ "pop_music": "Música pop",
+ "hip_hop_music": "Música Hip-Hop",
+ "beatboxing": "Beatboxing",
+ "rock_music": "Música rock",
+ "heavy_metal": "Heavy Metal",
+ "punk_rock": "Punk Rock",
+ "grunge": "Grunge",
+ "progressive_rock": "Rock progressiu",
+ "rock_and_roll": "Rock and Roll",
+ "psychedelic_rock": "Rock psicodèlic",
+ "rhythm_and_blues": "Rhythm and blues",
+ "soul_music": "Música soul",
+ "reggae": "Reggae",
+ "country": "Country",
+ "swing_music": "Música swing",
+ "bluegrass": "Bluegrass",
+ "funk": "Funk",
+ "folk_music": "Música folk",
+ "middle_eastern_music": "Música d'Orient Mitjà",
+ "jazz": "Jazz",
+ "disco": "Disco",
+ "classical_music": "Música clàssica",
+ "opera": "Òpera",
+ "electronic_music": "Música electrònica",
+ "house_music": "Música house",
+ "techno": "Techno",
+ "dubstep": "Dubstep",
+ "drum_and_bass": "Drum and Bass",
+ "electronica": "Electrònica",
+ "electronic_dance_music": "Música electrònica de ball",
+ "ambient_music": "Música ambient",
+ "trance_music": "Música trance",
+ "music_of_latin_america": "Música d'Amèrica Llatina",
+ "salsa_music": "Música salsa",
+ "flamenco": "Flamenc",
+ "blues": "Blues",
+ "music_for_children": "Música per a nens",
+ "new-age_music": "Música new age",
+ "vocal_music": "Música vocal",
+ "a_capella": "A capella",
+ "music_of_africa": "Música d'Àfrica",
+ "afrobeat": "Afrobeat",
+ "christian_music": "Música cristiana",
+ "gospel_music": "Música gospel",
+ "music_of_asia": "Música d'Àsia",
+ "carnatic_music": "Música carnàtica",
+ "music_of_bollywood": "Música de bollywood",
+ "ska": "Ska",
+ "traditional_music": "Música tradicional",
+ "independent_music": "Música independent",
+ "song": "Cançó",
+ "background_music": "Música de fons",
+ "theme_music": "Música temàtica",
+ "jingle": "Jingle",
+ "soundtrack_music": "Música de banda sonora",
+ "lullaby": "Lullaby",
+ "video_game_music": "Música de videojocs",
+ "christmas_music": "Música nadalenca",
+ "dance_music": "Música dance",
+ "happy_music": "Música alegre",
+ "sad_music": "Música trista",
+ "tender_music": "Música tendra",
+ "exciting_music": "Música emocionant",
+ "angry_music": "Música enfadada",
+ "scary_music": "Música de por",
+ "wind": "Vent",
+ "wind_noise": "Soroll del vent",
+ "thunderstorm": "Tempesta",
+ "thunder": "Tro",
+ "water": "Aigua",
+ "rain": "Pluja",
+ "raindrop": "Gota de pluja",
+ "rain_on_surface": "Pluja en superfície",
+ "stream": "Rierol",
+ "waterfall": "Cascada",
+ "ocean": "Oceà",
+ "waves": "Ones",
+ "steam": "Vapor",
+ "fire": "Foc",
+ "sailboat": "Veler",
+ "rowboat": "Barca de rems",
+ "ship": "Vaixell",
+ "motor_vehicle": "Vehicle de motor",
+ "car_alarm": "Alarma del cotxe",
+ "car_passing_by": "Cotxe passant",
+ "race_car": "Cotxe de curses",
+ "truck": "Camió",
+ "air_brake": "Fre d'aire",
+ "air_horn": "Bocina d'aire",
+ "ice_cream_truck": "Camió de gelats",
+ "emergency_vehicle": "Vehicle d'emergència",
+ "police_car": "Cotxe de policia",
+ "ambulance": "Ambulància",
+ "fire_engine": "Camió de bombers",
+ "traffic_noise": "Soroll de trànsit",
+ "rail_transport": "Transport ferroviari",
+ "train_whistle": "Xiulet de tren",
+ "train_horn": "Bocina de tren",
+ "railroad_car": "Vagó de tren",
+ "subway": "Metro",
+ "aircraft": "Aeronau",
+ "aircraft_engine": "Motor d'aeronau",
+ "propeller": "Hèlix",
+ "helicopter": "Helicòpter",
+ "fixed-wing_aircraft": "Aeronau d'Ala Fixa",
+ "engine": "Motor",
+ "light_engine": "Motor lleuger",
+ "dental_drill's_drill": "Trepant dental",
+ "lawn_mower": "Talla-gespa",
+ "chainsaw": "Motoserra",
+ "medium_engine": "Motor mitjà",
+ "engine_starting": "Arranc del motor",
+ "idling": "Ralentí",
+ "accelerating": "Accelerant",
+ "doorbell": "Timbre",
+ "ding-dong": "Ding-dong",
+ "sliding_door": "Porta corredissa",
+ "slam": "Cop de porta",
+ "knock": "Toc",
+ "tap": "Toc suau",
+ "squeak": "Grinyol",
+ "cupboard_open_or_close": "Obertura o tancament d'armari",
+ "drawer_open_or_close": "Obertura o tancament de calaix",
+ "dishes": "Plats",
+ "cutlery": "Coberteria",
+ "rustling_leaves": "Sons de fulles",
+ "gurgling": "Borbolleig",
+ "crackle": "Cremoreig",
+ "motorboat": "Llanxa a motor",
+ "toot": "Botzinada",
+ "skidding": "Derrapada",
+ "reversing_beeps": "Bips de marxa enrere",
+ "jet_engine": "Motor a reacció",
+ "train_wheels_squealing": "Xiulet de rodes de tren",
+ "engine_knocking": "Cop de motor",
+ "chopping": "Tallant",
+ "frying": "Fregint",
+ "electric_shaver": "Afeitadora elèctrica",
+ "shuffling_cards": "Barrejar cartes",
+ "alarm": "Alarma",
+ "alarm_clock": "Despertador",
+ "siren": "Sirena",
+ "buzzer": "Brunzidor",
+ "gears": "Engranatges",
+ "pulleys": "Politges",
+ "glass": "Vidre",
+ "chop": "Tall",
+ "splinter": "Astella",
+ "scream": "Crit",
+ "field_recording": "Enregistrament de camp",
+ "tire_squeal": "Xiulet de rodes",
+ "explosion": "Explosió",
+ "wood": "Fusta",
+ "crack": "Esquerda",
+ "air_conditioning": "Aire condicionat",
+ "tick-tock": "Tic-tac",
+ "sewing_machine": "Màquina de cosir",
+ "writing": "Escrivint",
+ "telephone": "Telèfon",
+ "environmental_noise": "Soroll ambiental",
+ "zipper": "Cremallera",
+ "smoke_detector": "Detector de fums",
+ "sound_effect": "Efecte sonor",
+ "microwave_oven": "Forn microones",
+ "water_tap": "Aixeta d'aigua",
+ "toilet_flush": "Cisterna del vàter",
+ "electric_toothbrush": "Raspall de dents elèctric",
+ "vacuum_cleaner": "Aspiradora",
+ "keys_jangling": "Claus repicant",
+ "bathtub": "Banyera",
+ "coin": "Moneda",
+ "typing": "Mecanografia",
+ "computer_keyboard": "Teclat d'ordinador",
+ "telephone_dialing": "Marcatge telefònic",
+ "dial_tone": "To de marcatge",
+ "telephone_bell_ringing": "Timbre del telèfon sonant",
+ "typewriter": "Màquina d'escriure",
+ "ringtone": "To de trucada",
+ "busy_signal": "Senyal d'ocupat",
+ "fire_alarm": "Alarma d'incendis",
+ "civil_defense_siren": "Sirena de defensa civil",
+ "foghorn": "Bocina de boira",
+ "whistle": "Xiulet",
+ "steam_whistle": "Xiulet de vapor",
+ "mechanical_fan": "Ventall mecànic",
+ "cash_register": "Caixa registradora",
+ "single-lens_reflex_camera": "Càmera reflex de lent fixa",
+ "mechanisms": "Mecanismes",
+ "ratchet": "Trinquet",
+ "tick": "Tic",
+ "printer": "Impressora",
+ "tools": "Eines",
+ "hammer": "Martell",
+ "jackhammer": "Martell neumàtic",
+ "sawing": "Serratge",
+ "filing": "Llimar",
+ "sanding": "Poliment",
+ "power_tool": "Eina elèctrica",
+ "machine_gun": "Ametralladora",
+ "cap_gun": "Pistola de joguina",
+ "drill": "Trepant",
+ "gunshot": "Tret",
+ "fusillade": "Ràfega de trets",
+ "fireworks": "Focs artificials",
+ "firecracker": "Petard",
+ "chink": "Clinc",
+ "shatter": "Trencar",
+ "silence": "Silenci",
+ "static": "Estàtic",
+ "white_noise": "Soroll blanc",
+ "burst": "Explosió",
+ "eruption": "Erupció",
+ "boom": "Boom",
+ "television": "Televisió",
+ "radio": "Ràdio",
+ "pink_noise": "Soroll rosa",
+ "power_windows": "Finestres elèctriques",
+ "artillery_fire": "Foc d'artilleria"
+}
diff --git a/web/public/locales/ca/common.json b/web/public/locales/ca/common.json
new file mode 100644
index 000000000..c981fd716
--- /dev/null
+++ b/web/public/locales/ca/common.json
@@ -0,0 +1,265 @@
+{
+ "role": {
+ "title": "Rol",
+ "viewer": "Visualitzador",
+ "admin": "Administrador",
+ "desc": "Els administradors tenen accés complet a totes les característiques de la interfície d'usuari de Frigate. Els visualitzadors es limiten a visualitzar càmeres, articles de revisió i imatges històriques a la interfície d'usuari."
+ },
+ "menu": {
+ "language": {
+ "yue": "粵語 (Cantonès)",
+ "zhCN": "简体中文 (Xinès simplificat)",
+ "hi": "हिन्दी (Hindi)",
+ "fr": "Français (Francès)",
+ "ar": "العربية (Àrab)",
+ "de": "Deutsch (Alemany)",
+ "sv": "Svenska (Suec)",
+ "cs": "Čeština (Txec)",
+ "nb": "Norsk Bokmål (Noruec Bokmål)",
+ "ko": "한국어 (Coreà)",
+ "vi": "Tiếng Việt (Vietnamita)",
+ "fa": "فارسی (Persa)",
+ "hu": "Magyar (Hongarès)",
+ "fi": "Suomi (Finlandès)",
+ "en": "English (Anglès)",
+ "pt": "Português (Portuguès)",
+ "ja": "日本語 (Japonès)",
+ "es": "Español (Espanyol)",
+ "withSystem": {
+ "label": "Utilitzeu la configuració del sistema per a l'idioma"
+ },
+ "tr": "Türkçe (Turc)",
+ "it": "Italiano (Italià)",
+ "he": "עברית (Hebreu)",
+ "el": "Ελληνικά (Grec)",
+ "ro": "Română (Romanès)",
+ "nl": "Nederlands (Holandès)",
+ "pl": "Polski (Polonès)",
+ "uk": "Українська (Ucraïnès)",
+ "da": "Dansk (Danès)",
+ "sk": "Slovenčina (Eslovac)",
+ "ru": "Русский (Rus)",
+ "th": "ไทย (Tailandès)",
+ "ca": "Català (Catalan)"
+ },
+ "system": "Sistema",
+ "systemMetrics": "Mètriques del sistema",
+ "configuration": "Configuració",
+ "systemLogs": "Registres del sistema",
+ "configurationEditor": "Editor de configuració",
+ "languages": "Idiomes",
+ "settings": "Opcions",
+ "darkMode": {
+ "light": "Clar",
+ "dark": "Fosc",
+ "withSystem": {
+ "label": "Utilitzeu la configuració del sistema per al mode clar o fosc"
+ },
+ "label": "Mode fosc"
+ },
+ "withSystem": "Sistema",
+ "appearance": "Aspecte",
+ "theme": {
+ "blue": "Blau",
+ "green": "Verd",
+ "nord": "Nord",
+ "red": "Vermell",
+ "default": "Per defecte",
+ "highcontrast": "Contrast Alt",
+ "label": "Tema"
+ },
+ "help": "Ajuda",
+ "documentation": {
+ "title": "Documentació",
+ "label": "Documentació de Frigate"
+ },
+ "restart": "Reinicia Frigate",
+ "live": {
+ "title": "Directe",
+ "allCameras": "Totes les càmeres",
+ "cameras": {
+ "title": "Càmeres",
+ "count_one": "{{count}} Càmera",
+ "count_many": "{{count}} Càmeres",
+ "count_other": "{{count}} Càmeres"
+ }
+ },
+ "review": "Revisió",
+ "explore": "Explora",
+ "export": "Exportar",
+ "uiPlayground": "Zona de proves de la interfície d'usuari",
+ "faceLibrary": "Biblioteca de cares",
+ "user": {
+ "title": "Usuari",
+ "setPassword": "Estableix Contrasenya",
+ "account": "Compte",
+ "anonymous": "Anònim",
+ "logout": "Tanca la sessió",
+ "current": "Usuari actual: {{user}}"
+ }
+ },
+ "pagination": {
+ "previous": {
+ "label": "Ves a pàgina anterior",
+ "title": "Anterior"
+ },
+ "next": {
+ "label": "Ves a pàgina següent",
+ "title": "Següent"
+ },
+ "more": "Més pàgines",
+ "label": "paginació"
+ },
+ "time": {
+ "untilForTime": "Fins les {{time}}",
+ "untilForRestart": "Fins que Frigate es reiniciï.",
+ "untilRestart": "Fins que es reiniciï",
+ "ago": "Fa {{timeAgo}}",
+ "justNow": "Ara mateix",
+ "today": "Avui",
+ "yesterday": "Ahir",
+ "last7": "Últims 7 dies",
+ "last14": "Últims 14 dies",
+ "last30": "Últims 30 dies",
+ "thisWeek": "Aquesta setmana",
+ "lastWeek": "La setmana passada",
+ "thisMonth": "Aquest mes",
+ "lastMonth": "El mes passat",
+ "5minutes": "5 minuts",
+ "10minutes": "10 minuts",
+ "30minutes": "30 minuts",
+ "1hour": "1 hora",
+ "12hours": "12 hores",
+ "24hours": "24 hores",
+ "pm": "pm",
+ "am": "am",
+ "yr": "{{time}}any",
+ "year_one": "{{time}} any",
+ "year_many": "{{time}} anys",
+ "year_other": "{{time}} anys",
+ "mo": "{{time}}mes",
+ "month_one": "{{time}} mes",
+ "month_many": "{{time}} mesos",
+ "month_other": "{{time}} mesos",
+ "h": "{{time}}h",
+ "d": "{{time}}d",
+ "day_one": "{{time}} dia",
+ "day_many": "{{time}} dies",
+ "day_other": "{{time}} dies",
+ "hour_one": "{{time}} hora",
+ "hour_many": "{{time}} hores",
+ "hour_other": "{{time}} hores",
+ "m": "{{time}} m",
+ "minute_one": "{{time}} minut",
+ "minute_many": "{{time}} minuts",
+ "minute_other": "{{time}} minuts",
+ "s": "{{time}}s",
+ "second_one": "{{time}} segon",
+ "second_many": "{{time}} segons",
+ "second_other": "{{time}} segons",
+ "formattedTimestamp": {
+ "12hour": "MMM d, h::mm::ss aaa",
+ "24hour": "MMM d, HH:mm:ss"
+ },
+ "formattedTimestampMonthDayYear": {
+ "24hour": "MMM d, yyyy",
+ "12hour": "MMM d, yyyy"
+ },
+ "formattedTimestampMonthDay": "MMM d",
+ "formattedTimestampFilename": {
+ "12hour": "MM-dd-yy-h-mm-ss-a",
+ "24hour": "MM-dd-yy-HH-mm-ss"
+ },
+ "formattedTimestamp2": {
+ "12hour": "MM/dd h:mm:ssa",
+ "24hour": "d MMM HH:mm:ss"
+ },
+ "formattedTimestampHourMinute": {
+ "12hour": "h:mm aaa",
+ "24hour": "HH:mm"
+ },
+ "formattedTimestampHourMinuteSecond": {
+ "24hour": "HH:mm:ss",
+ "12hour": "h:mm:ss aaa"
+ },
+ "formattedTimestampMonthDayHourMinute": {
+ "12hour": "MMM d, h:mm aaa",
+ "24hour": "MMM d, HH:mm"
+ },
+ "formattedTimestampMonthDayYearHourMinute": {
+ "12hour": "MMM d yyyy, h:mm aaa",
+ "24hour": "MMM d yyyy, HH:mm"
+ }
+ },
+ "unit": {
+ "speed": {
+ "mph": "mph",
+ "kph": "km/h"
+ },
+ "length": {
+ "feet": "peus",
+ "meters": "metres"
+ }
+ },
+ "label": {
+ "back": "Torna enrere"
+ },
+ "button": {
+ "apply": "Aplicar",
+ "reset": "Restablir",
+ "done": "Fet",
+ "disabled": "Deshabilitat",
+ "disable": "Deshabilitar",
+ "save": "Guardar",
+ "copy": "Copiar",
+ "back": "Enrere",
+ "pictureInPicture": "Imatge en Imatge",
+ "twoWayTalk": "Xerrada bidireccional",
+ "cameraAudio": "Àudio de la càmera",
+ "no": "No",
+ "yes": "Sí",
+ "download": "Descarregar",
+ "info": "Informació",
+ "suspended": "Suspès",
+ "export": "Exportar",
+ "deleteNow": "Eliminar ara",
+ "next": "Següent",
+ "saving": "Guardant…",
+ "cancel": "Cancelar",
+ "edit": "Editar",
+ "copyCoordinates": "Copiar coordenades",
+ "delete": "Elimina",
+ "unsuspended": "Reactivar",
+ "play": "Reproduir",
+ "close": "Tancar",
+ "history": "Historial",
+ "fullscreen": "Pantalla completa",
+ "exitFullscreen": "Sortir de pantalla completa",
+ "on": "ENCÈS",
+ "off": "APAGAT",
+ "unselect": "Desseleccionar",
+ "enable": "Habilitar",
+ "enabled": "Habilitat"
+ },
+ "toast": {
+ "copyUrlToClipboard": "URL copiada al porta-retalls.",
+ "save": {
+ "title": "Guardar",
+ "error": {
+ "title": "No s'han pogut guardar els canvis de configuració: {{errorMessage}}",
+ "noMessage": "No s'han pogut guardar els canvis de configuració"
+ }
+ }
+ },
+ "accessDenied": {
+ "desc": "No teniu permís per veure aquesta pàgina.",
+ "documentTitle": "Accés Denegat - Frigate",
+ "title": "Accés Denegat"
+ },
+ "notFound": {
+ "documentTitle": "No s'ha trobat - Frigate",
+ "title": "404",
+ "desc": "Pàgina no trobada"
+ },
+ "selectItem": "Selecciona {{item}}"
+}
diff --git a/web/public/locales/ca/components/auth.json b/web/public/locales/ca/components/auth.json
new file mode 100644
index 000000000..5d4b413a6
--- /dev/null
+++ b/web/public/locales/ca/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "user": "Nom d'usuari",
+ "password": "Contrasenya",
+ "login": "Iniciar sessió",
+ "errors": {
+ "usernameRequired": "El nom d'usuari és obligatori",
+ "passwordRequired": "La contrasenya és obligatoria",
+ "rateLimit": "S'ha superat el límit d'intents. Torna-ho a provar més tard.",
+ "loginFailed": "Error en l'inici de sessió",
+ "unknownError": "Error desconegut. Comproveu els registres.",
+ "webUnknownError": "Error desconegut. Comproveu els registres de la consola."
+ }
+ }
+}
diff --git a/web/public/locales/ca/components/camera.json b/web/public/locales/ca/components/camera.json
new file mode 100644
index 000000000..b93a84a5f
--- /dev/null
+++ b/web/public/locales/ca/components/camera.json
@@ -0,0 +1,86 @@
+{
+ "group": {
+ "add": "Afegir grup de càmeres",
+ "edit": "Editar grup de càmeres",
+ "delete": {
+ "label": "Eliminar grup de càmeres",
+ "confirm": {
+ "title": "Confirmar eliminació",
+ "desc": "Estàs segur que vols eliminar el grup de càmeres {{name}}?"
+ }
+ },
+ "name": {
+ "placeholder": "Introduïu un nom…",
+ "errorMessage": {
+ "mustLeastCharacters": "El nom del grup de càmeres ha de ser de com a mínim 2 caràcters.",
+ "exists": "El nom del grup de càmeres ja existeix.",
+ "nameMustNotPeriod": "El nom del grup de càmeres no pot contenir un punt.",
+ "invalid": "Nom del grup de càmeres no vàlid."
+ },
+ "label": "Nom"
+ },
+ "cameras": {
+ "label": "Càmeres",
+ "desc": "Seleccioneu càmeres per a aquest grup."
+ },
+ "camera": {
+ "setting": {
+ "label": "Paràmetres de transmissió de la càmera",
+ "title": "Paràmetres de transmissió de {{cameraName}}",
+ "audioIsAvailable": "L'àudio està disponible per a aquesta transmissió",
+ "audioIsUnavailable": "L'audio no està disponible per a aquesta transmissió",
+ "audio": {
+ "tips": {
+ "document": "Llegir la documentació · ",
+ "title": "L'audio ha de venir de la càmera i estar configurat a go2rtc per a aquesta transmissió."
+ }
+ },
+ "streamMethod": {
+ "label": "Mètode de transmissió",
+ "method": {
+ "noStreaming": {
+ "label": "Sense transmissió",
+ "desc": "Les imatges de la càmera només s'actualitzaran una vegada per minut i no hi haurà transmissió en viu."
+ },
+ "smartStreaming": {
+ "label": "Transmissió intel·ligent (recomanat)",
+ "desc": "La transmissió intel·ligent actualitzarà la imatge de la teva càmera una vegada per minut quan no es detecti activitat per a conservar amplada de banda i recursos. Quan es detecti activitat, la imatge canviarà automàticament a una transmissió en directe."
+ },
+ "continuousStreaming": {
+ "label": "Transmissió contínua",
+ "desc": {
+ "title": "La imatge de la càmera sempre serà una transmissió en directe quan estigui visible al panell de control, tot i que no hi hagi cap activitat detectada.",
+ "warning": "La transmissió contínua pot provocar problemes d'ús elevat d'amplada de banda i rendiment. Feu servir amb precaució."
+ }
+ }
+ },
+ "placeholder": "Tria un mètode de transmissió"
+ },
+ "compatibilityMode": {
+ "label": "Mode de compatibilitat",
+ "desc": "Activeu aquesta opció només si la transmissió en directe de la càmera mostra artefactes de color i té una línia diagonal a la part dreta de la imatge."
+ },
+ "desc": "Cambia les opcions de transmissió en viu del panell de control d'aquest grup de càmeres. Aquest paràmetres son específics del dispositiu/navegador.",
+ "stream": "Transmissió",
+ "placeholder": "Seleccionar una transmissió"
+ }
+ },
+ "success": "El grup de càmeres ({{name}}) ha estat guardat.",
+ "icon": "Icona",
+ "label": "Grups de càmeres"
+ },
+ "debug": {
+ "options": {
+ "title": "Opcions",
+ "showOptions": "Mostra opcions",
+ "hideOptions": "Amaga opcions",
+ "label": "Paràmetres"
+ },
+ "boundingBox": "Caixa delimitadora",
+ "timestamp": "Marca temporal",
+ "zones": "Zones",
+ "mask": "Màscara",
+ "motion": "Moviment",
+ "regions": "Regions"
+ }
+}
diff --git a/web/public/locales/ca/components/dialog.json b/web/public/locales/ca/components/dialog.json
new file mode 100644
index 000000000..b2759e896
--- /dev/null
+++ b/web/public/locales/ca/components/dialog.json
@@ -0,0 +1,114 @@
+{
+ "restart": {
+ "title": "Estàs segur que vols reiniciar Frigate?",
+ "button": "Reiniciar",
+ "restarting": {
+ "title": "Frigate s'està reiniciant",
+ "content": "Aquesta pàgina es tornarà a carregar d'aquí a {{countdown}} segons.",
+ "button": "Forçar la recàrrega ara"
+ }
+ },
+ "explore": {
+ "plus": {
+ "submitToPlus": {
+ "label": "Enviar a Frigate+",
+ "desc": "Els objectes a les ubicacions que voleu evitar no són falsos positius. Enviar-los com a falsos positius confondrà el model."
+ },
+ "review": {
+ "question": {
+ "label": "Confirmar aquesta etiqueta per a Frigate Plus",
+ "ask_a": "Aquest objecte és un {{label}}?",
+ "ask_an": "Aquest objecte és un {{label}}?",
+ "ask_full": "Aquest objecte és un {{untranslatedLabel}} ({{translatedLabel}})?"
+ },
+ "state": {
+ "submitted": "Enviat"
+ }
+ }
+ },
+ "video": {
+ "viewInHistory": "Veure a l'historial"
+ }
+ },
+ "export": {
+ "time": {
+ "custom": "Personalitzat",
+ "fromTimeline": "Seleccionar a la línia de temps",
+ "lastHour_one": "L'última hora",
+ "lastHour_many": "Les últimes {{count}} hores",
+ "lastHour_other": "Les últimes {{count}} hores",
+ "start": {
+ "title": "Hora d'inci",
+ "label": "Seleccionar una hora d'inici"
+ },
+ "end": {
+ "title": "Hora de finalització",
+ "label": "Seleccionar una hora de finalització"
+ }
+ },
+ "name": {
+ "placeholder": "Nom de l'exportació"
+ },
+ "select": "Seleccionar",
+ "export": "Exportar",
+ "selectOrExport": "Seleccionar o exportar",
+ "toast": {
+ "success": "Exportació inciada amb èxit. Pots veure l'arxiu a la carpeta /exports.",
+ "error": {
+ "endTimeMustAfterStartTime": "L'hora de finalització ha de ser posterior a l'hora d'inici",
+ "noVaildTimeSelected": "No s'ha seleccionat un rang de temps vàlid",
+ "failed": "No s'ha pogut inciar l'exportació: {{error}}"
+ }
+ },
+ "fromTimeline": {
+ "saveExport": "Guardar exportació",
+ "previewExport": "Previsualitzar exportació"
+ }
+ },
+ "streaming": {
+ "label": "Transmissió",
+ "restreaming": {
+ "disabled": "La retransmissió no està habilitada per a aquesta càmera.",
+ "desc": {
+ "title": "Configurar go2rtc per a àudio i opcions addicionals de visualització en directe per a aquesta càmera.",
+ "readTheDocumentation": "Llegir la documentació"
+ }
+ },
+ "showStats": {
+ "label": "Mostrar les estadístiques de la transmissió",
+ "desc": "Activa aquesta opció per a mostrar les estadístiques de la transmissió superposades a la imatge de la càmera."
+ },
+ "debugView": "Vista de depuració"
+ },
+ "search": {
+ "saveSearch": {
+ "label": "Desar la cerca",
+ "desc": "Propocioneu un nom per a aquesta cerca desada.",
+ "placeholder": "Introduïu un nom per a la vostra cerca",
+ "success": "La cerca {{searchName}} ha sigut desada.",
+ "overwrite": "{{searchName}} ja existeix. Si deseu, es sobreescriurà el valor existent.",
+ "button": {
+ "save": {
+ "label": "Desar aquesta cerca"
+ }
+ }
+ }
+ },
+ "recording": {
+ "button": {
+ "deleteNow": "Suprimir ara",
+ "export": "Exportar",
+ "markAsReviewed": "Marcar com a revisat"
+ },
+ "confirmDelete": {
+ "title": "Confirmar la supressió",
+ "desc": {
+ "selected": "Esteu segurs que voleu suprimir tots els vídeos enregistrats associats a aquest element de revisió?detect de la càmera {{cameraName}}. Comprova els registres d’errors"
+ },
+ "cameraDisabled": "La càmera està desactivada",
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "Fotograma enviat correctament a Frigate+"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "Error al enviar fotograma a Frigate+"
+ }
+ }
+}
diff --git a/web/public/locales/ca/objects.json b/web/public/locales/ca/objects.json
new file mode 100644
index 000000000..253e27540
--- /dev/null
+++ b/web/public/locales/ca/objects.json
@@ -0,0 +1,120 @@
+{
+ "person": "Persona",
+ "bicycle": "Bicicleta",
+ "car": "Cotxe",
+ "motorcycle": "Motocicleta",
+ "airplane": "Avió",
+ "boat": "Vaixell",
+ "traffic_light": "Llum del trànsit",
+ "fire_hydrant": "Boca d'incendi",
+ "street_sign": "Senyal de trànsit",
+ "stop_sign": "Senyal de stop",
+ "parking_meter": "Parquímetre",
+ "bench": "Banc",
+ "bird": "Ocell",
+ "cat": "Gat",
+ "dog": "Gos",
+ "horse": "Cavall",
+ "sheep": "Ovella",
+ "cow": "Vaca",
+ "elephant": "Elefant",
+ "bear": "Ós",
+ "zebra": "Zebra",
+ "giraffe": "Girafa",
+ "hat": "Barret",
+ "backpack": "Motxilla",
+ "umbrella": "Paraigües",
+ "shoe": "Sabata",
+ "eye_glasses": "Ulleres",
+ "tie": "Corbata",
+ "suitcase": "Maleta",
+ "frisbee": "Frisbee",
+ "skis": "Esquís",
+ "snowboard": "Snowboard",
+ "sports_ball": "Pilota d'esports",
+ "kite": "Estel",
+ "baseball_bat": "Bat de beisbol",
+ "baseball_glove": "Guant de beisbol",
+ "skateboard": "Monopatí",
+ "surfboard": "Taula de surf",
+ "tennis_racket": "Raqueta de tenis",
+ "bottle": "Ampolla",
+ "plate": "Placa",
+ "wine_glass": "Got de vi",
+ "cup": "Copa",
+ "fork": "Forquilla",
+ "knife": "Ganivet",
+ "spoon": "Cullera",
+ "bowl": "Bol",
+ "apple": "Poma",
+ "sandwich": "Sandvitx",
+ "orange": "Taronja",
+ "broccoli": "Bròquil",
+ "carrot": "Pastanaga",
+ "hot_dog": "Frankfurt",
+ "pizza": "Pizza",
+ "donut": "Dònut",
+ "cake": "Pastís",
+ "chair": "Cadira",
+ "couch": "Sofà",
+ "potted_plant": "Planta en test",
+ "bed": "Llit",
+ "mirror": "Mirall",
+ "dining_table": "Taula de menjador",
+ "window": "Finestra",
+ "desk": "Escriptori",
+ "toilet": "Bany",
+ "door": "Porta",
+ "tv": "TV",
+ "mouse": "Ratolí",
+ "remote": "Comandament",
+ "keyboard": "Teclat",
+ "cell_phone": "Telèfon mòbil",
+ "microwave": "Microones",
+ "oven": "Forn",
+ "toaster": "Torradora",
+ "sink": "Aigüera",
+ "refrigerator": "Nevera",
+ "blender": "Batedora",
+ "book": "Llibre",
+ "clock": "Rellotge",
+ "vase": "Gerro",
+ "scissors": "Tisores",
+ "teddy_bear": "Ós de peluix",
+ "hair_dryer": "Assecador de cabell",
+ "toothbrush": "Raspall de dents",
+ "hair_brush": "Raspall de cabell",
+ "vehicle": "Vehicle",
+ "squirrel": "Esquirol",
+ "deer": "Cérvol",
+ "animal": "Animal",
+ "bark": "Escorça",
+ "fox": "Guineu",
+ "goat": "Cabra",
+ "rabbit": "Conill",
+ "raccoon": "Ós rentador",
+ "robot_lawnmower": "Robot tallagespa",
+ "handbag": "Bossa de mà",
+ "banana": "Plàtan",
+ "train": "Tren",
+ "bus": "Autobús",
+ "laptop": "Portàtil",
+ "waste_bin": "Paperera",
+ "face": "Cara",
+ "on_demand": "Sota demanda",
+ "license_plate": "Matrícula",
+ "package": "Paquet",
+ "bbq_grill": "Barbacoa",
+ "amazon": "Amazon",
+ "usps": "USPS",
+ "ups": "UPS",
+ "fedex": "FedEx",
+ "dhl": "DHL",
+ "an_post": "An Post",
+ "purolator": "Purolator",
+ "postnl": "PostNL",
+ "nzpost": "NZPost",
+ "postnord": "PostNord",
+ "dpd": "DPD",
+ "gls": "GLS"
+}
diff --git a/web/public/locales/ca/views/configEditor.json b/web/public/locales/ca/views/configEditor.json
new file mode 100644
index 000000000..8d47ea04c
--- /dev/null
+++ b/web/public/locales/ca/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "documentTitle": "Editor de Configuració - Frigate",
+ "configEditor": "Editor de configuració",
+ "copyConfig": "Copiar configuració",
+ "saveAndRestart": "Desa i reinicia",
+ "saveOnly": "Només desar",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Configuració copiada al porta-retalls."
+ },
+ "error": {
+ "savingError": "Error al desar la configuració"
+ }
+ },
+ "confirm": "Sortir sense desar?"
+}
diff --git a/web/public/locales/ca/views/events.json b/web/public/locales/ca/views/events.json
new file mode 100644
index 000000000..1a219b9c1
--- /dev/null
+++ b/web/public/locales/ca/views/events.json
@@ -0,0 +1,38 @@
+{
+ "detected": "detectat",
+ "alerts": "Alertes",
+ "detections": "Deteccions",
+ "motion": {
+ "label": "Moviment",
+ "only": "Només moviment"
+ },
+ "allCameras": "Totes les càmeres",
+ "empty": {
+ "alert": "Hi ha cap alerta per revisar",
+ "detection": "Hi ha cap detecció per revisar",
+ "motion": "No s'haan trobat dades de moviment"
+ },
+ "timeline": "Línia de temps",
+ "timeline.aria": "Seleccionar línia de temps",
+ "events": {
+ "label": "Esdeveniments",
+ "aria": "Seleccionar esdeveniments",
+ "noFoundForTimePeriod": "No s'han trobat esdeveniments per aquest període de temps."
+ },
+ "documentTitle": "Revisió - Frigate",
+ "recordings": {
+ "documentTitle": "Enregistraments - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "Últimes 24 hores"
+ },
+ "markAsReviewed": "Marcar com a revisat",
+ "markTheseItemsAsReviewed": "Marca aquests elements com a revisats",
+ "newReviewItems": {
+ "label": "Veure nous elements de revisió",
+ "button": "Nous elements per revisar"
+ },
+ "camera": "Càmera",
+ "selected_one": "{{count}} seleccionats",
+ "selected_other": "{{count}} seleccionats"
+}
diff --git a/web/public/locales/ca/views/explore.json b/web/public/locales/ca/views/explore.json
new file mode 100644
index 000000000..bedd5f721
--- /dev/null
+++ b/web/public/locales/ca/views/explore.json
@@ -0,0 +1,203 @@
+{
+ "exploreIsUnavailable": {
+ "downloadingModels": {
+ "tips": {
+ "context": "Potser voldreu reindexar les incrustacions dels objectes seguits un cop s'hagin descarregat els models.",
+ "documentation": "Llegir la documentació"
+ },
+ "context": "Frigate està descarregant els models d'embeddings necessaris per a donar suport a la funció de cerca semàntica. Això pot trigar diversos minuts, depenent de la velocitat de la teva connexió de xarxa.",
+ "setup": {
+ "visionModel": "Model de visió",
+ "visionModelFeatureExtractor": "Extractor de característiques del model de visió",
+ "textModel": "Model de text",
+ "textTokenizer": "Tokenitzador de text"
+ },
+ "error": "S'ha produït un error. Comproveu els registres de Frigate."
+ },
+ "embeddingsReindexing": {
+ "context": "Explorar pot ser utilitzat després d’haver completat la reindexació d’objectes rastrejats.",
+ "startingUp": "Iniciant…",
+ "finishingShortly": "Finalitzant en breus",
+ "step": {
+ "thumbnailsEmbedded": "Miniatures integrades: ",
+ "descriptionsEmbedded": "Descripcions integrades: ",
+ "trackedObjectsProcessed": "Objectes processats: "
+ },
+ "estimatedTime": "Temps restant estimat:"
+ },
+ "title": "Explorar no està disponible"
+ },
+ "documentTitle": "Explora - Frigate",
+ "generativeAI": "IA Generativa",
+ "objectLifecycle": {
+ "createObjectMask": "Crear màscara per a l'objecte",
+ "title": "Cicle de vida de l'objecte",
+ "noImageFound": "No s'ha trobat cap imatge per a aquesta marca temporal.",
+ "adjustAnnotationSettings": "Ajustar els paràmetres de les anotacions",
+ "scrollViewTips": "Desplaça't per veure els moments significatius del cicle de vida d'aquest objecte.",
+ "lifecycleItemDesc": {
+ "entered_zone": "{{label}} ha entrat a {{zones}}",
+ "active": "{{label}} s'ha activat",
+ "stationary": "{{label}} ha esdevingut estacionari",
+ "attribute": {
+ "faceOrLicense_plate": "{{attribute}} detectat per a {{label}}",
+ "other": "{{label}} reconegut com a {{attribute}}"
+ },
+ "header": {
+ "zones": "Zones",
+ "ratio": "Proporció",
+ "area": "Àrea"
+ },
+ "heard": "{{label}} escoltat",
+ "external": "{{label}} detectat",
+ "gone": "{{label}} ha marxat",
+ "visible": "{{label}} detectat"
+ },
+ "annotationSettings": {
+ "offset": {
+ "documentation": "Llegir la documentació ",
+ "label": "Desplaçament de l'anotació",
+ "desc": "Aquestes dades provenen de la detecció d'objectes, però se superposen a les imatges d’enregistrament. És poc probable que les dues transmissions estiguin perfectament sincronitzades. Per aquest motiu, la capsa delimitadora i les imatges poden no coincidir exactament. Tanmateix, es pot utilitzar el camp annotation_offset per ajustar-ho.",
+ "tips": "CONSELL: Imagina que hi ha la captura d'un esdeveniment on una persona camina d'esquerra a dreta. Si la caixa delimitadora de l'objecte està constantment a l'esquerra de la persona, llavors el valor s'hauria de disminuir. Si, per contra, la caixa delimitadora està constantment per davant de la persona (a la seva dreta en aquest exemple), llavors el valor s'hauria d'augmentar.",
+ "toast": {
+ "success": "El desplaçament d'anotació per {{camera}} s'ha guardat al fitxer de configuració. Reinicia Frigate per aplicar els canvis."
+ },
+ "millisecondsToOffset": "Mil·lisegons a desplaçar les anotacions de detecció: Per Defecte: 0"
+ },
+ "title": "Paràmetres de les anotacions",
+ "showAllZones": {
+ "title": "Mostra totes les zones",
+ "desc": "Mostra sempre les zones en fotogrames on hi hagin aparegut objectes."
+ }
+ },
+ "carousel": {
+ "next": "Diapositiva següent",
+ "previous": "Diapositiva anterior"
+ },
+ "autoTrackingTips": "Les posicions dels recuadres delimitadors seràn inexactes per a càmeres amb seguiment automàtic.",
+ "count": "{{first}} de {{second}}",
+ "trackedPoint": "Punt seguit"
+ },
+ "exploreMore": "Explora més {{label}} objectes",
+ "trackedObjectDetails": "Detalls de l'objecte rastrejat",
+ "type": {
+ "details": "detalls",
+ "snapshot": "instantània",
+ "video": "vídeo",
+ "object_lifecycle": "cicle de vida de l'objecte"
+ },
+ "details": {
+ "timestamp": "Marca temporal",
+ "item": {
+ "button": {
+ "viewInExplore": "Veure a Explorar",
+ "share": "Comparteix aquest element de revisió"
+ },
+ "toast": {
+ "success": {
+ "updatedSublabel": "Subetiqueta actualitzada amb èxit.",
+ "updatedLPR": "Matrícula actualitzada amb èxit."
+ },
+ "error": {
+ "regenerate": "No s'ha pogut contactar amb {{provider}} per obtenir una nova descripció: {{errorMessage}}",
+ "updatedSublabelFailed": "No s'ha pogut actualitzar la subetiqueta: {{errorMessage}}",
+ "updatedLPRFailed": "No s'ha pogut actualitzar la matrícula: {{errorMessage}}"
+ }
+ },
+ "title": "Revisar detalls de l'element",
+ "desc": "Revisar detalls de l'element",
+ "tips": {
+ "hasMissingObjects": "Ajusta la configuració si vols que Frigate guardi els objectes rastrejat de les seguents etiquetes: {{objects}}"
+ }
+ },
+ "label": "Etiqueta",
+ "topScore": {
+ "label": "Puntuació màxima"
+ },
+ "estimatedSpeed": "Velocitat estimada",
+ "button": {
+ "regenerate": {
+ "title": "Regenerar",
+ "label": "Regenerar descripció d'objecte rastrejat"
+ },
+ "findSimilar": "Cercar similars"
+ },
+ "expandRegenerationMenu": "Amplia el menú de regeneració",
+ "regenerateFromSnapshot": "Regenerar desde instantània",
+ "regenerateFromThumbnails": "Regenerar desde miniatures",
+ "tips": {
+ "descriptionSaved": "Descripció desada amb èxit",
+ "saveDescriptionFailed": "No s'ha pogut actualitzar la descripció: {{errorMessage}}"
+ },
+ "description": {
+ "placeholder": "Descripció de l'objecte rastrejat",
+ "label": "Descripció",
+ "aiTips": "Frigate no sol·licitarà una descripció al teu proveïdor d'intel·ligència artificial generativa fins que el cicle de vida de l'objecte rastrejat hagi acabat."
+ },
+ "objects": "Objectes",
+ "camera": "Càmera",
+ "editSubLabel": {
+ "title": "Editar subetiqueta",
+ "descNoLabel": "Introdueix una nova subetiqueta per a aquest objecte rastrejat",
+ "desc": "Introdueix una nova subetiqueta per a aquesta {{label}}"
+ },
+ "zones": "Zones",
+ "recognizedLicensePlate": "Matrícula reconeguda",
+ "snapshotScore": {
+ "label": "Puntuació d'instantània"
+ },
+ "editLPR": {
+ "title": "Editar matrícula",
+ "descNoLabel": "Introdueix un nou valor de matrícula per a aquest objecte rastrejat",
+ "desc": "Introdueix un nou valor per a la matrícula per aquesta {{label}}"
+ }
+ },
+ "searchResult": {
+ "tooltip": "S'ha identificat {{type}} amb una confiança del {{confidence}}%",
+ "deleteTrackedObject": {
+ "toast": {
+ "success": "L'objectes amb seguiment s'ha suprimit correctament.",
+ "error": "No s'ha pogut suprimir l'objecte rastrejat: {{errorMessage}}"
+ }
+ }
+ },
+ "itemMenu": {
+ "downloadVideo": {
+ "aria": "Descarregar vídeo",
+ "label": "Descarregar vídeo"
+ },
+ "submitToPlus": {
+ "aria": "Enviar a Frigate Plus",
+ "label": "Enviar a Frigate+"
+ },
+ "downloadSnapshot": {
+ "label": "Descarregar instantània",
+ "aria": "Descarregar instantània"
+ },
+ "findSimilar": {
+ "label": "Cercar similars",
+ "aria": "Trobar objectes de seguiment similars"
+ },
+ "viewObjectLifecycle": {
+ "label": "Veure el cicle de vida de l'objecte",
+ "aria": "Mostrar el cicle de vida de l'objecte"
+ },
+ "viewInHistory": {
+ "label": "Veure a l'historial",
+ "aria": "Veure a l'historial"
+ },
+ "deleteTrackedObject": {
+ "label": "Suprimeix aquest objecte rastrejat"
+ }
+ },
+ "noTrackedObjects": "No s'han trobat objectes rastrejats",
+ "dialog": {
+ "confirmDelete": {
+ "title": "Confirmar la supressió"
+ }
+ },
+ "fetchingTrackedObjectsFailed": "Error al obtenir objectes rastrejats: {{errorMessage}}",
+ "trackedObjectsCount_one": "{{count}} objecte rastrejat ",
+ "trackedObjectsCount_many": "{{count}} objectes rastrejats ",
+ "trackedObjectsCount_other": "{{count}} objectes rastrejats "
+}
diff --git a/web/public/locales/ca/views/exports.json b/web/public/locales/ca/views/exports.json
new file mode 100644
index 000000000..dfe5de963
--- /dev/null
+++ b/web/public/locales/ca/views/exports.json
@@ -0,0 +1,17 @@
+{
+ "documentTitle": "Exportar - Frigate",
+ "search": "Buscar",
+ "noExports": "No s'han trobat exportacions",
+ "deleteExport": "Suprimeix l'exportació",
+ "deleteExport.desc": "Estàs segur que vols eliminar {{exportName}}?",
+ "editExport": {
+ "title": "Renombrar exportació",
+ "desc": "Introdueix un nou nom per a aquesta exportació.",
+ "saveExport": "Desar exportació"
+ },
+ "toast": {
+ "error": {
+ "renameExportFailed": "Error al canviar el nom de l’exportació: {{errorMessage}}"
+ }
+ }
+}
diff --git a/web/public/locales/ca/views/faceLibrary.json b/web/public/locales/ca/views/faceLibrary.json
new file mode 100644
index 000000000..356691315
--- /dev/null
+++ b/web/public/locales/ca/views/faceLibrary.json
@@ -0,0 +1,102 @@
+{
+ "selectItem": "Selecciona {{item}}",
+ "details": {
+ "subLabelScore": "Puntuació de la subetiqueta",
+ "scoreInfo": "La puntuació de la subetiqueta és la puntuació ponderada de totes la confidència dels rostres reconeguts, de manera que pot ser diferent de la puntuació que es mostra a la instantània.",
+ "unknown": "Desconegut",
+ "person": "Persona",
+ "faceDesc": "Detalls de l'objecte que ha generat aquest rostre",
+ "timestamp": "Marca temporal",
+ "face": "Detalls del rostre"
+ },
+ "collections": "Col·leccions",
+ "train": {
+ "empty": "No hi ha intents recents de reconeixement de rostres",
+ "title": "Entrenar",
+ "aria": "Seleccionar entrenament"
+ },
+ "description": {
+ "addFace": "Guia per a agregar una nova colecció a la biblioteca de rostres.",
+ "placeholder": "Introduïu un nom per a aquesta col·lecció",
+ "invalidName": "Nom no vàlid. Els noms només poden incloure lletres, números, espais, apòstrofs, guions baixos i guionets."
+ },
+ "documentTitle": "Biblioteca de rostres - Frigate",
+ "uploadFaceImage": {
+ "title": "Puja una imatge del rostre",
+ "desc": "Carregar una imatge per escanejar els rostres i incloure per a {{pageToggle}}"
+ },
+ "createFaceLibrary": {
+ "title": "Crear Col·lecció",
+ "desc": "Crear una nova col·lecció",
+ "new": "Crear un nou rostre",
+ "nextSteps": "Per establir una base sòlida:Caixes de moviment
Es sobreposaran requadres vermells a les àrees del fotograma on actualment s’estigui detectant moviment.
" + }, + "detectorDesc": "Frigate fa servir els teus detectors ({{detectors}}) per a detectar objectes a les imatges de la teva càmera." + }, + "users": { + "table": { + "username": "Nom d'usuari", + "password": "Contrasenya", + "deleteUser": "Suprimir usuari", + "noUsers": "No s'han trobat usuaris.", + "changeRole": "Canviar la funció d’usuari", + "actions": "Accions", + "role": "Rol" + }, + "toast": { + "error": { + "deleteUserFailed": "No s'ha pogut eliminar l'usuari: {{errorMessage}}", + "roleUpdateFailed": "No s'ha pogut actualitzar la funció: {{errorMessage}}", + "setPasswordFailed": "Error en guardar la contrasenya: {{errorMessage}}", + "createUserFailed": "No s'ha pogut crear l'usuari: {{errorMessage}}" + }, + "success": { + "deleteUser": "L'usuari {{user}} s'ha suprimit amb èxit", + "createUser": "L'Usuari {{user}} s'ha creat amb èxit", + "updatePassword": "Contrasenya actualitzada amb èxit.", + "roleUpdated": "Funció actualitzada per {{user}}" + } + }, + "dialog": { + "form": { + "user": { + "title": "Nom d'usuari", + "placeholder": "Introdueix el nom d'usuari", + "desc": "Només es permeten lletres, números, punts i guions baixos." + }, + "password": { + "confirm": { + "placeholder": "Confirma contrasenya", + "title": "Confirma contrasenya" + }, + "strength": { + "title": "Seguretat de la contrasenya: ", + "weak": "Dèbil", + "strong": "Fort", + "veryStrong": "Molt forta", + "medium": "Mitjana" + }, + "notMatch": "Les contrasenyes no coincideixen", + "match": "Les contrasenyes coincideixen", + "placeholder": "Introdueix la contrasenya", + "title": "Contrasenya" + }, + "newPassword": { + "title": "Nova contrasenya", + "placeholder": "Introduïu una nova contrasenya", + "confirm": { + "placeholder": "Re-entrar contrasenya nova" + } + }, + "usernameIsRequired": "El nom d'usuari és obligatori", + "passwordIsRequired": "La contrasenya és obligatoria" + }, + "passwordSetting": { + "updatePassword": "Contrasenya actualitzada per {{username}}", + "setPassword": "Estableix Contrasenya", + "cannotBeEmpty": "La contrasenya no pot ser buida", + "doNotMatch": "Les contrasenyes no coincideixen", + "desc": "Crea un nova contrasenya segura per protegir aquest compte." + }, + "deleteUser": { + "title": "Suprimir usuari", + "warn": "Estàs segur que vols suprimir {{username}}?", + "desc": "Aquesta acció no es pot desfer. Això eliminarà permanentment el compte d'usuari i suprimirà totes les dades associades." + }, + "changeRole": { + "roleInfo": { + "viewer": "Visualitzador", + "admin": "Administrador", + "adminDesc": "Accés complet a totes les funcionalitats.", + "intro": "Selecciona el rol adequat per a aquest usuari:", + "viewerDesc": "Limitat només a panells en directe, revisió, exporació i exportació." + }, + "title": "Canviar la funció d’usuari", + "desc": "Actualitzar permisos per a {{username}}", + "select": "Seleccioneu un paper" + }, + "createUser": { + "title": "Crear un nou usuari", + "confirmPassword": "Siusplau, confirma la contrasenya", + "usernameOnlyInclude": "El nom d'usuari només pot contenir lletres, números, . o _", + "desc": "Afegeix un nou compte d'usuari i especifica un rol per accedir a àrees de la interfície de Frigate." + } + }, + "title": "Usuaris", + "addUser": "Afegir usuari", + "management": { + "title": "Gestió d'usuaris", + "desc": "Gestioneu els comptes d'usuari d'aquesta instància de Frigate." + }, + "updatePassword": "Actualitzar contrasenya" + }, + "frigatePlus": { + "snapshotConfig": { + "table": { + "camera": "Càmera", + "snapshots": "Instantànies", + "cleanCopySnapshots": "clean_copy Instantànies"
+ },
+ "title": "Configuració d'instantànies",
+ "documentation": "Llegir la documentació",
+ "desc": "Per a enviar a Frigate+ fa falta que tan la instantània com la instantània clean_copy estiguin habilitades a la configuració."
+ },
+ "modelInfo": {
+ "baseModel": "Model base",
+ "modelType": "Tipus de model",
+ "trainDate": "Data d'entrenament",
+ "title": "Informació del model",
+ "supportedDetectors": "Detectors compatibles",
+ "availableModels": "Models disponibles",
+ "cameras": "Càmeres",
+ "plusModelType": {
+ "userModel": "Afinat",
+ "baseModel": "Model base"
+ },
+ "loadingAvailableModels": "Carregant models disponibles…",
+ "loading": "Carregant informació del model…",
+ "error": "No s'ha pogut carregar la informació del model"
+ },
+ "apiKey": {
+ "plusLink": "Llegeix més sobre Frigate+",
+ "title": "Clau API de Frigate+",
+ "validated": "La clau API de Frigate+ ha estat detectada i validada",
+ "notValidated": "La clau API de Frigate+ no ha estat detectada o no ha estat validada",
+ "desc": "La clau API de Frigate+ habilita la integració amb el servei Frigate+."
+ },
+ "unsavedChanges": "Canvis dels paràmetres de Frigate+ sense desar",
+ "title": "Paràmetres de Frigate+",
+ "toast": {
+ "error": "No s'han pogut guardar els canvis de configuració: {{errorMessage}}",
+ "success": "Els paràmetres de Frigate+ han estat desats. Reincia Frigate per aplicar els canvis."
+ },
+ "restart_required": "Es necessari un reinici (El model de Frigate+ ha cambiat)"
+ },
+ "enrichments": {
+ "semanticSearch": {
+ "modelSize": {
+ "small": {
+ "title": "petit"
+ },
+ "label": "Mida del model",
+ "large": {
+ "title": "gran",
+ "desc": "L’opció large fa servir el model complet de Jina i s’executarà automàticament a la GPU si està disponible."
+ },
+ "desc": "La mida del model utilitzat per incrustacions de cerca semàntica."
+ },
+ "reindexNow": {
+ "confirmButton": "Reindexar",
+ "success": "La reindexació ha començat amb èxit.",
+ "label": "Reindexar ara",
+ "confirmTitle": "Confirmar la reindexació",
+ "desc": "La reindexació regenerarà les incrustacions (embeddings) de tots els objectes seguits. Aquest procés s’executa en segon pla i pot arribar a saturar la CPU, així com trigar una bona estona depenent del nombre d’objectes seguits que tinguis.",
+ "confirmDesc": "Estàs segur que vols reindexar totes les incrustacions (embeddings) dels objectes seguits? Aquest procés s’executarà en segon pla, però pot arribar a saturar la CPU i trigar bastant temps. Pots seguir-ne el progrés a la pàgina d’Explora.",
+ "alreadyInProgress": "La reindexació ja està en curs.",
+ "error": "Error en iniciar la reindexació: {{errorMessage}}"
+ },
+ "readTheDocumentation": "Llegir la documentació",
+ "title": "Cerca semàntica",
+ "desc": "La cerca semàntica a Frigate permet trobar objectes rastrejats dins dels elements de revisió utilitzant la pròpia imatge, una descripció de text definida per l'usuari o una de generada automàticament."
+ },
+ "faceRecognition": {
+ "modelSize": {
+ "small": {
+ "title": "petit",
+ "desc": "Fer servir la opció petit fa servir un model d'embedding de rostre de FaceNet que d'executa de manera eficient a la majoria de les CPUs."
+ },
+ "large": {
+ "title": "gran",
+ "desc": "L’opció large fa servir el model d'embedding de rostres d'ArcFace i s’executarà automàticament a la GPU si està disponible."
+ },
+ "label": "Mida del model",
+ "desc": "La mida del model utilitzat per al reconeixement facial."
+ },
+ "readTheDocumentation": "Llegir la documentació",
+ "title": "Reconeixement de rostres"
+ },
+ "unsavedChanges": "Canvis dels paràmetres complementaris sense desar",
+ "licensePlateRecognition": {
+ "readTheDocumentation": "Llegir la documentació",
+ "title": "Reconeixement de matrícules"
+ },
+ "birdClassification": {
+ "title": "Classificació d'ocells",
+ "desc": "La classificació d’ocells identifica ocells coneguts mitjançant un model TensorFlow quantitzat. Quan es reconeix un ocell conegut, el seu nom comú s’afegeix com a subetiqueta. Aquesta informació es mostra a la interfície d’usuari, als filtres i també a les notificacions."
+ },
+ "title": "Parmàmetres complementaris",
+ "toast": {
+ "error": "No s'han pogut guardar els canvis de configuració: {{errorMessage}}",
+ "success": "Els paràmetres complementaris s'han desat. Reinicia Frigate per aplicar els canvis."
+ },
+ "restart_required": "És necessari reiniciar (Han cambiat paràmetres complementaris)"
+ }
+}
diff --git a/web/public/locales/ca/views/system.json b/web/public/locales/ca/views/system.json
new file mode 100644
index 000000000..853fe348f
--- /dev/null
+++ b/web/public/locales/ca/views/system.json
@@ -0,0 +1,179 @@
+{
+ "documentTitle": {
+ "cameras": "Estadístiques de càmera - Frigate",
+ "storage": "Estadístiques d'emmagatzematge - Frigate",
+ "general": "Estadístiques generals - Frigate",
+ "logs": {
+ "frigate": "Registres de Frigate - Frigate",
+ "go2rtc": "Registres de Go2RTC - Frigate",
+ "nginx": "Registres de Nginix - Frigate"
+ },
+ "enrichments": "Estadístiques complementàries - Frigate"
+ },
+ "title": "Sistema",
+ "metrics": "Mètriques del sistema",
+ "logs": {
+ "download": {
+ "label": "Descarregar registres"
+ },
+ "copy": {
+ "label": "Copiar al porta-retalls",
+ "success": "Registres copiats al porta-retalls",
+ "error": "No s'han pogut copiar els registres al porta-retalls"
+ },
+ "type": {
+ "label": "Tipus",
+ "timestamp": "Marca temporal",
+ "tag": "Etiqueta",
+ "message": "Missatge"
+ },
+ "tips": "Els registres s'estàn transmetent des del servidor",
+ "toast": {
+ "error": {
+ "fetchingLogsFailed": "Error al obtenir els registres: {{errorMessage}}",
+ "whileStreamingLogs": "Error en la transmissió dels registres: {{errorMessage}}"
+ }
+ }
+ },
+ "general": {
+ "detector": {
+ "memoryUsage": "Ús de memòria del detector",
+ "title": "Detectors",
+ "inferenceSpeed": "Velocitat d'inferència del detector",
+ "cpuUsage": "Ús de CPU del detector",
+ "temperature": "Temperatura del detector"
+ },
+ "title": "General",
+ "hardwareInfo": {
+ "title": "Informació de maquinari",
+ "gpuUsage": "Ús de la GPU",
+ "gpuMemory": "Memòria de GPU",
+ "gpuDecoder": "Decodificador de GPU",
+ "gpuEncoder": "Codificador de GPU",
+ "gpuInfo": {
+ "vainfoOutput": {
+ "title": "Sortida de Vainfo",
+ "processOutput": "Sortida del procés:",
+ "processError": "Error de procés:",
+ "returnCode": "Codi de retorn: {{code}}"
+ },
+ "nvidiaSMIOutput": {
+ "title": "Sortida de Nvidia SMI",
+ "vbios": "Informació de VBios: {{vbios}}",
+ "cudaComputerCapability": "Capacitat de càlcul CUDA: {{cuda_compute}}",
+ "name": "Nom: {{name}}",
+ "driver": "Controlador: {{driver}}"
+ },
+ "closeInfo": {
+ "label": "Tancar informació de GPU"
+ },
+ "copyInfo": {
+ "label": "Copiar informació de GPU"
+ },
+ "toast": {
+ "success": "Informació de GPU copiada al porta-retalls"
+ }
+ },
+ "npuUsage": "Ús de NPU",
+ "npuMemory": "Memòria de NPU"
+ },
+ "otherProcesses": {
+ "title": "Altres processos",
+ "processMemoryUsage": "Ús de memòria de procés",
+ "processCpuUsage": "Ús de la CPU del procés"
+ }
+ },
+ "storage": {
+ "title": "Emmagatzematge",
+ "recordings": {
+ "title": "Gravacions",
+ "earliestRecording": "Gravació més antiga disponible:",
+ "tips": "Aquest valor representa l'emmagatzematge total utilitzat per les gravacions a la base de dades de Frigate. Frigate no registre l'ús de tots els arxius del disc."
+ },
+ "cameraStorage": {
+ "camera": "Càmera",
+ "unusedStorageInformation": "Informació d'emmagatzematge no utilitzat",
+ "bandwidth": "Ample de banda",
+ "storageUsed": "Emmagatzematge",
+ "title": "Emmagatzematge de càmera",
+ "unused": {
+ "title": "Sense utilitzar"
+ },
+ "percentageOfTotalUsed": "Percentatge del total"
+ },
+ "overview": "Visió general"
+ },
+ "cameras": {
+ "framesAndDetections": "Fotogrames / Deteccions",
+ "label": {
+ "capture": "captura",
+ "cameraDetect": "{{camName}} detectar",
+ "cameraCapture": "{{camName}} captura",
+ "camera": "càmera",
+ "skipped": "omès",
+ "ffmpeg": "FFmpeg",
+ "detect": "detectar",
+ "overallFramesPerSecond": "Fotogrames per segon globals",
+ "overallDetectionsPerSecond": "Deteccions per segon globals",
+ "cameraFfmpeg": "{{camName}} FFmpeg",
+ "cameraFramesPerSecond": "{{camName}} fotogrames per segon",
+ "cameraDetectionsPerSecond": "{{camName}} deteccions per segon",
+ "overallSkippedDetectionsPerSecond": "Nombre total de deteccions descartades per segon",
+ "cameraSkippedDetectionsPerSecond": "Nombre de deteccions descartades per segon a {{camName}}"
+ },
+ "info": {
+ "codec": "Còdec:",
+ "fps": "FPS:",
+ "resolution": "Resolució:",
+ "video": "Vídeo:",
+ "unknown": "Desconegut",
+ "stream": "Transmissió {{idx}}",
+ "error": "Error: {{error}}",
+ "fetching": "Obtenint dades de càmera",
+ "aspectRatio": "relació d'aspecte",
+ "tips": {
+ "title": "Informació del sondeig de la càmera"
+ },
+ "audio": "Àudio:",
+ "cameraProbeInfo": "Informació del sondeig de la càmera {{camera}}",
+ "streamDataFromFFPROBE": "Les dades de la transmissió són obtingudes mitjançant ffprobe."
+ },
+ "title": "Càmeres",
+ "overview": "Visió general",
+ "toast": {
+ "success": {
+ "copyToClipboard": "S'han copiat les dades de sondeig al porta-retalls."
+ },
+ "error": {
+ "unableToProbeCamera": "No s'ha pogut sondejar la càmera: {{errorMessage}}"
+ }
+ }
+ },
+ "lastRefreshed": "Darrera actualització: ",
+ "stats": {
+ "reindexingEmbeddings": "Reindexant incrustacions ({{processed}}% completat)",
+ "healthy": "El sistema és saludable",
+ "cameraIsOffline": "{{camera}} està fora de línia",
+ "ffmpegHighCpuUsage": "{{camera}} te un ús elevat de CPU per FFmpeg ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} te un ús elevat de CPU per la detecció ({{detectAvg}}%)",
+ "detectIsVerySlow": "{{detect}} és molt lent ({{speed}} ms)",
+ "detectIsSlow": "{{detect}} és lent ({{speed}} ms)"
+ },
+ "enrichments": {
+ "title": "Enriquiments",
+ "embeddings": {
+ "face_recognition_speed": "Velocitat de reconeixement facial",
+ "image_embedding": "Incrustació d'imatges",
+ "text_embedding": "Incrustació de text",
+ "face_recognition": "Reconeixement de rostres",
+ "plate_recognition": "Reconeixemnt de matrícules",
+ "image_embedding_speed": "Velocitat d'ncrustació d'imatges",
+ "face_embedding_speed": "Velocitat d'incrustació de rostres",
+ "plate_recognition_speed": "Velocitat de reconeixement de matrícules",
+ "text_embedding_speed": "Velocitat d'incrustació de text",
+ "yolov9_plate_detection": "Detecció de matrícules YOLOv9",
+ "yolov9_plate_detection_speed": "Velocitat de detecció de matrícules YOLOv9"
+ },
+ "infPerSecond": "Inferències per segon"
+ }
+}
diff --git a/web/public/locales/cs/audio.json b/web/public/locales/cs/audio.json
new file mode 100644
index 000000000..4308f7487
--- /dev/null
+++ b/web/public/locales/cs/audio.json
@@ -0,0 +1,429 @@
+{
+ "yell": "Křik",
+ "child_singing": "Dětský zpěv",
+ "speech": "Řeč",
+ "babbling": "Blábolení",
+ "bellow": "Řev",
+ "whoop": "Výskání",
+ "whispering": "Šeptání",
+ "snicker": "Chichotání",
+ "crying": "Pláč",
+ "sigh": "Povzdech",
+ "singing": "Zpěv",
+ "choir": "Sbor",
+ "yodeling": "Jódlování",
+ "synthetic_singing": "Umělý zpěv",
+ "humming": "Bzukot",
+ "groan": "Sténání",
+ "whistling": "Pískot",
+ "breathing": "Dech",
+ "wheeze": "Sípání",
+ "snoring": "Chrapot",
+ "snort": "Funění",
+ "cough": "Kašel",
+ "throat_clearing": "Odkašlávání",
+ "sneeze": "Kýchání",
+ "footsteps": "Kroky",
+ "chewing": "Žvýkání",
+ "biting": "Kousání",
+ "burping": "Krkání",
+ "hiccup": "Škytání",
+ "fart": "Prdění",
+ "hands": "Ruce",
+ "finger_snapping": "Luskání prstem",
+ "clapping": "Tleskání",
+ "heartbeat": "Tluk srdce",
+ "cheering": "Jásání",
+ "applause": "Potlesk",
+ "chatter": "Klábosení",
+ "crowd": "Dav",
+ "children_playing": "Hrající si děti",
+ "bark": "Štěkot",
+ "howl": "Vytí",
+ "growling": "Vrkot",
+ "whimper_dog": "Psí kníkot",
+ "cat": "Kočka",
+ "purr": "Předení",
+ "meow": "Mňouk",
+ "hiss": "Sykot",
+ "livestock": "Hospodářská zvířata",
+ "horse": "Kůň",
+ "neigh": "Řehtání",
+ "cattle": "Dobytek",
+ "moo": "Bučení",
+ "cowbell": "Kravský zvonec",
+ "pig": "Prase",
+ "oink": "Chrochtání",
+ "fowl": "Drůbež",
+ "chicken": "Slepice",
+ "cluck": "Kvokání",
+ "cock_a_doodle_doo": "Kykyryký",
+ "turkey": "Krocan",
+ "gobble": "Hudrování",
+ "duck": "Kachna",
+ "quack": "Kvákání",
+ "goose": "Husa",
+ "honk": "Kejhání",
+ "wild_animals": "Divoká zvířata",
+ "roaring_cats": "Řvoucí kočky",
+ "roar": "Řev",
+ "bird": "Pták",
+ "chirp": "Cvrlikání",
+ "pigeon": "Holub",
+ "coo": "Vrkání",
+ "squawk": "Skřekání",
+ "crow": "Vrána",
+ "caw": "Krákání",
+ "hoot": "Houkání",
+ "flapping_wings": "Mávání křídel",
+ "dogs": "Psi",
+ "mouse": "Myš",
+ "insect": "Hmyz",
+ "fly": "Moucha",
+ "buzz": "Bzučení",
+ "frog": "Žába",
+ "snake": "Had",
+ "croak": "Kvákání žáby",
+ "rattle": "Chrastění",
+ "whale_vocalization": "Velrybí zpěv",
+ "music": "Hudba",
+ "guitar": "Kytara",
+ "bass_guitar": "Basová kytara",
+ "steel_guitar": "Ocelová kytara",
+ "tapping": "Ťukání",
+ "banjo": "Banjo",
+ "sitar": "Sitár",
+ "mandolin": "Mandolína",
+ "zither": "Citera",
+ "ukulele": "Ukulele",
+ "keyboard": "Klávesnice",
+ "electric_piano": "Elektrický klavír",
+ "electronic_organ": "Elektronické varhany",
+ "hammond_organ": "Hammondovy varhany",
+ "synthesizer": "Syntezátor",
+ "sampler": "Sampler",
+ "harpsichord": "Cembalo",
+ "percussion": "Perkuse",
+ "drum_kit": "Bubny",
+ "drum_machine": "Bicí automat",
+ "drum": "Buben",
+ "snare_drum": "Malý buben",
+ "rimshot": "Rána na obruč",
+ "drum_roll": "Víření",
+ "timpani": "Tympány",
+ "tabla": "Tabla",
+ "cymbal": "Činel",
+ "hi_hat": "Hi-hat",
+ "wood_block": "Dřevěný blok",
+ "tambourine": "Tamburína",
+ "maraca": "Maraka",
+ "gong": "Gong",
+ "marimba": "Marimba",
+ "vibraphone": "Vibrafon",
+ "steelpan": "Ocelový buben",
+ "orchestra": "Orchestr",
+ "brass_instrument": "Žesťový nástroj",
+ "french_horn": "Lesní roh",
+ "trumpet": "Trubka",
+ "trombone": "Trombón",
+ "violin": "Housle",
+ "saxophone": "Saxofon",
+ "church_bell": "Kostelní zvon",
+ "bicycle_bell": "Cyklistický zvonek",
+ "tuning_fork": "Ladička",
+ "chime": "Zvonění",
+ "harmonica": "Harmonika",
+ "accordion": "Akordeon",
+ "bagpipes": "Dudy",
+ "didgeridoo": "Didžeridu",
+ "theremin": "Theremin",
+ "scratching": "Škrábání",
+ "pop_music": "Popová muzika",
+ "hip_hop_music": "Hip-hopová muzika",
+ "rock_music": "Rocková muzika",
+ "heavy_metal": "Heavy metal",
+ "music_for_children": "Hudba pro děti",
+ "song": "Píseň",
+ "thunderstorm": "Bouře",
+ "wind": "Vítr",
+ "rustling_leaves": "Šustění listů",
+ "wind_noise": "Zvuk větru",
+ "thunder": "Hrom",
+ "water": "Voda",
+ "rain": "Déšť",
+ "raindrop": "Dešťové kapky",
+ "stream": "Potok",
+ "waterfall": "Vodopád",
+ "ocean": "Moře",
+ "waves": "Vlny",
+ "steam": "Pára",
+ "fire": "Oheň",
+ "crackle": "Praskání",
+ "vehicle": "Vozidlo",
+ "sailboat": "Plachetnice",
+ "boat": "Člun",
+ "ship": "Loď",
+ "rowboat": "Loďka",
+ "motorboat": "Motorový člun",
+ "motor_vehicle": "Motorové vozidlo",
+ "car": "Auto",
+ "laughter": "Smích",
+ "sniff": "Čichání",
+ "stomach_rumble": "Kručení v břiše",
+ "gargling": "Kloktání",
+ "dog": "Pes",
+ "run": "Běh",
+ "cricket": "Cvrček",
+ "glockenspiel": "Paličková zvonkohra",
+ "cello": "Cello",
+ "pets": "Domácí mazlíčci",
+ "opera": "Opera",
+ "harp": "Harfa",
+ "animal": "Zvíře",
+ "electric_guitar": "Elektrická kytara",
+ "piano": "Klavír",
+ "goat": "Koza",
+ "bleat": "Mečení",
+ "sheep": "Ovce",
+ "owl": "Sova",
+ "musical_instrument": "Hudební nástroj",
+ "organ": "Varhany",
+ "rats": "Krysy",
+ "mosquito": "Komár",
+ "strum": "Brnkání",
+ "tubular_bells": "Trubicové zvony",
+ "acoustic_guitar": "Akustická kytara",
+ "bass_drum": "Basový buben",
+ "jazz": "Jazz",
+ "flute": "Flétna",
+ "clarinet": "Klarinet",
+ "bell": "Zvon",
+ "techno": "Techno",
+ "electronic_music": "Elektronická muzika",
+ "car_alarm": "Autoalarm",
+ "power_windows": "Elektrická okénka",
+ "skidding": "Smyk",
+ "tire_squeal": "Kvílení pneumatik",
+ "car_passing_by": "Projíždějící auto",
+ "air_brake": "Vzduchové brzdy",
+ "air_horn": "Vzduchový klakson",
+ "bus": "Autobus",
+ "police_car": "Policejní auto",
+ "ambulance": "Záchranka",
+ "fire_engine": "Hasiči",
+ "motorcycle": "Motorka",
+ "rail_transport": "Železnice",
+ "train": "Vlak",
+ "train_horn": "Troubení vlaku",
+ "railroad_car": "Železniční vagon",
+ "subway": "Metro",
+ "aircraft": "Letadlo",
+ "aircraft_engine": "Motor letadla",
+ "bicycle": "Cyklistické kolo",
+ "jet_engine": "Tryskový motor",
+ "propeller": "Vrtule",
+ "helicopter": "Helikoptéra",
+ "dental_drill's_drill": "Zubní vrtačka",
+ "lawn_mower": "Sekačka",
+ "chainsaw": "Motorová pila",
+ "idling": "Bežící motor",
+ "accelerating": "Přidávání plynu",
+ "door": "Dveře",
+ "doorbell": "Zvonek",
+ "sliding_door": "Posuvné dveře",
+ "slam": "Bouchnutí",
+ "knock": "Klepání",
+ "dishes": "Nádobí",
+ "cutlery": "Příbory",
+ "chopping": "Krájení",
+ "bathtub": "Vana",
+ "hair_dryer": "Fén",
+ "toilet_flush": "Spláchnutí záchodu",
+ "toothbrush": "Zubní kartáček",
+ "electric_toothbrush": "Elektrický zubní kartáček",
+ "vacuum_cleaner": "Vysavač",
+ "zipper": "Zip",
+ "keys_jangling": "Cinkání klíčů",
+ "coin": "Mince",
+ "scissors": "Nůžky",
+ "electric_shaver": "Elektrický holící strojek",
+ "typing": "Psaní na stroji nebo klávesnici",
+ "typewriter": "Psací stroj",
+ "computer_keyboard": "Počítačová klávesnice",
+ "writing": "Psaní",
+ "alarm": "Alarm",
+ "telephone": "Telefon",
+ "telephone_bell_ringing": "Zvonění telefonu",
+ "telephone_dialing": "Vytáčení",
+ "alarm_clock": "Budík",
+ "siren": "Siréna",
+ "smoke_detector": "Detektor kouře",
+ "fire_alarm": "Požární alarm",
+ "foghorn": "Mlhovka",
+ "whistle": "Píšťalka",
+ "mechanisms": "Mechanismy",
+ "clock": "Hodiny",
+ "tick-tock": "Ťikťak",
+ "tick": "Ťik",
+ "sewing_machine": "Šicí stroj",
+ "air_conditioning": "Klimatizace",
+ "cash_register": "Kasa",
+ "printer": "Tiskárna",
+ "camera": "Kamera",
+ "tools": "Nářadí",
+ "hammer": "Kladivo",
+ "jackhammer": "Sbíječka",
+ "sawing": "Řezání",
+ "power_tool": "Elektrické nářadí",
+ "drill": "Vrtačka",
+ "explosion": "Exploze",
+ "gunshot": "Výstřel",
+ "fireworks": "Ohňostroj",
+ "firecracker": "Petarda",
+ "eruption": "Erupce",
+ "boom": "Třesk",
+ "wood": "Dřevo",
+ "splinter": "Tříska",
+ "glass": "Sklo",
+ "shatter": "Roztříštění",
+ "silence": "Ticho",
+ "sound_effect": "Zvukový efekt",
+ "environmental_noise": "Okolní hluk",
+ "white_noise": "Bilý šum",
+ "radio": "Rádio",
+ "scream": "Výkřik",
+ "microwave_oven": "Mikrovlnka",
+ "race_car": "Závodní auto",
+ "ding-dong": "Cink",
+ "water_tap": "Vodovodní kohoutek",
+ "sink": "Dřez",
+ "pink_noise": "Růžový šum",
+ "frying": "Smažení",
+ "television": "Televize",
+ "blender": "Mixér",
+ "train_whistle": "Houkání vlaku",
+ "engine": "Motor",
+ "engine_starting": "Startující motor",
+ "truck": "Nákladní auto",
+ "static": "Šum",
+ "engine_knocking": "Klepání v motoru",
+ "skateboard": "Skateboard",
+ "chant": "Skandování",
+ "rapping": "Rapování",
+ "gasp": "Zalapání po dechu",
+ "heart_murmur": "Srdeční šelest",
+ "mantra": "Mantra (pozitivní vibrace)",
+ "grunt": "Zabručení",
+ "pant": "Oddechávání",
+ "shuffle": "Míchání (karet)",
+ "yip": "Jo",
+ "bow_wow": "Hlasitý protest",
+ "caterwaul": "Vřeštět",
+ "clip_clop": "Klapání kopyt",
+ "patter": "Plácání",
+ "plucked_string_instrument": "Drnkací strunný nástroj",
+ "mallet_percussion": "Palička perkuse",
+ "bowed_string_instrument": "Smyčcový nástroj",
+ "string_section": "Smyčcová sekce",
+ "pizzicato": "Pizzicato",
+ "double_bass": "Kontrabas",
+ "wind_instrument": "Dechový nástroj",
+ "jingle_bell": "Rolnička",
+ "wind_chime": "Zvonkohra",
+ "singing_bowl": "Singing Bowl",
+ "beatboxing": "Beatboxing",
+ "punk_rock": "Punk Rock",
+ "grunge": "Grunge",
+ "progressive_rock": "Progressive Rock",
+ "rock_and_roll": "Rock & Roll",
+ "psychedelic_rock": "Psychadelický Rock",
+ "rhythm_and_blues": "Rythm & Blues",
+ "soul_music": "Soulová hudba",
+ "reggae": "Reggae",
+ "country": "Country",
+ "swing_music": "Swingová hudba",
+ "bluegrass": "Bluegrass",
+ "funk": "Funk",
+ "folk_music": "Folková hudba",
+ "middle_eastern_music": "Středo-východní hudba",
+ "disco": "Disco",
+ "classical_music": "Klasická hudba",
+ "house_music": "House hudba",
+ "dubstep": "Dubstep",
+ "drum_and_bass": "Drum & Bass",
+ "electronica": "Elektronická hudba",
+ "electronic_dance_music": "Elektronická taneční hudba",
+ "ambient_music": "Ambientní hudba",
+ "trance_music": "Trance hudba",
+ "music_of_latin_america": "Latinsko-americká hudba",
+ "flamenco": "Flamengo",
+ "blues": "Blues",
+ "new-age_music": "Novodobá hudba",
+ "vocal_music": "Vokální hudba",
+ "a_capella": "A Capella",
+ "music_of_africa": "Africká hudba",
+ "afrobeat": "Afrobeat",
+ "christian_music": "Křesťanská hudba",
+ "gospel_music": "Gospelová hudba",
+ "music_of_asia": "Asijská hudba",
+ "carnatic_music": "Karnatická hudba",
+ "music_of_bollywood": "Hudba z Bollywoodu",
+ "ska": "SKA",
+ "traditional_music": "Tradiční hudba",
+ "independent_music": "Nezávislá hudba",
+ "background_music": "Hudba na pozadí",
+ "theme_music": "Tématická hudba",
+ "jingle": "Jingle",
+ "soundtrack_music": "Soundtracková hudba",
+ "lullaby": "Ukolébavka",
+ "video_game_music": "Herní hudba",
+ "christmas_music": "Vánoční hudba",
+ "dance_music": "Taneční hudba",
+ "wedding_music": "Svatební hudba",
+ "happy_music": "Veselá hudba",
+ "sad_music": "Smutná hudba",
+ "tender_music": "Něžná hudba",
+ "exciting_music": "Vzrušující hudba",
+ "angry_music": "Naštvaná hudba",
+ "scary_music": "Děsivá hudba",
+ "rain_on_surface": "Déšť na povrch",
+ "gurgling": "Klokotání",
+ "toot": "Troubení",
+ "reversing_beeps": "Parkovací pípání",
+ "ice_cream_truck": "Auto se zmrzlinou",
+ "emergency_vehicle": "Záchranářské vozidlo",
+ "traffic_noise": "Zvuk provozu",
+ "train_wheels_squealing": "Skřípání kol vlaku",
+ "fixed-wing_aircraft": "Letadlo s pevnými křídly",
+ "light_engine": "Lehký motor",
+ "medium_engine": "Střední motor",
+ "heavy_engine": "Těžký motor",
+ "tap": "Poklepání",
+ "squeak": "Skřípání",
+ "cupboard_open_or_close": "Otvírání nebo zavírání skříně",
+ "drawer_open_or_close": "Otvírání nebo zavírání šuplíku",
+ "shuffling_cards": "Míchání karet",
+ "ringtone": "Vyzváněcí melodie",
+ "dial_tone": "Vytáčecí tón",
+ "busy_signal": "Tón obsazené linky",
+ "civil_defense_siren": "Siréna civilní obrany",
+ "salsa_music": "Salsa hudba",
+ "buzzer": "Bzučák",
+ "steam_whistle": "Parní píšťala",
+ "ratchet": "Ráčna",
+ "gears": "Ozubená kola",
+ "pulleys": "Kladky",
+ "mechanical_fan": "Mechanický větrák",
+ "single-lens_reflex_camera": "Jednooká zrcadlovka",
+ "filing": "Plnění",
+ "sanding": "Pískování",
+ "machine_gun": "Kulomet",
+ "fusillade": "Salva",
+ "artillery_fire": "Dělostřelecká palba",
+ "cap_gun": "Kapslíková pistole",
+ "burst": "Výbuch",
+ "chop": "Sekání",
+ "crack": "Prasknutí",
+ "chink": "Cinknutí",
+ "field_recording": "Nahrávka z terénu"
+}
diff --git a/web/public/locales/cs/common.json b/web/public/locales/cs/common.json
new file mode 100644
index 000000000..08cff4992
--- /dev/null
+++ b/web/public/locales/cs/common.json
@@ -0,0 +1,265 @@
+{
+ "time": {
+ "untilForTime": "Do {{time}}",
+ "untilForRestart": "Do doby, než se Frigarte restartuje.",
+ "untilRestart": "Do restartu",
+ "justNow": "Teď",
+ "today": "Dnes",
+ "yesterday": "Včera",
+ "last7": "Posledních 7 dní",
+ "last14": "Posledních 14 dní",
+ "last30": "Posledních 30 dní",
+ "thisWeek": "Tento týden",
+ "lastWeek": "Minulý týden",
+ "thisMonth": "Tento měsíc",
+ "lastMonth": "Minulý měsíc",
+ "5minutes": "5 minut",
+ "10minutes": "10 minut",
+ "30minutes": "30 minut",
+ "1hour": "1 hodina",
+ "12hours": "12 hodin",
+ "24hours": "24 hodin",
+ "pm": "odpoledne",
+ "am": "ráno",
+ "year_one": "{{time}} rok",
+ "year_few": "{{time}} let",
+ "year_other": "{{time}} let",
+ "month_one": "{{time}} měsíc",
+ "month_few": "{{time}} měsíce",
+ "month_other": "{{time}} měsíců",
+ "day_one": "{{time}} den",
+ "day_few": "{{time}} dny",
+ "day_other": "{{time}} dní",
+ "hour_one": "{{time}} hodina",
+ "hour_few": "{{time}} hodiny",
+ "hour_other": "{{time}} hodin",
+ "minute_one": "{{time}} minuta",
+ "minute_few": "{{time}} minuty",
+ "minute_other": "{{time}} minut",
+ "second_one": "{{time}} sekunda",
+ "second_few": "{{time}} sekundy",
+ "second_other": "{{time}} sekund",
+ "formattedTimestampMonthDayYear": {
+ "12hour": "d MMM yyyy",
+ "24hour": "d MMM yyyy"
+ },
+ "ago": "před {{timeAgo}}",
+ "yr": "{{time}}r",
+ "d": "{{time}}d",
+ "h": "{{time}}h",
+ "mo": "{{time}}měs",
+ "formattedTimestampHourMinute": {
+ "24hour": "HH:mm",
+ "12hour": "h:mm aaa"
+ },
+ "formattedTimestampMonthDayHourMinute": {
+ "12hour": "d MMM, h:mm aaa",
+ "24hour": "d MMM, HH:mm"
+ },
+ "formattedTimestamp": {
+ "12hour": "d MMM, h:mm:ss aaa",
+ "24hour": "d MMM, HH:mm:ss"
+ },
+ "formattedTimestampHourMinuteSecond": {
+ "12hour": "h:mm:ss aaa",
+ "24hour": "HH:mm:ss"
+ },
+ "formattedTimestampMonthDay": "d MMM",
+ "s": "{{time}}sec",
+ "m": "{{time}}min",
+ "formattedTimestamp2": {
+ "12hour": "dd/MM h:mm:ssa",
+ "24hour": "d MMM HH:mm:ss"
+ },
+ "formattedTimestampMonthDayYearHourMinute": {
+ "24hour": "d MMM yyyy, HH:mm",
+ "12hour": "d MMM yyyy, h:mm aaa"
+ },
+ "formattedTimestampFilename": {
+ "24hour": "dd-MM-yy-HH-mm-ss",
+ "12hour": "dd-MM.yy-h-mm-ss-a"
+ }
+ },
+ "button": {
+ "twoWayTalk": "Obousměrná komunikace",
+ "enabled": "Zapnuto",
+ "cameraAudio": "Zvuk kamery",
+ "apply": "Použij",
+ "reset": "Reset",
+ "done": "Hotovo",
+ "on": "Zapnuto",
+ "off": "Vypnuto",
+ "edit": "Upravit",
+ "enable": "Zapni",
+ "disabled": "Vypnuto",
+ "disable": "Vypni",
+ "save": "Uložit",
+ "saving": "Ukládám…",
+ "cancel": "Zrušit",
+ "close": "Zavři",
+ "copy": "Zkopíruj",
+ "back": "Zpět",
+ "history": "Historie",
+ "fullscreen": "Celá obrazovka",
+ "exitFullscreen": "Opustit režim celé obrazovky",
+ "pictureInPicture": "Obraz v obraze",
+ "copyCoordinates": "Zkopíruj souřadnice",
+ "delete": "Odstranit",
+ "yes": "Ano",
+ "no": "Ne",
+ "download": "Stáhnout",
+ "info": "Informace",
+ "suspended": "Pozastaveno",
+ "unsuspended": "Zrušit pozastavení",
+ "play": "Hrát",
+ "unselect": "Zrušit výběr",
+ "deleteNow": "Smazat hned",
+ "next": "Další",
+ "export": "Exportovat"
+ },
+ "label": {
+ "back": "Jdi zpět"
+ },
+ "unit": {
+ "speed": {
+ "kph": "Km/h",
+ "mph": "míle/h"
+ },
+ "length": {
+ "feet": "stopa",
+ "meters": "metry"
+ }
+ },
+ "selectItem": "Vyberte {{item}}",
+ "menu": {
+ "documentation": {
+ "label": "Dokumentace Frigate",
+ "title": "Dokumentace"
+ },
+ "live": {
+ "allCameras": "Všechny kamery",
+ "title": "Živě",
+ "cameras": {
+ "count_one": "{{count}} kamera",
+ "count_few": "{{count}} kamery",
+ "count_other": "{{count}} kamer",
+ "title": "Kamery"
+ }
+ },
+ "review": "Revize",
+ "explore": "Prozkoumat",
+ "system": "Systém",
+ "systemMetrics": "Systémové metriky",
+ "configuration": "Konfigurace",
+ "language": {
+ "yue": "粵語 (kantonština)",
+ "en": "English (Angličtina)",
+ "da": "Dansk (Dánština)",
+ "fi": "Suomi (Finština)",
+ "sk": "Slovenčina (Slovenština)",
+ "withSystem": {
+ "label": "Použít systémové nastavení pro jazyk"
+ },
+ "zhCN": "简体中文 (Zjednodušená čínština)",
+ "es": "Español (Španělština)",
+ "hi": "हिन्दी (Hindština)",
+ "fr": "Français (Francouzština)",
+ "ar": "العربية (Arabština)",
+ "pt": "Português (Portugalština)",
+ "ru": "Русский (Ruština)",
+ "de": "Deutsch (Němčina)",
+ "it": "Italiano (Italština)",
+ "ja": "日本語 (Japonština)",
+ "tr": "Türkçe (Turečtina)",
+ "nl": "Nederlands (Holandština)",
+ "sv": "Svenska (Švédština)",
+ "cs": "Čeština",
+ "nb": "Norsk Bokmål (norský Bokmål)",
+ "uk": "Українська (Ukrainština)",
+ "ko": "한국어 (Korejština)",
+ "vi": "Tiếng Việt (Vietnamština)",
+ "he": "עברית (Hebrejština)",
+ "el": "Ελληνικά (Řečtina)",
+ "fa": "فارسی (Perština)",
+ "ro": "Română (Rumunština)",
+ "hu": "Magyar (Maďarština)",
+ "pl": "Polski (Polština)",
+ "th": "ไทย (Thaiština)",
+ "ca": "Català (Katalánština)"
+ },
+ "theme": {
+ "highcontrast": "Vysoký kontrast",
+ "default": "Výchozí",
+ "label": "Téma",
+ "blue": "Modrá",
+ "green": "Zelená",
+ "nord": "Polární",
+ "red": "Červená"
+ },
+ "help": "Nápověda",
+ "restart": "Restartovat Frigate",
+ "user": {
+ "logout": "Odhlásit",
+ "setPassword": "Nastavit heslo",
+ "current": "Aktuální uživatel: {{user}}",
+ "title": "Uživatel",
+ "account": "Účet",
+ "anonymous": "anonymní"
+ },
+ "systemLogs": "Systémový záznam",
+ "settings": "Nastavení",
+ "languages": "Jazyky",
+ "appearance": "Vzhled",
+ "darkMode": {
+ "label": "Tmavý režim",
+ "light": "Světlý",
+ "dark": "Tmavý",
+ "withSystem": {
+ "label": "Použít systémové nastavení pro světlý a tmavý režim"
+ }
+ },
+ "export": "Exportovat",
+ "uiPlayground": "UI hřiště",
+ "faceLibrary": "Knihovna Obličejů",
+ "configurationEditor": "Editor Konfigurace",
+ "withSystem": "Systém"
+ },
+ "pagination": {
+ "previous": {
+ "label": "Jít na předchozí stranu",
+ "title": "Předchozí"
+ },
+ "label": "stránkování",
+ "next": {
+ "label": "Jít na další stranu",
+ "title": "Další"
+ },
+ "more": "Více stran"
+ },
+ "accessDenied": {
+ "documentTitle": "Přístup odepřen - Frigate",
+ "title": "Přístup odepřen",
+ "desc": "Nemáte oprávnění zobrazit tuto stránku."
+ },
+ "notFound": {
+ "desc": "Stránka nenalezena",
+ "documentTitle": "Nenalezeno - Frigate",
+ "title": "404"
+ },
+ "toast": {
+ "copyUrlToClipboard": "Adresa URL byla zkopírována do schránky.",
+ "save": {
+ "title": "Uložit",
+ "error": {
+ "title": "Chyba při ukládání změn konfigurace: {{errorMessage}}",
+ "noMessage": "Chyba při ukládání změn konfigurace"
+ }
+ }
+ },
+ "role": {
+ "title": "Role",
+ "admin": "Správce",
+ "viewer": "Divák",
+ "desc": "Správci mají plný přístup ke všem funkcím v uživatelském rozhraní Frigate. Diváci jsou omezeni na sledování kamer, položek přehledu a historických záznamů v UI."
+ }
+}
diff --git a/web/public/locales/cs/components/auth.json b/web/public/locales/cs/components/auth.json
new file mode 100644
index 000000000..a3dd01b32
--- /dev/null
+++ b/web/public/locales/cs/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "user": "Uživatelské jméno",
+ "password": "Heslo",
+ "login": "Přihlášení",
+ "errors": {
+ "usernameRequired": "Uživatelské jméno je povinné",
+ "passwordRequired": "Heslo je povinné",
+ "loginFailed": "Přihlášení se nezdařilo",
+ "unknownError": "Neznámá chyba. Zkontrolujte logy.",
+ "webUnknownError": "Neznámá chuba. Zkontrolujte logy konzoly.",
+ "rateLimit": "Limit požadavků překročen. Zkuste to znovu později."
+ }
+ }
+}
diff --git a/web/public/locales/cs/components/camera.json b/web/public/locales/cs/components/camera.json
new file mode 100644
index 000000000..2c3f0d6c7
--- /dev/null
+++ b/web/public/locales/cs/components/camera.json
@@ -0,0 +1,86 @@
+{
+ "group": {
+ "label": "Skupiny kamer",
+ "camera": {
+ "setting": {
+ "streamMethod": {
+ "method": {
+ "noStreaming": {
+ "label": "Žádný stream",
+ "desc": "Obrázky z kamery se aktualizují pouze jednou za minutu a neproběhne žádné živé vysílání."
+ },
+ "smartStreaming": {
+ "label": "Smart Streaming (doporučeno)",
+ "desc": "Inteligentní streamování aktualizuje obraz vaší kamery jednou za minutu, když nedochází k žádné detekovatelné aktivitě, aby se šetřila šířka pásma a zdroje. Když je detekována aktivita, obraz se plynule přepne na živý přenos."
+ },
+ "continuousStreaming": {
+ "label": "Kontinuální streamování",
+ "desc": {
+ "title": "Obraz z kamery bude vždy živým přenosem, když je viditelný na dashboardu, i když není detekována žádná aktivita.",
+ "warning": "Nepřetržité streamování může způsobit velké využití šířky pásma a problémy s výkonem. Používejte opatrně."
+ }
+ }
+ },
+ "label": "Metoda streamování",
+ "placeholder": "Vyberte metodu vysílání"
+ },
+ "label": "Nastavení streamování kamery",
+ "audioIsAvailable": "Audio je k dispozici pro tento stream",
+ "audioIsUnavailable": "Audio není k dispozici pro tento stream",
+ "audio": {
+ "tips": {
+ "document": "Přečtěte si dokumentaci ",
+ "title": "Pro tento stream musí být výstup zvuku z vaší kamery a nakonfigurován v go2rtc."
+ }
+ },
+ "compatibilityMode": {
+ "label": "Režim kompatibility",
+ "desc": "Tuto možnost povolte pouze v případě, že živý přenos vaší kamery zobrazuje barevné artefakty a má na pravé straně obrazu diagonální čáru."
+ },
+ "title": "Nastavení streamování {{cameraName}}",
+ "desc": "Změní možnosti živého vysílání pro dashboard této skupiny kamer. Tato nastavení jsou specifická pro zařízení/prohlížeč.",
+ "stream": "Proud",
+ "placeholder": "Vyberte proud"
+ }
+ },
+ "delete": {
+ "confirm": {
+ "title": "Potvrdit odstranění",
+ "desc": "Skutečně si přejete odstranit skupinu kamer {{name}}?"
+ },
+ "label": "Odstranit skupinu kamer"
+ },
+ "add": "Přidat skupinu kamer",
+ "name": {
+ "label": "Jméno",
+ "placeholder": "Zadejte jméno…",
+ "errorMessage": {
+ "exists": "Tento název skupiny kamer již existuje.",
+ "mustLeastCharacters": "Název skupiny kamer musí mít minimálně 2 znaky.",
+ "nameMustNotPeriod": "Název skupiny kamer nesmí obsahovat tečku.",
+ "invalid": "Špatný název skupiny kamer."
+ }
+ },
+ "edit": "Upravit skupinu kamer",
+ "cameras": {
+ "label": "Kamery",
+ "desc": "Vyberte kamery pro tuto skupinu."
+ },
+ "icon": "Ikona",
+ "success": "Skupina kamer {{name}} byla uložena."
+ },
+ "debug": {
+ "options": {
+ "label": "Nastavení",
+ "title": "Možnosti",
+ "showOptions": "Zobrazit možnosti",
+ "hideOptions": "Skrýt možnosti"
+ },
+ "zones": "Zóny",
+ "motion": "Pohyb",
+ "regions": "Kraje",
+ "timestamp": "Časové razítko",
+ "boundingBox": "Ohraničení",
+ "mask": "Maska"
+ }
+}
diff --git a/web/public/locales/cs/components/dialog.json b/web/public/locales/cs/components/dialog.json
new file mode 100644
index 000000000..53318710a
--- /dev/null
+++ b/web/public/locales/cs/components/dialog.json
@@ -0,0 +1,114 @@
+{
+ "restart": {
+ "title": "Jste si jistí, že chcete restartovat Frigate?",
+ "button": "Restartovat",
+ "restarting": {
+ "title": "Frigate restartuje",
+ "content": "Tato stránka bude obnovena za {{countdown}} sekund.",
+ "button": "Vynutit opětovné načtení"
+ }
+ },
+ "explore": {
+ "plus": {
+ "review": {
+ "question": {
+ "label": "Potvrďte tento štítek pro Frigate Plus",
+ "ask_a": "Je tento objekt {{label}}?",
+ "ask_an": "Tento objekt je {{label}}?",
+ "ask_full": "Je tento objekt {{untranslatedLabel}} ({{translatedLabel}})?"
+ },
+ "state": {
+ "submitted": "Odesláno"
+ }
+ },
+ "submitToPlus": {
+ "label": "Odeslat do Frigate+",
+ "desc": "Objekty na místech, kterým se chcete vyhnout, nejsou falešné poplachy. Označení takových objektů jako falešných pozitiv může model zmást."
+ }
+ },
+ "video": {
+ "viewInHistory": "Zobrazit historii"
+ }
+ },
+ "recording": {
+ "confirmDelete": {
+ "toast": {
+ "success": "Videozáznam spojený s vybranými položkami přehledu byl úspěšně smazán.",
+ "error": "Chyba mazání: {{error}}"
+ },
+ "title": "Potvrdit odstranění",
+ "desc": {
+ "selected": "Opravdu chcete smazat všechna nahraná videa spojená s touto položkou přehledu?detectpřenosu, zkontrolujte logy chyb"
+ },
+ "cameraDisabled": "Kamera je zakázaná",
+ "stats": {
+ "streamType": {
+ "title": "Typ přenosu:",
+ "short": "Typ"
+ },
+ "bandwidth": {
+ "title": "Šířka pásma:",
+ "short": "Šířka pásma"
+ },
+ "latency": {
+ "title": "Latence:",
+ "value": "{{seconds}} sekund",
+ "short": {
+ "title": "Latence",
+ "value": "{{seconds}} sek"
+ }
+ },
+ "totalFrames": "Celkový počet snímků:",
+ "droppedFrames": {
+ "title": "Ztracené snímky:",
+ "short": {
+ "title": "Ztracené",
+ "value": "{{droppedFrames}} snímků"
+ }
+ },
+ "decodedFrames": "Dekódované snímky:",
+ "droppedFrameRate": "Frekvence ztracených snímků:"
+ },
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "Snimek byl úspěšně odeslán službě Frigate+"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "Nepodařilo se odeslat snímek službě Frigate+"
+ }
+ }
+}
diff --git a/web/public/locales/cs/objects.json b/web/public/locales/cs/objects.json
new file mode 100644
index 000000000..f25710235
--- /dev/null
+++ b/web/public/locales/cs/objects.json
@@ -0,0 +1,120 @@
+{
+ "person": "Osoba",
+ "dog": "Pes",
+ "cat": "Kočka",
+ "horse": "Kůň",
+ "bird": "Pták",
+ "boat": "Člun",
+ "car": "Auto",
+ "sheep": "Ovce",
+ "mouse": "Myš",
+ "keyboard": "Klávesnice",
+ "animal": "Zvíře",
+ "vehicle": "Vozidlo",
+ "bark": "Štěkot",
+ "goat": "Koza",
+ "bus": "Autobus",
+ "motorcycle": "Motorka",
+ "train": "Vlak",
+ "bicycle": "Cyklistické kolo",
+ "door": "Dveře",
+ "blender": "Mixér",
+ "sink": "Dřez",
+ "scissors": "Nůžky",
+ "clock": "Hodiny",
+ "toothbrush": "Zubní kartáček",
+ "hair_dryer": "Fén",
+ "skateboard": "Skateboard",
+ "airplane": "Letadlo",
+ "traffic_light": "Semafor",
+ "fire_hydrant": "Požární hydrant",
+ "street_sign": "Uliční cedule",
+ "stop_sign": "Stopka",
+ "parking_meter": "Parkovací hodiny",
+ "bench": "Lavička",
+ "cow": "Kráva",
+ "elephant": "Slon",
+ "bear": "Medvěd",
+ "zebra": "Zebra",
+ "giraffe": "Žirafa",
+ "hat": "Čepice",
+ "backpack": "Batoh",
+ "umbrella": "Deštník",
+ "shoe": "Bota",
+ "eye_glasses": "Brýle",
+ "handbag": "Kabelka",
+ "tie": "Kravata",
+ "suitcase": "Oblečení",
+ "frisbee": "Frisbee",
+ "skis": "Lyže",
+ "snowboard": "Snowboard",
+ "sports_ball": "Sportovní míč",
+ "kite": "Drak",
+ "baseball_bat": "Baseballová pálka",
+ "baseball_glove": "Baseballová rukavice",
+ "surfboard": "Surfovací prkno",
+ "tennis_racket": "Tenisová raketa",
+ "bottle": "Lahev",
+ "plate": "Talíř",
+ "wine_glass": "Sklenice na víno",
+ "cup": "Šálek",
+ "fork": "Vidlička",
+ "knife": "Nůž",
+ "spoon": "Lžíce",
+ "bowl": "Mísa",
+ "banana": "Banán",
+ "apple": "Jablko",
+ "sandwich": "Sendvič",
+ "orange": "Pomeranč",
+ "broccoli": "Brokolice",
+ "carrot": "Mrkev",
+ "hot_dog": "Párek v rohlíku",
+ "pizza": "Pizza",
+ "donut": "Donut",
+ "cake": "Koláč",
+ "chair": "Židle",
+ "couch": "Gauč",
+ "potted_plant": "Hrnková rostlina",
+ "bed": "Postel",
+ "mirror": "Zrcadlo",
+ "dining_table": "Jídelní stůl",
+ "window": "Okno",
+ "desk": "Stůl",
+ "toilet": "Toaleta",
+ "tv": "TV",
+ "laptop": "Laptop",
+ "remote": "Dálkový ovladač",
+ "cell_phone": "Mobilní telefon",
+ "microwave": "Mikrovlnná trouba",
+ "oven": "Trouba",
+ "toaster": "Toustovač",
+ "refrigerator": "Lednice",
+ "book": "Kniha",
+ "vase": "Váza",
+ "teddy_bear": "Medvídek",
+ "hair_brush": "Hřeben",
+ "squirrel": "Veverka",
+ "deer": "Jelen",
+ "fox": "Liška",
+ "rabbit": "Králík",
+ "raccoon": "Mýval",
+ "robot_lawnmower": "Robotická sekačka na trávu",
+ "waste_bin": "Odpadkový koš",
+ "on_demand": "Na požádání",
+ "face": "Obličej",
+ "license_plate": "SPZ",
+ "package": "Balík",
+ "bbq_grill": "Gril",
+ "amazon": "Amazon",
+ "usps": "USPS",
+ "ups": "UPS",
+ "fedex": "FedEx",
+ "dhl": "DHL",
+ "an_post": "An Post",
+ "purolator": "Purolator",
+ "postnl": "PostNL",
+ "nzpost": "NZPost",
+ "postnord": "PostNord",
+ "gls": "GLS",
+ "dpd": "DPD"
+}
diff --git a/web/public/locales/cs/views/configEditor.json b/web/public/locales/cs/views/configEditor.json
new file mode 100644
index 000000000..55fbafb2c
--- /dev/null
+++ b/web/public/locales/cs/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "documentTitle": "Editor konfigurace - Frigate",
+ "configEditor": "Editor konfigurace",
+ "copyConfig": "Kopírovat konfiguraci",
+ "saveAndRestart": "Uložit a restartovat",
+ "saveOnly": "Jen uložit",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Konfigurace byla zkopírovaná do schránky."
+ },
+ "error": {
+ "savingError": "Chyba ukládání konfigurace"
+ }
+ },
+ "confirm": "Opustit bez uložení?"
+}
diff --git a/web/public/locales/cs/views/events.json b/web/public/locales/cs/views/events.json
new file mode 100644
index 000000000..17cade7e0
--- /dev/null
+++ b/web/public/locales/cs/views/events.json
@@ -0,0 +1,38 @@
+{
+ "alerts": "Výstrahy",
+ "detections": "Detekce",
+ "motion": {
+ "label": "Pohyb",
+ "only": "Jen pohyb"
+ },
+ "allCameras": "Všechny kamery",
+ "empty": {
+ "alert": "Nejsou žádné výstrahy na kontrolu",
+ "detection": "Nejsou žádné detekce na kontrolu",
+ "motion": "Nenalezena žádná data o pohybu"
+ },
+ "timeline": "Časová osa",
+ "timeline.aria": "Zvolit časovou osu",
+ "events": {
+ "label": "Události",
+ "aria": "Zvolit události",
+ "noFoundForTimePeriod": "Pro toto období nebyly nalezeny žádné události."
+ },
+ "documentTitle": "Revize - Frigate",
+ "camera": "Kamera",
+ "calendarFilter": {
+ "last24Hours": "Posledních 24 hodin"
+ },
+ "markAsReviewed": "Označit jako zkontrolované",
+ "markTheseItemsAsReviewed": "Označit tyto položky jako zkontrolované",
+ "newReviewItems": {
+ "label": "Zobrazit nové položky na kontrolu",
+ "button": "Nové položky na kontrolu"
+ },
+ "recordings": {
+ "documentTitle": "Záznamy - Frigate"
+ },
+ "detected": "Detekováno",
+ "selected_one": "{{count}} vybráno",
+ "selected_other": "{{count}} vybráno"
+}
diff --git a/web/public/locales/cs/views/explore.json b/web/public/locales/cs/views/explore.json
new file mode 100644
index 000000000..1dba5c605
--- /dev/null
+++ b/web/public/locales/cs/views/explore.json
@@ -0,0 +1,209 @@
+{
+ "generativeAI": "Generativní AI",
+ "documentTitle": "Prozkoumat – Frigate",
+ "details": {
+ "timestamp": "Časové razítko",
+ "snapshotScore": {
+ "label": "Skóre snímku"
+ },
+ "item": {
+ "title": "Zkontrolovat detaily položky",
+ "desc": "Zkontrolovat detaily položky",
+ "button": {
+ "share": "Sdílet tuto položku kontroly",
+ "viewInExplore": "Zobrazit v Průzkumu"
+ },
+ "tips": {
+ "hasMissingObjects": "Upravte svou konfiguraci, pokud chcete, aby Frigate ukládal sledované objekty pro následující štítky: {{objects}}",
+ "mismatch_one": "{{count}} nedostupný objekt byl detekován a vložen do této položky kontroly. Tento objekt se buď nekvalifikoval jako výstraha nebo detekce, nebo již byl vyčištěn/smazán.",
+ "mismatch_few": "{{count}} nedostupné objekty byly detekovány a vloženy do této položky kontroly. Tyto objekty se buď nekvalifikovaly jako výstraha nebo detekce, nebo již byly vyčištěny/smazány.",
+ "mismatch_other": "{{count}} nedostupných objektů bylo detekováno a vloženo do této položky kontroly. Tyto objekty se buď nekvalifikovaly jako výstraha nebo detekce, nebo již byly vyčištěny/smazány."
+ },
+ "toast": {
+ "success": {
+ "regenerate": "Od {{provider}} byl vyžádán nový popis. V závislosti na rychlosti vašeho poskytovatele může obnovení nového popisu nějakou dobu trvat.",
+ "updatedSublabel": "Úspěšně aktualizovaný podružný štítek.",
+ "updatedLPR": "Úspěšně aktualizovaná SPZ."
+ },
+ "error": {
+ "regenerate": "Chyba volání {{provider}} pro nový popis: {{errorMessage}}",
+ "updatedSublabelFailed": "Chyba obnovení podružného štítku: {{errorMessage}}",
+ "updatedLPRFailed": "Chyba obnovení SPZ: {{errorMessage}}"
+ }
+ }
+ },
+ "editSubLabel": {
+ "descNoLabel": "Vložit nový podružný štítek pro tento sledovaný objekt",
+ "desc": "Vložit nový podružný štítek pro tento {{label}}",
+ "title": "Upravit podružný štítek"
+ },
+ "editLPR": {
+ "title": "Upravit SPZ",
+ "descNoLabel": "Vložit novou SPZ pro tento sledovaný objekt",
+ "desc": "Vložit novou SPZ pro tento {{label}}"
+ },
+ "estimatedSpeed": "Odhadovaná rychlost",
+ "objects": "Objekty",
+ "camera": "Kamera",
+ "zones": "Zóny",
+ "button": {
+ "regenerate": {
+ "label": "Regenerovat popis sledovaného objektu",
+ "title": "Regenerovat"
+ },
+ "findSimilar": "Najít podobné"
+ },
+ "description": {
+ "label": "Popis",
+ "placeholder": "Popis sledovaného objektu",
+ "aiTips": "Frigate nebude vyžadovat popis od vašeho poskytovatele generativní AI, dokud neskončí životní cyklus sledovaného objektu."
+ },
+ "expandRegenerationMenu": "Rozbalte nabídku regenerace",
+ "regenerateFromSnapshot": "Regenerovat ze snímku",
+ "regenerateFromThumbnails": "Regenerovat z náhledu",
+ "tips": {
+ "descriptionSaved": "Popis úspěšně uložen",
+ "saveDescriptionFailed": "Aktualizace popisu se nezdařila: {{errorMessage}}"
+ },
+ "topScore": {
+ "info": "Nejvyšší skóre je nejvyšší střední skóre pro sledovaný objekt, takže se může lišit od skóre zobrazeného na miniatuře výsledku vyhledávání.",
+ "label": "Nejvyšší skóre"
+ },
+ "label": "Štítek",
+ "recognizedLicensePlate": "Rozpoznaná SPZ"
+ },
+ "exploreIsUnavailable": {
+ "title": "Prozkoumat je nedostupné",
+ "embeddingsReindexing": {
+ "context": "Prozkoumat může být použito až vložené sledované objekty dokončí přeindexování.",
+ "startingUp": "Spouštění…",
+ "estimatedTime": "Odhadovaný zbývající čas:",
+ "finishingShortly": "Brzy bude dokončeno",
+ "step": {
+ "thumbnailsEmbedded": "Vložené náhledy: ",
+ "descriptionsEmbedded": "Vložené popisy: ",
+ "trackedObjectsProcessed": "Zpracované sledované objekty: "
+ }
+ },
+ "downloadingModels": {
+ "context": "Frigate stahuje potřebné modely vložení pro podporu funkce sémantického vyhledávání. To může trvat několik minut v závislosti na rychlosti vašeho síťového připojení.",
+ "setup": {
+ "visionModelFeatureExtractor": "Extraktor funkcí Vision modelu",
+ "visionModel": "Vision model",
+ "textModel": "Textový model",
+ "textTokenizer": "Textový tokenizér"
+ },
+ "tips": {
+ "documentation": "Přečtěte si dokumentaci",
+ "context": "Můžete reindexovat vložení vašich sledovaných oběktů hned jak budou modely staženy."
+ },
+ "error": "Nastala chyba. Zkontrolujte protokoly Frigate."
+ }
+ },
+ "trackedObjectsCount_one": "{{count}} sledovaný objekt ",
+ "trackedObjectsCount_few": "{{count}} sledované objekty ",
+ "trackedObjectsCount_other": "{{count}} sledovaných objektů ",
+ "searchResult": {
+ "tooltip": "Shoda s {{type}} na {{confidence}} %",
+ "deleteTrackedObject": {
+ "toast": {
+ "error": "Sledovaný objekt se nepodařilo smazat: {{errorMessage}}",
+ "success": "Sledovaný objekt úspěšně smazán."
+ }
+ }
+ },
+ "objectLifecycle": {
+ "count": "{{first}} z {{second}}",
+ "trackedPoint": "Sledovaný bod",
+ "lifecycleItemDesc": {
+ "external": "{{label}} detekován",
+ "header": {
+ "zones": "Zóny",
+ "ratio": "Poměr",
+ "area": "Oblast"
+ },
+ "entered_zone": "{{label}} vstoupil do {{zones}}",
+ "active": "{{label}} začal být aktivní",
+ "stationary": "{{label}} se stal statickým",
+ "visible": "{{label}} detekován",
+ "attribute": {
+ "faceOrLicense_plate": "{{attribute}} detekován pro {{label}}",
+ "other": "{{label}} rozpoznán jako {{attribute}}"
+ },
+ "heard": "{{label}} slyšen",
+ "gone": "{{label}} opuštěn"
+ },
+ "annotationSettings": {
+ "showAllZones": {
+ "title": "Zobrazit všechny zóny",
+ "desc": "Vždy zobrazit zóny na snímcích, kde objekty vstoupily do zóny."
+ },
+ "offset": {
+ "label": "Odsazení popisku",
+ "documentation": "Přečtěte si dokumentaci ",
+ "millisecondsToOffset": "Milisekundy pro posun zobrazení popisku detekce. Výchozí: 0",
+ "desc": "Tato data pocházejí z detekčního zdroje vaší kamery, ale jsou překryta na snímcích ze záznamu. Je nepravděpodobné, že by tyto dva proudy byly dokonale synchronizované. Výsledkem je, že ohraničující rámeček a stopáž nebudou dokonale zarovnány. K nastavení však lze použít pole annotation_offset.",
+ "tips": "TIP: Představte si, že existuje klip události s osobou, která jde zleva doprava. Pokud je ohraničovací rámeček na časové ose události konzistentně vlevo od osoby, měla by být hodnota snížena. Podobně, pokud osoba chodí zleva doprava a ohraničující rámeček je trvale před osobou, měla by být hodnota zvýšena.",
+ "toast": {
+ "success": "Posun anotace pro {{camera}} byl uložen do konfiguračního souboru. Restartujte Frigate, aby se změny projevily."
+ }
+ },
+ "title": "Nastavení popisků"
+ },
+ "carousel": {
+ "previous": "Předchozí snímek",
+ "next": "Následující snímek"
+ },
+ "title": "Životní cyklus Objektu",
+ "noImageFound": "Žádný obrázek pro toto časové razítko.",
+ "createObjectMask": "Vytvořit masku objektu",
+ "adjustAnnotationSettings": "Upravit nastavení poznámek",
+ "scrollViewTips": "Posouváním zobrazíte významné okamžiky životního cyklu tohoto objektu.",
+ "autoTrackingTips": "Pozice ohraničení bude nepřesná pro kamery s automatickým sledováním."
+ },
+ "itemMenu": {
+ "downloadSnapshot": {
+ "label": "Stáhnout snímek",
+ "aria": "Stáhnout snímek"
+ },
+ "viewInHistory": {
+ "aria": "Zobrazit v historii",
+ "label": "Zobrazit historii"
+ },
+ "deleteTrackedObject": {
+ "label": "Smazat tento sledovaný objekt"
+ },
+ "downloadVideo": {
+ "label": "Stáhnout video",
+ "aria": "Stáhnout video"
+ },
+ "findSimilar": {
+ "aria": "Najít podobný sledovaný objekt",
+ "label": "Najít podobné"
+ },
+ "submitToPlus": {
+ "aria": "Odeslat do Frigate Plus",
+ "label": "Odeslat do Frigate+"
+ },
+ "viewObjectLifecycle": {
+ "label": "Zobrazit životní cyklus objektu",
+ "aria": "Ukázat životní cyklus objektu"
+ }
+ },
+ "dialog": {
+ "confirmDelete": {
+ "title": "Potvrdit smazání",
+ "desc": "Odstraněním tohoto sledovaného objektu se odstraní snímek, všechna uložená vložení a všechny související položky životního cyklu objektu. Zaznamenaný záznam tohoto sledovaného objektu v zobrazení Historie NEBUDE smazán.režim: {{effectiveRetainMode}}, takže tento záznam na vyžádání bude uchovávat pouze segmenty s režimem {{effectiveRetainModeName}}."
+ },
+ "editLayout": {
+ "exitEdit": "Ukončit Úpravu",
+ "label": "Upravit Rozložení",
+ "group": {
+ "label": "Upravit Skupinu Kamer"
+ }
+ },
+ "notifications": "Notifikace"
+}
diff --git a/web/public/locales/cs/views/recording.json b/web/public/locales/cs/views/recording.json
new file mode 100644
index 000000000..80fa1f193
--- /dev/null
+++ b/web/public/locales/cs/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "export": "Exportovat",
+ "calendar": "Kalendář",
+ "filter": "Filtrovat",
+ "filters": "Filtry",
+ "toast": {
+ "error": {
+ "endTimeMustAfterStartTime": "Čas konce musí být po čase začátku",
+ "noValidTimeSelected": "Nebylo zvoleno platné časové období"
+ }
+ }
+}
diff --git a/web/public/locales/cs/views/search.json b/web/public/locales/cs/views/search.json
new file mode 100644
index 000000000..e828a6716
--- /dev/null
+++ b/web/public/locales/cs/views/search.json
@@ -0,0 +1,72 @@
+{
+ "search": "Hledat",
+ "savedSearches": "Uložená vyhledávání",
+ "searchFor": "Hledat {{inputValue}}",
+ "button": {
+ "clear": "Vymazat vyhledávaní",
+ "save": "Uložit vyhledávání",
+ "delete": "Vymazat uložená vyhledávání",
+ "filterInformation": "Filtrovat informace",
+ "filterActive": "Aktivní filtry"
+ },
+ "trackedObjectId": "ID sledovaného objektu",
+ "filter": {
+ "label": {
+ "cameras": "Kamery",
+ "labels": "Štítky",
+ "zones": "Zóny",
+ "sub_labels": "Podružné Štítky",
+ "max_speed": "Max rychlost",
+ "min_speed": "Min rychlost",
+ "search_type": "Typ Hledání",
+ "time_range": "Časový Rozsah",
+ "before": "Před",
+ "after": "Po",
+ "max_score": "Maximální Skóre",
+ "min_score": "Minimální Skóre",
+ "recognized_license_plate": "Rozpoznaná SPZ",
+ "has_clip": "Má Klip",
+ "has_snapshot": "Má Snímek"
+ },
+ "tips": {
+ "desc": {
+ "step1": "Zadejte název filtru následovaný dvojtečkou (např. „kamery:“).",
+ "step2": "Vyberte hodnotu z nabízených možností nebo zadejte vlastní.",
+ "step3": "Použijte více filtrů tak, že je přidáte jeden po druhém s mezerou mezi nimi.",
+ "step4": "Datumové filtry (before: a after:) používají formát {{DateFormat}}.",
+ "step6": "Odstraňte filtr kliknutím na 'x' vedle něj.",
+ "exampleLabel": "Příklad:",
+ "text": "Filtry vám pomohou zúžit výsledky hledání. Zde je návod, jak je používat ve vstupním poli:",
+ "step5": "Pro časový rozsah použijte formát {{exampleTime}}."
+ },
+ "title": "Jak používat textové filtry"
+ },
+ "searchType": {
+ "thumbnail": "Náhled",
+ "description": "Popis"
+ },
+ "toast": {
+ "error": {
+ "beforeDateBeLaterAfter": "Datum 'před' musí být pozdější než datum 'po'.",
+ "afterDatebeEarlierBefore": "Datum 'po' musí být dřívější než datum 'před'.",
+ "minScoreMustBeLessOrEqualMaxScore": "'min_score' musí být menší nebo rovno 'max_score'.",
+ "maxScoreMustBeGreaterOrEqualMinScore": "'max_score' musí být větší nebo rovno 'min_score'.",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "'min_speed' musí být menší nebo rovno 'max_speed'.",
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "'max_speed' musí být větší nebo rovno 'min_speed'."
+ }
+ },
+ "header": {
+ "currentFilterType": "Hodnoty Filtru",
+ "noFilters": "Filtry",
+ "activeFilters": "Aktivní Filtry"
+ }
+ },
+ "similaritySearch": {
+ "title": "Hledání Podle Podobnosti",
+ "active": "Hledání podobností aktivní",
+ "clear": "Vymazat hledání podobností"
+ },
+ "placeholder": {
+ "search": "Hledat…"
+ }
+}
diff --git a/web/public/locales/cs/views/settings.json b/web/public/locales/cs/views/settings.json
new file mode 100644
index 000000000..065770762
--- /dev/null
+++ b/web/public/locales/cs/views/settings.json
@@ -0,0 +1,686 @@
+{
+ "documentTitle": {
+ "default": "Nastavení - Frigate",
+ "authentication": "Nastavení ověřování - Frigate",
+ "camera": "Nastavení kamery - Frigate",
+ "classification": "Nastavení klasifikace - Frigate",
+ "notifications": "Nastavení notifikací - Frigate",
+ "masksAndZones": "Editor masky a zón - Frigate",
+ "motionTuner": "Ladič detekce pohybu - Frigate",
+ "object": "Ladění - Frigate",
+ "general": "Obecné nastavení - Frigate",
+ "frigatePlus": "Frigate+ nastavení - Frigate",
+ "enrichments": "Nastavení obohacení - Frigate"
+ },
+ "frigatePlus": {
+ "toast": {
+ "error": "Chyba při ukládání změn konfigurace: {{errorMessage}}",
+ "success": "Nastavení Frigate+ byla uložena. Restartujte Frigate+ pro aplikování změn."
+ },
+ "modelInfo": {
+ "cameras": "Kamery",
+ "modelSelect": "Zde můžete vybrat dostupné modely ze služby Frigate+. Upozorňujeme, že lze zvolit pouze modely kompatibilní s aktuální konfigurací detektoru.",
+ "loadingAvailableModels": "Načítám dostupné modely…",
+ "plusModelType": {
+ "baseModel": "Základní Model",
+ "userModel": "Doladěno"
+ },
+ "loading": "Načítám informace o modelu…",
+ "error": "Chyba načítání informací o modelu",
+ "availableModels": "Dostupné Moduly",
+ "supportedDetectors": "Podporované Detektory",
+ "title": "Informace o Modelu",
+ "modelType": "Typ Modelu",
+ "trainDate": "Datum Tréninku",
+ "baseModel": "Základní Model"
+ },
+ "snapshotConfig": {
+ "documentation": "Přečtěte si dokumentaci",
+ "desc": "Odesílání do Frigate+ vyžaduje, aby byly ve vaší konfiguraci povoleny jak běžné snímky, tak snímky typu clean_copy.",
+ "title": "Nastavení Snímku",
+ "table": {
+ "cleanCopySnapshots": "clean_copy Snímky",
+ "snapshots": "Snímky",
+ "camera": "Kamera"
+ },
+ "cleanCopyWarning": "Některé kamery mají povolené snímky, ale volba clean_copy je zakázaná. Pro možnost odesílání snímků z těchto kamer do služby Frigate+ je nutné tuto volbu povolit v konfiguraci snímků."
+ },
+ "apiKey": {
+ "notValidated": "API klíč Frigate+ nebyl rozpoznán nebo nebyl ověřen",
+ "plusLink": "Přečtěte si více o Frigate+",
+ "validated": "API klíč Frigate+ byl rozpoznán a ověřen",
+ "desc": "API klíč Frigate+ umožňuje integraci se službou Frigate+.",
+ "title": "Frigate+ API Klíč"
+ },
+ "unsavedChanges": "Neuložené změny nastavení Frigate+",
+ "title": "Nastavení Frigate+",
+ "restart_required": "Vyžadován restart (model Frigate+ změněn)"
+ },
+ "classification": {
+ "unsavedChanges": "Neuložené změny nastavení klasifikací",
+ "semanticSearch": {
+ "readTheDocumentation": "Přečtěte si dokumentaci",
+ "reindexNow": {
+ "alreadyInProgress": "Reindexování je už spuštěno.",
+ "label": "Reindexovat Teď",
+ "confirmTitle": "Potvrdit Reindexaci",
+ "error": "Chyba spouštění reindexování: {{errorMessage}}",
+ "desc": "Přeindexování znovu vygeneruje vektorové reprezentace (embeddingy) pro všechny sledované objekty. Tento proces probíhá na pozadí, může plně zatížit váš procesor a v závislosti na počtu sledovaných objektů může trvat delší dobu.",
+ "confirmDesc": "Opravdu chcete přeindexovat embeddingy všech sledovaných objektů? Tento proces poběží na pozadí, ale může plně vytížit procesor a trvat delší dobu. Průběh můžete sledovat na stránce Prozkoumat.",
+ "confirmButton": "Reindexovat",
+ "success": "Reindexování úspěšně spuštěno."
+ },
+ "title": "Sémantické Hledání",
+ "desc": "Sémantické vyhledávání ve Frigate umožňuje najít sledované objekty ve vašich záznamech pomocí samotného obrázku, uživatelem zadaného textového popisu nebo automaticky generovaného popisu.",
+ "modelSize": {
+ "small": {
+ "title": "malý",
+ "desc": "Použití malý znamená využití kvantizované verze modelu, která spotřebovává méně paměti RAM a běží rychleji na procesoru, přičemž rozdíl v kvalitě embeddingů je zanedbatelný."
+ },
+ "large": {
+ "title": "velký",
+ "desc": "Volba velký využívá plný model Jina a automaticky se provádí na GPU, pokud je k dispozici."
+ },
+ "label": "Velikost Modelu",
+ "desc": "Velikost modelu pro sémantické vyhledávání pomocí embeddingů."
+ }
+ },
+ "title": "Nastavení Klasifikací",
+ "birdClassification": {
+ "title": "Klasifikace Ptáka",
+ "desc": "Klasifikace ptáků rozpoznává známé druhy pomocí kvantizovaného modelu TensorFlow. Když je rozpoznán známý pták, jeho běžný název bude přidán jako podružný štítek (sub_label). Tato informace se zobrazí v uživatelském rozhraní, je dostupná ve filtrech a zahrnuta i v notifikacích."
+ },
+ "toast": {
+ "error": "Chyba při ukládání změn konfigurace: {{errorMessage}}",
+ "success": "Nastavení klasifikací uloženo. Restartujte Frigate pro aplikování změn."
+ },
+ "restart_required": "Vyžadován restart (Nastavení klasifikací se změnilo)",
+ "licensePlateRecognition": {
+ "title": "Rozpoznávání SPZ",
+ "desc": "Frigate dokáže rozpoznávat SPZ na vozidlech a automaticky přidávat rozpoznané znaky do pole recognized_license_plate nebo známý název jako podružný štítek k objektům typu auto. Běžným případem použití je čtení SPZ aut vjíždějících na příjezdovou cestu nebo projíždějících kolem na ulici.",
+ "readTheDocumentation": "Přečtěte si dokumentaci"
+ },
+ "faceRecognition": {
+ "title": "Rozpoznávání obličeje",
+ "readTheDocumentation": "Přečtěte si dokumentaci",
+ "desc": "Rozpoznávání obličeje umožňuje přiřadit lidem jména, a když je jejich obličej rozpoznán, Frigate přiřadí dané jméno jako podružný štítek (sub_label). Tato informace se zobrazuje v uživatelském rozhraní, je dostupná ve filtrech a je také součástí notifikací.",
+ "modelSize": {
+ "label": "Velikost Modelu",
+ "desc": "Velikost modelu použitého pro rozpoznávání obličeje.",
+ "small": {
+ "title": "malý",
+ "desc": "Použití malý znamená využití FaceNet modelu pro embedding obličejů, který běží efektivně na většině procesorů (CPU)."
+ },
+ "large": {
+ "title": "velký",
+ "desc": "Použití velký znamená využití modelu ArcFace pro embedding obličejů, který se v případě dostupnosti automaticky spustí na GPU."
+ }
+ }
+ }
+ },
+ "masksAndZones": {
+ "zones": {
+ "speedEstimation": {
+ "docs": "Přečtěte si dokumentaci",
+ "title": "Odhad rychlosti",
+ "desc": "Povolit odhad rychlosti pro objekty v této zóně. Zóna musí mít přesně 4 body.",
+ "lineADistance": "Vzdálenost linky A ({{unit}})",
+ "lineBDistance": "Vzdálenost linky B ({{unit}})",
+ "lineCDistance": "Vzdálenost linky C ({{unit}})",
+ "lineDDistance": "Vzdálenost linky D ({{unit}})"
+ },
+ "name": {
+ "inputPlaceHolder": "Zadejte jméno…",
+ "title": "Jméno",
+ "tips": "Název musí mít alespoň 2 znaky a nesmí být shodný s názvem kamery nebo jiné zóny."
+ },
+ "inertia": {
+ "title": "Setrvačnost",
+ "desc": "Určuje, po kolika snímcích strávených v zóně je objekt považován za přítomný v této zóně.Výchozí hodnota: 3"
+ },
+ "loiteringTime": {
+ "title": "Doba setrvání",
+ "desc": "Nastavuje minimální dobu v sekundách, po kterou musí být objekt v zóně, aby došlo k aktivaci.Výchozí hodnota: 0"
+ },
+ "objects": {
+ "title": "Objekty",
+ "desc": "Seznam objektů, na které se tato zóna vztahuje."
+ },
+ "allObjects": "Všechny Objekty",
+ "speedThreshold": {
+ "title": "Práh rychlosti ({{unit}})",
+ "desc": "Určuje minimální rychlost, při které jsou objekty v této zóně zohledněny.",
+ "toast": {
+ "error": {
+ "pointLengthError": "Odhad rychlosti byl pro tuto zónu deaktivován. Zóny s odhadem rychlosti musí mít přesně 4 body.",
+ "loiteringTimeError": "Pokud má zóna nastavenou dobu setrvání větší než 0, nedoporučuje se používat odhad rychlosti."
+ }
+ }
+ },
+ "toast": {
+ "success": "Zóna {{zoneName}} byla uložena. Restartujte Frigate pro aplikování změn."
+ },
+ "label": "Zóny",
+ "desc": {
+ "title": "Zóny umožňují definovat konkrétní oblast v záběru, díky čemuž lze určit, zda se objekt nachází v dané oblasti či nikoliv.",
+ "documentation": "Dokumentace"
+ },
+ "add": "Přidat Zónu",
+ "edit": "Upravit Zónu",
+ "documentTitle": "Upravit Zónu - Frigate",
+ "clickDrawPolygon": "Klikněte pro kreslení polygonu na obrázku.",
+ "point_one": "{{count}} bod",
+ "point_few": "{{count}} body",
+ "point_other": "{{count}} bodů"
+ },
+ "motionMasks": {
+ "context": {
+ "documentation": "Přečtěte si dokumentaci",
+ "title": "Masky detekce pohybu slouží k zabránění tomu, aby nežádoucí typy pohybu spouštěly detekci (například větve stromů nebo časové značky kamery). Masky detekce pohybu by se měly používat velmi střídmě – příliš rozsáhlé maskování může ztížit sledování objektů."
+ },
+ "polygonAreaTooLarge": {
+ "documentation": "Přečtěte si dokumentaci",
+ "title": "Maska detekce pohybu pokrývá {{polygonArea}}% záběru kamery. Příliš velké masky detekce pohybu nejsou doporučovány.",
+ "tips": "Masky detekce pohybu nebrání detekci objektů. Místo toho byste měli použít požadovanou zónu."
+ },
+ "documentTitle": "Editovat Masku Detekce pohybu - Frigate",
+ "desc": {
+ "title": "Masky detekce pohybu slouží k zabránění nežádoucím typům pohybu ve spuštění detekce. Příliš rozsáhlé maskování však může ztížit sledování objektů.",
+ "documentation": "Dokumentace"
+ },
+ "label": "Maska Detekce pohybu",
+ "add": "Nová Maska Detekce pohybu",
+ "edit": "Upravit Masku Detekce pohybu",
+ "point_one": "{{count}} bod",
+ "point_few": "{{count}} body",
+ "point_other": "{{count}} bodů",
+ "clickDrawPolygon": "Kliknutím nakreslíte polygon do obrázku.",
+ "toast": {
+ "success": {
+ "title": "{{polygonName}} byl uložen. Restartujte Frigate pro aplikování změn.",
+ "noName": "Maska Detekce pohybu byla uložena. Restartujte Frigate pro aplikování změn."
+ }
+ }
+ },
+ "filter": {
+ "all": "Všechny Masky a Zóny"
+ },
+ "restart_required": "Vyžadován restart (masky/zóny byly změněny)",
+ "toast": {
+ "error": {
+ "copyCoordinatesFailed": "Nemohu zkopírovat souřadnice do schránky."
+ },
+ "success": {
+ "copyCoordinates": "Souřadnice pro {{polyName}} zkopírovány do schránky."
+ }
+ },
+ "form": {
+ "zoneName": {
+ "error": {
+ "hasIllegalCharacter": "Název zóny obsahuje zakázané znaky.",
+ "mustNotBeSameWithCamera": "Název Zóny nesmí být stejný jako název kamery.",
+ "mustNotContainPeriod": "Název zóny nesmí obsahovat tečky.",
+ "alreadyExists": "Zóna se stejným názvem u této kamery již existuje.",
+ "mustBeAtLeastTwoCharacters": "Název Zóny musí mít minimálně 2 znaky."
+ }
+ },
+ "inertia": {
+ "error": {
+ "mustBeAboveZero": "Setrvačnost musí být větší než 0."
+ }
+ },
+ "polygonDrawing": {
+ "snapPoints": {
+ "true": "Přichytávat body",
+ "false": "Nepřichytávat body"
+ },
+ "delete": {
+ "title": "Potvrdit Smazání",
+ "desc": "Opravdu chcete smazat {{type}}{{name}}?",
+ "success": "{{name}} bylo smazáno."
+ },
+ "error": {
+ "mustBeFinished": "Kreslení polygonu musí být před uložením dokončeno."
+ },
+ "reset": {
+ "label": "Vymazat všechny body"
+ },
+ "removeLastPoint": "Odebrat poslední bod"
+ },
+ "distance": {
+ "error": {
+ "mustBeFilled": "Pro použití odhadu rychlosti musí být vyplněna všechna pole pro vzdálenost.",
+ "text": "Vzdálenost musí být větší nebo rovna 0.1."
+ }
+ },
+ "loiteringTime": {
+ "error": {
+ "mustBeGreaterOrEqualZero": "Doba setrvání musí být větší nebo rovna nule."
+ }
+ },
+ "speed": {
+ "error": {
+ "mustBeGreaterOrEqualTo": "Prahová hodnota rychlosti musí být větší nebo rovna 0,1."
+ }
+ }
+ },
+ "objectMasks": {
+ "label": "Masky Objektu",
+ "documentTitle": "Upravit Masku Objektu - Frigate",
+ "desc": {
+ "documentation": "Dokumentace",
+ "title": "Masky filtrování objektů slouží k odfiltrování falešných detekcí daného typu objektu na základě jeho umístění."
+ },
+ "add": "Přidat Masku Objektu",
+ "edit": "Upravit Masku Objektu",
+ "objects": {
+ "title": "Objekty",
+ "allObjectTypes": "Všechny typy objektů",
+ "desc": "Typ objektu, na který se tato maska objektu vztahuje."
+ },
+ "context": "Masky filtrování objektů slouží k odfiltrování falešných poplachů konkrétního typu objektu na základě jeho umístění.",
+ "clickDrawPolygon": "Kliknutím nakreslete polygon do obrázku.",
+ "toast": {
+ "success": {
+ "title": "{{polygonName}} byl uložen. Restartujte Frigate pro aplikování změn.",
+ "noName": "Maska Objektu byla uložena. Restartujte Frigate pro aplikování změn."
+ }
+ },
+ "point_one": "{{count}} bod",
+ "point_few": "{{count}} body",
+ "point_other": "{{count}} bodů"
+ },
+ "motionMaskLabel": "Maska Detekce pohybu {{number}}",
+ "objectMaskLabel": "Maska Objektu {{number}} {{label}}"
+ },
+ "menu": {
+ "ui": "Uživatelské rozhraní",
+ "classification": "Klasifikace",
+ "cameras": "Nastavení kamery",
+ "masksAndZones": "Masky / Zóny",
+ "motionTuner": "Ladič detekce pohybu",
+ "debug": "Ladění",
+ "users": "Uživatelé",
+ "notifications": "Notifikace",
+ "frigateplus": "Frigate +",
+ "enrichments": "Obohacení"
+ },
+ "dialog": {
+ "unsavedChanges": {
+ "title": "Máte neuložené změny.",
+ "desc": "Přejete si uložit změny před pokračováním?"
+ }
+ },
+ "cameraSetting": {
+ "camera": "Kamera",
+ "noCamera": "Žádná Kamera"
+ },
+ "general": {
+ "title": "Hlavní nastavení",
+ "liveDashboard": {
+ "title": "Živý Dashboard",
+ "automaticLiveView": {
+ "desc": "Při detekci aktivity se automaticky přepne na živý náhled kamery. Vypnutí této možnosti způsobí, že se statické snímky z kamery na ovládacím panelu Live aktualizují pouze jednou za minutu.",
+ "label": "Automatický živý náhled"
+ },
+ "playAlertVideos": {
+ "label": "Přehrát videa s výstrahou",
+ "desc": "Ve výchozím nastavení se nedávná upozornění na ovládacím panelu Živě přehrávají jako malá opakující se videa. Vypněte tuto možnost, chcete-li na tomto zařízení/prohlížeči zobrazovat pouze statický obrázek nedávných výstrah."
+ }
+ },
+ "storedLayouts": {
+ "title": "Uložené rozložení",
+ "desc": "Rozložení kamer ve skupině kamer lze přetáhnout nebo jim změnit velikost. Pozice jsou uloženy v místním úložišti vašeho prohlížeče.",
+ "clearAll": "Smazat všechna rozložení"
+ },
+ "cameraGroupStreaming": {
+ "title": "Nastavení streamování skupiny kamer",
+ "desc": "Nastavení streamování pro každou kameru je uloženo v místním uložišti vašeho prohlížeče.",
+ "clearAll": "Vymazat všechna nastavení streamování"
+ },
+ "recordingsViewer": {
+ "title": "Prohlížeč Nahrávek",
+ "defaultPlaybackRate": {
+ "label": "Výchozí Rychlost Přehrávání",
+ "desc": "Výchozí rychlost přehrávání pro nahrávky."
+ }
+ },
+ "calendar": {
+ "title": "Kalendář",
+ "firstWeekday": {
+ "label": "První den týdne",
+ "desc": "Den, kterým bude začínat týden v kalendáři kontrol.",
+ "sunday": "Neděle",
+ "monday": "Pondělí"
+ }
+ },
+ "toast": {
+ "success": {
+ "clearStoredLayout": "Vymazáno uložené rozvržení pro kameru {{cameraName}}",
+ "clearStreamingSettings": "Vymazány nastavení streamování pro všechny skupiny kamer."
+ },
+ "error": {
+ "clearStoredLayoutFailed": "Chyba mazání uloženého rozvržení: {{errorMessage}}",
+ "clearStreamingSettingsFailed": "Chyba mazání nastavení streamování: {{errorMessage}}"
+ }
+ }
+ },
+ "debug": {
+ "timestamp": {
+ "title": "Časové razítko",
+ "desc": "Překrýt obrázek časovým razítkem"
+ },
+ "regions": {
+ "title": "Regiony",
+ "desc": "Zobrazit rámeček oblasti zájmu odesílané detektoru objektů",
+ "tips": "Boxy oblastí zájmu
Jasně zelené boxy budou překryty na oblastech zájmu ve snímku, které jsou odesílány detektoru objektů.
" + }, + "title": "Ladit", + "detectorDesc": "Frigate používá vaše detektory {{detectors}} k detekci objektů ve streamu vašich kamer.", + "objectList": "Seznam Objektů", + "boundingBoxes": { + "title": "Ohraničující rámečky", + "desc": "Zobrazit ohraničující rámečky okolo sledovaných objektů", + "colors": { + "label": "Barvy Ohraničujících Rámečků Objektů", + "info": "Boxy pohybu
Červené boxy budou překryty na místech snímku, kde je právě detekován pohyb.
" + }, + "noObjects": "Žádné objekty", + "objectShapeFilterDrawing": { + "title": "Kreslení Filtru Tvaru Objektu", + "desc": "Nakreslete na obrázek obdélník pro zobrazení informací o ploše a poměru stran", + "tips": "Povolte tuto možnost pro nakreslení obdélníku na obraz kamery, který zobrazí jeho plochu a poměr stran. Tyto hodnoty pak můžete použít pro nastavení parametrů tvarového filtru objektu ve vaší konfiguraci.", + "document": "Přečtěte si dokumentaci ", + "score": "Skóre", + "ratio": "Poměr", + "area": "Oblast" + } + }, + "camera": { + "streams": { + "title": "Streamy", + "desc": "Dočasně zakáže kameru dokud Frigate nerestartuje. Deaktivace kamery zcela zastaví zpracování jejích streamů ve Frigate. Detekce, nahrávání ani ladění nebudou dostupné.https://…). Jedná se o omezení prohlížeče. Pro použití notifikací přistupujte k Frigate přes zabezpečené připojení."
+ },
+ "cameras": {
+ "title": "Kamery",
+ "desc": "Vyberte kamery, pro které chcete povolit notifikace.",
+ "noCameras": "Žádné dostupné kamery"
+ },
+ "title": "Notifikace",
+ "email": {
+ "placeholder": "např. example@email.com",
+ "title": "Email",
+ "desc": "Je vyžadována platná e-mailová adresa, která bude použita k upozornění v případě problémů se službou push notifikací."
+ },
+ "registerDevice": "Registrovat Toto Zařízení",
+ "deviceSpecific": "Nastavení Specifická pro Zařízení",
+ "unregisterDevice": "Odregistrovat Toto Zařízení",
+ "sendTestNotification": "Poslat testovací notifikaci",
+ "unsavedRegistrations": "Neuložené přihlášky k Notifikacím",
+ "unsavedChanges": "Neuložené změny Notifikací",
+ "globalSettings": {
+ "desc": "Dočasně pozastavit notifikace pro vybrané kamery na všech registrovaných zařízeních.",
+ "title": "Globální nastavení"
+ },
+ "active": "Notifikace Aktivní",
+ "suspendTime": {
+ "suspend": "Pozastavit",
+ "12hours": "Pozastavit na 12 hodin",
+ "24hours": "Pozastavit na 24 hodin",
+ "untilRestart": "Pozastavit do restartu",
+ "5minutes": "Pozastavit na 5 minut",
+ "10minutes": "Pozastavit na 10 minut",
+ "30minutes": "Pozastavit na 30 minut",
+ "1hour": "Pozastavit na 1 hodinu"
+ },
+ "toast": {
+ "error": {
+ "registerFailed": "Nepodařilo se uložit registraci notifikací."
+ },
+ "success": {
+ "registered": "Notifikace byly úspěšně zaregistrovány. Pro odesílání notifikací (včetně testovací) je nutné Frigate restartovat.",
+ "settingSaved": "Nastavení notifikací bylo uloženo."
+ }
+ },
+ "cancelSuspension": "Zrušit Pozastavení",
+ "suspended": "Notifikace pozastaveny {{time}}"
+ },
+ "users": {
+ "dialog": {
+ "form": {
+ "password": {
+ "strength": {
+ "weak": "Slabé",
+ "medium": "Střední",
+ "strong": "Silné",
+ "veryStrong": "Velmi Silné",
+ "title": "Síla hesla: "
+ },
+ "match": "Hesla souhlasí",
+ "notMatch": "Hesla nesouhlasí",
+ "title": "Heslo",
+ "placeholder": "Vložit heslo",
+ "confirm": {
+ "title": "Potvrdit heslo",
+ "placeholder": "Potvrdit heslo"
+ }
+ },
+ "newPassword": {
+ "placeholder": "Vložte nové heslo",
+ "title": "Nové Heslo",
+ "confirm": {
+ "placeholder": "Zopakujte nové heslo"
+ }
+ },
+ "usernameIsRequired": "Uživatelské jméno je nutné",
+ "user": {
+ "title": "Uživatelské jméno",
+ "desc": "Povolena jsou pouze písmena, čísla, tečky a podtržítka.",
+ "placeholder": "Vložte uživatelské jméno"
+ },
+ "passwordIsRequired": "Je vyžadováno heslo"
+ },
+ "createUser": {
+ "title": "Vytvořit nového uživatele",
+ "desc": "Přidejte nový uživatelský účet a zadejte roli pro určení přístupu k jednotlivým částem uživatelského rozhraní Frigate.",
+ "usernameOnlyInclude": "Uživatelské jméno smí obsahovat pouze písmena, čísla, . nebo _",
+ "confirmPassword": "Potvrďte prosím heslo"
+ },
+ "deleteUser": {
+ "title": "Smazat Uživatele",
+ "desc": "Tuto akci nelze vrátit zpět. Uživatelský účet bude trvale smazán a veškerá s ním spojená data budou odstraněna.",
+ "warn": "Opravdu chcete smazat {{username}}?"
+ },
+ "changeRole": {
+ "roleInfo": {
+ "intro": "Vyberte odpovídající roli pro tohoto uživatele:",
+ "admin": "Správce",
+ "adminDesc": "Plný přístup ke všem funkcím.",
+ "viewer": "Divák",
+ "viewerDesc": "Omezení pouze na Živé dashboardy, Revize, Průzkumníka a Exporty."
+ },
+ "title": "Změnit Roli Uživatele",
+ "desc": "Aktualizovat oprávnění pro {{username}}",
+ "select": "Vyberte roli"
+ },
+ "passwordSetting": {
+ "updatePassword": "Aktualizovat heslo pro uživatele {{username}}",
+ "setPassword": "Nastavit Heslo",
+ "desc": "Vytvořte silné heslo pro zabezpečení tohoto účtu.",
+ "cannotBeEmpty": "Heslo nemůže být prázdné",
+ "doNotMatch": "Hesla nesouhlasí"
+ }
+ },
+ "table": {
+ "username": "Uživatelské jméno",
+ "actions": "Akce",
+ "noUsers": "Žádní uživatelé nebyli nalezeni.",
+ "changeRole": "Změnit roli uživatele",
+ "password": "Heslo",
+ "deleteUser": "Smazat uživatele",
+ "role": "Role"
+ },
+ "updatePassword": "Aktualizovat heslo",
+ "toast": {
+ "success": {
+ "createUser": "Uživatel {{user}} úspěšně vytvořen",
+ "deleteUser": "Uživatel {{user}} úspěšně odebrán",
+ "updatePassword": "Heslo úspěšně aktualizováno.",
+ "roleUpdated": "Role pro {{user}} aktualizována"
+ },
+ "error": {
+ "setPasswordFailed": "Chyba uložení hesla: {{errorMessage}}",
+ "createUserFailed": "Chyba vytvoření uživatele: {{errorMessage}}",
+ "deleteUserFailed": "Chyba při mazání uživatele: {{errorMessage}}",
+ "roleUpdateFailed": "Chyba při aktualizaci role: {{errorMessage}}"
+ }
+ },
+ "management": {
+ "desc": "Spravujte uživatelské účty této instance Frigate.",
+ "title": "Správa Uživatelů"
+ },
+ "addUser": "Přidat uživatele",
+ "title": "Uživatelé"
+ },
+ "motionDetectionTuner": {
+ "unsavedChanges": "Neuložené změny Ladiče Detekce Pohybu {{camera}}",
+ "improveContrast": {
+ "title": "Zlepšit Kontrast",
+ "desc": "Zlepšit kontrast pro tmavé scény Výchozí: ON"
+ },
+ "toast": {
+ "success": "Nastavení detekce pohybu bylo uloženo."
+ },
+ "title": "Ladič Detekce Pohybu",
+ "desc": {
+ "documentation": "Přečtěte si příručku Ladiče Detekce Pohybu",
+ "title": "Frigate používá detekci pohybu jako první kontrolu k ověření, zda se ve snímku děje něco, co stojí za další analýzu pomocí detekce objektů."
+ },
+ "Threshold": {
+ "title": "Práh",
+ "desc": "Prahová hodnota určuje, jak velká změna jasu pixelu je nutná, aby byl považován za pohyb. Výchozí: 30"
+ },
+ "contourArea": {
+ "title": "Obrysová Oblast",
+ "desc": "Hodnota plochy obrysu se používá k rozhodnutí, které skupiny změněných pixelů se kvalifikují jako pohyb. Výchozí: 10"
+ }
+ },
+ "enrichments": {
+ "title": "Nastavení obohacení",
+ "faceRecognition": {
+ "title": "Rozpoznání Obličeje",
+ "desc": "Rozpoznávání obličeje umožňuje přiřadit lidem jména a po rozpoznání jejich obličeje. Frigate přiřadí jméno osoby jako podštítek. Tyto informace jsou zahrnuty v uživatelském rozhraní, filtrech a také v oznámeních.",
+ "readTheDocumentation": "Přečtěte si Dokumentaci",
+ "modelSize": {
+ "label": "Velikost Modelu",
+ "desc": "Velikost modelu použitého pro rozpoznání obličeje.",
+ "small": {
+ "title": "malý",
+ "desc": "Použití metody malý využívá model vkládání obličejů FaceNet, který efektivně běží na většině procesorů."
+ },
+ "large": {
+ "title": "velký",
+ "desc": "Použití metody velký využívá model vkládání obličejů ArcFace a v případě potřeby se automaticky spustí na GPU."
+ }
+ }
+ },
+ "semanticSearch": {
+ "reindexNow": {
+ "confirmDesc": "Jste si jisti, že chcete znovu indexovat všechny vložené sledované objekty? Tento proces poběží na pozadí, ale může maximálně zatížit váš procesor a trvat poměrně dlouho. Průběh můžete sledovat na stránce Prozkoumat.",
+ "confirmTitle": "Potvrdit Reindexování",
+ "label": "Přeindexovat nyní",
+ "desc": "Reindexování regeneruje vložení pro všechny sledované objekty. Tento proces běží na pozadí a může maximálně zatížit váš procesor a trvat poměrně dlouho v závislosti na počtu sledovaných objektů.",
+ "confirmButton": "Přeindexovat",
+ "success": "Přeindexování úspěšně spuštěno.",
+ "alreadyInProgress": "Přeindexování je již spuštěno.",
+ "error": "Chyba spuštění přeindexování: {{errorMessage}}"
+ },
+ "title": "Sémantické Vyhledávání",
+ "desc": "Sémantické vyhledávání ve Frigate umožňuje najít sledované objekty v rámci vašich zkontrolovaných položek pomocí samotného obrázku, uživatelem definovaného textového popisu nebo automaticky generovaného popisu.",
+ "readTheDocumentation": "Přečtěte si Dokumentaci",
+ "modelSize": {
+ "label": "Velikost Modelu",
+ "desc": "Velikost modelu použitého pro vkládání sémantického vyhledávání.",
+ "small": {
+ "title": "malý",
+ "desc": "Použitím malého modelu se využívá kvantizovaná verze modelu, která spotřebovává méně RAM a běží rychleji na CPU s velmi zanedbatelným rozdílem v kvalitě vkládání."
+ },
+ "large": {
+ "title": "velký",
+ "desc": "Použití parametru velký využívá celý model Jina a v případě potřeby se automaticky spustí na GPU."
+ }
+ }
+ },
+ "birdClassification": {
+ "desc": "Klasifikace ptáků identifikuje známé ptáky pomocí kvantovaného modelu Tensorflow. Po rozpoznání známého ptáka se jeho běžný název přidá jako sub_label. Tato informace je zahrnuta v uživatelském rozhraní, filtrech a také v oznámeních.",
+ "title": "Klasifikace Ptáků"
+ },
+ "unsavedChanges": "Neuložené změny nastavení Obohacení",
+ "licensePlateRecognition": {
+ "title": "Rozpoznání SPZ",
+ "desc": "Frigate dokáže rozpoznávat SPZ vozidel a automaticky přidávat detekované znaky do pole recognized_license_plate nebo název známé SPZ jako sub_label k objektům typu auto. Běžným případem použití může být čtení SPZ aut vjíždějících na příjezdovou cestu nebo aut projíždějících po ulici.",
+ "readTheDocumentation": "Přečtěte si Dokumentaci"
+ },
+ "restart_required": "Nutný restart (nastavení Obohacení změněno)",
+ "toast": {
+ "success": "Nastavení Obohacení uloženo. Restartujte Frigate aby se změny aplikovaly.",
+ "error": "Chyba ukládání změn konfigurace: {{errorMessage}}"
+ }
+ }
+}
diff --git a/web/public/locales/cs/views/system.json b/web/public/locales/cs/views/system.json
new file mode 100644
index 000000000..fca20986f
--- /dev/null
+++ b/web/public/locales/cs/views/system.json
@@ -0,0 +1,180 @@
+{
+ "cameras": {
+ "info": {
+ "stream": "Stream {{idx}}",
+ "resolution": "Rozlišení:",
+ "error": "Chyba: {{error}}",
+ "unknown": "Neznámý",
+ "fps": "FPS:",
+ "audio": "Audio:",
+ "video": "Video:",
+ "fetching": "Získávám data o kameře",
+ "codec": "Kodek:",
+ "tips": {
+ "title": "Informace o sondování kamery"
+ },
+ "streamDataFromFFPROBE": "Data ze streamu jsou získávána pomocí ffprobe.",
+ "cameraProbeInfo": "{{camera}} Informace o sondování kamery",
+ "aspectRatio": "zachovat poměr stran"
+ },
+ "label": {
+ "camera": "kamera",
+ "ffmpeg": "FFmpeg",
+ "cameraFfmpeg": "{{camName}} FFmpeg",
+ "detect": "detekováno",
+ "skipped": "přeskočeno",
+ "capture": "zachyceno",
+ "overallFramesPerSecond": "celkový počet snímků za sekundu",
+ "overallDetectionsPerSecond": "celkový počet detekcí za sekundu",
+ "overallSkippedDetectionsPerSecond": "celkový počet přeskočených detekcí za sekundu",
+ "cameraCapture": "záznam {{camName}}",
+ "cameraDetect": "detekce {{camName}}",
+ "cameraFramesPerSecond": "{{camName}} snímků za sekundu",
+ "cameraDetectionsPerSecond": "{{camName}} detekcí za sekundu",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} přeskočených detekcí za sekundu"
+ },
+ "title": "Kamery",
+ "overview": "Přehled",
+ "framesAndDetections": "Snímky / Detekce",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Sondovaná data uložena do schránky."
+ },
+ "error": {
+ "unableToProbeCamera": "Nemohu sondovat kameru: {{errorMessage}}"
+ }
+ }
+ },
+ "stats": {
+ "cameraIsOffline": "{{camera}} je offline",
+ "healthy": "Systém je zdravý",
+ "reindexingEmbeddings": "Přeindexování vektorů ({{processed}} % dokončeno)",
+ "detectIsSlow": "{{detect}} je pomalé ({{speed}} ms)",
+ "detectIsVerySlow": "{{detect}} je velmi pomalé ({{speed}} ms)",
+ "detectHighCpuUsage": "{{camera}} má vysoké využití CPU detekcemi ({{detectAvg}} %)",
+ "ffmpegHighCpuUsage": "{{camera}} má vyské využití CPU FFmpegem ({{ffmpegAvg}}%)"
+ },
+ "enrichments": {
+ "embeddings": {
+ "face_recognition_speed": "Rychlost rozpoznávání obličeje",
+ "plate_recognition_speed": "Rychlost rozpoznávání SPZ",
+ "plate_recognition": "Rozpoznávání SPZ",
+ "face_recognition": "Rozpoznávání obličeje",
+ "image_embedding_speed": "Rychlost vkládání obrázku",
+ "text_embedding_speed": "Rychlost vkládání textu",
+ "text_embedding": "Vkládání textu",
+ "image_embedding": "Vkládání obrázku",
+ "face_embedding_speed": "Rychlost vkládání obličeje",
+ "yolov9_plate_detection_speed": "YOLOv9 rychlost detekce SPZ",
+ "yolov9_plate_detection": "YOLOv9 Detekce SPZ"
+ },
+ "infPerSecond": "Inferencí za sekundu",
+ "title": "Obohacení"
+ },
+ "general": {
+ "detector": {
+ "temperature": "Detekční teplota",
+ "title": "Detektory",
+ "inferenceSpeed": "Detekční rychlost",
+ "memoryUsage": "Detektor využití paměti",
+ "cpuUsage": "Detektor využití CPU"
+ },
+ "hardwareInfo": {
+ "title": "Informace o hardware",
+ "gpuInfo": {
+ "vainfoOutput": {
+ "processError": "Chyba procesu:",
+ "returnCode": "Návratový kód: {{code}}",
+ "processOutput": "Výstup procesu:",
+ "title": "Výstup Vainfo"
+ },
+ "nvidiaSMIOutput": {
+ "name": "Jméno: {{name}}",
+ "title": "Výstup Nvidia SMI",
+ "driver": "Ovladač: {{driver}}",
+ "cudaComputerCapability": "Výpočetní schopnost CUDA: {{cuda_compute}}",
+ "vbios": "Informace o VBios: {{vbios}}"
+ },
+ "copyInfo": {
+ "label": "Kopírovat informace o GPU"
+ },
+ "toast": {
+ "success": "Informace o GPU zkopírovány do schránky"
+ },
+ "closeInfo": {
+ "label": "Zavřít informace o GPU"
+ }
+ },
+ "npuUsage": "Využití NPU",
+ "npuMemory": "Paměť NPU",
+ "gpuUsage": "Využití CPU",
+ "gpuMemory": "Paměť GPU",
+ "gpuEncoder": "GPU kodér",
+ "gpuDecoder": "GPU Dekodér"
+ },
+ "otherProcesses": {
+ "title": "Ostatní procesy",
+ "processCpuUsage": "Využití CPU procesy",
+ "processMemoryUsage": "Využití paměti procesy"
+ },
+ "title": "Hlavní"
+ },
+ "storage": {
+ "cameraStorage": {
+ "storageUsed": "Úložiště",
+ "camera": "Kamera",
+ "title": "Úložiště kamery",
+ "unused": {
+ "title": "Nepoužité",
+ "tips": "Tato hodnota nemusí přesně reprezentovat volné místo dostupné pro Frigate, pokud máte na disku uloženy další soubory kromě nahrávek Frigate. Frigate nesleduje využití úložiště mimo své nahrávky."
+ },
+ "bandwidth": "Šířka pásma",
+ "unusedStorageInformation": "Informace o nepoužitém úložišti",
+ "percentageOfTotalUsed": "Procento celkem"
+ },
+ "recordings": {
+ "title": "Záznamy",
+ "earliestRecording": "Nejstarší dostupná nahrávka:",
+ "tips": "Tato hodnota uvádí celkové využití disku záznamy uloženými v databázi Frigate. Frigate nesleduje využití disku ostatními soubory na vašem disku."
+ },
+ "title": "Úložiště",
+ "overview": "Přehled"
+ },
+ "lastRefreshed": "Poslední aktualizace: ",
+ "documentTitle": {
+ "cameras": "Statistiky kamer – Frigate",
+ "storage": "Statistiky uložiště - Frigate",
+ "general": "Obecné statistiky - Frigate",
+ "enrichments": "Statistiky obohacení - Frigate",
+ "logs": {
+ "frigate": "Protokoly Frigate - Frigate",
+ "go2rtc": "Protokoly Go2RTC - Frigate",
+ "nginx": "Protokoly Nginx - Frigate"
+ }
+ },
+ "title": "Systém",
+ "logs": {
+ "copy": {
+ "label": "Kopírovat do schránky",
+ "success": "Protokoly zkopírovány do schránky",
+ "error": "Protokoly se nepodařilo zkopírovat do schránky"
+ },
+ "type": {
+ "label": "Typ",
+ "message": "Zpráva",
+ "timestamp": "Časové razítko",
+ "tag": "Štítek (Tag)"
+ },
+ "download": {
+ "label": "Stáhnout záznamy"
+ },
+ "tips": "Protokoly jsou streamovány ze serveru",
+ "toast": {
+ "error": {
+ "fetchingLogsFailed": "Chyba při načítání protokolů: {{errorMessage}}",
+ "whileStreamingLogs": "Chyba při streamování protokolů: {{errorMessage}}"
+ }
+ }
+ },
+ "metrics": "Systémové metriky"
+}
diff --git a/web/public/locales/de/audio.json b/web/public/locales/de/audio.json
new file mode 100644
index 000000000..0e0e50935
--- /dev/null
+++ b/web/public/locales/de/audio.json
@@ -0,0 +1,429 @@
+{
+ "speech": "Sprache",
+ "babbling": "Plappern",
+ "laughter": "Gelächter",
+ "bellow": "Gebrüll",
+ "whoop": "Jubel",
+ "whispering": "Flüstern",
+ "crying": "Weinen",
+ "bark": "Bellen",
+ "goat": "Ziege",
+ "car": "Auto",
+ "skateboard": "Skateboard",
+ "hair_dryer": "Haartrockner",
+ "animal": "Tier",
+ "boat": "Boot",
+ "blender": "Mixer",
+ "sink": "Waschbecken",
+ "scissors": "Schere",
+ "train": "Zug",
+ "clock": "Uhr",
+ "bird": "Vogel",
+ "motorcycle": "Motorrad",
+ "toothbrush": "Zahnbürste",
+ "bicycle": "Fahrrad",
+ "door": "Tür",
+ "keyboard": "Klaviatur",
+ "bus": "Bus",
+ "horse": "Pferd",
+ "cat": "Katze",
+ "dog": "Hund",
+ "sheep": "Schaf",
+ "mouse": "Maus",
+ "vehicle": "Fahrzeug",
+ "yell": "Schrei",
+ "snicker": "Gekicher",
+ "sigh": "Seufzer",
+ "choir": "Chor",
+ "yodeling": "Gejodel",
+ "chant": "Choral",
+ "mantra": "Mantra",
+ "child_singing": "Kindergesang",
+ "rapping": "Rappen",
+ "humming": "Summen",
+ "groan": "Stöhnen",
+ "grunt": "Grunzen",
+ "whistling": "Pfeifen",
+ "breathing": "Atmen",
+ "wheeze": "Keuchen",
+ "gasp": "nach Luft schnappen",
+ "pant": "Hecheln",
+ "snort": "Schnauben",
+ "cough": "Husten",
+ "sneeze": "Niesen",
+ "sniff": "Schnüffeln",
+ "run": "Laufen",
+ "shuffle": "Schlurfen",
+ "biting": "Beißen",
+ "gargling": "Gurgeln",
+ "stomach_rumble": "Magenknurren",
+ "burping": "Rülpsen",
+ "hiccup": "Schluckauf",
+ "fart": "Furz",
+ "hands": "Hände",
+ "finger_snapping": "Fingerschnippen",
+ "heartbeat": "Herzschlag",
+ "heart_murmur": "Herzgeräusch",
+ "cheering": "Gejubel",
+ "applause": "Beifall",
+ "chatter": "Geschwätz",
+ "crowd": "Menge",
+ "children_playing": "Kinderspiel",
+ "pets": "Haustiere",
+ "yip": "Aufjaulen",
+ "howl": "Heulen",
+ "growling": "Knurren",
+ "whimper_dog": "Hundegewimmer",
+ "purr": "Schnurren",
+ "meow": "Miauen",
+ "hiss": "Zischen",
+ "caterwaul": "Gejaule",
+ "livestock": "Vieh",
+ "clip_clop": "Klippklapp",
+ "neigh": "Wiehern",
+ "cattle": "Rinder",
+ "moo": "Muhen",
+ "cowbell": "Kuhglocke",
+ "oink": "Grunz",
+ "bleat": "Blöken",
+ "cluck": "Gackern",
+ "cock_a_doodle_doo": "Kikeriki",
+ "gobble": "Kollern",
+ "goose": "Gans",
+ "honk": "Hupen",
+ "coo": "Gurren",
+ "crow": "Krähe",
+ "dogs": "Hunde",
+ "rats": "Ratten",
+ "insect": "Insekt",
+ "fly": "Fliege",
+ "buzz": "Surren",
+ "frog": "Frosch",
+ "snake": "Schlange",
+ "hammond_organ": "Hammondorgel",
+ "synthesizer": "Synthesizer",
+ "sampler": "Probennehmer",
+ "drum_kit": "Schlagzeug",
+ "drum_machine": "Trommelsynthesizer",
+ "snare_drum": "Kleine Trommel",
+ "rimshot": "Rimshot",
+ "drum_roll": "Trommelwirbel",
+ "timpani": "Timpani",
+ "tabla": "Tabla",
+ "cymbal": "Becken",
+ "hi_hat": "Hi-Hat",
+ "wood_block": "Holzblock",
+ "tambourine": "Tamburin",
+ "tubular_bells": "Glockenspiel",
+ "camera": "Kamera",
+ "roar": "Brüllen",
+ "owl": "Eule",
+ "whale_vocalization": "Walgesang",
+ "mandolin": "Mandoline",
+ "chicken": "Huhn",
+ "sitar": "Sitar",
+ "ukulele": "Ukulele",
+ "tapping": "Klopfen",
+ "flapping_wings": "Flügelschlagen",
+ "strum": "Herumklimpern",
+ "electronic_organ": "Elektrische Orgel",
+ "duck": "Ente",
+ "quack": "Quaken",
+ "wild_animals": "Wildtiere",
+ "rattle": "Klappern",
+ "music": "Musik",
+ "pig": "Schwein",
+ "chirp": "Zwitschern",
+ "guitar": "Gitarre",
+ "plucked_string_instrument": "Zupfinstrument",
+ "hoot": "Heulen",
+ "acoustic_guitar": "Akustikgitarre",
+ "electric_piano": "Elektrisches Klavier",
+ "cricket": "Grille",
+ "mosquito": "Mücke",
+ "musical_instrument": "Musikinstrument",
+ "steel_guitar": "Hawaiigitarre",
+ "organ": "Orgel",
+ "drum": "Trommel",
+ "roaring_cats": "Katzengeschrei",
+ "footsteps": "Schritte",
+ "chewing": "Kauen",
+ "caw": "Krächzen",
+ "piano": "Klavier",
+ "clapping": "Klatschen",
+ "patter": "Trippeln",
+ "percussion": "Percussion",
+ "singing": "Gesang",
+ "bass_guitar": "Bassgitarre",
+ "fowl": "Geflügel",
+ "squawk": "Kreischen",
+ "pigeon": "Taube",
+ "snoring": "Schnarchen",
+ "synthetic_singing": "Synthetischer Gesang",
+ "bow_wow": "Wau-Wau",
+ "turkey": "Truthahn",
+ "croak": "Krächzen",
+ "electric_guitar": "Elektrische Gitarre",
+ "throat_clearing": "Räuspern",
+ "gong": "Gong",
+ "banjo": "Banjo",
+ "zither": "Zitter",
+ "harpsichord": "Cembalo",
+ "bass_drum": "Basstrommel",
+ "maraca": "Maraca",
+ "marimba": "Marimba",
+ "glockenspiel": "Glockenspiel",
+ "vibraphone": "Vibrafon",
+ "steelpan": "Stahlpfanne",
+ "brass_instrument": "Blechblasinstrument",
+ "french_horn": "Waldhorn",
+ "string_section": "Streicher",
+ "violin": "Geige",
+ "pizzicato": "Pizzikato",
+ "saxophone": "Saxophon",
+ "clarinet": "Klarinette",
+ "jingle_bell": "Jingle Bell",
+ "chime": "Glockenspiel",
+ "bagpipes": "Dudelsack",
+ "theremin": "Theremin",
+ "pop_music": "Popmusik",
+ "bowed_string_instrument": "Streichinstrument",
+ "didgeridoo": "Didgeridoo",
+ "wind_chime": "Windspiel",
+ "flute": "Flöte",
+ "church_bell": "Kirchenglocke",
+ "bell": "Glocke",
+ "orchestra": "Orchester",
+ "wind_instrument": "Blasinstrument",
+ "trombone": "Posaune",
+ "bicycle_bell": "Fahrradklingel",
+ "trumpet": "Trompete",
+ "harmonica": "Mundharmonika",
+ "double_bass": "Kontrabass",
+ "cello": "Cello",
+ "harp": "Harfe",
+ "tuning_fork": "Stimmgabel",
+ "accordion": "Akkordeon",
+ "singing_bowl": "Klangschale",
+ "mallet_percussion": "Mallet-Schlagzeug",
+ "hip_hop_music": "Hip-Hop-Musik",
+ "beatboxing": "Beatboxen",
+ "punk_rock": "Punkrock",
+ "grunge": "Grunge",
+ "progressive_rock": "Progressiver Rock",
+ "psychedelic_rock": "Psychedelischer Rock",
+ "rhythm_and_blues": "Rythm and Blues",
+ "soul_music": "Soulmusik",
+ "country": "Country",
+ "swing_music": "Swingmusik",
+ "bluegrass": "Bluegrass",
+ "funk": "Funk",
+ "folk_music": "Folkmusik",
+ "disco": "Disco",
+ "classical_music": "Klassische Musik",
+ "opera": "Oper",
+ "electronic_music": "Elektronische Musik",
+ "house_music": "House Musik",
+ "dubstep": "Dubstep",
+ "electronica": "Elektronische Medien",
+ "electronic_dance_music": "Elektronische Tanzmusik",
+ "ambient_music": "Hintergrundmusik",
+ "trance_music": "Trance-Musik",
+ "music_of_latin_america": "Lateinamerikanische Musik",
+ "salsa_music": "Salsa-Musik",
+ "blues": "Blues",
+ "vocal_music": "Vokalmusik",
+ "a_capella": "A Capella",
+ "music_of_africa": "Afrikanische Musik",
+ "gospel_music": "Gospel-Musik",
+ "music_of_asia": "Asiatische Musik",
+ "carnatic_music": "Karnatische Musik",
+ "music_of_bollywood": "Bollywood-Musik",
+ "traditional_music": "Traditionelle Musik",
+ "independent_music": "Eigenständige Musik",
+ "song": "Lied",
+ "background_music": "Hintergrundmusik",
+ "theme_music": "Titelmusik",
+ "lullaby": "Schlaflied",
+ "christmas_music": "Weihnachtsmusik",
+ "dance_music": "Tanzmusik",
+ "happy_music": "Fröhliche Musik",
+ "tender_music": "Sanfte Musik",
+ "exciting_music": "Spannende Musik",
+ "scary_music": "Gruselige Musik",
+ "wind": "Wind",
+ "wind_noise": "Windrauschen",
+ "rain_on_surface": "Regen auf einer Oberfläche",
+ "stream": "Stream",
+ "waterfall": "Wasserfall",
+ "steam": "Dampf",
+ "fire": "Feuer",
+ "crackle": "Knistern",
+ "sailboat": "Segelboot",
+ "ship": "Schiff",
+ "motor_vehicle": "Kraftfahrzeug",
+ "toot": "tuten",
+ "car_alarm": "Autoalarm",
+ "power_windows": "Elektrische Fensterheber",
+ "tire_squeal": "Reifenquietschen",
+ "car_passing_by": "Vorbeifahrendes Auto",
+ "air_brake": "Druckluftbremse",
+ "air_horn": "Autohupe",
+ "reversing_beeps": "Rückfahrpiepser",
+ "ice_cream_truck": "Eiswagen",
+ "emergency_vehicle": "Einsatzfahrzeug",
+ "police_car": "Polizeiwagen",
+ "ambulance": "Krankenwagen",
+ "fire_engine": "Feuerwehrauto",
+ "traffic_noise": "Verkehrslärm",
+ "rail_transport": "Schienentransport",
+ "train_whistle": "Zugpfeife",
+ "train_horn": "Zugsignalhorn",
+ "train_wheels_squealing": "Quietschende Eisenbahnräder",
+ "aircraft": "Flugzeug",
+ "aircraft_engine": "Flugzeugmotor",
+ "jet_engine": "Strahltriebwerk",
+ "propeller": "Propeller",
+ "helicopter": "Hubschrauber",
+ "engine": "Motor",
+ "dental_drill's_drill": "Zahnbohrer",
+ "lawn_mower": "Rasenmäher",
+ "medium_engine": "Mittlerer Motor",
+ "heavy_engine": "Schwerer Motor",
+ "engine_knocking": "Motorklopfen",
+ "engine_starting": "Motorstart",
+ "idling": "Leerlauf",
+ "doorbell": "Türklingel",
+ "ding-dong": "BimBam",
+ "sliding_door": "Schiebetür",
+ "slam": "Knall",
+ "knock": "Klopfen",
+ "tap": "Schlag",
+ "squeak": "Quietschen",
+ "drawer_open_or_close": "Schublade Öffnen oder Schließen",
+ "dishes": "Geschirr",
+ "chopping": "Kleinhacken",
+ "frying": "Braten",
+ "microwave_oven": "Mikrowelle",
+ "water_tap": "Wasserhahn",
+ "bathtub": "Badewanne",
+ "toilet_flush": "Toilettenspülung",
+ "vacuum_cleaner": "Staubsauger",
+ "zipper": "Reißverschluss",
+ "keys_jangling": "Schlüsselanhänger",
+ "coin": "Münze",
+ "electric_shaver": "Rasierapparat",
+ "typing": "Tippen",
+ "typewriter": "Schreibmaschine",
+ "computer_keyboard": "Computertastatur",
+ "telephone": "Telefon",
+ "telephone_bell_ringing": "Telefonklingeln",
+ "telephone_dialing": "Telefonwahl",
+ "dial_tone": "Wählton",
+ "alarm_clock": "Wecker",
+ "siren": "Sirene",
+ "civil_defense_siren": "Zivilschutzsirene",
+ "smoke_detector": "Rauchmelder",
+ "foghorn": "Nebelhorn",
+ "whistle": "Pfeife",
+ "steam_whistle": "Dampfpfeife",
+ "mechanisms": "Mechanismen",
+ "ratchet": "Ratsche",
+ "tick": "Ticken",
+ "gears": "Getriebe",
+ "mechanical_fan": "Mechanischer Lüfter",
+ "printer": "Drucker",
+ "tools": "Werkzeuge",
+ "hammer": "Hammer",
+ "jackhammer": "Presslufthammer",
+ "sawing": "Sägen",
+ "power_tool": "Elektrowerkzeug",
+ "drill": "Bohrer",
+ "explosion": "Explosion",
+ "gunshot": "Schuss",
+ "fusillade": "Gewehrfeuer",
+ "artillery_fire": "Artilleriefeuer",
+ "cap_gun": "Maschinenpistole",
+ "fireworks": "Feuerwerk",
+ "firecracker": "Feuerwerkskörper",
+ "eruption": "Ausbruch",
+ "wood": "Holz",
+ "splinter": "Splittern",
+ "crack": "Knacken",
+ "glass": "Glas",
+ "chink": "Klirren",
+ "shatter": "Zerspringen",
+ "silence": "Stille",
+ "environmental_noise": "Umgebungsgeräusch",
+ "static": "Rauschen",
+ "pink_noise": "Rosa Rauschen",
+ "television": "Fernsehgerät",
+ "radio": "Radio",
+ "scream": "Schrei",
+ "heavy_metal": "Heavy Metal",
+ "rock_music": "Rockmusik",
+ "techno": "Techno",
+ "reggae": "Reggae",
+ "rain": "Regen",
+ "gurgling": "Plätschern",
+ "jazz": "Jazz",
+ "video_game_music": "Videospielmusik",
+ "rock_and_roll": "Rock and Roll",
+ "scratching": "Scratching",
+ "thunderstorm": "Gewitter",
+ "christian_music": "Christliche Musik",
+ "ska": "Ska",
+ "rustling_leaves": "Blätterrascheln",
+ "jingle": "Jingle",
+ "middle_eastern_music": "Orientalische Musik",
+ "drum_and_bass": "Trommel und Bass",
+ "flamenco": "Flamenco",
+ "music_for_children": "Kindermusik",
+ "new-age_music": "New-Age-Musik",
+ "afrobeat": "Afrobeat",
+ "wedding_music": "Hochzeitsmusik",
+ "soundtrack_music": "Soundtrack Musik",
+ "raindrop": "Regentropfen",
+ "sad_music": "Traurige Musik",
+ "angry_music": "Wütende Musik",
+ "ocean": "Ozean",
+ "thunder": "Donner",
+ "water": "Wasser",
+ "waves": "Wellen",
+ "race_car": "Rennwagen",
+ "rowboat": "Ruderboot",
+ "truck": "LKW",
+ "motorboat": "Motorboot",
+ "chainsaw": "Kettensäge",
+ "railroad_car": "Eisenbahnwaggon",
+ "cupboard_open_or_close": "Schrank Öffnen oder Schließen",
+ "alarm": "Alarm",
+ "filing": "Feilen",
+ "chop": "Hacken",
+ "single-lens_reflex_camera": "Spiegelreflexkamera",
+ "light_engine": "Lichtmaschine",
+ "buzzer": "Summer",
+ "sound_effect": "Geräuscheffekt",
+ "accelerating": "Beschleunigen",
+ "electric_toothbrush": "Elektrische Zahnbürste",
+ "busy_signal": "Besetztzeichen",
+ "pulleys": "Riemenscheiben",
+ "sewing_machine": "Nähmaschine",
+ "air_conditioning": "Klimaanlage",
+ "burst": "Platzen",
+ "skidding": "Schleudern",
+ "subway": "U-Bahn",
+ "tick-tock": "Ticktack",
+ "shuffling_cards": "Karten mischen",
+ "cutlery": "Besteck",
+ "cash_register": "Kasse",
+ "ringtone": "Klingelton",
+ "writing": "Schreiben",
+ "fixed-wing_aircraft": "Starrflügler",
+ "fire_alarm": "Feueralarm",
+ "white_noise": "Weißes Rauschen",
+ "sanding": "Schleifen",
+ "machine_gun": "Maschinengewehr",
+ "boom": "Dröhnen",
+ "field_recording": "Außenaufnahme"
+}
diff --git a/web/public/locales/de/common.json b/web/public/locales/de/common.json
new file mode 100644
index 000000000..8a3eff88c
--- /dev/null
+++ b/web/public/locales/de/common.json
@@ -0,0 +1,268 @@
+{
+ "time": {
+ "untilForTime": "Bis {{time}}",
+ "last7": "Letzte 7 Tage",
+ "untilForRestart": "Bis Frigate neu startet.",
+ "today": "Heute",
+ "yesterday": "Gestern",
+ "thisWeek": "Diese Woche",
+ "lastMonth": "Letzter Monat",
+ "5minutes": "5 Minuten",
+ "12hours": "12 Stunden",
+ "24hours": "24 Stunden",
+ "month_one": "{{time}} Monat",
+ "month_other": "{{time}} Monate",
+ "d": "{{time}} Tag",
+ "day_one": "{{time}} Tag",
+ "day_other": "{{time}} Tage",
+ "m": "{{time}} Minute",
+ "minute_one": "{{time}} Minute",
+ "minute_other": "{{time}} Minuten",
+ "s": "{{time}} Sekunde",
+ "second_one": "{{time}} Sekunde",
+ "second_other": "{{time}} Sekunden",
+ "formattedTimestamp2": {
+ "24hour": "dd. MMM HH:mm:ss",
+ "12hour": "dd.MM hh:mm:ss"
+ },
+ "last30": "Letzte 30 Tage",
+ "10minutes": "10 Minuten",
+ "thisMonth": "Dieser Monat",
+ "yr": "{{time}}Jahr",
+ "year_one": "{{time}}Jahr",
+ "year_other": "{{time}}Jahre",
+ "hour_one": "{{time}} Stunde",
+ "hour_other": "{{time}} Stunden",
+ "last14": "Letzte 14 Tage",
+ "30minutes": "30 Minuten",
+ "1hour": "1 Stunde",
+ "lastWeek": "Letzte Woche",
+ "h": "{{time}} Stunde",
+ "ago": "{{timeAgo}} her",
+ "untilRestart": "Bis zum Neustart",
+ "justNow": "Gerade",
+ "pm": "nachmittags",
+ "mo": "{{time}}Monat",
+ "formattedTimestamp": {
+ "12hour": "d. MMM, hh:mm:ss aaa",
+ "24hour": "dd. MMM, hh:mm:ss aaa"
+ },
+ "formattedTimestampWithYear": {
+ "24hour": "%-d %b %Y, %H:%M",
+ "12hour": "%-d %b %Y, %H:%M"
+ },
+ "formattedTimestampOnlyMonthAndDay": "%-d %b",
+ "am": "vormittags",
+ "formattedTimestampExcludeSeconds": {
+ "24hour": "%-d %b, %H:%M",
+ "12hour": "%-d %b, %H:%M"
+ },
+ "formattedTimestampHourMinute": {
+ "12hour": "h:mm aaa",
+ "24hour": "HH:mm"
+ },
+ "formattedTimestampHourMinuteSecond": {
+ "12hour": "h:mm:ss aaa",
+ "24hour": "HH:mm:ss"
+ },
+ "formattedTimestampMonthDayHourMinute": {
+ "12hour": "MMM d, h:mm aaa",
+ "24hour": "MMM d, HH:mm"
+ },
+ "formattedTimestampMonthDayYearHourMinute": {
+ "12hour": "MMM d yyyy, h:mm aaa",
+ "24hour": "MMM d yyyy, HH:mm"
+ },
+ "formattedTimestampMonthDay": "MMM d",
+ "formattedTimestampFilename": {
+ "12hour": "MM-dd-yy-h-mm-ss-a",
+ "24hour": "MM-dd-yy-HH-mm-ss"
+ },
+ "formattedTimestampMonthDayYear": {
+ "12hour": "d. MMM yyyy",
+ "24hour": "d. MMM yyyy"
+ }
+ },
+ "button": {
+ "save": "Speichern",
+ "delete": "Entfernen",
+ "apply": "Anwenden",
+ "enabled": "Aktiviert",
+ "enable": "Aktivieren",
+ "disabled": "deaktiviert",
+ "disable": "deaktivieren",
+ "saving": "Speichere…",
+ "close": "Schließen",
+ "back": "Zurück",
+ "history": "Historie",
+ "cameraAudio": "Kamera Ton",
+ "yes": "JA",
+ "info": "Info",
+ "play": "Abspielen",
+ "export": "Exportieren",
+ "deleteNow": "Jetzt löschen",
+ "next": "Nächster",
+ "fullscreen": "Vollbild",
+ "no": "Nein",
+ "off": "AUS",
+ "reset": "Zurücksetzen",
+ "copy": "Kopieren",
+ "twoWayTalk": "bidirecktionales Gespräch",
+ "exitFullscreen": "Vollbild verlassen",
+ "unselect": "Selektion aufheben",
+ "copyCoordinates": "Kopiere Koordinaten",
+ "done": "Fertig",
+ "edit": "Bearbeiten",
+ "download": "Herunterladen",
+ "cancel": "Abbrechen",
+ "pictureInPicture": "Bild in Bild",
+ "on": "AN",
+ "suspended": "Pausierte",
+ "unsuspended": "fortsetzen"
+ },
+ "label": {
+ "back": "Zurück"
+ },
+ "menu": {
+ "configurationEditor": "Konfigurationseditor",
+ "languages": "Sprachen",
+ "language": {
+ "withSystem": {
+ "label": "Sprache der Systemeinstellungen verwenden"
+ },
+ "en": "Englisch",
+ "zhCN": "简体中文 (Vereinfachtes Chinesisch)",
+ "fr": "Französisch",
+ "es": "Spanisch",
+ "ar": "Arabisch",
+ "pt": "Portugiesisch",
+ "de": "Deutsch",
+ "it": "Italienisch",
+ "nl": "Niederländisch",
+ "sv": "Schwedisch",
+ "cs": "Tschechisch",
+ "ko": "Koreanisch",
+ "pl": "Polnisch",
+ "el": "Griechisch",
+ "ro": "Rumänisch",
+ "hu": "Ungarisch",
+ "fi": "Finnisch",
+ "ru": "Russisch",
+ "ja": "Japanisch",
+ "tr": "Türkisch",
+ "da": "Dänisch",
+ "hi": "Hindi",
+ "nb": "Norwegisch",
+ "vi": "Vietnamesisch",
+ "fa": "Persisch",
+ "uk": "Ukrainisch",
+ "he": "Hebräisch",
+ "sk": "Slowakisch",
+ "yue": "粵語 (Kantonesisch)",
+ "th": "ไทย (Thailändisch)",
+ "ca": "Català (Katalanisch)"
+ },
+ "appearance": "Erscheinung",
+ "theme": {
+ "label": "Design-Thema",
+ "blue": "Blau",
+ "green": "Grün",
+ "default": "Standard",
+ "nord": "Norden",
+ "red": "Rot",
+ "contrast": "Hoher Kontrast",
+ "highcontrast": "Hoher Kontrast"
+ },
+ "help": "Hilfe",
+ "documentation": {
+ "title": "Dokumentation",
+ "label": "Frigate Dokumentation"
+ },
+ "live": {
+ "allCameras": "Alle Kameras",
+ "cameras": {
+ "title": "Kameras",
+ "count_one": "{{count}} Kamera",
+ "count_other": "{{count}} Kameras"
+ },
+ "title": "Live"
+ },
+ "review": "Überprüfen",
+ "restart": "Frigate neu starten",
+ "darkMode": {
+ "light": "Hell",
+ "label": "Dunkler Modus",
+ "dark": "Dunkel",
+ "withSystem": {
+ "label": "Verwende Systemeinstellungen fuer hell oder dunkel Modus"
+ }
+ },
+ "system": "System",
+ "configuration": "Konfigurieren",
+ "withSystem": "System",
+ "settings": "Einstellungen",
+ "systemLogs": "Systemprotokoll",
+ "systemMetrics": "Systemstatistiken",
+ "explore": "Erkunden",
+ "faceLibrary": "Gesichterbibliothek",
+ "user": {
+ "title": "Benutzer",
+ "account": "Benutzerkonto",
+ "current": "Aktueller Benutzer: {{user}}",
+ "setPassword": "Passwort setzen",
+ "anonymous": "anonym",
+ "logout": "Abmelden"
+ },
+ "uiPlayground": "Testgebiet für Benutzeroberfläche",
+ "export": "Exportieren"
+ },
+ "unit": {
+ "speed": {
+ "mph": "mph",
+ "kph": "km/h"
+ },
+ "length": {
+ "feet": "Fuß",
+ "meters": "Meter"
+ }
+ },
+ "toast": {
+ "copyUrlToClipboard": "URL in zwischenablage kopiert.",
+ "save": {
+ "error": {
+ "title": "Speichern der Konfigurationsänderungen gescheitert: {{errorMessage}}",
+ "noMessage": "Speichern der Konfigurationsänderungen gescheitert"
+ },
+ "title": "Speichern"
+ }
+ },
+ "role": {
+ "title": "Rolle",
+ "admin": "Administrator",
+ "viewer": "Zuschauer",
+ "desc": "Administratoren haben vollen Zugang zu allen funktionen der Frigate Benutzeroberfläche. Zuschauer können nur Kameras betrachten, erkannte Objekte überprüfen und historische Aufnahmen durchsehen."
+ },
+ "pagination": {
+ "previous": {
+ "title": "Voherige",
+ "label": "Zur voherigen Seite wechseln"
+ },
+ "next": {
+ "title": "Nächste",
+ "label": "Zur nächsten Seite wechseln"
+ },
+ "more": "Weitere Seiten",
+ "label": "Seitennummerierung"
+ },
+ "notFound": {
+ "title": "404",
+ "desc": "Seite nicht gefunden",
+ "documentTitle": "Nicht gefunden - Frigate"
+ },
+ "selectItem": "Wähle {{item}}",
+ "accessDenied": {
+ "desc": "Du hast keine Berechtigung diese Seite anzuzeigen.",
+ "documentTitle": "Zugang verweigert - Frigate",
+ "title": "Zugang verweigert"
+ }
+}
diff --git a/web/public/locales/de/components/auth.json b/web/public/locales/de/components/auth.json
new file mode 100644
index 000000000..8cbd1ff8c
--- /dev/null
+++ b/web/public/locales/de/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "login": "Anmeldung",
+ "errors": {
+ "passwordRequired": "Kennwort ist erforderlich",
+ "loginFailed": "Anmeldung gescheitert",
+ "webUnknownError": "Unbekannter Fehler. Prüfe Konsolenlogs.",
+ "usernameRequired": "Benutzername ist erforderlich",
+ "rateLimit": "Anmeldelimit überschritten. Bitte später erneut versuchen.",
+ "unknownError": "Unbekannter Fehler. Prüfe Logs."
+ },
+ "user": "Benutzername",
+ "password": "Kennwort"
+ }
+}
diff --git a/web/public/locales/de/components/camera.json b/web/public/locales/de/components/camera.json
new file mode 100644
index 000000000..fb6f89e74
--- /dev/null
+++ b/web/public/locales/de/components/camera.json
@@ -0,0 +1,86 @@
+{
+ "group": {
+ "delete": {
+ "label": "Kameragruppe löschen",
+ "confirm": {
+ "title": "Löschen bestätigen",
+ "desc": "Willst Du die Kameragruppe {{name}} wirklich löschen?"
+ }
+ },
+ "name": {
+ "label": "Name",
+ "placeholder": "Gib einen Namen ein…",
+ "errorMessage": {
+ "exists": "Name der Kameragruppe bereits vorhanden.",
+ "nameMustNotPeriod": "Name einer Kameragruppe darf keinen Punkt enthalten.",
+ "mustLeastCharacters": "Name einer Kameragruppe muss mindestens 2 Zeichen haben.",
+ "invalid": "Ungültiger Name für eine Kameragruppe."
+ }
+ },
+ "icon": "Icon",
+ "camera": {
+ "setting": {
+ "label": "Kamera Streaming Einstellungen",
+ "audioIsAvailable": "Audio ist für diesen Stream verfügbar",
+ "audioIsUnavailable": "Audio ist für diesen Stream nicht verfügbar",
+ "streamMethod": {
+ "label": "Streaming-Methode",
+ "method": {
+ "noStreaming": {
+ "label": "Kein Streaming",
+ "desc": "Kamerabilder werden nur einmal pro Minute aktualisiert und es wird kein Live Streaming geben."
+ },
+ "smartStreaming": {
+ "label": "Smart Streaming (empfohlen)",
+ "desc": "Smart Streaming wird Deine Kamera einmal in der Minute aktualisieren, wenn sich keine erkennbare Aktivität ereignet, um Bandbreite und Ressourcen zu schonen. Sobald eine Aktivität erkannt wird, wechselt das Standbild sofort zu einem Live Stream."
+ },
+ "continuousStreaming": {
+ "label": "Kontinuierliches Streaming",
+ "desc": {
+ "title": "Das auf einem Dashboard sichtbare Kamerabild ist immer ein Live Stream, selbst wenn keine Aktivität erkannt wird.",
+ "warning": "Kontinuierliches Streaming kann zu hoher Bandbreitenausnutzung und zu Performanceproblemen führen. Bitte behutsam nutzen."
+ }
+ }
+ },
+ "placeholder": "Wähle eine streaming Methode"
+ },
+ "title": "{{cameraName}} Streaming Einstellungen",
+ "compatibilityMode": {
+ "desc": "Aktiviere diese Option nur, falls der Live Stream Deiner Kamera Farbstörungen zeigt und eine Diagonale Linie auf der rechten Seite des Bildes hat.",
+ "label": "Kompatibilitätsmodus"
+ },
+ "audio": {
+ "tips": {
+ "title": "Audio muss in der Kamera verfügbar und in go2rtc für diesen Stream konfiguriert sein.",
+ "document": "Lies die Dokumentation. "
+ }
+ },
+ "desc": "Ändere die Live Stream Optionen für das Dashboard dieser Kameragruppe. Diese Einstellungen sind geräte-/browserspezifisch.",
+ "stream": "Stream",
+ "placeholder": "Wähle einen Stream"
+ }
+ },
+ "add": "Kameragruppe hinzufügen",
+ "cameras": {
+ "label": "Kameras",
+ "desc": "Wähle Kameras für diese Gruppe aus."
+ },
+ "label": "Kameragruppen",
+ "edit": "Kameragruppe bearbeiten",
+ "success": "Kameragruppe {{name}} wurde gespeichert."
+ },
+ "debug": {
+ "options": {
+ "title": "Optionen",
+ "hideOptions": "Verberge Optionen",
+ "label": "Einstellungen",
+ "showOptions": "Zeige Optionen"
+ },
+ "timestamp": "Zeitstempel",
+ "zones": "Zonen",
+ "mask": "Maske",
+ "motion": "Bewegung",
+ "regions": "Regionen",
+ "boundingBox": "Begrenzungsrechteck"
+ }
+}
diff --git a/web/public/locales/de/components/dialog.json b/web/public/locales/de/components/dialog.json
new file mode 100644
index 000000000..cedd1c114
--- /dev/null
+++ b/web/public/locales/de/components/dialog.json
@@ -0,0 +1,123 @@
+{
+ "restart": {
+ "title": "Sind Sie sicher, dass Sie Frigate neustarten wollen?",
+ "restarting": {
+ "title": "Frigate startet neu",
+ "content": "Diese Seite wird in {{countdown}} Sekunde(n) aktualisiert.",
+ "button": "Neuladen erzwingen"
+ },
+ "button": "Neustarten"
+ },
+ "explore": {
+ "plus": {
+ "review": {
+ "true": {
+ "label": "Bestätigen Sie das Label für Frigate Plus",
+ "true_one": "Das ist ein/eine {{label}}",
+ "true_other": "Dies sind {{label}}"
+ },
+ "state": {
+ "submitted": "Übermittelt"
+ },
+ "false": {
+ "false_one": "Das ist kein(e) {{label}}",
+ "false_other": "Das sind kein(e) {{label}}",
+ "label": "Bestätige dieses Label nicht für Frigate Plus"
+ },
+ "question": {
+ "label": "Bestätige diese Beschriftung für Frigate Plus",
+ "ask_a": "Ist dieses Objekt ein {{label}}?",
+ "ask_an": "Ist dieses Objekt ein {{label}}?",
+ "ask_full": "Ist dieses Objekt ein {{untranslatedLabel}} ({{translatedLabel}})?"
+ }
+ },
+ "submitToPlus": {
+ "label": "An Frigate+ übermitteln",
+ "desc": "Objekte an Orten die du vermeiden möchtest, sind keine Fehlalarme. Wenn du sie als Fehlalarme meldest, verwirrst du das Modell."
+ }
+ },
+ "video": {
+ "viewInHistory": "Im Verlauf ansehen"
+ }
+ },
+ "export": {
+ "time": {
+ "fromTimeline": "Aus der Zeitleiste auswählen",
+ "start": {
+ "title": "Startzeit",
+ "label": "Startzeit auswählen"
+ },
+ "end": {
+ "label": "Endzeit auswählen",
+ "title": "Endzeit"
+ },
+ "lastHour_one": "Letzte Stunde",
+ "lastHour_other": "Letzte {{count}} Stunden",
+ "custom": "Benutzerdefiniert"
+ },
+ "name": {
+ "placeholder": "Export benennen"
+ },
+ "select": "Auswählen",
+ "selectOrExport": "Auswählen oder Exportieren",
+ "toast": {
+ "error": {
+ "endTimeMustAfterStartTime": "Die Endzeit darf nicht vor der Startzeit liegen",
+ "failed": "Fehler beim Starten des Exports: {{error}}",
+ "noVaildTimeSelected": "Kein gültiger Zeitraum ausgewählt"
+ },
+ "success": "Export erfolgreich gestartet. Die Datei befindet sich im Ordner /exports."
+ },
+ "fromTimeline": {
+ "saveExport": "Export speichern",
+ "previewExport": "Exportvorschau"
+ },
+ "export": "Exportieren"
+ },
+ "streaming": {
+ "restreaming": {
+ "disabled": "Für diese Kamera ist das Restreaming nicht aktiviert.",
+ "desc": {
+ "readTheDocumentation": "Weitere Informationen in der Dokumentation",
+ "title": "Konfiguriere go2rtc, um erweiterte Live-Ansichtsoptionen und Audio für diese Kamera zu nutzen."
+ }
+ },
+ "showStats": {
+ "label": "Stream-Statistiken anzeigen",
+ "desc": "Stream-Statistiken werden bei aktivierter Option als Overlay im Kamera-Feed eingeblendet."
+ },
+ "debugView": "Debug-Ansicht",
+ "label": "Stream"
+ },
+ "search": {
+ "saveSearch": {
+ "label": "Suche speichern",
+ "desc": "Gib einen Namen für diese gespeicherte Suche an.",
+ "placeholder": "Gib einen Namen für die Suche ein",
+ "overwrite": "{{searchName}} existiert bereits. Beim Speichern wird der vorhandene Wert überschrieben.",
+ "button": {
+ "save": {
+ "label": "Diese Suche speichern"
+ }
+ },
+ "success": "Die Suche {{searchName}} wurde gespeichert."
+ }
+ },
+ "recording": {
+ "confirmDelete": {
+ "title": "Bestätige Löschung",
+ "desc": {
+ "selected": "Bist du sicher, dass du alle aufgezeichneten Videos, die mit diesem Beitrag verbunden sind, löschen möchtest?Erkennungsstream der Kamera {{cameraName}} empfangen, bitte Logs überprüfen"
+ },
+ "cameraDisabled": "Kamera ist deaktiviert",
+ "stats": {
+ "streamType": {
+ "title": "Stream Typ:",
+ "short": "Typ"
+ },
+ "bandwidth": {
+ "title": "Bandbreite:",
+ "short": "Bandbreite"
+ },
+ "latency": {
+ "title": "Latenz:",
+ "value": "{{seconds}} Sekunden",
+ "short": {
+ "title": "Lazenz",
+ "value": "{{seconds}} s"
+ }
+ },
+ "droppedFrames": {
+ "short": {
+ "title": "Ausgelassen",
+ "value": "{{droppedFrames}} Bilder"
+ },
+ "title": "Ausgelassene Bilder:"
+ },
+ "decodedFrames": "Dekodierte Bilder:",
+ "droppedFrameRate": "Verlorene Bildrate:",
+ "totalFrames": "Bilder insgesamt:"
+ },
+ "toast": {
+ "error": {
+ "submitFrigatePlusFailed": "Bild an Frigate+ senden gescheitert"
+ },
+ "success": {
+ "submittedFrigatePlus": "Bild erfolgreich an Frigate+ gesendet"
+ }
+ },
+ "noPreviewFoundFor": "Keine Vorschau für {{cameraName}} gefunden"
+}
diff --git a/web/public/locales/de/objects.json b/web/public/locales/de/objects.json
new file mode 100644
index 000000000..57fb35617
--- /dev/null
+++ b/web/public/locales/de/objects.json
@@ -0,0 +1,120 @@
+{
+ "boat": "Boot",
+ "traffic_light": "Ampel",
+ "fire_hydrant": "Hydrant",
+ "stop_sign": "Stoppschild",
+ "bench": "Bank",
+ "bird": "Vogel",
+ "cow": "Kuh",
+ "elephant": "Elefant",
+ "bear": "Bär",
+ "zebra": "Zebra",
+ "giraffe": "Giraffe",
+ "shoe": "Schuh",
+ "tie": "Krawatte",
+ "frisbee": "Frisbee",
+ "skis": "Skier",
+ "kite": "Drachen",
+ "skateboard": "Skateboard",
+ "surfboard": "Surfbrett",
+ "plate": "Platte",
+ "cup": "Tasse",
+ "spoon": "Löffel",
+ "sandwich": "Sandwich",
+ "broccoli": "Brokkoli",
+ "carrot": "Karotte",
+ "pizza": "Pizza",
+ "donut": "Donut",
+ "cake": "Kuchen",
+ "chair": "Stuhl",
+ "couch": "Couch",
+ "bed": "Bett",
+ "dining_table": "Esstisch",
+ "toilet": "Toilette",
+ "door": "Tür",
+ "sink": "Waschbecken",
+ "refrigerator": "Kühlschrank",
+ "book": "Buch",
+ "bbq_grill": "BBQ Grill",
+ "amazon": "Amazon",
+ "fedex": "FedEx",
+ "dhl": "DHL",
+ "an_post": "Post",
+ "postnl": "PostNL",
+ "nzpost": "NZPost",
+ "purolator": "Purolator",
+ "postnord": "PostNord",
+ "dpd": "DPD",
+ "snowboard": "Snowboard",
+ "baseball_bat": "Baseballschläger",
+ "knife": "Messer",
+ "squirrel": "Eichhörnchen",
+ "animal": "Tier",
+ "blender": "Mixer",
+ "vase": "Vase",
+ "orange": "Orange",
+ "teddy_bear": "Teddybär",
+ "on_demand": "Auf Anfrage",
+ "scissors": "Schere",
+ "ups": "UPS",
+ "train": "Zug",
+ "toaster": "Toaster",
+ "clock": "Uhr",
+ "mirror": "Spiegel",
+ "backpack": "Rucksack",
+ "motorcycle": "Motorrad",
+ "window": "Fenster",
+ "toothbrush": "Zahnbürste",
+ "package": "Paket",
+ "hair_brush": "Haarbürste",
+ "apple": "Apfel",
+ "banana": "Banane",
+ "parking_meter": "Parkuhr",
+ "oven": "Ofen",
+ "umbrella": "Regenschirm",
+ "eye_glasses": "Brillen",
+ "robot_lawnmower": "Mähroboter",
+ "potted_plant": "Topfpflanze",
+ "waste_bin": "Abfallbehälter",
+ "license_plate": "Kennzeichen",
+ "bottle": "Flasche",
+ "deer": "Reh",
+ "usps": "USPS",
+ "person": "Person",
+ "bowl": "Schüssel",
+ "microwave": "Mikrowelle",
+ "bicycle": "Fahrrad",
+ "car": "Auto",
+ "fork": "Gabel",
+ "tv": "Fernseher",
+ "laptop": "Laptop",
+ "mouse": "Maus",
+ "goat": "Ziege",
+ "keyboard": "Klaviatur",
+ "cell_phone": "Handy",
+ "remote": "Fernbedienung",
+ "airplane": "Flugzeug",
+ "tennis_racket": "Tennisschläger",
+ "bus": "Bus",
+ "street_sign": "Straßenschild",
+ "horse": "Pferd",
+ "bark": "Bellen",
+ "cat": "Katze",
+ "wine_glass": "Weinglas",
+ "dog": "Hund",
+ "sheep": "Schaf",
+ "hat": "Hut",
+ "hot_dog": "Hot Dog",
+ "baseball_glove": "Baseballhandschuh",
+ "suitcase": "Koffer",
+ "handbag": "Handtasche",
+ "sports_ball": "Sportball",
+ "hair_dryer": "Haartrockner",
+ "vehicle": "Fahrzeug",
+ "face": "Gesicht",
+ "fox": "Fuchs",
+ "desk": "Schreibtisch",
+ "raccoon": "Waschbär",
+ "rabbit": "Kaninchen",
+ "gls": "GLS"
+}
diff --git a/web/public/locales/de/views/configEditor.json b/web/public/locales/de/views/configEditor.json
new file mode 100644
index 000000000..7f975e31b
--- /dev/null
+++ b/web/public/locales/de/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "configEditor": "Konfigurationseditor",
+ "copyConfig": "Konfiguration kopieren",
+ "saveAndRestart": "Sichern und Neustarten",
+ "saveOnly": "Nur Sichern",
+ "toast": {
+ "error": {
+ "savingError": "Fehler beim Speichern der Konfiguration"
+ },
+ "success": {
+ "copyToClipboard": "Konfiguration in Zwischenablage kopiert."
+ }
+ },
+ "documentTitle": "Konfigurationseditor – Frigate",
+ "confirm": "Verlassen ohne zu Speichern?"
+}
diff --git a/web/public/locales/de/views/events.json b/web/public/locales/de/views/events.json
new file mode 100644
index 000000000..2a38ac029
--- /dev/null
+++ b/web/public/locales/de/views/events.json
@@ -0,0 +1,38 @@
+{
+ "alerts": "Alarme",
+ "detections": "Erkennungen",
+ "motion": {
+ "label": "Bewegung",
+ "only": "nur Bewegung"
+ },
+ "empty": {
+ "alert": "Es gibt keine zu prüfenden Alarme",
+ "detection": "Es gibt keine zu prüfenden Erkennungen",
+ "motion": "Keine Bewegungsdaten gefunden"
+ },
+ "timeline": "Zeitleiste",
+ "timeline.aria": "Zeitleiste auswählen",
+ "events": {
+ "label": "Ereignisse",
+ "noFoundForTimePeriod": "Keine Ereignisse für diesen Zeitraum gefunden.",
+ "aria": "Wähle Ereignisse aus"
+ },
+ "documentTitle": "Überprüfung - Frigate",
+ "recordings": {
+ "documentTitle": "Aufnahmen - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "Letzte 24 Stunden"
+ },
+ "newReviewItems": {
+ "label": "Neue zu prüfende Objekte anschauen",
+ "button": "Neue zu prüfende Objekte"
+ },
+ "markTheseItemsAsReviewed": "Diese Objekte als geprüft kennzeichnen",
+ "camera": "Kamera",
+ "allCameras": "Alle Kameras",
+ "markAsReviewed": "Als geprüft kennzeichnen",
+ "selected_one": "{{count}} ausgewählt",
+ "selected_other": "{{count}} ausgewählt",
+ "detected": "erkannt"
+}
diff --git a/web/public/locales/de/views/explore.json b/web/public/locales/de/views/explore.json
new file mode 100644
index 000000000..ee518fc11
--- /dev/null
+++ b/web/public/locales/de/views/explore.json
@@ -0,0 +1,207 @@
+{
+ "details": {
+ "timestamp": "Zeitstempel",
+ "item": {
+ "title": "Item-Details begutachten",
+ "desc": "Item-Details begutachten",
+ "button": {
+ "share": "Diese Aufnahme teilen",
+ "viewInExplore": "Ansicht in Erkunden"
+ },
+ "tips": {
+ "hasMissingObjects": "Passe die Konfiguration an, so dass Frigate verfolgte Objekte für die folgenden Kategorien speichert: {{objects}}",
+ "mismatch_one": "{{count}} nicht verfügbares Objekt wurde entdeckt und in diese Überprüfung einbezogen. Dieses Objekt hat sich entweder nicht für einen Alarm oder eine Erkennung qualifiziert oder wurde bereits bereinigt/gelöscht.",
+ "mismatch_other": "{{count}} nicht verfügbare Objekte wurden entdeckt und in diese Überprüfung einbezogen. Diese Objekte haben sich entweder nicht für einen Alarm oder eine Erkennung qualifiziert oder wurden bereits bereinigt/gelöscht."
+ },
+ "toast": {
+ "success": {
+ "updatedSublabel": "Unterkategorie erfolgreich aktualisiert.",
+ "updatedLPR": "Nummernschild erfolgreich aktualisiert.",
+ "regenerate": "Eine neue Beschreibung wurde von {{provider}} angefordert. Je nach Geschwindigkeit des Anbieters kann es einige Zeit dauern, bis die neue Beschreibung generiert ist."
+ },
+ "error": {
+ "regenerate": "Der Aufruf von {{provider}} für eine neue Beschreibung ist fehlgeschlagen: {{errorMessage}}",
+ "updatedSublabelFailed": "Untekategorie konnte nicht aktualisiert werden: {{errorMessage}}",
+ "updatedLPRFailed": "Aktualisierung des Kennzeichens fehlgeschlagen: {{errorMessage}}"
+ }
+ }
+ },
+ "label": "Label",
+ "zones": "Zonen",
+ "editSubLabel": {
+ "title": "Unterkategorie bearbeiten",
+ "desc": "Geben Sie eine neue Unterkategorie für dieses {{label}} ein",
+ "descNoLabel": "Geben Sie eine neue Unterkategorie für dieses verfolgte Objekt ein"
+ },
+ "editLPR": {
+ "title": "Kennzeichen bearbeiten",
+ "desc": "Gib einen neuen Kennzeichenwert für dieses {{label}} ein",
+ "descNoLabel": "Gib einen neuen Kennzeichenwert für dieses verfolgte Objekt ein"
+ },
+ "topScore": {
+ "label": "Beste Ergebnisse",
+ "info": "Die höchste Punktzahl ist der höchste Medianwert für das verfolgte Objekt und kann daher von der auf der Miniaturansicht des Suchergebnisses angezeigten Punktzahl abweichen."
+ },
+ "recognizedLicensePlate": "Erkanntes Kennzeichen",
+ "estimatedSpeed": "Geschätzte Geschwindigkeit",
+ "objects": "Objekte",
+ "camera": "Kamera",
+ "button": {
+ "findSimilar": "Finde ähnliche",
+ "regenerate": {
+ "title": "Erneuern",
+ "label": "Beschreibung des verfolgten Objekts neu generieren"
+ }
+ },
+ "description": {
+ "label": "Beschreibung",
+ "placeholder": "Beschreibund des verfolgten Objekts",
+ "aiTips": "Frigate wird erst dann eine Beschreibung vom generativen KI-Anbieter anfordern, wenn der Lebenszyklus des verfolgten Objekts beendet ist."
+ },
+ "expandRegenerationMenu": "Erneuerungsmenü erweitern",
+ "regenerateFromSnapshot": "Aus Snapshot neu generieren",
+ "regenerateFromThumbnails": "Aus Vorschaubild neu generieren",
+ "tips": {
+ "descriptionSaved": "Erfolgreich gespeicherte Beschreibung",
+ "saveDescriptionFailed": "Die Aktualisierung der Beschreibung ist fehlgeschlagen: {{errorMessage}}"
+ },
+ "snapshotScore": {
+ "label": "Schnappschuss Bewertung"
+ }
+ },
+ "documentTitle": "Erkunde - Frigate",
+ "generativeAI": "Generative KI",
+ "exploreIsUnavailable": {
+ "title": "Erkunden ist nicht Verfügbar",
+ "embeddingsReindexing": {
+ "context": "Erkunden kann nach der Re-Indexierung der verfolgten Objekte verwendet werden.",
+ "startingUp": "Startet…",
+ "estimatedTime": "Voraussichtlich verbleibende Zeit:",
+ "finishingShortly": "Bald erledigt",
+ "step": {
+ "thumbnailsEmbedded": "Vorschaubilder eingebettet: ",
+ "descriptionsEmbedded": "Beschreibungen eingebettet: ",
+ "trackedObjectsProcessed": "Verfolgte Objekte bearbeitet: "
+ }
+ },
+ "downloadingModels": {
+ "setup": {
+ "visionModel": "Vision Model",
+ "visionModelFeatureExtractor": "Vision Model Feature Extraktor",
+ "textModel": "Text Model",
+ "textTokenizer": "Text Tokenizer"
+ },
+ "tips": {
+ "context": "Sie sollten eine Re-Indexierung der verfolgten Objekte durchführen, sobald die Modelle heruntergeladen sind.",
+ "documentation": "Lesen Sie die Dokumentation"
+ },
+ "error": "Ein Fehler ist aufgetreten. Bitte prüfen Sie die Frigate Logs.",
+ "context": "Frigate lädt derzeit benötigte Modelle für den Support des \"Semantic Search\"-Features. Je nach der Geschwindigkeit der Netzwerkverbindung kann dies einige Minuten in Anspruch nehmen."
+ }
+ },
+ "trackedObjectDetails": "Details zu verfolgtem Objekt",
+ "objectLifecycle": {
+ "noImageFound": "Kein Bild für diesen Zeitstempel gefunden.",
+ "createObjectMask": "Objekt-Maske erstellen",
+ "lifecycleItemDesc": {
+ "entered_zone": "{{label}} hat {{zones}} betreten",
+ "visible": "{{label}} erkannt",
+ "attribute": {
+ "other": "{{label}} erkannt als {{attribute}}",
+ "faceOrLicense_plate": "{{attribute}} erkannt für {{label}}"
+ },
+ "external": "{{label}} erkannt",
+ "active": "{{label}} wurde aktiv",
+ "gone": "{{label}} hat verlassen",
+ "stationary": "{{label}} wurde stationär",
+ "heard": "{{label}} gehört",
+ "header": {
+ "ratio": "Verhältnis",
+ "area": "Bereich",
+ "zones": "Zonen"
+ }
+ },
+ "annotationSettings": {
+ "offset": {
+ "documentation": "Lesen Sie die Dokumentation ",
+ "label": "Anmerkungen Versatz",
+ "desc": "Diese Daten stammen aus dem Erkennungs-Feed der Kamera, werden aber mit Bildern aus dem Aufnahme-Feed überlagert. Es ist unwahrscheinlich, dass die beiden Streams perfekt synchronisiert sind. Daher stimmen die Bounding Box und das Filmmaterial nicht perfekt überein. Das Feld annotation_offset kann jedoch verwendet werden, um dies anzupassen.",
+ "millisecondsToOffset": "Millisekunden, um die Erkennungen verschoben werden soll. Standard: 0",
+ "tips": "TIPP: Stelle dir einen Ereignisclip vor, in dem eine Person von links nach rechts läuft. Wenn die Bounding Box der Ereigniszeitleiste durchgehend links von der Person liegt, sollte der Wert verringert werden. Ähnlich verhält es sich, wenn eine Person von links nach rechts geht und die Bounding Box durchgängig vor der Person liegt, dann sollte der Wert erhöht werden.",
+ "toast": {
+ "success": "Versatz für {{camera}} wurde in der Konfigurationsdatei gespeichert. Starten Sie Frigate neu, um Ihre Änderungen zu übernehmen."
+ }
+ },
+ "showAllZones": {
+ "title": "Zeige alle Zonen",
+ "desc": "Immer Zonen auf Rahmen anzeigen, in die Objekte eingetreten sind."
+ },
+ "title": "Anmerkungseinstellungen"
+ },
+ "adjustAnnotationSettings": "Anmerkungseinstellungen anpassen",
+ "title": "Objekt-Lebenszyklus",
+ "carousel": {
+ "next": "Nächste Anzeige",
+ "previous": "Vorherige Anzeige"
+ },
+ "scrollViewTips": "Scrolle um die wichtigsten Momente dieses Objekts anzuzeigen.",
+ "autoTrackingTips": "Die Positionen der Bounding Box sind bei Kameras mit automatischer Verfolgung ungenau.",
+ "count": "{{first}} von {{second}}",
+ "trackedPoint": "Verfolgter Punkt"
+ },
+ "type": {
+ "details": "Details",
+ "video": "Video",
+ "object_lifecycle": "Objekt-Lebenszyklus",
+ "snapshot": "Snapshot"
+ },
+ "itemMenu": {
+ "downloadSnapshot": {
+ "label": "Schnappschuss herunterladen",
+ "aria": "Schnappschuss herunterladen"
+ },
+ "downloadVideo": {
+ "label": "Video herunterladen",
+ "aria": "Video herunterladen"
+ },
+ "viewObjectLifecycle": {
+ "label": "Lebenszyklus von Objekten anzeigen",
+ "aria": "Den Lebenszyklus des Objekts anzeigen"
+ },
+ "findSimilar": {
+ "label": "Ähnliches finden",
+ "aria": "Ähnliche verfolgte Objekte finden"
+ },
+ "submitToPlus": {
+ "label": "Bei Frigate+ einreichen",
+ "aria": "Bei Frigate+ einreichen"
+ },
+ "viewInHistory": {
+ "label": "Ansicht im Verlauf",
+ "aria": "Ansicht im Verlauf"
+ },
+ "deleteTrackedObject": {
+ "label": "Dieses verfolgte Objekt löschen"
+ }
+ },
+ "dialog": {
+ "confirmDelete": {
+ "title": "Löschen bestätigen",
+ "desc": "Beim Löschen dieses verfolgten Objekts werden der Schnappschuss, alle gespeicherten Einbettungen und alle zugehörigen Objektlebenszykluseinträge entfernt. Aufgezeichnetes Filmmaterial dieses verfolgten Objekts in der Verlaufsansicht wird NICHT gelöscht. -Modus:{{effectiveRetainMode}} , daher werden in dieser On-Demand Aufzeichnung nur Segmente gespeichert mit{{effectiveRetainModeName}} ."
+ },
+ "editLayout": {
+ "group": {
+ "label": "Kameragruppe bearbeiten"
+ },
+ "exitEdit": "Bearbeitung beenden",
+ "label": "Layout bearbeiten"
+ },
+ "camera": {
+ "enable": "Kamera aktivieren",
+ "disable": "Kamera deaktivieren"
+ },
+ "audioDetect": {
+ "enable": "Audioerkennung aktivieren",
+ "disable": "Audioerkennung deaktivieren"
+ },
+ "detect": {
+ "enable": "Erkennung aktivieren",
+ "disable": "Erkennung deaktivieren"
+ },
+ "cameraSettings": {
+ "objectDetection": "Objekterkennung",
+ "recording": "Aufnahme",
+ "snapshots": "Schnappschüsse",
+ "cameraEnabled": "Kamera aktiviert",
+ "autotracking": "Autotracking",
+ "audioDetection": "Audioerkennung",
+ "title": "{{camera}} Einstellungen"
+ },
+ "history": {
+ "label": "Historisches Filmmaterial zeigen"
+ },
+ "audio": "Audio",
+ "suspend": {
+ "forTime": "Aussetzen für: "
+ }
+}
diff --git a/web/public/locales/de/views/recording.json b/web/public/locales/de/views/recording.json
new file mode 100644
index 000000000..354cd4055
--- /dev/null
+++ b/web/public/locales/de/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "export": "Export",
+ "calendar": "Kalender",
+ "filters": "Filter",
+ "toast": {
+ "error": {
+ "endTimeMustAfterStartTime": "Endzeit muss nach Startzeit liegen",
+ "noValidTimeSelected": "Gewählter Zeitraum ist ungültig"
+ }
+ },
+ "filter": "Filter"
+}
diff --git a/web/public/locales/de/views/search.json b/web/public/locales/de/views/search.json
new file mode 100644
index 000000000..c3800ab28
--- /dev/null
+++ b/web/public/locales/de/views/search.json
@@ -0,0 +1,74 @@
+{
+ "savedSearches": "Gespeicherte Suchen",
+ "searchFor": "Suche nach {{inputValue}}",
+ "button": {
+ "save": "Suche speichern",
+ "filterActive": "Filter aktiv",
+ "delete": "Gespeicherte Suche löschen",
+ "filterInformation": "Information filtern",
+ "clear": "Suche löschen"
+ },
+ "trackedObjectId": "ID verfolgtes Objekt",
+ "filter": {
+ "label": {
+ "cameras": "Kameras",
+ "zones": "Zonen",
+ "search_type": "Suchtyp",
+ "before": "Vor",
+ "after": "Nach",
+ "min_score": "Minimalwert",
+ "max_score": "Maximalwert",
+ "recognized_license_plate": "Erkanntes Autokennzeichen",
+ "has_clip": "Clip vorhanden",
+ "has_snapshot": "Schnappschuss vorhanden",
+ "min_speed": "Minimalgeschwindigkeit",
+ "max_speed": "Maximalgeschwindigkeit",
+ "time_range": "Zeitraum",
+ "labels": "Labels",
+ "sub_labels": "Unterlabels"
+ },
+ "toast": {
+ "error": {
+ "beforeDateBeLaterAfter": "Das \"Vor\" Datum muss später als das \"Nach\" Datum sein.",
+ "minScoreMustBeLessOrEqualMaxScore": "Der \"Minimalwert\" muss kleiner oder gleich dem \"Maximalwert\" sein.",
+ "afterDatebeEarlierBefore": "Das \"Nach\" Datum muss früher als das \"Vor\" Datum sein.",
+ "maxScoreMustBeGreaterOrEqualMinScore": "Der \"Maximalwert\" muss größer oder gleich dem \"Minimalwert\" sein.",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "Der \"Minimalgeschwindigkeit\" muss kleiner oder gleich der \"Maximalgeschwindigkeit\" sein.",
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "Der \"Maximalgeschwindigkeit\" muss größer oder gleich der \"Maximalgeschwindigkeit\" sein."
+ }
+ },
+ "header": {
+ "currentFilterType": "Filterwerte",
+ "noFilters": "Filter",
+ "activeFilters": "Aktive Filter"
+ },
+ "tips": {
+ "desc": {
+ "step": "Kameras:Tor Label:Person Vor:01012024 Zeitraum:15:00-16:00",
+ "step3": "Verwende mehrere Filter, indem du sie nacheinander mit einem Leerzeichen dazwischen hinzufügst.",
+ "step2": "Wähle einen Wert aus den Vorschlägen aus oder gib einen eigenen ein.",
+ "step1": "Gib einen Filter-Schlüssel ein, gefolgt von einem Doppelpunkt (z.B. „kameras:“).",
+ "exampleLabel": "Beispiel:",
+ "step6": "Entferne Filter, indem du auf das „x“ daneben klickst.",
+ "step4": "Datumsfilter (bevor: und nach:) verwenden das Format {{DateFormat}}.",
+ "step5": "Der Zeitbereichsfilter verwendet das Format {{exampleTime}}."
+ },
+ "title": "Wie man Textfilter verwendet"
+ },
+ "searchType": {
+ "thumbnail": "Miniaturansicht",
+ "description": "Beschreibung"
+ }
+ },
+ "similaritySearch": {
+ "title": "Ähnlichkeitssuche",
+ "clear": "Ähnlichkeitssuche löschen",
+ "active": "Aktive Ähnlichkeitssuche"
+ },
+ "search": "Suche",
+ "placeholder": {
+ "search": "Suchen…"
+ }
+}
diff --git a/web/public/locales/de/views/settings.json b/web/public/locales/de/views/settings.json
new file mode 100644
index 000000000..04a6eb60a
--- /dev/null
+++ b/web/public/locales/de/views/settings.json
@@ -0,0 +1,683 @@
+{
+ "documentTitle": {
+ "default": "Einstellungen - Frigate",
+ "authentication": "Authentifizierungseinstellungen – Frigate",
+ "camera": "Kameraeinstellungen - Frigate",
+ "masksAndZones": "Masken- und Zonen-Editor – Frigate",
+ "object": "Debug - Frigate",
+ "general": "Allgemeine Einstellungen – Frigate",
+ "frigatePlus": "Frigate+ Einstellungen – Frigate",
+ "classification": "Klassifizierungseinstellungen – Frigate",
+ "motionTuner": "Bewegungstuner – Frigate",
+ "notifications": "Benachrichtigungs-Einstellungen",
+ "enrichments": "Erweiterte Statistiken - Frigate"
+ },
+ "menu": {
+ "ui": "Benutzeroberfläche",
+ "cameras": "Kameraeinstellungen",
+ "classification": "Klassifizierung",
+ "masksAndZones": "Maskierungen / Zonen",
+ "motionTuner": "Bewegungstuner",
+ "debug": "Debug",
+ "frigateplus": "Frigate+",
+ "users": "Benutzer",
+ "notifications": "Benachrichtigungen",
+ "enrichments": "Verbesserungen"
+ },
+ "dialog": {
+ "unsavedChanges": {
+ "title": "Du hast nicht gespeicherte Änderungen.",
+ "desc": "Möchtest Du deine Änderungen speichern, bevor du fortfährst?"
+ }
+ },
+ "cameraSetting": {
+ "camera": "Kamera",
+ "noCamera": "Keine Kamera"
+ },
+ "general": {
+ "title": "Allgemeine Einstellungen",
+ "liveDashboard": {
+ "title": "Live Übersicht",
+ "playAlertVideos": {
+ "label": "Spiele Videos mit Alarmierung",
+ "desc": "Standardmäßig werden die letzten Warnmeldungen auf dem Live-Dashboard als kurze Videoschleifen abgespielt. Deaktiviere diese Option, um nur ein statisches Bild der letzten Warnungen auf diesem Gerät/Browser anzuzeigen."
+ },
+ "automaticLiveView": {
+ "desc": "Wechsle automatisch zur Live Ansicht der Kamera, wenn einen Aktivität erkannt wurde. Wenn du diese Option deaktivierst, werden die statischen Kamerabilder auf der Liveübersicht nur einmal pro Minute aktualisiert.",
+ "label": "Automatische Live Ansicht"
+ }
+ },
+ "storedLayouts": {
+ "title": "Gespeicherte Ansichten",
+ "clearAll": "Lösche alle Ansichten",
+ "desc": "Das Layout der Kameras in einer Kameragruppe kann verschoben/geändert werden. Die Positionen werden im lokalen Cache des Browsers gespeichert."
+ },
+ "cameraGroupStreaming": {
+ "title": "Einstellungen für Kamera-Gruppen-Streaming",
+ "clearAll": "Alle Streamingeinstellungen löschen",
+ "desc": "Die Streaming-Einstellungen für jede Kameragruppe werden im lokalen Cache des Browsers gespeichert."
+ },
+ "recordingsViewer": {
+ "title": "Aufzeichnungsbetrachter",
+ "defaultPlaybackRate": {
+ "desc": "Standard-Wiedergabegeschwindigkeit für die Wiedergabe von Aufnahmen.",
+ "label": "Standard-Wiedergabegeschwindigkeit"
+ }
+ },
+ "calendar": {
+ "title": "Kalender",
+ "firstWeekday": {
+ "label": "Erster Wochentag",
+ "desc": "Der Tag, an dem die Wochen des Review Kalenders beginnen.",
+ "sunday": "Sonntag",
+ "monday": "Montag"
+ }
+ },
+ "toast": {
+ "success": {
+ "clearStoredLayout": "Gespeichertes Layout für {{cameraName}} gelöscht",
+ "clearStreamingSettings": "Streaming Einstellungen aller Kameragruppen bereinigt."
+ },
+ "error": {
+ "clearStoredLayoutFailed": "Das gespeicherte Layout konnte nicht gelöscht werden: {{errorMessage}}",
+ "clearStreamingSettingsFailed": "Die Streaming-Einstellungen konnten nicht gelöscht werden: {{errorMessage}}"
+ }
+ }
+ },
+ "classification": {
+ "title": "Klassifizierungseinstellungen",
+ "semanticSearch": {
+ "title": "Semantische Suche",
+ "desc": "Die semantische Suche in Frigate ermöglicht es, verfolgte Objekte innerhalb der Überprüfungselemente zu finden, indem entweder das Bild selbst, eine benutzerdefinierte Textbeschreibung oder eine automatisch generierte Beschreibung verwendet wird.",
+ "readTheDocumentation": "Lesen Sie die Dokumentation",
+ "reindexNow": {
+ "alreadyInProgress": "Neu-Indizierung läufts bereits.",
+ "label": "Neuindizieren",
+ "confirmTitle": "Bestätige Neu-Indizierung",
+ "confirmButton": "Neu-Indizieren",
+ "success": "Neuindizierung erfolgreich gestartet.",
+ "error": "Starten der Neuindizierung fehlgeschlagen: {{errorMessage}}",
+ "desc": "Durch die Neuindizierung werden die Einbettungen für alle verfolgten Objekte neu generiert. Dieser Prozess läuft im Hintergrund und kann Ihre CPU überlasten. Je nach Anzahl der verfolgten Objekte kann er einige Zeit in Anspruch nehmen.",
+ "confirmDesc": "Möchten Sie alle verfolgten Objekteinbettungen wirklich neu indizieren? Dieser Vorgang läuft im Hintergrund, kann aber Ihre CPU überlasten und einige Zeit in Anspruch nehmen. Sie können den Fortschritt auf der Explore-Seite verfolgen."
+ },
+ "modelSize": {
+ "large": {
+ "title": "groß",
+ "desc": "Bei Verwendung von large wird das vollständige Jina-Modell verwendet und ggf. automatisch auf der GPU ausgeführt."
+ },
+ "label": "Model Größe",
+ "small": {
+ "title": "klein",
+ "desc": "Durch die Verwendung von small wird eine quantisierte Version des Modells eingesetzt, die weniger RAM verwendet und schneller auf der CPU läuft, wobei der Unterschied in der Einbettungsqualität sehr gering ist."
+ },
+ "desc": "Die Größe des Modells, das für semantische Sucheinbettungen verwendet wird."
+ }
+ },
+ "birdClassification": {
+ "desc": "Die Vogelklassifizierung identifiziert bekannte Vögel mithilfe eines quantisierten Tensorflow-Modells. Wenn ein bekannter Vogel erkannt wird, wird sein allgemeiner Name als sub_label hinzugefügt. Diese Informationen sind in der Benutzeroberfläche, in Filtern und in Benachrichtigungen enthalten.",
+ "title": "Vogel-Klassifizierung"
+ },
+ "licensePlateRecognition": {
+ "readTheDocumentation": "Lies die Dokumentation",
+ "title": "Nummernschilderkennung",
+ "desc": "Frigate kann Nummernschilder an Fahrzeugen erkennen und die erkannten Zeichen automatisch dem Feld „recognized_license_plate“ oder einem bekannten Namen als Unterbezeichnung für Objekte vom Typ „Auto“ hinzufügen. Ein häufiger Anwendungsfall ist das Lesen der Nummernschilder von Autos, die in eine Einfahrt einfahren oder auf einer Straße vorbeifahren."
+ },
+ "faceRecognition": {
+ "readTheDocumentation": "Lies die Dokumentation",
+ "modelSize": {
+ "small": {
+ "title": "klein",
+ "desc": "ei der Verwendung von small wird ein FaceNet-Gesichtseinbettungsmodell eingesetzt, das auf den meisten CPUs effizient läuft."
+ },
+ "label": "Model Größe",
+ "large": {
+ "title": "groß",
+ "desc": "Bei der Verwendung von large wird ein ArcFace-Gesichtseinbettungsmodell verwendet und ggf. automatisch auf der GPU ausgeführt."
+ },
+ "desc": "Die Größe des für die Gesichtserkennung verwendeten Modells."
+ },
+ "title": "Gesichtserkennung",
+ "desc": "Mithilfe der Gesichtserkennung können Personen Namen zugewiesen werden. Sobald das Gesicht erkannt wird, weist Frigate den Namen der Person als Unterbezeichnung zu. Diese Informationen werden in die Benutzeroberfläche, Filter und Benachrichtigungen integriert."
+ },
+ "toast": {
+ "error": "Sichern der Konfigurationsänderungen fehlgeschlagen: {{errorMessage}}",
+ "success": "Die Klassifizierungseinstellungen wurden gespeichert. Starten Sie Frigate neu, um die Änderungen zu übernehmen."
+ },
+ "restart_required": "Neustart erforderlich (Klassifizierungseinstellungen geändert)",
+ "unsavedChanges": "Nicht gespeicherte Änderungen der Klassifizierungseinstellungen"
+ },
+ "camera": {
+ "reviewClassification": {
+ "toast": {
+ "success": "Die Konfiguration der Klassifizierung wurde gespeichert. Starte Frigate neu, um die Änderungen zu übernehmen."
+ },
+ "title": "Überprüfung der Klassifikation",
+ "selectAlertsZones": "Zonen für Warnungen auswählen",
+ "limitDetections": "Begrenzung der Erkennungen auf bestimmte Zonen",
+ "readTheDocumentation": "Lies die Dokumentation",
+ "noDefinedZones": "Für diese Kamera sind keine Zonen definiert.",
+ "selectDetectionsZones": "Zonen für Erkennungen auswählen",
+ "objectAlertsTips": "Alle {{alertsLabels}} -Objekte auf {{cameraName}} werden als Warnungen angezeigt.",
+ "desc": "Frigate kategorisiert Überprüfungselemente als Warnungen und Erkennungen. Standardmäßig werden alle Objekte vom Typ Person und Auto als Warnungen betrachtet. Sie können die Kategorisierung Ihrer Überprüfungselemente verfeinern, indem Sie die erforderlichen Zonen dafür konfigurieren.",
+ "zoneObjectAlertsTips": "Alle {{alertsLabels}} Objekte, die in {{zone}} auf {{cameraName}} erkannt werden , werden als Warnungen angezeigt.",
+ "objectDetectionsTips": "Alle {{detectionsLabels}} Objekte, die auf {{cameraName}} nicht kategorisiert sind, werden unabhängig von der Zone, in der sie sich befinden, als Erkennungen angezeigt.",
+ "zoneObjectDetectionsTips": {
+ "text": "Alle {{detectionsLabels}} Objekte, die in {{zone}} auf {{cameraName}} nicht kategorisiert sind, werden als Erkennungen angezeigt.",
+ "regardlessOfZoneObjectDetectionsTips": "Alle {{detectionsLabels}} Objekte, die auf {{cameraName}} nicht kategorisiert sind, werden unabhängig von der Zone, in der sie sich befinden, als Erkennungen angezeigt.",
+ "notSelectDetections": "Alle {{detectionsLabels}} Objekte, die in {{zone}} auf {{cameraName}} erkannt wurden und nicht als Warnungen kategorisiert sind, werden unabhängig von der Zone, in der sie sich befinden, als Erkennungen angezeigt."
+ },
+ "unsavedChanges": "Nicht gespeicherte Überprüfung der Klassifizierungseinstellungen für {{camera}}"
+ },
+ "streams": {
+ "title": "Streams",
+ "desc": "Deaktiviere eine Kamera vorübergehend, bis Frigate neu gestartet wird. Das Deaktivieren einer Kamera stoppt die Verarbeitung der Streams dieser Kamera durch Frigate vollständig. Erkennung, Aufzeichnung und Debugging sind dann nicht mehr möglich.Bewegungsrahmen
Rote Rahmen werden über die Bereiche des Bildes gelegt, in denen aktuell Bewegung erkannt wird.
", + "title": "Bewegungsrahmen", + "desc": "Rahmen um Bereiche anzeigen, in denen Bewegung erkannt wird" + }, + "boundingBoxes": { + "title": "Begrenzungsrahmen", + "desc": "Begrenzungsrahmen um verfolgte Objekte anzeigen", + "colors": { + "info": "Regionsrahmen
Leuchtend grüne Rahmen werden über die Interessensbereiche im Bild gelegt, die an den Objektdetektor übermittelt werden.
", + "desc": "Einen Rahmen für den an den Objektdetektor übermittelten Interessensbereich anzeigen" + }, + "title": "Debug", + "desc": "Die Debug-Ansicht zeigt eine Echtzeitansicht der verfolgten Objekte und ihrer Statistiken. Die Objektliste zeigt eine zeitverzögerte Zusammenfassung der erkannten Objekte." + }, + "motionDetectionTuner": { + "Threshold": { + "title": "Schwellenwert", + "desc": "Der Schwellenwert legt fest, wie stark sich die Helligkeit eines Pixels ändern muss, damit dies als Bewegung erkannt wird. Standard: 30" + }, + "improveContrast": { + "title": "Kontrast verbessern", + "desc": "Den Kontrast für dunklere Szenen verbessern. Standard: EIN" + }, + "toast": { + "success": "Bewegungseinstellungen wurden gespeichert." + }, + "desc": { + "documentation": "Lies die Anleitung zur Bewegungsoptimierung", + "title": "Frigate verwendet die Bewegungserkennung als erste Überprüfung, um festzustellen, ob im Bildausschnitt etwas passiert, das eine Objekterkennung rechtfertigt." + }, + "contourArea": { + "title": "Konturfläche", + "desc": "Der Wert für die Konturfläche wird verwendet, um zu bestimmen, welche Gruppen von veränderten Pixeln als Bewegung gelten. Standard: 10" + }, + "title": "Bewegungserkennungs-Optimierer", + "unsavedChanges": "Nicht gespeicherte Änderungen am Bewegungstuner ({{camera}})" + }, + "users": { + "addUser": "Benutzer hinzufügen", + "updatePassword": "Passwort aktualisieren", + "toast": { + "success": { + "deleteUser": "Benutzer {{user}} wurde erfolgreich gelöscht", + "createUser": "Benutzer {{user}} wurde erfolgreich erstellt", + "updatePassword": "Passwort erfolgreich aktualisiert.", + "roleUpdated": "Rolle für {{user}} aktualisiert" + }, + "error": { + "setPasswordFailed": "Speichern des Passworts fehlgeschlagen: {{errorMessage}}", + "createUserFailed": "Benutzer konnte nicht erstellt werden: {{errorMessage}}", + "deleteUserFailed": "Benutzer konnte nicht gelöscht werden: {{errorMessage}}", + "roleUpdateFailed": "Aktualisierung der Rolle fehlgeschlagen: {{errorMessage}}" + } + }, + "title": "Benutzer", + "management": { + "title": "Benutzerverwaltung", + "desc": "Verwalte die Benutzerkonten dieser Frigate-Instanz." + }, + "table": { + "changeRole": "Benutzerrolle ändern", + "deleteUser": "Benutzer löschen", + "noUsers": "Keine Benutzer gefunden.", + "password": "Passwort", + "username": "Benutzername", + "actions": "Aktionen", + "role": "Rolle" + }, + "dialog": { + "form": { + "user": { + "title": "Benutzername", + "desc": "Nur Buchstaben, Zahlen, Punkte und Unterstriche sind erlaubt.", + "placeholder": "Benutzernamen eingeben" + }, + "password": { + "notMatch": "Passwörter stimmen nicht überein", + "strength": { + "weak": "Schwach", + "title": "Passwortstärke: ", + "medium": "Mittel", + "strong": "Stark", + "veryStrong": "Sehr stark" + }, + "confirm": { + "placeholder": "Bestätige Passwort", + "title": "Bestätige Passwort" + }, + "match": "Passwörter stimmen überein", + "title": "Passwort", + "placeholder": "Passwort eingeben" + }, + "newPassword": { + "title": "Neues Passwort", + "placeholder": "Neues Passwort eingeben", + "confirm": { + "placeholder": "Neues Passwort erneut eingeben" + } + }, + "usernameIsRequired": "Benutzername ist erforderlich", + "passwordIsRequired": "Passwort benötigt" + }, + "changeRole": { + "desc": "Berechtigungen für {{username}} aktualisieren", + "roleInfo": { + "intro": "Wähle die entsprechende Rolle für diesen Benutzer:", + "admin": "Admin", + "adminDesc": "Voller Zugang zu allen Funktionen.", + "viewer": "Betrachter", + "viewerDesc": "Nur auf Live-Dashboards, Überprüfung, Erkundung und Exporte beschränkt." + }, + "title": "Benutzerrolle ändern", + "select": "Wähle eine Rolle" + }, + "deleteUser": { + "desc": "Diese Aktion kann nicht rückgängig gemacht werden. Dadurch wird das Benutzerkonto dauerhaft gelöscht und alle zugehörigen Daten werden entfernt.", + "warn": "Bist du sicher, dass du {{username}} löschen willst?", + "title": "Benutzer löschen" + }, + "createUser": { + "title": "Neuen Benutzer anlegen", + "desc": "Füge ein neues Benutzerkonto hinzu und lege eine Rolle für den Zugriff auf Bereiche der Frigate-Benutzeroberfläche fest.", + "usernameOnlyInclude": "Der Benutzername darf nur Buchstaben, Zahlen, . oder _ enthalten", + "confirmPassword": "Bitte bestätige dein Passwort" + }, + "passwordSetting": { + "updatePassword": "Passwort für {{username}} aktualisieren", + "setPassword": "Passwort festlegen", + "desc": "Erstelle ein sicheres Passwort, um dieses Konto zu schützen.", + "cannotBeEmpty": "Das Passwort darf nicht leer sein", + "doNotMatch": "Die Passwörter sind nicht identisch" + } + } + }, + "notification": { + "email": { + "desc": "Eine gültige E-Mail-Adresse ist erforderlich und wird verwendet, um Sie zu benachrichtigen, falls es Probleme mit dem Push-Dienst gibt.", + "placeholder": "z. B. example@email.com", + "title": "Email" + }, + "notificationSettings": { + "title": "Einstellungen für Benachrichtigungen", + "desc": "Frigate kann von Haus aus Push-Benachrichtigungen an ein Gerät senden, wenn es im Browser läuft oder als PWA installiert ist.", + "documentation": "Lese die Dokumentation" + }, + "title": "Benachrichtigungen", + "notificationUnavailable": { + "title": "Benachrichtigungen nicht verfügbar", + "desc": "Web Push Benachrichtigungen erfordern einen sicheren Kontext (https://…). Das ist eine Vorgabe des Browsers. Greife auf Frigate gesichert zu um Benachrichtigungen zu nutzen.",
+ "documentation": "Dokumentation lesen"
+ },
+ "cameras": {
+ "desc": "Wähle aus für welche Kameras Benachrichtigungen aktiviert werden sollen.",
+ "noCameras": "Keine Kameras verfügbar",
+ "title": "Kameras"
+ },
+ "sendTestNotification": "Test Benachrichtigung senden",
+ "globalSettings": {
+ "desc": "Benachrichtigungen für bestimmte Kameras auf allen registrierten Geräten vorübergehend aussetzen.",
+ "title": "Globale Einstellungen"
+ },
+ "deviceSpecific": "Geräte spezifische Einstellungen",
+ "active": "Benachrichtigungen aktiv",
+ "registerDevice": "Dieses Gerät registrieren",
+ "unregisterDevice": "Dieses Gerät abmelden",
+ "toast": {
+ "error": {
+ "registerFailed": "Speichern der Benachrichtigungsregistrierung fehlgeschlagen."
+ },
+ "success": {
+ "registered": "Erfolgreich für Benachrichtigungen registriert. Starte Frigate neu bevor Benachrichtigungen (inklusive Testbenachrichtigung) gesendet werden können.",
+ "settingSaved": "Benachrichtigungseinstellungen wurden gespeichert."
+ }
+ },
+ "suspendTime": {
+ "30minutes": "für 30 Minuten pausieren",
+ "1hour": "für 1 Stunde pausieren",
+ "12hours": "für 12 Stunden pausieren",
+ "untilRestart": "bis Neustart pausieren",
+ "24hours": "für 24 Stunden pausieren",
+ "5minutes": "Für 5 Minuten pausieren",
+ "10minutes": "Für 10 Minuten pausieren",
+ "suspend": "Pausieren"
+ },
+ "cancelSuspension": "Pausieren abbrechen",
+ "suspended": "Benachrichtigungen für {{time}} pausiert",
+ "unsavedChanges": "Nicht gespeicherte Änderungen an den Benachrichtigungen",
+ "unsavedRegistrations": "Nicht gespeicherte Benachrichtigungsanmeldungen"
+ },
+ "frigatePlus": {
+ "title": "Frigate+ Einstellungen",
+ "apiKey": {
+ "title": "Frigate+ API Key",
+ "desc": "Der Frigate+ API Key aktiviert die Integration des Frigate+ Dienstes.",
+ "validated": "Frigate+ API Key erkannt und validiert",
+ "notValidated": "Frigate+ API Key nicht erkannt und validiert",
+ "plusLink": "Lese mehr zu Frigate+"
+ },
+ "snapshotConfig": {
+ "desc": "Für die Übermittlung an Frigate+ muss in der Konfiguration sowohl Snapshots als auch clean_copy-Snapshots aktiviert sein.",
+ "cleanCopyWarning": "Einige Kameras haben Snapshots aktiviert aber clean copy deaktiviert. Aktiviere clean_copy in der Snapshot Konfiguration um Bilder an Frigate+ zu senden.",
+ "documentation": "die Dokumentation lesen",
+ "table": {
+ "camera": "Kamera",
+ "snapshots": "Snapshots",
+ "cleanCopySnapshots": "clean_copy Snapshots"
+ },
+ "title": "Snapshot Einstellungen"
+ },
+ "modelInfo": {
+ "modelType": "Model Typ",
+ "trainDate": "Trainings Datum",
+ "supportedDetectors": "Unterstützte Detektoren",
+ "modelSelect": "Die verfügbaren Modelle auf Frigate+ können hier ausgewählt werden. Beachte, dass nur Modelle kompatibel mit deiner aktuellen Detektorkonfiguration zur Auswahl stehen.",
+ "plusModelType": {
+ "baseModel": "Basis Model",
+ "userModel": "Feinabgestimmt"
+ },
+ "cameras": "Kameras",
+ "loading": "Lade Model Informationen…",
+ "error": "Model Informationen laden fehlgeschlagen",
+ "availableModels": "Verfügbare Modelle",
+ "loadingAvailableModels": "Lade verfügbare Modelle…",
+ "baseModel": "Basis Model",
+ "title": "Model Informationen"
+ },
+ "toast": {
+ "error": "Speichern der Konfigurationsänderungen fehlgeschlagen: {{errorMessage}}",
+ "success": "Frigate+ Einstellungen wurden gespeichert. Starte Frigate neu um Änderungen anzuwenden."
+ },
+ "restart_required": "Neustart erforderlich (Frigate+ Model geändert)",
+ "unsavedChanges": "Nicht gespeicherte Änderungen an den Frigate+-Einstellungen"
+ },
+ "enrichments": {
+ "birdClassification": {
+ "title": "Vogel Klassifizierung",
+ "desc": "Die Vogelklassifizierung identifiziert bekannte Vögel mithilfe eines quantisierten Tensorflow-Modells. Wenn ein bekannter Vogel erkannt wird, wird sein allgemeiner Name als sub_label hinzugefügt. Diese Informationen sind in der Benutzeroberfläche, in Filtern und in Benachrichtigungen enthalten."
+ },
+ "title": "Verbesserugsseinstellungen",
+ "unsavedChanges": "Ungesicherte geänderte Verbesserungseinstellungen",
+ "semanticSearch": {
+ "reindexNow": {
+ "confirmDesc": "Sind Sie sicher, dass Sie alle verfolgten Objekteinbettungen neu indizieren wollen? Dieser Prozess läuft im Hintergrund, kann aber Ihre CPU auslasten und eine gewisse Zeit in Anspruch nehmen. Sie können den Fortschritt auf der Seite Explore verfolgen.",
+ "label": "Jetzt neu indizien",
+ "desc": "Bei der Neuindizierung werden die Einbettungen für alle verfolgten Objekte neu generiert. Dieser Prozess läuft im Hintergrund und kann je nach Anzahl der verfolgten Objekte Ihre CPU auslasten und eine gewisse Zeit in Anspruch nehmen.",
+ "confirmTitle": "Neuinszenierung bestätigen",
+ "confirmButton": "Neuindizierung",
+ "success": "Die Neuindizierung wurde erfolgreich gestartet.",
+ "alreadyInProgress": "Die Neuindizierung ist bereits im Gange.",
+ "error": "Neuindizierung konnte nicht gestartet werden: {{errorMessage}}"
+ },
+ "modelSize": {
+ "small": {
+ "desc": "Bei der Verwendung von klein wird eine quantisierte Version des Modells verwendet, die weniger Arbeitsspeicher verbraucht und schneller auf der CPU läuft, wobei der Unterschied in der Einbettungsqualität sehr gering ist.",
+ "title": "klein"
+ },
+ "label": "Modell Größe",
+ "desc": "Die Größe des für die Einbettung der semantischen Suche verwendeten Modells.",
+ "large": {
+ "title": "groß",
+ "desc": "Bei der Verwendung von groß wird das gesamte Jina-Modell verwendet und automatisch auf der GPU ausgeführt, falls zutreffend."
+ }
+ },
+ "title": "Semantische Suche",
+ "desc": "Die semantische Suche in Frigate ermöglicht es Ihnen, verfolgte Objekte innerhalb Ihrer Überprüfungselemente zu finden, indem Sie entweder das Bild selbst, eine benutzerdefinierte Textbeschreibung oder eine automatisch generierte Beschreibung verwenden.",
+ "readTheDocumentation": "Lies die Dokumentation"
+ },
+ "faceRecognition": {
+ "title": "Gesichtserkennung",
+ "desc": "Die Gesichtserkennung ermöglicht es, Personen Namen zuzuweisen, und wenn ihr Gesicht erkannt wird, ordnet Frigate den Namen der Person als Untertitel zu. Diese Informationen sind in der Benutzeroberfläche, den Filtern und in den Benachrichtigungen enthalten.",
+ "readTheDocumentation": "Lies die Dokumentation",
+ "modelSize": {
+ "label": "Modell Größe",
+ "desc": "Die Größe des für die Gesichtserkennung verwendeten Modells.",
+ "small": {
+ "title": "klein",
+ "desc": "Mit klein wird ein FaceNet-Gesichtseinbettungsmodell verwendet, das auf den meisten CPUs effizient läuft."
+ },
+ "large": {
+ "title": "groß",
+ "desc": "Die Verwendung von groß verwendet ein ArcFace-Gesichtseinbettungsmodell und läuft automatisch auf der GPU, falls zutreffend."
+ }
+ }
+ },
+ "licensePlateRecognition": {
+ "title": "Kennzeichenerkennung",
+ "desc": "Frigate kann Kennzeichen an Fahrzeugen erkennen und die erkannten Zeichen automatisch in das Feld recognized_license_plate oder einen bekannten Namen als sub_label zu Objekten vom Typ car hinzufügen. Ein häufiger Anwendungsfall ist das Lesen der Kennzeichen von Autos, die in eine Einfahrt einfahren oder auf einer Straße vorbeifahren.",
+ "readTheDocumentation": "Lies die Dokumentation"
+ },
+ "restart_required": "Neustart erforderlich (Verbesserungseinstellungen geändert)",
+ "toast": {
+ "success": "Die Einstellungen für die Verbesserungen wurden gespeichert. Starten Sie Frigate neu, um Ihre Änderungen zu übernehmen.",
+ "error": "Konfigurationsänderungen konnten nicht gespeichert werden: {{errorMessage}}"
+ }
+ }
+}
diff --git a/web/public/locales/de/views/system.json b/web/public/locales/de/views/system.json
new file mode 100644
index 000000000..f869f1ba2
--- /dev/null
+++ b/web/public/locales/de/views/system.json
@@ -0,0 +1,180 @@
+{
+ "general": {
+ "hardwareInfo": {
+ "gpuInfo": {
+ "vainfoOutput": {
+ "title": "Ergebnis der Vainfo-Abfrage",
+ "returnCode": "Rückgabecode: {{code}}",
+ "processError": "Prozess Fehler:",
+ "processOutput": "Prozess-Output:"
+ },
+ "nvidiaSMIOutput": {
+ "title": "Nvidia SMI Ausgabe",
+ "cudaComputerCapability": "CUDA Rechenleistung:{{cuda_compute}}",
+ "name": "Name: {{name}}",
+ "driver": "Treiber: {{driver}}",
+ "vbios": "VBios Info: {{vbios}}"
+ },
+ "closeInfo": {
+ "label": "Schhließe GPU Info"
+ },
+ "copyInfo": {
+ "label": "Kopiere GPU Info"
+ },
+ "toast": {
+ "success": "GPU-Infos in die Zwischenablage kopiert"
+ }
+ },
+ "title": "Hardwareinformationen",
+ "gpuUsage": "GPU Auslastung",
+ "gpuMemory": "Grafikspeicher",
+ "gpuDecoder": "GPU Decoder",
+ "gpuEncoder": "GPU Encoder",
+ "npuUsage": "NPU Verwendung",
+ "npuMemory": "NPU Speicher"
+ },
+ "title": "Allgemein",
+ "detector": {
+ "title": "Detektoren",
+ "cpuUsage": "CPU-Auslastung des Detektors",
+ "memoryUsage": "Arbeitsspeichernutzung des Detektors",
+ "inferenceSpeed": "Detektoren Inferenzgeschwindigkeit",
+ "temperature": "Temperatur des Detektors"
+ },
+ "otherProcesses": {
+ "title": "Andere Prozesse",
+ "processCpuUsage": "CPU Auslastung für Prozess",
+ "processMemoryUsage": "Prozessspeicherauslastung"
+ }
+ },
+ "documentTitle": {
+ "cameras": "Kamerastatistiken – Frigate",
+ "storage": "Speicherstatistiken - Frigate",
+ "general": "Allgemeine Statistiken - Frigate",
+ "logs": {
+ "frigate": "Frigate Protokolle – Frigate",
+ "go2rtc": "Go2RTC Protokolle - Frigate",
+ "nginx": "Nginx Protokolle - Frigate"
+ },
+ "enrichments": "Erweiterte Statistiken - Frigate"
+ },
+ "title": "System",
+ "logs": {
+ "download": {
+ "label": "Protokolldateien herunterladen"
+ },
+ "copy": {
+ "success": "Protokolle in die Zwischenablage kopiert",
+ "label": "In die Zwischenablage kopieren",
+ "error": "Protokolle konnten nicht in die Zwischenablage kopiert werden"
+ },
+ "type": {
+ "message": "Nachricht",
+ "timestamp": "Zeitstempel",
+ "label": "Art",
+ "tag": "Tag"
+ },
+ "toast": {
+ "error": {
+ "fetchingLogsFailed": "Fehler beim Abrufen der Protokolle: {{errorMessage}}",
+ "whileStreamingLogs": "Beim Übertragen der Protokolle ist ein Fehler aufgetreten: {{errorMessage}}"
+ }
+ },
+ "tips": "Protokolle werden in Echtzeit vom Server übertragen"
+ },
+ "metrics": "Systemmetriken",
+ "storage": {
+ "recordings": {
+ "earliestRecording": "Älteste verfügbare Aufzeichnung:",
+ "title": "Aufnahmen",
+ "tips": "Dieser Wert gibt den Gesamtspeicherplatz an, den die Aufzeichnungen in der Datenbank von Frigate belegen. Frigate erfasst nicht die Speichernutzung für alle Dateien auf Ihrer Festplatte."
+ },
+ "cameraStorage": {
+ "camera": "Kamera",
+ "title": "Kamera Speicher",
+ "unused": {
+ "title": "Ungenutzt",
+ "tips": "Dieser Wert gibt möglicherweise nicht genau den freien Speicherplatz an, der Frigate zur Verfügung steht, wenn neben den Aufzeichnungen von Frigate noch andere Dateien auf der Festplatte gespeichert sind. Frigate verfolgt die Speichernutzung außerhalb der Aufzeichnungen nicht."
+ },
+ "unusedStorageInformation": "Info zum ungenutzten Speicher",
+ "storageUsed": "Speicher",
+ "percentageOfTotalUsed": "Prozentualer Anteil am Gesamtanteil",
+ "bandwidth": "Bandbreite"
+ },
+ "title": "Speicher",
+ "overview": "Übersicht"
+ },
+ "cameras": {
+ "info": {
+ "stream": "Stream {{idx}}",
+ "video": "Video:",
+ "codec": "Codec:",
+ "fetching": "Lade Kamera Daten",
+ "resolution": "Auflösung:",
+ "fps": "FPS:",
+ "unknown": "Unbekannt",
+ "audio": "Audio:",
+ "error": "Fehler: {{error}}",
+ "cameraProbeInfo": "{{camera}} Kamera-Untersuchsungsinfo",
+ "streamDataFromFFPROBE": "Stream-Daten werden mit ffprobe erhalten.",
+ "tips": {
+ "title": "Kamera-Untersuchsungsinfo"
+ },
+ "aspectRatio": "Seitenverhältnis"
+ },
+ "overview": "Übersicht",
+ "label": {
+ "detect": "erkennen",
+ "camera": "Kamera",
+ "skipped": "übersprungene",
+ "ffmpeg": "FFmpeg",
+ "capture": "aufnehmen",
+ "overallFramesPerSecond": "Bilder pro Sekunde",
+ "overallDetectionsPerSecond": "Erkennungen pro Sekunde",
+ "overallSkippedDetectionsPerSecond": "übersprungene Erkennungen pro Sekunde",
+ "cameraFfmpeg": "{{camName}} FFmpeg",
+ "cameraCapture": "{{camName}} Aufnahme",
+ "cameraDetect": "{{camName}} Erkennung",
+ "cameraFramesPerSecond": "{{camName}} Bilder pro Sekunde",
+ "cameraDetectionsPerSecond": "{{camName}} Erkennungen pro Sekunde",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} übersprungene Erkennungen pro Sekunde"
+ },
+ "title": "Kameras",
+ "framesAndDetections": "Bilder / Erkennungen",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Kopiert Untersuchungsdaten in die Zwischenablage."
+ },
+ "error": {
+ "unableToProbeCamera": "Die Kamera kann nicht getestet werden: {{errorMessage}}"
+ }
+ }
+ },
+ "enrichments": {
+ "embeddings": {
+ "image_embedding_speed": "Geschwindigkeit der Bildeinbettung",
+ "face_embedding_speed": "Geschwindigkeit der Gesichtseinbettung",
+ "plate_recognition_speed": "Geschwindigkeit der Kennzeichenerkennung",
+ "text_embedding_speed": "Geschwindigkeit der Texteinbettung",
+ "plate_recognition": "Kennzeichen Erkennung",
+ "face_recognition_speed": "Gesichts Erkennungs Geschwindigkeit",
+ "text_embedding": "Einbettung von Bildern",
+ "face_recognition": "Gesichts Erkennung",
+ "image_embedding": "Bild Embedding",
+ "yolov9_plate_detection_speed": "YOLOv9 Kennzeichenerkennungsgeschwindigkeit",
+ "yolov9_plate_detection": "YOLOv9 Kennzeichenerkennung"
+ },
+ "title": "Optimierungen",
+ "infPerSecond": "Rückschlüsse pro Sekunde"
+ },
+ "stats": {
+ "healthy": "Das System läuft problemlos",
+ "ffmpegHighCpuUsage": "{{camera}} hat eine hohe FFmpeg CPU Auslastung ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} hat eine hohe CPU Auslastung bei der Erkennung ({{detectAvg}}%)",
+ "reindexingEmbeddings": "Neuindizierung von Einbettungen ({{processed}}% erledigt)",
+ "detectIsSlow": "{{detect}} ist langsam ({{speed}} ms)",
+ "detectIsVerySlow": "{{detect}} ist sehr langsam ({{speed}} ms)",
+ "cameraIsOffline": "{{camera}} ist offline"
+ },
+ "lastRefreshed": "Zuletzt aktualisiert: "
+}
diff --git a/web/public/locales/en/audio.json b/web/public/locales/en/audio.json
new file mode 100644
index 000000000..de5f5638c
--- /dev/null
+++ b/web/public/locales/en/audio.json
@@ -0,0 +1,429 @@
+{
+ "speech": "Speech",
+ "babbling": "Babbling",
+ "yell": "Yell",
+ "bellow": "Bellow",
+ "whoop": "Whoop",
+ "whispering": "Whispering",
+ "laughter": "Laughter",
+ "snicker": "Snicker",
+ "crying": "Crying",
+ "sigh": "Sigh",
+ "singing": "Singing",
+ "choir": "Choir",
+ "yodeling": "Yodeling",
+ "chant": "Chant",
+ "mantra": "Mantra",
+ "child_singing": "Child Singing",
+ "synthetic_singing": "Synthetic Singing",
+ "rapping": "Rapping",
+ "humming": "Humming",
+ "groan": "Groan",
+ "grunt": "Grunt",
+ "whistling": "Whistling",
+ "breathing": "Breathing",
+ "wheeze": "Wheeze",
+ "snoring": "Snoring",
+ "gasp": "Gasp",
+ "pant": "Pant",
+ "snort": "Snort",
+ "cough": "Cough",
+ "throat_clearing": "Throat Clearing",
+ "sneeze": "Sneeze",
+ "sniff": "Sniff",
+ "run": "Run",
+ "shuffle": "Shuffle",
+ "footsteps": "Footsteps",
+ "chewing": "Chewing",
+ "biting": "Biting",
+ "gargling": "Gargling",
+ "stomach_rumble": "Stomach Rumble",
+ "burping": "Burping",
+ "hiccup": "Hiccup",
+ "fart": "Fart",
+ "hands": "Hands",
+ "finger_snapping": "Finger Snapping",
+ "clapping": "Clapping",
+ "heartbeat": "Heartbeat",
+ "heart_murmur": "Heart Murmur",
+ "cheering": "Cheering",
+ "applause": "Applause",
+ "chatter": "Chatter",
+ "crowd": "Crowd",
+ "children_playing": "Children Playing",
+ "animal": "Animal",
+ "pets": "Pets",
+ "dog": "Dog",
+ "bark": "Bark",
+ "yip": "Yip",
+ "howl": "Howl",
+ "bow_wow": "Bow Wow",
+ "growling": "Growling",
+ "whimper_dog": "Dog Whimper",
+ "cat": "Cat",
+ "purr": "Purr",
+ "meow": "Meow",
+ "hiss": "Hiss",
+ "caterwaul": "Caterwaul",
+ "livestock": "Livestock",
+ "horse": "Horse",
+ "clip_clop": "Clip Clop",
+ "neigh": "Neigh",
+ "cattle": "Cattle",
+ "moo": "Moo",
+ "cowbell": "Cowbell",
+ "pig": "Pig",
+ "oink": "Oink",
+ "goat": "Goat",
+ "bleat": "Bleat",
+ "sheep": "Sheep",
+ "fowl": "Fowl",
+ "chicken": "Chicken",
+ "cluck": "Cluck",
+ "cock_a_doodle_doo": "Cock-a-Doodle-Doo",
+ "turkey": "Turkey",
+ "gobble": "Gobble",
+ "duck": "Duck",
+ "quack": "Quack",
+ "goose": "Goose",
+ "honk": "Honk",
+ "wild_animals": "Wild Animals",
+ "roaring_cats": "Roaring Cats",
+ "roar": "Roar",
+ "bird": "Bird",
+ "chirp": "Chirp",
+ "squawk": "Squawk",
+ "pigeon": "Pigeon",
+ "coo": "Coo",
+ "crow": "Crow",
+ "caw": "Caw",
+ "owl": "Owl",
+ "hoot": "Hoot",
+ "flapping_wings": "Flapping Wings",
+ "dogs": "Dogs",
+ "rats": "Rats",
+ "mouse": "Mouse",
+ "patter": "Patter",
+ "insect": "Insect",
+ "cricket": "Cricket",
+ "mosquito": "Mosquito",
+ "fly": "Fly",
+ "buzz": "Buzz",
+ "frog": "Frog",
+ "croak": "Croak",
+ "snake": "Snake",
+ "rattle": "Rattle",
+ "whale_vocalization": "Whale Vocalization",
+ "music": "Music",
+ "musical_instrument": "Musical Instrument",
+ "plucked_string_instrument": "Plucked String Instrument",
+ "guitar": "Guitar",
+ "electric_guitar": "Electric Guitar",
+ "bass_guitar": "Bass Guitar",
+ "acoustic_guitar": "Acoustic Guitar",
+ "steel_guitar": "Steel Guitar",
+ "tapping": "Tapping",
+ "strum": "Strum",
+ "banjo": "Banjo",
+ "sitar": "Sitar",
+ "mandolin": "Mandolin",
+ "zither": "Zither",
+ "ukulele": "Ukulele",
+ "keyboard": "Keyboard",
+ "piano": "Piano",
+ "electric_piano": "Electric Piano",
+ "organ": "Organ",
+ "electronic_organ": "Electronic Organ",
+ "hammond_organ": "Hammond Organ",
+ "synthesizer": "Synthesizer",
+ "sampler": "Sampler",
+ "harpsichord": "Harpsichord",
+ "percussion": "Percussion",
+ "drum_kit": "Drum Kit",
+ "drum_machine": "Drum Machine",
+ "drum": "Drum",
+ "snare_drum": "Snare Drum",
+ "rimshot": "Rimshot",
+ "drum_roll": "Drum Roll",
+ "bass_drum": "Bass Drum",
+ "timpani": "Timpani",
+ "tabla": "Tabla",
+ "cymbal": "Cymbal",
+ "hi_hat": "Hi-Hat",
+ "wood_block": "Wood Block",
+ "tambourine": "Tambourine",
+ "maraca": "Maraca",
+ "gong": "Gong",
+ "tubular_bells": "Tubular Bells",
+ "mallet_percussion": "Mallet Percussion",
+ "marimba": "Marimba",
+ "glockenspiel": "Glockenspiel",
+ "vibraphone": "Vibraphone",
+ "steelpan": "Steelpan",
+ "orchestra": "Orchestra",
+ "brass_instrument": "Brass Instrument",
+ "french_horn": "French Horn",
+ "trumpet": "Trumpet",
+ "trombone": "Trombone",
+ "bowed_string_instrument": "Bowed String Instrument",
+ "string_section": "String Section",
+ "violin": "Violin",
+ "pizzicato": "Pizzicato",
+ "cello": "Cello",
+ "double_bass": "Double Bass",
+ "wind_instrument": "Wind Instrument",
+ "flute": "Flute",
+ "saxophone": "Saxophone",
+ "clarinet": "Clarinet",
+ "harp": "Harp",
+ "bell": "Bell",
+ "church_bell": "Church Bell",
+ "jingle_bell": "Jingle Bell",
+ "bicycle_bell": "Bicycle Bell",
+ "tuning_fork": "Tuning Fork",
+ "chime": "Chime",
+ "wind_chime": "Wind Chime",
+ "harmonica": "Harmonica",
+ "accordion": "Accordion",
+ "bagpipes": "Bagpipes",
+ "didgeridoo": "Didgeridoo",
+ "theremin": "Theremin",
+ "singing_bowl": "Singing Bowl",
+ "scratching": "Scratching",
+ "pop_music": "Pop Music",
+ "hip_hop_music": "Hip-Hop Music",
+ "beatboxing": "Beatboxing",
+ "rock_music": "Rock Music",
+ "heavy_metal": "Heavy Metal",
+ "punk_rock": "Punk Rock",
+ "grunge": "Grunge",
+ "progressive_rock": "Progressive Rock",
+ "rock_and_roll": "Rock and Roll",
+ "psychedelic_rock": "Psychedelic Rock",
+ "rhythm_and_blues": "Rhythm and Blues",
+ "soul_music": "Soul Music",
+ "reggae": "Reggae",
+ "country": "Country",
+ "swing_music": "Swing Music",
+ "bluegrass": "Bluegrass",
+ "funk": "Funk",
+ "folk_music": "Folk Music",
+ "middle_eastern_music": "Middle Eastern Music",
+ "jazz": "Jazz",
+ "disco": "Disco",
+ "classical_music": "Classical Music",
+ "opera": "Opera",
+ "electronic_music": "Electronic Music",
+ "house_music": "House Music",
+ "techno": "Techno",
+ "dubstep": "Dubstep",
+ "drum_and_bass": "Drum and Bass",
+ "electronica": "Electronica",
+ "electronic_dance_music": "Electronic Dance Music",
+ "ambient_music": "Ambient Music",
+ "trance_music": "Trance Music",
+ "music_of_latin_america": "Music of Latin America",
+ "salsa_music": "Salsa Music",
+ "flamenco": "Flamenco",
+ "blues": "Blues",
+ "music_for_children": "Music for Children",
+ "new-age_music": "New Age Music",
+ "vocal_music": "Vocal Music",
+ "a_capella": "A Capella",
+ "music_of_africa": "Music of Africa",
+ "afrobeat": "Afrobeat",
+ "christian_music": "Christian Music",
+ "gospel_music": "Gospel Music",
+ "music_of_asia": "Music of Asia",
+ "carnatic_music": "Carnatic Music",
+ "music_of_bollywood": "Music of Bollywood",
+ "ska": "Ska",
+ "traditional_music": "Traditional Music",
+ "independent_music": "Independent Music",
+ "song": "Song",
+ "background_music": "Background Music",
+ "theme_music": "Theme Music",
+ "jingle": "Jingle",
+ "soundtrack_music": "Soundtrack Music",
+ "lullaby": "Lullaby",
+ "video_game_music": "Video Game Music",
+ "christmas_music": "Christmas Music",
+ "dance_music": "Dance Music",
+ "wedding_music": "Wedding Music",
+ "happy_music": "Happy Music",
+ "sad_music": "Sad Music",
+ "tender_music": "Tender Music",
+ "exciting_music": "Exciting Music",
+ "angry_music": "Angry Music",
+ "scary_music": "Scary Music",
+ "wind": "Wind",
+ "rustling_leaves": "Rustling Leaves",
+ "wind_noise": "Wind Noise",
+ "thunderstorm": "Thunderstorm",
+ "thunder": "Thunder",
+ "water": "Water",
+ "rain": "Rain",
+ "raindrop": "Raindrop",
+ "rain_on_surface": "Rain on Surface",
+ "stream": "Stream",
+ "waterfall": "Waterfall",
+ "ocean": "Ocean",
+ "waves": "Waves",
+ "steam": "Steam",
+ "gurgling": "Gurgling",
+ "fire": "Fire",
+ "crackle": "Crackle",
+ "vehicle": "Vehicle",
+ "boat": "Boat",
+ "sailboat": "Sailboat",
+ "rowboat": "Rowboat",
+ "motorboat": "Motorboat",
+ "ship": "Ship",
+ "motor_vehicle": "Motor Vehicle",
+ "car": "Car",
+ "toot": "Toot",
+ "car_alarm": "Car Alarm",
+ "power_windows": "Power Windows",
+ "skidding": "Skidding",
+ "tire_squeal": "Tire Squeal",
+ "car_passing_by": "Car Passing By",
+ "race_car": "Race Car",
+ "truck": "Truck",
+ "air_brake": "Air Brake",
+ "air_horn": "Air Horn",
+ "reversing_beeps": "Reversing Beeps",
+ "ice_cream_truck": "Ice Cream Truck",
+ "bus": "Bus",
+ "emergency_vehicle": "Emergency Vehicle",
+ "police_car": "Police Car",
+ "ambulance": "Ambulance",
+ "fire_engine": "Fire Engine",
+ "motorcycle": "Motorcycle",
+ "traffic_noise": "Traffic Noise",
+ "rail_transport": "Rail Transport",
+ "train": "Train",
+ "train_whistle": "Train Whistle",
+ "train_horn": "Train Horn",
+ "railroad_car": "Railroad Car",
+ "train_wheels_squealing": "Train Wheels Squealing",
+ "subway": "Subway",
+ "aircraft": "Aircraft",
+ "aircraft_engine": "Aircraft Engine",
+ "jet_engine": "Jet Engine",
+ "propeller": "Propeller",
+ "helicopter": "Helicopter",
+ "fixed-wing_aircraft": "Fixed-Wing Aircraft",
+ "bicycle": "Bicycle",
+ "skateboard": "Skateboard",
+ "engine": "Engine",
+ "light_engine": "Light Engine",
+ "dental_drill's_drill": "Dental Drill",
+ "lawn_mower": "Lawn Mower",
+ "chainsaw": "Chainsaw",
+ "medium_engine": "Medium Engine",
+ "heavy_engine": "Heavy Engine",
+ "engine_knocking": "Engine Knocking",
+ "engine_starting": "Engine Starting",
+ "idling": "Idling",
+ "accelerating": "Accelerating",
+ "door": "Door",
+ "doorbell": "Doorbell",
+ "ding-dong": "Ding-Dong",
+ "sliding_door": "Sliding Door",
+ "slam": "Slam",
+ "knock": "Knock",
+ "tap": "Tap",
+ "squeak": "Squeak",
+ "cupboard_open_or_close": "Cupboard Open or Close",
+ "drawer_open_or_close": "Drawer Open or Close",
+ "dishes": "Dishes",
+ "cutlery": "Cutlery",
+ "chopping": "Chopping",
+ "frying": "Frying",
+ "microwave_oven": "Microwave Oven",
+ "blender": "Blender",
+ "water_tap": "Water Tap",
+ "sink": "Sink",
+ "bathtub": "Bathtub",
+ "hair_dryer": "Hair Dryer",
+ "toilet_flush": "Toilet Flush",
+ "toothbrush": "Toothbrush",
+ "electric_toothbrush": "Electric Toothbrush",
+ "vacuum_cleaner": "Vacuum Cleaner",
+ "zipper": "Zipper",
+ "keys_jangling": "Keys Jangling",
+ "coin": "Coin",
+ "scissors": "Scissors",
+ "electric_shaver": "Electric Shaver",
+ "shuffling_cards": "Shuffling Cards",
+ "typing": "Typing",
+ "typewriter": "Typewriter",
+ "computer_keyboard": "Computer Keyboard",
+ "writing": "Writing",
+ "alarm": "Alarm",
+ "telephone": "Telephone",
+ "telephone_bell_ringing": "Telephone Bell Ringing",
+ "ringtone": "Ringtone",
+ "telephone_dialing": "Telephone Dialing",
+ "dial_tone": "Dial Tone",
+ "busy_signal": "Busy Signal",
+ "alarm_clock": "Alarm Clock",
+ "siren": "Siren",
+ "civil_defense_siren": "Civil Defense Siren",
+ "buzzer": "Buzzer",
+ "smoke_detector": "Smoke Detector",
+ "fire_alarm": "Fire Alarm",
+ "foghorn": "Foghorn",
+ "whistle": "Whistle",
+ "steam_whistle": "Steam Whistle",
+ "mechanisms": "Mechanisms",
+ "ratchet": "Ratchet",
+ "clock": "Clock",
+ "tick": "Tick",
+ "tick-tock": "Tick-Tock",
+ "gears": "Gears",
+ "pulleys": "Pulleys",
+ "sewing_machine": "Sewing Machine",
+ "mechanical_fan": "Mechanical Fan",
+ "air_conditioning": "Air Conditioning",
+ "cash_register": "Cash Register",
+ "printer": "Printer",
+ "camera": "Camera",
+ "single-lens_reflex_camera": "Single-Lens Reflex Camera",
+ "tools": "Tools",
+ "hammer": "Hammer",
+ "jackhammer": "Jackhammer",
+ "sawing": "Sawing",
+ "filing": "Filing",
+ "sanding": "Sanding",
+ "power_tool": "Power Tool",
+ "drill": "Drill",
+ "explosion": "Explosion",
+ "gunshot": "Gunshot",
+ "machine_gun": "Machine Gun",
+ "fusillade": "Fusillade",
+ "artillery_fire": "Artillery Fire",
+ "cap_gun": "Cap Gun",
+ "fireworks": "Fireworks",
+ "firecracker": "Firecracker",
+ "burst": "Burst",
+ "eruption": "Eruption",
+ "boom": "Boom",
+ "wood": "Wood",
+ "chop": "Chop",
+ "splinter": "Splinter",
+ "crack": "Crack",
+ "glass": "Glass",
+ "chink": "Chink",
+ "shatter": "Shatter",
+ "silence": "Silence",
+ "sound_effect": "Sound Effect",
+ "environmental_noise": "Environmental Noise",
+ "static": "Static",
+ "white_noise": "White Noise",
+ "pink_noise": "Pink Noise",
+ "television": "Television",
+ "radio": "Radio",
+ "field_recording": "Field Recording",
+ "scream": "Scream"
+}
diff --git a/web/public/locales/en/common.json b/web/public/locales/en/common.json
new file mode 100644
index 000000000..5e87b6b45
--- /dev/null
+++ b/web/public/locales/en/common.json
@@ -0,0 +1,258 @@
+{
+ "time": {
+ "untilForTime": "Until {{time}}",
+ "untilForRestart": "Until Frigate restarts.",
+ "untilRestart": "Until restart",
+ "ago": "{{timeAgo}} ago",
+ "justNow": "Just now",
+ "today": "Today",
+ "yesterday": "Yesterday",
+ "last7": "Last 7 days",
+ "last14": "Last 14 days",
+ "last30": "Last 30 days",
+ "thisWeek": "This Week",
+ "lastWeek": "Last Week",
+ "thisMonth": "This Month",
+ "lastMonth": "Last Month",
+ "5minutes": "5 minutes",
+ "10minutes": "10 minutes",
+ "30minutes": "30 minutes",
+ "1hour": "1 hour",
+ "12hours": "12 hours",
+ "24hours": "24 hours",
+ "pm": "pm",
+ "am": "am",
+ "yr": "{{time}}yr",
+ "year_one": "{{time}} year",
+ "year_other": "{{time}} years",
+ "mo": "{{time}}mo",
+ "month_one": "{{time}} month",
+ "month_other": "{{time}} months",
+ "d": "{{time}}d",
+ "day_one": "{{time}} day",
+ "day_other": "{{time}} days",
+ "h": "{{time}}h",
+ "hour_one": "{{time}} hour",
+ "hour_other": "{{time}} hours",
+ "m": "{{time}}m",
+ "minute_one": "{{time}} minute",
+ "minute_other": "{{time}} minutes",
+ "s": "{{time}}s",
+ "second_one": "{{time}} second",
+ "second_other": "{{time}} seconds",
+ "formattedTimestamp": {
+ "12hour": "MMM d, h:mm:ss aaa",
+ "24hour": "MMM d, HH:mm:ss"
+ },
+ "formattedTimestamp2": {
+ "12hour": "MM/dd h:mm:ssa",
+ "24hour": "d MMM HH:mm:ss"
+ },
+ "formattedTimestampHourMinute": {
+ "12hour": "h:mm aaa",
+ "24hour": "HH:mm"
+ },
+ "formattedTimestampHourMinuteSecond": {
+ "12hour": "h:mm:ss aaa",
+ "24hour": "HH:mm:ss"
+ },
+ "formattedTimestampMonthDayHourMinute": {
+ "12hour": "MMM d, h:mm aaa",
+ "24hour": "MMM d, HH:mm"
+ },
+ "formattedTimestampMonthDayYear": {
+ "12hour": "MMM d, yyyy",
+ "24hour": "MMM d, yyyy"
+ },
+ "formattedTimestampMonthDayYearHourMinute": {
+ "12hour": "MMM d yyyy, h:mm aaa",
+ "24hour": "MMM d yyyy, HH:mm"
+ },
+ "formattedTimestampMonthDay": "MMM d",
+ "formattedTimestampFilename": {
+ "12hour": "MM-dd-yy-h-mm-ss-a",
+ "24hour": "MM-dd-yy-HH-mm-ss"
+ }
+ },
+ "unit": {
+ "speed": {
+ "mph": "mph",
+ "kph": "kph"
+ },
+ "length": {
+ "feet": "feet",
+ "meters": "meters"
+ }
+ },
+ "label": {
+ "back": "Go back"
+ },
+ "button": {
+ "apply": "Apply",
+ "reset": "Reset",
+ "done": "Done",
+ "enabled": "Enabled",
+ "enable": "Enable",
+ "disabled": "Disabled",
+ "disable": "Disable",
+ "save": "Save",
+ "saving": "Saving…",
+ "cancel": "Cancel",
+ "close": "Close",
+ "copy": "Copy",
+ "back": "Back",
+ "history": "History",
+ "fullscreen": "Fullscreen",
+ "exitFullscreen": "Exit Fullscreen",
+ "pictureInPicture": "Picture in Picture",
+ "twoWayTalk": "Two Way Talk",
+ "cameraAudio": "Camera Audio",
+ "on": "ON",
+ "off": "OFF",
+ "edit": "Edit",
+ "copyCoordinates": "Copy coordinates",
+ "delete": "Delete",
+ "yes": "Yes",
+ "no": "No",
+ "download": "Download",
+ "info": "Info",
+ "suspended": "Suspended",
+ "unsuspended": "Unsuspend",
+ "play": "Play",
+ "unselect": "Unselect",
+ "export": "Export",
+ "deleteNow": "Delete Now",
+ "next": "Next"
+ },
+ "menu": {
+ "system": "System",
+ "systemMetrics": "System metrics",
+ "configuration": "Configuration",
+ "systemLogs": "System logs",
+ "settings": "Settings",
+ "configurationEditor": "Configuration Editor",
+ "languages": "Languages",
+ "language": {
+ "en": "English (English)",
+ "es": "Español (Spanish)",
+ "zhCN": "简体中文 (Simplified Chinese)",
+ "hi": "हिन्दी (Hindi)",
+ "fr": "Français (French)",
+ "ar": "العربية (Arabic)",
+ "pt": "Português (Portuguese)",
+ "ru": "Русский (Russian)",
+ "de": "Deutsch (German)",
+ "ja": "日本語 (Japanese)",
+ "tr": "Türkçe (Turkish)",
+ "it": "Italiano (Italian)",
+ "nl": "Nederlands (Dutch)",
+ "sv": "Svenska (Swedish)",
+ "cs": "Čeština (Czech)",
+ "nb": "Norsk Bokmål (Norwegian Bokmål)",
+ "ko": "한국어 (Korean)",
+ "vi": "Tiếng Việt (Vietnamese)",
+ "fa": "فارسی (Persian)",
+ "pl": "Polski (Polish)",
+ "uk": "Українська (Ukrainian)",
+ "he": "עברית (Hebrew)",
+ "el": "Ελληνικά (Greek)",
+ "ro": "Română (Romanian)",
+ "hu": "Magyar (Hungarian)",
+ "fi": "Suomi (Finnish)",
+ "da": "Dansk (Danish)",
+ "sk": "Slovenčina (Slovak)",
+ "yue": "粵語 (Cantonese)",
+ "th": "ไทย (Thai)",
+ "ca": "Català (Catalan)",
+ "withSystem": {
+ "label": "Use the system settings for language"
+ }
+ },
+ "appearance": "Appearance",
+ "darkMode": {
+ "label": "Dark Mode",
+ "light": "Light",
+ "dark": "Dark",
+ "withSystem": {
+ "label": "Use the system settings for light or dark mode"
+ }
+ },
+ "withSystem": "System",
+ "theme": {
+ "label": "Theme",
+ "blue": "Blue",
+ "green": "Green",
+ "nord": "Nord",
+ "red": "Red",
+ "highcontrast": "High Contrast",
+ "default": "Default"
+ },
+ "help": "Help",
+ "documentation": {
+ "title": "Documentation",
+ "label": "Frigate documentation"
+ },
+ "restart": "Restart Frigate",
+ "live": {
+ "title": "Live",
+ "allCameras": "All Cameras",
+ "cameras": {
+ "title": "Cameras",
+ "count_one": "{{count}} Camera",
+ "count_other": "{{count}} Cameras"
+ }
+ },
+ "review": "Review",
+ "explore": "Explore",
+ "export": "Export",
+ "uiPlayground": "UI Playground",
+ "faceLibrary": "Face Library",
+ "user": {
+ "title": "User",
+ "account": "Account",
+ "current": "Current User: {{user}}",
+ "anonymous": "anonymous",
+ "logout": "Logout",
+ "setPassword": "Set Password"
+ }
+ },
+ "toast": {
+ "copyUrlToClipboard": "Copied URL to clipboard.",
+ "save": {
+ "title": "Save",
+ "error": {
+ "title": "Failed to save config changes: {{errorMessage}}",
+ "noMessage": "Failed to save config changes"
+ }
+ }
+ },
+ "role": {
+ "title": "Role",
+ "admin": "Admin",
+ "viewer": "Viewer",
+ "desc": "Admins have full access to all features in the Frigate UI. Viewers are limited to viewing cameras, review items, and historical footage in the UI."
+ },
+ "pagination": {
+ "label": "pagination",
+ "previous": {
+ "title": "Previous",
+ "label": "Go to previous page"
+ },
+ "next": {
+ "title": "Next",
+ "label": "Go to next page"
+ },
+ "more": "More pages"
+ },
+ "accessDenied": {
+ "documentTitle": "Access Denied - Frigate",
+ "title": "Access Denied",
+ "desc": "You don't have permission to view this page."
+ },
+ "notFound": {
+ "documentTitle": "Not Found - Frigate",
+ "title": "404",
+ "desc": "Page not found"
+ },
+ "selectItem": "Select {{item}}"
+}
diff --git a/web/public/locales/en/components/auth.json b/web/public/locales/en/components/auth.json
new file mode 100644
index 000000000..05c2a779f
--- /dev/null
+++ b/web/public/locales/en/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "user": "Username",
+ "password": "Password",
+ "login": "Login",
+ "errors": {
+ "usernameRequired": "Username is required",
+ "passwordRequired": "Password is required",
+ "rateLimit": "Exceeded rate limit. Try again later.",
+ "loginFailed": "Login failed",
+ "unknownError": "Unknown error. Check logs.",
+ "webUnknownError": "Unknown error. Check console logs."
+ }
+ }
+}
diff --git a/web/public/locales/en/components/camera.json b/web/public/locales/en/components/camera.json
new file mode 100644
index 000000000..10513a729
--- /dev/null
+++ b/web/public/locales/en/components/camera.json
@@ -0,0 +1,86 @@
+{
+ "group": {
+ "label": "Camera Groups",
+ "add": "Add Camera Group",
+ "edit": "Edit Camera Group",
+ "delete": {
+ "label": "Delete Camera Group",
+ "confirm": {
+ "title": "Confirm Delete",
+ "desc": "Are you sure you want to delete the camera group {{name}}?"
+ }
+ },
+ "name": {
+ "label": "Name",
+ "placeholder": "Enter a name…",
+ "errorMessage": {
+ "mustLeastCharacters": "Camera group name must be at least 2 characters.",
+ "exists": "Camera group name already exists.",
+ "nameMustNotPeriod": "Camera group name must not contain a period.",
+ "invalid": "Invalid camera group name."
+ }
+ },
+ "cameras": {
+ "label": "Cameras",
+ "desc": "Select cameras for this group."
+ },
+ "icon": "Icon",
+ "success": "Camera group ({{name}}) has been saved.",
+ "camera": {
+ "setting": {
+ "label": "Camera Streaming Settings",
+ "title": "{{cameraName}} Streaming Settings",
+ "desc": "Change the live streaming options for this camera group's dashboard. These settings are device/browser-specific.",
+ "audioIsAvailable": "Audio is available for this stream",
+ "audioIsUnavailable": "Audio is unavailable for this stream",
+ "audio": {
+ "tips": {
+ "title": "Audio must be output from your camera and configured in go2rtc for this stream.",
+ "document": "Read the documentation "
+ }
+ },
+ "stream": "Stream",
+ "placeholder": "Choose a stream",
+ "streamMethod": {
+ "label": "Streaming Method",
+ "placeholder": "Choose a streaming method",
+ "method": {
+ "noStreaming": {
+ "label": "No Streaming",
+ "desc": "Camera images will only update once per minute and no live streaming will occur."
+ },
+ "smartStreaming": {
+ "label": "Smart Streaming (recommended)",
+ "desc": "Smart streaming will update your camera image once per minute when no detectable activity is occurring to conserve bandwidth and resources. When activity is detected, the image seamlessly switches to a live stream."
+ },
+ "continuousStreaming": {
+ "label": "Continuous Streaming",
+ "desc": {
+ "title": "Camera image will always be a live stream when visible on the dashboard, even if no activity is being detected.",
+ "warning": "Continuous streaming may cause high bandwidth usage and performance issues. Use with caution."
+ }
+ }
+ }
+ },
+ "compatibilityMode": {
+ "label": "Compatibility mode",
+ "desc": "Enable this option only if your camera's live stream is displaying color artifacts and has a diagonal line on the right side of the image."
+ }
+ }
+ }
+ },
+ "debug": {
+ "options": {
+ "label": "Settings",
+ "title": "Options",
+ "showOptions": "Show Options",
+ "hideOptions": "Hide Options"
+ },
+ "boundingBox": "Bounding Box",
+ "timestamp": "Timestamp",
+ "zones": "Zones",
+ "mask": "Mask",
+ "motion": "Motion",
+ "regions": "Regions"
+ }
+}
diff --git a/web/public/locales/en/components/dialog.json b/web/public/locales/en/components/dialog.json
new file mode 100644
index 000000000..8b2dc0b88
--- /dev/null
+++ b/web/public/locales/en/components/dialog.json
@@ -0,0 +1,113 @@
+{
+ "restart": {
+ "title": "Are you sure you want to restart Frigate?",
+ "button": "Restart",
+ "restarting": {
+ "title": "Frigate is Restarting",
+ "content": "This page will reload in {{countdown}} seconds.",
+ "button": "Force Reload Now"
+ }
+ },
+ "explore": {
+ "plus": {
+ "submitToPlus": {
+ "label": "Submit To Frigate+",
+ "desc": "Objects in locations you want to avoid are not false positives. Submitting them as false positives will confuse the model."
+ },
+ "review": {
+ "question": {
+ "label": "Confirm this label for Frigate Plus",
+ "ask_a": "Is this object a {{label}}?",
+ "ask_an": "Is this object an {{label}}?",
+ "ask_full": "Is this object a {{untranslatedLabel}} ({{translatedLabel}})?"
+ },
+ "state": {
+ "submitted": "Submitted"
+ }
+ }
+ },
+ "video": {
+ "viewInHistory": "View in History"
+ }
+ },
+ "export": {
+ "time": {
+ "fromTimeline": "Select from Timeline",
+ "lastHour_one": "Last Hour",
+ "lastHour_other": "Last {{count}} Hours",
+ "custom": "Custom",
+ "start": {
+ "title": "Start Time",
+ "label": "Select Start Time"
+ },
+ "end": {
+ "title": "End Time",
+ "label": "Select End Time"
+ }
+ },
+ "name": {
+ "placeholder": "Name the Export"
+ },
+ "select": "Select",
+ "export": "Export",
+ "selectOrExport": "Select or Export",
+ "toast": {
+ "success": "Successfully started export. View the file in the /exports folder.",
+ "error": {
+ "failed": "Failed to start export: {{error}}",
+ "endTimeMustAfterStartTime": "End time must be after start time",
+ "noVaildTimeSelected": "No valid time range selected"
+ }
+ },
+ "fromTimeline": {
+ "saveExport": "Save Export",
+ "previewExport": "Preview Export"
+ }
+ },
+ "streaming": {
+ "label": "Stream",
+ "restreaming": {
+ "disabled": "Restreaming is not enabled for this camera.",
+ "desc": {
+ "title": "Set up go2rtc for additional live view options and audio for this camera.",
+ "readTheDocumentation": "Read the documentation"
+ }
+ },
+ "showStats": {
+ "label": "Show stream stats",
+ "desc": "Enable this option to show stream statistics as an overlay on the camera feed."
+ },
+ "debugView": "Debug View"
+ },
+ "search": {
+ "saveSearch": {
+ "label": "Save Search",
+ "desc": "Provide a name for this saved search.",
+ "placeholder": "Enter a name for your search",
+ "overwrite": "{{searchName}} already exists. Saving will overwrite the existing value.",
+ "success": "Search ({{searchName}}) has been saved.",
+ "button": {
+ "save": {
+ "label": "Save this search"
+ }
+ }
+ }
+ },
+ "recording": {
+ "confirmDelete": {
+ "title": "Confirm Delete",
+ "desc": {
+ "selected": "Are you sure you want to delete all recorded video associated with this review item?detect stream, check error logs"
+ },
+ "cameraDisabled": "Camera is disabled",
+ "stats": {
+ "streamType": {
+ "title": "Stream Type:",
+ "short": "Type"
+ },
+ "bandwidth": {
+ "title": "Bandwidth:",
+ "short": "Bandwidth"
+ },
+ "latency": {
+ "title": "Latency:",
+ "value": "{{seconds}} seconds",
+ "short": {
+ "title": "Latency",
+ "value": "{{seconds}} sec"
+ }
+ },
+ "totalFrames": "Total Frames:",
+ "droppedFrames": {
+ "title": "Dropped Frames:",
+ "short": {
+ "title": "Dropped",
+ "value": "{{droppedFrames}} frames"
+ }
+ },
+ "decodedFrames": "Decoded Frames:",
+ "droppedFrameRate": "Dropped Frame Rate:"
+ },
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "Successfully submitted frame to Frigate+"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "Failed to submit frame to Frigate+"
+ }
+ }
+}
diff --git a/web/public/locales/en/objects.json b/web/public/locales/en/objects.json
new file mode 100644
index 000000000..130bfcc53
--- /dev/null
+++ b/web/public/locales/en/objects.json
@@ -0,0 +1,120 @@
+{
+ "person": "Person",
+ "bicycle": "Bicycle",
+ "car": "Car",
+ "motorcycle": "Motorcycle",
+ "airplane": "Airplane",
+ "bus": "Bus",
+ "train": "Train",
+ "boat": "Boat",
+ "traffic_light": "Traffic Light",
+ "fire_hydrant": "Fire Hydrant",
+ "street_sign": "Street Sign",
+ "stop_sign": "Stop Sign",
+ "parking_meter": "Parking Meter",
+ "bench": "Bench",
+ "bird": "Bird",
+ "cat": "Cat",
+ "dog": "Dog",
+ "horse": "Horse",
+ "sheep": "Sheep",
+ "cow": "Cow",
+ "elephant": "Elephant",
+ "bear": "Bear",
+ "zebra": "Zebra",
+ "giraffe": "Giraffe",
+ "hat": "Hat",
+ "backpack": "Backpack",
+ "umbrella": "Umbrella",
+ "shoe": "Shoe",
+ "eye_glasses": "Eye Glasses",
+ "handbag": "Handbag",
+ "tie": "Tie",
+ "suitcase": "Suitcase",
+ "frisbee": "Frisbee",
+ "skis": "Skis",
+ "snowboard": "Snowboard",
+ "sports_ball": "Sports Ball",
+ "kite": "Kite",
+ "baseball_bat": "Baseball Bat",
+ "baseball_glove": "Baseball Glove",
+ "skateboard": "Skateboard",
+ "surfboard": "Surfboard",
+ "tennis_racket": "Tennis Racket",
+ "bottle": "Bottle",
+ "plate": "Plate",
+ "wine_glass": "Wine Glass",
+ "cup": "Cup",
+ "fork": "Fork",
+ "knife": "Knife",
+ "spoon": "Spoon",
+ "bowl": "Bowl",
+ "banana": "Banana",
+ "apple": "Apple",
+ "sandwich": "Sandwich",
+ "orange": "Orange",
+ "broccoli": "Broccoli",
+ "carrot": "Carrot",
+ "hot_dog": "Hot Dog",
+ "pizza": "Pizza",
+ "donut": "Donut",
+ "cake": "Cake",
+ "chair": "Chair",
+ "couch": "Couch",
+ "potted_plant": "Potted Plant",
+ "bed": "Bed",
+ "mirror": "Mirror",
+ "dining_table": "Dining Table",
+ "window": "Window",
+ "desk": "Desk",
+ "toilet": "Toilet",
+ "door": "Door",
+ "tv": "TV",
+ "laptop": "Laptop",
+ "mouse": "Mouse",
+ "remote": "Remote",
+ "keyboard": "Keyboard",
+ "cell_phone": "Cell Phone",
+ "microwave": "Microwave",
+ "oven": "Oven",
+ "toaster": "Toaster",
+ "sink": "Sink",
+ "refrigerator": "Refrigerator",
+ "blender": "Blender",
+ "book": "Book",
+ "clock": "Clock",
+ "vase": "Vase",
+ "scissors": "Scissors",
+ "teddy_bear": "Teddy Bear",
+ "hair_dryer": "Hair Dryer",
+ "toothbrush": "Toothbrush",
+ "hair_brush": "Hair Brush",
+ "vehicle": "Vehicle",
+ "squirrel": "Squirrel",
+ "deer": "Deer",
+ "animal": "Animal",
+ "bark": "Bark",
+ "fox": "Fox",
+ "goat": "Goat",
+ "rabbit": "Rabbit",
+ "raccoon": "Raccoon",
+ "robot_lawnmower": "Robot Lawnmower",
+ "waste_bin": "Waste Bin",
+ "on_demand": "On Demand",
+ "face": "Face",
+ "license_plate": "License Plate",
+ "package": "Package",
+ "bbq_grill": "BBQ Grill",
+ "amazon": "Amazon",
+ "usps": "USPS",
+ "ups": "UPS",
+ "fedex": "FedEx",
+ "dhl": "DHL",
+ "an_post": "An Post",
+ "purolator": "Purolator",
+ "postnl": "PostNL",
+ "nzpost": "NZPost",
+ "postnord": "PostNord",
+ "gls": "GLS",
+ "dpd": "DPD"
+}
diff --git a/web/public/locales/en/views/configEditor.json b/web/public/locales/en/views/configEditor.json
new file mode 100644
index 000000000..ef3035f38
--- /dev/null
+++ b/web/public/locales/en/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "documentTitle": "Config Editor - Frigate",
+ "configEditor": "Config Editor",
+ "copyConfig": "Copy Config",
+ "saveAndRestart": "Save & Restart",
+ "saveOnly": "Save Only",
+ "confirm": "Exit without saving?",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Config copied to clipboard."
+ },
+ "error": {
+ "savingError": "Error saving config"
+ }
+ }
+}
diff --git a/web/public/locales/en/views/events.json b/web/public/locales/en/views/events.json
new file mode 100644
index 000000000..98bc7c422
--- /dev/null
+++ b/web/public/locales/en/views/events.json
@@ -0,0 +1,38 @@
+{
+ "alerts": "Alerts",
+ "detections": "Detections",
+ "motion": {
+ "label": "Motion",
+ "only": "Motion only"
+ },
+ "allCameras": "All Cameras",
+ "empty": {
+ "alert": "There are no alerts to review",
+ "detection": "There are no detections to review",
+ "motion": "No motion data found"
+ },
+ "timeline": "Timeline",
+ "timeline.aria": "Select timeline",
+ "events": {
+ "label": "Events",
+ "aria": "Select events",
+ "noFoundForTimePeriod": "No events found for this time period."
+ },
+ "documentTitle": "Review - Frigate",
+ "recordings": {
+ "documentTitle": "Recordings - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "Last 24 Hours"
+ },
+ "markAsReviewed": "Mark as Reviewed",
+ "markTheseItemsAsReviewed": "Mark these items as reviewed",
+ "newReviewItems": {
+ "label": "View new review items",
+ "button": "New Items To Review"
+ },
+ "selected_one": "{{count}} selected",
+ "selected_other": "{{count}} selected",
+ "camera": "Camera",
+ "detected": "detected"
+}
diff --git a/web/public/locales/en/views/explore.json b/web/public/locales/en/views/explore.json
new file mode 100644
index 000000000..7e2381445
--- /dev/null
+++ b/web/public/locales/en/views/explore.json
@@ -0,0 +1,207 @@
+{
+ "documentTitle": "Explore - Frigate",
+ "generativeAI": "Generative AI",
+ "exploreMore": "Explore more {{label}} objects",
+ "exploreIsUnavailable": {
+ "title": "Explore is Unavailable",
+ "embeddingsReindexing": {
+ "context": "Explore can be used after tracked object embeddings have finished reindexing.",
+ "startingUp": "Starting up…",
+ "estimatedTime": "Estimated time remaining:",
+ "finishingShortly": "Finishing shortly",
+ "step": {
+ "thumbnailsEmbedded": "Thumbnails embedded: ",
+ "descriptionsEmbedded": "Descriptions embedded: ",
+ "trackedObjectsProcessed": "Tracked objects processed: "
+ }
+ },
+ "downloadingModels": {
+ "context": "Frigate is downloading the necessary embeddings models to support the Semantic Search feature. This may take several minutes depending on the speed of your network connection.",
+ "setup": {
+ "visionModel": "Vision model",
+ "visionModelFeatureExtractor": "Vision model feature extractor",
+ "textModel": "Text model",
+ "textTokenizer": "Text tokenizer"
+ },
+ "tips": {
+ "context": "You may want to reindex the embeddings of your tracked objects once the models are downloaded.",
+ "documentation": "Read the documentation"
+ },
+ "error": "An error has occurred. Check Frigate logs."
+ }
+ },
+ "trackedObjectDetails": "Tracked Object Details",
+ "type": {
+ "details": "details",
+ "snapshot": "snapshot",
+ "video": "video",
+ "object_lifecycle": "object lifecycle"
+ },
+ "objectLifecycle": {
+ "title": "Object Lifecycle",
+ "noImageFound": "No image found for this timestamp.",
+ "createObjectMask": "Create Object Mask",
+ "adjustAnnotationSettings": "Adjust annotation settings",
+ "scrollViewTips": "Scroll to view the significant moments of this object's lifecycle.",
+ "autoTrackingTips": "Bounding box positions will be inaccurate for autotracking cameras.",
+ "count": "{{first}} of {{second}}",
+ "trackedPoint": "Tracked Point",
+ "lifecycleItemDesc": {
+ "visible": "{{label}} detected",
+ "entered_zone": "{{label}} entered {{zones}}",
+ "active": "{{label}} became active",
+ "stationary": "{{label}} became stationary",
+ "attribute": {
+ "faceOrLicense_plate": "{{attribute}} detected for {{label}}",
+ "other": "{{label}} recognized as {{attribute}}"
+ },
+ "gone": "{{label}} left",
+ "heard": "{{label}} heard",
+ "external": "{{label}} detected",
+ "header": {
+ "zones": "Zones",
+ "ratio": "Ratio",
+ "area": "Area"
+ }
+ },
+ "annotationSettings": {
+ "title": "Annotation Settings",
+ "showAllZones": {
+ "title": "Show All Zones",
+ "desc": "Always show zones on frames where objects have entered a zone."
+ },
+ "offset": {
+ "label": "Annotation Offset",
+ "desc": "This data comes from your camera's detect feed but is overlayed on images from the the record feed. It is unlikely that the two streams are perfectly in sync. As a result, the bounding box and the footage will not line up perfectly. However, the annotation_offset field can be used to adjust this.",
+ "documentation": "Read the documentation ",
+ "millisecondsToOffset": "Milliseconds to offset detect annotations by. Default: 0",
+ "tips": "TIP: Imagine there is an event clip with a person walking from left to right. If the event timeline bounding box is consistently to the left of the person then the value should be decreased. Similarly, if a person is walking from left to right and the bounding box is consistently ahead of the person then the value should be increased.",
+ "toast": {
+ "success": "Annotation offset for {{camera}} has been saved to the config file. Restart Frigate to apply your changes."
+ }
+ }
+ },
+ "carousel": {
+ "previous": "Previous slide",
+ "next": "Next slide"
+ }
+ },
+ "details": {
+ "item": {
+ "title": "Review Item Details",
+ "desc": "Review item details",
+ "button": {
+ "share": "Share this review item",
+ "viewInExplore": "View in Explore"
+ },
+ "tips": {
+ "mismatch_one": "{{count}} unavailable object was detected and included in this review item. Those objects either did not qualify as an alert or detection or have already been cleaned up/deleted.",
+ "mismatch_other": "{{count}} unavailable objects were detected and included in this review item. Those objects either did not qualify as an alert or detection or have already been cleaned up/deleted.",
+ "hasMissingObjects": "Adjust your configuration if you want Frigate to save tracked objects for the following labels: {{objects}}"
+ },
+ "toast": {
+ "success": {
+ "regenerate": "A new description has been requested from {{provider}}. Depending on the speed of your provider, the new description may take some time to regenerate.",
+ "updatedSublabel": "Successfully updated sub label.",
+ "updatedLPR": "Successfully updated license plate."
+ },
+ "error": {
+ "regenerate": "Failed to call {{provider}} for a new description: {{errorMessage}}",
+ "updatedSublabelFailed": "Failed to update sub label: {{errorMessage}}",
+ "updatedLPRFailed": "Failed to update license plate: {{errorMessage}}"
+ }
+ }
+ },
+ "label": "Label",
+ "editSubLabel": {
+ "title": "Edit sub label",
+ "desc": "Enter a new sub label for this {{label}}",
+ "descNoLabel": "Enter a new sub label for this tracked object"
+ },
+ "editLPR": {
+ "title": "Edit license plate",
+ "desc": "Enter a new license plate value for this {{label}}",
+ "descNoLabel": "Enter a new license plate value for this tracked object"
+ },
+ "snapshotScore": {
+ "label": "Snapshot Score"
+ },
+ "topScore": {
+ "label": "Top Score",
+ "info": "The top score is the highest median score for the tracked object, so this may differ from the score shown on the search result thumbnail."
+ },
+ "recognizedLicensePlate": "Recognized License Plate",
+ "estimatedSpeed": "Estimated Speed",
+ "objects": "Objects",
+ "camera": "Camera",
+ "zones": "Zones",
+ "timestamp": "Timestamp",
+ "button": {
+ "findSimilar": "Find Similar",
+ "regenerate": {
+ "title": "Regenerate",
+ "label": "Regenerate tracked object description"
+ }
+ },
+ "description": {
+ "label": "Description",
+ "placeholder": "Description of the tracked object",
+ "aiTips": "Frigate will not request a description from your Generative AI provider until the tracked object's lifecycle has ended."
+ },
+ "expandRegenerationMenu": "Expand regeneration menu",
+ "regenerateFromSnapshot": "Regenerate from Snapshot",
+ "regenerateFromThumbnails": "Regenerate from Thumbnails",
+ "tips": {
+ "descriptionSaved": "Successfully saved description",
+ "saveDescriptionFailed": "Failed to update the description: {{errorMessage}}"
+ }
+ },
+ "itemMenu": {
+ "downloadVideo": {
+ "label": "Download video",
+ "aria": "Download video"
+ },
+ "downloadSnapshot": {
+ "label": "Download snapshot",
+ "aria": "Download snapshot"
+ },
+ "viewObjectLifecycle": {
+ "label": "View object lifecycle",
+ "aria": "Show the object lifecycle"
+ },
+ "findSimilar": {
+ "label": "Find similar",
+ "aria": "Find similar tracked objects"
+ },
+ "submitToPlus": {
+ "label": "Submit to Frigate+",
+ "aria": "Submit to Frigate Plus"
+ },
+ "viewInHistory": {
+ "label": "View in History",
+ "aria": "View in History"
+ },
+ "deleteTrackedObject": {
+ "label": "Delete this tracked object"
+ }
+ },
+ "dialog": {
+ "confirmDelete": {
+ "title": "Confirm Delete",
+ "desc": "Deleting this tracked object removes the snapshot, any saved embeddings, and any associated object lifecycle entries. Recorded footage of this tracked object in History view will NOT be deleted.mode: {{effectiveRetainMode}}, so this on-demand recording will only keep segments with {{effectiveRetainModeName}}."
+ },
+ "editLayout": {
+ "label": "Edit Layout",
+ "group": {
+ "label": "Edit Camera Group"
+ },
+ "exitEdit": "Exit Editing"
+ }
+}
diff --git a/web/public/locales/en/views/recording.json b/web/public/locales/en/views/recording.json
new file mode 100644
index 000000000..9ca7c43e8
--- /dev/null
+++ b/web/public/locales/en/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "export": "Export",
+ "calendar": "Calendar",
+ "filter": "Filter",
+ "filters": "Filters",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "No valid time range selected",
+ "endTimeMustAfterStartTime": "End time must be after start time"
+ }
+ }
+}
diff --git a/web/public/locales/en/views/search.json b/web/public/locales/en/views/search.json
new file mode 100644
index 000000000..22da7721f
--- /dev/null
+++ b/web/public/locales/en/views/search.json
@@ -0,0 +1,72 @@
+{
+ "search": "Search",
+ "savedSearches": "Saved Searches",
+ "searchFor": "Search for {{inputValue}}",
+ "button": {
+ "clear": "Clear search",
+ "save": "Save search",
+ "delete": "Delete saved search",
+ "filterInformation": "Filter information",
+ "filterActive": "Filters active"
+ },
+ "trackedObjectId": "Tracked Object ID",
+ "filter": {
+ "label": {
+ "cameras": "Cameras",
+ "labels": "Labels",
+ "zones": "Zones",
+ "sub_labels": "Sub Labels",
+ "search_type": "Search Type",
+ "time_range": "Time Range",
+ "before": "Before",
+ "after": "After",
+ "min_score": "Min Score",
+ "max_score": "Max Score",
+ "min_speed": "Min Speed",
+ "max_speed": "Max Speed",
+ "recognized_license_plate": "Recognized License Plate",
+ "has_clip": "Has Clip",
+ "has_snapshot": "Has Snapshot"
+ },
+ "searchType": {
+ "thumbnail": "Thumbnail",
+ "description": "Description"
+ },
+ "toast": {
+ "error": {
+ "beforeDateBeLaterAfter": "The 'before' date must be later than the 'after' date.",
+ "afterDatebeEarlierBefore": "The 'after' date must be earlier than the 'before' date.",
+ "minScoreMustBeLessOrEqualMaxScore": "The 'min_score' must be less than or equal to the 'max_score'.",
+ "maxScoreMustBeGreaterOrEqualMinScore": "The 'max_score' must be greater than or equal to the 'min_score'.",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "The 'min_speed' must be less than or equal to the 'max_speed'.",
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "The 'max_speed' must be greater than or equal to the 'min_speed'."
+ }
+ },
+ "tips": {
+ "title": "How to use text filters",
+ "desc": {
+ "text": "Filters help you narrow down your search results. Here's how to use them in the input field:",
+ "step1": "Type a filter key name followed by a colon (e.g., \"cameras:\").",
+ "step2": "Select a value from the suggestions or type your own.",
+ "step3": "Use multiple filters by adding them one after another with a space in between.",
+ "step4": "Date filters (before: and after:) use {{DateFormat}} format.",
+ "step5": "Time range filter uses {{exampleTime}} format.",
+ "step6": "Remove filters by clicking the 'x' next to them.",
+ "exampleLabel": "Example:"
+ }
+ },
+ "header": {
+ "currentFilterType": "Filter Values",
+ "noFilters": "Filters",
+ "activeFilters": "Active Filters"
+ }
+ },
+ "similaritySearch": {
+ "title": "Similarity Search",
+ "active": "Similarity search active",
+ "clear": "Clear similarity search"
+ },
+ "placeholder": {
+ "search": "Search…"
+ }
+}
diff --git a/web/public/locales/en/views/settings.json b/web/public/locales/en/views/settings.json
new file mode 100644
index 000000000..2b92e81cd
--- /dev/null
+++ b/web/public/locales/en/views/settings.json
@@ -0,0 +1,619 @@
+{
+ "documentTitle": {
+ "default": "Settings - Frigate",
+ "authentication": "Authentication Settings - Frigate",
+ "camera": "Camera Settings - Frigate",
+ "enrichments": "Enrichments Settings - Frigate",
+ "masksAndZones": "Mask and Zone Editor - Frigate",
+ "motionTuner": "Motion Tuner - Frigate",
+ "object": "Debug - Frigate",
+ "general": "General Settings - Frigate",
+ "frigatePlus": "Frigate+ Settings - Frigate",
+ "notifications": "Notification Settings - Frigate"
+ },
+ "menu": {
+ "ui": "UI",
+ "enrichments": "Enrichments",
+ "cameras": "Camera Settings",
+ "masksAndZones": "Masks / Zones",
+ "motionTuner": "Motion Tuner",
+ "debug": "Debug",
+ "users": "Users",
+ "notifications": "Notifications",
+ "frigateplus": "Frigate+"
+ },
+ "dialog": {
+ "unsavedChanges": {
+ "title": "You have unsaved changes.",
+ "desc": "Do you want to save your changes before continuing?"
+ }
+ },
+ "cameraSetting": {
+ "camera": "Camera",
+ "noCamera": "No Camera"
+ },
+ "general": {
+ "title": "General Settings",
+ "liveDashboard": {
+ "title": "Live Dashboard",
+ "automaticLiveView": {
+ "label": "Automatic Live View",
+ "desc": "Automatically switch to a camera's live view when activity is detected. Disabling this option causes static camera images on the Live dashboard to only update once per minute."
+ },
+ "playAlertVideos": {
+ "label": "Play Alert Videos",
+ "desc": "By default, recent alerts on the Live dashboard play as small looping videos. Disable this option to only show a static image of recent alerts on this device/browser."
+ }
+ },
+ "storedLayouts": {
+ "title": "Stored Layouts",
+ "desc": "The layout of cameras in a camera group can be dragged/resized. The positions are stored in your browser's local storage.",
+ "clearAll": "Clear All Layouts"
+ },
+ "cameraGroupStreaming": {
+ "title": "Camera Group Streaming Settings",
+ "desc": "Streaming settings for each camera group are stored in your browser's local storage.",
+ "clearAll": "Clear All Streaming Settings"
+ },
+ "recordingsViewer": {
+ "title": "Recordings Viewer",
+ "defaultPlaybackRate": {
+ "label": "Default Playback Rate",
+ "desc": "Default playback rate for recordings playback."
+ }
+ },
+ "calendar": {
+ "title": "Calendar",
+ "firstWeekday": {
+ "label": "First Weekday",
+ "desc": "The day that the weeks of the review calendar begin on.",
+ "sunday": "Sunday",
+ "monday": "Monday"
+ }
+ },
+ "toast": {
+ "success": {
+ "clearStoredLayout": "Cleared stored layout for {{cameraName}}",
+ "clearStreamingSettings": "Cleared streaming settings for all camera groups."
+ },
+ "error": {
+ "clearStoredLayoutFailed": "Failed to clear stored layout: {{errorMessage}}",
+ "clearStreamingSettingsFailed": "Failed to clear streaming settings: {{errorMessage}}"
+ }
+ }
+ },
+ "enrichments": {
+ "title": "Enrichments Settings",
+ "unsavedChanges": "Unsaved Enrichments settings changes",
+ "birdClassification": {
+ "title": "Bird Classification",
+ "desc": "Bird classification identifies known birds using a quantized Tensorflow model. When a known bird is recognized, its common name will be added as a sub_label. This information is included in the UI, filters, as well as in notifications."
+ },
+ "semanticSearch": {
+ "title": "Semantic Search",
+ "desc": "Semantic Search in Frigate allows you to find tracked objects within your review items using either the image itself, a user-defined text description, or an automatically generated one.",
+ "readTheDocumentation": "Read the Documentation",
+ "reindexNow": {
+ "label": "Reindex Now",
+ "desc": "Reindexing will regenerate embeddings for all tracked object. This process runs in the background and may max out your CPU and take a fair amount of time depending on the number of tracked objects you have.",
+ "confirmTitle": "Confirm Reindexing",
+ "confirmDesc": "Are you sure you want to reindex all tracked object embeddings? This process will run in the background but it may max out your CPU and take a fair amount of time. You can watch the progress on the Explore page.",
+ "confirmButton": "Reindex",
+ "success": "Reindexing started successfully.",
+ "alreadyInProgress": "Reindexing is already in progress.",
+ "error": "Failed to start reindexing: {{errorMessage}}"
+ },
+ "modelSize": {
+ "label": "Model Size",
+ "desc": "The size of the model used for semantic search embeddings.",
+ "small": {
+ "title": "small",
+ "desc": "Using small employs a quantized version of the model that uses less RAM and runs faster on CPU with a very negligible difference in embedding quality."
+ },
+ "large": {
+ "title": "large",
+ "desc": "Using large employs the full Jina model and will automatically run on the GPU if applicable."
+ }
+ }
+ },
+ "faceRecognition": {
+ "title": "Face Recognition",
+ "desc": "Face recognition allows people to be assigned names and when their face is recognized Frigate will assign the person's name as a sub label. This information is included in the UI, filters, as well as in notifications.",
+ "readTheDocumentation": "Read the Documentation",
+ "modelSize": {
+ "label": "Model Size",
+ "desc": "The size of the model used for face recognition.",
+ "small": {
+ "title": "small",
+ "desc": "Using small employs a FaceNet face embedding model that runs efficiently on most CPUs."
+ },
+ "large": {
+ "title": "large",
+ "desc": "Using large employs an ArcFace face embedding model and will automatically run on the GPU if applicable."
+ }
+ }
+ },
+ "licensePlateRecognition": {
+ "title": "License Plate Recognition",
+ "desc": "Frigate can recognize license plates on vehicles and automatically add the detected characters to the recognized_license_plate field or a known name as a sub_label to objects that are of type car. A common use case may be to read the license plates of cars pulling into a driveway or cars passing by on a street.",
+ "readTheDocumentation": "Read the Documentation"
+ },
+ "restart_required": "Restart required (Enrichments settings changed)",
+ "toast": {
+ "success": "Enrichments settings have been saved. Restart Frigate to apply your changes.",
+ "error": "Failed to save config changes: {{errorMessage}}"
+ }
+ },
+ "camera": {
+ "title": "Camera Settings",
+ "streams": {
+ "title": "Streams",
+ "desc": "Temporarily disable a camera until Frigate restarts. Disabling a camera completely stops Frigate's processing of this camera's streams. Detection, recording, and debugging will be unavailable.Motion Boxes
Red boxes will be overlaid on areas of the frame where motion is currently being detected
" + }, + "regions": { + "title": "Regions", + "desc": "Show a box of the region of interest sent to the object detector", + "tips": "Region Boxes
Bright green boxes will be overlaid on areas of interest in the frame that are being sent to the object detector.
" + }, + "objectShapeFilterDrawing": { + "title": "Object Shape Filter Drawing", + "desc": "Draw a rectangle on the image to view area and ratio details", + "tips": "Enable this option to draw a rectangle on the camera image to show its area and ratio. These values can then be used to set object shape filter parameters in your config.", + "document": "Read the documentation ", + "score": "Score", + "ratio": "Ratio", + "area": "Area" + } + }, + "users": { + "title": "Users", + "management": { + "title": "User Management", + "desc": "Manage this Frigate instance's user accounts." + }, + "addUser": "Add User", + "updatePassword": "Update Password", + "toast": { + "success": { + "createUser": "User {{user}} created successfully", + "deleteUser": "User {{user}} deleted successfully", + "updatePassword": "Password updated successfully.", + "roleUpdated": "Role updated for {{user}}" + }, + "error": { + "setPasswordFailed": "Failed to save password: {{errorMessage}}", + "createUserFailed": "Failed to create user: {{errorMessage}}", + "deleteUserFailed": "Failed to delete user: {{errorMessage}}", + "roleUpdateFailed": "Failed to update role: {{errorMessage}}" + } + }, + "table": { + "username": "Username", + "actions": "Actions", + "role": "Role", + "noUsers": "No users found.", + "changeRole": "Change user role", + "password": "Password", + "deleteUser": "Delete user" + }, + "dialog": { + "form": { + "user": { + "title": "Username", + "desc": "Only letters, numbers, periods and underscores allowed.", + "placeholder": "Enter username" + }, + "password": { + "title": "Password", + "placeholder": "Enter password", + "confirm": { + "title": "Confirm Password", + "placeholder": "Confirm Password" + }, + "strength": { + "title": "Password strength: ", + "weak": "Weak", + "medium": "Medium", + "strong": "Strong", + "veryStrong": "Very Strong" + }, + "match": "Passwords match", + "notMatch": "Passwords don't match" + }, + "newPassword": { + "title": "New Password", + "placeholder": "Enter new password", + "confirm": { + "placeholder": "Re-enter new password" + } + }, + "usernameIsRequired": "Username is required", + "passwordIsRequired": "Password is required" + }, + "createUser": { + "title": "Create New User", + "desc": "Add a new user account and specify an role for access to areas of the Frigate UI.", + "usernameOnlyInclude": "Username may only include letters, numbers, . or _", + "confirmPassword": "Please confirm your password" + }, + "deleteUser": { + "title": "Delete User", + "desc": "This action cannot be undone. This will permanently delete the user account and remove all associated data.", + "warn": "Are you sure you want to delete {{username}}?" + }, + "passwordSetting": { + "cannotBeEmpty": "Password cannot be empty", + "doNotMatch": "Passwords do not match", + "updatePassword": "Update Password for {{username}}", + "setPassword": "Set Password", + "desc": "Create a strong password to secure this account." + }, + "changeRole": { + "title": "Change User Role", + "select": "Select a role", + "desc": "Update permissions for {{username}}", + "roleInfo": { + "intro": "Select the appropriate role for this user:", + "admin": "Admin", + "adminDesc": "Full access to all features.", + "viewer": "Viewer", + "viewerDesc": "Limited to Live dashboards, Review, Explore, and Exports only." + } + } + } + }, + "notification": { + "title": "Notifications", + "notificationSettings": { + "title": "Notification Settings", + "desc": "Frigate can natively send push notifications to your device when it is running in the browser or installed as a PWA.", + "documentation": "Read the Documentation" + }, + "notificationUnavailable": { + "title": "Notifications Unavailable", + "desc": "Web push notifications require a secure context (https://…). This is a browser limitation. Access Frigate securely to use notifications.",
+ "documentation": "Read the Documentation"
+ },
+ "globalSettings": {
+ "title": "Global Settings",
+ "desc": "Temporarily suspend notifications for specific cameras on all registered devices."
+ },
+ "email": {
+ "title": "Email",
+ "placeholder": "e.g. example@email.com",
+ "desc": "A valid email is required and will be used to notify you if there are any issues with the push service."
+ },
+ "cameras": {
+ "title": "Cameras",
+ "noCameras": "No cameras available",
+ "desc": "Select which cameras to enable notifications for."
+ },
+ "deviceSpecific": "Device Specific Settings",
+ "registerDevice": "Register This Device",
+ "unregisterDevice": "Unregister This Device",
+ "sendTestNotification": "Send a test notification",
+ "unsavedRegistrations": "Unsaved Notification registrations",
+ "unsavedChanges": "Unsaved Notification changes",
+ "active": "Notifications Active",
+ "suspended": "Notifications suspended {{time}}",
+ "suspendTime": {
+ "suspend": "Suspend",
+ "5minutes": "Suspend for 5 minutes",
+ "10minutes": "Suspend for 10 minutes",
+ "30minutes": "Suspend for 30 minutes",
+ "1hour": "Suspend for 1 hour",
+ "12hours": "Suspend for 12 hours",
+ "24hours": "Suspend for 24 hours",
+ "untilRestart": "Suspend until restart"
+ },
+ "cancelSuspension": "Cancel Suspension",
+ "toast": {
+ "success": {
+ "registered": "Successfully registered for notifications. Restarting Frigate is required before any notifications (including a test notification) can be sent.",
+ "settingSaved": "Notification settings have been saved."
+ },
+ "error": {
+ "registerFailed": "Failed to save notification registration."
+ }
+ }
+ },
+ "frigatePlus": {
+ "title": "Frigate+ Settings",
+ "apiKey": {
+ "title": "Frigate+ API Key",
+ "validated": "Frigate+ API key is detected and validated",
+ "notValidated": "Frigate+ API key is not detected or not validated",
+ "desc": "The Frigate+ API key enables integration with the Frigate+ service.",
+ "plusLink": "Read more about Frigate+"
+ },
+ "snapshotConfig": {
+ "title": "Snapshot Configuration",
+ "desc": "Submitting to Frigate+ requires both snapshots and clean_copy snapshots to be enabled in your config.",
+ "documentation": "Read the documentation",
+ "cleanCopyWarning": "Some cameras have snapshots enabled but have the clean copy disabled. You need to enable clean_copy in your snapshot config to be able to submit images from these cameras to Frigate+.",
+ "table": {
+ "camera": "Camera",
+ "snapshots": "Snapshots",
+ "cleanCopySnapshots": "clean_copy Snapshots"
+ }
+ },
+ "modelInfo": {
+ "title": "Model Information",
+ "modelType": "Model Type",
+ "trainDate": "Train Date",
+ "baseModel": "Base Model",
+ "plusModelType": {
+ "baseModel": "Base Model",
+ "userModel": "Fine-Tuned"
+ },
+ "supportedDetectors": "Supported Detectors",
+ "cameras": "Cameras",
+ "loading": "Loading model information…",
+ "error": "Failed to load model information",
+ "availableModels": "Available Models",
+ "loadingAvailableModels": "Loading available models…",
+ "modelSelect": "Your available models on Frigate+ can be selected here. Note that only models compatible with your current detector configuration can be selected."
+ },
+ "unsavedChanges": "Unsaved Frigate+ settings changes",
+ "restart_required": "Restart required (Frigate+ model changed)",
+ "toast": {
+ "success": "Frigate+ settings have been saved. Restart Frigate to apply changes.",
+ "error": "Failed to save config changes: {{errorMessage}}"
+ }
+ }
+}
diff --git a/web/public/locales/en/views/system.json b/web/public/locales/en/views/system.json
new file mode 100644
index 000000000..059f05f9f
--- /dev/null
+++ b/web/public/locales/en/views/system.json
@@ -0,0 +1,180 @@
+{
+ "documentTitle": {
+ "cameras": "Cameras Stats - Frigate",
+ "storage": "Storage Stats - Frigate",
+ "general": "General Stats - Frigate",
+ "enrichments": "Enrichments Stats - Frigate",
+ "logs": {
+ "frigate": "Frigate Logs - Frigate",
+ "go2rtc": "Go2RTC Logs - Frigate",
+ "nginx": "Nginx Logs - Frigate"
+ }
+ },
+ "title": "System",
+ "metrics": "System metrics",
+ "logs": {
+ "download": {
+ "label": "Download Logs"
+ },
+ "copy": {
+ "label": "Copy to Clipboard",
+ "success": "Copied logs to clipboard",
+ "error": "Could not copy logs to clipboard"
+ },
+ "type": {
+ "label": "Type",
+ "timestamp": "Timestamp",
+ "tag": "Tag",
+ "message": "Message"
+ },
+ "tips": "Logs are streaming from the server",
+ "toast": {
+ "error": {
+ "fetchingLogsFailed": "Error fetching logs: {{errorMessage}}",
+ "whileStreamingLogs": "Error while streaming logs: {{errorMessage}}"
+ }
+ }
+ },
+ "general": {
+ "title": "General",
+ "detector": {
+ "title": "Detectors",
+ "inferenceSpeed": "Detector Inference Speed",
+ "temperature": "Detector Temperature",
+ "cpuUsage": "Detector CPU Usage",
+ "memoryUsage": "Detector Memory Usage"
+ },
+ "hardwareInfo": {
+ "title": "Hardware Info",
+ "gpuUsage": "GPU Usage",
+ "gpuMemory": "GPU Memory",
+ "gpuEncoder": "GPU Encoder",
+ "gpuDecoder": "GPU Decoder",
+ "gpuInfo": {
+ "vainfoOutput": {
+ "title": "Vainfo Output",
+ "returnCode": "Return Code: {{code}}",
+ "processOutput": "Process Output:",
+ "processError": "Process Error:"
+ },
+ "nvidiaSMIOutput": {
+ "title": "Nvidia SMI Output",
+ "name": "Name: {{name}}",
+ "driver": "Driver: {{driver}}",
+ "cudaComputerCapability": "CUDA Compute Capability: {{cuda_compute}}",
+ "vbios": "VBios Info: {{vbios}}"
+ },
+ "closeInfo": {
+ "label": "Close GPU info"
+ },
+ "copyInfo": {
+ "label": "Copy GPU info"
+ },
+ "toast": {
+ "success": "Copied GPU info to clipboard"
+ }
+ },
+ "npuUsage": "NPU Usage",
+ "npuMemory": "NPU Memory"
+ },
+ "otherProcesses": {
+ "title": "Other Processes",
+ "processCpuUsage": "Process CPU Usage",
+ "processMemoryUsage": "Process Memory Usage"
+ }
+ },
+ "storage": {
+ "title": "Storage",
+ "overview": "Overview",
+ "recordings": {
+ "title": "Recordings",
+ "tips": "This value represents the total storage used by the recordings in Frigate's database. Frigate does not track storage usage for all files on your disk.",
+ "earliestRecording": "Earliest recording available:"
+ },
+ "cameraStorage": {
+ "title": "Camera Storage",
+ "camera": "Camera",
+ "unusedStorageInformation": "Unused Storage Information",
+ "storageUsed": "Storage",
+ "percentageOfTotalUsed": "Percentage of Total",
+ "bandwidth": "Bandwidth",
+ "unused": {
+ "title": "Unused",
+ "tips": "This value may not accurately represent the free space available to Frigate if you have other files stored on your drive beyond Frigate's recordings. Frigate does not track storage usage outside of its recordings."
+ }
+ }
+ },
+ "cameras": {
+ "title": "Cameras",
+ "overview": "Overview",
+ "info": {
+ "aspectRatio": "aspect ratio",
+ "cameraProbeInfo": "{{camera}} Camera Probe Info",
+ "streamDataFromFFPROBE": "Stream data is obtained with ffprobe.",
+ "fetching": "Fetching Camera Data",
+ "stream": "Stream {{idx}}",
+ "video": "Video:",
+ "codec": "Codec:",
+ "resolution": "Resolution:",
+ "fps": "FPS:",
+ "unknown": "Unknown",
+ "audio": "Audio:",
+ "error": "Error: {{error}}",
+ "tips": {
+ "title": "Camera Probe Info"
+ }
+ },
+ "framesAndDetections": "Frames / Detections",
+ "label": {
+ "camera": "camera",
+ "detect": "detect",
+ "skipped": "skipped",
+ "ffmpeg": "FFmpeg",
+ "capture": "capture",
+ "overallFramesPerSecond": "overall frames per second",
+ "overallDetectionsPerSecond": "overall detections per second",
+ "overallSkippedDetectionsPerSecond": "overall skipped detections per second",
+ "cameraFfmpeg": "{{camName}} FFmpeg",
+ "cameraCapture": "{{camName}} capture",
+ "cameraDetect": "{{camName}} detect",
+ "cameraFramesPerSecond": "{{camName}} frames per second",
+ "cameraDetectionsPerSecond": "{{camName}} detections per second",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} skipped detections per second"
+ },
+ "toast": {
+ "success": {
+ "copyToClipboard": "Copied probe data to clipboard."
+ },
+ "error": {
+ "unableToProbeCamera": "Unable to probe camera: {{errorMessage}}"
+ }
+ }
+ },
+ "lastRefreshed": "Last refreshed: ",
+ "stats": {
+ "ffmpegHighCpuUsage": "{{camera}} has high FFmpeg CPU usage ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} has high detect CPU usage ({{detectAvg}}%)",
+ "healthy": "System is healthy",
+ "reindexingEmbeddings": "Reindexing embeddings ({{processed}}% complete)",
+ "cameraIsOffline": "{{camera}} is offline",
+ "detectIsSlow": "{{detect}} is slow ({{speed}} ms)",
+ "detectIsVerySlow": "{{detect}} is very slow ({{speed}} ms)"
+ },
+ "enrichments": {
+ "title": "Enrichments",
+ "infPerSecond": "Inferences Per Second",
+ "embeddings": {
+ "image_embedding": "Image Embedding",
+ "text_embedding": "Text Embedding",
+ "face_recognition": "Face Recognition",
+ "plate_recognition": "Plate Recognition",
+ "image_embedding_speed": "Image Embedding Speed",
+ "face_embedding_speed": "Face Embedding Speed",
+ "face_recognition_speed": "Face Recognition Speed",
+ "plate_recognition_speed": "Plate Recognition Speed",
+ "text_embedding_speed": "Text Embedding Speed",
+ "yolov9_plate_detection_speed": "YOLOv9 Plate Detection Speed",
+ "yolov9_plate_detection": "YOLOv9 Plate Detection"
+ }
+ }
+}
diff --git a/web/public/locales/es/audio.json b/web/public/locales/es/audio.json
new file mode 100644
index 000000000..16288b261
--- /dev/null
+++ b/web/public/locales/es/audio.json
@@ -0,0 +1,429 @@
+{
+ "bark": "Ladrido",
+ "sheep": "Oveja",
+ "goat": "Cabra",
+ "car": "Coche",
+ "boat": "Barco",
+ "bus": "Autobus",
+ "motorcycle": "Motocicleta",
+ "train": "Tren",
+ "skateboard": "Monopatín",
+ "sink": "Fregadero",
+ "blender": "Batidora",
+ "hair_dryer": "Secador de pelo",
+ "scissors": "Tijeras",
+ "clock": "Reloj",
+ "camera": "Cámara",
+ "door": "Puerta",
+ "dog": "Perro",
+ "horse": "Caballo",
+ "toothbrush": "Cepillo de dientes",
+ "bird": "Pájaro",
+ "vehicle": "Vehículo",
+ "mouse": "Ratón",
+ "bicycle": "Bicicleta",
+ "cat": "Gato",
+ "keyboard": "Teclado",
+ "animal": "Animal",
+ "yell": "Grito",
+ "bellow": "Voz de trueno",
+ "whoop": "Aullido",
+ "crying": "Llanto",
+ "synthetic_singing": "Canto sintético",
+ "rapping": "Rap",
+ "humming": "Tarareo",
+ "groan": "Gemido",
+ "grunt": "Gruñido",
+ "whistling": "Silbido",
+ "breathing": "Respiración",
+ "wheeze": "Sibilancia",
+ "snoring": "Ronquido",
+ "gasp": "Jadeo",
+ "snort": "Resoplido",
+ "cough": "Tos",
+ "sneeze": "Estornudo",
+ "sniff": "Oler",
+ "run": "Correr",
+ "shuffle": "Arrastrar los pies",
+ "footsteps": "Pasos",
+ "chewing": "Masticar",
+ "biting": "Morder",
+ "gargling": "Hacer gárgaras",
+ "stomach_rumble": "Rugido de estómago",
+ "burping": "Eructo",
+ "finger_snapping": "Chasquido de dedos",
+ "clapping": "Aplausos",
+ "heartbeat": "Latido del corazón",
+ "heart_murmur": "Soplo cardíaco",
+ "cheering": "Aclamación",
+ "applause": "Aplausos",
+ "whispering": "Susurro",
+ "speech": "Habla",
+ "mantra": "Mantra",
+ "fart": "Pedos",
+ "snicker": "Risa maliciosa",
+ "yodeling": "Yodeling",
+ "laughter": "Risa",
+ "child_singing": "Canto infantil",
+ "pant": "Jadeo",
+ "throat_clearing": "Despejar la garganta",
+ "sigh": "Suspiro",
+ "choir": "Coro",
+ "babbling": "Balbuceo",
+ "singing": "Canto",
+ "hands": "Manos",
+ "hiccup": "Hipido",
+ "chant": "Cántico",
+ "chatter": "Charla",
+ "crowd": "Multitud",
+ "children_playing": "Niños jugando",
+ "pets": "Mascotas",
+ "yip": "Ladrido corto",
+ "howl": "Aullido",
+ "bow_wow": "Guau",
+ "growling": "Gruñido",
+ "whimper_dog": "Gemido de perro",
+ "purr": "Ronroneo",
+ "hiss": "Siseo",
+ "caterwaul": "Aullido de gato",
+ "livestock": "Ganado",
+ "clip_clop": "Trote de caballo",
+ "neigh": "Relincho",
+ "cattle": "Ganado",
+ "moo": "Muu",
+ "cowbell": "Campanilla de vaca",
+ "pig": "Cerdo",
+ "oink": "Oink",
+ "bleat": "Balido",
+ "fowl": "Aves",
+ "cluck": "Cacareo",
+ "cock_a_doodle_doo": "Quiquiriquí",
+ "turkey": "Pavo",
+ "gobble": "Gluglú",
+ "duck": "Pato",
+ "goose": "Ganso",
+ "honk": "Bocina",
+ "wild_animals": "Animales salvajes",
+ "roar": "Rugido",
+ "chirp": "Canto (de insecto o pájaro)",
+ "pigeon": "Paloma",
+ "coo": "Arrullo",
+ "caw": "Grito de cuervo",
+ "owl": "Búho",
+ "dogs": "Perros",
+ "insect": "Insecto",
+ "cricket": "Grillo",
+ "mosquito": "Mosquito",
+ "buzz": "Zumbido",
+ "frog": "Rana",
+ "croak": "Croar",
+ "snake": "Serpiente",
+ "rattle": "Sonajero",
+ "whale_vocalization": "Vocalización de ballena",
+ "plucked_string_instrument": "Instrumento de cuerda punteada",
+ "guitar": "Guitarra",
+ "steel_guitar": "Guitarra de acero",
+ "tapping": "Tapping (técnica de guitarra)",
+ "strum": "Rasgueo",
+ "banjo": "Banjo",
+ "sitar": "Sitar",
+ "mandolin": "Mandolina",
+ "zither": "Cítara",
+ "ukulele": "Ukulele",
+ "piano": "Piano",
+ "organ": "Órgano",
+ "electronic_organ": "Órgano electrónico",
+ "hammond_organ": "Órgano Hammond",
+ "sampler": "Sampler",
+ "harpsichord": "Clavicémbalo",
+ "percussion": "Percusión",
+ "drum_kit": "Batería",
+ "drum_machine": "Caja de ritmos",
+ "drum": "Tambor",
+ "snare_drum": "Caja (o redoblante)",
+ "rimshot": "Golpe en el borde del tambor",
+ "tabla": "Tabla",
+ "cymbal": "Platillo",
+ "hi_hat": "Hi-Hat",
+ "wood_block": "Bloque de madera",
+ "tambourine": "Pandereta",
+ "maraca": "Maraca",
+ "gong": "Gong",
+ "tubular_bells": "Campanas tubulares",
+ "mallet_percussion": "Percusión con mazas",
+ "marimba": "Marimba",
+ "glockenspiel": "Glockenspiel",
+ "steelpan": "Steelpan",
+ "orchestra": "Orquesta",
+ "trumpet": "Trompeta",
+ "string_section": "Sección de cuerdas",
+ "violin": "Violín",
+ "double_bass": "Contrabajo",
+ "wind_instrument": "Instrumento de viento",
+ "flute": "Flauta",
+ "saxophone": "Saxofón",
+ "harp": "Arpa",
+ "jingle_bell": "Campanilla",
+ "bicycle_bell": "Campana de bicicleta",
+ "tuning_fork": "Diapasón",
+ "chime": "Campanilla",
+ "wind_chime": "Campanario de viento",
+ "harmonica": "Armónica",
+ "accordion": "Acordeón",
+ "didgeridoo": "Didgeridoo",
+ "theremin": "Theremín",
+ "singing_bowl": "Cuenco tibetano",
+ "scratching": "Rasguñado",
+ "hip_hop_music": "Música hip-hop",
+ "rock_music": "Música rock",
+ "heavy_metal": "Heavy metal",
+ "punk_rock": "Punk rock",
+ "progressive_rock": "Progressive rock",
+ "rock_and_roll": "Rock and roll",
+ "psychedelic_rock": "Rock psicodélico",
+ "rhythm_and_blues": "Rhythm and blues",
+ "soul_music": "Música soul",
+ "country": "Country",
+ "swing_music": "Música swing",
+ "disco": "Disco",
+ "house_music": "Música House",
+ "dubstep": "Dubstep",
+ "drum_and_bass": "Drum and Bass",
+ "electronica": "Electronica",
+ "electronic_dance_music": "Música Dance Electronica",
+ "music_of_latin_america": "Música de América Latina",
+ "salsa_music": "Música Salsa",
+ "flamenco": "Flamenco",
+ "blues": "Blues",
+ "music_for_children": "Música para niños",
+ "new-age_music": "Música New Age",
+ "vocal_music": "Música Vocal",
+ "a_capella": "A capella",
+ "afrobeat": "Afrobeat",
+ "music_of_asia": "Música de Asia",
+ "carnatic_music": "Música Carnatic",
+ "music_of_bollywood": "Música de Bollywood",
+ "ska": "Ska",
+ "song": "Canción",
+ "background_music": "Música Background",
+ "soundtrack_music": "Música de Pelicula",
+ "lullaby": "Lullaby",
+ "video_game_music": "Música de Videojuego",
+ "christmas_music": "Música Navideña",
+ "sad_music": "Música triste",
+ "tender_music": "Música suave",
+ "exciting_music": "Música emocionante",
+ "angry_music": "Música enojada",
+ "scary_music": "Música aterradora",
+ "wind": "Viento",
+ "rustling_leaves": "Hojas susurrantes",
+ "wind_noise": "Ruido del viento",
+ "thunderstorm": "Tormenta eléctrica",
+ "thunder": "Trueno",
+ "raindrop": "Gota de lluvia",
+ "stream": "Arroyo",
+ "waterfall": "Cascada",
+ "ocean": "Oceano",
+ "steam": "Vapor",
+ "gurgling": "Gorgoteo",
+ "sailboat": "Vela",
+ "rowboat": "Bote de remos",
+ "motorboat": "Lancha motora",
+ "motor_vehicle": "Vehículo a motor",
+ "toot": "Pitido",
+ "tire_squeal": "Chillido de neumáticos",
+ "car_passing_by": "Coche pasando",
+ "ambulance": "Ambulancia",
+ "fire_engine": "Camión de bomberos",
+ "traffic_noise": "Ruido de tráfico",
+ "rail_transport": "Transporte ferroviario",
+ "aircraft_engine": "Aeronave motor",
+ "engine": "Motor",
+ "chainsaw": "Motosierra",
+ "medium_engine": "Motor de tamaño medio",
+ "heavy_engine": "Motor pesado",
+ "engine_knocking": "Golpeteo del motor",
+ "engine_starting": "Arranque del motor",
+ "idling": "Ralentí",
+ "accelerating": "Acelerando",
+ "doorbell": "Timbre",
+ "ding-dong": "Ding Dong",
+ "sliding_door": "Puerta corredera",
+ "slam": "Portazo",
+ "knock": "Golpe",
+ "tap": "Golpe suave",
+ "cupboard_open_or_close": "Apertura o cierre del armario",
+ "drawer_open_or_close": "Apertura o cierre del cajón",
+ "dishes": "Platos",
+ "cutlery": "Cubertería",
+ "chopping": "Cortando",
+ "frying": "Freír",
+ "microwave_oven": "Horno Microondas",
+ "water_tap": "Grifo de Agua",
+ "toilet_flush": "Descarga del Inodoro",
+ "electric_toothbrush": "Cepillo de Dientes Eléctrico",
+ "vacuum_cleaner": "Aspiradora",
+ "zipper": "Cremallera",
+ "keys_jangling": "Llaves Tintineando",
+ "coin": "Moneda",
+ "electric_shaver": "Afeitadora Eléctrica",
+ "shuffling_cards": "Barajar Cartas",
+ "typing": "Teclear",
+ "typewriter": "Máquina de Escribir",
+ "computer_keyboard": "Teclado de Computadora",
+ "writing": "Escribir",
+ "alarm": "Alarma",
+ "telephone": "Teléfono",
+ "telephone_bell_ringing": "Timbre de Teléfono Sonando",
+ "ringtone": "Tono de Llamada",
+ "telephone_dialing": "Marcación de Teléfono",
+ "dial_tone": "Tono de Marcación",
+ "busy_signal": "Señal de Ocupado",
+ "alarm_clock": "Reloj Despertador",
+ "siren": "Sirena",
+ "civil_defense_siren": "Sirena de Defensa Civil",
+ "buzzer": "Zumbador",
+ "fire_alarm": "Alarma de Incendio",
+ "foghorn": "Bocina de Niebla",
+ "whistle": "Silbato",
+ "steam_whistle": "Silbato de Vapor",
+ "mechanisms": "Mecanismos",
+ "ratchet": "Trinquete",
+ "tick": "Tictac",
+ "tick-tock": "Tictoc",
+ "gears": "Engranajes",
+ "pulleys": "Poleas",
+ "sewing_machine": "Máquina de Coser",
+ "mechanical_fan": "Ventilador Mecánico",
+ "air_conditioning": "Aire Acondicionado",
+ "cash_register": "Caja Registradora",
+ "printer": "Impresora",
+ "fly": "Mosca",
+ "patter": "Golpeteo",
+ "bell": "Campana",
+ "meow": "Miau",
+ "squawk": "Chillido",
+ "classical_music": "Música Clásica",
+ "cello": "Violoncello",
+ "quack": "Cuac",
+ "hoot": "Ulular",
+ "synthesizer": "Sintetizador",
+ "happy_music": "Música Alegre",
+ "timpani": "Tímpano",
+ "bowed_string_instrument": "Instrumento de cuerda frotada",
+ "jazz": "Jazz",
+ "train_whistle": "Silbido de tren",
+ "car_alarm": "Alarma de coche",
+ "truck": "Camion",
+ "ice_cream_truck": "Camión de helados",
+ "railroad_car": "Vagón de tren",
+ "aircraft": "Aeronave",
+ "helicopter": "Helicóptero",
+ "light_engine": "Motor ligero",
+ "dental_drill's_drill": "Talonador dental",
+ "crow": "Cuervo",
+ "flapping_wings": "Aleteo de alas",
+ "opera": "Opera",
+ "funk": "Funk",
+ "roaring_cats": "Gatos rugiendo",
+ "chicken": "Pollo",
+ "bagpipes": "Gaita",
+ "rats": "Ratas",
+ "music": "Música",
+ "musical_instrument": "Música instrumental",
+ "electric_guitar": "Guitarra eléctrica",
+ "bass_drum": "Bombo",
+ "acoustic_guitar": "Guitarra acústica",
+ "pizzicato": "Pizzicato",
+ "beatboxing": "Beatboxing",
+ "bass_guitar": "Bajo eléctrico",
+ "bluegrass": "Bluegrass",
+ "folk_music": "Música Folk",
+ "electronic_music": "Música electrónica",
+ "techno": "Techno",
+ "french_horn": "Trompa francesa",
+ "ship": "Barco",
+ "lawn_mower": "Cortacésped",
+ "electric_piano": "Piano eléctrico",
+ "train_wheels_squealing": "Chillido de ruedas de tren",
+ "drum_roll": "Redoble de tambor",
+ "vibraphone": "Vibrafón",
+ "trombone": "Trombón",
+ "brass_instrument": "Instrumento de metal",
+ "church_bell": "Campana de iglesia",
+ "clarinet": "Clarinete",
+ "grunge": "Grunge",
+ "pop_music": "Música pop",
+ "jingle": "Single",
+ "rain_on_surface": "Lluvia sobre superficie",
+ "emergency_vehicle": "Vehículo de emergencias",
+ "ambient_music": "Música Ambiente",
+ "trance_music": "Música Trance",
+ "music_of_africa": "Música de Africa",
+ "christian_music": "Música Cristiana",
+ "gospel_music": "Música Gospel",
+ "traditional_music": "Música Tradicional",
+ "wedding_music": "Música de Boda",
+ "rain": "Lluvia",
+ "waves": "Ondas",
+ "fire": "Fuego",
+ "police_car": "Coche de policia",
+ "squeak": "Chirrido",
+ "crackle": "Crepitar",
+ "reggae": "Reggae",
+ "middle_eastern_music": "Música del Medio Oriente",
+ "smoke_detector": "Detector de Humo",
+ "race_car": "Coche de carreras",
+ "air_horn": "Bocina de aire",
+ "independent_music": "Música Independiente",
+ "theme_music": "Música de Película",
+ "dance_music": "Música Dance",
+ "fixed-wing_aircraft": "Aeronave de ala fija",
+ "water": "Agua",
+ "propeller": "Hélice",
+ "air_brake": "Freno de aire",
+ "jet_engine": "Motor a reacción",
+ "power_windows": "Ventanas eléctricas",
+ "skidding": "Deslizamiento",
+ "reversing_beeps": "Bips de marcha atras",
+ "bathtub": "Bañera",
+ "train_horn": "Bocina de tren",
+ "subway": "Metro",
+ "single-lens_reflex_camera": "Cámara Réflex de un Solo Objetivo",
+ "tools": "Herramientas",
+ "hammer": "Martillo",
+ "filing": "Limar",
+ "jackhammer": "Martillo Neumático",
+ "sawing": "Serrar",
+ "sanding": "Lijar",
+ "power_tool": "Herramienta Eléctrica",
+ "burst": "Estallido",
+ "eruption": "Erupción",
+ "boom": "Estallido (Boom)",
+ "firecracker": "Petardo",
+ "artillery_fire": "Fuego de Artillería",
+ "cap_gun": "Pistola de Fulminantes",
+ "fireworks": "Fuegos Artificiales",
+ "wood": "Madera",
+ "chop": "Cortar (Madera)",
+ "splinter": "Astilla",
+ "crack": "Crujido",
+ "chink": "Tintineo (de Vidrio)",
+ "glass": "Vidrio",
+ "environmental_noise": "Ruido Ambiental",
+ "sound_effect": "Efecto de sonido",
+ "shatter": "Romperse",
+ "static": "Estatico",
+ "silence": "Silencio",
+ "scream": "Grito",
+ "white_noise": "Ruido Blanco",
+ "drill": "Taladro",
+ "field_recording": "Grabación de Campo",
+ "explosion": "Explosión",
+ "machine_gun": "Ametralladora",
+ "television": "Televisión",
+ "radio": "Radio",
+ "gunshot": "Disparo",
+ "fusillade": "Descarga de Fusilería",
+ "pink_noise": "Ruido Rosa"
+}
diff --git a/web/public/locales/es/common.json b/web/public/locales/es/common.json
new file mode 100644
index 000000000..bf6a735fa
--- /dev/null
+++ b/web/public/locales/es/common.json
@@ -0,0 +1,275 @@
+{
+ "time": {
+ "yesterday": "Ayer",
+ "thisMonth": "Este mes",
+ "yr": "{{time}}año",
+ "formattedTimestampWithYear": {
+ "12hour": "%b %-d %Y, %I:%M %p",
+ "24hour": "%b %-d %Y, %H:%M"
+ },
+ "second_one": "{{time}} segundo",
+ "second_many": "{{time}} segundos",
+ "second_other": "{{time}} segundos",
+ "formattedTimestampOnlyMonthAndDay": "%b %-d",
+ "formattedTimestampExcludeSeconds": {
+ "24hour": "%b %-d, %H:%M",
+ "12hour": "%b %-d, %I:%M %p"
+ },
+ "formattedTimestamp": {
+ "24hour": "MMM d, HH:mm:ss",
+ "12hour": "MMM d, h:mm:ss aaa"
+ },
+ "day_one": "{{time}} día",
+ "day_many": "{{time}} días",
+ "day_other": "{{time}} días",
+ "untilForTime": "Hasta {{time}}",
+ "untilForRestart": "Hasta que Frigate se reinicie.",
+ "untilRestart": "Hasta que se reinicie",
+ "ago": "Hace {{timeAgo}}",
+ "justNow": "Ahora mismo",
+ "today": "Hoy",
+ "last7": "Últimos 7 días",
+ "last14": "Últimos 14 días",
+ "last30": "Últimos 30 días",
+ "thisWeek": "Esta semana",
+ "lastWeek": "Semana pasada",
+ "lastMonth": "Mes pasado",
+ "10minutes": "10 minutos",
+ "30minutes": "30 minutos",
+ "1hour": "1 hora",
+ "12hours": "12 horas",
+ "24hours": "24 horas",
+ "pm": "pm",
+ "year_one": "{{time}} año",
+ "year_many": "{{time}} años",
+ "year_other": "{{time}} años",
+ "mo": "{{time}}mes",
+ "month_one": "{{time}} mes",
+ "month_many": "{{time}} meses",
+ "month_other": "{{time}} meses",
+ "h": "{{time}}h",
+ "m": "{{time}}m",
+ "minute_one": "{{time}} minuto",
+ "minute_many": "{{time}} minutos",
+ "minute_other": "{{time}} minutos",
+ "s": "{{time}}s",
+ "formattedTimestamp2": {
+ "12hour": "MM/dd h:mm:ssa",
+ "24hour": "d MMM HH:mm:ss"
+ },
+ "5minutes": "5 minutos",
+ "am": "am",
+ "d": "{{time}}d",
+ "hour_one": "{{time}} hora",
+ "hour_many": "{{time}} horas",
+ "hour_other": "{{time}} horas",
+ "formattedTimestampHourMinute": {
+ "12hour": "h:mm aaa",
+ "24hour": "HH:mm"
+ },
+ "formattedTimestampMonthDayHourMinute": {
+ "12hour": "MMM d, h:mm aaa",
+ "24hour": "MMM d, HH:mm"
+ },
+ "formattedTimestampMonthDay": "MMM d",
+ "formattedTimestampFilename": {
+ "12hour": "MM-dd-yy-h-mm-ss-a",
+ "24hour": "MM-dd-yy-HH-mm-ss"
+ },
+ "formattedTimestampHourMinuteSecond": {
+ "12hour": "h:mm:ss aaa",
+ "24hour": "HH:mm:ss"
+ },
+ "formattedTimestampMonthDayYearHourMinute": {
+ "12hour": "MMM d yyyy, h:mm aaa",
+ "24hour": "MMM d yyyy, HH:mm"
+ },
+ "formattedTimestampMonthDayYear": {
+ "12hour": "MMM d, yyyy",
+ "24hour": "MMM d, yyyy"
+ }
+ },
+ "menu": {
+ "settings": "Ajustes",
+ "export": "Exportar",
+ "user": {
+ "title": "Usuario",
+ "account": "Cuenta",
+ "anonymous": "Anónimo",
+ "logout": "Cerrar sesión",
+ "setPassword": "Establecer contraseña",
+ "current": "Usuario actual: {{user}}"
+ },
+ "systemMetrics": "Métricas del sistema",
+ "help": "Ayuda",
+ "system": "Sistema",
+ "configuration": "Configuración",
+ "systemLogs": "Registros del sistema",
+ "configurationEditor": "Editor de configuración",
+ "languages": "Idiomas",
+ "language": {
+ "en": "English (Inglés)",
+ "zhCN": "简体中文 (Chino simplificado)",
+ "withSystem": {
+ "label": "Usar los ajustes del sistema para el idioma"
+ },
+ "ru": "Русский (Ruso)",
+ "de": "Deutsch (Alemán)",
+ "ja": "日本語 (Japonés)",
+ "tr": "Türkçe (Turco)",
+ "sv": "Svenska (Sueco)",
+ "nb": "Norsk Bokmål (Noruego Bokmål)",
+ "ko": "한국어 (Coreano)",
+ "vi": "Tiếng Việt (Vietnamita)",
+ "fa": "فارسی (Persa)",
+ "pl": "Polski (Polaco)",
+ "uk": "Українська (Ucraniano)",
+ "he": "עברית (Hebreo)",
+ "el": "Ελληνικά (Griego)",
+ "ro": "Română (Rumano)",
+ "hu": "Magyar (Húngaro)",
+ "fi": "Suomi (Finlandés)",
+ "it": "Italian (Italiano)",
+ "da": "Dansk (Danés)",
+ "sk": "Slovenčina (Eslovaco)",
+ "hi": "हिन्दी (Hindi)",
+ "es": "Español",
+ "ar": "العربية (Árabe)",
+ "pt": "Português (Portugues)",
+ "cs": "Čeština (Checo)",
+ "nl": "Nederlands (Neerlandés)",
+ "fr": "Français (Frances)",
+ "yue": "粵語 (Cantonés)",
+ "th": "ไทย (Tailandés)",
+ "ca": "Català (Catalan)"
+ },
+ "appearance": "Apariencia",
+ "darkMode": {
+ "label": "Modo oscuro",
+ "light": "Claro",
+ "dark": "Oscuro",
+ "withSystem": {
+ "label": "Usar los ajustes del sistema para el modo claro u oscuro"
+ }
+ },
+ "withSystem": "Sistema",
+ "theme": {
+ "label": "Tema",
+ "blue": "Azul",
+ "green": "Verde",
+ "nord": "Nord",
+ "red": "Rojo",
+ "contrast": "Alto contraste",
+ "default": "Predeterminado",
+ "highcontrast": "Alto Contraste"
+ },
+ "documentation": {
+ "title": "Documentación",
+ "label": "Documentación de Frigate"
+ },
+ "restart": "Reiniciar Frigate",
+ "live": {
+ "title": "Directo",
+ "cameras": {
+ "title": "Cámaras",
+ "count_one": "{{count}} Cámara",
+ "count_many": "{{count}} Cámaras",
+ "count_other": "{{count}} Cámaras"
+ },
+ "allCameras": "Todas las cámaras"
+ },
+ "review": "Revisar",
+ "explore": "Explorar",
+ "uiPlayground": "Zona de pruebas de la interfaz de usuario",
+ "faceLibrary": "Biblioteca de rostros"
+ },
+ "unit": {
+ "speed": {
+ "mph": "mph",
+ "kph": "kph"
+ },
+ "length": {
+ "meters": "Metros",
+ "feet": "Pies"
+ }
+ },
+ "button": {
+ "off": "APAGADO",
+ "copyCoordinates": "Copiar coordenadas",
+ "fullscreen": "Pantalla completa",
+ "apply": "Aplicar",
+ "reset": "Restablecer",
+ "done": "Hecho",
+ "enable": "Habilitar",
+ "disabled": "Deshabilitado",
+ "disable": "Deshabilitar",
+ "save": "Guardar",
+ "cancel": "Cancelar",
+ "close": "Cerrar",
+ "copy": "Copiar",
+ "back": "Atrás",
+ "history": "Historial",
+ "pictureInPicture": "Imagen en imagen",
+ "twoWayTalk": "Conversación bidireccional",
+ "cameraAudio": "Audio de la cámara",
+ "delete": "Eliminar",
+ "yes": "Sí",
+ "no": "No",
+ "download": "Descargar",
+ "info": "Información",
+ "suspended": "Suspendido",
+ "unsuspended": "Reactivar",
+ "play": "Reproducir",
+ "unselect": "Deseleccionar",
+ "export": "Exportar",
+ "deleteNow": "Eliminar ahora",
+ "next": "Siguiente",
+ "edit": "Editar",
+ "enabled": "Habilitado",
+ "saving": "Guardando…",
+ "exitFullscreen": "Salir de pantalla completa",
+ "on": "ENCENDIDO"
+ },
+ "toast": {
+ "save": {
+ "error": {
+ "noMessage": "No se pudieron guardar los cambios de configuración",
+ "title": "No se pudieron guardar los cambios de configuración: {{errorMessage}}"
+ },
+ "title": "Guardar"
+ },
+ "copyUrlToClipboard": "URL copiada al portapapeles."
+ },
+ "label": {
+ "back": "Volver atrás"
+ },
+ "role": {
+ "title": "Rol",
+ "admin": "Administrador",
+ "viewer": "Espectador",
+ "desc": "Los administradores tienen acceso completo a todas las funciones en la interfaz de usuario de Frigate. Los espectadores están limitados a ver cámaras, elementos de revisión y grabaciones históricas en la interfaz de usuario."
+ },
+ "pagination": {
+ "label": "paginación",
+ "previous": {
+ "title": "Anterior",
+ "label": "Ir a la página anterior"
+ },
+ "next": {
+ "title": "Siguiente",
+ "label": "Ir a la página siguiente"
+ },
+ "more": "Más páginas"
+ },
+ "accessDenied": {
+ "documentTitle": "Acceso denegado - Frigate",
+ "desc": "No tienes permiso para ver esta página.",
+ "title": "Acceso denegado"
+ },
+ "notFound": {
+ "documentTitle": "No se ha encontrado - Frigate",
+ "title": "404",
+ "desc": "Página no encontrada"
+ },
+ "selectItem": "Seleccionar {{item}}"
+}
diff --git a/web/public/locales/es/components/auth.json b/web/public/locales/es/components/auth.json
new file mode 100644
index 000000000..fde9c5a9f
--- /dev/null
+++ b/web/public/locales/es/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "user": "Nombre de usuario",
+ "errors": {
+ "passwordRequired": "Se requiere contraseña",
+ "rateLimit": "Se ha superado el límite de solicitudes. Intenta de nuevo más tarde.",
+ "webUnknownError": "Error desconocido. Revisa los registros de la consola.",
+ "usernameRequired": "Se requiere nombre de usuario",
+ "unknownError": "Error desconocido. Revisa los registros.",
+ "loginFailed": "Error de inicio de sesión"
+ },
+ "password": "Contraseña",
+ "login": "Iniciar sesión"
+ }
+}
diff --git a/web/public/locales/es/components/camera.json b/web/public/locales/es/components/camera.json
new file mode 100644
index 000000000..bf036e0ae
--- /dev/null
+++ b/web/public/locales/es/components/camera.json
@@ -0,0 +1,86 @@
+{
+ "group": {
+ "label": "Grupos de cámaras",
+ "add": "Agregar grupo de cámaras",
+ "edit": "Editar grupo de cámaras",
+ "delete": {
+ "label": "Eliminar grupo de cámaras",
+ "confirm": {
+ "title": "Confirmar eliminación",
+ "desc": "¿Estás seguro de que quieres eliminar el grupo de cámaras {{name}}?"
+ }
+ },
+ "name": {
+ "label": "Nombre",
+ "placeholder": "Introduce un nombre…",
+ "errorMessage": {
+ "mustLeastCharacters": "El nombre del grupo de cámaras debe tener al menos 2 caracteres.",
+ "nameMustNotPeriod": "El nombre del grupo de cámaras no debe contener un punto.",
+ "invalid": "Nombre de grupo de cámaras no válido.",
+ "exists": "El nombre del grupo de cámaras ya existe."
+ }
+ },
+ "cameras": {
+ "desc": "Selecciona cámaras para este grupo.",
+ "label": "Cámaras"
+ },
+ "icon": "Icono",
+ "success": "El grupo de cámaras ({{name}}) ha sido guardado.",
+ "camera": {
+ "setting": {
+ "title": "Ajustes de transmisión de {{cameraName}}",
+ "audioIsAvailable": "El audio está disponible para esta transmisión",
+ "audioIsUnavailable": "El audio no está disponible para esta transmisión",
+ "audio": {
+ "tips": {
+ "title": "El audio debe provenir de tu cámara y estar configurado en go2rtc para esta transmisión.",
+ "document": "Leer la documentación "
+ }
+ },
+ "streamMethod": {
+ "method": {
+ "noStreaming": {
+ "desc": "Las imágenes de la cámara solo se actualizarán una vez por minuto y no habrá transmisión en vivo.",
+ "label": "Sin transmisión"
+ },
+ "smartStreaming": {
+ "label": "Transmisión inteligente (recomendada)",
+ "desc": "La transmisión inteligente actualizará la imagen de tu cámara una vez por minuto cuando no se detecte actividad para conservar ancho de banda y recursos. Cuando se detecte actividad, la imagen cambiará sin problemas a una transmisión en vivo."
+ },
+ "continuousStreaming": {
+ "label": "Transmisión continua",
+ "desc": {
+ "title": "La imagen de la cámara siempre será una transmisión en vivo cuando esté visible en el panel de control, incluso si no se detecta ninguna actividad.",
+ "warning": "La transmisión continua puede causar un alto uso de ancho de banda y problemas de rendimiento. Usa con precaución."
+ }
+ }
+ },
+ "label": "Método de transmisión",
+ "placeholder": "Elige un método de transmisión"
+ },
+ "compatibilityMode": {
+ "label": "Modo de compatibilidad",
+ "desc": "Habilita esta opción solo si la transmisión en vivo de tu cámara muestra artefactos de color y tiene una línea diagonal en el lado derecho de la imagen."
+ },
+ "label": "Ajustes de transmisión de la cámara",
+ "desc": "Cambia las opciones de transmisión en vivo para el panel de control de este grupo de cámaras. Estos ajustes son específicos del dispositivo/navegador.",
+ "placeholder": "Elige una transmisión",
+ "stream": "Transmitir"
+ }
+ }
+ },
+ "debug": {
+ "options": {
+ "label": "Ajustes",
+ "title": "Opciones",
+ "showOptions": "Mostrar opciones",
+ "hideOptions": "Ocultar opciones"
+ },
+ "timestamp": "Marca de tiempo",
+ "zones": "Zonas",
+ "motion": "Movimiento",
+ "regions": "Regiones",
+ "boundingBox": "Caja delimitadora",
+ "mask": "Máscara"
+ }
+}
diff --git a/web/public/locales/es/components/dialog.json b/web/public/locales/es/components/dialog.json
new file mode 100644
index 000000000..376b385e6
--- /dev/null
+++ b/web/public/locales/es/components/dialog.json
@@ -0,0 +1,126 @@
+{
+ "restart": {
+ "restarting": {
+ "title": "Frigate se está reiniciando",
+ "button": "Forzar recarga ahora",
+ "content": "Esta página se recargará en {{countdown}} segundos."
+ },
+ "title": "¿Estás seguro de que quieres reiniciar Frigate?",
+ "button": "Reiniciar"
+ },
+ "explore": {
+ "plus": {
+ "submitToPlus": {
+ "label": "Enviar a Frigate+",
+ "desc": "Los objetos en ubicaciones que deseas evitar no son falsos positivos. Enviarlos como falsos positivos confundirá al modelo."
+ },
+ "review": {
+ "false": {
+ "label": "No confirmar esta etiqueta para Frigate Plus",
+ "false_one": "Esto no es un {{label}}",
+ "false_many": "Esto no es un {{label}}",
+ "false_other": "Esto no es un {{label}}"
+ },
+ "true": {
+ "true_one": "Esto es un {{label}}",
+ "true_many": "Esto es un {{label}}",
+ "true_other": "Esto es un {{label}}",
+ "label": "Confirmar esta etiqueta para Frigate+"
+ },
+ "state": {
+ "submitted": "Enviado"
+ },
+ "question": {
+ "label": "Confirmar esta etiqueta para Frigate Plus",
+ "ask_a": "¿Es este objeto un {{label}}?",
+ "ask_an": "¿Es este objeto un {{label}}?",
+ "ask_full": "¿Es este objeto un {{untranslatedLabel}} ({{translatedLabel}})?"
+ }
+ }
+ },
+ "video": {
+ "viewInHistory": "Ver en el historial"
+ }
+ },
+ "export": {
+ "time": {
+ "fromTimeline": "Seleccionar desde la línea de tiempo",
+ "lastHour_one": "Última hora",
+ "lastHour_many": "Últimas {{count}} horas",
+ "lastHour_other": "Últimas {{count}} horas",
+ "custom": "Personalizado",
+ "start": {
+ "title": "Hora de inicio",
+ "label": "Seleccionar hora de inicio"
+ },
+ "end": {
+ "title": "Hora de finalización",
+ "label": "Seleccionar hora de finalización"
+ }
+ },
+ "name": {
+ "placeholder": "Nombrar la exportación"
+ },
+ "select": "Seleccionar",
+ "export": "Exportar",
+ "toast": {
+ "error": {
+ "failed": "No se pudo iniciar la exportación: {{error}}",
+ "noVaildTimeSelected": "No se seleccionó un rango de tiempo válido.",
+ "endTimeMustAfterStartTime": "La hora de finalización debe ser posterior a la hora de inicio."
+ },
+ "success": "Exportación iniciada con éxito. Ver el archivo en la carpeta /exports."
+ },
+ "fromTimeline": {
+ "saveExport": "Guardar exportación",
+ "previewExport": "Vista previa de la exportación"
+ },
+ "selectOrExport": "Seleccionar o exportar"
+ },
+ "streaming": {
+ "restreaming": {
+ "disabled": "La retransmisión no está habilitada para esta cámara.",
+ "desc": {
+ "title": "Configura go2rtc para opciones adicionales de vista en vivo y audio para esta cámara.",
+ "readTheDocumentation": "Leer la documentación"
+ }
+ },
+ "debugView": "Vista de depuración",
+ "label": "Transmisión",
+ "showStats": {
+ "label": "Mostrar estadísticas de transmisión",
+ "desc": "Habilita esta opción para mostrar las estadísticas de transmisión como una superposición en la imagen de la cámara."
+ }
+ },
+ "search": {
+ "saveSearch": {
+ "label": "Guardar búsqueda",
+ "desc": "Proporciona un nombre para esta búsqueda guardada.",
+ "overwrite": "{{searchName}} ya existe. Guardar sobrescribirá el valor existente.",
+ "success": "La búsqueda ({{searchName}}) ha sido guardada.",
+ "button": {
+ "save": {
+ "label": "Guardar esta búsqueda"
+ }
+ },
+ "placeholder": "Introduce un nombre para tu búsqueda"
+ }
+ },
+ "recording": {
+ "confirmDelete": {
+ "title": "Confirmar eliminación",
+ "desc": {
+ "selected": "¿Estás seguro de que quieres eliminar todo el video grabado asociado con este elemento de revisión?detect de {{cameraName}}, revisa los registros de errores",
+ "title": "Transmisión desconectada"
+ },
+ "cameraDisabled": "La cámara está deshabilitada",
+ "stats": {
+ "streamType": {
+ "title": "Tipo de transmisión:",
+ "short": "Tipo"
+ },
+ "bandwidth": {
+ "title": "Ancho de banda:",
+ "short": "Ancho de banda"
+ },
+ "latency": {
+ "title": "Latencia:",
+ "short": {
+ "title": "Latencia",
+ "value": "{{seconds}} seg"
+ },
+ "value": "{{seconds}} segundos"
+ },
+ "totalFrames": "Fotogramas totales:",
+ "droppedFrames": {
+ "title": "Fotogramas perdidos:",
+ "short": {
+ "title": "Perdidos",
+ "value": "{{droppedFrames}} fotogramas"
+ }
+ },
+ "decodedFrames": "Fotogramas decodificados:",
+ "droppedFrameRate": "Tasa de fotogramas perdidos:"
+ },
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "Fotograma enviado correctamente a Frigate+"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "Error al enviar el fotograma a Frigate+"
+ }
+ },
+ "livePlayerRequiredIOSVersion": "Se requiere iOS 17.1 o superior para este tipo de transmisión en vivo.",
+ "noRecordingsFoundForThisTime": "No se encontraron grabaciones para este momento"
+}
diff --git a/web/public/locales/es/objects.json b/web/public/locales/es/objects.json
new file mode 100644
index 000000000..0e972102c
--- /dev/null
+++ b/web/public/locales/es/objects.json
@@ -0,0 +1,120 @@
+{
+ "person": "Persona",
+ "bicycle": "Bicicleta",
+ "car": "Coche",
+ "motorcycle": "Motocicleta",
+ "airplane": "Avión",
+ "bus": "Autobus",
+ "train": "Tren",
+ "boat": "Barco",
+ "traffic_light": "Semáforo",
+ "fire_hydrant": "Boca de incendios",
+ "street_sign": "Señal de tráfico",
+ "stop_sign": "Señal de stop",
+ "parking_meter": "Parquímetro",
+ "bench": "Banco",
+ "dog": "Perro",
+ "cow": "Vaca",
+ "elephant": "Elefante",
+ "bear": "Oso",
+ "zebra": "Cebra",
+ "giraffe": "Jirafa",
+ "hat": "Sombrero",
+ "backpack": "Mochila",
+ "shoe": "Zapato",
+ "eye_glasses": "Gafas",
+ "handbag": "Bolso de mano",
+ "tie": "Corbata",
+ "suitcase": "Maleta",
+ "frisbee": "Disco Volador",
+ "skis": "Esquís",
+ "sports_ball": "Pelota deportiva",
+ "kite": "Cometa",
+ "baseball_glove": "Guante de béisbol",
+ "skateboard": "Monopatín",
+ "surfboard": "Tabla de surf",
+ "tennis_racket": "Raqueta de tenis",
+ "bottle": "Botella",
+ "plate": "Plato",
+ "wine_glass": "Copa de vino",
+ "cup": "Taza",
+ "fork": "Tenedor",
+ "spoon": "Cuchara",
+ "bowl": "Cuenco",
+ "apple": "Manzana",
+ "orange": "Naranja",
+ "broccoli": "Brócoli",
+ "carrot": "Zanahoria",
+ "hot_dog": "Perrito caliente",
+ "pizza": "Pizza",
+ "donut": "Donut",
+ "chair": "Silla",
+ "couch": "Sofá",
+ "potted_plant": "Planta en maceta",
+ "bed": "Cama",
+ "mirror": "Espejo",
+ "dining_table": "Mesa de comedor",
+ "window": "Ventana",
+ "desk": "Escritorio",
+ "toilet": "Inodoro",
+ "door": "Puerta",
+ "laptop": "Portátil",
+ "mouse": "Ratón",
+ "remote": "Mando a distancia",
+ "keyboard": "Teclado",
+ "cell_phone": "Teléfono móvil",
+ "microwave": "Microondas",
+ "toaster": "Tostadora",
+ "sink": "Fregadero",
+ "refrigerator": "Frigorífico",
+ "blender": "Batidora",
+ "clock": "Reloj",
+ "vase": "Jarrón",
+ "scissors": "Tijeras",
+ "teddy_bear": "Osito de peluche",
+ "hair_dryer": "Secador de pelo",
+ "vehicle": "Vehículo",
+ "squirrel": "Ardilla",
+ "deer": "Ciervo",
+ "bark": "Ladrido",
+ "rabbit": "Conejo",
+ "face": "Rostro",
+ "license_plate": "Matrícula",
+ "package": "Paquete",
+ "bbq_grill": "Parrilla de barbacoa",
+ "ups": "UPS",
+ "fedex": "FedEx",
+ "dhl": "DHL",
+ "an_post": "An Post",
+ "purolator": "Purolator",
+ "postnl": "PostNL",
+ "umbrella": "Paraguas",
+ "horse": "Caballo",
+ "tv": "Televisión",
+ "on_demand": "Bajo demanda",
+ "toothbrush": "Cepillo de dientes",
+ "hair_brush": "Cepillo de pelo",
+ "amazon": "Amazon",
+ "sheep": "Oveja",
+ "bird": "Pájaro",
+ "knife": "Cuchillo",
+ "cake": "Tarta",
+ "baseball_bat": "Bate de béisbol",
+ "oven": "Horno",
+ "waste_bin": "Papelera",
+ "snowboard": "Snowboard",
+ "sandwich": "Sandwich",
+ "fox": "Zorro",
+ "nzpost": "NZPost",
+ "cat": "Gato",
+ "banana": "Plátano",
+ "book": "Libro",
+ "raccoon": "Mapache",
+ "dpd": "DPD",
+ "goat": "Cabra",
+ "robot_lawnmower": "Cortacésped robotizado",
+ "animal": "Animal",
+ "postnord": "PostNord",
+ "usps": "USPS",
+ "gls": "GLS"
+}
diff --git a/web/public/locales/es/views/configEditor.json b/web/public/locales/es/views/configEditor.json
new file mode 100644
index 000000000..39514ec82
--- /dev/null
+++ b/web/public/locales/es/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "configEditor": "Editor de Configuración",
+ "copyConfig": "Copiar configuración",
+ "saveAndRestart": "Guardar y reiniciar",
+ "saveOnly": "Guardar solo",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Configuración copiada al portapapeles."
+ },
+ "error": {
+ "savingError": "Error al guardar la configuración"
+ }
+ },
+ "documentTitle": "Editor de Configuración - Frigate",
+ "confirm": "¿Salir sin guardar?"
+}
diff --git a/web/public/locales/es/views/events.json b/web/public/locales/es/views/events.json
new file mode 100644
index 000000000..b06cd92e9
--- /dev/null
+++ b/web/public/locales/es/views/events.json
@@ -0,0 +1,39 @@
+{
+ "alerts": "Alertas",
+ "detections": "Detecciones",
+ "motion": {
+ "label": "Movimiento",
+ "only": "Solo movimiento"
+ },
+ "allCameras": "Todas las cámaras",
+ "empty": {
+ "alert": "No hay alertas para revisar",
+ "detection": "No hay detecciones para revisar",
+ "motion": "No se encontraron datos de movimiento"
+ },
+ "timeline": "Línea de tiempo",
+ "timeline.aria": "Seleccionar línea de tiempo",
+ "events": {
+ "label": "Eventos",
+ "aria": "Seleccionar eventos",
+ "noFoundForTimePeriod": "No se encontraron eventos para este período de tiempo."
+ },
+ "documentTitle": "Revisión - Frigate",
+ "markAsReviewed": "Marcar como revisado",
+ "newReviewItems": {
+ "label": "Ver nuevos elementos de revisión",
+ "button": "Nuevos elementos para revisar"
+ },
+ "camera": "Cámara",
+ "recordings": {
+ "documentTitle": "Grabaciones - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "Últimas 24 horas"
+ },
+ "markTheseItemsAsReviewed": "Marcar estos elementos como revisados",
+ "selected": "{{count}} seleccionados",
+ "selected_one": "{{count}} seleccionados",
+ "selected_other": "{{count}} seleccionados",
+ "detected": "detectado"
+}
diff --git a/web/public/locales/es/views/explore.json b/web/public/locales/es/views/explore.json
new file mode 100644
index 000000000..f5fb869e0
--- /dev/null
+++ b/web/public/locales/es/views/explore.json
@@ -0,0 +1,209 @@
+{
+ "generativeAI": "Inteligencia Artificial Generativa",
+ "exploreIsUnavailable": {
+ "title": "Explorar no está disponible",
+ "embeddingsReindexing": {
+ "startingUp": "Iniciando…",
+ "estimatedTime": "Tiempo estimado restante:",
+ "finishingShortly": "Finalizando en breve",
+ "step": {
+ "thumbnailsEmbedded": "Miniaturas incrustadas: ",
+ "descriptionsEmbedded": "Descripciones incrustadas: ",
+ "trackedObjectsProcessed": "Objetos rastreados procesados: "
+ },
+ "context": "Explorar puede usarse después de que las incrustaciones de objetos rastreados hayan terminado de reindexarse."
+ },
+ "downloadingModels": {
+ "context": "Frigate está descargando los modelos de incrustaciones necesarios para soportar la función de Búsqueda Semántica. Esto puede tomar varios minutos dependiendo de la velocidad de tu conexión de red.",
+ "error": "Ha ocurrido un error. Revisa los registros de Frigate.",
+ "setup": {
+ "visionModelFeatureExtractor": "Extractor de características del modelo de visión",
+ "visionModel": "Modelo de visión",
+ "textModel": "Modelo de texto",
+ "textTokenizer": "Tokenizador de texto"
+ },
+ "tips": {
+ "context": "Es posible que desees reindexar las incrustaciones de tus objetos rastreados una vez que se hayan descargado los modelos.",
+ "documentation": "Leer la documentación"
+ }
+ }
+ },
+ "details": {
+ "timestamp": "Marca de tiempo",
+ "item": {
+ "title": "Detalles del elemento de revisión",
+ "desc": "Detalles del elemento de revisión",
+ "button": {
+ "share": "Compartir este elemento de revisión",
+ "viewInExplore": "Ver en Explorar"
+ },
+ "toast": {
+ "success": {
+ "updatedSublabel": "Subetiqueta actualizada con éxito.",
+ "regenerate": "Se ha solicitado una nueva descripción a {{provider}}. Dependiendo de la velocidad de tu proveedor, la nueva descripción puede tardar algún tiempo en regenerarse.",
+ "updatedLPR": "Matrícula actualizada con éxito."
+ },
+ "error": {
+ "regenerate": "No se pudo llamar a {{provider}} para una nueva descripción: {{errorMessage}}",
+ "updatedSublabelFailed": "No se pudo actualizar la subetiqueta: {{errorMessage}}",
+ "updatedLPRFailed": "No se pudo actualizar la matrícula: {{errorMessage}}"
+ }
+ },
+ "tips": {
+ "mismatch_one": "Se detectó y se incluyó en este elemento de revisión un objeto {{count}} no disponible. Esos objetos no calificaron como alerta o detección o ya han sido limpiados/eliminados.",
+ "mismatch_many": "Se detectaron y se incluyeron en este elemento de revisión {{count}} objetos no disponibles. Esos objetos no calificaron como alerta o detección o ya han sido limpiados/eliminados.",
+ "mismatch_other": "Se detectaron y se incluyeron en este elemento de revisión {{count}} objetos no disponibles. Esos objetos no calificaron como alerta o detección o ya han sido limpiados/eliminados.",
+ "hasMissingObjects": "Ajusta tu configuración si quieres que Frigate guarde los objetos rastreados para las siguientes etiquetas: {{objects}}"
+ }
+ },
+ "topScore": {
+ "label": "Puntuación máxima",
+ "info": "La puntuación máxima es la mediana más alta para el objeto rastreado, por lo que puede diferir de la puntuación mostrada en la miniatura del resultado de búsqueda."
+ },
+ "description": {
+ "aiTips": "Frigate no solicitará una descripción a tu proveedor de Inteligencia Artificial Generativa hasta que el ciclo de vida del objeto rastreado haya terminado.",
+ "placeholder": "Descripción del objeto rastreado",
+ "label": "Descripción"
+ },
+ "expandRegenerationMenu": "Expandir menú de regeneración",
+ "regenerateFromSnapshot": "Regenerar desde captura de pantalla",
+ "regenerateFromThumbnails": "Regenerar desde miniaturas",
+ "tips": {
+ "descriptionSaved": "Descripción guardada con éxito",
+ "saveDescriptionFailed": "No se pudo actualizar la descripción: {{errorMessage}}"
+ },
+ "zones": "Zonas",
+ "label": "Etiqueta",
+ "editSubLabel": {
+ "title": "Editar subetiqueta",
+ "descNoLabel": "Introduce una nueva subetiqueta para este objeto rastreado",
+ "desc": "Introduce una nueva subetiqueta para este {{label}}"
+ },
+ "button": {
+ "regenerate": {
+ "label": "Regenerar descripción del objeto rastreado",
+ "title": "Regenerar"
+ },
+ "findSimilar": "Buscar similares"
+ },
+ "objects": "Objetos",
+ "estimatedSpeed": "Velocidad estimada",
+ "camera": "Cámara",
+ "editLPR": {
+ "title": "Editar matrícula",
+ "desc": "Introduce un nuevo valor de matrícula para este {{label}}",
+ "descNoLabel": "Introduce un nuevo valor de matrícula para este objeto rastreado"
+ },
+ "recognizedLicensePlate": "Matrícula Reconocida",
+ "snapshotScore": {
+ "label": "Puntuación de Instantánea"
+ }
+ },
+ "documentTitle": "Explorar - Frigate",
+ "trackedObjectDetails": "Detalles del objeto rastreado",
+ "type": {
+ "snapshot": "captura instantánea",
+ "video": "vídeo",
+ "object_lifecycle": "ciclo de vida del objeto",
+ "details": "detalles"
+ },
+ "objectLifecycle": {
+ "title": "Ciclo de vida del objeto",
+ "noImageFound": "No se encontró ninguna imagen para esta marca de tiempo.",
+ "createObjectMask": "Crear máscara de objeto",
+ "adjustAnnotationSettings": "Ajustar configuración de anotaciones",
+ "scrollViewTips": "Desplázate para ver los momentos significativos del ciclo de vida de este objeto.",
+ "lifecycleItemDesc": {
+ "visible": "{{label}} detectado",
+ "entered_zone": "{{label}} entró en {{zones}}",
+ "attribute": {
+ "other": "{{label}} reconocido como {{attribute}}",
+ "faceOrLicense_plate": "{{attribute}} detectado para {{label}}"
+ },
+ "gone": "{{label}} salió",
+ "heard": "{{label}} escuchado",
+ "external": "{{label}} detectado",
+ "active": "{{label}} se activó",
+ "stationary": "{{label}} se volvió estacionario",
+ "header": {
+ "zones": "Zonas",
+ "ratio": "Proporción",
+ "area": "Área"
+ }
+ },
+ "annotationSettings": {
+ "offset": {
+ "label": "Desplazamiento de anotación",
+ "millisecondsToOffset": "Milisegundos para desplazar las anotaciones de detección. Valor por defecto: 0",
+ "desc": "Estos datos provienen de la transmisión de detección de tu cámara, pero se superponen en imágenes de la transmisión de grabación. Es poco probable que ambas transmisiones estén perfectamente sincronizadas. Como resultado, la caja delimitadora y la grabación no estarán perfectamente alineadas. Sin embargo, el campo annotation_offset se puede usar para ajustar esto.",
+ "documentation": "Leer la documentación ",
+ "tips": "CONSEJO: Imagina que hay un clip de evento con una persona caminando de izquierda a derecha. Si la caja delimitadora de la línea de tiempo del evento está constantemente a la izquierda de la persona, entonces se debe disminuir el valor. Del mismo modo, si una persona camina de izquierda a derecha y la caja delimitadora está constantemente por delante de la persona, entonces se debe aumentar el valor.",
+ "toast": {
+ "success": "El desplazamiento de anotación para {{camera}} se ha guardado en el archivo de configuración. Reinicia Frigate para aplicar los cambios."
+ }
+ },
+ "showAllZones": {
+ "title": "Mostrar todas las zonas",
+ "desc": "Mostrar siempre las zonas en los fotogramas donde los objetos hayan entrado en una zona."
+ },
+ "title": "Configuración de anotaciones"
+ },
+ "carousel": {
+ "previous": "Diapositiva anterior",
+ "next": "Siguiente diapositiva"
+ },
+ "autoTrackingTips": "Las posiciones de las cajas delimitadoras serán inexactas para cámaras con seguimiento automático.",
+ "count": "{{first}} de {{second}}",
+ "trackedPoint": "Punto Rastreado"
+ },
+ "itemMenu": {
+ "downloadVideo": {
+ "label": "Descargar video",
+ "aria": "Descargar video"
+ },
+ "downloadSnapshot": {
+ "label": "Descargar captura de pantalla",
+ "aria": "Descargar captura de pantalla"
+ },
+ "viewObjectLifecycle": {
+ "label": "Ver ciclo de vida del objeto",
+ "aria": "Mostrar el ciclo de vida del objeto"
+ },
+ "findSimilar": {
+ "label": "Buscar similares",
+ "aria": "Buscar objetos rastreados similares"
+ },
+ "submitToPlus": {
+ "label": "Enviar a Frigate+",
+ "aria": "Enviar a Frigate Plus"
+ },
+ "viewInHistory": {
+ "aria": "Ver en Historial",
+ "label": "Ver en Historial"
+ },
+ "deleteTrackedObject": {
+ "label": "Eliminar este objeto rastreado"
+ }
+ },
+ "dialog": {
+ "confirmDelete": {
+ "title": "Confirmar eliminación",
+ "desc": "Eliminar este objeto rastreado elimina la captura de pantalla, cualquier incrustación guardada y cualquier entrada asociada al ciclo de vida del objeto. Las grabaciones de este objeto rastreado en la vista de Historial NO se eliminarán.modo: {{effectiveRetainMode}}, por lo que esta grabación bajo demanda solo mantendrá segmentos con {{effectiveRetainModeName}}."
+ },
+ "editLayout": {
+ "label": "Editar diseño",
+ "group": {
+ "label": "Editar grupo de cámaras"
+ },
+ "exitEdit": "Salir de la edición"
+ }
+}
diff --git a/web/public/locales/es/views/recording.json b/web/public/locales/es/views/recording.json
new file mode 100644
index 000000000..ad362aab0
--- /dev/null
+++ b/web/public/locales/es/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "export": "Exportar",
+ "calendar": "Calendario",
+ "filter": "Filtro",
+ "filters": "Filtros",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "No se ha seleccionado un rango de tiempo válido",
+ "endTimeMustAfterStartTime": "La hora de finalización debe ser posterior a la hora de inicio"
+ }
+ }
+}
diff --git a/web/public/locales/es/views/search.json b/web/public/locales/es/views/search.json
new file mode 100644
index 000000000..7458c491d
--- /dev/null
+++ b/web/public/locales/es/views/search.json
@@ -0,0 +1,74 @@
+{
+ "search": "Búsqueda",
+ "savedSearches": "Búsquedas Guardadas",
+ "searchFor": "Búsqueda de {{inputValue}}",
+ "button": {
+ "save": "Guardar búsqueda",
+ "delete": "Eliminar búsqueda guardada",
+ "clear": "Borrar búsqueda",
+ "filterInformation": "Información de filtro",
+ "filterActive": "Filtros activos"
+ },
+ "trackedObjectId": "ID de Objeto Rastreado",
+ "filter": {
+ "label": {
+ "cameras": "Cámaras",
+ "labels": "Etiquetas",
+ "zones": "Zonas",
+ "sub_labels": "Subetiquetas",
+ "search_type": "Tipo de Búsqueda",
+ "time_range": "Rango de Tiempo",
+ "before": "Antes",
+ "after": "Después",
+ "min_score": "Puntuación Mínima",
+ "max_score": "Puntuación Máxima",
+ "min_speed": "Velocidad Mínima",
+ "max_speed": "Velocidad Máxima",
+ "recognized_license_plate": "Matrícula Reconocida",
+ "has_clip": "Tiene Clip",
+ "has_snapshot": "Tiene Instantánea"
+ },
+ "searchType": {
+ "thumbnail": "Miniatura",
+ "description": "Descripción"
+ },
+ "toast": {
+ "error": {
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "La 'velocidad máxima' debe ser mayor o igual que la 'velocidad mínima'.",
+ "maxScoreMustBeGreaterOrEqualMinScore": "La 'puntuación máxima' debe ser mayor o igual que la 'puntuación mínima'.",
+ "beforeDateBeLaterAfter": "La fecha 'antes' debe ser posterior a la fecha 'después'.",
+ "minScoreMustBeLessOrEqualMaxScore": "La 'puntuación mínima' debe ser menor o igual que la 'puntuación máxima'.",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "La 'velocidad mínima' debe ser menor o igual que la 'velocidad máxima'.",
+ "afterDatebeEarlierBefore": "La fecha 'después' debe ser anterior a la fecha 'antes'."
+ }
+ },
+ "tips": {
+ "title": "Cómo usar filtros de texto",
+ "desc": {
+ "text": "Los filtros te ayudan a reducir los resultados de tu búsqueda. Aquí te explicamos cómo usarlos en el campo de entrada:",
+ "example": "Ejemplo: cameras:front_door label:person before:01012024 time_range:3:00PM-4:00PM ",
+ "step": "Cajas de Movimiento
Se superpondrán cajas rojas en las áreas del fotograma donde se está detectando movimiento actualmente
" + }, + "regions": { + "title": "Regiones", + "desc": "Mostrar una caja de la región de interés enviada al detector de objetos", + "tips": "Cajas de Región
Se superpondrán cajas verdes brillantes en las áreas de interés del fotograma que se envían al detector de objetos.
" + }, + "objectShapeFilterDrawing": { + "title": "Dibujo de Filtro de Forma de Objetos", + "desc": "Dibuja un rectángulo en la imagen para ver los detalles de área y proporción", + "tips": "Habilita esta opción para dibujar un rectángulo en la imagen de la cámara y mostrar su área y proporción. Estos valores pueden usarse luego para establecer parámetros de filtro de forma de objetos en tu configuración.", + "document": "Lee la documentación ", + "score": "Puntuación", + "ratio": "Proporción", + "area": "Área" + } + }, + "users": { + "title": "Usuarios", + "management": { + "title": "Gestión de Usuarios", + "desc": "Gestiona las cuentas de usuario de esta instancia de Frigate." + }, + "addUser": "Añadir usuario", + "toast": { + "success": { + "createUser": "Usuario {{user}} creado correctamente", + "deleteUser": "Usuario {{user}} eliminado correctamente", + "updatePassword": "Contraseña actualizada correctamente.", + "roleUpdated": "Rol actualizado para {{user}}" + }, + "error": { + "createUserFailed": "Error al crear el usuario: {{errorMessage}}", + "deleteUserFailed": "Error al eliminar el usuario: {{errorMessage}}", + "roleUpdateFailed": "Error al actualizar el rol: {{errorMessage}}", + "setPasswordFailed": "Error al guardar la contraseña: {{errorMessage}}" + } + }, + "table": { + "username": "Nombre de usuario", + "actions": "Acciones", + "role": "Rol", + "noUsers": "No se encontraron usuarios.", + "changeRole": "Cambiar el rol del usuario", + "password": "Contraseña", + "deleteUser": "Eliminar usuario" + }, + "dialog": { + "form": { + "user": { + "title": "Nombre de usuario", + "placeholder": "Introduce el nombre de usuario", + "desc": "Solo se permiten letras, números, puntos y guiones bajos." + }, + "password": { + "title": "Contraseña", + "placeholder": "Introduce la contraseña", + "confirm": { + "title": "Confirma la contraseña", + "placeholder": "Confirma la contraseña" + }, + "strength": { + "title": "Fortaleza de la contraseña: ", + "weak": "Débil", + "medium": "Media", + "strong": "Fuerte", + "veryStrong": "Muy fuerte" + }, + "match": "Las contraseñas coinciden", + "notMatch": "Las contraseñas no coinciden" + }, + "newPassword": { + "title": "Nueva contraseña", + "placeholder": "Introduce la nueva contraseña", + "confirm": { + "placeholder": "Vuelve a introducir la nueva contraseña" + } + }, + "usernameIsRequired": "Se requiere el nombre de usuario", + "passwordIsRequired": "Se requiere contraseña" + }, + "passwordSetting": { + "updatePassword": "Actualizar contraseña para {{username}}", + "setPassword": "Establecer contraseña", + "desc": "Crear una contraseña fuerte para asegurar esta cuenta.", + "cannotBeEmpty": "La contraseña no puede estar vacía", + "doNotMatch": "Las contraseñas no coinciden" + }, + "createUser": { + "desc": "Añadir una nueva cuenta de usuario y especificar un rol para el acceso a áreas de la interfaz de usuario de Frigate.", + "title": "Crear nuevo usuario", + "usernameOnlyInclude": "El nombre de usuario solo puede incluir letras, números, . o _", + "confirmPassword": "Por favor, confirma tu contraseña" + }, + "changeRole": { + "title": "Cambiar rol de usuario", + "desc": "Actualizar permisos para {{username}}", + "roleInfo": { + "intro": "Selecciona el rol adecuado para este usuario:", + "adminDesc": "Acceso completo a todas las funciones.", + "viewerDesc": "Limitado a paneles en vivo, revisión, exploración y exportaciones únicamente.", + "viewer": "Espectador", + "admin": "Administrador" + }, + "select": "Selecciona un rol" + }, + "deleteUser": { + "warn": "¿Estás seguro de que quieres eliminar {{username}}?", + "title": "Eliminar usuario", + "desc": "Esta acción no se puede deshacer. Esto eliminará permanentemente la cuenta de usuario y eliminará todos los datos asociados." + } + }, + "updatePassword": "Actualizar contraseña" + }, + "notification": { + "title": "Notificaciones", + "notificationSettings": { + "title": "Configuración de notificaciones", + "desc": "Frigate puede enviar notificaciones push a tu dispositivo de forma nativa cuando se ejecuta en el navegador o está instalado como una PWA.", + "documentation": "Leer la documentación" + }, + "notificationUnavailable": { + "title": "Notificaciones no disponibles", + "documentation": "Leer la documentación", + "desc": "Las notificaciones push web requieren un contexto seguro (https://…). Esto es una limitación del navegador. Accede a Frigate de forma segura para usar las notificaciones."
+ },
+ "globalSettings": {
+ "title": "Configuración global",
+ "desc": "Suspender temporalmente las notificaciones de cámaras específicas en todos los dispositivos registrados."
+ },
+ "email": {
+ "title": "Correo electrónico",
+ "placeholder": "p.ej. ejemplo@correo.com",
+ "desc": "Se requiere un correo electrónico válido y se utilizará para notificarte si hay algún problema con el servicio de notificaciones push."
+ },
+ "cameras": {
+ "title": "Cámaras",
+ "noCameras": "No hay cámaras disponibles",
+ "desc": "Selecciona qué cámaras habilitar para las notificaciones."
+ },
+ "deviceSpecific": "Configuración específica del dispositivo",
+ "registerDevice": "Registrar este dispositivo",
+ "sendTestNotification": "Enviar una notificación de prueba",
+ "active": "Notificaciones activas",
+ "suspended": "Notificaciones suspendidas {{time}}",
+ "suspendTime": {
+ "5minutes": "Suspender por 5 minutos",
+ "1hour": "Suspender por 1 hora",
+ "12hours": "Suspender por 12 horas",
+ "untilRestart": "Suspender hasta reiniciar",
+ "30minutes": "Suspender por 30 minutos",
+ "24hours": "Suspender por 24 horas",
+ "10minutes": "Suspender por 10 minutos",
+ "suspend": "Suspender"
+ },
+ "cancelSuspension": "Cancelar suspensión",
+ "toast": {
+ "success": {
+ "settingSaved": "La configuración de notificaciones se ha guardado.",
+ "registered": "Registrado correctamente para las notificaciones. Es necesario reiniciar Frigate antes de que se puedan enviar notificaciones (incluida una notificación de prueba)."
+ },
+ "error": {
+ "registerFailed": "Error al guardar el registro de notificaciones."
+ }
+ },
+ "unregisterDevice": "Cancelar el registro de este dispositivo",
+ "unsavedRegistrations": "Registros de notificaciones no guardados",
+ "unsavedChanges": "Cambios de notificaciones no guardados"
+ },
+ "frigatePlus": {
+ "title": "Configuración de Frigate+",
+ "apiKey": {
+ "title": "Clave API de Frigate+",
+ "notValidated": "La clave API de Frigate+ no ha sido detectada o no ha sido validada",
+ "plusLink": "Lee más sobre Frigate+",
+ "desc": "La clave API de Frigate+ permite la integración con el servicio Frigate+.",
+ "validated": "La clave API de Frigate+ ha sido detectada y validada"
+ },
+ "snapshotConfig": {
+ "title": "Configuración de instantáneas",
+ "documentation": "Leer la documentación",
+ "table": {
+ "camera": "Cámara",
+ "snapshots": "Instantáneas",
+ "cleanCopySnapshots": "clean_copy Instantáneas"
+ },
+ "desc": "Enviar a Frigate+ requiere que tanto las capturas instantáneas como las capturas clean_copy estén habilitadas en tu configuración.",
+ "cleanCopyWarning": "Algunas cámaras tienen las instantáneas habilitadas pero tienen la copia limpia desactivada. Necesitas habilitar clean_copy en tu configuración de instantáneas para poder enviar imágenes de estas cámaras a Frigate+."
+ },
+ "modelInfo": {
+ "title": "Información del modelo",
+ "modelType": "Tipo de modelo",
+ "baseModel": "Modelo base",
+ "supportedDetectors": "Detectores compatibles",
+ "dimensions": "Dimensiones",
+ "cameras": "Cámaras",
+ "loading": "Cargando información del modelo…",
+ "error": "No se pudo cargar la información del modelo",
+ "availableModels": "Modelos disponibles",
+ "loadingAvailableModels": "Cargando modelos disponibles…",
+ "modelSelect": "Tus modelos disponibles en Frigate+ se pueden seleccionar aquí. Ten en cuenta que solo se pueden seleccionar modelos compatibles con tu configuración actual de detectores.",
+ "trainDate": "Fecha de entrenamiento",
+ "plusModelType": {
+ "baseModel": "Modelo Base",
+ "userModel": "Ajustado Finamente"
+ }
+ },
+ "toast": {
+ "success": "La configuración de Frigate+ se ha guardado. Reinicia Frigate para aplicar los cambios.",
+ "error": "No se pudieron guardar los cambios en la configuración: {{errorMessage}}"
+ },
+ "restart_required": "Es necesario reiniciar (se ha cambiado el modelo Frigate+)",
+ "unsavedChanges": "Cambios en la configuración de Frigate+ no guardados"
+ },
+ "enrichments": {
+ "title": "Configuración de Análisis Avanzado",
+ "unsavedChanges": "Cambios sin guardar en la configuración de Análisis Avanzado",
+ "birdClassification": {
+ "title": "Clasificación de Aves",
+ "desc": "La clasificación de aves identifica especies conocidas utilizando un modelo cuantizado de TensorFlow. Cuando se reconoce un ave conocida, su nombre se añade como una subetiqueta (sub_label). Esta información se incluye en la interfaz de usuario, los filtros y las notificaciones."
+ },
+ "semanticSearch": {
+ "title": "Búsqueda Semántica",
+ "desc": "La búsqueda semántica en Frigate te permite encontrar objetos rastreados dentro de tus elementos de revisión utilizando ya sea la imagen en sí, una descripción de texto definida por el usuario o una generada automáticamente.",
+ "readTheDocumentation": "Leer la Documentación",
+ "reindexNow": {
+ "confirmTitle": "Confirmar Re-Indexado",
+ "confirmDesc": "¿Estás seguro de que quieres re-indexar todas las representaciones (embeddings) de objetos rastreados? Este proceso se ejecutará en segundo plano, pero puede usar al máximo tu CPU y tardar una cantidad considerable de tiempo, dependiendo de la cantidad de objetos registrados. Puedes seguir el progreso en la página Explorar (Explore).",
+ "confirmButton": "Re-Indexar",
+ "success": "El proceso de re-indexado ha comenzado.",
+ "alreadyInProgress": "El proceso de re-indexado ya se está ejecutando.",
+ "error": "Ha ocurrido un error al intentar iniciar el proceso de re-indexado: {{errorMessage}}",
+ "label": "Re-indexar Ahora",
+ "desc": "La re-indexación regenerará las embeddings para todos los objetos rastreados. Este proceso se ejecuta en segundo plano y puede utilizar al máximo tu CPU, además de tomar una cantidad considerable de tiempo dependiendo de la cantidad de objetos rastreados que tengas."
+ },
+ "modelSize": {
+ "label": "Tamaño del Modelo",
+ "small": {
+ "title": "pequeño",
+ "desc": "Usar la opción small emplea una versión cuantizada del modelo que consume menos memoria RAM y se ejecuta más rápido en la CPU, con una diferencia muy pequeña o casi imperceptible en la calidad de las representaciones (embeddings)."
+ },
+ "large": {
+ "title": "grande",
+ "desc": "Usar la opción large emplea el modelo completo de Jina y se ejecutará automáticamente en la GPU, si está disponible."
+ },
+ "desc": "Tamaño del modelo usado para la búsqueda semántica."
+ }
+ },
+ "faceRecognition": {
+ "title": "Reconocimiento Facial",
+ "readTheDocumentation": "Leer la Documentación",
+ "modelSize": {
+ "label": "Tamaño del Modelo",
+ "desc": "Tamaño del modelo a ser utilizado para el reconocimiento facial.",
+ "small": {
+ "title": "pequeño",
+ "desc": "Usar la opción small emplea un modelo de FaceNet para embeddings faciales que se ejecuta de manera eficiente en la mayoría de las CPUs."
+ },
+ "large": {
+ "title": "grande",
+ "desc": "Usar la opción large emplea un modelo de embeddings faciales ArcFace y se ejecutará automáticamente en la GPU, si está disponible."
+ }
+ },
+ "desc": "El reconocimiento facial permite asignar nombres a las personas y, cuando su rostro es reconocido, Frigate asignará el nombre de la persona como una subetiqueta (sub label). Esta información se incluye en la interfaz de usuario, los filtros y también en las notificaciones."
+ },
+ "licensePlateRecognition": {
+ "title": "Reconocimiento de Matrículas (LPR)",
+ "readTheDocumentation": "Leer la Documentación",
+ "desc": "Frigate puede reconocer matrículas de vehículos y agregar automáticamente los caracteres detectados al campo recognized_license_plate, o bien asignar un nombre conocido como sub-etiqueta (sub_label) a los objetos de tipo coche (car). Un caso de uso común es leer las matrículas de los autos que ingresan a una cochera o que pasan por una calle."
+ },
+ "restart_required": "Es necesario reiniciar Frigate (La configuración de Enrichments han cambiado)",
+ "toast": {
+ "success": "Los ajustes de enriquecimientos se han guardado. Reinicia Frigate para aplicar los cambios.",
+ "error": "No se pudieron guardar los cambios en la configuración: {{errorMessage}}"
+ }
+ }
+}
diff --git a/web/public/locales/es/views/system.json b/web/public/locales/es/views/system.json
new file mode 100644
index 000000000..0aaade626
--- /dev/null
+++ b/web/public/locales/es/views/system.json
@@ -0,0 +1,180 @@
+{
+ "documentTitle": {
+ "storage": "Estadísticas de almacenamiento - Frigate",
+ "general": "Estadísticas generales - Frigate",
+ "logs": {
+ "frigate": "Registros de Frigate - Frigate",
+ "go2rtc": "Registros de Go2RTC - Frigate",
+ "nginx": "Registros de Nginx - Frigate"
+ },
+ "cameras": "Estadísticas de cámaras - Frigate",
+ "enrichments": "Estadísticas de Enriquecimientos - Frigate"
+ },
+ "logs": {
+ "copy": {
+ "label": "Copiar al portapapeles",
+ "success": "Registros copiados al portapapeles",
+ "error": "No se pudieron copiar los registros al portapapeles"
+ },
+ "type": {
+ "label": "Tipo",
+ "timestamp": "Marca de tiempo",
+ "tag": "Etiqueta",
+ "message": "Mensaje"
+ },
+ "tips": "Los registros se están transmitiendo desde el servidor",
+ "toast": {
+ "error": {
+ "fetchingLogsFailed": "Error al obtener los registros: {{errorMessage}}",
+ "whileStreamingLogs": "Error mientras se transmitían los registros: {{errorMessage}}"
+ }
+ },
+ "download": {
+ "label": "Descargar registros"
+ }
+ },
+ "title": "Sistema",
+ "metrics": "Métricas del sistema",
+ "general": {
+ "title": "General",
+ "detector": {
+ "title": "Detectores",
+ "inferenceSpeed": "Velocidad de inferencia del detector",
+ "cpuUsage": "Uso de CPU del Detector",
+ "memoryUsage": "Uso de Memoria del Detector",
+ "temperature": "Detector de Temperatura"
+ },
+ "hardwareInfo": {
+ "title": "Información de Hardware",
+ "gpuUsage": "Uso de GPU",
+ "gpuEncoder": "Codificador de GPU",
+ "gpuDecoder": "Decodificador de GPU",
+ "gpuInfo": {
+ "vainfoOutput": {
+ "title": "Salida de Vainfo",
+ "returnCode": "Código de Retorno: {{code}}",
+ "processOutput": "Salida del Proceso:",
+ "processError": "Error del Proceso:"
+ },
+ "nvidiaSMIOutput": {
+ "cudaComputerCapability": "Capacidad de Cómputo CUDA: {{cuda_compute}}",
+ "title": "Salida de Nvidia SMI",
+ "driver": "Controlador: {{driver}}",
+ "name": "Nombre: {{name}}",
+ "vbios": "Información de VBios: {{vbios}}"
+ },
+ "toast": {
+ "success": "Información de GPU copiada al portapapeles"
+ },
+ "copyInfo": {
+ "label": "Copiar información de GPU"
+ },
+ "closeInfo": {
+ "label": "Cerrar información de GPU"
+ }
+ },
+ "gpuMemory": "Memoria de GPU",
+ "npuMemory": "Memoria de NPU",
+ "npuUsage": "Uso de NPU"
+ },
+ "otherProcesses": {
+ "title": "Otros Procesos",
+ "processCpuUsage": "Uso de CPU del Proceso",
+ "processMemoryUsage": "Uso de Memoria del Proceso"
+ }
+ },
+ "storage": {
+ "recordings": {
+ "title": "Grabaciones",
+ "tips": "Este valor representa el almacenamiento total utilizado por las grabaciones en la base de datos de Frigate. Frigate no realiza un seguimiento del uso de almacenamiento de todos los archivos en tu disco.",
+ "earliestRecording": "Grabación más antigua disponible:"
+ },
+ "overview": "Resumen",
+ "title": "Almacenamiento",
+ "cameraStorage": {
+ "percentageOfTotalUsed": "Porcentaje del Total",
+ "bandwidth": "Ancho de Banda",
+ "camera": "Cámara",
+ "unused": {
+ "title": "No Utilizado",
+ "tips": "Este valor puede no representar con precisión el espacio libre disponible para Frigate si tienes otros archivos almacenados en tu disco además de las grabaciones de Frigate. Frigate no realiza un seguimiento del uso de almacenamiento fuera de sus grabaciones."
+ },
+ "title": "Almacenamiento de la Cámara",
+ "storageUsed": "Almacenamiento",
+ "unusedStorageInformation": "Información de Almacenamiento No Utilizado"
+ }
+ },
+ "cameras": {
+ "title": "Cámaras",
+ "overview": "Resumen",
+ "info": {
+ "cameraProbeInfo": "Información de Sondeo de la Cámara {{camera}}",
+ "streamDataFromFFPROBE": "Los datos del flujo se obtienen con ffprobe.",
+ "codec": "Codec:",
+ "fetching": "Obteniendo Datos de la Cámara",
+ "stream": "Flujo {{idx}}",
+ "video": "Video:",
+ "fps": "FPS:",
+ "resolution": "Resolución:",
+ "error": "Error: {{error}}",
+ "unknown": "Desconocido",
+ "audio": "Audio:",
+ "tips": {
+ "title": "Información de Sondeo de la Cámara"
+ },
+ "aspectRatio": "Relación de aspecto"
+ },
+ "framesAndDetections": "Fotogramas / Detecciones",
+ "label": {
+ "camera": "cámara",
+ "skipped": "omitido",
+ "detect": "detectar",
+ "ffmpeg": "FFmpeg",
+ "capture": "captura",
+ "overallFramesPerSecond": "cuadros por segundo totales",
+ "overallDetectionsPerSecond": "detecciones por segundo totales",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} detecciones omitidas por segundo",
+ "cameraFfmpeg": "{{camName}} FFmpeg",
+ "cameraCapture": "{{camName}} captura",
+ "cameraDetect": "{{camName}} detectar",
+ "cameraFramesPerSecond": "{{camName}} cuadros por segundo",
+ "cameraDetectionsPerSecond": "{{camName}} detecciones por segundo",
+ "overallSkippedDetectionsPerSecond": "detecciones omitidas por segundo totales"
+ },
+ "toast": {
+ "success": {
+ "copyToClipboard": "Datos de sondeo copiados al portapapeles."
+ },
+ "error": {
+ "unableToProbeCamera": "No se pudo sondear la cámara: {{errorMessage}}"
+ }
+ }
+ },
+ "lastRefreshed": "Última actualización: ",
+ "enrichments": {
+ "infPerSecond": "Inferencias Por Segundo",
+ "embeddings": {
+ "plate_recognition_speed": "Velocidad de Reconocimiento de Matrículas",
+ "face_embedding_speed": "Velocidad de Incrustación de Rostros",
+ "image_embedding_speed": "Velocidad de Incrustación de Imágenes",
+ "text_embedding_speed": "Velocidad de Incrustación de Texto",
+ "face_recognition_speed": "Velocidad de Reconocimiento Facial",
+ "text_embedding": "Incrustación de Texto",
+ "face_recognition": "Reconocimiento Facial",
+ "plate_recognition": "Reconocimiento de Matrículas",
+ "yolov9_plate_detection": "Detección de Matrículas YOLOv9",
+ "image_embedding": "Incrustación de Imágenes",
+ "yolov9_plate_detection_speed": "Velocidad de Detección de Matrículas YOLOv9"
+ },
+ "title": "Enriquecimientos"
+ },
+ "stats": {
+ "ffmpegHighCpuUsage": "{{camera}} tiene un uso elevado de CPU por FFmpeg ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} tiene un uso elevado de CPU por detección ({{detectAvg}}%)",
+ "healthy": "El sistema está saludable",
+ "reindexingEmbeddings": "Reindexando incrustaciones ({{processed}}% completado)",
+ "detectIsSlow": "{{detect}} es lento ({{speed}} ms)",
+ "cameraIsOffline": "{{camera}} está desconectada",
+ "detectIsVerySlow": "{{detect}} es muy lento ({{speed}} ms)"
+ }
+}
diff --git a/web/public/locales/fa/audio.json b/web/public/locales/fa/audio.json
new file mode 100644
index 000000000..965460f7f
--- /dev/null
+++ b/web/public/locales/fa/audio.json
@@ -0,0 +1,27 @@
+{
+ "speech": "گفتار",
+ "babbling": "پر حرفی",
+ "yell": "فریاد",
+ "bellow": "صدای نعره",
+ "whoop": "ضجه",
+ "whispering": "غیبت کردن",
+ "laughter": "خنده",
+ "snicker": "پوزخند",
+ "crying": "گریه کردن",
+ "sigh": "حسرت",
+ "singing": "خواندن آواز",
+ "choir": "آواز گروهی",
+ "yodeling": "عیاشی",
+ "chant": "مناجات",
+ "mantra": "مانترا",
+ "cat": "گربه",
+ "dog": "سگ",
+ "horse": "اسب",
+ "bird": "پرنده",
+ "boat": "قایق",
+ "car": "ماشین",
+ "bus": "اتوبوس",
+ "motorcycle": "موتور سیکلت",
+ "train": "قطار",
+ "bicycle": "دوچرخه"
+}
diff --git a/web/public/locales/fa/common.json b/web/public/locales/fa/common.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fa/common.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fa/components/auth.json b/web/public/locales/fa/components/auth.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fa/components/auth.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fa/components/camera.json b/web/public/locales/fa/components/camera.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fa/components/camera.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fa/components/dialog.json b/web/public/locales/fa/components/dialog.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fa/components/dialog.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fa/components/filter.json b/web/public/locales/fa/components/filter.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fa/components/filter.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fa/components/icons.json b/web/public/locales/fa/components/icons.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fa/components/icons.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fa/components/input.json b/web/public/locales/fa/components/input.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fa/components/input.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fa/components/player.json b/web/public/locales/fa/components/player.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fa/components/player.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fa/objects.json b/web/public/locales/fa/objects.json
new file mode 100644
index 000000000..278086db2
--- /dev/null
+++ b/web/public/locales/fa/objects.json
@@ -0,0 +1,20 @@
+{
+ "person": "شخص",
+ "bicycle": "دوچرخه",
+ "car": "ماشین",
+ "airplane": "هواپیما",
+ "bus": "اتوبوس",
+ "train": "قطار",
+ "boat": "قایق",
+ "traffic_light": "چراغ راهنمایی",
+ "motorcycle": "موتور سیکلت",
+ "fire_hydrant": "شیر آتشنشانی",
+ "street_sign": "تابلو راهنمایی رانندگی",
+ "stop_sign": "تابلو ایست",
+ "parking_meter": "پارکومتر",
+ "bench": "نیمکت",
+ "bird": "پرنده",
+ "cat": "گربه",
+ "dog": "سگ",
+ "horse": "اسب"
+}
diff --git a/web/public/locales/fa/views/configEditor.json b/web/public/locales/fa/views/configEditor.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fa/views/configEditor.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fa/views/events.json b/web/public/locales/fa/views/events.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fa/views/events.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fa/views/explore.json b/web/public/locales/fa/views/explore.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fa/views/explore.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fa/views/exports.json b/web/public/locales/fa/views/exports.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fa/views/exports.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fa/views/faceLibrary.json b/web/public/locales/fa/views/faceLibrary.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fa/views/faceLibrary.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fa/views/live.json b/web/public/locales/fa/views/live.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fa/views/live.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fa/views/recording.json b/web/public/locales/fa/views/recording.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fa/views/recording.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fa/views/search.json b/web/public/locales/fa/views/search.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fa/views/search.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fa/views/settings.json b/web/public/locales/fa/views/settings.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fa/views/settings.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fa/views/system.json b/web/public/locales/fa/views/system.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fa/views/system.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fi/audio.json b/web/public/locales/fi/audio.json
new file mode 100644
index 000000000..f5cdad670
--- /dev/null
+++ b/web/public/locales/fi/audio.json
@@ -0,0 +1,41 @@
+{
+ "speech": "Puhe",
+ "yell": "Huutaa",
+ "babbling": "Pulina",
+ "boat": "Vene",
+ "cat": "Kissa",
+ "dog": "Koira",
+ "horse": "Hevonen",
+ "sheep": "Lammas",
+ "bird": "Lintu",
+ "car": "Auto",
+ "motorcycle": "Moottoripyörä",
+ "bus": "Bussi",
+ "train": "Juna",
+ "bicycle": "Pyörä",
+ "skateboard": "Rullalauta",
+ "bellow": "Karjua",
+ "whoop": "Huutaa",
+ "whispering": "Kuiskaus",
+ "laughter": "Nauru",
+ "snicker": "Hihittää",
+ "crying": "Itku",
+ "sigh": "Huokaus",
+ "singing": "Laulu",
+ "choir": "Kuoro",
+ "yodeling": "Jodlata",
+ "camera": "Kamera",
+ "animal": "Eläin",
+ "goat": "Vuohi",
+ "mouse": "Hiiri",
+ "keyboard": "Näppäimistö",
+ "vehicle": "Ajoneuvo",
+ "door": "Ovi",
+ "sink": "Lavuaari",
+ "blender": "Tehosekoitin",
+ "scissors": "Sakset",
+ "hair_dryer": "Hiustenkuivaaja",
+ "toothbrush": "Hammasharja",
+ "clock": "Kello",
+ "bark": "Haukku"
+}
diff --git a/web/public/locales/fi/common.json b/web/public/locales/fi/common.json
new file mode 100644
index 000000000..f76eb0e67
--- /dev/null
+++ b/web/public/locales/fi/common.json
@@ -0,0 +1,172 @@
+{
+ "time": {
+ "untilRestart": "Kunnes uudelleenkäynnistyy",
+ "ago": "{{timeAgo}} sitten",
+ "justNow": "Juuri nyt",
+ "today": "Tänään",
+ "yesterday": "Eilen",
+ "last14": "Viimeiset 14 päivää",
+ "untilForTime": "Kunnes {{time}}",
+ "untilForRestart": "Kunnes Frigate uudelleenkäynnistyy.",
+ "thisWeek": "Tämä viikko",
+ "lastWeek": "Viime viikko",
+ "last7": "Viimeiset 7 päivää",
+ "thisMonth": "Tämä kuu",
+ "lastMonth": "Viime kuu",
+ "last30": "Viimeiset 30 päivää",
+ "5minutes": "5 minuuttia",
+ "10minutes": "10 minuuttia",
+ "30minutes": "30 minuuttia",
+ "1hour": "1 tunti",
+ "12hours": "12 tuntia",
+ "24hours": "24 tuntia",
+ "pm": "ip",
+ "am": "ap",
+ "yr": "{{time}}v",
+ "year_one": "{{time}} vuosi",
+ "year_other": "{{time}} vuotta",
+ "mo": "{{time}}kk",
+ "month_one": "{{time}} kuukausi",
+ "month_other": "{{time}} kuukaudet",
+ "d": "{{time}}pv",
+ "day_one": "{{time}} päivä",
+ "day_other": "{{time}} päivät",
+ "h": "{{time}}t",
+ "hour_one": "{{time}} tunti",
+ "hour_other": "{{time}} tuntia",
+ "m": "{{time}}m",
+ "s": "{{time}}s",
+ "minute_one": "{{time}}minuutti",
+ "minute_other": "{{time}}minuuttia",
+ "second_one": "{{time}}sekuntti",
+ "second_other": "{{time}}sekunttia"
+ },
+ "pagination": {
+ "next": {
+ "title": "Seuraava",
+ "label": "Mene seuraavalle sivulle"
+ },
+ "more": "Lisää sivuja",
+ "previous": {
+ "title": "Edellinen",
+ "label": "Mene edelliselle sivulle"
+ },
+ "label": "sivutus"
+ },
+ "accessDenied": {
+ "documentTitle": "Pääsy kielletty - Frigate",
+ "title": "Pääsy kielletty",
+ "desc": "Sinulla ei ole oikeuksia tarkastella tätä sivua."
+ },
+ "role": {
+ "admin": "Järjestelmänvalvoja",
+ "viewer": "Katselija",
+ "desc": "Järjestelmänvalvojalla on täysi käyttöoikeus kaikkiin Frigaten käyttöliittymän toimintoihin. Katselijoiden oikeudet on rajoitettu kameroiden katseluun, kohteiden arviointiin ja historian tarkasteluun.",
+ "title": "Rooli"
+ },
+ "notFound": {
+ "documentTitle": "Ei löytynyt - Frigate",
+ "title": "404",
+ "desc": "Sivua ei löytynyt"
+ },
+ "selectItem": "Valitse {{item}}",
+ "menu": {
+ "live": {
+ "title": "Suora",
+ "cameras": {
+ "title": "Kamerat",
+ "count_one": "{{count}} kamera",
+ "count_other": "{{count}} kameraa"
+ },
+ "allCameras": "Kaikki kamerat"
+ },
+ "explore": "Selaa",
+ "export": "Vienti",
+ "uiPlayground": "UI-leikkikenttä",
+ "user": {
+ "account": "Tili",
+ "current": "Nykyinen käyttäjä: {{user}}",
+ "anonymous": "anonyymi",
+ "title": "Käyttäjä",
+ "logout": "Kirjaudu ulos",
+ "setPassword": "Aseta salasana"
+ },
+ "appearance": "Ulkonäkö",
+ "darkMode": {
+ "label": "Tumma tila",
+ "light": "Valoisa",
+ "dark": "Tumma",
+ "withSystem": {
+ "label": "Käytä järjestelmän asetuksia valoisalle tai tummalle tilalle"
+ }
+ },
+ "faceLibrary": "Kasvokirjasto",
+ "language": {
+ "ca": "Katalaani",
+ "withSystem": {
+ "label": "Käytä järjestelmän asetuksia kielelle"
+ }
+ },
+ "review": "Esikatselu",
+ "theme": {
+ "highcontrast": "Korkea resoluutio",
+ "blue": "Sininen",
+ "green": "Vihreä",
+ "default": "Oletus",
+ "nord": "Pohjoismainen",
+ "red": "Punainen",
+ "label": "Teema"
+ },
+ "withSystem": "Järjestelmä",
+ "help": "Apua",
+ "documentation": {
+ "title": "Dokumentaatio",
+ "label": "Frigaten dokumentaatio"
+ },
+ "restart": "Käynnistä uudelleen",
+ "languages": "Kielet",
+ "system": "Järjestelmä",
+ "settings": "Asetukset",
+ "configuration": "Konfiguraatio"
+ },
+ "toast": {
+ "copyUrlToClipboard": "URL kopioitu leikepöydälle.",
+ "save": {
+ "title": "Tallenna",
+ "error": {
+ "title": "Konfiguraatiomuutosten tallennus epäonnistui: {{errorMessage}}",
+ "noMessage": "Konfiguraatiomuutosten tallennus epäonnistui"
+ }
+ }
+ },
+ "button": {
+ "on": "ON",
+ "disabled": "Pois käytöstä",
+ "done": "Valmis",
+ "enabled": "Käytössä",
+ "enable": "Ota käyttöön",
+ "disable": "Poista käytöstä",
+ "save": "Tallenna",
+ "saving": "Tallennetaan…",
+ "cancel": "Peruuta",
+ "reset": "Nollaa",
+ "close": "Sulje",
+ "off": "OFF",
+ "edit": "Muokkaa",
+ "yes": "Kyllä",
+ "copy": "Kopioi",
+ "no": "Ei",
+ "download": "Lataa",
+ "back": "Takaisin",
+ "history": "Historia",
+ "play": "Toista",
+ "next": "Seuraava",
+ "delete": "Poista",
+ "info": "Info"
+ },
+ "unit": {
+ "length": {
+ "feet": "jalka"
+ }
+ }
+}
diff --git a/web/public/locales/fi/components/auth.json b/web/public/locales/fi/components/auth.json
new file mode 100644
index 000000000..5ce3ffa02
--- /dev/null
+++ b/web/public/locales/fi/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "password": "Salasana",
+ "user": "Käyttäjä",
+ "login": "Kirjaudu",
+ "errors": {
+ "usernameRequired": "Käyttäjänimi vaaditaan",
+ "passwordRequired": "Salasana vaaditaan",
+ "rateLimit": "Käyttöraja ylitetty. Yritä myöhemmin uudelleen.",
+ "loginFailed": "Kirjautuminen epäonnistui",
+ "unknownError": "Tuntematon virhe. Tarkista logit.",
+ "webUnknownError": "Tuntematon virhe. Tarkista konsolilogi."
+ }
+ }
+}
diff --git a/web/public/locales/fi/components/camera.json b/web/public/locales/fi/components/camera.json
new file mode 100644
index 000000000..14ebd87fb
--- /dev/null
+++ b/web/public/locales/fi/components/camera.json
@@ -0,0 +1,83 @@
+{
+ "group": {
+ "label": "Kameraryhmä",
+ "add": "Lisää kameraryhmä",
+ "edit": "Muokkaa kameraryhmää",
+ "delete": {
+ "label": "Poista kameraryhmä",
+ "confirm": {
+ "title": "Varmista poisto",
+ "desc": "Oletko varma että haluat poistaa kameraryhmän {{name}}?"
+ }
+ },
+ "name": {
+ "label": "Nimi",
+ "placeholder": "Anna nimi…",
+ "errorMessage": {
+ "mustLeastCharacters": "Kameraryhmän nimi täytyy olla vähintään 2 kirjainta.",
+ "exists": "Kameraryhmän nimi on jo olemassa.",
+ "nameMustNotPeriod": "Kameraryhmän nimi ei voi sisältää pistettä.",
+ "invalid": "Virheellinen kameraryhmän nimi."
+ }
+ },
+ "cameras": {
+ "label": "Kamerat",
+ "desc": "Valitse ryhmän kamera."
+ },
+ "icon": "Ikoni",
+ "success": "Kameraryhmä ({{name}}) on tallennettu.",
+ "camera": {
+ "setting": {
+ "label": "Kameran suoratoistoasetukset",
+ "title": "{{cameraName}} suoratoistoasetukset",
+ "desc": "Muuta tämän kameraryhmän kojelaudan live-suoratoistoasetuksia.Nämä asetukset ovat laite/selainkohtaisia.",
+ "audioIsAvailable": "Ääni on saatavilla tähän suoratoistoon",
+ "audioIsUnavailable": "Ääni ei ole saatavilla tähän suoratoistoon",
+ "audio": {
+ "tips": {
+ "title": "Äänen on oltava kytkettynä kameraan ja määritettynä go2rtc:ssä tätä suoratoistoa varten.",
+ "document": "Lue dokumentaatio "
+ }
+ },
+ "streamMethod": {
+ "label": "Suoratoistomenetelmä",
+ "method": {
+ "noStreaming": {
+ "label": "Ei suoratoistoa",
+ "desc": "Kamerakuvat päivittyvät vain kerran minuutissa, eikä suoratoistoa tapahdu."
+ },
+ "smartStreaming": {
+ "label": "Älykäs suoratoisto (suositus)",
+ "desc": "Älykäs suoratoisto päivittää kamerakuvan kerran minuutissa kun havaittavaa toimintaa ei tapahdu, säästääkseen kaistanleveyttä ja resursseja. Kun toimintaa havaitaan, kuva vaihtuu saumattomasti reaaliaikaiseksi suoratoistoksi."
+ },
+ "continuousStreaming": {
+ "label": "Jatkuva suoratoisto",
+ "desc": {
+ "title": "Kamerakuva näkyy aina reaaliaikaisena suoratoistona kojelaudassa, vaikka mitään liikettä ei havaitaisi.",
+ "warning": "Jatkuva suoratoisto voi lisätä kaistanleveyden käyttöä ja suorituskykyongelmia. Käytä varoen."
+ }
+ }
+ }
+ },
+ "compatibilityMode": {
+ "label": "Yhteensopivuustila",
+ "desc": "Ota tämä vaihtoehto käyttöön vain, jos kamerasi live-suoratoistossa näkyy väriartefakteja ja kuvan oikealla puolella on vinoviiva."
+ }
+ }
+ }
+ },
+ "debug": {
+ "options": {
+ "label": "Asetukset",
+ "title": "Vaihtoehdot",
+ "showOptions": "Näytä vaihtoehdot",
+ "hideOptions": "Piilota vaihtoehdot"
+ },
+ "boundingBox": "Rajauslaatikko",
+ "timestamp": "Aikaleima",
+ "zones": "Vyöhykkeet",
+ "mask": "Peite",
+ "motion": "Liike",
+ "regions": "Alueet"
+ }
+}
diff --git a/web/public/locales/fi/components/dialog.json b/web/public/locales/fi/components/dialog.json
new file mode 100644
index 000000000..18504c10d
--- /dev/null
+++ b/web/public/locales/fi/components/dialog.json
@@ -0,0 +1,40 @@
+{
+ "restart": {
+ "title": "Haluatko varmasti käynnistää Frigaten uudelleen?",
+ "button": "Uudelleenkäynnistys",
+ "restarting": {
+ "title": "Fregatti käynnistyy uudelleen",
+ "content": "Tämä sivu latautuu uudelleen {{countdown}} sekunnin kuluttua.",
+ "button": "Pakota uudelleenlataus nyt"
+ }
+ },
+ "explore": {
+ "plus": {
+ "submitToPlus": {
+ "label": "Lähetä Frigate+:lle",
+ "desc": "Välttämissäsi paikoissa olevat kohteet eivät ole vääriä positiivisia. Niiden lähettäminen väärinä positiivisina sekoittaa mallia."
+ },
+ "review": {
+ "question": {
+ "label": "Vahvista tämä nimike Frigate Plussalle",
+ "ask_a": "Onko kohde {{label}}?",
+ "ask_an": "Onko tämä kohde {{label}}?",
+ "ask_full": "Onko tämä kohde {{untranslatedLabel}} ({{translatedLabel}})?"
+ },
+ "state": {
+ "submitted": "Lähetetty"
+ }
+ }
+ },
+ "video": {
+ "viewInHistory": "Katso historiaa"
+ }
+ },
+ "export": {
+ "time": {
+ "fromTimeline": "Valitse aikajanalta",
+ "lastHour_one": "Viimeinen tunti",
+ "lastHour_other": "Viimeiset {{count}} tuntia"
+ }
+ }
+}
diff --git a/web/public/locales/fi/components/filter.json b/web/public/locales/fi/components/filter.json
new file mode 100644
index 000000000..0a0d999c9
--- /dev/null
+++ b/web/public/locales/fi/components/filter.json
@@ -0,0 +1,30 @@
+{
+ "filter": "Suodatin",
+ "dates": {
+ "selectPreset": "Valitse esiasettelu…",
+ "all": {
+ "title": "Kaikki päivämäärät",
+ "short": "Päivämäärät"
+ }
+ },
+ "more": "Lisää suodattimia",
+ "reset": {
+ "label": "Palauta suodattimet oletusarvoihin"
+ },
+ "labels": {
+ "count_one": "{{count}} nimike",
+ "label": "Nimikkeet",
+ "all": {
+ "title": "Kaikki nimikkeet",
+ "short": "Nimikkeet"
+ },
+ "count_other": "{{count}} nimikettä"
+ },
+ "zones": {
+ "label": "Alueet",
+ "all": {
+ "title": "Kaikki alueet",
+ "short": "Alueet"
+ }
+ }
+}
diff --git a/web/public/locales/fi/components/icons.json b/web/public/locales/fi/components/icons.json
new file mode 100644
index 000000000..20fea8f3d
--- /dev/null
+++ b/web/public/locales/fi/components/icons.json
@@ -0,0 +1,8 @@
+{
+ "iconPicker": {
+ "selectIcon": "Valitse kuvake",
+ "search": {
+ "placeholder": "Etsi kuvaketta…"
+ }
+ }
+}
diff --git a/web/public/locales/fi/components/input.json b/web/public/locales/fi/components/input.json
new file mode 100644
index 000000000..59083d62a
--- /dev/null
+++ b/web/public/locales/fi/components/input.json
@@ -0,0 +1,10 @@
+{
+ "button": {
+ "downloadVideo": {
+ "label": "Lataa Video",
+ "toast": {
+ "success": "Tarkistettavan kohteen videon lataus on aloitettu."
+ }
+ }
+ }
+}
diff --git a/web/public/locales/fi/components/player.json b/web/public/locales/fi/components/player.json
new file mode 100644
index 000000000..90260f7df
--- /dev/null
+++ b/web/public/locales/fi/components/player.json
@@ -0,0 +1,28 @@
+{
+ "noPreviewFound": "Esikatselua ei löytynyt",
+ "noPreviewFoundFor": "Ei esikatselua {{cameraName}}lle",
+ "noRecordingsFoundForThisTime": "Ei tallenteita valitulta ajalta",
+ "submitFrigatePlus": {
+ "title": "Lähetä tämä kuva Frigate+:aan?",
+ "submit": "Lähetä"
+ },
+ "livePlayerRequiredIOSVersion": "iOS 17.1 tai uudempi vaaditaan tälle suoratoistotyypille.",
+ "streamOffline": {
+ "title": "Kamera poissa verkosta",
+ "desc": "Kuvaruutuja ei vastaanotettu kameran {{cameraName}} detect-kuvavirrasta, tarkista virhelogit"
+ },
+ "cameraDisabled": "Kamera on poistettu käytöstä",
+ "stats": {
+ "streamType": {
+ "title": "Kuvavirran tyyppi:",
+ "short": "Tyyppi"
+ },
+ "bandwidth": {
+ "title": "Kaistanleveys:",
+ "short": "Kaistanleveys"
+ },
+ "latency": {
+ "title": "Latenssi:"
+ }
+ }
+}
diff --git a/web/public/locales/fi/objects.json b/web/public/locales/fi/objects.json
new file mode 100644
index 000000000..524350ef8
--- /dev/null
+++ b/web/public/locales/fi/objects.json
@@ -0,0 +1,120 @@
+{
+ "frisbee": "Frisbee",
+ "knife": "Veitsi",
+ "umbrella": "Sateenvarjo",
+ "tie": "Kravatti",
+ "suitcase": "Matkalaukku",
+ "baseball_glove": "Pesäpallohanska",
+ "spoon": "Lusikka",
+ "person": "Henkilö",
+ "bicycle": "Pyörä",
+ "car": "Auto",
+ "motorcycle": "Moottoripyörä",
+ "airplane": "Lentokone",
+ "bus": "Bussi",
+ "train": "Juna",
+ "boat": "Vene",
+ "traffic_light": "Liikennevalo",
+ "fire_hydrant": "Paloposti",
+ "street_sign": "Tieviitta",
+ "stop_sign": "Stop merkki",
+ "parking_meter": "Pysäköintimittari",
+ "bench": "Penkki",
+ "bird": "Lintu",
+ "cat": "Kissa",
+ "dog": "Koira",
+ "horse": "Hevonen",
+ "sheep": "Lammas",
+ "cow": "Lehmä",
+ "elephant": "Elefantti",
+ "bear": "Karhu",
+ "zebra": "Seepra",
+ "giraffe": "Kirahvi",
+ "hat": "Hattu",
+ "backpack": "Reppu",
+ "shoe": "Kenkä",
+ "eye_glasses": "Silmälasit",
+ "handbag": "Käsilaukku",
+ "skis": "Sukset",
+ "snowboard": "Lumilauta",
+ "sports_ball": "Pallo",
+ "kite": "Leija",
+ "baseball_bat": "Pesäpallomaila",
+ "skateboard": "Rullalauta",
+ "surfboard": "Surffilauta",
+ "tennis_racket": "Tennismaila",
+ "bottle": "Pullo",
+ "plate": "Lautanen",
+ "wine_glass": "Viinilasi",
+ "cup": "Kuppi",
+ "fork": "Haarukka",
+ "bowl": "Malja",
+ "banana": "Banaani",
+ "apple": "Omena",
+ "couch": "Sohva",
+ "keyboard": "Näppäimistö",
+ "book": "Kirja",
+ "microwave": "Mikroaaltouuni",
+ "toaster": "Leivänpaahdin",
+ "refrigerator": "Jääkaappi",
+ "sink": "Lavuaari",
+ "blender": "Tehosekoitin",
+ "deer": "Peura",
+ "oven": "Uuni",
+ "sandwich": "Voileipä",
+ "orange": "Appelsiini",
+ "broccoli": "Parsakaali",
+ "carrot": "Porkkana",
+ "hot_dog": "Nakkisämpylä",
+ "pizza": "Pizza",
+ "donut": "Donitsi",
+ "cake": "Kakku",
+ "chair": "Tuoli",
+ "potted_plant": "Ruukkukasvi",
+ "bed": "Sänky",
+ "mirror": "Peili",
+ "dining_table": "Ruokapöytä",
+ "window": "Ikkuna",
+ "desk": "Pöytä",
+ "toilet": "Vessanpönttö",
+ "door": "Ovi",
+ "tv": "TV",
+ "mouse": "Hiiri",
+ "laptop": "Kannettava tietokone",
+ "remote": "Kaukosäädin",
+ "cell_phone": "Matkapuhelin",
+ "clock": "Kello",
+ "vase": "Maljakko",
+ "scissors": "Sakset",
+ "teddy_bear": "Nallekarhu",
+ "hair_dryer": "Hiustenkuivaaja",
+ "hair_brush": "Hiusharja",
+ "toothbrush": "Hammasharja",
+ "vehicle": "Ajoneuvo",
+ "squirrel": "Orava",
+ "animal": "Eläin",
+ "fox": "Kettu",
+ "goat": "Vuohi",
+ "bark": "Haukku",
+ "rabbit": "Kaniini",
+ "raccoon": "Pesukarhu",
+ "robot_lawnmower": "Robotti ruohonleikkuri",
+ "waste_bin": "Jäteastia",
+ "package": "Paketti",
+ "bbq_grill": "Grilli",
+ "amazon": "Amazon",
+ "usps": "USPS",
+ "ups": "UPS",
+ "fedex": "FedEx",
+ "gls": "GLS",
+ "dpd": "DPD",
+ "postnord": "PostNord",
+ "nzpost": "NZPost",
+ "postnl": "PostNL",
+ "dhl": "DHL",
+ "purolator": "Purolator",
+ "an_post": "An Post",
+ "license_plate": "Rekisterikilpi",
+ "face": "Kasvot",
+ "on_demand": "Pyynnöstä"
+}
diff --git a/web/public/locales/fi/views/configEditor.json b/web/public/locales/fi/views/configEditor.json
new file mode 100644
index 000000000..472c59e37
--- /dev/null
+++ b/web/public/locales/fi/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "documentTitle": "Frigaten konfiguraatioeditori",
+ "confirm": "Poistu tallentamatta?",
+ "saveOnly": "Vain tallennus",
+ "toast": {
+ "error": {
+ "savingError": "Virhe tallennettaessa konfiguraatiota"
+ },
+ "success": {
+ "copyToClipboard": "Konfiguraatio kopioitu leikepöydälle."
+ }
+ },
+ "configEditor": "Konfiguraatioeditori",
+ "copyConfig": "Kopioi konfiguraatio",
+ "saveAndRestart": "Tallenna & uudelleenkäynnistä"
+}
diff --git a/web/public/locales/fi/views/events.json b/web/public/locales/fi/views/events.json
new file mode 100644
index 000000000..638a05f7a
--- /dev/null
+++ b/web/public/locales/fi/views/events.json
@@ -0,0 +1,38 @@
+{
+ "alerts": "Hälytyset",
+ "empty": {
+ "detection": "Ei havaintoja tarkastettavaksi",
+ "motion": "Ei liiketietoja",
+ "alert": "Ei hälyytyksiä tarkastettavaksi"
+ },
+ "detections": "Havainnot",
+ "motion": {
+ "label": "Liike",
+ "only": "Vain liike"
+ },
+ "allCameras": "Kaikki kamerat",
+ "timeline": "Aikajana",
+ "timeline.aria": "Valitse aikajana",
+ "events": {
+ "label": "Tapahtumat",
+ "aria": "Valitse tapahtumat",
+ "noFoundForTimePeriod": "Tapahtumia ei löydetty tältä ajanjaksolta."
+ },
+ "documentTitle": "Tarkastelu - Frigate",
+ "detected": "havaittu",
+ "selected_one": "{{count}} valittu",
+ "selected_other": "{{count}} valittu",
+ "recordings": {
+ "documentTitle": "Tallenteet - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "Viimeiset 24 tuntia"
+ },
+ "markAsReviewed": "Merkitse katselmoiduksi",
+ "markTheseItemsAsReviewed": "Merkitse nämä kohteet katselmoiduksi",
+ "newReviewItems": {
+ "label": "Näytä uudet katselmoitavat kohteet",
+ "button": "Uudet katselmoitavat kohteet"
+ },
+ "camera": "Kamera"
+}
diff --git a/web/public/locales/fi/views/explore.json b/web/public/locales/fi/views/explore.json
new file mode 100644
index 000000000..6773473e1
--- /dev/null
+++ b/web/public/locales/fi/views/explore.json
@@ -0,0 +1,85 @@
+{
+ "documentTitle": "Etsi",
+ "details": {
+ "timestamp": "Aikaleima",
+ "item": {
+ "title": "Tarkastele kohteen tietoja",
+ "desc": "Tarkastele kohteen tietoja",
+ "button": {
+ "share": "Jaa tämä tarkasteltu kohde"
+ }
+ }
+ },
+ "exploreIsUnavailable": {
+ "title": "Selaus on tavoittamattomissa",
+ "embeddingsReindexing": {
+ "startingUp": "Käynnistytään…",
+ "estimatedTime": "Arvioitu aika jäljellä:",
+ "finishingShortly": "Valmista pian",
+ "step": {
+ "trackedObjectsProcessed": "Käsitellyt seuratut objektit: ",
+ "thumbnailsEmbedded": "Kuvakkeet sisällytetty: ",
+ "descriptionsEmbedded": "Kuvaukset sisällytetty: "
+ }
+ },
+ "downloadingModels": {
+ "context": "Frigate lataa semanttista hakua varten vaadittavat upotusmallit. Tämä saattaa viedä useamman minuutin, riippuen yhteytesi nopeudesta.",
+ "setup": {
+ "visionModel": "Vision-malli",
+ "textModel": "Tekstimalli"
+ },
+ "tips": {
+ "documentation": "Lue dokumentaatio"
+ },
+ "error": "Tapahtui virhe. Tarkista Frigaten lokit."
+ }
+ },
+ "exploreMore": "Selaa lisää {{label}}-tyyppisiä kohteita",
+ "generativeAI": "Generatiivinen AI",
+ "objectLifecycle": {
+ "annotationSettings": {
+ "offset": {
+ "documentation": "Lue dokumentaatio "
+ },
+ "showAllZones": {
+ "title": "Näytä kaikki vyöhykkeet"
+ }
+ },
+ "lifecycleItemDesc": {
+ "header": {
+ "zones": "Vyöhykkeet",
+ "ratio": "Suhde",
+ "area": "Alue"
+ },
+ "active": "{{label}} aktivoitui",
+ "stationary": "{{label}} pysähtyi",
+ "attribute": {
+ "faceOrLicense_plate": "{{attribute}} havaittiin nimikkeelle {{label}}",
+ "other": "{{label}} tunnistettu {{attribute}}:na"
+ },
+ "gone": "{{label}} poistui",
+ "entered_zone": "{{label}} ilmestyi vyöhykkeelle {{zones}}",
+ "visible": "{{label}} havaittu",
+ "heard": "{{label}} kuului",
+ "external": "{{label}} havaittiin"
+ },
+ "trackedPoint": "Seurattu piste",
+ "carousel": {
+ "previous": "Edellinen",
+ "next": "Seuraava"
+ },
+ "count": "{{first}} / {{second}}",
+ "title": "Kohteen elinkaari",
+ "noImageFound": "Tältä aikaleimalta ei löytynyt kuvia.",
+ "createObjectMask": "Luo kohdemaski",
+ "scrollViewTips": "Vieritä katsoaksesi merkittäviä hetkiä kohteen elinkaarelta.",
+ "autoTrackingTips": "Kohteen rajojen sijainti on epätarkka automaattisesti seuraaville kameroille."
+ },
+ "trackedObjectDetails": "Seurattavien kohteiden tiedot",
+ "type": {
+ "details": "tiedot",
+ "snapshot": "kuvankaappaus",
+ "video": "video",
+ "object_lifecycle": "kohteen elinkaari"
+ }
+}
diff --git a/web/public/locales/fi/views/exports.json b/web/public/locales/fi/views/exports.json
new file mode 100644
index 000000000..5ee8e88eb
--- /dev/null
+++ b/web/public/locales/fi/views/exports.json
@@ -0,0 +1,17 @@
+{
+ "search": "Etsi",
+ "documentTitle": "Vie",
+ "deleteExport.desc": "Oletko varma että haluat poistaa kohteen {{exportName}}?",
+ "toast": {
+ "error": {
+ "renameExportFailed": "Viedyn kohteen uudelleennimeäminen epäonnistui: {{errorMessage}}"
+ }
+ },
+ "noExports": "Ei vietyjä kohteita",
+ "deleteExport": "Poista viety kohde",
+ "editExport": {
+ "title": "Nimeä uudelleen",
+ "desc": "Anna uusi nimi viedylle kohteelle.",
+ "saveExport": "Tallenna vienti"
+ }
+}
diff --git a/web/public/locales/fi/views/faceLibrary.json b/web/public/locales/fi/views/faceLibrary.json
new file mode 100644
index 000000000..48b4fffcf
--- /dev/null
+++ b/web/public/locales/fi/views/faceLibrary.json
@@ -0,0 +1,31 @@
+{
+ "description": {
+ "addFace": "Opastus: Uuden kokoelman lisääminen Kasvokirjastoon.",
+ "invalidName": "Virheellinen nimi. Nimi voi sisältää vain merkkejä, numeroita, välejä, heittomerkkejä, alaviivoja ja väliviivoja.",
+ "placeholder": "Anna nimi kokoelmalle"
+ },
+ "uploadFaceImage": {
+ "desc": "Lähetä kuva kasvojen tunnistukseen ja lisää se sivulle {{pageToggle}}",
+ "title": "Lähetä kasvokuva"
+ },
+ "details": {
+ "unknown": "Tuntematon",
+ "faceDesc": "Lisätiedot kohteesta, josta tämä kasvokuva tallennettiin",
+ "person": "Henkilö",
+ "timestamp": "Aikaleima",
+ "subLabelScore": "",
+ "face": ""
+ },
+ "documentTitle": "Kasvokirjasto - Frigate",
+ "deleteFaceAttempts": {
+ "desc_one": "Oletko varma, että haluat poistaa {{count}} kasvon? Tätä toimintoa ei voi perua.",
+ "desc_other": "Oletko varma, että haluat poistaa {{count}} kasvoa? Tätä toimintoa ei voi perua."
+ },
+ "toast": {
+ "success": {
+ "deletedFace_one": "{{count}} kasvo poistettu onnistuneesti.",
+ "deletedFace_other": "{{count}} kasvoa poistettu onnistuneesti."
+ }
+ },
+ "selectItem": "Valitse {{item}}"
+}
diff --git a/web/public/locales/fi/views/live.json b/web/public/locales/fi/views/live.json
new file mode 100644
index 000000000..69c0d23bf
--- /dev/null
+++ b/web/public/locales/fi/views/live.json
@@ -0,0 +1,158 @@
+{
+ "documentTitle": "Suora - Frigate",
+ "documentTitle.withCamera": "{{camera}} - Suora - Frigate",
+ "lowBandwidthMode": "Pienen kaistanleveyden tila",
+ "twoWayTalk": {
+ "enable": "Ota käyttöön kaksisuuntainen puhe",
+ "disable": "Poista kaksisuuntainen puhe käytöstä"
+ },
+ "cameraAudio": {
+ "enable": "Ota kameran ääni käyttöön",
+ "disable": "Poista kameran ääni käytöstä"
+ },
+ "ptz": {
+ "move": {
+ "clickMove": {
+ "label": "Napsauta ruutua keskittääksesi kameran",
+ "enable": "Ota käyttöön napsauttamalla siirtäminen",
+ "disable": "Poista napsauttamalla siirtäminen"
+ },
+ "left": {
+ "label": "Siirrä PTZ-kameraa vasemmalle"
+ },
+ "up": {
+ "label": "Siirrä PTZ-kameraa ylös"
+ },
+ "down": {
+ "label": "Siirrä PTZ-kameraa alas"
+ },
+ "right": {
+ "label": "Siirrä PTZ-kameraa oikealle"
+ }
+ },
+ "zoom": {
+ "out": {
+ "label": "Zoomaa PTZ-kamera ulos"
+ },
+ "in": {
+ "label": "Zoomaa PTZ-kamera sisään"
+ }
+ },
+ "frame": {
+ "center": {
+ "label": "Napsauta kehystä keskittääksesi PTZ-kamera"
+ }
+ },
+ "presets": "PTZ-kameroiden esiasetukset"
+ },
+ "camera": {
+ "enable": "Ota kamera käyttöön",
+ "disable": "Poista kamera käytöstä"
+ },
+ "muteCameras": {
+ "enable": "Mykistä kaikki kamerat",
+ "disable": "Poista kaikkien kameroiden mykistys"
+ },
+ "detect": {
+ "enable": "Ota tunnistus käyttöön",
+ "disable": "Poista tunnistus käytöstä"
+ },
+ "recording": {
+ "enable": "Ota tallennus käyttöön",
+ "disable": "Poista tallennus käytöstä"
+ },
+ "snapshots": {
+ "enable": "Ota tilannekuva käyttöön",
+ "disable": "Poista tilannekuva käytöstä"
+ },
+ "audioDetect": {
+ "enable": "Ota käyttöön äänen tunnistus",
+ "disable": "Poista äänen tunnistus käytöstä"
+ },
+ "autotracking": {
+ "enable": "Ota automaattinen seuranta käyttöön",
+ "disable": "Poista automaattinen seuranta käytöstä"
+ },
+ "streamStats": {
+ "enable": "Näytä suoratoiston tilastot",
+ "disable": "Piilota suoratoiston tilastot"
+ },
+ "manualRecording": {
+ "title": "Tallennus pyynnöstä",
+ "tips": "Aloita manuaalinen tapahtuma tämän kameran tallenteen tallennusasetusten perusteella.",
+ "playInBackground": {
+ "label": "Toista taustalla",
+ "desc": "Ota tämä asetus käyttöön, jos haluat jatkaa suoratoistoa kun soitin on piilotettu."
+ },
+ "showStats": {
+ "label": "Näytä tilastot",
+ "desc": "Ota tämä asetus käyttöön, jos haluat näyttää suoratoistotilastot kamerasyötteen päällä."
+ },
+ "debugView": "Virheenkorjausnäkymä",
+ "start": "Aloita tallennus pyynnöstä",
+ "started": "Manuaalinen pyynnöstätallennus aloitettu.",
+ "failedToStart": "Manuaalisen pyynnöstätallennuksen aloittaminen epäonnistui.",
+ "recordDisabledTips": "Koska tallennus on poistettu käytöstä tai rajoitettu tämän kameran asetuksissa, vain tilannekuva tallennetaan.",
+ "end": "Lopeta pyynnöstätallennus",
+ "ended": "Manuaalinen on-demand-tallennus lopetettu.",
+ "failedToEnd": "Manuaalisen pyynnöstätallennuksen lopettaminen epäonnistui."
+ },
+ "streamingSettings": "Suoratoistoasetukset",
+ "notifications": "Ilmoitukset",
+ "audio": "Ääni",
+ "suspend": {
+ "forTime": "Keskeytys: "
+ },
+ "stream": {
+ "title": "Suoratoisto",
+ "audio": {
+ "tips": {
+ "title": "Äänen on oltava kytkettynä kameraan ja määritettynä go2rtc:ssä tätä suoratoistoa varten.",
+ "documentation": "Lue dokumentaatio "
+ },
+ "available": "Ääni on saatavilla tälle suoratoistolle",
+ "unavailable": "Ääni ei ole saatavilla tälle suoratoistolle"
+ },
+ "twoWayTalk": {
+ "tips": "Laitteesi on tuettava ominaisuutta ja WebRTC:n on oltava määritetty kaksisuuntaista ääntä varten.",
+ "tips.documentation": "Lue dokumentaatio ",
+ "available": "Kaksisuuntainen ääni on saatavilla tässä suoratoistossa",
+ "unavailable": "Kaksisuuntainen ääni ei ole käytettävissä tässä suoratoistossa"
+ },
+ "lowBandwidth": {
+ "tips": "Live-näkymä on matalan kaistanleveyden tilassa puskuroinnin tai suoratoistovirheiden vuoksi.",
+ "resetStream": "Nollaa suoratoisto"
+ },
+ "playInBackground": {
+ "label": "Toista taustalla",
+ "tips": "Ota tämä asetus käyttöön, jos haluat jatkaa suoratoistoa, kun soitin on piilotettu."
+ }
+ },
+ "cameraSettings": {
+ "title": "{{camera}} Asetukset",
+ "cameraEnabled": "Kamera käytössä",
+ "objectDetection": "Kohteen tunnistus",
+ "recording": "Nauhoitus",
+ "snapshots": "Tilannekuvat",
+ "audioDetection": "Äänen tunnistus",
+ "autotracking": "Automaattinen seuranta"
+ },
+ "history": {
+ "label": "Näytä historiallista materiaalia"
+ },
+ "effectiveRetainMode": {
+ "modes": {
+ "all": "Kaikki",
+ "motion": "Liike",
+ "active_objects": "Aktiiviset kohteet"
+ },
+ "notAllTips": "{{source}}-tallenteiden säilytysmäärityksesi on asetettu tila: {{effectiveRetainMode}}, joten tämä tilattu tallenne säilyttää vain ne osat joiden tyyppi on {{effectiveRetainModeName}}."
+ },
+ "editLayout": {
+ "label": "Muokkaa asettelua",
+ "group": {
+ "label": "Muokkaa kameraryhmää"
+ },
+ "exitEdit": "Poistu muokkauksesta"
+ }
+}
diff --git a/web/public/locales/fi/views/recording.json b/web/public/locales/fi/views/recording.json
new file mode 100644
index 000000000..84daba26f
--- /dev/null
+++ b/web/public/locales/fi/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "calendar": "Kalenteri",
+ "filter": "Suodatin",
+ "filters": "Suodattimet",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "Sopimaton aikaväli valittu",
+ "endTimeMustAfterStartTime": "Loppuaika täytyy olla aloituksen jälkeen"
+ }
+ },
+ "export": "Vie"
+}
diff --git a/web/public/locales/fi/views/search.json b/web/public/locales/fi/views/search.json
new file mode 100644
index 000000000..67440629a
--- /dev/null
+++ b/web/public/locales/fi/views/search.json
@@ -0,0 +1,21 @@
+{
+ "search": "Etsi",
+ "savedSearches": "Tallennetut haut",
+ "searchFor": "Etsi {{inputValue}}",
+ "button": {
+ "clear": "Tyhjennä haku",
+ "save": "Tallenna haku",
+ "delete": "Poista tallennettu haku",
+ "filterInformation": "Suodattimen tiedot",
+ "filterActive": "Suodattimia valittuina"
+ },
+ "trackedObjectId": "Seuratun kohteen ID",
+ "filter": {
+ "label": {
+ "cameras": "Kamerat",
+ "labels": "Nimikkeet",
+ "zones": "Alueet",
+ "sub_labels": "Alinimikkeet"
+ }
+ }
+}
diff --git a/web/public/locales/fi/views/settings.json b/web/public/locales/fi/views/settings.json
new file mode 100644
index 000000000..23b910dda
--- /dev/null
+++ b/web/public/locales/fi/views/settings.json
@@ -0,0 +1,431 @@
+{
+ "documentTitle": {
+ "camera": "Kamera-asetukset - Frigate",
+ "classification": "Klassifiointiasetukset - Frigate",
+ "masksAndZones": "Peite ja vyöhykemuokkain - Frigate",
+ "motionTuner": "Liikesäädin - Frigate",
+ "default": "Asetukset - Frigate",
+ "general": "Yleiset asetukset - Frigate",
+ "frigatePlus": "Frigate+ asetukset - Frigate",
+ "object": "Virheenjäljitys - Frigate",
+ "authentication": "Autentikointiuasetukset - Frigate",
+ "notifications": "Ilmoitusasetukset - Frigate",
+ "enrichments": "Laajennusasetukset – Frigate"
+ },
+ "menu": {
+ "ui": "Käyttöliittymä",
+ "cameras": "Kameroiden asetukset",
+ "users": "Käyttäjät",
+ "classification": "Klassifiointi",
+ "frigateplus": "Frigate+",
+ "masksAndZones": "Maskit / alueet",
+ "debug": "Debuggaus",
+ "motionTuner": "Liikesäädin",
+ "notifications": "Ilmoitukset",
+ "enrichments": "Rikasteet"
+ },
+ "dialog": {
+ "unsavedChanges": {
+ "desc": "Haluatko tallentaa muutokset ennen jatkamista?",
+ "title": "Et ole tallentanut muutoksia."
+ }
+ },
+ "cameraSetting": {
+ "camera": "Kamera",
+ "noCamera": "Ei kameraa"
+ },
+ "general": {
+ "title": "Yleiset asetukset",
+ "liveDashboard": {
+ "automaticLiveView": {
+ "label": "Automaattinen reaaliaika-näkymä",
+ "desc": "Vaihda automaattisesti reaaliaikaiseen kameranäkymään kun liikettä on huomattu. Mikäli asetus on kytketty pois päivittyy reaaliaikaisen kojelaudan kuva vain kerran minuutissa."
+ },
+ "title": "Reaaliaikainen kojelauta",
+ "playAlertVideos": {
+ "label": "Näytä hälyytysvideot",
+ "desc": "Vakiona viimeaikaiset hälytykset pyörivät pieninä luuppaavina videoina reaaliaikaisella kojelaudalla. Ota tämä asetus pois päältä näyttääksesi vain staattisen kuvan viimeaikaisista hälytyksistä tässä laitteessa/selaimessa."
+ }
+ },
+ "storedLayouts": {
+ "title": "Tallennetut sijoittelut",
+ "desc": "Kameroiden sijoittelua kameraryhmissä voidaan raahata tai niiden kokoa muuttaa. Sijainnit tallennetaan selaimen paikalliseen muistiin.",
+ "clearAll": "Tyhjennä kaikki sijoittelut"
+ },
+ "cameraGroupStreaming": {
+ "title": "Kameraryhmän striimauksen asetukset",
+ "desc": "Striimauksen asetukset jokaiselle kameraryhmälle tallennetaan selaimesi paikalliseen muistiin.",
+ "clearAll": "Tyhjennä kaikkai striimauksen asetukset"
+ },
+ "recordingsViewer": {
+ "title": "Tallennusten näyttäjä",
+ "defaultPlaybackRate": {
+ "label": "Toiston vakionopeus",
+ "desc": "Toiston vakionopeus tallennusten näytölle."
+ }
+ },
+ "calendar": {
+ "title": "Kalenteri",
+ "firstWeekday": {
+ "label": "Viikon ensimmäinen päivä",
+ "desc": "Päivä josta kertauskalenterin viikot alkaa.",
+ "sunday": "sunnuntai",
+ "monday": "maanantai"
+ }
+ },
+ "toast": {
+ "success": {
+ "clearStoredLayout": "Tyhjennä tallennetut sijoittelut kameralle nimeltä {{cameraName}}",
+ "clearStreamingSettings": "Tyhjennä striimausasetukset kaikista kameraryhmistä."
+ },
+ "error": {
+ "clearStoredLayoutFailed": "Sijoittelujen tyhjentäminen ei onnistunut: {{errorMessage}}",
+ "clearStreamingSettingsFailed": "Striimausasetusten tyhjentäminen ei onnistunut: {{errorMessage}}"
+ }
+ }
+ },
+ "classification": {
+ "title": "Klassifiointiasetukset",
+ "semanticSearch": {
+ "reindexNow": {
+ "label": "Uudelleen indeksoi nyt",
+ "confirmDesc": "Oletko varma että haluat indeksoida uudelleen kaikki seurattujen kohteiden upotukset? Tämä prosessi toimii taustalla ja saattaa maksimoida prosessorin käytön sekä viedä runsaasti aikaa. Voit seurata prosessin etenemistä tarkastelu -sivulta.",
+ "desc": "Indeksoinnin luominen uudelleen jälleenrakentaa upotukset kaikkiin seurattuihin kohteisiin. Tämä prosessi toimii taustalla ja saattaa maksimoida prosessorin käytön sekä viedä reilusti aikaa riippuen paljonko seurattavia kohteita sinulla on.",
+ "confirmButton": "Indeksoi uudelleen",
+ "success": "Uudelleen indeksointi aloitettiin onnistuneesti.",
+ "alreadyInProgress": "Uudelleen indeksointi on jo käynnissä.",
+ "error": "Uudelleen indeksointia ei voitu aloittaa: {{errorMessage}}",
+ "confirmTitle": "Vahvista uudelleen indeksointi"
+ },
+ "modelSize": {
+ "label": "Mallin koko",
+ "small": {
+ "desc": "Valitessa pieni käytetään kvantisoitunutta versiota mallista joka käyttää vähemmän muistia sekä prosesoria upotuksen laatueron ollessa lähes olematon.",
+ "title": "pieni"
+ },
+ "large": {
+ "desc": "Valittaessa suuri käytettään täyttä Jina-mallia joka ajetaan automaattisesti grafiikkaytimellä mikäli mahdollista.",
+ "title": "suuri"
+ },
+ "desc": "Semanttisen haun upotuksiin käytetyn mallin koko."
+ },
+ "title": "Semanttinen haku",
+ "readTheDocumentation": "Lue dokumentaatio",
+ "desc": "Frigaten semanttisen haun kanssa voit hakea seurattuja kohteita esikatseluista joko kuvasta itsestään, käyttäjän määrittelemän teksti-kuvauksen perusteella tai automaattisesti generoidun kuvauksen kanssa."
+ },
+ "faceRecognition": {
+ "title": "Kasvojentunnistus",
+ "readTheDocumentation": "Lue dokumentaatio",
+ "modelSize": {
+ "label": "Mallin koko",
+ "desc": "Kasvojentunnistukseen käytetyn mallin koko.",
+ "small": {
+ "title": "pieni",
+ "desc": "Valitessa pieni FaceNet käyttää kasvojen upotukseen mallia joka toimii tehokkaasti suurimmalla osalla prosessoreista."
+ },
+ "large": {
+ "title": "suuri",
+ "desc": "Valitessa suuri käytetään ArcFace mallia kasvojen upotukseen joka ajetaan automaattisesti grafiikkaprosessorilla mikäli mahdollista."
+ }
+ },
+ "desc": "Kasvojentunnistus sallii nimien antamisen ihmisille ja kun heidän kasvonsa tunnistetaan Frigate antaa henkilölle nimen ala-viittenä. Tämä tieto sisällytetään käyttöliittymään, filttereihin sekä ilmoituksiin."
+ },
+ "licensePlateRecognition": {
+ "title": "Rekisterikilven tunnistus",
+ "desc": "Frigate voi tunnistaa ajoneuvojen rekisterikilpiä ja lisätä tunnistetut kirjaimet automaattisesti recognized_license_plate -kenttään tai tunnettu nimi sub_label kohteisiin joiden tyyppi on ajoneuvo. Yleinen käyttökohde on lukea pihatielle ajavien tai kadulla ohiajavien ajoneuvojen rekisterikilvet.",
+ "readTheDocumentation": "Lue dokumentaatio"
+ },
+ "toast": {
+ "success": "Klassifiointiasetukset on tallennettu. Käynnistä Frigate uudelleen saadaksesi ne käyttöön.",
+ "error": "Konfiguraatio muutoksia ei voitu tallentaa: {{errorMessage}}"
+ },
+ "restart_required": "Tarvitaan uudelleenkäynnistys (luokitusasetuksia muutettu)",
+ "birdClassification": {
+ "title": "Lintujen luokittelu",
+ "desc": "Lintujen luokittelu tunnistaa tunnetut linnut kvantisoidun Tensorflow-mallin avulla. Kun tunnettu lintu tunnistetaan, sen yleinen nimi lisätään alitunnisteena. Tämä tieto sisältyy käyttöliittymään, suodattimiin ja ilmoituksiin."
+ }
+ },
+ "camera": {
+ "title": "Kamera-asetukset",
+ "streams": {
+ "title": "Striimit",
+ "desc": "Poista kamera käytöstä väliaikaisesti, kunnes Frigate uudelleenkäynnistetään. Kameran poiskytkeminen lopettaa kameran videostriimien käsittelyn. Havainnot, tallennus ja debuggaus ovat pois käytöstä.Aluelaatikot
Kirkkaanvihreät laatikot peittävät kuvassa olevat kiinnostavat alueet, jotka lähetetään objektinilmaisimelle.
" + }, + "objectShapeFilterDrawing": { + "title": "Objektin muodon suodattimen piirtäminen", + "desc": "Piirrä kuvaan suorakulmio nähdäksesi pinta-alan ja kuvasuhteen tiedot", + "document": "Lue dokumentaatio ", + "score": "Pisteet", + "ratio": "Suhde", + "area": "Alue", + "tips": "Ota tämä asetus käyttöön piirtääksesi kamerakuvaan suorakulmion, joka näyttää sen pinta-alan ja suhteen. Näitä arvoja voidaan sitten käyttää objektin muodon suodatusparametrien asettamiseen asetuksissasi." + }, + "timestamp": { + "title": "Aikaleima", + "desc": "Lisää aikaleima kuvan päälle" + }, + "noObjects": "Ei kohteita", + "zones": { + "title": "Vyöhykkeet", + "desc": "Näytä määriteltyjen vyöhykkeiden ääriviivat" + }, + "boundingBoxes": { + "colors": { + "info": "Liikelaatikot
Punaiset laatikot peittävät ruudun alueet, joilla liikettä havaitaan parhaillaan.
" + } + }, + "users": { + "title": "Käyttäjät", + "management": { + "title": "Käyttäjien hallinta", + "desc": "Hallinnoi tämän Frigate-instanssin käyttäjätilejä." + }, + "addUser": "Lisää käyttäjä", + "updatePassword": "Päivitä salasana", + "toast": { + "success": { + "roleUpdated": "Rooli päivitetty käyttäjälle {{user}}", + "createUser": "Käyttäjä {{user}} luotu onnistuneesti", + "deleteUser": "Käyttäjä {{user}} poistettu onnistuneesti", + "updatePassword": "Salasana päivitetty onnistuneesti." + }, + "error": { + "setPasswordFailed": "Salasanan tallentaminen epäonnistui: {{errorMessage}}", + "createUserFailed": "Käyttäjän luonti epäonnistui: {{errorMessage}}", + "roleUpdateFailed": "Roolin päivittäminen epäonnistui: {{errorMessage}}", + "deleteUserFailed": "Käyttäjän poisto epäonistui: {{errorMessage}}" + } + }, + "table": { + "username": "Käyttäjänimi", + "actions": "Toiminnot", + "noUsers": "Käyttäjiä ei löytynyt.", + "changeRole": "Vaihda käyttäjäroolia", + "password": "Salasana", + "deleteUser": "Poista tili", + "role": "Rooli" + }, + "dialog": { + "form": { + "user": { + "desc": "Vain kirjaimet, numerot, pisteet ja alaviivat sallitaan.", + "placeholder": "Syötä käyttäjätunnus", + "title": "Käyttäjätunnus" + } + } + } + }, + "motionDetectionTuner": { + "title": "Liiketunnistuksen säätäminen", + "desc": { + "title": "Frigate käyttää liiketunnistusta ensimmäisenä tarkistuksena nähdäkseen, tapahtuuko kuvassa jotain, mikä kannattaisi tarkistaa objektitunnistuksella.", + "documentation": "Lue liikkeensäädön opas" + }, + "Threshold": { + "title": "Kynnys" + } + } +} diff --git a/web/public/locales/fi/views/system.json b/web/public/locales/fi/views/system.json new file mode 100644 index 000000000..7b6988bd3 --- /dev/null +++ b/web/public/locales/fi/views/system.json @@ -0,0 +1,54 @@ +{ + "logs": { + "type": { + "timestamp": "Aikaleima", + "tag": "Tagi", + "message": "Viesti", + "label": "Tyyppi" + }, + "copy": { + "label": "Kopioi leikepöydälle", + "success": "Lokit kopioitu leikepöydälle", + "error": "Lokeja ei voitu kopioida leikepöydälle" + }, + "download": { + "label": "Lataa lokit" + } + }, + "documentTitle": { + "cameras": "Kameroiden tilastot - Frigate", + "storage": "Tallenteiden tilastot - Fgirage", + "general": "Yleiset tilastot - Frigate", + "enrichments": "Rikastetut tilastot - Frigate", + "logs": { + "frigate": "Frigaten lokit - Frigate", + "go2rtc": "Go2RTC lokit - Frigate", + "nginx": "Nginx lokit - Frigate" + } + }, + "title": "Järjestelmä", + "metrics": "Järjestelmämittarit", + "general": { + "hardwareInfo": { + "title": "Laitteiston tiedot", + "gpuUsage": "GPU:n käyttö", + "gpuMemory": "GPU:n muisti", + "gpuEncoder": "GPU-enkooderi", + "gpuDecoder": "GPU-dekooderi", + "gpuInfo": { + "vainfoOutput": { + "title": "Vainfon tulostus" + }, + "toast": { + "success": "Kopioi GPU:n tiedot leikepöydälle" + }, + "copyInfo": { + "label": "Kopioi GPU:n tiedot" + }, + "closeInfo": { + "label": "Sulje GPU:n tiedot" + } + } + } + } +} diff --git a/web/public/locales/fr/audio.json b/web/public/locales/fr/audio.json new file mode 100644 index 000000000..b773f026b --- /dev/null +++ b/web/public/locales/fr/audio.json @@ -0,0 +1,429 @@ +{ + "speech": "Conversation", + "babbling": "Babillage", + "yell": "Crier", + "bicycle": "Vélo", + "car": "Voiture", + "bellow": "Ci-dessous", + "whispering": "Chuchotement", + "laughter": "Rires", + "snicker": "Ricanement", + "crying": "Pleurs", + "boat": "Bateau", + "bus": "Bus", + "train": "Train", + "motorcycle": "Moto", + "whoop": "Cri", + "sigh": "Soupir", + "singing": "Chant", + "choir": "Chorale", + "yodeling": "Yodel", + "chant": "Chant", + "mantra": "Mantra", + "child_singing": "Chant d'enfant", + "bird": "Oiseau", + "cat": "chat", + "synthetic_singing": "Chant synthétique", + "rapping": "Rap", + "horse": "Cheval", + "dog": "Chien", + "sheep": "Mouton", + "whistling": "Sifflement", + "breathing": "Respiration", + "snoring": "Ronflement", + "gasp": "Souffle", + "pant": "halètement", + "snort": "Reniflement", + "camera": "Caméra", + "cough": "Toussotement", + "groan": "Gémissement", + "grunt": "Grognement", + "throat_clearing": "Éclaircissement de la gorge", + "wheeze": "Respiration bruyante", + "sneeze": "Éternuement", + "sniff": "Reniflement", + "chewing": "Mastication", + "gargling": "Gargarisme", + "ambulance": "Ambulance", + "police_car": "Voiture de police", + "emergency_vehicle": "Véhicule d'urgence", + "subway": "Métro", + "fire_alarm": "Alarme Incendie", + "smoke_detector": "Détecteur de Fumée", + "siren": "Sirène", + "pulleys": "Poulies", + "gears": "Engrenages", + "clock": "Horloge", + "ratchet": "Cliquet", + "mechanisms": "Mécanismes", + "steam_whistle": "Sifflet à vapeur", + "whistle": "Sifflet", + "foghorn": "Corne de brume", + "tools": "Outils", + "printer": "Imprimante", + "air_conditioning": "Climatisation", + "mechanical_fan": "Ventilateur mécanique", + "sewing_machine": "Machine à coudre", + "wood": "Bois", + "fireworks": "Feux d'artifice", + "glass": "Verre", + "television": "Télévision", + "sound_effect": "Effet sonore", + "burping": "Rots", + "fart": "Pet", + "crowd": "Foule", + "children_playing": "Enfants en train de jouer", + "animal": "Animal", + "bark": "Aboiement", + "pig": "Cochon", + "goat": "Chèvre", + "chicken": "Poulet", + "turkey": "Dinde", + "duck": "Canard", + "goose": "Dindon", + "wild_animals": "Animaux Sauvages", + "crow": "Corbeau", + "dogs": "Chiens", + "mouse": "Souris", + "insect": "Insecte", + "cricket": "Grillon", + "mosquito": "Moustique", + "fly": "Mouche", + "frog": "Grenouille", + "snake": "Serpent", + "music": "Musique", + "guitar": "Guitare", + "electric_guitar": "Guitare électrique", + "keyboard": "Clavier", + "piano": "Piano", + "vehicle": "Véhicule", + "skateboard": "Skateboard", + "door": "Porte", + "blender": "Mixer", + "hair_dryer": "Sèche cheveux", + "toothbrush": "Brosse à dents", + "sink": "Lavabo", + "scissors": "Paire de ciseaux", + "humming": "Bourdonnement", + "shuffle": "Mélanger", + "footsteps": "Pas", + "hiccup": "Hoquet", + "finger_snapping": "Claquement de doigts", + "clapping": "Claquements", + "applause": "Applaudissements", + "heartbeat": "Battements de coeur", + "cheering": "Applaudissement", + "electric_shaver": "Rasoir électrique", + "truck": "Camion", + "run": "Démarrer", + "biting": "Mordre", + "stomach_rumble": "Gargouillements d'estomac", + "hands": "Mains", + "heart_murmur": "Souffle au cœur", + "chatter": "Bavarder", + "pets": "Animaux de compagnie", + "yip": "Ouais", + "howl": "Hurler", + "growling": "Grondement", + "whimper_dog": "Gémissements de chien", + "purr": "Ronronnements", + "caterwaul": "Miaulement", + "meow": "Miaou", + "livestock": "Bétail", + "neigh": "Hennissement", + "quack": "Coin-coin", + "honk": "Klaxon", + "roaring_cats": "Feulements", + "roar": "Rugissements", + "chirp": "Gazouillis", + "squawk": "Braillement", + "pigeon": "Pigeon", + "coo": "Roucoulement", + "caw": "Croassement", + "owl": "Chouette", + "hoot": "Hululement", + "flapping_wings": "Battement d'ailes", + "rats": "Rats", + "patter": "Crépitements", + "buzz": "Bourdonnement", + "croak": "Coassement", + "rattle": "Cliquetis", + "whale_vocalization": "Chant des baleines", + "musical_instrument": "Instrument de musique", + "plucked_string_instrument": "Instrument à cordes pincées", + "bass_guitar": "Guitare basse", + "acoustic_guitar": "Guitare acoustique", + "tapping": "Tapotement", + "strum": "Grattement", + "banjo": "Banjo", + "sitar": "Sitar", + "mandolin": "Mandoline", + "steel_guitar": "Steel Guitar", + "zither": "Cithare", + "ukulele": "Ukulélé", + "electric_piano": "Piano électrique", + "organ": "Orgue", + "electronic_organ": "Orgue électrique", + "hammond_organ": "Orgue Hammond", + "synthesizer": "Synthétiseur", + "sampler": "Échantillonneur", + "harpsichord": "Clavecin", + "percussion": "Percussions", + "drum_kit": "Batterie", + "drum_machine": "Boîte à rythmes", + "drum": "Tambour", + "snare_drum": "Caisse claire", + "rimshot": "Rimshot", + "drum_roll": "Roulement de tambour", + "bass_drum": "Grosse caisse", + "timpani": "Timbales", + "tabla": "Tabla", + "cymbal": "Cymbale", + "hi_hat": "Charleston", + "wood_block": "Wood Block", + "maraca": "Maraca", + "gong": "Gong", + "tubular_bells": "Carillon tubulaire", + "marimba": "Marimba", + "mallet_percussion": "Maillet de percussion", + "glockenspiel": "Glockenspiel", + "vibraphone": "Vibraphone", + "steelpan": "Pan", + "orchestra": "Orchestre", + "brass_instrument": "Cuivres", + "french_horn": "Cor français", + "trumpet": "Trompette", + "bowed_string_instrument": "Instrument à cordes frottées", + "string_section": "Section des cordes", + "violin": "Violon", + "pizzicato": "Pizzicato", + "cello": "Violoncelle", + "double_bass": "Contrebasse", + "wind_instrument": "Instrument à vent", + "flute": "Flûte", + "saxophone": "Saxophone", + "clarinet": "Clarinette", + "harp": "Harpe", + "church_bell": "Cloche d'église", + "bell": "Cloche", + "jingle_bell": "Grelot", + "bicycle_bell": "Sonnette de vélo", + "tuning_fork": "Diapason", + "chime": "Carillon", + "wind_chime": "Carillon à vent", + "harmonica": "Harmonica", + "accordion": "Accordéon", + "bagpipes": "Cornemuse", + "didgeridoo": "Didgeridoo", + "theremin": "Thérémine", + "singing_bowl": "Bol chantant", + "scratching": "Scratch", + "pop_music": "Musique pop", + "hip_hop_music": "Musique hip-hop", + "beatboxing": "Beatboxing", + "rock_music": "Musique rock", + "punk_rock": "Punk Rock", + "soul_music": "Musique Soul", + "reggae": "Reggae", + "country": "Country", + "funk": "Funk", + "folk_music": "Musique Folk", + "jazz": "Jazz", + "techno": "Techno", + "dubstep": "Dubstep", + "drum_and_bass": "Drum and Bass", + "traditional_music": "Musique traditionnelle", + "independent_music": "Musique indépendante", + "song": "Chanson", + "background_music": "Musique de fond", + "theme_music": "Thème musical", + "jingle": "Tintement", + "soundtrack_music": "Musique de bande originale", + "lullaby": "Berceuse", + "video_game_music": "Musique de jeux vidéo", + "dance_music": "Musique Dance", + "wedding_music": "Musique de mariage", + "happy_music": "Musique joyeuse", + "sad_music": "Musique triste", + "tender_music": "Musique tendre", + "exciting_music": "Musique stimulante", + "angry_music": "Musique énervée", + "scary_music": "Musique effrayante", + "wind": "Vent", + "rustling_leaves": "Bruissements de feuilles", + "wind_noise": "Bruit de vent", + "thunderstorm": "Orage", + "thunder": "Tonnerre", + "water": "Eau", + "rain": "Pluie", + "raindrop": "Goutte de pluie", + "rain_on_surface": "Pluie sur une surface", + "stream": "Flux", + "waterfall": "Cascade", + "ocean": "Océan", + "waves": "Vagues", + "steam": "Vapeur", + "gurgling": "Gargouillis", + "fire": "Feu", + "crackle": "Crépitement", + "sailboat": "Voilier", + "rowboat": "Chaloupe", + "motorboat": "Bateau à moteur", + "ship": "Bateau", + "motor_vehicle": "Véhicule à moteur", + "toot": "Sifflotement", + "car_alarm": "Alarme de voiture", + "power_windows": "Vitres électriques", + "skidding": "Dérapage", + "tire_squeal": "Crissements de pneu", + "car_passing_by": "Passage de voiture", + "race_car": "Course de voitures", + "air_brake": "Frein pneumatique", + "air_horn": "Klaxon à air", + "reversing_beeps": "Bips de marche arrière", + "ice_cream_truck": "Camion de glaces", + "fire_engine": "Camion de pompiers", + "traffic_noise": "Bruit de circulation", + "rail_transport": "Transport ferroviaire", + "train_whistle": "Sifflet de train", + "train_horn": "Klaxon de train", + "railroad_car": "Wagon de chemin de fer", + "train_wheels_squealing": "Crissements de roues de train", + "aircraft": "Aéronef", + "aircraft_engine": "Moteur d'avion", + "jet_engine": "Moteur à réaction", + "propeller": "Hélice", + "helicopter": "Hélicoptère", + "fixed-wing_aircraft": "Avion à voilure fixe", + "engine": "Moteur", + "light_engine": "Moteur léger", + "dental_drill's_drill": "Fraise dentaire", + "lawn_mower": "Tondeuse à gazon", + "chainsaw": "Tronçonneuse", + "heavy_engine": "Moteur lourd", + "engine_knocking": "Détonations de moteur", + "engine_starting": "Démarrage de moteur", + "accelerating": "Accélération", + "doorbell": "Sonnette", + "ding-dong": "Ding-Dong", + "knock": "Coup", + "tap": "Tapotement", + "squeak": "Grincement", + "cupboard_open_or_close": "Ouverture ou fermeture de placard", + "drawer_open_or_close": "Ouverture ou fermeture de tiroir", + "dishes": "Plats", + "cutlery": "Couverts", + "chopping": "Hacher", + "frying": "Friture", + "microwave_oven": "Four à micro-ondes", + "water_tap": "Robinet d'eau", + "bathtub": "Baignoire", + "toilet_flush": "Chasse d'eau", + "electric_toothbrush": "Brosse à dents électrique", + "vacuum_cleaner": "Aspirateur", + "zipper": "Fermeture éclair", + "keys_jangling": "Tintements de clés", + "coin": "Pièce de monnaie", + "shuffling_cards": "Mélange de cartes", + "typing": "Frappe au clavier", + "typewriter": "Machine à écrire", + "writing": "Écriture", + "alarm": "Alarme", + "telephone_bell_ringing": "Sonnerie de téléphone", + "ringtone": "Sonnerie", + "telephone_dialing": "Numérotation téléphonique", + "dial_tone": "Tonalité", + "busy_signal": "Tonalité occupée", + "alarm_clock": "Réveille-matin", + "civil_defense_siren": "Sirène d'alerte aux populations", + "buzzer": "Buzzer", + "tick": "Tic-tac", + "tick-tock": "Tic-Tac", + "cash_register": "Caisse enregistreuse", + "single-lens_reflex_camera": "Appareil photo reflex mono-objectif", + "hammer": "Marteau", + "jackhammer": "Marteau-piqueur", + "sawing": "Sciage", + "filing": "Limage", + "sanding": "Ponçage", + "power_tool": "Outil électrique", + "drill": "Perceuse", + "explosion": "Explosion", + "gunshot": "Coup de feu", + "machine_gun": "Mitrailleuse", + "fusillade": "Fusillade", + "artillery_fire": "Tir d'artillerie", + "cap_gun": "Pistolet à amorces", + "firecracker": "Pétard", + "eruption": "Éruption", + "boom": "Boom", + "chop": "Coup de hache", + "splinter": "Éclat", + "crack": "Fissure", + "chink": "Fente", + "shatter": "Brisure", + "silence": "Silence", + "environmental_noise": "Bruit ambiant", + "static": "Statique", + "white_noise": "Bruit blanc", + "pink_noise": "Bruit rose", + "field_recording": "Enregistrement sur le terrain", + "scream": "Cri", + "tambourine": "Tambourin", + "electronic_music": "Musique électronique", + "rock_and_roll": "Rock and Roll", + "vocal_music": "Musique vocale", + "trombone": "Trombone", + "flamenco": "Flamenco", + "carnatic_music": "Musique carnatique", + "a_capella": "A Capella", + "christmas_music": "Musique de Noël", + "afrobeat": "Afrobeat", + "sliding_door": "Porte coulissante", + "opera": "Opéra", + "music_of_africa": "Musique d'Afrique", + "music_of_latin_america": "Musique d'Amérique Latine", + "blues": "Blues", + "music_for_children": "Musique pour enfants", + "electronica": "Electronica", + "ska": "Ska", + "salsa_music": "Salsa", + "medium_engine": "Moteur moyen", + "heavy_metal": "Heavy Metal", + "disco": "Disco", + "grunge": "Grunge", + "music_of_asia": "Musique d'Asie", + "progressive_rock": "Rock progressif", + "psychedelic_rock": "Rock psychédélique", + "rhythm_and_blues": "Rhythm and Blues", + "electronic_dance_music": "Electronic Dance Music", + "trance_music": "Musique Trance", + "new-age_music": "Musique New Age", + "bluegrass": "Bluegrass", + "swing_music": "Musique Swing", + "ambient_music": "Musique d'ambiance", + "middle_eastern_music": "Musique orientale", + "house_music": "Musique House", + "christian_music": "Musique chrétienne", + "classical_music": "Musique classique", + "gospel_music": "Musique Gospel", + "slam": "Claquement", + "computer_keyboard": "Clavier d'ordinateur", + "burst": "Éclatement", + "music_of_bollywood": "Musique de Bollywood", + "idling": "Ralenti", + "radio": "Radio", + "telephone": "Téléphone", + "bow_wow": "Ouaf ouaf", + "hiss": "Sifflement", + "clip_clop": "Clic-clac", + "cattle": "Bétail", + "moo": "Meuglement", + "cowbell": "Clochette", + "oink": "Grouin-grouin", + "bleat": "Bêler", + "fowl": "Volaille", + "cluck": "Gloussement", + "cock_a_doodle_doo": "Cocorico", + "gobble": "Glouglou" +} diff --git a/web/public/locales/fr/common.json b/web/public/locales/fr/common.json new file mode 100644 index 000000000..5ed9f65a9 --- /dev/null +++ b/web/public/locales/fr/common.json @@ -0,0 +1,275 @@ +{ + "time": { + "untilForRestart": "Jusqu'au redémarrage de Frigate.", + "untilRestart": "Jusqu'au redémarrage", + "untilForTime": "Jusqu'à {{time}}", + "justNow": "À l'instant", + "today": "Aujourd'hui", + "last7": "7 derniers jours", + "last14": "14 derniers jours", + "ago": "Il y a {{timeAgo}}", + "yesterday": "Hier", + "last30": "30 derniers jours", + "thisWeek": "Cette semaine", + "lastWeek": "La semaine dernière", + "thisMonth": "Ce mois-ci", + "lastMonth": "Le mois dernier", + "10minutes": "10 minutes", + "5minutes": "5 minutes", + "30minutes": "30 minutes", + "12hours": "12 heures", + "h": "{{time}} h", + "pm": "PM", + "am": "AM", + "yr": "{{time}} a", + "year_one": "{{time}} année", + "year_many": "{{time}} années", + "year_other": "{{time}} années", + "mo": "{{time}} m", + "month_one": "{{time}} mois", + "month_many": "{{time}} mois", + "month_other": "{{time}} mois", + "s": "{{time}} s", + "second_one": "{{time}} seconde", + "second_many": "{{time}} secondes", + "second_other": "{{time}} secondes", + "m": "{{time}} mn", + "hour_one": "{{time}} heure", + "hour_many": "{{time}} heures", + "hour_other": "{{time}} heures", + "24hours": "24 heures", + "minute_one": "{{time}} minute", + "minute_many": "{{time}} minutes", + "minute_other": "{{time}} minutes", + "d": "{{time}} j", + "day_one": "{{time}} jour", + "day_many": "{{time}} jours", + "day_other": "{{time}} jours", + "1hour": "1 heure", + "formattedTimestamp": { + "12hour": "d MMM HH:mm:ss", + "24hour": "d MMM HH:mm:ss" + }, + "formattedTimestampWithYear": { + "24hour": "%b %-d %Y, %H:%M", + "12hour": "%b %-d %Y, %I:%M %p" + }, + "formattedTimestampOnlyMonthAndDay": "%b %-d", + "formattedTimestampExcludeSeconds": { + "12hour": "%b %-d, %I:%M %p", + "24hour": "%b %-d, %H:%M" + }, + "formattedTimestamp2": { + "12hour": "dd/MM HH:mm:ss", + "24hour": "d MMM HH:mm:ss" + }, + "formattedTimestampHourMinute": { + "24hour": "HH:mm", + "12hour": "HH:mm aaa" + }, + "formattedTimestampMonthDay": "d MMM", + "formattedTimestampFilename": { + "12hour": "dd-MM-yy-HH-mm-ss-a", + "24hour": "dd-MM-yy-HH-mm-ss" + }, + "formattedTimestampMonthDayHourMinute": { + "12hour": "d MMM, HH:mm aaa", + "24hour": "d MMM, HH:mm" + }, + "formattedTimestampHourMinuteSecond": { + "24hour": "HH:mm:ss", + "12hour": "HH:mm:ss aaa" + }, + "formattedTimestampMonthDayYearHourMinute": { + "12hour": "d MMM yyyy, HH:mm aaa", + "24hour": "d MMM yyyy, HH:mm" + }, + "formattedTimestampMonthDayYear": { + "12hour": "d MMM, yyyy", + "24hour": "d MMM,yyyy" + } + }, + "button": { + "apply": "Appliquer", + "reset": "Réinitialiser", + "disabled": "Désactivé", + "save": "Enregistrer", + "saving": "Enregistrement…", + "close": "Fermer", + "copy": "Copier", + "back": "Retour", + "history": "Historique", + "pictureInPicture": "Image en incrustation", + "twoWayTalk": "Conversation bidirectionnelle", + "off": "Inactif", + "edit": "Editer", + "copyCoordinates": "Copier les coordonnées", + "delete": "Supprimer", + "yes": "Oui", + "no": "Non", + "unsuspended": "Reprendre", + "play": "Lire", + "unselect": "Désélectionner", + "suspended": "Suspendu", + "enable": "Activer", + "enabled": "Activé", + "info": "Info", + "disable": "Désactiver", + "cancel": "Annuler", + "fullscreen": "Plein écran", + "next": "Suivant", + "exitFullscreen": "Sortir du mode plein écran", + "cameraAudio": "Son de la caméra", + "on": "Actif", + "export": "Exporter", + "deleteNow": "Supprimer maintenant", + "download": "Télécharger", + "done": "Terminé" + }, + "menu": { + "configuration": "Configuration", + "language": { + "en": "English (Anglais)", + "withSystem": { + "label": "Utiliser les paramètres système pour la langue" + }, + "zhCN": "简体中文 (Chinois simplifié)", + "hi": "हिन्दी (Hindi)", + "fr": "Français (Français)", + "ja": "日本語 (Japonais)", + "tr": "Türkçe (Turc)", + "it": "Italiano (Italien)", + "nl": "Nederlands (Néerlandais)", + "sv": "Svenska (Suédois)", + "cs": "Čeština (Tchèque)", + "nb": "Norsk Bokmål (Bokmål Norvégien)", + "ko": "한국어 (Coréen)", + "fa": "فارسی (Perse)", + "pl": "Polski (Polonais)", + "el": "Ελληνικά (Grec)", + "ro": "Română (Roumain)", + "hu": "Magyar (Hongrois)", + "he": "עברית (Hebreu)", + "ru": "Русский (Russe)", + "de": "Deutsch (Allemand)", + "es": "Español (Espagnol)", + "ar": "العربية (Arabe)", + "da": "Dansk (Danois)", + "fi": "Suomi (Finlandais)", + "pt": "Português (Portugais)", + "sk": "Slovenčina (Slovaque)", + "uk": "Українська (Ukrainien)", + "vi": "Tiếng Việt (Vietnamien)", + "yue": "粵語 (Cantonais)", + "th": "ไทย (Thai)", + "ca": "Català (Catalan)" + }, + "appearance": "Apparence", + "darkMode": { + "light": "Clair", + "dark": "Sombre", + "withSystem": { + "label": "Utiliser les paramètres système pour le mode clair ou sombre" + }, + "label": "Mode sombre" + }, + "review": "Revue d'événements", + "explore": "Explorer", + "export": "Exporter", + "user": { + "account": "Compte", + "logout": "Se déconnecter", + "setPassword": "Configurer un mot de passe", + "current": "Utilisateur actuel : {{user}}", + "title": "Utilisateur", + "anonymous": "anonyme" + }, + "systemLogs": "Journaux système", + "documentation": { + "title": "Documentation", + "label": "Documentation de Frigate" + }, + "system": "Système", + "help": "Aide", + "configurationEditor": "Editeur de configuration", + "theme": { + "contrast": "Contraste élevé", + "blue": "Bleu", + "green": "Vert", + "nord": "Nord", + "red": "Rouge", + "default": "Défaut", + "label": "Thème", + "highcontrast": "Contraste élevé" + }, + "systemMetrics": "Indicateurs systèmes", + "settings": "Paramètres", + "withSystem": "Système", + "restart": "Redémarrer Frigate", + "live": { + "cameras": { + "count_one": "{{count}} caméra", + "count_many": "{{count}} caméras", + "count_other": "{{count}} caméras", + "title": "Caméras" + }, + "allCameras": "Toutes les caméras", + "title": "Direct" + }, + "uiPlayground": "Gestion de l'interface", + "faceLibrary": "Bibliothèque de visages", + "languages": "Langues" + }, + "toast": { + "save": { + "title": "Enregistrer", + "error": { + "noMessage": "Echec lors de l'enregistrement des changements de configuration", + "title": "Echec lors de l'enregistrement des changements de configuration : {{errorMessage}}" + } + }, + "copyUrlToClipboard": "Lien copié dans le presse-papier." + }, + "role": { + "title": "Rôle", + "viewer": "Observateur", + "admin": "Administrateur", + "desc": "Les administrateurs accèdent à l'ensemble des fonctionnalités de l'interface Frigate. Les observateurs sont limités à la consultation des caméras, de la revue d'événements, et à l'historique des enregistrements dans l'interface utilisateur." + }, + "pagination": { + "next": { + "title": "Suivant", + "label": "Aller à la page suivante" + }, + "more": "Plus de pages", + "previous": { + "label": "Aller à la page précédente", + "title": "Précédent" + }, + "label": "pagination" + }, + "notFound": { + "title": "404", + "documentTitle": "Non trouvé - Frigate", + "desc": "Page non trouvée" + }, + "selectItem": "Sélectionner {{item}}", + "accessDenied": { + "title": "Accès refusé", + "documentTitle": "Accès refusé - Frigate", + "desc": "Vous n'avez pas l'autorisation de voir cette page." + }, + "label": { + "back": "Retour" + }, + "unit": { + "speed": { + "kph": "km/h", + "mph": "mph" + }, + "length": { + "feet": "pieds", + "meters": "mètres" + } + } +} diff --git a/web/public/locales/fr/components/auth.json b/web/public/locales/fr/components/auth.json new file mode 100644 index 000000000..65e26691b --- /dev/null +++ b/web/public/locales/fr/components/auth.json @@ -0,0 +1,15 @@ +{ + "form": { + "password": "Mot de passe", + "login": "Identifiant", + "user": "Nom d'utilisateur", + "errors": { + "unknownError": "Erreur inconnue. Vérifiez les journaux.", + "webUnknownError": "Erreur inconnue. Vérifiez les journaux de la console.", + "passwordRequired": "Un mot de passe est requis", + "loginFailed": "Échec de l'authentification", + "usernameRequired": "Un nom d'utilisateur est requis", + "rateLimit": "Nombre d'essais dépassé. Réessayez plus tard." + } + } +} diff --git a/web/public/locales/fr/components/camera.json b/web/public/locales/fr/components/camera.json new file mode 100644 index 000000000..582b211b5 --- /dev/null +++ b/web/public/locales/fr/components/camera.json @@ -0,0 +1,86 @@ +{ + "group": { + "edit": "Éditer le groupe de caméras", + "label": "Groupe de caméras", + "add": "Ajouter un groupe de caméras", + "delete": { + "label": "Supprimer le groupe de caméras", + "confirm": { + "title": "Confirmer la suppression", + "desc": "Êtes-vous sûr de vouloir supprimer le groupe de caméras {{name}} ?" + } + }, + "name": { + "placeholder": "Saisissez un nom…", + "label": "Nom", + "errorMessage": { + "mustLeastCharacters": "Le nom du groupe de caméras doit comporter au moins 2 caractères.", + "exists": "Le nom du groupe de caméras existe déjà.", + "nameMustNotPeriod": "Le nom de groupe de caméras ne doit pas contenir de période.", + "invalid": "Nom de groupe de caméras invalide." + } + }, + "cameras": { + "label": "Caméras", + "desc": "Sélectionner les caméras pour ce groupe." + }, + "success": "Le groupe de caméras ({{name}}) a été enregistré.", + "icon": "Icône", + "camera": { + "setting": { + "label": "Paramètres de flux de caméra", + "title": "Paramètres de flux de {{cameraName}}", + "audioIsUnavailable": "L'audio n'est pas disponible pour ce flux", + "audioIsAvailable": "L'audio est disponible pour ce flux", + "desc": "Modifie les options du flux temps réel pour le tableau de bord de ce groupe de caméras. Ces paramètres sont spécifiques à un périphérique et/ou navigateur.", + "audio": { + "tips": { + "document": "Lire la documentation ", + "title": "L'audio doit provenir de la caméra et être configuré dans go2rtc pour ce flux." + } + }, + "streamMethod": { + "label": "Méthode de streaming", + "method": { + "noStreaming": { + "label": "Pas de diffusion", + "desc": "Les images provenant de la caméra ne seront mises à jour qu'une fois par minute et il n'y aura pas de diffusion en direct." + }, + "smartStreaming": { + "label": "Diffusion intelligente (recommandé)", + "desc": "La diffusion intelligente mettra à jour les images de la caméra une fois par minute lorsqu'aucune activité n'est détectée afin de conserver la bande-passante et les ressources. Quand une activité est détectée, le flux bascule automatiquement en diffusion temps réel." + }, + "continuousStreaming": { + "label": "Diffusion en continu", + "desc": { + "title": "L'image de la caméra sera toujours un flux temps réel lorsqu'elle est visible dans le tableau de bord, même si aucune activité n'est détectée.", + "warning": "La diffusion en continu peut engendrer une bande-passante élevée et des problèmes de performance. A utiliser avec précaution." + } + } + }, + "placeholder": "Choisissez une méthode de diffusion" + }, + "compatibilityMode": { + "label": "Mode de compatibilité", + "desc": "Activer cette option uniquement si votre flux temps réel affiche des erreurs chromatiques et a une ligne diagonale sur le côté droit de l'image." + }, + "stream": "Flux", + "placeholder": "Choisissez un flux" + } + } + }, + "debug": { + "timestamp": "Horodatage", + "motion": "Mouvement", + "mask": "Masque", + "options": { + "showOptions": "Afficher les options", + "title": "Options", + "label": "Paramètres", + "hideOptions": "Masquer les options" + }, + "boundingBox": "Boîte de délimitation", + "zones": "Zones", + "regions": "Régions" + } +} diff --git a/web/public/locales/fr/components/dialog.json b/web/public/locales/fr/components/dialog.json new file mode 100644 index 000000000..d92e3ff72 --- /dev/null +++ b/web/public/locales/fr/components/dialog.json @@ -0,0 +1,126 @@ +{ + "restart": { + "title": "Êtes-vous sûr de vouloir redémarrer Frigate ?", + "restarting": { + "title": "Frigate redémarre", + "content": "Actualisation de la page dans {{countdown}} secondes.", + "button": "Forcer l'actualisation maintenant" + }, + "button": "Redémarrer" + }, + "explore": { + "plus": { + "submitToPlus": { + "label": "Soumettre à Frigate+", + "desc": "Les objets situés dans des zones à ignorer ne doivent pas être signalés comme de faux positifs, car cela nuirait à la précision du modèle." + }, + "review": { + "true": { + "label": "Confirmez cette étiquette pour Frigate Plus", + "true_one": "C'est un {{label}}", + "true_many": "Ce sont des {{label}}", + "true_other": "Ce sont des {{label}}" + }, + "false": { + "false_one": "Ceci n'est pas un {{label}}", + "false_many": "Ceux-ci ne sont pas des {{label}}", + "false_other": "Ceux-ci ne sont pas des {{label}}", + "label": "Ne pas confirmer cette étiquette pour Frigate Plus" + }, + "state": { + "submitted": "Soumis" + }, + "question": { + "label": "Confirmez ce libellé pour Frigate+", + "ask_an": "Est-ce que cet objet est un(e){{label}} ?",
+ "ask_a": "Est-ce que cet objet est un(e) {{label}} ?",
+ "ask_full": "Est-ce-que cet objet est un(e) {{translatedLabel}} ?"
+ }
+ }
+ },
+ "video": {
+ "viewInHistory": "Afficher dans la chronologie"
+ }
+ },
+ "export": {
+ "time": {
+ "custom": "Personnalisé",
+ "fromTimeline": "Sélectionner depuis la chronologie",
+ "lastHour_one": "Dernière heure",
+ "lastHour_many": "{{count}} dernières heures",
+ "lastHour_other": "{{count}} dernières heures",
+ "end": {
+ "label": "Sélectionner une heure de fin",
+ "title": "Heure de fin"
+ },
+ "start": {
+ "label": "Sélectionner une heure de début",
+ "title": "Heure de début"
+ }
+ },
+ "selectOrExport": "Sélectionner ou exporter",
+ "toast": {
+ "error": {
+ "failed": "Échec du démarrage de l'export : {{error}}",
+ "endTimeMustAfterStartTime": "L'heure de fin doit être postérieure à l'heure de début",
+ "noVaildTimeSelected": "La plage horaire sélectionnée n'est pas valide"
+ },
+ "success": "Exportation démarrée avec succès. Consultez le fichier dans le dossier /exports."
+ },
+ "select": "Sélectionner",
+ "name": {
+ "placeholder": "Nommer l'export"
+ },
+ "export": "Exporter",
+ "fromTimeline": {
+ "saveExport": "Enregistrer l'export",
+ "previewExport": "Prévisualiser l'export"
+ }
+ },
+ "search": {
+ "saveSearch": {
+ "desc": "Donnez un nom à cette recherche enregistrée.",
+ "label": "Enregistrer la recherche",
+ "success": "La recherche ({{searchName}}) a été enregistrée.",
+ "button": {
+ "save": {
+ "label": "Enregistrer cette recherche"
+ }
+ },
+ "overwrite": "{{searchName}} existe déjà. L'enregistrement écrasera la recherche existante.",
+ "placeholder": "Saisissez un nom pour votre recherche"
+ }
+ },
+ "streaming": {
+ "label": "Flux",
+ "restreaming": {
+ "disabled": "La rediffusion n'est pas activée pour cette caméra.",
+ "desc": {
+ "readTheDocumentation": "Lire la documentation",
+ "title": "Configurez go2rtc pour bénéficier d'options de visualisation en direct supplémentaires et de l'audio pour cette caméra."
+ }
+ },
+ "showStats": {
+ "label": "Afficher les statistiques du flux",
+ "desc": "Activez cette option pour montrer les statistiques de diffusion en incrustation sur le flux vidéo de la caméra."
+ },
+ "debugView": "Affichage de débogage"
+ },
+ "recording": {
+ "confirmDelete": {
+ "desc": {
+ "selected": "Êtes-vous sûr(e) de vouloir supprimer toutes les vidéos enregistrées associées à cet élément de la revue d'événements ? détection de la caméra {{cameraName}}. Vérifiez le journal d'erreurs."
+ },
+ "livePlayerRequiredIOSVersion": "iOS 17.1 ou une version supérieure est requis pour ce type de flux en direct.",
+ "cameraDisabled": "La caméra est désactivée",
+ "stats": {
+ "streamType": {
+ "title": "Type de flux :",
+ "short": "Type"
+ },
+ "bandwidth": {
+ "title": "Bande passante :",
+ "short": "Bande passante"
+ },
+ "latency": {
+ "title": "Latence :",
+ "value": "{{seconds}} secondes",
+ "short": {
+ "title": "Latence",
+ "value": "{{seconds}} s"
+ }
+ },
+ "droppedFrames": {
+ "short": {
+ "value": "{{droppedFrames}} images",
+ "title": "Perdues"
+ },
+ "title": "Images perdues :"
+ },
+ "decodedFrames": "Images décodées :",
+ "droppedFrameRate": "Proportion d'images perdues :",
+ "totalFrames": "Total images :"
+ },
+ "toast": {
+ "error": {
+ "submitFrigatePlusFailed": "Échec de la soumission de l'image à Frigate+"
+ },
+ "success": {
+ "submittedFrigatePlus": "Image soumise avec succès à Frigate+"
+ }
+ }
+}
diff --git a/web/public/locales/fr/objects.json b/web/public/locales/fr/objects.json
new file mode 100644
index 000000000..d959a8e42
--- /dev/null
+++ b/web/public/locales/fr/objects.json
@@ -0,0 +1,120 @@
+{
+ "bicycle": "Vélo",
+ "car": "Voiture",
+ "person": "Personne",
+ "motorcycle": "Moto",
+ "airplane": "Avion",
+ "bus": "Bus",
+ "train": "Train",
+ "boat": "Bateau",
+ "traffic_light": "Feu de circulation",
+ "fire_hydrant": "Bouche d'incendie",
+ "street_sign": "Plaque de rue",
+ "parking_meter": "Parcmètre",
+ "bench": "Banc",
+ "bird": "Oiseau",
+ "cat": "chat",
+ "stop_sign": "Panneau de stop",
+ "dog": "Chien",
+ "horse": "Cheval",
+ "sheep": "Mouton",
+ "cow": "Vache",
+ "elephant": "Eléphant",
+ "bear": "Ours",
+ "zebra": "Zèbre",
+ "hat": "Chapeau",
+ "tie": "Cravate",
+ "suitcase": "Valise",
+ "frisbee": "Frisbee",
+ "skis": "Skis",
+ "snowboard": "Surf des neiges",
+ "sports_ball": "Ballon des sports",
+ "kite": "Cerf-volant",
+ "baseball_bat": "Batte de base-ball",
+ "umbrella": "Parapluie",
+ "giraffe": "Girafe",
+ "eye_glasses": "Lunettes",
+ "backpack": "Sac à dos",
+ "handbag": "Sac à main",
+ "shoe": "Chaussure",
+ "clock": "Horloge",
+ "bottle": "Bouteille",
+ "baseball_glove": "Gant de baseball",
+ "skateboard": "Skateboard",
+ "surfboard": "Planche de surf",
+ "tennis_racket": "Raquette de Tennis",
+ "plate": "Assiette",
+ "cup": "Tasse",
+ "banana": "Banane",
+ "apple": "Pomme",
+ "wine_glass": "Verre à vin",
+ "pizza": "Pizza",
+ "couch": "Canapé",
+ "potted_plant": "Plante en pot",
+ "mirror": "Miroir",
+ "window": "Fenêtre",
+ "desk": "Bureau",
+ "door": "Porte",
+ "remote": "Télécommande",
+ "keyboard": "Clavier",
+ "mouse": "Souris",
+ "tv": "TV",
+ "laptop": "Ordinateur portable",
+ "toaster": "Grille-pain",
+ "book": "Livre",
+ "teddy_bear": "Ours en peluche",
+ "blender": "Mixer",
+ "toothbrush": "Brosse à dents",
+ "hair_brush": "Brosse à cheveux",
+ "vehicle": "Véhicule",
+ "fox": "Renard",
+ "deer": "Cerf",
+ "animal": "Animal",
+ "goat": "Chèvre",
+ "rabbit": "Lapin",
+ "raccoon": "Raton laveur",
+ "waste_bin": "Poubelle",
+ "robot_lawnmower": "Robot tondeuse",
+ "on_demand": "Sur demande",
+ "face": "Visage",
+ "license_plate": "Plaque d'immatriculation",
+ "bbq_grill": "Barbecue",
+ "ups": "UPS",
+ "fedex": "FedEx",
+ "dhl": "DHL",
+ "package": "Colis",
+ "an_post": "An Post",
+ "gls": "GLS",
+ "dpd": "DPD",
+ "postnl": "PostNL",
+ "amazon": "Amazon",
+ "hot_dog": "Hot Dog",
+ "refrigerator": "Réfrigérateur",
+ "bark": "Aboiement",
+ "oven": "Four",
+ "scissors": "Paire de ciseaux",
+ "toilet": "Toilettes",
+ "carrot": "Carotte",
+ "bed": "Lit",
+ "cell_phone": "Téléphone portable",
+ "fork": "Fourchette",
+ "squirrel": "Écureuil",
+ "microwave": "Micro-ondes",
+ "hair_dryer": "Sèche cheveux",
+ "bowl": "Bol",
+ "spoon": "Cuillère",
+ "sandwich": "Sandwich",
+ "sink": "Lavabo",
+ "broccoli": "Brocoli",
+ "knife": "Couteau",
+ "nzpost": "NZPost",
+ "orange": "Orange",
+ "chair": "Chaise",
+ "donut": "Donut",
+ "usps": "USPS",
+ "cake": "Gâteau",
+ "dining_table": "Table à manger",
+ "vase": "Vase",
+ "purolator": "Purolator",
+ "postnord": "PostNord"
+}
diff --git a/web/public/locales/fr/views/configEditor.json b/web/public/locales/fr/views/configEditor.json
new file mode 100644
index 000000000..5f88fb94f
--- /dev/null
+++ b/web/public/locales/fr/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "configEditor": "Éditeur de configuration",
+ "documentTitle": "Éditeur de configuration - Frigate",
+ "copyConfig": "Copier la configuration",
+ "saveOnly": "Enregistrer seulement",
+ "saveAndRestart": "Enregistrer et redémarrer",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Configuration copiée dans le presse-papiers"
+ },
+ "error": {
+ "savingError": "Erreur lors de l'enregistrement de la configuration"
+ }
+ },
+ "confirm": "Quitter sans enregistrer ?"
+}
diff --git a/web/public/locales/fr/views/events.json b/web/public/locales/fr/views/events.json
new file mode 100644
index 000000000..d8d58332c
--- /dev/null
+++ b/web/public/locales/fr/views/events.json
@@ -0,0 +1,39 @@
+{
+ "detections": "Détections",
+ "motion": {
+ "label": "Mouvement",
+ "only": "Mouvement seulement"
+ },
+ "alerts": "Alertes",
+ "allCameras": "Toutes les caméras",
+ "empty": {
+ "alert": "Il n'y a aucune alerte à passer en revue",
+ "detection": "Il n'y a aucune détection à passer en revue",
+ "motion": "Aucune donnée de mouvement trouvée"
+ },
+ "timeline": "Chronologie",
+ "events": {
+ "label": "Événements",
+ "aria": "Sélectionner les événements",
+ "noFoundForTimePeriod": "Aucun événement trouvé pour cette plage de temps."
+ },
+ "documentTitle": "Revue d'événements -Frigate",
+ "recordings": {
+ "documentTitle": "Enregistrements - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "Dernières 24 heures"
+ },
+ "timeline.aria": "Sélectionner une chronologie",
+ "markAsReviewed": "Marqué comme passé en revue",
+ "newReviewItems": {
+ "button": "Nouveaux éléments à passer en revue",
+ "label": "Afficher les nouveaux éléments de la revue d'événements"
+ },
+ "camera": "Caméra",
+ "markTheseItemsAsReviewed": "Marquer ces éléments comme passés en revue",
+ "selected": "{{count}} sélectionné(s)",
+ "selected_other": "{{count}} sélectionné(s)",
+ "selected_one": "{{count}} sélectionné(s)",
+ "detected": "détecté"
+}
diff --git a/web/public/locales/fr/views/explore.json b/web/public/locales/fr/views/explore.json
new file mode 100644
index 000000000..b42cb5f38
--- /dev/null
+++ b/web/public/locales/fr/views/explore.json
@@ -0,0 +1,209 @@
+{
+ "generativeAI": "IA générative",
+ "documentTitle": "Explorer - Frigate",
+ "exploreIsUnavailable": {
+ "title": "L'exploration est indisponible",
+ "embeddingsReindexing": {
+ "estimatedTime": "Temps restant estimé :",
+ "finishingShortly": "Termine bientôt",
+ "context": "L'exploration peut être utilisée une fois la réindexation des représentations numériques des objets suivis terminée.",
+ "startingUp": "Démarrage…",
+ "step": {
+ "thumbnailsEmbedded": "Miniatures intégrées : ",
+ "descriptionsEmbedded": "Descriptions intégrées : ",
+ "trackedObjectsProcessed": "Objets suivis traités : "
+ }
+ },
+ "downloadingModels": {
+ "context": "Frigate télécharge les modèles de représentations numériques nécessaires pour prendre en charge la fonctionnalité de recherche sémantique. Cette opération peut prendre plusieurs minutes selon la vitesse de votre connexion réseau.",
+ "setup": {
+ "visionModelFeatureExtractor": "Extracteur de caractéristiques de modèle de vision",
+ "textTokenizer": "Tokeniseur de texte",
+ "visionModel": "Modèle de vision",
+ "textModel": "Modèle de texte"
+ },
+ "tips": {
+ "documentation": "Lire la documentation",
+ "context": "Une fois les modèles téléchargés, il est conseillé de réindexer vos objets suivis."
+ },
+ "error": "Une erreur est survenue. Vérifier les journaux Frigate."
+ }
+ },
+ "details": {
+ "timestamp": "Horodatage",
+ "item": {
+ "title": "Détails de l'élément de la revue d'événements",
+ "button": {
+ "share": "Partager cet élément de la revue d'événements",
+ "viewInExplore": "Afficher dans Explorer"
+ },
+ "toast": {
+ "success": {
+ "regenerate": "Une nouvelle description a été demandée à {{provider}}. Selon la vitesse de votre fournisseur, la régénération de la nouvelle description peut prendre un certain temps.",
+ "updatedSublabel": "Sous-libellé mis à jour avec succès.",
+ "updatedLPR": "Plaque d'immatriculation mise à jour avec succès."
+ },
+ "error": {
+ "regenerate": "Échec de l'appel de {{provider}} pour une nouvelle description : {{errorMessage}}",
+ "updatedSublabelFailed": "Échec de la mise à jour du sous-libellé : {{errorMessage}}",
+ "updatedLPRFailed": "Échec de la mise à jour de la plaque d'immatriculation : {{errorMessage}}"
+ }
+ },
+ "tips": {
+ "mismatch_one": "{{count}} objet indisponible a été détecté et intégré dans cet élément de la revue d'événements. Cet objet n'a pas été qualifié comme une alerte ou une détection, ou a déjà été nettoyé / supprimé.",
+ "mismatch_many": "{{count}} objets indisponibles ont été détectés et intégrés dans cet élément de la revue d'événements. Ces objets n'ont pas été qualifiés comme une alerte ou une détection, ou ont déjà été nettoyés / supprimés.",
+ "mismatch_other": "{{count}} objets indisponibles ont été détectés et intégrés dans cet élément de la revue d'événements. Ces objets n'ont pas été qualifiés comme une alerte ou une détection, ou ont déjà été nettoyés / supprimés.",
+ "hasMissingObjects": "Ajustez votre configuration si vous souhaitez que Frigate enregistre les objets suivis pour les libellés suivants : {{objects}}"
+ },
+ "desc": "Détails de l'élément de la revue d'événements"
+ },
+ "label": "Libellé",
+ "editSubLabel": {
+ "title": "Modifier le sous-libellé",
+ "desc": "Saisissez un nouveau sous-libellé pour {{label}}",
+ "descNoLabel": "Entrer un nouveau sous-libellé pour cet objet suivi"
+ },
+ "topScore": {
+ "label": "Meilleur score",
+ "info": "Le score le plus élevé est le score médian le plus haut pour l'objet suivi ; il peut donc différer du score affiché sur la miniature du résultat de recherche."
+ },
+ "objects": "Objets",
+ "button": {
+ "regenerate": {
+ "label": "Générer à nouveau la description de l'objet suivi",
+ "title": "Générer à nouveau"
+ },
+ "findSimilar": "Trouver des éléments similaires"
+ },
+ "description": {
+ "label": "Description",
+ "placeholder": "Description de l'objet suivi",
+ "aiTips": "Frigate ne demandera pas de description à votre fournisseur d'IA générative tant que le cycle de vie de l'objet suivi ne sera pas terminé."
+ },
+ "regenerateFromSnapshot": "Générer à nouveau à partir d'un instantané",
+ "regenerateFromThumbnails": "Générer à nouveau à partir des miniatures",
+ "editLPR": {
+ "title": "Modifier la plaque d'immatriculation",
+ "desc": "Saisissez une nouvelle valeur de plaque d'immatriculation pour {{label}}",
+ "descNoLabel": "Saisir une nouvelle valeur de plaque d'immatriculation pour cet objet suivi"
+ },
+ "recognizedLicensePlate": "Plaque d'immatriculation reconnue",
+ "estimatedSpeed": "Vitesse estimée",
+ "zones": "Zones",
+ "expandRegenerationMenu": "Développer le menu de régénération",
+ "camera": "Caméra",
+ "tips": {
+ "descriptionSaved": "Description enregistrée avec succès",
+ "saveDescriptionFailed": "Échec de la mise à jour de la description : {{errorMessage}}"
+ },
+ "snapshotScore": {
+ "label": "Score de l'instantané"
+ }
+ },
+ "type": {
+ "details": "détails",
+ "video": "vidéo",
+ "object_lifecycle": "cycle de vie de l'objet",
+ "snapshot": "instantané"
+ },
+ "objectLifecycle": {
+ "title": "Cycle de vie de l'objet",
+ "noImageFound": "Aucune image trouvée pour cet horodatage",
+ "createObjectMask": "Créer un masque d'objet",
+ "scrollViewTips": "Faites défiler pour voir les moments clés du cycle de vie de cet objet.",
+ "adjustAnnotationSettings": "Ajuster les paramètres d'annotation",
+ "autoTrackingTips": "Les positions des cadres englobants seront imprécises pour les caméras à suivi automatique.",
+ "lifecycleItemDesc": {
+ "visible": "{{label}} détecté",
+ "entered_zone": "{{label}} est entré dans {{zones}}",
+ "stationary": "{{label}} est devenu stationnaire",
+ "attribute": {
+ "other": "{{label}} reconnu comme {{attribute}}",
+ "faceOrLicense_plate": "{{attribute}} détecté pour {{label}}"
+ },
+ "gone": "{{label}} parti",
+ "heard": "{{label}} entendu",
+ "external": "{{label}} détecté",
+ "active": "{{label}} est devenu actif",
+ "header": {
+ "zones": "Zones",
+ "area": "Aire",
+ "ratio": "Ratio"
+ }
+ },
+ "annotationSettings": {
+ "title": "Paramètres d'annotation",
+ "showAllZones": {
+ "title": "Montrer toutes les zones",
+ "desc": "Afficher systématiquement les zones sur les images quand des objets y sont entrés"
+ },
+ "offset": {
+ "label": "Décalage de l'annotation",
+ "documentation": "Lire la documentation ",
+ "desc": "Ces données, issues du flux de détection de votre caméra, sont incrustées dans les images du flux d'enregistrement. Cependant, une synchronisation parfaite entre ces deux flux est rarement garantie. Il est donc possible que le cadre englobant et la séquence ne soient pas parfaitement alignés. Pour corriger ce décalage, vous pouvez utiliser le champ annotation_offset.",
+ "millisecondsToOffset": "Décalage des annotations de détection en millisecondes. Par défaut : 0",
+ "tips": "Astuce : Pour mieux comprendre, visualisez un clip où une personne se déplace de gauche à droite. Si le cadre englobant affiché sur la ligne de temps de l'événement se trouve constamment à gauche de la personne, cela signifie que vous devriez réduire la valeur. À l'inverse, si ce même cadre englobant apparaît systématiquement en avance sur la personne qui marche de gauche à droite, alors vous devrez l'augmenter.",
+ "toast": {
+ "success": "Le décalage d'annotation pour {{camera}} a été enregistré dans le fichier de configuration. Redémarrez Frigate pour appliquer vos modifications."
+ }
+ }
+ },
+ "carousel": {
+ "next": "Diapositive suivante",
+ "previous": "Diapositive précédente"
+ },
+ "trackedPoint": "Point de suivi",
+ "count": "{{first}} de {{second}}"
+ },
+ "trackedObjectDetails": "Détails de l'objet suivi",
+ "itemMenu": {
+ "downloadSnapshot": {
+ "label": "Télécharger l'instantané",
+ "aria": "Télécharger l'instantané"
+ },
+ "findSimilar": {
+ "label": "Trouver des éléments similaires",
+ "aria": "Trouver des objets suivis similaires"
+ },
+ "viewObjectLifecycle": {
+ "aria": "Afficher le cycle de vie de l'objet",
+ "label": "Visualiser le cycle de vie de l'objet"
+ },
+ "viewInHistory": {
+ "label": "Afficher dans l'historique",
+ "aria": "Afficher dans l'historique"
+ },
+ "downloadVideo": {
+ "label": "Télécharger la vidéo",
+ "aria": "Télécharger la vidéo"
+ },
+ "submitToPlus": {
+ "label": "Soumettre à Frigate+",
+ "aria": "Soumettre à Frigate+"
+ },
+ "deleteTrackedObject": {
+ "label": "Supprimer cet objet suivi"
+ }
+ },
+ "dialog": {
+ "confirmDelete": {
+ "title": "Confirmer la suppression",
+ "desc": "La suppression de cet objet suivi supprime l'instantané, les représentations numériques enregistrées et les entrées du cycle de vie de l'objet associé. Les images enregistrées de cet objet suivi dans la vue Historique NE seront PAS supprimées.mode : {{effectiveRetainMode}}, donc cet enregistrement à la demande ne conservera que les segments avec {{effectiveRetainModeName}}."
+ },
+ "audio": "Audio",
+ "autotracking": {
+ "enable": "Activer le suivi automatique",
+ "disable": "Désactiver le suivi automatique"
+ },
+ "streamStats": {
+ "enable": "Afficher les statistiques du flux",
+ "disable": "Masquer les statistiques du flux"
+ },
+ "editLayout": {
+ "label": "Modifier la mise en page",
+ "group": {
+ "label": "Modifier le groupe de caméras"
+ },
+ "exitEdit": "Quitter l'édition"
+ }
+}
diff --git a/web/public/locales/fr/views/recording.json b/web/public/locales/fr/views/recording.json
new file mode 100644
index 000000000..f04812f4c
--- /dev/null
+++ b/web/public/locales/fr/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "export": "Exporter",
+ "calendar": "Calendrier",
+ "filter": "Filtre",
+ "filters": "Filtres",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "Pas de période valide sélectionnée",
+ "endTimeMustAfterStartTime": "L'heure de fin doit être après l'heure de début"
+ }
+ }
+}
diff --git a/web/public/locales/fr/views/search.json b/web/public/locales/fr/views/search.json
new file mode 100644
index 000000000..b656ab889
--- /dev/null
+++ b/web/public/locales/fr/views/search.json
@@ -0,0 +1,74 @@
+{
+ "savedSearches": "Recherches enregistrées",
+ "search": "Rechercher",
+ "searchFor": "Chercher {{inputValue}}",
+ "button": {
+ "clear": "Effacer la recherche",
+ "filterInformation": "Filtrer les informations",
+ "filterActive": "Filtres actifs",
+ "save": "Enregistrer la recherche",
+ "delete": "Supprimer la recherche enregistrée"
+ },
+ "trackedObjectId": "ID d'objet suivi",
+ "filter": {
+ "label": {
+ "zones": "Zones",
+ "sub_labels": "Sous-libellés",
+ "search_type": "Type de recherche",
+ "time_range": "Plage de temps",
+ "labels": "Libellés",
+ "cameras": "Caméras",
+ "after": "Après",
+ "before": "Avant",
+ "min_speed": "Vitesse minimum",
+ "max_speed": "Vitesse maximum",
+ "min_score": "Score minimum",
+ "recognized_license_plate": "Plaques d'immatriculation reconnues",
+ "has_clip": "Contient un clip",
+ "has_snapshot": "Contient un instantané",
+ "max_score": "Score maximum"
+ },
+ "searchType": {
+ "thumbnail": "Miniature",
+ "description": "Description"
+ },
+ "toast": {
+ "error": {
+ "beforeDateBeLaterAfter": "La date de début « avant » doit être postérieure à la date « après ».",
+ "afterDatebeEarlierBefore": "La date « après » doit être antérieure à la date « avant ».",
+ "minScoreMustBeLessOrEqualMaxScore": "Le « min_score » doit être inférieur ou égal au « max_score ».",
+ "maxScoreMustBeGreaterOrEqualMinScore": "Le « max_score » doit être supérieur ou égal au « min_score ».",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "La « vitesse_min » doit être inférieure ou égale à la « vitesse_max ».",
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "La « vitesse maximale » doit être supérieure ou égale à la « vitesse minimale »."
+ }
+ },
+ "header": {
+ "currentFilterType": "Valeurs du filtre",
+ "activeFilters": "Filtres actifs",
+ "noFilters": "Filtres"
+ },
+ "tips": {
+ "title": "Comment utiliser les filtres de texte",
+ "desc": {
+ "text": "Les filtres vous aident à affiner vos résultats de recherche. Voici comment les utiliser dans le champ de saisie :",
+ "example": "Exemple: cameras:front_door label:person before:01012024 time_range:3:00PM-4:00PM ",
+ "step": "https://…). Il s'agit d'une limitation du navigateur. Accédez à Frigate en toute sécurité pour utiliser les notifications."
+ },
+ "globalSettings": {
+ "title": "Paramètres globaux",
+ "desc": "Suspendre temporairement les notifications pour des caméras spécifiques sur tous les appareils enregistrés."
+ },
+ "email": {
+ "title": "Email",
+ "desc": "Une adresse e-mail valide est requise et sera utilisée pour vous avertir en cas de problème avec le service push.",
+ "placeholder": "par ex. exemple@email.com"
+ },
+ "cameras": {
+ "title": "Caméras",
+ "noCameras": "Aucune caméra disponible",
+ "desc": "Sélectionnez les caméras pour lesquelles activer les notifications."
+ },
+ "deviceSpecific": "Paramètres spécifiques de l'appareil",
+ "suspended": "Notifications suspendues {{time}}",
+ "title": "Notifications",
+ "active": "Notifications actives",
+ "registerDevice": "Enregistrer cet appareil",
+ "unregisterDevice": "Désenregistrer cet appareil",
+ "sendTestNotification": "Envoyer une notification de test",
+ "unsavedChanges": "Modifications des notifications non enregistrés",
+ "unsavedRegistrations": "Enregistrements des notifications non enregistrés"
+ },
+ "frigatePlus": {
+ "apiKey": {
+ "notValidated": "La clé API Frigate+ n'est pas détectée ou non validée",
+ "title": "Clé API Frigate+",
+ "validated": "La clé API Frigate+ est détectée et validée",
+ "desc": "La clé API Frigate+ permet l'intégration avec le service Frigate+.",
+ "plusLink": "En savoir plus sur Frigate+"
+ },
+ "title": "Paramètres Frigate+",
+ "snapshotConfig": {
+ "documentation": "Lire la documentation",
+ "desc": "La soumission à Frigate+ nécessite que les instantanés et les instantanés clean_copy soient activés dans votre configuration.",
+ "title": "Configuration de l'instantané",
+ "table": {
+ "snapshots": "Instantanés",
+ "camera": "Caméra",
+ "cleanCopySnapshots": "clean_copy Instantanés"
+ },
+ "cleanCopyWarning": "Certaines caméras ont des instantanés activés, mais la copie propre est désactivée. Vous devez activer clean_copy dans votre configuration d'instantanés pour pouvoir envoyer les images de ces caméras à Frigate+."
+ },
+ "modelInfo": {
+ "baseModel": "Modèle de base",
+ "modelType": "Type de modèle",
+ "cameras": "Caméras",
+ "supportedDetectors": "Détecteurs pris en charge",
+ "loading": "Chargement des informations du modèle…",
+ "title": "Informations sur le modèle",
+ "trainDate": "Date d'entrainement",
+ "error": "Échec du chargement des informations du modèle",
+ "availableModels": "Modèles disponibles",
+ "dimensions": "Dimensions",
+ "loadingAvailableModels": "Chargement des modèles disponibles…",
+ "modelSelect": "Vous pouvez sélectionner ici vos modèles disponibles dans Frigate+. Notez que seuls les modèles compatibles avec votre configuration de détecteur actuelle peuvent être sélectionnés.",
+ "plusModelType": {
+ "baseModel": "Modèle de base",
+ "userModel": "Optimisé"
+ }
+ },
+ "toast": {
+ "success": "Les paramètres de Frigate+ ont été enregistrés. Redémarrez Frigate pour appliquer les modifications.",
+ "error": "Échec de l'enregistrement des modifications de configuration : {{errorMessage}}"
+ },
+ "restart_required": "Redémarrage requis (modèle Frigate+ changé)",
+ "unsavedChanges": "Modifications de paramètres de Frigate+ non enregistrés"
+ },
+ "classification": {
+ "title": "Paramètres de classification",
+ "semanticSearch": {
+ "title": "Recherche sémantique",
+ "reindexNow": {
+ "label": "Réindexer maintenant",
+ "confirmTitle": "Confirmer la réindexation",
+ "error": "Échec du démarrage de la réindexation : {{errorMessage}}",
+ "desc": "La réindexation génère à nouveau les plongements vectoriels pour tous les objets suivis. Ce processus s'exécute en arrière-plan et peut saturer votre processeur et prendre un certain temps, selon le nombre d'objets suivis.",
+ "confirmDesc": "Êtes-vous sûr de vouloir réindexer tous les plongements vectoriels d'objets suivis ? Ce processus s'exécutera en arrière-plan, mais il risque de saturer votre processeur et de prendre un certain temps. Vous pouvez suivre la progression sur la page Explorer.",
+ "success": "La réindexation a démarré avec succès.",
+ "alreadyInProgress": "La réindexation est déjà en cours.",
+ "confirmButton": "Réindexer"
+ },
+ "desc": "La recherche sémantique dans Frigate vous permet de trouver des objets suivis dans vos éléments de revue en utilisant soit l'image elle-même, soit une description textuelle définie par l'utilisateur, soit une description générée automatiquement.",
+ "modelSize": {
+ "small": {
+ "desc": "L'utilisation de petit utilise une version quantifiée du modèle qui utilise moins de mémoire et s'exécute plus rapidement sur le processeur avec une différence très négligeable dans la qualité d'intégration.",
+ "title": "petit"
+ },
+ "large": {
+ "desc": "L'utilisation de grand utilise le modèle Jina complet et s'exécutera automatiquement sur la carte graphique si applicable.",
+ "title": "grand"
+ },
+ "desc": "Taille du modèle utilisé pour les plongements vectoriels de recherche sémantique.",
+ "label": "Taille du modèle"
+ },
+ "readTheDocumentation": "Lire la documentation"
+ },
+ "faceRecognition": {
+ "readTheDocumentation": "Lire la documentation",
+ "modelSize": {
+ "large": {
+ "title": "grand",
+ "desc": "L'utilisation de grand utilise un modèle d'intégration de visage ArcFace et s'exécutera automatiquement sur la carte graphique le cas échéant."
+ },
+ "small": {
+ "desc": "L'utilisation de petit utilise un modèle d'intégration de visage FaceNet qui fonctionne efficacement sur la plupart des processeurs.",
+ "title": "petit"
+ },
+ "label": "Taille du modèle",
+ "desc": "La taille du modèle utilisé pour la reconnaissance faciale."
+ },
+ "desc": "La reconnaissance faciale permet d'attribuer un nom aux personnes. Une fois leur visage reconnu, Frigate attribuera le nom de la personne comme sous-étiquette. Ces informations sont incluses dans l'interface utilisateur, les filtres et les notifications.",
+ "title": "Reconnaissance faciale"
+ },
+ "licensePlateRecognition": {
+ "desc": "Frigate peut reconnaître les plaques d'immatriculation des véhicules et ajouter automatiquement les caractères détectés au champ recognized_license_plate, ou un nom connu comme sous-étiquette aux objets de type voiture. Un cas d'utilisation courant est la lecture des plaques d'immatriculation des voitures entrant dans une allée ou circulant dans la rue.",
+ "readTheDocumentation": "Lire la documentation",
+ "title": "Reconnaissance de plaque d'immatriculation"
+ },
+ "toast": {
+ "success": "Les paramètres de classification ont été enregistrés. Redémarrez Frigate pour appliquer vos modifications.",
+ "error": "Échec de l'enregistrement des modifications de configuration : {{errorMessage}}"
+ },
+ "birdClassification": {
+ "title": "Classification des oiseaux",
+ "desc": "La classification des oiseaux identifie les oiseaux connus à l'aide d'un modèle Tensorflow quantifié. Lorsqu'un oiseau connu est reconnu, son nom commun sera ajouté en tant que sous-étiquette. Cette information est incluse dans l'interface utilisateur, les filtres, ainsi que dans les notifications."
+ },
+ "restart_required": "Redémarrage requis (paramètres de classification changés)",
+ "unsavedChanges": "Modifications des paramètres de classification non enregistrées"
+ },
+ "camera": {
+ "title": "Paramètres de la caméra",
+ "review": {
+ "title": "Revue d'événements",
+ "detections": "Détections ",
+ "alerts": "Alertes ",
+ "desc": "Activer/désactiver temporairement les alertes et les détections pour cette caméra jusqu'au redémarrage de Frigate. Si cette option est désactivée, aucun nouvel élément ne sera généré dans la revue d'événements. "
+ },
+ "reviewClassification": {
+ "title": "Catégorisation de la revue d'évènements",
+ "objectDetectionsTips": "Tous les objets {{detectionsLabels}} non classés sur {{cameraName}} seront affichés comme des détections, quelle que soit la zone dans laquelle ils se trouvent.",
+ "zoneObjectDetectionsTips": {
+ "text": "Tous les objets {{detectionsLabels}} non classés dans {{zone}} sur {{cameraName}} seront affichés comme des détections.",
+ "regardlessOfZoneObjectDetectionsTips": "Tous les objets {{detectionsLabels}} non classés sur {{cameraName}} seront affichés comme des détections, quelle que soit la zone dans laquelle ils se trouvent.",
+ "notSelectDetections": "Tous les objets {{detectionsLabels}} détectés dans {{zone}} sur {{cameraName}} non classés comme des alertes seront affichés comme des détections, quelle que soit la zone dans laquelle ils se trouvent."
+ },
+ "selectDetectionsZones": "Sélectionner les zones pour les détections",
+ "toast": {
+ "success": "La configuration de la classification de la revue d'événements a été enregistrée. Redémarrez Frigate pour appliquer les modifications."
+ },
+ "readTheDocumentation": "Lire la documentation",
+ "objectAlertsTips": "Tous les objets {{alertsLabels}} sur {{cameraName}} seront affichés sous forme d'alertes.",
+ "limitDetections": "Limiter les détections à des zones spécifiques",
+ "zoneObjectAlertsTips": "Tous les objets {{alertsLabels}} détectés dans {{zone}} sur {{cameraName}} seront affichés sous forme d'alertes.",
+ "noDefinedZones": "Aucune zone n'est définie pour cette caméra.",
+ "selectAlertsZones": "Sélectionner les zones pour les alertes",
+ "desc": "Frigate classe les éléments de la revue d'événements en alertes et détections. Par défaut, toutes les détections de personnes et de voitures sont qualifiées d'alertes. Vous avez la possibilité d'affiner cette catégorisation en configurant des zones spécifiques pour ces éléments.",
+ "unsavedChanges": "Paramètres de classification de la revue d'événements pour {{camera}} non enregistrés"
+ },
+ "streams": {
+ "title": "Flux",
+ "desc": "Désactive temporairement une caméra jusqu'au redémarrage de Frigate. La désactivation complète d'une caméra interrompt le traitement des flux de cette caméra par Frigate. La détection, l'enregistrement et le débogage seront indisponibles.Cadres de mouvement
Des cadres rouges seront superposées sur les zones de l'image où un mouvement est actuellement détecté
" + }, + "regions": { + "title": "Régions", + "desc": "Afficher une boîte de la région d'intérêt envoyée au détecteur d'objet", + "tips": "Cadres de région
Des cadres verts lumineux seront superposés sur les zones d'intérêt de l'image qui sont envoyées au détecteur d'objets.
" + }, + "objectShapeFilterDrawing": { + "title": "Dessin de filtre de forme d'objet", + "area": "Zone", + "desc": "Dessinez un rectangle sur l'image pour afficher les détails de la zone et du rapport", + "score": "Score", + "tips": "Activez cette option pour dessiner un rectangle sur l'image de la caméra afin d'afficher sa surface et son ratio. Ces valeurs peuvent ensuite être utilisées pour définir les paramètres de filtre de forme d'objet dans votre configuration.", + "document": "Lire la documentation ", + "ratio": "Ratio" + }, + "noObjects": "Aucun objet", + "title": "Débogage", + "detectorDesc": "Frigate utilise vos détecteurs ({{detectors}}) pour détecter les objets dans le flux vidéo de votre caméra.", + "desc": "La vue de débogage affiche en temps réel les objets suivis et leurs statistiques. La liste des objets affiche un résumé différé des objets détectés." + }, + "users": { + "title": "Utilisateurs", + "management": { + "title": "Gestion des utilisateurs", + "desc": "Gérez les comptes utilisateurs de cette instance Frigate." + }, + "addUser": "Ajouter un utilisateur", + "updatePassword": "Mettre à jour le mot de passe", + "toast": { + "success": { + "roleUpdated": "Rôle mis à jour pour {{user}}", + "deleteUser": "L'utilisateur {{user}} a été supprimé avec succès", + "createUser": "L'utilisateur {{user}} a été créé avec succès", + "updatePassword": "Mot de passe mis à jour avec succès." + }, + "error": { + "setPasswordFailed": "Échec de l'enregistrement du mot de passe : {{errorMessage}}", + "createUserFailed": "Échec de la création de l'utilisateur : {{errorMessage}}", + "deleteUserFailed": "Échec de la suppression de l'utilisateur : {{errorMessage}}", + "roleUpdateFailed": "Échec de la mise à jour du rôle : {{errorMessage}}" + } + }, + "table": { + "username": "Nom d'utilisateur", + "actions": "Actions", + "noUsers": "Aucun utilisateur trouvé.", + "changeRole": "Changer le rôle d'utilisateur", + "password": "Mot de passe", + "deleteUser": "Supprimer un utilisateur", + "role": "Rôle" + }, + "dialog": { + "form": { + "user": { + "title": "Nom d'utilisateur", + "placeholder": "Entrez le nom d'utilisateur", + "desc": "Seules les lettres, les chiffres, les points et les traits de soulignement sont autorisés." + }, + "password": { + "strength": { + "weak": "Faible", + "title": "Sécurité du mot de passe : ", + "medium": "Moyen", + "strong": "Fort", + "veryStrong": "Très fort" + }, + "match": "Les mots de passe correspondent", + "notMatch": "Les mots de passe ne correspondent pas", + "placeholder": "Entrez le mot de passe", + "title": "Mot de passe", + "confirm": { + "title": "Confirmez le mot de passe", + "placeholder": "Confirmez le mot de passe" + } + }, + "newPassword": { + "title": "Nouveau mot de passe", + "placeholder": "Entrez le nouveau mot de passe", + "confirm": { + "placeholder": "Ré-entrez le nouveau mot de passe" + } + }, + "usernameIsRequired": "Le nom d'utilisateur est requis", + "passwordIsRequired": "Mot de passe requis" + }, + "deleteUser": { + "title": "Supprimer un utilisateur", + "desc": "Cette action est irréversible. Elle supprimera définitivement le compte utilisateur et toutes les données associées.", + "warn": "Êtes-vous sûr de vouloir supprimer {{username}} ?" + }, + "passwordSetting": { + "updatePassword": "Mettre à jour le mot de passe pour {{username}}", + "setPassword": "Définir le mot de passe", + "desc": "Créez un mot de passe fort pour sécuriser ce compte.", + "doNotMatch": "Les mots de passe ne correspondent pas", + "cannotBeEmpty": "Le mot de passe ne peut être vide" + }, + "changeRole": { + "title": "Changer le rôle de l'utilisateur", + "desc": "Mettre à jour les autorisations pour {{username}}", + "roleInfo": { + "intro": "Sélectionnez le rôle approprié pour cet utilisateur :", + "admin": "Administrateur", + "adminDesc": "Accès complet à l'ensemble des fonctionnalités.", + "viewer": "Observateur", + "viewerDesc": "Limité aux tableaux de bord Direct, Revue d'événements, Explorer et Exports." + }, + "select": "Sélectionnez un rôle" + }, + "createUser": { + "title": "Créer un nouvel utilisateur", + "desc": "Ajoutez un nouveau compte utilisateur et spécifiez un rôle pour accéder aux zones de l'interface utilisateur Frigate.", + "usernameOnlyInclude": "Le nom d'utilisateur ne peut inclure que des lettres, des chiffres, . ou _", + "confirmPassword": "Veuillez confirmer votre mot de passe" + } + } + }, + "enrichments": { + "title": "Paramètres des données augmentées", + "birdClassification": { + "title": "Identification des oiseaux", + "desc": "L'identification des oiseaux est réalisée à l'aide d'un modèle TensorFlow quantifié. Lorsqu'un oiseau est reconnu, son nom commun est automatiquement ajouté comme sous-libellé. Cette information est intégréesà l'interface utilisateur, aux filtres de recherche et aux notifications." + }, + "semanticSearch": { + "title": "Recherche sémantique", + "readTheDocumentation": "Lire la documentation", + "reindexNow": { + "label": "Réindexer maintenant", + "desc": "La réindexation va régénérer les représentations numériques pour tous les objets suivis. Ce processus s'exécute en arrière-plan et peut saturer votre processeur et prendre un temps considérable, en fonction du nombre d'objets suivis.", + "confirmTitle": "Confirmez la réindexation", + "confirmButton": "Réindexer", + "success": "La réindexation a démarré avec succès.", + "alreadyInProgress": "La réindexation est déjà en cours.", + "error": "Échec du démarrage de la réindexation : {{errorMessage}}", + "confirmDesc": "Êtes-vous sûr de vouloir réindexer tous les représentations numériques des objets suivis ? Ce processus s'exécutera en arrière-plan, mais il pourrait saturer votre processeur et prendre un temps considérable. Vous pouvez suivre la progression sur la page Explorer." + }, + "modelSize": { + "desc": "La taille du modèle utilisé pour les représentations numériques de recherche sémantique.", + "small": { + "title": "petit", + "desc": "Utiliser petit emploie une version quantifiée du modèle qui utilise moins de mémoire et s'exécute plus rapidement sur le processeur avec une différence négligeable dans la qualité des représentations numériques." + }, + "large": { + "title": "grand", + "desc": "Utiliser grand emploie le modèle Jina complet et s'exécutera automatiquement sur le GPU si disponible." + }, + "label": "Taille du modèle" + }, + "desc": "La recherche sémantique de Frigate vous permet de retrouver les objets suivis dans votre revue d'évènements en utilisant soit l'image elle-même, soit une description textuelle définie par l'utilisateur, soit une description générée automatiquement." + }, + "unsavedChanges": "Modifications non enregistrées des paramètres des données augmentées", + "faceRecognition": { + "title": "Reconnaissance faciale", + "readTheDocumentation": "Lire la documentation", + "modelSize": { + "label": "Taille du modèle", + "desc": "La taille du modèle utilisé pour la reconnaissance faciale.", + "small": { + "title": "petit", + "desc": "Utiliser petit emploie un modèle de représentation numérique faciale FaceNet qui s'exécute efficacement sur la plupart des processeurs." + }, + "large": { + "title": "grand", + "desc": "Utiliser grand emploie un modèle de représentation numérique faciale ArcFace et s'exécutera automatiquement sur le GPU si disponible." + } + }, + "desc": "La reconnaissance faciale permet à Frigate d'identifier les individus par leur nom. Dès qu'un visage est reconnu, Frigate associe ce nom comme sous-libellé à l'événement. Ces informations sont ensuite intégrées dans l'interface utilisateur, les options de filtrage et les notifications." + }, + "licensePlateRecognition": { + "title": "Reconnaissance des plaques d'immatriculation", + "readTheDocumentation": "Lire la documentation", + "desc": "Frigate identifie les plaques d'immatriculation des véhicules et peut automatiquement insérer les caractères détectés dans le champ recognized_license_plate. Il est également capable d'assigner un nom familier comme sous-libellé aux objets de type \"voiture\". Par exemple, cette fonction est souvent utilisée pour lire les plaques des véhicules empruntant une allée ou une rue." + }, + "toast": { + "error": "Échec de l'enregistrement des modifications de configuration : {{errorMessage}}", + "success": "Les paramètres de données augmentées ont été enregistrés. Redémarrez Frigate pour appliquer les modifications." + }, + "restart_required": "Redémarrage nécessaire (paramètres des données augmentées modifiés)" + } +} diff --git a/web/public/locales/fr/views/system.json b/web/public/locales/fr/views/system.json new file mode 100644 index 000000000..9b3d8a5dc --- /dev/null +++ b/web/public/locales/fr/views/system.json @@ -0,0 +1,180 @@ +{ + "documentTitle": { + "storage": "Statistiques de stockage - Frigate", + "cameras": "Statistiques des caméras - Frigate", + "general": "Statistiques générales - Frigate", + "enrichments": "Statistiques de données augmentées - Frigate", + "logs": { + "frigate": "Journaux de Frigate - Frigate", + "nginx": "Journaux Nginx - Frigate", + "go2rtc": "Journaux Go2RTC - Frigate" + } + }, + "title": "Système", + "metrics": "Métriques du système", + "logs": { + "download": { + "label": "Télécharger les journaux" + }, + "copy": { + "label": "Copier dans le presse-papiers", + "success": "Journaux copiés vers le presse-papiers", + "error": "Échec du copiage des journaux dans le presse-papiers" + }, + "type": { + "label": "Type", + "timestamp": "Horodatage", + "tag": "Balise", + "message": "Message" + }, + "tips": "Les logs sont diffusés en continu depuis le serveur", + "toast": { + "error": { + "fetchingLogsFailed": "Erreur lors de la récupération des logs : {{errorMessage}}", + "whileStreamingLogs": "Erreur lors de la diffusion des logs : {{errorMessage}}" + } + } + }, + "general": { + "title": "Général", + "detector": { + "title": "Détecteurs", + "inferenceSpeed": "Vitesse d'inférence du détecteur", + "cpuUsage": "Utilisation processeur du détecteur", + "memoryUsage": "Utilisation mémoire du détecteur", + "temperature": "Température du détecteur" + }, + "hardwareInfo": { + "title": "Info matériel", + "gpuUsage": "Utilisation carte graphique", + "gpuMemory": "Mémoire carte graphique", + "gpuEncoder": "Encodeur carte graphique", + "gpuDecoder": "Décodeur carte graphique", + "gpuInfo": { + "vainfoOutput": { + "title": "Sortie Vainfo", + "returnCode": "Code de retour : {{code}}", + "processOutput": "Tâche de sortie :", + "processError": "Erreur de tâche :" + }, + "nvidiaSMIOutput": { + "title": "Sortie Nvidia SMI", + "name": "Nom : {{name}}", + "cudaComputerCapability": "Capacité de calcul CUDA : {{cuda_compute}}", + "vbios": "Informations VBios : {{vbios}}", + "driver": "Pilote : {{driver}}" + }, + "copyInfo": { + "label": "Information de copie du GPU" + }, + "toast": { + "success": "Informations GPU copiées dans le presse-papier" + }, + "closeInfo": { + "label": "Information de fermeture du GPU" + } + }, + "npuUsage": "Utilisation NPU", + "npuMemory": "Mémoire NPU" + }, + "otherProcesses": { + "title": "Autres tâches", + "processCpuUsage": "Utilisation processeur des tâches", + "processMemoryUsage": "Utilisation mémoire des tâches" + } + }, + "storage": { + "title": "Stockage", + "recordings": { + "title": "Enregistrements", + "earliestRecording": "Enregistrement le plus ancien :", + "tips": "Cette valeur correspond au stockage total utilisé par les enregistrements dans la base de données Frigate. Frigate ne suit pas l'utilisation du stockage pour tous les fichiers sur votre disque." + }, + "cameraStorage": { + "title": "Stockage de la caméra", + "bandwidth": "Bande passante", + "unused": { + "title": "Inutilisé", + "tips": "Cette valeur ne représente peut-être pas précisément l'espace libre et utilisable par Frigate si vous avez d'autres fichiers stockés sur ce disque en plus des enregistrements Frigate. Frigate ne suit pas l'utilisation du stockage en dehors de ses propres enregistrements." + }, + "percentageOfTotalUsed": "Pourcentage du total", + "storageUsed": "Stockage", + "camera": "Caméra", + "unusedStorageInformation": "Information sur le stockage non utilisé" + }, + "overview": "Vue d'ensemble" + }, + "cameras": { + "title": "Caméras", + "info": { + "cameraProbeInfo": "{{camera}} Information récupérée depuis la caméra", + "fetching": "En cours de récupération des données de la caméra", + "stream": "Flux {{idx}}", + "fps": "Images par seconde :", + "unknown": "Inconnu", + "audio": "Audio :", + "tips": { + "title": "Information récupérée depuis la caméra" + }, + "streamDataFromFFPROBE": "Le flux de données est obtenu parffprobe.",
+ "resolution": "Résolution :",
+ "error": "Erreur : {{error}}",
+ "codec": "Codec :",
+ "video": "Vidéo :",
+ "aspectRatio": "ratio d'aspect"
+ },
+ "framesAndDetections": "Images / Détections",
+ "label": {
+ "camera": "caméra",
+ "detect": "Détecter",
+ "skipped": "ignoré",
+ "ffmpeg": "FFmpeg",
+ "capture": "capture",
+ "cameraFfmpeg": "{{camName}} FFmpeg",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} détections manquées par seconde",
+ "overallDetectionsPerSecond": "Moyenne de détections par seconde",
+ "overallFramesPerSecond": "Moyenne d'images par seconde",
+ "overallSkippedDetectionsPerSecond": "Moyenne de détections manquées par seconde",
+ "cameraCapture": "{{camName}} capture",
+ "cameraDetect": "{{camName}} détection",
+ "cameraFramesPerSecond": "{{camName}} images par seconde",
+ "cameraDetectionsPerSecond": "{{camName}} détections par seconde"
+ },
+ "overview": "Vue d'ensemble",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Données récupérées copiées dans le presse-papier."
+ },
+ "error": {
+ "unableToProbeCamera": "Impossible de récupérer des infos depuis la caméra : {{errorMessage}}"
+ }
+ }
+ },
+ "lastRefreshed": "Dernier rafraichissement : ",
+ "stats": {
+ "ffmpegHighCpuUsage": "{{camera}} a un taux élevé d'utilisation processeur par FFmpeg ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} a un taux élevé d'utilisation processeur ({{detectAvg}}%)",
+ "healthy": "Le système est sain",
+ "reindexingEmbeddings": "Réindexation des représentations numériques ({{processed}}% complété)",
+ "cameraIsOffline": "{{camera}} est hors ligne",
+ "detectIsSlow": "{{detect}} est lent ({{speed}} ms)",
+ "detectIsVerySlow": "{{detect}} est très lent ({{speed}} ms)"
+ },
+ "enrichments": {
+ "title": "Données augmentées",
+ "infPerSecond": "Inférences par seconde",
+ "embeddings": {
+ "face_embedding_speed": "Vitesse de capture des données complémentaires de visage",
+ "text_embedding_speed": "Vitesse de capture des données complémentaire de texte",
+ "image_embedding_speed": "Vitesse de capture des données complémentaires à l'image",
+ "plate_recognition_speed": "Vitesse de reconnaissance des plaques d'immatriculation",
+ "face_recognition_speed": "Vitesse de reconnaissance faciale",
+ "plate_recognition": "Reconnaissance de plaques d'immatriculation",
+ "image_embedding": "Représentations numériques d'image",
+ "yolov9_plate_detection": "Détection de plaques d'immatriculation YOLOv9",
+ "face_recognition": "Reconnaissance faciale",
+ "text_embedding": "Représentation numérique de texte",
+ "yolov9_plate_detection_speed": "Vitesse de détection de plaques d'immatriculation YOLOv9"
+ }
+ }
+}
diff --git a/web/public/locales/he/audio.json b/web/public/locales/he/audio.json
new file mode 100644
index 000000000..5fe4699a5
--- /dev/null
+++ b/web/public/locales/he/audio.json
@@ -0,0 +1,429 @@
+{
+ "speech": "דיבור",
+ "babbling": "ממלמל",
+ "yell": "לצעוק",
+ "bellow": "מתחת",
+ "whoop": "יבבה",
+ "whispering": "לוחש",
+ "crying": "בוכה",
+ "sigh": "אנחה",
+ "singing": "שר",
+ "choir": "מקהלה",
+ "yodeling": "יודלינג",
+ "chant": "לשיר",
+ "mantra": "מנטרה",
+ "child_singing": "ילד שר",
+ "synthetic_singing": "שירה סינתטית",
+ "rapping": "ראפ",
+ "humming": "זמזום",
+ "groan": "אנקה",
+ "grunt": "לנחור",
+ "whistling": "שריקה.",
+ "breathing": "נשימה",
+ "wheeze": "גניחה",
+ "snoring": "נחירה",
+ "gasp": "להתנשף",
+ "pant": "להתנשם",
+ "snort": "שאיפה",
+ "cough": "שיעול",
+ "throat_clearing": "גרגור גרון",
+ "sneeze": "עיטוש",
+ "sniff": "לרחרח",
+ "run": "רץ",
+ "snicker": "לצחקק",
+ "laughter": "צחוק",
+ "organ": "אורגן",
+ "shuffle": "ערבוב",
+ "footsteps": "צעדים",
+ "chewing": "לְעִיסָה",
+ "biting": "נשיכה",
+ "gargling": "גרגור",
+ "stomach_rumble": "קרקור בטן",
+ "burping": "גיהוק",
+ "hiccup": "שיהוק",
+ "fart": "פלוץ",
+ "hands": "ידיים",
+ "finger_snapping": "לחיצה באצבעות",
+ "clapping": "מחיאת כף",
+ "dog": "כלב",
+ "bark": "נביחה",
+ "cat": "חתול",
+ "horse": "סוס",
+ "sheep": "כבשה",
+ "goat": "עז",
+ "pigeon": "יונה",
+ "bird": "ציפור",
+ "coo": "קו",
+ "crow": "עורב",
+ "caw": "קאו",
+ "owl": "ינשוף",
+ "hoot": "צפירה.",
+ "flapping_wings": "כנפיים מתנפנפות",
+ "dogs": "כלבים",
+ "rats": "חולדות",
+ "mouse": "עכבר",
+ "patter": "תבנית",
+ "insect": "חרק",
+ "cricket": "קריקט",
+ "mosquito": "יתוש",
+ "fly": "זבוב",
+ "buzz": "זמזם.",
+ "frog": "צפרדע",
+ "croak": "קרקור.",
+ "snake": "נחש",
+ "rattle": "טרטור",
+ "whale_vocalization": "קולות לוויתן",
+ "music": "מוזיקה",
+ "musical_instrument": "כלי נגינה",
+ "plucked_string_instrument": "כלי מיתר פריטה",
+ "guitar": "גיטרה",
+ "electric_guitar": "גיטרה חשמלית",
+ "bass_guitar": "גיטרה בס",
+ "acoustic_guitar": "גיטרה אקוסטית",
+ "steel_guitar": "גיטרה פלדה",
+ "tapping": "הקשה.",
+ "strum": "פריטה",
+ "banjo": "בנג'ו",
+ "sitar": "סיטאר",
+ "mandolin": "מנדולינה",
+ "zither": "צִיתָר",
+ "ukulele": "יוקליילי",
+ "keyboard": "לוח מקשים",
+ "piano": "פסנתר",
+ "electric_piano": "פסנתר חשמלי",
+ "electronic_organ": "אורגן חשמלי",
+ "hammond_organ": "עוגב המונד",
+ "synthesizer": "סינתיסייזר",
+ "sampler": "דגם",
+ "harpsichord": "צֶ'מבָּלוֹ",
+ "percussion": "הַקָשָׁה",
+ "boat": "סירה",
+ "car": "מכונית",
+ "motorcycle": "אופנוע",
+ "bus": "אוטובוס",
+ "bicycle": "אופניים",
+ "train": "למד פנים",
+ "skateboard": "סקייטבורד",
+ "camera": "מצלמה",
+ "howl": "יללה",
+ "bow_wow": "באו וואו",
+ "growling": "נהמה",
+ "whimper_dog": "יבבת כלבים",
+ "purr": "לגרגר",
+ "meow": "מיאו",
+ "hiss": "לחישה",
+ "caterwaul": "קטרוואל",
+ "livestock": "בעלי חיים",
+ "clip_clop": "קליפ קלופ",
+ "neigh": "צהלה",
+ "cattle": "בקר",
+ "door": "דלת",
+ "heartbeat": "דופק",
+ "heart_murmur": "אוושת לב",
+ "applause": "תשואות",
+ "chatter": "פטפוטים",
+ "crowd": "קהל",
+ "children_playing": "ילדים משחקים",
+ "animal": "חיה",
+ "pets": "חיות מחמד",
+ "cheering": "תשואות",
+ "yip": "ייפ",
+ "moo": "מוו",
+ "cowbell": "פעמון פרה",
+ "pig": "חזיר",
+ "oink": "אוינק",
+ "bleat": "פעייה",
+ "fowl": "עוף.",
+ "chicken": "עוף",
+ "cluck": "קרקור",
+ "cock_a_doodle_doo": "קוק-א-דודל-דו",
+ "turkey": "הודו",
+ "gobble": "זלילה",
+ "duck": "ברווז",
+ "quack": "קוואק",
+ "goose": "אווז",
+ "honk": "צפירה",
+ "wild_animals": "חיית פרא",
+ "roaring_cats": "חתולים שואגים",
+ "roar": "שאגה",
+ "chirp": "ציוץ",
+ "squawk": "צווחה",
+ "drum_kit": "מערכת תופים",
+ "drum_machine": "מכונת תופים",
+ "drum": "תופים",
+ "snare_drum": "תוף סנר",
+ "rimshot": "רימשוט",
+ "drum_roll": "תוף רול",
+ "bass_drum": "תופים בס",
+ "timpani": "טימפאני",
+ "tabla": "טבלה",
+ "cymbal": "מצילה",
+ "hi_hat": "היי-האט",
+ "wood_block": "בול עץ",
+ "tambourine": "טמבורין",
+ "maraca": "מרקה",
+ "gong": "גונג",
+ "tubular_bells": "פעמונים צינוריים",
+ "mallet_percussion": "כלי הקשה מסוג פטיש",
+ "marimba": "מרימבה",
+ "glockenspiel": "גלוקנשפיל",
+ "vibraphone": "ויברפון",
+ "steelpan": "פלדה-פאן",
+ "orchestra": "תזמורת",
+ "brass_instrument": "כלי נשיפה ממתכת",
+ "french_horn": "צופר צרפתי",
+ "trumpet": "חצוצרה",
+ "trombone": "טרומבון",
+ "bowed_string_instrument": "כלי קשת",
+ "string_section": "מקטע מחרוזות",
+ "violin": "כינור",
+ "pizzicato": "פיציקטו",
+ "cello": "צ'לו",
+ "double_bass": "בס כפול",
+ "wind_instrument": "כלי נשיפה",
+ "flute": "חליל",
+ "saxophone": "סקסופון",
+ "clarinet": "קלרינט",
+ "harp": "נבל",
+ "bell": "פעמון",
+ "church_bell": "פעמון כנסיה",
+ "jingle_bell": "ג'ינגל בל",
+ "bicycle_bell": "פעמון אופניים",
+ "chime": "צלצול",
+ "wind_chime": "פעמון רוח",
+ "harmonica": "הרמוניקה",
+ "accordion": "אקורדיון",
+ "bagpipes": "חלילים",
+ "didgeridoo": "דיג'רידו",
+ "theremin": "תרמין",
+ "singing_bowl": "קערת שירה",
+ "scratching": "גירוד",
+ "pop_music": "מוזיקת פופ",
+ "hip_hop_music": "מוזיקת היפ הופ",
+ "beatboxing": "ביטבוקסינג",
+ "rock_music": "מוזיקת רוק",
+ "heavy_metal": "מיטל כבד",
+ "punk_rock": "מוזיקת פאנק",
+ "grunge": "גראנג'",
+ "progressive_rock": "רוק פרוגרסיב",
+ "rock_and_roll": "רוקנרול",
+ "psychedelic_rock": "רוק פסיכדלי",
+ "rhythm_and_blues": "רית'ם אנד בלוז",
+ "soul_music": "מוזיקת סול",
+ "reggae": "רגיי",
+ "country": "קאונטרי",
+ "swing_music": "מוזיקת סווינג",
+ "bluegrass": "בלוגראס",
+ "funk": "פאנק",
+ "folk_music": "מוזיקת פולק",
+ "middle_eastern_music": "מוזיקה ים תיכונית",
+ "opera": "אופרה",
+ "jazz": "ג'אז",
+ "disco": "דיסקו",
+ "classical_music": "מוזיקה קלאסית",
+ "electronic_music": "מוזיקה אלקטרונית",
+ "house_music": "מוזיקת האוס",
+ "techno": "טכנו",
+ "dubstep": "דאבסטפ",
+ "drum_and_bass": "דראם אנד בס",
+ "electronica": "אלקטרוניקה",
+ "electronic_dance_music": "מוזיקת ריקוד אלקטרונית",
+ "ambient_music": "מוזיקת אמביינט",
+ "flamenco": "פלמנקו",
+ "trance_music": "מוזיקת טראנס",
+ "music_of_latin_america": "מוזיקה לטינית",
+ "salsa_music": "מוזיקת סלסה",
+ "blues": "בלוז",
+ "music_for_children": "מוזיקת ילדים",
+ "new-age_music": "מוזיקת ניו אייג'",
+ "vocal_music": "מוזיקה ווקאלית",
+ "a_capella": "קאפלה",
+ "music_of_africa": "מוזיקה אפריקאית",
+ "afrobeat": "אפרוביט",
+ "christian_music": "מוזיקה נוצרית",
+ "gospel_music": "מוזיקת גוספל",
+ "music_of_asia": "מוזיקה אסייתית",
+ "carnatic_music": "מוזיקה קרנטית",
+ "music_of_bollywood": "מוזיקה בוליווד",
+ "ska": "סקא",
+ "traditional_music": "מוזיקה מסורתית",
+ "independent_music": "מחיקת המשתמש נכשלה: {{errorMessage}}",
+ "song": "שיר",
+ "background_music": "מוזיקת רקע",
+ "theme_music": "מוזיקת נושא",
+ "jingle": "ג'ינגל",
+ "soundtrack_music": "פסקול מוזיקה",
+ "lullaby": "שיר ערש",
+ "video_game_music": "מוזיקת משחקי וידיאו",
+ "christmas_music": "מוזיקת קריסמיס",
+ "dance_music": "מוזיקת ריקודים",
+ "wedding_music": "מוזיקת חתונות",
+ "happy_music": "מוזיקה שמחה",
+ "sad_music": "מוזיקה עצובה",
+ "tender_music": "מוזיקה עדינה",
+ "exciting_music": "מוזיקה מרגשת",
+ "angry_music": "מוזיקה כועסת",
+ "scary_music": "מוזיקה מפחידה",
+ "wind": "רוח",
+ "rustling_leaves": "רשרוש עלים",
+ "wind_noise": "רעש רוח",
+ "thunderstorm": "סופת רעמים",
+ "thunder": "רעם",
+ "water": "מים",
+ "rain": "גשם",
+ "rain_on_surface": "גשם על פני השטח",
+ "stream": "שידור",
+ "vehicle": "רכב",
+ "waterfall": "מפל",
+ "ocean": "ים",
+ "waves": "גלים",
+ "steam": "קיטור",
+ "gurgling": "גרגור",
+ "fire": "אש",
+ "crackle": "פיצוח",
+ "sailboat": "מפרשית",
+ "rowboat": "סירת משוטים",
+ "motorboat": "סירת מנוע",
+ "ship": "ספינה",
+ "motor_vehicle": "רכב ממונע",
+ "toot": "תקיעה",
+ "car_alarm": "אזעקת רכב",
+ "power_windows": "חלונות חשמליים",
+ "skidding": "החלקה",
+ "tire_squeal": "חריקת צמיגים",
+ "car_passing_by": "מכונית חולפת",
+ "race_car": "מכונית מרוץ",
+ "truck": "משאית",
+ "air_brake": "בלם אוויר",
+ "air_horn": "צופר אוויר",
+ "reversing_beeps": "צליל רוורס",
+ "ice_cream_truck": "אוטו גלידה",
+ "emergency_vehicle": "רכב חירום",
+ "police_car": "רכב משטרה",
+ "ambulance": "אמבולנס",
+ "fire_engine": "כבאית",
+ "traffic_noise": "רעש תנועה",
+ "rail_transport": "רכבת נוסעים",
+ "train_whistle": "שריקת רכבת",
+ "train_horn": "צופר רכבת",
+ "railroad_car": "קרון רכבת",
+ "train_wheels_squealing": "חריקת גלגלי הרכבת",
+ "subway": "רכבת תחתית",
+ "aircraft": "כלי טיס",
+ "aircraft_engine": "מנוע כלי טיס",
+ "jet_engine": "מנוע סילון",
+ "propeller": "פרופלור",
+ "helicopter": "מסוק",
+ "fixed-wing_aircraft": "מטוסים בעלי כנף קבועה",
+ "light_engine": "מנוע קל",
+ "engine": "מנוע",
+ "dental_drill's_drill": "מקדחת שיניים",
+ "lawn_mower": "מכסחת דשא",
+ "chainsaw": "מסור שרשרת",
+ "medium_engine": "מנוע בינוני",
+ "heavy_engine": "מנוע כבד",
+ "engine_knocking": "דפיקות מנוע",
+ "engine_starting": "מנוע מוצת",
+ "idling": "התבטלות",
+ "sink": "כיור",
+ "blender": "מערבל",
+ "accelerating": "מאיץ",
+ "doorbell": "פעמון דלת",
+ "ding-dong": "דינג דונג",
+ "sliding_door": "דלתות הזזה",
+ "knock": "דפיקה בדלת",
+ "tap": "הקשה",
+ "squeak": "חריקה",
+ "cupboard_open_or_close": "פתיחה או סגירה של ארון",
+ "cutlery": "סכו\"ם",
+ "chopping": "קצוץ",
+ "frying": "טיגון",
+ "microwave_oven": "מיקרוגל",
+ "water_tap": "ברז מים",
+ "bathtub": "אמבטיה",
+ "dishes": "כלים.",
+ "scissors": "מספריים",
+ "toothbrush": "מברשת שיניים",
+ "toilet_flush": "הורדת מים לאסלה",
+ "electric_toothbrush": "מברשת שיניים חשמלית",
+ "vacuum_cleaner": "שואב אבק",
+ "zipper": "רוכסן",
+ "coin": "מטבע",
+ "shuffling_cards": "ערבוב קלפים",
+ "typing": "הקלדה",
+ "typewriter": "מכונת כתיבה",
+ "computer_keyboard": "מקלדת מחשב",
+ "writing": "כתיבה",
+ "telephone_bell_ringing": "צלצול טלפון",
+ "ringtone": "צליל חיוג.",
+ "clock": "שעון",
+ "telephone_dialing": "טלפון מחייג",
+ "dial_tone": "צליל חיוג",
+ "busy_signal": "צליל תפוס",
+ "alarm_clock": "שעון מעורר",
+ "siren": "סירנה",
+ "civil_defense_siren": "סירנה של ההגנה האזרחית",
+ "buzzer": "זמזם",
+ "smoke_detector": "גלאי עשן",
+ "fire_alarm": "אזעקת אש",
+ "foghorn": "צופר ערפל",
+ "whistle": "שריקה",
+ "steam_whistle": "שריקת קיטור",
+ "mechanisms": "מכניקה",
+ "ratchet": "מַחגֵר",
+ "tick": "טיק",
+ "tick-tock": "טיק טוק",
+ "gears": "הילוכים",
+ "pulleys": "גלגלות",
+ "sewing_machine": "מְכוֹנַת תְפִירָה",
+ "mechanical_fan": "מאוורר מכני",
+ "air_conditioning": "מיזוג אוויר",
+ "cash_register": "קוּפָּה רוֹשֶׁמֶת",
+ "printer": "מדפסת",
+ "single-lens_reflex_camera": "מצלמת רפלקס עם עדשה יחידה",
+ "tools": "כלים",
+ "hammer": "פטיש",
+ "jackhammer": "פטיש אוויר",
+ "sawing": "מסור",
+ "filing": "הגשה",
+ "sanding": "שיוף",
+ "power_tool": "כלי חשמלי",
+ "drill": "מקדחה",
+ "explosion": "התפוצצות",
+ "gunshot": "יריה",
+ "machine_gun": "מכונת יריה",
+ "fusillade": "פוסילה",
+ "artillery_fire": "אש ארטילרית",
+ "cap_gun": "Cap Gun",
+ "fireworks": "זיקוקים",
+ "firecracker": "חזיז",
+ "burst": "הִתפָּרְצוּת",
+ "eruption": "התפרצות",
+ "boom": "בום",
+ "wood": "עץ",
+ "chop": "לקצוץ",
+ "splinter": "קיסם",
+ "crack": "סדק",
+ "glass": "זכוכית",
+ "chink": "סדוק",
+ "shatter": "ניפוץ",
+ "silence": "השתקה",
+ "sound_effect": "אפקט קול",
+ "environmental_noise": "רעש סביבתי",
+ "static": "סטטי",
+ "white_noise": "רעש לבן",
+ "pink_noise": "רעש ורוד",
+ "radio": "רדיו",
+ "field_recording": "רישום שדה",
+ "scream": "צרחה",
+ "drawer_open_or_close": "מגירה פתוחה או סגורה",
+ "alarm": "אזעקה",
+ "television": "טלוויזיה",
+ "electric_shaver": "מכונת גילוח חשמלית",
+ "keys_jangling": "צלצול מפתחות",
+ "hair_dryer": "מייבש שיער",
+ "slam": "טריקה",
+ "telephone": "טלפון",
+ "tuning_fork": "מזלג כוונון",
+ "raindrop": "טיפות גשם"
+}
diff --git a/web/public/locales/he/common.json b/web/public/locales/he/common.json
new file mode 100644
index 000000000..e6c1d632f
--- /dev/null
+++ b/web/public/locales/he/common.json
@@ -0,0 +1,265 @@
+{
+ "time": {
+ "justNow": "כעת",
+ "untilForRestart": "עד לאתחול של Frigate.",
+ "untilRestart": "עד לאתחול",
+ "ago": "לפני {{timeAgo}}",
+ "today": "היום",
+ "untilForTime": "עד:{{time}}",
+ "last30": "30 ימים אחרונים",
+ "last14": "14 ימים אחרונים",
+ "year_one": "{{time}} שנה",
+ "year_two": "{{time}} שנים",
+ "year_other": "{{time}} שנים",
+ "last7": "7 ימים אחרונים",
+ "lastMonth": "חודש שעבר",
+ "10minutes": "10 דקות",
+ "yesterday": "אתמול",
+ "thisWeek": "השבוע",
+ "lastWeek": "שבוע שעבר",
+ "1hour": "שעה",
+ "12hours": "12 שעות",
+ "24hours": "24 שעות",
+ "pm": "pm",
+ "am": "am",
+ "yr": "{{time}}שנה",
+ "mo": "{{time}}חודש",
+ "d": "{{time}}יום",
+ "month_one": "{{time}} חודש",
+ "month_two": "{{time}} חודשים",
+ "month_other": "{{time}} חודשים",
+ "h": "{{time}}שעה",
+ "day_one": "{{time}} יום",
+ "day_two": "{{time}} ימים",
+ "day_other": "{{time}} ימים",
+ "hour_one": "{{time}} שעה",
+ "hour_two": "{{time}} שעות",
+ "hour_other": "{{time}} שעות",
+ "m": "{{time}}דקות",
+ "minute_one": "{{time}} דקה",
+ "minute_two": "{{time}} דקות",
+ "minute_other": "{{time}} דקות",
+ "s": "{{time}}שניה",
+ "formattedTimestamp": {
+ "12hour": "MMM d, h:mm:ss aaa",
+ "24hour": "MMM d, HH:mm:ss"
+ },
+ "formattedTimestamp2": {
+ "12hour": "MM/dd h:mm:ssa",
+ "24hour": "d MMM HH:mm:ss"
+ },
+ "formattedTimestampHourMinute": {
+ "12hour": "h:mm aaa",
+ "24hour": "HH:mm"
+ },
+ "second_one": "{{time}} שניה",
+ "second_two": "{{time}} שניות",
+ "second_other": "{{time}} שניות",
+ "formattedTimestampMonthDayHourMinute": {
+ "12hour": "MMM d, h:mm aaa",
+ "24hour": "MMM d, HH:mm"
+ },
+ "formattedTimestampMonthDayYearHourMinute": {
+ "12hour": "MMM d yyyy, h:mm aaa",
+ "24hour": "MMM d yyyy, HH:mm"
+ },
+ "formattedTimestampMonthDay": "MMM d",
+ "formattedTimestampFilename": {
+ "12hour": "MM-dd-yy-h-mm-ss-a",
+ "24hour": "MM-dd-yy-HH-mm-ss"
+ },
+ "formattedTimestampHourMinuteSecond": {
+ "24hour": "HH:mm:ss",
+ "12hour": "h:mm:ss aaa"
+ },
+ "5minutes": "5 דקות",
+ "formattedTimestampMonthDayYear": {
+ "24hour": "MMM d, yyyy",
+ "12hour": "MMM d, yyyy"
+ },
+ "30minutes": "30 דקות",
+ "thisMonth": "החודש"
+ },
+ "unit": {
+ "speed": {
+ "kph": "קמ\"ש",
+ "mph": "מייל לשעה"
+ },
+ "length": {
+ "feet": "רגל",
+ "meters": "מטרים"
+ }
+ },
+ "label": {
+ "back": "אחורה"
+ },
+ "button": {
+ "apply": "החל",
+ "reset": "איפוס",
+ "done": "בוצע",
+ "enabled": "מאופשר",
+ "enable": "אפשר",
+ "disabled": "מבוטל",
+ "disable": "בטל",
+ "save": "שמירה",
+ "saving": "שומר…",
+ "back": "חזרה",
+ "close": "סגירה",
+ "cancel": "ביטול",
+ "copy": "העתקה",
+ "twoWayTalk": "דיבור דו כיווני",
+ "exitFullscreen": "יציאה ממסך מלא",
+ "pictureInPicture": "תמונה בתוך תמונה",
+ "cameraAudio": "קול ממצלמה",
+ "off": "כבוי",
+ "edit": "עריכה",
+ "copyCoordinates": "העתקת קואורדינטות",
+ "delete": "מחיקה",
+ "yes": "כן",
+ "no": "לא",
+ "suspended": "מושהה",
+ "unsuspended": "ביטול השהייה",
+ "play": "ניגון",
+ "unselect": "בטל בחירה",
+ "export": "ייצוא",
+ "deleteNow": "מחיקה כעת",
+ "fullscreen": "מסך מלא",
+ "history": "היסטוריה",
+ "on": "פעיל",
+ "download": "הורדה",
+ "info": "מידע",
+ "next": "הבא"
+ },
+ "menu": {
+ "system": "מערכת",
+ "systemMetrics": "מדדי מערכת",
+ "configuration": "תצורת מערכת",
+ "systemLogs": "לוגים מערכת",
+ "settings": "הגדרות",
+ "configurationEditor": "עריכת תצורה",
+ "languages": "שפות",
+ "language": {
+ "en": "English (English)",
+ "es": "ספרדית",
+ "fr": "צרפתית",
+ "ar": "ערבית",
+ "pt": "פורטוגזית",
+ "it": "איטלקית",
+ "nl": "הולנדית",
+ "sv": "שוודית",
+ "cs": "צ'כית",
+ "nb": "נורווגית",
+ "ko": "קוריאנית",
+ "vi": "ויטנאמית",
+ "fa": "פרסית",
+ "pl": "פולנית",
+ "uk": "אוקראינית",
+ "he": "עברית",
+ "el": "יוונית",
+ "ro": "רומנית",
+ "hu": "הונגרית",
+ "fi": "פינית",
+ "da": "דנית",
+ "withSystem": {
+ "label": "השתמש בהגדרות המערכת עבור השפה"
+ },
+ "sk": "סלובקית",
+ "th": "תאילנדית",
+ "zhCN": "סינית פשוטה",
+ "tr": "טורקית",
+ "hi": "הודית",
+ "ru": "רוסית",
+ "ja": "יפנית",
+ "de": "גרמנית",
+ "yue": "קנטונזית",
+ "ca": "קטלה (קטלאנית)"
+ },
+ "appearance": "מראה.",
+ "darkMode": {
+ "label": "מצב כהה",
+ "light": "בהיר",
+ "dark": "כהה",
+ "withSystem": {
+ "label": "השתמש בהגדרות המערכת עבור מצב בהיר או כהה"
+ }
+ },
+ "withSystem": "מערכת",
+ "theme": {
+ "label": "ערכת נושא",
+ "blue": "כחול",
+ "green": "ירוק",
+ "nord": "נורד",
+ "red": "אדום",
+ "highcontrast": "ניגודיות גבוהה",
+ "default": "ברירת מחדל"
+ },
+ "review": "סקירה",
+ "explore": "עיון",
+ "help": "עזרה",
+ "documentation": {
+ "title": "תיעוד",
+ "label": "תיעוד Frigate"
+ },
+ "restart": "הפעלה מחדש",
+ "live": {
+ "title": "שידור חי",
+ "cameras": {
+ "title": "מצלמות",
+ "count_one": "{{count}} מצלמה",
+ "count_two": "{{count}} מצלמות",
+ "count_other": "{{count}} מצלמות"
+ },
+ "allCameras": "כל המצלמות"
+ },
+ "export": "ייצוא",
+ "uiPlayground": "ממשק משתמש",
+ "faceLibrary": "ספריית זיהוי פנים",
+ "user": {
+ "account": "חשבון",
+ "anonymous": "אנונימי",
+ "logout": "ניתוק",
+ "current": "משתמש מחובר: {{user}}",
+ "setPassword": "קביעת סיסמה",
+ "title": "משתמש"
+ }
+ },
+ "toast": {
+ "copyUrlToClipboard": "כתובת האתר המועתקת.",
+ "save": {
+ "title": "שמירה",
+ "error": {
+ "noMessage": "שמירת שינויי התצורה נכשלה",
+ "title": "נכשל בניסיון לשמור את ההגדרות: {{errorMessage}}"
+ }
+ }
+ },
+ "role": {
+ "title": "הרשאה",
+ "admin": "מנהל",
+ "viewer": "צופה",
+ "desc": "למנהלי מערכת יש גישה מלאה לכל התכונות בממשק המשתמש של Frigate. הצופים מוגבלים לצפייה במצלמות, סקירת פריטים וצילומים היסטוריים בממשק המשתמש."
+ },
+ "pagination": {
+ "next": {
+ "title": "הבא",
+ "label": "עבור לדף הבא"
+ },
+ "label": "דפדוף",
+ "previous": {
+ "title": "הקודם",
+ "label": "עבור לדף הקודם"
+ },
+ "more": "דפים נוספים"
+ },
+ "accessDenied": {
+ "title": "הגישה נדחתה",
+ "desc": "אין לך הרשאה לצפות בדף הזה.",
+ "documentTitle": "גישה נדחתה - Frigate"
+ },
+ "notFound": {
+ "documentTitle": "לא נמצא - Frigate",
+ "title": "404",
+ "desc": "דף לא נמצא"
+ },
+ "selectItem": "בחירה:{{item}}"
+}
diff --git a/web/public/locales/he/components/auth.json b/web/public/locales/he/components/auth.json
new file mode 100644
index 000000000..17b28cba1
--- /dev/null
+++ b/web/public/locales/he/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "user": "שם משתמש",
+ "password": "סיסמה",
+ "login": "התחברות",
+ "errors": {
+ "usernameRequired": "נדרש שם משתמש",
+ "passwordRequired": "דרושה סיסמה",
+ "unknownError": "שגיאה לא ידועה. בדוק את הלוגים.",
+ "webUnknownError": "שגיאה לא ידועה, בדוק את הלוגים.",
+ "rateLimit": "חרגת מהמגבלת בקשות. נסה שוב מאוחר יותר.",
+ "loginFailed": "ההתחברות נכשלה"
+ }
+ }
+}
diff --git a/web/public/locales/he/components/camera.json b/web/public/locales/he/components/camera.json
new file mode 100644
index 000000000..f9de9a6c1
--- /dev/null
+++ b/web/public/locales/he/components/camera.json
@@ -0,0 +1,86 @@
+{
+ "group": {
+ "label": "קבוצת מצלמות",
+ "camera": {
+ "setting": {
+ "streamMethod": {
+ "method": {
+ "smartStreaming": {
+ "desc": "שידור חכם יעדכן את תמונת המצלמה פעם בדקה כאשר לא מתרחשת פעילות ניתנת לזיהוי כדי לחסוך רוחב פס ומשאבים. כאשר מזוהה פעילות, התמונה עוברת בצורה חלקה לשידור חי.",
+ "label": "שידור חכם (מומלץ)"
+ },
+ "noStreaming": {
+ "label": "אין שידור",
+ "desc": "תמונות המצלמה יתעדכנו רק פעם בדקה ולא יתבצע שידור חי."
+ },
+ "continuousStreaming": {
+ "label": "שידור רציף",
+ "desc": {
+ "title": "תמונת המצלמה תמיד תהיה שידור חי כאשר היא גלויה בדשבורד, גם אם לא זוהתה פעילות.",
+ "warning": "שידור רציף עלול לגרום לשימוש גבוה ברוחב פס ובעיות ביצועים. יש להשתמש בזהירות."
+ }
+ }
+ },
+ "label": "שיטת שידור",
+ "placeholder": "בחירת שיטת שידור"
+ },
+ "title": "הגדרות סטרימינג של {{cameraName}}",
+ "label": "הגדרות זרם מצלמה",
+ "desc": "שנה את אפשרויות הסטרימינג בשידור חי עבור לוח המחוונים של קבוצת מצלמות זו. הגדרות אלו ספציפיות למכשיר/דפדפן.",
+ "audioIsAvailable": "קול זמין עבור שידור זה",
+ "audioIsUnavailable": "קול לא זמין לזרם זה",
+ "audio": {
+ "tips": {
+ "title": "יש להפיק קול מהמצלמה שלך ולהגדיר אותו ב-go2rtc עבור שידור זה.",
+ "document": "קרא את התיעוד "
+ }
+ },
+ "stream": "זרם",
+ "placeholder": "בחירת זרם",
+ "compatibilityMode": {
+ "label": "מצב תאימות",
+ "desc": "הפעל אפשרות זו רק אם השידור החי של המצלמה שלך מציג עיוותים בצבע ויש לו קו אלכסוני בצד ימין של התמונה."
+ }
+ }
+ },
+ "edit": "ערכית קבוצת מצלמות",
+ "delete": {
+ "label": "מחיקת קבוצת מצלמות",
+ "confirm": {
+ "title": "אישור מחיקה",
+ "desc": "האם אתה בטוח שברצונך למחוק את קבוצת המצלמות {{name}}?"
+ }
+ },
+ "name": {
+ "label": "שם",
+ "placeholder": "הכנס שם…",
+ "errorMessage": {
+ "mustLeastCharacters": "שם קבוצת המצלמות חייב להיות בן 2 תווים לפחות.",
+ "exists": "שם קבוצת המצלמות כבר קיים.",
+ "nameMustNotPeriod": "שם קבוצת המצלמות אינו יכול להכיל נקודה.",
+ "invalid": "שם קבוצת מצלמות לא חוקי."
+ }
+ },
+ "cameras": {
+ "label": "מצלמות",
+ "desc": "בחירת מצלמות עבור קבוצה זו."
+ },
+ "icon": "אייקון",
+ "success": "קבוצת המצלמות ({{name}}) נשמרה.",
+ "add": "הוספת קבוצת מצלמות"
+ },
+ "debug": {
+ "options": {
+ "label": "הגדרות",
+ "title": "אפשרויות",
+ "showOptions": "הצג אפשרויות",
+ "hideOptions": "הסתר אפשרויות"
+ },
+ "boundingBox": "תיבת זיהוי",
+ "zones": "אזורים",
+ "mask": "מיסוך",
+ "motion": "תנועה",
+ "timestamp": "חותמת זמן",
+ "regions": "אזורים"
+ }
+}
diff --git a/web/public/locales/he/components/dialog.json b/web/public/locales/he/components/dialog.json
new file mode 100644
index 000000000..472d3d541
--- /dev/null
+++ b/web/public/locales/he/components/dialog.json
@@ -0,0 +1,114 @@
+{
+ "restart": {
+ "title": "האם אתה בטוח שברצונך להפעיל מחדש את Frigate?",
+ "button": "הפעלה מחדש - Frigate",
+ "restarting": {
+ "title": "Frigate מופעל מחדש כעת",
+ "content": "דף זה ייטען מחדש בעוד {{countdown}} שניות.",
+ "button": "אילוץ טעינה מחדש"
+ }
+ },
+ "export": {
+ "toast": {
+ "error": {
+ "endTimeMustAfterStartTime": "שעת הסיום חייבת להיות אחרי שעת ההתחלה",
+ "failed": "נכשל בהתחלת הייצוא: {{error}}",
+ "noVaildTimeSelected": "לא נבחר טווח זמן תקף"
+ },
+ "success": "הייצוא הוחל בהצלחה. הצג את הקובץ בתיקייה /ייצוא."
+ },
+ "time": {
+ "end": {
+ "label": "בחירת זמן סיום",
+ "title": "זמן סיום"
+ },
+ "fromTimeline": "בחירה מציר זמן",
+ "lastHour_one": "שעה אחרונה",
+ "lastHour_two": "שעות אחרונות {{count}}",
+ "lastHour_other": "שעות אחרונות {{count}}",
+ "custom": "מותאם אישית",
+ "start": {
+ "title": "זמן התחלה",
+ "label": "בחירת זמן התחלה"
+ }
+ },
+ "selectOrExport": "בחירה או ייצוא",
+ "name": {
+ "placeholder": "תן שם לייצוא"
+ },
+ "select": "בחירה",
+ "export": "ייצוא",
+ "fromTimeline": {
+ "saveExport": "שמירת ייצוא",
+ "previewExport": "תצוגה מקדימה של ייצוא"
+ }
+ },
+ "streaming": {
+ "restreaming": {
+ "desc": {
+ "title": "הגדר את go2rtc לקבלת אפשרויות נוספות של תצוגה חיה ושמע עבור מצלמה זו.",
+ "readTheDocumentation": "קרא את התיעוד"
+ },
+ "disabled": "הזרמה מחדש אינה פעילה עבור מצלמה זו."
+ },
+ "label": "זרם",
+ "showStats": {
+ "label": "הצג סטטיסטיקות שידור",
+ "desc": "הפעל אפשרות זו כדי להציג סטטיסטיקות שידור כשכבת-על על פיד המצלמה."
+ },
+ "debugView": "תצוגת ניפוי שגיאות"
+ },
+ "explore": {
+ "plus": {
+ "submitToPlus": {
+ "label": "העלה ל- +Frigate",
+ "desc": "אובייקטים במיקומים שברצונך להימנע מהם אינם תוצאות חיוביות שגויות. הגשתם כתוצאות חיוביות שגויות תבלבל את המודל."
+ },
+ "review": {
+ "question": {
+ "label": "אשר תווית זו עבור +Frigate",
+ "ask_a": "האם אובייקט זה הוא {{label}}?",
+ "ask_an": "האם אובייקט זה הוא - {{label}}?",
+ "ask_full": "האם אובייקט זה הוא {{untranslatedLabel}} ({{translatedLabel}})?"
+ },
+ "state": {
+ "submitted": "נשלח"
+ }
+ }
+ },
+ "video": {
+ "viewInHistory": "צפה בהיסטוריה"
+ }
+ },
+ "search": {
+ "saveSearch": {
+ "label": "שמירת חיפוש",
+ "desc": "ספק שם לחיפוש שמור זה.",
+ "placeholder": "הזן שם לחיפוש שלך",
+ "success": "החיפוש ({{searchName}}) נשמר.",
+ "button": {
+ "save": {
+ "label": "שמירת החיפוש הזה"
+ }
+ },
+ "overwrite": "{{searchName}} כבר קיים. שמירה תדרוס את הערך הקיים."
+ }
+ },
+ "recording": {
+ "confirmDelete": {
+ "title": "אישור מחיקה",
+ "desc": {
+ "selected": "האם אתה בטוח שברצונך למחוק את כל הסרטונים המוקלטים המשויכים לפריט סקירה זה?detect של {{cameraName}}, בדקו את יומני השגיאות"
+ },
+ "cameraDisabled": "המצלמה מושבתת"
+}
diff --git a/web/public/locales/he/objects.json b/web/public/locales/he/objects.json
new file mode 100644
index 000000000..68f648da0
--- /dev/null
+++ b/web/public/locales/he/objects.json
@@ -0,0 +1,120 @@
+{
+ "person": "אדם",
+ "bicycle": "אופניים",
+ "car": "מכונית",
+ "motorcycle": "אופנוע",
+ "airplane": "מטוס",
+ "bus": "אוטובוס",
+ "train": "למד פנים",
+ "boat": "סירה",
+ "traffic_light": "רמזור",
+ "fire_hydrant": "ברז כיבוי אש",
+ "street_sign": "שלט רחוב",
+ "stop_sign": "תמרור עצור",
+ "parking_meter": "מדחן חניה",
+ "bench": "ספסל",
+ "bird": "ציפור",
+ "cat": "חתול",
+ "dog": "כלב",
+ "horse": "סוס",
+ "sheep": "כבשה",
+ "cow": "פרה",
+ "elephant": "פיל",
+ "bear": "דב",
+ "zebra": "זברה",
+ "giraffe": "ג'ירפה",
+ "hat": "כובע",
+ "backpack": "תרמיל",
+ "umbrella": "מטריה",
+ "shoe": "נעל",
+ "eye_glasses": "משקפיים",
+ "handbag": "תיק יד",
+ "tie": "עניבה",
+ "suitcase": "מזוודה",
+ "frisbee": "צלחת מעופפת",
+ "skis": "מִגלָשַׁיִם",
+ "snowboard": "גלשן שלג",
+ "sports_ball": "כדור ספורט",
+ "kite": "עפיפון",
+ "baseball_bat": "כובע בייסבול",
+ "baseball_glove": "כפפת בייסבול",
+ "skateboard": "סקייטבורד",
+ "surfboard": "גלשן",
+ "bottle": "בקבוק",
+ "plate": "לוחית",
+ "wine_glass": "כוס יין",
+ "mouse": "עכבר",
+ "keyboard": "לוח מקשים",
+ "bark": "נביחה",
+ "fox": "שועל",
+ "goat": "עז",
+ "rabbit": "ארנב",
+ "raccoon": "רקון",
+ "robot_lawnmower": "מכסחת דשא רובוטית",
+ "waste_bin": "פח אשפה",
+ "on_demand": "לפי דרישה",
+ "face": "פנים",
+ "license_plate": "לוחית רישוי",
+ "package": "חבילה",
+ "bbq_grill": "מנגל",
+ "amazon": "אמזון",
+ "usps": "USPS",
+ "ups": "UPS",
+ "fedex": "פדקס",
+ "dhl": "די-אייצ'-אל",
+ "an_post": "אנפוסט",
+ "purolator": "פורולטור",
+ "postnl": "דואר הולנד",
+ "nzpost": "דואר ניוזילנד",
+ "postnord": "דואר נורד",
+ "gls": "G_L_S",
+ "dpd": "דיפידי",
+ "tennis_racket": "מחבט טניס",
+ "pizza": "פיצה",
+ "donut": "דונאט",
+ "cake": "עוגה",
+ "chair": "כיסא",
+ "couch": "ספה",
+ "potted_plant": "עציץ",
+ "bed": "מיטה",
+ "mirror": "מראה",
+ "dining_table": "שולחן אוכל",
+ "window": "חלון",
+ "desk": "שולחן",
+ "toilet": "שירותים",
+ "door": "דלת",
+ "tv": "טלויזיה",
+ "cup": "כוס",
+ "fork": "מזלג",
+ "knife": "סכין",
+ "spoon": "כף",
+ "bowl": "קערה",
+ "banana": "בננה",
+ "apple": "תפוח",
+ "sandwich": "כריך",
+ "orange": "תפוז",
+ "broccoli": "ברוקולי",
+ "carrot": "גזר",
+ "hot_dog": "נקניקייה",
+ "laptop": "מחשב נייד",
+ "remote": "שלט",
+ "cell_phone": "טלפון נייד",
+ "microwave": "מיקרוגל",
+ "oven": "תנור",
+ "toaster": "טוסטר",
+ "refrigerator": "מקרר",
+ "blender": "מערבל",
+ "book": "ספר",
+ "clock": "שעון",
+ "vase": "אגרטל",
+ "scissors": "מספריים",
+ "teddy_bear": "דובי",
+ "hair_dryer": "מייבש שיער",
+ "toothbrush": "מברשת שיניים",
+ "hair_brush": "מברשת שיער",
+ "vehicle": "רכב",
+ "animal": "חיה",
+ "squirrel": "סנאי",
+ "deer": "צבי",
+ "sink": "כיור"
+}
diff --git a/web/public/locales/he/views/configEditor.json b/web/public/locales/he/views/configEditor.json
new file mode 100644
index 000000000..7f9120a31
--- /dev/null
+++ b/web/public/locales/he/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "documentTitle": "עורך הגדרות - פריגטה",
+ "configEditor": "עורך תצורה",
+ "copyConfig": "העתקת הגדרות",
+ "saveAndRestart": "שמירה והפעלה מחדש",
+ "saveOnly": "שמירה בלבד",
+ "confirm": "לצאת ללא שמירה?",
+ "toast": {
+ "success": {
+ "copyToClipboard": "התצורה הועתקה ללוח."
+ },
+ "error": {
+ "savingError": "שגיאה בשמירת ההגדרות"
+ }
+ }
+}
diff --git a/web/public/locales/he/views/events.json b/web/public/locales/he/views/events.json
new file mode 100644
index 000000000..21b551e2a
--- /dev/null
+++ b/web/public/locales/he/views/events.json
@@ -0,0 +1,38 @@
+{
+ "alerts": "התרעות",
+ "detections": "גילויים",
+ "motion": {
+ "label": "תנועה",
+ "only": "תנועה בלבד"
+ },
+ "allCameras": "כל המצלמות",
+ "empty": {
+ "detection": "אין גילויים לבדיקה",
+ "alert": "אין התראות להצגה",
+ "motion": "לא נמצאו נתוני תנועה"
+ },
+ "timeline": "ציר זמן",
+ "timeline.aria": "בחירת ציר זמן",
+ "events": {
+ "label": "אירועים",
+ "aria": "בחירת אירועים",
+ "noFoundForTimePeriod": "לא נמצאו אירועים עבור תקופת זמן זו."
+ },
+ "documentTitle": "סקירה - Frigate",
+ "recordings": {
+ "documentTitle": "הקלטות - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "24 שעות אחרונות"
+ },
+ "markAsReviewed": "סימון כנבדק",
+ "markTheseItemsAsReviewed": "סמן פריטים אלה כנסרקו",
+ "newReviewItems": {
+ "label": "הצג פריטי סקירה חדשים",
+ "button": "פריטים חדשים לסקירה"
+ },
+ "selected_one": "נבחרו {{count}}",
+ "selected_other": "{{count}} נבחרו",
+ "camera": "מצלמה",
+ "detected": "זוהה"
+}
diff --git a/web/public/locales/he/views/explore.json b/web/public/locales/he/views/explore.json
new file mode 100644
index 000000000..bf9e1b2c9
--- /dev/null
+++ b/web/public/locales/he/views/explore.json
@@ -0,0 +1,209 @@
+{
+ "documentTitle": "גלה - פריגטה",
+ "itemMenu": {
+ "downloadVideo": {
+ "label": "הורדת וידיאו",
+ "aria": "הורדת וידיאו"
+ },
+ "viewObjectLifecycle": {
+ "label": "צפה בשלבים של האובייקט",
+ "aria": "הצג את השלבים של האובייקט"
+ },
+ "downloadSnapshot": {
+ "label": "הורדת לכידת תמונה",
+ "aria": "הורדת לכידת תמונה"
+ },
+ "findSimilar": {
+ "label": "מצא דומה",
+ "aria": "מצא אובייקטים דומים במעקב"
+ },
+ "submitToPlus": {
+ "label": "שלח ל- +Frigate",
+ "aria": "שלח ל +Frigate"
+ },
+ "viewInHistory": {
+ "label": "צפה בהיסטוריה",
+ "aria": "צפה בהיסטוריה"
+ },
+ "deleteTrackedObject": {
+ "label": "מחק את אובייקט המעקב הזה"
+ }
+ },
+ "generativeAI": "Generative - AI",
+ "exploreMore": "סקור אובייקטים נוספים של {{label}}",
+ "exploreIsUnavailable": {
+ "title": "סקירה לא זמינה",
+ "embeddingsReindexing": {
+ "context": "ניתן להשתמש בסקירה לאחר סיום בניית המאגר של האובייקטים שזוהו.",
+ "startingUp": "מתחיל…",
+ "estimatedTime": "זמן משוער שנותר:",
+ "finishingShortly": "מסיים בקרוב",
+ "step": {
+ "thumbnailsEmbedded": "תמונות ממוזערות מוטמעות: ",
+ "descriptionsEmbedded": "תיאורים מוטמעים: ",
+ "trackedObjectsProcessed": "אובייקטים שעובדו לאחר מעקב: "
+ }
+ },
+ "downloadingModels": {
+ "setup": {
+ "visionModel": "מודל חוזי",
+ "visionModelFeatureExtractor": "מחלץ תכונות מודל חוזי",
+ "textModel": "מודל טקסט",
+ "textTokenizer": "מפצל טקסט"
+ },
+ "tips": {
+ "context": "מומלץ לעדכן את המאגר של האובייקטים אחרי שהמודלים ירדו.",
+ "documentation": "קרא את התיעוד"
+ },
+ "error": "אירעה שגיאה. בדוק את הלוגים.",
+ "context": "Frigate מורידה את מודלי ההטמעה הדרושים כדי לתמוך בתכונת החיפוש הסמנטי. פעולה זו עשויה להימשך מספר דקות, בהתאם למהירות חיבור הרשת שלך."
+ }
+ },
+ "trackedObjectDetails": "פרטי אובייקט במעקב",
+ "type": {
+ "details": "פרטים",
+ "snapshot": "לכידת תמונה.",
+ "video": "וידיאו",
+ "object_lifecycle": "שלבי זיהוי של האובייקט"
+ },
+ "objectLifecycle": {
+ "title": "שלבי זיהוי של האובייקט",
+ "noImageFound": "לא נמצאה תמונה עבור חותמת זמן זו.",
+ "createObjectMask": "יצירת מיסוך אובייקט",
+ "adjustAnnotationSettings": "שנה את הגדרות הסימון",
+ "scrollViewTips": "גלול כדי לצפות ברגעים המשמעותיים בשלבים של אובייקט זה.",
+ "count": "{{first}} מתוך{{second}}",
+ "trackedPoint": "נקודת מעקב",
+ "lifecycleItemDesc": {
+ "visible": "זוהה {{label}}",
+ "entered_zone": "{{label}} נכנס ל-{{zones}}",
+ "active": "{{label}} הפך לפעיל",
+ "stationary": "{{label}} הפך לנייח",
+ "attribute": {
+ "faceOrLicense_plate": "זוהה {{attribute}} עבור {{label}}",
+ "other": "{{label}} זוהה כ-{{attribute}}"
+ },
+ "gone": "{{label}} שמאל",
+ "heard": "{{label}} נשמעה",
+ "external": "זוהה {{label}}",
+ "header": {
+ "zones": "אזורים",
+ "ratio": "יחס",
+ "area": "אזור"
+ }
+ },
+ "annotationSettings": {
+ "title": "הגדרות סימון",
+ "showAllZones": {
+ "title": "הצג את כל האזורים",
+ "desc": "הצג תמיד אזורים בפריימים שבהם אובייקטים נכנסו לאזור."
+ },
+ "offset": {
+ "label": "היסט ההערה",
+ "documentation": "עיין בתיעוד ",
+ "toast": {
+ "success": "קיזוז עבור {{camera}} נשמר בקובץ התצורה. הפעל מחדש את Frigate כדי להחיל את השינויים שלך."
+ },
+ "tips": "טיפ: דמיינו סרטון אירוע שבו אדם הולך משמאל לימין. אם תיבת הגבול של ציר הזמן של האירוע נמצאת באופן עקבי משמאל לאדם, יש להפחית את הערך. באופן דומה, אם אדם הולך משמאל לימין והתיבה התוחמת נמצאת באופן עקבי לפני האדם, יש להגדיל את הערך.",
+ "millisecondsToOffset": "מספר מילישניות להסטת ההערות שנוצרו מזיהוי ברירת מחדל: 0",
+ "desc": "נתונים אלה מגיעים משידור הזיהוי של המצלמה שלך, אך הם מונחים על גבי תמונות משידור ההקלטה. לא סביר ששני הזרמים יהיו מסונכרנים לחלוטין. כתוצאה מכך, תיבת הגבול והצילומים לא מסונכרנים בצורה מושלמת. עם זאת, ניתן להשתמש בשדה היסט סימון כדי לסנכרן."
+ }
+ },
+ "autoTrackingTips": "מיקומי תיבות הסימון לא יהיו מדויקים עבור מצלמות עם מעקב אוטומטי.",
+ "carousel": {
+ "previous": "שקופית קודמת",
+ "next": "שקופית הבאה"
+ }
+ },
+ "details": {
+ "timestamp": "חותמת זמן",
+ "item": {
+ "tips": {
+ "mismatch_one": "זוהה אובייקט לא זמין ({{count}}) ונכלל בפריט סקירה זה. אובייקטים אלה לא עמדו בקריטריונים של התראה או זיהוי, או שכבר נוקו/נמחקו.",
+ "mismatch_two": "זוהו אובייקטים לא זמינים ({{count}}) ונכלל בפריט סקירה זה. אובייקטים אלה לא עמדו בקריטריונים של התראה או זיהוי, או שכבר נוקו/נמחקו.",
+ "mismatch_other": "זוהו אובייקטים לא זמינים ({{count}}) ונכלל בפריט סקירה זה. אובייקטים אלה לא עמדו בקריטריונים של התראה או זיהוי, או שכבר נוקו/נמחקו.",
+ "hasMissingObjects": "התאם את התצורה שלך אם ברצונך ש-Frigate ישמור אובייקטים שעוקבים אחריהם עבור התוויות הבאות: {{objects}}"
+ },
+ "button": {
+ "viewInExplore": "הצג בסקירה",
+ "share": "שתף פריט זה"
+ },
+ "toast": {
+ "success": {
+ "updatedSublabel": "תווית המשנה עודכנה בהצלחה.",
+ "updatedLPR": "לוחית הרישוי עודכנה בהצלחה.",
+ "regenerate": "תיאור חדש התבקש מ-{{provider}}. בהתאם למהירות הספק שלך, ייתכן שייקח זמן מה ליצירת התיאור החדש."
+ },
+ "error": {
+ "regenerate": "ההתקשרות ל-{{provider}} לקבלת תיאור חדש נכשלה: {{errorMessage}}",
+ "updatedSublabelFailed": "עדכון תווית המשנה נכשל: {{errorMessage}}",
+ "updatedLPRFailed": "עדכון לוחית הרישוי נכשל: {{errorMessage}}"
+ }
+ },
+ "title": "סקירת הפריט",
+ "desc": "סקירת הפריט"
+ },
+ "label": "תווית",
+ "editSubLabel": {
+ "title": "עריכת תווית משנה",
+ "desc": "הזן תווית משנה חדשה עבור {{label}}",
+ "descNoLabel": "הזן תווית משנה חדשה עבור אובייקט המעקב"
+ },
+ "editLPR": {
+ "title": "עריכת לוחית זיהוי",
+ "desc": "הזן ערך לוחית רישוי חדשה עבור {{label}}",
+ "descNoLabel": "הזן ערך לוחית רישוי חדשה עבור האובייקט במעקב"
+ },
+ "snapshotScore": {
+ "label": "ציון לכידת תמונה"
+ },
+ "topScore": {
+ "label": "ציון גבוה",
+ "info": "הציון הגבוה ביותר הוא הציון החציוני הגבוה ביותר עבור האובייקט במעקב, כך שהוא עשוי להיות שונה מהציון המוצג בתמונה הממוזערת של תוצאת החיפוש."
+ },
+ "recognizedLicensePlate": "לוחית רישוי מוכרת",
+ "estimatedSpeed": "מהירות משוערת",
+ "objects": "אובייקט",
+ "camera": "מצלמה",
+ "button": {
+ "findSimilar": "מצא דומה",
+ "regenerate": {
+ "title": "צור מחדש",
+ "label": "צור מחדש את תיאור אובייקט המעקב"
+ }
+ },
+ "description": {
+ "label": "תיאור",
+ "placeholder": "תיאור האובייקט במעקב",
+ "aiTips": "Frigate לא תבקש תיאור מספק הבינה המלאכותית הגנרטיבית שלך עד לסיום כל השלבים של האובייקט במעקב."
+ },
+ "expandRegenerationMenu": "פתח את תפריט היצירה מחדש",
+ "regenerateFromSnapshot": "צור מחדש מלכידת התמונה",
+ "regenerateFromThumbnails": "צור מחדש מתמונות ממוזערות",
+ "tips": {
+ "descriptionSaved": "התיאור נשמר בהצלחה",
+ "saveDescriptionFailed": "עדכון התיאור נכשל: {{errorMessage}}"
+ },
+ "zones": "אזורים"
+ },
+ "dialog": {
+ "confirmDelete": {
+ "title": "אישור מחיקה",
+ "desc": "מחיקת אובייקט זה במעקב מסירה את תמונת המצב, כל ההטמעות שנשמרו וכל ערכי שלבי האובייקט המשויכים. קטעי וידאו מוקלטים של אובייקט זה במעקב בתצוגת היסטוריה לא יימחקו.מצב: {{effectiveRetainMode}}, כך שהקלטה לפי דרישה זו תשמור רק מקטעים עם {{effectiveRetainModeName}}."
+ },
+ "editLayout": {
+ "label": "עריכת פריסת תצוגה",
+ "group": {
+ "label": "עריכת קבוצת מצלמות"
+ },
+ "exitEdit": "יציאה מעריכה"
+ }
+}
diff --git a/web/public/locales/he/views/recording.json b/web/public/locales/he/views/recording.json
new file mode 100644
index 000000000..91817595b
--- /dev/null
+++ b/web/public/locales/he/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "filter": "לסנן",
+ "export": "ייצוא",
+ "calendar": "לוח שנה",
+ "filters": "מסננים",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "לא נבחר טווח זמן תקף",
+ "endTimeMustAfterStartTime": "שעת הסיום חייבת להיות אחרי שעת ההתחלה"
+ }
+ }
+}
diff --git a/web/public/locales/he/views/search.json b/web/public/locales/he/views/search.json
new file mode 100644
index 000000000..0865e4654
--- /dev/null
+++ b/web/public/locales/he/views/search.json
@@ -0,0 +1,72 @@
+{
+ "search": "חיפוש",
+ "savedSearches": "חיפושים שמורים",
+ "searchFor": "חפש את{{inputValue}}",
+ "button": {
+ "clear": "ניקוי חיפוש",
+ "save": "שמירת החיפוש",
+ "delete": "מחיקת חיפוש שמור",
+ "filterInformation": "סינון מידע",
+ "filterActive": "מסננים פעילים"
+ },
+ "trackedObjectId": "מזהה אובייקט במעקב",
+ "filter": {
+ "label": {
+ "cameras": "מצלמות",
+ "labels": "תוויות",
+ "zones": "אזורים",
+ "sub_labels": "תוויות משנה",
+ "search_type": "סוג חיפוש",
+ "time_range": "טווח זמן",
+ "before": "לפני",
+ "after": "אחרי",
+ "min_score": "ציון מינימום",
+ "max_speed": "מהירות מקסימאלית",
+ "max_score": "ציון מקסימאלי",
+ "min_speed": "מהירות מינמאלית",
+ "recognized_license_plate": "לוחית רישוי מוכרת",
+ "has_clip": "קיים סרטון קליפ",
+ "has_snapshot": "לכידת תמונה קיימת"
+ },
+ "searchType": {
+ "thumbnail": "תמונה ממוזערת",
+ "description": "תיאור"
+ },
+ "toast": {
+ "error": {
+ "beforeDateBeLaterAfter": "תאריך ה\"לפני\" חייב להיות מאוחר מתאריך ה\"אחרי\".",
+ "afterDatebeEarlierBefore": "תאריך ה'אחרי' חייב להיות מוקדם יותר מתאריך ה'לפני'.",
+ "minScoreMustBeLessOrEqualMaxScore": "ה-'min_score' חייב להיות קטן או שווה ל-'max_score'.",
+ "maxScoreMustBeGreaterOrEqualMinScore": "ה-'max_score' חייב להיות גדול או שווה ל-'min_score'.",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "ה-'min_speed' חייב להיות קטן או שווה ל-'max_speed'.",
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "ה-'max_speed' חייב להיות גדול או שווה ל-'min_speed'."
+ }
+ },
+ "tips": {
+ "title": "כיצד להשתמש במסנני טקסט",
+ "desc": {
+ "text": "מסננים עוזרים לך לצמצם את תוצאות החיפוש שלך. כך תוכל להשתמש בהם בשדה הקלט:",
+ "step1": "הקלד שם של מפתח סינון ואחריו נקודתיים (לדוגמה, \"מצלמות:\").",
+ "step2": "בחר ערך מההצעות או הקלד ערך משלך.",
+ "step3": "השתמשו במספר מסננים על ידי הוספתם אחד אחרי השני עם רווח ביניהם.",
+ "step6": "הסר מסננים על ידי לחיצה על ה-'x' שלידם.",
+ "step4": "מסנני תאריך (לפני: ואחרי:) משתמשים בפורמט {{DateFormat}}.",
+ "step5": "מסנן טווח הזמן משתמש בפורמט {{exampleTime}}.",
+ "exampleLabel": "דוּגמָה:"
+ }
+ },
+ "header": {
+ "currentFilterType": "סנן ערכים",
+ "noFilters": "מסננים",
+ "activeFilters": "מסננים פעילים"
+ }
+ },
+ "similaritySearch": {
+ "title": "חיפוש פריטים דומים",
+ "active": "חיפוש דומה פעיל",
+ "clear": "נקה חיפוש דומה"
+ },
+ "placeholder": {
+ "search": "חיפוש…"
+ }
+}
diff --git a/web/public/locales/he/views/settings.json b/web/public/locales/he/views/settings.json
new file mode 100644
index 000000000..912c416fd
--- /dev/null
+++ b/web/public/locales/he/views/settings.json
@@ -0,0 +1,622 @@
+{
+ "camera": {
+ "reviewClassification": {
+ "zoneObjectDetectionsTips": {
+ "notSelectDetections": "כל האובייקטים של {{detectionsLabels}} שזוהו ב-{{zone}} ב-{{cameraName}} שלא סווגו כהתראות יוצגו כזיהויים ללא קשר לאזור בו הם נמצאים.",
+ "text": "כל האובייקטים של {{detectionsLabels}} שאינם מסווגים ב-{{zone}} ב-{{cameraName}} יוצגו כזיהויים.",
+ "regardlessOfZoneObjectDetectionsTips": "כל האובייקטים של {{detectionsLabels}} שלא סווגו ב-{{cameraName}} יוצגו כזיהויים ללא קשר לאזור בו הם נמצאים."
+ },
+ "objectAlertsTips": "כל האובייקטים של {{alertsLabels}} ב-{{cameraName}} יוצגו כהתראות.",
+ "objectDetectionsTips": "כל האובייקטים של {{detectionsLabels}} שלא סווגו ב-{{cameraName}} יוצגו כזיהויים ללא קשר לאזור בו הם נמצאים.",
+ "noDefinedZones": "בחר ערך מההצעות או הקלד ערך משלך.",
+ "zoneObjectAlertsTips": "כל האובייקטים של {{alertsLabels}} שזוהו ב-{{zone}} ב-{{cameraName}} יוצגו כהתראות.",
+ "unsavedChanges": "הגדרות סיווג סקירה שלא נשמרו עבור {{camera}}",
+ "selectAlertsZones": "בחירת אזורים להתראות",
+ "selectDetectionsZones": "בחירת אזורים לגילוי",
+ "limitDetections": "הגבלת הזיהוי לאזורים ספציפיים",
+ "toast": {
+ "success": "הגדרת סיווג נשמרה. יש להפעיל מחדש את Frigate כדי שהשינויים ייכנסו לתוקף."
+ },
+ "title": "סיווג סקירה",
+ "readTheDocumentation": "עיין בתיעוד",
+ "desc": "Frigate מסווגת פריטי סקירה כהתראות וגילויים. כברירת מחדל, כל האובייקטים של אנשים ומכוניות נחשבים כהתראות. ניתן למקד את הקטגוריה של פריטי הסקירה על ידי הגדרת אזורים נדרשים עבורם."
+ },
+ "title": "הגדרות מצלמה",
+ "streams": {
+ "title": "שידורים",
+ "desc": "השבתת מצלמה עוצרת לחלוטין את עיבוד הזרמים של מצלמה זו על ידי Frigate. זיהוי, הקלטה וניפוי שגיאות לא יהיו זמינים.תיבות תנועה
תיבות אדומות יונחו על אזורים בפריים שבהם מזוהה תנועה כעת
" + }, + "regions": { + "title": "אזורים", + "desc": "הצג תיבה של אזור העניין שנשלח לגלאי האובייקטים", + "tips": "תיבות אזור
תיבות ירוקות בהירות יונחו על פני אזורים מעניינים בפריים הנשלחים לגלאי האובייקטים.
" + }, + "objectShapeFilterDrawing": { + "title": "ציור מסנן צורת אובייקט", + "desc": "צייר מלבן על התמונה כדי להציג פרטים על שטח ויחס", + "document": "עיין בתיעוד ", + "score": "ציון", + "ratio": "יחס", + "area": "אזור", + "tips": "הפעל אפשרות זו כדי לצייר מלבן על תמונת המצלמה כדי להציג את השטח והיחס שלה. ניתן להשתמש בערכים אלה כדי להגדיר פרמטרים של מסנן צורת אובייקט בתצורה שלך." + }, + "desc": "תצוגת ניפוי שגיאות מציגה תצוגה בזמן אמת של אובייקטים במעקב והסטטיסטיקות שלהם. רשימת האובייקטים מציגה סיכום בהשהיית זמן של האובייקטים שזוהו." + }, + "users": { + "title": "משתמשים", + "management": { + "title": "ניהול משתמשים", + "desc": "נהל את חשבונות המשתמשים של מופע Frigate זה." + }, + "addUser": "הוספת משתמש", + "updatePassword": "עדכון סיסמה", + "toast": { + "success": { + "createUser": "המשתמש {{user}} נוצר בהצלחה", + "deleteUser": "המשתמש {{user}} נמחק בהצלחה", + "updatePassword": "הסיסמה עודכנה בהצלחה.", + "roleUpdated": "הרשאות עודכנו עבור {{user}}" + }, + "error": { + "createUserFailed": "יצירת משתמש נכשלה: {{errorMessage}}", + "roleUpdateFailed": "עדכון ההרשאות נכשל: {{errorMessage}}", + "deleteUserFailed": "מחיקת משתמש נכשלה: {{errorMessage}}", + "setPasswordFailed": "שמירת הסיסמה נכשלה: {{errorMessage}}" + } + }, + "table": { + "actions": "פעולות", + "role": "הרשאות", + "noUsers": "לא נמצאו משתמשים.", + "changeRole": "שינוי הרשאות משתמש", + "password": "סיסמה", + "deleteUser": "מחיקת משתמש", + "username": "שם משתמש" + }, + "dialog": { + "form": { + "user": { + "title": "שם משתמש", + "desc": "מותר להשתמש רק באותיות, מספרים, נקודות וקו תחתון.", + "placeholder": "הכנס שם משתמש" + }, + "password": { + "title": "סיסמה", + "placeholder": "הכנס סיסמה", + "confirm": { + "placeholder": "אישור סיסמה", + "title": "אישור סיסמה" + }, + "strength": { + "title": "חוזק הסיסמה: ", + "weak": "חלש", + "medium": "בינוני", + "strong": "חזק", + "veryStrong": "מאוד חזק" + }, + "match": "סיסמאות תואמות", + "notMatch": "הסיסמאות אינן תואמות." + }, + "newPassword": { + "title": "סיסמה חדשה", + "placeholder": "הכנס סיסמה חדשה", + "confirm": { + "placeholder": "הזן שוב את הסיסמה החדשה" + } + }, + "usernameIsRequired": "נדרש שם משתמש", + "passwordIsRequired": "נדרשת סיסמה" + }, + "createUser": { + "title": "יצירת משתמש חדש", + "desc": "הוסף חשבון משתמש חדש וציין הרשאות גישה לאזורים בממשק המשתמש של Frigate.", + "usernameOnlyInclude": "שם המשתמש יכול לכלול רק אותיות, מספרים, . או קו תחתון", + "confirmPassword": "אנא אשר את הסיסמה שלך" + }, + "deleteUser": { + "title": "מחיקת משתמש", + "desc": "לא ניתן לבטל פעולה זו. פעולה זו תמחק לצמיתות את חשבון המשתמש ותסיר את כל הנתונים המשויכים.", + "warn": "האם אתה בטוח שברצונך למחוק את {{username}}?" + }, + "passwordSetting": { + "cannotBeEmpty": "הסיסמה לא יכולה להיות ריקה", + "doNotMatch": "הסיסמאות אינן תואמות", + "updatePassword": "עדכון סיסמה עבור {{username}}", + "setPassword": "קבע סיסמה", + "desc": "צור סיסמה חזקה כדי לאבטח חשבון זה." + }, + "changeRole": { + "title": "שינוי הרשאות משתמש", + "select": "בחירת הרשאות", + "desc": "עדכון הרשאות עבור {{username}}", + "roleInfo": { + "intro": "בחר את ההרשאות המתאימות עבור משתמש זה:", + "admin": "מנהל", + "adminDesc": "גישה מלאה לכל התכונות.", + "viewer": "צופה", + "viewerDesc": "מוגבל לדשבורד שידור חי, סקירה, גילוי וייצוא בלבד." + } + } + } + }, + "notification": { + "title": "התראות", + "notificationSettings": { + "title": "הגדרת התראות", + "desc": "Frigate יכולה לשלוח התראות דחיפה באופן טבעי למכשיר שלך כאשר הוא פועל בדפדפן או מותקן כ-PWA.", + "documentation": "עיין בתיעוד" + }, + "notificationUnavailable": { + "title": "התראות לא זמינות", + "desc": "התראות דחיפה באינטרנט דורשות קישור מאובטח (https://…). זוהי מגבלה של הדפדפן. יש לגשת ל-Frigate בצורה מאובטחת כדי להשתמש בהתראות.",
+ "documentation": "עיין בתיעוד"
+ },
+ "globalSettings": {
+ "title": "הגדרות כלליות",
+ "desc": "השהה זמנית התראות עבור מצלמות ספציפיות בכל המכשירים הרשומים."
+ },
+ "email": {
+ "title": "דואר",
+ "desc": "נדרשת כתובת דוא\"ל תקינה שתשמש כדי להודיע לך אם ישנן בעיות כלשהן בשירות הדחיפה.",
+ "placeholder": "e.g. example@email.com"
+ },
+ "cameras": {
+ "title": "מצלמות",
+ "noCameras": "אין מצלמות זמינות",
+ "desc": "בחר עבור אילו מצלמות להפעיל התראות."
+ },
+ "deviceSpecific": "הגדרות ספציפיות למכשיר",
+ "registerDevice": "רשום מכשיר זה",
+ "unregisterDevice": "בטל את הרישום של מכשיר זה",
+ "sendTestNotification": "שלח הודעת בדיקה",
+ "unsavedRegistrations": "רישומי התראות שלא נשמרו",
+ "unsavedChanges": "שינויים בהתראות שלא נשמרו",
+ "active": "התראות פעילות",
+ "suspended": "התראות הושבתו ב-{{time}}",
+ "suspendTime": {
+ "suspend": "מושבת",
+ "5minutes": "השבתה למשך 5 דקות",
+ "10minutes": "השבתה למשך 10 דקות",
+ "30minutes": "השבתה למשך 30 דקות",
+ "1hour": "השבתה למשך שעה אחת",
+ "12hours": "השבתה למשך 12 שעות",
+ "24hours": "השבתה למשך 24 שעות",
+ "untilRestart": "השבתה עד להפעלה מחדש"
+ },
+ "cancelSuspension": "ביטול השבתה",
+ "toast": {
+ "success": {
+ "settingSaved": "הגדרות ההתראות נשמרו.",
+ "registered": "רישום לקבלת התראות בוצע בהצלחה. נדרשת הפעלה מחדש של Frigate לפני שניתן יהיה לשלוח התראות כלשהן (כולל הודעת בדיקה)."
+ },
+ "error": {
+ "registerFailed": "שמירת רישום ההתראות נכשלה."
+ }
+ }
+ },
+ "frigatePlus": {
+ "title": "הגדרות +Frigate",
+ "apiKey": {
+ "title": "Frigate+ API מפתח",
+ "validated": "מפתח ה-API של Frigate+ זוהה ואושר",
+ "notValidated": "מפתח ה-API של Frigate+ לא זוהה או לא אומת",
+ "desc": "מפתח ה-API של Frigate+ מאפשר אינטגרציה עם שירות Frigate+.",
+ "plusLink": "קרא עוד על Frigate+"
+ },
+ "snapshotConfig": {
+ "title": "תצורת לכידת תמונה",
+ "desc": "שליחה ל-Frigate+ דורשת הפעלה של לכידת תמונה וגם של תמונות בזק clean_copy בהגדרות שלך.",
+ "documentation": "עיין בתיעוד",
+ "cleanCopyWarning": "בחלק מהמצלמות יש אפשרות לתמונות בזק, אך העתקה נקייה מושבתת. עליך להפעיל את clean_copy בתצורת הצילום שלך כדי שתוכל לשלוח תמונות מהמצלמות הללו ל-Frigate+.",
+ "table": {
+ "snapshots": "לכידת תמונה",
+ "camera": "מצלמה",
+ "cleanCopySnapshots": "תמונות clean_copy"
+ }
+ },
+ "modelInfo": {
+ "title": "מידע על המודל",
+ "modelType": "סוג מודל",
+ "trainDate": "תאריך אימון",
+ "baseModel": "דגם בסיסי",
+ "plusModelType": {
+ "userModel": "כיוונון עדין",
+ "baseModel": "מודל בסיסי"
+ },
+ "supportedDetectors": "גלאים נתמכים",
+ "cameras": "מצלמות",
+ "loading": "טוען מידע על המודל…",
+ "error": "טעינת פרטי המודל נכשלה",
+ "availableModels": "מודלים זמינים",
+ "loadingAvailableModels": "טוען מודלים זמינים…",
+ "modelSelect": "ניתן לבחור כאן את הדגמים הזמינים ב-Frigate+. שים לב שניתן לבחור רק דגמים התואמים לתצורת הגלאי הנוכחית שלך."
+ },
+ "unsavedChanges": "שינויים בהגדרות של frigate+ שלא נשמרו",
+ "restart_required": "נדרש הפעלה מחדש (דגם Frigate+ שונה)",
+ "toast": {
+ "success": "הגדרות Frigate+ נשמרו. הפעל מחדש את Frigate כדי להחיל את השינויים.",
+ "error": "שמירת שינויי התצורה נכשלה: {{errorMessage}}"
+ }
+ }
+}
diff --git a/web/public/locales/he/views/system.json b/web/public/locales/he/views/system.json
new file mode 100644
index 000000000..4e21f1a0a
--- /dev/null
+++ b/web/public/locales/he/views/system.json
@@ -0,0 +1,180 @@
+{
+ "lastRefreshed": "רענון אחרון: ",
+ "stats": {
+ "ffmpegHighCpuUsage": "ל-{{camera}} יש צריכת מעבד גבוהה של FFmpeg ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "ל-{{camera}} יש צריכת CPU גבוהה ({{detectAvg}}%)",
+ "healthy": "המערכת פועלת בצורה תקינה",
+ "reindexingEmbeddings": "אינדקס מחדש של ההטמעות ({{processed}}% הושלם)",
+ "cameraIsOffline": "{{camera}} לא זמינה",
+ "detectIsSlow": "{{detect}} איטי ({{speed}} אלפיות שנייה)",
+ "detectIsVerySlow": "{{detect}} איטי מאוד ({{speed}} אלפיות שנייה)"
+ },
+ "documentTitle": {
+ "cameras": "מצב מצלמות - Frigate",
+ "storage": "מצב אחסון - Frigate",
+ "general": "סטטיסטיקה כללית - Frigate",
+ "enrichments": "סטטיסטיקת העשרה - Frigate",
+ "logs": {
+ "frigate": "לוגים - Frigate",
+ "go2rtc": "לוגים - Go2RTC - Frigate",
+ "nginx": "לוגים - Nginx - Frigate"
+ }
+ },
+ "title": "מערכת",
+ "metrics": "מדדי מערכת",
+ "logs": {
+ "download": {
+ "label": "הורדת לוגים"
+ },
+ "copy": {
+ "label": "העתק ללוח עריכה",
+ "success": "לוגים הועתקו ללוח העריכה",
+ "error": "לא ניתן היה להעתיק לוגים ללוח"
+ },
+ "type": {
+ "label": "סוג",
+ "timestamp": "חותמת זמן",
+ "tag": "תג",
+ "message": "הודעה"
+ },
+ "tips": "יומני רישום מוצגים בזרימה מהשרת",
+ "toast": {
+ "error": {
+ "fetchingLogsFailed": "שגיאה באחזור לוגים: {{errorMessage}}",
+ "whileStreamingLogs": "שגיאה בעת הזרמת לוגים: {{errorMessage}}"
+ }
+ }
+ },
+ "general": {
+ "title": "כללי",
+ "detector": {
+ "title": "גלאים",
+ "inferenceSpeed": "מהירות זיהוי",
+ "temperature": "טמפרטורת הגלאי",
+ "cpuUsage": "ניצול מעבד על ידי הגלאי",
+ "memoryUsage": "שימוש בזיכרון על ידי הגלאי"
+ },
+ "hardwareInfo": {
+ "gpuMemory": "זיכרון GPU",
+ "title": "מידע על החומרה",
+ "gpuUsage": "שימוש GPU",
+ "gpuEncoder": "מקודד GPU",
+ "gpuDecoder": "מפענח GPU",
+ "gpuInfo": {
+ "vainfoOutput": {
+ "title": "פלט Vainfo",
+ "returnCode": "קוד החזרה: {{code}}",
+ "processOutput": "פלט תהליך:",
+ "processError": "שגיאת תהליך:"
+ },
+ "nvidiaSMIOutput": {
+ "title": "פלט SMI של Nvidia",
+ "name": "שם: {{name}}",
+ "driver": "מנהל התקן: {{driver}}",
+ "cudaComputerCapability": "יכולת חישוב CUDA: {{cuda_compute}}",
+ "vbios": "מידע על VBios: {{vbios}}"
+ },
+ "closeInfo": {
+ "label": "סגור את המידע על ה-GPU"
+ },
+ "copyInfo": {
+ "label": "העתק מידע על GPU"
+ },
+ "toast": {
+ "success": "מידע על ה-GPU הועתק ללוח"
+ }
+ },
+ "npuUsage": "שימוש ב-NPU",
+ "npuMemory": "NPU זיכרון"
+ },
+ "otherProcesses": {
+ "title": "תהליכים אחרים",
+ "processCpuUsage": "ניצול CPU של התהליך",
+ "processMemoryUsage": "ניצול זיכרון של תהליך"
+ }
+ },
+ "enrichments": {
+ "infPerSecond": "מספר הסקות בשנייה",
+ "title": "העשרה",
+ "embeddings": {
+ "image_embedding": "הטמעת תמונה",
+ "text_embedding": "הטמעת טקסט",
+ "face_recognition": "זיהוי פנים",
+ "plate_recognition": "זיהוי לוחית רישוי",
+ "image_embedding_speed": "מהירות הטמעת תמונה",
+ "face_embedding_speed": "מהירות הטמעת פנים",
+ "face_recognition_speed": "מהירות זיהוי פנים",
+ "plate_recognition_speed": "מהירות זיהוי לוחית",
+ "text_embedding_speed": "מהירות הטמעת טקסט",
+ "yolov9_plate_detection_speed": "מהירות זיהוי לוחיות YOLOv9",
+ "yolov9_plate_detection": "זיהוי לוחיות YOLOv9"
+ }
+ },
+ "storage": {
+ "cameraStorage": {
+ "storageUsed": "אחסון",
+ "percentageOfTotalUsed": "אחוז מהסך הכל",
+ "bandwidth": "רוחב פס",
+ "unused": {
+ "title": "לא בשימוש",
+ "tips": "ייתכן שערך זה לא מייצג במדויק את השטח הפנוי הזמין ל-Frigate אם יש לך קבצים אחרים המאוחסנים בכונן שלך מעבר להקלטות של Frigate. Frigate אינו עוקב אחר ניצול האחסון מלבד להקלטות שלו."
+ },
+ "title": "אחסון מצלמה",
+ "camera": "מצלמה",
+ "unusedStorageInformation": "מידע על אחסון שאינו בשימוש"
+ },
+ "title": "אחסון",
+ "overview": "סקירה כללית",
+ "recordings": {
+ "title": "הקלטות",
+ "earliestRecording": "ההקלטה המוקדמת ביותר הזמינה:",
+ "tips": "ערך זה מייצג את סך האחסון בו משתמשים ההקלטות במסד הנתונים של Frigate. Frigate אינו עוקב אחר ניצול האחסון עבור כל הקבצים בדיסק שלך."
+ }
+ },
+ "cameras": {
+ "title": "מצלמות",
+ "overview": "סקירה כללית",
+ "info": {
+ "aspectRatio": "יחס גובה-רוחב",
+ "cameraProbeInfo": "פרטי בדיקה של מצלמה {{camera}}",
+ "streamDataFromFFPROBE": "נתוני השידור מתקבלים באמצעות ffprobe.",
+ "fetching": "טוען נתוני מצלמה",
+ "stream": "זרם {{idx}}",
+ "video": "וידיאו:",
+ "codec": "מקודד:",
+ "resolution": "רזולוציה:",
+ "fps": "פריימים לשניה:",
+ "audio": "קול:",
+ "error": "שגיאה: {{error}}",
+ "tips": {
+ "title": "טוען נתוני מצלמה"
+ },
+ "unknown": "לא ידוע"
+ },
+ "label": {
+ "detect": "גילוי",
+ "skipped": "דילוג",
+ "ffmpeg": "FFmpeg",
+ "overallDetectionsPerSecond": "סך כל הזיהויים לשנייה",
+ "overallSkippedDetectionsPerSecond": "סה״כ זיהויים שדולגו לשנייה",
+ "cameraFfmpeg": "{{camName}} FFmpeg",
+ "cameraCapture": "{{camName}} לכידה",
+ "cameraDetect": "זיהוי {{camName}}",
+ "cameraDetectionsPerSecond": "מספר הזיהויים של {{camName}} לשנייה",
+ "cameraSkippedDetectionsPerSecond": "כמות הזיהויים שדולגו בשנייה – {{camName}}",
+ "capture": "לכידה",
+ "cameraFramesPerSecond": "{{camName}} פריימים לשנייה",
+ "camera": "מצלמה",
+ "overallFramesPerSecond": "סך כל הפריימים לשנייה"
+ },
+ "toast": {
+ "success": {
+ "copyToClipboard": "העתקת נתוני הבדיקה בוצעה בהצלחה."
+ },
+ "error": {
+ "unableToProbeCamera": "לא ניתן לבדוק את המצלמה: {{errorMessage}}"
+ }
+ },
+ "framesAndDetections": "פריימים / זיהויים"
+ }
+}
diff --git a/web/public/locales/hi/audio.json b/web/public/locales/hi/audio.json
new file mode 100644
index 000000000..afffaf44a
--- /dev/null
+++ b/web/public/locales/hi/audio.json
@@ -0,0 +1,143 @@
+{
+ "babbling": "बड़बड़ाना",
+ "yell": "चिल्लाना",
+ "whispering": "फुसफुसाना",
+ "crying": "रोना",
+ "laughter": "हँसना",
+ "singing": "गाना",
+ "chant": "जपना",
+ "mantra": "मंत्र",
+ "run": "भागना",
+ "sniff": "सूँघना",
+ "sneeze": "छींंकना",
+ "whistling": "सीटी बजाना",
+ "speech": "बोलना",
+ "sigh": "आह भरना",
+ "humming": "गुनगुनाना",
+ "child_singing": "बच्चे का गाना",
+ "groan": "कराहना",
+ "breathing": "साँस लेना",
+ "snoring": "खर्राटे लेना",
+ "cough": "खाँसना",
+ "throat_clearing": "गला साफ़ करना",
+ "footsteps": "कदमों की आहट",
+ "chewing": "चबाना",
+ "biting": "काटना",
+ "gargling": "गरारे करना",
+ "stomach_rumble": "पेट की गुड़गुड़ाहट",
+ "burping": "डकारना",
+ "hiccup": "हिचकी",
+ "fart": "पादना",
+ "heartbeat": "धड़कन",
+ "cheering": "जयकार करना",
+ "pets": "पालतू जानवर",
+ "animal": "जानवर",
+ "children_playing": "बच्चों का खेलना",
+ "crowd": "भीड़",
+ "dog": "कुत्ता",
+ "hiss": "फुफकारना",
+ "neigh": "हिनहिनाना",
+ "cattle": "मवेशी",
+ "moo": "रंभाहट",
+ "goat": "बकरी",
+ "bleat": "मेमियाहट",
+ "hands": "हाथ",
+ "pig": "सुअर",
+ "clapping": "ताली बजाना",
+ "chatter": "गपशप",
+ "finger_snapping": "उँगलियाँ चटकाना",
+ "bark": "भौंकना",
+ "cowbell": "गाय की घंटी",
+ "sheep": "भेड़",
+ "yip": "कूँकना",
+ "livestock": "पशुधन",
+ "horse": "घोड़ा",
+ "cat": "बिल्ली",
+ "chicken": "मुर्गी",
+ "wild_animals": "जंगली जानवर",
+ "bird": "पक्षी",
+ "chirp": "चहचहाना",
+ "roar": "दहाड़ना",
+ "pigeon": "कबूतर",
+ "crow": "कौआ",
+ "flapping_wings": "पंख फड़फड़ाना",
+ "dogs": "कुत्ते",
+ "insect": "कीड़ा",
+ "patter": "पटपटाहट",
+ "cymbal": "झांझ",
+ "tambourine": "डफली",
+ "orchestra": "वाद्यवृंद",
+ "wind_instrument": "वायु वाद्ययंत्र",
+ "bowed_string_instrument": "धनुष तार वाद्ययंत्र",
+ "harp": "हार्प",
+ "bell": "घंटी",
+ "church_bell": "गिरजाघर का घंटा",
+ "accordion": "अकोर्डियन",
+ "opera": "ओपेरा",
+ "disco": "डिस्को",
+ "jazz": "जैज़",
+ "dubstep": "डबस्टेप",
+ "song": "गीत",
+ "lullaby": "लोरी",
+ "sad_music": "दुखभरा संगीत",
+ "tender_music": "कोमल संगीत",
+ "wind": "हवा",
+ "wind_noise": "हवा की आवाज़",
+ "thunderstorm": "आंधी-तूफ़ान",
+ "thunder": "गर्जना",
+ "water": "पानी",
+ "rain": "बारिश",
+ "rain_on_surface": "सतह पर गिरती बारिश",
+ "waterfall": "झरना",
+ "ocean": "सागर",
+ "waves": "लहरें",
+ "stream": "धारा",
+ "steam": "भाप",
+ "vehicle": "वाहन",
+ "car": "गाड़ी",
+ "boat": "नाव",
+ "ship": "जहाज़",
+ "truck": "ट्रक",
+ "bus": "बस",
+ "motor_vehicle": "मोटर वाहन",
+ "motorboat": "इंजन वाली नाव",
+ "sailboat": "पाल वाली नाव",
+ "police_car": "पुलिस की गाड़ी",
+ "saxophone": "सैक्सोफोन",
+ "sitar": "सितार",
+ "music": "संगीत",
+ "snake": "साँप",
+ "mouse": "चूहा",
+ "wedding_music": "शादी का संगीत",
+ "buzz": "भनभनाहट",
+ "fire": "आग",
+ "caw": "कांव कांव करना",
+ "owl": "उल्लू",
+ "mosquito": "मच्छर",
+ "scary_music": "डरावना संगीत",
+ "duck": "बतख",
+ "hoot": "उल्लू की आवाज़",
+ "rustling_leaves": "खड़खड़ाते पत्ते",
+ "rats": "चूहे",
+ "cricket": "झिंगुर",
+ "fly": "मक्खी",
+ "frog": "मेंढक",
+ "croak": "टर्राना",
+ "guitar": "गिटार",
+ "tabla": "तबला",
+ "trumpet": "तुरही",
+ "brass_instrument": "पीतल वाद्ययंत्र",
+ "flute": "बाँसुरी",
+ "clarinet": "क्लैरिनेट",
+ "bicycle_bell": "साइकिल की घंटी",
+ "harmonica": "हारमोनिका",
+ "bagpipes": "बैगपाइप",
+ "angry_music": "क्रोधित संगीत",
+ "music_of_bollywood": "बॉलीवुड संगीत",
+ "happy_music": "खुशहाल संगीत",
+ "exciting_music": "रोमांचक संगीत",
+ "raindrop": "बारिश की बूंद",
+ "rowboat": "चप्पू वाली नाव",
+ "aircraft": "विमान",
+ "bicycle": "साइकिल"
+}
diff --git a/web/public/locales/hi/common.json b/web/public/locales/hi/common.json
new file mode 100644
index 000000000..392c9a844
--- /dev/null
+++ b/web/public/locales/hi/common.json
@@ -0,0 +1,7 @@
+{
+ "time": {
+ "untilForTime": "{{time}} तक",
+ "untilForRestart": "जब तक फ्रिगेट पुनः रीस्टार्ट नहीं हो जाता।",
+ "untilRestart": "रीस्टार्ट होने में"
+ }
+}
diff --git a/web/public/locales/hi/components/auth.json b/web/public/locales/hi/components/auth.json
new file mode 100644
index 000000000..c58f433de
--- /dev/null
+++ b/web/public/locales/hi/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "password": "पासवर्ड",
+ "login": "प्रवेश करें",
+ "errors": {
+ "passwordRequired": "पासवर्ड आवश्यक है",
+ "rateLimit": "दर सीमा पार हो गई है। बाद में पुनः प्रयास करें।",
+ "unknownError": "अज्ञात त्रुटि। प्रविष्टियाँ जांचें।",
+ "usernameRequired": "प्रयोक्ता नाम आवश्यक है",
+ "webUnknownError": "अज्ञात त्रुटि। कंसोल प्रविष्टियाँ जांचें।",
+ "loginFailed": "लॉगिन असफल हुआ"
+ },
+ "user": "प्रयोक्ता नाम"
+ }
+}
diff --git a/web/public/locales/hi/components/camera.json b/web/public/locales/hi/components/camera.json
new file mode 100644
index 000000000..37c5b27ed
--- /dev/null
+++ b/web/public/locales/hi/components/camera.json
@@ -0,0 +1,7 @@
+{
+ "group": {
+ "label": "कैमरा समूह",
+ "add": "कैमरा समूह जोड़ें",
+ "edit": "कैमरा समूह संपादित करें"
+ }
+}
diff --git a/web/public/locales/hi/components/dialog.json b/web/public/locales/hi/components/dialog.json
new file mode 100644
index 000000000..dce6983b5
--- /dev/null
+++ b/web/public/locales/hi/components/dialog.json
@@ -0,0 +1,9 @@
+{
+ "restart": {
+ "title": "क्या आप निश्चित हैं कि आप फ्रिगेट को रीस्टार्ट करना चाहते हैं?",
+ "button": "रीस्टार्ट",
+ "restarting": {
+ "title": "फ्रिगेट रीस्टार्ट हो रहा है"
+ }
+ }
+}
diff --git a/web/public/locales/hi/components/filter.json b/web/public/locales/hi/components/filter.json
new file mode 100644
index 000000000..214179375
--- /dev/null
+++ b/web/public/locales/hi/components/filter.json
@@ -0,0 +1,9 @@
+{
+ "filter": "फ़िल्टर",
+ "labels": {
+ "label": "लेबल",
+ "all": {
+ "title": "सभी लेबल"
+ }
+ }
+}
diff --git a/web/public/locales/hi/components/icons.json b/web/public/locales/hi/components/icons.json
new file mode 100644
index 000000000..7f5236e6b
--- /dev/null
+++ b/web/public/locales/hi/components/icons.json
@@ -0,0 +1,8 @@
+{
+ "iconPicker": {
+ "selectIcon": "चिह्न चुनें",
+ "search": {
+ "placeholder": "चिह्न खोजें..।"
+ }
+ }
+}
diff --git a/web/public/locales/hi/components/input.json b/web/public/locales/hi/components/input.json
new file mode 100644
index 000000000..13b65c133
--- /dev/null
+++ b/web/public/locales/hi/components/input.json
@@ -0,0 +1,10 @@
+{
+ "button": {
+ "downloadVideo": {
+ "label": "वीडियो डाउनलोड करें",
+ "toast": {
+ "success": "आपकी समीक्षा वीडियो डाउनलोड होना शुरू हो गई है।"
+ }
+ }
+ }
+}
diff --git a/web/public/locales/hi/components/player.json b/web/public/locales/hi/components/player.json
new file mode 100644
index 000000000..9b4ed4389
--- /dev/null
+++ b/web/public/locales/hi/components/player.json
@@ -0,0 +1,5 @@
+{
+ "noRecordingsFoundForThisTime": "इस समय का कोई रिकॉर्डिंग नहीं मिला",
+ "noPreviewFound": "कोई प्रीव्यू नहीं मिला",
+ "noPreviewFoundFor": "{{cameraName}} के लिए कोई पूर्वावलोकन नहीं मिला"
+}
diff --git a/web/public/locales/hi/objects.json b/web/public/locales/hi/objects.json
new file mode 100644
index 000000000..436a57668
--- /dev/null
+++ b/web/public/locales/hi/objects.json
@@ -0,0 +1,17 @@
+{
+ "horse": "घोड़ा",
+ "sheep": "भेड़",
+ "bark": "भौंकना",
+ "animal": "जानवर",
+ "dog": "कुत्ता",
+ "cat": "बिल्ली",
+ "goat": "बकरी",
+ "boat": "नाव",
+ "bus": "बस",
+ "bird": "पक्षी",
+ "mouse": "चूहा",
+ "vehicle": "वाहन",
+ "car": "गाड़ी",
+ "person": "व्यक्ति",
+ "bicycle": "साइकिल"
+}
diff --git a/web/public/locales/hi/views/configEditor.json b/web/public/locales/hi/views/configEditor.json
new file mode 100644
index 000000000..784f8ec46
--- /dev/null
+++ b/web/public/locales/hi/views/configEditor.json
@@ -0,0 +1,15 @@
+{
+ "saveOnly": "केवल सहेजें",
+ "saveAndRestart": "सहेजें और पुनः प्रारंभ करें",
+ "configEditor": "विन्यास संपादक",
+ "copyConfig": "विन्यास कॉपी करें",
+ "toast": {
+ "error": {
+ "savingError": "विन्यास सहेजने में त्रुटि हुई"
+ },
+ "success": {
+ "copyToClipboard": "विन्यास क्लिपबोर्ड पर कॉपी कर लिया गया है।"
+ }
+ },
+ "documentTitle": "विन्यास संपादक - Frigate"
+}
diff --git a/web/public/locales/hi/views/events.json b/web/public/locales/hi/views/events.json
new file mode 100644
index 000000000..b6fba2aa1
--- /dev/null
+++ b/web/public/locales/hi/views/events.json
@@ -0,0 +1,4 @@
+{
+ "alerts": "अलर्टस",
+ "detections": "खोजें"
+}
diff --git a/web/public/locales/hi/views/explore.json b/web/public/locales/hi/views/explore.json
new file mode 100644
index 000000000..bb214ba12
--- /dev/null
+++ b/web/public/locales/hi/views/explore.json
@@ -0,0 +1,4 @@
+{
+ "documentTitle": "अन्वेषण करें - फ्रिगेट",
+ "generativeAI": "जनरेटिव ए आई"
+}
diff --git a/web/public/locales/hi/views/exports.json b/web/public/locales/hi/views/exports.json
new file mode 100644
index 000000000..97a0f0e53
--- /dev/null
+++ b/web/public/locales/hi/views/exports.json
@@ -0,0 +1,4 @@
+{
+ "documentTitle": "निर्यात - फ्रिगेट",
+ "search": "खोजें"
+}
diff --git a/web/public/locales/hi/views/faceLibrary.json b/web/public/locales/hi/views/faceLibrary.json
new file mode 100644
index 000000000..5c8de952e
--- /dev/null
+++ b/web/public/locales/hi/views/faceLibrary.json
@@ -0,0 +1,6 @@
+{
+ "description": {
+ "addFace": "फेस लाइब्रेरी में नया संग्रह जोड़ने की प्रक्रिया को आगे बढ़ाएं।",
+ "placeholder": "इस संग्रह का नाम बताएं"
+ }
+}
diff --git a/web/public/locales/hi/views/live.json b/web/public/locales/hi/views/live.json
new file mode 100644
index 000000000..86d2a9235
--- /dev/null
+++ b/web/public/locales/hi/views/live.json
@@ -0,0 +1,4 @@
+{
+ "documentTitle": "लाइव - फ्रिगेट",
+ "documentTitle.withCamera": "{{camera}} - लाइव - फ्रिगेट"
+}
diff --git a/web/public/locales/hi/views/recording.json b/web/public/locales/hi/views/recording.json
new file mode 100644
index 000000000..a9846e445
--- /dev/null
+++ b/web/public/locales/hi/views/recording.json
@@ -0,0 +1,11 @@
+{
+ "calendar": "पंचांग",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "कोई मान्य समय सीमा चयनित नहीं है",
+ "endTimeMustAfterStartTime": "समाप्ति समय प्रारंभ समय के बाद होना चाहिए"
+ }
+ },
+ "export": "निर्यात",
+ "filter": "फ़िल्टर"
+}
diff --git a/web/public/locales/hi/views/search.json b/web/public/locales/hi/views/search.json
new file mode 100644
index 000000000..b38dd11af
--- /dev/null
+++ b/web/public/locales/hi/views/search.json
@@ -0,0 +1,4 @@
+{
+ "search": "खोजें",
+ "savedSearches": "सहेजी गई खोजें"
+}
diff --git a/web/public/locales/hi/views/settings.json b/web/public/locales/hi/views/settings.json
new file mode 100644
index 000000000..5fe3a3233
--- /dev/null
+++ b/web/public/locales/hi/views/settings.json
@@ -0,0 +1,6 @@
+{
+ "documentTitle": {
+ "default": "सेटिंग्स - फ्रिगेट",
+ "authentication": "प्रमाणीकरण सेटिंग्स - फ्रिगेट"
+ }
+}
diff --git a/web/public/locales/hi/views/system.json b/web/public/locales/hi/views/system.json
new file mode 100644
index 000000000..b29ff9abb
--- /dev/null
+++ b/web/public/locales/hi/views/system.json
@@ -0,0 +1,6 @@
+{
+ "documentTitle": {
+ "cameras": "कैमरा आँकड़े - फ्रिगेट",
+ "storage": "भंडारण आँकड़े - फ्रिगेट"
+ }
+}
diff --git a/web/public/locales/hu/audio.json b/web/public/locales/hu/audio.json
new file mode 100644
index 000000000..ce8fab8c3
--- /dev/null
+++ b/web/public/locales/hu/audio.json
@@ -0,0 +1,160 @@
+{
+ "speech": "Beszéd",
+ "wild_animals": "Vadállatok",
+ "synthetic_singing": "Szintetikus éneklés",
+ "cheering": "Éljenzés",
+ "chatter": "Csevegés",
+ "bird": "Madár",
+ "babbling": "Gügyögés",
+ "yell": "Kiabálás",
+ "whispering": "Suttogás",
+ "laughter": "Nevetés",
+ "bellow": "Ordítás",
+ "whoop": "Ujjongás",
+ "snicker": "Kuncogás",
+ "crying": "Sírás",
+ "sigh": "Sóhajtás",
+ "singing": "Éneklés",
+ "choir": "Kórus",
+ "yodeling": "Jódlizás",
+ "chant": "Dalolás",
+ "mantra": "Mantrázás",
+ "child_singing": "Gyermek éneklés",
+ "rapping": "Rappelés",
+ "groan": "Nyögés",
+ "grunt": "Morgás",
+ "whistling": "Fütyülés",
+ "breathing": "Légzés",
+ "wheeze": "Zihálás",
+ "snoring": "Horkolás",
+ "gasp": "Lihegés",
+ "pant": "Lihegés",
+ "snort": "Horkantás",
+ "cough": "Köhögés",
+ "sneeze": "Tüsszentés",
+ "sniff": "Szimatolás",
+ "run": "Futás",
+ "shuffle": "Csoszogás",
+ "footsteps": "Lépés",
+ "chewing": "Rágás",
+ "biting": "Maró",
+ "gargling": "Gargalizálás",
+ "burping": "Böfögés",
+ "hiccup": "Csuklás",
+ "fart": "Szellentés",
+ "hands": "Kezek",
+ "finger_snapping": "Csettintés",
+ "clapping": "Tapsolás",
+ "heartbeat": "Szívdobbanás",
+ "heart_murmur": "Szívzörej",
+ "applause": "Taps",
+ "crowd": "Tömeg",
+ "children_playing": "Gyerekek játszanak",
+ "pets": "Háziállatok",
+ "dog": "Kutya",
+ "bark": "Ugatás",
+ "yip": "Csaholás",
+ "howl": "Bömbölés",
+ "bow_wow": "Vau vau",
+ "growling": "Morgás",
+ "whimper_dog": "Kutya nyüszítés",
+ "cat": "Macska",
+ "purr": "Dorombolás",
+ "meow": "Nyávogás",
+ "hiss": "Sziszegés",
+ "caterwaul": "Nyivákolás",
+ "livestock": "Állatállomány",
+ "horse": "Ló",
+ "clip_clop": "Lódobogás",
+ "neigh": "Nyerítés",
+ "cattle": "Marha",
+ "moo": "Tehénbőgés",
+ "cowbell": "Kolomp",
+ "pig": "Disznó",
+ "oink": "Disznó röfögés",
+ "goat": "Kecske",
+ "bleat": "Bégetés",
+ "sheep": "Juh",
+ "fowl": "Szárnyas",
+ "chicken": "Csirke",
+ "cluck": "Kotkodácsolás",
+ "cock_a_doodle_doo": "Kukorékolás",
+ "turkey": "Pulyka",
+ "gobble": "Kurrogás",
+ "duck": "Kacsa",
+ "quack": "Hápogás",
+ "honk": "Gágogás",
+ "roaring_cats": "Ordító macskák",
+ "roar": "Üvöltés",
+ "chirp": "Csiripelés",
+ "squawk": "Rikácsolás",
+ "pigeon": "Galamb",
+ "coo": "Turbékolás",
+ "crow": "Varjú",
+ "caw": "Károgás",
+ "owl": "Bagoly",
+ "hoot": "Huhogás",
+ "flapping_wings": "Csapkodó szárnyak",
+ "dogs": "Kutyák",
+ "rats": "Patkányok",
+ "mouse": "Egér",
+ "patter": "Kopog",
+ "insect": "Rovar",
+ "cricket": "Tücsök",
+ "mosquito": "Szúnyog",
+ "fly": "Légy",
+ "buzz": "Zümmögés",
+ "frog": "Béka",
+ "croak": "Brekegés",
+ "snake": "Kígyó",
+ "rattle": "Csörgés",
+ "whale_vocalization": "Bálna bőgés",
+ "music": "Zene",
+ "musical_instrument": "Hangszer",
+ "plucked_string_instrument": "Pengetős hangszer",
+ "guitar": "Gitár",
+ "electric_guitar": "Elektromos gitár",
+ "bass_guitar": "Basszusgitár",
+ "acoustic_guitar": "Akusztikus gitár",
+ "steel_guitar": "Acél gitár",
+ "tapping": "Tappelés",
+ "strum": "Zongora verés",
+ "mandolin": "Mandolin",
+ "banjo": "Bendzsó",
+ "zither": "Citera",
+ "sitar": "Szitár",
+ "ukulele": "Ukulele",
+ "keyboard": "Szintetizátor",
+ "piano": "Zongora",
+ "electric_piano": "Elektromos zongora",
+ "organ": "Orgona",
+ "hammond_organ": "Hammond orgona",
+ "electronic_organ": "Elektromos orgona",
+ "synthesizer": "Szintetizátor",
+ "sampler": "Sampler",
+ "harpsichord": "Csembaló",
+ "percussion": "Ütős hangszer",
+ "drum_kit": "Dobszerkó",
+ "drum_machine": "Dobgép",
+ "drum": "Dob",
+ "snare_drum": "Pergődob",
+ "rimshot": "Peremütés",
+ "drum_roll": "Dobpergés",
+ "timpani": "Üstdob",
+ "bass_drum": "Basszusdob",
+ "tabla": "Tablá",
+ "cymbal": "Cintányér",
+ "hi_hat": "Lábcin",
+ "boat": "Hajó",
+ "car": "Autó",
+ "bus": "Busz",
+ "motorcycle": "Motor",
+ "train": "Vonat",
+ "bicycle": "Bicikli",
+ "scream": "Sikoly",
+ "throat_clearing": "Torokköszörülés",
+ "stomach_rumble": "Gyomorkorgás",
+ "animal": "Állat",
+ "goose": "Liba",
+ "humming": "Zümmögés"
+}
diff --git a/web/public/locales/hu/common.json b/web/public/locales/hu/common.json
new file mode 100644
index 000000000..623f9d3b0
--- /dev/null
+++ b/web/public/locales/hu/common.json
@@ -0,0 +1,138 @@
+{
+ "time": {
+ "untilForTime": "{{time}} ideig",
+ "s": "{{time}} másodperc",
+ "untilForRestart": "Amíg a Frigate újraindul.",
+ "untilRestart": "Amíg újraindul",
+ "justNow": "Most",
+ "ago": "{{timeAgo}} ezelőtt",
+ "today": "Ma",
+ "yesterday": "Tegnap",
+ "last7": "Elmúlt 7 nap",
+ "last14": "Elmúlt 14 nap",
+ "last30": "Elmúlt 30 nap",
+ "thisWeek": "Ezen a héten",
+ "lastWeek": "Előző héten",
+ "thisMonth": "Ebben a hónapban",
+ "lastMonth": "Előző hónap",
+ "5minutes": "5 perc",
+ "10minutes": "10 perc",
+ "30minutes": "30 perc",
+ "1hour": "1 óra",
+ "12hours": "12 óra",
+ "24hours": "24 óra",
+ "pm": "PM",
+ "am": "AM",
+ "yr": "{{time}} év",
+ "mo": "{{time}} hónap",
+ "d": "{{time}} nap",
+ "m": "{{time}} perc",
+ "hour_one": "{{time}} óra",
+ "hour_other": "{{time}} órák",
+ "h": "{{time}} óra",
+ "minute_one": "{{time}} perc",
+ "minute_other": "{{time}} percek",
+ "second_one": "{{time}} másodperc",
+ "second_other": "{{time}} másodpercek",
+ "year_one": "{{time}} év",
+ "year_other": "{{time}} évek",
+ "month_one": "{{time}} hónap",
+ "month_other": "{{time}} hónapok",
+ "day_one": "{{time}} nap",
+ "day_other": "{{time}} napok"
+ },
+ "menu": {
+ "darkMode": {
+ "label": "Sötét Mód",
+ "withSystem": {
+ "label": "Használd a rendszerbeállításokat a világos vagy sötét mód megheghatározásához"
+ },
+ "dark": "Sötét",
+ "light": "Világos"
+ },
+ "withSystem": "Rendszer",
+ "theme": {
+ "default": "Alap",
+ "nord": "Nord",
+ "red": "Piros",
+ "highcontrast": "Nagy Kontrasztarány",
+ "label": "Téma",
+ "blue": "Kék",
+ "green": "Zöld"
+ },
+ "documentation": {
+ "title": "Dokumentáció",
+ "label": "Frigate dokumentáció"
+ },
+ "help": "Segítség",
+ "explore": "Felfedezés",
+ "user": {
+ "logout": "Kijelentkezés",
+ "title": "Felhasználó",
+ "account": "Fiók",
+ "current": "Jelenlegi Felhazsnáló: {{user}}",
+ "anonymous": "anoním",
+ "setPassword": "Jelszó Beállítása"
+ },
+ "export": "Exportálás",
+ "language": {
+ "ca": "Katalán",
+ "withSystem": {
+ "label": "Használd a rendszerbeállításoknál megadott nyelvet"
+ }
+ },
+ "uiPlayground": "UI játszótér",
+ "faceLibrary": "Arc Könyvtár",
+ "restart": "Frigate Újraindítása",
+ "live": {
+ "title": "Élő",
+ "allCameras": "Minden Kamera",
+ "cameras": {
+ "title": "Kamerák",
+ "count_one": "{{count}} Kamera",
+ "count_other": "{{count}} Kamerák"
+ }
+ },
+ "review": "Áttekintés",
+ "appearance": "Megjelenés"
+ },
+ "role": {
+ "viewer": "Néző",
+ "title": "Szerep",
+ "admin": "Adminisztrátor",
+ "desc": "Az adminisztrátoroknak teljes hozzáférése van az összes feature-höz. A nézők csak a kamerákat láthatják, áttekinthetik az elemeket és az előzményeket a UI-on."
+ },
+ "pagination": {
+ "next": {
+ "label": "Következő oldal",
+ "title": "Következő"
+ },
+ "more": "Több oldal",
+ "previous": {
+ "label": "Vissza az előző oldalra",
+ "title": "Előző"
+ },
+ "label": "lapozás"
+ },
+ "accessDenied": {
+ "documentTitle": "Belépés Megtagadva - Frigate",
+ "title": "Belépés Megtagadva",
+ "desc": "Nincs jogolultsága ehhez az oldalhoz."
+ },
+ "notFound": {
+ "title": "404",
+ "desc": "Oldal nem található",
+ "documentTitle": "Nem található - Frigate"
+ },
+ "toast": {
+ "copyUrlToClipboard": "URL kimásolva a vágólapra.",
+ "save": {
+ "title": "Mentés",
+ "error": {
+ "title": "Sikertelen konfiguráció mentés: {{errorMessage}}",
+ "noMessage": "Konfigurációs változtatások mentése sikertelen"
+ }
+ }
+ },
+ "selectItem": "KIválasztani {{item}}-et"
+}
diff --git a/web/public/locales/hu/components/auth.json b/web/public/locales/hu/components/auth.json
new file mode 100644
index 000000000..ba41600b0
--- /dev/null
+++ b/web/public/locales/hu/components/auth.json
@@ -0,0 +1,14 @@
+{
+ "form": {
+ "user": "Felhasználói név",
+ "password": "Jelszó",
+ "login": "Bejelentkezés",
+ "errors": {
+ "usernameRequired": "Felhasználónév szükséges",
+ "passwordRequired": "Jelszó szükséges",
+ "loginFailed": "Sikertelen bejelentkezés",
+ "unknownError": "Ismeretlen hiba. Ellenőrizze a naplókat.",
+ "webUnknownError": "Ismeretlen hiba. Ellenőrizze a konzol naplókat."
+ }
+ }
+}
diff --git a/web/public/locales/hu/components/camera.json b/web/public/locales/hu/components/camera.json
new file mode 100644
index 000000000..07fae6e0c
--- /dev/null
+++ b/web/public/locales/hu/components/camera.json
@@ -0,0 +1,21 @@
+{
+ "group": {
+ "label": "Kamera Csoport",
+ "delete": {
+ "confirm": {
+ "desc": "Biztosan törölni akarja a következő kamera csoportot {{name}}?",
+ "title": "Törlés megerősítése"
+ },
+ "label": "Kamera csoport törlése"
+ },
+ "add": "Kamera csoport hozzáadása",
+ "edit": "Kamera csoport módosítása",
+ "name": {
+ "label": "Név",
+ "placeholder": "Adjon meg egy nevet…",
+ "errorMessage": {
+ "mustLeastCharacters": "A kamera csoport nevének legalább 2 karakterből kell állnia."
+ }
+ }
+ }
+}
diff --git a/web/public/locales/hu/components/dialog.json b/web/public/locales/hu/components/dialog.json
new file mode 100644
index 000000000..10ba3e818
--- /dev/null
+++ b/web/public/locales/hu/components/dialog.json
@@ -0,0 +1,26 @@
+{
+ "restart": {
+ "title": "Biztosan újra szeretnéd indítani a Frigate-ot?",
+ "button": "Újraindítás",
+ "restarting": {
+ "title": "A Frigate újraindul",
+ "content": "Az oldal újrtölt {{countdown}} másodperc múlva.",
+ "button": "Erőltetett újraindítás azonnal"
+ }
+ },
+ "explore": {
+ "plus": {
+ "submitToPlus": {
+ "label": "Küldés a Frigate+-nak"
+ },
+ "review": {
+ "state": {
+ "submitted": "Elküldve"
+ },
+ "question": {
+ "ask_a": "Ez a tárgy egy {{label}}?"
+ }
+ }
+ }
+ }
+}
diff --git a/web/public/locales/hu/components/filter.json b/web/public/locales/hu/components/filter.json
new file mode 100644
index 000000000..510815d1d
--- /dev/null
+++ b/web/public/locales/hu/components/filter.json
@@ -0,0 +1,19 @@
+{
+ "filter": "Szűrő",
+ "labels": {
+ "label": "Cimkék",
+ "all": {
+ "title": "Minden cimke",
+ "short": "Cimkék"
+ },
+ "count_other": "{{count}} cimke",
+ "count_one": "{{count}} Cimke"
+ },
+ "zones": {
+ "label": "Zónák",
+ "all": {
+ "title": "Minden zóna",
+ "short": "Zónák"
+ }
+ }
+}
diff --git a/web/public/locales/hu/components/icons.json b/web/public/locales/hu/components/icons.json
new file mode 100644
index 000000000..5145dc3ed
--- /dev/null
+++ b/web/public/locales/hu/components/icons.json
@@ -0,0 +1,8 @@
+{
+ "iconPicker": {
+ "selectIcon": "Válassz ikont",
+ "search": {
+ "placeholder": "Ikon keresése…"
+ }
+ }
+}
diff --git a/web/public/locales/hu/components/input.json b/web/public/locales/hu/components/input.json
new file mode 100644
index 000000000..dd86ee6d0
--- /dev/null
+++ b/web/public/locales/hu/components/input.json
@@ -0,0 +1,7 @@
+{
+ "button": {
+ "downloadVideo": {
+ "label": "Videó Letöltése"
+ }
+ }
+}
diff --git a/web/public/locales/hu/components/player.json b/web/public/locales/hu/components/player.json
new file mode 100644
index 000000000..5d1745cc5
--- /dev/null
+++ b/web/public/locales/hu/components/player.json
@@ -0,0 +1,14 @@
+{
+ "noRecordingsFoundForThisTime": "Ebben az időpontban nem található felvétel",
+ "noPreviewFound": "Nincs elérhető előkép",
+ "submitFrigatePlus": {
+ "title": "Elküldi ezt a képet a Frigate+-nak?",
+ "submit": "Küldés"
+ },
+ "noPreviewFoundFor": "Nem található előnézet {{cameraName}}-hoz/-hez/-höz",
+ "livePlayerRequiredIOSVersion": "iOS 17.1 vagy újabb szükséges ehhez az élő adás típushoz.",
+ "streamOffline": {
+ "title": "Adás Nem Elérhető"
+ },
+ "cameraDisabled": "Kamera kikapcsolva"
+}
diff --git a/web/public/locales/hu/objects.json b/web/public/locales/hu/objects.json
new file mode 100644
index 000000000..58ed9674a
--- /dev/null
+++ b/web/public/locales/hu/objects.json
@@ -0,0 +1,21 @@
+{
+ "person": "Személy",
+ "bicycle": "Bicikli",
+ "car": "Autó",
+ "motorcycle": "Motor",
+ "airplane": "Repülőgép",
+ "bus": "Busz",
+ "train": "Vonat",
+ "boat": "Hajó",
+ "dog": "Kutya",
+ "cat": "Macska",
+ "horse": "Ló",
+ "sheep": "Juh",
+ "bird": "Madár",
+ "mouse": "Egér",
+ "keyboard": "Szintetizátor",
+ "animal": "Állat",
+ "bark": "Ugatás",
+ "goat": "Kecske",
+ "traffic_light": "Jelzőlámpa"
+}
diff --git a/web/public/locales/hu/views/configEditor.json b/web/public/locales/hu/views/configEditor.json
new file mode 100644
index 000000000..b921c987d
--- /dev/null
+++ b/web/public/locales/hu/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "documentTitle": "Konfiguráció Szerkesztő - Frigate",
+ "configEditor": "Konfiguráció szerkesztő",
+ "copyConfig": "Konfiguráció másolása",
+ "saveAndRestart": "Mentés és Újraindítás",
+ "saveOnly": "Csak mentés",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Konfiguráció átmásolva a vágólapra."
+ },
+ "error": {
+ "savingError": "Hiba a konfiguráció mentésekor"
+ }
+ },
+ "confirm": "Kilép mentés nélkül?"
+}
diff --git a/web/public/locales/hu/views/events.json b/web/public/locales/hu/views/events.json
new file mode 100644
index 000000000..71618b07a
--- /dev/null
+++ b/web/public/locales/hu/views/events.json
@@ -0,0 +1,15 @@
+{
+ "alerts": "Riasztások",
+ "empty": {
+ "detection": "Nincs megnézendő észlelés",
+ "alert": "Nincs megnézendő riasztás",
+ "motion": "Nem található mozgás"
+ },
+ "detections": "Észlelések",
+ "motion": {
+ "label": "Mozgás",
+ "only": "Csak mozgások"
+ },
+ "allCameras": "Összes kamera",
+ "timeline": "Idővonal"
+}
diff --git a/web/public/locales/hu/views/explore.json b/web/public/locales/hu/views/explore.json
new file mode 100644
index 000000000..095eb39ec
--- /dev/null
+++ b/web/public/locales/hu/views/explore.json
@@ -0,0 +1,176 @@
+{
+ "documentTitle": "Tallózás - Frigate",
+ "itemMenu": {
+ "downloadVideo": {
+ "label": "Video letöltése",
+ "aria": "Video letöltése"
+ },
+ "submitToPlus": {
+ "aria": "Küldés a Frigate Plus-nak",
+ "label": "Küldés a Frigate+-nak"
+ },
+ "deleteTrackedObject": {
+ "label": "Követett tárgy törlése"
+ },
+ "viewObjectLifecycle": {
+ "label": "Tárgy életciklusának megtekintése",
+ "aria": "Mutasd a tárgy életciklusát"
+ },
+ "findSimilar": {
+ "label": "Keress hasonlót",
+ "aria": "Keress hasonló követett tárgyat"
+ },
+ "viewInHistory": {
+ "label": "Megtekintés az Előzményekben",
+ "aria": "Megtekintés az Előzményekben"
+ },
+ "downloadSnapshot": {
+ "aria": "Pillanatfelvétel letöltése",
+ "label": "Pillanatfelvétel letöltése"
+ }
+ },
+ "details": {
+ "editLPR": {
+ "title": "Rendszám módosítása",
+ "desc": "Új rendszám hozzáadása ehhez {{label}}",
+ "descNoLabel": "Adjon hozzá egy új rendszámot ehhez a követett tárgyhoz"
+ },
+ "label": "Cimke",
+ "editSubLabel": {
+ "desc": "Új alcimke létrehozása ehhez a cimkéhez {{label}}",
+ "title": "Alcimke módosítása",
+ "descNoLabel": "Adjon hozzá egy új alcimkét ehhez a követett tárgyhoz"
+ },
+ "camera": "Kamera",
+ "zones": "Zónák",
+ "description": {
+ "placeholder": "Követett tárgy leírása",
+ "label": "Leírás",
+ "aiTips": "A Frigate nem fog igényelni leírást a Generatív MI szolgáltatójától, amíg a követett tárgy életciklusa be nem fejeződött."
+ },
+ "timestamp": "Időbélyeg",
+ "estimatedSpeed": "Becsült Sebesség",
+ "objects": "Tárgyak",
+ "topScore": {
+ "label": "Legnagyobb Pontszám"
+ },
+ "recognizedLicensePlate": "Felismert Rendszám",
+ "tips": {
+ "descriptionSaved": "Leírás sikeresen mentve",
+ "saveDescriptionFailed": "Leírás frissítése sikertelen: {{errorMessage}}"
+ },
+ "item": {
+ "toast": {
+ "error": {
+ "updatedLPRFailed": "Rendszám frissítése sikertelen: {{errorMessage}}",
+ "updatedSublabelFailed": "Alcimke frissítése sikertelen: {{errorMessage}}"
+ },
+ "success": {
+ "updatedSublabel": "Az alcimke sikeresen frissítve.",
+ "updatedLPR": "Rendszám sikeresen frissítve."
+ }
+ },
+ "button": {
+ "viewInExplore": "Mutasd a Felfedezésben"
+ }
+ },
+ "snapshotScore": {
+ "label": "Pillanatfelvétel Pontszáma"
+ },
+ "regenerateFromThumbnails": "Újragenerálás kisképből",
+ "regenerateFromSnapshot": "Újragenerálás pillanatfelvételből",
+ "button": {
+ "regenerate": {
+ "label": "Követett tárgy leírásának újragenerálása",
+ "title": "Újragenerálás"
+ },
+ "findSimilar": "Keress Hasonlót"
+ },
+ "expandRegenerationMenu": "Újragenerálási menü kiterjesztése"
+ },
+ "searchResult": {
+ "deleteTrackedObject": {
+ "toast": {
+ "error": "Hiba a követett tárgy törlése közben: {{errorMessage}}",
+ "success": "Követett tárgy sikeresen törölve."
+ }
+ }
+ },
+ "generativeAI": "Generatív MI",
+ "exploreIsUnavailable": {
+ "title": "Felfedezés nem elérhető",
+ "embeddingsReindexing": {
+ "startingUp": "Indulás…",
+ "estimatedTime": "Becsült hátralevő idő:",
+ "finishingShortly": "Hamarosan végez",
+ "step": {
+ "thumbnailsEmbedded": "Beágyazott ikonok: ",
+ "descriptionsEmbedded": "Beágyazott leírások: ",
+ "trackedObjectsProcessed": "Feldolgozott követett tárgyak: "
+ }
+ },
+ "downloadingModels": {
+ "tips": {
+ "documentation": "Olvassa el a leírást"
+ },
+ "setup": {
+ "textModel": "Szöveg modell",
+ "textTokenizer": "Szöveg tokenizáló"
+ },
+ "error": "Hiba történt. Ellenőrizze a Frigate naplókat."
+ }
+ },
+ "noTrackedObjects": "Nincs követett tárgy",
+ "trackedObjectsCount_one": "{{count}} követett tárgy. ",
+ "trackedObjectsCount_other": "{{count}} követett tárgy. ",
+ "dialog": {
+ "confirmDelete": {
+ "title": "Törlés megerősítése"
+ }
+ },
+ "fetchingTrackedObjectsFailed": "Hiba a követett tárgyak betöltése közben: {{errorMessage}}",
+ "objectLifecycle": {
+ "title": "Tárgy Életciklus",
+ "noImageFound": "Ehhez az időbélyeghez nem található kép.",
+ "createObjectMask": "Tárgy Maszk Létrehozása",
+ "scrollViewTips": "Görgessen, hogy megnézze ezen tárgy életciklusának jelentős pillanatait.",
+ "lifecycleItemDesc": {
+ "heard": "{{label}} meghallva",
+ "external": "{{label}} észlelve",
+ "header": {
+ "zones": "Zónák",
+ "ratio": "Arány",
+ "area": "Körzet"
+ },
+ "active": "{{label}} aktiválódott",
+ "attribute": {
+ "other": "{{label}} felismerve mint {{attribute}}",
+ "faceOrLicense_plate": "{{attribute}} észlelve {{label}}-hoz/-hez/-höz"
+ },
+ "entered_zone": "{{label}} belépett {{zones}}-ba/-be",
+ "visible": "{{label}} észlelve"
+ },
+ "annotationSettings": {
+ "offset": {
+ "documentation": "Olvassa el a leírást "
+ },
+ "showAllZones": {
+ "desc": "Mindig mutasd a képen a zónákat, ahol a tárgy belépett a zónába.",
+ "title": "Mutasd az Összes Zónát"
+ }
+ },
+ "carousel": {
+ "next": "Következő dia",
+ "previous": "Előző dia"
+ },
+ "trackedPoint": "Követett Pont"
+ },
+ "type": {
+ "video": "videó",
+ "object_lifecycle": "tárgy életciklus",
+ "details": "részletek",
+ "snapshot": "pillanatfelvétel"
+ },
+ "trackedObjectDetails": "Követett Tárgy Részletei",
+ "exploreMore": "Fedezzen fel több {{label}} tárgyat"
+}
diff --git a/web/public/locales/hu/views/exports.json b/web/public/locales/hu/views/exports.json
new file mode 100644
index 000000000..e7832d0c2
--- /dev/null
+++ b/web/public/locales/hu/views/exports.json
@@ -0,0 +1,10 @@
+{
+ "documentTitle": "Exportálás - Frigate",
+ "search": "Keresés",
+ "noExports": "Export nem található",
+ "deleteExport.desc": "Biztos, hogy törölni akarja {{exportName}}-t?",
+ "deleteExport": "Export törlése",
+ "editExport": {
+ "title": "Exportálás átnevezése"
+ }
+}
diff --git a/web/public/locales/hu/views/faceLibrary.json b/web/public/locales/hu/views/faceLibrary.json
new file mode 100644
index 000000000..d7d72b446
--- /dev/null
+++ b/web/public/locales/hu/views/faceLibrary.json
@@ -0,0 +1,74 @@
+{
+ "renameFace": {
+ "title": "Arc átnevezése",
+ "desc": "Adjon meg egy új nevet {{name}}-nak/-nek"
+ },
+ "details": {
+ "subLabelScore": "Alcimke érték",
+ "unknown": "Ismeretlen",
+ "person": "Ember",
+ "timestamp": "Időbélyeg",
+ "face": "Arc részletek"
+ },
+ "button": {
+ "deleteFace": "Arc törlése",
+ "renameFace": "Arc átnevezése",
+ "deleteFaceAttempts": "Arcok törlése",
+ "addFace": "Arc hozzáadása",
+ "uploadImage": "Kép feltöltése"
+ },
+ "collections": "Gyűjtemények",
+ "steps": {
+ "description": {
+ "uploadFace": "Töltsön fel egy képet {{name}}-ről amin szemből látható. A képen nem szükséges, hogy csak az arc legyen látható."
+ },
+ "faceName": "Adjon meg egy arcnevet",
+ "uploadFace": "Arckép feltöltése",
+ "nextSteps": "Következő lépések"
+ },
+ "deleteFaceAttempts": {
+ "title": "Arcok törlése"
+ },
+ "uploadFaceImage": {
+ "title": "Arckép feltöltése"
+ },
+ "createFaceLibrary": {
+ "title": "Gyűjtemény létrehozása",
+ "desc": "Új gyűjtemény létrehozása",
+ "new": "Új arc létrhozása"
+ },
+ "description": {
+ "placeholder": "Adj nevet ennek a gyűjteménynek",
+ "invalidName": "Nem megfelelő név. A nevek csak betűket, számokat, szóközöket, aposztrófokat, alulhúzásokat és kötőjeleket tartalmazhatnak."
+ },
+ "selectFace": "Arc kiválasztása",
+ "deleteFaceLibrary": {
+ "title": "Név törlése",
+ "desc": "Biztosan törölni akarja a {{name}} gyűjteményt? Ezzel véglegesen törli a párosított arcokat."
+ },
+ "imageEntry": {
+ "dropActive": "Húzza a képet ide…",
+ "validation": {
+ "selectImage": "Kérem válasszon egy képet."
+ },
+ "maxSize": "Maximális méret: {{size}} MB"
+ },
+ "trainFaceAs": "Arc tanítása mint:",
+ "trainFace": "Arc tanítása",
+ "toast": {
+ "success": {
+ "addFaceLibrary": "{{name}} sikeresen hozzáadva a az Arc Könyvtárhoz!",
+ "uploadedImage": "A kép sikeresen feltöltve.",
+ "deletedName_one": "{{count}} arc sikeresen törölve.",
+ "deletedName_other": "{{count}} arc sikeresen törölve."
+ }
+ },
+ "readTheDocs": "Olvassa el a dokumentációt",
+ "nofaces": "Nincs elérhető arc",
+ "documentTitle": "Arc könyvtár - Frigate",
+ "train": {
+ "title": "Vonat"
+ },
+ "pixels": "{{area}}px",
+ "selectItem": "KIválasztani {{item}}-et"
+}
diff --git a/web/public/locales/hu/views/live.json b/web/public/locales/hu/views/live.json
new file mode 100644
index 000000000..4842f7029
--- /dev/null
+++ b/web/public/locales/hu/views/live.json
@@ -0,0 +1,114 @@
+{
+ "twoWayTalk": {
+ "enable": "Kétirányú kommunikáció engedélyezése",
+ "disable": "Kétirányú kommunikáció tiltása"
+ },
+ "documentTitle": "Élő - Frigate",
+ "lowBandwidthMode": "Alacsony felbontású mód",
+ "documentTitle.withCamera": "{{camera}} - Élő - Frigate",
+ "cameraAudio": {
+ "disable": "Kamera hangjának kikapcsolása",
+ "enable": "Kamera hangjának bekapcsolása"
+ },
+ "ptz": {
+ "move": {
+ "clickMove": {
+ "label": "Kattintson a képre a kamera középre igazításához"
+ },
+ "left": {
+ "label": "PTZ kamera balra mozgatása"
+ },
+ "up": {
+ "label": "PTZ kamera felfele mozgatása"
+ },
+ "down": {
+ "label": "PTZ kamera lefele mozgatása"
+ },
+ "right": {
+ "label": "PTZ kamera jobbra mozgatása"
+ }
+ },
+ "zoom": {
+ "in": {
+ "label": "PTZ kamera közelítés"
+ },
+ "out": {
+ "label": "PTZ kamera távolodás"
+ }
+ },
+ "frame": {
+ "center": {
+ "label": "Kattinston a képre a PTZ kamera középre igazításához"
+ }
+ }
+ },
+ "camera": {
+ "enable": "Kamera Engedélyezése",
+ "disable": "Kamera Kikapcsolása"
+ },
+ "muteCameras": {
+ "enable": "Minden Kamera Némítása",
+ "disable": "Minden Kamera Felhangosítása"
+ },
+ "detect": {
+ "enable": "Észlelés Engedélyezése",
+ "disable": "Észlelés Kikapcsolása"
+ },
+ "recording": {
+ "enable": "Felvétel Készítés Engedélyezése",
+ "disable": "Felvétel Készítés Kikapcsolása"
+ },
+ "snapshots": {
+ "enable": "Pillanatfelvétel Engedélyezése",
+ "disable": "Pillanatfelvétel Kikapcsolása"
+ },
+ "audioDetect": {
+ "enable": "Hang Észlelés Engedélyezése",
+ "disable": "Hang Észlelés Kikapcsolása"
+ },
+ "autotracking": {
+ "enable": "Automatikus Követés Engedélyezése",
+ "disable": "Automatikus Követés Kikapcsolása"
+ },
+ "streamStats": {
+ "enable": "Adás Statisztika Mutatása",
+ "disable": "Adás Statisztika Elrejtése"
+ },
+ "manualRecording": {
+ "playInBackground": {
+ "label": "Lejátszás a háttérben",
+ "desc": "Engedélyezze ezt a lehetőséget, hogy az adás tovább folyjon amikor a lejátszó rejtve van."
+ },
+ "showStats": {
+ "label": "Statisztika Mutatása"
+ },
+ "debugView": "Hibakeresési Nézet"
+ },
+ "streamingSettings": "Adás Beállítások",
+ "notifications": "Értesítések",
+ "audio": "Hang",
+ "suspend": {
+ "forTime": "Felfüggesztés: "
+ },
+ "stream": {
+ "title": "Adás",
+ "audio": {
+ "tips": {
+ "documentation": "Olvassa el a leírást "
+ },
+ "available": "Ehhez az adáshoz hang elérhető",
+ "unavailable": "Nem elérhető hang ehhez az adáshoz"
+ },
+ "twoWayTalk": {
+ "tips.documentation": "Olvassa el a leírást ",
+ "available": "Kétirányú kommunikáció elérhető ehhez az adáshoz",
+ "unavailable": "Nem elérhető a kétirányú kommunikáció ehhez az adáshoz"
+ },
+ "lowBandwidth": {
+ "resetStream": "Adás visszaállítása"
+ },
+ "playInBackground": {
+ "label": "Lejátszás a háttérben"
+ }
+ }
+}
diff --git a/web/public/locales/hu/views/recording.json b/web/public/locales/hu/views/recording.json
new file mode 100644
index 000000000..67aac28a5
--- /dev/null
+++ b/web/public/locales/hu/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "filter": "Szűrő",
+ "calendar": "Naptár",
+ "export": "Exportálás",
+ "filters": "Szűrők",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "Nem megfelelő idősáv kiválasztva",
+ "endTimeMustAfterStartTime": "A végpontnak később kell lennie, mint a kezdőpontnak"
+ }
+ }
+}
diff --git a/web/public/locales/hu/views/search.json b/web/public/locales/hu/views/search.json
new file mode 100644
index 000000000..4a56fc811
--- /dev/null
+++ b/web/public/locales/hu/views/search.json
@@ -0,0 +1,12 @@
+{
+ "search": "Keresés",
+ "savedSearches": "Mentett keresések",
+ "searchFor": "{{inputValue}} keresése",
+ "button": {
+ "clear": "Keresés törlése",
+ "filterInformation": "Szűrő információ",
+ "save": "Keresés mentése",
+ "delete": "Mentett keresések törlése"
+ },
+ "trackedObjectId": "Követett Tárgy Azonosító"
+}
diff --git a/web/public/locales/hu/views/settings.json b/web/public/locales/hu/views/settings.json
new file mode 100644
index 000000000..6742aeb48
--- /dev/null
+++ b/web/public/locales/hu/views/settings.json
@@ -0,0 +1,44 @@
+{
+ "documentTitle": {
+ "default": "Beállítások - Frigate",
+ "authentication": "Hitelesítési beállítások - Frigate",
+ "camera": "Kamera beállítások - Frigate",
+ "classification": "Osztályozási beállítások - Frigate",
+ "masksAndZones": "Maszk és zónaszerkesztő - Frigate",
+ "object": "Hibakeresés - Frigate",
+ "general": "Alapbeállítások - Frigate",
+ "frigatePlus": "Frigate+ beállítások - Frigate",
+ "notifications": "Értesítések beállítása - Frigate",
+ "motionTuner": "Mozgás Hangoló - Frigate"
+ },
+ "menu": {
+ "ui": "UI",
+ "classification": "Osztályozás",
+ "cameras": "Kamera beállítások",
+ "masksAndZones": "Maszkok / Zónák",
+ "motionTuner": "Mozgás finomhangolása",
+ "debug": "Hibakeresés",
+ "users": "Felhasználók",
+ "notifications": "Értesítések",
+ "frigateplus": "Frigate+"
+ },
+ "dialog": {
+ "unsavedChanges": {
+ "title": "Vannak nem mentett módosítások.",
+ "desc": "Szeretné elmenteni a módosításokat a folytatás előtt?"
+ }
+ },
+ "cameraSetting": {
+ "camera": "Kamera",
+ "noCamera": "Nincs kamera"
+ },
+ "general": {
+ "liveDashboard": {
+ "title": "Live irányítópult",
+ "automaticLiveView": {
+ "label": "Automata élőkép"
+ }
+ },
+ "title": "Alapbeállítások"
+ }
+}
diff --git a/web/public/locales/hu/views/system.json b/web/public/locales/hu/views/system.json
new file mode 100644
index 000000000..8a2daf8c0
--- /dev/null
+++ b/web/public/locales/hu/views/system.json
@@ -0,0 +1,165 @@
+{
+ "documentTitle": {
+ "cameras": "Kamera statisztikák - Frigate",
+ "storage": "Tárhely statisztikák - Frigate",
+ "general": "Általános statisztikák - Frigate",
+ "logs": {
+ "frigate": "Frigate naplók - Frigate",
+ "go2rtc": "Go2RTC naplók - Frigate",
+ "nginx": "Nginx naplók - Frigate"
+ }
+ },
+ "cameras": {
+ "label": {
+ "ffmpeg": "FFmpeg",
+ "overallSkippedDetectionsPerSecond": "összes kihagyott észlelés per másodperc",
+ "camera": "kamera",
+ "detect": "észlel",
+ "skipped": "kihagyott",
+ "overallFramesPerSecond": "összes képkocka per másodperc",
+ "overallDetectionsPerSecond": "összes észlelés per másodperc",
+ "cameraFfmpeg": "{{camName}} FFmpeg",
+ "cameraDetect": "{{camName}} észlelés",
+ "cameraFramesPerSecond": "{{camName}} képkocka per másodperc",
+ "cameraDetectionsPerSecond": "{{camName}} észlelés per másodperc",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} kihagyott észlelés per másodperc"
+ },
+ "title": "Kamerák",
+ "info": {
+ "video": "Videó:",
+ "resolution": "Felbontás:",
+ "codec": "Codec:",
+ "error": "Hiba: {{error}}",
+ "cameraProbeInfo": "{{camera}} Kamera Szonda Infó",
+ "fetching": "Kamera Adat Begyűjtése",
+ "aspectRatio": "képarány",
+ "stream": "Folyam: {{idx}}",
+ "fps": "FPS:",
+ "unknown": "Ismeretlen",
+ "audio": "Hang:",
+ "tips": {
+ "title": "Kamera Szonda Infó"
+ }
+ },
+ "overview": "Áttekintés",
+ "framesAndDetections": "Képek / Észlelések",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Szonda adat másolva a vágólapra."
+ }
+ }
+ },
+ "title": "Rendszer",
+ "logs": {
+ "copy": {
+ "label": "Másolás a Vágólapra",
+ "error": "Nem sikerült a naplók vágólapra másolása",
+ "success": "Naplók a vágólapra másolva"
+ },
+ "type": {
+ "label": "Típus",
+ "timestamp": "Időbélyeg",
+ "tag": "Cédula",
+ "message": "Üzenet"
+ },
+ "toast": {
+ "error": {
+ "fetchingLogsFailed": "Hiba a naplók begyűjtése közben: {{errorMessage}}"
+ }
+ },
+ "download": {
+ "label": "Naplók letöltése"
+ }
+ },
+ "general": {
+ "title": "Általános",
+ "detector": {
+ "title": "Érzékelők",
+ "inferenceSpeed": "Érzékelők Inferencia Sebessége",
+ "cpuUsage": "Érzékelő CPU Kihasználtság",
+ "memoryUsage": "Érzékelő Memória Kihasználtság",
+ "temperature": "Érzékelő Hőmérséklete"
+ },
+ "hardwareInfo": {
+ "title": "Hardver Infó",
+ "gpuUsage": "GPU Kihasználtság",
+ "gpuMemory": "GPU Memória",
+ "gpuInfo": {
+ "nvidiaSMIOutput": {
+ "name": "Név: {{name}}",
+ "title": "Nvidia SMI Kimenet",
+ "vbios": "VBios Infó: {{vbios}}",
+ "driver": "Meghajtó: {{driver}}"
+ },
+ "vainfoOutput": {
+ "processOutput": "Folyamat Kimenete:",
+ "processError": "Folyamat Hiba:",
+ "title": "Vainfo Kimenet",
+ "returnCode": "Visszatérési Érték: {{code}}"
+ },
+ "copyInfo": {
+ "label": "GPU infó másolása"
+ },
+ "closeInfo": {
+ "label": "GPU info bezárása"
+ },
+ "toast": {
+ "success": "GPU infó a vágólapra másolva"
+ }
+ },
+ "gpuEncoder": "GPU Enkóder",
+ "gpuDecoder": "GPU Dekóder",
+ "npuUsage": "NPU Kihasználtság",
+ "npuMemory": "NPU Memória"
+ },
+ "otherProcesses": {
+ "processMemoryUsage": "Folyamat Memória Kihasználtság",
+ "title": "Egyéb Folyamatok",
+ "processCpuUsage": "Folyamat CPU Kihasználtság"
+ }
+ },
+ "storage": {
+ "recordings": {
+ "title": "Felvételek",
+ "tips": "Ez az érték mutatja a Frigate adatbázisában található felvételek teljes tárhely felhasználását. A Frigate nem követi az összes fájl által foglalt tárhelyet.",
+ "earliestRecording": "Legkorábbi elérhető felvétel:"
+ },
+ "title": "Tárhely",
+ "overview": "Áttekintés",
+ "cameraStorage": {
+ "unusedStorageInformation": "Felhasználatlan Tárhely Információ",
+ "title": "Kamera Tárhely",
+ "camera": "Kamera",
+ "storageUsed": "Tárhely",
+ "percentageOfTotalUsed": "Teljes Százaléka",
+ "bandwidth": "Sávszélesség",
+ "unused": {
+ "title": "Felhasználatlan"
+ }
+ }
+ },
+ "enrichments": {
+ "embeddings": {
+ "image_embedding_speed": "Kép Beágyazás Sebesség",
+ "face_embedding_speed": "Arc Beágyazás Sebesség",
+ "face_recognition_speed": "Arcfelismerés Sebesség",
+ "plate_recognition_speed": "Rendszám Felismerés Sebesség",
+ "text_embedding_speed": "Szöveg Beágyazás Sebesség",
+ "image_embedding": "Kép Beágyazása",
+ "text_embedding": "Szöveg Beágyazása",
+ "face_recognition": "Arcfelismerés",
+ "plate_recognition": "Rendszám Felismerés",
+ "yolov9_plate_detection_speed": "YOLOv9 Rendszám Felismerés Sebesség",
+ "yolov9_plate_detection": "YOLOv9 Rendszám Észlelés"
+ },
+ "infPerSecond": "Inferencia Per Másodperc"
+ },
+ "metrics": "Rendszer jellemzők",
+ "stats": {
+ "detectIsVerySlow": "{{detect}} nagyon lassú ({{speed}} ms)",
+ "healthy": "A rendszer egészséges",
+ "cameraIsOffline": "{{camera}} nem elérhető",
+ "detectIsSlow": "{{detect}} lassú ({{speed}} ms)"
+ },
+ "lastRefreshed": "Utoljára frissítve: "
+}
diff --git a/web/public/locales/id/audio.json b/web/public/locales/id/audio.json
new file mode 100644
index 000000000..e72ee2dff
--- /dev/null
+++ b/web/public/locales/id/audio.json
@@ -0,0 +1,30 @@
+{
+ "yell": "Teriakan",
+ "speech": "Bahasa",
+ "babbling": "Ocehan",
+ "bellow": "Di bawah",
+ "whoop": "Teriakan",
+ "whispering": "Bisikan",
+ "snicker": "Tertawa",
+ "crying": "Menangis",
+ "sigh": "Mendesah",
+ "choir": "Paduan Suara",
+ "yodeling": "Bernyanyi Yodel",
+ "chant": "Nyanyian",
+ "child_singing": "Anak bernyanyi",
+ "rapping": "Mengetuk",
+ "humming": "Bersenandung",
+ "groan": "Mengerang",
+ "grunt": "Mendengus",
+ "breathing": "Bernafas",
+ "laughter": "Tertawa",
+ "singing": "Nyanyian",
+ "mantra": "Mantra",
+ "synthetic_singing": "Nyanyian sintesis",
+ "whistling": "Siulan",
+ "car": "Mobil",
+ "motorcycle": "Motor",
+ "bicycle": "Sepeda",
+ "bus": "Bis",
+ "train": "Kereta"
+}
diff --git a/web/public/locales/id/common.json b/web/public/locales/id/common.json
new file mode 100644
index 000000000..0b973650f
--- /dev/null
+++ b/web/public/locales/id/common.json
@@ -0,0 +1,11 @@
+{
+ "time": {
+ "untilForRestart": "Hingga Frigate memulai ulang.",
+ "untilRestart": "Sampai memulai ulang",
+ "ago": "{{timeAgo}} Lalu",
+ "justNow": "Sekarang",
+ "today": "Hari ini",
+ "yesterday": "Kemarin",
+ "untilForTime": "Hingga {{time}}"
+ }
+}
diff --git a/web/public/locales/id/components/auth.json b/web/public/locales/id/components/auth.json
new file mode 100644
index 000000000..e43c819f9
--- /dev/null
+++ b/web/public/locales/id/components/auth.json
@@ -0,0 +1,13 @@
+{
+ "form": {
+ "user": "Nama pengguna",
+ "password": "Kata sandi",
+ "login": "Masuk",
+ "errors": {
+ "usernameRequired": "Wajib Menggunakan Username",
+ "passwordRequired": "Wajib memakai Password",
+ "rateLimit": "Melewati batas permintaan. Coba lagi nanti.",
+ "loginFailed": "Gagal Masuk"
+ }
+ }
+}
diff --git a/web/public/locales/id/components/camera.json b/web/public/locales/id/components/camera.json
new file mode 100644
index 000000000..3e62aeeb0
--- /dev/null
+++ b/web/public/locales/id/components/camera.json
@@ -0,0 +1,17 @@
+{
+ "group": {
+ "label": "Grup Kamera",
+ "add": "Tambah Grup Kamera",
+ "edit": "Edit Grup kamera",
+ "delete": {
+ "label": "Hapus Grup Kamera",
+ "confirm": {
+ "title": "Yakin Hapus",
+ "desc": "Apakah Anda yakin ingin menghapus grup kamera {{name}}?"
+ }
+ },
+ "name": {
+ "label": "Nama"
+ }
+ }
+}
diff --git a/web/public/locales/id/components/dialog.json b/web/public/locales/id/components/dialog.json
new file mode 100644
index 000000000..5ab0e7520
--- /dev/null
+++ b/web/public/locales/id/components/dialog.json
@@ -0,0 +1,19 @@
+{
+ "restart": {
+ "title": "Apakah kamu yakin ingin memulai ulang Frigate?",
+ "button": "Mulai ulang",
+ "restarting": {
+ "title": "Sedang Merestart Frigate",
+ "content": "Halaman ini akan memulai ulang dalam {{countdown}} detik.",
+ "button": "Muat Ulang Sekarang"
+ }
+ },
+ "explore": {
+ "plus": {
+ "submitToPlus": {
+ "label": "Kirim ke Frigate+",
+ "desc": "Objek di lokasi yang ingin Anda hindari bukanlah deteksi palsu. Mengirimnya sebagai deteksi palsu akan membingungkan model."
+ }
+ }
+ }
+}
diff --git a/web/public/locales/id/components/filter.json b/web/public/locales/id/components/filter.json
new file mode 100644
index 000000000..999cea0f1
--- /dev/null
+++ b/web/public/locales/id/components/filter.json
@@ -0,0 +1,15 @@
+{
+ "filter": "Saring",
+ "labels": {
+ "label": "Label",
+ "all": {
+ "title": "Semua Label",
+ "short": "Label"
+ },
+ "count_one": "{{count}} Label",
+ "count_other": "{{count}} Label"
+ },
+ "zones": {
+ "label": "Zona"
+ }
+}
diff --git a/web/public/locales/id/components/icons.json b/web/public/locales/id/components/icons.json
new file mode 100644
index 000000000..de1a6a214
--- /dev/null
+++ b/web/public/locales/id/components/icons.json
@@ -0,0 +1,8 @@
+{
+ "iconPicker": {
+ "selectIcon": "Pilih ikon",
+ "search": {
+ "placeholder": "Cari Icon…"
+ }
+ }
+}
diff --git a/web/public/locales/id/components/input.json b/web/public/locales/id/components/input.json
new file mode 100644
index 000000000..8e0877bbd
--- /dev/null
+++ b/web/public/locales/id/components/input.json
@@ -0,0 +1,10 @@
+{
+ "button": {
+ "downloadVideo": {
+ "label": "Unduh Video",
+ "toast": {
+ "success": "Video yang yang anda lihat sudah mulai di unduh."
+ }
+ }
+ }
+}
diff --git a/web/public/locales/id/components/player.json b/web/public/locales/id/components/player.json
new file mode 100644
index 000000000..da44c4a2d
--- /dev/null
+++ b/web/public/locales/id/components/player.json
@@ -0,0 +1,13 @@
+{
+ "noPreviewFound": "Pratinjau Tidak Ditemukan",
+ "noPreviewFoundFor": "Tidak ada Pratinjau untuk {{cameraName}}",
+ "submitFrigatePlus": {
+ "submit": "Kirim",
+ "title": "Kirim frame ini ke Frigate+?"
+ },
+ "noRecordingsFoundForThisTime": "Tidak ada Rekaman pada waktu ini",
+ "livePlayerRequiredIOSVersion": "iOS 17.1 atau yang lebih tinggi diperlukan untuk tipe siaran langsung ini.",
+ "streamOffline": {
+ "title": "Stream Tidak Aktif"
+ }
+}
diff --git a/web/public/locales/id/objects.json b/web/public/locales/id/objects.json
new file mode 100644
index 000000000..84efc9bf4
--- /dev/null
+++ b/web/public/locales/id/objects.json
@@ -0,0 +1,9 @@
+{
+ "person": "Orang",
+ "bicycle": "Sepeda",
+ "car": "Mobil",
+ "motorcycle": "Motor",
+ "airplane": "Pesawat",
+ "bus": "Bis",
+ "train": "Kereta"
+}
diff --git a/web/public/locales/id/views/configEditor.json b/web/public/locales/id/views/configEditor.json
new file mode 100644
index 000000000..60b11c0f6
--- /dev/null
+++ b/web/public/locales/id/views/configEditor.json
@@ -0,0 +1,15 @@
+{
+ "documentTitle": "Editor Konfigurasi - Frigate",
+ "configEditor": "Editor Konfigurasi",
+ "copyConfig": "Salin Konfigurasi",
+ "saveAndRestart": "Simpan dan Mulai ulang",
+ "saveOnly": "Hanya simpan",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Konfigurasi disalin ke papan klip."
+ },
+ "error": {
+ "savingError": "Gagal menyimpan konfigurasi"
+ }
+ }
+}
diff --git a/web/public/locales/id/views/events.json b/web/public/locales/id/views/events.json
new file mode 100644
index 000000000..261cb7ce1
--- /dev/null
+++ b/web/public/locales/id/views/events.json
@@ -0,0 +1,13 @@
+{
+ "alerts": "Peringatan",
+ "detections": "Deteksi",
+ "motion": {
+ "label": "Gerakan",
+ "only": "Hanya Gerakan"
+ },
+ "allCameras": "Semua Kamera",
+ "empty": {
+ "detection": "Tidak ada deteksi untuk ditinjau",
+ "alert": "Tidak ada peringatan untuk ditinjau"
+ }
+}
diff --git a/web/public/locales/id/views/explore.json b/web/public/locales/id/views/explore.json
new file mode 100644
index 000000000..d0e7a3ce6
--- /dev/null
+++ b/web/public/locales/id/views/explore.json
@@ -0,0 +1,15 @@
+{
+ "documentTitle": "Jelajahi - Frigate",
+ "generativeAI": "AI Generatif",
+ "exploreIsUnavailable": {
+ "title": "Penelusuran tidak tersedia",
+ "embeddingsReindexing": {
+ "context": "Jelajahi dapat digunakan setelah embedding objek yang dilacak selesai di-reindex.",
+ "startingUp": "Sedang memulai…",
+ "estimatedTime": "Perkiraan waktu tersisa:"
+ }
+ },
+ "details": {
+ "timestamp": "Stempel waktu"
+ }
+}
diff --git a/web/public/locales/id/views/exports.json b/web/public/locales/id/views/exports.json
new file mode 100644
index 000000000..305220b73
--- /dev/null
+++ b/web/public/locales/id/views/exports.json
@@ -0,0 +1,10 @@
+{
+ "documentTitle": "Expor - Frigate",
+ "search": "Cari",
+ "noExports": "Tidak bisa mengekspor",
+ "deleteExport": "Hapus Ekspor",
+ "deleteExport.desc": "Apakah Anda yakin ingin menghapus {{exportName}}?",
+ "editExport": {
+ "title": "Ganti Nama saat Ekspor"
+ }
+}
diff --git a/web/public/locales/id/views/faceLibrary.json b/web/public/locales/id/views/faceLibrary.json
new file mode 100644
index 000000000..ff1fd4b61
--- /dev/null
+++ b/web/public/locales/id/views/faceLibrary.json
@@ -0,0 +1,30 @@
+{
+ "description": {
+ "addFace": "Tambah ke koleksi Pustaka Wajah.",
+ "placeholder": "Masukkan Nama untuk koleksi ini",
+ "invalidName": "Nama tidak valid. Nama hanya dapat berisi huruf, angka, spasi, apostrof, garis bawah, dan tanda hubung."
+ },
+ "details": {
+ "person": "Orang",
+ "subLabelScore": "Skor Sub Label",
+ "face": "Detail Wajah",
+ "scoreInfo": "Skor sub label adalah nilai gabungan dari tingkat keyakinan sistem dalam mengenali wajah. Nilai ini bisa berbeda dengan skor yang terlihat pada gambar cuplikan.",
+ "timestamp": "Stempel waktu",
+ "unknown": "Tidak diketahui",
+ "faceDesc": "Detail objek terlacak yang menghasilkan wajah ini"
+ },
+ "documentTitle": "Perpustakaan Wajah - Frigate",
+ "collections": "Koleksi",
+ "createFaceLibrary": {
+ "desc": "Buat koleksi baru",
+ "title": "Buat Koleksi",
+ "nextSteps": "Untuk membangun fondasi yang kuat:{{label}}?",
+ "ask_an": "Questo oggetto è un {{label}}?",
+ "ask_full": "Questo oggetto è un {{untranslatedLabel}} ({{translatedLabel}})?"
+ }
+ }
+ },
+ "video": {
+ "viewInHistory": "Visualizza in Storico"
+ }
+ },
+ "export": {
+ "time": {
+ "fromTimeline": "Seleziona dalla cronologia",
+ "custom": "Personalizzato",
+ "start": {
+ "title": "Ora di inizio",
+ "label": "Seleziona l'ora di inizio"
+ },
+ "end": {
+ "title": "Ora di fine",
+ "label": "Seleziona l'ora di fine"
+ },
+ "lastHour_one": "Ultima ora",
+ "lastHour_many": "Ultime {{count}} ore",
+ "lastHour_other": "Ultime {{count}} ore"
+ },
+ "export": "Esporta",
+ "selectOrExport": "Seleziona o esporta",
+ "toast": {
+ "success": "Esportazione avviata correttamente. Visualizza il file nella cartella /exports.",
+ "error": {
+ "failed": "Impossibile avviare l'esportazione: {{error}}",
+ "endTimeMustAfterStartTime": "L'ora di fine deve essere successiva all'ora di inizio",
+ "noVaildTimeSelected": "Nessun intervallo di tempo valido selezionato"
+ }
+ },
+ "fromTimeline": {
+ "saveExport": "Salva esportazione",
+ "previewExport": "Anteprima esportazione"
+ },
+ "select": "Seleziona",
+ "name": {
+ "placeholder": "Assegna un nome all'esportazione"
+ }
+ },
+ "streaming": {
+ "label": "Trasmissione",
+ "showStats": {
+ "label": "Mostra statistiche di trasmissione",
+ "desc": "Abilita questa opzione per visualizzare le statistiche della trasmissione come sovrapposizione sul flusso della telecamera."
+ },
+ "debugView": "Vista correzioni",
+ "restreaming": {
+ "disabled": "La ritrasmissione non è abilitata per questa telecamera.",
+ "desc": {
+ "title": "Imposta go2rtc per opzioni aggiuntive di visualizzazione dal vivo e audio per questa telecamera.",
+ "readTheDocumentation": "Leggi la documentazione"
+ }
+ }
+ },
+ "search": {
+ "saveSearch": {
+ "label": "Salva ricerca",
+ "overwrite": "{{searchName}} esiste già. Il salvataggio sovrascriverà il valore esistente.",
+ "desc": "Specifica un nome per questa ricerca salvata.",
+ "button": {
+ "save": {
+ "label": "Salva questa ricerca"
+ }
+ },
+ "placeholder": "Inserisci un nome per la tua ricerca",
+ "success": "La ricerca ({{searchName}}) è stata salvata."
+ }
+ },
+ "recording": {
+ "button": {
+ "export": "Esporta",
+ "markAsReviewed": "Segna come visto",
+ "deleteNow": "Elimina ora"
+ },
+ "confirmDelete": {
+ "desc": {
+ "selected": "Vuoi davvero eliminare tutti i video registrati associati a questo elemento di visto?detect di {{cameraName}}, controlla i registri degli errori",
+ "title": "Trasmissione disconnessa"
+ },
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "Fotogramma inviato correttamente a Frigate+"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "Impossibile inviare il fotogramma a Frigate+"
+ }
+ },
+ "cameraDisabled": "La telecamera è disattivata"
+}
diff --git a/web/public/locales/it/objects.json b/web/public/locales/it/objects.json
new file mode 100644
index 000000000..a512b0021
--- /dev/null
+++ b/web/public/locales/it/objects.json
@@ -0,0 +1,120 @@
+{
+ "bird": "Uccello",
+ "clock": "Orologio",
+ "scissors": "Forbici",
+ "vehicle": "Veicolo",
+ "cat": "Gatto",
+ "boat": "Barca",
+ "horse": "Cavallo",
+ "bicycle": "Bicicletta",
+ "person": "Persona",
+ "car": "Automobile",
+ "motorcycle": "Motociclo",
+ "dog": "Cane",
+ "bark": "Abbaio",
+ "animal": "Animale",
+ "sheep": "Pecora",
+ "mouse": "Mouse",
+ "bear": "Orso",
+ "elephant": "Elefante",
+ "zebra": "Zebra",
+ "giraffe": "Giraffa",
+ "hat": "Cappello",
+ "umbrella": "Ombrello",
+ "train": "Treno",
+ "backpack": "Zaino",
+ "cow": "Mucca",
+ "airplane": "Aereo",
+ "bus": "Autobus",
+ "shoe": "Scarpa",
+ "skateboard": "Skateboard",
+ "kite": "Aquilone",
+ "oven": "Forno",
+ "sink": "Lavello",
+ "stop_sign": "Segnale di stop",
+ "raccoon": "Procione",
+ "postnl": "PostNL",
+ "nzpost": "NZPost",
+ "book": "Libro",
+ "frisbee": "Frisbee",
+ "laptop": "Portatile",
+ "knife": "Coltello",
+ "spoon": "Cucchiaio",
+ "bowl": "Ciotola",
+ "dhl": "DHL",
+ "banana": "Banana",
+ "carrot": "Carota",
+ "dining_table": "Tavolo da pranzo",
+ "hot_dog": "Hot Dog",
+ "mirror": "Specchio",
+ "microwave": "Microonde",
+ "toaster": "Tostapane",
+ "teddy_bear": "Orsacchiotto di peluche",
+ "hair_brush": "Spazzola per capelli",
+ "squirrel": "Scoiattolo",
+ "deer": "Cervo",
+ "robot_lawnmower": "Robot tagliaerba",
+ "waste_bin": "Cestino",
+ "on_demand": "Su richiesta",
+ "ups": "UPS",
+ "fedex": "FedEx",
+ "postnord": "PostNord",
+ "traffic_light": "Semaforo",
+ "fire_hydrant": "Idrante antincendio",
+ "street_sign": "Cartello stradale",
+ "parking_meter": "Parchimetro",
+ "bench": "Panca",
+ "eye_glasses": "Occhiali da vista",
+ "handbag": "Borsa a mano",
+ "tie": "Cravatta",
+ "suitcase": "Valigia",
+ "skis": "Sci",
+ "snowboard": "Snowboard",
+ "sports_ball": "Palla sportiva",
+ "baseball_bat": "Mazza da baseball",
+ "baseball_glove": "Guanto da baseball",
+ "surfboard": "Tavola da surf",
+ "tennis_racket": "Racchetta da tennis",
+ "bottle": "Bottiglia",
+ "plate": "Piatto",
+ "wine_glass": "Bicchiere da vino",
+ "cup": "Tazza",
+ "fork": "Forchetta",
+ "apple": "Mela",
+ "sandwich": "Panino",
+ "orange": "Arancia",
+ "broccoli": "Broccoli",
+ "pizza": "Pizza",
+ "donut": "Ciambella",
+ "cake": "Torta",
+ "chair": "Sedia",
+ "couch": "Divano",
+ "door": "Porta",
+ "keyboard": "Tastiera",
+ "potted_plant": "Pianta in vaso",
+ "bed": "Letto",
+ "window": "Finestra",
+ "desk": "Scrivania",
+ "toilet": "Toilette",
+ "tv": "Televisione",
+ "remote": "Telecomando",
+ "cell_phone": "Telefono cellulare",
+ "blender": "Miscelatore",
+ "refrigerator": "Frigorifero",
+ "hair_dryer": "Asciugacapelli",
+ "toothbrush": "Spazzolino da denti",
+ "vase": "Vaso",
+ "fox": "Volpe",
+ "goat": "Capra",
+ "rabbit": "Coniglio",
+ "face": "Viso",
+ "license_plate": "Targa",
+ "package": "Pacchetto",
+ "bbq_grill": "Griglia per barbecue",
+ "amazon": "Amazon",
+ "usps": "USPS",
+ "an_post": "An Post",
+ "purolator": "Purolator",
+ "gls": "GLS",
+ "dpd": "DPD"
+}
diff --git a/web/public/locales/it/views/configEditor.json b/web/public/locales/it/views/configEditor.json
new file mode 100644
index 000000000..4ce1a7378
--- /dev/null
+++ b/web/public/locales/it/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "configEditor": "Editor di configurazione",
+ "documentTitle": "Editor di configurazione - Frigate",
+ "copyConfig": "Copia configurazione",
+ "saveAndRestart": "Salva e riavvia",
+ "saveOnly": "Salva soltanto",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Configurazione copiata negli appunti."
+ },
+ "error": {
+ "savingError": "Errore durante il salvataggio della configurazione"
+ }
+ },
+ "confirm": "Vuoi uscire senza salvare?"
+}
diff --git a/web/public/locales/it/views/events.json b/web/public/locales/it/views/events.json
new file mode 100644
index 000000000..e07c7bc6a
--- /dev/null
+++ b/web/public/locales/it/views/events.json
@@ -0,0 +1,39 @@
+{
+ "alerts": "Avvisi",
+ "detections": "Rilevamento",
+ "motion": {
+ "label": "Movimento",
+ "only": "Solo movimento"
+ },
+ "empty": {
+ "alert": "Non ci sono avvisi da rivedere",
+ "detection": "Non ci sono rilevamenti da rivedere",
+ "motion": "Nessun dato di movimento trovato"
+ },
+ "newReviewItems": {
+ "label": "Visualizza i nuovi elementi da rivedere",
+ "button": "Nuovi elementi da rivedere"
+ },
+ "markTheseItemsAsReviewed": "Segna questi elementi come visti",
+ "markAsReviewed": "Segna come visto",
+ "documentTitle": "Rivedi - Frigate",
+ "allCameras": "Tutte le camere",
+ "timeline": "Cronologia",
+ "timeline.aria": "Seleziona la cronologia",
+ "events": {
+ "label": "Eventi",
+ "aria": "Seleziona eventi",
+ "noFoundForTimePeriod": "Nessun evento trovato per questo intervallo."
+ },
+ "recordings": {
+ "documentTitle": "Registrazioni - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "Ultime 24 ore"
+ },
+ "camera": "Telecamera",
+ "selected": "{{count}} selezionati",
+ "selected_one": "{{count}} selezionati",
+ "selected_other": "{{count}} selezionati",
+ "detected": "rilevato"
+}
diff --git a/web/public/locales/it/views/explore.json b/web/public/locales/it/views/explore.json
new file mode 100644
index 000000000..547c6ad0a
--- /dev/null
+++ b/web/public/locales/it/views/explore.json
@@ -0,0 +1,209 @@
+{
+ "generativeAI": "IA Generativa",
+ "documentTitle": "Esplora - Frigate",
+ "exploreIsUnavailable": {
+ "title": "Esplora non è disponibile",
+ "embeddingsReindexing": {
+ "context": "Potrai usare Esplora dopo che l'incorporamento degli oggetti tracciati avrà terminato la ricostruzione dell'indice.",
+ "step": {
+ "descriptionsEmbedded": "Descrizioni incorporate: ",
+ "thumbnailsEmbedded": "Miniature incorporate: ",
+ "trackedObjectsProcessed": "Oggetti tracciati elaborati: "
+ },
+ "startingUp": "Avvio…",
+ "estimatedTime": "Tempo rimanente stimato:",
+ "finishingShortly": "Completamento a breve"
+ },
+ "downloadingModels": {
+ "setup": {
+ "textModel": "Modello di testo",
+ "visionModel": "Modello di visione",
+ "visionModelFeatureExtractor": "Estrattore di funzionalità del modello di visione",
+ "textTokenizer": "Tokenizzatore di testo"
+ },
+ "tips": {
+ "documentation": "Leggi la documentazione",
+ "context": "Una volta scaricati i modelli, potrebbe essere necessario reindicizzare gli incorporamenti degli oggetti tracciati."
+ },
+ "error": "Si è verificato un errore. Controlla i registri di Frigate.",
+ "context": "Frigate sta scaricando i modelli di incorporamento necessari per supportare la funzione di Ricerca Semantica. L'operazione potrebbe richiedere diversi minuti, a seconda della velocità della connessione di rete."
+ }
+ },
+ "details": {
+ "timestamp": "Orario",
+ "snapshotScore": {
+ "label": "Punteggio istantanea"
+ },
+ "regenerateFromSnapshot": "Rigenera da istantanea",
+ "item": {
+ "tips": {
+ "mismatch_one": "E' stato rilevato {{count}} oggetto non disponibile e incluse in questo elemento visto. Tale oggetto non è stato classificato come avviso o rilevamento oppure è già stato ripulito/eliminato.",
+ "mismatch_many": "Sono stati rilevati {{count}} oggetti non disponibili e inclusi in questo elemento visto. Tali oggetti non sono stati classificati come avvisi o rilevamenti oppure sono già stati ripuliti/eliminati.",
+ "mismatch_other": "Sono stati rilevati {{count}} oggetti non disponibili e inclusi in questo elemento visto. Tali oggetti non sono stati classificati come avvisi o rilevamenti oppure sono già stati ripuliti/eliminati.",
+ "hasMissingObjects": "Modifica la configurazione se vuoi che Frigate salvi gli oggetti tracciati per le seguenti etichette: {{objects}}"
+ },
+ "title": "Dettagli dell'elemento visto",
+ "desc": "Dettagli dell'elemento visto",
+ "button": {
+ "share": "Condividi questo elemento visto",
+ "viewInExplore": "Visualizza in Esplora"
+ },
+ "toast": {
+ "success": {
+ "regenerate": "È stata richiesta una nuova descrizione a {{provider}}. A seconda della velocità del tuo provider, la rigenerazione della nuova descrizione potrebbe richiedere del tempo.",
+ "updatedSublabel": "Sottoetichetta aggiornata correttamente.",
+ "updatedLPR": "Targa aggiornata con successo."
+ },
+ "error": {
+ "regenerate": "Impossibile chiamare {{provider}} per una nuova descrizione: {{errorMessage}}",
+ "updatedSublabelFailed": "Impossibile aggiornare la sottoetichetta: {{errorMessage}}",
+ "updatedLPRFailed": "Impossibile aggiornare la targa: {{errorMessage}}"
+ }
+ }
+ },
+ "zones": "Zone",
+ "description": {
+ "label": "Descrizione",
+ "placeholder": "Descrizione dell'oggetto tracciato",
+ "aiTips": "Frigate non richiederà una descrizione al tuo fornitore di Intelligenza Artificiale Generativa finché non sarà terminato il ciclo di vita dell'oggetto tracciato."
+ },
+ "label": "Etichetta",
+ "editSubLabel": {
+ "title": "Modifica sottoetichetta",
+ "desc": "Inserisci una nuova sottoetichetta per questa {{label}}",
+ "descNoLabel": "Inserisci una nuova sottoetichetta per questo oggetto tracciato"
+ },
+ "editLPR": {
+ "title": "Modifica targa",
+ "desc": "Inserisci un nuovo valore della targa per questa {{label}}",
+ "descNoLabel": "Inserisci un nuovo valore di targa per questo oggetto tracciato"
+ },
+ "topScore": {
+ "label": "Punteggio massimo",
+ "info": "Il punteggio massimo è il punteggio mediano più alto per l'oggetto tracciato, quindi potrebbe differire dal punteggio mostrato nella miniatura del risultato della ricerca."
+ },
+ "recognizedLicensePlate": "Targa riconosciuta",
+ "estimatedSpeed": "Velocità stimata",
+ "objects": "Oggetti",
+ "camera": "Telecamera",
+ "button": {
+ "findSimilar": "Trova simili",
+ "regenerate": {
+ "title": "Rigenera",
+ "label": "Rigenera la descrizione dell'oggetto tracciato"
+ }
+ },
+ "expandRegenerationMenu": "Espandi il menu di rigenerazione",
+ "regenerateFromThumbnails": "Rigenera dalle miniature",
+ "tips": {
+ "descriptionSaved": "Descrizione salvata correttamente",
+ "saveDescriptionFailed": "Impossibile aggiornare la descrizione: {{errorMessage}}"
+ }
+ },
+ "objectLifecycle": {
+ "annotationSettings": {
+ "offset": {
+ "tips": "SUGGERIMENTO: immagina un filmato evento con una persona che cammina da sinistra verso destra. Se il riquadro di delimitazione della cronologia dell'evento si trova costantemente a sinistra della persona, il valore dovrebbe essere diminuito. Analogamente, se una persona cammina da sinistra verso destra e il riquadro di delimitazione si trova costantemente davanti alla persona, il valore dovrebbe essere aumentato.",
+ "desc": "Questi dati provengono dal flusso di rilevamento della telecamera, ma vengono sovrapposti alle immagini del flusso di registrazione. È improbabile che i due flussi siano perfettamente sincronizzati. Di conseguenza, il riquadro di delimitazione e il filmato non saranno perfettamente allineati. Tuttavia, è possibile utilizzare il campo annotation_offset per correggere questo problema.",
+ "label": "Compensazione di annotazione",
+ "documentation": "Leggi la documentazione ",
+ "millisecondsToOffset": "Millisecondi per compensare il rilevamento delle annotazioni. Predefinito: 0",
+ "toast": {
+ "success": "La compensazione di annotazione per {{camera}} è stato salvato nel file di configurazione. Riavvia Frigate per applicare le modifiche."
+ }
+ },
+ "showAllZones": {
+ "title": "Mostra tutte le zone",
+ "desc": "Mostra sempre le zone nei fotogrammi in cui gli oggetti sono entrati in una zona."
+ },
+ "title": "Impostazioni di annotazione"
+ },
+ "lifecycleItemDesc": {
+ "heard": "{{label}} sentito",
+ "attribute": {
+ "faceOrLicense_plate": "{{attribute}} rilevato per {{label}}",
+ "other": "{{label}} riconosciuto come {{attribute}}"
+ },
+ "gone": "{{label}} lasciato",
+ "external": "{{label}} rilevato",
+ "visible": "{{label}} rilevato",
+ "entered_zone": "{{label}} è entrato in {{zones}}",
+ "active": "{{label}} è diventato attivo",
+ "stationary": "{{label}} è diventato stazionario",
+ "header": {
+ "ratio": "Rapporto",
+ "area": "Area",
+ "zones": "Zone"
+ }
+ },
+ "title": "Ciclo di vita dell'oggetto",
+ "createObjectMask": "Crea maschera oggetto",
+ "noImageFound": "Nessuna immagine trovata per questo orario.",
+ "adjustAnnotationSettings": "Regola le impostazioni di annotazione",
+ "scrollViewTips": "Scorri per visualizzare i momenti più significativi del ciclo di vita di questo oggetto.",
+ "autoTrackingTips": "Le posizioni dei riquadri di delimitazione non saranno precise per le telecamere con tracciamento automatico.",
+ "carousel": {
+ "previous": "Diapositiva precedente",
+ "next": "Diapositiva successiva"
+ },
+ "count": "{{first}} di {{second}}",
+ "trackedPoint": "Punto tracciato"
+ },
+ "type": {
+ "snapshot": "istantanea",
+ "object_lifecycle": "ciclo di vita dell'oggetto",
+ "details": "dettagli",
+ "video": "video"
+ },
+ "itemMenu": {
+ "downloadSnapshot": {
+ "label": "Scarica istantanea",
+ "aria": "Scarica istantanea"
+ },
+ "viewInHistory": {
+ "label": "Visualizza in Storico",
+ "aria": "Visualizza in Storico"
+ },
+ "deleteTrackedObject": {
+ "label": "Elimina questo oggetto tracciato"
+ },
+ "downloadVideo": {
+ "label": "Scarica video",
+ "aria": "Scarica video"
+ },
+ "viewObjectLifecycle": {
+ "label": "Visualizza il ciclo di vita dell'oggetto",
+ "aria": "Mostra il ciclo di vita dell'oggetto"
+ },
+ "findSimilar": {
+ "label": "Trova simili",
+ "aria": "Trova oggetti tracciati simili"
+ },
+ "submitToPlus": {
+ "label": "Invia a Frigate+",
+ "aria": "Invia a Frigate Plus"
+ }
+ },
+ "dialog": {
+ "confirmDelete": {
+ "desc": "L'eliminazione di questo oggetto tracciato rimuove l'istantanea, eventuali incorporamenti salvati e tutte le voci associate al ciclo di vita dell'oggetto. Il filmato registrato di questo oggetto tracciato nella vista Storico NON verrà eliminato.mode: {{effectiveRetainMode}}, quindi questa registrazione su richiesta conserverà solo i segmenti con {{effectiveRetainModeName}}."
+ },
+ "editLayout": {
+ "label": "Modifica formato",
+ "group": {
+ "label": "Modifica gruppo telecamere"
+ },
+ "exitEdit": "Esci dalla modifica"
+ }
+}
diff --git a/web/public/locales/it/views/recording.json b/web/public/locales/it/views/recording.json
new file mode 100644
index 000000000..411070bba
--- /dev/null
+++ b/web/public/locales/it/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "calendar": "Calendario",
+ "export": "Esporta",
+ "filter": "Filtro",
+ "filters": "Filtri",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "Nessun intervallo di tempo valido selezionato",
+ "endTimeMustAfterStartTime": "L'ora di fine deve essere successiva all'ora di inizio"
+ }
+ }
+}
diff --git a/web/public/locales/it/views/search.json b/web/public/locales/it/views/search.json
new file mode 100644
index 000000000..873ef007c
--- /dev/null
+++ b/web/public/locales/it/views/search.json
@@ -0,0 +1,72 @@
+{
+ "search": "Cerca",
+ "savedSearches": "Ricerche salvate",
+ "searchFor": "Cerca {{inputValue}}",
+ "button": {
+ "clear": "Cancella ricerca",
+ "save": "Salva ricerca",
+ "delete": "Elimina la ricerca salvata",
+ "filterInformation": "Informazioni sul filtro",
+ "filterActive": "Filtri attivi"
+ },
+ "filter": {
+ "label": {
+ "has_snapshot": "Contiene istantanea",
+ "cameras": "Telecamere",
+ "search_type": "Tipo di ricerca",
+ "has_clip": "Contiene video",
+ "before": "Prima",
+ "labels": "Etichette",
+ "min_score": "Punteggio minimo",
+ "zones": "Zone",
+ "max_score": "Punteggio massimo",
+ "min_speed": "Velocità minima",
+ "time_range": "Intervallo di tempo",
+ "after": "Dopo",
+ "max_speed": "Velocità massima",
+ "recognized_license_plate": "Targa riconosciuta",
+ "sub_labels": "Sottoetichette"
+ },
+ "tips": {
+ "desc": {
+ "step3": "Puoi utilizzare più filtri aggiungendoli uno dopo l'altro, lasciando uno spazio in mezzo.",
+ "step5": "Il filtro intervallo di tempo utilizza il formato {{exampleTime}}.",
+ "exampleLabel": "Esempio:",
+ "step1": "Digita un nome chiave di filtro seguito da due punti (ad esempio, \"telecamere:\").",
+ "step2": "Seleziona un valore dai suggerimenti oppure digita il tuo valore.",
+ "step4": "I filtri data (prima: e dopo:) utilizzano il formato {{DateFormat}}.",
+ "step6": "Rimuovi i filtri cliccando sulla \"x\" accanto ad essi.",
+ "text": "I filtri ti aiutano a restringere i risultati della ricerca. Ecco come usarli nel campo di inserimento:"
+ },
+ "title": "Come utilizzare i filtri di testo"
+ },
+ "toast": {
+ "error": {
+ "minScoreMustBeLessOrEqualMaxScore": "Il 'punteggio minimo' deve essere minore o uguale del 'punteggio massimo'.",
+ "beforeDateBeLaterAfter": "La data 'prima' deve essere successiva alla data 'dopo'.",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "La 'velocità minima' deve essere minore o uguale della 'velocità massima'.",
+ "afterDatebeEarlierBefore": "La data 'dopo' deve essere precedente alla data 'prima'.",
+ "maxScoreMustBeGreaterOrEqualMinScore": "Il 'punteggio massimo' deve essere maggiore o uguale del 'punteggio minimo'.",
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "La 'velocità massima' deve essere maggiore o uguale della 'velocità minima'."
+ }
+ },
+ "searchType": {
+ "thumbnail": "Miniatura",
+ "description": "Descrizione"
+ },
+ "header": {
+ "noFilters": "Filtri",
+ "activeFilters": "Filtri attivi",
+ "currentFilterType": "Valori del filtro"
+ }
+ },
+ "similaritySearch": {
+ "clear": "Cancella ricerca di somiglianza",
+ "title": "Ricerca di somiglianza",
+ "active": "Ricerca di somiglianza attiva"
+ },
+ "placeholder": {
+ "search": "Ricerca…"
+ },
+ "trackedObjectId": "ID oggetto tracciato"
+}
diff --git a/web/public/locales/it/views/settings.json b/web/public/locales/it/views/settings.json
new file mode 100644
index 000000000..de0fea314
--- /dev/null
+++ b/web/public/locales/it/views/settings.json
@@ -0,0 +1,686 @@
+{
+ "documentTitle": {
+ "authentication": "Impostazioni di autenticazione - Frigate",
+ "default": "Impostazioni - Frigate",
+ "classification": "Impostazioni di classificazione - Frigate",
+ "camera": "Impostazioni telecamera - Frigate",
+ "masksAndZones": "Editor di maschere e zone - Frigate",
+ "motionTuner": "Regolatore di movimento - Frigate",
+ "object": "Correzioni - Frigate",
+ "general": "Impostazioni generali - Frigate",
+ "frigatePlus": "Impostazioni Frigate+ - Frigate",
+ "notifications": "Impostazioni di notifiche - Frigate",
+ "enrichments": "Impostazioni di miglioramento - Frigate"
+ },
+ "frigatePlus": {
+ "snapshotConfig": {
+ "cleanCopyWarning": "Alcune telecamere hanno le istantanee abilitate ma la copia pulita disabilitata. È necessario abilitare clean_copy nella configurazione delle istantanee per poter inviare le immagini da queste telecamere a Frigate+.",
+ "table": {
+ "snapshots": "Istantanee",
+ "camera": "Telecamera",
+ "cleanCopySnapshots": "clean_copy Istantanee"
+ },
+ "desc": "Per inviare a Frigate+ è necessario che nella configurazione siano abilitate sia le istantanee che le istantanee clean_copy.",
+ "documentation": "Leggi la documentazione",
+ "title": "Configurazione istantanee"
+ },
+ "apiKey": {
+ "title": "Chiave API Frigate+",
+ "validated": "La chiave API Frigate+ è stata rilevata e convalidata",
+ "notValidated": "La chiave API Frigate+ non è stata rilevata o non è stata convalidata",
+ "desc": "La chiave API Frigate+ consente l'integrazione con il servizio Frigate+.",
+ "plusLink": "Scopri di più su Frigate+"
+ },
+ "modelInfo": {
+ "trainDate": "Data addestramento",
+ "baseModel": "Modello base",
+ "cameras": "Telecamere",
+ "plusModelType": {
+ "userModel": "Messa a punto fine",
+ "baseModel": "Modello base"
+ },
+ "availableModels": "Modelli disponibili",
+ "loadingAvailableModels": "Caricamento dei modelli disponibili…",
+ "supportedDetectors": "Rilevatori supportati",
+ "error": "Impossibile caricare le informazioni sul modello",
+ "modelType": "Tipo di modello",
+ "modelSelect": "Qui puoi selezionare i modelli disponibili su Frigate+. Nota: puoi selezionare solo i modelli compatibili con la configurazione attuale del tuo rilevatore.",
+ "title": "Informazioni sul modello",
+ "loading": "Caricamento informazioni sul modello…"
+ },
+ "toast": {
+ "error": "Impossibile salvare le modifiche alla configurazione: {{errorMessage}}",
+ "success": "Le impostazioni di Frigate+ sono state salvate. Riavvia Frigate per applicare le modifiche."
+ },
+ "title": "Impostazioni Frigate+",
+ "restart_required": "Riavvio richiesto (modello Frigate+ modificato)",
+ "unsavedChanges": "Modifiche alle impostazioni di Frigate+ non salvate"
+ },
+ "debug": {
+ "timestamp": {
+ "desc": "Sovrapponi l'orario all'immagine",
+ "title": "Orario"
+ },
+ "objectShapeFilterDrawing": {
+ "tips": "Abilita questa opzione per disegnare un rettangolo sull'immagine della telecamera per mostrarne l'area e il rapporto. Questi valori possono quindi essere utilizzati per impostare i parametri del filtro forma oggetto nella configurazione.",
+ "area": "Area",
+ "title": "Disegno del filtro della forma dell'oggetto",
+ "desc": "Disegna un rettangolo sull'immagine per visualizzare i dettagli dell'area e del rapporto",
+ "document": "Leggi la documentazione ",
+ "score": "Punteggio",
+ "ratio": "Rapporto"
+ },
+ "detectorDesc": "Frigate utilizza i tuoi rilevatori ({{detectors}}) per rilevare oggetti nel flusso video della tua telecamera.",
+ "boundingBoxes": {
+ "colors": {
+ "info": "Riquadri di regione
I riquadri di colore verde brillante verranno sovrapposte alle aree di interesse nel fotogramma che viene inviato al rilevatore di oggetti.
", + "title": "Regioni", + "desc": "Mostra un riquadro della regione di interesse inviata al rilevatore di oggetti" + }, + "noObjects": "Nessun oggetto", + "title": "Correzioni", + "desc": "La vista di correzione mostra una vista in tempo reale degli oggetti tracciati e delle relative statistiche. L'elenco degli oggetti mostra un riepilogo ritardato degli oggetti rilevati.", + "debugging": "Correzioni", + "objectList": "Elenco degli oggetti", + "mask": { + "desc": "Mostra i poligoni della maschera di movimento", + "title": "Maschere di movimento" + }, + "motion": { + "title": "Riquadri di movimento", + "desc": "Mostra i riquadri attorno alle aree in cui viene rilevato il movimento", + "tips": "Riquadri di movimento
I riquadri rossi verranno sovrapposti alle aree dell'inquadratura in cui viene attualmente rilevato un movimento
" + }, + "zones": { + "title": "Zone", + "desc": "Mostra un contorno di tutte le zone definite" + } + }, + "masksAndZones": { + "motionMasks": { + "context": { + "title": "Le maschere di movimento vengono utilizzate per impedire che tipi di movimento indesiderati attivino il rilevamento (ad esempio: rami di alberi, orari di telecamere). Le maschere di movimento dovrebbero essere utilizzate con molta parsimonia: un uso eccessivo renderebbe più difficile il tracciamento degli oggetti.", + "documentation": "Leggi la documentazione" + }, + "desc": { + "title": "Le maschere di movimento vengono utilizzate per impedire che movimenti indesiderati attivino il rilevamento. Un mascheramento eccessivo renderà più difficile il tracciamento degli oggetti.", + "documentation": "Documentazione" + }, + "label": "Maschera di movimento", + "edit": "Modifica maschera di movimento", + "clickDrawPolygon": "Fai clic per disegnare un poligono sull'immagine.", + "polygonAreaTooLarge": { + "title": "La maschera di movimento copre il {{polygonArea}}% dell'inquadratura. Si sconsiglia di utilizzare maschere di movimento di grandi dimensioni.", + "documentation": "Leggi la documentazione", + "tips": "Le maschere di movimento non impediscono il rilevamento degli oggetti. È consigliabile utilizzare una zona specifica." + }, + "point_one": "{{count}} punto", + "point_many": "{{count}} punti", + "point_other": "{{count}} punti", + "documentTitle": "Modifica maschera movimento - Frigate", + "add": "Nuova maschera di movimento", + "toast": { + "success": { + "title": "{{polygonName}} è stato salvato. Riavvia Frigate per applicare le modifiche.", + "noName": "La maschera di movimento è stata salvata. Riavvia Frigate per applicare le modifiche." + } + } + }, + "form": { + "zoneName": { + "error": { + "hasIllegalCharacter": "Il nome della zona contiene caratteri non validi.", + "mustNotBeSameWithCamera": "Il nome della zona non deve essere uguale al nome della telecamera.", + "mustBeAtLeastTwoCharacters": "Il nome della zona deve essere composto da almeno 2 caratteri.", + "alreadyExists": "Per questa telecamera esiste già una zona con questo nome.", + "mustNotContainPeriod": "Il nome della zona non deve contenere punti." + } + }, + "distance": { + "error": { + "text": "La distanza deve essere maggiore o uguale a 0.1.", + "mustBeFilled": "Per utilizzare la stima della velocità è necessario compilare tutti i campi relativi alla distanza." + } + }, + "polygonDrawing": { + "delete": { + "title": "Conferma eliminazione", + "desc": "Sei sicuro di voler eliminare {{type}} {{name}}?", + "success": "{{name}} è stato eliminato." + }, + "removeLastPoint": "Rimuovi l'ultimo punto", + "reset": { + "label": "Cancella tutti i punti" + }, + "snapPoints": { + "true": "Aggancia punti", + "false": "Non agganciare punti" + }, + "error": { + "mustBeFinished": "Prima di salvare, è necessario terminare il disegno del poligono." + } + }, + "inertia": { + "error": { + "mustBeAboveZero": "L'inerzia deve essere superiore a 0." + } + }, + "loiteringTime": { + "error": { + "mustBeGreaterOrEqualZero": "Il tempo di permanenza deve essere maggiore o uguale a 0." + } + }, + "speed": { + "error": { + "mustBeGreaterOrEqualTo": "La soglia di velocità deve essere maggiore o uguale a 0,1." + } + } + }, + "filter": { + "all": "Tutte le maschere e zone" + }, + "toast": { + "success": { + "copyCoordinates": "Coordinate per {{polyName}} copiate negli appunti." + }, + "error": { + "copyCoordinatesFailed": "Impossibile copiare le coordinate negli appunti." + } + }, + "zones": { + "speedEstimation": { + "desc": "Abilita la stima della velocità per gli oggetti in questa zona. La zona deve avere esattamente 4 punti.", + "title": "Stima della velocità", + "docs": "Leggi la documentazione", + "lineCDistance": "Distanza della linea C ({{unit}})", + "lineDDistance": "Distanza della linea D ({{unit}})", + "lineADistance": "Distanza della linea A ({{unit}})", + "lineBDistance": "Distanza della linea B ({{unit}})" + }, + "add": "Aggiungi zona", + "speedThreshold": { + "desc": "Specifica una velocità minima affinché gli oggetti vengano presi in considerazione in questa zona.", + "toast": { + "error": { + "pointLengthError": "La stima della velocità è stata disattivata per questa zona. Le zone con stima della velocità devono avere esattamente 4 punti.", + "loiteringTimeError": "Le zone con tempi di permanenza superiori a 0 non devono essere utilizzate per la stima della velocità." + } + }, + "title": "Soglia di velocità ({{unit}})" + }, + "desc": { + "title": "Le zone consentono di definire un'area specifica dell'inquadratura, in modo da poter determinare se un oggetto si trova o meno all'interno di un'area particolare.", + "documentation": "Documentazione" + }, + "edit": "Modifica zona", + "name": { + "inputPlaceHolder": "Inserisci un nome…", + "title": "Nome", + "tips": "Il nome deve essere composto da almeno 2 caratteri e non deve essere il nome di una telecamera o di un'altra zona." + }, + "clickDrawPolygon": "Fai clic per disegnare un poligono sull'immagine.", + "point_one": "{{count}} punto", + "point_many": "{{count}} punti", + "point_other": "{{count}} punti", + "label": "Zone", + "documentTitle": "Modifica zona - Frigate", + "inertia": { + "title": "Inerzia", + "desc": "Specifica quanti fotogrammi deve avere un oggetto in una zona prima di essere considerato nella zona. Predefinito: 3" + }, + "loiteringTime": { + "title": "Tempo di permanenza", + "desc": "Imposta un intervallo di tempo minimo in secondi per cui l'oggetto deve trovarsi nella zona affinché venga attivato. Predefinito: 0" + }, + "objects": { + "title": "Oggetti", + "desc": "Elenco degli oggetti che si applicano a questa zona." + }, + "allObjects": "Tutti gli oggetti", + "toast": { + "success": "La zona ({{zoneName}}) è stata salvata. Riavvia Frigate per applicare le modifiche." + } + }, + "objectMasks": { + "desc": { + "title": "Le maschere di filtro degli oggetti vengono utilizzate per filtrare i falsi positivi per un determinato tipo di oggetto in base alla posizione.", + "documentation": "Documentazione" + }, + "context": "Le maschere di filtro degli oggetti vengono utilizzate per filtrare i falsi positivi per un determinato tipo di oggetto in base alla posizione.", + "point_one": "{{count}} punto", + "point_many": "{{count}} punti", + "point_other": "{{count}} punti", + "add": "Aggiungi maschera oggetti", + "clickDrawPolygon": "Fai clic per disegnare un poligono sull'immagine.", + "edit": "Modifica maschera oggetti", + "objects": { + "desc": "Il tipo di oggetto che si applica a questa maschera di oggetti.", + "title": "Oggetti", + "allObjectTypes": "Tutti i tipi di oggetti" + }, + "toast": { + "success": { + "noName": "La maschera oggetto è stata salvata. Riavvia Frigate per applicare le modifiche.", + "title": "{{polygonName}} è stato salvato. Riavvia Frigate per applicare le modifiche." + } + }, + "label": "Maschere di oggetti", + "documentTitle": "Modifica maschera oggetti - Frigate" + }, + "restart_required": "Riavvio richiesto (maschere/zone modificate)", + "motionMaskLabel": "Maschera di movimento {{number}}", + "objectMaskLabel": "Maschera di oggetto {{number}} ({{label}})" + }, + "cameraSetting": { + "camera": "Telecamera", + "noCamera": "Nessuna telecamera" + }, + "camera": { + "reviewClassification": { + "limitDetections": "Limita i rilevamenti a zone specifiche", + "objectDetectionsTips": "Tutti gli oggetti {{detectionsLabels}} non categorizzati su {{cameraName}} verranno mostrati come Rilevamenti, indipendentemente dalla zona in cui si trovano.", + "zoneObjectDetectionsTips": { + "text": "Tutti gli oggetti {{detectionsLabels}} non categorizzati in {{zone}} su {{cameraName}} verranno mostrati come Rilevamenti.", + "notSelectDetections": "Tutti gli oggetti {{detectionsLabels}} rilevati in {{zone}} su {{cameraName}} non classificati come Avvisi verranno mostrati come Rilevamenti, indipendentemente dalla zona in cui si trovano.", + "regardlessOfZoneObjectDetectionsTips": "Tutti gli oggetti {{detectionsLabels}} non categorizzati su {{cameraName}} verranno mostrati come Rilevamenti, indipendentemente dalla zona in cui si trovano." + }, + "title": "Classificazione della revisione", + "desc": "Frigate categorizza gli elementi di revisione come Avvisi e Rilevamenti. Per impostazione predefinita, tutti gli oggetti persona e auto sono considerati Avvisi. Puoi perfezionare la categorizzazione degli elementi di revisione configurando le zone desiderate.", + "objectAlertsTips": "Tutti gli oggetti {{alertsLabels}} su {{cameraName}} verranno mostrati come Avvisi.", + "toast": { + "success": "La configurazione della classificazione di revisione è stata salvata. Riavvia Frigate per applicare le modifiche." + }, + "readTheDocumentation": "Leggi la documentazione", + "noDefinedZones": "Per questa telecamera non sono definite zone.", + "zoneObjectAlertsTips": "Tutti gli oggetti {{alertsLabels}} rilevati in {{zone}} su {{cameraName}} verranno visualizzati come Avvisi.", + "selectAlertsZones": "Seleziona le zone per gli Avvisi", + "selectDetectionsZones": "Seleziona le zone per i Rilevamenti", + "unsavedChanges": "Impostazioni di classificazione delle revisioni non salvate per {{camera}}" + }, + "streams": { + "desc": "Disattiva temporaneamente una telecamera fino al riavvio di Frigate. La disattivazione completa di una telecamera interrompe l'elaborazione dei flussi da parte di Frigate. Rilevamento, registrazione e correzioni non saranno disponibili.https://...). Questa è una limitazione del browser. Accedi a Frigate in modo sicuro per utilizzare le notifiche.",
+ "documentation": "Leggi la documentazione",
+ "title": "Notifiche non disponibili"
+ },
+ "deviceSpecific": "Impostazioni specifiche del dispositivo",
+ "toast": {
+ "success": {
+ "registered": "Registrazione per le notifiche completata con successo. È necessario riavviare Frigate prima di poter inviare qualsiasi notifica (inclusa una notifica di prova).",
+ "settingSaved": "Le impostazioni di notifica sono state salvate."
+ },
+ "error": {
+ "registerFailed": "Impossibile salvare la registrazione della notifica."
+ }
+ },
+ "title": "Notifiche",
+ "notificationSettings": {
+ "title": "Impostazioni notifiche",
+ "desc": "Frigate può inviare notifiche push in modo nativo al tuo dispositivo quando è in esecuzione nel browser o installato come PWA.",
+ "documentation": "Leggi la documentazione"
+ },
+ "cancelSuspension": "Annulla sospensione",
+ "unsavedRegistrations": "Registrazioni di notifiche non salvate",
+ "unsavedChanges": "Modifiche alle notifiche non salvate"
+ },
+ "enrichments": {
+ "toast": {
+ "success": "Le impostazioni di miglioramento sono state salvate. Riavvia Frigate per applicare le modifiche.",
+ "error": "Impossibile salvare le modifiche alla configurazione: {{errorMessage}}"
+ },
+ "title": "Impostazioni di miglioramento",
+ "semanticSearch": {
+ "reindexNow": {
+ "desc": "La reindicizzazione rigenererà gli incorporamenti per tutti gli oggetti tracciati. Questo processo viene eseguito in sottofondo e potrebbe impegnare al massimo la CPU e richiedere un tempo considerevole, a seconda del numero di oggetti tracciati.",
+ "success": "Reindicizzazione avviata con successo.",
+ "label": "Reindicizza ora",
+ "confirmTitle": "Conferma reindicizzazione",
+ "confirmDesc": "Vuoi davvero reindicizzare tutti gli incorporamenti di oggetti tracciati? Questo processo verrà eseguito in sottofondo, ma potrebbe impegnare al massimo la CPU e richiedere molto tempo. Puoi monitorare l'avanzamento nella pagina Esplora.",
+ "confirmButton": "Reindicizza",
+ "alreadyInProgress": "La reindicizzazione è già in corso.",
+ "error": "Impossibile avviare la reindicizzazione: {{errorMessage}}"
+ },
+ "modelSize": {
+ "small": {
+ "desc": "Utilizzando piccolo si utilizza una versione quantizzata del modello che utilizza meno RAM ed è più veloce sulla CPU con una differenza davvero trascurabile nella qualità di incorporamento.",
+ "title": "piccolo"
+ },
+ "label": "Dimensioni del modello",
+ "desc": "Dimensione del modello utilizzato per gli incorporamenti della ricerca semantica.",
+ "large": {
+ "title": "grande",
+ "desc": "L'utilizzo di grande utilizza il modello Jina completo e, se applicabile, verrà eseguito automaticamente sulla GPU."
+ }
+ },
+ "title": "Ricerca semantica",
+ "desc": "La ricerca semantica in Frigate consente di trovare gli oggetti tracciati all'interno degli elementi della recensione utilizzando l'immagine stessa, una descrizione testuale definita dall'utente o una generata automaticamente.",
+ "readTheDocumentation": "Leggi la documentazione"
+ },
+ "faceRecognition": {
+ "desc": "Il riconoscimento facciale consente di assegnare un nome alle persone e, quando il volto viene riconosciuto, Frigate assegnerà il nome della persona come sottoetichetta. Queste informazioni sono incluse nell'interfaccia utente, nei filtri e nelle notifiche.",
+ "title": "Riconoscimento facciale",
+ "readTheDocumentation": "Leggi la documentazione",
+ "modelSize": {
+ "label": "Dimensioni del modello",
+ "desc": "Dimensioni del modello utilizzato per il riconoscimento facciale.",
+ "small": {
+ "title": "piccolo",
+ "desc": "L'utilizzo di piccolo sfrutta un modello di incorporamento di volti FaceNet che funziona in modo efficiente sulla maggior parte delle CPU."
+ },
+ "large": {
+ "title": "grande",
+ "desc": "L'utilizzo di grande impiega un modello di incorporamento di volti ArcFace e verrà eseguito automaticamente sulla GPU, se applicabile."
+ }
+ }
+ },
+ "birdClassification": {
+ "desc": "La classificazione degli uccelli identifica gli uccelli noti utilizzando un modello Tensorflow quantizzato. Quando un uccello noto viene riconosciuto, il suo nome comune viene aggiunto come sub_label. Queste informazioni sono incluse nell'interfaccia utente, nei filtri e nelle notifiche.",
+ "title": "Classificazione degli uccelli"
+ },
+ "licensePlateRecognition": {
+ "desc": "Frigate può riconoscere le targhe dei veicoli e aggiungere automaticamente i caratteri rilevati al campo recognized_license_plate o un nome noto come sub_label agli oggetti di tipo \"car\". Un caso d'uso comune potrebbe essere la lettura delle targhe delle auto che entrano in un vialetto o che transitano lungo una strada.",
+ "title": "Riconoscimento della targa",
+ "readTheDocumentation": "Leggi la documentazione"
+ },
+ "unsavedChanges": "Modifiche alle impostazioni di miglioramento non salvate",
+ "restart_required": "Riavvio richiesto (impostazioni di miglioramento modificate)"
+ }
+}
diff --git a/web/public/locales/it/views/system.json b/web/public/locales/it/views/system.json
new file mode 100644
index 000000000..ee838403c
--- /dev/null
+++ b/web/public/locales/it/views/system.json
@@ -0,0 +1,180 @@
+{
+ "documentTitle": {
+ "cameras": "Statistiche telecamere - Frigate",
+ "enrichments": "Statistiche di miglioramento - Frigate",
+ "storage": "Statistiche archiviazione - Frigate",
+ "general": "Statistiche generali - Frigate",
+ "logs": {
+ "frigate": "Registri Frigate - Frigate",
+ "go2rtc": "Registri Go2RTC - Frigate",
+ "nginx": "Registri Nginx - Frigate"
+ }
+ },
+ "logs": {
+ "type": {
+ "timestamp": "Orario",
+ "label": "Tipo",
+ "tag": "Etichetta",
+ "message": "Messaggio"
+ },
+ "tips": "I registri vengono trasmessi dal server",
+ "toast": {
+ "error": {
+ "whileStreamingLogs": "Errore durante la trasmissione dei registri: {{errorMessage}}",
+ "fetchingLogsFailed": "Errore durante il recupero dei registri: {{errorMessage}}"
+ }
+ },
+ "download": {
+ "label": "Scarica registri"
+ },
+ "copy": {
+ "label": "Copia negli appunti",
+ "success": "Registri copiati negli appunti",
+ "error": "Impossibile copiare i registri negli appunti"
+ }
+ },
+ "general": {
+ "hardwareInfo": {
+ "gpuInfo": {
+ "nvidiaSMIOutput": {
+ "cudaComputerCapability": "Capacità di elaborazione CUDA: {{cuda_compute}}",
+ "title": "Risultati Nvidia SMI",
+ "name": "Nome: {{name}}",
+ "driver": "Driver: {{driver}}",
+ "vbios": "Informazioni VBios: {{vbios}}"
+ },
+ "vainfoOutput": {
+ "title": "Risultati Vainfo",
+ "returnCode": "Codice di ritorno: {{code}}",
+ "processOutput": "Risultati del processo:",
+ "processError": "Errore del processo:"
+ },
+ "closeInfo": {
+ "label": "Chiudi informazioni GPU"
+ },
+ "copyInfo": {
+ "label": "Copia informazioni GPU"
+ },
+ "toast": {
+ "success": "Informazioni GPU copiate negli appunti"
+ }
+ },
+ "title": "Informazioni hardware",
+ "gpuDecoder": "Decodificatore GPU",
+ "gpuEncoder": "Codificatore GPU",
+ "gpuUsage": "Utilizzo GPU",
+ "gpuMemory": "Memoria GPU",
+ "npuUsage": "Utilizzo NPU",
+ "npuMemory": "Memoria NPU"
+ },
+ "detector": {
+ "inferenceSpeed": "Velocità inferenza rilevatore",
+ "title": "Rilevatori",
+ "cpuUsage": "Utilizzo CPU rilevatore",
+ "memoryUsage": "Utilizzo memoria rilevatore",
+ "temperature": "Temperatura del rilevatore"
+ },
+ "title": "Generale",
+ "otherProcesses": {
+ "title": "Altri processi",
+ "processCpuUsage": "Utilizzo CPU processo",
+ "processMemoryUsage": "Utilizzo memoria processo"
+ }
+ },
+ "enrichments": {
+ "embeddings": {
+ "face_embedding_speed": "Velocità incorporazione volti",
+ "plate_recognition_speed": "Velocità riconoscimento targhe",
+ "image_embedding_speed": "Velocità incorporazione immagini",
+ "text_embedding_speed": "Velocità incorporazione testo",
+ "face_recognition_speed": "Velocità di riconoscimento facciale",
+ "face_recognition": "Riconoscimento facciale",
+ "plate_recognition": "Riconoscimento delle targhe",
+ "yolov9_plate_detection_speed": "Velocità di rilevamento della targa con YOLOv9",
+ "yolov9_plate_detection": "Rilevamento della targa con YOLOv9",
+ "image_embedding": "Incorporamento di immagini",
+ "text_embedding": "Incorporamento di testo"
+ },
+ "title": "Miglioramenti",
+ "infPerSecond": "Inferenze al secondo"
+ },
+ "cameras": {
+ "info": {
+ "fetching": "Recupero dati della telecamera",
+ "streamDataFromFFPROBE": "I dati del flusso vengono ottenuti con ffprobe.",
+ "cameraProbeInfo": "Informazioni analisi telecamera {{camera}}",
+ "stream": "Flusso {{idx}}",
+ "video": "Video:",
+ "codec": "Codec:",
+ "resolution": "Risoluzione:",
+ "fps": "FPS:",
+ "unknown": "Sconosciuto",
+ "audio": "Audio:",
+ "error": "Errore: {{error}}",
+ "tips": {
+ "title": "Informazioni analisi telecamera"
+ },
+ "aspectRatio": "rapporto d'aspetto"
+ },
+ "title": "Telecamere",
+ "overview": "Sommario",
+ "framesAndDetections": "Fotogrammi / Rilevamenti",
+ "label": {
+ "camera": "telecamera",
+ "detect": "rileva",
+ "skipped": "saltato",
+ "ffmpeg": "FFmpeg",
+ "capture": "cattura",
+ "overallFramesPerSecond": "fotogrammi totali al secondo",
+ "overallDetectionsPerSecond": "rilevamenti totali al secondo",
+ "overallSkippedDetectionsPerSecond": "rilevamenti totali saltati al secondo",
+ "cameraCapture": "{{camName}} cattura",
+ "cameraDetect": "{{camName}} rileva",
+ "cameraFramesPerSecond": "{{camName}} fotogrammi al secondo",
+ "cameraDetectionsPerSecond": "{{camName}} rilevamenti al secondo",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} rilevamenti saltati al secondo",
+ "cameraFfmpeg": "{{camName}} FFmpeg"
+ },
+ "toast": {
+ "success": {
+ "copyToClipboard": "Dati di analisi copiati negli appunti."
+ },
+ "error": {
+ "unableToProbeCamera": "Impossibile analizzare la telecamera: {{errorMessage}}"
+ }
+ }
+ },
+ "stats": {
+ "detectHighCpuUsage": "{{camera}} ha un utilizzo elevato della CPU con il rilevamento ({{detectAvg}}%)",
+ "ffmpegHighCpuUsage": "{{camera}} ha un elevato utilizzo della CPU con FFmpeg ({{ffmpegAvg}}%)",
+ "healthy": "Il sistema è integro",
+ "reindexingEmbeddings": "Reindicizzazione degli incorporamenti (completata al {{processed}}%)",
+ "cameraIsOffline": "{{camera}} è disconnessa",
+ "detectIsSlow": "{{detect}} è lento ({{speed}} ms)",
+ "detectIsVerySlow": "{{detect}} è molto lento ({{speed}} ms)"
+ },
+ "title": "Sistema",
+ "metrics": "Metriche di sistema",
+ "storage": {
+ "title": "Archiviazione",
+ "overview": "Sommario",
+ "recordings": {
+ "title": "Registrazioni",
+ "tips": "Questo valore rappresenta lo spazio di archiviazione totale utilizzato dalle registrazioni nel database di Frigate. Frigate non tiene traccia dell'utilizzo dello spazio di archiviazione per tutti i file presenti sul disco.",
+ "earliestRecording": "Prima registrazione disponibile:"
+ },
+ "cameraStorage": {
+ "title": "Archiviazione della telecamera",
+ "camera": "Telecamera",
+ "unusedStorageInformation": "Informazioni spazio di archiviazione non utilizzato",
+ "storageUsed": "Archiviazione",
+ "percentageOfTotalUsed": "Percentuale del totale",
+ "bandwidth": "Larghezza di banda",
+ "unused": {
+ "title": "Liberi",
+ "tips": "Questo valore potrebbe non rappresentare accuratamente lo spazio libero disponibile per Frigate se nel disco sono archiviati altri file oltre alle registrazioni di Frigate. Frigate non tiene traccia dell'utilizzo dello spazio di archiviazione al di fuori delle sue registrazioni."
+ }
+ }
+ },
+ "lastRefreshed": "Ultimo aggiornamento: "
+}
diff --git a/web/public/locales/ja/audio.json b/web/public/locales/ja/audio.json
new file mode 100644
index 000000000..533e387cc
--- /dev/null
+++ b/web/public/locales/ja/audio.json
@@ -0,0 +1,5 @@
+{
+ "speech": "スピーチ",
+ "car": "自動車",
+ "bicycle": "自転車"
+}
diff --git a/web/public/locales/ja/common.json b/web/public/locales/ja/common.json
new file mode 100644
index 000000000..44b1d2b51
--- /dev/null
+++ b/web/public/locales/ja/common.json
@@ -0,0 +1,7 @@
+{
+ "time": {
+ "untilForRestart": "Frigateが再起動するまで.",
+ "untilRestart": "再起動まで",
+ "untilForTime": "{{time}} まで"
+ }
+}
diff --git a/web/public/locales/ja/components/auth.json b/web/public/locales/ja/components/auth.json
new file mode 100644
index 000000000..db2e691c0
--- /dev/null
+++ b/web/public/locales/ja/components/auth.json
@@ -0,0 +1,7 @@
+{
+ "form": {
+ "user": "ユーザー名",
+ "password": "パスワード",
+ "login": "ログイン"
+ }
+}
diff --git a/web/public/locales/ja/components/camera.json b/web/public/locales/ja/components/camera.json
new file mode 100644
index 000000000..e2411e813
--- /dev/null
+++ b/web/public/locales/ja/components/camera.json
@@ -0,0 +1,7 @@
+{
+ "group": {
+ "label": "カメラグループ",
+ "add": "カメラグループを追加",
+ "edit": "カメラグループを編集"
+ }
+}
diff --git a/web/public/locales/ja/components/dialog.json b/web/public/locales/ja/components/dialog.json
new file mode 100644
index 000000000..9b0a3b3bc
--- /dev/null
+++ b/web/public/locales/ja/components/dialog.json
@@ -0,0 +1,9 @@
+{
+ "restart": {
+ "title": "Frigateを再起動しますか?",
+ "restarting": {
+ "title": "Frigateは再起動中です"
+ },
+ "button": "再起動"
+ }
+}
diff --git a/web/public/locales/ja/components/filter.json b/web/public/locales/ja/components/filter.json
new file mode 100644
index 000000000..10c2b4912
--- /dev/null
+++ b/web/public/locales/ja/components/filter.json
@@ -0,0 +1,9 @@
+{
+ "labels": {
+ "label": "ラベル",
+ "all": {
+ "title": "すべてのラベル"
+ }
+ },
+ "filter": "フィルタ"
+}
diff --git a/web/public/locales/ja/components/icons.json b/web/public/locales/ja/components/icons.json
new file mode 100644
index 000000000..2307ca4f1
--- /dev/null
+++ b/web/public/locales/ja/components/icons.json
@@ -0,0 +1,8 @@
+{
+ "iconPicker": {
+ "search": {
+ "placeholder": "アイコンを検索…"
+ },
+ "selectIcon": "アイコンを選択"
+ }
+}
diff --git a/web/public/locales/ja/components/input.json b/web/public/locales/ja/components/input.json
new file mode 100644
index 000000000..fcf6fccab
--- /dev/null
+++ b/web/public/locales/ja/components/input.json
@@ -0,0 +1,10 @@
+{
+ "button": {
+ "downloadVideo": {
+ "label": "ビデオをダウンロード",
+ "toast": {
+ "success": "あなたのレビュー項目ビデオのダウンロードを開始しました."
+ }
+ }
+ }
+}
diff --git a/web/public/locales/ja/components/player.json b/web/public/locales/ja/components/player.json
new file mode 100644
index 000000000..153b60804
--- /dev/null
+++ b/web/public/locales/ja/components/player.json
@@ -0,0 +1,5 @@
+{
+ "noPreviewFound": "プレビューが見つかりません",
+ "noRecordingsFoundForThisTime": "この時間帯に録画は見つかりませんでした",
+ "noPreviewFoundFor": "{{cameraName}} のプレビューが見つかりません"
+}
diff --git a/web/public/locales/ja/objects.json b/web/public/locales/ja/objects.json
new file mode 100644
index 000000000..0f9ddaa73
--- /dev/null
+++ b/web/public/locales/ja/objects.json
@@ -0,0 +1,5 @@
+{
+ "bicycle": "自転車",
+ "car": "自動車",
+ "person": "人物"
+}
diff --git a/web/public/locales/ja/views/configEditor.json b/web/public/locales/ja/views/configEditor.json
new file mode 100644
index 000000000..b3d523c94
--- /dev/null
+++ b/web/public/locales/ja/views/configEditor.json
@@ -0,0 +1,7 @@
+{
+ "copyConfig": "設定をコピー",
+ "configEditor": "Configエディタ",
+ "saveAndRestart": "保存後再起動",
+ "saveOnly": "保存",
+ "confirm": "保存せずに終了しますか?"
+}
diff --git a/web/public/locales/ja/views/events.json b/web/public/locales/ja/views/events.json
new file mode 100644
index 000000000..f8ac7549c
--- /dev/null
+++ b/web/public/locales/ja/views/events.json
@@ -0,0 +1,7 @@
+{
+ "detections": "検出",
+ "motion": {
+ "label": "動作"
+ },
+ "alerts": "アラート"
+}
diff --git a/web/public/locales/ja/views/explore.json b/web/public/locales/ja/views/explore.json
new file mode 100644
index 000000000..0dec7d0b9
--- /dev/null
+++ b/web/public/locales/ja/views/explore.json
@@ -0,0 +1,3 @@
+{
+ "generativeAI": "生成AI"
+}
diff --git a/web/public/locales/ja/views/exports.json b/web/public/locales/ja/views/exports.json
new file mode 100644
index 000000000..aa8eb6703
--- /dev/null
+++ b/web/public/locales/ja/views/exports.json
@@ -0,0 +1,5 @@
+{
+ "documentTitle": "エクスポート - Frigate",
+ "noExports": "エクスポートがありません",
+ "search": "検索"
+}
diff --git a/web/public/locales/ja/views/faceLibrary.json b/web/public/locales/ja/views/faceLibrary.json
new file mode 100644
index 000000000..5bb34f410
--- /dev/null
+++ b/web/public/locales/ja/views/faceLibrary.json
@@ -0,0 +1,5 @@
+{
+ "description": {
+ "placeholder": "このコレクションの名前を入力してください"
+ }
+}
diff --git a/web/public/locales/ja/views/live.json b/web/public/locales/ja/views/live.json
new file mode 100644
index 000000000..a279c5391
--- /dev/null
+++ b/web/public/locales/ja/views/live.json
@@ -0,0 +1,5 @@
+{
+ "documentTitle": "ライブ - Frigate",
+ "documentTitle.withCamera": "{{camera}} - ライブ - Frigate",
+ "lowBandwidthMode": "低帯域幅モード"
+}
diff --git a/web/public/locales/ja/views/recording.json b/web/public/locales/ja/views/recording.json
new file mode 100644
index 000000000..336551285
--- /dev/null
+++ b/web/public/locales/ja/views/recording.json
@@ -0,0 +1,5 @@
+{
+ "filter": "フィルタ",
+ "calendar": "カレンダー",
+ "export": "エクスポート"
+}
diff --git a/web/public/locales/ja/views/search.json b/web/public/locales/ja/views/search.json
new file mode 100644
index 000000000..02f285695
--- /dev/null
+++ b/web/public/locales/ja/views/search.json
@@ -0,0 +1,11 @@
+{
+ "searchFor": "{{inputValue}} を検索",
+ "button": {
+ "save": "検索を保存",
+ "delete": "保存した検索を削除",
+ "filterInformation": "フィルタ情報",
+ "clear": "検索をクリア"
+ },
+ "search": "検索",
+ "savedSearches": "保存した検索"
+}
diff --git a/web/public/locales/ja/views/settings.json b/web/public/locales/ja/views/settings.json
new file mode 100644
index 000000000..f0993c869
--- /dev/null
+++ b/web/public/locales/ja/views/settings.json
@@ -0,0 +1,7 @@
+{
+ "documentTitle": {
+ "authentication": "認証設定 - Frigate",
+ "camera": "カメラの設定 - Frigate",
+ "default": "設定 - Frigate"
+ }
+}
diff --git a/web/public/locales/ja/views/system.json b/web/public/locales/ja/views/system.json
new file mode 100644
index 000000000..2c5d736f2
--- /dev/null
+++ b/web/public/locales/ja/views/system.json
@@ -0,0 +1,7 @@
+{
+ "documentTitle": {
+ "cameras": "カメラ統計 - Frigate",
+ "general": "一般統計 - Frigate",
+ "storage": "ストレージ統計 - Frigate"
+ }
+}
diff --git a/web/public/locales/nb-NO/audio.json b/web/public/locales/nb-NO/audio.json
new file mode 100644
index 000000000..289d8273f
--- /dev/null
+++ b/web/public/locales/nb-NO/audio.json
@@ -0,0 +1,429 @@
+{
+ "bird": "Fugl",
+ "door": "Dør",
+ "sink": "Vask",
+ "blender": "Blender",
+ "bicycle": "Sykkel",
+ "motorcycle": "Motorsykkel",
+ "car": "Bil",
+ "bus": "Buss",
+ "train": "Tog",
+ "boat": "Båt",
+ "cat": "Katt",
+ "dog": "Hund",
+ "horse": "Hest",
+ "sheep": "Sau",
+ "skateboard": "Skateboard",
+ "mouse": "Mus",
+ "keyboard": "Tastatur",
+ "clock": "Klokke",
+ "scissors": "Saks",
+ "hair_dryer": "Hårføner",
+ "toothbrush": "Tannbørste",
+ "vehicle": "Kjøretøy",
+ "animal": "Dyr",
+ "bark": "Bjeff",
+ "goat": "Geit",
+ "groan": "Stønn",
+ "throat_clearing": "Kremting",
+ "sneeze": "Nysing",
+ "applause": "Applaus",
+ "chatter": "Skravling",
+ "crowd": "Folkemengde",
+ "bow_wow": "Voff-voff",
+ "livestock": "Husdyr",
+ "clip_clop": "Klipp-klopp",
+ "cluck": "Kakling",
+ "cock_a_doodle_doo": "Kykeliky",
+ "wild_animals": "Ville dyr",
+ "roaring_cats": "Brølende kattedyr",
+ "dogs": "Hunder",
+ "whale_vocalization": "Hval-vokalisering",
+ "strum": "Strumming",
+ "gong": "Gong",
+ "tuning_fork": "Stemmegaffel",
+ "opera": "Opera",
+ "waterfall": "Foss",
+ "motor_vehicle": "Motorvogn",
+ "emergency_vehicle": "Utrykningskjøretøy",
+ "police_car": "Politibil",
+ "rail_transport": "Jernbanetransport",
+ "fixed-wing_aircraft": "Fly med faste vinger",
+ "engine": "Motor",
+ "bathtub": "Badekar",
+ "toilet_flush": "Toalettskylling",
+ "coin": "Mynt",
+ "mechanisms": "Mekanismer",
+ "field_recording": "Feltinnspilling",
+ "speech": "Tale",
+ "babbling": "Babling",
+ "yell": "Rop",
+ "bellow": "Brøl",
+ "whoop": "Jubelrop",
+ "whispering": "Hvisking",
+ "laughter": "Latter",
+ "snicker": "Fnising",
+ "crying": "Gråt",
+ "sigh": "Sukk",
+ "singing": "Sang",
+ "choir": "Kor",
+ "yodeling": "Jodling",
+ "chant": "Sangrop",
+ "mantra": "Mantra",
+ "child_singing": "Barnesang",
+ "synthetic_singing": "Syntetisk sang",
+ "rapping": "Rapping",
+ "humming": "Nynning",
+ "grunt": "Grynt",
+ "whistling": "Plystring",
+ "breathing": "Pusting",
+ "wheeze": "Hvesing",
+ "snoring": "Snorking",
+ "gasp": "Gisp",
+ "pant": "Pesing",
+ "snort": "Snøfting",
+ "cough": "Hoste",
+ "sniff": "Snufs",
+ "run": "Løping",
+ "shuffle": "Sleping (av føtter)",
+ "footsteps": "Fottrinn",
+ "chewing": "Tygging",
+ "biting": "Biting",
+ "gargling": "Gurgling",
+ "stomach_rumble": "Mageknurr",
+ "burping": "Raping",
+ "hiccup": "Hikke",
+ "fart": "Promp",
+ "hands": "Hender",
+ "finger_snapping": "Fingerknipsing",
+ "clapping": "Applaus",
+ "heartbeat": "Hjerteslag",
+ "heart_murmur": "Hjertelyd (unormal)",
+ "cheering": "Jubel",
+ "children_playing": "Barn som leker",
+ "pets": "Kjæledyr",
+ "yip": "Klynk",
+ "howl": "Uling",
+ "growling": "Knurring",
+ "whimper_dog": "Klynking (hund)",
+ "purr": "Malelyd",
+ "meow": "Mjauing",
+ "hiss": "Fres",
+ "caterwaul": "Kattemjau",
+ "neigh": "Vrinsk",
+ "cattle": "Storfe",
+ "moo": "Rauting",
+ "cowbell": "Kubjelle",
+ "pig": "Gris",
+ "oink": "Nøff",
+ "bleat": "Breking",
+ "fowl": "Fjærfe",
+ "chicken": "Kylling",
+ "turkey": "Kalkun",
+ "gobble": "Kalkunlyd",
+ "duck": "And",
+ "quack": "Kvakking",
+ "goose": "Gås",
+ "honk": "Gåselyd",
+ "roar": "Brøl",
+ "chirp": "Kvitre",
+ "squawk": "Skvatring",
+ "pigeon": "Due",
+ "coo": "Kurre",
+ "crow": "Kråke",
+ "caw": "Krah",
+ "owl": "Ugle",
+ "hoot": "Uglelyd",
+ "flapping_wings": "Vingeslag",
+ "rats": "Rotter",
+ "patter": "Tripping",
+ "insect": "Insekt",
+ "cricket": "Gresshoppe",
+ "mosquito": "Mygg",
+ "fly": "Flue",
+ "buzz": "Summing",
+ "frog": "Frosk",
+ "croak": "Kvekking",
+ "snake": "Slange",
+ "rattle": "Ranglelyd",
+ "music": "Musikk",
+ "musical_instrument": "Musikkinstrument",
+ "plucked_string_instrument": "Klimpreinstrument",
+ "guitar": "Gitar",
+ "electric_guitar": "Elektrisk gitar",
+ "bass_guitar": "Bassgitar",
+ "acoustic_guitar": "Akustisk gitar",
+ "steel_guitar": "Steelgitar",
+ "tapping": "Tapping",
+ "banjo": "Banjo",
+ "sitar": "Sitar",
+ "mandolin": "Mandolin",
+ "zither": "Siter",
+ "ukulele": "Ukulele",
+ "piano": "Piano",
+ "electric_piano": "Elektrisk piano",
+ "organ": "Orgel",
+ "electronic_organ": "Elektronisk orgel",
+ "hammond_organ": "Hammondorgel",
+ "synthesizer": "Synthesizer",
+ "sampler": "Sampler",
+ "harpsichord": "Cembalo",
+ "percussion": "Perkusjon",
+ "drum_kit": "Trommesett",
+ "drum_machine": "Trommemaskin",
+ "drum": "Tromme",
+ "snare_drum": "Skarptromme",
+ "rimshot": "Slag på trommekanten",
+ "drum_roll": "Trommevirvel",
+ "bass_drum": "Basstromme",
+ "timpani": "Pauker",
+ "tabla": "Tabla",
+ "cymbal": "Symbal",
+ "hi_hat": "Hi-hat",
+ "wood_block": "Treblokk",
+ "tambourine": "Tamburin",
+ "maraca": "Maracas",
+ "tubular_bells": "Rørklokker",
+ "mallet_percussion": "Slagverk med køller",
+ "marimba": "Marimba",
+ "glockenspiel": "Glockenspiel",
+ "vibraphone": "Vibrafon",
+ "steelpan": "Steelpan",
+ "orchestra": "Orkester",
+ "brass_instrument": "Messingblåseinstrument",
+ "french_horn": "Valthorn",
+ "trumpet": "Trompet",
+ "trombone": "Trombone",
+ "bowed_string_instrument": "Strykeinstrument",
+ "string_section": "Strykere",
+ "violin": "Fiolin",
+ "pizzicato": "Pizzicato",
+ "cello": "Cello",
+ "double_bass": "Kontrabass",
+ "wind_instrument": "Treblåseinstrument",
+ "flute": "Fløyte",
+ "saxophone": "Saksofon",
+ "clarinet": "Klarinett",
+ "harp": "Harpe",
+ "bell": "Klokke",
+ "church_bell": "Kirkeklokke",
+ "jingle_bell": "Bjelle",
+ "bicycle_bell": "Sykkelbjelle",
+ "chime": "Klokkespill",
+ "wind_chime": "Vindklokke",
+ "harmonica": "Munnspill",
+ "accordion": "Akkordeon",
+ "bagpipes": "Sekkepipe",
+ "didgeridoo": "Didgeridoo",
+ "theremin": "Theremin",
+ "singing_bowl": "Syngeskål",
+ "scratching": "Skraping",
+ "pop_music": "Popmusikk",
+ "hip_hop_music": "Hip-hop musikk",
+ "beatboxing": "Beatboxing",
+ "rock_music": "Rockemusikk",
+ "heavy_metal": "Heavy metal",
+ "punk_rock": "Punkrock",
+ "grunge": "Grunge",
+ "progressive_rock": "Progressiv rock",
+ "rock_and_roll": "Rock and roll",
+ "psychedelic_rock": "Psykedelisk rock",
+ "rhythm_and_blues": "Rhythm and blues",
+ "soul_music": "Soulmusikk",
+ "reggae": "Reggae",
+ "country": "Country",
+ "swing_music": "Swingmusikk",
+ "bluegrass": "Bluegrass",
+ "funk": "Funk",
+ "folk_music": "Folkemusikk",
+ "middle_eastern_music": "Midtøsten-musikk",
+ "jazz": "Jazz",
+ "disco": "Disco",
+ "classical_music": "Klassisk musikk",
+ "electronic_music": "Elektronisk musikk",
+ "house_music": "House-musikk",
+ "techno": "Techno",
+ "dubstep": "Dubstep",
+ "drum_and_bass": "Drum and bass",
+ "electronica": "Electronica",
+ "electronic_dance_music": "Elektronisk dansemusikk",
+ "trance_music": "Trancemusikk",
+ "ambient_music": "Ambient musikk",
+ "music_of_latin_america": "Latinamerikansk musikk",
+ "salsa_music": "Salsamusikk",
+ "flamenco": "Flamenco",
+ "blues": "Blues",
+ "music_for_children": "Musikk for barn",
+ "new-age_music": "New age-musikk",
+ "vocal_music": "Vokalmusikk",
+ "a_capella": "A cappella",
+ "music_of_africa": "Afrikansk musikk",
+ "afrobeat": "Afrobeat",
+ "christian_music": "Kristelig musikk",
+ "gospel_music": "Gospelmusikk",
+ "music_of_asia": "Asiatisk musikk",
+ "carnatic_music": "Karnatisk musikk",
+ "music_of_bollywood": "Bollywood-musikk",
+ "ska": "Ska",
+ "traditional_music": "Tradisjonell musikk",
+ "independent_music": "Indie-musikk",
+ "song": "Sang",
+ "background_music": "Bakgrunnsmusikk",
+ "theme_music": "Temamusikk",
+ "jingle": "Jingle",
+ "soundtrack_music": "Filmmusikk",
+ "lullaby": "Vuggevise",
+ "video_game_music": "Videospillmusikk",
+ "christmas_music": "Julemusikk",
+ "dance_music": "Dansemusikk",
+ "wedding_music": "Bryllupsmusikk",
+ "happy_music": "Glad musikk",
+ "sad_music": "Trist musikk",
+ "tender_music": "Vakker musikk",
+ "exciting_music": "Spennende musikk",
+ "angry_music": "Sint musikk",
+ "scary_music": "Skummel musikk",
+ "wind": "Vind",
+ "rustling_leaves": "Raslende blader",
+ "wind_noise": "Vindstøy",
+ "thunderstorm": "Tordenvær",
+ "thunder": "Torden",
+ "water": "Vann",
+ "rain": "Regn",
+ "raindrop": "Regndråpe",
+ "rain_on_surface": "Regn på overflate",
+ "stream": "Bekkeleie",
+ "ocean": "Hav",
+ "waves": "Bølger",
+ "steam": "Damp",
+ "gurgling": "Gurgling",
+ "fire": "Brann",
+ "crackle": "Knakking",
+ "sailboat": "Seilbåt",
+ "rowboat": "Robåt",
+ "motorboat": "Motorbåt",
+ "ship": "Skip",
+ "toot": "Tuting",
+ "car_alarm": "Bilalarm",
+ "power_windows": "Elektriske vinduer",
+ "skidding": "Skrens",
+ "tire_squeal": "Hvinende dekk",
+ "car_passing_by": "Bil som kjører forbi",
+ "race_car": "Racerbil",
+ "truck": "Lastebil",
+ "air_brake": "Luftbrems",
+ "air_horn": "Lufthorn",
+ "reversing_beeps": "Ryggesignal",
+ "ice_cream_truck": "Iskrembil",
+ "ambulance": "Ambulanse",
+ "fire_engine": "Brannbil",
+ "aircraft_engine": "Flymotor",
+ "traffic_noise": "Trafikkstøy",
+ "train_whistle": "Togfløyte",
+ "train_horn": "Toghorn",
+ "railroad_car": "Jernbanevogn",
+ "train_wheels_squealing": "Hvinende togskinner",
+ "subway": "T-bane",
+ "aircraft": "Fly",
+ "jet_engine": "Jetmotor",
+ "propeller": "Propell",
+ "helicopter": "Helikopter",
+ "light_engine": "Lett motor",
+ "dental_drill's_drill": "Tannlegebor",
+ "lawn_mower": "Gressklipper",
+ "chainsaw": "Motorsag",
+ "medium_engine": "Middels tung motor",
+ "heavy_engine": "Tung motor",
+ "engine_knocking": "Motorbanking",
+ "engine_starting": "Motorstart",
+ "idling": "Tomgang",
+ "accelerating": "Akselerasjon",
+ "doorbell": "Dørklokke",
+ "ding-dong": "Ding-dong",
+ "sliding_door": "Skyvedør",
+ "slam": "Smell",
+ "knock": "Bank",
+ "tap": "Tapp",
+ "squeak": "Knirk",
+ "cupboard_open_or_close": "Skapdør som åpnes eller lukkes",
+ "drawer_open_or_close": "Skuff som åpnes eller lukkes",
+ "dishes": "Oppvask",
+ "cutlery": "Bestikk",
+ "chopping": "Hugging",
+ "frying": "Steking",
+ "microwave_oven": "Mikrobølgeovn",
+ "water_tap": "Vannkran",
+ "electric_toothbrush": "Elektrisk tannbørste",
+ "vacuum_cleaner": "Støvsuger",
+ "zipper": "Glidelås",
+ "keys_jangling": "Klingende nøkler",
+ "electric_shaver": "Elektrisk barbermaskin",
+ "shuffling_cards": "Kortstokk som stokkes",
+ "typing": "Skriving (på tastatur)",
+ "typewriter": "Skrivemaskin",
+ "computer_keyboard": "Datatastatur",
+ "writing": "Skriving",
+ "alarm": "Alarm",
+ "telephone": "Telefon",
+ "telephone_bell_ringing": "Telefon som ringer",
+ "ringtone": "Ringetone",
+ "telephone_dialing": "Telefon som slås",
+ "dial_tone": "Summetone",
+ "busy_signal": "Opptattsignal",
+ "alarm_clock": "Vekkerklokke",
+ "siren": "Sirene",
+ "civil_defense_siren": "Luftsirene",
+ "buzzer": "Summer",
+ "smoke_detector": "Røykvarsler",
+ "fire_alarm": "Brannalarm",
+ "foghorn": "Tåkelur",
+ "whistle": "Fløyte",
+ "steam_whistle": "Dampfløyte",
+ "ratchet": "Skralle",
+ "tick": "Tikk",
+ "tick-tock": "Tikk-takk",
+ "gears": "Tannhjul",
+ "pulleys": "Trinser",
+ "sewing_machine": "Symaskin",
+ "mechanical_fan": "Mekanisk vifte",
+ "air_conditioning": "Klimaanlegg",
+ "cash_register": "Kasseapparat",
+ "printer": "Skriver",
+ "single-lens_reflex_camera": "Speilreflekskamera",
+ "camera": "Kamera",
+ "tools": "Verktøy",
+ "hammer": "Hammer",
+ "jackhammer": "Trykkluftbor",
+ "sawing": "Saging",
+ "filing": "Filing",
+ "sanding": "Pussing",
+ "power_tool": "Elektroverktøy",
+ "drill": "Boremaskin",
+ "explosion": "Eksplosjon",
+ "gunshot": "Skudd",
+ "machine_gun": "Maskingevær",
+ "fusillade": "Salver",
+ "artillery_fire": "Artilleriild",
+ "cap_gun": "Leketøyspistol",
+ "fireworks": "Fyrverkeri",
+ "firecracker": "Kinaputt",
+ "burst": "Spreng",
+ "eruption": "Utslipp",
+ "boom": "Drønn",
+ "wood": "Tre",
+ "chop": "Hakk",
+ "splinter": "Splint",
+ "crack": "Sprekk",
+ "glass": "Glass",
+ "chink": "Klirr",
+ "shatter": "Knuse",
+ "silence": "Stillhet",
+ "sound_effect": "Lydeffekt",
+ "environmental_noise": "Miljøstøy",
+ "static": "Statisk støy",
+ "white_noise": "Hvit støy",
+ "pink_noise": "Rosa støy",
+ "television": "Fjernsyn",
+ "radio": "Radio",
+ "scream": "Skrik"
+}
diff --git a/web/public/locales/nb-NO/common.json b/web/public/locales/nb-NO/common.json
new file mode 100644
index 000000000..df446387f
--- /dev/null
+++ b/web/public/locales/nb-NO/common.json
@@ -0,0 +1,268 @@
+{
+ "time": {
+ "yr": "{{time}} år",
+ "year_one": "{{time}} år",
+ "year_other": "{{time}} år",
+ "minute_one": "{{time}} minutt",
+ "minute_other": "{{time}} minutter",
+ "s": "{{time}}s",
+ "second_one": "{{time}} sekund",
+ "second_other": "{{time}} sekunder",
+ "formattedTimestampExcludeSeconds": {
+ "24hour": "%-d. %b, %H:%M",
+ "12hour": "%-d. %b, %I:%M %p"
+ },
+ "untilForTime": "Inntil {{time}}",
+ "untilForRestart": "Inntil Frigate starter på nytt.",
+ "untilRestart": "Inntil omstart",
+ "ago": "{{timeAgo}} siden",
+ "justNow": "Akkurat nå",
+ "today": "I dag",
+ "yesterday": "I går",
+ "last7": "Siste 7 dager",
+ "last14": "Siste 14 dager",
+ "last30": "Siste 30 dager",
+ "thisWeek": "Denne uken",
+ "lastWeek": "Forrige uke",
+ "thisMonth": "Denne måneden",
+ "lastMonth": "Forrige måned",
+ "5minutes": "5 minutter",
+ "10minutes": "10 minutter",
+ "30minutes": "30 minutter",
+ "1hour": "1 time",
+ "12hours": "12 timer",
+ "24hours": "24 timer",
+ "pm": "pm",
+ "am": "am",
+ "mo": "{{time}} mnd",
+ "month_one": "{{time}} måned",
+ "month_other": "{{time}} måneder",
+ "d": "{{time}}d",
+ "day_one": "{{time}} dag",
+ "day_other": "{{time}} dager",
+ "h": "{{time}}t",
+ "hour_one": "{{time}} time",
+ "hour_other": "{{time}} timer",
+ "m": "{{time}}m",
+ "formattedTimestamp": {
+ "12hour": "d. MMM, h:mm:ss aaa",
+ "24hour": "d. MMM, HH:mm:ss"
+ },
+ "formattedTimestamp2": {
+ "12hour": "dd/MM h:mm:ssa",
+ "24hour": "d. MMM HH:mm:ss"
+ },
+ "formattedTimestampWithYear": {
+ "12hour": "%-d. %b %Y, %I:%M %p",
+ "24hour": "%-d. %b %Y, %H:%M"
+ },
+ "formattedTimestampOnlyMonthAndDay": "%-d. %b",
+ "formattedTimestampHourMinute": {
+ "12hour": "h:mm aaa",
+ "24hour": "HH:mm"
+ },
+ "formattedTimestampHourMinuteSecond": {
+ "12hour": "h:mm:ss aaa",
+ "24hour": "HH:mm:ss"
+ },
+ "formattedTimestampMonthDayHourMinute": {
+ "12hour": "d. MMM, h:mm aaa",
+ "24hour": "d. MMM, HH:mm"
+ },
+ "formattedTimestampFilename": {
+ "12hour": "dd-MM-yy-h-mm-ss-a",
+ "24hour": "dd-MM-yy-HH-mm-ss"
+ },
+ "formattedTimestampMonthDayYearHourMinute": {
+ "12hour": "d. MMM yyyy, h:mm aaa",
+ "24hour": "d. MMM yyyy, HH:mm"
+ },
+ "formattedTimestampMonthDay": "d. MMM",
+ "formattedTimestampMonthDayYear": {
+ "24hour": "d. MMM, yyyy",
+ "12hour": "d. MMM, yyyy"
+ }
+ },
+ "button": {
+ "copy": "Kopier",
+ "delete": "Slett",
+ "apply": "Bruk",
+ "reset": "Tilbakestill",
+ "done": "Ferdig",
+ "enabled": "Aktivert",
+ "enable": "Aktiver",
+ "disabled": "Deaktivert",
+ "disable": "Deaktiver",
+ "save": "Lagre",
+ "saving": "Lagrer…",
+ "cancel": "Avbryt",
+ "close": "Lukk",
+ "back": "Tilbake",
+ "history": "Historikk",
+ "fullscreen": "Fullskjerm",
+ "exitFullscreen": "Avslutt fullskjerm",
+ "pictureInPicture": "Bilde-i-bilde",
+ "twoWayTalk": "Toveis tale",
+ "cameraAudio": "Kameralyd",
+ "on": "PÅ",
+ "off": "AV",
+ "edit": "Rediger",
+ "copyCoordinates": "Kopier koordinater",
+ "yes": "Ja",
+ "no": "Nei",
+ "download": "Last ned",
+ "info": "Info",
+ "suspended": "Suspendert",
+ "unsuspended": "Opphev suspensjon",
+ "play": "Spill av",
+ "unselect": "Fjern valg",
+ "export": "Eksporter",
+ "deleteNow": "Slett nå",
+ "next": "Neste"
+ },
+ "menu": {
+ "help": "Hjelp",
+ "documentation": {
+ "title": "Dokumentasjon",
+ "label": "Frigate-dokumentasjon"
+ },
+ "restart": "Start Frigate på nytt",
+ "live": {
+ "title": "Direkte",
+ "allCameras": "Alle kameraer",
+ "cameras": {
+ "title": "Kameraer",
+ "count_one": "{{count}} kamera",
+ "count_other": "{{count}} kameraer"
+ }
+ },
+ "review": "Inspiser",
+ "explore": "Utforsk",
+ "export": "Eksporter",
+ "uiPlayground": "UI Sandkasse",
+ "faceLibrary": "Ansiktsbibliotek",
+ "user": {
+ "title": "Bruker",
+ "account": "Konto",
+ "current": "Nåværende bruker: {{user}}",
+ "anonymous": "anonym",
+ "logout": "Logg ut",
+ "setPassword": "Angi passord"
+ },
+ "system": "System",
+ "systemMetrics": "Systemmålinger",
+ "configuration": "Konfigurasjon",
+ "systemLogs": "Systemlogger",
+ "settings": "Innstillinger",
+ "configurationEditor": "Rediger konfigurasjonen",
+ "languages": "Språk",
+ "language": {
+ "en": "English (Engelsk)",
+ "zhCN": "简体中文 (Forenklet kinesisk)",
+ "withSystem": {
+ "label": "Bruk systemets språkinnstillinger"
+ },
+ "fr": "Français (Fransk)",
+ "es": "Español (Spansk)",
+ "hi": "हिन्दी (Hindi)",
+ "ar": "العربية (Arabisk)",
+ "pt": "Português (Portugisisk)",
+ "ru": "Русский (Russisk)",
+ "de": "Deutsch (Tysk)",
+ "ja": "日本語 (Japansk)",
+ "tr": "Türkçe (Tyrkisk)",
+ "it": "Italiano (Italiensk)",
+ "nl": "Nederlands (Nederlandsk)",
+ "sv": "Svenska (Svensk)",
+ "cs": "Čeština (Tsjekkisk)",
+ "nb": "Norsk Bokmål",
+ "ko": "한국어 (Koreansk)",
+ "vi": "Tiếng Việt (Vietnamesisk)",
+ "fa": "فارسی (Persisk)",
+ "he": "עברית (Hebraisk)",
+ "el": "Ελληνικά (Gresk)",
+ "ro": "Română (Rumensk)",
+ "hu": "Magyar (Ungarsk)",
+ "fi": "Suomi (Finsk)",
+ "da": "Dansk (Dansk)",
+ "sk": "Slovenčina (Slovensk)",
+ "pl": "Polski (Polsk)",
+ "uk": "Українська (Ukrainsk)",
+ "yue": "粵語 (Kantonesisk)",
+ "th": "ไทย (Thai)",
+ "ca": "Català (Katalansk)"
+ },
+ "appearance": "Utseende",
+ "darkMode": {
+ "label": "Mørk modus",
+ "light": "Lys",
+ "dark": "Mørk",
+ "withSystem": {
+ "label": "Bruk systemets innstillinger for lys eller mørk modus"
+ }
+ },
+ "withSystem": "System",
+ "theme": {
+ "label": "Tema",
+ "blue": "Blå",
+ "green": "Grønn",
+ "nord": "Nord",
+ "red": "Rød",
+ "contrast": "Høy kontrast",
+ "default": "Standard",
+ "highcontrast": "Høy kontrast"
+ }
+ },
+ "pagination": {
+ "next": {
+ "title": "Neste",
+ "label": "Gå til neste side"
+ },
+ "label": "paginering",
+ "previous": {
+ "title": "Forrige",
+ "label": "Gå til forrige side"
+ },
+ "more": "Flere sider"
+ },
+ "unit": {
+ "speed": {
+ "mph": "mph",
+ "kph": "km/t"
+ },
+ "length": {
+ "meters": "meter",
+ "feet": "fot"
+ }
+ },
+ "label": {
+ "back": "Gå tilbake"
+ },
+ "toast": {
+ "copyUrlToClipboard": "Nettadresse kopiert til utklippstavlen.",
+ "save": {
+ "title": "Lagre",
+ "error": {
+ "title": "Kunne ikke lagre endringer i konfigurasjonen: {{errorMessage}}",
+ "noMessage": "Kunne ikke lagre endringer i konfigurasjonen"
+ }
+ }
+ },
+ "role": {
+ "title": "Rolle",
+ "admin": "Administrator",
+ "viewer": "Visningsbruker",
+ "desc": "Administratorer har full tilgang til alle funksjoner i Frigate brukergrensesnittet. Visningsbrukere er begrenset til å se kameraer, inspisere elementer og se historiske opptak."
+ },
+ "accessDenied": {
+ "documentTitle": "Ingen tilgang – Frigate",
+ "title": "Ingen tilgang",
+ "desc": "Du har ikke tillatelse til å vise denne siden."
+ },
+ "notFound": {
+ "documentTitle": "Ikke funnet – Frigate",
+ "title": "404",
+ "desc": "Siden ble ikke funnet"
+ },
+ "selectItem": "Velg {{item}}"
+}
diff --git a/web/public/locales/nb-NO/components/auth.json b/web/public/locales/nb-NO/components/auth.json
new file mode 100644
index 000000000..caf6a2ca6
--- /dev/null
+++ b/web/public/locales/nb-NO/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "user": "Brukernavn",
+ "password": "Passord",
+ "login": "Logg inn",
+ "errors": {
+ "usernameRequired": "Brukernavn er påkrevd",
+ "passwordRequired": "Passord er påkrevd",
+ "rateLimit": "Grense for antall forsøk overskredet. Prøv igjen senere.",
+ "loginFailed": "Innlogging mislyktes",
+ "unknownError": "Ukjent feil. Sjekk loggene.",
+ "webUnknownError": "Ukjent feil. Sjekk konsoll-loggene."
+ }
+ }
+}
diff --git a/web/public/locales/nb-NO/components/camera.json b/web/public/locales/nb-NO/components/camera.json
new file mode 100644
index 000000000..d8735926e
--- /dev/null
+++ b/web/public/locales/nb-NO/components/camera.json
@@ -0,0 +1,86 @@
+{
+ "group": {
+ "label": "Kameragrupper",
+ "name": {
+ "placeholder": "Skriv inn et navn…",
+ "errorMessage": {
+ "mustLeastCharacters": "Navnet på kameragruppen må være minst 2 tegn.",
+ "exists": "Navnet på kameragruppen finnes allerede.",
+ "nameMustNotPeriod": "Navnet på kameragruppen kan ikke inneholde punktum.",
+ "invalid": "Ugyldig navn på kameragruppe."
+ },
+ "label": "Navn"
+ },
+ "camera": {
+ "setting": {
+ "streamMethod": {
+ "method": {
+ "continuousStreaming": {
+ "label": "Kontinuerlig strømming",
+ "desc": {
+ "title": "Kamerabildet vil alltid være en direktestrøm når det vises på dashbordet, selv om ingen aktivitet oppdages.",
+ "warning": "Kontinuerlig strømming kan føre til høy båndbreddebruk og ytelsesproblemer. Bruk med forsiktighet."
+ }
+ },
+ "noStreaming": {
+ "label": "Ingen strømming",
+ "desc": "Kamerabilder vil bare oppdateres én gang i minuttet, og ingen direktestrømming vil finne sted."
+ },
+ "smartStreaming": {
+ "label": "Smart strømming (anbefalt)",
+ "desc": "Smart strømming oppdaterer kamerabilder én gang i minuttet når ingen aktivitet oppdages, for å spare båndbredde og ressurser. Når aktivitet oppdages, byttes bildet sømløst til direktestrøm."
+ }
+ },
+ "label": "Strømmemetode",
+ "placeholder": "Velg en strømmemetode"
+ },
+ "compatibilityMode": {
+ "label": "Kompatibilitetsmodus",
+ "desc": "Aktiver dette alternativet kun hvis kameraets direktestrøm viser fargeforstyrrelser og har en diagonal linje på høyre side av bildet."
+ },
+ "label": "Innstillinger for kamerastrømming",
+ "title": "{{cameraName}} strømmeinnstillinger",
+ "desc": "Endre direktestrømmingsalternativene for denne kameragruppens dashbord. Disse innstillingene er spesifikke for enhet/nettleser.",
+ "audioIsAvailable": "Lyd er tilgjengelig for denne strømmen",
+ "audioIsUnavailable": "Lyd er ikke tilgjengelig for denne strømmen",
+ "audio": {
+ "tips": {
+ "title": "Lyd må komme fra kameraet ditt og konfigureres i go2rtc for denne strømmen.",
+ "document": "Se dokumentasjonen "
+ }
+ },
+ "stream": "Strøm",
+ "placeholder": "Velg en strøm"
+ }
+ },
+ "add": "Legg til kameragruppe",
+ "edit": "Rediger kameragruppe",
+ "delete": {
+ "label": "Slett kameragruppe",
+ "confirm": {
+ "title": "Bekreft sletting",
+ "desc": "Er du sikker på at du vil slette kameragruppen {{name}}?"
+ }
+ },
+ "cameras": {
+ "label": "Kameraer",
+ "desc": "Velg kameraer for denne gruppen."
+ },
+ "icon": "Ikon",
+ "success": "Kameragruppen ({{name}}) er lagret."
+ },
+ "debug": {
+ "options": {
+ "label": "Innstillinger",
+ "title": "Alternativer",
+ "showOptions": "Vis alternativer",
+ "hideOptions": "Skjul alternativer"
+ },
+ "boundingBox": "Omsluttende boks",
+ "timestamp": "Tidsstempel",
+ "zones": "Soner",
+ "mask": "Maske",
+ "motion": "Bevegelse",
+ "regions": "Regioner"
+ }
+}
diff --git a/web/public/locales/nb-NO/components/dialog.json b/web/public/locales/nb-NO/components/dialog.json
new file mode 100644
index 000000000..93a65c99d
--- /dev/null
+++ b/web/public/locales/nb-NO/components/dialog.json
@@ -0,0 +1,123 @@
+{
+ "restart": {
+ "title": "Er du sikker på at du vil starte Frigate på nytt?",
+ "button": "Start på nytt",
+ "restarting": {
+ "title": "Frigate starter på nytt",
+ "button": "Tving omlasting nå",
+ "content": "Denne siden vil lastes inn på nytt om {{countdown}} sekunder."
+ }
+ },
+ "explore": {
+ "plus": {
+ "submitToPlus": {
+ "label": "Send til Frigate+",
+ "desc": "Objekter på steder du vil unngå er ikke falske positiver. Å sende dem som falske positiver vil forvirre modellen."
+ },
+ "review": {
+ "true": {
+ "label": "Bekreft denne merkelappen for Frigate Plus",
+ "true_one": "Dette er en {{label}}",
+ "true_other": "Dette er en {{label}}"
+ },
+ "state": {
+ "submitted": "Sendt inn"
+ },
+ "false": {
+ "label": "Ikke bekreft denne merkelappen for Frigate Plus",
+ "false_one": "Dette er ikke en {{label}}",
+ "false_other": "Dette er ikke en {{label}}"
+ },
+ "question": {
+ "label": "Bekreft denne merkelappen for Frigate Plus",
+ "ask_an": "Er dette objekt en {{label}}?",
+ "ask_a": "Er dette objektet en {{label}}?",
+ "ask_full": "Er dette objekt en {{untranslatedLabel}} ({{translatedLabel}})?"
+ }
+ }
+ },
+ "video": {
+ "viewInHistory": "Vis i historikk"
+ }
+ },
+ "export": {
+ "time": {
+ "lastHour_one": "Siste time",
+ "lastHour_other": "Siste {{count}} timer",
+ "custom": "Tilpasset",
+ "start": {
+ "title": "Starttid",
+ "label": "Velg starttid"
+ },
+ "fromTimeline": "Velg fra tidslinje",
+ "end": {
+ "title": "Sluttid",
+ "label": "Velg sluttid"
+ }
+ },
+ "toast": {
+ "success": "Eksporten startet. Se filen i /exports-mappen.",
+ "error": {
+ "failed": "Klarte ikke å starte eksport: {{error}}",
+ "noVaildTimeSelected": "Ingen gyldig tidsperiode valgt",
+ "endTimeMustAfterStartTime": "Sluttid må være etter starttid"
+ }
+ },
+ "fromTimeline": {
+ "previewExport": "Forhåndsvis eksport",
+ "saveExport": "Lagre eksport"
+ },
+ "name": {
+ "placeholder": "Gi eksporten et navn"
+ },
+ "select": "Velg",
+ "export": "Eksporter",
+ "selectOrExport": "Velg eller eksporter"
+ },
+ "streaming": {
+ "label": "Strøm",
+ "restreaming": {
+ "disabled": "Restrømming er ikke aktivert for dette kameraet.",
+ "desc": {
+ "readTheDocumentation": "Se dokumentasjonen",
+ "title": "Konfigurer go2rtc for flere direktestrømmingsalternativer og lyd for dette kameraet."
+ }
+ },
+ "showStats": {
+ "label": "Vis strømmestatistikk",
+ "desc": "Aktiver dette alternativet for å vise strømmestatistikk som et overlegg på kamerabildet."
+ },
+ "debugView": "Feilsøkingsvisning"
+ },
+ "search": {
+ "saveSearch": {
+ "button": {
+ "save": {
+ "label": "Lagre dette søket"
+ }
+ },
+ "label": "Lagre søk",
+ "desc": "Skriv inn et navn for dette lagrede søket.",
+ "placeholder": "Skriv inn et navn for søket",
+ "overwrite": "{{searchName}} finnes allerede. Lagring vil overskrive eksisterende verdi.",
+ "success": "Søk ({{searchName}}) er lagret."
+ }
+ },
+ "recording": {
+ "confirmDelete": {
+ "title": "Bekreft sletting",
+ "desc": {
+ "selected": "Er du sikker på at du vil slette alle opptak knyttet til dette inspeksjonselementet?detekt strømmen, sjekk feilloggene"
+ },
+ "cameraDisabled": "Kameraet er deaktivert",
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "Bildet ble sendt til Frigate+"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "Kunne ikke sende bildet til Frigate+"
+ }
+ }
+}
diff --git a/web/public/locales/nb-NO/objects.json b/web/public/locales/nb-NO/objects.json
new file mode 100644
index 000000000..d292b63b8
--- /dev/null
+++ b/web/public/locales/nb-NO/objects.json
@@ -0,0 +1,120 @@
+{
+ "motorcycle": "Motorsykkel",
+ "airplane": "Fly",
+ "bus": "Buss",
+ "train": "Tog",
+ "boat": "Båt",
+ "traffic_light": "Trafikklys",
+ "wine_glass": "Vinglass",
+ "cup": "Kopp",
+ "chair": "Stol",
+ "couch": "Sofa",
+ "potted_plant": "Potteplante",
+ "bed": "Seng",
+ "gls": "GLS",
+ "person": "Person",
+ "bicycle": "Sykkel",
+ "car": "Bil",
+ "fire_hydrant": "Brannhydrant",
+ "street_sign": "Gateskilt",
+ "stop_sign": "Stoppskilt",
+ "parking_meter": "Parkeringsautomat",
+ "bench": "Benk",
+ "bird": "Fugl",
+ "cat": "Katt",
+ "dog": "Hund",
+ "horse": "Hest",
+ "sheep": "Sau",
+ "cow": "Ku",
+ "elephant": "Elefant",
+ "bear": "Bjørn",
+ "zebra": "Sebra",
+ "giraffe": "Giraff",
+ "hat": "Hatt",
+ "backpack": "Ryggsekk",
+ "umbrella": "Paraply",
+ "shoe": "Sko",
+ "eye_glasses": "Briller",
+ "handbag": "Håndveske",
+ "tie": "Slips",
+ "suitcase": "Koffert",
+ "frisbee": "Frisbee",
+ "skis": "Ski",
+ "snowboard": "Snøbrett",
+ "sports_ball": "Ball",
+ "kite": "Drage",
+ "baseball_bat": "Baseballkølle",
+ "baseball_glove": "Baseballhanske",
+ "skateboard": "Skateboard",
+ "surfboard": "Surfebrett",
+ "tennis_racket": "Tennisracket",
+ "bottle": "Flaske",
+ "plate": "Tallerken",
+ "fork": "Gaffel",
+ "knife": "Kniv",
+ "spoon": "Skje",
+ "bowl": "Bolle",
+ "banana": "Banan",
+ "apple": "Eple",
+ "broccoli": "Brokkoli",
+ "sandwich": "Sandwich",
+ "orange": "Appelsin",
+ "carrot": "Gulrot",
+ "hot_dog": "Pølse i brød",
+ "pizza": "Pizza",
+ "donut": "Donut",
+ "cake": "Kake",
+ "mirror": "Speil",
+ "dining_table": "Spisebord",
+ "window": "Vindu",
+ "desk": "Skrivebord",
+ "toilet": "Toalett",
+ "door": "Dør",
+ "tv": "TV",
+ "laptop": "Bærbar datamaskin",
+ "mouse": "Mus",
+ "remote": "Fjernkontroll",
+ "keyboard": "Tastatur",
+ "cell_phone": "Mobiltelefon",
+ "sink": "Vask",
+ "microwave": "Mikrobølgeovn",
+ "oven": "Ovn",
+ "toaster": "Brødrister",
+ "refrigerator": "Kjøleskap",
+ "blender": "Blender",
+ "book": "Bok",
+ "clock": "Klokke",
+ "vase": "Vase",
+ "scissors": "Saks",
+ "teddy_bear": "Teddybjørn",
+ "hair_dryer": "Hårføner",
+ "toothbrush": "Tannbørste",
+ "hair_brush": "Hårbørste",
+ "vehicle": "Kjøretøy",
+ "squirrel": "Ekorn",
+ "deer": "Hjort",
+ "animal": "Dyr",
+ "bark": "Bjeff",
+ "fox": "Rev",
+ "goat": "Geit",
+ "rabbit": "Kanin",
+ "raccoon": "Vaskebjørn",
+ "robot_lawnmower": "Robotgressklipper",
+ "waste_bin": "Avfallsbeholder",
+ "on_demand": "På forespørsel",
+ "face": "Ansikt",
+ "license_plate": "Kjennemerke",
+ "package": "Pakke",
+ "bbq_grill": "Grill",
+ "amazon": "Amazon",
+ "usps": "USPS",
+ "ups": "UPS",
+ "fedex": "FedEx",
+ "dhl": "DHL",
+ "an_post": "An Post",
+ "purolator": "Filter",
+ "postnl": "PostNL",
+ "nzpost": "NZPost",
+ "postnord": "PostNord",
+ "dpd": "DPD"
+}
diff --git a/web/public/locales/nb-NO/views/configEditor.json b/web/public/locales/nb-NO/views/configEditor.json
new file mode 100644
index 000000000..09f0b1c69
--- /dev/null
+++ b/web/public/locales/nb-NO/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "documentTitle": "Konfigurasjonsredigering - Frigate",
+ "toast": {
+ "error": {
+ "savingError": "Feil ved lagring av konfigurasjon"
+ },
+ "success": {
+ "copyToClipboard": "Konfigurasjonen ble kopiert til utklippstavlen."
+ }
+ },
+ "configEditor": "Konfigurasjonsredigering",
+ "copyConfig": "Kopier konfigurasjonen",
+ "saveAndRestart": "Lagre og omstart",
+ "saveOnly": "Kun lagre",
+ "confirm": "Avslutt uten å lagre?"
+}
diff --git a/web/public/locales/nb-NO/views/events.json b/web/public/locales/nb-NO/views/events.json
new file mode 100644
index 000000000..70d24e20e
--- /dev/null
+++ b/web/public/locales/nb-NO/views/events.json
@@ -0,0 +1,38 @@
+{
+ "camera": "Kamera",
+ "empty": {
+ "alert": "Det er ingen varsler å inspisere",
+ "detection": "Det er ingen deteksjoner å inspisere",
+ "motion": "Ingen bevegelsesdata funnet"
+ },
+ "timeline": "Tidslinje",
+ "events": {
+ "label": "Hendelser",
+ "aria": "Velg hendelser",
+ "noFoundForTimePeriod": "Ingen hendelser funnet for denne tidsperioden."
+ },
+ "newReviewItems": {
+ "label": "Vis nye inspeksjonselementer",
+ "button": "Nye elementer å inspisere"
+ },
+ "alerts": "Varsler",
+ "detections": "Deteksjoner",
+ "motion": {
+ "label": "Bevegelse",
+ "only": "Kun bevegelse"
+ },
+ "allCameras": "Alle kameraer",
+ "timeline.aria": "Velg tidslinje",
+ "documentTitle": "Inspiser - Frigate",
+ "recordings": {
+ "documentTitle": "Opptak - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "Siste 24 timer"
+ },
+ "markAsReviewed": "Merk som inspisert",
+ "markTheseItemsAsReviewed": "Merk disse elementene som inspiserte",
+ "selected_one": "{{count}} valgt",
+ "selected_other": "{{count}} valgt",
+ "detected": "detektert"
+}
diff --git a/web/public/locales/nb-NO/views/explore.json b/web/public/locales/nb-NO/views/explore.json
new file mode 100644
index 000000000..e95dbfda2
--- /dev/null
+++ b/web/public/locales/nb-NO/views/explore.json
@@ -0,0 +1,207 @@
+{
+ "documentTitle": "Utforsk - Frigate",
+ "generativeAI": "Generativ AI",
+ "exploreIsUnavailable": {
+ "title": "Utforsk er utilgjengelig",
+ "embeddingsReindexing": {
+ "startingUp": "Starter opp…",
+ "estimatedTime": "Estimert gjenværende tid:",
+ "context": "Utforsk kan brukes etter at reindekseringen av vektorrepresentasjoner for sporede objekter er fullført.",
+ "finishingShortly": "Avsluttes snart",
+ "step": {
+ "thumbnailsEmbedded": "Miniatyrbilder innebygd: ",
+ "descriptionsEmbedded": "Beskrivelser innebygd: ",
+ "trackedObjectsProcessed": "Sporede objekter behandlet: "
+ }
+ },
+ "downloadingModels": {
+ "setup": {
+ "visionModel": "Visjonsmodell",
+ "visionModelFeatureExtractor": "Funksjonsekstraktor for visjonsmodell",
+ "textModel": "Tekstmodell",
+ "textTokenizer": "Tekst symbolbygger"
+ },
+ "context": "Frigate laster ned de nødvendige vektorrepresentasjonsmodellene for å støtte funksjonen for semantisk søk. Dette kan ta flere minutter, avhengig av hastigheten på nettverksforbindelsen din.",
+ "tips": {
+ "context": "Du bør vurdere å reindeksere vektorrepresentasjoner for de sporede objektene dine når modellene er lastet ned.",
+ "documentation": "Se dokumentasjonen"
+ },
+ "error": "En feil har oppstått. Sjekk Frigate-loggene."
+ }
+ },
+ "objectLifecycle": {
+ "createObjectMask": "Lag objektmaske",
+ "adjustAnnotationSettings": "Juster annoteringsinnstillinger",
+ "scrollViewTips": "Sveip for å se de viktigste hendelsene i dette objektets livssyklus.",
+ "autoTrackingTips": "Posisjoner for omsluttende boks vil være unøyaktige for kameraer med automatisk sporing.",
+ "lifecycleItemDesc": {
+ "visible": "{{label}} oppdaget",
+ "attribute": {
+ "other": "{{label}} gjenkjent som {{attribute}}",
+ "faceOrLicense_plate": "{{attribute}} oppdaget for {{label}}"
+ },
+ "gone": "{{label}} forlot",
+ "heard": "{{label}} hørt",
+ "external": "{{label}} oppdaget",
+ "entered_zone": "{{label}} gikk inn i {{zones}}",
+ "active": "{{label}} ble aktiv",
+ "stationary": "{{label}} ble stasjonær",
+ "header": {
+ "zones": "Soner",
+ "ratio": "Forhold",
+ "area": "Areal"
+ }
+ },
+ "annotationSettings": {
+ "title": "Annoteringsinnstillinger",
+ "showAllZones": {
+ "title": "Vis alle soner",
+ "desc": "Vis alltid soner på bilder der objekter har gått inn i en sone."
+ },
+ "offset": {
+ "documentation": "Se dokumentasjonen ",
+ "label": "Annoteringsforskyvning",
+ "desc": "Disse dataene kommer fra kameraets deteksjonsstrøm, men legges over bilder fra opptaksstrømmen. Det er usannsynlig at de to strømmene er perfekt synkronisert. Som et resultat vil ikke den omsluttende boksen og opptakene stemme perfekt overens. Imidlertid kan feltet annotation_offset brukes til å justere dette.",
+ "millisecondsToOffset": "Millisekunder å forskyve annoteringsdata. Standard: 0",
+ "tips": "TIPS: Tenk deg et hendelsesklipp med en person som går fra venstre til høyre. Hvis den omsluttende boksen i hendelsestidslinjen konsekvent er til venstre for personen, bør verdien reduseres. Tilsvarende, hvis en person går fra venstre til høyre og den omsluttende boksen konsekvent er foran personen, bør verdien økes.",
+ "toast": {
+ "success": "Annoteringsforskyvning for {{camera}} er lagret i konfigurasjonsfilen. Start Frigate på nytt for å bruke endringene dine."
+ }
+ }
+ },
+ "carousel": {
+ "previous": "Forrige lysbilde",
+ "next": "Neste lysbilde"
+ },
+ "title": "Objektets livssyklus",
+ "noImageFound": "Ingen bilder funnet for dette tidsstempelet.",
+ "count": "{{first}} av {{second}}",
+ "trackedPoint": "Sporet punkt"
+ },
+ "details": {
+ "item": {
+ "title": "Detaljer for inspeksjonelement",
+ "button": {
+ "share": "Del dette inspeksjonselementet",
+ "viewInExplore": "Vis i Utforsk"
+ },
+ "toast": {
+ "success": {
+ "updatedSublabel": "Under-merkelapp oppdatert med suksess.",
+ "updatedLPR": "Vellykket oppdatering av kjennemerke.",
+ "regenerate": "En ny beskrivelse har blitt anmodet fra {{provider}}. Avhengig av hastigheten til leverandøren din, kan den nye beskrivelsen ta litt tid å regenerere."
+ },
+ "error": {
+ "regenerate": "Feil ved anrop til {{provider}} for en ny beskrivelse: {{errorMessage}}",
+ "updatedLPRFailed": "Oppdatering av kjennemerke feilet: {{errorMessage}}",
+ "updatedSublabelFailed": "Feil ved oppdatering av under-merkelapp: {{errorMessage}}"
+ }
+ },
+ "desc": "Detaljer for inspeksjonselement",
+ "tips": {
+ "mismatch_one": "{{count}} utilgjengelig objekt ble oppdaget og inkludert i dette inspeksjonselementet. Disse objektene kvalifiserte ikke som et varsel eller deteksjon, eller har allerede blitt ryddet opp/slettet.",
+ "mismatch_other": "{{count}} utilgjengelige objekter ble oppdaget og inkludert i dette inspeksjonselementet. Disse objektene kvalifiserte ikke som et varsel eller deteksjon, eller har allerede blitt ryddet opp/slettet.",
+ "hasMissingObjects": "Juster konfigurasjonen hvis du vil at Frigate skal lagre sporede objekter for følgende merkelapper: {{objects}}"
+ }
+ },
+ "topScore": {
+ "info": "Den høyeste poengsummen er den høyeste medianverdi for det sporede objektet, så denne kan avvike fra poengsummen som vises på miniatyrbildet for søkeresultatet.",
+ "label": "Høyeste poengsum"
+ },
+ "estimatedSpeed": "Estimert hastighet",
+ "objects": "Objekter",
+ "button": {
+ "findSimilar": "Finn lignende",
+ "regenerate": {
+ "title": "Regenerer",
+ "label": "Regenerer beskrivelse for sporet objekt"
+ }
+ },
+ "description": {
+ "placeholder": "Beskrivelse av det sporede objektet",
+ "aiTips": "Frigate vil ikke anmode om en beskrivelse fra din generative AI-leverandør før livssyklusen til det sporede objektet er avsluttet.",
+ "label": "Beskrivelse"
+ },
+ "regenerateFromThumbnails": "Regenerer fra miniatyrbilder",
+ "tips": {
+ "descriptionSaved": "Beskrivelse lagret med suksess",
+ "saveDescriptionFailed": "Feil ved lagring av beskrivelse: {{errorMessage}}"
+ },
+ "label": "Merkelapp",
+ "editLPR": {
+ "title": "Rediger kjennemerke",
+ "descNoLabel": "Skriv inn et nytt kjennemerke for dette sporede objekt",
+ "desc": "Skriv inn et nytt kjennemerke for denne {{label}}"
+ },
+ "recognizedLicensePlate": "Gjenkjent kjennemerke",
+ "camera": "Kamera",
+ "zones": "Soner",
+ "timestamp": "Tidsstempel",
+ "expandRegenerationMenu": "Utvid regenereringsmenyen",
+ "regenerateFromSnapshot": "Regenerer fra øyeblikksbilde",
+ "editSubLabel": {
+ "title": "Rediger under-merkelapp",
+ "desc": "Angi en ny under-merkelapp for denne {{label}}",
+ "descNoLabel": "Angi en ny under-merkelapp for dette sporede objektet"
+ },
+ "snapshotScore": {
+ "label": "Øyeblikksbilde poengsum"
+ }
+ },
+ "itemMenu": {
+ "viewInHistory": {
+ "label": "Vis i Historikk",
+ "aria": "Vis i Historikk"
+ },
+ "downloadVideo": {
+ "aria": "Last ned video",
+ "label": "Last ned video"
+ },
+ "downloadSnapshot": {
+ "label": "Last ned øyeblikksbilde",
+ "aria": "Last ned øyeblikksbilde"
+ },
+ "viewObjectLifecycle": {
+ "label": "Vis objektets livssyklus",
+ "aria": "Vis objektets livssyklus"
+ },
+ "findSimilar": {
+ "label": "Finn lignende",
+ "aria": "Finn lignende sporede objekter"
+ },
+ "deleteTrackedObject": {
+ "label": "Slett dette sporede objektet"
+ },
+ "submitToPlus": {
+ "label": "Send til Frigate+",
+ "aria": "Send til Frigate Plus"
+ }
+ },
+ "searchResult": {
+ "deleteTrackedObject": {
+ "toast": {
+ "error": "Feil ved sletting av sporet objekt: {{errorMessage}}",
+ "success": "Sporet objekt ble slettet med suksess."
+ }
+ },
+ "tooltip": "Samsvarer {{type}} til {{confidence}}%"
+ },
+ "trackedObjectDetails": "Detaljer om sporet objekt",
+ "type": {
+ "details": "detaljer",
+ "snapshot": "øyeblikksbilde",
+ "video": "video",
+ "object_lifecycle": "objektets livssyklus"
+ },
+ "dialog": {
+ "confirmDelete": {
+ "title": "Bekreft sletting",
+ "desc": "Sletting av dette sporede objektet fjerner øyeblikksbildet, eventuelle lagrede vektorrepresentasjoner og alle tilknyttede livssykloppføringer for objektet. Opptak av dette sporede objektet i Historikk-visningen vil IKKE bli slettet.mode: {{effectiveRetainMode}}, så dette manuelle opptaket vil kun beholde segmenter med {{effectiveRetainModeName}}."
+ },
+ "editLayout": {
+ "label": "Rediger oppsett",
+ "group": {
+ "label": "Rediger kameragruppe"
+ },
+ "exitEdit": "Avslutt redigering"
+ },
+ "twoWayTalk": {
+ "enable": "Aktiver toveis tale",
+ "disable": "Deaktiver toveis tale"
+ },
+ "cameraAudio": {
+ "enable": "Aktiver kameralyd",
+ "disable": "Deaktiver kameralyd"
+ },
+ "muteCameras": {
+ "enable": "Demp alle kameraer",
+ "disable": "Slå på lyd på alle kameraer"
+ },
+ "detect": {
+ "enable": "Aktiver deteksjon",
+ "disable": "Deaktiver deteksjon"
+ },
+ "recording": {
+ "enable": "Aktiver opptak",
+ "disable": "Deaktiver opptak"
+ },
+ "streamStats": {
+ "enable": "Vis Strømmestatistikk",
+ "disable": "Skjul strømmestatistikk"
+ },
+ "streamingSettings": "Strømmingsinnstillinger",
+ "notifications": "Meldingsvarsler",
+ "cameraSettings": {
+ "title": "{{camera}}-innstillinger",
+ "cameraEnabled": "Kamera aktivert",
+ "objectDetection": "Objektdeteksjon",
+ "recording": "Opptak",
+ "snapshots": "Øyeblikksbilder",
+ "audioDetection": "Lydregistrering",
+ "autotracking": "Automatisk sporing"
+ }
+}
diff --git a/web/public/locales/nb-NO/views/recording.json b/web/public/locales/nb-NO/views/recording.json
new file mode 100644
index 000000000..262eb43b0
--- /dev/null
+++ b/web/public/locales/nb-NO/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "filter": "Filter",
+ "export": "Eksporter",
+ "calendar": "Kalender",
+ "filters": "Filtre",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "Ingen gyldig tidsperiode valgt",
+ "endTimeMustAfterStartTime": "Sluttid må være etter starttid"
+ }
+ }
+}
diff --git a/web/public/locales/nb-NO/views/search.json b/web/public/locales/nb-NO/views/search.json
new file mode 100644
index 000000000..baf25a900
--- /dev/null
+++ b/web/public/locales/nb-NO/views/search.json
@@ -0,0 +1,74 @@
+{
+ "search": "Søk",
+ "savedSearches": "Lagrede søk",
+ "searchFor": "Søk etter {{inputValue}}",
+ "button": {
+ "clear": "Fjern søk",
+ "save": "Lagre søk",
+ "delete": "Slett lagret søk",
+ "filterInformation": "Filterinformasjon",
+ "filterActive": "Filtre aktive"
+ },
+ "filter": {
+ "label": {
+ "cameras": "Kameraer",
+ "labels": "Merkelapper",
+ "search_type": "Søketype",
+ "after": "Etter",
+ "min_score": "Min. poengsum",
+ "max_score": "Maks. poengsum",
+ "min_speed": "Min. hastighet",
+ "zones": "Soner",
+ "sub_labels": "Under-merkelapper",
+ "time_range": "Tidsintervall",
+ "before": "Før",
+ "max_speed": "Maks. hastighet",
+ "recognized_license_plate": "Gjenkjent kjennemerke",
+ "has_clip": "Har videoklipp",
+ "has_snapshot": "Har øyeblikksbilde"
+ },
+ "searchType": {
+ "thumbnail": "Miniatyrbilde",
+ "description": "Beskrivelse"
+ },
+ "toast": {
+ "error": {
+ "minSpeedMustBeLessOrEqualMaxSpeed": "Minimum hastighet 'min_speed' må være mindre enn eller lik maksimum hastighet 'max_speed'.",
+ "beforeDateBeLaterAfter": "Før-datoen 'before' må være senere enn etter-datoen 'after'.",
+ "afterDatebeEarlierBefore": "Etter-datoen 'after' må være tidligere enn før-datoen 'before'.",
+ "minScoreMustBeLessOrEqualMaxScore": "Minimum poengsum 'min_score' må være mindre enn eller lik maksimum poengsum 'max_score'.",
+ "maxScoreMustBeGreaterOrEqualMinScore": "Maksimum poengsum 'max_score' må være større enn eller lik minimum poengsum 'min_score'.",
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "Maksimum hastighet 'max_speed' må være større enn eller lik minimum hastighet 'min_speed'."
+ }
+ },
+ "tips": {
+ "title": "Hvordan bruke tekstfiltre",
+ "desc": {
+ "text": "Filtre hjelper deg med å begrense søkeresultatene dine. Slik bruker du dem i inndatafeltet:",
+ "example": "Eksempel: cameras:inngangsdør label:person before:01012024 time_range:3:00PM-4:00PM ",
+ "step": "Bevegelsesbokser
Røde bokser vil vises på områder i bildet hvor bevegelse for øyeblikket blir detektert
", + "title": "Bevegelsesbokser" + }, + "regions": { + "tips": "Regionbokser
Lysegrønne bokser vil vises på områder av interesse i bildet som blir sendt til objektdetektoren.
", + "title": "Regioner", + "desc": "Vis en boks for interesseområdet sendt til objektdetektoren" + }, + "objectShapeFilterDrawing": { + "document": "Se dokumentasjonen ", + "score": "Poengsum", + "ratio": "Forhold", + "area": "Areal", + "title": "Tegning av objektformfilter", + "desc": "Tegn et rektangel på bildet for å vise areal- og størrelsesforhold", + "tips": "Aktiver dette alternativet for å tegne et rektangel på kamerabildet for å vise areal og størrelsesforholdet. Disse verdiene kan deretter brukes til å sette filterparametere for objektform i konfigurasjonen." + }, + "detectorDesc": "Frigate bruker dine detektorer ({{detectors}}) for å oppdage objekter i kameraets videostrøm.", + "desc": "Test og feilsøk viser sporede objekter i sanntid og deres statistikk. Objektlisten viser en tidsforsinket oppsummering av detekterte objekter.", + "debugging": "Test og feilsøk", + "mask": { + "title": "Bevegelsesmasker", + "desc": "Vis polygoner for bevegelsesmasker" + } + }, + "users": { + "title": "Brukere", + "management": { + "title": "Brukeradministrasjon", + "desc": "Administrer brukerprofiler for denne Frigate-instansen." + }, + "addUser": "Legg til bruker", + "updatePassword": "Oppdater passord", + "toast": { + "success": { + "deleteUser": "Bruker {{user}} ble slettet", + "updatePassword": "Passordet ble oppdatert.", + "createUser": "Bruker {{user}} ble opprettet", + "roleUpdated": "Rolle oppdatert for {{user}}" + }, + "error": { + "deleteUserFailed": "Kunne ikke slette bruker: {{errorMessage}}", + "setPasswordFailed": "Kunne ikke lagre passord: {{errorMessage}}", + "createUserFailed": "Kunne ikke opprette bruker: {{errorMessage}}", + "roleUpdateFailed": "Kunne ikke oppdatere rolle: {{errorMessage}}" + } + }, + "dialog": { + "form": { + "user": { + "placeholder": "Skriv inn brukernavn", + "title": "Brukernavn", + "desc": "Bare bokstaver, tall, punktum og understreker tillatt." + }, + "password": { + "title": "Passord", + "placeholder": "Skriv inn passord", + "confirm": { + "placeholder": "Bekreft passord", + "title": "Bekreft passord" + }, + "strength": { + "title": "Passordstyrke: ", + "veryStrong": "Veldig sterkt", + "weak": "Svakt", + "medium": "Medium", + "strong": "Sterkt" + }, + "match": "Passordene samsvarer", + "notMatch": "Passordene samsvarer ikke" + }, + "newPassword": { + "title": "Nytt passord", + "placeholder": "Skriv inn nytt passord", + "confirm": { + "placeholder": "Skriv inn nytt passord igjen" + } + }, + "usernameIsRequired": "Brukernavn er påkrevd", + "passwordIsRequired": "Passord er påkrevd" + }, + "changeRole": { + "desc": "Oppdater tillatelser for {{username}}", + "title": "Endre brukerrolle", + "roleInfo": { + "intro": "Velg en passende rolle for denne bruker:", + "admin": "Administrator", + "adminDesc": "Full tilgang til alle funksjoner.", + "viewer": "Visningsbruker", + "viewerDesc": "Begrenset til kun Direkte-dashbord, Inspiser, Utforsk og Eksporter." + }, + "select": "Velg en rolle" + }, + "createUser": { + "title": "Opprett ny bruker", + "desc": "Legg til en ny brukerkonto og spesifiser en rolle for tilgang til Frigate-brukergrensesnittet.", + "usernameOnlyInclude": "Brukernavn kan bare inneholde bokstaver, tall, punktum eller _", + "confirmPassword": "Vennligst bekreft ditt passord" + }, + "deleteUser": { + "title": "Slett bruker", + "desc": "Denne handlingen kan ikke angres. Dette vil permanent slette brukerkontoen og fjerne alle tilknyttede data.", + "warn": "Er du sikker på at du vil slette {{username}}?" + }, + "passwordSetting": { + "updatePassword": "Oppdater passord for {{username}}", + "setPassword": "Angi passord", + "desc": "Opprett et sterkt passord for å sikre denne kontoen.", + "cannotBeEmpty": "Passordet kan ikke være tomt", + "doNotMatch": "Passordene samsvarer ikke" + } + }, + "table": { + "username": "Brukernavn", + "actions": "Handlinger", + "role": "Rolle", + "changeRole": "Endre brukerrolle", + "password": "Passord", + "deleteUser": "Slett bruker", + "noUsers": "Ingen brukere funnet." + } + }, + "notification": { + "notificationSettings": { + "desc": "Frigate kan sende push-varsler til enheten din når den kjører i nettleseren eller er installert som en progressiv webapplikasjon (PWA).", + "documentation": "Se dokumentasjonen", + "title": "Innstillinger for meldingsvarsler" + }, + "notificationUnavailable": { + "documentation": "Se dokumentasjonen", + "title": "Meldingsvarsler utilgjengelig", + "desc": "Nettleser push-varsler krever et sikkert miljø (https://…). Dette er en nettleserbegrensning. Få tilgang til Frigate på en sikker måte for å bruke meldingsvarsler."
+ },
+ "email": {
+ "title": "E-post",
+ "placeholder": "f.eks. eksempel@email.com",
+ "desc": "En gyldig e-postadresse kreves og vil bli brukt til å varsle deg om det skulle oppstå problemer med push-tjenesten."
+ },
+ "cameras": {
+ "title": "Kameraer",
+ "noCameras": "Ingen kameraer tilgjengelig",
+ "desc": "Velg hvilke kameraer meldingsvarsler skal aktiveres for."
+ },
+ "deviceSpecific": "Enhetsspesifikke innstillinger",
+ "registerDevice": "Registrer denne enheten",
+ "unregisterDevice": "Fjern registrering av enheten",
+ "suspendTime": {
+ "5minutes": "Suspender i 5 minutter",
+ "10minutes": "Suspender i 10 minutter",
+ "30minutes": "Suspender i 30 minutter",
+ "1hour": "Suspender i 1 time",
+ "12hours": "Suspender i 12 timer",
+ "24hours": "Suspender i 24 timer",
+ "untilRestart": "Suspender til omstart",
+ "suspend": "Suspender"
+ },
+ "suspended": "Meldingsvarsler suspendert {{time}}",
+ "toast": {
+ "success": {
+ "registered": "Registrering for meldingsvarsler var vellykket. En omstart av Frigate er nødvendig før noen meldingsvarsler (inkludert et testvarsel) kan sendes.",
+ "settingSaved": "Innstillinger for meldingsvarsler er lagret."
+ },
+ "error": {
+ "registerFailed": "Kunne ikke lagre registrering for meldingsvarsler."
+ }
+ },
+ "globalSettings": {
+ "title": "Globale innstillinger",
+ "desc": "Midlertidig suspender meldingsvarsler for spesifikke kameraer på alle registrerte enheter."
+ },
+ "cancelSuspension": "Avbryt suspensjon",
+ "title": "Meldingsvarsler",
+ "sendTestNotification": "Send en meldingsvarsel for test",
+ "active": "Meldingsvarsler aktivert",
+ "unsavedChanges": "Ulagrede endringer for meldingsvarsler",
+ "unsavedRegistrations": "Ulagrede registreringer for meldingsvarsler"
+ },
+ "frigatePlus": {
+ "apiKey": {
+ "notValidated": "Frigate+ API-nøkkel er ikke detektert eller validert",
+ "title": "Frigate+ API-nøkkel",
+ "validated": "Frigate+ API-nøkkel er detektert og validert",
+ "desc": "Frigate+ API-nøkkelen muliggjør integrasjon med Frigate+ tjenesten.",
+ "plusLink": "Les mer om Frigate+"
+ },
+ "modelInfo": {
+ "trainDate": "Treningsdato",
+ "baseModel": "Basismodell",
+ "loading": "Laster modellinformasjon…",
+ "error": "Kunne ikke laste modellinformasjon",
+ "loadingAvailableModels": "Laster tilgjengelige modeller…",
+ "title": "Modellinformasjon",
+ "modelType": "Modelltype",
+ "supportedDetectors": "Støttede detektorer",
+ "dimensions": "Dimensjoner",
+ "cameras": "Kameraer",
+ "availableModels": "Tilgjengelige modeller",
+ "modelSelect": "Dine tilgjengelige modeller på Frigate+ kan velges her. Merk at bare modeller som er kompatible med din nåværende detektorkonfigurasjon kan velges.",
+ "plusModelType": {
+ "userModel": "Finjustert",
+ "baseModel": "Basismodell"
+ }
+ },
+ "title": "Frigate+ Innstillinger",
+ "snapshotConfig": {
+ "title": "Konfigurasjon av øyeblikksbilde",
+ "desc": "Innsending til Frigate+ krever at både øyeblikksbilder og clean_copy-øyeblikksbilder er aktivert i konfigurasjonen din.",
+ "documentation": "Se dokumentasjonen",
+ "table": {
+ "camera": "Kamera",
+ "snapshots": "Øyeblikksbilder",
+ "cleanCopySnapshots": "clean_copy-øyeblikksbilder"
+ },
+ "cleanCopyWarning": "Noen kameraer har øyeblikksbilder aktivert, men ren kopi er deaktivert. Du må aktivere clean_copy i øyeblikksbilde-konfigurasjonen for å kunne sende bilder fra disse kameraene til Frigate+."
+ },
+ "toast": {
+ "success": "Frigate+ innstillingene er lagret. Start Frigate på nytt for å bruke endringene.",
+ "error": "Kunne ikke lagre konfigurasjonsendringer: {{errorMessage}}"
+ },
+ "restart_required": "Omstart påkrevd (Frigate+ modell endret)",
+ "unsavedChanges": "Ulagrede endringer for Frigate+ innstillinger"
+ },
+ "enrichments": {
+ "title": "Innstillinger for utvidelser",
+ "licensePlateRecognition": {
+ "desc": "Frigate kan gjenkjenne kjennemerker på kjøretøy og automatisk legge til de oppdagede tegnene i feltet \"recognized_license_plate\", eller et kjent navn som en under-merkelapp på objekter av typen bil. Et vanlig brukstilfelle kan være å lese kjennemerker på biler som kjører inn i en innkjørsel eller biler som passerer på en gate.",
+ "title": "Kjennemerke gjenkjenning",
+ "readTheDocumentation": "Se dokumentasjonen"
+ },
+ "birdClassification": {
+ "desc": "Fugleklassifisering identifiserer kjente fugler ved hjelp av en kvantisert TensorFlow-modell. Når en fugl gjenkjennes, vil det vanlige navnet legges til som en under-merkelapp. Denne informasjonen vises i brukergrensesnittet, filtre, samt i meldingsvarsler.",
+ "title": "Klassifisering av fugler"
+ },
+ "semanticSearch": {
+ "reindexNow": {
+ "desc": "Reindeksering vil regenerere vektorrepresentasjoner for alle sporede objekter. Denne prosessen kjøres i bakgrunnen og kan maksimere CPU-belastningen, samt ta en del tid avhengig av hvor mange sporede objekter du har.",
+ "confirmButton": "Reindekser",
+ "confirmTitle": "Bekreft reindeksering",
+ "confirmDesc": "Er du sikker på at du vil reindeksere alle vektorrepresentasjoner for sporede objekter? Denne prosessen vil kjøre i bakgrunnen, men den kan maksimere CPU-belastningen og ta en del tid. Du kan følge fremdriften på Utforsk-siden.",
+ "label": "Reindekser nå",
+ "success": "Reindeksering ble startet.",
+ "alreadyInProgress": "Reindeksering pågar allerede.",
+ "error": "Kunne ikke starte reindeksering: {{errorMessage}}"
+ },
+ "modelSize": {
+ "small": {
+ "desc": "Ved å bruke liten benyttes en kvantisert versjon av modellen som bruker mindre RAM og kjører raskere på CPU, med en svært ubetydelig forskjell i kvalitet på vektorrepresentasjoner.",
+ "title": "liten"
+ },
+ "label": "Modellstørrelse",
+ "desc": "Størrelsen på modellen brukt til vektorrepresentasjoner for semantisk søk.",
+ "large": {
+ "title": "stor",
+ "desc": "Ved å bruke stor benyttes den fullstendige Jina-modellen, og den vil automatisk kjøres på GPU dersom tilgjengelig."
+ }
+ },
+ "title": "Semantisk søk",
+ "desc": "Semantisk søk i Frigate lar deg finne sporede objekter i inspeksjonsselementene dine ved å bruke enten selve bildet, en brukerdefinert tekstbeskrivelse eller en automatisk generert beskrivelse.",
+ "readTheDocumentation": "Se dokumentasjonen"
+ },
+ "faceRecognition": {
+ "modelSize": {
+ "small": {
+ "title": "liten",
+ "desc": "Ved å bruke liten benyttes en FaceNet-modell for vektorrepresentasjoner for ansikt som kjører effektivt på de fleste CPU-er."
+ },
+ "label": "Modellstørrelse",
+ "desc": "Størrelsen på modellen brukt til ansiktsgjenkjenning.",
+ "large": {
+ "title": "stor",
+ "desc": "Ved å bruke stor benyttes en ArcFace-modell for vektorrepresentasjoner for ansikt, og den vil automatisk kjøres på GPU dersom tilgjengelig."
+ }
+ },
+ "title": "Ansiktsgjenkjenning",
+ "desc": "Ansiktsgjenkjenning gjør det mulig å tildele navn til personer, og når ansiktet deres gjenkjennes, vil Frigate tildele personens navn som en under-merkelapp. Denne informasjonen vises i brukergrensesnittet, filtre, samt i meldingsvarsler.",
+ "readTheDocumentation": "Se dokumentasjonen"
+ },
+ "unsavedChanges": "Ulagrede endringer i innstillinger for utvidelser",
+ "restart_required": "Omstart påkrevd (Innstillinger for utvidelser er endret)",
+ "toast": {
+ "success": "Innstillinger for utvidelser har blitt lagret. Start Frigate på nytt for å bruke endringene.",
+ "error": "Kunne ikke lagre konfigurasjonsendringer: {{errorMessage}}"
+ }
+ }
+}
diff --git a/web/public/locales/nb-NO/views/system.json b/web/public/locales/nb-NO/views/system.json
new file mode 100644
index 000000000..884949bd9
--- /dev/null
+++ b/web/public/locales/nb-NO/views/system.json
@@ -0,0 +1,180 @@
+{
+ "documentTitle": {
+ "cameras": "Kamerastatistikk - Frigate",
+ "storage": "Lagringsstatistikk - Frigate",
+ "logs": {
+ "frigate": "Frigate-logger - Frigate",
+ "go2rtc": "Go2RTC-logger - Frigate",
+ "nginx": "Nginx-logger - Frigate"
+ },
+ "general": "Generell statistikk - Frigate",
+ "enrichments": "Statistikk for utvidelser - Frigate"
+ },
+ "logs": {
+ "copy": {
+ "success": "Logger kopiert til utklippstavlen",
+ "error": "Kunne ikke kopiere logger til utklippstavlen",
+ "label": "Kopier til utklippstavle"
+ },
+ "type": {
+ "label": "Type",
+ "timestamp": "Tidsstempel",
+ "tag": "Merke",
+ "message": "Melding"
+ },
+ "toast": {
+ "error": {
+ "fetchingLogsFailed": "Feil ved henting av logger: {{errorMessage}}",
+ "whileStreamingLogs": "Feil under strømming av logger: {{errorMessage}}"
+ }
+ },
+ "download": {
+ "label": "Last ned logger"
+ },
+ "tips": "Logger strømmer fra serveren"
+ },
+ "general": {
+ "title": "Generelt",
+ "detector": {
+ "inferenceSpeed": "Detektor inferenshastighet",
+ "title": "Detektorer",
+ "cpuUsage": "Detektor CPU-belastning",
+ "memoryUsage": "Detektor minnebruk",
+ "temperature": "Detektor temperatur"
+ },
+ "hardwareInfo": {
+ "gpuMemory": "GPU-minne",
+ "gpuEncoder": "GPU-enkoder",
+ "gpuDecoder": "GPU-dekoder",
+ "gpuInfo": {
+ "nvidiaSMIOutput": {
+ "driver": "Driver: {{driver}}",
+ "cudaComputerCapability": "CUDA beregningsevne: {{cuda_compute}}",
+ "vbios": "VBios-info: {{vbios}}",
+ "title": "Nvidia SMI-utdata",
+ "name": "Navn: {{name}}"
+ },
+ "copyInfo": {
+ "label": "Kopier GPU-informasjon"
+ },
+ "toast": {
+ "success": "GPU-informasjon kopiert til utklippstavlen"
+ },
+ "vainfoOutput": {
+ "title": "Vainfo-utdata",
+ "returnCode": "Returkode: {{code}}",
+ "processOutput": "Prosessutdata:",
+ "processError": "Prosessfeil:"
+ },
+ "closeInfo": {
+ "label": "Lukk GPU-informasjon"
+ }
+ },
+ "title": "Maskinvareinformasjon",
+ "gpuUsage": "GPU-belastning",
+ "npuMemory": "NPU minne",
+ "npuUsage": "NPU belastning"
+ },
+ "otherProcesses": {
+ "title": "Andre prosesser",
+ "processCpuUsage": "Prosessenes CPU-belastning",
+ "processMemoryUsage": "Prosessenes minnebruk"
+ }
+ },
+ "storage": {
+ "overview": "Oversikt",
+ "recordings": {
+ "earliestRecording": "Tidligste opptak tilgjengelig:",
+ "title": "Opptak",
+ "tips": "Denne verdien representerer total lagringsplass brukt av opptakene i Frigates database. Frigate sporer ikke lagringsbruk for alle filer på disken din."
+ },
+ "cameraStorage": {
+ "storageUsed": "Lagringsbruk",
+ "bandwidth": "Båndbredde",
+ "title": "Kameralagring",
+ "camera": "Kamera",
+ "unusedStorageInformation": "Ubrukt lagringsinformasjon",
+ "percentageOfTotalUsed": "Prosentandel av tilgjengelig",
+ "unused": {
+ "title": "Ubrukt",
+ "tips": "Denne verdien representerer kanskje ikke nøyaktig den ledige plassen Frigate har tilgang til, dersom det finnes andre filer lagret på disken. Frigate sporer kun lagring brukt av egne opptak."
+ }
+ },
+ "title": "Lagring"
+ },
+ "cameras": {
+ "info": {
+ "codec": "Kodek:",
+ "resolution": "Oppløsning:",
+ "audio": "Lyd:",
+ "error": "Feil: {{error}}",
+ "cameraProbeInfo": "{{camera}} - kamerainformasjon",
+ "streamDataFromFFPROBE": "Strømmedata er hentet med ffprobe.",
+ "fetching": "Henter kameradata",
+ "stream": "Strøm {{idx}}",
+ "video": "Video:",
+ "fps": "Bilder per sekund:",
+ "unknown": "Ukjent",
+ "tips": {
+ "title": "Kamerainformasjon"
+ },
+ "aspectRatio": "bildeforhold"
+ },
+ "framesAndDetections": "Bilder / Deteksjoner",
+ "title": "Kameraer",
+ "overview": "Oversikt",
+ "label": {
+ "camera": "kamera",
+ "detect": "detektering",
+ "skipped": "forkastet",
+ "ffmpeg": "FFmpeg",
+ "capture": "opptak",
+ "cameraDetectionsPerSecond": "{{camName}} deteksjoner per sekund",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} forkastede deteksjoner per sekund",
+ "cameraFramesPerSecond": "{{camName}} bilder per sekund",
+ "cameraCapture": "{{camName}} opptak",
+ "cameraDetect": "{{camName}} detekt",
+ "cameraFfmpeg": "{{camName}} FFmpeg",
+ "overallDetectionsPerSecond": "totale deteksjoner per sekund",
+ "overallSkippedDetectionsPerSecond": "totalt forkastede deteksjoner per sekund",
+ "overallFramesPerSecond": "totalt bilder per sekund"
+ },
+ "toast": {
+ "success": {
+ "copyToClipboard": "Kameradata kopiert til utklippstavlen."
+ },
+ "error": {
+ "unableToProbeCamera": "Kunne ikke hente informasjon fra kamera: {{errorMessage}}"
+ }
+ }
+ },
+ "enrichments": {
+ "embeddings": {
+ "plate_recognition_speed": "Hastighet for kjennemerkegjenkjenning",
+ "face_embedding_speed": "Hastighet ansikt-vektorrepresentasjon",
+ "text_embedding_speed": "Hastighet tekst-vektorrepresentasjoner",
+ "image_embedding_speed": "Hastighet bilde-vektorrepresentasjoner",
+ "face_recognition_speed": "Hastighet for ansiktsgjenkjenning",
+ "image_embedding": "Bilde-vektorrepresentasjoner",
+ "face_recognition": "Ansiktsgjenkjenning",
+ "text_embedding": "Tekst-vektorrepresentasjoner",
+ "plate_recognition": "Kjennemerke gjenkjenning",
+ "yolov9_plate_detection_speed": "Hastighet for YOLOv9 kjennemerkedeteksjon",
+ "yolov9_plate_detection": "YOLOv9 kjennemerkedeteksjon"
+ },
+ "title": "Utvidelser",
+ "infPerSecond": "Inferenser per sekund"
+ },
+ "title": "System",
+ "metrics": "Systemmålinger",
+ "lastRefreshed": "Sist oppdatert: ",
+ "stats": {
+ "ffmpegHighCpuUsage": "{{camera}} har høy CPU-belastning for FFmpeg ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} har høy CPU-belastning for detektering ({{detectAvg}}%)",
+ "healthy": "Systemet fungerer som det skal",
+ "reindexingEmbeddings": "Reindeksering av vektorrepresentasjoner ({{processed}}% fullført)",
+ "cameraIsOffline": "{{camera}} er frakoblet",
+ "detectIsSlow": "{{detect}} er treg ({{speed}} ms)",
+ "detectIsVerySlow": "{{detect}} er veldig treg ({{speed}} ms)"
+ }
+}
diff --git a/web/public/locales/nl/audio.json b/web/public/locales/nl/audio.json
new file mode 100644
index 000000000..e99acca9e
--- /dev/null
+++ b/web/public/locales/nl/audio.json
@@ -0,0 +1,429 @@
+{
+ "babbling": "Brabbelen",
+ "bellow": "Brullen",
+ "laughter": "Gelach",
+ "snicker": "Grinniken",
+ "crying": "Huilen",
+ "sigh": "Zucht",
+ "singing": "Zingen",
+ "choir": "Koor",
+ "yodeling": "Jodelen",
+ "mantra": "Mantra",
+ "child_singing": "Zingend kind",
+ "rapping": "Rappen",
+ "breathing": "Ademhaling",
+ "wheeze": "Piepen",
+ "snoring": "Snurken",
+ "gasp": "Snakken naar adem",
+ "pant": "Hijgen",
+ "snort": "Snorren",
+ "sneeze": "Niezen",
+ "shuffle": "Schudden",
+ "footsteps": "Voetstappen",
+ "gargling": "Gorgelen",
+ "stomach_rumble": "Maag rommelt",
+ "burping": "Boeren",
+ "fart": "Scheet",
+ "finger_snapping": "Vingerknippen",
+ "applause": "Applaus",
+ "chatter": "Geklets",
+ "howl": "Huilkreet",
+ "bow_wow": "Woef woef",
+ "growling": "Grommen",
+ "whimper_dog": "Hondengejank",
+ "meow": "Miauw",
+ "hiss": "Sissen",
+ "livestock": "Vee",
+ "horse": "Paard",
+ "clip_clop": "Hoefslagen",
+ "neigh": "Hinniken",
+ "cattle": "Runderen",
+ "moo": "loeien",
+ "cowbell": "Koeienbel",
+ "pig": "Varkens",
+ "oink": "Knorren",
+ "bleat": "Blaten",
+ "chicken": "Kip",
+ "cluck": "Tok",
+ "turkey": "Kalkoen",
+ "quack": "Kwak",
+ "goose": "Gans",
+ "honk": "gakken",
+ "wild_animals": "Wilde dieren",
+ "roaring_cats": "Schreeuwende kat",
+ "roar": "Brul",
+ "bird": "Vogel",
+ "chirp": "Tjilpen",
+ "squawk": "Gekrijs",
+ "pigeon": "Duif",
+ "coo": "Koeren",
+ "crow": "Kraai",
+ "caw": "Kauw",
+ "owl": "Uil",
+ "hoot": "uilengeroep",
+ "flapping_wings": "Flapperende vleugels",
+ "rats": "Ratten",
+ "mouse": "Muis",
+ "patter": "Getrippel",
+ "insect": "Insect",
+ "mosquito": "Mug",
+ "buzz": "Gezoem",
+ "frog": "Kikker",
+ "croak": "Kwaken",
+ "snake": "Slang",
+ "rattle": "Rammel",
+ "music": "Muziek",
+ "plucked_string_instrument": "Snaarinstrument",
+ "guitar": "Gitaar",
+ "electric_guitar": "Elektrische gitaar",
+ "bass_guitar": "Basgitaar",
+ "acoustic_guitar": "Akoestische gitaar",
+ "steel_guitar": "Steel Guitar",
+ "tapping": "Tikken",
+ "strum": "Aanslaan",
+ "sitar": "Sitar",
+ "mandolin": "Mandoline",
+ "zither": "Citer",
+ "sniff": "Snuif",
+ "yell": "Schreeuwen",
+ "whoop": "Gejuich",
+ "chant": "Lied",
+ "whistling": "Gefluit",
+ "hands": "Handen",
+ "sheep": "Schaap",
+ "synthetic_singing": "Synthetisch zingen",
+ "run": "Ren",
+ "humming": "Zoemen",
+ "chewing": "Kauwen",
+ "bark": "Blaffen",
+ "animal": "Dier",
+ "cough": "Hoest",
+ "throat_clearing": "Keel schrapen",
+ "biting": "Bijten",
+ "heart_murmur": "Hartruis",
+ "crowd": "Menigte",
+ "pets": "Huisdieren",
+ "heartbeat": "Hartslag",
+ "children_playing": "Kinderen spelen",
+ "purr": "Spinnen",
+ "speech": "Spraak",
+ "whispering": "Fluisteren",
+ "yip": "Kef",
+ "groan": "Kreunen",
+ "fowl": "Gevogelte",
+ "grunt": "brommend",
+ "cock_a_doodle_doo": "Kukeleku",
+ "cheering": "Juichen",
+ "caterwaul": "Kattengehuil",
+ "hiccup": "Hik",
+ "clapping": "Klappen",
+ "dogs": "Honden",
+ "cat": "Kat",
+ "dog": "Hond",
+ "goat": "Geit",
+ "cricket": "Krekel",
+ "musical_instrument": "Muziek Instrument",
+ "duck": "Eend",
+ "banjo": "Banjo",
+ "gobble": "kalkoenroep",
+ "fly": "Vlieg",
+ "whale_vocalization": "Vocalisatie van walvissen",
+ "keyboard": "Klavier",
+ "piano": "Piano",
+ "ukulele": "Ukulele",
+ "electric_piano": "Elektrische piano",
+ "organ": "Orgel",
+ "sampler": "Sampler",
+ "harpsichord": "Klavecimbel",
+ "percussion": "Slagwerk",
+ "drum_kit": "Drumstel",
+ "snare_drum": "Snaartrommel",
+ "drum_roll": "Tromgeroffel",
+ "bass_drum": "Basdrum",
+ "tabla": "Tabla",
+ "cymbal": "Bekken",
+ "hi_hat": "Hi-Hat",
+ "maraca": "Sambabal",
+ "tubular_bells": "Buisklokken",
+ "mallet_percussion": "Mallet instrumenten",
+ "marimba": "Marimba",
+ "glockenspiel": "Klokkenspel",
+ "steelpan": "Steeldrum",
+ "brass_instrument": "Koperblaasinstrumenten",
+ "french_horn": "Waldhoorn",
+ "trombone": "Trombone",
+ "string_section": "Snaar sectie",
+ "wind_instrument": "Blaasinstrument",
+ "clarinet": "Klarinet",
+ "harp": "Harp",
+ "bell": "Klok",
+ "church_bell": "Kerkklok",
+ "jingle_bell": "Klingelbel",
+ "bicycle_bell": "Fietsbel",
+ "tuning_fork": "Stemvork",
+ "chime": "Bel",
+ "wind_chime": "Windgong",
+ "accordion": "Accordeon",
+ "bagpipes": "Doedelzakken",
+ "didgeridoo": "Didgeridoo",
+ "theremin": "Theremin",
+ "singing_bowl": "Klankschaal",
+ "rock_music": "Rockmuziek",
+ "rhythm_and_blues": "Rhythm-and-blues",
+ "soul_music": "Soulmuziek",
+ "reggae": "Reggae",
+ "country": "Countrymuziek",
+ "bluegrass": "Bluegrass",
+ "funk": "Funk",
+ "middle_eastern_music": "Midden-Oosterse muziek",
+ "jazz": "Jazz",
+ "cello": "Cello",
+ "swing_music": "Swingmuziek",
+ "gong": "gong",
+ "synthesizer": "Synthesizer",
+ "punk_rock": "Punkrock",
+ "wood_block": "Houten klankblok",
+ "double_bass": "Contrabas",
+ "beatboxing": "Beatbox",
+ "orchestra": "Orkest",
+ "progressive_rock": "Progressieve rock",
+ "pop_music": "Popmuziek",
+ "folk_music": "Volksmuziek",
+ "drum_machine": "Drum",
+ "pizzicato": "Pizzicato",
+ "grunge": "Grunge",
+ "heavy_metal": "Heavy Metal",
+ "timpani": "Pauken",
+ "electronic_organ": "Elektronisch orgel",
+ "trumpet": "Trompet",
+ "hip_hop_music": "Hip-Hop Muziek",
+ "hammond_organ": "Hammondorgel",
+ "drum": "Trommel",
+ "rimshot": "Rimshot",
+ "harmonica": "Mondharmonica",
+ "tambourine": "Tamboerijn",
+ "psychedelic_rock": "Psychedelische rock",
+ "vibraphone": "Vibrafoon",
+ "bowed_string_instrument": "Strijkinstrument",
+ "violin": "Viool",
+ "flute": "Fluit",
+ "saxophone": "Saxofoon",
+ "scratching": "Krabben",
+ "rock_and_roll": "Rock 'n Roll",
+ "disco": "Disco",
+ "classical_music": "Klassieke muziek",
+ "opera": "Opera",
+ "electronic_music": "Elektronische muziek",
+ "techno": "Techno",
+ "dubstep": "Dubstep",
+ "drum_and_bass": "Drum en bas",
+ "electronic_dance_music": "Elektronische dansmuziek",
+ "electronica": "Electronica",
+ "ambient_music": "Ambientmuziek",
+ "house_music": "Housemuziek",
+ "trance_music": "Trance Music",
+ "salsa_music": "Salsamuziek",
+ "flamenco": "Flamenco",
+ "blues": "Blues",
+ "music_of_bollywood": "Music of Bollywood",
+ "ska": "Ska",
+ "independent_music": "Onafhankelijke muziek",
+ "soundtrack_music": "Soundtrack",
+ "bathtub": "Bad",
+ "keys_jangling": "Sleutels rinkelen",
+ "coin": "Munt",
+ "dial_tone": "Kiestoon",
+ "busy_signal": "In-gesprektoon",
+ "buzzer": "Zoemer",
+ "foghorn": "Misthoorn",
+ "whistle": "Fluiten",
+ "steam_whistle": "Stoomfluit",
+ "ratchet": "Ratel",
+ "gears": "Tandwielen",
+ "air_conditioning": "Airconditioning",
+ "single-lens_reflex_camera": "Spiegelreflexcamera",
+ "machine_gun": "Geweerschot",
+ "fusillade": "Schotenwisseling",
+ "artillery_fire": "Artillerievuur",
+ "firecracker": "Vuurwerkknaller",
+ "burst": "Knal",
+ "boom": "Boem",
+ "chop": "Hout Hakken",
+ "splinter": "Splinter",
+ "chink": "Spleet",
+ "shatter": "Stukslaan",
+ "static": "Statisch geluid",
+ "white_noise": "Witte ruis",
+ "pink_noise": "Roze ruis",
+ "television": "Televisie",
+ "radio": "Radio",
+ "field_recording": "Veldopname",
+ "music_for_children": "Muziek voor kinderen",
+ "vocal_music": "Vocal Music",
+ "a_capella": "A capella",
+ "christian_music": "Christelijke Muziek",
+ "crackle": "Gekraak",
+ "cupboard_open_or_close": "Kast open of dicht",
+ "motor_vehicle": "Motorvoertuig",
+ "police_car": "Politieauto",
+ "knock": "Klop",
+ "music_of_asia": "Muziek uit Azië",
+ "dance_music": "Dansmuziek",
+ "light_engine": "Lichte motor",
+ "frying": "Frituren",
+ "gospel_music": "Gospelmuziek",
+ "ice_cream_truck": "IJscowagen",
+ "engine_starting": "Motor starten",
+ "new-age_music": "New age (muziek)",
+ "wedding_music": "Bruiloftsmuziek",
+ "music_of_africa": "Muziek van Afrika",
+ "thunder": "Donder",
+ "waterfall": "Waterval",
+ "skidding": "Slippen",
+ "truck": "Vrachtwagen",
+ "ambulance": "Ambulance",
+ "jet_engine": "Straalmotor",
+ "lullaby": "Slaapliedje",
+ "sad_music": "Droevige muziek",
+ "video_game_music": "Videogamemuziek",
+ "angry_music": "Boze muziek",
+ "steam": "Stromend water",
+ "vehicle": "Voertuig",
+ "boat": "Boot",
+ "rowboat": "Roeiboot",
+ "emergency_vehicle": "Hulpverleningsvoertuig",
+ "slam": "Slag",
+ "chopping": "Hakken",
+ "happy_music": "Vrolijke muziek",
+ "raindrop": "Regendruppel",
+ "dental_drill's_drill": "Tandartsboor",
+ "scissors": "Schaar",
+ "shuffling_cards": "Kaarten schudden",
+ "printer": "Printer",
+ "afrobeat": "Afrobeat",
+ "traditional_music": "Traditionele muziek",
+ "gurgling": "Gorgelend",
+ "train_wheels_squealing": "Piepende treinwielen",
+ "subway": "Metro",
+ "bicycle": "Fiets",
+ "medium_engine": "Middelgrote motor",
+ "squeak": "Piep",
+ "dishes": "Borden",
+ "zipper": "Rits",
+ "tick-tock": "Ticktack",
+ "race_car": "Raceauto",
+ "railroad_car": "Spoorwagon",
+ "music_of_latin_america": "Muziek uit Latijns-Amerika",
+ "carnatic_music": "Carnatische muziek",
+ "helicopter": "Helikopter",
+ "chainsaw": "Kettingzaag",
+ "ding-dong": "Ding-Dong",
+ "sink": "Wasbak",
+ "wind_noise": "Windgeruis",
+ "wind": "Wind",
+ "sailboat": "Zeilboot",
+ "song": "Liedje",
+ "toot": "Toeteren",
+ "bus": "Bus",
+ "traffic_noise": "Verkeerslawaai",
+ "train_horn": "Treinhoorn",
+ "thunderstorm": "Onweer",
+ "typewriter": "Typemachine",
+ "background_music": "Achtergrondmuziek",
+ "car": "Auto",
+ "ringtone": "Beltoon",
+ "theme_music": "Themamuziek",
+ "sliding_door": "Schuifdeur",
+ "jingle": "Jingle",
+ "waves": "Golven",
+ "stream": "Stromend water",
+ "sewing_machine": "Naaimachine",
+ "mechanical_fan": "Mechanische ventilator",
+ "camera": "Camera",
+ "cap_gun": "Speelgoedpistool",
+ "tender_music": "Tedere muziek",
+ "ship": "Schip",
+ "explosion": "Explosie",
+ "christmas_music": "Kerstmuziek",
+ "microwave_oven": "Magnetron",
+ "toilet_flush": "Toilet doorspoelen",
+ "exciting_music": "Spannende muziek",
+ "scary_music": "Enge muziek",
+ "rustling_leaves": "Ritselende bladeren",
+ "tire_squeal": "Piepende banden",
+ "fire_engine": "Brandweerwagen",
+ "water_tap": "Waterkraan",
+ "water": "Water",
+ "rain": "Regen",
+ "motorcycle": "Motorfiets",
+ "aircraft_engine": "Vliegtuigmotor",
+ "rain_on_surface": "Regen op een oppervlakte",
+ "motorboat": "Motorboot",
+ "car_passing_by": "Passerende auto",
+ "reversing_beeps": "Achteruitrijsignalen",
+ "train": "Trein",
+ "doorbell": "Deurbel",
+ "drawer_open_or_close": "Lade open of dicht",
+ "fire": "Vuur",
+ "power_windows": "Elektrische ramen",
+ "train_whistle": "Treinfluitje",
+ "fixed-wing_aircraft": "Vliegtuig met vaste vleugels",
+ "engine_knocking": "Motorklopgeluid",
+ "ocean": "Oceaan",
+ "rail_transport": "Spoorvervoer",
+ "aircraft": "Vliegtuigen",
+ "car_alarm": "Autoalarm",
+ "idling": "Stationair",
+ "door": "Deur",
+ "air_brake": "Luchtrem",
+ "propeller": "Propeller",
+ "air_horn": "Luchthoorn",
+ "skateboard": "Skateboard",
+ "engine": "Motor",
+ "accelerating": "Versnellen",
+ "blender": "Blender",
+ "gunshot": "Schot",
+ "lawn_mower": "Grasmaaier",
+ "heavy_engine": "Zware motor",
+ "tap": "Tik op",
+ "hair_dryer": "Föhn",
+ "cash_register": "Kassa",
+ "cutlery": "Bestek",
+ "power_tool": "Elektrisch gereedschap",
+ "computer_keyboard": "Computertoetsenbord",
+ "vacuum_cleaner": "Stofzuiger",
+ "tick": "Teek",
+ "alarm": "Alarm",
+ "toothbrush": "Tandenborstel",
+ "electric_shaver": "Scheerapparaat",
+ "writing": "Schrijven",
+ "telephone": "Telefoon",
+ "jackhammer": "Drilboor",
+ "alarm_clock": "Wekker",
+ "civil_defense_siren": "Luchtalarm",
+ "typing": "Typen",
+ "pulleys": "Katrollen",
+ "drill": "Boor",
+ "telephone_dialing": "Telefoonnummer draaien",
+ "telephone_bell_ringing": "Rinkelen van de telefoon",
+ "electric_toothbrush": "Elektrische tandenborstel",
+ "hammer": "Hamer",
+ "sanding": "Schuren",
+ "siren": "Sirene",
+ "smoke_detector": "Rookmelder",
+ "fire_alarm": "Brandalarm",
+ "mechanisms": "Mechanismen",
+ "filing": "Vijlen",
+ "clock": "Klok",
+ "glass": "Glas",
+ "sawing": "Zagen",
+ "tools": "Hulpmiddelen",
+ "wood": "Hout",
+ "fireworks": "Vuurwerk",
+ "eruption": "Uitbarsting",
+ "crack": "Scheur",
+ "environmental_noise": "Omgevingsgeluid",
+ "silence": "Stilte",
+ "sound_effect": "Geluidseffect",
+ "scream": "Schreeuw"
+}
diff --git a/web/public/locales/nl/common.json b/web/public/locales/nl/common.json
new file mode 100644
index 000000000..0af38d8a5
--- /dev/null
+++ b/web/public/locales/nl/common.json
@@ -0,0 +1,268 @@
+{
+ "time": {
+ "untilForTime": "Totdat {{time}}",
+ "untilForRestart": "Totdat Frigate herstart.",
+ "untilRestart": "Tot herstart",
+ "12hours": "12 uur",
+ "lastWeek": "Vorige week",
+ "last7": "Afgelopen 7 dagen",
+ "last30": "Afgelopen 30 dagen",
+ "yr": "{{time}} jaar",
+ "5minutes": "5 minuten",
+ "10minutes": "10 minuten",
+ "24hours": "24 uur",
+ "30minutes": "30 minuten",
+ "ago": "{{timeAgo}} geleden",
+ "justNow": "Zojuist",
+ "today": "Vandaag",
+ "yesterday": "Gisteren",
+ "last14": "Afgelopen 14 dagen",
+ "thisWeek": "Deze week",
+ "thisMonth": "Deze maand",
+ "lastMonth": "Vorige maand",
+ "1hour": "1 uur",
+ "pm": "pm",
+ "am": "am",
+ "year_one": "{{time}} Jaar",
+ "year_other": "{{time}} Jaren",
+ "mo": "{{time}} maand",
+ "month_one": "{{time}} maand",
+ "month_other": "{{time}} maanden",
+ "formattedTimestamp2": {
+ "12hour": "dd/MM h:mm:ss",
+ "24hour": "d MMM HH:mm:ss"
+ },
+ "s": "{{time}}s",
+ "formattedTimestamp": {
+ "12hour": "d MMM, HH:mm:ss",
+ "24hour": "d MMM, HH:mm:ss"
+ },
+ "formattedTimestampOnlyMonthAndDay": "%-d %b",
+ "d": "{{time}}dag",
+ "day_one": "{{time}} dag",
+ "day_other": "{{time}} dagen",
+ "h": "{{time}}u",
+ "hour_one": "{{time}} uur",
+ "hour_other": "{{time}} uren",
+ "m": "{{time}}min",
+ "formattedTimestampWithYear": {
+ "12hour": "%-d %b %Y, %H:%M",
+ "24hour": "%-d %b %Y, %H:%M"
+ },
+ "formattedTimestampExcludeSeconds": {
+ "24hour": "%-d %b, %H:%M",
+ "12hour": "%-d %b, %H:%M"
+ },
+ "minute_one": "{{time}} minuut",
+ "minute_other": "{{time}} minuten",
+ "second_one": "{{time}} seconde",
+ "second_other": "{{time}} seconden",
+ "formattedTimestampHourMinute": {
+ "24hour": "HH:mm",
+ "12hour": "HH:mm"
+ },
+ "formattedTimestampMonthDayYearHourMinute": {
+ "12hour": "d MMM yyyy, HH:mm",
+ "24hour": "d MMM yyyy, HH:mm"
+ },
+ "formattedTimestampMonthDay": "d MMM",
+ "formattedTimestampFilename": {
+ "12hour": "dd-MM-yy-HH-mm-ss",
+ "24hour": "dd-MM-yy-HH-mm-ss"
+ },
+ "formattedTimestampHourMinuteSecond": {
+ "12hour": "HH:mm:ss",
+ "24hour": "HH:mm:ss"
+ },
+ "formattedTimestampMonthDayHourMinute": {
+ "12hour": "d MMM, HH:mm",
+ "24hour": "d MMM, HH:mm"
+ },
+ "formattedTimestampMonthDayYear": {
+ "12hour": "d MMM yyyy",
+ "24hour": "d MMM yyyy"
+ }
+ },
+ "button": {
+ "enabled": "Ingeschakeld",
+ "back": "Terug",
+ "apply": "Toepassen",
+ "reset": "Opnieuw instellen",
+ "enable": "Inschakelen",
+ "disabled": "Uitgeschakeld",
+ "cancel": "Annuleren",
+ "close": "Sluiten",
+ "copy": "Kopieer",
+ "done": "Klaar",
+ "saving": "Opslaan…",
+ "disable": "Uitschakelen",
+ "save": "Opslaan",
+ "history": "Geschiedenis",
+ "fullscreen": "Volledig scherm",
+ "pictureInPicture": "Pop-up venster",
+ "twoWayTalk": "Tweerichtingsgesprek",
+ "cameraAudio": "Camera geluid",
+ "on": "aan",
+ "copyCoordinates": "Coördinaten kopiëren",
+ "delete": "Verwijder",
+ "yes": "Ja",
+ "no": "Nee",
+ "suspended": "Opgeschort",
+ "unsuspended": "Heractiveren",
+ "export": "Exporteren",
+ "exitFullscreen": "Verlaat volledig scherm",
+ "play": "Speel",
+ "off": "uit",
+ "info": "Info",
+ "edit": "Bewerken",
+ "download": "Download",
+ "unselect": "Deselecteren",
+ "next": "Volgende",
+ "deleteNow": "Nu verwijderen"
+ },
+ "unit": {
+ "speed": {
+ "mph": "mph",
+ "kph": "km/u"
+ },
+ "length": {
+ "feet": "voet",
+ "meters": "meter"
+ }
+ },
+ "label": {
+ "back": "Ga terug"
+ },
+ "menu": {
+ "system": "Systeem",
+ "systemMetrics": "Systeemstatistieken",
+ "settings": "Instellingen",
+ "configuration": "Configuratie",
+ "systemLogs": "Systeem logboeken",
+ "configurationEditor": "Configuratie bewerker",
+ "languages": "Talen",
+ "language": {
+ "en": "English (Engels)",
+ "zhCN": "简体中文 (Vereenvoudigd Chinees)",
+ "withSystem": {
+ "label": "Gebruik de systeeminstellingen voor de taal"
+ },
+ "ar": "العربية (Arabisch)",
+ "pt": "Português (Portugees)",
+ "ru": "Русский (Russisch)",
+ "de": "Deutsch (Duits)",
+ "tr": "Türkçe (Turks)",
+ "it": "Italiano (Italiaans)",
+ "nl": "Nederlands (Nederlands)",
+ "sv": "Svenska (Zweeds)",
+ "cs": "Čeština (Tsjechisch)",
+ "fa": "فارسی (Perzisch)",
+ "pl": "Polski (Pools)",
+ "he": "עברית (Hebreeuws)",
+ "el": "Ελληνικά (Grieks)",
+ "ro": "Română (Roemeense)",
+ "hu": "Magyar (Hongaars)",
+ "fi": "Suomi (Fins)",
+ "da": "Dansk (Deens)",
+ "sk": "Slovenčina (Slowaaks)",
+ "ko": "한국어 (Koreaans)",
+ "nb": "Norsk Bokmål (Noors Bokmål)",
+ "fr": "Français (Frans)",
+ "uk": "Українська (Oekraïens)",
+ "es": "Español (Spaans)",
+ "vi": "Tiếng Việt (Vietnamees)",
+ "hi": "हिन्दी (Hindi)",
+ "ja": "日本語 (Japans)",
+ "yue": "粵語 (Kantonees)",
+ "th": "ไทย (Thais)",
+ "ca": "Català (Catalaans)"
+ },
+ "darkMode": {
+ "label": "Donkere modus",
+ "light": "Licht",
+ "dark": "Donker",
+ "withSystem": {
+ "label": "Gebruik de systeeminstellingen voor de lichte of donkere modus"
+ }
+ },
+ "appearance": "Opmaak",
+ "theme": {
+ "blue": "Blauw",
+ "contrast": "Hoog contrast",
+ "label": "Thema",
+ "green": "Groen",
+ "nord": "Nord",
+ "red": "Rood",
+ "default": "Standaard",
+ "highcontrast": "Hoog contrast"
+ },
+ "withSystem": "Systeem",
+ "help": "Help",
+ "live": {
+ "title": "Live",
+ "allCameras": "Alle Camera's",
+ "cameras": {
+ "title": "Camera's",
+ "count_one": "{{count}} Camera",
+ "count_other": "{{count}} Camera's"
+ }
+ },
+ "restart": "Herstart Frigate",
+ "documentation": {
+ "title": "Documentatie",
+ "label": "Frigate documentatie"
+ },
+ "review": "Beoordelen",
+ "explore": "Verkennen",
+ "export": "Exporteren",
+ "uiPlayground": "Testgebied voor gebruikersinterface",
+ "faceLibrary": "Gezichtenbibliotheek",
+ "user": {
+ "title": "Gebruik",
+ "current": "Huidige gebruiker: {{user}}",
+ "logout": "Uitloggen",
+ "setPassword": "Wachtwoord instellen",
+ "account": "Account",
+ "anonymous": "anoniem"
+ }
+ },
+ "toast": {
+ "copyUrlToClipboard": "URL naar klembord gekopieerd.",
+ "save": {
+ "title": "Opslaan",
+ "error": {
+ "title": "Opslaan van configuratiewijzigingen mislukt: {{errorMessage}}",
+ "noMessage": "Het opslaan van configuratiewijzigingen is mislukt"
+ }
+ }
+ },
+ "role": {
+ "title": "Rol",
+ "admin": "Beheerder",
+ "viewer": "Gebruiker",
+ "desc": "Beheerders hebben volledige toegang tot alle functies in de Frigate-interface. Kijkers kunnen alleen camera’s bekijken, items beoordelen en historische beelden terugkijken."
+ },
+ "pagination": {
+ "previous": {
+ "title": "Vorig",
+ "label": "Ga naar de vorige pagina"
+ },
+ "more": "Meer pagina's",
+ "label": "Paginering",
+ "next": {
+ "title": "Volgende",
+ "label": "Ga naar volgende pagina"
+ }
+ },
+ "accessDenied": {
+ "documentTitle": "Toegang geweigerd - Frigate",
+ "desc": "Je hebt geen toestemming om deze pagina te bekijken.",
+ "title": "Toegang geweigerd"
+ },
+ "notFound": {
+ "desc": "Pagina niet gevonden",
+ "title": "404",
+ "documentTitle": "Niet gevonden - Frigate"
+ },
+ "selectItem": "Selecteer {{item}}"
+}
diff --git a/web/public/locales/nl/components/auth.json b/web/public/locales/nl/components/auth.json
new file mode 100644
index 000000000..78ae8e55e
--- /dev/null
+++ b/web/public/locales/nl/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "password": "Wachtwoord",
+ "login": "Inloggen",
+ "errors": {
+ "rateLimit": "Limiet overschreden. Probeer het later opnieuw.",
+ "loginFailed": "Inloggen mislukt",
+ "usernameRequired": "Gebruikersnaam is vereist",
+ "passwordRequired": "Wachtwoord is vereist",
+ "unknownError": "Onbekende fout. Bekijk de logs.",
+ "webUnknownError": "Onbekende fout. Controleer consolelogboeken."
+ },
+ "user": "Gebruikersnaam"
+ }
+}
diff --git a/web/public/locales/nl/components/camera.json b/web/public/locales/nl/components/camera.json
new file mode 100644
index 000000000..251e57a25
--- /dev/null
+++ b/web/public/locales/nl/components/camera.json
@@ -0,0 +1,86 @@
+{
+ "group": {
+ "label": "Cameragroepen",
+ "add": "Cameragroep toevoegen",
+ "edit": "Cameragroep bewerken",
+ "delete": {
+ "label": "Cameragroep verwijderen",
+ "confirm": {
+ "title": "Bevestig Verwijderen",
+ "desc": "Weet u zeker dat u de cameragroep {{name}} wilt verwijderen?"
+ }
+ },
+ "name": {
+ "label": "Naam",
+ "placeholder": "Voer een naam in…",
+ "errorMessage": {
+ "exists": "De cameragroepnaam bestaat al.",
+ "invalid": "Ongeldige cameragroepnaam.",
+ "nameMustNotPeriod": "De naam van de cameragroep mag geen punt bevatten.",
+ "mustLeastCharacters": "De naam van de cameragroep moet minimaal 2 tekens lang zijn."
+ }
+ },
+ "cameras": {
+ "desc": "Selecteer camera's voor deze groep.",
+ "label": "Camera's"
+ },
+ "success": "Cameragroep ({{name}}) is opgeslagen.",
+ "camera": {
+ "setting": {
+ "audioIsAvailable": "Audio is beschikbaar voor deze stream",
+ "audioIsUnavailable": "Audio is niet beschikbaar voor deze stream",
+ "audio": {
+ "tips": {
+ "document": "Lees de documentatie ",
+ "title": "Audio moet worden uitgevoerd vanaf je camera en geconfigureerd in go2rtc voor deze stream."
+ }
+ },
+ "streamMethod": {
+ "method": {
+ "smartStreaming": {
+ "label": "Slim streamen (aanbevolen)",
+ "desc": "Slim streamen werkt het camerabeeld één keer per minuut bij wanneer er geen detecteerbare activiteit is, om bandbreedte en systeembronnen te besparen. Zodra er activiteit wordt gedetecteerd, schakelt het beeld automatisch over naar een livestream."
+ },
+ "continuousStreaming": {
+ "label": "Continue streaming",
+ "desc": {
+ "title": "Het camerabeeld is altijd een live stream wanneer het zichtbaar is op het dashboard, zelfs als er geen activiteit wordt gedetecteerd.",
+ "warning": "Let op: continu streamen kan leiden tot hoog bandbreedtegebruik en prestatieproblemen."
+ }
+ },
+ "noStreaming": {
+ "label": "Geen streaming",
+ "desc": "Camerabeelden worden slechts één keer per minuut bijgewerkt en er vindt geen livestreaming plaats."
+ }
+ },
+ "label": "Streamingmethode",
+ "placeholder": "Kies een streamingmethode"
+ },
+ "compatibilityMode": {
+ "desc": "Schakel deze optie alleen in als de live stream van je camera kleurvervormingen toont en een diagonale lijn aan de rechterkant van het beeld heeft.",
+ "label": "Compatibiliteitsmodus"
+ },
+ "desc": "Wijzig de live streaming-opties voor het dashboard van deze cameragroep. Deze instellingen zijn specifiek voor het apparaat en de browser.",
+ "label": "Camera streaming-instellingen",
+ "title": "{{cameraName}} Streaming-instellingen",
+ "stream": "Stream",
+ "placeholder": "Kies een stream"
+ }
+ },
+ "icon": "Icon"
+ },
+ "debug": {
+ "options": {
+ "label": "Instellingen",
+ "title": "Opties",
+ "showOptions": "Opties weergeven",
+ "hideOptions": "Opties verbergen"
+ },
+ "mask": "Masker",
+ "motion": "Beweging",
+ "zones": "Zones",
+ "boundingBox": "Objectkader",
+ "timestamp": "Tijdstempel",
+ "regions": "Regio's"
+ }
+}
diff --git a/web/public/locales/nl/components/dialog.json b/web/public/locales/nl/components/dialog.json
new file mode 100644
index 000000000..0c1e8aaf3
--- /dev/null
+++ b/web/public/locales/nl/components/dialog.json
@@ -0,0 +1,123 @@
+{
+ "restart": {
+ "title": "Weet je zeker dat je Frigate opnieuw wilt opstarten?",
+ "button": "Herstart",
+ "restarting": {
+ "title": "Frigate wordt opnieuw gestart",
+ "button": "Forceer herladen nu",
+ "content": "Deze pagina zal herladen in {{countdown}} seconden."
+ }
+ },
+ "explore": {
+ "plus": {
+ "submitToPlus": {
+ "label": "Verzenden naar Frigate+",
+ "desc": "Objecten op locaties die je wilt vermijden, zijn geen valspositieven. Als je ze als valspositieven indient, brengt dit het model in verwarring."
+ },
+ "review": {
+ "true": {
+ "true_one": "Dit is een {{label}}",
+ "true_other": "Dit zijn {{label}}",
+ "label": "Bevestig dit label voor Frigate Plus"
+ },
+ "false": {
+ "false_one": "Dit is geen {{label}}",
+ "false_other": "Dit zijn geen {{label}}",
+ "label": "Bevestig dit label niet voor Frigate Plus"
+ },
+ "state": {
+ "submitted": "Ingediend"
+ },
+ "question": {
+ "ask_an": "Is dit object een {{label}}?",
+ "label": "Bevestig dit label voor Frigate Plus",
+ "ask_a": "Is dit object een {{label}}?",
+ "ask_full": "Is dit object een {{untranslatedLabel}} ({{translatedLabel}})?"
+ }
+ }
+ },
+ "video": {
+ "viewInHistory": "Bekijk in Geschiedenis"
+ }
+ },
+ "export": {
+ "time": {
+ "fromTimeline": "Selecteer uit tijdlijn",
+ "end": {
+ "label": "Selecteer eindtijd",
+ "title": "Eindtijd"
+ },
+ "lastHour_one": "Afgelopen uur",
+ "lastHour_other": "Afgelopen {{count}} uren",
+ "custom": "Aangepast",
+ "start": {
+ "title": "Starttijd",
+ "label": "Selecteer starttijd"
+ }
+ },
+ "name": {
+ "placeholder": "Geef de export een naam"
+ },
+ "select": "Selecteer",
+ "toast": {
+ "error": {
+ "failed": "Exporteren is mislukt: {{error}}",
+ "noVaildTimeSelected": "Geen geldig tijdsbereik geselecteerd",
+ "endTimeMustAfterStartTime": "Eindtijd moet na starttijd zijn"
+ },
+ "success": "Export is succesvol gestart. Bekijk het bestand in de map /exports."
+ },
+ "fromTimeline": {
+ "saveExport": "Export opslaan",
+ "previewExport": "Export vooraf bekijken"
+ },
+ "export": "Exporteren",
+ "selectOrExport": "Selecteren of exporteren"
+ },
+ "streaming": {
+ "label": "Stream",
+ "restreaming": {
+ "desc": {
+ "title": "Stel go2rtc in voor extra liveweergaveopties en audio voor deze camera.",
+ "readTheDocumentation": "Lees de documentatie"
+ },
+ "disabled": "Herstreamen is niet ingeschakeld voor deze camera."
+ },
+ "showStats": {
+ "label": "Streamstatistieken tonen",
+ "desc": "Schakel deze optie in om streamstatistieken als overlay op de camerafeed weer te geven."
+ },
+ "debugView": "Debugweergave"
+ },
+ "search": {
+ "saveSearch": {
+ "label": "Zoekopdracht opslaan",
+ "desc": "Geef een naam op voor deze opgeslagen zoekopdracht.",
+ "success": "Zoekopdracht ({{searchName}}) is opgeslagen.",
+ "button": {
+ "save": {
+ "label": "Bewaar deze zoekopdracht"
+ }
+ },
+ "overwrite": "{{searchName}} bestaat al. Opslaan overschrijft de bestaande waarde.",
+ "placeholder": "Voer een naam in voor uw zoekopdracht"
+ }
+ },
+ "recording": {
+ "button": {
+ "deleteNow": "Nu verwijderen",
+ "export": "Exporteren",
+ "markAsReviewed": "Markeren als beoordeeld"
+ },
+ "confirmDelete": {
+ "desc": {
+ "selected": "Weet u zeker dat u alle opgenomen videobeelden wilt verwijderen die aan dit beoordelingsitem zijn gekoppeld?detect-stream van {{cameraName}}, controleer de error logs"
+ },
+ "noPreviewFound": "Geen voorbeeld gevonden",
+ "noPreviewFoundFor": "Geen voorbeeld gevonden voor {{cameraName}}",
+ "livePlayerRequiredIOSVersion": "Voor dit type livestream is iOS 17.1 of hoger vereist.",
+ "cameraDisabled": "Camera is uitgeschakeld",
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "Frame succesvol ingediend bij Frigate+"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "Het is niet gelukt om een frame naar Frigate+ te sturen"
+ }
+ }
+}
diff --git a/web/public/locales/nl/objects.json b/web/public/locales/nl/objects.json
new file mode 100644
index 000000000..a0b21657b
--- /dev/null
+++ b/web/public/locales/nl/objects.json
@@ -0,0 +1,120 @@
+{
+ "cat": "Kat",
+ "horse": "Paard",
+ "bird": "Vogel",
+ "bark": "Blaffen",
+ "goat": "Geit",
+ "sheep": "Schaap",
+ "animal": "Dier",
+ "mouse": "Muis",
+ "dog": "Hond",
+ "keyboard": "Klavier",
+ "person": "Persoon",
+ "airplane": "Vliegtuig",
+ "traffic_light": "Verkeerslicht",
+ "street_sign": "Verkeersbord",
+ "stop_sign": "Stopbord",
+ "parking_meter": "Parkeer Meter",
+ "bench": "Bankje",
+ "cow": "Koe",
+ "giraffe": "Giraffe",
+ "hat": "Hoed",
+ "backpack": "Rugzak",
+ "shoe": "Schoen",
+ "baseball_bat": "Honkbalknuppel",
+ "baseball_glove": "Honkbalhandschoen",
+ "tennis_racket": "Tennis Racket",
+ "bottle": "Fles",
+ "plate": "Bord",
+ "fork": "Vork",
+ "spoon": "Lepel",
+ "bowl": "Schaal",
+ "sandwich": "Sandwich",
+ "broccoli": "Broccoli",
+ "hot_dog": "Hot Dog",
+ "cake": "Taart",
+ "chair": "Stoel",
+ "potted_plant": "Potplant",
+ "bed": "Bed",
+ "mirror": "Spiegel",
+ "laptop": "Laptop",
+ "cell_phone": "Mobiele telefoon",
+ "oven": "Oven",
+ "toaster": "Broodrooster",
+ "refrigerator": "Koelkast",
+ "book": "Boek",
+ "clock": "Klok",
+ "vase": "Vaas",
+ "toothbrush": "Tandenborstel",
+ "teddy_bear": "Teddybeer",
+ "vehicle": "Voertuig",
+ "squirrel": "Eekhoorn",
+ "deer": "Hert",
+ "fox": "Vos",
+ "rabbit": "Konijn",
+ "raccoon": "Wasbeer",
+ "waste_bin": "Afvalbak",
+ "on_demand": "Handmatige opnames",
+ "ups": "UPS",
+ "nzpost": "NZPost",
+ "postnord": "PostNord",
+ "gls": "GLS",
+ "dpd": "DPD",
+ "skateboard": "Skateboard",
+ "boat": "Boot",
+ "scissors": "Schaar",
+ "bicycle": "Fiets",
+ "sink": "Wasbak",
+ "bus": "Bus",
+ "car": "Auto",
+ "motorcycle": "Motorfiets",
+ "train": "Trein",
+ "door": "Deur",
+ "blender": "Blender",
+ "hair_dryer": "Föhn",
+ "banana": "Banaan",
+ "umbrella": "Paraplu",
+ "suitcase": "Koffer",
+ "license_plate": "Kentekenplaat",
+ "orange": "Oranje",
+ "postnl": "PostNL",
+ "snowboard": "Snowboard",
+ "sports_ball": "Bal",
+ "donut": "Donut",
+ "couch": "Bank",
+ "package": "Pakket",
+ "dining_table": "Etenstafel",
+ "microwave": "Magnetron",
+ "toilet": "Toilet",
+ "cup": "Beker",
+ "carrot": "Wortel",
+ "eye_glasses": "Brillen",
+ "bear": "Beer",
+ "zebra": "Zebra",
+ "handbag": "Handtas",
+ "surfboard": "Surfplank",
+ "wine_glass": "Wijnglas",
+ "hair_brush": "Haarborstel",
+ "fire_hydrant": "Brandkraan",
+ "elephant": "Olifant",
+ "remote": "Op afstand",
+ "tie": "Stropdas",
+ "kite": "Vlieger",
+ "frisbee": "Frisbee",
+ "skis": "Ski's",
+ "desk": "Bureau",
+ "knife": "Mes",
+ "apple": "Appel",
+ "pizza": "Pizza",
+ "window": "Raam",
+ "fedex": "FedEx",
+ "tv": "TV",
+ "robot_lawnmower": "Robot grasmaaier",
+ "usps": "USPS",
+ "dhl": "DHL",
+ "bbq_grill": "BBQ-grill",
+ "amazon": "Amazon",
+ "face": "Gezicht",
+ "an_post": "An Post",
+ "purolator": "Purolator"
+}
diff --git a/web/public/locales/nl/views/configEditor.json b/web/public/locales/nl/views/configEditor.json
new file mode 100644
index 000000000..5bd94a242
--- /dev/null
+++ b/web/public/locales/nl/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "documentTitle": "Configuratie-bewerken - Frigate",
+ "copyConfig": "Configuratie kopiëren",
+ "saveAndRestart": "Opslaan en opnieuw opstarten",
+ "toast": {
+ "error": {
+ "savingError": "Fout bij het opslaan van de configuratie"
+ },
+ "success": {
+ "copyToClipboard": "Configuratie gekopieerd naar klembord."
+ }
+ },
+ "configEditor": "Configuratie Bewerken",
+ "saveOnly": "Alleen opslaan",
+ "confirm": "Afsluiten zonder op te slaan?"
+}
diff --git a/web/public/locales/nl/views/events.json b/web/public/locales/nl/views/events.json
new file mode 100644
index 000000000..269cadffc
--- /dev/null
+++ b/web/public/locales/nl/views/events.json
@@ -0,0 +1,38 @@
+{
+ "documentTitle": "Beoordelen - Frigate",
+ "camera": "Camera",
+ "newReviewItems": {
+ "button": "Nieuwe items om te beoordelen",
+ "label": "Bekijk nieuwe beoordelingsitems"
+ },
+ "timeline.aria": "Selecteer tijdlijn",
+ "recordings": {
+ "documentTitle": "Opnamen - Frigate"
+ },
+ "timeline": "Tijdlijn",
+ "empty": {
+ "alert": "Er zijn geen meldingen om te beoordelen",
+ "detection": "Er zijn geen detecties om te beoordelen",
+ "motion": "Geen bewegingsgegevens gevonden"
+ },
+ "events": {
+ "aria": "Selecteer activiteiten",
+ "noFoundForTimePeriod": "Er zijn geen activiteiten gevonden voor deze periode.",
+ "label": "Activiteiten"
+ },
+ "calendarFilter": {
+ "last24Hours": "Laatste 24 uur"
+ },
+ "alerts": "Meldingen",
+ "motion": {
+ "label": "Bewegingen",
+ "only": "Alleen bewegingen"
+ },
+ "allCameras": "Alle camera's",
+ "markAsReviewed": "Markeren als beoordeeld",
+ "detections": "Detecties",
+ "markTheseItemsAsReviewed": "Markeer deze items als beoordeeld",
+ "selected_other": "{{count}} geselecteerd",
+ "selected_one": "{{count}} geselecteerd",
+ "detected": "gedetecteerd"
+}
diff --git a/web/public/locales/nl/views/explore.json b/web/public/locales/nl/views/explore.json
new file mode 100644
index 000000000..78c2c7116
--- /dev/null
+++ b/web/public/locales/nl/views/explore.json
@@ -0,0 +1,207 @@
+{
+ "generativeAI": "Generatieve AI",
+ "exploreIsUnavailable": {
+ "embeddingsReindexing": {
+ "finishingShortly": "Bijna klaar",
+ "step": {
+ "trackedObjectsProcessed": "Gevolgde objecten verwerkt: ",
+ "descriptionsEmbedded": "Beschrijving ingesloten: ",
+ "thumbnailsEmbedded": "Thumbnails ingesloten: "
+ },
+ "context": "Verkennen kan worden gebruikt nadat de embeddings van gevolgde objecten opnieuw zijn geïndexeerd.",
+ "estimatedTime": "Geschatte resterende tijd:",
+ "startingUp": "Opstarten…"
+ },
+ "downloadingModels": {
+ "setup": {
+ "textTokenizer": "Teksttokenizer",
+ "visionModel": "Visiemodel",
+ "visionModelFeatureExtractor": "kenmerkextractie van een visiemodel",
+ "textModel": "Tekstmodel"
+ },
+ "error": "Er is iets misgegaan. Raadpleeg de Frigate-logs.",
+ "context": "Frigate downloadt de vereiste inbedmodellen om de functie Semantisch zoeken te ondersteunen. Dit kan enkele minuten duren, afhankelijk van de snelheid van je netwerkverbinding.",
+ "tips": {
+ "context": "Je wilt misschien de embeddings van je gevolgde objecten opnieuw indexeren zodra de modellen zijn gedownload.",
+ "documentation": "Lees de documentatie"
+ }
+ },
+ "title": "Verkennen is niet beschikbaar"
+ },
+ "trackedObjectDetails": "Details getraceerd object",
+ "type": {
+ "details": "Details",
+ "video": "video",
+ "snapshot": "snapshot",
+ "object_lifecycle": "objectlevenscyclus"
+ },
+ "objectLifecycle": {
+ "createObjectMask": "Objectmasker maken",
+ "lifecycleItemDesc": {
+ "visible": "{{label}} Gedetecteerd",
+ "entered_zone": "{{label}} in zone {{zones}}",
+ "attribute": {
+ "other": "{{label}} Herkend als {{attribute}}",
+ "faceOrLicense_plate": "{{attribute}} Gedetecteerd voor {{label}}"
+ },
+ "heard": "{{label}} gehoord",
+ "gone": "{{label}} is vertrokken",
+ "active": "{{label}} Werd actief",
+ "stationary": "{{label}} werd stationair",
+ "external": "{{label}} gedetecteerd",
+ "header": {
+ "zones": "Zones",
+ "ratio": "Verhouding",
+ "area": "Gebied"
+ }
+ },
+ "annotationSettings": {
+ "title": "Annotatie-instellingen",
+ "offset": {
+ "millisecondsToOffset": "Aantal milliseconden om objectkader mee te verschuiven. Standaard: 0",
+ "desc": "Deze gegevens zijn afkomstig van de detectiestroom van je camera, maar worden weergegeven op beelden uit de opnamestroom. Het is onwaarschijnlijk dat deze twee streams perfect gesynchroniseerd zijn. Hierdoor zullen het objectkader en het beeld niet exact op elkaar aansluiten. Het veld annotation_offset kan echter worden gebruikt om deze annotatie-afwijking te corrigeren.",
+ "documentation": "Lees de documentatie ",
+ "label": "Annotatie-afwijking",
+ "tips": "TIP: Stel je voor dat er een clip is waarin een persoon van links naar rechts loopt. Als het objectkader in de tijdlijn van het object steeds links van de persoon ligt, dan moet de waarde verlaagd worden. Op dezelfde manier als het objectkader consequent vóór de persoon ligt dus vooruitloopt, moet de waarde verhoogd worden.",
+ "toast": {
+ "success": "Annotatieverschuiving voor {{camera}} is opgeslagen in het configuratiebestand. Herstart Frigate om je wijzigingen toe te passen."
+ }
+ },
+ "showAllZones": {
+ "title": "Toon alle zones",
+ "desc": "Toon altijd zones op frames waar objecten een zone zijn binnengegaan."
+ }
+ },
+ "noImageFound": "Er is geen afbeelding beschikbaar voor dit tijdstip.",
+ "title": "Objectlevenscyclus",
+ "adjustAnnotationSettings": "Annotatie-instellingen aanpassen",
+ "scrollViewTips": "Scroll om de belangrijke momenten uit de levenscyclus van dit object te bekijken.",
+ "autoTrackingTips": "Als u een automatische objectvolgende camera gebruikt, zal het objectkader onnauwkeurig zijn.",
+ "carousel": {
+ "previous": "Vorige dia",
+ "next": "Volgende dia"
+ },
+ "count": "{{first}} van {{second}}",
+ "trackedPoint": "Volgpunt"
+ },
+ "documentTitle": "Verken - Frigate",
+ "details": {
+ "item": {
+ "button": {
+ "viewInExplore": "Bekijk in Verkennen",
+ "share": "Deel dit beoordelingsitem"
+ },
+ "title": "Details van item bekijken",
+ "desc": "Details van item bekijken",
+ "tips": {
+ "hasMissingObjects": "Pas je configuratie aan als je wilt dat Frigate gevolgde objecten opslaat voor de volgende labels: {{objects}}",
+ "mismatch_one": "{{count}} Niet-beschikbaar object werd gedetecteerd en opgenomen in dit beoordelingsitem. Het voldeed mogelijk niet aan de criteria voor een waarschuwing of detectie, of is inmiddels opgeschoond of verwijderd.",
+ "mismatch_other": "{{count}} Niet-beschikbare objecten zijn gedetecteerd en opgenomen in dit beoordelingsitem. Deze objecten voldeden mogelijk niet aan de voorwaarden voor een waarschuwing of detectie, of zijn inmiddels verwijderd of opgeruimd."
+ },
+ "toast": {
+ "success": {
+ "regenerate": "Er is een nieuwe beschrijving aangevraagd bij {{provider}}. Afhankelijk van de snelheid van je provider kan het regenereren van de nieuwe beschrijving enige tijd duren.",
+ "updatedSublabel": "Sublabel succesvol bijgewerkt.",
+ "updatedLPR": "Kenteken succesvol bijgewerkt."
+ },
+ "error": {
+ "updatedSublabelFailed": "Het is niet gelukt om het sublabel bij te werken: {{errorMessage}}",
+ "regenerate": "Het is niet gelukt om {{provider}} aan te roepen voor een nieuwe beschrijving: {{errorMessage}}",
+ "updatedLPRFailed": "Kentekenplaat bijwerken mislukt: {{errorMessage}}"
+ }
+ }
+ },
+ "label": "Label",
+ "editSubLabel": {
+ "title": "Sublabel bewerken",
+ "descNoLabel": "Voer een nieuw sublabel in voor dit gevolgde object",
+ "desc": "Voer een nieuw sublabel in voor deze {{label}}"
+ },
+ "topScore": {
+ "label": "Hoogste score",
+ "info": "De topscore is de hoogste mediaanscore voor het gevolgde object, waardoor deze kan afwijken van de score die wordt weergegeven op de thumbnail van het zoekresultaat."
+ },
+ "objects": "Objecten",
+ "zones": "Zones",
+ "button": {
+ "findSimilar": "Vind vergelijkbare",
+ "regenerate": {
+ "label": "Regenereer de beschrijving van het gevolgde object",
+ "title": "Regenereren"
+ }
+ },
+ "description": {
+ "placeholder": "Beschrijving van het gevolgde object",
+ "label": "Beschrijving",
+ "aiTips": "Frigate vraagt pas om een beschrijving van uw Generative AI-provider als de levenscyclus van het gevolgde object is afgelopen."
+ },
+ "expandRegenerationMenu": "Regeneratiemenu uitbreiden",
+ "regenerateFromSnapshot": "Regenereren vanuit Snapshot",
+ "tips": {
+ "descriptionSaved": "Beschrijving succesvol opgeslagen",
+ "saveDescriptionFailed": "Het is niet gelukt om de beschrijving bij te werken: {{errorMessage}}"
+ },
+ "timestamp": "Tijdstempel",
+ "regenerateFromThumbnails": "Regeneratie van Thumbnails",
+ "camera": "Camera",
+ "estimatedSpeed": "Geschatte snelheid",
+ "editLPR": {
+ "title": "Kenteken bewerken",
+ "desc": "Voer een nieuwe kentekenwaarde in voor deze {{label}}",
+ "descNoLabel": "Voer een nieuwe kentekenwaarde in voor dit gevolgde object"
+ },
+ "recognizedLicensePlate": "Erkende kentekenplaat",
+ "snapshotScore": {
+ "label": "Snapshot scoren"
+ }
+ },
+ "itemMenu": {
+ "downloadVideo": {
+ "label": "Download video",
+ "aria": "Download video"
+ },
+ "viewObjectLifecycle": {
+ "aria": "Toon de levenscyclus van het object",
+ "label": "Levenscyclus van object bekijken"
+ },
+ "submitToPlus": {
+ "label": "Verzenden naar Frigate+",
+ "aria": "Verzenden naar Frigate Plus"
+ },
+ "viewInHistory": {
+ "aria": "Bekijk in Geschiedenis",
+ "label": "Bekijk in Geschiedenis"
+ },
+ "deleteTrackedObject": {
+ "label": "Verwijder dit gevolgde object"
+ },
+ "findSimilar": {
+ "label": "Vind vergelijkbare",
+ "aria": "Vind vergelijkbare gevolgde objecten"
+ },
+ "downloadSnapshot": {
+ "label": "Download snapshot",
+ "aria": "Download snapshot"
+ }
+ },
+ "noTrackedObjects": "Geen gevolgde objecten gevonden",
+ "trackedObjectsCount_one": "{{count}} gevolgd object ",
+ "trackedObjectsCount_other": "{{count}} gevolgde objecten ",
+ "searchResult": {
+ "deleteTrackedObject": {
+ "toast": {
+ "success": "Het gevolgde object is succesvol verwijderd.",
+ "error": "Verwijderen van gevolgd object mislukt: {{errorMessage}}"
+ }
+ },
+ "tooltip": "{{type}} komt voor {{confidence}}% overeen met de zoekopdracht"
+ },
+ "dialog": {
+ "confirmDelete": {
+ "title": "Bevestig Verwijderen",
+ "desc": "Het verwijderen van dit gevolgde object verwijdert de snapshot, alle opgeslagen embeddings en eventuele bijbehorende levenscyclusgegevens van het object. Opgenomen videobeelden van dit object in de Geschiedenisweergave worden NIET verwijderd.modus: {{effectiveRetainMode}}, dus deze opname op aanvraag bewaart alleen segmenten met {{effectiveRetainModeName}}."
+ },
+ "editLayout": {
+ "label": "Lay-out bewerken",
+ "exitEdit": "Bewerken verlaten",
+ "group": {
+ "label": "Cameragroep bewerken"
+ }
+ }
+}
diff --git a/web/public/locales/nl/views/recording.json b/web/public/locales/nl/views/recording.json
new file mode 100644
index 000000000..5a40650c9
--- /dev/null
+++ b/web/public/locales/nl/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "export": "Exporteren",
+ "toast": {
+ "error": {
+ "endTimeMustAfterStartTime": "De eindtijd moet na de starttijd zijn",
+ "noValidTimeSelected": "Er is geen geldig tijdsbereik geselecteerd"
+ }
+ },
+ "filter": "Filter",
+ "calendar": "Kalender",
+ "filters": "Filters"
+}
diff --git a/web/public/locales/nl/views/search.json b/web/public/locales/nl/views/search.json
new file mode 100644
index 000000000..47487be38
--- /dev/null
+++ b/web/public/locales/nl/views/search.json
@@ -0,0 +1,74 @@
+{
+ "button": {
+ "delete": "Opgeslagen zoekopdracht verwijderen",
+ "save": "Zoekopdracht opslaan",
+ "clear": "Zoekopdracht wissen",
+ "filterInformation": "Filter informatie",
+ "filterActive": "Filters actief"
+ },
+ "search": "Zoek",
+ "savedSearches": "Opgeslagen zoekopdrachten",
+ "searchFor": "Zoeken naar {{inputValue}}",
+ "trackedObjectId": "Getraceerd object-ID",
+ "filter": {
+ "label": {
+ "cameras": "Camera's",
+ "labels": "Labels",
+ "sub_labels": "Sublabels",
+ "time_range": "Tijdsbereik",
+ "before": "Voor",
+ "min_score": "Min Score",
+ "max_score": "Max Score",
+ "min_speed": "Min snelheid",
+ "recognized_license_plate": "Herkend kenteken",
+ "has_snapshot": "Heeft Snapshot",
+ "has_clip": "Heeft Clip",
+ "search_type": "Zoektype",
+ "zones": "Zones",
+ "max_speed": "Max snelheid",
+ "after": "Na"
+ },
+ "toast": {
+ "error": {
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "De ‘max_speed’ moet groter zijn dan of gelijk aan de ‘min_speed’.",
+ "beforeDateBeLaterAfter": "De 'voor' datum moet later zijn dan de 'na' datum.",
+ "afterDatebeEarlierBefore": "De ‘na’ datum moet eerder zijn dan de ‘voor’ datum.",
+ "minScoreMustBeLessOrEqualMaxScore": "De ‘min_score’ moet kleiner zijn dan of gelijk aan de ‘max_score’.",
+ "maxScoreMustBeGreaterOrEqualMinScore": "De ‘max_score’ moet groter zijn dan of gelijk aan de ‘min_score’.",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "De ‘min_snelheid’ moet kleiner zijn dan of gelijk aan de ‘max_snelheid’."
+ }
+ },
+ "tips": {
+ "title": "Hoe tekstfilters te gebruiken",
+ "desc": {
+ "example": "Voorbeeld: camera's:voordeur label:persoon vóór:01012024 tijdsbereik:15:00-16:00",
+ "text": "Filters helpen je om je zoekresultaten te beperken. Zo gebruik je ze in het invoerveld:",
+ "step": "Bewegingskaders
Rode kaders worden over het beeld geplaatst op de plekken waar momenteel beweging wordt gedetecteerd.
" + }, + "regions": { + "title": "Regio's", + "desc": "Toon een kader rond het interessegebied dat naar de objectdetector wordt gestuurd", + "tips": "Interessekaders
Heldergroene kaders worden over het beeld geplaatst op de interessegebieden die naar de objectdetector worden gestuurd.
" + }, + "objectShapeFilterDrawing": { + "title": "Objectvormfilter tekenen", + "desc": "Teken een rechthoek op het beeld om details over oppervlakte en verhouding te bekijken", + "document": "Lees de documentatie ", + "area": "Gebied", + "tips": "Schakel deze optie in om een rechthoek op het camerabeeld te tekenen die de oppervlakte en verhouding weergeeft. Deze waarden kunnen vervolgens worden gebruikt om parameters voor het objectvormfilter in je configuratie in te stellen.", + "score": "Score", + "ratio": "Verhouding" + }, + "detectorDesc": "Frigate gebruikt je detectoren ({{detectors}}) om objecten in de videostream van je camera te detecteren." + }, + "users": { + "title": "Gebruikers", + "management": { + "desc": "Beheer de gebruikersaccounts van deze Frigate-installatie.", + "title": "Gebruikersbeheer" + }, + "addUser": "Gebruiker toevoegen", + "updatePassword": "Wachtwoord bijwerken", + "toast": { + "success": { + "createUser": "Gebruiker {{user}} succesvol aangemaakt", + "deleteUser": "Gebruiker {{user}} succesvol verwijderd", + "updatePassword": "Wachtwoord succesvol bijgewerkt.", + "roleUpdated": "De rol bijgewerkt voor {{user}}" + }, + "error": { + "setPasswordFailed": "Het wachtwoord kon niet worden opgeslagen: {{errorMessage}}", + "createUserFailed": "Gebruiker aanmaken mislukt: {{errorMessage}}", + "deleteUserFailed": "Gebruiker verwijderen mislukt: {{errorMessage}}", + "roleUpdateFailed": "Rol bijwerken mislukt: {{errorMessage}}" + } + }, + "table": { + "actions": "Acties", + "role": "Rol", + "noUsers": "Geen gebruikers gevonden.", + "changeRole": "Gebruikersrol wijzigen", + "password": "Wachtwoord", + "deleteUser": "Verwijder gebruiker", + "username": "Gebruikersnaam" + }, + "dialog": { + "form": { + "user": { + "desc": "Alleen letters, cijfers, punten en onderstrepingstekens zijn toegestaan.", + "title": "Gebruikersnaam", + "placeholder": "Gebruikersnaam invoeren" + }, + "password": { + "title": "Wachtwoord", + "strength": { + "medium": "Matig", + "strong": "Sterk", + "veryStrong": "Zeer sterk", + "title": "Wachtwoordsterkte: ", + "weak": "Zwak" + }, + "match": "Wachtwoorden komen overeen", + "confirm": { + "title": "Wachtwoord bevestigen", + "placeholder": "Wachtwoord bevestigen" + }, + "placeholder": "Wachtwoord invoeren", + "notMatch": "Wachtwoorden komen niet overeen" + }, + "newPassword": { + "title": "Nieuw wachtwoord", + "placeholder": "Voer een nieuw wachtwoord in", + "confirm": { + "placeholder": "Voer het nieuwe wachtwoord opnieuw in" + } + }, + "usernameIsRequired": "Gebruikersnaam is vereist", + "passwordIsRequired": "Wachtwoord is vereist" + }, + "createUser": { + "title": "Nieuwe gebruiker aanmaken", + "desc": "Voeg een nieuw gebruikersaccount toe en geef een rol op voor toegang tot onderdelen van de Frigate-interface.", + "usernameOnlyInclude": "Gebruikersnaam mag alleen letters, cijfers, . of _ bevatten", + "confirmPassword": "Bevestig uw wachtwoord" + }, + "deleteUser": { + "title": "Verwijder gebruiker", + "warn": "Weet je zeker dat je {{username}} wilt verwijderen?", + "desc": "Deze actie kan niet ongedaan worden gemaakt. Het gebruikersaccount wordt permanent verwijderd, samen met alle bijbehorende gegevens." + }, + "changeRole": { + "desc": "Machtigingen bijwerken voor {{username}}", + "title": "Gebruikersrol wijzigen", + "roleInfo": { + "intro": "Selecteer een gepaste rol voor deze gebruiker:", + "admin": "Beheerder", + "adminDesc": "Volledige toegang tot alle functies.", + "viewer": "Gebruiker", + "viewerDesc": "Alleen toegang tot Live-dashboards, Beoordelen, Verkennen en Exports." + }, + "select": "Selecteer een rol" + }, + "passwordSetting": { + "setPassword": "Wachtwoord instellen", + "updatePassword": "Wachtwoord bijwerken voor {{username}}", + "desc": "Maak een sterk wachtwoord aan om dit account te beveiligen.", + "cannotBeEmpty": "Het wachtwoord kan niet leeg zijn", + "doNotMatch": "Wachtwoorden komen niet overeen" + } + } + }, + "notification": { + "notificationSettings": { + "title": "Meldingen instellen", + "desc": "Frigate kan rechtstreeks pushmeldingen naar uw apparaat verzenden als het in de browser actief is of als een PWA geïnstalleerd is.", + "documentation": "Lees de documentatie" + }, + "notificationUnavailable": { + "title": "Meldingen niet beschikbaar", + "documentation": "Lees de documentatie", + "desc": "Webpushmeldingen vereisen een veilige omgeving (https://…). Dit is een beperking van de browser. Open Frigate via een beveiligde verbinding om meldingen te kunnen ontvangen."
+ },
+ "globalSettings": {
+ "title": "Globale instellingen",
+ "desc": "Meldingen voor specifieke camera's op alle geregistreerde apparaten tijdelijk uitschakelen."
+ },
+ "email": {
+ "title": "E-mail",
+ "placeholder": "bijv. voorbeeld@email.com",
+ "desc": "Een geldig e-mailadres is verplicht en wordt gebruikt om je te waarschuwen als er problemen zijn met de pushmeldingsdienst."
+ },
+ "cameras": {
+ "noCameras": "Geen camera's beschikbaar",
+ "desc": "Selecteer voor welke camera's je meldingen wilt inschakelen.",
+ "title": "Camera's"
+ },
+ "deviceSpecific": "Apparaatspecifieke instellingen",
+ "active": "Meldingen actief",
+ "suspendTime": {
+ "5minutes": "Onderbreek voor 5 minuten",
+ "30minutes": "Onderbreek voor 30 minuten",
+ "1hour": "Onderbreek voor 1 uur",
+ "12hours": "Onderbreek voor 12 uur",
+ "24hours": "Onderbreek voor 24 uur",
+ "untilRestart": "Opschorten tot herstart",
+ "10minutes": "Onderbreek voor 10 minuten",
+ "suspend": "Pauzeren"
+ },
+ "cancelSuspension": "Onderbreking annuleren",
+ "toast": {
+ "success": {
+ "settingSaved": "De instellingen voor meldingen zijn opgeslagen.",
+ "registered": "Succesvol geregistreerd voor meldingen. Het opnieuw starten van Frigate is vereist voordat meldingen kunnen worden verzonden (inclusief een testmelding)."
+ },
+ "error": {
+ "registerFailed": "Het opslaan van de meldingsregistratie is mislukt."
+ }
+ },
+ "title": "Meldingen",
+ "sendTestNotification": "Stuur een testmelding",
+ "registerDevice": "Registreer dit apparaat",
+ "unregisterDevice": "Dit apparaat afmelden",
+ "suspended": "Meldingen onderbroken {{time}}",
+ "unsavedChanges": "Niet-opgeslagen wijzigingen in meldingen",
+ "unsavedRegistrations": "Niet-opgeslagen notificatieregistraties"
+ },
+ "frigatePlus": {
+ "title": "Frigate+ Instellingen",
+ "apiKey": {
+ "title": "Frigate+ API-sleutel",
+ "plusLink": "Lees meer over Frigate+",
+ "validated": "Frigate+ API-sleutel is gedetecteerd en gevalideerd",
+ "desc": "Met de Frigate+ API-sleutel is integratie met de Frigate+ service mogelijk.",
+ "notValidated": "Frigate+ API-sleutel wordt niet gedetecteerd of niet gevalideerd"
+ },
+ "snapshotConfig": {
+ "title": "Snapshot-configuratie",
+ "desc": "Om te verzenden naar Frigate+ moeten zowel snapshots als clean_copy-snapshots ingeschakeld zijn in je configuratie.",
+ "documentation": "Lees de documentatie",
+ "table": {
+ "camera": "Camera",
+ "snapshots": "Snapshots",
+ "cleanCopySnapshots": "clean_copy Snapshots"
+ },
+ "cleanCopyWarning": "Bij sommige camera's zijn snapshots ingeschakeld, maar ontbreekt de 'clean_copy'. Om afbeeldingen van deze camera's naar Frigate+ te kunnen verzenden, moet clean_copy zijn ingeschakeld in de snapshotconfiguratie."
+ },
+ "modelInfo": {
+ "title": "Modelinformatie",
+ "modelType": "Type model",
+ "trainDate": "Trainingsdatum",
+ "baseModel": "Basismodel",
+ "cameras": "Camera's",
+ "error": "Het laden van modelinformatie is mislukt",
+ "loadingAvailableModels": "Beschikbare modellen laden…",
+ "modelSelect": "Je beschikbare modellen op Frigate+ kunnen hier worden geselecteerd. Houd er rekening mee dat alleen modellen die compatibel zijn met je huidige detectorconfiguratie geselecteerd kunnen worden.",
+ "dimensions": "Afmetingen",
+ "supportedDetectors": "Ondersteunde detectoren",
+ "availableModels": "Beschikbare modellen",
+ "loading": "Modelinformatie laden…",
+ "plusModelType": {
+ "baseModel": "Basismodel",
+ "userModel": "Verfijnd"
+ }
+ },
+ "toast": {
+ "success": "Frigate+ instellingen zijn opgeslagen. Herstart Frigate om de wijzigingen toe te passen.",
+ "error": "Configuratiewijzigingen konden niet worden opgeslagen: {{errorMessage}}"
+ },
+ "restart_required": "Herstart vereist (Frigate+ model gewijzigd)",
+ "unsavedChanges": "Niet-opgeslagen wijzigingen in Frigate+ instellingen"
+ },
+ "enrichments": {
+ "semanticSearch": {
+ "reindexNow": {
+ "confirmDesc": "Weet u zeker dat u alle gevolgde object-embeddings opnieuw wilt indexeren? Dit proces wordt op de achtergrond uitgevoerd, maar kan uw CPU zwaar belasten en enige tijd in beslag nemen. U kunt de voortgang bekijken op de pagina Verkenner.",
+ "label": "Nu opnieuw indexeren",
+ "desc": "Opnieuw indexeren zal embeddings regenereren voor alle gevolgde objecten. Dit proces wordt op de achtergrond uitgevoerd en kan je CPU zwaar belasten en een behoorlijke hoeveelheid tijd in beslag nemen, afhankelijk van het aantal gevolgde objecten dat je hebt.",
+ "confirmButton": "Opnieuw indexeren",
+ "success": "Het herindexeren is succesvol gestart.",
+ "alreadyInProgress": "Het herindexeren is al bezig.",
+ "error": "Het opnieuw indexeren is mislukt: {{errorMessage}}",
+ "confirmTitle": "Bevestig herindexering"
+ },
+ "modelSize": {
+ "large": {
+ "title": "groot",
+ "desc": "Het gebruik van large maakt gebruik van het volledige Jina-model en wordt automatisch op de GPU uitgevoerd als die beschikbaar is."
+ },
+ "label": "Modelgrootte",
+ "desc": "De grootte van het model dat wordt gebruikt voor semantische zoekopdrachten.",
+ "small": {
+ "title": "klein",
+ "desc": "Het gebruik van small maakt gebruik van een gequantiseerde versie van het model die minder RAM verbruikt en sneller draait op de CPU, met een verwaarloosbaar verschil in embeddingkwaliteit."
+ }
+ },
+ "title": "Semantisch zoeken",
+ "desc": "Semantische zoektocht in Frigate laat je opsporingsberichten vinden binnen je beoordelingsvoorwerpen met het beeld zelf, een gebruiker-definieerde tekstbeschrijving, of een automatisch gegen.",
+ "readTheDocumentation": "Lees de documentatie"
+ },
+ "faceRecognition": {
+ "modelSize": {
+ "small": {
+ "desc": "Met small wordt een FaceNet-model voor gezichtsinbedding gebruikt dat efficiënt werkt op de meeste CPU's.",
+ "title": "klein"
+ },
+ "desc": "De grootte van het model dat gebruikt wordt voor gezichtsherkenning.",
+ "label": "Modelgrootte",
+ "large": {
+ "title": "groot",
+ "desc": "Het gebruik van groot maakt gebruik van een ArcFace-gezichtsembeddingmodel en wordt automatisch op de GPU uitgevoerd als die beschikbaar is."
+ }
+ },
+ "desc": "Gezichtsherkenning maakt het mogelijk om namen aan mensen toe te wijzen. Wanneer hun gezicht wordt herkend, wijst Frigate de naam van de persoon toe als sublabel. Deze informatie is opgenomen in de gebruikersinterface, filters en meldingen.",
+ "title": "Gezichtsherkenning",
+ "readTheDocumentation": "Lees de documentatie"
+ },
+ "licensePlateRecognition": {
+ "desc": "Frigate kan kentekenplaten op voertuigen herkennen en automatisch de gedetecteerde tekens toevoegen aan het veld recognized_license_plate of een bekende naam als sublabel toekennen aan objecten van het type auto. Een veelvoorkomende toepassing is het uitlezen van kentekens van auto's die een oprit oprijden of voorbijrijden op straat.",
+ "title": "Kentekenherkenning",
+ "readTheDocumentation": "Lees de documentatie"
+ },
+ "birdClassification": {
+ "desc": "Vogelclassificatie herkent bekende vogels met behulp van een gequantiseerd TensorFlow-model. Wanneer een bekende vogel wordt herkend, wordt de algemene naam toegevoegd als sublabel. Deze informatie wordt weergegeven in de interface, is beschikbaar in filters en wordt ook opgenomen in meldingen.",
+ "title": "Vogelclassificatie"
+ },
+ "title": "Verrijkingsinstellingen",
+ "unsavedChanges": "Niet-opgeslagen wijzigingen in verrijkingsinstellingen",
+ "restart_required": "Opnieuw opstarten vereist (verrijkingsinstellingen gewijzigd)",
+ "toast": {
+ "success": "Verrijkingsinstellingen zijn opgeslagen. Start Frigate opnieuw op om je wijzigingen toe te passen.",
+ "error": "Configuratiewijzigingen konden niet worden opgeslagen: {{errorMessage}}"
+ }
+ }
+}
diff --git a/web/public/locales/nl/views/system.json b/web/public/locales/nl/views/system.json
new file mode 100644
index 000000000..7d039d08e
--- /dev/null
+++ b/web/public/locales/nl/views/system.json
@@ -0,0 +1,180 @@
+{
+ "documentTitle": {
+ "general": "Algemene Statistieken - Frigate",
+ "logs": {
+ "nginx": "Nginx Logboeken - Frigate",
+ "go2rtc": "Go2RTC Logboeken - Frigate",
+ "frigate": "Frigate Logboek - Frigate"
+ },
+ "storage": "Opslag Statistieken - Frigate",
+ "cameras": "Camera Statistieken - Frigate",
+ "enrichments": "Verrijkings Statistieken - Frigate"
+ },
+ "title": "Systeem",
+ "metrics": "Systeem statistieken",
+ "logs": {
+ "download": {
+ "label": "Logs Downloaden"
+ },
+ "copy": {
+ "label": "Kopieeren naar klembord",
+ "success": "Logs zijn gekopieerd naar klembord",
+ "error": "Logs kopieeren naar klembord mislukt"
+ },
+ "type": {
+ "timestamp": "Tijdsvermelding",
+ "message": "Bericht",
+ "tag": "Tag",
+ "label": "Type"
+ },
+ "toast": {
+ "error": {
+ "whileStreamingLogs": "Fout bij streamen van logs: {{errorMessage}}",
+ "fetchingLogsFailed": "Fout bij ophalen van logs: {{errorMessage}}"
+ }
+ },
+ "tips": "Logs worden gestreamd vanaf de server"
+ },
+ "general": {
+ "detector": {
+ "title": "Detectoren",
+ "cpuUsage": "Detector CPU-verbruik",
+ "memoryUsage": "Detector Geheugen Gebruik",
+ "inferenceSpeed": "Detector Interferentie Snelheid",
+ "temperature": "Detectortemperatuur"
+ },
+ "hardwareInfo": {
+ "title": "Systeem Gegevens",
+ "gpuUsage": "GPU-verbruik",
+ "gpuInfo": {
+ "vainfoOutput": {
+ "title": "Vainfo Resultaat",
+ "returnCode": "Terugvoer Code: {{code}}",
+ "processError": "Process Fout:",
+ "processOutput": "Process Resultaat:"
+ },
+ "nvidiaSMIOutput": {
+ "name": "Naam: {{name}}",
+ "vbios": "VBios Informatie: {{vbios}}",
+ "cudaComputerCapability": "CUDA Verwerking Capaciteit: {{cuda_compute}}",
+ "driver": "Stuurprogramma: {{driver}}",
+ "title": "Nvidia SMI Uitvoer"
+ },
+ "closeInfo": {
+ "label": "Sluit GPU info"
+ },
+ "copyInfo": {
+ "label": "Kopieer GPU Info"
+ },
+ "toast": {
+ "success": "GPU info gekopieerd naar klembord"
+ }
+ },
+ "gpuDecoder": "GPU Decodeerder",
+ "gpuEncoder": "GPU Encodeerder",
+ "gpuMemory": "GPU-geheugen",
+ "npuUsage": "NPU-gebruik",
+ "npuMemory": "NPU-geheugen"
+ },
+ "otherProcesses": {
+ "processMemoryUsage": "Process Geheugen Gebruik",
+ "processCpuUsage": "Process CPU-verbruik",
+ "title": "Verdere Processen"
+ },
+ "title": "Algemeen"
+ },
+ "storage": {
+ "overview": "Overzicht",
+ "recordings": {
+ "title": "Opnames",
+ "earliestRecording": "Oudste beschikbare opname:",
+ "tips": "Deze waarde laat het totale opslag ruimte gebruik voor opnames zien in de database van Frigate. Frigate houdt geen opslag gebruiks gegevens bij van alle bestanden op uw schijf."
+ },
+ "cameraStorage": {
+ "title": "Camera Opslag",
+ "unusedStorageInformation": "Ongebruikte opslagruimte informatie",
+ "storageUsed": "Opslag",
+ "percentageOfTotalUsed": "Percentage van Totaal",
+ "unused": {
+ "title": "Ongebruikt",
+ "tips": "Deze waarde kan de beschikbare opslag ruimte voor Frigate niet goed weergeven indien er ook andere bestanden op de schijf staan. Frigate houdt geen opslag gegevens bij van bestanden buiten haar eigen opnames."
+ },
+ "camera": "Camera",
+ "bandwidth": "Bandbreedte"
+ },
+ "title": "Opslag"
+ },
+ "cameras": {
+ "title": "Cameras",
+ "overview": "Overzicht",
+ "info": {
+ "cameraProbeInfo": "{{camera}} Informatie opgehaald uit de camerastream",
+ "streamDataFromFFPROBE": "Streamgegevens zijn ontvangen via ffprobe.",
+ "stream": "Stream {{idx}}",
+ "resolution": "Resolutie:",
+ "unknown": "Onbekend",
+ "error": "Fout: {{error}}",
+ "tips": {
+ "title": "Informatie ophalen uit de camerastream"
+ },
+ "fps": "FPS:",
+ "codec": "Codec:",
+ "video": "Video:",
+ "fetching": "Camera Gegevens Opvragen",
+ "audio": "Audio:",
+ "aspectRatio": "beeldverhouding"
+ },
+ "framesAndDetections": "Frames / Detecties",
+ "label": {
+ "camera": "camera",
+ "detect": "detectie",
+ "skipped": "overgeslagen",
+ "ffmpeg": "FFmpeg",
+ "capture": "registratie",
+ "overallSkippedDetectionsPerSecond": "totaal aantal overgeslagen detecties per seconde",
+ "overallFramesPerSecond": "totale aantal frames per seconde",
+ "overallDetectionsPerSecond": "totale aantal detecties per seconde",
+ "cameraFfmpeg": "{{camName}} FFmpeg",
+ "cameraFramesPerSecond": "{{camName}} frames per seconde",
+ "cameraDetectionsPerSecond": "{{camName}} detecties per seconde",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} overgeslagen detecties per seconde",
+ "cameraCapture": "{{camName}} opname",
+ "cameraDetect": "{{camName}} detecteren"
+ },
+ "toast": {
+ "success": {
+ "copyToClipboard": "Uitvraag gegevens naar klembord gekopieerd."
+ },
+ "error": {
+ "unableToProbeCamera": "Kan camera niet uitvragen: {{errorMessage}}"
+ }
+ }
+ },
+ "lastRefreshed": "Voor het laatst vernieuwd: ",
+ "stats": {
+ "ffmpegHighCpuUsage": "{{camera}} zorgt voor hoge FFmpeg CPU belasting ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} zorgt voor hoge detectie CPU belasting ({{detectAvg}}%)",
+ "healthy": "Systeem is gezond",
+ "reindexingEmbeddings": "Herindexering van inbeddingen ({{processed}}% compleet)",
+ "detectIsSlow": "{{detect}} is traag ({{speed}} ms)",
+ "detectIsVerySlow": "{{detect}} is erg traag ({{speed}} ms)",
+ "cameraIsOffline": "{{camera}} is offline"
+ },
+ "enrichments": {
+ "title": "Verrijkingen",
+ "infPerSecond": "Interferenties Per Seconde",
+ "embeddings": {
+ "image_embedding_speed": "Afbeelding Inplaatsings Snelheid",
+ "face_embedding_speed": "Gezicht Inplaatsings Snelheid",
+ "text_embedding_speed": "Text Inplaatsing Snelheid",
+ "plate_recognition_speed": "Kentekenplaat Herkenning Snelheid",
+ "face_recognition_speed": "Snelheid van gezichtsherkenning",
+ "image_embedding": "Afbeelding Inbedden",
+ "text_embedding": "Tekstinbedden",
+ "face_recognition": "Gezichtsherkenning",
+ "yolov9_plate_detection_speed": "YOLOv9 Kentekenplaat Detectiesnelheid",
+ "yolov9_plate_detection": "YOLOv9 Kentekenplaatdetectie",
+ "plate_recognition": "Kentekenherkenning"
+ }
+ }
+}
diff --git a/web/public/locales/pl/audio.json b/web/public/locales/pl/audio.json
new file mode 100644
index 000000000..62cd7b465
--- /dev/null
+++ b/web/public/locales/pl/audio.json
@@ -0,0 +1,429 @@
+{
+ "speech": "Mowa",
+ "babbling": "Gaworzenie",
+ "yell": "Krzyk",
+ "bellow": "Ryk",
+ "whoop": "Okrzyk",
+ "whispering": "Szept",
+ "laughter": "Śmiech",
+ "snicker": "Chichot",
+ "crying": "Płacz",
+ "sigh": "Westchnienie",
+ "singing": "Śpiewanie",
+ "choir": "Chór",
+ "yodeling": "Jodłowanie",
+ "chant": "Skandowanie",
+ "mantra": "Mantra",
+ "child_singing": "Śpiew dziecka",
+ "synthetic_singing": "Śpiew syntetyczny",
+ "rapping": "Rapowanie",
+ "humming": "Nucenie",
+ "groan": "Jęk",
+ "grunt": "Chrząknięcie",
+ "whistling": "Gwizdanie",
+ "breathing": "Oddychanie",
+ "wheeze": "Świszczący oddech",
+ "snoring": "Chrapanie",
+ "gasp": "Sapnięcie",
+ "pant": "Dyszenie",
+ "snort": "Prychnięcie",
+ "cough": "Kaszel",
+ "throat_clearing": "Odchrząkiwanie",
+ "sneeze": "Kichnięcie",
+ "sniff": "Pociągnięcie nosem",
+ "run": "Bieg",
+ "shuffle": "Szuranie",
+ "footsteps": "Kroki",
+ "chewing": "Żucie",
+ "biting": "Gryzienie",
+ "gargling": "Płukanie gardła",
+ "stomach_rumble": "Burczenie w brzuchu",
+ "burping": "Bekanie",
+ "hiccup": "Czkawka",
+ "pets": "Zwierzęta domowe",
+ "finger_snapping": "Pstrykanie palcami",
+ "heartbeat": "Bicie serca",
+ "dog": "Pies",
+ "heart_murmur": "Szmer serca",
+ "chatter": "Gwar",
+ "children_playing": "Bawiące się dzieci",
+ "animal": "Zwierzę",
+ "applause": "Oklaski",
+ "cheering": "Wiwatowanie",
+ "bark": "Szczekanie",
+ "fart": "Pierdnięcie",
+ "hands": "Dłonie",
+ "clapping": "Klaskanie",
+ "crowd": "Tłum",
+ "hiss": "Syczenie",
+ "purr": "Mruczenie",
+ "yip": "Poszczekiwanie",
+ "howl": "Wycie",
+ "growling": "Warczenie",
+ "meow": "Miauczenie",
+ "bow_wow": "Hau hau",
+ "whimper_dog": "Skomlenie psa",
+ "cat": "Kot",
+ "caterwaul": "Koci wrzask",
+ "livestock": "Zwierzęta hodowlane",
+ "horse": "Koń",
+ "clip_clop": "Stukot kopyt",
+ "neigh": "Rżenie",
+ "cattle": "Bydło",
+ "moo": "Muczenie",
+ "cowbell": "Krowi dzwonek",
+ "goat": "Koza",
+ "bleat": "Beczenie",
+ "pig": "Świnia",
+ "oink": "Chrumkanie",
+ "sheep": "Owca",
+ "fowl": "Drób",
+ "chicken": "Kura",
+ "cluck": "Gdakanie",
+ "cock_a_doodle_doo": "Kukuryku",
+ "turkey": "Indyk",
+ "gobble": "Gulgotanie",
+ "duck": "Kaczka",
+ "quack": "Kwakanie",
+ "goose": "Gęś",
+ "honk": "Gęganie",
+ "wild_animals": "Dzikie zwierzęta",
+ "roaring_cats": "Ryczące koty",
+ "roar": "Ryk",
+ "bird": "Ptak",
+ "chirp": "Ćwierkanie",
+ "squawk": "Skrzeczenie",
+ "pigeon": "Gołąb",
+ "coo": "Gruchanie",
+ "crow": "Wrona",
+ "caw": "Krakanie",
+ "owl": "Sowa",
+ "hoot": "Pohukiwanie",
+ "flapping_wings": "Trzepot skrzydeł",
+ "insect": "Owad",
+ "cricket": "Świerszcz",
+ "mosquito": "Komar",
+ "fly": "Mucha",
+ "buzz": "Bzyczenie",
+ "frog": "Żaba",
+ "croak": "Kumkanie",
+ "snake": "Wąż",
+ "rattle": "Grzechotanie",
+ "whale_vocalization": "Wokalizacja wieloryba",
+ "music": "Muzyka",
+ "plucked_string_instrument": "Instrument strunowy szarpany",
+ "guitar": "Gitara",
+ "electric_guitar": "Gitara elektryczna",
+ "bass_guitar": "Gitara basowa",
+ "acoustic_guitar": "Gitara akustyczna",
+ "steel_guitar": "Gitara stalowa",
+ "tapping": "Tapowanie",
+ "strum": "Szarpnięcie strun",
+ "sitar": "Sitar",
+ "mandolin": "Mandolina",
+ "zither": "Cytra",
+ "ukulele": "Ukulele",
+ "keyboard": "Klawiatura",
+ "rimshot": "Rimshot",
+ "drum_roll": "Werbel (tremolo)",
+ "bass_drum": "Bęben basowy",
+ "timpani": "Kotły",
+ "tabla": "Tabla",
+ "cymbal": "Talerz",
+ "hi_hat": "Hi-hat",
+ "wood_block": "Pudełko drewniane",
+ "tambourine": "Tamburyn",
+ "maraca": "Marakasy",
+ "gong": "Gong",
+ "brass_instrument": "Instrument dęty blaszany",
+ "french_horn": "Waltornia",
+ "tubular_bells": "Dzwony rurowe",
+ "mallet_percussion": "Instrumenty perkusyjne pałkowe",
+ "marimba": "Marimba",
+ "glockenspiel": "Dzwonki",
+ "vibraphone": "Wibrafon",
+ "steelpan": "Instrument z beczek",
+ "orchestra": "Orkiestra",
+ "trumpet": "Trąbka",
+ "trombone": "Puzon",
+ "bowed_string_instrument": "Instrument strunowy smyczkowy",
+ "string_section": "Sekcja smyczkowa",
+ "violin": "Skrzypce",
+ "pizzicato": "Pizzicato",
+ "double_bass": "Kontrabas",
+ "wind_instrument": "Instrument dęty",
+ "saxophone": "Saksofon",
+ "clarinet": "Klarnet",
+ "harp": "Harfa",
+ "bell": "Dzwonek",
+ "church_bell": "Dzwon kościelny",
+ "jingle_bell": "Dzwoneczek",
+ "bicycle_bell": "Dzwonek rowerowy",
+ "tuning_fork": "Kamerton",
+ "chime": "Dzwonki",
+ "wind_chime": "Dzwonki wietrzne",
+ "harmonica": "Harmonijka",
+ "accordion": "Akordeon",
+ "bagpipes": "Dudy",
+ "didgeridoo": "Didgeridoo",
+ "theremin": "Theremin",
+ "singing_bowl": "Misa dźwiękowa",
+ "scratching": "Scratching",
+ "pop_music": "Muzyka pop",
+ "hip_hop_music": "Muzyka hip-hopowa",
+ "beatboxing": "Beatbox",
+ "rock_music": "Muzyka rockowa",
+ "heavy_metal": "Heavy metal",
+ "punk_rock": "Punk rock",
+ "grunge": "Grunge",
+ "progressive_rock": "Rock progresywny",
+ "rock_and_roll": "Rock and roll",
+ "psychedelic_rock": "Rock psychodeliczny",
+ "rhythm_and_blues": "Rhythm and blues",
+ "soul_music": "Muzyka soul",
+ "reggae": "Reggae",
+ "country": "Country",
+ "swing_music": "Muzyka swingowa",
+ "bluegrass": "Bluegrass",
+ "funk": "Funk",
+ "folk_music": "Muzyka folkowa",
+ "middle_eastern_music": "Muzyka bliskowschodnia",
+ "jazz": "Jazz",
+ "disco": "Disco",
+ "classical_music": "Muzyka klasyczna",
+ "opera": "Opera",
+ "electronic_music": "Muzyka elektroniczna",
+ "house_music": "Muzyka house",
+ "electronica": "Electronica",
+ "electronic_dance_music": "Muzyka elektroniczna taneczna",
+ "ambient_music": "Muzyka ambient",
+ "techno": "Techno",
+ "dubstep": "Dubstep",
+ "drum_and_bass": "Drum and bass",
+ "trance_music": "Muzyka trance",
+ "music_of_latin_america": "Muzyka Latynowska",
+ "salsa_music": "Muzyka salsa",
+ "flamenco": "Flamenco",
+ "blues": "Blues",
+ "music_for_children": "Muzyka dla dzieci",
+ "new-age_music": "Muzyka new age",
+ "vocal_music": "Muzyka wokalna",
+ "a_capella": "A cappella",
+ "music_of_africa": "Muzyka afrykańska",
+ "afrobeat": "Afrobeat",
+ "christian_music": "Muzyka chrześcijańska",
+ "gospel_music": "Muzyka gospel",
+ "music_of_asia": "Muzyka azjatycka",
+ "carnatic_music": "Muzyka karnatycka",
+ "music_of_bollywood": "Muzyka bollywood",
+ "ska": "Ska",
+ "independent_music": "Muzyka niezależna",
+ "song": "Piosenka",
+ "background_music": "Muzyka tła",
+ "theme_music": "Muzyka tematyczna",
+ "jingle": "Dżingiel",
+ "soundtrack_music": "Muzyka filmowa",
+ "lullaby": "Kołysanka",
+ "video_game_music": "Muzyka z gier wideo",
+ "christmas_music": "Muzyka świąteczna",
+ "dance_music": "Muzyka taneczna",
+ "wedding_music": "Muzyka weselna",
+ "happy_music": "Muzyka radosna",
+ "sad_music": "Muzyka smutna",
+ "tender_music": "Muzyka łagodna",
+ "exciting_music": "Muzyka ekscytująca",
+ "angry_music": "Muzyka gniewna",
+ "scary_music": "Muzyka straszna",
+ "wind": "Wiatr",
+ "rustling_leaves": "Szeleszczące liście",
+ "wind_noise": "Szum wiatru",
+ "thunderstorm": "Burza",
+ "thunder": "Grzmot",
+ "water": "Woda",
+ "rain": "Deszcz",
+ "raindrop": "Kropla deszczu",
+ "rain_on_surface": "Deszcz na powierzchni",
+ "stream": "Strumień",
+ "waterfall": "Wodospad",
+ "ocean": "Ocean",
+ "fire": "Ogień",
+ "boat": "Łódź",
+ "sailboat": "Żaglówka",
+ "motorboat": "Motorówka",
+ "ship": "Statek",
+ "motor_vehicle": "Pojazd silnikowy",
+ "car": "Samochód",
+ "toot": "Klakson",
+ "car_alarm": "Alarm samochodowy",
+ "power_windows": "Elektryczne szyby",
+ "skidding": "Poślizg",
+ "tire_squeal": "Pisk opon",
+ "ambulance": "Karetka",
+ "fire_engine": "Wóz strażacki",
+ "motorcycle": "Motocykl",
+ "traffic_noise": "Hałas uliczny",
+ "rail_transport": "Transport kolejowy",
+ "train": "Pociąg",
+ "train_whistle": "Gwizd pociągu",
+ "train_horn": "Sygnał dźwiękowy pociągu",
+ "railroad_car": "Wagon kolejowy",
+ "train_wheels_squealing": "Pisk kół pociągu",
+ "subway": "Metro",
+ "aircraft": "Statek powietrzny",
+ "aircraft_engine": "Silnik samolotu",
+ "jet_engine": "Silnik odrzutowy",
+ "propeller": "Śmigło",
+ "helicopter": "Helikopter",
+ "fixed-wing_aircraft": "Samolot",
+ "bicycle": "Rower",
+ "skateboard": "Deskorolka",
+ "engine": "Silnik",
+ "light_engine": "Lekki silnik",
+ "dental_drill's_drill": "Wiertło dentystyczne",
+ "lawn_mower": "Kosiarka do trawy",
+ "chainsaw": "Piła łańcuchowa",
+ "medium_engine": "Średni silnik",
+ "heavy_engine": "Ciężki silnik",
+ "engine_knocking": "Stukanie silnika",
+ "engine_starting": "Uruchamianie silnika",
+ "idling": "Praca na biegu jałowym",
+ "accelerating": "Przyspieszanie",
+ "door": "Drzwi",
+ "doorbell": "Dzwonek do drzwi",
+ "ding-dong": "Ding-dong",
+ "sliding_door": "Drzwi przesuwne",
+ "slam": "Trzaśnięcie",
+ "knock": "Pukanie",
+ "tap": "Stukanie",
+ "frying": "Smażenie",
+ "microwave_oven": "Kuchenka mikrofalowa",
+ "blender": "Blender",
+ "water_tap": "Kran",
+ "sink": "Zlew",
+ "bathtub": "Wanna",
+ "hair_dryer": "Suszarka do włosów",
+ "toilet_flush": "Spłuczka toalety",
+ "toothbrush": "Szczoteczka do zębów",
+ "electric_toothbrush": "Elektryczna szczoteczka do zębów",
+ "vacuum_cleaner": "Odkurzacz",
+ "zipper": "Zamek błyskawiczny",
+ "keys_jangling": "Brzęk kluczy",
+ "coin": "Moneta",
+ "shuffling_cards": "Tasowanie kart",
+ "typing": "Pisanie na klawiaturze",
+ "typewriter": "Maszyna do pisania",
+ "computer_keyboard": "Klawiatura komputerowa",
+ "writing": "Pisanie",
+ "alarm": "Alarm",
+ "telephone": "Telefon",
+ "telephone_bell_ringing": "Dzwonek telefonu",
+ "ringtone": "Dzwonek",
+ "telephone_dialing": "Wybieranie numeru",
+ "dial_tone": "Sygnał wybierania",
+ "busy_signal": "Sygnał zajętości",
+ "alarm_clock": "Budzik",
+ "siren": "Syrena",
+ "civil_defense_siren": "Syrena obrony cywilnej",
+ "buzzer": "Brzęczyk",
+ "smoke_detector": "Czujnik dymu",
+ "fire_alarm": "Alarm pożarowy",
+ "foghorn": "Sygnał mgłowy",
+ "whistle": "Gwizdek",
+ "steam_whistle": "Gwizdek parowy",
+ "drum_machine": "Automat perkusyjny",
+ "rats": "Szczury",
+ "harpsichord": "Klawesyn",
+ "musical_instrument": "Instrument muzyczny",
+ "organ": "Organy",
+ "dogs": "Psy",
+ "piano": "Fortepian",
+ "synthesizer": "Syntezator",
+ "sampler": "Sampler",
+ "electronic_organ": "Organy elektroniczne",
+ "patter": "Tupot",
+ "drum": "Bęben",
+ "banjo": "Banjo",
+ "snare_drum": "Werbel",
+ "mouse": "Mysz",
+ "electric_piano": "Pianino elektryczne",
+ "percussion": "Perkusja",
+ "hammond_organ": "Organy Hammonda",
+ "drum_kit": "Zestaw perkusyjny",
+ "air_brake": "Hamulec pneumatyczny",
+ "flute": "Flet",
+ "rowboat": "Łódź wiosłowa",
+ "squeak": "Skrzypienie",
+ "cupboard_open_or_close": "Otwieranie lub zamykanie szafki",
+ "chopping": "Siekanie",
+ "cello": "Wiolonczela",
+ "dishes": "Naczynia",
+ "cutlery": "Sztućce",
+ "car_passing_by": "Przejeżdżający samochód",
+ "ice_cream_truck": "Samochód z lodami",
+ "waves": "Fale",
+ "race_car": "Samochód wyścigowy",
+ "steam": "Para",
+ "reversing_beeps": "Sygnał cofania",
+ "police_car": "Radiowóz",
+ "bus": "Autobus",
+ "emergency_vehicle": "Pojazd uprzywilejowany",
+ "drawer_open_or_close": "Otwieranie lub zamykanie szuflady",
+ "traditional_music": "Muzyka tradycyjna",
+ "electric_shaver": "Elektryczna golarka",
+ "gurgling": "Bulgotanie",
+ "crackle": "Trzask",
+ "vehicle": "Pojazd",
+ "air_horn": "Klakson pneumatyczny",
+ "truck": "Ciężarówka",
+ "scissors": "Nożyczki",
+ "mechanisms": "Mechanizmy",
+ "ratchet": "Zapadka",
+ "tick-tock": "Tik-tak",
+ "gears": "Przekładnie",
+ "sewing_machine": "Maszyna do szycia",
+ "mechanical_fan": "Wentylator mechaniczny",
+ "air_conditioning": "Klimatyzacja",
+ "cash_register": "Kasa fiskalna",
+ "printer": "Drukarka",
+ "camera": "Kamera",
+ "single-lens_reflex_camera": "Lustrzanka jednooobiektywowa",
+ "tools": "Narzędzia",
+ "hammer": "Młotek",
+ "jackhammer": "Młot pneumatyczny",
+ "sawing": "Piłowanie",
+ "filing": "Pilnikowanie",
+ "power_tool": "Elektronarzędzie",
+ "drill": "Wiertarka",
+ "explosion": "Eksplozja",
+ "gunshot": "Strzał",
+ "machine_gun": "Karabin maszynowy",
+ "fusillade": "Kanonada",
+ "artillery_fire": "Ogień artyleryjski",
+ "cap_gun": "Pistolet na kapiszony",
+ "fireworks": "Fajerwerki",
+ "firecracker": "Petarda",
+ "burst": "Wybuch",
+ "eruption": "Erupcja",
+ "boom": "Huk",
+ "wood": "Drewno",
+ "chop": "Rąbanie",
+ "splinter": "Drzazga",
+ "crack": "Pęknięcie",
+ "glass": "Szkło",
+ "chink": "Brzęk",
+ "shatter": "Rozbicie",
+ "silence": "Cisza",
+ "sound_effect": "Efekt dźwiękowy",
+ "environmental_noise": "Hałas otoczenia",
+ "static": "Szum",
+ "white_noise": "Biały szum",
+ "pink_noise": "Różowy szum",
+ "television": "Telewizor",
+ "radio": "Radio",
+ "field_recording": "Nagranie terenowe",
+ "scream": "Wrzask",
+ "pulleys": "Bloczki",
+ "sanding": "Szlifowanie",
+ "clock": "Zegar",
+ "tick": "Tykanie"
+}
diff --git a/web/public/locales/pl/common.json b/web/public/locales/pl/common.json
new file mode 100644
index 000000000..b9101990f
--- /dev/null
+++ b/web/public/locales/pl/common.json
@@ -0,0 +1,274 @@
+{
+ "time": {
+ "12hours": "12 godzin",
+ "1hour": "1 godzina",
+ "24hours": "24 godziny",
+ "last7": "Ostatnie 7 dni",
+ "last14": "Ostatnie 14 dni",
+ "last30": "Ostatnie 30 dni",
+ "thisWeek": "Ten tydzień",
+ "lastWeek": "Ostatni tydzień",
+ "thisMonth": "Ten miesiąc",
+ "lastMonth": "Ostatni miesiąc",
+ "5minutes": "5 minut",
+ "10minutes": "10 minut",
+ "30minutes": "30 minut",
+ "untilForTime": "Do {{time}}",
+ "untilForRestart": "Do czasu restartu Frigate.",
+ "untilRestart": "Do restartu",
+ "ago": "{{timeAgo}} temu",
+ "justNow": "Właśnie teraz",
+ "today": "Dzisiaj",
+ "yesterday": "Wczoraj",
+ "pm": "po południu",
+ "am": "przed południem",
+ "yr": "{{time}}r.",
+ "year_one": "{{time}} rok",
+ "year_few": "{{time}} lata",
+ "year_many": "{{time}} lat",
+ "mo": "{{time}}m.",
+ "d": "{{time}}d.",
+ "day_one": "{{time}} dzień",
+ "day_few": "{{time}} dni",
+ "day_many": "{{time}} dni",
+ "h": "{{time}}godz.",
+ "m": "{{time}}min.",
+ "s": "{{time}}s.",
+ "month_one": "{{time}} miesiąc",
+ "month_few": "{{time}} miesiące",
+ "month_many": "{{time}} miesięcy",
+ "hour_one": "{{time}} godzina",
+ "hour_few": "{{time}} godziny",
+ "hour_many": "{{time}} godzin",
+ "minute_one": "{{time}} minuta",
+ "minute_few": "{{time}} minuty",
+ "minute_many": "{{time}} minut",
+ "formattedTimestamp": {
+ "12hour": "d MMM, h:mm:ss aaa",
+ "24hour": "MMM d, HH:mm:ss"
+ },
+ "formattedTimestamp2": {
+ "12hour": "MM/dd h:mm:ssa",
+ "24hour": "d MMM HH:mm:ss"
+ },
+ "formattedTimestampExcludeSeconds": {
+ "12hour": "%b %-d, %I:%M %p",
+ "24hour": "%b %-d, %H:%M"
+ },
+ "formattedTimestampWithYear": {
+ "12hour": "%b %-d %Y, %I:%M %p",
+ "24hour": "%b %-d %Y, %H:%M"
+ },
+ "formattedTimestampOnlyMonthAndDay": "%b %-d",
+ "second_one": "{{time}} sekunda",
+ "second_few": "{{time}} sekundy",
+ "second_many": "{{time}} sekund",
+ "formattedTimestampHourMinute": {
+ "12hour": "h:mm aaa",
+ "24hour": "HH:mm"
+ },
+ "formattedTimestampHourMinuteSecond": {
+ "12hour": "h:mm:ss aaa",
+ "24hour": "HH:mm:ss"
+ },
+ "formattedTimestampMonthDayHourMinute": {
+ "12hour": "d MMM, h:mm aaa",
+ "24hour": "d MMM, HH:mm"
+ },
+ "formattedTimestampMonthDayYearHourMinute": {
+ "12hour": "d MMM yyyy, h:mm aaa",
+ "24hour": "d MMM yyyy, HH:mm"
+ },
+ "formattedTimestampMonthDay": "d MMM",
+ "formattedTimestampFilename": {
+ "12hour": "dd-MM-yy-h-mm-ss-a",
+ "24hour": "dd-MM-yy-HH-mm-ss"
+ },
+ "formattedTimestampMonthDayYear": {
+ "12hour": "d MMMM yyyy",
+ "24hour": "d MMMM yyyy"
+ }
+ },
+ "unit": {
+ "speed": {
+ "mph": "mph",
+ "kph": "km/h"
+ },
+ "length": {
+ "feet": "stopy",
+ "meters": "metry"
+ }
+ },
+ "label": {
+ "back": "Wróć"
+ },
+ "button": {
+ "apply": "Zastosuj",
+ "reset": "Resetuj",
+ "done": "Gotowe",
+ "enabled": "Włączone",
+ "enable": "Włącz",
+ "disable": "Wyłącz",
+ "save": "Zapisz",
+ "history": "Historia",
+ "fullscreen": "Pełny ekran",
+ "exitFullscreen": "Wyjdź z pełnego ekranu",
+ "pictureInPicture": "Obraz w obrazie",
+ "delete": "Usuń",
+ "yes": "Tak",
+ "no": "Nie",
+ "download": "Pobierz",
+ "info": "Informacje",
+ "suspended": "Wstrzymane",
+ "unsuspended": "Wznów",
+ "play": "Odtwórz",
+ "unselect": "Odznacz",
+ "export": "Eksportuj",
+ "deleteNow": "Usuń teraz",
+ "next": "Dalej",
+ "disabled": "Wyłączone",
+ "back": "Wstecz",
+ "saving": "Zapisywanie…",
+ "on": "WŁĄCZ",
+ "cancel": "Anuluj",
+ "twoWayTalk": "Komunikacja dwustronna",
+ "close": "Zamknij",
+ "copy": "Kopiuj",
+ "cameraAudio": "Dźwięk kamery",
+ "off": "WYŁĄCZ",
+ "edit": "Edytuj",
+ "copyCoordinates": "Kopiuj współrzędne"
+ },
+ "menu": {
+ "system": "System",
+ "systemMetrics": "Metryki systemowe",
+ "configuration": "Konfiguracja",
+ "systemLogs": "Logi systemowe",
+ "languages": "Języki",
+ "language": {
+ "en": "English (Angielski)",
+ "zhCN": "简体中文 (Uproszczony Chiński)",
+ "withSystem": {
+ "label": "Użyj ustawień systemowych dla języka"
+ },
+ "es": "Español (Hiszpański)",
+ "cs": "Čeština (Czeski)",
+ "pl": "Polski (Polski)",
+ "hi": "हिन्दी (hinduski)",
+ "ar": "العربية (arabski)",
+ "fr": "Français (francuski)",
+ "pt": "Português (portugalski)",
+ "ru": "Русский (rosyjski)",
+ "de": "Deutsch (niemiecki)",
+ "ja": "日本語 (japoński)",
+ "tr": "Türkçe (Turecki)",
+ "it": "Italiano (Włoski)",
+ "nl": "Nederlands (Holenderski)",
+ "sv": "Svenska (Szwedzki)",
+ "nb": "Norsk Bokmål (Norweski)",
+ "ko": "한국어 (Koreański)",
+ "fa": "فارسی (Perski)",
+ "uk": "Українська (Ukraiński)",
+ "he": "עברית (Hebrajski)",
+ "el": "Ελληνικά (Grecki)",
+ "hu": "Magyar (Węgierski)",
+ "da": "Dansk (Duński)",
+ "sk": "Slovenčina (Słowacki)",
+ "vi": "Tiếng Việt (Wietnamski)",
+ "ro": "Română (Rumuński)",
+ "fi": "Suomi (Fiński)",
+ "yue": "粵語 (Kantoński)",
+ "th": "ไทย (Tajski)"
+ },
+ "appearance": "Wygląd",
+ "darkMode": {
+ "label": "Tryb ciemny",
+ "light": "Jasny",
+ "dark": "Ciemny",
+ "withSystem": {
+ "label": "Użyj ustawień systemowych dla trybu jasnego/ciemnego"
+ }
+ },
+ "withSystem": "System",
+ "theme": {
+ "label": "Motyw",
+ "blue": "Niebieski",
+ "green": "Zielony",
+ "contrast": "Wysoki kontrast",
+ "default": "Domyślny",
+ "red": "Czerwony",
+ "nord": "Nordycki",
+ "highcontrast": "Wysoki kontrast"
+ },
+ "restart": "Uruchom ponownie Frigate",
+ "live": {
+ "title": "Na żywo",
+ "allCameras": "Wszystkie kamery",
+ "cameras": {
+ "title": "Kamery",
+ "count_one": "{{count}} Kamera",
+ "count_few": "{{count}} Kamer",
+ "count_many": "{{count}} Kamery"
+ }
+ },
+ "review": "Przegląd",
+ "uiPlayground": "Plac testowy UI",
+ "faceLibrary": "Biblioteka twarzy",
+ "user": {
+ "account": "Konto",
+ "current": "Aktualny użytkownik: {{user}}",
+ "anonymous": "anonimowy",
+ "logout": "Wyloguj",
+ "setPassword": "Ustaw hasło",
+ "title": "Użytkownik"
+ },
+ "documentation": {
+ "title": "Dokumentacja",
+ "label": "Dokumentacja Frigate"
+ },
+ "explore": "Przeglądaj",
+ "configurationEditor": "Edytor konfiguracji",
+ "help": "Pomoc",
+ "settings": "Ustawienia",
+ "export": "Eksportuj"
+ },
+ "role": {
+ "viewer": "Przeglądający",
+ "desc": "Administratorzy mają pełny dostęp do wszystkich funkcji w interfejsie Frigate. Przeglądający mają ograniczony dostęp tylko do podglądu kamer, przeglądania nagrań i historycznych materiałów w interfejsie.",
+ "title": "Rola",
+ "admin": "Administrator"
+ },
+ "pagination": {
+ "label": "paginacja",
+ "previous": {
+ "title": "Poprzednia",
+ "label": "Przejdź do poprzedniej strony"
+ },
+ "next": {
+ "title": "Następna",
+ "label": "Przejdź do następnej strony"
+ },
+ "more": "Więcej stron"
+ },
+ "accessDenied": {
+ "title": "Dostęp Zabroniony",
+ "desc": "Nie masz uprawnień do wyświetlenia tej strony.",
+ "documentTitle": "Dostęp Zabroniony - Frigate"
+ },
+ "notFound": {
+ "title": "404",
+ "desc": "Strona nie znaleziona",
+ "documentTitle": "Nie Znaleziono - Frigate"
+ },
+ "selectItem": "Wybierz {{item}}",
+ "toast": {
+ "copyUrlToClipboard": "Skopiowano URL do schowka.",
+ "save": {
+ "error": {
+ "title": "Nie udało się zapisać zmian konfiguracji: {{errorMessage}}",
+ "noMessage": "Nie udało się zapisać zmian konfiguracji"
+ },
+ "title": "Zapisz"
+ }
+ }
+}
diff --git a/web/public/locales/pl/components/auth.json b/web/public/locales/pl/components/auth.json
new file mode 100644
index 000000000..094e0ca97
--- /dev/null
+++ b/web/public/locales/pl/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "user": "Nazwa użytkownika",
+ "password": "Hasło",
+ "login": "Login",
+ "errors": {
+ "usernameRequired": "Nazwa użytkownika jest wymagana",
+ "passwordRequired": "Hasło jest wymagane",
+ "loginFailed": "Logowanie nieudane",
+ "unknownError": "Nieznany błąd. Sprawdź logi.",
+ "webUnknownError": "Nieznany błąd. Sprawdź konsolę.",
+ "rateLimit": "Przekroczono limit częstotliwości. Spróbuj ponownie później."
+ }
+ }
+}
diff --git a/web/public/locales/pl/components/camera.json b/web/public/locales/pl/components/camera.json
new file mode 100644
index 000000000..afeb414d2
--- /dev/null
+++ b/web/public/locales/pl/components/camera.json
@@ -0,0 +1,86 @@
+{
+ "group": {
+ "label": "Grupy kamer",
+ "add": "Dodaj grupę kamer",
+ "edit": "Edytuj grupę kamer",
+ "delete": {
+ "label": "Usuń grupę kamer",
+ "confirm": {
+ "title": "Potwierdź usuwanie",
+ "desc": "Czy jesteś pewny że chcesz usunąć grupę kamer {{name}}?"
+ }
+ },
+ "name": {
+ "placeholder": "Wprowadź nazwę…",
+ "label": "Nazwa",
+ "errorMessage": {
+ "mustLeastCharacters": "Nazwa grupy kamer musi mieć co najmniej 2 znaki.",
+ "exists": "Grupa kamer o takiej nazwie już istnieje.",
+ "nameMustNotPeriod": "Nazwa grupy kamer nie może zawierać kropki.",
+ "invalid": "Niepoprawna nazwa grupy kamer."
+ }
+ },
+ "cameras": {
+ "label": "Kamery",
+ "desc": "Wykierz kamery dla tej grupy."
+ },
+ "icon": "Ikona",
+ "success": "Grupa kamer ({{name}}) została zapisana.",
+ "camera": {
+ "setting": {
+ "audio": {
+ "tips": {
+ "document": "Czytaj dokumentację ",
+ "title": "Dźwięk musi być wysyłany z kamery i skonfigurowany w go2rtc dla tego strumienia."
+ }
+ },
+ "label": "Ustawienia Strumieniowania Kamery",
+ "title": "Ustawienia Strumieniowania {{cameraName}}",
+ "desc": "Zmień opcje strumieniowania na żywo dla pulpitu tej grupy kamer. Te ustawienia są specyficzne dla urządzenia/przeglądarki.",
+ "audioIsAvailable": "Dźwięk jest dostępny dla tego strumienia",
+ "audioIsUnavailable": "Dźwięk jest niedostępny dla tego strumienia",
+ "streamMethod": {
+ "label": "Metoda Strumieniowania",
+ "method": {
+ "noStreaming": {
+ "label": "Brak Strumieniowania",
+ "desc": "Obrazy z kamery będą aktualizowane tylko raz na minutę, bez strumieniowania na żywo."
+ },
+ "smartStreaming": {
+ "label": "Inteligentne Strumieniowanie (zalecane)",
+ "desc": "Inteligentne strumieniowanie aktualizuje obraz kamery raz na minutę gdy nie wykryto aktywności, aby oszczędzać przepustowość i zasoby. Gdy aktywność zostanie wykryta, obraz płynnie przełącza się na transmisję na żywo."
+ },
+ "continuousStreaming": {
+ "desc": {
+ "title": "Obraz kamery będzie zawsze strumieniowany na żywo, gdy jest widoczny na pulpicie, nawet jeśli nie wykryto aktywności.",
+ "warning": "Ciągłe strumieniowanie może powodować wysokie zużycie przepustowości i problemy z wydajnością. Używaj ostrożnie."
+ },
+ "label": "Ciągłe Strumieniowanie"
+ }
+ },
+ "placeholder": "Wybierz sposób strumieniowania"
+ },
+ "compatibilityMode": {
+ "label": "Tryb kompatybilności",
+ "desc": "Włącz tę opcję tylko jeśli transmisja na żywo z kamery wyświetla artefakty kolorów i ma ukośną linię po prawej stronie obrazu."
+ },
+ "placeholder": "Wybierz strumień",
+ "stream": "Strumień"
+ }
+ }
+ },
+ "debug": {
+ "options": {
+ "label": "Ustawienia",
+ "title": "Opcje",
+ "showOptions": "Pokaż Opcje",
+ "hideOptions": "Ukryj Opcje"
+ },
+ "timestamp": "Znacznik czasu",
+ "zones": "Strefy",
+ "mask": "Maski",
+ "regions": "Regiony",
+ "motion": "Ruch",
+ "boundingBox": "Ramka Ograniczająca"
+ }
+}
diff --git a/web/public/locales/pl/components/dialog.json b/web/public/locales/pl/components/dialog.json
new file mode 100644
index 000000000..49d1764c3
--- /dev/null
+++ b/web/public/locales/pl/components/dialog.json
@@ -0,0 +1,126 @@
+{
+ "restart": {
+ "title": "Czy na pewno chcesz ponownie uruchomić Frigate?",
+ "button": "Uruchom ponownie",
+ "restarting": {
+ "title": "Frigate uruchamia się ponownie",
+ "content": "Strona odświeży się za {{countdown}} sekund.",
+ "button": "Wymuś odświeżenie"
+ }
+ },
+ "explore": {
+ "plus": {
+ "submitToPlus": {
+ "label": "Wyślij do Frigate+",
+ "desc": "Obiekty w miejscach, których chcesz unikać, nie są fałszywymi alarmami. Zgłaszanie ich jako fałszywe alarmy zdezorientuje model."
+ },
+ "review": {
+ "true": {
+ "label": "Potwierdź tę etykietę dla Frigate Plus",
+ "true_one": "To jest {{label}}",
+ "true_few": "To są {{label}}",
+ "true_many": "To są {{label}}"
+ },
+ "false": {
+ "label": "Nie potwierdzaj tej etykiety dla Frigate Plus",
+ "false_one": "To nie jest {{label}}",
+ "false_few": "To nie są {{label}}",
+ "false_many": "To nie są {{label}}"
+ },
+ "state": {
+ "submitted": "Przesłano"
+ },
+ "question": {
+ "ask_a": "Czy ten obiekt to {{label}}?",
+ "ask_an": "Czy ten obiekt to {{label}}?",
+ "ask_full": "Czy ten obiekt to {{untranslatedLabel}} ({{translatedLabel}})?",
+ "label": "Potwierdź tę etykietę dla Frigate Plus"
+ }
+ }
+ },
+ "video": {
+ "viewInHistory": "Zobacz w Historii"
+ }
+ },
+ "export": {
+ "time": {
+ "lastHour_one": "Ostatnia godzina",
+ "lastHour_few": "Ostatnie {{count}} godziny",
+ "lastHour_many": "Ostatnie {{count}} godzin",
+ "fromTimeline": "Wybierz z Osi Czasu",
+ "custom": "Niestandardowy",
+ "start": {
+ "title": "Czas Rozpoczęcia",
+ "label": "Wybierz Czas Rozpoczęcia"
+ },
+ "end": {
+ "title": "Czas Zakończenia",
+ "label": "Wybierz Czas Zakończenia"
+ }
+ },
+ "name": {
+ "placeholder": "Nazwij Eksport"
+ },
+ "select": "Wybierz",
+ "export": "Eksportuj",
+ "selectOrExport": "Wybierz lub Eksportuj",
+ "toast": {
+ "success": "Pomyślnie rozpoczęto eksport. Zobacz plik w folderze /exports.",
+ "error": {
+ "failed": "Nie udało się rozpocząć eksportu: {{error}}",
+ "endTimeMustAfterStartTime": "Czas zakończenia musi być późniejszy niż czas rozpoczęcia",
+ "noVaildTimeSelected": "Nie wybrano prawidłowego zakresu czasu"
+ }
+ },
+ "fromTimeline": {
+ "saveExport": "Zapisz Eksport",
+ "previewExport": "Podgląd Eksportu"
+ }
+ },
+ "recording": {
+ "button": {
+ "markAsReviewed": "Oznacz jako sprawdzone",
+ "deleteNow": "Usuń teraz",
+ "export": "Eksportuj"
+ },
+ "confirmDelete": {
+ "title": "Potwierdź Usunięcie",
+ "desc": {
+ "selected": "Czy na pewno chcesz usunąć wszystkie nagrane wideo powiązane z tym elementem recenzji?detect, sprawdź logi błędów"
+ },
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "Pomyślnie wysłano klatkę do Frigate+"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "Nie udało się wysłać klatki do Frigate+"
+ }
+ }
+}
diff --git a/web/public/locales/pl/objects.json b/web/public/locales/pl/objects.json
new file mode 100644
index 000000000..3923ec726
--- /dev/null
+++ b/web/public/locales/pl/objects.json
@@ -0,0 +1,120 @@
+{
+ "bird": "Ptak",
+ "boat": "Łódź",
+ "car": "Samochód",
+ "bus": "Autobus",
+ "motorcycle": "Motocykl",
+ "train": "Pociąg",
+ "bicycle": "Rower",
+ "sheep": "Owca",
+ "mouse": "Mysz",
+ "keyboard": "Klawiatura",
+ "door": "Drzwi",
+ "blender": "Blender",
+ "sink": "Zlew",
+ "vehicle": "Pojazd",
+ "hair_dryer": "Suszarka do włosów",
+ "toothbrush": "Szczoteczka do zębów",
+ "scissors": "Nożyczki",
+ "goat": "Koza",
+ "skateboard": "Deskorolka",
+ "dog": "Pies",
+ "cat": "Kot",
+ "horse": "Koń",
+ "clock": "Zegar",
+ "animal": "Zwierzę",
+ "bark": "Szczekanie",
+ "person": "Osoba",
+ "airplane": "Samolot",
+ "traffic_light": "Światła Uliczne",
+ "fire_hydrant": "Hydrant",
+ "street_sign": "Znak Drogowy",
+ "stop_sign": "Znak Stopu",
+ "parking_meter": "Parkometr",
+ "bench": "Ławka",
+ "cow": "Krowa",
+ "bear": "Niedźwiedź",
+ "giraffe": "Żyrafa",
+ "backpack": "Plecak",
+ "umbrella": "Parasolka",
+ "shoe": "But",
+ "eye_glasses": "Okulary Przeciwsłoneczne",
+ "tie": "Krawat",
+ "skis": "Narty",
+ "tennis_racket": "Rakieta Tenisowa",
+ "bottle": "Butelka",
+ "plate": "Tależ",
+ "wine_glass": "Kieliszek do Wina",
+ "cup": "Kubek",
+ "fork": "Widelec",
+ "banana": "Banan",
+ "apple": "Jabłko",
+ "carrot": "Marchewka",
+ "hot_dog": "Hot Dog",
+ "pizza": "Pizza",
+ "cake": "Ciastko",
+ "chair": "Krzesło",
+ "bed": "Łóżko",
+ "mirror": "Lustro",
+ "dining_table": "Stół Jadalny",
+ "window": "Okno",
+ "toilet": "Toaleta",
+ "tv": "Telewizor",
+ "laptop": "Laptop",
+ "remote": "Pilot",
+ "toaster": "Toster",
+ "refrigerator": "Lodówka",
+ "book": "Książka",
+ "vase": "Waza",
+ "hair_brush": "Szczotka do Włosów",
+ "squirrel": "Wiewiórka",
+ "fox": "Lis",
+ "waste_bin": "Kosz na Śmieci",
+ "face": "Twarz",
+ "license_plate": "Tablica Rejestracyjna",
+ "package": "Paczka",
+ "bbq_grill": "Grill",
+ "amazon": "Amazon",
+ "dhl": "DHL",
+ "gls": "GLS",
+ "dpd": "DPD",
+ "baseball_glove": "Rękawica Bejsbolowa",
+ "baseball_bat": "Kij Bejsbolowy",
+ "bowl": "Miska",
+ "spoon": "Łyżka",
+ "sandwich": "Kanapka",
+ "zebra": "Zebra",
+ "snowboard": "Snowboard",
+ "knife": "Nóż",
+ "broccoli": "Brokuł",
+ "elephant": "Śłoń",
+ "desk": "Biurko",
+ "orange": "Pomarańcza",
+ "cell_phone": "Telefon Komórkowy",
+ "microwave": "Mikrofalówka",
+ "oven": "Piekarnik",
+ "hat": "Kapelusz",
+ "handbag": "Torebka",
+ "suitcase": "Walizka",
+ "sports_ball": "Piłka sportowa",
+ "kite": "Latawiec",
+ "surfboard": "Deska surfingowa",
+ "donut": "Pączek",
+ "couch": "Kanapa",
+ "potted_plant": "Roślina doniczkowa",
+ "teddy_bear": "Miś pluszowy",
+ "deer": "Jeleń",
+ "rabbit": "Królik",
+ "raccoon": "Szop pracz",
+ "robot_lawnmower": "Robot koszący",
+ "usps": "USPS (Poczta Amerykańska)",
+ "on_demand": "Na żądanie",
+ "ups": "UPS",
+ "fedex": "FedEx",
+ "an_post": "An Post (Poczta Irlandzka)",
+ "purolator": "Purolator",
+ "postnl": "PostNL (Poczta Holenderska)",
+ "nzpost": "NZPost (Poczta Nowozelandzka)",
+ "postnord": "PostNord (Poczta Skandynawska)",
+ "frisbee": "Frisbee"
+}
diff --git a/web/public/locales/pl/views/configEditor.json b/web/public/locales/pl/views/configEditor.json
new file mode 100644
index 000000000..2ebc8c613
--- /dev/null
+++ b/web/public/locales/pl/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "documentTitle": "Edytor konfiguracji - Frigate",
+ "configEditor": "Edytor konfiguracji",
+ "copyConfig": "Skopiuj konfigurację",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Konfiguracja skopiowana do schowka."
+ },
+ "error": {
+ "savingError": "Błąd podczas zapisywanie konfiguracji"
+ }
+ },
+ "saveOnly": "Tylko zapisz",
+ "saveAndRestart": "Zapisz i uruchom ponownie",
+ "confirm": "Zamknąć bez zapisu?"
+}
diff --git a/web/public/locales/pl/views/events.json b/web/public/locales/pl/views/events.json
new file mode 100644
index 000000000..cf53b56e0
--- /dev/null
+++ b/web/public/locales/pl/views/events.json
@@ -0,0 +1,38 @@
+{
+ "camera": "Kamera",
+ "alerts": "Alerty",
+ "detections": "Wykrycia",
+ "motion": {
+ "label": "Ruch",
+ "only": "Tylko ruch"
+ },
+ "allCameras": "Wszystkie kamery",
+ "empty": {
+ "alert": "Brak alertów do przejrzenia",
+ "detection": "Brak detekcji do przejrzenia",
+ "motion": "Nie znaleziono danych o ruchu"
+ },
+ "timeline": "Oś czasu",
+ "timeline.aria": "Wybierz oś czasu",
+ "events": {
+ "label": "Zdarzenia",
+ "aria": "Wybierz zdarzenia",
+ "noFoundForTimePeriod": "Brak zdarzeń w tym okresie czasu."
+ },
+ "documentTitle": "Przegląd - Frigate",
+ "recordings": {
+ "documentTitle": "Nagrania - Frigate"
+ },
+ "markAsReviewed": "Oznacz jako przejrzane",
+ "markTheseItemsAsReviewed": "Oznacz te elementy jako przejrzane",
+ "calendarFilter": {
+ "last24Hours": "Ostatnie 24 godziny"
+ },
+ "newReviewItems": {
+ "label": "Zobacz nowe elementy do przeglądu",
+ "button": "Nowe elementy do przeglądu"
+ },
+ "selected_one": "{{count}} wybrane",
+ "selected_other": "{{count}} wybrane",
+ "detected": "wykryto"
+}
diff --git a/web/public/locales/pl/views/explore.json b/web/public/locales/pl/views/explore.json
new file mode 100644
index 000000000..cd0c1048f
--- /dev/null
+++ b/web/public/locales/pl/views/explore.json
@@ -0,0 +1,209 @@
+{
+ "generativeAI": "Generatywna SI",
+ "documentTitle": "Eksploruj - Frigate",
+ "details": {
+ "timestamp": "Znacznik czasu",
+ "item": {
+ "desc": "Szczegóły elementu do przeglądu",
+ "title": "Szczegóły Elementu do Przeglądu",
+ "button": {
+ "share": "Udostępnij ten element",
+ "viewInExplore": "Zobacz w Eksploracji"
+ },
+ "tips": {
+ "hasMissingObjects": "Dostosuj swoją konfigurację, jeśli chcesz, aby Frigate zapisywał śledzone obiekty dla następujących etykiet: {{objects}}",
+ "mismatch_one": "{{count}} niedostępny obiekt został wykryty i uwzględniony w tym elemencie przeglądu. Ten obiekt albo nie kwalifikował się jako alert lub detekcja, albo został już wyczyszczont/usunięty.",
+ "mismatch_few": "{{count}} niedostępne obiekty zostały wykryte i uwzględnione w tym elemencie przeglądu. Te obiekty albo nie kwalifikowały się jako alert lub detekcja, albo zostały już wyczyszczone/usunięte.",
+ "mismatch_many": "{{count}} niedostępnych obiektów zostało wykrytych i uwzględnionych w tym elemencie przeglądu. Te obiekty albo nie kwalifikowały się jako alert lub detekcja, albo zostały już wyczyszczone/usunięte."
+ },
+ "toast": {
+ "success": {
+ "regenerate": "Zażądano nowego opisu od {{provider}}. W zależności od szybkości twojego dostawcy, wygenerowanie nowego opisu może zająć trochę czasu.",
+ "updatedSublabel": "Pomyślnie zaktualizowano podetykietę.",
+ "updatedLPR": "Pomyślnie zaktualizowano tablicę rejestracyjną."
+ },
+ "error": {
+ "regenerate": "Nie udało się wezwać {{provider}} dla nowego opisu: {{errorMessage}}",
+ "updatedSublabelFailed": "Nie udało się zaktualizować podetykiety: {{errorMessage}}",
+ "updatedLPRFailed": "Nie udało się zaktualizować tablicy rejestracyjnej: {{errorMessage}}"
+ }
+ }
+ },
+ "topScore": {
+ "info": "Najwyższy wynik to najwyższa mediana wyniku dla śledzonego obiektu, więc może się różnić od wyniku pokazanego na miniaturze wyników wyszukiwania.",
+ "label": "Najwyższy wynik"
+ },
+ "editSubLabel": {
+ "descNoLabel": "Wprowadź nową podetykietę dla tego śledzonego obiektu",
+ "title": "Edytuj podetykietę",
+ "desc": "Wprowadź nową podetykietę dla tego {{label}}"
+ },
+ "estimatedSpeed": "Szacowana prędkość",
+ "label": "Etykieta",
+ "button": {
+ "regenerate": {
+ "title": "Regeneruj",
+ "label": "Regeneruj opis śledzonego obiektu"
+ },
+ "findSimilar": "Znajdź Podobne"
+ },
+ "objects": "Obiekty",
+ "camera": "Kamera",
+ "zones": "Strefy",
+ "expandRegenerationMenu": "Rozwiń menu regeneracji",
+ "description": {
+ "label": "Opis",
+ "placeholder": "Opis śledzonego obiektu",
+ "aiTips": "Frigate nie poprosi o opis od twojego dostawcy AI, dopóki cykl życia śledzonego obiektu nie dobiegnie końca."
+ },
+ "editLPR": {
+ "title": "Edytuj tablicę rejestracyjną",
+ "desc": "Wprowadź nową wartość tablicy rejestracyjnej dla tego {{label}}",
+ "descNoLabel": "Wprowadź nową wartość tablicy rejestracyjnej dla tego śledzonego obiektu"
+ },
+ "tips": {
+ "descriptionSaved": "Pomyślnie zapisano opis",
+ "saveDescriptionFailed": "Nie udało się zaktualizować opisu: {{errorMessage}}"
+ },
+ "recognizedLicensePlate": "Rozpoznana tablica rejestracyjna",
+ "regenerateFromSnapshot": "Regeneruj ze zrzutu ekranu",
+ "regenerateFromThumbnails": "Regeneruj z miniatur",
+ "snapshotScore": {
+ "label": "Wynik zrzutu"
+ }
+ },
+ "objectLifecycle": {
+ "annotationSettings": {
+ "title": "Ustawienia adnotacji",
+ "showAllZones": {
+ "title": "Pokaż wszystkie strefy",
+ "desc": "Zawsze pokazuj strefy na klatkach, w których obiekty weszły do strefy."
+ },
+ "offset": {
+ "desc": "Te dane pochodzą z kanału detekcji kamery, ale są nakładane na obrazy z kanału nagrywania. Mało prawdopodobne, aby oba strumienie były idealnie zsynchronizowane. W rezultacie ramka ograniczająca i nagranie mogą nie być idealnie dopasowane. Jednak pole annotation_offset może być użyte do regulacji tego.",
+ "documentation": "Przeczytaj dokumentację ",
+ "label": "Przesunięcie adnotacji",
+ "millisecondsToOffset": "Milisekundy do przesunięcia adnotacji detekcji. Domyślnie: 0",
+ "tips": "WSKAZÓWKA: Wyobraź sobie, że istnieje klip zdarzenia z osobą idącą od lewej do prawej. Jeśli na osi czasu zdarzenia ramka ograniczająca jest konsekwentnie na lewo od osoby, wartość powinna być zmniejszona. Podobnie, jeśli osoba idzie od lewej do prawej, a ramka ograniczająca jest konsekwentnie przed osobą, wartość powinna być zwiększona.",
+ "toast": {
+ "success": "Przesunięcie adnotacji dla {{camera}} zostało zapisane w pliku konfiguracyjnym. Zrestartuj Frigate, aby zastosować zmiany."
+ }
+ }
+ },
+ "title": "Cykl życia obiektu",
+ "noImageFound": "Nie znaleziono obrazu dla tego znacznika czasu.",
+ "scrollViewTips": "Przewiń, aby zobaczyć kluczowe momenty cyklu życia tego obiektu.",
+ "autoTrackingTips": "Pozycje ramek ograniczających mogą być niedokładne dla kamer z automatycznym śledzeniem.",
+ "lifecycleItemDesc": {
+ "visible": "{{label}} wykryty",
+ "entered_zone": "{{label}} wszedł w strefę {{zones}}",
+ "active": "{{label}} stał się aktywny",
+ "stationary": "{{label}} stał się nieruchomy",
+ "attribute": {
+ "faceOrLicense_plate": "{{attribute}} wykryty dla {{label}}",
+ "other": "{{label}} rozpoznany jako {{attribute}}"
+ },
+ "gone": "{{label}} zniknął",
+ "heard": "{{label}} usłyszany",
+ "external": "{{label}} wykryty",
+ "header": {
+ "ratio": "Współczynnik",
+ "area": "Obszar",
+ "zones": "Strefy"
+ }
+ },
+ "carousel": {
+ "previous": "Poprzedni slajd",
+ "next": "Następny slajd"
+ },
+ "createObjectMask": "Utwórz maskę obiektu",
+ "adjustAnnotationSettings": "Dostosuj ustawienia adnotacji",
+ "trackedPoint": "Punkt Śledzenia",
+ "count": "{{first}} z {{second}}"
+ },
+ "exploreIsUnavailable": {
+ "title": "Eksploracja jest niedostępna",
+ "embeddingsReindexing": {
+ "context": "Eksploracja będzie dostępna po zakończeniu ponownego indeksowania osadzenia śledzonych obiektów.",
+ "startingUp": "Uruchamianie…",
+ "estimatedTime": "Szacowany pozostały czas:",
+ "finishingShortly": "Zaraz się zakończy",
+ "step": {
+ "thumbnailsEmbedded": "Osadzone miniatury: ",
+ "descriptionsEmbedded": "Osadzone opisy: ",
+ "trackedObjectsProcessed": "Przetworzone śledzone obiekty: "
+ }
+ },
+ "downloadingModels": {
+ "context": "Frigate pobiera niezbędne modele osadzenia do obsługi funkcji wyszukiwania semantycznego. Może to potrwać kilka minut, w zależności od prędkości Twojego połączenia sieciowego.",
+ "setup": {
+ "visionModelFeatureExtractor": "Ekstraktor cech modelu wizyjnego",
+ "textModel": "Model tekstowy",
+ "visionModel": "Model wizyjny",
+ "textTokenizer": "Tokenizer tekstu"
+ },
+ "tips": {
+ "context": "Po pobraniu modeli warto ponownie zindeksować osadzenia śledzonych obiektów.",
+ "documentation": "Przeczytaj dokumentację"
+ },
+ "error": "Wystąpił błąd. Sprawdź logi Frigate."
+ }
+ },
+ "trackedObjectDetails": "Szczegóły śledzonego obiektu",
+ "type": {
+ "details": "szczegóły",
+ "snapshot": "zrzut ekranu",
+ "video": "wideo",
+ "object_lifecycle": "cykl życia obiektu"
+ },
+ "itemMenu": {
+ "downloadSnapshot": {
+ "aria": "Pobierz zrzut ekranu",
+ "label": "Pobierz zrzut ekranu"
+ },
+ "viewObjectLifecycle": {
+ "label": "Wyświetl cykl życia obiektu",
+ "aria": "Pokaż cykl życia obiektu"
+ },
+ "downloadVideo": {
+ "label": "Pobierz wideo",
+ "aria": "Pobierz wideo"
+ },
+ "findSimilar": {
+ "label": "Znajdź podobne",
+ "aria": "Znajdź podobne śledzone obiekty"
+ },
+ "submitToPlus": {
+ "label": "Prześlij do Frigate+",
+ "aria": "Prześlij do Frigate Plus"
+ },
+ "viewInHistory": {
+ "label": "Wyświetl w Historii",
+ "aria": "Wyświetl w Historii"
+ },
+ "deleteTrackedObject": {
+ "label": "Usuń ten śledzony obiekt"
+ }
+ },
+ "trackedObjectsCount_one": "{{count}} śledzony obiekt ",
+ "trackedObjectsCount_few": "{{count}} śledzone obiekty ",
+ "trackedObjectsCount_many": "{{count}} śledzonych obiektów ",
+ "noTrackedObjects": "Nie znaleziono śledzonych obiektów",
+ "dialog": {
+ "confirmDelete": {
+ "desc": "Usunięcie tego śledzonego obiektu usuwa zrzut ekranu, wszelkie zapisane osadzenia i wszystkie powiązane wpisy cyklu życia obiektu. Nagrany materiał tego śledzonego obiektu w widoku Historii NIE zostanie usunięty.tryb: {{effectiveRetainMode}}, więc to nagrywanie na żądanie zachowa tylko segmenty z {{effectiveRetainModeName}}."
+ },
+ "editLayout": {
+ "label": "Edytuj układ",
+ "group": {
+ "label": "Edytuj grupę kamer"
+ },
+ "exitEdit": "Zakończ edycję"
+ },
+ "muteCameras": {
+ "enable": "Wycisz wszystkie kamery",
+ "disable": "Wyłącz wyciszenie wszystkich kamer"
+ },
+ "camera": {
+ "disable": "Wyłącz kamerę",
+ "enable": "Włącz kamerę"
+ },
+ "autotracking": {
+ "enable": "Włącz automatyczne śledzenie",
+ "disable": "Wyłącz automatyczne śledzenie"
+ },
+ "detect": {
+ "disable": "Wyłącz wykrywanie",
+ "enable": "Włącz wykrywanie"
+ },
+ "audioDetect": {
+ "enable": "Włącz wykrywanie dźwięku",
+ "disable": "Wyłącz wykrywanie dźwięku"
+ },
+ "streamingSettings": "Ustawienia transmisji",
+ "history": {
+ "label": "Pokaż nagrania archiwalne"
+ }
+}
diff --git a/web/public/locales/pl/views/recording.json b/web/public/locales/pl/views/recording.json
new file mode 100644
index 000000000..dfaf0c33e
--- /dev/null
+++ b/web/public/locales/pl/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "filter": "Filtr",
+ "export": "Eksportuj",
+ "calendar": "Kalendarz",
+ "filters": "Filtry",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "Nie wybrano poprawnego zakresu czasu",
+ "endTimeMustAfterStartTime": "Czas końca musi być po czasie początku"
+ }
+ }
+}
diff --git a/web/public/locales/pl/views/search.json b/web/public/locales/pl/views/search.json
new file mode 100644
index 000000000..175b42a80
--- /dev/null
+++ b/web/public/locales/pl/views/search.json
@@ -0,0 +1,74 @@
+{
+ "search": "Szukaj",
+ "savedSearches": "Zapisane wyszukiwania",
+ "searchFor": "Szukaj {{inputValue}}",
+ "button": {
+ "clear": "Wyczyść wyszukiwanie",
+ "save": "Zapisz wyszukiwanie",
+ "delete": "Usuń zapisane wyszukiwanie",
+ "filterInformation": "Informacje o filtrze",
+ "filterActive": "Aktywne filtry"
+ },
+ "trackedObjectId": "ID śledzonego obiektu",
+ "filter": {
+ "label": {
+ "cameras": "Kamery",
+ "labels": "Etykiety",
+ "zones": "Strefy",
+ "sub_labels": "Podetykiety",
+ "min_score": "Min. wynik",
+ "max_score": "Maks. wynik",
+ "min_speed": "Min. prędkość",
+ "max_speed": "Maks. prędkość",
+ "recognized_license_plate": "Rozpoznana tablica rejestracyjna",
+ "has_clip": "Posiada klip",
+ "has_snapshot": "Posiada zrzut ekranu",
+ "after": "Po",
+ "search_type": "Typ wyszukiwania",
+ "time_range": "Zakres czasu",
+ "before": "Przed"
+ },
+ "searchType": {
+ "thumbnail": "Miniatura",
+ "description": "Opis"
+ },
+ "toast": {
+ "error": {
+ "beforeDateBeLaterAfter": "Data 'przed' musi być późniejsza niż data 'po'.",
+ "afterDatebeEarlierBefore": "Data 'po' musi być wcześniejsza niż data 'przed'.",
+ "minScoreMustBeLessOrEqualMaxScore": "'Min. wynik' musi być mniejszy lub równy 'maks. wynikowi'.",
+ "maxScoreMustBeGreaterOrEqualMinScore": "'Maks. wynik' musi być większy lub równy 'min. wynikowi'.",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "'Min. prędkość' musi być mniejsza lub równa 'maks. prędkości'.",
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "'Maks. prędkość' musi być większa lub równa 'min. prędkości'."
+ }
+ },
+ "tips": {
+ "title": "Jak używać filtrów tekstowych",
+ "desc": {
+ "text": "Filtry pomagają zawęzić wyniki wyszukiwania. Oto jak używać ich w polu wejściowym:",
+ "example": "Przykład: cameras:front_door label:person before:01012024 time_range:3:00PM-4:00PM ",
+ "step": "Ramki Ruchu
Czerwone ramki będą nakładane na obszary kadru, gdzie aktualnie wykrywany jest ruch
" + }, + "regions": { + "title": "Regiony", + "desc": "Pokaż ramkę regionu zainteresowania wysyłanego do detektora obiektów", + "tips": "Ramki Regionów
Jasnozielone ramki będą nakładane na obszary zainteresowania w kadrze, które są wysyłane do detektora obiektów.
" + }, + "objectShapeFilterDrawing": { + "document": "Przeczytaj dokumentację ", + "title": "Rysowanie Filtra Kształtu Obiektu", + "ratio": "Proporcja", + "score": "Wynik", + "tips": "Włącz tę opcję, aby narysować prostokąt na obrazie kamery w celu pokazania jego obszaru i proporcji. Te wartości mogą być następnie użyte do ustawienia parametrów filtra kształtu obiektu w twojej konfiguracji.", + "desc": "Narysuj prostokąt na obrazie, aby zobaczyć szczegóły obszaru i proporcji", + "area": "Obszar" + } + }, + "motionDetectionTuner": { + "title": "Tuner Wykrywania Ruchu", + "desc": { + "title": "Frigate używa wykrywania ruchu jako pierwszej linii sprawdzenia, czy w kadrze dzieje się coś wartego sprawdzenia przez detekcję obiektów.", + "documentation": "Przeczytaj Przewodnik Dostrajania Ruchu" + }, + "Threshold": { + "desc": "Wartość progowa określa, jak duża zmiana jasności piksela jest wymagana, aby uznać ją za ruch. Domyślnie: 30", + "title": "Próg" + }, + "contourArea": { + "title": "Obszar Konturu", + "desc": "Wartość obszaru konturu służy do określenia, które grupy zmienionych pikseli kwalifikują się jako ruch. Domyślnie: 10" + }, + "improveContrast": { + "desc": "Popraw kontrast dla ciemniejszych scen. Domyślnie: WŁĄCZONE", + "title": "Popraw Kontrast" + }, + "toast": { + "success": "Ustawienia ruchu zostały zapisane." + }, + "unsavedChanges": "Niezapisane zmiany w korektorze ruchu ({{camera}})" + }, + "users": { + "addUser": "Dodaj Użytkownika", + "updatePassword": "Aktualizuj Hasło", + "toast": { + "success": { + "createUser": "Użytkownik {{user}} został utworzony pomyślnie", + "deleteUser": "Użytkownik {{user}} został usunięty pomyślnie", + "updatePassword": "Hasło zaktualizowane pomyślnie.", + "roleUpdated": "Rola zaktualizowana dla {{user}}" + }, + "error": { + "setPasswordFailed": "Nie udało się zapisać hasła: {{errorMessage}}", + "createUserFailed": "Nie udało się utworzyć użytkownika: {{errorMessage}}", + "deleteUserFailed": "Nie udało się usunąć użytkownika: {{errorMessage}}", + "roleUpdateFailed": "Nie udało się zaktualizować roli: {{errorMessage}}" + } + }, + "table": { + "username": "Nazwa użytkownika", + "actions": "Akcje", + "role": "Rola", + "noUsers": "Nie znaleziono użytkowników.", + "changeRole": "Zmień rolę użytkownika", + "password": "Hasło", + "deleteUser": "Usuń użytkownika" + }, + "dialog": { + "form": { + "user": { + "title": "Nazwa użytkownika", + "desc": "Dozwolone są tylko litery, cyfry, kropki i podkreślenia.", + "placeholder": "Wprowadź nazwę użytkownika" + }, + "password": { + "strength": { + "strong": "Silne", + "title": "Siła hasła: ", + "weak": "Słabe", + "medium": "Średnie", + "veryStrong": "Bardzo silne" + }, + "match": "Hasła pasują", + "confirm": { + "placeholder": "Potwierdź hasło", + "title": "Potwierdź hasło" + }, + "title": "Hasło", + "placeholder": "Wprowadź hasło", + "notMatch": "Hasła nie pasują" + }, + "newPassword": { + "placeholder": "Wprowadź nowe hasło", + "title": "Nowe hasło", + "confirm": { + "placeholder": "Wprowadź ponownie nowe hasło" + } + }, + "usernameIsRequired": "Nazwa użytkownika jest wymagana", + "passwordIsRequired": "Hasło jest wymagane" + }, + "changeRole": { + "desc": "Aktualizuj uprawnienia dla {{username}}", + "roleInfo": { + "intro": "Wybierz właściwą rolę dla tego użytkownika:", + "admin": "Admin", + "adminDesc": "Pełny dostęp do wszystkich funkcjonalności.", + "viewerDesc": "Ograniczony wyłącznie do pulpitów na żywo, przeglądania, eksploracji i eksportu.", + "viewer": "Przeglądający" + }, + "title": "Zmień rolę użytkownika", + "select": "Wybierz role" + }, + "createUser": { + "title": "Utwórz nowego użytkownika", + "desc": "Dodaj nowe konto użytkownika i określ rolę dla dostępu do obszarów interfejsu Frigate.", + "usernameOnlyInclude": "Nazwa użytkownika może zawierać tylko litery, cyfry lub znak _", + "confirmPassword": "Proszę potwierdź swoje hasło" + }, + "deleteUser": { + "title": "Usuń użytkownika", + "desc": "Tej akcji nie można cofnąć. Spowoduje to trwałe usunięcie konta użytkownika i wszystkich powiązanych danych.", + "warn": "Czy na pewno chcesz usunąć {{username}}?" + }, + "passwordSetting": { + "updatePassword": "Aktualizuj hasło dla {{username}}", + "setPassword": "Ustaw hasło", + "desc": "Utwórz silne hasło, aby zabezpieczyć to konto.", + "cannotBeEmpty": "Hasło nie może być puste", + "doNotMatch": "Hasła nie pasują do siebie" + } + }, + "management": { + "title": "Zarządzanie Użytkownikami", + "desc": "Zarządzaj kontami użytkowników tej instancji Frigate." + }, + "title": "Użytkownicy" + }, + "notification": { + "title": "Powiadomienia", + "notificationSettings": { + "title": "Ustawienia powiadomień", + "desc": "Frigate może wysyłać natywne powiadomienia push na twoje urządzenie, gdy działa w przeglądarce lub jest zainstalowany jako PWA.", + "documentation": "Przeczytaj dokumentację" + }, + "notificationUnavailable": { + "title": "Powiadomienia niedostępne", + "desc": "Powiadomienia push w przeglądarce wymagają bezpiecznego kontekstu (https://…). To jest ograniczenie przeglądarki. Uzyskaj dostęp do Frigate przez bezpieczne połączenie, aby korzystać z powiadomień.",
+ "documentation": "Przeczytaj dokumentację"
+ },
+ "globalSettings": {
+ "title": "Ustawienia globalne",
+ "desc": "Tymczasowo wstrzymaj powiadomienia dla określonych kamer na wszystkich zarejestrowanych urządzeniach."
+ },
+ "suspendTime": {
+ "12hours": "Zawieś na 12 godzin",
+ "24hours": "Zawieś na 24 godziny",
+ "untilRestart": "Zawieś do restartu",
+ "1hour": "Zawieś na 1 godzinę",
+ "5minutes": "Zawieś na 5 minut",
+ "10minutes": "Zawieś na 10 minut",
+ "30minutes": "Zawieś na 30 minut",
+ "suspend": "Wstrzymaj"
+ },
+ "cancelSuspension": "Anuluj zawieszenie",
+ "toast": {
+ "error": {
+ "registerFailed": "Nie udało się zapisać rejestracji powiadomień."
+ },
+ "success": {
+ "settingSaved": "Ustawienia powiadomień zostały zapisane.",
+ "registered": "Rejestracja powiadomień zakończona powodzeniem. Przed wysłaniem jakichkolwiek powiadomień (włącznie z testowym) wymagane jest ponowne uruchomienie Frigate."
+ }
+ },
+ "email": {
+ "title": "Email",
+ "placeholder": "np. przyklad@email.com",
+ "desc": "Wymagany jest prawidłowy adres email, który będzie używany do powiadamiania Cię w przypadku problemów z usługą push."
+ },
+ "cameras": {
+ "title": "Kamery",
+ "noCameras": "Brak dostępnych kamer",
+ "desc": "Wybierz kamery, dla których chcesz włączyć powiadomienia."
+ },
+ "deviceSpecific": "Ustawienia specyficzne dla urządzenia",
+ "registerDevice": "Zarejestruj to urządzenie",
+ "active": "Powiadomienia aktywne",
+ "suspended": "Powiadomienia zawieszone {{time}}",
+ "unregisterDevice": "Wyrejestruj to urządzenie",
+ "sendTestNotification": "Wyślij testowe powiadomienie",
+ "unsavedRegistrations": "Niezapisane ustawienia rejestracji powiadomień",
+ "unsavedChanges": "Niezapisane zmiany ustawień powiadomień"
+ },
+ "frigatePlus": {
+ "title": "Ustawienia Frigate+",
+ "apiKey": {
+ "title": "Klucz API Frigate+",
+ "validated": "Klucz API Frigate+ został wykryty i zweryfikowany",
+ "plusLink": "Dowiedz się więcej o Frigate+",
+ "notValidated": "Klucz API Frigate+ nie został wykryty lub nie został zweryfikowany",
+ "desc": "Klucz API Frigate+ umożliwia integrację z usługą Frigate+."
+ },
+ "snapshotConfig": {
+ "title": "Konfiguracja zrzutów ekranu",
+ "documentation": "Przeczytaj dokumentację",
+ "desc": "Aby wysyłać dane do Frigate+, w konfiguracji muszą być włączone zarówno zwykłe zrzuty ekranu, jak i zrzuty typu clean_copy.",
+ "table": {
+ "snapshots": "Zrzuty ekranu",
+ "cleanCopySnapshots": "Zrzuty ekranu clean_copy",
+ "camera": "Kamera"
+ },
+ "cleanCopyWarning": "Niektóre kamery mają włączone zrzuty ekranu, ale mają wyłączoną funkcję czystej kopii. Musisz włączyć clean_copy w konfiguracji zrzutów ekranu, aby móc przesyłać obrazy z tych kamer do Frigate+."
+ },
+ "modelInfo": {
+ "title": "Informacje o modelu",
+ "modelType": "Typ modelu",
+ "trainDate": "Data treningu",
+ "supportedDetectors": "Wspierane detektory",
+ "dimensions": "Wymiary",
+ "cameras": "Kamery",
+ "loading": "Ładowanie informacji o modelu…",
+ "error": "Nie udało się załadować informacji o modelu",
+ "availableModels": "Dostępne modele",
+ "loadingAvailableModels": "Ładowanie dostępnych modeli…",
+ "baseModel": "Model bazowy",
+ "modelSelect": "Tutaj możesz wybrać swoje dostępne modele w Frigate+. Pamiętaj, że można wybrać tylko modele kompatybilne z Twoją aktualną konfiguracją detektora.",
+ "plusModelType": {
+ "baseModel": "Model bazowy",
+ "userModel": "Dostrojony"
+ }
+ },
+ "toast": {
+ "success": "Ustawienia Frigate+ zostały zapisane. Uruchom ponownie Frigate, aby zastosować zmiany.",
+ "error": "Nie udało się zapisać zmian konfiguracji: {{errorMessage}}"
+ },
+ "restart_required": "Wymagane ponowne uruchomienie (Zmieniony model Frigate+)",
+ "unsavedChanges": "Niezapisane zmiany ustawień Frigate+"
+ },
+ "enrichments": {
+ "faceRecognition": {
+ "title": "Rozpoznawanie twarzy",
+ "desc": "Rozpoznawanie twarzy pozwala na przypisywanie imion osobom, a gdy ich twarz zostanie rozpoznana, Frigate przypisze imię osoby jako sub label. Ta informacja jest wyświetlana w interfejsie, filtrach oraz powiadomieniach.",
+ "readTheDocumentation": "Przeczytaj Dokumentację",
+ "modelSize": {
+ "label": "Rozmiar modelu",
+ "desc": "Rozmiar modelu używanego do rozpoznawania twarzy.",
+ "small": {
+ "title": "mały",
+ "desc": "Użycie opcji mały wykorzystuje model osadzeń twarzy FaceNet, który działa wydajnie na większości procesorów."
+ },
+ "large": {
+ "title": "duży",
+ "desc": "Użycie opcji duży wykorzystuje model osadzeń twarzy ArcFace i automatycznie uruchomi się na karcie graficznej, jeśli jest dostępna."
+ }
+ }
+ },
+ "title": "Ustawienia wzbogacania",
+ "unsavedChanges": "Niezapisane zmiany ustawień wzbogacania",
+ "birdClassification": {
+ "title": "Klasyfikacja ptaków",
+ "desc": "Klasyfikacja ptaków identyfikuje znane gatunki przy użyciu skwantyzowanego modelu Tensorflow. Gdy rozpoznany zostanie znany ptak, jego zwyczajowa nazwa zostanie dodana jako sub_label. Ta informacja jest wyświetlana w interfejsie, filtrach oraz powiadomieniach."
+ },
+ "semanticSearch": {
+ "title": "Wyszukiwanie semantyczne",
+ "desc": "Wyszukiwanie semantyczne w Frigate pozwala na znajdowanie śledzonych obiektów w elementach przeglądowych za pomocą samego obrazu, opisu tekstowego zdefiniowanego przez użytkownika lub automatycznie wygenerowanego.",
+ "readTheDocumentation": "Przeczytaj Dokumentację",
+ "reindexNow": {
+ "label": "Reindeksuj teraz",
+ "desc": "Reindeksowanie zregeneruje osadzenia dla wszystkich śledzonych obiektów. Ten proces działa w tle i może maksymalnie obciążyć procesor oraz zająć sporo czasu w zależności od liczby śledzonych obiektów.",
+ "confirmTitle": "Potwierdź reindeksowanie",
+ "confirmDesc": "Czy na pewno chcesz reindeksować wszystkie osadzenia śledzonych obiektów? Ten proces będzie działał w tle, ale może maksymalnie obciążyć procesor i zająć sporo czasu. Postęp możesz śledzić na stronie Eksploruj.",
+ "confirmButton": "Reindeksuj",
+ "success": "Reindeksowanie zostało pomyślnie uruchomione.",
+ "alreadyInProgress": "Reindeksowanie już trwa.",
+ "error": "Nie udało się uruchomić reindeksowania: {{errorMessage}}"
+ },
+ "modelSize": {
+ "label": "Rozmiar modelu",
+ "desc": "Rozmiar modelu używanego do osadzeń wyszukiwania semantycznego.",
+ "small": {
+ "title": "mały",
+ "desc": "Użycie opcji mały wykorzystuje skwantyzowaną wersję modelu, która zużywa mniej pamięci RAM i działa szybciej na procesorze przy zaniedbywalnej różnicy w jakości osadzeń."
+ },
+ "large": {
+ "title": "duży",
+ "desc": "Użycie opcji duży wykorzystuje pełny model Jina i automatycznie uruchomi się na karcie graficznej, jeśli jest dostępna."
+ }
+ }
+ },
+ "licensePlateRecognition": {
+ "title": "Rozpoznawanie tablic rejestracyjnych",
+ "desc": "Frigate może rozpoznawać tablice rejestracyjne na pojazdach i automatycznie dodawać wykryte znaki do pola recognized_license_plate lub znaną nazwę jako sub_label do obiektów typu samochód. Typowy przypadek użycia to odczytywanie tablic rejestracyjnych samochodów wjeżdżających na podjazd lub przejeżdżających ulicą.",
+ "readTheDocumentation": "Przeczytaj Dokumentację"
+ },
+ "restart_required": "Wymagany restart (zmieniono ustawienia wzbogacania)",
+ "toast": {
+ "success": "Ustawienia wzbogacania zostały zapisane. Uruchom ponownie Frigate, aby zastosować zmiany.",
+ "error": "Nie udało się zapisać zmian konfiguracji: {{errorMessage}}"
+ }
+ }
+}
diff --git a/web/public/locales/pl/views/system.json b/web/public/locales/pl/views/system.json
new file mode 100644
index 000000000..1d3003fac
--- /dev/null
+++ b/web/public/locales/pl/views/system.json
@@ -0,0 +1,180 @@
+{
+ "documentTitle": {
+ "cameras": "Statystyki kamer - Frigate",
+ "storage": "Statystyki Magazynowania - Frigate",
+ "general": "Statystyki Ogólne - Frigate",
+ "enrichments": "Statystyki Wzbogacania - Frigate",
+ "logs": {
+ "frigate": "Logi Frigate - Frigate",
+ "go2rtc": "Logi Go2RTC - Frigate",
+ "nginx": "Logi Nginx - Frigate"
+ }
+ },
+ "general": {
+ "hardwareInfo": {
+ "gpuInfo": {
+ "vainfoOutput": {
+ "title": "Wynik Vainfo",
+ "returnCode": "Kod zwrotny: {{code}}",
+ "processOutput": "Wynik procesu:",
+ "processError": "Błąd procesu:"
+ },
+ "nvidiaSMIOutput": {
+ "title": "Wynik Nvidia SMI",
+ "name": "Nazwa: {{name}}",
+ "driver": "Sterownik: {{driver}}",
+ "cudaComputerCapability": "Możliwości obliczeniowe CUDA: {{cuda_compute}}",
+ "vbios": "Informacje VBios: {{vbios}}"
+ },
+ "closeInfo": {
+ "label": "Zamknij informacje o GPU"
+ },
+ "copyInfo": {
+ "label": "Kopiuj informacje o GPU"
+ },
+ "toast": {
+ "success": "Skopiowano informacje o GPU do schowka"
+ }
+ },
+ "title": "Informacje o sprzęcie",
+ "gpuEncoder": "Enkoder GPU",
+ "gpuDecoder": "Dekoder GPU",
+ "gpuMemory": "Pamięć GPU",
+ "gpuUsage": "Użycie GPU",
+ "npuUsage": "Użycie NPU",
+ "npuMemory": "Pamięć NPU"
+ },
+ "title": "Ogólne",
+ "detector": {
+ "title": "Detektory",
+ "inferenceSpeed": "Szybkość wnioskowania detektora",
+ "cpuUsage": "Użycie CPU przez detektor",
+ "memoryUsage": "Użycie pamięci przez detektor",
+ "temperature": "Temperatura detektora"
+ },
+ "otherProcesses": {
+ "title": "Inne procesy",
+ "processCpuUsage": "Użycie CPU przez proces",
+ "processMemoryUsage": "Użycie pamięci przez proces"
+ }
+ },
+ "cameras": {
+ "info": {
+ "stream": "Strumień {{idx}}",
+ "cameraProbeInfo": "{{camera}} Informacje o sondowaniu kamery",
+ "streamDataFromFFPROBE": "Dane strumienia są pozyskiwane za pomocą ffprobe.",
+ "video": "Wideo:",
+ "codec": "Kodek:",
+ "resolution": "Rozdzielczość:",
+ "fps": "FPS:",
+ "unknown": "Nieznany",
+ "audio": "Audio:",
+ "error": "Błąd: {{error}}",
+ "tips": {
+ "title": "Informacje o sondowaniu kamery"
+ },
+ "fetching": "Pobieranie danych kamery",
+ "aspectRatio": "proporcje"
+ },
+ "toast": {
+ "success": {
+ "copyToClipboard": "Skopiowano dane sondowania do schowka."
+ },
+ "error": {
+ "unableToProbeCamera": "Nie można sondować kamery: {{errorMessage}}"
+ }
+ },
+ "title": "Kamery",
+ "overview": "Przegląd",
+ "framesAndDetections": "Klatki / Detekcje",
+ "label": {
+ "camera": "kamera",
+ "detect": "wykryj",
+ "skipped": "pominięte",
+ "ffmpeg": "FFmpeg",
+ "capture": "przechwytywanie",
+ "overallSkippedDetectionsPerSecond": "łączna liczba pominiętych detekcji na sekundę",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} liczba pominiętych detekcji na sekundę",
+ "overallFramesPerSecond": "łączna liczba klatek na sekundę",
+ "overallDetectionsPerSecond": "łączna liczba detekcji na sekundę",
+ "cameraCapture": "{{camName}} przechwytywanie",
+ "cameraDetect": "{{camName}} detekcja",
+ "cameraFramesPerSecond": "{{camName}} liczba klatek na sekundę",
+ "cameraDetectionsPerSecond": "{{camName}} liczba detekcji na sekundę",
+ "cameraFfmpeg": "{{camName}} FFmpeg"
+ }
+ },
+ "storage": {
+ "cameraStorage": {
+ "unused": {
+ "title": "Niewykorzystane",
+ "tips": "Ta wartość może niedokładnie przedstawiać wolne miejsce dostępne dla Frigate, jeśli masz inne pliki przechowywane na dysku poza nagraniami Frigate. Frigate nie śledzi wykorzystania magazynu poza swoimi nagraniami."
+ },
+ "title": "Magazyn kamery",
+ "camera": "Kamera",
+ "storageUsed": "Wykorzystany magazyn",
+ "percentageOfTotalUsed": "Procent całości",
+ "bandwidth": "Przepustowość",
+ "unusedStorageInformation": "Informacja o niewykorzystanym magazynie"
+ },
+ "title": "Magazyn",
+ "overview": "Przegląd",
+ "recordings": {
+ "title": "Nagrania",
+ "tips": "Ta wartość reprezentuje całkowite miejsce zajmowane przez nagrania w bazie danych Frigate. Frigate nie śledzi wykorzystania magazynu dla wszystkich plików na twoim dysku.",
+ "earliestRecording": "Najwcześniejsze dostępne nagranie:"
+ }
+ },
+ "logs": {
+ "copy": {
+ "error": "Nie udało się skopiować logów do schowka",
+ "label": "Kopiuj do Schowka",
+ "success": "Skopiowano logi do schowka"
+ },
+ "download": {
+ "label": "Pobierz Logi"
+ },
+ "type": {
+ "label": "Typ",
+ "timestamp": "Znacznik czasu",
+ "tag": "Tag",
+ "message": "Wiadomość"
+ },
+ "tips": "Logi są przesyłane strumieniowo z serwera",
+ "toast": {
+ "error": {
+ "fetchingLogsFailed": "Błąd pobierania logów: {{errorMessage}}",
+ "whileStreamingLogs": "Błąd podczas strumieniowania logów: {{errorMessage}}"
+ }
+ }
+ },
+ "title": "System",
+ "metrics": "Metryki systemowe",
+ "lastRefreshed": "Ostatnie odświeżenie: ",
+ "stats": {
+ "ffmpegHighCpuUsage": "{{camera}} ma wysokie użycie CPU przez FFmpeg ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} ma wysokie użycie CPU przez detekcję ({{detectAvg}}%)",
+ "healthy": "System jest sprawny",
+ "reindexingEmbeddings": "Ponowne indeksowanie osadzeń ({{processed}}% ukończone)",
+ "detectIsSlow": "{{detect}} jest wolne ({{speed}} ms)",
+ "detectIsVerySlow": "{{detect}} jest bardzo wolne ({{speed}} ms)",
+ "cameraIsOffline": "{{camera}} jest niedostępna"
+ },
+ "enrichments": {
+ "title": "Wzbogacenia",
+ "infPerSecond": "Wnioskowania na sekundę",
+ "embeddings": {
+ "image_embedding_speed": "Szybkość osadzania obrazów",
+ "face_embedding_speed": "Szybkość osadzania twarzy",
+ "plate_recognition_speed": "Szybkość rozpoznawania tablic rejestracyjnych",
+ "text_embedding_speed": "Szybkość osadzania tekstu",
+ "face_recognition_speed": "Szybkość rozpoznawania twarzy",
+ "image_embedding": "Osadzenie obrazu",
+ "plate_recognition": "Rozpoznawanie rejestracji samochodowych",
+ "yolov9_plate_detection_speed": "Prędkość detekcji rejestracji samochodowych YOLOv9",
+ "yolov9_plate_detection": "Detekcja rejestracji samochodowych YOLOv9",
+ "text_embedding": "Osadzenie tekstu",
+ "face_recognition": "Rozpoznawanie twarzy"
+ }
+ }
+}
diff --git a/web/public/locales/pt/audio.json b/web/public/locales/pt/audio.json
new file mode 100644
index 000000000..36b414716
--- /dev/null
+++ b/web/public/locales/pt/audio.json
@@ -0,0 +1,429 @@
+{
+ "babbling": "Balbuciar",
+ "speech": "Discurso",
+ "whoop": "Grito de Alegria",
+ "bellow": "Abaixo",
+ "yell": "Gritar",
+ "whispering": "Sussurrar",
+ "child_singing": "Criança a Cantar",
+ "crying": "Choro",
+ "singing": "Canto",
+ "laughter": "Rir",
+ "breathing": "Respirar",
+ "applause": "Aplausos",
+ "meow": "Miau",
+ "run": "Correr",
+ "sheep": "Ovelha",
+ "motorcycle": "Motociclo",
+ "car": "Carro",
+ "cat": "Gato",
+ "horse": "Cavalo",
+ "bus": "Autocarro",
+ "boat": "Barco",
+ "bicycle": "Bicicleta",
+ "skateboard": "Skate",
+ "door": "Porta",
+ "bird": "Pássaro",
+ "train": "Comboio",
+ "dog": "Cão",
+ "mantra": "Mantra",
+ "humming": "Cantarolar",
+ "sigh": "Suspiro",
+ "grunt": "Grunhido",
+ "whistling": "Assobiar",
+ "wheeze": "Chiadeira",
+ "gasp": "Ofegar",
+ "cough": "Tosse",
+ "sneeze": "Espirro",
+ "footsteps": "Passos",
+ "chewing": "Mastigar",
+ "biting": "Morder",
+ "gargling": "Gargarejar",
+ "stomach_rumble": "Ronco de Estômago",
+ "burping": "Arroto",
+ "hiccup": "Solavanco",
+ "fart": "Pum",
+ "hands": "Mãos",
+ "finger_snapping": "Estalar os Dedos",
+ "clapping": "Palmas",
+ "heartbeat": "Batimento Cardíaco",
+ "heart_murmur": "Sopro Cardíaco",
+ "cheering": "Aplausos Entusiásticos",
+ "chatter": "Conversar",
+ "crowd": "Multidão",
+ "snoring": "Ressonar",
+ "choir": "Coro",
+ "yodeling": "Iodel",
+ "chant": "Cântico",
+ "synthetic_singing": "Canto Sintético",
+ "rapping": "Rap",
+ "groan": "Gemido",
+ "snicker": "Risinho",
+ "animal": "Animal",
+ "pets": "Animais de Estimação",
+ "bark": "Latido",
+ "howl": "Uivar",
+ "bow_wow": "Au-Au",
+ "growling": "Rosnar",
+ "whimper_dog": "Choro de Cão",
+ "pig": "Porco",
+ "goat": "Cabra",
+ "fowl": "Aves de Capoeira",
+ "chicken": "Galinha",
+ "turkey": "Peru",
+ "duck": "Pato",
+ "quack": "Quá-Quá",
+ "goose": "Ganso",
+ "wild_animals": "Animais Selvagens",
+ "pigeon": "Pombo",
+ "dogs": "Cães",
+ "insect": "Inseto",
+ "cricket": "Grilo",
+ "mosquito": "Mosquito",
+ "fly": "Mosca",
+ "frog": "Rã",
+ "snake": "Cobra",
+ "rattle": "Chocalhar",
+ "music": "Música",
+ "musical_instrument": "Instrumento Musical",
+ "banjo": "Banjo",
+ "keyboard": "Teclado",
+ "piano": "Piano",
+ "organ": "Órgão",
+ "synthesizer": "Sintetizador",
+ "tambourine": "Pandeireta",
+ "clarinet": "Clarinete",
+ "harp": "Harpa",
+ "psychedelic_rock": "Rock Psicadélico",
+ "waterfall": "Cascata",
+ "ocean": "Oceano",
+ "fire": "Fogo",
+ "ship": "Navio",
+ "car_alarm": "Alarme de Carro",
+ "race_car": "Carro de Corridas",
+ "truck": "Camião",
+ "ice_cream_truck": "Carrinha de Gelados",
+ "emergency_vehicle": "Veículo de Emergência",
+ "police_car": "Carro da Polícia",
+ "ambulance": "Ambulância",
+ "helicopter": "Helicóptero",
+ "engine": "Motor",
+ "coin": "Moeda",
+ "scissors": "Tesoura",
+ "electric_shaver": "Barbeador Elétrico",
+ "computer_keyboard": "Teclado de Computador",
+ "alarm": "Alarme",
+ "telephone": "Telefone",
+ "siren": "Sirene",
+ "smoke_detector": "Detetor de Fumo",
+ "fire_alarm": "Alarme de Incêndio",
+ "whistle": "Assobio",
+ "clock": "Relógio",
+ "tools": "Ferramentas",
+ "camera": "Câmara",
+ "chink": "Estilhaçar",
+ "sound_effect": "Efeito Sonoro",
+ "static": "Estática",
+ "pink_noise": "Ruído Rosa",
+ "television": "Televisão",
+ "scream": "Grito Agudo",
+ "glass": "Vidro",
+ "wood": "Madeira",
+ "crack": "Rachar",
+ "silence": "Silêncio",
+ "steam": "Vapor",
+ "progressive_rock": "Rock Progressivo",
+ "white_noise": "Ruído Branco",
+ "maraca": "Maraca",
+ "percussion": "Percussão",
+ "rats": "Ratos",
+ "oink": "Oinc",
+ "waves": "Ondas",
+ "shatter": "Quebrar",
+ "radio": "Rádio",
+ "splinter": "Lasca",
+ "owl": "Coruja",
+ "mouse": "Rato",
+ "vehicle": "Veículo",
+ "hair_dryer": "Secador de cabelo",
+ "toothbrush": "Escova de dentes",
+ "sink": "Pia",
+ "blender": "Liquidificador",
+ "pant": "Ofegar",
+ "snort": "Espirrar pelo Nariz",
+ "throat_clearing": "Limpar a Garganta",
+ "sniff": "Cheirar",
+ "shuffle": "Embaralhar",
+ "children_playing": "Crianças a Brincar",
+ "purr": "Ronronar",
+ "livestock": "Gado",
+ "cattle": "Gado Bovino",
+ "cock_a_doodle_doo": "Cucurucu",
+ "coo": "Arrulhar",
+ "flapping_wings": "Bater de Asas",
+ "crow": "Corvo",
+ "hoot": "Piar",
+ "mandolin": "Mandolim",
+ "whale_vocalization": "Vocalização de Baleia",
+ "sitar": "Sitar",
+ "plucked_string_instrument": "Instrumento de Cordas Dedilhado",
+ "croak": "Coaxar",
+ "guitar": "Guitarra",
+ "electric_guitar": "Guitarra Elétrica",
+ "bass_guitar": "Baixo Elétrico",
+ "acoustic_guitar": "Guitarra Acústica",
+ "ukulele": "Ukulele",
+ "tapping": "Tocar com os Dedos",
+ "strum": "Dedilhar",
+ "drum_kit": "Bateria (Kit)",
+ "gong": "Gongo",
+ "orchestra": "Orquestra",
+ "flute": "Flauta",
+ "saxophone": "Saxofone",
+ "harmonica": "Harmónica",
+ "wind_instrument": "Instrumento de Sopro",
+ "trumpet": "Trompete",
+ "violin": "Violino",
+ "cello": "Violoncelo",
+ "double_bass": "Contrabaixo",
+ "church_bell": "Sino de Igreja",
+ "bicycle_bell": "Sino de Bicicleta",
+ "bagpipes": "Gaita de Foles",
+ "cowbell": "Sino de Vaca",
+ "hiss": "Sibilar",
+ "caterwaul": "Miado Forte",
+ "clip_clop": "Cavalgar",
+ "neigh": "Relincho",
+ "moo": "Mugido",
+ "gobble": "Gluglu (Peru)",
+ "cluck": "Cacarejar",
+ "caw": "Grasnido",
+ "chirp": "Piar (Passarinho)",
+ "yip": "Latido Agudo",
+ "bleat": "Balar",
+ "honk": "Buzina",
+ "roaring_cats": "Gatos a Ruge",
+ "roar": "Rugido",
+ "squawk": "Chilrear Estridente",
+ "patter": "Tamborilar",
+ "buzz": "Zumbido",
+ "steel_guitar": "Guitarra Steel",
+ "zither": "Cítara",
+ "electric_piano": "Piano Elétrico",
+ "electronic_organ": "Órgão Eletrónico",
+ "hammond_organ": "Órgão Hammond",
+ "sampler": "Sampler",
+ "harpsichord": "Cravo (Instrumento)",
+ "drum_machine": "Máquina de Ritmos",
+ "drum": "Tambor",
+ "snare_drum": "Tarola",
+ "rimshot": "Tocada de Caixa (Rimshot)",
+ "drum_roll": "Rufar de Tambor",
+ "bass_drum": "Bombo",
+ "timpani": "Tímpano",
+ "tabla": "Tabla",
+ "cymbal": "Prato de Bateria",
+ "hi_hat": "Prato Hi-Hat",
+ "wood_block": "Bloco de Madeira",
+ "tubular_bells": "Sinos Tubulares",
+ "mallet_percussion": "Percussão com Baquetas",
+ "glockenspiel": "Glockenspiel",
+ "electronic_dance_music": "Música de Dança Eletrónica",
+ "ambient_music": "Música Ambiente",
+ "trance_music": "Música Trance",
+ "music_of_latin_america": "Música da América Latina",
+ "salsa_music": "Música Salsa",
+ "flamenco": "Flamenco",
+ "blues": "Blues",
+ "music_for_children": "Música para Crianças",
+ "new-age_music": "Música New Age",
+ "vocal_music": "Música Vocal",
+ "a_capella": "A Capella",
+ "music_of_africa": "Música de África",
+ "lullaby": "Canção de Embalar",
+ "video_game_music": "Música de Videogame",
+ "christmas_music": "Música de Natal",
+ "dance_music": "Música de Dança",
+ "wedding_music": "Música de Casamento",
+ "happy_music": "Música Alegre",
+ "sad_music": "Música Triste",
+ "tender_music": "Música Suave",
+ "exciting_music": "Música Excitante",
+ "scary_music": "Música Assustadora",
+ "wind": "Vento",
+ "rustling_leaves": "Folhas a Mexer",
+ "wind_noise": "Ruído do Vento",
+ "thunderstorm": "Trovoada",
+ "thunder": "Trovão",
+ "water": "Água",
+ "rain": "Chuva",
+ "raindrop": "Gota de Chuva",
+ "rain_on_surface": "Chuva a Cair na Superfície",
+ "stream": "Torrente",
+ "gurgling": "Gorgolejar",
+ "train_whistle": "Apito de Comboio",
+ "train_horn": "Buzina de Comboio",
+ "railroad_car": "Carruagem Ferroviária",
+ "train_wheels_squealing": "Rodas de Comboio a Ranger",
+ "subway": "Metro",
+ "aircraft": "Aeronave",
+ "aircraft_engine": "Motor de Aeronave",
+ "jet_engine": "Motor a Jato",
+ "propeller": "Hélice",
+ "jackhammer": "Britadeira",
+ "sawing": "Serrar",
+ "filing": "Lixar",
+ "power_tool": "Ferramenta Elétrica",
+ "sanding": "Lixar Madeira",
+ "drill": "Berbequim",
+ "explosion": "Explosão",
+ "gunshot": "Disparo de Arma",
+ "machine_gun": "Metralhadora",
+ "fusillade": "Rajada de Disparos",
+ "artillery_fire": "Fogo de Artilharia",
+ "cap_gun": "Pistola de Brincar",
+ "fireworks": "Fogo de Artifício",
+ "firecracker": "Bombinha",
+ "burst": "Ruptura",
+ "typing": "Digitar",
+ "angry_music": "Música Zangada",
+ "typewriter": "Máquina de Escrever",
+ "marimba": "Marimba",
+ "vibraphone": "Vibrafone",
+ "steelpan": "Tambor de aço",
+ "brass_instrument": "Instrumento de Metal",
+ "french_horn": "Trompa",
+ "trombone": "Trombone",
+ "heavy_metal": "Heavy Metal",
+ "bowed_string_instrument": "Instrumento de Cordas com Arco",
+ "string_section": "Secção de Cordas",
+ "bell": "Sino",
+ "jingle_bell": "Sino de Natal",
+ "tuning_fork": "Diapasão",
+ "wind_chime": "Sino de Vento",
+ "pizzicato": "Pizzicato",
+ "chime": "Carrilhão",
+ "accordion": "Acordeão",
+ "didgeridoo": "Didgeridoo",
+ "theremin": "Theremin",
+ "singing_bowl": "Tigela Sonora",
+ "scratching": "Raspar",
+ "hip_hop_music": "Música Hip-Hop",
+ "beatboxing": "Beatbox",
+ "rock_music": "Música Rock",
+ "punk_rock": "Punk Rock",
+ "grunge": "Grunge",
+ "rock_and_roll": "Rock and Roll",
+ "rhythm_and_blues": "Rhythm and Blues",
+ "pop_music": "Música Pop",
+ "soul_music": "Música Soul",
+ "reggae": "Reggae",
+ "country": "Country",
+ "bluegrass": "Bluegrass",
+ "funk": "Funk",
+ "folk_music": "Música Folclórica",
+ "swing_music": "Música Swing",
+ "middle_eastern_music": "Música do Médio Oriente",
+ "jazz": "Jazz",
+ "disco": "Disco",
+ "classical_music": "Música Clássica",
+ "opera": "Ópera",
+ "electronic_music": "Música Eletrónica",
+ "house_music": "Música House",
+ "techno": "Techno",
+ "dubstep": "Dubstep",
+ "drum_and_bass": "Drum and Bass",
+ "electronica": "Eletrónica",
+ "afrobeat": "Afrobeat",
+ "christian_music": "Música Cristã",
+ "gospel_music": "Música Gospel",
+ "music_of_asia": "Música da Ásia",
+ "carnatic_music": "Música Carnática",
+ "music_of_bollywood": "Música de Bollywood",
+ "ska": "Ska",
+ "traditional_music": "Música Tradicional",
+ "independent_music": "Música Independente",
+ "song": "Canção",
+ "background_music": "Música de Fundo",
+ "theme_music": "Música de Tema",
+ "jingle": "Tilintar",
+ "soundtrack_music": "Música de Banda Sonora",
+ "air_brake": "Travão de Ar",
+ "air_horn": "Buzina de Ar",
+ "reversing_beeps": "Bip de Marcha-Atrás",
+ "crackle": "Estalidos",
+ "traffic_noise": "Ruído de Trânsito",
+ "power_windows": "Janelas Elétricas",
+ "skidding": "Derrapar",
+ "tire_squeal": "Guinada de Pneus",
+ "car_passing_by": "Carro a Passar",
+ "sailboat": "Veleiro",
+ "rowboat": "Barco a Remos",
+ "motorboat": "Barco a Motor",
+ "motor_vehicle": "Veículo Motorizado",
+ "fire_engine": "Carro dos Bombeiros",
+ "toot": "Buzina Curta",
+ "rail_transport": "Transporte Ferroviário",
+ "accelerating": "Aceleração",
+ "dental_drill's_drill": "Broca Dentária",
+ "lawn_mower": "Corta-relva",
+ "chainsaw": "Motosserra",
+ "medium_engine": "Motor Médio",
+ "engine_knocking": "Batidas do Motor",
+ "engine_starting": "Partida de Motor",
+ "idling": "Ao Ralenti",
+ "slam": "Bater Forte",
+ "light_engine": "Motor Leve",
+ "sliding_door": "Porta de Correr",
+ "knock": "Tocar à Porta",
+ "fixed-wing_aircraft": "Aeronave de Asa Fixa",
+ "doorbell": "Campainha de Porta",
+ "ding-dong": "Ding-Dong",
+ "heavy_engine": "Motor Pesado",
+ "squeak": "Ranger",
+ "cupboard_open_or_close": "Armário a Abrir ou Fechar",
+ "drawer_open_or_close": "Gaveta a Abrir ou Fechar",
+ "tap": "Toque",
+ "dishes": "Pratos",
+ "cutlery": "Talheres",
+ "chopping": "Cortar",
+ "frying": "Fritar",
+ "microwave_oven": "Forno Micro-ondas",
+ "water_tap": "Torneira",
+ "bathtub": "Banheira",
+ "keys_jangling": "Chaves a Tilintar",
+ "vacuum_cleaner": "Aspirador",
+ "zipper": "Fecho Éclair",
+ "shuffling_cards": "Embaralhar Cartas",
+ "toilet_flush": "Descarga de Sanita",
+ "electric_toothbrush": "Escova de Dentes Elétrica",
+ "writing": "Escrever",
+ "telephone_bell_ringing": "Campainha de Telefone",
+ "ringtone": "Toque de Telemóvel",
+ "telephone_dialing": "Discar Telefone",
+ "dial_tone": "Tom de Marcações",
+ "busy_signal": "Sinal de Ocupado",
+ "steam_whistle": "Apito a Vapor",
+ "mechanisms": "Mecanismos",
+ "ratchet": "Catraca",
+ "civil_defense_siren": "Sirene de Defesa Civil",
+ "buzzer": "Campainha",
+ "foghorn": "Buzina de Nevoeiro",
+ "alarm_clock": "Despertador",
+ "gears": "Engrenagens",
+ "pulleys": "Polias",
+ "sewing_machine": "Máquina de Costura",
+ "mechanical_fan": "Ventoinha Mecânica",
+ "air_conditioning": "Ar Condicionado",
+ "cash_register": "Caixa Registadora",
+ "printer": "Impressora",
+ "tick": "Tique-taque",
+ "tick-tock": "Tique-Taque",
+ "single-lens_reflex_camera": "Câmara Reflex de Lente Única",
+ "hammer": "Martelo",
+ "boom": "Estrondo",
+ "chop": "Corte",
+ "eruption": "Erupção",
+ "environmental_noise": "Ruído Ambiental",
+ "field_recording": "Gravação de Campo"
+}
diff --git a/web/public/locales/pt/common.json b/web/public/locales/pt/common.json
new file mode 100644
index 000000000..ad63195c1
--- /dev/null
+++ b/web/public/locales/pt/common.json
@@ -0,0 +1,275 @@
+{
+ "time": {
+ "last30": "Últimos 30 dias",
+ "12hours": "12 horas",
+ "justNow": "Agora",
+ "yesterday": "Ontem",
+ "today": "Hoje",
+ "last7": "Últimos 7 dias",
+ "last14": "Últimos 14 dias",
+ "thisWeek": "Essa semana",
+ "lastWeek": "Semana passada",
+ "5minutes": "5 minutos",
+ "10minutes": "10 minutos",
+ "30minutes": "30 minutos",
+ "24hours": "24 horas",
+ "pm": "pm",
+ "am": "am",
+ "year_one": "{{time}} ano",
+ "year_many": "{{time}} de anos",
+ "year_other": "{{time}} anos",
+ "month_one": "{{time}} mes",
+ "month_many": "{{time}} meses",
+ "month_other": "",
+ "day_one": "{{time}} dia",
+ "day_many": "{{time}} dias",
+ "day_other": "{{time}} dias",
+ "thisMonth": "Esse mês",
+ "lastMonth": "Mês passado",
+ "1hour": "1 hora",
+ "hour_one": "{{time}} hora",
+ "hour_many": "{{time}} horas",
+ "hour_other": "{{time}} horas",
+ "minute_one": "{{time}} minuto",
+ "minute_many": "{{time}} minutos",
+ "minute_other": "{{time}} minutos",
+ "second_one": "{{time}} segundo",
+ "second_many": "{{time}} segundos",
+ "second_other": "{{time}} segundos",
+ "untilForTime": "Até {{time}}",
+ "untilForRestart": "Até que o Frigate reinicie.",
+ "untilRestart": "Até reiniciar",
+ "ago": "{{timeAgo}} atrás",
+ "d": "{{time}}d",
+ "h": "{{time}}h",
+ "m": "{{time}}m",
+ "s": "{{time}}s",
+ "yr": "{{time}}ano",
+ "mo": "{{time}}mês",
+ "formattedTimestamp": {
+ "12hour": "%b %-d, %I:%M:%S %p",
+ "24hour": "%b %-d, %H:%M:%S"
+ },
+ "formattedTimestamp2": {
+ "12hour": "dd/MM h:mm:ss a",
+ "24hour": "d MMM HH:mm:ss"
+ },
+ "formattedTimestampExcludeSeconds": {
+ "12hour": "%b %-d, %I:%M %p",
+ "24hour": "%b %-d, %H:%M"
+ },
+ "formattedTimestampWithYear": {
+ "12hour": "%b %-d %Y, %I:%M %p",
+ "24hour": "%b %-d %Y, %H:%M"
+ },
+ "formattedTimestampOnlyMonthAndDay": "%b %-d",
+ "formattedTimestampHourMinute": {
+ "12hour": "h:mm aaa",
+ "24hour": "HH:mm"
+ },
+ "formattedTimestampHourMinuteSecond": {
+ "12hour": "h:mm:ss aaa",
+ "24hour": "HH:mm:ss"
+ },
+ "formattedTimestampMonthDayYearHourMinute": {
+ "12hour": "MMM d yyyy, h:mm aaa",
+ "24hour": "MMM d yyyy, HH:mm"
+ },
+ "formattedTimestampMonthDayHourMinute": {
+ "12hour": "MMM d, h:mm aaa",
+ "24hour": "MMM d, HH:mm"
+ },
+ "formattedTimestampMonthDay": "MMM d",
+ "formattedTimestampFilename": {
+ "12hour": "MM-dd-yy-h-mm-ss-a",
+ "24hour": "MM-dd-yy-HH-mm-ss"
+ },
+ "formattedTimestampMonthDayYear": {
+ "12hour": "d MMM, yyyy",
+ "24hour": "d MMM, yyyy"
+ }
+ },
+ "unit": {
+ "speed": {
+ "kph": "kph",
+ "mph": "mph"
+ },
+ "length": {
+ "feet": "pé",
+ "meters": "metros"
+ }
+ },
+ "button": {
+ "enabled": "Habilitado",
+ "enable": "Habilitar",
+ "done": "Feito",
+ "reset": "Reiniciar",
+ "disabled": "Desabilitado",
+ "saving": "Salvando…",
+ "apply": "Aplicar",
+ "disable": "Desabilitar",
+ "save": "Salvar",
+ "copy": "Cópia",
+ "cancel": "Cancelar",
+ "close": "Fechar",
+ "history": "Histórico",
+ "back": "Voltar",
+ "fullscreen": "Ecrã Completo",
+ "exitFullscreen": "Sair do Ecrã Completo",
+ "twoWayTalk": "Conversa bidirecional",
+ "cameraAudio": "Áudio da câmera",
+ "edit": "Editar",
+ "off": "DESLIGADO",
+ "copyCoordinates": "Copiar coordenadas",
+ "on": "LIGADO",
+ "delete": "Excluir",
+ "download": "Download",
+ "info": "Informações",
+ "no": "Não",
+ "suspended": "Suspenso",
+ "yes": "Sim",
+ "unselect": "Desmarcar",
+ "unsuspended": "Dessuspender",
+ "deleteNow": "Excluir agora",
+ "export": "Exportar",
+ "next": "Próximo",
+ "play": "Tocar",
+ "pictureInPicture": "Sobrepor Imagem"
+ },
+ "label": {
+ "back": "Voltar"
+ },
+ "menu": {
+ "user": {
+ "logout": "Sair",
+ "account": "Conta",
+ "current": "Utilizador atual: {{user}}",
+ "setPassword": "Definir senha",
+ "title": "Utilizador",
+ "anonymous": "anônimo"
+ },
+ "faceLibrary": "Biblioteca de rostos",
+ "withSystem": "Sistema",
+ "theme": {
+ "label": "Tema",
+ "blue": "Azul",
+ "green": "Verde",
+ "red": "Vermelho",
+ "contrast": "Alto contraste",
+ "default": "Padrão",
+ "highcontrast": "Alto Contraste",
+ "nord": "Nord"
+ },
+ "system": "Sistema",
+ "systemMetrics": "Métricas do sistema",
+ "configuration": "Configuração",
+ "systemLogs": "Logs do sistema",
+ "settings": "Configurações",
+ "configurationEditor": "Editor de configuração",
+ "languages": "Idiomas",
+ "language": {
+ "en": "Inglês (English)",
+ "zhCN": "Chinês simplificado",
+ "withSystem": {
+ "label": "Use as configurações do sistema para idioma"
+ },
+ "fr": "Français (Francês)",
+ "es": "Español (Espanhol)",
+ "ru": "Русский (Russo)",
+ "de": "Deutsch (Alemão)",
+ "ja": "日本語 (Japonês)",
+ "yue": "Cantonês (粵語)",
+ "ar": "العربية (Arabic)",
+ "uk": "Ucraniano (Українська)",
+ "el": "Grego (Ελληνικά)",
+ "hi": "हिन्दी (Hindi)",
+ "pt": "Português (Portuguese)",
+ "tr": "Türkçe (Turkish)",
+ "it": "Italiano (Italian)",
+ "nb": "Norueguês Bokmål (Norsk Bokmål)",
+ "ko": "Coreano (한국어)",
+ "vi": "Vietnamita (Tiếng Việt)",
+ "nl": "Nederlands (Dutch)",
+ "sv": "Svenska (Swedish)",
+ "cs": "Tcheco (Čeština)",
+ "fa": "Persa (فارسی)",
+ "pl": "Polonês (Polski)",
+ "he": "Hebraico (עברית)",
+ "fi": "Finlandês (Suomi)",
+ "da": "Dinamarquês (Dansk)",
+ "ro": "Romeno (Română)",
+ "hu": "Húngaro (Magyar)",
+ "sk": "Eslovaco (Slovenčina)",
+ "th": "Tailandês",
+ "ca": "Català (Catalão)"
+ },
+ "appearance": "Aparência",
+ "darkMode": {
+ "label": "Modo escuro",
+ "withSystem": {
+ "label": "Use as configurações do sistema para o modo claro ou escuro"
+ },
+ "light": "Claro",
+ "dark": "Escuro"
+ },
+ "help": "Ajuda",
+ "documentation": {
+ "title": "Documentação",
+ "label": "Documentação do Frigate"
+ },
+ "restart": "Reiniciar Frigate",
+ "live": {
+ "title": "Ao vivo",
+ "allCameras": "Todas as câmaras",
+ "cameras": {
+ "title": "Câmaras",
+ "count_one": "{{count}} Câmera",
+ "count_many": "{{count}} Câmeras",
+ "count_other": "{{count}} Câmeras"
+ }
+ },
+ "export": "Exportar",
+ "explore": "Explorar",
+ "review": "Análise",
+ "uiPlayground": "Área de Testes da Interface"
+ },
+ "pagination": {
+ "previous": {
+ "label": "Ir para a página anterior",
+ "title": "Anterior"
+ },
+ "label": "paginação",
+ "next": {
+ "title": "Próximo",
+ "label": "Ir para a próxima página"
+ },
+ "more": "Mais páginas"
+ },
+ "role": {
+ "admin": "Administrador",
+ "viewer": "Visualizador",
+ "title": "Regra",
+ "desc": "Administradores têm acesso total a todos os recursos da interface do Frigate. Visualizadores estão limitados a visualizar câmeras, revisar itens e assistir o histórico de gravaçoes na interface."
+ },
+ "toast": {
+ "copyUrlToClipboard": "URL copiada para a área de transferência.",
+ "save": {
+ "title": "Salvar",
+ "error": {
+ "noMessage": "Falha ao salvar as alterações de configuração",
+ "title": "Falha ao salvar as alterações de configuração: {{errorMessage}}"
+ }
+ }
+ },
+ "accessDenied": {
+ "documentTitle": "Acesso negado - Frigate",
+ "title": "Acesso negado",
+ "desc": "Você não tem permissão para visualizar esta página."
+ },
+ "notFound": {
+ "documentTitle": "Não encontrado - Frigate",
+ "desc": "Página não encontrada",
+ "title": "404"
+ },
+ "selectItem": "Selecionar {{item}}"
+}
diff --git a/web/public/locales/pt/components/auth.json b/web/public/locales/pt/components/auth.json
new file mode 100644
index 000000000..5dcccd7d6
--- /dev/null
+++ b/web/public/locales/pt/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "user": "Nome do utilizador",
+ "login": "Login",
+ "errors": {
+ "usernameRequired": "O nome do utilizador é obrigatório",
+ "passwordRequired": "Senha é necessária",
+ "rateLimit": "Limite de taxa excedido. Tente novamente mais tarde.",
+ "loginFailed": "Falha no login",
+ "unknownError": "Erro desconhecido. Verifique os logs.",
+ "webUnknownError": "Erro desconhecido. Verifique os logs da consola."
+ },
+ "password": "Senha"
+ }
+}
diff --git a/web/public/locales/pt/components/camera.json b/web/public/locales/pt/components/camera.json
new file mode 100644
index 000000000..fa4a5fdc1
--- /dev/null
+++ b/web/public/locales/pt/components/camera.json
@@ -0,0 +1,86 @@
+{
+ "group": {
+ "label": "Grupos de câmaras",
+ "add": "Adicionar grupo de câmaras",
+ "edit": "Editar grupo de câmaras",
+ "delete": {
+ "label": "Excluir grupo de câmaras",
+ "confirm": {
+ "title": "Confirmar exclusão",
+ "desc": "Tem certeza de que deseja excluir o grupo de câmaras {{name}}?"
+ }
+ },
+ "name": {
+ "label": "Nome",
+ "placeholder": "Digita um nome…",
+ "errorMessage": {
+ "exists": "O nome do grupo de câmaras já existe.",
+ "nameMustNotPeriod": "O nome do grupo de câmaras não deve conter pontos.",
+ "mustLeastCharacters": "O nome do grupo de câmaras deve ter pelo menos 2 caracteres.",
+ "invalid": "Nome de grupo de câmaras inválido."
+ }
+ },
+ "cameras": {
+ "desc": "Selecione câmaras para este grupo.",
+ "label": "Câmaras"
+ },
+ "icon": "Ícone",
+ "success": "O grupo de câmaras ({{name}}) foi guardado.",
+ "camera": {
+ "setting": {
+ "audioIsAvailable": "O áudio está disponível para esta transmissão",
+ "audioIsUnavailable": "O áudio não está disponível para esta transmissão",
+ "audio": {
+ "tips": {
+ "document": "Leia a documentação ",
+ "title": "O áudio deve ser emitido pela sua câmara e configurado no go2rtc para esta transmissão."
+ }
+ },
+ "streamMethod": {
+ "label": "Método de transmissão",
+ "method": {
+ "smartStreaming": {
+ "label": "Transmissão inteligente (recomendado)",
+ "desc": "A transmissão inteligente atualizará a imagem da sua câmara uma vez por minuto quando nenhuma atividade detectável estiver ocorrendo para conservar largura de banda e recursos. Quando a atividade é detectada, a imagem muda perfeitamente para uma transmissão ao vivo."
+ },
+ "continuousStreaming": {
+ "label": "Transmissão contínua",
+ "desc": {
+ "warning": "A transmissão contínua pode causar alto uso de largura de banda e problemas de desempenho. Use com precaução.",
+ "title": "A imagem da câmara sempre será uma transmissão ao vivo quando visível no painel, mesmo que nenhuma atividade esteja sendo detectada."
+ }
+ },
+ "noStreaming": {
+ "label": "Sem transmissão",
+ "desc": "As imagens da câmara serão atualizadas apenas uma vez por minuto e não haverá transmissão ao vivo."
+ }
+ },
+ "placeholder": "Escolha um método de transmissão"
+ },
+ "compatibilityMode": {
+ "label": "Modo de compatibilidade",
+ "desc": "Habilite esta opção somente se a transmissão ao vivo da sua câmara estiver exibindo artefatos de cor e tiver uma linha diagonal no lado direito da imagem."
+ },
+ "label": "Configurações de transmissão da câmara",
+ "desc": "Altere as opções de transmissão ao vivo para o painel deste grupo de câmaras. Essas configurações são específicas do dispositivo/navegador.",
+ "title": "{{cameraName}} configurações de transmissão",
+ "placeholder": "Escolha uma transmissão",
+ "stream": "Transmissão"
+ }
+ }
+ },
+ "debug": {
+ "options": {
+ "label": "Configurações",
+ "title": "Opções",
+ "hideOptions": "Ocultar opções",
+ "showOptions": "Mostrar opções"
+ },
+ "boundingBox": "Caixa delimitadora",
+ "timestamp": "Carimbo de hora",
+ "zones": "Zonas",
+ "mask": "Máscara",
+ "motion": "Movimento",
+ "regions": "Regiões"
+ }
+}
diff --git a/web/public/locales/pt/components/dialog.json b/web/public/locales/pt/components/dialog.json
new file mode 100644
index 000000000..766711539
--- /dev/null
+++ b/web/public/locales/pt/components/dialog.json
@@ -0,0 +1,126 @@
+{
+ "restart": {
+ "button": "Reiniciar",
+ "restarting": {
+ "title": "Frigate está reiniciando",
+ "content": "Esta página será recarregada em {{countdown}} segundos.",
+ "button": "Forçar atualização agora"
+ },
+ "title": "Tem certeza de que deseja reiniciar o Frigate?"
+ },
+ "explore": {
+ "plus": {
+ "submitToPlus": {
+ "label": "Enviar para Frigate+",
+ "desc": "Objetos em locais que você quer evitar não são falsos positivos. Enviá-los como falsos positivos confundirá o modelo."
+ },
+ "review": {
+ "true": {
+ "label": "Confirme esta etiqueta para Frigate Plus",
+ "true_one": "Este é um {{label}}",
+ "true_many": "Estes são muitos {{label}}",
+ "true_other": "Estão são {{label}}"
+ },
+ "state": {
+ "submitted": "Enviado"
+ },
+ "false": {
+ "label": "Não confirmar esta etiqueta para Frigate Plus",
+ "false_one": "Este não é um {{label}}",
+ "false_many": "Estes não são muitos {{label}}",
+ "false_other": "Estes não são {{label}}"
+ },
+ "question": {
+ "label": "Confirme este rótulo para Frigate Plus",
+ "ask_a": "Este objeto é um {{label}}?",
+ "ask_an": "Este objeto é um {{label}}?",
+ "ask_full": "Este objeto é um(a) {{untranslatedLabel}} ({{translatedLabel}})?"
+ }
+ }
+ },
+ "video": {
+ "viewInHistory": "Ver no histórico"
+ }
+ },
+ "export": {
+ "time": {
+ "fromTimeline": "Selecione na linha do tempo",
+ "start": {
+ "title": "Hora de início",
+ "label": "Selecione a hora de início"
+ },
+ "end": {
+ "title": "Hora de término",
+ "label": "Selecione a hora de término"
+ },
+ "custom": "Personalizado",
+ "lastHour_one": "Última hora",
+ "lastHour_many": "Últimas {{count}} horas",
+ "lastHour_other": "Últimas {{count}} horas"
+ },
+ "export": "Exportar",
+ "toast": {
+ "success": "Exportação iniciada com sucesso. Veja o arquivo na pasta /exports.",
+ "error": {
+ "failed": "Falha ao iniciar a exportação: {{error}}",
+ "endTimeMustAfterStartTime": "O horário de término deve ser posterior ao horário de início",
+ "noVaildTimeSelected": "Nenhum intervalo de tempo válido selecionado"
+ }
+ },
+ "selectOrExport": "Selecionar ou Exportar",
+ "fromTimeline": {
+ "saveExport": "Salvar exportação",
+ "previewExport": "Visualizar exportação"
+ },
+ "select": "Selecione",
+ "name": {
+ "placeholder": "Nome da exportação"
+ }
+ },
+ "streaming": {
+ "showStats": {
+ "label": "Mostrar estatísticas de transmissão",
+ "desc": "Habilite esta opção para mostrar estatísticas de transmissão como uma sobreposição no feed da câmara."
+ },
+ "restreaming": {
+ "desc": {
+ "title": "Configure o go2rtc para obter opções adicionais de visualização ao vivo e áudio para esta câmara.",
+ "readTheDocumentation": "Leia a documentação"
+ },
+ "disabled": "A retransmissão não está habilitada para esta câmara."
+ },
+ "label": "Transmissão",
+ "debugView": "Exibição de depuração"
+ },
+ "search": {
+ "saveSearch": {
+ "label": "Salvar pesquisa",
+ "overwrite": "{{searchName}} já existe. Salvar substituirá o valor existente.",
+ "success": "A pesquisa ({{searchName}}) foi salva.",
+ "button": {
+ "save": {
+ "label": "Salvar esta pesquisa"
+ }
+ },
+ "placeholder": "Digite um nome para sua pesquisa",
+ "desc": "Forneça um nome para esta pesquisa salva."
+ }
+ },
+ "recording": {
+ "confirmDelete": {
+ "title": "Confirmar exclusão",
+ "desc": {
+ "selected": "Tem certeza de que deseja excluir todos os vídeos gravados associados a este item de analise?detecção {{cameraName}}, verifique os logs de erro"
+ },
+ "cameraDisabled": "A câmara está desativada",
+ "stats": {
+ "streamType": {
+ "title": "Tipo de transmissão:",
+ "short": "Tipo"
+ },
+ "bandwidth": {
+ "title": "Largura de banda:",
+ "short": "Largura de banda"
+ },
+ "latency": {
+ "value": "{{seconds}} segundos",
+ "short": {
+ "title": "Latência",
+ "value": "{{seconds}} seg"
+ },
+ "title": "Latência:"
+ },
+ "totalFrames": "Total de quadros:",
+ "droppedFrames": {
+ "title": "Quadros perdidos:",
+ "short": {
+ "title": "Perdido",
+ "value": "{{droppedFrames}} quadros"
+ }
+ },
+ "decodedFrames": "Quadros decodificados:",
+ "droppedFrameRate": "Taxa de Quadros Perdidos:"
+ },
+ "noRecordingsFoundForThisTime": "Nenhuma gravação encontrada para este momento",
+ "livePlayerRequiredIOSVersion": "iOS 17.1 ou superior é necessário para este tipo de transmissão ao vivo.",
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "Quadro enviado com sucesso para o Frigate+"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "Falha ao enviar o quadro para o Frigate+"
+ }
+ }
+}
diff --git a/web/public/locales/pt/objects.json b/web/public/locales/pt/objects.json
new file mode 100644
index 000000000..ada61d184
--- /dev/null
+++ b/web/public/locales/pt/objects.json
@@ -0,0 +1,120 @@
+{
+ "giraffe": "Girafa",
+ "cup": "Chávena",
+ "person": "Pessoa",
+ "stop_sign": "Sinal de Stop",
+ "sheep": "Ovelha",
+ "sandwich": "Sandes",
+ "carrot": "Cenoura",
+ "dining_table": "Mesa de jantar",
+ "motorcycle": "Motociclo",
+ "bicycle": "Bicicleta",
+ "street_sign": "Sinal de rua",
+ "pizza": "Pizza",
+ "parking_meter": "Parquímetro",
+ "skateboard": "Skate",
+ "bottle": "Garrafa",
+ "car": "Carro",
+ "airplane": "Avião",
+ "bus": "Autocarro",
+ "train": "Comboio",
+ "boat": "Barco",
+ "traffic_light": "Semáforo",
+ "fire_hydrant": "Boca de Incêndio",
+ "bird": "Pássaro",
+ "cat": "Gato",
+ "bench": "Banco de jardim/rua",
+ "elephant": "Elefante",
+ "hat": "Chapéu",
+ "backpack": "Mochila",
+ "shoe": "Sapato",
+ "handbag": "Bolsa de mão",
+ "tie": "Gravata",
+ "suitcase": "Mala de viagem",
+ "frisbee": "Disco de Frisbee",
+ "skis": "Esquis",
+ "kite": "Kite",
+ "baseball_bat": "Taco basebol",
+ "tennis_racket": "Raquete de Tenis",
+ "plate": "Prato",
+ "wine_glass": "Copo de Vinho",
+ "fork": "Garfo",
+ "spoon": "Colher",
+ "bowl": "Tijela",
+ "banana": "Banana",
+ "apple": "Maça",
+ "hot_dog": "Cachorro quente",
+ "donut": "Donut",
+ "cake": "Bolo",
+ "chair": "Cadeira",
+ "potted_plant": "Planta em vaso",
+ "mirror": "Espelho",
+ "desk": "Mesa",
+ "toilet": "Casa de Banho",
+ "door": "Porta",
+ "baseball_glove": "Luva de beisebol",
+ "surfboard": "Prancha de surf",
+ "broccoli": "Brócolos",
+ "snowboard": "Snowboard",
+ "dog": "Cão",
+ "bear": "Urso",
+ "eye_glasses": "Óculos",
+ "umbrella": "Guarda-chuva",
+ "horse": "Cavalo",
+ "bed": "Cama",
+ "cow": "Vaca",
+ "zebra": "Zebra",
+ "sports_ball": "Bola",
+ "knife": "Faca",
+ "orange": "Laranja",
+ "window": "Janela",
+ "clock": "Relógio",
+ "keyboard": "Teclado",
+ "animal": "Animal",
+ "bark": "Latido",
+ "goat": "Cabra",
+ "vehicle": "Veículo",
+ "scissors": "Tesoura",
+ "mouse": "Rato",
+ "teddy_bear": "Urso de peluche",
+ "hair_dryer": "Secador de cabelo",
+ "toothbrush": "Escova de dentes",
+ "hair_brush": "Escova de Cabelo",
+ "squirrel": "Esquilo",
+ "couch": "Sofá",
+ "tv": "TV",
+ "laptop": "Portátil",
+ "remote": "Controlo Remoto",
+ "cell_phone": "Telemóvel",
+ "microwave": "Microondas",
+ "oven": "Forno",
+ "toaster": "Torradeira",
+ "sink": "Pia",
+ "refrigerator": "Frigorífico",
+ "blender": "Liquidificador",
+ "book": "Livro",
+ "vase": "Vaso",
+ "deer": "Veado",
+ "fox": "Raposa",
+ "rabbit": "Coelho",
+ "raccoon": "Guaxinim",
+ "robot_lawnmower": "Robô corta relva",
+ "waste_bin": "Contentor do Lixo",
+ "on_demand": "On Demand",
+ "face": "Rosto",
+ "license_plate": "Matrícula",
+ "package": "Pacote",
+ "bbq_grill": "Churrasqueira",
+ "amazon": "Amazon",
+ "usps": "USPS",
+ "ups": "UPS",
+ "fedex": "FedEx",
+ "dhl": "DHL",
+ "an_post": "An Post",
+ "purolator": "Purolator",
+ "postnl": "PostNL",
+ "nzpost": "NZPost",
+ "postnord": "PostNord",
+ "gls": "GLS",
+ "dpd": "DPD"
+}
diff --git a/web/public/locales/pt/views/configEditor.json b/web/public/locales/pt/views/configEditor.json
new file mode 100644
index 000000000..6d6c98166
--- /dev/null
+++ b/web/public/locales/pt/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "configEditor": "Editor de configuração",
+ "copyConfig": "Copiar configuração",
+ "saveAndRestart": "Salvar e reiniciar",
+ "saveOnly": "Salvar Apenas",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Configuração copiada para a área de transferência."
+ },
+ "error": {
+ "savingError": "Erro ao salvar configuração"
+ }
+ },
+ "documentTitle": "Editor de configuração - Frigate",
+ "confirm": "Sair sem salvar?"
+}
diff --git a/web/public/locales/pt/views/events.json b/web/public/locales/pt/views/events.json
new file mode 100644
index 000000000..6478001c6
--- /dev/null
+++ b/web/public/locales/pt/views/events.json
@@ -0,0 +1,38 @@
+{
+ "detections": "Detecções",
+ "motion": {
+ "label": "Movimento",
+ "only": "Somente movimento"
+ },
+ "allCameras": "Todas as câmaras",
+ "empty": {
+ "motion": "Nenhum dado de movimento encontrado",
+ "alert": "Não há alertas para análise",
+ "detection": "Não há detecções para análise"
+ },
+ "timeline": "Linha do tempo",
+ "events": {
+ "aria": "Selecionar eventos",
+ "label": "Eventos",
+ "noFoundForTimePeriod": "Nenhum evento encontrado para este período."
+ },
+ "timeline.aria": "Selecione a linha do tempo",
+ "alerts": "Alertas",
+ "documentTitle": "Análise - Frigate",
+ "recordings": {
+ "documentTitle": "Gravações - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "Últimas 24 horas"
+ },
+ "markAsReviewed": "Marcar como analisado",
+ "markTheseItemsAsReviewed": "Marque esses itens como analisados",
+ "newReviewItems": {
+ "label": "Ver novos itens para analisar",
+ "button": "Novos itens para analisar"
+ },
+ "camera": "Câmara",
+ "detected": "detectado",
+ "selected_one": "{{count}} selecionado",
+ "selected_other": "{{count}} selecionados"
+}
diff --git a/web/public/locales/pt/views/explore.json b/web/public/locales/pt/views/explore.json
new file mode 100644
index 000000000..a271d1df7
--- /dev/null
+++ b/web/public/locales/pt/views/explore.json
@@ -0,0 +1,209 @@
+{
+ "generativeAI": "IA Generativa",
+ "exploreIsUnavailable": {
+ "embeddingsReindexing": {
+ "startingUp": "Iniciando…",
+ "estimatedTime": "Tempo restante estimado:",
+ "finishingShortly": "Terminando em breve",
+ "step": {
+ "thumbnailsEmbedded": "Miniaturas incorporadas: ",
+ "descriptionsEmbedded": "Descrições incorporadas: ",
+ "trackedObjectsProcessed": "Objetos rastreados processados: "
+ },
+ "context": "O explorar pode ser usado depois que as incorporações de objetos rastreados terminarem de ser reindexadas."
+ },
+ "downloadingModels": {
+ "setup": {
+ "visionModel": "Modelo de visão",
+ "textModel": "Modelo de texto",
+ "textTokenizer": "Tokenizador de texto",
+ "visionModelFeatureExtractor": "Extrator de características de modelo de visão"
+ },
+ "context": "O Frigate está descarregando os modelos de incorporação necessários para dar suporte a funcionalidade de pesquisa semântica. Isso pode levar vários minutos, dependendo da velocidade da sua conexão de rede.",
+ "tips": {
+ "context": "Talvez você queira reindexar as incorporações dos seus objetos rastreados depois que os modelos forem descarregados.",
+ "documentation": "Leia a documentação"
+ },
+ "error": "Ocorreu um erro. Verifique os logs do Frigate."
+ },
+ "title": "Explorar não está disponível"
+ },
+ "details": {
+ "timestamp": "Carimbo de hora",
+ "item": {
+ "title": "Analisar detalhes do item",
+ "desc": "Analisar detalhes do item",
+ "tips": {
+ "hasMissingObjects": "Ajuste sua configuração se você quiser que o Frigate guarde os objetos rastreados para os seguintes rótulos: {{objects}}",
+ "mismatch_one": "{{count}} objeto indisponível foi detectado e incluído neste item de análise. Esses objetos não qualificaram como alerta ou detecção ou já foram limpos/excluídos.",
+ "mismatch_many": "{{count}} objetos indisponíveis foram detectados e incluídos neste item de análise. Esses objetos não qualificaram como alerta ou detecção ou já foram limpos/excluídos.",
+ "mismatch_other": "{{count}} objetos indisponíveis foram detectados e incluídos neste item de análise. Esses objetos não qualificaram como alerta ou detecção ou já foram limpos/excluídos."
+ },
+ "toast": {
+ "success": {
+ "regenerate": "Uma nova descrição foi solicitada pelo {{provider}}. Dependendo da velocidade do seu fornecedor, a nova descrição pode levar algum tempo para ser regenerada.",
+ "updatedSublabel": "Sub-rotulo atualizado com sucesso.",
+ "updatedLPR": "Matrícula atualizada com sucesso."
+ },
+ "error": {
+ "regenerate": "Falha ao chamar {{provider}} para uma nova descrição: {{errorMessage}}",
+ "updatedSublabelFailed": "Falha ao atualizar o sub-rotulo: {{errorMessage}}",
+ "updatedLPRFailed": "Falha ao atualizar a matrícula: {{errorMessage}}"
+ }
+ },
+ "button": {
+ "share": "Compartilhe este item para análise",
+ "viewInExplore": "Ver no Explorar"
+ }
+ },
+ "zones": "Zonas",
+ "description": {
+ "label": "Descrição",
+ "aiTips": "O Frigate não solicitará uma descrição do seu fornecedor de IA Generativa até que o ciclo de vida do objeto rastreado tenha terminado.",
+ "placeholder": "Descrição do objeto rastreado"
+ },
+ "camera": "Câmera",
+ "snapshotScore": {
+ "label": "Pontuação da captura"
+ },
+ "topScore": {
+ "label": "Maior pontuação",
+ "info": "A maior pontuação é a maior pontuação mediana para o objeto rastreado, portanto, isso pode diferir da pontuação exibida na miniatura do resultado da pesquisa."
+ },
+ "button": {
+ "findSimilar": "Encontrar similar",
+ "regenerate": {
+ "title": "Regenerar",
+ "label": "Regenerar descrição do objeto rastreado"
+ }
+ },
+ "label": "Rótulo",
+ "editSubLabel": {
+ "title": "Editar sub-rotulo",
+ "desc": "Digite um novo sub-rotulo para este {{label}}",
+ "descNoLabel": "Digite um novo sub-rotulo para este objeto rastreado"
+ },
+ "editLPR": {
+ "title": "Editar matrícula",
+ "desc": "Digite um novo valor da matrícula para este {{label}}",
+ "descNoLabel": "Digite um novo valor da matrícula para este objeto rastreado"
+ },
+ "recognizedLicensePlate": "Matrícula reconhecida",
+ "estimatedSpeed": "Velocidade estimada",
+ "objects": "Objetos",
+ "expandRegenerationMenu": "Expandir menu de regeneração",
+ "regenerateFromSnapshot": "Regenerar a partir da captura",
+ "regenerateFromThumbnails": "Regenerar a partir das miniaturas",
+ "tips": {
+ "descriptionSaved": "Descrição salva com sucesso",
+ "saveDescriptionFailed": "Falha ao atualizar a descrição: {{errorMessage}}"
+ }
+ },
+ "documentTitle": "Explorar - Frigate",
+ "trackedObjectDetails": "Detalhes do objeto rastreado",
+ "type": {
+ "details": "detalhes",
+ "video": "vídeo",
+ "object_lifecycle": "ciclo de vida do objeto",
+ "snapshot": "snapshot"
+ },
+ "objectLifecycle": {
+ "title": "Ciclo de vida do objeto",
+ "lifecycleItemDesc": {
+ "attribute": {
+ "other": "{{label}} reconhecido como {{attribute}}",
+ "faceOrLicense_plate": "{{attribute}} detectado por {{label}}"
+ },
+ "gone": "{{label}} saiu",
+ "heard": "{{label}} ouvido",
+ "visible": "{{label}} detectado",
+ "external": "{{label}} detectado",
+ "entered_zone": "{{label}} entrou em {{zones}}",
+ "active": "{{label}} se tornou ativo",
+ "stationary": "{{label}} se tornou estacionário",
+ "header": {
+ "zones": "Zonas",
+ "ratio": "Proporção",
+ "area": "Área"
+ }
+ },
+ "annotationSettings": {
+ "title": "Configurações de anotação",
+ "offset": {
+ "documentation": "Leia a documentação ",
+ "desc": "Esses dados vêm do feed de detecção da sua câmara, mas são sobrepostos nas imagens do feed de gravação. É improvável que os dois streams estejam perfeitamente sincronizados. Como resultado, a caixa delimitadora e o vídeo não se alinharão perfeitamente. No entanto, o campo annotation_offset pode ser usado para ajustar isso.",
+ "tips": "DICA: Imagine que há um clipe de evento com uma pessoa a andar da esquerda para a direita. Se a caixa delimitadora da linha do tempo do evento estiver consistentemente à esquerda da pessoa, o valor deve ser diminuído. Da mesma forma, se uma pessoa estiver andando da esquerda para a direita e a caixa delimitadora estiver consistentemente à frente da pessoa, o valor deve ser aumentado.",
+ "label": "Deslocamento de Anotação",
+ "millisecondsToOffset": "Milissegundos para deslocar as anotações de detecção. Padrão: 0",
+ "toast": {
+ "success": "O deslocamento de anotação para {{camera}} foi salvo no arquivo de configuração. Reinicie o Frigate para aplicar as alterações."
+ }
+ },
+ "showAllZones": {
+ "title": "Mostrar todas as zonas",
+ "desc": "Sempre mostrar zonas nos quadros onde os objetos entraram em uma zona."
+ }
+ },
+ "carousel": {
+ "previous": "Slide anterior",
+ "next": "Próximo slide"
+ },
+ "noImageFound": "Nenhuma imagem encontrada para este carimbo de data/hora.",
+ "createObjectMask": "Criar Máscara de Objeto",
+ "adjustAnnotationSettings": "Ajustar configurações de anotação",
+ "autoTrackingTips": "As posições da caixa delimitadora serão imprecisas para câmeras com rastreamento automático.",
+ "scrollViewTips": "Faça scroll para ver os momentos significativos do ciclo de vida deste objeto.",
+ "count": "{{first}} de {{second}}",
+ "trackedPoint": "Ponto Rastreado"
+ },
+ "itemMenu": {
+ "downloadSnapshot": {
+ "aria": "Descarregar captura",
+ "label": "Descarregar captura"
+ },
+ "viewObjectLifecycle": {
+ "label": "Ver ciclo de vida do objeto",
+ "aria": "Mostrar o ciclo de vida do objeto"
+ },
+ "viewInHistory": {
+ "label": "Ver no Histórico",
+ "aria": "Ver no Histórico"
+ },
+ "downloadVideo": {
+ "label": "Descarregar vídeo",
+ "aria": "Descarregar vídeo"
+ },
+ "findSimilar": {
+ "label": "Encontrar similar",
+ "aria": "Encontrar objetos rastreados similares"
+ },
+ "submitToPlus": {
+ "label": "Enviar para o Frigate+",
+ "aria": "Enviar para o Frigate Plus"
+ },
+ "deleteTrackedObject": {
+ "label": "Excluir este objeto rastreado"
+ }
+ },
+ "searchResult": {
+ "tooltip": "Encontrado {{type}} com {{confidence}}% de confiança",
+ "deleteTrackedObject": {
+ "toast": {
+ "success": "Objeto rastreado excluído com sucesso.",
+ "error": "Falha ao excluir objeto rastreado: {{errorMessage}}"
+ }
+ }
+ },
+ "dialog": {
+ "confirmDelete": {
+ "desc": "Excluir este objeto rastreado remove a captura de imagem, quaisquer incorporações salvas e todas as entradas associadas ao ciclo de vida do objeto. As gravações desse objeto rastreado na visualização do Histórico NÃO serão excluídas.modo: {{effectiveRetainMode}}, portanto, esta gravação on-demand manterá apenas segmentos com {{effectiveRetainModeName}}."
+ },
+ "editLayout": {
+ "label": "Editar layout",
+ "group": {
+ "label": "Editar grupo de câmaras"
+ },
+ "exitEdit": "Sair da edição"
+ },
+ "audio": "Áudio",
+ "recording": {
+ "enable": "Habilitar gravação",
+ "disable": "Desativar gravação"
+ },
+ "history": {
+ "label": "Mostrar filmagens históricas"
+ }
+}
diff --git a/web/public/locales/pt/views/recording.json b/web/public/locales/pt/views/recording.json
new file mode 100644
index 000000000..a8b6e390c
--- /dev/null
+++ b/web/public/locales/pt/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "export": "Exportar",
+ "calendar": "Calendário",
+ "filter": "Filtro",
+ "filters": "Filtros",
+ "toast": {
+ "error": {
+ "endTimeMustAfterStartTime": "O horário de término deve ser posterior ao horário de início",
+ "noValidTimeSelected": "Nenhum intervalo de tempo válido selecionado"
+ }
+ }
+}
diff --git a/web/public/locales/pt/views/search.json b/web/public/locales/pt/views/search.json
new file mode 100644
index 000000000..4443f2788
--- /dev/null
+++ b/web/public/locales/pt/views/search.json
@@ -0,0 +1,74 @@
+{
+ "search": "Pesquisar",
+ "savedSearches": "Pesquisas salvas",
+ "searchFor": "Pesquisar por {{inputValue}}",
+ "button": {
+ "save": "Salvar pesquisa",
+ "delete": "Excluir pesquisa salva",
+ "filterInformation": "Informação do filtro",
+ "filterActive": "Filtros ativos",
+ "clear": "Limpar pesquisa"
+ },
+ "trackedObjectId": "ID do objeto rastreado",
+ "filter": {
+ "label": {
+ "sub_labels": "Sub etiquetas",
+ "zones": "Zonas",
+ "cameras": "Câmaras",
+ "labels": "Etiquetas",
+ "search_type": "Tipo de pesquisa",
+ "time_range": "Intervalo de tempo",
+ "before": "Antes",
+ "after": "Depois",
+ "min_score": "Pontuação mínima",
+ "max_score": "Pontuação máxima",
+ "min_speed": "Velocidade mínima",
+ "max_speed": "Velocidade máxima",
+ "recognized_license_plate": "Matrícula reconhecida",
+ "has_clip": "Tem Clipe",
+ "has_snapshot": "Tem Captura de Imagem"
+ },
+ "searchType": {
+ "thumbnail": "Miniatura",
+ "description": "Descrição"
+ },
+ "header": {
+ "noFilters": "Filtros",
+ "activeFilters": "Filtros ativos",
+ "currentFilterType": "Valores de filtro"
+ },
+ "tips": {
+ "desc": {
+ "text": "Os filtros ajudam você a restringir os resultados da sua pesquisa. Veja como usá-los no campo de entrada:",
+ "example": "Exemplo: cameras:front_door label:person before:01012024 time_range:3:00PM-4:00PM ",
+ "step": "https://…). Esta é uma limitação do navegador. Acesse o Frigate com segurança para usar as notificações."
+ },
+ "cameras": {
+ "title": "Câmaras",
+ "noCameras": "Nenhuma câmara disponível",
+ "desc": "Selecione para que câmaras as notificações serão ativadas."
+ },
+ "deviceSpecific": "Configurações específicas do dispositivo",
+ "registerDevice": "Registe este dispositivo",
+ "email": {
+ "placeholder": "por exemplo: exemplo@email.com",
+ "desc": "É necessário um e-mail válido que será utilizado para o notificar caso haja algum problema com o serviço push.",
+ "title": "E-mail"
+ },
+ "title": "Notificações",
+ "unregisterDevice": "Cancelar o registro deste dispositivo",
+ "suspendTime": {
+ "5minutes": "Suspender por 5 minutos",
+ "1hour": "Suspender por 1 hora",
+ "12hours": "Suspender por 12 horas",
+ "untilRestart": "Suspender até reiniciar",
+ "10minutes": "Suspender por 10 minutos",
+ "suspend": "Suspender",
+ "30minutes": "Suspender por 30 minutos",
+ "24hours": "Suspender por 24 horas"
+ },
+ "cancelSuspension": "Cancelar Suspensão",
+ "toast": {
+ "success": {
+ "registered": "Registo para notificações concluído com sucesso. É necessário reiniciar o Frigate antes que qualquer notificação (incluindo uma notificação de teste) possa ser enviada.",
+ "settingSaved": "As configurações de notificação foram salvas."
+ },
+ "error": {
+ "registerFailed": "Falha ao guardar o registo das notificações."
+ }
+ },
+ "sendTestNotification": "Envie uma notificação de teste",
+ "active": "Notificações ativas",
+ "suspended": "Notificações suspensas {{time}}",
+ "unsavedRegistrations": "Registros de notificação não salvos",
+ "unsavedChanges": "Registros de notificação não salvos"
+ },
+ "frigatePlus": {
+ "snapshotConfig": {
+ "documentation": "Leia a documentação",
+ "table": {
+ "snapshots": "Snapshots",
+ "camera": "Câmara",
+ "cleanCopySnapshots": "clean_copy Snapshots"
+ },
+ "title": "Configuração de snapshots",
+ "desc": "O envio para o Frigate+ requer que tanto os snapshots quanto os snapshots clean_copy estejam habilitados na sua configuração.",
+ "cleanCopyWarning": "Algumas câmaras têm snapshots habilitados, mas a cópia limpa está desabilitada. É necessário habilitar clean_copy na sua configuração de snapshot para poder enviar imagens dessas câmaras para o Frigate+."
+ },
+ "toast": {
+ "success": "As definições do Frigate+ foram guardadas. Reinicie o Frigate para aplicar as alterações.",
+ "error": "Falha ao guardar alterações de configuração: {{errorMessage}}"
+ },
+ "modelInfo": {
+ "modelType": "Tipo de modelo",
+ "trainDate": "Data do treino",
+ "title": "Informações do modelo",
+ "error": "Falha ao carregar informações do modelo",
+ "availableModels": "Modelos Disponíveis",
+ "baseModel": "Modelo Básico",
+ "plusModelType": {
+ "userModel": "Ajuste-Fino",
+ "baseModel": "Modelo Básico"
+ },
+ "supportedDetectors": "Detectores Suportados",
+ "loading": "Carregando informações do modelo…",
+ "cameras": "Câmaras",
+ "loadingAvailableModels": "Carregando modelos disponíveis…",
+ "modelSelect": "Os modelos disponíveis no Frigate+ podem ser selecionados aqui. Observe que apenas modelos compatíveis com a configuração atual do seu detector podem ser selecionados."
+ },
+ "title": "Configurações Frigate+",
+ "apiKey": {
+ "validated": "A chave da API do Frigate+ foi detectada e validada",
+ "notValidated": "A chave da API do Frigate+ não foi detectada ou não foi validada",
+ "desc": "A chave de API do Frigate+ permite a integração com o serviço Frigate+.",
+ "plusLink": "Saiba mais sobre o Frigate+",
+ "title": "Chave de API do Frigate+"
+ },
+ "restart_required": "Reinicialização necessária (modelo Frigate+ alterado)",
+ "unsavedChanges": "Alterações nas configurações do Frigate+ não salvas"
+ },
+ "masksAndZones": {
+ "motionMasks": {
+ "point_one": "{{count}} ponto",
+ "point_many": "{{count}} pontos",
+ "point_other": "{{count}} pontos",
+ "context": {
+ "documentation": "Leia a documentação",
+ "title": "As máscaras de movimento são usadas para impedir que tipos indesejados de movimento acionem a detecção (exemplo: galhos de árvores, carimbos de data/hora da câmera). As máscaras de movimento devem ser usadas com moderação, o uso excessivo de máscaras dificultará o rastreamento de objetos."
+ },
+ "polygonAreaTooLarge": {
+ "documentation": "Leia a documentação",
+ "tips": "As máscaras de movimento não impedem que objetos sejam detectados. Você deve usar uma zona obrigatória em vez disso.",
+ "title": "A máscara de movimento está cobrindo {{polygonArea}}% da área da câmara. Máscaras de movimento grandes não são recomendadas."
+ },
+ "label": "Máscara de movimento",
+ "desc": {
+ "documentation": "Documentação",
+ "title": "As máscaras de movimento são usadas para impedir que tipos indesejados de movimento acionem a detecção. O uso excessivo de máscaras dificultará o rastreamento de objetos."
+ },
+ "clickDrawPolygon": "Clique para desenhar um polígono na imagem.",
+ "toast": {
+ "success": {
+ "noName": "O filtro de movimento foi guardado. Reinicie o Frigate para aplicar as alterações.",
+ "title": "{{polygonName}} foi salvo. Reinicie o Frigate para aplicar as alterações."
+ }
+ },
+ "edit": "Editar Máscara de Movimento",
+ "documentTitle": "Editar Máscara de Movimento - Frigate",
+ "add": "Nova Máscara de Movimento"
+ },
+ "zones": {
+ "label": "Zonas",
+ "documentTitle": "Editar Zona - Frigate",
+ "desc": {
+ "documentation": "Documentação",
+ "title": "As zonas permitem definir uma área específica do quadro para que você possa determinar se um objeto está ou não dentro de uma área particular."
+ },
+ "point_one": "{{count}} ponto",
+ "point_many": "{{count}} pontos",
+ "point_other": "{{count}} pontos",
+ "add": "Adicionar Zona",
+ "edit": "Editar Zona",
+ "clickDrawPolygon": "Clique para desenhar um polígono na imagem.",
+ "name": {
+ "title": "Nome",
+ "inputPlaceHolder": "Digite um nome…",
+ "tips": "O nome deve ter pelo menos 2 caracteres e não pode ser o nome de uma câmara ou de outra zona."
+ },
+ "inertia": {
+ "title": "Inércia",
+ "desc": "Especifica quantos quadros um objeto deve estar em uma zona antes de ser considerado dentro da zona. Padrão: 3"
+ },
+ "loiteringTime": {
+ "title": "Tempo de permanência",
+ "desc": "Define o tempo mínimo, em segundos, que o objeto deve permanecer na zona para que ela seja ativada. Padrão: 0"
+ },
+ "objects": {
+ "title": "Objetos",
+ "desc": "Lista de objetos que se aplicam a esta zona."
+ },
+ "allObjects": "Todos os objetos",
+ "speedEstimation": {
+ "title": "Estimativa de velocidade",
+ "desc": "Ativar estimativa de velocidade para objetos nesta zona. A zona deve ter exatamente 4 pontos.",
+ "docs": "Lê a documentação",
+ "lineBDistance": "Distância da Linha B ({{unit}})",
+ "lineCDistance": "Distância da Linha C ({{unit}})",
+ "lineDDistance": "Distância da Linha D ({{unit}})",
+ "lineADistance": "Distância da Linha A ({{unit}})"
+ },
+ "speedThreshold": {
+ "title": "Limiar de velocidade ({{unit}})",
+ "desc": "Especifica uma velocidade mínima para que os objetos sejam considerados nesta zona.",
+ "toast": {
+ "error": {
+ "pointLengthError": "A estimativa de velocidade foi desativada para esta zona. Zonas com estimativa de velocidade devem ter exatamente 4 pontos.",
+ "loiteringTimeError": "Zonas com tempos de permanência maiores que 0 não devem ser usadas com estimativa de velocidade."
+ }
+ }
+ },
+ "toast": {
+ "success": "A zona ({{zoneName}}) foi salva. Reinicie o Frigate para aplicar as alterações."
+ }
+ },
+ "filter": {
+ "all": "Todas as Máscaras e Zonas"
+ },
+ "toast": {
+ "success": {
+ "copyCoordinates": "Coordenadas de {{polyName}} copiadas para a área de transferência."
+ },
+ "error": {
+ "copyCoordinatesFailed": "Não foi possível copiar as coordenadas para a área de transferência."
+ }
+ },
+ "form": {
+ "zoneName": {
+ "error": {
+ "mustBeAtLeastTwoCharacters": "O nome da zona deve ter pelo menos 2 caracteres.",
+ "mustNotContainPeriod": "O nome da zona não pode conter pontos.",
+ "hasIllegalCharacter": "O nome da zona contém caracteres ilegais.",
+ "mustNotBeSameWithCamera": "O nome da zona não pode ser o mesmo que o nome da câmara.",
+ "alreadyExists": "Já existe uma zona com esse nome para esta câmara."
+ }
+ },
+ "distance": {
+ "error": {
+ "text": "A distância deve ser maior ou igual a 0,1.",
+ "mustBeFilled": "Todos os campos de distância devem ser preenchidos para usar a estimativa de velocidade."
+ }
+ },
+ "inertia": {
+ "error": {
+ "mustBeAboveZero": "A inércia deve ser maior que 0."
+ }
+ },
+ "loiteringTime": {
+ "error": {
+ "mustBeGreaterOrEqualZero": "O tempo de permanência deve ser maior ou igual a 0."
+ }
+ },
+ "polygonDrawing": {
+ "removeLastPoint": "Remover o último ponto",
+ "reset": {
+ "label": "Limpar todos os pontos"
+ },
+ "snapPoints": {
+ "true": "Fixar pontos",
+ "false": "Não fixar pontos"
+ },
+ "delete": {
+ "title": "Confirmar exclusão",
+ "success": "{{name}} foi excluído.",
+ "desc": "Você tem certeza de que deseja excluir o {{type}} {{name}}?"
+ },
+ "error": {
+ "mustBeFinished": "A criação do polígono deve ser concluída antes de salvar."
+ }
+ },
+ "speed": {
+ "error": {
+ "mustBeGreaterOrEqualTo": "O limiar de velocidade deve ser igual ou superior a 0,1."
+ }
+ }
+ },
+ "objectMasks": {
+ "label": "Máscaras de objetos",
+ "clickDrawPolygon": "Clique para desenhar um polígono na imagem.",
+ "desc": {
+ "documentation": "Documentação",
+ "title": "As máscaras de filtro de objetos são usadas para filtrar falsos positivos para um determinado tipo de objeto com base na localização."
+ },
+ "point_one": "{{count}} ponto",
+ "point_many": "{{count}} pontos",
+ "point_other": "{{count}} pontos",
+ "objects": {
+ "allObjectTypes": "Todos os tipos de objeto",
+ "title": "Objetos",
+ "desc": "O tipo de objeto ao qual essa máscara de objeto se aplica."
+ },
+ "add": "Adicionar filtro para objecto",
+ "edit": "Editar filtro de objecto",
+ "documentTitle": "Editar filtro de movimento - Frigate",
+ "toast": {
+ "success": {
+ "noName": "A máscara de objeto foi salva. Reinicie o Frigate para aplicar as alterações.",
+ "title": "{{polygonName}} foi salvo. Reinicie o Frigate para aplicar as alterações."
+ }
+ },
+ "context": "As máscaras de filtro de objetos são usadas para filtrar falsos positivos para um determinado tipo de objeto com base na localização."
+ },
+ "restart_required": "É necessário reiniciar (máscaras/zonas alteradas)",
+ "motionMaskLabel": "Mascara movimento {{number}}",
+ "objectMaskLabel": "Mascara de objecto {{number}} ({{label}})"
+ },
+ "debug": {
+ "zones": {
+ "title": "Zonas",
+ "desc": "Mostrar um esboço de quaisquer zonas definidas"
+ },
+ "timestamp": {
+ "title": "Carimbo de hora",
+ "desc": "Sobrepor um carimbo de data/hora na imagem"
+ },
+ "title": "Depurar",
+ "detectorDesc": "O Frigate utiliza os seus detectores ({{detectors}}) para detectar objetos no fluxo de vídeo da sua câmara.",
+ "desc": "A vista de depuração apresenta uma vista em tempo real dos objetos localizados e das respectivas estatísticas. A lista de objetos apresenta um resumo dos objetos detectados em tempo real.",
+ "debugging": "A depurar",
+ "objectList": "Lista de Objetos",
+ "noObjects": "Sem Objetos",
+ "boundingBoxes": {
+ "title": "Caixas de contorno",
+ "desc": "Mostrar caixas de contorno à volta dos objetos seguidos",
+ "colors": {
+ "label": "Cores da caixa de contorno de objetos",
+ "info": "Caixas de região
Caixas verdes brilhantes serão sobrepostas em áreas de interesse no quadro que estão sendo enviadas ao detector de objetos.
" + }, + "motion": { + "tips": "Caixas de movimento
Caixas vermelhas serão sobrepostas em áreas do quadro onde o movimento está sendo detectado
", + "title": "Caixas de movimento", + "desc": "Mostrar caixas ao redor das áreas onde o movimento é detectado" + }, + "mask": { + "title": "Máscaras de movimento", + "desc": "Mostrar polígonos de máscara de movimento" + } + }, + "camera": { + "reviewClassification": { + "readTheDocumentation": "Leia a documentação", + "title": "Classificação da Análise", + "noDefinedZones": "Nenhuma zona está definida para esta câmara.", + "objectAlertsTips": "Todos os objetos {{alertsLabels}} na câmara {{cameraName}} serão exibidos como Alertas.", + "zoneObjectDetectionsTips": { + "text": "Todos os objetos {{detectionsLabels}} não categorizados na zona {{zone}} na câmara {{cameraName}} serão exibidos como Detecções.", + "regardlessOfZoneObjectDetectionsTips": "Todos os objetos {{detectionsLabels}} não categorizados na câmara {{cameraName}} serão exibidos como Detecções, independentemente da zona em que se encontram.", + "notSelectDetections": "Todos os objetos {{detectionsLabels}} detectados na zona {{zone}} na câmara {{cameraName}} que não forem categorizados como Alertas serão exibidos como Detecções, independentemente da zona em que se encontram." + }, + "selectAlertsZones": "Selecionar zonas para Alertas", + "selectDetectionsZones": "Selecionar zonas para Detecções", + "limitDetections": "Limitar detecções a zonas específicas", + "desc": "O Frigate categoriza os itens de análise como Alertas e Detecções. Por padrão, todos os objetos do tipo pessoa e carro são considerados Alertas. Você pode refinar a categorização dos seus itens de análise configurando as zonas necessárias para eles.", + "objectDetectionsTips": "Todos os objetos {{detectionsLabels}} não categorizados na câmara {{cameraName}} serão exibidos como Detecções, independentemente da zona em que se encontram.", + "zoneObjectAlertsTips": "Todos os objetos {{alertsLabels}} detectados na zona {{zone}} na câmara {{cameraName}} serão exibidos como Alertas.", + "toast": { + "success": "A configuração de Classificação de análise foi salva. Reinicie o Frigate para aplicar as alterações." + }, + "unsavedChanges": "Configurações de classificação de análises não salvas para {{camera}}" + }, + "title": "Configurações da câmara", + "streams": { + "title": "Transmissões", + "desc": "Desativar uma câmara interrompe completamente o processamento das transmissões dessa câmara pelo Frigate. Detecção, gravação e depuração ficarão indisponíveis.ffprobe.",
+ "aspectRatio": "relação de aspeto"
+ },
+ "framesAndDetections": "Quadros / Detecções",
+ "label": {
+ "camera": "câmara",
+ "detect": "detectar",
+ "capture": "capturar",
+ "skipped": "ignorado",
+ "ffmpeg": "FFmpeg",
+ "cameraFfmpeg": "{{camName}} FFmpeg",
+ "cameraFramesPerSecond": "quadros por segundo de {{camName}}",
+ "cameraCapture": "captura de {{camName}}",
+ "cameraDetectionsPerSecond": "detecções por segundo de {{camName}}",
+ "overallFramesPerSecond": "quadros por segundo totais (FPS)",
+ "overallDetectionsPerSecond": "detecções por segundo totais",
+ "overallSkippedDetectionsPerSecond": "detecções ignoradas por segundo totais",
+ "cameraDetect": "detecção de {{camName}}",
+ "cameraSkippedDetectionsPerSecond": "detecções ignoradas por segundo de {{camName}}"
+ },
+ "overview": "Visão geral",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Dados de Exploração copiados para a área de transferência."
+ },
+ "error": {
+ "unableToProbeCamera": "Não foi possível explorar a câmara: {{errorMessage}}"
+ }
+ }
+ },
+ "lastRefreshed": "Última atualização: ",
+ "stats": {
+ "ffmpegHighCpuUsage": "{{camera}} tem alto uso de CPU FFmpeg ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} tem alto uso de CPU de detecção ({{detectAvg}}%)",
+ "healthy": "O sistema está saudável",
+ "reindexingEmbeddings": "Reindexando incorporações ({{processed}}% completo)",
+ "detectIsVerySlow": "{{detect}} está muito lento ({{speed}} ms)",
+ "cameraIsOffline": "{{camera}} está offline",
+ "detectIsSlow": "{{detect}} está lento ({{speed}} ms)"
+ },
+ "general": {
+ "title": "Geral",
+ "detector": {
+ "title": "Detectores",
+ "cpuUsage": "Utilização do CPU do Detector",
+ "memoryUsage": "Utilização da memória do Detector",
+ "inferenceSpeed": "Velocidade de Inferência do Detector",
+ "temperature": "Temperatura do Detector"
+ },
+ "hardwareInfo": {
+ "title": "Informações de hardware",
+ "gpuUsage": "Utilização GPU",
+ "gpuMemory": "Memória GPU",
+ "gpuInfo": {
+ "nvidiaSMIOutput": {
+ "driver": "Driver: {{driver}}",
+ "vbios": "Informação VBios: {{vbios}}",
+ "name": "Nome: {{name}}",
+ "cudaComputerCapability": "Capacidade de computação CUDA: {{cuda_compute}}",
+ "title": "Saída Nvidia SMI"
+ },
+ "copyInfo": {
+ "label": "Copiar informações do GPU"
+ },
+ "closeInfo": {
+ "label": "Fechar informações do GPU"
+ },
+ "toast": {
+ "success": "Informações do GPU copiadas para a área de transferência"
+ },
+ "vainfoOutput": {
+ "title": "Saída do Vainfo",
+ "returnCode": "Código de retorno: {{code}}",
+ "processOutput": "Saída do processo:",
+ "processError": "Erro no processo:"
+ }
+ },
+ "gpuEncoder": "GPU Encoder",
+ "gpuDecoder": "GPU Decoder",
+ "npuUsage": "Utilização NPU",
+ "npuMemory": "Memória NPU"
+ },
+ "otherProcesses": {
+ "title": "Outros processos",
+ "processCpuUsage": "Uso de CPU do processo",
+ "processMemoryUsage": "Uso de memória do processo"
+ }
+ },
+ "enrichments": {
+ "title": "Enriquecimentos",
+ "infPerSecond": "Inferências por segundo",
+ "embeddings": {
+ "image_embedding_speed": "Velocidade de incorporação de imagem",
+ "face_embedding_speed": "Velocidade de incorporação facial",
+ "plate_recognition_speed": "Velocidade de reconhecimento de matrículas",
+ "text_embedding_speed": "Velocidade de incorporação de texto",
+ "face_recognition_speed": "Velocidade de Reconhecimento Facial",
+ "plate_recognition": "Reconhecimento de Matrículas",
+ "image_embedding": "Incorporação de Imagem",
+ "text_embedding": "Incorporação de Texto",
+ "face_recognition": "Reconhecimento Facial",
+ "yolov9_plate_detection_speed": "Velocidade de Detecção de Matrículas YOLOv9",
+ "yolov9_plate_detection": "Detecção de Matrículas YOLOv9"
+ }
+ }
+}
diff --git a/web/public/locales/ro/audio.json b/web/public/locales/ro/audio.json
new file mode 100644
index 000000000..dc0d24191
--- /dev/null
+++ b/web/public/locales/ro/audio.json
@@ -0,0 +1,302 @@
+{
+ "gunshot": "Foc de arma",
+ "machine_gun": "Mitraliera",
+ "speech": "Vorbire",
+ "babbling": "Murmur",
+ "yell": "Striga",
+ "bellow": "Sub",
+ "dog": "Caine",
+ "horse": "Cal",
+ "bird": "Pasare",
+ "sheep": "Oaie",
+ "boat": "Barca",
+ "motorcycle": "Motocicleta",
+ "bus": "Autobuz",
+ "train": "Tren",
+ "skateboard": "Skateboard",
+ "camera": "Camera foto",
+ "bicycle": "Bicicleta",
+ "car": "Masina",
+ "cat": "Pisica",
+ "animal": "Animal",
+ "goat": "Capra",
+ "keyboard": "Orga",
+ "vehicle": "Vehicul",
+ "sink": "Chiuveta",
+ "scissors": "Foarfeca",
+ "hair_dryer": "Uscator de Par",
+ "door": "Usa",
+ "blender": "Blender",
+ "mouse": "Soarece",
+ "clock": "Ceas",
+ "toothbrush": "Periuta de Dinti",
+ "bark": "Latrat",
+ "burping": "Ragaie",
+ "hiccup": "Sughite",
+ "bass_drum": "Toba Bass",
+ "fart": "Basina",
+ "bell": "Clopotel",
+ "reggae": "Reggae",
+ "accordion": "Acordeon",
+ "trombone": "Trombon",
+ "punk_rock": "Punk Rock",
+ "church_bell": "Clopot de biserica",
+ "sanding": "Slefuire",
+ "whispering": "Soapte",
+ "laughter": "Raset",
+ "crying": "Planset",
+ "choir": "Cor",
+ "singing": "Canta",
+ "whoop": "Tusi",
+ "yodeling": "Vocalize",
+ "snicker": "Chicotit",
+ "sigh": "Suspin",
+ "mantra": "Mantra",
+ "child_singing": "Cantec de copil",
+ "snoring": "Sforaie",
+ "whistling": "Fluiera",
+ "breathing": "Respira",
+ "cough": "Tuseste",
+ "throat_clearing": "Curata gatul",
+ "wheeze": "Gafaie",
+ "gasp": "Suspina",
+ "snort": "Horcaie",
+ "humming": "Fredoneaza",
+ "groan": "Geamat",
+ "grunt": "Mormait",
+ "pant": "Gafaie",
+ "sneeze": "stranuta",
+ "sniff": "Adulmeca",
+ "run": "Fuge",
+ "footsteps": "Pasi",
+ "chewing": "Mesteca",
+ "hands": "Maini",
+ "clapping": "Aplauda",
+ "heartbeat": "Batai inima",
+ "cheering": "Incurajeaza",
+ "applause": "Aplauda",
+ "crowd": "Multime",
+ "pets": "Animal de companie",
+ "purr": "Toarce",
+ "meow": "Miau",
+ "duck": "Rata",
+ "quack": "Mac",
+ "goose": "Gasca",
+ "wild_animals": "Animal Salbatic",
+ "cattle": "Vita",
+ "moo": "Muu",
+ "cowbell": "Clopot",
+ "pig": "Porc",
+ "oink": "Guit",
+ "chicken": "Gaina",
+ "cock_a_doodle_doo": "Cucurigu",
+ "turkey": "Curcan",
+ "roar": "Raget",
+ "chirp": "Cipcirit",
+ "pigeon": "Porumbel",
+ "crow": "Cioara",
+ "owl": "Bufnita",
+ "dogs": "Caini",
+ "rats": "Sobolani",
+ "insect": "Insecta",
+ "cricket": "Greier",
+ "mosquito": "Tantar",
+ "fly": "Musca",
+ "frog": "Broasca",
+ "snake": "Sarpe",
+ "music": "Muzica",
+ "musical_instrument": "Instrument Muzical",
+ "electric_guitar": "Chitara Electronica",
+ "guitar": "Chitara",
+ "bass_guitar": "Chitara Bass",
+ "acoustic_guitar": "Chitara Acustica",
+ "tapping": "Bataie",
+ "banjo": "Banjo",
+ "mandolin": "Mandolina",
+ "piano": "Pian",
+ "electric_piano": "Pian Electronic",
+ "synthesizer": "Sintetizator",
+ "percussion": "Percutie",
+ "drum_kit": "Tobe",
+ "drum": "Toba",
+ "tambourine": "Tamburina",
+ "gong": "Gong",
+ "orchestra": "Orchestra",
+ "trumpet": "Trompeta",
+ "violin": "Violin",
+ "cello": "Violoncel",
+ "flute": "Flaut",
+ "saxophone": "Saxofon",
+ "clarinet": "Clarinet",
+ "harp": "Harpa",
+ "bicycle_bell": "Sonerie de bicicleta",
+ "tuning_fork": "Diapazon",
+ "harmonica": "Muzicuta",
+ "bagpipes": "Cimpoi",
+ "pop_music": "Muzica Pop",
+ "hip_hop_music": "Muzica Hip-Hop",
+ "rock_music": "Muzica Rock",
+ "heavy_metal": "Heavy Metal",
+ "progressive_rock": "Rock Progresiv",
+ "rock_and_roll": "Rock and Roll",
+ "soul_music": "Muzica Soul",
+ "funk": "Funk",
+ "folk_music": "Muzica Folk",
+ "country": "Muzica Country",
+ "jazz": "Jazz",
+ "disco": "Muzica Disco",
+ "classical_music": "Muzica Clasica",
+ "opera": "Opera",
+ "electronic_music": "Muzica Electronica",
+ "house_music": "Muzica House",
+ "techno": "Muzica Techno",
+ "dubstep": "Dubstep",
+ "drum_and_bass": "Drum and Bass",
+ "electronica": "Electronica",
+ "electronic_dance_music": "Muzica de dans electronica",
+ "ambient_music": "Muzica Ambientala",
+ "trance_music": "Muzica Trance",
+ "music_of_latin_america": "Muzica Latino",
+ "salsa_music": "Salsa",
+ "flamenco": "Flamenco",
+ "blues": "Blues",
+ "vocal_music": "Muzica Vocala",
+ "a_capella": "A Capella",
+ "music_of_africa": "Muzica Africana",
+ "christian_music": "Muzica Crestina",
+ "gospel_music": "Muzica Gaspel",
+ "music_of_asia": "Muzica Asiatica",
+ "music_of_bollywood": "Muzica Bollywood",
+ "traditional_music": "Muzica Traditionala",
+ "song": "Cantec",
+ "background_music": "Muzica de fundal",
+ "theme_music": "Muzica Tematica",
+ "jingle": "Colind",
+ "lullaby": "Muzica de adormit copiii",
+ "christmas_music": "Colind",
+ "dance_music": "Muzica Dance",
+ "wedding_music": "Muzica de nunta",
+ "happy_music": "Muzica Vesela",
+ "sad_music": "Muzica Trista",
+ "wind": "Vant",
+ "rustling_leaves": "Fosnet de frunze",
+ "wind_noise": "Zgomot de vant",
+ "thunderstorm": "Furtuna",
+ "thunder": "Tunet",
+ "water": "Apa",
+ "rain": "Ploaie",
+ "raindrop": "Picaturi",
+ "waterfall": "Cascada",
+ "ocean": "Ocean",
+ "waves": "Valuri",
+ "steam": "Abur",
+ "fire": "Foc",
+ "rowboat": "Barca cu vasle",
+ "sailboat": "Barca cu panza",
+ "motorboat": "Barca cu motor",
+ "ship": "Vapor",
+ "motor_vehicle": "Autovehicul",
+ "toot": "claxon",
+ "car_alarm": "Alarma de masina",
+ "power_windows": "Geamuri electrice",
+ "skidding": "Derapaj",
+ "tire_squeal": "Scartait de roti",
+ "car_passing_by": "Masina in trecere",
+ "race_car": "Masina de curse",
+ "truck": "Camion",
+ "air_horn": "claxon",
+ "ice_cream_truck": "Masina de inghetata",
+ "police_car": "Masina de politie",
+ "ambulance": "Ambulanta",
+ "fire_engine": "Masina de pompieri",
+ "traffic_noise": "Zgomot de trafic",
+ "train_wheels_squealing": "Scartait de roti de tren",
+ "subway": "Metrou",
+ "aircraft": "Aeronava",
+ "aircraft_engine": "Motor de avion",
+ "jet_engine": "Motor cu reactie",
+ "propeller": "Elice",
+ "helicopter": "Elicopter",
+ "fixed-wing_aircraft": "Aeronava cu aripi fixe",
+ "engine": "Motor",
+ "lawn_mower": "Masina de tuns iarba",
+ "chainsaw": "Drujba",
+ "engine_starting": "Pornire motor",
+ "idling": "Relanti",
+ "accelerating": "Accelerare",
+ "doorbell": "Sonerie",
+ "sliding_door": "Usa culisanta",
+ "slam": "Trantit",
+ "dishes": "Vase",
+ "cutlery": "Tacamuri",
+ "chopping": "Tocare",
+ "frying": "Prajire",
+ "microwave_oven": "Cuptor cu microunde",
+ "water_tap": "Robine",
+ "bathtub": "Cada",
+ "toilet_flush": "Tras apa",
+ "electric_toothbrush": "Periuta de dinti electronica",
+ "vacuum_cleaner": "Aspirator",
+ "keys_jangling": "Zornait de chei",
+ "coin": "Moneda",
+ "zipper": "Fermoar",
+ "electric_shaver": "Aparat de ras electric",
+ "shuffling_cards": "Amestecat de carti",
+ "typing": "Scrie",
+ "typewriter": "Masina de scris",
+ "computer_keyboard": "Tastatura",
+ "writing": "Scrie",
+ "alarm": "Alarma",
+ "telephone": "Telefon",
+ "telephone_bell_ringing": "Sonerie de telefon",
+ "ringtone": "Ringtone",
+ "dial_tone": "Ton",
+ "busy_signal": "Ocupat",
+ "alarm_clock": "Alarma de trezire",
+ "siren": "Sirena",
+ "smoke_detector": "Detector de fum",
+ "fire_alarm": "Alarma de incendiu",
+ "foghorn": "Sirena de ceata",
+ "whistle": "Fluierat",
+ "mechanisms": "Mecanism",
+ "gears": "Rotite",
+ "pulleys": "Scripeti",
+ "sewing_machine": "Masina de cusut",
+ "mechanical_fan": "Ventilator mecanic",
+ "air_conditioning": "Aer Conditionat",
+ "printer": "Imprimanta",
+ "tools": "Unelte",
+ "hammer": "Ciocan",
+ "jackhammer": "Picamer",
+ "sawing": "Taiere",
+ "filing": "Umplere",
+ "power_tool": "Scule Electrice",
+ "drill": "Gaurire",
+ "explosion": "Explozie",
+ "artillery_fire": "Foc de artilerie",
+ "cap_gun": "Pistol cu capse",
+ "fireworks": "Foc de artificii",
+ "firecracker": "Pocnitoare",
+ "burst": "Izbucni",
+ "eruption": "Eruptie",
+ "boom": "Bum",
+ "wood": "Lemn",
+ "chop": "Reteza",
+ "splinter": "Aschie",
+ "crack": "Crapa",
+ "glass": "Geam",
+ "chink": "Fisura",
+ "shatter": "Sparge",
+ "silence": "Liniste",
+ "sound_effect": "Efect sonor",
+ "environmental_noise": "Zgomot de fundal",
+ "static": "Electrostatice",
+ "white_noise": "Zgomot alb",
+ "television": "Televizor",
+ "radio": "Radio",
+ "scream": "Tipa",
+ "chant": "Cântec",
+ "synthetic_singing": "Cântat sintetic",
+ "rapping": "Rap",
+ "shuffle": "Amestecă"
+}
diff --git a/web/public/locales/ro/common.json b/web/public/locales/ro/common.json
new file mode 100644
index 000000000..96d8d7e3a
--- /dev/null
+++ b/web/public/locales/ro/common.json
@@ -0,0 +1,222 @@
+{
+ "time": {
+ "untilForTime": "Pana la {{time}}",
+ "untilForRestart": "Pana la repornirea Frigate.",
+ "untilRestart": "Pana la repornire",
+ "ago": "{{timeAgo}} in urma",
+ "justNow": "Acum",
+ "today": "Azi",
+ "yesterday": "Ieri",
+ "last7": "Ultimele 7 zile",
+ "last14": "Ultimele 14 zile",
+ "last30": "Ultimele 30 de zile",
+ "thisWeek": "Săptămâna aceasta",
+ "lastWeek": "Săptămâna trecută",
+ "thisMonth": "Luna aceasta",
+ "lastMonth": "Luna trecuta",
+ "5minutes": "5 minute",
+ "10minutes": "10 minute",
+ "formattedTimestampMonthDayYear": {
+ "12hour": "d MMM, yyyy",
+ "24hour": "d MMM, yyy"
+ },
+ "formattedTimestampHourMinute": {
+ "12hour": "h:mm aaa",
+ "24hour": "HH:mm"
+ },
+ "formattedTimestampHourMinuteSecond": {
+ "12hour": "h:mm:ss aaa",
+ "24hour": "HH:mm:ss"
+ },
+ "formattedTimestampMonthDayHourMinute": {
+ "12hour": "d MMM, h:mm aaa",
+ "24hour": "d MMM, HH:mm"
+ },
+ "formattedTimestampMonthDayYearHourMinute": {
+ "12hour": "d MMM yyyy, h:mm aaa",
+ "24hour": "d MMM yyyy, HH:mm"
+ },
+ "formattedTimestampMonthDay": "d MMM",
+ "formattedTimestampFilename": {
+ "12hour": "dd-MM-yy-h-mm-ss-a",
+ "24hour": "dd-MM-yy-HH-mm-ss"
+ },
+ "30minutes": "30 de minute",
+ "1hour": "O oră",
+ "12hours": "12 ore",
+ "24hours": "24 ore",
+ "pm": "PM",
+ "am": "AM",
+ "mo": "{{time}}lună",
+ "yr": "{{time}}an",
+ "year_one": "{{time}} an",
+ "year_few": "{{time}} ani",
+ "year_other": "{{time}} de ani",
+ "d": "{{time}}z",
+ "h": "{{time}}o",
+ "m": "{{time}}m",
+ "s": "{{time}}s",
+ "formattedTimestamp": {
+ "12hour": "d MMM, h:mm:ss aaa",
+ "24hour": "d MMM, HH:mm:ss"
+ },
+ "formattedTimestamp2": {
+ "12hour": "dd/MM h:mm:ssa",
+ "24hour": "d MMM HH:mm:ss"
+ },
+ "month_one": "{{time}} lună",
+ "month_few": "{{time}} luni",
+ "month_other": "{{time}} de luni",
+ "day_one": "{{time}} zi",
+ "day_few": "{{time}} zile",
+ "day_other": "{{time}} de zile",
+ "hour_one": "{{time}} oră",
+ "hour_few": "{{time}} ore",
+ "hour_other": "{{time}} de ore",
+ "minute_one": "{{time}} minut",
+ "minute_few": "{{time}} minute",
+ "minute_other": "{{time}} de minute",
+ "second_one": "{{time}} secundă",
+ "second_few": "{{time}} secunde",
+ "second_other": "{{time}} de secunde"
+ },
+ "menu": {
+ "documentation": {
+ "title": "Documentație",
+ "label": "Documentație Frigate"
+ },
+ "explore": "Explorează",
+ "uiPlayground": "UI Playground",
+ "faceLibrary": "Biblioteca de fețe",
+ "export": "Exportă",
+ "language": {
+ "ca": "Català (Catalană)",
+ "withSystem": {
+ "label": "Utilizează setările de limbă ale sistemului"
+ },
+ "ja": "日本語 (Japoneză)",
+ "fa": "فارسی (Persiană)",
+ "pl": "Polski (Poloneză)",
+ "uk": "Українська (Ucrainiană)",
+ "he": "עברית (Ebraică)",
+ "yue": "粵語 (Cantoneză)",
+ "en": "English (Engleză)",
+ "de": "Deutsch (Germană)",
+ "es": "Español (Spaniolă)",
+ "zhCN": "简体中文 (Chineză simplificată)",
+ "hi": "हिन्दी (Hindi)",
+ "fr": "Français (Franceză)",
+ "ar": "العربية (Arabă)",
+ "pt": "Português (Portugheză)",
+ "ru": "Русский (Rusă)",
+ "tr": "Türkçe (Turcă)",
+ "it": "Italiano (Italiană)",
+ "nl": "Nederlands (Olandeză)",
+ "sv": "Svenska (Suedeză)",
+ "cs": "Čeština (Cehă)",
+ "nb": "Norsk Bokmål (Norvegiană Bokmål)",
+ "ko": "한국어 (Coreană)",
+ "vi": "Tiếng Việt (Vietnameză)",
+ "da": "Dansk (Daneză)",
+ "sk": "Slovenčina (Slovacă)",
+ "el": "Ελληνικά (Greacă)",
+ "ro": "Română (Română)",
+ "hu": "Magyar (Maghiară)",
+ "fi": "Suomi (Finlandeză)",
+ "th": "ไทย (Thailandeză)"
+ },
+ "theme": {
+ "default": "Implicit",
+ "highcontrast": "Contrast ridicat",
+ "label": "Temă",
+ "blue": "Albastru",
+ "green": "Verde",
+ "nord": "Nord",
+ "red": "Roșu"
+ },
+ "user": {
+ "title": "Utilizator"
+ },
+ "live": {
+ "cameras": {
+ "count_one": "{{count}} cameră",
+ "count_few": "{{count}} camere",
+ "count_other": "{{count}} de camere",
+ "title": "Camere"
+ },
+ "title": "Live",
+ "allCameras": "Toate camerele"
+ },
+ "help": "Ajutor",
+ "system": "Sistem",
+ "systemMetrics": "Metricile sistemului",
+ "configuration": "Configurație",
+ "systemLogs": "Jurnale de sistem",
+ "settings": "Setări",
+ "configurationEditor": "Editor de configurare",
+ "languages": "Limba",
+ "appearance": "Aspect",
+ "darkMode": {
+ "label": "Modul întunecat",
+ "light": "Deschis",
+ "dark": "Întunecat",
+ "withSystem": {
+ "label": "Utilizează setările de sistem pentru modul deschis sau întunecat"
+ }
+ },
+ "withSystem": "Sistem",
+ "restart": "Repornește Frigate",
+ "review": "Revizuire"
+ },
+ "button": {
+ "cameraAudio": "Sunet cameră",
+ "apply": "Aplică",
+ "reset": "Resetare",
+ "done": "Gata",
+ "enabled": "Activat",
+ "copyCoordinates": "Copiază coordonate",
+ "on": "PORNIT",
+ "off": "OPRIT",
+ "edit": "Editează",
+ "delete": "Șterge",
+ "yes": "Da",
+ "no": "Nu",
+ "download": "Descarcă",
+ "info": "Informații",
+ "enable": "Activează",
+ "twoWayTalk": "Conversație bidirecțională",
+ "disabled": "Dezactivat",
+ "disable": "Dezactivează",
+ "save": "Salvează",
+ "saving": "Se salvează…",
+ "cancel": "Renunță",
+ "close": "Închide",
+ "copy": "Copiază",
+ "back": "Înapoi",
+ "history": "Istorie",
+ "fullscreen": "Ecran complet",
+ "exitFullscreen": "ieși din ecran complet",
+ "pictureInPicture": "Imagine în imagine",
+ "suspended": "Suspendat",
+ "unsuspended": "Nesuspendat",
+ "play": "Redă",
+ "unselect": "Deselectează",
+ "export": "Exportă",
+ "deleteNow": "Șterge acum",
+ "next": "Următorul"
+ },
+ "unit": {
+ "speed": {
+ "mph": "mile/h",
+ "kph": "km/h"
+ },
+ "length": {
+ "feet": "picioare",
+ "meters": "metri"
+ }
+ },
+ "label": {
+ "back": "Mergi înapoi"
+ },
+ "selectItem": "Selectează {{item}}"
+}
diff --git a/web/public/locales/ro/components/auth.json b/web/public/locales/ro/components/auth.json
new file mode 100644
index 000000000..4fa303853
--- /dev/null
+++ b/web/public/locales/ro/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "user": "Nume utilizator",
+ "password": "Parola",
+ "login": "Logare",
+ "errors": {
+ "passwordRequired": "Parola este necesara",
+ "rateLimit": "Limita a fost depasita. Reincearca mai tarziu.",
+ "loginFailed": "Logare esuata",
+ "webUnknownError": "Eroare necunoscuta. Verifica logurile din consola.",
+ "usernameRequired": "Utilizatorul este necesar",
+ "unknownError": "Eroare necunoscuta. Verifica logurile."
+ }
+ }
+}
diff --git a/web/public/locales/ro/components/camera.json b/web/public/locales/ro/components/camera.json
new file mode 100644
index 000000000..1f36c0706
--- /dev/null
+++ b/web/public/locales/ro/components/camera.json
@@ -0,0 +1,78 @@
+{
+ "group": {
+ "label": "Grupuri de Camere",
+ "add": "Adauga Grup de Camere",
+ "edit": "Editeaza Grupul de Camere",
+ "delete": {
+ "label": "Sterge Grupul de Camere",
+ "confirm": {
+ "title": "Confirma Stergerea",
+ "desc": "Esti sigur ca doresti sa stergi gruoul de camere {{name}}?"
+ }
+ },
+ "name": {
+ "label": "Nume",
+ "placeholder": "Introdu un nume…",
+ "errorMessage": {
+ "mustLeastCharacters": "Numele grupului de cmere trebuie sa sontina minim 2 caractere.",
+ "exists": "Numele grupului de camere exista deja.",
+ "nameMustNotPeriod": "Numele grupului de camere nu trebuia sa contina punct.",
+ "invalid": "Nume invalid pentru grupul de camere."
+ }
+ },
+ "cameras": {
+ "label": "Camere",
+ "desc": "Selecteaza camere pentru acest grup."
+ },
+ "icon": "Pictograma",
+ "success": "Grupul de camere {{name}}) a fost salvat.",
+ "camera": {
+ "setting": {
+ "label": "Setarile de Stream ale Camerei",
+ "title": "{{cameraName}} Setari de Stream",
+ "stream": "Stream",
+ "placeholder": "Alege un stream",
+ "desc": "Schimbă opțiunile de streaming live pentru panoul acestui grup de camere. Aceste setări sunt specifice dispozitivului/browser-ului.",
+ "audioIsUnavailable": "Sunetul nu este disponibil pentru acest stream",
+ "audioIsAvailable": "Sunetul este disponibil pentru acest stream",
+ "audio": {
+ "tips": {
+ "title": "Sunetul trebuie să fie redat de camera ta și configurat în go2rtc pentru acest stream.",
+ "document": "Citește documentația "
+ }
+ },
+ "streamMethod": {
+ "label": "Metoda de streaming",
+ "placeholder": "Alege o metodă de streaming",
+ "method": {
+ "noStreaming": {
+ "label": "Fără streaming",
+ "desc": "Imaginile camerelor se vor actualiza doar o dată pe minut și nu va exista streaming live."
+ },
+ "smartStreaming": {
+ "label": "Streaming Inteligent (recomandat)",
+ "desc": "Streaming-ul inteligent va actualiza imaginea camerei o dată pe minut când nu există activitate detectabilă, pentru a economisi trafic de date și resurse. Când se detectează activitate, imaginea trece la streaming live."
+ },
+ "continuousStreaming": {
+ "label": "Streaming continu",
+ "desc": {
+ "title": "Imaginea camerei va fi întotdeauna un stream live când este vizibilă pe panou, chiar dacă nu se detectează activitate.",
+ "warning": "Streaming-ul continuu poate provoca un consum mare de lățime de bandă și probleme de performanță. Folosește cu prudență."
+ }
+ }
+ }
+ },
+ "compatibilityMode": {
+ "label": "Mod compatibilitate"
+ }
+ }
+ }
+ },
+ "debug": {
+ "options": {
+ "label": "Setari",
+ "title": "Optiuni",
+ "showOptions": "Arata Optiuni"
+ }
+ }
+}
diff --git a/web/public/locales/ro/components/dialog.json b/web/public/locales/ro/components/dialog.json
new file mode 100644
index 000000000..951adc80f
--- /dev/null
+++ b/web/public/locales/ro/components/dialog.json
@@ -0,0 +1,98 @@
+{
+ "restart": {
+ "title": "Esti sigur ca doresti sa repornesti Frigate?",
+ "button": "Reporneste",
+ "restarting": {
+ "title": "Frigate Reporneste",
+ "content": "Aceasta pagina se va reincarca in {{countdown}} secunde.",
+ "button": "Forteaza Reincarcarea Acum"
+ }
+ },
+ "explore": {
+ "plus": {
+ "review": {
+ "true": {
+ "label": "Confirma aceasta eticheta pentru Frigate Plus",
+ "true_one": "Asta e o {{label}}",
+ "true_few": "Astea sunt {{label}}",
+ "true_other": "Astea sunt {{label}}"
+ },
+ "false": {
+ "label": "Nu confirma aceasta eticheta pentru Frigate Plus",
+ "false_one": "Asta nu este {{label}}",
+ "false_few": "Astea nu sunt {{label}}",
+ "false_other": "Astea nu sunt {{label}}"
+ },
+ "state": {
+ "submitted": "Trimis"
+ },
+ "question": {
+ "label": "Confirmă această etichetă pentru Frigate Plus",
+ "ask_a": "Este acest obiect un {{label}}?",
+ "ask_an": "Este acest obiect un {{label}}?",
+ "ask_full": "Este acest obiect un {{untranslatedLabel}} ({{translatedLabel}})?"
+ }
+ },
+ "submitToPlus": {
+ "label": "Trimite catre Frigate+",
+ "desc": "Obiectele din locațiile pe care dorești să le eviți nu sunt false-pozitive. Marcarea lor ca false-pozitive va induce confuzie modelul."
+ }
+ },
+ "video": {
+ "viewInHistory": "Vezi în istoric"
+ }
+ },
+ "recording": {
+ "button": {
+ "deleteNow": "Sterge Acum"
+ }
+ },
+ "export": {
+ "time": {
+ "custom": "personalizat",
+ "fromTimeline": "Selectează din Cronologie",
+ "lastHour_one": "Ultima oră",
+ "lastHour_few": "Ultimele {{count}} ore",
+ "lastHour_other": "Ultimele {{count}} ore",
+ "start": {
+ "title": "Ora de început",
+ "label": "Selectează ora de început"
+ },
+ "end": {
+ "title": "Oră terminare",
+ "label": "Selectează ora de terminare"
+ }
+ },
+ "name": {
+ "placeholder": "Denumește exportul"
+ },
+ "select": "Selectează",
+ "export": "Exportă",
+ "selectOrExport": "Selectează sau exportă",
+ "toast": {
+ "success": "Exportul a început cu succes. Vizualizați fișierul în dosarul /exports.",
+ "error": {
+ "failed": "Eroare la pornirea exportului: {{error}}",
+ "endTimeMustAfterStartTime": "Ora de sfârșit trebuie să fie după ora de început",
+ "noVaildTimeSelected": "Nu a fost selectat un interval de timp valid"
+ }
+ },
+ "fromTimeline": {
+ "saveExport": "Salvează exportul",
+ "previewExport": "Previzualizează exportul"
+ }
+ },
+ "streaming": {
+ "label": "Stream",
+ "restreaming": {
+ "disabled": "Restreaming-ul nu este activat pentru această cameră.",
+ "desc": {
+ "title": "Configurează go2rtc pentru opțiuni suplimentare de vizualizare live și audio pentru această cameră.",
+ "readTheDocumentation": "Citește documentația"
+ }
+ },
+ "showStats": {
+ "label": "Afișează statistici streaming"
+ }
+ }
+}
diff --git a/web/public/locales/ro/components/filter.json b/web/public/locales/ro/components/filter.json
new file mode 100644
index 000000000..41fbae497
--- /dev/null
+++ b/web/public/locales/ro/components/filter.json
@@ -0,0 +1,63 @@
+{
+ "filter": "Filtru",
+ "labels": {
+ "label": "Etichete",
+ "all": {
+ "title": "Toate etichetele",
+ "short": "Etichete"
+ },
+ "count_one": "Etichetă {{count}}",
+ "count_other": "{{count}} etichete"
+ },
+ "dates": {
+ "selectPreset": "Selectează o presetare…",
+ "all": {
+ "title": "Toate datele",
+ "short": "Date"
+ }
+ },
+ "zones": {
+ "label": "Zone",
+ "all": {
+ "title": "Toate zonele",
+ "short": "Zone"
+ }
+ },
+ "reset": {
+ "label": "Resetează filtrele la valorile implicite"
+ },
+ "timeRange": "Interval de timp",
+ "subLabels": {
+ "label": "Sub-etichete",
+ "all": "Toate sub-etichetele"
+ },
+ "more": "Mai multe filtre",
+ "score": "Scor",
+ "estimatedSpeed": "Viteza estimată ({{unit}})",
+ "features": {
+ "label": "Caracteristici",
+ "hasSnapshot": "Are snapshot",
+ "hasVideoClip": "Are un videoclip",
+ "submittedToFrigatePlus": {
+ "label": "Trimis către Frigate+",
+ "tips": "Trebuie mai întâi să filtrezi obiectele urmărite care au un snapshot.detect, verifica logurile de eroare"
+ },
+ "cameraDisabled": "Camera este dezactivata",
+ "stats": {
+ "streamType": {
+ "title": "Tip Stream:",
+ "short": "Tip"
+ },
+ "bandwidth": {
+ "title": "Latime de Banda:",
+ "short": "Latime de Banda"
+ },
+ "latency": {
+ "title": "Latenta:",
+ "value": "{{seconds}} secunde",
+ "short": {
+ "title": "Latenta",
+ "value": "{{seconds}} sec"
+ }
+ },
+ "totalFrames": "Total Cadre:",
+ "droppedFrames": {
+ "title": "Cadre Pierdute:",
+ "short": {
+ "title": "Pierdut",
+ "value": "{{droppedFrames}} cadre"
+ }
+ },
+ "decodedFrames": "Cadre Decodate:",
+ "droppedFrameRate": "Rata de Cadre Pierdute:"
+ },
+ "toast": {
+ "error": {
+ "submitFrigatePlusFailed": "Eraoare trimitere Cadru catre Frigate+"
+ },
+ "success": {
+ "submittedFrigatePlus": "Cadru trimis cu Succes catre Frigate+"
+ }
+ }
+}
diff --git a/web/public/locales/ro/objects.json b/web/public/locales/ro/objects.json
new file mode 100644
index 000000000..05951c8da
--- /dev/null
+++ b/web/public/locales/ro/objects.json
@@ -0,0 +1,120 @@
+{
+ "person": "Persoana",
+ "bicycle": "Bicicleta",
+ "car": "Masina",
+ "airplane": "Avion",
+ "bus": "Autobuz",
+ "train": "Tren",
+ "boat": "Barca",
+ "fire_hydrant": "Hidrant",
+ "street_sign": "Semn de Circulatie",
+ "stop_sign": "Semn de Stop",
+ "parking_meter": "Automat de Parcare",
+ "bench": "Bancheta",
+ "bird": "Pasare",
+ "cat": "Pisica",
+ "dog": "Caine",
+ "horse": "Cal",
+ "cow": "Vaca",
+ "elephant": "Elefant",
+ "bear": "Urs",
+ "giraffe": "Girafa",
+ "hat": "Palarie",
+ "backpack": "Rucsac",
+ "umbrella": "Umbrela",
+ "shoe": "Pantof",
+ "eye_glasses": "Ochelari",
+ "tie": "Cravata",
+ "suitcase": "Servieta",
+ "frisbee": "Frisbee",
+ "skis": "Schiuri",
+ "snowboard": "Placa de Snowboard",
+ "sports_ball": "Minge pentru Sport",
+ "kite": "Zmeu",
+ "baseball_bat": "Bata de Baseball",
+ "baseball_glove": "Manusa de Baseball",
+ "skateboard": "Skateboard",
+ "surfboard": "Placa de Surf",
+ "tennis_racket": "Racheta de Tenis",
+ "bottle": "Sticla",
+ "plate": "Placa",
+ "wine_glass": "Pahar de Vin",
+ "cup": "Ceasca",
+ "fork": "Furculita",
+ "knife": "Cutit",
+ "spoon": "Lingura",
+ "bowl": "Castron",
+ "banana": "Banana",
+ "apple": "Mar",
+ "motorcycle": "Motocicleta",
+ "traffic_light": "Semafor",
+ "sheep": "Oaie",
+ "zebra": "Zebra",
+ "handbag": "Geanta de mana",
+ "sandwich": "Sandwich",
+ "gls": "GLS",
+ "dpd": "DPD",
+ "sink": "Chiuveta",
+ "raccoon": "Raton",
+ "orange": "Portocala",
+ "laptop": "Laptop",
+ "fox": "Vulpe",
+ "animal": "Animal",
+ "package": "Pachet",
+ "remote": "Telecomanda",
+ "toilet": "Toaleta",
+ "amazon": "Amazon",
+ "broccoli": "Broccoli",
+ "carrot": "Morcov",
+ "hot_dog": "Hot Dog",
+ "dining_table": "Masa",
+ "hair_dryer": "Uscator de Par",
+ "pizza": "Pizza",
+ "donut": "Gogoasa",
+ "teddy_bear": "Ursulet de Plus",
+ "waste_bin": "Tomberon",
+ "cake": "Tort",
+ "window": "Fereastra",
+ "chair": "Scaun",
+ "door": "Usa",
+ "on_demand": "La Cerere",
+ "usps": "USPS",
+ "couch": "Canapea",
+ "blender": "Blender",
+ "scissors": "Foarfeca",
+ "cell_phone": "Telefon Mobil",
+ "potted_plant": "Ghiveci de Plante",
+ "bed": "Pat",
+ "refrigerator": "Frigider",
+ "mirror": "Oglinda",
+ "desk": "Birou",
+ "tv": "TV",
+ "ups": "UPS",
+ "fedex": "FedEx",
+ "mouse": "Soarece",
+ "keyboard": "Orga",
+ "microwave": "Microunde",
+ "oven": "Cuptor",
+ "rabbit": "Iepure",
+ "robot_lawnmower": "Robot de Tuns Iarba",
+ "toaster": "Prajitor de Paine",
+ "book": "Carte",
+ "clock": "Ceas",
+ "vase": "Vaza",
+ "toothbrush": "Periuta de Dinti",
+ "hair_brush": "Perie de Par",
+ "vehicle": "Vehicul",
+ "squirrel": "Veverita",
+ "deer": "Caprioara",
+ "bark": "Latrat",
+ "goat": "Capra",
+ "bbq_grill": "Gratar",
+ "face": "Fata",
+ "purolator": "Purolator",
+ "license_plate": "Numar de Inmatriculare",
+ "dhl": "DHL",
+ "an_post": "An Post",
+ "postnl": "PostNL",
+ "nzpost": "NZPost",
+ "postnord": "PostNord"
+}
diff --git a/web/public/locales/ro/views/configEditor.json b/web/public/locales/ro/views/configEditor.json
new file mode 100644
index 000000000..5308e44fa
--- /dev/null
+++ b/web/public/locales/ro/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "documentTitle": "Editor Setari - Frigate",
+ "configEditor": "Editor Setari",
+ "copyConfig": "Copiaza Setarile",
+ "saveAndRestart": "Salveaza & Reporneste",
+ "saveOnly": "Doar Salveaza",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Setari copiate in clipboard."
+ },
+ "error": {
+ "savingError": "Eroare la salvarea setarilor"
+ }
+ },
+ "confirm": "Ieși fără să salvezi?"
+}
diff --git a/web/public/locales/ro/views/events.json b/web/public/locales/ro/views/events.json
new file mode 100644
index 000000000..7bb12ac3b
--- /dev/null
+++ b/web/public/locales/ro/views/events.json
@@ -0,0 +1,38 @@
+{
+ "alerts": "Alerte",
+ "motion": {
+ "label": "Miscare",
+ "only": "Doar Miscare"
+ },
+ "allCameras": "Toate Camerele",
+ "empty": {
+ "alert": "Nu sunt alerte de revizuit",
+ "detection": "Nu sunt detectii de revizuit",
+ "motion": "Nu au fost gasite date despre miscare"
+ },
+ "timeline": "Cronologie",
+ "timeline.aria": "Selecteaza Cronologie",
+ "events": {
+ "aria": "Selecteaza Evenimente",
+ "noFoundForTimePeriod": "Niciun eveniment gasit pentru acest interval de timp.",
+ "label": "Evenimente"
+ },
+ "documentTitle": "Revizuieste - Frigate",
+ "recordings": {
+ "documentTitle": "Inregistrari - frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "Ultimele 24 de ore"
+ },
+ "markAsReviewed": "Marcheaza ca Revizuit",
+ "markTheseItemsAsReviewed": "Marcheaza aceste articole ca revizuite",
+ "newReviewItems": {
+ "label": "Vezi articole noi de revizuit",
+ "button": "Articole Noi de Revizuit"
+ },
+ "camera": "Camera foto",
+ "detections": "Detectii",
+ "detected": "detectat",
+ "selected_one": "{{count}} selectate",
+ "selected_other": "{{count}} selectate"
+}
diff --git a/web/public/locales/ro/views/explore.json b/web/public/locales/ro/views/explore.json
new file mode 100644
index 000000000..e50ddb279
--- /dev/null
+++ b/web/public/locales/ro/views/explore.json
@@ -0,0 +1,58 @@
+{
+ "documentTitle": "Exploreaza - Frigate",
+ "generativeAI": "AI Generativ",
+ "exploreIsUnavailable": {
+ "title": "Explorarea este Indisponibila",
+ "embeddingsReindexing": {
+ "startingUp": "Porneste…",
+ "estimatedTime": "Timp ramas estimat:",
+ "finishingShortly": "Termina curand",
+ "step": {
+ "descriptionsEmbedded": "Descrieri încorporate: ",
+ "trackedObjectsProcessed": "Obiecte urmărite procesate: ",
+ "thumbnailsEmbedded": "Miniaturi încorporate: "
+ },
+ "context": "Funcția de căutare poate fi utilizată după ce reindexarea obiectelor urmărite este finalizată."
+ },
+ "downloadingModels": {
+ "context": "Frigate descarcă modelele de încorporare necesare pentru a susține funcția de Căutare Semantică. Acest lucru poate dura câteva minute, în funcție de viteza conexiunii rețelei dvs.",
+ "setup": {
+ "visionModel": "Model viziune",
+ "visionModelFeatureExtractor": "Extractor de caracteristici pentru modelul de viziune",
+ "textModel": "Model de text",
+ "textTokenizer": "Tokenizer text"
+ },
+ "tips": {
+ "context": "S-ar putea să doriți să reindexați încorporările obiectelor urmărite odată ce modelele sunt descărcate.",
+ "documentation": "Citește documentația"
+ },
+ "error": "A apărut o eroare. Verifică jurnalele Frigate."
+ }
+ },
+ "type": {
+ "details": "detalii",
+ "snapshot": "snapshot",
+ "video": "video",
+ "object_lifecycle": "ciclul de viață al obiectului"
+ },
+ "objectLifecycle": {
+ "lifecycleItemDesc": {
+ "visible": "{{label}} detectata",
+ "active": "{{label}} a devenit activ",
+ "entered_zone": "{{label}} a intrat în {{zones}}"
+ },
+ "title": "Ciclul de viață al obiectului",
+ "count": "{{first}} din {{second}}",
+ "trackedPoint": "Punct urmărit",
+ "noImageFound": "Nicio imagine găsită pentru această marcă temporală.",
+ "createObjectMask": "Creează mască de obiect",
+ "adjustAnnotationSettings": "Ajustează setările de adnotare",
+ "scrollViewTips": "Derulează pentru a vizualiza momentele semnificative din ciclul de viață al acestui obiect.",
+ "autoTrackingTips": "Pozițiile casetelor de delimitare vor fi inexacte pentru camerele cu urmărire automată."
+ },
+ "details": {
+ "timestamp": "Marcaj timp"
+ },
+ "exploreMore": "Explorează mai multe obiecte {{label}}",
+ "trackedObjectDetails": "Detalii despre obiectul urmărit"
+}
diff --git a/web/public/locales/ro/views/exports.json b/web/public/locales/ro/views/exports.json
new file mode 100644
index 000000000..acc8a9c79
--- /dev/null
+++ b/web/public/locales/ro/views/exports.json
@@ -0,0 +1,17 @@
+{
+ "search": "Cauta",
+ "documentTitle": "Export - Frigate",
+ "noExports": "Nu au fost gasite exporturi",
+ "deleteExport": "Sterge Export",
+ "deleteExport.desc": "Esti sigur ca vrei sa stergi {{exportName}}?",
+ "editExport": {
+ "title": "Redenumeste Exportul",
+ "saveExport": "Salveaza Export",
+ "desc": "Introdu un nume nou pentru acest Export."
+ },
+ "toast": {
+ "error": {
+ "renameExportFailed": "Eroare redenumire export: {{errorMessage}}"
+ }
+ }
+}
diff --git a/web/public/locales/ro/views/faceLibrary.json b/web/public/locales/ro/views/faceLibrary.json
new file mode 100644
index 000000000..3365c28b4
--- /dev/null
+++ b/web/public/locales/ro/views/faceLibrary.json
@@ -0,0 +1,61 @@
+{
+ "description": {
+ "addFace": "Parcurge adaugare unei colectii noi la Libraria de Fete.",
+ "placeholder": "Introduceti un nume pentru aceasta colectie",
+ "invalidName": "Nume invalid. Numele poate conține doar litere, cifre, spații, apostrofuri, liniuțe de subliniere și cratime."
+ },
+ "details": {
+ "person": "Persoana",
+ "subLabelScore": "Scor subetichetă",
+ "unknown": "Necunoscut",
+ "scoreInfo": "Scorul sub-etichetă este scorul ponderat pentru toate fețele recunoscute, așa că acesta poate diferi de scorul afișat în snapshot.",
+ "face": "Detalii față",
+ "faceDesc": "Detalii despre obiectul urmărit care a generat această față",
+ "timestamp": "Marcaj timp"
+ },
+ "uploadFaceImage": {
+ "desc": "Încarcă o imagine pentru a scana fețele și a include pentru {{pageToggle}}",
+ "title": "Încarcă imaginea feței"
+ },
+ "createFaceLibrary": {
+ "desc": "Creează o colecție nouă",
+ "title": "Creează colecție",
+ "nextSteps": "Pentru a construi o bază solidă:{{label}} ?",
+ "label": "Подтвердить эту метку для Frigate Plus",
+ "ask_a": "Это объект — {{label}}?",
+ "ask_full": "Это объект — {{untranslatedLabel}} ({{translatedLabel}})?"
+ }
+ }
+ },
+ "video": {
+ "viewInHistory": "Посмотреть в истории"
+ }
+ },
+ "export": {
+ "time": {
+ "fromTimeline": "Выбрать на таймлайне",
+ "custom": "Пользовательский",
+ "start": {
+ "title": "Время начала",
+ "label": "Выберите время начала"
+ },
+ "end": {
+ "title": "Время окончания",
+ "label": "Выберите время окончания"
+ },
+ "lastHour_one": "Последний час",
+ "lastHour_few": "Последние {{count}} часа",
+ "lastHour_many": "Последние {{count}} часов"
+ },
+ "name": {
+ "placeholder": "Введите название для экспорта"
+ },
+ "select": "Выбрать",
+ "export": "Экспорт",
+ "selectOrExport": "Выбрать или экспортировать",
+ "toast": {
+ "success": "Экспорт успешно запущен. Файл доступен в папке /exports.",
+ "error": {
+ "failed": "Не удалось запустить экспорт: {{error}}",
+ "noVaildTimeSelected": "Не выбран допустимый временной диапазон",
+ "endTimeMustAfterStartTime": "Время окончания должно быть после времени начала"
+ }
+ },
+ "fromTimeline": {
+ "saveExport": "Сохранить экспорт",
+ "previewExport": "Предпросмотр экспорта"
+ }
+ },
+ "streaming": {
+ "label": "Поток",
+ "restreaming": {
+ "disabled": "Рестриминг не включён для этой камеры.",
+ "desc": {
+ "title": "Настройте go2rtc для дополнительных вариантов просмотра в реальном времени и аудио для этой камеры.",
+ "readTheDocumentation": "Читать документацию"
+ }
+ },
+ "debugView": "Режим отладки",
+ "showStats": {
+ "label": "Отображение статистики потока",
+ "desc": "Включите эту опцию, чтобы отображать статистику потока в виде наложения на изображение с камеры."
+ }
+ },
+ "search": {
+ "saveSearch": {
+ "label": "Сохранить поиск",
+ "placeholder": "Введите название для вашего поиска",
+ "overwrite": "{{searchName}} уже существует. Сохранение перезапишет существующее значение.",
+ "success": "Поиск {{searchName}} был сохранен.",
+ "button": {
+ "save": {
+ "label": "Сохранить этот поиск"
+ }
+ },
+ "desc": "Укажите название этого сохранённого поиска."
+ }
+ },
+ "recording": {
+ "confirmDelete": {
+ "title": "Подтвердить удаление",
+ "desc": {
+ "selected": "Вы уверены, что хотите удалить все записанное видео, связанное с этим элементом просмотра?detect камеры {{cameraName}} не получено кадров, проверьте логи ошибок"
+ },
+ "cameraDisabled": "Камера отключена",
+ "stats": {
+ "streamType": {
+ "title": "Тип потока:",
+ "short": "Тип"
+ },
+ "bandwidth": {
+ "title": "Пропускная способность:",
+ "short": "Пропускная способность"
+ },
+ "latency": {
+ "title": "Задержка:",
+ "value": "{{seconds}} сек",
+ "short": {
+ "title": "Задержка",
+ "value": "{{seconds}} сек"
+ }
+ },
+ "totalFrames": "Всего кадров:",
+ "droppedFrames": {
+ "title": "Пропущено кадров:",
+ "short": {
+ "title": "Пропущено",
+ "value": "{{droppedFrames}} кадров"
+ }
+ },
+ "decodedFrames": "Декодированные кадры:",
+ "droppedFrameRate": "Частота пропущенных кадров:"
+ },
+ "toast": {
+ "error": {
+ "submitFrigatePlusFailed": "Не удалось отправить кадр в Frigate+"
+ },
+ "success": {
+ "submittedFrigatePlus": "Кадр успешно загружен в Frigate+"
+ }
+ }
+}
diff --git a/web/public/locales/ru/objects.json b/web/public/locales/ru/objects.json
new file mode 100644
index 000000000..c8cdac48d
--- /dev/null
+++ b/web/public/locales/ru/objects.json
@@ -0,0 +1,120 @@
+{
+ "dog": "Собака",
+ "cat": "Кошка",
+ "animal": "Животное",
+ "bark": "Лай",
+ "person": "Человек",
+ "bicycle": "Велосипед",
+ "car": "Автомобиль",
+ "motorcycle": "Мотоцикл",
+ "bird": "Птица",
+ "horse": "Лошадь",
+ "sheep": "Овца",
+ "mouse": "Мышь",
+ "goat": "Коза",
+ "airplane": "Самолет",
+ "keyboard": "Клавиатура",
+ "boat": "Лодка",
+ "bus": "Автобус",
+ "train": "Поезд",
+ "skateboard": "Скейтборд",
+ "door": "Дверь",
+ "blender": "Блендер",
+ "sink": "Раковина",
+ "clock": "Часы",
+ "vehicle": "Транспорт",
+ "hair_dryer": "Фен",
+ "toothbrush": "Зубная щетка",
+ "scissors": "Ножницы",
+ "traffic_light": "Светофор",
+ "fire_hydrant": "Пожарный гидрант",
+ "street_sign": "Дорожный знак",
+ "stop_sign": "Знак Стоп",
+ "parking_meter": "Парковочный счётчик",
+ "bench": "Скамейка",
+ "cow": "Корова",
+ "elephant": "Слон",
+ "bear": "Медведь",
+ "zebra": "Зебра",
+ "giraffe": "Жираф",
+ "hat": "Шляпа",
+ "backpack": "Рюкзак",
+ "umbrella": "Зонтик",
+ "shoe": "Обувь",
+ "eye_glasses": "Очки",
+ "tie": "Галстук",
+ "suitcase": "Чемодан",
+ "handbag": "Сумочка",
+ "frisbee": "Фрисби",
+ "skis": "Лыжи",
+ "snowboard": "Сноуборд",
+ "kite": "Воздушный змей",
+ "baseball_bat": "Бейсбольная бита",
+ "baseball_glove": "Бейсбольная перчатка",
+ "sports_ball": "Спортивный мяч",
+ "surfboard": "Доска для серфинга",
+ "tennis_racket": "Теннисная ракетка",
+ "bottle": "Бутылка",
+ "plate": "Тарелка",
+ "wine_glass": "Винный бокал",
+ "cup": "Чашка",
+ "fork": "Вилка",
+ "spoon": "Ложка",
+ "bowl": "Миска",
+ "banana": "Банан",
+ "apple": "Яблоко",
+ "orange": "Апельсин",
+ "broccoli": "Брокколи",
+ "sandwich": "Сэндвич",
+ "carrot": "Морковь",
+ "hot_dog": "Хот-дог",
+ "pizza": "Пицца",
+ "donut": "Пончик",
+ "cake": "Торт",
+ "chair": "Стул",
+ "couch": "Диван",
+ "potted_plant": "Комнатное растение",
+ "bed": "Кровать",
+ "mirror": "Зеркало",
+ "dining_table": "Обеденный стол",
+ "window": "Окно",
+ "desk": "Стол",
+ "toilet": "Туалет",
+ "tv": "Телевизор",
+ "laptop": "Ноутбук",
+ "remote": "Пульт дистанционного управления",
+ "cell_phone": "Мобильный телефон",
+ "microwave": "Микроволновка",
+ "oven": "Духовка",
+ "toaster": "Тостер",
+ "refrigerator": "Холодильник",
+ "book": "Книга",
+ "vase": "Ваза",
+ "teddy_bear": "Плюшевый мишка",
+ "hair_brush": "Расчёска",
+ "squirrel": "Белка",
+ "deer": "Олень",
+ "fox": "Лиса",
+ "rabbit": "Кролик",
+ "raccoon": "Енот",
+ "robot_lawnmower": "Роботизированная газонокосилка",
+ "waste_bin": "Мусорное ведро",
+ "on_demand": "По требованию",
+ "face": "Лицо",
+ "license_plate": "Номерной знак",
+ "package": "Посылка",
+ "bbq_grill": "Гриль и барбекю",
+ "amazon": "Amazon",
+ "usps": "USPS",
+ "ups": "UPS",
+ "fedex": "FedEx",
+ "dhl": "DHL",
+ "an_post": "An Post",
+ "purolator": "Purolator",
+ "knife": "Нож",
+ "postnl": "PostNL",
+ "nzpost": "NZPost",
+ "postnord": "PostNord",
+ "gls": "GLS",
+ "dpd": "DPD"
+}
diff --git a/web/public/locales/ru/views/configEditor.json b/web/public/locales/ru/views/configEditor.json
new file mode 100644
index 000000000..73b566a08
--- /dev/null
+++ b/web/public/locales/ru/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "configEditor": "Редактор конфигурации",
+ "copyConfig": "Скопировать конфигурацию",
+ "saveAndRestart": "Сохранить и перезапустить",
+ "saveOnly": "Только сохранить",
+ "documentTitle": "Редактор конфигурации - Frigate",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Конфигурация скопирована в буфер обмена."
+ },
+ "error": {
+ "savingError": "Ошибка сохранения конфигурации"
+ }
+ },
+ "confirm": "Выйти без сохранения?"
+}
diff --git a/web/public/locales/ru/views/events.json b/web/public/locales/ru/views/events.json
new file mode 100644
index 000000000..6c8bebb6e
--- /dev/null
+++ b/web/public/locales/ru/views/events.json
@@ -0,0 +1,39 @@
+{
+ "alerts": "Тревоги",
+ "detections": "Обнаружения",
+ "motion": {
+ "label": "Движение",
+ "only": "Только движение"
+ },
+ "allCameras": "Все камеры",
+ "camera": "Камера",
+ "empty": {
+ "alert": "Отсутствуют тревоги для просмотра",
+ "detection": "Отсутствуют обнаружения для просмотра",
+ "motion": "Не найдено данных о движении"
+ },
+ "timeline": "Таймлайн",
+ "timeline.aria": "Выбор таймлайна",
+ "events": {
+ "label": "События",
+ "aria": "Выбор событий",
+ "noFoundForTimePeriod": "Для этого периода времени не найдено ни одного события."
+ },
+ "documentTitle": "Обзор событий - Frigate",
+ "recordings": {
+ "documentTitle": "Записи - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "Последние 24 часа"
+ },
+ "markAsReviewed": "Пометить как просмотренное",
+ "newReviewItems": {
+ "label": "Посмотреть новые элементы для просмотра",
+ "button": "Новые элементы для просмотра"
+ },
+ "markTheseItemsAsReviewed": "Пометить эти элементы как просмотренные",
+ "selected": "{{count}} выбрано",
+ "selected_one": "{{count}} выбрано",
+ "selected_other": "{{count}} выбрано",
+ "detected": "обнаружен"
+}
diff --git a/web/public/locales/ru/views/explore.json b/web/public/locales/ru/views/explore.json
new file mode 100644
index 000000000..63f6c2867
--- /dev/null
+++ b/web/public/locales/ru/views/explore.json
@@ -0,0 +1,209 @@
+{
+ "exploreIsUnavailable": {
+ "embeddingsReindexing": {
+ "context": "Поиск станет доступен после завершения переиндексации эмбеддингов отслеживаемых объектов.",
+ "startingUp": "Запуск…",
+ "estimatedTime": "Оставшееся время:",
+ "finishingShortly": "Скоро завершится",
+ "step": {
+ "descriptionsEmbedded": "Встроенные описания: ",
+ "trackedObjectsProcessed": "Обработанные отслеживаемые объекты: ",
+ "thumbnailsEmbedded": "Встроенные миниатюры: "
+ }
+ },
+ "title": "Поиск событий недоступен",
+ "downloadingModels": {
+ "setup": {
+ "visionModel": "Модель компьютерного зрения",
+ "visionModelFeatureExtractor": "Экстрактор признаков модели компьютерного зрения",
+ "textModel": "Текстовая модель",
+ "textTokenizer": "Текстовый токенизатор"
+ },
+ "tips": {
+ "context": "Возможно, вы захотите переиндексировать эмбеддинги отслеживаемых объектов после загрузки моделей.",
+ "documentation": "Читать документацию"
+ },
+ "context": "Frigate загружает необходимые модели эмбеддингов для поддержки функции семантического поиска. Это может занять несколько минут в зависимости от скорости вашего интернет-соединения.",
+ "error": "Произошла ошибка. Проверьте логи Frigate."
+ }
+ },
+ "generativeAI": "Генеративный ИИ",
+ "documentTitle": "Поиск событий - Frigate",
+ "details": {
+ "timestamp": "Метка времени",
+ "item": {
+ "title": "Детали элемента просмотра",
+ "desc": "Детали элемента просмотра",
+ "button": {
+ "share": "Поделиться этим элементом просмотра",
+ "viewInExplore": "Смотреть в Поиске событий"
+ },
+ "tips": {
+ "hasMissingObjects": "Настройте конфигурацию, если хотите, чтобы Frigate сохранял отслеживаемые объекты для следующих меток: {{objects}}",
+ "mismatch_one": "{{count}} недоступный объект обнаружен и включен в этот элемент просмотра. Эти объекты либо не соответствовали критериям тревоги/детекции, либо уже были удалены.",
+ "mismatch_few": "{{count}} недоступных объекта обнаружено и включено в этот элемент просмотра. Эти объекты либо не соответствовали критериям тревоги/детекции, либо уже были удалены.",
+ "mismatch_many": "{{count}} недоступных объектов обнаружено и включено в этот элемент просмотра. Эти объекты либо не соответствовали критериям тревоги/детекции, либо уже были удалены."
+ },
+ "toast": {
+ "success": {
+ "updatedSublabel": "Успешно обновлена дополнительная метка.",
+ "updatedLPR": "Номерной знак успешно обновлён.",
+ "regenerate": "Новое описание запрошено у {{provider}}. В зависимости от скорости работы вашего провайдера, генерация нового описания может занять некоторое время."
+ },
+ "error": {
+ "updatedSublabelFailed": "Не удалось обновить дополнительную метку: {{errorMessage}}",
+ "updatedLPRFailed": "Не удалось обновить номерной знак: {{errorMessage}}",
+ "regenerate": "Не удалось запросить новое описание у {{provider}}: {{errorMessage}}"
+ }
+ }
+ },
+ "editSubLabel": {
+ "descNoLabel": "Введите новую дополнительную метку для этого отслеживаемого объекта",
+ "title": "Редактирование дополнительной метки",
+ "desc": "Введите новую дополнительную метку для {{label}}"
+ },
+ "topScore": {
+ "label": "Лучшая оценка",
+ "info": "Лучшая оценка — это наивысшая медианная оценка для отслеживаемого объекта, поэтому она может отличаться от оценки, показанной на превью в результатах поиска."
+ },
+ "estimatedSpeed": "Расчётная скорость",
+ "tips": {
+ "saveDescriptionFailed": "Не удалось обновить описание: {{errorMessage}}",
+ "descriptionSaved": "Описание успешно сохранено"
+ },
+ "label": "Метка",
+ "editLPR": {
+ "title": "Редактирование номерного знака",
+ "descNoLabel": "Введите новое значение номерного знака для этого отслеживаемого объекта",
+ "desc": "Введите новое значение номерного знака для {{label}}"
+ },
+ "recognizedLicensePlate": "Распознанный номерной знак",
+ "objects": "Объекты",
+ "camera": "Камера",
+ "zones": "Зоны",
+ "button": {
+ "findSimilar": "Найти похожее",
+ "regenerate": {
+ "title": "Перегенерировать",
+ "label": "Перегенерировать описание отслеживаемого объекта"
+ }
+ },
+ "description": {
+ "label": "Описание",
+ "aiTips": "Frigate не будет запрашивать описание у вашего генеративного ИИ-провайдера, пока жизненный цикл отслеживаемого объекта не завершится.",
+ "placeholder": "Описание отслеживаемого объекта"
+ },
+ "expandRegenerationMenu": "Развернуть меню перегенерации",
+ "regenerateFromSnapshot": "Перегенерировать из снимка",
+ "regenerateFromThumbnails": "Перегенерировать из миниатюры",
+ "snapshotScore": {
+ "label": "Оценка снимка"
+ }
+ },
+ "trackedObjectDetails": "Детали объекта",
+ "type": {
+ "details": "детали",
+ "snapshot": "снимок",
+ "video": "видео",
+ "object_lifecycle": "жизненный цикл объекта"
+ },
+ "objectLifecycle": {
+ "title": "Жизненный цикл объекта",
+ "noImageFound": "Для этой метки времени изображение не найдено.",
+ "createObjectMask": "Создать маску объекта",
+ "adjustAnnotationSettings": "Изменить настройки аннотаций",
+ "scrollViewTips": "Прокрутите, чтобы просмотреть ключевые моменты жизненного цикла этого объекта.",
+ "autoTrackingTips": "Позиции ограничивающих рамок будут неточными для камер с автотрекингом.",
+ "lifecycleItemDesc": {
+ "visible": "Обнаружен(а) {{label}}",
+ "entered_zone": "{{label}} зафиксирован(а) в {{zones}}",
+ "active": "{{label}} активировался(ась)",
+ "stationary": "{{label}} перестал(а) двигаться",
+ "attribute": {
+ "faceOrLicense_plate": "{{attribute}} обнаружен для {{label}}",
+ "other": "{{label}} распознан(а) как {{attribute}}"
+ },
+ "gone": "{{label}} покинул(а) зону",
+ "heard": "Обнаружен звук {{label}}",
+ "external": "Обнаружен(а) {{label}}",
+ "header": {
+ "zones": "Зоны",
+ "ratio": "Соотношение",
+ "area": "Область"
+ }
+ },
+ "annotationSettings": {
+ "title": "Настройки аннотаций",
+ "showAllZones": {
+ "title": "Показать все зоны",
+ "desc": "Всегда показывать зоны на кадрах, где объекты вошли в зону."
+ },
+ "offset": {
+ "label": "Сдвиг аннотаций",
+ "desc": "Эти данные поступают из потока детекции вашей камеры, но накладываются на изображения из потока записи. Потоки вряд ли идеально синхронизированы, поэтому ограничивающая рамка и видео могут не совпадать. Для корректировки используйте поле Сдвиг аннотаций.",
+ "millisecondsToOffset": "Смещение аннотаций детекции в миллисекундах. По умолчанию: 0",
+ "documentation": "Читать документацию ",
+ "tips": "СОВЕТ: Представьте, у вас клип события, где человек идёт слева направо. Если рамка на таймлайне постоянно смещена влево от человека — уменьшите значение. Если рамка опережает движение — увеличьте значение.",
+ "toast": {
+ "success": "В конфигурационном файле сохранено значение смещения для {{camera}}. Перезапустите Frigate, чтобы применить изменения."
+ }
+ }
+ },
+ "carousel": {
+ "previous": "Предыдущий слайд",
+ "next": "Следующий слайд"
+ },
+ "count": "{{first}} из {{second}}",
+ "trackedPoint": "Отслеживаемая точка"
+ },
+ "itemMenu": {
+ "downloadVideo": {
+ "label": "Скачать видео",
+ "aria": "Скачать видео"
+ },
+ "downloadSnapshot": {
+ "label": "Скачать снимок",
+ "aria": "Скачать снимок"
+ },
+ "viewObjectLifecycle": {
+ "label": "Просмотр жизненного цикла объекта",
+ "aria": "Показать жизненный цикл объекта"
+ },
+ "findSimilar": {
+ "label": "Найти похожее",
+ "aria": "Найти похожие отслеживаемые объекты"
+ },
+ "submitToPlus": {
+ "label": "Отправить в Frigate+",
+ "aria": "Отправить в Frigate Plus"
+ },
+ "viewInHistory": {
+ "label": "Посмотреть в Истории",
+ "aria": "Посмотреть в Истории"
+ },
+ "deleteTrackedObject": {
+ "label": "Удалить этот отслеживаемый объект"
+ }
+ },
+ "dialog": {
+ "confirmDelete": {
+ "title": "Подтвердить удаление",
+ "desc": "Удаление этого отслеживаемого объекта приведёт к удалению его снимка, всех сохранённых эмбеддингов и записей жизненного цикла. Сами записи в разделе История НЕ будут удалены.mode: {{effectiveRetainMode}}, поэтому эта запись по запросу будет сохранять только сегменты с {{effectiveRetainModeName}}."
+ },
+ "editLayout": {
+ "label": "Редактировать макет",
+ "group": {
+ "label": "Редактирование группы камер"
+ },
+ "exitEdit": "Выход из редактирования"
+ },
+ "audio": "Аудио",
+ "notifications": "Уведомления"
+}
diff --git a/web/public/locales/ru/views/recording.json b/web/public/locales/ru/views/recording.json
new file mode 100644
index 000000000..24d34f580
--- /dev/null
+++ b/web/public/locales/ru/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "filter": "Фильтр",
+ "export": "Экспорт",
+ "calendar": "Календарь",
+ "filters": "Фильтры",
+ "toast": {
+ "error": {
+ "endTimeMustAfterStartTime": "Конечное время должно быть позже начального",
+ "noValidTimeSelected": "Выбран недопустимый временной диапазон"
+ }
+ }
+}
diff --git a/web/public/locales/ru/views/search.json b/web/public/locales/ru/views/search.json
new file mode 100644
index 000000000..0c7f8477f
--- /dev/null
+++ b/web/public/locales/ru/views/search.json
@@ -0,0 +1,74 @@
+{
+ "savedSearches": "Сохраненные поиски",
+ "button": {
+ "clear": "Очистить поиск",
+ "save": "Сохранить поиск",
+ "delete": "Удалить сохранённый поиск",
+ "filterActive": "Активные фильтры",
+ "filterInformation": "Информация о фильтре"
+ },
+ "search": "Поиск",
+ "searchFor": "Поиск {{inputValue}}",
+ "trackedObjectId": "ID отслеживаемого объекта",
+ "filter": {
+ "label": {
+ "cameras": "Камеры",
+ "zones": "Зоны",
+ "sub_labels": "Дополнительные метки",
+ "search_type": "Тип поиска",
+ "time_range": "Временной диапазон",
+ "before": "До",
+ "after": "После",
+ "min_score": "Мин. оценка",
+ "max_score": "Макс. оценка",
+ "min_speed": "Мин. скорость",
+ "recognized_license_plate": "Распознанный номерной знак",
+ "max_speed": "Макс. скорость",
+ "has_clip": "Есть клип",
+ "has_snapshot": "Есть снимок",
+ "labels": "Метки"
+ },
+ "searchType": {
+ "thumbnail": "Миниатюра",
+ "description": "Описание"
+ },
+ "toast": {
+ "error": {
+ "beforeDateBeLaterAfter": "Дата 'до' должна быть позже, чем дата 'после'.",
+ "afterDatebeEarlierBefore": "Дата 'после' должна быть раньше, чем дата 'до'.",
+ "minScoreMustBeLessOrEqualMaxScore": "Значение 'min_score' должно быть меньше или равно значению 'max_score'.",
+ "maxScoreMustBeGreaterOrEqualMinScore": "Значение 'max_score' должно быть больше или равно значению 'min_score'.",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "Значение 'min_speed' должно быть меньше или равно значению 'max_speed'.",
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "Значение 'max_speed' должно быть больше или равно значению 'min_speed'."
+ }
+ },
+ "tips": {
+ "title": "Как использовать текстовые фильтры",
+ "desc": {
+ "text": "Фильтры помогают уточнить результаты поиска. Вот как их использовать в поле ввода:",
+ "step": "cameras:front_door label:person before:01012024 time_range:3:00PM-4:00PM ",
+ "step1": "Введите имя ключа фильтра с двоеточием (например, \"камеры:\").",
+ "step5": "Фильтр временного диапазона использует формат {{exampleTime}}.",
+ "exampleLabel": "Пример:",
+ "step2": "Выберите значение из предложенных или введите свое собственное.",
+ "step3": "Вы можете применять несколько фильтров, указывая их подряд через пробел.",
+ "step6": "Удаляйте фильтры, нажав на значок \"x\" рядом с ними.",
+ "step4": "Фильтры по дате (до: и после:) используют формат {{DateFormat}}."
+ }
+ },
+ "header": {
+ "currentFilterType": "Значения фильтров",
+ "noFilters": "Фильтры",
+ "activeFilters": "Активные фильтры"
+ }
+ },
+ "similaritySearch": {
+ "title": "Поиск похожего",
+ "active": "Активен поиск похожего",
+ "clear": "Очистить поиск похожего"
+ },
+ "placeholder": {
+ "search": "Поиск…"
+ }
+}
diff --git a/web/public/locales/ru/views/settings.json b/web/public/locales/ru/views/settings.json
new file mode 100644
index 000000000..1ad71e719
--- /dev/null
+++ b/web/public/locales/ru/views/settings.json
@@ -0,0 +1,687 @@
+{
+ "documentTitle": {
+ "default": "Настройки - Frigate",
+ "camera": "Настройки камеры - Frigate",
+ "masksAndZones": "Маски и Зоны - Frigate",
+ "motionTuner": "Детекции движения - Frigate",
+ "general": "Общие настройки - Frigate",
+ "frigatePlus": "Настройки Frigate+ - Frigate",
+ "authentication": "Настройки аутентификации - Frigate",
+ "classification": "Настройки распознавания - Frigate",
+ "object": "Отладка - Frigate",
+ "notifications": "Настройки уведомлений - Frigate",
+ "enrichments": "Настройки обогащения - Frigate"
+ },
+ "menu": {
+ "cameras": "Настройки камеры",
+ "masksAndZones": "Маски / Зоны",
+ "motionTuner": "Детекции движения",
+ "debug": "Отладка",
+ "users": "Пользователи",
+ "notifications": "Уведомления",
+ "frigateplus": "Frigate+",
+ "ui": "Интерфейс",
+ "classification": "Распознавание",
+ "enrichments": "Обогащения"
+ },
+ "dialog": {
+ "unsavedChanges": {
+ "title": "У вас есть несохраненные изменения.",
+ "desc": "Хотите сохранить изменения перед продолжением?"
+ }
+ },
+ "cameraSetting": {
+ "camera": "Камера",
+ "noCamera": "Нет камеры"
+ },
+ "general": {
+ "title": "Общие настройки",
+ "liveDashboard": {
+ "title": "Панель мониторинга",
+ "automaticLiveView": {
+ "desc": "Автоматически переключаться на просмотр камеры в реальном времени при обнаружении активности. Если отключить эту опцию, статичные изображения камер на панели мониторинга будут обновляться только раз в минуту.",
+ "label": "Автоматический просмотр в реальном времени"
+ },
+ "playAlertVideos": {
+ "label": "Воспроизводить видео с тревогами",
+ "desc": "По умолчанию последние тревоги на панели мониторинга воспроизводятся как короткие зацикленные видео. Отключите эту опцию, чтобы показывать только статичное изображение последних оповещений на этом устройстве/браузере."
+ }
+ },
+ "calendar": {
+ "title": "Календарь",
+ "firstWeekday": {
+ "sunday": "Воскресенье",
+ "monday": "Понедельник",
+ "label": "Первый день недели",
+ "desc": "День, с которого начинаются недели в календаре обзора событий."
+ }
+ },
+ "recordingsViewer": {
+ "title": "Просмотр записей",
+ "defaultPlaybackRate": {
+ "label": "Скорость воспроизведения по умолчанию",
+ "desc": "Скорость воспроизведения записей по умолчанию."
+ }
+ },
+ "storedLayouts": {
+ "clearAll": "Сбросить все макеты",
+ "desc": "Расположение камер в группе можно настраивать перетаскиванием и изменением размера. Позиции сохраняются в локальном хранилище браузера.",
+ "title": "Сохранённые макеты"
+ },
+ "cameraGroupStreaming": {
+ "title": "Настройки трансляции группы камер",
+ "desc": "Настройки трансляции для каждой группы камер хранятся локально в вашем браузере.",
+ "clearAll": "Очистить все настройки трансляции"
+ },
+ "toast": {
+ "success": {
+ "clearStoredLayout": "Сохранённый макет для {{cameraName}} удалён",
+ "clearStreamingSettings": "Настройки потоков для всех групп камер сброшены."
+ },
+ "error": {
+ "clearStoredLayoutFailed": "Не удалось удалить макет: {{errorMessage}}",
+ "clearStreamingSettingsFailed": "Не удалось очистить настройки потока: {{errorMessage}}"
+ }
+ }
+ },
+ "classification": {
+ "semanticSearch": {
+ "title": "Семантический поиск",
+ "readTheDocumentation": "Читать документацию",
+ "reindexNow": {
+ "label": "Переиндексировать сейчас",
+ "confirmButton": "Переиндексировать",
+ "alreadyInProgress": "Переиндексация уже выполняется.",
+ "desc": "Переиндексация заново сгенерирует векторные представления для всех отслеживаемых объектов. Этот процесс выполняется в фоновом режиме и может максимально загрузить ваш процессор, а также занять значительное время в зависимости от количества отслеживаемых объектов.",
+ "confirmTitle": "Подтвердить переиндексацию",
+ "success": "Реиндексация запущена успешно.",
+ "error": "Не удалось начать реиндексацию: {{errorMessage}}",
+ "confirmDesc": "Вы уверены, что хотите переиндексировать все векторные представления отслеживаемых объектов? Этот процесс будет выполняться в фоновом режиме, но может максимально загрузить ваш процессор и занять довольно много времени. Вы можете следить за ходом выполнения на странице «Поиск событий»."
+ },
+ "desc": "Семантический поиск во Frigate позволяет находить отслеживаемые объекты в записях с помощью самого изображения, пользовательского текстового описания или автоматически сгенерированного описания.",
+ "modelSize": {
+ "label": "Размер модели",
+ "desc": "Размер модели, используемой для создания векторных представлений для семантического поиска.",
+ "small": {
+ "title": "малый",
+ "desc": "Использование малой модели задействует квантованную версию модели, которая потребляет меньше оперативной памяти и работает быстрее на CPU с очень незначительной разницей в качестве эмбеддингов."
+ },
+ "large": {
+ "title": "большой",
+ "desc": "Использование большой модели задействует полную модель Jina и автоматически запускается на GPU, если это возможно."
+ }
+ }
+ },
+ "faceRecognition": {
+ "desc": "Функция распознавания лиц позволяет присваивать людям имена, и когда их лицо будет распознано, Frigate присвоит имя человека в качестве дополнительной метки. Эта информация содержится в пользовательском интерфейсе, фильтрах, а также в уведомлениях.",
+ "title": "Распознавание лиц",
+ "readTheDocumentation": "Читать документацию",
+ "modelSize": {
+ "label": "Размер модели",
+ "desc": "Размер модели, используемой для распознавания лиц.",
+ "small": {
+ "title": "малый",
+ "desc": "Использование малой модели задействует модель FaceNet для векторного представления лиц, которая эффективно работает на большинстве CPU."
+ },
+ "large": {
+ "title": "большой",
+ "desc": "При выборе большой модели используется модель векторизации лиц ArcFace, которая автоматически задействует GPU (если он доступен)."
+ }
+ }
+ },
+ "licensePlateRecognition": {
+ "title": "Распознавание номерных знаков",
+ "readTheDocumentation": "Читать документацию",
+ "desc": "Frigate может распознавать автомобильные номера и автоматически добавлять для объектов типа «автомобиль» обнаруженные символы в поле «распознанный номерной знак» или известное имя в качестве дополнительной метки. Типичный пример использования — чтение номеров автомобилей, заезжающих на подъездную дорожку или проезжающих по улице."
+ },
+ "toast": {
+ "success": "Настройки классификации сохранены. Перезапустите Frigate, чтобы применить внесенные изменения.",
+ "error": "Не удалось сохранить изменения конфигурации: {{errorMessage}}"
+ },
+ "title": "Настройки классификации",
+ "birdClassification": {
+ "title": "Классификация птиц",
+ "desc": "Классификация птиц определяет известные виды с помощью квантованной модели TensorFlow. Когда птица распознана, её обиходное название добавляется в качестве дополнительной метки. Эти информация используется в интерфейсе, фильтрах и уведомлениях."
+ },
+ "restart_required": "Требуется перезапуск (изменены настройки классификации)",
+ "unsavedChanges": "Настройки классификации не сохранены"
+ },
+ "users": {
+ "dialog": {
+ "passwordSetting": {
+ "updatePassword": "Обновить пароль для {{username}}",
+ "setPassword": "Установить пароль",
+ "desc": "Создайте надежный пароль для защиты аккаунта.",
+ "cannotBeEmpty": "Пароль не может быть пустым",
+ "doNotMatch": "Пароли не совпадают"
+ },
+ "deleteUser": {
+ "warn": "Вы уверены, что хотите удалить пользователя {{username}}?",
+ "title": "Удалить пользователя",
+ "desc": "Это действие необратимо. Учётная запись пользователя и все связанные с ней данные будут удалены без возможности восстановления."
+ },
+ "changeRole": {
+ "title": "Изменить роль пользователя",
+ "desc": "Обновить права доступа для {{username}}",
+ "roleInfo": {
+ "intro": "Выберите подходящую роль для этого пользователя:",
+ "viewer": "Наблюдатель",
+ "viewerDesc": "Доступны только панель мониторинга, обзор событий, поиск и экспорт данных.",
+ "admin": "Администратор",
+ "adminDesc": "Полный доступ ко всем функциям."
+ },
+ "select": "Выбрать роль"
+ },
+ "form": {
+ "user": {
+ "placeholder": "Введите имя пользователя",
+ "desc": "Допустимо использовать только буквы, цифры, точки и подчёркивания.",
+ "title": "Имя пользователя"
+ },
+ "password": {
+ "title": "Пароль",
+ "placeholder": "Введите пароль",
+ "confirm": {
+ "title": "Подтвердите пароль",
+ "placeholder": "Подтвердите пароль"
+ },
+ "strength": {
+ "title": "Сложность пароля: ",
+ "weak": "Слабый",
+ "medium": "Средний",
+ "strong": "Сложный",
+ "veryStrong": "Очень сложный"
+ },
+ "match": "Пароли совпадают",
+ "notMatch": "Пароли не совпадают"
+ },
+ "newPassword": {
+ "title": "Новый пароль",
+ "confirm": {
+ "placeholder": "Повторно введите новый пароль"
+ },
+ "placeholder": "Введите новый пароль"
+ },
+ "usernameIsRequired": "Необходимо ввести имя пользователя",
+ "passwordIsRequired": "Требуется пароль"
+ },
+ "createUser": {
+ "title": "Создать нового пользователя",
+ "usernameOnlyInclude": "Имя пользователя может включать только буквы, цифры, . или _",
+ "desc": "Добавить новую учетную запись пользователя и определить роль для доступа к разделам интерфейса Frigate.",
+ "confirmPassword": "Пожалуйста, подтвердите пароль"
+ }
+ },
+ "title": "Пользователи",
+ "toast": {
+ "success": {
+ "roleUpdated": "Обновлена роль для {{user}}",
+ "createUser": "Пользователь {{user}} успешно создан",
+ "deleteUser": "Пользователь {{user}} успешно удалён",
+ "updatePassword": "Пароль успешно обновлён."
+ },
+ "error": {
+ "setPasswordFailed": "Не удалось сохранить пароль: {{errorMessage}}",
+ "createUserFailed": "Не удалось создать пользователя: {{errorMessage}}",
+ "deleteUserFailed": "Не удалось удалить пользователя: {{errorMessage}}",
+ "roleUpdateFailed": "Не удалось обновить роль: {{errorMessage}}"
+ }
+ },
+ "table": {
+ "username": "Имя пользователя",
+ "actions": "Действия",
+ "password": "Пароль",
+ "noUsers": "Пользователей не найдено.",
+ "changeRole": "Изменить роль пользователя",
+ "role": "Роль",
+ "deleteUser": "Удалить пользователя"
+ },
+ "management": {
+ "title": "Управление пользователями",
+ "desc": "Управление учетными записями пользователей Frigate."
+ },
+ "updatePassword": "Обновить пароль",
+ "addUser": "Добавить пользователя"
+ },
+ "notification": {
+ "title": "Уведомления",
+ "notificationSettings": {
+ "documentation": "Читать документацию",
+ "title": "Настройки уведомлений",
+ "desc": "Frigate может отправлять push-уведомления на ваше устройство, когда приложение открыто в браузере или установлено как PWA."
+ },
+ "notificationUnavailable": {
+ "documentation": "Читать документацию",
+ "title": "Уведомления недоступны",
+ "desc": "Веб-уведомления требуют защищённого контекста (https://…). Это ограничение браузера. Получите безопасный доступ к Frigate, чтобы использовать уведомления."
+ },
+ "email": {
+ "title": "Email",
+ "desc": "Для уведомлений о проблемах с push-сервисом требуется указать действующий адрес электронной почты.",
+ "placeholder": "например, example@email.com"
+ },
+ "globalSettings": {
+ "title": "Глобальные настройки",
+ "desc": "Временно приостановить уведомления для определённых камер на всех зарегистрированных устройствах."
+ },
+ "cameras": {
+ "title": "Камеры",
+ "noCameras": "Нет доступных камер",
+ "desc": "Выберите камеры для активации уведомлений."
+ },
+ "deviceSpecific": "Настройки для конкретного устройства",
+ "registerDevice": "Зарегистрировать это устройство",
+ "unregisterDevice": "Отменить регистрацию этого устройства",
+ "suspended": "Уведомления приостановлены {{time}}",
+ "sendTestNotification": "Отправить тестовое уведомление",
+ "active": "Уведомления активны",
+ "suspendTime": {
+ "30minutes": "Приостановить на 30 минут",
+ "1hour": "Приостановить на 1 час",
+ "12hours": "Приостановить на 12 часов",
+ "24hours": "Приостановить на 24 часа",
+ "untilRestart": "Приостановить до перезапуска",
+ "5minutes": "Приостановить на 5 минут",
+ "10minutes": "Приостановить на 10 минут",
+ "suspend": "Приостановить"
+ },
+ "toast": {
+ "success": {
+ "settingSaved": "Настройки уведомлений сохранены.",
+ "registered": "Регистрация для уведомлений успешно завершена. Перезапуск Frigate необходим перед отправкой любых уведомлений (включая тестовое уведомление)."
+ },
+ "error": {
+ "registerFailed": "Не удалось сохранить регистрацию уведомлений."
+ }
+ },
+ "cancelSuspension": "Отменить приостановку",
+ "unsavedChanges": "Изменения уведомлений не сохранены",
+ "unsavedRegistrations": "Регистрации уведомлений не сохранены"
+ },
+ "camera": {
+ "review": {
+ "alerts": "Тревоги ",
+ "desc": "Временно включить/отключить тревоги и обнаружения для этой камеры до перезапуска Frigate. В отключенном состоянии новые события не будут записываться. ",
+ "detections": "Обнаружения ",
+ "title": "Обзор событий"
+ },
+ "reviewClassification": {
+ "objectAlertsTips": "Все объекты {{alertsLabels}} на камере {{cameraName}} будут отображаться как тревоги.",
+ "desc": "Frigate разделяет записи для проверки на два типа как «Тревоги» и «Обнаружения». По умолчанию все объекты person и car считаются тревогами. Вы можете уточнить эту классификацию, настроив для них требуемые зоны.",
+ "selectAlertsZones": "Выберите зоны для тревог",
+ "zoneObjectDetectionsTips": {
+ "notSelectDetections": "Все объекты {{detectionsLabels}}, обнаруженные в {{zone}} на камере {{cameraName}}, которые не отнесены к тревогам, будут отображаться как обнаружения, независимо от того, в какой зоне они находятся.",
+ "text": "Все объекты {{detectionsLabels}}, не отнесённые к категории в {{zone}} на камере {{cameraName}}, будут отображаться как обнаружения.",
+ "regardlessOfZoneObjectDetectionsTips": "Все объекты {{detectionsLabels}}, не отнесённые к категории на камере {{cameraName}}, будут отображаться как обнаружения, независимо от того, в какой зоне они находятся."
+ },
+ "zoneObjectAlertsTips": "Все объекты {{alertsLabels}}, обнаруженные в {{zone}} на камере {{cameraName}}, будут отображаться как тревоги.",
+ "selectDetectionsZones": "Выберите зоны для обнаружения",
+ "noDefinedZones": "Для этой камеры не определено ни одной зоны.",
+ "objectDetectionsTips": "Все объекты {{detectionsLabels}}, не отнесённые к категории на камере {{cameraName}}, будут отображаться как обнаружения, независимо от того, в какой зоне они находятся.",
+ "title": "Классификация событий",
+ "readTheDocumentation": "Читать документацию",
+ "limitDetections": "Ограничение обнаружения отдельными зонами",
+ "toast": {
+ "success": "Конфигурация классификации событий была сохранена. Перезапустите Frigate для применения изменений."
+ },
+ "unsavedChanges": "Настройки классификации событий для {{camera}} не сохранены"
+ },
+ "title": "Настройки камеры",
+ "streams": {
+ "title": "Потоки",
+ "desc": "Временно отключить камеру до перезапуска Frigate. Отключение камеры полностью останавливает обработку потоков этой камеры в Frigate. Обнаружение, запись и отладка будут недоступны.Области движения
Красные рамки будут наложены на участки кадра, где в данный момент обнаружено движение
" + }, + "regions": { + "title": "Регионы", + "desc": "Показать рамку области интереса, отправленной детектору объектов", + "tips": "Рамки областей интереса
Ярко-зелёные рамки будут наложены на области интереса в кадре, которые отправляются детектору объектов.
" + } + }, + "frigatePlus": { + "snapshotConfig": { + "documentation": "Читать документацию", + "title": "Настройки снимков", + "cleanCopyWarning": "У некоторых камер включены снимки (snapshots), но отключена опция чистой копии (clean copy). Чтобы иметь возможность отправлять изображения с этих камер в Frigate+, необходимо включить параметрclean_copy в конфигурации снимков.",
+ "table": {
+ "cleanCopySnapshots": "Снимки clean_copy",
+ "camera": "Камера",
+ "snapshots": "Снимки"
+ },
+ "desc": "Отправка в Frigate+ требует, чтобы в вашей конфигурации были включены как снимки (snapshots), так и снимки clean_copy."
+ },
+ "title": "Настройки Frigate+",
+ "apiKey": {
+ "title": "Ключ API Frigate+",
+ "validated": "Ключ API Frigate+ найден и проверен",
+ "notValidated": "Ключ API Frigate+ не найден или не проверен",
+ "desc": "Ключ API Frigate+ включает интеграцию с сервисом Frigate+.",
+ "plusLink": "Подробнее про Frigate+"
+ },
+ "modelInfo": {
+ "title": "Информация о модели",
+ "modelType": "Тип модели",
+ "trainDate": "Дата обучения",
+ "error": "Не удалось загрузить информацию о модели",
+ "availableModels": "Доступные модели",
+ "loadingAvailableModels": "Загрузка доступных моделей…",
+ "modelSelect": "Здесь можно выбрать ваши доступные модели на Frigate+. Обратите внимание, что могут быть выбраны только модели, совместимые с текущей конфигурацией детектора.",
+ "baseModel": "Базовая модель",
+ "supportedDetectors": "Поддерживаемые детекторы",
+ "dimensions": "Размеры",
+ "loading": "Загрузка информации о модели…",
+ "cameras": "Камеры",
+ "plusModelType": {
+ "baseModel": "Базовая модель",
+ "userModel": "Дообученная"
+ }
+ },
+ "toast": {
+ "success": "Настройки Frigate+ были сохранены. Перезапустите Frigate, чтобы применить изменения.",
+ "error": "Не удалось сохранить изменения конфигурации: {{errorMessage}}"
+ },
+ "restart_required": "Требуется перезапуск (изменена модель Frigate+)",
+ "unsavedChanges": "Настройки Frigate+ не сохранены"
+ },
+ "enrichments": {
+ "title": "Настройки обогащения",
+ "semanticSearch": {
+ "readTheDocumentation": "Читать документацию",
+ "desc": "Семантический поиск во Frigate позволяет находить отслеживаемые объекты в записях с помощью самого изображения, пользовательского текстового описания или автоматически сгенерированного описания.",
+ "reindexNow": {
+ "desc": "Переиндексация заново сгенерирует векторные представления для всех отслеживаемых объектов. Этот процесс выполняется в фоновом режиме и может максимально загрузить ваш процессор, а также занять значительное время в зависимости от количества отслеживаемых объектов.",
+ "label": "Переиндексировать сейчас",
+ "confirmTitle": "Подтвердить переиндексацию",
+ "confirmDesc": "Вы уверены, что хотите переиндексировать все векторные представления отслеживаемых объектов? Этот процесс будет выполняться в фоновом режиме, но может максимально загрузить ваш процессор и занять довольно много времени. Вы можете следить за ходом выполнения на странице «Поиск событий».",
+ "confirmButton": "Переиндексировать",
+ "success": "Переиндексация успешно запущена.",
+ "alreadyInProgress": "Переиндексация уже выполняется.",
+ "error": "Не удалось запустить переиндексацию: {{errorMessage}}"
+ },
+ "modelSize": {
+ "desc": "Размер модели, используемой для создания векторных представлений для семантического поиска.",
+ "small": {
+ "desc": "Использование малой модели задействует квантованную версию модели, которая потребляет меньше оперативной памяти и работает быстрее на CPU с очень незначительной разницей в качестве эмбеддингов.",
+ "title": "малый"
+ },
+ "label": "Размер модели",
+ "large": {
+ "title": "большой",
+ "desc": "Использование большой модели задействует полную модель Jina и автоматически запускается на GPU, если это возможно."
+ }
+ },
+ "title": "Семантический поиск"
+ },
+ "birdClassification": {
+ "desc": "Классификация птиц определяет известные виды с помощью квантованной модели TensorFlow. Когда птица распознана, её обиходное название добавляется в качестве дополнительной метки. Эти информация используется в интерфейсе, фильтрах и уведомлениях.",
+ "title": "Классификация птиц"
+ },
+ "faceRecognition": {
+ "modelSize": {
+ "large": {
+ "desc": "При выборе большой модели используется модель векторизации лиц ArcFace, которая автоматически задействует GPU (если он доступен).",
+ "title": "большой"
+ },
+ "small": {
+ "title": "малый",
+ "desc": "Использование малой модели задействует модель FaceNet для векторного представления лиц, которая эффективно работает на большинстве CPU."
+ },
+ "label": "Размер модели",
+ "desc": "Размер модели, используемой для распознавания лиц."
+ },
+ "desc": "Функция распознавания лиц позволяет присваивать людям имена, и когда их лицо будет распознано, Frigate присвоит имя человека в качестве дополнительной метки. Эта информация содержится в пользовательском интерфейсе, фильтрах, а также в уведомлениях.",
+ "title": "Распознавание лиц",
+ "readTheDocumentation": "Читать документацию"
+ },
+ "licensePlateRecognition": {
+ "desc": "Frigate может распознавать автомобильные номера и автоматически добавлять для объектов типа «автомобиль» обнаруженные символы в поле «распознанный номерной знак» или известное имя в качестве дополнительной метки. Типичный пример использования — чтение номеров автомобилей, заезжающих на подъездную дорожку или проезжающих по улице.",
+ "title": "Распознавание номерных знаков",
+ "readTheDocumentation": "Читать документацию"
+ },
+ "unsavedChanges": "Несохранённые изменения настроек обогащений",
+ "restart_required": "Требуется перезапуск (изменены настройки обогащений)",
+ "toast": {
+ "success": "Настройки обогащений сохранены. Перезапустите Frigate, чтобы применить изменения.",
+ "error": "Не удалось сохранить изменения: {{errorMessage}}"
+ }
+ }
+}
diff --git a/web/public/locales/ru/views/system.json b/web/public/locales/ru/views/system.json
new file mode 100644
index 000000000..3e0052a88
--- /dev/null
+++ b/web/public/locales/ru/views/system.json
@@ -0,0 +1,180 @@
+{
+ "documentTitle": {
+ "cameras": "Статистика камер - Frigate",
+ "storage": "Статистика хранилища - Frigate",
+ "general": "Общая статистика - Frigate",
+ "enrichments": "Статистика обогащений - Frigate",
+ "logs": {
+ "frigate": "Логи Frigate - Frigate",
+ "go2rtc": "Логи Go2RTC - Frigate",
+ "nginx": "Логи Nginx - Frigate"
+ }
+ },
+ "title": "Система",
+ "metrics": "Показатели системы",
+ "logs": {
+ "download": {
+ "label": "Загрузить логи"
+ },
+ "copy": {
+ "label": "Копировать в буфер",
+ "success": "Логи скопированы в буфер",
+ "error": "Не удалось скопировать логи в буфер обмена"
+ },
+ "type": {
+ "label": "Тип",
+ "timestamp": "Метка времени",
+ "tag": "Тег",
+ "message": "Сообщение"
+ },
+ "tips": "Логи передаются с сервера в потоковом режиме",
+ "toast": {
+ "error": {
+ "fetchingLogsFailed": "Ошибка получения логов: {{errorMessage}}",
+ "whileStreamingLogs": "Ошибка при потоковой передаче логов: {{errorMessage}}"
+ }
+ }
+ },
+ "general": {
+ "title": "Общие",
+ "detector": {
+ "title": "Детекторы",
+ "inferenceSpeed": "Скорость вывода детектора",
+ "cpuUsage": "Использование CPU детектором",
+ "memoryUsage": "Использование памяти детектором",
+ "temperature": "Температура детектора"
+ },
+ "hardwareInfo": {
+ "title": "Информация об оборудовании",
+ "gpuUsage": "Использование GPU",
+ "gpuMemory": "Память GPU",
+ "gpuEncoder": "GPU-кодировщик",
+ "gpuDecoder": "GPU-декодер",
+ "gpuInfo": {
+ "vainfoOutput": {
+ "title": "Вывод Vainfo",
+ "returnCode": "Код возврата: {{code}}",
+ "processOutput": "Вывод процесса:",
+ "processError": "Ошибка процесса:"
+ },
+ "nvidiaSMIOutput": {
+ "title": "Вывод Nvidia SMI",
+ "name": "Название: {{name}}",
+ "driver": "Драйвер: {{driver}}",
+ "cudaComputerCapability": "Вычислительная способность CUDA: {{cuda_compute}}",
+ "vbios": "Информация VBios: {{vbios}}"
+ },
+ "closeInfo": {
+ "label": "Закрыть информацию GPU"
+ },
+ "copyInfo": {
+ "label": "Скопировать информацию о GPU"
+ },
+ "toast": {
+ "success": "Информация о GPU скопирована в буфер обмена"
+ }
+ },
+ "npuMemory": "Память NPU",
+ "npuUsage": "Использование NPU"
+ },
+ "otherProcesses": {
+ "title": "Другие процессы",
+ "processCpuUsage": "Использование CPU процессом",
+ "processMemoryUsage": "Использование памяти процессом"
+ }
+ },
+ "storage": {
+ "title": "Хранилище",
+ "overview": "Обзор",
+ "recordings": {
+ "title": "Записи",
+ "tips": "Это значение показывает, сколько места в хранилище занимают записи из базы данных Frigate. Frigate не учитывает другие файлы на диске.",
+ "earliestRecording": "Первая запись:"
+ },
+ "cameraStorage": {
+ "title": "Хранилище камеры",
+ "camera": "Камера",
+ "unusedStorageInformation": "Информация о неиспользованном хранилище",
+ "storageUsed": "Хранилище",
+ "percentageOfTotalUsed": "Доля (%)",
+ "bandwidth": "Пропускная способность",
+ "unused": {
+ "title": "Не используется",
+ "tips": "Это значение может неточно отражать свободное место, доступное Frigate, если на вашем диске есть другие файлы помимо записей Frigate. Frigate не отслеживает использование хранилища за пределами своих записей."
+ }
+ }
+ },
+ "cameras": {
+ "title": "Камеры",
+ "overview": "Обзор",
+ "info": {
+ "cameraProbeInfo": "Информация о проверке камеры {{camera}}",
+ "streamDataFromFFPROBE": "Данные о потоке получены от ffprobe.",
+ "fetching": "Получение данных камеры",
+ "stream": "Поток {{idx}}",
+ "video": "Видео:",
+ "codec": "Кодек:",
+ "resolution": "Разрешение:",
+ "fps": "FPS:",
+ "unknown": "Неизвестно",
+ "audio": "Аудио:",
+ "error": "Ошибка: {{error}}",
+ "tips": {
+ "title": "Информация о тестировании камеры"
+ },
+ "aspectRatio": "соотношение сторон"
+ },
+ "framesAndDetections": "Кадры/детекции",
+ "label": {
+ "ffmpeg": "FFmpeg",
+ "camera": "камера",
+ "capture": "захват",
+ "skipped": "пропущено",
+ "detect": "детекция",
+ "cameraDetectionsPerSecond": "{{camName}} обнаружений в секунду",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} пропущенных обнаружений в секунду",
+ "cameraFramesPerSecond": "{{camName}} кадров в секунду",
+ "overallFramesPerSecond": "общее количество кадров в секунду",
+ "overallDetectionsPerSecond": "общее количество обнаружений в секунду",
+ "overallSkippedDetectionsPerSecond": "общее количество пропущенных обнаружений в секунду",
+ "cameraFfmpeg": "{{camName}} FFmpeg",
+ "cameraCapture": "{{camName}} захват",
+ "cameraDetect": "{{camName}} обнаружения"
+ },
+ "toast": {
+ "success": {
+ "copyToClipboard": "Данные тестирования скопированы в буфер обмена."
+ },
+ "error": {
+ "unableToProbeCamera": "Не удалось протестировать камеру: {{errorMessage}}"
+ }
+ }
+ },
+ "lastRefreshed": "Обновлено: ",
+ "stats": {
+ "ffmpegHighCpuUsage": "Камера {{camera}} использует чрезмерно много ресурсов CPU в FFmpeg ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "Камера {{camera}} использует слишком много ресурсов CPU для детекции ({{detectAvg}}%)",
+ "healthy": "Система в порядке",
+ "reindexingEmbeddings": "Переиндексация эмбеддингов (выполнено {{processed}} %)",
+ "cameraIsOffline": "{{camera}} отключена",
+ "detectIsVerySlow": "{{detect}} идёт очень медленно ({{speed}} мс)",
+ "detectIsSlow": "{{detect}} идёт медленно ({{speed}} мс)"
+ },
+ "enrichments": {
+ "title": "Обогащение данных",
+ "infPerSecond": "Выводов в секунду",
+ "embeddings": {
+ "image_embedding_speed": "Скорость векторизации изображений",
+ "plate_recognition_speed": "Скорость распознавания номеров",
+ "text_embedding_speed": "Скорость векторизации текста",
+ "face_embedding_speed": "Скорость векторизации лиц",
+ "face_recognition_speed": "Скорость распознавания лиц",
+ "text_embedding": "Векторизация текста",
+ "yolov9_plate_detection_speed": "Скорость обнаружения номеров YOLOv9",
+ "yolov9_plate_detection": "Обнаружение номеров YOLOv9",
+ "face_recognition": "Распознавание лиц",
+ "plate_recognition": "Распознавание номеров",
+ "image_embedding": "Векторизация изображений"
+ }
+ }
+}
diff --git a/web/public/locales/sl/audio.json b/web/public/locales/sl/audio.json
new file mode 100644
index 000000000..31562e8c9
--- /dev/null
+++ b/web/public/locales/sl/audio.json
@@ -0,0 +1,110 @@
+{
+ "speech": "Govor",
+ "babbling": "Blebetanje",
+ "yell": "Kričanje",
+ "whispering": "Šepetanje",
+ "laughter": "Smejanje",
+ "crying": "Jokanje",
+ "sigh": "Vzdih",
+ "singing": "Petje",
+ "yodeling": "Jodlanje",
+ "rapping": "Rapanje",
+ "run": "Tek",
+ "whistling": "Žvižganje",
+ "breathing": "Dihanje",
+ "snoring": "Smrčanje",
+ "cough": "Kašelj",
+ "animal": "Žival",
+ "pets": "Ljubljenčki",
+ "dog": "Pes",
+ "cat": "Maček",
+ "meow": "Mijav",
+ "horse": "Konj",
+ "moo": "Muu",
+ "cowbell": "Kravji zvonec",
+ "pig": "Pujs",
+ "goat": "Koza",
+ "sheep": "Ovca",
+ "chicken": "Kokoš",
+ "turkey": "Puran",
+ "duck": "Raca",
+ "goose": "Gos",
+ "bird": "Ptič",
+ "radio": "Radio",
+ "television": "Televizija",
+ "footsteps": "Stopinje",
+ "bus": "Avtobus",
+ "train": "Vlak",
+ "toothbrush": "Ščetka za zobe",
+ "bark": "Lajanje",
+ "mouse": "Miš",
+ "keyboard": "Tipkovnica",
+ "boat": "Ladja",
+ "vehicle": "Prevozno sredstvo",
+ "car": "Avto",
+ "motorcycle": "Motor",
+ "bicycle": "Kolo",
+ "skateboard": "Skejt",
+ "door": "Vrata",
+ "sink": "Umivalnik",
+ "blender": "Sekljalnik",
+ "hair_dryer": "Fen",
+ "scissors": "Škarje",
+ "clock": "Ura",
+ "camera": "Kamera",
+ "bellow": "Spodaj",
+ "whoop": "Ups",
+ "musical_instrument": "Glasbeni inštrument",
+ "choir": "Zbor",
+ "burping": "Riganje",
+ "hiccup": "Kolcanje",
+ "fart": "Prdenje",
+ "hands": "Roke",
+ "finger_snapping": "Tleskanje s prsti",
+ "clapping": "Ploskanje",
+ "heartbeat": "Utrip srca",
+ "cheering": "Navijanje",
+ "applause": "Aplavz",
+ "crowd": "Množica",
+ "children_playing": "Igranje otrok",
+ "howl": "Auuu",
+ "purr": "Predenje",
+ "hiss": "Sikanje",
+ "livestock": "Živina",
+ "cattle": "Govedo",
+ "quack": "Ga-ga",
+ "cluck": "Kokodak",
+ "cock_a_doodle_doo": "Kikiriki",
+ "bleat": "Mee",
+ "neigh": "I-ha ha",
+ "chirp": "Čiv-čiv",
+ "pigeon": "Golob",
+ "coo": "Gru-gru",
+ "crow": "Vrana",
+ "caw": "Kra",
+ "owl": "Sova",
+ "hoot": "Hu-hu",
+ "flapping_wings": "Plapolanje kril",
+ "dogs": "Psi",
+ "rats": "Podgane",
+ "insect": "Insekt",
+ "cricket": "Čriček",
+ "mosquito": "Komar",
+ "fly": "Muha",
+ "frog": "Žaba",
+ "snake": "Kača",
+ "music": "Glasba",
+ "guitar": "Kitara",
+ "electric_guitar": "Električna kitara",
+ "bass_guitar": "Bas kitara",
+ "acoustic_guitar": "Akustična kitara",
+ "strum": "Brenkanje",
+ "banjo": "Bendžo",
+ "sitar": "Sitar",
+ "mandolin": "Mandolina",
+ "ukulele": "Ukulele",
+ "piano": "Klavir",
+ "electric_piano": "Digitalni klavir",
+ "organ": "Orgle",
+ "electronic_organ": "Digitalne orgle"
+}
diff --git a/web/public/locales/sl/common.json b/web/public/locales/sl/common.json
new file mode 100644
index 000000000..ff21c10ce
--- /dev/null
+++ b/web/public/locales/sl/common.json
@@ -0,0 +1,111 @@
+{
+ "time": {
+ "untilForTime": "Do {{time}}",
+ "untilRestart": "Do ponovnega zagona",
+ "ago": "{{timeAgo}} nazaj",
+ "justNow": "Zdaj",
+ "untilForRestart": "Dokler se Frigate ne zažene ponovno.",
+ "thisWeek": "Ta teden",
+ "lastWeek": "Prejšnji teden",
+ "thisMonth": "Ta mesec",
+ "year_one": "{{time}} leto",
+ "year_two": "{{time}} leti",
+ "year_few": "{{time}} leta",
+ "year_other": "{{time}} let",
+ "second_one": "{{time}} sekunda",
+ "second_two": "{{time}} sekundi",
+ "second_few": "{{time}} sekunde",
+ "second_other": "{{time}} sekund",
+ "month_one": "{{time}} mesec",
+ "month_two": "{{time}} meseca",
+ "month_few": "{{time}} meseci",
+ "month_other": "{{time}} mesecev",
+ "day_one": "{{time}} dan",
+ "day_two": "{{time}} dneva",
+ "day_few": "{{time}} dnevi",
+ "day_other": "{{time}} dni",
+ "hour_one": "{{time}} ura",
+ "hour_two": "{{time}} uri",
+ "hour_few": "{{time}} ure",
+ "hour_other": "{{time}} ur",
+ "minute_one": "{{time}} minuta",
+ "minute_two": "{{time}} minuti",
+ "minute_few": "{{time}} minute",
+ "minute_other": "{{time}} minut",
+ "10minutes": "10 minut",
+ "lastMonth": "Prejšnji mesec",
+ "5minutes": "5 minut",
+ "today": "Danes",
+ "yesterday": "Včeraj",
+ "last7": "Zadnjih 7 dni",
+ "last14": "Zadnjih 14 dni",
+ "last30": "Zadnjih 30 dni",
+ "1hour": "1 ura",
+ "12hours": "12 ur",
+ "24hours": "24 ur",
+ "30minutes": "30 minut",
+ "am": "am",
+ "pm": "pm",
+ "mo": "{{time}}mes",
+ "d": "{{time}}d",
+ "h": "{{time}}h",
+ "m": "{{time}}m",
+ "s": "{{time}}s",
+ "yr": "le"
+ },
+ "menu": {
+ "live": {
+ "cameras": {
+ "count_one": "{{count}} kamera",
+ "count_two": "{{count}} kameri",
+ "count_few": "{{count}} kamere",
+ "count_other": "{{count}} kamer",
+ "title": "Kamere"
+ },
+ "allCameras": "Vse Kamere",
+ "title": "V Živo"
+ },
+ "explore": "Brskanje",
+ "theme": {
+ "nord": "Nord"
+ },
+ "review": "Pregled"
+ },
+ "button": {
+ "apply": "Uporabi",
+ "reset": "Ponastavi",
+ "done": "Končano",
+ "disable": "Izklopi",
+ "close": "Zapri",
+ "back": "Nazaj",
+ "pictureInPicture": "Slika v Sliki",
+ "history": "Zgodovina",
+ "disabled": "Izklopljeno",
+ "copy": "Kopiraj",
+ "exitFullscreen": "Izhod iz Celozaslonskega načina",
+ "enabled": "Omogočen",
+ "enable": "Vklopi",
+ "save": "Shrani",
+ "saving": "Shranjevanje …",
+ "cancel": "Prekliči",
+ "fullscreen": "Celozaslonski način"
+ },
+ "unit": {
+ "speed": {
+ "kph": "km/h",
+ "mph": "mi/h"
+ },
+ "length": {
+ "feet": "čevelj",
+ "meters": "metri"
+ }
+ },
+ "label": {
+ "back": "Pojdi nazaj"
+ },
+ "pagination": {
+ "next": {
+ "label": "Pojdi na naslednjo stran"
+ }
+ }
+}
diff --git a/web/public/locales/sl/components/auth.json b/web/public/locales/sl/components/auth.json
new file mode 100644
index 000000000..547381ca1
--- /dev/null
+++ b/web/public/locales/sl/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "user": "Uporabniško ime",
+ "password": "Geslo",
+ "login": "Prijava",
+ "errors": {
+ "usernameRequired": "Uporabniško ime je potrebno",
+ "passwordRequired": "Geslo je zahtevano",
+ "rateLimit": "Preveč poskusov, poskusite znova kasneje.",
+ "loginFailed": "Prijava ni uspela",
+ "unknownError": "Neznana napaka. Preverite dnevnike.",
+ "webUnknownError": "Neznana napaka. Preverite dnevnike konzole."
+ }
+ }
+}
diff --git a/web/public/locales/sl/components/camera.json b/web/public/locales/sl/components/camera.json
new file mode 100644
index 000000000..9ee8f4046
--- /dev/null
+++ b/web/public/locales/sl/components/camera.json
@@ -0,0 +1,86 @@
+{
+ "group": {
+ "label": "Skupine kamer",
+ "add": "Dodaj skupino kamer",
+ "edit": "Uredi skupino kamer",
+ "delete": {
+ "label": "Izbriši skupino kamer",
+ "confirm": {
+ "title": "Potrdite izbris",
+ "desc": "Ali ste prepričani, da želite izbrisati skupino kamer z imenom {{name}}?"
+ }
+ },
+ "camera": {
+ "setting": {
+ "desc": "Spremeni možnosti prenosa v živo za nadzorno ploščo te skupine kamer. Te nastavitve so specifične za napravo/brskalnik.",
+ "streamMethod": {
+ "method": {
+ "smartStreaming": {
+ "desc": "Pametno pretakanje bo posodabljalo sliko vaše kamere enkrat na minuto, kadar ni zaznane nobene aktivnosti, da prihrani pasovno širino in vire. Ko je zaznana aktivnost, se slika brez prekinitve preklopi na prenos v živo.",
+ "label": "Pametno pretakanje (priporočeno)"
+ },
+ "continuousStreaming": {
+ "desc": {
+ "warning": "Neprekinjeno pretakanje lahko povzroči visoko porabo pasovne širine in težave z zmogljivostjo. Uporabljajte previdno.",
+ "title": "Slika kamere bo na nadzorni plošči vedno prenos v živo, tudi če ni zaznane nobene aktivnosti."
+ },
+ "label": "Neprekinjeno pretakanje"
+ },
+ "noStreaming": {
+ "desc": "Slike kamere se bodo posodabljale enkrat na minuto.",
+ "label": "Brez pretakanja"
+ }
+ },
+ "label": "Metoda pretakanja",
+ "placeholder": "Izberiti metodo pretakanja"
+ },
+ "audio": {
+ "tips": {
+ "title": "Izhod za zvok mora biti nastavljen v go2rtc za ta tok.",
+ "document": "Preberite dokumentacijo "
+ }
+ },
+ "label": "Nastavitve pretakanja kamer",
+ "title": "Nastavitve pretakanja kamere {{cameraName}}",
+ "audioIsAvailable": "Zvok za ta tok je na voljo",
+ "audioIsUnavailable": "Zvok za ta tok ni na voljo",
+ "compatibilityMode": {
+ "label": "Način združjivosti",
+ "desc": "To možnost omogočite le, če se v prenosu v živo vaše kamere pojavljajo barvni artefakti in diagonalna črta na desni strani slike."
+ },
+ "placeholder": "Izberite tok",
+ "stream": "Tok"
+ }
+ },
+ "name": {
+ "label": "Ime",
+ "placeholder": "Vpišite ime …",
+ "errorMessage": {
+ "mustLeastCharacters": "Ime skupine kamer mora imeti vsaj 2 znaka.",
+ "exists": "Skupina kamer s tem imenom že obstaja.",
+ "nameMustNotPeriod": "Ime skupine kamer ne sme vsebovati pike.",
+ "invalid": "Neveljavno ime skupine kamer."
+ }
+ },
+ "cameras": {
+ "label": "Kamere",
+ "desc": "Izberite kamere za to skupino."
+ },
+ "icon": "Ikona",
+ "success": "Skupina kamer z imenom ({{name}}) je bila shranjena."
+ },
+ "debug": {
+ "options": {
+ "label": "Nastavitve",
+ "title": "Lastnosti",
+ "showOptions": "Prikaži lastnosti",
+ "hideOptions": "Skrij lastnosti"
+ },
+ "boundingBox": "Omejitve okvirja",
+ "timestamp": "Časovni žig",
+ "zones": "Območja",
+ "mask": "Maska",
+ "motion": "Gibanje",
+ "regions": "Regije"
+ }
+}
diff --git a/web/public/locales/sl/components/dialog.json b/web/public/locales/sl/components/dialog.json
new file mode 100644
index 000000000..e63f7c34b
--- /dev/null
+++ b/web/public/locales/sl/components/dialog.json
@@ -0,0 +1,34 @@
+{
+ "restart": {
+ "title": "Ali ste prepričani, da želite ponovno zagnati Frigate?",
+ "button": "Ponovni zagon",
+ "restarting": {
+ "title": "Frigate se ponovno zaganja",
+ "content": "Ta stran se bo osvežila čez {{countdown}}.",
+ "button": "Osveži zdaj"
+ }
+ },
+ "explore": {
+ "plus": {
+ "review": {
+ "question": {
+ "ask_full": "Ali je ta objekt {{untranslatedLabel}} ({{translatedLabel}})?"
+ },
+ "state": {
+ "submitted": "Oddano"
+ }
+ }
+ },
+ "video": {
+ "viewInHistory": "Poglej zgodovino"
+ }
+ },
+ "export": {
+ "time": {
+ "lastHour_one": "Zadnja ura",
+ "lastHour_two": "Zadnji {{count}} uri",
+ "lastHour_few": "Zadnje {{count}} ure",
+ "lastHour_other": "Zadnjih {{count}} ur"
+ }
+ }
+}
diff --git a/web/public/locales/sl/components/filter.json b/web/public/locales/sl/components/filter.json
new file mode 100644
index 000000000..b202e1554
--- /dev/null
+++ b/web/public/locales/sl/components/filter.json
@@ -0,0 +1,61 @@
+{
+ "filter": "Filter",
+ "labels": {
+ "label": "Oznake",
+ "all": {
+ "title": "Vse oznake",
+ "short": "Oznake"
+ },
+ "count_one": "{{count}} oznaka",
+ "count_other": "{{count}} oznak"
+ },
+ "dates": {
+ "selectPreset": "Izberite nastavitev …",
+ "all": {
+ "title": "Vsi datumi",
+ "short": "Datumi"
+ }
+ },
+ "more": "Več filtrov",
+ "explore": {
+ "settings": {
+ "defaultView": {
+ "summary": "Povzetek"
+ }
+ }
+ },
+ "subLabels": {
+ "all": "Vse podoznake",
+ "label": "Podoznake"
+ },
+ "sort": {
+ "relevance": "Ustreznost",
+ "dateAsc": "Datum (naraščajoče)"
+ },
+ "zones": {
+ "label": "Cone",
+ "all": {
+ "title": "Vse cone",
+ "short": "Cone"
+ }
+ },
+ "timeRange": "Časovno obdobje",
+ "reset": {
+ "label": "Ponastavi filtre na privzete vrednosti"
+ },
+ "logSettings": {
+ "disableLogStreaming": "Izklopite zapisovanje dnevnika",
+ "allLogs": "Vsi dnevniki"
+ },
+ "trackedObjectDelete": {
+ "title": "Potrdite brisanje",
+ "desc": "Izbris teh {{objectLength}} sledenih predmetov odstrani pripadajoče slikovne posneteke, shranjene vstavke in povezane vnose življenskega cikla predmetov. Posnetki teh sledenih predmetov v pogledu Zgodovina se NE bodo izbrisali. detect kamere {{cameraName}} ni bilo prejetih nobenih sličic, preverite dnevnik napak"
+ },
+ "cameraDisabled": "Kamera je onemogočena",
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "Sličica je bila uspešno poslana v Frigate+"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "Pošiljanje sličice v Frigate+ ni uspelo"
+ }
+ }
+}
diff --git a/web/public/locales/sl/objects.json b/web/public/locales/sl/objects.json
new file mode 100644
index 000000000..19b21bfe0
--- /dev/null
+++ b/web/public/locales/sl/objects.json
@@ -0,0 +1,120 @@
+{
+ "cat": "Maček",
+ "sheep": "Ovca",
+ "bird": "Ptič",
+ "animal": "Žival",
+ "goat": "Koza",
+ "horse": "Konj",
+ "dog": "Pes",
+ "skis": "Smuči",
+ "surfboard": "Surf",
+ "laptop": "Prenosnik",
+ "tennis_racket": "Teniški lopar",
+ "deer": "Srna",
+ "waste_bin": "Koš za smeti",
+ "skateboard": "Skejt",
+ "baseball_glove": "Bejzbol rokavica",
+ "snowboard": "Snežna deska",
+ "bottle": "Flaša",
+ "squirrel": "Veverica",
+ "raccoon": "Rakun",
+ "robot_lawnmower": "Robotska kosilnica",
+ "person": "Oseba",
+ "bicycle": "Kolo",
+ "car": "Avto",
+ "motorcycle": "Motor",
+ "airplane": "Letalo",
+ "bus": "Avtobus",
+ "train": "Vlak",
+ "boat": "Ladja",
+ "traffic_light": "Semafor",
+ "fire_hydrant": "Hidrant",
+ "street_sign": "Prometni znak",
+ "stop_sign": "Stop znak",
+ "parking_meter": "Parkomat",
+ "bench": "Klop",
+ "cow": "Krava",
+ "elephant": "Slon",
+ "bear": "Medved",
+ "zebra": "Zebra",
+ "giraffe": "Žirafa",
+ "hat": "Kapa",
+ "backpack": "Nahrbtnik",
+ "umbrella": "Dežnik",
+ "shoe": "Čevelj",
+ "eye_glasses": "Očala",
+ "handbag": "Torbica",
+ "tie": "Kravata",
+ "suitcase": "Aktovka",
+ "frisbee": "Frizbi",
+ "sports_ball": "Žoga",
+ "kite": "Kajt",
+ "baseball_bat": "Bejzbol kij",
+ "plate": "Pladenj",
+ "wine_glass": "Kozarec za vino",
+ "cup": "Šalica",
+ "fork": "Vilica",
+ "knife": "Nož",
+ "spoon": "Žlica",
+ "bowl": "Skleda",
+ "banana": "Banana",
+ "apple": "Jabolka",
+ "sandwich": "Sendvič",
+ "orange": "Pomaranča",
+ "broccoli": "Brokoli",
+ "carrot": "Korenček",
+ "hot_dog": "Hot dog",
+ "pizza": "Pica",
+ "donut": "Krof",
+ "cake": "Torta",
+ "chair": "Stol",
+ "couch": "Kavč",
+ "potted_plant": "Lončnica",
+ "bed": "Postelja",
+ "mirror": "Ogledalo",
+ "dining_table": "Jedilna miza",
+ "window": "Okno",
+ "desk": "Miza",
+ "toilet": "Stranišče",
+ "door": "Vrata",
+ "tv": "Televizija",
+ "mouse": "Miš",
+ "remote": "Daljinec",
+ "keyboard": "Tipkovnica",
+ "cell_phone": "Telefon",
+ "microwave": "Mikrovalovna pečica",
+ "oven": "Pečica",
+ "toaster": "Opekač",
+ "sink": "Umivalnik",
+ "refrigerator": "Zmrzovalnik",
+ "blender": "Sekljalnik",
+ "book": "Knjiga",
+ "clock": "Ura",
+ "vase": "Vaza",
+ "scissors": "Škarje",
+ "teddy_bear": "Plišasti medvedek",
+ "hair_dryer": "Fen",
+ "toothbrush": "Ščetka za zobe",
+ "hair_brush": "Krtača za lase",
+ "vehicle": "Prevozno sredstvo",
+ "bark": "Lajanje",
+ "fox": "Lisica",
+ "rabbit": "Zajec",
+ "on_demand": "Na Zahtevo",
+ "face": "Obraz",
+ "license_plate": "Registerska tablica",
+ "package": "Paket",
+ "bbq_grill": "Roštilj",
+ "amazon": "Amazon",
+ "usps": "USPS",
+ "ups": "UPS",
+ "fedex": "FedEx",
+ "dhl": "DHL",
+ "an_post": "An Post",
+ "purolator": "Čistilec",
+ "postnl": "PostNL",
+ "nzpost": "NSPost",
+ "postnord": "PostNord",
+ "gls": "GLS",
+ "dpd": "DPD"
+}
diff --git a/web/public/locales/sl/views/configEditor.json b/web/public/locales/sl/views/configEditor.json
new file mode 100644
index 000000000..b8f76525d
--- /dev/null
+++ b/web/public/locales/sl/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "documentTitle": "Urejevalnik konfiguracij - Frigate",
+ "configEditor": "Urejevalnik konfiguracij",
+ "copyConfig": "Kopiraj konfiguracijo",
+ "saveAndRestart": "Shrani & ponovno zaženi",
+ "saveOnly": "Shani",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Konfiguracija kopirana v odložišče."
+ },
+ "error": {
+ "savingError": "Napaka pri shranjevanju konfiguracije"
+ }
+ },
+ "confirm": "Izhod brez shranjevanja?"
+}
diff --git a/web/public/locales/sl/views/events.json b/web/public/locales/sl/views/events.json
new file mode 100644
index 000000000..a0570b959
--- /dev/null
+++ b/web/public/locales/sl/views/events.json
@@ -0,0 +1,38 @@
+{
+ "detected": "zaznanih",
+ "events": {
+ "noFoundForTimePeriod": "Za to časovno obdobje ni bilo najdenih dogodkov.",
+ "label": "Dogodki",
+ "aria": "Izberi dogodke"
+ },
+ "allCameras": "Vse kamere",
+ "empty": {
+ "motion": "Ni najdenih podatkov o gibanju",
+ "alert": "Ni opozoril za pregled",
+ "detection": "Ni zaznanih elementov za pregled"
+ },
+ "recordings": {
+ "documentTitle": "Posnetki - Frigate"
+ },
+ "camera": "Kamera",
+ "documentTitle": "Pregled - Frigate",
+ "alerts": "Opozorila",
+ "detections": "Zaznavanja",
+ "motion": {
+ "label": "Premik",
+ "only": "Samo premik"
+ },
+ "timeline": "Časovnica",
+ "timeline.aria": "Izberi časovnico",
+ "calendarFilter": {
+ "last24Hours": "Zadnjih 24 ur"
+ },
+ "markAsReviewed": "Označi kot Pregledano",
+ "markTheseItemsAsReviewed": "Označi te elemente kot pregledane",
+ "newReviewItems": {
+ "label": "Ogled novih elementov za pregled",
+ "button": "Novi elementi za pregled"
+ },
+ "selected_one": "{{count}} izbranih",
+ "selected_other": "{{count}} izbranih"
+}
diff --git a/web/public/locales/sl/views/explore.json b/web/public/locales/sl/views/explore.json
new file mode 100644
index 000000000..97e7ca664
--- /dev/null
+++ b/web/public/locales/sl/views/explore.json
@@ -0,0 +1,73 @@
+{
+ "exploreIsUnavailable": {
+ "title": "Funkcija razišči ni na voljo",
+ "downloadingModels": {
+ "setup": {
+ "visionModel": "Model vida"
+ },
+ "context": "Frigate prenaša potrebne modele vdelave za podporo funkcije semantičnega iskanja. To lahko traja nekaj minut, odvisno od hitrosti vaše omrežne povezave."
+ },
+ "embeddingsReindexing": {
+ "step": {
+ "descriptionsEmbedded": "Vdelani opisi: ",
+ "trackedObjectsProcessed": "Obdelani sledeni predmeti: "
+ }
+ }
+ },
+ "documentTitle": "Razišči - Frigate",
+ "generativeAI": "Generativna UI",
+ "exploreMore": "Razišči več {{label}} objektov",
+ "details": {
+ "button": {
+ "regenerate": {
+ "label": "Regeneriraj opise sledenih predmetov",
+ "title": "Regeneriraj"
+ },
+ "findSimilar": "Najdi podobno"
+ },
+ "camera": "Kamera",
+ "estimatedSpeed": "Ocenjena hitrost",
+ "description": {
+ "placeholder": "Opis sledenega predmeta",
+ "label": "Opis"
+ },
+ "recognizedLicensePlate": "Prepoznana registrska tablica",
+ "objects": "Predmeti",
+ "zones": "Območja",
+ "timestamp": "Časovni žig"
+ },
+ "itemMenu": {
+ "findSimilar": {
+ "aria": "Najdi podobne sledene predmete",
+ "label": "Najdi podobno"
+ },
+ "submitToPlus": {
+ "label": "Predloži v Frigate+",
+ "aria": "Predloži v Frigate Plus"
+ },
+ "viewInHistory": {
+ "label": "Poglej v zgodovini",
+ "aria": "Poglej v zgodovini"
+ },
+ "deleteTrackedObject": {
+ "label": "Izbriši ta sledeni predmet"
+ },
+ "viewObjectLifecycle": {
+ "aria": "Pokaži življenjski cikel predmeta",
+ "label": "Poglej življenjski cikel predmeta"
+ },
+ "downloadVideo": {
+ "label": "Prenesi video",
+ "aria": "Prenesi video"
+ },
+ "downloadSnapshot": {
+ "label": "Prenesi posnetek",
+ "aria": "Prenesi posnetek"
+ }
+ },
+ "dialog": {
+ "confirmDelete": {
+ "title": "Potrdi brisanje"
+ }
+ }
+}
diff --git a/web/public/locales/sl/views/exports.json b/web/public/locales/sl/views/exports.json
new file mode 100644
index 000000000..59ca52181
--- /dev/null
+++ b/web/public/locales/sl/views/exports.json
@@ -0,0 +1,17 @@
+{
+ "documentTitle": "Izvoz - Frigate",
+ "search": "Iskanje",
+ "noExports": "Izovzi niso najdeni",
+ "deleteExport": "Izbriši izvoz",
+ "deleteExport.desc": "Ali ste prepričani, da želite izbrisati {{exportName}}?",
+ "editExport": {
+ "title": "Preimenuj izvoz",
+ "desc": "Vpišite novo ime za ta izvoz.",
+ "saveExport": "Shrani izvoz"
+ },
+ "toast": {
+ "error": {
+ "renameExportFailed": "Napaka pri preimenovanju izvoza: {{errorMessage}}"
+ }
+ }
+}
diff --git a/web/public/locales/sl/views/faceLibrary.json b/web/public/locales/sl/views/faceLibrary.json
new file mode 100644
index 000000000..d59acc47e
--- /dev/null
+++ b/web/public/locales/sl/views/faceLibrary.json
@@ -0,0 +1,34 @@
+{
+ "description": {
+ "addFace": "Sprehodite se skozi dodajanje nove zbirke v knjižnico obrazov.",
+ "placeholder": "Vnesite ime za to zbirko",
+ "invalidName": "Neveljavno ime. Ime lahko vsebuje črke, števila, presledke, narekovaje, podčrtaje in pomišljaje."
+ },
+ "details": {
+ "person": "Oseba",
+ "unknown": "Nenznano",
+ "timestamp": "Časovni žig"
+ },
+ "uploadFaceImage": {
+ "title": "Naloži nov obraz"
+ },
+ "deleteFaceAttempts": {
+ "desc_one": "Ali ste prepričani, da želite izbrisati {{count}} obraz? Tega dejanja ni mogoče razveljaviti.",
+ "desc_two": "Ali ste prepričani, da želite izbrisati {{count}} obraza? Tega dejanja ni mogoče razveljaviti.",
+ "desc_few": "Ali ste prepričani, da želite izbrisati {{count}} obraze? Tega dejanja ni mogoče razveljaviti.",
+ "desc_other": "Ali ste prepričani, da želite izbrisati {{count}} obrazov? Tega dejanja ni mogoče razveljaviti."
+ },
+ "toast": {
+ "success": {
+ "deletedFace_one": "Uspešno izbrisan {{count}} obraz.",
+ "deletedFace_two": "Uspešno izbrisana {{count}} obraza.",
+ "deletedFace_few": "Uspešno izbrisani {{count}} obrazi.",
+ "deletedFace_other": "Uspešno izbrisanih {{count}} obrazov.",
+ "deletedName_one": "{{count}} je bil uspešno izbrisan.",
+ "deletedName_two": "{{count}} obraza sta bila uspešno izbrisana.",
+ "deletedName_few": "{{count}} obrazi so bili uspešno izbrisani.",
+ "deletedName_other": "{{count}} obrazov je bilo uspešno izbrisanih."
+ }
+ },
+ "documentTitle": "Knjižnica obrazov - Frigate"
+}
diff --git a/web/public/locales/sl/views/live.json b/web/public/locales/sl/views/live.json
new file mode 100644
index 000000000..212137ba7
--- /dev/null
+++ b/web/public/locales/sl/views/live.json
@@ -0,0 +1,22 @@
+{
+ "documentTitle": "V živo - Frigate",
+ "documentTitle.withCamera": "{{camera}} - v živo - Frigate",
+ "lowBandwidthMode": "Nizkopasovni način",
+ "twoWayTalk": {
+ "enable": "Omogoči dvosmerni pogovor",
+ "disable": "Onemogoči Obojesmerni Pogovor"
+ },
+ "ptz": {
+ "move": {
+ "clickMove": {
+ "disable": "Onemogoči funkcijo klikni in premakni"
+ },
+ "left": {
+ "label": "Premakni PTZ kamero v levo"
+ },
+ "up": {
+ "label": "Premakni PTZ kamero gor"
+ }
+ }
+ }
+}
diff --git a/web/public/locales/sl/views/recording.json b/web/public/locales/sl/views/recording.json
new file mode 100644
index 000000000..20dacb6cc
--- /dev/null
+++ b/web/public/locales/sl/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "filter": "Filter",
+ "export": "Izvoz",
+ "calendar": "Koledar",
+ "filters": "Filtri",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "Izbrano časovno obdobje ni veljavno",
+ "endTimeMustAfterStartTime": "Končen čas mora biti po začetnem času"
+ }
+ }
+}
diff --git a/web/public/locales/sl/views/search.json b/web/public/locales/sl/views/search.json
new file mode 100644
index 000000000..b2233e1e4
--- /dev/null
+++ b/web/public/locales/sl/views/search.json
@@ -0,0 +1,72 @@
+{
+ "search": "Iskanje",
+ "savedSearches": "Shranjena iskanja",
+ "searchFor": "Iskanje za {{inputValue}}",
+ "button": {
+ "clear": "Izbriši iskanje",
+ "save": "Shrani iskanje",
+ "delete": "Izbriši shranjeno iskanje",
+ "filterInformation": "Informacije o filtru",
+ "filterActive": "Aktivirani filtri"
+ },
+ "filter": {
+ "label": {
+ "cameras": "Kamere",
+ "labels": "Oznake",
+ "zones": "Območja",
+ "sub_labels": "Podoznake",
+ "search_type": "Tip iskanja",
+ "time_range": "Časovni razpon",
+ "before": "Pred",
+ "after": "Po",
+ "min_score": "Najmanj točk",
+ "max_score": "Največ točk",
+ "recognized_license_plate": "Prepoznana registrska tablica",
+ "has_clip": "Ima posnetek",
+ "max_speed": "Najvišja hitrost",
+ "min_speed": "Najnižja hitrost",
+ "has_snapshot": "Ima sliko"
+ },
+ "searchType": {
+ "thumbnail": "Sličica",
+ "description": "Opis"
+ },
+ "toast": {
+ "error": {
+ "beforeDateBeLaterAfter": "Datum »pred« mora biti poznejši od datuma »po«.",
+ "afterDatebeEarlierBefore": "Datum »po« mora biti zgodnejši od datuma »pred«.",
+ "minScoreMustBeLessOrEqualMaxScore": "Polje 'Najmanj točk' mora biti manjše ali enako polju 'Največ točk'.",
+ "maxScoreMustBeGreaterOrEqualMinScore": "Polje 'Največ točk' mora biti večje ali enako polju 'Najmanj točk'.",
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "Polje 'Najvišja hitrost' mora biti večje ali enako polju 'Najnižja hitrost'.",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "Polje 'Najnižja hitrost' mora biti manjše ali enako 'Najvišji hitrosti'."
+ }
+ },
+ "tips": {
+ "title": "Kako uporabljati besedilne filtre",
+ "desc": {
+ "text": "Filtri vam pomagajo zožati rezultate iskanja. Tukaj je, kako jih uporabiti v vnosnem polju:",
+ "step1": "Vnesite ime ključa filtra, ki mu sledi dvopičje (npr. »kamere:«).",
+ "step2": "Izberite vrednost iz predlogov, ali vpišite svojo.",
+ "step3": "Uporabite več filtrov tako, da jih dodate enega za drugim s presledkom vmes.",
+ "step4": "Datumski filtri uporabljajo format: {{DateFormat}}.",
+ "step5": "Časovni filter uporablja format: {{exampleTime}}.",
+ "step6": "Filter izbrišete s klikom na 'x' poleg njih.",
+ "exampleLabel": "Primer:"
+ }
+ },
+ "header": {
+ "currentFilterType": "Filtriraj vrednosti",
+ "noFilters": "Filtri",
+ "activeFilters": "Aktivni filtri"
+ }
+ },
+ "trackedObjectId": "ID sledečega objekta",
+ "similaritySearch": {
+ "title": "Iskanje podobnosti",
+ "active": "Iskanje podobnosti je aktivno",
+ "clear": "Izbriši iskanje podobnosti"
+ },
+ "placeholder": {
+ "search": "Iskanje …"
+ }
+}
diff --git a/web/public/locales/sl/views/settings.json b/web/public/locales/sl/views/settings.json
new file mode 100644
index 000000000..af8f70748
--- /dev/null
+++ b/web/public/locales/sl/views/settings.json
@@ -0,0 +1,70 @@
+{
+ "documentTitle": {
+ "default": "Nastavitve - Frigate",
+ "authentication": "Nastavitve preverjanja pristnosti - Frigate",
+ "camera": "Nastavitve kamere - Frigate",
+ "notifications": "Nastavitve obvestil - Frigate",
+ "masksAndZones": "Urejevalnik mask in območij - Frigate",
+ "object": "Odpravljanje napak - Frigate",
+ "general": "Splošne Nastavitve - Frigate",
+ "frigatePlus": "Frigate+ Nastavitve - Frigate",
+ "enrichments": "Nastavitve Obogatitev - Frigate"
+ },
+ "menu": {
+ "ui": "Uporabniški vmesnik",
+ "enrichments": "Obogatitve",
+ "cameras": "Nastavitve Kamere",
+ "masksAndZones": "Maske / Cone",
+ "debug": "Razhroščevanje",
+ "users": "Uporabniki",
+ "notifications": "Obvestila",
+ "frigateplus": "Frigate+"
+ },
+ "masksAndZones": {
+ "zones": {
+ "point_one": "{{count}} točka",
+ "point_two": "{{count}} točki",
+ "point_few": "{{count}} točke",
+ "point_other": "{{count}} točk"
+ },
+ "objectMasks": {
+ "point_one": "{{count}} točka",
+ "point_two": "{{count}} točki",
+ "point_few": "{{count}} točke",
+ "point_other": "{{count}} točk"
+ },
+ "motionMasks": {
+ "point_one": "{{count}} točka",
+ "point_two": "{{count}} točki",
+ "point_few": "{{count}} točke",
+ "point_other": "{{count}} točk"
+ }
+ },
+ "dialog": {
+ "unsavedChanges": {
+ "title": "Imate neshranjene spremembe.",
+ "desc": "Ali želite shraniti spremembe, preden nadaljujete?"
+ }
+ },
+ "cameraSetting": {
+ "camera": "Kamera",
+ "noCamera": "Brez Kamere"
+ },
+ "general": {
+ "title": "Splošne Nastavitve",
+ "liveDashboard": {
+ "title": "Nadzorna plošča (v živo)",
+ "automaticLiveView": {
+ "label": "Samodejni pogled v živo",
+ "desc": "Samodejno preklopite na pogled kamere v živo, ko je zaznana aktivnost. Če onemogočite to možnost, se statične slike kamere na nadzorni plošči v živo posodobijo le enkrat na minuto."
+ },
+ "playAlertVideos": {
+ "label": "Predvajajte opozorilne videoposnetke"
+ }
+ },
+ "storedLayouts": {
+ "title": "Sharnjene Postavitve",
+ "desc": "Postaviteve kamer v skupini kamer je mogoče povleči/prilagoditi. Položaji so shranjeni v lokalnem pomnilniku vašega brskalnika."
+ }
+ }
+}
diff --git a/web/public/locales/sl/views/system.json b/web/public/locales/sl/views/system.json
new file mode 100644
index 000000000..4a19721c0
--- /dev/null
+++ b/web/public/locales/sl/views/system.json
@@ -0,0 +1,106 @@
+{
+ "documentTitle": {
+ "cameras": "Statistika kamer - Frigate",
+ "storage": "Statistika prostora - Frigate",
+ "general": "Statistika - Frigate",
+ "logs": {
+ "frigate": "Frigate dnevniki - Frigate",
+ "go2rtc": "Go2RTC dnevniki - Frigate",
+ "nginx": "Nginx dnevniki - Frigate"
+ }
+ },
+ "logs": {
+ "download": {
+ "label": "Prenesi dnevnike"
+ },
+ "copy": {
+ "label": "Kopiraj v odložišče",
+ "success": "Dnevniki kopirani v odložišče",
+ "error": "Dnevnika ni bilo mogoče kopirati v odložišče"
+ },
+ "type": {
+ "label": "Tip",
+ "timestamp": "Časovni žig",
+ "message": "Sporočilo",
+ "tag": "Oznaka"
+ }
+ },
+ "storage": {
+ "recordings": {
+ "title": "Posnetki",
+ "tips": "Ta vrednost predstavlja velikost podatkovne zbirke posnetkov Frigate. Frigate ne spremlja velikost drugih datotek na disku.",
+ "earliestRecording": "Najstarejši posnetki:"
+ },
+ "title": "Hramba",
+ "overview": "Pregled",
+ "cameraStorage": {
+ "title": "Hramba kamer",
+ "camera": "Kamera",
+ "unusedStorageInformation": "Informacija neporabljenega prostora",
+ "storageUsed": "Hramba",
+ "percentageOfTotalUsed": "Procent celote",
+ "bandwidth": "Pasovna širina",
+ "unused": {
+ "title": "Neporabljeno",
+ "tips": "Ta vrednost ne predstavlja dejanske proste kapacitete za Frigate posnetke, če na disku shranjujete še druge datoteke. Frigate ne spremlja velikost drugih datotek na disku."
+ }
+ }
+ },
+ "general": {
+ "hardwareInfo": {
+ "npuMemory": "Pomnilnik NPE",
+ "title": "Podatki strojne opreme",
+ "gpuUsage": "Poraba GPE",
+ "gpuMemory": "Pomnilnik GPE",
+ "gpuEncoder": "GPE kodirnik",
+ "gpuDecoder": "GPE dekoder",
+ "gpuInfo": {
+ "vainfoOutput": {
+ "title": "Vainfo izpis",
+ "returnCode": "Povratna koda: {{code}}",
+ "processOutput": "Izpis procesa:",
+ "processError": "Napaka procesa:"
+ },
+ "nvidiaSMIOutput": {
+ "title": "Nvidia SMI izpis",
+ "name": "Ime: {{name}}",
+ "driver": "Gonilnik: {{driver}}",
+ "cudaComputerCapability": "Zmožnost računanja CUDA: {{cuda_compute}}",
+ "vbios": "VBios info: {{vbios}}"
+ },
+ "closeInfo": {
+ "label": "Zapri GPU info"
+ },
+ "copyInfo": {
+ "label": "Kopiraj GPU info"
+ },
+ "toast": {
+ "success": "GPU informacije kopirane v odložišče"
+ }
+ },
+ "npuUsage": "Poraba NPE"
+ },
+ "title": "Splošno",
+ "detector": {
+ "title": "Detektorji",
+ "inferenceSpeed": "Hitrost sklepanja detektorja",
+ "temperature": "Temperatura detektorja",
+ "cpuUsage": "Poraba CPE detektorja",
+ "memoryUsage": "Poraba pomnilnika detektorja"
+ },
+ "otherProcesses": {
+ "title": "Ostali procesi",
+ "processMemoryUsage": "Poraba pomnilnika",
+ "processCpuUsage": "Poraba CPE"
+ }
+ },
+ "title": "Sistem",
+ "metrics": "Sistemske meritve",
+ "cameras": {
+ "title": "Kamere",
+ "overview": "Pregled",
+ "info": {
+ "aspectRatio": "razmerje stranic"
+ }
+ }
+}
diff --git a/web/public/locales/sv/audio.json b/web/public/locales/sv/audio.json
new file mode 100644
index 000000000..2e685096c
--- /dev/null
+++ b/web/public/locales/sv/audio.json
@@ -0,0 +1,162 @@
+{
+ "yell": "Skrik",
+ "bicycle": "Cykel",
+ "speech": "Tal",
+ "car": "Bil",
+ "bellow": "Under",
+ "motorcycle": "Motorcykel",
+ "whispering": "Viskning",
+ "bus": "Buss",
+ "babbling": "Babblande",
+ "whoop": "Skrika",
+ "camera": "Kamera",
+ "laughter": "Skratt",
+ "snicker": "Fnittra",
+ "crying": "Gråt",
+ "choir": "Kör",
+ "singing": "Sjunger",
+ "yodeling": "Joddling",
+ "chant": "Sång",
+ "mantra": "Mantra",
+ "synthetic_singing": "Syntetisk sång",
+ "rapping": "Rappar",
+ "groan": "Stöna",
+ "grunt": "Grymta",
+ "whistling": "Visslar",
+ "breathing": "Andas",
+ "snoring": "Snarkning",
+ "gasp": "Flämtning",
+ "pant": "Flämta",
+ "cough": "Hosta",
+ "throat_clearing": "Halsrensning",
+ "sneeze": "Nysa",
+ "run": "Spring",
+ "shuffle": "Blanda",
+ "footsteps": "Fotsteg",
+ "chewing": "Tugga",
+ "biting": "Biter",
+ "gargling": "Gurgling",
+ "stomach_rumble": "Magljud",
+ "burping": "Rapning",
+ "hiccup": "Hicka",
+ "fart": "Fis",
+ "hands": "Händer",
+ "finger_snapping": "Knäppning med fingrar",
+ "clapping": "Klappar",
+ "heartbeat": "Hjärtslag",
+ "heart_murmur": "Blåsljud i hjärtat",
+ "cheering": "Glädjande",
+ "applause": "Applåder",
+ "chatter": "Prat",
+ "crowd": "Folkmassa",
+ "animal": "Djur",
+ "yip": "Japp",
+ "howl": "Tjut",
+ "bow_wow": "Bow Wow",
+ "growling": "Morrande",
+ "whimper_dog": "Hund gnäll",
+ "cat": "Katt",
+ "meow": "Mjau",
+ "hiss": "Väsa",
+ "caterwaul": "Kattgräl",
+ "livestock": "Boskap",
+ "horse": "Häst",
+ "clip_clop": "Klipp Clop",
+ "neigh": "Gnägga",
+ "cattle": "Boskap",
+ "oink": "Oink",
+ "goat": "Get",
+ "bleat": "Bräka",
+ "fowl": "Fjäderfä",
+ "cluck": "Kluck",
+ "cock_a_doodle_doo": "kukilikuk",
+ "turkey": "kalkon",
+ "gobble": "Gobble",
+ "duck": "Anka",
+ "quack": "Quack",
+ "goose": "Gås",
+ "honk": "Tuta",
+ "wild_animals": "Vilda djur",
+ "roaring_cats": "Rytande katter",
+ "roar": "Rytande",
+ "bird": "Fågel",
+ "chirp": "Kvittra",
+ "squawk": "Skriande",
+ "pigeon": "Duva",
+ "caw": "Kraxa",
+ "owl": "Uggla",
+ "hoot": "Tuta",
+ "dogs": "Hundar",
+ "rats": "Råttor",
+ "mouse": "Älg",
+ "music": "Musik",
+ "sigh": "Suck",
+ "child_singing": "Barnsång",
+ "sheep": "Får",
+ "wheeze": "Väsande",
+ "dog": "Hund",
+ "sniff": "Sniffa",
+ "humming": "Hummar",
+ "pets": "Husdjur",
+ "coo": "Kuttra",
+ "snort": "Fnysa",
+ "children_playing": "Barn som leker",
+ "bark": "Skall",
+ "purr": "Spinna",
+ "moo": "Muu",
+ "cowbell": "Koskälla",
+ "pig": "Gris",
+ "chicken": "Kyckling",
+ "crow": "Kråka",
+ "frog": "Groda",
+ "patter": "Droppar",
+ "insect": "Insekt",
+ "cricket": "Syrsa",
+ "fly": "Fluga",
+ "buzz": "Surr",
+ "croak": "Kvack",
+ "rattle": "Skallra",
+ "musical_instrument": "Musikinstrument",
+ "plucked_string_instrument": "Stränginstrument",
+ "guitar": "Gitarr",
+ "electric_guitar": "Elektrisk Gitarr",
+ "bass_guitar": "Basgitarr",
+ "steel_guitar": "Stålgitarr",
+ "tapping": "Knackning",
+ "snake": "Orm",
+ "acoustic_guitar": "Aukustisk gitarr",
+ "mosquito": "Mygga",
+ "flapping_wings": "Vingslag",
+ "whale_vocalization": "Val-ljud",
+ "bass_drum": "Bastrumma",
+ "timpani": "Pukor",
+ "tabla": "Tabla",
+ "hi_hat": "Hi-Hat",
+ "wood_block": "Träblock",
+ "tambourine": "Tamburin",
+ "maraca": "Maracas",
+ "drum_roll": "Trumvirvel",
+ "rimshot": "Kantslag",
+ "snare_drum": "Virveltrumma",
+ "cymbal": "Cymbal",
+ "mandolin": "Mandolin",
+ "boat": "Båt",
+ "train": "Tåg",
+ "bowed_string_instrument": "stråkinstrument",
+ "banjo": "Banjo",
+ "sitar": "Sitar",
+ "clock": "Klocka",
+ "keyboard": "Tangentbord",
+ "vehicle": "Fordon",
+ "skateboard": "Skatebord",
+ "door": "Dörr",
+ "blender": "Mixer",
+ "sink": "Vask",
+ "hair_dryer": "Hårfön",
+ "toothbrush": "Tandborste",
+ "scissors": "Sax",
+ "strum": "Anslag",
+ "zither": "Citer",
+ "ukulele": "Ukulele",
+ "piano": "Piano"
+}
diff --git a/web/public/locales/sv/common.json b/web/public/locales/sv/common.json
new file mode 100644
index 000000000..a220db585
--- /dev/null
+++ b/web/public/locales/sv/common.json
@@ -0,0 +1,257 @@
+{
+ "time": {
+ "untilForTime": "Till {{time}}",
+ "untilForRestart": "Tills Frigate startar om.",
+ "untilRestart": "Tills omstart",
+ "ago": "{{timeAgo}} sedan",
+ "justNow": "Just nu",
+ "today": "Idag",
+ "yesterday": "Igår",
+ "last14": "Senaste 14 dagarna",
+ "thisMonth": "Denna månad",
+ "lastMonth": "Förra månaden",
+ "30minutes": "30 minuter",
+ "1hour": "1 timma",
+ "12hours": "12 timmar",
+ "pm": "pm",
+ "am": "am",
+ "yr": "{{time}}år",
+ "mo": "{{time}} mån",
+ "month_one": "{{time}} månad",
+ "month_other": "{{time}} månader",
+ "d": "{{time}}dag",
+ "last7": "Senaste 7 dagarna",
+ "5minutes": "5 minuter",
+ "last30": "Senaste 30 dagarna",
+ "thisWeek": "Denna vecka",
+ "lastWeek": "Förra veckan",
+ "10minutes": "10 minuter",
+ "24hours": "24 timmar",
+ "year_one": "{{time}} år",
+ "year_other": "{{time}} år",
+ "second_one": "{{time}} sekund",
+ "second_other": "{{time}} sekunder",
+ "formattedTimestampMonthDayYear": {
+ "12hour": "d MMM, yyyy",
+ "24hour": "d MMM, yyy"
+ },
+ "h": "{{time}} h",
+ "hour_one": "{{time}} timme",
+ "hour_other": "{{time}} timmar",
+ "m": "{{time}} m",
+ "minute_one": "{{time}} minut",
+ "minute_other": "{{time}} minuter",
+ "s": "{{time}} s",
+ "formattedTimestamp": {
+ "12hour": "d MMM, kl. h:mm:ss a",
+ "24hour": "d MMM, HH:mm:ss"
+ },
+ "formattedTimestamp2": {
+ "12hour": "dd/MM h:mm:ssa",
+ "24hour": "d MMM HH:mm:ss"
+ },
+ "formattedTimestampHourMinute": {
+ "12hour": "kl. h:mm a",
+ "24hour": "HH:mm"
+ },
+ "formattedTimestampHourMinuteSecond": {
+ "12hour": "h:mm:ss aaa",
+ "24hour": "HH:mm:ss"
+ },
+ "formattedTimestampMonthDayHourMinute": {
+ "12hour": "d MMM, h:mm aaa",
+ "24hour": "d MMM, HH:mm"
+ },
+ "formattedTimestampMonthDayYearHourMinute": {
+ "12hour": "d MMM yyy, h:mm aaa",
+ "24hour": "d MMM yyyy, HH:mm"
+ },
+ "formattedTimestampMonthDay": "d MMM",
+ "formattedTimestampFilename": {
+ "12hour": "dd-MM-yy-h-mm-ss-a",
+ "24hour": "dd-MM-yy-HH-mm-ss"
+ },
+ "day_one": "{{time}} dag",
+ "day_other": "{{time}} dagar"
+ },
+ "button": {
+ "save": "Spara",
+ "enabled": "Aktiverad",
+ "enable": "Aktivera",
+ "disabled": "Inaktiverad",
+ "pictureInPicture": "Bild-i-Bild",
+ "twoWayTalk": "Tvåvägskommunikation",
+ "edit": "Redigera",
+ "copyCoordinates": "Kopiera koordinater",
+ "suspended": "Pausad",
+ "play": "Spela",
+ "unselect": "Avmarkera",
+ "unsuspended": "Återuppta",
+ "deleteNow": "Radera nu",
+ "next": "Nästa",
+ "apply": "Verkställ",
+ "reset": "Återställ",
+ "done": "Klar",
+ "disable": "Inaktivera",
+ "saving": "Sparar…",
+ "cancel": "Avbryt",
+ "close": "Stäng",
+ "copy": "Kopiera",
+ "back": "Tillbaka",
+ "history": "Historia",
+ "fullscreen": "Fullskärm",
+ "exitFullscreen": "Lämna Fullskärm",
+ "cameraAudio": "Kameraljud",
+ "on": "PÅ",
+ "off": "AV",
+ "delete": "Släng",
+ "yes": "Ja",
+ "no": "Nej",
+ "download": "Ladda ner",
+ "info": "Info",
+ "export": "Exportera"
+ },
+ "menu": {
+ "language": {
+ "yue": "Kantonesiska",
+ "it": "Italienska",
+ "fr": "Franska",
+ "nl": "Nederländska (Dutch)",
+ "hi": "Hindi",
+ "pt": "Portugisiska",
+ "ru": "Ryska",
+ "pl": "Polska",
+ "el": "Grekiska",
+ "sk": "Slovenska",
+ "tr": "Turkiska",
+ "uk": "Ukrainska",
+ "he": "Hebreiska",
+ "ro": "Romänska",
+ "hu": "Ungerska",
+ "fi": "Finska",
+ "da": "Danska",
+ "ar": "Arabiska",
+ "es": "Spanska",
+ "zhCN": "Kinesiska",
+ "de": "Tyska",
+ "ja": "Japanska",
+ "sv": "Svenska (Swedish)",
+ "cs": "Tjeckiska (Czech)",
+ "nb": "Norsk Bokmål (Norsk Bokmål)",
+ "ko": "Koreanska",
+ "vi": "Vietnamesiska",
+ "fa": "Persiska",
+ "th": "Thailändska",
+ "withSystem": {
+ "label": "Använd systeminställningarna för språk"
+ },
+ "en": "Engelska"
+ },
+ "darkMode": {
+ "withSystem": {
+ "label": "Använd systeminställningarna för ljust eller mörkt läge"
+ },
+ "label": "Mörk Läge",
+ "light": "Ljus",
+ "dark": "Mörk"
+ },
+ "theme": {
+ "label": "Tema",
+ "blue": "Blå",
+ "green": "Grön",
+ "nord": "North",
+ "default": "Standard",
+ "highcontrast": "Hög Kontrast",
+ "red": "Röd"
+ },
+ "export": "Exportera",
+ "faceLibrary": "Ansiktsbibliotek",
+ "user": {
+ "title": "Användare",
+ "account": "Konto",
+ "current": "Nuvarande Användare: {{user}}",
+ "anonymous": "anonym",
+ "logout": "Logga ut",
+ "setPassword": "Sätt Lösenord"
+ },
+ "systemMetrics": "Systemstatus",
+ "configuration": "Konfiguration",
+ "explore": "Utforska",
+ "live": {
+ "cameras": {
+ "count_one": "{{count}} Kamera",
+ "count_other": "{{count}} Kameror",
+ "title": "Kameror"
+ },
+ "allCameras": "Alla kameror",
+ "title": "Live"
+ },
+ "system": "System",
+ "systemLogs": "Systemlogg",
+ "settings": "Inställningar",
+ "help": "Hjälp",
+ "documentation": {
+ "title": "Dokumentation",
+ "label": "Frigate dokumentation"
+ },
+ "uiPlayground": "UI Testmiljö",
+ "restart": "Starta om Frigate",
+ "review": "Granska",
+ "languages": "Språk",
+ "configurationEditor": "Konfigurationsredigerare",
+ "withSystem": "System",
+ "appearance": "Utseende"
+ },
+ "pagination": {
+ "next": {
+ "title": "Nästa",
+ "label": "Gå till nästa sida"
+ },
+ "previous": {
+ "title": "Föregående",
+ "label": "Gå till föregående sida"
+ },
+ "more": "Flera sidor",
+ "label": "paginering"
+ },
+ "accessDenied": {
+ "title": "Åtkomst Förbjuden",
+ "desc": "Du har inte rättigheter att visa den här sidan.",
+ "documentTitle": "Åtkomst Förbjuden - Frigate"
+ },
+ "role": {
+ "admin": "Admin",
+ "viewer": "Tittare",
+ "desc": "Administratörer har fullständig åtkomst till alla funktioner i Frigates gränssnitt. Tittare kan endast visa kameror, granska objekt och se historiskt videomaterial.",
+ "title": "Roll"
+ },
+ "notFound": {
+ "documentTitle": "Hittades Inte - Frigate",
+ "desc": "Sidan hittades inte",
+ "title": "404"
+ },
+ "toast": {
+ "save": {
+ "title": "Spara",
+ "error": {
+ "title": "Misslyckades med att spara konfigurationsändringar: {{errorMessage}}",
+ "noMessage": "Misslyckades med att spara konfigurationsändringar"
+ }
+ },
+ "copyUrlToClipboard": "Webbadressen har kopierats till urklipp."
+ },
+ "label": {
+ "back": "Gå tillbaka"
+ },
+ "unit": {
+ "speed": {
+ "mph": "mph",
+ "kph": "km/h"
+ },
+ "length": {
+ "feet": "fot",
+ "meters": "meter"
+ }
+ },
+ "selectItem": "Välj {{item}}"
+}
diff --git a/web/public/locales/sv/components/auth.json b/web/public/locales/sv/components/auth.json
new file mode 100644
index 000000000..8581ffe94
--- /dev/null
+++ b/web/public/locales/sv/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "password": "Lösenord",
+ "user": "Användarnamn",
+ "login": "Logga in",
+ "errors": {
+ "usernameRequired": "Användarnamn är obligatoriskt",
+ "passwordRequired": "Lösenord är obligatoriskt",
+ "loginFailed": "Inloggning misslyckades",
+ "unknownError": "Okänt fel. Kontrollera loggarna.",
+ "webUnknownError": "Okänt fel. Kontrollera konsol loggarna.",
+ "rateLimit": "Överskriden anropsgräns. Försök igen senare."
+ }
+ }
+}
diff --git a/web/public/locales/sv/components/camera.json b/web/public/locales/sv/components/camera.json
new file mode 100644
index 000000000..f4a3448db
--- /dev/null
+++ b/web/public/locales/sv/components/camera.json
@@ -0,0 +1,86 @@
+{
+ "group": {
+ "label": "Kameragrupper",
+ "add": "Lägg till Kameragrupp",
+ "edit": "Ändra Kameragrupp",
+ "delete": {
+ "label": "Radera kameragrupp",
+ "confirm": {
+ "title": "Bekräfta borttagning",
+ "desc": "Är du säker på att du vill ta bort kameragruppen {{name}}?"
+ }
+ },
+ "success": "Kameragruppen ({{name}}) har sparats.",
+ "name": {
+ "label": "Namn",
+ "placeholder": "Ange ett namn…",
+ "errorMessage": {
+ "mustLeastCharacters": "Gruppnamnet för kameror måste vara minst 2 tecken.",
+ "nameMustNotPeriod": "Kameragruppnamnet får inte innehålla en punkt.",
+ "invalid": "Ogiltligt kameragruppnamn.",
+ "exists": "Kameragruppnamnet finns redan."
+ }
+ },
+ "icon": "Ikon",
+ "camera": {
+ "setting": {
+ "label": "inställningar för kameraströmning",
+ "title": "{{cameraName}} Streaminginställningar",
+ "desc": "Ändra alternativen för livestreaming för den här kameragruppens instrumentpanel. Dessa inställningar är enhets-/webbläsarspecifika.",
+ "audioIsAvailable": "Ljud är tillgängligt för denna kameraström",
+ "audioIsUnavailable": "Ljud är otillgängligt för denna kameraström",
+ "audio": {
+ "tips": {
+ "title": "Ljud måste sändas från din kamera och konfigureras i go2rtc för den här strömmen.",
+ "document": "Läs dokumentationen. "
+ }
+ },
+ "streamMethod": {
+ "label": "Strömningsmetod",
+ "method": {
+ "smartStreaming": {
+ "desc": "Smart streaming uppdaterar kamerabilden en gång per minut när ingen detekterbar aktivitet sker för att spara bandbredd och resurser. När aktivitet detekteras växlar bilden sömlöst till en livestream.",
+ "label": "Smart strömning (rekommenderas)"
+ },
+ "continuousStreaming": {
+ "label": "Kontinuerlig strömning",
+ "desc": {
+ "title": "Kamerabilden kommer alltid att vara en liveström när den är synlig på instrumentpanelen, även om ingen aktivitet detekteras.",
+ "warning": "Kontinuerlig strömning kan orsaka hög bandbreddsanvändning och prestandaproblem. Använd med försiktighet."
+ }
+ },
+ "noStreaming": {
+ "label": "Ingen strömning",
+ "desc": "Kamerabilderna uppdateras bara en gång per minut och ingen livestreaming kommer att ske."
+ }
+ },
+ "placeholder": "Välj en strömningsmetod"
+ },
+ "stream": "Strömma",
+ "placeholder": "Välj en ström",
+ "compatibilityMode": {
+ "label": "Kompatibilitetsläge",
+ "desc": "Aktivera endast det här alternativet om kamerans livestream visar färgartefakter och har en diagonal linje på höger sida av bilden."
+ }
+ }
+ },
+ "cameras": {
+ "desc": "Välj kameror för denna guppen.",
+ "label": "Kameror"
+ }
+ },
+ "debug": {
+ "options": {
+ "showOptions": "Visa alternativ",
+ "label": "Inställningar",
+ "title": "Alternativ",
+ "hideOptions": "Dölj alternativ"
+ },
+ "boundingBox": "Avgränsningsruta",
+ "timestamp": "Tidsstämpel",
+ "zones": "Zoner",
+ "mask": "Maskera",
+ "motion": "Rörelse",
+ "regions": "Regioner"
+ }
+}
diff --git a/web/public/locales/sv/components/dialog.json b/web/public/locales/sv/components/dialog.json
new file mode 100644
index 000000000..8e5db043d
--- /dev/null
+++ b/web/public/locales/sv/components/dialog.json
@@ -0,0 +1,18 @@
+{
+ "restart": {
+ "button": "Starta om",
+ "restarting": {
+ "title": "Frigate startar om",
+ "content": "Sidan uppdateras om {{countdown}} seconds.",
+ "button": "Tvinga uppdatering nu"
+ },
+ "title": "Är du säker på att du vill starta om Frigate?"
+ },
+ "explore": {
+ "plus": {
+ "submitToPlus": {
+ "label": "Skicka till Frigate+"
+ }
+ }
+ }
+}
diff --git a/web/public/locales/sv/components/filter.json b/web/public/locales/sv/components/filter.json
new file mode 100644
index 000000000..67529dada
--- /dev/null
+++ b/web/public/locales/sv/components/filter.json
@@ -0,0 +1,72 @@
+{
+ "labels": {
+ "all": {
+ "title": "Alla Etiketter",
+ "short": "Etiketter"
+ },
+ "label": "Etiketter",
+ "count": "{{count}} Etiketter",
+ "count_one": "{{count}} Etikett"
+ },
+ "filter": "Filter",
+ "zones": {
+ "label": "Zoner",
+ "all": {
+ "title": "Alla zoner"
+ }
+ },
+ "features": {
+ "hasSnapshot": "Har ögonblicksbild"
+ },
+ "sort": {
+ "dateAsc": "Datum (Stigande)",
+ "label": "Sortera",
+ "scoreAsc": "Objektpoäng (Stigande)",
+ "speedDesc": "Uppskattad Hastighet (Fallande)",
+ "relevance": "Relevans",
+ "dateDesc": "Datum (Fallande)",
+ "scoreDesc": "Objektpoäng (Fallande)",
+ "speedAsc": "Uppskattad Hastighet (Stigande)"
+ },
+ "cameras": {
+ "all": {
+ "short": "Kameror",
+ "title": "Alla Kameror"
+ },
+ "label": "Kamerafilter"
+ },
+ "explore": {
+ "settings": {
+ "title": "Inställningar",
+ "defaultView": {
+ "title": "Standard Vy"
+ },
+ "searchSource": {
+ "options": {
+ "description": "Beskrivning"
+ }
+ }
+ },
+ "date": {
+ "selectDateBy": {
+ "label": "Välj datum att filtrera efter"
+ }
+ }
+ },
+ "review": {
+ "showReviewed": "Visa Kontrollerade"
+ },
+ "motion": {
+ "showMotionOnly": "Visa Endast Rörelse"
+ },
+ "score": "Poäng",
+ "dates": {
+ "all": {
+ "short": "Datum"
+ }
+ },
+ "recognizedLicensePlates": {
+ "noLicensePlatesFound": "Inga registreringsplåtar hittade.",
+ "selectPlatesFromList": "Välj en eller flera registreringsplåtar från listan."
+ }
+}
diff --git a/web/public/locales/sv/components/icons.json b/web/public/locales/sv/components/icons.json
new file mode 100644
index 000000000..e15428582
--- /dev/null
+++ b/web/public/locales/sv/components/icons.json
@@ -0,0 +1,8 @@
+{
+ "iconPicker": {
+ "search": {
+ "placeholder": "Sök efter ikon…"
+ },
+ "selectIcon": "Välj en ikon"
+ }
+}
diff --git a/web/public/locales/sv/components/input.json b/web/public/locales/sv/components/input.json
new file mode 100644
index 000000000..b3081bd54
--- /dev/null
+++ b/web/public/locales/sv/components/input.json
@@ -0,0 +1,10 @@
+{
+ "button": {
+ "downloadVideo": {
+ "label": "Ladda ner Video",
+ "toast": {
+ "success": "Din video laddas ner."
+ }
+ }
+ }
+}
diff --git a/web/public/locales/sv/components/player.json b/web/public/locales/sv/components/player.json
new file mode 100644
index 000000000..b41c5dd65
--- /dev/null
+++ b/web/public/locales/sv/components/player.json
@@ -0,0 +1,51 @@
+{
+ "noPreviewFound": "Ingen Förhandsvisning Hittad",
+ "noRecordingsFoundForThisTime": "Inga inspelningar hittade för denna tid",
+ "noPreviewFoundFor": "Ingen förhandsvisning hittad för {{cameraName}}",
+ "submitFrigatePlus": {
+ "title": "Skicka denna bild till Frigate+?",
+ "submit": "Skicka"
+ },
+ "livePlayerRequiredIOSVersion": "iOS 17.1 eller senare krävs för den här typen av livestream.",
+ "streamOffline": {
+ "title": "Ström ej tillgänglig",
+ "desc": "Inga bildrutor har tagits emot från {{cameraName}}-strömmen detect, kontrollera felloggarna"
+ },
+ "stats": {
+ "streamType": {
+ "short": "Typ",
+ "title": "Strömtyp:"
+ },
+ "bandwidth": {
+ "title": "Bandbredd:",
+ "short": "Bandbredd"
+ },
+ "latency": {
+ "title": "Latens:",
+ "short": {
+ "title": "Latens",
+ "value": "{{seconds}} sek"
+ },
+ "value": "{{seconds}} sekunder"
+ },
+ "totalFrames": "Totala Bildrutor:",
+ "droppedFrames": {
+ "title": "Bortfallna bildrutor:",
+ "short": {
+ "title": "Bortfallen",
+ "value": "{{droppedFrames}} Bildrutor"
+ }
+ },
+ "decodedFrames": "Avkodade bildrutor:",
+ "droppedFrameRate": "Frekvens för bortfallna bildrutor:"
+ },
+ "cameraDisabled": "Kameran är disablead",
+ "toast": {
+ "error": {
+ "submitFrigatePlusFailed": "Bildruta har skickats till Frigate+ med misslyckat resultat"
+ },
+ "success": {
+ "submittedFrigatePlus": "Bildruta har skickats till Frigate+ med lyckat resultat"
+ }
+ }
+}
diff --git a/web/public/locales/sv/objects.json b/web/public/locales/sv/objects.json
new file mode 100644
index 000000000..4b4da2cf9
--- /dev/null
+++ b/web/public/locales/sv/objects.json
@@ -0,0 +1,120 @@
+{
+ "car": "Bil",
+ "person": "Person",
+ "bicycle": "Cykel",
+ "motorcycle": "Motorcykel",
+ "airplane": "Flygplan",
+ "bus": "Buss",
+ "horse": "Häst",
+ "sheep": "Får",
+ "mouse": "Älg",
+ "bark": "Skall",
+ "goat": "Get",
+ "animal": "Djur",
+ "dog": "Hund",
+ "cat": "Katt",
+ "bird": "Fågel",
+ "train": "Tåg",
+ "traffic_light": "Trafiklyse",
+ "stop_sign": "Stoppskylt",
+ "cow": "Ko",
+ "elephant": "Elefant",
+ "bear": "Björn",
+ "hat": "Hatt",
+ "boat": "Båt",
+ "street_sign": "Gatuskylt",
+ "shoe": "Sko",
+ "giraffe": "Giraff",
+ "fire_hydrant": "Brandpost",
+ "zebra": "Zebra",
+ "backpack": "Ryggsäck",
+ "umbrella": "Paraply",
+ "bench": "Bänk",
+ "wine_glass": "vinglas",
+ "bottle": "Flaska",
+ "spoon": "Sked",
+ "orange": "Apelsin",
+ "carrot": "Morot",
+ "hot_dog": "Varmkorv",
+ "broccoli": "Broccoli",
+ "fork": "Gaffel",
+ "banana": "Banan",
+ "apple": "Äpple",
+ "knife": "Kniv",
+ "bowl": "Skål",
+ "cup": "Kopp",
+ "sandwich": "Smörgås",
+ "toaster": "Brödrost",
+ "vehicle": "Fordon",
+ "postnord": "PostNord",
+ "refrigerator": "Kylskåp",
+ "hair_dryer": "Hårfön",
+ "hair_brush": "Hårborste",
+ "amazon": "Amazon",
+ "clock": "Klocka",
+ "parking_meter": "Parkeringsmätare",
+ "eye_glasses": "Glasögon",
+ "handbag": "Handväska",
+ "tie": "Slips",
+ "suitcase": "Resväska",
+ "frisbee": "Frisbee",
+ "skis": "Skidor",
+ "snowboard": "Snowboard",
+ "sports_ball": "Boll",
+ "kite": "Drake",
+ "baseball_bat": "Basebollträ",
+ "baseball_glove": "Baseballhandske",
+ "skateboard": "Skatebord",
+ "surfboard": "Surfbräda",
+ "tennis_racket": "Tennisrack",
+ "pizza": "Pizza",
+ "donut": "Munk",
+ "cake": "Tårta",
+ "chair": "Stol",
+ "window": "Fönster",
+ "couch": "Soffa",
+ "potted_plant": "Krukväxt",
+ "bed": "Säng",
+ "mirror": "Spegel",
+ "dining_table": "Vardagsrumsbord",
+ "desk": "Skrivbord",
+ "toilet": "Toalett",
+ "tv": "TV",
+ "laptop": "Laptop",
+ "remote": "Fjärrkontroll",
+ "keyboard": "Tangentbord",
+ "cell_phone": "Mobiltelefon",
+ "microwave": "Mikrovågsugn",
+ "sink": "Vask",
+ "vase": "Vas",
+ "scissors": "Sax",
+ "squirrel": "Ekorre",
+ "deer": "Hjort",
+ "fox": "Räv",
+ "rabbit": "Kanin",
+ "raccoon": "Tvättbjörn",
+ "robot_lawnmower": "Robotgräsklippare",
+ "on_demand": "På begäran",
+ "face": "Ansikte",
+ "package": "Paket",
+ "bbq_grill": "Grill",
+ "usps": "USPS",
+ "fedex": "FedEx",
+ "dhl": "DHL",
+ "an_post": "An Post",
+ "purolator": "Purolator",
+ "postnl": "PostNL",
+ "nzpost": "NZPost",
+ "gls": "GLS",
+ "dpd": "DPD",
+ "plate": "Tallrik",
+ "door": "Dörr",
+ "oven": "Ugn",
+ "blender": "Mixer",
+ "book": "Bok",
+ "waste_bin": "Papperskorg",
+ "license_plate": "Nummerplåt",
+ "toothbrush": "Tandborste",
+ "ups": "UPS",
+ "teddy_bear": "Nallebjörn"
+}
diff --git a/web/public/locales/sv/views/configEditor.json b/web/public/locales/sv/views/configEditor.json
new file mode 100644
index 000000000..27409c968
--- /dev/null
+++ b/web/public/locales/sv/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "copyConfig": "Kopiera konfiguration",
+ "saveAndRestart": "Spara & Starta om",
+ "saveOnly": "Spara",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Konfiguration kopierad till urklipp."
+ },
+ "error": {
+ "savingError": "Problem att spara konfiguration"
+ }
+ },
+ "documentTitle": "Ändra konfiguration - Frigate",
+ "configEditor": "Ändra konfiguration",
+ "confirm": "Avsluta utan att spara?"
+}
diff --git a/web/public/locales/sv/views/events.json b/web/public/locales/sv/views/events.json
new file mode 100644
index 000000000..9536f9b3d
--- /dev/null
+++ b/web/public/locales/sv/views/events.json
@@ -0,0 +1,38 @@
+{
+ "detections": "Detektioner",
+ "alerts": "Varningar",
+ "motion": {
+ "label": "Rörelse",
+ "only": "Endast rörelse"
+ },
+ "allCameras": "Alla kameror",
+ "empty": {
+ "alert": "Det finns inga varningar att granska",
+ "detection": "Det finns inga detekteringar att granska",
+ "motion": "Ingen rörelsedata hittad"
+ },
+ "documentTitle": "Granska - Frigate",
+ "timeline": "Tidslinje",
+ "events": {
+ "noFoundForTimePeriod": "Inga hädelser hittade för denna tidsperiod.",
+ "aria": "Välj händelse",
+ "label": "Händelse"
+ },
+ "recordings": {
+ "documentTitle": "Inspelningar - Frigate"
+ },
+ "newReviewItems": {
+ "label": "Visa nya objekt att granska",
+ "button": "Nya objekt att granska"
+ },
+ "markAsReviewed": "Markera som granskad",
+ "calendarFilter": {
+ "last24Hours": "Senaste 24 timmarna"
+ },
+ "timeline.aria": "Välj tidslinje",
+ "camera": "Kamera",
+ "markTheseItemsAsReviewed": "Markera dessa objekt som granskade",
+ "detected": "upptäckt",
+ "selected_one": "{{count}} valda",
+ "selected_other": "{{count}} valda"
+}
diff --git a/web/public/locales/sv/views/explore.json b/web/public/locales/sv/views/explore.json
new file mode 100644
index 000000000..28736f8e0
--- /dev/null
+++ b/web/public/locales/sv/views/explore.json
@@ -0,0 +1,16 @@
+{
+ "generativeAI": "Generativ AI",
+ "documentTitle": "Utforska - Frigate",
+ "exploreIsUnavailable": {
+ "embeddingsReindexing": {
+ "startingUp": "Startar upp…",
+ "estimatedTime": "Beräknad återstående tid:",
+ "finishingShortly": "Snart klar"
+ },
+ "title": "Utforska är inte tillgänglig"
+ },
+ "details": {
+ "timestamp": "tidsstämpel"
+ },
+ "exploreMore": "Utforska fler {{label}} objekt"
+}
diff --git a/web/public/locales/sv/views/exports.json b/web/public/locales/sv/views/exports.json
new file mode 100644
index 000000000..f5b8f37b5
--- /dev/null
+++ b/web/public/locales/sv/views/exports.json
@@ -0,0 +1,17 @@
+{
+ "search": "Sök",
+ "documentTitle": "Export - Frigate",
+ "noExports": "Inga exporter hittade",
+ "deleteExport": "Radera export",
+ "deleteExport.desc": "Är du säker att du vill radera {{exportName}}?",
+ "editExport": {
+ "desc": "Ange ett nytt namn för denna export.",
+ "title": "Byt namn på Export",
+ "saveExport": "Spara Export"
+ },
+ "toast": {
+ "error": {
+ "renameExportFailed": "Misslyckades att byta namn på export: {{errorMessage}}"
+ }
+ }
+}
diff --git a/web/public/locales/sv/views/faceLibrary.json b/web/public/locales/sv/views/faceLibrary.json
new file mode 100644
index 000000000..decad117e
--- /dev/null
+++ b/web/public/locales/sv/views/faceLibrary.json
@@ -0,0 +1,34 @@
+{
+ "details": {
+ "person": "Person",
+ "confidence": "Säkerhet",
+ "face": "Ansiktsdetaljer",
+ "timestamp": "tidsstämpel",
+ "faceDesc": "Detaljer för ansiktet och tillhörande objekt"
+ },
+ "description": {
+ "placeholder": "Ange ett namn för denna samling",
+ "addFace": "Gå genom för att lägga till nya ansikte till biblioteket.",
+ "invalidName": "Felaktigt namn. Namn kan endast innehålla bokstäver, siffror, mellanslag, apostrofer, understreck och bindestreck."
+ },
+ "documentTitle": "Ansiktsbibliotek - Frigate",
+ "steps": {
+ "faceName": "Ange namn",
+ "uploadFace": "Ladda upp bild på ansikte",
+ "nextSteps": "Nästa steg"
+ },
+ "createFaceLibrary": {
+ "title": "Skapa samling",
+ "desc": "Skapa ny samling",
+ "nextSteps": "För att bygga en stark grund:läge: {{effectiveRetainMode}}, så den här inspelningen vid behov kommer endast att behålla segment av {{effectiveRetainModeName}}."
+ },
+ "editLayout": {
+ "label": "Redigera Layout",
+ "group": {
+ "label": "Redigera Kameragrupp"
+ },
+ "exitEdit": "Lämna Redigering"
+ },
+ "camera": {
+ "enable": "Aktivera Kamera",
+ "disable": "Inaktivera Kamera"
+ },
+ "muteCameras": {
+ "enable": "Slå av ljudet på alla kameror",
+ "disable": "Slå på ljudet på alla kameror"
+ },
+ "streamingSettings": "Inställningar för Streaming",
+ "suspend": {
+ "forTime": "Pausa för: "
+ },
+ "stream": {
+ "title": "Ström (Swedish also use the word Stream)",
+ "audio": {
+ "tips": {
+ "title": "Ljud måste skickas ut från din kamera och konfigureras i go2rtc för den här strömmen.",
+ "documentation": "Läs dokumentationen: "
+ },
+ "available": "Ljud är tillgängligt för den här strömmen",
+ "unavailable": "Ljud är inte tillgängligt för den här strömmen"
+ },
+ "twoWayTalk": {
+ "tips": "Din enhet måste stödja funktionen och WebRTC måste vara konfigurerat för tvåvägskommunikation.",
+ "tips.documentation": "Läs dokumentationen: ",
+ "available": "tvåvägskommunikation är tillgängligt för den här strömmen",
+ "unavailable": "Tvåvägskommunikation är inte tillgängligt för den här strömmen"
+ },
+ "lowBandwidth": {
+ "tips": "Livevisningen är i lägebandbreddsläge på grund av buffring eller strömningsfel.",
+ "resetStream": "Återställ ström"
+ },
+ "playInBackground": {
+ "label": "Spela i bakgrunden",
+ "tips": "Aktivera det här alternativet för att fortsätta strömma när spelaren är dold."
+ }
+ },
+ "history": {
+ "label": "Visa historiskt videomaterial"
+ }
+}
diff --git a/web/public/locales/sv/views/recording.json b/web/public/locales/sv/views/recording.json
new file mode 100644
index 000000000..6e9e231a3
--- /dev/null
+++ b/web/public/locales/sv/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "export": "Export",
+ "filter": "Filter",
+ "calendar": "Kalender",
+ "filters": "Filter",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "Inget giltigt tidsintervall valt",
+ "endTimeMustAfterStartTime": "Sluttid måste vara efter starttid"
+ }
+ }
+}
diff --git a/web/public/locales/sv/views/search.json b/web/public/locales/sv/views/search.json
new file mode 100644
index 000000000..5fd24ab76
--- /dev/null
+++ b/web/public/locales/sv/views/search.json
@@ -0,0 +1,72 @@
+{
+ "savedSearches": "Sparade Sökningar",
+ "searchFor": "Sök efter {{inputValue}}",
+ "search": "Sök",
+ "button": {
+ "clear": "Radera sökning",
+ "save": "Spara sökning",
+ "filterActive": "Aktiva filter",
+ "delete": "Ta bort sparad sökning",
+ "filterInformation": "Filterinformation"
+ },
+ "filter": {
+ "tips": {
+ "desc": {
+ "step1": "Skriv ett filtreringsnyckelnamn följt av ett kolon (t.ex. \"kameror:\").",
+ "step2": "Välj ett värde utifrån alternativen eller skriv in ditt egna.",
+ "step3": "Använd flera filter genom att addera dom en efter en med ett mellanslag emellan dom.",
+ "step4": "Datumfilter (före: och efter:) använd {{DateFormat}} format.",
+ "step5": "Tidsintervaller använder {{exampleTime}} format.",
+ "exampleLabel": "Exempel:",
+ "step6": "Ta bort filter genom att klicka på 'x\" bredvid dom.",
+ "text": "Filter hjälper dig att begränsa dina sökresultat. Så här använder du dem i inmatningsfältet:"
+ },
+ "title": "Hur du använder filter"
+ },
+ "header": {
+ "noFilters": "Filter",
+ "activeFilters": "Aktiva Filter",
+ "currentFilterType": "Filtervärden"
+ },
+ "label": {
+ "after": "Efter",
+ "min_speed": "Minsta Hastighet",
+ "zones": "Zoner",
+ "min_score": "Minsta Poäng",
+ "cameras": "Kameror",
+ "sub_labels": "Underetiketter",
+ "search_type": "Söktyp",
+ "time_range": "Tidsintervall",
+ "before": "Före",
+ "max_speed": "Högsta Hastighet",
+ "recognized_license_plate": "Identifierad registreringsskylt",
+ "has_clip": "Har klipp",
+ "has_snapshot": "Har Ögonblicksbild",
+ "labels": "Etiketter",
+ "max_score": "Högsta Poäng"
+ },
+ "searchType": {
+ "thumbnail": "Miniatyrbild",
+ "description": "Beskrivning"
+ },
+ "toast": {
+ "error": {
+ "afterDatebeEarlierBefore": "Datumet \"efter\" måste vara tidigare än datumet \"före\".",
+ "minScoreMustBeLessOrEqualMaxScore": "\"min_score\" måste vara mindre än eller lika med \"max_score\".",
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "\"max_speed\" måste vara större än eller lika med \"min_speed\".",
+ "beforeDateBeLaterAfter": "Datumet \"före\" måste vara senare än datumet \"efter\".",
+ "maxScoreMustBeGreaterOrEqualMinScore": "\"max_score\" måste vara större än eller lika med \"min_score\".",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "\"min_speed\" måste vara mindre än eller lika med \"max_speed\"."
+ }
+ }
+ },
+ "similaritySearch": {
+ "title": "Likhetssökning",
+ "active": "Likhetsökning aktiv",
+ "clear": "Rensa likhetsökning"
+ },
+ "placeholder": {
+ "search": "Sök…"
+ },
+ "trackedObjectId": "Spårad Objekts ID"
+}
diff --git a/web/public/locales/sv/views/settings.json b/web/public/locales/sv/views/settings.json
new file mode 100644
index 000000000..df1de30e0
--- /dev/null
+++ b/web/public/locales/sv/views/settings.json
@@ -0,0 +1,88 @@
+{
+ "documentTitle": {
+ "camera": "Kamerainställningar - Frigate",
+ "default": "Inställningar - Frigate",
+ "general": "Allmänna inställningar - Frigate",
+ "authentication": "Autentiseringsinställningar - Frigate",
+ "classification": "Klassificeringsinställningar - Frigate",
+ "masksAndZones": "Maskerings- och zonverktyg - Frigate",
+ "enrichments": "Förbättringsinställningar - Frigate",
+ "frigatePlus": "Frigate+ Inställningar - Frigate",
+ "notifications": "Notifikations Inställningar - Frigate"
+ },
+ "general": {
+ "title": "Allmänna Inställningar",
+ "liveDashboard": {
+ "automaticLiveView": {
+ "desc": "Automatiskt byte till kamera där aktivitet registreras. Inaktivering av denna inställning gör att en statisk bild visas i Live Panelen som uppdateras en gång per minut.",
+ "label": "Automatisk Live Visning"
+ },
+ "playAlertVideos": {
+ "desc": "Som standard visas varningar på Live Panelen som små loopande klipp. Inaktivera denna inställning för att bara visa en statisk bild av nya varningar på denna enhet/webbläsare.",
+ "label": "Spela Varnings Videos"
+ },
+ "title": "Live Panel"
+ },
+ "storedLayouts": {
+ "title": "Sparade Layouter",
+ "desc": "Layouten av kameror i en grupp kan dras för att ändra storlek. Positionerna lagras lokalt i din webbläsare.",
+ "clearAll": "Rensa Alla Layouter"
+ },
+ "cameraGroupStreaming": {
+ "desc": "Streaming inställningar för varje kameragrupp lagras lokalt i din webbläsare.",
+ "clearAll": "Rensa Alla Streaming Inställningar",
+ "title": "Kamera Grupp Streaming Inställningar"
+ },
+ "recordingsViewer": {
+ "title": "Inspelningsvisare",
+ "defaultPlaybackRate": {
+ "desc": "Standard uppspelningshastighet för inspelningar.",
+ "label": "Standard Uppspelningshastighet"
+ }
+ },
+ "calendar": {
+ "firstWeekday": {
+ "sunday": "Söndag",
+ "monday": "Måndag",
+ "label": "Första Veckodag"
+ },
+ "title": "Kalender"
+ },
+ "toast": {
+ "success": {
+ "clearStoredLayout": "Rensa lagrad layout för {{cameraName}}",
+ "clearStreamingSettings": "Rensa streaminginställningar för samtliga kameragrupper."
+ },
+ "error": {
+ "clearStoredLayoutFailed": "Misslyckades att rensa lagrad layout för: {{errorMessage}}",
+ "clearStreamingSettingsFailed": "Misslyckades med att rensa streaminginställningar: {{errorMessage}}"
+ }
+ }
+ },
+ "cameraSetting": {
+ "noCamera": "Ingen Kamera",
+ "camera": "Kamera"
+ },
+ "enrichments": {
+ "unsavedChanges": "Osparade Förbättringsinställningar",
+ "birdClassification": {
+ "title": "Fågel klassificering"
+ },
+ "title": "Förbättringsinställningar"
+ },
+ "menu": {
+ "ui": "UI",
+ "cameras": "Kamera Inställningar",
+ "masksAndZones": "Masker / Områden",
+ "users": "Användare",
+ "notifications": "Notifikationer",
+ "frigateplus": "Frigate+",
+ "enrichments": "Förbättringar"
+ },
+ "dialog": {
+ "unsavedChanges": {
+ "title": "Du har osparade ändringar.",
+ "desc": "Vill du spara dina ändringar innan du fortsätter?"
+ }
+ }
+}
diff --git a/web/public/locales/sv/views/system.json b/web/public/locales/sv/views/system.json
new file mode 100644
index 000000000..e632f719f
--- /dev/null
+++ b/web/public/locales/sv/views/system.json
@@ -0,0 +1,15 @@
+{
+ "documentTitle": {
+ "storage": "Lagringsstatistik - Frigate",
+ "general": "Allmän statistik - Frigate",
+ "cameras": "Kamerastatistik - Frigate",
+ "logs": {
+ "frigate": "Frigate loggar - Frigate"
+ }
+ },
+ "logs": {
+ "copy": {
+ "label": "Kopiera till urklipp"
+ }
+ }
+}
diff --git a/web/public/locales/th/audio.json b/web/public/locales/th/audio.json
new file mode 100644
index 000000000..d6da10494
--- /dev/null
+++ b/web/public/locales/th/audio.json
@@ -0,0 +1,429 @@
+{
+ "speech": "พูด",
+ "yell": "ตะโกน",
+ "babbling": "พูดไม่ชัด",
+ "bellow": "ตะโกนเสียงต่ำ",
+ "whoop": "โห่ร้อง",
+ "singing": "ร้องเพลง",
+ "choir": "คณะนักร้องประสานเสียง",
+ "yodeling": "การร้องเพลงแบบโยเดิล",
+ "chant": "สวดมนต์",
+ "mantra": "มนต์",
+ "child_singing": "เด็กกำลังร้องเพลง",
+ "throat_clearing": "กระแอม",
+ "sneeze": "จาม",
+ "sniff": "สูดจมูก",
+ "run": "[ยังไม่แปล: Run]",
+ "shuffle": "[ยังไม่แปล: Shuffle]",
+ "footsteps": "[ยังไม่แปล: Footsteps]",
+ "biting": "[ยังไม่แปล: Biting]",
+ "gargling": "[ยังไม่แปล: Gargling]",
+ "stomach_rumble": "[ยังไม่แปล: Stomach Rumble]",
+ "burping": "[ยังไม่แปล: Burping]",
+ "hiccup": "[ยังไม่แปล: Hiccup]",
+ "heart_murmur": "[ยังไม่แปล: Heart Murmur]",
+ "cheering": "[ยังไม่แปล: Cheering]",
+ "applause": "[ยังไม่แปล: Applause]",
+ "chatter": "[ยังไม่แปล: Chatter]",
+ "crowd": "[ยังไม่แปล: Crowd]",
+ "children_playing": "[ยังไม่แปล: Children Playing]",
+ "animal": "สัตว์",
+ "pets": "[ยังไม่แปล: Pets]",
+ "dog": "สุนัข",
+ "bark": "เสียงหอบ",
+ "yip": "[ยังไม่แปล: Yip]",
+ "howl": "[ยังไม่แปล: Howl]",
+ "bow_wow": "[ยังไม่แปล: Bow Wow]",
+ "growling": "[ยังไม่แปล: Growling]",
+ "whimper_dog": "[ยังไม่แปล: Dog Whimper]",
+ "chirp": "[ยังไม่แปล: Chirp]",
+ "squawk": "[ยังไม่แปล: Squawk]",
+ "pigeon": "[ยังไม่แปล: Pigeon]",
+ "coo": "[ยังไม่แปล: Coo]",
+ "dogs": "[ยังไม่แปล: Dogs]",
+ "rats": "[ยังไม่แปล: Rats]",
+ "mouse": "เมาส์",
+ "patter": "[ยังไม่แปล: Patter]",
+ "insect": "[ยังไม่แปล: Insect]",
+ "cricket": "[ยังไม่แปล: Cricket]",
+ "frog": "[ยังไม่แปล: Frog]",
+ "croak": "[ยังไม่แปล: Croak]",
+ "snake": "[ยังไม่แปล: Snake]",
+ "snare_drum": "[ยังไม่แปล: Snare Drum]",
+ "rimshot": "[ยังไม่แปล: Rimshot]",
+ "trumpet": "[ยังไม่แปล: Trumpet]",
+ "trombone": "[ยังไม่แปล: Trombone]",
+ "bowed_string_instrument": "[ยังไม่แปล: Bowed String Instrument]",
+ "tuning_fork": "[ยังไม่แปล: Tuning Fork]",
+ "chime": "[ยังไม่แปล: Chime]",
+ "wind_chime": "[ยังไม่แปล: Wind Chime]",
+ "harmonica": "[ยังไม่แปล: Harmonica]",
+ "accordion": "[ยังไม่แปล: Accordion]",
+ "bagpipes": "[ยังไม่แปล: Bagpipes]",
+ "rock_music": "[ยังไม่แปล: Rock Music]",
+ "heavy_metal": "[ยังไม่แปล: Heavy Metal]",
+ "punk_rock": "[ยังไม่แปล: Punk Rock]",
+ "psychedelic_rock": "[ยังไม่แปล: Psychedelic Rock]",
+ "rhythm_and_blues": "[ยังไม่แปล: Rhythm and Blues]",
+ "soul_music": "[ยังไม่แปล: Soul Music]",
+ "reggae": "[ยังไม่แปล: Reggae]",
+ "country": "[ยังไม่แปล: Country]",
+ "swing_music": "[ยังไม่แปล: Swing Music]",
+ "bluegrass": "[ยังไม่แปล: Bluegrass]",
+ "funk": "[ยังไม่แปล: Funk]",
+ "folk_music": "[ยังไม่แปล: Folk Music]",
+ "middle_eastern_music": "[ยังไม่แปล: Middle Eastern Music]",
+ "jazz": "[ยังไม่แปล: Jazz]",
+ "disco": "[ยังไม่แปล: Disco]",
+ "independent_music": "[ยังไม่แปล: Independent Music]",
+ "song": "[ยังไม่แปล: Song]",
+ "jet_engine": "[ยังไม่แปล: Jet Engine]",
+ "propeller": "[ยังไม่แปล: Propeller]",
+ "helicopter": "[ยังไม่แปล: Helicopter]",
+ "fixed-wing_aircraft": "[ยังไม่แปล: Fixed-Wing Aircraft]",
+ "bicycle": "จักรยาน",
+ "accelerating": "[ยังไม่แปล: Accelerating]",
+ "door": "ประตู",
+ "slam": "[ยังไม่แปล: Slam]",
+ "computer_keyboard": "[ยังไม่แปล: Computer Keyboard]",
+ "radio": "[ยังไม่แปล: Radio]",
+ "field_recording": "[ยังไม่แปล: Field Recording]",
+ "scream": "[ยังไม่แปล: Scream]",
+ "whispering": "กระซิบ",
+ "laughter": "เสียงหัวเราะ",
+ "snicker": "หัวเราะเยาะ",
+ "crying": "ร้องไห้",
+ "sigh": "ถอนหายใจ",
+ "synthetic_singing": "การร้องเพลงสังเคราะห์",
+ "rapping": "การแร็พ",
+ "humming": "ฮัมเพลง",
+ "groan": "ครวญคราง",
+ "grunt": "เสียงคราง",
+ "whistling": "ผิวปาก",
+ "breathing": "การหายใจ",
+ "wheeze": "หายใจเสียงวี้ด",
+ "snoring": "กรน",
+ "gasp": "หอบ",
+ "pant": "หายใจหอบ",
+ "snort": "เสียงสูดจมูก",
+ "cough": "ไอ",
+ "chewing": "[ยังไม่แปล: Chewing]",
+ "fart": "[ยังไม่แปล: Fart]",
+ "hands": "[ยังไม่แปล: Hands]",
+ "finger_snapping": "[ยังไม่แปล: Finger Snapping]",
+ "clapping": "[ยังไม่แปล: Clapping]",
+ "heartbeat": "[ยังไม่แปล: Heartbeat]",
+ "cat": "แมว",
+ "purr": "[ยังไม่แปล: Purr]",
+ "meow": "[ยังไม่แปล: Meow]",
+ "hiss": "[ยังไม่แปล: Hiss]",
+ "caterwaul": "[ยังไม่แปล: Caterwaul]",
+ "livestock": "[ยังไม่แปล: Livestock]",
+ "horse": "ม้า",
+ "clip_clop": "[ยังไม่แปล: Clip Clop]",
+ "neigh": "[ยังไม่แปล: Neigh]",
+ "cattle": "[ยังไม่แปล: Cattle]",
+ "moo": "[ยังไม่แปล: Moo]",
+ "cowbell": "[ยังไม่แปล: Cowbell]",
+ "pig": "[ยังไม่แปล: Pig]",
+ "oink": "[ยังไม่แปล: Oink]",
+ "goat": "แพะ",
+ "bleat": "[ยังไม่แปล: Bleat]",
+ "sheep": "แกะ",
+ "fowl": "[ยังไม่แปล: Fowl]",
+ "chicken": "[ยังไม่แปล: Chicken]",
+ "cluck": "[ยังไม่แปล: Cluck]",
+ "cock_a_doodle_doo": "[ยังไม่แปล: Cock-a-Doodle-Doo]",
+ "turkey": "[ยังไม่แปล: Turkey]",
+ "gobble": "[ยังไม่แปล: Gobble]",
+ "duck": "[ยังไม่แปล: Duck]",
+ "quack": "[ยังไม่แปล: Quack]",
+ "goose": "[ยังไม่แปล: Goose]",
+ "honk": "[ยังไม่แปล: Honk]",
+ "wild_animals": "[ยังไม่แปล: Wild Animals]",
+ "roaring_cats": "[ยังไม่แปล: Roaring Cats]",
+ "roar": "[ยังไม่แปล: Roar]",
+ "bird": "นก",
+ "crow": "[ยังไม่แปล: Crow]",
+ "caw": "[ยังไม่แปล: Caw]",
+ "owl": "[ยังไม่แปล: Owl]",
+ "hoot": "[ยังไม่แปล: Hoot]",
+ "flapping_wings": "[ยังไม่แปล: Flapping Wings]",
+ "mosquito": "[ยังไม่แปล: Mosquito]",
+ "fly": "[ยังไม่แปล: Fly]",
+ "buzz": "[ยังไม่แปล: Buzz]",
+ "rattle": "[ยังไม่แปล: Rattle]",
+ "whale_vocalization": "[ยังไม่แปล: Whale Vocalization]",
+ "music": "[ยังไม่แปล: Music]",
+ "musical_instrument": "[ยังไม่แปล: Musical Instrument]",
+ "plucked_string_instrument": "[ยังไม่แปล: Plucked String Instrument]",
+ "guitar": "[ยังไม่แปล: Guitar]",
+ "electric_guitar": "[ยังไม่แปล: Electric Guitar]",
+ "bass_guitar": "[ยังไม่แปล: Bass Guitar]",
+ "acoustic_guitar": "[ยังไม่แปล: Acoustic Guitar]",
+ "steel_guitar": "[ยังไม่แปล: Steel Guitar]",
+ "tapping": "[ยังไม่แปล: Tapping]",
+ "strum": "[ยังไม่แปล: Strum]",
+ "banjo": "[ยังไม่แปล: Banjo]",
+ "sitar": "[ยังไม่แปล: Sitar]",
+ "mandolin": "[ยังไม่แปล: Mandolin]",
+ "zither": "[ยังไม่แปล: Zither]",
+ "ukulele": "[ยังไม่แปล: Ukulele]",
+ "keyboard": "คีย์บอร์ด",
+ "piano": "[ยังไม่แปล: Piano]",
+ "electric_piano": "[ยังไม่แปล: Electric Piano]",
+ "organ": "[ยังไม่แปล: Organ]",
+ "electronic_organ": "[ยังไม่แปล: Electronic Organ]",
+ "hammond_organ": "[ยังไม่แปล: Hammond Organ]",
+ "synthesizer": "[ยังไม่แปล: Synthesizer]",
+ "sampler": "[ยังไม่แปล: Sampler]",
+ "harpsichord": "[ยังไม่แปล: Harpsichord]",
+ "percussion": "[ยังไม่แปล: Percussion]",
+ "drum_kit": "[ยังไม่แปล: Drum Kit]",
+ "drum_machine": "[ยังไม่แปล: Drum Machine]",
+ "drum": "[ยังไม่แปล: Drum]",
+ "drum_roll": "[ยังไม่แปล: Drum Roll]",
+ "bass_drum": "[ยังไม่แปล: Bass Drum]",
+ "timpani": "[ยังไม่แปล: Timpani]",
+ "tabla": "[ยังไม่แปล: Tabla]",
+ "cymbal": "[ยังไม่แปล: Cymbal]",
+ "hi_hat": "[ยังไม่แปล: Hi-Hat]",
+ "wood_block": "[ยังไม่แปล: Wood Block]",
+ "tambourine": "[ยังไม่แปล: Tambourine]",
+ "maraca": "[ยังไม่แปล: Maraca]",
+ "gong": "[ยังไม่แปล: Gong]",
+ "tubular_bells": "[ยังไม่แปล: Tubular Bells]",
+ "mallet_percussion": "[ยังไม่แปล: Mallet Percussion]",
+ "marimba": "[ยังไม่แปล: Marimba]",
+ "glockenspiel": "[ยังไม่แปล: Glockenspiel]",
+ "vibraphone": "[ยังไม่แปล: Vibraphone]",
+ "steelpan": "[ยังไม่แปล: Steelpan]",
+ "orchestra": "[ยังไม่แปล: Orchestra]",
+ "brass_instrument": "[ยังไม่แปล: Brass Instrument]",
+ "church_bell": "[ยังไม่แปล: Church Bell]",
+ "jingle_bell": "[ยังไม่แปล: Jingle Bell]",
+ "french_horn": "[ยังไม่แปล: French Horn]",
+ "string_section": "[ยังไม่แปล: String Section]",
+ "violin": "[ยังไม่แปล: Violin]",
+ "bicycle_bell": "[ยังไม่แปล: Bicycle Bell]",
+ "pizzicato": "[ยังไม่แปล: Pizzicato]",
+ "cello": "[ยังไม่แปล: Cello]",
+ "double_bass": "[ยังไม่แปล: Double Bass]",
+ "wind_instrument": "[ยังไม่แปล: Wind Instrument]",
+ "flute": "[ยังไม่แปล: Flute]",
+ "saxophone": "[ยังไม่แปล: Saxophone]",
+ "clarinet": "[ยังไม่แปล: Clarinet]",
+ "harp": "[ยังไม่แปล: Harp]",
+ "bell": "[ยังไม่แปล: Bell]",
+ "didgeridoo": "[ยังไม่แปล: Didgeridoo]",
+ "theremin": "[ยังไม่แปล: Theremin]",
+ "singing_bowl": "[ยังไม่แปล: Singing Bowl]",
+ "scratching": "[ยังไม่แปล: Scratching]",
+ "pop_music": "[ยังไม่แปล: Pop Music]",
+ "hip_hop_music": "[ยังไม่แปล: Hip-Hop Music]",
+ "beatboxing": "[ยังไม่แปล: Beatboxing]",
+ "grunge": "[ยังไม่แปล: Grunge]",
+ "progressive_rock": "[ยังไม่แปล: Progressive Rock]",
+ "rock_and_roll": "[ยังไม่แปล: Rock and Roll]",
+ "classical_music": "[ยังไม่แปล: Classical Music]",
+ "opera": "[ยังไม่แปล: Opera]",
+ "electronic_music": "[ยังไม่แปล: Electronic Music]",
+ "house_music": "[ยังไม่แปล: House Music]",
+ "drum_and_bass": "[ยังไม่แปล: Drum and Bass]",
+ "techno": "[ยังไม่แปล: Techno]",
+ "dubstep": "[ยังไม่แปล: Dubstep]",
+ "electronica": "[ยังไม่แปล: Electronica]",
+ "electronic_dance_music": "[ยังไม่แปล: Electronic Dance Music]",
+ "ambient_music": "[ยังไม่แปล: Ambient Music]",
+ "trance_music": "[ยังไม่แปล: Trance Music]",
+ "music_of_latin_america": "[ยังไม่แปล: Music of Latin America]",
+ "salsa_music": "[ยังไม่แปล: Salsa Music]",
+ "flamenco": "[ยังไม่แปล: Flamenco]",
+ "blues": "[ยังไม่แปล: Blues]",
+ "music_for_children": "[ยังไม่แปล: Music for Children]",
+ "new-age_music": "[ยังไม่แปล: New Age Music]",
+ "vocal_music": "[ยังไม่แปล: Vocal Music]",
+ "a_capella": "[ยังไม่แปล: A Capella]",
+ "music_of_africa": "[ยังไม่แปล: Music of Africa]",
+ "afrobeat": "[ยังไม่แปล: Afrobeat]",
+ "christian_music": "[ยังไม่แปล: Christian Music]",
+ "gospel_music": "[ยังไม่แปล: Gospel Music]",
+ "music_of_asia": "[ยังไม่แปล: Music of Asia]",
+ "carnatic_music": "[ยังไม่แปล: Carnatic Music]",
+ "music_of_bollywood": "[ยังไม่แปล: Music of Bollywood]",
+ "ska": "[ยังไม่แปล: Ska]",
+ "traditional_music": "[ยังไม่แปล: Traditional Music]",
+ "background_music": "[ยังไม่แปล: Background Music]",
+ "theme_music": "[ยังไม่แปล: Theme Music]",
+ "jingle": "[ยังไม่แปล: Jingle]",
+ "soundtrack_music": "[ยังไม่แปล: Soundtrack Music]",
+ "lullaby": "[ยังไม่แปล: Lullaby]",
+ "video_game_music": "[ยังไม่แปล: Video Game Music]",
+ "christmas_music": "[ยังไม่แปล: Christmas Music]",
+ "dance_music": "[ยังไม่แปล: Dance Music]",
+ "wedding_music": "[ยังไม่แปล: Wedding Music]",
+ "happy_music": "[ยังไม่แปล: Happy Music]",
+ "sad_music": "[ยังไม่แปล: Sad Music]",
+ "angry_music": "[ยังไม่แปล: Angry Music]",
+ "scary_music": "[ยังไม่แปล: Scary Music]",
+ "tender_music": "[ยังไม่แปล: Tender Music]",
+ "exciting_music": "[ยังไม่แปล: Exciting Music]",
+ "wind": "[ยังไม่แปล: Wind]",
+ "rustling_leaves": "[ยังไม่แปล: Rustling Leaves]",
+ "wind_noise": "[ยังไม่แปล: Wind Noise]",
+ "thunderstorm": "[ยังไม่แปล: Thunderstorm]",
+ "thunder": "[ยังไม่แปล: Thunder]",
+ "water": "[ยังไม่แปล: Water]",
+ "rain": "[ยังไม่แปล: Rain]",
+ "raindrop": "[ยังไม่แปล: Raindrop]",
+ "rain_on_surface": "[ยังไม่แปล: Rain on Surface]",
+ "stream": "[ยังไม่แปล: Stream]",
+ "ocean": "[ยังไม่แปล: Ocean]",
+ "waterfall": "[ยังไม่แปล: Waterfall]",
+ "waves": "[ยังไม่แปล: Waves]",
+ "steam": "[ยังไม่แปล: Steam]",
+ "gurgling": "[ยังไม่แปล: Gurgling]",
+ "fire": "[ยังไม่แปล: Fire]",
+ "crackle": "[ยังไม่แปล: Crackle]",
+ "vehicle": "ยานพาหนะ",
+ "boat": "เรือ",
+ "sailboat": "[ยังไม่แปล: Sailboat]",
+ "rowboat": "[ยังไม่แปล: Rowboat]",
+ "motorboat": "[ยังไม่แปล: Motorboat]",
+ "ship": "[ยังไม่แปล: Ship]",
+ "motor_vehicle": "[ยังไม่แปล: Motor Vehicle]",
+ "car": "รถยนต์",
+ "toot": "[ยังไม่แปล: Toot]",
+ "car_alarm": "[ยังไม่แปล: Car Alarm]",
+ "power_windows": "[ยังไม่แปล: Power Windows]",
+ "skidding": "[ยังไม่แปล: Skidding]",
+ "tire_squeal": "[ยังไม่แปล: Tire Squeal]",
+ "car_passing_by": "[ยังไม่แปล: Car Passing By]",
+ "race_car": "[ยังไม่แปล: Race Car]",
+ "truck": "[ยังไม่แปล: Truck]",
+ "air_brake": "[ยังไม่แปล: Air Brake]",
+ "air_horn": "[ยังไม่แปล: Air Horn]",
+ "reversing_beeps": "[ยังไม่แปล: Reversing Beeps]",
+ "ice_cream_truck": "[ยังไม่แปล: Ice Cream Truck]",
+ "bus": "รถประจำทาง",
+ "emergency_vehicle": "[ยังไม่แปล: Emergency Vehicle]",
+ "police_car": "[ยังไม่แปล: Police Car]",
+ "ambulance": "[ยังไม่แปล: Ambulance]",
+ "fire_engine": "[ยังไม่แปล: Fire Engine]",
+ "motorcycle": "มอเตอร์ไซค์",
+ "traffic_noise": "[ยังไม่แปล: Traffic Noise]",
+ "rail_transport": "[ยังไม่แปล: Rail Transport]",
+ "train": "รถไฟ",
+ "train_whistle": "[ยังไม่แปล: Train Whistle]",
+ "train_horn": "[ยังไม่แปล: Train Horn]",
+ "railroad_car": "[ยังไม่แปล: Railroad Car]",
+ "train_wheels_squealing": "[ยังไม่แปล: Train Wheels Squealing]",
+ "subway": "[ยังไม่แปล: Subway]",
+ "aircraft": "[ยังไม่แปล: Aircraft]",
+ "aircraft_engine": "[ยังไม่แปล: Aircraft Engine]",
+ "skateboard": "สเก็ตบอร์ด",
+ "engine": "[ยังไม่แปล: Engine]",
+ "light_engine": "[ยังไม่แปล: Light Engine]",
+ "dental_drill's_drill": "[ยังไม่แปล: Dental Drill]",
+ "lawn_mower": "[ยังไม่แปล: Lawn Mower]",
+ "chainsaw": "[ยังไม่แปล: Chainsaw]",
+ "medium_engine": "[ยังไม่แปล: Medium Engine]",
+ "heavy_engine": "[ยังไม่แปล: Heavy Engine]",
+ "engine_knocking": "[ยังไม่แปล: Engine Knocking]",
+ "engine_starting": "[ยังไม่แปล: Engine Starting]",
+ "idling": "[ยังไม่แปล: Idling]",
+ "doorbell": "[ยังไม่แปล: Doorbell]",
+ "ding-dong": "[ยังไม่แปล: Ding-Dong]",
+ "sliding_door": "[ยังไม่แปล: Sliding Door]",
+ "knock": "[ยังไม่แปล: Knock]",
+ "tap": "[ยังไม่แปล: Tap]",
+ "squeak": "[ยังไม่แปล: Squeak]",
+ "drawer_open_or_close": "[ยังไม่แปล: Drawer Open or Close]",
+ "cupboard_open_or_close": "[ยังไม่แปล: Cupboard Open or Close]",
+ "dishes": "[ยังไม่แปล: Dishes]",
+ "cutlery": "[ยังไม่แปล: Cutlery]",
+ "chopping": "[ยังไม่แปล: Chopping]",
+ "frying": "[ยังไม่แปล: Frying]",
+ "microwave_oven": "[ยังไม่แปล: Microwave Oven]",
+ "blender": "เครื่องปั่น",
+ "water_tap": "[ยังไม่แปล: Water Tap]",
+ "sink": "อ่างล้างจาน",
+ "bathtub": "[ยังไม่แปล: Bathtub]",
+ "hair_dryer": "ไดร์เป่าผม",
+ "toilet_flush": "[ยังไม่แปล: Toilet Flush]",
+ "toothbrush": "แปรงสีฟัน",
+ "electric_toothbrush": "[ยังไม่แปล: Electric Toothbrush]",
+ "vacuum_cleaner": "[ยังไม่แปล: Vacuum Cleaner]",
+ "zipper": "[ยังไม่แปล: Zipper]",
+ "keys_jangling": "[ยังไม่แปล: Keys Jangling]",
+ "coin": "[ยังไม่แปล: Coin]",
+ "scissors": "กรรไกร",
+ "electric_shaver": "[ยังไม่แปล: Electric Shaver]",
+ "shuffling_cards": "[ยังไม่แปล: Shuffling Cards]",
+ "typing": "[ยังไม่แปล: Typing]",
+ "typewriter": "[ยังไม่แปล: Typewriter]",
+ "writing": "[ยังไม่แปล: Writing]",
+ "alarm": "[ยังไม่แปล: Alarm]",
+ "ringtone": "[ยังไม่แปล: Ringtone]",
+ "telephone": "[ยังไม่แปล: Telephone]",
+ "telephone_bell_ringing": "[ยังไม่แปล: Telephone Bell Ringing]",
+ "telephone_dialing": "[ยังไม่แปล: Telephone Dialing]",
+ "dial_tone": "[ยังไม่แปล: Dial Tone]",
+ "busy_signal": "[ยังไม่แปล: Busy Signal]",
+ "alarm_clock": "[ยังไม่แปล: Alarm Clock]",
+ "siren": "[ยังไม่แปล: Siren]",
+ "civil_defense_siren": "[ยังไม่แปล: Civil Defense Siren]",
+ "buzzer": "[ยังไม่แปล: Buzzer]",
+ "smoke_detector": "[ยังไม่แปล: Smoke Detector]",
+ "fire_alarm": "[ยังไม่แปล: Fire Alarm]",
+ "foghorn": "[ยังไม่แปล: Foghorn]",
+ "whistle": "[ยังไม่แปล: Whistle]",
+ "steam_whistle": "[ยังไม่แปล: Steam Whistle]",
+ "mechanisms": "[ยังไม่แปล: Mechanisms]",
+ "ratchet": "[ยังไม่แปล: Ratchet]",
+ "clock": "นาฬิกา",
+ "tick": "[ยังไม่แปล: Tick]",
+ "tick-tock": "[ยังไม่แปล: Tick-Tock]",
+ "gears": "[ยังไม่แปล: Gears]",
+ "pulleys": "[ยังไม่แปล: Pulleys]",
+ "sewing_machine": "[ยังไม่แปล: Sewing Machine]",
+ "mechanical_fan": "[ยังไม่แปล: Mechanical Fan]",
+ "air_conditioning": "[ยังไม่แปล: Air Conditioning]",
+ "cash_register": "[ยังไม่แปล: Cash Register]",
+ "printer": "[ยังไม่แปล: Printer]",
+ "camera": "กล้อง",
+ "single-lens_reflex_camera": "[ยังไม่แปล: Single-Lens Reflex Camera]",
+ "tools": "[ยังไม่แปล: Tools]",
+ "hammer": "[ยังไม่แปล: Hammer]",
+ "sawing": "[ยังไม่แปล: Sawing]",
+ "jackhammer": "[ยังไม่แปล: Jackhammer]",
+ "filing": "[ยังไม่แปล: Filing]",
+ "sanding": "[ยังไม่แปล: Sanding]",
+ "power_tool": "[ยังไม่แปล: Power Tool]",
+ "drill": "[ยังไม่แปล: Drill]",
+ "explosion": "[ยังไม่แปล: Explosion]",
+ "gunshot": "[ยังไม่แปล: Gunshot]",
+ "machine_gun": "[ยังไม่แปล: Machine Gun]",
+ "fusillade": "[ยังไม่แปล: Fusillade]",
+ "artillery_fire": "[ยังไม่แปล: Artillery Fire]",
+ "cap_gun": "[ยังไม่แปล: Cap Gun]",
+ "fireworks": "[ยังไม่แปล: Fireworks]",
+ "firecracker": "[ยังไม่แปล: Firecracker]",
+ "burst": "[ยังไม่แปล: Burst]",
+ "eruption": "[ยังไม่แปล: Eruption]",
+ "boom": "[ยังไม่แปล: Boom]",
+ "wood": "[ยังไม่แปล: Wood]",
+ "chop": "[ยังไม่แปล: Chop]",
+ "splinter": "[ยังไม่แปล: Splinter]",
+ "crack": "[ยังไม่แปล: Crack]",
+ "glass": "[ยังไม่แปล: Glass]",
+ "chink": "[ยังไม่แปล: Chink]",
+ "shatter": "[ยังไม่แปล: Shatter]",
+ "silence": "[ยังไม่แปล: Silence]",
+ "sound_effect": "[ยังไม่แปล: Sound Effect]",
+ "environmental_noise": "[ยังไม่แปล: Environmental Noise]",
+ "static": "[ยังไม่แปล: Static]",
+ "white_noise": "[ยังไม่แปล: White Noise]",
+ "pink_noise": "[ยังไม่แปล: Pink Noise]",
+ "television": "[ยังไม่แปล: Television]"
+}
diff --git a/web/public/locales/th/common.json b/web/public/locales/th/common.json
new file mode 100644
index 000000000..c7044976d
--- /dev/null
+++ b/web/public/locales/th/common.json
@@ -0,0 +1,250 @@
+{
+ "time": {
+ "today": "วันนี้",
+ "justNow": "ตอนนี้",
+ "yesterday": "เมื่อวาน",
+ "lastWeek": "สัปดาห์ที่แล้ว",
+ "untilForRestart": "จนกว่า Frigate รีสตาร์ท.",
+ "untilRestart": "จนกว่า รีสตาร์ท",
+ "ago": "{{timeAgo}} ที่แล้ว",
+ "last7": "7 วันที่แล้ว",
+ "last14": "14 วันที่แล้ว",
+ "last30": "30 วันที่แล้ว",
+ "thisWeek": "สัปดาห์นี้",
+ "untilForTime": "จนกว่า {{time}}",
+ "thisMonth": "เดือนนี้",
+ "lastMonth": "เดือนที่แล้ว",
+ "5minutes": "5 นาที",
+ "30minutes": "30 นาที",
+ "12hours": "12 ชั่วโมง",
+ "10minutes": "10 นาที",
+ "1hour": "1 ชั่วโมง",
+ "24hours": "24 ชั่วโมง",
+ "pm": "หลังเที่ยง",
+ "year_other": "{{time}} ปี",
+ "month_other": "{{time}} เดือน",
+ "day_other": "{{time}} วัน",
+ "h": "{{time}} ชั่วโมง",
+ "hour_other": "{{time}} ชั่วโมง",
+ "m": "{{time}} นาที",
+ "s": "{{time}} วินาที",
+ "mo": "{{time}} เดือน",
+ "minute_other": "{{time}} นาที",
+ "am": "ก่อนเที่ยง",
+ "formattedTimestamp": {
+ "12hour": "MMM d, h:mm:ss aaa",
+ "24hour": "MMM d, HH:mm:ss"
+ },
+ "yr": "{{time}} ปี",
+ "d": "{{time}} วัน",
+ "second_other": "{{time}} วินาที",
+ "formattedTimestampMonthDayYear": {
+ "24hour": "MMM d, yyyy",
+ "12hour": "MMM d, yyyy"
+ },
+ "formattedTimestampMonthDayYearHourMinute": {
+ "12hour": "MMM d yyyy, h:mm aaa",
+ "24hour": "MMM d yyyy, HH:mm"
+ },
+ "formattedTimestamp2": {
+ "12hour": "MM/dd h:mm:ssa",
+ "24hour": "d MMM HH:mm:ss"
+ },
+ "formattedTimestampHourMinute": {
+ "12hour": "h:mm aaa",
+ "24hour": "HH:mm"
+ },
+ "formattedTimestampHourMinuteSecond": {
+ "24hour": "HH:mm:ss",
+ "12hour": "h:mm:ss aaa"
+ },
+ "formattedTimestampMonthDayHourMinute": {
+ "12hour": "MMM d, h:mm aaa",
+ "24hour": "MMM d, HH:mm"
+ },
+ "formattedTimestampFilename": {
+ "12hour": "MM-dd-yy-h-mm-ss-a",
+ "24hour": "MM-dd-yy-HH-mm-ss"
+ },
+ "formattedTimestampMonthDay": "MMM d"
+ },
+ "label": {
+ "back": "ย้อนกลับ"
+ },
+ "button": {
+ "apply": "ใช้งาน",
+ "reset": "รีเซ็ต",
+ "done": "เรียบร้อย",
+ "enabled": "เปิดใช้งานแล้ว",
+ "enable": "เปิดใช้งาน",
+ "disable": "ปิดใช้งาน",
+ "disabled": "ปิดใช้งานแล้ว",
+ "save": "บันทึก",
+ "saving": "กำลังบันทึก…",
+ "cancel": "ยกเลิก",
+ "close": "ปิด",
+ "copy": "คัดลอก",
+ "back": "กลับ",
+ "history": "ประวัติ",
+ "fullscreen": "เต็มจอ",
+ "exitFullscreen": "ออกเต็มจอ",
+ "pictureInPicture": "ภาพซ้อนภาพ",
+ "cameraAudio": "เสียงกล้อง",
+ "on": "เปิด",
+ "off": "ปิด",
+ "edit": "แก้ไข",
+ "delete": "ลบ",
+ "yes": "ใช่",
+ "no": "ไม่",
+ "download": "ดาวน์โหลด",
+ "info": "ข้อมูล",
+ "play": "เล่น",
+ "unselect": "ไม่ได้เลือก",
+ "export": "ส่งออก",
+ "deleteNow": "ลบตอนนี้",
+ "next": "ต่อไป",
+ "twoWayTalk": "พูดคุยสองทาง",
+ "copyCoordinates": "คัดลอกพิกัด",
+ "suspended": "ถูกระงับ",
+ "unsuspended": "ยกเลิกถูกระงับ"
+ },
+ "menu": {
+ "restart": "รีสตาร์ท Frigate",
+ "user": {
+ "logout": "ออกจากระบบ",
+ "title": "ผู้ใช้",
+ "account": "บัญชี",
+ "current": "ผู้ใช้ปัจจุบัน: {{user}}",
+ "anonymous": "ไม่ระบุตัวตน",
+ "setPassword": "ตั้งรหัสผ่าน"
+ },
+ "live": {
+ "cameras": {
+ "count_other": "{{count}} กล้อง",
+ "title": "กล้อง"
+ },
+ "title": "สด",
+ "allCameras": "กล้องทั้งหมด"
+ },
+ "configurationEditor": "ตัวแก้ไขการกำหนดค่า",
+ "export": "ส่งออก",
+ "system": "ระบบ",
+ "configuration": "การกำหนดค่า",
+ "systemLogs": "บันทึกระบบ",
+ "settings": "ตั้งค่า",
+ "languages": "ภาษา",
+ "language": {
+ "withSystem": {
+ "label": "ใช้ภาษาของระบบ"
+ },
+ "en": "English (อังกฤษ)",
+ "zhCN": "简体中文 (ภาษาจีนตัวย่อ)",
+ "hi": "हिन्दी (ฮินดี)",
+ "fr": "Français (ฝรั่งเศส)",
+ "ar": "العربية (อาหรับ)",
+ "pt": "Português (โปรตุเกส)",
+ "ru": "Русский (รัสเซีย)",
+ "de": "Deutsch (เยอรมัน)",
+ "ja": "日本語 (ญี่ปุ่น)",
+ "tr": "Türkçe (ตุรกี)",
+ "it": "Italiano (อิตาเลียน)",
+ "nl": "Nederlands (ดัตช์)",
+ "sv": "Svenska (สวีเดน)",
+ "cs": "Čeština (เช็ก)",
+ "nb": "Norsk Bokmål (นอร์เวย์ บ็อกมอล)",
+ "ko": "한국어 (เกาหลี)",
+ "fa": "فارسی (เปอร์เซีย)",
+ "he": "עברית (ฮีบรู)",
+ "el": "Ελληνικά (กรีก)",
+ "ro": "Română (โรมาเนีย)",
+ "hu": "Magyar (ฮังการี)",
+ "fi": "Suomi (ฟินแลนด์)",
+ "da": "Dansk (เดนมาร์ก)",
+ "es": "Español (สเปน)",
+ "sk": "Slovenčina (สโลวัก)",
+ "uk": "Українська (ยูเครน)",
+ "vi": "Tiếng Việt (เวียดนาม)",
+ "yue": "粵語 (กวางตุ้ง)",
+ "pl": "Polski (ขัด)",
+ "th": "ไทย (ไทย)"
+ },
+ "darkMode": {
+ "label": "โหมดมืด",
+ "light": "สว่าง",
+ "dark": "มืด",
+ "withSystem": {
+ "label": "ใช้ของระบบสำหรับโหมดสว่างหรือมืด"
+ }
+ },
+ "withSystem": "ระบบ",
+ "theme": {
+ "label": "ธีม",
+ "blue": "น้ำเงิน",
+ "green": "เขียว",
+ "red": "แดง",
+ "highcontrast": "คอนทราสต์สูง",
+ "default": "เริ่มต้น",
+ "nord": "ฟ้า"
+ },
+ "review": "รีวิว",
+ "explore": "สำรวจ",
+ "uiPlayground": "UI สนามเด็กเล่น",
+ "faceLibrary": "ที่เก็บหน้า",
+ "help": "ช่วยเหลือ",
+ "documentation": {
+ "title": "เอกสาร",
+ "label": "เอกสาร Frigate"
+ },
+ "systemMetrics": "ตัวชี้วัดของระบบ",
+ "appearance": "หน้าตา"
+ },
+ "role": {
+ "viewer": "ผู้ชม",
+ "title": "บทบาท",
+ "admin": "ผู้ดูแล",
+ "desc": "ผู้ดูแลสามารถเข้าถึงระบบได้ทั้งหมดใน UI Frigate. ผู้ชมสามารถทำได้แค่ ดูกล้อง, ดูรีวิว, และ ประวัติคลิปใน UI."
+ },
+ "toast": {
+ "save": {
+ "error": {
+ "noMessage": "มีข้อผิดพลาดในการกำหนดค่า",
+ "title": "ผิดพลาดในการบันทึกการกำหนดค่า: {{errorMessage}}"
+ },
+ "title": "บันทึก"
+ },
+ "copyUrlToClipboard": "คัดลอก URL ใส่ คลิปบอร์ดแล้ว"
+ },
+ "pagination": {
+ "previous": {
+ "title": "ก่อนหน้า",
+ "label": "ไปหน้าที่แล้ว"
+ },
+ "next": {
+ "title": "ต่อไป",
+ "label": "ไปหน้าต่อไป"
+ },
+ "more": "หน้าเพิ่มเติม",
+ "label": "แบ่งหน้า"
+ },
+ "accessDenied": {
+ "documentTitle": "ไม่สามารถเข้าถึงได้ - Frigate",
+ "title": "ไม่สามารถเข้าถึงได้",
+ "desc": "คุณไม่มีสิทธิ์ในการเข้าถึงหน้านี้"
+ },
+ "notFound": {
+ "documentTitle": "ไม่พบ - Frigate",
+ "desc": "ไม่พบหน้านี้",
+ "title": "๔๐๔"
+ },
+ "selectItem": "เลือก {{item}}",
+ "unit": {
+ "speed": {
+ "mph": "ไมล์ต่อชั่วโมง",
+ "kph": "กิโลเมตรต่อชั่วโมง"
+ },
+ "length": {
+ "feet": "ฟุต",
+ "meters": "เมตร"
+ }
+ }
+}
diff --git a/web/public/locales/th/components/auth.json b/web/public/locales/th/components/auth.json
new file mode 100644
index 000000000..7a24ffef7
--- /dev/null
+++ b/web/public/locales/th/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "user": "ชื่อผู้ใช้",
+ "errors": {
+ "webUnknownError": "ข้อผิดพลาดที่ไม่รู้จัก. ตรวจสอบที่ console logs.",
+ "rateLimit": "เกินขีดจำกัด. โปรดลองอีกครั้งในภายหลัง.",
+ "loginFailed": "ล็อกอินไม่สำเร็จ",
+ "unknownError": "ข้อผิดพลาดที่ไม่รู้จัก. ตรวจสอบที่ logs.",
+ "passwordRequired": "ต้องการรหัสผ่าน",
+ "usernameRequired": "ต้องการชื่อผู้ใช้"
+ },
+ "login": "ล็อกอิน",
+ "password": "รหัสผ่าน"
+ }
+}
diff --git a/web/public/locales/th/components/camera.json b/web/public/locales/th/components/camera.json
new file mode 100644
index 000000000..3be4d7902
--- /dev/null
+++ b/web/public/locales/th/components/camera.json
@@ -0,0 +1,86 @@
+{
+ "group": {
+ "camera": {
+ "setting": {
+ "title": "{{cameraName}} ตั้งค่าการสตรีมมิ่ง",
+ "audioIsAvailable": "เสียงสามารถใช้งานได้ในสตรีมนี้",
+ "audioIsUnavailable": "เสียงไม่สามารถใช้ได้สําหรับสตรีมนี้",
+ "audio": {
+ "tips": {
+ "title": "เสียงต้องส่งออกจากกล้องของคุณและกําหนดค่าบน go2rtc สําหรับสตรีมนี้.",
+ "document": "อ่านเอกสาร "
+ }
+ },
+ "stream": "สตรีม",
+ "placeholder": "เลือกสตรีม",
+ "streamMethod": {
+ "label": "วิธีสตรีมมิ่ง",
+ "placeholder": "เลือกวิธีสตรีมมิ่ง",
+ "method": {
+ "noStreaming": {
+ "label": "ไม่มีการสตรีม",
+ "desc": "ภาพของกล้องจะอัปเดตนาทีต่อครั้งและไม่มีสตรีมสด."
+ },
+ "smartStreaming": {
+ "label": "สมาร์ทสตรีม (แนะนํา)",
+ "desc": "สมาร์ทสตรีมจะอัปเดตกล้องของคุณทุกหนึ่งนาทีเมื่อไม่มีการตรวจพบกิจกรรมที่เกิดขึ้นเพื่อรักษาแบนด์วิดท์และทรัพยากร. เมื่อมีการตรวจพบกิจกรรม, ภาพจะถูกเปลี่ยนเป็นสตรีมสด."
+ },
+ "continuousStreaming": {
+ "label": "สตรีมมิ่ง",
+ "desc": {
+ "title": "ภาพของกล้องจะแสดงตลอดเมื่ออยู่บนแดชบอร์ด, แม้ว่าไม่มีกิจกรรม.",
+ "warning": "สตรีมแบบต่อเนื่องอาจทําให้เกิดแบนด์วิดท์สูงและเกิดปัญหาประสิทธิภาพการทํางาน, โปรดใช้ความระมัดระวัง."
+ }
+ }
+ }
+ },
+ "desc": "เปลี่ยนตัวเลือกสตรีมสดสําหรับแผงควบคุมของกลุ่มกล้องนี้. การตั้งค่าเหล่านั้นเฉพาะอุปกรณ์/เบราว์เซอร์",
+ "compatibilityMode": {
+ "label": "โหมด",
+ "desc": "เปิดใช้งานตัวเลือกนี้เฉพาะเมื่อถ้ากล้องของคุณถ่ายทอดสดเป็นการแสดงสีแปลกๆและมีเส้นด้านข้าง."
+ },
+ "label": "การตั้งค่าสตรีมกล้อง"
+ }
+ },
+ "label": "กลุ่มกล้อง",
+ "add": "เพิ่มกลุ่มกล้อง",
+ "edit": "แก้ไขกลุ่มกล้อง",
+ "delete": {
+ "label": "ลบกลุ่มกล้อง",
+ "confirm": {
+ "title": "ยืนยันการลบ",
+ "desc": "คุณแน่ใจหรือไม่ว่าต้องการลบกลุ่มกล้อง {{name}}?"
+ }
+ },
+ "name": {
+ "label": "ชื่อ",
+ "placeholder": "ป้อนชื่อ…",
+ "errorMessage": {
+ "mustLeastCharacters": "ชื่อกลุ่มกล้องต้องมีอย่างน้อย 2 ตัวอักษร",
+ "exists": "ชื่อกลุ่มกล้องมีอยู่แล้ว",
+ "nameMustNotPeriod": "ชื่อกลุ่มกล้องต้องไม่มีจุด",
+ "invalid": "ชื่อกลุ่มกล้องไม่ถูกต้อง"
+ }
+ },
+ "cameras": {
+ "label": "กล้อง",
+ "desc": "เลือกกล้องสำหรับกลุ่มนี้"
+ },
+ "icon": "ไอคอน",
+ "success": "บันทึกกลุ่มกล้อง ({{name}}) เรียบร้อยแล้ว"
+ },
+ "debug": {
+ "options": {
+ "label": "การตั้งค่า",
+ "title": "ตัวเลือก",
+ "showOptions": "แสดงตัวเลือก",
+ "hideOptions": "ซ่อนไฟล์ตัวเลือก"
+ },
+ "boundingBox": "กรอบตรวจจับ",
+ "timestamp": "เวลาปัจจุบัน",
+ "zones": "โซน",
+ "mask": "หน้ากาก",
+ "motion": "การเคลื่อนไหว",
+ "regions": "พื้นที่"
+ }
+}
diff --git a/web/public/locales/th/components/dialog.json b/web/public/locales/th/components/dialog.json
new file mode 100644
index 000000000..d1a85ec0c
--- /dev/null
+++ b/web/public/locales/th/components/dialog.json
@@ -0,0 +1,105 @@
+{
+ "search": {
+ "saveSearch": {
+ "label": "บันทึกค้นหา",
+ "success": "ค้นหา {{searchName}} ถูกบันทึกเรียบร้อยแล้ว",
+ "desc": "ระบุชื่อสำหรับการค้นหาบันทึกนี้",
+ "button": {
+ "save": {
+ "label": "บันทึกการค้นหานี้"
+ }
+ },
+ "overwrite": "{{searchName}} มีอยู่แล้ว. การบันทึกจะทำการทับของเดิมลงไป.",
+ "placeholder": "ใส่ชื่อสําหรับการค้นหาของคุณ"
+ }
+ },
+ "export": {
+ "fromTimeline": {
+ "saveExport": "บันทึกส่งออก",
+ "previewExport": "ตัวอย่างส่งออก"
+ },
+ "toast": {
+ "error": {
+ "endTimeMustAfterStartTime": "เวลาสิ้นสุดต้องอยู่หลังเวลาเริ่มต้น",
+ "noVaildTimeSelected": "ไม่ได้เลือกช่วงเวลาที่ถูกต้อง",
+ "failed": "เริ่มต้นการส่งออกผิดพลาด: {{error}}"
+ },
+ "success": "เริ่มต้นการส่งออก ดูไฟล์ในโฟลเดอร์ /exports."
+ },
+ "time": {
+ "fromTimeline": "เลือกจากเวลา",
+ "lastHour_other": "ก่อนหน้านี้ {{count}} ชั่วโมง",
+ "custom": "กําหนดเอง",
+ "start": {
+ "title": "เวลาเริ่มต้น",
+ "label": "เลือกเวลาเริ่มต้น"
+ },
+ "end": {
+ "title": "เวลาสิ้นสุด",
+ "label": "เลือกเวลาสิ้นสุด"
+ }
+ },
+ "name": {
+ "placeholder": "ชื่อส่งออก"
+ },
+ "select": "เลือก",
+ "export": "ส่งออก",
+ "selectOrExport": "เลือกหรือส่งออก"
+ },
+ "restart": {
+ "restarting": {
+ "button": "โหลดหน้าใหม่ตอนนี้",
+ "title": "Frigate กำลังรีสตาร์ท",
+ "content": "หน้านี้จะถูกโหลดในอีก {{countdown}} วินาที."
+ },
+ "title": "คุณแน่ใจหรือว่าต้องการรีสตาร์ท Frigate?",
+ "button": "รีสตาร์ท"
+ },
+ "explore": {
+ "plus": {
+ "review": {
+ "question": {
+ "ask_full": "วัตถุนี้คือ {{untranslatedLabel}} ({{translatedLabel}})?",
+ "label": "ยืนยันหมวดหมู่นี้สําหรับ Frigate+",
+ "ask_a": "วัตถุนี้คือ {{label}}?",
+ "ask_an": "วัตถุนี้คือ {{label}}?"
+ },
+ "state": {
+ "submitted": "ส่งเรียบร้อย"
+ }
+ },
+ "submitToPlus": {
+ "label": "ส่งไปยัง Frigate+"
+ }
+ },
+ "video": {
+ "viewInHistory": "ดูประวัติ"
+ }
+ },
+ "recording": {
+ "button": {
+ "deleteNow": "ลบตอนนี้",
+ "export": "ส่งออก",
+ "markAsReviewed": "ทำเครื่องหมายว่ารีวิวแล้ว"
+ },
+ "confirmDelete": {
+ "title": "ยืนยันการลบ",
+ "toast": {
+ "error": "ลบไม่ได้: {{error}}"
+ }
+ }
+ },
+ "streaming": {
+ "label": "สตรีม",
+ "restreaming": {
+ "disabled": "รีสตรีมไม่ได้เปิดใช้งานสําหรับกล้องนี้.",
+ "desc": {
+ "readTheDocumentation": "อ่านเอกสาร"
+ }
+ },
+ "showStats": {
+ "label": "แสดงสถานะสตรีม",
+ "desc": "เปิดใช้งานตัวเลือกนี้เพื่อจะแสดงสถิติในกล้อง."
+ }
+ }
+}
diff --git a/web/public/locales/th/components/filter.json b/web/public/locales/th/components/filter.json
new file mode 100644
index 000000000..aea9fc5a7
--- /dev/null
+++ b/web/public/locales/th/components/filter.json
@@ -0,0 +1,86 @@
+{
+ "filter": "กรอง",
+ "zones": {
+ "label": "โซน",
+ "all": {
+ "title": "โซนทั้งหมด",
+ "short": "โซน"
+ }
+ },
+ "dates": {
+ "selectPreset": "เลือกค่าที่ตั้งไว้…",
+ "all": {
+ "title": "วันที่ทั้งหมด",
+ "short": "วันที่"
+ }
+ },
+ "more": "ตัวกรองเพิ่มเติม",
+ "reset": {
+ "label": "รีเซ็ตตัวกรองเป็นค่าเริ่มต้น"
+ },
+ "timeRange": "ช่วงเวลา",
+ "score": "คะแนน",
+ "estimatedSpeed": "ความเร็วโดยประมาณ {{unit}}",
+ "features": {
+ "label": "คุณสมบัติ",
+ "submittedToFrigatePlus": {
+ "label": "ส่งไปยัง Frigate+",
+ "tips": "คุณต้องกรองครั้งแรกบนวัตถุที่มีภาพ. detect, ตรวจสอบ error logs",
+ "title": "สตรีมออฟไลน์"
+ },
+ "noPreviewFound": "ไม่พบตัวอย่าง",
+ "submitFrigatePlus": {
+ "title": "ส่งเฟรมนี้ให้ Frigate+ ไหม?",
+ "submit": "ส่ง"
+ },
+ "livePlayerRequiredIOSVersion": "ต้องใช้ iOS 17.1 ขึ้นไปสำหรับประเภทสตรีมสดนี้",
+ "cameraDisabled": "กล้องถูกปิดใช้งาน",
+ "stats": {
+ "streamType": {
+ "title": "ประเภทสตรีม:",
+ "short": "ประเภท"
+ },
+ "latency": {
+ "title": "ความหน่วง:",
+ "value": "{{seconds}} วินาที",
+ "short": {
+ "title": "ความหน่วง",
+ "value": "{{seconds}} วิ"
+ }
+ },
+ "totalFrames": "จำนวนเฟรมทั้งหมด:",
+ "droppedFrames": {
+ "short": {
+ "title": "หายไป",
+ "value": "{{droppedFrames}} เฟรม"
+ },
+ "title": "เฟรมที่หาย:"
+ },
+ "decodedFrames": "เฟรมถูกถอดรหัส:",
+ "droppedFrameRate": "อัตราเฟรมที่หายไป:",
+ "bandwidth": {
+ "title": "แบนด์วิธ:",
+ "short": "แบนด์วิธ"
+ }
+ },
+ "toast": {
+ "error": {
+ "submitFrigatePlusFailed": "ไม่สามารถส่งเฟรมไปยัง Frigate+ ได้"
+ },
+ "success": {
+ "submittedFrigatePlus": "ส่งเฟรมให้ Frigate+ เรียบร้อยแล้ว"
+ }
+ },
+ "noRecordingsFoundForThisTime": "ไม่เจอการบันทึกในช่วงเวลานี้",
+ "noPreviewFoundFor": "ไม่พบตัวอย่างสำหรับ {{cameraName}}"
+}
diff --git a/web/public/locales/th/objects.json b/web/public/locales/th/objects.json
new file mode 100644
index 000000000..8d3130d0d
--- /dev/null
+++ b/web/public/locales/th/objects.json
@@ -0,0 +1,118 @@
+{
+ "traffic_light": "สัญญาณไฟจราจร",
+ "hair_dryer": "ไดร์เป่าผม",
+ "skateboard": "สเก็ตบอร์ด",
+ "fire_hydrant": "หัวดับเพลิง",
+ "bicycle": "จักรยาน",
+ "person": "คน",
+ "car": "รถยนต์",
+ "motorcycle": "มอเตอร์ไซค์",
+ "airplane": "เครื่องบิน",
+ "bus": "รถประจำทาง",
+ "train": "รถไฟ",
+ "cat": "แมว",
+ "horse": "ม้า",
+ "bird": "นก",
+ "boat": "เรือ",
+ "bench": "ม้านั่ง",
+ "dog": "สุนัข",
+ "parking_meter": "มิเตอร์จอดรถ",
+ "sheep": "แกะ",
+ "eye_glasses": "แว่นตา",
+ "sports_ball": "ลูกบอลกีฬา",
+ "baseball_bat": "ไม้เบสบอล",
+ "baseball_glove": "ถุงมือเบสบอล",
+ "tennis_racket": "ไม้เทนนิส",
+ "wine_glass": "แก้วไวน์",
+ "vehicle": "ยานพาหนะ",
+ "clock": "นาฬิกา",
+ "knife": "มีด",
+ "bowl": "ชาม",
+ "hot_dog": "ฮอทดอก",
+ "potted_plant": "ต้นไม้ในกระถาง",
+ "dining_table": "โต๊ะกินอาหาร",
+ "tv": "ทีวิ",
+ "teddy_bear": "ตุ๊กตาหมี",
+ "hair_brush": "แปรงหวีผม",
+ "squirrel": "กระรอก",
+ "deer": "กวาง",
+ "face": "ใบหน้า",
+ "robot_lawnmower": "หุ่นยนต์ตัดหญ้า",
+ "waste_bin": "ถังขยะ",
+ "license_plate": "ป้ายทะเบียนรถ",
+ "amazon": "อเมซอน",
+ "usps": "ไปรษณีย์สหรัฐ",
+ "stop_sign": "ป้ายหยุด",
+ "street_sign": "ป้ายถนน",
+ "cow": "วัว",
+ "elephant": "ช้าง",
+ "bear": "หมี",
+ "zebra": "ยีราฟ",
+ "giraffe": "จระเข้น้ำ",
+ "hat": "หมวก",
+ "backpack": "กระเป๋าเป้",
+ "umbrella": "ร่ม",
+ "shoe": "รองเท้า",
+ "handbag": "กระเป๋าถือ",
+ "mouse": "เมาส์",
+ "tie": "เนคไท",
+ "suitcase": "กระเป๋าเดินทาง",
+ "frisbee": "ดิสก์",
+ "skis": "สกี",
+ "snowboard": "สโนบอร์ด",
+ "kite": "ดอกกระดาษ",
+ "surfboard": "บอร์ดโต้คลื่น",
+ "bottle": "ขวด",
+ "plate": "จาน",
+ "cup": "ถ้วย",
+ "fork": "ส้อม",
+ "spoon": "ช้อน",
+ "banana": "กล้วย",
+ "apple": "แอปเปิล",
+ "sandwich": "แซนวิช",
+ "orange": "ส้ม",
+ "broccoli": "บรอกโคลี",
+ "carrot": "แครอท",
+ "pizza": "พิซซ่า",
+ "donut": "โดนัท",
+ "cake": "เค้ก",
+ "chair": "เก้าอี้",
+ "couch": "โซฟา",
+ "bed": "เตียง",
+ "mirror": "กระจก",
+ "window": "หน้าต่าง",
+ "desk": "โต๊ะทำงาน",
+ "toilet": "ห้องน้ำ",
+ "door": "ประตู",
+ "laptop": "แล็ปท็อป",
+ "remote": "รีโมท",
+ "oven": "เตาอบ",
+ "keyboard": "คีย์บอร์ด",
+ "microwave": "ไมโครเวฟ",
+ "toaster": "เครื่องทำขนมปัง",
+ "sink": "อ่างล้างจาน",
+ "refrigerator": "ตู้เย็น",
+ "blender": "เครื่องปั่น",
+ "book": "หนังสือ",
+ "vase": "แจกัน",
+ "scissors": "กรรไกร",
+ "toothbrush": "แปรงสีฟัน",
+ "animal": "สัตว์",
+ "bark": "เสียงหอบ",
+ "fox": "สุนัขจิ้งจอก",
+ "goat": "แพะ",
+ "rabbit": "กระต่าย",
+ "raccoon": "กระรอกน้ำ",
+ "package": "พัสดุ",
+ "purolator": "เพรูเลตอร์",
+ "bbq_grill": "เตาบาร์บีคิว",
+ "cell_phone": "โทรศัพท์มือถือ",
+ "ups": "UPS",
+ "dhl": "DHL",
+ "gls": "GLS",
+ "dpd": "DPD",
+ "postnord": "PostNord",
+ "nzpost": "NZPost",
+ "fedex": "FedEx",
+ "postnl": "PostNL"
+}
diff --git a/web/public/locales/th/views/configEditor.json b/web/public/locales/th/views/configEditor.json
new file mode 100644
index 000000000..d44ae391b
--- /dev/null
+++ b/web/public/locales/th/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "copyConfig": "คัดลอกการกำหนดค่า",
+ "saveOnly": "บันทึกเท่านั้น",
+ "confirm": "ออกโดยที่ไม่บันทึก?",
+ "toast": {
+ "error": {
+ "savingError": "เกิดข้อผิดพลาดในการบันทึกการกำหนดค่า"
+ },
+ "success": {
+ "copyToClipboard": "คัดลอกการกำหนดค่าไปยังคลิปบอร์ดแล้ว."
+ }
+ },
+ "saveAndRestart": "บันทึก และ รีสตาร์ท",
+ "documentTitle": "ตัวแก้ไขการกำหนดค่า - Frigate",
+ "configEditor": "ตัวแก้ไขการกำหนดค่า"
+}
diff --git a/web/public/locales/th/views/events.json b/web/public/locales/th/views/events.json
new file mode 100644
index 000000000..f303ea6b3
--- /dev/null
+++ b/web/public/locales/th/views/events.json
@@ -0,0 +1,38 @@
+{
+ "motion": {
+ "label": "เคลื่อนไหว",
+ "only": "เคลื่อนไหวเท่านั้น"
+ },
+ "allCameras": "กล้องทั้งหมด",
+ "empty": {
+ "detection": "ไม่มีการเคลื่อนไหวให้รีวิว",
+ "motion": "ไม่เจอข้อมูลการเคลื่อนไหว",
+ "alert": "ไม่มีการแจ้งเตือนให้รีวิว"
+ },
+ "events": {
+ "label": "กิจกรรม",
+ "aria": "เลือกกิจกรรม",
+ "noFoundForTimePeriod": "ไม่เจอกิจกรรมในช่วงเวลานี้"
+ },
+ "recordings": {
+ "documentTitle": "การบันทึก - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "24 ชั่วโมงล่าสุด"
+ },
+ "markAsReviewed": "ทำเครื่องหมายว่ารีวิวแล้ว",
+ "newReviewItems": {
+ "button": "รายการใหม่ที่จะรีวิว",
+ "label": "ดูรายการรีวิวใหม่"
+ },
+ "selected_other": "เลือก {{count}} แล้ว",
+ "camera": "กล้อง",
+ "detected": "ตรวจพบ",
+ "timeline": "ไทม์ไลน์",
+ "markTheseItemsAsReviewed": "ทำเครื่องหมายรายการเหล่านี้ว่าได้รับการรีวิวแล้ว",
+ "alerts": "การแจ้งเตือน",
+ "detections": "การตรวจจับ",
+ "selected_one": "เลือก {{count}} แล้ว",
+ "timeline.aria": "เลือกไทม์ไลน์",
+ "documentTitle": "รีวิว - Frigate"
+}
diff --git a/web/public/locales/th/views/explore.json b/web/public/locales/th/views/explore.json
new file mode 100644
index 000000000..b74d29e78
--- /dev/null
+++ b/web/public/locales/th/views/explore.json
@@ -0,0 +1,32 @@
+{
+ "documentTitle": "สํารวจ - Frigate",
+ "generativeAI": "AI",
+ "exploreMore": "สํารวจวัตถุ {{label}} เพิ่มเติม",
+ "exploreIsUnavailable": {
+ "title": "สํารวจไม่มีให้ใช้งาน",
+ "embeddingsReindexing": {
+ "context": "สํารวจสามารถใช้หลังจากติดตามวัตถุเสร็จ.",
+ "startingUp": "เริ่มต้น…",
+ "estimatedTime": "ระยะเวลาโดยประมาณ:",
+ "finishingShortly": "เสร็จเร็วๆนี้"
+ },
+ "downloadingModels": {
+ "tips": {
+ "documentation": "อ่านเอกสาร"
+ }
+ }
+ },
+ "type": {
+ "details": "รายละเอียด",
+ "video": "วิดีโอ"
+ },
+ "objectLifecycle": {
+ "noImageFound": "ไม่มีภาพสําหรับช่วงเวลานี้.",
+ "annotationSettings": {
+ "offset": {
+ "documentation": "อ่านเอกสาร "
+ }
+ }
+ },
+ "trackedObjectsCount_other": "{{count}} วัตถุที่เจอ "
+}
diff --git a/web/public/locales/th/views/exports.json b/web/public/locales/th/views/exports.json
new file mode 100644
index 000000000..698c6f82b
--- /dev/null
+++ b/web/public/locales/th/views/exports.json
@@ -0,0 +1,17 @@
+{
+ "documentTitle": "ส่งออก - Frigate",
+ "search": "ค้นหา",
+ "noExports": "ไม่เจอการส่งออก",
+ "deleteExport": "ลบส่งออก",
+ "deleteExport.desc": "คุณแน่ใจหรอที่จะลบ {{exportName}}?",
+ "editExport": {
+ "title": "แก้ชื่อส่งออก",
+ "desc": "ใส่ชื่อใหม่สำหรับการส่งออกนี้",
+ "saveExport": "บันทึกการส่งออก"
+ },
+ "toast": {
+ "error": {
+ "renameExportFailed": "ผิดพลาดในการแก้ไขชื่อการส่งออก: {{errorMessage}}"
+ }
+ }
+}
diff --git a/web/public/locales/th/views/faceLibrary.json b/web/public/locales/th/views/faceLibrary.json
new file mode 100644
index 000000000..4372d09b5
--- /dev/null
+++ b/web/public/locales/th/views/faceLibrary.json
@@ -0,0 +1,56 @@
+{
+ "details": {
+ "person": "คน",
+ "subLabelScore": "คะแนน Sub Label",
+ "unknown": "ไม่รู้"
+ },
+ "steps": {
+ "faceName": "ใส่ชื่อหน้า",
+ "uploadFace": "ใส่รูปหน้า",
+ "nextSteps": "ต่อไป",
+ "description": {
+ "uploadFace": "อัพโหลดภาพ {{name}} ที่แสดงให้เห็นใบหน้าของเขาจากมุมข้างหน้า. รูปภาพไม่จําเป็นต้องตัดให้เห็นเฉพาะใบหน้าของเขา."
+ }
+ },
+ "selectFace": "เลือกหน้า",
+ "deleteFaceLibrary": {
+ "title": "ลบชื่อ",
+ "desc": "คุณแน่ใจหรือไม่ว่าต้องการลบคอลเลกชัน {{name}}? การลบนี้จะเป็นการลบอย่างถาวร."
+ },
+ "deleteFaceAttempts": {
+ "title": "ลบหน้า"
+ },
+ "renameFace": {
+ "title": "เปลี่ยนชื่อหน้า",
+ "desc": "ใส่ชื่อใหม่สำหรับ {{name}}"
+ },
+ "button": {
+ "deleteFaceAttempts": "ลบหน้า",
+ "addFace": "เพิ่มหน้า",
+ "renameFace": "แก้ชื่อหน้า",
+ "deleteFace": "ลบหน้า",
+ "uploadImage": "อัปโหลดรูป",
+ "reprocessFace": "คำนวนหน้าใหม่"
+ },
+ "imageEntry": {
+ "dropActive": "ลากรูปลงที่นี้",
+ "dropInstructions": "ลากและวางภาพที่นี่, หรือคลิกเลือก"
+ },
+ "selectItem": "เลือก {{item}}",
+ "createFaceLibrary": {
+ "new": "สร้างหน้าใหม่",
+ "nextSteps": "สร้างรากฐานที่แข็งแรง:{{label}} nesnesi mi?",
+ "label": "Bu etiketi Frigate+ için onaylayın",
+ "ask_a": "Bu nesne bir {{label}} mi?",
+ "ask_full": "Bu nesne bir {{untranslatedLabel}} ({{translatedLabel}}) nesnesi mi?"
+ }
+ },
+ "submitToPlus": {
+ "label": "Frigate+'ya Gönder",
+ "desc": "Görülmesini istemediğiniz yerlerdeki nesneler yanlış pozitif değildir. Bunları yanlış pozitif olarak göndermek modeli yanıltacaktır."
+ }
+ },
+ "video": {
+ "viewInHistory": "Geçmiş Görünümünde Görüntüle"
+ }
+ },
+ "export": {
+ "time": {
+ "end": {
+ "label": "Bitiş Zamanını Seç",
+ "title": "Bitiş Zamanı"
+ },
+ "lastHour_one": "Son 1 Saat",
+ "lastHour_other": "Son {{count}} Saat",
+ "start": {
+ "title": "Başlangıç Zamanı",
+ "label": "Başlangıç Zamanını Seç"
+ },
+ "fromTimeline": "Zaman Şeridinde Seç",
+ "custom": "Özel"
+ },
+ "select": "Seç",
+ "export": "Dışa Aktar",
+ "selectOrExport": "Seç veya Dışa Aktar",
+ "toast": {
+ "success": "Dışa aktarım başladı. Dosyaya /exports klasöründe veya Dışa Aktar sekmesinden ulaşabilirsiniz.",
+ "error": {
+ "failed": "Dışa aktarım başlatılamadı: {{error}}",
+ "endTimeMustAfterStartTime": "Bitiş zamanı başlangıç zamanından sonra olmalıdır",
+ "noVaildTimeSelected": "Geçerli bir zaman aralığı seçilmedi"
+ }
+ },
+ "fromTimeline": {
+ "saveExport": "Dışa Aktarımı Kaydet",
+ "previewExport": "Dışa Aktarımı Önizle"
+ },
+ "name": {
+ "placeholder": "Dışa Aktarımı Adlandırın"
+ }
+ },
+ "streaming": {
+ "label": "Akış",
+ "restreaming": {
+ "disabled": "Bu kamera için Yeniden Akış devre dışı.",
+ "desc": {
+ "readTheDocumentation": "Dökümantasyonu oku",
+ "title": "Bu kameradan ek canlı gösterim seçenekleri ve sesli yayın almak için go2rtc'yi yapılandırın."
+ }
+ },
+ "showStats": {
+ "label": "Akış istatistiklerini göster",
+ "desc": "Kamera akışının üzerinde akış istastistiklerini görmek için bu seçeneği aktifleştirin."
+ },
+ "debugView": "Hata Ayıklama Görünümü"
+ },
+ "search": {
+ "saveSearch": {
+ "desc": "Kayıtlı aramaya bir isim verin.",
+ "placeholder": "Aramanız için bir isim girin",
+ "overwrite": "{{searchName}} zaten var. Bu isimle kaydetmek mevcut olanın üzerine yazacaktır.",
+ "label": "Aramayı Kaydet",
+ "button": {
+ "save": {
+ "label": "Bu aramayı kaydet"
+ }
+ },
+ "success": "Arama ({{searchName}}) kaydedildi."
+ }
+ },
+ "recording": {
+ "confirmDelete": {
+ "title": "Silmeyi Onayla",
+ "desc": {
+ "selected": "Bu inceleme öğesiyle ilişkili tüm kaydedilmiş videoları silmek istediğinizden emin misiniz?tespit akışından hiç bir görüntü alınamadı, hata günlüklerini kontrol edin"
+ },
+ "stats": {
+ "streamType": {
+ "title": "Yayın Türü:",
+ "short": "Tür"
+ },
+ "latency": {
+ "value": "{{seconds}} saniye",
+ "short": {
+ "title": "Gecikme",
+ "value": "{{seconds}} sn"
+ },
+ "title": "Gecikme:"
+ },
+ "bandwidth": {
+ "title": "Bant genişliği:",
+ "short": "Bant genişliği"
+ },
+ "decodedFrames": "Çözülen kareler:",
+ "droppedFrameRate": "Atlanan Kare Oranı:",
+ "totalFrames": "Toplam Kareler:",
+ "droppedFrames": {
+ "short": {
+ "title": "Atlanan",
+ "value": "{{droppedFrames}} kare"
+ },
+ "title": "Atlanan Kareler:"
+ }
+ },
+ "noPreviewFound": "Önizleme Bulunamadı",
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "Kare başarıyla Frigate+'a gönderildi"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "Kare Frigate+'a gönderilemedi"
+ }
+ },
+ "noRecordingsFoundForThisTime": "Bu zaman aralığı için kayıt bulunamadı",
+ "cameraDisabled": "Kamera devre dışı bırakıldı",
+ "noPreviewFoundFor": "{{cameraName}} için Önizleme Bulunamadı",
+ "livePlayerRequiredIOSVersion": "Bu canlı yayın türü için iOS 17.1 veya daha yeni sürüm gereklidir.",
+ "submitFrigatePlus": {
+ "title": "Bu kare Frigate+'ya gönderilsin mi?",
+ "submit": "Gönder"
+ }
+}
diff --git a/web/public/locales/tr/objects.json b/web/public/locales/tr/objects.json
new file mode 100644
index 000000000..fb07a0965
--- /dev/null
+++ b/web/public/locales/tr/objects.json
@@ -0,0 +1,120 @@
+{
+ "dog": "köpek",
+ "cat": "kedi",
+ "animal": "hayvan",
+ "bark": "havlama",
+ "blender": "mikser",
+ "mouse": "fare",
+ "door": "kapı",
+ "sink": "lavabo",
+ "boat": "bot",
+ "skateboard": "kaykay",
+ "sheep": "koyun",
+ "bicycle": "bisiklet",
+ "motorcycle": "motosiklet",
+ "bird": "kuş",
+ "car": "araba",
+ "bus": "otobüs",
+ "goat": "keçi",
+ "hair_dryer": "saç kurutma makinesi",
+ "clock": "saat",
+ "scissors": "makas",
+ "vehicle": "araç",
+ "keyboard": "klavye",
+ "toothbrush": "diş fırçası",
+ "horse": "at",
+ "train": "tren",
+ "handbag": "El Çantası",
+ "umbrella": "Şemsiye",
+ "shoe": "Ayakkabı",
+ "eye_glasses": "Gözlük",
+ "desk": "Masa",
+ "remote": "Uzaktan Kumanda",
+ "refrigerator": "Buzdolabı",
+ "book": "Kitap",
+ "hair_brush": "Saç Fırçası",
+ "squirrel": "Sincap",
+ "waste_bin": "Çöp Kutusu",
+ "face": "Yüz",
+ "license_plate": "Araç Plakası",
+ "an_post": "An Post",
+ "sandwich": "Sandviç",
+ "couch": "Koltuk",
+ "baseball_glove": "Beyzbol Eldiveni",
+ "donut": "Donut",
+ "bed": "Yatak",
+ "backpack": "Sırt Çantası",
+ "parking_meter": "Parkmetre",
+ "stop_sign": "Dur Tabelası",
+ "person": "İnsan",
+ "bear": "Ayı",
+ "hat": "Şapka",
+ "orange": "Portakal",
+ "dining_table": "Yemek Masası",
+ "traffic_light": "Trafik Lambası",
+ "giraffe": "Zürafa",
+ "fire_hydrant": "Yangın Musluğu",
+ "street_sign": "Sokak Tabelası",
+ "mirror": "Ayna",
+ "banana": "Muz",
+ "carrot": "Havuç",
+ "pizza": "Pizza",
+ "vase": "Vazo",
+ "nzpost": "NZPost",
+ "bench": "Bank",
+ "elephant": "Fil",
+ "spoon": "Kaşık",
+ "laptop": "Dizüstü Bilgisayar",
+ "frisbee": "Frizbi",
+ "skis": "Kayak",
+ "kite": "Uçurtma",
+ "bottle": "Şişe",
+ "cup": "Fincan",
+ "knife": "Bıçak",
+ "bowl": "Kase",
+ "package": "Paket",
+ "airplane": "Uçak",
+ "snowboard": "Kar Kayağı",
+ "usps": "USPS",
+ "ups": "UPS",
+ "cow": "İnek",
+ "zebra": "Zebra",
+ "suitcase": "Bavul",
+ "sports_ball": "Spor Topu",
+ "baseball_bat": "Beyzbol Sopası",
+ "surfboard": "Sörf Tahtası",
+ "plate": "Plaka",
+ "broccoli": "Brokoli",
+ "tv": "Televizyon",
+ "cell_phone": "Cep Telefonu",
+ "teddy_bear": "Ayıcık",
+ "deer": "Geyik",
+ "fox": "Tilki",
+ "purolator": "Purolator",
+ "fork": "Çatal",
+ "toilet": "Tuvalet",
+ "window": "Pencere",
+ "microwave": "Mikrodalga Fırın",
+ "hot_dog": "Sosisli Sandviç",
+ "wine_glass": "Şarap Bardağı",
+ "cake": "Kek",
+ "potted_plant": "Saksı Bitkisi",
+ "bbq_grill": "Izgara",
+ "tennis_racket": "Tenis Raketi",
+ "dhl": "DHL",
+ "raccoon": "Rakun",
+ "robot_lawnmower": "Robot Çim Biçme Makinesi",
+ "toaster": "Tost Makinesi",
+ "apple": "Elma",
+ "amazon": "Amazon",
+ "rabbit": "Tavşan",
+ "chair": "Sandalye",
+ "postnl": "PostNL",
+ "oven": "Fırın",
+ "fedex": "FedEx",
+ "on_demand": "İstenildiğinde",
+ "tie": "Kravat",
+ "dpd": "DPD",
+ "gls": "GLS",
+ "postnord": "PostNord"
+}
diff --git a/web/public/locales/tr/views/configEditor.json b/web/public/locales/tr/views/configEditor.json
new file mode 100644
index 000000000..c4aa01b6b
--- /dev/null
+++ b/web/public/locales/tr/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "saveOnly": "Sadece Kaydet",
+ "toast": {
+ "error": {
+ "savingError": "Yapılandırma kaydedilirken hata"
+ },
+ "success": {
+ "copyToClipboard": "Yapılandırma panoya kopyalandı."
+ }
+ },
+ "copyConfig": "Yapılandırmayı Kopyala",
+ "configEditor": "Yapılandırma Düzenleyicisi",
+ "documentTitle": "Yapılandırma Düzenleyicisi - Frigate",
+ "saveAndRestart": "Kaydet & Yeniden Başlat",
+ "confirm": "Kaydetmeden çıkılsın mı?"
+}
diff --git a/web/public/locales/tr/views/events.json b/web/public/locales/tr/views/events.json
new file mode 100644
index 000000000..3f363c70f
--- /dev/null
+++ b/web/public/locales/tr/views/events.json
@@ -0,0 +1,38 @@
+{
+ "camera": "kamera",
+ "alerts": "Alarmlar",
+ "detections": "Tespitler",
+ "empty": {
+ "detection": "İncelenecek tespit öğesi yok",
+ "alert": "İncelenecek alarm öğesi yok",
+ "motion": "Hareket verisi bulunamadı"
+ },
+ "timeline": "Zaman şeridi",
+ "events": {
+ "aria": "Olayları seçin",
+ "noFoundForTimePeriod": "Seçili zaman aralığında olay bulunamadı.",
+ "label": "Olaylar"
+ },
+ "recordings": {
+ "documentTitle": "Kayıtlar - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "Son 24 Saat"
+ },
+ "markAsReviewed": "İncelendi Olarak İşaretle",
+ "newReviewItems": {
+ "button": "Yeni İncelenecek Öğeler Var",
+ "label": "Yeni inceleme öğelerini göster"
+ },
+ "documentTitle": "İncele - Frigate",
+ "motion": {
+ "label": "Hareket",
+ "only": "Yalnızca hareket"
+ },
+ "timeline.aria": "Zaman şeridi seçin",
+ "markTheseItemsAsReviewed": "Bunları incelendi olarak işaretle",
+ "allCameras": "Tüm Kameralar",
+ "selected_one": "{{count}} seçildi",
+ "selected_other": "{{count}} seçildi",
+ "detected": "algılandı"
+}
diff --git a/web/public/locales/tr/views/explore.json b/web/public/locales/tr/views/explore.json
new file mode 100644
index 000000000..485fe9b43
--- /dev/null
+++ b/web/public/locales/tr/views/explore.json
@@ -0,0 +1,207 @@
+{
+ "documentTitle": "Keşfet - Frigate",
+ "details": {
+ "timestamp": "Zaman Damgası",
+ "item": {
+ "title": "Nesne Detaylarını İncele",
+ "desc": "Nesne detaylarıın incele",
+ "button": {
+ "share": "Bu incele öğesini paylaş",
+ "viewInExplore": "Keşfet'te Görüntüle"
+ },
+ "tips": {
+ "hasMissingObjects": "Eğer Frigate'in {{objects}} etiketine sahip nesneleri kaydetmesini istiyorsanız yapılandırmanızı buna göre ayarlayın.",
+ "mismatch_one": "Tespit edilmiş olan bir nesne bu İncele öğesine dahil edildi. Bu nesne Alarm veya Tespit olarak derecelendirilemedi veya çoktan silindi/temizlendi.",
+ "mismatch_other": "Tespit edilmiş olan {{count}} adet nesne bu İncele öğesine dahil edildi. Bu nesneler Alarm veya Tespit olarak derecelendirilemedi veya çoktan silindi/temizlendi."
+ },
+ "toast": {
+ "success": {
+ "updatedSublabel": "Alt etiket başarıyla gücellendi.",
+ "regenerate": "Yeni bir açıklama {{provider}} sağlayıcısından talep edildi. Sağlayıcının hızına bağlı olarak yeni açıklamanın oluşturulması biraz zaman alabilir.",
+ "updatedLPR": "Plaka başarıyla güncellendi."
+ },
+ "error": {
+ "updatedSublabelFailed": "Alt etiket güncellenemedi: {{errorMessage}}",
+ "regenerate": "{{provider}} sağlayıcısından yeni açıklama talep edilemedi: {{errorMessage}}",
+ "updatedLPRFailed": "Plaka güncellenemedi: {{errorMessage}}"
+ }
+ }
+ },
+ "label": "Etiket",
+ "editSubLabel": {
+ "desc": "Bu {{label}} için yeni bir alt etiket girin",
+ "descNoLabel": "Bu takip edilmiş nesne için yeni bir alt etiket girin",
+ "title": "Alt etiketi gücelle"
+ },
+ "estimatedSpeed": "Tahmini Hız",
+ "camera": "Kamera",
+ "zones": "Alanlar",
+ "description": {
+ "label": "Açıklama",
+ "aiTips": "Frigate, Nesne Geçmişi tamamlanana kadar Üretken Yapay Zeka sağlayıcısından bir resim açıklaması talep etmeyecektir.",
+ "placeholder": "Takip edilen nesnenin açıklaması"
+ },
+ "expandRegenerationMenu": "Yeniden Üret menüsünü genişlet",
+ "regenerateFromSnapshot": "Fotoğraftan Üret",
+ "regenerateFromThumbnails": "Küçük Resimden Üret",
+ "tips": {
+ "descriptionSaved": "Açıklama başarıyla kaydedildi",
+ "saveDescriptionFailed": "Açıklama güncellenemedi: {{errorMessage}}"
+ },
+ "button": {
+ "regenerate": {
+ "label": "Nesne açıklaması yeniden üretildi",
+ "title": "Yeniden Üret"
+ },
+ "findSimilar": "Benzerini Bul"
+ },
+ "topScore": {
+ "info": "Tepe skor, bir takip edilen nesne için en yüksek ortalama puandır ve arama sonucundaki küçük resimde gösterilen puandan farklı olabilir.",
+ "label": "Tepe Skor"
+ },
+ "objects": "Nesneler",
+ "editLPR": {
+ "title": "Plakayı düzenle",
+ "desc": "Bu {{label}} için yeni bir plaka değeri girin",
+ "descNoLabel": "Bu nesne için yeni bir plaka değeri girin"
+ },
+ "recognizedLicensePlate": "Tanınan Plaka",
+ "snapshotScore": {
+ "label": "Fotoğraf Skoru"
+ }
+ },
+ "generativeAI": "Üretken Yapay Zeka",
+ "exploreIsUnavailable": {
+ "title": "Keşfet şu anda kullanılamıyor",
+ "embeddingsReindexing": {
+ "startingUp": "Başlatılıyor…",
+ "estimatedTime": "Tahmini kalan süre:",
+ "step": {
+ "thumbnailsEmbedded": "Gömü eklenen küçük resimler: ",
+ "descriptionsEmbedded": "Gömü eklenen açıklamalar: ",
+ "trackedObjectsProcessed": "İşlenen takip edilen nesneler: "
+ },
+ "finishingShortly": "Birazdan tamamlanacak",
+ "context": "Keşfet sayfası nesnelerin gömülerinin yeniden dizinlemesi tamamlandığında kullanılabilecektir."
+ },
+ "downloadingModels": {
+ "setup": {
+ "visionModel": "Görüş modeli",
+ "visionModelFeatureExtractor": "Görüş modeli özellik çıkarmcısı",
+ "textModel": "Metin modeli",
+ "textTokenizer": "Metin tokenizeri"
+ },
+ "error": "Bir hata oluştu. Frigate günlüklerini kontrol edin.",
+ "tips": {
+ "documentation": "Dökümantasyonu oku",
+ "context": "Model indirildikten sonra takip edilmiş nesnelerinizin gömüleri tekrar dizinlemeyi tercih edebilirsiniz."
+ },
+ "context": "Frigate, Anlamsal Arama özelliği için gerekli olan gömü modellerini indiriyor. Ağ bağlantınızın hızına göre bu işlem bir kaç dakika sürebilir."
+ }
+ },
+ "trackedObjectDetails": "Takip Edilen Nesne Detayları",
+ "type": {
+ "details": "detaylar",
+ "object_lifecycle": "nesne geçmişi",
+ "snapshot": "fotoğraf",
+ "video": "video"
+ },
+ "objectLifecycle": {
+ "title": "Nesne Geçmişi",
+ "noImageFound": "Bu zaman damgası için bir resim bulunamadı.",
+ "createObjectMask": "Nesne Maskesi Oluştur",
+ "adjustAnnotationSettings": "Belirteç ayarları",
+ "lifecycleItemDesc": {
+ "visible": "{{label}} tespit edildi",
+ "entered_zone": "{{label}} {{zones}} alanına girdi",
+ "active": "{{label}} inaktif oldu",
+ "heard": "{{label}} duyuldu",
+ "external": "{{label}} tespit edildi",
+ "stationary": "{{label}} sabit durdu",
+ "attribute": {
+ "other": "{{label}} {{attribute}} olarak tespit edildi",
+ "faceOrLicense_plate": "{{label}} için {{attribute}} tespit edildi"
+ },
+ "gone": "{{label}} ayrıldı",
+ "header": {
+ "zones": "Alanlar",
+ "ratio": "Oran",
+ "area": "Alan"
+ }
+ },
+ "annotationSettings": {
+ "offset": {
+ "label": "Belirteç telafisi",
+ "documentation": "Dökümantasyonu oku ",
+ "millisecondsToOffset": "Belirteç gecikmesi. Varsayılan: 0",
+ "desc": "Tespit belirteç verisi kameranızın tespit yayınından gelir fakat kameranızın kayıt yayını üzerine çizilir. Bu iki yayın zaman zaman senkrondan kayar. Bunun sonucu olarak görüntü ve belirteç karelerinin zaman uyumu kayabilir. Bunu telafi etmek için annotation_offset alanı kullanılarak gecikmeyi ayarlanabilir.",
+ "tips": "İPUCU: Videoda bir kişinin soldan sağa doğru yürüdüğünü hayal edin. Eğer belirteç sürekli olarak kişinin solunda/arkasında ise bu değer daha küçük veya negatif olarak ayarlanmalıdır. Benzer şekilde, eğer kişi sağdan sola doğru yürürken belirteç karesi sürekli olarak kişinin önünde/sağında kalıyorsa bu değer daha büyük veya pozitif olarak ayarlanmalıdır.",
+ "toast": {
+ "success": "{{camera}} kamerası için belirteç telafi değeri yapılandırma dosyasına kaydedildi. Değişikliklerin uygulamak için Frigate'i yeniden başlatın."
+ }
+ },
+ "title": "Belirteç Ayarları",
+ "showAllZones": {
+ "title": "Tüm Alanları Göster",
+ "desc": "Nesnelerin bir alana girdiği karelerde her zaman alanları göster."
+ }
+ },
+ "carousel": {
+ "next": "Sonraki sayfa",
+ "previous": "Önceki sayfa"
+ },
+ "scrollViewTips": "Bu nesnenin geçmişindeki önemli noktaları görmek için kaydırın.",
+ "autoTrackingTips": "Otomatik takip yapılan kameralarda gösterilen çerçeveler hatalı olacaktır.",
+ "count": "Toplam {{second}} kerede {{first}} kez",
+ "trackedPoint": "Takip Edilen Nokta"
+ },
+ "itemMenu": {
+ "downloadVideo": {
+ "label": "Videoyu indir",
+ "aria": "Videoyu indir"
+ },
+ "findSimilar": {
+ "aria": "Benzer takip edilen nesneleri bul",
+ "label": "Benzerini bul"
+ },
+ "submitToPlus": {
+ "label": "Frigate+'a gönder",
+ "aria": "Frigate+'a gönder"
+ },
+ "viewInHistory": {
+ "label": "Geçmiş görünümünde görüntüle",
+ "aria": "Geçmiş görünümünde görüntüle"
+ },
+ "deleteTrackedObject": {
+ "label": "Bu takip edilen nesneyi sil"
+ },
+ "viewObjectLifecycle": {
+ "aria": "Nesne yaşam döngüsünü göster",
+ "label": "Nesne yaşam döngüsünü göster"
+ },
+ "downloadSnapshot": {
+ "aria": "Fotoğrafı indir",
+ "label": "Fotoğrafı indir"
+ }
+ },
+ "noTrackedObjects": "Takip Edilen Nesne Bulunamadı",
+ "fetchingTrackedObjectsFailed": "Takip edilen nesneler getirilirken hata: {{errorMessage}}",
+ "searchResult": {
+ "deleteTrackedObject": {
+ "toast": {
+ "error": "Takip edilen nesne silinemedi: {{errorMessage}}",
+ "success": "Takip edilen nesne başarıyla silindi."
+ }
+ },
+ "tooltip": "Eşleşme: {{type}} (%{{confidence}})"
+ },
+ "dialog": {
+ "confirmDelete": {
+ "desc": "Bu takip edilen nesneyi silmek nesne fotoğrafını, ilişkili gömüyü ve ilişkili yaşam döngüsü kayıtlarını siler. Video kayıt görüntüleri geçmiş görünümünden SİLİNMEYECEKTİR. şu moda ayarlı: {{effectiveRetainMode}}. Dolayısıyla şu anda gerçekleştirdiğiniz manuel talep üzerine kayıtta yalnızca {{effectiveRetainModeName}} içeren bölümler yer alacaktır."
+ },
+ "editLayout": {
+ "label": "Düzeni düzenle",
+ "group": {
+ "label": "Kamera Grubunu Düzenle"
+ },
+ "exitEdit": "Düzenlemeden Çık"
+ },
+ "cameraAudio": {
+ "enable": "Kamera sesini aç",
+ "disable": "Kamera sesini kapat"
+ },
+ "ptz": {
+ "move": {
+ "clickMove": {
+ "enable": "Tıklamayla gezintiyi aç",
+ "disable": "Tıklamayla gezintiyi kapat",
+ "label": "Kamerayı ortalamak için görüntüye tıklatın"
+ },
+ "down": {
+ "label": "PTZ kamerayı aşağı çevir"
+ },
+ "right": {
+ "label": "PTZ kamerayı sağa çevir"
+ },
+ "left": {
+ "label": "PTZ kameryı sağa çevir"
+ },
+ "up": {
+ "label": "PTZ kamerayı yukarı çevir"
+ }
+ },
+ "zoom": {
+ "out": {
+ "label": "PTZ kamerayı uzaklaştır"
+ },
+ "in": {
+ "label": "PTZ kamerayı yakınlaştır"
+ }
+ },
+ "presets": "PTZ kamera ön ayarları",
+ "frame": {
+ "center": {
+ "label": "PTZ kamerayı ortalamak için görüntüye tıklatın"
+ }
+ }
+ },
+ "history": {
+ "label": "Geçmiş görüntüleri göster"
+ },
+ "camera": {
+ "enable": "Kamerayı aç",
+ "disable": "Kamerayı kapat"
+ },
+ "suspend": {
+ "forTime": "Askıya alınma süresi: "
+ },
+ "twoWayTalk": {
+ "disable": "Çift yönli sesi kapat",
+ "enable": "Çift yönli sesi aç"
+ },
+ "snapshots": {
+ "enable": "Resimleri Aç",
+ "disable": "Resimleri Kapat"
+ },
+ "audioDetect": {
+ "enable": "Ses Tespitini Aç",
+ "disable": "Ses Tespitini Kapat"
+ },
+ "streamStats": {
+ "disable": "Yayın İstatistiklerini Gizel",
+ "enable": "Yayın İstatistiklerini Göster"
+ },
+ "lowBandwidthMode": "Düşük bant genişliği modu",
+ "streamingSettings": "Yayın ayarları",
+ "audio": "Ses",
+ "recording": {
+ "enable": "Kaydı Aç",
+ "disable": "Kaydı Kapat"
+ },
+ "notifications": "Bildirimler",
+ "detect": {
+ "disable": "Tespiti Kapat",
+ "enable": "Tespiti Aç"
+ }
+}
diff --git a/web/public/locales/tr/views/recording.json b/web/public/locales/tr/views/recording.json
new file mode 100644
index 000000000..c113d368f
--- /dev/null
+++ b/web/public/locales/tr/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "filter": "Filtre",
+ "export": "Dışa Aktar",
+ "filters": "Filtreler",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "Geçerli bir zaman aralığı seçilmedi",
+ "endTimeMustAfterStartTime": "Bitiş zamanı başlangıç zamanında sonra olmalıdır"
+ }
+ },
+ "calendar": "Takvim"
+}
diff --git a/web/public/locales/tr/views/search.json b/web/public/locales/tr/views/search.json
new file mode 100644
index 000000000..059023308
--- /dev/null
+++ b/web/public/locales/tr/views/search.json
@@ -0,0 +1,74 @@
+{
+ "button": {
+ "save": "Aramayı kaydet",
+ "filterActive": "Fitreler açık",
+ "filterInformation": "Filtrele",
+ "clear": "Aramayı temizle",
+ "delete": "Kayıtlı aramayı sil"
+ },
+ "trackedObjectId": "Takip Edilen Nesne ID",
+ "filter": {
+ "label": {
+ "min_score": "Min. Skor",
+ "recognized_license_plate": "Tanınan Plaka",
+ "search_type": "Arama Türü",
+ "has_snapshot": "Fotoğrafı var",
+ "cameras": "Kameralar",
+ "max_score": "Maks. Skor",
+ "labels": "Etiketler",
+ "time_range": "Zaman Aralığı",
+ "before": "Önce",
+ "zones": "Alanlar",
+ "after": "Sonras",
+ "has_clip": "Klibi var",
+ "min_speed": "Min. Hız",
+ "sub_labels": "Alt Etiketler",
+ "max_speed": "Maks. Hız"
+ },
+ "searchType": {
+ "description": "Açıklama",
+ "thumbnail": "Küçük resim"
+ },
+ "tips": {
+ "title": "Metin filtreleri nasıl kullanılır",
+ "desc": {
+ "text": "Filtreler arama sonuçlarınızı daraltmanıza yardımcı olur. Giriş alanındaki kullanımları şöyledir:",
+ "step": "cameras:front_door label:person before:01012024 time_range:3:00PM-4:00PM ",
+ "exampleLabel": "Örnek:",
+ "step1": "Bir filtre anahtarını iki nokta üst üste ile beraber yazın (örn. belli kameraları seçmek için \"cameras:\").",
+ "step2": "Önerilen bir değer seçin veya kendiniz girin.",
+ "step3": "Birden fazla filtreyi aralarında boşluk bırakarak kullanabilirsiniz.",
+ "step4": "Tarih filtreleri (before: ve after:) {{DateFormat}} formatını kullanır.",
+ "step5": "Zaman aralığı filtreleri {{exampleTime}} formatını kullanır.",
+ "step6": "Filtreleri kaldırmak için yanlarındaki çarpıya basın."
+ }
+ },
+ "toast": {
+ "error": {
+ "beforeDateBeLaterAfter": "'Önce' tarihi 'sonra' tarihinden sonra olmalıdır.",
+ "maxScoreMustBeGreaterOrEqualMinScore": "Maksimum skor, minimum skora eşit veya daha fazla olmalıdır.",
+ "minScoreMustBeLessOrEqualMaxScore": "Minimum skor, maksimum skora eşit veya daha az olmalıdır.",
+ "afterDatebeEarlierBefore": "'Sonra' tarihi 'Önce' tarihinden önce olmalıdır.",
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "Maksimum hız, minimum hıza eşit veya daha fazla olmalıdır.",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "Minimum hız, maksimum hıza eşit veya daha az olmalıdır."
+ }
+ },
+ "header": {
+ "noFilters": "Filtreler",
+ "activeFilters": "Aktif Filtreler",
+ "currentFilterType": "Değerleri Filtrele"
+ }
+ },
+ "placeholder": {
+ "search": "Ara…"
+ },
+ "similaritySearch": {
+ "active": "Benzerlik araması aktif",
+ "title": "Benzerlik Araması",
+ "clear": "Benzerlik aramasını temizle"
+ },
+ "searchFor": "{{inputValue}} için Arat",
+ "search": "Arama",
+ "savedSearches": "Kayıtlı Aramalar"
+}
diff --git a/web/public/locales/tr/views/settings.json b/web/public/locales/tr/views/settings.json
new file mode 100644
index 000000000..c9924658b
--- /dev/null
+++ b/web/public/locales/tr/views/settings.json
@@ -0,0 +1,683 @@
+{
+ "documentTitle": {
+ "default": "Ayarlar - Frigate",
+ "classification": "Sınıflandırma Ayarları - Frigate",
+ "camera": "Kamera Ayarları - Frigate",
+ "masksAndZones": "Maske ve Alan Düzenleyici - Frigate",
+ "authentication": "Kimlik Doğrulama Ayarları - Frigate",
+ "motionTuner": "Hareket Algılama Ayarları - Frigate",
+ "frigatePlus": "Frigate+ Ayarları - Frigate",
+ "object": "Hata Ayıklama - Frigate",
+ "general": "Genel Ayarlar - Frigate",
+ "notifications": "Bildirim Ayarları - Frigate",
+ "enrichments": "Zenginleştirme Ayarları - Frigate"
+ },
+ "menu": {
+ "masksAndZones": "Maskeler / Alanlar",
+ "users": "Kullanıcılar",
+ "frigateplus": "Frigate+",
+ "ui": "Arayüz",
+ "notifications": "Bildirimler",
+ "motionTuner": "Hareket Algılama",
+ "classification": "Sınıflandırma",
+ "debug": "Hata Ayıklama",
+ "cameras": "Kamera Ayarları",
+ "enrichments": "Zenginleştirmeler"
+ },
+ "general": {
+ "title": "Genel Ayarlar",
+ "liveDashboard": {
+ "automaticLiveView": {
+ "label": "Otomatik Canlı Görünüm",
+ "desc": "Aktivite tespit edildiğinde otomatik olarak kameranın canlı akışına geç. Bu seçeneği devre dışı bırakmak canlı görüntü panelinde dakikada bir güncellenen sabit resim gösterilmesine sebep olur."
+ },
+ "playAlertVideos": {
+ "label": "Alarm Videolarını Oynat",
+ "desc": "Varsayılan olarak canlı görüntü panelinde gösterilen son alarmlar ufak videolar olarak oynatılır. Bu tarayıcı/cihazda video yerine sabit resim göstermek için bu seçeneği kapatın."
+ },
+ "title": "Canlı Görüntü Paneli"
+ },
+ "storedLayouts": {
+ "desc": "Kamera grubundaki kameraların düzenini kameraları sürükleyerek ve büyüterek/küçülterek değiştirebilirsiniz. Düzen bilgisi tarayıcınızda depolanır.",
+ "clearAll": "Tüm Düzenleri Temizle",
+ "title": "Kayıtlı Düzenler"
+ },
+ "cameraGroupStreaming": {
+ "title": "Kamera Grubu Yayın Ayarları",
+ "desc": "Kamera gruplarının ilgili yayın ayarları tarayıcınızda depolanır.",
+ "clearAll": "Tüm Yayın Ayarlarını Temizle"
+ },
+ "recordingsViewer": {
+ "defaultPlaybackRate": {
+ "label": "Varsayılan Oynatma Hızı",
+ "desc": "Kayıt oynatılırken kullanılan varsayılan oynatma hızı."
+ },
+ "title": "Kayıt Görüntüleyicisi"
+ },
+ "calendar": {
+ "firstWeekday": {
+ "sunday": "Pazar",
+ "desc": "Arayüzdeki takvimde gösterilecek haftanın ilk günü.",
+ "label": "Haftanın ilk günü",
+ "monday": "Pazartesi"
+ },
+ "title": "Takvim"
+ },
+ "toast": {
+ "success": {
+ "clearStreamingSettings": "Tüm kamera grupları için yayın ayarları temizlendi.",
+ "clearStoredLayout": "{{cameraName}} için kayıtlı düzenler temizlendi"
+ },
+ "error": {
+ "clearStreamingSettingsFailed": "Yayın ayarları temizlenemedi: {{errorMessage}}",
+ "clearStoredLayoutFailed": "Kayıtlı düzen temizlenemedi: {{errorMessage}}"
+ }
+ }
+ },
+ "classification": {
+ "title": "Sınıflandırma Ayarları",
+ "semanticSearch": {
+ "title": "Anlamsal Arama",
+ "readTheDocumentation": "Dökümantasyonu Oku",
+ "reindexNow": {
+ "confirmButton": "Yeniden Dizinle",
+ "label": "Şimdi Yeniden Dizinle",
+ "desc": "Yeniden dizinleme bütün takip edilen nesneler için gömüleri tekrar oluşturur. Bu işlem arka planda çalışacak olsa da nesne sayısına göre işlemcinizi tamamen kullanabilir ve tamamlanması biraz zaman alabilir.",
+ "alreadyInProgress": "Yeniden dizinleme zaten devam ediyor.",
+ "confirmTitle": "Yenden Dizinlemeyi onayla",
+ "success": "Yeniden dizinleme başladı.",
+ "confirmDesc": "Takip edilen bütün objelerin gömülerini yeniden dizinlemek istediğinze emin misiniz? Bu işlem arka planda çalışacak fakat işlemcinizi tamamen kullanabilir ve tamamlanması biraz zaman alabilir. İlerlemeyi Keşfet sayfasından takip edebilirsiniz.",
+ "error": "Yeniden dizinlemeye başlanamadı: {{errorMessage}}"
+ },
+ "modelSize": {
+ "label": "Model boyutu",
+ "large": {
+ "title": "büyük",
+ "desc": "Büyük modeli kullandığınızda tam boyutlu Jina modeli kullanılacaktır ve uygunsa otomatik olarak grafik işlemcisinde çalıştırılacaktır."
+ },
+ "small": {
+ "desc": "Küçük modeli kullandığınızda modelin kuantize edilmiş bir sürümü kullanılır. Bu model daha az RAM kullanır, işlemcilerde daha hızlı çalışır ve gömü kalitesinde neredeyse hiç kalite farkı yoktur.",
+ "title": "küçük"
+ },
+ "desc": "Anlamsal arama için kullanılan dil modelinin büyüklüğü."
+ },
+ "desc": "Frigate'daki Anlamsal Arama özelliği inceleme öğelerinizde takip edilen nesneleri bizzat nesnenin resmi ile aratarak ya da otomatik olarak veya kullanıcı tarafından yazılmış bir metin açıklaması içinde aratarak bulmanıza imkan sağlar."
+ },
+ "faceRecognition": {
+ "modelSize": {
+ "large": {
+ "desc": "Büyük modeli kullandığınızda tam boyutlu ArcFace yüz gömü modeli kullanılacaktır ve uygunsa otomatik olarak grafik işlemcisinde çalıştırılacaktır.",
+ "title": "büyük"
+ },
+ "small": {
+ "title": "küçük",
+ "desc": "Küçük modeli kullandığınızda çoğu işlemcide verimli bir şekilde çalışan bir FaceNet yüz gömme modeli kullanılır."
+ },
+ "label": "Model Boyutu",
+ "desc": "Yüz tanıma için kullanılan modelin boyutu."
+ },
+ "title": "Yüz Tanıma",
+ "desc": "Yüz tanıma, tanınan insanlara isim vermenize olanak tanır ve bu yüzler tanındığında Frigate, kişinin adını alt etiket olarak ekler. Bu bilgi; kullanıcı arayüzü, filtreler ve bildirimlerde gösterilir.",
+ "readTheDocumentation": "Dökümantasyonu Oku"
+ },
+ "toast": {
+ "error": "Yapılandırma değişiklikleri kaydedilemedi: {{errorMessage}}",
+ "success": "Sınıflandırma ayarları kaydedildi. Değişikliklerinizi uygulamak için Frigate'i yeniden başlatın."
+ },
+ "licensePlateRecognition": {
+ "desc": "Frigate araç plakalarını tanıyabilir ve algılanan karakterleri otomatik olarak recognized_license_plate alanına veya belirli bir plaka için tanımladığınız bir takma ismi alt etiket olarak ilgili aracın tanımlanan nesnesine ekleyebilir. Bu sistem, garajınıza giren veya caddeden geçen araçların plakalarını okumak için kullanılabilir.",
+ "title": "Plaka Tanıma",
+ "readTheDocumentation": "Dökümantasyonu Oku"
+ },
+ "birdClassification": {
+ "title": "Kuş Sınıflandırma",
+ "desc": "Kuş Sınıflandırma özelliği, bilinen kuş türlerini kuantize edilmiş bir Tensorflow modeli kullanarak teşhis etmenizi sağlar. Model bir kuş türünü teşhis ettiğinde, Frigate, bu türün adını alt etiket olarak ekler. Bu bilgi; kullanıcı arayüzü, filtreler ve bildirimlerde gösterilir."
+ },
+ "restart_required": "Yeniden Başlatma Gerekli (Sınıflandırma ayarları değiştirildi)"
+ },
+ "cameraSetting": {
+ "camera": "Kamera",
+ "noCamera": "Kamera Yok"
+ },
+ "dialog": {
+ "unsavedChanges": {
+ "title": "Kaydedilmemiş değişiklikleriniz var.",
+ "desc": "Devam etmeden önce değişiklikleri kaydetmek ister misiniz?"
+ }
+ },
+ "camera": {
+ "title": "Kamera Ayarları",
+ "review": {
+ "title": "İncele",
+ "alerts": "Alarmlar ",
+ "detections": "Tespitler ",
+ "desc": "Bu kamera için uyarıları ve algılamaları geçici olarak etkinleştirin/devre dışı bırakın. Frigate yeniden başlatıldığında yapılandırmanızdaki tercihlere geri dönülür. Devre dışı bırakıldığında, yeni inceleme öğeleri oluşturulamaz. "
+ },
+ "reviewClassification": {
+ "readTheDocumentation": "Dökümantasyonu Oku",
+ "selectAlertsZones": "Alarmlar için alanları seçin",
+ "zoneObjectDetectionsTips": {
+ "regardlessOfZoneObjectDetectionsTips": "{{cameraName}} kamerasındaki kategorize edilmemiş bütün {{detectionsLabels}} nesneleri hangi alanda olduklarına bakılmaksızın Algılama olarak sınıflandırılacaktır.",
+ "notSelectDetections": "{{cameraName}} kamerasındaki {{zone}} alanı içinde algılanan ve Alarm olarak kategorize edilmeyen bütün {{detectionsLabels}} nesneleri hangi alanda olduklarına bakılmaksızın Algılama olarak sınıflandırılacaktır.",
+ "text": "{{cameraName}} kamerasındaki {{zone}} alanındaki kategorize edilmemiş bütün {{detectionsLabels}} nesneleri Algılama olarak sınıflandırılacaktır."
+ },
+ "zoneObjectAlertsTips": "{{cameraName}} kamerasındaki {{zone}} alanında algılanan bütün {{alertsLabels}} nesneleri Alarm olarak sınıflandırılacaktır.",
+ "desc": "Frigate tespit edilen İnceleme öğelerini Alarmlar ve Tespitler olarak kategorize eder. Varsayılan olarak bütün kişi ve araba nesneleri Alarm olarak sınıflandırılır. İnceleme öğelerinizin sınıflandırmasını tespit sınırlandırma sayfasında gerekli alanlar seçerek sınırlandırabilirsiniz.",
+ "objectDetectionsTips": "{{cameraName}} kamerasında kategorize edilmemiş bütün {{detectionsLabels}} nesneleri, hangi alanda olduklarına bakılmaksızın Algılama olarak sınıflandırılacaktır.",
+ "selectDetectionsZones": "Algılamalar için alanları seçin",
+ "title": "Tespit Sınıflandırmaları",
+ "noDefinedZones": "Bu kamera için tanımlanmış alan yok.",
+ "objectAlertsTips": "{{cameraName}} kamerasındaki bütün {{alertsLabels}} nesneleri Alarm olarak sınıflandırılacaktır.",
+ "limitDetections": "Algılamaları belirli alanlara sınırla",
+ "toast": {
+ "success": "İnceleme Sınıflandırma ayarları kaydedildi. Değişiklikleri uygulamak için Frigate'i yeniden başlatın."
+ },
+ "unsavedChanges": "{{camera}} için Kaydedilmemiş Sınıflandırma Ayarları"
+ },
+ "streams": {
+ "desc": "Frigate yeniden başlataılana kadar bir kamerayı devre dışı bırakın. Bir kameranın devre dışı bırakılması, Frigate'in bu kamerayı işlemesini tamamen durdurur. Algılama, kayıt ve hata ayıklama özellikleri kullanılamaz.Hareket Kutuları
Hareketin algılandığı alanlar kırmızı çerçeve ile gösterilecektir.
" + }, + "regions": { + "title": "Tespit Bölgeleri", + "desc": "Nesne algılayıcıya gönderilen tespit alanlarını göster", + "tips": "Bölge Kutuları
Görüntüdeki nesne dedektörüne gönderilen tespit alanları parlak yeşil renk çerçeve ile gösterilir.
" + }, + "objectShapeFilterDrawing": { + "title": "Nesne Şekil Filtresi Çizimi", + "desc": "Alan ve oran ayrıntılarını görüntülemek için görüntü üzerinde bir dikdörtgen çizin", + "score": "Puan", + "ratio": "Oran", + "area": "Alan", + "document": "Dökümantasyonu oku ", + "tips": "Alanını ve oranını göstermek için kamera görüntüsü üzerinde bir dikdörtgen çizmek için bu seçeneği etkinleştirin. Bu değerler daha sonra yapılandırmanızda nesne şekil filtresi parametrelerini ayarlamak için kullanılabilir." + }, + "debugging": "Hata Ayıklama", + "detectorDesc": "Frigate, kamera video akışınızdaki nesneleri algılamak için algılayıcılar ({{detectors}}) kullanır.", + "noObjects": "Nesne Yok", + "mask": { + "title": "Hareket maskeleri", + "desc": "Tanımlanmış hareket maskelerinin sınırlarını göster" + }, + "zones": { + "title": "Alanlar", + "desc": "Tanımlanmış alanların sınırlarını göster" + }, + "objectList": "Nesne Listesi", + "desc": "Hata ayıklama görünümü, izlenen nesnelerin ve istatistiklerinin gerçek zamanlı bir görünümünü gösterir. Nesne listesi algılanan nesnelerin zaman gecikmeli bir özetini gösterir." + }, + "users": { + "title": "Kullanıcılar", + "management": { + "title": "Kullanıcı Yönetimi", + "desc": "Bu Frigate kurulumundaki kullanıcı hesaplarını yönetin." + }, + "addUser": "Kullanıcı Ekle", + "toast": { + "success": { + "deleteUser": "{{user}} kullanıcısı başarıyla silindi", + "roleUpdated": "{{user}} için rol güncellendi", + "createUser": "{{user}} kullanıcısı başarıyla oluşturuldu", + "updatePassword": "Parola başarıyla güncellendi." + }, + "error": { + "setPasswordFailed": "Parola kaydedilemedi: {{errorMessage}}", + "createUserFailed": "Kullanıcı oluşturulamadı: {{errorMessage}}", + "deleteUserFailed": "Kullanıcı silinemedi: {{errorMessage}}", + "roleUpdateFailed": "Rol güncellenemedi: {{errorMessage}}" + } + }, + "table": { + "username": "Kullanıcı Adı", + "actions": "Eylemler", + "noUsers": "Kullanıcı bulunamadı.", + "changeRole": "Kullanıcı rolünü değiştir", + "deleteUser": "Kullanıcıyı sil", + "role": "Rol", + "password": "Parola" + }, + "dialog": { + "form": { + "user": { + "placeholder": "Kullanıcı adı girin", + "title": "Kullanıcı Adı", + "desc": "Yalnızca harfler, sayılar, noktalar ve alt çizgiler kullanabilirsiniz." + }, + "password": { + "title": "Parola", + "placeholder": "Parola girin", + "confirm": { + "title": "Parolayı Onayla", + "placeholder": "Parolayı Onayla" + }, + "strength": { + "title": "Parola kuvveti: ", + "weak": "Zayıf", + "medium": "Orta", + "strong": "Güçlü", + "veryStrong": "Çok Güçlü" + }, + "notMatch": "Parolalar eşleşmiyor", + "match": "Parolalar eşleşiyor" + }, + "newPassword": { + "placeholder": "Yeni parola girin", + "confirm": { + "placeholder": "Yeni parolayı tekrar girin" + }, + "title": "Yeni Parola" + }, + "usernameIsRequired": "Kullanıcı adı gereklidir", + "passwordIsRequired": "Parola gereklidir" + }, + "createUser": { + "title": "Yeni Kullanıcı Oluştur", + "desc": "Yeni bir kullanıcı hesabı ekleyin ve Frigate'deki erişim düzeylerini sınırlandırmak için bir rol belirtin.", + "usernameOnlyInclude": "Kullanıcı adı yalnızca harfler, sayılar, nokta veya alt çizgi (_) içerebilir", + "confirmPassword": "Lütfen parolanızı onaylayın" + }, + "deleteUser": { + "title": "Kullanıcıyı Sil", + "warn": "{{username}}'i silmek istediğinizden emin misiniz?", + "desc": "Bu işlem geri alınamaz. Bu, kullanıcı hesabını kalıcı olarak silecek ve tüm ilişkili verileri kaldıracaktır." + }, + "passwordSetting": { + "updatePassword": "{{username}} için Parola Belirle", + "setPassword": "Parola Belirle", + "desc": "Bu hesabı güvenli hale getirmek güçlü bir parola belirleyin.", + "cannotBeEmpty": "Parola boş olamaz", + "doNotMatch": "Parolalar eşleşmiyor" + }, + "changeRole": { + "title": "Kullanıcı Rolünü Değiştir", + "desc": "{{username}} için izinleri güncelle", + "roleInfo": { + "adminDesc": "Tüm özelliklere tam erişim.", + "intro": "Bu kullanıcı için bir rol seçin:", + "admin": "Yönetici", + "viewer": "Görüntüleyici", + "viewerDesc": "Yalnızca Canlı, İncele, Keşfet ve Dışa Aktar'a girebilir." + }, + "select": "Bir rol seçin" + } + }, + "updatePassword": "Parola Belirle" + }, + "notification": { + "title": "Bildirimler", + "notificationSettings": { + "title": "Bildirim Ayarları", + "documentation": "Dökümantasyonu Oku", + "desc": "Frigate, tarayıcıdan veya web uygulaması (PWA) olarak kullanıyor olmanız fark etmeksizin, tarayıcınızın bildirimler özelliği aracılığıyla bildirimler gönderebilir." + }, + "notificationUnavailable": { + "title": "Bildirimler Kullanılamıyor", + "documentation": "Dökümantasyonu Oku", + "desc": "Web push bildirimleri güvenli bağlantı (https://…) gerektirir. Bu tarayıcınızın bir sınırlandırmasıdır. Bildirimleri kullanmak için Frigate arayüzüne HTTPS ile erişin."
+ },
+ "globalSettings": {
+ "title": "Genel Ayarlar",
+ "desc": "Kayıtlı tüm cihazlarda belirli kameralar için bildirimleri geçici olarak askıya alın."
+ },
+ "email": {
+ "title": "E-posta",
+ "desc": "Geçerli bir e-posta adresi gereklidir ve push hizmetiyle ilgili herhangi bir sorun olması durumunda sizi bilgilendirmek için kullanılacaktır.",
+ "placeholder": "örn. ornek@eposta.com"
+ },
+ "cameras": {
+ "desc": "Bildirimlerin etkinleştirileceği kameraları seçin.",
+ "title": "Kameralar",
+ "noCameras": "Kullanılabilir kamera yok"
+ },
+ "deviceSpecific": "Cihaza Özel Ayarlar",
+ "suspended": "Bildirimler askıya alındı {{time}}",
+ "suspendTime": {
+ "1hour": "1 saat süreyle askıya al",
+ "12hours": "12 saat süreyle askıya al",
+ "24hours": "24 saat süreyle askıya al",
+ "30minutes": "30 dakika süreyle askıya al",
+ "untilRestart": "Yeniden başlatılana kadar askıya al",
+ "10minutes": "10 dakika süreyle askıya al",
+ "5minutes": "5 dakika süreyle askıya al",
+ "suspend": "Askıya Al"
+ },
+ "toast": {
+ "success": {
+ "registered": "Bildirimlere başarıyla kaydolundu. Herhangi bir bildirimin (test bildirimi dahil) gönderilebilmesi için Frigate'in yeniden başlatılması gereklidir.",
+ "settingSaved": "Bildirim ayarları kaydedildi."
+ },
+ "error": {
+ "registerFailed": "Bildirimlere kaydolunurken hata oluştu."
+ }
+ },
+ "registerDevice": "Bu Cihazı Kaydet",
+ "sendTestNotification": "Bir test bildirimi gönder",
+ "cancelSuspension": "Askıya Almayı İptal Et",
+ "unregisterDevice": "Bu Cihazın Kaydını Sil",
+ "active": "Bildirimler Aktif",
+ "unsavedChanges": "Kaydedilmemiş bildirim ayar değişiklikleri",
+ "unsavedRegistrations": "Kaydedilmemiş bildirim ayar değişiklikleri"
+ },
+ "frigatePlus": {
+ "title": "Frigate+ Ayarları",
+ "apiKey": {
+ "title": "Frigate+ API Anahtarı",
+ "validated": "Frigate+ API anahtarınız doğrulandı",
+ "plusLink": "Frigate+ hakkında daha fazla bilgi edinin",
+ "notValidated": "Frigate+ API anahtarı bulunamadı veya doğrulanamadı",
+ "desc": "Frigate+ API anahtarı, Frigate+ hizmetiyle entegrasyonu sağlar."
+ },
+ "snapshotConfig": {
+ "title": "Fotoğraf Yapılandırması",
+ "documentation": "Dökümantasyonu oku",
+ "table": {
+ "camera": "Kamera",
+ "snapshots": "Fotoğraflar",
+ "cleanCopySnapshots": "clean_copy Fotoğraflar"
+ },
+ "desc": "Frigate+'a göndermek için yapılandırmanızda hem fotoğrafların hem de clean_copy fotoğraflarının etkinleştirilmesi gerekir.",
+ "cleanCopyWarning": "Bazı kameralarda fotoğraflar etkin ancak temiz kopya özelliği devre dışı. Bu kameralardan Frigate+'a görüntü gönderebilmek için fotoğraf(snapshots) yapılandırmanızda clean_copy'yi etkinleştirmeniz gerekiyor."
+ },
+ "modelInfo": {
+ "error": "Model bilgileri yüklenemedi",
+ "loadingAvailableModels": "Kullanılabilir modeller yükleniyor…",
+ "loading": "Model bilgileri yükleniyor…",
+ "modelType": "Model Türü",
+ "dimensions": "Boyutlar",
+ "availableModels": "Kullanılabilir Modeller",
+ "modelSelect": "Frigate+'daki kullanılabilir modelleriniz buradan seçilebilir. Yalnızca mevcut algılayıcı yapılandırmanızla uyumlu modellerin seçilebileceğini unutmayın.",
+ "baseModel": "Temel Model",
+ "title": "Model Bilgileri",
+ "trainDate": "Eğitim Tarihi",
+ "supportedDetectors": "Desteklenen Algılayıcılar",
+ "cameras": "Kameralar",
+ "plusModelType": {
+ "userModel": "İnce Ayarlı",
+ "baseModel": "Baz Model"
+ }
+ },
+ "toast": {
+ "success": "Frigate+ ayarları kaydedildi. Değişiklikleri uygulamak için Frigate'i yeniden başlatın.",
+ "error": "Yapılandırma değişiklikleri kaydedilemedi: {{errorMessage}}"
+ },
+ "restart_required": "Yeniden Başlatma Gerekli (Frigate+ modeli değiştirildi)",
+ "unsavedChanges": "Kaydedilmemiş Frigate+ ayar değişiklikleri"
+ },
+ "enrichments": {
+ "birdClassification": {
+ "title": "Kuş Sınıflandırma",
+ "desc": "Kuş sınıflandırma, kuantize edilmiş bir Tensorflow modeli aracılığıyla bilinen kuş türlerini tespit eder. Bilinen bir kuş türü tespit edildiğinde, bu türün bilinen adı bir alt etiket olarak ilgili öğeye iliştirilir. Bu bilgi; arayüzde ve bildirimlerde gösterilir ve filtre olarak kullanılabilir."
+ },
+ "unsavedChanges": "Değişitirilen zenginleştirme ayarları kaydedilmedi",
+ "semanticSearch": {
+ "reindexNow": {
+ "desc": "Yeniden dizinleme işlemi, bütün takip edilen nesneler için gömüleri tekrar üretecektir. Bu işlem arka planda gerçekleşir, fakat nesne sayısına bağlı olarak çok işlemci kullanabilir veya tamamlanması makul bir süre alabilir.",
+ "label": "Şimdi Yeniden Dizinle",
+ "confirmTitle": "Yeniden Dizinlemeyi Onayla",
+ "confirmDesc": "Bütün takip edilen nesnelerin gömülerini yeniden dizinlemek istediğinize emin misiniz? Bu işlem arka planda gerçekleşecektir fakat nesne sayısına bağlı olarak çok işlemci kullanabilir ve biraz süre alabilir. İlerlemesini Keşfet sayfasından görüntüleyebilirsiniz.",
+ "confirmButton": "Yeniden Dizinle",
+ "success": "Yeniden dizinleme başarıyla başlatıldı.",
+ "alreadyInProgress": "Yeniden dizinleme zaten sürüyor.",
+ "error": "Yeniden dizinleme başlatılamadı: {{errorMessage}}"
+ },
+ "title": "Anlamsal Arama",
+ "desc": "Anlamsal arama, takip edilen nesneleri; ya görselin kendisini kullanarak ya da görsel öğelere ait açıklamalar üzerinden (kullanıcı tarafından yazılmış ya da otomatik oluşturulmuş) metinle arama yaparak bulmanıza olanak tanır.",
+ "readTheDocumentation": "Dökümantasyonu Oku",
+ "modelSize": {
+ "label": "Model Boyutu",
+ "desc": "Anlamsal aramadaki gömüler için kullanılan modelin büyüklüğü.",
+ "small": {
+ "title": "küçük",
+ "desc": "Modelin küçük sürümü, gömme kalitesinde fark edilmesi zor bir değişikliğe karşılık daha az RAM kullanan ve CPU’da daha hızlı çalışan kuantize bir model kullanır."
+ },
+ "large": {
+ "title": "büyük",
+ "desc": "Modelin büyük sürümü tam boyutlu Jina modelini kullanır ve uygunsa GPU'da çalışacaktır."
+ }
+ }
+ },
+ "title": "Zenginleştirme Ayarları",
+ "faceRecognition": {
+ "title": "Yüz Tanıma",
+ "desc": "Yüz tanıma, tespit edilen insanların yüzleri tanındığında onlara isim atamanıza olanak sağlar ve bu isim bilgisi alt etiket olarak iliştirilir. Bu bilgi; arayüzde ve bildirimlerde gösterilir ve filtre olarak kullanılabilir.",
+ "readTheDocumentation": "Dökümantasyonu Oku",
+ "modelSize": {
+ "label": "Model Boyutu",
+ "desc": "Yüz tanıma için kullanılan modelin büyüklüğü.",
+ "small": {
+ "title": "küçük",
+ "desc": "Modelin küçük sürümü olarak çoğu işlemcide verimli çalışabilen bir FaceNet yüz gömü modeli kullanılır."
+ },
+ "large": {
+ "title": "büyük",
+ "desc": "Modelin büyük sürümü olarak ArcFace yüz gömü modeli kullanılır ve uygunsa GPU'da çalışır."
+ }
+ }
+ },
+ "licensePlateRecognition": {
+ "title": "Plaka Tanıma",
+ "desc": "Frigate tespit edilen araçların tescil plakalarındaki karakterleri okuyabilir ve ilgili araba türündeki nesnenin recognized_license_plate bölümüne, varsa bilindik bir adını da sub_label bölümüne ekleyebilir. Bu özelliği bir yoldan geçen yahut evin önüne park eden araçların plakalarını okumak için kullanabilirsiniz.",
+ "readTheDocumentation": "Dökümantasyonu Oku"
+ },
+ "restart_required": "Yeniden başlatma gerekli (zenginleştirme ayarları değişti)",
+ "toast": {
+ "success": "Zenginleştirme ayarları kaydedildi. Değişiklikleri uygulamak için Frigate'i yeniden başlatın.",
+ "error": "Yapılandırma değişiklikleri kaydedilemedi: {{errorMessage}}"
+ }
+ }
+}
diff --git a/web/public/locales/tr/views/system.json b/web/public/locales/tr/views/system.json
new file mode 100644
index 000000000..9124e3e08
--- /dev/null
+++ b/web/public/locales/tr/views/system.json
@@ -0,0 +1,180 @@
+{
+ "documentTitle": {
+ "logs": {
+ "frigate": "Frigate Günlükleri - Frigate",
+ "go2rtc": "Go2RTC Günlükleri - Frigate",
+ "nginx": "Nginx Günlükleri - Frigate"
+ },
+ "general": "Genel İstatistikler - Frigate",
+ "storage": "Depolama İstatistikleri - Frigate",
+ "cameras": "Kamera İstatistikleri - Frigate",
+ "enrichments": "Zenginleştirme İstatistikleri - Frigate"
+ },
+ "metrics": "Sistem metrikleri",
+ "general": {
+ "hardwareInfo": {
+ "gpuDecoder": "GPU Kod Çözücü",
+ "gpuInfo": {
+ "nvidiaSMIOutput": {
+ "name": "İsim: {{name}}",
+ "driver": "Sürücü: {{driver}}",
+ "cudaComputerCapability": "CUDA Hesaplama Yeteneği: {{cuda_compute}}",
+ "vbios": "VBios Bilgisi: {{vbios}}",
+ "title": "Nvidia SMI Çıktısı"
+ },
+ "toast": {
+ "success": "GPU bilgisi panoya kopyalandı"
+ },
+ "vainfoOutput": {
+ "processError": "İşlem Hatası:",
+ "returnCode": "Dönüt Kodu: {{code}}",
+ "processOutput": "İşlem Çıktısı:",
+ "title": "Vainfo çıktısı"
+ },
+ "closeInfo": {
+ "label": "GPU bilgisini kapat"
+ },
+ "copyInfo": {
+ "label": "GPU bilgisini kopyala"
+ }
+ },
+ "gpuUsage": "GPU Kullanımı",
+ "gpuMemory": "GPU Belleği",
+ "gpuEncoder": "GPU Kodlayıcı",
+ "title": "Donanım Bilgisi",
+ "npuUsage": "NPU Kullanımı",
+ "npuMemory": "NPU Bellek Kullanımı"
+ },
+ "otherProcesses": {
+ "title": "Diğer İşlemler",
+ "processCpuUsage": "İşlem CPU Kullanımı",
+ "processMemoryUsage": "İşlem Bellek Kullanımı"
+ },
+ "detector": {
+ "title": "Algılayıcılar",
+ "inferenceSpeed": "Algılayıcı Çıkarım Hızı",
+ "memoryUsage": "Algılayıcı Bellek Kullanımı",
+ "cpuUsage": "Algılayıcı İşlemci Kullanımı",
+ "temperature": "Algılayıcı Sıcaklığı"
+ },
+ "title": "Genel"
+ },
+ "storage": {
+ "title": "Depolama",
+ "overview": "Genel",
+ "recordings": {
+ "title": "Kayıtlar",
+ "earliestRecording": "Mevcut en erken kayıt:",
+ "tips": "Burada gösterilen değer, Frigate’in veritabanına göre kayıtların diskinizde kullandığı toplam alanı ifade eder. Frigate, diskinizdeki tüm dosyaların alan kullanımını takip etmez."
+ },
+ "cameraStorage": {
+ "title": "Kamera Depolaması",
+ "camera": "Kamera",
+ "unused": {
+ "tips": "Eğer diskinizde Frigate'in kayıtları dışında dosyalar varsa bu değer diskinizdeki boş alanı doğru olarak göstermeyebilir. Frigate kendi kayıtları dışındaki dosyaların disk kullanımını takip etmez.",
+ "title": "Kullanılmayan"
+ },
+ "percentageOfTotalUsed": "Toplam Yüzde",
+ "storageUsed": "Depolama",
+ "bandwidth": "Saatlik Veri Kullanımı",
+ "unusedStorageInformation": "Kullanılmayan Depolama Bilgisi"
+ }
+ },
+ "cameras": {
+ "info": {
+ "streamDataFromFFPROBE": "Yayın bilgisi ffprobe ile edinilmiştir.",
+ "video": "Video:",
+ "codec": "Kodlama:",
+ "fps": "Kare Hızı:",
+ "resolution": "Çözünürlük:",
+ "unknown": "Bilinmeyen",
+ "stream": "Yayın {{idx}}",
+ "tips": {
+ "title": "Kamera Detayları"
+ },
+ "fetching": "Kamera Bilgileri Alınıyor",
+ "cameraProbeInfo": "{{camera}} Kamera Detayları",
+ "error": "Hata: {{error}}",
+ "audio": "Ses:",
+ "aspectRatio": "en boy oranı"
+ },
+ "framesAndDetections": "Kare / Tespit",
+ "label": {
+ "camera": "kamera",
+ "detect": "tespit",
+ "ffmpeg": "FFmpeg",
+ "capture": "kayıt",
+ "skipped": "atlanan",
+ "overallDetectionsPerSecond": "toplam tespit/sn",
+ "overallFramesPerSecond": "toplam kare/sn",
+ "cameraFramesPerSecond": "{{camName}} kare/sn",
+ "overallSkippedDetectionsPerSecond": "toplam atlanan tespit/sn",
+ "cameraCapture": "{{camName}} kayıt",
+ "cameraDetect": "{{camName}} tespit",
+ "cameraDetectionsPerSecond": "{{camName}} tespit/sn",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} atlanan tespit/sn",
+ "cameraFfmpeg": "{{camName}} FFmpeg"
+ },
+ "toast": {
+ "success": {
+ "copyToClipboard": "Detaylar panoya kopyalandı."
+ },
+ "error": {
+ "unableToProbeCamera": "Kamera detayları alınamadı: {{errorMessage}}"
+ }
+ },
+ "title": "Kameralar",
+ "overview": "Genel"
+ },
+ "lastRefreshed": "Son güncelleme: ",
+ "stats": {
+ "ffmpegHighCpuUsage": "{{camera}} FFmpeg'te yüksek miktarda CPU kullanıyor (%{{ffmpegAvg}})",
+ "reindexingEmbeddings": "Gömüler yeniden dizinleniyor (%{{processed}} tamamlandı)",
+ "detectHighCpuUsage": "{{camera}} tespitte yüksek miktarda CPU kullanıyor (%{{detectAvg}})",
+ "healthy": "Sistem sağlıklı",
+ "detectIsVerySlow": "{{detect}} çok yavaş çalışıyor ({{speed}} ms)",
+ "cameraIsOffline": "{{camera}} çevrimdışı",
+ "detectIsSlow": "{{detect}} yavaş çalışıyor ({{speed}} ms)"
+ },
+ "enrichments": {
+ "embeddings": {
+ "image_embedding_speed": "Resim Gömü Hızı",
+ "text_embedding_speed": "Metin Gömü Hızı",
+ "plate_recognition_speed": "Plaka Tanıma Hızı",
+ "face_embedding_speed": "Yüz Gömü Hızı",
+ "image_embedding": "Resim Gömüleme",
+ "text_embedding": "Metin Gömülüeme",
+ "face_recognition": "Yüz Tanıma",
+ "plate_recognition": "Plaka Tanıma",
+ "face_recognition_speed": "Yüz Tanıma Hızı",
+ "yolov9_plate_detection_speed": "YOLOv9 Plaka Tanıma Hızı",
+ "yolov9_plate_detection": "YOLOv9 Plaka Tanıma"
+ },
+ "infPerSecond": "Saniye Başına Çıkarım",
+ "title": "Zenginleştirmeler"
+ },
+ "logs": {
+ "download": {
+ "label": "Günlükleri İndir"
+ },
+ "type": {
+ "message": "Mesaj",
+ "tag": "Etiket",
+ "timestamp": "Zaman Damgası",
+ "label": "Tür"
+ },
+ "copy": {
+ "error": "Günlükler panoya kopyalanamadı",
+ "label": "Panoya Kopyala",
+ "success": "Günlükler panoya kopyalandı"
+ },
+ "tips": "Günlükler sunucudan yansıtılıyor",
+ "toast": {
+ "error": {
+ "whileStreamingLogs": "Günlükler yansıtılırken hata: {{errorMessage}}",
+ "fetchingLogsFailed": "Günlükler alınırken hata: {{errorMessage}}"
+ }
+ }
+ },
+ "title": "Sistem"
+}
diff --git a/web/public/locales/uk/audio.json b/web/public/locales/uk/audio.json
new file mode 100644
index 000000000..e5b27820a
--- /dev/null
+++ b/web/public/locales/uk/audio.json
@@ -0,0 +1,429 @@
+{
+ "child_singing": "Дитячий спів",
+ "breathing": "Дихання",
+ "cough": "Кашель",
+ "throat_clearing": "Прозорий очищення",
+ "mantra": "Мантра",
+ "synthetic_singing": "Синтетичний спів",
+ "whimper_dog": "Собаче скиглення",
+ "cat": "Кіт",
+ "cowbell": "Коров'ячий здвіночок",
+ "whispering": "Шепіт",
+ "run": "Біг",
+ "choir": "Хор",
+ "chewing": "Жування",
+ "pets": "Домашні улюбленці",
+ "dog": "Собака",
+ "bark": "Лай",
+ "meow": "Котяче нявчання",
+ "horse": "Кінь",
+ "moo": "Мичання",
+ "goat": "Коза",
+ "sheep": "Вівця",
+ "chicken": "Курка",
+ "speech": "Мо́влення",
+ "idling": "Холостий хід",
+ "railroad_car": "Залізничний вагон",
+ "alarm": "Сигналізація",
+ "fire_alarm": "Пожежна сигналізація",
+ "flute": "Флейта",
+ "musical_instrument": "Музичний інструмент",
+ "buzz": "Дзижчання",
+ "fly": "Муха",
+ "vocal_music": "Вокальна музика",
+ "motorcycle": "Мотоцикл",
+ "rustling_leaves": "Шелест листя",
+ "crackle": "Потріскування",
+ "thunder": "Грім",
+ "rock_and_roll": "Рок-н-рол",
+ "theme_music": "Тематична музика",
+ "exciting_music": "Енергійна музика",
+ "water": "Вода",
+ "violin": "Скрипка",
+ "tubular_bells": "Трубчасті дзвони",
+ "christmas_music": "Різдвяна музика",
+ "house_music": "Хауз",
+ "fire": "Вогонь",
+ "tapping": "Постукування",
+ "scratching": "Скретчінг",
+ "drum_kit": "Ударна установка",
+ "engine": "Двигун",
+ "light_engine": "Легкий двигун",
+ "swing_music": "Свінг",
+ "opera": "Опера",
+ "electronic_dance_music": "Електронна танцювальна музика",
+ "dance_music": "Танцювальна музика",
+ "thunderstorm": "Гроза",
+ "waves": "Хвилі",
+ "trombone": "Тромбон",
+ "music_of_asia": "Азіатська музика",
+ "tools": "Iнструменти",
+ "wind_chime": "Музика вітру",
+ "singing_bowl": "Співоча чаша",
+ "boat": "Човен",
+ "sailboat": "Вітрильник",
+ "rowboat": "Весловий човен",
+ "power_windows": "Електросклопідйомники",
+ "cutlery": "Столові прибори",
+ "mechanical_fan": "Механічний вентилятор",
+ "traffic_noise": "Дорожній шум",
+ "aircraft_engine": "Двигун повітряного судна",
+ "dental_drill's_drill": "Стоматологічна бормашина",
+ "door": "Двері",
+ "accelerating": "Прискорення",
+ "siren": "Сирена",
+ "typewriter": "Друкарська машинка",
+ "computer_keyboard": "Комп'ютерна клавіатура",
+ "smoke_detector": "Датчик диму",
+ "hammer": "Молот",
+ "gunshot": "Постріл",
+ "machine_gun": "Автомат",
+ "fireworks": "Феєрверки",
+ "firecracker": "Петарда",
+ "heartbeat": "Серцебиття",
+ "heart_murmur": "Серцевий шум",
+ "footsteps": "Кроки",
+ "burping": "Відрижка",
+ "hiccup": "Ікання",
+ "fart": "Пукання",
+ "finger_snapping": "Клацати пальцями",
+ "applause": "Оплески",
+ "chatter": "Балаканина",
+ "animal": "Тварина",
+ "yip": "Гавкання",
+ "babbling": "Бурмотіння",
+ "yell": "Кричати",
+ "bow_wow": "Гав гав",
+ "growling": "Ревіння",
+ "purr": "Муркотіти",
+ "hiss": "Шипіння",
+ "clip_clop": "Цокання",
+ "neigh": "іржання",
+ "oink": "Рохкання",
+ "bleat": "Мекання",
+ "cluck": "Кудкудакання",
+ "cock_a_doodle_doo": "Кукурікання",
+ "honk": "Гелготання",
+ "roar": "Гуркіт",
+ "bird": "Птах",
+ "chirp": "Цвірінькання",
+ "pigeon": "Голуб",
+ "coo": "Воркування",
+ "crow": "Ворона",
+ "caw": "Каркання",
+ "owl": "Сова",
+ "hoot": "Ухання",
+ "flapping_wings": "Ляскання крил",
+ "dogs": "Собаки",
+ "rats": "Щури",
+ "mouse": "Миш",
+ "patter": "Шерех",
+ "insect": "Комара",
+ "cricket": "Цвіркун",
+ "mosquito": "Комар",
+ "frog": "Жаба",
+ "croak": "Квакання",
+ "snake": "Змія",
+ "rattle": "Тріск",
+ "whale_vocalization": "Співання кита",
+ "music": "Музика",
+ "guitar": "Гітара",
+ "electric_guitar": "Електрогітара",
+ "bass_guitar": "Бас-гітара",
+ "acoustic_guitar": "Акустична гітара",
+ "strum": "Звук струн",
+ "keyboard": "Клавіатура",
+ "piano": "Піаніно",
+ "electric_piano": "Електропіаніно",
+ "organ": "Орган",
+ "electronic_organ": "Електроорган",
+ "synthesizer": "Синтезатор",
+ "percussion": "Ударні інструменти",
+ "drum": "Барабан",
+ "snare_drum": "Малий барабан",
+ "drum_roll": "Барабанний дріб",
+ "bass_drum": "Бас-барабан",
+ "tambourine": "Бубон",
+ "gong": "Гонг",
+ "glockenspiel": "Дзвіночки",
+ "orchestra": "Оркестр",
+ "double_bass": "Контрабас",
+ "wind_instrument": "Духовий інструмент",
+ "saxophone": "Саксофон",
+ "clarinet": "Кларнет",
+ "harp": "Арфа",
+ "bell": "Дзвін",
+ "church_bell": "Церковний дзвін",
+ "jingle_bell": "Бубонець",
+ "bicycle_bell": "Велосипедний дзвінок",
+ "tuning_fork": "Камертон",
+ "chime": "Дзвіночок",
+ "harmonica": "Губна гармоніка",
+ "accordion": "Акордеон",
+ "bagpipes": "Волинка",
+ "theremin": "Терменвокс",
+ "pop_music": "Поп-музика",
+ "hip_hop_music": "Хіп-хоп музика",
+ "beatboxing": "Бітбоксинг",
+ "rock_music": "Рок-музика",
+ "punk_rock": "Панк-рок",
+ "psychedelic_rock": "Психоделічний рок",
+ "rhythm_and_blues": "Ритм-н-блюз",
+ "country": "Кантрі",
+ "funk": "Фанк",
+ "folk_music": "Фолк-музика",
+ "jazz": "Джаз",
+ "disco": "Диско",
+ "classical_music": "Класична музика",
+ "electronic_music": "Електронна музика",
+ "techno": "Техно",
+ "dubstep": "Дабстеп",
+ "drum_and_bass": "Драм-н-бейс",
+ "electronica": "Електроніка",
+ "ambient_music": "Ембієнт",
+ "trance_music": "Транс музика",
+ "music_of_latin_america": "Латиноамериканська музика",
+ "flamenco": "Фламенко",
+ "blues": "Блюз",
+ "music_for_children": "Дитяча музика",
+ "a_capella": "А капела",
+ "music_of_africa": "Африканська музика",
+ "afrobeat": "Афробіт",
+ "christian_music": "Християнська музика",
+ "gospel_music": "Госпел",
+ "carnatic_music": "Карнатична музика",
+ "ska": "Ска-музика",
+ "traditional_music": "Традиційна музика",
+ "independent_music": "Iнді музика",
+ "song": "Пісня",
+ "background_music": "Фонова музика",
+ "jingle": "Джингл",
+ "soundtrack_music": "Саундтрек",
+ "lullaby": "Колискова",
+ "video_game_music": "Музика з відеоігор",
+ "wedding_music": "Весільна музика",
+ "happy_music": "Весела музика",
+ "sad_music": "Сумна музика",
+ "tender_music": "Ніжна музика",
+ "angry_music": "Сердита музика",
+ "scary_music": "Моторошна музика",
+ "wind": "Вітер",
+ "wind_noise": "Шум вітру",
+ "rain": "Дощ",
+ "raindrop": "Краплі дощу",
+ "rain_on_surface": "Дощ на поверхні",
+ "stream": "Потік",
+ "waterfall": "Водоспад",
+ "ocean": "Океан",
+ "steam": "Пар",
+ "gurgling": "Дзюрчання",
+ "vehicle": "Транспорт",
+ "motorboat": "Моторний човен",
+ "ship": "Корабель",
+ "motor_vehicle": "Моторний транспорт",
+ "car": "Автомобіль",
+ "toot": "Гудок",
+ "car_alarm": "Автосигналізація",
+ "skidding": "Занос",
+ "tire_squeal": "Вереск шін",
+ "car_passing_by": "Проїжджаюча машина",
+ "race_car": "Гоночний автомобіль",
+ "truck": "Вантажівка",
+ "air_brake": "Пневматичне гальмо",
+ "air_horn": "Пневматичні гудок",
+ "reversing_beeps": "Сигнал заднього ходу",
+ "ice_cream_truck": "Вантажівки з морозивом",
+ "bus": "Автобус",
+ "emergency_vehicle": "Транспорт екстрених служб",
+ "police_car": "Поліцейський автомобіль",
+ "ambulance": "Швидка допомога",
+ "fire_engine": "Пожежна машина",
+ "rail_transport": "Рейковий транспорт",
+ "train": "Поїзд",
+ "train_whistle": "Свист поїзда",
+ "train_horn": "Гудок поїзда",
+ "train_wheels_squealing": "Вереск колес поїзда",
+ "subway": "Метро",
+ "aircraft": "Повітряне судно",
+ "jet_engine": "Реактивний двигун",
+ "propeller": "Пропелер",
+ "helicopter": "Вертоліт",
+ "fixed-wing_aircraft": "Літак з нерухомим крилом",
+ "bicycle": "Велосипед",
+ "skateboard": "Скейтборд",
+ "lawn_mower": "Газонокосарка",
+ "chainsaw": "Ланцюгова пила",
+ "medium_engine": "Середні двигун",
+ "heavy_engine": "Важкий двигун",
+ "engine_knocking": "Детонація у двигуні",
+ "engine_starting": "Запуск двигуна",
+ "doorbell": "Дверний дзвінок",
+ "ding-dong": "Дін-дон",
+ "sliding_door": "Розсувні двері",
+ "slam": "Бавовна",
+ "knock": "Стукіт",
+ "tap": "Невеличкий стук",
+ "squeak": "Скрип",
+ "cupboard_open_or_close": "Відкриття або закриття шафи",
+ "drawer_open_or_close": "Відкриття або закриття коробки",
+ "dishes": "Тарілки",
+ "chopping": "Нарізування",
+ "frying": "Смаження",
+ "microwave_oven": "Мікрохвильова піч",
+ "blender": "Блендер",
+ "water_tap": "Водопровідний кран",
+ "sink": "Раковина",
+ "bathtub": "Ванна",
+ "hair_dryer": "Фен",
+ "toilet_flush": "Злив унітазу",
+ "toothbrush": "Зубна щітка",
+ "electric_toothbrush": "Електрична зубна щітка",
+ "vacuum_cleaner": "Пилосос",
+ "zipper": "Блискавки на одязі",
+ "keys_jangling": "Брязкання ключів",
+ "coin": "Монета",
+ "scissors": "Ножиці",
+ "electric_shaver": "Електробритва",
+ "shuffling_cards": "Тасуванні карт",
+ "typing": "Друкування",
+ "writing": "Написання",
+ "telephone": "Телефон",
+ "telephone_bell_ringing": "Телефонний дзвінок",
+ "ringtone": "Рінгтон",
+ "telephone_dialing": "Набір телефонного номеру",
+ "dial_tone": "Телефонний гудок",
+ "busy_signal": "Сигнал зайнято",
+ "alarm_clock": "Будильник",
+ "civil_defense_siren": "Сирени громадянської оборони",
+ "buzzer": "Зумер",
+ "foghorn": "Туманний горн",
+ "whistle": "Свисток",
+ "steam_whistle": "Парової свисток",
+ "mechanisms": "Механізми",
+ "ratchet": "Тріскачка",
+ "clock": "Годинник",
+ "tick": "Тік",
+ "tick-tock": "Тік-так",
+ "gears": "Шестерні",
+ "pulleys": "Шківи",
+ "sewing_machine": "Швейна машинка",
+ "air_conditioning": "Кондиціонер",
+ "cash_register": "Каса",
+ "printer": "Принтер",
+ "camera": "Камера",
+ "single-lens_reflex_camera": "Дзеркальна камера",
+ "jackhammer": "Відбійний молоток",
+ "sawing": "Розпилювання",
+ "filing": "Звучання напилку",
+ "sanding": "Шліфування",
+ "power_tool": "Електроінструмент",
+ "drill": "Дриль",
+ "explosion": "Вибух",
+ "fusillade": "Збройна черга",
+ "artillery_fire": "Артилерійський вогонь",
+ "cap_gun": "Iграшковий пістолет",
+ "burst": "Черга пострілів",
+ "eruption": "Виверження",
+ "boom": "Бум",
+ "wood": "Деревина",
+ "chop": "Рубання",
+ "splinter": "Тріска",
+ "crack": "Тріщина",
+ "glass": "Скло",
+ "chink": "Дзенькіт",
+ "shatter": "Розбиття",
+ "silence": "Тиша",
+ "sound_effect": "Звуковий ефект",
+ "environmental_noise": "Шум навколишнього середовища",
+ "static": "Статичний шум",
+ "white_noise": "Білий шум",
+ "pink_noise": "Рожевий шум",
+ "television": "Телебачення",
+ "radio": "Радіо",
+ "field_recording": "Польова запись",
+ "scream": "Крик",
+ "laughter": "Сміх",
+ "bellow": "Рев",
+ "singing": "Спів",
+ "whoop": "Вигук",
+ "snicker": "хіхікання",
+ "crying": "Плач",
+ "sigh": "Зітхання",
+ "yodeling": "Співати йодлем",
+ "chant": "Скандування",
+ "grunt": "Гарчання",
+ "wheeze": "Хрипіти",
+ "gasp": "Aхнути",
+ "snort": "Пирхання",
+ "sniff": "Понюхати",
+ "shuffle": "Перетасувати",
+ "biting": "Кусання",
+ "gargling": "Полоскання",
+ "stomach_rumble": "Шлунок бурчати",
+ "hands": "Руки",
+ "clapping": "Плескання",
+ "cheering": "Аплодувати",
+ "crowd": "Натовп",
+ "children_playing": "Діти граються",
+ "howl": "Виття",
+ "rapping": "Стукiт",
+ "humming": "Гудіння",
+ "caterwaul": "Нявкання",
+ "livestock": "Тваринництво",
+ "cattle": "Велика рогата худоба",
+ "pig": "Свиня",
+ "fowl": "Птиця",
+ "turkey": "Iндичка",
+ "gobble": "Гелґотіння",
+ "duck": "Качка",
+ "quack": "Крякання",
+ "goose": "Гусак",
+ "wild_animals": "Дикі тварини",
+ "roaring_cats": "Ревіння котів",
+ "squawk": "Пташиний крик",
+ "plucked_string_instrument": "Щипковий струнний інструмент",
+ "steel_guitar": "Слайд-гітара",
+ "banjo": "Банджо",
+ "sitar": "Ситара",
+ "mandolin": "Мандоліна",
+ "zither": "Цитра",
+ "ukulele": "Укулеле",
+ "hammond_organ": "Орган Хаммонда",
+ "sampler": "Семплер",
+ "harpsichord": "Клавесин",
+ "drum_machine": "Драм-машина",
+ "rimshot": "Удар по ободу",
+ "timpani": "Тимпані",
+ "tabla": "Табла",
+ "cymbal": "Тарілка",
+ "hi_hat": "Хай-хет",
+ "wood_block": "Дерев'яний брусок",
+ "maraca": "Маракас",
+ "mallet_percussion": "Малет-перкусія",
+ "marimba": "Маримба",
+ "vibraphone": "Вібрафон",
+ "steelpan": "Стілпен",
+ "brass_instrument": "Мідний духовий інструмент",
+ "french_horn": "Валторна",
+ "trumpet": "Труба",
+ "bowed_string_instrument": "Струнно-смичкови інструмент",
+ "string_section": "Струнна секція",
+ "pizzicato": "Піцикато",
+ "cello": "Віолончель",
+ "didgeridoo": "Діджеріду",
+ "heavy_metal": "Хеві-метал",
+ "grunge": "Гранж",
+ "progressive_rock": "Прогресивний рок",
+ "soul_music": "Соул",
+ "reggae": "Реггі",
+ "bluegrass": "Блюграс",
+ "middle_eastern_music": "Близькосхідна музика",
+ "salsa_music": "Музика сальси",
+ "new-age_music": "Музика нью-ейдж",
+ "music_of_bollywood": "Музика Боллівуду",
+ "groan": "стогнати",
+ "whistling": "Свист",
+ "snoring": "Хропіння",
+ "pant": "Задихатися",
+ "sneeze": "Чхати"
+}
diff --git a/web/public/locales/uk/common.json b/web/public/locales/uk/common.json
new file mode 100644
index 000000000..029364971
--- /dev/null
+++ b/web/public/locales/uk/common.json
@@ -0,0 +1,266 @@
+{
+ "time": {
+ "year_one": "{{time}}рік",
+ "year_few": "{{time}}роки",
+ "year_many": "{{time}}років",
+ "month_one": "{{time}}місяць",
+ "month_few": "{{time}}місяця",
+ "month_many": "{{time}} місяців",
+ "justNow": "Зараз",
+ "today": "Сьогодні",
+ "last7": "Останні 7 днів",
+ "last14": "Останній 14 днів",
+ "last30": "Останній 30 днів",
+ "thisWeek": "Цей тиждень",
+ "lastWeek": "Останній тиждень",
+ "thisMonth": "У цьому місяці",
+ "lastMonth": "Останній місяць",
+ "5minutes": "5 хвилин",
+ "10minutes": "10 хвилин",
+ "30minutes": "30 хвилин",
+ "1hour": "1 година",
+ "12hours": "12 годин",
+ "24hours": "24 години",
+ "pm": "вечора",
+ "am": "ранку",
+ "yr": "{{time}} рік",
+ "hour_one": "{{time}} година",
+ "hour_few": "{{time}} години",
+ "hour_many": "{{time}} годин",
+ "minute_one": "{{time}} хвилина",
+ "minute_few": "{{time}} хвилини",
+ "minute_many": "{{time}} хвилин",
+ "day_one": "{{time}} день",
+ "day_few": "{{time}} дні",
+ "day_many": "{{time}} днів",
+ "second_one": "{{time}}секунда",
+ "second_few": "{{time}}секунди",
+ "second_many": "{{time}}секунд",
+ "ago": "{{timeAgo}} тому",
+ "yesterday": "Учора",
+ "mo": "{{time}}місяць",
+ "d": "{{time}}д",
+ "h": "{{time}}г",
+ "m": "{{time}}хв",
+ "s": "{{time}}сек",
+ "untilForTime": "До {{time}}",
+ "untilForRestart": "Доки Frigate не перезавантажиться.",
+ "untilRestart": "До перезавантаження",
+ "formattedTimestamp": {
+ "12hour": "MMM d, h:mm:ss aaa",
+ "24hour": "MMM d, HH:mm:ss"
+ },
+ "formattedTimestampHourMinute": {
+ "12hour": "h:mm aaa",
+ "24hour": "HH:mm"
+ },
+ "formattedTimestampHourMinuteSecond": {
+ "12hour": "h:mm:ss aaa",
+ "24hour": "HH:mm:ss"
+ },
+ "formattedTimestampMonthDayHourMinute": {
+ "12hour": "MMM d, h:mm aaa",
+ "24hour": "MMM d, HH:mm"
+ },
+ "formattedTimestampMonthDayYearHourMinute": {
+ "12hour": "MMM d yyyy, h:mm aaa",
+ "24hour": "MMM d yyyy, HH:mm"
+ },
+ "formattedTimestampMonthDay": "MMM d",
+ "formattedTimestampFilename": {
+ "12hour": "MM-dd-yy-h-mm-ss-a",
+ "24hour": "MM-dd-yy-HH-mm-ss"
+ },
+ "formattedTimestamp2": {
+ "12hour": "dd.MM h:mm:ssa",
+ "24hour": "d MMM HH:mm:ss"
+ },
+ "formattedTimestampMonthDayYear": {
+ "24hour": "MMM d, yyyy",
+ "12hour": "MMM d, yyyy"
+ }
+ },
+ "button": {
+ "exitFullscreen": "Вийти з повноекранного режиму",
+ "on": "ВКЛ",
+ "yes": "Так",
+ "copy": "Копіювати",
+ "close": "Закрити",
+ "saving": "Збереження…",
+ "history": "Історія",
+ "cancel": "Відмінити",
+ "fullscreen": "Повноекранний режим",
+ "back": "Назад",
+ "pictureInPicture": "Картинка в картинці",
+ "cameraAudio": "Аудіо камери",
+ "copyCoordinates": "Копіювати координати",
+ "edit": "Редагувати",
+ "no": "Ні",
+ "twoWayTalk": "Двосторонній зв'язок",
+ "off": "ВИКЛ",
+ "delete": "Видалити",
+ "apply": "Застосувати",
+ "reset": "Скинути",
+ "done": "Готово",
+ "enabled": "Увімкнено",
+ "enable": "Увімкнути",
+ "disabled": "Вимкнено",
+ "disable": "Вимкнути",
+ "save": "Зберегти",
+ "download": "Завантажити",
+ "info": "Інфо",
+ "suspended": "Призупинено",
+ "play": "Грати",
+ "unselect": "Прибрати виділення",
+ "export": "Експортувати",
+ "deleteNow": "Видалити негайно",
+ "next": "Наступне",
+ "unsuspended": "Відновити дію"
+ },
+ "menu": {
+ "language": {
+ "da": "Датська",
+ "uk": "Українська",
+ "ro": "Румунська",
+ "es": "Іспанська",
+ "zhCN": "Спрощена китайська",
+ "hi": "Хінді",
+ "fr": "Французька",
+ "ar": "Арабська",
+ "pt": "Португальська",
+ "de": "Німецька",
+ "ja": "Японська",
+ "tr": "Турецька",
+ "ru": "російська",
+ "it": "Італійська",
+ "nl": "Голландська",
+ "sv": "Швецька",
+ "cs": "Чешська",
+ "nb": "Норвежский букмол",
+ "ko": "Корейська",
+ "vi": "В'єтнамська",
+ "fa": "Персидська",
+ "pl": "Польська",
+ "he": "Иврит",
+ "el": "Грецька",
+ "hu": "Венгерська",
+ "fi": "Фінська",
+ "sk": "Словацька",
+ "withSystem": {
+ "label": "Використовувати системну мову"
+ },
+ "en": "Англійська",
+ "yue": "粵語 (Кантонська)",
+ "th": "ไทย (Тайська)",
+ "ca": "Català (Каталанська)"
+ },
+ "system": "Система",
+ "systemMetrics": "Системна метріка",
+ "configuration": "Конфігурація",
+ "systemLogs": "Системні логи",
+ "settings": "Налаштування",
+ "configurationEditor": "Редактор конфігурації",
+ "languages": "Мови",
+ "theme": {
+ "nord": "Північ",
+ "red": "Червоний",
+ "contrast": "Висока контрастність",
+ "default": "Типовий",
+ "label": "Тема",
+ "blue": "Синій",
+ "green": "Зелений",
+ "highcontrast": "Висока контрастність"
+ },
+ "help": "Допомогти",
+ "documentation": {
+ "title": "Документація",
+ "label": "Frigate документація"
+ },
+ "restart": "Перезапустити Frigate",
+ "live": {
+ "title": "Живи",
+ "allCameras": "Всi камери",
+ "cameras": {
+ "title": "Камери",
+ "count_one": "{{count}} Камера",
+ "count_few": "{{count}} Камери",
+ "count_many": "{{count}} Камер"
+ }
+ },
+ "review": "Перегляд",
+ "explore": "Вивчити",
+ "export": "Експорт",
+ "uiPlayground": "UI iгровий майданчик",
+ "faceLibrary": "Бібліотека обличчя",
+ "user": {
+ "title": "Користувач",
+ "account": "Акаунт",
+ "current": "Поточний користувач: {{user}}",
+ "anonymous": "анонімний",
+ "logout": "Вихід",
+ "setPassword": "Встановити пароль"
+ },
+ "darkMode": {
+ "label": "Темний режим",
+ "light": "Світло",
+ "dark": "Темний",
+ "withSystem": {
+ "label": "Використовуйте налаштування системи для світлого або темного режиму"
+ }
+ },
+ "appearance": "Поява",
+ "withSystem": "Система"
+ },
+ "unit": {
+ "speed": {
+ "mph": "миль/г",
+ "kph": "км/г"
+ },
+ "length": {
+ "feet": "ноги",
+ "meters": "метрів"
+ }
+ },
+ "label": {
+ "back": "Повернутись"
+ },
+ "toast": {
+ "save": {
+ "title": "Зберегти",
+ "error": {
+ "title": "Не вдалося зберегти зміни конфігурації: {{errorMessage}}",
+ "noMessage": "Не вдалося зберегти зміни налаштування"
+ }
+ },
+ "copyUrlToClipboard": "Скопійовано URL до буфера обміну."
+ },
+ "role": {
+ "title": "Роль",
+ "desc": "Адміністратори мають повний доступ до всіх функцій інтерфейсу Fregate. Глядачі обмежуються переглядом камер, оглядовими елементами та історичними кадрами в інтерфейсі користувача.",
+ "admin": "Адміністратор",
+ "viewer": "Глядач"
+ },
+ "pagination": {
+ "previous": {
+ "title": "Попередній",
+ "label": "Повернутись до попередньої сторінки"
+ },
+ "next": {
+ "title": "Наступний",
+ "label": "Перехід до наступної сторінки"
+ },
+ "more": "Більше сторінок",
+ "label": "Пагінація"
+ },
+ "accessDenied": {
+ "documentTitle": "Доступ заборонений - Frigate",
+ "title": "Доступ заборонений",
+ "desc": "У вас немає дозволу на перегляд цієї сторінки."
+ },
+ "notFound": {
+ "documentTitle": "Не знайдено - Frigate",
+ "desc": "Сторінка не знайдена",
+ "title": "404"
+ },
+ "selectItem": "Вибрати {{item}}"
+}
diff --git a/web/public/locales/uk/components/auth.json b/web/public/locales/uk/components/auth.json
new file mode 100644
index 000000000..07eaca4e3
--- /dev/null
+++ b/web/public/locales/uk/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "errors": {
+ "webUnknownError": "Невідома помилка. Перевірте журнали консолi.",
+ "usernameRequired": "Ви повинні ввести ім'я користувача",
+ "passwordRequired": "Необхідно ввести пароль",
+ "rateLimit": "Перевищення кількості спроб. Спробуйте пізніше.",
+ "loginFailed": "Спроба входу зазнала невдачі",
+ "unknownError": "Невідома помилка. Перевірте журнали."
+ },
+ "user": "Iм'я користувача",
+ "password": "Пароль",
+ "login": "Логiн"
+ }
+}
diff --git a/web/public/locales/uk/components/camera.json b/web/public/locales/uk/components/camera.json
new file mode 100644
index 000000000..76886a7b8
--- /dev/null
+++ b/web/public/locales/uk/components/camera.json
@@ -0,0 +1,86 @@
+{
+ "group": {
+ "name": {
+ "placeholder": "Введіть назву…",
+ "errorMessage": {
+ "exists": "Назва групи камер вже існує.",
+ "mustLeastCharacters": "Назва групи камер має містити щонайменше 2 символи.",
+ "nameMustNotPeriod": "Назва групи камер не повинна містити крапку.",
+ "invalid": "Недійсна назва групи камер."
+ },
+ "label": "Ім'я"
+ },
+ "camera": {
+ "setting": {
+ "streamMethod": {
+ "method": {
+ "noStreaming": {
+ "label": "Без потокового передавання",
+ "desc": "Зображення з камер оновлюватимуться лише раз на хвилину, і пряма трансляція не відбуватиметься."
+ },
+ "continuousStreaming": {
+ "desc": {
+ "warning": "Безперервна потокова передача може призвести до високого використання пропускної здатності та проблем із продуктивністю. Використовуйте обережно.",
+ "title": "Зображення з камери завжди транслюватиметься в реальному часі, коли воно відображається на панелі приладів, навіть якщо жодної активності не виявлено."
+ },
+ "label": "Безперервна потокова передача"
+ },
+ "smartStreaming": {
+ "label": "Розумне потокове передавання (рекомендовано)",
+ "desc": "Інтелектуальна потокова передача оновлює зображення з камери раз на хвилину за відсутності видимої активності, щоб заощадити смугу пропускання і ресурси. При виявленні активності зображення плавно перемикається на пряму трансляцію."
+ }
+ },
+ "label": "Метод потокової передачі",
+ "placeholder": "Виберіть спосіб потокової передачі"
+ },
+ "audioIsUnavailable": "Аудіо недоступне для цієї трансляції",
+ "title": "{{cameraName}} Налаштування потокової передачі",
+ "audio": {
+ "tips": {
+ "document": "Прочитайте документацію ",
+ "title": "Аудіо має виводитися з вашої камери та бути налаштованим у go2rtc для цього потоку."
+ }
+ },
+ "label": "Налаштування потокової передачі з камери",
+ "desc": "Змініть параметри прямої трансляції для панелі керування цієї групи камер. Ці налаштування залежать від пристрою/браузера.",
+ "audioIsAvailable": "Для цього потоку доступне аудіо",
+ "compatibilityMode": {
+ "label": "Режим сумісності",
+ "desc": "Увімкніть цю опцію, лише якщо пряма трансляція вашої камери відображає кольорові артефакти та має діагональну лінію з правого боку зображення."
+ },
+ "stream": "Потік",
+ "placeholder": "Виберіть потік"
+ }
+ },
+ "edit": "Редагувати групу камер",
+ "delete": {
+ "label": "Видалити групу камер",
+ "confirm": {
+ "title": "Підтвердити видалення",
+ "desc": "Ви впевнені, що хочете видалити групу камер? {{name}}?"
+ }
+ },
+ "success": "Групу камер ({{name}}) збережено.",
+ "label": "Групи камер",
+ "add": "Додати групу камер",
+ "cameras": {
+ "label": "Камери",
+ "desc": "Виберіть камери для цієї групи."
+ },
+ "icon": "Значок"
+ },
+ "debug": {
+ "zones": "Зони",
+ "mask": "Маска",
+ "motion": "Рух",
+ "regions": "Регiони",
+ "options": {
+ "label": "Налаштування",
+ "title": "Опції",
+ "showOptions": "Показати параметри",
+ "hideOptions": "Приховати параметри"
+ },
+ "boundingBox": "Обмежувальна рамка",
+ "timestamp": "Позначка часу"
+ }
+}
diff --git a/web/public/locales/uk/components/dialog.json b/web/public/locales/uk/components/dialog.json
new file mode 100644
index 000000000..43cb9bd9b
--- /dev/null
+++ b/web/public/locales/uk/components/dialog.json
@@ -0,0 +1,114 @@
+{
+ "explore": {
+ "plus": {
+ "review": {
+ "question": {
+ "ask_a": "Чи є цей об'єкт {{label}}?",
+ "ask_full": "Чи є цей об'єкт {{untranslatedLabel}}{{translatedLabel}}?",
+ "label": "Підтвердіть цей ярлик для Frigate Plus",
+ "ask_an": "Це об'єкт – {{label}}?"
+ },
+ "state": {
+ "submitted": "Поданi"
+ }
+ },
+ "submitToPlus": {
+ "label": "Надіслати да Frigate+",
+ "desc": "Об'єкти в місцях, які ви хочете уникнути, не є помилковими спрацьовуваннями. Подання їх як помилкових спрацьовувань заплутає модель."
+ }
+ },
+ "video": {
+ "viewInHistory": "Перегляд у історії"
+ }
+ },
+ "streaming": {
+ "label": "Потік",
+ "restreaming": {
+ "desc": {
+ "readTheDocumentation": "Прочитати документацію",
+ "title": "Налаштуйте go2rtc для додаткових параметрів перегляду в реальному часі та аудіо для цієї камери."
+ },
+ "disabled": "Перезавантаження не ввімкнено для цієї камери."
+ },
+ "showStats": {
+ "label": "Показати статистику потоку",
+ "desc": "Позначте цей пункт, щоб показувати статистику потоку як накладання на канал камери."
+ },
+ "debugView": "Режим зневаджування"
+ },
+ "search": {
+ "saveSearch": {
+ "label": "Зберегти пошук",
+ "button": {
+ "save": {
+ "label": "Зберегти цей пошук"
+ }
+ },
+ "desc": "Вкажіть назву для цього збереженого пошуку.",
+ "placeholder": "Введіть назву для пошуку",
+ "overwrite": "{{searchName}} вже існує. Збереження перезапише існуюче значення.",
+ "success": "Пошук ({{searchName}}) збережено."
+ }
+ },
+ "export": {
+ "toast": {
+ "error": {
+ "failed": "Не вдалося розпочати експорт: {{error}}",
+ "endTimeMustAfterStartTime": "Час закінчення повинен бути після часу початку",
+ "noVaildTimeSelected": "Не вибрано допустимий діапазон часу"
+ },
+ "success": "Експорт успішно запущено. Файл доступний у теці /exports."
+ },
+ "fromTimeline": {
+ "saveExport": "Зберегти експорт",
+ "previewExport": "Попередній перегляд експорту"
+ },
+ "time": {
+ "fromTimeline": "Вибір шкали часу",
+ "custom": "Користувацький",
+ "start": {
+ "title": "Час початку",
+ "label": "Виберіть час початку"
+ },
+ "end": {
+ "title": "Час закінчення",
+ "label": "Вибрати час закінчення"
+ },
+ "lastHour_one": "Остання {{count}} година",
+ "lastHour_few": "Останні {{count}} години",
+ "lastHour_many": "Останні {{count}} годин"
+ },
+ "name": {
+ "placeholder": "Введіть назву для експорту"
+ },
+ "select": "Вибрати",
+ "export": "Експорт",
+ "selectOrExport": "Выбiр або експорт"
+ },
+ "recording": {
+ "button": {
+ "export": "Експорт",
+ "markAsReviewed": "Позначити як переглянуте",
+ "deleteNow": "Вилучити зараз"
+ },
+ "confirmDelete": {
+ "title": "Підтвердити вилучення",
+ "desc": {
+ "selected": "Ви впевнені, що хочете видалити все записане відео, пов'язане з цим пунктом огляду? detect камера {{cameraName}} не отримувала ніяких кадрів, перевіряйте журнали помилок"
+ },
+ "cameraDisabled": "Камера вимкнена",
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "Зображення успішно завантажено до Frigate+"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "Не вдалося надіслати фрейм Frigate+"
+ }
+ }
+}
diff --git a/web/public/locales/uk/objects.json b/web/public/locales/uk/objects.json
new file mode 100644
index 000000000..881ac794e
--- /dev/null
+++ b/web/public/locales/uk/objects.json
@@ -0,0 +1,120 @@
+{
+ "dog": "Собака",
+ "cat": "Кіт",
+ "horse": "Кінь",
+ "sheep": "Вівця",
+ "bark": "Лай",
+ "goat": "Коза",
+ "mouse": "Миш",
+ "skateboard": "Скейтборд",
+ "bird": "Птах",
+ "boat": "Човен",
+ "car": "Автомобіль",
+ "bus": "Автобус",
+ "motorcycle": "Мотоцикл",
+ "train": "Поїзд",
+ "bicycle": "Велосипед",
+ "keyboard": "Клавіатура",
+ "door": "Двері",
+ "sink": "Раковина",
+ "animal": "Тварина",
+ "vehicle": "Транспорт",
+ "blender": "Блендер",
+ "hair_dryer": "Фен",
+ "toothbrush": "Зубна щітка",
+ "scissors": "Ножиці",
+ "clock": "Годинник",
+ "toilet": "Вбиральня",
+ "spoon": "Ложка",
+ "tennis_racket": "Тенісна ракетка",
+ "potted_plant": "Кімнатна рослина",
+ "bbq_grill": "Гриль та барбекю",
+ "person": "Людина",
+ "airplane": "Літак",
+ "traffic_light": "Світлофор",
+ "fire_hydrant": "Пожежний гідрант",
+ "parking_meter": "Паркоматів",
+ "bench": "Лавка",
+ "cow": "Корова",
+ "elephant": "Слон",
+ "bear": "Ведмідь",
+ "zebra": "Зебра",
+ "giraffe": "Жираф",
+ "hat": "Шапка",
+ "backpack": "Рюкзак",
+ "street_sign": "Дорожній знак",
+ "stop_sign": "Знак зупинки",
+ "umbrella": "Парасолька",
+ "shoe": "Взуття",
+ "eye_glasses": "Окуляри",
+ "handbag": "Гаманець",
+ "tie": "Краватка",
+ "suitcase": "Валiза",
+ "frisbee": "Фрiсбi",
+ "skis": "Лижи",
+ "snowboard": "Сноуборд",
+ "sports_ball": "Спортивні м'яч",
+ "kite": "Повітряний змій",
+ "baseball_bat": "Бейсбольна біта",
+ "baseball_glove": "Рукавичка ловця",
+ "surfboard": "Дошка для серфінгу",
+ "bottle": "Пляшка",
+ "plate": "Тарiлка",
+ "wine_glass": "Винний келих",
+ "cup": "Чашка",
+ "fork": "Виделка",
+ "knife": "Нiж",
+ "bowl": "Миска",
+ "banana": "Банан",
+ "apple": "Яблуко",
+ "sandwich": "Сендвіч",
+ "orange": "Апельсин",
+ "broccoli": "Броколі",
+ "carrot": "Морква",
+ "hot_dog": "Хот-дог",
+ "pizza": "Пiца",
+ "donut": "Пампушка",
+ "cake": "Торт",
+ "chair": "Стілець",
+ "couch": "Диван",
+ "bed": "Лiжко",
+ "mirror": "Люстерко",
+ "dining_table": "Обідній стіл",
+ "window": "Вiкно",
+ "desk": "Стiл",
+ "tv": "Телевізор",
+ "laptop": "Лептоп",
+ "remote": "Пульт дистанційного керування",
+ "cell_phone": "Мобільний телефон",
+ "microwave": "Мікрохвильовка",
+ "oven": "Пiч",
+ "toaster": "Тостер",
+ "refrigerator": "Холодильник",
+ "book": "Книжка",
+ "vase": "Ваза",
+ "teddy_bear": "Плюшевий ведмедик",
+ "hair_brush": "Гребінець",
+ "squirrel": "Білка",
+ "deer": "Олень",
+ "fox": "Лисиця",
+ "rabbit": "Кролик",
+ "raccoon": "Єнот",
+ "robot_lawnmower": "Роботизована газонокосарка",
+ "waste_bin": "Відро для сміття",
+ "on_demand": "На вимогу",
+ "face": "Обличчя",
+ "license_plate": "Номерний знак",
+ "package": "Посилка",
+ "amazon": "Amazon",
+ "usps": "USPS",
+ "ups": "UPS",
+ "fedex": "Fed Ex",
+ "dhl": "DHL",
+ "an_post": "An Post",
+ "purolator": "Purolator'",
+ "postnl": "PostNL'",
+ "nzpost": "NZPost'",
+ "postnord": "PostNord'",
+ "gls": "GLS",
+ "dpd": "DPD"
+}
diff --git a/web/public/locales/uk/views/configEditor.json b/web/public/locales/uk/views/configEditor.json
new file mode 100644
index 000000000..c9a664113
--- /dev/null
+++ b/web/public/locales/uk/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "saveAndRestart": "Зберегти та перезавантажити",
+ "toast": {
+ "error": {
+ "savingError": "Помилка збереження конфігурації"
+ },
+ "success": {
+ "copyToClipboard": "Налаштування було скопійовано до буфера обміну даними."
+ }
+ },
+ "documentTitle": "Редактор конфігурації - Frigate",
+ "copyConfig": "Скопіювати конфігурацію",
+ "saveOnly": "Тільки зберегти",
+ "configEditor": "Налаштування редактора",
+ "confirm": "Вийти без збереження?"
+}
diff --git a/web/public/locales/uk/views/events.json b/web/public/locales/uk/views/events.json
new file mode 100644
index 000000000..e84c418ec
--- /dev/null
+++ b/web/public/locales/uk/views/events.json
@@ -0,0 +1,38 @@
+{
+ "camera": "Камера",
+ "selected_one": "{{count}} відібраний",
+ "selected_other": "{{count}} відібраний",
+ "alerts": "Оповіщення",
+ "detections": "Виявлень",
+ "motion": {
+ "label": "Рух",
+ "only": "Тiльки рух"
+ },
+ "allCameras": "Всi камери",
+ "empty": {
+ "alert": "Немає попереджень для перегляду",
+ "detection": "Немає ніяких ознак",
+ "motion": "Даних про рух не знайдено"
+ },
+ "timeline": "Хронологія",
+ "timeline.aria": "Вибрати хронiку",
+ "events": {
+ "label": "Події",
+ "aria": "Выбрати події",
+ "noFoundForTimePeriod": "За цей період подій не знайдено."
+ },
+ "documentTitle": "Перегляд подiя - Frigate",
+ "recordings": {
+ "documentTitle": "Записи - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "Останні 24 години"
+ },
+ "markAsReviewed": "Прибрати позначку про необхідність огляду",
+ "markTheseItemsAsReviewed": "Позначити ці елементи як переглянуті",
+ "newReviewItems": {
+ "label": "Переглянути нові елементи огляду",
+ "button": "Нові матеріали для перегляду"
+ },
+ "detected": "виявлено"
+}
diff --git a/web/public/locales/uk/views/explore.json b/web/public/locales/uk/views/explore.json
new file mode 100644
index 000000000..cdbcdb6ee
--- /dev/null
+++ b/web/public/locales/uk/views/explore.json
@@ -0,0 +1,209 @@
+{
+ "exploreIsUnavailable": {
+ "downloadingModels": {
+ "tips": {
+ "documentation": "Прочитати документацію",
+ "context": "Можливо, вам варто переіндексувати вбудовування відстежуваних об'єктів після завантаження моделей."
+ },
+ "setup": {
+ "visionModel": "Модель зору",
+ "visionModelFeatureExtractor": "Екстрактор ознак моделі зору",
+ "textModel": "Текстова модель",
+ "textTokenizer": "Токенізатор тексту"
+ },
+ "error": "Сталася помилка. Перевірте журнали Frigate.",
+ "context": "Frigate завантажує необхідні моделі вбудовування для підтримки функції семантичного пошуку. Це може тривати кілька хвилин залежно від швидкості вашого мережевого з’єднання."
+ },
+ "title": "Огляд недоступний",
+ "embeddingsReindexing": {
+ "context": "Функцію «Дослідити» можна використовувати після завершення переіндексації вбудовування відстежуваних об’єктів.",
+ "startingUp": "Запуск…",
+ "estimatedTime": "Орієнтовний час, що залишився:",
+ "finishingShortly": "Закінчується незабаром",
+ "step": {
+ "thumbnailsEmbedded": "Вбудовані мініатюри: ",
+ "descriptionsEmbedded": "Вбудовані описи: ",
+ "trackedObjectsProcessed": "Оброблено відстежуваних об'єктів: "
+ }
+ }
+ },
+ "documentTitle": "Пошук подія - Frigate",
+ "searchResult": {
+ "tooltip": "Збігається з {{type}} на рівні {{confidence}}%",
+ "deleteTrackedObject": {
+ "toast": {
+ "error": "Не вдалося видалити відстежуваний об'єкт: {{errorMessage}}",
+ "success": "Відстежуваний об'єкт успішно видалено."
+ }
+ }
+ },
+ "trackedObjectsCount_one": "{{count}} відстежуваний об'єкт ",
+ "trackedObjectsCount_few": "{{count}} відстежувані об'єкти ",
+ "trackedObjectsCount_many": "{{count}} відстежувані об'єктів ",
+ "objectLifecycle": {
+ "title": "Життєвий цикл об'єкта",
+ "createObjectMask": "Створити маску об'єкта",
+ "annotationSettings": {
+ "title": "Налаштування анотацій",
+ "offset": {
+ "desc": "Ці дані надходять із сигналу виявлення вашої камери, але накладаються на зображення із сигналу запису. Малоймовірно, що два потоки ідеально синхронізовані. В результаті, обмежувальна рамка та відеоматеріал не будуть ідеально вирівняні. Однак, для налаштування цього можна скористатися полем annotation_offset.",
+ "tips": "ПОРАДА: Уявіть, що є кліп події, в якому людина йде зліва направо. Якщо рамка часової шкали події постійно знаходиться ліворуч від людини, то значення слід зменшити. Аналогічно, якщо людина йде зліва направо, а обмежувальна рамка постійно знаходиться попереду неї, тоді значення слід збільшити.",
+ "label": "Зсув анотації",
+ "documentation": "Прочитайте документацію ",
+ "millisecondsToOffset": "Мілісекунди для зміщення виявлених анотацій. За замовчуванням: 0",
+ "toast": {
+ "success": "Зміщення анотації для {{camera}} збережено у файлі конфігурації. Перезапустіть Frigate, щоб застосувати зміни."
+ }
+ },
+ "showAllZones": {
+ "title": "Показати всі зони",
+ "desc": "Завжди показувати зони на кадрах, де об'єкти увійшли в зону."
+ }
+ },
+ "scrollViewTips": "Прокрутіть, щоб переглянути важливі моменти життєвого циклу цього об'єкта.",
+ "lifecycleItemDesc": {
+ "attribute": {
+ "other": "{{label}} визнаний як {{attribute}}",
+ "faceOrLicense_plate": "{{attribute}} виявлено для {{label}}"
+ },
+ "header": {
+ "zones": "Зони",
+ "ratio": "Співвідношення",
+ "area": "Площа"
+ },
+ "visible": "{{label}} виявлено",
+ "entered_zone": "{{label}} увійшов {{zones}}",
+ "active": "{{label}} став активним",
+ "stationary": "{{label}} став нерухомим",
+ "gone": "{{label}} ліворуч",
+ "heard": "{{label}} чув",
+ "external": "{{label}} виявлено"
+ },
+ "noImageFound": "Для цієї позначки часу не знайдено зображення.",
+ "adjustAnnotationSettings": "Налаштування параметрів анотацій",
+ "autoTrackingTips": "Положення обмежувальних рамок будуть неточними для камер з автоматичним відстеженням.",
+ "carousel": {
+ "previous": "Попередній слайд",
+ "next": "Наступний слайд"
+ },
+ "count": "{{first}} з {{second}}",
+ "trackedPoint": "Відстежувана точка"
+ },
+ "details": {
+ "label": "Мітка",
+ "editLPR": {
+ "title": "Редагувати номерний знак",
+ "desc": "Введіть нове значення номерного знака для цього {{label}}",
+ "descNoLabel": "Введіть нове значення номерного знака для цього відстежуваного об'єкта"
+ },
+ "item": {
+ "toast": {
+ "success": {
+ "updatedLPR": "Номерний знак успішно оновлено.",
+ "updatedSublabel": "Підмітку успішно оновлено.",
+ "regenerate": "Новий опис було запрошено від {{provider}}. Залежно від швидкості вашого провайдера, його перегенерація може зайняти деякий час."
+ },
+ "error": {
+ "regenerate": "Не вдалося звернутися до {{provider}} для отримання нового опису: {{errorMessage}}",
+ "updatedSublabelFailed": "Не вдалося оновити підмітку: {{errorMessage}}",
+ "updatedLPRFailed": "Не вдалося оновити номерний знак: {{errorMessage}}"
+ }
+ },
+ "button": {
+ "share": "Поділитися цим оглядом",
+ "viewInExplore": "Переглянути в розділі «Огляд»"
+ },
+ "tips": {
+ "hasMissingObjects": "Змініть конфігурацію, якщо хочете, щоб Frigate зберігав відстежувані об'єкти для таких міток: {{objects}}",
+ "mismatch_one": "{{count}} Виявлено та включено до цього елемента огляду недоступний об’єкт. Ці об’єкти або не кваліфікувалися як сповіщення чи виявлення, або вже були очищені/видалені.",
+ "mismatch_few": "{{count}} Було виявлено та включено до цього елемента огляду недоступні об’єкти. Ці об’єкти або не кваліфікувалися як сповіщення чи виявлення, або вже були очищені/видалені.",
+ "mismatch_many": "{{count}} Були виявлені та включені до цього елементи огляду недоступні об’єкти. Ці об’єкти або не кваліфікувалися як сповіщення чи виявлення, або вже були очищені/видалені."
+ },
+ "title": "Огляд деталей товару",
+ "desc": "Переглянути деталі товару"
+ },
+ "editSubLabel": {
+ "title": "Редагувати підмітку",
+ "desc": "Введіть нову підмітку для цього {{label}}",
+ "descNoLabel": "Введіть нову підмітку для цього відстежуваного об'єкта"
+ },
+ "snapshotScore": {
+ "label": "Оцінка моментального результату"
+ },
+ "topScore": {
+ "label": "Найкращий результат",
+ "info": "Найвищий бал – це найвищий середній бал для відстежуваного об’єкта, тому він може відрізнятися від балу, що відображається на мініатюрі результатів пошуку."
+ },
+ "timestamp": "Позначка часу",
+ "recognizedLicensePlate": "Розпізнаний номерний знак",
+ "zones": "Зони",
+ "description": {
+ "aiTips": "Фрегат не запитуватиме опис у вашого постачальника генеративного штучного інтелекту, доки не завершиться життєвий цикл відстежуваного об'єкта.",
+ "placeholder": "Опис відстежуваного об'єкта",
+ "label": "Опис"
+ },
+ "regenerateFromThumbnails": "Згенерувати з мініатюр",
+ "tips": {
+ "descriptionSaved": "Опис успішно збережено",
+ "saveDescriptionFailed": "Не вдалося оновити опис: {{errorMessage}}"
+ },
+ "objects": "Об'єкти",
+ "estimatedSpeed": "Орієнтовна швидкість",
+ "camera": "Камера",
+ "button": {
+ "findSimilar": "Знайти схожі",
+ "regenerate": {
+ "title": "Регенерувати",
+ "label": "Згенерувати опис відстежуваного об'єкта повторно"
+ }
+ },
+ "expandRegenerationMenu": "Розгорнути меню регенерації",
+ "regenerateFromSnapshot": "Відновити зі знімка"
+ },
+ "dialog": {
+ "confirmDelete": {
+ "title": "Підтвердити видалення",
+ "desc": "Видалення цього відстежуваного об’єкта призведе до видалення знімка, будь-яких збережених вбудованих елементів та будь-яких пов’язаних записів життєвого циклу об’єкта. Записані кадри цього відстежуваного об’єкта в режимі перегляду історії НЕ будуть видалені.режим: {{effectiveRetainMode}}, тому цей запис на вимогу збереже лише сегменти з {{effectiveRetainModeName}}."
+ }
+}
diff --git a/web/public/locales/uk/views/recording.json b/web/public/locales/uk/views/recording.json
new file mode 100644
index 000000000..a1ae10e01
--- /dev/null
+++ b/web/public/locales/uk/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "export": "Експорт",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "Вибраний діапазон часу не є коректним",
+ "endTimeMustAfterStartTime": "Час закінчення повинен бути пізніше часу початку"
+ }
+ },
+ "calendar": "Календар",
+ "filter": "Фiльтр",
+ "filters": "Фiльтри"
+}
diff --git a/web/public/locales/uk/views/search.json b/web/public/locales/uk/views/search.json
new file mode 100644
index 000000000..0d8657e3d
--- /dev/null
+++ b/web/public/locales/uk/views/search.json
@@ -0,0 +1,72 @@
+{
+ "search": "Пошук",
+ "filter": {
+ "tips": {
+ "desc": {
+ "step1": "Введіть назву ключа фільтра, а потім двокрапку (наприклад, «камери:»).",
+ "step2": "Виберіть значення з пропозицій або введіть своє.",
+ "step3": "Використовуйте кілька фільтрів, додаючи їх один за одним з проміжком між ними.",
+ "step5": "Фільтр діапазону часу використовує формат {{exampleTime}}.",
+ "step6": "Видалити фільтри, натиснувши 'x' поруч з ними.",
+ "exampleLabel": "Наприклад:",
+ "step4": "Фільтри дат (до: і після:) використовують формат {{DateFormat}}.",
+ "text": "Фільтри допомагають звузити результати пошуку. Ось як використовувати їх у полі вводу:"
+ },
+ "title": "Як використовувати текстові фільтри"
+ },
+ "header": {
+ "currentFilterType": "Фільтрувати значення",
+ "activeFilters": "Активнi фiльтри",
+ "noFilters": "Фiлтри"
+ },
+ "label": {
+ "zones": "Зони",
+ "sub_labels": "Суб-меткi",
+ "search_type": "Тип пошуку",
+ "cameras": "Камери",
+ "labels": "Етикеткi",
+ "time_range": "Часовий діапазон",
+ "before": "Перед",
+ "after": "Пiсля",
+ "min_score": "Мінімальний бал",
+ "max_score": "Найвищий бал",
+ "min_speed": "Мінімальна швидкість",
+ "max_speed": "Максимальна швидкість",
+ "recognized_license_plate": "Розпізнаний номерний знак",
+ "has_clip": "Має клiп",
+ "has_snapshot": "Має знiмок"
+ },
+ "searchType": {
+ "thumbnail": "Мініатюра",
+ "description": "Опис"
+ },
+ "toast": {
+ "error": {
+ "beforeDateBeLaterAfter": "Дата 'до' повинна бути пізнішою, ніж дата 'після'.",
+ "afterDatebeEarlierBefore": "Дата 'після' повинна бути раніше, ніж дата 'до'.",
+ "minScoreMustBeLessOrEqualMaxScore": "Значення 'min_score' має бути меншим або дорівнювати 'max_score'.",
+ "maxScoreMustBeGreaterOrEqualMinScore": "Значення 'max_score' має бути більшим або дорівнювати 'min_score'.",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "Значення 'min_speed' має бути меншим або дорівнювати 'max_speed'.",
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "Значення 'max_speed' має бути більшим або дорівнювати 'min_speed'."
+ }
+ }
+ },
+ "similaritySearch": {
+ "title": "Пошук подібності",
+ "active": "Активнi пошук подібності",
+ "clear": "Очистити пошук подібності"
+ },
+ "placeholder": {
+ "search": "Пошук…"
+ },
+ "button": {
+ "save": "Зберігати пошук",
+ "delete": "Видалити збережений пошук",
+ "filterInformation": "Фільтрувати інформацію",
+ "clear": "Очистити пошук",
+ "filterActive": "Активни фільтри"
+ },
+ "savedSearches": "Збережені пошуки",
+ "searchFor": "Пошук да {{inputValue}}",
+ "trackedObjectId": "Iдентифікатори об'єктів"
+}
diff --git a/web/public/locales/uk/views/settings.json b/web/public/locales/uk/views/settings.json
new file mode 100644
index 000000000..a5e7d511f
--- /dev/null
+++ b/web/public/locales/uk/views/settings.json
@@ -0,0 +1,686 @@
+{
+ "notification": {
+ "notificationSettings": {
+ "documentation": "Прочитати документацію",
+ "desc": "Frigate може надсилати push-сповіщення на ваш пристрій, коли він працює у браузері або встановлений як PWA.",
+ "title": "Налаштування сповіщень"
+ },
+ "notificationUnavailable": {
+ "desc": "Веб-повідомлення вимагають безпечного контексту (https://…). Це обмеження браузера. Безпечний доступ до фрегатів для використання сповіщень.",
+ "documentation": "Прочитати документацію",
+ "title": "Сповіщення недоступні"
+ },
+ "globalSettings": {
+ "desc": "Тимчасово призупинити сповіщення для певних камер на всіх зареєстрованих пристроях.",
+ "title": "Глобальні налаштування"
+ },
+ "email": {
+ "title": "Електронна пошта",
+ "placeholder": "наприклад example@email.com",
+ "desc": "Потрібна дійсна електронна адреса, яка буде використана для сповіщення вас про будь-які проблеми з push-сервісом."
+ },
+ "cameras": {
+ "title": "Камери",
+ "noCameras": "Немає доступних камер",
+ "desc": "Виберіть, для яких камер увімкнути сповіщення."
+ },
+ "suspendTime": {
+ "5minutes": "Призупинити на 5 хвилин",
+ "30minutes": "Призупинити на 30 хвилин",
+ "1hour": "Призупинити на 1 годину",
+ "12hours": "Призупинити на 12 годин",
+ "24hours": "Призупинити на 24 години",
+ "untilRestart": "Призупинити до перезапуску",
+ "10minutes": "Призупинити на 10 хвилин",
+ "suspend": "Призупинити"
+ },
+ "toast": {
+ "success": {
+ "registered": "Успішно зареєстровано для отримання сповіщень. Перед надсиланням будь-яких сповіщень (включно з тестовим сповіщенням) потрібен перезапуск Frigate.",
+ "settingSaved": "Налаштування сповіщень збережено."
+ },
+ "error": {
+ "registerFailed": "Не вдалося зберегти реєстрацію сповіщення."
+ }
+ },
+ "title": "Сповіщення",
+ "suspended": "Сповіщення призупинено {{time}}",
+ "deviceSpecific": "Налаштування, специфічні для пристрою",
+ "registerDevice": "Зареєструйте цей пристрій",
+ "unregisterDevice": "Скасувати реєстрацію цього пристрою",
+ "sendTestNotification": "Надіслати тестове сповіщення",
+ "active": "Активні сповіщення",
+ "cancelSuspension": "Скасувати призупинення",
+ "unsavedRegistrations": "Незбережені реєстрації сповіщень",
+ "unsavedChanges": "Незбережені зміни сповіщень"
+ },
+ "camera": {
+ "streams": {
+ "title": "Потоки",
+ "desc": "Тимчасово вимкніть камеру до перезавантаження Frigate. Вимкнення камери повністю зупиняє обробку потоків цієї камери Frigate. Виявлення, запис і налагодження будуть недоступні.Регіональні рамки
Яскраво-зелені рамки будуть накладені на області інтересу в кадрі, які надсилаються на детектор об'єктів.
", + "desc": "Показати рамку області інтересу, що надсилається на детектор об'єктів", + "title": "Регіони" + }, + "boundingBoxes": { + "colors": { + "info": "Поля руху
Червоні поля будуть накладені на області кадру, де наразі виявляється рух
" + }, + "objectList": "Список об'єктів", + "noObjects": "Без об'єктів" + }, + "classification": { + "licensePlateRecognition": { + "readTheDocumentation": "Прочитати документацію", + "title": "Розпізнавання номерних знаків", + "desc": "Фрегат може розпізнавати номерні знаки транспортних засобів та автоматично додавати виявлені символи до поля recognized_license_plate або відоме ім'я як sub_label до об'єктів типу автомобіль. Поширеним випадком використання може бути зчитування номерних знаків автомобілів, що заїжджають на під'їзну доріжку, або автомобілів, що проїжджають повз вулицю." + }, + "faceRecognition": { + "readTheDocumentation": "Прочитати документацію", + "title": "Розпізнавання обличчя", + "desc": "Розпізнавання обличчя дозволяє присвоювати людям імена, і коли їхнє обличчя розпізнається, Frigate призначає ім'я людини як підмітку. Ця інформація міститься в інтерфейсі користувача, фільтрах, а також у сповіщеннях.", + "modelSize": { + "label": "Розмір моделі", + "desc": "Розмір моделі, що використовується для розпізнавання обличчя.", + "small": { + "title": "маленький", + "desc": "Використання small використовує модель вбудовування облич FaceNet, яка ефективно працює на більшості процесорів." + }, + "large": { + "title": "великий", + "desc": "Використання параметра large використовує модель вбудовування облич ArcFace та автоматично запускатиметься на графічному процесорі, якщо це можливо." + } + } + }, + "semanticSearch": { + "reindexNow": { + "alreadyInProgress": "Переіндексація вже триває.", + "error": "Не вдалося розпочати переіндексацію: {{errorMessage}}", + "confirmDesc": "Ви впевнені, що хочете переіндексувати всі вбудовані відстежувані об'єкти? Цей процес працюватиме у фоновому режимі, але може максимально навантажити ваш процесор і зайняти чимало часу. Ви можете спостерігати за прогресом на Ex.", + "confirmButton": "Переіндексувати", + "desc": "Переіндексація призведе до повторного створення вбудованих елементів для всіх відстежуваних об'єктів. Цей процес працює у фоновому режимі та може максимально навантажити ваш процесор і зайняти достатню кількість часу залежно від кількості відстежуваних об'єктів.", + "success": "Переіндексацію успішно розпочато.", + "label": "Переіндексувати зараз", + "confirmTitle": "Підтвердити переіндексацію" + }, + "title": "Семантичний пошук", + "desc": "Семантичний пошук у Frigate дозволяє знаходити відстежувані об'єкти у ваших оглядах, використовуючи або саме зображення, або текстовий опис, визначений користувачем, або автоматично згенерований.", + "readTheDocumentation": "Прочитайте документацію", + "modelSize": { + "label": "Розмір моделі", + "desc": "Розмір моделі, що використовується для вбудовування семантичного пошуку.", + "small": { + "title": "маленький", + "desc": "Використання малих працівників квантована версія моделі, яка використовує менше оперативної пам'яті та працює швидше на процесорі з дуже незначною різницею в якості вбудовування." + }, + "large": { + "title": "великий", + "desc": "Використання large використовує повну модель Jina та автоматично запускатиметься на графічному процесорі, якщо це можливо." + } + } + }, + "restart_required": "Потрібно перезавантажити (налаштування класифікації змінено)", + "toast": { + "success": "Налаштування класифікації збережено. Перезапустіть Frigate, щоб застосувати зміни.", + "error": "Не вдалося зберегти зміни конфігурації: {{errorMessage}}" + }, + "title": "Налаштування класифікації", + "birdClassification": { + "title": "Класифікація птахів", + "desc": "Класифікація птахів ідентифікує відомих птахів за допомогою квантованої моделі Tensorflow. Коли відомого птаха розпізнають, його загальна назва буде додана як sub_label. Ця інформація міститься в інтерфейсі користувача, фільтрах, а також у сповіщеннях." + }, + "unsavedChanges": "Незбережені зміни налаштувань класифікації" + }, + "frigatePlus": { + "modelInfo": { + "loading": "Завантаження інформації про модель…", + "loadingAvailableModels": "Завантаження доступних моделей…", + "plusModelType": { + "baseModel": "Базова модель", + "userModel": "Точно налаштований" + }, + "supportedDetectors": "Підтримувані детектори", + "error": "Не вдалося завантажити інформацію про модель", + "availableModels": "Доступні моделі", + "trainDate": "Дата поїзда", + "baseModel": "Базова модель", + "modelSelect": "Тут можна вибрати доступні моделі на Frigate+. Зверніть увагу, що можна вибрати лише моделі, сумісні з вашою поточною конфігурацією детектора.", + "title": "Інформація про модель", + "modelType": "Тип моделі", + "cameras": "Камери" + }, + "snapshotConfig": { + "title": "Конфігурація знімків", + "desc": "Для надсилання до Frigate+ потрібно ввімкнути як знімки, так і знімкиclean_copy у вашій конфігурації.",
+ "documentation": "Прочитайте документацію",
+ "table": {
+ "camera": "Камера",
+ "snapshots": "Знімки",
+ "cleanCopySnapshots": "clean_copy Знімки"
+ },
+ "cleanCopyWarning": "На деяких камерах увімкнено знімки екрана, але вимкнено чисте копіювання. Щоб мати змогу надсилати зображення з цих камер до Frigate+, потрібно ввімкнути параметр clean_copy у конфігурації знімків екрана."
+ },
+ "apiKey": {
+ "desc": "Ключ API Frigate+ забезпечує інтеграцію з сервісом Frigate+.",
+ "notValidated": "Ключ API Frigate+ не виявлено або не перевірено",
+ "title": "Ключ API Фрегат+",
+ "validated": "Ключ API Frigate+ виявлено та перевірено",
+ "plusLink": "Дізнайтеся більше про Фрегат+"
+ },
+ "restart_required": "Потрібно перезавантаження (модель Frigate+ змінена)",
+ "toast": {
+ "success": "Налаштування Frigate+ збережено. Перезапустіть Frigate, щоб застосувати зміни.",
+ "error": "Не вдалося зберегти зміни конфігурації: {{errorMessage}}"
+ },
+ "title": "Налаштування Фрегат+",
+ "unsavedChanges": "Незбережені зміни налаштувань Frigate+"
+ },
+ "general": {
+ "calendar": {
+ "title": "Календар",
+ "firstWeekday": {
+ "label": "Перший день тижня",
+ "desc": "День, з якого починаються тижні календаря оглядів.",
+ "sunday": "Неділя",
+ "monday": "Понеділок"
+ }
+ },
+ "title": "Загальна налаштування",
+ "liveDashboard": {
+ "title": "Панель керування в прямому ефірі",
+ "automaticLiveView": {
+ "label": "Автоматичний перегляд у реальному часі",
+ "desc": "Автоматично перемикатися на режим реального часу з камери, коли виявляється активність. Якщо вимкнути цю опцію, статичні зображення з камери на панелі керування реальним часом оновлюватимуться лише раз на хвилину."
+ },
+ "playAlertVideos": {
+ "label": "Відтворити відео зі сповіщеннями",
+ "desc": "За замовчуванням останні сповіщення на панелі керування Live відтворюються як невеликі відеозаписи, що циклічно відтворюються. Вимкніть цю опцію, щоб відображати лише статичне зображення останніх сповіщень на цьому пристрої/у браузері."
+ }
+ },
+ "storedLayouts": {
+ "title": "Збережені макети",
+ "clearAll": "Очистити всі макети",
+ "desc": "Розташування камер у групі камер можна перетягувати/змінювати розмір. Позиції зберігаються в локальному сховищі вашого браузера."
+ },
+ "cameraGroupStreaming": {
+ "title": "Налаштування потокової передачі групи камер",
+ "desc": "Налаштування потокової передачі для кожної групи камер зберігаються в локальному сховищі вашого браузера.",
+ "clearAll": "Очистити всі налаштування потокового передавання"
+ },
+ "recordingsViewer": {
+ "title": "Переглядач записів",
+ "defaultPlaybackRate": {
+ "label": "Стандартна швидкість відтворення",
+ "desc": "Швидкість відтворення записів за замовчуванням."
+ }
+ },
+ "toast": {
+ "success": {
+ "clearStoredLayout": "Очищено збережений макет для {{cameraName}}",
+ "clearStreamingSettings": "Очищено налаштування потокової передачі для всіх груп камер."
+ },
+ "error": {
+ "clearStoredLayoutFailed": "Не вдалося очистити збережений макет: {{errorMessage}}",
+ "clearStreamingSettingsFailed": "Не вдалося очистити налаштування потокового передавання: {{errorMessage}}"
+ }
+ }
+ },
+ "motionDetectionTuner": {
+ "improveContrast": {
+ "title": "Покращення контрастності",
+ "desc": "Покращення контрастності для темніших сцен. За замовчуванням: УВІМК."
+ },
+ "desc": {
+ "documentation": "Прочитайте посібник з налаштування руху",
+ "title": "Фрегат використовує виявлення руху як першочергову перевірку, щоб побачити, чи відбувається щось у кадрі, що варто перевірити за допомогою виявлення об'єктів."
+ },
+ "title": "Тюнер виявлення руху",
+ "Threshold": {
+ "title": "Поріг",
+ "desc": "Порогове значення визначає, наскільки велика зміна яскравості пікселя має вважатися рухом. За замовчуванням: 30"
+ },
+ "toast": {
+ "success": "Налаштування руху збережено."
+ },
+ "contourArea": {
+ "title": "Площа контуру",
+ "desc": "Значення площі контуру використовується для визначення того, які групи змінених пікселів кваліфікуються як рух. За замовчуванням: 10"
+ },
+ "unsavedChanges": "Незбережені зміни в налаштуванні руху ({{camera}})"
+ },
+ "documentTitle": {
+ "object": "Налагодження – Фрегат",
+ "notifications": "Налаштування сповіщень – Фрегат",
+ "default": "Налаштування - Фрегат",
+ "authentication": "Налаштування автентифікації – Фрегат",
+ "camera": "Налаштування камери – Фрегат",
+ "classification": "Налаштування класифікації – Фрегат",
+ "masksAndZones": "Редактор масок та зон – Фрегат",
+ "motionTuner": "Тюнер руху - Фрегат",
+ "general": "Основна налаштування – Frigate",
+ "frigatePlus": "Налаштування Frigate+ – Frigate",
+ "enrichments": "Налаштуваннях збагачення – Frigate"
+ },
+ "menu": {
+ "ui": "Інтерфейс користувача",
+ "classification": "Класифікація",
+ "cameras": "Налаштування камери",
+ "users": "Користувачі",
+ "masksAndZones": "Маски / Зони",
+ "motionTuner": "Тюнер руху",
+ "debug": "Налагодження",
+ "notifications": "Сповіщення",
+ "frigateplus": "Frigate+",
+ "enrichments": "Збагачення"
+ },
+ "dialog": {
+ "unsavedChanges": {
+ "desc": "Ви хочете зберегти зміни, перш ніж продовжити?",
+ "title": "У вас є незбережені зміни."
+ }
+ },
+ "cameraSetting": {
+ "camera": "Камера",
+ "noCamera": "Без камери"
+ },
+ "users": {
+ "management": {
+ "title": "Керування користувачами",
+ "desc": "Керувати обліковими записами користувачів цього екземпляра Frigate."
+ },
+ "addUser": "Додати користувача",
+ "updatePassword": "Оновити пароль",
+ "toast": {
+ "success": {
+ "deleteUser": "Користувач {{user}} успішно видалений",
+ "roleUpdated": "Роль оновлено для {{user}}",
+ "updatePassword": "Пароль успішно оновлено.",
+ "createUser": "Користувач {{user}} успішно створено"
+ },
+ "error": {
+ "setPasswordFailed": "Не вдалося зберегти пароль: {{errorMessage}}",
+ "createUserFailed": "Не вдалося створити користувача: {{errorMessage}}",
+ "deleteUserFailed": "Не вдалося видалити користувача: {{errorMessage}}",
+ "roleUpdateFailed": "Не вдалося оновити роль: {{errorMessage}}"
+ }
+ },
+ "table": {
+ "password": "Пароль",
+ "deleteUser": "Видалити користувача",
+ "username": "Ім'я користувача",
+ "actions": "Дії",
+ "noUsers": "Користувачів не знайдено.",
+ "role": "Роль",
+ "changeRole": "Змінити роль користувача"
+ },
+ "dialog": {
+ "form": {
+ "user": {
+ "title": "Ім'я користувача",
+ "desc": "Дозволено використовувати лише літери, цифри, крапки та символи підкреслення.",
+ "placeholder": "Введіть ім'я користувача"
+ },
+ "password": {
+ "strength": {
+ "medium": "Середній",
+ "strong": "Сильний",
+ "veryStrong": "Дуже сильний",
+ "title": "Надійність пароля: ",
+ "weak": "Слабкий"
+ },
+ "match": "Паролі збігаються",
+ "title": "Пароль",
+ "notMatch": "Паролі не збігається",
+ "placeholder": "Введіть пароль",
+ "confirm": {
+ "title": "Підтвердьте пароль",
+ "placeholder": "Підтвердьте пароль"
+ }
+ },
+ "newPassword": {
+ "confirm": {
+ "placeholder": "Введіть новий пароль ще раз"
+ },
+ "title": "Новий пароль",
+ "placeholder": "Введіть новий пароль"
+ },
+ "usernameIsRequired": "Потрібне ім'я користувача",
+ "passwordIsRequired": "Потрібен пароль"
+ },
+ "changeRole": {
+ "roleInfo": {
+ "admin": "Адміністратор",
+ "intro": "Виберіть відповідну роль для цього користувача:",
+ "adminDesc": "Повний доступ до всіх функцій.",
+ "viewer": "Глядач",
+ "viewerDesc": "Обмежено лише активними інформаційними панелями, функціями «Огляд», «Дослідження» та «Експорт»."
+ },
+ "title": "Змінити роль користувача",
+ "desc": "Оновити дозволи для {{username}}",
+ "select": "Виберіть роль"
+ },
+ "createUser": {
+ "title": "Створити нового користувача",
+ "desc": "Додайте новий обліковий запис користувача та вкажіть роль для доступу до областей інтерфейсу Frigate.",
+ "usernameOnlyInclude": "Ім'я користувача може містити лише літери, цифри, . або _",
+ "confirmPassword": "Будь ласка, підтвердіть свій пароль"
+ },
+ "deleteUser": {
+ "title": "Видалити користувача",
+ "desc": "Цю дію не можна скасувати. Це призведе до остаточного видалення облікового запису користувача та всіх пов’язаних з ним даних.",
+ "warn": "Ви впевнені, що хочете видалити {{username}}?"
+ },
+ "passwordSetting": {
+ "updatePassword": "Оновити пароль для {{username}}",
+ "setPassword": "Встановити пароль",
+ "desc": "Створіть надійний пароль для захисту цього облікового запису.",
+ "cannotBeEmpty": "Пароль не може бути порожнім",
+ "doNotMatch": "Паролі не збігаються"
+ }
+ },
+ "title": "Користувачі"
+ },
+ "enrichments": {
+ "unsavedChanges": "Зміни в налаштуваннях незбережених збагачень",
+ "semanticSearch": {
+ "title": "Семантичний пошук",
+ "desc": "Семантичний пошук у Frigate дозволяє знаходити відстежувані об'єкти в елементах огляду, використовуючи або саме зображення, або текстовий опис, визначений користувачем, або автоматично згенерований опис.",
+ "readTheDocumentation": "Прочитайте документації",
+ "reindexNow": {
+ "label": "Переіндексувати зараз",
+ "confirmTitle": "Підтвердити переіндексацію",
+ "error": "Не вдалося розпочати переіндексацію: {{errorMessage}}",
+ "confirmDesc": "Ви впевнені, що хочете переіндексувати всі вбудовані відстежувані об'єкти? Цей процес працюватиме у фоновому режимі, але може максимально навантажити ваш процесор і зайняти чимало часу. Ви можете спостерігати за прогресом на Ex.",
+ "confirmButton": "Переіндексувати",
+ "alreadyInProgress": "Переіндексація вже триває.",
+ "success": "Переіндексацію успішно розпочато.",
+ "desc": "Переіндексація відновить вбудовування для всіх відстежуваних об'єктів. Цей процес працює у фоновому режимі та може максимально навантажувати ваш процесор і займати достатню кількість часу залежно від кількості відстежуваних об'єктів."
+ },
+ "modelSize": {
+ "label": "Розмір моделі",
+ "desc": "Розмір моделі, що використовується для вбудовування семантичного пошуку.",
+ "small": {
+ "title": "маленький",
+ "desc": "Використання small застосовує квантовану версію моделі, яка використовує менше оперативної пам'яті та працює швидше на процесорі з дуже незначною різницею в якості вбудовування."
+ },
+ "large": {
+ "title": "великий",
+ "desc": "Використання large використовує повну модель Jina та автоматично запускатиметься на графічному процесорі, якщо це можливо."
+ }
+ }
+ },
+ "faceRecognition": {
+ "title": "Розпізнавання обличчя",
+ "readTheDocumentation": "Прочитайте документація",
+ "modelSize": {
+ "label": "Розмір моделі",
+ "desc": "Розмір моделі, що використовується для розпізнавання обличчя.",
+ "small": {
+ "title": "маленький",
+ "desc": "Використання small використовує модель вбудовування облич FaceNet, яка ефективно працює на більшості процесорів."
+ },
+ "large": {
+ "title": "великий",
+ "desc": "Використання параметра large використовує модель вбудовування облич ArcFace та автоматично запускатиметься на графічному процесорі, якщо це можливо."
+ }
+ },
+ "desc": "Розпізнавання облич дозволяє присвоювати людям імена, і коли обличчя розпізнається, Frigate додає ім'я людини в якості підмітки. Ця інформація відображається в інтерфейсі, фільтрах, а також у сповіщеннях."
+ },
+ "licensePlateRecognition": {
+ "title": "Розпізнавання номерних знаків",
+ "readTheDocumentation": "Прочитайте документації",
+ "desc": "Frigate може розпізнавати номерні знаки на автомобілях і автоматично додавати виявлені символи до поля розпізнаний_номер_автомобіля або відоме ім'я як підмітку до об'єктів, що мають тип \"автомобіль\". Поширеним випадком використання може бути зчитування номерних знаків автомобілів, що заїжджають на під'їзд, або автомобілів, що проїжджають вулицею."
+ },
+ "restart_required": "Потрібно перезавантажити (налаштування збагачення змінено)",
+ "toast": {
+ "success": "Налаштування збагачення збережено. Перезапустіть Frigate, щоб застосувати зміни.",
+ "error": "Не вдалося зберегти зміни конфігурації: {{errorMessage}}"
+ },
+ "birdClassification": {
+ "desc": "Класифікація птахів ідентифікує відомих птахів за допомогою квантованої моделі тензорного потоку. Коли відомого птаха розпізнано, його загальну назву буде додано як підмітку. Ця інформація відображається в інтерфейсі, фільтрах, а також у сповіщеннях.",
+ "title": "Класифікація птахів"
+ },
+ "title": "Налаштуваннях збагачення"
+ }
+}
diff --git a/web/public/locales/uk/views/system.json b/web/public/locales/uk/views/system.json
new file mode 100644
index 000000000..b1472f7a7
--- /dev/null
+++ b/web/public/locales/uk/views/system.json
@@ -0,0 +1,180 @@
+{
+ "cameras": {
+ "label": {
+ "ffmpeg": "FFmpeg'",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} пропущених виявлень на секунду",
+ "cameraDetect": "{{camName}} виявлення",
+ "cameraFfmpeg": "{{camName}} FFmpeg'",
+ "overallDetectionsPerSecond": "загальна кiлькiсть виявлень за секунду",
+ "cameraDetectionsPerSecond": "{{camName}} виявлень на секунду",
+ "overallFramesPerSecond": "загальна кiлкiсть кадрiв на секунду",
+ "overallSkippedDetectionsPerSecond": "загальна кiлкiсть пропущених виявлень за секунду",
+ "cameraCapture": "{{camName}} захоплення",
+ "cameraFramesPerSecond": "{{camName}} кадрiв на секунду",
+ "skipped": "пропущено",
+ "capture": "захоплення",
+ "camera": "камера",
+ "detect": "виявити"
+ },
+ "toast": {
+ "success": {
+ "copyToClipboard": "Тестові дані копіюються в буфер обміну."
+ },
+ "error": {
+ "unableToProbeCamera": "Не вдалося дослідити камеру: {{errorMessage}}"
+ }
+ },
+ "title": "Камери",
+ "info": {
+ "fetching": "Отримання даних з камери",
+ "cameraProbeInfo": "{{camera}} Інформація про зонд камери",
+ "streamDataFromFFPROBE": "Дані потоку отримуються за допомогою ffprobe.",
+ "stream": "Потік {{idx}}",
+ "video": "Відео:",
+ "codec": "Кодек:",
+ "resolution": "Роздільна здатність:",
+ "fps": "FPS:",
+ "unknown": "Невідомо",
+ "audio": "Аудіо:",
+ "error": "Помилка: {{error}}",
+ "tips": {
+ "title": "Інформація про зонд камери"
+ },
+ "aspectRatio": "співвідношення сторін"
+ },
+ "overview": "Огляд",
+ "framesAndDetections": "Кадри / Виявлення"
+ },
+ "enrichments": {
+ "embeddings": {
+ "plate_recognition": "Розпiзнавання номерiв",
+ "image_embedding_speed": "Швидкість вбудовування зображень",
+ "face_embedding_speed": "Швидкість вбудовування облич",
+ "face_recognition_speed": "Швидкість розпізнавання обличчя",
+ "plate_recognition_speed": "Швидкість розпізнавання номерних знаків",
+ "text_embedding_speed": "Швидкість вбудовування тексту",
+ "image_embedding": "Вбудовування зображень",
+ "text_embedding": "Вбудовування тексту",
+ "face_recognition": "Розпізнавання обличчя",
+ "yolov9_plate_detection_speed": "Швидкість виявлення номерних знаків YOLOv9",
+ "yolov9_plate_detection": "Виявлення пластин YOLOv9"
+ },
+ "title": "Збагаченням",
+ "infPerSecond": "Висновки за секунду"
+ },
+ "general": {
+ "title": "Загальна",
+ "hardwareInfo": {
+ "npuUsage": "Використання нейронного процесора",
+ "npuMemory": "Пам'ять NPU",
+ "title": "Інформація про обладнання",
+ "gpuUsage": "Використання графічного процесора",
+ "gpuMemory": "Пам'ять графічного процесора",
+ "gpuEncoder": "GPU-кодер",
+ "gpuDecoder": "Декодер графічного процесора",
+ "gpuInfo": {
+ "vainfoOutput": {
+ "title": "Вихід Vainfo",
+ "returnCode": "Код повернення: {{code}}",
+ "processOutput": "Вихід процесу:",
+ "processError": "Помилка процесу:"
+ },
+ "nvidiaSMIOutput": {
+ "title": "Вихід Nvidia SMI",
+ "name": "Ім'я: {{name}}",
+ "driver": "Водій: {{driver}}",
+ "cudaComputerCapability": "Можливості обчислень CUDA: {{cuda_compute}}",
+ "vbios": "Інформація про VBios: {{vbios}}"
+ },
+ "closeInfo": {
+ "label": "Закрити інформацію про графічний процесор"
+ },
+ "copyInfo": {
+ "label": "Копіювати інформацію про графічний процесор"
+ },
+ "toast": {
+ "success": "Інформацію про графічний процесор скопійовано в буфер обміну"
+ }
+ }
+ },
+ "otherProcesses": {
+ "processMemoryUsage": "Використання пам'яті процесу",
+ "processCpuUsage": "Використання процесора процесу",
+ "title": "Інші процеси"
+ },
+ "detector": {
+ "temperature": "Температура детектора",
+ "title": "Детектори",
+ "inferenceSpeed": "Швидкість виведення детектора",
+ "cpuUsage": "Використання процесора детектора",
+ "memoryUsage": "Використання пам'яті детектора"
+ }
+ },
+ "storage": {
+ "cameraStorage": {
+ "unused": {
+ "tips": "Це значення може неточно відображати обсяг вільного простору, доступного для Frigate, якщо на вашому диску зберігаються інші файли, окрім записів Frigate. Frigate не відстежує використання пам’яті поза ним.",
+ "title": "Невикористаний"
+ },
+ "title": "Зберігання камери",
+ "storageUsed": "Зберігання",
+ "camera": "Камера",
+ "unusedStorageInformation": "Інформація про невикористане сховище",
+ "percentageOfTotalUsed": "Відсоток від загальної кількості",
+ "bandwidth": "Пропускна здатність"
+ },
+ "overview": "Огляд",
+ "recordings": {
+ "title": "Записи",
+ "tips": "Це значення відображає загальний обсяг пам’яті, що використовується записами в базі даних Frigate. Frigate не відстежує використання пам’яті для всіх файлів на вашому диску.",
+ "earliestRecording": "Найдавніший доступний запис:"
+ },
+ "title": "Зберігання"
+ },
+ "lastRefreshed": "Останнє оновлення: ",
+ "stats": {
+ "ffmpegHighCpuUsage": "{{camera}} має високе використання процесора FFmpeg ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} має високе використання процесора для виявлення ({{detectAvg}}%)",
+ "healthy": "Система справна",
+ "reindexingEmbeddings": "Переіндексація вбудовування (виконано {{processed}}%)",
+ "cameraIsOffline": "{{camera}} не в мережі",
+ "detectIsSlow": "{{detect}} повільний ({{speed}} мс)",
+ "detectIsVerySlow": "{{detect}} дуже повільний ({{speed}} мс)"
+ },
+ "documentTitle": {
+ "cameras": "Статистика камер - Фрегат",
+ "storage": "Статистика сховища - Фрегат",
+ "general": "Загальна статистика - Frigate",
+ "enrichments": "Статистика збагачені - Фрегат",
+ "logs": {
+ "frigate": "Фрегатні журнали - Фрегат",
+ "go2rtc": "Журнали Go2RTC - Фрегат",
+ "nginx": "Журнали Nginx - Фрегат"
+ }
+ },
+ "title": "Система",
+ "metrics": "Системні показники",
+ "logs": {
+ "download": {
+ "label": "Завантажити журнали"
+ },
+ "copy": {
+ "label": "Копіювати в буфер обміну",
+ "success": "Скопійовано журнали в буфер обміну",
+ "error": "Не вдалося скопіювати журнали в буфер обміну"
+ },
+ "type": {
+ "label": "Тип",
+ "timestamp": "Позначка часу",
+ "tag": "Тег",
+ "message": "Повідомлення"
+ },
+ "tips": "Журнали передаються потоком із сервера",
+ "toast": {
+ "error": {
+ "fetchingLogsFailed": "Помилка отримання журналів: {{errorMessage}}",
+ "whileStreamingLogs": "Помилка під час потокової передачі журналів: {{errorMessage}}"
+ }
+ }
+ }
+}
diff --git a/web/public/locales/ur/audio.json b/web/public/locales/ur/audio.json
new file mode 100644
index 000000000..b6b532255
--- /dev/null
+++ b/web/public/locales/ur/audio.json
@@ -0,0 +1,38 @@
+{
+ "wheeze": "گھرگھراہٹ",
+ "snoring": "خراٹے",
+ "cough": "کھانسی",
+ "singing": "گانا",
+ "throat_clearing": "گلا صاف کرنا",
+ "sneeze": "چھینک",
+ "sniff": "سونگھنا",
+ "run": "دوڑو",
+ "applause": "تالیاں",
+ "chatter": "چہچہانا",
+ "crowd": "بھیڑ",
+ "animal": "جانور",
+ "children_playing": "بچے کھیل رہے ہیں",
+ "howl": "چیخنا",
+ "growling": "کراہنے والا",
+ "dog": "کتا",
+ "cat": "بلی",
+ "pets": "پالتو جانور",
+ "whimper_dog": "کتے کی آواز",
+ "bark": "بھونکنا",
+ "meow": "میانو",
+ "speech": "تقریر",
+ "babbling": "بڑبڑانا",
+ "yell": "چیخنا",
+ "bellow": "دَہاڑ",
+ "whoop": "اففف",
+ "whispering": "سرگوشی",
+ "laughter": "ہنسی",
+ "snicker": "منہ دبا کر ہنسنا",
+ "car": "گاڑی",
+ "bus": "بس",
+ "motorcycle": "موٹر سائیکل",
+ "train": "ٹرین",
+ "bicycle": "سائیکل",
+ "crying": "رونا",
+ "sigh": "آہیں"
+}
diff --git a/web/public/locales/ur/common.json b/web/public/locales/ur/common.json
new file mode 100644
index 000000000..dbf35b3b6
--- /dev/null
+++ b/web/public/locales/ur/common.json
@@ -0,0 +1,38 @@
+{
+ "time": {
+ "untilForTime": "{{time}} تک",
+ "untilForRestart": "فریگیٹ کے دوبارہ شروع ہونے تک۔",
+ "untilRestart": "دوبارہ شروع ہونے تک",
+ "ago": "{{timeAgo}} پہلے",
+ "justNow": "ابھی ابھی",
+ "today": "آج",
+ "yesterday": "کل",
+ "last7": "پچھلے 7 دن",
+ "last14": "آخری 14 دن",
+ "last30": "آخری 30 دن",
+ "thisWeek": "اس ہفتے",
+ "lastWeek": "گزشتہ ہفتے",
+ "thisMonth": "اس مہینے",
+ "lastMonth": "پچھلے مہینے",
+ "5minutes": "5 منٹ",
+ "10minutes": "10 منٹ",
+ "30minutes": "30 منٹ",
+ "1hour": "1 گھنٹہ",
+ "12hours": "12 گھنٹے",
+ "24hours": "24 گھنٹے",
+ "pm": "pm",
+ "am": "am",
+ "yr": "{{time}}سال",
+ "mo": "{{time}} مہینہ",
+ "d": "{{time}} دن",
+ "h": "{{time}} گھنٹہ",
+ "year_one": "{{time}} سال",
+ "year_other": "{{time}} سال",
+ "day_one": "{{time}} دن",
+ "day_other": "{{time}} دن",
+ "month_one": "{{time}} مہینہ",
+ "month_other": "{{time}} مہینے",
+ "hour_one": "{{time}} گھنٹہ",
+ "hour_other": "{{time}} گھنٹے"
+ }
+}
diff --git a/web/public/locales/ur/components/auth.json b/web/public/locales/ur/components/auth.json
new file mode 100644
index 000000000..e7625b65c
--- /dev/null
+++ b/web/public/locales/ur/components/auth.json
@@ -0,0 +1,14 @@
+{
+ "form": {
+ "user": "صارف نام",
+ "password": "پاسورڈ",
+ "login": "لاگ ان",
+ "errors": {
+ "usernameRequired": "صارف نام درکار ہے",
+ "passwordRequired": "پاس ورڈ درکار ہے",
+ "rateLimit": "شرح کی حد سے تجاوز کر گیا۔ بعد میں دوبارہ کوشش کریں۔",
+ "loginFailed": "لاگ ان ناکام ہو گیا",
+ "unknownError": "نامعلوم خرابی۔ لاگز چیک کریں۔"
+ }
+ }
+}
diff --git a/web/public/locales/ur/components/camera.json b/web/public/locales/ur/components/camera.json
new file mode 100644
index 000000000..900341ecc
--- /dev/null
+++ b/web/public/locales/ur/components/camera.json
@@ -0,0 +1,17 @@
+{
+ "group": {
+ "delete": {
+ "confirm": {
+ "desc": "کیا آپ واقعی کیمرہ گروپ {{name}} کو حذف کرنا چاہتے ہیں؟",
+ "title": "حذف کی تصدیق کریں"
+ },
+ "label": "کیمرہ گروپ کو حذف کریں"
+ },
+ "label": "کیمرہ گروپس",
+ "add": "کیمرہ گروپ شامل کریں",
+ "edit": "کیمرہ گروپ میں ترمیم کریں",
+ "name": {
+ "label": "نام"
+ }
+ }
+}
diff --git a/web/public/locales/ur/components/dialog.json b/web/public/locales/ur/components/dialog.json
new file mode 100644
index 000000000..6367cafad
--- /dev/null
+++ b/web/public/locales/ur/components/dialog.json
@@ -0,0 +1,24 @@
+{
+ "restart": {
+ "title": "کیا آپ واقعی Frigate کو دوبارہ شروع کرنا چاہتے ہیں؟",
+ "button": "دوبارہ شروع کریں",
+ "restarting": {
+ "title": "فریگیٹ دوبارہ شروع ہو رہا ہے",
+ "content": "یہ صفحہ {{countdown}} سیکنڈ میں دوبارہ لوڈ ہو جائے گا۔",
+ "button": "ابھی دوبارہ لوڈ کرنے پر مجبور کریں"
+ }
+ },
+ "explore": {
+ "plus": {
+ "submitToPlus": {
+ "label": "فریگیٹ+ کو جمع کروائیں",
+ "desc": "ایسے مقامات میں موجود آبجیکٹس جن سے آپ بچنا چاہتے ہیں، جھوٹے مثبت نہیں ہوتے۔ انہیں جھوٹے مثبت کے طور پر جمع کروانے سے ماڈل کنفیوز ہو جائے گا۔"
+ },
+ "review": {
+ "question": {
+ "label": "فریگیٹ پلس کے لیے اس لیبل کی تصدیق کریں"
+ }
+ }
+ }
+ }
+}
diff --git a/web/public/locales/ur/components/filter.json b/web/public/locales/ur/components/filter.json
new file mode 100644
index 000000000..45cd366f2
--- /dev/null
+++ b/web/public/locales/ur/components/filter.json
@@ -0,0 +1,18 @@
+{
+ "filter": "فلٹر",
+ "labels": {
+ "label": "لیبلز",
+ "all": {
+ "title": "تمام لیبلز",
+ "short": "لیبلز"
+ },
+ "count_one": "{{count}} لیبل",
+ "count_other": "{{count}} لیبلز"
+ },
+ "zones": {
+ "label": "زونز",
+ "all": {
+ "title": "تمام زونز"
+ }
+ }
+}
diff --git a/web/public/locales/ur/components/icons.json b/web/public/locales/ur/components/icons.json
new file mode 100644
index 000000000..8c2d81684
--- /dev/null
+++ b/web/public/locales/ur/components/icons.json
@@ -0,0 +1,8 @@
+{
+ "iconPicker": {
+ "selectIcon": "آئیکن منتخب کریں",
+ "search": {
+ "placeholder": "آئیکن تلاش کریں…"
+ }
+ }
+}
diff --git a/web/public/locales/ur/components/input.json b/web/public/locales/ur/components/input.json
new file mode 100644
index 000000000..8b71c9b2c
--- /dev/null
+++ b/web/public/locales/ur/components/input.json
@@ -0,0 +1,10 @@
+{
+ "button": {
+ "downloadVideo": {
+ "label": "ویڈیو ڈاؤن لوڈ کریں",
+ "toast": {
+ "success": "آپ کی جائزے کی ویڈیو ڈاؤن لوڈ ہونا شروع ہو گئی ہے۔"
+ }
+ }
+ }
+}
diff --git a/web/public/locales/ur/components/player.json b/web/public/locales/ur/components/player.json
new file mode 100644
index 000000000..b66f9703c
--- /dev/null
+++ b/web/public/locales/ur/components/player.json
@@ -0,0 +1,13 @@
+{
+ "noRecordingsFoundForThisTime": "اس وقت کے لیے کوئی ریکارڈنگ نہیں ملی",
+ "noPreviewFound": "کوئی پیش نظارہ نہیں ملا",
+ "noPreviewFoundFor": "{{cameraName}} کے لیے کوئی پیش نظارہ نہیں ملا",
+ "submitFrigatePlus": {
+ "title": "اس فریم کو فریگیٹ+ میں جمع کرائیں؟",
+ "submit": "جمع کروائیں"
+ },
+ "livePlayerRequiredIOSVersion": "اس لائیو اسٹریم کی قسم کے لیے iOS 17.1 یا اس سے جدید ورژن درکار ہے۔",
+ "streamOffline": {
+ "title": "آف لائن اسٹریم"
+ }
+}
diff --git a/web/public/locales/ur/objects.json b/web/public/locales/ur/objects.json
new file mode 100644
index 000000000..88a44f18c
--- /dev/null
+++ b/web/public/locales/ur/objects.json
@@ -0,0 +1,9 @@
+{
+ "person": "شخص",
+ "bicycle": "سائیکل",
+ "car": "گاڑی",
+ "motorcycle": "موٹر سائیکل",
+ "airplane": "ہوائی جہاز",
+ "bus": "بس",
+ "train": "ٹرین"
+}
diff --git a/web/public/locales/ur/views/configEditor.json b/web/public/locales/ur/views/configEditor.json
new file mode 100644
index 000000000..e32955e7e
--- /dev/null
+++ b/web/public/locales/ur/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "toast": {
+ "error": {
+ "savingError": "کنفیگریشن محفوظ کرنے میں خرابی"
+ },
+ "success": {
+ "copyToClipboard": "کنفیگ کلپ بورڈ پر کاپی ہو گیا۔"
+ }
+ },
+ "documentTitle": "کنفیگریشن ایڈیٹر - Frigate",
+ "configEditor": "کنفیگریشن ایڈیٹر",
+ "copyConfig": "کنفیگریشن نقل کریں",
+ "saveAndRestart": "محفوظ کریں اور دوبارہ شروع کریں",
+ "saveOnly": "صرف محفوظ کریں",
+ "confirm": "محفوظ کیے بغیر باہر نکلیں؟"
+}
diff --git a/web/public/locales/ur/views/events.json b/web/public/locales/ur/views/events.json
new file mode 100644
index 000000000..517d7dd4c
--- /dev/null
+++ b/web/public/locales/ur/views/events.json
@@ -0,0 +1,14 @@
+{
+ "alerts": "انتباہات",
+ "detections": "کھوج",
+ "motion": {
+ "label": "حرکت",
+ "only": "صرف حرکت"
+ },
+ "allCameras": "تمام کیمرے",
+ "empty": {
+ "alert": "جائزہ لینے کے لیے کوئی انتباہات نہیں ہیں",
+ "detection": "جائزہ لینے کے لیے کوئی ڈیٹیکشن موجود نہیں ہے",
+ "motion": "کوئی موشن ڈیٹا نہیں ملا"
+ }
+}
diff --git a/web/public/locales/ur/views/explore.json b/web/public/locales/ur/views/explore.json
new file mode 100644
index 000000000..2657e801e
--- /dev/null
+++ b/web/public/locales/ur/views/explore.json
@@ -0,0 +1,13 @@
+{
+ "documentTitle": "جائزہ لیں - فریگیٹ",
+ "generativeAI": "جنریٹو اے آئی",
+ "exploreIsUnavailable": {
+ "title": "جائزہ لینا دستیاب نہیں ہے",
+ "embeddingsReindexing": {
+ "context": "جب ٹریک کیے گئے آبجیکٹ ایمبیڈنگز کی دوبارہ انڈیکسنگ مکمل ہو جائےتو \"جائزہ لیں\" استعمال کیا جا سکتا ہے۔",
+ "startingUp": "شروع ہو رہا ہے…",
+ "estimatedTime": "متوقع باقی وقت:"
+ }
+ },
+ "exploreMore": "مزید {{label}} اشیاء کو دریافت کریں"
+}
diff --git a/web/public/locales/ur/views/exports.json b/web/public/locales/ur/views/exports.json
new file mode 100644
index 000000000..395ee163b
--- /dev/null
+++ b/web/public/locales/ur/views/exports.json
@@ -0,0 +1,11 @@
+{
+ "documentTitle": "برآمد - فریگیٹ",
+ "search": "تلاش",
+ "noExports": "کوئی برآمدات نہیں ملے",
+ "deleteExport": "برآمد کو حذف کریں",
+ "deleteExport.desc": "کیا آپ واقعی {{exportName}} کو حذف کرنا چاہتے ہیں؟",
+ "editExport": {
+ "title": "برآمد کا نام تبدیل کریں",
+ "desc": "اس برآمد کے لیے ایک نیا نام درج کریں۔"
+ }
+}
diff --git a/web/public/locales/ur/views/faceLibrary.json b/web/public/locales/ur/views/faceLibrary.json
new file mode 100644
index 000000000..cfb7dce62
--- /dev/null
+++ b/web/public/locales/ur/views/faceLibrary.json
@@ -0,0 +1,13 @@
+{
+ "description": {
+ "addFace": "فیس لائبریری میں نئی کلیکشن شامل کرنے کا طریقہ بتائیں۔",
+ "placeholder": "اس مجموعہ کے لیے ایک نام درج کریں",
+ "invalidName": "غلط نام۔ ناموں میں صرف حروف، اعداد، فاصلے، اپوسٹروف، انڈر اسکور، اور ہائفن شامل ہو سکتے ہیں۔"
+ },
+ "details": {
+ "face": "چہرے کی تفصیلات",
+ "person": "شخص",
+ "subLabelScore": "سب لیبل سکور",
+ "scoreInfo": "سب لیبل سکور تمام تسلیم شدہ چہرے کے اعتماد کے لیے وزنی سکور ہے، اس لیے یہ سنیپ شاٹ پر دکھائے گئے سکور سے مختلف ہو سکتا ہے۔"
+ }
+}
diff --git a/web/public/locales/ur/views/live.json b/web/public/locales/ur/views/live.json
new file mode 100644
index 000000000..cace61173
--- /dev/null
+++ b/web/public/locales/ur/views/live.json
@@ -0,0 +1,13 @@
+{
+ "documentTitle": "لائیو - فریگیٹ",
+ "documentTitle.withCamera": "{{camera}} -براہِ راست - فریگیٹ",
+ "lowBandwidthMode": "کم بینڈوتھ موڈ",
+ "twoWayTalk": {
+ "enable": "دو طرفہ گفتگو کو فعال کریں",
+ "disable": "دو طرفہ گفتگو کو غیر فعال کریں"
+ },
+ "cameraAudio": {
+ "enable": "کیمرہ آڈیو فعال کریں",
+ "disable": "کیمرہ آڈیو کو غیر فعال کریں"
+ }
+}
diff --git a/web/public/locales/ur/views/recording.json b/web/public/locales/ur/views/recording.json
new file mode 100644
index 000000000..5ec347455
--- /dev/null
+++ b/web/public/locales/ur/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "filter": "فلٹر",
+ "export": "برآمد",
+ "calendar": "کیلنڈر",
+ "filters": "فلٹرز",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "درست وقت کی حد منتخب نہیں کی گئی",
+ "endTimeMustAfterStartTime": "اختتامی وقت آغاز کے وقت کے بعد ہونا چاہیے"
+ }
+ }
+}
diff --git a/web/public/locales/ur/views/search.json b/web/public/locales/ur/views/search.json
new file mode 100644
index 000000000..5e73fa462
--- /dev/null
+++ b/web/public/locales/ur/views/search.json
@@ -0,0 +1,11 @@
+{
+ "search": "تلاش",
+ "savedSearches": "محفوظ شدہ تلاشیں",
+ "searchFor": "{{inputValue}} تلاش کریں",
+ "button": {
+ "clear": "تلاش صاف کریں",
+ "save": "تلاش کو محفوظ کریں",
+ "delete": "محفوظ کردہ تلاش کو حذف کریں",
+ "filterInformation": "معلومات کو فلٹر کریں"
+ }
+}
diff --git a/web/public/locales/ur/views/settings.json b/web/public/locales/ur/views/settings.json
new file mode 100644
index 000000000..d7172abcb
--- /dev/null
+++ b/web/public/locales/ur/views/settings.json
@@ -0,0 +1,11 @@
+{
+ "documentTitle": {
+ "default": "ترتیبات - فریگیٹ",
+ "authentication": "تصدیق کی ترتیبات - فریگیٹ",
+ "camera": "کیمرے کی ترتیبات - فریگیٹ",
+ "masksAndZones": "ماسک اور زون ایڈیٹر - فریگیٹ",
+ "motionTuner": "موشن ٹونر - فریگیٹ",
+ "object": "ڈی بگ - فریگیٹ",
+ "enrichments": "افزودگی کی ترتیبات - فریگیٹ"
+ }
+}
diff --git a/web/public/locales/ur/views/system.json b/web/public/locales/ur/views/system.json
new file mode 100644
index 000000000..3cc08e1c4
--- /dev/null
+++ b/web/public/locales/ur/views/system.json
@@ -0,0 +1,13 @@
+{
+ "documentTitle": {
+ "cameras": "کیمروں کے اعدادوشمار - فریگیٹ",
+ "storage": "اسٹوریج کے اعدادوشمار - فریگیٹ",
+ "general": "عمومی اعدادوشمار - فریگیٹ",
+ "enrichments": "افزودگی کے اعدادوشمار - فریگیٹ",
+ "logs": {
+ "frigate": "فریگیٹ لاگز - فریگیٹ",
+ "go2rtc": "Go2RTC لاگز - فریگیٹ",
+ "nginx": "Nginx لاگز - فریگیٹ"
+ }
+ }
+}
diff --git a/web/public/locales/vi/audio.json b/web/public/locales/vi/audio.json
new file mode 100644
index 000000000..07561cc51
--- /dev/null
+++ b/web/public/locales/vi/audio.json
@@ -0,0 +1,429 @@
+{
+ "babbling": "Nói líu lo",
+ "bellow": "Gầm rú",
+ "whoop": "Hò reo",
+ "whispering": "Thì thầm",
+ "laughter": "Tiếng cười",
+ "snicker": "Cười khúc khích",
+ "sigh": "Thở dài",
+ "singing": "Hát",
+ "choir": "Dàn hợp xướng",
+ "yodeling": "Hát ngân nga",
+ "chant": "Hát đồng ca",
+ "mantra": "Thần chú",
+ "synthetic_singing": "Giọng hát tổng hợp",
+ "rapping": "Rap",
+ "humming": "Ngân nga",
+ "groan": "Rên rỉ",
+ "grunt": "Gằn giọng",
+ "whistling": "Huýt sáo",
+ "breathing": "Hít thở",
+ "wheeze": "Thở khò khè",
+ "gasp": "Thở hổn hển",
+ "pant": "Thở gấp",
+ "snort": "Khịt mũi",
+ "cough": "Ho",
+ "throat_clearing": "Hắng giọng",
+ "sneeze": "Hắt hơi",
+ "sniff": "Hít mũi",
+ "crying": "Khóc",
+ "yell": "La hét",
+ "snoring": "Ngáy",
+ "speech": "Giọng nói",
+ "child_singing": "Trẻ con hát",
+ "run": "Chạy",
+ "shuffle": "Kéo lê chân",
+ "footsteps": "Tiếng bước chân",
+ "chewing": "Nhai",
+ "biting": "Cắn",
+ "gargling": "Súc miệng",
+ "stomach_rumble": "Bụng sôi",
+ "burping": "Ợ",
+ "hiccup": "Nấc cụt",
+ "fart": "Đánh rắm",
+ "artillery_fire": "Tiếng pháo kích",
+ "cap_gun": "Tiếng súng giấy",
+ "fireworks": "Tiếng pháo hoa",
+ "firecracker": "Tiếng pháo nổ",
+ "burst": "Tiếng nổ bung",
+ "eruption": "Tiếng phun trào",
+ "boom": "Tiếng bùm",
+ "wood": "Tiếng gỗ",
+ "chop": "Tiếng chặt",
+ "splinter": "Tiếng gỗ vỡ",
+ "crack": "Tiếng nứt",
+ "glass": "Tiếng thủy tinh",
+ "chink": "Tiếng leng keng",
+ "shatter": "Tiếng vỡ vụn",
+ "silence": "Sự im lặng",
+ "sound_effect": "Hiệu ứng âm thanh",
+ "environmental_noise": "Tiếng ồn môi trường",
+ "static": "Tiếng nhiễu",
+ "white_noise": "Tiếng trắng",
+ "pink_noise": "Tiếng hồng",
+ "television": "Tiếng tivi",
+ "hands": "Tay",
+ "finger_snapping": "Búng tay",
+ "clapping": "Vỗ tay",
+ "heartbeat": "Nhịp tim",
+ "heart_murmur": "Tiếng thổi tim",
+ "cheering": "Cổ vũ",
+ "applause": "Tràng pháo tay",
+ "chatter": "Nói chuyện rì rầm",
+ "crowd": "Đám đông",
+ "children_playing": "Trẻ con chơi",
+ "animal": "Động vật",
+ "pets": "Thú cưng",
+ "dog": "Chó",
+ "bark": "Sủa",
+ "yip": "Sủa nhỏ",
+ "howl": "Hú",
+ "bow_wow": "Gâu gâu",
+ "growling": "Gầm gừ",
+ "whimper_dog": "Rên rỉ (chó)",
+ "livestock": "Gia súc",
+ "cat": "Mèo",
+ "purr": "Rù rì",
+ "meow": "Meo meo",
+ "hiss": "Phì phì",
+ "caterwaul": "Tiếng mèo gào",
+ "horse": "Ngựa",
+ "clip_clop": "Lộc cộc",
+ "neigh": "Hí (ngựa)",
+ "cattle": "Bò",
+ "moo": "Bò rống",
+ "cowbell": "Chuông bò",
+ "pig": "Heo",
+ "oink": "Ụt ịt",
+ "goat": "Dê",
+ "bleat": "Kêu be be",
+ "sheep": "Cừu",
+ "fowl": "Gia cầm",
+ "chicken": "Gà",
+ "cluck": "Cục tác",
+ "cock_a_doodle_doo": "Gáy (gà trống)",
+ "turkey": "Gà tây",
+ "gobble": "Gù gù (gà tây)",
+ "duck": "Vịt",
+ "quack": "Quạc quạc",
+ "goose": "Ngỗng",
+ "roar": "Gầm rú",
+ "bird": "Chim",
+ "chirp": "Hót líu lo",
+ "squawk": "Kêu the thé",
+ "honk": "Kêu vang (ngỗng)",
+ "wild_animals": "Động vật hoang dã",
+ "roaring_cats": "Mèo lớn gầm",
+ "pigeon": "Bồ câu",
+ "coo": "Cục cu",
+ "crow": "Quạ",
+ "caw": "Kêu quạ quạ",
+ "owl": "Cú mèo",
+ "hoot": "Kêu tu hú",
+ "flapping_wings": "Vỗ cánh",
+ "dogs": "Nhiều con chó",
+ "rats": "Chuột cống",
+ "mouse": "Chuột nhắt",
+ "patter": "Lách cách (bước chân nhỏ)",
+ "insect": "Côn trùng",
+ "cricket": "Dế",
+ "mosquito": "Muỗi",
+ "fly": "Ruồi",
+ "buzz": "Vo ve",
+ "frog": "Ếch",
+ "croak": "Ếch kêu",
+ "snake": "Rắn",
+ "rattle": "Lắc lư / lách cách",
+ "whale_vocalization": "Tiếng cá voi",
+ "music": "Âm nhạc",
+ "musical_instrument": "Nhạc cụ",
+ "plucked_string_instrument": "Nhạc cụ dây gảy",
+ "guitar": "Đàn guitar",
+ "electric_guitar": "Đàn guitar điện",
+ "bass_guitar": "Đàn guitar bass",
+ "acoustic_guitar": "Đàn guitar acoustic",
+ "steel_guitar": "Đàn steel guitar",
+ "tapping": "Kỹ thuật tapping",
+ "strum": "Gảy đàn",
+ "banjo": "Đàn banjo",
+ "sitar": "Đàn sitar",
+ "mandolin": "Đàn mandolin",
+ "zither": "Đàn tranh",
+ "ukulele": "Đàn ukulele",
+ "keyboard": "Bàn phím nhạc",
+ "piano": "Đàn piano",
+ "electric_piano": "đàn piano điện",
+ "organ": "Đàn organ",
+ "electronic_organ": "Đàn organ điện tử",
+ "hammond_organ": "Đàn organ Hammond",
+ "synthesizer": "Bộ tổng hợp âm",
+ "sampler": "Thiết bị lấy mẫu âm thanh",
+ "harpsichord": "Đàn harpsichord",
+ "percussion": "Bộ gõ",
+ "drum_kit": "Bộ trống",
+ "drum_machine": "Máy trống",
+ "drum": "Tiếng trống",
+ "snare_drum": "Trống snare",
+ "rimshot": "Gõ vành trống",
+ "drum_roll": "Cuộn trống",
+ "bass_drum": "Trống bass",
+ "timpani": "Trống timpani",
+ "tabla": "Trống tabla",
+ "cymbal": "Tiếng chũm chọe",
+ "hi_hat": "Tiếng hi-hat",
+ "wood_block": "Khối gỗ gõ",
+ "tambourine": "Trống lắc",
+ "maraca": "Tiếng lắc maraca",
+ "gong": "Tiếng chiêng",
+ "tubular_bells": "Chuông ống",
+ "mallet_percussion": "Nhạc cụ gõ bằng dùi",
+ "marimba": "Đàn marimba",
+ "glockenspiel": "Chuông gõ glockenspiel",
+ "vibraphone": "Đàn vibraphone",
+ "steelpan": "Trống thép",
+ "orchestra": "Dàn nhạc giao hưởng",
+ "brass_instrument": "Nhạc cụ đồng",
+ "french_horn": "Kèn Pháp",
+ "trumpet": "Kèn trumpet",
+ "trombone": "Kèn trombone",
+ "bowed_string_instrument": "Nhạc cụ dây kéo",
+ "string_section": "Dàn dây",
+ "violin": "Đàn violin",
+ "pizzicato": "Gảy dây pizzicato",
+ "cello": "Đàn cello",
+ "double_bass": "Đàn contrabass",
+ "wind_instrument": "Nhạc cụ hơi",
+ "flute": "Tiếng sáo",
+ "saxophone": "Kèn saxophone",
+ "clarinet": "Kèn clarinet",
+ "harp": "Đàn harp",
+ "bell": "Chuông",
+ "church_bell": "Chuông nhà thờ",
+ "jingle_bell": "Chuông leng keng",
+ "bicycle_bell": "Chuông xe đạp",
+ "tuning_fork": "Âm thoa",
+ "chime": "Tiếng chuỗi chuông",
+ "wind_chime": "Tiếng chuông gió",
+ "harmonica": "Tiếng kèn harmonica",
+ "accordion": "Tiếng đàn accordion",
+ "bagpipes": "Tiếng kèn túi",
+ "didgeridoo": "Tiếng kèn didgeridoo",
+ "theremin": "Tiếng nhạc cụ theremin",
+ "singing_bowl": "Tiếng chuông xoay Tây Tạng",
+ "scratching": "Scratch nhạc (xoay đĩa)",
+ "pop_music": "Nhạc pop",
+ "hip_hop_music": "Nhạc hip hop",
+ "beatboxing": "Beatbox",
+ "rock_music": "Nhạc rock",
+ "heavy_metal": "Nhạc heavy metal",
+ "punk_rock": "Nhạc punk rock",
+ "grunge": "Nhạc grunge",
+ "progressive_rock": "Nhạc rock tiến bộ",
+ "rock_and_roll": "Nhạc rock and roll",
+ "psychedelic_rock": "Nhạc rock ảo giác",
+ "rhythm_and_blues": "Nhạc R&B",
+ "soul_music": "Nhạc soul",
+ "reggae": "Nhạc reggae",
+ "country": "Nhạc đồng quê",
+ "swing_music": "Nhạc swing",
+ "bluegrass": "Nhạc bluegrass",
+ "funk": "Nhạc funk",
+ "folk_music": "Nhạc dân gian",
+ "middle_eastern_music": "Nhạc Trung Đông",
+ "jazz": "Nhạc jazz",
+ "disco": "Nhạc disco",
+ "classical_music": "Nhạc cổ điển",
+ "opera": "Nhạc opera",
+ "electronic_music": "Nhạc điện tử",
+ "house_music": "Nhạc house",
+ "techno": "Nhạc techno",
+ "dubstep": "Nhạc dubstep",
+ "drum_and_bass": "Nhạc trống và bass",
+ "electronica": "Nhạc electronica",
+ "electronic_dance_music": "Nhạc nhảy điện tử",
+ "ambient_music": "Nhạc nền",
+ "trance_music": "Nhạc trance",
+ "music_of_latin_america": "Nhạc Mỹ Latinh",
+ "salsa_music": "Nhạc salsa",
+ "flamenco": "Nhạc flamenco",
+ "blues": "Nhạc blues",
+ "music_for_children": "Nhạc thiếu nhi",
+ "new-age_music": "Nhạc thời đại mới",
+ "vocal_music": "Nhạc thanh nhạc",
+ "a_capella": "Nhạc a cappella",
+ "music_of_africa": "Nhạc châu Phi",
+ "afrobeat": "Nhạc afrobeat",
+ "christian_music": "Nhạc Cơ Đốc",
+ "gospel_music": "Nhạc phúc âm",
+ "music_of_asia": "Nhạc châu Á",
+ "carnatic_music": "Nhạc Carnatic",
+ "music_of_bollywood": "Nhạc Bollywood",
+ "ska": "Nhạc ska",
+ "traditional_music": "Nhạc truyền thống",
+ "independent_music": "Nhạc indie",
+ "song": "Bài hát",
+ "background_music": "Nhạc nền",
+ "theme_music": "Nhạc chủ đề",
+ "jingle": "Nhạc quảng cáo",
+ "soundtrack_music": "Nhạc phim",
+ "lullaby": "Tiếng ru",
+ "video_game_music": "Nhạc trò chơi",
+ "christmas_music": "Nhạc Giáng Sinh",
+ "dance_music": "Nhạc khiêu vũ",
+ "wedding_music": "Nhạc đám cưới",
+ "happy_music": "Nhạc vui",
+ "sad_music": "Nhạc buồn",
+ "tender_music": "Nhạc nhẹ nhàng",
+ "exciting_music": "Nhạc sôi động",
+ "angry_music": "Nhạc tức giận",
+ "scary_music": "Nhạc rùng rợn",
+ "wind": "Tiếng gió",
+ "rustling_leaves": "Tiếng lá xào xạc",
+ "wind_noise": "Tiếng gió rít",
+ "thunderstorm": "Tiếng giông bão",
+ "water": "Tiếng nước",
+ "thunder": "Tiếng sấm",
+ "rain": "Tiếng mưa",
+ "raindrop": "Tiếng giọt mưa",
+ "rain_on_surface": "Tiếng mưa rơi",
+ "stream": "Tiếng suối",
+ "waterfall": "Tiếng thác nước",
+ "ocean": "Tiếng biển",
+ "waves": "Tiếng sóng",
+ "steam": "Tiếng hơi nước",
+ "gurgling": "Tiếng róc rách",
+ "fire": "Tiếng lửa",
+ "crackle": "Tiếng tí tách",
+ "vehicle": "Tiếng phương tiện",
+ "boat": "Tiếng thuyền",
+ "sailboat": "Tiếng thuyền buồm",
+ "rowboat": "Tiếng chèo thuyền",
+ "motorboat": "Tiếng xuồng máy",
+ "ship": "Tiếng tàu",
+ "motor_vehicle": "Tiếng xe cơ giới",
+ "car": "Tiếng xe ô tô",
+ "toot": "Tiếng bấm còi",
+ "car_alarm": "Tiếng báo động ô tô",
+ "power_windows": "Tiếng cửa kính xe",
+ "skidding": "Tiếng trượt bánh",
+ "tire_squeal": "Tiếng lốp rít",
+ "car_passing_by": "Tiếng xe chạy qua",
+ "race_car": "Tiếng xe đua",
+ "truck": "Tiếng xe tải",
+ "ice_cream_truck": "Tiếng xe kem",
+ "air_brake": "Tiếng phanh hơi",
+ "air_horn": "Tiếng còi hơi",
+ "reversing_beeps": "Tiếng kêu lùi xe",
+ "bus": "Tiếng xe buýt",
+ "emergency_vehicle": "Tiếng xe khẩn cấp",
+ "police_car": "Tiếng xe cảnh sát",
+ "ambulance": "Tiếng xe cứu thương",
+ "fire_engine": "Tiếng xe cứu hỏa",
+ "motorcycle": "Tiếng xe máy",
+ "traffic_noise": "Tiếng giao thông",
+ "rail_transport": "Tiếng đường sắt",
+ "train_horn": "Tiếng còi tàu hỏa",
+ "railroad_car": "Tiếng toa tàu",
+ "train": "Tiếng tàu hỏa",
+ "train_whistle": "Tiếng còi tàu",
+ "train_wheels_squealing": "Tiếng bánh tàu rít",
+ "subway": "Tiếng tàu điện ngầm",
+ "aircraft": "Tiếng máy bay",
+ "aircraft_engine": "Tiếng động cơ máy bay",
+ "jet_engine": "Tiếng động cơ phản lực",
+ "propeller": "Tiếng cánh quạt",
+ "helicopter": "Tiếng trực thăng",
+ "fixed-wing_aircraft": "Tiếng máy bay cánh cố định",
+ "bicycle": "Tiếng xe đạp",
+ "skateboard": "Tiếng ván trượt",
+ "engine": "Tiếng động cơ",
+ "light_engine": "Tiếng động cơ nhẹ",
+ "dental_drill's_drill": "Tiếng khoan nha khoa",
+ "lawn_mower": "Tiếng máy cắt cỏ",
+ "chainsaw": "Tiếng cưa máy",
+ "medium_engine": "Tiếng động cơ vừa",
+ "heavy_engine": "Tiếng động cơ nặng",
+ "engine_knocking": "Tiếng gõ máy",
+ "engine_starting": "Tiếng khởi động động cơ",
+ "ding-dong": "Tiếng ding-dong",
+ "idling": "Tiếng nổ không tải",
+ "accelerating": "Tiếng tăng tốc",
+ "door": "Tiếng cửa",
+ "doorbell": "Tiếng chuông cửa",
+ "sliding_door": "Tiếng cửa trượt",
+ "slam": "Tiếng đóng sầm",
+ "knock": "Tiếng gõ cửa",
+ "tap": "Tiếng gõ nhẹ",
+ "squeak": "Tiếng kêu cót két",
+ "cupboard_open_or_close": "Tiếng mở/đóng tủ",
+ "drawer_open_or_close": "Tiếng mở/đóng ngăn kéo",
+ "dishes": "Tiếng bát đĩa",
+ "cutlery": "Tiếng dao nĩa",
+ "chopping": "Tiếng băm chặt",
+ "frying": "Tiếng chiên xào",
+ "microwave_oven": "Tiếng lò vi sóng",
+ "blender": "Tiếng máy xay",
+ "water_tap": "Tiếng vòi nước",
+ "sink": "Tiếng bồn rửa",
+ "bathtub": "Tiếng bồn tắm",
+ "coin": "Tiếng đồng xu",
+ "hair_dryer": "Tiếng máy sấy tóc",
+ "toilet_flush": "Tiếng xả nước",
+ "toothbrush": "Tiếng bàn chải",
+ "electric_toothbrush": "Tiếng bàn chải điện",
+ "vacuum_cleaner": "Tiếng máy hút bụi",
+ "zipper": "Tiếng dây kéo",
+ "keys_jangling": "Tiếng chìa khóa leng keng",
+ "scissors": "Tiếng kéo cắt",
+ "electric_shaver": "Tiếng máy cạo râu",
+ "shuffling_cards": "Tiếng xào bài",
+ "typing": "Tiếng gõ phím",
+ "typewriter": "Tiếng máy đánh chữ",
+ "computer_keyboard": "Tiếng bàn phím",
+ "writing": "Tiếng viết",
+ "alarm": "Tiếng báo động",
+ "telephone": "Tiếng điện thoại",
+ "telephone_bell_ringing": "Tiếng chuông điện thoại",
+ "ringtone": "Tiếng nhạc chuông",
+ "telephone_dialing": "Tiếng quay số",
+ "dial_tone": "Tiếng âm quay số",
+ "busy_signal": "Tiếng tín hiệu bận",
+ "alarm_clock": "Tiếng đồng hồ báo thức",
+ "siren": "Tiếng còi báo động",
+ "civil_defense_siren": "Tiếng còi phòng không",
+ "buzzer": "Tiếng chuông báo",
+ "smoke_detector": "Tiếng báo khói",
+ "fire_alarm": "Tiếng báo cháy",
+ "foghorn": "Tiếng còi sương",
+ "whistle": "Tiếng còi",
+ "steam_whistle": "Tiếng còi hơi",
+ "mechanisms": "Tiếng cơ khí",
+ "ratchet": "Tiếng cơ cấu bánh cóc",
+ "clock": "Tiếng đồng hồ",
+ "tick": "Tiếng tích",
+ "tick-tock": "Tiếng tích tắc",
+ "gears": "Tiếng bánh răng",
+ "pulleys": "Tiếng ròng rọc",
+ "sewing_machine": "Tiếng máy may",
+ "camera": "Tiếng máy ảnh",
+ "single-lens_reflex_camera": "Tiếng máy ảnh DSLR",
+ "mechanical_fan": "Tiếng quạt máy",
+ "air_conditioning": "Tiếng máy lạnh",
+ "cash_register": "Tiếng máy tính tiền",
+ "printer": "Tiếng máy in",
+ "tools": "Tiếng dụng cụ",
+ "hammer": "Tiếng búa",
+ "jackhammer": "Tiếng khoan bê tông",
+ "sawing": "Tiếng cưa",
+ "filing": "Tiếng giũa",
+ "sanding": "Tiếng chà nhám",
+ "power_tool": "Tiếng dụng cụ điện",
+ "drill": "Tiếng máy khoan",
+ "explosion": "Tiếng nổ",
+ "gunshot": "Tiếng súng",
+ "machine_gun": "Tiếng súng máy",
+ "fusillade": "Tiếng loạt súng",
+ "radio": "Tiếng radio",
+ "field_recording": "Ghi âm hiện trường",
+ "scream": "Tiếng hét"
+}
diff --git a/web/public/locales/vi/common.json b/web/public/locales/vi/common.json
new file mode 100644
index 000000000..6a0b803a7
--- /dev/null
+++ b/web/public/locales/vi/common.json
@@ -0,0 +1,261 @@
+{
+ "time": {
+ "untilRestart": "Đến khi khởi động lại",
+ "untilForTime": "Cho đến khi {{time}}",
+ "untilForRestart": "Cho đến khi Frigate khởi động lại.",
+ "ago": "{{timeAgo}} trước",
+ "formattedTimestamp": {
+ "12hour": "d MMM, h:mm:ss aaa",
+ "24hour": "d MMM, HH:mm:ss"
+ },
+ "year_other": "{{time}} năm",
+ "month_other": "{{time}} tháng",
+ "day_other": "{{time}} ngày",
+ "hour_other": "{{time}} giờ",
+ "minute_other": "{{time}} phút",
+ "second_other": "{{time}} giây",
+ "justNow": "Vừa xong",
+ "today": "Hôm nay",
+ "yesterday": "Hôm qua",
+ "last7": "7 ngày qua",
+ "last14": "14 ngày qua",
+ "last30": "30 ngày qua",
+ "thisWeek": "Tuần này",
+ "lastWeek": "Tuần trước",
+ "thisMonth": "Tháng này",
+ "lastMonth": "Tháng trước",
+ "5minutes": "5 phút",
+ "10minutes": "10 phút",
+ "30minutes": "30 phút",
+ "1hour": "1 giờ",
+ "12hours": "12 giờ",
+ "24hours": "24 giờ",
+ "pm": "pm",
+ "am": "am",
+ "mo": "{{time}} tháng",
+ "d": "{{time}} ngày",
+ "m": "{{time}} phút",
+ "s": "{{time}} giây",
+ "formattedTimestamp2": {
+ "12hour": "dd/MM h:mm:ssa",
+ "24hour": "d MMM HH:mm:ss"
+ },
+ "formattedTimestampExcludeSeconds": {
+ "12hour": "thời gian 12 giờ (không giây)",
+ "24hour": "thời gian 24 giờ (không giây)"
+ },
+ "formattedTimestampWithYear": {
+ "12hour": "thời gian 12 giờ kèm năm",
+ "24hour": "thời gian 24 giờ kèm năm"
+ },
+ "formattedTimestampOnlyMonthAndDay": "chỉ tháng và ngày",
+ "yr": "{{time}} năm",
+ "h": "{{time}} giờ",
+ "formattedTimestampMonthDayYear": {
+ "12hour": "d MMM, yyyy",
+ "24hour": "d MMM, yyyy"
+ },
+ "formattedTimestampHourMinute": {
+ "12hour": "h:mm aaa",
+ "24hour": "HH:mm"
+ },
+ "formattedTimestampHourMinuteSecond": {
+ "12hour": "h:mm:ss aaa",
+ "24hour": "HH:mm:ss"
+ },
+ "formattedTimestampMonthDayHourMinute": {
+ "12hour": "d MMM, h:mm aaa",
+ "24hour": "d MMM, HH:mm"
+ },
+ "formattedTimestampMonthDayYearHourMinute": {
+ "12hour": "d MMM yyyy, h:mm aaa",
+ "24hour": "d MMM yyyy, HH:mm"
+ },
+ "formattedTimestampMonthDay": "d MMM",
+ "formattedTimestampFilename": {
+ "12hour": "dd-MM-yy-h-mm-ss-a",
+ "24hour": "dd-MM-yy-HH-mm-s"
+ }
+ },
+ "menu": {
+ "systemLogs": "Nhật ký hệ thống",
+ "user": {
+ "account": "Tài khoản",
+ "anonymous": "Ẩn danh",
+ "logout": "Đăng xuất",
+ "setPassword": "Đặt mật khẩu",
+ "current": "Người dùng hiện tại: {{user}}",
+ "title": "Người dùng"
+ },
+ "language": {
+ "en": "Tiếng Anh",
+ "es": "Tiếng Tây Ban Nha",
+ "zhCN": "Tiếng Trung (Giản thể)",
+ "ar": "Tiếng Ả Rập",
+ "hi": "Tiếng Hindi",
+ "fr": "Tiếng Pháp",
+ "pt": "Tiếng Bồ Đào Nha",
+ "ru": "Tiếng Nga",
+ "de": "Tiếng Đức",
+ "ja": "Tiếng Nhật",
+ "tr": "Tiếng Thổ Nhĩ Kỳ",
+ "it": "Tiếng Ý",
+ "nl": "Tiếng Hà Lan",
+ "sv": "Tiếng Thụy Điển",
+ "cs": "Tiếng Séc",
+ "nb": "Tiếng Na Uy",
+ "ko": "Tiếng Hàn",
+ "pl": "Tiếng Ba Lan",
+ "vi": "Tiếng Việt",
+ "fa": "Tiếng Ba Tư",
+ "uk": "Tiếng Ukraina",
+ "he": "Tiếng Do Thái",
+ "el": "Tiếng Hy Lạp",
+ "ro": "Tiếng Romania",
+ "hu": "Tiếng Hungary",
+ "fi": "Tiếng Phần Lan",
+ "da": "Tiếng Đan Mạch",
+ "sk": "Tiếng Slovakia",
+ "withSystem": {
+ "label": "Theo hệ thống"
+ },
+ "yue": "Tiếng Quảng Đông",
+ "ca": "Tiếng Catalan",
+ "th": "Tiếng Thái Lan"
+ },
+ "system": "Hệ thống",
+ "systemMetrics": "Thông số hệ thống",
+ "configuration": "Cấu hình",
+ "settings": "Cài đặt",
+ "configurationEditor": "Trình chỉnh sửa cấu hình",
+ "languages": "Ngôn ngữ",
+ "appearance": "Giao diện",
+ "darkMode": {
+ "label": "Chế độ tối",
+ "light": "Sáng",
+ "dark": "Tối",
+ "withSystem": {
+ "label": "Theo hệ thống"
+ }
+ },
+ "withSystem": "Hệ thống",
+ "theme": {
+ "label": "Giao diện",
+ "red": "Đỏ",
+ "contrast": "tương phản",
+ "blue": "Xanh dương",
+ "green": "Xanh lá",
+ "nord": "Nord",
+ "default": "Mặc định",
+ "highcontrast": "Độ tương phản cao"
+ },
+ "help": "Trợ giúp",
+ "documentation": {
+ "title": "Tài liệu",
+ "label": "Hướng dẫn"
+ },
+ "restart": "Khởi động lại",
+ "live": {
+ "title": "Trực tiếp",
+ "allCameras": "Tất cả Camera",
+ "cameras": {
+ "title": "Camera",
+ "count_other": "{{count}} Camera"
+ }
+ },
+ "review": "Xem lại",
+ "explore": "Khám phá",
+ "export": "Xuất",
+ "uiPlayground": "UI Playground",
+ "faceLibrary": "Thư viện khuôn mặt"
+ },
+ "unit": {
+ "speed": {
+ "mph": "mph (dặm/giờ)",
+ "kph": "km/h (kilômét/giờ)"
+ },
+ "length": {
+ "meters": "mét (m)",
+ "feet": "feet (ft)"
+ }
+ },
+ "label": {
+ "back": "Quay lại"
+ },
+ "button": {
+ "apply": "Áp dụng",
+ "reset": "Đặt lại",
+ "done": "Xong",
+ "enabled": "Đã bật",
+ "enable": "Bật",
+ "disabled": "Đã tắt",
+ "disable": "Tắt",
+ "save": "Lưu",
+ "cancel": "Hủy",
+ "close": "Đóng",
+ "copy": "Sao chép",
+ "back": "Quay lại",
+ "history": "Lịch sử",
+ "fullscreen": "Toàn màn hình",
+ "on": "Bật",
+ "exitFullscreen": "Thoát toàn màn hình",
+ "pictureInPicture": "Hình trong hình",
+ "twoWayTalk": "Đàm thoại hai chiều",
+ "cameraAudio": "Âm thanh Camera",
+ "off": "Tắt",
+ "edit": "Chỉnh sửa",
+ "copyCoordinates": "Sao chép tọa độ",
+ "delete": "Xóa",
+ "yes": "Có",
+ "no": "Không",
+ "download": "Tải xuống",
+ "info": "Thông tin",
+ "suspended": "Đã tạm dừng",
+ "unsuspended": "Khôi phục",
+ "play": "Phát",
+ "unselect": "Bỏ chọn",
+ "export": "Xuất",
+ "deleteNow": "Xóa ngay",
+ "next": "Tiếp theo",
+ "saving": "Đang lưu…"
+ },
+ "toast": {
+ "copyUrlToClipboard": "Đã sao chép liên kết.",
+ "save": {
+ "title": "Lưu thành công",
+ "error": {
+ "noMessage": "Không thể lưu thay đổi cấu hình",
+ "title": "Lỗi khi lưu thay đổi cấu hình: {{errorMessage}}"
+ }
+ }
+ },
+ "role": {
+ "title": "Vai trò",
+ "admin": "Quản trị viên",
+ "viewer": "Người xem",
+ "desc": "Quản trị viên có toàn quyền truy cập tất cả các tính năng trong giao diện Frigate. Người xem chỉ được phép xem camera, mục đã ghi lại và các đoạn video lịch sử trong giao diện."
+ },
+ "pagination": {
+ "label": "Trang",
+ "previous": {
+ "title": "Trước đó",
+ "label": "Trước"
+ },
+ "next": {
+ "title": "Kế tiếp",
+ "label": "Tiếp"
+ },
+ "more": "Xem thêm"
+ },
+ "accessDenied": {
+ "documentTitle": "Từ chối truy cập",
+ "title": "Truy cập bị từ chối",
+ "desc": "Bạn không có quyền truy cập vào trang này."
+ },
+ "notFound": {
+ "documentTitle": "Không tìm thấy",
+ "title": "Không tìm thấy",
+ "desc": "Trang bạn đang tìm không tồn tại"
+ },
+ "selectItem": "Chọn mục {{item}}"
+}
diff --git a/web/public/locales/vi/components/auth.json b/web/public/locales/vi/components/auth.json
new file mode 100644
index 000000000..3d942b9c2
--- /dev/null
+++ b/web/public/locales/vi/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "user": "Tên người dùng",
+ "password": "Mật khẩu",
+ "login": "Đăng nhập",
+ "errors": {
+ "usernameRequired": "Tên người dùng là bắt buộc",
+ "passwordRequired": "Mật khẩu là bắt buộc",
+ "rateLimit": "Đã vượt quá giới hạn tốc độ. Hãy thử lại sau.",
+ "loginFailed": "Đăng nhập không thành công",
+ "unknownError": "Lỗi không xác định. Kiểm tra nhật ký.",
+ "webUnknownError": "Lỗi không xác định. Kiểm tra nhật ký bảng điều khiển."
+ }
+ }
+}
diff --git a/web/public/locales/vi/components/camera.json b/web/public/locales/vi/components/camera.json
new file mode 100644
index 000000000..07617eb47
--- /dev/null
+++ b/web/public/locales/vi/components/camera.json
@@ -0,0 +1,86 @@
+{
+ "group": {
+ "delete": {
+ "label": "Xóa nhóm Camera",
+ "confirm": {
+ "title": "Xác nhận xóa",
+ "desc": "Bạn có chắc chắn muốn xóa nhóm camera {{name}} không?"
+ }
+ },
+ "label": "Các nhóm Camera",
+ "add": "Thêm nhóm Camera",
+ "camera": {
+ "setting": {
+ "stream": "Trực tiếp",
+ "audio": {
+ "tips": {
+ "title": "Âm thanh phải được xuất từ camera của bạn và được định cấu hình trong go2rtc cho luồng này.",
+ "document": "Đọc tài liệu "
+ }
+ },
+ "desc": "Thay đổi các tùy chọn truyền phát trực tiếp cho bảng điều khiển của nhóm camera này.Các cài đặt này dành riêng cho thiết bị/trình duyệt..",
+ "streamMethod": {
+ "method": {
+ "noStreaming": {
+ "desc": "Hình ảnh camera sẽ chỉ cập nhật mỗi phút một lần và không có truyền phát nào xảy ra.",
+ "label": "Không truyền phát"
+ },
+ "continuousStreaming": {
+ "desc": {
+ "title": "Hình ảnh camera sẽ luôn là luồng trực tiếp khi hiển thị trên bảng điều khiển, ngay cả khi không có hoạt động nào được phát hiện.",
+ "warning": "Truyền phát liên tục có thể gây ra sử dụng băng thông cao và các vấn đề về hiệu suất. Sử dụng một cách thận trọng."
+ },
+ "label": "Truyền phát liên tục"
+ },
+ "smartStreaming": {
+ "label": "Truyền phát Thông minh (khuyến nghị)",
+ "desc": "Truyền phát thông minh sẽ cập nhật hình ảnh camera của bạn mỗi phút một lần khi không có hoạt động nào được phát hiện để tiết kiệm băng thông và tài nguyên. Khi phát hiện hoạt động, hình ảnh sẽ chuyển đổi liền mạch sang luồng trực tiếp."
+ }
+ },
+ "placeholder": "Chọn phương thức truyền phát",
+ "label": "Phương thức truyền phát"
+ },
+ "placeholder": "Chọn phát trực tiếp",
+ "compatibilityMode": {
+ "label": "Chế độ tương thích",
+ "desc": "Chỉ bật tùy chọn này nếu luồng trực tiếp của camera của bạn hiển thị các hiện vật màu và có một đường chéo ở phía bên phải của hình ảnh."
+ },
+ "title": "Cài đặt trực tiếp {{cameraName}}",
+ "audioIsAvailable": "Âm thanh có sẵn cho luồng này",
+ "audioIsUnavailable": "Âm thanh không có sẵn cho luồng này",
+ "label": "Cài đặt trực tiếp Camera"
+ }
+ },
+ "name": {
+ "label": "Tên",
+ "errorMessage": {
+ "mustLeastCharacters": "Tên nhóm Camera phải có ít nhất 2 ký tự.",
+ "nameMustNotPeriod": "Tên nhóm camera không được chứa dấu chấm.",
+ "exists": "Tên nhóm Camera đã tồn tại.",
+ "invalid": "Tên nhóm camera không hợp lệ."
+ },
+ "placeholder": "Nhập tên…"
+ },
+ "icon": "Biểu tượng",
+ "success": "Nhóm camera ({{name}}) đã được lưu.",
+ "cameras": {
+ "desc": "Chọn camera cho nhóm này.",
+ "label": "Camera"
+ },
+ "edit": "Sửa nhóm Camera"
+ },
+ "debug": {
+ "boundingBox": "Hộp giới hạn",
+ "options": {
+ "hideOptions": "Ẩn tùy chọn",
+ "label": "Cài đặt",
+ "title": "Tùy chọn",
+ "showOptions": "Hiện thị tùy chọn"
+ },
+ "timestamp": "Dấu thời gian",
+ "zones": "Khu vực",
+ "mask": "Mặt nạ",
+ "motion": "Chuyển động",
+ "regions": "Vùng"
+ }
+}
diff --git a/web/public/locales/vi/components/dialog.json b/web/public/locales/vi/components/dialog.json
new file mode 100644
index 000000000..53b1226b1
--- /dev/null
+++ b/web/public/locales/vi/components/dialog.json
@@ -0,0 +1,112 @@
+{
+ "restart": {
+ "title": "Bạn có chắc chắn muốn khởi động lại Frigate không?",
+ "button": "Khởi động lại",
+ "restarting": {
+ "title": "Đang khởi động lại Frigate",
+ "content": "Trang này sẽ tải lại sau {{countdown}} giây.",
+ "button": "Tải lại ngay"
+ }
+ },
+ "explore": {
+ "plus": {
+ "review": {
+ "question": {
+ "ask_a": "Đối tượng này có phải là một {{label}} không?",
+ "ask_an": "Đối tượng này có phải là một {{label}} không?",
+ "label": "Xác nhận nhãn này cho Frigate Plus",
+ "ask_full": "Đối tượng này có phải là một {{untranslatedLabel}} ({{translatedLabel}}) không?"
+ },
+ "state": {
+ "submitted": "Đã gửi"
+ }
+ },
+ "submitToPlus": {
+ "label": "Gửi lên Frigate+",
+ "desc": "Đối tượng xuất hiện ở các khu vực bạn muốn tránh không được xem là phát hiện sai. Gửi chúng lên dưới dạng phát hiện sai có thể làm mô hình bị nhầm lẫn."
+ }
+ },
+ "video": {
+ "viewInHistory": "Xem lại trong Lịch sử"
+ }
+ },
+ "export": {
+ "time": {
+ "fromTimeline": "Chọn từ Dòng thời gian",
+ "custom": "Tuỳ chọn",
+ "start": {
+ "title": "Thời gian bắt đầu",
+ "label": "Chọn thời gian bắt đầu"
+ },
+ "end": {
+ "title": "Thời gian kết thúc",
+ "label": "Chọn thời gian kết thúc"
+ },
+ "lastHour_other": "{{count}} giờ trước"
+ },
+ "name": {
+ "placeholder": "Đặt tên cho bản xuất"
+ },
+ "select": "Chọn",
+ "export": "Xuất",
+ "selectOrExport": "Chọn hay xuất",
+ "toast": {
+ "error": {
+ "endTimeMustAfterStartTime": "Thời gian kết thúc phải sau thời gian bắt đầu",
+ "noVaildTimeSelected": "Chưa chọn khoảng thời gian hợp lệ",
+ "failed": "Không thể bắt đầu xuất: {{error}}"
+ },
+ "success": "Đã bắt đầu xuất thành công. Xem tệp trong thư mục /exports."
+ },
+ "fromTimeline": {
+ "saveExport": "Lưu bản xuất",
+ "previewExport": "Xem trước bản xuất"
+ }
+ },
+ "streaming": {
+ "debugView": "Chế độ xem Gỡ lỗi",
+ "label": "Luồng",
+ "restreaming": {
+ "disabled": "Tính năng phát lại luồng không được bật cho camera này.",
+ "desc": {
+ "title": "Thiết lập go2rtc để có thêm tùy chọn xem trực tiếp và âm thanh cho camera này.",
+ "readTheDocumentation": "Đọc tài liệu"
+ }
+ },
+ "showStats": {
+ "label": "Hiển thị số liệu thống kê luồng",
+ "desc": "Bật tùy chọn này để hiển thị số liệu thống kê luồng dưới dạng lớp phủ trên nguồn cấp dữ liệu camera."
+ }
+ },
+ "recording": {
+ "confirmDelete": {
+ "title": "Xác nhận xóa",
+ "toast": {
+ "success": "Đoạn video liên quan đến các mục đánh giá đã chọn đã được xóa thành công.",
+ "error": "Không thể xóa: {{error}}"
+ },
+ "desc": {
+ "selected": "Bạn có chắc chắn muốn xóa tất cả video đã ghi liên quan đến mục đánh giá này không?detect của {{cameraName}}, hãy kiểm tra nhật ký lỗi"
+ },
+ "cameraDisabled": "Camera đã bị tắt"
+}
diff --git a/web/public/locales/vi/objects.json b/web/public/locales/vi/objects.json
new file mode 100644
index 000000000..d7168ee4e
--- /dev/null
+++ b/web/public/locales/vi/objects.json
@@ -0,0 +1,120 @@
+{
+ "mouse": "Chuột nhắt",
+ "keyboard": "Bàn phím nhạc",
+ "blender": "Tiếng máy xay",
+ "sink": "Tiếng bồn rửa",
+ "animal": "Động vật",
+ "dog": "Chó",
+ "bark": "Sủa",
+ "cat": "Mèo",
+ "horse": "Ngựa",
+ "goat": "Dê",
+ "sheep": "Cừu",
+ "bird": "Chim",
+ "vehicle": "Tiếng phương tiện",
+ "boat": "Tiếng thuyền",
+ "car": "Tiếng xe ô tô",
+ "bus": "Tiếng xe buýt",
+ "motorcycle": "Tiếng xe máy",
+ "train": "Tiếng tàu hỏa",
+ "bicycle": "Tiếng xe đạp",
+ "skateboard": "Tiếng ván trượt",
+ "door": "Tiếng cửa",
+ "hair_dryer": "Tiếng máy sấy tóc",
+ "toothbrush": "Tiếng bàn chải",
+ "scissors": "Tiếng kéo cắt",
+ "clock": "Tiếng đồng hồ",
+ "person": "Người",
+ "airplane": "Máy bay",
+ "zebra": "Ngựa vằn",
+ "tennis_racket": "Vợt tennis",
+ "plate": "Đĩa",
+ "wine_glass": "Ly rượu vang",
+ "cup": "Cốc",
+ "fork": "Nĩa",
+ "knife": "Dao",
+ "spoon": "Thìa",
+ "bowl": "Bát",
+ "banana": "Chuối",
+ "apple": "Táo",
+ "sandwich": "Bánh mì kẹp",
+ "orange": "Cam",
+ "broccoli": "Bông cải xanh",
+ "carrot": "Cà rốt",
+ "hot_dog": "Xúc xích",
+ "pizza": "Pizza",
+ "donut": "Bánh rán",
+ "chair": "Ghế",
+ "couch": "Ghế sofa",
+ "potted_plant": "Cây trồng trong chậu",
+ "bed": "Giường",
+ "mirror": "Gương",
+ "window": "Cửa sổ",
+ "desk": "Bàn làm việc",
+ "toilet": "Nhà vệ sinh",
+ "tv": "Ti vi",
+ "microwave": "Lò vi sóng",
+ "oven": "Lò nướng",
+ "toaster": "Máy nướng bánh mì",
+ "refrigerator": "Tủ lạnh",
+ "book": "Sách",
+ "face": "Mặt",
+ "license_plate": "Biển số xe",
+ "package": "Gói hàng",
+ "bbq_grill": "Vỉ nướng BBQ",
+ "amazon": "Amazon",
+ "usps": "USPS",
+ "ups": "UPS",
+ "fedex": "FedEx",
+ "dhl": "DHL",
+ "an_post": "An Post",
+ "purolator": "Purolator",
+ "postnl": "PostNL",
+ "nzpost": "NZ Post",
+ "postnord": "PostNord",
+ "gls": "GLS",
+ "dpd": "DPD",
+ "traffic_light": "Đèn giao thông",
+ "fire_hydrant": "Trụ cứu hỏa",
+ "street_sign": "Biển báo đường phố",
+ "stop_sign": "Biển báo dừng",
+ "parking_meter": "Đồng hồ đỗ xe",
+ "bench": "Ghế dài",
+ "cow": "Bò",
+ "elephant": "Voi",
+ "bear": "Gấu",
+ "giraffe": "Hươu cao cổ",
+ "hat": "Mũ",
+ "backpack": "Ba lô",
+ "umbrella": "Ô",
+ "shoe": "Giày",
+ "snowboard": "Ván trượt tuyết",
+ "eye_glasses": "Kính mắt",
+ "handbag": "Túi xách",
+ "tie": "Cà vạt",
+ "suitcase": "Va li",
+ "frisbee": "Đĩa ném",
+ "skis": "Ván trượt tuyết",
+ "sports_ball": "Bóng thể thao",
+ "kite": "Diều",
+ "baseball_bat": "Gậy bóng chày",
+ "baseball_glove": "Găng tay bóng chày",
+ "surfboard": "Ván lướt sóng",
+ "bottle": "Chai",
+ "cake": "Bánh ngọt",
+ "dining_table": "Bàn ăn",
+ "laptop": "Máy tính xách tay",
+ "remote": "Điều khiển từ xa",
+ "cell_phone": "Điện thoại di động",
+ "vase": "Bình hoa",
+ "teddy_bear": "Gấu bông",
+ "hair_brush": "Lược chải tóc",
+ "squirrel": "Sóc",
+ "deer": "Hươu",
+ "fox": "Cáo",
+ "rabbit": "Thỏ",
+ "raccoon": "Gấu mèo",
+ "robot_lawnmower": "Máy cắt cỏ robot",
+ "waste_bin": "Thùng rác",
+ "on_demand": "Theo yêu cầu"
+}
diff --git a/web/public/locales/vi/views/configEditor.json b/web/public/locales/vi/views/configEditor.json
new file mode 100644
index 000000000..cbd19441c
--- /dev/null
+++ b/web/public/locales/vi/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "copyConfig": "Sao chép cấu hình",
+ "saveAndRestart": "Lưu & Khởi động lại",
+ "saveOnly": "Chỉ lưu",
+ "confirm": "Thoát mà không lưu?",
+ "toast": {
+ "error": {
+ "savingError": "Lỗi khi lưu cấu hình"
+ },
+ "success": {
+ "copyToClipboard": "Đã sao chép cấu hình vào bộ nhớ tạm."
+ }
+ },
+ "configEditor": "Trình chỉnh sửa Cấu hình",
+ "documentTitle": "Trình chỉnh sửa Cấu hình - Frigate"
+}
diff --git a/web/public/locales/vi/views/events.json b/web/public/locales/vi/views/events.json
new file mode 100644
index 000000000..4259ab2cc
--- /dev/null
+++ b/web/public/locales/vi/views/events.json
@@ -0,0 +1,38 @@
+{
+ "camera": "Tiếng máy ảnh",
+ "alerts": "Cảnh báo",
+ "detections": "Phát hiện",
+ "motion": {
+ "only": "Chỉ chuyển động",
+ "label": "Chuyển động"
+ },
+ "allCameras": "Tất cả Camera",
+ "detected": "Đã phát hiện",
+ "recordings": {
+ "documentTitle": "Bản ghi - Frigate"
+ },
+ "events": {
+ "aria": "Chọn sự kiện",
+ "label": "Sự kiện",
+ "noFoundForTimePeriod": "Không tìm thấy sự kiện nào trong khoảng thời gian này."
+ },
+ "timeline.aria": "Chọn dòng thời gian",
+ "selected_one": "{{count}} đã chọn",
+ "selected_other": "{{count}} đã chọn",
+ "empty": {
+ "alert": "Không có cảnh báo nào để xem xét",
+ "detection": "Không có phát hiện nào để xem xét",
+ "motion": "Không tìm thấy dữ liệu chuyển động"
+ },
+ "timeline": "Dòng thời gian",
+ "documentTitle": "Xem lại - Frigate",
+ "calendarFilter": {
+ "last24Hours": "24 giờ qua"
+ },
+ "newReviewItems": {
+ "label": "Xem các mục mới cần xem xét",
+ "button": "Các mục mới cần xem xét"
+ },
+ "markAsReviewed": "Đánh dấu là đã xem xét",
+ "markTheseItemsAsReviewed": "Đánh dấu các mục này là đã xem xét"
+}
diff --git a/web/public/locales/vi/views/explore.json b/web/public/locales/vi/views/explore.json
new file mode 100644
index 000000000..2829d8303
--- /dev/null
+++ b/web/public/locales/vi/views/explore.json
@@ -0,0 +1,205 @@
+{
+ "objectLifecycle": {
+ "lifecycleItemDesc": {
+ "header": {
+ "zones": "Vùng",
+ "ratio": "Tỷ lệ",
+ "area": "Diện tích"
+ },
+ "gone": "{{label}} đã rời đi",
+ "heard": "{{label}} đã nghe thấy",
+ "external": "{{label}} được phát hiện",
+ "visible": "{{label}} được phát hiện",
+ "entered_zone": "{{label}} đã đi vào {{zones}}",
+ "active": "{{label}} trở nên hoạt động",
+ "stationary": "{{label}} trở nên đứng yên",
+ "attribute": {
+ "faceOrLicense_plate": "Đã phát hiện {{attribute}} cho {{label}}",
+ "other": "{{label}} được nhận dạng là {{attribute}}"
+ }
+ },
+ "carousel": {
+ "previous": "Trang trước",
+ "next": "Trang tiếp theo"
+ },
+ "annotationSettings": {
+ "showAllZones": {
+ "desc": "Luôn hiển thị các vùng trên các khung hình mà đối tượng đã đi vào.",
+ "title": "Hiển thị tất cả các Vùng"
+ },
+ "offset": {
+ "millisecondsToOffset": "Số mili giây để lệch các chú thích phát hiện. Mặc định: 0",
+ "documentation": "Đọc tài liệu ",
+ "desc": "Dữ liệu này đến từ luồng phát hiện của máy quay nằm ở trên hình ảnh từ luồng ghi hình. Có khả năng hai luồng này không đồng bộ hoàn hảo. Do đó, hộp giới hạn và đoạn ghi hình sẽ không khớp nhau một cách hoàn hảo. Tuy nhiên, trường annotation_offset có thể được sử dụng để điều chỉnh điều này.",
+ "label": "Độ lệch Chú thích",
+ "tips": "MẸO: Hãy tưởng tượng có một clip sự kiện với một người đi từ trái sang phải. Nếu hộp giới hạn trên dòng thời gian sự kiện luôn ở bên trái của người đó thì giá trị nên được giảm xuống. Tương tự, nếu một người đi từ trái sang phải và hộp giới hạn luôn ở phía trước người đó thì giá trị nên được tăng lên.",
+ "toast": {
+ "success": "Độ lệch chú thích cho {{camera}} đã được lưu vào tệp cấu hình. Khởi động lại Frigate để áp dụng các thay đổi của bạn."
+ }
+ },
+ "title": "Cài đặt Chú thích"
+ },
+ "count": "{{first}} trên {{second}}",
+ "title": "Vòng đời Đối tượng",
+ "noImageFound": "Không tìm thấy hình ảnh cho dấu thời gian này.",
+ "createObjectMask": "Tạo Mặt nạ Đối tượng",
+ "adjustAnnotationSettings": "Điều chỉnh cài đặt chú thích",
+ "trackedPoint": "Điểm được theo dõi",
+ "scrollViewTips": "Cuộn để xem những khoảnh khắc quan trọng trong vòng đời của đối tượng này.",
+ "autoTrackingTips": "Vị trí hộp giới hạn sẽ không chính xác đối với các máy quay tự động theo dõi."
+ },
+ "details": {
+ "item": {
+ "title": "Chi tiết Mục Xem lại",
+ "desc": "Chi tiết mục xem lại",
+ "button": {
+ "share": "Chia sẻ mục xem lại này",
+ "viewInExplore": "Xem trong Khám phá"
+ },
+ "toast": {
+ "error": {
+ "updatedSublabelFailed": "Không thể cập nhật nhãn phụ: {{errorMessage}}",
+ "updatedLPRFailed": "Không thể cập nhật biển số xe: {{errorMessage}}",
+ "regenerate": "Không thể gọi {{provider}} để lấy mô tả mới: {{errorMessage}}"
+ },
+ "success": {
+ "regenerate": "Một mô tả mới đã được yêu cầu từ {{provider}}. Tùy thuộc vào tốc độ của nhà cung cấp của bạn, mô tả mới có thể mất một chút thời gian để tạo lại.",
+ "updatedLPR": "Cập nhật biển số xe thành công.",
+ "updatedSublabel": "Cập nhật nhãn phụ thành công."
+ }
+ },
+ "tips": {
+ "mismatch_other": "{{count}} đối tượng không khả dụng đã được phát hiện và bao gồm trong mục xem lại này. Những đối tượng đó hoặc không đủ điều kiện là một cảnh báo hoặc phát hiện hoặc đã được dọn dẹp/xóa.",
+ "hasMissingObjects": "Điều chỉnh cấu hình của bạn nếu bạn muốn Frigate lưu các đối tượng được theo dõi cho các nhãn sau: {{objects}}"
+ }
+ },
+ "expandRegenerationMenu": "Mở rộng menu tạo lại",
+ "label": "Nhãn",
+ "editSubLabel": {
+ "title": "Chỉnh sửa nhãn phụ",
+ "desc": "Nhập một nhãn phụ mới cho {{label}} này",
+ "descNoLabel": "Nhập một nhãn phụ mới cho đối tượng được theo dõi này"
+ },
+ "snapshotScore": {
+ "label": "Điểm Ảnh chụp nhanh"
+ },
+ "topScore": {
+ "info": "Điểm cao nhất là điểm trung vị cao nhất cho đối tượng được theo dõi, vì vậy điểm này có thể khác với điểm được hiển thị trên ảnh thu nhỏ của kết quả tìm kiếm.",
+ "label": "Điểm Cao nhất"
+ },
+ "estimatedSpeed": "Tốc độ ước tính",
+ "objects": "Đối tượng",
+ "timestamp": "Dấu thời gian",
+ "button": {
+ "findSimilar": "Tìm đối tượng tương tự",
+ "regenerate": {
+ "title": "Tạo lại",
+ "label": "Tạo lại mô tả đối tượng được theo dõi"
+ }
+ },
+ "description": {
+ "label": "Mô tả",
+ "placeholder": "Mô tả của đối tượng được theo dõi",
+ "aiTips": "Frigate sẽ không yêu cầu mô tả từ nhà cung cấp AI tạo sinh của bạn cho đến khi vòng đời của đối tượng được theo dõi kết thúc."
+ },
+ "tips": {
+ "descriptionSaved": "Lưu mô tả thành công",
+ "saveDescriptionFailed": "Không thể cập nhật mô tả: {{errorMessage}}"
+ },
+ "camera": "Camera",
+ "recognizedLicensePlate": "Biển số xe được nhận dạng",
+ "regenerateFromSnapshot": "Tạo lại từ Ảnh chụp nhanh",
+ "regenerateFromThumbnails": "Tạo lại từ Ảnh thu nhỏ",
+ "zones": "Vùng",
+ "editLPR": {
+ "title": "Chỉnh sửa biển số xe",
+ "desc": "Nhập một giá trị biển số xe mới cho {{label}} này",
+ "descNoLabel": "Nhập một giá trị biển số xe mới cho đối tượng được theo dõi này"
+ }
+ },
+ "itemMenu": {
+ "viewObjectLifecycle": {
+ "label": "Xem vòng đời đối tượng",
+ "aria": "Hiển thị vòng đời đối tượng"
+ },
+ "downloadSnapshot": {
+ "label": "Tải xuống ảnh chụp nhanh",
+ "aria": "Tải xuống ảnh chụp nhanh"
+ },
+ "downloadVideo": {
+ "aria": "Tải xuống video",
+ "label": "Tải xuống video"
+ },
+ "findSimilar": {
+ "label": "Tìm đối tượng tương tự",
+ "aria": "Tìm các đối tượng được theo dõi tương tự"
+ },
+ "submitToPlus": {
+ "aria": "Gửi đến Frigate Plus",
+ "label": "Gửi đến Frigate+"
+ },
+ "viewInHistory": {
+ "label": "Xem trong Lịch sử",
+ "aria": "Xem trong Lịch sử"
+ },
+ "deleteTrackedObject": {
+ "label": "Xóa đối tượng được theo dõi này"
+ }
+ },
+ "exploreIsUnavailable": {
+ "embeddingsReindexing": {
+ "step": {
+ "descriptionsEmbedded": "Mô tả đã được nhúng: ",
+ "trackedObjectsProcessed": "Đối tượng được theo dõi đã xử lý: ",
+ "thumbnailsEmbedded": "Ảnh thu nhỏ đã được nhúng: "
+ },
+ "finishingShortly": "Sẽ hoàn thành trong giây lát",
+ "context": "Tính năng Khám phá có thể được sử dụng sau khi quá trình tái lập chỉ mục dữ liệu nhúng (embeddings) của đối tượng được theo dõi hoàn tất.",
+ "startingUp": "Đang khởi động…",
+ "estimatedTime": "Thời gian ước tính còn lại:"
+ },
+ "downloadingModels": {
+ "context": "Frigate đang tải xuống các mô hình dữ liệu nhúng cần thiết để hỗ trợ tính năng Tìm kiếm theo Ngữ nghĩa. Quá trình này có thể mất vài phút tùy thuộc vào tốc độ kết nối mạng của bạn.",
+ "setup": {
+ "visionModel": "Mô hình thị giác",
+ "visionModelFeatureExtractor": "Trình trích xuất đặc trưng mô hình thị giác",
+ "textModel": "Mô hình văn bản",
+ "textTokenizer": "Trình mã hóa văn bản"
+ },
+ "tips": {
+ "context": "Bạn có thể muốn tái lập chỉ mục dữ liệu nhúng của các đối tượng được theo dõi sau khi các mô hình được tải xuống.",
+ "documentation": "Đọc tài liệu"
+ },
+ "error": "Đã xảy ra lỗi. Vui lòng kiểm tra nhật ký của Frigate."
+ },
+ "title": "Tính năng Khám phá không khả dụng"
+ },
+ "dialog": {
+ "confirmDelete": {
+ "desc": "Việc xóa đối tượng được theo dõi này sẽ xóa ảnh chụp nhanh, mọi dữ liệu nhúng đã lưu và mọi mục nhập vòng đời đối tượng liên quan. Đoạn ghi hình đã ghi của đối tượng được theo dõi này trong chế độ xem Lịch sử sẽ KHÔNG bị xóa.mode: {{effectiveRetainMode}}, vì vậy lần ghi hình theo yêu cầu này chỉ giữ lại các đoạn có {{effectiveRetainModeName}}."
+ }
+}
diff --git a/web/public/locales/vi/views/recording.json b/web/public/locales/vi/views/recording.json
new file mode 100644
index 000000000..de52f8b7d
--- /dev/null
+++ b/web/public/locales/vi/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "filter": "Lọc",
+ "export": "Xuất",
+ "calendar": "Lịch",
+ "filters": "Bộ lọc",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "Thời gian chọn không hợp lệ",
+ "endTimeMustAfterStartTime": "Thời gian kết thúc phải sau thời gian bắt đầu"
+ }
+ }
+}
diff --git a/web/public/locales/vi/views/search.json b/web/public/locales/vi/views/search.json
new file mode 100644
index 000000000..d95cd175b
--- /dev/null
+++ b/web/public/locales/vi/views/search.json
@@ -0,0 +1,72 @@
+{
+ "search": "Tìm kiếm",
+ "savedSearches": "Tìm kiếm đã lưu",
+ "searchFor": "Tìm kiếm {{inputValue}}",
+ "button": {
+ "clear": "Xóa tìm kiếm",
+ "save": "Lưu tìm kiếm",
+ "delete": "Xóa tìm kiếm đã lưu",
+ "filterInformation": "Thông tin bộ lọc",
+ "filterActive": "Bộ lọc đang hoạt động"
+ },
+ "filter": {
+ "tips": {
+ "desc": {
+ "step2": "Chọn một giá trị từ các gợi ý hoặc tự nhập.",
+ "step1": "Nhập tên khóa bộ lọc theo sau là dấu hai chấm (ví dụ: \"cameras:\").",
+ "step3": "Sử dụng nhiều bộ lọc bằng cách thêm chúng nối tiếp nhau, cách nhau bằng dấu cách.",
+ "step5": "Bộ lọc phạm vi thời gian sử dụng định dạng {{exampleTime}}.",
+ "exampleLabel": "Ví dụ:",
+ "step6": "Xóa bộ lọc bằng cách nhấp vào dấu 'x' bên cạnh chúng..",
+ "step4": "Bộ lọc ngày (before: và after:) sử dụng định dạng {{DateFormat}}.",
+ "text": "Bộ lọc giúp bạn thu hẹp kết quả tìm kiếm. Dưới đây là cách sử dụng chúng trong trường nhập liệu:"
+ },
+ "title": "Cách sử dụng bộ lọc văn bản"
+ },
+ "header": {
+ "activeFilters": "Bộ lọc đang hoạt động",
+ "currentFilterType": "Giá trị bộ lọc",
+ "noFilters": "Bộ lọc"
+ },
+ "label": {
+ "has_clip": "Có clip",
+ "min_score": "Điểm tối thiểu",
+ "has_snapshot": "Có ảnh chụp nhanh",
+ "max_score": "Điểm tối đa",
+ "search_type": "Loại tìm kiếm",
+ "after": "Sau",
+ "cameras": "Camera",
+ "labels": "Nhãn",
+ "zones": "Khu vực",
+ "sub_labels": "Nhãn phụ",
+ "time_range": "Phạm vi thời gian",
+ "before": "Trước",
+ "min_speed": "Tốc độ tối thiểu",
+ "max_speed": "Tốc độ tối đa",
+ "recognized_license_plate": "Biển số xe được nhận dạng"
+ },
+ "toast": {
+ "error": {
+ "afterDatebeEarlierBefore": "Ngày 'Sau' phải trước ngày 'Trước'.",
+ "beforeDateBeLaterAfter": "Ngày 'Trước' phải sau ngày 'Sau'.",
+ "minScoreMustBeLessOrEqualMaxScore": "'Điểm tối thiểu' phải nhỏ hơn hoặc bằng 'Điểm tối đa'.",
+ "maxScoreMustBeGreaterOrEqualMinScore": "'Điểm tối đa' phải lớn hơn hoặc bằng 'Điểm tối thiểu.",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "'Tốc độ tối thiểu' phải nhỏ hơn hoặc bằng 'Tốc độ tối đa'.",
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "'Tốc độ tối đa' phải lớn hơn hoặc bằng 'Tốc độ tối thiểu'."
+ }
+ },
+ "searchType": {
+ "thumbnail": "Hình thu nhỏ",
+ "description": "Mô tả"
+ }
+ },
+ "similaritySearch": {
+ "title": "Tìm kiếm tương đồng",
+ "clear": "Xóa tìm kiếm tương đồng",
+ "active": "Tìm kiếm tương đồng đang hoạt động"
+ },
+ "placeholder": {
+ "search": "Tìm kiếm…"
+ },
+ "trackedObjectId": "ID đối tượng được theo dõi"
+}
diff --git a/web/public/locales/vi/views/settings.json b/web/public/locales/vi/views/settings.json
new file mode 100644
index 000000000..d777ac12e
--- /dev/null
+++ b/web/public/locales/vi/views/settings.json
@@ -0,0 +1,616 @@
+{
+ "documentTitle": {
+ "default": "Cài đặt - Frigate",
+ "authentication": "Cài đặt Xác thực - Frigate",
+ "camera": "Cài đặt Camera - Frigate",
+ "enrichments": "Cài đặt Làm giàu Dữ liệu - Frigate",
+ "notifications": "Cài đặt Thông báo - Frigate",
+ "masksAndZones": "Trình chỉnh sửa Mặt nạ và Vùng - Frigate",
+ "object": "Gỡ lỗi - Frigate",
+ "general": "Cài đặt Chung - Frigate",
+ "frigatePlus": "Cài đặt Frigate+ - Frigate",
+ "motionTuner": "Bộ tinh chỉnh Chuyển động - Frigate"
+ },
+ "notification": {
+ "toast": {
+ "error": {
+ "registerFailed": "Không thể lưu đăng ký thông báo."
+ },
+ "success": {
+ "settingSaved": "Cài đặt thông báo đã được lưu.",
+ "registered": "Đã đăng ký nhận thông báo thành công. Cần khởi động lại Frigate trước khi có thể gửi bất kỳ thông báo nào (kể cả thông báo thử)."
+ }
+ },
+ "unsavedChanges": "Các thay đổi Thông báo chưa được lưu",
+ "registerDevice": "Đăng ký Thiết bị này",
+ "unregisterDevice": "Hủy đăng ký Thiết bị này",
+ "unsavedRegistrations": "Các đăng ký Thông báo chưa được lưu",
+ "suspended": "Thông báo bị đình chỉ {{time}}",
+ "cancelSuspension": "Hủy tạm dừng",
+ "email": {
+ "desc": "Một email hợp lệ là bắt buộc và sẽ được sử dụng để thông báo cho bạn nếu có bất kỳ vấn đề nào với dịch vụ đẩy.",
+ "placeholder": "ví dụ: example@email.com",
+ "title": "Email"
+ },
+ "cameras": {
+ "noCameras": "Không có máy quay nào",
+ "title": "Máy quay",
+ "desc": "Chọn máy quay nào để bật thông báo."
+ },
+ "deviceSpecific": "Cài đặt dành riêng cho thiết bị",
+ "sendTestNotification": "Gửi một thông báo thử",
+ "active": "Thông báo đang hoạt động",
+ "suspendTime": {
+ "24hours": "Tạm dừng trong 24 giờ",
+ "untilRestart": "Tạm dừng cho đến khi khởi động lại",
+ "30minutes": "Tạm dừng trong 30 phút",
+ "1hour": "Tạm dừng trong 1 giờ",
+ "suspend": "Tạm dừng",
+ "12hours": "Tạm dừng trong 12 giờ",
+ "5minutes": "Tạm dừng trong 5 phút",
+ "10minutes": "Tạm dừng trong 10 phút"
+ },
+ "notificationSettings": {
+ "desc": "Frigate có thể gửi thông báo đẩy tự nhiên đến thiết bị của bạn khi nó đang chạy trong trình duyệt hoặc được cài đặt dưới dạng PWA.",
+ "title": "Cài đặt Thông báo",
+ "documentation": "Đọc tài liệu"
+ },
+ "notificationUnavailable": {
+ "desc": "Thông báo đẩy web yêu cầu một ngữ cảnh an toàn (https://…). Đây là một hạn chế của trình duyệt. Truy cập Frigate một cách an toàn để sử dụng thông báo.",
+ "title": "Thông báo không khả dụng",
+ "documentation": "Đọc tài liệu"
+ },
+ "globalSettings": {
+ "desc": "Tạm thời đình chỉ thông báo cho các máy quay cụ thể trên tất cả các thiết bị đã đăng ký.",
+ "title": "Cài đặt Chung"
+ },
+ "title": "Thông báo"
+ },
+ "frigatePlus": {
+ "title": "Cài đặt Frigate+",
+ "apiKey": {
+ "title": "Khóa API Frigate+",
+ "validated": "Khóa API Frigate+ đã được phát hiện và xác thực",
+ "notValidated": "Khóa API Frigate+ không được phát hiện hoặc chưa được xác thực",
+ "desc": "Khóa API Frigate+ cho phép tích hợp với dịch vụ Frigate+.",
+ "plusLink": "Đọc thêm về Frigate+"
+ },
+ "snapshotConfig": {
+ "table": {
+ "camera": "Máy quay",
+ "cleanCopySnapshots": "Ảnh chụp nhanh clean_copy",
+ "snapshots": "Ảnh chụp nhanh"
+ },
+ "desc": "Việc gửi đến Frigate+ yêu cầu cả ảnh chụp nhanh và ảnh chụp nhanh clean_copy phải được bật trong cấu hình của bạn.",
+ "cleanCopyWarning": "Một số máy quay đã bật ảnh chụp nhanh nhưng đã tắt bản sao sạch. Bạn cần bật clean_copy trong cấu hình ảnh chụp nhanh của mình để có thể gửi hình ảnh từ các máy quay này đến Frigate+.",
+ "title": "Cấu hình Ảnh chụp nhanh",
+ "documentation": "Đọc tài liệu"
+ },
+ "modelInfo": {
+ "error": "Không thể tải thông tin mô hình",
+ "plusModelType": {
+ "userModel": "Đã tinh chỉnh",
+ "baseModel": "Mô hình Cơ sở"
+ },
+ "supportedDetectors": "Các bộ phát hiện được hỗ trợ",
+ "title": "Thông tin Mô hình",
+ "baseModel": "Mô hình Cơ sở",
+ "availableModels": "Các mô hình có sẵn",
+ "loadingAvailableModels": "Đang tải các mô hình có sẵn…",
+ "modelSelect": "Các mô hình có sẵn của bạn trên Frigate+ có thể được chọn ở đây. Lưu ý rằng chỉ những mô hình tương thích với cấu hình bộ phát hiện hiện tại của bạn mới có thể được chọn.",
+ "cameras": "Máy quay",
+ "loading": "Đang tải thông tin mô hình…",
+ "modelType": "Loại Mô hình",
+ "trainDate": "Ngày Huấn luyện"
+ },
+ "unsavedChanges": "Các thay đổi cài đặt Frigate+ chưa được lưu",
+ "toast": {
+ "success": "Cài đặt Frigate+ đã được lưu. Khởi động lại Frigate để áp dụng các thay đổi.",
+ "error": "Không thể lưu các thay đổi cấu hình: {{errorMessage}}"
+ },
+ "restart_required": "Yêu cầu khởi động lại (mô hình Frigate+ đã thay đổi)"
+ },
+ "camera": {
+ "title": "Cài đặt Máy quay",
+ "review": {
+ "alerts": "Cảnh báo ",
+ "detections": "Phát hiện ",
+ "title": "Xem lại",
+ "desc": "Tạm thời bật/tắt cảnh báo và phát hiện cho máy quay này cho đến khi Frigate khởi động lại. Khi bị vô hiệu hóa, sẽ không có mục xem lại mới nào được tạo ra. "
+ },
+ "reviewClassification": {
+ "title": "Phân loại mục Xem lại",
+ "unsavedChanges": "Các thay đổi cài đặt Phân loại mục Xem lại chưa được lưu cho {{camera}}",
+ "readTheDocumentation": "Đọc tài liệu",
+ "objectDetectionsTips": "Tất cả các đối tượng {{detectionsLabels}} không được phân loại trên {{cameraName}} sẽ được hiển thị dưới dạng Phát hiện bất kể chúng ở trong vùng nào.",
+ "desc": "Frigate phân loại các mục xem lại thành Cảnh báo và Phát hiện. Theo mặc định, tất cả các đối tượng người và ô tô được coi là Cảnh báo. Bạn có thể tinh chỉnh việc phân loại các mục xem lại của mình bằng cách định cấu hình các vùng bắt buộc cho chúng.",
+ "zoneObjectDetectionsTips": {
+ "text": "Tất cả các đối tượng {{detectionsLabels}} không được phân loại trong vùng {{zone}} trên {{cameraName}} sẽ được hiển thị dưới dạng Phát hiện.",
+ "notSelectDetections": "Tất cả các đối tượng {{detectionsLabels}} được phát hiện trong vùng {{zone}} trên {{cameraName}} không được phân loại là Cảnh báo sẽ được hiển thị dưới dạng Phát hiện bất kể chúng ở trong vùng nào.",
+ "regardlessOfZoneObjectDetectionsTips": "Tất cả các đối tượng {{detectionsLabels}} không được phân loại trên {{cameraName}} sẽ được hiển thị dưới dạng Phát hiện bất kể chúng ở trong vùng nào."
+ },
+ "toast": {
+ "success": "Cấu hình Phân loại mục Xem lại đã được lưu. Khởi động lại Frigate để áp dụng các thay đổi."
+ },
+ "limitDetections": "Giới hạn phát hiện trong các vùng cụ thể",
+ "selectDetectionsZones": "Chọn vùng cho Phát hiện",
+ "zoneObjectAlertsTips": "Tất cả các đối tượng {{alertsLabels}} được phát hiện trong vùng {{zone}} trên {{cameraName}} sẽ được hiển thị dưới dạng Cảnh báo.",
+ "noDefinedZones": "Không có vùng nào được xác định cho máy quay này.",
+ "objectAlertsTips": "Tất cả các đối tượng {{alertsLabels}} trên {{cameraName}} sẽ được hiển thị dưới dạng Cảnh báo.",
+ "selectAlertsZones": "Chọn vùng cho Cảnh báo"
+ },
+ "streams": {
+ "title": "Luồng phát",
+ "desc": "Tạm thời vô hiệu hóa một máy quay cho đến khi Frigate khởi động lại. Vô hiệu hóa một máy quay sẽ dừng hoàn toàn quá trình xử lý các luồng của máy quay này của Frigate. Việc phát hiện, ghi hình và gỡ lỗi sẽ không khả dụng.Hộp khu vực
Các hộp màu xanh lá cây sáng sẽ được chồng lên các khu vực quan tâm trong khung hình đang được gửi đến bộ phát hiện đối tượng.
", + "desc": "Hiển thị một hộp của khu vực quan tâm được gửi đến bộ phát hiện đối tượng" + }, + "zones": { + "title": "Vùng", + "desc": "Hiển thị đường viền của bất kỳ vùng nào đã được xác định" + }, + "mask": { + "title": "Mặt nạ chuyển động", + "desc": "Hiển thị các đa giác mặt nạ chuyển động" + }, + "title": "Gỡ lỗi", + "objectList": "Danh sách đối tượng", + "noObjects": "Không có đối tượng", + "motion": { + "desc": "Hiển thị các hộp xung quanh các khu vực phát hiện có chuyển động", + "tips": "Hộp chuyển động
Các hộp màu đỏ sẽ được chồng lên các khu vực của khung hình nơi chuyển động đang được phát hiện
", + "title": "Hộp chuyển động" + } + }, + "users": { + "title": "Người dùng", + "management": { + "title": "Quản lý Người dùng", + "desc": "Quản lý các tài khoản người dùng của phiên bản Frigate này." + }, + "table": { + "noUsers": "Không tìm thấy người dùng nào.", + "username": "Tên người dùng", + "actions": "Hành động", + "role": "Vai trò", + "changeRole": "Thay đổi vai trò người dùng", + "password": "Mật khẩu", + "deleteUser": "Xóa người dùng" + }, + "dialog": { + "form": { + "password": { + "strength": { + "strong": "Mạnh", + "title": "Độ mạnh mật khẩu: ", + "medium": "Trung bình", + "veryStrong": "Rất mạnh", + "weak": "Yếu" + }, + "title": "Mật khẩu", + "placeholder": "Nhập mật khẩu", + "confirm": { + "title": "Xác nhận Mật khẩu", + "placeholder": "Xác nhận Mật khẩu" + }, + "notMatch": "Mật khẩu không trùng khớp", + "match": "Mật khẩu trùng khớp" + }, + "newPassword": { + "placeholder": "Nhập mật khẩu mới", + "confirm": { + "placeholder": "Nhập lại mật khẩu mới" + }, + "title": "Mật khẩu mới" + }, + "usernameIsRequired": "Tên người dùng là bắt buộc", + "user": { + "title": "Tên người dùng", + "desc": "Chỉ cho phép chữ cái, số, dấu chấm và dấu gạch dưới.", + "placeholder": "Nhập tên người dùng" + }, + "passwordIsRequired": "Mật khẩu là bắt buộc" + }, + "createUser": { + "desc": "Thêm một tài khoản người dùng mới và chỉ định một vai trò để truy cập vào các khu vực của giao diện người dùng Frigate.", + "usernameOnlyInclude": "Tên người dùng chỉ có thể bao gồm chữ cái, số, . hoặc _", + "title": "Tạo Người dùng Mới", + "confirmPassword": "Vui lòng xác nhận mật khẩu của bạn" + }, + "deleteUser": { + "desc": "Hành động này không thể được hoàn tác. Điều này sẽ xóa vĩnh viễn tài khoản người dùng và xóa tất cả dữ liệu liên quan.", + "warn": "Bạn có chắc muốn xóa {{username}} không?", + "title": "Xóa Người dùng" + }, + "passwordSetting": { + "setPassword": "Đặt Mật khẩu", + "updatePassword": "Cập nhật Mật khẩu cho {{username}}", + "cannotBeEmpty": "Mật khẩu không được để trống", + "desc": "Tạo một mật khẩu mạnh để bảo mật tài khoản này.", + "doNotMatch": "Mật khẩu không khớp" + }, + "changeRole": { + "title": "Thay đổi Vai trò Người dùng", + "roleInfo": { + "intro": "Chọn vai trò thích hợp cho người dùng này:", + "admin": "Quản trị viên", + "adminDesc": "Toàn quyền truy cập vào tất cả các tính năng.", + "viewer": "Người xem", + "viewerDesc": "Chỉ giới hạn ở các bảng điều khiển Trực tiếp, Xem lại, Khám phá và Xuất file." + }, + "select": "Chọn một vai trò", + "desc": "Cập nhật quyền cho {{username}}" + } + }, + "addUser": "Thêm Người dùng", + "updatePassword": "Cập nhật Mật khẩu", + "toast": { + "error": { + "setPasswordFailed": "Không thể lưu mật khẩu: {{errorMessage}}", + "createUserFailed": "Không thể tạo người dùng: {{errorMessage}}", + "deleteUserFailed": "Không thể xóa người dùng: {{errorMessage}}", + "roleUpdateFailed": "Không thể cập nhật vai trò: {{errorMessage}}" + }, + "success": { + "roleUpdated": "Vai trò đã được cập nhật cho {{user}}", + "createUser": "Người dùng {{user}} đã được tạo thành công", + "deleteUser": "Người dùng {{user}} đã được xóa thành công", + "updatePassword": "Mật khẩu đã được cập nhật thành công." + } + } + }, + "general": { + "calendar": { + "firstWeekday": { + "sunday": "Chủ nhật", + "monday": "Thứ hai", + "label": "Ngày đầu tuần", + "desc": "Ngày bắt đầu của các tuần trong lịch xem lại." + }, + "title": "Lịch" + }, + "storedLayouts": { + "desc": "Bố cục của các máy quay trong một nhóm máy quay có thể được kéo/thay đổi kích thước. Các vị trí được lưu trữ trong bộ nhớ cục bộ của trình duyệt của bạn.", + "title": "Bố cục đã lưu", + "clearAll": "Xóa tất cả Bố cục" + }, + "cameraGroupStreaming": { + "title": "Cài đặt Phát luồng Nhóm Máy quay", + "desc": "Cài đặt phát luồng cho mỗi nhóm máy quay được lưu trữ trong bộ nhớ cục bộ của trình duyệt của bạn.", + "clearAll": "Xóa tất cả Cài đặt Phát luồng" + }, + "toast": { + "success": { + "clearStoredLayout": "Đã xóa bố cục đã lưu cho {{cameraName}}", + "clearStreamingSettings": "Đã xóa cài đặt phát luồng cho tất cả các nhóm máy quay." + }, + "error": { + "clearStoredLayoutFailed": "Không thể xóa bố cục đã lưu: {{errorMessage}}", + "clearStreamingSettingsFailed": "Không thể xóa cài đặt phát luồng: {{errorMessage}}" + } + }, + "liveDashboard": { + "automaticLiveView": { + "desc": "Tự động chuyển sang chế độ xem trực tiếp của máy quay khi phát hiện hoạt động. Việc tắt tùy chọn này sẽ khiến hình ảnh tĩnh của máy quay trên bảng điều khiển Trực tiếp chỉ cập nhật mỗi phút một lần.", + "label": "Chế độ xem trực tiếp tự động" + }, + "playAlertVideos": { + "desc": "Theo mặc định, các cảnh báo gần đây trên bảng điều khiển Trực tiếp sẽ phát dưới dạng các video lặp lại nhỏ. Tắt tùy chọn này để chỉ hiển thị hình ảnh tĩnh của các cảnh báo gần đây trên thiết bị/trình duyệt này.", + "label": "Phát video cảnh báo" + }, + "title": "Bảng điều khiển trực tiếp" + }, + "recordingsViewer": { + "defaultPlaybackRate": { + "label": "Tốc độ phát mặc định", + "desc": "Tốc độ phát mặc định cho việc xem lại các bản ghi." + }, + "title": "Trình xem Bản ghi" + }, + "title": "Cài đặt Chung" + }, + "dialog": { + "unsavedChanges": { + "desc": "Bạn có muốn lưu các thay đổi trước khi tiếp tục không?", + "title": "Bạn có các thay đổi chưa được lưu." + } + }, + "enrichments": { + "title": "Cài đặt Làm giàu Dữ liệu", + "unsavedChanges": "Các thay đổi cài đặt Làm giàu Dữ liệu chưa được lưu", + "birdClassification": { + "title": "Phân loại Chim", + "desc": "Phân loại chim xác định các loài chim đã biết bằng mô hình Tensorflow lượng tử hóa. Khi một loài chim đã biết được nhận dạng, tên thông thường của nó sẽ được thêm vào dưới dạng nhãn phụ (sub_label). Thông tin này được bao gồm trong giao diện người dùng, bộ lọc, cũng như trong các thông báo." + }, + "semanticSearch": { + "title": "Tìm kiếm theo Ngữ nghĩa", + "desc": "Tìm kiếm theo Ngữ nghĩa trong Frigate cho phép bạn tìm các đối tượng được theo dõi trong các mục xem lại của mình bằng cách sử dụng chính hình ảnh, mô tả văn bản do người dùng xác định hoặc mô tả được tạo tự động.", + "reindexNow": { + "desc": "Việc tái lập chỉ mục sẽ tạo lại các nhúng (embeddings) cho tất cả các đối tượng được theo dõi. Quá trình này chạy ở chế độ nền và có thể làm CPU của bạn hoạt động tối đa và mất một khoảng thời gian đáng kể tùy thuộc vào số lượng đối tượng bạn đã theo dõi.", + "confirmTitle": "Xác nhận Tái lập chỉ mục", + "confirmDesc": "Bạn có chắc muốn tái lập chỉ mục cho tất cả các nhúng của đối tượng được theo dõi không? Quá trình này sẽ chạy ở chế độ nền nhưng có thể làm CPU của bạn hoạt động tối đa và mất một khoảng thời gian đáng kể. Bạn có thể theo dõi tiến trình trên trang Khám phá.", + "success": "Đã bắt đầu tái lập chỉ mục thành công.", + "alreadyInProgress": "Quá trình tái lập chỉ mục đang được tiến hành.", + "error": "Không thể bắt đầu tái lập chỉ mục: {{errorMessage}}", + "label": "Tái lập chỉ mục ngay", + "confirmButton": "Tái lập chỉ mục" + }, + "modelSize": { + "label": "Kích thước Mô hình", + "desc": "Kích thước của mô hình được sử dụng cho các nhúng tìm kiếm theo ngữ nghĩa.", + "small": { + "title": "nhỏ", + "desc": "Sử dụng mô hình nhỏ sẽ dùng phiên bản lượng tử hóa của mô hình, tiêu thụ ít RAM hơn và chạy nhanh hơn trên CPU với sự khác biệt không đáng kể về chất lượng nhúng." + }, + "large": { + "title": "lớn", + "desc": "Sử dụng mô hình lớn sẽ dùng mô hình Jina đầy đủ và sẽ tự động chạy trên GPU nếu có." + } + }, + "readTheDocumentation": "Đọc tài liệu" + }, + "faceRecognition": { + "title": "Nhận dạng Khuôn mặt", + "desc": "Nhận dạng khuôn mặt cho phép gán tên cho người và khi khuôn mặt của họ được nhận dạng, Frigate sẽ gán tên của người đó làm nhãn phụ. Thông tin này được bao gồm trong giao diện người dùng, bộ lọc, cũng như trong các thông báo.", + "readTheDocumentation": "Đọc tài liệu", + "modelSize": { + "label": "Kích thước Mô hình", + "desc": "Kích thước của mô hình được sử dụng để nhận dạng khuôn mặt.", + "small": { + "title": "nhỏ", + "desc": "Sử dụng mô hình nhỏ sẽ dùng mô hình nhúng khuôn mặt FaceNet, chạy hiệu quả trên hầu hết các CPU." + }, + "large": { + "title": "lớn", + "desc": "Sử dụng mô hình lớn sẽ dùng mô hình nhúng khuôn mặt ArcFace và sẽ tự động chạy trên GPU nếu có." + } + } + }, + "licensePlateRecognition": { + "title": "Nhận dạng Biển số xe", + "desc": "Frigate có thể nhận dạng biển số xe trên các phương tiện và tự động thêm các ký tự được phát hiện vào trường recognized_license_plate hoặc một tên đã biết làm nhãn phụ cho các đối tượng thuộc loại ô tô. Một trường hợp sử dụng phổ biến có thể là đọc biển số xe ô tô đi vào đường lái xe hoặc ô tô đi ngang qua trên đường phố.", + "readTheDocumentation": "Đọc tài liệu" + }, + "restart_required": "Yêu cầu khởi động lại (cài đặt Làm giàu Dữ liệu đã thay đổi)", + "toast": { + "success": "Cài đặt Làm giàu Dữ liệu đã được lưu. Khởi động lại Frigate để áp dụng các thay đổi của bạn.", + "error": "Không thể lưu các thay đổi cấu hình: {{errorMessage}}" + } + }, + "menu": { + "frigateplus": "Frigate+", + "ui": "Giao diện người dùng", + "masksAndZones": "Mặt nạ / Vùng", + "debug": "Gỡ lỗi", + "users": "Người dùng", + "notifications": "Thông báo", + "motionTuner": "Tinh chỉnh Chuyển động", + "cameras": "Cài đặt Camera", + "enrichments": "Làm giàu Dữ liệu" + }, + "cameraSetting": { + "camera": "Camera", + "noCamera": "Không có Camera" + } +} diff --git a/web/public/locales/vi/views/system.json b/web/public/locales/vi/views/system.json new file mode 100644 index 000000000..eeb841096 --- /dev/null +++ b/web/public/locales/vi/views/system.json @@ -0,0 +1,180 @@ +{ + "documentTitle": { + "storage": "Thống kê lưu trữ - Frigate", + "general": "Thống kê Chung - Frigate", + "enrichments": "Thống kê Làm giàu Dữ liệu - Frigate", + "logs": { + "frigate": "Nhật ký Frigate - Frigate", + "go2rtc": "Nhật ký Go2RTC - Frigate", + "nginx": "Nhật ký Nginx - Frigate" + }, + "cameras": "Thống kê Camera - Frigate" + }, + "general": { + "hardwareInfo": { + "npuUsage": "Mức sử dụng NPU", + "npuMemory": "Bộ nhớ NPU", + "gpuInfo": { + "vainfoOutput": { + "title": "Đầu ra Vainfo", + "returnCode": "Mã trả về: {{code}}", + "processOutput": "Đầu ra Tiến trình:", + "processError": "Lỗi Tiến trình:" + }, + "nvidiaSMIOutput": { + "title": "Đầu ra Nvidia SMI", + "name": "Tên: {{name}}", + "driver": "Trình điều khiển: {{driver}}", + "cudaComputerCapability": "Khả năng Tính toán CUDA: {{cuda_compute}}", + "vbios": "Thông tin VBios: {{vbios}}" + }, + "closeInfo": { + "label": "Đóng thông tin GPU" + }, + "copyInfo": { + "label": "Sao chép thông tin GPU" + }, + "toast": { + "success": "Đã sao chép thông tin GPU vào clipboard" + } + }, + "title": "Thông tin Phần cứng", + "gpuUsage": "Mức sử dụng GPU", + "gpuMemory": "Bộ nhớ GPU", + "gpuEncoder": "Bộ mã hóa GPU", + "gpuDecoder": "Bộ giải mã GPU" + }, + "otherProcesses": { + "processCpuUsage": "Mức sử dụng CPU của Tiến trình", + "processMemoryUsage": "Mức sử dụng Bộ nhớ của Tiến trình", + "title": "Các Tiến trình Khác" + }, + "detector": { + "temperature": "Nhiệt độ Bộ phát hiện", + "memoryUsage": "Mức sử dụng Bộ nhớ của Bộ phát hiện", + "title": "Bộ phát hiện", + "inferenceSpeed": "Tốc độ Suy luận của Bộ phát hiện", + "cpuUsage": "Mức sử dụng CPU của Bộ phát hiện" + }, + "title": "Chung" + }, + "storage": { + "overview": "Tổng quan", + "cameraStorage": { + "title": "Lưu trữ Máy quay", + "camera": "Camera", + "unusedStorageInformation": "Thông tin Lưu trữ Chưa sử dụng", + "storageUsed": "Lưu trữ", + "percentageOfTotalUsed": "Phần trăm Tổng dung lượng Đã sử dụng", + "bandwidth": "Băng thông", + "unused": { + "title": "Chưa sử dụng", + "tips": "Giá trị này có thể không phản ánh chính xác dung lượng trống có sẵn cho Frigate nếu bạn có các tệp khác được lưu trữ trên ổ đĩa ngoài các bản ghi của Frigate. Frigate không theo dõi việc sử dụng dung lượng lưu trữ bên ngoài các bản ghi của nó." + } + }, + "title": "Lưu trữ", + "recordings": { + "title": "Bản ghi", + "tips": "Giá trị này thể hiện tổng dung lượng lưu trữ được sử dụng bởi các bản ghi trong cơ sở dữ liệu của Frigate. Frigate không theo dõi việc sử dụng dung lượng lưu trữ cho tất cả các tệp trên đĩa của bạn.", + "earliestRecording": "Bản ghi sớm nhất hiện có:" + } + }, + "cameras": { + "label": { + "detect": "phát hiện", + "skipped": "bỏ qua", + "ffmpeg": "FFmpeg", + "capture": "ghi hình", + "overallDetectionsPerSecond": "tổng số phát hiện mỗi giây", + "cameraFramesPerSecond": "{{camName}} khung hình mỗi giây", + "cameraDetectionsPerSecond": "{{camName}} phát hiện mỗi giây", + "overallFramesPerSecond": "tổng số khung hình mỗi giây", + "camera": "máy quay", + "overallSkippedDetectionsPerSecond": "tổng số phát hiện bị bỏ qua mỗi giây", + "cameraFfmpeg": "{{camName}} FFmpeg", + "cameraCapture": "{{camName}} ghi hình", + "cameraDetect": "{{camName}} phát hiện", + "cameraSkippedDetectionsPerSecond": "{{camName}} phát hiện bị bỏ qua mỗi giây" + }, + "toast": { + "success": { + "copyToClipboard": "Đã sao chép dữ liệu thăm dò vào clipboard." + }, + "error": { + "unableToProbeCamera": "Không thể thăm dò máy quay: {{errorMessage}}" + } + }, + "info": { + "stream": "Luồng {{idx}}", + "streamDataFromFFPROBE": "Dữ liệu luồng được lấy bằngffprobe.",
+ "video": "Video:",
+ "fetching": "Đang tìm nạp Dữ liệu Máy quay",
+ "codec": "Codec:",
+ "unknown": "Không xác định",
+ "audio": "Âm thanh:",
+ "error": "Lỗi: {{error}}",
+ "tips": {
+ "title": "Thông tin Thăm dò Máy quay"
+ },
+ "resolution": "Độ phân giải:",
+ "fps": "FPS:",
+ "cameraProbeInfo": "Thông tin Thăm dò Máy quay {{camera}}",
+ "aspectRatio": "tỉ lệ khung hình"
+ },
+ "overview": "Tổng quan",
+ "framesAndDetections": "Khung hình / Phát hiện",
+ "title": "Camera"
+ },
+ "lastRefreshed": "Làm mới lần cuối: ",
+ "stats": {
+ "detectIsSlow": "{{detect}} đang chậm ({{speed}} ms)",
+ "detectIsVerySlow": "{{detect}} đang rất chậm ({{speed}} ms)",
+ "cameraIsOffline": "{{camera}} đang ngoại tuyến",
+ "ffmpegHighCpuUsage": "{{camera}} có mức sử dụng CPU FFmpeg cao ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} có mức sử dụng CPU phát hiện cao ({{detectAvg}}%)",
+ "healthy": "Hệ thống đang hoạt động tốt",
+ "reindexingEmbeddings": "Đang lập chỉ mục lại các embedding (hoàn thành {{processed}}%)"
+ },
+ "enrichments": {
+ "embeddings": {
+ "image_embedding": "Embedding Hình ảnh",
+ "text_embedding_speed": "Tốc độ Embedding Văn bản",
+ "face_embedding_speed": "Tốc độ Embedding Khuôn mặt",
+ "text_embedding": "Embedding Văn bản",
+ "face_recognition": "Nhận dạng Khuôn mặt",
+ "plate_recognition": "Nhận dạng Biển số",
+ "image_embedding_speed": "Tốc độ Embedding Hình ảnh",
+ "face_recognition_speed": "Tốc độ Nhận dạng Khuôn mặt",
+ "plate_recognition_speed": "Tốc độ Nhận dạng Biển số",
+ "yolov9_plate_detection_speed": "Tốc độ Phát hiện Biển số YOLOv9",
+ "yolov9_plate_detection": "Phát hiện Biển số YOLOv9"
+ },
+ "title": "Làm giàu Dữ liệu",
+ "infPerSecond": "Suy luận Mỗi Giây"
+ },
+ "title": "Hệ thống",
+ "metrics": "Số liệu hệ thống",
+ "logs": {
+ "download": {
+ "label": "Tải xuống Nhật ký"
+ },
+ "copy": {
+ "label": "Sao chép vào Clipboard",
+ "success": "Đã sao chép nhật ký vào clipboard",
+ "error": "Không thể sao chép nhật ký vào clipboard"
+ },
+ "type": {
+ "label": "Loại",
+ "timestamp": "Dấu thời gian",
+ "tag": "Thẻ",
+ "message": "Thông báo"
+ },
+ "tips": "Nhật ký đang được truyền trực tiếp từ máy chủ",
+ "toast": {
+ "error": {
+ "fetchingLogsFailed": "Lỗi khi tìm nạp nhật ký: {{errorMessage}}",
+ "whileStreamingLogs": "Lỗi trong khi truyền trực tiếp nhật ký: {{errorMessage}}"
+ }
+ }
+ }
+}
diff --git a/web/public/locales/yue-Hant/audio.json b/web/public/locales/yue-Hant/audio.json
new file mode 100644
index 000000000..8d29100d5
--- /dev/null
+++ b/web/public/locales/yue-Hant/audio.json
@@ -0,0 +1,429 @@
+{
+ "speech": "講話",
+ "babbling": "牙牙學語",
+ "yell": "大嗌",
+ "bellow": "咆哮",
+ "whoop": "歡呼聲",
+ "whispering": "細細聲",
+ "laughter": "笑聲",
+ "sigh": "歎氣聲",
+ "crying": "喊聲",
+ "yodeling": "山歌",
+ "choir": "合唱",
+ "snicker": "偷笑聲",
+ "mantra": "咒語",
+ "singing": "歌聲",
+ "chant": "唸經",
+ "breathing": "呼吸聲",
+ "child_singing": "兒童歌聲",
+ "rapping": "饒舌",
+ "humming": "哼歌",
+ "whistling": "口哨聲",
+ "synthetic_singing": "人造歌聲",
+ "groan": "呻吟聲",
+ "grunt": "哼聲",
+ "snort": "哼哼聲",
+ "throat_clearing": "清喉嚨",
+ "wheeze": "氣喘聲",
+ "snoring": "鼻鼾聲",
+ "gasp": "喘氣",
+ "pant": "急促喘氣",
+ "cough": "咳嗽",
+ "sneeze": "打乞嚏",
+ "shuffle": "拖步行",
+ "sniff": "嗅嗅聲",
+ "footsteps": "腳步聲",
+ "chewing": "咀嚼聲",
+ "biting": "咬嘢聲",
+ "gargling": "漱口聲",
+ "run": "跑步",
+ "stomach_rumble": "肚餓聲",
+ "burping": "打嗝聲",
+ "clapping": "掌聲",
+ "children_playing": "兒童玩耍聲",
+ "applause": "掌聲",
+ "heartbeat": "心跳",
+ "growling": "狗咆哮聲",
+ "bow_wow": "狗汪汪聲",
+ "caterwaul": "貓嚎叫",
+ "howl": "狗慘叫聲",
+ "livestock": "牲畜",
+ "clip_clop": "馬蹄聲",
+ "cattle": "牛",
+ "horse": "馬",
+ "heart_murmur": "心臟雜音",
+ "fart": "放屁",
+ "hands": "手",
+ "cheering": "歡呼聲",
+ "dog": "狗",
+ "bark": "樹皮",
+ "yip": "狗尖叫聲",
+ "chatter": "嘈雜聲",
+ "purr": "貓呼嚕聲",
+ "whimper_dog": "狗嗚咽聲",
+ "hiccup": "打嗝聲",
+ "finger_snapping": "彈手指聲",
+ "crowd": "人群聲",
+ "animal": "動物",
+ "pets": "寵物",
+ "cat": "貓",
+ "meow": "貓喵喵聲",
+ "hiss": "貓嘶嘶聲",
+ "neigh": "馬嘶聲",
+ "cowbell": "牛鈴",
+ "moo": "牛哞哞聲",
+ "gobble": "火雞叫聲",
+ "turkey": "火雞",
+ "chicken": "雞",
+ "cluck": "雞咯咯聲",
+ "fowl": "家禽",
+ "sheep": "羊",
+ "duck": "鴨子",
+ "goat": "山羊",
+ "pig": "豬",
+ "oink": "豬哼聲",
+ "bleat": "咩咩聲",
+ "cock_a_doodle_doo": "公雞叫聲",
+ "honk": "鵝叫聲",
+ "quack": "鴨叫聲",
+ "goose": "鵝",
+ "wild_animals": "野生動物",
+ "crow": "烏鴉",
+ "coo": "白鴿咕咕聲",
+ "pigeon": "白鴿",
+ "roaring_cats": "貓咆哮聲",
+ "roar": "咆哮聲",
+ "bird": "鳥",
+ "chirp": "鳥啾啾聲",
+ "squawk": "鳥嘎嘎聲",
+ "caw": "烏鴉呱呱聲",
+ "mouse": "滑鼠",
+ "owl": "貓頭鷹",
+ "rats": "大老鼠",
+ "hoot": "貓頭鷹咕咕聲",
+ "patter": "老鼠腳步聲",
+ "flapping_wings": "拍打翅膀聲",
+ "dogs": "狗",
+ "snake": "蛇",
+ "insect": "昆蟲",
+ "whale_vocalization": "鯨魚叫聲",
+ "rattle": "蛇叫聲",
+ "fly": "蒼蠅",
+ "croak": "青蛙呱呱聲",
+ "mosquito": "蚊",
+ "music": "音樂",
+ "frog": "青蛙",
+ "cricket": "蟋蟀",
+ "buzz": "嗡嗡聲",
+ "musical_instrument": "樂器",
+ "steel_guitar": "鋼弦結他",
+ "tapping": "拍擊",
+ "guitar": "結他",
+ "strum": "撥弦聲",
+ "electric_guitar": "電結他",
+ "plucked_string_instrument": "撥弦樂器",
+ "bass_guitar": "低音結他",
+ "banjo": "班祖琴",
+ "acoustic_guitar": "原聲結他",
+ "piano": "鋼琴",
+ "synthesizer": "合成器",
+ "keyboard": "鍵盤",
+ "organ": "風琴",
+ "sitar": "錫塔琴",
+ "mandolin": "曼陀鈴",
+ "zither": "齊特琴",
+ "ukulele": "烏克麗麗",
+ "sampler": "採樣器",
+ "hammond_organ": "哈蒙德風琴",
+ "electric_piano": "電子鋼琴",
+ "electronic_organ": "電子風琴",
+ "rimshot": "鼓邊敲擊",
+ "bass_drum": "低音鼓",
+ "drum_kit": "鼓套",
+ "drum_machine": "鼓機",
+ "drum": "鼓",
+ "snare_drum": "小鼓",
+ "timpani": "定音鼓",
+ "drum_roll": "鼓聲",
+ "harpsichord": "大鍵琴",
+ "percussion": "打擊樂器",
+ "trumpet": "小號",
+ "cymbal": "銅鈸",
+ "french_horn": "法國號",
+ "string_section": "弦樂組",
+ "saxophone": "色士風",
+ "marimba": "馬林巴琴",
+ "mallet_percussion": "鎚擊樂器",
+ "maraca": "沙槌",
+ "harp": "豎琴",
+ "orchestra": "管弦樂團",
+ "violin": "小提琴",
+ "gong": "鑼",
+ "flute": "長笛",
+ "bowed_string_instrument": "弓弦樂器",
+ "vibraphone": "顫音琴",
+ "tabla": "塔布拉鼓",
+ "trombone": "長號",
+ "tambourine": "鈴鼓",
+ "double_bass": "低音提琴",
+ "brass_instrument": "銅管樂器",
+ "cello": "大提琴",
+ "clarinet": "單簧管",
+ "pizzicato": "撥奏",
+ "hi_hat": "高帽鈸",
+ "wood_block": "木魚",
+ "tubular_bells": "管鐘",
+ "glockenspiel": "鐘琴",
+ "steelpan": "鋼鼓",
+ "wind_instrument": "管樂器",
+ "bell": "鐘",
+ "bicycle_bell": "單車鈴",
+ "wind_chime": "風鈴",
+ "church_bell": "教堂鐘聲",
+ "chime": "鈴聲",
+ "tuning_fork": "音叉",
+ "jingle_bell": "鈴鐺",
+ "accordion": "手風琴",
+ "bagpipes": "風笛",
+ "didgeridoo": "迪吉里杜管",
+ "theremin": "特雷門琴",
+ "singing_bowl": "頌缽",
+ "scratching": "抓碟聲",
+ "pop_music": "流行音樂",
+ "hip_hop_music": "嘻哈音樂",
+ "harmonica": "口琴",
+ "beatboxing": "人聲節奏",
+ "country": "鄉村音樂",
+ "water": "水",
+ "scary_music": "恐怖音樂",
+ "music_of_asia": "亞洲音樂",
+ "dance_music": "舞曲",
+ "video_game_music": "電子遊戲音樂",
+ "thunderstorm": "雷雨",
+ "bluegrass": "藍草音樂",
+ "train_wheels_squealing": "火車車輪聲",
+ "techno": "電子舞曲",
+ "new-age_music": "新世紀音樂",
+ "background_music": "背景音樂",
+ "theme_music": "主題音樂",
+ "jingle": "鈴聲",
+ "bus": "巴士",
+ "emergency_vehicle": "緊急車輛",
+ "aircraft": "飛機",
+ "ice_cream_truck": "雪糕車",
+ "dubstep": "杜步音樂",
+ "aircraft_engine": "飛機引擎聲",
+ "funk": "放克音樂",
+ "lullaby": "搖籃曲",
+ "rain": "雨",
+ "happy_music": "快樂音樂",
+ "music_of_latin_america": "拉丁美洲音樂",
+ "soundtrack_music": "配樂",
+ "rock_music": "搖滾樂",
+ "rock_and_roll": "搖滾樂",
+ "psychedelic_rock": "迷幻搖滾",
+ "rhythm_and_blues": "節奏藍調",
+ "soul_music": "靈魂音樂",
+ "reggae": "雷鬼音樂",
+ "folk_music": "民謠音樂",
+ "middle_eastern_music": "中東音樂",
+ "jazz": "爵士樂",
+ "disco": "迪斯可音樂",
+ "classical_music": "古典音樂",
+ "opera": "歌劇",
+ "electronic_music": "電子音樂",
+ "house_music": "浩室音樂",
+ "electronic_dance_music": "電子舞曲",
+ "ambient_music": "環境音樂",
+ "trance_music": "迷幻音樂",
+ "salsa_music": "薩爾薩音樂",
+ "flamenco": "佛朗明哥",
+ "blues": "藍調音樂",
+ "music_for_children": "兒童音樂",
+ "vocal_music": "聲樂",
+ "a_capella": "無伴奏合唱",
+ "music_of_africa": "非洲音樂",
+ "afrobeat": "非洲節拍",
+ "christian_music": "基督教音樂",
+ "gospel_music": "福音音樂",
+ "music_of_bollywood": "寶萊塢音樂",
+ "ska": "斯卡音樂",
+ "traditional_music": "傳統音樂",
+ "independent_music": "獨立音樂",
+ "song": "歌曲",
+ "raindrop": "雨點聲",
+ "rain_on_surface": "雨打地面聲",
+ "stream": "小溪",
+ "waterfall": "瀑布",
+ "ocean": "海洋",
+ "waves": "波浪",
+ "steam": "蒸氣",
+ "gurgling": "咕嚕聲",
+ "fire": "火",
+ "crackle": "劈啪聲",
+ "vehicle": "車輛",
+ "boat": "船",
+ "sailboat": "帆船",
+ "rowboat": "划艇",
+ "motorboat": "機動船",
+ "ship": "船",
+ "motor_vehicle": "機動車",
+ "car": "車",
+ "toot": "汽車響咹聲",
+ "car_alarm": "汽車防盜器",
+ "power_windows": "電動車窗",
+ "skidding": "車胎打滑聲",
+ "tire_squeal": "車胎尖叫聲",
+ "car_passing_by": "車駛過聲",
+ "race_car": "賽車",
+ "truck": "貨車",
+ "air_brake": "煞車聲",
+ "air_horn": "空氣喇叭",
+ "police_car": "警車",
+ "ambulance": "救護車",
+ "fire_engine": "消防車",
+ "motorcycle": "電單車",
+ "rail_transport": "鐵路運輸",
+ "train_whistle": "火車汽笛聲",
+ "train_horn": "火車喇叭聲",
+ "railroad_car": "火車車廂",
+ "propeller": "螺旋槳",
+ "helicopter": "直升機",
+ "fixed-wing_aircraft": "固定翼飛機",
+ "bicycle": "單車",
+ "skateboard": "滑板",
+ "engine": "引擎",
+ "light_engine": "小型引擎",
+ "dental_drill's_drill": "牙科鑽機",
+ "lawn_mower": "剪草機",
+ "chainsaw": "電鋸",
+ "medium_engine": "中型引擎",
+ "heavy_engine": "大型引擎",
+ "engine_knocking": "引擎敲擊聲",
+ "engine_starting": "引擎啟動聲",
+ "idling": "引擎空轉聲",
+ "accelerating": "加速聲",
+ "door": "門",
+ "doorbell": "門鈴",
+ "ding-dong": "叮咚聲",
+ "sliding_door": "趟門",
+ "knock": "敲門",
+ "tap": "輕敲門",
+ "squeak": "吱吱聲",
+ "cupboard_open_or_close": "櫃門開關聲",
+ "drawer_open_or_close": "抽屜開關聲",
+ "dishes": "餐具聲",
+ "cutlery": "刀叉",
+ "chopping": "切菜聲",
+ "frying": "炒煮",
+ "microwave_oven": "微波爐",
+ "water_tap": "水龍頭",
+ "electric_toothbrush": "電動牙刷",
+ "vacuum_cleaner": "吸塵機",
+ "zipper": "拉鍊",
+ "keys_jangling": "鎖匙碰撞聲",
+ "coin": "硬幣",
+ "scissors": "剪刀",
+ "electric_shaver": "電鬚刨",
+ "shuffling_cards": "洗牌",
+ "typing": "打字",
+ "computer_keyboard": "電腦鍵盤",
+ "telephone": "電話",
+ "telephone_bell_ringing": "電話鈴聲",
+ "siren": "警報聲",
+ "steam_whistle": "蒸氣汽笛",
+ "mechanisms": "機械聲",
+ "ratchet": "棘輪聲",
+ "clock": "時鐘",
+ "tick": "滴答聲",
+ "tick-tock": "滴答滴答聲",
+ "sewing_machine": "衣車",
+ "mechanical_fan": "機械風扇",
+ "printer": "印表機",
+ "camera": "鏡頭",
+ "single-lens_reflex_camera": "單反相機",
+ "tools": "工具",
+ "hammer": "鎚仔",
+ "sawing": "鋸",
+ "filing": "銼",
+ "sanding": "打磨",
+ "power_tool": "電動工具",
+ "drill": "鑽",
+ "explosion": "爆炸",
+ "fusillade": "連環射擊",
+ "artillery_fire": "火砲",
+ "cap_gun": "玩具槍",
+ "fireworks": "煙花",
+ "firecracker": "炮仗",
+ "burst": "爆裂",
+ "eruption": "爆發",
+ "wood": "木頭",
+ "chop": "劈木聲",
+ "splinter": "木刺聲",
+ "crack": "裂聲",
+ "shatter": "破碎聲",
+ "silence": "寂靜",
+ "sound_effect": "音效",
+ "white_noise": "白噪音",
+ "pink_noise": "粉紅噪音",
+ "television": "電視",
+ "radio": "收音機",
+ "field_recording": "現場錄音",
+ "angry_music": "憤怒音樂",
+ "sad_music": "悲傷音樂",
+ "wind": "風",
+ "wind_noise": "風聲",
+ "drum_and_bass": "鼓和貝斯",
+ "wedding_music": "婚禮音樂",
+ "progressive_rock": "前衛搖滾",
+ "grunge": "垃圾搖滾",
+ "punk_rock": "朋克搖滾",
+ "christmas_music": "聖誕音樂",
+ "subway": "地鐵",
+ "thunder": "雷聲",
+ "carnatic_music": "卡納蒂克音樂",
+ "traffic_noise": "交通噪音",
+ "train": "火車",
+ "slam": "砰門聲",
+ "tender_music": "溫柔音樂",
+ "reversing_beeps": "倒車提示聲",
+ "heavy_metal": "重金屬音樂",
+ "jet_engine": "噴射機引擎聲",
+ "rustling_leaves": "樹葉沙沙聲",
+ "electronica": "電子樂",
+ "swing_music": "搖擺音樂",
+ "exciting_music": "刺激音樂",
+ "ringtone": "鈴聲",
+ "pulleys": "滑輪",
+ "jackhammer": "風鑽",
+ "writing": "寫作",
+ "toilet_flush": "沖廁",
+ "whistle": "哨子聲",
+ "gunshot": "槍聲",
+ "alarm_clock": "鬧鐘",
+ "dial_tone": "電話按號聲",
+ "boom": "轟隆",
+ "typewriter": "打字機",
+ "blender": "攪拌機",
+ "toothbrush": "牙刷",
+ "cash_register": "收銀機",
+ "civil_defense_siren": "民防警報",
+ "machine_gun": "機關槍",
+ "sink": "洗手盆",
+ "fire_alarm": "火警鐘",
+ "bathtub": "浴缸",
+ "busy_signal": "線路繁忙聲",
+ "smoke_detector": "煙霧偵測器",
+ "hair_dryer": "吹風機",
+ "alarm": "警報",
+ "gears": "齒輪",
+ "telephone_dialing": "電話撥號聲",
+ "foghorn": "霧號",
+ "buzzer": "蜂鳴器聲",
+ "air_conditioning": "冷氣機",
+ "glass": "玻璃",
+ "chink": "碰撞聲",
+ "environmental_noise": "環境噪音",
+ "static": "靜電聲",
+ "scream": "尖叫聲"
+}
diff --git a/web/public/locales/yue-Hant/common.json b/web/public/locales/yue-Hant/common.json
new file mode 100644
index 000000000..03f4f89b4
--- /dev/null
+++ b/web/public/locales/yue-Hant/common.json
@@ -0,0 +1,252 @@
+{
+ "time": {
+ "untilForTime": "直到 {{time}}",
+ "untilRestart": "直到重新啟動",
+ "yesterday": "昨日",
+ "last7": "過去7日",
+ "last14": "過去14日",
+ "last30": "過去30日",
+ "thisWeek": "今個星期",
+ "lastMonth": "上個月",
+ "10minutes": "10分鐘",
+ "12hours": "12 小時",
+ "24hours": "24 小時",
+ "am": "上午",
+ "year_other": "{{time}}年",
+ "mo": "{{time}}月",
+ "m": "{{time}}分鐘",
+ "minute_other": "{{time}}分鐘",
+ "formattedTimestamp": {
+ "12hour": "M月d日 ah:mm:ss",
+ "24hour": "M月d日 HH:mm:ss"
+ },
+ "formattedTimestampHourMinute": {
+ "12hour": "a h:mm",
+ "24hour": "HH:mm"
+ },
+ "formattedTimestampHourMinuteSecond": {
+ "12hour": "ah:mm:ss",
+ "24hour": "HH:mm:ss"
+ },
+ "formattedTimestampFilename": {
+ "24hour": "yy年MM月dd日 HH時mm分ss秒",
+ "12hour": "yy年MM月dd日 ah時mm分ss秒"
+ },
+ "s": "{{time}}秒",
+ "formattedTimestamp2": {
+ "12hour": "MM月dd日 ah:mm:ss",
+ "24hour": "MM月dd日 HH:mm:ss"
+ },
+ "thisMonth": "今個月",
+ "pm": "下午",
+ "formattedTimestampMonthDayHourMinute": {
+ "24hour": "M月d日 HH:mm",
+ "12hour": "M月d日 ah:mm"
+ },
+ "justNow": "剛剛",
+ "day_other": "{{time}}日",
+ "hour_other": "{{time}}小時",
+ "30minutes": "30分鐘",
+ "5minutes": "5分鐘",
+ "yr": "{{time}}年",
+ "today": "今日",
+ "month_other": "{{time}}月",
+ "second_other": "{{time}}秒",
+ "untilForRestart": "直到 Frigate 重新啟動。",
+ "ago": "{{timeAgo}} 前",
+ "d": "{{time}}日",
+ "lastWeek": "上個星期",
+ "formattedTimestampMonthDayYearHourMinute": {
+ "12hour": "yyyy年M月d日 ah:mm",
+ "24hour": "yyyy年M月d日 HH:mm"
+ },
+ "1hour": "1 小時",
+ "h": "{{time}}小時",
+ "formattedTimestampMonthDay": "M月d日",
+ "formattedTimestampMonthDayYear": {
+ "24hour": "yy年MM月dd日",
+ "12hour": "yy年MM月dd日"
+ }
+ },
+ "unit": {
+ "speed": {
+ "mph": "英里/小時",
+ "kph": "公里/小時"
+ },
+ "length": {
+ "feet": "呎",
+ "meters": "米"
+ }
+ },
+ "label": {
+ "back": "返回"
+ },
+ "button": {
+ "apply": "套用",
+ "reset": "重置",
+ "done": "完成",
+ "enabled": "已啟用",
+ "enable": "啟用",
+ "disabled": "已停用",
+ "disable": "停用",
+ "save": "儲存",
+ "saving": "儲存中…",
+ "cancel": "取消",
+ "close": "關閉",
+ "copy": "複製",
+ "back": "返回",
+ "history": "歷史記錄",
+ "fullscreen": "全螢幕",
+ "exitFullscreen": "離開全螢幕",
+ "pictureInPicture": "畫中畫",
+ "twoWayTalk": "雙向通話",
+ "cameraAudio": "鏡頭音訊",
+ "suspended": "已暫停",
+ "export": "匯出",
+ "deleteNow": "立即刪除",
+ "next": "下一步",
+ "play": "播放",
+ "no": "否",
+ "copyCoordinates": "複製座標",
+ "delete": "刪除",
+ "off": "關閉",
+ "edit": "編輯",
+ "on": "開啟",
+ "yes": "是",
+ "info": "資訊",
+ "download": "下載",
+ "unsuspended": "取消暫停",
+ "unselect": "取消選取"
+ },
+ "menu": {
+ "system": "系統",
+ "systemMetrics": "系統指標",
+ "configuration": "設定",
+ "systemLogs": "系統日誌",
+ "settings": "設定",
+ "configurationEditor": "設定編輯器",
+ "languages": "語言",
+ "language": {
+ "en": "English (英文)",
+ "es": "Español (西班牙文)",
+ "zhCN": "简体中文 (簡體中文)",
+ "hi": "हिन्दी (印地文)",
+ "fr": "Français (法文)",
+ "de": "Deutsch (德文)",
+ "ja": "日本語 (日文)",
+ "it": "Italiano (意大利文)",
+ "tr": "Türkçe (土耳其文)",
+ "nl": "Nederlands (荷蘭文)",
+ "cs": "Čeština (捷克文)",
+ "nb": "Norsk Bokmål (挪威文)",
+ "ko": "한국어 (韓文)",
+ "vi": "Tiếng Việt (越南文)",
+ "fa": "فارسی (波斯文)",
+ "pl": "Polski (波蘭文)",
+ "el": "Ελληνικά (希臘文)",
+ "ro": "Română (羅馬尼亞文)",
+ "hu": "Magyar (匈牙利文)",
+ "fi": "Suomi (芬蘭文)",
+ "da": "Dansk (丹麥文)",
+ "sk": "Slovenčina (斯洛伐克文)",
+ "withSystem": {
+ "label": "使用系統語言設定"
+ },
+ "ru": "Русский (俄文)",
+ "sv": "Svenska (瑞典文)",
+ "ar": "العربية (阿拉伯文)",
+ "pt": "Português (葡萄牙文)",
+ "uk": "Українська (烏克蘭文)",
+ "he": "עברית (希伯來文)",
+ "yue": "粵語 (廣東話)",
+ "th": "ไทย (泰文)",
+ "ca": "Català (加泰羅尼亞語)"
+ },
+ "appearance": "外觀",
+ "darkMode": {
+ "label": "深色模式",
+ "light": "淺色",
+ "dark": "深色",
+ "withSystem": {
+ "label": "使用系統模式設定"
+ }
+ },
+ "withSystem": "系統",
+ "theme": {
+ "label": "主題",
+ "blue": "藍色",
+ "green": "綠色",
+ "nord": "北歐風",
+ "red": "紅色",
+ "default": "預設",
+ "contrast": "高對比",
+ "highcontrast": "高對比度"
+ },
+ "documentation": {
+ "title": "文件",
+ "label": "Frigate 文件"
+ },
+ "restart": "重新啟動 Frigate",
+ "live": {
+ "title": "即時",
+ "allCameras": "所有鏡頭",
+ "cameras": {
+ "title": "鏡頭",
+ "count_other": "{{count}} 個鏡頭"
+ }
+ },
+ "review": "審查",
+ "explore": "瀏覽",
+ "export": "匯出",
+ "uiPlayground": "UI 測試場",
+ "faceLibrary": "臉部資料庫",
+ "user": {
+ "title": "使用者",
+ "logout": "登出",
+ "account": "帳戶",
+ "current": "當前使用者:{{user}}",
+ "anonymous": "匿名",
+ "setPassword": "設定密碼"
+ },
+ "help": "幫助"
+ },
+ "role": {
+ "admin": "管理員",
+ "viewer": "檢視者",
+ "desc": "管理員擁有 Frigate UI 全功能存取權限。檢視者只能查看鏡頭、審查項目和歷史影像。",
+ "title": "角色"
+ },
+ "pagination": {
+ "label": "分頁",
+ "previous": {
+ "title": "上一頁",
+ "label": "前往上一頁"
+ },
+ "next": {
+ "title": "下一頁",
+ "label": "前往下一頁"
+ },
+ "more": "更多頁數"
+ },
+ "accessDenied": {
+ "title": "拒絕存取",
+ "documentTitle": "拒絕存取 - Frigate",
+ "desc": "你無權查看此頁面。"
+ },
+ "selectItem": "選擇 {{item}}",
+ "toast": {
+ "save": {
+ "error": {
+ "noMessage": "儲存設定變更失敗",
+ "title": "儲存設定變更失敗:{{errorMessage}}"
+ },
+ "title": "儲存"
+ },
+ "copyUrlToClipboard": "已複製 URL 到剪貼簿。"
+ },
+ "notFound": {
+ "documentTitle": "找不到頁面 - Frigate",
+ "desc": "找不到頁面",
+ "title": "404"
+ }
+}
diff --git a/web/public/locales/yue-Hant/components/auth.json b/web/public/locales/yue-Hant/components/auth.json
new file mode 100644
index 000000000..ebc3b8df7
--- /dev/null
+++ b/web/public/locales/yue-Hant/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "errors": {
+ "webUnknownError": "未知錯誤。請檢查控制台日誌。",
+ "rateLimit": "超過速率限制。請稍後再試。",
+ "usernameRequired": "必須填寫用戶名",
+ "passwordRequired": "必須填寫密碼",
+ "loginFailed": "登入失敗",
+ "unknownError": "未知錯誤。請檢查日誌。"
+ },
+ "user": "用戶名",
+ "password": "密碼",
+ "login": "登入"
+ }
+}
diff --git a/web/public/locales/yue-Hant/components/camera.json b/web/public/locales/yue-Hant/components/camera.json
new file mode 100644
index 000000000..80cb5d833
--- /dev/null
+++ b/web/public/locales/yue-Hant/components/camera.json
@@ -0,0 +1,86 @@
+{
+ "group": {
+ "camera": {
+ "setting": {
+ "audio": {
+ "tips": {
+ "title": "此串流必須從你的鏡頭輸出音訊並在 go2rtc 中設定。",
+ "document": "閱讀文件 "
+ }
+ },
+ "streamMethod": {
+ "method": {
+ "continuousStreaming": {
+ "desc": {
+ "warning": "持續串流可能導致高頻寬使用及效能問題,請小心使用。",
+ "title": "即使沒有偵測到活動,只要在控制台上可見,鏡頭影像也會一直保持即時串流。"
+ },
+ "label": "持續串流"
+ },
+ "smartStreaming": {
+ "label": "智能串流(建議)",
+ "desc": "當沒有偵測到活動時,智能串流會每分鐘更新一次鏡頭影像以節省頻寬和資源。當偵測到活動時,影像會無縫切換到即時串流。"
+ },
+ "noStreaming": {
+ "label": "不串流",
+ "desc": "鏡頭影像每分鐘只會更新一次,不會進行即時串流。"
+ }
+ },
+ "label": "串流方式",
+ "placeholder": "選擇串流方式"
+ },
+ "compatibilityMode": {
+ "label": "相容模式",
+ "desc": "只有當你的鏡頭串流出現色彩異常及右側有斜線時,才啟用此選項。"
+ },
+ "label": "鏡頭串流設定",
+ "title": "{{cameraName}} 串流設定",
+ "desc": "更改此鏡頭群組控制台的即時串流選項。這些設定是裝置/瀏覽器專屬的。",
+ "audioIsAvailable": "此串流有提供音訊",
+ "audioIsUnavailable": "此串流沒有音訊",
+ "placeholder": "選擇串流來源",
+ "stream": "串流"
+ }
+ },
+ "delete": {
+ "confirm": {
+ "title": "確認刪除",
+ "desc": "你確定要刪除鏡頭群組 {{name}} 嗎?"
+ },
+ "label": "刪除鏡頭群組"
+ },
+ "name": {
+ "errorMessage": {
+ "exists": "鏡頭群組名稱已存在。",
+ "invalid": "鏡頭群組名稱無效。",
+ "mustLeastCharacters": "鏡頭群組名稱必須至少包含兩個字元。",
+ "nameMustNotPeriod": "鏡頭群組名稱不能包含句號。"
+ },
+ "placeholder": "請輸入名稱…",
+ "label": "名稱"
+ },
+ "icon": "圖標",
+ "cameras": {
+ "desc": "為此群組選擇鏡頭。",
+ "label": "鏡頭"
+ },
+ "label": "鏡頭群組",
+ "add": "新增鏡頭群組",
+ "edit": "編輯鏡頭群組",
+ "success": "鏡頭群組({{name}})已儲存。"
+ },
+ "debug": {
+ "options": {
+ "label": "設定",
+ "title": "選項",
+ "showOptions": "顯示選項",
+ "hideOptions": "隱藏選項"
+ },
+ "mask": "遮罩",
+ "boundingBox": "框選區",
+ "motion": "移動",
+ "regions": "大區域",
+ "timestamp": "時間戳記",
+ "zones": "區域"
+ }
+}
diff --git a/web/public/locales/yue-Hant/components/dialog.json b/web/public/locales/yue-Hant/components/dialog.json
new file mode 100644
index 000000000..775681b07
--- /dev/null
+++ b/web/public/locales/yue-Hant/components/dialog.json
@@ -0,0 +1,112 @@
+{
+ "restart": {
+ "title": "你確定要重新啟動 Frigate 嗎?",
+ "button": "重新啟動",
+ "restarting": {
+ "title": "Frigate 正在重新啟動",
+ "content": "此頁面將在 {{countdown}} 秒後重新載入。",
+ "button": "立即強制重新載入"
+ }
+ },
+ "explore": {
+ "plus": {
+ "submitToPlus": {
+ "label": "提交到 Frigate+",
+ "desc": "位於你想避免的區域的物件並不是誤判。提交這些作為誤判會令模型混淆。"
+ },
+ "review": {
+ "question": {
+ "label": "確認此標籤給 Frigate Plus",
+ "ask_a": "此物件是 {{label}} 嗎?",
+ "ask_an": "此物件是 {{label}} 嗎?",
+ "ask_full": "此物件是 {{untranslatedLabel}}({{translatedLabel}})嗎?"
+ },
+ "state": {
+ "submitted": "已提交"
+ }
+ }
+ },
+ "video": {
+ "viewInHistory": "在歷史記錄中查看"
+ }
+ },
+ "export": {
+ "time": {
+ "fromTimeline": "從時間線選取",
+ "lastHour_other": "最后{{count}}小時",
+ "end": {
+ "label": "選擇結束時間",
+ "title": "結束時間"
+ },
+ "custom": "自訂",
+ "start": {
+ "title": "開始時間",
+ "label": "選擇開始時間"
+ }
+ },
+ "name": {
+ "placeholder": "為匯出命名"
+ },
+ "select": "選取",
+ "export": "匯出",
+ "selectOrExport": "選取或匯出",
+ "toast": {
+ "error": {
+ "failed": "無法開始匯出:{{error}}",
+ "noVaildTimeSelected": "沒有選取有效的時間範圍",
+ "endTimeMustAfterStartTime": "結束時間必須在開始時間之後"
+ },
+ "success": "成功開始匯出。請到 /exports 資料夾查看檔案。"
+ },
+ "fromTimeline": {
+ "saveExport": "儲存匯出",
+ "previewExport": "預覽匯出"
+ }
+ },
+ "streaming": {
+ "label": "串流",
+ "restreaming": {
+ "disabled": "此鏡頭未啟用重串流。",
+ "desc": {
+ "title": "設定 go2rtc 以啟用此鏡頭的更多即時預覽選項及音訊。",
+ "readTheDocumentation": "閱讀文件"
+ }
+ },
+ "showStats": {
+ "desc": "啟用此選項可在鏡頭畫面上顯示串流統計資料。",
+ "label": "顯示串流統計資料"
+ },
+ "debugView": "除錯檢視"
+ },
+ "search": {
+ "saveSearch": {
+ "label": "儲存搜尋",
+ "desc": "請為這個已儲存的搜尋輸入名稱。",
+ "placeholder": "請輸入搜尋名稱",
+ "overwrite": "{{searchName}} 已存在。儲存將會覆蓋現有資料。",
+ "button": {
+ "save": {
+ "label": "儲存此搜尋"
+ }
+ },
+ "success": "搜尋({{searchName}})已儲存。"
+ }
+ },
+ "recording": {
+ "confirmDelete": {
+ "title": "確認刪除",
+ "desc": {
+ "selected": "你確定要刪除與此審查項目相關的所有錄影嗎?detect 串流未接收到任何畫面,請檢查錯誤日誌",
+ "title": "串流已離線"
+ },
+ "cameraDisabled": "鏡頭已停用",
+ "stats": {
+ "bandwidth": {
+ "short": "頻寬",
+ "title": "頻寬:"
+ },
+ "latency": {
+ "value": "{{seconds}} 秒",
+ "short": {
+ "value": "{{seconds}} 秒",
+ "title": "延遲"
+ },
+ "title": "延遲:"
+ },
+ "totalFrames": "總畫面數:",
+ "droppedFrames": {
+ "short": {
+ "title": "已丟棄",
+ "value": "{{droppedFrames}} 個畫面"
+ },
+ "title": "丟棄畫面數:"
+ },
+ "decodedFrames": "解碼畫面數:",
+ "droppedFrameRate": "畫面丟棄率:",
+ "streamType": {
+ "title": "串流類型:",
+ "short": "類型"
+ }
+ },
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "成功提交畫面至 Frigate+"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "提交畫面至 Frigate+ 失敗"
+ }
+ },
+ "noPreviewFoundFor": "找不到 {{cameraName}} 的預覽",
+ "livePlayerRequiredIOSVersion": "此串流類型需要 iOS 17.1 或以上版本。"
+}
diff --git a/web/public/locales/yue-Hant/objects.json b/web/public/locales/yue-Hant/objects.json
new file mode 100644
index 000000000..b0838d796
--- /dev/null
+++ b/web/public/locales/yue-Hant/objects.json
@@ -0,0 +1,120 @@
+{
+ "vehicle": "車輛",
+ "car": "車",
+ "boat": "船",
+ "bus": "巴士",
+ "motorcycle": "電單車",
+ "train": "火車",
+ "bicycle": "單車",
+ "skateboard": "滑板",
+ "door": "門",
+ "blender": "攪拌機",
+ "sink": "洗手盆",
+ "scissors": "剪刀",
+ "clock": "時鐘",
+ "toothbrush": "牙刷",
+ "hair_dryer": "吹風機",
+ "person": "人",
+ "airplane": "飛機",
+ "traffic_light": "紅綠燈",
+ "fire_hydrant": "消防栓",
+ "street_sign": "街道標誌",
+ "stop_sign": "停車標誌",
+ "parking_meter": "咪錶",
+ "bench": "長凳",
+ "bird": "鳥",
+ "cat": "貓",
+ "sheep": "羊",
+ "cow": "牛",
+ "elephant": "大象",
+ "bear": "熊",
+ "zebra": "斑馬",
+ "giraffe": "長頸鹿",
+ "backpack": "背囊",
+ "tie": "領呔",
+ "suitcase": "行李箱",
+ "frisbee": "飛碟",
+ "skis": "滑雪板",
+ "snowboard": "單板滑雪板",
+ "sports_ball": "運動球",
+ "kite": "風箏",
+ "baseball_bat": "棒球棍",
+ "baseball_glove": "棒球手套",
+ "surfboard": "衝浪板",
+ "tennis_racket": "網球拍",
+ "bottle": "樽",
+ "plate": "碟",
+ "wine_glass": "酒杯",
+ "cup": "杯",
+ "fork": "叉",
+ "bowl": "碗",
+ "banana": "香蕉",
+ "apple": "蘋果",
+ "sandwich": "三文治",
+ "orange": "橙",
+ "carrot": "紅蘿蔔",
+ "hot_dog": "熱狗",
+ "pizza": "薄餅",
+ "donut": "甜甜圈",
+ "cake": "蛋糕",
+ "chair": "凳",
+ "couch": "梳化",
+ "laptop": "手提電腦",
+ "mouse": "滑鼠",
+ "remote": "遙控器",
+ "keyboard": "鍵盤",
+ "cell_phone": "手機",
+ "microwave": "微波爐",
+ "oven": "焗爐",
+ "toaster": "多士爐",
+ "refrigerator": "雪櫃",
+ "book": "書",
+ "vase": "花瓶",
+ "teddy_bear": "泰迪熊",
+ "hair_brush": "梳",
+ "squirrel": "松鼠",
+ "deer": "鹿",
+ "animal": "動物",
+ "bark": "樹皮",
+ "fox": "狐狸",
+ "goat": "山羊",
+ "rabbit": "兔",
+ "raccoon": "浣熊",
+ "robot_lawnmower": "自動剪草機",
+ "waste_bin": "垃圾桶",
+ "license_plate": "車牌",
+ "bbq_grill": "燒烤爐",
+ "amazon": "亞馬遜",
+ "usps": "美國郵政",
+ "ups": "UPS",
+ "postnl": "荷蘭郵政",
+ "nzpost": "新西蘭郵政",
+ "postnord": "北歐郵政",
+ "gls": "GLS",
+ "dpd": "DPD",
+ "broccoli": "西蘭花",
+ "umbrella": "雨傘",
+ "eye_glasses": "眼鏡",
+ "dog": "狗",
+ "desk": "書枱",
+ "tv": "電視",
+ "horse": "馬",
+ "mirror": "鏡",
+ "spoon": "匙羹",
+ "hat": "帽",
+ "shoe": "鞋",
+ "potted_plant": "盆栽植物",
+ "fedex": "聯邦快遞",
+ "handbag": "手袋",
+ "dining_table": "飯枱",
+ "an_post": "愛爾蘭郵政",
+ "knife": "刀",
+ "window": "窗",
+ "bed": "床",
+ "toilet": "廁所",
+ "purolator": "Purolator",
+ "on_demand": "按需要提供",
+ "face": "人臉",
+ "package": "包裹",
+ "dhl": "DHL"
+}
diff --git a/web/public/locales/yue-Hant/views/configEditor.json b/web/public/locales/yue-Hant/views/configEditor.json
new file mode 100644
index 000000000..3e23edb7f
--- /dev/null
+++ b/web/public/locales/yue-Hant/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "documentTitle": "設定編輯器 - Frigate",
+ "configEditor": "設定編輯器",
+ "copyConfig": "複製設定",
+ "saveAndRestart": "儲存並重新啟動",
+ "saveOnly": "只儲存",
+ "toast": {
+ "success": {
+ "copyToClipboard": "設定已複製到剪貼簿。"
+ },
+ "error": {
+ "savingError": "儲存設定時出錯"
+ }
+ },
+ "confirm": "是否不儲存就離開?"
+}
diff --git a/web/public/locales/yue-Hant/views/events.json b/web/public/locales/yue-Hant/views/events.json
new file mode 100644
index 000000000..e9929a350
--- /dev/null
+++ b/web/public/locales/yue-Hant/views/events.json
@@ -0,0 +1,38 @@
+{
+ "camera": "鏡頭",
+ "alerts": "警報",
+ "empty": {
+ "alert": "沒有警報需要審查",
+ "detection": "沒有偵測到的項目需要審查",
+ "motion": "找不到移動數據"
+ },
+ "timeline": "時間線",
+ "events": {
+ "label": "事件",
+ "noFoundForTimePeriod": "此時段內沒有找到事件。",
+ "aria": "選擇事件"
+ },
+ "recordings": {
+ "documentTitle": "錄影 - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "過去24小時"
+ },
+ "markAsReviewed": "標記為已審查",
+ "markTheseItemsAsReviewed": "將這些項目標記為已審查",
+ "newReviewItems": {
+ "label": "查看新的審查項目",
+ "button": "有新的審查項目"
+ },
+ "selected_one": "已選擇 {{count}} 項",
+ "selected_other": "已選擇 {{count}} 項",
+ "allCameras": "所有鏡頭",
+ "documentTitle": "審查 - Frigate",
+ "motion": {
+ "only": "只顯示移動",
+ "label": "移動"
+ },
+ "detections": "偵測",
+ "timeline.aria": "選擇時間線",
+ "detected": "已偵測"
+}
diff --git a/web/public/locales/yue-Hant/views/explore.json b/web/public/locales/yue-Hant/views/explore.json
new file mode 100644
index 000000000..46db41b6f
--- /dev/null
+++ b/web/public/locales/yue-Hant/views/explore.json
@@ -0,0 +1,205 @@
+{
+ "documentTitle": "瀏覽 - Frigate",
+ "generativeAI": "生成式人工智能",
+ "exploreIsUnavailable": {
+ "title": "無法使用瀏覽功能",
+ "embeddingsReindexing": {
+ "startingUp": "啟動中…",
+ "estimatedTime": "預計剩餘時間:",
+ "finishingShortly": "即將完成",
+ "step": {
+ "thumbnailsEmbedded": "已嵌入縮圖: ",
+ "descriptionsEmbedded": "已嵌入描述: ",
+ "trackedObjectsProcessed": "已處理的追蹤物件: "
+ },
+ "context": "完成重新索引追蹤物件的嵌入後即可使用瀏覽功能。"
+ },
+ "downloadingModels": {
+ "tips": {
+ "context": "下載完成後,你可能需要重新索引追蹤物件的嵌入。",
+ "documentation": "閱讀文件"
+ },
+ "error": "發生錯誤。請檢查 Frigate 日誌。",
+ "context": "Frigate 正在下載必要的嵌入模型以支援語意搜尋功能。這可能需要幾分鐘,視乎你的網絡速度。",
+ "setup": {
+ "textTokenizer": "文字分詞器",
+ "textModel": "文字模型",
+ "visionModelFeatureExtractor": "視覺模型特徵提取器",
+ "visionModel": "視覺模型"
+ }
+ }
+ },
+ "trackedObjectDetails": "追蹤物件詳情",
+ "type": {
+ "details": "詳情",
+ "snapshot": "快照",
+ "video": "影片",
+ "object_lifecycle": "物件生命周期"
+ },
+ "objectLifecycle": {
+ "title": "物件生命周期",
+ "noImageFound": "此時間點找不到圖像。",
+ "createObjectMask": "建立物件遮罩",
+ "lifecycleItemDesc": {
+ "active": "{{label}} 變為活躍",
+ "stationary": "{{label}} 變為靜止",
+ "attribute": {
+ "faceOrLicense_plate": "偵測到 {{label}} 的 {{attribute}}",
+ "other": "{{label}} 被識別為 {{attribute}}"
+ },
+ "header": {
+ "zones": "區域",
+ "ratio": "比例",
+ "area": "區域範圍"
+ },
+ "heard": "聽到 {{label}}",
+ "entered_zone": "{{label}} 進入了 {{zones}}",
+ "gone": "{{label}} 離開了",
+ "visible": "偵測到 {{label}}",
+ "external": "偵測到 {{label}}"
+ },
+ "annotationSettings": {
+ "title": "註解設定",
+ "showAllZones": {
+ "title": "顯示所有區域",
+ "desc": "在物件進入區域的畫面上總是顯示區域。"
+ },
+ "offset": {
+ "tips": "提示:試想像有一段事件片段,當中有人由左行到右。如果事件時間線上的方框一直偏向人物的左邊,則應該減少數值。相反,如果有人由左行到右,而方框一直走在人物前面,則應該增加數值。",
+ "desc": "此資料來自鏡頭的偵測串流,但覆蓋在錄影串流的畫面上。兩個串流通常無法完全同步。因此邊界框和影片可能無法完全對齊。不過可以使用 annotation_offset 欄位來調整。",
+ "label": "註解偏移量",
+ "documentation": "閱讀文件 ",
+ "millisecondsToOffset": "偵測註解的偏移毫秒數。預設:0",
+ "toast": {
+ "success": "{{camera}} 的註解偏移量已儲存到設定檔。請重新啟動 Frigate 以套用更改。"
+ }
+ }
+ },
+ "carousel": {
+ "previous": "上一張",
+ "next": "下一張"
+ },
+ "adjustAnnotationSettings": "調整註解設定",
+ "scrollViewTips": "滾動以查看此物件生命周期中的重要時刻。",
+ "autoTrackingTips": "自動追蹤鏡頭的邊界框位置可能不準確。",
+ "count": "第 {{first}} 個,共 {{second}} 個",
+ "trackedPoint": "追蹤點"
+ },
+ "details": {
+ "item": {
+ "title": "審查項目詳情",
+ "desc": "審查項目詳情",
+ "button": {
+ "share": "分享此審查項目",
+ "viewInExplore": "在瀏覽中查看"
+ },
+ "tips": {
+ "mismatch_other": "偵測到 {{count}} 個不可用的物件並包含在此審查項目中。這些物件可能未符合警報或偵測標準,或已被清除/刪除。",
+ "hasMissingObjects": "如果你想讓 Frigate 保存下列標籤的追蹤物件,請調整設定:{{objects}}"
+ },
+ "toast": {
+ "success": {
+ "updatedSublabel": "成功更新子標籤。",
+ "updatedLPR": "成功更新車牌號碼。",
+ "regenerate": "已從 {{provider}} 請求新的描述。根據提供者的速度,生成新的描述可能需要一些時間。"
+ },
+ "error": {
+ "regenerate": "呼叫 {{provider}} 以獲取新描述失敗:{{errorMessage}}",
+ "updatedSublabelFailed": "更新子標籤失敗:{{errorMessage}}",
+ "updatedLPRFailed": "更新車牌號碼失敗:{{errorMessage}}"
+ }
+ }
+ },
+ "label": "標籤",
+ "recognizedLicensePlate": "已識別車牌",
+ "estimatedSpeed": "預計速度",
+ "objects": "物件",
+ "camera": "鏡頭",
+ "zones": "區域",
+ "timestamp": "時間戳記",
+ "tips": {
+ "descriptionSaved": "成功保存描述",
+ "saveDescriptionFailed": "更新描述失敗:{{errorMessage}}"
+ },
+ "regenerateFromSnapshot": "從快照重新生成",
+ "button": {
+ "regenerate": {
+ "label": "重新生成追蹤物件描述",
+ "title": "重新生成"
+ },
+ "findSimilar": "尋找相似項目"
+ },
+ "description": {
+ "label": "描述",
+ "placeholder": "追蹤物件的描述",
+ "aiTips": "Frigate 會等到追蹤物件生命周期結束後,才向你的生成式 AI 提供者請求描述。"
+ },
+ "editLPR": {
+ "descNoLabel": "為此追蹤物件輸入新的車牌號碼",
+ "title": "編輯車牌號碼",
+ "desc": "為此 {{label}} 輸入新的車牌號碼"
+ },
+ "topScore": {
+ "label": "最高分數",
+ "info": "最高分數是追蹤物件的最高中位分數,因此可能與搜尋結果縮圖上顯示的分數不同。"
+ },
+ "editSubLabel": {
+ "desc": "為此 {{label}} 輸入新的子標籤",
+ "title": "編輯子標籤",
+ "descNoLabel": "為此追蹤物件輸入新的子標籤"
+ },
+ "snapshotScore": {
+ "label": "快照分數"
+ },
+ "expandRegenerationMenu": "展開重新生成選單",
+ "regenerateFromThumbnails": "從縮圖重新生成"
+ },
+ "itemMenu": {
+ "downloadVideo": {
+ "label": "下載影片",
+ "aria": "下載影片"
+ },
+ "downloadSnapshot": {
+ "label": "下載快照",
+ "aria": "下載快照"
+ },
+ "viewObjectLifecycle": {
+ "label": "查看物件生命周期",
+ "aria": "顯示物件生命周期"
+ },
+ "findSimilar": {
+ "label": "尋找相似項目",
+ "aria": "尋找相似追蹤物件"
+ },
+ "submitToPlus": {
+ "label": "提交到 Frigate+",
+ "aria": "提交到 Frigate Plus"
+ },
+ "viewInHistory": {
+ "label": "在歷史記錄中查看",
+ "aria": "在歷史記錄中查看"
+ },
+ "deleteTrackedObject": {
+ "label": "刪除此追蹤物件"
+ }
+ },
+ "dialog": {
+ "confirmDelete": {
+ "title": "確認刪除",
+ "desc": "刪除此追蹤物件會移除快照、所有已保存的嵌入,以及相關的物件生命周期記錄。歷史記錄中的錄影不會被刪除。mode: {{effectiveRetainMode}},因此此按需錄影只會保留{{effectiveRetainModeName}}的片段。"
+ },
+ "editLayout": {
+ "label": "編輯版面配置",
+ "group": {
+ "label": "編輯鏡頭群組"
+ },
+ "exitEdit": "結束編輯"
+ }
+}
diff --git a/web/public/locales/yue-Hant/views/recording.json b/web/public/locales/yue-Hant/views/recording.json
new file mode 100644
index 000000000..34473d299
--- /dev/null
+++ b/web/public/locales/yue-Hant/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "filter": "篩選",
+ "export": "匯出",
+ "calendar": "日曆",
+ "filters": "篩選條件",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "未選擇有效的時間範圍",
+ "endTimeMustAfterStartTime": "結束時間必須在開始時間之後"
+ }
+ }
+}
diff --git a/web/public/locales/yue-Hant/views/search.json b/web/public/locales/yue-Hant/views/search.json
new file mode 100644
index 000000000..fea893191
--- /dev/null
+++ b/web/public/locales/yue-Hant/views/search.json
@@ -0,0 +1,72 @@
+{
+ "search": "搜尋",
+ "savedSearches": "已儲存的搜尋",
+ "searchFor": "搜尋 {{inputValue}}",
+ "button": {
+ "clear": "清除搜尋",
+ "save": "儲存搜尋",
+ "delete": "刪除已儲存的搜尋",
+ "filterInformation": "篩選資料",
+ "filterActive": "篩選中"
+ },
+ "trackedObjectId": "追蹤物件編號",
+ "filter": {
+ "label": {
+ "labels": "標籤",
+ "zones": "區域",
+ "search_type": "搜尋類型",
+ "time_range": "時間範圍",
+ "after": "之後",
+ "recognized_license_plate": "已辨識車牌",
+ "has_clip": "有片段",
+ "has_snapshot": "有快照",
+ "min_score": "最低分數",
+ "before": "之前",
+ "max_score": "最高分數",
+ "max_speed": "最高速度",
+ "min_speed": "最低速度",
+ "cameras": "鏡頭",
+ "sub_labels": "子標籤"
+ },
+ "searchType": {
+ "thumbnail": "縮圖",
+ "description": "描述"
+ },
+ "toast": {
+ "error": {
+ "beforeDateBeLaterAfter": "「結束」日期必須遲於「開始」日期。",
+ "afterDatebeEarlierBefore": "「開始」日期必須早於「結束」日期。",
+ "minScoreMustBeLessOrEqualMaxScore": "「最低分數」必須少於或等於「最高分數」。",
+ "maxScoreMustBeGreaterOrEqualMinScore": "「最高分數」必須多於或等於「最低分數」。",
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "「最高速度」必須多於或等於「最低速度」。",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "「最低速度」必須少於或等於「最高速度」。"
+ }
+ },
+ "tips": {
+ "title": "如何使用文字篩選",
+ "desc": {
+ "step1": "輸入篩選鍵名後加上冒號(例如:\"cameras:\")。",
+ "step2": "從建議中選擇一個值,或者自行輸入。",
+ "step3": "可以用空格隔開,連續使用多個篩選條件。",
+ "step4": "日期篩選(before: 同 after:)要用 {{DateFormat}} 格式。",
+ "step5": "時間範圍篩選要用 {{exampleTime}} 格式。",
+ "step6": "點擊旁邊的「x」就可以移除篩選條件。",
+ "text": "篩選可以幫你縮窄搜尋結果。以下係使用方法:",
+ "exampleLabel": "例子:"
+ }
+ },
+ "header": {
+ "activeFilters": "啟用中的篩選條件",
+ "noFilters": "篩選條件",
+ "currentFilterType": "篩選數值"
+ }
+ },
+ "similaritySearch": {
+ "title": "相似搜尋",
+ "active": "正在進行相似搜尋",
+ "clear": "清除相似搜尋"
+ },
+ "placeholder": {
+ "search": "搜尋…"
+ }
+}
diff --git a/web/public/locales/yue-Hant/views/settings.json b/web/public/locales/yue-Hant/views/settings.json
new file mode 100644
index 000000000..a68c9d2bd
--- /dev/null
+++ b/web/public/locales/yue-Hant/views/settings.json
@@ -0,0 +1,680 @@
+{
+ "documentTitle": {
+ "default": "設定 - Frigate",
+ "authentication": "認證設定 - Frigate",
+ "camera": "鏡頭設定 - Frigate",
+ "classification": "進階功能設定 - Frigate",
+ "masksAndZones": "遮罩與區域編輯器 - Frigate",
+ "motionTuner": "移動調校器 - Frigate",
+ "object": "除錯 - Frigate",
+ "general": "一般設定 - Frigate",
+ "frigatePlus": "Frigate+ 設定 - Frigate",
+ "notifications": "通知設定 - Frigate",
+ "enrichments": "進階功能設定 - Frigate"
+ },
+ "menu": {
+ "ui": "介面",
+ "classification": "進階功能",
+ "cameras": "鏡頭設定",
+ "masksAndZones": "遮罩/區域",
+ "motionTuner": "移動調校器",
+ "debug": "除錯",
+ "users": "用戶",
+ "notifications": "通知",
+ "frigateplus": "Frigate+",
+ "enrichments": "進階功能"
+ },
+ "dialog": {
+ "unsavedChanges": {
+ "title": "你有未儲存的更改。",
+ "desc": "你想在繼續前儲存更改嗎?"
+ }
+ },
+ "cameraSetting": {
+ "camera": "鏡頭",
+ "noCamera": "沒有鏡頭"
+ },
+ "general": {
+ "title": "一般設定",
+ "liveDashboard": {
+ "playAlertVideos": {
+ "label": "播放警報影片",
+ "desc": "預設情況下,即時儀表板上的最近警報會以小型循環影片形式播放。停用此選項後,只會在此裝置/瀏覽器上顯示警報的靜態圖片。"
+ },
+ "automaticLiveView": {
+ "label": "自動即時檢視",
+ "desc": "當偵測到活動時,自動切換到該鏡頭的即時畫面。若停用此選項,即時儀表板上的鏡頭靜態畫面將每分鐘只更新一次。"
+ },
+ "title": "即時儀表板"
+ },
+ "storedLayouts": {
+ "title": "儲存的版面配置",
+ "clearAll": "清除所有版面配置",
+ "desc": "鏡頭群組內的鏡頭佈局可以拖動或調整大小。位置會儲存在你瀏覽器的本機儲存空間內。"
+ },
+ "cameraGroupStreaming": {
+ "title": "鏡頭群組串流設定",
+ "clearAll": "清除所有串流設定",
+ "desc": "每個鏡頭群組的串流設定會儲存在你瀏覽器的本機儲存空間內。"
+ },
+ "recordingsViewer": {
+ "defaultPlaybackRate": {
+ "desc": "錄影播放的預設播放速度。",
+ "label": "預設播放速度"
+ },
+ "title": "錄影瀏覽器"
+ },
+ "calendar": {
+ "title": "日曆",
+ "firstWeekday": {
+ "label": "每星期的第一天",
+ "sunday": "星期日",
+ "monday": "星期一",
+ "desc": "審查日曆中每星期開始的日子。"
+ }
+ },
+ "toast": {
+ "success": {
+ "clearStoredLayout": "已清除 {{cameraName}} 的儲存版面配置",
+ "clearStreamingSettings": "已清除所有鏡頭群組的串流設定。"
+ },
+ "error": {
+ "clearStoredLayoutFailed": "清除儲存版面配置失敗:{{errorMessage}}",
+ "clearStreamingSettingsFailed": "清除串流設定失敗:{{errorMessage}}"
+ }
+ }
+ },
+ "classification": {
+ "birdClassification": {
+ "desc": "鳥類分類會使用量化 Tensorflow 模型識別已知鳥類。當辨識到已知鳥類時,牠的常見名稱會加到子標籤上。此資訊會顯示在介面、篩選器及通知中。",
+ "title": "鳥類分類"
+ },
+ "semanticSearch": {
+ "title": "語意搜尋",
+ "desc": "Frigate 的語意搜尋功能讓你可以利用影像本身、自訂文字描述,或自動產生的描述,在審查項目中尋找已追蹤的物件。",
+ "readTheDocumentation": "閱讀文件",
+ "reindexNow": {
+ "label": "立即重建索引",
+ "confirmTitle": "確認重建索引",
+ "confirmButton": "重建索引",
+ "success": "重建索引已成功開始。",
+ "alreadyInProgress": "重建索引已在進行中。",
+ "error": "啟動重建索引失敗:{{errorMessage}}",
+ "confirmDesc": "你確定要重建索引所有已追蹤物件的嵌入向量嗎?這個過程會在背景運行,但可能會用盡你的 CPU,而且需要一定時間。你可以在「瀏覽」頁面查看進度。",
+ "desc": "重建索引會為所有已追蹤物件重新生成嵌入向量。這個過程會在背景運行,可能會用盡你的 CPU,所需時間取決於已追蹤物件的數量。"
+ },
+ "modelSize": {
+ "label": "模型大小",
+ "desc": "用於語意搜尋的模型大小。",
+ "small": {
+ "title": "小型",
+ "desc": "使用小型模型會採用量化版本,較少佔用 RAM,在 CPU 上運行更快,而嵌入品質的差異非常細微。"
+ },
+ "large": {
+ "title": "大型",
+ "desc": "使用大型模型會採用完整的 Jina 模型,並在適用情況下自動於 GPU 上運行。"
+ }
+ }
+ },
+ "faceRecognition": {
+ "modelSize": {
+ "small": {
+ "title": "小型",
+ "desc": "使用小型模型會採用 FaceNet 臉部嵌入模型,在大多數 CPU 上能有效運行。"
+ },
+ "large": {
+ "title": "大型",
+ "desc": "使用大型模型會採用 ArcFace 臉部嵌入模型,並在適用情況下自動於 GPU 上運行。"
+ },
+ "label": "模型大小",
+ "desc": "用於人臉識別的模型大小。"
+ },
+ "readTheDocumentation": "閱讀文件",
+ "title": "人臉識別",
+ "desc": "人臉識別功能允許為人物分配名字,當辨識到他們的臉孔時,Frigate 會將名字加到子標籤上。此資訊會顯示於介面、篩選器及通知中。"
+ },
+ "licensePlateRecognition": {
+ "title": "車牌識別",
+ "readTheDocumentation": "閱讀文件",
+ "desc": "Frigate 可以識別車輛上的車牌,自動將偵測到的字元加到已辨識車牌欄位,或將已知名稱加到屬於車輛類型的物件的子標籤上。常見用途包括讀取駛入車道或在街道上駛過的車輛的車牌。"
+ },
+ "restart_required": "需要重新啟動(分類設定已變更)",
+ "toast": {
+ "error": "儲存設定變更失敗:{{errorMessage}}",
+ "success": "分類設定已儲存。請重新啟動 Frigate 以套用你的更改。"
+ },
+ "title": "進階功能設定",
+ "unsavedChanges": "進階功能設定更改尚未儲存"
+ },
+ "camera": {
+ "title": "鏡頭設定",
+ "streams": {
+ "title": "串流",
+ "desc": "暫時停用鏡頭直到Frigate重新啟動。停用鏡頭會完全停止 Frigate 處理此鏡頭的串流。將會無法使用偵測、錄影和除錯功能。移動方框
畫面中偵測到移動的地方將會顯示亮紅色方框
" + }, + "regions": { + "desc": "顯示屬於物件偵測器感興趣範圍的方框", + "title": "偵測區", + "tips": "偵測區方框
畫面中屬於物件偵測器感興趣的地方將會顯示亮綠色方框,並且進行分析
" + }, + "desc": "除錯畫面會即時顯示追蹤到的物件及統計資料。物件列表則顯示偵測到物件的延遲總結。", + "timestamp": { + "title": "時間戳記", + "desc": "在圖片上疊加時間戳記" + }, + "detectorDesc": "Frigate 使用你的偵測器({{detectors}})來偵測鏡頭影片串流中的物件。", + "debugging": "除錯中", + "mask": { + "title": "移動遮罩", + "desc": "顯示移動遮罩多邊形" + }, + "objectShapeFilterDrawing": { + "title": "物件形狀篩選繪圖", + "document": "閱讀文件 ", + "score": "分數", + "area": "面積", + "ratio": "比例", + "desc": "在圖片上畫矩形以查看面積與比例詳情", + "tips": "啟用此選項後,會於鏡頭畫面上繪製矩形,以顯示其面積及比例。這些數值可用於設定物件形狀過濾參數。" + } + }, + "users": { + "management": { + "desc": "管理此Frigate個體的用戶帳戶。", + "title": "用戶管理" + }, + "addUser": "新增用戶", + "updatePassword": "更新密碼", + "toast": { + "success": { + "createUser": "成功建立用戶{{user}}", + "deleteUser": "成功刪除用戶{{user}}", + "roleUpdated": "成功更新{{user}}的角色", + "updatePassword": "成功更新密碼。" + }, + "error": { + "createUserFailed": "建立用戶失敗:{{errorMessage}}", + "roleUpdateFailed": "更新角色失敗:{{errorMessage}}", + "setPasswordFailed": "儲存密碼失敗:{{errorMessage}}", + "deleteUserFailed": "刪除用戶失敗:{{errorMessage}}" + } + }, + "table": { + "username": "用戶名稱", + "role": "角色", + "noUsers": "找不到用戶。", + "changeRole": "更改用戶角色", + "password": "密碼", + "deleteUser": "刪除用戶", + "actions": "操作" + }, + "dialog": { + "form": { + "user": { + "title": "用戶名稱", + "desc": "只允許使用字母、數字、句號及底線。", + "placeholder": "輸入用戶名稱" + }, + "password": { + "title": "密碼", + "placeholder": "輸入密碼", + "confirm": { + "placeholder": "確認密碼", + "title": "確認密碼" + }, + "strength": { + "title": "密碼強度: ", + "weak": "弱", + "medium": "中等", + "strong": "強", + "veryStrong": "非常強" + }, + "match": "密碼相符", + "notMatch": "密碼不相符" + }, + "newPassword": { + "confirm": { + "placeholder": "重新輸入新密碼" + }, + "title": "新密碼", + "placeholder": "輸入新密碼" + }, + "usernameIsRequired": "必須輸入用戶名稱", + "passwordIsRequired": "必須填寫密碼" + }, + "createUser": { + "title": "建立新用戶", + "desc": "新增用戶帳戶,並指定可存取Frigate介面各區域的角色。", + "usernameOnlyInclude": "用戶名稱只可包含字母、數字、句號或底線", + "confirmPassword": "請確認你的密碼" + }, + "deleteUser": { + "title": "刪除用戶", + "desc": "此操作無法還原,將會永久刪除用戶帳戶及所有相關資料。", + "warn": "確定要刪除{{username}}嗎?" + }, + "changeRole": { + "title": "更改用戶角色", + "desc": "更新{{username}}的權限", + "roleInfo": { + "intro": "為此用戶選擇合適的角色:", + "adminDesc": "可使用所有功能。", + "viewer": "觀看者", + "viewerDesc": "只限使用即時儀表板、審查、瀏覽及匯出功能。", + "admin": "管理員" + }, + "select": "選擇角色" + }, + "passwordSetting": { + "setPassword": "設定密碼", + "updatePassword": "更新{{username}}的密碼", + "desc": "建立強密碼以保障此帳戶安全。", + "cannotBeEmpty": "密碼不能留空", + "doNotMatch": "密碼不相符" + } + }, + "title": "用戶" + }, + "notification": { + "title": "通知", + "notificationSettings": { + "title": "通知設定", + "desc": "Frigate可原生向你的裝置推送通知,無論在瀏覽器中運行或安裝為PWA。", + "documentation": "閱讀文件" + }, + "notificationUnavailable": { + "title": "無法使用通知功能", + "desc": "網頁推送通知需在安全環境下運作(https://…),這是瀏覽器的限制。請透過安全連線存取Frigate以使用通知功能。",
+ "documentation": "閱讀文件"
+ },
+ "globalSettings": {
+ "title": "全域設定",
+ "desc": "暫停所有已註冊裝置上特定鏡頭的通知。"
+ },
+ "email": {
+ "placeholder": "例如:example@email.com",
+ "desc": "需要提供有效的電郵地址,若推送服務出現問題,將會透過此地址通知你。",
+ "title": "電郵地址"
+ },
+ "cameras": {
+ "title": "鏡頭",
+ "noCameras": "沒有可用鏡頭",
+ "desc": "選擇啟用通知功能的鏡頭。"
+ },
+ "deviceSpecific": "裝置專屬設定",
+ "registerDevice": "登記此裝置",
+ "unregisterDevice": "取消登記此裝置",
+ "sendTestNotification": "發送測試通知",
+ "active": "通知功能已啟用",
+ "suspended": "通知功能已暫停{{time}}",
+ "suspendTime": {
+ "10minutes": "暫停10分鐘",
+ "12hours": "暫停12小時",
+ "30minutes": "暫停30分鐘",
+ "24hours": "暫停24小時",
+ "5minutes": "暫停5分鐘",
+ "1hour": "暫停1小時",
+ "untilRestart": "暫停至重新啟動",
+ "suspend": "暫停"
+ },
+ "toast": {
+ "error": {
+ "registerFailed": "儲存通知登記失敗。"
+ },
+ "success": {
+ "registered": "成功登記通知功能。必須重新啟動Frigate後,才能發送任何通知(包括測試通知)。",
+ "settingSaved": "通知設定已儲存。"
+ }
+ },
+ "cancelSuspension": "取消暫停",
+ "unsavedRegistrations": "通知註冊尚未儲存",
+ "unsavedChanges": "通知設定更改尚未儲存"
+ },
+ "frigatePlus": {
+ "title": "Frigate+設定",
+ "apiKey": {
+ "title": "Frigate+ API金鑰",
+ "validated": "已偵測並驗證Frigate+ API金鑰",
+ "notValidated": "未偵測到Frigate+ API金鑰或驗證失敗",
+ "desc": "Frigate+ API金鑰可啟用與Frigate+服務的整合功能。",
+ "plusLink": "了解更多Frigate+資料"
+ },
+ "snapshotConfig": {
+ "title": "快照設定",
+ "documentation": "閱讀文件",
+ "table": {
+ "camera": "鏡頭",
+ "snapshots": "快照",
+ "cleanCopySnapshots": "clean_copy 快照"
+ },
+ "cleanCopyWarning": "部分鏡頭已啟用快照,但未啟用乾淨副本。你必須於快照設定中啟用clean_copy,才能從這些鏡頭提交影像至Frigate+。",
+ "desc": "提交至Frigate+需要在設定中同時啟用快照及clean_copy快照功能。"
+ },
+ "modelInfo": {
+ "title": "模型資料",
+ "modelType": "模型類型",
+ "trainDate": "訓練日期",
+ "baseModel": "基礎模型",
+ "plusModelType": {
+ "baseModel": "基礎模型",
+ "userModel": "微調"
+ },
+ "supportedDetectors": "支援的偵測器",
+ "cameras": "鏡頭",
+ "availableModels": "可用模型",
+ "loadingAvailableModels": "正在載入可用模型…",
+ "modelSelect": "可於此選擇你在Frigate+上的可用模型。請注意,只能選擇與當前偵測器設定相容的模型。",
+ "loading": "正在載入模型資料…",
+ "error": "載入模型資料失敗"
+ },
+ "toast": {
+ "error": "儲存設定變更失敗:{{errorMessage}}",
+ "success": "Frigate+設定已儲存。請重新啟動Frigate以套用更改。"
+ },
+ "restart_required": "需要重新啟動(已更改Frigate+模型)",
+ "unsavedChanges": "Frigate+ 設定更改尚未儲存"
+ },
+ "enrichments": {
+ "faceRecognition": {
+ "modelSize": {
+ "large": {
+ "title": "大型",
+ "desc": "使用大型模型會採用 ArcFace 臉部嵌入模型,並在適用情況下自動於 GPU 上運行。"
+ },
+ "desc": "用於人臉識別的模型大小。",
+ "label": "模型大小",
+ "small": {
+ "title": "小型",
+ "desc": "使用小型模型會採用 FaceNet 臉部嵌入模型,在大多數 CPU 上能有效運行。"
+ }
+ },
+ "desc": "人臉識別功能允許為人物分配名字,當辨識到他們的臉孔時,Frigate 會將名字加到子標籤上。此資訊會顯示於介面、篩選器及通知中。",
+ "title": "人臉識別",
+ "readTheDocumentation": "閱讀文件"
+ },
+ "birdClassification": {
+ "title": "鳥類分類",
+ "desc": "鳥類分類會使用量化 Tensorflow 模型識別已知鳥類。當辨識到已知鳥類時,牠的常見名稱會加到子標籤上。此資訊會顯示在介面、篩選器及通知中。"
+ },
+ "semanticSearch": {
+ "desc": "Frigate 的語意搜尋功能讓你可以利用影像本身、自訂文字描述,或自動產生的描述,在審查項目中尋找已追蹤的物件。",
+ "reindexNow": {
+ "confirmDesc": "你確定要重建索引所有已追蹤物件的嵌入向量嗎?這個過程會在背景運行,但可能會用盡你的 CPU,而且需要一定時間。你可以在「瀏覽」頁面查看進度。",
+ "label": "立即重建索引",
+ "desc": "重建索引會為所有已追蹤物件重新生成嵌入向量。這個過程會在背景運行,可能會用盡你的 CPU,所需時間取決於已追蹤物件的數量。",
+ "confirmTitle": "確認重建索引",
+ "confirmButton": "重建索引",
+ "success": "重建索引已成功開始。",
+ "alreadyInProgress": "重建索引已在進行中。",
+ "error": "啟動重建索引失敗:{{errorMessage}}"
+ },
+ "title": "語意搜尋",
+ "readTheDocumentation": "閱讀文件",
+ "modelSize": {
+ "label": "模型大小",
+ "desc": "用於語意搜尋的模型大小。",
+ "small": {
+ "title": "小型",
+ "desc": "使用小型模型會採用量化版本,較少佔用 RAM,在 CPU 上運行更快,而嵌入品質的差異非常細微。"
+ },
+ "large": {
+ "title": "大型",
+ "desc": "使用大型模型會採用完整的 Jina 模型,並在適用情況下自動於 GPU 上運行。"
+ }
+ }
+ },
+ "licensePlateRecognition": {
+ "title": "車牌識別",
+ "desc": "Frigate 可以識別車輛上的車牌,自動將偵測到的字元加到已辨識車牌欄位,或將已知名稱加到屬於車輛類型的物件的子標籤上。常見用途包括讀取駛入車道或在街道上駛過的車輛的車牌。",
+ "readTheDocumentation": "閱讀文件"
+ },
+ "title": "進階功能設定",
+ "unsavedChanges": "未儲存進階功能設定變更",
+ "restart_required": "需要重新啟動(進階功能設定已變更)",
+ "toast": {
+ "success": "進階功能設定已儲存。請重新啟動 Frigate 以套用你的更改。",
+ "error": "儲存設定變更失敗:{{errorMessage}}"
+ }
+ }
+}
diff --git a/web/public/locales/yue-Hant/views/system.json b/web/public/locales/yue-Hant/views/system.json
new file mode 100644
index 000000000..8accc5bb1
--- /dev/null
+++ b/web/public/locales/yue-Hant/views/system.json
@@ -0,0 +1,180 @@
+{
+ "documentTitle": {
+ "cameras": "鏡頭統計 - Frigate",
+ "storage": "儲存裝置統計 - Frigate",
+ "general": "一般統計 - Frigate",
+ "enrichments": "進階功能統計 - Frigate",
+ "logs": {
+ "frigate": "Frigate 日誌 - Frigate",
+ "nginx": "Nginx 日誌 - Frigate",
+ "go2rtc": "Go2RTC 日誌 - Frigate"
+ }
+ },
+ "title": "系統",
+ "metrics": "系統指標",
+ "logs": {
+ "download": {
+ "label": "下載日誌"
+ },
+ "type": {
+ "timestamp": "時間戳記",
+ "tag": "標籤",
+ "message": "訊息",
+ "label": "類型"
+ },
+ "tips": "正在從伺服器串流日誌",
+ "toast": {
+ "error": {
+ "fetchingLogsFailed": "擷取日誌時出錯:{{errorMessage}}",
+ "whileStreamingLogs": "串流日誌時出錯:{{errorMessage}}"
+ }
+ },
+ "copy": {
+ "error": "無法將日誌複製到剪貼簿",
+ "label": "複製到剪貼簿",
+ "success": "已將日誌複製到剪貼簿"
+ }
+ },
+ "general": {
+ "detector": {
+ "inferenceSpeed": "偵測器推理速度",
+ "memoryUsage": "偵測器記憶體使用量",
+ "title": "偵測器",
+ "cpuUsage": "偵測器 CPU 使用率",
+ "temperature": "偵測器溫度"
+ },
+ "hardwareInfo": {
+ "gpuUsage": "GPU 使用率",
+ "gpuInfo": {
+ "vainfoOutput": {
+ "processOutput": "程序輸出:",
+ "processError": "程序錯誤:",
+ "title": "Vainfo 輸出",
+ "returnCode": "返回代碼:{{code}}"
+ },
+ "nvidiaSMIOutput": {
+ "title": "Nvidia SMI 輸出",
+ "vbios": "VBios 資訊:{{vbios}}",
+ "cudaComputerCapability": "CUDA 計算能力:{{cuda_compute}}",
+ "name": "名稱:{{name}}",
+ "driver": "驅動程式:{{driver}}"
+ },
+ "closeInfo": {
+ "label": "關閉 GPU 資訊"
+ },
+ "toast": {
+ "success": "已將 GPU 資訊複製到剪貼簿"
+ },
+ "copyInfo": {
+ "label": "複製 GPU 資訊"
+ }
+ },
+ "title": "硬件資訊",
+ "npuUsage": "NPU 使用率",
+ "gpuMemory": "GPU 記憶體",
+ "gpuEncoder": "GPU 編碼器",
+ "gpuDecoder": "GPU 解碼器",
+ "npuMemory": "NPU 記憶體"
+ },
+ "otherProcesses": {
+ "title": "其他程序",
+ "processCpuUsage": "程序 CPU 使用率",
+ "processMemoryUsage": "程序記憶體使用量"
+ },
+ "title": "一般"
+ },
+ "storage": {
+ "title": "儲存裝置",
+ "overview": "概覽",
+ "recordings": {
+ "title": "錄影檔案",
+ "earliestRecording": "最早可用錄影檔案:",
+ "tips": "此數值代表 Frigate 資料庫中錄影檔案的總儲存使用量。Frigate 不會追蹤磁碟上所有檔案的儲存使用量。"
+ },
+ "cameraStorage": {
+ "camera": "鏡頭",
+ "unusedStorageInformation": "未使用儲存資訊",
+ "storageUsed": "已使用儲存",
+ "bandwidth": "每小時使用量",
+ "unused": {
+ "tips": "若您的磁碟中存有其他檔案,該數值可能無法準確反映 Frigate 可用的空間。Frigate 只追蹤其錄影檔案的儲存使用量。",
+ "title": "未使用"
+ },
+ "title": "鏡頭儲存",
+ "percentageOfTotalUsed": "佔總量百分比"
+ }
+ },
+ "cameras": {
+ "info": {
+ "streamDataFromFFPROBE": "串流資料是透過 ffprobe 取得。",
+ "fetching": "正在取得鏡頭資料",
+ "video": "影片:",
+ "codec": "編碼器:",
+ "resolution": "解像度:",
+ "tips": {
+ "title": "鏡頭詳細資訊"
+ },
+ "stream": "串流 {{idx}}",
+ "audio": "音訊:",
+ "fps": "每秒影格數 (FPS):",
+ "unknown": "未知",
+ "error": "錯誤:{{error}}",
+ "cameraProbeInfo": "{{camera}} 鏡頭詳細資訊",
+ "aspectRatio": "長寬比"
+ },
+ "framesAndDetections": "畫面 / 偵測",
+ "label": {
+ "camera": "鏡頭",
+ "detect": "偵測",
+ "skipped": "略過",
+ "ffmpeg": "FFmpeg",
+ "capture": "讀取影像",
+ "overallFramesPerSecond": "整體每秒畫面數",
+ "cameraFfmpeg": "{{camName}} FFmpeg",
+ "cameraDetect": "{{camName}} 偵測",
+ "cameraFramesPerSecond": "{{camName}} 每秒畫面數",
+ "cameraDetectionsPerSecond": "{{camName}} 每秒偵測次數",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} 每秒略過偵測次數",
+ "overallSkippedDetectionsPerSecond": "整體每秒略過偵測次數",
+ "cameraCapture": "{{camName}} 讀取影像",
+ "overallDetectionsPerSecond": "整體每秒偵測次數"
+ },
+ "title": "鏡頭",
+ "overview": "概覽",
+ "toast": {
+ "success": {
+ "copyToClipboard": "已將鏡頭資料複製到剪貼簿。"
+ },
+ "error": {
+ "unableToProbeCamera": "無法取得鏡頭資料:{{errorMessage}}"
+ }
+ }
+ },
+ "lastRefreshed": "最後更新: ",
+ "stats": {
+ "detectIsSlow": "{{detect}} 偵測速度慢 ({{speed}} 毫秒)",
+ "detectIsVerySlow": "{{detect}} 偵測速度非常慢 ({{speed}} 毫秒)",
+ "cameraIsOffline": "{{camera}} 已離線",
+ "detectHighCpuUsage": "{{camera}} 的偵測 CPU 使用率過高 ({{detectAvg}}%)",
+ "healthy": "系統運作正常",
+ "ffmpegHighCpuUsage": "{{camera}} 的 FFmpeg CPU 使用率過高 ({{ffmpegAvg}}%)",
+ "reindexingEmbeddings": "重新索引嵌入資料 (已完成 {{processed}}%)"
+ },
+ "enrichments": {
+ "title": "進階功能",
+ "infPerSecond": "每秒推理次數",
+ "embeddings": {
+ "image_embedding": "圖片嵌入",
+ "face_embedding_speed": "人臉嵌入速度",
+ "face_recognition_speed": "人臉辨識速度",
+ "plate_recognition_speed": "車牌辨識速度",
+ "face_recognition": "人臉辨識",
+ "text_embedding": "文字嵌入",
+ "yolov9_plate_detection": "YOLOv9 車牌偵測",
+ "text_embedding_speed": "文字嵌入速度",
+ "yolov9_plate_detection_speed": "YOLOv9 車牌偵測速度",
+ "plate_recognition": "車牌辨識",
+ "image_embedding_speed": "圖片嵌入速度"
+ }
+ }
+}
diff --git a/web/public/locales/zh-CN/audio.json b/web/public/locales/zh-CN/audio.json
new file mode 100644
index 000000000..bd97f632f
--- /dev/null
+++ b/web/public/locales/zh-CN/audio.json
@@ -0,0 +1,429 @@
+{
+ "speech": "谈话",
+ "babbling": "喋喋不休",
+ "yell": "大喊",
+ "bellow": "吼叫",
+ "whoop": "欢呼",
+ "whispering": "耳语",
+ "laughter": "笑声",
+ "snicker": "窃笑",
+ "crying": "哭泣",
+ "sigh": "叹息",
+ "singing": "唱歌",
+ "choir": "合唱",
+ "yodeling": "山歌",
+ "chant": "吟唱",
+ "mantra": "咒语",
+ "child_singing": "儿童歌唱",
+ "synthetic_singing": "合成歌声",
+ "rapping": "说唱",
+ "humming": "哼唱",
+ "groan": "呻吟",
+ "grunt": "咕哝",
+ "whistling": "口哨",
+ "breathing": "呼吸",
+ "wheeze": "喘息",
+ "snoring": "打鼾",
+ "gasp": "倒抽气",
+ "pant": "喘气",
+ "snort": "哼声",
+ "cough": "咳嗽",
+ "throat_clearing": "清嗓子",
+ "sneeze": "打喷嚏",
+ "sniff": "抽鼻子",
+ "run": "跑步",
+ "shuffle": "拖步",
+ "footsteps": "脚步声",
+ "chewing": "咀嚼",
+ "biting": "咬",
+ "gargling": "漱口",
+ "stomach_rumble": "肚子咕噜",
+ "burping": "打嗝",
+ "hiccup": "打嗝",
+ "fart": "放屁",
+ "hands": "手",
+ "finger_snapping": "打响指",
+ "clapping": "鼓掌",
+ "heartbeat": "心跳",
+ "heart_murmur": "心脏杂音",
+ "cheering": "欢呼",
+ "applause": "掌声",
+ "chatter": "闲聊",
+ "crowd": "人群",
+ "children_playing": "儿童玩耍",
+ "animal": "动物",
+ "pets": "宠物",
+ "dog": "狗",
+ "bark": "狗叫",
+ "yip": "吠叫",
+ "howl": "嚎叫",
+ "bow_wow": "汪汪",
+ "growling": "咆哮",
+ "whimper_dog": "狗呜咽",
+ "cat": "猫",
+ "purr": "咕噜",
+ "meow": "喵喵",
+ "hiss": "嘶嘶声",
+ "caterwaul": "猫叫春",
+ "livestock": "牲畜",
+ "horse": "马",
+ "clip_clop": "蹄声",
+ "neigh": "嘶鸣",
+ "cattle": "牛",
+ "moo": "哞哞",
+ "cowbell": "牛铃",
+ "pig": "猪",
+ "oink": "哼哼",
+ "goat": "山羊",
+ "bleat": "咩咩",
+ "sheep": "绵羊",
+ "fowl": "家禽",
+ "chicken": "鸡",
+ "cluck": "咯咯",
+ "cock_a_doodle_doo": "喔喔",
+ "turkey": "火鸡",
+ "gobble": "咯咯",
+ "duck": "鸭子",
+ "quack": "嘎嘎",
+ "goose": "鹅",
+ "honk": "鸣笛/鹅叫声",
+ "wild_animals": "野生动物",
+ "roaring_cats": "吼叫的猫科动物",
+ "roar": "吼叫",
+ "bird": "鸟",
+ "chirp": "啾啾",
+ "squawk": "啼叫",
+ "pigeon": "鸽子",
+ "coo": "咕咕",
+ "crow": "乌鸦",
+ "caw": "呱呱",
+ "owl": "猫头鹰",
+ "hoot": "呜呜",
+ "flapping_wings": "翅膀拍打",
+ "dogs": "狗群",
+ "rats": "老鼠",
+ "mouse": "老鼠",
+ "patter": "啪嗒声",
+ "insect": "昆虫",
+ "cricket": "蟋蟀",
+ "mosquito": "蚊子",
+ "fly": "苍蝇",
+ "buzz": "嗡嗡",
+ "frog": "青蛙",
+ "croak": "呱呱",
+ "snake": "蛇",
+ "rattle": "响尾",
+ "whale_vocalization": "鲸鱼叫声",
+ "music": "音乐",
+ "musical_instrument": "乐器",
+ "plucked_string_instrument": "弹拨乐器",
+ "guitar": "吉他",
+ "electric_guitar": "电吉他",
+ "bass_guitar": "贝斯",
+ "acoustic_guitar": "原声吉他",
+ "steel_guitar": "钢弦吉他",
+ "tapping": "敲击",
+ "strum": "扫弦",
+ "banjo": "班卓琴",
+ "sitar": "西塔琴",
+ "mandolin": "曼陀林",
+ "zither": "古筝",
+ "ukulele": "尤克里里",
+ "keyboard": "键盘",
+ "piano": "钢琴",
+ "electric_piano": "电钢琴",
+ "organ": "风琴",
+ "electronic_organ": "电子琴",
+ "hammond_organ": "哈蒙德风琴",
+ "synthesizer": "合成器",
+ "sampler": "采样器",
+ "harpsichord": "大键琴",
+ "percussion": "打击乐器",
+ "drum_kit": "架子鼓",
+ "drum_machine": "鼓机",
+ "drum": "鼓",
+ "snare_drum": "军鼓",
+ "rimshot": "鼓边击",
+ "drum_roll": "滚鼓",
+ "bass_drum": "大鼓",
+ "timpani": "定音鼓",
+ "tabla": "塔布拉鼓",
+ "cymbal": "钹",
+ "hi_hat": "踩镲",
+ "wood_block": "木鱼",
+ "tambourine": "铃鼓",
+ "maraca": "沙锤",
+ "gong": "锣",
+ "tubular_bells": "管钟",
+ "mallet_percussion": "槌击打击乐器",
+ "marimba": "马林巴",
+ "glockenspiel": "钟琴",
+ "vibraphone": "颤音琴",
+ "steelpan": "钢鼓",
+ "orchestra": "管弦乐队",
+ "brass_instrument": "铜管乐器",
+ "french_horn": "圆号",
+ "trumpet": "小号",
+ "trombone": "长号",
+ "bowed_string_instrument": "弓弦乐器",
+ "string_section": "弦乐组",
+ "violin": "小提琴",
+ "pizzicato": "拨弦",
+ "cello": "大提琴",
+ "double_bass": "低音提琴",
+ "wind_instrument": "管乐器",
+ "flute": "长笛",
+ "saxophone": "萨克斯",
+ "clarinet": "单簧管",
+ "harp": "竖琴",
+ "bell": "铃",
+ "church_bell": "教堂钟",
+ "jingle_bell": "铃铛",
+ "bicycle_bell": "自行车铃",
+ "tuning_fork": "音叉",
+ "chime": "风铃",
+ "wind_chime": "风铃",
+ "harmonica": "口琴",
+ "accordion": "手风琴",
+ "bagpipes": "风笛",
+ "didgeridoo": "迪吉里杜管",
+ "theremin": "特雷门琴",
+ "singing_bowl": "颂钵",
+ "scratching": "刮擦声",
+ "pop_music": "流行音乐",
+ "hip_hop_music": "嘻哈音乐",
+ "beatboxing": "人声节拍",
+ "rock_music": "摇滚音乐",
+ "heavy_metal": "重金属",
+ "punk_rock": "朋克摇滚",
+ "grunge": "垃圾摇滚",
+ "progressive_rock": "前卫摇滚",
+ "rock_and_roll": "摇滚乐",
+ "psychedelic_rock": "迷幻摇滚",
+ "rhythm_and_blues": "节奏布鲁斯",
+ "soul_music": "灵魂乐",
+ "reggae": "雷鬼",
+ "country": "乡村音乐",
+ "swing_music": "摇摆乐",
+ "bluegrass": "蓝草音乐",
+ "funk": "放克",
+ "folk_music": "民谣",
+ "middle_eastern_music": "中东音乐",
+ "jazz": "爵士乐",
+ "disco": "迪斯科",
+ "classical_music": "古典音乐",
+ "opera": "歌剧",
+ "electronic_music": "电子音乐",
+ "house_music": "浩室音乐",
+ "techno": "科技舞曲",
+ "dubstep": "回响贝斯",
+ "drum_and_bass": "鼓打贝斯",
+ "electronica": "电子乐",
+ "electronic_dance_music": "电子舞曲",
+ "ambient_music": "环境音乐",
+ "trance_music": "迷幻舞曲",
+ "music_of_latin_america": "拉丁美洲音乐",
+ "salsa_music": "萨尔萨",
+ "flamenco": "弗拉门戈",
+ "blues": "蓝调",
+ "music_for_children": "儿童音乐",
+ "new-age_music": "新世纪音乐",
+ "vocal_music": "声乐",
+ "a_capella": "无伴奏合唱",
+ "music_of_africa": "非洲音乐",
+ "afrobeat": "非洲节拍",
+ "christian_music": "基督教音乐",
+ "gospel_music": "福音音乐",
+ "music_of_asia": "亚洲音乐",
+ "carnatic_music": "卡纳提克音乐",
+ "music_of_bollywood": "宝莱坞音乐",
+ "ska": "斯卡",
+ "traditional_music": "传统音乐",
+ "independent_music": "独立音乐",
+ "song": "歌曲",
+ "background_music": "背景音乐",
+ "theme_music": "主题音乐",
+ "jingle": "广告歌",
+ "soundtrack_music": "配乐",
+ "lullaby": "摇篮曲",
+ "video_game_music": "电子游戏音乐",
+ "christmas_music": "圣诞音乐",
+ "dance_music": "舞曲",
+ "wedding_music": "婚礼音乐",
+ "happy_music": "欢快音乐",
+ "sad_music": "悲伤音乐",
+ "tender_music": "温柔音乐",
+ "exciting_music": "激动音乐",
+ "angry_music": "愤怒音乐",
+ "scary_music": "恐怖音乐",
+ "wind": "风",
+ "rustling_leaves": "树叶沙沙声",
+ "wind_noise": "风声",
+ "thunderstorm": "雷暴",
+ "thunder": "雷声",
+ "water": "水",
+ "rain": "雨",
+ "raindrop": "雨滴",
+ "rain_on_surface": "雨打表面",
+ "stream": "溪流",
+ "waterfall": "瀑布",
+ "ocean": "海洋",
+ "waves": "波浪",
+ "steam": "蒸汽",
+ "gurgling": "汩汩声",
+ "fire": "火",
+ "crackle": "噼啪声",
+ "vehicle": "车辆",
+ "boat": "船",
+ "sailboat": "帆船",
+ "rowboat": "划艇",
+ "motorboat": "摩托艇",
+ "ship": "轮船",
+ "motor_vehicle": "机动车",
+ "car": "汽车",
+ "toot": "鸣笛",
+ "car_alarm": "汽车警报",
+ "power_windows": "电动车窗",
+ "skidding": "轮胎打滑",
+ "tire_squeal": "轮胎尖叫",
+ "car_passing_by": "汽车驶过",
+ "race_car": "赛车",
+ "truck": "卡车",
+ "air_brake": "气闸",
+ "air_horn": "气笛",
+ "reversing_beeps": "倒车提示音",
+ "ice_cream_truck": "冰淇淋车",
+ "bus": "公交车",
+ "emergency_vehicle": "应急车辆",
+ "police_car": "警车",
+ "ambulance": "救护车",
+ "fire_engine": "消防车",
+ "motorcycle": "摩托车",
+ "traffic_noise": "交通噪音",
+ "rail_transport": "铁路运输",
+ "train": "火车",
+ "train_whistle": "火车汽笛",
+ "train_horn": "火车鸣笛",
+ "railroad_car": "铁路车厢",
+ "train_wheels_squealing": "火车轮子尖叫",
+ "subway": "地铁",
+ "aircraft": "飞行器",
+ "aircraft_engine": "飞机引擎",
+ "jet_engine": "喷气引擎",
+ "propeller": "螺旋桨",
+ "helicopter": "直升机",
+ "fixed-wing_aircraft": "固定翼飞机",
+ "bicycle": "自行车",
+ "skateboard": "滑板",
+ "engine": "引擎",
+ "light_engine": "轻型引擎",
+ "dental_drill's_drill": "牙科钻",
+ "lawn_mower": "割草机",
+ "chainsaw": "电锯",
+ "medium_engine": "中型引擎",
+ "heavy_engine": "重型引擎",
+ "engine_knocking": "引擎敲击",
+ "engine_starting": "引擎启动",
+ "idling": "怠速",
+ "accelerating": "加速",
+ "door": "门",
+ "doorbell": "门铃",
+ "ding-dong": "叮咚",
+ "sliding_door": "滑动门",
+ "slam": "猛关",
+ "knock": "敲门",
+ "tap": "轻敲",
+ "squeak": "吱吱声",
+ "cupboard_open_or_close": "橱柜开关",
+ "drawer_open_or_close": "抽屉开关",
+ "dishes": "餐具",
+ "cutlery": "刀叉",
+ "chopping": "切菜",
+ "frying": "煎炸",
+ "microwave_oven": "微波炉",
+ "blender": "搅拌机",
+ "water_tap": "水龙头",
+ "sink": "水槽",
+ "bathtub": "浴缸",
+ "hair_dryer": "吹风机",
+ "toilet_flush": "马桶冲水",
+ "toothbrush": "牙刷",
+ "electric_toothbrush": "电动牙刷",
+ "vacuum_cleaner": "吸尘器",
+ "zipper": "拉链",
+ "keys_jangling": "钥匙叮当",
+ "coin": "硬币",
+ "scissors": "剪刀",
+ "electric_shaver": "电动剃须刀",
+ "shuffling_cards": "洗牌",
+ "typing": "打字",
+ "typewriter": "打字机",
+ "computer_keyboard": "电脑键盘",
+ "writing": "书写",
+ "alarm": "警报",
+ "telephone": "电话",
+ "telephone_bell_ringing": "电话铃声",
+ "ringtone": "手机铃声",
+ "telephone_dialing": "电话拨号",
+ "dial_tone": "拨号音",
+ "busy_signal": "忙音",
+ "alarm_clock": "闹钟",
+ "siren": "警笛",
+ "civil_defense_siren": "防空警报",
+ "buzzer": "蜂鸣器",
+ "smoke_detector": "烟雾检测器",
+ "fire_alarm": "火灾警报器",
+ "foghorn": "雾笛",
+ "whistle": "哨子",
+ "steam_whistle": "蒸汽汽笛",
+ "mechanisms": "机械装置",
+ "ratchet": "棘轮",
+ "clock": "时钟",
+ "tick": "滴答",
+ "tick-tock": "滴答滴答",
+ "gears": "齿轮",
+ "pulleys": "滑轮",
+ "sewing_machine": "缝纫机",
+ "mechanical_fan": "机械风扇",
+ "air_conditioning": "空调",
+ "cash_register": "收银机",
+ "printer": "打印机",
+ "camera": "相机",
+ "single-lens_reflex_camera": "单反相机",
+ "tools": "工具",
+ "hammer": "锤子",
+ "jackhammer": "风镐",
+ "sawing": "锯",
+ "filing": "锉",
+ "sanding": "砂磨",
+ "power_tool": "电动工具",
+ "drill": "电钻",
+ "explosion": "爆炸",
+ "gunshot": "枪声",
+ "machine_gun": "机关枪",
+ "fusillade": "齐射",
+ "artillery_fire": "炮火",
+ "cap_gun": "玩具枪",
+ "fireworks": "烟花",
+ "firecracker": "鞭炮",
+ "burst": "爆裂",
+ "eruption": "爆发",
+ "boom": "轰隆",
+ "wood": "木头",
+ "chop": "砍",
+ "splinter": "碎裂",
+ "crack": "破裂",
+ "glass": "玻璃",
+ "chink": "叮当",
+ "shatter": "粉碎",
+ "silence": "寂静",
+ "sound_effect": "音效",
+ "environmental_noise": "环境噪音",
+ "static": "静电噪音",
+ "white_noise": "白噪音",
+ "pink_noise": "粉红噪音",
+ "television": "电视",
+ "radio": "收音机",
+ "field_recording": "实地录音",
+ "scream": "尖叫"
+}
diff --git a/web/public/locales/zh-CN/common.json b/web/public/locales/zh-CN/common.json
new file mode 100644
index 000000000..1c253aee4
--- /dev/null
+++ b/web/public/locales/zh-CN/common.json
@@ -0,0 +1,261 @@
+{
+ "time": {
+ "untilForTime": "直到 {{time}}",
+ "untilForRestart": "直到 Frigate 重启。",
+ "untilRestart": "直到重启",
+ "ago": "{{timeAgo}} 前",
+ "justNow": "刚才",
+ "today": "今天",
+ "yesterday": "昨天",
+ "last7": "最后 7 天",
+ "last14": "最后 14 天",
+ "last30": "最后 30 天",
+ "thisWeek": "本周",
+ "lastWeek": "上个周",
+ "thisMonth": "本月",
+ "lastMonth": "上个月",
+ "5minutes": "5 分钟",
+ "10minutes": "10 分钟",
+ "30minutes": "30 分钟",
+ "1hour": "1 小时",
+ "12hours": "12 小时",
+ "24hours": "24 小时",
+ "pm": "下午",
+ "am": "上午",
+ "yr": "{{time}}年",
+ "year_other": "{{time}}年",
+ "mo": "{{time}}月",
+ "month_other": "{{time}}月",
+ "d": "{{time}}天",
+ "day_other": "{{time}}天",
+ "h": "{{time}}小时",
+ "hour_other": "{{time}}小时",
+ "m": "{{time}}分钟",
+ "minute_other": "{{time}}分钟",
+ "s": "{{time}}秒",
+ "second_other": "{{time}}秒",
+ "formattedTimestamp": {
+ "12hour": "M月d日 ah:mm:ss",
+ "24hour": "M月d日 HH:mm:ss"
+ },
+ "formattedTimestamp2": {
+ "12hour": "MM月dd日 ah:mm:ss",
+ "24hour": "MM月dd日 HH:mm:ss"
+ },
+ "formattedTimestampExcludeSeconds": {
+ "12hour": "%m月%-d日 %I:%M %p",
+ "24hour": "%m月%-d日 %H:%M"
+ },
+ "formattedTimestampWithYear": {
+ "12hour": "%Y年%m月%-d日 %I:%M:%S %p",
+ "24hour": "%Y年%m月%-d日 %H:%M"
+ },
+ "formattedTimestampOnlyMonthAndDay": "%m月%-d日",
+ "formattedTimestampHourMinute": {
+ "12hour": "a h:mm",
+ "24hour": "HH:mm"
+ },
+ "formattedTimestampHourMinuteSecond": {
+ "12hour": "ah:mm:ss",
+ "24hour": "HH:mm:ss"
+ },
+ "formattedTimestampMonthDayHourMinute": {
+ "12hour": "M月d日 ah:mm",
+ "24hour": "M月d日 HH:mm"
+ },
+ "formattedTimestampMonthDayYearHourMinute": {
+ "24hour": "yyyy年M月d日 HH:mm",
+ "12hour": "yyyy年M月d日 ah:mm"
+ },
+ "formattedTimestampMonthDay": "M月d日",
+ "formattedTimestampFilename": {
+ "12hour": "yy年MM月dd日 ah时mm分ss秒",
+ "24hour": "yy年MM月dd日 HH时mm分ss秒"
+ },
+ "formattedTimestampMonthDayYear": {
+ "12hour": "yy年MM月dd日",
+ "24hour": "yy年MM月dd日"
+ }
+ },
+ "unit": {
+ "speed": {
+ "mph": "英里/小时",
+ "kph": "公里/小时"
+ },
+ "length": {
+ "feet": "英尺",
+ "meters": "米"
+ }
+ },
+ "label": {
+ "back": "返回"
+ },
+ "pagination": {
+ "label": "分页",
+ "previous": {
+ "title": "上一页",
+ "label": "转到上一页"
+ },
+ "next": {
+ "title": "下一页",
+ "label": "转到下一页"
+ },
+ "more": "更多页面"
+ },
+ "button": {
+ "apply": "应用",
+ "reset": "重置",
+ "done": "完成",
+ "enabled": "启用",
+ "enable": "启用",
+ "disabled": "禁用",
+ "disable": "禁用",
+ "save": "保存",
+ "saving": "保存中…",
+ "cancel": "取消",
+ "close": "关闭",
+ "copy": "复制",
+ "back": "返回",
+ "history": "历史",
+ "fullscreen": "全屏",
+ "exitFullscreen": "退出全屏",
+ "pictureInPicture": "画中画",
+ "on": "开",
+ "off": "关",
+ "edit": "编辑",
+ "copyCoordinates": "复制坐标",
+ "delete": "删除",
+ "yes": "是",
+ "no": "否",
+ "download": "下载",
+ "info": "信息",
+ "suspended": "已暂停",
+ "unsuspended": "取消暂停",
+ "play": "播放",
+ "unselect": "取消选择",
+ "export": "导出",
+ "deleteNow": "立即删除",
+ "next": "下一个",
+ "cameraAudio": "摄像头音频",
+ "twoWayTalk": "双向对话"
+ },
+ "menu": {
+ "system": "系统",
+ "systemMetrics": "系统信息",
+ "configuration": "配置",
+ "systemLogs": "系统日志",
+ "settings": "设置",
+ "configurationEditor": "配置编辑器",
+ "languages": "Languages / 语言",
+ "language": {
+ "en": "英语 (English)",
+ "zhCN": "简体中文",
+ "withSystem": {
+ "label": "使用系统语言设置"
+ },
+ "hi": "印地语 (हिन्दी)",
+ "es": "西班牙语 (Español)",
+ "fr": "法语 (Français)",
+ "ar": "阿拉伯语 (العربية)",
+ "pt": "葡萄牙语 (Português)",
+ "de": "德语 (Deutsch)",
+ "ja": "日语 (日本語)",
+ "tr": "土耳其语 (Türkçe)",
+ "it": "意大利语 (Italiano)",
+ "nl": "荷兰语 (Nederlands)",
+ "sv": "瑞典语 (Svenska)",
+ "nb": "挪威博克马尔语 (Norsk Bokmål)",
+ "ko": "韩语 (한국어)",
+ "vi": "越南语 (Tiếng Việt)",
+ "fa": "波斯语 (فارسی)",
+ "pl": "波兰语 (Polski)",
+ "uk": "乌克兰语 (Українська)",
+ "he": "希伯来语 (עברית)",
+ "el": "希腊语 (Ελληνικά)",
+ "ro": "罗马尼亚语 (Română)",
+ "hu": "马扎尔语 (Magyar)",
+ "fi": "芬兰语 (Suomi)",
+ "da": "丹麦语 (Dansk)",
+ "sk": "斯拉夫语 (Slovenčina)",
+ "ru": "俄语 (Русский)",
+ "cs": "捷克语 (Čeština)",
+ "yue": "粤语 (粵語)",
+ "th": "泰语(ไทย)",
+ "ca": "加泰罗尼亚语 (Català )"
+ },
+ "appearance": "外观",
+ "darkMode": {
+ "label": "深色模式",
+ "light": "浅色",
+ "dark": "深色",
+ "withSystem": {
+ "label": "使用系统深色模式设置"
+ }
+ },
+ "withSystem": "跟随系统",
+ "theme": {
+ "label": "主题",
+ "blue": "蓝色",
+ "green": "绿色",
+ "nord": "Nord",
+ "red": "红色",
+ "contrast": "高对比度",
+ "default": "默认",
+ "highcontrast": "高对比"
+ },
+ "help": "帮助",
+ "documentation": {
+ "title": "文档",
+ "label": "Frigate 的官方文档"
+ },
+ "live": {
+ "title": "实时监控",
+ "allCameras": "所有摄像头",
+ "cameras": {
+ "title": "摄像头",
+ "count_other": "{{count}} 个摄像头"
+ }
+ },
+ "review": "核查",
+ "explore": "浏览",
+ "export": "导出",
+ "uiPlayground": "UI 演示",
+ "faceLibrary": "人脸管理",
+ "user": {
+ "account": "账号",
+ "current": "当前用户:{{user}}",
+ "anonymous": "匿名",
+ "logout": "登出",
+ "setPassword": "设置密码",
+ "title": "用户"
+ },
+ "restart": "重启 Frigate"
+ },
+ "toast": {
+ "copyUrlToClipboard": "已复制链接到剪贴板。",
+ "save": {
+ "title": "保存",
+ "error": {
+ "title": "保存配置信息失败: {{errorMessage}}",
+ "noMessage": "保存配置信息失败"
+ }
+ }
+ },
+ "role": {
+ "title": "权限组",
+ "admin": "管理员",
+ "viewer": "成员",
+ "desc": "管理员可以完全访问Frigate界面上所有功能。成员则仅能查看摄像头、核查项和历史录像。"
+ },
+ "accessDenied": {
+ "documentTitle": "没有权限 - Frigate",
+ "title": "没有权限",
+ "desc": "您没有权限查看此页面。"
+ },
+ "notFound": {
+ "documentTitle": "没有找到页面 - Frigate",
+ "title": "404",
+ "desc": "页面未找到"
+ },
+ "selectItem": "选择 {{item}}"
+}
diff --git a/web/public/locales/zh-CN/components/auth.json b/web/public/locales/zh-CN/components/auth.json
new file mode 100644
index 000000000..015fa0ba8
--- /dev/null
+++ b/web/public/locales/zh-CN/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "user": "用户名",
+ "password": "密码",
+ "login": "登录",
+ "errors": {
+ "usernameRequired": "用户名不能为空",
+ "passwordRequired": "密码不能为空",
+ "rateLimit": "超出请求限制,请稍后再试。",
+ "loginFailed": "登录失败",
+ "unknownError": "未知错误,请检查日志。",
+ "webUnknownError": "未知错误,请检查控制台日志。"
+ }
+ }
+}
diff --git a/web/public/locales/zh-CN/components/camera.json b/web/public/locales/zh-CN/components/camera.json
new file mode 100644
index 000000000..fb1390d46
--- /dev/null
+++ b/web/public/locales/zh-CN/components/camera.json
@@ -0,0 +1,86 @@
+{
+ "group": {
+ "label": "摄像头组",
+ "add": "添加摄像头组",
+ "edit": "编辑摄像头组",
+ "delete": {
+ "label": "删除摄像头组",
+ "confirm": {
+ "title": "确认删除",
+ "desc": "你确定要删除摄像头组 {{name}} 吗?"
+ }
+ },
+ "name": {
+ "label": "名称",
+ "placeholder": "请输入名称…",
+ "errorMessage": {
+ "mustLeastCharacters": "摄像头组的名称必须至少有 2 个字符。",
+ "exists": "摄像头组名称已存在。",
+ "nameMustNotPeriod": "摄像头组名称不能包含英文句号(.)。",
+ "invalid": "无效的摄像头组名称。"
+ }
+ },
+ "cameras": {
+ "label": "摄像头",
+ "desc": "选择添加至该组的摄像头。"
+ },
+ "icon": "图标",
+ "success": "摄像头组({{name}})保存成功。",
+ "camera": {
+ "setting": {
+ "label": "摄像头视频流设置",
+ "title": "{{cameraName}} 视频流设置",
+ "desc": "更改此摄像头组仪表板的实时视频流选项。这些设置特定于设备/浏览器。",
+ "audioIsAvailable": "此视频流支持音频",
+ "audioIsUnavailable": "此视频流不支持音频",
+ "audio": {
+ "tips": {
+ "title": "音频必须从您的摄像头输出并在 go2rtc 中配置此流。",
+ "document": "阅读文档 "
+ }
+ },
+ "streamMethod": {
+ "label": "视频流方法",
+ "method": {
+ "noStreaming": {
+ "label": "无视频流",
+ "desc": "摄像头图像每分钟仅更新一次,不会进行实时视频流播放。"
+ },
+ "smartStreaming": {
+ "label": "智能视频流(推荐)",
+ "desc": "智能视频流在没有检测到活动时,每分钟更新一次摄像头图像,以节省带宽和资源。当检测到活动时,图像会无缝切换到实时视频流。"
+ },
+ "continuousStreaming": {
+ "label": "持续视频流",
+ "desc": {
+ "title": "当摄像头画面在仪表板上可见时,始终为实时视频流,即使未检测到活动。",
+ "warning": "持续视频流可能会导致高带宽使用和性能问题,请谨慎使用。"
+ }
+ }
+ },
+ "placeholder": "选择视频流传输方式"
+ },
+ "compatibilityMode": {
+ "label": "兼容模式",
+ "desc": "仅在摄像头的实时视频流显示颜色伪影,并且图像右侧有一条对角线时启用此选项。"
+ },
+ "stream": "视频流",
+ "placeholder": "选择视频流"
+ }
+ }
+ },
+ "debug": {
+ "options": {
+ "label": "设置",
+ "title": "选项",
+ "showOptions": "显示选项",
+ "hideOptions": "隐藏选项"
+ },
+ "boundingBox": "边界框",
+ "timestamp": "时间戳",
+ "zones": "区域",
+ "mask": "遮罩",
+ "motion": "运动",
+ "regions": "区域"
+ }
+}
diff --git a/web/public/locales/zh-CN/components/dialog.json b/web/public/locales/zh-CN/components/dialog.json
new file mode 100644
index 000000000..e7670d1e6
--- /dev/null
+++ b/web/public/locales/zh-CN/components/dialog.json
@@ -0,0 +1,120 @@
+{
+ "restart": {
+ "title": "你确定要重启 Frigate?",
+ "button": "重启",
+ "restarting": {
+ "title": "Frigate 正在重启",
+ "content": "该页面将会在 {{countdown}} 秒后自动刷新。",
+ "button": "强制刷新"
+ }
+ },
+ "explore": {
+ "plus": {
+ "submitToPlus": {
+ "label": "提交至 Frigate+",
+ "desc": "您希望避开的地点中的物体不应被视为误报。若将其作为误报提交,可能会导致AI模型容易混淆相关物体的识别。"
+ },
+ "review": {
+ "true": {
+ "label": "为 Frigate Plus 确认此标签",
+ "true_other": "这是 {{label}}"
+ },
+ "false": {
+ "label": "不为 Frigate Plus 确认此标签",
+ "false_other": "这不是 {{label}}"
+ },
+ "state": {
+ "submitted": "已提交"
+ },
+ "question": {
+ "label": "为 Frigate Plus 确认此标签",
+ "ask_a": "这个对象是 {{label}} 吗?",
+ "ask_an": "这个对象是 {{label}} 吗?",
+ "ask_full": "这个对象是 {{untranslatedLabel}} ({{translatedLabel}}) 吗?"
+ }
+ }
+ },
+ "video": {
+ "viewInHistory": "在历史中查看"
+ }
+ },
+ "export": {
+ "time": {
+ "fromTimeline": "从时间线选择",
+ "lastHour_other": "最后 {{count}} 小时",
+ "custom": "自定义",
+ "start": {
+ "title": "开始时间",
+ "label": "选择开始时间"
+ },
+ "end": {
+ "title": "结束时间",
+ "label": "选择结束时间"
+ }
+ },
+ "name": {
+ "placeholder": "导出项目的名字"
+ },
+ "select": "选择",
+ "export": "导出",
+ "selectOrExport": "选择或导出",
+ "toast": {
+ "success": "导出成功。进入 /exports 目录查看文件。",
+ "error": {
+ "failed": "导出失败:{{error}}",
+ "endTimeMustAfterStartTime": "结束时间必须在开始时间之后",
+ "noVaildTimeSelected": "未选择有效的时间范围"
+ }
+ },
+ "fromTimeline": {
+ "saveExport": "保存导出",
+ "previewExport": "预览导出"
+ }
+ },
+ "streaming": {
+ "label": "视频流",
+ "restreaming": {
+ "disabled": "此摄像头未启用视频流转发功能。",
+ "desc": {
+ "title": "为此摄像头设置 go2rtc,以获取额外的实时预览选项和音频支持。",
+ "readTheDocumentation": "阅读文档"
+ }
+ },
+ "showStats": {
+ "label": "显示视频流统计信息",
+ "desc": "启用后将在摄像头画面上叠加显示视频流统计信息。"
+ },
+ "debugView": "调试界面"
+ },
+ "search": {
+ "saveSearch": {
+ "label": "保存搜索",
+ "desc": "请为此已保存的搜索提供一个名称。",
+ "placeholder": "请输入搜索名称",
+ "overwrite": "{{searchName}} 已存在。保存将覆盖现有值。",
+ "success": "搜索 ({{searchName}}) 已保存。",
+ "button": {
+ "save": {
+ "label": "保存此搜索"
+ }
+ }
+ }
+ },
+ "recording": {
+ "confirmDelete": {
+ "title": "确认删除",
+ "desc": {
+ "selected": "你确定要删除与此核查项相关的所有录制视频吗?detect 流上接收到任何帧,请检查错误日志"
+ },
+ "cameraDisabled": "摄像机已禁用",
+ "stats": {
+ "streamType": {
+ "title": "流类型:",
+ "short": "类型"
+ },
+ "bandwidth": {
+ "title": "带宽:",
+ "short": "带宽"
+ },
+ "latency": {
+ "title": "延迟:",
+ "value": "{{seconds}} 秒",
+ "short": {
+ "title": "延迟",
+ "value": "{{seconds}} 秒"
+ }
+ },
+ "totalFrames": "总帧数:",
+ "droppedFrames": {
+ "title": "丢帧数:",
+ "short": {
+ "title": "丢帧",
+ "value": "{{droppedFrames}} 帧"
+ }
+ },
+ "decodedFrames": "解码帧数:",
+ "droppedFrameRate": "丢帧率:"
+ },
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "已成功提交帧到 Frigate+"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "提交帧到 Frigate+ 失败"
+ }
+ }
+}
diff --git a/web/public/locales/zh-CN/objects.json b/web/public/locales/zh-CN/objects.json
new file mode 100644
index 000000000..161821a9d
--- /dev/null
+++ b/web/public/locales/zh-CN/objects.json
@@ -0,0 +1,120 @@
+{
+ "person": "人",
+ "bicycle": "自行车",
+ "car": "汽车",
+ "motorcycle": "摩托车",
+ "airplane": "飞机",
+ "bus": "公交车",
+ "train": "火车",
+ "boat": "船",
+ "traffic_light": "交通灯",
+ "fire_hydrant": "消防栓",
+ "street_sign": "路标",
+ "stop_sign": "停车标志",
+ "parking_meter": "停车计时器",
+ "bench": "长椅",
+ "bird": "鸟",
+ "cat": "猫",
+ "dog": "狗",
+ "horse": "马",
+ "sheep": "绵羊",
+ "cow": "牛",
+ "elephant": "大象",
+ "bear": "熊",
+ "zebra": "斑马",
+ "giraffe": "长颈鹿",
+ "hat": "帽子",
+ "backpack": "背包",
+ "umbrella": "雨伞",
+ "shoe": "鞋子",
+ "eye_glasses": "眼镜",
+ "handbag": "手提包",
+ "tie": "领带",
+ "suitcase": "手提箱",
+ "frisbee": "飞盘",
+ "skis": "滑雪板",
+ "snowboard": "滑雪板",
+ "sports_ball": "运动球",
+ "kite": "风筝",
+ "baseball_bat": "棒球棒",
+ "baseball_glove": "棒球手套",
+ "skateboard": "滑板",
+ "surfboard": "冲浪板",
+ "tennis_racket": "网球拍",
+ "bottle": "瓶子",
+ "plate": "盘子",
+ "wine_glass": "酒杯",
+ "cup": "杯子",
+ "fork": "叉子",
+ "knife": "刀",
+ "spoon": "勺子",
+ "bowl": "碗",
+ "banana": "香蕉",
+ "apple": "苹果",
+ "sandwich": "三明治",
+ "orange": "橙子",
+ "broccoli": "西兰花",
+ "carrot": "胡萝卜",
+ "hot_dog": "热狗",
+ "pizza": "披萨",
+ "donut": "甜甜圈",
+ "cake": "蛋糕",
+ "chair": "椅子",
+ "couch": "沙发",
+ "potted_plant": "盆栽植物",
+ "bed": "床",
+ "mirror": "镜子",
+ "dining_table": "餐桌",
+ "window": "窗户",
+ "desk": "桌子",
+ "toilet": "厕所",
+ "door": "门",
+ "tv": "电视",
+ "laptop": "笔记本电脑",
+ "mouse": "老鼠",
+ "remote": "遥控器",
+ "keyboard": "键盘",
+ "cell_phone": "手机",
+ "microwave": "微波炉",
+ "oven": "烤箱",
+ "toaster": "烤面包机",
+ "sink": "水槽",
+ "refrigerator": "冰箱",
+ "blender": "搅拌机",
+ "book": "书",
+ "clock": "时钟",
+ "vase": "花瓶",
+ "scissors": "剪刀",
+ "teddy_bear": "泰迪熊",
+ "hair_dryer": "吹风机",
+ "toothbrush": "牙刷",
+ "hair_brush": "发刷",
+ "vehicle": "车辆",
+ "squirrel": "松鼠",
+ "deer": "鹿",
+ "animal": "动物",
+ "bark": "狗叫",
+ "fox": "狐狸",
+ "goat": "山羊",
+ "rabbit": "兔子",
+ "raccoon": "浣熊",
+ "robot_lawnmower": "自动割草机",
+ "waste_bin": "垃圾桶",
+ "on_demand": "手动",
+ "face": "人脸",
+ "license_plate": "车牌",
+ "package": "包裹",
+ "bbq_grill": "烧烤架",
+ "amazon": "亚马逊",
+ "usps": "美国邮政",
+ "ups": "UPS",
+ "fedex": "联邦快递",
+ "dhl": "DHL",
+ "an_post": "爱尔兰邮政",
+ "purolator": "普罗莱特",
+ "postnl": "荷兰邮政",
+ "nzpost": "新西兰邮政",
+ "postnord": "北欧邮政",
+ "gls": "GLS",
+ "dpd": "DPD"
+}
diff --git a/web/public/locales/zh-CN/views/configEditor.json b/web/public/locales/zh-CN/views/configEditor.json
new file mode 100644
index 000000000..79e9b398c
--- /dev/null
+++ b/web/public/locales/zh-CN/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "documentTitle": "配置编辑器 - Frigate",
+ "configEditor": "配置编辑器",
+ "copyConfig": "复制配置",
+ "saveAndRestart": "保存并重启",
+ "saveOnly": "只保存",
+ "toast": {
+ "success": {
+ "copyToClipboard": "配置已复制到剪贴板。"
+ },
+ "error": {
+ "savingError": "保存配置时出错"
+ }
+ },
+ "confirm": "是否退出并不保存?"
+}
diff --git a/web/public/locales/zh-CN/views/events.json b/web/public/locales/zh-CN/views/events.json
new file mode 100644
index 000000000..72a93104f
--- /dev/null
+++ b/web/public/locales/zh-CN/views/events.json
@@ -0,0 +1,39 @@
+{
+ "alerts": "警报",
+ "detections": "检测",
+ "motion": {
+ "label": "运动",
+ "only": "仅运动画面"
+ },
+ "allCameras": "所有摄像头",
+ "empty": {
+ "alert": "还没有“警报”类核查项",
+ "detection": "还没有“检测”类核查项",
+ "motion": "还没有运动类数据"
+ },
+ "timeline": "时间线",
+ "timeline.aria": "选择时间线",
+ "events": {
+ "label": "事件",
+ "aria": "选择事件",
+ "noFoundForTimePeriod": "未找到该时间段的事件。"
+ },
+ "documentTitle": "核查 - Frigate",
+ "recordings": {
+ "documentTitle": "回放 - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "过去24小时"
+ },
+ "markAsReviewed": "标记为已核查",
+ "markTheseItemsAsReviewed": "将这些项目标记为已核查",
+ "newReviewItems": {
+ "label": "查看新的核查项目",
+ "button": "核查新项目"
+ },
+ "camera": "摄像头",
+ "selected": "已选择 {{count}} 个",
+ "selected_one": "已选择 {{count}} 个",
+ "selected_other": "已选择 {{count}} 个",
+ "detected": "已检测"
+}
diff --git a/web/public/locales/zh-CN/views/explore.json b/web/public/locales/zh-CN/views/explore.json
new file mode 100644
index 000000000..959a761b5
--- /dev/null
+++ b/web/public/locales/zh-CN/views/explore.json
@@ -0,0 +1,205 @@
+{
+ "documentTitle": "浏览 - Frigate",
+ "generativeAI": "生成式 AI",
+ "exploreIsUnavailable": {
+ "title": "浏览功能不可用",
+ "embeddingsReindexing": {
+ "context": "跟踪对象嵌入重新索引完成后,可以使用浏览功能。",
+ "startingUp": "启动中…",
+ "estimatedTime": "预计剩余时间:",
+ "finishingShortly": "即将完成",
+ "step": {
+ "thumbnailsEmbedded": "缩略图嵌入:",
+ "descriptionsEmbedded": "描述嵌入:",
+ "trackedObjectsProcessed": "跟踪对象已处理:"
+ }
+ },
+ "downloadingModels": {
+ "context": "Frigate正在下载支持语义搜索功能所需的嵌入模型。根据网络连接速度,这可能需要几分钟。",
+ "setup": {
+ "visionModel": "视觉模型",
+ "visionModelFeatureExtractor": "视觉模型特征提取器",
+ "textModel": "文本模型",
+ "textTokenizer": "文本分词器"
+ },
+ "tips": {
+ "context": "模型下载完成后,您可能需要重新索引跟踪对象的嵌入。",
+ "documentation": "阅读文档"
+ },
+ "error": "发生错误。请检查Frigate日志。"
+ }
+ },
+ "trackedObjectDetails": "跟踪对象详情",
+ "type": {
+ "details": "详情",
+ "snapshot": "快照",
+ "video": "视频",
+ "object_lifecycle": "对象生命周期"
+ },
+ "objectLifecycle": {
+ "title": "对象生命周期",
+ "noImageFound": "未找到此时间戳的图像。",
+ "createObjectMask": "创建对象遮罩",
+ "adjustAnnotationSettings": "调整标注设置",
+ "scrollViewTips": "滚动查看此对象生命周期的重要时刻。",
+ "autoTrackingTips": "自动跟踪摄像头的边界框位置可能不准确。",
+ "lifecycleItemDesc": {
+ "visible": "检测到 {{label}}",
+ "entered_zone": "{{label}} 进入 {{zones}}",
+ "active": "{{label}} 变为活动状态",
+ "stationary": "{{label}} 变为静止状态",
+ "attribute": {
+ "faceOrLicense_plate": "检测到 {{label}} 的 {{attribute}}",
+ "other": "{{label}} 识别为 {{attribute}}"
+ },
+ "gone": "{{label}} 离开",
+ "heard": "听到 {{label}}",
+ "external": "检测到 {{label}}",
+ "header": {
+ "ratio": "得分",
+ "zones": "区域",
+ "area": "坐标区域"
+ }
+ },
+ "annotationSettings": {
+ "title": "标注设置",
+ "showAllZones": {
+ "title": "显示所有区域",
+ "desc": "在对象进入区域的帧上始终显示区域。"
+ },
+ "offset": {
+ "label": "标注偏移",
+ "desc": "这些数据来自摄像头的检测源,但是叠加在录制源的图像上。这两个流不太可能完全同步。因此,边界框和录像不会完全对齐。但是,可以使用 annotation_offset 字段来调整这个问题。",
+ "documentation": "阅读文档 ",
+ "millisecondsToOffset": "检测标注的偏移毫秒数。默认值:0",
+ "tips": "提示:假设有一个人从左向右走的事件片段。如果事件时间线上的边界框始终在人的左侧,则应该减小该值。同样,如果一个人从左向右走,而边界框始终在人的前面,则应该增加该值。",
+ "toast": {
+ "success": "{{camera}} 的标注偏移量已成功保存至配置文件。请重启Frigate生效。"
+ }
+ }
+ },
+ "carousel": {
+ "previous": "上一张",
+ "next": "下一张"
+ },
+ "count": "第 {{first}} 个,共 {{second}} 个",
+ "trackedPoint": "追踪点"
+ },
+ "details": {
+ "item": {
+ "title": "回放项目详情",
+ "desc": "核查项详情",
+ "button": {
+ "share": "分享该核查项",
+ "viewInExplore": "在 浏览 中查看"
+ },
+ "tips": {
+ "mismatch_other": "检测到 {{count}} 个不可用的对象,并已包含在此核查项中。这些对象可能未达到警报或检测标准,或者已被清理/删除。",
+ "hasMissingObjects": "如果希望 Frigate 保存以下标签的跟踪对象,请调整您的配置:{{objects}}"
+ },
+ "toast": {
+ "success": {
+ "regenerate": "已向 {{provider}} 请求新的描述。根据提供商的速度,生成新描述可能需要一些时间。",
+ "updatedSublabel": "成功更新子标签。",
+ "updatedLPR": "成功更新车牌。"
+ },
+ "error": {
+ "regenerate": "调用 {{provider}} 生成新描述失败:{{errorMessage}}",
+ "updatedSublabelFailed": "更新子标签失败:{{errorMessage}}",
+ "updatedLPRFailed": "更新车牌失败:{{errorMessage}}"
+ }
+ }
+ },
+ "label": "标签",
+ "editSubLabel": {
+ "title": "编辑子标签",
+ "desc": "为 {{label}} 输入新的子标签",
+ "descNoLabel": "为此跟踪对象输入新的子标签"
+ },
+ "topScore": {
+ "label": "最高得分",
+ "info": "最高分是跟踪对象的最高中位数得分,因此可能与搜索结果缩略图上显示的得分不同。"
+ },
+ "estimatedSpeed": "预计速度",
+ "objects": "对象",
+ "camera": "摄像头",
+ "zones": "区域",
+ "timestamp": "时间戳",
+ "button": {
+ "findSimilar": "查找相似项",
+ "regenerate": {
+ "title": "重新生成",
+ "label": "重新生成跟踪对象描述"
+ }
+ },
+ "description": {
+ "label": "描述",
+ "placeholder": "跟踪对象的描述",
+ "aiTips": "在跟踪对象的生命周期结束之前,Frigate 不会向您的生成式 AI 提供商请求描述。"
+ },
+ "expandRegenerationMenu": "展开重新生成菜单",
+ "regenerateFromSnapshot": "从快照重新生成",
+ "regenerateFromThumbnails": "从缩略图重新生成",
+ "tips": {
+ "descriptionSaved": "已保存描述",
+ "saveDescriptionFailed": "更新描述失败:{{errorMessage}}"
+ },
+ "editLPR": {
+ "desc": "为 {{label}} 输入新的车牌值",
+ "descNoLabel": "为检测到的对象输入新的车牌值",
+ "title": "编辑车牌"
+ },
+ "recognizedLicensePlate": "识别的车牌",
+ "snapshotScore": {
+ "label": "快照得分"
+ }
+ },
+ "itemMenu": {
+ "downloadVideo": {
+ "label": "下载视频",
+ "aria": "下载视频"
+ },
+ "downloadSnapshot": {
+ "label": "下载快照",
+ "aria": "下载快照"
+ },
+ "viewObjectLifecycle": {
+ "label": "查看对象生命周期",
+ "aria": "显示对象的生命周期"
+ },
+ "findSimilar": {
+ "label": "查找相似项",
+ "aria": "查看相似的对象"
+ },
+ "submitToPlus": {
+ "label": "提交至 Frigate+",
+ "aria": "提交至 Frigate Plus"
+ },
+ "viewInHistory": {
+ "label": "在历史记录中查看",
+ "aria": "在历史记录中查看"
+ },
+ "deleteTrackedObject": {
+ "label": "删除此跟踪对象"
+ }
+ },
+ "dialog": {
+ "confirmDelete": {
+ "title": "确认删除",
+ "desc": "删除此跟踪对象将移除快照、所有已保存的嵌入数据以及任何关联的对象生命周期条目。但在历史视图中的录制视频不会被删除。mode: {{effectiveRetainMode}},因此此按需录制将仅保留包含 {{effectiveRetainModeName}} 的片段。"
+ },
+ "editLayout": {
+ "label": "编辑布局",
+ "group": {
+ "label": "编辑摄像机分组"
+ },
+ "exitEdit": "退出编辑"
+ }
+}
diff --git a/web/public/locales/zh-CN/views/recording.json b/web/public/locales/zh-CN/views/recording.json
new file mode 100644
index 000000000..77443e172
--- /dev/null
+++ b/web/public/locales/zh-CN/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "export": "导出",
+ "calendar": "日历",
+ "filter": "过滤器",
+ "filters": "筛选条件",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "未选择有效的时间范围",
+ "endTimeMustAfterStartTime": "结束时间必须晚于开始时间"
+ }
+ }
+}
diff --git a/web/public/locales/zh-CN/views/search.json b/web/public/locales/zh-CN/views/search.json
new file mode 100644
index 000000000..8845379b6
--- /dev/null
+++ b/web/public/locales/zh-CN/views/search.json
@@ -0,0 +1,74 @@
+{
+ "search": "搜索",
+ "savedSearches": "已保存的搜索",
+ "searchFor": "搜索 {{inputValue}}",
+ "button": {
+ "clear": "清除搜索",
+ "save": "保存搜索",
+ "delete": "删除已保存的搜索",
+ "filterInformation": "筛选信息",
+ "filterActive": "筛选器已激活"
+ },
+ "trackedObjectId": "跟踪对象 ID",
+ "filter": {
+ "label": {
+ "cameras": "摄像机",
+ "labels": "标签",
+ "zones": "区域",
+ "sub_labels": "子标签",
+ "search_type": "搜索类型",
+ "time_range": "时间范围",
+ "before": "之前",
+ "after": "之后",
+ "min_score": "最低分数",
+ "max_score": "最高分数",
+ "min_speed": "最低速度",
+ "max_speed": "最高速度",
+ "recognized_license_plate": "识别的车牌",
+ "has_clip": "包含片段",
+ "has_snapshot": "包含快照"
+ },
+ "searchType": {
+ "thumbnail": "缩略图",
+ "description": "描述"
+ },
+ "toast": {
+ "error": {
+ "beforeDateBeLaterAfter": "结束日期必须晚于开始日期。",
+ "afterDatebeEarlierBefore": "开始日期必须早于结束日期。",
+ "minScoreMustBeLessOrEqualMaxScore": "最低分数必须小于或等于最高分数。",
+ "maxScoreMustBeGreaterOrEqualMinScore": "最高分数必须大于或等于最低分数。",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "最低速度必须小于或等于最高速度。",
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "最高速度必须大于或等于最低速度。"
+ }
+ },
+ "tips": {
+ "title": "如何使用文本筛选器",
+ "desc": {
+ "text": "筛选器可帮助您缩小搜索范围。注意,目前还暂不支持中文搜索。以下是在输入字段中使用筛选器的方法:",
+ "step": "cameras:front_door label:person before:01012024 time_range:3:00PM-4:00PM",
+ "step2": "选择给出的建议值或自行输入;",
+ "step3": "多个过滤器之间用空格分隔;",
+ "step5": "时间范围过滤器使用 {{exampleTime}} 格式;",
+ "step6": "点击过滤器旁的'x'可移除该过滤选项。",
+ "exampleLabel": "范例:",
+ "step1": "输入过滤键名后接冒号(例如 \"cameras:\" );",
+ "step4": "日期过滤器(before: 和 after:)使用 {{DateFormat}} 格式;"
+ }
+ },
+ "header": {
+ "currentFilterType": "筛选值",
+ "noFilters": "筛选条件",
+ "activeFilters": "激活的筛选项"
+ }
+ },
+ "similaritySearch": {
+ "title": "相似搜索",
+ "active": "相似搜索已激活",
+ "clear": "清除相似搜索"
+ },
+ "placeholder": {
+ "search": "搜索…"
+ }
+}
diff --git a/web/public/locales/zh-CN/views/settings.json b/web/public/locales/zh-CN/views/settings.json
new file mode 100644
index 000000000..935a22658
--- /dev/null
+++ b/web/public/locales/zh-CN/views/settings.json
@@ -0,0 +1,681 @@
+{
+ "documentTitle": {
+ "default": "设置 - Frigate",
+ "authentication": "身份验证设置 - Frigate",
+ "camera": "摄像头设置 - Frigate",
+ "classification": "分类设置 - Frigate",
+ "masksAndZones": "遮罩和区域编辑器 - Frigate",
+ "motionTuner": "运动调整器 - Frigate",
+ "object": "调试 - Frigate",
+ "general": "常规设置 - Frigate",
+ "frigatePlus": "Frigate+ 设置 - Frigate",
+ "notifications": "通知设置 - Frigate",
+ "enrichments": "增强功能设置 - Frigate"
+ },
+ "menu": {
+ "ui": "界面设置",
+ "classification": "分类设置",
+ "cameras": "摄像头设置",
+ "masksAndZones": "遮罩/ 区域",
+ "motionTuner": "运动调整器",
+ "debug": "调试",
+ "users": "用户",
+ "notifications": "通知",
+ "frigateplus": "Frigate+",
+ "enrichments": "增强功能"
+ },
+ "dialog": {
+ "unsavedChanges": {
+ "title": "你有未保存的更改。",
+ "desc": "是否要在继续之前保存更改?"
+ }
+ },
+ "cameraSetting": {
+ "camera": "摄像头",
+ "noCamera": "没有摄像头"
+ },
+ "general": {
+ "title": "常规设置",
+ "liveDashboard": {
+ "title": "实时监控面板",
+ "automaticLiveView": {
+ "label": "自动实时预览",
+ "desc": "检测到画面活动时将自动切换至该摄像头实时画面。禁用此选项会导致实时监控页面的摄像头图像每分钟只更新一次。"
+ },
+ "playAlertVideos": {
+ "label": "播放警报视频",
+ "desc": "默认情况下,实时监控页面上的最新警报会以一小段循环视频的形式进行播放。禁用此选项将仅显示浏览器本地缓存的静态图片。"
+ }
+ },
+ "storedLayouts": {
+ "title": "存储监控面板布局",
+ "desc": "可以在监控面板调整或拖动摄像头的布局。这些设置将保存在浏览器的本地存储中。",
+ "clearAll": "清除所有布局"
+ },
+ "cameraGroupStreaming": {
+ "title": "摄像头组视频流设置",
+ "desc": "每个摄像头组的视频流设置将保存在浏览器的本地存储中。",
+ "clearAll": "清除所有视频流设置"
+ },
+ "recordingsViewer": {
+ "title": "回放查看",
+ "defaultPlaybackRate": {
+ "label": "默认播放速率",
+ "desc": "调整播放录像时默认的速率。"
+ }
+ },
+ "calendar": {
+ "title": "日历",
+ "firstWeekday": {
+ "label": "每周第一天",
+ "desc": "设置每周第一天是星期几。",
+ "sunday": "星期天",
+ "monday": "星期一"
+ }
+ },
+ "toast": {
+ "success": {
+ "clearStoredLayout": "已清除 {{cameraName}} 的存储布局",
+ "clearStreamingSettings": "已清除所有摄像头组的视频流设置。"
+ },
+ "error": {
+ "clearStoredLayoutFailed": "清除存储布局失败:{{errorMessage}}",
+ "clearStreamingSettingsFailed": "清除视频流设置失败:{{errorMessage}}"
+ }
+ }
+ },
+ "classification": {
+ "title": "分类设置",
+ "semanticSearch": {
+ "title": "语义搜索",
+ "desc": "Frigate的语义搜索能够让你使用自然语言根据图像本身、自定义的文本描述或自动生成的描述来搜索视频。",
+ "readTheDocumentation": "阅读文档(英文)",
+ "reindexNow": {
+ "label": "立即重建索引",
+ "desc": "重建索引将为所有跟踪对象重新生成特征向量。该过程将在后台运行,可能会使CPU满载,所需时间取决于跟踪对象的数量。",
+ "confirmTitle": "确认重建索引",
+ "confirmDesc": "确定要为所有跟踪对象重建特征向量索引吗?此过程将在后台运行,但可能会导致CPU满载并耗费较长时间。您可以在 浏览 页面查看进度。",
+ "confirmButton": "重建索引",
+ "success": "重建索引已成功启动。",
+ "alreadyInProgress": "重建索引已在执行中。",
+ "error": "启动重建索引失败:{{errorMessage}}"
+ },
+ "modelSize": {
+ "label": "模型大小",
+ "desc": "用于语义搜索的语言模型大小。",
+ "small": {
+ "title": "小",
+ "desc": "使用 小模型。该模型将使用较少的内存,在CPU上也能较快的运行。质量较好。"
+ },
+ "large": {
+ "title": "大",
+ "desc": "使用 大模型。该模型采用了完整的Jina模型,并在适用的情况下使用GPU。"
+ }
+ }
+ },
+ "faceRecognition": {
+ "title": "人脸识别",
+ "desc": "人脸识别功能允许为人物分配名称,当识别到他们的面孔时,Frigate 会将人物的名字作为子标签进行分配。这些信息会显示在界面、过滤器以及通知中。",
+ "readTheDocumentation": "阅读文档(英文)",
+ "modelSize": {
+ "label": "模型大小",
+ "desc": "用于人脸识别的模型尺寸。",
+ "small": {
+ "title": "小",
+ "desc": "使用小模型将采用FaceNet人脸特征提取模型,可在大多数CPU上高效运行。"
+ },
+ "large": {
+ "title": "大",
+ "desc": "使用大模型将采用ArcFace人脸特征提取模型,若条件允许将自动使用GPU运行。"
+ }
+ }
+ },
+ "licensePlateRecognition": {
+ "title": "车牌识别",
+ "desc": "Frigate 可以识别车辆的车牌,并自动将检测到的字符添加到 recognized_license_plate 字段中,或将已知名称作为子标签添加到汽车类型的对象中。常见的使用场景可能是读取驶入车道的汽车车牌或经过街道的汽车车牌。",
+ "readTheDocumentation": "阅读文档(英文)"
+ },
+ "toast": {
+ "success": "分类设置已保存,请重启 Frigate 以应用更改。",
+ "error": "保存配置更改失败:{{errorMessage}}"
+ },
+ "birdClassification": {
+ "title": "鸟类识别分类",
+ "desc": "鸟类识别分类采用量化TensorFlow模型识别已知鸟类。当识别到已知鸟类时,其通用名称将作为子标签(sub_label)添加。该信息将显示在用户界面、过滤器及通知中。"
+ },
+ "restart_required": "需要重启(分类设置已修改)",
+ "unsavedChanges": "分类设置未保存"
+ },
+ "camera": {
+ "title": "摄像头设置",
+ "streams": {
+ "title": "视频流",
+ "desc": "暂时禁用摄像头,除非重启Frigate否则将保持禁用。禁用摄像头将完全停止 Frigate 对该摄像头视频流的处理。检测、录制和调试功能都将不可用。运动区域框
将在当前检测到运动的区域内显示红色区域框。
" + }, + "regions": { + "title": "范围", + "desc": "显示发送到运动检测器感兴趣范围的框", + "tips": "范围框
将在帧中发送到目标检测器的感兴趣范围上叠加绿色框。
" + }, + "objectShapeFilterDrawing": { + "title": "允许绘制“对象形状过滤器”", + "desc": "在图像上绘制矩形,以查看区域和比例详细信息", + "tips": "启用此选项,能够在摄像头图像上绘制矩形,将显示其区域和比例。然后,您可以使用这些值在配置中设置对象形状过滤器参数。", + "document": "阅读文档 ", + "score": "分数", + "ratio": "比例", + "area": "区域" + } + }, + "users": { + "title": "用户", + "management": { + "title": "用户管理", + "desc": "管理此 Frigate 实例的用户账户。" + }, + "addUser": "添加用户", + "updatePassword": "修改密码", + "toast": { + "success": { + "createUser": "用户 {{user}} 创建成功", + "deleteUser": "用户 {{user}} 删除成功", + "updatePassword": "已成功修改密码。", + "roleUpdated": "已更新 {{user}} 的权限组" + }, + "error": { + "setPasswordFailed": "保存密码出现错误:{{errorMessage}}", + "createUserFailed": "创建用户失败:{{errorMessage}}", + "deleteUserFailed": "删除用户失败:{{errorMessage}}", + "roleUpdateFailed": "更新权限组失败:{{errorMessage}}" + } + }, + "table": { + "username": "用户名", + "actions": "操作", + "role": "权限组", + "noUsers": "未找到用户。", + "changeRole": "更改用户角色", + "password": "密码", + "deleteUser": "删除用户" + }, + "dialog": { + "form": { + "user": { + "title": "用户名", + "desc": "仅允许使用字母、数字、句点和下划线。", + "placeholder": "请输入用户名" + }, + "password": { + "title": "密码", + "placeholder": "请输入密码", + "confirm": { + "title": "确认密码", + "placeholder": "请再次输入密码" + }, + "strength": { + "title": "密码强度: ", + "weak": "弱", + "medium": "中等", + "strong": "强", + "veryStrong": "非常强" + }, + "match": "密码匹配", + "notMatch": "密码不匹配" + }, + "newPassword": { + "title": "新密码", + "placeholder": "请输入新密码", + "confirm": { + "placeholder": "请再次输入新密码" + } + }, + "usernameIsRequired": "用户名为必填项", + "passwordIsRequired": "必须输入密码" + }, + "createUser": { + "title": "创建新用户", + "desc": "创建一个新用户账户,并指定一个角色以控制访问 Frigate UI 的权限。", + "usernameOnlyInclude": "用户名只能包含字母、数字和 _", + "confirmPassword": "请确认你的密码" + }, + "deleteUser": { + "title": "删除该用户", + "desc": "此操作无法撤销。这将永久删除用户账户并移除所有相关数据。", + "warn": "你确定要删除 {{username}} 吗?" + }, + "passwordSetting": { + "updatePassword": "更新 {{username}} 的密码", + "setPassword": "设置密码", + "desc": "创建一个强密码来保护此账户。", + "doNotMatch": "两次输入密码不匹配", + "cannotBeEmpty": "密码不能为空" + }, + "changeRole": { + "title": "更改用户权限组", + "desc": "更新 {{username}} 的权限", + "roleInfo": { + "admin": "管理员", + "viewer": "成员", + "viewerDesc": "仅能够查看实时监控面板、核查、浏览和导出功能。", + "adminDesc": "完全功能与访问权限。", + "intro": "为该用户选择一个合适的权限组:" + }, + "select": "选择权限组" + } + } + }, + "notification": { + "title": "通知", + "notificationSettings": { + "title": "通知设置", + "desc": "Frigate 在浏览器中运行或作为 PWA 安装时,可以原生向您的设备发送推送通知。", + "documentation": "阅读文档" + }, + "globalSettings": { + "title": "全局设置", + "desc": "临时暂停所有已注册设备上特定摄像头的通知。" + }, + "notificationUnavailable": { + "title": "通知功能不可用", + "desc": "网页推送通知需要安全连接(https://…)。这是浏览器的限制。请通过安全方式访问 Frigate 以使用通知功能。",
+ "documentation": "阅读文档"
+ },
+ "email": {
+ "title": "电子邮箱",
+ "placeholder": "例如:example@email.com",
+ "desc": "需要输入有效的电子邮件,在推送服务出现问题时,将使用此电子邮件进行通知。"
+ },
+ "cameras": {
+ "title": "摄像头",
+ "noCameras": "没有可用的摄像头",
+ "desc": "选择要启用通知的摄像头。"
+ },
+ "deviceSpecific": "设备专用设置",
+ "registerDevice": "注册该设备",
+ "unregisterDevice": "取消注册该设备",
+ "sendTestNotification": "发送测试通知",
+ "active": "通知已启用",
+ "suspended": "通知已暂停 {{time}}",
+ "suspendTime": {
+ "5minutes": "暂停 5 分钟",
+ "10minutes": "暂停 10 分钟",
+ "30minutes": "暂停 30 分钟",
+ "1hour": "暂停 1 小时",
+ "12hours": "暂停 12 小时",
+ "24hours": "暂停 24 小时",
+ "untilRestart": "暂停直到重启",
+ "suspend": "暂停"
+ },
+ "cancelSuspension": "取消暂停",
+ "toast": {
+ "success": {
+ "registered": "已成功注册通知。需要重启 Frigate 才能发送任何通知(包括测试通知)。",
+ "settingSaved": "通知设置已保存。"
+ },
+ "error": {
+ "registerFailed": "通知注册失败。"
+ }
+ },
+ "unsavedRegistrations": "未保存通知注册",
+ "unsavedChanges": "未保存通知设置更改"
+ },
+ "frigatePlus": {
+ "title": "Frigate+ 设置",
+ "apiKey": {
+ "title": "Frigate+ API 密钥",
+ "validated": "Frigate+ API 密钥已检测并验证通过",
+ "notValidated": "未检测到 Frigate+ API 密钥或验证未通过",
+ "desc": "Frigate+ API 密钥用于启用与 Frigate+ 服务的集成。",
+ "plusLink": "了解更多关于 Frigate+"
+ },
+ "snapshotConfig": {
+ "title": "快照配置",
+ "desc": "提交到 Frigate+ 需要同时在配置中启用快照和 clean_copy 快照。",
+ "documentation": "阅读文档",
+ "cleanCopyWarning": "部分摄像头已启用快照但未启用 clean_copy。您需要在快照配置中启用 clean_copy,才能将这些摄像头的图像提交到 Frigate+。",
+ "table": {
+ "camera": "摄像头",
+ "snapshots": "快照",
+ "cleanCopySnapshots": "clean_copy 快照"
+ }
+ },
+ "modelInfo": {
+ "title": "模型信息",
+ "modelType": "模型类型",
+ "trainDate": "训练日期",
+ "baseModel": "基础模型",
+ "supportedDetectors": "支持的检测器",
+ "dimensions": "大小",
+ "cameras": "摄像头",
+ "loading": "正在加载模型信息…",
+ "error": "加载模型信息失败",
+ "availableModels": "可用模型",
+ "loadingAvailableModels": "正在加载可用模型…",
+ "modelSelect": "您可以在Frigate+上选择可用的模型。请注意,只能选择与当前检测器配置兼容的模型。",
+ "plusModelType": {
+ "baseModel": "基础模型",
+ "userModel": "定向调优"
+ }
+ },
+ "toast": {
+ "success": "Frigate+ 设置已保存。请重启 Frigate 以应用更改。",
+ "error": "配置更改保存失败:{{errorMessage}}"
+ },
+ "restart_required": "需要重启(Frigate+模型已修改)",
+ "unsavedChanges": "未保存Frigate+变更设置"
+ },
+ "enrichments": {
+ "title": "增强功能设置",
+ "birdClassification": {
+ "desc": "鸟类分类通过量化的TensorFlow模型识别已知鸟类。当识别到已知鸟类时,其通用名称将作为子标签(sub_label)添加。此信息包含在用户界面、筛选器以及通知中。",
+ "title": "鸟类分类"
+ },
+ "semanticSearch": {
+ "reindexNow": {
+ "desc": "重建索引将为所有跟踪对象重新生成特征向量。该过程将在后台运行,可能会使CPU满载,所需时间取决于跟踪对象的数量。",
+ "label": "立即重建索引",
+ "confirmTitle": "确认重建索引",
+ "confirmDesc": "确定要为所有跟踪对象重建特征向量索引吗?此过程将在后台运行,但可能会导致CPU满载并耗费较长时间。您可以在 浏览 页面查看进度。",
+ "confirmButton": "重建索引",
+ "success": "重建索引已成功启动。",
+ "alreadyInProgress": "重建索引已在执行中。",
+ "error": "启动重建索引失败:{{errorMessage}}"
+ },
+ "modelSize": {
+ "label": "模型大小",
+ "desc": "用于语义搜索的语言模型大小。",
+ "small": {
+ "title": "小",
+ "desc": "使用 小模型。该模型将使用较少的内存,在CPU上也能较快的运行。质量较好。"
+ },
+ "large": {
+ "title": "大",
+ "desc": "使用 大模型。该模型采用了完整的Jina模型,并在适用的情况下使用GPU。"
+ }
+ },
+ "title": "分类搜索",
+ "desc": "Frigate中的语义搜索功能允许您通过使用图像本身、用户自定义的文本描述,或自动生成的文本描述等方式在核查项目中查找被追踪对象。",
+ "readTheDocumentation": "阅读文档"
+ },
+ "licensePlateRecognition": {
+ "desc": "Frigate 可以识别车辆的车牌,并自动将检测到的字符添加到 recognized_license_plate 字段中,或将已知名称作为子标签添加到汽车类型的对象中。常见的使用场景可能是读取驶入车道的汽车车牌或经过街道的汽车车牌。",
+ "title": "车牌识别",
+ "readTheDocumentation": "阅读文档"
+ },
+ "faceRecognition": {
+ "desc": "人脸识别功能允许为人物分配名称,当识别到他们的面孔时,Frigate 会将人物的名字作为子标签进行分配。这些信息会显示在界面、过滤器以及通知中。",
+ "title": "人脸识别",
+ "readTheDocumentation": "阅读文档",
+ "modelSize": {
+ "label": "模型大小",
+ "desc": "用于人脸识别的模型大小。",
+ "small": {
+ "title": "小",
+ "desc": "使用小模型将采用FaceNet人脸特征提取模型,可在大多数CPU上高效运行。"
+ },
+ "large": {
+ "title": "大",
+ "desc": "使用大模型将采用ArcFace人脸特征提取模型,若条件允许将自动使用GPU运行。"
+ }
+ }
+ },
+ "toast": {
+ "success": "增强功能设置已保存。请重启 Frigate 以应用更改。",
+ "error": "配置更改保存失败:{{errorMessage}}"
+ },
+ "unsavedChanges": "增强功能设置未保存",
+ "restart_required": "需要重启(增强功能设置已保存)"
+ }
+}
diff --git a/web/public/locales/zh-CN/views/system.json b/web/public/locales/zh-CN/views/system.json
new file mode 100644
index 000000000..72ba79049
--- /dev/null
+++ b/web/public/locales/zh-CN/views/system.json
@@ -0,0 +1,180 @@
+{
+ "documentTitle": {
+ "cameras": "摄像头统计 - Frigate",
+ "storage": "存储统计 - Frigate",
+ "general": "常规统计 - Frigate",
+ "enrichments": "增强功能统计 - Frigate",
+ "logs": {
+ "frigate": "Frigate 日志 - Frigate",
+ "go2rtc": "Go2RTC 日志 - Frigate",
+ "nginx": "Nginx 日志 - Frigate"
+ }
+ },
+ "title": "系统",
+ "metrics": "系统指标",
+ "logs": {
+ "download": {
+ "label": "下载日志"
+ },
+ "copy": {
+ "label": "复制到剪贴板",
+ "success": "已复制日志到剪贴板",
+ "error": "无法复制日志到剪贴板"
+ },
+ "type": {
+ "label": "类型",
+ "timestamp": "时间戳",
+ "tag": "标签",
+ "message": "消息"
+ },
+ "tips": "日志正在从服务器流式传输",
+ "toast": {
+ "error": {
+ "fetchingLogsFailed": "获取日志出错:{{errorMessage}}",
+ "whileStreamingLogs": "流式传输日志时出错:{{errorMessage}}"
+ }
+ }
+ },
+ "general": {
+ "title": "常规",
+ "detector": {
+ "title": "检测器",
+ "inferenceSpeed": "检测器推理速度",
+ "cpuUsage": "检测器CPU使用率",
+ "memoryUsage": "检测器内存使用率",
+ "temperature": "检测器温度"
+ },
+ "hardwareInfo": {
+ "title": "硬件信息",
+ "gpuUsage": "GPU使用率",
+ "gpuMemory": "GPU显存",
+ "gpuEncoder": "GPU编码",
+ "gpuDecoder": "GPU解码",
+ "gpuInfo": {
+ "vainfoOutput": {
+ "title": "Vainfo 输出",
+ "returnCode": "返回代码:{{code}}",
+ "processOutput": "进程输出:",
+ "processError": "进程错误:"
+ },
+ "nvidiaSMIOutput": {
+ "title": "Nvidia SMI 输出",
+ "name": "名称:{{name}}",
+ "driver": "驱动:{{driver}}",
+ "cudaComputerCapability": "CUDA计算能力:{{cuda_compute}}",
+ "vbios": "VBios信息:{{vbios}}"
+ },
+ "closeInfo": {
+ "label": "关闭GPU信息"
+ },
+ "copyInfo": {
+ "label": "复制GPU信息"
+ },
+ "toast": {
+ "success": "已复制GPU信息到剪贴板"
+ }
+ },
+ "npuMemory": "NPU内存",
+ "npuUsage": "NPU使用率"
+ },
+ "otherProcesses": {
+ "title": "其他进程",
+ "processCpuUsage": "主进程CPU使用率",
+ "processMemoryUsage": "主进程内存使用率"
+ }
+ },
+ "storage": {
+ "title": "存储",
+ "overview": "概览",
+ "recordings": {
+ "title": "录制内容",
+ "tips": "该值表示 Frigate 数据库中录制内容所使用的总存储空间。Frigate 不会追踪磁盘上所有文件的存储使用情况。",
+ "earliestRecording": "最早的可用录制:"
+ },
+ "cameraStorage": {
+ "title": "摄像头存储",
+ "camera": "摄像头",
+ "unusedStorageInformation": "未使用存储信息",
+ "storageUsed": "存储使用",
+ "percentageOfTotalUsed": "总使用率",
+ "bandwidth": "带宽",
+ "unused": {
+ "title": "未使用",
+ "tips": "如果您的驱动器上存储了除 Frigate 录制内容之外的其他文件,该值可能无法准确反映 Frigate 可用的剩余空间。Frigate 不会追踪录制内容以外的存储使用情况。"
+ }
+ }
+ },
+ "cameras": {
+ "title": "摄像头",
+ "overview": "概览",
+ "info": {
+ "cameraProbeInfo": "{{camera}} 的摄像头信息",
+ "streamDataFromFFPROBE": "流数据信息通过ffprobe获取。",
+ "fetching": "正在获取摄像头数据",
+ "stream": "视频流{{idx}}",
+ "video": "视频:",
+ "codec": "编解码器:",
+ "resolution": "分辨率:",
+ "fps": "帧率:",
+ "unknown": "未知",
+ "audio": "音频:",
+ "error": "错误:{{error}}",
+ "tips": {
+ "title": "摄像头信息"
+ },
+ "aspectRatio": "宽高比"
+ },
+ "framesAndDetections": "帧数/检测次数",
+ "label": {
+ "camera": "摄像头",
+ "detect": "检测",
+ "skipped": "跳过",
+ "ffmpeg": "FFmpeg编码器",
+ "capture": "捕获",
+ "overallFramesPerSecond": "每秒总帧数",
+ "overallDetectionsPerSecond": "每秒总检测数",
+ "overallSkippedDetectionsPerSecond": "每秒跳过检测数",
+ "cameraCapture": "{{camName}} 捕获",
+ "cameraDetect": "{{camName}} 检测",
+ "cameraDetectionsPerSecond": "{{camName}} 每秒检测数",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} 每秒跳过检测数",
+ "cameraFfmpeg": "{{camName}} FFmpeg",
+ "cameraFramesPerSecond": "{{camName}} 每秒帧数"
+ },
+ "toast": {
+ "success": {
+ "copyToClipboard": "已复制检测数据到剪贴板。"
+ },
+ "error": {
+ "unableToProbeCamera": "无法检测到摄像头:{{errorMessage}}"
+ }
+ }
+ },
+ "lastRefreshed": "最后刷新时间:",
+ "stats": {
+ "ffmpegHighCpuUsage": "{{camera}} 的 FFmpeg CPU 使用率较高({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} 的 检测器 CPU 使用率较高({{detectAvg}}%)",
+ "healthy": "系统运行正常",
+ "reindexingEmbeddings": "正在重新索引嵌入(已完成 {{processed}}%)",
+ "detectIsSlow": "{{detect}} 运行缓慢({{speed}}毫秒)",
+ "detectIsVerySlow": "{{detect}} 运行非常缓慢({{speed}}毫秒)",
+ "cameraIsOffline": "{{camera}} 已离线"
+ },
+ "enrichments": {
+ "title": "增强功能",
+ "infPerSecond": "每秒推理次数",
+ "embeddings": {
+ "image_embedding_speed": "图像特征提取速度",
+ "face_embedding_speed": "人脸特征提取速度",
+ "plate_recognition_speed": "车牌识别速度",
+ "text_embedding_speed": "文本编码速度",
+ "face_recognition_speed": "人脸识别速度",
+ "image_embedding": "图像特征提取",
+ "text_embedding": "文字编码",
+ "face_recognition": "人脸特征提取",
+ "plate_recognition": "车牌识别",
+ "yolov9_plate_detection_speed": "YOLOv9 车牌检测速度",
+ "yolov9_plate_detection": "YOLOv9 车牌检测"
+ }
+ }
+}
diff --git a/web/site.webmanifest b/web/site.webmanifest
index 94e455ec8..7040ce5c9 100644
--- a/web/site.webmanifest
+++ b/web/site.webmanifest
@@ -1,28 +1,28 @@
{
"name": "Frigate",
"short_name": "Frigate",
- "start_url": "/",
+ "start_url": "/BASE_PATH/",
"icons": [
{
- "src": "/images/android-chrome-512x512.png",
+ "src": "/BASE_PATH/images/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "any"
},
{
- "src": "/images/android-chrome-192x192.png",
+ "src": "/BASE_PATH/images/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "any"
},
{
- "src": "/images/maskable-icon.png",
+ "src": "/BASE_PATH/images/maskable-icon.png",
"sizes": "180x180",
"type": "image/png",
"purpose": "maskable"
},
{
- "src": "/images/maskable-badge.png",
+ "src": "/BASE_PATH/images/maskable-badge.png",
"sizes": "96x96",
"type": "image/png",
"purpose": "maskable"
diff --git a/web/src/api/ws.tsx b/web/src/api/ws.tsx
index 5eedcdbcd..3e9c8c14f 100644
--- a/web/src/api/ws.tsx
+++ b/web/src/api/ws.tsx
@@ -44,7 +44,8 @@ function useValue(): useValueReturn {
return;
}
- const cameraActivity: { [key: string]: object } = JSON.parse(activityValue);
+ const cameraActivity: { [key: string]: FrigateCameraState } =
+ JSON.parse(activityValue);
if (Object.keys(cameraActivity).length === 0) {
return;
@@ -64,9 +65,7 @@ function useValue(): useValueReturn {
autotracking,
alerts,
detections,
- } =
- // @ts-expect-error we know this is correct
- state["config"];
+ } = state["config"];
cameraStates[`${name}/recordings/state`] = record ? "ON" : "OFF";
cameraStates[`${name}/enabled/state`] = enabled ? "ON" : "OFF";
cameraStates[`${name}/detect/state`] = detect ? "ON" : "OFF";
@@ -174,7 +173,7 @@ export function useEnabledState(camera: string): {
value: { payload },
send,
} = useWs(`${camera}/enabled/state`, `${camera}/enabled/set`);
- return { payload: (payload ?? "ON") as ToggleableSetting, send };
+ return { payload: payload as ToggleableSetting, send };
}
export function useDetectState(camera: string): {
diff --git a/web/src/components/Statusbar.tsx b/web/src/components/Statusbar.tsx
index 1b20b26f6..0ac6d10a4 100644
--- a/web/src/components/Statusbar.tsx
+++ b/web/src/components/Statusbar.tsx
@@ -5,12 +5,16 @@ import {
} from "@/context/statusbar-provider";
import useStats, { useAutoFrigateStats } from "@/hooks/use-stats";
import { useContext, useEffect, useMemo } from "react";
+import { useTranslation } from "react-i18next";
+
import { FaCheck } from "react-icons/fa";
import { IoIosWarning } from "react-icons/io";
import { MdCircle } from "react-icons/md";
import { Link } from "react-router-dom";
export default function Statusbar() {
+ const { t } = useTranslation(["views/system"]);
+
const { messages, addMessage, clearMessages } = useContext(
StatusBarMessagesContext,
)!;
@@ -50,14 +54,19 @@ export default function Statusbar() {
clearMessages("embeddings-reindex");
addMessage(
"embeddings-reindex",
- `Reindexing embeddings (${Math.floor((reindexState.processed_objects / reindexState.total_objects) * 100)}% complete)`,
+ t("stats.reindexingEmbeddings", {
+ processed: Math.floor(
+ (reindexState.processed_objects / reindexState.total_objects) *
+ 100,
+ ),
+ }),
);
}
if (reindexState.status === "completed") {
clearMessages("embeddings-reindex");
}
}
- }, [reindexState, addMessage, clearMessages]);
+ }, [reindexState, addMessage, clearMessages, t]);
return (