Lokalizace placeholderu? (Translator)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomáš Votruba
Moderator | 1114
+
0
-

Tak jsem zjistil, že translator se na placeholder nevztahuje.

<?php

$form->...
	->setAttribute("placeholder","Login");
$form->setTranslator($this->context->translator);

?>

Což je docela blbé, nevíte jak na to?

EDIT: tak jsem našel cestu. Věřím ale, že existuje snazší:

<!-- v šabloně -->
{var $placeHolder = $template->translate("Placeholder k překladu")}

<!-- tímto dostaneme tento text do panelu, kde jej pak přeložíme;
případně lze místo toho použít externí editor na soubor překlady;
po překladu odstraníme -->
{_"Placeholder k překladu"}

{form}
	<!-- zde pak dostaneme přeložený text -->
	{input username, placeholder => $placeHolder}
{/form}

Editoval Schmutzka (9. 12. 2011 3:52)

Felix
Nette Core | 1196
+
0
-

Tohle neni idealni. Co kdyz chci pouzit

$this->addPassword('password', 'Password:')
    ->setRequired('Please enter your password.')
    ->setAttribute('placeholder', 'Password');

Musime asi pockat, az Davidek udela formy pro HTML5, kde bude lepsi podpora a placeholdery se budou prekladat automaticky.

Matúš Matula
Člen | 257
+
0
-

ja to riesim podedenim Nette\Application\UI\Form a nasledovnym kodom

<?php
	protected function attached($presenter)
	{
        parent::attached($presenter);
		if ($presenter instanceof Nette\Application\UI\Presenter) {

            if ($presenter->getTranslator() !== NULL) {
                $this->setTranslator($presenter->getTranslator());

                // fix: translate placeholders as well till Nette has native support
                foreach ($this->getControls() as $control) {
                    if ($control->controlPrototype->placeholder !== NULL) {
                        $control->controlPrototype->placeholder = $this->translator->translate($control->controlPrototype->placeholder);
                    }
                }
            }
	    }
	}
?>
Tomáš Votruba
Moderator | 1114
+
0
-

@Matúš Matula: Vypadá to ok. Nechceš rovnou poslat pull-request?

Majkl578
Moderator | 1364
+
0
-

Schmutzka napsal(a):

@Matúš Matula: Vypadá to ok. Nechceš rovnou poslat pull-request?

Podle mě to do Nette nepatří, jelikož Nette placeholdery přímo nepodporuje. Touto logikou bychom pak mohli chtít i podporů překladů pro title, data-foo-bar atd.

Tomáš Votruba
Moderator | 1114
+
0
-

@Majkl578: Pravda. Existuje nějaké pěkné řešení, tj. nedědit form ani jej nepřekládat umělě?

Matúš Matula
Člen | 257
+
0
-

Do Nette to urcite nepatri, suhlasim s @Majkl578.
@Schmutzka: podedit si form nepovazujem za nepekne riesenie, kedze mat nejaky BaseForm pre (takmer) vsetky formulare sa moze vyplatit aj pri inych situaciach, kt. casom vyvstanu (je to potom jednoduchy a rychly zasah na 1 mieste)
Ak niekto ma ale krajsie riesenie, sem s nim :-)

David Matějka
Moderator | 6445
+
0
-

ja na tohle vlakno divne koukam a rikam si, wtf? vzdyt mi to funguje.. aha! on za to muze bootstrap renderer od hosiplana. takze se to necha vyresit i v rendereru, viz https://github.com/…Renderer.php#L166 (a to bude asi cistci nez primo ve formu)

Majkl578
Moderator | 1364
+
0
-

Osobně jsem si podědil form a pouze do něj přidal události onAttached a onDetached do metod attached/detached, které bohužel v komponentovém modelu chybí. Pak není problém vázat podobné události na form zvenčí bez nutnosti jej extendovat.