feat: complete house plan maker application

Full-featured house/apartment floor plan editor with:

- Turborepo monorepo (React/Vite client, Fastify/Prisma server, shared Zod schemas)
- 2D room editor with walls, doors, windows, furniture, electrical elements
- 3D room preview with Three.js (auto-hide nearest walls, bird's eye default)
- Wall projection views with interactive drag (elevation, position)
- Apartment floor plan view with room positioning
- Copy/paste, alignment tools, measurement tool, annotations
- Item-attached annotations with leader lines (visible on projections)
- Door open direction (LEFT/RIGHT/INWARD/OUTWARD) with swing arc
- Floor type textures (wood, tile, concrete, laminate, herringbone)
- Wall color picker for 3D view
- Furniture: bed, desk, wardrobe, sofa, table, chair, shelf, nightstand, dresser, bookcase, TV (with stand toggle), AC unit
- Furniture elevation support (wall-mounted items)
- Auto-save with dirty state tracking, batch save API
- Rotation-aware collision detection (SAT/OBB) with 3D elevation check
- Rotation-aware hit testing
- i18n (English/Russian) with locale-aware number formatting
- Dark mode with system preference detection
- Undo/redo, keyboard shortcuts, scale bar
- PDF/PNG/JSON export and JSON import
- Focus trap modal, toast notifications, tooltips
- Responsive layout with overlay palettes
This commit is contained in:
2026-04-05 22:34:03 +03:00
parent b84807bbdb
commit af8b9fe00f
188 changed files with 35795 additions and 0 deletions
@@ -0,0 +1,292 @@
{
"app.title": "House Plan Maker",
"wall.north": "North Wall",
"wall.south": "South Wall",
"wall.east": "East Wall",
"wall.west": "West Wall",
"wall.other": "Wall",
"furniture.bed": "Bed",
"furniture.desk": "Desk",
"furniture.wardrobe": "Wardrobe",
"furniture.sofa": "Sofa",
"furniture.table": "Table",
"furniture.chair": "Chair",
"furniture.shelf": "Shelf",
"furniture.nightstand": "Nightstand",
"furniture.dresser": "Dresser",
"furniture.bookcase": "Bookcase",
"furniture.tv": "TV",
"furniture.ac_unit": "AC Unit",
"furniture.other": "Other",
"nav.apartments": "Apartments",
"breadcrumb.apartments": "Apartments",
"breadcrumb.apartmentDetails": "Apartment Details",
"breadcrumb.roomEditor": "Room Editor",
"breadcrumb.floorPlan": "Floor Plan",
"apartments.title": "Apartments",
"apartments.new": "New Apartment",
"apartments.create": "Create Apartment",
"apartments.empty.title": "No apartments yet",
"apartments.empty.description": "Create your first apartment to start planning rooms and layouts.",
"apartments.delete.title": "Delete Apartment",
"apartments.delete.message": "Are you sure you want to delete \"{{name}}\"? This will also delete all rooms and their contents. This action cannot be undone.",
"apartments.error.load": "Failed to load apartments",
"apartments.error.operation": "Operation failed",
"apartments.error.delete": "Failed to delete apartment",
"apartment.notFound": "Apartment not found",
"apartmentForm.titleNew": "New Apartment",
"apartmentForm.titleEdit": "Edit Apartment",
"apartmentForm.name": "Name",
"apartmentForm.namePlaceholder": "e.g., Main Apartment",
"apartmentForm.address": "Address",
"apartmentForm.addressPlaceholder": "e.g., 123 Main St",
"apartmentForm.totalArea": "Total Area (m\u00b2)",
"apartmentForm.totalAreaPlaceholder": "e.g., 75",
"apartmentForm.saving": "Saving...",
"apartmentForm.creating": "Creating...",
"apartmentForm.saveChanges": "Save Changes",
"apartmentForm.createApartment": "Create Apartment",
"apartmentCard.area": "Area:",
"apartmentCard.rooms": "Rooms:",
"apartmentCard.edit": "Edit",
"apartmentCard.delete": "Delete",
"rooms.title": "Rooms",
"rooms.add": "Add Room",
"rooms.addFirst": "Add First Room",
"rooms.fromTemplate": "From Template",
"rooms.empty.title": "No rooms yet",
"rooms.empty.description": "Add rooms to this apartment to start designing floor plans.",
"rooms.delete.title": "Delete Room",
"rooms.delete.message": "Are you sure you want to delete \"{{name}}\"? All walls, openings, electrical items, and furniture in this room will be deleted. This action cannot be undone.",
"rooms.error.load": "Failed to load apartment",
"rooms.error.operation": "Operation failed",
"rooms.error.create": "Failed to create room",
"rooms.error.delete": "Failed to delete room",
"rooms.count": "{{count}} room",
"rooms.count_other": "{{count}} rooms",
"rooms.dimensions": "{{width}} x {{height}} m",
"rooms.vertices": "{{count}} vertices",
"rooms.wallHeight": "Wall height: {{value}} m",
"rooms.plinth": "Plinth: {{value}} m",
"roomForm.titleNew": "New Room",
"roomForm.titleEdit": "Edit Room",
"roomForm.name": "Room Name",
"roomForm.namePlaceholder": "e.g., Living Room",
"roomForm.shape": "Shape",
"roomForm.rectangular": "Rectangular",
"roomForm.customPolygon": "Custom Polygon",
"roomForm.width": "Width (m)",
"roomForm.widthPlaceholder": "e.g., 4.5",
"roomForm.height": "Height (m)",
"roomForm.heightPlaceholder": "e.g., 3.2",
"roomForm.customNote": "Custom polygon shapes can be drawn in the room editor.",
"roomForm.currentVertices": " Current shape has {{count}} vertices.",
"roomForm.defaultShape": " A default rectangular shape will be created.",
"roomForm.wallProperties": "Wall Properties",
"roomForm.wallHeight": "Wall Height (m)",
"roomForm.plinthProperties": "Plinth Properties",
"roomForm.plinthHeight": "Height (m)",
"roomForm.plinthThickness": "Thickness (m)",
"roomForm.plinthHeightHint": "Default: 0.06 m",
"roomForm.plinthThicknessHint": "Default: 0.01 m",
"roomForm.saving": "Saving...",
"roomForm.creating": "Creating...",
"roomForm.saveChanges": "Save Changes",
"roomForm.createRoom": "Create Room",
"roomForm.widthError": "Width must be positive",
"roomForm.heightError": "Height must be positive",
"roomCard.edit": "Edit",
"roomCard.delete": "Delete",
"common.cancel": "Cancel",
"common.delete": "Delete",
"common.deleting": "Deleting...",
"common.loading": "Loading...",
"common.dismissError": "Dismiss error",
"editor.save": "Save",
"editor.saving": "Saving...",
"editor.saveFailed": "Save failed: {{error}}",
"editor.error.load": "Failed to load room",
"editor.roomNotFound": "Room not found",
"editor.loading3D": "Loading 3D view...",
"editor.unsavedChanges": "You have unsaved changes. Are you sure you want to leave?",
"toolbar.select": "Select",
"toolbar.door": "Door",
"toolbar.window": "Window",
"toolbar.electrical": "Electrical",
"toolbar.furniture": "Furniture",
"toolbar.measure": "Measure",
"toolbar.annotate": "Annotate",
"toolbar.undo": "Undo (Ctrl+Z)",
"toolbar.redo": "Redo (Ctrl+Shift+Z)",
"toolbar.zoomIn": "Zoom in",
"toolbar.zoomOut": "Zoom out",
"toolbar.grid": "Grid",
"toolbar.snap": "Snap",
"toolbar.walls": "Walls",
"toolbar.elec": "Elec",
"toolbar.furn": "Furn",
"toolbar.meas": "Meas",
"toolbar.toggleGrid": "Toggle grid",
"toolbar.toggleSnap": "Toggle snap",
"toolbar.toggleWalls": "Toggle walls layer",
"toolbar.toggleElectrical": "Toggle electrical layer",
"toolbar.toggleFurniture": "Toggle furniture layer",
"toolbar.toggleMeasurements": "Toggle measurements layer",
"toolbar.import": "Import JSON",
"toolbar.export": "Export (PNG/PDF/JSON)",
"toolbar.saveShortcut": "Save (Ctrl+S)",
"toolbar.view2D": "2D",
"toolbar.view3D": "3D Preview",
"toolbar.viewProjections": "Projections",
"toolbar.alignLeft": "Align left",
"toolbar.alignCenterH": "Center horizontal",
"toolbar.alignRight": "Align right",
"toolbar.alignTop": "Align top",
"toolbar.alignCenterV": "Center vertical",
"toolbar.alignBottom": "Align bottom",
"toolbar.distributeH": "Distribute horizontal",
"toolbar.distributeV": "Distribute vertical",
"properties.title": "Properties",
"properties.area": "Area",
"properties.perimeter": "Perimeter",
"properties.noSelection": "No element selected",
"properties.selectHint": "Click an element to see its properties",
"properties.multipleSelected": "{{count}} elements selected",
"properties.roomInfo": "Room Info",
"properties.name": "Name",
"properties.wallHeight": "Wall height",
"properties.plinthHeight": "Plinth height",
"properties.walls": "Walls",
"properties.openings": "Openings",
"properties.wall": "Wall",
"properties.length": "Length",
"properties.thickness": "Thickness",
"properties.startX": "Start X",
"properties.startY": "Start Y",
"properties.endX": "End X",
"properties.endY": "End Y",
"properties.direction": "Direction",
"properties.door": "Door",
"properties.window": "Window",
"properties.width": "Width",
"properties.height": "Height",
"properties.position": "Position",
"properties.elevation": "Elevation",
"properties.wallLength": "Wall length",
"properties.type": "Type",
"properties.variant": "Variant",
"properties.x": "X",
"properties.y": "Y",
"properties.rotation": "Rotation",
"properties.wallMounted": "Wall-mounted",
"properties.yes": "Yes",
"properties.depth": "Depth",
"properties.wallColor": "Wall color",
"properties.floorType": "Floor",
"floor.CONCRETE": "Concrete",
"floor.WOOD_LIGHT": "Light Wood",
"floor.WOOD_MEDIUM": "Medium Wood",
"floor.WOOD_DARK": "Dark Wood",
"floor.WOOD_HERRINGBONE": "Herringbone",
"floor.TILE_WHITE": "White Tile",
"floor.TILE_GRAY": "Gray Tile",
"floor.LAMINATE": "Laminate",
"properties.addNote": "Add note",
"properties.stand": "Stand",
"properties.openDirection": "Open direction",
"properties.openDir.LEFT": "Left",
"properties.openDir.RIGHT": "Right",
"properties.openDir.INWARD": "Inward",
"properties.openDir.OUTWARD": "Outward",
"properties.openDir.LEFT": "Left",
"properties.openDir.RIGHT": "Right",
"properties.openDir.INWARD": "Inward",
"properties.openDir.OUTWARD": "Outward",
"electrical.title": "Electrical",
"electrical.outlets": "Outlets",
"electrical.switches": "Switches",
"electrical.junction": "Junction",
"electrical.lights": "Lights",
"electrical.cable": "Cable",
"furniture.title": "Furniture",
"cableLength.label": "Cable length:",
"projection.title": "Wall Projections",
"projection.grid": "Grid",
"projection.tabs": "Tabs",
"projection.noWall": "No wall selected",
"templates.title": "New Room from Template",
"templates.create": "Create Room",
"templates.roomName": "Room Name (optional)",
"templates.bedroom": "Bedroom",
"templates.bedroomDesc": "Standard bedroom (4m x 3.5m) with door and window",
"templates.kitchen": "Kitchen",
"templates.kitchenDesc": "Kitchen (3.5m x 3m) with door",
"templates.bathroom": "Bathroom",
"templates.bathroomDesc": "Bathroom (2.5m x 2m)",
"templates.livingRoom": "Living Room",
"templates.livingRoomDesc": "Spacious living room (5m x 4m) with window",
"templates.office": "Office",
"templates.officeDesc": "Home office (3m x 2.5m)",
"templates.emptyRoom": "Empty Room",
"templates.emptyRoomDesc": "Custom empty room (3m x 3m)",
"export.title": "Export",
"export.format": "Format",
"export.png": "PNG Image",
"export.pdf": "PDF Document",
"export.json": "JSON Data",
"export.scope": "Scope",
"export.currentView": "Current View",
"export.allRoomViews": "All Room Views",
"export.options": "Options",
"export.includeGrid": "Include grid",
"export.scaleFactor": "Scale factor:",
"export.exporting": "Exporting...",
"export.exportBtn": "Export",
"export.generating": "Generating export...",
"export.error.3dNotAvailable": "3D canvas not available",
"export.error.2dNotAvailable": "2D canvas not available",
"export.error.failed": "Export failed",
"floorPlan.back": "Back",
"floorPlan.reset": "Reset",
"floorPlan.dblClickToEdit": "Double-click to edit",
"annotation.editPrompt": "Edit annotation text:",
"editor.importFailed": "Import failed: {{error}}",
"projection.clickToPlace": "Click on wall to place item",
"export.pdfTitle": "House Plan",
"export.pdfGenerated": "Generated: {{date}}",
"export.pdfRoomCount": "{{count}} room",
"export.pdfRoomCount_other": "{{count}} rooms",
"export.pdfWallProjections": "{{name}} - Wall Projections",
"toast.notifications": "Notifications",
"toast.dismiss": "Dismiss notification",
"theme.toggle": "Toggle dark mode",
"language.toggle": "Switch language"
}
@@ -0,0 +1,298 @@
{
"app.title": "Планировщик квартир",
"wall.north": "Северная стена",
"wall.south": "Южная стена",
"wall.east": "Восточная стена",
"wall.west": "Западная стена",
"wall.other": "Стена",
"furniture.bed": "Кровать",
"furniture.desk": "Стол",
"furniture.wardrobe": "Шкаф",
"furniture.sofa": "Диван",
"furniture.table": "Стол обеденный",
"furniture.chair": "Стул",
"furniture.shelf": "Полка",
"furniture.nightstand": "Тумбочка",
"furniture.dresser": "Комод",
"furniture.bookcase": "Книжный шкаф",
"furniture.tv": "Телевизор",
"furniture.ac_unit": "Кондиционер",
"furniture.other": "Другое",
"nav.apartments": "Квартиры",
"breadcrumb.apartments": "Квартиры",
"breadcrumb.apartmentDetails": "Детали квартиры",
"breadcrumb.roomEditor": "Редактор комнаты",
"breadcrumb.floorPlan": "План этажа",
"apartments.title": "Квартиры",
"apartments.new": "Новая квартира",
"apartments.create": "Создать квартиру",
"apartments.empty.title": "Нет квартир",
"apartments.empty.description": "Создайте первую квартиру, чтобы начать планировку комнат.",
"apartments.delete.title": "Удалить квартиру",
"apartments.delete.message": "Вы уверены, что хотите удалить \"{{name}}\"? Все комнаты и их содержимое также будут удалены. Это действие нельзя отменить.",
"apartments.error.load": "Не удалось загрузить квартиры",
"apartments.error.operation": "Операция не удалась",
"apartments.error.delete": "Не удалось удалить квартиру",
"apartment.notFound": "Квартира не найдена",
"apartmentForm.titleNew": "Новая квартира",
"apartmentForm.titleEdit": "Редактировать квартиру",
"apartmentForm.name": "Название",
"apartmentForm.namePlaceholder": "напр., Основная квартира",
"apartmentForm.address": "Адрес",
"apartmentForm.addressPlaceholder": "напр., ул. Главная 123",
"apartmentForm.totalArea": "Общая площадь (м\u00b2)",
"apartmentForm.totalAreaPlaceholder": "напр., 75",
"apartmentForm.saving": "Сохранение...",
"apartmentForm.creating": "Создание...",
"apartmentForm.saveChanges": "Сохранить изменения",
"apartmentForm.createApartment": "Создать квартиру",
"apartmentCard.area": "Площадь:",
"apartmentCard.rooms": "Комнаты:",
"apartmentCard.edit": "Изменить",
"apartmentCard.delete": "Удалить",
"rooms.title": "Комнаты",
"rooms.add": "Добавить комнату",
"rooms.addFirst": "Добавить первую комнату",
"rooms.fromTemplate": "Из шаблона",
"rooms.empty.title": "Нет комнат",
"rooms.empty.description": "Добавьте комнаты для создания планировок.",
"rooms.delete.title": "Удалить комнату",
"rooms.delete.message": "Вы уверены, что хотите удалить \"{{name}}\"? Все стены, проёмы, электрика и мебель в этой комнате будут удалены. Это действие нельзя отменить.",
"rooms.error.load": "Не удалось загрузить квартиру",
"rooms.error.operation": "Операция не удалась",
"rooms.error.create": "Не удалось создать комнату",
"rooms.error.delete": "Не удалось удалить комнату",
"rooms.count": "{{count}} комната",
"rooms.count_one": "{{count}} комната",
"rooms.count_few": "{{count}} комнаты",
"rooms.count_many": "{{count}} комнат",
"rooms.count_other": "{{count}} комнат",
"rooms.dimensions": "{{width}} x {{height}} м",
"rooms.vertices": "{{count}} вершин",
"rooms.wallHeight": "Высота стен: {{value}} м",
"rooms.plinth": "Плинтус: {{value}} м",
"roomForm.titleNew": "Новая комната",
"roomForm.titleEdit": "Редактировать комнату",
"roomForm.name": "Название комнаты",
"roomForm.namePlaceholder": "напр., Гостиная",
"roomForm.shape": "Форма",
"roomForm.rectangular": "Прямоугольная",
"roomForm.customPolygon": "Произвольный многоугольник",
"roomForm.width": "Ширина (м)",
"roomForm.widthPlaceholder": "напр., 4,5",
"roomForm.height": "Длина (м)",
"roomForm.heightPlaceholder": "напр., 3,2",
"roomForm.customNote": "Произвольные формы можно нарисовать в редакторе комнаты.",
"roomForm.currentVertices": " Текущая форма имеет {{count}} вершин.",
"roomForm.defaultShape": " Будет создана прямоугольная форма по умолчанию.",
"roomForm.wallProperties": "Свойства стен",
"roomForm.wallHeight": "Высота стен (м)",
"roomForm.plinthProperties": "Свойства плинтуса",
"roomForm.plinthHeight": "Высота (м)",
"roomForm.plinthThickness": "Толщина (м)",
"roomForm.plinthHeightHint": "По умолчанию: 0,06 м",
"roomForm.plinthThicknessHint": "По умолчанию: 0,01 м",
"roomForm.saving": "Сохранение...",
"roomForm.creating": "Создание...",
"roomForm.saveChanges": "Сохранить изменения",
"roomForm.createRoom": "Создать комнату",
"roomForm.widthError": "Ширина должна быть положительной",
"roomForm.heightError": "Высота должна быть положительной",
"roomCard.edit": "Изменить",
"roomCard.delete": "Удалить",
"common.cancel": "Отмена",
"common.delete": "Удалить",
"common.deleting": "Удаление...",
"common.loading": "Загрузка...",
"common.dismissError": "Закрыть ошибку",
"editor.save": "Сохранить",
"editor.saving": "Сохранение...",
"editor.saveFailed": "Ошибка сохранения: {{error}}",
"editor.error.load": "Не удалось загрузить комнату",
"editor.roomNotFound": "Комната не найдена",
"editor.loading3D": "Загрузка 3D вида...",
"editor.unsavedChanges": "У вас есть несохранённые изменения. Вы уверены, что хотите уйти?",
"toolbar.select": "Выбрать",
"toolbar.door": "Дверь",
"toolbar.window": "Окно",
"toolbar.electrical": "Электрика",
"toolbar.furniture": "Мебель",
"toolbar.measure": "Измерить",
"toolbar.annotate": "Аннотация",
"toolbar.undo": "Отменить (Ctrl+Z)",
"toolbar.redo": "Повторить (Ctrl+Shift+Z)",
"toolbar.zoomIn": "Увеличить",
"toolbar.zoomOut": "Уменьшить",
"toolbar.grid": "Сетка",
"toolbar.snap": "Привязка",
"toolbar.walls": "Стены",
"toolbar.elec": "Элек",
"toolbar.furn": "Мебель",
"toolbar.meas": "Разм",
"toolbar.toggleGrid": "Переключить сетку",
"toolbar.toggleSnap": "Переключить привязку",
"toolbar.toggleWalls": "Переключить слой стен",
"toolbar.toggleElectrical": "Переключить слой электрики",
"toolbar.toggleFurniture": "Переключить слой мебели",
"toolbar.toggleMeasurements": "Переключить слой размеров",
"toolbar.import": "Импорт JSON",
"toolbar.export": "Экспорт (PNG/PDF/JSON)",
"toolbar.saveShortcut": "Сохранить (Ctrl+S)",
"toolbar.view2D": "2D",
"toolbar.view3D": "3D Просмотр",
"toolbar.viewProjections": "Проекции",
"toolbar.alignLeft": "Выровнять по левому краю",
"toolbar.alignCenterH": "Центрировать по горизонтали",
"toolbar.alignRight": "Выровнять по правому краю",
"toolbar.alignTop": "Выровнять по верхнему краю",
"toolbar.alignCenterV": "Центрировать по вертикали",
"toolbar.alignBottom": "Выровнять по нижнему краю",
"toolbar.distributeH": "Распределить по горизонтали",
"toolbar.distributeV": "Распределить по вертикали",
"properties.title": "Свойства",
"properties.area": "Площадь",
"properties.perimeter": "Периметр",
"properties.noSelection": "Элемент не выбран",
"properties.selectHint": "Нажмите на элемент, чтобы увидеть его свойства",
"properties.multipleSelected": "Выбрано элементов: {{count}}",
"properties.roomInfo": "Информация о комнате",
"properties.name": "Название",
"properties.wallHeight": "Высота стен",
"properties.plinthHeight": "Высота плинтуса",
"properties.walls": "Стены",
"properties.openings": "Проёмы",
"properties.wall": "Стена",
"properties.length": "Длина",
"properties.thickness": "Толщина",
"properties.startX": "Начало X",
"properties.startY": "Начало Y",
"properties.endX": "Конец X",
"properties.endY": "Конец Y",
"properties.direction": "Направление",
"properties.door": "Дверь",
"properties.window": "Окно",
"properties.width": "Ширина",
"properties.height": "Высота",
"properties.position": "Положение",
"properties.elevation": "Высота от пола",
"properties.wallLength": "Длина стены",
"properties.type": "Тип",
"properties.variant": "Вариант",
"properties.x": "X",
"properties.y": "Y",
"properties.rotation": "Поворот",
"properties.wallMounted": "На стене",
"properties.yes": "Да",
"properties.depth": "Глубина",
"properties.wallColor": "Цвет стен",
"properties.floorType": "Пол",
"floor.CONCRETE": "Бетон",
"floor.WOOD_LIGHT": "Светлое дерево",
"floor.WOOD_MEDIUM": "Среднее дерево",
"floor.WOOD_DARK": "Тёмное дерево",
"floor.WOOD_HERRINGBONE": "Ёлочка",
"floor.TILE_WHITE": "Белая плитка",
"floor.TILE_GRAY": "Серая плитка",
"floor.LAMINATE": "Ламинат",
"properties.addNote": "Добавить заметку",
"properties.stand": "Подставка",
"properties.openDirection": "Направление открытия",
"properties.openDir.LEFT": "Влево",
"properties.openDir.RIGHT": "Вправо",
"properties.openDir.INWARD": "Внутрь",
"properties.openDir.OUTWARD": "Наружу",
"properties.openDir.LEFT": "Влево",
"properties.openDir.RIGHT": "Вправо",
"properties.openDir.INWARD": "Внутрь",
"properties.openDir.OUTWARD": "Наружу",
"electrical.title": "Электрика",
"electrical.outlets": "Розетки",
"electrical.switches": "Выключатели",
"electrical.junction": "Распределительная коробка",
"electrical.lights": "Освещение",
"electrical.cable": "Кабель",
"furniture.title": "Мебель",
"cableLength.label": "Длина кабеля:",
"projection.title": "Проекции стен",
"projection.grid": "Сетка",
"projection.tabs": "Вкладки",
"projection.noWall": "Стена не выбрана",
"templates.title": "Новая комната из шаблона",
"templates.create": "Создать комнату",
"templates.roomName": "Название комнаты (необязательно)",
"templates.bedroom": "Спальня",
"templates.bedroomDesc": "Стандартная спальня (4м x 3,5м) с дверью и окном",
"templates.kitchen": "Кухня",
"templates.kitchenDesc": "Кухня (3,5м x 3м) с дверью",
"templates.bathroom": "Ванная",
"templates.bathroomDesc": "Ванная комната (2,5м x 2м)",
"templates.livingRoom": "Гостиная",
"templates.livingRoomDesc": "Просторная гостиная (5м x 4м) с окном",
"templates.office": "Кабинет",
"templates.officeDesc": "Домашний кабинет (3м x 2,5м)",
"templates.emptyRoom": "Пустая комната",
"templates.emptyRoomDesc": "Пустая комната (3м x 3м)",
"export.title": "Экспорт",
"export.format": "Формат",
"export.png": "PNG изображение",
"export.pdf": "PDF документ",
"export.json": "JSON данные",
"export.scope": "Область",
"export.currentView": "Текущий вид",
"export.allRoomViews": "Все виды комнаты",
"export.options": "Параметры",
"export.includeGrid": "Включить сетку",
"export.scaleFactor": "Масштаб:",
"export.exporting": "Экспорт...",
"export.exportBtn": "Экспорт",
"export.generating": "Создание экспорта...",
"export.error.3dNotAvailable": "3D холст недоступен",
"export.error.2dNotAvailable": "2D холст недоступен",
"export.error.failed": "Ошибка экспорта",
"floorPlan.back": "Назад",
"floorPlan.reset": "Сброс",
"floorPlan.dblClickToEdit": "Двойной клик для редактирования",
"annotation.editPrompt": "Редактировать текст аннотации:",
"editor.importFailed": "Ошибка импорта: {{error}}",
"projection.clickToPlace": "Нажмите на стену, чтобы разместить элемент",
"export.pdfTitle": "План дома",
"export.pdfGenerated": "Создано: {{date}}",
"export.pdfRoomCount": "{{count}} комната",
"export.pdfRoomCount_one": "{{count}} комната",
"export.pdfRoomCount_few": "{{count}} комнаты",
"export.pdfRoomCount_many": "{{count}} комнат",
"export.pdfRoomCount_other": "{{count}} комнат",
"export.pdfWallProjections": "{{name}} — Проекции стен",
"toast.notifications": "Уведомления",
"toast.dismiss": "Закрыть уведомление",
"theme.toggle": "Переключить тёмную тему",
"language.toggle": "Сменить язык"
}