37 lines
874 B
TypeScript
37 lines
874 B
TypeScript
import React, { createContext, useContext, useState } from 'react';
|
|
import { en } from '../locales/en';
|
|
import type { Translations } from '../locales/en';
|
|
import { zh } from '../locales/zh';
|
|
|
|
export type Lang = 'en' | 'zh';
|
|
|
|
interface LanguageContextValue {
|
|
lang: Lang;
|
|
t: Translations;
|
|
toggleLang: () => void;
|
|
}
|
|
|
|
const LanguageContext = createContext<LanguageContextValue>({
|
|
lang: 'en',
|
|
t: en,
|
|
toggleLang: () => {},
|
|
});
|
|
|
|
export function LanguageProvider({ children }: { children: React.ReactNode }) {
|
|
const [lang, setLang] = useState<Lang>('en');
|
|
|
|
const toggleLang = () => setLang(l => (l === 'en' ? 'zh' : 'en'));
|
|
|
|
const t = lang === 'en' ? en : zh;
|
|
|
|
return (
|
|
<LanguageContext.Provider value={{ lang, t, toggleLang }}>
|
|
{children}
|
|
</LanguageContext.Provider>
|
|
);
|
|
}
|
|
|
|
export function useLanguage() {
|
|
return useContext(LanguageContext);
|
|
}
|