Backend: - PdfTemplate model with locale field + UNIQUE(name, locale) constraint - Migration 007: pdf_templates table + template_id FK on generated_pdfs - Template service: CRUD, Jinja2 validation, render preview with sample data - Admin endpoints: CRUD /admin/pdf-templates + POST preview - User endpoint: GET /pdf/templates (active templates list) - pdf_service: resolves template from DB by ID or falls back to default for the appropriate locale - AI generate_pdf tool accepts optional template_id - Seed script + 4 HTML template files: - Basic Report (en/ru) — general-purpose report - Medical Report (en/ru) — health-focused with disclaimers Frontend: - Admin PDF templates page with editor, locale selector, live preview (iframe), template variables reference panel - PDF page: template selector dropdown in generation form - API clients for admin CRUD + user template listing - Sidebar: admin templates link - English + Russian translations Also added Phase 9 (OAuth) and Phase 10 (Rate Limits) placeholders to GeneralPlan. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
213 lines
9.3 KiB
JSON
213 lines
9.3 KiB
JSON
{
|
||
"auth": {
|
||
"login": "Войти",
|
||
"register": "Регистрация",
|
||
"email": "Email",
|
||
"password": "Пароль",
|
||
"confirmPassword": "Подтвердите пароль",
|
||
"username": "Имя пользователя",
|
||
"fullName": "Полное имя",
|
||
"rememberMe": "Запомнить меня",
|
||
"submit": "Отправить",
|
||
"noAccount": "Нет аккаунта?",
|
||
"hasAccount": "Уже есть аккаунт?",
|
||
"loginTitle": "С возвращением",
|
||
"loginSubtitle": "Войдите в свой аккаунт",
|
||
"registerTitle": "Создать аккаунт",
|
||
"registerSubtitle": "Начните работу с персональным ИИ-ассистентом",
|
||
"errors": {
|
||
"invalidCredentials": "Неверный email или пароль",
|
||
"emailExists": "Пользователь с таким email или именем уже существует",
|
||
"passwordMismatch": "Пароли не совпадают",
|
||
"passwordMinLength": "Пароль должен содержать минимум 8 символов",
|
||
"usernameFormat": "Имя пользователя: 3-50 символов (буквы, цифры, _ или -)",
|
||
"required": "Это поле обязательно"
|
||
}
|
||
},
|
||
"layout": {
|
||
"dashboard": "Главная",
|
||
"chats": "Чаты",
|
||
"documents": "Документы",
|
||
"memory": "Память",
|
||
"notifications": "Уведомления",
|
||
"profile": "Профиль",
|
||
"logout": "Выйти",
|
||
"settings": "Настройки",
|
||
"admin": "Администрирование",
|
||
"users": "Пользователи",
|
||
"context": "Контекст",
|
||
"skills": "Навыки",
|
||
"personal_context": "Мой контекст",
|
||
"pdf": "PDF отчёты",
|
||
"pdf_templates": "Шаблоны"
|
||
},
|
||
"dashboard": {
|
||
"welcome": "Добро пожаловать, {{name}}",
|
||
"subtitle": "Ваш персональный ИИ-ассистент"
|
||
},
|
||
"chat": {
|
||
"new_chat": "Новый чат",
|
||
"no_chats": "Пока нет чатов. Создайте первый.",
|
||
"no_messages": "Начните разговор...",
|
||
"select_chat": "Выберите чат для начала общения",
|
||
"type_message": "Введите сообщение...",
|
||
"send": "Отправить",
|
||
"archive": "Архивировать",
|
||
"unarchive": "Разархивировать",
|
||
"delete_confirm": "Вы уверены, что хотите удалить этот чат?",
|
||
"limit_reached": "Достигнут лимит чатов",
|
||
"streaming": "ИИ думает..."
|
||
},
|
||
"admin": {
|
||
"context_editor": "Редактор основного контекста",
|
||
"context_placeholder": "Введите системный промпт для ИИ-ассистента...",
|
||
"save": "Сохранить",
|
||
"saved": "Сохранено",
|
||
"unsaved_changes": "Несохранённые изменения",
|
||
"version": "Версия",
|
||
"characters": "символов"
|
||
},
|
||
"skills": {
|
||
"my_skills": "Мои навыки",
|
||
"general_skills": "Общие навыки",
|
||
"no_skills": "Навыков пока нет.",
|
||
"no_personal_skills": "Вы ещё не создали персональных навыков.",
|
||
"create_personal": "Создать персональный навык",
|
||
"edit_personal": "Редактировать навык",
|
||
"create_general": "Создать общий навык",
|
||
"edit_general": "Редактировать общий навык",
|
||
"name": "Название",
|
||
"name_placeholder": "напр. Кардиолог",
|
||
"description": "Описание",
|
||
"description_placeholder": "Краткое описание специалиста",
|
||
"system_prompt": "Системный промпт",
|
||
"prompt_placeholder": "Инструкции для ИИ при использовании этого навыка...",
|
||
"icon": "Иконка",
|
||
"no_skill": "Без специалиста",
|
||
"general": "Общие",
|
||
"personal": "Персональные"
|
||
},
|
||
"personal_context": {
|
||
"title": "Персональный контекст",
|
||
"subtitle": "Этот контекст добавляется ко всем вашим разговорам с ИИ",
|
||
"placeholder": "Добавьте личную информацию, которую ИИ должен знать о вас..."
|
||
},
|
||
"notifications": {
|
||
"title": "Уведомления",
|
||
"no_notifications": "Уведомлений пока нет.",
|
||
"mark_all_read": "Отметить все как прочитанные",
|
||
"mark_read": "Отметить как прочитанное",
|
||
"view_all": "Все уведомления",
|
||
"types": {
|
||
"reminder": "Напоминание",
|
||
"alert": "Оповещение",
|
||
"info": "Информация",
|
||
"ai_generated": "От ИИ"
|
||
}
|
||
},
|
||
"documents": {
|
||
"upload": "Загрузить",
|
||
"drop_or_click": "Перетащите файл или нажмите для выбора",
|
||
"doc_type": "Тип документа",
|
||
"no_documents": "Документы ещё не загружены.",
|
||
"download": "Скачать",
|
||
"reindex": "Извлечь текст заново",
|
||
"extracted_text": "Извлечённый текст",
|
||
"search_placeholder": "Поиск по документам...",
|
||
"clear_search": "Очистить",
|
||
"types": {
|
||
"other": "Другое",
|
||
"report": "Отчёт",
|
||
"contract": "Договор",
|
||
"receipt": "Квитанция",
|
||
"certificate": "Сертификат"
|
||
},
|
||
"status": {
|
||
"pending": "Ожидание",
|
||
"processing": "Обработка",
|
||
"completed": "Готово",
|
||
"failed": "Ошибка"
|
||
}
|
||
},
|
||
"memory": {
|
||
"create": "Добавить запись",
|
||
"edit": "Редактировать запись",
|
||
"no_entries": "Записей пока нет. ИИ будет сохранять важную информацию здесь.",
|
||
"category": "Категория",
|
||
"importance": "Важность",
|
||
"title_field": "Заголовок",
|
||
"title_placeholder": "напр. Диабет 2 типа",
|
||
"content_field": "Содержание",
|
||
"content_placeholder": "Подробная информация...",
|
||
"categories": {
|
||
"health": "Здоровье",
|
||
"finance": "Финансы",
|
||
"personal": "Личное",
|
||
"work": "Работа",
|
||
"document_summary": "Сводка документа",
|
||
"other": "Другое"
|
||
},
|
||
"importance_levels": {
|
||
"critical": "Критическая",
|
||
"high": "Высокая",
|
||
"medium": "Средняя",
|
||
"low": "Низкая"
|
||
}
|
||
},
|
||
"pdf": {
|
||
"title": "PDF отчёты",
|
||
"generate": "Сгенерировать PDF",
|
||
"title_placeholder": "Название отчёта...",
|
||
"no_pdfs": "PDF отчёты ещё не создавались.",
|
||
"template": "Шаблон",
|
||
"default_template": "Шаблон по умолчанию"
|
||
},
|
||
"pdf_templates": {
|
||
"title": "Шаблоны PDF",
|
||
"create": "Создать шаблон",
|
||
"edit": "Редактировать шаблон",
|
||
"no_templates": "Шаблонов пока нет.",
|
||
"default": "По умолчанию",
|
||
"inactive": "Неактивен",
|
||
"name": "Название",
|
||
"locale": "Язык",
|
||
"description": "Описание",
|
||
"html_content": "HTML шаблон",
|
||
"preview": "Предпросмотр",
|
||
"variables_ref": "Справка по переменным шаблона",
|
||
"var_title": "Заголовок отчёта",
|
||
"var_user_name": "Полное имя пользователя",
|
||
"var_generated_at": "Дата и время генерации",
|
||
"var_memories": "Список записей памяти (category, title, content, importance)",
|
||
"var_documents": "Список документов (original_filename, doc_type, excerpt)",
|
||
"var_ai_summary": "Резюме от ИИ (необязательно)"
|
||
},
|
||
"admin_users": {
|
||
"title": "Управление пользователями",
|
||
"create": "Создать пользователя",
|
||
"edit": "Редактировать пользователя",
|
||
"max_chats": "Макс. чатов",
|
||
"deactivate": "Деактивировать",
|
||
"activate": "Активировать"
|
||
},
|
||
"admin_settings": {
|
||
"title": "Настройки приложения",
|
||
"self_registration": "Самостоятельная регистрация",
|
||
"self_registration_desc": "Разрешить пользователям самим создавать аккаунты",
|
||
"default_max_chats": "Лимит чатов по умолчанию",
|
||
"default_max_chats_desc": "Лимит чатов для новых пользователей"
|
||
},
|
||
"common": {
|
||
"loading": "Загрузка...",
|
||
"error": "Произошла ошибка",
|
||
"notFound": "Страница не найдена",
|
||
"goHome": "На главную",
|
||
"save": "Сохранить",
|
||
"cancel": "Отмена",
|
||
"delete": "Удалить",
|
||
"edit": "Редактировать",
|
||
"create": "Создать",
|
||
"search": "Поиск"
|
||
}
|
||
}
|