DI a akcie
Balík má dva rovnocenné vstupné body. Fasáda Translatable je najkratšia a odporúčaná voľba. Manager RoundlyConsulting\Translatable\Support\TranslationManager je koreňom fasády: je zaregistrovaný ako singleton, injektujete ho cez konštruktor a ponúka identické API ako explicitnú závislosť, bez statických volaní:
use RoundlyConsulting\Translatable\Support\TranslationManager;
final class UpdateTopicTranslations
{
public function __construct(private TranslationManager $translations) {}
public function handle(Topic $topic, array $input): void
{
$topic->setTranslations('name', $this->translations->fromInput($input['name'] ?? []));
}
}Obe cesty vedú k tomu istému singletonu:
use RoundlyConsulting\Translatable\Facades\Translatable;
use RoundlyConsulting\Translatable\Support\TranslationManager;
app(TranslationManager::class) === Translatable::getFacadeRoot(); // true — one singletonBez akčných tried
Balík nemá akčné triedy, ktoré by ste skladali do vlastných jobov či príkazov: robí len čisté výpočty nad mapami jazykov — žiadny zápis do databázy, fronta, e-mail, udalosť ani HTTP volanie — a tie obslúži priamo manager. Z vlastných akcií preto volajte manager (alebo fasádu).
Výmena managera
TranslationManager zámerne nie je final — je to jediné navrhnuté miesto na rozšírenie balíka. Rozšírte ho, prepíšte metódu a vymeňte ho: ostatné jeho metódy prepis zohľadnia a podtriedu použijú aj volania fasády a každý model s HasTranslations:
use RoundlyConsulting\Translatable\Facades\Translatable;
use RoundlyConsulting\Translatable\Support\TranslationManager;
Translatable::swap(new class extends TranslationManager
{
public function supported(): array
{
return ['en', 'sk', 'de'];
}
});
Translatable::supported(); // ['en', 'sk', 'de']
Translatable::fromInput(['de' => 'Investieren']); // ['de' => 'Investieren']
$topic->missingLocales('name'); // now also reports 'de'Interné triedy
Support\FallbackResolver a Support\LocaleGuard sú interné (@internal) stavebné bloky — namiesto nich volajte Translatable::resolve(), ensureLocale() alebo isSupported(). Kontrola formátu kľúča jazyka zostáva pevnou poistkou pri každom zápise aj v každom scope a nikdy nezávisí od metódy, ktorú prepíšete.
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.