Kdyby\Translator preklad $form->addError() a $this->flashMessage()
- Čamo
- Člen | 798
Zdravím,
spravil som si taký testovací formulár aby som si vyskúšal translator a
všetko by bolo fajn až na to že sa mi neprekladá $form->addError a
$this->flashMessage v onSuccess metóde. Flashky mi to neprekladá ani
normálne v presentery ako som zistil.
Ten formulá vyzerá takto:
public function createComponentTestForm()
{
$form = new Nette\Application\UI\Form;
$form->setTranslator($this->translator->domain('forms.testForm'));
$form->addText('name', 'name.label')
->setRequired('name.required');
$form->addText('email', 'email.label')
->addRule($form::EMAIL, 'email.valid');
$form->addText('age', 'age.label')
->addRule($form::RANGE, 'age.range', array(18, 100));
$form->addSubmit('sbmt', 'sbmt.label');
$form->onSuccess[] = array($this, 'testFormSucceeded');
return $form;
}
public function testFormSucceeded(Nette\Application\UI\Form $form, $values)
{
if($values->name == 'error')
{
$form->addError('onSuccess.errors.error1');
return;
}
else
{
$this->flashMessage('onSuccess.flashes.flash1');
}
$this->redirect('Homepage:');
}
forms.sk_SK.neon vyzerá:
testForm:
name:
label: "Meno: "
required: "Pole meno je povinný údaj."
email:
label: "Email: "
valid: "%value nieje validná emailová adresa. Skontrolujte si prosím chybu."
age:
label: 'Vek: '
range: 'Vek musí byť od %d do %d rokov.'
sbmt:
label: "Odoslať"
onsuccess:
errors:
error1: 'Chyba číslo 1.'
flashes:
flash1: 'Flash číslo 1.'
Kde mám chybu prosím vás? snažil som sa to nájsť, ale nenašiel som nič relevantné.
PS: Na čo si treba dať pozor ak používam translator->domain()? Predpokladám, že to nebude len tak.
Ďakujem.
Editoval Čamo (28. 4. 2015 23:46)
- Čamo
- Člen | 798
Chápem to dobre, že sa to musí robiť takto:
public function testFormSucceeded(Nette\Application\UI\Form $form, $values)
{
$tr = $form->translator;
if($values->name == 'error')
{
$form->addError($tr->translate('onSuccess.errors.error1'));
return;
}
else
{
$this->flashMessage($tr->translate('onSuccess.flashes.flash1'));
}
$this->redirect('Homepage:');
}
lebo inak by addError a flashMessage nedokázali pracovať s placeholdermi a pluralom?
Editoval Čamo (29. 4. 2015 0:01)
- Filip Procházka
- Moderator | 4668
Ve slovníku máš onsuccess
ale v presenteru po něm
chceš onSuccess
Youtube: Filip Procházka: Kdyby\Translation
Flashky nejsou by default napojené na translator. Já třeba překládám flashky až v šabloně
<div n:foreach="$flashes as $flash" class="flash">
<p class="flash {$flash->type}">{_$flash->message}</p>
</div>
Překlad chyb by měl fungovat. Pokud ho potřebuješ časovat, tak od toho je Phrase objekt, zmiňovaný ve videu.
- Čamo
- Člen | 798
Tak flashky som dal na makro, chybu v slovíku opravil → díky, ale $form->addError() mi neprekladá.
public function createComponentTestForm()
{
$form = new Nette\Application\UI\Form;
$form->setTranslator($this->translator->domain('forms.testForm'));
...
return $form;
}
public function testFormSucceeded(Nette\Application\UI\Form $form, $values)
{
$tr = $form->translator;
// Preloží sa iba táto jediná chyba
$form->addError($tr->translate('onSuccess.errors.error1'));
$form->addError('forms.testForm.onSuccess.errors.error1');
$form->addError('onSuccess.errors.error1');
$form->addError(new Phrase('onSuccess.errors.error1'));
$form->addError(new Phrase('forms.testForm.onSuccess.errors.error1'));
return;
}
Z tých errorov sa preloží len prví. Ostatné majú vždy len tvar onSuccess.errors.error1…
EDIT:
No ja neviem ale ak sa nemýlim a renderErrors
je správna metóda, tak pri renderovaní errorov sa neprekladá. Aspoň keď to
porovnám s nasledujúcou metódou renderBody
tak to tak vyzerá. Ale čo ja viem?
Editoval Čamo (29. 4. 2015 23:35)
- Filip Procházka
- Moderator | 4668
@Čamo píšu si, zkusím na to o víkendu kouknout Kdyby/Translation#78