diff --git a/apps/red-ui/src/app/app.module.ts b/apps/red-ui/src/app/app.module.ts index 051abb04e..1ae19dd51 100644 --- a/apps/red-ui/src/app/app.module.ts +++ b/apps/red-ui/src/app/app.module.ts @@ -36,6 +36,7 @@ import { HELP_DOCS, IqserHelpModeModule, MAX_RETRIES_ON_SERVER_ERROR, ServerErro import { KeycloakService } from 'keycloak-angular'; import { GeneralSettingsService } from '@services/general-settings.service'; import { BreadcrumbsComponent } from '@components/breadcrumbs/breadcrumbs.component'; +import { UserPreferenceService } from '@services/user-preference.service'; export function httpLoaderFactory(httpClient: HttpClient): PruningTranslationLoader { return new PruningTranslationLoader(httpClient, '/assets/i18n/', '.json'); @@ -110,17 +111,11 @@ const components = [AppComponent, AuthErrorComponent, NotificationsComponent, Sp multi: true, useClass: HttpCacheInterceptor, }, - { - provide: APP_INITIALIZER, - multi: true, - useFactory: languageInitializer, - deps: [LanguageService], - }, { provide: APP_INITIALIZER, multi: true, useFactory: configurationInitializer, - deps: [KeycloakService, Title, ConfigService, GeneralSettingsService], + deps: [KeycloakService, Title, ConfigService, GeneralSettingsService, LanguageService, UserPreferenceService], }, { provide: MissingTranslationHandler, diff --git a/apps/red-ui/src/app/i18n/language.service.ts b/apps/red-ui/src/app/i18n/language.service.ts index 4f4331ae7..d7a5b0c98 100644 --- a/apps/red-ui/src/app/i18n/language.service.ts +++ b/apps/red-ui/src/app/i18n/language.service.ts @@ -1,11 +1,12 @@ import { Injectable } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; +import { UserPreferenceService } from '@services/user-preference.service'; @Injectable({ providedIn: 'root', }) export class LanguageService { - constructor(private readonly _translateService: TranslateService) { + constructor(private readonly _translateService: TranslateService, private readonly _userPreferenceService: UserPreferenceService) { _translateService.addLangs(['en', 'de']); } @@ -13,17 +14,15 @@ export class LanguageService { return this._translateService.currentLang; } + languageAvailable(language: string): boolean { + return this._translateService.getLangs().includes(language); + } + chooseAndSetInitialLanguage() { - let defaultLang: string; - const localStorageLang = localStorage.getItem('redaction.language'); - // const browserLang = this._translateService.getBrowserLang(); - const browserLang = 'en'; // Force language to english until translations are ready - if (this._translateService.getLangs().includes(localStorageLang)) { - defaultLang = localStorageLang; - } else if (this._translateService.getLangs().includes(browserLang)) { - defaultLang = browserLang; - } else { - defaultLang = 'en'; + let defaultLang = 'en'; + const userPreferenceLang = this._userPreferenceService.getLanguage(); + if (this.languageAvailable(userPreferenceLang)) { + defaultLang = userPreferenceLang; } document.documentElement.lang = defaultLang; this._translateService.setDefaultLang(defaultLang); @@ -31,7 +30,7 @@ export class LanguageService { } async changeLanguage(language: string) { - localStorage.setItem('redaction.language', language); + await this._userPreferenceService.saveLanguage(language); document.documentElement.lang = language; await this._translateService.use(language).toPromise(); } diff --git a/apps/red-ui/src/app/modules/account/screens/user-profile/user-profile-screen/user-profile-screen.component.html b/apps/red-ui/src/app/modules/account/screens/user-profile/user-profile-screen/user-profile-screen.component.html index 25d5a5a44..e984688de 100644 --- a/apps/red-ui/src/app/modules/account/screens/user-profile/user-profile-screen/user-profile-screen.component.html +++ b/apps/red-ui/src/app/modules/account/screens/user-profile/user-profile-screen/user-profile-screen.component.html @@ -1,4 +1,4 @@ -