Přepnutí jazyka v jakékoliv fázi

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

Asi mi nedochází něco co je jasné, ale nechápu jak nastavit jazyk v aplikaci, v basepresenteru jsem si deklaroval persistentní proměnou $lang, ale nevím jak ji nastavit. Jde o to že potřebuji v jakékoliv fázi aplikace přepnou jazyk. Do šablony jsem myslel že napíšu něco jako {link this, array(‚lang‘ = ‚cs‘)} ale to bych musel do vsech action přidat parametr $lang, což mi přijde poměrně pracné. Nevítě někdo co s tím? Díky

Jan Tvrdík
Nette guru | 2595
+
0
-

Máš proměnnou $lang definovanou jako persistentní?

joseff
Člen | 233
+
0
-

To sice mám, ale na to jsem se vůbec neptal, jde o to že když to definuji jak jsem psal, tak se bude do každé action strkat parametr $lang, což by znamenalo přepsat všechny action. Snad jsem to napsal jasně, pokud ne jěště mě nakopněte …

joseff
Člen | 233
+
0
-

ještě to upřesním, když tam přidám tento parametr a zavolám nějakou action bez parametru, tak se lang předá do action jako parametr, což nechci. Pak se link přehození jazyka promění v toto:

error: Passed more parameters than method HomepagePresenter::actionDefault() expects.

joseff
Člen | 233
+
0
-

Ha, tak si odpovím, chybu jsem odstranil tím, že jsem místo:

{link this, array(‚lang‘ = ‚cs‘)}

napsal

{link this, 'lang'=>'cs'}

Sice moc nevím proč, ale zabralo to :-)
Co mi ale ještě není jasné je jak z url nastavím proměnou do presenteru. Jinými slovy jak mám přistoupit k proměné definované v url? Mám ji nastavit normálně $this->lang = $_GET[‚lang‘]? A bude to fungovat i potom co si přepíšu routy? Diky za rady !!!

Nox
Člen | 378
+
0
-

Presenter dědí metodu getParam($name), takže asi tak… ale přesněji imho ne „definované v url,“ ale v routě
(a ještě je getPersistentParams())
víc na https://api.nette.org/…mponent.html#…

Jinak pokud je persistentní, tak se naplní sama, ne?

Editoval Nox (1. 1. 2011 22:08)

Foowie
Člen | 269
+
0
-

Pokud máš proměnnou definovanou jako

@persistent
public $lang;

tak v presenteru normálně přistupuj $this->lang