mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-02 04:38:55 +00:00
511 lines
26 KiB
JSON
511 lines
26 KiB
JSON
{
|
||
"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.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.remove": "Remove",
|
||
"btn.edit": "Edit",
|
||
"btn.open_in_ha": "Open in HA",
|
||
"btn.reset": "Reset",
|
||
"btn.attach": "Attach…",
|
||
"btn.upload": "Upload…",
|
||
"btn.replace": "Replace…",
|
||
"btn.no_area": "No area",
|
||
"title.zoom_in": "Zoom in",
|
||
"title.zoom_out": "Zoom out",
|
||
"title.zoom_fit": "Fit all",
|
||
"title.add_device": "Add a device to the plan",
|
||
"title.show_all": "Show hidden devices (ghosted, this tab only)",
|
||
"title.markup": "Room markup: grid, lines, outlines",
|
||
"title.configure_space": "Configure space",
|
||
"title.add_space": "Add space",
|
||
"title.markup_add": "Walls: connect grid dots with lines until the room outline closes",
|
||
"title.markup_merge": "Merge rooms: 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: click a virtual wall to make it solid; a shared solid wall merges the two rooms; an outer wall or inside a room deletes the room (with confirm).",
|
||
"title.no_area_room": "Decorative room without an HA area (e.g. a hallway)",
|
||
"title.choose_area": "Select a Home Assistant area",
|
||
"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 a wall handle; click a room for a corner scale frame",
|
||
"markup.hint_resize": "drag a wall handle · click a room — corner frame · Esc cancels a drag · Ctrl+Z — undo a step",
|
||
"markup.opening": "Opening",
|
||
"title.markup_opening": "Doors & windows: click a wall to place, click an opening to edit",
|
||
"opening.new": "New opening",
|
||
"opening.edit": "Door / window",
|
||
"opening.door": "Door",
|
||
"opening.window": "Window",
|
||
"opening.type_label": "Type",
|
||
"opening.length_label": "Length, cm",
|
||
"opening.contact_label": "Open/close sensor",
|
||
"opening.lock_label": "Lock",
|
||
"opening.none": "— none —",
|
||
"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 — openings sit on walls",
|
||
"markup.delete": "Delete",
|
||
"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",
|
||
"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.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",
|
||
"display.icon_ripple": "Icon + activity",
|
||
"marker.display_hint": "A yellow plate means actual work. Activity adds events, presence and movement; alarms are always visible.",
|
||
"marker.activity_color": "Effect color",
|
||
"marker.ripple_size": "Effect size",
|
||
"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.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": "Delete room \"{name}\"?",
|
||
"confirm.merge_rooms": "Merge rooms \"{a}\" and \"{b}\"?",
|
||
"confirm.remove_marker": "Remove \"{name}\" from the plan?",
|
||
"confirm.delete_space": "Delete space \"{title}\" with all its rooms and markup?",
|
||
"toast.pos_save_failed": "Failed to save position: {err}",
|
||
"toast.no_entity": "The device has no suitable entity",
|
||
"toast.markup_needs_server": "Markup is available after the config is moved to the server",
|
||
"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.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",
|
||
"room.split_header": "New room from the split",
|
||
"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 removed 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_saved": "Space saved",
|
||
"toast.space_deleted": "Space deleted",
|
||
"toast.delete_failed": "Delete failed: {err}",
|
||
"toast.error": "Error: {err}",
|
||
"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": "Default space",
|
||
"editor.icon_size": "Icon size, % of plan width",
|
||
"editor.show_temperature": "Show temperature",
|
||
"editor.live_states": "Live states (on/off, open…)",
|
||
"editor.show_signal": "Show zigbee signal (LQI)",
|
||
"editor.language": "Interface language",
|
||
"editor.lang_auto": "Auto (HA profile)",
|
||
"editor.lang_en": "English",
|
||
"editor.lang_ru": "Русский",
|
||
"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 (lights/switches)",
|
||
"marker.tap_label": "Tap action for this device",
|
||
"tap.toggle_note": "Toggle never applies to locks and alarms; hold the icon to open the info card.",
|
||
"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.scale_unit": "cm per cell",
|
||
"space.display_section": "Display",
|
||
"space.show_borders": "Always show room borders",
|
||
"space.show_names": "Show room names (drag to move)",
|
||
"space.room_color": "Border & name color",
|
||
"space.opacity": "Opacity",
|
||
"space.fill_label": "Room fill",
|
||
"fill.none": "None",
|
||
"fill.lqi": "Zigbee signal",
|
||
"fill.light": "Lights",
|
||
"space.source_file": "I have a floor-plan image",
|
||
"space.source_draw": "No image — I'll outline rooms by hand",
|
||
"space.orientation": "Canvas",
|
||
"orient.landscape": "Landscape",
|
||
"orient.portrait": "Portrait",
|
||
"orient.square": "Square",
|
||
"fill.temp": "Temperature",
|
||
"space.temp_min": "Comfort from",
|
||
"space.temp_max": "to",
|
||
"tip.temp_avg": "average temperature:",
|
||
"space_card.button": "Open the space plan",
|
||
"space_card.not_found": "Space “{id}” not found",
|
||
"space_card.loading": "Loading…",
|
||
"editor.space": "Space",
|
||
"editor.show_button": "Show button",
|
||
"editor.button_label": "Button label",
|
||
"editor.button_target": "Target dashboard path",
|
||
"editor.aspect_ratio": "Aspect ratio (e.g. 16:9 or auto)",
|
||
"marker.sub_entity": "entity",
|
||
"title.general_settings": "General settings",
|
||
"gs.title": "General settings",
|
||
"gs.hint": "Fill colors apply to every space; each color has its own opacity. Which fill mode a space uses is set in that space's dialog.",
|
||
"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",
|
||
"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 doors and windows",
|
||
"space.hide_openings_tip": "The 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 instead of an icon",
|
||
"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)",
|
||
"devbar.add": "Add",
|
||
"devbar.show_all": "Show hidden",
|
||
"devbar.rules": "Icon rules",
|
||
"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.color": "Color",
|
||
"decor.width": "Line width",
|
||
"decor.w_thin": "Thin",
|
||
"decor.w_mid": "Medium",
|
||
"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",
|
||
"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 the picture to move it, pull a corner to resize it. Shift — off the grid.",
|
||
"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)",
|
||
"mode.plan_tip": "Plan editor — the geometry of the home: draw and split/merge rooms, bind them to HA areas, place doors and windows, 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",
|
||
"fill.glow": "Light sources (dark house, glowing lamps)",
|
||
"gs.glow_group": "Light-sources fill",
|
||
"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.unit_m": "m",
|
||
"gs.unit_ft": "ft",
|
||
"marker.controls_label": "Controls light sources",
|
||
"marker.controls_hint": "With tap action “Toggle”, a click flips all bound lights at once (any on → all off). The icon mirrors their state.",
|
||
"marker.controls_filter": "Search lights and switches…",
|
||
"info.controls": "Controls",
|
||
"marker.glow_radius_label": "Glow radius (light-sources fill)",
|
||
"marker.glow_radius_hint": "empty = default from general settings",
|
||
"markup.wallthick": "Wall thickness",
|
||
"title.markup_wallthick": "Wall thickness — click a wall to set how thick it is. Empty or zero removes the thickness.",
|
||
"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 for new room walls. Empty or zero — thin walls. Shared walls keep the neighbour's value.",
|
||
"toast.wallthick_pick": "Click a wall (not an open boundary)",
|
||
"toast.wallthick_open": "Open boundaries have no thickness",
|
||
"toast.wallthick_set": "Wall thickness set",
|
||
"toast.wallthick_cleared": "Wall thickness removed",
|
||
"markup.openwall": "Open boundary",
|
||
"title.markup_openwall": "Open boundary — click a point on a shared wall, then a second point on the same wall (within the nearest corners) to make that stretch virtual. Click a dashed stretch to close it. Crosshair cursor.",
|
||
"toast.openwall_pick": "Click a wall shared by two rooms",
|
||
"toast.openwall_shared_only": "Only a shared wall between two rooms can be opened",
|
||
"toast.openwall_short": "Stretch too short — pick a farther point",
|
||
"toast.openwall_opened_span": "Virtual stretch opened",
|
||
"toast.openwall_closed_span": "Virtual stretch closed",
|
||
"toast.openwall_openings_removed": "Openings on the virtual stretch were removed",
|
||
"toast.openwall_opened": "Boundary “{a}” ↔ “{b}” is now open",
|
||
"toast.openwall_closed": "Boundary “{a}” ↔ “{b}” is closed again",
|
||
"toast.opening_on_virtual": "Openings cannot sit on a virtual 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",
|
||
"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.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}",
|
||
"room.settings_short": "Room settings",
|
||
"room.unnamed": "Unnamed room",
|
||
"marker.use_climate_temp": "Use the device's temperature sensor",
|
||
"marker.use_climate_temp_tip": "Air conditioners and thermostats know the room temperature (current_temperature). Shows it as a badge next to the icon and counts it in the room average — like a regular thermometer.",
|
||
"marker.is_light": "This device is a light source",
|
||
"marker.is_light_tip": "Makes the icon glow in the “Light sources” fill even without a light entity — for a smart switch driving ordinary fixtures. The glow follows the switch (or the lights bound above).",
|
||
"confirm.unlock": "Unlock “{name}”?",
|
||
"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": "Delete the plan file \"{name}\" from the server? This 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 device from plan",
|
||
"marker.hide_tip": "The device is not drawn on the plan but still counts toward the room signal. To see it: the \"Show hidden\" button in the device editor.",
|
||
"tap.run": "Run automation/script/scene",
|
||
"tap.cover": "Open/close (curtains/blinds)",
|
||
"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.",
|
||
"run.automation": "automation",
|
||
"run.script": "script",
|
||
"run.scene": "scene",
|
||
"confirm.tap_run": "Run \"{name}\"?",
|
||
"confirm.tap_toggle": "Toggle \"{name}\"?",
|
||
"confirm.tap_cover": "Open/close \"{name}\"?",
|
||
"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",
|
||
"btn.run": "Run",
|
||
"vac.section": "Robot vacuum: live position",
|
||
"vac.status_found": "Position source found: {name}",
|
||
"vac.status_none": "The integration reports no coordinates — the robot will only be shown at its base",
|
||
"vac.autocal": "Set up automatically",
|
||
"vac.live": "Live position on the plan",
|
||
"vac.trail": "Show the robot's path",
|
||
"vac.cal_maps": "Calibrated maps: {maps}",
|
||
"vac.autocal_no_rooms": "The integration reports no room list — open “Fit manually”",
|
||
"vac.autocal_no_match": "Room names did not match (need ≥3 in common) — open “Fit manually”",
|
||
"vac.autocal_res_warn": "Matched {rooms} rooms but the fit is rough — verify and refine via “Fit manually” if needed",
|
||
"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_static": "Static color",
|
||
"gs.bg_daynight": "Follows the sun (day/night)",
|
||
"gs.bg_daynight_hint": "The stage follows the sun: neutral day, warm golden hour, deep night. Needs the compass below.",
|
||
"gs.sun_group": "Sun",
|
||
"gs.sun_missing": "The sun.sun entity was not found — the sun features stay off.",
|
||
"gs.north": "North on the plan",
|
||
"gs.north_ph": "not set",
|
||
"gs.north_hint": "Point the arrow at north (1° steps, 15° with Shift) or type the degrees — until then the sun features stay off.",
|
||
"gs.north_clear": "Clear",
|
||
"gs.north_letter": "N",
|
||
"gs.sun_rays": "Sunlight through windows",
|
||
"gs.weather": "Weather entity",
|
||
"gs.weather_ph": "weather.home (optional)",
|
||
"gs.about_group": "About",
|
||
"gs.about_version": "Houseplan Card v{v}",
|
||
"gs.about_github": "GitHub · docs & issues",
|
||
"gs.about_telegram": "Telegram chat",
|
||
"space.bg_color": "Background around the plan",
|
||
"space.bg_inherit": "Inherit general",
|
||
"space.bg_inherited": "inherits general settings",
|
||
"space.bg_mode": "Plan background",
|
||
"space.north": "North on the plan (override)",
|
||
"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.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.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",
|
||
"furn.group_appliance": "Appliances",
|
||
"furn.group_sanitary": "Plumbing",
|
||
"furn.group_other": "Other",
|
||
"furn.width": "Width",
|
||
"furn.depth": "Depth",
|
||
"furn.pick_hint": "Pick a symbol, then click on the plan.",
|
||
"furn.place_hint": "Click on the plan — the piece lands against the nearest wall. Shift places it free.",
|
||
"furn.sym_sofa": "Sofa",
|
||
"furn.sym_armchair": "Armchair",
|
||
"furn.sym_coffee_table": "Coffee table",
|
||
"furn.sym_table_dining": "Dining table",
|
||
"furn.sym_table_round": "Round table",
|
||
"furn.sym_chair": "Chair",
|
||
"furn.sym_desk": "Desk",
|
||
"furn.sym_bed_double": "Double bed",
|
||
"furn.sym_bed_single": "Single bed",
|
||
"furn.sym_nightstand": "Nightstand",
|
||
"furn.sym_wardrobe": "Wardrobe",
|
||
"furn.sym_bookshelf": "Bookshelf",
|
||
"furn.sym_fridge": "Fridge",
|
||
"furn.sym_stove": "Cooker",
|
||
"furn.sym_dishwasher": "Dishwasher",
|
||
"furn.sym_washer": "Washing machine",
|
||
"furn.sym_dryer": "Tumble dryer",
|
||
"furn.sym_tv": "TV",
|
||
"furn.sym_ac": "Air conditioner",
|
||
"furn.sym_water_heater": "Water heater",
|
||
"furn.sym_toilet": "Toilet",
|
||
"furn.sym_bathtub": "Bathtub",
|
||
"furn.sym_shower": "Shower",
|
||
"furn.sym_sink": "Washbasin",
|
||
"furn.sym_kitchen_sink": "Kitchen sink",
|
||
"furn.sym_bidet": "Bidet",
|
||
"furn.sym_stairs": "Stairs",
|
||
"furn.sym_fireplace": "Fireplace",
|
||
"furn.sym_plant": "Plant",
|
||
"furn.sym_rug": "Rug"
|
||
}
|