viacjazycne routovanie s identifikatorom jazyka

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

Zdravim,
viem, ze tato tema tu bola riesena viackrat, ale vacsinou narazim na stare vlakna alebo nie uplne vyriesene.

Co potrebujem:
potrebujem alternativne url, napr.:
example.com/kontaktexample.com/en/contact
example.com/o-nas ⇒ example.com/en/about-us

tzn. slovenske bez jazyka v url a anglicke s jazykom. Toto samo o sebe uz mam rozchodene, problem je ale n:href makro chcel by som takto:

<a n:href="articles:view contact">

vygeneruje /en/contact, pokial som na anglickej verzii (url obsahuje /en/), inak /kontakt. Zaroven by som chcel vediet prepnut jazyk tak, aby som ostal na tej istej stranke, len mi prehodilo jazyk, tzn. kliknem na linku a refreshne stranku z /en/contact na /konktakt.

Momentalne to vyzera nejak takto:

$router[] = new TranslationRoute('[<lang [a-z]{2}>/]<id>');

A moja TranslationRoute:

...
    public function __construct($mask, $metadata = array(), $flags = 0)
    {
        $metadata = array(
            'presenter' => 'articles',
            'action' => 'view',
            'id' => array(
		//preto callbacky v tejto triede, aby som mal pristup k jazyku
                Route::FILTER_IN => $this->filterIn,
                Route::FILTER_OUT => $this->filterOut,
                'home'
            ),
            'lang' => 'sk',

        );

        parent::__construct($mask, $metadata, $flags);
    }
...
    public function match(Nette\Http\IRequest $httpRequest)
    {
        $request = parent::match($httpRequest);
	//tu si ten jazyk vytiahnem a ulozim
        $this->params = $request->getParameters();

        return $request;
    }
...
    public function  filterOut($uri)
    {
        if (isset($this->params['lang'])) {
		//$this->articles je len prekladova tabulka
            if (isset($this->articles[$uri][$this->params['lang']])) {
                return $this->articles[$uri][$this->params['lang']];
            }
        }

        return $uri;
    }

Toto funguje, len generuje URL bez /en/, pokial som na anglickej verzii. Samotny kod sa mi vsak nepaci a vyzera to skor ako iba ohackovanie, avsak tak na mna posobi aj tento navod :(
Pride mi to ako vcelku bezna zalezitost, ako to riesite vy? Diky moc!