cfc2b2c974
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
736 lines
28 KiB
TypeScript
736 lines
28 KiB
TypeScript
/**
|
||
* 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ş",
|
||
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.",
|
||
unauthorized: "Bu işlem için yetkiniz yok.",
|
||
notFound: "Kayıt bulunamadı.",
|
||
},
|
||
swatches: {
|
||
blue: "Mavi",
|
||
sky: "Gök mavisi",
|
||
teal: "Turkuaz",
|
||
green: "Yeşil",
|
||
lime: "Fıstık yeşili",
|
||
amber: "Kehribar",
|
||
orange: "Turuncu",
|
||
red: "Kırmızı",
|
||
rose: "Gül",
|
||
pink: "Pembe",
|
||
purple: "Mor",
|
||
indigo: "Çivit",
|
||
slate: "Gri",
|
||
},
|
||
theme: {
|
||
label: "Tema",
|
||
light: "Açık",
|
||
dark: "Koyu",
|
||
system: "Sistem",
|
||
},
|
||
nav: {
|
||
main: "Menü",
|
||
dashboard: "Ana sayfa",
|
||
transactions: "İşlemler",
|
||
accounts: "Hesaplar",
|
||
categories: "Kategoriler",
|
||
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" },
|
||
roleHints: {
|
||
owner: "Hane ayarları, üyeler ve hesaplar",
|
||
member: "İşlem girer, liste ve stok günceller",
|
||
viewer: "Yalnızca görüntüler",
|
||
},
|
||
switched: (name: string) => `Aktif hane: ${name}`,
|
||
},
|
||
households: {
|
||
lastOwner: "Hanenin son sahibi düşürülemez veya çıkarılamaz.",
|
||
noHousehold: {
|
||
title: "Henüz bir haneye üye değilsiniz",
|
||
description:
|
||
"Bütçe ve diğer verileri görmek için bir haneye üye olmanız gerekir. Yöneticiden sizi bir haneye eklemesini isteyin.",
|
||
adminHint:
|
||
"Yönetici olarak Yönetim › Haneler sayfasından hane oluşturabilir ve üye ekleyebilirsiniz.",
|
||
adminLink: "Hanelere git",
|
||
},
|
||
viewerReadOnly: "İzleyici rolündesiniz; bu hanede değişiklik yapamazsınız.",
|
||
},
|
||
settings: {
|
||
title: "Ayarlar",
|
||
description: "Aktif hanenin ayarları ve üyeleri.",
|
||
household: "Hane",
|
||
householdDescription: "Bütçe ve planlama tercihleri tüm hane için geçerlidir.",
|
||
ownerOnly: "Bu ayarları yalnızca hane sahipleri değiştirebilir.",
|
||
fields: {
|
||
name: "Hane adı",
|
||
budgetMonthStartDay: "Bütçe ayı başlangıç günü",
|
||
budgetMonthStartDayHint:
|
||
"1 = takvim ayı. Örneğin 15 seçilirse bütçe ayı her ayın 15. günü başlar.",
|
||
installmentBudgetMode: "Taksitlerin bütçeye etkisi",
|
||
installmentModes: {
|
||
per_installment: "Her taksit kendi ayına",
|
||
purchase_month: "Tamamı harcama ayına",
|
||
},
|
||
dailyPlanMode: "Günlük plan dağıtımı",
|
||
dailyPlanModes: {
|
||
even: "Değişken bütçe günlere eşit",
|
||
previous_month_pattern: "Önceki ayın harcama örüntüsüne göre",
|
||
},
|
||
includePrivateAccountsInTotals: "“Yalnızca ben” hesapları hane toplamlarına dahil edilsin",
|
||
extraStoreSavingThreshold: "Ek mağaza tasarruf eşiği (TL)",
|
||
extraStoreSavingThresholdHint:
|
||
"Alışveriş planlayıcı, ek bir mağazayı yalnızca tasarruf bu tutarı aşarsa önerir.",
|
||
},
|
||
saved: "Hane ayarları kaydedildi.",
|
||
members: "Üyeler",
|
||
membersDescription: "Hane içi roller. Yeni üyeyi yönetici ekler.",
|
||
memberActions: (name: string) => `${name} — işlemler`,
|
||
changeRole: "Rolü değiştir",
|
||
removeMember: "Haneden çıkar",
|
||
removeTitle: "Üye haneden çıkarılsın mı?",
|
||
removeDescription: (name: string, household: string) =>
|
||
`${name}, “${household}” hanesine artık erişemeyecek. Kullanıcı hesabı silinmez.`,
|
||
removeConfirm: "Haneden çıkar",
|
||
roleChanged: (name: string) => `${name} için rol güncellendi.`,
|
||
memberRemoved: (name: string) => `${name} haneden çıkarıldı.`,
|
||
banned: "Askıda",
|
||
},
|
||
accounts: {
|
||
title: "Hesaplar",
|
||
description: "Nakit, banka, birikim, kredi kartı ve yemek kartı hesapları.",
|
||
newAccount: "Yeni hesap",
|
||
createTitle: "Yeni hesap",
|
||
editTitle: "Hesabı düzenle",
|
||
formDescription: "Güncel bakiye işlemlerden hesaplanır; açılış bakiyesi başlangıç noktasıdır.",
|
||
types: {
|
||
cash: "Nakit",
|
||
bank: "Vadesiz banka",
|
||
savings: "Birikim / vadeli",
|
||
credit_card: "Kredi kartı",
|
||
meal_card: "Yemek kartı",
|
||
},
|
||
typeGroups: {
|
||
cash: "Nakit",
|
||
bank: "Banka hesapları",
|
||
savings: "Birikim hesapları",
|
||
credit_card: "Kredi kartları",
|
||
meal_card: "Yemek kartları",
|
||
},
|
||
providers: {
|
||
pluxee: "Pluxee (Sodexo)",
|
||
multinet: "Multinet",
|
||
edenred: "Edenred (Ticket)",
|
||
setcard: "Setcard",
|
||
metropol: "Metropol",
|
||
other: "Diğer",
|
||
},
|
||
fields: {
|
||
name: "Hesap adı",
|
||
type: "Tür",
|
||
typeLockedHint: "Hesap türü oluşturulduktan sonra değiştirilemez.",
|
||
institution: "Banka / kurum",
|
||
institutionPlaceholder: "ör. Ziraat Bankası",
|
||
provider: "Kart sağlayıcısı",
|
||
openingBalance: "Açılış bakiyesi (TL)",
|
||
openingDebt: "Açılış borcu (TL)",
|
||
openingBalanceHint: "Banka hesabı KMH kullanıyorsa eksi girilebilir (ör. -2.500,00).",
|
||
openingDebtHint: "Karttaki mevcut toplam borç; pozitif girin.",
|
||
openingDate: "Açılış tarihi",
|
||
owner: "Hesap sahibi",
|
||
ownerNone: "— Ortak hesap —",
|
||
isPrivate: "Yalnızca ben (bakiyeyi yalnızca hesap sahibi görür)",
|
||
appearance: "Görünüm",
|
||
advanced: "Gelişmiş ayarlar",
|
||
overdraft: "Esnek hesap (KMH)",
|
||
overdraftEnabled: "Bu hesapta KMH var",
|
||
overdraftLimit: "KMH limiti (TL)",
|
||
overdraftRate: "Aylık faiz oranı (%)",
|
||
overdraftStatementDay: "Hesap kesim günü",
|
||
card: "Kart bilgileri",
|
||
cardLimit: "Kart limiti (TL)",
|
||
cardStatementDay: "Hesap kesim günü",
|
||
cardStatementDayHint: "Ayda o gün yoksa (ör. 31) ayın son günü kullanılır.",
|
||
cardDueKind: "Son ödeme günü",
|
||
dueKinds: { daysAfter: "Kesimden N gün sonra", fixedDay: "Ayın sabit günü" },
|
||
cardDueValueDays: "Gün sayısı",
|
||
cardDueValueDay: "Ayın günü",
|
||
cardPaymentAccount: "Ödeme hesabı",
|
||
cardPaymentAccountNone: "— Seçilmedi —",
|
||
},
|
||
summary: {
|
||
assets: "Varlıklar",
|
||
cardDebt: "Kart borçları",
|
||
net: "Net",
|
||
includesHidden: "Toplamlara gizli hesaplar dahil.",
|
||
excludesHidden: "Gizli hesaplar toplamlara dahil değil (hane ayarı).",
|
||
},
|
||
balance: "Bakiye",
|
||
debt: "Borç",
|
||
hidden: "Gizli",
|
||
hiddenHint: "Bu hesap “yalnızca ben” olarak işaretli; bakiyeyi yalnızca hesap sahibi görür.",
|
||
privateBadge: "Yalnızca ben",
|
||
overdraftBadge: (limit: string) => `KMH ${limit}`,
|
||
limitLabel: (limit: string) => `Limit ${limit}`,
|
||
statementLabel: (day: number) => `Kesim: ${day}`,
|
||
empty: "Henüz hesap yok.",
|
||
emptyOwnerHint: "Başlamak için ilk hesabınızı ekleyin (ör. nakit cüzdan, maaş hesabı).",
|
||
archivedSection: (n: number) => `Arşivlenmiş hesaplar (${n})`,
|
||
archive: "Arşivle",
|
||
unarchive: "Arşivden çıkar",
|
||
archiveTitle: "Hesap arşivlensin mi?",
|
||
archiveDescription: (name: string) =>
|
||
`“${name}” yeni işlemlerde seçilemez; geçmiş işlemler ve raporlar korunur. İstediğiniz zaman arşivden çıkarabilirsiniz.`,
|
||
created: (name: string) => `${name} oluşturuldu.`,
|
||
updated: (name: string) => `${name} güncellendi.`,
|
||
archivedToast: (name: string) => `${name} arşivlendi.`,
|
||
unarchivedToast: (name: string) => `${name} arşivden çıkarıldı.`,
|
||
ownerNotMember: "Hesap sahibi bu hanenin üyesi olmalı.",
|
||
invalidPaymentAccount:
|
||
"Ödeme hesabı bu hanedeki aktif bir banka, nakit veya birikim hesabı olmalı.",
|
||
typeLocked: "Hesap türü değiştirilemez.",
|
||
ownerOnly: "Hesapları yalnızca hane sahipleri yönetebilir.",
|
||
},
|
||
transactions: {
|
||
title: "İşlemler",
|
||
description: "Gelir, gider ve transferler.",
|
||
new: "Yeni işlem",
|
||
types: { expense: "Gider", income: "Gelir", transfer: "Transfer" },
|
||
statuses: { posted: "Gerçekleşti", planned: "Planlı", void: "İptal" },
|
||
createTitle: { expense: "Yeni gider", income: "Yeni gelir", transfer: "Yeni transfer" },
|
||
editTitle: "İşlemi düzenle",
|
||
copyTitle: "İşlemi kopyala",
|
||
fields: {
|
||
amount: "Tutar",
|
||
date: "Tarih",
|
||
account: "Hesap",
|
||
fromAccount: "Kaynak hesap",
|
||
toAccount: "Hedef hesap",
|
||
category: "Kategori",
|
||
selectCategory: "Kategori seçin",
|
||
selectAccount: "Hesap seçin",
|
||
payee: "Satıcı / karşı taraf",
|
||
payeePlaceholder: "ör. Migros",
|
||
description: "Açıklama",
|
||
tags: "Etiketler",
|
||
tagsHint: "Virgülle ayırın (ör. tatil, indirim)",
|
||
advanced: "Gelişmiş: ek, etiket, bölme",
|
||
split: "Bölünmüş işlem",
|
||
splitHint: "Tutarı birden çok kategoriye bölün; kalemlerin toplamı tutara eşit olmalı.",
|
||
addSplit: "Kalem ekle",
|
||
removeSplit: "Kalemi kaldır",
|
||
splitNote: "Not",
|
||
remaining: "Kalan",
|
||
remainingOk: "Kalemler toplamı tutara eşit",
|
||
fillRemaining: "Kalanı son kaleme ekle",
|
||
suggested: "Bu satıcı için son kullanılan kategori ve hesap önerildi.",
|
||
},
|
||
validation: {
|
||
amountPositive: "Tutar sıfırdan büyük olmalı",
|
||
selectAccount: "Hesap seçin",
|
||
selectToAccount: "Hedef hesabı seçin",
|
||
sameAccount: "Kaynak ve hedef hesap aynı olamaz",
|
||
selectCategory: "Kategori seçin",
|
||
splitMin: "Bölünmüş işlemde en az 2 kalem olmalı",
|
||
splitSum: "Kalemlerin toplamı tutara eşit olmalı",
|
||
accountInvalid: "Hesap bu hanede yok, arşivli veya size kapalı.",
|
||
categoryInvalid: "Kategori bu hanede yok, arşivli veya işlem türüyle uyuşmuyor.",
|
||
},
|
||
list: {
|
||
empty: "Bu filtrelerle işlem bulunamadı.",
|
||
emptyAll: "Henüz işlem yok.",
|
||
split: (n: number) => `Bölünmüş · ${n} kalem`,
|
||
transfer: (from: string, to: string) => `${from} → ${to}`,
|
||
dayTotal: "Günlük net",
|
||
total: (n: number) => `${n} işlem`,
|
||
sums: { income: "Gelir", expense: "Gider", net: "Net" },
|
||
hiddenAccount: "Gizli hesap",
|
||
},
|
||
filters: {
|
||
title: "Filtreler",
|
||
open: "Filtrele",
|
||
apply: "Uygula",
|
||
clear: "Temizle",
|
||
from: "Başlangıç",
|
||
to: "Bitiş",
|
||
type: "Tür",
|
||
account: "Hesap",
|
||
category: "Kategori",
|
||
person: "Ekleyen",
|
||
status: "Durum",
|
||
min: "En az (TL)",
|
||
max: "En çok (TL)",
|
||
tag: "Etiket",
|
||
search: "Ara",
|
||
searchPlaceholder: "Açıklama, satıcı veya not…",
|
||
all: "Tümü",
|
||
active: (n: number) => `${n} filtre`,
|
||
},
|
||
detail: {
|
||
title: "İşlem ayrıntısı",
|
||
lines: "Kalemler",
|
||
createdBy: "Ekleyen",
|
||
updatedBy: "Son düzenleyen",
|
||
createdAt: "Oluşturulma",
|
||
},
|
||
actions: { edit: "Düzenle", copy: "Kopyala", delete: "Sil", restore: "Geri al" },
|
||
toast: {
|
||
created: "İşlem kaydedildi.",
|
||
updated: "İşlem güncellendi.",
|
||
deleted: "İşlem silindi.",
|
||
restored: "İşlem geri alındı.",
|
||
},
|
||
deleteTitle: "İşlem silinsin mi?",
|
||
deleteDescription:
|
||
"İşlem listeden ve bakiyelerden kaldırılır. Bildirimdeki “Geri al” ile geri getirebilirsiniz.",
|
||
export: "CSV indir",
|
||
csv: {
|
||
header: [
|
||
"İşlem No",
|
||
"Tarih",
|
||
"Tür",
|
||
"Durum",
|
||
"Hesap",
|
||
"Hedef hesap",
|
||
"Kategori",
|
||
"Satıcı",
|
||
"Açıklama",
|
||
"Kalem notu",
|
||
"Etiketler",
|
||
"Tutar",
|
||
"Ekleyen",
|
||
],
|
||
filename: (date: string) => `butcem-islemler-${date}.csv`,
|
||
},
|
||
adjustment: "Mutabakat düzeltmesi",
|
||
adjustmentReadOnly:
|
||
"Mutabakat düzeltmesi düzenlenemez; gerekirse silip mutabakatı yeniden yapın.",
|
||
reconciled: "Mutabakatı yapıldı",
|
||
readOnly: "İzleyici rolündesiniz; işlem ekleyemezsiniz.",
|
||
noAccounts: "İşlem girmek için önce bir hesap gerekli.",
|
||
noAccountsLink: "Hesaplara git",
|
||
},
|
||
recurring: {
|
||
title: "Planlı işlemler",
|
||
description:
|
||
"Düzenli ve planlı gelir/giderler. Planlı kayıtlar bakiyeyi etkilemez; onaylanınca gerçekleşir.",
|
||
newRule: "Yeni düzenli işlem",
|
||
createTitle: "Yeni düzenli işlem",
|
||
editTitle: "Düzenli işlemi düzenle",
|
||
tabs: { upcoming: "Yaklaşan", overdue: "Vadesi geçmiş", rules: "Kurallar" },
|
||
fields: {
|
||
estimate: "Tutar tahmini (ör. fatura); onaylarken düzeltilir",
|
||
startDate: "İlk tarih",
|
||
frequency: "Sıklık",
|
||
interval: "Kaç birimde bir",
|
||
monthlyMode: "Ayın hangi günü",
|
||
end: "Bitiş",
|
||
count: "Tekrar sayısı",
|
||
endDate: "Bitiş tarihi",
|
||
preview: "İlk tarihler",
|
||
},
|
||
frequencies: { daily: "Günlük", weekly: "Haftalık", monthly: "Aylık", yearly: "Yıllık" },
|
||
units: { daily: "gün", weekly: "hafta", monthly: "ay", yearly: "yıl" },
|
||
monthlyModes: { day: "İlk tarihin günü", last: "Ayın son günü" },
|
||
endKinds: { never: "Bitiş yok", count: "Tekrar sayısı", date: "Bitiş tarihi" },
|
||
actions: {
|
||
confirm: "Onayla",
|
||
skip: "Atla",
|
||
postpone: "Ertele",
|
||
edit: "Düzenle",
|
||
delete: "Sil",
|
||
more: "Diğer işlemler",
|
||
},
|
||
confirmTitle: "İşlemi onayla",
|
||
confirmDescription: "Gerçekleşen tutarı ve tarihi kontrol edin; onaylanınca bakiyeye yansır.",
|
||
postponeTitle: "Ertele",
|
||
postponeDate: "Yeni tarih",
|
||
scopeTitle: "Hangi kayıtlar değişsin?",
|
||
scopes: { one: "Yalnızca bu", following: "Bu ve sonrakiler", all: "Tümü" },
|
||
scopeHints: {
|
||
one: "Yalnızca bu planlı kayıt değişir; seri aynı kalır.",
|
||
following: "Seri bu tarihten itibaren yeni değerlerle devam eder.",
|
||
all: "Onaylanmamış tüm planlı kayıtlar yeni değerlerle yeniden oluşturulur. Gerçekleşmiş kayıtlar değişmez.",
|
||
},
|
||
deleteTitle: "Düzenli işlem silinsin mi?",
|
||
deleteDescription:
|
||
"Gerçekleşmiş kayıtlar korunur; yalnızca onaylanmamış planlı kayıtlar silinir.",
|
||
deleteScopes: { following: "Bu ve sonrakileri sil", all: "Tüm seriyi sil" },
|
||
estimate: "Tahmini",
|
||
next: (date: string) => `Sıradaki: ${date}`,
|
||
remaining: (n: number) => `${n} tekrar kaldı`,
|
||
endless: "Süresiz",
|
||
series: (pos: string) => `${pos}`,
|
||
empty: {
|
||
upcoming: "Önümüzdeki 60 günde planlı işlem yok.",
|
||
overdue: "Vadesi geçmiş planlı işlem yok.",
|
||
rules: "Henüz düzenli işlem yok. Kira, faturalar ve abonelikler için ekleyin.",
|
||
},
|
||
overdueBanner: (n: number) =>
|
||
`${n} planlı işlemin tarihi geçti; onaylayın, erteleyin veya atlayın.`,
|
||
overdueLink: "Planlı işlemlere git",
|
||
upcomingTitle: "Yaklaşan planlı işlemler",
|
||
toast: {
|
||
created: "Düzenli işlem kaydedildi.",
|
||
updated: "Düzenli işlem güncellendi.",
|
||
deleted: "Düzenli işlem silindi.",
|
||
confirmed: "İşlem onaylandı.",
|
||
skipped: "Bu tekrar atlandı.",
|
||
postponed: "İşlem ertelendi.",
|
||
},
|
||
validation: {
|
||
interval: "1 ile 12 arasında olmalı",
|
||
count: "1 ile 600 arasında bir sayı girin",
|
||
endBeforeStart: "Bitiş tarihi ilk tarihten önce olamaz",
|
||
},
|
||
errors: {
|
||
splitAmount: "Bölünmüş planlı işlemin tutarı değiştirilemez.",
|
||
postponeDate: "Yeni tarih mevcut tarihten sonra olmalı.",
|
||
},
|
||
},
|
||
attachments: {
|
||
title: "Ekler",
|
||
add: "Ek ekle",
|
||
addHint: { image: "Fiş veya fatura fotoğrafı", imagePdf: "Görsel veya PDF (ör. bordro)" },
|
||
count: (n: number) => `${n} ek`,
|
||
uploading: "Yükleniyor…",
|
||
remove: "Eki kaldır",
|
||
open: "Aç",
|
||
download: "İndir",
|
||
fullscreen: "Tam ekran",
|
||
exitFullscreen: "Tam ekrandan çık",
|
||
previous: "Önceki",
|
||
next: "Sonraki",
|
||
position: (i: number, n: number) => `${i} / ${n}`,
|
||
viewerTitle: "Ek dosyalar",
|
||
pdf: "PDF belgesi",
|
||
moreCount: (n: number) => `+${n}`,
|
||
waitForUploads: "Yüklemeler bitmeden kaydedilemez.",
|
||
errors: {
|
||
empty: "Dosya seçilmedi veya dosya boş.",
|
||
tooLarge: (mb: number) => `Dosya çok büyük (en fazla ${mb} MB).`,
|
||
tooMany: (n: number) => `Bir kayda en fazla ${n} dosya eklenebilir.`,
|
||
tooManyPending: "Kaydedilmemiş çok fazla ek var; önce formu kaydedin.",
|
||
unsupported: "Desteklenmeyen dosya türü. JPEG, PNG, WebP, HEIC veya PDF yükleyin.",
|
||
unreadable: "Dosya okunamadı veya bozuk.",
|
||
kindNotAllowed: "Gider işlemlerine yalnızca görsel eklenebilir (PDF gelir ve transferlerde).",
|
||
invalid: "Ek dosya bulunamadı veya bu kayda eklenemez.",
|
||
upload: "Dosya yüklenemedi.",
|
||
},
|
||
},
|
||
statement: {
|
||
title: "Hesap ekstresi",
|
||
back: "Hesaplar",
|
||
allTransactions: "Tüm işlemler",
|
||
prevMonth: "Önceki ay",
|
||
nextMonth: "Sonraki ay",
|
||
opening: "Ay başı bakiye",
|
||
inflow: "Giriş",
|
||
outflow: "Çıkış",
|
||
closing: "Ay sonu bakiye",
|
||
current: "Güncel bakiye",
|
||
balanceAfter: "Bakiye",
|
||
empty: "Bu ayda işlem yok.",
|
||
truncated: "Çok fazla işlem var; yalnızca ilk 2.000 işlem gösteriliyor.",
|
||
lastReconciliation: (date: string, balance: string) =>
|
||
`Son mutabakat: ${date} · ekstre bakiyesi ${balance}`,
|
||
noReconciliation: "Henüz mutabakat yapılmadı.",
|
||
reconciledHint: "Mutabakatı yapılmış işlem",
|
||
adjustmentDescription: (statementBalance: string) =>
|
||
`Ekstre bakiyesi ${statementBalance} ile fark`,
|
||
reconcile: {
|
||
open: "Mutabakat yap",
|
||
title: "Mutabakat",
|
||
description:
|
||
"Banka veya kart ekstrenizdeki tarihi ve bakiyeyi girin; uygulamadaki bakiye ile karşılaştırılır.",
|
||
date: "Ekstre tarihi",
|
||
balance: "Ekstredeki bakiye (TL)",
|
||
debt: "Ekstredeki borç (TL)",
|
||
balanceHint: "Eksi bakiye için başına - koyun (ör. KMH kullanımı).",
|
||
debtHint: "Karttaki toplam borcu pozitif girin.",
|
||
check: "Karşılaştır",
|
||
statementBalance: "Ekstre",
|
||
appBalance: "Uygulama",
|
||
difference: "Fark",
|
||
matches: "Bakiyeler tutuyor.",
|
||
mismatch: "Bakiyeler tutmuyor. Eksik veya hatalı işlem olabilir.",
|
||
adjustmentOffer: (amount: string, kind: string) =>
|
||
`Farkı kapatmak için ${amount} tutarında bir “${kind}” düzeltme işlemi oluşturulsun.`,
|
||
acceptAdjustment: "Düzeltme işlemi oluştur",
|
||
unreconciled: (n: number) => `${n} işlem işaretlenecek.`,
|
||
confirm: "Mutabakatı tamamla",
|
||
confirmWithAdjustment: "Düzelt ve tamamla",
|
||
done: (n: number) => `Mutabakat tamamlandı; ${n} işlem işaretlendi.`,
|
||
doneWithAdjustment: (n: number) => `Düzeltme işlemi oluşturuldu ve ${n} işlem işaretlendi.`,
|
||
},
|
||
errors: {
|
||
date: "Geçerli ve bugünden ileri olmayan bir tarih girin.",
|
||
archived: "Arşivlenmiş hesapta mutabakat yapılamaz.",
|
||
needsAdjustment:
|
||
"Bakiyeler tutmuyor; düzeltme işlemini onaylayın veya işlemleri kontrol edin.",
|
||
},
|
||
},
|
||
categories: {
|
||
title: "Kategoriler",
|
||
description: "Gelir ve gider kategorileri. Alt kategoriler raporlarda üst kategoriye toplanır.",
|
||
expense: "Gider",
|
||
income: "Gelir",
|
||
newCategory: "Yeni kategori",
|
||
addChild: "Alt kategori ekle",
|
||
edit: "Düzenle",
|
||
moveUp: "Yukarı taşı",
|
||
moveDown: "Aşağı taşı",
|
||
archive: "Arşivle",
|
||
unarchive: "Arşivden çıkar",
|
||
showArchived: "Arşivi göster",
|
||
archived: "Arşivli",
|
||
defaultBadge: "Varsayılan",
|
||
empty: "Bu türde kategori yok.",
|
||
createTitle: "Yeni kategori",
|
||
editTitle: "Kategoriyi düzenle",
|
||
formDescription: "Alt kategori için bir üst kategori seçin; boş bırakılırsa ana kategori olur.",
|
||
name: "Ad",
|
||
parent: "Üst kategori",
|
||
noParent: "— Ana kategori —",
|
||
icon: "İkon",
|
||
color: "Renk",
|
||
created: (name: string) => `${name} oluşturuldu.`,
|
||
updated: (name: string) => `${name} güncellendi.`,
|
||
archivedToast: (name: string) => `${name} arşivlendi.`,
|
||
unarchivedToast: (name: string) => `${name} arşivden çıkarıldı.`,
|
||
archiveTitle: "Kategori arşivlensin mi?",
|
||
archiveDescription: (name: string) =>
|
||
`“${name}” ve alt kategorileri yeni işlemlerde seçilemez. Geçmiş işlemler ve raporlar etkilenmez.`,
|
||
duplicate: "Bu düzeyde aynı adlı bir kategori zaten var.",
|
||
violations: {
|
||
self: "Kategori kendi altına taşınamaz.",
|
||
descendant: "Kategori kendi alt kategorisinin altına taşınamaz.",
|
||
kind: "Gelir ve gider kategorileri birbirinin altına konamaz.",
|
||
depth: "En fazla 5 seviye derinliğe izin verilir.",
|
||
parentNotFound: "Üst kategori bulunamadı.",
|
||
parentArchived: "Üst kategori arşivli; önce onu arşivden çıkarın.",
|
||
},
|
||
readOnly: "İzleyici rolündesiniz; kategorileri değiştiremezsiniz.",
|
||
},
|
||
adminHouseholds: {
|
||
title: "Haneler",
|
||
description: "Hane oluşturma, kullanıcıları haneye atama ve hane içi roller.",
|
||
newHousehold: "Yeni hane",
|
||
createTitle: "Yeni hane",
|
||
createDescription: "Hane oluşturulur ve seçilen kullanıcı ilk sahibi olur.",
|
||
name: "Hane adı",
|
||
owner: "İlk sahip",
|
||
selectUser: "Kullanıcı seçin",
|
||
created: (name: string) => `${name} hanesi oluşturuldu.`,
|
||
members: (n: number) => `${n} üye`,
|
||
owners: "Sahipler",
|
||
noOwner: "Sahibi yok",
|
||
addMember: "Üye ekle",
|
||
addMemberTitle: (household: string) => `${household} — üye ekle`,
|
||
addMemberDescription: "Kullanıcı zaten üyeyse rolü güncellenir.",
|
||
user: "Kullanıcı",
|
||
role: "Hane içi rol",
|
||
memberAdded: (name: string) => `${name} haneye eklendi.`,
|
||
empty: "Henüz hane yok.",
|
||
privacyNote:
|
||
"Yöneticiler haneleri ve üyelikleri yönetir; üyesi olmadıkları hanenin finansal verisini göremez.",
|
||
},
|
||
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ı",
|
||
noAccounts: "İşlem girmek için önce bir hesap gerekli.",
|
||
},
|
||
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ı.",
|
||
banned: "Hesabınız askıya alınmış. Lütfen yöneticiyle iletişime geçin.",
|
||
tooManyAttempts: "Çok fazla deneme yapıldı. Lütfen bir dakika sonra tekrar deneyin.",
|
||
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",
|
||
householdNameMin: "Hane adı en az 2 karakter olmalı",
|
||
householdNameMax: "Hane adı en fazla 80 karakter olabilir",
|
||
selectUser: "Bir kullanıcı seçin",
|
||
wholeNumber: "Tam sayı girin",
|
||
money: "Geçerli bir tutar girin (ör. 1.250,50)",
|
||
moneyNonNegative: "Tutar negatif olamaz",
|
||
percent: "0 ile 100 arasında bir oran girin (ör. 4,25)",
|
||
date: "Geçerli bir tarih seçin",
|
||
selectProvider: "Kart sağlayıcısını seçin",
|
||
privateNeedsOwner: "“Yalnızca ben” hesabı için hesap sahibini seçin",
|
||
dueDays: "Kesimden sonra en fazla 30 gün 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;
|