This commit is contained in:
Иван 2026-09-05 10:14:39 +00:00 committed by GitHub
commit a58fa005f6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 680 additions and 1 deletions

View file

@ -1,4 +1,4 @@
export type SupportedLanguage = 'en' | 'zh-CN';
export type SupportedLanguage = 'en' | 'zh-CN' | 'ru';
export interface LanguageMetadata {
code: SupportedLanguage;
@ -12,6 +12,7 @@ export const DEFAULT_LANGUAGE: SupportedLanguage = 'en';
export const SUPPORTED_LANGUAGES: LanguageMetadata[] = [
{ code: 'en', nativeName: 'English', englishName: 'English', dir: 'ltr' },
{ code: 'zh-CN', nativeName: '简体中文', englishName: 'Simplified Chinese', dir: 'ltr' },
{ code: 'ru', nativeName: 'Русский', englishName: 'Russian', dir: 'ltr'}
];
export const SUPPORTED_LANGUAGE_CODES = SUPPORTED_LANGUAGES.map((language) => language.code);
@ -31,6 +32,7 @@ export function normalizeSupportedLanguage(
) {
return 'zh-CN';
}
if (normalized === "ru" || normalized.startsWith("ru-")) return "ru";
return null;
}

View file

@ -0,0 +1,40 @@
{
"tabs": {
"chat": "Nexus AI",
"processes": "Процессы"
},
"suggestions": {
"architecture": "Объясни архитектуру проекта",
"whatDoes": "Что делает этот проект?",
"importantFiles": "Покажи мне самые важные файлы",
"apiHandlers": "Найди все обработчики API"
},
"empty": {
"title": "Спроси меня о чём угодно",
"description": "Я могу помочь разобраться в архитектуре, найти функции или объяснить связи."
},
"input": {
"placeholder": "Спроси о кодовой базе...",
"initializing": "Инициализация AI-агента...",
"configureProvider": "Настройте провайдера LLM, чтобы включить чат."
},
"actions": {
"closePanel": "Закрыть панель",
"scrollBottom": "Перейти вниз",
"clearChat": "Очистить чат",
"stopResponse": "Остановить создание ответа"
},
"stopped": "Остановлено пользователем",
"badges": {
"configureAI": "Настроить AI",
"connecting": "Подключение"
},
"chatOnly": {
"banner": "Граф не загружен (большой проект). Чат работает нормально, но встроенные ссылки на узлы не будут подсвечиваться в представлении графа."
},
"roles": {
"you": "Вы",
"assistant": "Nexus AI"
},
"newBadge": "СОЗДАТЬ ДИАЛОГ"
}

View file

