Fallback režimy
Enum FallbackMode riadi každé čítanie s fallbackom — prístup cez vlastnosť, getTranslation() so zapnutým fallbackom aj serializáciu:
| Režim | Hodnota v konfigurácii | Vyhodnotenie |
|---|---|---|
FallbackMode::None | none | Len presne požadovaný jazyk — ak chýba, null. |
FallbackMode::Fallback | fallback | Presný jazyk, potom nastavený záložný jazyk. |
FallbackMode::Any | any | Presný jazyk, potom záložný jazyk, potom prvá dostupná hodnota — najprv podporované jazyky v ich poradí, potom ostatné uložené jazyky abecedne. Predvolený režim — obsah nikdy nezostane prázdny. |
// Stored: name = {"sk": "Investovanie"}, fallback_locale = en, app locale = de
// FallbackMode::Any (default)
$topic->name; // 'Investovanie' — first available value
// FallbackMode::Fallback or FallbackMode::None
$topic->name; // null
// Regardless of the mode
$topic->getTranslation('name', 'de', false); // null — fallback switched off
$topic->translatedOrNull('name'); // null — exact app locale onlyPosledný krok režimu Any prechádza podporované jazyky v ich poradí a potom ostatné uložené jazyky abecedne. Výber nikdy nezávisí od toho, ako databáza zoradí kľúče JSON, takže riadok sa na každej databáze aj pred a po opätovnom načítaní zobrazí v rovnakom jazyku.
Únik obsahu medzi jazykmi pri Any
Any je predvolený, aby obsah nikdy nezostal prázdny. Daň za to: keď je prázdny požadovaný aj záložný jazyk, Any zobrazí hodnotu prvého dostupného jazyka — obsah, ktorý ste pre daný jazyk zámerne nepreložili, sa tak môže zobraziť v inom jazyku. Ak je časť obsahu pre jednotlivé jazyky viazaná právne alebo regulačne, prepnite na Fallback (alebo None) globálne cez TRANSLATABLE_FALLBACK či konfiguráciu, alebo pre konkrétny model:
use RoundlyConsulting\Translatable\Enums\FallbackMode;
protected ?FallbackMode $translatableFallbackMode = FallbackMode::Fallback;
protected ?string $translatableFallbackLocale = 'en';Neznáma hodnota v translatable.fallback sa vyhodnotí ako Any. FallbackMode používa trait Helpers z enums-for-laravel, takže sú naň dostupné pomocné metódy tohto balíka.
Vyhodnotenie surovej mapy
Translatable::resolve() použije rovnaké vyhodnotenie ako čítanie z modelu, no pre surovú mapu, ktorú máte mimo modelu — v cache, v odpovedi z API či v poli z konfigurácie. Jazyk je predvolene aktuálny, režim a záložný jazyk podľa konfigurácie. Prázdne hodnoty nikdy nevyhrajú — null, '', booleany, polia a objekty sa preskočia, int a float sa prevedú na reťazec — takže aj neupratanú mapu vyhodnotí bez výnimky:
use RoundlyConsulting\Translatable\Enums\FallbackMode;
use RoundlyConsulting\Translatable\Facades\Translatable;
$map = ['en' => 'Investing', 'sk' => 'Investovanie']; // a cached payload, an API response, a config array
app()->setLocale('sk');
Translatable::resolve($map); // 'Investovanie' — current locale, configured chain
Translatable::resolve($map, 'de'); // 'Investing' — falls back to fallback_locale (en)
Translatable::resolve($map, 'de', FallbackMode::None); // null — exact locale only
Translatable::resolve($map, 'de', FallbackMode::Fallback, fallbackLocale: 'sk'); // 'Investovanie'
// A messy map resolves, it never throws:
Translatable::resolve(['en' => null, 'sk' => 'Ahoj'], 'de'); // 'Ahoj'
Translatable::resolve(['sk' => 5], 'de'); // '5'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 kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
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.