Lokalizácia, GettextTranslator a Call to undefined method Template::translate()

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

Zdravim všetkých,
už druhý deň sa trápim s lokalizáciou stránky. Prešiel som cez rôzne štádiá a snažil som sa prečítať všetko, čo bolo tu na fóre napísané o lokalizácii. Neviem ako ďalej..

Skúsim popísať môj postup:

1. Úspešne som použil GettextExtractor s Poeditom a vytvoril som .po a .mo súbory v adresárovej štruktúre:

	app/
		locale/
			en/
				LC_MESSAGES/
					default.mo
					default.po
			sk/
				LC_MESSAGES/
					default.mo
					default.po

tu všetko vypadá v pohode, na preklad to našlo veci aj z php kódu, aj zo šablón.

2. Stiahol som si GettextTranslator.php z addons https://componette.org/search/?…

3. BasePresenter.php:

<?php
	public function beforeRender()
	{
		$locale = Languages::getLocale($this->lang); // moja trieda
		$this->translator = new GettextTranslator(APP_DIR.'/locale/'.$this->lang.'/LC_MESSAGES/default.mo', $locale); // tu som experimentoval s $locale, skúsil som všetko možné, cesta k súbory je určite správna
		$this->template->setTranslator($this->translator);
	}

	public function templatePrepareFilters($template)
	{
		$template->registerFilter(new LatteFilter);
	}
?>

4. Šablóna:

{block #title}{_('Obrázky')}{/block}
alebo
<span class="heading_arrow2">{_('Posledný namaľoval')}</span>

5. Presenter:

<?php
	...
	$form = new AppForm;
	$form->setTranslator($this->translator);
	$form->addSelect('continent_id', 'Niečo na preklad', $continents)
		->addRule(Form::FILLED, 'Vyberte prosím kontinent.');
	...
?>

Výsledok: Call to undefined method Template::translate()

Chýba mi tam niečo? Vidíte niekto chybu?

Budem vďačný za každý postreh.
Tomáš

Update:
najnovšie je stav takýto. Retazce na preklad zmiznú zo stránky (neostane tam ich pôvodná forma).

PHP Notice: Undefined index: Plural-Forms in .../libs/GettextTranslator.php:59
PHP Notice: Undefined variable: plural in .../libs/GettextTranslator.php:61
PHP Notice: Undefined index:  in .../libs/GettextTranslator.php:209
PHP Notice: Undefined index:  in .../libs/GettextTranslator.php:218

Editoval tomolas (9. 9. 2010 17:17)

tomolas
Člen | 66
+
0
-

Tak nakoniec som neprišiel na to kde je chyba, ale vyriešil som to zjednodušením. Prepísal som metódu translate() v GettextTranslator.php na nasledovné:

<?php
	public function translate($message, $count = 1)
	{
		$message = (string) $message;
		if (!empty($message) && isset($this->dictionary[$message])) {
			$word = $this->dictionary[$message];
			return $word->translate();
		}
		return $message;
	}
?>

Vzdávam sa tým plural funkcionality, ale po tak dlhom ubíjajúcom hľadaní som rád, že to ide aspoň nejak. Tak ak by mal niekto podobný problém ako ja, snáď mu toto pomôže.

Ak by mal niekto seriózne riešenie, stále by ma to dosť zaujímalo.

Tomáš