Files
deer-flow/frontend/src/core/i18n/context.tsx
2026-01-20 16:00:39 +08:00

42 lines
964 B
TypeScript

"use client";
import { createContext, useContext, useState, type ReactNode } from "react";
import type { Locale } from "@/core/i18n";
export interface I18nContextType {
locale: Locale;
setLocale: (locale: Locale) => void;
}
export const I18nContext = createContext<I18nContextType | null>(null);
export function I18nProvider({
children,
initialLocale,
}: {
children: ReactNode;
initialLocale: Locale;
}) {
const [locale, setLocale] = useState<Locale>(initialLocale);
const handleSetLocale = (newLocale: Locale) => {
setLocale(newLocale);
document.cookie = `locale=${newLocale}; path=/; max-age=31536000`;
};
return (
<I18nContext.Provider value={{ locale, setLocale: handleSetLocale }}>
{children}
</I18nContext.Provider>
);
}
export function useI18nContext() {
const context = useContext(I18nContext);
if (!context) {
throw new Error("useI18n must be used within I18nProvider");
}
return context;
}