Překládání
Pokud programujete vícejazyčnou aplikaci, budete nejspíš potřebovat stejnou stránku nebo formulář vykreslit v různých jazykových mutacích.
Nette Framework disponuje rozhraním pro překlad. Stačí si vytvořit tzv. překladač, což je objekt implementující
rozhraní Nette\Localization\ITranslator. Rozhraní
má jedinou metodu translate()
.
class MyTranslator implements Nette\Localization\ITranslator
{
/**
* Translates the given string.
* @param string message
* @param int plural count
* @return string
*/
public function translate($message, $count = NULL)
{
return ...;
}
}
Nette neobsahuje výchozí implementaci pro ITranslator. Můžeme ovšem sáhnout po hotových řešeních, jako je například Kdyby Translation.
Překlad formulářů
Formuláře i jednotlivé formulářové prvky mají metodu setTranslator()
, kterou lze nastavit překladač.
$translator = new MyTranslator;
$form->setTranslator($translator); // nastavíme jej do formuláře
Od této chvíle se nejen všechny popisky, ale i všechny chybové hlášky nebo položky select boxů transparentně přeloží do jiného jazyka.
U jednotlivých formulářových prvků je přitom možné nastavit jiný překladač nebo překládání úplně vypnout
hodnotou NULL
:
$form->addSelect('carModel', 'Model:', $cars)
->setTranslator(NULL);
Překlad šablon
Šabloně lze také nastavit překladač metodou setTranslator()
, například v presenteru:
protected function beforeRender()
{
...
$this->template->setTranslator($translator);
}
Poté budou překládány všechny výrazy v podtržítkové značce:
<li><a href="basket">{_'Košík'}</a> {_$item}
Značka je volitelně párová:
<li><a href="order">{_}Objednávka{/_}</a>