Kdyby\Translator preklad $form->addError() a $this->flashMessage()

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

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

@Čamo píšu si, zkusím na to o víkendu kouknout Kdyby/Translation#78