切换多语言时路由重复追加路径而非替换语言标识如何解决
问题原因
你的代码存在两处问题,直接导致路由重复追加:
- 基础语法错误:
chooseLanguage函数定义时形参位置直接写了固定值'he',函数内部调用this.translate.use(lng)和this.localize.changeLanguage(lng)时,lng变量实际未定义,会触发取值异常。 - 核心逻辑错误:直接仅传语言参数调用
localize.changeLanguage(lng)时,localize-router库内部默认会读取当前完整路由路径做拼接,但不会自动剥离已拼接的业务路由段,最终导致路径重复追加。
修复方案
- 补充缺失的路由依赖注入
首先在构造函数中注入Angular原生的Router服务,用于获取当前纯净路由路径:
constructor( public translate: TranslateService, private localize: LocalizeRouterService, private router: Router ){}
- 修正语言切换方法的实现
修正函数参数定义,切换语言时手动提取当前路径中不含语言前缀的业务路由段,作为第二个参数传入changeLanguage,禁止库内部自动拼接错误路径:
chooseLanguage(lng: string) { this.translate.use(lng); // 拆分当前url,剥离开头的语言前缀段,拿到纯业务路由 const pureRoute = this.router.url.split('/').slice(2).join('/'); // 传入目标语言和正确的业务路由,完成跳转 this.localize.changeLanguage(lng, pureRoute || '/'); }
额外排查点
如果改完还是出现重复问题,检查LocalizeRouterModule.forRoot()的配置项:
- 确保
supportedLanguages数组中同时包含en、he两个语言标识 - 确保没有手动配置错误的
prefix参数,默认前缀参数为/即可 - 如果你开启了路由翻译(即不同语言下路由路径不同,比如英文是
about-us,希伯来文是对应本地化路径),需要确保localize-router的路由翻译配置文件正确加载,否则库解析路由时会识别失败,触发重复拼接。
内容的提问来源于stack exchange,提问作者Sheikh
相关产品推荐
相关产品推荐

