added english language

This commit is contained in:
SlimusMinus
2026-07-09 00:09:45 +03:00
parent 3b503623f6
commit fffcdaa526
33 changed files with 454 additions and 687 deletions

View File

@@ -1,9 +1,12 @@
import { useTranslation } from 'react-i18next';
export default function FinalCta({ onClick }) {
const { t } = useTranslation();
return (
<section className="nk-final-cta">
<h2 className="nk-h2">Кто-то прямо сейчас ищет то, что вы нашли</h2>
<h2 className="nk-h2">{t('landing.finalCta')}</h2>
<button className="nk-cta-primary" onClick={onClick}>
Открыть Находку
{t('landing.openNakhodka')}
</button>
</section>
);

View File

@@ -1,7 +1,10 @@
import { useTranslation } from 'react-i18next';
export default function Footer() {
const { t } = useTranslation();
return (
<footer className="nk-footer">
© {new Date().getFullYear()} Находка. Возвращаем найденное.
{t('landing.footer', { year: new Date().getFullYear() })}
</footer>
);
}

View File

@@ -1,8 +1,10 @@
import { useState } from "react";
import Navbar from "./Navbar";
import RadarBeacon from "./RadarBeacon";
import { useTranslation } from 'react-i18next';
export default function Hero({ onCtaClick, onLoginClick }) {
const { t } = useTranslation();
const [hover, setHover] = useState(false);
return (
@@ -14,15 +16,14 @@ export default function Hero({ onCtaClick, onLoginClick }) {
<Navbar onLoginClick={onLoginClick || onCtaClick} />
<div className="nk-hero-text">
<span className="nk-eyebrow">Сервис поиска пропавших питомцев и вещей</span>
<span className="nk-eyebrow">{t('landing.eyebrow')}</span>
<h1 className="nk-h1">
Потерял — не значит
{t('landing.heroTitle')}
<br />
<span className="nk-accent">потерял навсегда</span>
<span className="nk-accent">{t('landing.heroAccent')}</span>
</h1>
<p className="nk-lead">
Разместите объявление о пропаже или находке — Находка сама сопоставит
похожие записи по фото, месту и описанию и покажет совпадения рядом с вами.
{t('landing.heroLead')}
</p>
<div className="nk-cta-row">
<button
@@ -31,7 +32,7 @@ export default function Hero({ onCtaClick, onLoginClick }) {
onMouseLeave={() => setHover(false)}
onClick={onCtaClick}
>
Начать поиск
{t('landing.startSearch')}
<span
style={{
marginLeft: 8,

View File

@@ -1,10 +1,29 @@
import { useTranslation } from 'react-i18next';
export default function Navbar({ onLoginClick }) {
const { t, i18n } = useTranslation();
const toggleLang = () => {
const next = i18n.language === 'ru' ? 'en' : 'ru';
i18n.changeLanguage(next);
localStorage.setItem('i18nextLng', next);
};
return (
<nav className="nk-nav">
<span className="nk-logo">Находка</span>
<button className="nk-nav-btn" onClick={onLoginClick}>
Войти
</button>
<span className="nk-logo">{t('app.name')}</span>
<div className="nk-nav-right">
<button className="nk-lang-btn" onClick={toggleLang}>
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<circle cx="12" cy="12" r="10"/>
<path d="M2 12h20M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/>
</svg>
{i18n.language === 'ru' ? 'EN' : 'RU'}
</button>
<button className="nk-nav-btn" onClick={onLoginClick}>
{t('landing.login')}
</button>
</div>
</nav>
);
}

View File

@@ -1,15 +1,22 @@
import { steps } from "../../config/landingConstants";
import { useTranslation } from 'react-i18next';
const STEP_KEYS = [
{ titleKey: "landing.step1Title", textKey: "landing.step1Text" },
{ titleKey: "landing.step2Title", textKey: "landing.step2Text" },
{ titleKey: "landing.step3Title", textKey: "landing.step3Text" },
];
export default function StepsSection() {
const { t } = useTranslation();
return (
<section className="nk-steps-section">
<h2 className="nk-h2">Как это работает</h2>
<h2 className="nk-h2">{t('landing.howItWorks')}</h2>
<div className="nk-steps-grid">
{steps.map((s) => (
<div className="nk-step-card" key={s.n}>
<span className="nk-step-num">{s.n}</span>
<h3 className="nk-step-title">{s.title}</h3>
<p className="nk-step-text">{s.text}</p>
{STEP_KEYS.map((s, i) => (
<div className="nk-step-card" key={i}>
<span className="nk-step-num">{`0${i + 1}`}</span>
<h3 className="nk-step-title">{t(s.titleKey)}</h3>
<p className="nk-step-text">{t(s.textKey)}</p>
</div>
))}
</div>