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 k tomuto účelu definuje rozhraní pro překlad Nette\Localization\ITranslator, které má jedinou metodu translate(). Ta přijímá zprávu $message, což zpravidla bývá řetězec, a libovolné další parametry. Úkolem je vrátit přeložený řetězec.

V Nette není žádná výchozí implementace, můžete si vybrat podle svých potřeb z několika hotových řešeních, které najdete na Componette. V jejich dokumentaci se dozvíte, jak translator konfigurovat.

K objektu translatoru se potom ve svém kódu dostanete tak, že si jej necháte předat pomocí dependency injection.

Překlad formulářů

Formuláře podporují vypisování textů přes translator. Předáme jim ho pomocí metody setTranslator():

$form->setTranslator($translator);

Od této chvíle se nejen všechny popisky, ale i všechny chybové hlášky nebo položky select boxů 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);

validačních pravidel se translatoru předávají i specifické parametry, například u pravidla:

$form->addPassword('password', 'Heslo:')
	->addCondition($form::MIN_LENGTH, 'Heslo musí mít alespoň %d znaků', 8);

se volá translator s těmito parametry:

$translator->translate('Heslo musí mít alespoň %d znaků', 8);

a tedy může zvolit správný tvar plurálu u slova znaky podle počtu.

Překlad šablon

Šablonám Latte lze nastavit překladač jako filtr:

$latte->addFilter('translate', [$translator, 'translate']);

V presenterech lze použít i metodou setTranslator():

protected function beforeRender()
{
	...
	$this->template->setTranslator($translator);
}

Poté lze překladač používat jako jiné filtry:

<a href="basket">{'Košík'|translate}</a>
<span>{$item|translate}</span>

Je k dispozici i zkratka v podobně podtržítkové značky:

<a href="basket">{_'Košík'}</a>
<span>{_$item}</span>

Značka je volitelně párová:

<a href="order">{_}Objednávka{/_}</a>
Vylepšit tuto stránku