Angular/Ngx translate: 动态显示从服务器获取的currentLang
Angular/Ngx translate: display dynamically currentLang obtained from a server
我正在制作一个允许使用服务器上的数据翻译应用程序的项目。
我创建了一个服务来获取所需的数据:
@Injectable()
export class TranslationService {
constructor(private http: HttpClient) { }
getLangs(): Observable<string[]> {
return this.http.get<string[]>(TRANSLATION_URL);
}
getDefaultLang(): Observable<string> {
return this.http.get<string>(TRANSLATION_URL + '/defaultLang');
}
changeStartLang(lang: string) {
this.http.post(TRANSLATION_URL + '/defaultLang', lang);
}
}
getDefaultLang() returns 正文如下的响应:
"en"
在 app.component 中,我使用默认语言初始化应用程序:
// get available langs from server and start language
this.translationService.getLangs()
.toPromise().then(langs => translate.addLangs(langs));
translate.setDefaultLang('en');
const browserLang = translate.getBrowserLang();
this.translationService.getDefaultLang()
.toPromise().then(lang => (lang !== null) ? this.translate.use(lang) : this.translate.use(browserLang));
在另一个组件中,我想显示来自 TranslateService 的当前语言:
<div>{{'LANGUAGE.LANGUAGE_IN_USE' | translate}}</div>
<div (click)="changeLanguage()">{{translate.currentLang | uppercase}}</div>
函数 changeLanguage() 允许在不同语言之间切换。
当我打开这个组件时,我得到 currentLang 的未定义,一旦我调用函数 changeLanguage(),语言就会很好地显示。
我该如何解决这个问题?
找到解决方案。
将服务器的响应更改为:
{ "lang": "en" }
使用 getDefaultLang():
getDefaultLang(): Observable<any> {
return this.http.get(TRANSLATION_URL + '/defaultLang');
}
并将app.component中的代码改为:
const browserLang = translate.getBrowserLang();
this.translationService.getDefaultLang()
.toPromise().then(res => (res.lang !== null) ? this.translate.use(res.lang) : this.translate.use(browserLang))
.catch(error => console.log(error));
它解决了我所有的问题,translate.currentLang 在启动时不再是未定义的。
我正在制作一个允许使用服务器上的数据翻译应用程序的项目。
我创建了一个服务来获取所需的数据:
@Injectable()
export class TranslationService {
constructor(private http: HttpClient) { }
getLangs(): Observable<string[]> {
return this.http.get<string[]>(TRANSLATION_URL);
}
getDefaultLang(): Observable<string> {
return this.http.get<string>(TRANSLATION_URL + '/defaultLang');
}
changeStartLang(lang: string) {
this.http.post(TRANSLATION_URL + '/defaultLang', lang);
}
}
getDefaultLang() returns 正文如下的响应:
"en"
在 app.component 中,我使用默认语言初始化应用程序:
// get available langs from server and start language
this.translationService.getLangs()
.toPromise().then(langs => translate.addLangs(langs));
translate.setDefaultLang('en');
const browserLang = translate.getBrowserLang();
this.translationService.getDefaultLang()
.toPromise().then(lang => (lang !== null) ? this.translate.use(lang) : this.translate.use(browserLang));
在另一个组件中,我想显示来自 TranslateService 的当前语言:
<div>{{'LANGUAGE.LANGUAGE_IN_USE' | translate}}</div>
<div (click)="changeLanguage()">{{translate.currentLang | uppercase}}</div>
函数 changeLanguage() 允许在不同语言之间切换。
当我打开这个组件时,我得到 currentLang 的未定义,一旦我调用函数 changeLanguage(),语言就会很好地显示。
我该如何解决这个问题?
找到解决方案。 将服务器的响应更改为:
{ "lang": "en" }
使用 getDefaultLang():
getDefaultLang(): Observable<any> {
return this.http.get(TRANSLATION_URL + '/defaultLang');
}
并将app.component中的代码改为:
const browserLang = translate.getBrowserLang();
this.translationService.getDefaultLang()
.toPromise().then(res => (res.lang !== null) ? this.translate.use(res.lang) : this.translate.use(browserLang))
.catch(error => console.log(error));
它解决了我所有的问题,translate.currentLang 在启动时不再是未定义的。