---
title: "Popisy z prekladových súborov — Enums for Laravel | Roundly"
description: "#[TranslatedLabels] načíta každý popis z prekladovej skupiny, napr. lang/<locale>/enums.php, so záložným Str::headline() a zoznamom chýbajúcich riadkov."
url: https://roundly-consulting.com/sk/open-source/navody/enums-for-laravel/popisy-z-prekladovych-suborov
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Enums for Laravel](https://roundly-consulting.com/sk/open-source/navody/enums-for-laravel.md)

# Popisy z prekladových súborov

K dispozícii od verzie 1.1.0. Pridajte atribút #\[TranslatedLabels\] na enum s traitom Helpers a každý popis sa namiesto výsledku Str::headline() načíta z prekladovej skupiny — v štruktúre, akú má väčšina aplikácií už v lang/<locale>/enums.php:

```php
use RoundlyConsulting\Enums\Attributes\TranslatedLabels;
use RoundlyConsulting\Enums\Helpers;

#[TranslatedLabels]                 // keys: enums.order_status.<value>
enum OrderStatus: string
{
    use Helpers;

    case Pending = 'pending';
    case Shipped = 'shipped';
}
```

```php
// lang/sk/enums.php
return [
    'order_status' => [
        'pending' => 'Čaká na platbu',
        'shipped' => 'Na ceste',
    ],
];
```

```php
app()->setLocale('sk');

OrderStatus::Pending->label();      // 'Čaká na platbu'
OrderStatus::toArray();             // ['pending' => 'Čaká na platbu', 'shipped' => 'Na ceste']
OrderStatus::options();             // EnumOption DTOs with the same labels, shape unchanged
OrderStatus::fromLabel('Na ceste'); // OrderStatus::Shipped
```

Preklad sa prejaví vo všetkých zoznamoch postavených na popisoch — labels(), toOptions(), toArray(), options(), presentations(), fromLabel() aj tryFromLabel() — a options() si zachová svoj tvar. Enumy bez atribútu sa správajú presne ako doteraz.

## Skupina

```php
#[TranslatedLabels]                                // enums.order_status.<value>
#[TranslatedLabels('enums.checkout_status')]       // an explicit group
#[TranslatedLabels('enums.http_method')]           // HTTPMethod would snake to enums.h_t_t_p_method
#[TranslatedLabels('billing::enums.order_status')] // a package's own translation files
```

- Bez argumentu je skupinou enums. a názov triedy v snake\_case: OrderStatus → enums.order\_status, ToolAuth → enums.tool\_auth.
- Názov triedy so skratkou sa prevedie písmeno po písmene (HTTPMethod → enums.h\_t\_t\_p\_method), preto takú skupinu zadajte explicitne.
- Balík popíše vlastné enumy z vlastných súborov cez skupinu s menným priestorom: 'billing::enums.order\_status' číta resources/lang/<locale>/enums.php zaregistrovaný pod prekladovým menným priestorom billing.
- Prázdna skupina alebo skupina, ktorá začína či končí medzerou, . alebo :, by nikdy nič nenašla, preto pri prvom použití vyhodí EnumException::invalidLabelGroup() namiesto tichého návratu k Str::headline().
- Atribút patrí priamo na enum a na enume bez traitu Helpers nemá žiadny účinok.

## Kľúče a poradie vyhľadávania

Kľúčom je <group>.<value>: hodnota pri reťazcových a celočíselných enumoch (enums.priority.5, enums.priority.-1) a názov prípadu pri čistých enumoch (enums.visibility.Public). Pri každom popise readable() skúša:

- Najprv kľúč v skupine pre aktuálny jazyk, potom pre fallback\_locale — oboje zariadi prekladač Laravelu. Ak riadok existuje, použije sa.
- Inak doterajšie správanie bez zmeny: výsledok Str::headline() (Pending), vyhľadaný ako JSON alebo skupinový riadok, a napokon samotný výsledok Str::headline().

Pridanie atribútu teda nikdy nerozbije enum, ktorý ešte nemá vyplnené kľúče: chýbajúce prípady si ponechajú popisy zo Str::headline(), kým riadky doplníte. Kľúč, ktorý namiesto riadku vedie na vnorené pole, sa počíta ako nenájdený. Handler chýbajúcich kľúčov zaregistrovaný cez Lang::handleMissingKeysUsing() sa pri nenájdenom kľúči v skupine zavolá rovnako ako pri \_\_() a jeho návratová hodnota sa stane popisom.

Hodnoty s bodkou sa nikdy nenájdu: prekladač číta bodku ako vnorenie, takže kľúč enums.release.v1.0 hľadá \['release'\]\['v1'\]\['0'\], nikdy nie riadok s kľúčom 'v1.0'. Takým enumom prepíšte readable(); untranslated() ich nahlási.

## Kontrola, že je preložené všetko

untranslated(?string $locale = null) vráti v poradí deklarácie prípady, ktorých kľúč v skupine nemá riadok presne v danom jazyku (predvolene v aktuálnom) — ideálne pre test, ktorý zlyhá, len čo by sa nasadil nepreložený prípad:

```php
it('translates every order status', function (string $locale) {
    expect(OrderStatus::untranslated($locale))->toBeEmpty();
})->with(['en', 'sk']);
```

- Kontrola je striktná pre každý jazyk: riadok len vo fallback\_locale sa aj tak nahlási, pretože používatelia daného jazyka by videli záložný text.
- S iným prekladačom než od Laravelu (bez hasForLocale()) sa použije get(), takže sa započíta aj riadok v záložnom jazyku daného prekladača.
- Kľúč, ktorý vedie na vnorené pole, aj hodnota s bodkou sa nahlásia, pretože ich nevie použiť ani readable().
- Na enume bez atribútu vyhodí EnumException::labelsNotTranslated().

Atribút sa pre každú triedu enumu načíta raz a zostane v cache po celý život procesu. Atribút sa za behu zmeniť nemôže, takže je to bezpečné aj pod Octane.

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/enums-for-laravel.md)
