v1.59.0-rc.1: optimize plans and polish editor feedback
Validate / hacs (push) Failing after 7s
Validate / hassfest (push) Failing after 6s
Validate / frontend (push) Successful in 3m12s
Validate / backend (push) Failing after 8m53s
Validate / smoke (push) Failing after 13m51s

This commit is contained in:
Matysh
2026-08-06 10:14:52 +03:00
parent d2bec266ed
commit e0f6746d7f
43 changed files with 2052 additions and 568 deletions
+13 -8
View File
@@ -63,6 +63,7 @@
"markup.hint_points": "points: {n} · Esc/Ctrl+Z — undo a dot · close the outline by clicking the first one",
"markup.hint_start": "click a grid dot to start the outline",
"tip.lqi": "average zigbee signal:",
"tip.area": "area: {value}",
"info.device_header": "Device on the plan",
"info.model": "Model",
"info.state": "State",
@@ -278,6 +279,7 @@
"decor.w_thick": "Thick",
"decor.fill": "Fill",
"decor.text_title": "Text label",
"decor.object_title": "Edit {kind}",
"decor.text_label": "Text",
"decor.live_group": "Insert HA variable",
"decor.live_entity": "Entity",
@@ -451,17 +453,20 @@
"canvas.far_objects": "{n} object(s) far from the plan",
"canvas.show_far": "Show",
"canvas.home_tip": "The plan is over there — click to fit it",
"gs.grid_group": "Grid",
"gs.grid_hint": "Everything you draw or drag now lands on the grid. Hold Shift to place something between the nodes on purpose.",
"gs.align_all": "Align everything to the grid",
"gs.align_title": "Align everything to the grid",
"gs.align_none": "Everything is already on the grid — nothing to move.",
"gs.grid_group": "Plan maintenance",
"gs.grid_hint": "Updates data models, aligns plan elements to the grid and merges redundant wall fragments. An exact report is shown before anything is stored.",
"gs.align_all": "Optimize plans",
"gs.align_title": "Optimize plans",
"gs.align_none": "All plans already use the current optimized data model.",
"gs.align_count": "{n} of {total} elements will move, by at most {cm} cm.",
"gs.align_where": "The largest shift is in “{s}”.",
"gs.align_turned": "Openings whose angle is corrected: {n}.",
"gs.align_warn": "This rewrites the plan and the device positions in one go. There is no undo: the only way back is to move things by hand. If some elements are deliberately between the nodes, cancel.",
"gs.align_run": "Align",
"gs.align_done": "Aligned to the grid: {n} elements moved",
"gs.optimize_changes": "Model migrations: {m}; plans canonicalized: {c}; merged real-wall fragments: {w}; virtual fragments: {s}.",
"gs.align_warn": "Elements deliberately placed between grid nodes will move. One undo is available after the operation, only until the next plan edit.",
"gs.align_run": "Optimize",
"gs.align_done": "Plans optimized: {n} elements moved, {m} records maintained",
"gs.optimize_undo": "Undo last optimization",
"gs.optimize_undone": "The last optimization was undone",
"decor.furniture": "Furniture",
"furn.title": "Furniture library",
"furn.group_furniture": "Furniture",
+13 -8
View File
@@ -63,6 +63,7 @@
"markup.hint_points": "точек: {n} · Esc/Ctrl+Z — убрать точку · замкните контур кликом по первой",
"markup.hint_start": "кликните точку сетки, чтобы начать контур",
"tip.lqi": "средний сигнал zigbee:",
"tip.area": "площадь: {value}",
"info.device_header": "Устройство на плане",
"info.model": "Модель",
"info.state": "Состояние",
@@ -278,6 +279,7 @@
"decor.w_thick": "Толстая",
"decor.fill": "Залить",
"decor.text_title": "Надпись",
"decor.object_title": "Редактирование: {kind}",
"decor.text_label": "Текст",
"decor.live_group": "Вставить переменную HA",
"decor.live_entity": "Сущность",
@@ -451,17 +453,20 @@
"canvas.far_objects": "Объектов далеко от плана: {n}",
"canvas.show_far": "Показать",
"canvas.home_tip": "План там — нажмите, чтобы вписать",
"gs.grid_group": "Сетка",
"gs.grid_hint": "Всё, что вы рисуете и перетаскиваете, ложится строго на сетку. Shift — временно поставить элемент между узлами.",
"gs.align_all": "Выровнять всё по сетке",
"gs.align_title": "Выровнять всё по сетке",
"gs.align_none": "Всё уже на сетке — двигать нечего.",
"gs.grid_group": "Обслуживание планов",
"gs.grid_hint": "Обновляет модели данных, выравнивает элементы по сетке и объединяет лишние фрагменты стен. Перед записью будет показан точный отчёт.",
"gs.align_all": "Оптимизировать планы",
"gs.align_title": "Оптимизировать планы",
"gs.align_none": "Все планы уже используют актуальную и оптимальную модель данных.",
"gs.align_count": "Сдвинется элементов: {n} из {total}, максимум на {cm} см.",
"gs.align_where": "Наибольший сдвиг — в пространстве «{s}».",
"gs.align_turned": "Проёмов с исправлением угла: {n}.",
"gs.align_warn": "Действие разом перезапишет план и позиции устройств. Отмены нет: вернуть можно только руками. Если какие-то элементы стоят между узлами намеренно — отмените.",
"gs.align_run": "Выровнять",
"gs.align_done": "Выровнено по сетке: сдвинуто элементов — {n}",
"gs.optimize_changes": "Миграций модели: {m}; канонизировано планов: {c}; объединено отрезков реальных стен: {w}; виртуальных: {s}.",
"gs.align_warn": "Элементы, намеренно поставленные между узлами, будут сдвинуты. После операции доступна одна отмена — только до следующего изменения плана.",
"gs.align_run": "Оптимизировать",
"gs.align_done": "Планы оптимизированы: сдвинуто элементов — {n}, обслужено записей — {m}",
"gs.optimize_undo": "Отменить последнюю оптимизацию",
"gs.optimize_undone": "Последняя оптимизация отменена",
"decor.furniture": "Мебель",
"furn.title": "Библиотека мебели",
"furn.group_furniture": "Мебель",