## Cél

* **Általános + custom validációs üzenetek**: `lang/hu/validation.php`
* **Mezőfeliratok (attributes)**: **nem** lang fájlból, hanem **modellhez kötött enum-ból** (újrahasznosítható UI/export/stb.)
* **FormRequest**: közvetlenül az enumot használja az `attributes()` metódusban

---

## 1) Locale beállítás

**config/app.php**

```php
'locale' => 'hu',
'fallback_locale' => 'en',
```

---

## 2) Validációs üzenetek nyelvi fájlban (általános + custom)

**lang/hu/validation.php**

```php
<?php

return [
    // Általános szabályok
    'required' => 'A(z) :attribute mező kitöltése kötelező.',
    'email'    => 'A(z) :attribute mezőben érvényes e-mail címet adj meg.',
    'min' => [
        'string' => 'A(z) :attribute legalább :min karakter legyen.',
    ],

    // Custom üzenetek (Laravel natív "custom" struktúrája)
    'custom' => [
        'tax_number' => [
            'regex' => 'A(z) :attribute formátuma hibás.',
        ],
    ],
];
```

> (Ha nem a natív `custom` struktúrát akarjátok használni, akkor FormRequest `messages()`-ben hivatkozzatok saját kulcsokra `__()`-tel.)

---

## 3) Modell mezőfeliratok enum-ban (ModelAttributes)

**App\Enums\Crm\CustomerAttributes.php**

```php
<?php

namespace App\Enums\Crm\;

enum CustomerAttributes: string
{
    case Name      = 'name';
    case Email     = 'email';
    case TaxNumber = 'tax_number';

    public function label(): string
    {
        return match ($this) {
            self::Name      => 'Név',
            self::Email     => 'E-mail cím',
            self::TaxNumber => 'Adószám',
        };
    }

    /**
     * Laravel FormRequest::attributes() kompatibilis map:
     * ['field' => 'Felirat', ...]
     */
    public static function labels(): array
    {
        $map = [];
        foreach (self::cases() as $case) {
            $map[$case->value] = $case->label();
        }
        return $map;
    }
}
```

---

## 4) FormRequest: szabályok + attributes enum-ból

**App\Http\Requests\Customer\StoreCustomerRequest.php**

```php
<?php

namespace App\Http\Requests\Customer;

use Illuminate\Foundation\Http\FormRequest;
use App\Enums\Crm\CustomerAttributes;

class StoreCustomerRequest extends FormRequest
{
    public function rules(): array
    {
        return [
            'name'       => ['required', 'string', 'min:2'],
            'email'      => ['nullable', 'email'],
            'tax_number' => ['nullable', 'regex:/^[0-9]{8}-[0-9]-[0-9]{2}$/'],
        ];
    }

    public function attributes(): array
    {
        // Modell-szintű feliratok (újrahasznosítható)
        return CustomerAttributes::labels();

        // Ha mégis van request-specifikus mező:
        // return CustomerAttributes::toAttributeMap() + ['accept_terms' => 'ÁSZF elfogadása'];
    }

    // Csak akkor kell, ha NEM a validation.php "custom" részét használjátok:
    // public function messages(): array
    // {
    //     return [
    //         'tax_number.regex' => __('validation.custom.tax_number.regex'),
    //     ];
    // }
}
```

---

## Eredmény

* A validációs üzenetek magyarok lesznek a `lang/hu/validation.php` alapján.
* A `:attribute` automatikusan **a ModelAttributes enum felirataira** cserélődik (pl. `name` → **Név**).
* Nem kell modellenként nyelvi fájlokat szerkeszteni az attribute label-ekhez, mert azok kódban, újrahasznosíthatóan vannak kezelve.
