feat(arayüz): sayfa yönlendirme, korumalı sayfalar ve uygulama iskeleti

- react-router: Türkçe adresler (/defter, /plan, /birikim, ...), 404 sayfası
- Korumalı sayfalar: oturum yoksa /giris?donus=..., girişten sonra geri dönüş
- Açık yönlendirme koruması (safeReturnPath, 10 test)
- İskelet: mobilde 5 öğeli alt menü, masaüstünde sol kenar çubuğu
- Diğer sayfası (değerlendirme, raporlar, ayarlar, tema, çıkış)
- Arayüz metinleri lib/strings.ts'de toplanmaya başlandı
- Tasarım önizlemesi /dev/tasarim (yalnızca geliştirmede)
- Düzeltme: çıkışta önbellek temizliği ekranı güncellemiyordu

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-12 00:46:17 +03:00
parent 906f05f62f
commit c6d4c30461
29 changed files with 690 additions and 74 deletions
+51
View File
@@ -0,0 +1,51 @@
/**
* 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',
},
common: {
loading: 'Yükleniyor…',
},
} as const