---
title: "Slugy podľa jazyka — Translatable for Laravel | Roundly"
description: "Slugy pre každý jazyk cez sluggable-for-laravel — dva traity, dve rozhrania, žiadny cast — s rovnakým zdrojom jazykov."
url: https://roundly-consulting.com/sk/open-source/navody/translatable-for-laravel/slugy-podla-jazyka
language: sk
---

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

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

# Slugy podľa jazyka

Slugy spravuje balík sluggable-for-laravel, ktorý sa inštaluje spolu s týmto balíkom. Prekladateľný model získa slugy pre každý jazyk vďaka dvom traitom a dvom rozhraniam — bez castu a bez ďalšieho prepájania:

```php
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Sluggable\Concerns\HasSlug;
use RoundlyConsulting\Sluggable\Contracts\Sluggable;
use RoundlyConsulting\Sluggable\Definitions\SlugDefinition;
use RoundlyConsulting\Sluggable\Definitions\SlugOptions;
use RoundlyConsulting\Translatable\Concerns\HasTranslations;
use RoundlyConsulting\Translatable\Contracts\Translatable;

final class Topic extends Model implements Translatable, Sluggable
{
    use HasTranslations;
    use HasSlug;

    protected $fillable = ['name', 'description'];

    /** @var list<string> */
    public array $translatable = ['name', 'description', 'slug'];

    public function slugOptions(): SlugOptions
    {
        return SlugOptions::make(
            SlugDefinition::for('slug')->from('name')->routeKey(),
        );
    }

    /** @return list<string> */
    protected function translationStatusExcludes(): array
    {
        return ['slug'];
    }
}

$topic = Topic::create(['name' => ['en' => 'Investing', 'sk' => 'Investovanie']]);
$topic->getTranslations('slug');   // ['en' => 'investing', 'sk' => 'investovanie']
```

## Ako to do seba zapadá

- Translatable rozširuje ProvidesLocaleMaps zo sluggable a HasTranslations ho implementuje: isLocaleMapAttribute() → isTranslatableAttribute(), getLocaleMap() → getTranslations(), setLocaleMap() → setTranslations().
- Sluggable preto rozpozná atribút slug ako mapu jazykov a slovenský slug vytvorí zo slovenského názvu bez ohľadu na jazyk requestu.
- Každý slug, ktorý zapíše, prejde overením kľúčov jazykov aj strict\_locales z translatable.
- Model musí implementovať Translatable. Model s HasTranslations bez tohto rozhrania nemá na slugu cast, preto ho sluggable odmietne výnimkou InvalidSlugDefinitionException (localeMapContractMissing) namiesto toho, aby stĺpec jsonb považoval za obyčajný reťazec.
- Slugy sa generujú presne pre podporované jazyky cez väzbu TranslatableSlugLocales (pozrite Konfigurácia).

Unikátnosť, natívne unikátne indexy (SlugIndexes, php artisan sluggable:indexes), dopyty (whereSlug, whereSlugInAnyLocale, findBySlug), route binding, validačné pravidlo UniqueSlug, história slugov aj presmerovania patria balíku sluggable — pozrite jeho dokumentáciu.

## 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/translatable-for-laravel.md)
