2017-07-24 28 views
1

我是从服务器在我app.module.ts这样使用TranslateHttpLoader加载翻译文件:Ionic3/NRX个 - 翻译 - TranslateHttpLoader与外部URL

export function createTranslateLoader(http: Http) { 
    return new TranslateHttpLoader(http, AppConfig.API_URL+'/static/i18n/', '.json'); 
} 

@NgModule({ 
    ... 

    imports: [ 

    TranslateModule.forRoot({ 
     loader: { 
     provide: TranslateLoader, 
     useFactory: (createTranslateLoader), 
     deps: [Http] 
     } 
    }), 

    ], 
    ... 
}) 

一切工作正常,但我想知道当加载程序因为什么原因(服务器问题,网络连接等)无法检索语言文件时是否有办法捕获事件,并可能使用某些默认转换字符串加载本地json文件?

我想抓住这个事件,如果第一次加载的应用程序无法抓住语言文件,并回退到最小的本地json文件,只显示翻译的mainetnance页面/错误页面或其他东西。

回答

0

末我写道,解决了要求定制装载机:

import { Injectable } from '@angular/core'; 
import { Headers, Http, Response } from "@angular/http"; 
import { TranslateLoader } from '@ngx-translate/core'; 
import { AppConfig } from "./config" 
import { Observable } from 'rxjs/Observable'; 


@Injectable() 
export class CustomTranslateLoader implements TranslateLoader { 
    contentHeader = new Headers({"Content-Type": "application/json","Access-Control-Allow-Origin":"*"}); 

    constructor(private http: Http) {} 
    getTranslation(lang: string): Observable<any>{ 
     var apiAddress = AppConfig.API_URL+"/static/i18n/"+ lang+".json"; 
     return Observable.create(observer => { 
      this.http.get(apiAddress, { headers: this.contentHeader }).subscribe((res: Response) => { 
        observer.next(res.json()); 
        observer.complete();    
       }, 
      error => { 
       // failed to retrieve from api, switch to local 
       this.http.get("/assets/i18n/en.json").subscribe((res: Response) => { 
        observer.next(res.json()); 
        observer.complete();    
       }) 
      } 
      ); 
     }); 
    } 
} 

和app.module.ts

... 
import { CustomTranslateLoader } from "../services/trans-loader" 
... 

@NgModule({ 
    ... 

    imports: [ 

    TranslateModule.forRoot({ 
     loader: { 
     provide: TranslateLoader, 
     useClass: CustomTranslateLoader, 
     deps: [Http] 
     } 
    }), 

    ], 
    ... 
})