feat(i18n): add Russian (ru) localization support (#798)

This commit is contained in:
AlexZander85
2026-04-10 10:47:42 +05:00
committed by GitHub
Unverified
parent fc9e37c4a3
commit 66b2ddb2dc
22 changed files with 1926 additions and 4 deletions

View File

@@ -30,7 +30,7 @@
</p> </p>
<p align="center"> <p align="center">
<a href="README.md">English</a> | <a href="README.zh-CN.md">简体中文</a> | 日本語 <a href="README.md">English</a> | <a href="README.zh-CN.md">简体中文</a> | 日本語 | <a href="README.ru-RU.md">Русский</a>
</p> </p>
--- ---

View File

@@ -30,7 +30,7 @@
</p> </p>
<p align="center"> <p align="center">
English | <a href="README.zh-CN.md">简体中文</a> | <a href="README.ja-JP.md">日本語</a> English | <a href="README.zh-CN.md">简体中文</a> | <a href="README.ja-JP.md">日本語</a> | <a href="README.ru-RU.md">Русский</a>
</p> </p>
--- ---

477
README.ru-RU.md Normal file
View File

@@ -0,0 +1,477 @@
<p align="center">
<img src="src/assets/logo.svg" width="128" height="128" alt="ClawX Logo" />
</p>
<h1 align="center">ClawX</h1>
<p align="center">
<strong>Десктоп-интерфейс для AI-агентов OpenClaw</strong>
</p>
<p align="center">
<a href="#возможности">Возможности</a> •
<a href="#почему-clawx">Почему ClawX</a> •
<a href="#быстрый-старт">Быстрый старт</a> •
<a href="#архитектура">Архитектура</a> •
<a href="#разработка">Разработка</a> •
<a href="#участие">Участие</a>
</p>
<p align="center">
<img src="https://img.shields.io/badge/platform-MacOS%20%7C%20Windows%20%7C%20Linux-blue" alt="Platform" />
<img src="https://img.shields.io/badge/electron-40+-47848F?logo=electron" alt="Electron" />
<img src="https://img.shields.io/badge/react-19-61DAFB?logo=react" alt="React" />
<a href="https://discord.com/invite/84Kex3GGAh" target="_blank">
<img src="https://img.shields.io/discord/1399603591471435907?logo=discord&labelColor=%20%235462eb&logoColor=%20%23f5f5f5&color=%20%235462eb" alt="chat on Discord" />
</a>
<img src="https://img.shields.io/github/downloads/ValueCell-ai/ClawX/total?color=%23027DEB" alt="Downloads" />
<img src="https://img.shields.io/badge/license-MIT-green" alt="License" />
</p>
<p align="center">
<a href="README.md">English</a> | <a href="README.zh-CN.md">简体中文</a> | <a href="README.ja-JP.md">日本語</a> | Русский
</p>
---
## Обзор
**ClawX** — это мост между мощными AI-агентами и повседневными пользователями. Построенный на базе [OpenClaw](https://github.com/OpenClaw), он превращает управление AI через командную строку в доступный и красивый десктоп-опыт — терминал не нужен.
Автоматизация рабочих процессов, управление AI-каналами или планирование интеллектуальных задач — ClawX предоставляет интерфейс для эффективного использования AI-агентов.
ClawX поставляется с предустановленными лучшими практиками для провайдеров моделей и нативно поддерживает Windows, а также многоязычные настройки. Вы можете тонко настроить расширенные параметры через **Настройки → Дополнительно → Режим разработчика**.
---
## Скриншоты
<p align="center">
<img src="resources/screenshot/ru/chat.png" style="width: 100%; height: auto;">
</p>
<p align="center">
<img src="resources/screenshot/ru/cron.png" style="width: 100%; height: auto;">
</p>
<p align="center">
<img src="resources/screenshot/ru/skills.png" style="width: 100%; height: auto;">
</p>
<p align="center">
<img src="resources/screenshot/ru/channels.png" style="width: 100%; height: auto;">
</p>
<p align="center">
<img src="resources/screenshot/ru/models.png" style="width: 100%; height: auto;">
</p>
<p align="center">
<img src="resources/screenshot/ru/settings.png" style="width: 100%; height: auto;">
</p>
---
## Почему ClawX
Создание AI-агентов не должно требовать владения командной строкой. Философия ClawX проста: **мощные технологии заслуживают интерфейса, который уважает ваше время.**
| Проблема | Решение ClawX |
|----------|---------------|
| Сложная настройка через CLI | Установка в один клик с мастером настройки |
| Редактирование конфигурационных файлов | Визуальные настройки с проверкой в реальном времени |
| Управление процессами | Автоматическое управление жизненным циклом шлюза |
| Несколько AI-провайдеров | Единая панель настройки провайдеров |
| Установка навыков/плагинов | Встроенный маркетплейс и управление навыками |
### OpenClaw внутри
ClawX построен непосредственно на официальном ядре **OpenClaw**. Вместо отдельной установки мы встраиваем среду выполнения в приложение для бесшовного опыта "всё включено".
Мы стремимся поддерживать строгое соответствие с проектом OpenClaw, чтобы вы всегда имели доступ к новейшим возможностям, улучшениям стабильности и совместимости с экосистемой.
---
## Возможности
### 🎯 Нулевой порог настройки
Весь процесс — от установки до первого взаимодействия с AI — выполняется через интуитивный графический интерфейс. Без терминальных команд, без YAML-файлов, без поиска переменных окружения.
### 💬 Интеллектуальный интерфейс чата
Общайтесь с AI-агентами через современный чат. Поддержка нескольких контекстов разговора, истории сообщений, рендеринга Markdown и прямая маршрутизация через `@agent` в главном поле ввода для мультиагентных конфигураций.
При выборе другого агента через `@agent` ClawX переключается непосредственно в контекст этого агента вместо ретрансляции через агента по умолчанию. Рабочие пространства агентов по умолчанию разделены, но более строгая изоляция зависит от настроек песочницы OpenClaw.
Каждый агент может переопределить свои настройки `provider/model`; агенты без переопределения продолжают наследовать глобальную модель по умолчанию.
### 📡 Управление несколькими каналами
Настраивайте и отслеживайте несколько AI-каналов одновременно. Каждый канал работает независимо, позволяя запускать специализированных агентов для разных задач.
Каждый канал теперь поддерживает несколько учётных записей, привязку агента к учётной записи и переключение канала по умолчанию прямо на странице Каналы.
Для пользовательских идентификаторов учётных записей каналов ClawX требует совместимый с OpenClaw канонический формат (`[a-z0-9_-]`, строчные буквы, максимум 64 символа, должен начинаться с буквы или цифры) для предотвращения ошибок маршрутизации.
ClawX также включает официальный плагин личного WeChat от Tencent, позволяя подключить WeChat напрямую со страницы Каналы через встроенный QR-код.
### ⏰ Автоматизация по расписанию
Планируйте автоматический запуск AI-задач. Определяйте триггеры, устанавливайте интервалы и позволяйте AI-агентам работать круглосуточно без ручного вмешательства.
На странице Cron теперь можно настроить внешнюю доставку непосредственно в форме задачи с отдельными селекторами учётной записи отправителя и цели получателя. Для поддерживаемых каналов цели получателей автоматически обнаруживаются из каталогов каналов или известной истории сессий, поэтому больше не нужно редактировать `jobs.json` вручную.
### 🧩 Расширяемая система навыков
Расширяйте возможности AI-агентов готовыми навыками. Просматривайте, устанавливайте и управляйте навыками через встроенную панель — менеджеры пакетов не нужны.
ClawX также предварительно упаковывает полные навыки обработки документов (`pdf`, `xlsx`, `docx`, `pptx`), автоматически развёртывает их в управляемый каталог навыков (по умолчанию `~/.openclaw/skills`) при запуске и включает по умолчанию при первой установке. Дополнительные упакованные навыки (`find-skills`, `self-improving-agent`, `tavily-search`, `brave-web-search`) также включены по умолчанию; если необходимые API-ключи отсутствуют, OpenClaw покажет ошибки конфигурации во время выполнения.
На странице Навыки отображаются навыки из нескольких источников OpenClaw (управляемый каталог, workspace и дополнительные каталоги навыков), а также показывается фактическое расположение каждого навыка для прямого открытия папки.
Переменные окружения для встроенных поисковых навыков:
- `BRAVE_SEARCH_API_KEY` для `brave-web-search`
- `TAVILY_API_KEY` для `tavily-search` (OAuth также может поддерживаться вышестоящей средой выполнения)
- `find-skills` и `self-improving-agent` не требуют API-ключей
### 🔐 Безопасная интеграция провайдеров
Подключайтесь к нескольким AI-провайдерам (OpenAI, Anthropic и др.) с учётными данными, безопасно хранящимися в системной связке ключей. OpenAI поддерживает как API-ключи, так и OAuth через браузер (подписка Codex).
Для провайдеров **Custom**, используемых с OpenAI-совместимыми шлюзами, вы можете установить пользовательский `User-Agent` в **Настройки → AI Провайдеры → Редактировать провайдера** для совместимости с чувствительными эндпоинтами.
Когда совместимый шлюз отклоняет `/models` по причинам, не связанным с аутентификацией, ClawX автоматически переключается на легковесный зонд `/chat/completions` или `/responses` при проверке API-ключа.
### 🌙 Адаптивные темы
Светлая тема, тёмная тема или синхронизация с системой. ClawX автоматически адаптируется к вашим предпочтениям.
### 🚀 Управление автозапуском
В **Настройки → Общие** вы можете включить **Запускать при старте системы**, чтобы ClawX автоматически запускался после входа в систему.
---
## Быстрый старт
### Системные требования
- **Операционная система**: macOS 11+, Windows 10+ или Linux (Ubuntu 20.04+)
- **Память**: минимум 4 ГБ RAM (рекомендуется 8 ГБ)
- **Хранилище**: 1 ГБ свободного места на диске
### Установка
#### Готовые релизы (рекомендуется)
Скачайте последний релиз для вашей платформы со страницы [Releases](https://github.com/ValueCell-ai/ClawX/releases).
#### Сборка из исходников
```bash
# Клонирование репозитория
git clone https://github.com/ValueCell-ai/ClawX.git
cd ClawX
# Инициализация проекта
pnpm run init
# Запуск в режиме разработки
pnpm dev
```
### Первый запуск
При первом запуске ClawX **Мастер настройки** проведёт вас через:
1. **Язык и регион** — настройка предпочтительного языка и региона
2. **AI-провайдер** — добавление провайдеров с API-ключами или OAuth (для провайдеров, поддерживающих вход через браузер/устройство)
3. **Пакеты навыков** — выбор предустановленных навыков для распространённых сценариев
4. **Проверка** — тестирование конфигурации перед входом в основной интерфейс
Мастер предварительно выбирает системный язык, если он поддерживается, иначе переключается на английский.
### Настройки прокси
ClawX включает встроенные настройки прокси для сред, где Electron, шлюз OpenClaw или каналы вроде Telegram должны выходить в интернет через локальный прокси-клиент.
Откройте **Настройки → Шлюз → Прокси** и настройте:
- **Прокси-сервер**: прокси по умолчанию для всех запросов
- **Правила обхода**: хосты, которые должны подключаться напрямую, разделённые точкой с запятой, запятыми или новыми строками
- В **Режиме разработчика** можно дополнительно переопределить:
- **HTTP Прокси**
- **HTTPS Прокси**
- **ALL_PROXY / SOCKS**
Рекомендуемые примеры локальных настроек:
```text
Прокси-сервер: http://127.0.0.1:7890
```
Примечания:
- Значение `host:port` рассматривается как HTTP.
- Если расширенные поля прокси пусты, ClawX использует `Прокси-сервер`.
- Сохранение настроек прокси немедленно повторно применяет сеть Electron и автоматически перезапускает шлюз.
- ClawX также синхронизирует прокси с конфигурацией канала Telegram в OpenClaw, когда Telegram включён.
- При перезапуске шлюза существующий прокси канала Telegram сохраняется, если прокси ClawX отключен.
- Чтобы явно очистить прокси Telegram из конфигурации OpenClaw, сохраните настройки прокси с отключенным прокси.
- В **Настройки → Дополнительно → Разработчик** можно запустить **OpenClaw Doctor** для выполнения `openclaw doctor --json` и просмотра диагностического вывода, не покидая приложение.
- В упакованных сборках Windows встроенный `openclaw` CLI/TUI запускается через поставляемый `node.exe` для стабильного поведения ввода в терминале.
---
## Архитектура
ClawX использует **двухпроцессную архитектуру с унифицированным уровнем Host API**. Рендерер обращается к единой абстракции клиента, а Electron Main управляет выбором протокола и жизненным циклом процессов:
```
┌─────────────────────────────────────────────────────────────────┐
│ Десктоп-приложение ClawX │
│ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ Главный процесс Electron │ │
│ │ • Управление жизненным циклом окна и приложения │ │
│ │ • Наблюдение за процессом шлюза │ │
│ │ • Интеграция с системой (трей, уведомления, связка ключей)│ │
│ │ • Оркестрация автообновлений │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │ │
│ IPC (авторитетная плоскость управления) │
│ ▼ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ Процесс рендерера React │ │
│ │ • Современный UI на компонентах (React 19) │ │
│ │ • Управление состоянием с Zustand │ │
│ │ • Унифицированные вызовы host-api/api-client │ │
│ │ • Рендеринг Markdown │ │
│ └────────────────────────────────────────────────────────────┘ │
└──────────────────────────────┬──────────────────────────────────┘
Стратегия транспорта, управляемая Main
(Сначала WS, затем HTTP, затем IPC)
┌─────────────────────────────────────────────────────────────────┐
│ Host API и прокси-уровень Main │
│ │
│ • hostapi:fetch (прокси Main, избегает CORS в dev/prod) │
│ • gateway:httpProxy (Рендерер не вызывает Gateway HTTP напрямую)│
│ • Унифицированное отображение ошибок и повторные попытки │
└──────────────────────────────┬──────────────────────────────────┘
Резерв WS / HTTP / IPC
┌─────────────────────────────────────────────────────────────────┐
│ Шлюз OpenClaw │
│ │
│ • Среда выполнения AI-агентов и оркестрация │
│ • Управление каналами сообщений │
│ • Среда выполнения навыков/плагинов │
│ • Уровень абстракции провайдеров │
└─────────────────────────────────────────────────────────────────┘
```
### Принципы проектирования
- **Изоляция процессов**: Среда выполнения AI работает в отдельном процессе, обеспечивая отзывчивость UI даже при тяжёлых вычислениях
- **Единая точка входа для фронтенда**: Запросы рендерера проходят через host-api/api-client; детали протокола скрыты за стабильным интерфейсом
- **Владение транспортом в Main**: Electron Main управляет использованием WS/HTTP и откатом к IPC для надёжности
- **Корректное восстановление**: Встроенная логика переподключения, таймаутов и отката автоматически обрабатывает временные сбои
- **Безопасное хранение**: API-ключи и конфиденциальные данные используют нативные механизмы безопасного хранения ОС
- **Безопасность CORS**: Локальный HTTP-доступ проксируется через Main, предотвращая CORS-проблемы на стороне рендерера
### Модель процессов и устранение неполадок шлюза
- ClawX — это приложение Electron, поэтому **один экземпляр приложения обычно отображается как несколько процессов ОС** (main/renderer/zygote/utility). Это нормально.
- Защита единственного экземпляра использует блокировку Electron плюс локальный файл блокировки процессов, предотвращая дублирование запуска приложения в средах с нестабильным IPC/сессионной шиной.
- При последовательных обновлениях смешанные старые/новые версии могут иметь асимметричное поведение защиты. Для лучшей надёжности обновите все десктоп-клиенты до одной версии.
- Слушатель шлюза OpenClaw должен быть **единственным владельцем**: только один процесс должен слушать `127.0.0.1:18789`.
- Для проверки активного слушателя:
- macOS/Linux: `lsof -nP -iTCP:18789 -sTCP:LISTEN`
- Windows (PowerShell): `Get-NetTCPConnection -LocalPort 18789 -State Listen`
- Нажатие кнопки закрытия окна (`X`) скрывает ClawX в трей; это **не** полностью закрывает приложение. Используйте меню трея **Quit ClawX** для полного завершения.
---
## Варианты использования
### 🤖 Персональный AI-ассистент
Настройте универсального AI-агента, который может отвечать на вопросы, составлять письма, резюмировать документы и помогать с повседневными задачами — всё через чистый десктоп-интерфейс.
### 📊 Автоматизированный мониторинг
Настройте запланированных агентов для отслеживания новостных лент, цен или определённых событий. Результаты доставляются в ваш предпочтительный канал уведомлений.
### 💻 Производительность разработчика
Интегрируйте AI в рабочий процесс разработки. Используйте агентов для проверки кода, генерации документации или автоматизации повторяющихся задач кодирования.
### 🔄 Автоматизация рабочих процессов
Связывайте несколько навыков для создания сложных конвейеров автоматизации. Обрабатывайте данные, преобразовывайте контент и запускайте действия — всё визуально оркестрируется.
---
## Разработка
### Требования
- **Node.js**: 22+ (рекомендуется LTS)
- **Менеджер пакетов**: pnpm 9+ (рекомендуется) или npm
### Структура проекта
```
ClawX/
├── electron/ # Главный процесс Electron
│ ├── api/ # Маршрутизатор API и обработчики Main
│ │ └── routes/ # Модули маршрутов RPC/HTTP прокси
│ ├── services/ # Службы провайдеров, секретов и среды выполнения
│ │ ├── providers/ # Логика синхронизации моделей provider/account
│ │ └── secrets/ # Связка ключей ОС и хранилище секретов
│ ├── shared/ # Общие схемы провайдеров и константы
│ │ └── providers/
│ ├── main/ # Точка входа приложения, окна, регистрация IPC
│ ├── gateway/ # Менеджер процесса шлюза OpenClaw
│ ├── preload/ # Безопасный IPC-мост
│ └── utils/ # Утилиты (хранилище, аутентификация, пути)
├── src/ # Процесс рендерера React
│ ├── lib/ # Унифицированный фронтенд API и модель ошибок
│ ├── stores/ # Хранилища Zustand (settings/chat/gateway)
│ ├── components/ # Переиспользуемые UI-компоненты
│ ├── pages/ # Setup/Dashboard/Chat/Channels/Skills/Cron/Settings
│ ├── i18n/ # Ресурсы локализации
│ └── types/ # Определения типов TypeScript
├── tests/
│ ├── e2e/ # Сквозные дымовые тесты Playwright Electron
│ └── unit/ # Модульные/интеграционные тесты Vitest
├── resources/ # Статические ресуры (иконки, изображения)
└── scripts/ # Скрипты сборки и утилит
```
### Доступные команды
```bash
# Разработка
pnpm run init # Установить зависимости + скачать uv
pnpm dev # Запуск с горячей перезагрузкой (автоподготовка упакованных навыков при отсутствии)
# Качество кода
pnpm lint # Запустить ESLint
pnpm typecheck # Проверка типов TypeScript
# Тестирование
pnpm test # Запустить модульные тесты
pnpm run test:e2e # Запустить E2E дымовые тесты Electron с Playwright
pnpm run test:e2e:headed # Запустить E2E тесты Electron с видимым окном
pnpm run comms:replay # Вычислить метрики повторного воспроизведения коммуникаций
pnpm run comms:baseline # Обновить базовый снимок коммуникаций
pnpm run comms:compare # Сравнить метрики воспроизведения с базовыми порогами
# Сборка и упаковка
pnpm run build:vite # Собрать только фронтенд
pnpm build # Полная production-сборка (с ресурсами упаковки)
pnpm package # Упаковать для текущей платформы (включает предустановленные навыки)
pnpm package:mac # Упаковать для macOS
pnpm package:win # Упаковать для Windows
pnpm package:linux # Упаковать для Linux
```
На headless Linux запускайте тесты Electron под сервером отображения, например `xvfb-run -a pnpm run test:e2e`.
### Проверка регрессии коммуникаций
Когда PR изменяет пути коммуникации (события шлюза, поток отправки/получения чата, доставка каналов или откат транспорта), запустите:
```bash
pnpm run comms:replay
pnpm run comms:compare
```
`comms-regression` в CI проверяет обязательные сценарии и пороги.
### E2E-тесты Electron
Сьют Playwright Electron запускает упакованный рендерер и главный процесс из `dist/` и `dist-electron/`, поэтому не требует предварительного ручного запуска `pnpm dev`.
`pnpm run test:e2e` автоматически:
- собирает рендерер и пакеты Electron с `pnpm run build:vite`
- запускает Electron в изолированном режиме E2E с временным `HOME`
- использует временный каталог `userData` ClawX
- пропускает тяжёлые побочные эффекты запуска, такие как автозапуск шлюза, установку упакованных навыков, создание трея и автоустановку CLI
Первые два базовых спецификации покрывают:
- видимость мастера настройки при первом запуске на чистом профиле
- пропуск настройки и навигация на страницу Models внутри приложения Electron
Добавляйте будущие потоки Electron в `tests/e2e/` и переиспользуйте общий fixture в `tests/e2e/fixtures/electron.ts`.
### Технологический стек
| Уровень | Технология |
|----------------|-------------------------------|
| Среда выполнения | Electron 40+ |
| UI-фреймворк | React 19 + TypeScript |
| Стилизация | Tailwind CSS + shadcn/ui |
| Состояние | Zustand |
| Сборка | Vite + electron-builder |
| Тестирование | Vitest + Playwright |
| Анимация | Framer Motion |
| Иконки | Lucide React |
---
## Участие
Мы приветствуем вклад сообщества! Исправления багов, новые функции, улучшения документации или переводы — каждый вклад делает ClawX лучше.
### Как внести вклад
1. **Сделайте форк** репозитория
2. **Создайте** ветку функции (`git checkout -b feature/amazing-feature`)
3. **Зафиксируйте** изменения с понятными сообщениями
4. **Отправьте** в свою ветку
5. **Откройте** Pull Request
### Руководящие принципы
- Следуйте существующему стилю кода (ESLint + Prettier)
- Пишите тесты для нового функционала
- Обновляйте документацию по мере необходимости
- Держите коммиты атомарными и описательными
---
## Благодарности
ClawX построен на плечах отличных проектов с открытым исходным кодом:
- [OpenClaw](https://github.com/OpenClaw) Среда выполнения AI-агентов
- [Electron](https://www.electronjs.org/) Кроссплатформенный десктоп-фреймворк
- [React](https://react.dev/) Библиотека UI-компонентов
- [shadcn/ui](https://ui.shadcn.com/) Красиво спроектированные компоненты
- [Zustand](https://github.com/pmndrs/zustand) Легковесное управление состоянием
---
## Сообщество
Присоединяйтесь к нашему сообществу, чтобы общаться с другими пользователями, получать поддержку и делиться опытом.
| WeChat Enterprise | Feishu Group | Discord |
| :---: | :---: | :---: |
| <img src="src/assets/community/wecom-qr.png" width="150" alt="WeChat QR Code" /> | <img src="src/assets/community/feishu-qr.png" width="150" alt="Feishu QR Code" /> | <img src="src/assets/community/20260212-185822.png" width="150" alt="Discord QR Code" /> |
### Партнёрская программа ClawX 🚀
Мы запускаем Партнёрскую программу ClawX и ищем партнёров, которые могут помочь представить ClawX большему числу клиентов, особенно тем, у кого есть потребности в кастомных AI-агентах или автоматизации.
Партнёры помогают связывать нас с потенциальными пользователями и проектами, а команда ClawX предоставляет полную техническую поддержку, кастомизацию и интеграцию.
Если вы работаете с клиентами, заинтересованными в AI-инструментах или автоматизации, мы будем рады сотрудничеству.
Напишите нам в DM или на [public@valuecell.ai](mailto:public@valuecell.ai) для получения дополнительной информации.
---
## История звёзд
<p align="center">
<img src="https://api.star-history.com/svg?repos=ValueCell-ai/ClawX&type=Date" alt="Star History Chart" />
</p>
---
## Лицензия
ClawX выпускается под [лицензией MIT](LICENSE). Вы можете свободно использовать, модифицировать и распространять это программное обеспечение.
---
<p align="center">
<sub>Создано с ❤️ командой ValueCell</sub>
</p>

View File

@@ -30,7 +30,7 @@
</p> </p>
<p align="center"> <p align="center">
<a href="README.md">English</a> | 简体中文 | <a href="README.ja-JP.md">日本語</a> <a href="README.md">English</a> | 简体中文 | <a href="README.ja-JP.md">日本語</a> | <a href="README.ru-RU.md">Русский</a>
</p> </p>
--- ---

Binary file not shown.

After

Width:  |  Height:  |  Size: 754 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 622 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 697 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 656 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 675 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 840 KiB

View File

@@ -1,4 +1,4 @@
export const SUPPORTED_LANGUAGE_CODES = ['en', 'zh', 'ja'] as const; export const SUPPORTED_LANGUAGE_CODES = ['en', 'zh', 'ja', 'ru'] as const;
export type LanguageCode = (typeof SUPPORTED_LANGUAGE_CODES)[number]; export type LanguageCode = (typeof SUPPORTED_LANGUAGE_CODES)[number];

View File

@@ -39,10 +39,22 @@ import jaSkills from './locales/ja/skills.json';
import jaCron from './locales/ja/cron.json'; import jaCron from './locales/ja/cron.json';
import jaSetup from './locales/ja/setup.json'; import jaSetup from './locales/ja/setup.json';
// RU
import ruCommon from './locales/ru/common.json';
import ruSettings from './locales/ru/settings.json';
import ruDashboard from './locales/ru/dashboard.json';
import ruChat from './locales/ru/chat.json';
import ruChannels from './locales/ru/channels.json';
import ruAgents from './locales/ru/agents.json';
import ruSkills from './locales/ru/skills.json';
import ruCron from './locales/ru/cron.json';
import ruSetup from './locales/ru/setup.json';
export const SUPPORTED_LANGUAGES = [ export const SUPPORTED_LANGUAGES = [
{ code: 'en', label: 'English' }, { code: 'en', label: 'English' },
{ code: 'zh', label: '中文' }, { code: 'zh', label: '中文' },
{ code: 'ja', label: '日本語' }, { code: 'ja', label: '日本語' },
{ code: 'ru', label: 'Русский' },
] as const satisfies ReadonlyArray<{ code: LanguageCode; label: string }>; ] as const satisfies ReadonlyArray<{ code: LanguageCode; label: string }>;
const resources = { const resources = {
@@ -79,6 +91,17 @@ const resources = {
cron: jaCron, cron: jaCron,
setup: jaSetup, setup: jaSetup,
}, },
ru: {
common: ruCommon,
settings: ruSettings,
dashboard: ruDashboard,
chat: ruChat,
channels: ruChannels,
agents: ruAgents,
skills: ruSkills,
cron: ruCron,
setup: ruSetup,
},
}; };
i18n i18n

View File

@@ -0,0 +1,77 @@
{
"title": "Агенты",
"subtitle": "Создайте нового агента для маршрутизации определённых каналов к отдельной личности или рабочей области.",
"refresh": "Обновить",
"addAgent": "Добавить агента",
"gatewayWarning": "Служба шлюза не запущена. Изменения агентов и каналов могут примениться с задержкой.",
"defaultBadge": "по умолчанию",
"inherited": "унаследовано",
"none": "нет",
"modelLine": "Модель: {{model}}{{suffix}}",
"channelsLine": "Каналы: {{channels}}",
"deleteAgent": "Удалить агента",
"settings": "Настройки",
"creating": "Создание...",
"createDialog": {
"title": "Добавить агента",
"description": "Создайте нового агента по имени. Вы можете опционально унаследовать файлы рабочей области основного агента.",
"nameLabel": "Имя агента",
"namePlaceholder": "Помощник по коду",
"inheritWorkspaceLabel": "Наследовать рабочую область основного агента",
"inheritWorkspaceDescription": "Копировать SOUL.md, AGENTS.md и т.д. из основного агента"
},
"deleteDialog": {
"title": "Удалить агента",
"message": "Удалить \"{{name}}\" из ClawX? Это навсегда удалит агента и его рабочую область, среду выполнения и файлы сессий с диска."
},
"settingsDialog": {
"title": "Настройки {{name}}",
"description": "Обновите имя агента и управляйте тем, какие каналы принадлежат этому агенту.",
"nameLabel": "Имя агента",
"agentIdLabel": "ID агента",
"modelLabel": "Модель",
"modelOverrideLabel": "Переопределение модели",
"modelProviderLabel": "Провайдер",
"modelProviderPlaceholder": "Выберите провайдера",
"modelProviderEmpty": "Учётные записи провайдеров не настроены. Добавьте в Настройки → AI-провайдеры.",
"modelIdLabel": "ID модели",
"modelIdPlaceholder": "model-id",
"modelPreview": "Предпросмотр",
"modelOverridePlaceholder": "провайдер/модель (например: openrouter/openai/gpt-5.4)",
"modelOverrideDescription": "Выберите провайдера и ID модели для этого агента.",
"unsavedChangesTitle": "Несохранённые изменения",
"unsavedChangesMessage": "У вас есть несохранённые изменения. Если закроете сейчас, изменения будут потеряны.",
"closeWithoutSaving": "Закрыть без сохранения",
"saveModelOverride": "Сохранить модель",
"useDefaultModel": "Использовать модель по умолчанию",
"channelsTitle": "Каналы",
"channelsDescription": "Этот список доступен только для чтения. Управляйте учётными записями каналов и привязками на странице Каналов.",
"mainAccount": "Основная учётная запись",
"channelsManagedInChannels": "Этот агент связан с типами каналов. Управляйте точными привязками учётных записей на странице Каналов.",
"addChannel": "Добавить канал",
"noChannels": "К этому агенту ещё не привязаны каналы."
},
"removeChannelDialog": {
"title": "Удалить канал",
"message": "Удалить {{name}} из ClawX? Это удалит текущую конфигурацию канала."
},
"toast": {
"agentCreated": "Агент создан",
"agentCreateFailed": "Не удалось создать агента: {{error}}",
"agentDeleted": "Агент удалён",
"agentDeleteFailed": "Не удалось удалить агента: {{error}}",
"agentUpdated": "Агент обновлён",
"agentUpdateFailed": "Не удалось обновить агента: {{error}}",
"agentModelInvalid": "Модель должна быть в формате провайдер/модель",
"agentModelProviderRequired": "Сначала выберите провайдера",
"agentModelIdRequired": "Требуется ID модели",
"agentModelUpdated": "Модель агента обновлена",
"agentModelUpdateFailed": "Не удалось обновить модель агента: {{error}}",
"agentModelReset": "Модель агента сброшена до значения по умолчанию",
"agentModelResetFailed": "Не удалось сбросить модель агента: {{error}}",
"channelAssigned": "{{channel}} назначен агенту",
"channelAssignFailed": "Не удалось назначить канал: {{error}}",
"channelRemoved": "{{channel}} удалён",
"channelRemoveFailed": "Не удалось удалить канал: {{error}}"
}
}

View File

@@ -0,0 +1,392 @@
{
"title": "Каналы сообщений",
"subtitle": "Управляйте каналами сообщений, учётными записями, привязками учётных записей к агентам и настройками по умолчанию для каждого канала.",
"refresh": "Обновить",
"addChannel": "Добавить канал",
"stats": {
"total": "Всего каналов",
"connected": "Подключено",
"disconnected": "Отключено"
},
"gatewayWarning": "Служба шлюза не запущена. Каналы не могут подключиться.",
"availableChannels": "Доступные каналы",
"supportedChannels": "Поддерживаемые каналы",
"available": "Доступные каналы",
"availableDesc": "Подключить новый канал",
"configured": "Настроенные каналы",
"configuredDesc": "Управление уже настроенными каналами",
"configuredBadge": "Настроен",
"deleteConfirm": "Вы уверены, что хотите удалить этот канал?",
"showAll": "Показать все",
"pluginBadge": "Плагин",
"toast": {
"whatsappConnected": "WhatsApp успешно подключён",
"whatsappFailed": "Не удалось подключить WhatsApp: {{error}}",
"qrConnected": "{{name}} успешно подключён",
"qrFailed": "Не удалось подключить {{name}}: {{error}}",
"channelSaved": "Канал {{name}} сохранён",
"channelConnecting": "Подключение к {{name}}...",
"savedButRefreshFailed": "Конфигурация сохранена, но обновление данных страницы не удалось. Пожалуйста, обновите вручную.",
"restartManual": "Пожалуйста, перезапустите шлюз вручную",
"configFailed": "Ошибка конфигурации: {{error}}",
"bindingUpdated": "Привязка учётной записи обновлена",
"defaultUpdated": "Учётная запись по умолчанию обновлена",
"accountDeleted": "Учётная запись удалена",
"channelDeleted": "Канал удалён"
},
"account": {
"add": "Добавить учётную запись",
"edit": "Редактировать",
"delete": "Удалить учётную запись",
"deleteChannel": "Удалить канал",
"deleteConfirm": "Вы уверены, что хотите удалить эту учётную запись?",
"default": "Текущая по умолчанию",
"setDefault": "Установить как канал по умолчанию",
"bindAgentLabel": "Связанный агент",
"unassigned": "Не назначено",
"mainAccount": "Основная учётная запись",
"customIdLabel": "ID учётной записи",
"customIdPlaceholder": "напр., feishu-sales-bot",
"customIdHint": "Используйте ID учётной записи из строчных букв (буквы, цифры, дефис, подчёркивание) для раз multiple учётных записей одного канала.",
"invalidId": "ID учётной записи не может быть пустым",
"invalidCanonicalId": "ID учётной записи должен содержать строчные буквы, цифры, дефисы или подчёркивания, начинаться с буквы/цифры и быть не более 64 символов.",
"idLabel": "ID: {{id}}",
"boundTo": "Связан с: {{agent}}",
"handledBy": "Обрабатывается {{agent}}",
"bindingStatusLabel": "Привязка: {{status}}",
"connectionStatusLabel": "Подключение: {{status}}",
"bindingStatus": {
"bound": "Связан",
"unbound": "Не связан"
},
"connectionStatus": {
"connected": "Подключён",
"connecting": "Подключение",
"disconnected": "Отключён",
"error": "Ошибка"
},
"accountIdPrompt": "Введите новый ID учётной записи для этого канала",
"accountIdExists": "ID учётной записи {{accountId}} уже существует"
},
"dialog": {
"updateTitle": "Обновить {{name}}",
"configureTitle": "Настроить {{name}}",
"addTitle": "Добавить канал",
"existingDesc": "Обновите существующую конфигурацию",
"selectDesc": "Выберите тип канала для настройки",
"qrCode": "QR-код",
"token": "Токен",
"scanQR": "Сканируйте этот QR-код с {{name}}",
"refreshCode": "Обновить код",
"loadingConfig": "Загрузка конфигурации...",
"existingHint": "У вас уже есть конфигурация для этого канала",
"howToConnect": "Как подключить",
"viewDocs": "Просмотреть документацию",
"channelName": "Название канала",
"channelNamePlaceholder": "Мой {{name}}",
"enableChannel": "Включить канал",
"enableChannelDesc": "При выключении конфигурация сохраняется, но канал остаётся отключённым",
"credentialsVerified": "Учётные данные проверены",
"validationFailed": "Ошибка проверки",
"warnings": "Предупреждения",
"back": "Назад",
"validating": "Проверка...",
"validateConfig": "Проверить конфигурацию",
"generatingQR": "Генерация QR...",
"validatingAndSaving": "Проверка и сохранение...",
"generateQRCode": "Сгенерировать QR-код",
"updateAndReconnect": "Обновить и переподключить",
"saveAndConnect": "Сохранить и подключить",
"envVar": "Переменная окружения: {{var}}"
},
"meta": {
"telegram": {
"description": "Подключите Telegram через токен бота от @BotFather",
"docsUrl": "https://icnnp7d0dymg.feishu.cn/wiki/TjiGwxsMWi7hpDkDAQBc0ydMnEf#MEkKdqXP1orZU2x4SrFcdUHgnl1",
"fields": {
"botToken": {
"label": "Токен бота",
"placeholder": "123456:ABC-DEF..."
},
"allowedUsers": {
"label": "ID разрешённых пользователей",
"placeholder": "напр., 123456789, 987654321",
"description": "Разделённый запятой список ID пользователей, которым разрешено использовать бота. Требуется для безопасности."
}
},
"instructions": [
"Откройте Telegram и найдите @BotFather",
"Отправьте /newbot и следуйте инструкциям",
"Скопируйте токен бота",
"Вставьте токен ниже",
"Получите свой ID пользователя от @userinfobot и вставьте ниже"
]
},
"discord": {
"description": "Подключите Discord через токен бота из Developer Portal",
"docsUrl": "https://icnnp7d0dymg.feishu.cn/wiki/BkOywJYCAiYRN9k4KTTceKPMnxg#QS6LdxnA2oNtfcxtFc8cgabnnNd",
"fields": {
"token": {
"label": "Токен бота",
"placeholder": "Токен вашего Discord-бота"
},
"guildId": {
"label": "ID сервера",
"placeholder": "напр., 123456789012345678",
"description": "Ограничьте бота определённым сервером. Правый клик по серверу → Копировать ID сервера."
},
"channelId": {
"label": "ID канала (опционально)",
"placeholder": "напр., 123456789012345678",
"description": "Ограничьте бота определённым каналом. Правый клик по каналу → Копировать ID канала."
}
},
"instructions": [
"Перейдите в Discord Developer Portal → Приложения → Новое приложение",
"В разделе Бот: Добавить бота, затем скопируйте токен бота",
"Включите Message Content Intent + Server Members Intent в Бот → Privileged Gateway Intents",
"В OAuth2 → URL Generator: выберите \"bot\" + \"applications.commands\", добавьте права на сообщения",
"Пригласите бота на сервер через сгенерированный URL",
"Вставьте токен бота ниже"
]
},
"whatsapp": {
"description": "Подключите WhatsApp сканированием QR-кода (номер телефона не требуется)",
"docsUrl": "https://icnnp7d0dymg.feishu.cn/wiki/ES7fwUfH8iGl8FkHYfFcyWB3n4d#doxcnUElomBZLi0NnKLUzn6zLbd",
"instructions": [
"Откройте WhatsApp на телефоне",
"Перейдите в Настройки > Связанные устройства > Подключить устройство",
"Сканируйте QR-код, показанный ниже",
"Система автоматически определит ваш номер телефона"
]
},
"wechat": {
"description": "Подключите личный WeChat через официальный плагин OpenClaw от Tencent, сканированием QR-кода",
"docsUrl": "https://icnnp7d0dymg.feishu.cn/wiki/GHYZwuPCriF0gWkXwkFcJ9zon3b",
"instructions": [
"Нажмите \"Сгенерировать QR-код\" для установки и включения официального плагина WeChat внутри OpenClaw",
"Сканируйте QR-код ниже через WeChat и подтвердите подключение на телефоне",
"После успешного связывания новый чат WeChat ClawBot автоматически появится в WeChat",
"Вы можете повторить QR-процедуру позже, чтобы добавить другую учётную запись WeChat или переподключить существующую"
]
},
"dingtalk": {
"description": "Подключите DingTalk через плагин канала OpenClaw (режим Stream)",
"docsUrl": "https://icnnp7d0dymg.feishu.cn/wiki/Y5eNwiSiZidkLskrwtJc1rUln0b#doxcnDgA78n43DbkiQjI1OqUA7b",
"fields": {
"clientId": {
"label": "Client ID (AppKey)",
"placeholder": "dingxxxxxx"
},
"clientSecret": {
"label": "Client Secret (AppSecret)",
"placeholder": "Секрет вашего приложения"
},
"robotCode": {
"label": "Robot Code (опционально)",
"placeholder": "Обычно совпадает с Client ID"
},
"corpId": {
"label": "Corp ID (опционально)",
"placeholder": "dingxxxxxx"
},
"agentId": {
"label": "Agent ID (опционально)",
"placeholder": "123456789"
}
},
"instructions": [
"Установите и включите плагин dingtalk в OpenClaw",
"Создайте внутреннее приложение DingTalk и включите режим Stream",
"Заполните Client ID и Client Secret (обязательно)",
"Заполните Robot Code / Corp ID / Agent ID, если ваша настройка требует этого"
]
},
"signal": {
"description": "Подключите Signal через signal-cli",
"docsUrl": "https://docs.openclaw.ai/channels/signal",
"fields": {
"phoneNumber": {
"label": "Номер телефона",
"placeholder": "+1234567890"
}
},
"instructions": [
"Установите signal-cli в вашей системе",
"Зарегистрируйте или привяжите ваш номер телефона",
"Введите ваш номер телефона ниже"
]
},
"feishu": {
"description": "Подключите бота Feishu/Lark через WebSocket",
"docsUrl": "https://icnnp7d0dymg.feishu.cn/wiki/GKn8wOvHnibpPNkNkPzcAvGlnzK#GdHUdp9t9oqyegxwV8ScLvVGn1c",
"fields": {
"appId": {
"label": "App ID",
"placeholder": "cli_xxxxxx"
},
"appSecret": {
"label": "App Secret",
"placeholder": "Секрет вашего приложения"
}
},
"instructions": [
"Прочитайте документацию, затем перейдите на Feishu Open Platform",
"Создайте новое приложение",
"Получите App ID и App Secret",
"Настройте подписку на события"
]
},
"wecom": {
"description": "Подключите бота WeCom через плагин",
"docsUrl": "https://icnnp7d0dymg.feishu.cn/wiki/JTGnwoV0RixKPtkr4w7c7gpAnDc",
"fields": {
"botId": {
"label": "Bot ID",
"placeholder": "ww_xxxxxx"
},
"secret": {
"label": "App Secret",
"placeholder": "Секрет вашего WeCom бота"
}
},
"instructions": [
"Создайте приложение в WeCom Admin Console для получения информации о конфигурации",
"Убедитесь, что конфигурация сервера получения сообщений включена",
"Введите ваш Bot ID (или Corp ID) и Secret для установления соединения"
]
},
"imessage": {
"description": "Подключите iMessage через BlueBubbles (macOS)",
"docsUrl": "https://docs.openclaw.ai/channels/bluebubbles",
"fields": {
"serverUrl": {
"label": "URL сервера BlueBubbles",
"placeholder": "http://localhost:1234"
},
"password": {
"label": "Пароль сервера",
"placeholder": "Пароль вашего сервера"
}
},
"instructions": [
"Установите сервер BlueBubbles на ваш Mac",
"Запишите URL сервера и пароль",
"Введите данные подключения ниже"
]
},
"matrix": {
"description": "Подключитесь к протоколу Matrix",
"docsUrl": "https://docs.openclaw.ai/channels/matrix",
"fields": {
"homeserver": {
"label": "URL Homeserver",
"placeholder": "https://matrix.org"
},
"accessToken": {
"label": "Access Token",
"placeholder": "Ваш access token"
}
},
"instructions": [
"Создайте учётную запись Matrix или используйте существующую",
"Получите access token из вашего клиента",
"Введите homeserver и token ниже"
]
},
"line": {
"description": "Подключите LINE Messaging API",
"docsUrl": "https://docs.openclaw.ai/channels/line",
"fields": {
"channelAccessToken": {
"label": "Channel Access Token",
"placeholder": "Ваш LINE channel access token"
},
"channelSecret": {
"label": "Channel Secret",
"placeholder": "Ваш LINE channel secret"
}
},
"instructions": [
"Перейдите в LINE Developers Console",
"Создайте канал Messaging API",
"Получите Channel Access Token и Secret"
]
},
"msteams": {
"description": "Подключите Microsoft Teams через Bot Framework",
"docsUrl": "https://docs.openclaw.ai/channels/msteams",
"fields": {
"appId": {
"label": "App ID",
"placeholder": "Ваш Microsoft App ID"
},
"appPassword": {
"label": "App Password",
"placeholder": "Ваш Microsoft App Password"
}
},
"instructions": [
"Перейдите на Azure Portal",
"Зарегистрируйте новое приложение бота",
"Получите App ID и создайте пароль",
"Настройте канал Teams"
]
},
"googlechat": {
"description": "Подключите Google Chat через webhook",
"docsUrl": "https://docs.openclaw.ai/channels/googlechat",
"fields": {
"serviceAccountKey": {
"label": "Путь к JSON файлу сервисного аккаунта",
"placeholder": "/path/to/service-account.json"
}
},
"instructions": [
"Создайте проект Google Cloud",
"Включите Google Chat API",
"Создайте сервисный аккаунт",
"Скачайте файл ключа JSON"
]
},
"mattermost": {
"description": "Подключите Mattermost через Bot API",
"docsUrl": "https://docs.openclaw.ai/channels/mattermost",
"fields": {
"serverUrl": {
"label": "URL сервера",
"placeholder": "https://your-mattermost.com"
},
"botToken": {
"label": "Bot Access Token",
"placeholder": "Ваш bot access token"
}
},
"instructions": [
"Перейдите в Mattermost Integrations",
"Создайте новую учётную запись бота",
"Скопируйте access token"
]
},
"qqbot": {
"description": "Подключите канал QQ Bot (встроенный с OpenClaw 3.31)",
"docsUrl": "https://icnnp7d0dymg.feishu.cn/wiki/KPIJwlyiGiupMrkiS9ice39Zn2c",
"fields": {
"appId": {
"label": "App ID",
"placeholder": "Ваш QQ Bot App ID"
},
"clientSecret": {
"label": "Client Secret",
"placeholder": "Ваш QQ Bot Client Secret"
}
},
"instructions": [
"Зарегистрируйте приложение на QQ Bot Open Platform",
"Получите App ID и Client Secret",
"Заполните ваши учётные данные ниже"
]
}
},
"viewDocs": "Просмотреть документацию"
}

View File

@@ -0,0 +1,72 @@
{
"gatewayNotRunning": "Шлюз не запущен",
"gatewayRequired": "Для использования чата требуется запущенный шлюз OpenClaw. Он запустится автоматически, или вы можете запустить его в Настройках.",
"welcome": {
"title": "Чат ClawX",
"subtitle": "Чем могу помочь?",
"askQuestions": "Задачи",
"askQuestionsDesc": "Работа над задачами",
"creativeTasks": "Непрерывное выполнение",
"creativeTasksDesc": "Выполнение многошаговых задач",
"brainstorming": "Параллельные агенты"
},
"noLogs": "(Журналы ещё недоступны)",
"toolbar": {
"refresh": "Обновить чат",
"showThinking": "Показать размышления",
"hideThinking": "Скрыть размышления",
"currentAgent": "Общение с {{agent}}"
},
"taskPanel": {
"eyebrow": "Вид выполнения",
"title": "Структура задачи",
"emptyTitle": "Пока нет структурированных шагов",
"emptyBody": "Когда начнётся выполнение, ClawX покажет размышления, вызовы инструментов и состояния передачи здесь.",
"status": {
"idle": "Бездействует",
"running_one": "1 активный шаг",
"running_other": "{{count}} активных шагов"
},
"stepStatus": {
"running": "Выполняется",
"completed": "Готово",
"error": "Ошибка"
}
},
"executionGraph": {
"eyebrow": "Выполнение в чате",
"title": "Граф выполнения",
"status": {
"active": "Активно",
"latest": "Последнее",
"previous": "Предыдущее"
},
"branchLabel": "ветвь",
"userTrigger": "Триггер пользователя",
"userTriggerHint": "Запущен пользовательским сообщением выше",
"agentRun": "Выполнение {{agent}}",
"agentReply": "Ответ ассистента",
"agentReplyHint": "Разрешено в ответе ассистента ниже"
},
"composer": {
"attachFiles": "Прикрепить файлы",
"pickAgent": "Выбрать агента",
"clearTarget": "Очистить целевого агента",
"targetChip": "@{{agent}}",
"agentPickerTitle": "Направить следующее сообщение другому агенту",
"gatewayDisconnectedPlaceholder": "Шлюз не подключён...",
"send": "Отправить",
"stop": "Остановить",
"gatewayConnected": "подключён",
"gatewayStatus": "шлюз {{state}} | порт: {{port}} {{pid}}",
"retryFailedAttachments": "Повторить неудавшиеся вложения"
},
"historyBuckets": {
"today": "Сегодня",
"yesterday": "Вчера",
"withinWeek": "В течение недели",
"withinTwoWeeks": "В течение 2 недель",
"withinMonth": "В течение месяца",
"older": "Старее месяца"
}
}

View File

@@ -0,0 +1,59 @@
{
"sidebar": {
"chat": "Чат",
"newChat": "Новый чат",
"cronTasks": "Расписание",
"skills": "Навыки",
"agents": "Агенты",
"channels": "Каналы",
"dashboard": "Панель",
"settings": "Настройки",
"devConsole": "Консоль разработчика",
"models": "Модели",
"deleteSessionConfirm": "Вы уверены, что хотите удалить сессию \"{{label}}\"?",
"openClawPage": "Страница OpenClaw"
},
"actions": {
"save": "Сохранить",
"cancel": "Отмена",
"delete": "Удалить",
"edit": "Редактировать",
"refresh": "Обновить",
"close": "Закрыть",
"copy": "Копировать",
"search": "Поиск",
"confirm": "Подтвердить",
"dismiss": "Отклонить",
"load": "Загрузить",
"install": "Установить",
"uninstall": "Удалить",
"enable": "Включить",
"disable": "Выключить",
"back": "Назад",
"next": "Далее",
"skip": "Пропустить",
"restart": "Перезапустить",
"show": "Показать",
"hide": "Скрыть",
"clear": "Очистить"
},
"status": {
"running": "Запущен",
"stopped": "Остановлен",
"error": "Ошибка",
"connected": "Подключён",
"disconnected": "Отключён",
"enabled": "Включён",
"disabled": "Выключен",
"active": "Активен",
"paused": "Приостановлен",
"configured": "Настроен",
"loading": "Загрузка...",
"saving": "Сохранение..."
},
"gateway": {
"notRunning": "Шлюз не запущен",
"notRunningDesc": "Для использования этой функции требуется запущенный шлюз OpenClaw. Он запустится автоматически, или вы можете запустить его в Настройках.",
"warning": "Шлюз не запущен."
}
}

View File

@@ -0,0 +1,120 @@
{
"title": "Запланированные задачи",
"subtitle": "Автоматизируйте AI-workflows с запланированными задачами",
"newTask": "Новая задача",
"refresh": "Обновить",
"gatewayWarning": "Шлюз не запущен. Запланированными задачами нельзя управлять без активного шлюза.",
"stats": {
"total": "Всего задач",
"active": "Активно",
"paused": "Приостановлено",
"failed": "Ошибка"
},
"empty": {
"title": "Нет запланированных задач",
"description": "Создайте запланированные задачи для автоматизации AI-процессов. Задачи могут отправлять сообщения, выполнять запросы или выполнять действия в указанное время.",
"create": "Создать первую задачу"
},
"card": {
"runNow": "Запустить сейчас",
"deleteConfirm": "Вы уверены, что хотите удалить эту задачу?",
"last": "Последний",
"next": "Следующий"
},
"dialog": {
"createTitle": "Создать задачу",
"editTitle": "Редактировать задачу",
"description": "Запланируйте автоматическую AI-задачу",
"taskName": "Название задачи",
"taskNamePlaceholder": "напр., Утренняя сводка",
"message": "Сообщение / Промпт",
"messagePlaceholder": "Что должен сделать AI? напр., Дай мне сводку новостей и погоды на сегодня",
"schedule": "Расписание",
"cronPlaceholder": "Cron-выражение (напр., 0 9 * * *)",
"usePresets": "Использовать пресеты",
"useCustomCron": "Использовать свой cron",
"deliveryTitle": "Доставка",
"deliveryDescription": "Выберите, остаётся ли эта задача в ClawX или отправляется на внешний канал.",
"deliveryModeNone": "Только в ClawX",
"deliveryModeNoneDesc": "Выполнить задачу и сохранить результат в приложении.",
"deliveryModeAnnounce": "Внешний канал",
"deliveryModeAnnounceDesc": "Отправить конечный результат через настроенный канал.",
"deliveryChannel": "Канал",
"channelUnsupportedTag": "Не поддерживается",
"deliveryAccount": "Учётная запись отправки",
"selectDeliveryAccount": "Выберите учётную запись",
"deliveryAccountDesc": "Использует тот же список настроенных учётных записей, что и на странице Каналов.",
"selectChannel": "Выберите канал",
"deliveryChannelUnsupported": "{{channel}} в настоящее время не поддерживает запланированную исходящую доставку.",
"deliveryDefaultAccountHint": "Использует учётную запись канала по умолчанию: {{account}}",
"deliveryTarget": "Получатель / Цель",
"selectDeliveryTarget": "Выберите цель доставки",
"loadingTargets": "Загрузка целей...",
"currentTarget": "Текущая цель",
"deliveryTargetGroupDefault": "Рекомендуемые",
"deliveryTargetGroupUsers": "Пользователи",
"deliveryTargetGroupChats": "Чаты",
"noDeliveryTargets": "Для выбранной учётной записи {{channel}} цели доставки недоступны.",
"deliveryTargetPlaceholder": "Введите цель доставки для этого канала",
"deliveryTargetPlaceholderFeishu": "напр., user:ou_xxx или chat:oc_xxx",
"deliveryTargetDesc": "Это соответствует delivery.to в OpenClaw и отправляется как есть.",
"deliveryTargetDescFeishu": "Используйте цель пользователя Feishu, например user:ou_xxx, или цель чата, например chat:oc_xxx.",
"deliveryTargetDescAuto": "Выберите из целей, обнаруженных для выбранной учётной записи канала.",
"deliveryTargetDescFeishuSelect": "Выберите подтверждённого получателя Feishu из доступных пользователей или чатов.",
"deliveryTargetDescFeishuAccount": "Выберите из настроенных учётных записей канала Feishu, используя тот же список учётных записей, что и на странице Каналов.",
"feishuMainTargetTitle": "Основная учётная запись Feishu",
"feishuMainTargetDesc": "Автозаполнить текущую учётную запись Feishu по умолчанию как цель доставки.",
"useFeishuMainTarget": "Использовать основную учётную запись",
"resolvingTarget": "Разрешение...",
"targetChannel": "Целевой канал",
"noChannels": "Каналы недоступны. Сначала добавьте канал.",
"discordChannelId": "ID канала Discord",
"discordChannelIdPlaceholder": "напр., 1438452657525100686",
"discordChannelIdDesc": "Правый клик по каналу Discord → Копировать ID канала",
"enableImmediately": "Включить немедленно",
"enableImmediatelyDesc": "Начать выполнение этой задачи после создания",
"saveChanges": "Сохранить изменения"
},
"presets": {
"everyMinute": "Каждую минуту",
"every5Min": "Каждые 5 минут",
"every15Min": "Каждые 15 минут",
"everyHour": "Каждый час",
"daily9am": "Ежедневно в 9:00",
"daily6pm": "Ежедневно в 18:00",
"weeklyMon": "Еженедельно (Пн 9:00)",
"monthly1st": "Ежемесячно (1-го в 9:00)"
},
"toast": {
"created": "Задача создана",
"updated": "Задача обновлена",
"enabled": "Задача включена",
"paused": "Задача приостановлена",
"deleted": "Задача удалена",
"triggered": "Задача успешно запущена",
"failedTrigger": "Не удалось запустить задачу: {{error}}",
"failedUpdate": "Не удалось обновить задачу",
"failedDelete": "Не удалось удалить задачу",
"nameRequired": "Пожалуйста, введите название задачи",
"messageRequired": "Пожалуйста, введите сообщение",
"channelRequired": "Пожалуйста, выберите канал",
"deliveryChannelUnsupported": "{{channel}} пока не поддерживает запланированную доставку",
"deliveryTargetRequired": "Пожалуйста, введите цель доставки",
"deliveryTargetResolved": "Цель доставки разрешена",
"failedLoadDeliveryTargets": "Не удалось загрузить цели доставки",
"failedResolveDeliveryTarget": "Не удалось разрешить цель доставки по умолчанию",
"discordIdRequired": "Пожалуйста, введите ID канала Discord",
"scheduleRequired": "Пожалуйста, выберите или введите расписание"
},
"schedule": {
"everySeconds": "Каждые {{count}} сек",
"everyMinutes": "Каждые {{count}} мин",
"everyHours": "Каждые {{count}} ч",
"everyDays": "Каждые {{count}} дн",
"onceAt": "Один раз в {{time}}",
"weeklyAt": "Еженедельно в {{day}} в {{time}}",
"monthlyAtDay": "Ежемесячно {{day}}-го в {{time}}",
"dailyAt": "Ежедневно в {{time}}",
"unknown": "Неизвестно"
}
}

View File

@@ -0,0 +1,65 @@
{
"gateway": "Шлюз",
"channels": "Каналы",
"skills": "Навыки",
"uptime": "Время работы",
"port": "Порт: {{port}}",
"pid": "PID: {{pid}}",
"connectedOf": "{{connected}} из {{total}} подключено",
"enabledOf": "{{enabled}} из {{total}} включено",
"sinceRestart": "С последнего перезапуска",
"gatewayNotRunning": "Шлюз не запущен",
"models": {
"title": "Модели",
"subtitle": "Управляйте AI-провайдерами и отслеживайте использование токенов."
},
"quickActions": {
"title": "Быстрые действия",
"description": "Частые задачи и ярлыки",
"addProvider": "Добавить провайдера",
"addChannel": "Добавить канал",
"createCron": "Создать задачу",
"installSkill": "Установить навык",
"openChat": "Открыть чат",
"settings": "Настройки",
"devConsole": "Консоль"
},
"connectedChannels": "Подключённые каналы",
"noChannels": "Каналы не настроены",
"addFirst": "Добавьте первый канал",
"activeSkills": "Активные навыки",
"noSkills": "Навыки не включены",
"enableSome": "Включите несколько навыков",
"more": "+{{count}} ещё",
"recentTokenHistory": {
"title": "Недавнее использование токенов",
"description": "Недавние ответы ассистента и результаты инструментов с данными о модели/провайдере.",
"loading": "Загрузка истории использования токенов...",
"empty": "История использования токенов пуста",
"groupByModel": "По модели",
"groupByTime": "По времени",
"last7Days": "7 дней",
"last30Days": "30 дней",
"allTime": "Всё время",
"showingLast": "{{count}} записей",
"totalTokens": "всего токенов",
"inputShort": "Ввод",
"outputShort": "Вывод",
"cacheShort": "Кэш",
"page": "Страница {{current}} / {{total}}",
"prev": "Назад",
"next": "Далее",
"unknownModel": "Неизвестная модель",
"emptyForWindow": "Нет истории использования токенов за этот период",
"input": "Ввод {{value}}",
"output": "Вывод {{value}}",
"cacheRead": "Чтение кэша {{value}}",
"cacheWrite": "Запись кэша {{value}}",
"cost": "Стоимость ${{amount}}",
"viewContent": "Просмотр содержимого",
"contentDialogTitle": "Детали использования",
"close": "Закрыть",
"noUsage": "Нет использования",
"usageParseError": "Ошибка解析 использования"
}
}

View File

@@ -0,0 +1,282 @@
{
"title": "Настройки",
"subtitle": "Настройте ваш опыт работы с ClawX",
"appearance": {
"title": "Общие",
"description": "Настройте внешний вид",
"theme": "Тема",
"light": "Светлая",
"dark": "Тёмная",
"system": "Системная",
"language": "Язык",
"launchAtStartup": "Запуск при старте системы",
"launchAtStartupDesc": "Автоматически запускать ClawX при входе в систему"
},
"aiProviders": {
"title": "AI-провайдеры",
"description": "Настройте провайдеров AI-моделей и API-ключи",
"overview": {
"title": "Учётные записи провайдеров",
"description": "Сводка об учётных записях провайдеров и моделях.",
"noModelSelected": "Модель не выбрана",
"multiAccountReady": "Готов к нескольким аккаунтам",
"singletonVendor": "Одноаккаунтный провайдер"
},
"authModes": {
"apiKey": "API-ключ",
"oauthDevice": "OAuth Устройство",
"oauthBrowser": "OAuth Браузер",
"local": "Локальный"
},
"sections": {
"model": "Настройки модели",
"fallback": "Настройки резервного переключения"
},
"add": "Добавить провайдера",
"custom": "Свой",
"notRequired": "Не требуется",
"empty": {
"title": "Провайдеры не настроены",
"desc": "Добавьте AI-провайдера, чтобы начать использовать ClawX",
"cta": "Добавить первого провайдера"
},
"dialog": {
"title": "Добавить AI-провайдера",
"desc": "Настройте нового провайдера AI-моделей",
"displayName": "Отображаемое имя",
"apiKey": "API-ключ",
"apiKeyConfigured": "API-ключ уже сохранён для этого провайдера.",
"apiKeyMissing": "API-ключ ещё не сохранён для этого провайдера.",
"apiKeyStored": "Ваш API-ключ хранится локально на вашем компьютере.",
"replaceApiKey": "Заменить API-ключ",
"replaceApiKeyHelp": "Оставьте это поле пустым, чтобы сохранить текущий API-ключ.",
"baseUrl": "Базовый URL",
"modelId": "ID модели",
"codePlanPreset": "Пресет Code Plan",
"codePlanMode": "Code Plan",
"useCodePlanPreset": "Использовать пресет Ark Code Plan",
"codePlanPresetDesc": "Code Plan использует https://ark.cn-beijing.volces.com/api/coding/v3 и модель ark-code-latest. Не используйте /api/v3 для трафика Code Plan.",
"codePlanDoc": "Документация Code Plan",
"protocol": "Протокол",
"advancedConfig": "Расширенная конфигурация",
"userAgent": "User-Agent",
"userAgentPlaceholder": "ClawX/1.0",
"fallbackModels": "Резервные модели",
"fallbackProviders": "Резервные провайдеры",
"fallbackModelIds": "ID резервных моделей",
"fallbackModelIdsPlaceholder": "gpt-4.1-mini\nanother-model-id",
"fallbackModelIdsHelp": "Один ID модели на строку. Эти модели используют текущую конфигурацию провайдера перед переходом к другим провайдерам.",
"noFallbackOptions": "Сначала добавьте другого провайдера, чтобы использовать его как резервный.",
"cancel": "Отмена",
"change": "Изменить провайдера",
"add": "Добавить провайдера",
"save": "Сохранить",
"customDoc": "Документация",
"validate": "Проверить"
},
"card": {
"default": "По умолчанию",
"configured": "Настроен",
"noKey": "API-ключ не задан",
"none": "Нет",
"fallbacks_one": "Резервный: {{names}}",
"fallbacks_other": "Резервные ({{count}}): {{names}}",
"setDefault": "Установить по умолчанию",
"editKey": "Редактировать API-ключ",
"delete": "Удалить провайдера"
},
"protocols": {
"openai": "Совместимый с OpenAI",
"openaiCompletions": "OpenAI Completions",
"openaiResponses": "OpenAI Responses",
"anthropic": "Совместимый с Anthropic"
},
"toast": {
"added": "Провайдер успешно добавлен",
"failedAdd": "Не удалось добавить провайдера",
"deleted": "Провайдер удалён",
"failedDelete": "Не удалось удалить провайдера",
"defaultUpdated": "Провайдер по умолчанию обновлён",
"failedDefault": "Не удалось установить провайдер по умолчанию",
"updated": "Провайдер обновлён",
"failedUpdate": "Не удалось обновить провайдера",
"invalidKey": "Неверный API-ключ",
"modelRequired": "Требуется ID модели",
"minimaxConflict": "Нельзя добавить оба провайдера MiniMax (Global) и MiniMax (CN)."
},
"oauth": {
"loginMode": "Вход через OAuth",
"apikeyMode": "API-ключ",
"loginPrompt": "Этот провайдер требует входа через браузер.",
"loginButton": "Войти через браузер",
"getApiKey": "Получить API-ключ",
"waiting": "Ожидание...",
"openLoginPage": "Открыть страницу входа",
"waitingApproval": "Ожидание подтверждения в браузере...",
"cancel": "Отмена",
"codeCopied": "Код скопирован в буфер обмена",
"authFailed": "Ошибка аутентификации",
"browserFlowUnavailable": "OAuth через браузер ещё не настроен для этого провайдера.",
"tryAgain": "Попробовать снова",
"approveLogin": "Подтвердить вход",
"step1": "Скопируйте код авторизации ниже.",
"step2": "Откройте страницу входа в браузере.",
"step3": "Вставьте код для подтверждения доступа.",
"requestingCode": "Запрос кода безопасного входа..."
}
},
"gateway": {
"title": "Шлюз",
"description": "Настройки шлюза OpenClaw",
"status": "Статус",
"port": "Порт",
"logs": "Журналы",
"appLogs": "Журналы приложения",
"openFolder": "Открыть папку",
"autoStart": "Автозапуск шлюза",
"autoStartDesc": "Запускать шлюз при старте ClawX",
"proxyTitle": "Прокси",
"proxyDesc": "Направлять трафик Electron и шлюза через локальный прокси-клиент.",
"proxyServer": "Прокси-сервер",
"proxyServerHelp": "Прокси по умолчанию для всех запросов. Значения вида хост:порт по умолчанию используют HTTP.",
"proxyHttpServer": "HTTP-прокси",
"proxyHttpServerHelp": "Расширенная настройка для HTTP-запросов. Оставьте пустым, чтобы использовать прокси-сервер.",
"proxyHttpsServer": "HTTPS-прокси",
"proxyHttpsServerHelp": "Расширенная настройка для HTTPS-запросов. Оставьте пустым, чтобы использовать прокси-сервер.",
"proxyAllServer": "ALL_PROXY / SOCKS",
"proxyAllServerHelp": "Расширенный резерв для SOCKS-клиентов и протоколов (например, Telegram). Оставьте пустым, чтобы использовать прокси-сервер.",
"showAdvancedProxy": "Показать расширенные поля прокси",
"hideAdvancedProxy": "Скрыть расширенные поля прокси",
"proxyBypass": "Правила обхода",
"proxyBypassHelp": "Разделённые точкой с запятой, запятой или новой строкой хосты, которые должны подключаться напрямую.",
"proxyRestartNote": "Сохранение переприменяет сетевые настройки Electron и немедленно перезапускает шлюз. Обычные перезапуски шлюза сохраняют значения прокси Telegram-канала при отключённом прокси; сохраните при отключённом прокси, чтобы очистить их.",
"proxySaved": "Настройки прокси сохранены",
"proxySaveFailed": "Не удалось сохранить настройки прокси"
},
"updates": {
"title": "Обновления",
"description": "Поддерживайте ClawX в актуальном состоянии",
"autoCheck": "Автопроверка обновлений",
"autoCheckDesc": "Проверять обновления при запуске",
"autoDownload": "Автообновление",
"autoDownloadDesc": "Автоматически загружать и устанавливать обновления",
"status": {
"checking": "Проверка обновлений...",
"downloading": "Загрузка обновления...",
"available": "Доступно обновление: v{{version}}",
"downloaded": "Готово к установке: v{{version}}",
"autoInstalling": "Перезапуск для установки обновления через {{seconds}}с...",
"failed": "Ошибка проверки обновлений",
"latest": "У вас последняя версия",
"check": "Проверить обновления"
},
"action": {
"checking": "Проверка...",
"downloading": "Загрузка...",
"download": "Скачать обновление",
"install": "Установить и перезапустить",
"cancelAutoInstall": "Отмена",
"retry": "Повторить",
"check": "Проверить обновления"
},
"currentVersion": "Текущая версия",
"whatsNew": "Что нового:",
"errorDetails": "Детали ошибки:",
"help": "Когда автообновление включено, обновления загружаются и устанавливаются автоматически."
},
"advanced": {
"title": "Дополнительные",
"description": "Опции для продвинутых пользователей",
"transport": {
"label": "Предпочтение транспорта шлюза",
"desc": "Выберите, как рендерер запрашивает RPC шлюза: WebSocket, HTTP-прокси или IPC-резерв.",
"saved": "Предпочтение транспорта шлюза сохранено",
"options": {
"wsFirst": "WS сначала",
"httpFirst": "HTTP сначала",
"wsOnly": "Только WS",
"httpOnly": "Только HTTP",
"ipcOnly": "Только IPC"
},
"descriptions": {
"wsFirst": "WS -> HTTP -> IPC",
"httpFirst": "HTTP -> WS -> IPC",
"wsOnly": "WS -> IPC",
"httpOnly": "HTTP -> IPC",
"ipcOnly": "Только IPC"
}
},
"devMode": "Режим разработчика",
"devModeDesc": "Показывать инструменты и ярлыки разработчика",
"telemetry": "Анонимные данные об использовании",
"telemetryDesc": "Разрешить предоставление анонимных базовых данных об использовании для улучшения ClawX"
},
"developer": {
"title": "Разработчик",
"description": "Расширенные опции для разработчиков",
"console": "Консоль OpenClaw",
"consoleDesc": "Доступ к нативному интерфейсу управления OpenClaw",
"openConsole": "Открыть консоль разработчика",
"consoleNote": "Открывает Control UI с токеном шлюза",
"gatewayToken": "Токен шлюза",
"gatewayTokenDesc": "Вставьте это в настройки Control UI при запросе",
"tokenUnavailable": "Токен недоступен",
"tokenCopied": "Токен шлюза скопирован",
"cli": "CLI OpenClaw",
"cliDesc": "Скопируйте команду для запуска OpenClaw без изменения PATH.",
"cliPowershell": "Команда PowerShell.",
"cmdUnavailable": "Команда недоступна",
"cmdCopied": "CLI-команда скопирована",
"doctor": "OpenClaw Doctor",
"doctorDesc": "Запустите `openclaw doctor` и просмотрите вывод диагностики.",
"runDoctor": "Запустить Doctor",
"runDoctorFix": "Запустить исправление Doctor",
"doctorSucceeded": "OpenClaw doctor завершён",
"doctorFailed": "OpenClaw doctor сообщил о проблемах",
"doctorRunFailed": "Не удалось запустить OpenClaw doctor",
"doctorFixSucceeded": "Исправление OpenClaw doctor завершено",
"doctorFixFailed": "Исправление OpenClaw doctor сообщило о проблемах",
"doctorFixRunFailed": "Не удалось запустить исправление OpenClaw doctor",
"doctorCopied": "Вывод doctor скопирован",
"doctorOk": "Исправен",
"doctorIssue": "Обнаружены проблемы",
"doctorFixOk": "Исправлено",
"doctorFixIssue": "Ошибка исправления",
"doctorExitCode": "Код выхода",
"doctorDuration": "Длительность",
"doctorCommand": "Команда",
"doctorWorkingDir": "Рабочая директория",
"doctorError": "Ошибка",
"doctorStdout": "Стандартный вывод",
"doctorStderr": "Стандартная ошибка",
"doctorOutputEmpty": "(пусто)",
"wsDiagnostic": "Диагностический режим WS",
"wsDiagnosticDesc": "Временно включить цепочку WS/HTTP-резервов для отладки RPC шлюза.",
"wsDiagnosticEnabled": "Диагностический режим WS включён",
"wsDiagnosticDisabled": "Диагностический режим WS отключён",
"telemetryViewer": "Просмотр телеметрии",
"telemetryViewerDesc": "Локальная телеметрия UX/производительности, последние 200 записей.",
"telemetryAggregated": "Топ событий",
"telemetryTotal": "Всего",
"telemetryErrors": "Ошибки",
"telemetrySlow": "Медленные (>=800мс)",
"telemetryEmpty": "Телеметрия ещё не собрана",
"telemetryCopied": "Телеметрия скопирована",
"telemetryCleared": "Телеметрия очищена",
"installCmd": "Установить команду \"openclaw\"",
"installCmdDesc": "Устанавливает ~/.local/bin/openclaw (без прав администратора)",
"installTitle": "Установить команду OpenClaw",
"installMessage": "Установить команду \"openclaw\"?",
"installDetail": "Это создаст ~/.local/bin/openclaw. Убедитесь, что ~/.local/bin в PATH, если хотите запускать глобально."
},
"about": {
"title": "О приложении",
"appName": "ClawX",
"tagline": "Графический AI-ассистент",
"basedOn": "На базе OpenClaw",
"version": "Версия {{version}}",
"docs": "Веб-сайт",
"github": "GitHub",
"faq": "FAQ"
}
}

View File

@@ -0,0 +1,152 @@
{
"steps": {
"welcome": {
"title": "Добро пожаловать",
"description": "Ваш AI-ассистент готов к настройке"
},
"runtime": {
"title": "Проверка окружения",
"description": "Проверка системных требований"
},
"provider": {
"title": "AI-провайдер",
"description": "Настройте ваш AI-сервис"
},
"channel": {
"title": "Подключить канал",
"description": "Подключите платформу обмена сообщениями (опционально)"
},
"installing": {
"title": "Настройка",
"description": "Установка необходимых компонентов"
},
"complete": {
"title": "Готово!",
"description": "ClawX готов к использованию"
}
},
"welcome": {
"title": "Добро пожаловать в ClawX",
"description": "ClawX — это графический интерфейс для OpenClaw, упрощающий использование AI-ассистентов через ваши любимые платформы обмена сообщениями.",
"features": {
"noCommand": "Без командной строки",
"modernUI": "Современный красивый интерфейс",
"bundles": "Предварительно установленные наборы навыков",
"crossPlatform": "Кроссплатформенная поддержка"
}
},
"runtime": {
"title": "Проверка окружения",
"viewLogs": "Просмотреть журналы",
"recheck": "Перепроверить",
"nodejs": "Среда выполнения Node.js",
"openclaw": "Пакет OpenClaw",
"gateway": "Служба шлюза",
"startGateway": "Запустить шлюз",
"status": {
"checking": "Проверка...",
"success": "Node.js доступен",
"error": "Ошибка",
"gatewayRunning": "Запущен на порту {{port}}",
"packageReady": "Пакет OpenClaw готов"
},
"issue": {
"title": "Обнаружена проблема с окружением",
"desc": "Пожалуйста, убедитесь, что OpenClaw установлен правильно. Проверьте журналы для получения подробной информации."
},
"logs": {
"title": "Журналы приложения",
"openFolder": "Открыть папку журналов",
"close": "Закрыть",
"noLogs": "(Журналы ещё недоступны)"
}
},
"provider": {
"label": "Провайдер модели",
"selectPlaceholder": "Выберите провайдера...",
"baseUrl": "Базовый URL",
"modelId": "ID модели",
"modelIdDesc": "Идентификатор модели от вашего провайдера (напр. deepseek-ai/DeepSeek-V3)",
"codePlanPreset": "Пресет Code Plan",
"codePlanMode": "Code Plan",
"useCodePlanPreset": "Использовать пресет Ark Code Plan",
"codePlanPresetDesc": "Code Plan использует https://ark.cn-beijing.volces.com/api/coding/v3 и модель ark-code-latest. Не используйте /api/v3 для трафика Code Plan.",
"codePlanDoc": "Документация Code Plan",
"protocol": "Протокол",
"protocols": {
"openaiCompletions": "OpenAI Completions",
"openaiResponses": "OpenAI Responses",
"anthropic": "Совместимый с Anthropic"
},
"apiKey": "API-ключ",
"save": "Сохранить",
"validateSave": "Проверить и сохранить",
"valid": "Провайдер успешно настроен",
"invalid": "Неверный API-ключ",
"storedLocally": "Ваш API-ключ хранится локально на вашем компьютере."
},
"channel": {
"title": "Подключить канал сообщений",
"subtitle": "Выберите платформу для подключения вашего AI-ассистента. Вы можете добавить больше каналов позже в Настройках.",
"configure": "Настроить {{name}}",
"howTo": "Как подключить:",
"viewDocs": "Просмотреть документацию",
"validationError": "Ошибка проверки",
"connected": "{{name}} подключён",
"connectedDesc": "Ваш канал настроен. Он подключится при запуске шлюза.",
"configureAnother": "Настроить другой канал"
},
"installing": {
"title": "Установка необходимых компонентов",
"subtitle": "Настройка инструментов для вашего AI-ассистента",
"progress": "Прогресс",
"status": {
"pending": "Ожидание",
"installing": "Установка...",
"installed": "Установлено",
"failed": "Ошибка"
},
"error": "Ошибка настройки:",
"restart": "Попробуйте перезапустить приложение",
"wait": "Это может занять несколько моментов...",
"skip": "Пропустить этот шаг"
},
"complete": {
"title": "Настройка завершена!",
"subtitle": "ClawX настроен и готов к использованию. Теперь вы можете начать общение с вашим AI-ассистентом.",
"provider": "AI-провайдер",
"components": "Компоненты",
"gateway": "Шлюз",
"running": "Запущен",
"footer": "Вы можете настраивать навыки и подключать каналы в Настройках"
},
"nav": {
"next": "Далее",
"back": "Назад",
"skipStep": "Пропустить этот шаг",
"skipSetup": "Пропустить настройку",
"getStarted": "Начать"
},
"defaultSkills": {
"opencode": {
"name": "OpenCode",
"description": "AI-помощник по программированию"
},
"python-env": {
"name": "Python-среда",
"description": "Python runtime для навыков"
},
"code-assist": {
"name": "Помощник по коду",
"description": "Анализ и предложения по коду"
},
"file-tools": {
"name": "Инструменты файлов",
"description": "Операции с файлами и управление"
},
"terminal": {
"name": "Терминал",
"description": "Выполнение shell-команд"
}
}
}

View File

@@ -0,0 +1,111 @@
{
"title": "Навыки",
"subtitle": "Просмотр и управление AI-возможностями",
"refresh": "Обновить",
"openFolder": "Открыть папку навыков",
"gatewayWarning": "Шлюз не запущен. Навыки не могут быть загружены без активного шлюза.",
"tabs": {
"installed": "Установленные",
"marketplace": "Маркетплейс"
},
"filter": {
"all": "Все ({{count}})",
"builtIn": "Встроенные ({{count}})",
"marketplace": "Маркетплейс ({{count}})"
},
"search": "Поиск навыков...",
"searchMarketplace": "Поиск на маркетплейсе...",
"searchButton": "Поиск",
"actions": {
"enableVisible": "Включить видимые",
"disableVisible": "Выключить видимые",
"installSkill": "Установить навыки"
},
"noSkills": "Навыки не найдены",
"noSkillsSearch": "Попробуйте другой поисковый запрос",
"noSkillsAvailable": "Навыки недоступны",
"detail": {
"info": "Информация",
"config": "Конфигурация",
"description": "Описание",
"version": "Версия",
"author": "Автор",
"source": "Источник",
"coreSystem": "Системный",
"bundled": "В комплекте",
"userInstalled": "Установлено пользователем",
"enabled": "Включён",
"disabled": "Выключен",
"apiKey": "API-ключ",
"apiKeyPlaceholder": "Введите API-ключ (опционально)",
"apiKeyDesc": "Основной API-ключ для этого навыка. Оставьте пустым, если не требуется или настроено в другом месте.",
"envVars": "Переменные окружения",
"addVariable": "Добавить переменную",
"noEnvVars": "Переменные окружения не настроены.",
"keyPlaceholder": "КЛЮЧ (напр., BASE_URL)",
"valuePlaceholder": "ЗНАЧЕНИЕ",
"envNote": "Примечание: Строки с пустыми ключами будут автоматически удалены при сохранении.",
"saving": "Сохранение...",
"saveConfig": "Сохранить конфигурацию",
"configSaved": "Конфигурация сохранена",
"openManual": "Открыть руководство",
"openActualFolder": "Открыть реальную папку",
"copyPath": "Копировать путь",
"pathUnavailable": "Путь недоступен",
"configurable": "Настраиваемый",
"uninstall": "Удалить",
"enable": "Включить",
"disable": "Выключить"
},
"source": {
"badge": {
"bundled": "В комплекте",
"managed": "Управляемый",
"workspace": "Рабочая область",
"extra": "Дополнительные директории",
"agentsPersonal": "Личные .agents",
"agentsProject": "Проектные .agents",
"unknown": "Неизвестный источник"
}
},
"toast": {
"enabled": "Навык включён",
"disabled": "Навык выключен",
"installed": "Навык установлен и включён",
"uninstalled": "Навык успешно удалён",
"openedEditor": "Открыто в редакторе",
"failedEditor": "Не удалось открыть редактор",
"failedSave": "Не удалось сохранить конфигурацию",
"failedOpenFolder": "Не удалось открыть папку навыков",
"failedInstall": "Не удалось установить",
"failedUninstall": "Не удалось удалить",
"failedFolderNotFound": "Папка навыков ещё не существует. Сначала установите навык.",
"copiedPath": "Путь скопирован",
"failedCopyPath": "Не удалось скопировать путь",
"failedOpenActualFolder": "Не удалось открыть реальную папку навыка",
"searchTimeoutError": "Поиск истёк, проверьте сеть. Вы также можете искать на ClawHub.ai, скачать ZIP и распаковать в \"{{path}}\"",
"installTimeoutError": "Установка истекла, проверьте сеть. Вы также можете скачать ZIP с ClawHub.ai и распаковать в \"{{path}}\"",
"searchRateLimitError": "Превышен лимит поиска. Вы также можете искать на ClawHub.ai, скачать ZIP и распаковать в \"{{path}}\"",
"installRateLimitError": "Превышен лимит установки. Вы также можете скачать ZIP с ClawHub.ai и распаковать в \"{{path}}\"",
"fetchTimeoutError": "Получение навыков истекло, проверьте подключение к сети.",
"fetchRateLimitError": "Превышен лимит получения навыков, попробуйте позже.",
"noBatchEnableTargets": "Все видимые навыки уже включены.",
"noBatchDisableTargets": "Все видимые навыки уже выключены.",
"batchEnabled": "{{count}} навыков включено.",
"batchDisabled": "{{count}} навыков выключено.",
"batchPartial": "Обновлено {{success}} / {{total}} навыков. Некоторые элементы не удались."
},
"marketplace": {
"title": "Маркетплейс",
"installDialogTitle": "Установить навыки",
"installDialogSubtitle": "Обзор по умолчанию, или введите ключевые слова для поиска.",
"sourceLabel": "Источник",
"sourceClawHub": "ClawHub",
"securityNote": "Нажмите на карточку навыка, чтобы просмотреть его документацию и информацию о безопасности на ClawHub перед установкой.",
"manualInstallHint": "Проблемы с сетью? Вы всегда можете скачать ZIP-архивы навыков с ClawHub.ai и распаковать их вручную в \"{{path}}\".",
"searching": "Поиск на ClawHub...",
"noResults": "Навыки по вашему запросу не найдены.",
"emptyPrompt": "Ищите новые навыки для расширения ваших возможностей.",
"searchError": "Ошибка поиска ClawHub. Проверьте подключение или установку."
}
}

View File

@@ -0,0 +1,92 @@
import { closeElectronApp, expect, getStableWindow, test } from './fixtures/electron';
test.describe('Russian language localization', () => {
test('shows Russian language option in setup wizard', async ({ launchElectronApp }) => {
const app = await launchElectronApp();
try {
const page = await getStableWindow(app);
// Should see the setup wizard
await expect(page.getByTestId('setup-page')).toBeVisible();
// Should have Russian language button visible
const russianButton = page.locator('button', { hasText: 'Русский' });
await expect(russianButton).toBeVisible();
} finally {
await closeElectronApp(app);
}
});
test('can switch to Russian language in setup wizard', async ({ launchElectronApp }) => {
const app = await launchElectronApp();
try {
const page = await getStableWindow(app);
await expect(page.getByTestId('setup-page')).toBeVisible();
// Click Russian language button
const russianButton = page.locator('button', { hasText: 'Русский' });
await russianButton.click();
// Verify UI renders in Russian by checking for Russian-only text
// "Добро пожаловать" is unique to Russian and won't appear in English
await expect(page.locator('h2')).toContainText('Добро пожаловать');
} finally {
await closeElectronApp(app);
}
});
test('Russian language persists after skipping setup', async ({ launchElectronApp }) => {
const app = await launchElectronApp();
try {
const page = await getStableWindow(app);
await expect(page.getByTestId('setup-page')).toBeVisible();
// Switch to Russian
const russianButton = page.locator('button', { hasText: 'Русский' });
await russianButton.click();
// Skip setup
await page.getByTestId('setup-skip-button').click();
await expect(page.getByTestId('main-layout')).toBeVisible();
// Navigate to Settings to verify language persistence
await page.getByTestId('sidebar-nav-settings').click();
await expect(page.getByTestId('settings-page')).toBeVisible();
// Verify sidebar shows Russian text (not English)
// "Настройки" is Russian-only, English is "Settings"
await expect(page.getByTestId('sidebar-nav-settings')).toContainText('Настройки');
} finally {
await closeElectronApp(app);
}
});
test('can switch to Russian in Settings page', async ({ launchElectronApp }) => {
const app = await launchElectronApp({ skipSetup: true });
try {
const page = await getStableWindow(app);
await expect(page.getByTestId('main-layout')).toBeVisible();
// Navigate to Settings (in English by default after skipSetup)
await page.getByTestId('sidebar-nav-settings').click();
await expect(page.getByTestId('settings-page')).toBeVisible();
// Click Russian language button
const russianButton = page.locator('button', { hasText: 'Русский' });
await russianButton.click();
// Verify sidebar switched to Russian
// "Настройки" is Russian-only, English is "Settings"
await expect(page.getByTestId('sidebar-nav-settings')).toContainText('Настройки');
} finally {
await closeElectronApp(app);
}
});
});