mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-07-04 03:21:04 +08:00
- Add 'id' to Language type in translations.ts - Add ~1000 Indonesian translation keys covering all UI sections - Update LanguageContext to persist 'id' in localStorage - Add ID button to Header.tsx language toggle - Add �� option to HeaderBar.tsx desktop dropdown and mobile toggle - Add Indonesian translations to inline text objects in LoginRequiredOverlay, StrategyMarketPage, PositionHistory Closes #XX
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 === 'id' ? 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
|
|
}
|