182 lines
5.5 KiB
Markdown
182 lines
5.5 KiB
Markdown
---
|
||
title: Faz 0 I18n Fixture Plani
|
||
description: Cok dillilik migration, katalog ve portal testleri icin seed senaryolari.
|
||
phase: 0
|
||
status: completed
|
||
last_updated: 2026-07-19
|
||
---
|
||
|
||
# Faz 0 I18n Fixture Plani
|
||
|
||
Bu plan Faz-1 sonrasinda script veya test fixture'ina donusturulecek veri setini
|
||
tanımlar. Hedef, locale resolver, fallback, domain icerik cevirileri ve portal
|
||
dili davranisini ayni senaryoda dogrulamaktir.
|
||
|
||
## Locale fixture'lari
|
||
|
||
| Locale | Durum | Built-in | Fallback | Amac |
|
||
| --- | --- | --- | --- | --- |
|
||
| `tr` | `active` | Evet | Yok | Instance default ve mevcut verinin ana dili. |
|
||
| `en` | `active` | Evet | `tr` | Built-in ikinci dil ve portal client testi. |
|
||
| `fr` | `draft` | Hayir | `en` | Eksik katalog/fallback testi. |
|
||
| `ar-XB` | `test` | Hayir | `en` | RTL smoke ve layout kontrolu. |
|
||
|
||
`tr` ve `en` silinemez. `fr` portal dili olarak ancak kritik portal namespace'leri
|
||
tamamlaninca secilebilir. `ar-XB` urun ayarlarinda normal kullaniciya
|
||
gosterilmez.
|
||
|
||
## Katalog fixture'lari
|
||
|
||
### Turkce built-in katalog
|
||
|
||
Tum namespace'lerde eksiksiz olmalidir:
|
||
|
||
- `common`
|
||
- `auth`
|
||
- `navigation`
|
||
- `dashboard`
|
||
- `clients`
|
||
- `projects`
|
||
- `tasks`
|
||
- `calendar`
|
||
- `finance`
|
||
- `journal`
|
||
- `chat`
|
||
- `settings`
|
||
- `portal`
|
||
- `status`
|
||
- `validation`
|
||
- `api`
|
||
|
||
### Ingilizce built-in katalog
|
||
|
||
Turkce ile ayni anahtar setine sahip olmalidir. Faz-2 testinde anahtar farki
|
||
release engeli kabul edilir.
|
||
|
||
### Eksik Fransizca katalog
|
||
|
||
Fallback test etmek icin bilincli olarak kismi tutulur.
|
||
|
||
Ornek:
|
||
|
||
```json
|
||
{
|
||
"navigation.dashboard": "Tableau de bord",
|
||
"navigation.projects": "Projets",
|
||
"portal.dashboard.title": "Apercu",
|
||
"common.save": "Enregistrer"
|
||
}
|
||
```
|
||
|
||
Beklenen davranis: Eksik `portal.tasks.title` gibi anahtarlarda once `en`, sonra
|
||
`tr` fallback metni gosterilir; kullaniciya ham anahtar basılmaz.
|
||
|
||
## Auth fixture'lari
|
||
|
||
| Kullanici | Rol | Email | Dil | Baglam |
|
||
| --- | --- | --- | --- | --- |
|
||
| Freelancer | `admin` | `owner@neta.local` | `tr` | Dashboard, ayarlar ve ceviri yonetimi. |
|
||
| Turkce musteri | `client` | `client-tr@neta.local` | `tr` | Portal default dil testi. |
|
||
| Ingilizce musteri | `client` | `client-en@neta.local` | `en` | Portal client locale testi. |
|
||
|
||
Freelancer hesabi instance default dilini `tr` olarak korur. Ingilizce musteri
|
||
icin davet kaydinda ve `clients.portal_locale` alaninda `en` beklenir.
|
||
|
||
## Domain veri fixture'i
|
||
|
||
### Musteriler
|
||
|
||
| ID | Ad | Portal dili | Not |
|
||
| --- | --- | --- | --- |
|
||
| `client-tr` | Ada Yilmaz | `tr` | Turkce portal goruntusu. |
|
||
| `client-en` | Nova Studio | `en` | Ingilizce portal goruntusu. |
|
||
|
||
### Projeler
|
||
|
||
| ID | Musteri | Default baslik | EN baslik | FR baslik | Not |
|
||
| --- | --- | --- | --- | --- |
|
||
| `project-website` | `client-tr` | Web sitesi yenileme | Website refresh | Bos | Fallback testi. |
|
||
| `project-brand` | `client-en` | Marka kiti | Brand kit | Kit de marque | Portal EN ve FR content testi. |
|
||
|
||
Beklenen davranis:
|
||
|
||
- `tr` isteyen kullanici default kolon veya `content_translations(tr)` degerini
|
||
gorur.
|
||
- `en` isteyen kullanici EN content translation'i gorur.
|
||
- `fr` isteyen kullanici FR alan bos ise fallback zinciriyle EN veya TR gorur.
|
||
|
||
### Gorevler
|
||
|
||
| ID | Proje | Public | TR baslik | EN baslik |
|
||
| --- | --- | --- | --- | --- |
|
||
| `task-wireframe` | `project-website` | Evet | Ana sayfa wireframe | Homepage wireframe |
|
||
| `task-internal` | `project-website` | Hayir | Ic notlari toparla | Gather internal notes |
|
||
|
||
Portal yalnizca `is_public_to_client = true` gorevleri gosterir.
|
||
|
||
### Planlama bolumleri
|
||
|
||
| ID | Proje | Kategori | TR baslik | EN baslik |
|
||
| --- | --- | --- | --- | --- |
|
||
| `plan-scope` | `project-website` | `scope` | Kapsam | Scope |
|
||
| `plan-delivery` | `project-website` | `delivery` | Teslimat | Delivery |
|
||
|
||
Kategori teknik degeri cevrilmez; label `status` veya `projects` namespace'inden
|
||
gelir.
|
||
|
||
## Portal davet fixture'lari
|
||
|
||
| Davet | Email | Locale | Beklenen ekran dili |
|
||
| --- | --- | --- | --- |
|
||
| `invite-tr` | `client-tr@neta.local` | `tr` | Turkce |
|
||
| `invite-en` | `client-en@neta.local` | `en` | Ingilizce |
|
||
| `invite-fr-draft` | `client-en@neta.local` | `fr` | Portal publish kurali nedeniyle reddedilir veya fallback EN kullanir. |
|
||
|
||
Davet ekranlari auth oncesi oldugu icin locale'i session'dan degil davet
|
||
kaydindan alir.
|
||
|
||
## API contract fixture'lari
|
||
|
||
`/api/v1/meta` Faz-8 sonunda en az su localization bilgisini dondurmelidir:
|
||
|
||
```json
|
||
{
|
||
"localization": {
|
||
"defaultLocale": "tr",
|
||
"supportedLocales": [
|
||
{ "code": "tr", "name": "Turkce", "status": "active", "builtIn": true },
|
||
{ "code": "en", "name": "English", "status": "active", "builtIn": true },
|
||
{ "code": "fr", "name": "Francais", "status": "draft", "builtIn": false }
|
||
],
|
||
"fallbacks": {
|
||
"en": "tr",
|
||
"fr": "en"
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
Mobil istemci aktif olmayan dilleri kullanici seciminde gostermemeli, ancak
|
||
ceviri yonetimi ekranlari icin admin API'de draft dilleri gorebilmelidir.
|
||
|
||
## Smoke beklentileri
|
||
|
||
Faz-2 sonrasinda:
|
||
|
||
- `t("common.save")` `tr` icin `Kaydet`, `en` icin `Save` dondurur.
|
||
- `fr` locale'inde eksik anahtar ham key olarak gosterilmez.
|
||
- `formatMoney(10000, "TRY", "tr")` Turkce bicim verir.
|
||
- `formatDate(..., "en")` Ingilizce ay adi verir.
|
||
|
||
Faz-6 sonrasinda:
|
||
|
||
- `client-en` portali EN navigasyon ve EN proje basliklariyla acilir.
|
||
- `client-tr` portali TR kalir.
|
||
- Davet kabul edildikten sonra secilen locale client kaydina yansir.
|
||
|
||
Faz-8 sonrasinda:
|
||
|
||
- `/api/v1/meta` supported locale listesini dondurur.
|
||
- `/api/v1/me` kullanicinin etkin locale'ini ve fallback chain'ini dondurur.
|
||
- API hata response'lari stabil kod + locale'e uygun insan okunur mesaj tasir.
|