@ -0,0 +1,96 @@
{
"app": {
"name": "GitNexus",
"nexusAI": "Nexus AI"
},
"actions": {
"cancel": "Отменить",
"dismiss": "Отклонить",
"tryAgain": "Попробовать снова",
"hide": "Скрыть",
"retry": "Повторить",
"copy": "Копировать",
"copied": "Скопировано",
"close": "Закрыть",
"run": "Выполнить",
"clear": "Очистить",
"remove": "Удалить",
"focusInGraph": "Сфокусировать в графе",
"expand": "Развернуть",
"collapse": "Свернуть"
},
"chat": {
"viewNodeInCodePanel": "Просмотреть {{inner}} в панели кода",
"openInCodePanel": "Открыть в панели кода • {{inner}}",
"waitForVectorIndex": "Подождите, создаётся векторный индекс."
},
"counts": {
"files_one": "{{count}} файл",
"files_few": "{{count}} файла",
"files_many": "{{count}} файлов",
"files_other": "{{count}} файлов",
"nodes_one": "{{count}} узел",
"nodes_few": "{{count}} узла",
"nodes_many": "{{count}} узлов",
"nodes_other": "{{count}} узлов",
"edges_one": "{{count}} ребро",
"edges_few": "{{count}} ребра",
"edges_many": "{{count}} рёбер",
"edges_other": "{{count}} рёбер",
"symbols_one": "{{count}} символ",
"symbols_few": "{{count}} символа",
"symbols_many": "{{count}} символов",
"symbols_other": "{{count}} символов",
"flows_one": "{{count}} поток",
"flows_few": "{{count}} потока",
"flows_many": "{{count}} потоков",
"flows_other": "{{count}} потоков"
},
"progress": {
"connecting": "Подключение к серверу...",
"connectingShort": "Подключение...",
"validatingServer": "Проверка сервера",
"validatingServerEllipsis": "Проверка сервера...",
"downloadingGraph": "Загрузка графа...",
"downloadedMb": "Загружено {{mb}} МБ",
"downloadingWithPercent": "Загрузка графа... {{percent}}%",
"downloadingMb": "Загрузка... {{mb}} МБ",
"processing": "Обработка...",
"processingGraph": "Обработка графа...",
"extractingFileContents": "Извлечение содержимого файлов",
"loadingGraph": "Загрузка графа...",
"starting": "Запуск...",
"executing": "Выполнение...",
"truncated": "... (обрезано)",
"ready": "Готово",
"switchingRepository": "Переключение репозитория...",
"loadingRepository": "Загрузка {{repo}}",
"validating": "Проверка",
"failedSwitchRepository": "Не удалось переключить репозиторий",
"unknownError": "Неизвестная ошибка"
},
"analyzePhases": {
"queued": "В очереди",
"cloning": "Клонирование репозитория",
"pulling": "Получение последних изменений",
"extracting": "Сканирование файлов",
"structure": "Построение структуры",
"parsing": "Разбор кода",
"imports": "Обработка импортов",
"calls": "Трассировка вызовов",
"heritage": "Извлечение наследования",
"scopeResolution": "Обработка типов",
"communities": "Обнаружение групп",
"processes": "Обнаружение процессов",
"complete": "Обработка завершена",
"lbug": "Загрузка в базу данных",
"fts": "Создание поисковых индексов",
"embeddings": "Генерация эмбеддингов",
"done": "Готово",
"retrying": "Повторная попытка после сбоя"
},
"units": {
"elapsedSeconds": "{{seconds}} сек.",
"elapsedMinutesSeconds": "{{minutes}} мин. {{seconds}} сек."
}
}

View file

@ -0,0 +1,22 @@
{
"unknown": "Неизвестная ошибка",
"connectFailed": "Не удалось подключиться к серверу",
"loadGraphFailed": "Не удалось загрузить граф",
"failedToConnect": "Не удалось подключиться",
"analysisFailed": "Анализ не удался. Проверьте логи сервера.",
"startAnalysisFailed": "Не удалось запустить анализ",
"invalidGithubUrl": "Пожалуйста, введите корректный URL репозитория GitHub.",
"invalidAzureDevOpsUrl": "Пожалуйста, введите корректный URL репозитория Azure DevOps.",
"missingFolderPath": "Пожалуйста, укажите путь к папке.",
"backend": {
"reconnecting": "Соединение с сервером потеряно. Переподключение...",
"network": "Не удаётся подключиться к серверу GitNexus. Убедитесь, что была запущена команда `gitnexus serve`.",
"timeout": "Сервер слишком долго не отвечает. Попробуйте снова через {{seconds}} сек.",
"rateLimited": "Слишком много запросов. Попробуйте снова через {{seconds}} сек.",
"notFound": "Запрашиваемый репозиторий или ресурс не найден.",
"unauthorized": "Этот деплой GitNexus требует токен доступа. Найдите его в панели Render в переменной окружения GITNEXUS_SERVE_AUTH_TOKEN для сервиса gitnexus-web, затем вставьте его во вкладке Настройки.",
"originBlocked": "Это действие недоступно из интерфейса хостинга. Откройте GitNexus с адреса локального сервера (например, http://localhost:4747), чтобы продолжить.",
"client": "Ошибка запроса: {{message}}",
"server": "Ошибка сервера: {{message}}"
}
}

View file

