Jak zjistit jazyk v routeru?

- h4kuna
 - Backer | 741
 
Tohle řeším taky, stávájící router jsem si upravil, že si do callbacku FILTER_OUT přidám $refUrl a taky jsem umlčel výstup, protože funkce rawurldecode očekává jen jeden parameter, tím vím kam aplikace chce směrovat a podle toho sestavím url. A pro FILTER_IN musím mít k dispozici všechny jazykový mutace protože nevím co přijde. Nic lepšího nemám, zatím to maká.
$params[$name] = @call_user_func($meta[self::FILTER_OUT], $params[$name], $refUrl);
					Editoval h4kuna (5. 3. 2013 9:38)

- h4kuna
 - Backer | 741
 
Protože ve třídě route je celkem dost statických a zároveň private věcí tak si celou třídu zkopíruj, přejmenuj ji podle sebe a zaměň ten řádek viz výše. Při instancovaní rout použij novou třídu a pro vlastní callbacky použij FILTER roluj trošku níže „Kromě překladového slovníku v podobě pole lze nasadit i vlastní překladové funkce a filtry.“
Editoval h4kuna (5. 3. 2013 12:50)

- danik
 - Člen | 56
 
Ahoj vespolek,
resim neco dost podobnyho. Diky tomu, ze muzu v config.neon predat do router
factory celkem co chci, muzu ji treba predat instanci
Nette\Localization\ITranslator a tu potom pri definici rout vyuzit
ve filtrech rout. Pripada mi to jako nejspravnejsi postup – precijen,
prekladam, tak bych mel pouzit prekladac.
No ale ten translator musi odnekud vzit jazyk. Bylo by tudiz cool, kdyby
filtrovaci funkce umely pristupovat k ostatnim (jiz znamym) parametrum, ktere
jsme z routy vyparsovali. Napriklad routa
[<lang [a-z]{2}>/]<presenter>/<action>, ktera by
pro <presenter> a <action> mela nastaveny
filtrovani pomoci translatoru. Pak by teoreticky pri filtrovani tech parametru
uz mohl <lang> bejt vyparsovanej a bud mit nejakou hodnotu
nebo bejt NULL (pokud neni v URL zadanej).
Jedno reseni, ktery me napada, je mit „filtr“ funkci i pro parametr
<lang>, ktera by ale nic realne nefiltrovala, jen by
nastavovala jazyk translatoru. Translator samozrejme ma nejakej „vychozi“
jazyk (tzn. jazyk kterej je pouzitej primo ve zdrojaku), takze by absence
parametru <lang> v URL nemela vadit.. jdu to zkusit :o)

- jan.vince
 - Člen | 8
 
Řešil jsem taky překlad adres pro různé jazyky, ale protože mám jen CS/EN a menu s pár položkami, chtěl jsem (zkusit) kód udržet v RouterFactory.
Potřebuji adresy:
- /kontakt
 - /en/contact
 
		$router[] = new Route('<lang en>/<presenter>/<action>', array(
				'module' => 'Front',
				'presenter' => array(
						Route::VALUE => 'Homepage',
						Route::FILTER_TABLE => array(
								'contact' => 'Kontakt',
								'about' => 'Omne',
								'home' => 'Homepage',
						)),
				'action' => 'default',
				'lang' => NULL
		));
		$router[] = new Route('[<lang [a-z]{2}>/]<presenter>/<action>', array(
				'module' => 'Front',
				'presenter' => 'Homepage',
				'action' => 'default',
				'lang' => 'cs'
		));
Pro obsáhlejší menu by byl lepší překlad přes Translator, pro víc jazyků určitě Routování s více parametry.