mirror of
https://github.com/laoxong/nofx.git
synced 2026-06-04 01:48:22 +08:00
7d58f56e49
- Add PostgreSQL + SQLite hybrid database support with automatic switching - Implement frontend AES-GCM + RSA-OAEP encryption for sensitive data - Add comprehensive DatabaseInterface with all required methods - Fix compilation issues with interface consistency - Update all database method signatures to use DatabaseInterface - Add missing UpdateTraderInitialBalance method to PostgreSQL implementation - Integrate RSA public key distribution via /api/config endpoint - Add frontend crypto service with proper error handling - Support graceful degradation between encrypted and plaintext transmission - Add directory creation for RSA keys and PEM parsing fixes - Test both SQLite and PostgreSQL modes successfully 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: tinkle-community <tinklefund@gmail.com>
42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import { createContext, useContext, useState, ReactNode } from 'react'
|
|
import type { Language } from '../i18n/translations'
|
|
|
|
interface LanguageContextType {
|
|
language: Language
|
|
setLanguage: (lang: Language) => void
|
|
}
|
|
|
|
const LanguageContext = createContext<LanguageContextType | undefined>(
|
|
undefined
|
|
)
|
|
|
|
export function LanguageProvider({ children }: { children: ReactNode }) {
|
|
// Initialize language from localStorage or default to English
|
|
const [language, setLanguage] = useState<Language>(() => {
|
|
const saved = localStorage.getItem('language')
|
|
return saved === 'en' || saved === 'zh' ? saved : 'en'
|
|
})
|
|
|
|
// Save language to localStorage whenever it changes
|
|
const handleSetLanguage = (lang: Language) => {
|
|
setLanguage(lang)
|
|
localStorage.setItem('language', lang)
|
|
}
|
|
|
|
return (
|
|
<LanguageContext.Provider
|
|
value={{ language, setLanguage: handleSetLanguage }}
|
|
>
|
|
{children}
|
|
</LanguageContext.Provider>
|
|
)
|
|
}
|
|
|
|
export function useLanguage() {
|
|
const context = useContext(LanguageContext)
|
|
if (!context) {
|
|
throw new Error('useLanguage must be used within LanguageProvider')
|
|
}
|
|
return context
|
|
}
|