vícejazyčné URL a přepínání mezi mutacemi

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

Zdravím, na překlad jednotlivých částí URL používám callbacky v podobě filterIn a filterOut metod, kde se na základě jazyka v url použije překladová tabulka, takže např. URL „/cs/podpora/platby/“ se v pořádku převede na presenter a akci „Support:payment“ a naopak při generování odkazu. Když ručně hodím adresu „/en/support/payment/“, tak rovněž. Do téhle chvíle se zdá vše v pořádku, nevím teď ale jak správně vygenerovat odkaz směřující do jiné jazykové mutace tak, abych zachoval současně navšívenou stránku, tj. například aby

<a n:href="this, 'lang' => 'en'">EN</a>

vygeneroval /en/support/payment/. V dané chvíli jsem totiž na české mutaci a vygeneruje se (pochopitelně) „/en/podpora/platby“, což už se po kliknutí špatně přeloží (v url je jazyk en, ale nesedí název presenteru a akce do překladové tabulky). Jdu na to od základu špatně? Jak docílit jednoduše kýženého chování, aniž bych psal vlastní router nebo dopisovat dodatečné překladové tabulky?

Editoval Rob Bob (3. 6. 2015 13:08)

newPOPE
Člen | 648
+
+1
-

To vyzera ako keby si mal zle napisany filterOut lebo ten by mal zohladnit lang a podla toho vygenerovat URL.

Rob Bob
Člen | 60
+
0
-

No já beru lang z HttpRequest (kde je cs, protože jsem na české stránce) – problém mám právě v tom, že jsem nepřišel na to, jak do té metody dostat parametr „lang“, který se nachází v generované URL, resp. v masce Routeru.

newPOPE
Člen | 648
+
0
-

Ukaz zdrojak.

Rob Bob
Člen | 60
+
0
-

Router: http://pastebin.com/iHDiLtWC
UrlFilter: http://pastebin.com/ghFAFeQ5

Vím proč se to generuje, tak jak se to generuje, ale nevím jak ve xxxFilterOut získat lang z generovaného odkazu.

newPOPE
Člen | 648
+
0
-

Skus to takto a uvidis co ti tam pripluje ako parametre :):

$router[] = new Route('[<lang [a-z]{2}>/]<presenter>/<action>/<id>[-<title>]', [
	'lang' =>  $defaultLanguage,
    'module' => 'Frontend',
    'id' => null,
    'title' => null,
	null => [
		Router::FILTER_OUT => function($params) {/* tu by si mal mat vsetky parametre z app requestu */}
	]
]);
Rob Bob
Člen | 60
+
0
-

Yay, že existuje null ⇒ [ … ], kde budu mít všechny parametry by mě asi fakt nenapadlo. Teď už si zřejmě poradím, díky.