I'm working on an SSR project and trying to get the users request headers sent to the node server to parse the accepted language header param inside an angular resolver.
What Im trying to do is redirect the users root route to a preferred language setting, either accepted-lang headers or the default lang.
When Im trying to inject the Request instance, its always null/undefined
The DefaultLang Resolver:
@Injectable({ providedIn: 'root' })
export class DefaultlanguageResolver implements Resolve<boolean> {
translocoService = inject(TranslocoService);
navigationService = inject(NavigationService);
request = inject(Request, { optional: true });
appConfig = inject(APP_CONFIG);
resolve(
_route: ActivatedRouteSnapshot,
_state: RouterStateSnapshot
): boolean | Observable<boolean> | Promise<boolean> {
// this.request is always null/undefined
const headerLang = this.request?.headers
? this.request.headers.get('accept-language')
: null;
if (
headerLang &&
this.appConfig.availableLangs.find((lang) => lang === headerLang)
) {
this.translocoService.setActiveLang(headerLang);
} else {
this.translocoService.setActiveLang(
this.translocoService.getDefaultLang()
);
}
this.navigationService.navigateToRoot();
return true;
}
}
My routes:
export const AppRoutes: Routes = [
{
path: '',
pathMatch: 'full',
resolve: [DefaultlanguageResolver],
// Required component property
component: LayoutComponent,
},
{
path: ':lang',
resolve: [LanguageResolver],
component: LayoutComponent,
children: [...]
}
]