diff --git a/benchmark.py b/benchmark.py
index 7db09a5d7..1f39302a7 100755
--- a/benchmark.py
+++ b/benchmark.py
@@ -6,7 +6,7 @@ import numpy as np
import frigate.util as util
from frigate.config import DetectorTypeEnum
-from frigate.object_detection import (
+from frigate.object_detection.base import (
ObjectDetectProcess,
RemoteObjectDetector,
load_labels,
diff --git a/docs/docs/configuration/object_detectors.md b/docs/docs/configuration/object_detectors.md
index 31f0df1da..2906a7829 100644
--- a/docs/docs/configuration/object_detectors.md
+++ b/docs/docs/configuration/object_detectors.md
@@ -312,13 +312,13 @@ model:
Note that the labelmap uses a subset of the complete COCO label set that has only 80 objects.
-#### YOLOv9
+#### YOLO (v3, v4, v7, v9)
-[YOLOv9](https://github.com/WongKinYiu/yolov9) models are supported, but not included by default.
+YOLOv3, YOLOv4, YOLOv7, and [YOLOv9](https://github.com/WongKinYiu/yolov9) models are supported, but not included by default.
:::tip
-The YOLOv9 detector has been designed to support YOLOv9 models, but may support other YOLO model architectures as well.
+The YOLO detector has been designed to support YOLOv3, YOLOv4, YOLOv7, and YOLOv9 models, but may support other YOLO model architectures as well.
:::
@@ -331,12 +331,12 @@ detectors:
device: GPU
model:
- model_type: yolov9
- width: 640 # <--- should match the imgsize set during model export
- height: 640 # <--- should match the imgsize set during model export
+ model_type: yolo-generic
+ width: 320 # <--- should match the imgsize set during model export
+ height: 320 # <--- should match the imgsize set during model export
input_tensor: nchw
input_dtype: float
- path: /config/model_cache/yolov9-t.onnx
+ path: /config/model_cache/yolo.onnx
labelmap_path: /labelmap/coco-80.txt
```
@@ -653,13 +653,13 @@ model:
labelmap_path: /labelmap/coco-80.txt
```
-#### YOLOv9
+#### YOLO (v3, v4, v7, v9)
-[YOLOv9](https://github.com/WongKinYiu/yolov9) models are supported, but not included by default.
+YOLOv3, YOLOv4, YOLOv7, and [YOLOv9](https://github.com/WongKinYiu/yolov9) models are supported, but not included by default.
:::tip
-The YOLOv9 detector has been designed to support YOLOv9 models, but may support other YOLO model architectures as well.
+The YOLO detector has been designed to support YOLOv3, YOLOv4, YOLOv7, and YOLOv9 models, but may support other YOLO model architectures as well.
:::
@@ -671,12 +671,12 @@ detectors:
type: onnx
model:
- model_type: yolov9
- width: 640 # <--- should match the imgsize set during model export
- height: 640 # <--- should match the imgsize set during model export
+ model_type: yolo-generic
+ width: 320 # <--- should match the imgsize set during model export
+ height: 320 # <--- should match the imgsize set during model export
input_tensor: nchw
input_dtype: float
- path: /config/model_cache/yolov9-t.onnx
+ path: /config/model_cache/yolo.onnx
labelmap_path: /labelmap/coco-80.txt
```
@@ -684,7 +684,7 @@ Note that the labelmap uses a subset of the complete COCO label set that has onl
#### RF-DETR
-[RF-DETR](https://github.com/roboflow/rf-detr) is a DETR based model. The ONNX exported models are supported, but not included by default. See [the models section](#downloading-rf-detr-model) for more informatoin on downloading the RF-DETR model for use in Frigate.
+[RF-DETR](https://github.com/roboflow/rf-detr) is a DETR based model. The ONNX exported models are supported, but not included by default. See [the models section](#downloading-rf-detr-model) for more information on downloading the RF-DETR model for use in Frigate.
After placing the downloaded onnx model in your `config/model_cache` folder, you can use the following configuration:
@@ -959,3 +959,27 @@ The pre-trained YOLO-NAS weights from DeciAI are subject to their license and ca
:::
The input image size in this notebook is set to 320x320. This results in lower CPU usage and faster inference times without impacting performance in most cases due to the way Frigate crops video frames to areas of interest before running detection. The notebook and config can be updated to 640x640 if desired.
+
+### Downloading YOLO Models
+
+#### YOLOv3, YOLOv4, and YOLOv7
+
+To export as ONNX:
+
+```sh
+git clone https://github.com/NateMeyer/tensorrt_demos
+cd tensorrt_demos/yolo
+./download_yolo.sh
+python3 yolo_to_onnx.py -m yolov7-320
+```
+
+#### YOLOv9
+
+YOLOv9 models can be exported using the below code or they [can be downloaded from hugging face](https://huggingface.co/Xenova/yolov9-onnx/tree/main)
+
+```sh
+git clone https://github.com/WongKinYiu/yolov9
+cd yolov9
+wget -O yolov9-t.pt "https://github.com/WongKinYiu/yolov9/releases/download/v0.1/yolov9-t-converted.pt"
+python3 export.py --weights ./yolov9-t-converted.pt --imgsz 320 --simplify
+```
diff --git a/frigate/app.py b/frigate/app.py
index f433fd50f..683ff7ab5 100644
--- a/frigate/app.py
+++ b/frigate/app.py
@@ -55,7 +55,7 @@ from frigate.models import (
Timeline,
User,
)
-from frigate.object_detection import ObjectDetectProcess
+from frigate.object_detection.base import ObjectDetectProcess
from frigate.output.output import output_frames
from frigate.ptz.autotrack import PtzAutoTrackerThread
from frigate.ptz.onvif import OnvifController
diff --git a/frigate/detectors/detector_config.py b/frigate/detectors/detector_config.py
index 1a4f1ad1a..228574543 100644
--- a/frigate/detectors/detector_config.py
+++ b/frigate/detectors/detector_config.py
@@ -25,6 +25,8 @@ class PixelFormatEnum(str, Enum):
class InputTensorEnum(str, Enum):
nchw = "nchw"
nhwc = "nhwc"
+ hwnc = "hwnc"
+ hwcn = "hwcn"
class InputDTypeEnum(str, Enum):
diff --git a/frigate/detectors/plugins/hailo8l.py b/frigate/detectors/plugins/hailo8l.py
index ad86ca03d..ffadf0fdb 100755
--- a/frigate/detectors/plugins/hailo8l.py
+++ b/frigate/detectors/plugins/hailo8l.py
@@ -1,6 +1,5 @@
import logging
import os
-import queue
import subprocess
import threading
import urllib.request
@@ -28,37 +27,11 @@ from frigate.detectors.detection_api import DetectionApi
from frigate.detectors.detector_config import (
BaseDetectorConfig,
)
+from frigate.object_detection.util import RequestStore, ResponseStore
logger = logging.getLogger(__name__)
-# ----------------- ResponseStore Class ----------------- #
-class ResponseStore:
- """
- A thread-safe hash-based response store that maps request IDs
- to their results. Threads can wait on the condition variable until
- their request's result appears.
- """
-
- def __init__(self):
- self.responses = {} # Maps request_id -> (original_input, infer_results)
- self.lock = threading.Lock()
- self.cond = threading.Condition(self.lock)
-
- def put(self, request_id, response):
- with self.cond:
- self.responses[request_id] = response
- self.cond.notify_all()
-
- def get(self, request_id, timeout=None):
- with self.cond:
- if not self.cond.wait_for(
- lambda: request_id in self.responses, timeout=timeout
- ):
- raise TimeoutError(f"Timeout waiting for response {request_id}")
- return self.responses.pop(request_id)
-
-
# ----------------- Utility Functions ----------------- #
@@ -122,14 +95,14 @@ class HailoAsyncInference:
def __init__(
self,
hef_path: str,
- input_queue: queue.Queue,
+ input_store: RequestStore,
output_store: ResponseStore,
batch_size: int = 1,
input_type: Optional[str] = None,
output_type: Optional[Dict[str, str]] = None,
send_original_frame: bool = False,
) -> None:
- self.input_queue = input_queue
+ self.input_store = input_store
self.output_store = output_store
params = VDevice.create_params()
@@ -204,9 +177,11 @@ class HailoAsyncInference:
def run(self) -> None:
with self.infer_model.configure() as configured_infer_model:
while True:
- batch_data = self.input_queue.get()
+ batch_data = self.input_store.get()
+
if batch_data is None:
break
+
request_id, frame_data = batch_data
preprocessed_batch = [frame_data]
request_ids = [request_id]
@@ -274,16 +249,14 @@ class HailoDetector(DetectionApi):
self.working_model_path = self.check_and_prepare()
self.batch_size = 1
- self.input_queue = queue.Queue()
+ self.input_store = RequestStore()
self.response_store = ResponseStore()
- self.request_counter = 0
- self.request_counter_lock = threading.Lock()
try:
logger.debug(f"[INIT] Loading HEF model from {self.working_model_path}")
self.inference_engine = HailoAsyncInference(
self.working_model_path,
- self.input_queue,
+ self.input_store,
self.response_store,
self.batch_size,
)
@@ -364,26 +337,16 @@ class HailoDetector(DetectionApi):
raise FileNotFoundError(f"Model file not found at: {self.model_path}")
return cached_model_path
- def _get_request_id(self) -> int:
- with self.request_counter_lock:
- request_id = self.request_counter
- self.request_counter += 1
- if self.request_counter > 1000000:
- self.request_counter = 0
- return request_id
-
def detect_raw(self, tensor_input):
- request_id = self._get_request_id()
-
tensor_input = self.preprocess(tensor_input)
+
if isinstance(tensor_input, np.ndarray) and len(tensor_input.shape) == 3:
tensor_input = np.expand_dims(tensor_input, axis=0)
- self.input_queue.put((request_id, tensor_input))
+ request_id = self.input_store.put(tensor_input)
+
try:
- original_input, infer_results = self.response_store.get(
- request_id, timeout=10.0
- )
+ _, infer_results = self.response_store.get(request_id, timeout=10.0)
except TimeoutError:
logger.error(
f"Timeout waiting for inference results for request {request_id}"
diff --git a/frigate/detectors/plugins/onnx.py b/frigate/detectors/plugins/onnx.py
index a10447b48..aef6e909b 100644
--- a/frigate/detectors/plugins/onnx.py
+++ b/frigate/detectors/plugins/onnx.py
@@ -13,7 +13,7 @@ from frigate.util.model import (
get_ort_providers,
post_process_dfine,
post_process_rfdetr,
- post_process_yolov9,
+ post_process_yolo,
)
logger = logging.getLogger(__name__)
@@ -97,12 +97,8 @@ class ONNXDetector(DetectionApi):
x_max / self.w,
]
return detections
- elif (
- self.onnx_model_type == ModelTypeEnum.yolov9
- or self.onnx_model_type == ModelTypeEnum.yologeneric
- ):
- predictions: np.ndarray = tensor_output[0]
- return post_process_yolov9(predictions, self.w, self.h)
+ elif self.onnx_model_type == ModelTypeEnum.yologeneric:
+ return post_process_yolo(tensor_output, self.w, self.h)
else:
raise Exception(
f"{self.onnx_model_type} is currently not supported for onnx. See the docs for more info on supported models."
diff --git a/frigate/detectors/plugins/openvino.py b/frigate/detectors/plugins/openvino.py
index d90352772..9c7ed5248 100644
--- a/frigate/detectors/plugins/openvino.py
+++ b/frigate/detectors/plugins/openvino.py
@@ -13,7 +13,7 @@ from frigate.detectors.detector_config import BaseDetectorConfig, ModelTypeEnum
from frigate.util.model import (
post_process_dfine,
post_process_rfdetr,
- post_process_yolov9,
+ post_process_yolo,
)
logger = logging.getLogger(__name__)
@@ -33,7 +33,6 @@ class OvDetector(DetectionApi):
ModelTypeEnum.rfdetr,
ModelTypeEnum.ssd,
ModelTypeEnum.yolonas,
- ModelTypeEnum.yolov9,
ModelTypeEnum.yologeneric,
ModelTypeEnum.yolox,
]
@@ -232,12 +231,13 @@ class OvDetector(DetectionApi):
x_max / self.w,
]
return detections
- elif (
- self.ov_model_type == ModelTypeEnum.yolov9
- or self.ov_model_type == ModelTypeEnum.yologeneric
- ):
- out_tensor = infer_request.get_output_tensor(0).data
- return post_process_yolov9(out_tensor, self.w, self.h)
+ elif self.ov_model_type == ModelTypeEnum.yologeneric:
+ out_tensor = []
+
+ for item in infer_request.output_tensors:
+ out_tensor.append(item.data)
+
+ return post_process_yolo(out_tensor, self.w, self.h)
elif self.ov_model_type == ModelTypeEnum.yolox:
out_tensor = infer_request.get_output_tensor()
# [x, y, h, w, box_score, class_no_1, ..., class_no_80],
diff --git a/frigate/events/audio.py b/frigate/events/audio.py
index adf45431e..024739366 100644
--- a/frigate/events/audio.py
+++ b/frigate/events/audio.py
@@ -29,7 +29,7 @@ from frigate.const import (
)
from frigate.ffmpeg_presets import parse_preset_input
from frigate.log import LogPipe
-from frigate.object_detection import load_labels
+from frigate.object_detection.base import load_labels
from frigate.util.builtin import get_ffmpeg_arg_list
from frigate.video import start_or_restart_ffmpeg, stop_ffmpeg
diff --git a/frigate/object_detection.py b/frigate/object_detection/base.py
similarity index 97%
rename from frigate/object_detection.py
rename to frigate/object_detection/base.py
index 99b10b65a..16c320c1f 100644
--- a/frigate/object_detection.py
+++ b/frigate/object_detection/base.py
@@ -16,12 +16,13 @@ from frigate.detectors import create_detector
from frigate.detectors.detector_config import (
BaseDetectorConfig,
InputDTypeEnum,
- InputTensorEnum,
)
from frigate.util.builtin import EventsPerSecond, load_labels
from frigate.util.image import SharedMemoryFrameManager, UntrackedSharedMemory
from frigate.util.services import listen
+from .util import tensor_transform
+
logger = logging.getLogger(__name__)
@@ -31,14 +32,6 @@ class ObjectDetector(ABC):
pass
-def tensor_transform(desired_shape: InputTensorEnum):
- # Currently this function only supports BHWC permutations
- if desired_shape == InputTensorEnum.nhwc:
- return None
- elif desired_shape == InputTensorEnum.nchw:
- return (0, 3, 1, 2)
-
-
class LocalObjectDetector(ObjectDetector):
def __init__(
self,
diff --git a/frigate/object_detection/util.py b/frigate/object_detection/util.py
new file mode 100644
index 000000000..a4cab9f8e
--- /dev/null
+++ b/frigate/object_detection/util.py
@@ -0,0 +1,77 @@
+"""Object detection utilities."""
+
+import queue
+import threading
+
+from numpy import ndarray
+
+from frigate.detectors.detector_config import InputTensorEnum
+
+
+class RequestStore:
+ """
+ A thread-safe hash-based response store that handles creating requests.
+ """
+
+ def __init__(self):
+ self.request_counter = 0
+ self.request_counter_lock = threading.Lock()
+ self.input_queue = queue.Queue()
+
+ def __get_request_id(self) -> int:
+ with self.request_counter_lock:
+ request_id = self.request_counter
+ self.request_counter += 1
+ if self.request_counter > 1000000:
+ self.request_counter = 0
+ return request_id
+
+ def put(self, tensor_input: ndarray) -> int:
+ request_id = self.__get_request_id()
+ self.input_queue.get((request_id, tensor_input))
+ return request_id
+
+ def get(self) -> tuple[int, ndarray] | None:
+ try:
+ return self.input_queue.get_nowait()
+ except Exception:
+ return None
+
+
+class ResponseStore:
+ """
+ A thread-safe hash-based response store that maps request IDs
+ to their results. Threads can wait on the condition variable until
+ their request's result appears.
+ """
+
+ def __init__(self):
+ self.responses = {} # Maps request_id -> (original_input, infer_results)
+ self.lock = threading.Lock()
+ self.cond = threading.Condition(self.lock)
+
+ def put(self, request_id: int, response: ndarray):
+ with self.cond:
+ self.responses[request_id] = response
+ self.cond.notify_all()
+
+ def get(self, request_id: int, timeout=None) -> ndarray:
+ with self.cond:
+ if not self.cond.wait_for(
+ lambda: request_id in self.responses, timeout=timeout
+ ):
+ raise TimeoutError(f"Timeout waiting for response {request_id}")
+
+ return self.responses.pop(request_id)
+
+
+def tensor_transform(desired_shape: InputTensorEnum):
+ # Currently this function only supports BHWC permutations
+ if desired_shape == InputTensorEnum.nhwc:
+ return None
+ elif desired_shape == InputTensorEnum.nchw:
+ return (0, 3, 1, 2)
+ elif desired_shape == InputTensorEnum.hwnc:
+ return (1, 2, 0, 3)
+ elif desired_shape == InputTensorEnum.hwcn:
+ return (1, 2, 3, 0)
diff --git a/frigate/stats/util.py b/frigate/stats/util.py
index 2b33a6173..7bdf92bf2 100644
--- a/frigate/stats/util.py
+++ b/frigate/stats/util.py
@@ -15,7 +15,7 @@ from frigate.camera import CameraMetrics
from frigate.config import FrigateConfig
from frigate.const import CACHE_DIR, CLIPS_DIR, RECORD_DIR
from frigate.data_processing.types import DataProcessorMetrics
-from frigate.object_detection import ObjectDetectProcess
+from frigate.object_detection.base import ObjectDetectProcess
from frigate.types import StatsTrackingTypes
from frigate.util.services import (
get_amd_gpu_stats,
diff --git a/frigate/test/test_object_detector.py b/frigate/test/test_object_detector.py
index 40a9fac14..dc15b2351 100644
--- a/frigate/test/test_object_detector.py
+++ b/frigate/test/test_object_detector.py
@@ -5,7 +5,7 @@ import numpy as np
from pydantic import parse_obj_as
import frigate.detectors as detectors
-import frigate.object_detection
+import frigate.object_detection.base
from frigate.config import DetectorConfig, ModelConfig
from frigate.detectors import DetectorTypeEnum
from frigate.detectors.detector_config import InputTensorEnum
@@ -23,7 +23,7 @@ class TestLocalObjectDetector(unittest.TestCase):
DetectorConfig, ({"type": det_type, "model": {}})
)
test_cfg.model.path = "/test/modelpath"
- test_obj = frigate.object_detection.LocalObjectDetector(
+ test_obj = frigate.object_detection.base.LocalObjectDetector(
detector_config=test_cfg
)
@@ -43,7 +43,7 @@ class TestLocalObjectDetector(unittest.TestCase):
TEST_DATA = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
TEST_DETECT_RESULT = np.ndarray([1, 2, 4, 8, 16, 32])
- test_obj_detect = frigate.object_detection.LocalObjectDetector(
+ test_obj_detect = frigate.object_detection.base.LocalObjectDetector(
detector_config=parse_obj_as(DetectorConfig, {"type": "cpu", "model": {}})
)
@@ -70,7 +70,7 @@ class TestLocalObjectDetector(unittest.TestCase):
test_cfg = parse_obj_as(DetectorConfig, {"type": "cpu", "model": {}})
test_cfg.model.input_tensor = InputTensorEnum.nchw
- test_obj_detect = frigate.object_detection.LocalObjectDetector(
+ test_obj_detect = frigate.object_detection.base.LocalObjectDetector(
detector_config=test_cfg
)
@@ -91,7 +91,7 @@ class TestLocalObjectDetector(unittest.TestCase):
"frigate.detectors.api_types",
{det_type: Mock() for det_type in DetectorTypeEnum},
)
- @patch("frigate.object_detection.load_labels")
+ @patch("frigate.object_detection.base.load_labels")
def test_detect_given_tensor_input_should_return_lfiltered_detections(
self, mock_load_labels
):
@@ -118,7 +118,7 @@ class TestLocalObjectDetector(unittest.TestCase):
test_cfg = parse_obj_as(DetectorConfig, {"type": "cpu", "model": {}})
test_cfg.model = ModelConfig()
- test_obj_detect = frigate.object_detection.LocalObjectDetector(
+ test_obj_detect = frigate.object_detection.base.LocalObjectDetector(
detector_config=test_cfg,
labels=TEST_LABEL_FILE,
)
diff --git a/frigate/types.py b/frigate/types.py
index 4d3fe96b3..2422c5551 100644
--- a/frigate/types.py
+++ b/frigate/types.py
@@ -3,7 +3,7 @@ from typing import TypedDict
from frigate.camera import CameraMetrics
from frigate.data_processing.types import DataProcessorMetrics
-from frigate.object_detection import ObjectDetectProcess
+from frigate.object_detection.base import ObjectDetectProcess
class StatsTrackingTypes(TypedDict):
diff --git a/frigate/util/model.py b/frigate/util/model.py
index 19b3b1bf5..a4ff9bd75 100644
--- a/frigate/util/model.py
+++ b/frigate/util/model.py
@@ -99,7 +99,94 @@ def post_process_rfdetr(tensor_output: list[np.ndarray, np.ndarray]) -> np.ndarr
return detections
-def post_process_yolov9(predictions: np.ndarray, width, height) -> np.ndarray:
+def __post_process_multipart_yolo(
+ output_list,
+ width,
+ height,
+):
+ anchors = [
+ [(12, 16), (19, 36), (40, 28)],
+ [(36, 75), (76, 55), (72, 146)],
+ [(142, 110), (192, 243), (459, 401)],
+ ]
+
+ stride_map = {0: 8, 1: 16, 2: 32}
+
+ all_boxes = []
+ all_scores = []
+ all_class_ids = []
+
+ for i, output in enumerate(output_list):
+ bs, _, ny, nx = output.shape
+ stride = stride_map[i]
+ anchor_set = anchors[i]
+
+ num_anchors = len(anchor_set)
+ output = output.reshape(bs, num_anchors, 85, ny, nx)
+ output = output.transpose(0, 1, 3, 4, 2)
+ output = output[0]
+
+ for a_idx, (anchor_w, anchor_h) in enumerate(anchor_set):
+ for y in range(ny):
+ for x in range(nx):
+ pred = output[a_idx, y, x]
+ class_probs = pred[5:]
+ class_id = np.argmax(class_probs)
+ class_conf = class_probs[class_id]
+ conf = class_conf * pred[4]
+
+ if conf < 0.4:
+ continue
+
+ dx = pred[0]
+ dy = pred[1]
+ dw = pred[2]
+ dh = pred[3]
+
+ bx = ((dx * 2.0 - 0.5) + x) * stride
+ by = ((dy * 2.0 - 0.5) + y) * stride
+ bw = ((dw * 2.0) ** 2) * anchor_w
+ bh = ((dh * 2.0) ** 2) * anchor_h
+
+ x1 = max(0, bx - bw / 2) / width
+ y1 = max(0, by - bh / 2) / height
+ x2 = min(width, bx + bw / 2) / width
+ y2 = min(height, by + bh / 2) / height
+
+ all_boxes.append([x1, y1, x2, y2])
+ all_scores.append(conf)
+ all_class_ids.append(class_id)
+
+ formatted_boxes = [
+ [
+ int(x1 * width),
+ int(y1 * height),
+ int((x2 - x1) * width),
+ int((y2 - y1) * height),
+ ]
+ for x1, y1, x2, y2 in all_boxes
+ ]
+
+ indices = cv2.dnn.NMSBoxes(
+ bboxes=formatted_boxes,
+ scores=all_scores,
+ score_threshold=0.4,
+ nms_threshold=0.4,
+ )
+
+ results = np.zeros((20, 6), np.float32)
+
+ if len(indices) > 0:
+ for i, idx in enumerate(indices.flatten()[:20]):
+ class_id = all_class_ids[idx]
+ conf = all_scores[idx]
+ x1, y1, x2, y2 = all_boxes[idx]
+ results[i] = [class_id, conf, y1, x1, y2, x2]
+
+ return np.array(results, dtype=np.float32)
+
+
+def __post_process_nms_yolo(predictions: np.ndarray, width, height) -> np.ndarray:
predictions = np.squeeze(predictions).T
scores = np.max(predictions[:, 4:], axis=1)
predictions = predictions[scores > 0.4, :]
@@ -131,6 +218,13 @@ def post_process_yolov9(predictions: np.ndarray, width, height) -> np.ndarray:
return detections
+def post_process_yolo(output: list[np.ndarray], width: int, height: int) -> np.ndarray:
+ if len(output) > 1:
+ return __post_process_multipart_yolo(output, width, height)
+ else:
+ return __post_process_nms_yolo(output[0], width, height)
+
+
### ONNX Utilities
diff --git a/frigate/video.py b/frigate/video.py
index b14f8567c..d07a72b9a 100755
--- a/frigate/video.py
+++ b/frigate/video.py
@@ -24,7 +24,7 @@ from frigate.const import (
from frigate.log import LogPipe
from frigate.motion import MotionDetector
from frigate.motion.improved_motion import ImprovedMotionDetector
-from frigate.object_detection import RemoteObjectDetector
+from frigate.object_detection.base import RemoteObjectDetector
from frigate.ptz.autotrack import ptz_moving_at_frame_time
from frigate.track import ObjectTracker
from frigate.track.norfair_tracker import NorfairTracker
diff --git a/frigate/watchdog.py b/frigate/watchdog.py
index d7cdec796..4c49de1a0 100644
--- a/frigate/watchdog.py
+++ b/frigate/watchdog.py
@@ -4,7 +4,7 @@ import threading
import time
from multiprocessing.synchronize import Event as MpEvent
-from frigate.object_detection import ObjectDetectProcess
+from frigate.object_detection.base import ObjectDetectProcess
from frigate.util.services import restart_frigate
logger = logging.getLogger(__name__)
diff --git a/process_clip.py b/process_clip.py
index 46bbc2c91..6f474de68 100644
--- a/process_clip.py
+++ b/process_clip.py
@@ -14,7 +14,7 @@ sys.path.append("/workspace/frigate")
from frigate.config import FrigateConfig # noqa: E402
from frigate.motion import MotionDetector # noqa: E402
-from frigate.object_detection import LocalObjectDetector # noqa: E402
+from frigate.object_detection.base import LocalObjectDetector # noqa: E402
from frigate.track.centroid_tracker import CentroidTracker # noqa: E402
from frigate.track.object_processing import CameraState # noqa: E402
from frigate.util import ( # noqa: E402
diff --git a/web/public/locales/ab/audio.json b/web/public/locales/ab/audio.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ab/audio.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ab/common.json b/web/public/locales/ab/common.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ab/common.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ab/components/auth.json b/web/public/locales/ab/components/auth.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ab/components/auth.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ab/components/camera.json b/web/public/locales/ab/components/camera.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ab/components/camera.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ab/components/dialog.json b/web/public/locales/ab/components/dialog.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ab/components/dialog.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ab/components/filter.json b/web/public/locales/ab/components/filter.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ab/components/filter.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ab/components/icons.json b/web/public/locales/ab/components/icons.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ab/components/icons.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ab/components/input.json b/web/public/locales/ab/components/input.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ab/components/input.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ab/components/player.json b/web/public/locales/ab/components/player.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ab/components/player.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ab/objects.json b/web/public/locales/ab/objects.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ab/objects.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ab/views/configEditor.json b/web/public/locales/ab/views/configEditor.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ab/views/configEditor.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ab/views/events.json b/web/public/locales/ab/views/events.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ab/views/events.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ab/views/explore.json b/web/public/locales/ab/views/explore.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ab/views/explore.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ab/views/exports.json b/web/public/locales/ab/views/exports.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ab/views/exports.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ab/views/faceLibrary.json b/web/public/locales/ab/views/faceLibrary.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ab/views/faceLibrary.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ab/views/live.json b/web/public/locales/ab/views/live.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ab/views/live.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ab/views/recording.json b/web/public/locales/ab/views/recording.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ab/views/recording.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ab/views/search.json b/web/public/locales/ab/views/search.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ab/views/search.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ab/views/settings.json b/web/public/locales/ab/views/settings.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ab/views/settings.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/ab/views/system.json b/web/public/locales/ab/views/system.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/ab/views/system.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/cs/audio.json b/web/public/locales/cs/audio.json
index a22a43ef0..b98f37ff9 100644
--- a/web/public/locales/cs/audio.json
+++ b/web/public/locales/cs/audio.json
@@ -5,5 +5,307 @@
"babbling": "Blábolení",
"bellow": "Řev",
"whoop": "Výskání",
- "whispering": "Šeptá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": "Sitar",
+ "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": "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": "",
+ "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": "Zbíječka",
+ "sawing": "Řezání",
+ "power_tool": "Elektrické nářadí",
+ "drill": "Vrtačka",
+ "explosion": "Výbuch",
+ "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"
}
diff --git a/web/public/locales/cs/components/auth.json b/web/public/locales/cs/components/auth.json
index 71dd3e2df..a3dd01b32 100644
--- a/web/public/locales/cs/components/auth.json
+++ b/web/public/locales/cs/components/auth.json
@@ -1,5 +1,15 @@
{
"form": {
- "user": "Uživatelské jméno"
+ "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/filter.json b/web/public/locales/cs/components/filter.json
index 0967ef424..c08a98264 100644
--- a/web/public/locales/cs/components/filter.json
+++ b/web/public/locales/cs/components/filter.json
@@ -1 +1,3 @@
-{}
+{
+ "filter": "Filtrovat"
+}
diff --git a/web/public/locales/cs/components/icons.json b/web/public/locales/cs/components/icons.json
index 0967ef424..f4efc4ce0 100644
--- a/web/public/locales/cs/components/icons.json
+++ b/web/public/locales/cs/components/icons.json
@@ -1 +1,8 @@
-{}
+{
+ "iconPicker": {
+ "selectIcon": "Zvolte ikonu",
+ "search": {
+ "placeholder": "Hledejte ikonu...."
+ }
+ }
+}
diff --git a/web/public/locales/cs/components/input.json b/web/public/locales/cs/components/input.json
index 0967ef424..19574eb42 100644
--- a/web/public/locales/cs/components/input.json
+++ b/web/public/locales/cs/components/input.json
@@ -1 +1,10 @@
-{}
+{
+ "button": {
+ "downloadVideo": {
+ "label": "Stáhnout video",
+ "toast": {
+ "success": "Vaše video se stahuje."
+ }
+ }
+ }
+}
diff --git a/web/public/locales/cs/components/player.json b/web/public/locales/cs/components/player.json
index 0967ef424..8e432193d 100644
--- a/web/public/locales/cs/components/player.json
+++ b/web/public/locales/cs/components/player.json
@@ -1 +1,51 @@
-{}
+{
+ "noRecordingsFoundForThisTime": "V tomto období nebyly nalezeny žádné záznamy",
+ "noPreviewFound": "Náhled nenalezen",
+ "noPreviewFoundFor": "Náhled nenalezen pro {{cameraName}}",
+ "submitFrigatePlus": {
+ "title": "Odeslat tento snímek do služby Frigate+?",
+ "submit": "Odeslat"
+ },
+ "livePlayerRequiredIOSVersion": "Pro tento typ živého přenosu je vyžadován systém iOS 17.1 nebo novější.",
+ "streamOffline": {
+ "title": "Přenos je offline",
+ "desc": "Žádné snímky nebyly zaznamenány na {{cameraName}} detect
př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
index afc133807..4bdb6c916 100644
--- a/web/public/locales/cs/objects.json
+++ b/web/public/locales/cs/objects.json
@@ -1,3 +1,28 @@
{
- "person": "Osoba"
+ "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"
}
diff --git a/web/public/locales/cs/views/configEditor.json b/web/public/locales/cs/views/configEditor.json
index 0967ef424..8bc390802 100644
--- a/web/public/locales/cs/views/configEditor.json
+++ b/web/public/locales/cs/views/configEditor.json
@@ -1 +1,15 @@
-{}
+{
+ "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"
+ }
+ }
+}
diff --git a/web/public/locales/cs/views/events.json b/web/public/locales/cs/views/events.json
index 0967ef424..7345b83fa 100644
--- a/web/public/locales/cs/views/events.json
+++ b/web/public/locales/cs/views/events.json
@@ -1 +1,35 @@
-{}
+{
+ "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": "Kontrola - 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"
+ }
+}
diff --git a/web/public/locales/cs/views/exports.json b/web/public/locales/cs/views/exports.json
index 0967ef424..d27bf05e9 100644
--- a/web/public/locales/cs/views/exports.json
+++ b/web/public/locales/cs/views/exports.json
@@ -1 +1,17 @@
-{}
+{
+ "search": "Hledat",
+ "documentTitle": "Exportovat - Frigate",
+ "noExports": "Žádné exporty nenalezeny",
+ "deleteExport": "Smazat export",
+ "deleteExport.desc": "Opravdu chcete smazat {{exportName}}?",
+ "editExport": {
+ "title": "Přejmenovat export",
+ "desc": "Zadejte nové jméno pro tento export.",
+ "saveExport": "Uložit export"
+ },
+ "toast": {
+ "error": {
+ "renameExportFailed": "Nepodařilo se přejmenovat export: {{errorMessage}}"
+ }
+ }
+}
diff --git a/web/public/locales/cs/views/recording.json b/web/public/locales/cs/views/recording.json
index 0967ef424..80fa1f193 100644
--- a/web/public/locales/cs/views/recording.json
+++ b/web/public/locales/cs/views/recording.json
@@ -1 +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
index 0967ef424..500058df8 100644
--- a/web/public/locales/cs/views/search.json
+++ b/web/public/locales/cs/views/search.json
@@ -1 +1,3 @@
-{}
+{
+ "search": "Hledat"
+}
diff --git a/web/public/locales/de/audio.json b/web/public/locales/de/audio.json
index f3d70f6b4..8bb6c3140 100644
--- a/web/public/locales/de/audio.json
+++ b/web/public/locales/de/audio.json
@@ -1,5 +1,5 @@
{
- "speech": "Rede",
+ "speech": "Sprache",
"babbling": "Plappern",
"laughter": "Gelächter",
"bellow": "Gebrüll",
@@ -102,7 +102,7 @@
"snake": "Schlange",
"hammond_organ": "Hammondorgel",
"synthesizer": "Synthesizer",
- "sampler": "Sampler",
+ "sampler": "Probennehmer",
"drum_kit": "Schlagzeug",
"drum_machine": "Trommelsynthesizer",
"snare_drum": "Kleine Trommel",
@@ -262,7 +262,7 @@
"sailboat": "Segelboot",
"ship": "Schiff",
"motor_vehicle": "Kraftfahrzeug",
- "toot": "Hupen",
+ "toot": "tuten",
"car_alarm": "Autoalarm",
"power_windows": "Elektrische Fensterheber",
"tire_squeal": "Reifenquietschen",
diff --git a/web/public/locales/de/common.json b/web/public/locales/de/common.json
index 46ef51fd3..3fb9ba28a 100644
--- a/web/public/locales/de/common.json
+++ b/web/public/locales/de/common.json
@@ -10,13 +10,17 @@
"5minutes": "5 Minuten",
"12hours": "12 Stunden",
"24hours": "24 Stunden",
- "month": "{{time}} Monate",
+ "month_one": "{{time}} Monat",
+ "month_other": "{{time}} Monate",
"d": "{{time}} Tag",
- "day": "{{time}} Tage",
+ "day_one": "{{time}} Tag",
+ "day_other": "{{time}} Tage",
"m": "{{time}} Minute",
- "minute": "{{time}} Minuten",
+ "minute_one": "{{time}} Minute",
+ "minute_other": "{{time}} Minuten",
"s": "{{time}} Sekunde",
- "second": "{{time}} Sekunden",
+ "second_one": "{{time}} Sekunde",
+ "second_other": "{{time}} Sekunden",
"formattedTimestamp2": {
"24hour": "%d %b %H:%M:%S",
"12hour": "%d-%m %H:%M:%S"
@@ -25,8 +29,10 @@
"10minutes": "10 Minuten",
"thisMonth": "Dieser Monat",
"yr": "{{time}}Jahr",
- "year": "{{time}}Jahre",
- "hour": "{{time}} Stunden",
+ "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",
@@ -54,14 +60,14 @@
},
"button": {
"save": "Speichern",
- "delete": "Löschen",
+ "delete": "Entfernen",
"apply": "Anwenden",
"enabled": "Aktiviert",
"enable": "Aktivieren",
"disabled": "deaktiviert",
"disable": "deaktivieren",
"saving": "Speichere...",
- "close": "Schliessen",
+ "close": "Schließen",
"back": "Zurück",
"history": "Historie",
"cameraAudio": "Kamera Ton",
@@ -86,7 +92,7 @@
"cancel": "Abbrechen",
"pictureInPicture": "Bild in Bild",
"on": "AN",
- "suspended": "ausgesetzt",
+ "suspended": "Pausierte",
"unsuspended": "fortsetzen"
},
"label": {
@@ -100,7 +106,33 @@
"label": "Sprache der Systemeinstellungen verwenden"
},
"en": "Englisch",
- "zhCN": "简体中文 (Vereinfachtes Chinesisch)"
+ "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"
},
"appearance": "Erscheinung",
"theme": {
@@ -129,7 +161,7 @@
"review": "Überprüfen",
"restart": "Frigate neu starten",
"darkMode": {
- "light": "Licht",
+ "light": "Hell",
"label": "Dunkler Modus",
"dark": "Dunkel",
"withSystem": {
diff --git a/web/public/locales/de/components/dialog.json b/web/public/locales/de/components/dialog.json
index 04b88b74a..a21ac8d4d 100644
--- a/web/public/locales/de/components/dialog.json
+++ b/web/public/locales/de/components/dialog.json
@@ -1,11 +1,12 @@
{
"restart": {
- "title": "Möchten Sie Frigate wirklich neu starten?",
+ "title": "Sind Sie sicher, dass Sie Frigate neustarten wollen?",
"restarting": {
"title": "Frigate startet neu",
- "content": "Diese Seite wird in {{countdown}} Sekunde(n) aktualisiert."
+ "content": "Diese Seite wird in {{countdown}} Sekunde(n) aktualisiert.",
+ "button": "Neuladen erzwingen"
},
- "button": "Neustart"
+ "button": "Neustarten"
},
"explore": {
"plus": {
@@ -13,12 +14,100 @@
"true": {
"label": "Bestätigen Sie das Label für Frigate Plus",
"true_one": "Das ist ein/eine {{label}}",
- "true_other": ""
+ "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"
}
},
"submitToPlus": {
- "label": "An Frigate+ übermitteln"
+ "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?
Halte Shift-Taste gedrückt, um diesen Dialog in Zukunft zu umgehen."
+ }
+ },
+ "button": {
+ "export": "Exportieren",
+ "markAsReviewed": "Als geprüft markieren",
+ "deleteNow": "Jetzt löschen"
}
}
}
diff --git a/web/public/locales/de/components/filter.json b/web/public/locales/de/components/filter.json
index 306660fe8..f5dbf35f5 100644
--- a/web/public/locales/de/components/filter.json
+++ b/web/public/locales/de/components/filter.json
@@ -1,3 +1,104 @@
{
- "filter": "Filter"
+ "filter": "Filter",
+ "labels": {
+ "all": {
+ "short": "Labels",
+ "title": "Alle Labels"
+ },
+ "label": "Labels",
+ "count_one": "{{count}} Label",
+ "count_other": "{{count}} Labels"
+ },
+ "zones": {
+ "all": {
+ "title": "Alle Zonen",
+ "short": "Zonen"
+ },
+ "label": "Zonen"
+ },
+ "dates": {
+ "all": {
+ "title": "Alle Zeiträume",
+ "short": "Daten"
+ }
+ },
+ "reset": {
+ "label": "Filter auf Standardwerte zurücksetzen"
+ },
+ "more": "Mehr Filter",
+ "timeRange": "Zeitraum",
+ "subLabels": {
+ "all": "Alle Unterkategorien",
+ "label": "Unterkategorie"
+ },
+ "features": {
+ "label": "Eigenschaften",
+ "hasSnapshot": "Hat einen Schnappschuss",
+ "hasVideoClip": "Hat einen Video-Clip",
+ "submittedToFrigatePlus": {
+ "label": "Eingereicht bei Frigate+",
+ "tips": "Du musst zuerst nach deine erkannten Objekten, die einen Schnappschuss haben, filtern.
Erkante Objekte ohne Schnappschuss können nicht zu Frigate+ übermittelt werden."
+ }
+ },
+ "score": "Ergebnis",
+ "estimatedSpeed": "Geschätzte Geschwindigkeit ({{unit}})",
+ "sort": {
+ "label": "Sortieren",
+ "dateAsc": "Datum (Aufsteigend)",
+ "dateDesc": "Datum (Absteigend)",
+ "scoreAsc": "Objekt Wertung (Aufsteigend)",
+ "scoreDesc": "Objekt Wertung (Absteigend)",
+ "speedAsc": "Geschätzte Geschwindigkeit (Aufsteigend)",
+ "relevance": "Relevanz",
+ "speedDesc": "Geschätzte Geschwindigkeit (absteigend)"
+ },
+ "cameras": {
+ "all": {
+ "title": "Alle Kameras",
+ "short": "Kameras"
+ },
+ "label": "Kamera Filter"
+ },
+ "motion": {
+ "showMotionOnly": "Zeige nur Bewegung"
+ },
+ "review": {
+ "showReviewed": "Geprüfte anzeigen"
+ },
+ "explore": {
+ "settings": {
+ "defaultView": {
+ "title": "Standardansicht",
+ "desc": "Wenn keine Filter ausgewählt sind, wird eine Zusammenfassung der zuletzt verfolgten Objekte pro Kategorie oder ein ungefiltertes Raster angezeigt.",
+ "summary": "Zusammenfassung",
+ "unfilteredGrid": "Ungefiltertes Raster"
+ },
+ "title": "Einstellungen",
+ "gridColumns": {
+ "title": "Rasterspalten",
+ "desc": "Wähle die Anzahl der Spalten in der Rasteransicht."
+ },
+ "searchSource": {
+ "options": {
+ "description": "Beschreibung",
+ "thumbnailImage": "Vorschaubild"
+ },
+ "label": "Quelle der Suche",
+ "desc": "Wähle, ob die Miniaturansichten oder die Beschreibungen der erkannten Objekte durchsucht werden sollen."
+ }
+ },
+ "date": {
+ "selectDateBy": {
+ "label": "Wähle ein Datum zum Filtern"
+ }
+ }
+ },
+ "logSettings": {
+ "label": "Log-Ebene filtern",
+ "filterBySeverity": "Protokolle nach Schweregrad filtern",
+ "loading": {
+ "title": "Lade",
+ "desc": "Wenn das Protokollfenster nach unten gescrollt wird, werden neue Protokolle automatisch geladen, sobald sie hinzugefügt werden."
+ }
+ }
}
diff --git a/web/public/locales/de/views/explore.json b/web/public/locales/de/views/explore.json
index 4e34cea97..da1d0e6bc 100644
--- a/web/public/locales/de/views/explore.json
+++ b/web/public/locales/de/views/explore.json
@@ -3,7 +3,67 @@
"timestamp": "Zeitstempel",
"item": {
"title": "Item-Details begutachten",
- "desc": "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}}"
}
},
"documentTitle": "Erkunden - Frigate",
@@ -56,10 +116,14 @@
"annotationSettings": {
"offset": {
"documentation": "Lesen Sie die Dokumentation ",
- "label": "Anmerkungen Versatz"
+ "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 die Benachrichtigung zu 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."
},
"showAllZones": {
- "title": "Zeige alle Zonen"
+ "title": "Zeige alle Zonen",
+ "desc": "Immer Zonen auf Rahmen anzeigen, in die Objekte eingetreten sind."
},
"title": "Anmerkungseinstellungen"
},
@@ -68,12 +132,61 @@
"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."
},
"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.
Sind Sie sicher, dass Sie fortfahren möchten?"
+ }
+ },
+ "searchResult": {
+ "deleteTrackedObject": {
+ "toast": {
+ "success": "Verfolgtes Objekt erfolgreich gelöscht.",
+ "error": "Das verfolgte Objekt konnte nicht gelöscht werden: {{errorMessage}}"
+ }
+ }
+ },
+ "noTrackedObjects": "Keine verfolgten Objekte gefunden",
+ "fetchingTrackedObjectsFailed": "Fehler beim Abrufen von verfolgten Objekten: {{errorMessage}}",
+ "trackedObjectsCount_one": "{{count}} verfolgtes Objekt ",
+ "trackedObjectsCount_other": "{{count}} verfolgte Objekte "
}
diff --git a/web/public/locales/de/views/exports.json b/web/public/locales/de/views/exports.json
index 16ab12ee6..2fb729cc2 100644
--- a/web/public/locales/de/views/exports.json
+++ b/web/public/locales/de/views/exports.json
@@ -5,7 +5,7 @@
"desc": "Gib einen neuen Namen für diesen Export an.",
"saveExport": "Export speichern"
},
- "documentTitle": "Export - Frigate",
+ "documentTitle": "Exportieren - Frigate",
"deleteExport.desc": "Soll {{exportName}} wirklich gelöscht werden?",
"search": "Suche",
"noExports": "Keine Exporte gefunden",
diff --git a/web/public/locales/de/views/faceLibrary.json b/web/public/locales/de/views/faceLibrary.json
index f101c5630..117af0b3f 100644
--- a/web/public/locales/de/views/faceLibrary.json
+++ b/web/public/locales/de/views/faceLibrary.json
@@ -17,8 +17,55 @@
"createFaceLibrary": {
"title": "Kollektion erstellen",
"new": "Lege ein neues Gesicht an",
- "desc": "Erstelle eine neue Kollektion"
+ "desc": "Erstelle eine neue Kollektion",
+ "nextSteps": "Um eine solide Grundlage zu bilden:
-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/search.json b/web/public/locales/de/views/search.json
index 5aaf9d578..33cce4e8d 100644
--- a/web/public/locales/de/views/search.json
+++ b/web/public/locales/de/views/search.json
@@ -2,7 +2,7 @@
"savedSearches": "Gespeicherte Suchen",
"searchFor": "Suche nach {{inputValue}}",
"button": {
- "save": "Suche sichern",
+ "save": "Suche speichern",
"filterActive": "Filter aktiv",
"delete": "Gespeicherte Suche löschen",
"filterInformation": "Information filtern",
diff --git a/web/public/locales/de/views/settings.json b/web/public/locales/de/views/settings.json
index 0967ef424..2d1cd754d 100644
--- a/web/public/locales/de/views/settings.json
+++ b/web/public/locales/de/views/settings.json
@@ -1 +1,96 @@
-{}
+{
+ "documentTitle": {
+ "default": "Einstellungen - Frigate",
+ "authentication": "Authentifizierungseinstellungen",
+ "camera": "Kameraeinstellungen",
+ "masksAndZones": "Masken und Zonen bearbeiten",
+ "object": "Objekt Einstellungen - Frigate",
+ "general": "Allgemeine Einstellungen - Frigate",
+ "frigatePlus": "Frigate+ Einstellungen",
+ "classification": "Klassifizierungseinstellungen - Frigate",
+ "motionTuner": "Bewegungsanpassung – Frigate"
+ },
+ "menu": {
+ "ui": "Benutzeroberfläche",
+ "cameras": "Kameraeinstellungen",
+ "classification": "Klassifizierung",
+ "masksAndZones": "Maskierungen / Zonen",
+ "motionTuner": "Bewegungsempflindlichkeit einstellen",
+ "debug": "Fehlerbehebung",
+ "frigateplus": "Frigate+",
+ "users": "Benutzer",
+ "notifications": "Benachrichtigungen"
+ },
+ "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."
+ },
+ "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"
+ }
+ }
+}
diff --git a/web/public/locales/de/views/system.json b/web/public/locales/de/views/system.json
index 0967ef424..ac1e9e275 100644
--- a/web/public/locales/de/views/system.json
+++ b/web/public/locales/de/views/system.json
@@ -1 +1,101 @@
-{}
+{
+ "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"
+ },
+ "title": "Allgemein",
+ "detector": {
+ "title": "Detektoren",
+ "cpuUsage": "CPU-Auslastung des Detektors",
+ "memoryUsage": "Arbeitsspeichernutzung des Detektors",
+ "inferenceSpeed": "Detektoren Inferenzgeschwindigkeit"
+ },
+ "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"
+ },
+ "title": "Speicher",
+ "overview": "Übersicht"
+ },
+ "cameras": {
+ "info": {
+ "stream": "Stream {{idx}}"
+ }
+ }
+}
diff --git a/web/public/locales/en/views/explore.json b/web/public/locales/en/views/explore.json
index 7ba43d176..c75951f93 100644
--- a/web/public/locales/en/views/explore.json
+++ b/web/public/locales/en/views/explore.json
@@ -112,6 +112,9 @@
"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."
diff --git a/web/public/locales/es/common.json b/web/public/locales/es/common.json
index a2593de0d..e04ed3941 100644
--- a/web/public/locales/es/common.json
+++ b/web/public/locales/es/common.json
@@ -7,7 +7,9 @@
"12hour": "%b %-d %Y, %I:%M %p",
"24hour": "%b %-d %Y, %H:%M"
},
- "second": "{{time}} segundos",
+ "second_one": "{{time}} segundo",
+ "second_many": "{{time}} segundos",
+ "second_other": "{{time}} segundos",
"formattedTimestampOnlyMonthAndDay": "%b %-d",
"formattedTimestampExcludeSeconds": {
"24hour": "%b %-d, %H:%M",
@@ -17,7 +19,9 @@
"24hour": "%b %-d, %H:%M:%S",
"12hour": "%b %-d, %I:%M:%S %p"
},
- "day": "{{time}} días",
+ "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",
@@ -36,21 +40,29 @@
"12hours": "12 horas",
"24hours": "24 horas",
"pm": "pm",
- "year": "{{time}} años",
+ "year_one": "{{time}} año",
+ "year_many": "{{time}} años",
+ "year_other": "{{time}} años",
"mo": "{{time}}mes",
- "month": "{{time}} meses",
- "h": "{{time}}hora",
- "m": "{{time}}minuto",
- "minute": "{{time}} minutos",
- "s": "{{time}}segundo",
+ "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": "%m/%d %I:%M:%S%P",
"24hour": "%d %b %H:%M:%S"
},
"5minutes": "5 minutos",
"am": "am",
- "d": "{{time}}día",
- "hour": "{{time}} horas"
+ "d": "{{time}}d",
+ "hour_one": "{{time}} hora",
+ "hour_many": "{{time}} horas",
+ "hour_other": "{{time}} horas"
},
"menu": {
"settings": "Ajustes",
@@ -71,11 +83,37 @@
"configurationEditor": "Editor de configuración",
"languages": "Idiomas",
"language": {
- "en": "Inglés",
+ "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)"
},
"appearance": "Apariencia",
"darkMode": {
diff --git a/web/public/locales/es/components/filter.json b/web/public/locales/es/components/filter.json
index 35bcfb4e0..4587b5a62 100644
--- a/web/public/locales/es/components/filter.json
+++ b/web/public/locales/es/components/filter.json
@@ -6,7 +6,9 @@
"title": "Todas las etiquetas"
},
"count": "{{count}} Etiquetas",
- "label": "Etiquetas"
+ "label": "Etiquetas",
+ "count_one": "{{count}} Etiqueta",
+ "count_other": "{{count}} Etiquetas"
},
"zones": {
"all": {
diff --git a/web/public/locales/es/views/explore.json b/web/public/locales/es/views/explore.json
index a33840300..7d292be19 100644
--- a/web/public/locales/es/views/explore.json
+++ b/web/public/locales/es/views/explore.json
@@ -40,11 +40,13 @@
"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."
+ "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}}"
+ "updatedSublabelFailed": "No se pudo actualizar la subetiqueta: {{errorMessage}}",
+ "updatedLPRFailed": "No se pudo actualizar la matrícula: {{errorMessage}}"
}
},
"tips": {
@@ -86,7 +88,13 @@
},
"objects": "Objetos",
"estimatedSpeed": "Velocidad estimada",
- "camera": "Cámara"
+ "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"
},
"documentTitle": "Explorar - Frigate",
"trackedObjectDetails": "Detalles del objeto rastreado",
@@ -180,5 +188,7 @@
}
}
},
- "trackedObjectsCount": "{{count}} objetos rastreados "
+ "trackedObjectsCount_one": "{{count}} objeto rastreado ",
+ "trackedObjectsCount_many": "{{count}} objetos rastreados ",
+ "trackedObjectsCount_other": "{{count}} objetos rastreados "
}
diff --git a/web/public/locales/es/views/settings.json b/web/public/locales/es/views/settings.json
index 7cdfeeb4b..e14376f1c 100644
--- a/web/public/locales/es/views/settings.json
+++ b/web/public/locales/es/views/settings.json
@@ -135,6 +135,10 @@
"toast": {
"success": "Los ajustes de clasificación han sido guardados. Reinicia Frigate para aplicar tus cambios.",
"error": "No se pudieron guardar los cambios de configuración: {{errorMessage}}"
+ },
+ "birdClassification": {
+ "title": "Clasificación de Aves",
+ "desc": "La clasificación de aves identifica aves conocidas utilizando un modelo de TensorFlow cuantizado. Cuando se reconoce una ave conocida, su nombre común se añadirá como una subetiqueta. Esta información se incluye en la interfaz de usuario, en los filtros y en las notificaciones."
}
},
"camera": {
diff --git a/web/public/locales/fi/audio.json b/web/public/locales/fi/audio.json
new file mode 100644
index 000000000..85c90df31
--- /dev/null
+++ b/web/public/locales/fi/audio.json
@@ -0,0 +1,5 @@
+{
+ "speech": "Puhe",
+ "yell": "Huutaa",
+ "babbling": "Pulina"
+}
diff --git a/web/public/locales/fi/common.json b/web/public/locales/fi/common.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fi/common.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fi/components/auth.json b/web/public/locales/fi/components/auth.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fi/components/auth.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fi/components/camera.json b/web/public/locales/fi/components/camera.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fi/components/camera.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fi/components/dialog.json b/web/public/locales/fi/components/dialog.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fi/components/dialog.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fi/components/filter.json b/web/public/locales/fi/components/filter.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fi/components/filter.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fi/components/icons.json b/web/public/locales/fi/components/icons.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fi/components/icons.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fi/components/input.json b/web/public/locales/fi/components/input.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fi/components/input.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fi/components/player.json b/web/public/locales/fi/components/player.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fi/components/player.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fi/objects.json b/web/public/locales/fi/objects.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fi/objects.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fi/views/configEditor.json b/web/public/locales/fi/views/configEditor.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fi/views/configEditor.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fi/views/events.json b/web/public/locales/fi/views/events.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fi/views/events.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fi/views/explore.json b/web/public/locales/fi/views/explore.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fi/views/explore.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fi/views/exports.json b/web/public/locales/fi/views/exports.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fi/views/exports.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fi/views/faceLibrary.json b/web/public/locales/fi/views/faceLibrary.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fi/views/faceLibrary.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fi/views/live.json b/web/public/locales/fi/views/live.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fi/views/live.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fi/views/recording.json b/web/public/locales/fi/views/recording.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fi/views/recording.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fi/views/search.json b/web/public/locales/fi/views/search.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/fi/views/search.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/fi/views/settings.json b/web/public/locales/fi/views/settings.json
new file mode 100644
index 000000000..0a4d132ba
--- /dev/null
+++ b/web/public/locales/fi/views/settings.json
@@ -0,0 +1,232 @@
+{
+ "documentTitle": {
+ "camera": "Kamera-asetukset - Frigate",
+ "classification": "Klassifiointiasetukset - Frigate",
+ "masksAndZones": "Maski ja aluemuokkain - Frigate",
+ "motionTuner": "Liikesäädin - Frigate",
+ "default": "Asetukset - Frigate",
+ "general": "Yleiset asetukset - Frigate",
+ "frigatePlus": "Frigate+ asetukset - Frigate",
+ "object": "Objektiasetukset - Frigate",
+ "authentication": "Autentikointiuasetukset - 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"
+ },
+ "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}}"
+ }
+ },
+ "camera": {
+ "title": "Kamera-asetukset",
+ "streams": {
+ "title": "Striimit",
+ "desc": "Kameran poiskytkeminen lopettaa kameran videostriimien käsittelyn. Havainnot, tallennus ja debuggaus ovat pois käytöstä.annotation_offset
peut être utilisé pour ajuster ce décalage.",
+ "millisecondsToOffset": "Millisecondes pour décaler les annotations détectées. Par défaut : 0",
+ "tips": "ASTUCE : Imaginez un clip d'événement avec une personne marchant de gauche à droite. Si le cadre de la chronologie de l'événement est constamment à gauche de la personne, la valeur doit être diminuée. De même, si une personne marche de gauche à droite et que le cadre de la chronologie est constamment devant elle, la valeur doit être augmentée."
+ }
+ },
+ "carousel": {
+ "next": "Diapositive suivante",
+ "previous": "Diapositive précédente"
+ }
+ },
+ "trackedObjectDetails": "Détails de l'objet suivi",
+ "itemMenu": {
+ "downloadSnapshot": {
+ "label": "Télécharger l'instantané",
+ "aria": "Télécharger l'instantané"
+ },
+ "findSimilar": {
+ "label": "Trouver Similaire",
+ "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 Plus"
+ },
+ "deleteTrackedObject": {
+ "label": "Supprimer cet objet suivi"
+ }
+ },
+ "dialog": {
+ "confirmDelete": {
+ "title": "Confirmer la suppression",
+ "desc": "La suppression de cet objet suivi supprime l'instantané, les incorporations enregistrées et les entrées du cycle de vie de l'objet associées. 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
index 0448932fe..5579f1fe8 100644
--- a/web/public/locales/fr/views/recording.json
+++ b/web/public/locales/fr/views/recording.json
@@ -5,8 +5,8 @@
"filters": "Filtres",
"toast": {
"error": {
- "noValidTimeSelected": "Aucune plage horaire valide sélectionnée",
- "endTimeMustAfterStartTime": "L'heure de fin doit être après l'heure de début"
+ "noValidTimeSelected": "Pas de période valide sélectionnée",
+ "endTimeMustAfterStartTime": "L'instant de fin doit être aprés le début"
}
}
}
diff --git a/web/public/locales/fr/views/search.json b/web/public/locales/fr/views/search.json
index 9de220763..c8913461c 100644
--- a/web/public/locales/fr/views/search.json
+++ b/web/public/locales/fr/views/search.json
@@ -7,7 +7,7 @@
"filterInformation": "Filtrer les informations",
"filterActive": "Filtres actifs",
"save": "Enregistrer la recherche",
- "delete": "Effacer la recherche enregistrée"
+ "delete": "Supprimer la recherche enregistrée"
},
"trackedObjectId": "ID d'objet suivi",
"filter": {
@@ -19,7 +19,49 @@
"labels": "Étiquettes",
"cameras": "Caméras",
"after": "Après",
- "before": "Avant"
+ "before": "Avant",
+ "min_speed": "Vitesse Min",
+ "max_speed": "Vitesse Max",
+ "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": "Vignette",
+ "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": "e.g. example@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"
+ },
+ "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 Frégate+",
+ "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 sur le modèle...",
+ "title": "Informations sur le modèle",
+ "trainDate": "Date d'entrainement",
+ "error": "Échec au 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 sur Frigate+. Notez que seuls les modèles compatibles avec votre configuration de détecteur actuelle peuvent être sélectionnés."
+ },
+ "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}}"
+ }
+ },
+ "classification": {
+ "title": "Paramètres de classification",
+ "semanticSearch": {
+ "title": "Recherche sémantique",
+ "reindexNow": {
+ "label": "Réindexé Maintenant",
+ "confirmTitle": "Confirmer la réindexation",
+ "error": "Échec du démarrage de la réindexation : {{errorMessage}}",
+ "desc": "La réindexation régénère des intégrations pour tous les objets suivis. Ce processus s'exécute en arrière-plan et peut solliciter au maximum votre processeur et prendre un certain temps, selon le nombre d'objets suivis.",
+ "confirmDesc": "Êtes-vous sûr de vouloir réindexer toutes les incorporations d'objets suivies ? Ce processus s'exécutera en arrière-plan, mais il risque de solliciter au maximum votre processeur et de prendre un certain temps. Vous pouvez suivre la progression sur la page Explorateur.",
+ "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 d'évaluation 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 small utilise une version quantifiée du modèle qui utilise moins de RAM 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 large utilise le modèle Jina complet et s'exécutera automatiquement sur le GPU si applicable.",
+ "title": "large"
+ },
+ "desc": "La taille du modèle utilisé pour les intégrations de recherche sémantique.",
+ "label": "Taille du Modèle"
+ },
+ "readTheDocumentation": "Lire la documentation"
+ },
+ "faceRecognition": {
+ "readTheDocumentation": "Lire la Documentation",
+ "modelSize": {
+ "large": {
+ "title": "large",
+ "desc": "L'utilisation de large utilise un modèle d'intégration de visage ArcFace et s'exécutera automatiquement sur le GPU si applicable."
+ },
+ "small": {
+ "desc": "L'utilisation de small 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 à l'enregistrement des modifications de configuration : {{errorMessage}}"
+ }
+ },
+ "camera": {
+ "title": "Paramètres de la caméra",
+ "review": {
+ "title": "Evaluation",
+ "detections": "Détections ",
+ "alerts": "Alertes ",
+ "desc": "Activer/désactiver les alertes et les détections pour cette caméra. Si cette option est désactivée, aucun nouvel élément d'évaluation ne sera généré."
+ },
+ "reviewClassification": {
+ "title": "Evaluer la Classification",
+ "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 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 Alertes seront affichés comme 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 des évaluations 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 catégorise les éléments d'évaluation en Alertes et Détections. Par défaut, tous les objets personne et voiture sont considérés comme des Alertes. Vous pouvez affiner la catégorisation de vos éléments d'évaluation en configurant les zones requises pour ces éléments."
+ },
+ "streams": {
+ "title": "Flux",
+ "desc": "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": "Debug", + "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 à l'enregistrement du mot de passe : {{errorMessage}}", + "createUserFailed": "Échec à la création de l'utilisateur : {{errorMessage}}", + "deleteUserFailed": "Échec à de la suppression de l'utilisateur : {{errorMessage}}", + "roleUpdateFailed": "Échec à 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" + }, + "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." + }, + "changeRole": { + "title": "Changer le rôle de l'utilisateur", + "desc": "Mettre à jour les autorisations pour {{username}}", + "roleInfo": "Sélectionnez le rôle approprié pour cet utilisateur :
ffprobe
.",
+ "resolution": "Résolution :",
+ "error": "Erreur : {{error}}",
+ "codec": "Codec :",
+ "video": "Vidéo :"
+ },
+ "framesAndDetections": "Images / Détections",
+ "label": {
+ "camera": "caméra",
+ "detect": "Détecter",
+ "skipped": "ignoré",
+ "ffmpeg": "ffmpeg",
+ "capture": "capture"
+ },
+ "overview": "Prévisualisation",
+ "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 CPU par FFMPEG ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} a un taux élevé d'utilisation CPU ({{detectAvg}}%)",
+ "healthy": "Le système est sain",
+ "reindexingEmbeddings": "Réindexation des données complémentaires ({{processed}}% complété)"
+ },
+ "enrichments": {
+ "title": "Améliorations",
+ "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"
}
}
}
diff --git a/web/public/locales/hi/audio.json b/web/public/locales/hi/audio.json
new file mode 100644
index 000000000..a8a255d1d
--- /dev/null
+++ b/web/public/locales/hi/audio.json
@@ -0,0 +1,142 @@
+{
+ "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": "विमान"
+}
diff --git a/web/public/locales/hi/common.json b/web/public/locales/hi/common.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/hi/common.json
@@ -0,0 +1 @@
+{}
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..0967ef424
--- /dev/null
+++ b/web/public/locales/hi/components/camera.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/hi/components/dialog.json b/web/public/locales/hi/components/dialog.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/hi/components/dialog.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/hi/components/filter.json b/web/public/locales/hi/components/filter.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/hi/components/filter.json
@@ -0,0 +1 @@
+{}
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..0967ef424
--- /dev/null
+++ b/web/public/locales/hi/components/player.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/hi/objects.json b/web/public/locales/hi/objects.json
new file mode 100644
index 000000000..4c6a4f946
--- /dev/null
+++ b/web/public/locales/hi/objects.json
@@ -0,0 +1,15 @@
+{
+ "horse": "घोड़ा",
+ "sheep": "भेड़",
+ "bark": "भौंकना",
+ "animal": "जानवर",
+ "dog": "कुत्ता",
+ "cat": "बिल्ली",
+ "goat": "बकरी",
+ "boat": "नाव",
+ "bus": "बस",
+ "bird": "पक्षी",
+ "mouse": "चूहा",
+ "vehicle": "वाहन",
+ "car": "गाड़ी"
+}
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..0967ef424
--- /dev/null
+++ b/web/public/locales/hi/views/events.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/hi/views/explore.json b/web/public/locales/hi/views/explore.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/hi/views/explore.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/hi/views/exports.json b/web/public/locales/hi/views/exports.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/hi/views/exports.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/hi/views/faceLibrary.json b/web/public/locales/hi/views/faceLibrary.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/hi/views/faceLibrary.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/hi/views/live.json b/web/public/locales/hi/views/live.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/hi/views/live.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/hi/views/recording.json b/web/public/locales/hi/views/recording.json
new file mode 100644
index 000000000..bd35fbaf5
--- /dev/null
+++ b/web/public/locales/hi/views/recording.json
@@ -0,0 +1,10 @@
+{
+ "calendar": "पंचांग",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "कोई मान्य समय सीमा चयनित नहीं है",
+ "endTimeMustAfterStartTime": "समाप्ति समय प्रारंभ समय के बाद होना चाहिए"
+ }
+ },
+ "export": "निर्यात"
+}
diff --git a/web/public/locales/hi/views/search.json b/web/public/locales/hi/views/search.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/hi/views/search.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/hi/views/settings.json b/web/public/locales/hi/views/settings.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/hi/views/settings.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/hi/views/system.json b/web/public/locales/hi/views/system.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/hi/views/system.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/it/audio.json b/web/public/locales/it/audio.json
index 022545085..7c0542b9e 100644
--- a/web/public/locales/it/audio.json
+++ b/web/public/locales/it/audio.json
@@ -19,27 +19,27 @@
"thunder": "Tuono",
"purr": "Fusa",
"guitar": "Chitarra",
- "bass_guitar": "Basso Elettrico",
+ "bass_guitar": "Basso elettrico",
"eruption": "Eruzione",
- "sound_effect": "Effetto Sonoro",
+ "sound_effect": "Effetto sonoro",
"bicycle": "Bicicletta",
"vehicle": "Veicolo",
"flute": "Flauto",
"harp": "Arpa",
"steam": "Vapore",
- "sailboat": "Barca a Vela",
+ "sailboat": "Barca a vela",
"helicopter": "Elicottero",
"coin": "Moneta",
"scissors": "Forbici",
- "electric_shaver": "Rasoio Elettrico",
+ "electric_shaver": "Rasoio elettrico",
"mechanisms": "Meccanismi",
"printer": "Stampante",
"television": "Televisione",
- "environmental_noise": "Rumore Ambientale",
- "smoke_detector": "Rilevatore di Fumo",
+ "environmental_noise": "Rumore ambientale",
+ "smoke_detector": "Rilevatore di fumo",
"clarinet": "Clarinetto",
"horse": "Cavallo",
- "electric_guitar": "Chitarra Elettrica",
+ "electric_guitar": "Chitarra elettrica",
"meow": "Miao",
"ringtone": "Suoneria",
"boat": "Barca",
@@ -48,12 +48,294 @@
"clapping": "Applausi",
"cat": "Gatto",
"chicken": "Pollo",
- "acoustic_guitar": "Chitarra Acustica",
+ "acoustic_guitar": "Chitarra acustica",
"speech": "Discorso",
"babbling": "Balbettio",
"motorcycle": "Motociclo",
"yell": "Urlo",
- "whoop": "Urlo",
+ "whoop": "Grido",
"car": "Automobile",
- "bellow": "Ruggito"
+ "bellow": "Ruggito",
+ "whispering": "Bisbiglio",
+ "snicker": "Risatina",
+ "crying": "Pianto",
+ "sigh": "Sospiro",
+ "singing": "Canto",
+ "choir": "Coro",
+ "yodeling": "Gorgheggio",
+ "chant": "Cantilena",
+ "child_singing": "Canto di bambino",
+ "laughter": "Risata",
+ "synthetic_singing": "Canto sintetico",
+ "rapping": "Rap",
+ "humming": "Mormorio",
+ "groan": "Gemito",
+ "grunt": "Grugnito",
+ "whistling": "Fischio",
+ "breathing": "Respiro",
+ "wheeze": "Respiro affannoso",
+ "snoring": "Russare",
+ "gasp": "Respiro profondo",
+ "cough": "Tosse",
+ "snort": "Sbuffare",
+ "pant": "Ansimare",
+ "throat_clearing": "Schiarimento della gola",
+ "sneeze": "Starnuto",
+ "sniff": "Sniffare",
+ "footsteps": "Passi",
+ "run": "Corsa",
+ "chewing": "Masticare",
+ "gargling": "Gargarismo",
+ "stomach_rumble": "Brontolio di stomaco",
+ "burping": "Rutto",
+ "fart": "Peto",
+ "hiccup": "Singhiozzo",
+ "finger_snapping": "Schiocco di dita",
+ "hands": "Mani",
+ "heartbeat": "Battito cardiaco",
+ "applause": "Applauso",
+ "heart_murmur": "Soffio cardiaco",
+ "cheering": "Tifo",
+ "animal": "Animale",
+ "pets": "Animali domestici",
+ "dog": "Cane",
+ "bark": "Abbaio",
+ "howl": "Ululato",
+ "yip": "Guaito",
+ "crowd": "Folla",
+ "livestock": "Bestiame",
+ "cowbell": "Campanaccio",
+ "turkey": "Tacchino",
+ "children_playing": "Bambini che giocano",
+ "chatter": "Chiacchiere",
+ "bow_wow": "Bau Bau",
+ "growling": "Ringhio",
+ "whimper_dog": "Lamento di cane",
+ "hiss": "Sibilo",
+ "caterwaul": "Miagolio",
+ "pig": "Maiale",
+ "sheep": "Pecora",
+ "fowl": "Pollame",
+ "bleat": "Belato",
+ "cock_a_doodle_doo": "Chicchirichì",
+ "gobble": "Trangugio",
+ "cluck": "Chioccia",
+ "duck": "Anatra",
+ "quack": "Qua Qua",
+ "wild_animals": "Animali selvatici",
+ "goose": "Oca",
+ "honk": "Starnazzare",
+ "roar": "Ruggito",
+ "roaring_cats": "Ruggito felino",
+ "chirp": "Cinguettio",
+ "pigeon": "Piccione",
+ "crow": "Corvo",
+ "coo": "Tubare",
+ "owl": "Gufo",
+ "caw": "Gracchio",
+ "dogs": "Cani",
+ "hoot": "Bubbolio",
+ "flapping_wings": "Battito d'ali",
+ "mouse": "Topo",
+ "rats": "Ratti",
+ "insect": "Insetto",
+ "cricket": "Grillo",
+ "mosquito": "Zanzara",
+ "buzz": "Ronzio",
+ "fly": "Mosca",
+ "frog": "Rana",
+ "croak": "Gracidio",
+ "rattle": "Sonaglio",
+ "music": "Musica",
+ "musical_instrument": "Strumento musicale",
+ "whale_vocalization": "Canto della balena",
+ "plucked_string_instrument": "Strumento a corda pizzicata",
+ "tapping": "Tapping (tecnica di chitarra)",
+ "steel_guitar": "Chitarra d'acciaio",
+ "strum": "Strimpellio",
+ "banjo": "Banjo",
+ "sitar": "Sitar",
+ "mandolin": "Mandolino",
+ "zither": "Cetra da tavolo",
+ "ukulele": "Ukulele",
+ "piano": "Pianoforte",
+ "electric_piano": "Pianoforte elettrico",
+ "organ": "Organo",
+ "electronic_organ": "Organo elettronico",
+ "synthesizer": "Sintetizzatore",
+ "hammond_organ": "Organo Hammond",
+ "drum_kit": "Batteria",
+ "drum": "Tamburo",
+ "drum_machine": "Drum Machine",
+ "tabla": "Tabla",
+ "cymbal": "Piatto",
+ "hi_hat": "Hi-Hat",
+ "wood_block": "Blocco di legno",
+ "tambourine": "Tamburello",
+ "maraca": "Maracas",
+ "gong": "Gong",
+ "tubular_bells": "Campane tubolari",
+ "mallet_percussion": "Mazzuola",
+ "marimba": "Marimba",
+ "glockenspiel": "Glockenspiel",
+ "vibraphone": "Vibrafono",
+ "steelpan": "Steel pan",
+ "orchestra": "Orchestra",
+ "brass_instrument": "Ottoni",
+ "trumpet": "Tromba",
+ "french_horn": "Corno francese",
+ "trombone": "Trombone",
+ "bowed_string_instrument": "Strumento ad arco",
+ "violin": "Violino",
+ "string_section": "Sezione d'archi",
+ "cello": "Violoncello",
+ "double_bass": "Contrabbasso",
+ "pizzicato": "Pizzicato",
+ "wind_instrument": "Strumento a fiato",
+ "saxophone": "Sassofono",
+ "church_bell": "Campana della chiesa",
+ "jingle_bell": "Campanellino",
+ "bicycle_bell": "Campanello della bici",
+ "tuning_fork": "Diapason",
+ "chime": "Carillon",
+ "wind_chime": "Campane a vento",
+ "harmonica": "Armonica",
+ "accordion": "Fisarmonica",
+ "bagpipes": "Cornamusa",
+ "didgeridoo": "Didgeridoo",
+ "pop_music": "Musica pop",
+ "theremin": "Theremin",
+ "singing_bowl": "Campana tibetana",
+ "rock_music": "Musica rock",
+ "heavy_metal": "Heavy Metal",
+ "beatboxing": "Beatboxing",
+ "hip_hop_music": "Musica hip hop",
+ "punk_rock": "Punk Rock",
+ "grunge": "Grunge",
+ "rock_and_roll": "Rock and Roll",
+ "psychedelic_rock": "Rock psichedelico",
+ "bus": "Autobus",
+ "train": "Treno",
+ "percussion": "Percussioni",
+ "harpsichord": "Clavicembalo",
+ "snare_drum": "Rullante",
+ "rimshot": "Rimshot",
+ "drum_roll": "Rullo di tamburi",
+ "bass_drum": "Grancassa",
+ "timpani": "Timpano",
+ "progressive_rock": "Rock progressivo",
+ "scratching": "Graffio",
+ "rhythm_and_blues": "Rhythm and blues",
+ "soul_music": "Musica soul",
+ "reggae": "Reggae",
+ "country": "Country",
+ "bluegrass": "Bluegrass",
+ "funk": "Funk",
+ "folk_music": "Musica folk",
+ "middle_eastern_music": "Musica mediorientale",
+ "jazz": "Jazz",
+ "disco": "Disco",
+ "classical_music": "Musica classica",
+ "opera": "Opera",
+ "electronic_music": "Musica elettronica",
+ "house_music": "Musica house",
+ "techno": "Techno",
+ "dubstep": "Dubstep",
+ "drum_and_bass": "Drum and bass",
+ "electronica": "Electronica",
+ "camera": "Telecamera",
+ "shuffle": "Trascinare i piedi",
+ "biting": "Mordere",
+ "clip_clop": "Trotto di cavallo",
+ "neigh": "Nitrire",
+ "cattle": "Bestiame",
+ "moo": "Muggire",
+ "squawk": "Strillo",
+ "patter": "Ticchettio",
+ "swing_music": "Musica swing",
+ "electronic_dance_music": "Musica dance elettronica",
+ "ambient_music": "Musica ambientale",
+ "trance_music": "Musica trance",
+ "blues": "Blues",
+ "music_for_children": "Musica per bambini",
+ "new-age_music": "Musica new age",
+ "vocal_music": "Musica vocale",
+ "a_capella": "A capella",
+ "music_of_latin_america": "Musica latinoamericana",
+ "music_of_africa": "Musica africana",
+ "afrobeat": "Afrobeat",
+ "christian_music": "Musica cristiana",
+ "gospel_music": "Musica gospel",
+ "music_of_asia": "Musica asiatica",
+ "carnatic_music": "Musica carnatica",
+ "music_of_bollywood": "Musica di Bollywood",
+ "ska": "Ska",
+ "traditional_music": "Musica tradizionale",
+ "independent_music": "Musica indipendente",
+ "background_music": "Musica di sottofondo",
+ "theme_music": "Musica a tema",
+ "jingle": "Motivetto",
+ "soundtrack_music": "Colonna sonora musicale",
+ "lullaby": "Ninna nanna",
+ "video_game_music": "Musica per videogiochi",
+ "christmas_music": "Musica natalizia",
+ "dance_music": "Musica da ballo",
+ "wedding_music": "Musica per matrimoni",
+ "happy_music": "Musica allegra",
+ "sad_music": "Musica triste",
+ "tender_music": "Musica tenera",
+ "salsa_music": "Musica salsa",
+ "flamenco": "Flamenco",
+ "angry_music": "Musica arrabbiata",
+ "scary_music": "Musica spaventosa",
+ "wind": "Vento",
+ "rustling_leaves": "Fruscio di foglie",
+ "wind_noise": "Rumore del vento",
+ "thunderstorm": "Temporale",
+ "water": "Acqua",
+ "rain": "Pioggia",
+ "raindrop": "Goccia di pioggia",
+ "stream": "Ruscello",
+ "waterfall": "Cascata",
+ "ocean": "Oceano",
+ "waves": "Onde",
+ "rain_on_surface": "Pioggia in superficie",
+ "gurgling": "Gorgoglio",
+ "crackle": "Crepitio",
+ "rowboat": "Barca a remi",
+ "motorboat": "Motoscafo",
+ "ship": "Nave",
+ "toot": "Clacson",
+ "motor_vehicle": "Veicolo a motore",
+ "car_alarm": "Allarme auto",
+ "power_windows": "Alzacristalli elettrici",
+ "skidding": "Sbandare",
+ "tire_squeal": "Stridio di pneumatici",
+ "car_passing_by": "Auto che passa",
+ "race_car": "Auto da corsa",
+ "air_brake": "Freno ad aria compressa",
+ "air_horn": "Clacson ad aria",
+ "reversing_beeps": "Bip di retromarcia",
+ "ice_cream_truck": "Camioncino dei gelati",
+ "emergency_vehicle": "Veicolo di emergenza",
+ "police_car": "Auto della polizia",
+ "fire_engine": "Camion dei pompieri",
+ "traffic_noise": "Rumore del traffico",
+ "rail_transport": "Trasporto ferroviario",
+ "train_whistle": "Fischio del treno",
+ "train_horn": "Clacson del treno",
+ "railroad_car": "Vagone ferroviario",
+ "train_wheels_squealing": "Ruote del treno che stridono",
+ "subway": "Metropolitana",
+ "aircraft": "Aeronave",
+ "aircraft_engine": "Motore aeronautico",
+ "jet_engine": "Motore a reazione",
+ "propeller": "Elica",
+ "fixed-wing_aircraft": "Aeronave ad ala fissa",
+ "skateboard": "Monopattino",
+ "light_engine": "Motore leggero",
+ "dental_drill's_drill": "Trapano dentale",
+ "lawn_mower": "Taglia erba",
+ "exciting_music": "Musica emozionante",
+ "truck": "Camion"
}
diff --git a/web/public/locales/it/common.json b/web/public/locales/it/common.json
index 35d42c323..1488a038f 100644
--- a/web/public/locales/it/common.json
+++ b/web/public/locales/it/common.json
@@ -7,10 +7,14 @@
"yesterday": "Ieri",
"am": "am",
"untilForTime": "Fino alle {{time}}",
- "minute": "{{time}} minuti",
+ "minute_one": "{{time}} minuto",
+ "minute_many": "{{time}} minuti",
+ "minute_other": "{{time}} minuti",
"5minutes": "5 minuti",
"24hours": "24 ore",
- "second": "{{time}} secondi",
+ "second_one": "{{time}} secondo",
+ "second_many": "{{time}} secondi",
+ "second_other": "{{time}} secondi",
"untilForRestart": "Fino al riavvio di Frigate.",
"ago": "{{timeAgo}} fa",
"justNow": "Adesso",
@@ -24,10 +28,18 @@
"30minutes": "30 minuti",
"1hour": "1 ora",
"12hours": "12 ore",
- "year": "{{time}} anni",
- "month": "{{time}} mesi",
- "day": "{{time}} giorni",
- "hour": "{{time}} ore",
+ "year_one": "{{time}} anno",
+ "year_many": "{{time}} anni",
+ "year_other": "{{time}} anni",
+ "month_one": "{{time}} mese",
+ "month_many": "{{time}} mesi",
+ "month_other": "{{time}} mesi",
+ "day_one": "{{time}} giorno",
+ "day_many": "{{time}} giorni",
+ "day_other": "{{time}} giorni",
+ "hour_one": "{{time}} ora",
+ "hour_many": "{{time}} ore",
+ "hour_other": "{{time}} ore",
"yr": "{{time}}anno",
"mo": "{{time}}mese",
"d": "{{time}}giorno",
@@ -107,11 +119,37 @@
"settings": "Impostazioni",
"configurationEditor": "Editor di Configurazione",
"language": {
- "en": "Inglese",
+ "en": "English (Inglese)",
"zhCN": "Cinese Semplificato",
"withSystem": {
"label": "Usa la lingua di sistema"
- }
+ },
+ "es": "Español (Spagnolo)",
+ "hi": "हिन्दी (Hindi)",
+ "fr": "Français (Francese)",
+ "ar": "العربية (Arabo)",
+ "pt": "Português (Portoghese)",
+ "ru": "Русский (Russo)",
+ "tr": "Türkçe (Turco)",
+ "nl": "Nederlands (Olandese)",
+ "sv": "Svenska (Svedese)",
+ "cs": "Čeština (Ceco)",
+ "nb": "Norsk Bokmål (Norvegese)",
+ "ko": "한국어 (Coreano)",
+ "vi": "Tiếng Việt (Vietnamita)",
+ "fa": "فارسی (Persiano)",
+ "ro": "Română (Rumeno)",
+ "hu": "Magyar (Ungherese)",
+ "fi": "Suomi (Finlandese)",
+ "da": "Dansk (Danese)",
+ "el": "Ελληνικά (Greco)",
+ "sk": "Slovenčina (Slovacco)",
+ "ja": "日本語 (Giapponese)",
+ "uk": "Українська (Ucraino)",
+ "pl": "Polski (Polacco)",
+ "de": "Deutsch (Tedesco)",
+ "he": "עברית (Ebraico)",
+ "it": "Italiano (Italiano)"
},
"darkMode": {
"label": "Modalità Scura",
diff --git a/web/public/locales/it/components/camera.json b/web/public/locales/it/components/camera.json
index 37f6b3da2..d33a6b2aa 100644
--- a/web/public/locales/it/components/camera.json
+++ b/web/public/locales/it/components/camera.json
@@ -3,8 +3,32 @@
"label": "Gruppo di Telecamere",
"add": "Aggiungi Gruppo di Telecamere",
"delete": {
- "label": "Cancella Gruppo di Telecamere"
+ "label": "Cancella Gruppo di Telecamere",
+ "confirm": {
+ "title": "Conferma eliminazione",
+ "desc": "Sei sicuro di voler eliminare il gruppo di telecamere {{name}}?"
+ }
},
- "edit": "Modifica Gruppo di Telecamere"
+ "edit": "Modifica Gruppo di Telecamere",
+ "name": {
+ "label": "Nome",
+ "placeholder": "Inserisci un nome...",
+ "errorMessage": {
+ "exists": "Il nome scelto per il gruppo telecamere è già presente.",
+ "invalid": "Nome del gruppo di telecamere non valido.",
+ "mustLeastCharacters": "Il nome del gruppo di telecamere deve conternere almeno 2 caratteri."
+ }
+ },
+ "camera": {
+ "setting": {
+ "label": "Impostazioni di trasmissione della telecamera"
+ }
+ },
+ "cameras": {
+ "desc": "Seleziona le telecamere per questo gruppo.",
+ "label": "Telecamere"
+ },
+ "icon": "Icona",
+ "success": "Il gruppo di telecamere ({{name}}) è stato salvato."
}
}
diff --git a/web/public/locales/it/components/player.json b/web/public/locales/it/components/player.json
index 0e3088696..724cca0b0 100644
--- a/web/public/locales/it/components/player.json
+++ b/web/public/locales/it/components/player.json
@@ -3,6 +3,49 @@
"noRecordingsFoundForThisTime": "Nessuna registrazione trovata per questo intervallo",
"noPreviewFoundFor": "Nessuna Anteprima Trovata per {{cameraName}}",
"submitFrigatePlus": {
- "title": "Vuoi inviare questo frame a Frigate+?"
- }
+ "title": "Vuoi inviare questo frame a Frigate+?",
+ "submit": "Invia"
+ },
+ "livePlayerRequiredIOSVersion": "Per questo tipo di trasmissione dal vivo è richiesto iOS 17.1 o versione successiva.",
+ "stats": {
+ "streamType": {
+ "short": "Tipo",
+ "title": "Tipo di Flusso:"
+ },
+ "bandwidth": {
+ "title": "Larghezza di banda:",
+ "short": "Larghezza di banda"
+ },
+ "latency": {
+ "title": "Latenza:",
+ "value": "{{seconds}} secondi",
+ "short": {
+ "title": "Latenza",
+ "value": "{{seconds}} sec"
+ }
+ },
+ "droppedFrames": {
+ "title": "Fotogrammi persi:",
+ "short": {
+ "title": "Persi",
+ "value": "{{droppedFrames}} fotogrammi"
+ }
+ },
+ "decodedFrames": "Fotogrammi decodificati:",
+ "totalFrames": "Totale Fotogrammi:",
+ "droppedFrameRate": "Percentuali Fotogrammi Persi:"
+ },
+ "streamOffline": {
+ "desc": "Nessun frame ricevuto sul flusso 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
index e9c7445b5..131e2cabf 100644
--- a/web/public/locales/it/objects.json
+++ b/web/public/locales/it/objects.json
@@ -9,5 +9,23 @@
"bicycle": "Bicicletta",
"person": "Persona",
"car": "Automobile",
- "motorcycle": "Motociclo"
+ "motorcycle": "Motociclo",
+ "dog": "Cane",
+ "bark": "Abbaio",
+ "animal": "Animale",
+ "sheep": "Pecora",
+ "mouse": "Topo",
+ "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": "Monopattino"
}
diff --git a/web/public/locales/it/views/events.json b/web/public/locales/it/views/events.json
index 3222288c8..360a3dc65 100644
--- a/web/public/locales/it/views/events.json
+++ b/web/public/locales/it/views/events.json
@@ -7,7 +7,8 @@
},
"empty": {
"alert": "Non ci sono avvisi da rivedere",
- "detection": "Non ci sono rilevamenti da rivedere"
+ "detection": "Non ci sono rilevamenti da rivedere",
+ "motion": "Nessun dato di movimento trovato"
},
"newReviewItems": {
"label": "Visualizza i nuovi elementi da rivedere",
@@ -15,5 +16,20 @@
},
"markTheseItemsAsReviewed": "Segna questi oggetti come visti",
"markAsReviewed": "Segna come Visto",
- "documentTitle": "Rivedi - Frigate"
+ "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 periodo di tempo."
+ },
+ "recordings": {
+ "documentTitle": "Registrazioni - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "Ultime 24 ore"
+ },
+ "camera": "Telecamera"
}
diff --git a/web/public/locales/it/views/explore.json b/web/public/locales/it/views/explore.json
index c9234a054..4be16dd1a 100644
--- a/web/public/locales/it/views/explore.json
+++ b/web/public/locales/it/views/explore.json
@@ -6,5 +6,8 @@
"embeddingsReindexing": {
"context": "Potrai usare Esplora dopo che l'incorporamento degli oggetti tracciati avrà terminato la ricostruzione dell'indice."
}
+ },
+ "details": {
+ "timestamp": "Marca temporale"
}
}
diff --git a/web/public/locales/it/views/faceLibrary.json b/web/public/locales/it/views/faceLibrary.json
index 8960bcc51..3d55faa87 100644
--- a/web/public/locales/it/views/faceLibrary.json
+++ b/web/public/locales/it/views/faceLibrary.json
@@ -1,11 +1,73 @@
{
"selectItem": "Seleziona {{item}}",
"description": {
- "addFace": "Procedura per aggiungere una nuova raccolta alla Libreria dei volti.",
+ "addFace": "Procedura per aggiungere una nuova raccolta alla Libreria dei Volti.",
"placeholder": "Immetti un nome per questa raccolta"
},
"details": {
"confidence": "Fiducia",
- "person": "Persona"
- }
+ "person": "Persona",
+ "face": "Dettagli del volto",
+ "faceDesc": "Dettagli del volto e dell'oggetto associato",
+ "timestamp": "Marca temporale"
+ },
+ "train": {
+ "title": "Addestra",
+ "aria": "Seleziona addestramento"
+ },
+ "button": {
+ "addFace": "Aggiungi Volto",
+ "deleteFaceAttempts": "Elimina tentativi di riconoscimento facciale",
+ "uploadImage": "Carica Immagine",
+ "reprocessFace": "Rielabora il Volto"
+ },
+ "trainFace": "Addestra il Volto",
+ "toast": {
+ "success": {
+ "deletedName_one": "{{count}} volto è stato eliminato con successo.",
+ "deletedName_many": "{{count}} volti sono stati eliminati con successo.",
+ "deletedName_other": "{{count}} volti sono stati eliminati con successo.",
+ "trainedFace": "Volto addestrato con successo.",
+ "deletedFace_one": "Eliminato con successo {{count}} volto.",
+ "deletedFace_many": "Eliminati con successo {{count}} volti.",
+ "deletedFace_other": "Eliminati con successo {{count}} volti.",
+ "updatedFaceScore": "Punteggio del volto aggiornato con successo.",
+ "uploadedImage": "Immagine caricata correttamente.",
+ "addFaceLibrary": "{{name}} è stato aggiunto con successo alla Libreria dei Volti!"
+ },
+ "error": {
+ "addFaceLibraryFailed": "Impossibile impostare il nome del volto: {{errorMessage}}",
+ "uploadingImageFailed": "Impossibile caricare l'immagine: {{errorMessage}}",
+ "deleteFaceFailed": "Impossibile eliminare: {{errorMessage}}",
+ "trainFailed": "Impossibile addestrare: {{errorMessage}}",
+ "updateFaceScoreFailed": "Impossibile aggiornare il punteggio del volto: {{errorMessage}}",
+ "deleteNameFailed": "Impossibile eliminare il nome: {{errorMessage}}"
+ }
+ },
+ "imageEntry": {
+ "dropActive": "Rilascia l'immagine qui...",
+ "dropInstructions": "Trascina e rilascia un'immagine qui oppure fai clic per selezionarla",
+ "maxSize": "Dimensione massima: {{size}} MB",
+ "validation": {
+ "selectImage": "Seleziona un file immagine."
+ }
+ },
+ "createFaceLibrary": {
+ "title": "Crea Raccolta",
+ "nextSteps": "Per costruire una base solida:annotation_offset
brukes til å justere dette.",
+ "millisecondsToOffset": "Millisekunder for å forskyve annotasjonsdata. 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."
+ }
+ },
+ "carousel": {
+ "previous": "Forrige lysbilde",
+ "next": "Neste lysbilde"
+ },
+ "title": "Objektets livssyklus",
+ "noImageFound": "Ingen bilder funnet for dette tidsstempelet."
+ },
+ "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 medianpoengsummen for det sporede objektet, så dette 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": "Skriv inn en ny under-merkelapp for dette {{label}}",
+ "descNoLabel": "Skriv inn en ny under-merkelapp for dette sporede objektet"
+ }
+ },
+ "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."
+ }
+ }
+ },
+ "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/search.json b/web/public/locales/nb-NO/views/search.json
index 0967ef424..62e9f67bf 100644
--- a/web/public/locales/nb-NO/views/search.json
+++ b/web/public/locales/nb-NO/views/search.json
@@ -1 +1,67 @@
-{}
+{
+ "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": "Les dokumentasjonen ", + "score": "Poengsum", + "ratio": "Forhold", + "area": "Område", + "title": "Tegning av objektformfilter", + "desc": "Tegn et rektangel på bildet for å vise område- og forholdsdetaljer", + "tips": "Aktiver dette alternativet for å tegne et rektangel på kamerabildet for å vise området og forholdet. 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": "Feilsøkingsvisningen viser en sanntidvisning av sporede objekter og deres statistikk. Objektlisten viser en tidsforsinket oppsummering av detekterte objekter.", + "debugging": "Feilsøking", + "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" + }, + "changeRole": { + "desc": "Oppdater tillatelser for {{username}}", + "title": "Endre brukerrolle", + "roleInfo": "Velg riktig rolle for denne brukeren:
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"
+ },
+ "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"
+ },
+ "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."
+ },
+ "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": "Les 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}}"
+ }
+ }
+}
diff --git a/web/public/locales/nb-NO/views/system.json b/web/public/locales/nb-NO/views/system.json
index 0967ef424..006252a63 100644
--- a/web/public/locales/nb-NO/views/system.json
+++ b/web/public/locales/nb-NO/views/system.json
@@ -1 +1,157 @@
-{}
+{
+ "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": "Berikelsesstatistikk - 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-bruk",
+ "memoryUsage": "Detektor minnebruk"
+ },
+ "hardwareInfo": {
+ "gpuMemory": "GPU-minne",
+ "gpuEncoder": "GPU-koder",
+ "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-bruk"
+ },
+ "otherProcesses": {
+ "title": "Andre prosesser",
+ "processCpuUsage": "Prosessens CPU-bruk",
+ "processMemoryUsage": "Prosessens minnebruk"
+ }
+ },
+ "storage": {
+ "overview": "Oversikt",
+ "recordings": {
+ "earliestRecording": "Tidligste tilgjengelige opptak:",
+ "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 totalt brukt",
+ "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"
+ }
+ },
+ "framesAndDetections": "Bilder / Deteksjoner",
+ "title": "Kameraer",
+ "overview": "Oversikt",
+ "label": {
+ "camera": "kamera",
+ "detect": "detekter",
+ "skipped": "hoppet over",
+ "ffmpeg": "ffmpeg",
+ "capture": "fangst"
+ },
+ "toast": {
+ "success": {
+ "copyToClipboard": "Kameradata kopiert til utklippstavlen."
+ },
+ "error": {
+ "unableToProbeCamera": "Kunne ikke hente informasjon fra kamera: {{errorMessage}}"
+ }
+ }
+ },
+ "enrichments": {
+ "embeddings": {
+ "plate_recognition_speed": "Indekseringshastighet for kjennemerke",
+ "face_embedding_speed": "Indekseringshastighet for ansikt",
+ "text_embedding_speed": "Indekseringshastighet for tekst",
+ "image_embedding_speed": "Indekseringshastighet for bilde"
+ },
+ "title": "Utvidelser",
+ "infPerSecond": "Inferenser per sekund"
+ },
+ "title": "System",
+ "metrics": "Systemmålinger",
+ "lastRefreshed": "Sist oppdatert: ",
+ "stats": {
+ "ffmpegHighCpuUsage": "{{camera}} har høy CPU-bruk for FFMPEG ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} har høy CPU-bruk for detektering ({{detectAvg}}%)",
+ "healthy": "Systemet fungerer som det skal",
+ "reindexingEmbeddings": "Reindeksering av vektorrepresentasjoner ({{processed}}% fullført)"
+ }
+}
diff --git a/web/public/locales/nb_NO/components/input.json b/web/public/locales/nb_NO/components/input.json
index eb75cf395..eb03da4fa 100644
--- a/web/public/locales/nb_NO/components/input.json
+++ b/web/public/locales/nb_NO/components/input.json
@@ -3,7 +3,7 @@
"downloadVideo": {
"label": "Last ned video",
"toast": {
- "success": "Videoen for vurderingsobjektet ditt har startet nedlasting."
+ "success": "Videoen for inspeksjonselementet ditt har startet nedlasting."
}
}
}
diff --git a/web/public/locales/nb_NO/objects.json b/web/public/locales/nb_NO/objects.json
index 4a63ee81e..bb0562a16 100644
--- a/web/public/locales/nb_NO/objects.json
+++ b/web/public/locales/nb_NO/objects.json
@@ -112,7 +112,7 @@
"fedex": "FedEx",
"dhl": "DHL",
"an_post": "An Post",
- "purolator": "Purolator",
+ "purolator": "Filter",
"postnl": "PostNL",
"nzpost": "NZPost",
"postnord": "PostNord",
diff --git a/web/public/locales/nb_NO/views/configEditor.json b/web/public/locales/nb_NO/views/configEditor.json
index 0967ef424..55067d1a8 100644
--- a/web/public/locales/nb_NO/views/configEditor.json
+++ b/web/public/locales/nb_NO/views/configEditor.json
@@ -1 +1,15 @@
-{}
+{
+ "documentTitle": "Konfigurasjonsredigering - Frigate",
+ "toast": {
+ "error": {
+ "savingError": "Feil ved lagring av konfigurasjon"
+ },
+ "success": {
+ "copyToClipboard": "Konfigurasjonen ble kopiert til utklippstavlen."
+ }
+ },
+ "configEditor": "Konfigurasjonsredigering",
+ "copyConfig": "Kopier konfigurasjon",
+ "saveAndRestart": "Lagre og omstart",
+ "saveOnly": "Kun lagre"
+}
diff --git a/web/public/locales/nb_NO/views/events.json b/web/public/locales/nb_NO/views/events.json
index 2176a059c..2bf8bc97c 100644
--- a/web/public/locales/nb_NO/views/events.json
+++ b/web/public/locales/nb_NO/views/events.json
@@ -1,3 +1,35 @@
{
- "camera": "Kamera"
+ "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"
}
diff --git a/web/public/locales/nb_NO/views/recording.json b/web/public/locales/nb_NO/views/recording.json
index 306660fe8..262eb43b0 100644
--- a/web/public/locales/nb_NO/views/recording.json
+++ b/web/public/locales/nb_NO/views/recording.json
@@ -1,3 +1,12 @@
{
- "filter": "Filter"
+ "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/nl/audio.json b/web/public/locales/nl/audio.json
index 32b4afbe8..709be4435 100644
--- a/web/public/locales/nl/audio.json
+++ b/web/public/locales/nl/audio.json
@@ -88,7 +88,7 @@
"yell": "Schreeuwen",
"whoop": "Gejuich",
"chant": "Lied",
- "whistling": "Fluiten",
+ "whistling": "Gefluit",
"hands": "Handen",
"sheep": "Schaap",
"synthetic_singing": "Synthetisch zingen",
@@ -236,7 +236,7 @@
"busy_signal": "In-gesprektoon",
"buzzer": "Zoemer",
"foghorn": "Misthoorn",
- "whistle": "Fluit",
+ "whistle": "Fluiten",
"steam_whistle": "Stoomfluit",
"ratchet": "Ratel",
"gears": "Tandwielen",
diff --git a/web/public/locales/nl/common.json b/web/public/locales/nl/common.json
index 8f8df3606..a0390e67d 100644
--- a/web/public/locales/nl/common.json
+++ b/web/public/locales/nl/common.json
@@ -5,41 +5,45 @@
"untilRestart": "Tot herstart",
"12hours": "12 uur",
"lastWeek": "Vorige week",
- "last7": "Laatste 7 dagen",
- "last30": "Laatste 30 dagen",
+ "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": "Zo juist",
+ "justNow": "Zojuist",
"today": "Vandaag",
"yesterday": "Gisteren",
- "last14": "Laatste 14 dagen",
+ "last14": "Afgelopen 14 dagen",
"thisWeek": "Deze week",
"thisMonth": "Deze maand",
"lastMonth": "Vorige maand",
"1hour": "1 uur",
"pm": "pm",
"am": "am",
- "year": "{{time}} Jaren",
- "mo": "{{time}}maand",
- "month": "{{time}} maanden",
+ "year_one": "{{time}} Jaar",
+ "year_other": "{{time}} Jaren",
+ "mo": "{{time}} maand",
+ "month_one": "{{time}} maand",
+ "month_other": "{{time}} maanden",
"formattedTimestamp2": {
"12hour": "%d-%m %H:%M:%S",
"24hour": "%d %b %H:%M:%S"
},
- "s": "{{time}}seconde",
+ "s": "{{time}}s",
"formattedTimestamp": {
"12hour": "%d %b %H:%M:%S",
"24hour": "%-d %b, %H:%M:%S"
},
"formattedTimestampOnlyMonthAndDay": "%-d %b",
"d": "{{time}}dag",
- "day": "{{time}} dagen",
- "h": "{{time}}uur",
- "hour": "{{time}} uren",
+ "day_one": "{{time}} dag",
+ "day_other": "{{time}} dagen",
+ "h": "{{time}}u",
+ "hour_one": "{{time}} uur",
+ "hour_other": "{{time}} uren",
"m": "{{time}}minuut",
"formattedTimestampWithYear": {
"12hour": "%-d %b %Y, %H:%M",
@@ -49,8 +53,10 @@
"24hour": "%-d %b, %H:%M",
"12hour": "%-d %b, %H:%M"
},
- "minute": "{{time}} minuten",
- "second": "{{time}} seconden"
+ "minute_one": "{{time}} minuut",
+ "minute_other": "{{time}} minuten",
+ "second_one": "{{time}} seconde",
+ "second_other": "{{time}} seconden"
},
"button": {
"enabled": "Ingeschakeld",
@@ -73,7 +79,7 @@
"cameraAudio": "Camera geluid",
"on": "aan",
"copyCoordinates": "Coördinaten kopiëren",
- "delete": "Verwijder",
+ "delete": "Verwijderen",
"yes": "Ja",
"no": "Nee",
"suspended": "Opgeschort",
@@ -107,11 +113,37 @@
"configurationEditor": "Configuratie bewerker",
"languages": "Talen",
"language": {
- "en": "Engels",
+ "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)"
},
"darkMode": {
"label": "Donkere modus",
@@ -121,13 +153,13 @@
"label": "Gebruik de systeeminstellingen voor de lichte of donkere modus"
}
},
- "appearance": "Verschijning",
+ "appearance": "Opmaak",
"theme": {
"blue": "Blauw",
"contrast": "Hoog contrast",
"label": "Thema",
"green": "Groen",
- "nord": "Noord",
+ "nord": "Nord",
"red": "Rood",
"default": "Standaard"
},
@@ -147,7 +179,7 @@
"title": "Documentatie",
"label": "Frigate documentatie"
},
- "review": "Beoordeling",
+ "review": "Beoordeel",
"explore": "Verkennen",
"export": "Exporteren",
"uiPlayground": "Testgebied voor gebruikersinterface",
@@ -174,7 +206,7 @@
"role": {
"title": "Rol",
"admin": "Beheerder",
- "viewer": "Waarnemer",
+ "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": {
diff --git a/web/public/locales/nl/components/dialog.json b/web/public/locales/nl/components/dialog.json
index 42e1477ae..9a55c97aa 100644
--- a/web/public/locales/nl/components/dialog.json
+++ b/web/public/locales/nl/components/dialog.json
@@ -3,7 +3,7 @@
"title": "Weet je zeker dat je Frigate opnieuw wilt opstarten?",
"button": "Herstart",
"restarting": {
- "title": "Frigate herstart",
+ "title": "Frigate wordt opnieuw gestart",
"button": "Forceer herladen nu",
"content": "Deze pagina zal herladen in {{countdown}} seconden."
}
diff --git a/web/public/locales/nl/components/filter.json b/web/public/locales/nl/components/filter.json
index 5c179044f..db41f6b93 100644
--- a/web/public/locales/nl/components/filter.json
+++ b/web/public/locales/nl/components/filter.json
@@ -5,7 +5,9 @@
"short": "Labels",
"title": "Alle labels"
},
- "label": "Labels"
+ "label": "Labels",
+ "count_one": "{{count}} Label",
+ "count_other": "{{count}} Labels"
},
"zones": {
"label": "Zones",
diff --git a/web/public/locales/nl/views/configEditor.json b/web/public/locales/nl/views/configEditor.json
index c75fd77d6..2ce3a8eb4 100644
--- a/web/public/locales/nl/views/configEditor.json
+++ b/web/public/locales/nl/views/configEditor.json
@@ -1,5 +1,5 @@
{
- "documentTitle": "Configuratie-editor - Frigate",
+ "documentTitle": "Configuratie-bewerken - Frigate",
"copyConfig": "Configuratie kopiëren",
"saveAndRestart": "Opslaan en opnieuw opstarten",
"toast": {
@@ -10,6 +10,6 @@
"copyToClipboard": "Configuratie gekopieerd naar klembord."
}
},
- "configEditor": "Configuratie-editor",
+ "configEditor": "Configuratie Bewerken",
"saveOnly": "Alleen opslaan"
}
diff --git a/web/public/locales/nl/views/events.json b/web/public/locales/nl/views/events.json
index 5d35eae5d..b9825ecba 100644
--- a/web/public/locales/nl/views/events.json
+++ b/web/public/locales/nl/views/events.json
@@ -16,17 +16,17 @@
"motion": "Geen bewegingsgegevens gevonden"
},
"events": {
- "aria": "Selecteer evenementen",
- "noFoundForTimePeriod": "Er zijn geen evenementen gevonden voor deze periode.",
- "label": "Evenementen"
+ "aria": "Selecteer activiteiten",
+ "noFoundForTimePeriod": "Er zijn geen activiteiten gevonden voor deze periode.",
+ "label": "Activiteiten"
},
"calendarFilter": {
"last24Hours": "Laatste 24 uur"
},
"alerts": "Mededelingen",
"motion": {
- "label": "Beweging",
- "only": "Alleen beweging"
+ "label": "Bewegingen",
+ "only": "Alleen bewegingen"
},
"allCameras": "Alle camera's",
"markAsReviewed": "Markeren als beoordeeld",
diff --git a/web/public/locales/nl/views/explore.json b/web/public/locales/nl/views/explore.json
index a9cb062aa..8c4f81580 100644
--- a/web/public/locales/nl/views/explore.json
+++ b/web/public/locales/nl/views/explore.json
@@ -57,7 +57,7 @@
"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 gebeurtenisclip is waarin een persoon van links naar rechts loopt. Als het objectkader in de tijdlijn van de gebeurtenis 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."
+ "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."
},
"showAllZones": {
"title": "Toon alle zones",
@@ -91,11 +91,13 @@
"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."
+ "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}}"
+ "regenerate": "Het is niet gelukt om {{provider}} aan te roepen voor een nieuwe beschrijving: {{errorMessage}}",
+ "updatedLPRFailed": "Kentekenplaat bijwerken mislukt: {{errorMessage}}"
}
}
},
@@ -132,7 +134,13 @@
"timestamp": "Tijdstempel",
"regenerateFromThumbnails": "Regeneratie van Thumbnails",
"camera": "Camera",
- "estimatedSpeed": "Geschatte snelheid"
+ "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"
},
"itemMenu": {
"downloadVideo": {
@@ -164,7 +172,8 @@
}
},
"noTrackedObjects": "Geen gevolgde objecten gevonden",
- "trackedObjectsCount": "{{count}} gevolgde objecten ",
+ "trackedObjectsCount_one": "{{count}} gevolgd object ",
+ "trackedObjectsCount_other": "{{count}} gevolgde objecten ",
"searchResult": {
"deleteTrackedObject": {
"toast": {
diff --git a/web/public/locales/nl/views/exports.json b/web/public/locales/nl/views/exports.json
index 101bb9457..4446c29cd 100644
--- a/web/public/locales/nl/views/exports.json
+++ b/web/public/locales/nl/views/exports.json
@@ -1,5 +1,5 @@
{
- "documentTitle": "Export - Frigate",
+ "documentTitle": "Exporteren - Frigate",
"search": "Zoek",
"toast": {
"error": {
diff --git a/web/public/locales/nl/views/search.json b/web/public/locales/nl/views/search.json
index 9c75f4ad4..5c6df23e3 100644
--- a/web/public/locales/nl/views/search.json
+++ b/web/public/locales/nl/views/search.json
@@ -39,7 +39,7 @@
}
},
"tips": {
- "title": "Tekstfilters gebruiken",
+ "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:",
diff --git a/web/public/locales/nl/views/settings.json b/web/public/locales/nl/views/settings.json
index caf5f158d..38a10c8b6 100644
--- a/web/public/locales/nl/views/settings.json
+++ b/web/public/locales/nl/views/settings.json
@@ -5,6 +5,578 @@
"authentication": "Authenticatie-instellingen - Frigate",
"motionTuner": "Motion Tuner - Frigate",
"classification": "Classificatie-instellingen - Frigate",
- "masksAndZones": "Masker- en zone-editor - Frigate"
+ "masksAndZones": "Masker- en zone-editor - Frigate",
+ "object": "Objectinstellingen - Frigate",
+ "general": "Algemene instellingen - Frigate",
+ "frigatePlus": "Frigate+ Instellingen - Frigate"
+ },
+ "menu": {
+ "ui": "Gebruikersinterface",
+ "classification": "Classificatie",
+ "masksAndZones": "Maskers / Zones",
+ "motionTuner": "Bewegingsafsteller",
+ "debug": "Debug",
+ "users": "Gebruikers",
+ "notifications": "Meldingen",
+ "cameras": "Camera-instellingen",
+ "frigateplus": "Frigate+"
+ },
+ "dialog": {
+ "unsavedChanges": {
+ "title": "Je hebt niet-opgeslagen wijzigingen.",
+ "desc": "Wilt je jouw wijzigingen opslaan voordat u verdergaat?"
+ }
+ },
+ "cameraSetting": {
+ "camera": "Camera",
+ "noCamera": "Geen camera"
+ },
+ "general": {
+ "liveDashboard": {
+ "title": "Live-dashboard",
+ "automaticLiveView": {
+ "label": "Automatische liveweergave",
+ "desc": "Schakel automatisch over naar de liveweergave van een camera wanneer er activiteit wordt gedetecteerd. Als u deze optie uitschakelt, worden de statische camerabeelden op het live dashboard slechts eenmaal per minuut bijgewerkt."
+ },
+ "playAlertVideos": {
+ "label": "Meldingen afspelen",
+ "desc": "Standaard worden recente meldingen op het Live dashboard afgespeeld als kleine lusvideo's. Schakel deze optie uit om alleen een statische afbeelding van recente meldingen weer te geven op dit apparaat/browser."
+ }
+ },
+ "title": "Algemene instellingen",
+ "storedLayouts": {
+ "title": "Opgeslagen indelingen",
+ "clearAll": "Alle indelingen wissen",
+ "desc": "De indeling van camera's in een cameragroep kan worden versleept en in formaat worden aangepast. De posities en afmetingen worden opgeslagen in de lokale opslag van je browser."
+ },
+ "cameraGroupStreaming": {
+ "title": "Streaminginstellingen voor cameragroep",
+ "desc": "De streaminginstellingen voor elke cameragroep worden opgeslagen in de lokale opslag van uw browser.",
+ "clearAll": "Alle streaminginstellingen wissen"
+ },
+ "recordingsViewer": {
+ "title": "Opnamebekijker",
+ "defaultPlaybackRate": {
+ "label": "Standaard afspeelsnelheid",
+ "desc": "Standaard afspeelsnelheid voor het afspelen van opnames."
+ }
+ },
+ "calendar": {
+ "firstWeekday": {
+ "label": "Eerste weekdag",
+ "sunday": "Zondag",
+ "monday": "Maandag",
+ "desc": "De eerste dag van de week die in de kalender in de interface wordt weergegeven."
+ },
+ "title": "Kalender"
+ },
+ "toast": {
+ "success": {
+ "clearStoredLayout": "Verwijderde opgeslagen indeling voor {{cameraName}}",
+ "clearStreamingSettings": "Verwijderde streaming-instellingen voor alle cameragroepen."
+ },
+ "error": {
+ "clearStoredLayoutFailed": "Het wissen van de opgeslagen indelingen is mislukt: {{errorMessage}}",
+ "clearStreamingSettingsFailed": "Het wissen van de streaminginstellingen is mislukt: {{errorMessage}}"
+ }
+ }
+ },
+ "classification": {
+ "semanticSearch": {
+ "title": "Semantisch zoeken",
+ "reindexNow": {
+ "label": "Nu opnieuw indexeren",
+ "confirmTitle": "Bevestig herindexering",
+ "confirmButton": "Opnieuw indexeren",
+ "alreadyInProgress": "Het herindexeren is al bezig.",
+ "success": "Het herindexeren is succesvol gestart.",
+ "error": "Het opnieuw indexeren is mislukt: {{errorMessage}}",
+ "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.",
+ "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 Verkennen."
+ },
+ "modelSize": {
+ "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."
+ },
+ "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."
+ }
+ },
+ "readTheDocumentation": "Lees de documentatie",
+ "desc": "Met semantisch zoeken in Frigate kun je getraceerde objecten in je overzichtsitems vinden aan de hand van de afbeelding zelf, een door de gebruiker gedefinieerde tekstbeschrijving of een automatisch gegenereerde beschrijving."
+ },
+ "faceRecognition": {
+ "title": "Gezichtsherkenning",
+ "modelSize": {
+ "label": "Modelgrootte",
+ "desc": "De grootte van het model dat gebruikt wordt voor gezichtsherkenning.",
+ "small": {
+ "title": "klein",
+ "desc": "Met small wordt een FaceNet-model voor gezichtsinbedding gebruikt dat efficiënt werkt op de meeste CPU's."
+ },
+ "large": {
+ "desc": "Het gebruik van groot maakt gebruik van een ArcFace-gezichtsembeddingmodel en wordt automatisch op de GPU uitgevoerd als die beschikbaar is.",
+ "title": "groot"
+ }
+ },
+ "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.",
+ "readTheDocumentation": "Lees de documentatie"
+ },
+ "title": "Classificatie-instellingen",
+ "licensePlateRecognition": {
+ "title": "Kentekenherkenning",
+ "readTheDocumentation": "Lees de documentatie",
+ "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."
+ },
+ "toast": {
+ "success": "Classificatie-instellingen zijn opgeslagen. Start Frigate opnieuw op om de wijzigingen toe te passen.",
+ "error": "Configuratiewijzigingen konden niet worden opgeslagen: {{errorMessage}}"
+ },
+ "birdClassification": {
+ "title": "Vogelclassificatie",
+ "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."
+ }
+ },
+ "camera": {
+ "review": {
+ "title": "Beoordeel",
+ "alerts": "Meldingen ",
+ "detections": "Detecties ",
+ "desc": "Schakel waarschuwingen en detecties voor deze camera in of uit. Wanneer deze zijn uitgeschakeld, worden er geen nieuwe beoordelingsitems aangemaakt."
+ },
+ "reviewClassification": {
+ "objectAlertsTips": "Alle {{alertsLabels}}-objecten op {{cameraName}} worden weergegeven als waarschuwingen.",
+ "zoneObjectAlertsTips": "Alle {{alertsLabels}}-objecten die zijn gedetecteerd in {{zone}} op {{cameraName}} worden weergegeven als waarschuwingen.",
+ "zoneObjectDetectionsTips": {
+ "text": "Alle {{detectionsLabels}}-objecten die in {{zone}} op {{cameraName}} niet zijn gecategoriseerd, worden weergegeven als detecties.",
+ "notSelectDetections": "Alle {{detectionsLabels}}-objecten die in {{zone}} op {{cameraName}} worden gedetecteerd en niet als waarschuwing zijn gecategoriseerd, worden weergegeven als detecties – ongeacht in welke zone ze zich bevinden.",
+ "regardlessOfZoneObjectDetectionsTips": "Alle {{detectionsLabels}}-objecten die op {{cameraName}} niet zijn gecategoriseerd, worden weergegeven als detecties – ongeacht in welke zone ze zich bevinden."
+ },
+ "selectAlertsZones": "Zones selecteren voor waarschuwingen",
+ "selectDetectionsZones": "Selecteer zones voor detecties",
+ "limitDetections": "Beperk detecties tot specifieke zones",
+ "toast": {
+ "success": "Configuratie voor beoordelingsclassificatie is opgeslagen. Herstart Frigate om de wijzigingen toe te passen."
+ },
+ "readTheDocumentation": "Lees de documentatie",
+ "noDefinedZones": "Voor deze camera zijn nog geen zones ingesteld.",
+ "desc": "Frigate categoriseert beoordelingsitems als waarschuwingen en detecties.Standaard worden alle person- en car-objecten als waarschuwingen beschouwd. Je kunt de categorisatie verfijnen door zones te configureren waarin uitsluitend deze objecten gedetecteerd moeten worden.",
+ "title": "Beoordelingsclassificatie",
+ "objectDetectionsTips": "Alle {{detectionsLabels}}-objecten die op {{cameraName}} niet zijn gecategoriseerd, worden weergegeven als detecties, ongeacht in welke zone ze zich bevinden."
+ },
+ "streams": {
+ "desc": "Het uitschakelen van een camera laat Frigate volledig stoppen met het verwerken van de stream van die camera. Detectie, opname en foutopsporing zijn dan niet beschikbaar.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": "Weergave van objectvormfilter", + "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" + }, + "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" + }, + "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": "Selecteer de juiste rol voor deze gebruiker:
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"
+ },
+ "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}}"
+ },
+ "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..."
+ },
+ "toast": {
+ "success": "Frigate+ instellingen zijn opgeslagen. Herstart Frigate om de 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
index 57a5322d3..d40890ada 100644
--- a/web/public/locales/nl/views/system.json
+++ b/web/public/locales/nl/views/system.json
@@ -38,13 +38,13 @@
"general": {
"detector": {
"title": "Detectoren",
- "cpuUsage": "Detector CPU Gebruik",
+ "cpuUsage": "Detector CPU-verbruik",
"memoryUsage": "Detector Geheugen Gebruik",
"inferenceSpeed": "Detector Interferentie Snelheid"
},
"hardwareInfo": {
"title": "Systeem Gegevens",
- "gpuUsage": "GPU Belasting",
+ "gpuUsage": "GPU-verbruik",
"gpuInfo": {
"vainfoOutput": {
"title": "Vainfo Resultaat",
@@ -71,11 +71,11 @@
},
"gpuDecoder": "GPU Decodeerder",
"gpuEncoder": "GPU Encodeerder",
- "gpuMemory": "GPU Geheugen"
+ "gpuMemory": "GPU-geheugen"
},
"otherProcesses": {
"processMemoryUsage": "Process Geheugen Gebruik",
- "processCpuUsage": "Process CPU Belasting",
+ "processCpuUsage": "Process CPU-verbruik",
"title": "Verdere Processen"
},
"title": "Algemeen"
@@ -105,14 +105,14 @@
"title": "Cameras",
"overview": "Overzicht",
"info": {
- "cameraProbeInfo": "{{camera}} Camera Onderzoek Informatie",
- "streamDataFromFFPROBE": "Stream gegevens zijn ontvangen van ffprobe
.",
+ "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": "Camera Opgevraagde Informatie"
+ "title": "Informatie ophalen uit de camerastream"
},
"fps": "FPS:",
"codec": "Codec:",
@@ -137,7 +137,7 @@
}
}
},
- "lastRefreshed": "Laast vernieuwd: ",
+ "lastRefreshed": "Voor het laatst vernieuwd: ",
"stats": {
"ffmpegHighCpuUsage": "{{camera}} zorgt voor hoge FFMPEG CPU belasting ({{ffmpegAvg}}%)",
"detectHighCpuUsage": "{{camera}} zorgt voor hoge detectie CPU belasting ({{detectAvg}}%)",
diff --git a/web/public/locales/pl/common.json b/web/public/locales/pl/common.json
index bfcc8f82c..2c32f14fb 100644
--- a/web/public/locales/pl/common.json
+++ b/web/public/locales/pl/common.json
@@ -23,16 +23,26 @@
"pm": "po południu",
"am": "przed południem",
"yr": "{{time}}r.",
- "year": "{{time}} lat",
+ "year_one": "{{time}} rok",
+ "year_few": "{{time}} lata",
+ "year_many": "{{time}} lat",
"mo": "{{time}}m.",
"d": "{{time}}d.",
- "day": "{{time}} dni",
+ "day_one": "{{time}} dzień",
+ "day_few": "{{time}} dni",
+ "day_many": "{{time}} dni",
"h": "{{time}}godz.",
"m": "{{time}}min.",
"s": "{{time}}s.",
- "month": "{{time}} miesięcy",
- "hour": "{{time}} godzin",
- "minute": "{{time}} minut",
+ "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": "%b %-d, %I:%M:%S %p",
"24hour": "%b %-d, %H:%M:%S"
@@ -50,7 +60,9 @@
"24hour": "%b %-d %Y, %H:%M"
},
"formattedTimestampOnlyMonthAndDay": "%b %-d",
- "second": "{{time}} sekund"
+ "second_one": "{{time}} sekunda",
+ "second_few": "{{time}} sekundy",
+ "second_many": "{{time}} sekund"
},
"unit": {
"speed": {
@@ -105,11 +117,37 @@
"systemLogs": "Logi systemowe",
"languages": "Języki",
"language": {
- "en": "Angielski",
+ "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)"
},
"appearance": "Wygląd",
"darkMode": {
diff --git a/web/public/locales/pl/components/auth.json b/web/public/locales/pl/components/auth.json
index 0967ef424..094e0ca97 100644
--- a/web/public/locales/pl/components/auth.json
+++ b/web/public/locales/pl/components/auth.json
@@ -1 +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
index 0967ef424..2bc3cee46 100644
--- a/web/public/locales/pl/components/camera.json
+++ b/web/public/locales/pl/components/camera.json
@@ -1 +1,83 @@
-{}
+{
+ "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"
+ }
+ }
+ },
+ "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."
+ }
+ }
+ }
+ },
+ "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
index 0967ef424..3d02678b3 100644
--- a/web/public/locales/pl/components/dialog.json
+++ b/web/public/locales/pl/components/dialog.json
@@ -1 +1,116 @@
-{}
+{
+ "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"
+ }
+ }
+ },
+ "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
index c0176e5ed..3923ec726 100644
--- a/web/public/locales/pl/objects.json
+++ b/web/public/locales/pl/objects.json
@@ -23,5 +23,98 @@
"horse": "Koń",
"clock": "Zegar",
"animal": "Zwierzę",
- "bark": "Szczekanie"
+ "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
index 0967ef424..ec3056c53 100644
--- a/web/public/locales/pl/views/configEditor.json
+++ b/web/public/locales/pl/views/configEditor.json
@@ -1 +1,15 @@
-{}
+{
+ "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"
+}
diff --git a/web/public/locales/pl/views/events.json b/web/public/locales/pl/views/events.json
index 187d848af..bf04bfd0a 100644
--- a/web/public/locales/pl/views/events.json
+++ b/web/public/locales/pl/views/events.json
@@ -1,3 +1,35 @@
{
- "camera": "Aparat"
+ "camera": "Aparat",
+ "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"
+ }
}
diff --git a/web/public/locales/pl/views/explore.json b/web/public/locales/pl/views/explore.json
index 0967ef424..7ba919537 100644
--- a/web/public/locales/pl/views/explore.json
+++ b/web/public/locales/pl/views/explore.json
@@ -1 +1,194 @@
-{}
+{
+ "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"
+ },
+ "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."
+ }
+ },
+ "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"
+ },
+ "carousel": {
+ "previous": "Poprzedni slajd",
+ "next": "Następny slajd"
+ },
+ "createObjectMask": "Utwórz maskę obiektu",
+ "adjustAnnotationSettings": "Dostosuj ustawienia adnotacji"
+ },
+ "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": "Zakańczanie",
+ "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
index 0967ef424..dfaf0c33e 100644
--- a/web/public/locales/pl/views/recording.json
+++ b/web/public/locales/pl/views/recording.json
@@ -1 +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
index 0967ef424..3a0cd823b 100644
--- a/web/public/locales/pl/views/search.json
+++ b/web/public/locales/pl/views/search.json
@@ -1 +1,67 @@
-{}
+{
+ "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." + } + }, + "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" + }, + "changeRole": { + "desc": "Aktualizuj uprawnienia dla {{username}}", + "roleInfo": "Wybierz odpowiednią rolę dla tego użytkownika:
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"
+ },
+ "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"
+ },
+ "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."
+ },
+ "toast": {
+ "success": "Ustawienia Frigate+ 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
index 0967ef424..6975ce36e 100644
--- a/web/public/locales/pl/views/system.json
+++ b/web/public/locales/pl/views/system.json
@@ -1 +1,157 @@
-{}
+{
+ "documentTitle": {
+ "cameras": "Statystyki kamer - Frigate",
+ "storage": "Statystyki Magazynowania - Frigate",
+ "general": "Statystyki Ogólne - Frigate",
+ "enrichments": "Statystyki Wzbogaceń - 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"
+ },
+ "title": "Ogólne",
+ "detector": {
+ "title": "Detektory",
+ "inferenceSpeed": "Szybkość wnioskowania detektora",
+ "cpuUsage": "Użycie CPU przez detektor",
+ "memoryUsage": "Użycie pamięci przez detektor"
+ },
+ "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"
+ },
+ "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"
+ }
+ },
+ "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)"
+ },
+ "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"
+ }
+ }
+}
diff --git a/web/public/locales/pt/audio.json b/web/public/locales/pt/audio.json
index 0121d1f5a..714cacc16 100644
--- a/web/public/locales/pt/audio.json
+++ b/web/public/locales/pt/audio.json
@@ -56,7 +56,7 @@
"yodeling": "Yodeling",
"chant": "Canto",
"synthetic_singing": "Canto sintético",
- "rapping": "Rapping",
+ "rapping": "Cantando rap",
"groan": "Gemido",
"snicker": "Risada",
"animal": "Animal",
@@ -146,5 +146,7 @@
"mouse": "Rato",
"vehicle": "Veículo",
"hair_dryer": "Secador de cabelo",
- "toothbrush": "Escova de dentes"
+ "toothbrush": "Escova de dentes",
+ "sink": "Pia",
+ "blender": "Liquidificador"
}
diff --git a/web/public/locales/pt/common.json b/web/public/locales/pt/common.json
index 1894f16ee..807a67d33 100644
--- a/web/public/locales/pt/common.json
+++ b/web/public/locales/pt/common.json
@@ -15,15 +15,27 @@
"24hours": "24 horas",
"pm": "pm",
"am": "am",
- "year": "{{time}} anos",
- "month": "{{time}} meses",
- "day": "{{time}} dias",
+ "year_one": "{{time}} anos",
+ "year_many": "",
+ "year_other": "",
+ "month_one": "{{time}} meses",
+ "month_many": "",
+ "month_other": "",
+ "day_one": "{{time}} dias",
+ "day_many": "",
+ "day_other": "",
"thisMonth": "Esse mês",
"lastMonth": "Mês passado",
"1hour": "1 hora",
- "hour": "{{time}} horas",
- "minute": "{{time}} minutos",
- "second": "{{time}} segundos",
+ "hour_one": "{{time}} horas",
+ "hour_many": "",
+ "hour_other": "",
+ "minute_one": "{{time}} minutos",
+ "minute_many": "",
+ "minute_other": "",
+ "second_one": "{{time}} segundos",
+ "second_many": "",
+ "second_other": "",
"untilForTime": "Até {{time}}",
"untilForRestart": "Até que o Frigate reinicie.",
"untilRestart": "Até reiniciar",
diff --git a/web/public/locales/pt/components/filter.json b/web/public/locales/pt/components/filter.json
index f96361db5..e9a7e89a4 100644
--- a/web/public/locales/pt/components/filter.json
+++ b/web/public/locales/pt/components/filter.json
@@ -5,7 +5,9 @@
"short": "Etiquetas",
"title": "Todas as etiquetas"
},
- "count": "{{count}} etiquetas"
+ "count": "{{count}} etiquetas",
+ "count_one": "{{count}} Etiqueta",
+ "count_other": "{{count}} Etiquetas"
},
"filter": "Filtro",
"zones": {
diff --git a/web/public/locales/pt/components/player.json b/web/public/locales/pt/components/player.json
index d5fafd245..851aa9547 100644
--- a/web/public/locales/pt/components/player.json
+++ b/web/public/locales/pt/components/player.json
@@ -35,8 +35,17 @@
"value": "{{droppedFrames}} quadros"
}
},
- "decodedFrames": "Quadros decodificados:"
+ "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."
+ "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
index e9726e2a3..b67725d94 100644
--- a/web/public/locales/pt/objects.json
+++ b/web/public/locales/pt/objects.json
@@ -80,5 +80,41 @@
"hair_dryer": "Secador de cabelo",
"toothbrush": "Escova de dentes",
"hair_brush": "Escova de Cabelo",
- "squirrel": "Esquilo"
+ "squirrel": "Esquilo",
+ "couch": "Sofá",
+ "tv": "TV",
+ "laptop": "Laptop",
+ "remote": "Remoto",
+ "cell_phone": "Celular",
+ "microwave": "Microondas",
+ "oven": "Forno",
+ "toaster": "Torradeira",
+ "sink": "Pia",
+ "refrigerator": "Refrigerador",
+ "blender": "Liquidificador",
+ "book": "Livro",
+ "vase": "Vaso",
+ "deer": "Veado",
+ "fox": "Raposa",
+ "rabbit": "Coelho",
+ "raccoon": "Guaxinim",
+ "robot_lawnmower": "Robô cortador de grama",
+ "waste_bin": "Lixeira",
+ "on_demand": "Sob demanda",
+ "face": "Rosto",
+ "license_plate": "Placa",
+ "package": "Pacote",
+ "bbq_grill": "Churrasqueira",
+ "amazon": "Amazonas",
+ "usps": "USPS",
+ "ups": "UPS",
+ "fedex": "FedEx",
+ "dhl": "DHL",
+ "an_post": "Uma postagem",
+ "purolator": "Purolator",
+ "postnl": "PostNL",
+ "nzpost": "NZPost",
+ "postnord": "PostNord",
+ "gls": "GLS",
+ "dpd": "DPD"
}
diff --git a/web/public/locales/pt/views/explore.json b/web/public/locales/pt/views/explore.json
index 5f9141e27..6b5425784 100644
--- a/web/public/locales/pt/views/explore.json
+++ b/web/public/locales/pt/views/explore.json
@@ -16,7 +16,8 @@
"setup": {
"visionModel": "Modelo de visão",
"textModel": "Modelo de texto",
- "textTokenizer": "Tokenizador de texto"
+ "textTokenizer": "Tokenizador de texto",
+ "visionModelFeatureExtractor": "Extrator de características de modelo de visão"
},
"context": "O Frigate está baixando 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": {
@@ -71,6 +72,8 @@
"carousel": {
"previous": "Slide anterior",
"next": "Próximo slide"
- }
+ },
+ "noImageFound": "Nenhuma imagem encontrada para este carimbo de data/hora.",
+ "createObjectMask": "Criar Máscara de Objeto"
}
}
diff --git a/web/public/locales/pt/views/faceLibrary.json b/web/public/locales/pt/views/faceLibrary.json
index 52cd27456..042767134 100644
--- a/web/public/locales/pt/views/faceLibrary.json
+++ b/web/public/locales/pt/views/faceLibrary.json
@@ -33,7 +33,9 @@
},
"button": {
"addFace": "Adicionar rosto",
- "uploadImage": "Carregar imagem"
+ "uploadImage": "Carregar imagem",
+ "deleteFaceAttempts": "Apagar tentativas de detecção facial",
+ "reprocessFace": "Reprocessar Rosto"
},
"imageEntry": {
"validation": {
@@ -47,13 +49,25 @@
"toast": {
"success": {
"updatedFaceScore": "Pontuação facial atualizada com sucesso.",
- "trainedFace": "Rosto treinado com sucesso."
+ "trainedFace": "Rosto treinado com sucesso.",
+ "deletedFace_one": "{{count}} rosto excluído com sucesso.",
+ "deletedFace_many": "{{count}} rostos excluídos com sucesso.",
+ "deletedFace_other": "{{count}} rostos excluídos com sucesso.",
+ "deletedName_one": "{{count}} rosto foi excluído com sucesso.",
+ "deletedName_many": "{{count}} rostos foram excluídos com sucesso.",
+ "deletedName_other": "{{count}} rostos foram excluídos com sucesso.",
+ "uploadedImage": "Imagem carregada com sucesso.",
+ "addFaceLibrary": "{{name}} foi adicionado com sucesso à biblioteca de rostos!"
},
"error": {
"uploadingImageFailed": "Falha ao carregar a imagem: {{errorMessage}}",
"deleteFaceFailed": "Falha ao excluir: {{errorMessage}}",
- "deleteNameFailed": "Falha ao excluir nome: {{errorMessage}}"
+ "deleteNameFailed": "Falha ao excluir nome: {{errorMessage}}",
+ "addFaceLibraryFailed": "Falhou ao definir nome do rosto: {{errorMessage}}",
+ "trainFailed": "Falhou ao treinar: {{errorMessage}}",
+ "updateFaceScoreFailed": "Falhou ao atualizar pontuação da face: {{errorMessage}}"
}
},
- "readTheDocs": "Leia a documentação"
+ "readTheDocs": "Leia a documentação",
+ "trainFaceAs": "Treinar rosto como:"
}
diff --git a/web/public/locales/pt/views/search.json b/web/public/locales/pt/views/search.json
index f7c35e3da..c4ea3f40a 100644
--- a/web/public/locales/pt/views/search.json
+++ b/web/public/locales/pt/views/search.json
@@ -24,7 +24,9 @@
"max_score": "Pontuação máxima",
"min_speed": "Velocidade mínima",
"max_speed": "Velocidade máxima",
- "recognized_license_plate": "Placa reconhecida"
+ "recognized_license_plate": "Placa reconhecida",
+ "has_clip": "Tem Clipe",
+ "has_snapshot": "Tem Captura de Imagem"
},
"searchType": {
"thumbnail": "Miniatura",
@@ -32,11 +34,21 @@
},
"header": {
"noFilters": "Filtros",
- "activeFilters": "Filtros ativos"
+ "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:"
+ "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
"
+ },
+ "title": "Como usar filtros de texto"
+ },
+ "toast": {
+ "error": {
+ "beforeDateBeLaterAfter": "A data 'antes' deve ser posterior à data 'depois'.",
+ "minScoreMustBeLessOrEqualMaxScore": "O 'min_score' deve ser inferior ou igual ao 'max_score'.",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "O 'min_speed' deve ser inferior ou igual ao 'max_speed'."
}
}
},
@@ -44,6 +56,8 @@
"search": "Pesquisar..."
},
"similaritySearch": {
- "title": "Pesquisa de similaridade"
+ "title": "Pesquisa de similaridade",
+ "active": "Busca de semelhança ativa",
+ "clear": "Pesquisa de semelhança clara"
}
}
diff --git a/web/public/locales/pt/views/settings.json b/web/public/locales/pt/views/settings.json
index f1658ff24..6006af646 100644
--- a/web/public/locales/pt/views/settings.json
+++ b/web/public/locales/pt/views/settings.json
@@ -36,7 +36,12 @@
"liveDashboard": {
"title": "Painel ao vivo",
"automaticLiveView": {
- "label": "Visualização ao vivo automática"
+ "label": "Visualização ao vivo automática",
+ "desc": "Alternar automaticamente para a visualização ao vivo de uma câmera quando uma atividade for detectada. Desativar esta opção faz com que as imagens estáticas das câmeras no painel Ao Vivo sejam atualizadas apenas uma vez por minuto."
+ },
+ "playAlertVideos": {
+ "label": "Reproduzir vídeos de alerta",
+ "desc": "Por padrão, alertas recentes no painel ao vivo são reproduzidos como vídeos curtos em loop. Desative esta opção para mostrar apenas uma imagem estática dos alertas recentes neste dispositivo/navegador."
}
},
"calendar": {
@@ -44,32 +49,93 @@
"firstWeekday": {
"label": "Primeiro dia da semana",
"sunday": "Domingo",
- "monday": "Segunda-feira"
+ "monday": "Segunda-feira",
+ "desc": "O dia em que as semanas do calendário de revisão começam."
}
},
"storedLayouts": {
- "title": "Layouts armazenados"
+ "title": "Layouts armazenados",
+ "desc": "O layout das câmeras em um grupo de câmeras pode ser arrastado/redimensionado. As posições são armazenadas no armazenamento local do seu navegador.",
+ "clearAll": "Limpar todos os layouts"
},
"recordingsViewer": {
"defaultPlaybackRate": {
- "label": "Taxa de reprodução padrão"
+ "label": "Taxa de reprodução padrão",
+ "desc": "Taxa de reprodução padrão para a reprodução das gravações."
+ },
+ "title": "Visualizador de gravações"
+ },
+ "cameraGroupStreaming": {
+ "desc": "As configurações de transmissão de cada grupo de câmeras são armazenadas no armazenamento local do seu navegador.",
+ "title": "Configurações de transmissão do grupo de câmeras",
+ "clearAll": "Limpar todas as configurações de transmissão"
+ },
+ "toast": {
+ "success": {
+ "clearStreamingSettings": "Configurações de transmissão para todos os grupos de câmeras limpas.",
+ "clearStoredLayout": "Limpo layout armazenado para {{cameraName}}"
+ },
+ "error": {
+ "clearStoredLayoutFailed": "Falha ao limpar o layout armazenado: {{errorMessage}}",
+ "clearStreamingSettingsFailed": "Falha ao limpar as configurações de transmissão: {{errorMessage}}"
}
}
},
"classification": {
"faceRecognition": {
"modelSize": {
- "label": "Tamanho do modelo"
+ "label": "Tamanho do modelo",
+ "small": {
+ "title": "pequeno",
+ "desc": "Usar pequeno utiliza um modelo de incorporação facial FaceNet que é eficiente na maioria dos CPUs."
+ },
+ "large": {
+ "title": "grande",
+ "desc": "Usar grande utiliza um modelo de incorporação facial ArcFace e será executado automaticamente na GPU, se aplicável."
+ },
+ "desc": "O tamanho do modelo utilizado para o reconhecimento facial."
},
- "readTheDocumentation": "Leia a documentação"
+ "readTheDocumentation": "Leia a documentação",
+ "title": "Reconhecimento facial",
+ "desc": "O reconhecimento facial permite que pessoas sejam atribuídas a nomes e, quando o rosto delas for reconhecido, o Frigate atribuirá o nome da pessoa como um sub-rótulo. Essa informação é incluída na interface do usuário, filtros e também nas notificações."
},
"licensePlateRecognition": {
- "readTheDocumentation": "Leia a documentação"
+ "readTheDocumentation": "Leia a documentação",
+ "title": "Reconhecimento de placas de veículo",
+ "desc": "O Frigate pode reconhecer placas de veículos e adicionar automaticamente os caracteres detectados ao campo placa_de_veículo_reconhecida ou um nome conhecido como sub_rótulo para objetos do tipo carro. Um caso de uso comum pode ser ler as placas de veículos que entram em uma garagem ou os carros que passam por uma rua."
},
"semanticSearch": {
- "readTheDocumentation": "Leia a documentação"
+ "readTheDocumentation": "Leia a documentação",
+ "title": "Pesquisa semântica",
+ "reindexNow": {
+ "label": "Reindexar agora",
+ "desc": "A reindexação irá regenerar as incorporações de todos os objetos rastreados. Esse processo é executado em segundo plano e pode sobrecarregar seu CPU e levar um bom tempo, dependendo do número de objetos rastreados que você possui.",
+ "confirmTitle": "Confirmar reindexação",
+ "confirmDesc": "Você tem certeza de que deseja reindexar todos as incorporações dos objetos rastreados? Esse processo será executado em segundo plano, mas pode sobrecarregar seu CPU e levar um bom tempo. Você pode acompanhar o progresso na página Explorar.",
+ "confirmButton": "Reindexar",
+ "alreadyInProgress": "A reindexação já está em andamento.",
+ "error": "Falha ao iniciar a reindexação: {{errorMessage}}",
+ "success": "Reindexação iniciada com sucesso."
+ },
+ "modelSize": {
+ "label": "Tamanho do modelo",
+ "desc": "O tamanho do modelo utilizado para as incorporações de pesquisa semântica.",
+ "small": {
+ "title": "pequeno",
+ "desc": "Usar pequeno utiliza uma versão quantizada do modelo, que usa menos RAM e executa mais rápido no CPU, com uma diferença insignificante na qualidade da incorporação."
+ },
+ "large": {
+ "title": "grande",
+ "desc": "Usar grande utiliza o modelo completo do Jina e será executado automaticamente na GPU, se aplicável."
+ }
+ },
+ "desc": "A Pesquisa Semântica no Frigate permite que você encontre objetos rastreados dentro dos itens de revisão usando a imagem em si, uma descrição de texto definida pelo usuário ou uma descrição gerada automaticamente."
},
- "title": "Configurações de classificação"
+ "title": "Configurações de classificação",
+ "toast": {
+ "success": "As configurações de classificação foram salvas. Reinicie o Frigate para aplicar as alterações.",
+ "error": "Falha ao salvar as alterações de configuração: {{errorMessage}}"
+ }
},
"notification": {
"globalSettings": {
@@ -101,10 +167,131 @@
},
"polygonAreaTooLarge": {
"documentation": "Leia a documentação"
- }
+ },
+ "label": "Máscara de movimento",
+ "desc": {
+ "documentation": "Documentação"
+ },
+ "clickDrawPolygon": "Clique para desenhar um polígono na imagem."
},
"zones": {
- "label": "Zonas"
+ "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âmera 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."
+ },
+ "speedThreshold": {
+ "title": "Limite 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âmera.",
+ "alreadyExists": "Já existe uma zona com esse nome para esta câmera."
+ }
+ },
+ "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."
+ }
+ }
+ },
+ "objectMasks": {
+ "label": "Máscaras de objetos",
+ "clickDrawPolygon": "Clique para desenhar um polígono na imagem.",
+ "desc": {
+ "documentation": "Documentação"
+ },
+ "point_one": "{{count}} ponto",
+ "point_many": "{{count}} pontos",
+ "point_other": "{{count}} pontos",
+ "objects": {
+ "allObjectTypes": "Todos os tipos de objeto",
+ "title": "Objetos"
+ }
}
},
"debug": {
@@ -117,7 +304,46 @@
},
"camera": {
"reviewClassification": {
- "readTheDocumentation": "Leia a documentação"
+ "readTheDocumentation": "Leia a documentação",
+ "title": "Classificação de Revisão",
+ "noDefinedZones": "Nenhuma zona está definida para esta câmera.",
+ "objectAlertsTips": "Todos os objetos {{alertsLabels}} na câmera {{cameraName}} serão exibidos como Alertas.",
+ "zoneObjectDetectionsTips": {
+ "text": "Todos os objetos {{detectionsLabels}} não categorizados na zona {{zone}} na câmera {{cameraName}} serão exibidos como Detecções.",
+ "regardlessOfZoneObjectDetectionsTips": "Todos os objetos {{detectionsLabels}} não categorizados na câmera {{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âmera {{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 revisão 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 revisão configurando as zonas necessárias para eles.",
+ "objectDetectionsTips": "Todos os objetos {{detectionsLabels}} não categorizados na câmera {{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âmera {{cameraName}} serão exibidos como Alertas.",
+ "toast": {
+ "success": "A configuração de classificação de revisão foi salva. Reinicie o Frigate para aplicar as alterações."
+ }
+ },
+ "title": "Configurações da câmera",
+ "streams": {
+ "title": "fluxos",
+ "desc": "Desativar uma câmera interrompe completamente o processamento dos fluxos dessa câmera pelo Frigate. Detecção, gravação e depuração ficarão indisponíveis.ffprobe
."
},
"framesAndDetections": "Quadros / Detecções",
"label": {
@@ -72,20 +82,30 @@
"skipped": "pulado",
"ffmpeg": "ffmpeg"
},
- "overview": "Visão geral"
+ "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âmera: {{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"
+ "healthy": "O sistema está saudável",
+ "reindexingEmbeddings": "Reindexando incorporações ({{processed}}% completo)"
},
"general": {
"title": "Geral",
"detector": {
"title": "Detectores",
"cpuUsage": "Uso da CPU do detector",
- "memoryUsage": "Uso da memória do detector"
+ "memoryUsage": "Uso da memória do detector",
+ "inferenceSpeed": "Velocidade de Inferência do Detector"
},
"hardwareInfo": {
"title": "Informações de hardware",
@@ -96,15 +116,32 @@
"driver": "Driver: {{driver}}",
"vbios": "Informação VBios: {{vbios}}",
"name": "Nome: {{name}}",
- "cudaComputerCapability": "Capacidade de computação CUDA: {{cuda_compute}}"
+ "cudaComputerCapability": "Capacidade de computação CUDA: {{cuda_compute}}",
+ "title": "Saída Nvidia SMI"
},
"copyInfo": {
"label": "Copiar informações da GPU"
+ },
+ "closeInfo": {
+ "label": "Fechar informações da GPU"
+ },
+ "toast": {
+ "success": "Informações da 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": "Codificador de GPU",
+ "gpuDecoder": "Decodificador de GPU"
},
"otherProcesses": {
- "title": "Outros processos"
+ "title": "Outros processos",
+ "processCpuUsage": "Uso de CPU do processo",
+ "processMemoryUsage": "Uso de memória do processo"
}
},
"enrichments": {
diff --git a/web/public/locales/ro/audio.json b/web/public/locales/ro/audio.json
new file mode 100644
index 000000000..d49651c15
--- /dev/null
+++ b/web/public/locales/ro/audio.json
@@ -0,0 +1,34 @@
+{
+ "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",
+ "bicycle": "Bicicleta",
+ "car": "Masina",
+ "cat": "Pisica",
+ "animal": "Animal",
+ "goat": "Capra",
+ "keyboard": "Tastatura",
+ "vehicle": "Vehicul",
+ "sink": "Chiuveta",
+ "scissors": "Foarfeca",
+ "hair_dryer": "Uscator de Par",
+ "door": "Usa",
+ "blender": "Blender",
+ "mouse": "Mouse",
+ "clock": "Ceas",
+ "toothbrush": "Periuta de Dinti",
+ "bark": "Latrat"
+}
diff --git a/web/public/locales/ro/common.json b/web/public/locales/ro/common.json
new file mode 100644
index 000000000..26941ce3e
--- /dev/null
+++ b/web/public/locales/ro/common.json
@@ -0,0 +1,8 @@
+{
+ "time": {
+ "untilForTime": "Pana la {{time}}",
+ "untilForRestart": "Pana la repornirea Frigate.",
+ "untilRestart": "Pana la repornire",
+ "ago": "{{timeAgo}} in urma"
+ }
+}
diff --git a/web/public/locales/ro/components/auth.json b/web/public/locales/ro/components/auth.json
new file mode 100644
index 000000000..918a0435b
--- /dev/null
+++ b/web/public/locales/ro/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "user": "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..8ee971300
--- /dev/null
+++ b/web/public/locales/ro/components/camera.json
@@ -0,0 +1,43 @@
+{
+ "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"
+ }
+ }
+ },
+ "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..203cb5424
--- /dev/null
+++ b/web/public/locales/ro/components/dialog.json
@@ -0,0 +1,40 @@
+{
+ "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"
+ }
+ },
+ "submitToPlus": {
+ "label": "Trimite catre Frigate+"
+ }
+ }
+ },
+ "recording": {
+ "button": {
+ "deleteNow": "Sterge Acum"
+ }
+ }
+}
diff --git a/web/public/locales/ro/components/filter.json b/web/public/locales/ro/components/filter.json
new file mode 100644
index 000000000..785575a32
--- /dev/null
+++ b/web/public/locales/ro/components/filter.json
@@ -0,0 +1,10 @@
+{
+ "filter": "Filtru",
+ "labels": {
+ "label": "Etichete",
+ "all": {
+ "title": "Toate etichetele",
+ "short": "Etichete"
+ }
+ }
+}
diff --git a/web/public/locales/ro/components/icons.json b/web/public/locales/ro/components/icons.json
new file mode 100644
index 000000000..04b42b26f
--- /dev/null
+++ b/web/public/locales/ro/components/icons.json
@@ -0,0 +1,8 @@
+{
+ "iconPicker": {
+ "selectIcon": "Selecteaza o pictograma",
+ "search": {
+ "placeholder": "Cauta o pictograma..."
+ }
+ }
+}
diff --git a/web/public/locales/ro/components/input.json b/web/public/locales/ro/components/input.json
new file mode 100644
index 000000000..8faa6219a
--- /dev/null
+++ b/web/public/locales/ro/components/input.json
@@ -0,0 +1,10 @@
+{
+ "button": {
+ "downloadVideo": {
+ "label": "Descarca Video",
+ "toast": {
+ "success": "A inceput descarcarea clipului ce contine articolul revizuit."
+ }
+ }
+ }
+}
diff --git a/web/public/locales/ro/components/player.json b/web/public/locales/ro/components/player.json
new file mode 100644
index 000000000..8a1bea151
--- /dev/null
+++ b/web/public/locales/ro/components/player.json
@@ -0,0 +1,51 @@
+{
+ "noRecordingsFoundForThisTime": "Nu au fost gasite inregistrari in perioada de timp mentionata",
+ "noPreviewFound": "Nu a fost gasita o Previzualizare",
+ "noPreviewFoundFor": "Nu exista Previzualizari pentru {{cameraName}}",
+ "submitFrigatePlus": {
+ "title": "Trimiteti acest cadru catre Frigate+?",
+ "submit": "Trimite"
+ },
+ "livePlayerRequiredIOSVersion": "iOS 17.1 sau mai recent este necesar pentru acest tip de stream live.",
+ "streamOffline": {
+ "title": "Stream Offline",
+ "desc": "Nici un cadru nu a fost receptionat de la streamul {{cameraName}} 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..b934485d0
--- /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": "Mouse",
+ "keyboard": "Tastatura",
+ "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..45f667989
--- /dev/null
+++ b/web/public/locales/ro/views/configEditor.json
@@ -0,0 +1,15 @@
+{
+ "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"
+ }
+ }
+}
diff --git a/web/public/locales/ro/views/events.json b/web/public/locales/ro/views/events.json
new file mode 100644
index 000000000..7d41a7d7b
--- /dev/null
+++ b/web/public/locales/ro/views/events.json
@@ -0,0 +1,35 @@
+{
+ "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",
+ "detections": "Detectii"
+}
diff --git a/web/public/locales/ro/views/explore.json b/web/public/locales/ro/views/explore.json
new file mode 100644
index 000000000..6ecec564d
--- /dev/null
+++ b/web/public/locales/ro/views/explore.json
@@ -0,0 +1,20 @@
+{
+ "documentTitle": "Exploreaza - Frigate",
+ "generativeAI": "AI Generativ",
+ "exploreIsUnavailable": {
+ "title": "Explorarea este Indisponibila",
+ "embeddingsReindexing": {
+ "startingUp": "Porneste...",
+ "estimatedTime": "Timp ramas estimat:",
+ "finishingShortly": "Termina curand"
+ }
+ },
+ "type": {
+ "details": "detalii"
+ },
+ "objectLifecycle": {
+ "lifecycleItemDesc": {
+ "visible": "{{label}} detectata"
+ }
+ }
+}
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..d5128c338
--- /dev/null
+++ b/web/public/locales/ro/views/faceLibrary.json
@@ -0,0 +1,9 @@
+{
+ "description": {
+ "addFace": "Parcurge adaugare unei colectii noi la Libraria de Fete",
+ "placeholder": "Introduceti un nume pentru aceasta colectie"
+ },
+ "details": {
+ "person": "Persoana"
+ }
+}
diff --git a/web/public/locales/ro/views/live.json b/web/public/locales/ro/views/live.json
new file mode 100644
index 000000000..21ffaa8b8
--- /dev/null
+++ b/web/public/locales/ro/views/live.json
@@ -0,0 +1,5 @@
+{
+ "documentTitle": "Live - Frigate",
+ "documentTitle.withCamera": "{{camera}} - Live - Frigate",
+ "lowBandwidthMode": "Mod Latime de Banda Limitata"
+}
diff --git a/web/public/locales/ro/views/recording.json b/web/public/locales/ro/views/recording.json
new file mode 100644
index 000000000..1b96b7c42
--- /dev/null
+++ b/web/public/locales/ro/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "filter": "Filtru",
+ "export": "Exporta",
+ "calendar": "Calendar",
+ "filters": "Filtre",
+ "toast": {
+ "error": {
+ "endTimeMustAfterStartTime": "Timpul de sfarsit trebuie sa fie dupa cel de start",
+ "noValidTimeSelected": "Niciun interval de timp valid nu a fost selectat"
+ }
+ }
+}
diff --git a/web/public/locales/ro/views/search.json b/web/public/locales/ro/views/search.json
new file mode 100644
index 000000000..e5131006f
--- /dev/null
+++ b/web/public/locales/ro/views/search.json
@@ -0,0 +1,5 @@
+{
+ "search": "Cauta",
+ "savedSearches": "Cautari Salvate",
+ "searchFor": "Cauta {{inputValue}}"
+}
diff --git a/web/public/locales/ro/views/settings.json b/web/public/locales/ro/views/settings.json
new file mode 100644
index 000000000..9f9f7d1f5
--- /dev/null
+++ b/web/public/locales/ro/views/settings.json
@@ -0,0 +1,7 @@
+{
+ "documentTitle": {
+ "authentication": "Setari de Autentificcare - Frigate",
+ "camera": "Setari Camera - Frigate",
+ "default": "Setari - Frigate"
+ }
+}
diff --git a/web/public/locales/ro/views/system.json b/web/public/locales/ro/views/system.json
new file mode 100644
index 000000000..2c1f00c5a
--- /dev/null
+++ b/web/public/locales/ro/views/system.json
@@ -0,0 +1,7 @@
+{
+ "documentTitle": {
+ "storage": "Statistici Stocare - Frigate",
+ "cameras": "Statistici Camere - Frigate",
+ "general": "Statistici Generale - Frigate"
+ }
+}
diff --git a/web/public/locales/ru/audio.json b/web/public/locales/ru/audio.json
index 7018b1115..953c0f688 100644
--- a/web/public/locales/ru/audio.json
+++ b/web/public/locales/ru/audio.json
@@ -26,7 +26,7 @@
"gasp": "Вздох",
"pant": "Пыхтение",
"snort": "Фырканье",
- "sniff": "Принюхивание",
+ "sniff": "Нюхание",
"burping": "Отрыжка",
"cough": "Кашель",
"run": "Бег",
@@ -38,6 +38,392 @@
"gargling": "Полоскание горла",
"stomach_rumble": "Урчание живота",
"hiccup": "Икание",
- "fart": "Газы",
- "footsteps": "Шаги"
+ "fart": "Пукание",
+ "footsteps": "Шаги",
+ "chant": "Песнопение",
+ "hands": "Руки",
+ "finger_snapping": "Щелкать пальцами",
+ "clapping": "Хлопать",
+ "moo": "Мычание",
+ "cowbell": "Коровий колокольчик",
+ "heart_murmur": "Шум в сердце",
+ "cheering": "Ликование",
+ "applause": "Аплодисменты",
+ "chatter": "Болтовня",
+ "crowd": "Толпа",
+ "children_playing": "Игра детей",
+ "animal": "Зверь",
+ "pets": "Домашние животные",
+ "dog": "Собака",
+ "bark": "Лай",
+ "yip": "Тявкать",
+ "howl": "Вой",
+ "whimper_dog": "Собачий скулеж",
+ "cat": "Кошка",
+ "purr": "Мурлыканье",
+ "meow": "Мяуканье",
+ "hiss": "Шипение",
+ "growling": "Рычать",
+ "bow_wow": "Гавканье",
+ "heartbeat": "Сердце биение",
+ "caterwaul": "Кошачий вой",
+ "horse": "Лошадь",
+ "clip_clop": "Цоканье",
+ "neigh": "Ржание",
+ "livestock": "Скот",
+ "cattle": "Крупный рогатый скот",
+ "pig": "Свинья",
+ "oink": "Хрюканье",
+ "bleat": "Блеяние",
+ "sheep": "Овца",
+ "fowl": "Домашняя птица",
+ "goat": "Коза",
+ "chicken": "Курица",
+ "cluck": "Кудахтанье",
+ "cock_a_doodle_doo": "Кукареканье",
+ "turkey": "Индейка",
+ "gobble": "Бормотание индейки",
+ "duck": "Утка",
+ "quack": "Кряканье",
+ "goose": "Гусь",
+ "honk": "Гоготание",
+ "wild_animals": "Дикие животные",
+ "roaring_cats": "Рычащие кошки",
+ "roar": "Рычание",
+ "chirp": "Чириканье",
+ "squawk": "Птичий крик",
+ "pigeon": "Голубь",
+ "coo": "Воркование",
+ "crow": "Ворона",
+ "caw": "Карканье",
+ "owl": "Сова",
+ "hoot": "Уханье",
+ "flapping_wings": "Хлопание крыльев",
+ "dogs": "Собаки",
+ "rats": "Крысы",
+ "mouse": "Мышь",
+ "insect": "Насекомое",
+ "cricket": "Сверчок",
+ "mosquito": "Комар",
+ "fly": "Муха",
+ "buzz": "Жужжание",
+ "frog": "Лягушка",
+ "croak": "Кваканье",
+ "snake": "Змея",
+ "rattle": "Треск",
+ "music": "Музыка",
+ "musical_instrument": "Музыкальный инструмент",
+ "whale_vocalization": "Пение кита",
+ "plucked_string_instrument": "Щипковый струнный инструмент",
+ "guitar": "Гитара",
+ "patter": "Шорох",
+ "bass_guitar": "Бас-гитара",
+ "steel_guitar": "Стальная гитара",
+ "tapping": "Постукивание",
+ "car": "Автомобиль",
+ "motorcycle": "Мотоцикл",
+ "bicycle": "Велосипед",
+ "bird": "Птица",
+ "electric_guitar": "Электрогитара",
+ "acoustic_guitar": "Акустическая гитара",
+ "scream": "Крик",
+ "strum": "Звук струн",
+ "banjo": "Банджо",
+ "zither": "Цитра",
+ "ukulele": "Укулеле",
+ "keyboard": "Клавишный инструмент",
+ "electric_piano": "Электропианино",
+ "organ": "Орган",
+ "electronic_organ": "Электроорган",
+ "synthesizer": "Синтезатор",
+ "hammond_organ": "Орган Хаммонда",
+ "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": "Струнная секция",
+ "mandolin": "Мандолина",
+ "piano": "Пианино",
+ "sitar": "Ситар",
+ "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": "Соул",
+ "bluegrass": "Блюграсс",
+ "funk": "Фанк",
+ "middle_eastern_music": "Ближневосточная музыка",
+ "jazz": "Джаз",
+ "disco": "Диско",
+ "classical_music": "Классическая музыка",
+ "opera": "Опера",
+ "house_music": "Хаус",
+ "techno": "Техно",
+ "dubstep": "Дабстеп",
+ "drum_and_bass": "Драм-н-бейс",
+ "electronica": "Электроника",
+ "electronic_dance_music": "Электронная танцевальная музыка",
+ "ambient_music": "Эмбиент",
+ "music_of_latin_america": "Латиноамериканская музыка",
+ "salsa_music": "Сальса",
+ "flamenco": "Фламенко",
+ "blues": "Блюз",
+ "music_for_children": "Детская музыка",
+ "new-age_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": "Водопад",
+ "gurgling": "Журчание",
+ "fire": "Огонь",
+ "crackle": "Потрескивание",
+ "vehicle": "Транспорт",
+ "boat": "Лодка",
+ "sailboat": "Парусник",
+ "rowboat": "Вёсельная лодка",
+ "motorboat": "Моторная лодка",
+ "ship": "Корабль",
+ "motor_vehicle": "Моторный транспорт",
+ "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": "Полицейский автомобиль",
+ "fire_engine": "Пожарная машина",
+ "rail_transport": "Рельсовый транспорт",
+ "train": "Поезд",
+ "train_whistle": "Свисток поезда",
+ "train_horn": "Гудок поезда",
+ "railroad_car": "Железнодорожный вагон",
+ "train_wheels_squealing": "Визг колес поезда",
+ "subway": "Метро",
+ "aircraft": "Воздушное судно",
+ "aircraft_engine": "Двигатель воздушного судна",
+ "jet_engine": "Реактивный двигатель",
+ "propeller": "Пропеллер",
+ "fixed-wing_aircraft": "Самолет с неподвижным крылом",
+ "skateboard": "Скейтборд",
+ "engine": "Двигатель",
+ "light_engine": "Легкий двигатель",
+ "dental_drill's_drill": "Стоматологическая бормашина",
+ "medium_engine": "Средний двигатель",
+ "heavy_engine": "Тяжёлый двигатель",
+ "engine_knocking": "Детонация двигателя",
+ "engine_starting": "Запуск двигателя",
+ "idling": "Холостой ход",
+ "accelerating": "Ускорение",
+ "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": "Зубная щетка",
+ "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": "Сирена гражданской обороны",
+ "foghorn": "Туманный горн",
+ "whistle": "Свисток",
+ "steam_whistle": "Паровой свисток",
+ "mechanisms": "Механизмы",
+ "clock": "Часы",
+ "tick": "Тик",
+ "tick-tock": "Тик-так",
+ "gears": "Шестерни",
+ "pulleys": "Шкивы",
+ "sewing_machine": "Швейная машинка",
+ "mechanical_fan": "Механический вентилятор",
+ "printer": "Принтер",
+ "camera": "Камера",
+ "single-lens_reflex_camera": "Зеркальная камера",
+ "tools": "Инструменты",
+ "sawing": "Распиловка",
+ "filing": "Звук напильника",
+ "sanding": "Шлифовка",
+ "power_tool": "Электроинструмент",
+ "drill": "Дрель",
+ "explosion": "Взрыв",
+ "gunshot": "Выстрел",
+ "machine_gun": "Автомат",
+ "fusillade": "Оружейная очередь",
+ "artillery_fire": "Артиллерийский огонь",
+ "burst": "Очередь выстрелов",
+ "eruption": "Извержение",
+ "boom": "Бум",
+ "wood": "Дерево",
+ "chop": "Рубка",
+ "splinter": "Щепка",
+ "glass": "Стекло",
+ "crack": "Трещина",
+ "chink": "Звон",
+ "shatter": "Разбитие",
+ "silence": "Тишина",
+ "sound_effect": "Звуковой эффект",
+ "environmental_noise": "Шум окружающей среды",
+ "static": "Статический шум",
+ "field_recording": "Полевая запись",
+ "country": "Кантри",
+ "vocal_music": "Вокальная музыка",
+ "electronic_music": "Электронная музыка",
+ "folk_music": "Фолк-музыка",
+ "trance_music": "Транс",
+ "swing_music": "Свинг",
+ "reggae": "Регги",
+ "waves": "Волны",
+ "ambulance": "Скорая помощь",
+ "helicopter": "Вертолет",
+ "radio": "Радио",
+ "lawn_mower": "Газонокосилка",
+ "electric_toothbrush": "Электрическая зубная щетка",
+ "air_conditioning": "Кондиционер",
+ "toot": "Гудок",
+ "traffic_noise": "Дорожный шум",
+ "ocean": "Океан",
+ "steam": "Пар",
+ "car_alarm": "Автомобильная сигнализация",
+ "buzzer": "Зуммер",
+ "chainsaw": "Цепная пила",
+ "door": "Дверь",
+ "doorbell": "Дверной звонок",
+ "smoke_detector": "Датчик дыма",
+ "white_noise": "Белый шум",
+ "cash_register": "Касса",
+ "vacuum_cleaner": "Пылесос",
+ "fire_alarm": "Пожарная сигнализация",
+ "ratchet": "Трещотка",
+ "cap_gun": "Игрушечный пистолет",
+ "fireworks": "Фейерверк",
+ "jackhammer": "Отбойный молоток",
+ "pink_noise": "Розовый шум",
+ "hammer": "Молоток",
+ "firecracker": "Петарда",
+ "television": "Телевидение"
}
diff --git a/web/public/locales/ru/common.json b/web/public/locales/ru/common.json
index 0967ef424..ea5a430bc 100644
--- a/web/public/locales/ru/common.json
+++ b/web/public/locales/ru/common.json
@@ -1 +1,242 @@
-{}
+{
+ "time": {
+ "untilForTime": "До {{time}}",
+ "untilForRestart": "До перезапуска Frigate.",
+ "untilRestart": "До перезапуска",
+ "ago": "{{timeAgo}} назад",
+ "justNow": "Только что",
+ "today": "Сегодня",
+ "yesterday": "Вчера",
+ "thisWeek": "На этой неделе",
+ "last14": "Последние 14 дней",
+ "last30": "Последние 30 дней",
+ "last7": "Последние 7 дней",
+ "thisMonth": "В этом месяце",
+ "5minutes": "5 минут",
+ "30minutes": "30 минут",
+ "1hour": "1 час",
+ "12hours": "12 часов",
+ "24hours": "24 часа",
+ "pm": "pm",
+ "am": "am",
+ "yr": "{{time}}л",
+ "year_one": "{{time}} год",
+ "year_few": "{{time}} года",
+ "year_many": "{{time}} лет",
+ "mo": "{{time}}мес",
+ "month_one": "{{time}} месяц",
+ "month_few": "{{time}} месяца",
+ "month_many": "{{time}} месяцев",
+ "d": "{{time}}д",
+ "h": "{{time}}ч",
+ "hour_one": "{{time}} час",
+ "hour_few": "{{time}} часа",
+ "hour_many": "{{time}} часов",
+ "m": "{{time}}мин",
+ "minute_one": "{{time}} минута",
+ "minute_few": "{{time}} минуты",
+ "minute_many": "{{time}} минут",
+ "day_one": "{{time}} день",
+ "day_few": "{{time}} дня",
+ "day_many": "{{time}} дней",
+ "lastWeek": "На прошлой неделе",
+ "lastMonth": "В прошлом месяце",
+ "10minutes": "10 минут",
+ "s": "{{time}}с",
+ "second_one": "{{time}} секунда",
+ "second_few": "{{time}} секунды",
+ "second_many": "{{time}} секунд",
+ "formattedTimestampExcludeSeconds": {
+ "24hour": "%b %-d, %H:%M",
+ "12hour": "%b %-d, %I:%M %p"
+ },
+ "formattedTimestampWithYear": {
+ "24hour": "%b %-d %Y, %H:%M",
+ "12hour": "%b %-d %Y, %I:%M %p"
+ },
+ "formattedTimestamp2": {
+ "24hour": "%d %b %H:%M:%S",
+ "12hour": "%m/%d %I:%M:%S%P"
+ },
+ "formattedTimestamp": {
+ "12hour": "%b %-d, %I:%M:%S %p",
+ "24hour": "%b %-d, %H:%M:%S"
+ },
+ "formattedTimestampOnlyMonthAndDay": "%b %-d"
+ },
+ "selectItem": "Выбор {{item}}",
+ "button": {
+ "apply": "Принять",
+ "done": "Готово",
+ "enabled": "Включено",
+ "enable": "Включить",
+ "save": "Сохранить",
+ "saving": "Сохранение...",
+ "fullscreen": "Полноэкранный режим",
+ "pictureInPicture": "Картинка в картинке",
+ "twoWayTalk": "Двусторонняя связь",
+ "cameraAudio": "Аудио с камеры",
+ "on": "Вкл",
+ "edit": "Редактировать",
+ "copyCoordinates": "Копировать координаты",
+ "delete": "Удалить",
+ "yes": "Да",
+ "no": "Нет",
+ "download": "Загрузить",
+ "info": "Информация",
+ "suspended": "Приостановлено",
+ "cancel": "Отменить",
+ "disable": "Отключить",
+ "reset": "Сбросить",
+ "disabled": "Отключено",
+ "close": "Закрыть",
+ "copy": "Копировать",
+ "back": "Назад",
+ "history": "История",
+ "off": "Выкл",
+ "exitFullscreen": "Выйти из полноэкранного режима",
+ "unsuspended": "Возобновить",
+ "play": "Воспроизвести",
+ "unselect": "Снять выбор",
+ "export": "Экспорт",
+ "deleteNow": "Удалить сейчас",
+ "next": "Следующий"
+ },
+ "label": {
+ "back": "Вернуться"
+ },
+ "unit": {
+ "speed": {
+ "kph": "км/ч",
+ "mph": "миль/ч"
+ }
+ },
+ "menu": {
+ "configuration": "Конфигурация",
+ "systemLogs": "Системные логи",
+ "settings": "Настройки",
+ "configurationEditor": "Редактор конфигурации",
+ "system": "Система",
+ "systemMetrics": "Метрики системы",
+ "languages": "Языки",
+ "language": {
+ "en": "English (Английский)",
+ "zhCN": "简体中文 (Упрощённый китайский)",
+ "es": "Español (Испанский)",
+ "hi": "हिन्दी (Хинди)",
+ "fr": "Français (Французский)",
+ "ar": "العربية (Арабский)",
+ "pt": "Português (Португальский)",
+ "ru": "Русский",
+ "tr": "Türkçe (Турецкий)",
+ "nl": "Nederlands (Нидерландский)",
+ "cs": "Čeština (Чешский)",
+ "nb": "Norsk Bokmål (Норвежский (букмол))",
+ "vi": "Tiếng Việt (Вьетнамский)",
+ "fa": "فارسی (Фарси)",
+ "pl": "Polski (Польский)",
+ "uk": "Українська (Украинский)",
+ "el": "Ελληνικά (Греческий)",
+ "da": "Dansk (Датский)",
+ "sk": "Slovenčina (Словацкий)",
+ "sv": "Svenska (Шведский)",
+ "hu": "Magyar (Венгерский)",
+ "fi": "Suomi (Финский)",
+ "ro": "Română (Румынский)",
+ "ja": "日本語 (Японский)",
+ "it": "Italiano (Итальянский)",
+ "de": "Deutsch (Немецкий)",
+ "ko": "한국어 (Корейский)",
+ "he": "עברית (Иврит)",
+ "withSystem": {
+ "label": "Использовать системные языковые настройки"
+ }
+ },
+ "darkMode": {
+ "withSystem": {
+ "label": "Использовать системные настройки светлого или тёмного режимов"
+ },
+ "label": "Тёмный режим",
+ "light": "Светлый",
+ "dark": "Тёмный"
+ },
+ "withSystem": "Система",
+ "theme": {
+ "label": "Тема",
+ "blue": "Синяя",
+ "default": "По умолчанию",
+ "green": "Зелёная",
+ "nord": "Северная",
+ "red": "Красная",
+ "contrast": "Высокий контраст"
+ },
+ "help": "Помощь",
+ "documentation": {
+ "title": "Документация",
+ "label": "Документация по Frigate"
+ },
+ "explore": "Обзор",
+ "restart": "Перезапуск Frigate",
+ "live": {
+ "title": "Прямой эфир",
+ "allCameras": "Все камеры",
+ "cameras": {
+ "count_one": "{{count}} камера",
+ "count_few": "{{count}} камеры",
+ "count_many": "{{count}} камер",
+ "title": "Камеры"
+ }
+ },
+ "review": "Просмотр",
+ "export": "Экспорт",
+ "uiPlayground": "Среда тестирования интерфейсов",
+ "faceLibrary": "Библиотека Лиц",
+ "user": {
+ "title": "Пользователь",
+ "account": "Аккаунт",
+ "current": "Текущий пользователь: {{user}}",
+ "anonymous": "anonymous",
+ "logout": "Выход",
+ "setPassword": "Установить пароль"
+ },
+ "appearance": "Внешний вид"
+ },
+ "pagination": {
+ "label": "пагинация",
+ "previous": {
+ "title": "Предыдущая",
+ "label": "Переход на предыдущую страницу"
+ },
+ "next": {
+ "title": "Следующая",
+ "label": "Переход на следующую страницу"
+ },
+ "more": "Больше страниц"
+ },
+ "accessDenied": {
+ "desc": "У вас нет разрешения на просмотр этой страницы.",
+ "documentTitle": "Доступ запрещён - Frigate",
+ "title": "Доступ запрещён"
+ },
+ "notFound": {
+ "desc": "Страница не найдена",
+ "documentTitle": "Не найдена - Frigate",
+ "title": "404"
+ },
+ "toast": {
+ "copyUrlToClipboard": "URL скопирован в буфер обмена.",
+ "save": {
+ "error": {
+ "noMessage": "Не удалось сохранить изменения конфигурации",
+ "title": "Не удалось сохранить изменения конфигурации: {{errorMessage}}"
+ },
+ "title": "Сохранить"
+ }
+ },
+ "role": {
+ "title": "Роль",
+ "admin": "Администратор",
+ "viewer": "Наблюдатель",
+ "desc": "Администраторы имеют полный доступ ко всем функциям в интерфейсе Frigate. Наблюдатели ограничены просмотром камер, элементов просмотра и архивных записей."
+ }
+}
diff --git a/web/public/locales/ru/components/auth.json b/web/public/locales/ru/components/auth.json
index 0967ef424..b227af835 100644
--- a/web/public/locales/ru/components/auth.json
+++ b/web/public/locales/ru/components/auth.json
@@ -1 +1,15 @@
-{}
+{
+ "form": {
+ "user": "Имя пользователя",
+ "password": "Пароль",
+ "login": "Логин",
+ "errors": {
+ "usernameRequired": "Необходимо ввести имя пользователя",
+ "passwordRequired": "Необходимо ввести пароль",
+ "rateLimit": "Превышение числа попыток. Попробуй еще раз позже.",
+ "loginFailed": "Ошибка входа",
+ "unknownError": "Неизвестная ошибка. Проверьте логи.",
+ "webUnknownError": "Неизвестная ошибка. Проверьте логи консоли."
+ }
+ }
+}
diff --git a/web/public/locales/ru/components/camera.json b/web/public/locales/ru/components/camera.json
index 0967ef424..88ed8e9c0 100644
--- a/web/public/locales/ru/components/camera.json
+++ b/web/public/locales/ru/components/camera.json
@@ -1 +1,83 @@
-{}
+{
+ "group": {
+ "label": "Группы камер",
+ "add": "Добавить группу камер",
+ "edit": "Редактирование группы камер",
+ "delete": {
+ "label": "Удалить группу камер",
+ "confirm": {
+ "title": "Подтвердить удаление",
+ "desc": "Вы уверены, что хотите удалить группу камер {{name}}?"
+ }
+ },
+ "name": {
+ "label": "Название",
+ "placeholder": "Введите название...",
+ "errorMessage": {
+ "exists": "Такое название группы камер уже существует.",
+ "nameMustNotPeriod": "Название группы камер не должно содержать точки.",
+ "invalid": "Неверное название группы камер.",
+ "mustLeastCharacters": "Название группы камер должно содержать не менее 2 символов."
+ }
+ },
+ "cameras": {
+ "label": "Камеры",
+ "desc": "Выберите камеры для этой группы."
+ },
+ "icon": "Иконка",
+ "success": "Группа камер {{name}} сохранена.",
+ "camera": {
+ "setting": {
+ "label": "Настройки видеопотока",
+ "desc": "Изменить параметры прямой трансляции для панели этой группы камер. Эти настройки зависят от устройства/браузера.",
+ "audioIsAvailable": "Для этого потока доступен звук",
+ "audioIsUnavailable": "Для этого потока звук недоступен",
+ "audio": {
+ "tips": {
+ "title": "Аудио должно выводиться с вашей камеры и быть настроено в go2rtc для этого потока.",
+ "document": "Прочитать документацию "
+ }
+ },
+ "streamMethod": {
+ "label": "Метод стриминга",
+ "method": {
+ "noStreaming": {
+ "label": "Нет потока",
+ "desc": "Изображения с камеры будут обновляться только раз в минуту, и прямая трансляция происходить не будет."
+ },
+ "smartStreaming": {
+ "label": "Умный поток (рекомендуется)",
+ "desc": "Умный поток будет обновлять изображение с камеры раз в минуту при отсутствии активности для экономии трафика и ресурсов. При обнаружении активности изображение автоматически переключается на прямую трансляцию."
+ },
+ "continuousStreaming": {
+ "label": "Непрерывный поток",
+ "desc": {
+ "warning": "Непрерывная потоковая передача может привести к высокому потреблению трафика и проблемам с производительностью. Используйте с осторожностью.",
+ "title": "Изображение с камеры всегда будет транслироваться в реальном времени при отображении на панели, даже если активность не обнаружена."
+ }
+ }
+ }
+ },
+ "compatibilityMode": {
+ "label": "Режим совместимости",
+ "desc": "Включите эту опцию только если прямая трансляция с вашей камеры отображает цветовые артефакты и имеет диагональную линию с правой стороны изображения."
+ },
+ "title": "Настройки видеопотока {{cameraName}}"
+ }
+ }
+ },
+ "debug": {
+ "options": {
+ "label": "Настройки",
+ "title": "Опции",
+ "hideOptions": "Скрыть опции",
+ "showOptions": "Показать опции"
+ },
+ "boundingBox": "Ограничивающая рамка",
+ "timestamp": "Метка времени",
+ "zones": "Зоны",
+ "mask": "Маска",
+ "motion": "Движение",
+ "regions": "Регионы"
+ }
+}
diff --git a/web/public/locales/ru/components/dialog.json b/web/public/locales/ru/components/dialog.json
index 0967ef424..531ee4b66 100644
--- a/web/public/locales/ru/components/dialog.json
+++ b/web/public/locales/ru/components/dialog.json
@@ -1 +1,116 @@
-{}
+{
+ "restart": {
+ "title": "Вы уверены, что хотите перезапустить Frigate?",
+ "button": "Перезапуск",
+ "restarting": {
+ "title": "Frigate перезапускается",
+ "content": "Эта страница перезагрузится через {{countdown}} сек.",
+ "button": "Принудительно перезагрузить сейчас"
+ }
+ },
+ "explore": {
+ "plus": {
+ "submitToPlus": {
+ "label": "Отправить в Frigate+",
+ "desc": "Объекты в местах, которых вы хотите избежать, не являются ложными срабатываниями. Отправка их как ложных срабатываний запутает модель."
+ },
+ "review": {
+ "true": {
+ "label": "Подтвердите метку для Frigate Plus",
+ "true_one": "Это {{label}}",
+ "true_few": "Это {{label}}",
+ "true_many": "Это {{label}}"
+ },
+ "false": {
+ "label": "Не подтверждать эту метку для Frigate Plus",
+ "false_one": "Это не {{label}}",
+ "false_few": "Это не {{label}}",
+ "false_many": "Это не {{label}}"
+ },
+ "state": {
+ "submitted": "Отправлено"
+ }
+ }
+ },
+ "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
index 0967ef424..659ff402c 100644
--- a/web/public/locales/ru/objects.json
+++ b/web/public/locales/ru/objects.json
@@ -1 +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
index 0967ef424..e82cbf6ff 100644
--- a/web/public/locales/ru/views/configEditor.json
+++ b/web/public/locales/ru/views/configEditor.json
@@ -1 +1,15 @@
-{}
+{
+ "configEditor": "Редактор конфига",
+ "copyConfig": "Скопировать конфигурацию",
+ "saveAndRestart": "Сохранить и перезапустить",
+ "saveOnly": "Только сохранить",
+ "documentTitle": "Редактор конфигурации - Frigate",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Конфигурация скопирована в буфер обмена."
+ },
+ "error": {
+ "savingError": "Ошибка сохранения конфигурации"
+ }
+ }
+}
diff --git a/web/public/locales/ru/views/events.json b/web/public/locales/ru/views/events.json
index 0967ef424..de63641ad 100644
--- a/web/public/locales/ru/views/events.json
+++ b/web/public/locales/ru/views/events.json
@@ -1 +1,35 @@
-{}
+{
+ "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": "Пометить эти элементы как просмотренные"
+}
diff --git a/web/public/locales/ru/views/explore.json b/web/public/locales/ru/views/explore.json
index 0967ef424..93080daf0 100644
--- a/web/public/locales/ru/views/explore.json
+++ b/web/public/locales/ru/views/explore.json
@@ -1 +1,194 @@
-{}
+{
+ "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": "Перегенерировать из миниатюры"
+ },
+ "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}}"
+ },
+ "annotationSettings": {
+ "title": "Настройки аннотаций",
+ "showAllZones": {
+ "title": "Показать все зоны",
+ "desc": "Всегда показывать зоны на кадрах, где объекты вошли в зону."
+ },
+ "offset": {
+ "label": "Сдвиг аннотаций",
+ "desc": "Эти данные поступают из потока детекции вашей камеры, но накладываются на изображения из потока записи. Потоки вряд ли идеально синхронизированы, поэтому ограничивающая рамка и видео могут не совпадать. Для корректировки используйте поле annotation_offset
.",
+ "millisecondsToOffset": "Смещение аннотаций детекции в миллисекундах. По умолчанию: 0",
+ "documentation": "Прочитать документацию ",
+ "tips": "СОВЕТ: Представьте, у вас клип события, где человек идёт слева направо. Если рамка на таймлайне постоянно смещена влево от человека — уменьшите значение. Если рамка опережает движение — увеличьте значение."
+ }
+ },
+ "carousel": {
+ "previous": "Предыдущий слайд",
+ "next": "Следующий слайд"
+ }
+ },
+ "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
index 0967ef424..3a7f427c3 100644
--- a/web/public/locales/ru/views/recording.json
+++ b/web/public/locales/ru/views/recording.json
@@ -1 +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
index 0967ef424..ae33aeb18 100644
--- a/web/public/locales/ru/views/search.json
+++ b/web/public/locales/ru/views/search.json
@@ -1 +1,67 @@
-{}
+{
+ "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
"
+ }
+ },
+ "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
index 0967ef424..afb783f9f 100644
--- a/web/public/locales/ru/views/settings.json
+++ b/web/public/locales/ru/views/settings.json
@@ -1 +1,585 @@
-{}
+{
+ "documentTitle": {
+ "default": "Настройки - Frigate",
+ "camera": "Настройки камеры - Frigate",
+ "masksAndZones": "Маски и Зоны - Frigate",
+ "motionTuner": "Детекции движения - Frigate",
+ "general": "Общие настройки - Frigate",
+ "frigatePlus": "Настройки Frigate+ - Frigate",
+ "authentication": "Настройки аутентификации - Frigate",
+ "classification": "Настройки распознавания - Frigate",
+ "object": "Настройка объектов - Frigate"
+ },
+ "menu": {
+ "cameras": "Настройки камеры",
+ "masksAndZones": "Маски / Зоны",
+ "motionTuner": "Детекции движения",
+ "debug": "Отладка",
+ "users": "Пользователи",
+ "notifications": "Уведомления",
+ "frigateplus": "Frigate+",
+ "ui": "Интерфейс",
+ "classification": "Распознование"
+ },
+ "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 может распознавать номерные знаки на транспортных средствах и автоматически добавлять обнаруженные символы в поле recognized_license_plate или известное имя в качестве sub_label для объектов типа car. Типичный пример использования — чтение номеров машин, заезжающих на подъездную дорожку или проезжающих по улице."
+ },
+ "toast": {
+ "success": "Настройки классификации сохранены. Перезапустите Frigate, чтобы применить внесенные изменения.",
+ "error": "Не удалось сохранить изменения конфигурации: {{errorMessage}}"
+ },
+ "title": "Настройки классификации",
+ "birdClassification": {
+ "title": "Классификация птиц",
+ "desc": "Классификация птиц определяет известные виды с помощью квантованной модели TensorFlow. При распознавании птицы её общепринятое название добавляется как sub_label. Эти данные отображаются в интерфейсе, фильтрах и уведомлениях."
+ }
+ },
+ "users": {
+ "dialog": {
+ "passwordSetting": {
+ "updatePassword": "Обновить пароль для {{username}}",
+ "setPassword": "Установить пароль",
+ "desc": "Создайте надежный пароль для защиты аккаунта."
+ },
+ "deleteUser": {
+ "warn": "Вы уверены, что хотите удалить пользователя {{username}}?",
+ "title": "Удалить пользователя",
+ "desc": "Это действие необратимо. Учётная запись пользователя и все связанные с ней данные будут удалены без возможности восстановления."
+ },
+ "changeRole": {
+ "title": "Изменить роль пользователя",
+ "desc": "Обновить права доступа для {{username}}",
+ "roleInfo": "Выберите подходящую роль для этого пользователя:
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 минут"
+ },
+ "toast": {
+ "success": {
+ "settingSaved": "Настройки уведомлений сохранены.",
+ "registered": "Регистрация для уведомлений успешно завершена. Перезапуск Frigate необходим перед отправкой любых уведомлений (включая тестовое уведомление)."
+ },
+ "error": {
+ "registerFailed": "Не удалось сохранить регистрацию уведомлений."
+ }
+ },
+ "cancelSuspension": "Отменить приостановку"
+ },
+ "camera": {
+ "review": {
+ "alerts": "Тревоги ",
+ "desc": "Включить или отключить тревоги и обнаружения для этой камеры. В отключенном состоянии новые события не будут записываться.",
+ "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 для применения изменений."
+ }
+ },
+ "title": "Настройки камеры",
+ "streams": {
+ "title": "Потоки",
+ "desc": "Отключение камеры полностью останавливает обработку 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": "Камеры"
+ },
+ "toast": {
+ "success": "Настройки Frigate+ были сохранены. Перезапустите Frigate, чтобы применить изменения.",
+ "error": "Не удалось сохранить изменения конфигурации: {{errorMessage}}"
+ }
+ }
+}
diff --git a/web/public/locales/ru/views/system.json b/web/public/locales/ru/views/system.json
index 0967ef424..b8dbf381c 100644
--- a/web/public/locales/ru/views/system.json
+++ b/web/public/locales/ru/views/system.json
@@ -1 +1,157 @@
-{}
+{
+ "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": "Использование памяти детектором"
+ },
+ "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 Compute Capability: {{cuda_compute}}",
+ "vbios": "Информация VBios: {{vbios}}"
+ },
+ "closeInfo": {
+ "label": "Закрыть информацию GPU"
+ },
+ "copyInfo": {
+ "label": "Скопировать информацию GPU"
+ },
+ "toast": {
+ "success": "Информация GPU скопирована в буфер обмена"
+ }
+ }
+ },
+ "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": "Информация о тестировании камеры"
+ }
+ },
+ "framesAndDetections": "Кадры/детекции",
+ "label": {
+ "ffmpeg": "ffmpeg",
+ "camera": "камера",
+ "capture": "захват",
+ "skipped": "пропущено",
+ "detect": "детекция"
+ },
+ "toast": {
+ "success": {
+ "copyToClipboard": "Данные тестирования скопированы в буфер обмена."
+ },
+ "error": {
+ "unableToProbeCamera": "Не удалось протестировать камеру: {{errorMessage}}"
+ }
+ }
+ },
+ "lastRefreshed": "Последнее обновление: ",
+ "stats": {
+ "ffmpegHighCpuUsage": "Камера {{camera}} использует чрезмерно много ресурсов CPU в FFMPEG ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "Камера {{camera}} использует слишком много ресурсов CPU для детекции ({{detectAvg}}%)",
+ "healthy": "Система в порядке",
+ "reindexingEmbeddings": "Переиндексация эмбеддингов ({{processed}}% завершено)"
+ },
+ "enrichments": {
+ "title": "Обогащения данных",
+ "infPerSecond": "Выводов в секунду",
+ "embeddings": {
+ "image_embedding_speed": "Скорость генерации эмбеддингов изображений",
+ "plate_recognition_speed": "Скорость распознавания номеров",
+ "text_embedding_speed": "Скорость генерации текстовых эмбеддингов",
+ "face_embedding_speed": "Скорость генерации эмбеддингов лиц"
+ }
+ }
+}
diff --git a/web/public/locales/sv/audio.json b/web/public/locales/sv/audio.json
index c8d549aab..3e1b88b8f 100644
--- a/web/public/locales/sv/audio.json
+++ b/web/public/locales/sv/audio.json
@@ -9,5 +9,138 @@
"bus": "Buss",
"babbling": "Babblande",
"whoop": "Skrika",
- "camera": "Kamera"
+ "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"
}
diff --git a/web/public/locales/sv/common.json b/web/public/locales/sv/common.json
index ef2b925f9..f68414929 100644
--- a/web/public/locales/sv/common.json
+++ b/web/public/locales/sv/common.json
@@ -5,7 +5,30 @@
"untilRestart": "Tills omstart",
"ago": "{{timeAgo}} sedan",
"justNow": "Just nu",
- "today": "Idag"
+ "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"
},
"button": {
"save": "Spara"
diff --git a/web/public/locales/sv/components/auth.json b/web/public/locales/sv/components/auth.json
index 8163aacb3..8581ffe94 100644
--- a/web/public/locales/sv/components/auth.json
+++ b/web/public/locales/sv/components/auth.json
@@ -8,7 +8,8 @@
"passwordRequired": "Lösenord är obligatoriskt",
"loginFailed": "Inloggning misslyckades",
"unknownError": "Okänt fel. Kontrollera loggarna.",
- "webUnknownError": "Okänt fel. Kontrollera konsol 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/player.json b/web/public/locales/sv/components/player.json
index f334ae1c7..59a46ad74 100644
--- a/web/public/locales/sv/components/player.json
+++ b/web/public/locales/sv/components/player.json
@@ -9,5 +9,21 @@
"livePlayerRequiredIOSVersion": "iOS 17.1 eller senare krävs för den här typen av livestream.",
"streamOffline": {
"title": "Ström ej tillgänglig"
- }
+ },
+ "stats": {
+ "streamType": {
+ "short": "Typ"
+ },
+ "bandwidth": {
+ "title": "Bandbredd:",
+ "short": "Bandbredd"
+ },
+ "latency": {
+ "title": "Latens:",
+ "short": {
+ "title": "Latens"
+ }
+ }
+ },
+ "cameraDisabled": "Kameran är disablead"
}
diff --git a/web/public/locales/sv/objects.json b/web/public/locales/sv/objects.json
index 63ead96a9..130d0f828 100644
--- a/web/public/locales/sv/objects.json
+++ b/web/public/locales/sv/objects.json
@@ -4,5 +4,44 @@
"bicycle": "Cykel",
"motorcycle": "Motorcykel",
"airplane": "Flygplan",
- "bus": "Buss"
+ "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"
}
diff --git a/web/public/locales/tr/common.json b/web/public/locales/tr/common.json
index a22f2f3ee..2bba090c7 100644
--- a/web/public/locales/tr/common.json
+++ b/web/public/locales/tr/common.json
@@ -27,9 +27,12 @@
"24hour": "%b %d %H:%M:%S",
"12hour": "%m/%d %I:%M:%S%P"
},
- "second": "{{time}} saniye",
- "year": "{{time}} yıl",
- "hour": "{{time}} saat",
+ "second_one": "{{time}} saniye",
+ "second_other": "{{time}} saniye",
+ "year_one": "{{time}} yıl",
+ "year_other": "{{time}} yıl",
+ "hour_one": "{{time}} saat",
+ "hour_other": "{{time}} saat",
"h": "{{time}} s",
"yr": "{{time}} yıl",
"mo": "{{time}} ay",
@@ -37,9 +40,11 @@
"pm": "ÖS",
"am": "ÖÖ",
"d": "{{time}} gün",
- "day": "{{time}} gün",
+ "day_one": "{{time}} gün",
+ "day_other": "{{time}} gün",
"m": "{{time}}d",
- "minute": "{{time}} dakika",
+ "minute_one": "{{time}} dakika",
+ "minute_other": "{{time}} dakika",
"formattedTimestampWithYear": {
"12hour": "%-d %b %Y, %I:%M %p",
"24hour": "%-d %b %Y, %H:%M"
@@ -50,7 +55,8 @@
"24hour": "%-d %b, %H:%M"
},
"s": "{{time}}sn",
- "month": "{{time}} ay"
+ "month_one": "{{time}} ay",
+ "month_other": "{{time}} ay"
},
"button": {
"off": "KAPALI",
@@ -106,7 +112,33 @@
"zhCN": "简体中文 (Basitleştirilmiş Çince)",
"withSystem": {
"label": "Dil için sistem tercihini kullan"
- }
+ },
+ "hi": "हिन्दी (Hintçe)",
+ "fr": "Français (Fransızca)",
+ "pt": "Português (Portekizce)",
+ "de": "Deutsch (Almanca)",
+ "ja": "日本語 (Japonca)",
+ "tr": "Türkçe (Türkçe)",
+ "it": "Italiano (İtalyanca)",
+ "nl": "Nederlands (Felemenkçe)",
+ "sv": "Svenska (İsveççe)",
+ "cs": "Čeština (Çekçe)",
+ "nb": "Norsk Bokmål (Bokmål Norveç Dili)",
+ "ko": "한국어 (Korece)",
+ "vi": "Tiếng Việt (Vietnamca)",
+ "pl": "Polski (Lehçe)",
+ "uk": "Українська (Ukraynaca)",
+ "he": "עברית (İbranice)",
+ "el": "Ελληνικά (Yunanca)",
+ "ro": "Română (Rumence)",
+ "hu": "Magyar (Macarca)",
+ "fi": "Suomi (Fince)",
+ "da": "Dansk (Danimarka Dili)",
+ "sk": "Slovenčina (Slovakça)",
+ "fa": "فارسی (Farsça)",
+ "es": "Español (İspanyolca)",
+ "ar": "العربية (Arapça)",
+ "ru": "Русский (Rusça)"
},
"withSystem": "Sistem",
"theme": {
diff --git a/web/public/locales/tr/components/filter.json b/web/public/locales/tr/components/filter.json
index 861993902..b2c5e9aab 100644
--- a/web/public/locales/tr/components/filter.json
+++ b/web/public/locales/tr/components/filter.json
@@ -5,7 +5,9 @@
"title": "Bütün Etiketler",
"short": "Etiketler"
},
- "count": "{{count}} Etiket"
+ "count": "{{count}} Etiket",
+ "count_one": "{{count}} Etiket",
+ "count_other": "{{count}} Etiket"
},
"dates": {
"all": {
@@ -94,7 +96,7 @@
"disableLogStreaming": "Günlük akışını devre dışı bırak",
"allLogs": "Tüm günlükler",
"loading": {
- "title": "Yükleniyor",
+ "title": "Günlük Akışı",
"desc": "Günlükler sayfası en aşağıya kaydırıldığında yeni günlük satırları geldikçe aşağıya eklenir."
},
"label": "Düzeye göre günlükleri filtrele"
diff --git a/web/public/locales/tr/views/explore.json b/web/public/locales/tr/views/explore.json
index 369c86c3d..c01aa6d69 100644
--- a/web/public/locales/tr/views/explore.json
+++ b/web/public/locales/tr/views/explore.json
@@ -17,11 +17,13 @@
"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."
+ "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}}"
+ "regenerate": "{{provider}} sağlayıcısından yeni açıklama talep edilemedi: {{errorMessage}}",
+ "updatedLPRFailed": "Plaka güncellenemedi: {{errorMessage}}"
}
}
},
@@ -57,7 +59,13 @@
"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"
+ "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"
},
"generativeAI": "Üretken Yapay Zeka",
"exploreIsUnavailable": {
@@ -179,5 +187,6 @@
"title": "Silmeyi onayla"
}
},
- "trackedObjectsCount": "{{count}} adet takip edilen nesne "
+ "trackedObjectsCount_one": "{{count}} adet takip edilen nesne ",
+ "trackedObjectsCount_other": "{{count}} adet takip edilen nesne "
}
diff --git a/web/public/locales/tr/views/settings.json b/web/public/locales/tr/views/settings.json
index 2bd7638b0..1e491b52a 100644
--- a/web/public/locales/tr/views/settings.json
+++ b/web/public/locales/tr/views/settings.json
@@ -114,7 +114,7 @@
"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 otmatikman ekler. Bu bilgi; kullanıcı arayüzü, filtreler ve bildirimlerde gösterilir.",
+ "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": {
@@ -125,6 +125,10 @@
"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."
}
},
"cameraSetting": {
diff --git a/web/public/locales/tr/views/system.json b/web/public/locales/tr/views/system.json
index 6fc74af3a..755508027 100644
--- a/web/public/locales/tr/views/system.json
+++ b/web/public/locales/tr/views/system.json
@@ -73,7 +73,7 @@
},
"percentageOfTotalUsed": "Toplam Yüzde",
"storageUsed": "Depolama",
- "bandwidth": "Bant Genişliği",
+ "bandwidth": "Saatlik Veri Kullanımı",
"unusedStorageInformation": "Kullanılmayan Depolama Bilgisi"
}
},
diff --git a/web/public/locales/uk/audio.json b/web/public/locales/uk/audio.json
new file mode 100644
index 000000000..378f2c797
--- /dev/null
+++ b/web/public/locales/uk/audio.json
@@ -0,0 +1,8 @@
+{
+ "child_singing": "Дитячий садок",
+ "breathing": "Дихання",
+ "cough": "Кашель",
+ "throat_clearing": "Прозорий очищення",
+ "mantra": "Мантра",
+ "synthetic_singing": "Синтетична обробка"
+}
diff --git a/web/public/locales/uk/common.json b/web/public/locales/uk/common.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/common.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/components/auth.json b/web/public/locales/uk/components/auth.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/components/auth.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/components/camera.json b/web/public/locales/uk/components/camera.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/components/camera.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/components/dialog.json b/web/public/locales/uk/components/dialog.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/components/dialog.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/components/filter.json b/web/public/locales/uk/components/filter.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/components/filter.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/components/icons.json b/web/public/locales/uk/components/icons.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/components/icons.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/components/input.json b/web/public/locales/uk/components/input.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/components/input.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/components/player.json b/web/public/locales/uk/components/player.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/components/player.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/objects.json b/web/public/locales/uk/objects.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/objects.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/views/configEditor.json b/web/public/locales/uk/views/configEditor.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/views/configEditor.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/views/events.json b/web/public/locales/uk/views/events.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/views/events.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/views/explore.json b/web/public/locales/uk/views/explore.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/views/explore.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/views/exports.json b/web/public/locales/uk/views/exports.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/views/exports.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/views/faceLibrary.json b/web/public/locales/uk/views/faceLibrary.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/views/faceLibrary.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/views/live.json b/web/public/locales/uk/views/live.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/views/live.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/views/recording.json b/web/public/locales/uk/views/recording.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/views/recording.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/views/search.json b/web/public/locales/uk/views/search.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/views/search.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/views/settings.json b/web/public/locales/uk/views/settings.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/views/settings.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/uk/views/system.json b/web/public/locales/uk/views/system.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/uk/views/system.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/vi/audio.json b/web/public/locales/vi/audio.json
new file mode 100644
index 000000000..4a55da6aa
--- /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": "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..8779833a0
--- /dev/null
+++ b/web/public/locales/vi/common.json
@@ -0,0 +1,228 @@
+{
+ "time": {
+ "untilRestart": "còn lại đế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": "định dạng thời gian 12 giờ",
+ "24hour": "định dạng thời gian 24 giờ"
+ },
+ "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": "chiều",
+ "am": "sáng",
+ "mo": "{{time}}tháng",
+ "d": "{{time}}ngày",
+ "m": "{{time}}phút",
+ "s": "{{time}}giây",
+ "formattedTimestamp2": {
+ "12hour": "định dạng thời gian 12 giờ (2)",
+ "24hour": "định dạng thời gian 24 giờ (2)"
+ },
+ "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ờ"
+ },
+ "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"
+ }
+ },
+ "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": "theo 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"
+ },
+ "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ờ)"
+ }
+ },
+ "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 có thông báo lỗi",
+ "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..0967ef424
--- /dev/null
+++ b/web/public/locales/vi/components/auth.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/vi/components/camera.json b/web/public/locales/vi/components/camera.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/vi/components/camera.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/vi/components/dialog.json b/web/public/locales/vi/components/dialog.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/vi/components/dialog.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/vi/components/filter.json b/web/public/locales/vi/components/filter.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/vi/components/filter.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/vi/components/icons.json b/web/public/locales/vi/components/icons.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/vi/components/icons.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/vi/components/input.json b/web/public/locales/vi/components/input.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/vi/components/input.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/vi/components/player.json b/web/public/locales/vi/components/player.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/vi/components/player.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/vi/objects.json b/web/public/locales/vi/objects.json
new file mode 100644
index 000000000..9b73349dd
--- /dev/null
+++ b/web/public/locales/vi/objects.json
@@ -0,0 +1,27 @@
+{
+ "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ồ"
+}
diff --git a/web/public/locales/vi/views/configEditor.json b/web/public/locales/vi/views/configEditor.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/vi/views/configEditor.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/vi/views/events.json b/web/public/locales/vi/views/events.json
new file mode 100644
index 000000000..704d655df
--- /dev/null
+++ b/web/public/locales/vi/views/events.json
@@ -0,0 +1,3 @@
+{
+ "camera": "tiếng máy ảnh"
+}
diff --git a/web/public/locales/vi/views/explore.json b/web/public/locales/vi/views/explore.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/vi/views/explore.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/vi/views/exports.json b/web/public/locales/vi/views/exports.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/vi/views/exports.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/vi/views/faceLibrary.json b/web/public/locales/vi/views/faceLibrary.json
new file mode 100644
index 000000000..9ea42c314
--- /dev/null
+++ b/web/public/locales/vi/views/faceLibrary.json
@@ -0,0 +1,3 @@
+{
+ "selectItem": "Chọn mục {{item}}"
+}
diff --git a/web/public/locales/vi/views/live.json b/web/public/locales/vi/views/live.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/vi/views/live.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/vi/views/recording.json b/web/public/locales/vi/views/recording.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/vi/views/recording.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/vi/views/search.json b/web/public/locales/vi/views/search.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/vi/views/search.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/vi/views/settings.json b/web/public/locales/vi/views/settings.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/vi/views/settings.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/vi/views/system.json b/web/public/locales/vi/views/system.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/web/public/locales/vi/views/system.json
@@ -0,0 +1 @@
+{}
diff --git a/web/public/locales/zh-CN/common.json b/web/public/locales/zh-CN/common.json
index 5c6df62c5..d0bd86582 100644
--- a/web/public/locales/zh-CN/common.json
+++ b/web/public/locales/zh-CN/common.json
@@ -23,17 +23,17 @@
"pm": "下午",
"am": "上午",
"yr": "{{time}}年",
- "year": "{{time}}年",
+ "year_other": "{{time}}年",
"mo": "{{time}}月",
- "month": "{{time}}月",
+ "month_other": "{{time}}月",
"d": "{{time}}天",
- "day": "{{time}}天",
+ "day_other": "{{time}}天",
"h": "{{time}}小时",
- "hour": "{{time}}小时",
+ "hour_other": "{{time}}小时",
"m": "{{time}}分钟",
- "minute": "{{time}}分钟",
+ "minute_other": "{{time}}分钟",
"s": "{{time}}秒",
- "second": "{{time}}秒",
+ "second_other": "{{time}}秒",
"formattedTimestamp": {
"12hour": "%m月%-d日 %I:%M:%S %p",
"24hour": "%m月%-d日 %H:%M:%S"
@@ -123,7 +123,33 @@
"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)"
},
"appearance": "外观",
"darkMode": {
diff --git a/web/public/locales/zh-CN/components/filter.json b/web/public/locales/zh-CN/components/filter.json
index 030642bba..089ec985a 100644
--- a/web/public/locales/zh-CN/components/filter.json
+++ b/web/public/locales/zh-CN/components/filter.json
@@ -6,7 +6,9 @@
"title": "所有标签",
"short": "标签"
},
- "count": "{{count}} 个标签"
+ "count": "{{count}} 个标签",
+ "count_other": "{{count}} 个标签",
+ "count_one": "{{count}} 个标签"
},
"zones": {
"all": {
diff --git a/web/public/locales/zh-CN/views/explore.json b/web/public/locales/zh-CN/views/explore.json
index 84dd57e10..2c811b4b9 100644
--- a/web/public/locales/zh-CN/views/explore.json
+++ b/web/public/locales/zh-CN/views/explore.json
@@ -90,11 +90,13 @@
"toast": {
"success": {
"regenerate": "已向 {{provider}} 请求新的描述。根据提供商的速度,生成新描述可能需要一些时间。",
- "updatedSublabel": "成功更新子标签。"
+ "updatedSublabel": "成功更新子标签。",
+ "updatedLPR": "成功更新车牌。"
},
"error": {
"regenerate": "调用 {{provider}} 生成新描述失败:{{errorMessage}}",
- "updatedSublabelFailed": "更新子标签失败:{{errorMessage}}"
+ "updatedSublabelFailed": "更新子标签失败:{{errorMessage}}",
+ "updatedLPRFailed": "更新车牌失败:{{errorMessage}}"
}
}
},
@@ -131,7 +133,13 @@
"tips": {
"descriptionSaved": "已保存描述",
"saveDescriptionFailed": "更新描述失败:{{errorMessage}}"
- }
+ },
+ "editLPR": {
+ "desc": "为 {{label}} 输入新的车牌值",
+ "descNoLabel": "为探测到的对象输入新的车牌值",
+ "title": "编辑车牌"
+ },
+ "recognizedLicensePlate": "识别的车牌"
},
"itemMenu": {
"downloadVideo": {
@@ -170,7 +178,7 @@
},
"noTrackedObjects": "未找到跟踪对象",
"fetchingTrackedObjectsFailed": "获取跟踪对象失败:{{errorMessage}}",
- "trackedObjectsCount": "{{count}} 个跟踪对象 ",
+ "trackedObjectsCount_other": "{{count}} 个跟踪对象 ",
"searchResult": {
"deleteTrackedObject": {
"toast": {
diff --git a/web/src/components/card/SearchThumbnail.tsx b/web/src/components/card/SearchThumbnail.tsx
index e58977f74..75bae5cef 100644
--- a/web/src/components/card/SearchThumbnail.tsx
+++ b/web/src/components/card/SearchThumbnail.tsx
@@ -135,7 +135,7 @@ export default function SearchThumbnail({
onClick={() => onClick(searchResult, false, true)}
>
{getIconForLabel(objectLabel, "size-3 text-white")}
- {Math.round(
+ {Math.floor(
(searchResult.data.score ??
searchResult.data.top_score ??
searchResult.top_score) * 100,
diff --git a/web/src/components/menu/GeneralSettings.tsx b/web/src/components/menu/GeneralSettings.tsx
index dc8ea91ae..c148127e3 100644
--- a/web/src/components/menu/GeneralSettings.tsx
+++ b/web/src/components/menu/GeneralSettings.tsx
@@ -81,7 +81,9 @@ export default function GeneralSettings({ className }: GeneralSettingsProps) {
{ code: "zh-CN", label: t("menu.language.zhCN") },
{ code: "tr", label: t("menu.language.tr") },
{ code: "nl", label: t("menu.language.nl") },
- { code: "nb", label: t("menu.language.nb") },
+ { code: "nb-NO", label: t("menu.language.nb") },
+ { code: "pl", label: t("menu.language.pl") },
+ { code: "ru", label: t("menu.language.ru") },
];
// settings
diff --git a/web/src/components/overlay/detail/SearchDetailDialog.tsx b/web/src/components/overlay/detail/SearchDetailDialog.tsx
index abebe1851..e0f9e0577 100644
--- a/web/src/components/overlay/detail/SearchDetailDialog.tsx
+++ b/web/src/components/overlay/detail/SearchDetailDialog.tsx
@@ -288,7 +288,7 @@ function ObjectDetailsTab({
setSimilarity,
setInputFocused,
}: ObjectDetailsTabProps) {
- const { t } = useTranslation(["views/explore"]);
+ const { t } = useTranslation(["views/explore", "views/faceLibrary"]);
const apiHost = useApiHost();
@@ -325,7 +325,7 @@ function ObjectDetailsTab({
config?.ui.timezone,
);
- const score = useMemo(() => {
+ const topScore = useMemo(() => {
if (!search) {
return 0;
}
@@ -364,6 +364,16 @@ function ObjectDetailsTab({
}
}, [search]);
+ const snapScore = useMemo(() => {
+ if (!search?.has_snapshot) {
+ return 0;
+ }
+
+ const value = search.data.score ?? search.score ?? 0;
+
+ return Math.floor(value * 100);
+ }, [search]);
+
const averageEstimatedSpeed = useMemo(() => {
if (!search || !search.data?.average_estimated_speed) {
return undefined;
@@ -664,9 +674,12 @@ function ObjectDetailsTab({
.post(`/faces/train/${trainName}/classify`, { event_id: search.id })
.then((resp) => {
if (resp.status == 200) {
- toast.success(t("toast.success.trainedFace"), {
- position: "top-center",
- });
+ toast.success(
+ t("toast.success.trainedFace", { ns: "views/faceLibrary" }),
+ {
+ position: "top-center",
+ },
+ );
}
})
.catch((error) => {
@@ -674,9 +687,15 @@ function ObjectDetailsTab({
error.response?.data?.message ||
error.response?.data?.detail ||
"Unknown error";
- toast.error(t("toast.error.trainFailed", { errorMessage }), {
- position: "top-center",
- });
+ toast.error(
+ t("toast.error.trainFailed", {
+ ns: "views/faceLibrary",
+ errorMessage,
+ }),
+ {
+ position: "top-center",
+ },
+ );
});
},
[search, t],
@@ -764,9 +783,19 @@ function ObjectDetailsTab({