export type UiLanguage = "ru" | "en"; export function normalizeLanguage(value: string | undefined): UiLanguage { return value === "en" ? "en" : "ru"; } export const messages = { ru: { productSubtitle: "Семантическое пространство 1С", nav: { overview: "Обзор", projects: "Проекты 1С", graph: "Граф", objects: "Объекты", review: "Проверка", knowledge: "Знания", patterns: "Паттерны", privacy: "Приватность", aiUsage: "Расход ИИ", operations: "Операции", settings: "Настройки" }, searchPlaceholder: "Поиск по 1С объектам, процедурам, знаниям", rights: "Права", projectSettings: "Настройки", createProject: "+ Проект", notifications: "Уведомления", profile: "Профиль", workspaceSelector: "Компания", projectSelector: "Проект", environmentSelector: "Среда", activeTaskSelector: "Задача", languageRu: "Русский", languageEn: "English", commandLanguageNote: "Команды: русский по умолчанию, английский доступен", apiOnline: "API доступен", apiOffline: "API недоступен", overview: "Обзор", projects: "Проекты", objects: "Объекты", configurationTree: "Дерево конфигурации", openWindows: "Открытые окна", projectDashboard: "Обзор проекта 1С", projectDashboardDescription: "Рабочая сводка по выбранной 1С-конфигурации: состояние, проверки, снимки и быстрый переход в открытые объекты.", contextPanel: "Контекст", contextInspector: "Контекстный инспектор", owner: "Владелец", subsystem: "Подсистема", criticality: "Критичность", activeTask: "Активная задача", calls: "Вызовы", riskContext: "Риски и изменения", runtimeIncidents: "Инциденты выполнения", heroBadge: "Семантическое ядро 1С", title: "Операционный контур 1С", subtitle: "Семантический граф, проверка, знания, приватность и управление ИИ в одном рабочем представлении.", review: "Проверка", graph: "Граф 1С", knowledge: "Знания", governance: "Управление", aiPolicy: "Политика ИИ", aiUsage: "Расход ИИ", projectWorkspace: "Рабочее пространство 1С", projectWorkspaceDescription: "Снимок, проверка, знания, UI-формы, интеграции и регламентные задания выбранного 1С-проекта.", selectedProject: "Выбранный проект", openProject: "Открыть проект", openInEditor: "Открыть в редакторе", nodes: "Узлы", edges: "Связи", procedures: "Процедуры", queries: "Запросы", writes: "Записи", reviewFindings: "Замечания проверки", noReviewFindings: "Замечаний нет", severity: "Уровень", finding: "Замечание", source: "Источник", forms: "Формы", commands: "Команды", elements: "Элементы", integrations: "Интеграции", scheduledJobs: "Регламентные задания", knowledgeCoverage: "Покрытие знаниями", covered: "Покрыто", uncovered: "Не покрыто", unsecuredObjects: "Без прав ролей", unownedObjects: "Без владельца", sensitiveFields: "Чувствительные поля", permissionState: "Права доступа", permissionStateDescription: "Текущий экран показывает только чтение семантического состояния; действия изменения будут требовать роли владельца проекта.", commandPalette: "Командная строка", commandPlaceholder: "Найти объект 1С, процедуру или команду", savedView: "Представление", auditTrail: "Аудит", authoringHistory: "История изменений", noAuthoringChanges: "Пока нет сохранённых authoring change-set", version: "Версия", approvedBy: "Подтвердил", aiContext: "Контекст ИИ", model: "Модель", tokenImpact: "Влияние на токены", noProjectData: "Нет данных выбранного проекта", noProjectDataDescription: "Снимок сохранён, но проектные данные ещё не доступны для панели.", ideWorkspace: "IDE 1С", ideWorkspaceDescription: "Современная рабочая среда 1С: модуль, форма, свойства, события, версии, документация, знания, обучение, AI-подсказки и semantic diff.", objectTree: "Дерево объектов", bslEditor: "Редактор BSL", procedureOutline: "Outline процедур", findUsages: "Использования", quickFixes: "Быстрые исправления", insertGuardClause: "Вставить проверку отказа", extractProcedure: "Выделить процедуру", addKnowledgeLink: "Связать со знанием", moduleMode: "Модуль", formMode: "Форма", propertiesMode: "Свойства", eventsMode: "События", versionsMode: "Версии", documentationMode: "Документация", knowledgeMode: "Знания", learningMode: "Обучение", formDesigner: "Дизайнер формы", eventsInspector: "Инспектор событий", knowledgeLearning: "Знания и обучение", knowledgeLearningDescription: "AI связывает текущий объект с документацией, паттернами, историей решений и учебными материалами команды.", postAndClose: "Провести и закрыть", saveAndClose: "Записать и закрыть", save: "Записать", create: "Создать", search: "Поиск", emptyList: "Список пуст", mainSection: "Основное", nameField: "Наименование", code: "Код", comment: "Комментарий", client: "Клиент", agent: "Агент", sites: "Сайты", compensationTerms: "Условия возмещения", agencyAgreements: "Агентские соглашения", telegram: "Телеграм", mail: "Почта", sentToBankCompanyName: "Наименование компании, отправленное в банк", mergeProject: "Мерч проект", legalEntity: "Юр лицо", result: "Результат", author: "Автор", editor: "Редактор", creationDate: "Дата создания", editDate: "Дата редактирования", supplier: "Поставщик", contract: "Договор", documentNumber: "Номер", operation: "Операция", goods: "Товары", services: "Услуги", additional: "Дополнительно", numberSign: "N", item: "Номенклатура", quantity: "Количество", price: "Цена", amount: "Сумма", eventName: "Событие", objectVersioningDescription: "История SFERA хранится на уровне объекта 1С: каждое изменение связано с diff, задачей, автором и rollback-точкой.", documentationModeDescription: "Документация открывается рядом с объектом: назначение, бизнес-правила, связи с формами, отчётами, командами и регламентами.", knowledgeModeDescription: "База знаний связывает текущий объект с паттернами команды, BSP/vendor docs, обсуждениями, решениями и известными рисками.", learningModeDescription: "Обучение показывает, что можно безопасно написать в текущем контексте, какие переменные доступны и какие стандарты команды применимы.", problemsPanel: "Проблемы", outputPanel: "Вывод", testsPanel: "Тесты", referencesPanel: "Ссылки", propertiesInspector: "Инспектор свойств", semanticDiff: "Семантический diff", aiPairProgrammer: "AI-помощник", currentContext: "Текущий контекст", availableVariables: "Доступные переменные", localVariables: "Локальные переменные", objectAttributes: "Реквизиты объекта", tabularSections: "Табличные части", formElements: "Элементы формы", metadataDraft: "Черновик объекта 1С", metadataDraftDescription: "SFERA создаёт объект как версионированный черновик workspace: реквизиты, табличные части, формы и diff без записи в production 1С.", objectKind: "Тип объекта", objectName: "Имя объекта", attributeName: "Имя реквизита", attributeType: "Тип", tabularSectionName: "Имя табличной части", formName: "Имя формы", commandName: "Имя команды", commandHandler: "Обработчик", synonym: "Синоним", requiredFlag: "Обязательный", addAttribute: "Добавить реквизит", addTabularColumn: "Добавить колонку", addForm: "Добавить форму", addCommand: "Добавить команду", applyMetadataDraft: "Создать черновик", suggestedCompletion: "Предложение продолжения", guardedApply: "Безопасное применение", versionPreview: "Preview версии", affectedNodes: "Затронутые узлы", applyBlocked: "Применение заблокировано", workspaceApplyReady: "Можно сохранить в workspace-историю SFERA", productionApplyDisabled: "Запись в production 1С отключена", previewRequired: "Требуется preview", applyToSfera: "Применить в SFERA", rollbackPlan: "План отката", authoringMode: "Режим разработки", workspaceHistoryOnly: "только workspace-история SFERA", impactBeforeApply: "Анализ влияния до применения", reviewBeforeApply: "Проверка до применения", versionKind: "Тип версии", lineage: "Линия версий", parentVersion: "Родительская версия", versionDiff: "Diff версии", taskLabel: "Задача", sessionLabel: "Сессия", fullPayload: "Полные данные", summaryOnly: "Кратко", loading: "Загрузка", rootVersion: "корневая", agentOnline: "Агент онлайн", online: "онлайн", offline: "офлайн", snapshotStatus: "Снимок", agentStatus: "Агент", parserStatus: "Парсер", diagnosticsStatus: "Диагностика", taskStatus: "Задача", privacyStatus: "Приватность", metadataOnly: "только метаданные", sferaProjectTree: "Дерево проекта SFERA", sirObjects: "Объекты SIR", aiHandlers: "AI-обработчики", semanticRules: "Семантические правила", reviewPolicies: "Политики проверки", knowledgeBindings: "Связи знаний", agentCommands: "Команды агентов", rollbackTemplates: "Шаблоны отката", highReviewFindings: "Критичные замечания проверки", policyGated: "по политике доступа", graphEdges: "Связи графа", aiShort: "ИИ", appliedToWorkspace: "Записано в workspace", rolledBackToWorkspace: "Откат записан в workspace", blocked: "заблокировано", ready: "готово", required: "требуется", checked: "проверено", applying: "Применяется...", rollingBack: "Откатываем...", building: "Строим...", savedToSfera: "Записано в SFERA", guardedApplyNote: "Безопасная запись из рабочего места SFERA IDE", rollbackApplyNote: "План отката проверен в SFERA IDE", aiSuggestion: "AI предлагает код с учётом текущей процедуры, переменных, регистра и прав доступа.", editorDirty: "Есть несохранённые изменения", readOnlyPrototype: "Preview-режим: запись только в workspace-историю SFERA.", addLine: "Добавить строку", removeLine: "Удалить строку", selectedObject: "Выбранный объект", objectOverview: "Обзор объекта", objectOverviewDescription: "Сводка выбранного объекта 1С: структура, формы, команды, связи, риски, знания и версии.", line: "Строка", snapshots: "Снимки", activeProjects: "активных проектов", relations: "связей", packages: "пакетов", aiTokens: "AI токены", requests: "запросов", current: "актуально", latestSnapshots: "Последние снимки SIR", snapshotsDescription: "Проекты, доступные для проверки, графа и анализа влияния.", open: "Открыть", project: "Проект", snapshot: "Снимок", hash: "Хэш", status: "Статус", stored: "сохранено", none: "нет", noSnapshots: "Нет сохранённых снимков", noSnapshotsDescription: "После индексации 1С-конфигурации список появится здесь.", governanceDescription: "Контроль владельцев, приватности, расхода ИИ и покрытия знаниями.", owners: "Владельцы", tasks: "Задачи", privacy: "Приватность", tokenLimit: "Лимит токенов", used: "Использовано", remaining: "Осталось", unlimited: "без лимита", apiUnavailable: "API недоступен", unknownApiError: "Неизвестная ошибка API" }, en: { productSubtitle: "1C Semantic Workspace", nav: { overview: "Overview", projects: "1C Projects", graph: "Graph", objects: "Objects", review: "Review", knowledge: "Knowledge", patterns: "Patterns", privacy: "Privacy", aiUsage: "AI Usage", operations: "Operations", settings: "Settings" }, searchPlaceholder: "Search 1C objects, routines, knowledge", rights: "Access", projectSettings: "Settings", createProject: "+ Project", notifications: "Notifications", profile: "Profile", workspaceSelector: "Workspace", projectSelector: "Project", environmentSelector: "Env", activeTaskSelector: "Task", languageRu: "Русский", languageEn: "English", commandLanguageNote: "Commands: Russian by default, English available", apiOnline: "API online", apiOffline: "API offline", overview: "Overview", projects: "Projects", objects: "Objects", configurationTree: "Configuration tree", openWindows: "Open windows", projectDashboard: "1C project overview", projectDashboardDescription: "Working summary for the selected 1C configuration: state, checks, snapshots, and quick jumps to open objects.", contextPanel: "Context", contextInspector: "Context inspector", owner: "Owner", subsystem: "Subsystem", criticality: "Criticality", activeTask: "Active task", calls: "Calls", riskContext: "Risks and changes", runtimeIncidents: "Runtime incidents", heroBadge: "1C semantic core", title: "1C Operational Workspace", subtitle: "Semantic graph, review, knowledge, privacy, and AI governance in one working view.", review: "Review", graph: "1C Graph", knowledge: "Knowledge", governance: "Governance", aiPolicy: "AI policy", aiUsage: "AI usage", projectWorkspace: "1C Workspace", projectWorkspaceDescription: "Snapshot, review, knowledge, UI forms, integrations, and scheduled jobs for the selected 1C project.", selectedProject: "Selected project", openProject: "Open project", openInEditor: "Open in editor", nodes: "Nodes", edges: "Edges", procedures: "Procedures", queries: "Queries", writes: "Writes", reviewFindings: "Review findings", noReviewFindings: "No findings", severity: "Severity", finding: "Finding", source: "Source", forms: "Forms", commands: "Commands", elements: "Elements", integrations: "Integrations", scheduledJobs: "Scheduled jobs", knowledgeCoverage: "Knowledge coverage", covered: "Covered", uncovered: "Uncovered", unsecuredObjects: "No role access", unownedObjects: "No owner", sensitiveFields: "Sensitive fields", permissionState: "Permissions", permissionStateDescription: "This screen currently exposes read-only semantic state; mutation actions will require the project owner role.", commandPalette: "Command line", commandPlaceholder: "Find a 1C object, routine, or command", savedView: "View", auditTrail: "Audit", authoringHistory: "Change history", noAuthoringChanges: "No saved authoring change sets yet", version: "Version", approvedBy: "Approved by", aiContext: "AI context", model: "Model", tokenImpact: "Token impact", noProjectData: "No selected project data", noProjectDataDescription: "The snapshot is stored, but project details are not yet available to the panel.", ideWorkspace: "1C IDE", ideWorkspaceDescription: "A modern 1C workspace: module, form, properties, events, versions, docs, knowledge, training, AI suggestions, and semantic diff.", objectTree: "Object tree", bslEditor: "BSL editor", procedureOutline: "Procedure outline", findUsages: "Find usages", quickFixes: "Quick fixes", insertGuardClause: "Insert guard clause", extractProcedure: "Extract procedure", addKnowledgeLink: "Link knowledge", moduleMode: "Module", formMode: "Form", propertiesMode: "Properties", eventsMode: "Events", versionsMode: "Versions", documentationMode: "Docs", knowledgeMode: "Knowledge", learningMode: "Training", formDesigner: "Form designer", eventsInspector: "Events inspector", knowledgeLearning: "Knowledge and training", knowledgeLearningDescription: "AI links the current object with docs, patterns, decision history, and team learning material.", postAndClose: "Post and close", saveAndClose: "Save and close", save: "Save", create: "Create", search: "Search", emptyList: "List is empty", mainSection: "Main", nameField: "Name", code: "Code", comment: "Comment", client: "Client", agent: "Agent", sites: "Sites", compensationTerms: "Compensation terms", agencyAgreements: "Agency agreements", telegram: "Telegram", mail: "Mail", sentToBankCompanyName: "Company name sent to bank", mergeProject: "Merge project", legalEntity: "Legal entity", result: "Result", author: "Author", editor: "Editor", creationDate: "Creation date", editDate: "Edit date", supplier: "Supplier", contract: "Contract", documentNumber: "Number", operation: "Operation", goods: "Goods", services: "Services", additional: "Additional", numberSign: "No.", item: "Item", quantity: "Quantity", price: "Price", amount: "Amount", eventName: "Event", objectVersioningDescription: "SFERA history is stored at the 1C object level: every change is linked to a diff, task, author, and rollback point.", documentationModeDescription: "Documentation opens next to the object: purpose, business rules, links with forms, reports, commands, and jobs.", knowledgeModeDescription: "The knowledge base links the current object with team patterns, BSP/vendor docs, discussions, decisions, and known risks.", learningModeDescription: "Training shows what can be safely written in the current context, which variables are available, and which team standards apply.", problemsPanel: "Problems", outputPanel: "Output", testsPanel: "Tests", referencesPanel: "References", propertiesInspector: "Properties inspector", semanticDiff: "Semantic diff", aiPairProgrammer: "AI pair programmer", currentContext: "Current context", availableVariables: "Available variables", localVariables: "Local variables", objectAttributes: "Object attributes", tabularSections: "Tabular sections", formElements: "Form elements", metadataDraft: "1C object draft", metadataDraftDescription: "SFERA creates the object as a versioned workspace draft: attributes, tabular sections, forms, and diff without writing to production 1C.", objectKind: "Object kind", objectName: "Object name", attributeName: "Attribute name", attributeType: "Type", tabularSectionName: "Tabular section name", formName: "Form name", commandName: "Command name", commandHandler: "Handler", synonym: "Synonym", requiredFlag: "Required", addAttribute: "Add attribute", addTabularColumn: "Add column", addForm: "Add form", addCommand: "Add command", applyMetadataDraft: "Create draft", suggestedCompletion: "Suggested completion", guardedApply: "Guarded apply", versionPreview: "Version preview", affectedNodes: "Affected nodes", applyBlocked: "Apply blocked", workspaceApplyReady: "Ready to save into SFERA workspace history", productionApplyDisabled: "Production 1C write is disabled", previewRequired: "Preview required", applyToSfera: "Apply to SFERA", rollbackPlan: "Rollback plan", authoringMode: "Authoring mode", workspaceHistoryOnly: "SFERA workspace history only", impactBeforeApply: "Impact before apply", reviewBeforeApply: "Review before apply", versionKind: "Version kind", lineage: "Lineage", parentVersion: "Parent version", versionDiff: "Version diff", taskLabel: "Task", sessionLabel: "Session", fullPayload: "Full payload", summaryOnly: "Summary", loading: "Loading", rootVersion: "root", agentOnline: "Agent online", online: "online", offline: "offline", snapshotStatus: "Snapshot", agentStatus: "Agent", parserStatus: "Parser", diagnosticsStatus: "Diagnostics", taskStatus: "Task", privacyStatus: "Privacy", metadataOnly: "metadata-only", sferaProjectTree: "SFERA Project", sirObjects: "SIR objects", aiHandlers: "AI handlers", semanticRules: "Semantic rules", reviewPolicies: "Review policies", knowledgeBindings: "Knowledge bindings", agentCommands: "Agent commands", rollbackTemplates: "Rollback templates", highReviewFindings: "Review HIGH findings", policyGated: "policy-gated", graphEdges: "Graph edges", aiShort: "AI", appliedToWorkspace: "Applied to workspace", rolledBackToWorkspace: "Rolled back to workspace", blocked: "blocked", ready: "ready", required: "required", checked: "checked", applying: "Applying...", rollingBack: "Rolling back...", building: "Loading...", savedToSfera: "Saved to SFERA", guardedApplyNote: "Guarded apply from SFERA IDE workbench", rollbackApplyNote: "Rollback preview checked in SFERA IDE", aiSuggestion: "AI suggests code using the current routine, variables, register, and access context.", editorDirty: "Unsaved changes", readOnlyPrototype: "Preview mode: writes only to SFERA workspace history.", addLine: "Add line", removeLine: "Remove line", selectedObject: "Selected object", objectOverview: "Object overview", objectOverviewDescription: "Summary of the selected 1C object: structure, forms, commands, links, risks, knowledge, and versions.", line: "Line", snapshots: "Snapshots", activeProjects: "active projects", relations: "relations", packages: "packs", aiTokens: "AI tokens", requests: "requests", current: "current", latestSnapshots: "Latest SIR snapshots", snapshotsDescription: "Projects available for review, graph, and impact analysis.", open: "Open", project: "Project", snapshot: "Snapshot", hash: "Hash", status: "Status", stored: "stored", none: "none", noSnapshots: "No stored snapshots", noSnapshotsDescription: "Indexed 1C configurations will appear here.", governanceDescription: "Owners, privacy, AI usage, and knowledge coverage controls.", owners: "Owners", tasks: "Tasks", privacy: "Privacy", tokenLimit: "Token limit", used: "Used", remaining: "Remaining", unlimited: "unlimited", apiUnavailable: "API unavailable", unknownApiError: "Unknown API error" } } as const;