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}} detectpřenosu, zkontrolujte logy chyb" + }, + "cameraDisabled": "Kamera je zakázaná", + "stats": { + "streamType": { + "title": "Typ přenosu:", + "short": "Typ" + }, + "bandwidth": { + "title": "Šířka pásma:", + "short": "Šířka pásma" + }, + "latency": { + "title": "Latence:", + "value": "{{seconds}} sekund", + "short": { + "title": "Latence", + "value": "{{seconds}} sek." + } + }, + "totalFrames": "Celkový počet snímků:", + "droppedFrames": { + "title": "Ztracené snímky:", + "short": { + "title": "Ztracené", + "value": "{{droppedFrames}} snímků" + } + }, + "decodedFrames": "Dekódované snímky:", + "droppedFrameRate": "Frekvence ztracených snímků:" + }, + "toast": { + "success": { + "submittedFrigatePlus": "Snimek byl úspěšně odeslán službě Frigate+" + }, + "error": { + "submitFrigatePlusFailed": "Nepodařilo se odeslat snímek službě Frigate+" + } + } +} diff --git a/web/public/locales/cs/objects.json b/web/public/locales/cs/objects.json 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:
  • Benutze den Trainieren Tab, um Bilder für jede erkannte Person auszuwählen und zu trainieren.
  • Konzentriere dich für gute Ergebnisse auf Frontalfotos; vermeide Bilder zu Trainingszwecken, bei denen Gesichter aus einem Winkel erfasst wurden.
  • " }, "documentTitle": "Gesichtsbibliothek - Frigate", - "selectItem": "Wähle {{item}}" + "selectItem": "Wähle {{item}}", + "selectFace": "Wähle Gesicht", + "imageEntry": { + "dropActive": "Ziehe das Bild hierher ...", + "dropInstructions": "Ziehe ein Bild hier her oder klicke um eines auszuwählen", + "maxSize": "Maximale Größe: {{size}} MB", + "validation": { + "selectImage": "Bitte wähle ein Bild aus." + } + }, + "button": { + "addFace": "Gesicht hinzufügen", + "uploadImage": "Bild hochladen", + "deleteFaceAttempts": "Lösche Gesichtsversuche", + "reprocessFace": "Gesichter erneut verarbeiten" + }, + "train": { + "title": "Trainiere", + "aria": "Wähle Training" + }, + "deleteFaceLibrary": { + "title": "Lösche Name", + "desc": "Möchtest du die Sammlung {{name}} löschen? Alle zugehörigen Gesichter werden gelöscht." + }, + "readTheDocs": "Lies die Dokumentation", + "trainFaceAs": "Trainiere Gesicht als:", + "trainFace": "Trainiere Gesicht", + "toast": { + "success": { + "uploadedImage": "Das Bild wurde erfolgreich hochgeladen.", + "deletedFace_one": "Erfolgreich {{count}} Gesicht gelöscht.", + "deletedFace_other": "Erfolgreich {{count}} Gesichter gelöscht.", + "deletedName_one": "{{count}} Gesicht wurde erfolgreich gelöscht.", + "deletedName_other": "{{count}} Gesichter wurden erfolgreich gelöscht.", + "addFaceLibrary": "{{name}} wurde erfolgreich in die Gesichtsbibliothek aufgenommen!", + "trainedFace": "Gesicht erfolgreich trainiert.", + "updatedFaceScore": "Gesichtsbewertung erfolgreich aktualisiert." + }, + "error": { + "deleteFaceFailed": "Das Löschen ist fehlgeschlagen: {{errorMessage}}", + "uploadingImageFailed": "Bild kann nicht hochgeladen werden: {{errorMessage}}", + "addFaceLibraryFailed": "Der Gesichtsname konnte nicht gesetzt werden: {{errorMessage}}", + "trainFailed": "Ausbildung fehlgeschlagen: {{errorMessage}}", + "updateFaceScoreFailed": "Aktualisierung der Gesichtsbewertung fehlgeschlagen: {{errorMessage}}", + "deleteNameFailed": "Name kann nicht gelöscht werden: {{errorMessage}}" + } + } } diff --git a/web/public/locales/de/views/live.json b/web/public/locales/de/views/live.json index 0967ef424..2e889b206 100644 --- a/web/public/locales/de/views/live.json +++ b/web/public/locales/de/views/live.json @@ -1 +1,158 @@ -{} +{ + "lowBandwidthMode": "Modus für geringe Bandbreite", + "twoWayTalk": { + "enable": "Gegensprechfunktion aktivieren", + "disable": "Gegensprechfunktion ausschalten" + }, + "cameraAudio": { + "enable": "Kamera-Audio aktivieren", + "disable": "Kamera-Audio deaktivieren" + }, + "ptz": { + "move": { + "clickMove": { + "disable": "Bewegen per Klick deaktivieren", + "enable": "Bewegen per Klick aktivieren", + "label": "Zum Zentrieren der Kamera ins Bild klicken" + }, + "up": { + "label": "PTZ-Kamera nach oben bewegen" + }, + "left": { + "label": "PTZ-Kamera nach links bewegen" + }, + "down": { + "label": "PTZ-Kamera nach unten bewegen" + }, + "right": { + "label": "PTZ-Kamera nach rechts bewegen" + } + }, + "zoom": { + "in": { + "label": "PTZ-Kamera vergrößern" + }, + "out": { + "label": "PTZ-Kamera herauszoomen" + } + }, + "presets": "PTZ-Kameravoreinstellungen", + "frame": { + "center": { + "label": "Klicken Sie in den Rahmen, um die PTZ-Kamera zu zentrieren" + } + } + }, + "documentTitle": "Live - Frigate", + "documentTitle.withCamera": "{{camera}} - Live - Frigate", + "muteCameras": { + "disable": "Stumm aller Kameras aufheben", + "enable": "Alle Kameras auf stumm" + }, + "recording": { + "disable": "Aufzeichnung deaktivieren", + "enable": "Aufzeichnung aktivieren" + }, + "snapshots": { + "enable": "Snapshots aktivieren", + "disable": "Snapshots deaktivieren" + }, + "autotracking": { + "disable": "Autotracking deaktivieren", + "enable": "Autotracking aktivieren" + }, + "streamStats": { + "enable": "Stream Statistiken anzeigen", + "disable": "Stream-Statistiken ausblenden" + }, + "manualRecording": { + "title": "On-Demand Aufzeichnung", + "showStats": { + "label": "Statistiken anzeigen", + "desc": "Aktivieren Sie diese Option, um Stream-Statistiken als Overlay über dem Kamera-Feed anzuzeigen." + }, + "started": "Manuelle On-Demand Aufzeichnung gestartet.", + "failedToStart": "Manuelle On-Demand Aufzeichnung konnte nicht gestartet werden.", + "recordDisabledTips": "Da die Aufzeichnung in der Konfiguration für diese Kamera deaktiviert oder eingeschränkt ist, wird nur ein Schnappschuss gespeichert.", + "end": "On-Demand Aufzeichnung beenden", + "ended": "Manuelle On-Demand Aufzeichnung beendet.", + "playInBackground": { + "desc": "Aktivieren Sie diese Option, um das Streaming fortzusetzen, wenn der Player ausgeblendet ist.", + "label": "Im Hintergrund abspielen" + }, + "tips": "Starten Sie ein manuelles Ereignis basierend auf den Aufzeichnung Aufbewahrungseinstellungen dieser Kamera.", + "debugView": "Debug-Ansicht", + "start": "On-Demand Aufzeichnung starten", + "failedToEnd": "Die manuelle On-Demand Aufzeichnung konnte nicht beendet werden." + }, + "streamingSettings": "Streaming Einstellungen", + "notifications": "Benachrichtigungen", + "stream": { + "audio": { + "available": "Für diesen Stream ist Audio verfügbar", + "tips": { + "title": "Der Ton muss von Ihrer Kamera ausgegeben und für diesen Stream in go2rtc konfiguriert werden.", + "documentation": "Dokumentation lesen " + }, + "unavailable": "Für diesen Stream ist kein Audio verfügbar" + }, + "twoWayTalk": { + "tips": "Ihr Gerät muss die Funktion unterstützen und WebRTC muss für die bidirektionale Kommunikation konfiguriert sein.", + "tips.documentation": "Dokumentation lesen ", + "available": "Für diesen Stream ist eine Zwei-Wege-Sprechfunktion verfügbar", + "unavailable": "Für diesen Stream ist keine Zwei-Wege-Kommunikation möglich." + }, + "lowBandwidth": { + "tips": "Die Live-Ansicht befindet sich aufgrund von Puffer- oder Stream-Fehlern im Modus mit geringer Bandbreite.", + "resetStream": "Stream zurücksetzen" + }, + "title": "Strom", + "playInBackground": { + "tips": "Aktivieren Sie diese Option, um das Streaming fortzusetzen, wenn der Player ausgeblendet ist.", + "label": "Im Hintergrund abspielen" + } + }, + "effectiveRetainMode": { + "modes": { + "motion": "Bewegung", + "active_objects": "Aktive Objekte", + "all": "Alle" + }, + "notAllTips": "Dein Konfiguration zur Aufzeichnungsaufbewahrung von {{source}} ist eingestellt auf -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ä.
    Huom: tämä ei poista käytöstä go2rtc uusinta striimejä." + }, + "review": { + "title": "Katselu", + "desc": "Kytke päälle/pois hälytykset ja tunnistus tälle kameralle. Kun ne ovat pois päältä, uusia katseltavia tapahtumia ei luoda.", + "alerts": "Hälytykset ", + "detections": "Tunnistukset " + }, + "reviewClassification": { + "title": "Katseluiden klassifiointi", + "readTheDocumentation": "Lue dokumentaatio", + "noDefinedZones": "Tälle kameralle ei ole määritelty alueita.", + "objectAlertsTips": "Kaikki {{alertsLabels}} objektit lähteelle {{cameraName}} näytetään Hälytyksinä.", + "zoneObjectAlertsTips": "Kaikki {{alertsLabels}} objektit jotka tunnistetaan alueella {{zone}} lähteessä {{cameraName}} näytetään Hälytyksinä.", + "objectDetectionsTips": "Kaikki {{detectionsLabels}} objektit joita ei ole kategorisoitu lähteessä {{cameraName}} näytetään Tunnistuksina niiden alueesta huolimatta.", + "zoneObjectDetectionsTips": { + "text": "Kaikki {{detectionsLabels}} objektit joita ei ole kategorisoitu alueella {{zone}} lähteessä {{cameraName}} näytetään Tunnistuksina.", + "notSelectDetections": "Kaikki {{detectionsLabels}} objektit jotka tunnistetaan alueella {{zone}} lähteessä {{cameraName}}, joita ei ole kategorisoitu Hälytyksiksi näytetään Tunnistuksina niiden alueesta huolimatta.", + "regardlessOfZoneObjectDetectionsTips": "Kaikki {{detectionsLabels}} objektit joita ei ole kategorisoitu lähteessä {{cameraName}} näytetään Tunnistuksina niiden alueesta huolimatta." + }, + "selectAlertsZones": "Valitse alueet Hälytystä varten", + "desc": "Frigate kategorisoi tahtumia Hälytyksiksi ja Tunnistuksiksi. Vakiona kaikki henkilö sekä ajoneuvo objektit käsitellään Hälytyksinä. Voit kategorisoida uudelleen katseltavat tapahtumat antamalla niille vaaditut alueet.", + "limitDetections": "Rajoita tunnistukset tiettyihin alueisiin", + "selectDetectionsZones": "Valitse alueet Tunnistusta varten" + } + }, + "masksAndZones": { + "filter": { + "all": "Kaikki maskit ja alueet" + }, + "form": { + "polygonDrawing": { + "delete": { + "desc": "Oletko varma että haluat poistaa {{type}}{{name}}?", + "success": "{{name}} on poistettu.", + "title": "Varmista poistaminen" + }, + "error": { + "mustBeFinished": "Polygonien piirron pitää olla valmis ennen tallennusta." + }, + "removeLastPoint": "Poista edellinen piste", + "snapPoints": { + "true": "Napsauta pisteet", + "false": "Älä napsauta pisteitä" + }, + "reset": { + "label": "Poista kaikki pisteet" + } + }, + "zoneName": { + "error": { + "mustBeAtLeastTwoCharacters": "Alueen nimen tulee olla vähintään 2 merkin pituinen.", + "alreadyExists": "Tämän niminen alue on jo olemassa.", + "mustNotContainPeriod": "Alueen nimessä ei saa olla pisteitä.", + "hasIllegalCharacter": "Alueen nimessä on kiellettyjä merkkejä.", + "mustNotBeSameWithCamera": "Alueen nimi ei saa olla sama kuin kameran nimi." + } + }, + "distance": { + "error": { + "text": "Välimatkan tulee olla suurempi tai yhtä suuri kuin 0.1.", + "mustBeFilled": "Kaikki välimatka -kentät tulee olla täytetty jotta nopeusarviota voidaan käyttää." + } + }, + "inertia": { + "error": { + "mustBeAboveZero": "Inertian tulee olla yli 0." + } + }, + "loiteringTime": { + "error": { + "mustBeGreaterOrEqualZero": "Oleiluaika tulee olla suurempi tai yhtä suuri kuin 0." + } + } + }, + "zones": { + "label": "Alueet", + "documentTitle": "Muokkaa alueita - Frigate" + }, + "toast": { + "error": { + "copyCoordinatesFailed": "Koordinaattien kopioiminen leikepöydälle epäonnistui." + }, + "success": { + "copyCoordinates": "{{polyName}} - koordinaatit kopioitu leikepöydälle." + } + } + } +} diff --git a/web/public/locales/fi/views/system.json b/web/public/locales/fi/views/system.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/web/public/locales/fi/views/system.json @@ -0,0 +1 @@ +{} diff --git a/web/public/locales/fr/audio.json b/web/public/locales/fr/audio.json index 4ebff5d12..0a8f0934e 100644 --- a/web/public/locales/fr/audio.json +++ b/web/public/locales/fr/audio.json @@ -1,10 +1,10 @@ { - "speech": "Voic", - "babbling": "Babillages", + "speech": "Voix", + "babbling": "Balbutiements", "yell": "Cri", "bicycle": "Vélo", "car": "Voiture", - "bellow": "Beuglement", + "bellow": "En dessous", "whispering": "Chuchotements", "laughter": "Rires", "snicker": "Ricanement", @@ -26,5 +26,91 @@ "synthetic_singing": "Chant synthétique", "rapping": "Rap", "horse": "Cheval", - "dog": "Chien" + "dog": "Chien", + "sheep": "Mouton", + "whistling": "Sifflement", + "breathing": "Respiration", + "snoring": "Ronflement", + "gasp": "Souffle", + "pant": "halètement", + "snort": "Reniflement", + "camera": "Caméra", + "cough": "Toussotement", + "groan": "Gémissement", + "grunt": "Grognement", + "throat_clearing": "Éclaircissement de la gorge", + "wheeze": "Respiration bruyante", + "sneeze": "Éternuement", + "sniff": "Reniflement", + "chewing": "Mastication", + "gargling": "Gargarisme", + "ambulance": "Ambulance", + "police_car": "Voiture de police", + "emergency_vehicle": "Véhicule d'urgence", + "subway": "Métro", + "fire_alarm": "Alarme Incendie", + "smoke_detector": "Détecteur de Fumée", + "siren": "Sirène", + "pulleys": "Poulies", + "gears": "Engrenages", + "clock": "Horloge", + "ratchet": "Cliquet", + "mechanisms": "Mécanismes", + "steam_whistle": "Sifflet à vapeur", + "whistle": "Sifflet", + "foghorn": "Corne de brume", + "tools": "Outils", + "printer": "Imprimante", + "air_conditioning": "Climatisation", + "mechanical_fan": "Ventilateur mécanique", + "sewing_machine": "Machine à coudre", + "wood": "Bois", + "fireworks": "Feux d'artifice", + "glass": "Verre", + "television": "Télévision", + "sound_effect": "Effet sonore", + "burping": "Rots", + "fart": "Pet", + "crowd": "Foule", + "children_playing": "Enfants en train de jouer", + "animal": "Animal", + "bark": "Aboiement", + "pig": "Cochon", + "goat": "Chèvre", + "chicken": "Poulet", + "turkey": "Dinde", + "duck": "Canard", + "goose": "Dindon", + "wild_animals": "Animaux Sauvages", + "crow": "Corbeau", + "dogs": "Chiens", + "mouse": "Souris", + "insect": "Insecte", + "cricket": "Grillon", + "mosquito": "Moustique", + "fly": "Mouche", + "frog": "Grenouille", + "snake": "Serpent", + "music": "Musique", + "guitar": "Guitare", + "electric_guitar": "Guitare électrique", + "keyboard": "Clavier", + "piano": "Piano", + "vehicle": "Véhicule", + "skateboard": "Skateboard", + "door": "Porte", + "blender": "Mixer", + "hair_dryer": "Sèche cheveux", + "toothbrush": "Brosse à dents", + "sink": "Lavabo", + "scissors": "Paire de ciseaux", + "humming": "Bourdonnement", + "shuffle": "Mélanger", + "footsteps": "Pas", + "hiccup": "Hoquet", + "finger_snapping": "Claquement de doigts", + "clapping": "Claquements", + "applause": "Applaudissement", + "heartbeat": "Battements de coeur", + "cheering": "Applaudissement" } diff --git a/web/public/locales/fr/common.json b/web/public/locales/fr/common.json index c29916818..baaa9ecbe 100644 --- a/web/public/locales/fr/common.json +++ b/web/public/locales/fr/common.json @@ -22,24 +22,53 @@ "pm": "PM", "am": "AM", "yr": "{{time}}a", - "year": "{{time}} années", + "year_one": "{{time}} année", + "year_many": "{{time}} années", + "year_other": "{{time}} années", "mo": "{{time}}m", - "month": "{{time}} mois", + "month_one": "{{time}} mois", + "month_many": "{{time}} mois", + "month_other": "{{time}} mois", "s": "{{time}}s", - "second": "{{time}} secondes", + "second_one": "{{time}} seconde", + "second_many": "{{time}} secondes", + "second_other": "{{time}} secondes", "m": "{{time}}m", - "hour": "{{time}} heures", + "hour_one": "{{time}} heure", + "hour_many": "{{time}} heures", + "hour_other": "{{time}} heures", "24hours": "24 heures", - "minute": "{{time}} minutes", + "minute_one": "{{time}} minute", + "minute_many": "{{time}} minutes", + "minute_other": "{{time}} minutes", "d": "{{time}}j", - "day": "{{time}} jours", - "1hour": "1 heure" + "day_one": "{{time}} jour", + "day_many": "{{time}} jours", + "day_other": "{{time}} jours", + "1hour": "1 heure", + "formattedTimestamp": { + "12hour": "%b %-d, %I:%M:%S %p", + "24hour": "%d %b, %H:%M:%S" + }, + "formattedTimestampWithYear": { + "24hour": "%b %-d %Y, %H:%M", + "12hour": "%b %-d %Y, %I:%M %p" + }, + "formattedTimestampOnlyMonthAndDay": "%b %-d", + "formattedTimestampExcludeSeconds": { + "12hour": "%b %-d, %I:%M %p", + "24hour": "%b %-d, %H:%M" + }, + "formattedTimestamp2": { + "12hour": "%m/%d %I:%M:%S%P", + "24hour": "%d %b %H:%M:%S" + } }, "button": { "apply": "Appliquer", "reset": "Réinitialiser", "disabled": "Désactivé", - "save": "Sauvegarder", + "save": "Enregistrer", "saving": "Sauvegarde ...", "close": "Fermer", "copy": "Copier", @@ -54,7 +83,7 @@ "yes": "Oui", "no": "Non", "unsuspended": "Ré-activer", - "play": "Play", + "play": "Lire", "unselect": "Désélectionner", "suspended": "Suspendu", "enable": "Activer", @@ -75,7 +104,37 @@ "menu": { "configuration": "Configuration", "language": { - "en": "Anglais" + "en": "Anglais", + "withSystem": { + "label": "Utiliser les paramètres système pour la langue" + }, + "zhCN": "简体中文 (Chinois simplifié)", + "hi": "हिन्दी (Hindi)", + "fr": "Français (Français)", + "ja": "日本語 (Japanonais)", + "tr": "Türkçe (Turc)", + "it": "Italiano (Italien)", + "nl": "Nederlands (Néerlandais)", + "sv": "Svenska (Suédois)", + "cs": "Čeština (Tchèque)", + "nb": "Norsk Bokmål (Bokmål Norvégien)", + "ko": "한국어 (Coréen)", + "fa": "فارسی (Perse)", + "pl": "Polski (Polonais)", + "el": "Ελληνικά (Grec)", + "ro": "Română (Roumain)", + "hu": "Magyar (Hongrois)", + "he": "עברית (Hebreu)", + "ru": "Русский (Russe)", + "de": "Deutsch (Allemand)", + "es": "Español (Espagnol)", + "ar": "العربية (Arabe)", + "da": "Dansk (Danois)", + "fi": "Suomi (Finlandais)", + "pt": "Português (Portugais)", + "sk": "Slovenčina (Slave)", + "uk": "Українська (Ukrainien)", + "vi": "Tiếng Việt (Vietnamien)" }, "appearance": "Apparence", "darkMode": { @@ -120,9 +179,9 @@ "restart": "Redémarrer Frigate", "live": { "cameras": { - "count_one": "{{count}} Camera", - "count_many": "{{count}} Cameras", - "count_other": "", + "count_one": "{{count}} Caméra", + "count_many": "{{count}} Caméras", + "count_other": "{{count}} Caméras", "title": "Caméras" }, "allCameras": "Toutes les caméras", @@ -134,7 +193,11 @@ }, "toast": { "save": { - "title": "Sauvegarder" + "title": "Sauvegarder", + "error": { + "noMessage": "Echec lors de l'enregistrement des changements de configuration", + "title": "Echec lors de l'enregistrement des changements de configuration : {{errorMessage}}" + } }, "copyUrlToClipboard": "Lien copié dans le presse-papier." }, @@ -169,5 +232,11 @@ }, "label": { "back": "Retour" + }, + "unit": { + "speed": { + "kph": "kph", + "mph": "mph" + } } } diff --git a/web/public/locales/fr/components/camera.json b/web/public/locales/fr/components/camera.json index cd7838798..1ff7d40fc 100644 --- a/web/public/locales/fr/components/camera.json +++ b/web/public/locales/fr/components/camera.json @@ -29,8 +29,55 @@ "camera": { "setting": { "label": "Paramètres de flux de caméra", - "title": "{{cameraName}} Paramètres de flux" + "title": "{{cameraName}} Paramètres de flux", + "audioIsUnavailable": "L'audio n'est pas disponible pour ce flux", + "audioIsAvailable": "L'audio est disponible pour ce flux", + "desc": "Modifie les options du flux temps réel pour le tableau de bord de ce groupe de caméras. Ces paramètres sont spécifiques à un périphérique et/ou navigateur.", + "audio": { + "tips": { + "document": "Lire la documentation ", + "title": "L'audio doit être capté par la caméra et configuré dans go2rtc pour ce flux." + } + }, + "streamMethod": { + "label": "Méthode de streaming", + "method": { + "noStreaming": { + "label": "Pas de streaming", + "desc": "Les images provenant de la caméra ne seront mises à jour qu'une fois par minute et il n'y aura pas de diffusion en temps réel." + }, + "smartStreaming": { + "label": "Streaming intelligent (recommandé)", + "desc": "Le streaming intelligent mettra à jour les images de la caméra une fois par minute lorsqu'aucune activité n'est détectée afin de conserver la bande-passante et les ressources." + }, + "continuousStreaming": { + "label": "Streaming continu", + "desc": { + "title": "L'image de la caméra sera toujours un flux temps réel lorsqu'elle est visible dans le tableau de bord, même si aucune activité n'est détectée.", + "warning": "Le streaming continu peut engendrer une bande-passante élevée et des problèmes de performance. A utiliser avec précaution." + } + } + } + }, + "compatibilityMode": { + "label": "Mode de compatibilité", + "desc": "Activer cette option uniquement si votre flux temps réel affiche des erreurs chromatiques et a une ligne diagonale sur le côté droit de l'image." + } } } + }, + "debug": { + "timestamp": "Horodatage", + "motion": "Mouvement", + "mask": "Masque", + "options": { + "showOptions": "Afficher les options", + "title": "Options", + "label": "Paramètres", + "hideOptions": "Masquer les options" + }, + "boundingBox": "Boîte de délimitation", + "zones": "Zones", + "regions": "Régions" } } diff --git a/web/public/locales/fr/components/dialog.json b/web/public/locales/fr/components/dialog.json index 6733415f0..8983f125e 100644 --- a/web/public/locales/fr/components/dialog.json +++ b/web/public/locales/fr/components/dialog.json @@ -19,12 +19,12 @@ "label": "Confirmez cette étiquette pour Frigate Plus", "true_one": "C'est un {{label}}", "true_many": "Ce sont des {{label}}", - "true_other": "" + "true_other": "Ce sont des {{label}}" }, "false": { "false_one": "Ceci n'est pas un {{label}}", - "false_many": "Ceci n'est pas une {{label}}", - "false_other": "", + "false_many": "Ceux-ci ne sont pas des {{label}}", + "false_other": "Ceux-ci ne sont pas des {{label}}", "label": "Ne pas confirmer cette étiquette pour Frigate Plus" }, "state": { @@ -42,7 +42,7 @@ "fromTimeline": "Sélectionner depuis la chronologie", "lastHour_one": "Dernière heure", "lastHour_many": "{{count}} dernières heures", - "lastHour_other": "", + "lastHour_other": "{{count}} dernières heures", "end": { "label": "Sélectionner l'instant de fin", "title": "Instant de fin" @@ -55,7 +55,9 @@ "selectOrExport": "Sélectionner ou Exporter", "toast": { "error": { - "failed": "Impossible de démarrer l'export : {{error}}" + "failed": "Impossible de démarrer l'export : {{error}}", + "endTimeMustAfterStartTime": "L'instant de fin doit être aprés l'instant de début", + "noVaildTimeSelected": "La période temporelle sélectionnée n'est pas valide" }, "success": "Exportation démarrée. Consulter le fichier dans le dossier /exports." }, @@ -63,12 +65,52 @@ "name": { "placeholder": "Nommer l'export" }, - "export": "Exporter" + "export": "Exporter", + "fromTimeline": { + "saveExport": "Enregistrer l'export", + "previewExport": "Prévisualiser l'export" + } }, "search": { "saveSearch": { "desc": "Fournir un nom pour cette recherche sauvegardée.", - "label": "Sauvergarder la recherche" + "label": "Sauvergarder la recherche", + "success": "La recherche ({{searchName}}) a été enregistrée.", + "button": { + "save": { + "label": "Enregistrer cette recherche" + } + }, + "overwrite": "{{searchName}} existe déjà. L'enregistrement écrasera la recherche existante.", + "placeholder": "Renseigner un nom pour votre recherche" + } + }, + "streaming": { + "label": "Flux", + "restreaming": { + "disabled": "Le renvoi du flux n'est pas activé pour cette caméra.", + "desc": { + "readTheDocumentation": "Lire la documentation ", + "title": "Paramétrer go2rtc pour accéder à des options supplémentaires concernant le flux temps réel et l'audio pour cette caméra." + } + }, + "showStats": { + "label": "Afficher les statistiques des flux", + "desc": "Activer cette option pour afficher les statistiques des flux en surimpression sur le flux de la caméra." + }, + "debugView": "Vue debogage" + }, + "recording": { + "confirmDelete": { + "desc": { + "selected": "Êtes-vous certain de vouloir supprimer toutes les vidéos enregistrées associées à cet objet Review ?

    Presser la touche Maj pour éviter cette boîte de dialogue." + }, + "title": "Confirmer la suppression" + }, + "button": { + "export": "Exporter", + "markAsReviewed": "Marquer comme vérifié", + "deleteNow": "Supprimer immédiatement" } } } diff --git a/web/public/locales/fr/components/filter.json b/web/public/locales/fr/components/filter.json index 13d34a799..138ae6323 100644 --- a/web/public/locales/fr/components/filter.json +++ b/web/public/locales/fr/components/filter.json @@ -5,7 +5,9 @@ "title": "Toutes les étiquettes", "short": "Étiquettes" }, - "count": "{{count}} Étiquettes" + "count": "{{count}} Étiquettes", + "count_one": "{{count}} Étiquette", + "count_other": "{{count}} Étiquettes" }, "filter": "Filtre", "zones": { @@ -31,5 +33,94 @@ "all": "Toutes les sous-étiquettes" }, "score": "Score", - "estimatedSpeed": "Vitesse estimée ({{unit}})" + "estimatedSpeed": "Vitesse estimée ({{unit}})", + "sort": { + "label": "Tri", + "dateDesc": "Date (ordre chronologique inverse)", + "dateAsc": "Date (ordre chronologique)", + "scoreDesc": "Score Objet (Descendant)", + "scoreAsc": "Score Objet (Ascendant)", + "speedAsc": "Vitesse Estimée (Ascendant)", + "speedDesc": "Vitesse Estimée (Descendant)", + "relevance": "Pertinence" + }, + "features": { + "submittedToFrigatePlus": { + "tips": "Vous devez d'abord filtrer les objets suivis qui ont un instantané.

    Les objets suivis sans instantané ne peuvent pas être soumis à Frigate+.", + "label": "Soumis à Frigate+" + }, + "hasVideoClip": "A un clip vidéo", + "hasSnapshot": "A un instantané", + "label": "Caractéristiques" + }, + "explore": { + "settings": { + "title": "Paramètres", + "defaultView": { + "title": "Vue par défaut", + "summary": "Résumé", + "unfilteredGrid": "Grille non filtrée", + "desc": "Lorsqu'aucun filtre n'est sélectionné, afficher un résumé des objets suivis les plus récents par étiquette ou affichez une grille non filtrée." + }, + "gridColumns": { + "desc": "Sélectionner le nombre de colonnes dans la vue grille.", + "title": "Colonnes de la grille" + }, + "searchSource": { + "label": "Source de recherche", + "options": { + "thumbnailImage": "Image de la vignette", + "description": "Description" + }, + "desc": "Choisissez si vous souhaitez rechercher les vignettes ou les descriptions de vos objets suivis." + } + }, + "date": { + "selectDateBy": { + "label": "Sélectionner une date pour filtrer par" + } + } + }, + "review": { + "showReviewed": "Montrer les évalués" + }, + "cameras": { + "label": "Filtre des caméras", + "all": { + "short": "Caméras", + "title": "Toutes les Caméras" + } + }, + "motion": { + "showMotionOnly": "Afficher le mouvement uniquement" + }, + "logSettings": { + "filterBySeverity": "Filtrer les logs par sévérité", + "loading": { + "title": "Chargement", + "desc": "Lorsque le volet de la log défile vers le bas, les nouvelles logs sont automatiquement diffusées au fur et à mesure de leur ajout." + }, + "label": "Niveau de log du filtre", + "disableLogStreaming": "Désactiver la diffusion des logs", + "allLogs": "Toutes les logs" + }, + "recognizedLicensePlates": { + "placeholder": "Tapez pour rechercher des plaques d'immatriculation...", + "noLicensePlatesFound": "Aucune plaque d'immatriculation trouvée.", + "loading": "Chargement des plaques d'immatriculation reconnues...", + "title": "Plaques d'immatriculation reconnues", + "loadFailed": "Échec du chargement des plaques d'immatriculation reconnues.", + "selectPlatesFromList": "Sélectionner une ou plusieurs plaques dans la liste." + }, + "trackedObjectDelete": { + "title": "Confirmer la suppression", + "toast": { + "success": "Les objets suivis ont été supprimés avec succès.", + "error": "Échec à la suppression des objets suivis : {{errorMessage}}" + }, + "desc": "La suppression de ces objets suivis {{objectLength}} supprime l'instantané, les incorporations enregistrées et les entrées du cycle de vie de l'objet associées. Les séquences enregistrées de ces objets suivis dans la vue Historique NE seront PAS supprimées.

    Voulez-vous vraiment continuer ?

    Maintenez la touche Maj enfoncée pour ignorer cette boîte de dialogue à l'avenir." + }, + "zoneMask": { + "filterBy": "Filtrer par masque de zone" + } } diff --git a/web/public/locales/fr/components/player.json b/web/public/locales/fr/components/player.json index 9712a9efa..bf32803ca 100644 --- a/web/public/locales/fr/components/player.json +++ b/web/public/locales/fr/components/player.json @@ -28,6 +28,24 @@ "title": "Latence", "value": "{{seconds}} sec" } + }, + "droppedFrames": { + "short": { + "value": "{{droppedFrames}} images", + "title": "Abandonné" + }, + "title": "Images abandonnées :" + }, + "decodedFrames": "Images décodées :", + "droppedFrameRate": "Proportion d'images abandonnées :", + "totalFrames": "Total Images :" + }, + "toast": { + "error": { + "submitFrigatePlusFailed": "Échec de la soumission de l'image à Frigate+" + }, + "success": { + "submittedFrigatePlus": "Image soumise avec succès à Frigate+" } } } diff --git a/web/public/locales/fr/objects.json b/web/public/locales/fr/objects.json index eea8c0809..52a0cca4c 100644 --- a/web/public/locales/fr/objects.json +++ b/web/public/locales/fr/objects.json @@ -16,5 +16,105 @@ "cat": "Chat", "stop_sign": "Panneau de stop", "dog": "Chien", - "horse": "Cheval" + "horse": "Cheval", + "sheep": "Mouton", + "cow": "Vache", + "elephant": "Eléphant", + "bear": "Ours", + "zebra": "Zèbre", + "hat": "Chapeau", + "tie": "Cravate", + "suitcase": "Valise", + "frisbee": "Frisbee", + "skis": "Skis", + "snowboard": "Surf des neiges", + "sports_ball": "Balon des sports", + "kite": "Cerf-volant", + "baseball_bat": "Bat de base-ball", + "umbrella": "Parapluie", + "giraffe": "Girafe", + "eye_glasses": "Lunettes", + "backpack": "Sac à dos", + "handbag": "Sac à main", + "shoe": "Chaussure", + "clock": "Horloge", + "bottle": "Bouteille", + "baseball_glove": "Gant de baseball", + "skateboard": "Skateboard", + "surfboard": "Planche de surf", + "tennis_racket": "Raquette de Tennis", + "plate": "Assiette", + "cup": "Tasse", + "banana": "Banane", + "apple": "Pomme", + "wine_glass": "Verre à vin", + "pizza": "Pizza", + "couch": "Canapé", + "potted_plant": "Plante en pot", + "mirror": "Miroir", + "window": "Fenêtre", + "desk": "Bureau", + "door": "Porte", + "remote": "Télécommande", + "keyboard": "Clavier", + "mouse": "Souris", + "tv": "TV", + "laptop": "Ordinateur portable", + "toaster": "Grille-pain", + "book": "Livre", + "teddy_bear": "Ours en peluche", + "blender": "Mixer", + "toothbrush": "Brosse à dents", + "hair_brush": "Brosse à cheveux", + "vehicle": "Véhicule", + "fox": "Renard", + "deer": "Cerf", + "animal": "Animal", + "goat": "Chèvre", + "rabbit": "Lapin", + "raccoon": "Raton laveur", + "waste_bin": "Poubelle", + "robot_lawnmower": "Robot tondeuse", + "on_demand": "Sur Demande", + "face": "Visage", + "license_plate": "Plaque d'immatriculation", + "bbq_grill": "Barbecue", + "ups": "UPS", + "fedex": "FedEx", + "dhl": "DHL", + "package": "Paquetage", + "an_post": "An Post", + "gls": "GLS", + "dpd": "DPD", + "postnl": "PostNL", + "amazon": "Amazon", + "hot_dog": "Hot Dog", + "refrigerator": "Réfrigérateur", + "bark": "Aboiement", + "oven": "Four", + "scissors": "Paire de ciseaux", + "toilet": "Toilettes", + "carrot": "Carotte", + "bed": "Lit", + "cell_phone": "Téléphone Portable", + "fork": "Fourchette", + "squirrel": "Écureuil", + "microwave": "Micro-Ondes", + "hair_dryer": "Sèche cheveux", + "bowl": "Bol", + "spoon": "Cuillère", + "sandwich": "Sandwich", + "sink": "Lavabo", + "broccoli": "Brocoli", + "knife": "Couteau", + "nzpost": "NZPost", + "orange": "Orange", + "chair": "Chaise", + "donut": "Donut", + "usps": "USPS", + "cake": "Cake", + "dining_table": "Table à manger", + "vase": "Vase", + "purolator": "Purolator", + "postnord": "PostNord" } diff --git a/web/public/locales/fr/views/events.json b/web/public/locales/fr/views/events.json index f1ec782e1..1809139a3 100644 --- a/web/public/locales/fr/views/events.json +++ b/web/public/locales/fr/views/events.json @@ -17,7 +17,7 @@ "aria": "Sélectionner les événements", "noFoundForTimePeriod": "Aucun événement trouvé pour cette plage de temps." }, - "documentTitle": "Revue - Frigate", + "documentTitle": "Évaluations - Frigate", "recordings": { "documentTitle": "Enregistrements - Frigate" }, @@ -25,5 +25,11 @@ "last24Hours": "Dernières 24 heures" }, "timeline.aria": "Sélectionner une chronologie", - "markAsReviewed": "Marqué comme révisé" + "markAsReviewed": "Marqué comme révisé", + "newReviewItems": { + "button": "Nouveaux éléments à évaluer", + "label": "Afficher les nouveaux éléments d'évaluation" + }, + "camera": "Caméra", + "markTheseItemsAsReviewed": "Marquer ces éléments comme évalués" } diff --git a/web/public/locales/fr/views/explore.json b/web/public/locales/fr/views/explore.json index 36e054b64..24996af89 100644 --- a/web/public/locales/fr/views/explore.json +++ b/web/public/locales/fr/views/explore.json @@ -1,12 +1,12 @@ { "generativeAI": "IA générative", - "documentTitle": "Explorer - Frigate", + "documentTitle": "Explorateur - Frigate", "exploreIsUnavailable": { "title": "L'exploration est indisponible", "embeddingsReindexing": { "estimatedTime": "Temps restant estimé :", "finishingShortly": "Termine bientôt", - "context": "L'exploration peut être utilisée une fois la réindexation des objets suivis terminée", + "context": "L'exploration peut être utilisée une fois la réindexation des objets suivis terminée.", "startingUp": "Démarrage...", "step": { "thumbnailsEmbedded": "Vignettes intégrées : ", @@ -23,11 +23,172 @@ "textModel": "Modèle de texte" }, "tips": { - "documentation": "Lire la documentation" - } + "documentation": "Lire la documentation", + "context": "Vous souhaiterez peut-être réindexer les incorporations de vos objets suivis une fois les modèles téléchargés." + }, + "error": "Une erreur est survenue. Vérifier les logs Frigate." } }, "details": { - "timestamp": "Horodatage" + "timestamp": "Horodatage", + "item": { + "title": "Évaluer les détails de l'élément", + "button": { + "share": "Partager cet élément d'évaluation", + "viewInExplore": "Afficher dans Explorer" + }, + "toast": { + "success": { + "regenerate": "Une nouvelle description a été demandée à {{provider}}. Selon la vitesse de votre fournisseur, la régénération de la nouvelle description peut prendre un certain temps.", + "updatedSublabel": "Sous-étiquette mise à jour avec succès.", + "updatedLPR": "Plaque d'immatriculation mise à jour avec succès." + }, + "error": { + "regenerate": "Échec à l'appel de {{provider}} pour une nouvelle description : {{errorMessage}}", + "updatedSublabelFailed": "Échec à la mise à jour du sous-étiquette : {{errorMessage}}", + "updatedLPRFailed": "Échec à la mise à jour de la plaque d'immatriculation : {{errorMessage}}" + } + }, + "tips": { + "mismatch_one": "{{count}} objet indisponible a été détecté et inclus dans cet élément d'évaluation. Cet objet n'a pas été considéré comme une alerte ou une détection, ou a déjà été nettoyé/supprimé.", + "mismatch_many": "{{count}} objets indisponibles ont été détectés et inclus dans cet élément d'évaluation. Ces objets n'ont pas été considérés comme une alerte ou une détection, ou ont déjà été nettoyés/supprimés.", + "mismatch_other": "{{count}} objets indisponibles ont été détectés et inclus dans cet élément d'évaluation. Ces objets n'ont pas été considérés comme une alerte ou une détection, ou ont déjà été nettoyés/supprimés.", + "hasMissingObjects": "Ajustez votre configuration si vous souhaitez que Frigate enregistre les objets suivis pour les étiquettes suivantes : {{objects}}" + }, + "desc": "Vérifier les détails de l'élément" + }, + "label": "Étiquette", + "editSubLabel": { + "title": "Modifier la sous-étiquette", + "desc": "Saisissez une nouvelle sous-étiquette pour ce {{label}}", + "descNoLabel": "Entrer une nouvelle sous-étiquette pour cet objet suivi" + }, + "topScore": { + "label": "Meilleur score", + "info": "Le meilleur score est le score médian le plus élevé pour l'objet suivi, il peut donc différer du score affiché sur la vignette des résultats de recherche." + }, + "objects": "Objets", + "button": { + "regenerate": { + "label": "Régénérer la description de l'objet suivi", + "title": "Regénérer" + }, + "findSimilar": "Trouver similaire" + }, + "description": { + "label": "Description", + "placeholder": "Description de l'objet suivi", + "aiTips": "Frigate ne demandera pas de description à votre fournisseur d'IA générative tant que le cycle de vie de l'objet suivi ne sera pas terminé." + }, + "regenerateFromSnapshot": "Régénérer à partir d'un instantané", + "regenerateFromThumbnails": "Régénérer à partir des vignettes", + "editLPR": { + "title": "Modifier la plaque d'immatriculation", + "desc": "Saisissez une nouvelle valeur de plaque d'immatriculation pour ce {{label}}", + "descNoLabel": "Saisir une nouvelle valeur de plaque d'immatriculation pour cet objet suivi" + }, + "recognizedLicensePlate": "Plaque d'immatriculation reconnue", + "estimatedSpeed": "Vitesse Estimée", + "zones": "Zones", + "expandRegenerationMenu": "Développer le menu de régénération", + "camera": "Caméra", + "tips": { + "descriptionSaved": "Description enregistrée avec succès", + "saveDescriptionFailed": "Échec à la mise à jour de la description : {{errorMessage}}" + } + }, + "type": { + "details": "détails", + "video": "vidéo", + "object_lifecycle": "cycle de vie de l'objet", + "snapshot": "instantané" + }, + "objectLifecycle": { + "title": "Cycle de vie de l'objet", + "noImageFound": "Aucune image trouvée pour cet horodatage.", + "createObjectMask": "Créer Masque Objet", + "scrollViewTips": "Faites défiler pour voir les moments importants du cycle de vie de cet objet.", + "adjustAnnotationSettings": "Ajuster les paramètres d'annotation", + "autoTrackingTips": "Les positions de la zone de délimitation seront inexactes pour les caméras de suivi automatique.", + "lifecycleItemDesc": { + "visible": "{{label}} détecté", + "entered_zone": "{{label}} est entré dans {{zones}}", + "stationary": "{{label}} est devenu stationnaire", + "attribute": { + "other": "{{label}} reconnu comme {{attribute}}", + "faceOrLicense_plate": "{{attribute}} détecté pour {{label}}" + }, + "gone": "{{label}} parti", + "heard": "{{label}} entendu", + "external": "{{label}} détecté", + "active": "{{label}} est devenu actif" + }, + "annotationSettings": { + "title": "Paramètres d'annotation", + "showAllZones": { + "title": "Montrer toutes les zones", + "desc": "Afficher toujours les zones sur les images où les objets sont entrés dans une zone." + }, + "offset": { + "label": "Décalage de l'annotation", + "documentation": "Lire la documentation ", + "desc": "Ces données proviennent du flux de détection de votre caméra, mais sont superposées aux images du flux d'enregistrement. Il est peu probable que les deux flux soient parfaitement synchronisés. Par conséquent, le cadre de délimitation et la séquence ne seront pas parfaitement alignés. Cependant, le champ 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.

    Êtes-vous sûr de vouloir continuer ?" + } + }, + "noTrackedObjects": "Aucun objet suivi trouvé", + "fetchingTrackedObjectsFailed": "Erreur lors de la récupération des objets suivis : {{errorMessage}}", + "trackedObjectsCount_one": "{{count}} objet suivi ", + "trackedObjectsCount_many": "{{count}} objets suivis ", + "trackedObjectsCount_other": "{{count}} objets suivis ", + "searchResult": { + "deleteTrackedObject": { + "toast": { + "success": "L'objet suivi a été supprimé avec succès.", + "error": "Échec à la suppression de l'objet suivi : {{errorMessage}}" + } + } } } diff --git a/web/public/locales/fr/views/faceLibrary.json b/web/public/locales/fr/views/faceLibrary.json index 669309830..c0f3b566d 100644 --- a/web/public/locales/fr/views/faceLibrary.json +++ b/web/public/locales/fr/views/faceLibrary.json @@ -1,6 +1,6 @@ { "description": { - "addFace": "Tutoriel ajouter une nouvelle collection à la librairie de visages", + "addFace": "Parcourez la procédure d’ajout d’une nouvelle collection à la bibliothèque de visages.", "placeholder": "Saisissez un nom pour cette collection" }, "details": { @@ -10,7 +10,7 @@ "timestamp": "Horodatage", "faceDesc": "Détails du visage et de l'objet associé" }, - "documentTitle": "Librairie de visages - Frigate", + "documentTitle": "Bibliothèque de visages - Frigate", "uploadFaceImage": { "title": "Télécharger l'image du visage", "desc": "Téléchargez une image pour rechercher des visages et l'inclure dans {{pageToggle}}" @@ -19,20 +19,55 @@ "title": "Créer une collection", "desc": "Créer une nouvelle collection", "new": "Créer un nouveau visage", - "nextSteps": "Pour construire une base solide :
  • Utilisez l’onglet Entraîner pour sélectionner et vous entraîner sur des images pour chaque personne détectée.
  • Concentrez-vous sur des images de face pour de meilleurs résultats ; évitez d’entraîner des images qui capturent des visages sous un angle.
  • " + "nextSteps": "Pour construire une base solide :
  • Utilisez l’onglet Entraîner pour sélectionner et entraîner le modèle sur des images pour chaque personne détectée.
  • Concentrez-vous sur des images de face pour de meilleurs résultats ; évitez d’entraîner le modèle des images qui capturent des visages de biais.
  • " }, "train": { - "title": "Entraîner" + "title": "Entraîner", + "aria": "Sélectionner Entraîner" }, "selectFace": "Sélectionner un visage", "button": { "addFace": "Ajouter un visage", "uploadImage": "Envoyer une image", - "deleteFaceAttempts": "Supprimer les tentatives de reconnaissance faciale" + "deleteFaceAttempts": "Supprimer les tentatives de reconnaissance faciale", + "reprocessFace": "Réanalyser le Visage" }, "selectItem": "Sélectionner {{item}}", "deleteFaceLibrary": { "title": "Supprimer un nom", "desc": "Etes-vous certain de vouloir supprimer la collection {{name}} ? Cette action supprimera définitivement tous les visages associés." - } + }, + "imageEntry": { + "dropActive": "Déposer l'image ici...", + "dropInstructions": "Faites glisser et déposez une image ici, ou cliquez pour sélectionner", + "maxSize": "Taille Max : {{size}}MB", + "validation": { + "selectImage": "Veuillez sélectionner un fichier image." + } + }, + "readTheDocs": "Lire la documentation", + "toast": { + "success": { + "deletedName_one": "{{count}} visage a été supprimé avec succès.", + "deletedName_many": "{{count}} visages ont été supprimés avec succès.", + "deletedName_other": "{{count}} visages ont été supprimés avec succès.", + "uploadedImage": "Image téléchargée avec succès.", + "addFaceLibrary": "{{name}} a été ajouté avec succès à la bibliothèque de visages !", + "updatedFaceScore": "Score du visage mis à jour avec succès.", + "deletedFace_one": "{{count}} visage a été supprimé avec succès.", + "deletedFace_many": "{{count}} visages ont été supprimés avec succès.", + "deletedFace_other": "{{count}} visages ont été supprimés avec succès.", + "trainedFace": "Visage entraîné avec succès." + }, + "error": { + "uploadingImageFailed": "Échec du chargement de l'image : {{errorMessage}}", + "deleteFaceFailed": "Échec de la suppression : {{errorMessage}}", + "trainFailed": "Échec à l'entrainement : {{errorMessage}}", + "updateFaceScoreFailed": "Échec à la mise à jour du score du visage : {{errorMessage}}", + "addFaceLibraryFailed": "Échec de la définition du nom du visage : {{errorMessage}}", + "deleteNameFailed": "Échec de la suppression du nom : {{errorMessage}}" + } + }, + "trainFaceAs": "Entraîner Visage comme :", + "trainFace": "Entraîner Visage" } diff --git a/web/public/locales/fr/views/live.json b/web/public/locales/fr/views/live.json index 818b85c61..b2bb55035 100644 --- a/web/public/locales/fr/views/live.json +++ b/web/public/locales/fr/views/live.json @@ -42,6 +42,117 @@ "center": { "label": "Cliquez dans l'image pour centrer la caméra PTZ" } - } + }, + "presets": "Paramètres prédéfinis pour les caméras PTZ" + }, + "camera": { + "enable": "Activer la Caméra", + "disable": "Désactiver la Caméra" + }, + "detect": { + "enable": "Activer la Détection", + "disable": "Désactiver la Détection" + }, + "recording": { + "enable": "Activer l'enregistrement", + "disable": "Désactiver l'enregistrement" + }, + "snapshots": { + "enable": "Activer les instantanés", + "disable": "Désactiver les instantanés" + }, + "muteCameras": { + "enable": "Couper le son de toutes les caméras", + "disable": "Activer le son de toutes les caméras" + }, + "audioDetect": { + "enable": "Activer la Détection Audio", + "disable": "Désactiver la Détection Audio" + }, + "manualRecording": { + "playInBackground": { + "label": "Jouer en arrière plan", + "desc": "Activer cette option pour continuer à streamer lorsque le player est masqué." + }, + "showStats": { + "label": "Afficher les statistiques", + "desc": "Activer cette option pour afficher les statistiques de flux en surimpression sur le flux de la caméra." + }, + "debugView": "Vue de débug", + "start": "Démarrer l'enregistrement à la demande", + "failedToStart": "impossible de démarrer l'enregistrement à la demande manuel.", + "end": "Terminer l'enregistrement à la demande", + "ended": "Enregistrement à la demande terminé.", + "failedToEnd": "Impossible de terminer l'enregistrement à la demande.", + "started": "Enregistrement à la demande démarré.", + "recordDisabledTips": "Puisque l'enregistrement est désactivé ou restreint dans la configuration de cette caméra, seul un instantané sera enregistré.", + "title": "Enregistrement à la demande", + "tips": "Démarrez un événement manuel en fonction des paramètres de conservation d'enregistrement de cette caméra." + }, + "streamingSettings": "Paramètres de streaming", + "notifications": "Notifications", + "suspend": { + "forTime": "Mettre en pause pour : " + }, + "stream": { + "audio": { + "available": "Audio disponible pour ce flux", + "tips": { + "documentation": "Lire la documentation ", + "title": "L'audio doit être capté par votre caméra et configuré dans go2rtc pour ce flux." + }, + "unavailable": "Audio non disponible pour ce flux" + }, + "twoWayTalk": { + "tips": "Votre périphérique doit supporter la fonctionnalité et WebRTC doit être configuré pour supporter le dialogue bidirectionnel.", + "tips.documentation": "Lire la documention ", + "available": "Discussion bidirectionnelle disponible pour ce flux", + "unavailable": "Discussion bidirectionnelle non disponible pour ce flux" + }, + "lowBandwidth": { + "tips": "La vue temps réel est en mode faible bande passante à cause d'erreurs de cache ou de flux.", + "resetStream": "Réinitialiser le flux" + }, + "playInBackground": { + "tips": "Activer cette option pour continuer le streaming lorsque le player est masqué.", + "label": "Jouer en arrière plan" + }, + "title": "Flux" + }, + "cameraSettings": { + "objectDetection": "Détection d'objets", + "recording": "Enregistrement", + "snapshots": "Instantanés", + "audioDetection": "Détection audio", + "autotracking": "Suivi automatique", + "cameraEnabled": "Caméra activée", + "title": "Paramètres de {{camera}}" + }, + "history": { + "label": "Afficher l'historique de capture" + }, + "effectiveRetainMode": { + "modes": { + "all": "Tous", + "motion": "Mouvement", + "active_objects": "Objets actifs" + }, + "notAllTips": "Votre configuration de conservation d'enregistrement {{source}} est définie sur 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": "" + } } + }, + "similaritySearch": { + "title": "Recherche par similarité", + "active": "Recherche par similarité activée", + "clear": "Réinitialiser la recherche par similarité" + }, + "placeholder": { + "search": "Rechercher..." } } diff --git a/web/public/locales/fr/views/settings.json b/web/public/locales/fr/views/settings.json index d2257c958..403a07443 100644 --- a/web/public/locales/fr/views/settings.json +++ b/web/public/locales/fr/views/settings.json @@ -18,6 +18,564 @@ "debug": "Debug", "cameras": "Paramètres des caméras", "users": "Utilisateurs", - "notifications": "Notifications" + "notifications": "Notifications", + "frigateplus": "Frigate+" + }, + "dialog": { + "unsavedChanges": { + "title": "Vous avez des modifications non enregistrées.", + "desc": "Voulez-vous enregistrer vos modifications avant de continuer ?" + } + }, + "cameraSetting": { + "camera": "Caméra", + "noCamera": "Aucun Caméra" + }, + "general": { + "title": "Paramètres généraux", + "liveDashboard": { + "title": "Tableau de bord en direct", + "automaticLiveView": { + "label": "Vue en direct automatique", + "desc": "Basculez automatiquement vers la vue en direct d'une caméra lorsqu'une activité est détectée. La désactivation de cette option limite la mise à jour des images statiques de la caméra sur le tableau de bord en direct à une fois par minute seulement." + }, + "playAlertVideos": { + "label": "Lire les vidéos d'alerte", + "desc": "Par défaut, les alertes récentes du tableau de bord en direct sont diffusées sous forme de petites vidéos en boucle. Désactivez cette option pour afficher uniquement une image statique des alertes récentes sur cet appareil/navigateur." + } + }, + "storedLayouts": { + "title": "Mises en page stockées", + "desc": "La disposition des caméras d'un groupe peut être déplacée/redimensionnée. Les positions sont enregistrées dans le stockage local de votre navigateur.", + "clearAll": "Effacer toutes les mises en page" + }, + "cameraGroupStreaming": { + "title": "Paramètres de diffusion du groupe de caméras", + "desc": "Les paramètres de diffusion en continu pour chaque groupe de caméras sont stockés dans le stockage local de votre navigateur.", + "clearAll": "Effacer tous les paramètres de streaming" + }, + "recordingsViewer": { + "title": "Visionneuse d'enregistrements", + "defaultPlaybackRate": { + "label": "Taux de lecture par défaut", + "desc": "Vitesse de lecture par défaut pour la lecture des enregistrements." + } + }, + "calendar": { + "firstWeekday": { + "label": "Premier jour de la semaine", + "desc": "Le jour où commencent les semaines du calendrier de révision.", + "sunday": "Dimanche", + "monday": "Lundi" + }, + "title": "Calendrier" + }, + "toast": { + "error": { + "clearStoredLayoutFailed": "Échec à l'effacement de la mise en page enregistrée : {{errorMessage}}", + "clearStreamingSettingsFailed": "Échec à l'effacement des paramètres de diffusion : {{errorMessage}}" + }, + "success": { + "clearStreamingSettings": "Paramètres de diffusion effacés pour tous les groupes de caméras.", + "clearStoredLayout": "Mise en page enregistrée effacée pour {{cameraName}}" + } + } + }, + "notification": { + "suspendTime": { + "untilRestart": "Suspendre jusqu'au redémarrage", + "24hours": "Suspendre pendant 24 heures", + "10minutes": "Suspendre pendant 10 minutes", + "12hours": "Suspendre pendant 12 heures", + "5minutes": "Suspendre pendant 5 minutes", + "1hour": "Suspendre pendant 1 heure", + "30minutes": "Suspendre pendant 30 minutes" + }, + "toast": { + "success": { + "registered": "Inscription réussie aux notifications. Le redémarrage de Frigate est nécessaire avant l'envoi de toute notification (y compris une notification de test).", + "settingSaved": "Les paramètres de notification ont été enregistrés." + }, + "error": { + "registerFailed": "Impossible de sauvegarder l'enregistrement de la notification." + } + }, + "cancelSuspension": "Annuler la suspension", + "notificationSettings": { + "title": "Paramètres de notification", + "documentation": "Lire la Documentation", + "desc": "Frigate peut envoyer nativement des notifications push à votre appareil lorsqu'il est exécuté dans le navigateur ou installé en tant que PWA." + }, + "notificationUnavailable": { + "title": "Notifications indisponibles", + "documentation": "Lire la Documentation", + "desc": "Les notifications push Web nécessitent un contexte sécurisé (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.
    Remarque : cela ne désactive pas les rediffusions go2rtc." + } + }, + "masksAndZones": { + "form": { + "zoneName": { + "error": { + "mustBeAtLeastTwoCharacters": "Le nom de la zone doit comporter au moins 2 caractères.", + "mustNotBeSameWithCamera": "Le nom de la zone ne doit pas être le même que le nom de la caméra.", + "mustNotContainPeriod": "Le nom de la zone ne doit pas contenir de points.", + "hasIllegalCharacter": "Le nom de la zone contient des caractères illégaux.", + "alreadyExists": "Une zone portant ce nom existe déjà pour cette caméra." + } + }, + "distance": { + "error": { + "text": "La distance doit être supérieure ou égale à 0,1.", + "mustBeFilled": "Tous les champs de distance doivent être remplis pour utiliser l'estimation de la vitesse." + } + }, + "polygonDrawing": { + "removeLastPoint": "Supprimer le dernier point", + "delete": { + "title": "Confirmer la suppression", + "desc": "Êtes-vous sûr de vouloir supprimer le {{type}} {{name}} ?", + "success": "{{name}} a été supprimé." + }, + "error": { + "mustBeFinished": "Le dessin du polygone doit être terminé avant d'enregistrer." + }, + "reset": { + "label": "Effacer tous les points" + }, + "snapPoints": { + "true": "Points d'accrochage", + "false": "Ne cassez pas les points" + } + }, + "loiteringTime": { + "error": { + "mustBeGreaterOrEqualZero": "Le temps de latence doit être supérieur ou égal à 0." + } + }, + "inertia": { + "error": { + "mustBeAboveZero": "L'inertie doit être supérieure à 0." + } + } + }, + "zones": { + "documentTitle": "Modifier la Zone - Frigate", + "desc": { + "title": "Les zones vous permettent de définir une zone spécifique de l'image afin de déterminer si un objet se trouve ou non dans une zone particulière.", + "documentation": "Documentation" + }, + "add": "Ajouter une Zone", + "edit": "Modifier une Zone", + "name": { + "title": "Nom", + "inputPlaceHolder": "Entrer un nom...", + "tips": "Le nom doit comporter au moins 2 caractères et ne doit pas être le nom d'une caméra ou d'une autre zone." + }, + "loiteringTime": { + "desc": "Définit une durée minimale en secondes pendant laquelle l'objet doit rester dans la zone pour qu'elle s'active. Par défaut : 0", + "title": "Temps de latence" + }, + "speedEstimation": { + "title": "Estimation de la Vitesse", + "desc": "Activer l'estimation de la vitesse des objets dans cette zone. La zone doit comporter exactement 4 points." + }, + "speedThreshold": { + "title": "Seuil de vitesse ({{unit}})", + "desc": "Spécifie une vitesse minimale pour que les objets soient pris en compte dans cette zone.", + "toast": { + "error": { + "loiteringTimeError": "Les zones avec des temps de latence supérieurs à 0 ne doivent pas être utilisées avec l'estimation de la vitesse.", + "pointLengthError": "L'estimation de vitesse a été désactivée pour cette zone. Les zones avec estimation de vitesse doivent comporter exactement 4 points." + } + } + }, + "point_one": "{{count}} point", + "point_many": "{{count}} points", + "point_other": "{{count}} points", + "label": "Zones", + "inertia": { + "desc": "Spécifie le nombre d'images qu'un objet doit avoir dans une zone avant d'être considéré comme faisant partie de la zone. Par défaut : 3", + "title": "Inertie" + }, + "toast": { + "success": "La zone ({{zoneName}}) a été enregistrée. Redémarrez Frigate pour appliquer les modifications." + }, + "objects": { + "title": "Objets", + "desc": "Liste des objets qui s'appliquent à cette zone." + }, + "clickDrawPolygon": "Cliquer pour dessiner un polygone sur l'image.", + "allObjects": "Tous les Objets" + }, + "motionMasks": { + "label": "Masque de mouvement", + "documentTitle": "Modifier Masque de Mouvement - Frigate", + "context": { + "documentation": "Lire la Documentation", + "title": "Les masques de mouvement servent à empêcher les mouvements indésirables de déclencher la détection (par exemple : branches d'arbres, horodatage des caméras). Ils doivent être utilisés avec parcimonie, car un surmasquage complique le suivi des objets." + }, + "polygonAreaTooLarge": { + "title": "Le masque de mouvement couvre {{polygonArea}} % du cadre de la caméra. Les grands masques de mouvement ne sont pas recommandés.", + "tips": "Les masques de mouvement n'empêchent pas la détection des objets. Il est préférable d'utiliser une zone obligatoire.", + "documentation": "Lire la documentation" + }, + "edit": "Modifier le masque de mouvement", + "point_one": "{{count}} point", + "point_many": "{{count}} points", + "point_other": "{{count}} points", + "clickDrawPolygon": "Cliquer pour dessiner un polygone sur l'image.", + "toast": { + "success": { + "title": "{{polygonName}} a été enregistré. Redémarrez Frigate pour appliquer les modifications.", + "noName": "Le masque de mouvement a été enregistré. Redémarrez Frigate pour appliquer les modifications." + } + }, + "desc": { + "title": "Les masques de mouvement servent à empêcher la détection de mouvements indésirables. Un masquage excessif complique le suivi des objets.", + "documentation": "Documentation" + }, + "add": "Nouveau masque de mouvement" + }, + "objectMasks": { + "label": "Masques de l'objet", + "desc": { + "documentation": "Documentation", + "title": "Les masques de filtrage d'objets sont utilisés pour filtrer les faux positifs pour un type d'objet donné en fonction de l'emplacement." + }, + "edit": "Modifier un masque d'objet", + "clickDrawPolygon": "Cliquez pour dessiner un polygone sur l'image.", + "objects": { + "title": "Objets", + "desc": "Le type d'objet qui s'applique à ce masque d'objet.", + "allObjectTypes": "Tous les types d'objet" + }, + "toast": { + "success": { + "noName": "Le masque d'objet a été enregistré. Redémarrez Frigate pour appliquer les modifications.", + "title": "{{polygonName}} a été enregistré. Redémarrez Frigate pour appliquer les modifications." + } + }, + "point_one": "{{count}} point", + "point_many": "{{count}} points", + "point_other": "{{count}} points", + "add": "Ajouter un masque d'objet", + "documentTitle": "Modifier le masque de l'objet - Frigate", + "context": "Les masques de filtrage d'objets sont utilisés pour filtrer les faux positifs pour un type d'objet donné en fonction de l'emplacement." + }, + "filter": { + "all": "Tous les masques et zones" + }, + "toast": { + "success": { + "copyCoordinates": "Coordonnées copiées pour {{polyName}} dans le presse-papiers." + }, + "error": { + "copyCoordinatesFailed": "Impossible de copier les coordonnées dans le presse-papiers." + } + } + }, + "motionDetectionTuner": { + "title": "Réglage de la détection de mouvement", + "desc": { + "documentation": "Lisez le guide de réglage de mouvement", + "title": "Frigate utilise la détection de mouvement comme première ligne de contrôle pour voir s'il se passe quelque chose dans l'image qui mérite d'être vérifié avec la détection d'objet." + }, + "Threshold": { + "title": "Seuil", + "desc": "La valeur seuil détermine dans quelle mesure un changement dans la luminance d'un pixel est nécessaire pour être considéré comme un mouvement. Valeur par défaut : 30" + }, + "contourArea": { + "title": "Zone de contour", + "desc": "La valeur de la zone de contour est utilisée pour déterminer quels groupes de pixels modifiés sont qualifiés de mouvement. Par défaut : 10" + }, + "improveContrast": { + "title": "Améliorer le contraste", + "desc": "Améliorer le contraste pour les scènes plus sombres. Par défaut : ACTIVÉ" + }, + "toast": { + "success": "Les paramètres de mouvement ont été enregistrés." + } + }, + "debug": { + "debugging": "Débogage", + "objectList": "Liste d'objets", + "boundingBoxes": { + "title": "Cadres de délimitation", + "colors": { + "label": "Couleurs du cadre de délimitation d'un objet", + "info": "
  • Au démarrage, différentes couleurs seront attribuées à chaque étiquette d'objet
  • Une fine ligne bleu foncé indique que l'objet n'est pas détecté à ce moment précis
  • Une fine ligne grise indique que l'objet est détecté comme étant stationnaire
  • Une ligne épaisse indique que l'objet fait l'objet d'un suivi automatique (lorsqu'il est activé)
  • " + }, + "desc": "Afficher les cadres de délimitation autour des objets suivis" + }, + "timestamp": { + "title": "Horodatage", + "desc": "Superposer un horodatage sur l'image" + }, + "zones": { + "title": "Zones", + "desc": "Afficher un aperçu de toutes les zones définies" + }, + "mask": { + "title": "Masques de mouvement", + "desc": "Afficher les polygones du masque de mouvement" + }, + "motion": { + "desc": "Afficher des cadres autour des zones où un mouvement est détecté", + "title": "Cadres de mouvement", + "tips": "

    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 :

    " + }, + "createUser": { + "title": "Créer un nouvel utilisateur", + "desc": "Ajoutez un nouveau compte utilisateur et spécifiez un rôle pour accéder aux zones de l'interface utilisateur Frigate.", + "usernameOnlyInclude": "Le nom d'utilisateur ne peut inclure que des lettres, des chiffres, . ou _" + } + } } } diff --git a/web/public/locales/fr/views/system.json b/web/public/locales/fr/views/system.json index 1fe9d294b..762bd8a50 100644 --- a/web/public/locales/fr/views/system.json +++ b/web/public/locales/fr/views/system.json @@ -26,6 +26,132 @@ "timestamp": "Horodatage", "tag": "Étiqueter", "message": "Message" + }, + "tips": "Les logs sont diffusés en continu depuis le serveur", + "toast": { + "error": { + "fetchingLogsFailed": "Erreur lors de la récupération des logs : {{errorMessage}}", + "whileStreamingLogs": "Erreur lors de la diffusion des logs : {{errorMessage}}" + } + } + }, + "general": { + "title": "Général", + "detector": { + "title": "Détecteurs", + "inferenceSpeed": "Vitesse d'inférence du détecteur", + "cpuUsage": "Utilisation CPU Détecteur", + "memoryUsage": "Utilisation Mémoire Détecteur" + }, + "hardwareInfo": { + "title": "Info Matériel", + "gpuUsage": "Utilisation GPU", + "gpuMemory": "Mémoire GPU", + "gpuEncoder": "Encodeur GPU", + "gpuDecoder": "Décodeur GPU", + "gpuInfo": { + "vainfoOutput": { + "title": "Sortie Vainfo", + "returnCode": "Code de retour : {{code}}", + "processOutput": "Tâche de Sortie :", + "processError": "Erreur de tâche :" + }, + "nvidiaSMIOutput": { + "title": "Sortie Nvidia SMI", + "name": "Nom : {{name}}", + "cudaComputerCapability": "Capacité de calcul CUDA : {{cuda_compute}}", + "vbios": "Informations VBios : {{vbios}}", + "driver": "Pilote : {{driver}}" + }, + "copyInfo": { + "label": "Information de copie du GPU" + }, + "toast": { + "success": "Informations GPU copiées dans le presse-papier" + }, + "closeInfo": { + "label": "Information de fermeture du GPU" + } + } + }, + "otherProcesses": { + "title": "Autres tâches", + "processCpuUsage": "Utilisation CPU des tâches", + "processMemoryUsage": "Utilisation mémoire des tâches" + } + }, + "storage": { + "title": "Stockage", + "recordings": { + "title": "Enregistrements", + "earliestRecording": "Enregistrement le plus ancien :", + "tips": "Cette valeur corresponds au total du stockage utilisé par les enregistrements dans la base de données Frigate. Frigate ne suit pas l'utilisation du stockage pour tous les fichiers sur votre disque." + }, + "cameraStorage": { + "title": "Stockage de la caméra", + "bandwidth": "Bande passante", + "unused": { + "title": "Inutilisé", + "tips": "Cette valeur ne représente peut-être pas précisément l'espace libre et utilisable par Frigate si vous avez d'autres fichiers stockés sur ce disque en plus des enregistrements Frigate. Frigate ne suit pas l'utilisation du stockage en dehors de ses propres enregistrements." + }, + "percentageOfTotalUsed": "Pourcentage du Total", + "storageUsed": "Stockage", + "camera": "Caméra", + "unusedStorageInformation": "Information sur le stockage non utilisé" + }, + "overview": "Prévisualisation" + }, + "cameras": { + "title": "Caméras", + "info": { + "cameraProbeInfo": "{{camera}} Information récupérée depuis la Caméra", + "fetching": "En cours de récupération des données de la Caméra", + "stream": "Flux {{idx}}", + "fps": "Images par seconde :", + "unknown": "Inconnu", + "audio": "Audio :", + "tips": { + "title": "Information récupérée depuis la Caméra" + }, + "streamDataFromFFPROBE": "Le flux de données est obtenu par 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:
  • Usa la scheda Addestra per selezionare e addestrare le immagini per ogni persona rilevata.
  • Concentrati sulle immagini dritte per ottenere risultati migliori; evita di addestrare immagini che catturano i volti da un'angolazione.
  • ", + "desc": "Crea una nuova raccolta", + "new": "Crea nuovo Volto" + }, + "readTheDocs": "Leggi la documentazione", + "selectFace": "Seleziona Volto", + "documentTitle": "Libreria dei Volti - Frigate", + "uploadFaceImage": { + "desc": "Carica un'immagine per scansionare i volti e includerla in {{pageToggle}}", + "title": "Carica l'immagine del Volto" + }, + "deleteFaceLibrary": { + "title": "Elimina Nome", + "desc": "Vuoi davvero eliminare la raccolta {{name}}? Questa operazione eliminerà definitivamente tutti i volti associati." + }, + "trainFaceAs": "Addestra il Volto come:" } diff --git a/web/public/locales/nb-NO/common.json b/web/public/locales/nb-NO/common.json index b518d51d0..6917a3ef9 100644 --- a/web/public/locales/nb-NO/common.json +++ b/web/public/locales/nb-NO/common.json @@ -1,10 +1,13 @@ { "time": { "yr": "{{time}} år", - "year": "{{time}} år", - "minute": "{{time}} minutter", + "year_one": "{{time}} år", + "year_other": "{{time}} år", + "minute_one": "{{time}} minutt", + "minute_other": "{{time}} minutter", "s": "{{time}}s", - "second": "{{time}} sekunder", + "second_one": "{{time}} sekund", + "second_other": "{{time}} sekunder", "formattedTimestampExcludeSeconds": { "24hour": "%-d. %b, %H:%M", "12hour": "%-d. %b, %I:%M %p" @@ -31,12 +34,15 @@ "24hours": "24 timer", "pm": "pm", "am": "am", - "mo": "{{time}} md", - "month": "{{time}} måneder", + "mo": "{{time}} mnd", + "month_one": "{{time}} måned", + "month_other": "{{time}} måneder", "d": "{{time}}d", - "day": "{{time}} dager", + "day_one": "{{time}} dag", + "day_other": "{{time}} dager", "h": "{{time}}t", - "hour": "{{time}} timer", + "hour_one": "{{time}} time", + "hour_other": "{{time}} timer", "m": "{{time}}m", "formattedTimestamp": { "12hour": "%-d. %b, %I:%M:%S %p", @@ -105,7 +111,7 @@ "count_other": "{{count}} kameraer" } }, - "review": "Granske", + "review": "Inspiser", "explore": "Utforsk", "export": "Eksporter", "uiPlayground": "UI Sandkasse", @@ -126,11 +132,37 @@ "configurationEditor": "Konfigurasjonsredigering", "languages": "Språk", "language": { - "en": "Engelsk", + "en": "English (Engelsk)", "zhCN": "简体中文 (Forenklet kinesisk)", "withSystem": { "label": "Bruk systemets språkinnstillinger" - } + }, + "fr": "Fransk (Français)", + "es": "Español (Spansk)", + "hi": "हिन्दी (Hindi)", + "ar": "العربية (Arabisk)", + "pt": "Português (Portugisisk)", + "ru": "Русский (Russisk)", + "de": "Deutsch (Tysk)", + "ja": "日本語 (Japansk)", + "tr": "Türkçe (Tyrkisk)", + "it": "Italiano (Italiensk)", + "nl": "Nederlands (Nederlandsk)", + "sv": "Svenska (Svensk)", + "cs": "Čeština (Tsjekkisk)", + "nb": "Norsk Bokmål", + "ko": "한국어 (Koreansk)", + "vi": "Tiếng Việt (Vietnamesisk)", + "fa": "فارسی (Persisk)", + "he": "עברית (Hebraisk)", + "el": "Ελληνικά (Gresk)", + "ro": "Română (Rumensk)", + "hu": "Magyar (Ungarsk)", + "fi": "Suomi (Finsk)", + "da": "Dansk (Dansk)", + "sk": "Slovenčina (Slovensk)", + "pl": "Polski (Polsk)", + "uk": "Українська (Ukrainiansk)" }, "appearance": "Utseende", "darkMode": { @@ -185,9 +217,9 @@ }, "role": { "title": "Rolle", - "admin": "Admin", + "admin": "Administrator", "viewer": "Visningsbruker", - "desc": "Administratorer har full tilgang til alle funksjoner i Frigate UI. Visningsbrukere er begrenset til å se kameraer, gjennomgå hendelser og historisk opptak i UI." + "desc": "Administratorer har full tilgang til alle funksjoner i Frigate brukergrensesnitt. Visningsbrukere er begrenset til å se kameraer, inspisere elementer og historisk opptak i brukergrensesnittet." }, "accessDenied": { "documentTitle": "Ingen tilgang – Frigate", diff --git a/web/public/locales/nb-NO/components/camera.json b/web/public/locales/nb-NO/components/camera.json index 5a3e94916..75cc26e49 100644 --- a/web/public/locales/nb-NO/components/camera.json +++ b/web/public/locales/nb-NO/components/camera.json @@ -73,7 +73,7 @@ "showOptions": "Vis alternativer", "hideOptions": "Skjul alternativer" }, - "boundingBox": "Avgrensningsboks", + "boundingBox": "Omsluttende boks", "timestamp": "Tidsstempel", "zones": "Soner", "mask": "Maske", diff --git a/web/public/locales/nb-NO/components/dialog.json b/web/public/locales/nb-NO/components/dialog.json index 720fa5d28..ad8865774 100644 --- a/web/public/locales/nb-NO/components/dialog.json +++ b/web/public/locales/nb-NO/components/dialog.json @@ -101,12 +101,12 @@ "confirmDelete": { "title": "Bekreft sletting", "desc": { - "selected": "Er du sikker på at du vil slette alle opptak knyttet til dette vurderingselementet?

    Hold inne Shift-tasten for å hoppe over denne dialogen i fremtiden." + "selected": "Er du sikker på at du vil slette alle opptak knyttet til dette inspeksjonselementet?

    Hold inne Shift-tasten for å hoppe over denne dialogen i fremtiden." } }, "button": { "export": "Eksportér", - "markAsReviewed": "Merk som vurdert", + "markAsReviewed": "Merk som inspisert", "deleteNow": "Slett nå" } } diff --git a/web/public/locales/nb-NO/components/filter.json b/web/public/locales/nb-NO/components/filter.json index f25353393..aceb5aaf9 100644 --- a/web/public/locales/nb-NO/components/filter.json +++ b/web/public/locales/nb-NO/components/filter.json @@ -6,7 +6,9 @@ "title": "Alle merkelapper", "short": "Merkelapper" }, - "count": "{{count}} merkelapper" + "count": "{{count}} merkelapper", + "count_other": "{{count}} Merkelapper", + "count_one": "{{count}} Merkelapp" }, "features": { "hasVideoClip": "Har et videoklipp", @@ -67,7 +69,7 @@ }, "trackedObjectDelete": { "title": "Bekreft sletting", - "desc": "Sletting av disse {{objectLength}} sporede objektene fjerner øyeblikksbildet, eventuelle lagrede innebygginger og tilhørende objekt livssyklusoppføringer. Opptak av disse sporede objektene i Historikkvisning vil IKKE bli slettet.

    Er du sikker på at du vil fortsette?

    Hold Shift-tasten for å unngå denne dialogboksen i fremtiden.", + "desc": "Sletting av disse {{objectLength}} sporede objektene fjerner øyeblikksbildet, eventuelle lagrede vektorrepresentasjoner og tilhørende objekt livssyklusoppføringer. Opptak av disse sporede objektene i Historikkvisning vil IKKE bli slettet.

    Er du sikker på at du vil fortsette?

    Hold Shift-tasten for å unngå denne dialogboksen i fremtiden.", "toast": { "success": "Sporede objekter ble slettet.", "error": "Kunne ikke slette sporede objekter: {{errorMessage}}" @@ -77,12 +79,12 @@ "filterBy": "Filtrer etter sonemaske" }, "recognizedLicensePlates": { - "noLicensePlatesFound": "Ingen bilskilt funnet.", - "selectPlatesFromList": "Velg ett eller flere bilskilt fra listen.", - "title": "Gjenkjente bilskilt", - "loadFailed": "Kunne ikke laste inn gjenkjente bilskilt.", - "loading": "Laster inn gjenkjente bilskilt...", - "placeholder": "Skriv for å søke etter bilskilt..." + "noLicensePlatesFound": "Ingen kjennemerker funnet.", + "selectPlatesFromList": "Velg ett eller flere kjennemerker fra listen.", + "title": "Gjenkjente kjennemerker", + "loadFailed": "Kunne ikke laste inn gjenkjente kjennemerker.", + "loading": "Laster inn gjenkjente kjennemerker...", + "placeholder": "Skriv for å søke etter kjennemerker..." }, "dates": { "all": { @@ -109,7 +111,7 @@ "label": "Kamerafilter" }, "review": { - "showReviewed": "Vis vurdert" + "showReviewed": "Vis inspiserte" }, "motion": { "showMotionOnly": "Vis kun bevegelse" diff --git a/web/public/locales/nb-NO/views/explore.json b/web/public/locales/nb-NO/views/explore.json index 0967ef424..3d0f88102 100644 --- a/web/public/locales/nb-NO/views/explore.json +++ b/web/public/locales/nb-NO/views/explore.json @@ -1 +1,192 @@ -{} +{ + "documentTitle": "Utforsk - Frigate", + "generativeAI": "Generativ AI", + "exploreIsUnavailable": { + "title": "Utforsk er utilgjengelig", + "embeddingsReindexing": { + "startingUp": "Starter opp...", + "estimatedTime": "Estimert gjenværende tid:", + "context": "Utforsk kan brukes etter at reindekseringen av vektorrepresentasjoner for sporede objekter er fullført.", + "finishingShortly": "Avsluttes snart", + "step": { + "thumbnailsEmbedded": "Miniatyrbilder innebygd: ", + "descriptionsEmbedded": "Beskrivelser innebygd: ", + "trackedObjectsProcessed": "Sporede objekter behandlet: " + } + }, + "downloadingModels": { + "setup": { + "visionModel": "Visjonsmodell", + "visionModelFeatureExtractor": "Funksjonsekstraktor for visjonsmodell", + "textModel": "Tekstmodell", + "textTokenizer": "Tekst symbolbygger" + }, + "context": "Frigate laster ned de nødvendige vektorrepresentasjonsmodellene for å støtte funksjonen for semantisk søk. Dette kan ta flere minutter, avhengig av hastigheten på nettverksforbindelsen din.", + "tips": { + "context": "Du bør vurdere å reindeksere vektorrepresentasjoner for de sporede objektene dine når modellene er lastet ned.", + "documentation": "Les dokumentasjonen" + }, + "error": "En feil har oppstått. Sjekk Frigate-loggene." + } + }, + "objectLifecycle": { + "createObjectMask": "Lag objektmaske", + "adjustAnnotationSettings": "Juster annotasjonsinnstillinger", + "scrollViewTips": "Rull for å se de viktigste øyeblikkene i dette objektets livssyklus.", + "autoTrackingTips": "Posisjoner for omsluttende boks vil være unøyaktige for kameraer med automatisk sporing.", + "lifecycleItemDesc": { + "visible": "{{label}} oppdaget", + "attribute": { + "other": "{{label}} gjenkjent som {{attribute}}", + "faceOrLicense_plate": "{{attribute}} oppdaget for {{label}}" + }, + "gone": "{{label}} forlot", + "heard": "{{label}} hørt", + "external": "{{label}} oppdaget", + "entered_zone": "{{label}} gikk inn i {{zones}}", + "active": "{{label}} ble aktiv", + "stationary": "{{label}} ble stasjonær" + }, + "annotationSettings": { + "title": "Annotasjonsinnstillinger", + "showAllZones": { + "title": "Vis alle soner", + "desc": "Vis alltid soner på bilder der objekter har gått inn i en sone." + }, + "offset": { + "documentation": "Les dokumentasjonen ", + "label": "Annotasjonsforskyvning", + "desc": "Disse dataene kommer fra kameraets deteksjonsstrøm, men legges over bilder fra opptaksstrømmen. Det er usannsynlig at de to strømmene er perfekt synkronisert. Som et resultat vil ikke den omsluttende boksen og opptakene stemme perfekt overens. Imidlertid kan feltet annotation_offset brukes til å justere dette.", + "millisecondsToOffset": "Millisekunder 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.

    Er du sikker på at du vil fortsette?" + } + }, + "noTrackedObjects": "Fant ingen sporede objekter", + "fetchingTrackedObjectsFailed": "Feil ved henting av sporede objekter: {{errorMessage}}", + "trackedObjectsCount_one": "{{count}} sporet objekt ", + "trackedObjectsCount_other": "{{count}} sporede objekter " +} diff --git a/web/public/locales/nb-NO/views/exports.json b/web/public/locales/nb-NO/views/exports.json index 0967ef424..2c1fe59a7 100644 --- a/web/public/locales/nb-NO/views/exports.json +++ b/web/public/locales/nb-NO/views/exports.json @@ -1 +1,17 @@ -{} +{ + "documentTitle": "Eksport - Frigate", + "search": "Søk", + "noExports": "Ingen eksporter funnet", + "deleteExport": "Slett eksport", + "deleteExport.desc": "Er du sikker på at du vil slette {{exportName}}?", + "editExport": { + "title": "Gi nytt navn til eksport", + "desc": "Skriv inn et nytt navn for denne eksporten.", + "saveExport": "Lagre eksport" + }, + "toast": { + "error": { + "renameExportFailed": "Kunne ikke gi nytt navn til eksport: {{errorMessage}}" + } + } +} diff --git a/web/public/locales/nb-NO/views/faceLibrary.json b/web/public/locales/nb-NO/views/faceLibrary.json index cbb66abee..d330df5e6 100644 --- a/web/public/locales/nb-NO/views/faceLibrary.json +++ b/web/public/locales/nb-NO/views/faceLibrary.json @@ -1,3 +1,71 @@ { - "selectItem": "Velg {{item}}" + "selectItem": "Velg {{item}}", + "description": { + "addFace": "Gå gjennom prosessen med å legge til en ny samling i ansiktsbiblioteket.", + "placeholder": "Skriv inn et navn for denne samlingen" + }, + "details": { + "person": "Person", + "confidence": "Konfidens", + "face": "Ansiktsdetaljer", + "faceDesc": "Detaljer for ansiktet og tilknyttet objekt", + "timestamp": "Tidsstempel" + }, + "documentTitle": "Ansiktsbibliotek – Frigate", + "createFaceLibrary": { + "new": "Opprett nytt ansikt", + "title": "Opprett samling", + "desc": "Opprett en ny samling", + "nextSteps": "For å bygge et sterkt grunnlag:
  • Bruk Tren-fanen for å velge og trene på bilder for hver oppdaget person.
  • Fokuser på bilder rett forfra for best resultat; unngå å trene bilder som fanger ansikter i vinkel.
  • " + }, + "train": { + "aria": "Velg tren", + "title": "Tren" + }, + "selectFace": "Velg ansikt", + "deleteFaceLibrary": { + "title": "Slett navn", + "desc": "Er du sikker på at du vil slette samlingen {{name}}? Dette vil permanent slette alle tilknyttede ansikter." + }, + "trainFace": "Tren ansikt", + "toast": { + "error": { + "deleteFaceFailed": "Kunne ikke slette: {{errorMessage}}", + "uploadingImageFailed": "Kunne ikke laste opp bilde: {{errorMessage}}", + "trainFailed": "Kunne ikke trene: {{errorMessage}}", + "updateFaceScoreFailed": "Kunne ikke oppdatere ansiktsskåring: {{errorMessage}}", + "addFaceLibraryFailed": "Kunne ikke angi ansiktsnavn: {{errorMessage}}", + "deleteNameFailed": "Kunne ikke slette navn: {{errorMessage}}" + }, + "success": { + "deletedFace_one": "Slettet {{count}} ansikt.", + "deletedFace_other": "Slettet {{count}} ansikter.", + "deletedName_one": "{{count}} ansikt ble slettet.", + "deletedName_other": "{{count}} ansikter ble slettet.", + "trainedFace": "Ansiktet ble trent.", + "updatedFaceScore": "Ansiktsskåring ble oppdatert.", + "uploadedImage": "Bildet ble lastet opp.", + "addFaceLibrary": "{{name}} ble lagt til i ansiktsbiblioteket!" + } + }, + "imageEntry": { + "dropActive": "Slipp bildet her...", + "dropInstructions": "Dra og slipp et bilde her, eller klikk for å velge", + "maxSize": "Maks størrelse: {{size}}MB", + "validation": { + "selectImage": "Vennligst velg en bildefil." + } + }, + "readTheDocs": "Les dokumentasjonen", + "button": { + "addFace": "Legg til ansikt", + "uploadImage": "Last opp bilde", + "deleteFaceAttempts": "Slett ansiktsforsøk", + "reprocessFace": "Prosesser ansiktet på nytt" + }, + "uploadFaceImage": { + "desc": "Last opp et bilde for å skanne etter ansikter og inkludere det for {{pageToggle}}", + "title": "Last opp ansiktsbilde" + }, + "trainFaceAs": "Tren ansikt som:" } diff --git a/web/public/locales/nb-NO/views/live.json b/web/public/locales/nb-NO/views/live.json index 0967ef424..d1d102878 100644 --- a/web/public/locales/nb-NO/views/live.json +++ b/web/public/locales/nb-NO/views/live.json @@ -1 +1,158 @@ -{} +{ + "documentTitle": "Direkte - Frigate", + "lowBandwidthMode": "Lav båndbreddemodus", + "documentTitle.withCamera": "{{camera}} - Direkte - Frigate", + "ptz": { + "move": { + "clickMove": { + "label": "Klikk i rammen for å sentrere kameraet", + "enable": "Aktiver klikk for å flytte", + "disable": "Deaktiver klikk for å flytte" + }, + "left": { + "label": "Flytt PTZ-kameraet til venstre" + }, + "up": { + "label": "Flytt PTZ-kameraet opp" + }, + "down": { + "label": "Flytt PTZ-kameraet ned" + }, + "right": { + "label": "Flytt PTZ-kameraet til høyre" + } + }, + "presets": "PTZ-kamera forhåndsinnstillinger", + "zoom": { + "in": { + "label": "Zoom inn på PTZ-kameraet" + }, + "out": { + "label": "Zoom ut på PTZ-kameraet" + } + }, + "frame": { + "center": { + "label": "Klikk i rammen for å sentrere PTZ-kameraet" + } + } + }, + "camera": { + "enable": "Aktiver kamera", + "disable": "Deaktiver kamera" + }, + "snapshots": { + "enable": "Aktiver øyeblikksbilder", + "disable": "Deaktiver øyeblikksbilder" + }, + "audioDetect": { + "enable": "Aktiver lydregistrering", + "disable": "Deaktiver lydregistrering" + }, + "autotracking": { + "enable": "Aktiver automatisk sporing", + "disable": "Deaktiver automatisk sporing" + }, + "manualRecording": { + "tips": "Start en manuell hendelse basert på kameraets innstillinger for opptaksbevaring.", + "playInBackground": { + "label": "Spill av i bakgrunnen", + "desc": "Aktiver dette alternativet for å fortsette strømming når spilleren er skjult." + }, + "showStats": { + "label": "Vis statistikk", + "desc": "Aktiver dette alternativet for å vise strømmestatistikk som et overlegg på kamerastrømmen." + }, + "started": "Startet manuelt opptak på forespørsel.", + "end": "Avslutt opptak på forespørsel", + "title": "Opptak på forespørsel", + "debugView": "Feilsøkingsvisning", + "start": "Start opptak på forespørsel", + "failedToStart": "Kunne ikke starte manuelt opptak på forespørsel.", + "recordDisabledTips": "Siden opptak er deaktivert eller begrenset i konfigurasjonen for dette kameraet, vil kun et øyeblikksbilde bli lagret.", + "ended": "Avsluttet manuelt opptak på forespørsel.", + "failedToEnd": "Kunne ikke avslutte manuelt opptak på forespørsel." + }, + "audio": "Lyd", + "suspend": { + "forTime": "Pause i: " + }, + "stream": { + "audio": { + "tips": { + "title": "Lyd må være aktivert på kameraet ditt og konfigurert i go2rtc for denne strømmen.", + "documentation": "Les dokumentasjonen " + }, + "available": "Lyd er tilgjengelig for denne strømmen", + "unavailable": "Lyd er ikke tilgjengelig for denne strømmen" + }, + "twoWayTalk": { + "tips": "Enheten din må støtte funksjonen og WebRTC må være konfigurert for toveis tale.", + "tips.documentation": "Les dokumentasjonen ", + "available": "Toveis tale er tilgjengelig for denne strømmen", + "unavailable": "Toveis tale er ikke tilgjengelig for denne strømmen" + }, + "lowBandwidth": { + "tips": "Direktevisning er i lav båndbreddemodus på grunn av buffering eller strømmefeil.", + "resetStream": "Tilbakestill strøm" + }, + "title": "Strøm", + "playInBackground": { + "label": "Spill av i bakgrunnen", + "tips": "Aktiver dette alternativet for å fortsette strømming når spilleren er skjult." + } + }, + "history": { + "label": "Vis historiske opptak" + }, + "effectiveRetainMode": { + "modes": { + "all": "Alle", + "motion": "Bevegelse", + "active_objects": "Aktive objekter" + }, + "notAllTips": "Konfigurasjonen for opptaksbevaring for {{source}} er satt til 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": "" + } + }, + "header": { + "currentFilterType": "Filterverdier", + "noFilters": "Filtre", + "activeFilters": "Aktive filtre" + } + }, + "placeholder": { + "search": "Søk..." + }, + "trackedObjectId": "Sporings-ID for objekt", + "similaritySearch": { + "title": "Søk etter likhet", + "active": "Søk etter likhet er aktivt", + "clear": "Fjern søk etter likhet" + } +} diff --git a/web/public/locales/nb-NO/views/settings.json b/web/public/locales/nb-NO/views/settings.json index 0967ef424..642cdae70 100644 --- a/web/public/locales/nb-NO/views/settings.json +++ b/web/public/locales/nb-NO/views/settings.json @@ -1 +1,582 @@ -{} +{ + "documentTitle": { + "default": "Innstillinger - Frigate", + "authentication": "Autentiseringsinnstillinger - Frigate", + "camera": "Kamerainnstillinger - Frigate", + "masksAndZones": "Maske- og soneeditor - Frigate", + "motionTuner": "Bevegelsestilpasning - Frigate", + "object": "Objektinnstillinger - Frigate", + "general": "Generelle innstillinger - Frigate", + "classification": "Klassifiseringsinnstillinger - Frigate", + "frigatePlus": "Frigate+ innstillinger - Frigate" + }, + "menu": { + "classification": "Klassifisering", + "cameras": "Kamerainnstillinger", + "masksAndZones": "Masker / Soner", + "motionTuner": "Bevegelsestilpasning", + "debug": "Feilsøking", + "users": "Brukere", + "frigateplus": "Frigate+", + "ui": "Brukergrensesnitt", + "notifications": "Meldingsvarsler" + }, + "dialog": { + "unsavedChanges": { + "title": "Du har ulagrede endringer.", + "desc": "Vil du lagre endringene dine før du fortsetter?" + } + }, + "cameraSetting": { + "camera": "Kamera", + "noCamera": "Ingen kamera" + }, + "general": { + "liveDashboard": { + "playAlertVideos": { + "label": "Spill av varselvideoer", + "desc": "Som standard vises nylige varsler på Direkte-dashbord som små videoer som gjentas. Deaktiver dette alternativet for kun å vise et statisk bilde av nylige varsler på denne enheten/nettleseren." + }, + "title": "Direkte-dashbord", + "automaticLiveView": { + "label": "Automatisk direktevisning", + "desc": "Bytt automatisk til et kameras direktevisning når aktivitet oppdages. Deaktivering av dette valget gjør at statiske kamerabilder i Direkte-dashbord kun oppdateres én gang i minuttet." + } + }, + "storedLayouts": { + "title": "Lagrede oppsett", + "desc": "Kameraplasseringer i en gruppe kan dras og endres. Posisjonene lagres lokalt i nettleseren.", + "clearAll": "Fjern alle oppsett" + }, + "recordingsViewer": { + "title": "Opptaksvisning", + "defaultPlaybackRate": { + "label": "Standard avspillingshastighet", + "desc": "Standard hastighet for avspilling av opptak." + } + }, + "calendar": { + "firstWeekday": { + "sunday": "Søndag", + "label": "Første ukedag", + "desc": "Dagen ukene starter på i inspeksjonskalenderen.", + "monday": "Mandag" + }, + "title": "Kalender" + }, + "toast": { + "success": { + "clearStreamingSettings": "Strømmingsinnstillinger for alle kameragrupper ble fjernet.", + "clearStoredLayout": "Lagret oppsett for {{cameraName}} ble fjernet" + }, + "error": { + "clearStoredLayoutFailed": "Kunne ikke fjerne lagret oppsett: {{errorMessage}}", + "clearStreamingSettingsFailed": "Kunne ikke fjerne strømmingsinnstillinger: {{errorMessage}}" + } + }, + "title": "Generelle innstillinger", + "cameraGroupStreaming": { + "title": "Strømmingsinnstillinger for kameragrupper", + "desc": "Strømmingsinnstillingene lagres lokalt i nettleseren.", + "clearAll": "Fjern alle strømmingsinnstillinger" + } + }, + "classification": { + "semanticSearch": { + "title": "Semantisk søk", + "desc": "Semantisk søk i Frigate lar deg finne sporede objekter i inspeksjonselementene ved hjelp av enten bildet, en egendefinert tekstbeskrivelse eller en automatisk generert beskrivelse.", + "reindexNow": { + "confirmTitle": "Bekreft reindeksering", + "error": "Kunne ikke starte reindeksering: {{errorMessage}}", + "label": "Reindekser nå", + "confirmButton": "Reindekser", + "success": "Reindeksering startet.", + "alreadyInProgress": "Reindeksering pågår allerede.", + "desc": "Reindeksering vil regenerere vektorrepresentasjoner for alle sporede objekter. Prosessen kjøres i bakgrunnen og kan belaste CPU-en maksimalt og ta tid avhengig av antall sporede objekter.", + "confirmDesc": "Er du sikker på at du vil reindeksere vektorrepresentasjoner for alle sporede objekter? Dette vil kjøres i bakgrunnen, men kan bruke all CPU og ta tid. Du kan følge fremdriften på Utforsk-siden." + }, + "readTheDocumentation": "Les dokumentasjonen", + "modelSize": { + "label": "Modellstørrelse", + "small": { + "title": "liten", + "desc": "Ved å bruke liten brukes en kvantisert modell som bruker mindre RAM og er raskere, med ubetydelig tap av kvalitet for vektorrepresentasjoner." + }, + "large": { + "title": "stor", + "desc": "Ved å bruke stor brukes hele Jina-modellen og den vil automatisk bruke GPU hvis tilgjengelig." + }, + "desc": "Størrelsen på modellen som brukes for vektorrepresentasjoner for semantiske søk." + } + }, + "faceRecognition": { + "title": "Ansiktsgjenkjenning", + "modelSize": { + "small": { + "title": "liten", + "desc": "Liten bruker en FaceNet-modell for vektorrepresentasjoner som fungerer effektivt på de fleste CPU-er." + }, + "large": { + "title": "stor", + "desc": "Stor bruker en ArcFace-modell for vektorrepresentasjoner og vil automatisk kjøre på GPU hvis tilgjengelig." + }, + "label": "Modellstørrelse", + "desc": "Størrelsen på modellen brukt for ansiktsgjenkjenning." + }, + "readTheDocumentation": "Les dokumentasjonen", + "desc": "Ansiktsgjenkjenning lar deg tilordne navn til personer. Når et ansikt gjenkjennes, legges navnet til som under-merkelapp. Denne informasjonen vises i brukergrensesnittet, i filtre, samt i meldingsvarsler." + }, + "licensePlateRecognition": { + "title": "Gjenkjenning av kjennemerker", + "readTheDocumentation": "Les dokumentasjonen", + "desc": "Frigate kan gjenkjenne kjennemerker og automatisk legge inn tall/bokstaver i 'recognized_license_plate'-feltet, eller et kjent navn som under-merkelapp til objekter av typen bil. Vanlig bruk er å lese kjennemerker ved innkjørsel eller på vei." + }, + "title": "Klassifiseringsinnstillinger", + "toast": { + "success": "Klassifiseringsinnstillinger lagret. Start Frigate på nytt for å bruke endringene.", + "error": "Kunne ikke lagre konfigurasjonsendringer: {{errorMessage}}" + }, + "birdClassification": { + "title": "Artsbestemmelse for fugler", + "desc": "Artsbestemmelse identifiserer kjente fugler ved hjelp av en kvantisert TensorFlow-modell. Når en kjent fugl gjenkjennes, legges det vanlige navnet til som en under-merkelapp. Denne informasjonen vises i brukergrensesnittet, i filtre, samt i meldingsvarsler." + } + }, + "camera": { + "streams": { + "desc": "Deaktivering av et kamera stopper Frigates behandling av dette kameraets strømmer fullstendig. Deteksjon, opptak og feilsøking vil være utilgjengelig.
    Merk: Dette deaktiverer ikke go2rtc-restrømming.", + "title": "Strømmer" + }, + "reviewClassification": { + "title": "Inspeksjonssklassifisering", + "zoneObjectAlertsTips": "Alle {{alertsLabels}}-objekter oppdaget i {{zone}} på {{cameraName}} vises som varsler.", + "zoneObjectDetectionsTips": { + "text": "Alle {{detectionsLabels}}-objekter som ikke er kategorisert i {{zone}} på {{cameraName}}, vises som deteksjoner.", + "regardlessOfZoneObjectDetectionsTips": "Alle {{detectionsLabels}}-objekter som ikke er kategorisert på {{cameraName}}, vises som deteksjoner uavhengig av sone.", + "notSelectDetections": "Alle {{detectionsLabels}}-objekter oppdaget i {{zone}} på {{cameraName}} som ikke er kategorisert som Varsler, vises som deteksjoner uavhengig av sone." + }, + "selectAlertsZones": "Velg soner for varsler", + "desc": "Frigate kategoriserer inspeksjonselementer som Varsler og Deteksjoner. Som standard regnes alle person- og bil-objekter som Varsler. Du kan finjustere klassifiseringen ved å konfigurere nødvendige soner.", + "readTheDocumentation": "Les dokumentasjonen", + "noDefinedZones": "Ingen soner er definert for dette kameraet.", + "objectAlertsTips": "Alle {{alertsLabels}}-objekter på {{cameraName}} vises som varsler.", + "objectDetectionsTips": "Alle {{detectionsLabels}}-objekter som ikke er kategorisert på {{cameraName}}, vises som deteksjoner uavhengig av sone.", + "selectDetectionsZones": "Velg soner for deteksjoner", + "limitDetections": "Avgrens deteksjoner til bestemte soner", + "toast": { + "success": "Konfigurasjon for inspeksjonsklassifisering er lagret. Start Frigate på nytt for å bruke endringer." + } + }, + "title": "Kamerainnstillinger", + "review": { + "title": "Inspeksjon", + "desc": "Aktiver/deaktiver varsler og deteksjoner for dette kameraet. Når deaktivert, vil det ikke genereres nye inspeksjonselementer.", + "alerts": "Varsler ", + "detections": "Deteksjoner " + } + }, + "masksAndZones": { + "filter": { + "all": "Alle masker og soner" + }, + "toast": { + "success": { + "copyCoordinates": "Koordinater for {{polyName}} kopiert til utklippstavlen." + }, + "error": { + "copyCoordinatesFailed": "Kunne ikke kopiere koordinater til utklippstavlen." + } + }, + "form": { + "zoneName": { + "error": { + "mustNotBeSameWithCamera": "Sonenavnet kan ikke være det samme som kameranavnet.", + "alreadyExists": "En sone med dette navnet finnes allerede for dette kameraet.", + "mustBeAtLeastTwoCharacters": "Sonenavnet må være minst 2 tegn langt.", + "mustNotContainPeriod": "Sonenavnet kan ikke inneholde punktum.", + "hasIllegalCharacter": "Sonenavnet inneholder ugyldige tegn." + } + }, + "distance": { + "error": { + "mustBeFilled": "Alle avstandsfeltene må fylles ut for å bruke hastighetsestimering.", + "text": "Avstanden må være større enn eller lik 0,1." + } + }, + "polygonDrawing": { + "delete": { + "title": "Bekreft sletting", + "desc": "Er du sikker på at du vil slette {{type}} {{name}}?", + "success": "{{name}} har blitt slettet." + }, + "removeLastPoint": "Fjern siste punkt", + "reset": { + "label": "Fjern alle punkter" + }, + "snapPoints": { + "true": "Fest punkter", + "false": "Ikke fest punkter" + }, + "error": { + "mustBeFinished": "Tegningen av polygonet må fullføres før lagring." + } + }, + "inertia": { + "error": { + "mustBeAboveZero": "Treghet må være over 0." + } + }, + "loiteringTime": { + "error": { + "mustBeGreaterOrEqualZero": "Oppholdstid må være større enn eller lik 0." + } + } + }, + "zones": { + "label": "Soner", + "documentTitle": "Rediger sone - Frigate", + "edit": "Rediger sone", + "point_one": "{{count}} punkt", + "point_other": "{{count}} punkter", + "clickDrawPolygon": "Klikk for å tegne et polygon på bildet.", + "inertia": { + "title": "Treghet", + "desc": "Angir hvor mange bilder et objekt må være i en sone før det regnes som en del av sonen. Standard: 3" + }, + "desc": { + "title": "Soner lar deg definere et spesifikt område i bildet, slik at du kan bestemme om et objekt er innenfor et bestemt område.", + "documentation": "Dokumentasjon" + }, + "add": "Legg til sone", + "name": { + "title": "Navn", + "inputPlaceHolder": "Skriv inn et navn...", + "tips": "Navnet må være minst 2 tegn langt og må ikke være det samme som et kamera- eller sone-navn." + }, + "loiteringTime": { + "title": "Oppholdstid", + "desc": "Setter minimumstid i sekunder som objektet må være i sonen for at den skal aktiveres. Standard: 0" + }, + "objects": { + "title": "Objekter", + "desc": "Liste over objekter som gjelder for denne sonen." + }, + "allObjects": "Alle objekter", + "speedEstimation": { + "title": "Hastighetsestimering", + "desc": "Aktiver hastighetsestimering for objekter i denne sonen. Sonen må ha nøyaktig 4 punkter." + }, + "speedThreshold": { + "title": "Hastighetsgrense ({{unit}})", + "desc": "Angir en minimumshastighet for objekter for at de skal anses som en del av denne sonen.", + "toast": { + "error": { + "pointLengthError": "Hastighetsestimering er deaktivert for denne sonen. Soner med hastighetsestimering må ha nøyaktig 4 punkter.", + "loiteringTimeError": "Soner med oppholdstider større enn 0 bør ikke brukes til hastighetsestimering." + } + } + }, + "toast": { + "success": "Sone ({{zoneName}}) er lagret. Start Frigate på nytt for å bruke endringer." + } + }, + "motionMasks": { + "label": "Bevegelsesmaske", + "desc": { + "documentation": "Dokumentasjon", + "title": "Bevegelsesmasker brukes til å hindre uønsket type bevegelse fra å utløse deteksjon. For mye maskering kan gjøre det vanskeligere å spore objekter." + }, + "add": "Ny bevegelsesmaske", + "documentTitle": "Rediger bevegelsesmaske - Frigate", + "edit": "Rediger bevegelsesmaske", + "context": { + "title": "Bevegelsesmasker brukes til å hindre uønsket type bevegelse fra å utløse deteksjon (eksempel: tregrener, kameratidsstempler). Bevegelsesmasker bør brukes svært sparsomt, for mye maskering vil gjøre det vanskeligere å spore objekter.", + "documentation": "Les dokumentasjonen" + }, + "point_one": "{{count}} punkt", + "point_other": "{{count}} punkter", + "clickDrawPolygon": "Klikk for å tegne et polygon på bildet.", + "polygonAreaTooLarge": { + "title": "Bevegelsesmasken dekker {{polygonArea}}% av kameraets bilde. Store bevegelsesmasker anbefales ikke.", + "tips": "Bevegelsesmasker hindrer ikke objektene fra å bli detektert. Du bør bruke en påkrevd sone i stedet.", + "documentation": "Les dokumentasjonen" + }, + "toast": { + "success": { + "title": "{{polygonName}} er lagret. Start Frigate på nytt for å bruke endringene.", + "noName": "Bevegelsesmasken er lagret. Start Frigate på nytt for å bruke endringene." + } + } + }, + "objectMasks": { + "clickDrawPolygon": "Klikk for å tegne et polygon på bildet.", + "point_one": "{{count}} punkt", + "point_other": "{{count}} punkter", + "label": "Objektmasker", + "documentTitle": "Rediger objektmaske - Frigate", + "desc": { + "title": "Objektfiltermasker brukes for å filtrere ut falske positiver for en gitt objekttype basert på plassering.", + "documentation": "Dokumentasjon" + }, + "add": "Legg til objektmaske", + "edit": "Rediger objektmaske", + "context": "Objektfiltermasker brukes for å filtrere ut falske positiver for en gitt objekttype basert på plassering.", + "objects": { + "title": "Objekter", + "desc": "Objekttypen som gjelder for denne objektmasken.", + "allObjectTypes": "Alle objekttyper" + }, + "toast": { + "success": { + "title": "{{polygonName}} er lagret. Start Frigate på nytt for å bruke endringene.", + "noName": "Objektmasken er lagret. Start Frigate på nytt for å bruke endringene." + } + } + } + }, + "motionDetectionTuner": { + "title": "Tilpasning for bevegelsesdeteksjon", + "Threshold": { + "title": "Terskel", + "desc": "Terskelverdien bestemmer hvor mye endring i en piksels lysstyrke som kreves for å bli betraktet som bevegelse. Standard: 30" + }, + "contourArea": { + "title": "Konturområde", + "desc": "Konturområdets verdi brukes til å bestemme hvilke grupper av endrede piksler som kvalifiserer som bevegelse. Standard: 10" + }, + "improveContrast": { + "desc": "Forbedre kontrasten for mørkere scener. Standard: PÅ", + "title": "Forbedre kontrast" + }, + "desc": { + "title": "Frigate bruker bevegelsesdeteksjon som en første sjekk for å se om det skjer noe i bildet som er verdt å sjekke med objektdeteksjon.", + "documentation": "Les guiden for bevegelsestilpasning" + }, + "toast": { + "success": "Bevegelsesinnstillingene er lagret." + } + }, + "debug": { + "title": "Feilsøking", + "objectList": "Objektliste", + "noObjects": "Ingen objekter", + "boundingBoxes": { + "title": "Omsluttende bokser", + "desc": "Vis omsluttende bokser rundt sporede objekter", + "colors": { + "label": "Farge på omsluttende bokser for objekt", + "info": "
  • Ved oppstart vil forskjellige farger bli tildelt hver objekttype
  • En mørkeblå tynn linje indikerer at objektet ikke er detektert på dette tidspunktet
  • En grå tynn linje indikerer at objektet er detektert som stasjonært
  • En tykk linje indikerer at objektet er under autosporing (når aktivert)
  • " + } + }, + "timestamp": { + "title": "Tidsstempel", + "desc": "Legg et tidsstempel over bildet" + }, + "zones": { + "title": "Soner", + "desc": "Vis en kontur av alle definerte soner" + }, + "motion": { + "desc": "Vis bokser rundt områder der bevegelse er detektert", + "tips": "

    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:

    " + }, + "createUser": { + "title": "Opprett ny bruker", + "desc": "Legg til en ny brukerkonto og spesifiser en rolle for tilgang til Frigate-brukergrensesnittet.", + "usernameOnlyInclude": "Brukernavn kan bare inneholde bokstaver, tall, punktum eller _" + }, + "deleteUser": { + "title": "Slett bruker", + "desc": "Denne handlingen kan ikke angres. Dette vil permanent slette brukerkontoen og fjerne alle tilknyttede data.", + "warn": "Er du sikker på at du vil slette {{username}}?" + }, + "passwordSetting": { + "updatePassword": "Oppdater passord for {{username}}", + "setPassword": "Angi passord", + "desc": "Opprett et sterkt passord for å sikre denne kontoen." + } + }, + "table": { + "username": "Brukernavn", + "actions": "Handlinger", + "role": "Rolle", + "changeRole": "Endre brukerrolle", + "password": "Passord", + "deleteUser": "Slett bruker", + "noUsers": "Ingen brukere funnet." + } + }, + "notification": { + "notificationSettings": { + "desc": "Frigate kan sende push-varsler til enheten din når den kjører i nettleseren eller er installert som en PWA.", + "documentation": "Les dokumentasjonen", + "title": "Innstillinger for meldingsvarsler" + }, + "notificationUnavailable": { + "documentation": "Les dokumentasjonen", + "title": "Meldingsvarsler utilgjengelig", + "desc": "Nettleser push-varsler krever et sikkert miljø (https://...). Dette er en nettleserbegrensning. Få tilgang til Frigate på en sikker måte for å bruke meldingsvarsler." + }, + "email": { + "title": "E-post", + "placeholder": "f.eks. eksempel@email.com", + "desc": "En gyldig e-postadresse kreves og vil bli brukt til å varsle deg om det skulle oppstå problemer med push-tjenesten." + }, + "cameras": { + "title": "Kameraer", + "noCameras": "Ingen kameraer tilgjengelig", + "desc": "Velg hvilke kameraer meldingsvarsler skal aktiveres for." + }, + "deviceSpecific": "Enhetsspesifikke innstillinger", + "registerDevice": "Registrer denne enheten", + "unregisterDevice": "Fjern registrering av enheten", + "suspendTime": { + "5minutes": "Suspender i 5 minutter", + "10minutes": "Suspender i 10 minutter", + "30minutes": "Suspender i 30 minutter", + "1hour": "Suspender i 1 time", + "12hours": "Suspender i 12 timer", + "24hours": "Suspender i 24 timer", + "untilRestart": "Suspender til omstart" + }, + "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.
    Opmerking: dit schakelt de go2rtc-restreams niet uit.", + "title": "Streams" + }, + "title": "Camera-instellingen" + }, + "masksAndZones": { + "filter": { + "all": "Alle maskers en zones" + }, + "toast": { + "success": { + "copyCoordinates": "Coördinaten voor {{polyName}} gekopieerd naar klembord." + }, + "error": { + "copyCoordinatesFailed": "De coördinaten konden niet naar het klembord worden gekopieerd." + } + }, + "form": { + "zoneName": { + "error": { + "mustBeAtLeastTwoCharacters": "De zonenaam moet minimaal 2 tekens lang zijn.", + "mustNotContainPeriod": "De zonenaam mag geen punten bevatten.", + "hasIllegalCharacter": "De zonenaam bevat ongeldige tekens.", + "mustNotBeSameWithCamera": "De zonenaam mag niet gelijk zijn aan de cameranaam.", + "alreadyExists": "Er bestaat al een zone met deze naam voor deze camera." + } + }, + "distance": { + "error": { + "text": "Afstand moet groter dan of gelijk zijn aan 0,1.", + "mustBeFilled": "Alle afstandsvelden moeten worden ingevuld om de snelheid te kunnen schatten." + } + }, + "inertia": { + "error": { + "mustBeAboveZero": "De minimale snelheid moet meer zijn dan 0." + } + }, + "loiteringTime": { + "error": { + "mustBeGreaterOrEqualZero": "De verblijftijd moet groter dan of gelijk aan 0 zijn." + } + }, + "polygonDrawing": { + "removeLastPoint": "Laatste punt verwijderen", + "snapPoints": { + "true": "Verbind punten", + "false": "Punten niet verbinden" + }, + "delete": { + "title": "Bevestig Verwijderen", + "desc": "Weet je zeker dat je de {{type}} {{name}} wilt verwijderen?", + "success": "{{name}} is verwijderd." + }, + "error": { + "mustBeFinished": "De polygoontekening moet voltooid zijn voordat u deze kunt opslaan." + }, + "reset": { + "label": "Alle punten wissen" + } + } + }, + "zones": { + "documentTitle": "Bewerkingszone - Frigate", + "desc": { + "title": "Zones stellen je in staat om een specifiek gedeelte van het beeld te definiëren, zodat je kunt bepalen of een object zich binnen dat gebied bevindt of niet.", + "documentation": "Documentatie" + }, + "edit": "Bewerk zone", + "clickDrawPolygon": "Klik om een polygoon op de afbeelding te tekenen.", + "name": { + "title": "Naam", + "inputPlaceHolder": "Voer een naam in...", + "tips": "De naam moet minimaal 2 tekens lang zijn en mag niet gelijk zijn aan de naam van een camera of een andere zone." + }, + "inertia": { + "title": "Traagheid", + "desc": "Geeft aan hoeveel frames een object in een zone moet zijn voordat het als 'in de zone' wordt beschouwd. Standaard: 3" + }, + "loiteringTime": { + "title": "Stationaire tijd", + "desc": "Stelt de minimale tijd in (in seconden) die een object in de zone moet blijven voordat deze wordt geactiveerd. Standaard: 0" + }, + "objects": { + "title": "Objecten", + "desc": "Lijst met objecten die van toepassing zijn op deze zone." + }, + "speedEstimation": { + "desc": "Snelheidsschatting inschakelen voor objecten in deze zone. De zone moet precies 4 punten hebben.", + "title": "Snelheidsschatting" + }, + "speedThreshold": { + "desc": "Geeft een minimumsnelheid op voor objecten die in deze zone moeten worden beschouwd.", + "toast": { + "error": { + "pointLengthError": "De snelheidsschatting is uitgeschakeld voor deze zone. Zones met snelheidsschatting moeten precies 4 punten hebben.", + "loiteringTimeError": "Zones met een stationaire tijd groter dan 0 mogen niet worden gebruikt in combinatie met snelheidsschatting." + } + }, + "title": "Snelheidsdrempel ({{unit}})" + }, + "point_one": "{{count}} punt", + "point_other": "{{count}} punten", + "label": "Zones", + "add": "Zone toevoegen", + "allObjects": "Alle objecten", + "toast": { + "success": "Zone ({{zoneName}}) is opgeslagen. Start Frigate opnieuw om de wijzigingen toe te passen." + } + }, + "motionMasks": { + "label": "Bewegingsmasker", + "documentTitle": "Bewerken Bewegingsmasker - Frigate", + "desc": { + "documentation": "Documentatie", + "title": "Bewegingsmaskers worden gebruikt om te voorkomen dat ongewenste vormen van beweging een detectie activeren. Te veel maskeren maakt het moeilijker om objecten te volgen." + }, + "edit": "Bewerk bewegingsmasker", + "context": { + "documentation": "Lees de documentatie", + "title": "Bewegingsmaskers worden gebruikt om te voorkomen dat ongewenste soorten beweging een detectie activeren (bijvoorbeeld: bewegende boomtakken of tijdstempels in het camerabeeld). Bewegingsmaskers moeten zeer spaarzaam worden gebruikt – te veel maskeren maakt het moeilijker om objecten te volgen." + }, + "clickDrawPolygon": "Klik om een polygoon op de afbeelding te tekenen.", + "polygonAreaTooLarge": { + "documentation": "Lees de documentatie", + "title": "Het bewegingsmasker bedekt {{polygonArea}}% van het camerabeeld. Grote bewegingsmaskers worden niet aanbevolen.", + "tips": "Bewegingsmaskers voorkomen niet dat objecten worden gedetecteerd. Gebruik in plaats daarvan een objectmasker." + }, + "point_one": "{{count}} punt", + "point_other": "{{count}} punten", + "toast": { + "success": { + "title": "{{polygonName}} is opgeslagen. Herstart Frigate om de wijzigingen toe te passen.", + "noName": "Bewegingsmasker is opgeslagen. Herstart Frigate om de wijzigingen toe te passen." + } + }, + "add": "Nieuw bewegingsmasker" + }, + "objectMasks": { + "label": "Objectmaskers", + "documentTitle": "Objectmasker bewerken - Frigate", + "desc": { + "title": "Objectfiltermaskers worden gebruikt om valse positieven uit te filteren voor een bepaald objecttype op basis van locatie.", + "documentation": "Documentatie" + }, + "add": "Objectmasker toevoegen", + "objects": { + "desc": "Het objecttype dat van toepassing is op dit objectmasker.", + "allObjectTypes": "Alle objecttypen", + "title": "Objecten" + }, + "toast": { + "success": { + "title": "{{polygonName}} is opgeslagen. Herstart Frigate om de wijzigingen toe te passen.", + "noName": "Objectmasker is opgeslagen. Herstart Frigate om de wijzigingen toe te passen." + } + }, + "point_one": "{{count}} punt", + "point_other": "{{count}} punten", + "clickDrawPolygon": "Klik om een polygoon op de afbeelding te tekenen.", + "context": "Objectfiltermaskers worden gebruikt om valse positieven uit te filteren voor een bepaald objecttype op basis van locatie.", + "edit": "Objectmasker bewerken" + } + }, + "motionDetectionTuner": { + "title": "Bewegingsdetectie-afsteller", + "desc": { + "title": "Frigate gebruikt bewegingsdetectie als eerste controle om te zien of er iets gebeurt in het frame dat de moeite waard is om te controleren met objectdetectie.", + "documentation": "Lees de handleiding voor bewegingsafstelling" + }, + "Threshold": { + "title": "Drempelwaarde", + "desc": "De drempelwaarde bepaalt hoeveel verandering in de luminantie van een pixel nodig is om als beweging te worden beschouwd. Standaard: 30" + }, + "contourArea": { + "title": "Contourgebied", + "desc": "De waarde voor het contourgebied wordt gebruikt om te bepalen welke groepen gewijzigde pixels in aanmerking komen als beweging. Vastgesteld: 10" + }, + "improveContrast": { + "title": "Contrast verbeteren", + "desc": "Verbeter het contrast bij weinig licht. Standaard: AAN" + }, + "toast": { + "success": "De bewegingsinstellingen zijn opgeslagen." + } + }, + "debug": { + "title": "Foutopsporing", + "desc": "De debugweergave toont een realtime overzicht van gevolgde objecten en hun statistieken. De objectlijst toont een samenvatting van gedetecteerde objecten met een tijdsvertraging.", + "debugging": "Foutopsporing", + "objectList": "Objectenlijst", + "noObjects": "Geen objecten", + "boundingBoxes": { + "title": "Objectkaders", + "desc": "Toon objectkaders rond gevolgde objecten", + "colors": { + "label": "Kleuren van objectkaders", + "info": "
  • Bij het opstarten wordt er een andere kleur toegewezen aan elk objectlabel.
  • Een dunne donkerblauwe lijn geeft aan dat het object op dit moment niet wordt gedetecteerd.
  • Een dunne grijze lijn geeft aan dat het object als stilstaand wordt herkend.
  • Een dikke lijn geeft aan dat het object het doelwit is van automatische tracking (indien ingeschakeld).
  • " + } + }, + "timestamp": { + "title": "Tijdstempel", + "desc": "Toon een tijdstempel als overlay op het beeld" + }, + "zones": { + "desc": "Toon een overzicht van alle gedefinieerde zones", + "title": "Zones" + }, + "mask": { + "title": "Bewegingsmaskers", + "desc": "Toon bewegingsmasker-polygonen" + }, + "motion": { + "title": "Bewegingskaders", + "desc": "Toon kaders rondom gebieden waar beweging wordt gedetecteerd", + "tips": "

    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:

    " + }, + "passwordSetting": { + "setPassword": "Wachtwoord instellen", + "updatePassword": "Wachtwoord bijwerken voor {{username}}", + "desc": "Maak een sterk wachtwoord aan om dit account te beveiligen." + } + } + }, + "notification": { + "notificationSettings": { + "title": "Notificatie-instellingen", + "desc": "Frigate kan rechtstreeks pushmeldingen naar uw apparaat verzenden als het in de browser actief is of als een PWA geïnstalleerd is.", + "documentation": "Lees de documentatie" + }, + "notificationUnavailable": { + "title": "Meldingen niet beschikbaar", + "documentation": "Lees de documentatie", + "desc": "Webpushmeldingen vereisen een veilige omgeving (https://...). Dit is een beperking van de browser. Open Frigate via een beveiligde verbinding om meldingen te kunnen ontvangen." + }, + "globalSettings": { + "title": "Globale instellingen", + "desc": "Meldingen voor specifieke camera's op alle geregistreerde apparaten tijdelijk uitschakelen." + }, + "email": { + "title": "E-mail", + "placeholder": "bijv. voorbeeld@email.com", + "desc": "Een geldig e-mailadres is verplicht en wordt gebruikt om je te waarschuwen als er problemen zijn met de pushmeldingsdienst." + }, + "cameras": { + "noCameras": "Geen camera's beschikbaar", + "desc": "Selecteer voor welke camera's je meldingen wilt inschakelen.", + "title": "Camera's" + }, + "deviceSpecific": "Apparaatspecifieke instellingen", + "active": "Meldingen actief", + "suspendTime": { + "5minutes": "Onderbreek voor 5 minuten", + "30minutes": "Onderbreek voor 30 minuten", + "1hour": "Onderbreek voor 1 uur", + "12hours": "Onderbreek voor 12 uur", + "24hours": "Onderbreek voor 24 uur", + "untilRestart": "Opschorten tot herstart", + "10minutes": "Onderbreek voor 10 minuten" + }, + "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?

    Przytrzymaj klawisz Shift, aby pominąć to okno dialogowe w przyszłości." + } + } + }, + "streaming": { + "label": "Strumień", + "restreaming": { + "disabled": "Restreaming nie jest włączony dla tej kamery.", + "desc": { + "title": "Skonfiguruj go2rtc dla dodatkowych opcji podglądu na żywo i dźwięku dla tej kamery.", + "readTheDocumentation": "Przeczytaj dokumentację· " + } + }, + "showStats": { + "label": "Pokaż statystyki strumienia", + "desc": "Włącz tę opcję, aby wyświetlać statystyki strumienia jako nakładkę na obrazie z kamery." + }, + "debugView": "Widok Debugowania" + }, + "search": { + "saveSearch": { + "label": "Zapisz Wyszukiwanie", + "desc": "Podaj nazwę dla tego zapisanego wyszukiwania.", + "placeholder": "Wprowadź nazwę dla swojego wyszukiwania", + "overwrite": "{{searchName}} już istnieje. Zapisanie nadpisze istniejącą wartość.", + "success": "Wyszukiwanie ({{searchName}}) zostało zapisane.", + "button": { + "save": { + "label": "Zapisz to wyszukiwanie" + } + } + } + } +} diff --git a/web/public/locales/pl/components/filter.json b/web/public/locales/pl/components/filter.json index 0967ef424..519c8c6d9 100644 --- a/web/public/locales/pl/components/filter.json +++ b/web/public/locales/pl/components/filter.json @@ -1 +1,125 @@ -{} +{ + "filter": "Filtr", + "labels": { + "label": "Etykiety", + "all": { + "title": "Wszystkie Etykiety", + "short": "Etykiety" + }, + "count_one": "{{count}} Etykieta", + "count_other": "{{count}} Etykiet" + }, + "zones": { + "label": "Strefy", + "all": { + "title": "Wszystkie Strefy", + "short": "Strefy" + } + }, + "subLabels": { + "all": "Wszystkie Podetykiety", + "label": "Podetykiety" + }, + "score": "Wynik", + "estimatedSpeed": "Szacowana Prędkość ({{unit}})", + "features": { + "label": "Funkcje", + "hasSnapshot": "Posiada zrzut ekranu", + "hasVideoClip": "Posiada klip wideo", + "submittedToFrigatePlus": { + "label": "Przesłano do Frigate+", + "tips": "Musisz najpierw filtrować obiekty śledzone, które mają zrzut ekranu.

    Obiekty śledzone bez zrzutu ekranu nie mogą być przesłane do Frigate+." + } + }, + "sort": { + "dateDesc": "Data (Malejąco)", + "scoreAsc": "Wynik Obiektu (Rosnąco)", + "scoreDesc": "Wynik Obiektu (Malejąco)", + "speedAsc": "Szacowana Prędkość (Rosnąco)", + "speedDesc": "Szacowana Prędkość (Malejąco)", + "label": "Sortuj", + "dateAsc": "Data (Rosnąco)", + "relevance": "Trafność" + }, + "explore": { + "settings": { + "gridColumns": { + "desc": "Wybierz liczbę kolumn w widoku siatki.", + "title": "Kolumny Siatki" + }, + "searchSource": { + "label": "Źródło Wyszukiwania", + "desc": "Wybierz, czy przeszukiwać miniatury czy opisy śledzonych obiektów.", + "options": { + "description": "Opis", + "thumbnailImage": "Obraz Miniatury" + } + }, + "defaultView": { + "title": "Domyślny Widok", + "summary": "Podsumowanie", + "unfilteredGrid": "Niefiltrowana Siatka", + "desc": "Gdy nie wybrano filtrów, wyświetl podsumowanie najnowszych śledzonych obiektów dla każdej etykiety lub wyświetl niefiltrowaną siatkę." + }, + "title": "Ustawienia" + }, + "date": { + "selectDateBy": { + "label": "Wybierz datę do filtrowania" + } + } + }, + "logSettings": { + "label": "Filtruj poziom logów", + "filterBySeverity": "Filtruj logi według ważności", + "loading": { + "title": "Ładowanie", + "desc": "Gdy panel logów jest przewinięty do dołu, nowe logi są automatycznie strumieniowane w miarę ich dodawania." + }, + "disableLogStreaming": "Wyłącz strumieniowanie logów", + "allLogs": "Wszystkie logi" + }, + "recognizedLicensePlates": { + "loading": "Ładowanie rozpoznanych tablic rejestracyjnych...", + "placeholder": "Wpisz, aby wyszukać tablice rejestracyjne...", + "noLicensePlatesFound": "Nie znaleziono tablic rejestracyjnych.", + "title": "Rozpoznane Tablice Rejestracyjne", + "loadFailed": "Nie udało się załadować rozpoznanych tablic rejestracyjnych.", + "selectPlatesFromList": "Wybierz jedną lub więcej tablic z listy." + }, + "dates": { + "all": { + "title": "Wszystkie Daty", + "short": "Daty" + } + }, + "more": "Więcej Filtrów", + "reset": { + "label": "Resetuj filtry do wartości domyślnych" + }, + "timeRange": "Zakres Czasu", + "cameras": { + "label": "Filtr Kamer", + "all": { + "title": "Wszystkie Kamery", + "short": "Kamery" + } + }, + "review": { + "showReviewed": "Pokaż Przejrzane" + }, + "motion": { + "showMotionOnly": "Pokaż Tylko Ruch" + }, + "trackedObjectDelete": { + "toast": { + "success": "Śledzone obiekty zostały pomyślnie usunięte.", + "error": "Nie udało się usunąć śledzonych obiektów: {{errorMessage}}" + }, + "title": "Potwierdź Usunięcie", + "desc": "Usunięcie tych {{objectLength}} śledzonych obiektów usuwa zrzut ekranu, wszelkie zapisane osadzenia i wszystkie powiązane wpisy cyklu życia obiektu. Nagrane materiały tych śledzonych obiektów w widoku Historii NIE zostaną usunięte.

    Czy na pewno chcesz kontynuować?

    Przytrzymaj klawisz Shift, aby pominąć to okno dialogowe w przyszłości." + }, + "zoneMask": { + "filterBy": "Filtruj według maski strefy" + } +} diff --git a/web/public/locales/pl/components/icons.json b/web/public/locales/pl/components/icons.json index 0967ef424..b06575a27 100644 --- a/web/public/locales/pl/components/icons.json +++ b/web/public/locales/pl/components/icons.json @@ -1 +1,8 @@ -{} +{ + "iconPicker": { + "selectIcon": "Wybierz ikonę", + "search": { + "placeholder": "Wyszukaj ikonę..." + } + } +} diff --git a/web/public/locales/pl/components/input.json b/web/public/locales/pl/components/input.json index 0967ef424..1216c7a00 100644 --- a/web/public/locales/pl/components/input.json +++ b/web/public/locales/pl/components/input.json @@ -1 +1,10 @@ -{} +{ + "button": { + "downloadVideo": { + "label": "Pobierz Wideo", + "toast": { + "success": "Rozpoczęto pobieranie nagrania do przeglądu." + } + } + } +} diff --git a/web/public/locales/pl/components/player.json b/web/public/locales/pl/components/player.json index 0967ef424..227813f9c 100644 --- a/web/public/locales/pl/components/player.json +++ b/web/public/locales/pl/components/player.json @@ -1 +1,51 @@ -{} +{ + "noRecordingsFoundForThisTime": "Nie znaleziono żadnych nagrań w tym czasie", + "cameraDisabled": "Kamera jest wyłączona", + "stats": { + "latency": { + "title": "Opóźnienie:", + "value": "{{seconds}} sekund", + "short": { + "title": "Opóźnienie", + "value": "{{seconds}} s" + } + }, + "totalFrames": "Całkowita liczba klatek:", + "streamType": { + "title": "Typ transmisji:", + "short": "Typ" + }, + "bandwidth": { + "title": "Przepustowość:", + "short": "Przepustowość" + }, + "droppedFrames": { + "title": "Porzucone klatki:", + "short": { + "title": "Porzucone", + "value": "{{droppedFrames}} klatek" + } + }, + "decodedFrames": "Zdekodowane klatki:", + "droppedFrameRate": "Współczynnik porzuconych klatek:" + }, + "noPreviewFound": "Nie znaleziono podglądu", + "noPreviewFoundFor": "Nie znaleziono podglądu dla {{cameraName}}", + "submitFrigatePlus": { + "title": "Wyślij tę klatkę do Frigate+?", + "submit": "Wyślij" + }, + "livePlayerRequiredIOSVersion": "Wymagana wersja iOS 17.1 lub nowsza dla tego typu transmisji na żywo.", + "streamOffline": { + "title": "Transmisja offline", + "desc": "Nie otrzymano klatek na strumieniu {{cameraName}} 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.

    Czy na pewno chcesz kontynuować?", + "title": "Potwierdź usunięcie" + } + }, + "fetchingTrackedObjectsFailed": "Błąd pobierania śledzonych obiektów: {{errorMessage}}", + "searchResult": { + "deleteTrackedObject": { + "toast": { + "success": "Śledzony obiekt usunięty pomyślnie.", + "error": "Nie udało się usunąć śledzonego obiektu: {{errorMessage}}" + } + } + } +} diff --git a/web/public/locales/pl/views/exports.json b/web/public/locales/pl/views/exports.json index 0967ef424..11bb6ab04 100644 --- a/web/public/locales/pl/views/exports.json +++ b/web/public/locales/pl/views/exports.json @@ -1 +1,17 @@ -{} +{ + "search": "Szukaj", + "documentTitle": "Eksport - Frigate", + "noExports": "Nie znaleziono eksportów", + "deleteExport": "Usuń eksport", + "deleteExport.desc": "Czy na pewno chcesz usunąć {{exportName}}?", + "editExport": { + "title": "Zmień nazwę eksportu", + "desc": "Wprowadź nową nazwę dla tego eksportu.", + "saveExport": "Zapisz eksport" + }, + "toast": { + "error": { + "renameExportFailed": "Nie udało się zmienić nazwy eksportu: {{errorMessage}}" + } + } +} diff --git a/web/public/locales/pl/views/faceLibrary.json b/web/public/locales/pl/views/faceLibrary.json index ad94a7ec3..5c248b02c 100644 --- a/web/public/locales/pl/views/faceLibrary.json +++ b/web/public/locales/pl/views/faceLibrary.json @@ -1,3 +1,73 @@ { - "selectItem": "Wybierz {{item}}" + "selectItem": "Wybierz {{item}}", + "description": { + "addFace": "Poznaj proces dodawania nowej kolekcji do biblioteki twarzy.", + "placeholder": "Wprowadź nazwę tej kolekcji" + }, + "details": { + "person": "Osoba", + "confidence": "Pewność", + "face": "Szczegóły twarzy", + "faceDesc": "Szczegóły twarzy i powiązanego obiektu", + "timestamp": "Znacznik czasu" + }, + "documentTitle": "Biblioteka twarzy - Frigate", + "uploadFaceImage": { + "title": "Wgraj zdjęcie twarzy", + "desc": "Wgraj obraz do skanowania twarzy i dołącz do {{pageToggle}}" + }, + "createFaceLibrary": { + "title": "Utwórz kolekcję", + "desc": "Utwórz nową kolekcję", + "new": "Utwórz nową twarz", + "nextSteps": "Aby zbudować solidną podstawę:
  • Użyj zakładki Trenuj, aby wybrać i trenować na obrazach dla każdej wykrytej osoby.
  • Skup się na zdjęciach twarzy na wprost dla najlepszych wyników; unikaj trenowania na zdjęciach, które pokazują twarze pod kątem.
  • " + }, + "train": { + "aria": "Wybierz trenowanie", + "title": "Trenuj" + }, + "selectFace": "Wybierz twarz", + "deleteFaceLibrary": { + "title": "Usuń nazwę", + "desc": "Czy na pewno chcesz usunąć kolekcję {{name}}? Spowoduje to trwałe usunięcie wszystkich powiązanych twarzy." + }, + "button": { + "addFace": "Dodaj twarz", + "uploadImage": "Wgraj obraz", + "reprocessFace": "Przetwórz twarz ponownie", + "deleteFaceAttempts": "Usuń próby rozpoznania twarzy" + }, + "imageEntry": { + "validation": { + "selectImage": "Proszę wybrać plik obrazu." + }, + "dropActive": "Upuść obraz tutaj...", + "dropInstructions": "Przeciągnij i upuść obraz tutaj lub kliknij, aby wybrać", + "maxSize": "Maksymalny rozmiar: {{size}}MB" + }, + "toast": { + "success": { + "deletedName_one": "{{count}} twarz została pomyślnie usunięta.", + "deletedName_few": "{{count}} twarze zostały pomyślnie usunięte.", + "deletedName_many": "{{count}} twarzy zostało pomyślnie usuniętych.", + "deletedFace_one": "Pomyślnie usunięto {{count}} twarz.", + "deletedFace_few": "Pomyślnie usunięto {{count}} twarze.", + "deletedFace_many": "Pomyślnie usunięto {{count}} twarzy.", + "uploadedImage": "Pomyślnie wgrano obraz.", + "addFaceLibrary": "{{name}} został pomyślnie dodany do Biblioteki Twarzy!", + "trainedFace": "Pomyślnie wytrenowano twarz.", + "updatedFaceScore": "Pomyślnie zaktualizowano wynik twarzy." + }, + "error": { + "addFaceLibraryFailed": "Nie udało się ustawić nazwy twarzy: {{errorMessage}}", + "deleteFaceFailed": "Nie udało się usunąć: {{errorMessage}}", + "deleteNameFailed": "Nie udało się usunąć nazwy: {{errorMessage}}", + "trainFailed": "Nie udało się przeprowadzić treningu: {{errorMessage}}", + "updateFaceScoreFailed": "Nie udało się zaktualizować wyniku twarzy: {{errorMessage}}", + "uploadingImageFailed": "Nie udało się wgrać obrazu: {{errorMessage}}" + } + }, + "readTheDocs": "Przeczytaj dokumentację", + "trainFaceAs": "Trenuj twarz jako:", + "trainFace": "Trenuj twarz" } diff --git a/web/public/locales/pl/views/live.json b/web/public/locales/pl/views/live.json index 0967ef424..87b0af4ab 100644 --- a/web/public/locales/pl/views/live.json +++ b/web/public/locales/pl/views/live.json @@ -1 +1,158 @@ -{} +{ + "documentTitle": "Na żywo - Frigate", + "documentTitle.withCamera": "{{camera}}- Na żywo - Frigate", + "lowBandwidthMode": "Tryb niskiej przepustowości", + "twoWayTalk": { + "enable": "Włącz komunikację dwukierunkową", + "disable": "Wyłącz komunikację dwukierunkową" + }, + "cameraAudio": { + "enable": "Włącz dźwięk kamery", + "disable": "Wyłącz dźwięk kamery" + }, + "ptz": { + "move": { + "clickMove": { + "label": "Kliknij w ramce, aby wyśrodkować kamerę", + "enable": "Włącz kliknięcie do przesuwania", + "disable": "Wyłącz kliknięcie do przesuwania" + }, + "left": { + "label": "Przesuń kamerę PTZ w lewo" + }, + "right": { + "label": "Przesuń kamerę PTZ w prawo" + }, + "down": { + "label": "Przesuń kamerę PTZ w dół" + }, + "up": { + "label": "Przesuń kamerę PTZ w górę" + } + }, + "zoom": { + "in": { + "label": "Przybliż kamerę PTZ" + }, + "out": { + "label": "Oddal kamerę PTZ" + } + }, + "frame": { + "center": { + "label": "Kliknij w ramce, aby wyśrodkować kamerę PTZ" + } + }, + "presets": "Presety kamery PTZ" + }, + "recording": { + "enable": "Włącz nagrywanie", + "disable": "Wyłącz nagrywanie" + }, + "snapshots": { + "enable": "Włącz zrzuty ekranu", + "disable": "Wyłącz zrzuty ekranu" + }, + "streamStats": { + "disable": "Ukryj statystyki strumienia", + "enable": "Pokaż statystyki strumienia" + }, + "manualRecording": { + "title": "Nagrywanie na żądanie", + "tips": "Rozpocznij ręczne zdarzenie w oparciu o ustawienia przechowywania nagrań tej kamery.", + "playInBackground": { + "label": "Odtwarzaj w tle", + "desc": "Włącz tę opcję, aby kontynuować transmisję, gdy odtwarzacz jest ukryty." + }, + "showStats": { + "label": "Pokaż statystyki", + "desc": "Włącz tę opcję, aby pokazać statystyki strumienia jako nakładkę na podgląd kamery." + }, + "debugView": "Widok debugowania", + "start": "Rozpocznij nagrywanie na żądanie", + "started": "Rozpoczęto ręczne nagrywanie na żądanie.", + "failedToStart": "Nie udało się rozpocząć ręcznego nagrywania na żądanie.", + "recordDisabledTips": "Ponieważ nagrywanie jest wyłączone lub ograniczone w konfiguracji tej kamery, zostanie zapisany tylko zrzut ekranu.", + "end": "Zakończ nagrywanie na żądanie", + "ended": "Zakończono ręczne nagrywanie na żądanie.", + "failedToEnd": "Nie udało się zakończyć ręcznego nagrywania na żądanie." + }, + "notifications": "Powiadomienia", + "audio": "Dźwięk", + "suspend": { + "forTime": "Zawieś na: " + }, + "stream": { + "title": "Strumień", + "audio": { + "tips": { + "title": "Dźwięk musi być wysyłany z kamery i skonfigurowany w go2rtc dla tego strumienia.", + "documentation": "Przeczytaj dokumentację " + }, + "available": "Dźwięk jest dostępny dla tego strumienia", + "unavailable": "Dźwięk nie jest dostępny dla tego strumienia" + }, + "twoWayTalk": { + "tips.documentation": "Przeczytaj dokumentację ", + "tips": "Twoje urządzenie musi obsługiwać tę funkcję, a WebRTC musi być skonfigurowany dla komunikacji dwukierunkowej.", + "unavailable": "Komunikacja dwukierunkowa jest niedostępna dla tego strumienia", + "available": "Komunikacja dwukierunkowa jest dostępna dla tego strumienia" + }, + "lowBandwidth": { + "resetStream": "Zresetuj strumień", + "tips": "Podgląd na żywo jest w trybie niskiej przepustowości z powodu buforowania lub błędów strumienia." + }, + "playInBackground": { + "tips": "Włącz tę opcję, aby kontynuować transmisję, gdy odtwarzacz jest ukryty.", + "label": "Odtwarzaj w tle" + } + }, + "cameraSettings": { + "title": "Ustawienia {{camera}}", + "cameraEnabled": "Kamera włączona", + "objectDetection": "Wykrywanie obiektów", + "recording": "Nagrywanie", + "snapshots": "Zrzuty ekranu", + "audioDetection": "Wykrywanie dźwięku", + "autotracking": "Automatyczne śledzenie" + }, + "effectiveRetainMode": { + "modes": { + "all": "Wszystkie", + "active_objects": "Aktywne obiekty", + "motion": "Ruch" + }, + "notAllTips": "Twoja konfiguracja przechowywania nagrań {{source}} jest ustawiona na 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": "" + } + }, + "header": { + "currentFilterType": "Wartości filtrów", + "noFilters": "Filtry", + "activeFilters": "Aktywne filtry" + } + }, + "similaritySearch": { + "title": "Wyszukiwanie podobieństw", + "active": "Wyszukiwanie podobieństw aktywne", + "clear": "Wyczyść wyszukiwanie podobieństw" + }, + "placeholder": { + "search": "Szukaj..." + } +} diff --git a/web/public/locales/pl/views/settings.json b/web/public/locales/pl/views/settings.json index 0967ef424..38ac0c9d2 100644 --- a/web/public/locales/pl/views/settings.json +++ b/web/public/locales/pl/views/settings.json @@ -1 +1,585 @@ -{} +{ + "menu": { + "users": "Użytkownicy", + "notifications": "Powiadomienia", + "ui": "Interfejs Użytkownika", + "classification": "Klasyfikacja", + "cameras": "Ustawienia Kamery", + "frigateplus": "Frigate+", + "masksAndZones": "Maski / Strefy", + "motionTuner": "Konfigurator Ruchu", + "debug": "Debugowanie" + }, + "dialog": { + "unsavedChanges": { + "title": "Masz niezapisane zmiany.", + "desc": "Czy chcesz zapisać swoje zmiany przed kontynuowaniem?" + } + }, + "cameraSetting": { + "camera": "Kamera", + "noCamera": "Brak Kamery" + }, + "general": { + "title": "Ustawienia Ogólne", + "storedLayouts": { + "title": "Zapisane Układy", + "clearAll": "Wyczyść Wszystkie Układy", + "desc": "Układ kamer w grupie można przeciągać/zmieniać rozmiar. Pozycje są zapisywane w lokalnej pamięci przeglądarki." + }, + "calendar": { + "title": "Kalendarz", + "firstWeekday": { + "label": "Pierwszy dzień tygodnia", + "sunday": "Niedziela", + "monday": "Poniedziałek", + "desc": "Dzień od którego zaczyna się kalendarz przeglądu." + } + }, + "liveDashboard": { + "automaticLiveView": { + "label": "Automatyczny Podgląd na Żywo", + "desc": "Automatycznie przełącz na podgląd na żywo kamery, gdy wykryta zostanie aktywność. Wyłączenie tej opcji spowoduje, że statyczne obrazy kamer na panelu Na Żywo będą aktualizowane tylko raz na minutę." + }, + "title": "Panel Na Żywo", + "playAlertVideos": { + "label": "Odtwarzaj Filmy Alarmowe", + "desc": "Domyślnie, ostatnie alerty na panelu Na Żywo są odtwarzane jako małe zapętlone filmy. Wyłącz tę opcję, aby pokazywać tylko statyczny obraz ostatnich alertów na tym urządzeniu/przeglądarce." + } + }, + "cameraGroupStreaming": { + "title": "Ustawienia Strumieniowania Grup Kamer", + "desc": "Ustawienia strumieniowania dla każdej grupy kamer są przechowywane w lokalnej pamięci przeglądarki.", + "clearAll": "Wyczyść Wszystkie Ustawienia Strumieniowania" + }, + "recordingsViewer": { + "title": "Przeglądarka Nagrań", + "defaultPlaybackRate": { + "label": "Domyślna Prędkość Odtwarzania", + "desc": "Domyślna prędkość odtwarzania dla odtwarzania nagrań." + } + }, + "toast": { + "success": { + "clearStoredLayout": "Wyczyszczono zapisany układ dla {{cameraName}}", + "clearStreamingSettings": "Wyczyszczono ustawienia strumieniowania dla wszystkich grup kamer." + }, + "error": { + "clearStoredLayoutFailed": "Nie udało się wyczyścić zapisanego układu: {{errorMessage}}", + "clearStreamingSettingsFailed": "Nie udało się wyczyścić ustawień strumieniowania: {{errorMessage}}" + } + } + }, + "documentTitle": { + "default": "Ustawienia - Frigate", + "camera": "Ustawienia Kamery - Frigate", + "masksAndZones": "Edytor Masek i Stref - Frigate", + "frigatePlus": "Ustawienia Frigate+ - Frigate", + "classification": "Ustawienia Klasyfikacji - Frigate", + "general": "Ustawienia Ogólne - Frigate", + "authentication": "Ustawienia Uwierzytelniania - Frigate", + "motionTuner": "Konfigurator Ruchu - Frigate", + "object": "Ustawienia Obiektów - Frigate" + }, + "classification": { + "title": "Ustawienia Klasyfikacji", + "semanticSearch": { + "modelSize": { + "small": { + "title": "mały", + "desc": "Używanie małego modelu wykorzystuje skwantyzowaną wersję, która zużywa mniej pamięci RAM i działa szybciej na procesorze przy bardzo nieznacznej różnicy w jakości osadzeń." + }, + "large": { + "title": "duży", + "desc": "Używanie dużego modelu wykorzystuje pełny model Jina i automatycznie uruchomi się na GPU, jeśli jest dostępny." + }, + "desc": "Rozmiar modelu używanego do osadzeń wyszukiwania semantycznego.", + "label": "Rozmiar Modelu" + }, + "title": "Wyszukiwanie Semantyczne", + "desc": "Wyszukiwanie semantyczne w Frigate pozwala znaleźć śledzone obiekty w elementach przeglądu za pomocą samego obrazu, zdefiniowanego przez użytkownika opisu tekstowego lub automatycznie wygenerowanego opisu.", + "readTheDocumentation": "Przeczytaj Dokumentację", + "reindexNow": { + "label": "Przeindeksuj Teraz", + "desc": "Przeindeksowanie wygeneruje ponownie osadzenia dla wszystkich śledzonych obiektów. Ten proces działa w tle i może maksymalnie obciążyć procesor oraz zająć sporo czasu w zależności od liczby śledzonych obiektów.", + "confirmButton": "Przeindeksuj", + "success": "Przeindeksowanie rozpoczęte pomyślnie.", + "alreadyInProgress": "Przeindeksowanie jest już w toku.", + "error": "Nie udało się rozpocząć przeindeksowania: {{errorMessage}}", + "confirmTitle": "Potwierdź Przeindeksowanie", + "confirmDesc": "Czy na pewno chcesz przeindeksować osadzenia wszystkich śledzonych obiektów? Ten proces będzie działał w tle, ale może maksymalnie obciążyć procesor i zająć sporo czasu. Możesz śledzić postęp na stronie Eksploruj." + } + }, + "faceRecognition": { + "title": "Rozpoznawanie Twarzy", + "desc": "Rozpoznawanie twarzy pozwala na przypisanie imion do osób przez Frigate jako podrzędna etykieta. Ta informacja jest zawarta w interfejsie użytkownika, filtrach jak i w powiadomieniach.", + "modelSize": { + "label": "Rozmiar Modelu", + "desc": "Rozmiar modelu używanego do rozpoznawania twarzy.", + "small": { + "title": "mały", + "desc": "Używanie małego modelu wykorzystuje model osadzania twarzy FaceNet, który działa efektywnie na większości procesorów." + }, + "large": { + "title": "duży", + "desc": "Używanie dużego modelu wykorzystuje model osadzania twarzy ArcFace i automatycznie uruchomi się na GPU, jeśli jest dostępny." + } + }, + "readTheDocumentation": "Przeczytaj Dokumentację" + }, + "licensePlateRecognition": { + "title": "Rozpoznawanie Tablic Rejestracyjnych", + "desc": "Frigate może rozpoznawać tablice rejestracyjne pojazdów i automatycznie dodawać wykryte znaki do pola recognized_license_plate albo znaną nazwę jako etykietę podrzędną do obiektów typu samochód. Częstym przypadkiem użycia może być odczytywanie tablic rejestracyjnych samochodów wjeżdżających na podjazd albo przejeżdżających ulicą.", + "readTheDocumentation": "Przeczytaj Dokumentację" + }, + "toast": { + "error": "Nie udało się zapisać zmian w konfiguracji: {{errorMessage}}", + "success": "Ustawienia klasyfikacji zostały zapisane. Uruchom ponownie Frigate aby wprowadzić swoje zmiany." + }, + "birdClassification": { + "desc": "Klasyfikacja ptaków identyfikuje znane ptaki przy użyciu skwantyzowanego modelu Tensorflow. Gdy znany ptak zostanie rozpoznany, jego popularna nazwa zostanie dodana jako sub_label. Ta informacja jest uwzględniana w interfejsie użytkownika, filtrach oraz powiadomieniach.", + "title": "Klasyfikacja Ptaków" + } + }, + "camera": { + "title": "Ustawienia Kamery", + "reviewClassification": { + "noDefinedZones": "Brak stref zdefiniowanych dla tej kamery.", + "selectAlertsZones": "Wybierz strefy dla Alertów", + "title": "Klasyfikacja Przeglądu", + "desc": "Frigate kategoryzuje elementy przeglądu jako Alerty i Wykrycia. Domyślnie wszystkie obiekty osoba i samochód są traktowane jako Alerty. Możesz doprecyzować kategoryzację elementów przeglądu, konfigurując dla nich wymagane strefy.", + "readTheDocumentation": "Przeczytaj Dokumentację", + "objectAlertsTips": "Wszystkie obiekty {{alertsLabels}} na {{cameraName}} będą wyświetlane jako Alerty.", + "zoneObjectAlertsTips": "Wszystkie obiekty {{alertsLabels}} wykryte w strefie {{zone}} na {{cameraName}} będą wyświetlane jako Alerty.", + "zoneObjectDetectionsTips": { + "notSelectDetections": "Wszystkie obiekty {{detectionsLabels}} wykryte w strefie {{zone}} na {{cameraName}}, które nie są skategoryzowane jako Alerty, będą wyświetlane jako Wykrycia niezależnie od strefy, w której się znajdują.", + "regardlessOfZoneObjectDetectionsTips": "Wszystkie nieskategoryzowane obiekty {{detectionsLabels}} na {{cameraName}} będą wyświetlane jako Wykrycia niezależnie od strefy, w której się znajdują.", + "text": "Wszystkie nieskategoryzowane obiekty {{detectionsLabels}} w strefie {{zone}} na {{cameraName}} będą wyświetlane jako Wykrycia." + }, + "toast": { + "success": "Konfiguracja klasyfikacji przeglądu została zapisana. Uruchom ponownie Frigate, aby zastosować zmiany." + }, + "objectDetectionsTips": "Wszystkie nieskategoryzowane obiekty {{detectionsLabels}} na {{cameraName}} będą wyświetlane jako Wykrycia niezależnie od strefy, w której się znajdują.", + "limitDetections": "Ogranicz wykrycia do określonych stref", + "selectDetectionsZones": "Wybierz strefy dla Wykryć" + }, + "review": { + "alerts": "Alerty ", + "title": "Przegląd", + "detections": "Wykrycia ", + "desc": "Włącz/wyłącz alerty i wykrywania dla tej kamery. Po wyłączeniu nie będą generowane nowe elementy do przeglądu." + }, + "streams": { + "desc": "Wyłączenie kamery całkowicie zatrzymuje przetwarzanie strumieni tej kamery przez Frigate. Wykrywanie, nagrywanie i debugowanie będą niedostępne.
    Uwaga: Nie wyłącza to przekazywania strumieni go2rtc.", + "title": "Strumienie" + } + }, + "masksAndZones": { + "filter": { + "all": "Wszystkie Maski i Strefy" + }, + "form": { + "zoneName": { + "error": { + "mustBeAtLeastTwoCharacters": "Nazwa strefy musi mieć co najmniej 2 znaki.", + "mustNotBeSameWithCamera": "Nazwa strefy nie może być taka sama jak nazwa kamery.", + "alreadyExists": "Strefa z tą nazwą już istnieje dla tej kamery.", + "hasIllegalCharacter": "Nazwa strefy zawiera niedozwolone znaki.", + "mustNotContainPeriod": "Nazwa strefy nie może zawierać kropki." + } + }, + "distance": { + "error": { + "text": "Odległość musi być większa lub równa 0.1.", + "mustBeFilled": "Wszystkie pola odległości muszą być wypełnione, aby używać szacowania prędkości." + } + }, + "inertia": { + "error": { + "mustBeAboveZero": "Bezwładność musi być większa od 0." + } + }, + "loiteringTime": { + "error": { + "mustBeGreaterOrEqualZero": "Czas przebywania musi być większy lub równy 0." + } + }, + "polygonDrawing": { + "snapPoints": { + "false": "Nie przyciągaj punktów", + "true": "Przyciągaj punkty" + }, + "removeLastPoint": "Usuń ostatni punkt", + "reset": { + "label": "Wyczyść wszystkie punkty" + }, + "delete": { + "title": "Potwierdź usunięcie", + "success": "{{name}} został usunięty.", + "desc": "Czy na pewno chcesz usunąć {{type}} {{name}}?" + }, + "error": { + "mustBeFinished": "Rysowanie wielokąta musi być zakończone przed zapisaniem." + } + } + }, + "zones": { + "label": "Strefy", + "documentTitle": "Edytuj Strefę - Frigate", + "desc": { + "title": "Strefy pozwalają na zdefiniowanie konkretnych obszarów kadru, dzięki czemu można sprawdzić, czy obiekt znajduje się w danym obszarze.", + "documentation": "Dokumentacja" + }, + "add": "Dodaj Strefę", + "clickDrawPolygon": "Kliknij aby narysować wielokąt na obrazie.", + "edit": "Edytuj Strefę", + "name": { + "title": "Nazwa", + "inputPlaceHolder": "Wprowadź nazwę...", + "tips": "Nazwa musi mieć co najmniej 2 znaki i nie może być taka sama jak nazwa kamery lub innej strefy." + }, + "objects": { + "title": "Obiekty", + "desc": "Lista obiektów dla tej strefy." + }, + "allObjects": "Wszystkie Obiekty", + "point_one": "{{count}} punkt", + "point_few": "{{count}} punkty", + "point_many": "{{count}} punktów", + "inertia": { + "title": "Bezwładność", + "desc": "Określa, przez ile klatek obiekt musi znajdować się w strefie, zanim zostanie uznany za będący w strefie. Domyślnie: 3" + }, + "loiteringTime": { + "title": "Czas przebywania", + "desc": "Ustala minimalny czas w sekundach, przez który obiekt musi znajdować się w strefie, aby ją aktywować. Domyślnie: 0" + }, + "speedThreshold": { + "title": "Próg prędkości ({{unit}})", + "desc": "Określa minimalną prędkość, przy której obiekty są uwzględniane w tej strefie.", + "toast": { + "error": { + "loiteringTimeError": "Strefy z czasem przebywania większym niż 0 nie powinny być używane z szacowaniem prędkości.", + "pointLengthError": "Szacowanie prędkości zostało wyłączone dla tej strefy. Strefy z szacowaniem prędkości muszą mieć dokładnie 4 punkty." + } + } + }, + "speedEstimation": { + "title": "Szacowanie prędkości", + "desc": "Włącz szacowanie prędkości dla obiektów w tej strefie. Strefa musi mieć dokładnie 4 punkty." + }, + "toast": { + "success": "Strefa ({{zoneName}}) została zapisana. Uruchom ponownie Frigate, aby zastosować zmiany." + } + }, + "motionMasks": { + "desc": { + "documentation": "Dokumentacja", + "title": "Maski ruchu służą do zapobiegania wykrywaniu niepożądanych typów ruchu. Zbyt intensywne maskowanie utrudni śledzenie obiektów." + }, + "point_one": "{{count}} punkt", + "point_few": "{{count}} punkty", + "point_many": "{{count}} punktów", + "clickDrawPolygon": "Kliknij aby narysować wielokąt na obrazie.", + "documentTitle": "Edytuj maskę ruchu - Frigate", + "add": "Nowa Maska Ruchu", + "polygonAreaTooLarge": { + "tips": "Maski ruchu nie zapobiegają wykrywaniu obiektów. Powinieneś użyć wymaganej strefy zamiast tego.", + "documentation": "Przeczytaj dokumentację", + "title": "Maska ruchu pokrywa {{polygonArea}}% ramki kamery. Duże maski ruchu nie są zalecane." + }, + "toast": { + "success": { + "title": "{{polygonName}} został zapisany. Uruchom ponownie Frigate, aby zastosować zmiany.", + "noName": "Maska Ruchu została zapisana. Uruchom ponownie Frigate, aby zastosować zmiany." + } + }, + "label": "Maska ruchu", + "edit": "Edytuj Maskę Ruchu", + "context": { + "documentation": "Przeczytaj dokumentację", + "title": "Maski ruchu są używane do zapobiegania niepożądanym typom ruchu przed wyzwalaniem detekcji (przykład: gałęzie drzew, znaczniki czasowe kamery). Maski ruchu powinny być używane bardzo oszczędnie, nadmierne maskowanie utrudni śledzenie obiektów." + } + }, + "objectMasks": { + "toast": { + "success": { + "title": "{{polygonName}} został zapisany. Uruchom ponownie Frigate aby wprowadzić zmiany.", + "noName": "Maska Obiektu została zapisana. Uruchom ponownie Frigate, aby zastosować zmiany." + } + }, + "objects": { + "title": "Obiekty", + "allObjectTypes": "Wszystkie typy obiektów", + "desc": "Typ obiektu, który ma zastosowanie do tej maski obiektu." + }, + "point_one": "{{count}} punkt", + "point_few": "{{count}} punkty", + "point_many": "{{count}} punktów", + "label": "Maski Obiektów", + "documentTitle": "Edytuj Maskę Obiektu - Frigate", + "desc": { + "title": "Maski filtrujące obiekty są używane do filtrowania fałszywych detekcji dla danego typu obiektu na podstawie lokalizacji.", + "documentation": "Dokumentacja" + }, + "add": "Dodaj Maskę Obiektu", + "edit": "Edytuj Maskę Obiektu", + "clickDrawPolygon": "Kliknij, aby narysować wielokąt na obrazie.", + "context": "Maski filtrujące obiekty są używane do filtrowania fałszywych detekcji dla danego typu obiektu na podstawie lokalizacji." + }, + "toast": { + "success": { + "copyCoordinates": "Skopiowano współrzędne dla {{polyName}} do schowka." + }, + "error": { + "copyCoordinatesFailed": "Nie udało się skopiować współrzędnych do schowka." + } + } + }, + "debug": { + "objectList": "Lista Obiektów", + "debugging": "Debugowanie", + "title": "Debugowanie", + "detectorDesc": "Frigate używa twoich detektorów ({{detectors}}) do wykrywania obiektów w strumieniu wideo kamery.", + "boundingBoxes": { + "desc": "Pokaż ramki ograniczające wokół śledzonych obiektów", + "colors": { + "label": "Kolory Ramek Ograniczających Obiekty", + "info": "
  • Przy uruchomieniu, różne kolory zostaną przypisane do każdej etykiety obiektu
  • Ciemnoniebieska cienka linia oznacza, że obiekt nie jest wykrywany w tym momencie
  • Szara cienka linia oznacza, że obiekt jest wykrywany jako nieruchomy
  • Gruba linia oznacza, że obiekt jest przedmiotem automatycznego śledzenia (gdy włączone)
  • " + }, + "title": "Ramki ograniczające" + }, + "zones": { + "desc": "Pokaż kontur zdefiniowanych stref", + "title": "Strefy" + }, + "desc": "Widok debugowania pokazuje podgląd śledzonych obiektów w czasie rzeczywistym i ich statystyki. Lista obiektów pokazuje opóźnione podsumowanie wykrytych obiektów.", + "noObjects": "Brak obiektów", + "timestamp": { + "title": "Znacznik czasu", + "desc": "Nałóż znacznik czasu na obraz" + }, + "mask": { + "title": "Maski ruchu", + "desc": "Pokaż wielokąty maski ruchu" + }, + "motion": { + "title": "Ramki ruchu", + "desc": "Pokaż ramki wokół obszarów, gdzie wykryto ruch", + "tips": "

    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:

    ", + "title": "Zmień rolę użytkownika" + }, + "createUser": { + "title": "Utwórz nowego użytkownika", + "desc": "Dodaj nowe konto użytkownika i określ rolę dla dostępu do obszarów interfejsu Frigate.", + "usernameOnlyInclude": "Nazwa użytkownika może zawierać tylko litery, cyfry lub znak _" + }, + "deleteUser": { + "title": "Usuń użytkownika", + "desc": "Tej akcji nie można cofnąć. Spowoduje to trwałe usunięcie konta użytkownika i wszystkich powiązanych danych.", + "warn": "Czy na pewno chcesz usunąć {{username}}?" + }, + "passwordSetting": { + "updatePassword": "Aktualizuj hasło dla {{username}}", + "setPassword": "Ustaw hasło", + "desc": "Utwórz silne hasło, aby zabezpieczyć to konto." + } + }, + "management": { + "title": "Zarządzanie Użytkownikami", + "desc": "Zarządzaj kontami użytkowników tej instancji Frigate." + }, + "title": "Użytkownicy" + }, + "notification": { + "title": "Powiadomienia", + "notificationSettings": { + "title": "Ustawienia powiadomień", + "desc": "Frigate może wysyłać natywne powiadomienia push na twoje urządzenie, gdy działa w przeglądarce lub jest zainstalowany jako PWA.", + "documentation": "Przeczytaj dokumentację" + }, + "notificationUnavailable": { + "title": "Powiadomienia niedostępne", + "desc": "Powiadomienia push w przeglądarce wymagają bezpiecznego kontekstu (https://...). To jest ograniczenie przeglądarki. Uzyskaj dostęp do Frigate przez bezpieczne połączenie, aby korzystać z powiadomień.", + "documentation": "Przeczytaj dokumentację" + }, + "globalSettings": { + "title": "Ustawienia globalne", + "desc": "Tymczasowo wstrzymaj powiadomienia dla określonych kamer na wszystkich zarejestrowanych urządzeniach." + }, + "suspendTime": { + "12hours": "Zawieś na 12 godzin", + "24hours": "Zawieś na 24 godziny", + "untilRestart": "Zawieś do restartu", + "1hour": "Zawieś na 1 godzinę", + "5minutes": "Zawieś na 5 minut", + "10minutes": "Zawieś na 10 minut", + "30minutes": "Zawieś na 30 minut" + }, + "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.
    Observação: Isso não desativa as retransmissões do go2rtc." + }, + "review": { + "title": "Revisão", + "desc": "Ative ou desative alertas e detecções para esta câmera. Quando desativado, nenhum novo item de revisão será gerado.", + "alerts": "Alertas ", + "detections": "Detecções " + } + }, + "motionDetectionTuner": { + "contourArea": { + "title": "Área de contorno" + }, + "improveContrast": { + "title": "Melhorar o contraste" + }, + "Threshold": { + "title": "Limite" } } } diff --git a/web/public/locales/pt/views/system.json b/web/public/locales/pt/views/system.json index ac0e2ea92..56bd3f97a 100644 --- a/web/public/locales/pt/views/system.json +++ b/web/public/locales/pt/views/system.json @@ -49,7 +49,12 @@ "title": "Armazenamento da câmera" }, "title": "Armazenamento", - "overview": "Visão geral" + "overview": "Visão geral", + "recordings": { + "title": "Gravações", + "earliestRecording": "Primeira gravação disponível:", + "tips": "Esse valor representa o armazenamento total usado pelas gravações no banco de dados do Frigate. O Frigate não acompanha o uso de armazenamento de todos os arquivos no seu disco." + } }, "cameras": { "title": "Câmeras", @@ -62,7 +67,12 @@ "codec": "Codec:", "fps": "FPS:", "stream": "Transmissão {{idx}}", - "audio": "Áudio:" + "audio": "Áudio:", + "cameraProbeInfo": "{{camera}} Explorar informações da Camera", + "tips": { + "title": "Explorar informações da Camera" + }, + "streamDataFromFFPROBE": "Os dados de fluxo são obtidos com 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": "Вы уверены, что хотите удалить все записанное видео, связанное с этим элементом просмотра?

    Удерживайте клавишу Shift, чтобы пропустить это окно в будущем." + } + }, + "button": { + "export": "Экспорт", + "markAsReviewed": "Пометить как просмотренное", + "deleteNow": "Удалить сейчас" + } + } +} diff --git a/web/public/locales/ru/components/filter.json b/web/public/locales/ru/components/filter.json index 0967ef424..653a684ec 100644 --- a/web/public/locales/ru/components/filter.json +++ b/web/public/locales/ru/components/filter.json @@ -1 +1,126 @@ -{} +{ + "filter": "Фильтр", + "labels": { + "label": "Метки", + "all": { + "title": "Все метки", + "short": "Метки" + }, + "count": "{{count}} меток", + "count_one": "{{count}} Метка", + "count_other": "{{count}} меток" + }, + "zones": { + "all": { + "title": "Все зоны", + "short": "Зоны" + }, + "label": "Зоны" + }, + "dates": { + "all": { + "title": "Все даты", + "short": "Даты" + } + }, + "timeRange": "Временной диапазон", + "subLabels": { + "label": "Вторичные метки", + "all": "Все вторичные метки" + }, + "score": "Оценка", + "estimatedSpeed": "Расчетная скорость ({{unit}})", + "more": "Больше фильтров", + "reset": { + "label": "Сбросить фильтры к значениям по умолчанию" + }, + "features": { + "hasSnapshot": "Есть снимок", + "hasVideoClip": "Есть видеоклип", + "submittedToFrigatePlus": { + "label": "Отправлено в Frigate+", + "tips": "Сначала необходимо отфильтровать отслеживаемые объекты, у которых есть снимок.

    Отслеживаемые объекты без снимка нельзя отправить в Frigate+." + }, + "label": "Функции" + }, + "sort": { + "speedAsc": "Расчетная скорость (по возрастанию)", + "speedDesc": "Расчетная скорость (по убыванию)", + "label": "Сортировка", + "dateAsc": "Дата (по возрастанию)", + "dateDesc": "Дата (по убыванию)", + "scoreAsc": "Оценка объекта (по возрастанию)", + "scoreDesc": "Оценка объекта (по убыванию)", + "relevance": "Релевантность" + }, + "cameras": { + "label": "Фильтр камер", + "all": { + "title": "Все камеры", + "short": "Камеры" + } + }, + "explore": { + "settings": { + "defaultView": { + "unfilteredGrid": "Нефильтрованная сетка", + "summary": "Сводка", + "title": "Вид по умолчанию", + "desc": "При отсутствии выбранных фильтров отображать сводку последних отслеживаемых объектов для каждой метки или показывать нефильтрованную сетку." + }, + "gridColumns": { + "title": "Столбцы сетки", + "desc": "Выберите количество столбцов сетки." + }, + "searchSource": { + "label": "Источник поиска", + "desc": "Выберите, выполнять поиск по миниатюрам или описаниям отслеживаемых объектов.", + "options": { + "thumbnailImage": "Изображение миниатюры", + "description": "Описание" + } + }, + "title": "Настройки" + }, + "date": { + "selectDateBy": { + "label": "Выберите дату для фильтрации" + } + } + }, + "logSettings": { + "filterBySeverity": "Фильтровать логи по уровню важности", + "loading": { + "title": "Загрузка", + "desc": "При прокрутке панели логов в самый низ новые записи автоматически отображаются по мере их добавления." + }, + "label": "Уровень детализации логов", + "allLogs": "Все логи", + "disableLogStreaming": "Отключить потоковую передачу логов" + }, + "trackedObjectDelete": { + "title": "Подтвердить удаление", + "toast": { + "error": "Не удалось удалить отслеживаемые объекты: {{errorMessage}}", + "success": "Отслеживаемые объекты успешно удалены." + }, + "desc": "Удаление этих {{objectLength}} отслеживаемых объектов приведёт к удалению их снимков, сохранённых эмбеддингов и записей жизненного цикла. НО сами записи в разделе «История» останутся.

    Вы уверены, что хотите продолжить?

    Удерживайте Shift, чтобы пропустить это окно в будущем." + }, + "zoneMask": { + "filterBy": "Фильтр по маске зоны" + }, + "recognizedLicensePlates": { + "noLicensePlatesFound": "Номерных знаков не найдено.", + "placeholder": "Введите номер для поиска знака...", + "title": "Распознанные номерные знаки", + "loadFailed": "Не удалось загрузить распознанные номерные знаки.", + "loading": "Загрузка распознанных номерных знаков...", + "selectPlatesFromList": "Выберите один или более знаков из списка." + }, + "review": { + "showReviewed": "Показать просмотренные" + }, + "motion": { + "showMotionOnly": "Показывать только движение" + } +} diff --git a/web/public/locales/ru/components/icons.json b/web/public/locales/ru/components/icons.json index 0967ef424..792966741 100644 --- a/web/public/locales/ru/components/icons.json +++ b/web/public/locales/ru/components/icons.json @@ -1 +1,8 @@ -{} +{ + "iconPicker": { + "selectIcon": "Выберите иконку", + "search": { + "placeholder": "Поиск иконки..." + } + } +} diff --git a/web/public/locales/ru/components/input.json b/web/public/locales/ru/components/input.json index 0967ef424..149b56d0a 100644 --- a/web/public/locales/ru/components/input.json +++ b/web/public/locales/ru/components/input.json @@ -1 +1,10 @@ -{} +{ + "button": { + "downloadVideo": { + "label": "Скачать видео", + "toast": { + "success": "Загрузка видео начата." + } + } + } +} diff --git a/web/public/locales/ru/components/player.json b/web/public/locales/ru/components/player.json index 0967ef424..f0a44efcd 100644 --- a/web/public/locales/ru/components/player.json +++ b/web/public/locales/ru/components/player.json @@ -1 +1,51 @@ -{} +{ + "noRecordingsFoundForThisTime": "Не найдено ни одной записи", + "noPreviewFound": "Предпросмотр не найден", + "submitFrigatePlus": { + "title": "Отправить этот кадр в Frigate+?", + "submit": "Отправить" + }, + "noPreviewFoundFor": "Не найдено предпросмотра для {{cameraName}}", + "livePlayerRequiredIOSVersion": "iOS 17.1 или выше требуется для этого типа стрима.", + "streamOffline": { + "title": "Поток оффлайн", + "desc": "С потока 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": "Удаление этого отслеживаемого объекта приведёт к удалению его снимка, всех сохранённых эмбеддингов и записей жизненного цикла. Сами записи в разделе История НЕ будут удалены.

    Вы уверены, что хотите продолжить?" + } + }, + "noTrackedObjects": "Не найдено отслеживаемых объектов", + "fetchingTrackedObjectsFailed": "При получении списка отслеживаемых объектов произошла ошибка: {{errorMessage}}", + "trackedObjectsCount_one": "{{count}} отслеживаемый объект ", + "trackedObjectsCount_few": "{{count}} отслеживаемых объекта ", + "trackedObjectsCount_many": "{{count}} отслеживаемых объектов ", + "searchResult": { + "deleteTrackedObject": { + "toast": { + "success": "Отслеживаемый объект успешно удалён.", + "error": "Не удалось удалить отслеживаемый объект: {{errorMessage}}" + } + } + } +} diff --git a/web/public/locales/ru/views/exports.json b/web/public/locales/ru/views/exports.json index 0967ef424..f48fb3e71 100644 --- a/web/public/locales/ru/views/exports.json +++ b/web/public/locales/ru/views/exports.json @@ -1 +1,17 @@ -{} +{ + "documentTitle": "Экспорт - Frigate", + "search": "Поиск", + "noExports": "Не найдено файлов экспорта", + "deleteExport": "Удалить экспорт", + "deleteExport.desc": "Вы уверены, что хотите удалить {{exportName}}?", + "editExport": { + "title": "Переименовать экспорт", + "desc": "Введите новое имя для этого экспорта.", + "saveExport": "Сохранить экспорт" + }, + "toast": { + "error": { + "renameExportFailed": "Не удалось переименовать экспорт: {{errorMessage}}" + } + } +} diff --git a/web/public/locales/ru/views/faceLibrary.json b/web/public/locales/ru/views/faceLibrary.json index 0967ef424..4dee9b964 100644 --- a/web/public/locales/ru/views/faceLibrary.json +++ b/web/public/locales/ru/views/faceLibrary.json @@ -1 +1,73 @@ -{} +{ + "details": { + "person": "Человек", + "timestamp": "Метка времени", + "face": "Подробности о лице", + "faceDesc": "Подробности о лице и связанном объекте", + "confidence": "Достоверность" + }, + "documentTitle": "Библиотека лиц - Frigate", + "description": { + "placeholder": "Введите название коллекции", + "addFace": "Пошаговое добавление новой коллекции в Библиотеку лиц." + }, + "createFaceLibrary": { + "desc": "Создание новой коллекции", + "nextSteps": "Для создания надежной базы:
  • Используйте вкладку Обучение, чтобы выбрать изображения и обучить систему для каждого обнаруженного человека.
  • Используйте фронтальные изображения для лучшего результата; избегайте изображений с лицами, снятыми под углом.
  • ", + "title": "Создать коллекцию", + "new": "Создать новое лицо" + }, + "selectFace": "Выбор лица", + "uploadFaceImage": { + "desc": "Загрузите изображение для поиска лиц и связывания с {{pageToggle}}", + "title": "Загрузка изображения с лицом" + }, + "selectItem": "Выбор {{item}}", + "train": { + "aria": "Выбор обучения", + "title": "Обучение" + }, + "toast": { + "success": { + "deletedFace_one": "Успешно удалено {{count}} лицо.", + "deletedFace_few": "Успешно удалено {{count}} лица.", + "deletedFace_many": "Успешно удалено {{count}} лиц.", + "deletedName_one": "{{count}} лицо успешно удалено.", + "deletedName_few": "{{count}} лица успешно удалено.", + "deletedName_many": "{{count}} лиц успешно удалено.", + "uploadedImage": "Изображение успешно загружено.", + "trainedFace": "Лицо успешно запомнено.", + "addFaceLibrary": "{{name}} успешно добавлен в Библиотеку Лиц!", + "updatedFaceScore": "Оценка лица успешно обновлена." + }, + "error": { + "deleteFaceFailed": "Не удалось удалить: {{errorMessage}}", + "uploadingImageFailed": "Не удалось загрузить изображение: {{errorMessage}}", + "trainFailed": "Не удалось запомнить: {{errorMessage}}", + "updateFaceScoreFailed": "Не удалось обновить оценку лица: {{errorMessage}}", + "addFaceLibraryFailed": "Не удалось установить имя для лица: {{errorMessage}}", + "deleteNameFailed": "Не удалось удалить имя: {{errorMessage}}" + } + }, + "deleteFaceLibrary": { + "title": "Удалить имя", + "desc": "Вы уверены, что хотите удалить коллекцию «{{name}}»? Это действие безвозвратно удалит все лица в коллекции." + }, + "imageEntry": { + "dropActive": "Перетащите изображение сюда...", + "dropInstructions": "Перетащите изображение сюда или нажмите для выбора", + "maxSize": "Макс. размер: {{size}}Мб", + "validation": { + "selectImage": "Пожалуйста, выберите файл изображения." + } + }, + "readTheDocs": "Прочитать документацию", + "trainFaceAs": "Запомнить Лицо как:", + "button": { + "uploadImage": "Загрузить изображение", + "deleteFaceAttempts": "Удалить попытки распознавания лиц", + "addFace": "Добавить Лицо", + "reprocessFace": "Переобработать Лицо" + }, + "trainFace": "Запомнить Лицо" +} diff --git a/web/public/locales/ru/views/live.json b/web/public/locales/ru/views/live.json index 0967ef424..0ac9f9f9c 100644 --- a/web/public/locales/ru/views/live.json +++ b/web/public/locales/ru/views/live.json @@ -1 +1,158 @@ -{} +{ + "documentTitle": "Прямой эфир - Frigate", + "documentTitle.withCamera": "{{camera}} - Прямой эфир - Frigate", + "lowBandwidthMode": "Экономичный режим", + "twoWayTalk": { + "enable": "Включить двустороннюю связь", + "disable": "Отключить двустороннюю связь" + }, + "cameraAudio": { + "enable": "Включить звук с камеры", + "disable": "Отключить звук с камеры" + }, + "ptz": { + "move": { + "clickMove": { + "label": "Кликните в кадре для центрирования камеры", + "enable": "Включить перемещение по клику", + "disable": "Отключить перемещение по клику" + }, + "left": { + "label": "Переместить PTZ-камеру влево" + }, + "down": { + "label": "Переместить PTZ-камеру вниз" + }, + "up": { + "label": "Переместить PTZ-камеру вверх" + }, + "right": { + "label": "Переместить PTZ-камеру вправо" + } + }, + "zoom": { + "in": { + "label": "Приблизить PTZ-камеру" + }, + "out": { + "label": "Отдалить PTZ-камеру" + } + }, + "frame": { + "center": { + "label": "Кликните в кадре для центрирования PTZ-камеры" + } + }, + "presets": "Предустановки PTZ-камеры" + }, + "camera": { + "enable": "Включить камеру", + "disable": "Отключить камеру" + }, + "muteCameras": { + "enable": "Отключить звук на всех камерах", + "disable": "Включить звук на всех камерах" + }, + "detect": { + "enable": "Включить детекцию", + "disable": "Отключить детекцию" + }, + "recording": { + "enable": "Включить запись", + "disable": "Отключить запись" + }, + "snapshots": { + "enable": "Включить снимки", + "disable": "Отключить снимки" + }, + "audioDetect": { + "enable": "Включить детекцию аудио", + "disable": "Отключить детекцию аудио" + }, + "autotracking": { + "enable": "Включить автотрекинг", + "disable": "Отключить автотрекинг" + }, + "streamStats": { + "enable": "Показать статистику потока", + "disable": "Скрыть статистику потока" + }, + "manualRecording": { + "title": "Запись по требованию", + "tips": "Создать ручное событие на основе настроек хранения записей этой камеры.", + "playInBackground": { + "label": "Воспроизвести в фоне", + "desc": "Включите эту опцию, чтобы продолжать трансляцию при скрытом плеере." + }, + "showStats": { + "label": "Показать статистику", + "desc": "Включите эту опцию, чтобы отображать статистику потока в виде наложения на изображение с камеры." + }, + "debugView": "Режим отладки", + "start": "Запустить запись по запросу", + "started": "Запущена запись по запросу.", + "failedToStart": "Не удалось запустить запись по требованию.", + "recordDisabledTips": "Поскольку запись отключена или ограничена в конфигурации для этой камеры, будет сохранён только снимок.", + "end": "Завершить запись по требованию", + "ended": "Запись по требованию остановлена.", + "failedToEnd": "Не удалось остановить запись по требованию." + }, + "streamingSettings": "Настройки потока", + "suspend": { + "forTime": "Приостановить на: " + }, + "stream": { + "audio": { + "tips": { + "documentation": "Прочитать документацию ", + "title": "Аудио должно выводиться с вашей камеры и быть настроено в go2rtc для этого потока." + }, + "available": "Для этого потока доступен звук", + "unavailable": "Аудио недоступно для этого потока" + }, + "title": "Поток", + "twoWayTalk": { + "tips": "Ваше устройство должно поддерживать эту функцию, а WebRTC должен быть настроен для двусторонней связи.", + "tips.documentation": "Прочитать документацию ", + "available": "Двусторонняя связь доступна для этого потока", + "unavailable": "Двусторонняя связь недоступна для этого потока" + }, + "lowBandwidth": { + "tips": "Режим просмотра в реальном времени переведён в экономичный режим из-за буферизации или ошибок потока.", + "resetStream": "Сброс потока" + }, + "playInBackground": { + "label": "Воспроизвести в фоне", + "tips": "Включите эту опцию, чтобы продолжать трансляцию при скрытом плеере." + } + }, + "cameraSettings": { + "title": "Настройки {{camera}}", + "objectDetection": "Детекция объектов", + "recording": "Запись", + "audioDetection": "Детекция аудио", + "snapshots": "Снимки", + "autotracking": "Автотрекинг", + "cameraEnabled": "Камера активирована" + }, + "history": { + "label": "Показать архивные записи" + }, + "effectiveRetainMode": { + "modes": { + "all": "Все", + "motion": "Движение", + "active_objects": "Активные объекты" + }, + "notAllTips": "Ваша конфигурация хранения записей {{source}} установлена в 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": "", + "example": "Пример: 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": "

    Выберите подходящую роль для этого пользователя:

    " + }, + "form": { + "user": { + "placeholder": "Введите имя пользователя", + "desc": "Допустимо использовать только буквы, цифры, точки и подчёркивания.", + "title": "Имя пользователя" + }, + "password": { + "title": "Пароль", + "placeholder": "Введите пароль", + "confirm": { + "title": "Подтвердите пароль", + "placeholder": "Подтвердите пароль" + }, + "strength": { + "title": "Сложность пароля: ", + "weak": "Слабый", + "medium": "Средний", + "strong": "Сложный", + "veryStrong": "Очень сложный" + }, + "match": "Пароли совпадают", + "notMatch": "Пароли не совпадают" + }, + "newPassword": { + "title": "Новый пароль", + "confirm": { + "placeholder": "Повторно введите новый пароль" + }, + "placeholder": "Введите новый пароль" + }, + "usernameIsRequired": "Необходимо ввести имя пользователя" + }, + "createUser": { + "title": "Создать нового пользователя", + "usernameOnlyInclude": "Имя пользователя может включать только буквы, цифры, . или _", + "desc": "Добавить новую учетную запись пользователя и определить роль для доступа к разделам интерфейса Frigate." + } + }, + "title": "Пользователи", + "toast": { + "success": { + "roleUpdated": "Обновлена роль для {{user}}", + "createUser": "Пользователь {{user}} успешно создан", + "deleteUser": "Пользователь {{user}} успешно удалён", + "updatePassword": "Пароль успешно обновлён." + }, + "error": { + "setPasswordFailed": "Не удалось сохранить пароль: {{errorMessage}}", + "createUserFailed": "Не удалось создать пользователя: {{errorMessage}}", + "deleteUserFailed": "Не удалось удалить пользователя: {{errorMessage}}", + "roleUpdateFailed": "Не удалось обновить роль: {{errorMessage}}" + } + }, + "table": { + "username": "Имя пользователя", + "actions": "Действия", + "password": "Пароль", + "noUsers": "Пользователей не найдено.", + "changeRole": "Изменить роль пользователя", + "role": "Роль", + "deleteUser": "Удалить пользователя" + }, + "management": { + "title": "Управление пользователями", + "desc": "Управление учетными записями пользователей этого экземпляра Frigate." + }, + "updatePassword": "Обновить пароль", + "addUser": "Добавить пользователя" + }, + "notification": { + "title": "Уведомления", + "notificationSettings": { + "documentation": "Прочитать документацию", + "title": "Настройки уведомлений", + "desc": "Frigate может отправлять push-уведомления на ваше устройство, когда приложение открыто в браузере или установлено как PWA." + }, + "notificationUnavailable": { + "documentation": "Прочитать документацию", + "title": "Уведомления недоступны", + "desc": "Веб-уведомления требуют защищённого контекста (https://...). Это ограничение браузера. Получите безопасный доступ к Frigate, чтобы использовать уведомления." + }, + "email": { + "title": "Email", + "desc": "Для уведомлений о проблемах с push-сервисом требуется указать действующий адрес электронной почты.", + "placeholder": "например, example@email.com" + }, + "globalSettings": { + "title": "Глобальные настройки", + "desc": "Временно приостановить уведомления для определённых камер на всех зарегистрированных устройствах." + }, + "cameras": { + "title": "Камеры", + "noCameras": "Нет доступных камер", + "desc": "Выберите камеры для активации уведомлений." + }, + "deviceSpecific": "Настройки для конкретного устройства", + "registerDevice": "Зарегистрировать это устройство", + "unregisterDevice": "Отменить регистрацию этого устройства", + "suspended": "Уведомления приостановлены {{time}}", + "sendTestNotification": "Отправить тестовое уведомление", + "active": "Уведомления активны", + "suspendTime": { + "30minutes": "Приостановить на 30 минут", + "1hour": "Приостановить на 1 час", + "12hours": "Приостановить на 12 часов", + "24hours": "Приостановить на 24 часа", + "untilRestart": "Приостановить до перезапуска", + "5minutes": "Приостановить на 5 минут", + "10minutes": "Приостановить на 10 минут" + }, + "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 потоков с этой камеры. Обнаружение, запись и отладка будут недоступны.
    Примечание: Это не отключает рестриминг go2rtc." + } + }, + "masksAndZones": { + "zones": { + "objects": { + "title": "Объекты", + "desc": "Список объектов, применяемых к этой зоне." + }, + "speedEstimation": { + "desc": "Включить оценку скорости объектов в этой зоне. Зона должна состоять ровно из 4 точек.", + "title": "Расчёт скорости" + }, + "label": "Зоны", + "documentTitle": "Редактирование зоны - Frigate", + "desc": { + "title": "Зоны позволяют определить конкретную область кадра, чтобы можно было определить, находится ли объект в заданной области.", + "documentation": "Документация" + }, + "add": "Добавить зону", + "edit": "Редактировать зону", + "point_one": "{{count}} точка", + "point_few": "{{count}} точки", + "point_many": "{{count}} точек", + "clickDrawPolygon": "Кликните, чтобы нарисовать полигон на изображении.", + "name": { + "title": "Название", + "inputPlaceHolder": "Введите название...", + "tips": "Название должно содержать не менее 2 символов и не совпадать с названием камеры или другой зоны." + }, + "inertia": { + "title": "Инерция", + "desc": "Указывает, сколько кадров объект должен находиться в зоне, прежде чем он будет считаться находящимся в ней. Значение по умолчанию: 3" + }, + "loiteringTime": { + "title": "Время присутствия", + "desc": "Устанавливает минимальное время в секундах, которое объект должен находиться в зоне для её активации. Значение по умолчанию: 0" + }, + "allObjects": "Все объекты", + "speedThreshold": { + "title": "Предел скорости ({{unit}})", + "toast": { + "error": { + "loiteringTimeError": "Зоны с установленным временем присутствия более 0 не должны использоваться для вычисления скорости.", + "pointLengthError": "Расчёт скорости отключён для этой зоны. Зоны с расчётом скорости должны содержать ровно 4 точки." + } + }, + "desc": "Задаёт минимальную скорость объектов для учёта в этой зоне." + }, + "toast": { + "success": "Зона ({{zoneName}}) сохранена. Перезапустите Frigate для применения изменений." + } + }, + "motionMasks": { + "desc": { + "documentation": "Документация", + "title": "Маски движения используются, чтобы предотвратить срабатывание обнаружений на нежелательные типы движения. Чрезмерная маскировка усложняет отслеживание объектов." + }, + "add": "Новая маска движения", + "edit": "Редактировать маску движения", + "context": { + "documentation": "Прочитать документацию", + "title": "Маски движения используются, чтобы предотвратить срабатывание обнаружений на нежелательные типы движения (например, ветки деревьев, метки времени на камере). При этом маски движения нужно использовать очень умеренно: чрезмерное применение масок затруднит отслеживание объектов." + }, + "clickDrawPolygon": "Нажмите, чтобы нарисовать полигон на изображении.", + "polygonAreaTooLarge": { + "documentation": "Прочитать документацию", + "title": "Маска движения покрывает {{polygonArea}}% кадра. Большие маски движения не рекомендуются.", + "tips": "Маски движения не предотвращают обнаружение объектов. Вместо этого следует использовать обязательную зону." + }, + "point_one": "{{count}} точка", + "point_few": "{{count}} точки", + "point_many": "{{count}} точек", + "label": "Маска движения", + "documentTitle": "Редактирование маски движения - Frigate", + "toast": { + "success": { + "title": "{{polygonName}} сохранена. Перезапустите Frigate для применения изменений.", + "noName": "Маска движения сохранена. Перезапустите Frigate для применения изменений." + } + } + }, + "filter": { + "all": "Все маски и зоны" + }, + "form": { + "zoneName": { + "error": { + "mustBeAtLeastTwoCharacters": "Имя зоны должно содержать не менее 2 символов.", + "mustNotBeSameWithCamera": "Имя зоны не должно совпадать с именем камеры.", + "hasIllegalCharacter": "Имя зоны содержит недопустимые символы.", + "alreadyExists": "Зона с таким именем уже существует для этой камеры.", + "mustNotContainPeriod": "Имя зоны не должно содержать точки." + } + }, + "distance": { + "error": { + "text": "Расстояние должно быть больше или равно 0.1.", + "mustBeFilled": "Все поля расстояния должны быть заполнены для расчёта скорости." + } + }, + "inertia": { + "error": { + "mustBeAboveZero": "Инерция должна быть больше 0." + } + }, + "loiteringTime": { + "error": { + "mustBeGreaterOrEqualZero": "Время присутствия должно быть больше или равно 0." + } + }, + "polygonDrawing": { + "removeLastPoint": "Удалить последнюю точку", + "error": { + "mustBeFinished": "Рисование полигона должно быть завершено перед сохранением." + }, + "delete": { + "success": "{{name}} удалён.", + "title": "Подтвердить удаление", + "desc": "Вы уверены, что хотите удалить {{type}} {{name}}?" + }, + "snapPoints": { + "false": "Не привязывать к точкам", + "true": "Привязать точки" + }, + "reset": { + "label": "Удалить все точки" + } + } + }, + "toast": { + "error": { + "copyCoordinatesFailed": "Не удалось скопировать координаты в буфер обмена." + }, + "success": { + "copyCoordinates": "Координаты {{polyName}} скопированы в буфер обмена." + } + }, + "objectMasks": { + "label": "Маски объектов", + "desc": { + "documentation": "Документация", + "title": "Маски фильтра объектов используются для исключения ложных срабатываний определённого типа объектов в зависимости от местоположения." + }, + "documentTitle": "Редактирование маски объектов - Frigate", + "add": "Добавить маску объектов", + "clickDrawPolygon": "Кликните, чтобы нарисовать полигон на изображении.", + "edit": "Редактирование маски объектов", + "context": "Маски фильтра объектов используются для исключения ложных срабатываний определённого типа объектов в зависимости от местоположения.", + "point_one": "{{count}} точка", + "point_few": "{{count}} точки", + "point_many": "{{count}} точек", + "objects": { + "allObjectTypes": "Все типы объектов", + "title": "Объекты", + "desc": "Тип объекта, к которому применяется эта маска." + }, + "toast": { + "success": { + "title": "{{polygonName}} сохранена. Перезапустите Frigate для применения изменений.", + "noName": "Маска объектов сохранена. Перезапустите Frigate для применения изменений." + } + } + } + }, + "motionDetectionTuner": { + "desc": { + "documentation": "Прочитать руководство по настройке детекции движения", + "title": "Frigate использует детекцию движения как первичную проверку, чтобы определить, есть ли в кадре что-то, что стоит анализировать с помощью детекции объектов." + }, + "title": "Настройка детекции движения", + "contourArea": { + "title": "Площадь контура", + "desc": "Параметр площади контура определяет, какие группы изменённых пикселей считаются движением. По умолчанию: 10" + }, + "improveContrast": { + "title": "Улучшить контрастность", + "desc": "Улучшение контрастности в тёмных сценах. Default: ON" + }, + "Threshold": { + "title": "Порог", + "desc": "Пороговое значение определяет, насколько должна измениться яркость пикселя, чтобы считаться движением. По умолчанию: 30" + }, + "toast": { + "success": "Настройки движения сохранены." + } + }, + "debug": { + "objectShapeFilterDrawing": { + "document": "Прочитать документацию ", + "title": "Отрисовка фильтра формы объекта", + "desc": "Отображает прямоугольник на изображении, чтобы видеть данные о площади и соотношении сторон", + "tips": "Включите эту опцию, чтобы нарисовать прямоугольник на изображении с камеры для отображения его площади и соотношения сторон. Эти значения можно затем использовать для настройки параметров фильтра формы объектов в вашем конфигурационном файле.", + "area": "Площадь", + "ratio": "Соотношение", + "score": "Оценка" + }, + "detectorDesc": "Frigate использует ваши детекторы ({{detectors}}) для обнаружения объектов в видеопотоке с камер.", + "desc": "Режим отладки отображает отслеживаемые объекты и их статистику в реальном времени. Список объектов показывает отложенную по времени сводку обнаруженных объектов.", + "debugging": "Отладка", + "title": "Отладка", + "boundingBoxes": { + "colors": { + "label": "Цвета ограничивающих рамок объектов", + "info": "
  • При запуске каждой метке объекта назначается уникальный цвет
  • Тонкая синяя линия: объект в данный момент не обнаружен
  • Тонкая серая линия: объект помечен как статичный
  • Толстая линия: объект под автотрекингом (если включено)
  • " + }, + "title": "Ограничивающие рамки", + "desc": "Показывать ограничивающие рамки вокруг отслеживаемых объектов" + }, + "objectList": "Список объектов", + "noObjects": "Нет объектов", + "timestamp": { + "title": "Метка времени", + "desc": "Наложить временную метку на изображение" + }, + "zones": { + "title": "Зоны", + "desc": "Показать контур всех определённых зон" + }, + "mask": { + "title": "Маски движения", + "desc": "Показать полигоны маски движения" + }, + "motion": { + "title": "Области движения", + "desc": "Показать рамки вокруг областей, в которых определяется движение", + "tips": "

    Области движения


    Красные рамки будут наложены на участки кадра, где в данный момент обнаружено движение

    " + }, + "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({
    - {score}%{subLabelScore && ` (${subLabelScore}%)`} + {topScore}%{subLabelScore && ` (${subLabelScore}%)`}
    + {snapScore && ( +
    +
    +
    + {t("details.snapshotScore.label")} +
    +
    +
    {snapScore}%
    +
    + )} {averageEstimatedSpeed && (