即时翻译的 ngx 翻译问题
ngx-translate issue with translate instant
我在 Angular(v6) 中使用延迟加载方法的 ngx-translate。我遇到了 translate.instant('Title')
的问题
使用翻译管道效果很好。({{'Title' | translate}}
)
使用 translate.instant()
方法,默认语言始终有效,但我无法通过共享模块中的语言 select 或(select 用于切换语言的组件)更改语言.
我不想每次都使用this.translate.onLangChange.subscribe
,有没有其他方法可以使用这种方法?
使用 translate.stream('Title') 而不是 translate.instant('Title')。它 returns 一个 Observable。
另见 https://github.com/ngx-translate/core
工作原理:
import {Component} from '@angular/core';
import {TranslateService} from '@ngx-translate/core';
import {Observable} from 'rxjs';
@Component({
selector: 'app-root',
template: `
<div>
<h2>{{ 'HOME.TITLE' | translate }}</h2>
<label>
{{ 'HOME.SELECT' | translate }}
<select #langSelect (change)="translate.use(langSelect.value)">
<option *ngFor="let lang of translate.getLangs()" [value]="lang" [selected]="lang === translate.currentLang">{{ lang }}</option>
</select>
</label>
<ng-container *ngIf="name$ | async as name">
<p>Observable {{ name }}</p>
</ng-container>
</div>
`,
})
export class AppComponent {
public name$: Observable<string>;
constructor(public translate: TranslateService) {
translate.addLangs(['en', 'fr']);
translate.setDefaultLang('en');
const browserLang = translate.getBrowserLang();
translate.use(browserLang.match(/en|fr/) ? browserLang : 'en');
}
public ngOnInit(): void {
this.name$ = this.translate.stream('HOME.TITLE');
}
}
这是一个 link 到 stackblitz 演示:https://stackblitz.com/edit/github-az4kgy
它始终使用默认语言。这是主要问题。解决方案是:
this.translateService.onLangChange.subscribe((event: TranslationChangeEvent) => {
this.translateService.setDefaultLang(event.lang);
});
我在 Angular(v6) 中使用延迟加载方法的 ngx-translate。我遇到了 translate.instant('Title')
使用翻译管道效果很好。({{'Title' | translate}}
)
使用 translate.instant()
方法,默认语言始终有效,但我无法通过共享模块中的语言 select 或(select 用于切换语言的组件)更改语言.
我不想每次都使用this.translate.onLangChange.subscribe
,有没有其他方法可以使用这种方法?
使用 translate.stream('Title') 而不是 translate.instant('Title')。它 returns 一个 Observable。
另见 https://github.com/ngx-translate/core
工作原理:
import {Component} from '@angular/core';
import {TranslateService} from '@ngx-translate/core';
import {Observable} from 'rxjs';
@Component({
selector: 'app-root',
template: `
<div>
<h2>{{ 'HOME.TITLE' | translate }}</h2>
<label>
{{ 'HOME.SELECT' | translate }}
<select #langSelect (change)="translate.use(langSelect.value)">
<option *ngFor="let lang of translate.getLangs()" [value]="lang" [selected]="lang === translate.currentLang">{{ lang }}</option>
</select>
</label>
<ng-container *ngIf="name$ | async as name">
<p>Observable {{ name }}</p>
</ng-container>
</div>
`,
})
export class AppComponent {
public name$: Observable<string>;
constructor(public translate: TranslateService) {
translate.addLangs(['en', 'fr']);
translate.setDefaultLang('en');
const browserLang = translate.getBrowserLang();
translate.use(browserLang.match(/en|fr/) ? browserLang : 'en');
}
public ngOnInit(): void {
this.name$ = this.translate.stream('HOME.TITLE');
}
}
这是一个 link 到 stackblitz 演示:https://stackblitz.com/edit/github-az4kgy
它始终使用默认语言。这是主要问题。解决方案是:
this.translateService.onLangChange.subscribe((event: TranslationChangeEvent) => {
this.translateService.setDefaultLang(event.lang);
});