2 Jazykové mutace – jak na to?

Notice: This is an old thread, there may be recent replies.

1. 4 years ago

dotTwelve
Member
Registered: 19. 6. 2009
Location: Česká Lípa
Posts: 172

2 Jazykové mutace – jak na to?

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

 

2. 4 years ago

lucass
Member
Registered: 4. 12. 2008
Posts: 85

Re: 2 Jazykové mutace – jak na to?

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.

Last edited by lucass (9. 11. 2009 10:59)

 

3. 4 years ago

Tomik
Nette Evangelist
Registered: 20. 3. 2005
Location: London, UK
Posts: 490

Re: 2 Jazykové mutace – jak na to?

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…

 

4. 4 years ago

dotTwelve
Member
Registered: 19. 6. 2009
Location: Česká Lípa
Posts: 172

Re: 2 Jazykové mutace – jak na to?

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?

Last edited by dotTwelve (9. 11. 2009 13:05)

 

5. 4 years ago

iguana007
Member
Registered: 3. 11. 2009
Location: Praha
Posts: 520

Re: 2 Jazykové mutace – jak na to?

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


Omne Principium Grave

 

6. 4 years ago

dotTwelve
Member
Registered: 19. 6. 2009
Location: Česká Lípa
Posts: 172

Re: 2 Jazykové mutace – jak na to?

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ý?

 

7. 4 years ago

lucass
Member
Registered: 4. 12. 2008
Posts: 85

Re: 2 Jazykové mutace – jak na to?

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.

 

Board footer

Switch to desktop