Files
Compass/web/lib/locale.ts
2026-02-23 12:54:43 +01:00

42 lines
1.0 KiB
TypeScript

import {defaultLocale} from 'common/constants'
import {getTranslationMethod} from 'common/translate'
import {createContext, useContext, useEffect, useState} from 'react'
export type I18nContextType = {
locale: string
setLocale: (locale: string) => void
}
export const I18nContext = createContext<I18nContextType>({
locale: defaultLocale,
setLocale: () => {},
})
export function useLocale() {
return useContext(I18nContext)
}
const messageCache: Record<string, Record<string, string>> = {}
export function useT() {
const {locale} = useLocale()
const [messages, setMessages] = useState<Record<string, string>>(messageCache[locale] ?? {})
useEffect(() => {
if (locale === defaultLocale) return
if (messageCache[locale]) {
setMessages(messageCache[locale])
return
}
import(`common/messages/${locale}.json`)
.then((mod) => {
messageCache[locale] = mod.default
setMessages(mod.default)
})
.catch(() => setMessages({}))
}, [locale])
return getTranslationMethod(locale, messages)
}