2 Jazykové mutace – jak na to?

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

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
+
0
-

Mrkni na toto, zřejmě bys v tom mohl najít odpověď:

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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.