feat(shared): zod şemaları, Türkçe arama ve TL/tarih biçimleri

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-05 01:35:10 +03:00
parent c875847b65
commit 4dbd2eb441
11 changed files with 504 additions and 3 deletions
+195 -3
View File
@@ -1,15 +1,207 @@
/**
* Arayüz metinleri (tr-TR). Tüm kullanıcıya görünen metinler burada toplanır.
* Arayüz metinleri (tr-TR). Kullanıcıya görünen tüm metinler burada toplanır.
* Şimdilik tek dil; ileride çok dil gerekirse bu nesnenin şekli sözleşme olur.
*/
export const tr = {
app: {
name: "BÜTÇEM",
tagline: "Aile bütçesi, birikim, ev stoğu ve akıllı alışveriş",
setupInProgress: "Kurulum sürüyor",
setupDescription: "Altyapı hazır. Giriş ekranı ve arayüz bir sonraki fazda eklenecek.",
version: "Sürüm",
},
common: {
save: "Kaydet",
cancel: "Vazgeç",
close: "Kapat",
delete: "Sil",
edit: "Düzenle",
create: "Oluştur",
search: "Ara",
actions: "İşlemler",
loading: "Yükleniyor…",
comingSoon: "Yakında",
required: "Bu alan zorunlu",
yes: "Evet",
no: "Hayır",
previous: "Önceki",
next: "Sonraki",
noResults: "Sonuç bulunamadı.",
page: (current: number, total: number) => `Sayfa ${current} / ${total}`,
rowsPerPage: "Sayfa başına",
totalRows: (n: number) => `Toplam ${n} kayıt`,
showPassword: "Şifreyi göster",
hidePassword: "Şifreyi gizle",
genericError: "Beklenmeyen bir hata oluştu. Lütfen tekrar deneyin.",
},
theme: {
label: "Tema",
light: "Açık",
dark: "Koyu",
system: "Sistem",
},
nav: {
main: "Menü",
dashboard: "Ana sayfa",
transactions: "İşlemler",
accounts: "Hesaplar",
budget: "Bütçe",
planned: "Planlı işlemler",
contacts: "Cari hesaplar",
savings: "Birikim",
stock: "Ev stoğu",
shopping: "Alışveriş",
reports: "Raporlar",
settings: "Ayarlar",
more: "Daha fazla",
admin: "Yönetim",
adminUsers: "Kullanıcılar",
adminHouseholds: "Haneler",
toggleSidebar: "Menüyü aç/kapat",
},
household: {
label: "Aktif hane",
select: "Hane seçin",
roles: { owner: "Sahip", member: "Üye", viewer: "İzleyici" },
},
userMenu: {
open: "Kullanıcı menüsü",
profile: "Profil",
logout: "Çıkış yap",
loggedOut: "Çıkış yapıldı.",
},
roles: { admin: "Yönetici", user: "Kullanıcı" },
quickAdd: {
button: "Hızlı ekle",
title: "Hızlı ekle",
description: "Ne eklemek istiyorsunuz?",
expense: "Gider",
income: "Gelir",
transfer: "Transfer",
expenseHint: "Harcama, fatura, alışveriş",
incomeHint: "Maaş, ek gelir, iade",
transferHint: "Hesaplar ve cariler arası",
notYet: "İşlem formu Faz 6'da eklenecek.",
},
auth: {
loginTitle: "Giriş yap",
loginDescription: "Hesabınıza kullanıcı adı veya e-posta ile giriş yapın.",
identifier: "Kullanıcı adı veya e-posta",
identifierPlaceholder: "ornek veya ornek@eposta.com",
password: "Şifre",
submit: "Giriş yap",
submitting: "Giriş yapılıyor…",
invalidCredentials: "Kullanıcı adı/e-posta veya şifre hatalı.",
noSignUp: "Hesaplar yalnızca yönetici tarafından açılır.",
identifierRequired: "Kullanıcı adı veya e-posta girin",
passwordRequired: "Şifre girin",
},
dashboard: {
title: "Ana sayfa",
welcome: (name: string) => `Hoş geldin, ${name}`,
welcomeDescription: "Bu ayın özetini burada göreceksin. Veriler sonraki fazlarda bağlanacak.",
cards: {
monthIncome: "Bu ay gelir",
monthExpense: "Bu ay gider",
monthRemaining: "Kalan",
totalBalance: "Toplam hesap bakiyesi",
cardDebt: "Kart borçları",
netWorth: "Net varlık",
},
noData: "Henüz veri yok",
},
adminUsers: {
title: "Kullanıcılar",
description: "Kullanıcı oluşturma, rol, şifre ve erişim yönetimi.",
newUser: "Yeni kullanıcı",
searchPlaceholder: "Ad, kullanıcı adı veya e-posta ara…",
columns: {
name: "Ad soyad",
username: "Kullanıcı adı",
email: "E-posta",
role: "Rol",
status: "Durum",
createdAt: "Oluşturulma",
},
status: { active: "Aktif", banned: "Askıda" },
actions: {
edit: "Düzenle",
changeRole: "Rolü değiştir",
makeAdmin: "Yönetici yap",
makeUser: "Kullanıcı yap",
resetPassword: "Şifre sıfırla",
ban: "Askıya al",
unban: "Askıyı kaldır",
delete: "Sil",
},
form: {
createTitle: "Yeni kullanıcı",
createDescription: "Kullanıcı kendi hesabını açamaz; hesapları buradan oluşturun.",
editTitle: "Kullanıcıyı düzenle",
editDescription: "Ad, kullanıcı adı, e-posta ve rol bilgilerini güncelleyin.",
name: "Ad soyad",
username: "Kullanıcı adı",
usernameHint: "Küçük harf, rakam, nokta, alt çizgi; 3–30 karakter.",
email: "E-posta",
emailHint: "İsteğe bağlı. Boş bırakılırsa giriş kullanıcı adıyla yapılır.",
role: "Sistem rolü",
password: "Geçici şifre",
passwordHint: "En az 8 karakter. Kullanıcıya güvenli bir kanaldan iletin.",
},
password: {
title: "Şifre sıfırla",
description: (name: string) => `${name} için yeni bir şifre belirleyin.`,
newPassword: "Yeni şifre",
confirm: "Şifreyi belirle",
},
ban: {
title: "Kullanıcıyı askıya al",
description: (name: string) => `${name} giriş yapamayacak ve açık oturumları kapatılacak.`,
reason: "Neden (isteğe bağlı)",
confirm: "Askıya al",
},
remove: {
title: "Kullanıcı silinsin mi?",
description: (name: string) => `${name} kalıcı olarak silinecek. Bu işlem geri alınamaz.`,
confirm: "Kalıcı olarak sil",
},
toast: {
created: (name: string) => `${name} oluşturuldu.`,
updated: (name: string) => `${name} güncellendi.`,
roleChanged: (name: string) => `${name} için rol değiştirildi.`,
passwordSet: (name: string) => `${name} için şifre güncellendi.`,
banned: (name: string) => `${name} askıya alındı.`,
unbanned: (name: string) => `${name} için askı kaldırıldı.`,
removed: (name: string) => `${name} silindi.`,
},
guards: {
self: "Kendi hesabınız için bu işlem yapılamaz.",
lastAdmin: "Sistemdeki son yönetici silinemez veya rolü düşürülemez.",
},
errors: {
usernameTaken: "Bu kullanıcı adı kullanılıyor.",
emailTaken: "Bu e-posta adresi kullanılıyor.",
checkFields: "Lütfen işaretli alanları düzeltin.",
},
you: "Siz",
noEmail: "—",
},
validation: {
nameMin: "Ad en az 2 karakter olmalı",
nameMax: "Ad en fazla 80 karakter olabilir",
usernameFormat: "Yalnızca küçük harf, rakam, nokta ve alt çizgi; 3–30 karakter",
email: "Geçerli bir e-posta adresi girin",
passwordMin: "Şifre en az 8 karakter olmalı",
passwordMax: "Şifre en fazla 128 karakter olabilir",
banReasonMax: "Neden en fazla 200 karakter olabilir",
},
errors: {
notFoundTitle: "Sayfa bulunamadı",
notFoundDescription: "Aradığınız sayfa taşınmış veya hiç var olmamış olabilir.",
backHome: "Ana sayfaya dön",
errorTitle: "Bir şeyler ters gitti",
errorDescription: "Sayfa yüklenirken bir hata oluştu. Tekrar deneyebilirsiniz.",
retry: "Tekrar dene",
reference: "Hata kodu",
},
} as const;
export type Messages = typeof tr;