diff --git a/.gitignore b/.gitignore index 2ff70c19..76793a81 100755 --- a/.gitignore +++ b/.gitignore @@ -108,7 +108,7 @@ temp/ .serena/ CLAUDE.md .mcp.json - +.gemini/ # Database files *.db @@ -130,3 +130,8 @@ dev-debug.log # Task files tasks.json tasks/ + +# Translations +!src/i18n/locales/en/tasks.json +!src/i18n/locales/ja/tasks.json +!src/i18n/locales/ru/tasks.json \ No newline at end of file diff --git a/README.ja.md b/README.ja.md index 0fcce172..67d53f0e 100644 --- a/README.ja.md +++ b/README.ja.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) 向けのデスクトップ・モバイル UI です。ローカルまたはリモートで使用して、Claude Code、Cursor、Codex のアクティブなプロジェクトやセッションを確認し、どこからでも(モバイルやデスクトップから)変更を加えることができます。どこでも使える適切なインターフェースを提供します。 -
English · 한국어 · 中文
+
English · Русский · 한국어 · 中文 · 日本語
## スクリーンショット @@ -193,8 +193,8 @@ npm run dev Claude Code の全機能を使用するには、手動でツールを有効にする必要があります: 1. **ツール設定を開く** - サイドバーの歯車アイコンをクリック -3. **選択的に有効化** - 必要なツールのみを有効にする -4. **設定を適用** - 環境設定はローカルに保存されます +2. **選択的に有効化** - 必要なツールのみを有効にする +3. **設定を適用** - 環境設定はローカルに保存されます
diff --git a/README.ko.md b/README.ko.md index b9c8a75b..00250f97 100644 --- a/README.ko.md +++ b/README.ko.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)를 위한 데스크톱 및 모바일 UI입니다. 로컬 또는 원격으로 사용하여 Claude Code, Cursor 또는 Codex의 활성 프로젝트와 세션을 확인하고, 어디서든(모바일 또는 데스크톱) 변경할 수 있습니다. 어디서든 작동하는 적절한 인터페이스를 제공합니다. -
English · 中文 · 日本語
+
English · Русский · 한국어 · 中文 · 日本語
## 스크린샷 @@ -193,8 +193,8 @@ npm run dev Claude Code의 전체 기능을 사용하려면 수동으로 도구를 활성화해야 합니다: 1. **도구 설정 열기** - 사이드바의 톱니바퀴 아이콘을 클릭 -3. **선택적으로 활성화** - 필요한 도구만 활성화 -4. **설정 적용** - 환경설정은 로컬에 저장됩니다 +2. **선택적으로 활성화** - 필요한 도구만 활성화 +3. **설정 적용** - 환경설정은 로컬에 저장됩니다
diff --git a/README.md b/README.md index 4acb9610..1b83cf83 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ siteboon%2Fclaudecodeui | Trendshift

-
English · 한국어 · 中文 · 日本語
+
English · Русский · 한국어 · 中文 · 日本語
--- @@ -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 @@ +
+ CloudCLI UI +

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 · Сообщить об ошибке · Участие в разработке +

+ +

+ Join our Discord + siteboon%2Fclaudecodeui | Trendshift +

+ +
English · Русский · 한국어 · 中文 · 日本語
+ +## Скриншоты + +
+ + + + + + + + + +
+

Версия для десктопа

+Desktop Interface +
+Основной интерфейс с обзором проекта и чатом +
+

Мобильный режим

+Mobile Interface +
+Адаптивный мобильный интерфейс с сенсорной навигацией +
+

Выбор CLI

+CLI Selection +
+Выбор между 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. **Примените настройки** - предпочтения сохраняются локально + +
+ +![Tools Settings Modal](public/screenshots/tools-modal.png) +*Окно настройки инструментов - включайте только то, что вам нужно* + +
+ +**Рекомендуемый подход**: начните с базовых инструментов и добавляйте остальные по мере необходимости. Эти настройки всегда можно поменять позже. + +--- +## 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 中的活跃项目和会话,并从任何地方(移动端或桌面端)对它们进行修改。这为您提供了一个在任何地方都能正常使用的合适界面。 -
English · 한국어 · 日本語
+
English · Русский · 한국어 · 中文 · 日本語
## 截图 @@ -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": "Попробуйте изменить критерии поиска или фильтрации." + } +}