Lokalizácia, GettextTranslator a Call to undefined method Template::translate()
- tomolas
- Člen | 66
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
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áš