viacjazycne routovanie s identifikatorom jazyka
- pogo
- Člen | 29
Zdravim,
viem, ze tato tema tu bola riesena viackrat, ale vacsinou narazim na stare
vlakna alebo nie uplne vyriesene.
Co potrebujem:
potrebujem alternativne url, napr.:
example.com/kontakt
⇒ example.com/en/contact
example.com/o-nas
⇒ example.com/en/about-us
tzn. slovenske bez jazyka v url a anglicke s jazykom. Toto samo o sebe uz
mam rozchodene, problem je ale n:href
makro chcel by
som takto:
<a n:href="articles:view contact">
vygeneruje /en/contact
, pokial som na anglickej verzii (url
obsahuje /en/
), inak /kontakt
. Zaroven by som chcel
vediet prepnut jazyk tak, aby som ostal na tej istej stranke, len mi prehodilo
jazyk, tzn. kliknem na linku a refreshne stranku z /en/contact
na
/konktakt
.
Momentalne to vyzera nejak takto:
$router[] = new TranslationRoute('[<lang [a-z]{2}>/]<id>');
A moja TranslationRoute:
...
public function __construct($mask, $metadata = array(), $flags = 0)
{
$metadata = array(
'presenter' => 'articles',
'action' => 'view',
'id' => array(
//preto callbacky v tejto triede, aby som mal pristup k jazyku
Route::FILTER_IN => $this->filterIn,
Route::FILTER_OUT => $this->filterOut,
'home'
),
'lang' => 'sk',
);
parent::__construct($mask, $metadata, $flags);
}
...
public function match(Nette\Http\IRequest $httpRequest)
{
$request = parent::match($httpRequest);
//tu si ten jazyk vytiahnem a ulozim
$this->params = $request->getParameters();
return $request;
}
...
public function filterOut($uri)
{
if (isset($this->params['lang'])) {
//$this->articles je len prekladova tabulka
if (isset($this->articles[$uri][$this->params['lang']])) {
return $this->articles[$uri][$this->params['lang']];
}
}
return $uri;
}
Toto funguje, len generuje URL bez /en/
, pokial som na anglickej
verzii. Samotny kod sa mi vsak nepaci a vyzera to skor ako iba ohackovanie,
avsak tak na mna posobi aj tento
navod :(
Pride mi to ako vcelku bezna zalezitost, ako to riesite vy? Diky moc!