Edit
Lang

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>