Multijazyčnosť – neprenášavosť persistentu

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

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

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

Ďakujem za odpoveď, vyskúšam si to dneska a dám vedieť:))

iNviNho
Člen | 352
+
0
-

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

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

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)