@ -0,0 +1,208 @@
{
"statusBar": {
"sponsor": "Спонсор",
"sponsorHint": "нужно купить немного кредитов API, чтобы запустить SWE-bench 😅"
},
"loading": {
"filesProgress": "{{processed}} / {{total}} файлов"
},
"toolCall": {
"status": {
"running": "выполняется",
"completed": "завершено",
"error": "ошибка",
"stopped": "остановлено"
},
"tools": {
"search": "🔍 Поиск по коду",
"cypher": "🔗 Запрос на Cypher",
"grep": "🔎 Поиск по шаблону",
"read": "📄 Чтение файла",
"overview": "🗺️ Обзор кодовой базы",
"explore": "🔬 Исследование",
"impact": "💥 Анализ влияния"
},
"query": "Запрос",
"input": "Входные данные",
"result": "Результат",
"searchPrefix": "Поиск: \"{{query}}\""
},
"embedding": {
"generateTitle": "Сгенерировать эмбеддинги для семантического поиска",
"enable": "Включить семантический поиск",
"loadingModel": "Загрузка AI-модели...",
"embeddingNodes_one": "Эмбеддинг {{processed}}/{{total}} узла",
"embeddingNodes_other": "Эмбеддинг {{processed}}/{{total}} узлов",
"creatingIndex": "Создание векторного индекса...",
"readyTitle": "Семантический поиск готов! Используйте естественный язык в чате с AI.",
"ready": "Семантический готов",
"errorTitle": "Создание эмбеддингов не удалось. Нажмите для повтора.",
"failedRetry": "Ошибка — повторить",
"fallback": {
"title": "WebGPU сказал «Нет!»",
"subtitle": "Ваш браузер не поддерживает ускорение через GPU",
"description": "Не удалось создать эмбеддинги с WebGPU, поэтому семантический поиск (графовый RAG) будет не таким умным. Но граф всё равно работает отлично!",
"options": "Ваши варианты:",
"useCpu": "Использовать CPU",
"useCpuDescriptionSmall": "Работает, но немного медленнее",
"useCpuDescriptionLarge": "Работает, но намного медленнее",
"estimated_one": "(~{{minutes}} мин. для {{count}} узла)",
"estimated_other": "(~{{minutes}} мин. для {{count}} узлов)",
"skipIt": "Пропустить",
"skipDescription": "Граф работает, просто без AI-семантического поиска",
"smallCodebase": "Обнаружена маленькая кодовая база! CPU подойдёт.",
"tip": "💡 Совет: попробуйте Chrome или Edge для поддержки WebGPU",
"skipEmbeddings": "Пропустить эмбеддинги",
"useCpuRecommended": "Использовать CPU (рекомендуется)",
"useCpuSlow": "Использовать CPU (медленно)"
}
},
"queryFab": {
"query": "Запрос",
"cypherQuery": "Запрос Cypher",
"examples": "Примеры",
"run": "Выполнить",
"noProject": "Проект не загружен. Сначала загрузите проект.",
"dbNotReady": "База данных не готова. Подождите завершения загрузки.",
"executionFailed": "Не удалось выполнить запрос",
"exampleLabels": {
"functions": "Все функции",
"classes": "Все классы",
"interfaces": "Все интерфейсы",
"calls": "Вызовы функций",
"imports": "Импортирования"
},
"clear": "Очистить",
"rows": "строк",
"highlighted": "выделено",
"showingRows_other": "Показано 50 из {{count}} строк"
},
"fileTree": {
"expandPanel": "Развернуть панель",
"fileExplorer": "Файловый проводник",
"filters": "Фильтры",
"collapsePanel": "Свернуть панель",
"searchFiles": "Поиск файлов...",
"noFilesLoaded": "Файлы не загружены",
"all": "Все",
"selectNodeDepth": "Выберите узел, чтобы применить фильтр по глубине",
"explorer": "Проводник",
"nodeTypes": "Типы узлов",
"nodeTypesDesc": "Включение/отключение типов узлов в графе",
"edgeTypes": "Типы рёбер",
"edgeTypesDesc": "Включение/отключение типов связей",
"focusDepth": "Глубина фокуса",
"focusDepthDesc": "Показывать узлы в пределах N переходов от выбранного",
"hops_one": "{{count}} переход",
"hops_few": "{{count}} перехода",
"hops_many": "{{count}} переходов",
"hops_other": "{{count}} переходов",
"colorLegend": "Цветовая легенда"
},
"codePanel": {
"expand": "Развернуть панель кода",
"dragResize": "Перетащите для изменения размера",
"title": "Инспектор кода",
"clearCitations": "Очистить цитаты AI",
"clearSelection": "Снять выделение",
"loadingSource": "Загрузка исходного кода...",
"selectFile": "Выберите файловый узел, чтобы просмотреть его содержимое.",
"code": "Код",
"selected": "Выбрано",
"aiCitations": "Цитаты AI",
"references_one": "{{count}} ссылка",
"references_few": "{{count}} ссылки",
"references_many": "{{count}} ссылок",
"references_other": "{{count}} ссылок",
"lines_one": "{{count}} строка",
"lines_few": "{{count}} строки",
"lines_many": "{{count}} строк",
"lines_other": "{{count}} строк",
"codeNotAvailable": "Код недоступен в памяти для {{path}}"
},
"canvas": {
"viewModes": {
"label": "Режим отображения графа",
"force": "Динамическая раскладка",
"tree": "Последовательная раскладка",
"circles": "Радиальная раскладка"
},
"zoomIn": "Приблизить",
"zoomOut": "Отдалить",
"fit": "По размеру экрана",
"focusSelected": "Сфокусироваться на выбранном узле",
"clearSelection": "Снять выделение",
"clear": "Очистить",
"stopLayout": "Остановить раскладку",
"runLayout": "Запустить раскладку заново",
"layoutOptimizing": "Оптимизация раскладки...",
"turnOffHighlights": "Выключить все подсветки",
"turnOnHighlights": "Включить подсветки AI",
"chatOnly": {
"title": "Граф не загружен",
"description": "Это большой проект, поэтому граф был пропущен, чтобы браузер не тормозил. AI-чат работает нормально.",
"descriptionWithCount": "В этом проекте {{count}} узлов, поэтому граф был пропущен, чтобы браузер не тормозил. AI-чат работает нормально.",
"citationNote": "Пока граф не загружен, встроенные ссылки на файлы из чата не будут автоматически открываться в панели кода.",
"loadAnyway": "Всё равно загрузить граф",
"loadAnywayWarning": "В этом проекте {{count}} узлов. Загрузка полного графа может замедлить браузер или сделать его неотзывчивым. Продолжить?",
"loadAnywayWarningUnknown": "Возможно, это большой проект. Загрузка полного графа может замедлить браузер или сделать его неотзывчивым. Продолжить?"
}
},
"processes": {
"unknownStep": "Неизвестно",
"allProcessesLabel_one": "Все процессы (объединено {{count}})",
"allProcessesLabel_other": "Все процессы (объединено {{count}})",
"emptyTitle": "Процессы не обнаружены",
"emptyDescription": "Процессы — это потоки выполнения, прослеженные от точек входа. Загрузите кодовую базу, чтобы увидеть обнаруженные процессы.",
"filterPlaceholder": "Фильтровать процессы...",
"detected_one": "Обнаружен {{count}} процесс",
"detected_few": "Обнаружено {{count}} процесса",
"detected_many": "Обнаружено {{count}} процессов",
"detected_other": "Обнаружено {{count}} процессов",
"fullMap": "Полная карта процессов",
"viewCombined_one": "Просмотреть объединённую карту {{count}} процесса",
"viewCombined_other": "Просмотреть объединённую карту {{count}} процессов",
"crossCommunity": "Межсообщественный",
"intraCommunity": "Внутрисообщественный",
"steps_one": "{{count}} шаг",
"steps_few": "{{count}} шага",
"steps_many": "{{count}} шагов",
"steps_other": "{{count}} шагов",
"clusters_one": "{{count}} кластер",
"clusters_few": "{{count}} кластера",
"clusters_many": "{{count}} кластеров",
"clusters_other": "{{count}} кластеров",
"highlightTitle": "Нажмите, чтобы включить подсветку в графе",
"removeHighlightTitle": "Нажмите, чтобы выключить подсветку в графе",
"loading": "Загрузка...",
"viewing": "Просмотр",
"view": "Смотреть"
},
"processFlow": {
"title": "Процесс: {{label}}",
"diagramTooLarge": "📊 Диаграмма слишком большая",
"renderError": "⚠️ Ошибка рендеринга",
"tooComplex_one": "Эта диаграмма содержит {{count}} шаг и слишком сложна для отображения. Попробуйте просматривать отдельные процессы вместо «Все процессы».",
"tooComplex_few": "Эта диаграмма содержит {{count}} шага и слишком сложна для отображения. Попробуйте просматривать отдельные процессы вместо «Все процессы».",
"tooComplex_many": "Эта диаграмма содержит {{count}} шагов и слишком сложна для отображения. Попробуйте просматривать отдельные процессы вместо «Все процессы».",
"tooComplex_other": "Эта диаграмма содержит {{count}} шагов и слишком сложна для отображения. Попробуйте просматривать отдельные процессы вместо «Все процессы».",
"unableToRender_one": "Не удалось отобразить диаграмму. Шаг: {{count}}",
"unableToRender_few": "Не удалось отобразить диаграмму. Шагов: {{count}}",
"unableToRender_many": "Не удалось отобразить диаграмму. Шагов: {{count}}",
"unableToRender_other": "Не удалось отобразить диаграмму. Шагов: {{count}}",
"zoomOutTitle": "Отдалить (-)",
"zoomInTitle": "Приблизить (+)",
"resetTitle": "Сбросить масштаб и панорамирование",
"resetView": "Сбросить вид",
"toggleFocus": "Переключить фокус",
"copyMermaid": "Копировать Mermaid-запись диаграммы"
},
"diagram": {
"aiGenerated": "Диаграмма, сгенерированная AI",
"error": "Ошибка диаграммы",
"showSource": "Показать исходник",
"label": "Диаграмма",
"expandTitle": "Развернуть",
"loading": "Загрузка диаграммы…"
}
}

