Ana içeriğe geç

Yerelleştirme (i18n)

API her istek için bir dil (locale) müzakere eder ve insanlara görünen tüm metinleri (hata/başarı mesajları, doğrulama mesajları, e-posta içeriği) o dilde döndürür. Çeviri, makine tarafından okunan alanları asla etkilemez — yalnızca message, doğrulama errors ve bildirim metinleri yerelleştirilir.

Desteklenen diller​

Desteklenen dil izin listesi tek doğruluk kaynağı olarak config/locales.php içindedir. Bu taslak itibarıyla:

KodAdYerel adYön
enEnglishEnglishltr
trTurkishTürkçeltr

Varsayılan (ve geri-dönüş) dil en'dir. İzin listesi dışındaki herhangi bir dil yok sayılır ve istek varsayılana düşer — bilinmeyen veya enjekte edilmiş dil dizeleri asla kabul edilmez.

Dillerin keşfi (istemciler için)​

İstemciler (yönetim SPA'sı, doküman sitesi) listeyi çalışma zamanında okur; böylece dil değiştiriciler sunucuyla senkron kalır. Bu uç herkese açık, kimlik doğrulaması gerektirmeyen ve kiracıdan bağımsızdır:

GET /api/locales
{
"default": "en",
"active": "en",
"dir": "ltr",
"locales": [
{ "code": "en", "name": "English", "native_name": "English", "dir": "ltr" },
{ "code": "tr", "name": "Turkish", "native_name": "Türkçe", "dir": "ltr" }
]
}
  • default — geri-dönüş dili.
  • active — bu isteğin müzakere ettiği dil (istemci, Accept-Language müzakeresinin sonucunu doğrulayabilir).
  • dir — aktif dilin metin yönü (ltr / rtl).
  • locales[].dir — dil başına yön; ön yüz document.dir / dir HTML niteliğini ayarlayabilir. Yön bilgisi her dil için baştan sağlanır; böylece yerleşim, herhangi bir RTL dili gelmeden önce RTL'ye hazırdır.

Dil nasıl seçilir​

Sunucu her istekte dili şu önceliğe göre, her adımda izin listesiyle sınırlı olarak çözer:

  1. Kimliği doğrulanmış kullanıcı tercihi — users.settings.locale.
  2. Kiracı varsayılanı — kiracı bağlıyken tenant_settings içindeki locale anahtarı.
  3. Accept-Language müzakeresi — başlıkta izin listesinde bulunan, en yüksek sıralı dil etiketi. Kalite değerleri (q=) ve bölge alt etiketleri (tr-TR → tr) dikkate alınır.
  4. Geri-dönüş — varsayılan dil (en).

Örnekler​

GET /api/locales
Accept-Language: tr,en;q=0.8

→ active değeri tr.

GET /api/locales
Accept-Language: de-DE,fr;q=0.9

→ ne de ne fr desteklenir → active en'e düşer.

Başarısız bir giriş, yerelleştirilmiş gövdeyi gösterir:

POST /api/login
Accept-Language: tr

{ "email": "[email protected]", "password": "wrong" }
{
"message": "...",
"errors": { "email": ["Bu kimlik bilgileri kayıtlarımızla eşleşmiyor."] }
}

Kalıcı tercih ayarlama​

Accept-Language istek başına bir ipucudur. Bir seçimi kalıcı kılmak için onu kullanıcıda (settings.locale) veya kiracı varsayılanında (tenant_settings.locale) sakla; saklanan tercih her istekte Accept-Language üzerinde önceliğe sahip olur.

E-postalar ve kuyruğa alınan bildirimler​

Bildirim e-postaları (doğrulama, magic-link, parola sıfırlama) alıcının tercih ettiği dile, gönderim anında çözülerek yerelleştirilir — gönderimi tetikleyenin diline göre değil. Bu, istek dışında çalışan ve dili hedef kullanıcı/kiracıdan yeniden çözen kuyruk işleri için önemlidir.