Překlady v routách na základě jazyka
- Jiří Nápravník
- Člen | 710
Mám takovouhle routu:
$frontList[] = new Route('//[<locale=en [a-z]*>.]' . $serverName . '/search/<query>', 'Search:default');
je možné nějak dosáhnout toho, abych to slůvko „search“ přeložil vždy podle jazyka – ideálně za použití Kdyby\Translation. Definuju tyhle routy v CompilerExtension, je to možné?
- MartinitCZ
- Člen | 580
Viz dokumentace.
https://doc.nette.org/…tion/routing#…
Předat si Kdyby translator do routy není problém. ;)
- Jiří Nápravník
- Člen | 710
@MartinitCZ pro mě je to problém, předat si Kdyby translator do routy, protože jak jsem psal, tak definuji routy v Compiler extension, tak jej tam nemohu nejak injectovat ci pod.
@xificurk jenze tady nejde o parametr, ale je to to fixni (resp. slovicko pro preklad) „search“, kdybych to udelal jako parametr, tak by zase byl problem asi s jinymi routami, ktere maji v sobe jine sluvko takhle oddelujici ne?
- xificurk
- Člen | 121
Aha, já jsem přehlíd, že to momentálně nemáš jako parametr… Ale na principu to nic nemění. Udělej z toho parametr. V IN filtru zkontroluješ, že jsi dostal správný řetězec (tj. že sedí překlad podle nastaveného jazyka) – pokud ano, můžeš ho z pole parametrů odstranit, pokud ne, tak routu odmítneš vrácením NULL. V OUT filtru podle nastaveného jazyka naopak doplníš do pole parametrů správný překlad.
- Filip Procházka
- Moderator | 4668
@JiříNápravník a nebylo by lepší je definovat v nějaké factory a tu mít jako službu? Jako to dělá sandbox? Já bych řekl, že určitě :)
- Jiří Nápravník
- Člen | 710
Mám aplikaci rozdělenou na více samostatnějších modulů a každý přidává svoje routy… Využívám Flame\Modules
- Tomáš Votruba
- Moderator | 1114
@JiříNápravník Vyuzij muj PR a prislusny bug nahlas na Nette\Routing, jak jsem psal.
Jeste lepsi je jak pise @FilipProcházka vlastni factory. Tam si muzes predat jake chces sluzby. Otagovat a pridat k routery, tim padem ti zustane modularita.
- Jiří Nápravník
- Člen | 710
@TomášVotruba Issue jsem zalozil. Muzes me nakopnout nejak lepe s tou factory. Asi to prilis nechapu. Mel jsem za to, ze router laa factory, mohu mit proste jen jednu v cele aplikaci, coz u modularity nejde…
- Zdeno1981
- Člen | 115
@JiříNápravník právě že jde, já to mám takhle řešené u své modulární aplikaci, nápovědu najdeš tady https://forum.nette.org/…-pro-service
a kdyby jsi potřeboval předat nějaký parametr k routě, tak třeba takhle
services:
front.router: @front.routerFactory::createRouter(parm1, parm2...)
- Tomáš Votruba
- Moderator | 1114
@JiříNápravník Přidal jsem tuto možnost do PR k Flame\Modules, čekni commit.
Použití je prosté:
services:
-
class: App\CoreModule\Routing\RouterFactory
tags: [flame.modules.router]
Formát typický pro routerFactory