VisualPaginator & Translator

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

Ahoj, marně řeším překlad pluginu VisualPaginator. Na webu je vše ok, krásně funguje – jak stránkování, tak i překlad.

Jde mi zkrátka o to, jak v šabloně VisualPaginatoru překládat třeba „Strana 1 z 5“ atd. Po „prostém“ zápisu {_}Strana {$paginator->page} z {$paginator->pageCount}{/_} mi to bohužel nefunguje a vyhodí chybu.

Nevíte, prosím, někdo, jak na to? Díky.

Tomáš Votruba
Moderator | 1114
+
0
-

Ahoj, nevím jaký přesně používáš Translator, ale překládej pouze texty, tedy:

{_"_Strana"} {$paginator->page} {_"z", $paginator->pageCount} {* pro množné číslo: z/ze *}

Co ti háže laděnka?

voda
Člen | 561
+
0
-

Spíš:

{_'Strana %d z %d'| printf:$paginator->page, $paginator->pageCount}

Takhle to máš jako jeden řetězec, takže se to bude lépe překládat.

enumag
Člen | 2118
+
0
-

@voda: Když ty parametry dáváš až tomu helperu tak nemůžeš přeložit z/ze, nebo ano?

voda
Člen | 561
+
0
-

@enumag: Není problém to předat i translatoru:

{_n'Strana %d z %d', $paginator->pageCount| printf:$paginator->page, $paginator->pageCount}
zener
Člen | 17
+
0
-

Díky za odpovědi. Mám translator přesně podle kuchařky – https://componette.org/search/?…

Po označení překladu mi laděnka napíše následující chybu:
Call to undefined method Nette\Templating\FileTemplate::translate().

Tomáš Votruba
Moderator | 1114
+
0
-

U komponenty je potřeba registrovat Translator samostatně.

Zkus ke komponetně (případně tvému BaseControl) přidat toto:

public function createTemplate($class = NULL)
{
	$template = parent::createTemplate($class);
	$template->setTranslator($this->parent->translator);
	return $template;
}
zener
Člen | 17
+
0
-

Schmutzka: Díky moc, chlape, funguje to!

Pro ty, co by řešili stejný problém – je potřeba ještě upravit viditelnost proměnné $translator (BasePresenter.php) na public. V kuchařce je protected, což nefunguje.

<?php
/** @var NetteTranslator\Gettext */
public $translator;
?>