NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Translatable for Laravel

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ódaVraciaÚč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()stringJazyk aplikácie — app()->getLocale().
ensureLocale($locale, $strict = false)stringVráti kľúč alebo vyhodí InvalidLocaleException — vždy pri chybnom tvare, so strict aj mimo supported().
resolve($map, $locale = null, $mode = null, $fallbackLocale = null)?stringVyhodnotí 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()FallbackModetranslatable.fallback ako enum; neznáma hodnota znamená Any.
fallbackLocale()stringtranslatable.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 = [])arrayValidač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)voidZlúči sadu TranslationChanges v štýle PATCH — mení len dodané jazyky, v pamäti až do save().
search($query, $search)BuilderVyhľ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)mixedSpustí 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 kryptomien

Odoslaní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.