我想用与字符串数组或正则表达式匹配的语言开始所有的url
FROM python:2.7
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
WORKDIR /app
RUN apt-get update
RUN pip install --upgrade pip
RUN apt-get update && \
apt-get -y install sudo
ADD ./requirements.txt ./requirements.txt
RUN pip install -r requirements.txt
ADD . /app
RUN cd ./A && ./install.sh
ENV WEB_CONCURRENCY 5
CMD gunicorn app:app
或const languages = ['nl', 'en', 'de', 'fr']
我的routeConfig如下
const languageRegex = /(nl|en|de|fr)/g
可惜这没用,我认为这是一个易于阅读的配置:
const appRoutes: Routes = [
{
path: '',
pathMatch: 'full',
redirectTo: 'en/configuration',
},
{
children: [
{ path: '', pathMatch: 'full', redirectTo: 'configuration' },
{
loadChildren:
'../modules/booking-flow/configuration.module#ConfigurationModule',
path: RouteHelper.paths.configuration,
},
{
loadChildren:
'../modules/booking-flow/personal-info.module#PersonalInfoModule',
path: RouteHelper.paths.personalInfo,
},
{
loadChildren:
'../modules/booking-flow/summary.module#SummaryModule',
path: RouteHelper.paths.summary,
},
{
loadChildren:
'../modules/booking-flow/payment-method.module#PaymentMethodModule',
path: RouteHelper.paths.paymentMethod,
},
{
loadChildren:
'../modules/booking-flow/confirmation.module#ConfirmationModule',
path: RouteHelper.paths.confirmation,
},
{
component: ErrorPageComponent,
path: RouteHelper.paths.errorNotFound,
},
{
path: '**',
pathMatch: 'full',
redirectTo: RouteHelper.paths.errorNotFound,
},
],
component: null,
path: ':language',
runGuardsAndResolvers: 'always',
},
];
我想要以下模式。
path: ':language(/nl|en|de|fr/g)',
重定向到/
作品/en/configuration
重定向到/nl
作品/nl/configuration
重定向到/es
无效404
重定向到/es/configuration
无效404
重定向到/en/invalid
作品答案 0 :(得分:1)
因此,正如我所看到的,仅通过路由器配置就无法实现这一点,它没有这种功能。相反,您可以使用 RouteGuard 检查language
中是否包含['nl', 'en', 'de', 'fr']
参数,如果不是,则可以返回 UrlTree (在找不到页面的情况(角度7.1+的情况),或使用 router (角度<= 7.1)手动重定向用户 。
const allowedLanguages = ['nl', 'en', 'de', 'fr'];
@Injectable({
providedIn: 'root'
})
export class LanguageGuard implements CanActivate {
constructor(private router: Router) {}
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return this.next.params.pipe(
map(params => {
return params && allowedLanguages.includes(params.language)
? true
: this.router.parseUrl(RouteHelper.paths.errorNotFound)
})
);
}
}
然后,您只需要将此保护措施应用于您的父路线即可。希望有帮助。
答案 1 :(得分:0)
我认为有更好的方法来解决您的问题;如果确实您的问题与应用程序中支持不同语言有关。
ngx-translate是一个受支持的知名/文档化库,可让您轻松进行国际化应用程序。
该库允许您提供应用程序支持的语言,在该库中,您将根据所支持的语言提供JSON文件,其中包含所需的正确语言翻译。
它们看起来像这样:
{
"title": "My title"
}
该库提供了管道,指令,可以在HTML中使用如下代码:
<span translate>title</span>
<span> {{ 'title' | translate }}</span>
两者都将在span元素内呈现My Title
-。
该库允许您执行更多操作,例如参数插值-您可以在其中将动态值传递给翻译。它还为您提供在代码中进行翻译的服务。