mirror of
https://github.com/whekin/household-bot.git
synced 2026-03-31 23:44:03 +00:00
699 lines
39 KiB
TypeScript
699 lines
39 KiB
TypeScript
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.',
|
||
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.',
|
||
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: 'Текущий расклад по всем участникам за этот цикл.',
|
||
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:
|
||
'Проверь покупку и меняй детали разделения только если это действительно нужно.',
|
||
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>>
|