View file

@ -0,0 +1,18 @@
{
"repositories": "Репозитории",
"active": "активен",
"reanalyzing": "Повторный анализ...",
"reanalyzeRepo": "Повторно анализировать {{repoName}}",
"deleteRepo": "Удалить {{repoName}}",
"reanalyzingRepo": "Переанализ {{repoName}}: {{message}}",
"analyzeNew": "Анализировать новый репозиторий...",
"searchRepositories": "Поиск репозиториев...",
"noRepositoriesFound": "Репозитории по запросу «{{query}}» не найдены",
"searchNodes": "Поиск узлов...",
"noNodesFound": "Узлы по запросу «{{query}}» не найдены",
"starIfCool": "Поставь звезду, если круто",
"aiSettings": "Настройки AI",
"help": "Помощь",
"language": "Язык",
"selectLanguage": "Выберите язык"
}

View file

@ -0,0 +1,96 @@
{
"tabs": {
"overview": "Обзор",
"ai": "Nexus AI",
"shortcuts": "Горячие клавиши",
"status": "Строка состояния",
"graph": "Граф и узлы",
"search": "Поиск и фильтр"
},
"shortcuts": {
"searchNodes": "Поиск узлов",
"deselectClose": "Снять выделение / закрыть",
"columns": {
"action": "Действие",
"mac": "Mac",
"windows": "Windows"
}
},
"nodeTypes": {
"function": "Функция",
"functionDesc": "Объявления функций",
"file": "Файл",
"fileDesc": "Исходные файлы",
"class": "Класс",
"classDesc": "Объявления классов",
"method": "Метод",
"methodDesc": "Методы классов",
"interface": "Интерфейс",
"interfaceDesc": "Интерфейсы TypeScript",
"folder": "Папка",
"folderDesc": "Узлы-каталоги"
},
"status": {
"ready": "Готово",
"readyDesc": "Граф полностью загружен и интерактивен",
"nodesCount": "Количество узлов",
"nodesCountDesc": "Всего файлов и символов в графе",
"edgesCount": "Количество рёбер",
"edgesCountDesc": "Связи импортов / зависимостей",
"aiIndexStatus": "Статус AI-индекса",
"aiIndexStatusDesc": "Репозиторий полностью проиндексирован для AI-запросов",
"semanticReadyBadge": "Семантический готов",
"explained": "Пояснение к строке состояния"
},
"tryAsking": "Попробуйте спросить:",
"footer": "GitNexus — обозреватель графа",
"title": "Справка и справочник",
"footerLong": "GitNexus — обозреватель графа кодовой базы с открытым исходным кодом",
"docsGithub": "Документация и GitHub ↗",
"overview": {
"gettingStarted": "Начало работы",
"whatIsTitle": "Что такое GitNexus?",
"whatIsDescription": "Интерактивный обозреватель графа для вашей кодовой базы. Каждый файл, функция и импорт становятся узлом, который можно визуально исследовать, запрашивать и перемещаться по нему.",
"currentRepoTitle": "Ваш текущий репозиторий",
"loadedCounts": "Загружено: {{nodeCount}} узлов · {{edgeCount}} рёбер",
"threeWaysTitle": "Три способа исследования",
"wayInspect": "Нажимайте на узлы для просмотра",
"waySearch": "Ищите по имени или типу",
"wayAsk": "Задайте Nexus AI вопрос на естественном языке",
"navigationTitle": "Навигация",
"navZoom": "Прокрутка для масштабирования",
"navPan": "Перетаскивание для панорамирования",
"navFocus": "Двойной клик по узлу для фокусировки на его подграфе"
},
"graph": {
"nodeColorLegend": "Цветовая легенда узлов",
"nodeLabel": "Узлы: {{label}}",
"sizeDescription": "Размер узла отражает количество связей — крупные узлы зависят от большего числа файлов. Рёбра направлены от импортирующего к импортируемому.",
"detailDescription": "Нажмите на любой узел, чтобы открыть панель с подробностями — импорты, экспорты и обратные зависимости."
},
"search": {
"title": "Поиск и фильтр",
"searchNodes": "Поиск узлов",
"searchDescription": "Поиск по имени файла, имени функции или пути импорта. Совпадающие узлы подсвечиваются в графе в реальном времени.",
"filterPanel": "Панель фильтров",
"filterDescription": "Используйте значок фильтра на левой боковой панели, чтобы изолировать определённые типы узлов, скрыть листовые узлы или сфокусироваться на диапазоне глубины от выбранного корня.",
"syntax": "Синтаксис поиска",
"hints": {
"nameFragment": "совпадение по фрагменту имени",
"pathPrefix": "совпадение по префиксу пути",
"nodeType": "фильтр по типу узла"
}
},
"ai": {
"title": "Nexus AI",
"semanticReady": "✓ Семантический анализ готов",
"description": "Ваш репозиторий проиндексирован и готов к семантическим запросам. Nexus AI понимает структуру кода и связи, а не только имена файлов.",
"questions": {
"dependencies": "\"Какие файлы зависят от модуля аутентификации?\"",
"circular": "\"Найди циклические зависимости в этом репозитории\"",
"connected": "\"Каковы наиболее связанные компоненты?\"",
"imports": "\"Покажи мне все файлы, которые импортируют useEffect\""
},
"openPrompt": "Откройте промпт через кнопку Nexus AI (в правом верхнем углу)."
}
}

