我是 Angular 的新手,并且已经开始构建一个具有下一个特性的新项目。对不起,如果解释不够清楚。我很乐意提供更多信息,但不想通过我的完整项目获得不相关的信息。
我在用着
- 视觉工作室 2015
- ASPNET 核心
- AspNetCore.Angular 服务
- ngx-翻译
我已按照 [ https://github.com/ngx-translate/core][1]中提供的示例和说明进行操作
我的代码按预期工作,能够翻译 4 种语言并在路由器内的多个组件中使用管道指令。这意味着我的 json 文件正在加载并且结构正确。我看到了许多报告,其中 json 文件存在错误,但我的情况并非如此。
但是我的问题是我无法添加设置默认语言和要在构造函数中使用的语言的行。
import { Component } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app',
template: require('./app.component.html'),
styles: [require('./app.component.css')]
})
export class AppComponent {
constructor(private translate: TranslateService) {
translate.addLangs(["en", "fr", "es", "de"]);
//Error shows up when uncommenting any of the next two lines
//translate.setDefaultLang('en');
//translate.use('en');
}
}
每当我取消注释这些行时,我都会收到错误
异常:调用节点模块失败并出现错误:SyntaxError:JSON.parse () 位置 0 处 JSON 中的意外令牌
如果我评论这些行,我的应用程序启动没有问题,唯一的细节是语言尚未设置。我可以在下拉列表中手动选择它,然后一切都按预期工作。
这是html文件
<div id="MainContainer" class='container-fluid'>
<div class='row'>
<label>
{{ "SELECT" | translate }}<br />
<select #langSelect (change)="translate.use(langSelect.value)">
<option *ngFor="let lang of translate.getLangs()" [value]="lang" [selected]="lang === translate.currentLang">{{ lang }}</option>
</select>
</label>
</div>
</div>
这是我的应用程序模块
import { NgModule } from '@angular/core';
import { UniversalModule } from 'angular2-universal'; // this automatically imports BrowserModule, HttpModule, and JsonpModule too.
import { Http } from '@angular/http';
import { FormsModule } from '@angular/forms'; // <-- ngModel lives here
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
// main Routing
import { AppRoutingModule } from './routers/app-routing.module';
// own Services
import { ImgService } from './services/img.service';
// own components
import { AppComponent } from './components/app/app.component';
import { NavMenuComponent } from './components/nav-menu/nav-menu.component';
import { CompleteSystemComponent } from './components/complete-system/complete-system.component';
import { VehicleComponent } from './components/vehicle/vehicle.component';
import { RobotComponent } from './components/robot/robot.component';
import { MapComponent } from './components/map/map.component';
import { StatusBarComponent } from './components/status-bar/status-bar.component';
import { RobotCameraComponent } from './components/robot-camera/robot-camera.component';
import { ImageProcessingComponent } from './components/image-processing/image-processing.component';
import { Station1Component } from './components/station1/station1.component';
import { Station2Component } from './components/station2/station2.component';
//AoT requires an exported function for factories
export function HttpLoaderFactory(http: Http) {
//return new TranslateHttpLoader(http, '/i18n/', '.json');
//return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
return new TranslateHttpLoader(http);
}
@NgModule({
imports: [
UniversalModule, // must be first import. This automatically imports BrowserModule, HttpModule, and JsonpModule too.
FormsModule,
AppRoutingModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [Http]
}
}),
],
declarations: [
AppComponent,
NavMenuComponent,
RobotComponent,
VehicleComponent,
CompleteSystemComponent,
MapComponent,
StatusBarComponent,
RobotCameraComponent,
ImageProcessingComponent,
Station1Component,
Station2Component
],
providers: [
ImgService
],
bootstrap: [AppComponent]
})
export class AppModule {
}
如果有人能给我一些尝试的提示,我将不胜感激。到目前为止,这些是我试图解决问题的事情
- 将默认语言的定义和使用移动到 ngOnInit (同样失败)
- 移动默认语言的定义并使用按钮调用的函数(它可以正常工作)
- 尝试移动默认语言的定义并使用到 ngAfterViewInit() 和 ngAfterViewChecked()。
我怀疑问题是没有从 wwwroot 目录加载 json 文件,或者应用程序启动时服务无法在那里找到它们。应用程序启动后,它发现它们没有问题,一切都按预期工作。
再次感谢您的评论,如果更多信息有助于调试此问题,请告诉我