registrace translatoru jako servis nefunguje

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

Zdravim, nechapu to, ale zaregistroval jsem si Translator jako service v config.ini a kdyz zavolam kdekoliv v prezenteru toto:

print \Nette\Environment::getService("Nette\ITranslator")->translate('slovo');

tak mi to vypise preklad slova presne podle ocekavani, ale kdyz si zaregistruju helper:

$template->registerHelper('translate', '\Nette\Environment::getService("Nette\ITranslator")->translate');

a pak ho pouziju nekde v sablone, tak to vypise tuto vyjimku:

Netusite nekdo kde delam chybu? Dik
MemberAccessException
Call to undefined static method Nette\Environment::getService("Nette\ITranslator")->translate().
dakota
Člen | 148
+
0
-

Treba použiť:

$template->setTranslator(...);
Aurielle
Člen | 1281
+
0
-

… a pak překládat přes

{_'preklad textu'} nebo {_$promenna} nebo {!_$promenna}
voda
Člen | 561
+
0
-

Druhý parametr metody registerHelper musí být callback, takže například takto:

<?php
$template->registerHelper('translate', callback(\Nette\Environment::getService("Nette\ITranslator"), 'translate'));
?>
baz
Člen | 42
+
0
-

Ahoj,
mám taky problém s registrací tohoto helperu.

Podle jiných vláken tady ve fóru se mi podařilo nainstalovat NetteGettextExtractor, který mi vygeneruje soubor se stringy.

Ale nedaří se mi zaregistrovat helper. Snažil jsem se hledat a v několika vláknech je stejný problém, ale ztratil mezi ostatní komunikací a nebyl vyřešen.

Mám Nette v0.9.5 a když v presenteru použiju:

<?php
public function renderDefault() {
    $this->template->registerHelper('translate', callback(Environment::getService("Nette\ITranslator"), 'translate'));
  }
?>

tak dostanu následující chybu :
InvalidStateException
Service ‚Nette\ITranslator‘ not found.

Ještě se tu zmiňuje zaregistrovat jako službu v config.ini. Je to tento problém? (Jak to mám udělat)
Můj config.ini :

<?php
[common]
; PHP configuration
php.date.timezone = "Europe/Prague"
php.iconv.internal_encoding = "UTF-8"
php.mbstring.internal_encoding = "UTF-8"
;php.default_charset = "UTF-8"

; variables
variable.lang = en
variable.tempDir = %appDir%/temp
variable.logDir = %appDir%/log

const.GALLERY_ITEM_TYPE_IMAGE = 1
const.GALLERY_ITEM_TYPE_VIDEO = 2

; services
service.Nette-Security-IAuthenticator = UsersModel

service.Nette-Loaders-RobotLoader.option.directory[] = %appDir%
service.Nette-Loaders-RobotLoader.option.directory[] = %libsDir%
service.Nette-Loaders-RobotLoader.run = TRUE

/* ... DB definice... */
?>

Přiznám se, že ani nevím jestli registraci helperu dělám správně v renderDefault v presenteru.

Předem mockrát děkuji za rady.

Editoval baz (18. 2. 2011 8:56)

baz
Člen | 42
+
0
-

Tak jsem ještě zkusil vložit do configu toto:

<?php
service.Nette-ITranslator.factory = "NetteTranslator\\Gettext::getTranslator"
service.Nette-ITranslator.run = TRUE
?>

chyba se změnila na
InvalidStateException

Cannot instantiate service ‚Nette\ITranslator‘, handler ‚Gettext::getTranslator‘ is not callable.

Předpokládám, že bych měl něco nahrát do libs\Nette ale netuším co :-(
Jediné co jsem našel v mé aktuální složce Nette je Utils\ITranslator, ale tam je jen definice interface …

Editoval baz (18. 2. 2011 9:07)