Jak použít helper na texty formuláře, kde je použitý překladač?

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

Ahoj,

mám formulář, kterému je přiřazený překladač, a tak jednoduše sám přeloží všechny popisky polí.

<?php
$form = new UI\Form;
$form->setTranslator($this->translator);

$form->addText('username', 'FRM_LOGIN_USERNAME')
	->setRequired('Please enter your username.')
	->getControlPrototype()->class('text');
?>

Jak ale docílit toho, aby se u všech textů provedlo „ucfirst“?

Můžu si samozřejmě přizpůsobit Translator nebo mít verzi daného překladu s velkým prvním písmenem, ale to se mi zdá nešikovné.

Také je možné form sestavovat v šabloně latte, kde každý text můžu prohnat přes helper – např.:
Znamená to ale vše otrocky vytvářet sám…

<label for="username" class="label">{_'FRM_LOGIN_USERNAME' |firstUpper}</label>

Takže má otázka zní, zda neexistuje elegantnější způsob, jak toho docílit?

Díky ;o)

Dady

Tomáš Votruba
Moderator | 1114
+
0
-

dady napsal(a):

Můžu si samozřejmě přizpůsobit Translator nebo mít verzi daného překladu s velkým prvním písmenem, ale to se mi zdá nešikovné.

Ze všech řešení mi to přijde nejšikovnější.

Osobně bych měl oddělené texty pro lower/upper, aby se mi tam nepletla magie. Kdysi jsem potřeboval na nějaké třetí místo přidat text začínající na velké písmeno a dlouho jsem hledal ono konvertování.

voda
Člen | 561
+
+1
-

Nejlepší je mít texty v obou variantách. Pokud chceš skutečně magii, můžeš použít kompozici:

use Nette\Localization\ITranslator;

class UcFirstTranslator implements ITranslator {

	/** @var ITranslator */
	private $translator;

	public function __construct(ITranslator $translator) {
		$this->translator = $translator;
	}

	public function translate($message, $count = NULL) {
		return ucfirst($this->translator->translate($message, $count));
	}
}

a potom:

$form = new UI\Form;
$form->setTranslator(new UcFirstTranslator($this->translator));
dady
Člen | 12
+
0
-

Moc díky! ;o)