export type Locale = 'en' | 'ru' export const dictionary = { en: { appTitle: 'Kojori House', appSubtitle: 'Shared home dashboard', loadingTitle: 'Checking your household access', loadingBody: 'Validating Telegram session and membership…', loadingBadge: 'Secure session', demoBadge: 'Demo mode', liveBadge: 'Connected home', joinTitle: 'Welcome to your household', joinBody: 'You are not a member of {household} yet. Send a join request and wait for admin approval.', pendingTitle: 'Join request sent', pendingBody: 'Your request for {household} is pending admin approval.', openFromGroupTitle: 'Open this from your household group', openFromGroupBody: 'Use the join button from the household group setup message so the app knows which household you want to join.', unexpectedErrorTitle: 'Unable to load the household app', unexpectedErrorBody: 'Retry in Telegram. If this keeps failing, ask the household admin to resend the join button.', householdFallback: 'this household', joinAction: 'Join household', joining: 'Sending request…', botLinkAction: 'Open bot chat', telegramOnlyTitle: 'Open this app from Telegram', telegramOnlyBody: 'The real session gate needs Telegram mini app data. Local development falls back to a preview shell.', reload: 'Retry', language: 'Language', householdLanguage: 'Household language', generalSettingsBody: 'Household name, default language, and your profile controls live here.', householdNameLabel: 'Household name', householdNameHint: 'This appears in the mini app, join flow, and bot responses.', savingLanguage: 'Saving…', onLabel: 'On', offLabel: 'Off', home: 'Home', balances: 'Balances', ledger: 'Ledger', house: 'House', houseSectionGeneral: 'General', houseSectionBilling: 'Billing', houseSectionUtilities: 'Utilities', houseSectionMembers: 'Members', houseSectionTopics: 'Topics', welcome: 'Welcome back', adminTag: 'Admin', residentTag: 'Resident', overviewTitle: 'Current cycle', overviewBody: 'Use the sections below to review balances, ledger entries, and household access.', totalDue: 'Total due', totalDueLabel: 'Subtotal', paidLabel: 'Paid', remainingLabel: 'Remaining', membersCount: 'Members', ledgerEntries: 'Ledger entries', pendingRequests: 'Pending requests', yourBalanceTitle: 'Your balance', yourBalanceBody: 'Current cycle breakdown.', payNowTitle: 'This month', payNowBody: '', homeDueTitle: 'Due', homeSettledTitle: 'Settled', homeUtilitiesTitle: 'Utilities payment', homeRentTitle: 'Rent payment', homeNoPaymentTitle: 'No payment period', homeUtilitiesUpcomingLabel: 'Utilities starts {date}', homeRentUpcomingLabel: 'Rent starts {date}', homeFillUtilitiesTitle: 'Fill utilities', homeFillUtilitiesBody: 'No utility bills are recorded for this cycle yet. Add at least one bill to calculate utilities.', homeFillUtilitiesSubmitAction: 'Save utility bill', homeFillUtilitiesSubmitting: 'Saving…', homeFillUtilitiesOpenLedgerAction: 'Open ledger', homeUtilitiesBillsTitle: 'Utility bills', homePurchasesTitle: 'Purchases', homePurchasesOffsetLabel: 'Your purchases balance', homePurchasesTotalLabel: 'Household purchases ({count})', whyAction: 'Why?', currentCycleLabel: 'Current cycle', cycleTotalLabel: 'Cycle total', cycleBillLabel: 'Cycle bill', balanceAdjustmentLabel: 'Balance adjustment', pureUtilitiesLabel: 'Pure utilities', utilitiesBalanceLabel: 'Utilities + balance', rentAdjustedTotalLabel: 'Rent after adjustment', utilitiesAdjustedTotalLabel: 'Utilities after adjustment', paidThisCycleLabel: 'Paid this cycle', rentPaidLabel: 'Rent paid', utilitiesPaidLabel: 'Utilities paid', dueOnLabel: 'Due {date}', dueTodayLabel: 'Due today', overdueLabel: 'Overdue', daysLeftLabel: '{count}d left', upcomingLabel: 'Upcoming', notBilledYetLabel: 'Not billed yet', expectedUtilitiesLabel: 'Expected utilities', baseDue: 'Base due', finalDue: 'Final due', houseSnapshotTitle: 'House totals', houseSnapshotBody: 'Whole-house totals for the current cycle.', balanceScreenScopeTitle: 'Balance breakdown', balanceScreenScopeBody: 'This screen only explains your current cycle balance. Older activity stays in the ledger.', householdBalancesTitle: 'Household balances', householdBalancesBody: "Everyone's current split for this cycle.", balancesTitle: 'Balance', balancesSubtitle: 'Total due', purchasesBalanceTitle: 'Purchases balance', purchasesBalanceBody: 'Net balance from shared purchases only.', utilitiesBalanceTitle: 'Utilities balance', utilitiesBalanceBody: 'Utility bills split.', inspectMemberTitle: 'Inspect member', inspectMemberBody: 'Check another member balance without opening a long list.', inspectMemberLabel: 'Member', financeVisualsTitle: 'Visual balance split', financeVisualsBody: 'Use the bars to see how rent, utilities, and shared-buy adjustments shape each member balance.', purchaseInvestmentsTitle: 'Who fronted shared purchases', purchaseInvestmentsBody: 'This donut shows how much each member invested into shared purchases this cycle.', purchaseInvestmentsEmpty: 'Purchase contributions will appear here after shared buys are logged.', purchaseShareLabel: 'Share', purchaseTotalLabel: 'Total shared buys', participantsLabel: 'participants', purchasesTitle: 'Shared purchases', purchasesEmpty: 'No shared purchases recorded for this cycle yet.', utilityLedgerTitle: 'Utility bills', utilityLedgerEmpty: 'No utility bills recorded for this cycle yet.', paymentsTitle: 'Payments', paymentsEmpty: 'No payment confirmations recorded for this cycle yet.', paymentLedgerRent: 'Rent payment', paymentLedgerUtilities: 'Utilities payment', ledgerActorFallback: 'Household', shareRent: 'Rent', shareUtilities: 'Utilities', shareOffset: 'Shared buys', rentFxTitle: 'House rent FX', sourceAmountLabel: 'Source', settlementAmountLabel: 'Settlement', fxEffectiveDateLabel: 'Locked', ledgerTitle: 'Included ledger', emptyDashboard: 'No billing cycle is ready yet.', latestActivityTitle: 'Latest activity', latestActivityEmpty: 'Recent utility and purchase entries will appear here.', showMoreAction: 'Show more', showLessAction: 'Show less', testingViewBadge: 'Testing view', testingSurfaceTitle: 'Hidden QA view', testingSurfaceBody: 'Preview admin or resident presentation without changing real permissions or saved roles.', testingUseRealRoleAction: 'Use real role', testingPreviewAdminAction: 'Preview admin', testingPreviewResidentAction: 'Preview resident', testingCurrentRoleLabel: 'Real access', testingPreviewRoleLabel: 'Previewing', testingPeriodCurrentLabel: 'Dashboard period', testingPeriodOverrideLabel: 'Period override', testingPeriodOverridePlaceholder: 'YYYY-MM', testingTodayOverrideLabel: 'Today override', testingTodayOverridePlaceholder: 'YYYY-MM-DD', testingClearOverridesAction: 'Clear overrides', purchaseReviewTitle: 'Purchases', purchaseReviewBody: 'Edit or remove purchases if the bot recorded the wrong item.', purchaseSplitTitle: 'Split', purchaseSplitModeLabel: 'Split mode', purchaseSplitEqual: 'Equal split', purchaseSplitCustom: 'Custom amounts', purchaseParticipantLabel: 'Participates', participantIncluded: 'Included', participantExcluded: 'Excluded', purchaseCustomShareLabel: 'Custom amount', purchaseEditorBody: 'Review the purchase details and adjust the split only when needed.', purchasePayerLabel: 'Paid by', paymentsAdminTitle: 'Payments', paymentsAdminBody: 'Add, fix, or remove payment records for the current cycle.', paymentsAddAction: 'Add payment', copiedToast: 'Copied!', quickPaymentTitle: 'Record payment', quickPaymentBody: 'Quickly record a {type} payment for the current cycle.', quickPaymentAmountLabel: 'Amount', quickPaymentCurrencyLabel: 'Currency', quickPaymentSubmitAction: 'Save payment', quickPaymentSubmitting: 'Saving…', quickPaymentSuccess: 'Payment recorded successfully', quickPaymentFailed: 'Failed to record payment', addingPayment: 'Adding payment…', paymentCreateBody: 'Create a payment record in a focused editor instead of a long inline form.', paymentKind: 'Payment kind', paymentAmount: 'Payment amount', paymentMember: 'Member', paymentSaveAction: 'Save payment', paymentDeleteAction: 'Delete', paymentEditorBody: 'Review the payment record in one focused editor.', deletingPayment: 'Deleting payment…', purchaseSaveAction: 'Save purchase', purchaseBalanceAction: 'Balance', purchaseRebalanceAction: 'Rebalance', purchaseDeleteAction: 'Delete', deletingPurchase: 'Deleting purchase…', savingPurchase: 'Saving purchase…', editEntryAction: 'Edit entry', closeEditorAction: 'Close', householdSettingsTitle: 'Household settings', householdSettingsBody: 'Control household defaults and approve roommates who requested access.', topicBindingsTitle: 'Topic bindings', topicBindingsBody: 'Review which Telegram topics are currently connected for purchases, feedback, reminders, and payments.', topicChat: 'Discussions', topicPurchase: 'Purchases', topicFeedback: 'Feedback', topicReminders: 'Reminders', topicPayments: 'Payments', topicBound: 'Bound', topicUnbound: 'Unbound', billingSettingsTitle: 'Billing settings', assistantSettingsTitle: 'Bot personality', assistantSettingsBody: 'Give the bot household context and a tone so replies feel grounded without getting intrusive.', assistantToneLabel: 'Bot mood', assistantTonePlaceholder: 'Playful, dry, concise, slightly sarcastic', assistantToneDefault: 'Default', assistantContextLabel: 'Household context', assistantContextPlaceholder: 'The household is a house in Kojori with a backyard and pine forest nearby.', assistantContextEmpty: 'No custom context', settlementCurrency: 'Settlement currency', paymentBalanceAdjustmentPolicy: 'Purchase balance adjustment', paymentBalanceAdjustmentUtilities: 'Adjust through utilities', paymentBalanceAdjustmentRent: 'Adjust through rent', paymentBalanceAdjustmentSeparate: 'Keep purchases separate', billingCycleTitle: 'Current billing cycle', billingCycleEmpty: 'No open cycle', billingCycleStatus: 'Current cycle currency: {currency}', billingCycleOpenHint: 'Open a cycle before entering rent and utility bills.', billingCyclePeriod: 'Cycle period', manageCycleAction: 'Edit cycle rent', cycleEditorBody: 'Change the rent for the current cycle only. Keep billing settings for the long-term default.', openCycleAction: 'Open cycle', openingCycle: 'Opening cycle…', closeCycleAction: 'Close cycle', closingCycle: 'Closing cycle…', saveCycleRentAction: 'Save cycle rent', savingCycleRent: 'Saving rent…', utilityCategoryLabel: 'Utility category', utilityAmount: 'Utility amount', addUtilityBillAction: 'Add utility bill', savingUtilityBill: 'Saving utility bill…', saveUtilityBillAction: 'Save utility bill', deleteUtilityBillAction: 'Delete', deletingUtilityBill: 'Deleting utility bill…', utilityBillsEmpty: 'No utility bills recorded for this cycle yet.', currencyLabel: 'Currency', rentAmount: 'Rent amount', defaultRentAmount: 'Default rent', rentCurrencyLabel: 'Rent currency', defaultRentHint: 'New current cycles start from this rent unless you override a specific month.', currentCycleRentLabel: 'Current cycle rent', currentCycleRentHint: 'Only use this when the current month needs a different rent from the default.', currentCycleRentEmpty: 'No rent saved for this cycle yet.', currentCycleUsesDefaultRent: 'Using the default rent', currentCycleOverrideRent: 'Cycle override active', rentDueDay: 'Rent due day', rentWarningDay: 'Rent warning day', utilitiesDueDay: 'Utilities due day', utilitiesReminderDay: 'Utilities reminder day', timezone: 'Timezone', timezoneHint: 'Use an IANA timezone like Asia/Tbilisi.', timezoneInvalidHint: 'Pick a valid IANA timezone such as Asia/Tbilisi.', rentPaymentDestinationsTitle: 'Rent payment destinations', rentPaymentDestinationsEmpty: 'No rent payment destinations saved yet.', rentPaymentDestinationAddAction: 'Add destination', rentPaymentDestinationRemoveAction: 'Remove destination', rentPaymentDestinationLabel: 'Label', rentPaymentDestinationRecipient: 'Recipient name', rentPaymentDestinationBank: 'Bank name', rentPaymentDestinationAccount: 'Account / card / IBAN', rentPaymentDestinationLink: 'Payment link', rentPaymentDestinationNote: 'Note', manageSettingsAction: 'Manage settings', billingSettingsEditorBody: 'Household defaults live here. New current cycles start from these values.', saveSettingsAction: 'Save settings', savingSettings: 'Saving settings…', utilityCategoriesTitle: 'Utility categories', utilityCategoriesBody: 'Manage the categories admins use for monthly utility entry.', utilityCategoryName: 'Category name', utilityCategoryActive: 'Active', utilityBillsEditorBody: 'Keep utility bills short in the list and edit the details only when needed.', utilityBillCreateBody: 'Add a utility bill in a focused editor.', utilityBillEditorBody: 'Adjust utility bill details here.', editUtilityBillAction: 'Edit utility bill', addCategoryAction: 'Add category', saveCategoryAction: 'Save category', savingCategory: 'Saving…', categoryCreateBody: 'Create a new utility category without stretching the page.', categoryEditorBody: 'Rename or disable the category in a focused editor.', editCategoryAction: 'Edit category', adminsTitle: 'Admins', adminsBody: 'Promote trusted household members so they can manage billing and approvals.', membersTitle: 'Members', membersBody: 'Review roles, billing weights, and status for everyone in the household.', displayNameLabel: 'Household display name', displayNameHint: 'This name appears in balances, ledger entries, and assistant replies.', manageProfileAction: 'Edit profile', profileEditorBody: 'Keep your own display name in a focused editor instead of the page body.', memberEditorBody: 'Member billing state and admin controls stay grouped in one editor.', editMemberAction: 'Edit member', saveMemberChangesAction: 'Save changes', saveDisplayName: 'Save name', savingDisplayName: 'Saving name…', memberStatusLabel: 'Member status', saveMemberStatusAction: 'Save status', savingMemberStatus: 'Saving status…', memberStatusActive: 'Active', memberStatusAway: 'Away', memberStatusLeft: 'Left', absencePolicyLabel: 'Away billing policy', absencePolicyResident: 'Resident billing', absencePolicyAwayRentAndUtilities: 'Away: rent and utilities', absencePolicyAwayRentOnly: 'Away: rent only', absencePolicyInactive: 'Inactive / moved out', absencePolicyHint: 'Applies to future cycle calculations for away members.', absencePolicyEffectiveFrom: 'Effective from {period}', saveAbsencePolicyAction: 'Save away policy', savingAbsencePolicy: 'Saving policy…', memberStatusSummary: 'Your household status: {status}.', rentWeightLabel: 'Rent weight', saveRentWeightAction: 'Save rent weight', savingRentWeight: 'Saving weight…', promoteAdminAction: 'Promote to admin', promotingAdmin: 'Promoting…', residentHouseTitle: 'Household access', residentHouseBody: 'Your admins manage household settings and approvals here. You can still switch your own language above.', pendingMembersTitle: 'Pending members', pendingMembersBody: 'Approve roommates here after they request access from the group join flow.', pendingMembersEmpty: 'No pending member requests right now.', approveMemberAction: 'Approve', rejectMemberAction: 'Reject', rejectingMember: 'Rejecting…', approvingMember: 'Approving…', pendingMemberHandle: '@{username}', balancesEmpty: 'Balances will appear here once the dashboard API lands.', ledgerEmpty: 'Ledger entries will appear here after the finance view is connected.', houseEmpty: 'Household details will appear here.' }, ru: { appTitle: 'Kojori House', appSubtitle: 'Панель общего дома', loadingTitle: 'Проверяем доступ к дому', loadingBody: 'Проверяем Telegram-сессию и членство…', loadingBadge: 'Защищённая сессия', demoBadge: 'Демо режим', liveBadge: 'Подключённый дом', joinTitle: 'Добро пожаловать домой', joinBody: 'Ты пока не участник {household}. Отправь заявку на вступление и дождись подтверждения админа.', pendingTitle: 'Заявка отправлена', pendingBody: 'Твоя заявка в {household} ждёт подтверждения админа.', openFromGroupTitle: 'Открой приложение из чата дома', openFromGroupBody: 'Используй кнопку подключения из сообщения настройки дома, чтобы приложение поняло, к какому дому ты хочешь присоединиться.', unexpectedErrorTitle: 'Не удалось открыть приложение дома', unexpectedErrorBody: 'Попробуй снова из Telegram. Если ошибка повторяется, попроси админа ещё раз прислать кнопку подключения.', householdFallback: 'этот дом', joinAction: 'Вступить в дом', joining: 'Отправляем заявку…', botLinkAction: 'Открыть чат с ботом', telegramOnlyTitle: 'Открой приложение из Telegram', telegramOnlyBody: 'Настоящая проверка требует данные Telegram Mini App. Локально показывается демо-оболочка.', reload: 'Повторить', language: 'Язык', householdLanguage: 'Язык дома', generalSettingsBody: 'Здесь настраиваются название дома, язык по умолчанию и твой профиль.', householdNameLabel: 'Название дома', householdNameHint: 'Показывается в приложении, при вступлении и в ответах бота.', savingLanguage: 'Сохраняем…', onLabel: 'Вкл', offLabel: 'Выкл', home: 'Главная', balances: 'Баланс', ledger: 'Леджер', house: 'Дом', houseSectionGeneral: 'Общее', houseSectionBilling: 'Биллинг', houseSectionUtilities: 'Коммуналка', houseSectionMembers: 'Участники', houseSectionTopics: 'Топики', welcome: 'С возвращением', adminTag: 'Админ', residentTag: 'Житель', overviewTitle: 'Текущий цикл', overviewBody: 'Ниже можно посмотреть балансы, записи леджера и доступ к дому.', totalDue: 'Итого к оплате', totalDueLabel: 'Подытог', paidLabel: 'Оплачено', remainingLabel: 'Осталось', membersCount: 'Участники', ledgerEntries: 'Записи леджера', pendingRequests: 'Ожидают подтверждения', yourBalanceTitle: 'Твой баланс', yourBalanceBody: 'Разбор по текущему циклу.', payNowTitle: 'Этот месяц', payNowBody: '', homeDueTitle: 'К оплате', homeSettledTitle: 'Закрыто', homeUtilitiesTitle: 'Оплата коммуналки', homeRentTitle: 'Оплата аренды', homeNoPaymentTitle: 'Период без оплаты', homeUtilitiesUpcomingLabel: 'Коммуналка с {date}', homeRentUpcomingLabel: 'Аренда с {date}', homeFillUtilitiesTitle: 'Внести коммуналку', homeFillUtilitiesBody: 'Для этого цикла коммунальные счета ещё не внесены. Добавь хотя бы один счёт, чтобы рассчитать коммуналку.', homeFillUtilitiesSubmitAction: 'Сохранить счёт', homeFillUtilitiesSubmitting: 'Сохраняем…', homeFillUtilitiesOpenLedgerAction: 'Открыть леджер', homeUtilitiesBillsTitle: 'Коммунальные счета', homePurchasesTitle: 'Покупки', homePurchasesOffsetLabel: 'Ваш баланс покупок', homePurchasesTotalLabel: 'Покупок в доме ({count})', whyAction: 'Почему?', currentCycleLabel: 'Текущий цикл', cycleTotalLabel: 'Всего за цикл', cycleBillLabel: 'Счёт за цикл', balanceAdjustmentLabel: 'Поправка по балансу', pureUtilitiesLabel: 'Чистая коммуналка', utilitiesBalanceLabel: 'Коммуналка + баланс', rentAdjustedTotalLabel: 'Аренда после зачёта', utilitiesAdjustedTotalLabel: 'Коммуналка после зачёта', paidThisCycleLabel: 'Оплачено за цикл', rentPaidLabel: 'По аренде оплачено', utilitiesPaidLabel: 'По коммуналке оплачено', dueOnLabel: 'Срок {date}', dueTodayLabel: 'Срок сегодня', overdueLabel: 'Просрочено', daysLeftLabel: 'Осталось {count} дн.', upcomingLabel: 'Ещё не срок', notBilledYetLabel: 'Ещё не начислено', expectedUtilitiesLabel: 'Ожидаемая коммуналка', baseDue: 'База к оплате', finalDue: 'Итог к оплате', houseSnapshotTitle: 'Сводка по дому', houseSnapshotBody: 'Общие суммы по дому за текущий цикл.', balanceScreenScopeTitle: 'Разбор баланса', balanceScreenScopeBody: 'На этом экране только разбор твоего текущего баланса. Более старые записи остаются в леджере.', householdBalancesTitle: 'Баланс дома', householdBalancesBody: 'Текущий расклад по всем участникам за этот цикл.', balancesTitle: 'Баланс', balancesSubtitle: 'Всего к оплате', purchasesBalanceTitle: 'Баланс покупок', purchasesBalanceBody: 'Чистый баланс только от общих покупок.', utilitiesBalanceTitle: 'Баланс коммуналки', utilitiesBalanceBody: 'Разбивка счетов за коммуналку.', inspectMemberTitle: 'Посмотреть участника', inspectMemberBody: 'Можно быстро проверить чужой баланс без длинного списка карточек.', inspectMemberLabel: 'Участник', financeVisualsTitle: 'Визуальный разбор баланса', financeVisualsBody: 'Полосы показывают, как аренда, коммуналка и поправка на общие покупки формируют баланс каждого участника.', purchaseInvestmentsTitle: 'Кто оплачивал общие покупки', purchaseInvestmentsBody: 'Кольцевая диаграмма показывает, сколько каждый участник вложил в общие покупки в этом цикле.', purchaseInvestmentsEmpty: 'Вклады в общие покупки появятся здесь после первых записанных покупок.', purchaseShareLabel: 'Доля', purchaseTotalLabel: 'Всего общих покупок', participantsLabel: 'участника', purchasesTitle: 'Общие покупки', purchasesEmpty: 'Пока нет общих покупок в этом цикле.', utilityLedgerTitle: 'Коммунальные платежи', utilityLedgerEmpty: 'Пока нет коммунальных платежей в этом цикле.', paymentsTitle: 'Оплаты', paymentsEmpty: 'В этом цикле пока нет подтверждённых оплат.', paymentLedgerRent: 'Оплата аренды', paymentLedgerUtilities: 'Оплата коммуналки', ledgerActorFallback: 'Household', shareRent: 'Аренда', shareUtilities: 'Коммуналка', shareOffset: 'Общие покупки', rentFxTitle: 'FX по аренде дома', sourceAmountLabel: 'Исходник', settlementAmountLabel: 'Расчёт', fxEffectiveDateLabel: 'Зафиксировано', ledgerTitle: 'Вошедшие операции', emptyDashboard: 'Пока нет готового расчётного цикла.', latestActivityTitle: 'Последняя активность', latestActivityEmpty: 'Здесь появятся последние коммунальные платежи и покупки.', showMoreAction: 'Показать ещё', showLessAction: 'Свернуть', testingViewBadge: 'Тестовый вид', testingSurfaceTitle: 'Скрытый QA режим', testingSurfaceBody: 'Позволяет посмотреть админский или обычный вид без изменения реальных прав и сохранённых ролей.', testingUseRealRoleAction: 'Настоящая роль', testingPreviewAdminAction: 'Вид админа', testingPreviewResidentAction: 'Вид жителя', testingCurrentRoleLabel: 'Реальный доступ', testingPreviewRoleLabel: 'Сейчас показан', testingPeriodCurrentLabel: 'Период (из API)', testingPeriodOverrideLabel: 'Переопределить период', testingPeriodOverridePlaceholder: 'YYYY-MM', testingTodayOverrideLabel: 'Переопределить сегодня', testingTodayOverridePlaceholder: 'YYYY-MM-DD', testingClearOverridesAction: 'Сбросить переопределения', purchaseReviewTitle: 'Покупки', purchaseReviewBody: 'Здесь можно исправить или удалить покупку, если бот распознал её неправильно.', purchaseSplitTitle: 'Разделение', purchaseSplitModeLabel: 'Режим разделения', purchaseSplitEqual: 'Поровну', purchaseSplitCustom: 'Свои суммы', purchaseParticipantLabel: 'Участвует', participantIncluded: 'Участвует', participantExcluded: 'Не участвует', purchaseCustomShareLabel: 'Своя сумма', purchaseEditorBody: 'Проверь покупку и меняй детали разделения только если это действительно нужно.', purchasePayerLabel: 'Оплатил', paymentsAdminTitle: 'Оплаты', paymentsAdminBody: 'Добавляй, исправляй или удаляй оплаты за текущий цикл.', paymentsAddAction: 'Добавить оплату', copiedToast: 'Скопировано!', quickPaymentTitle: 'Записать оплату', quickPaymentBody: 'Быстро запиши оплату {type} за текущий цикл.', quickPaymentAmountLabel: 'Сумма', quickPaymentCurrencyLabel: 'Валюта', quickPaymentSubmitAction: 'Сохранить оплату', quickPaymentSubmitting: 'Сохраняем…', quickPaymentSuccess: 'Оплата успешно записана', quickPaymentFailed: 'Не удалось записать оплату', addingPayment: 'Добавляем оплату…', paymentCreateBody: 'Создай оплату в отдельном окне вместо длинной встроенной формы.', paymentKind: 'Тип оплаты', paymentAmount: 'Сумма оплаты', paymentMember: 'Участник', paymentSaveAction: 'Сохранить оплату', paymentDeleteAction: 'Удалить', paymentEditorBody: 'Проверь оплату в отдельном редакторе.', deletingPayment: 'Удаляем оплату…', purchaseSaveAction: 'Сохранить покупку', purchaseBalanceAction: 'Сбалансировать', purchaseRebalanceAction: 'Перераспределить', purchaseDeleteAction: 'Удалить', deletingPurchase: 'Удаляем покупку…', savingPurchase: 'Сохраняем покупку…', editEntryAction: 'Редактировать запись', closeEditorAction: 'Закрыть', householdSettingsTitle: 'Настройки дома', householdSettingsBody: 'Здесь можно менять язык дома и подтверждать новых соседей.', topicBindingsTitle: 'Привязанные топики', topicBindingsBody: 'Проверь, какие Telegram-топики сейчас подключены для покупок, обратной связи, напоминаний и оплат.', topicChat: 'Общение', topicPurchase: 'Покупки', topicFeedback: 'Обратная связь', topicReminders: 'Напоминания', topicPayments: 'Оплаты', topicBound: 'Привязан', topicUnbound: 'Не привязан', billingSettingsTitle: 'Настройки биллинга', assistantSettingsTitle: 'Характер бота', assistantSettingsBody: 'Задай бытовой контекст и тон, чтобы ответы бота звучали уместно и не лезли в разговор без повода.', assistantToneLabel: 'Настроение бота', assistantTonePlaceholder: 'Игривый, сухой, короткий, слегка саркастичный', assistantToneDefault: 'По умолчанию', assistantContextLabel: 'Контекст дома', assistantContextPlaceholder: 'Это дом в Коджори, рядом двор и сосновый лес.', assistantContextEmpty: 'Контекст не задан', settlementCurrency: 'Валюта расчёта', paymentBalanceAdjustmentPolicy: 'Зачёт баланса по покупкам', paymentBalanceAdjustmentUtilities: 'Зачитывать через коммуналку', paymentBalanceAdjustmentRent: 'Зачитывать через аренду', paymentBalanceAdjustmentSeparate: 'Держать покупки отдельно', billingCycleTitle: 'Текущий расчётный цикл', billingCycleEmpty: 'Нет открытого цикла', billingCycleStatus: 'Валюта текущего цикла: {currency}', billingCycleOpenHint: 'Открой цикл перед тем, как вносить аренду и коммунальные счета.', billingCyclePeriod: 'Период цикла', manageCycleAction: 'Изменить аренду цикла', cycleEditorBody: 'Меняй аренду только для текущего цикла. Долгосрочное значение по умолчанию остаётся в настройках.', openCycleAction: 'Открыть цикл', openingCycle: 'Открываем цикл…', closeCycleAction: 'Закрыть цикл', closingCycle: 'Закрываем цикл…', saveCycleRentAction: 'Сохранить аренду цикла', savingCycleRent: 'Сохраняем аренду…', utilityCategoryLabel: 'Категория коммуналки', utilityAmount: 'Сумма коммуналки', addUtilityBillAction: 'Добавить коммунальный счёт', savingUtilityBill: 'Сохраняем счёт…', saveUtilityBillAction: 'Сохранить счёт', deleteUtilityBillAction: 'Удалить', deletingUtilityBill: 'Удаляем счёт…', utilityBillsEmpty: 'Для этого цикла пока нет коммунальных счетов.', currencyLabel: 'Валюта', rentAmount: 'Сумма аренды', defaultRentAmount: 'Аренда по умолчанию', rentCurrencyLabel: 'Валюта аренды', defaultRentHint: 'Новые текущие циклы стартуют с этой суммой, если для конкретного месяца нет переопределения.', currentCycleRentLabel: 'Аренда текущего цикла', currentCycleRentHint: 'Используй это только когда в текущем месяце аренда отличается от значения по умолчанию.', currentCycleRentEmpty: 'Для этого цикла аренда пока не задана.', currentCycleUsesDefaultRent: 'Используется аренда по умолчанию', currentCycleOverrideRent: 'Есть переопределение для цикла', rentDueDay: 'День оплаты аренды', rentWarningDay: 'День напоминания по аренде', utilitiesDueDay: 'День оплаты коммуналки', utilitiesReminderDay: 'День напоминания по коммуналке', timezone: 'Часовой пояс', timezoneHint: 'Используй IANA-таймзону, например Asia/Tbilisi.', timezoneInvalidHint: 'Выбери корректную IANA-таймзону, например Asia/Tbilisi.', rentPaymentDestinationsTitle: 'Реквизиты для оплаты аренды', rentPaymentDestinationsEmpty: 'Реквизиты для оплаты аренды ещё не добавлены.', rentPaymentDestinationAddAction: 'Добавить реквизиты', rentPaymentDestinationRemoveAction: 'Удалить', rentPaymentDestinationLabel: 'Название', rentPaymentDestinationRecipient: 'Получатель', rentPaymentDestinationBank: 'Банк', rentPaymentDestinationAccount: 'Счёт / карта / IBAN', rentPaymentDestinationLink: 'Ссылка на оплату', rentPaymentDestinationNote: 'Комментарий', manageSettingsAction: 'Управлять настройками', billingSettingsEditorBody: 'Здесь живут значения по умолчанию для дома. Новые текущие циклы стартуют отсюда.', saveSettingsAction: 'Сохранить настройки', savingSettings: 'Сохраняем настройки…', utilityCategoriesTitle: 'Категории коммуналки', utilityCategoriesBody: 'Управляй категориями, которые админы используют для ежемесячного ввода коммунальных счетов.', utilityCategoryName: 'Название категории', utilityCategoryActive: 'Активна', utilityBillsEditorBody: 'В списке остаются только короткие карточки, а детали редактируются отдельно.', utilityBillCreateBody: 'Добавь коммунальный счёт в отдельном окне.', utilityBillEditorBody: 'Исправь детали коммунального счёта здесь.', editUtilityBillAction: 'Редактировать счёт', addCategoryAction: 'Добавить категорию', saveCategoryAction: 'Сохранить категорию', savingCategory: 'Сохраняем…', categoryCreateBody: 'Создай новую категорию без длинной встроенной формы.', categoryEditorBody: 'Переименуй категорию или отключи её в отдельном окне.', editCategoryAction: 'Редактировать категорию', adminsTitle: 'Админы', adminsBody: 'Повышай доверенных участников, чтобы они могли управлять биллингом и подтверждениями.', membersTitle: 'Участники', membersBody: 'Здесь собраны роли, веса аренды и статусы всех участников дома.', displayNameLabel: 'Имя в доме', displayNameHint: 'Это имя будет видно в балансе, леджере и ответах ассистента.', manageProfileAction: 'Редактировать профиль', profileEditorBody: 'Своё имя для дома лучше менять в отдельном окне, а не на самой странице.', memberEditorBody: 'Статус, политика и админские действия по участнику собраны в одном окне.', editMemberAction: 'Редактировать участника', saveMemberChangesAction: 'Сохранить изменения', saveDisplayName: 'Сохранить имя', savingDisplayName: 'Сохраняем имя…', memberStatusLabel: 'Статус участника', saveMemberStatusAction: 'Сохранить статус', savingMemberStatus: 'Сохраняем статус…', memberStatusActive: 'Активный', memberStatusAway: 'В отъезде', memberStatusLeft: 'Выехал', absencePolicyLabel: 'Политика начислений в отъезде', absencePolicyResident: 'Как у проживающего', absencePolicyAwayRentAndUtilities: 'В отъезде: аренда и коммуналка', absencePolicyAwayRentOnly: 'В отъезде: только аренда', absencePolicyInactive: 'Неактивен / выехал', absencePolicyHint: 'Применяется к будущим расчётам для участников со статусом «В отъезде».', absencePolicyEffectiveFrom: 'Действует с {period}', saveAbsencePolicyAction: 'Сохранить политику', savingAbsencePolicy: 'Сохраняем политику…', memberStatusSummary: 'Твой статус в доме: {status}.', rentWeightLabel: 'Вес аренды', saveRentWeightAction: 'Сохранить вес аренды', savingRentWeight: 'Сохраняем вес…', promoteAdminAction: 'Сделать админом', promotingAdmin: 'Повышаем…', residentHouseTitle: 'Доступ к дому', residentHouseBody: 'Настройками дома и подтверждением заявок управляют админы. Свой язык можно менять переключателем выше.', pendingMembersTitle: 'Ожидающие участники', pendingMembersBody: 'Подтверждай соседей здесь после того, как они отправят заявку через кнопку подключения.', pendingMembersEmpty: 'Сейчас нет ожидающих заявок.', approveMemberAction: 'Подтвердить', rejectMemberAction: 'Отклонить', rejectingMember: 'Отклонение…', approvingMember: 'Подтверждаем…', pendingMemberHandle: '@{username}', balancesEmpty: 'Баланс появится здесь, когда подключим dashboard API.', ledgerEmpty: 'Записи леджера появятся здесь после подключения финансового представления.', houseEmpty: 'Детали дома появятся здесь.' } } satisfies Record>