Překlad složených výrazů – GetText a GetExtractor
- maarlin
- Člen | 207
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
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
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řebaKomentář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);