Files
personal-ai-assistant/frontend/public/locales/ru/translation.json
dolgolyov.alexei d86d53f473 Phase 10: Per-User Rate Limits — messages + tokens, quota UI, admin usage
Backend:
- max_ai_messages_per_day + max_ai_tokens_per_day on User model (nullable, override)
- Migration 008: add columns + seed default settings (100 msgs, 500K tokens)
- usage_service: count today's messages + tokens, check quota, get limits
- GET /chats/quota returns usage vs limits + reset time
- POST /chats/{id}/messages checks quota before streaming (429 if exceeded)
- Admin user schemas expose both limit fields
- GET /admin/usage returns per-user daily message + token counts
- admin_user_service allows updating both limit fields

Frontend:
- Chat header shows "X/Y messages · XK/YK tokens" with red highlight at limit
- Quota refreshes every 30s via TanStack Query
- Admin usage page with table: user, messages today, tokens today
- Route + sidebar entry for admin usage
- English + Russian translations

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 15:44:51 +03:00

223 lines
9.7 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.
{
"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": "Шаблоны",
"usage": "Использование"
},
"dashboard": {
"welcome": "Добро пожаловать, {{name}}",
"subtitle": "Ваш персональный ИИ-ассистент"
},
"chat": {
"new_chat": "Новый чат",
"no_chats": "Пока нет чатов. Создайте первый.",
"no_messages": "Начните разговор...",
"select_chat": "Выберите чат для начала общения",
"type_message": "Введите сообщение...",
"send": "Отправить",
"archive": "Архивировать",
"unarchive": "Разархивировать",
"delete_confirm": "Вы уверены, что хотите удалить этот чат?",
"limit_reached": "Достигнут лимит чатов",
"streaming": "ИИ думает...",
"quota_messages": "{{used}}/{{limit}} сообщений",
"quota_tokens": "{{used}}K/{{limit}}K токенов"
},
"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": "Лимит чатов для новых пользователей"
},
"admin_usage": {
"title": "Статистика использования",
"user": "Пользователь",
"messages": "Сообщения сегодня",
"tokens": "Токены сегодня",
"no_data": "Данных пока нет."
},
"common": {
"loading": "Загрузка...",
"error": "Произошла ошибка",
"notFound": "Страница не найдена",
"goHome": "На главную",
"save": "Сохранить",
"cancel": "Отмена",
"delete": "Удалить",
"edit": "Редактировать",
"create": "Создать",
"search": "Поиск"
}
}