Add EntitySelect/IconSelect UI improvements across modals
- Portal IconSelect popups to document.body with position:fixed to prevent clipping by modal overflow-y:auto - Replace custom scene selectors in automation editor with EntitySelect command-palette pickers (main scene + fallback scene) - Add IconSelect grid for automation deactivation mode (none/revert/fallback) - Add IconSelect grid for automation condition type and match type - Replace mapped zone source dropdowns with EntitySelect pickers - Replace scene target selector with EntityPalette.pick() pattern - Remove effect palette preview bar from CSS editor - Remove sensitivity badge from audio color strip source cards - Clean up unused scene-selector CSS and scene-target-add-row CSS - Add locale keys for all new UI elements across en/ru/zh Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -624,10 +624,13 @@
|
||||
"automations.conditions.add": "Добавить условие",
|
||||
"automations.conditions.empty": "Нет условий — автоматизация всегда активна когда включена",
|
||||
"automations.condition.always": "Всегда",
|
||||
"automations.condition.always.desc": "Всегда активно",
|
||||
"automations.condition.always.hint": "Автоматизация активируется сразу при включении и остаётся активной.",
|
||||
"automations.condition.startup": "Автозапуск",
|
||||
"automations.condition.startup.desc": "При запуске сервера",
|
||||
"automations.condition.startup.hint": "Активируется при запуске сервера и остаётся активной пока включена.",
|
||||
"automations.condition.application": "Приложение",
|
||||
"automations.condition.application.desc": "Приложение запущено",
|
||||
"automations.condition.application.apps": "Приложения:",
|
||||
"automations.condition.application.apps.hint": "Имена процессов, по одному на строку (например firefox.exe)",
|
||||
"automations.condition.application.browse": "Обзор",
|
||||
@@ -636,23 +639,31 @@
|
||||
"automations.condition.application.match_type": "Тип соответствия:",
|
||||
"automations.condition.application.match_type.hint": "Как определять наличие приложения",
|
||||
"automations.condition.application.match_type.running": "Запущено",
|
||||
"automations.condition.application.match_type.running.desc": "Процесс активен",
|
||||
"automations.condition.application.match_type.topmost": "На переднем плане",
|
||||
"automations.condition.application.match_type.topmost_fullscreen": "На переднем плане + Полный экран",
|
||||
"automations.condition.application.match_type.topmost.desc": "Окно в фокусе",
|
||||
"automations.condition.application.match_type.topmost_fullscreen": "Передний план + ПЭ",
|
||||
"automations.condition.application.match_type.topmost_fullscreen.desc": "В фокусе + полный экран",
|
||||
"automations.condition.application.match_type.fullscreen": "Полный экран",
|
||||
"automations.condition.application.match_type.fullscreen.desc": "Любое полноэкранное",
|
||||
"automations.condition.time_of_day": "Время суток",
|
||||
"automations.condition.time_of_day.desc": "Диапазон времени",
|
||||
"automations.condition.time_of_day.start_time": "Время начала:",
|
||||
"automations.condition.time_of_day.end_time": "Время окончания:",
|
||||
"automations.condition.time_of_day.overnight_hint": "Для ночных диапазонов (например 22:00–06:00) укажите время начала позже времени окончания.",
|
||||
"automations.condition.system_idle": "Бездействие системы",
|
||||
"automations.condition.system_idle.desc": "Бездействие/активность",
|
||||
"automations.condition.system_idle.idle_minutes": "Тайм-аут бездействия (минуты):",
|
||||
"automations.condition.system_idle.mode": "Режим срабатывания:",
|
||||
"automations.condition.system_idle.when_idle": "При бездействии",
|
||||
"automations.condition.system_idle.when_active": "При активности",
|
||||
"automations.condition.display_state": "Состояние дисплея",
|
||||
"automations.condition.display_state.desc": "Монитор вкл/выкл",
|
||||
"automations.condition.display_state.state": "Состояние монитора:",
|
||||
"automations.condition.display_state.on": "Включён",
|
||||
"automations.condition.display_state.off": "Выключен (спящий режим)",
|
||||
"automations.condition.mqtt": "MQTT",
|
||||
"automations.condition.mqtt.desc": "MQTT сообщение",
|
||||
"automations.condition.mqtt.topic": "Топик:",
|
||||
"automations.condition.mqtt.payload": "Значение:",
|
||||
"automations.condition.mqtt.match_mode": "Режим сравнения:",
|
||||
@@ -661,6 +672,7 @@
|
||||
"automations.condition.mqtt.match_mode.regex": "Регулярное выражение",
|
||||
"automations.condition.mqtt.hint": "Активировать при получении совпадающего значения по MQTT топику",
|
||||
"automations.condition.webhook": "Вебхук",
|
||||
"automations.condition.webhook.desc": "HTTP вызов",
|
||||
"automations.condition.webhook.hint": "Активировать через HTTP-запрос от внешних сервисов (Home Assistant, IFTTT, curl и т.д.)",
|
||||
"automations.condition.webhook.url": "URL вебхука:",
|
||||
"automations.condition.webhook.copy": "Скопировать",
|
||||
@@ -673,9 +685,12 @@
|
||||
"automations.scene.none_available": "Нет доступных сцен",
|
||||
"automations.deactivation_mode": "Деактивация:",
|
||||
"automations.deactivation_mode.hint": "Что происходит, когда условия перестают выполняться",
|
||||
"automations.deactivation_mode.none": "Ничего — оставить текущее состояние",
|
||||
"automations.deactivation_mode.revert": "Вернуть предыдущее состояние",
|
||||
"automations.deactivation_mode.fallback_scene": "Активировать резервную сцену",
|
||||
"automations.deactivation_mode.none": "Ничего",
|
||||
"automations.deactivation_mode.none.desc": "Оставить текущее состояние",
|
||||
"automations.deactivation_mode.revert": "Откатить",
|
||||
"automations.deactivation_mode.revert.desc": "Вернуть предыдущее состояние",
|
||||
"automations.deactivation_mode.fallback_scene": "Резервная",
|
||||
"automations.deactivation_mode.fallback_scene.desc": "Активировать резервную сцену",
|
||||
"automations.deactivation_scene": "Резервная сцена:",
|
||||
"automations.deactivation_scene.hint": "Сцена для активации при деактивации автоматизации",
|
||||
"automations.status.active": "Активна",
|
||||
@@ -702,6 +717,8 @@
|
||||
"scenes.description.hint": "Необязательное описание назначения этой сцены",
|
||||
"scenes.targets": "Цели:",
|
||||
"scenes.targets.hint": "Выберите какие цели включить в снимок сцены",
|
||||
"scenes.targets.add": "Добавить цель",
|
||||
"scenes.targets.search_placeholder": "Поиск целей...",
|
||||
"scenes.capture": "Захват",
|
||||
"scenes.activate": "Активировать сцену",
|
||||
"scenes.recapture": "Перезахватить текущее состояние",
|
||||
@@ -747,6 +764,9 @@
|
||||
"color_strip.interpolation.average": "Среднее",
|
||||
"color_strip.interpolation.median": "Медиана",
|
||||
"color_strip.interpolation.dominant": "Доминирующий",
|
||||
"color_strip.interpolation.average.desc": "Смешивает все пиксели в усреднённый цвет",
|
||||
"color_strip.interpolation.median.desc": "Берёт средний цвет, игнорируя выбросы",
|
||||
"color_strip.interpolation.dominant.desc": "Использует самый частый цвет в выборке",
|
||||
"color_strip.smoothing": "Сглаживание:",
|
||||
"color_strip.smoothing.hint": "Временное смешивание кадров (0=без смешивания, 1=полное). Уменьшает мерцание.",
|
||||
"color_strip.frame_interpolation": "Интерполяция кадров:",
|
||||
@@ -773,6 +793,8 @@
|
||||
"color_strip.type.hint": "Источник изображения получает цвета светодиодов из захвата экрана. Статический цвет заполняет все светодиоды одним постоянным цветом. Градиент распределяет цветовой градиент по всем светодиодам. Смена цвета плавно циклически переключается между заданными цветами. Композит накладывает несколько источников как смешанные слои. Аудиореактив управляет LED от аудиосигнала в реальном времени. API-ввод принимает массивы цветов LED от внешних клиентов через REST или WebSocket.",
|
||||
"color_strip.type.picture": "Источник изображения",
|
||||
"color_strip.type.picture.desc": "Цвета из захвата экрана",
|
||||
"color_strip.type.picture_advanced": "Мультимонитор",
|
||||
"color_strip.type.picture_advanced.desc": "Калибровка линиями по нескольким мониторам",
|
||||
"color_strip.type.static": "Статический цвет",
|
||||
"color_strip.type.static.desc": "Заливка одним цветом",
|
||||
"color_strip.type.gradient": "Градиент",
|
||||
@@ -910,6 +932,7 @@
|
||||
"color_strip.mapped.zone_end": "Конец LED",
|
||||
"color_strip.mapped.zone_reverse": "Реверс",
|
||||
"color_strip.mapped.zones_count": "зон",
|
||||
"color_strip.mapped.select_source": "Поиск источников...",
|
||||
"color_strip.mapped.error.no_source": "Для каждой зоны должен быть выбран источник",
|
||||
"color_strip.audio.visualization": "Визуализация:",
|
||||
"color_strip.audio.visualization.hint": "Способ отображения аудиоданных на LED.",
|
||||
@@ -1197,6 +1220,29 @@
|
||||
"calibration.error.save_failed": "Не удалось сохранить калибровку",
|
||||
"calibration.error.led_count_mismatch": "Общее количество LED должно совпадать с количеством LED устройства",
|
||||
"calibration.error.led_count_exceeded": "Калиброванных LED больше, чем общее количество LED",
|
||||
"calibration.mode.simple": "Простой",
|
||||
"calibration.mode.advanced": "Расширенный",
|
||||
"calibration.switch_to_advanced": "Расширенный режим",
|
||||
"calibration.advanced.title": "Расширенная калибровка",
|
||||
"calibration.advanced.switch_to_simple": "Простой режим",
|
||||
"calibration.advanced.lines_title": "Линии",
|
||||
"calibration.advanced.canvas_hint": "Перетаскивайте мониторы. Нажимайте на грани для выбора линий. Прокрутка — масштаб, перетаскивание пустого места — сдвиг.",
|
||||
"calibration.advanced.reset_view": "Сбросить вид",
|
||||
"calibration.advanced.line_properties": "Свойства линии",
|
||||
"calibration.advanced.picture_source": "Источник:",
|
||||
"calibration.advanced.picture_source.hint": "Источник изображения (монитор), с которого эта линия снимает данные",
|
||||
"calibration.advanced.edge": "Грань:",
|
||||
"calibration.advanced.edge.hint": "С какой грани экрана снимать пиксели",
|
||||
"calibration.advanced.led_count": "Светодиоды:",
|
||||
"calibration.advanced.led_count.hint": "Количество светодиодов на этой линии",
|
||||
"calibration.advanced.span_start": "Начало:",
|
||||
"calibration.advanced.span_start.hint": "Откуда начинается захват вдоль грани (0 = начало, 1 = конец). Позволяет покрыть только часть грани.",
|
||||
"calibration.advanced.span_end": "Конец:",
|
||||
"calibration.advanced.span_end.hint": "Где заканчивается захват вдоль грани (0 = начало, 1 = конец). Вместе с «Начало» определяет активный участок.",
|
||||
"calibration.advanced.border_width": "Глубина (пкс):",
|
||||
"calibration.advanced.border_width.hint": "Сколько пикселей вглубь от края захватывать. Большие значения берут больше внутренней части экрана.",
|
||||
"calibration.advanced.reverse": "Реверс",
|
||||
"calibration.advanced.no_lines_warning": "Добавьте хотя бы одну линию",
|
||||
"dashboard.error.automation_toggle_failed": "Не удалось переключить автоматизацию",
|
||||
"dashboard.error.start_failed": "Не удалось запустить обработку",
|
||||
"dashboard.error.stop_failed": "Не удалось остановить обработку",
|
||||
|
||||
Reference in New Issue
Block a user