Multijazyčnosť – neprenášavosť persistentu

- iNviNho
 - Člen | 352
 
Našiel som zopár už založených tém ako sfunkčiť prepínanie
viacerých jazykov avšak stále nedokážem vyriešiť svoj problém: Ak sa
prepnem napr. na SK alebo CZ jazyk(alebo EN), routa sa mi pekne zmení na:
http://localhost/…-informacie/
http://localhost/…-informacie/
Akonáhle sa však prepnem na hocijakú inú stránku, routa sa hned zmení
napr. na
http://localhost/…ww/en/profil
Resp. hocikde sa prepnem, jazyk sa mení na en… Neostáva mnou zvoleny lang
routerfactory.php
<?php
Route::addStyle('lang', NULL);
		Route::setStyleProperty('lang', Route::PATTERN, '[a-z0-9]{1,3}');
		$router = new RouteList();
		$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
		$router[] = new Route('<lang>/<presenter>/<action>/<id>', array(
			    'presenter' => 'Homepage',
			    'action' => 'default',
			    'id' => 1
			    ));
		$router[] = new Route('<presenter>/<action>/<id>', array(
		    'lang' => NULL,
                     'presenter' => 'Homepage',
                        'action' => 'default',
			'id' => 1
			    ), Route::ONE_WAY);
		return $router;
?>
Base presenter
<?php
/** @persistent */
    public $lang;
    protected $nasobic;
    protected $prekladac;
    public function startup() {
        parent::startup();
	if (!isset($this->lang))
        {
            $this->lang = $this->getHttpRequest()->detectLanguage(array('sk', 'cz', 'en'));
            $this->canonicalize();
        }
    }
?>
Napadá ma riešenie spraviť form kde si vyberie jazyk. On submit vložim do tabulky jeho id a predvoleny jazyk a v routry spraviť prislušne query.
Má to tak byť ako si myslím, alebo niekde robim chybu a ten persistentny parameter by mal byť niekde uložený?
Ďakujem!

- Oli
 - Člen | 1215
 
Napadá mě: zkoušel jsi co ti vrátí v presenteru
$this->lang? Pokud by jsi ho nikde nenastavoval nebo by sis ho
někde zrušil a měl prostředí v en, tak ti to přepne do en.
Já to používám zhruba takhle a funguje mi to:
// šablona:
{if $lang == "cs"}
	<a n:href="this, lang => en">ENG</a>
{else}
	<a n:href="this, lang => cs">CZ</a>
{/if}
// presenter
/** @persistent */
public $lang;
public function beforeRender() {
	parent::beforeRender();
	$this->template->lang = $this->lang;
}
// router
return new Route('[<lang [a-z]{2}(?<!cs)>/]<presenter>[/<action>]', array(
	'lang' => 'cs',
	'presenter' => 'Homepage',
	'action' => 'default'
));
					Editoval Oli (30. 6. 2013 16:16)

- iNviNho
 - Člen | 352
 
Tak vyskúšal som tvoje riešenie.
Ono v základe funguje. Ak sa prepnem do ENG, tak sa zmení jazyk na ENG. Akonáhle však sa zase niekde inde prepnem, jazyk sa hodí naspať na CZ …
Môžeš sa na to pozrieť tu → http://ekotrim.sk/sandbox/www/
Ďakujem za hocijakú pomoc

- Oli
 - Člen | 1215
 
Jak vytváříš ty odkazy? Tobě se generujou odkazy pořád v sk. Odkazy (aspoň já) vytvářím takhle a to mi funguje:
<a n:href="Kategoria:produkty $id">kategoria $id</a>
Zkus si ještě dumpnout třeba v beforerender co ti vrací ten atribut
$this->lang. Mě přijde, že si ho někde přenastavuješ a proto ti vrací
pořád jen sk verzi (kromě situace, kdy to přepneš
tím <a n:href="this, lang => en">

- iNviNho
 - Člen | 352
 
Super!
Tak som zistil, že som to mal dobre aj predtým aj tvoje riešenie mi funguje… tie kategorie implementoval kamarát a nelinkoval to cez n:makra, preto to nemalo moc nádej na fungovanie.. :) akonahle napr prihlaseny uživatel si niečo robí, tak prepinanie funguje správne, lebo to som robil ja …
Ďakujem ešte raz, done
Editoval iNviNho (3. 7. 2013 19:28)