Skip to content

feat: add language switcher persistence to LocalStorage - #589

Merged
dark-sarge merged 1 commit into
arflexx:mainfrom
Danielobito009:feature/language-switcher-persistence
Oct 26, 2026
Merged

dark-sarge merged 1 commit into
arflexx:mainfrom
Danielobito009:feature/language-switcher-persistence

Conversation

@Danielobito009

Copy link
Copy Markdown
Contributor

Description

Implements language switcher persistence to LocalStorage, allowing users' selected language preferences to survive across sessions and page reloads.

Closes #455

Changes

  • frontend/lib/storage.ts — New SSR-safe LocalStorage utility module

    • saveLocale() — Persists selected language to LocalStorage under airflex_locale key
    • loadLocale() — Retrieves saved language preference
    • clearLocale() — Clears stored preference
    • Gracefully handles SSR, private browsing mode, and quota exceeded errors
  • frontend/hooks/useLocaleStorage.ts — New reusable locale management hook

    • getSavedLocale() — Returns saved locale or defaults to en if invalid/missing
    • persistLocale() — Validates and saves a locale
    • resetLocalePreference() — Clears stored locale preference
  • frontend/components/LocaleInitializer.tsx — New client component for app-load initialization

    • Runs on mount to restore user's saved language preference
    • Redirects to saved locale if it differs from current
    • Transparent component (renders nothing)
  • frontend/components/LanguageSwitcher.tsx — Updated to persist language selection

    • Calls saveLocale() when user selects a new language
  • frontend/app/layout.tsx — Updated to initialize locale on app load

    • Added LocaleInitializer component to root layout

Acceptance Criteria

  • ✅ Selecting a language saves it to LocalStorage under airflex_locale key
  • ✅ On app load, saved language is applied before first paint
  • ✅ Invalid or unsupported stored values are ignored, falling back to default locale
  • ✅ Persistence helper is reusable and handles SSR/LocalStorage-availability safely
  • ✅ Clearing LocalStorage reverts to default locale behavior

Testing

  • Language selection persists across page reloads
  • Invalid stored values don't break the app
  • Private browsing mode and quota exceeded errors are handled gracefully
  • Locale preference survives browser sessions

- Create storage.ts utility with SSR-safe LocalStorage helpers
- Add useLocaleStorage hook for managing locale preferences
- Create LocaleInitializer component to restore saved locale on app load
- Update LanguageSwitcher to persist selected language
- Update root layout to initialize locale on mount

Implements arflexx#455: Language preferences now persist across sessions
and survive page reloads. Invalid/unsupported values are ignored
and fall back to the default locale.
@dark-sarge
dark-sarge merged commit 4a7c849 into arflexx:main Oct 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Frontend] - Add Language Switcher Persistence to LocalStorage

2 participants