Překlady v routách na základě jazyka

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jiří Nápravník
Člen | 710
+
0
-

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
+
0
-

Viz dokumentace.
https://doc.nette.org/…tion/routing#…

Předat si Kdyby translator do routy není problém. ;)

xificurk
Člen | 121
+
0
-

Je potřeba vytvořit globální filter, který dostane jako argument všechny parametry, a tam pak udělat překlad nebo vrátit NULL pro odmítnutí routy.

Jiří Nápravník
Člen | 710
+
0
-

@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
+
0
-

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
+
0
-

@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
+
0
-

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
+
0
-

@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
+
0
-

@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
+
0
-

@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
+
0
-

@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