Preklad url adresy, jak vytvorit link

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

Chci se zeptat kdyz si nadefinuju filtry do rout aby mi to bralo i anglictinu (podle dokumentace) jak potom provedu preklad toho skutecneho linku v templatu? Napriklad {link :Front:Clanek:} aby tam bylo {link :Front:Article:}, nejlepe nak pomoci ITranslator? Je to vubec mozne nebo jakym zpusobem se to resi?

OndrejSlamecka
Člen | 41
+
0
-

Tohle možné není. Proč bys to taky dělal? Link je vnitřní záležitost aplikace a URL se přeloží sama (v template nic překládat nemusíš, tam používáš vnitřní názvy aplikace).

Editoval OndrejSlamecka (24. 1. 2012 20:28)

Filip111
Člen | 244
+
0
-

A co tohle?
https://doc.nette.org/…tion/routing#…
Jestli je to ono, tak tu najdeš i několik zajímavých diskuzí.

saimons
Člen | 293
+
0
-

Ok, uz mi to je asi jasne. Ja jsem porad premyslel nad tim, jak routa pozna do jakeho jazyku to ma prelozit. Ale to musim pouzit Route::FILTER_IN ⇒ ‚filterInFunc‘, Route::FILTER_OUT ⇒ ‚filterOutFunc‘, kde si v metodach uz zjistim id jazyka a vratim si co je potreba. Rikam to dobre?

saimons
Člen | 293
+
0
-

Mzete mi poradit co mam spatne, myslel jsem si ze by to melo fungovat:

bootstrap.php

$router = $application->getRouter();

$router[] = new Route('<lang [a-z]{2}>/<presenter>/<action>', array(
    'lang' => 'cs',
    'module' => 'Front',
    'presenter' => array(
        Route::VALUE => 'Stranka',
        Route::FILTER_IN => 'Translator\RouterTranslations::urlToPresenter',
        Route::FILTER_OUT => 'Translator\RouterTranslations::presenterToUrl',
    ),
    'action' => 'default',
));

Preklad

<?php

namespace Translator;

use Nette\Object,
    Nette\Application\Request;

class RouterTranslations extends Object {

    public static $translations = array(
        'cs' => array(
            'stranka' => 'stranka',
            'informace' => 'informace',
        ),
        'en' => array(
            'article' => 'stranka',
            'informations' => 'informace',
        ),
    );

    public static function presenterToUrl($presenter, Request $request) {
        $lang = $request->params['lang'];
        $table = array_flip(self::$translations[$lang]);
        return $table[$presenter];
    }

    public static function urlToPresenter($url, Request $request) {
        $lang = $request->params['lang'];
        $table = self::$translations[$lang];
        return $table[$url];
    }

}

Hlasi mi to:

Argument 2 passed to Translator\RouterTranslations::presenterToUrl() must be an instance of Nette\Application\Request, none given

Jakym zpusobem lze zjistit aktualni jazyk? Musim jeste nekde neco vytvorit v konfiguraci?

Editoval saimons (25. 1. 2012 16:59)

saimons
Člen | 293
+
0
-

Nikdo nevi proc mi to dela? Nebo jak tam mam spravne dostat jazyk?

finwe
Člen | 58
+
0
-

V tvém případě ti do metody na překlad přijde vždy jen jeden parametr, a to buď část URL, tedy ‚article‘, nebo interní označení presenteru, tedy ‚stranka‘ druhým směrem. Čekat tam presenter a request je lichá domněnka. šlo by udělat

$lang = ... // zjištění jazyka patrně parsováním URI ještě v bootstrapu
...
Route::FILTER_IN => function($urlPart) use ($lang) {
	return Translator\RouterTranslations::urlToPresenter($urlPart, $lang); // Změnit rozhraní metody
},
newPOPE
Člen | 648
+
0
-

finwe napsal(a):

toto je divoke riesenie. skus si pozriet FilterRoute v podstate je dolezite len toto: Fígl je v tom, že Router zpracuje adresu normálně a filtračním funkcím předává parametr i výsledný PresenterRequest a následně vracenými hodnotami přepíše původní.

ja som nieco take cez vikend potreboval a je to presne to co potrebujem. dostat jazyk (vsetky parametre) do filter in filter out

Editoval newPOPE (30. 1. 2012 14:33)

saimons
Člen | 293
+
0
-

newPOPE napsal(a):

finwe napsal(a):

toto je divoke riesenie. skus si pozriet FilterRoute v podstate je dolezite len toto: Fígl je v tom, že Router zpracuje adresu normálně a filtračním funkcím předává parametr i výsledný PresenterRequest a následně vracenými hodnotami přepíše původní.

ja som nieco take cez vikend potreboval a je to presne to co potrebujem. dostat jazyk (vsetky parametre) do filter in filter out

Ajo tohle jsem mel na mysli, jen jsem nak zapomel na tu tridu, myslel jsem si, ze je to soucasti Nette. :) Diky.