172 lines
4.9 KiB
Markdown
172 lines
4.9 KiB
Markdown
---
|
|
title: Faz 0 ADR Seti
|
|
description: Neta cok dilli sisteminin baslangic karar kayitlari.
|
|
phase: 0
|
|
status: accepted
|
|
last_updated: 2026-07-19
|
|
---
|
|
|
|
# Faz 0 ADR Seti
|
|
|
|
Bu dosya cok dillilik calismasinin ilk uygulama kararlarini kilitler. Amac,
|
|
sonraki fazlarda ayni problemi tekrar tekrar tartismadan ilerleyebilmek ve
|
|
SQLite tabanli self-host hedefini korumaktir.
|
|
|
|
## ADR-I18N-0001 — UI cevirisi ve domain icerik cevirisi ayrilacak
|
|
|
|
### Durum
|
|
|
|
Kabul edildi.
|
|
|
|
### Baglam
|
|
|
|
Neta'da iki farkli metin tipi var:
|
|
|
|
- Uygulamanin kendisine ait sabit arayuz metinleri.
|
|
- Freelancer veya musteri tarafindan uretilen is icerikleri.
|
|
|
|
Bu iki veri tipini ayni tabloda veya ayni anahtar modeliyle tutmak, hem fallback
|
|
hem de izin modeli tarafinda karmasa yaratir.
|
|
|
|
### Karar
|
|
|
|
Arayuz cevirileri stabil katalog anahtarlariyla yonetilecek. Built-in `tr` ve
|
|
`en` kataloglari kod icinde surumlenecek; instance sahibi tarafindan eklenen
|
|
override'lar SQLite icindeki `instance_ui_translations` modelinde tutulacak.
|
|
|
|
Domain icerik cevirileri entity ve field bazli tutulacak. Bunun icin Faz-1'de
|
|
`content_translations` modeli eklenecek.
|
|
|
|
### Sonuc
|
|
|
|
- Arayuz metinleri release sureciyle denetlenebilir kalir.
|
|
- Sonradan eklenen diller deployment gerektirmeden doldurulabilir.
|
|
- Is icerikleri icin form tab'lari net bicimde modellenir.
|
|
- Chat, gunluk notu ve musteri mesajlari gibi iletisim icerikleri otomatik
|
|
cevrilmez; yazildigi dilde kalir.
|
|
|
|
## ADR-I18N-0002 — Locale cozumleme onceligi
|
|
|
|
### Durum
|
|
|
|
Kabul edildi.
|
|
|
|
### Baglam
|
|
|
|
Ayni instance icinde freelancer, musteri portali, davet ekranlari ve public API
|
|
farkli baglamlarda calisir. Locale cozumleme her yerde ayni kaynaga bakarsa
|
|
portal daveti gibi auth oncesi akislarda yanlis dil gorunebilir.
|
|
|
|
### Karar
|
|
|
|
Locale asagidaki sirayla cozumlenecek.
|
|
|
|
Auth oncesi davet ekranlari:
|
|
|
|
1. Davet kaydindaki locale.
|
|
2. Guvenli locale cookie'si.
|
|
3. Instance varsayilan dili.
|
|
4. Built-in fallback `tr`.
|
|
|
|
Freelancer uygulamasi:
|
|
|
|
1. Oturum acmis kullanicinin `user_preferences.language` degeri.
|
|
2. Guvenli locale cookie'si.
|
|
3. Instance varsayilan dili.
|
|
4. Built-in fallback `tr`.
|
|
|
|
Musteri portali:
|
|
|
|
1. Musteri profilinin veya `clients.portal_locale` alaninin locale degeri.
|
|
2. Portal davetinden gelen locale.
|
|
3. Guvenli locale cookie'si.
|
|
4. Instance varsayilan dili.
|
|
5. Built-in fallback `tr`.
|
|
|
|
Mobil ve API istekleri:
|
|
|
|
1. Auth kullanicisinin kayitli tercihi.
|
|
2. Guvenilir endpoint parametresi veya `Accept-Language` sinyali.
|
|
3. Instance varsayilan dili.
|
|
4. Built-in fallback `tr`.
|
|
|
|
### Sonuc
|
|
|
|
- Musteri davet ekrani login olmadan dogru dilde acilir.
|
|
- Freelancer tercihi musteri portalini yanlislikla etkilemez.
|
|
- Mobil istemci ayni kurallari API kontratindan okuyabilir.
|
|
|
|
## ADR-I18N-0003 — Dashboard ve portal route'larina locale prefix eklenmeyecek
|
|
|
|
### Durum
|
|
|
|
Kabul edildi.
|
|
|
|
### Baglam
|
|
|
|
`/tr/dashboard`, `/en/dashboard` gibi route prefix'leri public marketing
|
|
sitelerinde gucludur, ancak Neta'nin dashboard ve portal yapisi oturum, davet,
|
|
yetki ve self-host basitligi uzerine kurulu. Prefix eklemek route sayisini,
|
|
redirect davranislarini ve mobil endpoint eslemesini gereksiz buyutur.
|
|
|
|
### Karar
|
|
|
|
Dashboard, portal ve davet route'lari mevcut URL yapisini koruyacak. Dil, locale
|
|
resolver ve cookie/user/client kayitlariyla belirlenecek.
|
|
|
|
### Sonuc
|
|
|
|
- Var olan internal linkler ve mobil baglanti modeli korunur.
|
|
- Self-host deploy ve reverse proxy ayarlari sade kalir.
|
|
- Public landing/docs tarafi isterse ileride ayri route prefix stratejisi
|
|
kullanabilir; bu karar sadece uygulama kabugu icindir.
|
|
|
|
## ADR-I18N-0004 — Hafif custom runtime i18n katmani yazilacak
|
|
|
|
### Durum
|
|
|
|
Kabul edildi.
|
|
|
|
### Baglam
|
|
|
|
Projenin ana hedeflerinden biri dependency sayisini azaltmak ve self-host'u
|
|
kolaylastirmak. Mevcut ihtiyaclar temel katalog cozumleme, fallback, namespace
|
|
yukleme, `Intl` bicimlendirme ve SQLite override okuma uzerinden karsilanabilir.
|
|
|
|
### Karar
|
|
|
|
Ilk cok dillilik surumunde agir bir i18n runtime dependency'si eklenmeyecek.
|
|
Neta icinde kucuk bir i18n katmani yazilacak:
|
|
|
|
- `lib/i18n/*` ortak tip ve format yardimcilari.
|
|
- `server/i18n/*` locale resolver, katalog merge ve translator servisleri.
|
|
- Client component'ler icin sinirli scope'ta provider.
|
|
- Tarih, sayi ve para bicimlendirme icin native `Intl`.
|
|
|
|
### Sonuc
|
|
|
|
- Yeni dependency eklenmeden Faz-2 runtime kurulabilir.
|
|
- Katalog sozlesmesi Neta'nin domain ihtiyaclarina gore sekillenir.
|
|
- Ileride ihtiyac buyurse baska kutuphaneye gecis icin katalog anahtarlari
|
|
korunabilir.
|
|
|
|
## ADR-I18N-0005 — Built-in diller ve yayin kurali
|
|
|
|
### Durum
|
|
|
|
Kabul edildi.
|
|
|
|
### Karar
|
|
|
|
Turkce (`tr`) ve Ingilizce (`en`) built-in, aktif ve silinemez diller olacak.
|
|
Instance varsayilan dili ilk migration sonrasinda `tr` olacak.
|
|
|
|
Yeni eklenen diller once `draft` durumunda olusturulacak. Portal icin kritik
|
|
namespace'leri tamamlanmayan bir dil musteri dili olarak secilemeyecek.
|
|
|
|
### Sonuc
|
|
|
|
- Eksik ceviri musteriye yarim bir portal deneyimi olarak yansimaz.
|
|
- Instance sahibi yeni dili hazirlayip test ettikten sonra aktif edebilir.
|
|
- Fallback davranisi her zaman tahmin edilebilir kalir.
|