Files
houseplan-card/src/i18n/en.json
T
Claudeandclaude[bot] 2e26116bbb Print the plan a third larger and drop the numbered dimension column
The A4 export spent a whole step of the scale series on the "Internal
dimensions" column beside the drawing: a ten-metre house printed 1:100
landscape on a quarter of the sheet while the same plan fits 1:75
upright. The column bought little — "R1" takes as much room beside the
wall as "2.31m" does — and it was read separately from the drawing.

The column is gone. A value with no free lane beside its own wall is
simply not printed; the rectangular rule became the general one. In-plan
type drops to three quarters of its former size (dimensions 5.25 pt,
areas 6 pt, names 6.75/5.25 pt) so the larger drawing is not crowded by
labels that do not scale with it.

On the owner's file the sheet goes from 1:100 landscape to 1:75 upright
and prints 37 values inside the plan against 35 before; the cost is
about seven short values (0.41-1.13 m) that no longer appear anywhere.

Issue: #530
User-Visible: yes
2026-09-11 10:40:05 +00:00

1365 lines
84 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"editor.context_actions": "Actions: {object}",
"editor.tool_options": "Tool options: {tool}",
"editor.palette": "Palette: {tool}",
"editor.open_group": "Tool group: {group}",
"editor.group_active": "{group} — active: {item}",
"editor.disabled_action": "{action} is unavailable: {reason}",
"editor.loading": "Loading editor…",
"editor.loading_aria": "The plan editor is loading",
"editor.load_failed": "Could not load the editor.",
"editor.refresh_advice": "Refresh the page and try again.",
"editor.retry_advice": "Check your connection and press again.",
"version_mismatch.title": "House Plan versions do not match",
"version_mismatch.body": "If Home Assistant is still restarting, let it finish, then reload this page.",
"version_mismatch.frontend": "Card",
"version_mismatch.backend": "Integration",
"version_mismatch.reload": "Reload page",
"color_picker.title": "Color picker",
"color_picker.hue": "Hue",
"color_picker.saturation": "Saturation",
"color_picker.value": "Brightness",
"color_picker.hex": "Hex color",
"color_picker.invalid_hex": "Enter a 3- or 6-digit hex color",
"color_picker.confirm": "OK",
"btn.properties": "Properties",
"btn.keep_as_walls": "Keep as walls",
"btn.delete_room_keep_walls": "Delete room, keep walls",
"btn.delete_room_with_walls": "Delete room and walls",
"title.markup_select": "Select and edit walls and columns",
"title.markup_column": "Column: click a grid point to place a square column",
"markup.partition": "Partition",
"markup.column": "Column",
"markup.hint_column": "click a grid point to place a square column",
"history.wall_segment": "Add wall segment",
"history.column_add": "Add column",
"history.physical_edit": "Change physical object",
"history.physical_delete": "Delete physical object",
"history.physical_move": "Move physical object",
"history.wall_face_batch": "Create rooms from walls",
"toast.column_duplicate": "A column with the same centre and outer size already exists",
"physical.partition_properties": "Partition properties",
"physical.column_properties": "Column properties",
"physical.shape": "Shape",
"physical.square": "Square",
"physical.circle": "Circle",
"physical.diameter": "Diameter",
"physical.side": "Side",
"physical.rotation": "Rotation angle",
"physical.length": "Length",
"physical.allowed_range": "Allowed: {min}–{max} {unit}",
"physical.column_size_title": "Outer side of the square column placed by the click (1–150 cm).",
"card.title": "House plan",
"count.devices": "{n} dev.",
"empty.no_spaces": "No spaces yet.",
"empty.add_first": "Add the first space and upload a floor plan.",
"empty.read_only": "No spaces are configured. Ask an administrator to add one.",
"empty.install": "Install the House Plan integration and add it in \"Devices & services\".",
"btn.add_space": "Add space",
"btn.cancel": "Cancel",
"btn.save": "Save",
"btn.close": "Close",
"btn.delete": "Delete",
"btn.copy": "Copy",
"btn.edit": "Edit",
"btn.open_in_ha": "Open in HA",
"btn.reset": "Reset",
"btn.attach": "Attach…",
"btn.upload": "Upload…",
"btn.replace": "Replace…",
"title.zoom_in": "Zoom in",
"title.zoom_out": "Zoom out",
"title.zoom_fit": "Fit all",
"title.configure_space": "Configure space",
"title.add_space": "Add space",
"title.markup_add": "Walls: draw a continuous chain; each accepted segment is saved independently. Shift locks to 45°",
"title.markup_merge": "Merge: click one room, then the neighbour it shares a wall with",
"title.markup_split": "Split a room: click the room, then two points on its walls",
"title.markup_delroom": "Delete room: click inside a room and confirm",
"title.need_plan": "Upload a floor-plan image",
"markup.add": "Walls",
"markup.merge": "Merge",
"markup.split": "Split",
"markup.resize": "Resize",
"title.markup_resize": "Resize rooms: drag an available horizontal or vertical wall handle",
"markup.hint_resize": "drag an available wall handle · the wall stops at the first unsafe position · Esc cancels · Ctrl+Z — undo",
"resize.disabled.diagonal": "This wall is angled; Resize supports only horizontal and vertical walls",
"resize.disabled.side-angle": "An adjoining wall is angled; Resize requires both adjoining walls to meet this wall at right angles",
"resize.disabled.duplicate-physical-wall": "A separate partition or column overlaps this wall; remove or move it before resizing",
"resize.disabled.partial-shared": "A neighbouring room uses only part of this wall, so it cannot be moved safely as one shared wall",
"resize.disabled.unequal-shared": "The neighbouring room uses different endpoints or wall length, so the walls cannot move together safely",
"resize.disabled.multiple-rooms": "Moving this wall would affect more than two rooms",
"resize.disabled.thickness-conflict": "The wall thickness cannot be preserved safely",
"resize.disabled.opening-conflict": "An opening on this wall cannot be moved safely",
"resize.disabled.invalid-geometry": "This wall cannot be resized without changing the plan structure",
"resize.limit_stopped": "Wall stopped: the next step would break a junction limit",
"resize.commit_failed": "Resize was cancelled because the final plan did not pass the geometry check",
"resize.preview_failed": "Resize stopped at the last safe position because the plan geometry could not be preserved",
"markup.opening": "Opening",
"markup.delete_room": "Delete room",
"history.undo": "Undo",
"history.redo": "Redo",
"history.undo_named": "Undo: {name} (Ctrl+Z)",
"history.redo_named": "Redo: {name} (Ctrl+Shift+Z / Ctrl+Y)",
"history.undo_empty": "Nothing to undo",
"history.redo_empty": "Nothing to redo",
"history.undone": "Undone: {name}",
"history.redone": "Redone: {name}",
"history.add_room": "Create room",
"history.split_room": "Split room",
"history.merge_rooms": "Merge rooms",
"history.resize_room": "Resize room",
"history.wall_thickness": "Change wall thickness",
"history.add_opening": "Add door or window opening",
"history.edit_opening": "Edit opening",
"history.move_opening": "Move opening",
"history.delete_opening": "Delete opening",
"history.delete_room_keep_walls": "Delete room, keep walls",
"history.delete_room_with_walls": "Delete room and walls",
"history.decor_add": "Add decor object",
"history.decor_edit": "Edit decor object",
"history.decor_move": "Move decor object",
"history.decor_transform": "Transform decor object",
"history.decor_delete": "Delete decor object",
"history.backdrop_transform": "Transform plan backdrop",
"history.device_move": "Move {name}",
"history.device_stale": "Device position history is no longer applicable and was cleared",
"opening.new": "New opening",
"opening.edit": "Opening",
"opening.door": "Door",
"opening.window": "Window",
"opening.gate": "Gate",
"opening.passage": "Open passage",
"opening.passage_binding_warning": "Saving will remove the open/close sensor and lock.",
"opening.invalid_passage_fields": "The open passage on plan “{room}” has unsupported settings: {fields}.",
"opening.type_label": "Type",
"opening.length_label": "Length, cm",
"opening.contact_label": "Open/close sensor",
"opening.lock_label": "Lock",
"opening.none": "— none —",
"opening.search_ph": "Search: name or entity id…",
"opening.invert": "Invert open/closed",
"opening.flip_h": "Hinge on the other jamb",
"opening.flip_v": "Opens to the other side",
"opening.open": "Open",
"opening.closed": "Closed",
"opening.locked": "Locked",
"opening.unlocked": "Unlocked",
"opening.state_unknown": "unavailable",
"opening.no_entities": "No sensors bound — a static symbol on the plan.",
"toast.opening_no_wall": "Click next to a room wall or independent wall",
"opening.host_partition": "Independent wall",
"opening.partition_orphan": "The independent wall for this opening no longer exists",
"opening.partition_jamb_margin": "Leave at least {distance} between the opening and the end of the wall",
"opening.rebind_partition": "Attach to another independent wall",
"confirm.delete_partition_openings_title": "Delete wall and openings?",
"confirm.delete_partition_openings_body": "This wall contains {count} opening(s). They will be deleted together.",
"confirm.delete_partition_openings_item": "• {type}, {length}",
"markup.hint_points": "points: {n} · Shift — 45° steps · Esc — finish chain · Ctrl+Z — undo a point · closing an area offers a room",
"markup.hint_start": "click a grid dot to start a wall chain",
"tip.lqi": "average zigbee signal:",
"tip.area": "area: {value}",
"info.device_header": "Device on the plan",
"info.model": "Model",
"info.state": "State",
"info.link": "Link",
"info.manuals": "Manuals",
"info.none": "No additional information",
"marker.new_device": "New device",
"marker.name_label": "Name (shown on the plan)",
"marker.name_ph": "Name",
"marker.binding_label": "Bind to an HA device",
"marker.binding_disabled": "disabled in Home Assistant",
"marker.virtual_option": "Virtual device (no binding)",
"marker.search_ph": "Search device / group…",
"marker.nothing_found": "nothing found",
"marker.room_label": "Room",
"marker.room_override": " (override placement)",
"marker.room_choose": "— select a room —",
"marker.room_auto": "— by device area (auto) —",
"marker.icon_label": "Icon",
"marker.icon_ph": "mdi:… (empty = auto)",
"marker.display_label": "Display",
"display.badge": "Icon + state",
"display.icon_ripple": "Icon + state and activity",
"display.static_icon": "Always static icon",
"marker.display_hint_badge": "The icon and dynamic plate show device state without the ordinary activity pulse. Red alarms remain visible.",
"marker.display_hint_icon_ripple": "The icon, dynamic plate and pulse show a short pulse for events and a continuous pulse for work, motion or presence. Red alarms have separate priority.",
"marker.display_hint_value": "A selected or automatically resolved Home Assistant value replaces the icon while the plate continues to show state. Red alarms remain visible.",
"marker.display_hint_static_icon": "The theme-aware shell and icon always stay the same. State, activity, unavailability and alarms do not change the face.",
"marker.static_alarm_warning": "This device can report alarms. Static display hides the marker's visual alarm indication.",
"marker.preview.title": "Display preview",
"marker.preview.actual": "Now",
"marker.preview.example": "Example",
"marker.preview.integration": "Provided by",
"marker.preview.source": "Display source",
"marker.preview.current_state": "Current state",
"marker.preview.result": "On the plan",
"marker.preview.details": "Source details",
"marker.preview.select_source": "Choose a Home Assistant device or entity to see its actual display.",
"marker.preview.unknown_provider": "Unknown integration",
"marker.preview.virtual_provider": "House Plan · virtual device",
"marker.preview.no_source": "No active source",
"marker.preview.no_state": "No current state",
"marker.preview.mixed_states": "Several different states",
"marker.preview.multiple_sources": "{n} sources",
"marker.preview.more_sources": "+{n} more",
"marker.preview.scaled": "The preview is scaled to {n}% to fit. The saved size is unchanged.",
"marker.preview.demo_short": "Show short activity",
"marker.preview.demo_continuous": "Show continuous activity",
"marker.preview.stop_continuous": "Stop continuous activity",
"marker.preview.demo_short_notice": "Short activity example; the actual device state is unchanged.",
"marker.preview.demo_continuous_notice": "Continuous activity example; the actual device state is unchanged.",
"marker.preview.demo_already_visible": "The current state already shows a real activity or alarm effect.",
"marker.preview.reduced_motion": "System reduced-motion is enabled, so ordinary activity is shown as a dot.",
"marker.preview.reason.neutral": "Neutral dark plate",
"marker.preview.reason.working": "Yellow plate: the device is working now",
"marker.preview.reason.working_activity": "Yellow plate and activity effect: the device is working now",
"marker.preview.reason.open": "Orange plate: physically open or unlocked",
"marker.preview.reason.cover_icon_state": "Neutral plate; the cover entity controls the displayed state and icon",
"marker.preview.reason.presence": "Activity effect while presence is detected",
"marker.preview.reason.event": "Short activity effect after a detected event",
"marker.preview.reason.transition": "Activity effect while the device is moving or changing state",
"marker.preview.reason.media_neutral": "Media devices stay on a neutral dark plate while available",
"marker.preview.reason.unavailable": "Subdued neutral plate: unavailable or off",
"marker.preview.reason.alarm": "Red alarm plate; alarm indication is always shown",
"marker.preview.reason.live_states_disabled": "Live-state styling is disabled for this card",
"marker.preview.reason.value_no_state": "No usable state value; the icon is shown instead",
"marker.preview.reason.value_ambiguous_sources": "Several possible value sources; the icon is shown instead",
"marker.preview.reason.value_non_scalar": "The source did not return a simple value; the icon is shown instead",
"marker.preview.reason.value_virtual": "A virtual device has no Home Assistant value; the icon is shown instead",
"marker.preview.reason.vacuum_live_plan_only": "Live vacuum position and trail are available only on the full plan",
"marker.preview.reason.hidden_design_preview": "The device is hidden on the plan; this design preview remains visible",
"marker.preview.reason.composite_power_source": "State comes from the device Power entity; auxiliary switches are ignored",
"marker.preview.reason.activity_display_disabled": "The selected display mode does not show ordinary activity effects",
"marker.preview.reason.ha_disabled": "The Home Assistant binding is disabled and will be hidden on the plan",
"marker.preview.reason.orphaned": "The saved Home Assistant binding can no longer be found",
"marker.preview.reason.static_icon": "Static mode: device state does not change the icon",
"marker.activity_color": "Activity pulse color",
"marker.ripple_size": "Activity pulse size",
"marker.activity_alarm_note": "Color and size affect ordinary activity only and do not change red alarms.",
"marker.pulse_a11y_alarm": "Alarm",
"marker.pulse_a11y_event": "Recent event",
"marker.pulse_a11y_presence": "Presence detected",
"marker.pulse_a11y_transition": "Changing state",
"marker.pulse_a11y_running": "Working",
"marker.state_a11y_neutral": "Default state",
"marker.state_a11y_working": "Working",
"marker.state_a11y_open": "Open",
"marker.state_a11y_locked": "Locked",
"marker.state_a11y_unlocked": "Unlocked",
"marker.state_a11y_alarm": "Alarm",
"marker.state_a11y_unavailable": "Unavailable",
"marker.lqi_a11y_low": "LQI {value}, low signal",
"marker.lqi_a11y_mid": "LQI {value}, medium signal",
"marker.lqi_a11y_high": "LQI {value}, high signal",
"marker.size_label": "Icon size / rotation",
"marker.angle_label": "Rotate",
"marker.model_label": "Model",
"marker.model_ph": "e.g. Aqara T&H",
"marker.link_label": "Link",
"marker.desc_label": "Description",
"marker.desc_ph": "Notes, specs…",
"marker.manuals_label": "Manuals (PDF etc.)",
"marker.sub_device": "device",
"marker.sub_z2m_group": " · Z2M group",
"marker.sub_group": "group",
"marker.sub_helper": "helper",
"space.new": "New space",
"space.copy_title": "Copy space",
"space.copy_name": "New space name",
"space.copy_fallback": "Space",
"space.copy_create": "Create copy",
"space.copy_optimize_title": "Optimize before copying?",
"space.copy_optimize_body": "Before creating “{name}”, House Plan must optimize the entire plan, including other spaces. Continue?",
"space.copy_optimize_confirm": "Optimize and copy",
"space.copy_error_changed": "The plan changed while confirmation was open. Review it and try again.",
"space.copy_error_source_missing": "The source space no longer exists. Reopen its settings and try again.",
"space.copy_error_source_invalid": "House Plan could not validate every wall in this space. Fix the source space and try again.",
"space.copy_error_spaces_limit": "House Plan already has the maximum number of spaces.",
"space.copy_error_partitions_limit": "This space has too many walls to copy.",
"space.copy_error_openings_limit": "This space has too many openings to copy.",
"space.copy_error_decor_limit": "This space has too many background objects to copy.",
"space.copy_error_columns_limit": "This space has too many columns to copy.",
"space.copy_error_opening_host": "One of the openings is no longer attached to a wall. Fix or delete it before copying.",
"space.copy_error_geometry": "The copy would create unsafe wall geometry. Fix the source space and try again.",
"space.copy_error_optimize_geometry": "Copy stopped because optimizing the entire plan is unsafe for one of the spaces.",
"space.header": "Space",
"space.title_label": "Title",
"space.title_ph": "e.g. Garage",
"space.plan_label": "Floor plan (background)",
"space.no_plan": "no plan image",
"space.plan_alt": "plan",
"room.new": "New room",
"room.name_label": "Display name",
"room.name_ph": "e.g. Terrace",
"room.area_label": "Home Assistant area (unassigned)",
"room.no_area_option": "— no area —",
"room.default_name": "Room",
"device.unnamed": "unnamed",
"device.light_group": "light group",
"device.fallback": "device",
"device.virtual": "virtual device",
"confirm.delete_room_title": "Delete room \"{name}\"?",
"confirm.delete_room_body": "Choose whether the room's exclusive physical walls should remain. Walls shared with another room are always kept.",
"confirm.remove_marker_title": "Delete device from the plan?",
"confirm.remove_marker_body": "The device will disappear completely and stop contributing to plan data. You can add it again later.",
"confirm.erase_decor": "Erase the {kind} object? You can undo this action from the editor history.",
"confirm.delete_space_title": "Delete space?",
"confirm.delete_space_body": "The space, all its rooms and all its plan markup will be deleted.",
"confirm.delete_space_vac_routes": "Robot map assignments will also be removed: {count}.",
"space.delete_blocked": "This space is still used by {n} device(s). Move them to another space or delete them first.",
"toast.pos_save_failed": "Failed to save position: {err}",
"toast.no_entity": "The device has no suitable entity",
"toast.ha_disabled_action": "A Home Assistant object that is disabled cannot be used on the plan.",
"toast.ha_disabled_show_device": "A device disabled in Home Assistant cannot be shown on the plan. Enable it in Home Assistant first.",
"toast.ha_disabled_show_entity": "An entity disabled in Home Assistant cannot be shown on the plan. Enable it in Home Assistant first.",
"toast.ha_disabled_add": "A disabled Home Assistant object cannot be added to the plan. Enable it in Home Assistant first.",
"toast.ha_binding_unverified": "The object status could not be verified through the Home Assistant registry. Display and actions are temporarily unavailable.",
"toast.markup_needs_server": "Markup is available after the config is moved to the server",
"toast.space_order_changed": "Order changed. If any card pins its floor by number, check those panels.",
"toast.conflict": "Config was changed in another window — data refreshed, repeat your last action",
"toast.cfg_save_failed": "Failed to save config: {err}",
"toast.room_overlap": "The outline overlaps room “{name}” — rooms must not overlap",
"toast.contour_cannot_close": "The outline cannot close because it is degenerate or intersects itself",
"toast.merge_not_adjacent": "Only rooms that share a wall can be merged",
"toast.rooms_merged": "Rooms merged into “{name}”",
"toast.split_pick_wall": "Start the cut on the room’s wall",
"toast.split_bad_cut": "The cut must run wall to wall inside the room, without crossing walls or itself",
"merge.header": "Merge rooms",
"merge.hint": "The merged room keeps one name and one area. The other area is released — its devices leave the plan until another room claims it.",
"merge.keep": "Keep",
"merge.no_area": "no area",
"toast.room_saved": "Room saved ({n}). Devices added: {added}. Outline the next one or exit markup.",
"toast.room_saved_no_area": "Room saved ({n}, no area). Outline the next one or exit markup.",
"toast.marker_needs_server": "Device editing is available after the config is moved to the server",
"toast.virtual_name_required": "Enter a name for the virtual device",
"toast.marker_saved": "Device saved",
"toast.marker_removed": "Device deleted from the plan",
"toast.integration_missing": "The House Plan integration is not installed — management unavailable",
"toast.plan_formats": "Supported formats: SVG, PNG, JPG, WebP",
"toast.plan_required": "Upload a floor plan — it is required",
"toast.space_added_onboard": "Space added. Outline the rooms: click grid dots and close the contour.",
"toast.space_added": "Space added",
"toast.space_copied": "Space “{name}” created",
"toast.space_saved": "Space saved",
"toast.space_deleted": "Space deleted",
"toast.delete_failed": "Delete failed: {err}",
"toast.error": "Error: {err}",
"toast.toggle_target_unavailable": "Target “{name}” is unavailable — no action was performed",
"toast.toggle_targets_unavailable": "Targets are unavailable: {names}. No action was performed",
"toast.file_failed": "File \"{name}\" was not uploaded: {err}",
"toast.files_attached": "Files attached: {n}",
"err.unknown": "unknown error",
"err.code": "code {code}",
"err.too_large": "file larger than {mb} MB",
"err.bad_ext": "unsupported type (PDF/image expected)",
"err.unauthorized": "administrator rights required",
"editor.title": "Title",
"editor.default_floor": "Initial space",
"editor.default_floor_missing": "Initial space “{id}” no longer exists. Choose another space.",
"editor.floor": "Fixed space",
"editor.floor_none": "— not fixed —",
"editor.floor_index": "YAML index {index} (preserved)",
"fixed_floor.loading": "Loading the fixed space…",
"fixed_floor.invalid_title": "The fixed space is unavailable",
"fixed_floor.invalid_body": "Check floor in the card configuration. The configured value is: {value}",
"editor.icon_size": "Icon size, % of plan width",
"editor.show_temperature": "Show temperature",
"editor.live_states": "Live states (on/off, open…)",
"editor.light_pools": "Light pools and wall shadows",
"editor.show_signal": "Show zigbee signal (LQI)",
"editor.language": "Interface language",
"editor.lang_auto": "Auto (HA profile)",
"title.icon_rules": "Icon rules: which MDI icon devices get by name",
"rules.title": "Icon rules",
"rules.hint": "Rules are checked top-down against “device name + model” (case-insensitive regex); the first match wins. When nothing matches, the entity device class decides, then the generic chip icon.",
"rules.pattern_ph": "regex, e.g. plug|socket",
"rules.icon_ph": "mdi:power-socket-de",
"rules.add": "Add rule",
"rules.reset": "Reset to defaults",
"rules.test_ph": "Try a device name…",
"rules.invalid": "invalid regex",
"rules.saved": "Icon rules saved",
"btn.up": "Up",
"btn.down": "Down",
"tap.info": "Device card",
"tap.more_info": "HA more-info dialog",
"tap.toggle": "Toggle state",
"marker.tap_label": "Tap action for this device",
"tap.toggle_note": "The resolved state is shown below. Secure devices are never toggled from the plan.",
"import.title": "Create spaces from HA floors",
"import.hint": "Your Home Assistant already knows these floors. Pick the ones to turn into plan spaces — you will upload a floor-plan image for each one next. Rooms are then outlined by hand on the plan.",
"import.start": "Create {n} space(s)",
"import.manual": "Start from scratch",
"import.progress": "Floor {i} of {n}",
"import.done": "Spaces created. Outline the rooms: click grid dots and close the contour.",
"btn.skip": "Skip",
"space.scale_label": "Scale (grid cell size)",
"space.cell_cm.help": "Links the grid to real dimensions: lengths, areas, wall thickness, opening sizes and glow radius depend on it. Changing it after drawing changes the calculated dimensions of the whole space without moving its points on the plan.",
"space.cell_cm.help.aria": "Help: space scale",
"space.scale_unit": "cm per cell",
"space.scale_unit_imperial": "in per cell",
"space.display_section": "Display",
"space.show_borders": "Always show room borders",
"space.zero_wall_style": "Zero-thickness walls",
"space.zero_wall_style.help": "Dashed zero-thickness walls pass Glow and sun rays, while solid ones block them as zero-area barriers. The choice affects every such wall in the space even when its line is hidden in View.",
"space.zero_wall_style.help.aria": "Help: zero-thickness wall style",
"space.zero_wall_dashed": "Dashed",
"space.zero_wall_solid": "Solid",
"space.show_names": "Show room names (drag to move)",
"space.room_color": "Border & name color",
"space.opacity": "Opacity",
"space.fill_label": "Room fill",
"space.fill_mode.help": "“Custom colour” is styling, while “Light”, “Temperature” and “LQI” use current Home Assistant data; Glow is enabled separately.",
"space.fill_mode.help.aria": "Help: room fill mode",
"fill.none": "None",
"fill.lqi": "Zigbee signal",
"fill.light": "Lights",
"fill.custom": "Custom color",
"space.custom_fill": "Fill color",
"space.source_file": "I have a floor-plan image",
"space.source_draw": "No image — I'll outline rooms by hand",
"fill.temp": "Temperature",
"tip.temp_avg": "average temperature:",
"tip.hum_avg": "average humidity:",
"space_card.button": "Open the space plan",
"space_card.not_found": "Space “{id}” not found",
"space_card.loading": "Loading…",
"continuity.restore_plan": "Restoring floor plan…",
"continuity.restore_connection": "Restoring device connection…",
"continuity.retry": "Try again",
"editor.space": "Space",
"editor.framing": "Framing",
"editor.fit_content": "All visible content",
"editor.fit_house": "Tight to house geometry",
"editor.show_button": "Show button",
"editor.button_label": "Button label",
"editor.button_target": "Target dashboard path",
"marker.sub_entity": "entity",
"title.general_settings": "General settings",
"title.export_pdf": "Save as PDF",
"pdf.title": "Save as PDF",
"pdf.dimensions": "Show dimensions and areas",
"pdf.decor": "Show furniture and other decor",
"pdf.room_names": "Show room names",
"pdf.backdrop": "Show backdrop",
"pdf.save": "Save",
"pdf.saving": "Creating…",
"pdf.failed": "Could not create the PDF.",
"pdf.too_large": "The images exceed the 25 MB PDF limit.",
"pdf.asset_failed": "A backdrop or decor image could not be loaded.",
"pdf.scale": "Scale 1:{n}",
"pdf.north": "North",
"gs.title": "General settings",
"gs.light_group": "Fill: lights",
"gs.light_on": "Lights on",
"gs.light_off": "All lights off",
"gs.temp_group": "Fill: temperature",
"gs.temp_cold": "Cold",
"gs.temp_ok": "Comfortable",
"gs.temp_hot": "Hot",
"gs.lqi_group": "Fill: zigbee signal",
"gs.lqi_low": "Weak signal",
"gs.lqi_high": "Strong signal",
"gs.reset": "Reset to defaults",
"gs.saved": "General settings saved",
"gs.radar_show_live": "Show live presence on the plan",
"gs.radar_show_live_hint": "Hides or shows all live radar targets. This does not start or stop observation recording.",
"radar.title": "Presence on the plan",
"radar.help": "Connect this marker to exact Home Assistant radar entities, place the sensor and choose its coordinate profile. Live positions are clipped to the selected room.",
"radar.help.aria": "Help: presence radar settings",
"radar.enabled": "Use this presence radar",
"radar.show_live": "Show live targets",
"radar.configure": "Configure radar",
"radar.configure_on_plan": "Configure on plan",
"radar.change_installation": "Change installation",
"radar.no_contour": "This room has no boundary. Radar points will not be clipped.",
"radar.discard_setup_title": "Discard radar setup?",
"radar.discard_setup": "The unsaved radar setup will be lost.",
"radar.step_place_mount": "Mark the physical sensor position",
"radar.step_place_heading": "Mark a point straight ahead of the sensor",
"radar.step_reference": "Mark reference position {n}, then start measurement",
"radar.step_check_reference": "Mark an independent check position",
"radar.start_measure": "Start measurement",
"radar.countdown": "Stand at the mark in {seconds} s",
"radar.capturing": "Stand still and alone while measuring…",
"radar.fit_ready": "Calibration is ready",
"radar.check_third": "Check at another position",
"radar.check_complete": "Independent check completed",
"radar.error_distance": "Position difference: {distance}",
"radar.ambiguous_target": "More than one target was reported. Repeat the measurement alone.",
"radar.insufficient_samples": "Not enough current coordinates. Retry or use manual setup.",
"radar.bad_references": "Choose separated references in different directions from the sensor.",
"radar.ambiguous_sources": "The measurements allow two equally plausible directions. Choose reference points that distinguish left from right.",
"radar.bad_fit": "Measurements do not match. Check units, mounting point and references.",
"radar.desktop_hint": "Use a computer for precise setup. Editing on touch devices is best effort.",
"radar.detected": "House Plan recognized radar metadata for this device. Review the exact sources before saving.",
"radar.detected_ld2450": "House Plan found an ESPHome LD2450 coordinate set. Review the exact X/Y sources before saving.",
"radar.additional_actions": "Additional actions",
"radar.declare": "This is a presence radar",
"radar.profile": "Data profile",
"radar.profile_esphome_ld2450_v1": "ESPHome LD2450 (X/Y targets)",
"radar.profile_cartesian_v1": "Cartesian targets (X/Y)",
"radar.profile_polar_v1": "Polar target (distance/angle)",
"radar.profile_range_v1": "Distance only",
"radar.profile_zones_v1": "Zone states",
"radar.profile_presence_v1": "Presence only",
"radar.room": "Radar room",
"radar.room_choose": "Choose a room",
"radar.target": "Target {n}",
"radar.axis_x": "X coordinate entity",
"radar.axis_y": "Y coordinate entity",
"radar.add_target": "Add target slot",
"radar.range_channel": "Range channel {n}",
"radar.add_range": "Add range channel",
"radar.presence_gate": "Presence gate entity",
"radar.swap_axes": "Swap X and Y axes",
"radar.axis_x_sign": "X direction",
"radar.axis_y_sign": "Y direction",
"radar.distance_source": "Distance entity",
"radar.angle_source": "Angle entity",
"radar.angle_unit": "Angle unit",
"radar.degrees": "Degrees",
"radar.radians": "Radians",
"radar.angle_zero": "Zero-angle direction",
"radar.angle_forward": "Forward",
"radar.angle_right": "Right",
"radar.angle_clockwise": "Angles increase clockwise",
"radar.zone_source": "Zone entity",
"radar.occupancy_source": "Presence entity",
"radar.count_source": "Target count entity",
"radar.availability_source": "Availability entity",
"radar.source_choose": "Choose an entity",
"radar.source_optional": "Optional",
"radar.source_missing": "currently unavailable",
"radar.saved_unsupported": "This saved radar setup is unsupported or incomplete. It remains inactive; remove it or update House Plan before configuring it again.",
"radar.occupancy": "Presence (on/off)",
"radar.count": "Count",
"radar.mount": "Position and direction",
"radar.mount_hint": "This is the physical sensor position. Moving its decorative marker does not change it.",
"radar.heading": "Direction, °",
"radar.range_cm": "Range, cm",
"radar.fov_deg": "Field of view, °",
"radar.unit": "Source unit",
"radar.mirror": "Mirror the left/right axis",
"radar.remove": "Remove radar settings",
"radar.invalid": "Complete the radar room, sources and position before saving.",
"radar.check_sources": "Check live data",
"radar.checking": "Checking…",
"radar.health": "Connection status",
"radar.live_summary": "Current targets: {targets}; range arcs: {ranges}",
"radar.health_ok": "Current data received",
"radar.health_off": "No targets detected",
"radar.health_stale": "Some coordinate data is out of date",
"radar.health_partial": "Some sources are current; others are out of date",
"radar.health_restricted": "Access to one or more sources is restricted",
"radar.health_incomplete": "The current radar report is incomplete",
"radar.health_position_unavailable": "Presence reported; current position unavailable",
"radar.health_unavailable": "Sensor data unavailable",
"radar.health_needs_setup": "Installation needs setup",
"radar.health_inconsistent": "The sources report conflicting values",
"radar.health_unknown": "Current state is unknown",
"radar.health_disabled": "Radar is disabled",
"radar.error_invalid_radar": "Check the radar settings.",
"radar.error_invalid_selection": "Select an existing room and valid sources.",
"radar.error_source_restricted": "You do not have access to all selected sources.",
"radar.error_rate_limited": "Too many requests. Try again shortly.",
"radar.error_not_ready": "Radar processing is not ready.",
"radar.error_conflict": "The plan changed. Reopen the radar setup and try again.",
"radar.error_source_unavailable": "One or more selected radar sources are unavailable.",
"radar.error_unsupported_capability": "This radar capability is not supported by the installed integration.",
"radar.report_age": "{seconds} s ago",
"space.show_lqi": "Show zigbee signal (LQI) next to devices",
"space.hide_decor": "Hide the decorative layer",
"space.hide_decor_tip": "Lines, shapes, labels and furniture stay where they are — visible in the backdrop editor, not on the plan.",
"space.hide_openings": "Hide openings",
"space.hide_openings_tip": "Door, window and gate symbols are not drawn, but the openings keep working: light passes through, the sun comes in at a window, contact sensors still open them. The plan editor always shows them.",
"gs.light_none": "No light sources",
"mode.plan": "Plan editor",
"mode.devices": "Device editor",
"display.value": "Value + state",
"marker.subarea": "no area, manual",
"device.new": "New device — open its editor to dismiss",
"opening.unlock_action": "Unlock",
"opening.lock_action": "Lock",
"opening.lock_pending": "Working…",
"title.close_editor": "Close editor (back to view)",
"title.add_device": "Add a device to the plan",
"devbar.add": "Add",
"devbar.rules": "Icon rules",
"device_inbox.button": "Devices",
"device_inbox.title": "Devices on the plan",
"device_inbox.search": "Search devices, entities and integrations…",
"device_inbox.add_virtual": "Add virtual device",
"device_inbox.tab_on_plan": "On plan",
"device_inbox.tab_available": "Available",
"device_inbox.tab_hidden": "Hidden",
"device_inbox.tab_readd": "Available again",
"device_inbox.only_new": "New only",
"device_inbox.show_entities": "Show entities",
"device_inbox.show_hidden": "Show hidden on plan",
"device_inbox.show_hidden.help": "Temporarily shows hidden and disabled markers as editor-only ghosts on the plan. Saved device visibility does not change.",
"device_inbox.show_hidden.help.aria": "Help: show hidden devices on the plan",
"device_inbox.new": "New",
"device_inbox.find": "Find on plan",
"device_inbox.edit": "Edit",
"device_inbox.hide": "Hide",
"device_inbox.show": "Show",
"device_inbox.add": "Add",
"device_inbox.readd": "Add again",
"device_inbox.hide_available": "Hide from list",
"device_inbox.show_more": "Show more",
"device_inbox.more_actions": "More actions",
"device_inbox.find_hidden_hint": "Enable “Show hidden on plan” first",
"device_inbox.show_disabled": "Activate this binding in Home Assistant before showing it",
"device_inbox.empty_on_plan": "No matching devices are on the plan yet.",
"device_inbox.empty_available": "No devices are available to add.",
"device_inbox.empty_hidden": "There are no hidden devices.",
"device_inbox.empty_readd": "No removed devices are available to add again.",
"device_inbox.reason_visible_auto": "Discovered automatically",
"device_inbox.reason_visible_explicit": "Added explicitly",
"device_inbox.reason_manual_hidden": "Hidden by user",
"device_inbox.reason_automatic_hidden": "Hidden automatically",
"device_inbox.reason_service_entry": "Service-only registry entry",
"device_inbox.reason_excluded_integration": "Integration “{integration}” excluded by discovery filters",
"device_inbox.reason_excluded_domain": "Non-spatial entity type",
"device_inbox.reason_grouped_light": "Represented by a room light group",
"device_inbox.reason_represented_by_parent": "Represented by its parent device",
"device_inbox.reason_removed": "Previously removed from the plan",
"device_inbox.reason_available": "Available to add to the plan",
"device_inbox.reason_no_bound_room": "HA area is not linked to a plan room",
"device_inbox.status_ha_disabled": "Disabled in Home Assistant",
"device_inbox.status_orphaned": "Binding is no longer present in Home Assistant",
"device_inbox.status_unverified": "Home Assistant registry is temporarily unavailable",
"device_inbox.saved": "Device list updated",
"device_inbox.filters_excluded": "Excluded integrations",
"device_inbox.filters_group_lights": "Group room lights into one marker",
"device_inbox.filters_preview_appear": "will appear: {count}",
"device_inbox.filters_preview_hide": "will disappear: {count}",
"device_inbox.filters_preview_lights": "lights affected: {count}",
"device_inbox.filters_reset": "Restore recommended",
"device_inbox.filters_save": "Save filters",
"device_inbox.filters_search_ph": "Add an integration…",
"device_inbox.filters_title": "Discovery filters",
"space.roomcard_section": "Room card shows:",
"space.label_temp": "Temperature",
"space.label_hum": "Humidity",
"space.label_lqi": "Average Zigbee signal",
"space.label_light": "Lights on/off",
"roomcard.light_on": "On",
"roomcard.light_off": "Off",
"roomcard.light_partial": "{on} of {total}",
"toast.split_pick_inside": "Intermediate cut points must be inside the room",
"mode.decor": "Background editor",
"decor.select": "Select",
"decor.line": "Line",
"decor.rect": "Rectangle",
"decor.ellipse": "Oval",
"decor.text": "Text",
"decor.erase": "Erase",
"decor.erase_confirm_title": "Erase object?",
"decor.color": "Color",
"decor.width": "Line width",
"decor.line_style": "Line style",
"decor.line_style_solid": "Solid",
"decor.line_style_dashed": "Dashed",
"decor.fill": "Fill",
"decor.fill_color": "Fill color",
"decor.length": "Length",
"decor.size": "Size",
"decor.flip_h": "Flip horizontally",
"decor.flip_v": "Flip vertically",
"decor.angle": "Rotation angle, °",
"decor.text_size": "Text size",
"decor.backdrop_properties": "Plan backdrop properties",
"decor.text_title": "Text label",
"decor.object_title": "Edit {kind}",
"decor.text_label": "Text",
"decor.live_group": "Insert HA variable",
"decor.live_entity": "Entity",
"decor.live_entity_ph": "choose an entity",
"decor.live_attr": "Value",
"decor.live_attr_ph": "choose state or attribute",
"decor.live_state": "State",
"decor.backdrop": "Backdrop image",
"decor.backdrop_hint": "Drag to move; pull a corner to resize; use the top handle to rotate. Shift changes proportions or frees the angle.",
"decor.backdrop_reset": "Reset the picture",
"decor.backdrop_reset_done": "The picture is back at its original place and size",
"marker.icon_auto": "Auto: {icon} (by icon rules; pick one to override)",
"marker.icon_pin_auto": "Pin",
"mode.plan_tip": "Plan editor — the geometry of the home: draw and split/merge rooms, bind them to HA areas, place doors, windows and gates, move room cards, set the scale",
"mode.devices_tip": "Device editor — everything about icons: drag to position, click to edit binding/icon/display, add virtual devices, icon rules",
"mode.decor_tip": "Background editor — purely visual decor under the plan: lines, rectangles, ovals and text labels that never react to clicks",
"space.glow_enabled": "Light-source glow",
"gs.glow_group": "Light-source glow",
"gs.glow_base": "House darkness",
"gs.glow_light": "Default light color / intensity",
"gs.wall_group": "Walls",
"gs.wall_fill": "Wall fill",
"gs.glow_radius": "Glow radius",
"gs.glow_radius.help": "Sets the default glow radius in metres or feet; a device-specific radius overrides it.",
"gs.glow_radius.help.aria": "Help: default glow radius",
"gs.unit_m": "m",
"gs.unit_ft": "ft",
"marker.controls_label": "Controls other light sources",
"marker.controls.help": "With the “Toggle state” action, the listed sources toggle together with this marker. Their glow stays at their own markers, and the link alone does not turn the controlling marker into a light source.",
"marker.controls.help.aria": "Help: controlling other light sources",
"marker.controls_filter": "Search lights and switches…",
"info.controls": "Controls",
"marker.glow_radius_label": "Glow radius",
"marker.glow_radius.help": "Sets the glow radius in metres or feet; an empty value uses the radius from general settings.",
"marker.glow_radius.help.aria": "Help: glow radius",
"markup.wallthick": "Thickness",
"markup.select": "Select",
"title.markup_wallthick": "Thickness — click a wall to set its thickness from 0 to 100 cm.",
"markup.hint_wallthick": "click a wall · Esc closes without applying",
"wallthick.field": "Thickness",
"wallthick.unit_cm": "cm",
"wallthick.unit_in": "in",
"wallthick.apply_room": "Apply to all walls of this room",
"markup.draw_wall_title": "Thickness of each new wall segment (0–100 cm). Shared walls keep the existing value.",
"room.queue_progress": "Room {current} of {total}",
"toast.wall_rooms_saved": "Created rooms: {n}",
"toast.wall_chain_saved": "Wall chain saved",
"toast.wallthick_pick": "Click a wall",
"toast.wallthick_set": "Wall thickness set",
"toast.wallthick_cleared": "Wall thickness removed",
"toast.physical_range": "Enter a value from {min} to {max} {unit}",
"toast.zero_wall_opening_conflict": "Remove the opening on this wall segment first.",
"toast.zero_wall_ambiguous": "The wall segment is ambiguous. Simplify or adjust the junction.",
"toast.zero_wall_migration_blocked": "The space was not converted: {reason}. No data was changed.",
"toast.physical_angle": "Enter a rotation angle from 0° up to, but not including, 90°",
"toast.physical_limit": "The space has reached the limit for this type of geometry",
"toast.geometry_unsafe": "Change canceled: wall geometry could not be built safely.",
"junction.limit_angle": "The angle between walls is too sharp: {actual}°, minimum {limit}°.",
"junction.limit_valence": "Too many walls meet in one node: {actual}, maximum {limit}.",
"junction.limit_length": "The wall segment is too short: {actual} cm, minimum {limit} cm.",
"junction.limit_distance": "Walls and nodes are too close: {actual} cm, minimum {limit} cm.",
"junction.limit_clearance": "No room interior is left: {actual} cm², minimum {limit} cm².",
"junction.limit_check_failed": "The junction check could not run — the change was not saved",
"toast.wall_model_migration_blocked": "The wall model could not be updated: {reason}. The plan was not changed. Run “Optimize plans”; if the error repeats, fix the conflicting wall geometry.",
"toast.wall_model_client_outdated": "Update the card and reload the page before editing the plan.",
"wall_model.reason.invalid-room": "invalid room contour",
"wall_model.reason.zero-length": "zero-length wall segment",
"wall_model.reason.third-owner": "wall shared by more than two rooms",
"wall_model.reason.duplicate-id": "conflicting wall identifiers",
"wall_model.reason.thickness-conflict": "conflicting wall thickness values",
"wall_model.reason.opening-host": "opening cannot be assigned to one wall",
"toast.delete_room_pick": "Click inside the room you want to delete",
"toast.plan_snap_ambiguous": "Zoom in to choose the wall node",
"toast.wall_repair_ambiguous": "The room outline has more than one possible connection. Zoom in and connect it explicitly.",
"toast.wall_repair_too_large": "The gap is larger than 2 cm. Connect the walls before creating the room.",
"toast.wall_repair_changed": "The wall geometry changed. Try creating the room again.",
"toast.opening_on_zero_wall": "Openings cannot sit on a zero-thickness wall",
"marker.from_ha_option": "Pick from the HA list",
"marker.show_entities": "Show entities",
"marker.show_entities_tip": "Adds not only devices to the list, but all their entities too",
"marker.pick_ph": "Choose a device…",
"room.open_area": "Open the HA area",
"room.fit_action": "Fit room {name}",
"view.volumetric": "Volumetric view",
"view.flat": "Flat view",
"kiosk.title": "This screen's sizes",
"kiosk.hint": "Stored on this device only — every wall tablet or TV can have its own comfortable sizes.",
"kiosk.icon_scale": "Device icon size",
"kiosk.font_scale": "Room card text size",
"editor.kiosk": "Wall device (kiosk) mode",
"editor.cycle": "Auto-switch spaces every N seconds (kiosk, 0 = off)",
"room.settings_title": "Room settings",
"room.settings_section": "Room settings (override the space)",
"room.fill_label": "Fill in THIS room",
"fill.inherit": "As the space",
"room.custom_fill_space": "Space color",
"room.custom_fill_own": "Room color",
"room.temp_range_label": "Comfort range",
"room.temp_range_min": "Lower comfort-temperature bound",
"room.temp_range_max": "Upper comfort-temperature bound",
"room.temp_range_reset": "As the space",
"room.temp_range.help": "This range applies only to this room. Empty fields inherit the corresponding space bounds; if the bounds are reversed, House Plan uses the smaller value as the lower bound and the larger value as the upper bound.",
"room.temp_range.help.aria": "About the room comfort range",
"room.temp_src_label": "Temperature source",
"room.hum_src_label": "Humidity source",
"room.src_average": "Average over the room's sensors (default)",
"room.src_pick": "A specific HA device or entity",
"room.src_ph": "Choose a source…",
"toast.room_updated": "Room updated",
"space.card_font": "Room-card font size (whole space)",
"room.sizes_section": "Font sizes",
"room.name_scale": "Room name size",
"room.label_scale": "Metrics size",
"preview.room_name": "Living room",
"toast.cfg_reload_failed": "Could not reload the plan from the server: {err}",
"toast.locale_load_failed": "Could not load the language pack. English is used until the page reloads.",
"toast.furniture_art_load_failed": "Could not load the furniture drawings. Reload the page to show them.",
"room.settings_short": "Room settings",
"room.unnamed": "Unnamed room",
"marker.use_climate_temp": "Include the device temperature in the room",
"marker.use_climate_temp_tip": "Adds an air conditioner or thermostat current_temperature to the room average. Configure the external value badge separately below.",
"marker.value_badge_title": "Value badge",
"marker.value_badge.help": "Shows one selected value next to the icon. It does not affect room metrics, light, Glow or the tap action.",
"marker.value_badge.help.aria": "Help: device value badge",
"marker.value_badge_enabled": "Show a value badge",
"marker.value_badge_source": "Value",
"marker.value_badge_source.help": "Choose a specific state, supported attribute, or derived value of this device.",
"marker.value_badge_source.help.aria": "Help: value badge source",
"marker.value_badge_position": "Position",
"marker.value_badge_position.help": "The chosen side stays fixed and does not flip automatically at a plan edge.",
"marker.value_badge_position.help.aria": "Help: value badge position",
"marker.value_badge_right": "Right",
"marker.value_badge_bottom": "Below",
"marker.value_badge_left": "Left",
"marker.value_badge_top": "Above",
"marker.value_badge_empty": "This device has no available values",
"marker.value_badge_static": "A static icon does not show live values. The setting is preserved.",
"marker.value_badge_missing": "Source unavailable",
"marker.value_badge_missing_hint": "The saved source is currently unavailable. Keep it, disable the badge, or choose another value.",
"marker.value_badge_duplicate": "The same value is already shown inside the icon.",
"marker.value_badge_state": "State · {name}",
"marker.value_badge_marker_state": "Light-source state · {name}",
"marker.value_badge_lqi": "Average Zigbee signal quality",
"marker.value_badge_attr_current_temperature": "Current temperature · {name}",
"marker.value_badge_attr_temperature": "Target temperature · {name}",
"marker.value_badge_attr_current_humidity": "Current humidity · {name}",
"marker.value_badge_attr_humidity": "Humidity · {name}",
"marker.value_badge_attr_current_position": "Position · {name}",
"marker.value_badge_attr_percentage": "Speed · {name}",
"marker.value_badge_attr_brightness": "Brightness · {name}",
"marker.value_badge_attr_volume_level": "Volume · {name}",
"marker.value_badge_attr_battery_level": "Battery · {name}",
"marker.value_badge_attr_fan_speed": "Fan speed · {name}",
"marker.value_source": "Value source",
"marker.value_source.help": "Choose the value that replaces the icon. The tap action does not change.",
"marker.value_source.help.aria": "Help: value face source",
"marker.value_source_auto": "Automatic (as before)",
"marker.value_source_missing_hint": "The saved source is currently unavailable. The face shows — until it recovers or you choose another value.",
"marker.light_role_label": "Is this device a light source?",
"marker.light_role.help": "“Auto” uses the bound device's resolved role, “Always” forces its own source and “Never” excludes it; linked lights above remain independent.",
"marker.light_role.help.aria": "Help: whether this device is a light source",
"marker.light_role_auto_yes": "Auto (light source)",
"marker.light_role_auto_no": "Auto (not a light source)",
"marker.light_role_always": "Always a light source",
"marker.light_role_never": "Never a light source",
"marker.light_entity_label": "Leading light entity",
"marker.light_entity.help": "For a composite device, choose the entity whose state, colour and brightness represent this plan source. The automatic fallback remains compatible with older plans.",
"marker.light_entity.help.aria": "Help: leading light entity",
"marker.light_entity_auto": "Automatic ({entity})",
"marker.light_entity_none": "no controllable entity",
"marker.light_entity_missing": "The saved entity {entity} is unavailable. House Plan temporarily uses {fallback}; the saved choice will be restored if it returns.",
"marker.toggle_entity_label": "Entity to toggle",
"marker.toggle_entity.help": "For a composite device, choose the exact own light or switch operated by a tap. Automatic keeps the previous target rules and is independent from the leading light entity.",
"marker.toggle_entity.help.aria": "Help: entity to toggle",
"marker.toggle_entity_auto": "Automatic ({entity})",
"marker.toggle_entity_none": "no own controllable entity",
"marker.toggle_entity_missing": "The saved entity {entity} is no longer among this marker’s selectable channels. House Plan temporarily uses {fallback}; the saved choice will be restored if it returns.",
"marker.glow_color_label": "Glow colour and brightness",
"marker.glow_mode.help": "Use live source values, override only its colour, or fix both colour and brightness. The minimum is 1%; to disable the source, choose “Never”.",
"marker.glow_mode.help.aria": "Help: glow colour and brightness",
"marker.glow_mode_auto": "From source",
"marker.glow_mode_color": "Set colour",
"marker.glow_mode_fixed": "Set colour and brightness",
"marker.glow_color": "Glow colour",
"marker.glow_brightness": "Brightness",
"marker.glow_disabled_never": "Glow settings are unavailable because this marker is explicitly not a light source.",
"marker.glow_disabled_auto": "Auto mode found no spatial light source for this marker.",
"marker.glow_disabled_no_entity": "No active controllable Home Assistant entity is available for this spatial source.",
"marker.glow_passive_hint": "This source has no own Home Assistant data. Set its colour and brightness manually; its radius remains available.",
"marker.control_broken": "Saved source is missing or no longer marked as a light",
"marker.control_missing_label": "Missing plan light",
"marker.control_passive": "passive source",
"toast.marker_control_cycle": "This link would create a circular chain of light controls.",
"toast.marker_binding_required": "Choose a Home Assistant device before linking another light source.",
"confirm.unlock_title": "Unlock?",
"confirm.unlock_body": "House Plan will send an unlock command to this lock.",
"toast.files_migrate_failed": "Attachments could not be moved to the new binding, links keep pointing at the old files: {err}",
"space.pick_saved": "Already uploaded",
"space.pick_saved_hint": "Plans stored on the server, including ones you detached earlier",
"space.no_saved": "No plans stored on the server yet.",
"space.loading": "Loading…",
"space.used_by": "in use: {list}",
"space.in_use": "A space still uses this plan — detach it first",
"btn.use": "Use",
"confirm.delete_plan_title": "Delete plan file?",
"confirm.delete_plan_body": "The file will be deleted from the server. This action cannot be undone.",
"toast.plans_list_failed": "Could not list the stored plans: {err}",
"toast.plan_delete_failed": "Could not delete the plan: {err}",
"marker.hide": "Hide",
"marker.hide_tip": "The device will disappear from the plan after saving but will still count toward the room signal. Restore it through the \"Devices\" catalog in the device editor.",
"marker.show": "Show",
"marker.show_tip": "The device will appear on the plan again after saving.",
"marker.hidden_ghost": "Device hidden by the user",
"marker.ha_disabled_device": "The device is disabled in Home Assistant and hidden from the plan.",
"marker.ha_disabled_entity": "The entity is disabled in Home Assistant and hidden from the plan.",
"marker.ha_disabled_all_entities": "The device has no active Home Assistant entities, so it is hidden from the plan.",
"marker.ha_registry_limited": "The full Home Assistant registry is unavailable to this user. The unverified object cannot be shown or used for now.",
"marker.delete_tip": "Completely delete the device from the plan and every aggregate. You can add it again later.",
"tap.run": "Run automation/script/scene",
"tap.none": "Do nothing",
"marker.run_target_label": "What to run",
"marker.run_search_ph": "Search: automation, script or scene…",
"marker.run_target_gone": "Target {id} not found — pick again",
"marker.tap_confirm": "Ask for confirmation",
"marker.tap_confirm_tip": "Show a confirmation dialog before acting — a guard against accidental taps.",
"marker.toggle_hint_single": "Target: {name} ({id}).",
"marker.virtual_light_target": "Virtual light: {name}.",
"marker.virtual_light_current": "Manual state: {state} → {effect}.",
"marker.virtual_light_state_on": "on",
"marker.virtual_light_state_off": "off",
"marker.toggle_hint_group": "Will toggle {count} source(s): {names}.",
"marker.toggle_hint_current": "Now: {state} → {effect}.",
"marker.toggle_hint_group_current": "Currently on: {on} of {count} → {effect}.",
"marker.toggle_hint_skipped": "Will be skipped ({count}): {targets}.",
"marker.toggle_effect_turn_on": "will turn on",
"marker.toggle_effect_turn_off": "will turn off",
"marker.toggle_effect_open": "will open",
"marker.toggle_effect_close": "will close",
"marker.toggle_effect_stop": "will stop",
"marker.toggle_effect_toggle": "state will toggle",
"marker.toggle_skip_missing": "not found",
"marker.toggle_skip_ha_disabled": "disabled in HA",
"marker.toggle_skip_unavailable": "unavailable",
"marker.toggle_skip_unsupported": "toggle is unsupported",
"marker.toggle_skip_secure": "blocked for security",
"marker.toggle_none_no_binding": "This device has no binding, so there is no state to toggle. Tapping will do nothing.",
"marker.toggle_none_no_actionable_entity": "This device has no state that can be toggled. Tapping will do nothing.",
"marker.toggle_none_configured_targets_missing": "The configured targets are unavailable. The device's own entity will not be substituted for them.",
"marker.toggle_none_ha_disabled": "The target is disabled in Home Assistant and cannot be used on the plan.",
"marker.toggle_none_unavailable": "The target is currently unavailable. Tapping will do nothing.",
"marker.toggle_none_unsupported": "Home Assistant exposes no safe toggle operation for this entity. Tapping will do nothing.",
"marker.toggle_none_secure": "Toggling locks, alarms and secure gates from the plan is blocked for security.",
"run.automation": "automation",
"run.script": "script",
"run.scene": "scene",
"confirm.tap_run": "Run \"{name}\"?",
"confirm.tap_toggle": "Toggle \"{name}\"?",
"confirm.current_state": "Current state: {state}",
"confirm.expected_state": "After switching: {state}",
"confirm.group_current": "on {on} of {total}",
"confirm.group_all_on": "all are on",
"confirm.group_all_off": "all are off",
"confirm.unavailable_targets": "Unavailable: {count}",
"confirm.expected_by_ha": "Home Assistant will determine the state",
"confirm.state_on": "On",
"confirm.state_off": "Off",
"confirm.state_open": "Open",
"confirm.state_closed": "Closed",
"confirm.state_opening": "Opening",
"confirm.state_closing": "Closing",
"confirm.state_stopped": "Stopped",
"confirm.state_unknown": "Unknown",
"toast.run_started": "Started: {name}",
"toast.run_target_missing": "Run target not found — check the device settings",
"toast.run_target_required": "Pick an automation, script or scene",
"toast.tap_target_changed": "The action target changed. Try again.",
"toast.virtual_light_toggle_failed": "Could not toggle the virtual light: {err}",
"toast.value_badge_source_required": "Choose a value for the badge",
"btn.run": "Run",
"vac.section": "Robot vacuum: live position",
"vac.autocal": "Set up automatically",
"vac.live": "Live position on the plan",
"vac.trail": "Show the robot's path",
"vac.autocal_no_rooms": "The integration reports no room list — open “Fit manually”",
"vac.route_warn_unmapped": "The robot is cleaning a map that is not assigned to any floor",
"vac.route_warn_needs_calibration": "The map is assigned to a floor but not calibrated",
"vac.route_warn_ambiguous": "Two maps are indistinguishable — no floor was chosen",
"vac.route_warn_missing_space": "The space of this map was deleted",
"vac.autocal_no_match": "Room names did not match (need ≥3 in common) — open “Fit manually”",
"vac.autocal_done": "Done: bound via {rooms} rooms. Start a cleanup and check",
"vac.cal_need_pos": "The robot is not reporting coordinates — start a cleanup and pause it",
"vac.cal_done": "Calibration saved. Start a cleanup and check",
"vac.cal_cancelled": "Calibration cancelled",
"vac.fit": "Fit manually",
"vac.fit_hint": "Drag the robot map into place, stretch by the corners",
"vac.fit_rotate": "Rotate 90°",
"vac.fit_mirror": "Mirror",
"vac.trail_never": "Never",
"vac.trail_cleaning": "While cleaning",
"vac.trail_always": "Always",
"gs.bg_group": "Stage background",
"gs.bg_color": "Background around the plan",
"gs.bg_default": "Theme default",
"gs.bg_theme": "theme default",
"gs.bg_mode": "Plan background",
"gs.bg_mode.help": "“Follows the Sun” uses sun.sun, falling back to the browser's local clock; Static always shows the selected colour.",
"gs.bg_mode.help.aria": "Help: general plan background",
"gs.bg_static": "Static color",
"gs.bg_daynight": "Follows the Sun",
"gs.sun_group": "Sun",
"gs.sun_missing": "The sun.sun entity was not found — the background follows your local clock; window rays are unavailable.",
"gs.north": "North on the plan",
"gs.north.help": "The angle is measured clockwise from the plan's upward vertical; north is required for window rays, not for the “Follows the Sun” background.",
"gs.north.help.aria": "Help: general north direction",
"gs.north_ph": "not set",
"gs.north_clear": "Clear",
"gs.north_letter": "N",
"gs.sun_rays": "Sunlight through windows",
"gs.about_version": "Houseplan Card v{v}",
"gs.about_github": "GitHub · docs & issues",
"gs.about_telegram": "Telegram chat",
"support.title": "Help & feedback",
"space.bg_color": "Background around the plan",
"space.bg_inherit": "Inherit general",
"space.bg_inherited": "inherits general settings",
"space.bg_mode": "Plan background",
"space.bg_mode.help": "Inherit the general background or override this space with a static colour or “Follows the Sun”.",
"space.bg_mode.help.aria": "Help: space background",
"space.north": "North on the plan (override)",
"space.north.help": "Overrides general north for this space; the angle is measured clockwise from the plan's upward vertical and is used by window rays.",
"space.north.help.aria": "Help: north for this space",
"space.north_inherited": "inherited: {v}",
"space.sun_rays": "Sunlight through windows",
"space.sun_inherit": "Inherit general",
"space.sun_on": "On",
"space.sun_off": "Off",
"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": "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.optimize_no_automatic_changes": "There are no automatic changes to apply. Review the items below.",
"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_preflight_failed": "Could not safely verify the geometry of the following spaces: {spaces}{more}.",
"gs.align_preflight_hint": "Plans were not changed. Copy the diagnostics with the button below and attach them to the bug report together with a space export.",
"gs.preflight_reason_prepare-exception": "Could not prepare the space geometry (exception while building the model)",
"gs.preflight_reason_wall-null": "The wall body did not build (the union came back empty)",
"gs.preflight_reason_wall-degraded-extra": "The wall body degraded with extra geometry",
"gs.preflight_reason_wall-failed-core": "The wall body core failed to assemble",
"gs.preflight_reason_wall-exception": "Wall construction threw an exception",
"gs.preflight_reason_floor-null": "The floor outline did not build",
"gs.preflight_reason_floor-exception": "Floor construction threw an exception",
"gs.preflight_copy": "Copy diagnostics",
"gs.preflight_copied": "Diagnostics copied",
"gs.preflight_update_hint": "The card and integration versions differ — update House Plan and retry.",
"gs.align_preflight_space": "Space {n}",
"gs.align_preflight_more": ", and {n} more",
"gs.optimize_changes": "Model migrations: {m}; spaces updated: {c}; noisy coordinate values removed: {p}; merged real-wall fragments: {w}; merged zero-thickness wall fragments: {s}; independent walls: {i}.",
"gs.zero_walls_migrated": "Virtual wall spans converted: {n}.",
"gs.wall_segments_migrated": "Wall segments stabilised: {n}.",
"gs.room_drafts_migrated": "Unfinished contours converted to ordinary walls: {drafts}; wall segments: {segments}.",
"gs.optimize_lattice_summary": "Noisy coordinate values canonicalized: {n}; maximum movement: {cm} cm.",
"gs.optimize_lattice_space": "{space}: coordinate values canonicalized: {n}; off-grid values left unchanged: {far}.",
"gs.optimize_coincident_partitions": "Hidden independent wall sections absorbed into room walls: {n}.",
"gs.optimize_openings_rehosted": "Openings reattached to room walls: {n}.",
"gs.optimize_walls_straightened": "Walls straightened: {n}; maximum movement: {cm} cm.",
"gs.optimize_walls_straightened_where": "Largest wall correction: {s}.",
"gs.optimize_walls_straighten_skipped": "Near-axis walls left unchanged because they could not be repaired safely: {n}.",
"gs.optimize_glow_migration": "Legacy Glow: {spaces} spaces → no data fill + independent Glow; {rooms} rooms → inherited data fill + independent Glow.",
"gs.optimize_references": "References repaired: spaces — {spaces}; rooms — {rooms}; positions — {positions}; devices detached from missing spaces — {detached}.",
"gs.optimize_reference_more": ", and {n} more",
"gs.optimize_orphans_removed": "Forgotten records removed: {total} — room labels: {rooms}; devices: {devices}; group markers: {groups}. They belonged to spaces deleted earlier.",
"gs.optimize_live_positions": "Old positions in deleted spaces belong to existing objects: {n}{names}. They will be kept.",
"gs.optimize_live_positions_remove": "Old positions in deleted spaces belong to existing objects: {n}{names}. They are selected for removal.",
"gs.optimize_live_names": ": {names}{more}",
"gs.optimize_live_remove": "Remove old positions",
"gs.optimize_live_keep": "Keep old positions",
"gs.optimize_live_selected": "Old positions will be removed after Optimize is applied.",
"gs.optimize_unverified": "Could not safely verify positions: {n}. They were left unchanged.",
"gs.optimize_registry_limited": "Full administrator access to the Home Assistant registries is required for a safe check.",
"gs.optimize_vacuum_warning": "Vacuum room mappings that still need review: {n}.",
"gs.optimize_details": "Details",
"gs.optimize_details_more": "And {n} more records.",
"gs.optimize_detail_removed": "will be removed",
"gs.optimize_detail_live": "will be kept",
"gs.optimize_detail_unverified": "not verified",
"gs.optimize_detail_room_label": "room label",
"gs.optimize_detail_device": "device",
"gs.optimize_detail_group": "group marker",
"gs.optimize_detail_unknown": "unknown owner",
"gs.optimize_detail_item": "{status}: {kind} {id}; old space {space}",
"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, {r} references repaired",
"gs.optimize_undo": "Undo last optimization",
"gs.optimize_undone": "The last optimization was undone",
"decor.furniture": "Furniture",
"decor.image": "Image",
"decor.image_title": "Custom images",
"decor.image_upload": "Upload image",
"decor.image_replace": "Replace image",
"decor.image_uploading": "Uploading…",
"decor.image_asset": "Image file",
"decor.image_pick_hint": "Upload an image or choose one already used in House Plan.",
"decor.image_place_hint": "Click on the plan to place the image.",
"decor.image_none": "No uploaded images yet.",
"decor.image_unavailable": "Image unavailable",
"decor.image_used": "Used in {n} objects",
"decor.image_upload_failed": "Could not upload the image: {err}",
"decor.image_error_capacity": "The custom image storage limit has been reached.",
"decor.image_in_use": "Remove every placed copy before deleting this image.",
"decor.image_delete_title": "Delete image file?",
"decor.image_delete_message": "Delete “{name}” from House Plan? This cannot be undone.",
"furn.title": "Furniture library",
"furn.symbol": "Symbol",
"furn.group_furniture": "Furniture",
"furn.group_appliance": "Appliances",
"furn.group_sanitary": "Plumbing",
"furn.group_other": "Other",
"furn.width": "Width",
"furn.depth": "Depth",
"furn.back_to_categories": "All categories",
"furn.pick_hint": "Choose a category, then a symbol.",
"furn.place_hint": "Click on the plan — the piece lands against the nearest wall. Shift places it free.",
"furn.cat_air_conditioner": "Air conditioners",
"furn.cat_armchair": "Armchairs",
"furn.cat_bathtub": "Bathtubs",
"furn.cat_bed": "Beds",
"furn.cat_bidet": "Bidets",
"furn.cat_boiler": "Water heaters",
"furn.cat_chair": "Chairs",
"furn.cat_coffee_table": "Coffee tables",
"furn.cat_cooktop": "Cooktops",
"furn.cat_dining_table": "Dining tables",
"furn.cat_dishwasher": "Dishwashers",
"furn.cat_dryer": "Dryers",
"furn.cat_fireplace": "Fireplaces",
"furn.cat_fridge": "Refrigerators",
"furn.cat_kitchen_cabinet": "Kitchen cabinets",
"furn.cat_kitchen_sink": "Kitchen sinks",
"furn.cat_nightstand": "Cabinets",
"furn.cat_plant": "Plants",
"furn.cat_rug": "Rugs",
"furn.cat_shelving": "Shelving",
"furn.cat_shower": "Showers",
"furn.cat_sink": "Sinks",
"furn.cat_sofa": "Sofas",
"furn.cat_stairs": "Stairs",
"furn.cat_toilet": "Toilets",
"furn.cat_tv": "Televisions",
"furn.cat_wardrobe": "Wardrobes",
"furn.cat_washer": "Washing machines",
"furn.cat_work_table": "Desks",
"furn.sym_sofa": "Two-seat sofa",
"furn.sym_sofa_three_seat": "Three-seat sofa",
"furn.sym_sofa_corner_right": "Right sectional sofa",
"furn.sym_armchair": "Soft armchair",
"furn.sym_armchair_office": "Office chair",
"furn.sym_coffee_table": "Rectangular coffee table",
"furn.sym_coffee_table_round": "Round coffee table",
"furn.sym_coffee_table_oval": "Oval coffee table",
"furn.sym_coffee_table_rounded": "Rounded coffee table",
"furn.sym_table_dining": "Rectangular dining table",
"furn.sym_table_round": "Round table",
"furn.sym_table_dining_oval": "Oval dining table",
"furn.sym_table_dining_rounded": "Rounded dining table",
"furn.sym_chair": "Chair",
"furn.sym_chair_bar": "Bar stool",
"furn.sym_desk": "Rectangular desk",
"furn.sym_desk_corner": "Corner desk",
"furn.sym_bed_double": "Double bed",
"furn.sym_bed_single": "Single bed",
"furn.sym_nightstand": "Bedside table",
"furn.sym_cabinet_tv": "TV cabinet",
"furn.sym_cabinet_shoe": "Shoe cabinet",
"furn.sym_cabinet_sink": "Sink cabinet",
"furn.sym_wardrobe": "Wardrobe",
"furn.sym_bookshelf": "Bookcase",
"furn.sym_wall_unit": "Wall unit",
"furn.sym_kitchen_floor": "Kitchen floor module",
"furn.sym_kitchen_floor_corner": "Kitchen floor corner module",
"furn.sym_kitchen_wall": "Kitchen wall module",
"furn.sym_kitchen_wall_corner": "Kitchen wall corner module",
"furn.sym_shelf_floor": "Floor shelving unit",
"furn.sym_shelf_wall": "Wall shelf",
"furn.sym_fridge": "Fridge",
"furn.sym_stove": "Four-burner cooktop",
"furn.sym_cooktop_two": "Two-burner cooktop",
"furn.sym_dishwasher": "Dishwasher",
"furn.sym_washer": "Washing machine",
"furn.sym_dryer": "Tumble dryer",
"furn.sym_tv": "TV on stand",
"furn.sym_tv_wall": "Wall-mounted TV",
"furn.sym_ac": "Air conditioner",
"furn.sym_water_heater": "Water heater",
"furn.sym_toilet": "Floor-standing toilet",
"furn.sym_toilet_built_in": "Built-in toilet",
"furn.sym_bathtub": "Rectangular bathtub",
"furn.sym_bathtub_corner": "Corner bathtub",
"furn.sym_shower": "Shower",
"furn.sym_sink": "Washbasin",
"furn.sym_kitchen_sink": "Single kitchen sink",
"furn.sym_kitchen_sink_double": "Double kitchen sink",
"furn.sym_bidet": "Floor-standing bidet",
"furn.sym_bidet_built_in": "Built-in bidet",
"furn.sym_stairs": "Stairs",
"furn.sym_fireplace": "Fireplace",
"furn.sym_plant": "Plant",
"furn.sym_rug": "Rug",
"common.yes": "Yes",
"common.no": "No",
"vac.diag_source": "Source",
"vac.diag_platform": "Integration",
"vac.diag_status": "Status",
"vac.diag_position": "Position",
"vac.diag_rooms": "Rooms",
"vac.diag_rooms_value": "{total} · {matched} names match · {readiness}",
"vac.autocal_ready": "auto-calibration available",
"vac.autocal_not_ready": "need 3 matching names",
"vac.diag_path": "Integration path",
"vac.diag_map": "Map ID",
"vac.source_none": "not selected",
"vac.source_status_ok": "Ready",
"vac.source_status_missing": "Missing",
"vac.source_status_disabled": "Disabled in Home Assistant",
"vac.source_status_unavailable": "Unavailable",
"vac.source_status_unverified": "Cannot verify with current permissions",
"vac.source_status_unsupported": "No position data",
"vac.source_status_none": "No source",
"vac.source_banner_missing": "The saved source no longer exists. It was not replaced automatically; choose another source or restore it in Home Assistant.",
"vac.source_banner_disabled": "The saved source is disabled in Home Assistant. Enable it there or choose another source.",
"vac.source_banner_unverified": "Current Home Assistant permissions cannot verify this saved source. It remains pinned and will not be replaced automatically.",
"vac.choose_source": "Choose source",
"vac.source_auto": "Automatic",
"vac.source_auto_hint": "Use a compatible entity from this device",
"vac.all_cameras": "All cameras",
"vac.all_cameras_warn": "A camera may not provide robot data. Choose one only if it is your vacuum map.",
"vac.all_cameras_empty": "No other camera entities found.",
"vac.platform_unknown": "unknown integration",
"vac.cap_position": "position",
"vac.cap_rooms_short": "rooms",
"vac.cap_path": "path",
"vac.cap_map": "map ID",
"vac.cap_none": "no robot data detected",
"vac.xcme_hint": "Enable these Xiaomi Cloud Map Extractor attributes:",
"vac.documentation": "Documentation",
"vac.residual_title": "Check automatic calibration",
"vac.residual_message": "The matched rooms disagree by up to {error}. Apply this approximate calibration, refine it manually, or cancel without changing the saved setup.",
"vac.apply_proposal": "Apply",
"gs.backup_group": "Backup and transfer",
"gs.backup_hint": "Download a portable JSON backup or preview and import a backup made by House Plan.",
"backup.export_open": "Export",
"backup.import_open": "Import",
"backup.export_title": "Export House Plan",
"backup.import_title": "Import House Plan",
"backup.export_hint": "Choose whether the backup should contain the whole House Plan configuration or only the current space.",
"backup.full": "Full backup",
"backup.current_space": "Current space",
"backup.current_space_title": "Current space: {title}",
"backup.no_current_space": "No current space",
"backup.plan_only": "Plan only",
"backup.plan_only_hint": "Keep rooms, walls, openings, decor and room-label positions without devices or Home Assistant bindings.",
"backup.plan_only_preview": "This file contains the plan only",
"backup.privacy_warning": "The archive keeps names, Home Assistant identifiers and exact coordinates. Internal plans and attachments are referenced, not embedded; runtime states and vacuum trails are not included.",
"backup.download": "Download JSON",
"backup.export_done": "Backup downloaded",
"backup.reading": "Checking the backup…",
"backup.revalidated": "The plan changed after this preview. The summary was refreshed; review it and confirm again.",
"backup.error.support_invalid_message": "Check the support message and try again.",
"backup.error.support_package_too_large": "The anonymized support package exceeds the 8 MiB limit.",
"backup.error.support_preview_expired": "The support attachment preview expired or is no longer available.",
"backup.error.support_rate_limited": "Too many support reports or previews were requested. Try again later.",
"backup.error.support_rejected": "The report did not pass support service validation.",
"backup.error.support_unavailable": "The private support service is temporarily unavailable.",
"backup.error.unauthorized": "You do not have permission to export or import this plan.",
"backup.error.not_ready": "House Plan is not ready yet. Try again in a moment.",
"backup.error.too_large": "The backup exceeds the 8 MiB limit.",
"backup.error.invalid_json": "The selected file is not valid JSON.",
"backup.error.invalid_format": "The selected file is not a House Plan backup.",
"backup.error.invalid_image": "The image is damaged or does not match its format.",
"backup.error.unsupported_export_version": "This backup format is not supported by the installed version.",
"backup.error.unsupported_image": "Use a supported PNG, JPEG, WebP or SVG image.",
"backup.error.future_model": "The backup was created by a newer House Plan data model.",
"backup.error.invalid_config": "The backup contains an invalid House Plan configuration.",
"backup.error.wall_model_migration_blocked": "The backup wall model could not be upgraded safely. Optimize the source plan first, then export it again.",
"backup.error.invalid_layout": "The backup contains invalid object positions.",
"backup.error.invalid_content": "The backup contains invalid or inconsistent content references.",
"backup.error.space_not_found": "The selected space no longer exists.",
"backup.error.capacity_exceeded": "Adding this backup would exceed the plan limits.",
"backup.error.preview_expired": "The preview expired. Select the backup file again.",
"backup.error.preview_owner_mismatch": "This preview belongs to another Home Assistant user.",
"backup.error.conflict": "The plan changed after the preview. Review the refreshed summary.",
"backup.error.content_confirmation_required": "Confirm that unavailable local content may be detached.",
"backup.error.commit_failed": "The backup could not be applied safely. The previous plan was restored or is pending recovery.",
"backup.error.missing_plan": "A referenced plan file disappeared after the preview. Review the backup again.",
"backup.error.missing_content": "A referenced local attachment disappeared after the preview. Review the backup again.",
"backup.error.marker_control_missing": "A linked plan light is missing from the backup.",
"backup.error.marker_control_not_light": "A linked plan target is no longer marked as a light source.",
"backup.error.marker_control_self": "A light source cannot control itself.",
"backup.error.marker_control_cycle": "The backup contains a circular chain of light controls.",
"backup.error.duplicate_marker_control": "The backup contains a duplicate plan-light link.",
"backup.error.no_backup": "There is no import or optimization snapshot to restore.",
"backup.error.in_use": "The item is still in use",
"backup.error.invalid_data": "The request carries invalid data",
"backup.error.invalid_light_entity": "The leading light must be a light.* or switch.* entity",
"backup.error.invalid_marker_control": "Invalid marker control reference",
"backup.error.invalid_name": "The name is invalid",
"backup.error.invalid_partition_opening_host": "The opening must keep its partition host",
"backup.error.invalid_partition_opening_jamb_margin": "The opening leaves no physical jamb at the wall end",
"backup.error.invalid_passage_fields": "An open passage cannot carry door-only settings",
"backup.error.invalid_space_id": "Unknown space",
"backup.error.invalid_toggle_entity": "The toggle entity must be light.* or switch.*",
"backup.error.invalid_value_badge": "Invalid value badge settings",
"backup.error.invalid_value_badge_attribute": "Invalid value badge attribute",
"backup.error.invalid_value_badge_position": "Invalid value badge position",
"backup.error.invalid_value_badge_source": "Invalid value badge source",
"backup.error.invalid_vacuum_map_route": "Check how the robot's maps are assigned to spaces.",
"backup.error.invalid_value_source": "Invalid value source",
"backup.error.invalid_value_source_attribute": "Invalid value source attribute",
"backup.error.io_error": "A file operation failed on the server",
"backup.error.not_toggleable": "This device cannot be toggled",
"backup.error.nothing_to_repair": "Nothing to repair",
"backup.error.space_in_use": "The space is still referenced",
"backup.error.value_badge_source_required": "The value badge needs a source",
"backup.error.wall_model_client_outdated": "The plan was updated elsewhere — reload the page",
"backup.same_source": "Created on this Home Assistant instance",
"backup.foreign_source": "Created on another Home Assistant instance",
"backup.created": "Created: {value}",
"backup.versions": "Card {card}; integration {integration}; data model {model}",
"backup.count_spaces": "Spaces: {n}",
"backup.count_rooms": "Rooms: {n}",
"backup.count_walls": "Walls: {n}",
"backup.count_openings": "Openings: {n}",
"backup.count_decor": "Decor objects: {n}",
"backup.count_markers": "Devices: {n}",
"backup.count_layout": "Positions: {n}",
"backup.bindings": "Bindings — devices: {device}, entities: {entity}, virtual: {virtual}; positions without a space: {legacy}",
"backup.binding_status": "Target status — active: {active}, disabled: {disabled}, missing: {missing}",
"backup.missing_areas": "Areas missing on the target: {areas}",
"backup.dropped_marker_links": "Plan-light links outside this transferred space were omitted: {n}.",
"backup.room_drafts_migrated": "Legacy unfinished contours converted to ordinary walls: {drafts}; wall segments: {segments}.",
"backup.repaired_target_refs": "Existing references restored by this space import: {n}.",
"backup.preserved_unresolved_refs": "References that could not be restored unambiguously were preserved: {n}.",
"backup.preserved_unresolved_hint": "No data was guessed or deleted. After the import, run Optimize plans to inspect the remaining references.",
"backup.import_details": "Import reference details",
"backup.import_detail.incoming_remapped": "References updated inside the imported copy: {n}",
"backup.import_detail.target_repaired": "Existing references restored: {n}",
"backup.import_detail.preserved_unresolved": "Unresolved references preserved: {n}",
"backup.import_detail.collisions": "Destination conflicts preserved safely: {n}",
"backup.import_detail.dropped_links": "Incoming links omitted by transfer rules: {n}",
"backup.import_detail.bounded_lineages": "Overly nested identifiers left bounded: {n}",
"backup.replace_warning": "This replaces the current configuration and layout. Uploaded files are never deleted. One undo remains available until the next plan edit.",
"backup.foreign_bookkeeping": "Instance-specific known/new-device bookkeeping will not be imported.",
"backup.final_name": "New space name",
"backup.target_settings": "The target instance's global settings remain unchanged.",
"backup.duplicates": "Bindings already present: {n}",
"backup.skip": "Skip duplicate devices",
"backup.virtual_copy": "Add safe static virtual copies",
"backup.content": "Referenced content",
"backup.decor_images_summary": "Custom images: {objects} objects, {assets} files; missing files: {missing}.",
"backup.content_available": "available locally",
"backup.content_external": "external link",
"backup.content_detach_required": "will be detached",
"backup.confirm_detach": "I understand that unavailable internal plans and attachments will be detached from the imported configuration.",
"backup.confirm_missing_images": "I understand that missing custom images will remain as repair placeholders and other unavailable local files will be detached.",
"backup.replace": "Replace",
"backup.add": "Add space",
"backup.space_done": "Space imported: {rooms} rooms, {markers} devices, {refs} existing references restored",
"backup.full_done": "Backup restored: {spaces} spaces, {rooms} rooms, {markers} devices",
"backup.undo_import": "Undo last full import",
"backup.import_undone": "Full import undone",
"backdrop.large_title": "Large image",
"backdrop.large_body": "This image is {w}×{h} ({fileMb} MB file) and needs about {decodedMb} MB of memory to display. On tablets this can crash the page.",
"backdrop.unknown_body": "The image dimensions could not be read — the file may be damaged. Continuing may crash the page on tablets.",
"backdrop.reduced_dimensions": "Reduced copy: {w}×{h} px.",
"backdrop.use_downscaled": "Upload a reduced copy",
"backdrop.reducing": "Reducing…",
"backdrop.keep_original": "Keep the original",
"backdrop.too_large_title": "Image is too large",
"backdrop.too_large_body": "This image exceeds what browsers can display ({w}×{h}, limit {limit} px per side). Please reduce it in a desktop editor and upload again.",
"backdrop.downscale_failed": "Could not create the reduced copy. The original plan was not changed."
}