2017-10-05 75 views
0

我正在使用角4的原生路由和国际化国际化工作。我遇到的问题是当用户在不是主要路由的路由上切换语言时。应用程序的这部分内容像foo.com/admin/那样访问,当我们在那里抛出一种语言时,该应用程序重新加载到foo.com/admin/es/。如果这是从诸如foo.com/admin/settings之类的路由完成的,则问题是应用程序将重新加载到该语言,但结果将是消息Cannot get admin/es/settingsAngular 4国际化和路由

可以避免的唯一方法是让用户在主路线上更改语言。我知道这种情况的变化可能是最小的,但我觉得我们没有正确使用路线,因为我一直在利用儿童路线为我们的路线提供更好的结构。我非常熟悉AngularJS和ui.router中的儿童路线。

所以我真的可以分为两部分: 1.我们的路由和国际化如何协同工作? 2.我们如何为我们的路线实现更好的结构? a。 Angular 2的ui.router会是更好的选择吗? (我真的推动这一点,但我还没试过ui.router和角CLI)

当前路由映射:

  • foo.com/admin
    • /用户
    • /邀请
    • /设置
    • /出版物添加
    • /出版物引用
    • /出版物读取
    • /出版物-观察
    • /库的视图

期望溃败映射:

  • FO。COM /管理
    • /用户
      • /邀请
    • /设置
    • /分析
      • /出版物添加
      • /出版物引用
      • /出版物 - 阅读
      • /出版物,看
      • /库视图

路由: { path: '', component: BaseComponent, resolve: { user: UserService }, children: [ { path: '', component: AdminUserComponent, canActivate: [AdminUserGuard] }, { path: 'invite', component: AdminInviteComponent, canActivate: [AdminUserGuard] }, { path: 'settings', component: AdminSettingsComponent, canActivate: [AdminUserGuard] }, { path: 'publications-added', component: AdminAnalyticsComponent, canActivate: [AdminUserGuard] }, { path: 'publications-cited', component: AdminAnalyticsComponent, canActivate: [AdminUserGuard] }, { path: 'publications-read', component: AdminAnalyticsComponent, canActivate: [AdminUserGuard] }, { path: 'publications-viewed', component: AdminAnalyticsComponent, canActivate: [AdminUserGuard] }, { path: 'library-views', component: AdminAnalyticsComponent, canActivate: [AdminUserGuard] }, { path: 'analytics', redirectTo: 'publications-added', pathMatch: 'full' } ] }

回答

0
export const routes: Routes = [ 
    { 
     path: '', 
     redirectTo: 'main', 
     pathMatch: 'full', 
    }, 
    { 
     path: '', 
     component: FirstLayoutComponent, 
     children: [ 
      { 
       path: '', 
       loadChildren: './main/main.module#MainModule' 
      } 
     ] 
    }, 
    { 
     path: 'en', 
     component: SecondLayoutComponent, // for your language settings 
     children: [ 
      { 
       path: '', 
       loadChildren: './main/main.module#MainModule' 
      } 
     ] 
    }, 
    {path: '404', component: p404Component}, 
    {path: '**', component: p404Component} 
]; 

而且MainModule都会有自己的路线。

+0

我会稍微尝试一下。谢谢德米特里! – Scott

0

事实证明,我的问题的真正解决方案是角度4使用的默认路由策略。通过切换到HashLocationStrategy,这解决了这个问题。

但是,德米特里的建议不适用于我的情况,因为英语是我们的默认语言,并且它不会构建在其自己的语言目录中。如果我们这样设置它,那么这将是一个可行的解决方案。谢谢德米特里!