2 Jazykové mutace – jak na to?
- dotTwelve
- Člen | 167
Ahoj,
prohledal jsem to tady a i když jsem na něco narazil stále nevím jak mám
začít abych mohl web mít ve 2 jazykových mutacích: /en/ a /cs/ kde
defaultne bude /cs/.
Konkrétní příklad: Nyní mám presenter PortfolioPresenter.php a sablonu default.phtml ve slozce Portfolio – využívám příkladu „Skeleton“. V šabloně @layout.phtml mám generované odkazy a jeden je na zmiňováné Portfolio.
<?php
<a{ifCurrent Portfolio:*} class="linkActive"{/if} href="{plink Portfolio:}">Portfolio</a>
?>
Jak a kde mohu například tento odkaz počeštit. Mám si vytvořit další šablony pro CZ verzi a nějak podle presenteru určovat, která šablona se bude načítat? Jak docílím toho abych měl URL ve tvaru /cs/presenter/akce/id místo /presenter/akce/id.
Díky
- lucass
- Člen | 89
Mrkni na toto, zřejmě bys v tom mohl najít odpověď:
- https://forum.nette.org/…tni-parametr
- https://forum.nette.org/…mi-parametry
- https://forum.nette.org/…pleseorouter?…
Každopádně šablonu měj jednu, v BasePresenteru si udělej persistentní $lang proměnnou a nastav routy. S největší pravděpodobností si budeš muset udělat svou vlastní routu a načítat příslušné jazykové alternativy parametrů z Db.
Editoval lucass (9. 11. 2009 10:59)
- Tomik
- Nette Evangelist | 485
Pokud máš správně nastavený lokalizátor (pokud nevíš, jak na to, hledej zde na fóru, dobře o tom psal Karel Klíma), pak stačí toto:
<?php
<a{ifCurrent Portfolio:*} class="linkActive"{/if} href="{plink Portfolio:}">{_'Portfolio'}</a>
?>
Předpoklad je, že parametr $lang bude persistentní, pak se do odkazu doplní sám, podle aktuálně zvolené jazykové verze…
- dotTwelve
- Člen | 167
Tomik napsal(a):
Pokud máš správně nastavený lokalizátor (pokud nevíš, jak na to, hledej zde na fóru, dobře o tom psal Karel Klíma), pak stačí toto:
<?php <a{ifCurrent Portfolio:*} class="linkActive"{/if} href="{plink Portfolio:}">{_'Portfolio'}</a> ?>
Předpoklad je, že parametr $lang bude persistentní, pak se do odkazu doplní sám, podle aktuálně zvolené jazykové verze…
Použil jsem NetteGettextExtractor a získal soubor .po, ten jsem následně pomocí Poeditu přeložil a mám nyní binární soubor .mo, který jsem nahrál zpět do složky /locale.
Jak mám nyní postupovat abych získal překlady v šabloně, kde mám
tvary {_'Portfolio'} atd.?
Předpokládám, že musím zaregistrovat GettextTranslator a ten potom
v šabloně volat pomocí:
<?php
{? $template->setTranslator(new GettextTranslator('locale/template.en.mo'))}
?>
?
Tak nakonec jsem tedy zprovoznil i překlad řetězců v šabloně. Ovšem nechaápu nyní jak mám udělat to, abych měl dva odkazy /en/ a /cs/ podle toho na který uživatel klikne se načte správná lokalizace. Lze na to jít přes persistentní parametr $lang a úpravu rout?
Editoval dotTwelve (9. 11. 2009 13:05)
- iguana007
- Člen | 970
V Nette jsem s gettextem jeste nepracoval, ale co jsem delal drive web
s pomoci gettextu, tak stacilo zmenit locale a jazyk se prepnul …
viz: http://php.net/…etlocale.php
- dotTwelve
- Člen | 167
Takže jsem to vyřešil následovně:
V Basepresenteru mám:
<?php
public $lang;
public static function getPersistentParams()
{
return array('lang');
}
protected function beforeRender()
{
if ($this->getParam('lang')) {
$this->lang = $this->getParam('lang');
}
$translator = new GettextTranslator(APP_DIR.'/locale/'.$this->lang.'/homepage.mo', $this->lang);
$this->template->setTranslator($translator);
}
?>
Ovšem nevím, jak nastavit správně routy, aby parametr lang byl defaultně nastaven na ‚cs‘. A ještě jeden dotaz, musím mít dva soubory s překlady, když budou vlastně stejný?
- lucass
- Člen | 89
Sice jsem naposledy persitenci a routy v Nette používal před 3/4 rokem, ale podle mě to stačí takto:
<?php
/** @persistent */
public $lang = 'cs'; // nejaky defaultni, popr. si v configu dej nejakou promennou a nastavuj to ve startupu
protected function beforeRender() {
$translator = new GettextTranslator(APP_DIR.'/locale/'.$this->lang.'/homepage.mo', $this->lang);
$this->template->setTranslator($translator);
}
?>
Na routy mrkni do těch odkazů, co jsem posílal výše.