Jak použít helper na texty formuláře, kde je použitý překladač?
- dady
- Člen | 12
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
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
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));