@goodandready/dsh-russian-lang 0.2.16 → 0.2.19
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/README.md +3 -2
- package/README.ru.md +2 -1
- package/docs/media/banner.jpg +0 -0
- package/lib/client.js +282 -93
- package/lib/index.js +20 -0
- package/lib/plugin-updater.js +333 -0
- package/package.json +3 -3
- package/ru/01-core-small.json +27 -3
- package/ru/02-conversation.json +16 -4
- package/ru/03-models-workspace.json +4 -1
- package/ru/04-preset-cordis.json +8 -2
- package/ru/07-sidebar-previewers.json +2 -1
- package/ru/08-sidebar-terminal-archive.json +48 -0
- package/ru-plugins/03-dshmarket.json +5 -2
- package/ru-plugins/15-commandcode.json +55 -2
- package/ru-plugins/17-dsh-context.json +7 -2
- package/ru-plugins/23-moa.json +172 -1
- package/ru-plugins/26-config-manager.json +17 -2
- package/ru-plugins/33-messenger-gateway.json +56 -1
- package/ru-plugins/35-gitea.json +89 -1
- package/ru-plugins/41-lanmode.json +160 -2
- package/ru-plugins/42-plugin-console.json +29 -1
- package/ru-plugins/49-usage-guard.json +33 -1
- package/ru-plugins/50-automode.json +20 -2
- package/ru-plugins/56-cron.json +13 -2
- package/ru-plugins/61-issue-reporter.json +143 -1
- package/ru-plugins/62-model-search.json +15 -1
- package/ru-plugins/63-agent-orchestrator.json +11 -0
- package/ru-plugins/64-key-limits.json +27 -0
- package/ru-plugins/65-subscriptions.json +185 -0
- package/ru-plugins/66-tts.json +211 -0
- package/ru-plugins/67-voice.json +158 -0
- package/ru-plugins/68-image-gen.json +143 -0
- package/ru-plugins/69-plugin-notify.json +29 -0
|
@@ -311,6 +311,11 @@
|
|
|
311
311
|
"stats.costUnavailable": "Цены моделей недоступны (повторяем запрос) — стоимость пока не может быть рассчитана.",
|
|
312
312
|
"settings.toolSort": "Схемы инструментов · Сортировка по умолчанию",
|
|
313
313
|
"tool.sort.count": "По числу вызовов",
|
|
314
|
-
"tool.hitsTip": "Сколько раз этот инструмент вызывался и возвращал ответ в контексте текущего шага"
|
|
314
|
+
"tool.hitsTip": "Сколько раз этот инструмент вызывался и возвращал ответ в контексте текущего шага",
|
|
315
|
+
"browser.search.skill": "Фильтр навыков…",
|
|
316
|
+
"cat.skill": "Инъекции навыков",
|
|
317
|
+
"cmd.label": "Контекст",
|
|
318
|
+
"cmd.section": "Контекст",
|
|
319
|
+
"stats.cacheHitTip": "Накопительная доля чтения из кэша от общего платного ввода за сессию."
|
|
315
320
|
}
|
|
316
|
-
}
|
|
321
|
+
}
|
package/ru-plugins/23-moa.json
CHANGED
|
@@ -38,6 +38,177 @@
|
|
|
38
38
|
"clear": "Очистить",
|
|
39
39
|
"noModelsMatch": "Моделей по запросу не найдено.",
|
|
40
40
|
"useCustom": "Использовать свою",
|
|
41
|
-
"selectModel": "Выберите модель..."
|
|
41
|
+
"selectModel": "Выберите модель...",
|
|
42
|
+
"header.title": "Оркестрация Mixture of Agents (MoA)",
|
|
43
|
+
"header.sub": "Параллельная генерация несколькими моделями-кандидатами с финальной оценкой и объединением ведущей моделью-судьёй. Автоматически возвращает результат в модель текущей сессии.",
|
|
44
|
+
"badge.online": "MoA активен",
|
|
45
|
+
"badge.offline": "Хост недоступен",
|
|
46
|
+
"badge.preset": "Пресет: {name}",
|
|
47
|
+
"badge.models": "Доступно моделей: {count}",
|
|
48
|
+
"badge.candidates": "Кандидатов: {count}",
|
|
49
|
+
"tab.orchestration": "Оркестрация",
|
|
50
|
+
"tab.critique": "Консилиум и критика",
|
|
51
|
+
"tab.stats": "Лидерборд и винрейт",
|
|
52
|
+
"tab.advanced": "Дополнительно",
|
|
53
|
+
"sec.roles_title": "Назначение ролей моделей",
|
|
54
|
+
"sec.roles_desc": "Выберите пул моделей-кандидатов (proposers) и синтезирующую модель-судью (judge)",
|
|
55
|
+
"sec.critique_title": "Режим взаимной критики (Peer Review)",
|
|
56
|
+
"sec.critique_desc": "Кандидаты анонимно рецензируют ответы друг друга перед финальным решением судьи",
|
|
57
|
+
"sec.stats_title": "Метрики и победы моделей",
|
|
58
|
+
"sec.stats_desc": "Статистика качества ответов и частота выбора модели судьёй",
|
|
59
|
+
"field.judge_model": "Модель-судья (Judge / Synthesizer)",
|
|
60
|
+
"field.judge_model_hint": "Финальная модель, которая оценивает ответы кандидатов и формирует итоговый ответ",
|
|
61
|
+
"field.proposer_models": "Модели-кандидаты (Proposers)",
|
|
62
|
+
"field.proposer_models_hint": "Модели, генерирующие независимые варианты ответа в параллельном режиме",
|
|
63
|
+
"field.rounds": "Количество раундов синтеза",
|
|
64
|
+
"field.rounds_hint": "Число итераций доработки и взаимной критики (рекомендуется 1–2)",
|
|
65
|
+
"field.temperature": "Температура генерации",
|
|
66
|
+
"field.temperature_hint": "Степень креативности для моделей-кандидатов (0.0 — детерминировано, 1.0 — вариативно)",
|
|
67
|
+
"field.max_tokens": "Лимит токенов на раунд",
|
|
68
|
+
"field.max_tokens_hint": "Максимальное число токенов для ответов каждого кандидата",
|
|
69
|
+
"field.peer_critique": "Включить взаимную критику (Peer Critique)",
|
|
70
|
+
"field.peer_critique_hint": "Перед передачей судье кандидаты выставляют оценки и пишут замечания к чужим ответам",
|
|
71
|
+
"field.blind_review": "Слепое рецензирование (Blind Review)",
|
|
72
|
+
"field.blind_review_hint": "Скрывать имена моделей при взаимной оценке для исключения предвзятости",
|
|
73
|
+
"field.curator_advice": "Совет куратора (Curator Guidance)",
|
|
74
|
+
"field.curator_advice_hint": "Инструкция судье, на какие аспекты обращать внимание (точность, лаконичность, код)",
|
|
75
|
+
"field.fallback_judges": "Резервные судьи (Fallback Judges)",
|
|
76
|
+
"field.fallback_judges_hint": "Цепочка моделей на случай превышения лимитов или недоступности основного судьи",
|
|
77
|
+
"field.timeout_sec": "Таймаут раунда (сек)",
|
|
78
|
+
"field.timeout_sec_hint": "Максимальное время ожидания ответа самого медленного кандидата",
|
|
79
|
+
"stat.total_runs": "Всего раундов MoA",
|
|
80
|
+
"stat.successful_runs": "Успешных раундов",
|
|
81
|
+
"stat.win_rate": "Доля побед моделей (Win Rate)",
|
|
82
|
+
"stat.avg_latency": "Среднее время раунда",
|
|
83
|
+
"stat.tokens_saved": "Экономия токенов",
|
|
84
|
+
"stat.no_data": "Статистика раундов пока пуста. Запустите MoA через /moa или кнопку выше.",
|
|
85
|
+
"col.model": "Модель",
|
|
86
|
+
"col.wins": "Побед",
|
|
87
|
+
"col.win_rate": "Винрейт",
|
|
88
|
+
"col.critique_score": "Оценка консилиума",
|
|
89
|
+
"col.avg_latency": "Средняя задержка",
|
|
90
|
+
"status.idle": "Готов к работе",
|
|
91
|
+
"status.proposing": "Генерация ответов кандидатами ({current}/{total})…",
|
|
92
|
+
"status.critique": "Взаимная критика и оценка ответов…",
|
|
93
|
+
"status.judging": "Судья {judge} синтезирует финальный ответ…",
|
|
94
|
+
"status.completed": "Раунд успешно завершён",
|
|
95
|
+
"status.error": "Ошибка раунда: {error}",
|
|
96
|
+
"error.no_proposers": "Необходимо выбрать хотя бы одну модель-кандидата",
|
|
97
|
+
"error.no_judge": "Необходимо указать модель-судью",
|
|
98
|
+
"error.timeout": "Превышено время ожидания ответа моделей ({timeout}с)",
|
|
99
|
+
"msg.saved": "Настройки MoA успешно сохранены",
|
|
100
|
+
"msg.reset": "Настройки сброшены к значениям по умолчанию",
|
|
101
|
+
"msg.stats_cleared": "История побед и статистика очищены",
|
|
102
|
+
"btn.run": "Запустить раунд MoA",
|
|
103
|
+
"btn.running": "Генерация ответов…",
|
|
104
|
+
"btn.save": "Сохранить конфигурацию",
|
|
105
|
+
"btn.saving": "Сохранение…",
|
|
106
|
+
"btn.reset": "Сбросить к умолчаниям",
|
|
107
|
+
"btn.refresh": "Обновить статус",
|
|
108
|
+
"btn.export_stats": "Экспорт статистики (CSV/JSON)",
|
|
109
|
+
"btn.clear_stats": "Очистить статистику",
|
|
110
|
+
"card.critique_title": "Карточка взаимной критики",
|
|
111
|
+
"card.critique_score": "Средний балл: {score}/10",
|
|
112
|
+
"card.strengths": "Сильные стороны:",
|
|
113
|
+
"card.weaknesses": "Замечания:",
|
|
114
|
+
"card.verdict": "Вердикт судьи:",
|
|
115
|
+
"card.winner": "Выбранный кандидат: {model}",
|
|
116
|
+
"card.consensus": "Степень согласия консилиума: {consensus}%",
|
|
117
|
+
"export.json": "Экспорт JSON",
|
|
118
|
+
"export.csv": "Экспорт CSV",
|
|
119
|
+
"export.copied": "Данные скопированы в буфер обмена",
|
|
120
|
+
"help.title": "Справка по Mixture of Agents",
|
|
121
|
+
"help.desc": "MoA комбинирует сильные стороны разных моделей (код, фактология, логика) для получения результата, превосходящего любую одиночную модель.",
|
|
122
|
+
"help.slash_command": "Слэш-команда:",
|
|
123
|
+
"help.slash_example": "/moa Сравни подходы к кэшированию и составь архитектуру",
|
|
124
|
+
"help.doc_link": "Документация и лучшие практики",
|
|
125
|
+
"slash.desc": "Выполнить запрос через оркестрацию нескольких моделей (MoA)",
|
|
126
|
+
"toast.copied": "Скопировано в буфер обмена",
|
|
127
|
+
"toast.cleared": "История очищена",
|
|
128
|
+
"empty.models": "Нет доступных моделей для выбора",
|
|
129
|
+
"empty.proposers": "Выберите хотя бы одну модель-кандидата в списке выше",
|
|
130
|
+
"tag.recommended": "Рекомендуется",
|
|
131
|
+
"tag.fast": "Быстрая",
|
|
132
|
+
"tag.reasoning": "Рассуждающая",
|
|
133
|
+
"tag.coder": "Для кода",
|
|
134
|
+
"presets.title": "Управление пресетами MoA",
|
|
135
|
+
"presets.desc": "Готовые наборы ролей, моделей-кандидатов и параметров судейства для различных типов задач",
|
|
136
|
+
"presets.active_badge": "Активный пресет",
|
|
137
|
+
"presets.set_default": "Сделать по умолчанию",
|
|
138
|
+
"presets.new_btn": "Создать пресет…",
|
|
139
|
+
"presets.del_btn": "Удалить пресет",
|
|
140
|
+
"presets.del_confirm": "Вы уверены, что хотите удалить этот пресет?",
|
|
141
|
+
"presets.create": "Создать",
|
|
142
|
+
"presets.cancel": "Отмена",
|
|
143
|
+
"presets.name_placeholder": "Имя пресета (например: Code Review, Deep Debate)",
|
|
144
|
+
"aggregator.title": "Модель-судья и агрегация (Judge / Aggregator)",
|
|
145
|
+
"aggregator.desc": "Модель, которая оценивает ответы кандидатов, применяет критерии и формирует итоговый результат",
|
|
146
|
+
"aggregator.temp_label": "Температура судьи",
|
|
147
|
+
"aggregator.temp_hint": "Степень вариативности синтеза (обычно 0.1–0.3 для строгой оценки)",
|
|
148
|
+
"aggregator.criteria_label": "Критерии оценки судьи",
|
|
149
|
+
"aggregator.criteria_placeholder": "Оценивай корректность кода, отсутствие галлюцинаций, следование стилю...",
|
|
150
|
+
"aggregator.questions_label": "Контрольные вопросы для критики",
|
|
151
|
+
"aggregator.questions_hint": "Список контрольных проверок при сопоставлении ответов кандидатов",
|
|
152
|
+
"aggregator.curator_label": "Инструкция куратора",
|
|
153
|
+
"aggregator.curator_hint": "Специальные указания по синтезу ответов",
|
|
154
|
+
"aggregator.stream_label": "Потоковый вывод агрегатора",
|
|
155
|
+
"aggregator.stream_hint": "Отображать финальный синтез в реальном времени",
|
|
156
|
+
"aggregator.peer_label": "Режим взаимного консилиума",
|
|
157
|
+
"aggregator.peer_hint": "Включить раунд критики между кандидатами перед вынесением вердикта",
|
|
158
|
+
"aggregator.override_label": "Переопределение системного промпта",
|
|
159
|
+
"aggregator.override_hint": "Заменить системную инструкцию судьи на собственную",
|
|
160
|
+
"proposers.role_label": "Специализация кандидата",
|
|
161
|
+
"proposers.role_general": "Общий ассистент (General)",
|
|
162
|
+
"proposers.role_minimalist": "Минималист (Ponytail/KISS)",
|
|
163
|
+
"proposers.role_robustness": "Надёжность и безопасность",
|
|
164
|
+
"proposers.role_performance": "Производительность и оптимизация",
|
|
165
|
+
"proposers.role_tester": "Тестирование и валидация",
|
|
166
|
+
"leaderboard.filter_all": "Все модели",
|
|
167
|
+
"leaderboard.export_csv": "Экспорт CSV",
|
|
168
|
+
"leaderboard.export_json": "Экспорт JSON",
|
|
169
|
+
"aggregator.blind_label": "Слепое судейство (Blind Evaluation)",
|
|
170
|
+
"aggregator.blind_hint": "Анонимизировать ответы кандидатов, чтобы исключить предвзятость к конкретной модели",
|
|
171
|
+
"aggregator.timeout_label": "Таймаут агрегатора (сек)",
|
|
172
|
+
"proposers.timeout_label": "Таймаут кандидатов (сек)",
|
|
173
|
+
"leaderboard.title": "Таблица побед моделей (Leaderboard)",
|
|
174
|
+
"leaderboard.desc": "Рейтинг эффективности кандидатов по оценкам судьи за все проведённые раунды",
|
|
175
|
+
"leaderboard.model": "Модель",
|
|
176
|
+
"leaderboard.runs": "Раундов",
|
|
177
|
+
"leaderboard.wins": "Побед",
|
|
178
|
+
"leaderboard.winrate": "Винрейт",
|
|
179
|
+
"leaderboard.cost": "Расход токенов",
|
|
180
|
+
"leaderboard.empty": "История раундов пока пуста",
|
|
181
|
+
"aggregator.fallbacks_title": "Резервные модели-судьи",
|
|
182
|
+
"aggregator.fallbacks_desc": "Цепочка запасных моделей при отказе или превышении квот основного судьи",
|
|
183
|
+
"aggregator.add_fallback_btn": "Добавить резервную модель…",
|
|
184
|
+
"proposers.quorum_label": "Кворум ответов",
|
|
185
|
+
"proposers.quorum_hint": "Минимальное количество успешных ответов кандидатов для продолжения раунда",
|
|
186
|
+
"proposers.grace_label": "Льготное время ожидания (сек)",
|
|
187
|
+
"proposers.title": "Пул моделей-кандидатов (Proposers)",
|
|
188
|
+
"proposers.desc": "Список независимых моделей, параллельно генерирующих варианты ответа",
|
|
189
|
+
"proposers.parallel_count": "Параллельных потоков: {count}",
|
|
190
|
+
"proposers.candidate": "Кандидат #{index}",
|
|
191
|
+
"proposers.add_btn": "Добавить модель-кандидата…",
|
|
192
|
+
"proposers.temp_label": "Температура кандидата",
|
|
193
|
+
"proposers.temp_hint": "Степень вариативности ответа кандидата",
|
|
194
|
+
"stats.title": "Сводная телеметрия MoA",
|
|
195
|
+
"stats.desc": "Общая статистика генераций, экономия и средняя стоимость",
|
|
196
|
+
"stats.total_runs": "Всего раундов",
|
|
197
|
+
"stats.avg_cost": "Средняя стоимость",
|
|
198
|
+
"stats.active_models": "Активных моделей",
|
|
199
|
+
"stats.preset_count": "Пресетов",
|
|
200
|
+
"picker.select": "Выбрать модель",
|
|
201
|
+
"picker.search_placeholder": "Поиск модели по имени или провайдеру…",
|
|
202
|
+
"picker.found": "Найдено:",
|
|
203
|
+
"picker.of": "из",
|
|
204
|
+
"picker.clear": "Очистить",
|
|
205
|
+
"picker.none": "Модель не выбрана",
|
|
206
|
+
"picker.custom": "Указать вручную…",
|
|
207
|
+
"actions.save": "Сохранить конфигурацию",
|
|
208
|
+
"actions.saving": "Сохранение…",
|
|
209
|
+
"actions.saved": "Сохранено!",
|
|
210
|
+
"actions.retry": "Повторить",
|
|
211
|
+
"badge.disabled": "Отключено",
|
|
212
|
+
"config.enabled_label": "Включить модуль Mixture of Agents"
|
|
42
213
|
}
|
|
43
214
|
}
|
|
@@ -448,6 +448,21 @@
|
|
|
448
448
|
"overview.quick.syncTitle": "Синхронизировать конфигурации между устройствами (Git / WebDAV)",
|
|
449
449
|
"overview.quick.backupTitle": "Полный снимок с возможностью отката в любой момент",
|
|
450
450
|
"overview.nav.activity": "Активность",
|
|
451
|
-
"overview.nav.about": "О плагине"
|
|
451
|
+
"overview.nav.about": "О плагине",
|
|
452
|
+
"retention.appliesTo": "Применяется к: снимкам перед импортом + архивам запланированных резервных копий",
|
|
453
|
+
"retention.hint": "Определяет, сколько копий сохраняет автоочистка (общее правило для снимков и бэкапов). Закреплённые снимки и незавершённые точки восстановления никогда не удаляются.",
|
|
454
|
+
"retention.invalid": "Недопустимые параметры ротации — каждое поле должно быть целым числом в разрешённом диапазоне",
|
|
455
|
+
"retention.keepLast": "Хранить последних",
|
|
456
|
+
"retention.keepLastHint": "Хранить N самых свежих копий по времени; 0 отключает уровень «недавних»",
|
|
457
|
+
"retention.keepMonthly": "Хранить ежемесячных",
|
|
458
|
+
"retention.keepMonthlyHint": "Дополнительно сохранять самую свежую копию каждого месяца, не более N месяцев; 0 отключает",
|
|
459
|
+
"retention.keepYearly": "Хранить ежегодных",
|
|
460
|
+
"retention.keepYearlyHint": "Дополнительно сохранять самую свежую копию каждого года, не более N лет; 0 отключает",
|
|
461
|
+
"retention.months": "мес.",
|
|
462
|
+
"retention.summary": "Последних {keepLast} · ежемесячных {keepMonthly} · ежегодных {keepYearly}",
|
|
463
|
+
"retention.tiersOff": "Уровни не включены (эквивалентно «хранить только N самых свежих»)",
|
|
464
|
+
"retention.title": "Политика ротации копий",
|
|
465
|
+
"retention.unit": "копий",
|
|
466
|
+
"retention.years": "лет"
|
|
452
467
|
}
|
|
453
|
-
}
|
|
468
|
+
}
|
|
@@ -176,6 +176,61 @@
|
|
|
176
176
|
"voiceModeMirror": "В ответ на входящие голосовые",
|
|
177
177
|
"voiceModeOff": "Выключено (если не включён /voice)",
|
|
178
178
|
"webhookSecretHint": "Оставьте пустым для сохранения текущего",
|
|
179
|
-
"webhookUrlHint": "Полный HTTPS URL, на который Telegram отправляет POST-запросы"
|
|
179
|
+
"webhookUrlHint": "Полный HTTPS URL, на который Telegram отправляет POST-запросы",
|
|
180
|
+
"settings.loading": "Загрузка настроек шлюза мессенджеров…",
|
|
181
|
+
"settings.retry": "Повторить",
|
|
182
|
+
"settings.unavailable": "Настройки недоступны (хостовый модуль не готов).",
|
|
183
|
+
"header.title": "Шлюз Telegram и мессенджеров",
|
|
184
|
+
"header.sub": "Мост между DeepSeek Harness и Telegram: сессии, управление, уведомления и доступ с мобильных",
|
|
185
|
+
"badge.online": "Telegram онлайн (@{username})",
|
|
186
|
+
"badge.offline": "Telegram отключен",
|
|
187
|
+
"badge.pending": "Ожидание подключения бота…",
|
|
188
|
+
"sec.bot_title": "Параметры Telegram-бота",
|
|
189
|
+
"sec.bot_desc": "Укажите токен бота от @BotFather для приёма сообщений и запуска сессий DSH",
|
|
190
|
+
"sec.access_title": "Контроль доступа и белый список",
|
|
191
|
+
"sec.access_desc": "Ограничение доступа по Telegram User ID или разовым кодам сопряжения",
|
|
192
|
+
"sec.notify_title": "Уведомления о событиях",
|
|
193
|
+
"sec.notify_desc": "Оповещения в Telegram о завершении ответов и ошибках",
|
|
194
|
+
"field.token": "Bot Token (Telegram)",
|
|
195
|
+
"field.token_hint": "Токен бота от @BotFather (хранится безопасно в DSH Credentials)",
|
|
196
|
+
"field.allowed_users": "Разрешённые ID пользователей",
|
|
197
|
+
"field.allowed_users_hint": "Список Telegram ID через запятую (оставьте пустым для сопряжения по коду)",
|
|
198
|
+
"field.pairing_code": "Код сопряжения (Pairing Code)",
|
|
199
|
+
"field.pairing_code_hint": "Введите этот 6-значный код боту для авторизации нового устройства",
|
|
200
|
+
"field.notify_on_turn": "Уведомлять о завершении хода",
|
|
201
|
+
"field.notify_on_turn_hint": "Отправлять сообщение в Telegram, когда модель закончила длинный ответ",
|
|
202
|
+
"field.notify_on_error": "Оповещать об ошибках выполнения",
|
|
203
|
+
"field.notify_on_error_hint": "Срочные уведомления о падении агента или превышении лимитов",
|
|
204
|
+
"stat.active_chats": "Активных чатов",
|
|
205
|
+
"stat.messages_relayed": "Передано сообщений",
|
|
206
|
+
"stat.avg_latency": "Пинг до Telegram API",
|
|
207
|
+
"btn.ping": "Проверить связь (Ping)",
|
|
208
|
+
"btn.regenerate_code": "Новый код сопряжения",
|
|
209
|
+
"btn.disconnect": "Отключить бота",
|
|
210
|
+
"msg.ping_ok": "Связь с Telegram API установлена ({ms} мс)",
|
|
211
|
+
"msg.ping_failed": "Не удалось связаться с Telegram API: {error}",
|
|
212
|
+
"badge.running": "Шлюз запущен",
|
|
213
|
+
"badge.stopped": "Шлюз остановлен",
|
|
214
|
+
"badge.token_ok": "Токен настроен",
|
|
215
|
+
"badge.token_missing": "Токен отсутствует",
|
|
216
|
+
"badge.pairing_count": "Сопряжено устройств: {count}",
|
|
217
|
+
"badge.transport": "Транспорт: Long Polling",
|
|
218
|
+
"telegramSub": "Настройки Telegram Bot API и интеграции",
|
|
219
|
+
"agentSub": "Назначение модели и системных инструкций для Telegram-сессий",
|
|
220
|
+
"mediaSub": "Приём и отправка голосовых сообщений, фото и файлов",
|
|
221
|
+
"ttsSub": "Синтез речи (TTS) для голосовых ответов бота",
|
|
222
|
+
"pairingSub": "Управление авторизованными пользователями и разовыми кодами",
|
|
223
|
+
"diag.title": "Диагностика связи и Smoke-тест",
|
|
224
|
+
"diag.desc": "Проверка доступности Telegram Bot API, пинга и прав бота",
|
|
225
|
+
"diag.smoke_btn": "Запустить Smoke-тест",
|
|
226
|
+
"diag.smoke_testing": "Тестирование шлюза…",
|
|
227
|
+
"diag.smoke_ok": "Smoke-тест пройден успешно! Бот готов к работе.",
|
|
228
|
+
"diag.smoke_err": "Smoke-тест завершился с ошибкой: {error}",
|
|
229
|
+
"stats.title": "Метрики шлюза",
|
|
230
|
+
"stats.desc": "Текущая статистика передаваемых сообщений и времени аптайма",
|
|
231
|
+
"stats.sent": "Отправлено сообщений",
|
|
232
|
+
"stats.errors": "Ошибок шлюза",
|
|
233
|
+
"stats.uptime": "Время работы",
|
|
234
|
+
"stats.active_chats": "Активных чатов"
|
|
180
235
|
}
|
|
181
236
|
}
|
package/ru-plugins/35-gitea.json
CHANGED
|
@@ -81,6 +81,94 @@
|
|
|
81
81
|
"tokenEnvHint": "Имя учётных данных DSH, а не сам токен. По умолчанию GITEA_TOKEN.",
|
|
82
82
|
"tokenOff": "Токен не настроен",
|
|
83
83
|
"tokenOn": "Токен настроен",
|
|
84
|
-
"unsaved": "Не сохранено"
|
|
84
|
+
"unsaved": "Не сохранено",
|
|
85
|
+
"sectionInstance": "Подключение и основные настройки",
|
|
86
|
+
"sectionDefaults": "Значения по умолчанию и Git Worktrees",
|
|
87
|
+
"sectionWebhooks": "Вебхуки и уведомления",
|
|
88
|
+
"sectionScheduler": "Фоновый планировщик триажа",
|
|
89
|
+
"sectionInstances": "Дополнительные инстансы",
|
|
90
|
+
"toggleAdvanced": "Расширенные настройки",
|
|
91
|
+
"tabInspector": "Git Inspector",
|
|
92
|
+
"tabGraph": "Граф и CI",
|
|
93
|
+
"tabWebhooks": "Входящие вебхуки",
|
|
94
|
+
"tabScheduler": "Планировщик задач",
|
|
95
|
+
"inspector.title": "Инспектор Git и репозиториев",
|
|
96
|
+
"inspector.desc": "Просмотр активных веток, коммитов, worktree и незафиксированных изменений",
|
|
97
|
+
"inspector.refresh": "Обновить дерево Git",
|
|
98
|
+
"inspector.loading": "Считывание состояния репозитория…",
|
|
99
|
+
"inspector.empty": "Рабочие деревья и изменения не найдены",
|
|
100
|
+
"inspector.branch": "Текущая ветка: {name}",
|
|
101
|
+
"inspector.worktrees": "Активные Worktree ({count}):",
|
|
102
|
+
"inspector.unstaged": "Незафиксированные файлы ({count})",
|
|
103
|
+
"inspector.staged": "Файлы в индексе (Staged) ({count})",
|
|
104
|
+
"inspector.last_commit": "Последний коммит: {hash} — {msg}",
|
|
105
|
+
"inspector.clean_state": "Рабочее дерево чисто (Clean)",
|
|
106
|
+
"graph.title": "История коммитов и статус CI",
|
|
107
|
+
"graph.desc": "Визуальный граф веток, слияний и результатов автоматических тестов",
|
|
108
|
+
"graph.refresh": "Обновить граф",
|
|
109
|
+
"graph.ci_passing": "CI: Тесты пройдены",
|
|
110
|
+
"graph.ci_failing": "CI: Ошибки сборки",
|
|
111
|
+
"graph.ci_pending": "CI: Выполняется…",
|
|
112
|
+
"webhooks.title": "Входящие вебхуки Gitea",
|
|
113
|
+
"webhooks.desc": "Приём событий push, pull_request, issue с проверкой HMAC-SHA256 подписи",
|
|
114
|
+
"webhooks.endpoint": "URL вебхука: {url}",
|
|
115
|
+
"webhooks.secret": "Секретный ключ (HMAC Secret)",
|
|
116
|
+
"webhooks.secret_hint": "Секрет для верификации подписи X-Gitea-Signature",
|
|
117
|
+
"webhooks.recent": "Недавние события ({count})",
|
|
118
|
+
"webhooks.no_events": "События вебхуков ещё не поступали",
|
|
119
|
+
"scheduler.title": "Фоновый триаж и задачи по расписанию",
|
|
120
|
+
"scheduler.desc": "Автоматическая проверка новых задач (issues), напоминания DoD и ревью",
|
|
121
|
+
"scheduler.interval": "Интервал проверки (минуты)",
|
|
122
|
+
"scheduler.enabled": "Включить фоновый планировщик",
|
|
123
|
+
"scheduler.dod_reminder": "Напоминания Definition of Done (DoD)",
|
|
124
|
+
"scheduler.dod_hint": "Проверять чек-листы готовности перед закрытием PR и задач",
|
|
125
|
+
"scheduler.auto_triage": "Автоматический триаж новых Issue",
|
|
126
|
+
"scheduler.last_run": "Последний запуск: {time}",
|
|
127
|
+
"scheduler.next_run": "Следующий запуск: через {mins} мин",
|
|
128
|
+
"btn.trigger_triage": "Запустить триаж сейчас",
|
|
129
|
+
"btn.save_settings": "Сохранить параметры Gitea",
|
|
130
|
+
"msg.triage_started": "Фоновый триаж запущен",
|
|
131
|
+
"msg.saved": "Настройки Gitea успешно сохранены",
|
|
132
|
+
"defaultOwner": "Владелец / Организация по умолчанию",
|
|
133
|
+
"defaultOwnerHint": "Организация или пользователь в Gitea для создания репозиториев",
|
|
134
|
+
"defaultRepo": "Репозиторий по умолчанию",
|
|
135
|
+
"defaultRepoHint": "Основной репозиторий проекта",
|
|
136
|
+
"gitWrapper": "Пользовательский Git-враппер",
|
|
137
|
+
"gitWrapperHint": "Имя бинарника/скрипта-обёртки для Git (например, git-antigravity)",
|
|
138
|
+
"dodReminder": "Напоминания Definition of Done (DoD)",
|
|
139
|
+
"dodReminderHint": "Напоминать о критериях приёмки перед открытием или слиянием PR",
|
|
140
|
+
"forceHttpsUrls": "Принудительный HTTPS для URL репозиториев",
|
|
141
|
+
"forceHttpsUrlsHint": "Преобразовывать http:// ссылки в безопасный https://",
|
|
142
|
+
"timeoutMs": "Таймаут API запросов (мс)",
|
|
143
|
+
"timeoutMsHint": "Максимальное время ожидания ответа Gitea API",
|
|
144
|
+
"webhookSecretEnv": "Переменная окружения для HMAC-секрета",
|
|
145
|
+
"webhookSecretEnvHint": "Имя переменной с секретным ключом для валидации входящих вебхуков",
|
|
146
|
+
"notifyWebhook": "URL вебхука для уведомлений",
|
|
147
|
+
"notifyWebhookHint": "Внешний вебхук для отправки статусов триажа и событий",
|
|
148
|
+
"bgSchedulerEnabled": "Включить фоновый планировщик триажа",
|
|
149
|
+
"bgSchedulerEnabledHint": "Периодически проверять открытые задачи и пул-реквесты в фоне",
|
|
150
|
+
"bgSchedulerIntervalMin": "Интервал планировщика (минуты)",
|
|
151
|
+
"bgSchedulerIntervalMinHint": "Частота выполнения фонового триажа",
|
|
152
|
+
"bgSchedulerOwner": "Владелец для фонового триажа",
|
|
153
|
+
"bgSchedulerOwnerHint": "Пользователь или организация для фонового сканирования",
|
|
154
|
+
"bgSchedulerRepo": "Репозиторий для фонового триажа",
|
|
155
|
+
"bgSchedulerRepoHint": "Имя репозитория для фонового сканирования",
|
|
156
|
+
"bgSchedulerWebhook": "Вебхук для отчётов триажа",
|
|
157
|
+
"bgSchedulerWebhookHint": "URL для отправки дайджестов проверки задач",
|
|
158
|
+
"noInstances": "Дополнительные инстансы Gitea не настроены",
|
|
159
|
+
"drawerTitle": "Инспектор Git и Worktree",
|
|
160
|
+
"drawerClose": "Закрыть панель",
|
|
161
|
+
"drawerRefresh": "Обновить состояние Git",
|
|
162
|
+
"tabStatus": "Статус ветки и индекс",
|
|
163
|
+
"tabEvents": "Журнал событий",
|
|
164
|
+
"branch": "Текущая ветка:",
|
|
165
|
+
"upstream": "Ветка upstream:",
|
|
166
|
+
"statusClean": "Рабочее дерево чисто (Clean)",
|
|
167
|
+
"statusDirty": "Есть незафиксированные изменения",
|
|
168
|
+
"noChangesDesc": "Нет изменённых или неотслеживаемых файлов",
|
|
169
|
+
"activePr": "Активный Pull Request: #{number}",
|
|
170
|
+
"viewInGitea": "Открыть в Gitea ↗",
|
|
171
|
+
"recentEvents": "Недавние события репозитория",
|
|
172
|
+
"noEvents": "События не зафиксированы"
|
|
85
173
|
}
|
|
86
174
|
}
|
|
@@ -1,6 +1,164 @@
|
|
|
1
1
|
{
|
|
2
2
|
"dsh-lanmode": {
|
|
3
3
|
"sub": "mDNS (dsh.local), полифилы Web API, TLS для микрофона и PWA",
|
|
4
|
-
"title": "Локальный и мобильный доступ (dsh-lanmode)"
|
|
4
|
+
"title": "Локальный и мобильный доступ (dsh-lanmode)",
|
|
5
|
+
"quickConnect": "Быстрое подключение со смартфона или планшета",
|
|
6
|
+
"openQr": "Открыть QR-код",
|
|
7
|
+
"copyUrl": "Скопировать URL",
|
|
8
|
+
"copied": "Скопировано ✔",
|
|
9
|
+
"desktopMode": "Принудительный десктопный режим",
|
|
10
|
+
"desktopModeSub": "Отключает мобильную адаптацию и показывает полный десктопный UI",
|
|
11
|
+
"secNetwork": "Сетевые интерфейсы и привязка портов",
|
|
12
|
+
"secNetworkDesc": "Настройка локальных сетевых адаптеров, портов и режимов привязки",
|
|
13
|
+
"bindHostLabel": "Сетевой интерфейс для прослушивания (bindHost)",
|
|
14
|
+
"bindHostPh": "0.0.0.0 (все адаптеры), 192.168.1.x или 127.0.0.1",
|
|
15
|
+
"portLabel": "Порт веб-сервера (port)",
|
|
16
|
+
"portPh": "По умолчанию 3000 (оставьте пустым для авто)",
|
|
17
|
+
"modeLabel": "Режим локального доступа (mode)",
|
|
18
|
+
"modeAuto": "auto (автоопределение интерфейса)",
|
|
19
|
+
"modeLan": "lan (только локальная сеть)",
|
|
20
|
+
"modeLoopback": "loopback (только локальный компьютер)",
|
|
21
|
+
"secSecurity": "Безопасность и фильтрация IP",
|
|
22
|
+
"secSecurityDesc": "Разграничение прав по подсетям и контроль привилегированных действий",
|
|
23
|
+
"allowLabel": "Разрешённые подсети IP (allow)",
|
|
24
|
+
"allowPh": "192.168.1.0/24, 127.0.0.1 (пусто = разрешить всем)",
|
|
25
|
+
"adminAllowLabel": "Подсети с правами администратора (adminAllow)",
|
|
26
|
+
"adminAllowPh": "192.168.1.100, 10.0.0.0/24 (настройки и плагины)",
|
|
27
|
+
"guestAllowLabel": "Подсети с гостевым доступом (guestAllow)",
|
|
28
|
+
"guestAllowPh": "192.168.2.0/24 (только чат, настройки заблокированы)",
|
|
29
|
+
"unlockPrivilegedLabel": "Разрешить привилегированные вызовы (настройки, ключи) из LAN",
|
|
30
|
+
"secMobile": "Мобильный интерфейс, mDNS и PWA",
|
|
31
|
+
"secMobileDesc": "Локальное обнаружение, мобильные жесты и веб-приложение (PWA)",
|
|
32
|
+
"mdnsNameLabel": "Имя домена mDNS (mdnsName)",
|
|
33
|
+
"mdnsNamePh": "dsh.local (обязательно оканчивается на .local)",
|
|
34
|
+
"mdnsAnnounceLabel": "Анонсировать домен через mDNS (Zeroconf / Bonjour)",
|
|
35
|
+
"pwaLabel": "Внедрять манифест PWA и мобильные мета-теги viewport",
|
|
36
|
+
"mobileEnterLabel": "Клавиша Enter отправляет сообщение на сенсорной клавиатуре",
|
|
37
|
+
"diagnosticsLabel": "Включить эндпоинты диагностики (/dsh-lanmode/health, /probe)",
|
|
38
|
+
"secPolyfills": "Полифилы браузерных Web API (HTTP Shims)",
|
|
39
|
+
"secPolyfillsDesc": "Восстанавливает работу ограниченных API браузера на незащищённом HTTP",
|
|
40
|
+
"unblockSettingsLabel": "Разблокировать ограничение настроек для loopback",
|
|
41
|
+
"randomUuidLabel": "Полифил crypto.randomUUID для обычного HTTP",
|
|
42
|
+
"clipboardLabel": "Фолбэк navigator.clipboard.writeText для обычного HTTP",
|
|
43
|
+
"secAuth": "Аутентификация и защита входа",
|
|
44
|
+
"secAuthDesc": "Защита DSH логином и паролем для многопользовательских сетей",
|
|
45
|
+
"passwordAuthLabel": "Требовать обязательную авторизацию по логину и паролю",
|
|
46
|
+
"authUserLabel": "Имя пользователя администратора (authUser)",
|
|
47
|
+
"authSessionDaysLabel": "Срок действия сессии в днях (authSessionDays)",
|
|
48
|
+
"authPasswordLabel": "Пароль администратора (authPassword)",
|
|
49
|
+
"authPasswordPh": "Пароль для входа",
|
|
50
|
+
"authPasswordRefLabel": "Ссылка на секрет пароля (authPasswordRef)",
|
|
51
|
+
"authPasswordRefPh": "DSH_AUTH_PASSWORD или имя секрета в Credentials",
|
|
52
|
+
"secTunnel": "Удалённый доступ (Cloudflare Tunnel)",
|
|
53
|
+
"secTunnelDesc": "Безопасный доступ из интернета без белого IP и проброса портов",
|
|
54
|
+
"tunnelModeLabel": "Режим туннеля (tunnel)",
|
|
55
|
+
"tunnelOff": "off (выключен)",
|
|
56
|
+
"tunnelQuick": "quick (быстрый временный trycloudflare.com)",
|
|
57
|
+
"tunnelNamed": "named (постоянный туннель по токену)",
|
|
58
|
+
"tunnelTokenRefLabel": "Ссылка на токен туннеля (tunnelTokenRef)",
|
|
59
|
+
"tunnelTokenRefPh": "CF_TUNNEL_TOKEN или имя секрета в Credentials",
|
|
60
|
+
"tunnelPinLabel": "Требовать LAN PIN при входе через WAN-туннель Cloudflare",
|
|
61
|
+
"saveSettings": "Сохранить настройки LAN",
|
|
62
|
+
"saving": "Сохранение…",
|
|
63
|
+
"saveSuccess": "Настройки успешно сохранены ✔",
|
|
64
|
+
"saveError": "Ошибка сохранения настроек: ",
|
|
65
|
+
"logout": "Выйти из системы",
|
|
66
|
+
"logoutConfirm": "Вы уверены, что хотите выйти из DSH?",
|
|
67
|
+
"healthLink": "Открыть страницу диагностики (/dsh-lanmode/health) ↗",
|
|
68
|
+
"quickQrTitle": "📱 Вход с мобильного устройства",
|
|
69
|
+
"downloadProfile": "Профиль iOS (.mobileconfig)",
|
|
70
|
+
"downloadCa": "Корневой сертификат (.crt)",
|
|
71
|
+
"shareUrl": "Поделиться ↗",
|
|
72
|
+
"interfacesLabel": "Сетевой адаптер:",
|
|
73
|
+
"rttLabel": "Пинг",
|
|
74
|
+
"ms": "мс",
|
|
75
|
+
"activeMdns": "активен",
|
|
76
|
+
"phoneConnected": "📱 Готов к работе со смартфона",
|
|
77
|
+
"turnEndNotification": "Ассистент завершил ответ",
|
|
78
|
+
"approvalNotification": "Требуется подтверждение действия",
|
|
79
|
+
"toolPrefix": "Инструмент: ",
|
|
80
|
+
"retry": "Повторить",
|
|
81
|
+
"cardError": "⚠️ Ошибка карточки LanMode:",
|
|
82
|
+
"header.title": "Локальный доступ (LAN Mode)",
|
|
83
|
+
"header.sub": "Удобный доступ к DeepSeek Harness из локальной сети Wi-Fi/LAN с мобильных устройств",
|
|
84
|
+
"badge.active": "LAN активен ({ip})",
|
|
85
|
+
"badge.local_only": "Только localhost",
|
|
86
|
+
"section.qr": "Подключение по QR-коду",
|
|
87
|
+
"section.qr_desc": "Отсканируйте код камерой смартфона для мгновенного перехода в чат DSH",
|
|
88
|
+
"section.network": "Сетевые интерфейсы и адреса",
|
|
89
|
+
"section.network_desc": "Выберите сетевой адаптер для трансляции интерфейса в локальную сеть",
|
|
90
|
+
"section.security": "Безопасность и пароли доступа",
|
|
91
|
+
"section.security_desc": "Защита входа в LAN-режиме с помощью PIN-кода или токена сессии",
|
|
92
|
+
"field.bind_address": "Сетевой интерфейс (IP)",
|
|
93
|
+
"field.bind_address_hint": "IP-адрес в локальной сети (обычно 192.168.x.x или 10.x.x.x)",
|
|
94
|
+
"field.port": "Порт",
|
|
95
|
+
"field.port_hint": "Порт веб-сервера (по умолчанию 3000)",
|
|
96
|
+
"field.pin_auth": "Защита PIN-кодом",
|
|
97
|
+
"field.pin_auth_hint": "Требовать 4-значный PIN-код при первом входе с мобильного устройства",
|
|
98
|
+
"field.pin_code": "Установленный PIN-код",
|
|
99
|
+
"field.token_ttl": "Срок действия сессии (часы)",
|
|
100
|
+
"field.token_ttl_hint": "Время хранения авторизации на мобильном устройстве",
|
|
101
|
+
"field.https_proxy": "Использовать HTTPS / reverse proxy",
|
|
102
|
+
"field.https_proxy_hint": "Включите, если используете Nginx/Caddy с SSL-сертификатом",
|
|
103
|
+
"modal.qr_title": "Сканируйте для подключения",
|
|
104
|
+
"modal.qr_sub": "Убедитесь, что смартфон подключен к той же Wi-Fi сети",
|
|
105
|
+
"modal.url_label": "Адрес для браузера:",
|
|
106
|
+
"modal.close": "Закрыть",
|
|
107
|
+
"btn.save": "Сохранить настройки LAN",
|
|
108
|
+
"btn.regenerate_pin": "Сгенерировать новый PIN",
|
|
109
|
+
"btn.refresh_ips": "Обновить список IP",
|
|
110
|
+
"stat.connected_devices": "Подключено устройств",
|
|
111
|
+
"stat.last_device": "Последнее устройство",
|
|
112
|
+
"stat.traffic": "LAN трафик",
|
|
113
|
+
"msg.saved": "Параметры LAN-доступа сохранены",
|
|
114
|
+
"msg.pin_changed": "Новый PIN-код установлен: {pin}",
|
|
115
|
+
"status.listening": "Слушает на http://{ip}:{port}",
|
|
116
|
+
"status.stopped": "Остановлен",
|
|
117
|
+
"err.bind_failed": "Не удалось занять порт {port}: {error}",
|
|
118
|
+
"err.invalid_pin": "Неверный PIN-код",
|
|
119
|
+
"notifStatus": "Статус уведомлений в браузере:",
|
|
120
|
+
"notifEnable": "Включить уведомления",
|
|
121
|
+
"notifGranted": "Разрешены ✔",
|
|
122
|
+
"notifDenied": "Заблокированы пользователем",
|
|
123
|
+
"telemetryTitle": "Телеметрия локальной сети",
|
|
124
|
+
"telemetryRtt": "Сетевая задержка (RTT)",
|
|
125
|
+
"telemetryConns": "Активных WebSocket-соединений",
|
|
126
|
+
"telemetrySent": "Передано данных",
|
|
127
|
+
"telemetryRecv": "Принято данных",
|
|
128
|
+
"devicesTitle": "Подключённые устройства",
|
|
129
|
+
"devicesSub": "Список мобильных устройств и браузеров, авторизованных в LAN-режиме",
|
|
130
|
+
"devicesIp": "IP-адрес",
|
|
131
|
+
"devicesUa": "Устройство / Браузер",
|
|
132
|
+
"devicesLastSeen": "Последняя активность",
|
|
133
|
+
"devicesActions": "Действия",
|
|
134
|
+
"deviceCurrent": "Текущее устройство",
|
|
135
|
+
"deviceRevoke": "Отозвать доступ",
|
|
136
|
+
"deviceRevokeAllOthers": "Отозвать доступ всем остальным",
|
|
137
|
+
"deviceRevokeConfirm": "Вы уверены, что хотите отозвать доступ для этого устройства?",
|
|
138
|
+
"deviceRevokeAllConfirm": "Отозвать доступ всем мобильным устройствам, кроме текущего?",
|
|
139
|
+
"deviceNoDevices": "Подключённых мобильных устройств не обнаружено",
|
|
140
|
+
"secRouting": "Маршрутизация и проксирование",
|
|
141
|
+
"secRoutingDesc": "Параметры прямого доступа и проксирования запросов локальной сети",
|
|
142
|
+
"modeDirect": "direct (прямое подключение)",
|
|
143
|
+
"modeProxy": "proxy (через реверс-прокси Nginx/Caddy)",
|
|
144
|
+
"directPortLabel": "Порт прямого подключения",
|
|
145
|
+
"streamTimeoutLabel": "Таймаут стриминга ответов (сек)",
|
|
146
|
+
"streamTimeoutPh": "По умолчанию 120",
|
|
147
|
+
"privilegedExtraLabel": "Дополнительные доверенные IP",
|
|
148
|
+
"privilegedExtraPh": "192.168.1.50, 10.0.0.5",
|
|
149
|
+
"secTls": "Безопасное соединение (TLS / SSL)",
|
|
150
|
+
"secTlsDesc": "Шифрование трафика для работы аудио/видео и PWA на мобильных устройствах",
|
|
151
|
+
"tlsModeLabel": "Режим TLS",
|
|
152
|
+
"tlsSelfSigned": "self-signed (автоматический самоподписанный сертификат)",
|
|
153
|
+
"tlsFiles": "files (пользовательские файлы сертификата и ключа)",
|
|
154
|
+
"tlsOff": "off (обычный незашифрованный HTTP)",
|
|
155
|
+
"tlsHostsLabel": "Домены и IP в сертификате",
|
|
156
|
+
"tlsHostsPh": "dsh.local, 192.168.1.111",
|
|
157
|
+
"tlsCertLabel": "Путь к файлу сертификата (.crt)",
|
|
158
|
+
"tlsKeyLabel": "Путь к файлу закрытого ключа (.key)",
|
|
159
|
+
"secAccess": "Политика авторизации и LAN PIN",
|
|
160
|
+
"secAccessDesc": "Требование ввода PIN-кода для новых устройств в локальной сети",
|
|
161
|
+
"lanPinRefLabel": "Ссылка на секрет LAN PIN",
|
|
162
|
+
"lanPinRefPh": "LAN_PIN или имя секрета в Credentials"
|
|
5
163
|
}
|
|
6
|
-
}
|
|
164
|
+
}
|
|
@@ -349,6 +349,34 @@
|
|
|
349
349
|
"registryScanHint": "Опрос реестров npm: доступность, пинг и последняя версия dsh-plugin-console для выбора основного источника",
|
|
350
350
|
"registryScanNoVersion": "Пакет отсутствует в этом реестре",
|
|
351
351
|
"registryScanSummary": "Сканирование завершено: {ok} из {total} доступны",
|
|
352
|
-
"registryScanning": "Сканирование…"
|
|
352
|
+
"registryScanning": "Сканирование…",
|
|
353
|
+
"adoptableDetected": "Теперь совместим: версия {version} прошла проверку исходного кода — нажмите «Адаптирован — разблокировать» для включения (автоматически никогда не включается)",
|
|
354
|
+
"compatGateAutoDetect": "Проверять адаптированные плагины при открытии (только подсказка)",
|
|
355
|
+
"compatGateAutoDisable": "Автоматически отключать несовместимые плагины при обновлении",
|
|
356
|
+
"compatGateHint": "Выключите для полностью ручного управления: обновление только выдаст предупреждение и не изменит тумблеры, а подсказки проверки отображаться не будут",
|
|
357
|
+
"compatGateLabel": "Гейт совместимости",
|
|
358
|
+
"compatGateSaved": "Настройки гейта совместимости сохранены",
|
|
359
|
+
"fwFailedButUpgraded": "Сам фреймворк уже обновлён до {v} и активен — не удался только финальный шаг «перезапуск сервиса». Используйте перезапуск сервиса для подтверждения или выполните откат при необходимости.",
|
|
360
|
+
"fwPanelAvailable": "Доступно обновление: {v}",
|
|
361
|
+
"fwPanelBtn": "Фреймворк",
|
|
362
|
+
"fwPanelCheckFailed": "Не удалось проверить версию: {err}",
|
|
363
|
+
"fwPanelChecking": "проверка…",
|
|
364
|
+
"fwPanelConfirmBody": "Обновить до {v}? Скрипт сохранит резервную копию конфигурации, предварительно отключит несовместимые плагины, остановит сервис, установит новую версию и перезапустит её; при сбое запуска сначала изолирует проблему и повторит попытку, и только затем выполнит полный откат.",
|
|
365
|
+
"fwPanelCurrent": "Установлено",
|
|
366
|
+
"fwPanelNoRecord": "Записей об обновлениях пока нет (последние действия по обновлению/откату всегда отображаются здесь)",
|
|
367
|
+
"fwPanelRecheck": "Перепроверить версию",
|
|
368
|
+
"fwPanelRefreshStatus": "Обновить статус",
|
|
369
|
+
"fwPanelTitle": "Обновление фреймворка DSH",
|
|
370
|
+
"fwPanelUpToDate": "Актуальная версия (последняя {latest} · следующая {next})",
|
|
371
|
+
"fwRollbackDone": "Уже выполнен откат до {v} (это версия из снимка; более ранней версии для восстановления нет)",
|
|
372
|
+
"gateBtn": "Гейт совместимости",
|
|
373
|
+
"gateModalTitle": "Гейт совместимости плагинов",
|
|
374
|
+
"gatePendingInfo": "Ожидают адаптации: {n} плагин(ов) — зафиксировано проверкой обновления или карантином запуска; разблокируйте после обновления плагина",
|
|
375
|
+
"gatePendingNone": "Нет плагинов, ожидающих проверки",
|
|
376
|
+
"gateTitle": "Совместимость плагинов",
|
|
377
|
+
"riskyEnableBody": "Этот плагин признан несовместимым с текущим фреймворком (автоматически отключён во время обновления). Принудительное включение может привести к сбою следующего запуска DSH и потребовать ручного восстановления. Принудительно включить?",
|
|
378
|
+
"riskyEnableCancel": "Отмена",
|
|
379
|
+
"riskyEnableConfirm": "Принудительно включить",
|
|
380
|
+
"riskyEnableTitle": "Принудительно включить несовместимый плагин?"
|
|
353
381
|
}
|
|
354
382
|
}
|