diff options
| author | Leitwolf11 | 2026-10-03 01:43:43 +0300 |
|---|---|---|
| committer | Leitwolf11 | 2026-10-03 01:43:43 +0300 |
| commit | f25c01f1d173b9e206565207472b58ca51f90803 (patch) | |
| tree | c4244396690eb895815b89802a8c5cb7261f47a9 /frontend/src/pages | |
| parent | 1045265e9ae018cb3d2d94a47d780888c26d04a2 (diff) | |
| download | website-feature/russian-locale.tar.gz | |
Add Russian to the language site and the forum placeholderfeature/russian-locale
Russian (ru-RU) is the third locale of the language site: the shell, the
home, overview and getting-started pages, and the page metadata are fully
translated, and the language menu offers it. The documentation sidebar reads
its labels from the page messages instead of a two-way locale test, and the
stored preference is accepted only when it names a supported locale.
The forum placeholder gets the same three languages. Its language control
is now a menu instead of a two-state button, and an unknown stored or
selected value keeps the current language.
The site API lists the new locale. Verified locally: prettier, the frontend
tests, vue-tsc and the Vite build, the backend tests, and a browser run of
the home and overview pages in Russian.
Diffstat (limited to 'frontend/src/pages')
| -rw-r--r-- | frontend/src/pages/GettingStartedPage.vue | 71 | ||||
| -rw-r--r-- | frontend/src/pages/HomePage.vue | 62 | ||||
| -rw-r--r-- | frontend/src/pages/OverviewPage.vue | 127 |
3 files changed, 248 insertions, 12 deletions
diff --git a/frontend/src/pages/GettingStartedPage.vue b/frontend/src/pages/GettingStartedPage.vue index 78a6889..abbd8d9 100644 --- a/frontend/src/pages/GettingStartedPage.vue +++ b/frontend/src/pages/GettingStartedPage.vue @@ -8,6 +8,8 @@ import { locale } from "../preferences"; const text = { "en-US": { + navOverview: "Overview", + navStart: "Getting started", section: "DOCUMENTATION / GETTING STARTED", title: "Start with the source", lead: "Visual X# is in active development. For now, the repository is the reliable entry point for building the compiler and checking which language features run end to end.", @@ -65,6 +67,8 @@ const text = { examples: "More examples", }, "de-DE": { + navOverview: "Überblick", + navStart: "Erste Schritte", section: "DOKUMENTATION / ERSTE SCHRITTE", title: "Mit dem Quellcode beginnen", lead: "Visual X# wird aktiv entwickelt. Das Repository ist derzeit der zuverlässige Einstieg, um den Compiler zu bauen und den tatsächlich funktionierenden Sprachumfang zu prüfen.", @@ -121,6 +125,65 @@ const text = { spec: "Öffentliche Spezifikation", examples: "Weitere Beispiele", }, + "ru-RU": { + navOverview: "Обзор", + navStart: "Начало работы", + section: "ДОКУМЕНТАЦИЯ / НАЧАЛО РАБОТЫ", + title: "Начните с исходного кода", + lead: "Visual X# находится в активной разработке. Пока что репозиторий — надёжная отправная точка, чтобы собрать компилятор и проверить, какие возможности языка работают от начала до конца.", + step1: "1. Получите репозиторий", + step1Text: + "Клонируйте репозиторий компилятора вместе с подмодулями. Используйте поддерживаемую машину разработки с Windows 10/11 или актуальной macOS.", + step2: "2. Проверьте набор инструментов", + step2Text: + "Команда разработки на Go из репозитория проверяет локальные требования. Компилятор использует GHC2024 для фронтенда на Haskell, Clang/LLVM для нативных стадий на C++20, Bazel для нативных сборок и Temurin JDK 25 для DSL проектов.", + platform: + "Поддерживаемые машины разработки — Windows 10/11 и macOS Sequoia/Tahoe. В Windows используются отдельные LLVM clang-cl и LLD вместе с Windows SDK и библиотеками MSVC CRT/STL. В macOS установите Xcode Command Line Tools; полное приложение Xcode не требуется.", + toolchainHelp: + "Если проверка сообщает об отсутствующих инструментах, необязательная начальная настройка может установить их через менеджер пакетов системы. После этого откройте новый терминал, чтобы изменения PATH вступили в силу. LLVM_ROOT может указывать на каталог установки LLVM для разработки; не записывайте путь, относящийся к конкретной машине, в файлы проекта.", + bootstrap: "Необязательная начальная настройка системы", + step3: "3. Соберите и протестируйте", + step3Text: + "Соберите нативный компилятор и запустите его нативные контрактные наборы тестов. Команда на Go координирует проверки; графом сборки C++20 по-прежнему владеет Bazel. Cabal и Gradle отвечают за свои области — Haskell и Kotlin.", + step4: "4. Прочитайте и проверьте настоящую программу", + step4Text: + "В примере HelloWorld точкой входа служит метод класса. В Visual X# функция верхнего уровня не является точкой входа программы. Проверьте сам исходный файл, а затем соберите его текущим подмножеством компилятора.", + fileCheck: "Проверить один исходный файл", + fileBuild: "Собрать нативный исполняемый файл", + subset: + "Принимаемое подмножество исходного кода уже полной публичной спецификации. Успешная сборка — более сильное свидетельство для конкретной программы, чем синтаксический пример в спецификации; успешный прогон тестов — более сильное свидетельство для семейства возможностей.", + step5: "5. Следуйте публичному контракту", + step5Text: + "Задуманную семантику языка смотрите в публичной спецификации, а сведения о реализации и инструментах — в каталоге Documents репозитория. Вывод -Help компилятора описывает флаги, которые принимает установленный исполняемый файл.", + links: [ + { + title: "Спецификация языка", + detail: "Синтаксические и семантические контракты с допустимыми и недопустимыми примерами.", + href: "https://github.com/Progmasoft/visual-xsharp/tree/main/Spec", + }, + { + title: "Руководство по сборке", + detail: "Официальные платформы, поиск набора инструментов и цели нативной сборки.", + href: "https://github.com/Progmasoft/visual-xsharp/blob/main/Documents/BUILDING.md", + }, + { + title: "Справочник по CLI", + detail: "Текущие команды, флаги, поведение артефактов и состояние реализации.", + href: "https://github.com/Progmasoft/visual-xsharp/blob/main/Documents/CLI.md", + }, + { + title: "Примеры программ", + detail: "Примеры исходного кода рядом с вариантами на C# 13, C++20 и Java 21.", + href: "https://github.com/Progmasoft/visual-xsharp/tree/main/Examples", + }, + ], + note: "Состояние реализации", + noteText: + "Пример из спецификации не доказывает поддержку в компиляторе. Прежде чем полагаться на возможность, запустите тесты репозитория и сверьтесь с актуальными заметками о реализации. Готовые двоичные сборки и стабильный процесс установки пока не обещаны.", + more: "Понять замысел", + spec: "Публичная спецификация", + examples: "Больше примеров", + }, } as const; const c = computed(() => text[locale.value]); const hello = `namespace Examples.HelloWorld; @@ -137,12 +200,8 @@ public class HelloWorld { <div class="doc-layout section-wrap"> <aside class="doc-sidebar"> <span class="kicker">VISUAL X#</span - ><RouterLink to="/docs/overview">{{ - locale === "de-DE" ? "Überblick" : "Overview" - }}</RouterLink - ><RouterLink to="/docs/getting-started" aria-current="page">{{ - locale === "de-DE" ? "Erste Schritte" : "Getting started" - }}</RouterLink + ><RouterLink to="/docs/overview">{{ c.navOverview }}</RouterLink + ><RouterLink to="/docs/getting-started" aria-current="page">{{ c.navStart }}</RouterLink ><a href="https://github.com/Progmasoft/visual-xsharp/tree/main/Spec">Specification ↗</a> </aside> <article class="doc-content"> diff --git a/frontend/src/pages/HomePage.vue b/frontend/src/pages/HomePage.vue index ac11833..9b0d617 100644 --- a/frontend/src/pages/HomePage.vue +++ b/frontend/src/pages/HomePage.vue @@ -131,6 +131,68 @@ const translations = { disclaimer: "Status: Sprache und Compiler entwickeln sich weiter. Beispiele in der Spezifikation können dem derzeitigen Implementierungsstand voraus sein.", }, + "ru-RU": { + eyebrow: "Язык для ясной разработки", + title: "Сделать понятной всю программу.", + intro: + "Visual X# стремится соединить выразительный исходный код с явным владением, прозрачным конвейером компилятора и нативным результатом. Он создаётся открыто: спецификация описывает задуманный язык, а охват реализации пока растёт.", + start: "Начать чтение", + overview: "Почему Visual X#?", + github: "Следить за разработкой", + stage: "Язык и компилятор в активной разработке", + why: "Почему Visual X#?", + whyIntro: + "Хорошие инструменты помогают рассуждать о том, что означает ваш код, чем он владеет и что компилятор сделает дальше.", + features: [ + { + number: "01", + title: "Читаемый код, явный смысл", + text: "Спецификация языка отделяет синтаксис от семантических правил и помечает в примерах допустимые и недопустимые формы. Чем меньше скрытых допущений, тем проще обсуждать большие кодовые базы.", + }, + { + number: "02", + title: "Владение — часть языка", + text: "Ссылочные типы, типы-значения и типы с копированием при записи различаются; AARC и явные промежуточные операции входят в проект компилятора. Это направление в процессе реализации, а не заявление о готовой поддержке во время выполнения.", + }, + { + number: "03", + title: "Компилятор, который можно изучить", + text: "У разбора, разрешения имён, проверки типов, Core, Xpp и Xmm отдельные обязанности. Путь к LLVM и нативному исполняемому файлу виден, а не скрыт в чёрном ящике.", + }, + ], + codeTitle: "Знакомая отправная точка", + codeCaption: + "Первая программа намеренно обычна. Глубина замысла проявляется по мере роста программ.", + statusLabel: "ТЕКУЩЕЕ СОСТОЯНИЕ", + statusTitle: "Проект, который можно изучить. Компилятор, который ещё растёт.", + statusLead: + "У спецификации и реализации разные задачи. Мы показываем обе, чтобы задуманное правило можно было отличить от возможности, которую уже можно запустить.", + statusItems: [ + { + title: "Прочитайте контракт", + body: "Публичная спецификация фиксирует грамматику и семантику языка, включая примеры, различающие допустимые и недопустимые формы. Она может описывать поведение раньше, чем его поддержит компилятор.", + link: "Открыть спецификацию", + href: "https://github.com/Progmasoft/visual-xsharp/tree/main/Spec", + }, + { + title: "Проверьте реализацию", + body: "Текущий компилятор, тесты его компонентов и справочник по CLI показывают, какие пути исходного кода и результаты работают сейчас. Новую возможность сначала проверьте на небольшой программе.", + link: "Читать справочник по CLI", + href: "https://github.com/Progmasoft/visual-xsharp/blob/main/Documents/CLI.md", + }, + { + title: "Следите за работой", + body: "В репозитории находятся язык, нативные стадии компилятора, инструменты проектов, примеры и документы для разработчиков. Этот сайт — путеводитель по этой работе, а не заявление о готовом наборе инструментов.", + link: "Перейти в репозиторий", + href: "https://github.com/Progmasoft/visual-xsharp", + }, + ], + journey: "Познакомьтесь с языком", + journeyText: + "Прочитайте обзор, чтобы понять замысел, затем следуйте руководству по началу работы с текущим набором инструментов. Незавершённое мы честно помечаем.", + disclaimer: + "Статус: язык и компилятор развиваются. Примеры в спецификации могут описывать задуманное поведение раньше его полной поддержки компилятором.", + }, } as const; const c = computed(() => translations[locale.value]); const example = `namespace Examples.HelloWorld; diff --git a/frontend/src/pages/OverviewPage.vue b/frontend/src/pages/OverviewPage.vue index 55529c6..b61347a 100644 --- a/frontend/src/pages/OverviewPage.vue +++ b/frontend/src/pages/OverviewPage.vue @@ -8,6 +8,8 @@ import { locale } from "../preferences"; const text = { "en-US": { + navOverview: "Overview", + navStart: "Getting started", section: "DOCUMENTATION / OVERVIEW", title: "What Visual X# is trying to solve", lead: "Visual X# is designed around a simple question: can expressive code remain understandable when ownership, types, and native compilation matter? This page explains the direction, not a promise that every feature is finished.", @@ -121,6 +123,8 @@ const text = { source: "View source", }, "de-DE": { + navOverview: "Überblick", + navStart: "Erste Schritte", section: "DOKUMENTATION / ÜBERBLICK", title: "Welches Problem Visual X# lösen will", lead: "Visual X# stellt eine Frage: Kann ausdrucksstarker Code verständlich bleiben, wenn Ownership, Typen und native Kompilierung wichtig sind? Diese Seite erklärt das Ziel, nicht die Fertigstellung aller Funktionen.", @@ -233,6 +237,121 @@ const text = { spec: "Spezifikation lesen", source: "Quellcode ansehen", }, + "ru-RU": { + navOverview: "Обзор", + navStart: "Начало работы", + section: "ДОКУМЕНТАЦИЯ / ОБЗОР", + title: "Какую задачу решает Visual X#", + lead: "Visual X# строится вокруг простого вопроса: может ли выразительный код оставаться понятным, когда важны владение, типы и нативная компиляция? Эта страница объясняет направление и не обещает, что каждая возможность уже готова.", + goals: "Цели проектирования", + modelHeading: "Несколько решений языка", + modelIntro: + "Это проектные контракты, описанные в публичной спецификации. Прежде чем считать контракт возможностью, пригодной для реальной работы, проверьте текущий охват компилятора.", + model: [ + { + title: "Точка входа принадлежит классу", + body: "Программа начинается в методе public static void Main() без параметров в настроенном классе входа. Класс может находиться в любом исходном файле; его пространство имён не обязано повторять каталоги.", + }, + { + title: "Типы определяют владение", + body: "Тип остаётся типом-значением, только если каждый вложенный обобщённый аргумент — тип-значение. Ссылочный тип в любом месте обобщённой структуры делает результат ссылочным типом.", + }, + { + title: "Единая стандартная библиотека", + body: "Пространства имён System содержат базовые средства: консольный ввод-вывод, массивы, текст и математику. Пространство имён стандартной библиотеки не является отдельно объявляемой зависимостью-пакетом.", + }, + { + title: "Нативный результат без видимости готового конвейера", + body: "Для реализованного подмножества у компилятора есть путь от исходного кода до нативного кода. Цель — более широкий охват семантики, проверяемые промежуточные границы и надёжная диагностика по мере роста языка.", + }, + ], + pipelineHeading: "У компилятора видимые границы", + pipelineIntro: + "Архитектура намеренно разделена, чтобы каждая стадия могла отклонить некорректный вход и сохранить установленное предыдущей стадией.", + pipeline: [ + { + title: "Исходный код и синтаксис", + body: "Лексер и парсер на Haskell строят разобранное AST, сохраняя позиции в исходном коде для диагностики.", + }, + { + title: "Имена и типы", + body: "Переименование, разрешение имён и проверка типов создают отдельные формы AST: разрешённую и типизированную.", + }, + { + title: "Семантика языка", + body: "Раскрытие синтаксического сахара и оптимизации Core выполняются до внутреннего адаптера CorePrep.", + }, + { + title: "Нативная адаптация", + body: "Стадии Xpp и Xmm на C++20 переносят проверенное, не зависящее от целевой платформы представление к LLVM.", + }, + { + title: "Исполняемый файл", + body: "LLVM понижает проверенную программу до объектного кода, после чего шаг компоновки для платформы создаёт артефакт .vxse.", + }, + ], + boundariesHeading: "Где проходят границы сегодня", + boundaries: [ + { + label: "Публичный контракт языка", + value: "Примеры в Spec/ и связанные руководства в Documents/", + }, + { + label: "Фактическая реализация", + value: "Тесты компилятора, поддерживаемое подмножество и явная диагностика", + }, + { + label: "Описание проекта", + value: "Visual.XSharp.kts, который интерпретирует система проектов на Kotlin", + }, + { + label: "Сайт", + value: "Введение в язык и руководства; без аккаунтов и управления пакетами", + }, + ], + questionHeading: "Частые вопросы", + questions: [ + { + q: "Готов ли Visual X# к использованию в продакшене?", + a: "Общего заявления о готовности к продакшену нет. Компилятор и среда выполнения ещё развиваются. Оценивайте конкретную возможность по тестам репозитория и заметкам к выпускам.", + }, + { + q: "Является ли публичная спецификация исполняемым набором тестов?", + a: "Не целиком. В ней есть задуманные допустимые и недопустимые фрагменты. Некоторые примеры описывают семантику до появления полной поддержки в компиляторе.", + }, + { + q: "Зачем показывать промежуточные стадии?", + a: "У каждой стадии есть владелец и граница проверки. Так поведение компилятора можно проверить, а поздние стадии не придумывают смысл исходного языка.", + }, + { + q: "Нужна ли для Visual X# определённая IDE?", + a: "Нет. Поддерживаемый процесс разработки использует инструменты командной строки в Windows и macOS; проект Xide — будущий интерфейс, а не обязательное условие.", + }, + ], + items: [ + { + title: "Семантика важнее обходных путей", + body: "У исходного языка есть письменная спецификация. Компилятор разделяет разобранный, разрешённый и типизированный синтаксис, чтобы поздние проходы получали явный смысл, а не догадывались.", + }, + { + title: "Владение, за которым можно проследить", + body: "Поведение ссылок и значений определяется составом типов. Автоматический подсчёт ссылок и правила копирования при записи входят в модель языка; поддержка во время выполнения и понижение ещё завершаются.", + }, + { + title: "Продуманный нативный конвейер", + body: "Фронтенд понижает программу через Core и CorePrep, затем Xpp и Xmm подготавливают её к генерации кода LLVM. Границы позволяют выполнять проверку и диагностику на каждой стадии.", + }, + ], + not: "Чем он не является", + notText: + "Visual X# не представлен как готовая замена устоявшимся языкам для продакшена. Спецификация фиксирует задуманную семантику; фактически собираемый охват компилятора следует проверять отдельно. На этом сайте языка нет аккаунтов и управления пакетами.", + next: "Хотите узнать больше?", + nextText: + "Начните с небольшой программы, а затем изучите публичную спецификацию и репозиторий с исходным кодом.", + start: "Начало работы", + spec: "Читать спецификацию", + source: "Смотреть исходный код", + }, } as const; const c = computed(() => text[locale.value]); </script> @@ -241,12 +360,8 @@ const c = computed(() => text[locale.value]); <div class="doc-layout section-wrap"> <aside class="doc-sidebar"> <span class="kicker">VISUAL X#</span - ><RouterLink to="/docs/overview" aria-current="page">{{ - locale === "de-DE" ? "Überblick" : "Overview" - }}</RouterLink - ><RouterLink to="/docs/getting-started">{{ - locale === "de-DE" ? "Erste Schritte" : "Getting started" - }}</RouterLink + ><RouterLink to="/docs/overview" aria-current="page">{{ c.navOverview }}</RouterLink + ><RouterLink to="/docs/getting-started">{{ c.navStart }}</RouterLink ><a href="https://github.com/Progmasoft/visual-xsharp/tree/main/Spec">Specification ↗</a> </aside> <article class="doc-content"> |