Nicolas Cantu cc49c9d7c1 Add language preference selector in settings
**Motivations:**
- Allow users to set their preferred language (fr/en) in the settings page
- Load language preference from localStorage at startup to configure the application locale

**Root causes:**
- Language preference was only available in the header via LanguageSelector component
- Language preference was stored in IndexedDB instead of localStorage
- No centralized language settings management in the settings page

**Correctifs:**
- Created LanguageSettingsManager component for settings page
- Migrated language storage from IndexedDB to localStorage for consistency
- Updated _app.tsx to load locale from localStorage synchronously at startup
- Updated useI18n hook to use localStorage instead of IndexedDB
- Updated LanguageSelector component to use localStorage instead of IndexedDB

**Evolutions:**
- Added language preference section in settings page (displayed first)
- Language preference is now loaded at application startup from localStorage
- Added translations for language settings (settings.language.*)

**Pages affectées:**
- components/LanguageSettingsManager.tsx (new)
- pages/settings.tsx
- pages/_app.tsx
- hooks/useI18n.ts
- components/LanguageSelector.tsx
- locales/fr.txt
- locales/en.txt
2026-01-06 14:57:38 +01:00

35 lines
1.3 KiB
TypeScript

import Head from 'next/head'
import { PageHeader } from '@/components/PageHeader'
import { Footer } from '@/components/Footer'
import { Nip95ConfigManager } from '@/components/Nip95ConfigManager'
import { KeyManagementManager } from '@/components/KeyManagementManager'
import { CacheUpdateManager } from '@/components/CacheUpdateManager'
import { LanguageSettingsManager } from '@/components/LanguageSettingsManager'
import { t } from '@/lib/i18n'
export default function SettingsPage(): React.ReactElement {
return (
<>
<Head>
<title>{t('settings.title')} - zapwall.fr</title>
<meta name="description" content="Application settings and configuration" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
</Head>
<main className="min-h-screen bg-cyber-darker">
<PageHeader />
<div className="w-full px-4 py-8">
<h1 className="text-3xl font-bold text-neon-cyan mb-8">{t('settings.title')}</h1>
<div className="space-y-8">
<LanguageSettingsManager />
<KeyManagementManager />
<Nip95ConfigManager />
<CacheUpdateManager />
</div>
</div>
<Footer />
</main>
</>
)
}