Jak zjistit jazyk v routeru?

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

Zdravim,
lze nějak jednoduše zjistit, jaký jazyk uživatel požaduje?
Adresy mám ve formátu /jazyk/presenter/akce
Dík

vvoody
Člen | 910
+
0
-

Načo potrebuješ zistiť jazyk v routeru?

CZechBoY
Člen | 3608
+
0
-

abych mohl vygenerovat adresu podle jazyku

h4kuna
Backer | 740
+
0
-

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)

CZechBoY
Člen | 3608
+
0
-

díky za odpověď
jsem v nette začátečník a vůbec nevím jak to mám udělat, mohl bys mě trochu nakopnout?

h4kuna
Backer | 740
+
0
-

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)

CZechBoY
Člen | 3608
+
0
-

nakonec se to vyřešilo přes specifikaci jazyku…
jen mě ještě zajímá proč se mi vygeneruje adresa ve formátu cs/aktuality/filter/?category_id=0 a po kliknutí na odkaz se to přesměruje na cs/aktuality/?filter[0]=0 a id se nepředá :(

danik
Člen | 56
+
0
-

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
+
0
-

Ř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.