@goodandready/dsh-russian-lang 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/client.js +6 -7
- package/package.json +2 -2
- package/ru/01-core-small.json +146 -94
- package/ru/02-conversation.json +780 -170
- package/ru/03-models-workspace.json +187 -164
- package/ru/04-preset-cordis.json +134 -106
- package/ru/05-plugins-subagent.json +156 -121
- package/ru-plugins/03-dshmarket.json +11 -2
- package/ru-plugins/10-kanban.json +365 -223
- package/ru-plugins/15-commandcode.json +17 -2
- package/ru-plugins/32-vision-bridge.json +147 -0
- package/ru-plugins/33-messenger-gateway.json +138 -0
- package/ru-plugins/34-key-rotation.json +114 -0
- package/ru-plugins/35-gitea.json +71 -0
- package/ru-plugins/36-cost-meter.json +42 -0
- package/ru-plugins/37-time-machine.json +29 -0
- package/ru-plugins/38-context-lens.json +23 -0
- package/ru-plugins/39-shadow-auditor.json +17 -0
- package/ru-plugins/40-clinebot.json +8 -0
- package/ru-plugins/41-lanmode.json +6 -0
|
@@ -136,7 +136,22 @@
|
|
|
136
136
|
"partialFailures": "⚠️ Сбои на некоторых эндпоинтах: {list}",
|
|
137
137
|
"noData": "(нет данных — проверьте API-ключ)",
|
|
138
138
|
"errorText": "Не удалось получить статистику Command Code: {message}",
|
|
139
|
-
"imageGate": "В сессии уже есть изображения, а модель {model} не поддерживает изображения; выберите модель с поддержкой зрения или удалите изображения из сессии."
|
|
139
|
+
"imageGate": "В сессии уже есть изображения, а модель {model} не поддерживает изображения; выберите модель с поддержкой зрения или удалите изображения из сессии.",
|
|
140
|
+
"ruleAccount": "Целевой аккаунт",
|
|
141
|
+
"ruleAdd": "Добавить правило",
|
|
142
|
+
"ruleHint": "Отметьте модели для маршрутизации в выпадающем списке (множественный выбор), затем выберите целевой аккаунт.",
|
|
143
|
+
"ruleModel": "Модели",
|
|
144
|
+
"ruleModelCount": "Выбрано моделей: {count}",
|
|
145
|
+
"ruleModelPick": "Выберите модели…",
|
|
146
|
+
"ruleRemove": "Удалить",
|
|
147
|
+
"rulesCatalogFailed": "Не удалось загрузить каталог моделей — выбор моделей недоступен; сохранённые правила продолжают действовать.",
|
|
148
|
+
"rulesEmpty": "Правил пока нет.",
|
|
149
|
+
"rulesHint": "Выберите модели (множественный выбор) и направьте их на конкретный аккаунт. Когда модель из запроса совпадает с правилом и аккаунт доступен, запрос обслуживается им; при исчерпании или недоступности аккаунта происходит откат к стандартной ротации. Правила проверяются по порядку сверху вниз — срабатывает первое совпадение.",
|
|
150
|
+
"rulesOrder": "Порядок правил",
|
|
151
|
+
"rulesTitle": "Правила маршрутизации моделей",
|
|
152
|
+
"rulesTotal": "Всего правил: {count}",
|
|
153
|
+
"webSearch": "Использовать Command Code для веб-поиска DSH",
|
|
154
|
+
"webSearchHint": "Если включено, инструмент web_search для модели работает через Command Code (тот же API-ключ и base URL, что и в чате). Если выключено, используется встроенный поиск DeepSeek."
|
|
140
155
|
},
|
|
141
156
|
"commandcode": {
|
|
142
157
|
"title": "📊 Использование Command Code{account}",
|
|
@@ -170,4 +185,4 @@
|
|
|
170
185
|
"errorText": "Не удалось получить статистику Command Code: {message}",
|
|
171
186
|
"imageGate": "В сессии уже есть изображения, а модель {model} не поддерживает изображения; выберите модель с поддержкой зрения или удалите изображения из сессии."
|
|
172
187
|
}
|
|
173
|
-
}
|
|
188
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
{
|
|
2
|
+
"dsh-vision-bridge": {
|
|
3
|
+
"addChannel": "Добавить канал",
|
|
4
|
+
"advanced": "Расширенные настройки",
|
|
5
|
+
"apiKey": "Ключ API",
|
|
6
|
+
"auto": "Автоматически",
|
|
7
|
+
"autoDiscoverOllama": "Автопоиск моделей Ollama",
|
|
8
|
+
"baseURL": "Базовый URL",
|
|
9
|
+
"bench": "Бенчмарк",
|
|
10
|
+
"blurFaces": "Размывать лица на изображениях",
|
|
11
|
+
"channelOrderAutoLatency": "По задержке (наименьший пинг)",
|
|
12
|
+
"channelOrderManual": "Вручную (по списку)",
|
|
13
|
+
"channelOrderWeighted": "По весам провайдеров",
|
|
14
|
+
"channels": "Каналы провайдеров",
|
|
15
|
+
"channelsDesc": "Список настроенных OCR / Vision провайдеров для анализа изображений.",
|
|
16
|
+
"compression": "Сжатие изображений",
|
|
17
|
+
"compressionDesc": "Автоматически масштабировать и сжимать большие изображения перед отправкой в API.",
|
|
18
|
+
"concurrency": "Параллельные запросы",
|
|
19
|
+
"concurrencyHint": "Максимальное количество одновременных задач распознавания",
|
|
20
|
+
"cropImages": "Автообрезка пустых полей",
|
|
21
|
+
"cropImagesDesc": "Удалять пустые поля для экономии токенов и ускорения анализа",
|
|
22
|
+
"defaultChannel": "Основной канал",
|
|
23
|
+
"defaultModel": "Модель по умолчанию",
|
|
24
|
+
"deleteChannel": "Удалить канал",
|
|
25
|
+
"description": "Шлюз компьютерного зрения: анализ скриншотов, распознавание документов, OCR и обработка изображений через мультимодальные модели.",
|
|
26
|
+
"detailLevel": "Детализация (Detail Level)",
|
|
27
|
+
"detailLevelAuto": "Авто (Auto)",
|
|
28
|
+
"detailLevelHigh": "Высокая (High Detail)",
|
|
29
|
+
"detailLevelLow": "Низкая (Low Detail - экономия токенов)",
|
|
30
|
+
"discard": "Сбросить",
|
|
31
|
+
"editChannel": "Редактировать канал",
|
|
32
|
+
"emptyChannels": "Каналы компьютерного зрения не настроены.",
|
|
33
|
+
"enableFacePrivacy": "Защита приватности лиц",
|
|
34
|
+
"enableFacePrivacyDesc": "Обнаруживать и скрывать лица людей на скриншотах перед отправкой во внешние API",
|
|
35
|
+
"fallbackChannel": "Резервный канал",
|
|
36
|
+
"fallbackChannelDesc": "Канал, используемый при недоступности основного провайдера",
|
|
37
|
+
"fastMode": "Быстрый режим OCR",
|
|
38
|
+
"imageDimensions": "Максимальное разрешение (px)",
|
|
39
|
+
"imageDimensionsHint": "Например 2048 для ограничения максимальной стороны изображения",
|
|
40
|
+
"imageFormat": "Формат конвертации",
|
|
41
|
+
"imageFormatJpeg": "JPEG (меньший размер)",
|
|
42
|
+
"imageFormatPng": "PNG (без потерь)",
|
|
43
|
+
"imageFormatWebp": "WebP (оптимальный баланс)",
|
|
44
|
+
"latency": "Задержка: {time}мс",
|
|
45
|
+
"loading": "Загрузка настроек Vision Bridge…",
|
|
46
|
+
"maxTokens": "Максимум токенов вывода",
|
|
47
|
+
"model": "Модель",
|
|
48
|
+
"modelName": "Имя модели (например gpt-4o, claude-3-5-sonnet, qwen-vl)",
|
|
49
|
+
"modelPlaceholder": "gpt-4o",
|
|
50
|
+
"noChannels": "Нет доступных каналов",
|
|
51
|
+
"ocrEngine": "Движок OCR",
|
|
52
|
+
"ocrEngineAuto": "Автовыбор",
|
|
53
|
+
"ocrEngineCloud": "Облачные мультимодальные модели",
|
|
54
|
+
"ocrEngineLocal": "Локальный OCR / Ollama",
|
|
55
|
+
"ocrLanguage": "Язык распознавания текста",
|
|
56
|
+
"ocrLanguageHint": "Например rus+eng для Tesseract / локальных движков",
|
|
57
|
+
"pipeline": "Пайплайн обработки",
|
|
58
|
+
"privacy": "Приватность и безопасность",
|
|
59
|
+
"provider": "Провайдер",
|
|
60
|
+
"providerName": "Имя провайдера (например openai, anthropic, ollama)",
|
|
61
|
+
"providerPlaceholder": "openai",
|
|
62
|
+
"quality": "Качество сжатия (1-100)",
|
|
63
|
+
"qualityHint": "85 рекомендуется для оптимального соотношения качества и размера",
|
|
64
|
+
"rateLimit": "Лимит запросов в минуту (RPM)",
|
|
65
|
+
"remove": "Удалить",
|
|
66
|
+
"requestTimeout": "Таймаут запроса (сек)",
|
|
67
|
+
"requestTimeoutHint": "Максимальное время ожидания ответа от Vision API",
|
|
68
|
+
"resolution": "Разрешение",
|
|
69
|
+
"retryAttempts": "Попыток повтора при ошибке",
|
|
70
|
+
"retryAttemptsHint": "Количество автоматических повторов при временных сбоях сети",
|
|
71
|
+
"routingStrategy": "Стратегия маршрутизации",
|
|
72
|
+
"save": "Сохранить",
|
|
73
|
+
"saved": "Настройки сохранены",
|
|
74
|
+
"saving": "Сохранение…",
|
|
75
|
+
"status": "Статус провайдеров",
|
|
76
|
+
"statusActive": "Канал активен и проверен",
|
|
77
|
+
"statusBenchmarking": "Тестирование задержки…",
|
|
78
|
+
"statusError": "Ошибка канала: {error}",
|
|
79
|
+
"statusIdle": "Канал ожидает запросов",
|
|
80
|
+
"testChannel": "Проверить канал",
|
|
81
|
+
"testSuccess": "Тест успешно пройден: ответ за {time}мс",
|
|
82
|
+
"title": "Шлюз компьютерного зрения (Vision Bridge)",
|
|
83
|
+
"tokenUsage": "Расход токенов",
|
|
84
|
+
"totalProcessed": "Обработано изображений: {n}",
|
|
85
|
+
"visionFeatures": "Функции распознавания",
|
|
86
|
+
"visionFeaturesDesc": "Анализ структуры страниц, таблиц, графиков и рукописного текста",
|
|
87
|
+
"channelOrderMode": "Режим порядка каналов",
|
|
88
|
+
"channelsHint": "Перетащите каналы для изменения порядка приоритета.",
|
|
89
|
+
"circuitClosed": "Норма",
|
|
90
|
+
"circuitHalfOpen": "Тест восстановления",
|
|
91
|
+
"circuitOpen": "Разомкнут (сбой)",
|
|
92
|
+
"circuitState": "Состояние предохранителя (Circuit Breaker)",
|
|
93
|
+
"consensus": "Консенсус моделей",
|
|
94
|
+
"current": "Текущая: {provider} / {model}",
|
|
95
|
+
"currentAuto": "Автовыбор",
|
|
96
|
+
"describeStrategy": "Стратегия описания",
|
|
97
|
+
"errorCount": "Ошибок: {n}",
|
|
98
|
+
"failCount": "Сбоев: {n}",
|
|
99
|
+
"latencyAvg": "Средняя задержка: {time}мс",
|
|
100
|
+
"latencyMin": "Мин. задержка: {time}мс",
|
|
101
|
+
"latencyMax": "Макс. задержка: {time}мс",
|
|
102
|
+
"latencyP95": "p95 задержка: {time}мс",
|
|
103
|
+
"maxDimension": "Макс. размер стороны (px)",
|
|
104
|
+
"maxDimensionHint": "Изображения большего размера будут пропорционально уменьшены",
|
|
105
|
+
"modelCatalog": "Каталог моделей",
|
|
106
|
+
"modelCatalogLoading": "Загрузка каталога моделей…",
|
|
107
|
+
"modelCatalogFailed": "Не удалось загрузить каталог моделей",
|
|
108
|
+
"modelSelection": "Выбор модели",
|
|
109
|
+
"noModels": "Модели не найдены",
|
|
110
|
+
"orderLatency": "По минимальной задержке",
|
|
111
|
+
"orderManual": "Ручной порядок",
|
|
112
|
+
"orderRandom": "Случайный балансировщик",
|
|
113
|
+
"orderRoundRobin": "Циклический (Round Robin)",
|
|
114
|
+
"orderWeighted": "Взвешенный балансировщик",
|
|
115
|
+
"providerNameHint": "Идентификатор провайдера в системе",
|
|
116
|
+
"qualityJpeg": "Качество JPEG (%)",
|
|
117
|
+
"qualityWebp": "Качество WebP (%)",
|
|
118
|
+
"rateLimitRpm": "Лимит RPM",
|
|
119
|
+
"rateLimitTpm": "Лимит TPM",
|
|
120
|
+
"resetCircuits": "Сбросить предохранители",
|
|
121
|
+
"resetCircuitsSuccess": "Состояния предохранителей сброшены",
|
|
122
|
+
"retryCount": "Повторов: {n}",
|
|
123
|
+
"routeDirect": "Прямой маршрут",
|
|
124
|
+
"routeFallback": "Резервный маршрут",
|
|
125
|
+
"routeStrategy": "Стратегия маршрутизации",
|
|
126
|
+
"saveChannel": "Сохранить канал",
|
|
127
|
+
"savedChannel": "Канал сохранён",
|
|
128
|
+
"savingChannel": "Сохранение канала…",
|
|
129
|
+
"settings.general": "Основные",
|
|
130
|
+
"settings.channels": "Каналы",
|
|
131
|
+
"settings.circuitBreaker": "Предохранители",
|
|
132
|
+
"settings.performance": "Производительность",
|
|
133
|
+
"settings.privacy": "Приватность",
|
|
134
|
+
"successCount": "Успешных: {n}",
|
|
135
|
+
"successRate": "Успешность: {rate}%",
|
|
136
|
+
"targetFormat": "Целевой формат",
|
|
137
|
+
"testAllChannels": "Протестировать все каналы",
|
|
138
|
+
"testingChannels": "Тестирование каналов…",
|
|
139
|
+
"timeoutSec": "Таймаут (сек)",
|
|
140
|
+
"tokenCount": "Токенов: {n}",
|
|
141
|
+
"tokensAvg": "В среднем токенов: {n}",
|
|
142
|
+
"totalCalls": "Всего вызовов: {n}",
|
|
143
|
+
"totalLatency": "Суммарная задержка: {time}с",
|
|
144
|
+
"weightHint": "Относительный вес канала при взвешенной балансировке",
|
|
145
|
+
"weightLabel": "Вес:"
|
|
146
|
+
}
|
|
147
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
{
|
|
2
|
+
"dsh-messenger-gateway": {
|
|
3
|
+
"advanced": "Опрос Telegram (Long Polling)",
|
|
4
|
+
"agent": "Агент",
|
|
5
|
+
"allowedIds": "Разрешённые ID пользователей",
|
|
6
|
+
"allowedIdsHint": "Через запятую. Пусто = доступ разрешён всем",
|
|
7
|
+
"artifactPreviews": "Генерировать превью диаграмм и таблиц",
|
|
8
|
+
"botToken": "Токен бота (только запись)",
|
|
9
|
+
"botTokenHint": "Оставьте пустым, чтобы сохранить текущий токен",
|
|
10
|
+
"description": "Telegram-бот: обмен текстом, голосом, фото и документами.",
|
|
11
|
+
"disableTelegram": "Отключить Telegram",
|
|
12
|
+
"enableTelegram": "Включить Telegram",
|
|
13
|
+
"endpoint": "Webhook URL / Endpoint",
|
|
14
|
+
"endpointHint": "URL для приёма входящих вебхуков от Telegram",
|
|
15
|
+
"fileHandling": "Обработка файлов",
|
|
16
|
+
"fileHandlingDesc": "Автоматически передавать прикреплённые документы и изображения в рабочую область",
|
|
17
|
+
"loading": "Загрузка настроек шлюза…",
|
|
18
|
+
"maxFileSize": "Максимальный размер файла (МБ)",
|
|
19
|
+
"maxFileSizeHint": "Лимит размера файлов, принимаемых от пользователей",
|
|
20
|
+
"mediaGroup": "Группировка медиа",
|
|
21
|
+
"mediaGroupDesc": "Объединять серии фото и документов в одно сообщение",
|
|
22
|
+
"mode": "Режим работы",
|
|
23
|
+
"modePolling": "Опрос (Long Polling)",
|
|
24
|
+
"modeWebhook": "Вебхук (Webhook)",
|
|
25
|
+
"notifications": "Уведомления",
|
|
26
|
+
"notificationsDesc": "Отправлять системные оповещения в Telegram",
|
|
27
|
+
"pairing": "Привязка аккаунта",
|
|
28
|
+
"pairingCode": "Код привязки: {code}",
|
|
29
|
+
"pairingDesc": "Отправьте этот код боту для авторизации вашего Telegram-аккаунта",
|
|
30
|
+
"photoQuality": "Качество фото",
|
|
31
|
+
"photoQualityHigh": "Высокое (несжатое)",
|
|
32
|
+
"photoQualityNormal": "Обычное (сжатое Telegram)",
|
|
33
|
+
"pollingInterval": "Интервал опроса (мс)",
|
|
34
|
+
"pollingIntervalHint": "Задержка между запросами getUpdates в режиме polling",
|
|
35
|
+
"proxy": "HTTPS прокси",
|
|
36
|
+
"proxyHint": "например http://127.0.0.1:10808 для обхода сетевых ограничений",
|
|
37
|
+
"renderMarkdown": "Форматирование Markdown",
|
|
38
|
+
"renderMarkdownDesc": "Преобразовывать ответы модели в красивую разметку Telegram HTML/MarkdownV2",
|
|
39
|
+
"resetToken": "Сбросить токен",
|
|
40
|
+
"save": "Сохранить",
|
|
41
|
+
"saved": "Настройки сохранены",
|
|
42
|
+
"saving": "Сохранение…",
|
|
43
|
+
"secretToken": "Секретный токен вебхука",
|
|
44
|
+
"secretTokenHint": "Случайная строка для заголовка X-Telegram-Bot-Api-Secret-Token",
|
|
45
|
+
"sessionMode": "Режим диалога",
|
|
46
|
+
"sessionModeGroup": "Один общий диалог на группу",
|
|
47
|
+
"sessionModeUser": "Отдельный диалог для каждого пользователя",
|
|
48
|
+
"status": "Статус подключения",
|
|
49
|
+
"statusConnected": "Telegram-бот подключён и работает",
|
|
50
|
+
"statusDisabled": "Telegram-шлюз отключён",
|
|
51
|
+
"statusError": "Ошибка подключения бота: {error}",
|
|
52
|
+
"statusWaiting": "Ожидание подключения к Telegram…",
|
|
53
|
+
"title": "Шлюз Telegram (Messenger Gateway)",
|
|
54
|
+
"typingIndicator": "Индикатор набора текста",
|
|
55
|
+
"typingIndicatorDesc": "Показывать «печатает…» во время генерации ответа моделью",
|
|
56
|
+
"voiceFormat": "Формат голосовых сообщений",
|
|
57
|
+
"voiceInput": "Приём голосовых сообщений",
|
|
58
|
+
"voiceInputDesc": "Распознавать входящие голосовые аудиосообщения через Whisper / STT",
|
|
59
|
+
"voiceOutput": "Голосовые ответы",
|
|
60
|
+
"voiceOutputDesc": "Озвучивать ответы модели с помощью модуля синтеза речи (TTS)",
|
|
61
|
+
"voiceSpeed": "Скорость озвучки",
|
|
62
|
+
"voiceVoice": "Голос синтеза речи",
|
|
63
|
+
"welcomeMessage": "Приветственное сообщение",
|
|
64
|
+
"welcomeMessageHint": "Текст сообщения при команде /start",
|
|
65
|
+
"whitelist": "Белый список пользователей",
|
|
66
|
+
"whitelistDesc": "Ограничить доступ к боту только указанными Telegram ID",
|
|
67
|
+
"wrapCode": "Оформление блоков кода",
|
|
68
|
+
"wrapCodeDesc": "Автоматически оборачивать фрагменты кода в моноширинные блоки с подсветкой",
|
|
69
|
+
"adminIds": "ID администраторов",
|
|
70
|
+
"adminIdsHint": "ID пользователей с правами выполнения привилегированных команд",
|
|
71
|
+
"allowDirectMessages": "Разрешить личные сообщения",
|
|
72
|
+
"allowGroupMessages": "Разрешить работу в группах",
|
|
73
|
+
"autoSummarize": "Автосводка длинных сообщений",
|
|
74
|
+
"botUsername": "Имя пользователя бота (@username)",
|
|
75
|
+
"debugLogs": "Подробные логи отладки",
|
|
76
|
+
"errorNotification": "Уведомлять об ошибках выполнения",
|
|
77
|
+
"maxHistory": "Глубина истории контекста (сообщений)",
|
|
78
|
+
"retryAttempts": "Количество попыток отправки",
|
|
79
|
+
"sendTyping": "Отправлять действие чата",
|
|
80
|
+
"streamResponse": "Потоковая передача ответа",
|
|
81
|
+
"groupMention": "Отвечать только при упоминании в группах",
|
|
82
|
+
"groupsEnable": "Разрешить работу в группах",
|
|
83
|
+
"hideAdvanced": "Скрыть расширенные настройки",
|
|
84
|
+
"idleTimeout": "Таймаут неактивности сессии (мин)",
|
|
85
|
+
"instruction": "Пользовательская инструкция",
|
|
86
|
+
"instructionHint": "Дополнительная системная инструкция для сообщений из Telegram",
|
|
87
|
+
"instructionPlaceholder": "Отвечай кратко и лаконично…",
|
|
88
|
+
"maxDocMb": "Макс. размер документа (МБ)",
|
|
89
|
+
"maxImageMb": "Макс. размер фото (МБ)",
|
|
90
|
+
"maxMessageLength": "Максимальная длина сообщения",
|
|
91
|
+
"maxVoiceSec": "Макс. длительность голосового (сек)",
|
|
92
|
+
"mediaCaption": "Подпись к медиа",
|
|
93
|
+
"messageChunkSize": "Размер фрагмента при разбиении сообщений",
|
|
94
|
+
"messageRateLimit": "Лимит сообщений в секунду",
|
|
95
|
+
"modeHelp": "Режимы доставки входящих сообщений от Telegram API",
|
|
96
|
+
"parseMode": "Режим парсинга разметки",
|
|
97
|
+
"parseModeHtml": "HTML",
|
|
98
|
+
"parseModeMarkdown": "MarkdownV2",
|
|
99
|
+
"parseModeNone": "Без разметки (Plain text)",
|
|
100
|
+
"privacyMode": "Режим приватности",
|
|
101
|
+
"privacyModeDesc": "Не сохранять вложения и медиафайлы на диск",
|
|
102
|
+
"proxyAuth": "Авторизация прокси (user:pass)",
|
|
103
|
+
"proxyType": "Тип прокси",
|
|
104
|
+
"proxyTypeHttp": "HTTP",
|
|
105
|
+
"proxyTypeHttps": "HTTPS",
|
|
106
|
+
"proxyTypeSocks5": "SOCKS5",
|
|
107
|
+
"queueSize": "Размер очереди сообщений",
|
|
108
|
+
"rateLimitExceeded": "Превышен лимит сообщений, попробуйте позже",
|
|
109
|
+
"reconnectDelay": "Задержка переподключения (сек)",
|
|
110
|
+
"sendPhotoAsFile": "Всегда отправлять фото как документ (без сжатия)",
|
|
111
|
+
"sendVoiceNote": "Отправлять аудио как голосовое сообщение",
|
|
112
|
+
"sessionTimeout": "Таймаут сессии диалога",
|
|
113
|
+
"showAdvanced": "Показать расширенные настройки",
|
|
114
|
+
"splitMessages": "Автоматически разбивать длинные сообщения",
|
|
115
|
+
"sttEngine": "Движок распознавания речи (STT)",
|
|
116
|
+
"sttEngineLocal": "Локальный Whisper",
|
|
117
|
+
"sttEngineOpenAI": "OpenAI Whisper API",
|
|
118
|
+
"sttLanguage": "Язык распознавания речи",
|
|
119
|
+
"telegramApiUrl": "Пользовательский URL Telegram Bot API",
|
|
120
|
+
"telegramApiUrlHint": "Для локального сервера telegram-bot-api",
|
|
121
|
+
"ttsEngine": "Движок синтеза речи (TTS)",
|
|
122
|
+
"ttsEngineEdge": "Edge TTS",
|
|
123
|
+
"ttsEngineOpenAI": "OpenAI TTS",
|
|
124
|
+
"ttsSpeed": "Скорость речи",
|
|
125
|
+
"ttsVoice": "Голос синтеза",
|
|
126
|
+
"unauthorizedMessage": "Сообщение при отказе в доступе",
|
|
127
|
+
"unauthorizedMessageHint": "Отправляется пользователям, не входящим в белый список",
|
|
128
|
+
"userLanguage": "Язык ответов пользователю",
|
|
129
|
+
"voiceBitrate": "Битрейт аудио",
|
|
130
|
+
"voiceFormatOgg": "OGG Opus",
|
|
131
|
+
"voiceFormatMp3": "MP3",
|
|
132
|
+
"webhookHost": "Хост вебхука",
|
|
133
|
+
"webhookPath": "Путь вебхука",
|
|
134
|
+
"webhookPort": "Порт вебхука",
|
|
135
|
+
"webhookSecret": "Секретный токен",
|
|
136
|
+
"webhookUrl": "Публичный URL вебхука"
|
|
137
|
+
}
|
|
138
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
{
|
|
2
|
+
"dsh-key-rotation": {
|
|
3
|
+
"addKey": "+ Добавить ключ",
|
|
4
|
+
"addKeyTitle": "Добавить API-ключ",
|
|
5
|
+
"addProvider": "+ Добавить провайдера",
|
|
6
|
+
"brokenKey": "повреждён (3× AUTH)",
|
|
7
|
+
"budgetLabel": "бюджет:",
|
|
8
|
+
"cardDesc": "Ротация API-ключей для провайдеров: пулы ключей, автоматическое переключение при исчерпании квот и rate-limit, кулдаун и восстановление.",
|
|
9
|
+
"codesTitle": "Переключать при этих ошибках",
|
|
10
|
+
"cooldown": "Кулдаун после ошибки (мс)",
|
|
11
|
+
"desc": "Ротация API-ключей по провайдерам. Для каждого провайдера укажите список его ключей (имена переменных окружения из DSH credentials). Плагин направляет запросы по очереди и автоматически переключается на следующий ключ при ошибках лимитов или квот.",
|
|
12
|
+
"discard": "Сбросить",
|
|
13
|
+
"empty": "Провайдеры для ротации ключей не настроены.",
|
|
14
|
+
"emptyKeys": "В пуле пока нет ключей.",
|
|
15
|
+
"errorCount": "Ошибок: {n}",
|
|
16
|
+
"failover": "Автоматическое переключение",
|
|
17
|
+
"failoverDesc": "Переключаться на следующий ключ в пуле при получении кодов 429, 402, 403, 503",
|
|
18
|
+
"health": "Состояние пула",
|
|
19
|
+
"healthBad": "Все ключи исчерпаны или заблокированы",
|
|
20
|
+
"healthGood": "Все ключи работоспособны",
|
|
21
|
+
"healthWarn": "Часть ключей на кулдауне",
|
|
22
|
+
"key": "Ключ",
|
|
23
|
+
"keyActive": "Активен",
|
|
24
|
+
"keyBlocked": "Заблокирован",
|
|
25
|
+
"keyCooldown": "Кулдаун ({time}с)",
|
|
26
|
+
"keyName": "Имя ключа",
|
|
27
|
+
"keyPlaceholder": "OPENAI_API_KEY_2",
|
|
28
|
+
"keyPool": "Пул ключей",
|
|
29
|
+
"keyQuota": "Квота исчерпана",
|
|
30
|
+
"keyRateLimit": "Превышен лимит запросов",
|
|
31
|
+
"keyRemoved": "Ключ удалён",
|
|
32
|
+
"keySaved": "Ключ добавлен",
|
|
33
|
+
"keysCount": "Ключей в пуле: {n}",
|
|
34
|
+
"keysTitle": "Список ключей",
|
|
35
|
+
"lastError": "Последняя ошибка: {msg}",
|
|
36
|
+
"lastSuccess": "Успешный запрос: {time}",
|
|
37
|
+
"loading": "Загрузка пулов ротации…",
|
|
38
|
+
"metrics": "Метрики использования",
|
|
39
|
+
"mode": "Режим выбора ключа",
|
|
40
|
+
"modeOrder": "По порядку (Sequential)",
|
|
41
|
+
"modeRandom": "Случайно (Random)",
|
|
42
|
+
"modeWeighted": "По весам / бюджету",
|
|
43
|
+
"name": "Ротация API-ключей",
|
|
44
|
+
"noProviders": "Провайдеры не добавлены",
|
|
45
|
+
"provider": "Провайдер",
|
|
46
|
+
"providerName": "Имя провайдера (например openai, openrouter)",
|
|
47
|
+
"providerPlaceholder": "openai",
|
|
48
|
+
"providerRemoved": "Провайдер удалён",
|
|
49
|
+
"removeKey": "Удалить ключ",
|
|
50
|
+
"removeProvider": "Удалить провайдера",
|
|
51
|
+
"resetCooldowns": "Сбросить все кулдауны",
|
|
52
|
+
"resetSuccess": "Кулдауны ключей сброшены",
|
|
53
|
+
"retryCount": "Попыток повтора",
|
|
54
|
+
"save": "Сохранить настройки",
|
|
55
|
+
"saved": "Настройки сохранены",
|
|
56
|
+
"saving": "Сохранение…",
|
|
57
|
+
"status": "Статус",
|
|
58
|
+
"strategy": "Стратегия failover",
|
|
59
|
+
"title": "Ротация API-ключей (dsh-key-rotation)",
|
|
60
|
+
"totalCalls": "Всего вызовов: {n}",
|
|
61
|
+
"totalErrors": "Всего сбоев: {n}",
|
|
62
|
+
"weight": "Вес ключа",
|
|
63
|
+
"exportCsv": "Экспорт в CSV",
|
|
64
|
+
"exportOne": "Экспорт пула",
|
|
65
|
+
"exportPools": "Экспорт всех пулов в JSON",
|
|
66
|
+
"filterAll": "Все ключи",
|
|
67
|
+
"filterCooldown": "На кулдауне",
|
|
68
|
+
"filterErrors": "С ошибками",
|
|
69
|
+
"filterReady": "Готовы к работе",
|
|
70
|
+
"hoursAgo": "{n} ч назад",
|
|
71
|
+
"importEnv": "Импорт из переменных окружения (.env)",
|
|
72
|
+
"importPools": "Импорт пулов из JSON",
|
|
73
|
+
"keyDisabled": "Отключён вручную",
|
|
74
|
+
"keyErrors": "Ошибок подряд: {n}",
|
|
75
|
+
"keyLatency": "Задержка: {time}мс",
|
|
76
|
+
"keyPriority": "Приоритет",
|
|
77
|
+
"keySuccess": "Успешных запросов: {n}",
|
|
78
|
+
"keyWeight": "Вес: {n}",
|
|
79
|
+
"metricsAvgLatency": "Средняя задержка",
|
|
80
|
+
"metricsErrors": "Ошибки",
|
|
81
|
+
"metricsSuccess": "Успешные",
|
|
82
|
+
"metricsThroughput": "Запросов/мин",
|
|
83
|
+
"metricsTotal": "Всего запросов",
|
|
84
|
+
"minutesAgo": "{n} мин назад",
|
|
85
|
+
"modalAddKey": "Добавление ключа в пул",
|
|
86
|
+
"modalAddProvider": "Добавление пула провайдера",
|
|
87
|
+
"modalEditKey": "Редактирование ключа",
|
|
88
|
+
"modalEditProvider": "Редактирование провайдера",
|
|
89
|
+
"poolActive": "Пул активен",
|
|
90
|
+
"poolDisabled": "Пул отключён",
|
|
91
|
+
"poolEmpty": "В пуле нет активных ключей",
|
|
92
|
+
"poolName": "Имя пула провайдера",
|
|
93
|
+
"providerActive": "Активен",
|
|
94
|
+
"providerDisabled": "Отключён",
|
|
95
|
+
"providerType": "Тип провайдера",
|
|
96
|
+
"quotaExhausted": "Квота исчерпана",
|
|
97
|
+
"rateLimit": "Превышен лимит запросов",
|
|
98
|
+
"resetAll": "Сбросить статистику и кулдауны",
|
|
99
|
+
"resetAllSuccess": "Статистика и кулдауны успешно сброшены",
|
|
100
|
+
"retryInterval": "Интервал повтора (мс)",
|
|
101
|
+
"rotationMode": "Режим ротации",
|
|
102
|
+
"rotationSequential": "Последовательный (Round-Robin)",
|
|
103
|
+
"rotationWeighted": "Взвешенный (Weighted)",
|
|
104
|
+
"secondsAgo": "{n} с назад",
|
|
105
|
+
"statusAvailable": "Доступен",
|
|
106
|
+
"statusCooldown": "Кулдаун",
|
|
107
|
+
"statusDisabled": "Отключён",
|
|
108
|
+
"statusExhausted": "Исчерпан",
|
|
109
|
+
"statusFailed": "Ошибка",
|
|
110
|
+
"switchCount": "Переключений: {n}",
|
|
111
|
+
"testKey": "Проверить ключ",
|
|
112
|
+
"testSuccess": "Ключ валиден: ответ за {time}мс"
|
|
113
|
+
}
|
|
114
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"dsh-gitea": {
|
|
3
|
+
"baseUrl": "URL сервера Gitea",
|
|
4
|
+
"baseUrlHint": "например https://gitea.example.com",
|
|
5
|
+
"ciFail": "CI завершился с ошибкой",
|
|
6
|
+
"ciPass": "CI пройден успешно",
|
|
7
|
+
"ciPending": "CI выполняется",
|
|
8
|
+
"collapse": "Свернуть",
|
|
9
|
+
"daysAgo": "дн. назад",
|
|
10
|
+
"description": "Инструменты и учётные данные Gitea или Forgejo.",
|
|
11
|
+
"discard": "Сбросить",
|
|
12
|
+
"expand": "Развернуть",
|
|
13
|
+
"hoursAgo": "ч назад",
|
|
14
|
+
"issues": "Задачи (Issues)",
|
|
15
|
+
"justNow": "только что",
|
|
16
|
+
"loading": "Загрузка данных Gitea…",
|
|
17
|
+
"minutesAgo": "мин назад",
|
|
18
|
+
"noIssues": "Нет открытых задач",
|
|
19
|
+
"noPulls": "Нет открытых pull request",
|
|
20
|
+
"noRepos": "Репозитории не найдены",
|
|
21
|
+
"openInGitea": "Открыть в Gitea",
|
|
22
|
+
"password": "Пароль / Токен доступа",
|
|
23
|
+
"passwordHint": "Персональный токен доступа Gitea с правами api, repo, issue",
|
|
24
|
+
"pullRequests": "Запросы на слияние (Pull Requests)",
|
|
25
|
+
"refresh": "Обновить",
|
|
26
|
+
"repos": "Репозитории",
|
|
27
|
+
"save": "Сохранить",
|
|
28
|
+
"saved": "Настройки сохранены",
|
|
29
|
+
"saving": "Сохранение…",
|
|
30
|
+
"status": "Статус подключения",
|
|
31
|
+
"statusConnected": "Подключено к Gitea",
|
|
32
|
+
"statusDisconnected": "Не подключено",
|
|
33
|
+
"statusError": "Ошибка подключения",
|
|
34
|
+
"title": "Интеграция с Gitea",
|
|
35
|
+
"token": "Токен API",
|
|
36
|
+
"tokenHint": "Токен авторизации Gitea API",
|
|
37
|
+
"username": "Имя пользователя",
|
|
38
|
+
"usernameHint": "Логин вашей учётной записи в Gitea",
|
|
39
|
+
"viewCommit": "Посмотреть коммит",
|
|
40
|
+
"viewIssue": "Посмотреть задачу",
|
|
41
|
+
"viewPull": "Посмотреть PR",
|
|
42
|
+
"viewRepo": "Посмотреть репозиторий",
|
|
43
|
+
"worktreeBranch": "Ветка worktree",
|
|
44
|
+
"gitAhead": "Впереди",
|
|
45
|
+
"gitBehind": "Позади",
|
|
46
|
+
"gitChanges": "Изменения",
|
|
47
|
+
"gitClean": "Рабочая копия чистая",
|
|
48
|
+
"gitCommits": "Недавние коммиты",
|
|
49
|
+
"gitDirty": "Есть незакоммиченные изменения",
|
|
50
|
+
"gitEmpty": "В репозитории нет коммитов",
|
|
51
|
+
"gitHint": "Сведения о состоянии локального git-репозитория и удалённой ветки",
|
|
52
|
+
"gitNoChanges": "Нет изменений",
|
|
53
|
+
"gitNoCommits": "Нет коммитов для отправки",
|
|
54
|
+
"gitNoRemote": "Удалённый репозиторий не настроен",
|
|
55
|
+
"gitPulled": "Ветка обновлена из удалённого репозитория",
|
|
56
|
+
"gitPushed": "Коммиты успешно отправлены в Gitea",
|
|
57
|
+
"gitRemote": "Удалённый репозиторий (Remote)",
|
|
58
|
+
"gitStatus": "Статус Git",
|
|
59
|
+
"gitSynced": "Ветка синхронизирована с Gitea",
|
|
60
|
+
"gitUpToDate": "Ветка актуальна",
|
|
61
|
+
"giteaBranch": "Ветка",
|
|
62
|
+
"giteaCommit": "Коммит",
|
|
63
|
+
"giteaOwner": "Владелец / Организация",
|
|
64
|
+
"giteaRepo": "Репозиторий",
|
|
65
|
+
"giteaToken": "Персональный токен",
|
|
66
|
+
"giteaUrl": "URL сервера",
|
|
67
|
+
"giteaUser": "Пользователь",
|
|
68
|
+
"repoCloned": "Репозиторий успешно клонирован",
|
|
69
|
+
"repoCloning": "Клонирование репозитория…"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"dsh-cost-meter": {
|
|
3
|
+
"catalogUnavailable": "Каталог OpenRouter недоступен: ",
|
|
4
|
+
"chipRate": "тариф",
|
|
5
|
+
"chipUnknown": "тариф ?",
|
|
6
|
+
"field.currency": "Символ валюты",
|
|
7
|
+
"field.displayTimeZone": "Часовой пояс отображения",
|
|
8
|
+
"field.usdRate": "Курс к USD",
|
|
9
|
+
"flat": "фикс.",
|
|
10
|
+
"hint.currency": "Символ валюты в виджете (например $, ₽, €).",
|
|
11
|
+
"hint.displayTimeZone": "Часовой пояс IANA для расписания пиковых/ночных тарифов.",
|
|
12
|
+
"hint.usdRate": "Курс обмена: количество единиц валюты за 1 USD (например 80 для ₽).",
|
|
13
|
+
"modal.close": "Закрыть",
|
|
14
|
+
"modal.title": "Тарифы и стоимость моделей",
|
|
15
|
+
"offPeak": "ночь",
|
|
16
|
+
"peak": "пик",
|
|
17
|
+
"rate.custom": "Пользовательский",
|
|
18
|
+
"rate.default": "По умолчанию",
|
|
19
|
+
"rate.input": "Вход: {price} / 1M токенов",
|
|
20
|
+
"rate.output": "Выход: {price} / 1M токенов",
|
|
21
|
+
"rate.unit": "/ 1M ток.",
|
|
22
|
+
"table.model": "Модель",
|
|
23
|
+
"table.provider": "Провайдер",
|
|
24
|
+
"table.rate": "Тарифная ставка",
|
|
25
|
+
"table.total": "Итого",
|
|
26
|
+
"title": "Счётчик стоимости токенов",
|
|
27
|
+
"totalCost": "Общая стоимость",
|
|
28
|
+
"modelNotFound": "Модель не найдена в каталоге OpenRouter. Задайте цены вручную в настройках или сопоставьте модель через modelMap.",
|
|
29
|
+
"modelsBreakdown": "Детализация по моделям",
|
|
30
|
+
"noPriceSpecified": "тариф не указан",
|
|
31
|
+
"noUsageYet": "Провайдер ещё не передал данные об использовании для этой сессии.",
|
|
32
|
+
"routeUnknown": "маршрут неизвестен",
|
|
33
|
+
"sessionTokens": "Токены сессии",
|
|
34
|
+
"settings.loading": "Загрузка настроек…",
|
|
35
|
+
"settings.save": "Сохранить",
|
|
36
|
+
"settings.saveFailed": "Не удалось сохранить настройки: ",
|
|
37
|
+
"settings.saved": "Сохранено",
|
|
38
|
+
"settings.saving": "Сохранение…",
|
|
39
|
+
"settings.unavailable": "Настройки недоступны (namespace ещё не зарегистрирован).",
|
|
40
|
+
"subtitle": "Стоимость сессии в шапке, тарифы токенов и детализация по моделям"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@goodandready/dsh-time-machine": {
|
|
3
|
+
"autoHeal": "Восстановление промпта при сбое",
|
|
4
|
+
"autoSnapshot": "Автоснимок перед правкой файлов",
|
|
5
|
+
"close": "Закрыть",
|
|
6
|
+
"confirmDelete": "Удалить эту контрольную точку?",
|
|
7
|
+
"confirmRollback": "Откатиться к этой контрольной точке? Это сбросит изменения в рабочей области.",
|
|
8
|
+
"create": "Создать точку сохранения",
|
|
9
|
+
"delete": "Удалить",
|
|
10
|
+
"diff": "Различия",
|
|
11
|
+
"empty": "Контрольных точек пока нет.",
|
|
12
|
+
"labelPh": "Название контрольной точки",
|
|
13
|
+
"loading": "Загрузка точек сохранения…",
|
|
14
|
+
"noDiff": "Нет изменений относительно контрольной точки.",
|
|
15
|
+
"restore": "Восстановить",
|
|
16
|
+
"rollback": "Откат",
|
|
17
|
+
"rollbackSuccess": "Рабочая область успешно восстановлена.",
|
|
18
|
+
"save": "Создать точку",
|
|
19
|
+
"saved": "Точка сохранена",
|
|
20
|
+
"snapshots": "Снимки состояния",
|
|
21
|
+
"title": "Машина времени (Time Machine)",
|
|
22
|
+
"view": "Просмотр",
|
|
23
|
+
"list": "Хронология",
|
|
24
|
+
"maxSnapshots": "Максимум снимков",
|
|
25
|
+
"sub": "Теневые снимки, diff и мгновенный откат для безопасности агента.",
|
|
26
|
+
"tabTitle": "Машина времени",
|
|
27
|
+
"unavailable": "Настройки недоступны"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@goodandready/dsh-context-lens": {
|
|
3
|
+
"budget": "Бюджет",
|
|
4
|
+
"compress": "Сжать",
|
|
5
|
+
"depth": "Макс. глубина AST",
|
|
6
|
+
"history": "Недавние операции",
|
|
7
|
+
"lowBudget": "Бюджет почти исчерпан",
|
|
8
|
+
"mode": "Режим сжатия",
|
|
9
|
+
"placeholder": "Вставьте лог Jest/Pytest сюда…",
|
|
10
|
+
"preview": "Предпросмотр лога",
|
|
11
|
+
"ready": "Готово",
|
|
12
|
+
"saved": "Сохранено",
|
|
13
|
+
"stats": "Статистика",
|
|
14
|
+
"tokens": "Токены",
|
|
15
|
+
"total": "Всего",
|
|
16
|
+
"trimmed": "Обрезано",
|
|
17
|
+
"viewLog": "Просмотреть лог",
|
|
18
|
+
"saving": "Сохранение…",
|
|
19
|
+
"sub": "Сжатие AST, фильтрация логов, бюджет токенов",
|
|
20
|
+
"title": "Context Lens & Token Guard",
|
|
21
|
+
"tracking": "Отслеживание экономии токенов"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@goodandready/dsh-shadow-auditor": {
|
|
3
|
+
"auditBadge": "Аудит команд",
|
|
4
|
+
"blockCommands": "Блокировать опасные команды",
|
|
5
|
+
"blockCommandsDesc": "Проверяет --force, rm -rf, systemctl, удаление БД, curl|bash",
|
|
6
|
+
"lastAudit": "Последний аудит",
|
|
7
|
+
"loading": "Загрузка…",
|
|
8
|
+
"save": "Сохранить",
|
|
9
|
+
"saved": "Сохранено",
|
|
10
|
+
"saving": "Сохранение…",
|
|
11
|
+
"strictSecrets": "Строгое сканирование секретов",
|
|
12
|
+
"strictSecretsDesc": "Блокировать при наличии API-ключей или приватных токенов в diff",
|
|
13
|
+
"title": "Аудитор безопасности (Shadow Auditor)",
|
|
14
|
+
"unlocked": "Разблокировано",
|
|
15
|
+
"subtitle": "Безопасность секретов и команд"
|
|
16
|
+
}
|
|
17
|
+
}
|