gpt4 book ai didi

Ionic3/Ngx-translate - 带有外部 URL 的 TranslateHttpLoader

转载 作者:行者123 更新时间:2023-12-05 00:50:50 25 4
gpt4 key购买 nike

我在 app.module.ts 中使用 TranslateHttpLoader 从服务器加载翻译文件,如下所示:

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 文件以仅显示翻译的维护页面/错误页面或其他内容。

最佳答案

最后我写了一个自定义加载器来解决需求:

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]
}
}),

],
...
})

关于Ionic3/Ngx-translate - 带有外部 URL 的 TranslateHttpLoader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45280901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com