From 26b2747bfe4df5fa90a61760b68cf610235188a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sat, 2 Aug 2025 11:38:45 +0300 Subject: [PATCH] docs: russian language support --- docs/ru-ru/articles/avalonia/index.md | 0 docs/ru-ru/articles/avalonia/introduction.md | 109 ++++++++++++++++++ docs/ru-ru/articles/blazor-hybrid/index.md | 0 .../articles/blazor-hybrid/introduction.md | 1 + docs/ru-ru/articles/index.md | 3 + docs/ru-ru/index.md | 29 +++++ docs/ru-ru/toc.yml | 10 ++ .../material/partials/footer.tmpl.partial | 4 +- 8 files changed, 155 insertions(+), 1 deletion(-) create mode 100644 docs/ru-ru/articles/avalonia/index.md create mode 100644 docs/ru-ru/articles/avalonia/introduction.md create mode 100644 docs/ru-ru/articles/blazor-hybrid/index.md create mode 100644 docs/ru-ru/articles/blazor-hybrid/introduction.md create mode 100644 docs/ru-ru/articles/index.md create mode 100644 docs/ru-ru/index.md create mode 100644 docs/ru-ru/toc.yml diff --git a/docs/ru-ru/articles/avalonia/index.md b/docs/ru-ru/articles/avalonia/index.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/ru-ru/articles/avalonia/introduction.md b/docs/ru-ru/articles/avalonia/introduction.md new file mode 100644 index 0000000..77f4378 --- /dev/null +++ b/docs/ru-ru/articles/avalonia/introduction.md @@ -0,0 +1,109 @@ +# Вступление + +> [!ОСТОРОЖНО] +> До того, как проект будет иметь стабильную версию, он может содержать нестабильные приложения и функции, включая критические изменения. Пожалуйста, используйте его с осторожностью. + +## Настройка окружения + +> [!ВНИМАНИЕ] +> Последующие действия были протестированы только на Windows. Это не было протестировано на Linux/macOS. + +* [Zig](https://ziglang.org/) предоставляет `linker/sysroot` поддержку для [OpenHarmony-NET.PublishAotCross](https://github.com/OpenHarmony-NET/PublishAotCross?tab=readme-ov-file#openharmony-netpublishaotcross), чтобы разрешить кросс-компиляцию для `linux-x64/linux-arm64/linux-musl-x64/linux-musl-arm64` в Windows. + +```shell +# Установка Zig в Windows с помощью winget +winget install zig.zig +``` + +> [!ПРЕДУПРЕЖДЕНИЕ] +> Не рекомендуется добавлять `clang` к переменным среды, так как это может привести к конфликту с процессом сборки. + +* [LLVM](https://releases.llvm.org/download.html) необходим для процесса компиляции, в котором используется `llvm-objcopy.exe`. Убедитесь, что он существует в переменных вашего окружения + +* .NET 9.0 SDK или выше + +* Последняя версия DevEco Studio + +* _Необязательно_ `Visual Studio 2022` + +* _Необязательно_ `JetBrains Rider` + +## Сборка и запуск + +* Склонируйте [OpenHarmony.Avalonia](https://github.com/OpenHarmony-NET/OpenHarmony.Avalonia). Убедитесь, что для клонирования используется параметр `--recursive`, чтобы включить подмодули. + +```shell +git clone https://github.com/OpenHarmony-NET/OpenHarmony.Avalonia.git --recursive # Включение подмодулей +``` + +* Откройте каталог проекта `OpenHarmony.Avalonia` + +```shell +|-- Directory.Build.props +|-- OHOS_Project +|-- OpenHarmony.Avalonia.sln +|-- README.md +|-- Src +|-- ThirdParty + +3 directories, 3 files +``` + +Затем выполните следующую команду или используйте `Visual Studio 2022`, чтобы открыть `OpenHarmony.Решение Avalonia.sln`, щелкните правой кнопкой мыши на проекте `Entry` и опубликуйте. + +> [!ВНИМАНИЕ] +> `arm64-v8a` подходит для физических устройств, в то время как `x86_64` предназначен для эмуляторов. Пожалуйста, выбирайте в соответствии с типом вашего устройства. + +### [Физическое устройство](#tab/physical) + +```shell +dotnet publish ./Src/Entry/Entry.csproj -c Release -r linux-musl-arm64 -p:PublishAot=true -o OHOS_Project/entry/libs/arm64-v8a +``` + +Или выберите `PublishArm64.pubxml` на странице публикации, затем нажмите кнопку опубликовать. + +### [Эмулятор](#tab/virtual) + +```shell +dotnet publish ./Src/Entry/Entry.csproj -c Release -r linux-musl-x64 -p:PublishAot=true -o OHOS_Project/entry/libs/x86_64 +``` + +Или выберите `PublishAmd64.pubxml` на странице публикации, затем нажмите кнопку опубликовать. + +--- + +* Откройте DevEco Studio, откройте каталог `OHOS_Project`, затем нажмите кнопку запустить. DevEco Studio автоматически установит и запустит приложение на вашем физическом устройстве/эмуляторе. + +> [!ВНИМАНИЕ] +> Запуск на физическом устройстве может потребовать подписания и других процедур, соответствующих обычной разработке программного обеспечения HarmonyOS. + +## Запуск вашего проекта + +* Добавьте свой проект в зависимости `Entry` проекта (т.е `Entry` проект должен ссылаться на ваш проект) + +[И замените это пространство имен пространством имен вашего проекта](https://github.com/OpenHarmony-NET/OpenHarmony.Avalonia/blob/2f0af9d19832c48a69e972eb263caf4a68f381c6/Src/Entry/XComponentEntry.cs#L5) + +```diff +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using Avalonia.OpenHarmony; +using OpenHarmony.NDK.Bindings.Native; +- using AOOH_Gallery; ++ using YourProjectNamespace; + +namespace Entry; +``` + +[Также измените принадлежность класса `App` к проекту](https://github.com/OpenHarmony-NET/OpenHarmony.Avalonia/blob/2f0af9d19832c48a69e972eb263caf4a68f381c6/Src/Entry/XComponentEntry.cs#L21) + +```diff + try + { + Ace.OH_NativeXComponent_RegisterOnFrameCallback(component, &OnSurfaceRendered); + if (XComponents.TryGetValue((nint)component, out var xComponent)) + return; ++ xComponent = new AvaloniaXComponent((nint)component, (nint)window); + XComponents.Add((nint)component, xComponent); + xComponent.OnSurfaceCreated(); + } +``` \ No newline at end of file diff --git a/docs/ru-ru/articles/blazor-hybrid/index.md b/docs/ru-ru/articles/blazor-hybrid/index.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/ru-ru/articles/blazor-hybrid/introduction.md b/docs/ru-ru/articles/blazor-hybrid/introduction.md new file mode 100644 index 0000000..3f59973 --- /dev/null +++ b/docs/ru-ru/articles/blazor-hybrid/introduction.md @@ -0,0 +1 @@ +# Вступление \ No newline at end of file diff --git a/docs/ru-ru/articles/index.md b/docs/ru-ru/articles/index.md new file mode 100644 index 0000000..8b81fc6 --- /dev/null +++ b/docs/ru-ru/articles/index.md @@ -0,0 +1,3 @@ +# Начало работы + +В этой статье рассказывается о том, как разрабатывать собственные библиотеки для системы Harmony с использованием .NET и NDK. Если вы хотите разрабатывать полноценные приложения Harmony OS с использованием .NET, пожалуйста, обратитесь к разделам [Avalonia](avalonia/introduction.md) **и** [Blazor Hybrid](blazor-hybrid/introduction.md). \ No newline at end of file diff --git a/docs/ru-ru/index.md b/docs/ru-ru/index.md new file mode 100644 index 0000000..e163624 --- /dev/null +++ b/docs/ru-ru/index.md @@ -0,0 +1,29 @@ +![OpenHarmony.NET](../_images/Header.png "Привет OpenHarmony.NET") + +# Вступление + +## 🤔Что такое OpenHarmony.NET? + +OpenHarmony.NET это решение, разработанное специально для **OpenHarmony** (включая **HarmonyOS Next**), предназначен для поддержки **.NET** приложений в операционной системе Harmony. С OpenHarmony.NET разработчики смогу использовать знакомые **Avalonia** или **Blazor Hybrid** для разработки Harmony приложений, и даже использовать **C#** вместо **C++** для разработки собственных библиотек. Это предоставляет .NET разработчикам новую платформу, позволяющую легко внедрять стек .NET в экосистему Harmony. + +## 😲Среда выполнения + +### · Статус адаптации +OpenHarmony.NET был успешно адаптирован для **.NET 9**, предоставляя разработчикам стабильную и эффективную среду выполнения. + +### · Ограничения среды выполнения +1. **Только Native AOT**: + Из-за ограничений системы Harmony на ассемблерный код, генерируемый во время выполнения (посмотрите [Harmony System Change Notes](https://developer.huawei.com/consumer/cn/doc/harmonyos-releases-V5/changelogs-for-all-apps-b031-V5#%E5%8C%BF%E5%90%8D%E5%86%85%E5%AD%98%E6%89%A7%E8%A1%8C%E6%9D%83%E9%99%90%E7%AE%A1%E6%8E%A7%E7%AD%96%E7%95%A5%E5%8F%98%E6%9B%B4%E8%AF%B4%E6%98%8E)), JIT (Just-In-Time) не может быть использован. Поэтому OpenHarmony.NET использует **NativeAOT (Native Ahead-Of-Time)** компиляцию. Данный метод генерирует машинный код непосредственно во время компиляции, обеспечивая эффективное выполнение приложения в системе Harmony. + +2. **Невозможно использовать `Marshal.GetDelegateForFunctionPointer` и связанные с ним функции**: + По той же причине, что и выше, рекомендуется прямое использование указателей на функции. + +## 🥰Framework Adaptation + +### Поддерживаемые фреймворки разработки +В настоящий момент OpenHarmony.NET успешно работает со следующими фреймворками: +1. **Avalonia**: это кроссплатформенный UI фреймворк, поддерживающий разработку десктоп приложений на C# и XAML. Более подробно можно узнать тут [Докуметация Avalonia](articles/avalonia/introduction.md). +2. **Blazor Hybrid**: гибридный фреймворк разработки, базирующиеся на Blazor. Позволяет создавать кроссплатформенные приложения с использованием C# и Razor. Более подробно можно узнать тут [Документация Blazor Hybrid](articles/blazor-hybrid/introduction.md). + +### Другие адаптированные фремворки разработки +Мы приглашаем другие .NET фреймворки присоединиться к OpenHarmony.NET. Если вы заинтересованы в адаптации других фреймворков, мы готовы поделиться ценным опытом, накопленным в ходе адаптации Avalonia и Blazor Hybrid, чтобы помочь вам быстро приступить к работе. \ No newline at end of file diff --git a/docs/ru-ru/toc.yml b/docs/ru-ru/toc.yml new file mode 100644 index 0000000..0a0e0cd --- /dev/null +++ b/docs/ru-ru/toc.yml @@ -0,0 +1,10 @@ +- name: Вступление + href: index.md +- name: Начало работы + href: articles/index.md + +- name: Фреймворки разработки +- name: Avalonia + href: articles/avalonia/introduction.md +- name: Blazor Hybrid + href: articles/blazor-hybrid/introduction.md \ No newline at end of file diff --git a/templates/material/partials/footer.tmpl.partial b/templates/material/partials/footer.tmpl.partial index 175e392..942e0be 100644 --- a/templates/material/partials/footer.tmpl.partial +++ b/templates/material/partials/footer.tmpl.partial @@ -7,6 +7,7 @@ This page also provides in following languages 简体中文 English + Русский {{/_appFooter}} @@ -20,7 +21,8 @@ // Define supported languages with their code and element ID const languages = { "zh-cn": { id: "zh-cn-link", name: "简体中文" }, - "en-us": { id: "en-us-link", name: "English" } + "en-us": { id: "en-us-link", name: "English" }, + "ru-ru": { id: "ru-ru-link", name: "Русский" } }; function updateLanguageLinks() {