feat(budget): aylık bütçe motoru, limitler ve ay sonu tahmini

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-06 00:58:51 +03:00
parent 6de6d07c66
commit 3fa1e949e2
10 changed files with 1179 additions and 1 deletions
+71
View File
@@ -804,6 +804,77 @@ export const tr = {
noAccountForGift: "Hediye hareketinde hesap seçilmez.",
},
},
budget: {
title: "Bütçe",
description:
"Aylık kategori limitleri, gerçekleşen harcama ve ay sonu tahmini. Üst kategori limiti alt kategorileri kapsar.",
prevMonth: "Önceki ay",
nextMonth: "Sonraki ay",
thisMonth: "Bu ay",
period: (from: string, to: string) => `${from} – ${to}`,
totals: {
limit: "Bütçe",
actual: "Harcanan",
remaining: "Kalan",
over: "Aşım",
forecast: "Ay sonu tahmini",
planned: (amount: string) => `Planlı: ${amount}`,
unbudgeted: "Bütçesiz harcama",
monthProgress: (day: number, total: number, pct: string) =>
`Ayın ${day}/${total}. günü (%${pct}).`,
},
status: {
ok: "Yolunda",
warning: "%80 geçildi",
over: "Limit aşıldı",
full: "Limit doldu",
none: "Limitsiz",
covered: "Üst kategori limitinde",
forecastOver: "Tahmin limiti aşıyor",
},
line: {
ofLimit: (actual: string, limit: string) => `${actual} / ${limit}`,
remaining: (amount: string) => `${amount} kaldı`,
over: (amount: string) => `${amount} aşıldı`,
forecast: (amount: string) => `Tahmin ${amount}`,
planned: (amount: string) => `Planlı ${amount}`,
},
uncategorized: "Kategorisiz",
empty: "Bu ay için bütçe yok.",
emptyHint:
"Limitleri elle girebilir, önceki ayın bütçesini kopyalayabilir veya önceki ayın harcamalarından oluşturabilirsiniz.",
noSpending: "Bu ay henüz gider yok.",
edit: "Limitleri düzenle",
editTitle: (month: string) => `Bütçe limitleri · ${month}`,
editHint:
"Boş bırakılan kategori limitsizdir. Alt kategori limiti üst kategorinin içinde bir alt sınırdır.",
editTotal: (amount: string) => `Toplam bütçe: ${amount}`,
copyPrevious: "Önceki aydan kopyala",
fromActuals: "Önceki ayın harcamalarından oluştur",
fromActualsHint:
"Ana kategorilerin önceki ay harcaması 100 TL'ye yukarı yuvarlanarak limit olur.",
replaceTitle: "Mevcut limitler değiştirilsin mi?",
replaceDescription: "Bu ayın tüm limitleri seçilen kaynakla değiştirilir.",
replace: "Değiştir",
includesHidden:
"Hane ayarı gereği diğer üyelerin gizli hesaplarından yapılan harcamalar dahil.",
warnings: (n: number) => `${n} kategoride bütçenin %80'i geçildi veya limit aşıldı.`,
goToBudget: "Bütçeye git",
toast: {
saved: "Bütçe kaydedildi.",
copied: "Önceki ayın limitleri kopyalandı.",
created: "Limitler önceki ayın harcamalarından oluşturuldu.",
},
errors: {
noPrevious: "Önceki ay için bütçe yok.",
noPreviousSpending: "Önceki ayda gider yok.",
category: "Geçersiz veya arşivlenmiş kategori.",
},
validation: {
month: "Geçersiz ay",
category: "Kategori seçin",
},
},
prices: {
title: "Fiyat tablosu",
description: