Open JStika opened 1 week ago
To je jednoduché, stačí si implementovat můj interface jako adaptér - interně v něm volat překladač, který interface z Nette implementuje
Zrovna pro gettext jsem jeden nedávno psal:
use h4kuna\Gettext\GettextSetup;
use Orisai\Exceptions\Logic\NotImplemented;
use Orisai\TranslationContracts\Translatable;
use Orisai\TranslationContracts\Translator;
use function _;
final class TranslatorAdapter implements Translator
{
private GettextSetup $gettextSetup;
public function __construct(GettextSetup $gettextSetup)
{
$this->gettextSetup = $gettextSetup;
}
public function translate(string $id, array $parameters = [], ?string $locale = null): string
{
if ($parameters !== []) {
throw NotImplemented::create()
->withMessage('Message parameters are not supported with gettext setup.');
}
if ($locale !== null) {
$originalLocale = $this->gettextSetup->getLanguage();
$this->gettextSetup->setLanguage($locale);
try {
return _($id);
} finally {
$this->gettextSetup->setLanguage($originalLocale);
}
}
return _($id);
}
public function translateMessage(Translatable $message, ?string $locale = null): string
{
return $this->translate(
$message->getId(),
$message->getParameters(),
$locale ?? $message->getLocale(),
);
}
}
Pak už jen nastavíš překladač pro zkratku podle dokumentace.
Dekuji za odpoved. Asi jsme si neporozumeli. S nettte v3.x je https://github.com/h4kuna/gettext-latte nepouzitelne, proto jsem presel na pouziti https://github.com/contributte/translation. Asi jsem uz stary, nebo blby.
Potrebuji nejak zprovoznit t(...) jak to vidim zde https://github.com/orisai/translation-contracts/blob/v1.x/src/shortcut.php.
Napriklad s nette v2.x v presenter-u z metody handleSave jsem poslal: $this->presenter->payload->message = _("Uspesne ulozene")
Jak to udelat ted s nette v3.x, ale uz bez gettext? $this->presenter->payload->message = t("Uspesne ulozene")
Dekuji za odpoved.
Ta má implementace adaptéru s gettextem je jen příklad. Místo GettextSetup si vyžádáš v konstruktoru translator, který aktuálně používáš a upravíš si implementaci podle něj. Pak si nastavíš adaptér do TranslaterHolder podle dokumentace.
Funkce si z TranslateHolder získá adaptér překladače, adaptér interně přeloží zprávu skrze tebou použitý překladač.
Porad to nechapu (:
Musel jsem upgradovat kody na php 8.3 a prisel jsem o pohodu pouziti https://github.com/h4kuna/gettext-latte. Ted pouzivam https://github.com/contributte/translation (data z db). V latte funguje bez problemu. Ale uz to nelze pouzit ve formularich, presenterch a modelech.
Potreboval bych globalni funkci jakou vidim zde t(...), kterou bych mohl nahradit volani _(...) ve formularich, presenterch a modelech. Musi vychazet z Nette\Localization\Translator jako
public Nette\Localization\Translator $translator;
Pozadam Vas o radu jak na to.
Dekuji