Neexistuje metoda Latte\Engine::setTranslator()

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
RadaR
Člen | 46
+
+2
-

Ahoj, používám Latte samostatně. Zkouším přejít na Nette 2.3. Ve svém projektu chci používat překlady. Ve staré verzi Nette 2.1 jsem s tím neměl problém, zavolal jsem:

$latte->setTranslator(new Translator('en_US', 'lang/'));

a pak jsem bez problémů mohl v šabloně používat {_}překlady{/_}. Když ale chci teď do šablony zaregistrovat translátor, hlásí mi to chybu: Fatal error: Uncaught exception ‚LogicException‘ with message ‚Call to undefined method Latte\Engine::setTranslator().‘ in…. V dokumentaci se píše, že stačí předat translátor do šablony https://latte.nette.org/cs/tags#… tak, jako to provádím výše, ale to mi teď nefunguje.

Mám pomocí Composeru stažený balíček latte/latte a dále nette/caching – obojí jako takové, funguje bez problémů. Když však prohledávám soubory a hledám v nich string setTranslator, tak se tam nic takovýho nenachází. Jelikož jsem si chtěl poradit pokud možno sám, stáhl jsem si celý balík Nette a tuto metodu jsem našel v nette/forms a dále potom zde: https://api.nette.org/…emplate.html. Zde však už moje znalosti končí a nevím si s tím rady, jak to naroubovat. Postrčí mě někdo?

Celý můj kód je jednoduchý, vypadá takto:

require_once (__DIR__ . '/nette/vendor/autoload.php');
require_once (__DIR__ . '/class/class.translator.php');

// vytvoreni Latte objektu
$latte = new Latte\Engine;
$latte->setTempDirectory(__DIR__. '/cache/');

// pridani vlastnich maker pro Latte
$latte->onCompile[] = function(Latte\Engine $latte) {
	$macroSet = new Latte\Macros\MacroSet($latte->getCompiler());
   	$macroSet->addMacro('myMacro', "echo 'myMacro says: FOO';");
};

// vytvoreni a pridani objektu Translatoru
$latte->setTranslator(new Translator('en_US', __DIR__ . '/lang/'));

// vytvoreni Cache objektu a jeho predani do objektu sablony
use Nette\Bridges\CacheLatte\CacheMacro;
$cache = new CacheMacro($latte->getCompiler());
$latte->addMacro('cache', $cache);


$param = array(
				'test' => 'Hello world',
				//'netteCacheStorage' => new Nette\Caching\Storages\FileStorage(__DIR__. '/cache/'),
				'netteCacheStorage' => new Nette\Caching\Storages\DevNullStorage(__DIR__. '/cache/'),
			);
$latte->render('test.latte', $param);
David Matějka
Moderator | 6445
+
+2
-

Ahoj, v te doc je to ukazka pro Template z application (ano, neni to tam jasne, bude se to muset opravit :)), kde je metoda setTranslator, pri samotnem pouziti latte bude stacit ten radek zkopirovat a pridat to jako filter

RadaR
Člen | 46
+
+2
-

David Matějka napsal(a):

Ahoj, v te doc je to ukazka pro Template z application (ano, neni to tam jasne, bude se to muset opravit :)), kde je metoda setTranslator, pri samotnem pouziti latte bude stacit ten radek zkopirovat a pridat to jako filter

Díky moc, tohle řešení mě jaksi nenapadlo :) Vymýšlel jsem složitosti, jak si přes Composer přitáhnu ještě nette/bridges (což neexistuje) nebo nějakým propojením skrz nette/forms atd.

A ono stačí jen:

$latte->addFilter('translate', $translator === NULL ? NULL : array($translator, 'translate'));

Jinak poznámka pod čarou – přijde mi, že celý Nette má tak překotný vývoj, že se nestíhá udržovat aktuální dokumentace, což je tu a tam docela nepříjemný. Přimlouvám se, aby se konkrétně tohle v nápovědě aspoň náznakem zmínilo.

Na druhou stranu musím říct, že se mi tady na fóru vždy dostalo dobré pomoci.

Editoval RadaR (30. 10. 2015 13:30)