Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FFDuBhMKvoWjrWT3ZnGmmr
25 lines
632 B
TypeScript
25 lines
632 B
TypeScript
'use client'
|
|
|
|
import { createContext, useContext } from 'react'
|
|
import type en from '../../messages/en.json'
|
|
|
|
export type Messages = typeof en
|
|
|
|
const I18nContext = createContext<Messages | null>(null)
|
|
|
|
export function I18nProvider({
|
|
messages,
|
|
children,
|
|
}: {
|
|
messages: Messages
|
|
children: React.ReactNode
|
|
}) {
|
|
return <I18nContext.Provider value={messages}>{children}</I18nContext.Provider>
|
|
}
|
|
|
|
export function useTranslations<K extends keyof Messages>(namespace: K): Messages[K] {
|
|
const ctx = useContext(I18nContext)
|
|
if (!ctx) throw new Error('useTranslations must be used inside I18nProvider')
|
|
return ctx[namespace]
|
|
}
|