View file

@ -0,0 +1,81 @@
{
"success": {
"title": "Сервер подключён",
"description": "Подготовка графа знаний о вашем коде..."
},
"loading": {
"largeRepoHint": "Для больших репозиториев это может занять некоторое время"
},
"guide": {
"copyAria": "Скопировать в буфер обмена",
"copiedAria": "Скопировано!",
"startServer": "Запустите локальный сервер",
"devDescription": "Запустите бэкенд Express в отдельном терминале, чтобы открыть полный граф.",
"prodDescription": "Достаточно одной команды. Браузер подключается автоматически.",
"copyCommand": "Скопируйте команду",
"copyCommandDescription": "Нажмите на значок в терминале, чтобы скопировать.",
"done": "готово",
"orInstallGlobally": "или установите глобально",
"globalInstall": "Глобальная установка",
"startBackend": "Запустить бэкенд",
"terminal": "Терминал",
"waitingForServer": "Ожидание запуска сервера",
"pasteAndRun": "Вставьте и выполните в терминале",
"pasteAndRunDescription": "Откройте терминал в корне проекта, вставьте и нажмите Enter.",
"listeningForServer": "Ожидание сервера",
"willAutoConnect": "Автоматически подключится при обнаружении",
"autoConnects": "Автоматически подключается и открывает граф",
"autoConnectsDescription": "Обновление не требуется — страница обнаруживает сервер автоматически.",
"requires": "Требуется",
"port": "Порт 4747"
},
"analyzeFirst": {
"title": "Проанализируйте свой первый репозиторий",
"description": "Вставьте URL репозитория, и GitNexus клонирует его, разберёт код и построит интерактивный граф знаний — прямо в вашем браузере.",
"footer": "Только публичные репозитории · Клонируется локально сервером · Данные не покидают ваш компьютер"
},
"landing": {
"chooseRepository": "Выберите репозиторий",
"description": "Выберите проиндексированный репозиторий для изучения или проанализируйте новый.",
"indexed": "Индексирован {{time}}",
"orAnalyzeNew": "или проанализировать новый",
"footer": "Публичные и приватные репозитории · Клонируется локально сервером · Данные не покидают ваш компьютер",
"time": {
"justNow": "только что",
"minutesAgo": "{{count}} мин. назад",
"hoursAgo": "{{count}} ч. назад",
"daysAgo": "{{count}} д. назад"
}
},
"repoAnalyzer": {
"inputType": "Тип ввода",
"githubUrl": "URL GitHub",
"gitlabUrl": "URL GitLab",
"azureDevOpsUrl": "Azure DevOps",
"localFolder": "Локальная папка",
"starting": "Запуск анализа...",
"analyzeRepository": "Анализировать репозиторий",
"complete": "Анализ завершён",
"loadingGraph": "Загрузка графа...",
"defaultRepoName": "репозиторий",
"githubRepositoryUrl": "URL репозитория GitHub",
"githubTokenLabel": "Персональный токен доступа (необязательно)",
"githubTokenPlaceholder": "ghp_... или github_pat_...",
"githubTokenHelp": "Требуется для приватных репозиториев. Нужно разрешение 'repo' (или fine-grained Contents:read). Отправляется один раз, не сохраняется.",
"gitlabRepositoryUrl": "URL репозитория GitLab",
"gitlabSupported": "Поддерживает GitLab.com и собственные экземпляры GitLab.",
"azureDevOpsRepositoryUrl": "URL репозитория Azure DevOps",
"azureDevOpsSupported": "Формат: https://dev.azure.com/organization/project/_git/repository",
"localFolderPath": "Путь к локальной папке",
"hideBackground": "Скрыть (анализ продолжается в фоне)",
"upload": {
"button": "Загрузить папку",
"uploading": "Загрузка...",
"selected_one": "{{fileCount}} файл готов ({{dropped}} пропущено: .git, node_modules, build output)",
"selected_few": "{{fileCount}} файла готово ({{dropped}} пропущено: .git, node_modules, build output)",
"selected_many": "{{fileCount}} файлов готово ({{dropped}} пропущено: .git, node_modules, build output)",
"selected_other": "{{fileCount}} файлов готово ({{dropped}} пропущено: .git, node_modules, build output)",
"empty": "В этой папке не найдено анализируемых файлов."
}
}
}

