docs: add multilingual i18n rollout plan
This commit is contained in:
@@ -0,0 +1,171 @@
|
||||
---
|
||||
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.
|
||||
Reference in New Issue
Block a user