@goodandready/dsh-russian-lang 0.2.3 → 0.2.5
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 +2 -2
- package/package.json +1 -1
- 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/17-dsh-context.json +8 -1
- package/ru-plugins/32-vision-bridge.json +199 -0
- package/ru-plugins/33-messenger-gateway.json +181 -0
- package/ru-plugins/34-key-rotation.json +150 -0
- package/ru-plugins/35-gitea.json +86 -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 +32 -0
- package/ru-plugins/39-shadow-auditor.json +25 -0
- package/ru-plugins/40-clinebot.json +8 -0
- package/ru-plugins/41-lanmode.json +6 -0
- package/ru-plugins/42-plugin-console.json +318 -0
- package/ru-plugins/43-better-input.json +127 -0
- package/ru-plugins/44-auto-review.json +75 -0
- package/ru-plugins/45-session-control.json +86 -0
- package/ru-plugins/46-memory-brain.json +33 -0
- package/ru-plugins/47-llm-wiki.json +26 -0
- package/ru-plugins/48-task-tracker.json +19 -0
- package/ru-plugins/49-usage-guard.json +19 -0
- package/ru-plugins/50-automode.json +12 -0
- package/ru-plugins/51-plugin-guard.json +12 -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
|
+
}
|
|
@@ -275,6 +275,13 @@
|
|
|
275
275
|
"browser.noSystem": "В заголовке этого запроса не было системного промпта",
|
|
276
276
|
"rich.md.copy": "Копировать",
|
|
277
277
|
"rich.md.copied": "Скопировано",
|
|
278
|
-
"rich.md.footnotes": "Сноски"
|
|
278
|
+
"rich.md.footnotes": "Сноски",
|
|
279
|
+
"gate.body": "dsh-context поддерживает DeepSeek Harness версии {minimum} или новее.",
|
|
280
|
+
"gate.current": "Текущая",
|
|
281
|
+
"gate.minimum": "Минимально требуемая",
|
|
282
|
+
"gate.ok": "Понятно",
|
|
283
|
+
"gate.orNewer": "или новее",
|
|
284
|
+
"gate.title": "Требуется обновление DSH",
|
|
285
|
+
"jump.statsLine": "Просмотр состава контекста на вкладке «Контекст»"
|
|
279
286
|
}
|
|
280
287
|
}
|
|
@@ -0,0 +1,199 @@
|
|
|
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
|
+
"deskew": "Устранение перекоса изображений",
|
|
147
|
+
"empty": "-",
|
|
148
|
+
"enhanceImage": "Улучшение качества изображений",
|
|
149
|
+
"escalation": "Эскалация",
|
|
150
|
+
"escalationAuto": "Автоэскалация (второй проход для сложных изображений)",
|
|
151
|
+
"escalationSimple": "Только простой режим (один проход)",
|
|
152
|
+
"failed": "Не удалось загрузить/сохранить",
|
|
153
|
+
"filterProviders": "Фильтр провайдеров…",
|
|
154
|
+
"freeProviders": "Бесплатные провайдеры",
|
|
155
|
+
"imageMaxHeight": "Макс. высота (px)",
|
|
156
|
+
"imageMaxWidth": "Макс. ширина (px)",
|
|
157
|
+
"imageQuality": "Качество (1–100)",
|
|
158
|
+
"jsonrpc": "JSON-RPC",
|
|
159
|
+
"keyHidden": "неизвестно",
|
|
160
|
+
"keyMissing": "нет ключа",
|
|
161
|
+
"keyOk": "ключ в порядке",
|
|
162
|
+
"maskPII": "Маскировать персональные данные в промптах",
|
|
163
|
+
"maskSystemPaths": "Маскировать пути и IP в ответах",
|
|
164
|
+
"method": "Метод",
|
|
165
|
+
"mode": "Режим",
|
|
166
|
+
"modeHybrid": "Гибридный (автоперезапись + инструменты)",
|
|
167
|
+
"modeLlm": "Только LLM (автоперезапись, инструменты доступны)",
|
|
168
|
+
"modeTools": "Только инструменты (без перезаписи, вызов describe_image)",
|
|
169
|
+
"modelInvalid": "Модель не принимает изображения",
|
|
170
|
+
"noVisionModels": "No vision models in the catalog (input: [text, image]) — add one in Настройки → Models.",
|
|
171
|
+
"nsfwFilter": "Фильтр неприемлемого контента",
|
|
172
|
+
"presetCloud": "Пресет: Облако",
|
|
173
|
+
"presetLmStudio": "Пресет: LM Studio",
|
|
174
|
+
"presetLocal": "Пресет: Локальный",
|
|
175
|
+
"protocol": "Протокол",
|
|
176
|
+
"protocolOpenaiChat": "openai-chat",
|
|
177
|
+
"protocolOpenaiResponses": "openai-responses",
|
|
178
|
+
"reqBoth": "Выберите провайдера и модель, или оставьте оба пустыми для автовыбора",
|
|
179
|
+
"requestTemplate": "Шаблон запроса",
|
|
180
|
+
"reset": "Сброс (авто)",
|
|
181
|
+
"responsePath": "Путь ответа",
|
|
182
|
+
"security": "Безопасность",
|
|
183
|
+
"selfCheck": "Визуальная самопроверка",
|
|
184
|
+
"sglang": "SGLang",
|
|
185
|
+
"strategyAuto": "Авто (использовать Vision LLM)",
|
|
186
|
+
"strategyCacheOnly": "Только кэш (без сети)",
|
|
187
|
+
"strategyLlm": "Зрительная модель (Vision LLM)",
|
|
188
|
+
"strategyOcrLocal": "Локальный OCR (резерв)",
|
|
189
|
+
"stripEXIF": "Удалять метаданные EXIF",
|
|
190
|
+
"subtitle": "Изображения в чате обрабатываются выбранной моделью зрения. Оставьте поля пустыми для автовыбора первой подходящей модели.",
|
|
191
|
+
"testFail": "Сбой: {err}",
|
|
192
|
+
"testOk": "OK ({ms}мс)",
|
|
193
|
+
"testVision": "Тест зрения",
|
|
194
|
+
"testing": "Тестирование…",
|
|
195
|
+
"tileLargeImages": "Фрагментировать большие изображения",
|
|
196
|
+
"type": "Тип",
|
|
197
|
+
"vllm": "vLLM"
|
|
198
|
+
}
|
|
199
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
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
|
+
"maxTextKb": "Макс. текст из документа (КБ)",
|
|
138
|
+
"media": "Медиа",
|
|
139
|
+
"model": "Модель",
|
|
140
|
+
"modelHint": "Пусто = по умолчанию в DSH",
|
|
141
|
+
"notifyBridge": "Уведомления → Telegram-чат",
|
|
142
|
+
"notifyBridgeHint": "task_done/error из веб-сессий (не msgw-*)",
|
|
143
|
+
"notifyHome": "Имя домашнего чата уведомлений",
|
|
144
|
+
"pairingApprove": "Одобрить",
|
|
145
|
+
"pairingEmpty": "Нет ожидающих кодов",
|
|
146
|
+
"pairingRefresh": "Обновить",
|
|
147
|
+
"pairingReject": "Отклонить",
|
|
148
|
+
"photoOnly": "Фото без подписи",
|
|
149
|
+
"photoPrompt": "Ждать вопроса (рекомендуется)",
|
|
150
|
+
"photoRun": "Отвечать немедленно",
|
|
151
|
+
"pollInterval": "Интервал опроса (мс)",
|
|
152
|
+
"pollTimeout": "Таймаут опроса (сек)",
|
|
153
|
+
"progressEnable": "Сообщение о ходе выполнения (рассуждение → удаление → финал)",
|
|
154
|
+
"provider": "Провайдер",
|
|
155
|
+
"providerHint": "Пусто = по умолчанию в DSH",
|
|
156
|
+
"quickActions": "Клавиатура быстрых действий (/new, /stop, /voice, /status)",
|
|
157
|
+
"reactionsEnable": "Реакции во время обработки (👀)",
|
|
158
|
+
"sessionScope": "Область действия групповых сессий",
|
|
159
|
+
"sessionScopeChat": "Общая для чата/темы",
|
|
160
|
+
"sessionScopeUser": "Для каждого пользователя (рекомендуется)",
|
|
161
|
+
"statusIndicator": "Статус indicator (Online/Offline)",
|
|
162
|
+
"statusIndicatorHint": "Задаёт краткое описание бота; у ботов нет индикатора присутствия.",
|
|
163
|
+
"telegram": "Telegram",
|
|
164
|
+
"textFormat": "Формат текста",
|
|
165
|
+
"textFormatHtml": "Markdown → Telegram HTML",
|
|
166
|
+
"textFormatPlain": "Простой текст",
|
|
167
|
+
"transport": "Транспорт",
|
|
168
|
+
"transportPoll": "Длинный опрос (getUpdates)",
|
|
169
|
+
"transportWebhook": "Вебхук (Webhook)",
|
|
170
|
+
"tts": "Голосовые ответы",
|
|
171
|
+
"ttsEnable": "Голосовые ответы через dsh-tts",
|
|
172
|
+
"ttsMaxChars": "Макс. символов для озвучки",
|
|
173
|
+
"turnTimeout": "Таймаут хода агента (сек)",
|
|
174
|
+
"voiceMode": "Режим голосовых ответов",
|
|
175
|
+
"voiceModeAlways": "Всегда использовать TTS",
|
|
176
|
+
"voiceModeMirror": "В ответ на входящие голосовые",
|
|
177
|
+
"voiceModeOff": "Выключено (если не включён /voice)",
|
|
178
|
+
"webhookSecretHint": "Оставьте пустым для сохранения текущего",
|
|
179
|
+
"webhookUrlHint": "Полный HTTPS URL, на который Telegram отправляет POST-запросы"
|
|
180
|
+
}
|
|
181
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
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
|
+
"justNow": "только что",
|
|
114
|
+
"keyCooling": "охлаждение, {s}с",
|
|
115
|
+
"keyExpired": "истёк",
|
|
116
|
+
"keyExpiringSoon": "истекает через {n} дн.",
|
|
117
|
+
"keyFromEnv": "из переменных окружения, только чтение",
|
|
118
|
+
"keyHint": "Значение сохраняется в учётных данных DSH и никогда не отправляется обратно в браузер — отображаются только последние 5 символов.",
|
|
119
|
+
"keyLabel": "Ключ {n}",
|
|
120
|
+
"keyMissing": "учётные данные отсутствуют",
|
|
121
|
+
"keyReady": "готов",
|
|
122
|
+
"keySave": "Сохранить key",
|
|
123
|
+
"keyValuePlaceholder": "paste the key, then Сохранить",
|
|
124
|
+
"keyWriteFailed": "не удалось сохранить ключ: {msg}",
|
|
125
|
+
"moveDown": "Переместить вниз",
|
|
126
|
+
"moveUp": "Переместить вверх",
|
|
127
|
+
"notRegistered": "не зарегистрирован",
|
|
128
|
+
"notSecretShape": "сохранено, но значение не похоже на API-ключ — проверьте опечатки",
|
|
129
|
+
"poolExhausted": "пул исчерпан — все ключи охлаждаются",
|
|
130
|
+
"providersTitle": "Провайдеры и их ключи",
|
|
131
|
+
"resetCooldown": "Сбросить охлаждение",
|
|
132
|
+
"resetting": "Сброс…",
|
|
133
|
+
"retestBroken": "Повторный тест",
|
|
134
|
+
"retestFail": "повторный тест не пройден — ключ всё ещё не работает",
|
|
135
|
+
"rpmTitle": "запросов/мин: {u} использовано, {r} осталось",
|
|
136
|
+
"scheduleDays": "Расписание ротации (дней, 0=выкл.)",
|
|
137
|
+
"snapshotExport": "Снимок ⬇",
|
|
138
|
+
"snapshotImport": "Восстановить",
|
|
139
|
+
"subtitle": "Ротация API-ключей по провайдерам: пулы ключей, автоматическое переключение при исчерпании квот/лимитов, охлаждение и восстановление.",
|
|
140
|
+
"switchCodes": "Коды переключения (через запятую)",
|
|
141
|
+
"switchesNone": "переключений пока не было",
|
|
142
|
+
"switchesSome": "переключений: {n} · последнее: {reason}, {ago}",
|
|
143
|
+
"testAll": "Проверить все ключи",
|
|
144
|
+
"testFail": "СБОЙ",
|
|
145
|
+
"testOk": "OK",
|
|
146
|
+
"testing": "Тестирование…",
|
|
147
|
+
"usedAgo": "{ago} назад",
|
|
148
|
+
"weightHint": "вес в round-robin: сколько раз ключ участвует в цикле (1 = равная доля)"
|
|
149
|
+
}
|
|
150
|
+
}
|