View file

@ -0,0 +1,116 @@
{
"title": "Настройки AI",
"subtitle": "Настройте провайдера LLM",
"localServer": "Локальный сервер",
"backendUrl": "URL бэкенда",
"connected": "Подключено",
"notConnected": "Не подключено",
"runServeHint": "Выполните `gitnexus serve`, чтобы подключить веб‑интерфейс к локальному бэкенду.",
"accessToken": {
"label": "Токен доступа",
"placeholder": "Вставьте ваш токен доступа для развёртывания",
"hint": "Требуется только для защищённого развёртывания. Найдите его в панели Render в переменной окружения GITNEXUS_SERVE_AUTH_TOKEN сервиса gitnexus-web. Для локального сервера оставьте пустым.",
"title": "Это развёртывание требует токен доступа",
"promptHint": "Сервер GitNexus запущен, но защищён. Найдите токен в панели Render в переменной окружения GITNEXUS_SERVE_AUTH_TOKEN сервиса gitnexus-web.",
"connect": "Подключиться",
"reveal": "Показать токен доступа",
"hide": "Скрыть токен доступа",
"sessionNote": "Хранится только для этой сессии браузера. Вам потребуется ввести его заново в новой вкладке или после закрытия браузера."
},
"provider": "Провайдер",
"apiKey": "API-ключ",
"learnMore": "Подробнее",
"model": "Модель",
"searchModelPlaceholder": "Поиск или ввод ID модели...",
"selectModelPlaceholder": "Выберите или введите модель...",
"customModelHint": "Введите ID модели или нажмите Enter",
"customModelExample": "например, openai/gpt-4o",
"pressEnterCustom": "Нажмите Enter, чтобы использовать как пользовательский ID",
"baseUrl": "Базовый URL",
"optional": "необязательно",
"deploymentName": "Имя развёртывания",
"apiVersion": "Версия API",
"checkConnection": "Проверить подключение",
"privacyLabel": "Конфиденциальность:",
"privacyText": "Ваши API-ключи хранятся локально в этом браузере.",
"providers": {
"openai": {
"description": "Используйте модели OpenAI для чата и анализа кода.",
"apiKeyPlaceholder": "Введите ваш API-ключ OpenAI",
"helperText": "Получите API-ключ на",
"helperLinkLabel": "платформе OpenAI",
"modelPlaceholder": "например, gpt-4o, gpt-4-turbo, gpt-3.5-turbo",
"baseUrlPlaceholder": "https://api.openai.com/v1 (по умолчанию)",
"baseUrlHint": "Оставьте пустым для использования стандартного API OpenAI. Укажите свой URL для прокси или совместимых API."
},
"gemini": {
"description": "Используйте модели Google Gemini.",
"apiKeyPlaceholder": "Введите ваш API-ключ Google AI",
"helperText": "Получите API-ключ в",
"helperLinkLabel": "Google AI Studio",
"modelPlaceholder": "например, gemini-2.0-flash, gemini-1.5-pro"
},
"anthropic": {
"description": "Используйте модели Claude от Anthropic.",
"apiKeyPlaceholder": "Введите ваш API-ключ Anthropic",
"helperText": "Получите API-ключ в",
"helperLinkLabel": "консоли Anthropic",
"modelPlaceholder": "например, claude-sonnet-4-20250514, claude-3-opus"
},
"azure": {
"apiKeyPlaceholder": "Введите ваш API-ключ Azure OpenAI",
"deploymentNamePlaceholder": "например, gpt-4o-deployment"
},
"ollama": {
"quickStart": "📋 Быстрый старт:",
"installFrom": "Установите Ollama с",
"thenRun": ", затем выполните:",
"modelPlaceholder": "например, llama3.2, mistral, codellama"
},
"openrouter": {
"apiKeyPlaceholder": "Введите ваш API-ключ OpenRouter",
"helperText": "Получите API-ключ на",
"helperLinkLabel": "странице ключей OpenRouter"
},
"minimax": {
"apiKeyPlaceholder": "Введите ваш API-ключ MiniMax",
"helperText": "Получите API-ключ на",
"helperLinkLabel": "платформе MiniMax",
"modelPlaceholder": "например, MiniMax-M3 или MiniMax-M2.7",
"helperModel": "Доступны: MiniMax-M3 (по умолчанию) и MiniMax-M2.7",
"endpoint": "Региональный эндпоинт",
"endpoints": {
"global": "Глобальный (api.minimax.io)",
"china": "Китайский (api.minimaxi.com)"
},
"thinking": "Режим мышления",
"thinkingModes": {
"adaptive": "Адаптивный",
"disabled": "Отключён",
"always_on": "Всегда включён"
},
"capabilities": "Окно контекста {{contextWindow}} | Входные данные: {{modalities}}"
},
"glm": {
"apiKeyPlaceholder": "Введите ваш API-ключ Z.AI"
}
},
"loadingModels": "Загрузка моделей...",
"noModelsMatch": "Нет моделей, соответствующих «{{searchTerm}}»",
"moreModels": "+ ещё {{count}} • Уточните поиск",
"apiKeySession": "API-ключи хранятся в сессионном хранилище и будут удалены при закрытии этой вкладки.",
"startLocalServer": "запустите локальный сервер",
"settingsSaved": "Настройки сохранены",
"failedToSave": "Не удалось сохранить",
"saveSettings": "Сохранить настройки",
"endpoint": "Эндпоинт",
"azurePortal": "Портал Azure",
"azureHint": "Настройте службу Azure OpenAI в",
"defaultPort": "Порт по умолчанию:",
"pullModel": "Загрузите модель с помощью",
"browseModels": "Просмотр всех моделей на",
"openRouterModels": "Модели OpenRouter",
"zaiPlatform": "Платформа Z.AI",
"glmCodingApi": "API для кодинга (по умолчанию). Используйте https://api.z.ai/api/paas/v4 для общего API.",
"privacyFull": "Ваши API-ключи хранятся только в сессионном хранилище браузера и удаляются при закрытии вкладки. Они отправляются напрямую провайдеру LLM при общении в чате. Ваш код никогда не покидает ваш компьютер."
}