Fasáda Translatable
Všetko, čo nie je stavom konkrétneho modelu, nájdete na fasáde Translatable nad injektovateľným singletonom TranslationManager. Trait HasTranslations číta množinu jazykov, nastavenia fallbacku, overenie kľúčov jazykov aj vyhodnotenie mapy cez ten istý manager, takže fasáda a vaše modely sa vždy zhodnú:
use RoundlyConsulting\Translatable\DataTransferObjects\TranslationChanges;
use RoundlyConsulting\Translatable\DataTransferObjects\TranslationSearch;
use RoundlyConsulting\Translatable\Enums\FallbackMode;
use RoundlyConsulting\Translatable\Facades\Translatable;
// Locales
Translatable::supported(); // ['en', 'sk'] — from the bound SupportedLocales
Translatable::isSupported('sk'); // true — exact, case-sensitive
Translatable::currentLocale(); // app()->getLocale()
Translatable::ensureLocale($locale); // returns it, or throws InvalidLocaleException (malformed)
Translatable::ensureLocale($locale, strict: true); // … also throws when it is not supported
// Fallback chain
Translatable::fallbackMode(); // FallbackMode, from config
Translatable::fallbackLocale(); // 'en'
Translatable::resolve(['en' => 'Investing', 'sk' => 'Investovanie']); // current locale + configured fallback
Translatable::resolve($map, 'de', FallbackMode::Fallback, fallbackLocale: 'sk');
// Admin input
Translatable::fromInput($request->input('name')); // clean locale map
Translatable::rules('name', required: true, each: ['max:120']);
Translatable::filledRule('name'); // just the "at least one locale" rule
Translatable::apply($topic, TranslationChanges::make(['name' => ['sk' => 'Sporenie']])); // PATCH-merge
// Queries and locale scoping
Translatable::search(Topic::query(), new TranslationSearch(fields: ['name'], term: 'invest'));
Translatable::usingLocale('sk', fn (): string => $topic->name);Fasáda (RoundlyConsulting\Translatable\Facades\Translatable) má rovnaký krátky názov ako kontrakt modelu (RoundlyConsulting\Translatable\Contracts\Translatable) — ak súbor potrebuje oba, jeden z nich importujte s aliasom. Čítanie, zápis, stav a scopy konkrétneho modelu ostávajú na samotnom modeli (pozrite Čítanie a zápis).
Prehľad metód
| Metóda | Vracia | Účel |
|---|---|---|
supported() | list<string> | Podporované jazyky z naviazaného SupportedLocales. |
isSupported($locale) | bool | Či jazyk patrí do supported() — presne, s rozlíšením veľkosti písmen. |
currentLocale() | string | Jazyk aplikácie — app()->getLocale(). |
ensureLocale($locale, $strict = false) | string | Vráti kľúč alebo vyhodí InvalidLocaleException — vždy pri chybnom tvare, so strict aj mimo supported(). |
resolve($map, $locale = null, $mode = null, $fallbackLocale = null) | ?string | Vyhodnotí surovú mapu jazykov cez fallback reťazec; argumenty null znamenajú aktuálny jazyk, fallbackMode() a fallbackLocale(). Prázdne hodnoty nikdy nevyhrajú a nikdy nevyhodí výnimku. |
fallbackMode() | FallbackMode | translatable.fallback ako enum; neznáma hodnota znamená Any. |
fallbackLocale() | string | translatable.fallback_locale, alebo '', keď nie je nastavený (null alebo prázdna hodnota) — žiadny záložný jazyk. |
fromInput($input) | array<string, string> | Samotný reťazec patrí aktuálnemu jazyku; prázdne, nereťazcové a nepodporované jazyky sa zahodia — vrátane jazyka samotného reťazca. |
rules($field, $required, $each = []) | array | Validačné pravidlá pre pole s mapou jazykov, $each pre každý jazyk. |
filledRule($field) | list<Closure> | Len pravidlo „aspoň jeden jazyk je vyplnený“. |
apply($model, $changes) | void | Zlúči sadu TranslationChanges v štýle PATCH — mení len dodané jazyky, v pamäti až do save(). |
search($query, $search) | Builder | Vyhľadávanie doslovného podreťazca v jednotlivých jazykoch bez ohľadu na veľkosť písmen; bez polí či podporovaných jazykov nenájde nič. |
usingLocale($locale, $callback) | mixed | Spustí closure s dočasným jazykom aplikácie, ktorý sa vždy obnoví. |
resolve() podrobne opisuje časť Fallback režimy, ensureLocale() a pomocníkov pre administráciu časť Vstup a validácia, search() časť Dopyty a vyhľadávanie.
Čítanie v inom jazyku
usingLocale() spustí closure s dočasne prepnutým jazykom aplikácie a potom ho vždy obnoví — aj pri výnimke. Model tak prečítate v inom jazyku bez zmeny globálneho stavu, napríklad pri renderovaní vo fronte či pri generovaní sitemap:
use RoundlyConsulting\Translatable\Facades\Translatable;
$sk = Translatable::usingLocale('sk', fn (): string => $topic->name); // 'Investovanie'
// Every locale's resolved name — e.g. for a sitemap or a queued export:
$names = collect(Translatable::supported())->mapWithKeys(
fn (string $locale): array => [$locale => Translatable::usingLocale($locale, fn (): ?string => $topic->name)],
);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.