Files
finance/frontend/src/i18n/locales/ru.json
T
k1nq 023612ce0a Update manifest.json with new file metadata and add pytest configuration
- 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.
2026-09-24 08:34:13 +05:00

543 lines
33 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.
{
"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": "Прочее"
}
}