023612ce0a
- Updated timestamps and AST hashes for multiple files in the manifest.json. - Added new test file backend/tests/test_expected_income.py. - Added documentation files: перево́д_между_своими.md and 0002-fixes.md. - Introduced pytest.ini to configure pytest settings, including test paths and warning filters.
543 lines
33 KiB
JSON
543 lines
33 KiB
JSON
{
|
||
"app": {
|
||
"title": "Finspace — семейные финансы",
|
||
"brand": "Finspace",
|
||
"footer": "RUB · приватный семейный гроссбух",
|
||
"financialSpace": "Финансовое пространство",
|
||
"ownerActive": "Владелец · активно",
|
||
"synced": "Все данные синхронизированы"
|
||
},
|
||
"nav": {
|
||
"label": "Основная навигация",
|
||
"month": "Этот месяц",
|
||
"accounts": "Счета",
|
||
"budget": "Бюджет",
|
||
"operations": "Гроссбух",
|
||
"review": "Очередь разбора",
|
||
"imports": "Выписки",
|
||
"analytics": "Аналитика",
|
||
"settings": "Пространство и данные"
|
||
},
|
||
"overview": {
|
||
"subtitle": "Семейные деньги с объяснением текущего месяца.",
|
||
"openBudget": "Открыть весь бюджет",
|
||
"newOperation": "Новая операция",
|
||
"availableNow": "деньги, доступные сейчас",
|
||
"afterPlan": "после плана и ожидаемых доходов",
|
||
"reserved": "зарезервировано по категориям",
|
||
"ofFunded": "потрачено из профинансированного",
|
||
"monthStory": "Как движется месяц",
|
||
"liveState": "Текущее состояние",
|
||
"poolAndIncome": "Пул и полученный доход",
|
||
"funded": "Распределено по категориям",
|
||
"spent": "Потрачено по категориям",
|
||
"poolRemaining": "Осталось в пуле",
|
||
"closeReadiness": "Готовность к закрытию",
|
||
"blockers": "блокировок",
|
||
"readyToClose": "Блокировок нет. Месяц можно закрывать.",
|
||
"importsNeedReview": "Выписок на проверке: {{count}}",
|
||
"reviewBlockers": "Разобрать блокировки",
|
||
"categoryPulse": "Состояние категорий",
|
||
"noExpectedIncome": "Ожидаемых доходов пока нет. Добавьте прогноз на этот месяц.",
|
||
"addIncome": "Добавить доход",
|
||
"editIncome": "Изменить ожидаемый доход",
|
||
"incomeNote": "Примечание (необязательно)",
|
||
"incomeInvalid": "Укажите положительную сумму и дату в этом месяце.",
|
||
"deleteIncome": "Удалить ожидаемый доход",
|
||
"deleteIncomeConfirm": "Удалить этот доход из прогноза месяца?"
|
||
},
|
||
"authShell": {
|
||
"statement": "Семейный гроссбух, закрытый по замыслу.",
|
||
"explanation": "Доступ только по приглашению. Счета, операции и выписки остаются внутри одного зашифрованного пространства.",
|
||
"session": "Защищённая сессия на 14 дней",
|
||
"encryption": "Шифрование выписок AES-GCM",
|
||
"isolation": "Изоляция данных пространства",
|
||
"private": "Приватное пространство",
|
||
"singleUse": "Одноразовые приглашения",
|
||
"rub": "Учёт в рублях",
|
||
"signIn": "Доступ / вход",
|
||
"invitation": "Доступ / приглашение",
|
||
"reset": "Доступ / сброс пароля"
|
||
},
|
||
"lang": {
|
||
"label": "Язык"
|
||
},
|
||
"common": {
|
||
"actions": "Действия",
|
||
"amount": "Сумма",
|
||
"cancel": "Отмена",
|
||
"choose": "— выберите —",
|
||
"close": "Закрыть",
|
||
"confirm": "Подтвердить",
|
||
"create": "Создать",
|
||
"dash": "—",
|
||
"date": "Дата",
|
||
"delete": "Удалить",
|
||
"edit": "Изменить",
|
||
"empty": "Пока ничего нет",
|
||
"loading": "Загрузка…",
|
||
"name": "Название",
|
||
"requiredField": "Обязательное поле",
|
||
"retry": "Повторить",
|
||
"save": "Сохранить",
|
||
"saving": "Сохранение…",
|
||
"showTable": "Показать таблицу",
|
||
"skipToContent": "Перейти к содержимому",
|
||
"status": "Статус"
|
||
},
|
||
"errors": {
|
||
"generic": "Что-то пошло не так. Попробуйте ещё раз.",
|
||
"http": "Ошибка сервера ({{status}}).",
|
||
"badAmount": "Введите сумму в рублях, больше нуля, не более двух знаков после запятой.",
|
||
"network_error": "Нет связи с сервером. Проверьте соединение.",
|
||
"auth_invalid_credentials": "Неверный email или пароль.",
|
||
"unauthorized": "Сессия истекла. Войдите снова.",
|
||
"forbidden": "Недостаточно прав для этого действия.",
|
||
"not_found": "Запись не найдена.",
|
||
"validation_error": "Проверьте правильность заполнения полей.",
|
||
"conflict": "Данные изменены кем-то другим. Обновите страницу и повторите.",
|
||
"rate_limited": "Слишком много попыток. Подождите немного.",
|
||
"session_expired": "Сессия истекла. Войдите снова.",
|
||
"LEDGER_ADJUST_NOOP": "Остаток уже равен целевому значению — менять нечего.",
|
||
"LEDGER_ADJUST_TARGET_NEGATIVE": "Целевой остаток не может быть отрицательным.",
|
||
"LEDGER_ADJUST_REASON_REQUIRED": "Укажите причину корректировки.",
|
||
"LEDGER_ACCOUNT_ARCHIVED": "Счёт в архиве — сначала восстановите его.",
|
||
"LEDGER_SAVINGS_CONVERT_INVALID": "Преобразовать в накопления можно только подтверждённый расход в открытом месяце.",
|
||
"LEDGER_SAVINGS_REVERT_INVALID": "Вернуть в расход можно только преобразованный ранее перевод.",
|
||
"LEDGER_SAVINGS_CONFLICT": "Обнаружен конфликт системных ресурсов накоплений.",
|
||
"BUDGET_PERIOD_CLOSED": "Месяц закрыт. Сначала откройте его заново.",
|
||
"BUDGET_CATEGORY_SYSTEM": "Системную категорию нельзя переименовать или архивировать.",
|
||
"BUDGET_CATEGORY_ARCHIVED": "Категория в архиве — сначала восстановите её.",
|
||
"BUDGET_CATEGORY_NAME_REQUIRED": "Укажите название категории.",
|
||
"BUDGET_CATEGORY_KIND_INVALID": "Неизвестный тип категории.",
|
||
"IMPORT_HOLD_REASON_REQUIRED": "Укажите причину решения по замороженной операции.",
|
||
"IMPORT_HOLD_ALREADY_RESOLVED": "По этой операции решение уже сохранено.",
|
||
"IMPORT_HOLD_DOCUMENT_NOT_CONFIRMED": "Решать замороженные операции можно только после применения импорта.",
|
||
"IMPORT_HOLD_ACCOUNT_REQUIRED": "Не указан счёт привязки выписки."
|
||
},
|
||
"auth": {
|
||
"loginTitle": "Вход",
|
||
"loginSubtitle": "Войдите, чтобы открыть своё финансовое пространство.",
|
||
"email": "Email",
|
||
"password": "Пароль",
|
||
"passwordConfirm": "Повторите пароль",
|
||
"passwordHint": "Минимум 12 символов",
|
||
"passwordMismatch": "Пароли не совпадают",
|
||
"invalidEmail": "Введите корректный email",
|
||
"submit": "Войти",
|
||
"loggingIn": "Вход…",
|
||
"logout": "Выйти",
|
||
"haveInvite": "Есть приглашение? Принять его",
|
||
"inviteTitle": "Принятие приглашения",
|
||
"inviteSubtitle": "Задайте имя и пароль, чтобы создать своё финансовое пространство.",
|
||
"inviteTokenMissing": "Ссылка не содержит токен приглашения. Запросите новую ссылку.",
|
||
"accept": "Принять и создать пространство",
|
||
"accepting": "Создаём…",
|
||
"backToLogin": "Вернуться ко входу",
|
||
"fullName": "Имя",
|
||
"forgotPassword": "Забыли пароль?",
|
||
"resetTitle": "Сброс пароля",
|
||
"resetSubtitle": "Запросите одноразовую ссылку на email.",
|
||
"resetSend": "Отправить ссылку",
|
||
"resetSent": "Если аккаунт существует, ссылка для сброса отправлена.",
|
||
"resetSubmit": "Установить новый пароль",
|
||
"resetTokenMissing": "Запросите новую ссылку для сброса."
|
||
},
|
||
"accounts": {
|
||
"title": "Счета",
|
||
"subtitle": "Дебетовые, наличные, кредитные и системный счёт накоплений.",
|
||
"add": "Добавить счёт",
|
||
"empty": "Счетов пока нет. Создайте первый счёт, чтобы начать учёт.",
|
||
"formTitle": "Новый счёт",
|
||
"type": "Тип",
|
||
"type.cash": "Наличные",
|
||
"type.debit": "Дебетовый",
|
||
"type.credit": "Кредитная карта",
|
||
"type.savings": "Накопительный",
|
||
"systemBadge": "Системный",
|
||
"bank": "Банк",
|
||
"bankHint": "Необязательно, например «alfa»",
|
||
"maskedNumber": "Маскированный номер",
|
||
"openedOn": "Дата открытия",
|
||
"openingBalance": "Начальная позиция",
|
||
"openingBalanceHint": "Сколько денег на счёте на момент начала учёта",
|
||
"balance": "Остаток",
|
||
"assets": "Активы",
|
||
"liabilities": "Долг по кредиткам",
|
||
"netWorth": "Итого",
|
||
"status.active": "Активен",
|
||
"status.archived": "В архиве",
|
||
"archive": "В архив",
|
||
"archiveBlockedHint": "Архивировать можно только счёт с нулевым остатком",
|
||
"archiveConfirmTitle": "Архивировать счёт",
|
||
"archiveConfirmBody": "Счёт «{{name}}» скроется из рабочих списков, но останется в истории.",
|
||
"adjust": "Скорректировать",
|
||
"adjustTitle": "Корректировка остатка",
|
||
"adjustCurrentBalance": "Текущий остаток",
|
||
"adjustTargetBalance": "Новый остаток",
|
||
"adjustDate": "Дата корректировки",
|
||
"adjustReason": "Причина",
|
||
"adjustReasonHint": "Обязательно; попадёт в журнал аудита",
|
||
"adjustNotice": "Корректировка меняет остаток счёта напрямую: это не доход и не расход. Она не попадёт в доходы, расходы, денежный поток и общий пул бюджета."
|
||
},
|
||
"operations": {
|
||
"title": "Гроссбух",
|
||
"subtitle": "Расходы, доходы, переводы и возвраты в одной проверяемой последовательности.",
|
||
"new": "Новая операция",
|
||
"empty": "Операций по выбранным условиям не найдено.",
|
||
"search": "Поиск",
|
||
"filterAccount": "Счёт",
|
||
"filterKind": "Тип",
|
||
"filterFrom": "Дата с",
|
||
"filterTo": "Дата по",
|
||
"filterAll": "Все",
|
||
"uncategorizedOnly": "Только без категории",
|
||
"kindLabel": "Тип",
|
||
"kind.expense": "Расход",
|
||
"kind.income": "Доход",
|
||
"kind.transfer": "Перевод",
|
||
"kind.refund": "Возврат",
|
||
"kind.adjustment": "Корректировка",
|
||
"status.confirmed": "Подтверждена",
|
||
"status.voided": "Отменена",
|
||
"noCategory": "Без категории",
|
||
"category": "Категория",
|
||
"payee": "Получатель",
|
||
"incomeSource": "Источник дохода",
|
||
"incomeSourceHint": "Необязательно",
|
||
"description": "Описание",
|
||
"account": "Счёт",
|
||
"fromAccount": "Счёт списания",
|
||
"toAccount": "Счёт зачисления",
|
||
"refundAccount": "Счёт возврата",
|
||
"parentOperation": "Исходная покупка",
|
||
"parentOperationHint": "Необязательно; свяжите возврат с исходным расходом",
|
||
"sameAccount": "Счета списания и зачисления должны различаться",
|
||
"occurredOn": "Дата операции",
|
||
"void": "Отменить",
|
||
"voidTitle": "Отмена операции",
|
||
"voidBody": "Операция от {{date}} на {{amount}} будет помечена отменённой.",
|
||
"voidReason": "Причина отмены",
|
||
"voidReasonHint": "Минимум 3 символа",
|
||
"convert": "В накопления",
|
||
"convertTitle": "Перевести в накопления",
|
||
"convertBody": "Расход от {{date}} на {{amount}} станет переводом в «Накопления»: он уйдёт из расходов месяца, увеличит счёт «Накопления» и уменьшит общий бюджетный пул. Позже это можно вернуть.",
|
||
"revert": "Вернуть в расходы",
|
||
"revertTitle": "Вернуть в расходы",
|
||
"revertBody": "Перевод от {{date}} на {{amount}} снова станет обычным расходом исходной категории; общий бюджетный пул пересчитается.",
|
||
"prevPage": "Назад",
|
||
"nextPage": "Дальше"
|
||
},
|
||
"budget": {
|
||
"title": "План месяца",
|
||
"subtitle": "Спланируйте каждый рубль и обеспечьте месяц из реального пула.",
|
||
"monthPicker": "Выбор месяца",
|
||
"month": "Месяц",
|
||
"prevMonth": "Предыдущий месяц",
|
||
"nextMonth": "Следующий месяц",
|
||
"status.open": "Открыт",
|
||
"status.closed": "Закрыт",
|
||
"projectedPool": "Прогнозный пул",
|
||
"actualPool": "Фактический пул",
|
||
"plannedTotal": "Запланировано",
|
||
"fundedTotal": "Обеспечено",
|
||
"spentTotal": "Потрачено",
|
||
"available": "Свободно",
|
||
"planned": "План",
|
||
"funded": "Обеспечено",
|
||
"spent": "Факт",
|
||
"remaining": "Остаток",
|
||
"categories": "Категории",
|
||
"reserves": "Резервы кредиток",
|
||
"noCategories": "В этом месяце ещё нет категорий. Скопируйте прошлый месяц или создайте план.",
|
||
"manageCategories": "Управлять категориями",
|
||
"savingsEnvelopeHint": "Конверт «Накопления» наполняется переводами и корректировками счёта; план не задаётся.",
|
||
"category.kind.monthly": "Месячная",
|
||
"category.kind.savings_envelope": "Конверт",
|
||
"category.kind.credit_reserve": "Резерв кредитки",
|
||
"manager": {
|
||
"title": "Управление категориями",
|
||
"tabsLabel": "Списки категорий",
|
||
"tabActive": "Активные",
|
||
"tabArchive": "Архив",
|
||
"systemBadge": "Системная",
|
||
"systemProtected": "переименование и архивирование недоступны",
|
||
"rename": "Переименовать",
|
||
"mccCodes": "Коды МСС",
|
||
"mccCodesHint": "Необязательно: 3–4-значные коды через запятую",
|
||
"mccCodesInvalid": "Укажите 3–4-значные коды МСС через запятую",
|
||
"mccCodesCount": "Коды МСС ({{count}})",
|
||
"editMccCodes": "Изменить МСС",
|
||
"editMccCodesTitle": "Коды МСС категории",
|
||
"archive": "В архив",
|
||
"restore": "Восстановить",
|
||
"renameTitle": "Переименовать категорию",
|
||
"archiveTitle": "Архивировать категорию",
|
||
"archiveBody": "Категория «{{name}}» скроется из новых планов и разметки, но история останется.",
|
||
"emptyActive": "Пользовательских категорий пока нет — создайте первую в форме выше.",
|
||
"emptyArchive": "Архив категорий пуст."
|
||
},
|
||
"planTitle": "План: {{name}}",
|
||
"fundTitle": "Обеспечение: {{name}}",
|
||
"fund": "Обеспечить",
|
||
"fundHint": "Перемещает фактические деньги из общего пула в категорию.",
|
||
"expectedIncome": "Ожидаемые доходы",
|
||
"incomeSource": "Источник",
|
||
"noSource": "Без источника",
|
||
"matched": "Сопоставлено",
|
||
"income.status.expected": "Ожидается",
|
||
"income.status.partially_matched": "Частично",
|
||
"income.status.matched": "Поступил",
|
||
"blockersTitle": "Закрытие заблокировано",
|
||
"blockers": {
|
||
"IMPORTS_UNRESOLVED": "Не завершены импорты выписок: {{count}}",
|
||
"IMPORT_UNRESOLVED_HOLDS": "Неподтверждённые операции без решения: {{count}}",
|
||
"BUDGET_UNCATEGORIZED_EXPENSES": "Расходы без категории: {{count}}",
|
||
"BUDGET_NEGATIVE_ENVELOPE": "Отрицательный остаток конверта: {{categories}}",
|
||
"unknown": "Закрытие заблокировано необработанной причиной.",
|
||
"cta": {
|
||
"imports": "Открыть очередь разбора",
|
||
"holds": "Разобрать операции",
|
||
"uncategorized": "Назначить категории",
|
||
"envelope": "Открыть категории"
|
||
}
|
||
},
|
||
"warnings.plan_imbalance": "План превышает прогнозный пул.",
|
||
"warnings.plan_exceeds_pool": "План превышает прогнозный пул.",
|
||
"warnings.underfunded_credit_debt": "Долг по кредитке обеспечен не полностью.",
|
||
"warnings.underfunded_credit": "Долг по кредитке обеспечен не полностью.",
|
||
"warnings.expected_income_variance": "Ожидаемый доход расходится с фактическим.",
|
||
"warnings.unknown": "В месяце есть другая проблема, требующая проверки.",
|
||
"close": "Закрыть месяц",
|
||
"closeConfirmTitle": "Закрыть месяц",
|
||
"closeConfirmBody": "Месяц {{month}} будет закрыт, остатки месячных категорий свернутся в общий пул.",
|
||
"reopen": "Открыть снова",
|
||
"reopenConfirmTitle": "Повторное открытие месяца",
|
||
"reopenConfirmBody": "Месяц и все последующие периоды будут открыты заново и пересчитаны.",
|
||
"copyPrevious": "Скопировать прошлый месяц"
|
||
},
|
||
"review": {
|
||
"title": "Очередь разбора",
|
||
"subtitle": "Проблемные импорты и расходы без категории.",
|
||
"empty": "Очередь пуста — всё разобрано.",
|
||
"sectionImports": "Импорты, требующие внимания",
|
||
"sectionUncategorized": "Расходы без категории",
|
||
"uncategorizedEmpty": "Расходов без категории нет.",
|
||
"assignCategory": "Назначить категорию",
|
||
"saveHint": "Транзакции без выбранной категории уедут в «Остальное».",
|
||
"openImport": "Открыть импорт"
|
||
},
|
||
"imports": {
|
||
"title": "Импорт выписок",
|
||
"subtitle": "Загрузка и разбор банковских выписок.",
|
||
"upload": "Загрузить выписку",
|
||
"uploadTitle": "Новый импорт",
|
||
"uploading": "Загрузка…",
|
||
"adapterHint": "Поддерживаются: Альфа debit/credit XLSX, Ozon debit/credit PDF, Рокетбанк debit PDF.",
|
||
"file": "Файл выписки",
|
||
"fileName": "Файл выписки",
|
||
"targetAccount": "Счёт привязки",
|
||
"adapters.alfa_debit_xlsx": "Альфа debit",
|
||
"adapters.alfa_credit_xlsx": "Альфа credit",
|
||
"adapters.ozon_debit_pdf": "Ozon debit",
|
||
"adapters.ozon_credit_pdf": "Ozon credit",
|
||
"adapters.rocketbank_debit_pdf": "Рокетбанк debit",
|
||
"unassigned": "Не привязан",
|
||
"empty": "Импортов пока нет.",
|
||
"bank": "Банк / контракт",
|
||
"period": "Период",
|
||
"createdAt": "Создан",
|
||
"createdAtLine": "Создан: {{createdAt}}",
|
||
"status.uploaded": "Загружен",
|
||
"status.queued": "В очереди",
|
||
"status.processing": "Разбирается",
|
||
"status.review_required": "Требует разбора",
|
||
"status.ready": "Готов к применению",
|
||
"status.confirmed": "Применён",
|
||
"status.failed": "Ошибка",
|
||
"progress": "Прогресс разбора",
|
||
"steps.uploaded": "Загружен",
|
||
"steps.queued": "В очереди",
|
||
"steps.processing": "Разбирается",
|
||
"steps.review_required": "Разбор",
|
||
"steps.ready": "Готов",
|
||
"steps.confirmed": "Применён",
|
||
"detailTitle": "Импорт",
|
||
"backToList": "К списку",
|
||
"failedReason": "Разбор не удался: {{reason}}",
|
||
"blockers": "Критические проблемы",
|
||
"blockers.currency_mismatch": "Валюта выписки не совпадает со счётом.",
|
||
"blockers.amount_mismatch": "Сумма строки не совпадает с исходной.",
|
||
"blockers.missing_occurred_date": "Не определена дата операции.",
|
||
"blockers.missing_target_account": "Не подтверждён счёт привязки.",
|
||
"blockers.arithmetic_mismatch": "Контрольные суммы не сходятся.",
|
||
"blockers.unresolved_duplicate": "Есть неразобранные дубликаты.",
|
||
"blockers.unresolved_transfer": "Есть неразобранные переводы.",
|
||
"blockers.account_conflict": "Отпечаток счёта конфликтует с существующим.",
|
||
"unresolvedHolds": "Замороженные",
|
||
"unresolvedHoldsBadge": "Замороженных операций: {{count}}",
|
||
"holdBadge": "Заморожена",
|
||
"holdPosted": "Операция списалась",
|
||
"holdPostedTitle": "Операция списалась",
|
||
"holdPostedBody": "Замороженная операция от {{date}} на {{amount}} будет проведена по счёту выписки как обычная операция.",
|
||
"holdCancelled": "Операция отменена",
|
||
"holdCancelledTitle": "Операция отменена",
|
||
"holdCancelledBody": "Замороженная операция от {{date}} на {{amount}} будет помечена отменённой и не попадёт в операции.",
|
||
"holdReason": "Причина решения",
|
||
"holdReasonHint": "Необязательно, можно оставить пустым",
|
||
"holdResolution.confirmed_as_posted": "Проведена",
|
||
"holdResolution.discarded_as_cancelled": "Отменена",
|
||
"warnings": "Предупреждения ({{count}})",
|
||
"warnings.amount_warning": "Нестандартная сумма.",
|
||
"warnings.date_warning": "Необычная дата.",
|
||
"warnings.payee_warning": "Получатель определён неточно.",
|
||
"warnings.mcc_missing": "MCC отсутствует.",
|
||
"warnings.description_warning": "Описание неполное.",
|
||
"reconciliationTitle": "Сверка",
|
||
"openingBalance": "Входящий остаток",
|
||
"closingBalance": "Исходящий остаток",
|
||
"computedBalance": "Расчётный остаток",
|
||
"reconciliation.matched": "Сошлось",
|
||
"reconciliation.mismatched": "Расхождение",
|
||
"reconciliation.not_available": "Данных для сверки нет",
|
||
"reconciliation.confirmed_without": "Подтверждено без сверки",
|
||
"totals": "Строк: {{total}} · создать: {{create}} · пропустить: {{discard}} · дубликатов: {{duplicate}} · переводов: {{transfer}} · в накопления: {{savings}} · без решения: {{pending}}",
|
||
"rowsTitle": "Строки выписки",
|
||
"noRows": "Строк нет.",
|
||
"rowWarnings": "Замечания",
|
||
"mcc": "МСС",
|
||
"rowWarnings.amount": "сумма",
|
||
"rowWarnings.date": "дата",
|
||
"rowWarnings.direction": "направление",
|
||
"rowWarnings.mcc": "MCC",
|
||
"rowWarnings.description": "описание",
|
||
"decision": "Решение",
|
||
"decision.pending": "Не решено",
|
||
"decision.create": "Создать операцию",
|
||
"decision.discard": "Пропустить",
|
||
"decision.duplicate": "Это дубликат",
|
||
"decision.transfer": "Это перевод",
|
||
"decision.savings_transfer": "Перевод в накопления",
|
||
"confirm": "Применить импорт",
|
||
"confirmTitle": "Применить импорт",
|
||
"confirmBody": "Будут созданы операции по выбранным строкам. Применение атомарно, его можно отменить.",
|
||
"confirmWithout": "Подтверждаю применение без полной сверки остатков",
|
||
"reparse": "Переразобрать",
|
||
"revert": "Отменить применение",
|
||
"revertTitle": "Отменить применение импорта",
|
||
"revertBody": "Операции, созданные импортом «{{fileName}}», будут удалены атомарно; затронутые месяцы потребуют переоткрытия."
|
||
},
|
||
"analytics": {
|
||
"title": "Финансовая картина",
|
||
"subtitle": "Расходы, точность плана, денежный поток и балансы без шума.",
|
||
"range": "Период:",
|
||
"months_one": "{{count}} месяц",
|
||
"months_few": "{{count}} месяца",
|
||
"months_many": "{{count}} месяцев",
|
||
"months_other": "{{count}} месяца",
|
||
"noData": "Нет данных за период.",
|
||
"categorySpend": "Расходы по категориям",
|
||
"categorySpendTable": "Расходы по категориям за период",
|
||
"planFact": "План и факт",
|
||
"planFactTable": "План и факт по категориям за месяц",
|
||
"cashFlow": "Доходы и расходы",
|
||
"cashFlowTable": "Доходы, расходы и нетто по месяцам",
|
||
"balances": "Остатки и долг",
|
||
"balancesTable": "Остатки по счетам",
|
||
"income": "Доходы",
|
||
"expense": "Расходы",
|
||
"net": "Нетто",
|
||
"assets": "Активы",
|
||
"liabilities": "Долги",
|
||
"asOf": "Состояние на {{asOf}}",
|
||
"unallocated": "Без распределения"
|
||
},
|
||
"settings": {
|
||
"title": "Пространство и данные",
|
||
"subtitle": "Профиль, язык, экспорт и жизненный цикл финансового пространства.",
|
||
"profile": "Профиль",
|
||
"timezone": "Часовой пояс",
|
||
"dataTitle": "Данные",
|
||
"export": "Запросить экспорт",
|
||
"exportHint": "Архив ZIP (CSV + JSON) со счетами, операциями, бюджетами и справочниками готовится в фоне; ссылка придёт в приложении.",
|
||
"deletionTitle": "Удаление пространства",
|
||
"deletionHint": "Пространство будет заблокировано немедленно и удалено через 30 дней. До истечения срока удаление можно отменить.",
|
||
"deletionPhrase": "Подтверждающая фраза",
|
||
"deletionPhraseHint": "Введите DELETE прописными буквами",
|
||
"phraseMismatch": "Введите ровно DELETE",
|
||
"deletionRequest": "Запросить удаление",
|
||
"deletionPending": "Пространство ожидает удаления {{cancelsUntil}}. Вы ещё можете отменить.",
|
||
"deletionCancel": "Отменить удаление",
|
||
"deletionStatusActive": "Активно"
|
||
},
|
||
"toast": {
|
||
"accountCreated": "Счёт «{{name}}» создан",
|
||
"accountArchived": "Счёт отправлен в архив",
|
||
"balanceAdjusted": "Остаток счёта скорректирован",
|
||
"operationCreated": "Операция создана",
|
||
"operationVoided": "Операция отменена",
|
||
"categoryAssigned": "Категория назначена",
|
||
"categoriesSaved": "Категории сохранены",
|
||
"convertedToSavings": "Расход переведён в накопления",
|
||
"savingsConversionReverted": "Перевод возвращён в расходы",
|
||
"categoryCreated": "Категория «{{name}}» создана",
|
||
"categoryRenamed": "Категория переименована в «{{name}}»",
|
||
"categoryMccUpdated": "Коды МСС категории обновлены",
|
||
"categoryArchived": "Категория отправлена в архив",
|
||
"categoryRestored": "Категория восстановлена",
|
||
"planUpdated": "План обновлён",
|
||
"categoryFunded": "Категория обеспечена",
|
||
"monthClosed": "Месяц закрыт",
|
||
"monthReopened": "Месяц открыт заново",
|
||
"planCopied": "План прошлого месяца скопирован",
|
||
"importUploaded": "Выписка загружена, разбор запущен",
|
||
"importConfirmed": "Импорт применён",
|
||
"importReverted": "Импорт отменён",
|
||
"holdResolved": "Решение по замороженной операции сохранено",
|
||
"reparseQueued": "Переразбор запущен",
|
||
"exportQueued": "Экспорт поставлен в очередь",
|
||
"exportReady": "Экспорт готов к скачиванию",
|
||
"deletionRequested": "Удаление запрошено: 30 дней на отмену",
|
||
"deletionCancelled": "Удаление отменено"
|
||
},
|
||
"notFound": {
|
||
"title": "Страница не найдена",
|
||
"subtitle": "Такой страницы нет. Проверьте адрес или вернитесь к счетам.",
|
||
"back": "К счетам"
|
||
},
|
||
"account": {
|
||
"savings": "Накопления"
|
||
},
|
||
"categories": {
|
||
"uncategorized": "Без категории",
|
||
"groceries": "Продукты",
|
||
"cafes": "Кафе и рестораны",
|
||
"transport": "Транспорт",
|
||
"fuel": "Топливо и АЗС",
|
||
"housing": "Жильё",
|
||
"utilities": "Коммунальные",
|
||
"health": "Здоровье",
|
||
"electronics": "Электроника",
|
||
"clothing": "Одежда и обувь",
|
||
"beauty": "Красота и уход",
|
||
"education": "Образование",
|
||
"entertainment": "Развлечения",
|
||
"sport": "Спорт и фитнес",
|
||
"travel": "Путешествия",
|
||
"home": "Дом и ремонт",
|
||
"telecom": "Связь и интернет",
|
||
"kids": "Дети",
|
||
"pets": "Питомцы",
|
||
"gifts": "Подарки и хобби",
|
||
"auto": "Авто",
|
||
"finance": "Финансы и страхование",
|
||
"others": "Остальное",
|
||
"eating_out": "Кафе и рестораны",
|
||
"clothes": "Одежда",
|
||
"personal": "Личное",
|
||
"savings": "Накопления",
|
||
"debts": "Погашение долгов",
|
||
"other": "Прочее"
|
||
}
|
||
}
|