/** * Arayüz metinleri tek yerde (KAKEIBO_PROMPT §15 — ileride çok dil desteği için). * Yeni ekran eklerken metinleri buraya, ilgili bölümün altına ekleyin. */ export const t = { app: { name: 'Kakeibo', tagline: 'Kişisel Ev Finans Defteri', }, nav: { dashboard: 'Panel', ledger: 'Defter', planning: 'Plan', savings: 'Birikim', more: 'Diğer', review: 'Değerlendirme', reports: 'Raporlar', settings: 'Ayarlar', main: 'Ana menü', }, pages: { dashboard: { title: 'Panel', description: 'Gelir, harcama ve birikimin tek bakışta özeti.' }, ledger: { title: 'Günlük Defter', description: 'Haftalık harcama girişleri.' }, planning: { title: 'Aylık Plan', description: 'Gelir, sabit giderler, birikim hedefi ve bütçe dağıtımı.', }, savings: { title: 'Birikimler', description: 'TL, altın ve döviz varlıkların, kâr/zarar.' }, review: { title: 'Ay Sonu Değerlendirmesi', description: "Kakeibo'nun dört sorusu ve dönem kapanışı.", }, reports: { title: 'Raporlar', description: 'Gelir–gider, kategori ve bütçe sapma raporları.' }, settings: { title: 'Ayarlar', description: 'Kategoriler, ödeme türleri, hane ve hesap.' }, more: { title: 'Diğer' }, notFound: { title: 'Sayfa bulunamadı', description: 'Aradığınız sayfa taşınmış ya da hiç var olmamış olabilir.', action: 'Panele dön', }, }, comingSoon: (when: string) => `Bu ekran ${when} geliştirilecek.`, account: { owner: 'Hane sahibi', member: 'Üye', logout: 'Çıkış yap', theme: 'Tema', }, auth: { login: { title: 'Tekrar hoş geldin', description: 'Defterine devam etmek için giriş yap.', email: 'E-posta', password: 'Şifre', remember: 'Beni hatırla', rememberHint: '30 gün boyunca bu cihazda oturum açık kalır.', submit: 'Giriş yap', submitting: 'Giriş yapılıyor…', noAccount: 'Hesabın yok mu?', toRegister: 'Kayıt ol', welcome: (name: string) => `Hoş geldin, ${name} 👋`, }, register: { title: 'Hesap oluştur', description: 'Hane bütçeni Kakeibo yöntemiyle tutmaya başla.', name: 'Adın', email: 'E-posta', password: 'Şifre', passwordHint: 'En az 8 karakter.', modeLabel: 'Hane', modeNew: 'Yeni hane kur', modeJoin: 'Davetle katıl', householdName: 'Hane adı', householdHint: (name: string) => (name ? `Boş bırakırsan: "${name} Hanesi"` : 'İsteğe bağlı'), inviteCode: 'Davet kodu', inviteHint: 'Hane sahibinden aldığın 8 karakterlik kod (ör. ABCD-EFGH).', closedNote: 'Bu sunucuda yeni hane kaydı kapalı. Katılmak için hane sahibinden davet bağlantısı ya da kodu iste.', submit: 'Hesabı oluştur', submitting: 'Oluşturuluyor…', hasAccount: 'Zaten hesabın var mı?', toLogin: 'Giriş yap', welcome: (household: string) => `Hesabın hazır! ${household} defterin açıldı 📒`, joined: (household: string) => `${household} hanesine katıldın 🎉`, }, validation: { emailRequired: 'E-posta gerekli', emailInvalid: 'Geçerli bir e-posta adresi girin', passwordRequired: 'Şifre gerekli', passwordTooShort: 'Şifre en az 8 karakter olmalı', passwordTooLong: 'Şifre en fazla 128 karakter olabilir', nameRequired: 'Adını yaz', nameTooLong: 'Ad en fazla 80 karakter olabilir', householdTooLong: 'Hane adı en fazla 80 karakter olabilir', inviteRequired: 'Davet kodunu yaz', inviteInvalid: 'Davet kodu 8 karakter olmalı', }, }, noPeriod: { title: 'Henüz açık bir dönem yok', description: 'Kakeibo her ay bir planla başlar: gelirini, sabit giderlerini ve birikim hedefini yaz, kalanı 4 gruba dağıt. Birkaç dakika sürer.', action: 'Dönemi başlat', }, wizard: { title: 'Yeni dönem', description: 'Dönemini birkaç adımda planla. Her adım hemen kaydedilir; istediğin an ara verebilirsin.', steps: ['Dönem', 'Gelirler', 'Giderler', 'Birikim', 'Bütçe'], stepOf: (n: number, total: number) => `Adım ${n}/${total}`, back: 'Geri', next: 'İleri', saving: 'Kaydediliyor…', dates: { title: 'Dönemin tarihleri', hint: 'Çoğu kişi takvim ayını seçer. Maaşın ayın ortasında yatıyorsa dönemi o güne göre de başlatabilirsin.', presetsLabel: 'Hızlı seçim', start: 'Başlangıç', last: 'Son gün', name: 'Dönem adı', nameHint: 'Boş bırakırsan tarihlere göre otomatik verilir (ör. "Aralık 2026").', days: (n: number) => `${n} gün · haftalar Pazartesi başlar`, created: 'Dönem açıldı', startRequired: 'Başlangıç tarihini seçin', lastRequired: 'Son günü seçin', lastBeforeStart: 'Son gün, başlangıçtan önce olamaz', tooLong: (max: number) => `Dönem en fazla ${max} gün olabilir`, nameTooLong: 'Dönem adı en fazla 60 karakter olabilir', }, items: { income: { title: 'Sabit gelirler', hint: 'Bu dönem beklediğin gelirler: maaş, kira geliri, burs… Tarih isteğe bağlı.', placeholder: 'ör. Maaş', empty: 'Henüz gelir eklenmedi.', total: 'Toplam gelir', }, expense: { title: 'Sabit giderler', hint: 'Her ay ödediğin, tutarı belli giderler: kira, aidat, faturalar, abonelikler, kredi taksiti.', placeholder: 'ör. Kira', empty: 'Henüz sabit gider eklenmedi.', total: 'Toplam sabit gider', }, name: 'Ad', amount: 'Tutar', date: 'Tarih (isteğe bağlı)', add: 'Ekle', remove: (name: string) => `${name} kalemini sil`, removed: (name: string) => `${name} silindi`, copy: 'Önceki dönemden kopyala', copyHint: 'Önceki dönemin gelir ve giderleri eklenir; aynı adda olanlar atlanır.', copied: (n: number) => (n > 0 ? `${n} kalem kopyalandı` : 'Kopyalanacak yeni kalem yok'), nameRequired: 'Adını yazın', nameTooLong: 'Ad en fazla 60 karakter olabilir', dateOutside: 'Tarih dönemin içinde olmalı', }, savings: { title: 'Birikim hedefi', hint: 'Kakeibo’da birikim, harcamadan önce ayrılır. Bu dönem kenara koymak istediğin tutarı yaz.', available: 'Gelir − sabit giderler', goal: 'Birikim hedefi', after: 'Harcanabilir kalan', negative: 'Birikim hedefi bu dönemin gelirini aşıyor. Tutarı azaltmayı düşünebilirsin.', }, budget: { title: 'Bütçe dağıtımı', hint: 'Harcanabilir tutarı 4 gruba böl. Haftalık bütçeler, haftaların gün sayısına göre otomatik hesaplanır.', method: 'Öneri', methods: { default: 'Varsayılan %', previous: 'Önceki dönem', avg3: 'Son 3 dönem' }, apply: 'Öneriyi uygula', distributed: 'Dağıtılan', unallocated: (amount: string) => `${amount} dağıtılmadı`, over: (amount: string) => `Harcanabilir tutar ${amount} aşıldı`, balanced: 'Tamamı dağıtıldı 👌', finish: 'Planı tamamla', done: 'Dönemin hazır! Harcamalarını Defter’e yazmaya başlayabilirsin 📒', }, }, plan: { edit: 'Düzenle', save: 'Kaydet', cancel: 'Vazgeç', saving: 'Kaydediliyor…', saved: 'Plan kaydedildi', noChanges: 'Değişiklik yok', editing: 'Düzenleme modu', editingHint: 'Değişiklikler "Kaydet"e basınca kaydedilir.', saveFailed: (msg: string) => `${msg} Ekranda kaydedilmiş son durum gösteriliyor.`, leaveConfirm: 'Kaydedilmemiş değişiklikler var. Yine de çıkılsın mı?', periodInfo: (days: number, weeks: number) => `${days} gün · ${weeks} hafta`, changeDates: 'Tarihleri değiştir', add: { income: 'Gelir ekle', expense: 'Gider ekle' }, savings: 'Birikim hedefi', budget: 'Bütçe dağıtımı', weekly: 'Haftalık döküm', week: (n: number) => `${n}. hafta`, weekDays: (n: number) => `${n} gün`, manual: 'elle', resetWeek: (n: number) => `${n}. haftayı otomatiğe döndür`, weekHint: 'Boş bırakılan haftalar kalan tutarı gün sayısına göre paylaşır.', weeklyOver: 'Elle girilen haftaların toplamı aylık tutarı aşıyor.', suggestionHint: 'Öneri, kaydedilmiş gelir ve giderlere göre hesaplanır.', emptyBudget: 'Henüz bütçe dağıtılmadı. "Düzenle" ile 4 gruba dağıtabilirsin.', }, notes: { title: 'Notlar', empty: 'Henüz not yok. Bu dönemle ilgili düşüncelerini, kararlarını ya da yapılacakları yaz.', add: 'Not ekle', edit: 'Düzenle', remove: 'Sil', editNote: (title: string) => `${title} notunu düzenle`, removeNote: (title: string) => `${title} notunu sil`, confirmRemove: (title: string) => `"${title}" notu silinsin mi?`, removed: 'Not silindi', saved: 'Not kaydedildi', noteTitle: 'Başlık', titlePlaceholder: 'ör. Bu ayın hedefleri', body: 'Metin', bodyPlaceholder: '- [ ] Elektrik faturasını öde\n- Dışarıda yemek ayda en fazla 2 kez', write: 'Yaz', preview: 'Önizle', previewEmpty: 'Önizlenecek bir şey yok.', markdownHint: 'Markdown: **kalın**, *italik*, - liste, - [ ] yapılacak, # başlık', save: 'Kaydet', cancel: 'Vazgeç', saving: 'Kaydediliyor…', meta: (date: string, author?: string) => (author ? `${date} · ${author}` : date), titleRequired: 'Başlık yazın', titleTooLong: 'Başlık en fazla 120 karakter olabilir', bodyTooLong: 'Metin en fazla 20.000 karakter olabilir', }, summary: { income: 'Gelir', fixed: 'Sabit giderler', savings: 'Birikim', debt: 'Devreden borç', surplus: 'Devreden artı', spendable: 'Harcanabilir', }, ledger: { readOnly: 'Bu dönem kapalı; kayıtlar yalnızca görüntülenebilir. Düzeltme için hane sahibi Değerlendirme’den yeniden açabilir.', week: (n: number, count: number) => `${n}. hafta / ${count}`, prevWeek: 'Önceki hafta', nextWeek: 'Sonraki hafta', thisWeek: 'Bu hafta', weekSpent: 'Bu hafta harcanan', weekBudget: 'bütçe', formTitle: 'Harcama ekle', amount: 'Tutar', group: 'Ana grup', category: 'Kategori', noCategory: 'Bu grupta aktif kategori yok.', paymentMethod: 'Ödeme türü', noPaymentMethod: 'Belirtme', date: 'Tarih', description: 'Açıklama', descriptionHint: 'İsteğe bağlı (ör. "Haftalık market")', save: 'Kaydet', saving: 'Kaydediliyor…', saved: (amount: string, category: string) => `Eklendi: ${amount} · ${category}`, groupRequired: 'Ana grubu seçin', categoryRequired: 'Kategori seçin', dateInvalid: 'Tarih geçersiz', dateOutside: 'Tarih dönem içinde olmalı', descriptionTooLong: 'Açıklama en fazla 200 karakter olabilir', editTitle: 'Harcamayı düzenle', update: 'Güncelle', cancel: 'Vazgeç', updated: 'Harcama güncellendi', listTitle: 'Haftanın girişleri', empty: 'Bu hafta henüz harcama yok.', dayTotal: 'Gün toplamı', edit: (what: string) => `${what} harcamasını düzenle`, remove: (what: string) => `${what} harcamasını sil`, deleted: 'Harcama silindi', undo: '↩️ Geri al', restored: 'Harcama geri alındı', editing: 'Düzenleniyor', summaryTitle: 'Haftalık özet', budget: 'Bütçe', spent: 'Harcanan', left: 'Kalan', over: 'Aşıldı', }, review: { ongoing: (last: string) => `Dönem ${last} tarihinde bitiyor; değerler kayıt girdikçe değişir.`, q1: 'Ne kadar param vardı?', q1Detail: (income: string, fixed: string) => `Gelir ${income} − sabit giderler ${fixed}`, q1Debt: (debt: string) => ` − devreden borç ${debt}`, q1Surplus: (surplus: string) => ` + devreden artı ${surplus}`, q2: 'Ne kadar biriktirmek istedim?', q2Detail: 'Dönem başında belirlenen birikim hedefi', q3: 'Ne kadar harcadım?', q3Detail: (budget: string, pct: string) => `Bütçenin ${pct} kadarı (${budget})`, q3NoBudget: 'Bütçe dağıtılmamış', q4: 'Ne kadar biriktirdim?', above: (x: string) => (x === '0,00 ₺' ? 'Hedefe tam ulaşıldı' : `Hedefin ${x} üstünde 🎉`), below: (x: string) => `Hedefin ${x} altında`, deficit: (x: string) => `${x} açık; borç olarak sonraki döneme devreder`, groupsTitle: 'Planlanan ve gerçekleşen', groupLine: (spent: string, planned: string) => `${spent} / ${planned}`, left: (x: string) => `${x} kaldı`, over: (x: string) => `${x} aşıldı`, categoriesTitle: 'En çok harcanan kategoriler', categoriesEmpty: 'Bu dönemde henüz harcama yok.', count: (n: number) => `${n} kayıt`, showAll: (n: number) => `Tümünü göster (${n})`, showLess: 'Daha az göster', weeksTitle: 'Haftalık dağılım', week: (n: number) => `${n}. hafta`, reflectionTitle: 'Nasıl daha iyi yapabilirim?', reflectionEmpty: 'Bu ay neler iyi gitti, neyi değiştirmek istersin? Kısa notlar yeterli.', reflectionNone: 'Bu dönem için yazılmamış.', reflectionPlaceholder: '- Dışarıda yemeği haftada bire indir\n- Market alışverişini listeyle yap', reflectionSaved: 'Kaydedildi', reflectionTooLong: 'Metin en fazla 20.000 karakter olabilir', edit: 'Düzenle', write: 'Yaz', closeTitle: 'Dönemi kapat', closeHint: 'Değerlendirme bittiyse dönemi kapat: birikimin ayrılır, kalan artı ya da açık sonraki döneme devreder.', closeAction: '🔒 Dönemi Kapat', closedInfo: (date: string, saved: string) => `Bu dönem ${date} tarihinde kapandı. Birikime aktarılan: ${saved}.`, reopen: 'Düzeltme için yeniden aç', reopenConfirm: 'Dönem düzeltmeye açılır: kayıt ve plan değiştirilebilir. Bitince yeniden kapatman gerekir; devir o zaman yeniden hesaplanır.', reopenYes: 'Evet, yeniden aç', reopenNo: 'Vazgeç', reopened: 'Dönem düzeltmeye açıldı', reopenBlocked: 'Sonraki dönem kapalı olduğu için bu dönem yeniden açılamaz.', correctingTitle: 'Bu dönem düzeltmede', correctingHint: 'Kayıtları ve planı düzelt, bitince yeniden kapat; sonraki döneme devir güncellenir.', recloseAction: '🔒 Yeniden Kapat', fixInLedger: 'Defter’de düzelt', fixInPlan: 'Plan’da düzelt', }, periods: { picker: 'Dönem', status: { open: 'Açık', closed: '🔒 Kapalı', correcting: '✏️ Düzeltmede' }, notFound: 'Dönem bulunamadı. Listeden başka bir dönem seç.', history: 'Geçmiş dönemler', toSavings: (x: string) => `Birikime ${x}`, }, closing: { title: 'Dönemi Kapat', description: 'Birkaç adımda dönemi kapat ve devri belirle.', steps: ['Özet', 'Birikim', 'Onay'], early: (last: string) => `Dönem ${last} tarihinde bitiyor. Şimdi kapatırsan kalan günler için kayıt giremezsin.`, noReflection: '"Nasıl daha iyi yapabilirim?" henüz boş. Kapanınca değiştirilemez.', writeReflection: 'Değerlendirmeye dön ve yaz', savingsTitle: 'Birikim ve devir', savingsHint: (x: string) => `Bu dönem ${x} biriktirdin. Ne kadarını birikime ayırmak istersin? Kalanı sonraki döneme artı olarak devreder.`, toSavings: 'Birikime aktarılacak', all: 'Tamamı', none: 'Hiçbiri', tooMuch: (x: string) => `En fazla ${x} aktarabilirsin`, deficitHint: (x: string) => `Bu dönem ${x} açık verdin. Açık, sonraki dönemin "Ne kadar param vardı?" hesabından borç olarak düşülür.`, zeroHint: 'Bu dönemde ne birikim ne açık var; sonraki döneme bir şey devretmez.', confirmTitle: 'Onayla', confirmHint: 'Kapatmadan önce son bir kez kontrol et.', willClose: (name: string) => `${name} kapanacak; kayıt eklenemez ve değiştirilemez.`, savingsLine: 'Birikime aktarılacak', surplusLine: 'Sonraki döneme artı olarak devreden', debtLine: 'Sonraki döneme borç olarak devreden', carryLine: 'Sonraki döneme devreden', noCarry: 'Sonraki döneme devreden yok.', reopenNote: 'Hata fark edersen hane sahibi dönemi düzeltme için yeniden açabilir.', submit: '🔒 Dönemi Kapat', submitting: 'Kapatılıyor…', done: (name: string) => `${name} kapandı`, resultHint: 'Sonraki dönemi açtığında devir otomatik olarak eklenir.', resultAttached: 'Devir açık olan sonraki döneme eklendi.', realized: 'Gerçekleşen birikim', newPeriod: 'Yeni dönemi aç', toPlan: 'Plana git', toDashboard: 'Panele dön', noOpen: 'Kapatılacak açık dönem yok.', alreadyClosed: 'Bu dönem zaten kapalı.', }, common: { loading: 'Yükleniyor…', retry: 'Tekrar dene', }, } as const