You are browsing the unmaintained documentation for old Nette 2.1. See documentation for current Nette.

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>
Vylepšit tuto stránku