Language Provider Component
A component that sets the HTML lang attribute based on the current route.
Sets the HTML lang attribute.
Installation
pnpm dlx shadcn@latest add https://ui.vllnt.com/r/lang-provider.jsonbash
Usage
import { LangProvider } from '@vllnt/ui'
export function LangProviderExample() {
return <LangProvider />
}tsx
Code
'use client'
import { useEffect } from 'react'
import { usePathname } from 'next/navigation'
import type { SupportedLanguage } from '../../lib/types'
type LangProviderProps = {
defaultLanguage?: SupportedLanguage
supportedLanguages?: SupportedLanguage[]
}
export function LangProvider({
defaultLanguage = 'en',
supportedLanguages = ['en', 'fr'],
}: LangProviderProps) {
const pathname = usePathname()
useEffect(() => {
// Extract language from pathname - matches /en, /fr, /en/, /fr/, etc.
const langMatch = /^\/([a-z]{2})(?:\/|$)/.exec(pathname)
const lang =
langMatch && supportedLanguages.includes(langMatch[1] as SupportedLanguage)
? (langMatch[1] as SupportedLanguage)
: defaultLanguage
// Update the HTML lang attribute
document.documentElement.setAttribute('lang', lang)
}, [pathname, defaultLanguage, supportedLanguages])
return null
}
typescript