我使用ngx-translate在我的Angular应用程序,即使你的翻译工作,我只有3种语言的翻译(en-CA, pt-BR, en-US). 这就是我如何设置语言的:

const defaultLanguage = translate.getBrowserCultureLang();
translate.setDefaultLang(defaultLanguage);

问题是,浏览器的区域性语言设置为"fr-CA"例如,我得到404 error,表示找不到fr-CA.json文件.这是正确的,因为该文件不存在.有没有办法不要那个404?或者我必须每single language and culture个就有一个文件?

推荐答案

我认为你必须实现一个定制TranslateLoader,就像这GitHub issue中提到的那样.

LazyTranslateLoader将发送获取当前语言的JSON文件的请求.如果返回的响应不成功,它将获取默认语言的JSON文件.

import { TranslateHttpLoader } from '@ngx-translate/http-loader';
import { Observable } from 'rxjs';
import { catchError } from 'rxjs/operators';

export const DEFAULT_LANG = 'en-US';
export class LazyTranslateLoader implements TranslateLoader {
  constructor(private http: HttpClient) {}

  getTranslation(lang: string): Observable<any> {
    return this.http
      .get(`/assets/i18n/${lang}.json`)
      .pipe(
        catchError(() => this.http.get(`/assets/i18n/${DEFAULT_LANG}.json`))
      );
  }
}

接下来,在配置中为根模块中的TranslateModule提供LazyTranslateLoader.

@NgModule({
  // ...,
  imports: [
    // ...,
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useClass: LazyTranslateLoader,
        deps: [HttpClient],
      },
    }),
  ]
})
export class AppModule {}

Demo @ StackBlitz


Reference

Write & use your own loader

Angular相关问答推荐

使Angular 效果只执行一次

尾风手风琴中的Ngor

在不使用散列(#)路由的情况下刷新Angular 8的SPA时,删除404错误

茉莉花-模板中调用了如何判断角管

Component RegisterComponent模板出现Angular 错误

出错后可观察到的重用

完成行为主体

没有调用订阅的原因是什么?

Angular 重新渲染仅使用ngrx在表中更改的行

Angular:组件的内容投影访问数据

无法将项目从 Angular 13 更新到 14

尽管模型中的变量发生了变化,但Angular 视图没有更新

RxJS - .withLatestFrom 的多个来源

无法读取 angular2 中未定义(…)的属性 push

样式 html,来自 Web 组件的正文

错误:angular2 中没有 HttpHandler 的提供者

没有 ChildrenOutletContexts 的提供者 (injectionError)

ng add 与 npm install 在 Angular 6 中的区别

如何在 Angular 2 中跟踪路由?

路由 getCurrentNavigation 始终返回 null