Překlad složených výrazů – GetText a GetExtractor

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

Používám na multijazyčný web Gettext a GettextExtractor, aktuálně jsem narazil na problém s překladem skládaných výrazů v šabloně. Dejme tomu, že třeba mám proměnnou title:

$this->template->title = '"'.$query."' - "._('Search');

Na výstup jde tedy celý složný výraz, kde $query je pokaždé jiné, tzn. přesto, že v kódu presenteru výraz k přeložení obklopím překladovou funkcí _(), dostane se sice do *.po souboru, ale i když je tam pro ni překlad, nepřeloží se, protože se ve skutečnosti bude překládat $query - Search a ne jen Search.
Dá se nějak elegantně ta proměnná přeložit dříve, než jde na výstup do šablony?

Editoval maarlin (8. 6. 2010 10:31)

maarlin
Člen | 207
+
0
-

Osobně jsem to nakonec vyřešil asi takto:

BasePresenter.php:

public function translate($value) {
    return $this->getTranslator()->translate($value);
}

MyPresenter.php

$this->template->title = '"'.$query."' - ".$this->translate('Search');

Řešili byste to jinak?

Ondřej Mirtes
Člen | 1536
+
0
-

V šabloně:

{_'%s Search', $query}
maarlin
Člen | 207
+
0
-

Ondřej Mirtes napsal(a):

V šabloně:

{_'%s Search', $query}

Ondro, díky, o tomhle jsem nevěděl, ale bohužel to moc neřeší můj problém, protože v šabloně mám na tvrdo <title>{_$title}</title>.

Leda bych třeba testoval v šabloně neprázdné proměnné a podle toho měnil zápis v šabloně… poněvadž ta proměnná nebude jedna – tzn. nejde mi tady jen o $query - Search, ale třeba Komentáře k $articleName atp.

Editoval maarlin (8. 6. 2010 14:01)

iguana007
Člen | 970
+
0
-

maarlin napsal(a):
Ondro, díky, o tomhle jsem nevěděl, ale bohužel to moc neřeší můj problém, protože v šabloně mám na tvrdo <title>{_$title}</title>.

Leda bych třeba testoval v šabloně neprázdné proměnné a podle toho měnil zápis v šabloně… poněvadž ta proměnná nebude jedna – tzn. nejde mi tady jen o $query - Search, ale třeba Komentáře k $articleName atp.

Možná se pletu, ale přijde mi, že si asi správně nepochopil jak Gettext používat.
Pokud chceš v šabloně překládat pouze: {_$title} – tak je to imho špatně. V řetezci, který chceš předhodit gettextu bys měl mít nějaký text, ne jen samotnou proměnnou. Pokud už to v template tak máš, tak bys to měl překládat na straně presenteru, controlu apod. a do šablony už poslat jen tu proměnnou, kterou vypíšeš klasicky {$title}

Samotný překlad v presenteru by ti měl fungovat, tak jak si napsal, tj.:

$this->template->title = '"'.$query."' - "._('Search');

Pokud ti tento zápis nefunguje, tak bych si možná tipnul na špatně nastavený Translator.

Já jej v BasePresenteru zapínám takto:

$translator = new Translator(Environment::getVariable('lang'), APP_DIR . '/FrontModule/locale/');
$this->template->setTranslator($translator);