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)