Files
household-bot/apps/miniapp/src/i18n.ts

713 lines
40 KiB
TypeScript
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.
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<Locale, Record<string, string>>