import { readFile, writeFile } from "node:fs/promises"; import path from "node:path"; import { fileURLToPath } from "node:url"; const rootDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); const pages = ["index.html", "beta-apply.html", "founders.html", "enterprise.html"]; const wordmarkPath = path.join(rootDir, "assets/webflow/images/69ad96a28b06b7552a339137_logtype.svg"); const nodeDcWordmarkSvg = ` NODE.DC `; const translations = new Map([ ["Ssscript™ — Your Webflow AI Launchpad", "NODE.DC — ИИ-платформа для Webflow"], [ "All-in-one custom code, MCP, and AI launchpad for Webflow. Get early access to agentic control, embedded knowledge, and deployment pipeline. Beta May 2026.", "Единая платформа для кастомного кода, MCP и ИИ-агентов в Webflow: контекст проекта, автоматизация, деплой и управляемая разработка.", ], ["All-in-one custom code, MCP, and AI launchpad for Webflow", "Единая платформа для кастомного кода, MCP и ИИ-агентов в Webflow"], ["Ssscript App's Icon", "Иконка NODE.DC"], ["Ssscript App logo", "Логотип NODE.DC"], ["Ssscript App", "NODE.DC"], ["Ssscript™", "NODE.DC"], ["Ssscript", "NODE.DC"], ["ssscript", "NODE.DC"], ["Your Webflow", "Ваш Webflow"], ["AI Toolkit", "ИИ-инструменты"], ["Multiple agents on your Webflow project, from the", "Несколько агентов для проекта Webflow: от"], ["Designer", "Designer"], ["to", "до"], ["Custom Code.", "кастомного кода."], ["Custom Code", "Кастомный код"], ["Custom code", "Кастомный код"], ["custom code", "кастомный код"], ["Complete", "Полный"], ["Agentic Control", "агентный контроль"], ["Integrated with", "Интеграция с"], ["Webflow MCP,", "Webflow MCP,"], ["multi agent mode allows you to work on", "мультиагентный режим позволяет работать с"], ["multiple instances", "несколькими экземплярами"], ["in parallel.", "параллельно."], ["Component", "Компонентная"], ["Library", "библиотека"], ["Library.", "библиотека."], ["Build with", "Собирайте с учетом"], ["AI Agents", "ИИ-агентов"], ["in mind, diverse component setups that provide the backbone, while design the style and prompt advanced functionality.", "разные компонентные заготовки дают основу, а стиль и сложную функциональность можно дорабатывать промптами."], ["Deployment", "Деплой"], ["Pipeline", "пайплайн"], ["One click deploy,", "Деплой в один клик,"], ["continuous pipeline, instant rollback, and fast", "непрерывный пайплайн, мгновенный откат и быстрая"], ["CDN delivery.", "доставка через CDN."], ["Beta release July 2026", "Бета-релиз: июль 2026"], ["Beta release May 2026", "Бета-релиз: май 2026"], ["Release September 2026", "Релиз: сентябрь 2026"], ["Get early access", "Ранний доступ"], ["All in one Custom Code, MCP, AI launchpad for Webflow.", "Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре."], ["All in one Custom Code, MCP, Ai launchpad for Webflow.", "Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре."], ["Всё в одном Custom Code, MCP, AI launchpad for Webflow.", "Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре."], ["Join Waitlist", "Встать в лист ожидания"], ["You're In, thanks.", "Заявка принята. Спасибо."], ["We'll be in touch soon.", "Мы скоро свяжемся."], ["Apply for Beta?", "Подать заявку в бету?"], ["Or get Early founder's access", "Или оформить ранний Founder-доступ"], ["Get Founder Now", "Оформить Founder-доступ"], ["Get Founder Now 350€", "Оформить Founder-доступ 350€"], ["Get Founder Now 310€", "Оформить Founder-доступ 310€"], ["200 Spots Max", "До 200 мест"], ["Nope :(", "Не получилось"], ["Something went wrong.", "Что-то пошло не так."], ["Try again (later maybe)?", "Попробуйте ещё раз чуть позже."], ["Privacy Policy", "Политика конфиденциальности"], ["Cookie Policy", "Политика cookie"], ["Terms of Usage", "Условия использования"], ["© — All Right Reserved", "© — Все права защищены"], ["© 2026", "© 2026"], ["Leave a Message (optional)", "Сообщение (необязательно)"], ["Your Name*", "Ваше имя*"], ["Name", "Имя"], ["close window", "закрыть окно"], ["close", "закрыть"], ["homepage", "главная"], ["Sign-up Email*", "Email для регистрации*"], ["Why you? *", "Почему именно вы? *"], ["Twitter Profile", "Профиль в Twitter"], ["Instagram Profile", "Профиль в Instagram"], ["Portfolio URL", "Ссылка на портфолио"], ["video-demo.mp4", "демо-видео.mp4"], ["One click publish.png", "публикация-в-один-клик.png"], ["Complete code editor.webp", "полноценный-редактор-кода.webp"], ["AI Dock Mode.jpg", "ИИ-док-режим.jpg"], ["Deep Webflow connection.webp", "глубокая-интеграция-webflow.webp"], ["Install, setup and run.jpg", "установка-настройка-запуск.jpg"], ["Pricing.app", "Тарифы.app"], [".txt", ".txt"], ["video-demo.txt", "демо-видео.txt"], ["All in one", "Всё в одном"], ["App.", "приложение."], ["The swiss-army knife for", "Универсальный инструмент для"], ["AI Agent", "ИИ-агентов"], ["in your Webflow project.", "в вашем Webflow-проекте."], ["Contextual Awareness", "Контекст проекта"], ["Connect to the", "Подключитесь к"], ["MCP", "MCP"], ["to give the Agents the full context on your build.", "чтобы агенты получили полный контекст вашей сборки."], ["Agent Swarms", "Группы агентов"], ["Use", "Используйте"], ["multiple agents in parallel", "несколько агентов параллельно"], ["to add custom code, animations, and functionality.", "чтобы добавлять кастомный код, анимации и функциональность."], ["Development Setup", "Среда разработки"], ["Leverage fast", "Используйте быстрые"], ["Bun", "Bun"], ["based builds, and live reload of your", "сборки и автообновление для вашего"], ["custom code.", "кастомного кода."], ["One-click Deploy", "Деплой в один клик"], ["Click and deploy", "Нажмите и публикуйте"], ["your AI written custom code to make it available to all users visiting your website.", "кастомный код, написанный ИИ, чтобы он стал доступен всем посетителям сайта."], ["Agentic", "Агентная"], ["Agent ready", "Готовая к работе с агентами"], ["component", "компонентная"], ["library. One click add (via the Ssscript Webflow app) ready to customise.", "библиотека: добавление в один клик через приложение NODE.DC для Webflow и дальнейшая настройка под проект."], ["AI Mode Switch", "Переключение режимов ИИ"], ["New Project Flow", "Создание нового проекта"], ["AI Dock Mode", "ИИ-док"], ["Account", "Аккаунт"], ["AI Code Editing", "Редактирование кода с ИИ"], ["AI Dev Server", "Dev-сервер с ИИ"], ["Webflow MCP", "Webflow MCP"], ["Publishing", "Публикация"], ["One", "Один"], ["click", "клик"], ["Add.", "добавления."], ["With the", "С помощью"], ["Ssscript Webflow Extension.", "расширения NODE.DC для Webflow."], ["Component Awareness", "Понимание компонентов"], ["Faster Starters", "Быстрый старт"], ["Get a", "Получите"], ["better", "более сильный"], ["MCP.", "MCP."], ["Fully re-engineered faster MCP server.", "Полностью переработанный и более быстрый MCP-сервер."], ["Webflow Awareness", "Понимание Webflow"], ["Flexible", "Гибкие"], ["AI Modes.", "режимы ИИ."], ["Different", "Разные"], ["modes", "режимы"], ["and", "и"], ["models", "модели"], ["for different tasks.", "для разных задач."], ["Frequently", "Частые"], ["Asked", "вопросы"], ["Questions", "и ответы"], ["Detailed overview", "Подробный обзор"], ["of features, functionality and inner workings.", "возможностей, логики работы и внутреннего устройства."], ["Complete Docs", "Полная документация"], ["FAQs", "FAQ"], ["Reply-To", "Ответить"], ["Does it impact performance?", "Это влияет на производительность?"], ["Where are my files hosted?", "Где размещаются мои файлы?"], ["Help! I pushed the wrong files!", "Что делать, если я опубликовал не те файлы?"], ["What's the Webflow AI Agent?", "Что такое Webflow AI Agent?"], ["What is the custom knowledge base?", "Что такое собственная база знаний?"], ["How do I use it with Webflow?", "Как использовать это с Webflow?"], ["What AIs are available?", "Какие ИИ-модели доступны?"], ["How does it work?", "Как это работает?"], ["How does publishing work?", "Как работает публикация?"], ["Does it work with the MCP?", "Это работает с MCP?"], ["As every custom code addition does: the overhead is just the one added by the code itself.", "Как и любой кастомный код, это добавляет только ту нагрузку, которую несёт сам код."], ["Everything is also bundled, minified and compressed, to have the least impact on the project, avoiding loading external libraries and increase the number of CDN based scripts.", "Все файлы собираются, минифицируются и сжимаются, чтобы минимально влиять на проект и не плодить внешние библиотеки и CDN-скрипты."], ["Sent from my iPhone", "Отправлено с iPhone"], ["After the build step, all bundled files are uploaded to Cloudflare R2 and served through a CDN link on ssscript.dev domain, a dedicated CDN for this project, for the fastest, Webflow compatible result.", "После сборки файлы загружаются в Cloudflare R2 и отдаются через CDN-ссылку на выделенном домене проекта, чтобы получить быстрый и совместимый с Webflow результат."], ["In the deploy panel there's the option for an instant rollback.", "В панели деплоя есть мгновенный откат."], ["Hit that, and you'll get the previous deployment working right away, fix locally, and push again.", "Нажмите откат, верните предыдущую рабочую версию, исправьте локально и опубликуйте заново."], ["Other than", "Помимо"], ["default Agent modes, we're working on a", "стандартных режимов агентов мы готовим"], ["mode, made specifically of webflow knowlege, how to interact with the project and how to be effective in it.", "режим, специально заточенный под Webflow: структуру проекта, взаимодействие с ним и эффективную разработку."], ["Built on top of years writing custom code in webflow for animation.", "Основано на многолетнем опыте написания кастомного кода для Webflow-анимаций."], ["WebGl, Threejs, GSAP and custom functionality, we collected best practices, build pipelines, and a module based systems to ensure everything works in unison.", "WebGL, Three.js, GSAP и кастомная функциональность собраны в набор практик, пайплайнов и модульную систему, чтобы всё работало согласованно."], ["A custom component library is also available for you to pick from, add to your project, and ask the AI to modify to fit your needs.", "Также доступна библиотека компонентов: выберите компонент, добавьте в проект и попросите ИИ адаптировать его под задачу."], ["When running the", "При запуске"], [", there's a custom Embed tab.", " доступна отдельная вкладка для встраивания."], ["Depending on your needs, you can get page based scripts, or a unique app.js for the entirety of the project.", "В зависимости от задачи можно получить скрипты для конкретной страницы или единый app.js для всего проекта."], ["The generated link already contains both a deployed version, that'll follow your deploy url, and a local version, allowing you to work on you to preview your code without disturbing other people visiting your website.", "Сгенерированная ссылка содержит и продакшен-версию, следующую за URL деплоя, и локальную версию для предпросмотра без влияния на посетителей сайта."], ["We're using all major models available, from", "Мы используем основные доступные модели:"], ["The model orchestrates automatically based on the request and needs, and you can switch to specific models by selecting them in a toggle.", "Оркестратор выбирает модель под задачу автоматически, но вы можете вручную переключиться на нужную модель."], ["When running, Ssscript is doing 2 things in parallel.", "Во время работы NODE.DC выполняет две задачи параллельно."], ["When running, Ssscript™ is doing 2 things in parallel.", "Во время работы NODE.DC выполняет две задачи параллельно."], ["When running, NODE.DC is doing 2 things in parallel.", "Во время работы NODE.DC выполняет две задачи параллельно."], ["Running a local Development environment, based on Bun, that keeps javascript and typescript files in sync, provides Hot Module Reload (HMR), and keeps a webhook active to automatically refresh your website when changes are made.", "Поднимает локальную среду разработки на Bun, синхронизирует JavaScript и TypeScript, включает HMR и держит webhook для автоматического обновления сайта при изменениях."], ["At the same time, an ai agent orchestrator is running, accessing agents and processing your requests, changing code, checking the build health, and modifying the Webflow project when needed.", "Одновременно работает оркестратор ИИ-агентов: обрабатывает запросы, меняет код, проверяет состояние сборки и при необходимости обновляет проект Webflow."], ["It's a multi step project. First, we use Bun to build, compress, minify and set up the project and libraries used.", "Процесс многоэтапный: сначала Bun собирает, сжимает, минифицирует и подготавливает проект вместе с библиотеками."], ["Then we add to our CDN:", "Затем файлы отправляются в CDN:"], ["ssscript.dev/{USERNAME}/{PROJECT-NAME}", "cdn.node.dc/{USERNAME}/{PROJECT-NAME}"], [". The link already contains the correct structure, so while you keep seeing the local version of the files, everyone else get the right script served instead.", ". Ссылка уже содержит нужную структуру: вы видите локальную версию, а пользователи получают опубликованный скрипт."], ["It's built to work with the Webflow MCP natively.", "Система изначально рассчитана на работу с Webflow MCP."], ["Connect project, set authorization, and the AI Agents have now access to the Webflow build. Connect the App in the webflow Designer to also allow for Designer access, so the agents can update content, create elements, change styles and CSS, and to give the custom code full awareness of the Webflow project.", "Подключите проект и авторизацию, чтобы ИИ-агенты получили доступ к Webflow-сборке. Подключение приложения в Webflow Designer даёт агентам доступ к контенту, элементам, стилям и CSS, а кастомный код получает полный контекст проекта."], ["Connect.", "Подключить."], ["Prompt.", "Поставить задачу."], ["Ship.", "Опубликовать."], ["All in one development to production pipeline.", "Единый путь от разработки до продакшена."], ["12-click total setup,", "Настройка примерно в 12 кликов:"], ["from app download to have it running in your project.", "от скачивания приложения до запуска в проекте."], ["Pricing", "Тарифы"], ["Get Code", "Код"], ["to No-Code,", "для No-Code,"], ["with AI.", "усиленный ИИ."], ["App subscriptions with", "Подписки на приложение с"], ["inlcuded usage in every plan.", "включённым объёмом в каждом тарифе."], ["Token based", "Токенная"], ["pricing for overages.", "оплата сверх лимитов."], ["200 Founder", "200 Founder"], ["spots with locked price for the first year.", "мест с фиксированной ценой на первый год."], ["Beta", "Бета"], ["Free", "Бесплатно"], ["1 Month", "1 месяц"], ["Founder", "Founder"], ["/ Yearly, forever", "/ год, навсегда"], ["50% Discount", "Скидка 50%"], ["Basic", "Basic"], ["/ Month", "/ месяц"], ["Advanced", "Advanced"], ["Dropping", "Старт"], ["Total Availability", "Всего доступно"], ["Expansion (20M)", "Расширение (20M)"], ["Expansion (10M)", "Расширение (10M)"], ["Reasoning Depth", "Глубина рассуждения"], ["Core Intelligence", "Базовый интеллект"], ["Project Workspace", "Рабочее пространство"], ["Token Capacity", "Объём токенов"], ["June 2026", "Июнь 2026"], ["April 2026", "Апрель 2026"], ["May 2026", "Май 2026"], ["Plan Credits", "Кредиты тарифа"], ["Unlimited", "Без ограничений"], ["40,000 Included", "40 000 включено"], ["12,000 Included", "12 000 включено"], ["10 Projects", "10 проектов"], ["All Models", "Все модели"], ["All fast", "Все быстрые"], ["Full", "Полный"], ["Limited", "Ограниченный"], ["Expansion SM 10€", "Расширение SM 10€"], ["Unlimited Refresh", "Обновления без лимита"], ["+ 10,000 Credits", "+ 10 000 кредитов"], ["+ 8,000 Credits", "+ 8 000 кредитов"], ["Expansion MD 20€", "Расширение MD 20€"], ["+ 26,000 Credits", "+ 26 000 кредитов"], ["+ 20,000 Credits", "+ 20 000 кредитов"], ["40 testers", "40 тестировщиков"], ["200 Spots", "200 мест"], ["Apply for Beta", "Подать заявку в бету"], ["Get Basic", "Выбрать Basic"], ["Get Advanced", "Выбрать Advanced"], ["(*) Stuffs might change as testing progresses, though I'll do my best to honour what's here now.", "(*) Условия могут меняться по ходу тестирования, но мы постараемся сохранить заявленные обещания."], ["Enterprise", "Enterprise"], ["BYOK plans available from September 2026.", "BYOK-тарифы будут доступны с сентября 2026."], ["Get in the Beta", "Попасть в бету"], ["Apply only if you think you can follow up with this.", "Подавайте заявку, если готовы действительно тестировать и давать обратную связь."], ["Thanks!", "Спасибо!"], ["We'll reach out if you're a fit.", "Мы свяжемся, если ваш профиль подойдёт для тестирования."], ["Want to", "Хотите"], ["get in early", "получить ранний доступ"], ["and contribute to the development, locking a", "и повлиять на разработку, зафиксировав"], ["yearly discounted 50% advanced access forever?", "годовой Advanced-доступ со скидкой 50% навсегда?"], ["Influence", "Влияйте на"], ["Early Choices", "ранние решения"], ["And", "И"], ["actively participating", "активное участие"], ["actively participate", "активно участвуйте"], ["product roadmap", "дорожная карта продукта"], ["to the product roadmap.", "в формировании дорожной карты продукта."], ["Direct access", "Прямой доступ"], ["To the App.", "к приложению."], ["As an early tester.", "В статусе раннего тестировщика."], ["Infinite credits", "Безлимитные кредиты"], ["and tokens,", "и токены,"], ["unlimiterd projects.", "проекты без ограничений."], ["Discounted", "Льготная"], ["Sign up.", "регистрация."], ["When launching.", "на старте запуска."], ["What's in", "Что входит в"], ["The Beta.", "бету."], ["You'll be", "Вы будете"], ["in the early development stages of the app,", "на ранних этапах разработки приложения,"], ["influencing the development and future direction.", "влияя на развитие и дальнейшее направление продукта."], ["What am I expecting?", "Что мы ожидаем?"], ["Active participation.", "Активное участие."], ["Either through testing scenarios, or even better, to roll it in production.", "Тестовые сценарии, а ещё лучше — применение в реальном продакшене."], ["What you'll get?", "Что вы получите?"], ["I'll be there for you.", "Мы будем рядом на всём пути."], ["Constant communication,", "Постоянная коммуникация,"], ["bug fixing and 1 to 1 involvement.", "исправление ошибок и персональное сопровождение."], ["Where?", "Где?"], ["We'll have a shared, private", "Будет общий закрытый"], ["Discord channel,", "Discord-канал,"], ["with other Beta Testers (~40 ppl).", "с другими бета-тестировщиками (~40 человек)."], ["What you get,", "Что вы получаете:"], ["Preference,", "приоритет,"], ["early and discounted access", "ранний доступ со скидкой"], ["to Founders plan.", "к тарифу Founders."], ["Founders", "Founders"], ["Founders Access", "Founder-доступ"], ["Get in Early.", "Войти раньше остальных."], ["Access the early beta before official release, with benefits.", "Ранний доступ к бете до официального релиза и дополнительные преимущества."], ["/ Yearly, Forever", "/ год, навсегда"], ["Token Capacity Beta", "Токены в бете"], ["Token Capacity After", "Токены после беты"], ["20M / Month", "20M / месяц"], ["€10/€16", "€10/€16"], ["Help fund the", "Поддержите"], ["training", "обучение"], ["fine-tuning", "дообучение"], ["fine tuning", "дообучение"], ["of the", "для"], ["Webflow code model", "кодовой модели Webflow"], [", and the early development of the App.", " и раннюю разработку приложения."], ["Early access", "Ранний доступ"], ["To the Beta", "к бете"], ["You'll get in for the second phase of the beta,", "Вы попадёте во вторую фазу беты,"], ["help test, provide feedback and", "поможете тестировать, давать обратную связь и"], ["shape the future of the app.", "формировать будущее продукта."], ["50% discount", "Скидка 50%"], ["On the advanced plan.", "на тариф Advanced."], ["Yearly, forever.", "Годовой доступ, навсегда."], ["What", "Что означает"], ["Founder", "Founder"], ["Means.", "доступ."], ["Early Beta Access, 50% discount.", "Ранний доступ к бете и скидка 50%."], ["Forever.", "Навсегда."], ["Early Access", "Ранний доступ"], ["Access the app in beta with the testers, you'll get access on the first beta open wave", "Доступ к приложению вместе с тестировщиками: вы попадёте в первую открытую волну беты"], ["in approximately a week.", "примерно через неделю."], ["Lifetime Advanced Perks", "Преимущества Advanced навсегда"], ["at half the price.", "за половину стоимости."], ["At more than", "Более чем"], ["50% discounts.", "50% скидки."], ["All the good stuffs,", "Все ключевые возможности,"], ["less than half the price.", "меньше чем за половину цены."], ["Support the development", "Поддержите разработку"], ["Your money will go towards", "Средства пойдут на"], ["the custom model we're working on.", "кастомной модели, над которой мы работаем."], ["Compare", "Сравните"], ["your", "свои"], ["Options", "варианты"], ["Founders get you access to the second Beta phase, with everything unlimited while testing, for 1 month.", "Founders получают доступ ко второй фазе беты и безлимит на время тестирования в течение 1 месяца."], ["Priced Yearly", "Годовая оплата"], ["supports the custom model fine tuning costs, while giving you Advanced pricing perks, forever.", "помогает покрыть расходы на дообучение модели и навсегда фиксирует преимущества тарифа Advanced."], ["spots total available.", "мест всего доступно."], ["Get in!", "Присоединиться!"], ["Enterprise Plan", "Enterprise-тариф"], ["Bring Your Own Keys.", "Используйте собственные ключи."], ["Extra security and privacy. Use any model.", "Больше безопасности и приватности. Любые модели на ваших условиях."], ["/ Monthly (5 users)", "/ месяц (5 пользователей)"], ["Members Included", "Пользователей включено"], ["5 Seats", "5 мест"], ["6+ Members", "6+ пользователей"], ["+ 40€ / Month / User", "+ 40€ / месяц / пользователь"], ["Get in Touch", "Связаться"], ["Direct", "Прямая"], ["Assistance", "поддержка"], ["Privileged access to", "Приоритетный доступ к"], ["support channels.", "каналам поддержки."], ["Included", "включено"], ["(40€/month) included.", "(40€/месяц) включено."], ["Pay what you use, get unlimited projects.", "Платите за использование и работайте с неограниченным числом проектов."], ["Bring", "Используйте"], ["Your Own", "собственные"], ["Keys.", "ключи."], ["Complete privacy and isolation.", "Полная приватность и изоляция."], ["Pay on your terms.", "Оплата на ваших условиях."], ["Enterprise Pricing", "Enterprise-цены"], ["Use any model.", "Используйте любую модель."], ["Additional Seats", "Дополнительные места"], ["Available at", "Доступны по"], ["discounted price", "льготной цене"], ["(30€/month per user).", "(30€/месяц за пользователя)."], ["Premium Support", "Премиальная поддержка"], ["Available", "Доступна"], ["24h.", "24/7."], ["Navigate", "Навигация"], ["Docs", "Документация"], ["Waitlist", "Лист ожидания"], ["Features", "Возможности"], ["Demo", "Демо"], ["Connect", "Контакты"], ["Twitter", "Twitter"], ["Instagram", "Instagram"], ["Github", "GitHub"], ["Portfolio", "Портфолио"], ["About", "О продукте"], ["Sat Jun 10", "Сб, 10 июня"], ["9:41 AM", "09:41"], ["UPCOMING", "ДАЛЕЕ"], ["— JULY 2026", "— ИЮЛЬ 2026"], ["Open Beta Release", "Открытая бета"], ["Everyone in. Let's build (and debug) together.", "Открываем доступ всем. Будем собирать и отлаживать вместе."], ["JULY 2026", "ИЮЛЬ 2026"], ["Founders Alpha Release", "Альфа для Founder-доступа"], ["Founders Alpha", "Альфа для Founder-доступа"], ["For the second phase of testing, Beta is open to all subscribers with a founders plan.", "На второй фазе тестирования бета открыта для всех подписчиков Founder-тарифа."], ["CURRENTLY", "СЕЙЧАС"], ["Invites are out for the Closed Beta.", "Инвайты в закрытую бету уже отправлены."], ["We're testing basic functionality and AI Integration atm.", "Сейчас тестируем базовую функциональность и ИИ-интеграцию."], ["Webflow AI Agent", "ИИ-агент Webflow"], ["Icon of a MOV video file featuring the QuickTime logo on a white document with a folded corner.", "Иконка MOV-файла."], ["Typed text on a white page, laid out in short lines like a text document preview.", "Иконка текстового файла."], ["Typed text on a white page with a folded top-right corner, featuring an inspirational passage about 'the crazy ones' who challenge norms, create, inspire, and push humanity forward.", "Иконка текстового файла."], ["Txt Apple Icon", "Иконка TXT-файла"], ["Plain white cylindrical trash can with a slightly tapered top.", "Белая иконка корзины."], ["Made in Webflow", ""], ["Federico Valla", "NODE.DC"], ["Federico", "NODE.DC"], ["just found your website, looks great !", "только что нашёл ваш сайт — выглядит отлично!"], ["i d know but yeah", "пока не уверен, но да, интересно"], ["Please let me check this out!", "Дайте, пожалуйста, посмотреть продукт!"], ["GIMME", "ХОЧУ ДОСТУП"], ["Hello!!", "Привет!"], ["We've worked in Webflow since 2016 and use it exclusively. We're also implementing AI into our workflows and I'm very interested in your offering here. Good luck with the launch!", "Мы работаем с Webflow с 2016 года и используем его постоянно. Сейчас внедряем ИИ в процессы, поэтому ваш продукт нам очень интересен. Удачи с запуском!"], ["Just a PSA for all you other devs.. haha I found out about this very early on. One of the favorites ykyk.", "Для всех разработчиков: я нашёл это очень рано. Уже один из фаворитов."], ["Hi can i get early access please i wanna test the ai i need it so much i will really appreciate it", "Здравствуйте, можно получить ранний доступ? Очень хочу протестировать ИИ, это сейчас действительно нужно."], ["interesting. Would love to know more", "Интересно. Хотелось бы узнать больше."], ["Wooooooaaahhh!!", "Вау!"], ["Please let me into the beta!", "Пожалуйста, пустите меня в бету!"], ["I would love to try out this product. Seems very interesting", "С удовольствием протестировал бы продукт. Выглядит очень интересно."], ["Am I the first founder member now? Take my money Fed, make this happen <3", "Я теперь первый Founder? Берите деньги и запускайте это."], ["I'm your biggest fan", "Я ваш главный фанат"], ["hello", "привет"], ["testingggg", "тестирую"], ["Interested", "Интересно"], ["I know Fed!", "Я знаю Fed!"], ["Let me join!", "Пустите меня!"], ["waiting", "жду"], ["I would love early access to this product!", "Очень хочу ранний доступ к продукту!"], ["Whatup homie, the site is 🔥", "Привет, сайт огонь."], ["Hey, we really like your design , cheers!", "Нам очень нравится ваш дизайн. Спасибо!"], [""Goat" refers to the horned, domesticated mammal (Capra aegagrus hircus) known for agility. As a popular acronym, G.O.A.T. means "Greatest of All Time", "G.O.A.T. часто используют как сокращение от Greatest of All Time — «лучший за всё время»."], ]); const translatableAttributes = new Set([ "alt", "aria-label", "arial-label", "content", "data-name", "placeholder", "title", ]); function escapeRegex(value) { return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); } function applyTranslationsToText(text) { let output = text; const ordered = [...translations.entries()].sort((a, b) => b[0].length - a[0].length); for (const [source, target] of ordered) { if (/^[A-Za-z]+$/.test(source) && source.length <= 5) { output = output.replace(new RegExp(`\\b${escapeRegex(source)}\\b`, "g"), target); } else { output = output.split(source).join(target); } } return output; } function patchTag(tag) { return tag.replace(/([\w:-]+)="([^"]*)"/g, (full, name, value) => { if (!translatableAttributes.has(name)) return full; if (/^(https?:|\.\/|\/|summary_large_image|website|width=device-width)/i.test(value)) return full; return `${name}="${applyTranslationsToText(value)}"`; }); } function patchHtmlTextAndTags(html) { const blockPattern = /(]*>[\s\S]*?<\/script>|]*>[\s\S]*?<\/style>|<[^>]+>)/gi; return html .split(blockPattern) .map((part) => { if (!part) return part; if (/^.w-webflow-badge{display:none!important}`; return html.replace("", `${style}`); } function patchPage(html) { let output = html.replace('lang="en"', 'lang="ru"'); output = patchHtmlTextAndTags(output); output = output .replace(/[^<]*<\/title>/, "<title>NODE.DC — ИИ-платформа для Webflow") .replace(/property="og:locale" content="[^"]*"/, 'property="og:locale" content="ru_RU"') .replace( /69ad96a28b06b7552a339137_logtype\.svg(?:\?v=node-dc)?/g, "69ad96a28b06b7552a339137_logtype.svg?v=node-dc" ); return injectLocalizationStyle(output); } function patchCustomRuntime(js) { return js .replace( 'new Intl.DateTimeFormat("en-US",{hour:"numeric",minute:"2-digit",hour12:!0})', 'new Intl.DateTimeFormat("ru-RU",{hour:"2-digit",minute:"2-digit",hour12:!1})' ) .replace( 'let J=$.locale||void 0,H=new Intl.DateTimeFormat(J,{weekday:"long"});', 'let J=$.locale||"ru-RU",H=new Intl.DateTimeFormat(J,{weekday:"short",day:"numeric",month:"short"});' ); } async function main() { for (const page of pages) { const file = path.join(rootDir, page); const html = await readFile(file, "utf8"); await writeFile(file, patchPage(html)); } const appJsPath = path.join(rootDir, "assets/custom/js/app.js"); const appJs = await readFile(appJsPath, "utf8"); await writeFile(appJsPath, patchCustomRuntime(appJs)); await writeFile(wordmarkPath, nodeDcWordmarkSvg); console.log(`Localized ${pages.length} pages to Russian and patched custom runtime.`); } main().catch((error) => { console.error(error); process.exit(1); });