如何检查翻译文件是否可用于您使用ngx-translate从navigator.language获得的结果?
我想做一些类似的事情:
if( checkLanguageAvailable (navigator.language)) {
this.translate.use( navigator.language );
} else {
this.translate.use( 'en' ); //Default fall back
}发布于 2019-09-23 15:38:08
您可以使用ngx-translate的getLangs()方法获取可用语言的列表:
@Component({ ... })
export class MyController {
constructor(private translate: TranslateService) {}
checkLanguageAvailable(lang: string): boolean {
return this.translate.getLangs().includes(lang);
}
}发布于 2018-02-12 19:26:03
你可以在使用前检查文件是否存在(生成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()
],
...TranslateHandler
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
}
}发布于 2021-08-16 08:41:47
更好的解决方案:
this.translate.use(navigator.language.split(/-|_/)[0]).toPromise().catch(() => {
this.translate.use('en');
});https://stackoverflow.com/questions/48744600
复制相似问题