---
name: resx-guncelle
description: ConstructionStructure projesinde çok dilli mesaj dosyalarını (resx) günceller. Kullanıcı "mesaj ekle", "çeviri ekle", "resx güncelle", "yeni hata mesajı", "validasyon mesajı ekle", "i18n güncelle" veya herhangi bir kullanıcıya gösterilen metin değişikliği istediğinde bu skill'i kullan. tr-TR ve en-US dosyaları her zaman birlikte güncellenir, key formatı ve KVKK kuralı zorunlu olarak uygulanır.
---

# RESX Güncelleme Skill'i

Bu skill, ConstructionStructure projesinde `.resx` mesaj dosyalarını
proje i18n standartlarına uygun biçimde günceller.

**Önce oku:** `docs/SYSTEM_PROMPT-v1.7.2.md` — özellikle Bölüm 6.2
(Çok Dilli Mesaj Sistemi).

**Altın kural:** `tr-TR` ve `en-US` dosyaları **her zaman birlikte** güncellenir.
Biri eksik bırakılamaz.

---

## 1. KULLANICIDAN ALINACAK BİLGİLER

1. **Hangi modül?** (Örn: Aidat, Common)
2. **Mesaj kategorisi?** → Validation / Error / Success / Warning / Info
3. **Konu?** (Örn: AmountRequired, NotFound, Created)
4. **Türkçe metin?**
5. **İngilizce metin?** (Yusuf vermezse öner, onay iste)

---

## 2. KEY FORMAT KURALI

```
{Modül}.{Kategori}.{Konu}

Kategori seçenekleri:
  Validation  → Kullanıcı giriş hataları
  Error       → İş kuralı / sistem hataları
  Success     → Başarılı işlem bildirimleri
  Warning     → Uyarılar
  Info        → Bilgilendirme mesajları

Örnekler:
  Aidat.Validation.AmountRequired
  Aidat.Validation.DueDatePast
  Aidat.Error.NotFound
  Aidat.Error.AlreadyExists
  Aidat.Success.Created
  Aidat.Success.Updated
  Aidat.Success.Deleted
  Common.Error.Unauthorized
  Common.Error.Forbidden
  Common.Validation.Required
  Common.Validation.MaxLength
```

---

## 3. DOSYA KONUMLARI

```
# Modüle özel mesajlar
ConstructionStructure.Modules.{Modül}/
  └── Resources/
        ├── {Modül}.tr-TR.resx
        └── {Modül}.en-US.resx

# Ortak mesajlar (Core)
ConstructionStructure.Core/
  └── Resources/
        ├── Common.tr-TR.resx
        └── Common.en-US.resx
```

**Karar:** Mesaj yalnızca bu modüle mi özgü? → Modül klasörü.
Birden fazla modülde kullanılacak mı? → Common (Core).

---

## 4. RESX DOSYASI FORMATI

```xml
<?xml version="1.0" encoding="utf-8"?>
<root>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>

  <!-- Mevcut key'ler alfabetik sırada tutulur -->
  <data name="Aidat.Error.NotFound" xml:space="preserve">
    <value>Aidat kaydı bulunamadı.</value>
  </data>
  <data name="Aidat.Success.Created" xml:space="preserve">
    <value>Aidat başarıyla oluşturuldu.</value>
  </data>
  <data name="Aidat.Validation.AmountRequired" xml:space="preserve">
    <value>Tutar sıfırdan büyük olmalıdır.</value>
  </data>
</root>
```

**Dikkat:** Key'ler alfabetik sırada tutulur. Ekleme yaparken sıralamayı boz.

---

## 5. MESAJ YAZIM KURALLARI

### Türkçe (tr-TR)
- Kibar, net, kullanıcı dostu
- Teknik terim kullanma (GUID, ShortCode, Entity vb. yazma)
- Nokta ile bitir

```
YANLIŞ: "Amount alanı boş olamaz."
DOĞRU:  "Tutar alanı boş bırakılamaz."

YANLIŞ: "Entity bulunamadı."
DOĞRU:  "Kayıt bulunamadı."

YANLIŞ: "Validation hatası."
DOĞRU:  "Lütfen zorunlu alanları doldurunuz."
```

### İngilizce (en-US)
- Aynı ton, aynı netlik
- Teknik terim kullanma

```
YANLIŞ: "Amount validation failed."
DOĞRU:  "Amount must be greater than zero."
```

### KVKK Kuralı
Mesajlara kişisel veri asla girmez:

```
YANLIŞ: "Ahmet Yılmaz adlı kullanıcı bulunamadı."
DOĞRU:  "Kullanıcı bulunamadı."

YANLIŞ: "12345678901 TC kimlik numaralı kişi..."
DOĞRU:  "Kayıt bulunamadı."
```

---

## 6. FLUENTVALIDATION ENTEGRASYONU

Yeni key eklendikten sonra validator'da kullanımı:

```csharp
public class Create{Entity}CommandValidator : AbstractValidator<Create{Entity}Command>
{
    public Create{Entity}CommandValidator(IStringLocalizer<{Modül}Resource> localizer)
    {
        RuleFor(x => x.Amount)
            .GreaterThan(0)
            .WithMessage(localizer["Aidat.Validation.AmountRequired"]);

        RuleFor(x => x.DueDate)
            .GreaterThanOrEqualTo(DateOnly.FromDateTime(DateTime.Today))
            .WithMessage(localizer["Aidat.Validation.DueDatePast"]);
    }
}
```

---

## 7. PROBLEM DETAILS ENTEGRASYONU

Hata response'unda hem key hem çözümlenmiş mesaj döner:

```json
{
  "errors": {
    "amount": {
      "messageKey": "Aidat.Validation.AmountRequired",
      "message": "Tutar sıfırdan büyük olmalıdır."
    }
  }
}
```

`messageKey` istemcinin kendi dilinde çözümlemesi içindir.

---

## 8. TAMAMLAMA KRİTERİ

- [ ] `tr-TR.resx` güncellendi
- [ ] `en-US.resx` güncellendi (her zaman birlikte)
- [ ] Key formatı `{Modül}.{Kategori}.{Konu}` kuralına uygun
- [ ] Key'ler alfabetik sırada
- [ ] Mesajlarda kişisel veri yok (KVKK)
- [ ] Teknik terim kullanılmadı
- [ ] Validator veya ilgili kodda key referansı güncellendi

---

## 9. REFERANSLAR

- i18n standartları → `docs/SYSTEM_PROMPT-v1.7.2.md` Bölüm 6.2
- Common mesajlar → `ConstructionStructure.Core/Resources/`
