Kdyby/Translation ( session, locale )
- stulda
- Člen | 8
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
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
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
Do beforeRender
to nepatří, říkal jsem ti
startup
:) A jazyk translatoru můžeš získat
i pomocí $this->translator->getLocale()
- stulda
- Člen | 8
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
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.