Beg*_*gum 1 javascript json ngx-translate angular
我正在尝试从具有服务URL的内容管理系统中获取翻译的文本。当我使用JSON文件时,它运作良好,但是如何使用服务URL来获取转换后的数据?
这是无效的代码:
export function createTranslateLoader(http: Http) {
return new TranslateHttpLoader(http, 'http://test.test.com/test/test/Translations/{lang}/{SiteId}');
}
Run Code Online (Sandbox Code Playgroud)
小智 5
昨天,我在使用ngx-translate如何利用API调用的JSON响应时遇到了同样的问题,并且已经找到了解决方案。我知道在这里更新很晚,但是我相信会有人从中受益。
如果您不打算使用.json文件,则Ngx-translate可以使用Service。为此,在您的* .module.ts文件中,使用“ useClass”代替“ useFactory”,如下所示。
@NgModule({
imports: [SharedModule, SharedComponentsModule, routing,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: TranslationService,
//useFactory : HttpLoaderFactory,
deps: [HttpClient]
}
Run Code Online (Sandbox Code Playgroud)
在您的翻译服务中,只需调用API网址即可。
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { TranslateLoader } from '@ngx-translate/core';
@Injectable()
export class TranslationService implements TranslateLoader {
constructor(private http: HttpClient) { }
getTranslation(lang: string): Observable<any> {
return this.http.get(`http://<someurlreferences>?language=${lang}`)
.map((response: JSON) => {
return response;
});
}
}
Run Code Online (Sandbox Code Playgroud)
切记:API响应应为JSON格式。否则,ngx-translate不会翻译。
假设您的JSON响应采用以下格式
{
"Data": {
"First": [{
"key": "FirstKey",
"value": "FirstValue"
}]
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在您的* .component.ts文件中
import { Component, OnInit } from '@angular/core'
import { TranslateService } from '@ngx-translate/core';
@Component({
template: `<button (click)="switchLanguage('en')" >English</button>
<button (click)="switchLanguage('cy')" >Welsh</button>
<h1>{{'Data.First.0.value' | translate }} <!--FirstValue-->
</h1>`
export class SomeComponent implements OnInit {
constructor(private translate: TranslateService) {
translate.addLangs(['en', 'cy']);
translate.setDefaultLang('en');
const browserLang = translate.getBrowserLang();
translate.use(browserLang.match(/en|cy/) ? browserLang : 'en');
}
switchLanguage(language: string) {
this.translate.use(language);
}
}
Run Code Online (Sandbox Code Playgroud)
用户界面显示两个按钮(英语和威尔士语),单击后,将根据语言参数相应地调用服务API网址。
| 归档时间: |
|
| 查看次数: |
2962 次 |
| 最近记录: |