Kdyby/Translation ( session, locale )

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

Zdravím,

doufám, že tu popíšu správně a srozumitelně můj problém a snad se nebudu opakovat, ale zatím jsem toto nenašel.

neon

<?php
translation:
	default: cs
	whitelist: [cs, en, de] #....
	fallback: [cs_CZ, cs]
	resolvers:
		session: on
		request: on
		header: on
?>

router např.

<?php
$router[] = new Route('[!<locale=cs cs|en|de>/]<presenter>/<action>[/<id>]', 'View:Homepage:default');
?>

vše funguje bez problému :-) ale jedna vada na kráse mi trošičku vadí

pokud změním na stránkách jazyk např. na „de“ zavřu stránky a znova najedu na defaultní stránku tak URL má „cs“ ale jazyk je v „de“. Vím, že si to pamatuje to je správně, ale chtěl bych aby se URL změnilo taky dle jazyka v session ;-)

tak snad mi někdo bude rozumět :-)

jinak moc díky za pomoc

Filip Procházka
Moderator | 4668
+
0
-

V base presenteru v metodě startup si udělej přesměrování, které to vyřeší. Ale dávej bacha ať nepřesměrovávaš ikdyž uživatel volá signál na změnu jazyka, jinak nepůjde nikdy změnit :)

stulda
Člen | 8
+
0
-

jsem tak trochu začátečník a tak jsem to vyřešil tím to :-)

<?php
    public function beforeRender() {

        $ses = $this->translator->translate('front.home.lang');
        $loc = $this->locale;

        //dump($ses);
        //dump($loc);


        if ($ses <> $loc) {
            $this->translatorSession->setLocale($ses);
            $this->redirect('this', array('locale' => $ses));
        }
    }
?>
Filip Procházka
Moderator | 4668
+
0
-

Do beforeRender to nepatří, říkal jsem ti startup :) A jazyk translatoru můžeš získat i pomocí $this->translator->getLocale()

stulda
Člen | 8
+
0
-

OK, mám to ve startupu, ale nevím si rady s tímto :-(
„Ale dávej bacha ať nepřesměrovávaš ikdyž uživatel volá signál na změnu jazyka, jinak nepůjde nikdy změnit“

<?php
	function startup() {
        parent::startup();

        $this->checkAuth();

        $ses = $this->translator->getLocale();
        $loc = $this->locale;

        if ($ses <> $loc) {
            $this->translatorSession->setLocale($ses);
            $this->redirect('this', array('locale' => $ses));
        }
    }
?>
Aurielle
Člen | 1281
+
0
-
if ($ses !== $loc && !($this->signal && empty($this->signal[0]) && $this->signal[1] === 'jmenoSignaluNaZmenuJazyka')) {
	// kod na presmerovani
}

Tu podmínku jsem možná napsal trošičku divně, jde o to, že musíš kontrolovat neprázdnost $this->signal, což je v případě volání signálu pole, v prvním prvku je název komponenty (nebo prázdný, pokud voláš přímo na presenteru), v druhém pak název signálu bez vykřičníku.