'use client'; import { createContext, useContext, useState, useEffect, ReactNode } from 'react'; export type Locale = 'en' | 'fr' | 'it' | 'es' | 'de'; export const translations = { en: { 'hero.title1': 'Find the best', 'hero.title2': 'yields', 'hero.title3': 'with complete', 'hero.title4': 'security', 'hero.subtitle': 'Compare stablecoin yields from top DeFi protocols. Our security score helps you make the best choices.', 'nav.topYields': 'Top Yields', 'nav.allPools': 'All Pools', 'nav.security': 'Security', 'nav.faq': 'FAQ', 'security.title': 'How does our security score work?', 'security.subtitle': 'A score from 0 to 100 based on 4 objective criteria', 'security.auditsTitle': 'Security audits', 'security.auditsDesc': 'Number of audits by recognized firms', 'security.ageTitle': 'Age', 'security.ageDesc': 'Protocol age. Older = more battle-tested.', 'security.tvlTitle': 'Liquidity (TVL)', 'security.tvlDesc': 'Total value locked indicates market confidence.', 'security.historyTitle': 'History', 'security.historyDesc': 'No past exploits reduces risk.', 'security.recommendation': 'Our recommendation', 'security.recommendationText': 'We recommend pools with score above 80 for safer investment.', 'common.updated': 'Updated', 'common.realtime': 'Real-time', 'common.audited': 'Audited', 'top.title': 'Top yields', 'top.subtitle': 'Best yields with optimal security score', 'top.annualYield': 'Annual yield', 'top.security': 'Security', 'top.audits': 'audits', 'top.years': 'years', 'top.days': 'days', 'top.deposit': 'Deposit', 'top.exploit': 'exploit', 'top.exploits': 'exploits', 'table.allPools': 'All pools', 'table.protocol': 'Protocol', 'table.asset': 'Asset', 'table.network': 'Network', 'table.security': 'Security', 'table.action': 'Action', 'table.deposit': 'Deposit', 'table.moreInfo': 'More info', 'table.lessInfo': 'Less info', 'table.noPool': 'No pool found', 'table.tryFilters': 'Try changing your filters', 'table.age': 'Age', 'table.exploitHistory': 'Exploit history', 'table.noExploit': 'No exploit', 'table.type': 'Type', 'table.lendingProtocol': 'Lending protocol', 'table.vaultManager': 'Vault manager', 'filters.title': 'Filters', 'filters.active': 'active', 'filters.clear': 'Clear', 'filters.stablecoins': 'Stablecoins', 'filters.networks': 'Networks', 'filters.advanced': 'Advanced filters', 'filters.minApy': 'Minimum APY', 'filters.minTvl': 'Minimum TVL ($)', 'filters.minSecurity': 'Minimum security score', 'filters.all': 'All', 'filters.good': 'Good', 'filters.excellent': 'Excellent', 'filters.premium': 'Premium', }, fr: { 'hero.title1': 'Trouvez les meilleurs', 'hero.title2': 'rendements', 'hero.title3': 'en toute', 'hero.title4': 'sécurité', 'hero.subtitle': 'Comparez les yields stablecoins des principaux protocoles DeFi. Notre score de sécurité vous aide à faire les meilleurs choix.', 'nav.topYields': 'Top Yields', 'nav.allPools': 'Tous les pools', 'nav.security': 'Sécurité', 'nav.faq': 'FAQ', 'security.title': 'Comment fonctionne notre score de sécurité ?', 'security.subtitle': 'Un score de 0 à 100 basé sur 4 critères objectifs', 'security.auditsTitle': 'Audits de sécurité', 'security.auditsDesc': "Nombre d'audits par des firmes reconnues", 'security.ageTitle': 'Ancienneté', 'security.ageDesc': "Plus le protocole est ancien, plus il a fait ses preuves.", 'security.tvlTitle': 'Liquidité (TVL)', 'security.tvlDesc': 'Montant total déposé indique la confiance du marché.', 'security.historyTitle': 'Historique', 'security.historyDesc': "Absence d'exploits réduit le risque.", 'security.recommendation': 'Notre recommandation', 'security.recommendationText': 'Nous recommandons les pools avec un score supérieur à 80.', 'common.updated': 'MAJ', 'common.realtime': 'Temps réel', 'common.audited': 'Audités', 'top.title': 'Top rendements', 'top.subtitle': 'Les meilleurs yields avec un score de sécurité optimal', 'top.annualYield': 'Rendement annuel', 'top.security': 'Sécurité', 'top.audits': 'audits', 'top.years': 'ans', 'top.days': 'jours', 'top.deposit': 'Déposer', 'top.exploit': 'exploit', 'top.exploits': 'exploits', 'table.allPools': 'Tous les pools', 'table.protocol': 'Protocole', 'table.asset': 'Asset', 'table.network': 'Réseau', 'table.security': 'Sécurité', 'table.action': 'Action', 'table.deposit': 'Déposer', 'table.moreInfo': "Plus d'infos", 'table.lessInfo': "Moins d'infos", 'table.noPool': 'Aucun pool trouvé', 'table.tryFilters': 'Essayez de modifier vos filtres', 'table.age': 'Ancienneté', 'table.exploitHistory': 'Historique exploits', 'table.noExploit': 'Aucun exploit', 'table.type': 'Type', 'table.lendingProtocol': 'Protocole de prêt', 'table.vaultManager': 'Gestionnaire de vault', 'filters.title': 'Filtres', 'filters.active': 'actifs', 'filters.clear': 'Effacer', 'filters.stablecoins': 'Stablecoins', 'filters.networks': 'Réseaux', 'filters.advanced': 'Filtres avancés', 'filters.minApy': 'APY minimum', 'filters.minTvl': 'TVL minimum ($)', 'filters.minSecurity': 'Score sécurité minimum', 'filters.all': 'Tous', 'filters.good': 'Bon', 'filters.excellent': 'Excellent', 'filters.premium': 'Premium', }, it: { 'hero.title1': 'Trova i migliori', 'hero.title2': 'rendimenti', 'hero.title3': 'in completa', 'hero.title4': 'sicurezza', 'hero.subtitle': 'Confronta i rendimenti stablecoin dei principali protocolli DeFi. Il nostro punteggio di sicurezza ti aiuta a scegliere.', 'nav.topYields': 'Top Rendimenti', 'nav.allPools': 'Tutti i Pool', 'nav.security': 'Sicurezza', 'nav.faq': 'FAQ', 'security.title': 'Come funziona il nostro punteggio di sicurezza?', 'security.subtitle': 'Un punteggio da 0 a 100 basato su 4 criteri oggettivi', 'security.auditsTitle': 'Audit di sicurezza', 'security.auditsDesc': 'Numero di audit da aziende riconosciute', 'security.ageTitle': 'Età', 'security.ageDesc': 'Più è vecchio il protocollo, più è testato.', 'security.tvlTitle': 'Liquidità (TVL)', 'security.tvlDesc': 'Il valore totale indica la fiducia del mercato.', 'security.historyTitle': 'Storico', 'security.historyDesc': "L'assenza di exploit riduce il rischio.", 'security.recommendation': 'La nostra raccomandazione', 'security.recommendationText': 'Raccomandiamo pool con punteggio superiore a 80.', 'common.updated': 'Agg.', 'common.realtime': 'Tempo reale', 'common.audited': 'Verificati', 'top.title': 'Top rendimenti', 'top.subtitle': 'I migliori yield con punteggio di sicurezza ottimale', 'top.annualYield': 'Rendimento annuale', 'top.security': 'Sicurezza', 'top.audits': 'audit', 'top.years': 'anni', 'top.days': 'giorni', 'top.deposit': 'Deposita', 'top.exploit': 'exploit', 'top.exploits': 'exploit', 'table.allPools': 'Tutti i pool', 'table.protocol': 'Protocollo', 'table.asset': 'Asset', 'table.network': 'Rete', 'table.security': 'Sicurezza', 'table.action': 'Azione', 'table.deposit': 'Deposita', 'table.moreInfo': 'Più info', 'table.lessInfo': 'Meno info', 'table.noPool': 'Nessun pool trovato', 'table.tryFilters': 'Prova a modificare i filtri', 'table.age': 'Età', 'table.exploitHistory': 'Storico exploit', 'table.noExploit': 'Nessun exploit', 'table.type': 'Tipo', 'table.lendingProtocol': 'Protocollo di prestito', 'table.vaultManager': 'Gestore vault', 'filters.title': 'Filtri', 'filters.active': 'attivi', 'filters.clear': 'Cancella', 'filters.stablecoins': 'Stablecoin', 'filters.networks': 'Reti', 'filters.advanced': 'Filtri avanzati', 'filters.minApy': 'APY minimo', 'filters.minTvl': 'TVL minimo ($)', 'filters.minSecurity': 'Punteggio sicurezza minimo', 'filters.all': 'Tutti', 'filters.good': 'Buono', 'filters.excellent': 'Eccellente', 'filters.premium': 'Premium', }, es: { 'hero.title1': 'Encuentra los mejores', 'hero.title2': 'rendimientos', 'hero.title3': 'con total', 'hero.title4': 'seguridad', 'hero.subtitle': 'Compara los yields de stablecoins de los principales protocolos DeFi. Nuestra puntuación de seguridad te ayuda a elegir.', 'nav.topYields': 'Top Rendimientos', 'nav.allPools': 'Todos los Pools', 'nav.security': 'Seguridad', 'nav.faq': 'FAQ', 'security.title': '¿Cómo funciona nuestra puntuación de seguridad?', 'security.subtitle': 'Una puntuación de 0 a 100 basada en 4 criterios objetivos', 'security.auditsTitle': 'Auditorías de seguridad', 'security.auditsDesc': 'Número de auditorías por firmas reconocidas', 'security.ageTitle': 'Antigüedad', 'security.ageDesc': 'Cuanto más antiguo, más probado.', 'security.tvlTitle': 'Liquidez (TVL)', 'security.tvlDesc': 'El valor total indica la confianza del mercado.', 'security.historyTitle': 'Historial', 'security.historyDesc': 'Sin exploits pasados reduce el riesgo.', 'security.recommendation': 'Nuestra recomendación', 'security.recommendationText': 'Recomendamos pools con puntuación superior a 80.', 'common.updated': 'Act.', 'common.realtime': 'Tiempo real', 'common.audited': 'Auditados', 'top.title': 'Top rendimientos', 'top.subtitle': 'Los mejores yields con puntuación de seguridad óptima', 'top.annualYield': 'Rendimiento anual', 'top.security': 'Seguridad', 'top.audits': 'auditorías', 'top.years': 'años', 'top.days': 'días', 'top.deposit': 'Depositar', 'top.exploit': 'exploit', 'top.exploits': 'exploits', 'table.allPools': 'Todos los pools', 'table.protocol': 'Protocolo', 'table.asset': 'Activo', 'table.network': 'Red', 'table.security': 'Seguridad', 'table.action': 'Acción', 'table.deposit': 'Depositar', 'table.moreInfo': 'Más info', 'table.lessInfo': 'Menos info', 'table.noPool': 'Ningún pool encontrado', 'table.tryFilters': 'Intenta cambiar tus filtros', 'table.age': 'Antigüedad', 'table.exploitHistory': 'Historial exploits', 'table.noExploit': 'Sin exploits', 'table.type': 'Tipo', 'table.lendingProtocol': 'Protocolo de préstamo', 'table.vaultManager': 'Gestor de vault', 'filters.title': 'Filtros', 'filters.active': 'activos', 'filters.clear': 'Limpiar', 'filters.stablecoins': 'Stablecoins', 'filters.networks': 'Redes', 'filters.advanced': 'Filtros avanzados', 'filters.minApy': 'APY mínimo', 'filters.minTvl': 'TVL mínimo ($)', 'filters.minSecurity': 'Puntuación seguridad mínima', 'filters.all': 'Todos', 'filters.good': 'Bueno', 'filters.excellent': 'Excelente', 'filters.premium': 'Premium', }, de: { 'hero.title1': 'Finden Sie die besten', 'hero.title2': 'Renditen', 'hero.title3': 'mit voller', 'hero.title4': 'Sicherheit', 'hero.subtitle': 'Vergleichen Sie Stablecoin-Renditen der führenden DeFi-Protokolle. Unser Sicherheits-Score hilft Ihnen bei der Wahl.', 'nav.topYields': 'Top Renditen', 'nav.allPools': 'Alle Pools', 'nav.security': 'Sicherheit', 'nav.faq': 'FAQ', 'security.title': 'Wie funktioniert unser Sicherheits-Score?', 'security.subtitle': 'Ein Score von 0 bis 100 basierend auf 4 objektiven Kriterien', 'security.auditsTitle': 'Sicherheits-Audits', 'security.auditsDesc': 'Anzahl der Audits durch anerkannte Firmen', 'security.ageTitle': 'Alter', 'security.ageDesc': 'Je älter das Protokoll, desto mehr getestet.', 'security.tvlTitle': 'Liquidität (TVL)', 'security.tvlDesc': 'Der Gesamtwert zeigt das Marktvertrauen.', 'security.historyTitle': 'Historie', 'security.historyDesc': 'Keine vergangenen Exploits reduziert das Risiko.', 'security.recommendation': 'Unsere Empfehlung', 'security.recommendationText': 'Wir empfehlen Pools mit Score über 80.', 'common.updated': 'Akt.', 'common.realtime': 'Echtzeit', 'common.audited': 'Geprüft', 'top.title': 'Top Renditen', 'top.subtitle': 'Beste Yields mit optimalem Sicherheits-Score', 'top.annualYield': 'Jahresrendite', 'top.security': 'Sicherheit', 'top.audits': 'Audits', 'top.years': 'Jahre', 'top.days': 'Tage', 'top.deposit': 'Einzahlen', 'top.exploit': 'Exploit', 'top.exploits': 'Exploits', 'table.allPools': 'Alle Pools', 'table.protocol': 'Protokoll', 'table.asset': 'Asset', 'table.network': 'Netzwerk', 'table.security': 'Sicherheit', 'table.action': 'Aktion', 'table.deposit': 'Einzahlen', 'table.moreInfo': 'Mehr Info', 'table.lessInfo': 'Weniger Info', 'table.noPool': 'Kein Pool gefunden', 'table.tryFilters': 'Versuchen Sie, Ihre Filter zu ändern', 'table.age': 'Alter', 'table.exploitHistory': 'Exploit-Historie', 'table.noExploit': 'Kein Exploit', 'table.type': 'Typ', 'table.lendingProtocol': 'Kreditprotokoll', 'table.vaultManager': 'Vault-Manager', 'filters.title': 'Filter', 'filters.active': 'aktiv', 'filters.clear': 'Löschen', 'filters.stablecoins': 'Stablecoins', 'filters.networks': 'Netzwerke', 'filters.advanced': 'Erweiterte Filter', 'filters.minApy': 'Mindest-APY', 'filters.minTvl': 'Mindest-TVL ($)', 'filters.minSecurity': 'Mindest-Sicherheitsscore', 'filters.all': 'Alle', 'filters.good': 'Gut', 'filters.excellent': 'Ausgezeichnet', 'filters.premium': 'Premium', }, } as const; export type TranslationKey = keyof typeof translations.en; export const localeFlags: Record = { en: '🇬🇧', fr: '🇫🇷', it: '🇮🇹', es: '🇪🇸', de: '🇩🇪', }; export const localeNames: Record = { en: 'English', fr: 'Français', it: 'Italiano', es: 'Español', de: 'Deutsch', }; export const locales: Locale[] = ['en', 'fr', 'it', 'es', 'de']; // Contexte i18n interface I18nContextType { locale: Locale; setLocale: (locale: Locale) => void; t: (key: TranslationKey) => string; } const I18nContext = createContext(null); export function useI18n() { const context = useContext(I18nContext); if (!context) throw new Error('useI18n must be used within I18nProvider'); return context; } export function I18nProvider({ children }: { children: ReactNode }) { const [locale, setLocaleState] = useState('en'); const [mounted, setMounted] = useState(false); useEffect(() => { const saved = localStorage.getItem('yiield-locale') as Locale | null; const browserLang = navigator.language.split('-')[0].toLowerCase() as Locale; const initial = saved && locales.includes(saved) ? saved : locales.includes(browserLang) ? browserLang : 'en'; setLocaleState(initial); setMounted(true); }, []); const setLocale = (newLocale: Locale) => { setLocaleState(newLocale); localStorage.setItem('yiield-locale', newLocale); }; const t = (key: TranslationKey): string => { return translations[locale]?.[key] || translations.en[key] || key; }; if (!mounted) return null; return ( {children} ); }