mirror of
https://github.com/booklore-app/booklore.git
synced 2026-02-18 00:17:53 +01:00
* feat(i18n): add Transloco translation framework and translate all settings tabs (EN/ES) * feat(i18n): translate shared, layout, dashboard, library-creator, and app-root components (EN/ES) and scaffold 7 new languages * feat(i18n): translate bookdrop and metadata components (EN/ES), remove i18n-audit from tracking * fix(i18n): deep-merge English as fallback base for incomplete language translations
88 lines
3.3 KiB
TypeScript
88 lines
3.3 KiB
TypeScript
import {provideHttpClient, withInterceptors} from '@angular/common/http';
|
|
import {DialogService} from 'primeng/dynamicdialog';
|
|
import {ConfirmationService, MessageService} from 'primeng/api';
|
|
import {RxStompService} from './app/shared/websocket/rx-stomp.service';
|
|
import {rxStompServiceFactory} from './app/shared/websocket/rx-stomp-service-factory';
|
|
import {provideRouter, RouteReuseStrategy} from '@angular/router';
|
|
import {CustomReuseStrategy} from './app/core/custom-reuse-strategy';
|
|
import {provideAnimationsAsync} from '@angular/platform-browser/animations/async';
|
|
import {providePrimeNG} from 'primeng/config';
|
|
import {bootstrapApplication} from '@angular/platform-browser';
|
|
import {AppComponent} from './app/app.component';
|
|
import Aura from '@primeng/themes/aura';
|
|
import {routes} from './app/app.routes';
|
|
import {AuthInterceptorService} from './app/core/security/auth-interceptor.service';
|
|
import {AuthService, websocketInitializer} from './app/shared/service/auth.service';
|
|
import {OAuthStorage, provideOAuthClient} from 'angular-oauth2-oidc';
|
|
import {inject, isDevMode, provideAppInitializer, provideZoneChangeDetection} from '@angular/core';
|
|
import {initializeAuthFactory} from './app/core/security/auth-initializer';
|
|
import {StartupService} from './app/shared/service/startup.service';
|
|
import {provideCharts, withDefaultRegisterables} from 'ng2-charts';
|
|
import ChartDataLabels from 'chartjs-plugin-datalabels';
|
|
import {provideServiceWorker} from '@angular/service-worker';
|
|
import {provideTransloco} from '@jsverse/transloco';
|
|
import {AVAILABLE_LANGS, TranslocoInlineLoader} from './app/core/config/transloco-loader';
|
|
import {initializeLanguage} from './app/core/config/language-initializer';
|
|
|
|
export function storageFactory(): OAuthStorage {
|
|
return localStorage;
|
|
}
|
|
|
|
bootstrapApplication(AppComponent, {
|
|
providers: [
|
|
provideZoneChangeDetection(),
|
|
provideCharts(withDefaultRegisterables(), ChartDataLabels),
|
|
provideAppInitializer(() => {
|
|
const authService = inject(AuthService);
|
|
return websocketInitializer(authService)();
|
|
}),
|
|
provideAppInitializer(() => {
|
|
const startup = inject(StartupService);
|
|
return startup.load();
|
|
}),
|
|
provideHttpClient(withInterceptors([AuthInterceptorService])),
|
|
provideOAuthClient(),
|
|
{
|
|
provide: OAuthStorage,
|
|
useFactory: storageFactory
|
|
},
|
|
provideAppInitializer(initializeAuthFactory()),
|
|
provideRouter(routes),
|
|
DialogService,
|
|
MessageService,
|
|
ConfirmationService,
|
|
{
|
|
provide: RxStompService,
|
|
useFactory: rxStompServiceFactory,
|
|
deps: [AuthService],
|
|
},
|
|
{
|
|
provide: RouteReuseStrategy,
|
|
useClass: CustomReuseStrategy
|
|
},
|
|
...provideTransloco({
|
|
config: {
|
|
availableLangs: AVAILABLE_LANGS,
|
|
defaultLang: 'en',
|
|
fallbackLang: 'en',
|
|
reRenderOnLangChange: true,
|
|
prodMode: !isDevMode(),
|
|
},
|
|
loader: TranslocoInlineLoader,
|
|
}),
|
|
provideAppInitializer(initializeLanguage()),
|
|
provideAnimationsAsync(),
|
|
providePrimeNG({
|
|
theme: {
|
|
preset: Aura,
|
|
options: {
|
|
darkModeSelector: '.p-dark'
|
|
}
|
|
}
|
|
}), provideServiceWorker('ngsw-worker.js', {
|
|
enabled: !isDevMode(),
|
|
registrationStrategy: 'registerWhenStable:30000'
|
|
})
|
|
]
|
|
}).catch(err => console.error(err));
|