[英]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.