Я хочу найти язык в моей службе маршрутизации.Моя проблема в том, что язык должен быть первым в моем маршруте.
Например:
/ en / xxx
/ fr / xxx
/ru / yyy
/ fr / yyy
Поскольку я хочу использовать этот параметр, я добавил следующий маршрут
{ path: ':lang', children: [
{path: '', redirectTo: 'xxx', pathMatch: 'full'},
{path: 'xxx', component: x},
{path: 'yyy', component: y}
]}
Проблема в том, что все совпадает: lang.
Например:
/ abc / xxx
Я хотел бы добавить к этому ограничения, чтобы я мог сказать, что: lang может быть только типа <'nl'|'fr' |'en' |'de'>.
Теперь, когда я хочу перейти в /robots.txt (который должен показать мне файл robots.txt), он отображается на: lang и отправляет меня в "/robots.txt/xxx"
Я попытался сопоставить каждый язык отдельно, но у меня нет доступа к параметру маршрута.
Я попытался добавить файл robots.txt выше, но так как это файл ресурсов, я нене знаю, как показать это, добавив строку в файл rout.ts.
Я попытался добавить исключение в охрану маршрута, но затем я не могу перенаправить в robots.txt, так как он просто отображаетв параметре: lang.
Это мой текущий файл rout.ts:
{path: '', redirectTo: '/xxx', pathMatch: 'full', canActivate: [LangGuard]},
{path: 'xxx', component: xxx, canActivate: [LangGuard]},
{path: 'yyy', component: yyy, canActivate: [LangGuard]},
{ path: ':lang', canActivate: [LangGuard], children: [
{path: '', redirectTo: 'xxx', pathMatch: 'full'},
{path: 'xxx', component: x},
{path: 'yyy', component: y}
]}
Мой LangGuard довольно обширный, но плохо записывает короткую версию:
Get route parameters
If parameter is "nl", "fr", "de" or "en"
then return true //do nothing
else router.navigate('/' + decideLanguage() + state.url) // redirect to new url
Может быть, небольшой обзор того, чего я хочу достичь и что я получаю:
Что я хочу
/ -> /en/xxx
/abc -> /en/xxx
/xxx -> /en/xxx
/yyy -> /en/yyy
/en/xxx -> ok
/fr/xxx -> ok
/de/xxx -> ok
/en/abc -> notfound
/abc/xxx -> notfound
/abc/yyy -> notfound
/robots.txt -> ok
Что у меня есть
/ -> /en/xxx
/abc -> /en/xxx
/xxx -> /en/xxx
/yyy -> /en/yyy
/en/xxx -> ok
/fr/xxx -> ok
/de/xxx -> ok
/en/abc -> notfound
/abc/xxx -> ok (WRONG)
/abc/yyy -> ok (WRONG)
/robots.txt -> /robots.txt/xxx (WRONG)
ПРИМЕЧАНИЕ:Я не могу использовать redirectTo для языка, потому что язык выбран в соответствии с местным хранилищем, поэтому я используюхранитель маршрута
Если мне нужно добавить дополнительную информацию или у вас есть вопросы, не стесняйтесь их задавать, и я отвечу на них в меру своих возможностей.
Спасибо