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.

Od nette/utils verze 3.2 je název rozhraní Nette\Localization\Translator, tedy bez prefixu I.

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(): void
{
	...
	$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