28 lines
669 B
TypeScript
28 lines
669 B
TypeScript
import { defaultLang, ui } from '../i18n/ui'
|
|
|
|
export function getLangFromUrl(url: URL) {
|
|
const [, lang] = url.pathname.split('/')
|
|
if (lang in ui) return lang as keyof typeof ui
|
|
return defaultLang
|
|
}
|
|
|
|
type NestedKeyOf<T> = {
|
|
[K in keyof T]: T[K] extends object
|
|
? `${K & string}.${NestedKeyOf<T[K]> & string}`
|
|
: K & string
|
|
}[keyof T]
|
|
|
|
export function useTranslations(lang: keyof typeof ui) {
|
|
return function t(key: NestedKeyOf<(typeof ui)[typeof defaultLang]>) {
|
|
const keys = key.split('.')
|
|
let value = ui[lang]
|
|
let fallback = ui[defaultLang]
|
|
|
|
for (const k of keys) {
|
|
value = value?.[k]
|
|
fallback = fallback?.[k]
|
|
}
|
|
|
|
return value || fallback
|
|
}
|
|
}
|