diff --git a/README.md b/README.md
index 4acb9610..1b83cf83 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,7 @@
---
@@ -129,8 +129,8 @@ CloudCLI UI is the open source UI layer that powers CloudCLI Cloud. You can self
To use Claude Code's full functionality, you'll need to manually enable tools:
1. **Open Tools Settings** - Click the gear icon in the sidebar
-3. **Enable Selectively** - Turn on only the tools you need
-4. **Apply Settings** - Your preferences are saved locally
+2. **Enable Selectively** - Turn on only the tools you need
+3. **Apply Settings** - Your preferences are saved locally
diff --git a/README.ru.md b/README.ru.md
new file mode 100644
index 00000000..d864711c
--- /dev/null
+++ b/README.ru.md
@@ -0,0 +1,218 @@
+
+

+
Cloud CLI (aka Claude Code UI)
+
+
+
+Десктопный и мобильный UI для [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Cursor CLI](https://docs.cursor.com/en/cli/overview), [Codex](https://developers.openai.com/codex) и [Gemini-CLI](https://geminicli.com/). Его можно использовать локально или удаленно, чтобы просматривать активные проекты и сессии и вносить изменения откуда угодно, с мобильного или десктопа. Это дает полноценный интерфейс, который работает везде.
+
+
+ CloudCLI Cloud · Discord · Сообщить об ошибке · Участие в разработке
+
+
+
+
+
+
+
+
+
+## Скриншоты
+
+
+
+
+
+
+Версия для десктопа
+
+
+Основной интерфейс с обзором проекта и чатом
+ |
+
+Мобильный режим
+
+
+Адаптивный мобильный интерфейс с сенсорной навигацией
+ |
+
+
+
+Выбор CLI
+
+
+Выбор между Claude Code, Cursor CLI, Codex и Gemini CLI
+ |
+
+
+
+
+
+
+
+## Возможности
+
+- **Адаптивный дизайн** - одинаково хорошо работает на десктопе, планшете и телефоне, поэтому пользоваться агентами можно и с мобильных устройств
+- **Интерактивный чат-интерфейс** - встроенный чат для удобного взаимодействия с агентами
+- **Встроенный shell-терминал** - прямой доступ к CLI агентов через встроенную оболочку
+- **Файловый менеджер** - интерактивное дерево файлов с подсветкой синтаксиса и live-редактированием
+- **Git Explorer** - просмотр, stage и commit изменений, а также переключение веток
+- **Управление сессиями** - возобновление диалогов, работа с несколькими сессиями и история
+- **Интеграция с TaskMaster AI** *(опционально)* - расширенное управление проектами с AI-планированием задач, разбором PRD и автоматизацией workflows
+- **Совместимость с моделями** - работает с Claude Sonnet 4.5, Opus 4.5, GPT-5.2 и Gemini.
+
+
+## Быстрый старт
+
+### CloudCLI Cloud (рекомендуется)
+
+Самый быстрый способ начать работу: локальная настройка не требуется. Вы получаете полностью управляемую контейнеризированную среду разработки с доступом из браузера, мобильного приложения, API или любимой IDE.
+
+**[Начать с CloudCLI Cloud](https://cloudcli.ai)**
+
+
+### Self-Hosted (open source)
+
+Попробовать CloudCLI UI можно сразу через **npx** (нужен **Node.js** v22+):
+
+```bash
+npx @siteboon/claude-code-ui
+```
+
+Или установить **глобально** для постоянного использования:
+
+```bash
+npm install -g @siteboon/claude-code-ui
+cloudcli
+```
+
+Откройте `http://localhost:3001` — все существующие сессии будут обнаружены автоматически.
+
+Больше вариантов настройки, PM2, удаленный сервер и остальное описаны в **[документации →](https://cloudcli.ai/docs)**
+
+
+---
+
+## Какой вариант подойдет вам?
+
+CloudCLI UI - это open source UI-слой, на котором построен CloudCLI Cloud. Вы можете развернуть его у себя на машине или использовать CloudCLI Cloud, который добавляет полностью управляемую облачную среду, командные функции и более глубокие интеграции.
+
+| | CloudCLI UI (self-hosted) | CloudCLI Cloud |
+|---|---|---|
+| **Лучше всего подходит для** | Разработчиков, которым нужен полноценный UI для локальных агентских сессий на своей машине | Команд и разработчиков, которым нужны агенты в облаке с доступом откуда угодно |
+| **Способ доступа** | Браузер через `[yourip]:port` | Браузер, любая IDE, REST API, n8n |
+| **Настройка** | `npx @siteboon/claude-code-ui` | Настройка не требуется |
+| **Машина должна оставаться включенной** | Да | Нет |
+| **Доступ с мобильных устройств** | Любой браузер в вашей сети | Любое устройство, нативное приложение в разработке |
+| **Доступные сессии** | Все сессии автоматически обнаруживаются в `~/.claude` | Все сессии внутри вашей облачной среды |
+| **Поддерживаемые агенты** | Claude Code, Cursor CLI, Codex, Gemini CLI | Claude Code, Cursor CLI, Codex, Gemini CLI |
+| **Файловый менеджер и Git** | Да, встроены в UI | Да, встроены в UI |
+| **Конфигурация MCP** | Управляется через UI, синхронизируется с локальным `~/.claude` | Управляется через UI |
+| **Доступ из IDE** | Ваша локальная IDE | Любая IDE, подключенная к облачной среде |
+| **REST API** | Да | Да |
+| **Узел n8n** | Нет | Да |
+| **Совместная работа в команде** | Нет | Да |
+| **Стоимость платформы** | Бесплатно, open source | От $7/месяц |
+
+> В обоих вариантах используются ваши собственные AI-подписки (Claude, Cursor и т.д.) — CloudCLI предоставляет среду, а не сам AI.
+
+---
+
+## Безопасность и настройка инструментов
+
+**🔒 Важно**: все инструменты Claude Code **по умолчанию отключены**. Это предотвращает автоматический запуск потенциально опасных операций.
+
+### Включение инструментов
+
+Чтобы использовать всю функциональность Claude Code, инструменты нужно включить вручную:
+
+1. **Откройте настройки инструментов** - нажмите на иконку шестеренки в боковой панели
+2. **Включайте выборочно** - активируйте только те инструменты, которые действительно нужны
+3. **Примените настройки** - предпочтения сохраняются локально
+
+
+
+
+*Окно настройки инструментов - включайте только то, что вам нужно*
+
+
+
+**Рекомендуемый подход**: начните с базовых инструментов и добавляйте остальные по мере необходимости. Эти настройки всегда можно поменять позже.
+
+---
+## FAQ
+
+
+Чем это отличается от Claude Code Remote Control?
+
+Claude Code Remote Control позволяет отправлять сообщения в сессию, уже запущенную в локальном терминале. При этом ваша машина должна оставаться включенной, терминал должен быть открыт, а сессии завершаются примерно через 10 минут без сетевого соединения.
+
+CloudCLI UI и CloudCLI Cloud расширяют Claude Code, а не работают рядом с ним — ваши MCP-серверы, разрешения, настройки и сессии остаются теми же самыми, что и в нативном Claude Code. Ничего не дублируется и не управляется отдельно.
+
+Вот что это означает на практике:
+
+- **Все ваши сессии, а не одна** — CloudCLI UI автоматически находит каждую сессию из папки `~/.claude`. Remote Control предоставляет только одну активную сессию, чтобы сделать ее доступной в мобильном приложении Claude.
+- **Ваши настройки остаются вашими** — MCP-серверы, права инструментов и конфигурация проекта, измененные в CloudCLI UI, записываются напрямую в конфиг Claude Code и вступают в силу сразу же, и наоборот.
+- **Поддержка большего числа агентов** — Claude Code, Cursor CLI, Codex и Gemini CLI, а не только Claude Code.
+- **Полноценный UI, а не просто окно чата** — встроены файловый менеджер, Git-интеграция, управление MCP и shell-терминал.
+- **CloudCLI Cloud работает в облаке** — можно закрыть ноутбук, а агент продолжит работу. Не нужно держать терминал открытым и машину в активном состоянии.
+
+
+
+
+Нужно ли отдельно платить за AI-подписку?
+
+Да. CloudCLI предоставляет среду, а не сам AI. Вы используете собственную подписку Claude, Cursor, Codex или Gemini. CloudCLI Cloud стоит от $7/месяц за хостируемую среду сверх этого.
+
+
+
+
+Можно ли пользоваться CloudCLI UI с телефона?
+
+Да. Для self-hosted запустите сервер на своей машине и откройте `[yourip]:port` в любом браузере внутри вашей сети. Для CloudCLI Cloud откройте сервис с любого устройства — без VPN, проброса портов и дополнительной настройки. Нативное приложение тоже разрабатывается.
+
+
+
+
+Повлияют ли изменения, сделанные в UI, на мой локальный Claude Code?
+
+Да, в self-hosted режиме. CloudCLI UI читает и записывает тот же конфиг `~/.claude`, который нативно использует Claude Code. MCP-серверы, добавленные через UI, сразу появляются в Claude Code, и наоборот.
+
+
+
+---
+
+## Сообщество и поддержка
+
+- **[Документация](https://cloudcli.ai/docs)** — установка, настройка, возможности и устранение неполадок
+- **[Discord](https://discord.gg/buxwujPNRE)** — помощь и общение с другими пользователями
+- **[GitHub Issues](https://github.com/siteboon/claudecodeui/issues)** — баг-репорты и запросы новых функций
+- **[Руководство для контрибьюторов](CONTRIBUTING.md)** — как участвовать в развитии проекта
+
+## Лицензия
+
+GNU General Public License v3.0 - подробности в файле [LICENSE](LICENSE).
+
+Этот проект открыт и может свободно использоваться, изменяться и распространяться по лицензии GPL v3.
+
+## Благодарности
+
+### Используется
+- **[Claude Code](https://docs.anthropic.com/en/docs/claude-code)** - официальный CLI от Anthropic
+- **[Cursor CLI](https://docs.cursor.com/en/cli/overview)** - официальный CLI от Cursor
+- **[Codex](https://developers.openai.com/codex)** - OpenAI Codex
+- **[Gemini-CLI](https://geminicli.com/)** - Google Gemini CLI
+- **[React](https://react.dev/)** - библиотека пользовательских интерфейсов
+- **[Vite](https://vitejs.dev/)** - быстрый инструмент сборки и dev-сервер
+- **[Tailwind CSS](https://tailwindcss.com/)** - utility-first CSS framework
+- **[CodeMirror](https://codemirror.net/)** - продвинутый редактор кода
+- **[TaskMaster AI](https://github.com/eyaltoledano/claude-task-master)** *(опционально)* - AI-управление проектами и планирование задач
+
+
+### Спонсоры
+- [Siteboon - AI powered website builder](https://siteboon.ai)
+---
+
+
+ Сделано с любовью к сообществу Claude Code, Cursor и Codex.
+
diff --git a/README.zh-CN.md b/README.zh-CN.md
index dccca4ba..60e25f63 100644
--- a/README.zh-CN.md
+++ b/README.zh-CN.md
@@ -6,7 +6,7 @@
[Claude Code](https://docs.anthropic.com/en/docs/claude-code)、[Cursor CLI](https://docs.cursor.com/en/cli/overview) 和 [Codex](https://developers.openai.com/codex) 的桌面端和移动端界面。您可以在本地或远程使用它来查看 Claude Code、Cursor 或 Codex 中的活跃项目和会话,并从任何地方(移动端或桌面端)对它们进行修改。这为您提供了一个在任何地方都能正常使用的合适界面。
-
+
## 截图
@@ -194,8 +194,8 @@ npm run dev
要使用 Claude Code 的完整功能,您需要手动启用工具:
1. **打开工具设置** - 点击侧边栏中的齿轮图标
-3. **选择性启用** - 仅打开您需要的工具
-4. **应用设置** - 您的偏好设置将保存在本地
+2. **选择性启用** - 仅打开您需要的工具
+3. **应用设置** - 您的偏好设置将保存在本地
@@ -344,4 +344,4 @@ GNU General Public License v3.0 - 详见 [LICENSE](LICENSE) 文件。
为 Claude Code、Cursor 和 Codex 社区精心打造。
-
\ No newline at end of file
+
diff --git a/src/i18n/config.js b/src/i18n/config.js
index 9563c593..250c6800 100644
--- a/src/i18n/config.js
+++ b/src/i18n/config.js
@@ -49,6 +49,15 @@ import jaCodeEditor from './locales/ja/codeEditor.json';
// eslint-disable-next-line import-x/order
import jaTasks from './locales/ja/tasks.json';
+import ruCommon from './locales/ru/common.json';
+import ruSettings from './locales/ru/settings.json';
+import ruAuth from './locales/ru/auth.json';
+import ruSidebar from './locales/ru/sidebar.json';
+import ruChat from './locales/ru/chat.json';
+import ruCodeEditor from './locales/ru/codeEditor.json';
+// eslint-disable-next-line import-x/order
+import ruTasks from './locales/ru/tasks.json';
+
// Import supported languages configuration
import { languages } from './languages.js';
@@ -107,6 +116,15 @@ i18n
codeEditor: jaCodeEditor,
tasks: jaTasks,
},
+ ru: {
+ common: ruCommon,
+ settings: ruSettings,
+ auth: ruAuth,
+ sidebar: ruSidebar,
+ chat: ruChat,
+ codeEditor: ruCodeEditor,
+ tasks: ruTasks,
+ },
},
// Default language
diff --git a/src/i18n/languages.js b/src/i18n/languages.js
index 9de7896e..dd24dd72 100644
--- a/src/i18n/languages.js
+++ b/src/i18n/languages.js
@@ -29,6 +29,11 @@ export const languages = [
label: 'Japanese',
nativeName: '日本語',
},
+ {
+ value: 'ru',
+ label: 'Russian',
+ nativeName: 'Русский',
+ },
];
/**
diff --git a/src/i18n/locales/ru/auth.json b/src/i18n/locales/ru/auth.json
new file mode 100644
index 00000000..b81fd562
--- /dev/null
+++ b/src/i18n/locales/ru/auth.json
@@ -0,0 +1,37 @@
+{
+ "login": {
+ "title": "Добро пожаловать",
+ "description": "Войдите в свой аккаунт Claude Code UI",
+ "username": "Имя пользователя",
+ "password": "Пароль",
+ "submit": "Войти",
+ "loading": "Вход...",
+ "errors": {
+ "invalidCredentials": "Неверное имя пользователя или пароль",
+ "requiredFields": "Пожалуйста, заполните все поля",
+ "networkError": "Ошибка сети. Попробуйте снова."
+ },
+ "placeholders": {
+ "username": "Введите имя пользователя",
+ "password": "Введите пароль"
+ }
+ },
+ "register": {
+ "title": "Создать аккаунт",
+ "username": "Имя пользователя",
+ "password": "Пароль",
+ "confirmPassword": "Подтвердите пароль",
+ "submit": "Создать аккаунт",
+ "loading": "Создание аккаунта...",
+ "errors": {
+ "passwordMismatch": "Пароли не совпадают",
+ "usernameTaken": "Имя пользователя уже занято",
+ "weakPassword": "Пароль слишком слабый"
+ }
+ },
+ "logout": {
+ "title": "Выйти",
+ "confirm": "Вы уверены, что хотите выйти?",
+ "button": "Выйти"
+ }
+}
diff --git a/src/i18n/locales/ru/chat.json b/src/i18n/locales/ru/chat.json
new file mode 100644
index 00000000..1cf514f3
--- /dev/null
+++ b/src/i18n/locales/ru/chat.json
@@ -0,0 +1,269 @@
+{
+ "codeBlock": {
+ "copy": "Копировать",
+ "copied": "Скопировано",
+ "copyCode": "Копировать код"
+ },
+ "copyMessage": {
+ "copy": "Копировать сообщение",
+ "copied": "Сообщение скопировано"
+ },
+ "messageTypes": {
+ "user": "П",
+ "error": "Ошибка",
+ "tool": "Инструмент",
+ "claude": "Claude",
+ "cursor": "Cursor",
+ "codex": "Codex",
+ "gemini": "Gemini"
+ },
+ "tools": {
+ "settings": "Настройки инструмента",
+ "error": "Ошибка инструмента",
+ "result": "Результат инструмента",
+ "viewParams": "Просмотр входных параметров",
+ "viewRawParams": "Просмотр сырых параметров",
+ "viewDiff": "Просмотр различий редактирования для",
+ "creatingFile": "Создание нового файла:",
+ "updatingTodo": "Обновление списка задач",
+ "read": "Чтение",
+ "readFile": "Чтение файла",
+ "updateTodo": "Обновить список задач",
+ "readTodo": "Прочитать список задач",
+ "searchResults": "результаты"
+ },
+ "search": {
+ "found": "Найдено {{count}} {{type}}",
+ "file": "файл",
+ "files": "файлов",
+ "pattern": "шаблон:",
+ "in": "в:"
+ },
+ "fileOperations": {
+ "updated": "Файл успешно обновлен",
+ "created": "Файл успешно создан",
+ "written": "Файл успешно записан",
+ "diff": "Различия",
+ "newFile": "Новый файл",
+ "viewContent": "Просмотр содержимого файла",
+ "viewFullOutput": "Просмотр полного вывода ({{count}} символов)",
+ "contentDisplayed": "Содержимое файла отображено в представлении различий выше"
+ },
+ "interactive": {
+ "title": "Интерактивный запрос",
+ "waiting": "Ожидание вашего ответа в CLI",
+ "instruction": "Пожалуйста, выберите опцию в терминале, где запущен Claude.",
+ "selectedOption": "✓ Claude выбрал опцию {{number}}",
+ "instructionDetail": "В CLI вы бы выбрали эту опцию интерактивно, используя клавиши со стрелками или введя номер."
+ },
+ "thinking": {
+ "title": "Думаю...",
+ "emoji": "💭 Думаю..."
+ },
+ "json": {
+ "response": "JSON ответ"
+ },
+ "permissions": {
+ "grant": "Предоставить разрешение для {{tool}}",
+ "added": "Разрешение добавлено",
+ "addTo": "Добавляет {{entry}} в разрешенные инструменты.",
+ "retry": "Разрешение сохранено. Повторите запрос для использования инструмента.",
+ "error": "Не удалось обновить разрешения. Попробуйте снова.",
+ "openSettings": "Открыть настройки"
+ },
+ "todo": {
+ "updated": "Список задач успешно обновлен",
+ "current": "Текущий список задач"
+ },
+ "plan": {
+ "viewPlan": "📋 Просмотр плана реализации",
+ "title": "План реализации"
+ },
+ "usageLimit": {
+ "resetAt": "Достигнут лимит использования Claude. Ваш лимит будет сброшен в **{{time}} {{timezone}}** - {{date}}"
+ },
+ "codex": {
+ "permissionMode": "Режим разрешений",
+ "modes": {
+ "default": "Режим по умолчанию",
+ "acceptEdits": "Принимать правки",
+ "bypassPermissions": "Обход разрешений",
+ "plan": "Режим планирования"
+ },
+ "descriptions": {
+ "default": "Только доверенные команды (ls, cat, grep, git status и т.д.) выполняются автоматически. Другие команды пропускаются. Может записывать в рабочее пространство.",
+ "acceptEdits": "Все команды выполняются автоматически в рабочем пространстве. Полный автоматический режим с изолированным выполнением.",
+ "bypassPermissions": "Полный системный доступ без ограничений. Все команды выполняются автоматически с полным доступом к диску и сети. Используйте с осторожностью.",
+ "plan": "Режим планирования - команды не выполняются"
+ },
+ "technicalDetails": "Технические детали"
+ },
+ "gemini": {
+ "permissionMode": "Режим разрешений Gemini",
+ "description": "Управление тем, как Gemini CLI обрабатывает подтверждения операций.",
+ "modes": {
+ "default": {
+ "title": "Стандартный (запрашивать подтверждение)",
+ "description": "Gemini будет запрашивать подтверждение перед выполнением команд, записью файлов и получением веб-ресурсов."
+ },
+ "autoEdit": {
+ "title": "Автоматическое редактирование (пропускать подтверждения файлов)",
+ "description": "Gemini будет автоматически подтверждать редактирование файлов и веб-запросы, но все еще будет запрашивать подтверждение для команд оболочки."
+ },
+ "yolo": {
+ "title": "YOLO (обход всех разрешений)",
+ "description": "Gemini будет выполнять все операции без запроса подтверждения. Будьте осторожны."
+ }
+ }
+ },
+ "input": {
+ "placeholder": "Введите / для команд, @ для файлов, или спросите {{provider}} что угодно...",
+ "placeholderDefault": "Введите ваше сообщение...",
+ "disabled": "Ввод отключен",
+ "attachFiles": "Прикрепить файлы",
+ "attachImages": "Прикрепить изображения",
+ "send": "Отправить",
+ "stop": "Остановить",
+ "hintText": {
+ "ctrlEnter": "Ctrl+Enter для отправки • Shift+Enter для новой строки • Tab для смены режима • / для команд",
+ "enter": "Enter для отправки • Shift+Enter для новой строки • Tab для смены режима • / для команд"
+ },
+ "clickToChangeMode": "Нажмите для смены режима разрешений (или нажмите Tab в поле ввода)",
+ "showAllCommands": "Показать все команды",
+ "clearInput": "Очистить ввод",
+ "scrollToBottom": "Прокрутить вниз"
+ },
+ "thinkingMode": {
+ "selector": {
+ "title": "Режим размышления",
+ "description": "Расширенное размышление дает Claude больше времени для оценки альтернатив",
+ "active": "Активен",
+ "tip": "Более высокие режимы размышления занимают больше времени, но обеспечивают более тщательный анализ"
+ },
+ "modes": {
+ "none": {
+ "name": "Стандартный",
+ "description": "Обычный ответ Claude",
+ "prefix": ""
+ },
+ "think": {
+ "name": "Думать",
+ "description": "Базовое расширенное размышление",
+ "prefix": "думать"
+ },
+ "thinkHard": {
+ "name": "Думать усердно",
+ "description": "Более тщательная оценка",
+ "prefix": "думать усердно"
+ },
+ "thinkHarder": {
+ "name": "Думать еще усерднее",
+ "description": "Глубокий анализ с альтернативами",
+ "prefix": "думать еще усерднее"
+ },
+ "ultrathink": {
+ "name": "Ультра-размышление",
+ "description": "Максимальный бюджет размышления",
+ "prefix": "ультра-размышление"
+ }
+ },
+ "buttonTitle": "Режим размышления: {{mode}}"
+ },
+ "providerSelection": {
+ "title": "Выберите вашего AI-ассистента",
+ "description": "Выберите провайдера для начала нового разговора",
+ "selectModel": "Выбрать модель",
+ "providerInfo": {
+ "anthropic": "от Anthropic",
+ "openai": "от OpenAI",
+ "cursorEditor": "AI редактор кода",
+ "google": "от Google"
+ },
+ "readyPrompt": {
+ "claude": "Готов использовать Claude с {{model}}. Начните вводить сообщение ниже.",
+ "cursor": "Готов использовать Cursor с {{model}}. Начните вводить сообщение ниже.",
+ "codex": "Готов использовать Codex с {{model}}. Начните вводить сообщение ниже.",
+ "gemini": "Готов использовать Gemini с {{model}}. Начните вводить сообщение ниже.",
+ "default": "Выберите провайдера выше для начала"
+ }
+ },
+ "session": {
+ "continue": {
+ "title": "Продолжить разговор",
+ "description": "Задавайте вопросы о вашем коде, запрашивайте изменения или получайте помощь с задачами разработки"
+ },
+ "loading": {
+ "olderMessages": "Загрузка старых сообщений...",
+ "sessionMessages": "Загрузка сообщений сеанса..."
+ },
+ "messages": {
+ "showingOf": "Показано {{shown}} из {{total}} сообщений",
+ "scrollToLoad": "Прокрутите вверх для загрузки еще",
+ "showingLast": "Показаны последние {{count}} сообщений (всего {{total}})",
+ "loadEarlier": "Загрузить более ранние сообщения",
+ "loadAll": "Загрузить все сообщения",
+ "loadingAll": "Загрузка всех сообщений...",
+ "allLoaded": "Все сообщения загружены",
+ "perfWarning": "Все сообщения загружены — прокрутка может быть медленнее. Нажмите \"Прокрутить вниз\" для восстановления производительности."
+ }
+ },
+ "shell": {
+ "selectProject": {
+ "title": "Выберите проект",
+ "description": "Выберите проект для открытия интерактивной оболочки в этом каталоге"
+ },
+ "status": {
+ "newSession": "Новый сеанс",
+ "initializing": "Инициализация...",
+ "restarting": "Перезапуск..."
+ },
+ "actions": {
+ "disconnect": "Отключиться",
+ "disconnectTitle": "Отключиться от оболочки",
+ "restart": "Перезапустить",
+ "restartTitle": "Перезапустить оболочку (сначала отключитесь)",
+ "connect": "Продолжить в оболочке",
+ "connectTitle": "Подключиться к оболочке"
+ },
+ "loading": "Загрузка терминала...",
+ "connecting": "Подключение к оболочке...",
+ "startSession": "Начать новый сеанс Claude",
+ "resumeSession": "Возобновить сеанс: {{displayName}}...",
+ "runCommand": "Выполнить {{command}} в {{projectName}}",
+ "startCli": "Запуск Claude CLI в {{projectName}}",
+ "defaultCommand": "команда"
+ },
+ "claudeStatus": {
+ "actions": {
+ "thinking": "Думает",
+ "processing": "Обрабатывает",
+ "analyzing": "Анализирует",
+ "working": "Работает",
+ "computing": "Вычисляет",
+ "reasoning": "Рассуждает"
+ },
+ "state": {
+ "live": "В сети",
+ "paused": "Приостановлен"
+ },
+ "elapsed": {
+ "seconds": "{{count}}с",
+ "minutesSeconds": "{{minutes}}м {{seconds}}с",
+ "label": "Прошло {{time}}",
+ "startingNow": "Начинается сейчас"
+ },
+ "controls": {
+ "stopGeneration": "Остановить генерацию",
+ "pressEscToStop": "Нажмите Esc в любое время для остановки"
+ },
+ "providers": {
+ "assistant": "Ассистент"
+ }
+ },
+ "projectSelection": {
+ "startChatWithProvider": "Выберите проект для начала чата с {{provider}}"
+ },
+ "tasks": {
+ "nextTaskPrompt": "Начать следующую задачу"
+ }
+}
diff --git a/src/i18n/locales/ru/codeEditor.json b/src/i18n/locales/ru/codeEditor.json
new file mode 100644
index 00000000..696e4d53
--- /dev/null
+++ b/src/i18n/locales/ru/codeEditor.json
@@ -0,0 +1,36 @@
+{
+ "toolbar": {
+ "changes": "изменения",
+ "previousChange": "Предыдущее изменение",
+ "nextChange": "Следующее изменение",
+ "hideDiff": "Скрыть подсветку различий",
+ "showDiff": "Показать подсветку различий",
+ "settings": "Настройки редактора",
+ "collapse": "Свернуть редактор",
+ "expand": "Развернуть редактор на всю ширину"
+ },
+ "loading": "Загрузка {{fileName}}...",
+ "header": {
+ "showingChanges": "Показаны изменения"
+ },
+ "actions": {
+ "download": "Скачать файл",
+ "save": "Сохранить",
+ "saving": "Сохранение...",
+ "saved": "Сохранено!",
+ "exitFullscreen": "Выйти из полноэкранного режима",
+ "fullscreen": "Полноэкранный режим",
+ "close": "Закрыть",
+ "previewMarkdown": "Предпросмотр markdown",
+ "editMarkdown": "Редактировать markdown"
+ },
+ "footer": {
+ "lines": "Строк:",
+ "characters": "Символов:",
+ "shortcuts": "Нажмите Ctrl+S для сохранения • Esc для закрытия"
+ },
+ "binaryFile": {
+ "title": "Бинарный файл",
+ "message": "Файл \"{{fileName}}\" не может быть отображен в текстовом редакторе, так как это бинарный файл."
+ }
+}
diff --git a/src/i18n/locales/ru/common.json b/src/i18n/locales/ru/common.json
new file mode 100644
index 00000000..3474b49e
--- /dev/null
+++ b/src/i18n/locales/ru/common.json
@@ -0,0 +1,238 @@
+{
+ "buttons": {
+ "save": "Сохранить",
+ "cancel": "Отмена",
+ "delete": "Удалить",
+ "create": "Создать",
+ "edit": "Редактировать",
+ "close": "Закрыть",
+ "confirm": "Подтвердить",
+ "submit": "Отправить",
+ "retry": "Повторить",
+ "refresh": "Обновить",
+ "search": "Поиск",
+ "clear": "Очистить",
+ "copy": "Копировать",
+ "download": "Скачать",
+ "upload": "Загрузить",
+ "browse": "Обзор"
+ },
+ "tabs": {
+ "chat": "Чат",
+ "shell": "Терминал",
+ "files": "Файлы",
+ "git": "Система контроля версий",
+ "tasks": "Задачи"
+ },
+ "status": {
+ "loading": "Загрузка...",
+ "success": "Успешно",
+ "error": "Ошибка",
+ "failed": "Не удалось",
+ "pending": "Ожидание",
+ "completed": "Завершено",
+ "inProgress": "В процессе"
+ },
+ "messages": {
+ "savedSuccessfully": "Успешно сохранено",
+ "deletedSuccessfully": "Успешно удалено",
+ "updatedSuccessfully": "Успешно обновлено",
+ "operationFailed": "Операция не удалась",
+ "networkError": "Ошибка сети. Проверьте подключение.",
+ "unauthorized": "Не авторизован. Пожалуйста, войдите.",
+ "notFound": "Не найдено",
+ "invalidInput": "Неверный ввод",
+ "requiredField": "Это поле обязательно",
+ "unknownError": "Произошла неизвестная ошибка"
+ },
+ "navigation": {
+ "settings": "Настройки",
+ "home": "Главная",
+ "back": "Назад",
+ "next": "Далее",
+ "previous": "Предыдущий",
+ "logout": "Выйти"
+ },
+ "common": {
+ "language": "Язык",
+ "theme": "Тема",
+ "darkMode": "Темная тема",
+ "lightMode": "Светлая тема",
+ "name": "Имя",
+ "description": "Описание",
+ "enabled": "Включено",
+ "disabled": "Отключено",
+ "optional": "Необязательно",
+ "version": "Версия",
+ "select": "Выбрать",
+ "selectAll": "Выбрать все",
+ "deselectAll": "Снять выделение"
+ },
+ "time": {
+ "justNow": "Только что",
+ "minutesAgo": "{{count}} мин. назад",
+ "hoursAgo": "{{count}} ч. назад",
+ "daysAgo": "{{count}} дн. назад",
+ "yesterday": "Вчера"
+ },
+ "fileOperations": {
+ "newFile": "Новый файл",
+ "newFolder": "Новая папка",
+ "rename": "Переименовать",
+ "move": "Переместить",
+ "copyPath": "Копировать путь",
+ "openInEditor": "Открыть в редакторе"
+ },
+ "mainContent": {
+ "loading": "Загрузка Claude Code UI",
+ "settingUpWorkspace": "Настройка рабочего пространства...",
+ "chooseProject": "Выберите проект",
+ "selectProjectDescription": "Выберите проект на боковой панели, чтобы начать работу с Claude. Каждый проект содержит ваши сеансы чата и историю файлов.",
+ "tip": "Совет",
+ "createProjectMobile": "Нажмите кнопку меню выше для доступа к проектам",
+ "createProjectDesktop": "Создайте новый проект, нажав на значок папки на боковой панели",
+ "newSession": "Новый сеанс",
+ "untitledSession": "Безымянный сеанс",
+ "projectFiles": "Файлы проекта"
+ },
+ "fileTree": {
+ "loading": "Загрузка файлов...",
+ "files": "Файлы",
+ "simpleView": "Простой вид",
+ "compactView": "Компактный вид",
+ "detailedView": "Подробный вид",
+ "searchPlaceholder": "Поиск файлов и папок...",
+ "clearSearch": "Очистить поиск",
+ "name": "Имя",
+ "size": "Размер",
+ "modified": "Изменено",
+ "permissions": "Права доступа",
+ "noFilesFound": "Файлы не найдены",
+ "checkProjectPath": "Проверьте доступность пути к проекту",
+ "noMatchesFound": "Совпадений не найдено",
+ "tryDifferentSearch": "Попробуйте другой поисковый запрос или очистите поиск",
+ "justNow": "только что",
+ "minAgo": "{{count}} мин. назад",
+ "hoursAgo": "{{count}} ч. назад",
+ "daysAgo": "{{count}} дн. назад",
+ "newFile": "Новый файл (Cmd+N)",
+ "newFolder": "Новая папка (Cmd+Shift+N)",
+ "refresh": "Обновить",
+ "collapseAll": "Свернуть все",
+ "context": {
+ "rename": "Переименовать",
+ "delete": "Удалить",
+ "copyPath": "Копировать путь",
+ "download": "Скачать",
+ "newFile": "Новый файл",
+ "newFolder": "Новая папка",
+ "refresh": "Обновить",
+ "menuLabel": "Контекстное меню файла",
+ "loading": "Загрузка..."
+ }
+ },
+ "projectWizard": {
+ "title": "Создать новый проект",
+ "steps": {
+ "type": "Тип",
+ "configure": "Настройка",
+ "confirm": "Подтверждение"
+ },
+ "step1": {
+ "question": "У вас уже есть рабочее пространство или вы хотите создать новое?",
+ "existing": {
+ "title": "Существующее рабочее пространство",
+ "description": "У меня уже есть рабочее пространство на сервере, нужно только добавить его в список проектов"
+ },
+ "new": {
+ "title": "Новое рабочее пространство",
+ "description": "Создать новое рабочее пространство, опционально клонировать из репозитория GitHub"
+ }
+ },
+ "step2": {
+ "existingPath": "Путь к рабочему пространству",
+ "newPath": "Путь к рабочему пространству",
+ "existingPlaceholder": "/путь/к/существующему/пространству",
+ "newPlaceholder": "/путь/к/новому/пространству",
+ "existingHelp": "Полный путь к каталогу вашего рабочего пространства",
+ "newHelp": "Полный путь к каталогу вашего рабочего пространства",
+ "githubUrl": "URL GitHub (необязательно)",
+ "githubPlaceholder": "https://github.com/username/repository",
+ "githubHelp": "Необязательно: укажите URL GitHub для клонирования репозитория",
+ "githubAuth": "Аутентификация GitHub (необязательно)",
+ "githubAuthHelp": "Требуется только для приватных репозиториев. Публичные репозитории можно клонировать без аутентификации.",
+ "loadingTokens": "Загрузка сохраненных токенов...",
+ "storedToken": "Сохраненный токен",
+ "newToken": "Новый токен",
+ "nonePublic": "Нет (публичный)",
+ "selectToken": "Выбрать токен",
+ "selectTokenPlaceholder": "-- Выберите токен --",
+ "tokenPlaceholder": "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
+ "tokenHelp": "Этот токен будет использован только для этой операции",
+ "publicRepoInfo": "Публичные репозитории не требуют аутентификации. Вы можете пропустить токен при клонировании публичного репозитория.",
+ "noTokensHelp": "Нет доступных сохраненных токенов. Вы можете добавить токены в Настройки → API ключи для удобного повторного использования.",
+ "optionalTokenPublic": "Токен GitHub (необязательно для публичных репозиториев)",
+ "tokenPublicPlaceholder": "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (оставьте пустым для публичных репозиториев)"
+ },
+ "step3": {
+ "reviewConfig": "Проверьте вашу конфигурацию",
+ "workspaceType": "Тип рабочего пространства:",
+ "existingWorkspace": "Существующее рабочее пространство",
+ "newWorkspace": "Новое рабочее пространство",
+ "path": "Путь:",
+ "cloneFrom": "Клонировать из:",
+ "authentication": "Аутентификация:",
+ "usingStoredToken": "Использование сохраненного токена:",
+ "usingProvidedToken": "Использование предоставленного токена",
+ "noAuthentication": "Без аутентификации",
+ "sshKey": "SSH ключ",
+ "existingInfo": "Рабочее пространство будет добавлено в список проектов и будет доступно для сеансов Claude/Cursor.",
+ "newWithClone": "Репозиторий будет клонирован в эту папку.",
+ "newEmpty": "Рабочее пространство будет добавлено в список проектов и будет доступно для сеансов Claude/Cursor.",
+ "cloningRepository": "Клонирование репозитория..."
+ },
+ "buttons": {
+ "cancel": "Отмена",
+ "back": "Назад",
+ "next": "Далее",
+ "createProject": "Создать проект",
+ "creating": "Создание...",
+ "cloning": "Клонирование..."
+ },
+ "errors": {
+ "selectType": "Пожалуйста, выберите, есть ли у вас существующее рабочее пространство или вы хотите создать новое",
+ "providePath": "Пожалуйста, укажите путь к рабочему пространству",
+ "failedToCreate": "Не удалось создать рабочее пространство",
+ "failedToCreateFolder": "Не удалось создать папку"
+ }
+ },
+ "versionUpdate": {
+ "title": "Доступно обновление",
+ "newVersionReady": "Новая версия готова",
+ "currentVersion": "Текущая версия",
+ "latestVersion": "Последняя версия",
+ "whatsNew": "Что нового:",
+ "viewFullRelease": "Посмотреть полный релиз",
+ "updateProgress": "Прогресс обновления:",
+ "manualUpgrade": "Ручное обновление:",
+ "npmUpgradeCommand": "npm install -g @siteboon/claude-code-ui@latest",
+ "manualUpgradeHint": "Или нажмите \"Обновить сейчас\" для автоматического обновления.",
+ "updateCompleted": "Обновление успешно завершено!",
+ "restartServer": "Пожалуйста, перезапустите сервер для применения изменений.",
+ "updateFailed": "Обновление не удалось",
+ "buttons": {
+ "close": "Закрыть",
+ "later": "Позже",
+ "copyCommand": "Копировать команду",
+ "updateNow": "Обновить сейчас",
+ "updating": "Обновление..."
+ },
+ "ariaLabels": {
+ "closeModal": "Закрыть модальное окно обновления версии",
+ "showSidebar": "Показать боковую панель",
+ "settings": "Настройки",
+ "updateAvailable": "Доступно обновление",
+ "closeSidebar": "Закрыть боковую панель"
+ }
+ }
+}
diff --git a/src/i18n/locales/ru/settings.json b/src/i18n/locales/ru/settings.json
new file mode 100644
index 00000000..68decf3f
--- /dev/null
+++ b/src/i18n/locales/ru/settings.json
@@ -0,0 +1,434 @@
+{
+ "title": "Настройки",
+ "tabs": {
+ "account": "Аккаунт",
+ "permissions": "Разрешения",
+ "mcpServers": "MCP серверы",
+ "appearance": "Внешний вид"
+ },
+ "account": {
+ "title": "Аккаунт",
+ "language": "Язык",
+ "languageLabel": "Язык интерфейса",
+ "languageDescription": "Выберите предпочитаемый язык для интерфейса",
+ "username": "Имя пользователя",
+ "email": "Email",
+ "profile": "Профиль",
+ "changePassword": "Изменить пароль"
+ },
+ "mcp": {
+ "title": "MCP серверы",
+ "addServer": "Добавить сервер",
+ "editServer": "Редактировать сервер",
+ "deleteServer": "Удалить сервер",
+ "serverName": "Имя сервера",
+ "serverType": "Тип сервера",
+ "config": "Конфигурация",
+ "testConnection": "Проверить подключение",
+ "status": "Статус",
+ "connected": "Подключен",
+ "disconnected": "Отключен",
+ "scope": {
+ "label": "Область",
+ "user": "Пользователь",
+ "project": "Проект"
+ }
+ },
+ "appearance": {
+ "title": "Внешний вид",
+ "theme": "Тема",
+ "codeEditor": "Редактор кода",
+ "editorTheme": "Тема редактора",
+ "wordWrap": "Перенос слов",
+ "showMinimap": "Показать миникарту",
+ "lineNumbers": "Номера строк",
+ "fontSize": "Размер шрифта"
+ },
+ "actions": {
+ "saveChanges": "Сохранить изменения",
+ "resetToDefaults": "Сбросить к значениям по умолчанию",
+ "cancelChanges": "Отменить изменения"
+ },
+ "quickSettings": {
+ "title": "Быстрые настройки",
+ "sections": {
+ "appearance": "Внешний вид",
+ "toolDisplay": "Отображение инструментов",
+ "viewOptions": "Параметры просмотра",
+ "inputSettings": "Настройки ввода",
+ "whisperDictation": "Диктовка Whisper"
+ },
+ "darkMode": "Темная тема",
+ "autoExpandTools": "Автоматически разворачивать инструменты",
+ "showRawParameters": "Показывать сырые параметры",
+ "showThinking": "Показывать размышления",
+ "autoScrollToBottom": "Автопрокрутка вниз",
+ "sendByCtrlEnter": "Отправка по Ctrl+Enter",
+ "sendByCtrlEnterDescription": "Когда включено, нажатие Ctrl+Enter будет отправлять сообщение вместо просто Enter. Это полезно для пользователей IME, чтобы избежать случайной отправки.",
+ "dragHandle": {
+ "dragging": "Перетаскивание ручки",
+ "closePanel": "Закрыть панель настроек",
+ "openPanel": "Открыть панель настроек",
+ "draggingStatus": "Перетаскивание...",
+ "toggleAndMove": "Нажмите для переключения, перетащите для перемещения"
+ },
+ "whisper": {
+ "modes": {
+ "default": "Режим по умолчанию",
+ "defaultDescription": "Прямая транскрипция вашей речи",
+ "prompt": "Улучшение запроса",
+ "promptDescription": "Преобразование грубых идей в четкие, детальные AI-запросы",
+ "vibe": "Режим Vibe",
+ "vibeDescription": "Форматирование идей как четких инструкций агента с деталями"
+ }
+ }
+ },
+ "terminalShortcuts": {
+ "title": "Горячие клавиши терминала",
+ "sectionKeys": "Клавиши",
+ "sectionNavigation": "Навигация",
+ "escape": "Escape",
+ "tab": "Tab",
+ "shiftTab": "Shift+Tab",
+ "arrowUp": "Стрелка вверх",
+ "arrowDown": "Стрелка вниз",
+ "scrollDown": "Прокрутка вниз",
+ "handle": {
+ "closePanel": "Закрыть панель горячих клавиш",
+ "openPanel": "Открыть панель горячих клавиш"
+ }
+ },
+ "mainTabs": {
+ "label": "Настройки",
+ "agents": "Агенты",
+ "appearance": "Внешний вид",
+ "git": "Git",
+ "apiTokens": "API и токены",
+ "tasks": "Задачи"
+ },
+ "appearanceSettings": {
+ "darkMode": {
+ "label": "Темная тема",
+ "description": "Переключение между светлой и темной темами"
+ },
+ "projectSorting": {
+ "label": "Сортировка проектов",
+ "description": "Как проекты упорядочены на боковой панели",
+ "alphabetical": "По алфавиту",
+ "recentActivity": "По недавней активности"
+ },
+ "codeEditor": {
+ "title": "Редактор кода",
+ "theme": {
+ "label": "Тема редактора",
+ "description": "Тема по умолчанию для редактора кода"
+ },
+ "wordWrap": {
+ "label": "Перенос слов",
+ "description": "Включить перенос слов по умолчанию в редакторе"
+ },
+ "showMinimap": {
+ "label": "Показать миникарту",
+ "description": "Отображать миникарту для упрощения навигации в представлении различий"
+ },
+ "lineNumbers": {
+ "label": "Показать номера строк",
+ "description": "Отображать номера строк в редакторе"
+ },
+ "fontSize": {
+ "label": "Размер шрифта",
+ "description": "Размер шрифта редактора в пикселях"
+ }
+ }
+ },
+ "mcpForm": {
+ "title": {
+ "add": "Добавить MCP сервер",
+ "edit": "Редактировать MCP сервер"
+ },
+ "importMode": {
+ "form": "Ввод формы",
+ "json": "Импорт JSON"
+ },
+ "scope": {
+ "label": "Область",
+ "userGlobal": "Пользователь (глобально)",
+ "projectLocal": "Проект (локально)",
+ "userDescription": "Область пользователя: доступно во всех проектах на вашей машине",
+ "projectDescription": "Локальная область: доступно только в выбранном проекте",
+ "cannotChange": "Область не может быть изменена при редактировании существующего сервера"
+ },
+ "fields": {
+ "serverName": "Имя сервера",
+ "transportType": "Тип транспорта",
+ "command": "Команда",
+ "arguments": "Аргументы (по одному на строку)",
+ "jsonConfig": "JSON конфигурация",
+ "url": "URL",
+ "envVars": "Переменные окружения (КЛЮЧ=значение, по одной на строку)",
+ "headers": "Заголовки (КЛЮЧ=значение, по одному на строку)",
+ "selectProject": "Выберите проект..."
+ },
+ "placeholders": {
+ "serverName": "мой-сервер"
+ },
+ "validation": {
+ "missingType": "Отсутствует обязательное поле: type",
+ "stdioRequiresCommand": "тип stdio требует поле command",
+ "httpRequiresUrl": "тип {{type}} требует поле url",
+ "invalidJson": "Неверный формат JSON",
+ "jsonHelp": "Вставьте конфигурацию вашего MCP сервера в формате JSON. Примеры форматов:",
+ "jsonExampleStdio": "• stdio: {\"type\":\"stdio\",\"command\":\"npx\",\"args\":[\"@upstash/context7-mcp\"]}",
+ "jsonExampleHttp": "• http/sse: {\"type\":\"http\",\"url\":\"https://api.example.com/mcp\"}"
+ },
+ "configDetails": "Детали конфигурации (из {{configFile}})",
+ "projectPath": "Путь: {{path}}",
+ "actions": {
+ "cancel": "Отмена",
+ "saving": "Сохранение...",
+ "addServer": "Добавить сервер",
+ "updateServer": "Обновить сервер"
+ }
+ },
+ "saveStatus": {
+ "success": "Настройки успешно сохранены!",
+ "error": "Не удалось сохранить настройки",
+ "saving": "Сохранение..."
+ },
+ "footerActions": {
+ "save": "Сохранить настройки",
+ "cancel": "Отмена"
+ },
+ "git": {
+ "title": "Конфигурация Git",
+ "description": "Настройте вашу git идентичность для коммитов. Эти настройки будут применены глобально через git config --global",
+ "name": {
+ "label": "Имя Git",
+ "help": "Ваше имя для git коммитов"
+ },
+ "email": {
+ "label": "Email Git",
+ "help": "Ваш email для git коммитов"
+ },
+ "actions": {
+ "save": "Сохранить конфигурацию",
+ "saving": "Сохранение..."
+ },
+ "status": {
+ "success": "Успешно сохранено"
+ }
+ },
+ "apiKeys": {
+ "title": "API ключи",
+ "description": "Генерируйте API ключи для доступа к внешнему API из других приложений.",
+ "newKey": {
+ "alertTitle": "⚠️ Сохраните ваш API ключ",
+ "alertMessage": "Это единственный раз, когда вы увидите этот ключ. Сохраните его в безопасном месте.",
+ "iveSavedIt": "Я сохранил его"
+ },
+ "form": {
+ "placeholder": "Имя API ключа (например, Продакшн сервер)",
+ "createButton": "Создать",
+ "cancelButton": "Отмена"
+ },
+ "newButton": "Новый API ключ",
+ "empty": "API ключи еще не созданы.",
+ "list": {
+ "created": "Создан:",
+ "lastUsed": "Последнее использование:"
+ },
+ "confirmDelete": "Вы уверены, что хотите удалить этот API ключ?",
+ "status": {
+ "active": "Активен",
+ "inactive": "Неактивен"
+ },
+ "github": {
+ "title": "GitHub токены",
+ "description": "Добавьте персональные токены доступа GitHub для клонирования приватных репозиториев через внешний API.",
+ "descriptionAlt": "Добавьте персональные токены доступа GitHub для клонирования приватных репозиториев. Вы также можете передавать токены напрямую в API запросах без их сохранения.",
+ "addButton": "Добавить токен",
+ "form": {
+ "namePlaceholder": "Имя токена (например, Личные репозитории)",
+ "tokenPlaceholder": "Персональный токен доступа GitHub (ghp_...)",
+ "descriptionPlaceholder": "Описание (необязательно)",
+ "addButton": "Добавить токен",
+ "cancelButton": "Отмена",
+ "howToCreate": "Как создать персональный токен доступа GitHub →"
+ },
+ "empty": "GitHub токены еще не добавлены.",
+ "added": "Добавлен:",
+ "confirmDelete": "Вы уверены, что хотите удалить этот GitHub токен?"
+ },
+ "apiDocsLink": "Документация API",
+ "documentation": {
+ "title": "Документация внешнего API",
+ "description": "Узнайте, как использовать внешний API для запуска сеансов Claude/Cursor из ваших приложений.",
+ "viewLink": "Просмотр документации API →"
+ },
+ "loading": "Загрузка...",
+ "version": {
+ "updateAvailable": "Доступно обновление: v{{version}}"
+ }
+ },
+ "tasks": {
+ "checking": "Проверка установки TaskMaster...",
+ "notInstalled": {
+ "title": "TaskMaster AI CLI не установлен",
+ "description": "TaskMaster CLI требуется для использования функций управления задачами. Установите его для начала работы:",
+ "installCommand": "npm install -g task-master-ai",
+ "viewOnGitHub": "Посмотреть на GitHub",
+ "afterInstallation": "После установки:",
+ "steps": {
+ "restart": "Перезапустите это приложение",
+ "autoAvailable": "Функции TaskMaster станут автоматически доступны",
+ "initCommand": "Используйте task-master init в каталоге вашего проекта"
+ }
+ },
+ "settings": {
+ "enableLabel": "Включить интеграцию TaskMaster",
+ "enableDescription": "Показывать задачи TaskMaster, баннеры и индикаторы боковой панели в интерфейсе"
+ }
+ },
+ "agents": {
+ "authStatus": {
+ "checking": "Проверка...",
+ "connected": "Подключен",
+ "notConnected": "Не подключен",
+ "disconnected": "Отключен",
+ "checkingAuth": "Проверка статуса аутентификации...",
+ "loggedInAs": "Вошли как {{email}}",
+ "authenticatedUser": "аутентифицированный пользователь"
+ },
+ "account": {
+ "claude": {
+ "description": "AI-ассистент Anthropic Claude"
+ },
+ "cursor": {
+ "description": "Редактор кода с AI Cursor"
+ },
+ "codex": {
+ "description": "AI-ассистент OpenAI Codex"
+ }
+ },
+ "connectionStatus": "Статус подключения",
+ "login": {
+ "title": "Вход",
+ "reAuthenticate": "Повторная аутентификация",
+ "description": "Войдите в ваш аккаунт {{agent}} для включения AI функций",
+ "reAuthDescription": "Войдите с другим аккаунтом или обновите учетные данные",
+ "button": "Войти",
+ "reLoginButton": "Войти снова"
+ },
+ "error": "Ошибка: {{error}}"
+ },
+ "permissions": {
+ "title": "Настройки разрешений",
+ "skipPermissions": {
+ "label": "Пропускать запросы разрешений (используйте с осторожностью)",
+ "claudeDescription": "Эквивалентно флагу --dangerously-skip-permissions",
+ "cursorDescription": "Эквивалентно флагу -f в Cursor CLI"
+ },
+ "allowedTools": {
+ "title": "Разрешенные инструменты",
+ "description": "Инструменты, которые автоматически разрешены без запроса разрешения",
+ "placeholder": "например, \"Bash(git log:*)\" или \"Write\"",
+ "quickAdd": "Быстро добавить общие инструменты:",
+ "empty": "Разрешенные инструменты не настроены"
+ },
+ "blockedTools": {
+ "title": "Заблокированные инструменты",
+ "description": "Инструменты, которые автоматически блокируются без запроса разрешения",
+ "placeholder": "например, \"Bash(rm:*)\"",
+ "empty": "Заблокированные инструменты не настроены"
+ },
+ "allowedCommands": {
+ "title": "Разрешенные команды оболочки",
+ "description": "Команды оболочки, которые автоматически разрешены без запроса",
+ "placeholder": "например, \"Shell(ls)\" или \"Shell(git status)\"",
+ "quickAdd": "Быстро добавить общие команды:",
+ "empty": "Разрешенные команды не настроены"
+ },
+ "blockedCommands": {
+ "title": "Заблокированные команды оболочки",
+ "description": "Команды оболочки, которые автоматически блокируются",
+ "placeholder": "например, \"Shell(rm -rf)\" или \"Shell(sudo)\"",
+ "empty": "Заблокированные команды не настроены"
+ },
+ "toolExamples": {
+ "title": "Примеры шаблонов инструментов:",
+ "bashGitLog": "- Разрешить все команды git log",
+ "bashGitDiff": "- Разрешить все команды git diff",
+ "write": "- Разрешить все использование инструмента Write",
+ "bashRm": "- Заблокировать все команды rm (опасно)"
+ },
+ "shellExamples": {
+ "title": "Примеры команд оболочки:",
+ "ls": "- Разрешить команду ls",
+ "gitStatus": "- Разрешить git status",
+ "npmInstall": "- Разрешить npm install",
+ "rmRf": "- Заблокировать рекурсивное удаление"
+ },
+ "codex": {
+ "permissionMode": "Режим разрешений",
+ "description": "Управляет тем, как Codex обрабатывает изменения файлов и выполнение команд",
+ "modes": {
+ "default": {
+ "title": "По умолчанию",
+ "description": "Только доверенные команды (ls, cat, grep, git status и т.д.) выполняются автоматически. Другие команды пропускаются. Может записывать в рабочее пространство."
+ },
+ "acceptEdits": {
+ "title": "Принимать правки",
+ "description": "Все команды выполняются автоматически в рабочем пространстве. Полный автоматический режим с изолированным выполнением."
+ },
+ "bypassPermissions": {
+ "title": "Обход разрешений",
+ "description": "Полный системный доступ без ограничений. Все команды выполняются автоматически с полным доступом к диску и сети. Используйте с осторожностью."
+ }
+ },
+ "technicalDetails": "Технические детали",
+ "technicalInfo": {
+ "default": "sandboxMode=workspace-write, approvalPolicy=untrusted. Доверенные команды: cat, cd, grep, head, ls, pwd, tail, git status/log/diff/show, find (без -exec) и т.д.",
+ "acceptEdits": "sandboxMode=workspace-write, approvalPolicy=never. Все команды автоматически выполняются в каталоге проекта.",
+ "bypassPermissions": "sandboxMode=danger-full-access, approvalPolicy=never. Полный системный доступ, используйте только в доверенных средах.",
+ "overrideNote": "Вы можете переопределить это для каждого сеанса, используя кнопку режима в интерфейсе чата."
+ }
+ },
+ "actions": {
+ "add": "Добавить"
+ }
+ },
+ "mcpServers": {
+ "title": "MCP серверы",
+ "description": {
+ "claude": "Серверы Model Context Protocol предоставляют дополнительные инструменты и источники данных для Claude",
+ "cursor": "Серверы Model Context Protocol предоставляют дополнительные инструменты и источники данных для Cursor",
+ "codex": "Серверы Model Context Protocol предоставляют дополнительные инструменты и источники данных для Codex"
+ },
+ "addButton": "Добавить MCP сервер",
+ "empty": "MCP серверы не настроены",
+ "serverType": "Тип",
+ "scope": {
+ "local": "локальный",
+ "user": "пользователь"
+ },
+ "config": {
+ "command": "Команда",
+ "url": "URL",
+ "args": "Аргументы",
+ "environment": "Окружение"
+ },
+ "tools": {
+ "title": "Инструменты",
+ "count": "({{count}}):",
+ "more": "+{{count}} еще"
+ },
+ "actions": {
+ "edit": "Редактировать сервер",
+ "delete": "Удалить сервер"
+ },
+ "help": {
+ "title": "О Codex MCP",
+ "description": "Codex поддерживает MCP серверы на основе stdio. Вы можете добавлять серверы, которые расширяют возможности Codex дополнительными инструментами и ресурсами."
+ }
+ }
+}
diff --git a/src/i18n/locales/ru/sidebar.json b/src/i18n/locales/ru/sidebar.json
new file mode 100644
index 00000000..d79a9d3d
--- /dev/null
+++ b/src/i18n/locales/ru/sidebar.json
@@ -0,0 +1,134 @@
+{
+ "projects": {
+ "title": "Проекты",
+ "newProject": "Новый проект",
+ "deleteProject": "Удалить проект",
+ "renameProject": "Переименовать проект",
+ "noProjects": "Проекты не найдены",
+ "loadingProjects": "Загрузка проектов...",
+ "searchPlaceholder": "Поиск проектов...",
+ "projectNamePlaceholder": "Имя проекта",
+ "starred": "Избранное",
+ "all": "Все",
+ "untitledSession": "Безымянный сеанс",
+ "newSession": "Новый сеанс",
+ "codexSession": "Сеанс Codex",
+ "fetchingProjects": "Получение ваших проектов и сеансов Claude",
+ "projects": "проекты",
+ "noMatchingProjects": "Нет подходящих проектов",
+ "tryDifferentSearch": "Попробуйте изменить поисковый запрос",
+ "runClaudeCli": "Запустите Claude CLI в каталоге проекта для начала работы"
+ },
+ "app": {
+ "title": "Claude Code UI",
+ "subtitle": "Интерфейс AI помощника для программирования"
+ },
+ "sessions": {
+ "title": "Сеансы",
+ "newSession": "Новый сеанс",
+ "deleteSession": "Удалить сеанс",
+ "renameSession": "Переименовать сеанс",
+ "noSessions": "Сеансов пока нет",
+ "loadingSessions": "Загрузка сеансов...",
+ "unnamed": "Без имени",
+ "loading": "Загрузка...",
+ "showMore": "Показать больше сеансов"
+ },
+ "tooltips": {
+ "viewEnvironments": "Просмотр окружений",
+ "hideSidebar": "Скрыть боковую панель",
+ "createProject": "Создать новый проект",
+ "refresh": "Обновить проекты и сеансы (Ctrl+R)",
+ "renameProject": "Переименовать проект (F2)",
+ "deleteProject": "Удалить пустой проект (Delete)",
+ "addToFavorites": "Добавить в избранное",
+ "removeFromFavorites": "Удалить из избранного",
+ "editSessionName": "Вручную редактировать имя сеанса",
+ "deleteSession": "Удалить этот сеанс навсегда",
+ "save": "Сохранить",
+ "cancel": "Отмена",
+ "clearSearch": "Очистить поиск"
+ },
+ "navigation": {
+ "chat": "Чат",
+ "files": "Файлы",
+ "git": "Git",
+ "terminal": "Терминал",
+ "tasks": "Задачи"
+ },
+ "actions": {
+ "refresh": "Обновить",
+ "settings": "Настройки",
+ "collapseAll": "Свернуть все",
+ "expandAll": "Развернуть все",
+ "cancel": "Отмена",
+ "save": "Сохранить",
+ "delete": "Удалить",
+ "rename": "Переименовать",
+ "joinCommunity": "Присоединиться к сообществу"
+ },
+ "status": {
+ "active": "Активен",
+ "inactive": "Неактивен",
+ "thinking": "Думает...",
+ "error": "Ошибка",
+ "aborted": "Прервано",
+ "unknown": "Неизвестно"
+ },
+ "time": {
+ "justNow": "Только что",
+ "oneMinuteAgo": "1 мин. назад",
+ "minutesAgo": "{{count}} мин. назад",
+ "oneHourAgo": "1 час назад",
+ "hoursAgo": "{{count}} ч. назад",
+ "oneDayAgo": "1 день назад",
+ "daysAgo": "{{count}} дн. назад"
+ },
+ "messages": {
+ "deleteConfirm": "Вы уверены, что хотите это удалить?",
+ "renameSuccess": "Успешно переименовано",
+ "deleteSuccess": "Успешно удалено",
+ "errorOccurred": "Произошла ошибка",
+ "deleteSessionConfirm": "Вы уверены, что хотите удалить этот сеанс? Это действие нельзя отменить.",
+ "deleteProjectConfirm": "Вы уверены, что хотите удалить этот пустой проект? Это действие нельзя отменить.",
+ "enterProjectPath": "Пожалуйста, введите путь к проекту",
+ "deleteSessionFailed": "Не удалось удалить сеанс. Попробуйте снова.",
+ "deleteSessionError": "Ошибка при удалении сеанса. Попробуйте снова.",
+ "renameSessionFailed": "Не удалось переименовать сеанс. Попробуйте снова.",
+ "renameSessionError": "Ошибка при переименовании сеанса. Попробуйте снова.",
+ "deleteProjectFailed": "Не удалось удалить проект. Попробуйте снова.",
+ "deleteProjectError": "Ошибка при удалении проекта. Попробуйте снова.",
+ "createProjectFailed": "Не удалось создать проект. Попробуйте снова.",
+ "createProjectError": "Ошибка при создании проекта. Попробуйте снова."
+ },
+ "version": {
+ "updateAvailable": "Доступно обновление"
+ },
+ "search": {
+ "modeProjects": "Проекты",
+ "modeConversations": "Разговоры",
+ "conversationsPlaceholder": "Поиск в разговорах...",
+ "searching": "Поиск...",
+ "noResults": "Результаты не найдены",
+ "tryDifferentQuery": "Попробуйте другой поисковый запрос",
+ "matches_one": "{{count}} совпадение",
+ "matches_few": "{{count}} совпадения",
+ "matches_many": "{{count}} совпадений",
+ "matches_other": "{{count}} совпадений",
+ "projectsScanned_one": "{{count}} проект просканирован",
+ "projectsScanned_few": "{{count}} проекта просканировано",
+ "projectsScanned_many": "{{count}} проектов просканировано",
+ "projectsScanned_other": "{{count}} проектов просканировано"
+ },
+ "deleteConfirmation": {
+ "deleteProject": "Удалить проект",
+ "deleteSession": "Удалить сеанс",
+ "confirmDelete": "Вы уверены, что хотите удалить",
+ "sessionCount_one": "Этот проект содержит {{count}} разговор.",
+ "sessionCount_few": "Этот проект содержит {{count}} разговора.",
+ "sessionCount_many": "Этот проект содержит {{count}} разговоров.",
+ "sessionCount_other": "Этот проект содержит {{count}} разговоров.",
+ "allConversationsDeleted": "Все разговоры будут удалены навсегда.",
+ "cannotUndo": "Это действие нельзя отменить."
+ }
+}
diff --git a/src/i18n/locales/ru/tasks.json b/src/i18n/locales/ru/tasks.json
new file mode 100644
index 00000000..6e56fc52
--- /dev/null
+++ b/src/i18n/locales/ru/tasks.json
@@ -0,0 +1,142 @@
+{
+ "notConfigured": {
+ "title": "TaskMaster AI не настроен",
+ "description": "TaskMaster помогает разбивать сложные проекты на управляемые задачи с помощью AI",
+ "whatIsTitle": "🎯 Что такое TaskMaster?",
+ "features": {
+ "aiPowered": "Управление задачами с AI: разбивайте сложные проекты на управляемые подзадачи",
+ "prdTemplates": "Шаблоны PRD: генерируйте задачи из документов требований к продукту",
+ "dependencyTracking": "Отслеживание зависимостей: понимайте связи задач и порядок выполнения",
+ "progressVisualization": "Визуализация прогресса: канбан-доски и детальная аналитика задач",
+ "cliIntegration": "Интеграция с CLI: используйте команды taskmaster для продвинутых рабочих процессов"
+ },
+ "initializeButton": "Инициализировать TaskMaster AI"
+ },
+ "gettingStarted": {
+ "title": "Начало работы с TaskMaster",
+ "subtitle": "TaskMaster инициализирован! Вот что делать дальше:",
+ "steps": {
+ "createPRD": {
+ "title": "Создайте документ требований к продукту (PRD)",
+ "description": "Обсудите идею вашего проекта и создайте PRD, описывающий то, что вы хотите построить.",
+ "addButton": "Добавить PRD",
+ "existingPRDs": "Существующие PRD:"
+ },
+ "generateTasks": {
+ "title": "Генерация задач из PRD",
+ "description": "Когда у вас есть PRD, попросите вашего AI-ассистента разобрать его, и TaskMaster автоматически разобьет его на управляемые задачи с деталями реализации."
+ },
+ "analyzeTasks": {
+ "title": "Анализ и расширение задач",
+ "description": "Попросите вашего AI-ассистента проанализировать сложность задач и расширить их в детальные подзадачи для упрощения реализации."
+ },
+ "startBuilding": {
+ "title": "Начните разработку",
+ "description": "Попросите вашего AI-ассистента начать работу над задачами, обновлять их статус и добавлять новые задачи по мере развития вашего проекта."
+ }
+ },
+ "tip": "💡 Совет: начните с PRD, чтобы получить максимум от AI-генерации задач TaskMaster"
+ },
+ "setupModal": {
+ "title": "Настройка TaskMaster",
+ "subtitle": "Интерактивный CLI для {{projectName}}",
+ "willStart": "Инициализация TaskMaster начнется автоматически",
+ "completed": "Настройка TaskMaster завершена! Теперь вы можете закрыть это окно.",
+ "closeButton": "Закрыть",
+ "closeContinueButton": "Закрыть и продолжить"
+ },
+ "helpGuide": {
+ "title": "Начало работы с TaskMaster",
+ "subtitle": "Ваш гид по продуктивному управлению задачами",
+ "examples": {
+ "parsePRD": "💬 Пример:\n\"Я только что инициализировал новый проект с Claude Task Master. У меня есть PRD в .taskmaster/docs/prd.txt. Можете помочь мне разобрать его и настроить начальные задачи?\"",
+ "expandTask": "💬 Пример:\n\"Задача 5 кажется сложной. Можете разбить её на подзадачи?\"",
+ "addTask": "💬 Пример:\n\"Пожалуйста, добавьте новую задачу для реализации загрузки изображений профиля пользователя с использованием Cloudinary, изучите лучший подход.\""
+ },
+ "moreExamples": "Посмотреть больше примеров и шаблонов использования →",
+ "proTips": {
+ "title": "💡 Профессиональные советы",
+ "search": "Используйте строку поиска для быстрого поиска конкретных задач",
+ "views": "Переключайтесь между представлениями Канбан, Список и Сетка, используя переключатели представлений",
+ "filters": "Используйте фильтры для фокусировки на конкретных статусах или приоритетах задач",
+ "details": "Нажмите на любую задачу для просмотра детальной информации и управления подзадачами"
+ },
+ "learnMore": {
+ "title": "📚 Узнать больше",
+ "description": "TaskMaster AI - это продвинутая система управления задачами, созданная для разработчиков. Получите документацию, примеры и внесите вклад в проект.",
+ "githubButton": "Посмотреть на GitHub"
+ }
+ },
+ "search": {
+ "placeholder": "Поиск задач..."
+ },
+ "filters": {
+ "button": "Фильтры",
+ "status": "Статус",
+ "priority": "Приоритет",
+ "sortBy": "Сортировать по",
+ "allStatuses": "Все статусы",
+ "allPriorities": "Все приоритеты",
+ "showing": "Показано {{filtered}} из {{total}} задач",
+ "clearFilters": "Очистить фильтры"
+ },
+ "sort": {
+ "id": "ID",
+ "status": "Статус",
+ "priority": "Приоритет",
+ "idAsc": "ID (по возрастанию)",
+ "idDesc": "ID (по убыванию)",
+ "titleAsc": "Название (А-Я)",
+ "titleDesc": "Название (Я-А)",
+ "statusAsc": "Статус (сначала ожидающие)",
+ "statusDesc": "Статус (сначала выполненные)",
+ "priorityAsc": "Приоритет (сначала высокий)",
+ "priorityDesc": "Приоритет (сначала низкий)"
+ },
+ "views": {
+ "kanban": "Представление Канбан",
+ "list": "Представление списком",
+ "grid": "Представление сеткой"
+ },
+ "kanban": {
+ "pending": "📋 К выполнению",
+ "inProgress": "🚀 В процессе",
+ "done": "✅ Выполнено",
+ "blocked": "🚫 Заблокировано",
+ "deferred": "⏳ Отложено",
+ "cancelled": "❌ Отменено",
+ "noTasksYet": "Задач пока нет",
+ "tasksWillAppear": "Задачи появятся здесь",
+ "moveTasksHere": "Перемещайте задачи сюда при начале работы",
+ "completedTasksHere": "Завершенные задачи появляются здесь",
+ "statusTasksHere": "Задачи с этим статусом появятся здесь"
+ },
+ "buttons": {
+ "help": "Руководство по началу работы с TaskMaster",
+ "prds": "PRD",
+ "addPRD": "Добавить PRD",
+ "addTask": "Добавить задачу",
+ "createNewPRD": "Создать новый PRD",
+ "prdsAvailable": "Доступно {{count}} PRD"
+ },
+ "prd": {
+ "modified": "Изменено: {{date}}"
+ },
+ "statuses": {
+ "pending": "Ожидание",
+ "in-progress": "В процессе",
+ "done": "Выполнено",
+ "blocked": "Заблокировано",
+ "deferred": "Отложено",
+ "cancelled": "Отменено"
+ },
+ "priorities": {
+ "high": "Высокий",
+ "medium": "Средний",
+ "low": "Низкий"
+ },
+ "noMatchingTasks": {
+ "title": "Нет задач, соответствующих вашим фильтрам",
+ "description": "Попробуйте изменить критерии поиска или фильтрации."
+ }
+}