Lokalizace
Lokalizace znamená přizpůsobení software pro různé jazyky, regionální rozdíly a technické požadavky cílového trhu.
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:
function beforeRender()
{
...
$this->template->setTranslator($translator);
}
Poté budou překládány všechny výrazy v podtržítkovém makru:
<li><a href="basket">{_'Košík'}</a> {_$item}
Makro je volitelně párové:
<li><a href="order">{_}Objednávka{/_}</a>