簡體   English   中英

ngx-translate - 檢查翻譯文件是否可用

[英]ngx-translate - check if translation file is available

如何使用 ngx-translate 檢查從navigator.language獲得的結果是否有翻譯文件可用?

我想做類似的事情:

if( checkLanguageAvailable (navigator.language)) {
 this.translate.use( navigator.language );
} else {
 this.translate.use( 'en' ); //Default fall back
}

您可以使用 ngx-translate 的 getLangs() 方法來獲取可用語言的列表:

@Component({ ... })
export class MyController {
  constructor(private translate: TranslateService) {}

  checkLanguageAvailable(lang: string): boolean {
    return this.translate.getLangs().includes(lang);
  }
}

您可以在使用之前檢查文件是否存在(制作 http.get,但這會加載文件...)

或使用missingTranslationHandler ,例如: app.module.ts

import ...

export function HttpLoaderFactory(httpClient: HttpClient) {
  return new TranslateHttpLoader(httpClient, 'assets/i18n/', '.json');
}

@NgModule({
  imports: [
    ...
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: (HttpLoaderFactory),
        deps: [HttpClient]
      },
      isolate: true,
      missingTranslationHandler: [{provide: MissingTranslationHandler, useClass: TranslateHandler}]
    }),
    SimpleNotificationsModule.forRoot()
  ],
...

翻譯處理程序

import {MissingTranslationHandler, MissingTranslationHandlerParams} from '@ngx-translate/core';

export class TranslateHandler implements MissingTranslationHandler {
  private response: String;
  handle(params: MissingTranslationHandlerParams) {   
    return 'some translated text'; // here u can return translation 
  }
}

更好的解決方案:

this.translate.use(navigator.language.split(/-|_/)[0]).toPromise().catch(() => {
  this.translate.use('en');
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM