Feature batch: Projects, Recurrence, Group settings, Bug fixes

- Projects CRUD API + invite members
- Task recurrence (daily/weekly/monthly) with auto-creation
- Group time zones + GPS locations settings
- i18n fallback fix (no more undefined labels)
- UX: action buttons in one row
- Chat/Calendar: relative API URLs
- DB: task_assignments, projects tables, recurrence column

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-29 13:49:25 +00:00
parent fc39029ce3
commit b4b8439f80
14 changed files with 1173 additions and 136 deletions

View File

@@ -1,10 +1,133 @@
{
"nav": { "tasks": "Задачи", "calendar": "Календарь", "chat": "Чат", "settings": "Настройки", "goals": "Цели" },
"auth": { "login": "Вход", "register": "Регистрация", "email": "Email", "name": "Имя", "phone": "Телефон", "submit": "Войти", "registerBtn": "Зарегистрироваться", "noAccount": "Нет аккаунта?", "hasAccount": "Есть аккаунт?", "logout": "Выйти" },
"tasks": { "title": "Задачи", "add": "Новая задача", "edit": "Редактировать", "delete": "Удалить", "noTasks": "Нет задач", "all": "Все", "status": { "pending": "Ожидает", "in_progress": "В работе", "done": "Готово", "completed": "Готово", "cancelled": "Отменено" }, "priority": { "urgent": "Срочно", "high": "Высокий", "medium": "Средний", "low": "Низкий" }, "form": { "title": "Название", "description": "Описание", "group": "Группа", "priority": "Приоритет", "status": "Статус", "dueDate": "Срок", "save": "Сохранить", "cancel": "Отмена", "titleRequired": "Название обязательно", "saveError": "Ошибка при сохранении", "saving": "Сохраняю...", "noGroup": "-- Без группы --", "placeholder": "Что нужно сделать...", "descPlaceholder": "Подробности..." }, "noDue": "Без срока", "createFirst": "Создайте первую задачу кнопкой +", "newTask": "Новая задача", "close": "Закрыть", "markDone": "Отметить готовой", "start": "Начать", "reopen": "Открыть заново", "confirmDelete": "Удалить эту задачу?", "editTask": "Редактировать задачу", "saveChanges": "Сохранить изменения", "deleting": "Удаляю...", "created": "Создано", "completed": "Завершено", "loadError": "Ошибка при загрузке задачи", "notFound": "Задача не найдена", "backToTasks": "Назад к задачам" },
"chat": { "title": "AI Ассистент", "placeholder": "Напишите сообщение...", "send": "Отправить", "empty": "Спросите что угодно...", "subtitle": "Задайте любой вопрос о ваших задачах", "startConversation": "Начните разговор", "helpText": "Напишите сообщение, и AI ассистент поможет вам с задачами", "unavailable": "Чат ассистент сейчас недоступен. Попробуйте позже.", "processError": "Извините, не удалось обработать ваше сообщение." },
"settings": { "title": "Настройки", "language": "Язык", "theme": "Тема", "dark": "Тёмный режим", "light": "Светлый режим", "notifications": "Уведомления", "push": "Push уведомления", "email": "E-mail уведомления", "taskReminders": "Напоминания о задачах", "dailySummary": "Ежедневная сводка", "save": "Сохранить настройки", "saved": "Сохранено!", "profile": "Профиль", "appearance": "Внешний вид", "user": "Пользователь" },
"goals": { "title": "Цели", "add": "Новая цель", "progress": "Прогресс", "plan": "Создать план", "report": "AI Отчёт" },
"common": { "back": "Назад", "loading": "Загрузка...", "error": "Ошибка", "confirm": "Подтвердить", "menu": "Меню", "closeMenu": "Закрыть меню", "toggleTheme": "Переключить тему" },
"calendar": { "title": "Календарь" }
}
"nav": {
"tasks": "Задачи",
"calendar": "Календарь",
"chat": "Чат",
"settings": "Настройки",
"goals": "Цели",
"projects": "Проекты"
},
"auth": {
"login": "Вход",
"register": "Регистрация",
"email": "Email",
"name": "Имя",
"phone": "Телефон",
"submit": "Войти",
"registerBtn": "Зарегистрироваться",
"noAccount": "Нет аккаунта?",
"hasAccount": "Есть аккаунт?",
"logout": "Выйти"
},
"tasks": {
"title": "Задачи",
"add": "Новая задача",
"edit": "Редактировать",
"delete": "Удалить",
"noTasks": "Нет задач",
"all": "Все",
"status": {
"pending": "Ожидает",
"in_progress": "В работе",
"done": "Готово",
"completed": "Готово",
"cancelled": "Отменено"
},
"priority": {
"urgent": "Срочно",
"high": "Высокий",
"medium": "Средний",
"low": "Низкий"
},
"form": {
"title": "Название",
"description": "Описание",
"group": "Группа",
"priority": "Приоритет",
"status": "Статус",
"dueDate": "Срок",
"save": "Сохранить",
"cancel": "Отмена",
"titleRequired": "Название обязательно",
"saveError": "Ошибка при сохранении",
"saving": "Сохраняю...",
"noGroup": "-- Без группы --",
"placeholder": "Что нужно сделать...",
"descPlaceholder": "Подробности..."
},
"noDue": "Без срока",
"createFirst": "Создайте первую задачу кнопкой +",
"newTask": "Новая задача",
"close": "Закрыть",
"markDone": "Отметить готовой",
"start": "Начать",
"reopen": "Открыть заново",
"confirmDelete": "Удалить эту задачу?",
"editTask": "Редактировать задачу",
"saveChanges": "Сохранить изменения",
"deleting": "Удаляю...",
"created": "Создано",
"completed": "Завершено",
"loadError": "Ошибка при загрузке задачи",
"notFound": "Задача не найдена",
"backToTasks": "Назад к задачам"
},
"chat": {
"title": "AI Ассистент",
"placeholder": "Напишите сообщение...",
"send": "Отправить",
"empty": "Спросите что угодно...",
"subtitle": "Задайте любой вопрос о ваших задачах",
"startConversation": "Начните разговор",
"helpText": "Напишите сообщение, и AI ассистент поможет вам с задачами",
"unavailable": "Чат ассистент сейчас недоступен. Попробуйте позже.",
"processError": "Извините, не удалось обработать ваше сообщение."
},
"settings": {
"title": "Настройки",
"language": "Язык",
"theme": "Тема",
"dark": "Тёмный режим",
"light": "Светлый режим",
"notifications": "Уведомления",
"push": "Push уведомления",
"email": "E-mail уведомления",
"taskReminders": "Напоминания о задачах",
"dailySummary": "Ежедневная сводка",
"save": "Сохранить настройки",
"saved": "Сохранено!",
"profile": "Профиль",
"appearance": "Внешний вид",
"user": "Пользователь"
},
"goals": {
"title": "Цели",
"add": "Новая цель",
"progress": "Прогресс",
"plan": "Создать план",
"report": "AI Отчёт"
},
"common": {
"back": "Назад",
"loading": "Загрузка...",
"error": "Ошибка",
"confirm": "Подтвердить",
"menu": "Меню",
"closeMenu": "Закрыть меню",
"toggleTheme": "Переключить тему"
},
"calendar": {
"title": "Календарь"
},
"projects": {
"add": "Новый проект",
"empty": "Нет проектов",
"createFirst": "Создайте первый проект кнопкой +",
"namePlaceholder": "Название проекта...",
"descPlaceholder": "Описание проекта...",
"color": "Цвет",
"icon": "Иконка",
"tasks": "Задачи",
"members": "Участники"
}
}