Я новичок в Angular и начинаю создавать новый проект со следующими характеристиками. Извините, если объяснение недостаточно ясное. Я более чем рад предоставить больше информации, но не хочу, чтобы через весь мой проект оставалась не относящаяся к делу информация.
я использую
- Visual Studio 2015
- ЯДРО ASPNET
- Услуги AspNetCore.Angular
- ngx-translate
Я следил за примерами и инструкциями, приведенными в [https://github.com/ngx-translate/corevisible[1pting
Мой код работает должным образом, так как я могу переводить на 4 языка и использовать директиву pipe в нескольких компонентах внутри маршрутизатора. Это означает, что мои файлы 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 в позиции 0 в JSON.parse ()
Если я прокомментирую эти строки, мое приложение запускается без проблем, и единственная деталь заключается в том, что язык еще не настроен. Я могу вручную выбрать его в раскрывающемся списке, и тогда все будет работать должным образом.
Вот 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 ().
Я подозреваю, что проблема в том, что файлы json не были загружены из каталога wwwroot или что служба не может найти их там при запуске приложения. После запуска приложение находит их без проблем и все работает как положено.
Еще раз спасибо за ваши комментарии и дайте мне знать, если дополнительная информация поможет отладить эту проблему