[英]How to extract text from components in Angular 6 for translation (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.