diff --git a/custom_components/motion_recorder/translations/en.json b/custom_components/motion_recorder/translations/en.json new file mode 100644 index 0000000..3472a0f --- /dev/null +++ b/custom_components/motion_recorder/translations/en.json @@ -0,0 +1,91 @@ +{ + "config": { + "step": { + "user": { + "title": "Motion Recorder Settings", + "description": "Configure motion-based camera recording integration", + "data": { + "name": "Integration Name", + "camera_entity": "Camera to record", + "save_path": "Save path (relative to media)", + "filename_template": "Filename format", + "max_duration": "Maximum recording duration (seconds)", + "prebuffer": "Prebuffer (seconds, 0 = disabled)", + "motion_sensors": "Motion sensors", + "motion_filter": "Motion detection filter (seconds, 0 = no filter)", + "off_delay": "Delay after motion stops (seconds, 0 = no delay)", + "retention_days": "Keep recordings (days, 0 = never delete)", + "force_stop_sensor": "Force stop sensor (binary_sensor, switch, input_boolean)", + "force_stop_state": "Stop state value", + "log_level": "Log level" + }, + "data_description": { + "name": "Name that will be displayed in the integration", + "camera_entity": "Select a camera from the list of available", + "save_path": "Folder for saving recordings relative to /media. Variables are supported, e.g. camera_name", + "filename_template": "Select date and time format for recording filenames. All formats include seconds to avoid file overwriting when multiple triggers occur in the same minute", + "max_duration": "Maximum time of one recording (10-3600 seconds). If motion does not stop, recording will stop by timeout", + "prebuffer": "How many seconds before motion detection to include in recording. Works only if stream is already active", + "motion_sensors": "You can select multiple sensors. Recording will start when any of them triggers", + "motion_filter": "Delay before starting recording. If motion stops earlier — recording will not start (false trigger protection)", + "off_delay": "How many seconds to wait after motion stops before stopping recording. If motion returns — timer resets", + "retention_days": "Automatically delete recordings older than specified days. 0 = never delete. Cleanup runs daily at 03:00", + "force_stop_sensor": "Optional. Entity that will immediately stop recording when it reaches the specified state", + "force_stop_state": "State value of the force stop sensor (usually 'off' or 'on')", + "log_level": "Log detail level. DEBUG — for debugging, INFO — normal mode" + } + } + }, + "abort": { + "single_instance_allowed": "Only one configuration per camera is allowed" + } + }, + "options": { + "step": { + "init": { + "title": "Motion Recorder Settings", + "description": "Change recording parameters", + "data": { + "filename_template": "Filename format", + "max_duration": "Maximum recording duration (seconds)", + "prebuffer": "Prebuffer (seconds, 0 = disabled)", + "motion_filter": "Motion detection filter (seconds, 0 = no filter)", + "off_delay": "Delay after motion stops (seconds, 0 = no delay)", + "retention_days": "Keep recordings (days, 0 = never delete)", + "log_level": "Log level" + }, + "data_description": { + "filename_template": "Select date and time format for recording filenames", + "max_duration": "Maximum time of one recording (10-3600 seconds)", + "prebuffer": "How many seconds before motion detection to include in recording", + "motion_filter": "Delay before starting recording for false trigger protection", + "off_delay": "How many seconds to wait after motion stops before stopping recording", + "retention_days": "Automatically delete recordings older than specified days. 0 = never delete", + "log_level": "Log detail level" + } + } + } + }, + "entity": { + "sensor": { + "motion_recorder_status": { + "name": "Status", + "state": { + "idle": "Idle", + "detecting": "Detecting", + "recording": "Recording", + "delaying": "Delaying", + "finalizing": "Finalizing", + "completed": "Completed", + "error": "Error", + "disabled": "Disabled" + } + } + }, + "switch": { + "motion_recorder_enabled": { + "name": "Recording Enabled" + } + } + } +} \ No newline at end of file diff --git a/custom_components/motion_recorder/translations/ru.json b/custom_components/motion_recorder/translations/ru.json new file mode 100644 index 0000000..f3e3519 --- /dev/null +++ b/custom_components/motion_recorder/translations/ru.json @@ -0,0 +1,91 @@ +{ + "config": { + "step": { + "user": { + "title": "Настройки Motion Recorder", + "description": "Настройка интеграции записи камер по движению", + "data": { + "name": "Имя интеграции", + "camera_entity": "Камера для записи", + "save_path": "Путь сохранения (относительно media)", + "filename_template": "Формат имени файла", + "max_duration": "Максимальная длительность записи (сек)", + "prebuffer": "Предбуфер (сек, 0 = отключено)", + "motion_sensors": "Датчики движения", + "motion_filter": "Фильтр обнаружения движения (сек, 0 = без фильтрации)", + "off_delay": "Задержка после пропадания движения (сек, 0 = без задержки)", + "retention_days": "Хранить записи (дней, 0 = не удалять)", + "force_stop_sensor": "Датчик принудительной остановки (binary_sensor, switch, input_boolean)", + "force_stop_state": "Состояние для остановки", + "log_level": "Уровень логирования" + }, + "data_description": { + "name": "Имя, которое будет отображаться в интеграции", + "camera_entity": "Выберите камеру из списка доступных", + "save_path": "Папка для сохранения записей относительно /media. Поддерживаются переменные, например camera_name", + "filename_template": "Выберите формат даты и времени для имён файлов записей. Все форматы содержат секунды, чтобы избежать перезаписи файлов при нескольких срабатываниях в одну минуту", + "max_duration": "Максимальное время одной записии (10-3600 секунд). Если движение не прекратится, запись остановится по таймауту", + "prebuffer": "Сколько секунд до обнаружения движения включить в запись. Работает только если стрим уже активен", + "motion_sensors": "Можно выбрать несколько датчиков. Запись начнётся при сработке любого из них", + "motion_filter": "Задержка перед началом записи. Если движение пропадёт раньше — запись не начнётся (защита от ложных срабатываний)", + "off_delay": "Сколько секунд ждать после пропадания движения перед остановкой записи. Если движение вернётся — таймер сбросится", + "retention_days": "Автоматически удалять записии старше указанного количества дней. 0 = не удалять никогда. Очистка выполняется ежедневно в 3:00", + "force_stop_sensor": "Необязательно. Сущность, при переходе в указанное состояние запись немедленно остановится", + "force_stop_state": "Значение состояния датчика принудительной остановки (обычно 'off' или 'on')", + "log_level": "Уровень детализации логов. DEBUG — для отладки, INFO — обычный режим" + } + } + }, + "abort": { + "single_instance_allowed": "Разрешена только одна конфигурация на камеру" + } + }, + "options": { + "step": { + "init": { + "title": "Настройки Motion Recorder", + "description": "Изменение параметров записи", + "data": { + "filename_template": "Формат имени файла", + "max_duration": "Максимальная длительность записи (сек)", + "prebuffer": "Предбуфер (сек, 0 = отключено)", + "motion_filter": "Фильтр обнаружения движения (сек, 0 = без фильтрации)", + "off_delay": "Задержка после пропадания движения (сек, 0 = без задержки)", + "retention_days": "Хранить записии (дней, 0 = не удалять)", + "log_level": "Уровень логирования" + }, + "data_description": { + "filename_template": "Выберите формат даты и времени для имён файлов записей", + "max_duration": "Максимальное время одной записии (10-3600 секунд)", + "prebuffer": "Сколько секунд до обнаружения движения включить в запись", + "motion_filter": "Задержка перед началом записии для защиты от ложных срабатываний", + "off_delay": "Сколько секунд ждать после пропадания движения перед остановкой записии", + "retention_days": "Автоматически удалять записии старше указанного количества дней. 0 = не удалять никогда", + "log_level": "Уровень детализации логов" + } + } + } + }, + "entity": { + "sensor": { + "motion_recorder_status": { + "name": "Статус", + "state": { + "idle": "Ожидание", + "detecting": "Обнаружение", + "recording": "Запись", + "delaying": "Задержка", + "finalizing": "Завершение", + "completed": "Завершено", + "error": "Ошибка", + "disabled": "Отключено" + } + } + }, + "switch": { + "motion_recorder_enabled": { + "name": "Запись включена" + } + } + } +} \ No newline at end of file