Files
playground-frontend/src/app/app.config.ts
2026-01-17 11:40:32 +01:00

59 lines
1.9 KiB
TypeScript

import {ApplicationConfig, inject, provideAppInitializer, provideBrowserGlobalErrorListeners, provideZonelessChangeDetection} from '@angular/core';
import { provideRouter, withInMemoryScrolling } from '@angular/router';
import { routes } from './app.routes';
import {provideAnimations} from '@angular/platform-browser/animations';
import {provideHttpClient} from '@angular/common/http';
import {provideTranslateService} from '@ngx-translate/core';
import {provideTranslateHttpLoader} from '@ngx-translate/http-loader';
import {LocalStoreConstants} from './constants/LocalStoreConstants';
import {MatIconRegistry} from '@angular/material/icon';
import {DomSanitizer} from '@angular/platform-browser';
const INITIAL_LANG = getInitialLang();
export const appConfig: ApplicationConfig = {
providers: [
provideBrowserGlobalErrorListeners(),
provideZonelessChangeDetection(),
provideRouter(
routes,
withInMemoryScrolling({
scrollPositionRestoration: 'top',
anchorScrolling: 'enabled'
})),
provideAnimations(),
provideHttpClient(),
provideTranslateService({
lang: INITIAL_LANG,
fallbackLang: 'en',
loader: provideTranslateHttpLoader({
prefix: 'assets/i18n/',
suffix: '.json'
})
}),
provideAppInitializer(() => {
const iconRegistry = inject(MatIconRegistry);
const sanitizer = inject(DomSanitizer);
iconRegistry.addSvgIcon(
'github',
sanitizer.bypassSecurityTrustResourceUrl('assets/logos/github.svg')
);
iconRegistry.addSvgIcon(
'linkedin',
sanitizer.bypassSecurityTrustResourceUrl('assets/logos/linkedIn.svg')
);
}),
]
};
function getInitialLang(): string {
const saved = localStorage.getItem(LocalStoreConstants.LANGUAGE_KEY);
if (saved) return saved;
const nav = typeof navigator !== 'undefined' ? navigator.language?.toLowerCase() : 'en';
return nav?.startsWith('de') ? 'de' : 'en';
}