feat(giriş): giriş ve kayıt ekranları

- Giriş: satır içi doğrulama, şifre göster/gizle, beni hatırla, hoş geldin bildirimi
- Kayıt: yeni hane kur / davetle katıl, /kayit?davet=KOD bağlantısı
- Sunucu hataları ilgili alanda gösterilir (kayıtlı e-posta, geçersiz davet)
- react-hook-form + zod, sonner bildirimleri, shadcn input/label/checkbox/card
- Ortak form bileşenleri (FormField, PasswordInput, FormError)
- 8 form kuralı testi (toplam 47); api.http demo hesaplara güncellendi
- Faz 2 tamamlandı

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-12 00:52:13 +03:00
parent c6d4c30461
commit b269411823
20 changed files with 886 additions and 62 deletions
+49
View File
@@ -45,6 +45,55 @@ export const t = {
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).',
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ı',
},
},
common: {
loading: 'Yükleniyor…',
},