Files
Emil_Shanayev_Resume/components/LangSwitch.tsx
T
EmilandClaude Sonnet 5 04c1cc5877
Deploy to GitHub Pages / build (push) Canceled after 0s
Deploy to GitHub Pages / deploy (push) Canceled after 0s
Make the resume bilingual and part of the shared site chrome
Adds a Russian version (data/resume.ru.json, default language) with an RU/EN
switch stored under the key shared with the front page and the portfolio.
The top bar becomes the site-wide one (brand, Resume, Portfolio, Gitea,
Contact, language, theme) with a second row of anchors for this page's
sections, and the fonts move to Unbounded and Onest so the three pages share
one type system. Portfolio links now point at /portfolio/.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XtcZtnG4GQA1d6mW5PNrS9
2026-09-20 23:48:38 +03:00

32 lines
1.0 KiB
TypeScript

'use client'
import { useLang } from '@/lib/useLang'
import type { Lang } from '@/lib/i18n'
import styles from './topbar.module.css'
/** RU / EN switch. The choice is stored under the key shared with the rest of shanaty.ru. */
export default function LangSwitch() {
const lang = useLang()
const choose = (next: Lang) => {
const html = document.documentElement
html.dataset.lang = next
html.lang = next
document.title = html.getAttribute(`data-title-${next}`) ?? document.title
try {
localStorage.setItem('lang', next)
} catch {
// Storage can be blocked; the language still changes for this visit.
}
window.dispatchEvent(new Event('langchange'))
}
return (
<div className={styles.seg} role="group" aria-label={lang === 'ru' ? 'Язык' : 'Language'}>
{(['ru', 'en'] as const).map((code) => (
<button key={code} type="button" aria-pressed={lang === code} onClick={() => choose(code)}>
{code.toUpperCase()}
</button>
))}
</div>
)
}