**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
35 lines
1.3 KiB
TypeScript
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>
|
|
</>
|
|
)
|
|
}
|