/* global React */ const { useState, useRef, useEffect } = React; // ─────────────────────────────────────────────────── // i18n content // ─────────────────────────────────────────────────── const COPY = { ru: { nav: { features: "Возможности", demo: "Демо", languages: "Языки", audience: "Кому подходит", start: "Начать" }, cta: "Открыть в Telegram", hero: { eyebrow: "Бесплатно · GPT‑4o под капотом", title1: "Переводчик,", title2: "который понимает", titleAccent: "как ты говоришь", lead: "Кидай текст, фото, скриншот — на любом языке. Бот сам определит исходный и переведёт естественно, как сказал бы носитель. Без шаблонов и цензуры.", cta: "Открыть @ai_translateme_bot", ctaSecondary: "Что внутри", meta: [ ["22", "языка"], ["GPT‑4o", "движок"], ["0 ₽", "цена"], ], }, features: { eyebrow: "Возможности", title1: "Всё, что нужно для", titleAccent: "живого перевода", sub: "От моментального автоопределения языка до личных словарей и распознавания текста с фото.", list: { autoTitle: "Автоопределение языка", autoDesc: "Не выбирай исходный язык. Бросай текст, фото или скриншот на любом из 100+ языков мира — бот разберётся сам и переведёт на твой целевой.", autoBadge: "Главное", freeTitle: "Полностью бесплатно", freeDesc: "Никаких подписок, лимитов на сообщения и платных тарифов. Поддержать проект можно по желанию через Telegram Stars.", photoTitle: "Перевод фото и скриншотов", photoDesc: "Меню, вывески, страницы книг, скриншоты сериалов — пришли фото и получи распознанный оригинал плюс перевод.", dictTitle: "Личные словари", dictDesc: "До 10 своих словарей. Сохраняй слова прямо из чата при чтении книг или просмотре сериалов — кнопка 📚+ есть на каждом переводе.", voiceTitle: "Голосовые сообщения", voiceDesc: "Распознаём и переводим голосовые. Удобно для разговорников, лекций и сообщений от друзей-иностранцев.", voiceBadge: "Скоро", natTitle: "Естественный, без цензуры", natDesc: "Бот переводит как нейтив: идиомы, сленг, мат и тон сохраняются. Никакого «промтоязыка».", statsTitle: "Уровень слова и стиль", statsDesc: "Тапни «📊 Stats» — узнаешь уровень CEFR, частотность и в каком регистре уместно использовать.", altTitle: "Альтернативные переводы", altDesc: "Для коротких фраз бот сразу предложит несколько вариантов — выбери, что точнее по смыслу.", revTitle: "Обратный перевод", revDesc: "Проверь себя: одной кнопкой переведи результат обратно и сравни с исходником.", }, }, demo: { eyebrow: "Как это выглядит", title1: "Один тап —", titleAccent: "и ты понял", sub: "Минимальный интерфейс, никакого выбора языков и настроек перед каждым сообщением.", points: [ ["Просто пиши", "Любой язык — на входе. Целевой — твой. Всё."], ["Тап — копировать", "Перевод оборачивается в моноширинный блок с одним тапом для копии."], ["Альтернативы и Stats", "На коротких фразах подгружаются варианты, уровень и частотность слова."], ], }, languages: { eyebrow: "22 языка", title1: "Целевой язык —", titleAccent: "по одному тапу", sub: "Выбираешь язык, на который переводить. Исходный определяется автоматически из любого языка.", }, audience: { eyebrow: "Кому подходит", title1: "Если хоть раз", titleAccent: "застревал на чужом языке", sub: "Бот закрывает конкретные ситуации, в которых обычные переводчики раздражают или ломаются.", cards: [ { tag: "Изучающим языки", icon: "📚", pain: "Гугл‑переводчик даёт стерильный текст без оттенков, а словари не показывают, насколько слово живое.", fix: "Естественный перевод как у носителя + уровень CEFR, частотность и регистр на каждое слово. Альтернативы помогут понять оттенки.", }, { tag: "Любителям книг и сериалов", icon: "🎬", pain: "Постоянно лезешь в браузер, теряешь поток, новые слова забываются через час.", fix: "Скриншот страницы или субтитра — мгновенный перевод. Сохраняй слова в личные словари (до 10 штук) и возвращайся к ним позже.", }, { tag: "Путешественникам", icon: "✈️", pain: "Меню в кафе, табличка на вокзале, инструкция в отеле — текст под рукой, но без интернета и времени набирать вручную.", fix: "Сфоткал — получил перевод. OCR + GPT‑4o справляются с рукописью, мелким шрифтом и кривыми углами.", }, { tag: "Работающим с иностранцами", icon: "💼", pain: "Деловая переписка с клиентами и коллегами съедает время, а машинный перевод звучит как робот.", fix: "Идиомы, тон и стиль сохраняются. Обратный перевод даёт убедиться, что отправляешь именно то, что хотел.", }, { tag: "Болтунам в чатах", icon: "💬", pain: "Друг пишет на своём, переводчик стерилизует мат, шутки и сленг — диалог теряет душу.", fix: "Без цензуры. Сленг, мат, ирония — всё на месте. Переписка остаётся живой.", }, { tag: "Тем, кто просто хочет понять", icon: "🌍", pain: "Не знаешь, на каком языке текст, не хочешь разбираться в раскладках и настройках.", fix: "Брось что угодно — на любом языке. Бот определит сам и переведёт. Ноль настроек.", }, ], }, start: { eyebrow: "Старт за 30 секунд", title1: "Начни прямо", titleAccent: "сейчас", steps: [ ["Открой бота", "Нажми кнопку или перейди по @ai_translateme_bot в Telegram."], ["Выбери язык", "Один раз укажи, на какой язык переводить. Можно поменять в любой момент."], ["Пиши что угодно", "Текст, фото, скриншот. На любом языке. Получи перевод за пару секунд."], ], }, final: { title1: "Открой Telegram —", titleAccent: "и начни переводить", sub: "Бесплатно, без регистрации, без лимитов. Работает прямо в Telegram.", cta: "@ai_translateme_bot", }, footer: { tag: "Open source · MIT", links: [["GitHub", "https://github.com/akperm/translator"], ["Telegram", "https://t.me/ai_translateme_bot"]], }, }, en: { nav: { features: "Features", demo: "Demo", languages: "Languages", audience: "Who it's for", start: "Start" }, cta: "Open in Telegram", hero: { eyebrow: "Free · GPT‑4o inside", title1: "A translator", title2: "that gets", titleAccent: "how you talk", lead: "Drop text, photos, or screenshots in any language. The bot detects the source and translates naturally, like a native — no boilerplate, no censorship.", cta: "Open @ai_translateme_bot", ctaSecondary: "What's inside", meta: [ ["22", "languages"], ["GPT‑4o", "engine"], ["$0", "price"], ], }, features: { eyebrow: "Features", title1: "Everything you need for", titleAccent: "living translation", sub: "From instant language auto‑detection to personal dictionaries and OCR for any photo.", list: { autoTitle: "Language auto‑detection", autoDesc: "No need to pick the source. Send text, a photo, or a screenshot in any of 100+ world languages — the bot figures it out and translates to your target.", autoBadge: "Core", freeTitle: "Completely free", freeDesc: "No subscriptions, no message caps, no paid tiers. Support the project optionally with Telegram Stars.", photoTitle: "Photo & screenshot OCR", photoDesc: "Menus, signs, book pages, show subtitles — send a photo and get the recognised original plus a translation.", dictTitle: "Personal dictionaries", dictDesc: "Up to 10 custom dictionaries. Save words right from chat while reading books or watching series — the 📚+ button is on every translation.", voiceTitle: "Voice messages", voiceDesc: "Recognise and translate voice notes. Handy for phrasebooks, lectures, and messages from foreign friends.", voiceBadge: "Soon", natTitle: "Native, uncensored", natDesc: "Translates like a native — idioms, slang, profanity, and tone are preserved. No translation‑ese.", statsTitle: "Word level & style", statsDesc: "Tap '📊 Stats' to see CEFR level, frequency, and the register where it actually fits.", altTitle: "Alternative translations", altDesc: "For short phrases the bot pre‑loads multiple variants — pick the one closest to your intent.", revTitle: "Reverse translation", revDesc: "Sanity‑check yourself: one tap to translate the result back and compare with the source.", }, }, demo: { eyebrow: "What it looks like", title1: "One tap —", titleAccent: "and you got it", sub: "Minimal interface — no language pickers or settings between each message.", points: [ ["Just type", "Any language in. Your target out. That's it."], ["Tap to copy", "Translations come wrapped in a monospace block with one‑tap copy."], ["Alts & stats", "Short phrases pre‑load alternatives, level, and frequency."], ], }, languages: { eyebrow: "22 languages", title1: "Target language —", titleAccent: "one tap away", sub: "Pick the language to translate to. The source is auto‑detected from any language.", }, audience: { eyebrow: "Who it's for", title1: "If you've ever", titleAccent: "got stuck on a foreign language", sub: "Specific situations where regular translators either annoy you or break.", cards: [ { tag: "Language learners", icon: "📚", pain: "Google Translate gives sterile text with no nuance. Dictionaries don't show how alive a word actually is.", fix: "Native‑level translation plus CEFR level, frequency, and register on every word. Alternatives reveal the subtle differences.", }, { tag: "Book & series fans", icon: "🎬", pain: "You keep jumping to a browser, lose the flow, and forget new words within an hour.", fix: "Screenshot a page or subtitle — translation in seconds. Save words to one of 10 personal dictionaries and revisit anytime.", }, { tag: "Travellers", icon: "✈️", pain: "Menus, signs, hotel notes — the text is right there but you have no time to type it out.", fix: "Snap a photo, get a translation. OCR + GPT‑4o handle handwriting, tiny print, and crooked angles.", }, { tag: "Working with foreigners", icon: "💼", pain: "Business chats with clients and colleagues eat time, and machine output sounds like a robot.", fix: "Idioms, tone, and style are preserved. Reverse translation lets you double‑check what you're actually sending.", }, { tag: "Chat people", icon: "💬", pain: "Your friend writes in their language; the translator sanitises slang, jokes, and curses — the chat loses its soul.", fix: "No censorship. Slang, swearing, irony — all intact. The conversation stays alive.", }, { tag: "Just need to understand", icon: "🌍", pain: "You don't know what language it's in and don't want to mess with keyboards and settings.", fix: "Drop anything — in any language. The bot figures it out and translates. Zero configuration.", }, ], }, start: { eyebrow: "Start in 30s", title1: "Get going", titleAccent: "right now", steps: [ ["Open the bot", "Tap the button or go to @ai_translateme_bot in Telegram."], ["Pick a language", "Set your target language once. Change it any time."], ["Send anything", "Text, photo, screenshot — any language. Translation in seconds."], ], }, final: { title1: "Open Telegram —", titleAccent: "and start translating", sub: "Free, no signup, no limits. Lives inside Telegram.", cta: "@ai_translateme_bot", }, footer: { tag: "Open source · MIT", links: [["GitHub", "https://github.com/akperm/translator"], ["Telegram", "https://t.me/ai_translateme_bot"]], }, }, }; // 22 supported languages from bot/config.py const LANGS = [ ["🇬🇧", "English", "EN"], ["🇷🇺", "Русский", "RU"], ["🇪🇸", "Español", "ES"], ["🇫🇷", "Français", "FR"], ["🇩🇪", "Deutsch", "DE"], ["🇨🇳", "中文", "ZH"], ["🇯🇵", "日本語", "JA"], ["🇰🇷", "한국어", "KO"], ["🇸🇦", "العربية", "AR"], ["🇧🇷", "Português", "PT"], ["🇮🇹", "Italiano", "IT"], ["🇹🇷", "Türkçe", "TR"], ["🇮🇳", "हिन्दी", "HI"], ["🇺🇦", "Українська", "UK"], ["🇵🇱", "Polski", "PL"], ["🇮🇷", "فارسی", "FA"], ["🇺🇿", "Oʻzbekcha", "UZ"], ["🇰🇿", "Қазақша", "KK"], ["🇮🇩", "Bahasa Indonesia", "ID"], ["🇻🇳", "Tiếng Việt", "VI"], ["🇧🇩", "বাংলা", "BN"], ["🇲🇾", "Bahasa Melayu", "MS"], ]; window.COPY = COPY; window.LANGS = LANGS;