axonhub / frontend /src /components /language-provider.tsx
llzai's picture
Upload 1793 files
9853396 verified
import { createContext, useContext, useState, useMemo } from 'react';
import { translations, Language, TranslationKey } from './i18n';
interface LanguageContextType {
language: Language;
setLanguage: (language: Language) => void;
t: (key: TranslationKey) => string;
}
const LanguageContext = createContext<LanguageContextType | undefined>(undefined);
export function LanguageProvider({ children }: { children: React.ReactNode }) {
const [language, setLanguage] = useState<Language>('zh');
const t = useMemo(
() => (key: TranslationKey) => {
return translations[language][key] || key;
},
[language]
);
const value = {
language,
setLanguage,
t,
};
return <LanguageContext.Provider value={value}>{children}</LanguageContext.Provider>;
}
export function useLanguage() {
const context = useContext(LanguageContext);
if (context === undefined) {
throw new Error('useLanguage must be used within a LanguageProvider');
}
return context;
}