Formulář s translatorem a parametrizovanými překlady

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
meridius
Člen | 34
+
0
-

Nezkoušeli jste někdo pracovat s translátorem (kdyby/translation, ale asi to bude platit pro všechny) ve formulářích? Mám s nim menší „problém“/nepříjemnost.
Když ho nastavím pro celý formulář, tak funguje skvěle:

$form = new Form;
$form->setTranslator($t);
$form->addText('email', 'email.name');

Když pak ale potřebuju překlady parametrizovat, tak musím translátor zavolat ručně a Translator panel v Tracy mi pak hlásí nepřeložené řetězce. Logicky, protože se translátor snaží najít přeložený text místo ukazatelu na něj.

->addRule(Form::MAX_LENGTH, $t->translate('email.maxLength', 255, array("d" => 255)), 255);

V produkci to sice asi vadit nebude, ale minimálně je to nepříjemné a nepřehledné při vývoji. Nenašel jste na to někdo řešení?

Azathoth
Člen | 495
+
0
-

Ukaž soubor s překlady, možná je chyba tam.

Mysteria
Člen | 797
+
0
-

Osobně tenhle „problém“ řeším tak, že nepoužívám $form->setTranslator(), ale píšu $this->t->t() pro každý label, validátor a podobně zvlášť.

meridius
Člen | 34
+
0
-

Mysteria: Tomu jsem se právě chtěl, použitím setTranslator(), vyhnout – znepřehledňuje to kód.
Řešením by asi bylo upravit metody třídy Form, které přijímají zobrazovaný text, aby jako druhý parametr přijímaly jak string, tak i array.
Mohlo by to pak vypadat třeba takto:

$form = new Form;
$form->setTranslator($t);
$form->addText('email', 'email.name')
->addRule(Form::MAX_LENGTH, array('email.maxLength', 255, array("d" => 255)), 255);

Nevím ale, jak by to byl velký zásah do kódu Nette a jestli je to vůbec takhle „správně“.

Filip Procházka
Moderator | 4668
+
+1
-

Tomuhle se v současnosti nevyhneš, je potřeba fixnout tohle v Nette a pak to půjde psát celkem pěkně :)

Na addRule by to ale mělo fungovat, stačí použít ten Phrase objekt.