website-astro/src/utils/i18n.ts

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
}
}