localization
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
2025-11-09 15:25:03 +09:00
parent 341911a8d3
commit 79f74b83a8
15 changed files with 1524 additions and 16 deletions

View File

@@ -6,6 +6,11 @@ import { usePathname, useRouter } from 'next/navigation'
import Link from 'next/link'
import Image from 'next/image'
import Script from 'next/script'
import { useLocale } from '../contexts/LocaleContext'
import { useTheme } from '../contexts/ThemeContext'
import ThemeToggle from './ThemeToggle'
import LanguageSelector from './LanguageSelector'
import '../layout.css'
interface User {
username: string
@@ -18,6 +23,7 @@ export function LayoutWrapper({ children }: { children: ReactNode }) {
const isDashboard = pathname === '/dashboard'
const [user, setUser] = useState<User | null>(null)
const router = useRouter()
const { t } = useLocale()
// При монтировании пробуем загрузить профиль
useEffect(() => {
@@ -71,16 +77,19 @@ export function LayoutWrapper({ children }: { children: ReactNode }) {
type="button"
data-bs-toggle="collapse"
data-bs-target="#navcol-1"
title={t('common.menu')}
/>
<div className="collapse navbar-collapse" id="navcol-1">
{!user && (
<Link href="/auth/login" className="btn btn-primary ms-auto">
<i className="fa fa-user"></i>
<span className="d-none d-sm-inline"> Вход</span>
<span className="d-none d-sm-inline"> {t('common.login')}</span>
</Link>
)}
{user && (
<div className="ms-auto d-flex align-items-center gap-3">
<ThemeToggle />
<LanguageSelector />
<Image
src={
user.avatar && user.avatar.startsWith('http')
@@ -97,14 +106,14 @@ export function LayoutWrapper({ children }: { children: ReactNode }) {
<span>{user.username}</span>
{!isDashboard && (
<Link href="/dashboard" className="btn btn-outline-secondary btn-sm">
Дашборд
{t('dashboard.title')}
</Link>
)}
<button
onClick={handleLogout}
className="btn btn-outline-danger btn-sm"
>
Выход
{t('common.logout')}
</button>
</div>
)}
@@ -114,7 +123,7 @@ export function LayoutWrapper({ children }: { children: ReactNode }) {
)}
{/* отступ, чтобы контент не прятался под фиксированным хедером */}
{!isPublicUserPage && <div style={{ height: 70 }} />}
{!isPublicUserPage && <div className="navbar-spacing" />}
{children}