You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ngx Translate资源读取异常:请求8080而非默认localhost:4200/assets

问题根因

问题出在全局注册的AuthInterceptor拦截器逻辑:该拦截器对所有通过HttpClient发起的请求无差别拼接了environment.baseUrl前缀(即http://localhost:8080),而Ngx Translate拉取翻译文件的请求本质也是走HttpClient发送的相对路径请求/assets/i18n/{lang}.json,所以被强制修改为指向8080端口的地址。
其他同environment配置的项目未出现该问题,是因为这类项目的拦截器普遍做了静态资源路径过滤,不会修改本地资源请求地址。

修复方案

提供两种可落地的修复方式,二选一即可:

方案1:修改拦截器逻辑,过滤静态资源请求(更推荐)

在拦截器拼接baseUrl前,先判断请求是否属于本地静态资源,匹配到/assets/路径的请求直接放行不修改地址:

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
  // 新增过滤逻辑:本地静态资源请求不拼接baseUrl
  if (req.url.startsWith('/assets/')) {
    return next.handle(req);
  }
  // 原有逻辑保留
  const authReq = req.clone({
    url: environment.baseUrl + req.url,
    headers: req.headers.set('Authorization', SessionService.getToken())
  });
  return next.handle(authReq)
    .pipe(
      tap(event => {}, err => {
        if (err instanceof HttpErrorResponse && (err.status === 401 || err.status === 403)) {
          this.loginService.logout();
        }
      })
    );
}

如果后续还有其他不需要拼接后端地址的请求,也可以把路径加到过滤规则里。

方案2:给Ngx Translate显式指定完整资源路径

初始化TranslateHttpLoader时直接传入完整的本地资源前缀,避免被拦截器修改后路径异常:
修改APP MODULE里的HttpLoaderFactory逻辑:

export function HttpLoaderFactory(httpClient: HttpClient) {
  // 显式指定资源路径,第二个参数是前缀,第三个是文件后缀
  return new TranslateHttpLoader(httpClient, '/assets/i18n/', '.json');
}

内容的提问来源于stack exchange,提问作者Rod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:48:00