From 8311a79ffba0b1898bad3489e7afd935ae42f726 Mon Sep 17 00:00:00 2001 From: muhammedaltug Date: Tue, 21 Sep 2021 15:06:43 +0300 Subject: [PATCH] store current language in the cookie --- .../packages/core/src/lib/core.module.ts | 2 ++ .../lib/providers/cookie-language.provider.ts | 23 +++++++++++++++++++ .../packages/core/src/lib/providers/index.ts | 1 + .../lib/tokens/cookie-language-key.token.ts | 5 ++++ .../packages/core/src/lib/tokens/index.ts | 3 ++- 5 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 npm/ng-packs/packages/core/src/lib/providers/cookie-language.provider.ts create mode 100644 npm/ng-packs/packages/core/src/lib/tokens/cookie-language-key.token.ts diff --git a/npm/ng-packs/packages/core/src/lib/core.module.ts b/npm/ng-packs/packages/core/src/lib/core.module.ts index c2408116d8..7529f62c5e 100644 --- a/npm/ng-packs/packages/core/src/lib/core.module.ts +++ b/npm/ng-packs/packages/core/src/lib/core.module.ts @@ -32,6 +32,7 @@ import { TENANT_KEY } from './tokens/tenant-key.token'; import { noop } from './utils/common-utils'; import './utils/date-extensions'; import { getInitialData, localeInitializer } from './utils/initial-utils'; +import { CookieLanguageProvider } from './providers/cookie-language.provider'; export function storageFactory(): OAuthStorage { return oAuthStorage; @@ -131,6 +132,7 @@ export class CoreModule { ngModule: RootCoreModule, providers: [ LocaleProvider, + CookieLanguageProvider, { provide: 'CORE_OPTIONS', useValue: options, diff --git a/npm/ng-packs/packages/core/src/lib/providers/cookie-language.provider.ts b/npm/ng-packs/packages/core/src/lib/providers/cookie-language.provider.ts new file mode 100644 index 0000000000..03f99a7db8 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/providers/cookie-language.provider.ts @@ -0,0 +1,23 @@ +import { APP_INITIALIZER, Injector, Provider } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import { SessionStateService } from '../services/session-state.service'; +import { COOKIE_LANGUAGE_KEY } from '../tokens/cookie-language-key.token'; + +export function setLanguageToCookie(injector: Injector) { + return () => { + const sessionState = injector.get(SessionStateService); + const document = injector.get(DOCUMENT); + const cookieLanguageKey = injector.get(COOKIE_LANGUAGE_KEY); + sessionState.getLanguage$().subscribe(language => { + const cookieValue = encodeURIComponent(`c=${language}|uic=${language}`); + document.cookie = `${cookieLanguageKey}=${cookieValue}`; + }); + }; +} + +export const CookieLanguageProvider: Provider = { + provide: APP_INITIALIZER, + useFactory: setLanguageToCookie, + deps: [Injector], + multi: true, +}; diff --git a/npm/ng-packs/packages/core/src/lib/providers/index.ts b/npm/ng-packs/packages/core/src/lib/providers/index.ts index fcbdb58be2..f7310ef146 100644 --- a/npm/ng-packs/packages/core/src/lib/providers/index.ts +++ b/npm/ng-packs/packages/core/src/lib/providers/index.ts @@ -1 +1,2 @@ +export * from './cookie-language.provider'; export * from './locale.provider'; diff --git a/npm/ng-packs/packages/core/src/lib/tokens/cookie-language-key.token.ts b/npm/ng-packs/packages/core/src/lib/tokens/cookie-language-key.token.ts new file mode 100644 index 0000000000..b14ad142bc --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/tokens/cookie-language-key.token.ts @@ -0,0 +1,5 @@ +import { InjectionToken } from '@angular/core'; + +export const COOKIE_LANGUAGE_KEY = new InjectionToken('COOKIE_LANGUAGE_KEY', { + factory: () => '.AspNetCore.Culture', +}); diff --git a/npm/ng-packs/packages/core/src/lib/tokens/index.ts b/npm/ng-packs/packages/core/src/lib/tokens/index.ts index 4d102ee8b4..2b7028ce53 100644 --- a/npm/ng-packs/packages/core/src/lib/tokens/index.ts +++ b/npm/ng-packs/packages/core/src/lib/tokens/index.ts @@ -1,6 +1,7 @@ +export * from './app-config.token'; +export * from './cookie-language-key.token'; export * from './list.token'; export * from './lodaer-delay.token'; export * from './manage-profile.token'; export * from './options.token'; -export * from './app-config.token'; export * from './tenant-key.token';