Files
sag24-website/src/contexts/LanguageContext.jsx
striker 3cb42a4466 Добавить пререндер, партнёров, реквизиты, SEO-улучшения
- SSR-пререндер через Vite + react-dom/server (entry-server.jsx, scripts/prerender.mjs)
- Секция партнёров: RU-CENTER, REG.RU, МТВ, КОНТУР
- Реквизиты компании в футере (ИНН, ОГРН, банк)
- Копирайт с 2011 года
- Логотип увеличен (h-8→h-12 навбар, h-7→h-10 футер)
- favicon.ico пересобран с 16×16, 32×32, 48×48 из logo.png
- og:image и twitter:image переключены на .png
- apple-touch-icon.png и og-image.png сгенерированы через sharp
- SSR-safe: localStorage и window.location проверяются на typeof

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 05:24:01 +03:00

38 lines
931 B
JavaScript

import React, { createContext, useContext, useState } from 'react'
import { ru, en } from '../translations/index.js'
const translations = { ru, en }
const LanguageContext = createContext(null)
export function LanguageProvider({ children }) {
const [lang, setLang] = useState(() => {
return (typeof localStorage !== 'undefined' && localStorage.getItem('lang')) || 'ru'
})
const toggle = () => {
const next = lang === 'ru' ? 'en' : 'ru'
setLang(next)
if (typeof localStorage !== 'undefined') localStorage.setItem('lang', next)
}
const t = (key) => {
const keys = key.split('.')
let value = translations[lang]
for (const k of keys) {
value = value?.[k]
}
return value ?? key
}
return (
<LanguageContext.Provider value={{ lang, toggle, t }}>
{children}
</LanguageContext.Provider>
)
}
export function useLanguage() {
return useContext(LanguageContext)
}