diff --git a/frontend/src/app/core/services/language.service.ts b/frontend/src/app/core/services/language.service.ts
index 6bfbd14..9243c69 100644
--- a/frontend/src/app/core/services/language.service.ts
+++ b/frontend/src/app/core/services/language.service.ts
@@ -39,6 +39,7 @@ export class LanguageService {
setForAuthenticatedUser(lang: AppLanguage) {
const nextLang = this.read(lang) || 'pl';
+ localStorage.setItem(this.key, nextLang);
this.apply(nextLang);
}
diff --git a/frontend/src/app/shared/auth/auth-toolbar.component.html b/frontend/src/app/shared/auth/auth-toolbar.component.html
index 20f5487..e1c311a 100644
--- a/frontend/src/app/shared/auth/auth-toolbar.component.html
+++ b/frontend/src/app/shared/auth/auth-toolbar.component.html
@@ -8,8 +8,15 @@
>
diff --git a/frontend/src/app/shared/auth/auth-toolbar.component.ts b/frontend/src/app/shared/auth/auth-toolbar.component.ts
index f9d8238..0a4965d 100644
--- a/frontend/src/app/shared/auth/auth-toolbar.component.ts
+++ b/frontend/src/app/shared/auth/auth-toolbar.component.ts
@@ -1,31 +1,28 @@
import { CommonModule } from '@angular/common';
import { Component, inject } from '@angular/core';
+import { FormsModule } from '@angular/forms';
import { ButtonModule } from 'primeng/button';
-import { AppLanguage, LanguageService } from '../../core/services/language.service';
+import { AppLanguage, AppLanguageOption, LanguageService } from '../../core/services/language.service';
import { ThemeService } from '../../core/services/theme.service';
@Component({
selector: 'app-auth-toolbar',
standalone: true,
- imports: [CommonModule, ButtonModule],
+ imports: [CommonModule, FormsModule, ButtonModule],
templateUrl: './auth-toolbar.component.html'
})
export class AuthToolbarComponent {
readonly theme = inject(ThemeService);
readonly language = inject(LanguageService);
- get languageOptions() {
- const current = this.language.current();
- return [
- { code: 'no', label: `${current === 'no' ? 'β ' : ''}π³π΄ Norsk` },
- { code: 'es', label: `${current === 'es' ? 'β ' : ''}πͺπΈ EspaΓ±ol` },
- { code: 'pl', label: `${current === 'pl' ? 'β ' : ''}π΅π± Polski` },
- { code: 'en', label: `${current === 'en' ? 'β ' : ''}π¬π§ English` }
- ];
+ readonly languageOptions = this.language.options;
+
+ trackByLanguageCode(_: number, option: AppLanguageOption) {
+ return option.code;
}
- changeLanguage(event: Event) {
- this.language.set((event.target as HTMLSelectElement).value as AppLanguage);
+ changeLanguage(lang: AppLanguage | string) {
+ this.language.set(lang as AppLanguage);
}
}
diff --git a/frontend/src/app/shared/layout/app-topbar.component.html b/frontend/src/app/shared/layout/app-topbar.component.html
index 847db42..5895b0b 100644
--- a/frontend/src/app/shared/layout/app-topbar.component.html
+++ b/frontend/src/app/shared/layout/app-topbar.component.html
@@ -17,8 +17,15 @@
>
diff --git a/frontend/src/app/shared/layout/app-topbar.component.ts b/frontend/src/app/shared/layout/app-topbar.component.ts
index 2951703..05984a8 100644
--- a/frontend/src/app/shared/layout/app-topbar.component.ts
+++ b/frontend/src/app/shared/layout/app-topbar.component.ts
@@ -1,5 +1,6 @@
import { CommonModule } from '@angular/common';
import { Component, EventEmitter, Input, Output } from '@angular/core';
+import { FormsModule } from '@angular/forms';
import { TranslateModule } from '@ngx-translate/core';
import { AvatarModule } from 'primeng/avatar';
import { ButtonModule } from 'primeng/button';
@@ -13,7 +14,7 @@ export interface TopbarLanguageOption {
@Component({
selector: 'app-topbar',
standalone: true,
- imports: [CommonModule, TranslateModule, ButtonModule, AvatarModule],
+ imports: [CommonModule, FormsModule, TranslateModule, ButtonModule, AvatarModule],
templateUrl: './app-topbar.component.html'
})
export class AppTopbarComponent {
@@ -31,15 +32,11 @@ export class AppTopbarComponent {
return this.username.slice(0, 2).toUpperCase();
}
- get displayLanguages(): TopbarLanguageOption[] {
- return this.languages.map((option) => ({
- ...option,
- label: `${option.flag} ${option.label}${option.code === this.lang ? ' β' : ''}`
- }));
+ trackByLanguageCode(_: number, option: TopbarLanguageOption) {
+ return option.code;
}
- onLanguageSelect(event: Event) {
- const value = (event.target as HTMLSelectElement).value;
+ onLanguageSelect(value: string) {
this.languageChange.emit(value);
}
}