Routování jazykových URL do více jazuků
- Laupe
- Člen | 2
Ahoj všem,
chtěl bych od Vás radu.
Rozjel jsem si překladač nette kdyby/translation a potřebuji to samé aplikovat na routování. tj. aby URL v cs jazyce byli české tj. překládalo to na anglické presentery a v angličtině to ponechalo tak jak to je a v němčině to opět udělalo jiné url adresy.
jako základní routu jsem použil toto
$router[] = new Route('<locale=cs cs|en|de>/<presenter>/<action>[/<id>]', 'Homepage:default');
což mě funguje a pak jsem tedy chtěl udělat překlad URL a chtěl jsem aby to platilo jen pro cs a to takto:
$router[] = new Route('<locale=cs cs|en|de>/<presenter>/<action>[/<id>]', [
'presenter' => array(
Route::VALUE => 'Homepage',
Route::FILTER_TABLE => array(
'clanek' => 'Post',
),
),
'action' => array(
Route::VALUE => 'default',
Route::FILTER_TABLE => array(
'upravit' => 'edit',
),
),
'id' => NULL,
]);
bohužel mě to přeloží routu i v angličtině. snažil jsem se upravit ten první parametr v URL a na to jsem moc nepřišel
zkoušel jsem
$router[] = new Route('cs/<presenter>/<action>[/<id>]', [
chtěl jsem mít obecnou routu na jazyky a pak upravit překlady. Jak na to?
Děkuji za každou radu ;)
Editoval Laupe (10. 6. 2016 11:57)
- Jan Mikeš
- Člen | 771
Ahoj, to co budeš potřebovat je, překlad <presenter>
a
<action>
v závislosti na parametru
<locale>
.
Jednoduchá možnost je, rozdělit si to do 3 rout, dle jazyka a řešit si překlady tam.
Pokud chceš mít jen jednu routu, lze toho docílit za využití tzv. globálního filtru kde si zkontroluješ jakou hodnotu má locale a na základě toho budeš upravovat ostatní parametry.
- Laupe
- Člen | 2
Děkuji moc za nakopnutí.
Pokud jsem to dobře pochopil, tak FILTER_IN se používá na překlad URL na routu a FILTER_OUT na překlad rout na URL do šablon apod?
napsal sem to zatím jednoduše takto:
$router[] = new Route('<locale=cs cs|en|de>/<presenter>/<action>[/<id>]', [
'presenter' => 'Homepage',
'action' => 'default',
NULL => [
Route::FILTER_IN => function (array $params) {
if ($params['locale'] == 'cs') {
if ($params['presenter'] == 'Clanek') {
$params['presenter'] = 'Post';
switch ($params['action']) {
case 'detail';
$params['action'] = 'show';
break;
case 'upravit':
$params['action'] = 'edit';
break;
}
}
}
return $params;
},
Route::FILTER_OUT => function (array $params) {
if ($params['locale'] == 'cs') {
if ($params['presenter'] == 'Post') {
$params['presenter'] = 'Clanek';
switch ($params['action']) {
case 'show';
$params['action'] = 'detail';
break;
case 'edit':
$params['action'] = 'upravit';
break;
}
}
}
return $params;
},
],
]);
a zeptám se… jde to nějak zjednodušit přes kdyby/translation, které tam mám implementované? třeba pokud máš nějaký příklad tak to asi nejvíce pomůže.
Děkuji